summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore2
-rw-r--r--CMakeLists.txt2
-rw-r--r--THIRDPARTY360
-rw-r--r--VERSION4
-rw-r--r--client/mysql.cc2
-rw-r--r--client/mysqldump.c6
-rw-r--r--client/mysqlimport.c17
-rw-r--r--client/mysqltest.cc8
-rw-r--r--debian/additions/mariadb.conf.d/50-server.cnf4
-rwxr-xr-xdebian/autobake-deb.sh17
-rw-r--r--debian/changelog2
-rw-r--r--debian/control29
-rw-r--r--debian/not-installed1
-rw-r--r--debian/source/lintian-overrides28
-rw-r--r--extra/innochecksum.cc8
-rw-r--r--extra/mariabackup/backup_copy.cc2
-rw-r--r--extra/mariabackup/backup_mysql.cc94
-rw-r--r--extra/mariabackup/backup_mysql.h8
-rw-r--r--include/m_ctype.h181
-rw-r--r--include/my_rnd.h1
-rw-r--r--include/my_sys.h133
-rw-r--r--include/sslopt-longopts.h2
-rw-r--r--include/sslopt-vars.h2
-rw-r--r--libmysqld/lib_sql.cc6
-rw-r--r--man/comp_err.12
-rw-r--r--man/galera_new_cluster.12
-rw-r--r--man/galera_recovery.12
-rw-r--r--man/innochecksum.12
-rw-r--r--man/mariabackup.12
-rw-r--r--man/mariadb-conv.12
-rw-r--r--man/mariadb-service-convert.12
-rw-r--r--man/mbstream.12
-rw-r--r--man/msql2mysql.12
-rw-r--r--man/my_print_defaults.12
-rw-r--r--man/my_safe_process.12
-rw-r--r--man/myisam_ftdump.12
-rw-r--r--man/myisamchk.12
-rw-r--r--man/myisamlog.12
-rw-r--r--man/myisampack.12
-rw-r--r--man/myrocks_hotbackup.12
-rw-r--r--man/mysql-stress-test.pl.12
-rw-r--r--man/mysql-test-run.pl.12
-rw-r--r--man/mysql.12
-rw-r--r--man/mysql.server.12
-rw-r--r--man/mysql_client_test.12
-rw-r--r--man/mysql_config.12
-rw-r--r--man/mysql_convert_table_format.12
-rw-r--r--man/mysql_find_rows.12
-rw-r--r--man/mysql_fix_extensions.12
-rw-r--r--man/mysql_install_db.12
-rw-r--r--man/mysql_ldb.12
-rw-r--r--man/mysql_plugin.12
-rw-r--r--man/mysql_secure_installation.12
-rw-r--r--man/mysql_setpermission.12
-rw-r--r--man/mysql_tzinfo_to_sql.12
-rw-r--r--man/mysql_upgrade.12
-rw-r--r--man/mysql_waitpid.12
-rw-r--r--man/mysqlaccess.12
-rw-r--r--man/mysqladmin.12
-rw-r--r--man/mysqlbinlog.12
-rw-r--r--man/mysqlcheck.12
-rw-r--r--man/mysqld.82
-rw-r--r--man/mysqld_multi.12
-rw-r--r--man/mysqld_safe.12
-rw-r--r--man/mysqld_safe_helper.12
-rw-r--r--man/mysqldump.12
-rw-r--r--man/mysqldumpslow.12
-rw-r--r--man/mysqlhotcopy.12
-rw-r--r--man/mysqlimport.12
-rw-r--r--man/mysqlshow.12
-rw-r--r--man/mysqlslap.12
-rw-r--r--man/mysqltest.12
-rw-r--r--man/mytop.12
-rw-r--r--man/perror.12
-rw-r--r--man/replace.12
-rw-r--r--man/resolve_stack_dump.12
-rw-r--r--man/resolveip.12
-rw-r--r--man/wsrep_sst_common.12
-rw-r--r--man/wsrep_sst_mariabackup.12
-rw-r--r--man/wsrep_sst_mysqldump.12
-rw-r--r--man/wsrep_sst_rsync.12
-rw-r--r--man/wsrep_sst_rsync_wan.12
-rw-r--r--mysql-test/include/check-testcase.test2
-rw-r--r--mysql-test/include/check_qep.inc57
-rw-r--r--mysql-test/include/ctype_casefolding.inc14
-rw-r--r--mysql-test/include/ctype_casefolding_supplementary.inc16
-rw-r--r--mysql-test/include/ctype_uca1400_ids_using_convert.inc21
-rw-r--r--mysql-test/include/ctype_uca1400_ids_using_set_names.inc17
-rw-r--r--mysql-test/include/default_client.cnf3
-rw-r--r--mysql-test/include/execute_with_statistics.inc30
-rw-r--r--mysql-test/include/expect_qep.inc45
-rw-r--r--mysql-test/include/reset_slave.inc58
-rw-r--r--mysql-test/include/rpl_change_topology.inc9
-rw-r--r--mysql-test/include/rpl_end.inc2
-rw-r--r--mysql-test/include/rpl_reset.inc4
-rw-r--r--mysql-test/include/setup_fake_relay_log.inc2
-rw-r--r--mysql-test/include/test_fieldsize.inc5
-rw-r--r--mysql-test/main/alter_table.test6
-rw-r--r--mysql-test/main/check_constraint.result4
-rw-r--r--mysql-test/main/check_constraint.test2
-rw-r--r--mysql-test/main/create.result7
-rw-r--r--mysql-test/main/create.test6
-rw-r--r--mysql-test/main/ctype_collate_context.result1774
-rw-r--r--mysql-test/main/ctype_collate_context.test4
-rw-r--r--mysql-test/main/ctype_ldml.result205
-rw-r--r--mysql-test/main/ctype_ldml.test47
-rw-r--r--mysql-test/main/ctype_ucs2_uca.result578
-rw-r--r--mysql-test/main/ctype_ucs2_uca.test18
-rw-r--r--mysql-test/main/ctype_utf16_uca.result579
-rw-r--r--mysql-test/main/ctype_utf16_uca.test19
-rw-r--r--mysql-test/main/ctype_utf32_uca.result579
-rw-r--r--mysql-test/main/ctype_utf32_uca.test18
-rw-r--r--mysql-test/main/ctype_utf8.result2
-rw-r--r--mysql-test/main/ctype_utf8.test2
-rw-r--r--mysql-test/main/ctype_utf8_uca.result980
-rw-r--r--mysql-test/main/ctype_utf8_uca.test48
-rw-r--r--mysql-test/main/ctype_utf8mb4.test1
-rw-r--r--mysql-test/main/ctype_utf8mb4_uca.result4906
-rw-r--r--mysql-test/main/ctype_utf8mb4_uca.test307
-rw-r--r--mysql-test/main/ctype_utf8mb4_uca1400_ai_ci_casefold.result2927
-rw-r--r--mysql-test/main/ctype_utf8mb4_uca1400_ai_ci_casefold.test15
-rw-r--r--mysql-test/main/ctype_utf8mb4_uca_allkeys1400.result120
-rw-r--r--mysql-test/main/ctype_utf8mb4_uca_allkeys1400.test128
-rw-r--r--mysql-test/main/default.result26
-rw-r--r--mysql-test/main/default.test2
-rw-r--r--mysql-test/main/fast_prefix_index_fetch_innodb.result228
-rw-r--r--mysql-test/main/fast_prefix_index_fetch_innodb.test522
-rw-r--r--mysql-test/main/func_default.result2
-rw-r--r--mysql-test/main/func_default.test2
-rw-r--r--mysql-test/main/func_des_encrypt.result39
-rw-r--r--mysql-test/main/func_des_encrypt.test17
-rw-r--r--mysql-test/main/func_encrypt.result144
-rw-r--r--mysql-test/main/func_encrypt.test4
-rw-r--r--mysql-test/main/func_encrypt_nossl.result33
-rw-r--r--mysql-test/main/func_encrypt_nossl.test2
-rw-r--r--mysql-test/main/func_encrypt_ucs2.result6
-rw-r--r--mysql-test/main/func_encrypt_ucs2.test2
-rw-r--r--mysql-test/main/func_hybrid_type.result42
-rw-r--r--mysql-test/main/func_math.result4
-rw-r--r--mysql-test/main/func_math.test4
-rw-r--r--mysql-test/main/func_str.result176
-rw-r--r--mysql-test/main/func_str.test108
-rw-r--r--mysql-test/main/greedy_optimizer.result2258
-rw-r--r--mysql-test/main/greedy_optimizer.test578
-rw-r--r--mysql-test/main/information_schema.result34
-rw-r--r--mysql-test/main/information_schema_routines.result20
-rw-r--r--mysql-test/main/innodb_ext_key.result2
-rw-r--r--mysql-test/main/join.result4
-rw-r--r--mysql-test/main/join.test4
-rw-r--r--mysql-test/main/join_cache.result2
-rw-r--r--mysql-test/main/join_cache.test2
-rw-r--r--mysql-test/main/join_nested.result34
-rw-r--r--mysql-test/main/join_nested.test1
-rw-r--r--mysql-test/main/join_nested_jcl6.result28
-rw-r--r--mysql-test/main/join_outer.result10
-rw-r--r--mysql-test/main/join_outer_innodb.result8
-rw-r--r--mysql-test/main/join_outer_jcl6.result14
-rw-r--r--mysql-test/main/mysql_upgrade-6984.result1
-rw-r--r--mysql-test/main/mysql_upgrade-6984.test4
-rw-r--r--mysql-test/main/mysql_upgrade.opt1
-rw-r--r--mysql-test/main/mysqlbinlog-innodb.result4
-rw-r--r--mysql-test/main/mysqlbinlog.result20
-rw-r--r--mysql-test/main/mysqlbinlog_row_compressed.result2
-rw-r--r--mysql-test/main/mysqlbinlog_row_minimal.result4
-rw-r--r--mysql-test/main/mysqlbinlog_stmt_compressed.result2
-rw-r--r--mysql-test/main/mysqld--help.result30
-rw-r--r--mysql-test/main/mysqld--help.test3
-rw-r--r--mysql-test/main/mysqldump.result2
-rw-r--r--mysql-test/main/null.result50
-rw-r--r--mysql-test/main/null.test113
-rw-r--r--mysql-test/main/old-mode.result4
-rw-r--r--mysql-test/main/old-mode.test4
-rw-r--r--mysql-test/main/openssl_1.test2
-rw-r--r--mysql-test/main/opt_trace.result5878
-rw-r--r--mysql-test/main/opt_trace.test3
-rw-r--r--mysql-test/main/opt_trace_index_merge.result38
-rw-r--r--mysql-test/main/opt_trace_index_merge_innodb.result55
-rw-r--r--mysql-test/main/opt_trace_security.result76
-rw-r--r--mysql-test/main/opt_tvc.result8
-rw-r--r--mysql-test/main/partition_alter.result4
-rw-r--r--mysql-test/main/partition_alter.test4
-rw-r--r--mysql-test/main/query_cache.result25
-rw-r--r--mysql-test/main/query_cache.test32
-rw-r--r--mysql-test/main/selectivity.result12
-rw-r--r--mysql-test/main/selectivity_innodb.result12
-rw-r--r--mysql-test/main/show_check.result28
-rw-r--r--mysql-test/main/skip_grants.result14
-rw-r--r--mysql-test/main/skip_grants.test21
-rw-r--r--mysql-test/main/sp-anchor-type.result2
-rw-r--r--mysql-test/main/ssl_7937,nossl.result6
-rw-r--r--mysql-test/main/ssl_7937.result6
-rw-r--r--mysql-test/main/ssl_7937.test6
-rw-r--r--mysql-test/main/ssl_and_innodb.result2
-rw-r--r--mysql-test/main/subselect2.result16
-rw-r--r--mysql-test/main/subselect2.test4
-rw-r--r--mysql-test/main/subselect_mat.result15
-rw-r--r--mysql-test/main/subselect_sj.result16
-rw-r--r--mysql-test/main/subselect_sj2.result23
-rw-r--r--mysql-test/main/subselect_sj2.test6
-rw-r--r--mysql-test/main/subselect_sj2_jcl6.result23
-rw-r--r--mysql-test/main/subselect_sj2_mat.result62
-rw-r--r--mysql-test/main/subselect_sj_jcl6.result22
-rw-r--r--mysql-test/main/subselect_sj_mat.result43
-rw-r--r--mysql-test/main/subselect_sj_mat.test1
-rw-r--r--mysql-test/main/subselect_sj_nonmerged.result4
-rw-r--r--mysql-test/main/system_mysql_db.result8
-rw-r--r--mysql-test/main/system_mysql_db_fix40123.result12
-rw-r--r--mysql-test/main/system_mysql_db_fix40123.test4
-rw-r--r--mysql-test/main/system_mysql_db_fix50030.result14
-rw-r--r--mysql-test/main/system_mysql_db_fix50030.test6
-rw-r--r--mysql-test/main/system_mysql_db_fix50117.result8
-rw-r--r--mysql-test/main/system_mysql_db_fix50568.result20
-rw-r--r--mysql-test/main/table_elim.result319
-rw-r--r--mysql-test/main/table_elim.test153
-rw-r--r--mysql-test/main/timezone2.result4
-rw-r--r--mysql-test/main/timezone2.test4
-rw-r--r--mysql-test/main/trigger_null-8605.result2
-rw-r--r--mysql-test/main/trigger_null-8605.test2
-rw-r--r--mysql-test/main/type_temporal_mysql56_debug.result98
-rw-r--r--mysql-test/main/type_timestamp.result2
-rw-r--r--mysql-test/main/type_timestamp.test2
-rw-r--r--mysql-test/main/type_timestamp_hires.result18
-rw-r--r--mysql-test/main/user_var-binlog.result2
-rw-r--r--mysql-test/main/variables.result36
-rw-r--r--mysql-test/main/variables.test18
-rw-r--r--mysql-test/std_data/ldml/Index.xml3
-rw-r--r--mysql-test/std_data/unicode/allkeys1400.txt33925
-rw-r--r--mysql-test/suite/atomic/disabled.def12
-rw-r--r--mysql-test/suite/binlog/r/binlog_mysqlbinlog2.result70
-rw-r--r--mysql-test/suite/binlog/r/binlog_mysqlbinlog_row.result4
-rw-r--r--mysql-test/suite/binlog/r/binlog_mysqlbinlog_row_innodb.result8
-rw-r--r--mysql-test/suite/binlog/r/binlog_mysqlbinlog_row_myisam.result8
-rw-r--r--mysql-test/suite/binlog/r/binlog_mysqlbinlog_row_trans.result2
-rw-r--r--mysql-test/suite/binlog/r/binlog_row_annotate.result12
-rw-r--r--mysql-test/suite/binlog/r/binlog_row_ctype_ucs.result4
-rw-r--r--mysql-test/suite/binlog/r/binlog_row_mysqlbinlog_options.result4
-rw-r--r--mysql-test/suite/binlog/r/binlog_stm_ctype_ucs.result4
-rw-r--r--mysql-test/suite/binlog/r/binlog_table_map_optional_metadata.result5
-rw-r--r--mysql-test/suite/binlog/r/binlog_unsafe.result3
-rw-r--r--mysql-test/suite/binlog/r/flashback.result4
-rw-r--r--mysql-test/suite/binlog/t/binlog_table_map_optional_metadata.test3
-rw-r--r--mysql-test/suite/binlog/t/binlog_unsafe.test3
-rw-r--r--mysql-test/suite/binlog_encryption/binlog_mdev_20574_old_binlog.result2
-rw-r--r--mysql-test/suite/binlog_encryption/binlog_mdev_20574_old_binlog.test2
-rw-r--r--mysql-test/suite/binlog_encryption/binlog_row_annotate.result6
-rw-r--r--mysql-test/suite/binlog_encryption/encrypted_master_switch_to_unencrypted_coords.result9
-rw-r--r--mysql-test/suite/binlog_encryption/encrypted_master_switch_to_unencrypted_coords.test10
-rw-r--r--mysql-test/suite/binlog_encryption/multisource.result3
-rw-r--r--mysql-test/suite/binlog_encryption/rpl_binlog_errors.result5
-rw-r--r--mysql-test/suite/binlog_encryption/rpl_cant_read_event_incident.result9
-rw-r--r--mysql-test/suite/binlog_encryption/rpl_checksum.result9
-rw-r--r--mysql-test/suite/binlog_encryption/rpl_corruption.result5
-rw-r--r--mysql-test/suite/binlog_encryption/rpl_gtid_basic.result6
-rw-r--r--mysql-test/suite/binlog_encryption/rpl_mixed_binlog_max_cache_size.result5
-rw-r--r--mysql-test/suite/binlog_encryption/rpl_semi_sync.result8
-rw-r--r--mysql-test/suite/binlog_encryption/rpl_skip_replication.result5
-rw-r--r--mysql-test/suite/compat/maxdb/rpl_mariadb_timestamp.result6
-rw-r--r--mysql-test/suite/compat/maxdb/rpl_mariadb_timestamp.test3
-rw-r--r--mysql-test/suite/compat/maxdb/type_timestamp.result20
-rw-r--r--mysql-test/suite/compat/oracle/r/sp.result2
-rw-r--r--mysql-test/suite/engines/funcs/r/db_alter_collate_ascii.result184
-rw-r--r--mysql-test/suite/engines/funcs/r/db_alter_collate_utf8.result184
-rw-r--r--mysql-test/suite/engines/funcs/r/ix_index_non_string.result2
-rw-r--r--mysql-test/suite/engines/funcs/r/ix_unique_non_string.result2
-rw-r--r--mysql-test/suite/engines/funcs/r/rpl_000010.result5
-rw-r--r--mysql-test/suite/engines/funcs/r/rpl_change_master.result5
-rw-r--r--mysql-test/suite/engines/funcs/r/rpl_log_pos.result4
-rw-r--r--mysql-test/suite/engines/funcs/r/rpl_row_reset_slave.result13
-rw-r--r--mysql-test/suite/engines/funcs/r/rpl_row_until.result4
-rw-r--r--mysql-test/suite/engines/funcs/r/rpl_server_id2.result3
-rw-r--r--mysql-test/suite/engines/funcs/r/rpl_sp.result2
-rw-r--r--mysql-test/suite/engines/funcs/r/rpl_stm_reset_slave.result13
-rw-r--r--mysql-test/suite/engines/funcs/r/rpl_trigger.result13
-rw-r--r--mysql-test/suite/engines/funcs/r/ta_2part_column_to_pk.result8
-rw-r--r--mysql-test/suite/engines/funcs/r/ta_2part_diff_to_pk.result128
-rw-r--r--mysql-test/suite/engines/funcs/r/ta_3part_column_to_pk.result12
-rw-r--r--mysql-test/suite/engines/funcs/r/ta_add_column.result144
-rw-r--r--mysql-test/suite/engines/funcs/r/ta_add_column2.result8
-rw-r--r--mysql-test/suite/engines/funcs/r/ta_add_column_first.result92
-rw-r--r--mysql-test/suite/engines/funcs/r/ta_add_column_first2.result8
-rw-r--r--mysql-test/suite/engines/funcs/r/ta_add_column_middle.result240
-rw-r--r--mysql-test/suite/engines/funcs/r/ta_add_column_middle2.result8
-rw-r--r--mysql-test/suite/engines/funcs/r/ta_add_string2.result16
-rw-r--r--mysql-test/suite/engines/funcs/r/ta_add_string_first2.result16
-rw-r--r--mysql-test/suite/engines/funcs/r/ta_add_string_middle2.result32
-rw-r--r--mysql-test/suite/engines/funcs/r/ta_add_unique_index.result72
-rw-r--r--mysql-test/suite/engines/funcs/r/ta_column_to_index.result48
-rw-r--r--mysql-test/suite/engines/funcs/r/ta_column_to_not_null.result4
-rw-r--r--mysql-test/suite/engines/funcs/r/ta_column_to_null.result4
-rw-r--r--mysql-test/suite/engines/funcs/r/ta_column_to_pk.result4
-rw-r--r--mysql-test/suite/engines/funcs/r/ta_drop_column.result12
-rw-r--r--mysql-test/suite/engines/funcs/r/ta_drop_index.result24
-rw-r--r--mysql-test/suite/engines/funcs/r/ta_drop_pk_number.result4
-rw-r--r--mysql-test/suite/engines/funcs/r/ta_rename.result16
-rw-r--r--mysql-test/suite/engines/funcs/r/tc_column_key.result2
-rw-r--r--mysql-test/suite/engines/funcs/r/tc_column_not_null.result2
-rw-r--r--mysql-test/suite/engines/funcs/r/tc_column_primary_key_number.result2
-rw-r--r--mysql-test/suite/engines/funcs/r/tc_column_unique_key.result2
-rw-r--r--mysql-test/suite/engines/funcs/r/tc_multicolumn_different.result192
-rw-r--r--mysql-test/suite/engines/funcs/r/tc_multicolumn_same.result6
-rw-r--r--mysql-test/suite/engines/funcs/r/tc_temporary_column.result2
-rw-r--r--mysql-test/suite/engines/funcs/t/rpl_trigger.test11
-rw-r--r--mysql-test/suite/federated/federatedx_versioning.test2
-rw-r--r--mysql-test/suite/funcs_1/r/charset_collation.result10
-rw-r--r--mysql-test/suite/funcs_1/r/is_character_sets.result6
-rw-r--r--mysql-test/suite/funcs_1/r/is_coll_char_set_appl.result17
-rw-r--r--mysql-test/suite/funcs_1/r/is_collations.result24
-rw-r--r--mysql-test/suite/funcs_1/r/is_columns.result6
-rw-r--r--mysql-test/suite/funcs_1/r/is_columns_is.result64
-rw-r--r--mysql-test/suite/funcs_1/r/is_columns_is_embedded.result64
-rw-r--r--mysql-test/suite/funcs_1/r/is_columns_mysql.result16
-rw-r--r--mysql-test/suite/funcs_1/r/is_columns_mysql_embedded.result16
-rw-r--r--mysql-test/suite/funcs_1/r/is_events.result12
-rw-r--r--mysql-test/suite/funcs_1/r/is_routines.result12
-rw-r--r--mysql-test/suite/funcs_1/r/is_routines_embedded.result12
-rw-r--r--mysql-test/suite/funcs_1/r/is_schemata.result6
-rw-r--r--mysql-test/suite/funcs_1/r/is_schemata_embedded.result6
-rw-r--r--mysql-test/suite/funcs_1/r/is_tables.result6
-rw-r--r--mysql-test/suite/funcs_1/r/is_tables_embedded.result6
-rw-r--r--mysql-test/suite/funcs_1/r/is_triggers.result12
-rw-r--r--mysql-test/suite/funcs_1/r/is_triggers_embedded.result12
-rw-r--r--mysql-test/suite/funcs_1/r/is_views.result6
-rw-r--r--mysql-test/suite/funcs_1/r/is_views_embedded.result6
-rw-r--r--mysql-test/suite/galera/r/galera_defaults.result4
-rw-r--r--mysql-test/suite/galera/r/galera_gra_log.result2
-rw-r--r--mysql-test/suite/galera/r/galera_ist_MDEV-28423,debug.rdiff4
-rw-r--r--mysql-test/suite/galera/r/galera_ist_MDEV-28583,debug.rdiff4
-rw-r--r--mysql-test/suite/galera/t/MW-329.test2
-rw-r--r--mysql-test/suite/galera/t/galera_bf_kill_debug.test2
-rw-r--r--mysql-test/suite/galera/t/galera_defaults.test4
-rw-r--r--mysql-test/suite/galera/t/galera_var_reject_queries.test6
-rw-r--r--mysql-test/suite/galera_3nodes/r/galera_allowlist.result35
-rw-r--r--mysql-test/suite/galera_3nodes/t/galera_allowlist.cnf26
-rw-r--r--mysql-test/suite/galera_3nodes/t/galera_allowlist.test66
-rw-r--r--mysql-test/suite/galera_sr/t/galera_sr_cc_master.test4
-rw-r--r--mysql-test/suite/gcol/inc/gcol_blocked_sql_funcs_main.inc15
-rw-r--r--mysql-test/suite/gcol/r/gcol_blocked_sql_funcs_innodb.result12
-rw-r--r--mysql-test/suite/gcol/r/gcol_blocked_sql_funcs_myisam.result12
-rw-r--r--mysql-test/suite/gcol/r/gcol_supported_sql_funcs_innodb.result2
-rw-r--r--mysql-test/suite/gcol/r/gcol_supported_sql_funcs_myisam.result2
-rw-r--r--mysql-test/suite/gcol/r/innodb_virtual_fk.result4
-rw-r--r--mysql-test/suite/innodb/r/innodb-alter-timestamp.result15
-rw-r--r--mysql-test/suite/innodb/r/innodb.result9
-rw-r--r--mysql-test/suite/innodb/r/innodb_ctype_ldml.result2
-rw-r--r--mysql-test/suite/innodb/r/innodb_skip_innodb_is_tables.result10
-rw-r--r--mysql-test/suite/innodb/r/innodb_status_variables.result10
-rw-r--r--mysql-test/suite/innodb/r/instant_alter_debug.result4
-rw-r--r--mysql-test/suite/innodb/r/monitor.result138
-rw-r--r--mysql-test/suite/innodb/r/purge_thread_shutdown.result2
-rw-r--r--mysql-test/suite/innodb/t/innodb-alter-timestamp.test3
-rw-r--r--mysql-test/suite/innodb/t/innodb.test6
-rw-r--r--mysql-test/suite/innodb/t/innodb_bug51920.test2
-rw-r--r--mysql-test/suite/innodb/t/instant_alter_debug.test2
-rw-r--r--mysql-test/suite/innodb/t/monitor.test87
-rw-r--r--mysql-test/suite/innodb/t/purge_thread_shutdown.test2
-rw-r--r--mysql-test/suite/innodb/t/temporary_table.test2
-rw-r--r--mysql-test/suite/mariabackup/slave_info_norpl.result12
-rw-r--r--mysql-test/suite/multi_source/gtid.result6
-rw-r--r--mysql-test/suite/multi_source/gtid.test6
-rw-r--r--mysql-test/suite/multi_source/info_logs.result11
-rw-r--r--mysql-test/suite/multi_source/info_logs.test9
-rw-r--r--mysql-test/suite/multi_source/mdev-8874.result21
-rw-r--r--mysql-test/suite/multi_source/mdev-8874.test13
-rw-r--r--mysql-test/suite/multi_source/mdev-9544.result9
-rw-r--r--mysql-test/suite/multi_source/mdev-9544.test10
-rw-r--r--mysql-test/suite/multi_source/multi_source_slave_alias_replica.result4
-rw-r--r--mysql-test/suite/multi_source/multisource.result3
-rw-r--r--mysql-test/suite/multi_source/multisource_for_channel.result8
-rw-r--r--mysql-test/suite/multi_source/multisource_for_channel.test6
-rw-r--r--mysql-test/suite/multi_source/reset_slave.result4
-rw-r--r--mysql-test/suite/multi_source/simple.result18
-rw-r--r--mysql-test/suite/multi_source/skip_counter.result6
-rw-r--r--mysql-test/suite/multi_source/skip_counter.test6
-rw-r--r--mysql-test/suite/parts/r/rpl_partition.result2
-rw-r--r--mysql-test/suite/perfschema/r/digest_view.result50
-rw-r--r--mysql-test/suite/perfschema/r/start_server_low_digest_sql_length.result4
-rw-r--r--mysql-test/suite/perfschema/t/show_sanity.test1
-rw-r--r--mysql-test/suite/period/r/create.result4
-rw-r--r--mysql-test/suite/plugins/r/test_sql_service.result2
-rw-r--r--mysql-test/suite/plugins/t/test_sql_service.test2
-rw-r--r--mysql-test/suite/rpl/include/multisource.inc3
-rw-r--r--mysql-test/suite/rpl/include/rpl_binlog_max_cache_size.test7
-rw-r--r--mysql-test/suite/rpl/include/rpl_change_master_demote.inc89
-rw-r--r--mysql-test/suite/rpl/include/rpl_deadlock.test4
-rw-r--r--mysql-test/suite/rpl/include/rpl_extra_col_master.test24
-rw-r--r--mysql-test/suite/rpl/include/rpl_extra_col_slave.test40
-rw-r--r--mysql-test/suite/rpl/include/rpl_flsh_tbls.test6
-rw-r--r--mysql-test/suite/rpl/include/rpl_innodb_rows_counters.inc48
-rw-r--r--mysql-test/suite/rpl/include/rpl_loaddata.test2
-rw-r--r--mysql-test/suite/rpl/include/rpl_parallel_29322.inc3
-rw-r--r--mysql-test/suite/rpl/include/rpl_reset_slave.test15
-rw-r--r--mysql-test/suite/rpl/include/rpl_slave_max_statement_time.inc79
-rw-r--r--mysql-test/suite/rpl/include/rpl_start_stop_slave.test2
-rw-r--r--mysql-test/suite/rpl/r/rpl_000010.result5
-rw-r--r--mysql-test/suite/rpl/r/rpl_auto_increment_bug33029.result2
-rw-r--r--mysql-test/suite/rpl/r/rpl_binlog_corruption.result2
-rw-r--r--mysql-test/suite/rpl/r/rpl_binlog_dump_slave_gtid_state_info.result2
-rw-r--r--mysql-test/suite/rpl/r/rpl_binlog_errors.result5
-rw-r--r--mysql-test/suite/rpl/r/rpl_blackhole_row_annotate.result2
-rw-r--r--mysql-test/suite/rpl/r/rpl_cant_read_event_incident.result9
-rw-r--r--mysql-test/suite/rpl/r/rpl_change_master.result5
-rw-r--r--mysql-test/suite/rpl/r/rpl_change_master_demote.result687
-rw-r--r--mysql-test/suite/rpl/r/rpl_checksum.result9
-rw-r--r--mysql-test/suite/rpl/r/rpl_circular_for_4_hosts.result2
-rw-r--r--mysql-test/suite/rpl/r/rpl_colSize.result2
-rw-r--r--mysql-test/suite/rpl/r/rpl_corruption.result5
-rw-r--r--mysql-test/suite/rpl/r/rpl_cross_version.result2
-rw-r--r--mysql-test/suite/rpl/r/rpl_deadlock_innodb.result4
-rw-r--r--mysql-test/suite/rpl/r/rpl_delayed_slave.result7
-rw-r--r--mysql-test/suite/rpl/r/rpl_extra_col_master_innodb.result34
-rw-r--r--mysql-test/suite/rpl/r/rpl_extra_col_master_myisam.result34
-rw-r--r--mysql-test/suite/rpl/r/rpl_extra_col_slave_innodb.result42
-rw-r--r--mysql-test/suite/rpl/r/rpl_extra_col_slave_myisam.result42
-rw-r--r--mysql-test/suite/rpl/r/rpl_gtid_basic.result6
-rw-r--r--mysql-test/suite/rpl/r/rpl_gtid_crash.result2
-rw-r--r--mysql-test/suite/rpl/r/rpl_gtid_errorhandling.result2
-rw-r--r--mysql-test/suite/rpl/r/rpl_gtid_excess_initial_delay.result4
-rw-r--r--mysql-test/suite/rpl/r/rpl_gtid_master_promote.result6
-rw-r--r--mysql-test/suite/rpl/r/rpl_gtid_mdev4473.result8
-rw-r--r--mysql-test/suite/rpl/r/rpl_gtid_mdev4820.result6
-rw-r--r--mysql-test/suite/rpl/r/rpl_gtid_mdev9033.result4
-rw-r--r--mysql-test/suite/rpl/r/rpl_gtid_misc.result1
-rw-r--r--mysql-test/suite/rpl/r/rpl_gtid_nobinlog.result5
-rw-r--r--mysql-test/suite/rpl/r/rpl_gtid_reconnect.result4
-rw-r--r--mysql-test/suite/rpl/r/rpl_gtid_sort.result2
-rw-r--r--mysql-test/suite/rpl/r/rpl_gtid_startpos.result19
-rw-r--r--mysql-test/suite/rpl/r/rpl_gtid_stop_start.result3
-rw-r--r--mysql-test/suite/rpl/r/rpl_gtid_until.result10
-rw-r--r--mysql-test/suite/rpl/r/rpl_heartbeat_basic.result24
-rw-r--r--mysql-test/suite/rpl/r/rpl_heartbeat_ssl.result3
-rw-r--r--mysql-test/suite/rpl/r/rpl_hrtime.result2
-rw-r--r--mysql-test/suite/rpl/r/rpl_innodb_bug68220.result233
-rw-r--r--mysql-test/suite/rpl/r/rpl_loaddata.result4
-rw-r--r--mysql-test/suite/rpl/r/rpl_log_pos.result4
-rw-r--r--mysql-test/suite/rpl/r/rpl_manual_change_index_file.result5
-rw-r--r--mysql-test/suite/rpl/r/rpl_mariadb_slave_capability.result3
-rw-r--r--mysql-test/suite/rpl/r/rpl_mdev382.result6
-rw-r--r--mysql-test/suite/rpl/r/rpl_mdev6020.result2
-rw-r--r--mysql-test/suite/rpl/r/rpl_mdev6386.result1
-rw-r--r--mysql-test/suite/rpl/r/rpl_mdev_17614.result4
-rw-r--r--mysql-test/suite/rpl/r/rpl_mixed_binlog_max_cache_size.result5
-rw-r--r--mysql-test/suite/rpl/r/rpl_mysql57_stm_temporal_round.result2
-rw-r--r--mysql-test/suite/rpl/r/rpl_mysql80_stm_temporal_round.result2
-rw-r--r--mysql-test/suite/rpl/r/rpl_old_master.result2
-rw-r--r--mysql-test/suite/rpl/r/rpl_old_master_29078.result30
-rw-r--r--mysql-test/suite/rpl/r/rpl_parallel_29322.result10
-rw-r--r--mysql-test/suite/rpl/r/rpl_parallel_mdev6589.result1
-rw-r--r--mysql-test/suite/rpl/r/rpl_parallel_multilevel2.result2
-rw-r--r--mysql-test/suite/rpl/r/rpl_parallel_temptable.result1
-rw-r--r--mysql-test/suite/rpl/r/rpl_perfschema_applier_status_by_coordinator.result1
-rw-r--r--mysql-test/suite/rpl/r/rpl_perfschema_connect_config.result2
-rw-r--r--mysql-test/suite/rpl/r/rpl_read_new_relay_log_info.result2
-rw-r--r--mysql-test/suite/rpl/r/rpl_read_old_relay_log_info.result2
-rw-r--r--mysql-test/suite/rpl/r/rpl_reset_slave_fail.result2
-rw-r--r--mysql-test/suite/rpl/r/rpl_row_001.result2
-rw-r--r--mysql-test/suite/rpl/r/rpl_row_colSize.result102
-rw-r--r--mysql-test/suite/rpl/r/rpl_row_flsh_tbls.result5
-rw-r--r--mysql-test/suite/rpl/r/rpl_row_loaddata_concurrent.result4
-rw-r--r--mysql-test/suite/rpl/r/rpl_row_mysqlbinlog.result14
-rw-r--r--mysql-test/suite/rpl/r/rpl_row_reset_slave.result13
-rw-r--r--mysql-test/suite/rpl/r/rpl_row_until.result4
-rw-r--r--mysql-test/suite/rpl/r/rpl_seconds_behind_master_spike.result3
-rw-r--r--mysql-test/suite/rpl/r/rpl_semi_sync.result8
-rw-r--r--mysql-test/suite/rpl/r/rpl_semi_sync_after_sync.result8
-rw-r--r--mysql-test/suite/rpl/r/rpl_semi_sync_after_sync_row.result8
-rw-r--r--mysql-test/suite/rpl/r/rpl_server_id2.result3
-rw-r--r--mysql-test/suite/rpl/r/rpl_server_id_ignore.result4
-rw-r--r--mysql-test/suite/rpl/r/rpl_skip_replication.result5
-rw-r--r--mysql-test/suite/rpl/r/rpl_slave_alias_replica.result1
-rw-r--r--mysql-test/suite/rpl/r/rpl_slave_max_statement_time.result170
-rw-r--r--mysql-test/suite/rpl/r/rpl_slave_skip.result2
-rw-r--r--mysql-test/suite/rpl/r/rpl_sp.result2
-rw-r--r--mysql-test/suite/rpl/r/rpl_start_alter_mysqlbinlog_1.result1
-rw-r--r--mysql-test/suite/rpl/r/rpl_start_alter_options.result10
-rw-r--r--mysql-test/suite/rpl/r/rpl_start_alter_restart_master.result4
-rw-r--r--mysql-test/suite/rpl/r/rpl_stm_000001.result2
-rw-r--r--mysql-test/suite/rpl/r/rpl_stm_binlog_max_cache_size.result5
-rw-r--r--mysql-test/suite/rpl/r/rpl_stm_flsh_tbls.result5
-rw-r--r--mysql-test/suite/rpl/r/rpl_stm_loaddata_concurrent.result4
-rw-r--r--mysql-test/suite/rpl/r/rpl_stm_reset_slave.result13
-rw-r--r--mysql-test/suite/rpl/r/rpl_stm_start_stop_slave.result4
-rw-r--r--mysql-test/suite/rpl/r/rpl_stm_until.result4
-rw-r--r--mysql-test/suite/rpl/r/rpl_stop_slave.result5
-rw-r--r--mysql-test/suite/rpl/r/rpl_timestamp.result10
-rw-r--r--mysql-test/suite/rpl/r/rpl_trigger.result17
-rw-r--r--mysql-test/suite/rpl/r/rpl_upgrade_master_info.result1
-rw-r--r--mysql-test/suite/rpl/r/rpl_using_gtid_default.result144
-rw-r--r--mysql-test/suite/rpl/r/rpl_xa_gap_lock.result2
-rw-r--r--mysql-test/suite/rpl/r/semisync_future-7591.result6
-rw-r--r--mysql-test/suite/rpl/t/rpl_000010.test6
-rw-r--r--mysql-test/suite/rpl/t/rpl_binlog_dump_slave_gtid_state_info.test4
-rw-r--r--mysql-test/suite/rpl/t/rpl_binlog_errors.test5
-rw-r--r--mysql-test/suite/rpl/t/rpl_cant_read_event_incident.test7
-rw-r--r--mysql-test/suite/rpl/t/rpl_change_master.test6
-rw-r--r--mysql-test/suite/rpl/t/rpl_change_master_demote.test470
-rw-r--r--mysql-test/suite/rpl/t/rpl_checksum.test9
-rw-r--r--mysql-test/suite/rpl/t/rpl_colSize.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_corruption.test6
-rw-r--r--mysql-test/suite/rpl/t/rpl_delayed_slave.test6
-rw-r--r--mysql-test/suite/rpl/t/rpl_gtid_crash.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_gtid_excess_initial_delay.test6
-rw-r--r--mysql-test/suite/rpl/t/rpl_gtid_master_promote.test6
-rw-r--r--mysql-test/suite/rpl/t/rpl_gtid_mdev4473.test8
-rw-r--r--mysql-test/suite/rpl/t/rpl_gtid_mdev9033.test4
-rw-r--r--mysql-test/suite/rpl/t/rpl_gtid_misc.test1
-rw-r--r--mysql-test/suite/rpl/t/rpl_gtid_nobinlog.test5
-rw-r--r--mysql-test/suite/rpl/t/rpl_gtid_reconnect.test5
-rw-r--r--mysql-test/suite/rpl/t/rpl_gtid_sort.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_gtid_startpos.test16
-rw-r--r--mysql-test/suite/rpl/t/rpl_gtid_stop_start.test1
-rw-r--r--mysql-test/suite/rpl/t/rpl_gtid_until.test9
-rw-r--r--mysql-test/suite/rpl/t/rpl_heartbeat_basic.test22
-rw-r--r--mysql-test/suite/rpl/t/rpl_heartbeat_ssl.test3
-rw-r--r--mysql-test/suite/rpl/t/rpl_innodb_bug68220.test53
-rw-r--r--mysql-test/suite/rpl/t/rpl_log_pos.test4
-rw-r--r--mysql-test/suite/rpl/t/rpl_manual_change_index_file.test6
-rw-r--r--mysql-test/suite/rpl/t/rpl_mariadb_slave_capability.test6
-rw-r--r--mysql-test/suite/rpl/t/rpl_mdev6020.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_mdev6386.test1
-rw-r--r--mysql-test/suite/rpl/t/rpl_mdev_17614.test4
-rw-r--r--mysql-test/suite/rpl/t/rpl_mysql57_stm_temporal_round.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_mysql80_stm_temporal_round.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_old_master.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_old_master_29078.test12
-rw-r--r--mysql-test/suite/rpl/t/rpl_parallel_mdev6589.test1
-rw-r--r--mysql-test/suite/rpl/t/rpl_parallel_multilevel2.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_parallel_temptable.test1
-rw-r--r--mysql-test/suite/rpl/t/rpl_perfschema_applier_status_by_coordinator.test1
-rw-r--r--mysql-test/suite/rpl/t/rpl_read_new_relay_log_info.test7
-rw-r--r--mysql-test/suite/rpl/t/rpl_read_old_relay_log_info.test6
-rw-r--r--mysql-test/suite/rpl/t/rpl_reset_slave_fail.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_row_001.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_row_mysqlbinlog.test6
-rw-r--r--mysql-test/suite/rpl/t/rpl_row_until.test4
-rw-r--r--mysql-test/suite/rpl/t/rpl_seconds_behind_master_spike.test6
-rw-r--r--mysql-test/suite/rpl/t/rpl_semi_sync.test13
-rw-r--r--mysql-test/suite/rpl/t/rpl_server_id2.test5
-rw-r--r--mysql-test/suite/rpl/t/rpl_server_id_ignore.test4
-rw-r--r--mysql-test/suite/rpl/t/rpl_skip_replication.test6
-rw-r--r--mysql-test/suite/rpl/t/rpl_slave_alias_replica.test1
-rw-r--r--mysql-test/suite/rpl/t/rpl_slave_max_statement_time.test110
-rw-r--r--mysql-test/suite/rpl/t/rpl_slave_skip.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_start_alter_mysqlbinlog_1.test3
-rw-r--r--mysql-test/suite/rpl/t/rpl_start_alter_restart_master.test5
-rw-r--r--mysql-test/suite/rpl/t/rpl_stm_000001.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_stm_until.test3
-rw-r--r--mysql-test/suite/rpl/t/rpl_stop_slave.test6
-rw-r--r--mysql-test/suite/rpl/t/rpl_trigger.test15
-rw-r--r--mysql-test/suite/rpl/t/rpl_upgrade_master_info.test1
-rw-r--r--mysql-test/suite/rpl/t/rpl_using_gtid_default.test303
-rw-r--r--mysql-test/suite/rpl/t/rpl_xa_gap_lock.test2
-rw-r--r--mysql-test/suite/rpl/t/semisync_future-7591.test5
-rw-r--r--mysql-test/suite/sql_sequence/gtid.result2
-rw-r--r--mysql-test/suite/sql_sequence/gtid.test2
-rw-r--r--mysql-test/suite/sql_sequence/replication.result2
-rw-r--r--mysql-test/suite/sql_sequence/replication.test2
-rw-r--r--mysql-test/suite/sys_vars/r/allow_suspicious_udfs.result11
-rw-r--r--mysql-test/suite/sys_vars/r/innodb_prefix_index_cluster_optimization_basic.result122
-rw-r--r--mysql-test/suite/sys_vars/r/innodb_version_basic.result17
-rw-r--r--mysql-test/suite/sys_vars/r/optimizer_prune_level_basic.result44
-rw-r--r--mysql-test/suite/sys_vars/r/sysvars_innodb.result5
-rw-r--r--mysql-test/suite/sys_vars/r/sysvars_server_embedded,32bit.rdiff301
-rw-r--r--mysql-test/suite/sys_vars/r/sysvars_server_embedded.result34
-rw-r--r--mysql-test/suite/sys_vars/r/sysvars_server_notembedded,32bit.rdiff319
-rw-r--r--mysql-test/suite/sys_vars/r/sysvars_server_notembedded.result44
-rw-r--r--mysql-test/suite/sys_vars/r/sysvars_wsrep.result15
-rw-r--r--mysql-test/suite/sys_vars/t/allow_suspicious_udfs.test14
-rw-r--r--mysql-test/suite/sys_vars/t/completion_type_func.test4
-rw-r--r--mysql-test/suite/sys_vars/t/innodb_fatal_semaphore_wait_threshold.test2
-rw-r--r--mysql-test/suite/sys_vars/t/innodb_prefix_index_cluster_optimization_basic.test76
-rw-r--r--mysql-test/suite/sys_vars/t/innodb_version_basic.test30
-rw-r--r--mysql-test/suite/sys_vars/t/optimizer_prune_level_basic.test14
-rw-r--r--mysql-test/suite/sys_vars/t/sysvars_innodb.test1
-rw-r--r--mysql-test/suite/vcol/r/vcol_misc.result2
-rw-r--r--mysql-test/suite/vcol/r/vcol_supported_sql_funcs.result4
-rw-r--r--mysql-test/suite/versioning/r/partition,heap.rdiff10
-rw-r--r--mysql-test/suite/versioning/r/partition.result10
-rw-r--r--mysql-test/suite/versioning/r/simple.result8
-rw-r--r--mysql-test/suite/wsrep/r/variables.result1
-rw-r--r--mysql-test/suite/wsrep/r/variables_debug.result1
-rw-r--r--mysql-test/suite/wsrep/t/variables.test2
-rw-r--r--mysql-test/suite/wsrep/t/variables_debug.test2
-rw-r--r--mysys/charset-def.c73
-rw-r--r--mysys/charset.c7
-rw-r--r--mysys/my_rnd.c22
-rw-r--r--plugin/feedback/utils.cc2
-rw-r--r--plugin/password_reuse_check/password_reuse_check.c2
-rw-r--r--plugin/qc_info/qc_info.cc2
-rw-r--r--plugin/type_inet/item_inetfunc.cc6
-rw-r--r--plugin/type_inet/mysql-test/type_inet/binlog_stm_type_inet4.result43
-rw-r--r--plugin/type_inet/mysql-test/type_inet/binlog_stm_type_inet4.test40
-rw-r--r--plugin/type_inet/mysql-test/type_inet/binlog_table_map_optional_metadata_type_inet4.result61
-rw-r--r--plugin/type_inet/mysql-test/type_inet/binlog_table_map_optional_metadata_type_inet4.test73
-rw-r--r--plugin/type_inet/mysql-test/type_inet/rpl_row_binary_to_inet4.result36
-rw-r--r--plugin/type_inet/mysql-test/type_inet/rpl_row_binary_to_inet4.test34
-rw-r--r--plugin/type_inet/mysql-test/type_inet/rpl_row_inet4_to_binary.result36
-rw-r--r--plugin/type_inet/mysql-test/type_inet/rpl_row_inet4_to_binary.test34
-rw-r--r--plugin/type_inet/mysql-test/type_inet/rpl_type_inet4.result23
-rw-r--r--plugin/type_inet/mysql-test/type_inet/rpl_type_inet4.test24
-rw-r--r--plugin/type_inet/mysql-test/type_inet/type_inet4-debug.result24
-rw-r--r--plugin/type_inet/mysql-test/type_inet/type_inet4-debug.test22
-rw-r--r--plugin/type_inet/mysql-test/type_inet/type_inet4.result2019
-rw-r--r--plugin/type_inet/mysql-test/type_inet/type_inet4.test1477
-rw-r--r--plugin/type_inet/mysql-test/type_inet/type_inet4_csv.result54
-rw-r--r--plugin/type_inet/mysql-test/type_inet/type_inet4_csv.test41
-rw-r--r--plugin/type_inet/mysql-test/type_inet/type_inet4_engines.inc38
-rw-r--r--plugin/type_inet/mysql-test/type_inet/type_inet4_innodb.result119
-rw-r--r--plugin/type_inet/mysql-test/type_inet/type_inet4_innodb.test36
-rw-r--r--plugin/type_inet/mysql-test/type_inet/type_inet4_memory.result159
-rw-r--r--plugin/type_inet/mysql-test/type_inet/type_inet4_memory.test16
-rw-r--r--plugin/type_inet/mysql-test/type_inet/type_inet4_mix_date.result353
-rw-r--r--plugin/type_inet/mysql-test/type_inet/type_inet4_mix_date.test26
-rw-r--r--plugin/type_inet/mysql-test/type_inet/type_inet4_mix_datetime.result353
-rw-r--r--plugin/type_inet/mysql-test/type_inet/type_inet4_mix_datetime.test25
-rw-r--r--plugin/type_inet/mysql-test/type_inet/type_inet4_mix_decimal.result353
-rw-r--r--plugin/type_inet/mysql-test/type_inet/type_inet4_mix_decimal.test19
-rw-r--r--plugin/type_inet/mysql-test/type_inet/type_inet4_mix_double.result353
-rw-r--r--plugin/type_inet/mysql-test/type_inet/type_inet4_mix_double.test19
-rw-r--r--plugin/type_inet/mysql-test/type_inet/type_inet4_mix_int.result353
-rw-r--r--plugin/type_inet/mysql-test/type_inet/type_inet4_mix_int.test19
-rw-r--r--plugin/type_inet/mysql-test/type_inet/type_inet4_mix_time.result353
-rw-r--r--plugin/type_inet/mysql-test/type_inet/type_inet4_mix_time.test26
-rw-r--r--plugin/type_inet/mysql-test/type_inet/type_inet4_mix_timestamp.result353
-rw-r--r--plugin/type_inet/mysql-test/type_inet/type_inet4_mix_timestamp.test25
-rw-r--r--plugin/type_inet/mysql-test/type_inet/type_inet4_mix_year.result353
-rw-r--r--plugin/type_inet/mysql-test/type_inet/type_inet4_mix_year.test19
-rw-r--r--plugin/type_inet/mysql-test/type_inet/type_inet4_myisam.result111
-rw-r--r--plugin/type_inet/mysql-test/type_inet/type_inet4_myisam.test28
-rw-r--r--plugin/type_inet/mysql-test/type_inet/type_inet4_mysql.result51
-rw-r--r--plugin/type_inet/mysql-test/type_inet/type_inet4_mysql.test18
-rw-r--r--plugin/type_inet/mysql-test/type_inet/type_inet4_oracle.result29
-rw-r--r--plugin/type_inet/mysql-test/type_inet/type_inet4_oracle.test35
-rw-r--r--plugin/type_inet/mysql-test/type_inet/type_inet4_partition.result36
-rw-r--r--plugin/type_inet/mysql-test/type_inet/type_inet4_partition.test41
-rw-r--r--plugin/type_inet/mysql-test/type_inet/type_inet4_plugin.result31
-rw-r--r--plugin/type_inet/mysql-test/type_inet/type_inet4_plugin.test27
-rw-r--r--plugin/type_inet/mysql-test/type_inet/type_inet4_stat_tables.result66
-rw-r--r--plugin/type_inet/mysql-test/type_inet/type_inet4_stat_tables.test40
-rw-r--r--plugin/type_inet/mysql-test/type_inet/type_inet6.result2
-rw-r--r--plugin/type_inet/mysql-test/type_inet/type_inet6.test2
-rw-r--r--plugin/type_inet/mysql-test/type_inet/type_inet6_mix_inet4.result19
-rw-r--r--plugin/type_inet/mysql-test/type_inet/type_inet6_mix_inet4.test26
-rw-r--r--plugin/type_inet/plugin.cc22
-rw-r--r--plugin/type_inet/sql_type_inet.cc17
-rw-r--r--plugin/type_inet/sql_type_inet.h88
-rw-r--r--scripts/fill_help_tables.sql1674
-rw-r--r--scripts/mysql_system_tables.sql4
-rw-r--r--scripts/mysql_system_tables_fix.sql20
-rw-r--r--scripts/sys_schema/tables/sys_config.sql2
-rw-r--r--sql-common/client.c4
-rw-r--r--sql/CMakeLists.txt1
-rw-r--r--sql/event_db_repository.cc4
-rw-r--r--sql/events.cc7
-rw-r--r--sql/item_create.cc24
-rw-r--r--sql/item_func.cc6
-rw-r--r--sql/item_strfunc.cc112
-rw-r--r--sql/item_strfunc.h49
-rw-r--r--sql/item_timefunc.cc10
-rw-r--r--sql/lex.h1
-rw-r--r--sql/lex_charset.cc113
-rw-r--r--sql/lex_charset.h162
-rw-r--r--sql/log.cc18
-rw-r--r--sql/log_event_server.cc34
-rw-r--r--sql/mysqld.cc18
-rw-r--r--sql/mysqld.h2
-rw-r--r--sql/opt_split.cc2
-rw-r--r--sql/opt_subselect.cc17
-rw-r--r--sql/opt_table_elimination.cc270
-rw-r--r--sql/privilege.h2
-rw-r--r--sql/protocol.cc8
-rw-r--r--sql/rpl_mi.cc7
-rw-r--r--sql/rpl_mi.h15
-rw-r--r--sql/share/errmsg-utf8.txt6
-rw-r--r--sql/slave.cc11
-rw-r--r--sql/sp.cc16
-rw-r--r--sql/sp_head.cc12
-rw-r--r--sql/sql_class.cc40
-rw-r--r--sql/sql_class.h56
-rw-r--r--sql/sql_delete.cc2
-rw-r--r--sql/sql_i_s.h16
-rw-r--r--sql/sql_insert.cc9
-rw-r--r--sql/sql_lex.cc25
-rw-r--r--sql/sql_lex.h7
-rw-r--r--sql/sql_parse.cc6
-rw-r--r--sql/sql_repl.cc84
-rw-r--r--sql/sql_select.cc652
-rw-r--r--sql/sql_select.h31
-rw-r--r--sql/sql_show.cc96
-rw-r--r--sql/sql_table.cc12
-rw-r--r--sql/sql_time.cc4
-rw-r--r--sql/sql_type.cc2
-rw-r--r--sql/sql_yacc.yy13
-rw-r--r--sql/sys_vars.cc55
-rw-r--r--sql/sys_vars.inl2
-rw-r--r--sql/table.h1
-rw-r--r--sql/temporary_tables.cc8
-rw-r--r--sql/wsrep_allowlist_service.cc56
-rw-r--r--sql/wsrep_allowlist_service.h29
-rw-r--r--sql/wsrep_mysqld.cc57
-rw-r--r--sql/wsrep_mysqld.h2
-rw-r--r--sql/wsrep_schema.cc227
-rw-r--r--sql/wsrep_schema.h22
-rw-r--r--sql/wsrep_server_state.cc17
-rw-r--r--sql/wsrep_server_state.h9
-rw-r--r--sql/wsrep_types.h2
m---------storage/columnstore/columnstore0
-rw-r--r--storage/innobase/fts/fts0fts.cc2
-rw-r--r--storage/innobase/fts/fts0que.cc2
-rw-r--r--storage/innobase/handler/ha_innodb.cc61
-rw-r--r--storage/innobase/handler/i_s.cc436
-rw-r--r--storage/innobase/ibuf/ibuf0ibuf.cc44
-rw-r--r--storage/innobase/include/srv0mon.h13
-rw-r--r--storage/innobase/include/srv0srv.h47
-rw-r--r--storage/innobase/include/univ.i19
-rw-r--r--storage/innobase/log/log0log.cc22
-rw-r--r--storage/innobase/row/row0mysql.cc22
-rw-r--r--storage/innobase/row/row0sel.cc14
-rw-r--r--storage/innobase/srv/srv0mon.cc106
-rw-r--r--storage/innobase/srv/srv0srv.cc161
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/create_table_TODO_SPLIT_ME.result2
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_TODO_SPLIT_ME.result2
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/insert_on_duplicate_key_update_multiple_column_primary_key_myisam.result2
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/insert_on_duplicate_key_update_multiple_column_unique_index_myisam.result2
-rw-r--r--storage/rocksdb/mysql-test/rocksdb/r/innodb_i_s_tables_disabled.result10
-rw-r--r--storage/spider/ha_spider.cc696
-rw-r--r--storage/spider/ha_spider.h30
-rw-r--r--storage/spider/mysql-test/spider/bugfix/r/index.result9
-rw-r--r--storage/spider/mysql-test/spider/bugfix/r/mdev_29855.result36
-rw-r--r--storage/spider/mysql-test/spider/bugfix/t/index.test3
-rw-r--r--storage/spider/mysql-test/spider/bugfix/t/mdev_29855.cnf3
-rw-r--r--storage/spider/mysql-test/spider/bugfix/t/mdev_29855.test40
-rw-r--r--storage/spider/mysql-test/spider/handler/include/deinit_child2_1.inc0
-rw-r--r--storage/spider/mysql-test/spider/handler/include/deinit_child2_2.inc0
-rw-r--r--storage/spider/mysql-test/spider/handler/include/deinit_child2_3.inc0
-rw-r--r--storage/spider/mysql-test/spider/handler/include/deinit_child3_1.inc0
-rw-r--r--storage/spider/mysql-test/spider/handler/include/deinit_child3_2.inc0
-rw-r--r--storage/spider/mysql-test/spider/handler/include/deinit_child3_3.inc0
-rw-r--r--storage/spider/mysql-test/spider/handler/include/deinit_master_1.inc1
-rw-r--r--storage/spider/mysql-test/spider/handler/include/deinit_slave1_1.inc0
-rw-r--r--storage/spider/mysql-test/spider/handler/include/ha_deinit_child2_1.inc0
-rw-r--r--storage/spider/mysql-test/spider/handler/include/ha_deinit_child2_2.inc0
-rw-r--r--storage/spider/mysql-test/spider/handler/include/ha_deinit_child2_3.inc0
-rw-r--r--storage/spider/mysql-test/spider/handler/include/ha_deinit_child3_1.inc1
-rw-r--r--storage/spider/mysql-test/spider/handler/include/ha_deinit_child3_2.inc1
-rw-r--r--storage/spider/mysql-test/spider/handler/include/ha_deinit_child3_3.inc1
-rw-r--r--storage/spider/mysql-test/spider/handler/include/ha_deinit_master_1.inc0
-rw-r--r--storage/spider/mysql-test/spider/handler/include/ha_init_child2_1.inc8
-rw-r--r--storage/spider/mysql-test/spider/handler/include/ha_init_child2_2.inc4
-rw-r--r--storage/spider/mysql-test/spider/handler/include/ha_init_child2_3.inc4
-rw-r--r--storage/spider/mysql-test/spider/handler/include/ha_init_child3_1.inc140
-rw-r--r--storage/spider/mysql-test/spider/handler/include/ha_init_child3_2.inc140
-rw-r--r--storage/spider/mysql-test/spider/handler/include/ha_init_child3_3.inc140
-rw-r--r--storage/spider/mysql-test/spider/handler/include/ha_init_master_1.inc105
-rw-r--r--storage/spider/mysql-test/spider/handler/include/hs_deinit_child2_1.inc0
-rw-r--r--storage/spider/mysql-test/spider/handler/include/hs_deinit_child2_2.inc0
-rw-r--r--storage/spider/mysql-test/spider/handler/include/hs_deinit_child2_3.inc0
-rw-r--r--storage/spider/mysql-test/spider/handler/include/hs_deinit_master_1.inc0
-rw-r--r--storage/spider/mysql-test/spider/handler/include/hs_init_child2_1.inc24
-rw-r--r--storage/spider/mysql-test/spider/handler/include/hs_init_child2_2.inc12
-rw-r--r--storage/spider/mysql-test/spider/handler/include/hs_init_child2_3.inc0
-rw-r--r--storage/spider/mysql-test/spider/handler/include/hs_init_master_1.inc12
-rw-r--r--storage/spider/mysql-test/spider/handler/include/init_child2_1.inc176
-rw-r--r--storage/spider/mysql-test/spider/handler/include/init_child2_2.inc80
-rw-r--r--storage/spider/mysql-test/spider/handler/include/init_child2_3.inc11
-rw-r--r--storage/spider/mysql-test/spider/handler/include/init_child3_1.inc0
-rw-r--r--storage/spider/mysql-test/spider/handler/include/init_child3_2.inc0
-rw-r--r--storage/spider/mysql-test/spider/handler/include/init_child3_3.inc0
-rw-r--r--storage/spider/mysql-test/spider/handler/include/init_master_1.inc186
-rw-r--r--storage/spider/mysql-test/spider/handler/include/init_slave1_1.inc10
-rw-r--r--storage/spider/mysql-test/spider/handler/my.cnf176
-rw-r--r--storage/spider/mysql-test/spider/handler/r/basic_sql.result738
-rw-r--r--storage/spider/mysql-test/spider/handler/r/basic_sql_part.result141
-rw-r--r--storage/spider/mysql-test/spider/handler/r/direct_aggregate.result100
-rw-r--r--storage/spider/mysql-test/spider/handler/r/direct_aggregate_part.result90
-rw-r--r--storage/spider/mysql-test/spider/handler/r/direct_update.result155
-rw-r--r--storage/spider/mysql-test/spider/handler/r/direct_update_part.result145
-rw-r--r--storage/spider/mysql-test/spider/handler/r/function.result160
-rw-r--r--storage/spider/mysql-test/spider/handler/r/ha.result286
-rw-r--r--storage/spider/mysql-test/spider/handler/r/ha_part.result311
-rw-r--r--storage/spider/mysql-test/spider/handler/r/spider3_fixes.result245
-rw-r--r--storage/spider/mysql-test/spider/handler/r/spider3_fixes_part.result243
-rw-r--r--storage/spider/mysql-test/spider/handler/r/spider_fixes.result640
-rw-r--r--storage/spider/mysql-test/spider/handler/r/spider_fixes_part.result246
-rw-r--r--storage/spider/mysql-test/spider/handler/r/vp_fixes.result93
-rw-r--r--storage/spider/mysql-test/spider/handler/suite.opt1
-rw-r--r--storage/spider/mysql-test/spider/handler/suite.pm10
-rw-r--r--storage/spider/mysql-test/spider/handler/t/basic_sql.test2699
-rw-r--r--storage/spider/mysql-test/spider/handler/t/basic_sql_part.test571
-rw-r--r--storage/spider/mysql-test/spider/handler/t/connect_child2_1.inc1
-rw-r--r--storage/spider/mysql-test/spider/handler/t/connect_child2_2.inc1
-rw-r--r--storage/spider/mysql-test/spider/handler/t/connect_child2_3.inc1
-rw-r--r--storage/spider/mysql-test/spider/handler/t/connect_child3_1.inc1
-rw-r--r--storage/spider/mysql-test/spider/handler/t/connect_child3_2.inc1
-rw-r--r--storage/spider/mysql-test/spider/handler/t/connect_child3_3.inc1
-rw-r--r--storage/spider/mysql-test/spider/handler/t/connect_master_1.inc1
-rw-r--r--storage/spider/mysql-test/spider/handler/t/connect_slave1_1.inc1
-rw-r--r--storage/spider/mysql-test/spider/handler/t/direct_aggregate.test179
-rw-r--r--storage/spider/mysql-test/spider/handler/t/direct_aggregate_part.test192
-rw-r--r--storage/spider/mysql-test/spider/handler/t/direct_update.test198
-rw-r--r--storage/spider/mysql-test/spider/handler/t/direct_update_part.test211
-rw-r--r--storage/spider/mysql-test/spider/handler/t/function.test253
-rw-r--r--storage/spider/mysql-test/spider/handler/t/ha.test878
-rw-r--r--storage/spider/mysql-test/spider/handler/t/ha_part.test1017
-rw-r--r--storage/spider/mysql-test/spider/handler/t/ha_test_deinit.inc30
-rw-r--r--storage/spider/mysql-test/spider/handler/t/ha_test_init.inc30
-rw-r--r--storage/spider/mysql-test/spider/handler/t/have_engine.inc7
-rw-r--r--storage/spider/mysql-test/spider/handler/t/have_func.inc5
-rw-r--r--storage/spider/mysql-test/spider/handler/t/have_partition.inc7
-rw-r--r--storage/spider/mysql-test/spider/handler/t/have_trigger.inc2
-rw-r--r--storage/spider/mysql-test/spider/handler/t/hs_test_deinit.inc17
-rw-r--r--storage/spider/mysql-test/spider/handler/t/hs_test_init.inc17
-rw-r--r--storage/spider/mysql-test/spider/handler/t/slave_test_deinit.inc6
-rw-r--r--storage/spider/mysql-test/spider/handler/t/slave_test_init.inc44
-rw-r--r--storage/spider/mysql-test/spider/handler/t/spider3_fixes.test297
-rw-r--r--storage/spider/mysql-test/spider/handler/t/spider3_fixes_part.test350
-rw-r--r--storage/spider/mysql-test/spider/handler/t/spider_fixes.test1433
-rw-r--r--storage/spider/mysql-test/spider/handler/t/spider_fixes_part.test650
-rw-r--r--storage/spider/mysql-test/spider/handler/t/test_deinit.inc37
-rw-r--r--storage/spider/mysql-test/spider/handler/t/test_init.inc74
-rw-r--r--storage/spider/mysql-test/spider/handler/t/vp_fixes.test335
-rw-r--r--storage/spider/mysql-test/spider/r/partition_mrr.result44
-rw-r--r--storage/spider/mysql-test/spider/r/variable_deprecation.result46
-rw-r--r--storage/spider/mysql-test/spider/t/partition_mrr.test1
-rw-r--r--storage/spider/mysql-test/spider/t/variable_deprecation.test24
-rw-r--r--storage/spider/spd_conn.cc118
-rw-r--r--storage/spider/spd_conn.h12
-rw-r--r--storage/spider/spd_copy_tables.cc3
-rw-r--r--storage/spider/spd_db_conn.cc1103
-rw-r--r--storage/spider/spd_db_conn.h20
-rw-r--r--storage/spider/spd_db_include.h35
-rw-r--r--storage/spider/spd_db_mysql.cc453
-rw-r--r--storage/spider/spd_db_mysql.h39
-rw-r--r--storage/spider/spd_direct_sql.cc7
-rw-r--r--storage/spider/spd_environ.h3
-rw-r--r--storage/spider/spd_group_by_handler.cc24
-rw-r--r--storage/spider/spd_i_s.cc33
-rw-r--r--storage/spider/spd_include.h8
-rw-r--r--storage/spider/spd_param.cc210
-rw-r--r--storage/spider/spd_param.h27
-rw-r--r--storage/spider/spd_ping_table.cc8
-rw-r--r--storage/spider/spd_table.cc105
-rw-r--r--storage/spider/spd_trx.cc9
-rw-r--r--strings/CMakeLists.txt23
-rw-r--r--strings/conf_to_src.c94
-rw-r--r--strings/ctype-big5.c1089
-rw-r--r--strings/ctype-bin.c22
-rw-r--r--strings/ctype-cp932.c2861
-rw-r--r--strings/ctype-czech.c10
-rw-r--r--strings/ctype-euc_kr.c2463
-rw-r--r--strings/ctype-eucjpms.c2859
-rw-r--r--strings/ctype-extra.c1080
-rw-r--r--strings/ctype-gb2312.c1221
-rw-r--r--strings/ctype-gbk.c1659
-rw-r--r--strings/ctype-latin1.c38
-rw-r--r--strings/ctype-mb.c16
-rw-r--r--strings/ctype-simple.c34
-rw-r--r--strings/ctype-sjis.c1655
-rw-r--r--strings/ctype-tis620.c36
-rw-r--r--strings/ctype-uca-scanner_next.inl66
-rw-r--r--strings/ctype-uca.c2243
-rw-r--r--strings/ctype-uca.h187
-rw-r--r--strings/ctype-uca.inl230
-rw-r--r--strings/ctype-uca1400.h252
-rw-r--r--strings/ctype-ucs2.c359
-rw-r--r--strings/ctype-ujis.c2173
-rw-r--r--strings/ctype-unicode1400-casefold-tr.h704
-rw-r--r--strings/ctype-unicode1400-casefold.h4240
-rw-r--r--strings/ctype-unicode300-casefold-tr.h193
-rw-r--r--strings/ctype-unicode300-casefold.h1764
-rw-r--r--strings/ctype-unicode300-general_ci.h610
-rw-r--r--strings/ctype-unicode300-general_mysql500_ci.h190
-rw-r--r--strings/ctype-unicode520-casefold.h3192
-rw-r--r--strings/ctype-unidata.c97
-rw-r--r--strings/ctype-unidata.h128
-rw-r--r--strings/ctype-utf8.c4866
-rw-r--r--strings/ctype-win1250ch.c10
-rw-r--r--strings/ctype.c38
-rw-r--r--strings/strcoll.inl28
-rw-r--r--strings/strings_def.h7
-rw-r--r--strings/uca-dump.c938
-rw-r--r--strings/unidata-dump.c1110
-rw-r--r--tests/mysql_client_test.c38
-rw-r--r--unittest/strings/strings-t.c2
883 files changed, 96916 insertions, 40570 deletions
diff --git a/.gitignore b/.gitignore
index 05c65848514..93a132b3d83 100644
--- a/.gitignore
+++ b/.gitignore
@@ -616,6 +616,8 @@ scripts/mariadb-setpermission
sql/mariadbd
sql/mariadb-tzinfo-to-sql
storage/rocksdb/mariadb-ldb
+strings/ctype-uca1400data.h
+strings/uca-dump
tests/mariadb-client-test
versioninfo_dll.rc
versioninfo_exe.rc
diff --git a/CMakeLists.txt b/CMakeLists.txt
index ce77fdc5f1f..e76b976a23c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -483,7 +483,7 @@ ADD_SUBDIRECTORY(support-files)
ADD_SUBDIRECTORY(extra/aws_sdk)
IF(NOT CMAKE_CROSSCOMPILING OR DEFINED CMAKE_CROSSCOMPILING_EMULATOR)
- SET(EXPORTED comp_err comp_sql factorial)
+ SET(EXPORTED comp_err comp_sql factorial uca-dump)
IF(NOT WITHOUT_SERVER)
SET(EXPORTED ${EXPORTED} gen_lex_hash gen_lex_token)
ENDIF()
diff --git a/THIRDPARTY b/THIRDPARTY
index 35bb238ed1e..87f9bb7a3b5 100644
--- a/THIRDPARTY
+++ b/THIRDPARTY
@@ -930,180 +930,202 @@ archived older versions of code and data; there is also a smaller HTTP mirror.
***************************************************************************
%%The following software may be included in this product:
-UnicodeData.txt
-
-Use of any of this software is governed by the terms of the license below:
-
-Unicode Terms of Use
-
- For the general privacy policy governing access to this site, see the
- Unicode Privacy Policy. For trademark usage, see the Unicode
- Consortium (R) Trademarks and Logo Policy.
- Notice to End User: Terms of Use
- Carefully read the following legal agreement ("Agreement"). Use or
- copying of the software and/or codes provided with this agreement (The
- "Software") constitutes your acceptance of these terms
-
- 1. Unicode Copyright.
- 1. Copyright (c) 1991-2008 Unicode, Inc. All rights reserved.
- 2. Certain documents and files on this website contain a
- legend indicating that "Modification is permitted." Any person
- is hereby authorized, without fee, to modify such documents
- and files to create derivative works conforming to the
- Unicode (R) Standard, subject to Terms and Conditions herein.
- 3. Any person is hereby authorized, without fee, to view, use,
- reproduce, and distribute all documents and files solely for
- informational purposes in the creation of products supporting
- the Unicode Standard, subject to the Terms and Conditions
- herein.
- 4. Further specifications of rights and restrictions
- pertaining to the use of the particular set of data files
- known as the "Unicode Character Database" can be found in
- Exhibit 1.
- 5. Each version of the Unicode Standard has further
- specifications of rights and restrictions of use. For the book
- editions, these are found on the back of the title page. For
- the online edition, certain files (such as the PDF files for
- book chapters and code charts) carry specific restrictions.
- All other files are covered under these general Terms of Use.
- To request a permission to reproduce any part of the Unicode
- Standard, please contact the Unicode Consortium.
- 6. No license is granted to "mirror" the Unicode website where
- a fee is charged for access to the "mirror" site.
- 7. Modification is not permitted with respect to this
- document. All copies of this document must be verbatim.
- 2. Restricted Rights Legend. Any technical data or software which is
- licensed to the United States of America, its agencies and/or
- instrumentalities under this Agreement is commercial technical data
- or commercial computer software developed exclusively at private
- expense as defined in FAR 2.101, or DFARS 252.227-7014 (June 1995),
- as applicable. For technical data, use, duplication, or disclosure
- by the Government is subject to restrictions as set forth in DFARS
- 202.227-7015 Technical Data, Commercial and Items (Nov 1995) and
- this Agreement. For Software, in accordance with FAR 12-212 or DFARS
- 227-7202, as applicable, use, duplication or disclosure by the
- Government is subject to the restrictions set forth in this
- Agreement.
- 3. Warranties and Disclaimers.
- 1. This publication and/or website may include technical or
- typographical errors or other inaccuracies . Changes are
- periodically added to the information herein; these changes
- will be incorporated in new editions of the publication and/or
- website. Unicode may make improvements and/or changes in the
- product(s) and/or program(s) described in this publication
- and/or website at any time.
- 2. If this file has been purchased on magnetic or optical
- media from Unicode, Inc. the sole and exclusive remedy for any
- claim will be exchange of the defective media within ninety
- (90) days of original purchase.
- 3. EXCEPT AS PROVIDED IN SECTION C.2, THIS PUBLICATION AND/OR
- SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND
- EITHER EXPRESS, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT
- LIMITED TO, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
- PARTICULAR PURPOSE, OR NON-INFRINGEMENT. UNICODE AND ITS
- LICENSORS ASSUME NO RESPONSIBILITY FOR ERRORS OR OMISSIONS IN
- THIS PUBLICATION AND/OR SOFTWARE OR OTHER DOCUMENTS WHICH ARE
- REFERENCED BY OR LINKED TO THIS PUBLICATION OR THE UNICODE
- WEBSITE.
- 4. Waiver of Damages. In no event shall Unicode or its licensors be
- liable for any special, incidental, indirect or consequential
- damages of any kind, or any damages whatsoever, whether or not
- Unicode was advised of the possibility of the damage, including,
- without limitation, those resulting from the following: loss of use,
- data or profits, in connection with the use, modification or
- distribution of this information or its derivatives.
- 5. Trademarks.
- 1. Unicode and the Unicode logo are registered trademarks of
- Unicode, Inc.
- 2. This site contains product names and corporate names of
- other companies. All product names and company names and logos
- mentioned herein are the trademarks or registered trademarks
- of their respective owners. Other products and corporate names
- mentioned herein which are trademarks of a third party are
- used only for explanation and for the owners' benefit and with
- no intent to infringe.
- 3. Use of third party products or information referred to
- herein is at the user's risk.
- 6. Miscellaneous.
- 1. Jurisdiction and Venue. This server is operated from a
- location in the State of California, United States of America.
- Unicode makes no representation that the materials are
- appropriate for use in other locations. If you access this
- server from other locations, you are responsible for
- compliance with local laws. This Agreement, all use of this
- site and any claims and damages resulting from use of this
- site are governed solely by the laws of the State of
- California without regard to any principles which would apply
- the laws of a different jurisdiction. The user agrees that any
- disputes regarding this site shall be resolved solely in the
- courts located in Santa Clara County, California. The user
- agrees said courts have personal jurisdiction and agree to
- waive any right to transfer the dispute to any other forum.
- 2. Modification by Unicode Unicode shall have the right to
- modify this Agreement at any time by posting it to this site.
- The user may not assign any part of this Agreement without
- Unicode's prior written consent.
- 3. Taxes. The user agrees to pay any taxes arising from access
- to this website or use of the information herein, except for
- those based on Unicode's net income.
- 4. Severability. If any provision of this Agreement is
- declared invalid or unenforceable, the remaining provisions of
- this Agreement shall remain in effect.
- 5. Entire Agreement. This Agreement constitutes the entire
- agreement between the parties.
+http://www.unicode.org/copyright.html
+
+ Unicode® Copyright and Terms of Use
+
+ For the general privacy policy governing access to this site, see the Unicode Privacy Policy.
+
+ Unicode Copyright
+ Copyright © 1991-2023 Unicode, Inc. All rights reserved.
+ Definitions
+
+ Unicode Data Files ("DATA FILES") include all data files under the directories:
+ https://www.unicode.org/Public/
+ https://www.unicode.org/reports/
+ https://www.unicode.org/ivd/data/
+
+ Unicode Data Files do not include PDF online code charts under the directory:
+ https://www.unicode.org/Public/
+
+ Unicode Software ("SOFTWARE") includes any source code published in the Unicode Standard
+ or any source code or compiled code under the directories:
+ https://www.unicode.org/Public/PROGRAMS/
+ https://www.unicode.org/Public/cldr/
+ http://site.icu-project.org/download/
+
+ Terms of Use
+ Certain documents and files on this website contain a legend
+ indicating that "Modification is permitted." Any person is hereby
+ authorized, without fee, to modify such documents and files to
+ create derivative works conforming to the Unicode® Standard, subject
+ to Terms and Conditions herein.
+
+ Any person is hereby authorized, without fee, to view, use,
+ reproduce, and distribute all documents and files, subject to the
+ Terms and Conditions herein.
+
+ Further specifications of rights and restrictions pertaining to the
+ use of the Unicode DATA FILES and SOFTWARE can be found in the
+ Unicode Data Files and Software License.
+
+ Each version of the Unicode Standard has further specifications of
+ rights and restrictions of use. For the book editions (Unicode 5.0
+ and earlier), these are found on the back of the title page.
+
+ The Unicode PDF online code charts carry specific restrictions.
+ Those restrictions are incorporated as the first page of each PDF
+ code chart.
+
+ All other files, including online documentation of the core
+ specification for Unicode 6.0 and later, are covered under these
+ general Terms of Use.
+
+ No license is granted to "mirror" the Unicode website where a fee is
+ charged for access to the "mirror" site.
+
+ Modification is not permitted with respect to this document. All
+ copies of this document must be verbatim.
+
+ Restricted Rights Legend
+
+ Any technical data or software which is licensed to the United
+ States of America, its agencies and/or instrumentalities under this
+ Agreement is commercial technical data or commercial computer
+ software developed exclusively at private expense as defined in FAR
+ 2.101, or DFARS 252.227-7014 (June 1995), as applicable. For
+ technical data, use, duplication, or disclosure by the Government is
+ subject to restrictions as set forth in DFARS 202.227-7015 Technical
+ Data, Commercial and Items (Nov 1995) and this Agreement. For
+ Software, in accordance with FAR 12-212 or DFARS 227-7202, as
+ applicable, use, duplication or disclosure by the Government is
+ subject to the restrictions set forth in this Agreement.
+
+ Warranties and Disclaimers
+ This publication and/or website may include technical or
+ typographical errors or other inaccuracies. Changes are periodically
+ added to the information herein; these changes will be incorporated
+ in new editions of the publication and/or website. Unicode, Inc. may
+ make improvements and/or changes in the product(s) and/or program(s)
+ described in this publication and/or website at any time.
+
+ If this file has been purchased on magnetic or optical media from
+ Unicode, Inc. the sole and exclusive remedy for any claim will be
+ exchange of the defective media within ninety (90) days of original
+ purchase.
+
+ EXCEPT AS PROVIDED IN SECTION E.2, THIS PUBLICATION AND/OR SOFTWARE
+ IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND EITHER EXPRESS,
+ IMPLIED, OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, ANY WARRANTIES
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
+ NON-INFRINGEMENT. UNICODE, INC. AND ITS LICENSORS ASSUME NO
+ RESPONSIBILITY FOR ERRORS OR OMISSIONS IN THIS PUBLICATION AND/OR
+ SOFTWARE OR OTHER DOCUMENTS WHICH ARE REFERENCED BY OR LINKED TO
+ THIS PUBLICATION OR THE UNICODE WEBSITE.
+
+ Waiver of Damages
+ In no event shall Unicode, Inc. or its licensors be liable for any
+ special, incidental, indirect or consequential damages of any kind,
+ or any damages whatsoever, whether or not Unicode, Inc. was advised
+ of the possibility of the damage, including, without limitation,
+ those resulting from the following: loss of use, data or profits, in
+ connection with the use, modification or distribution of this
+ information or its derivatives.
+
+ Trademarks & Logos
+ The Unicode Word Mark and the Unicode Logo are trademarks of
+ Unicode, Inc. “The Unicode Consortium†and “Unicode, Inc.†are trade
+ names of Unicode, Inc. Use of the information and materials found on
+ this website indicates your acknowledgement of Unicode, Inc.’s
+ exclusive worldwide rights in the Unicode Word Mark, the Unicode
+ Logo, and the Unicode trade names.
+
+ The Unicode Consortium Name and Trademark Usage Policy (“Trademark
+ Policyâ€) are incorporated herein by reference and you agree to abide
+ by the provisions of the Trademark Policy, which may be changed from
+ time to time in the sole discretion of Unicode, Inc.
+
+ All third party trademarks referenced herein are the property of
+ their respective owners.
+
+ Miscellaneous
+ Jurisdiction and Venue. This website is operated from a location in
+ the State of California, United States of America. Unicode, Inc.
+ makes no representation that the materials are appropriate for use
+ in other locations. If you access this website from other locations,
+ you are responsible for compliance with local laws. This Agreement,
+ all use of this website and any claims and damages resulting from
+ use of this website are governed solely by the laws of the State of
+ California without regard to any principles which would apply the
+ laws of a different jurisdiction. The user agrees that any disputes
+ regarding this website shall be resolved solely in the courts
+ located in Santa Clara County, California. The user agrees said
+ courts have personal jurisdiction and agree to waive any right to
+ transfer the dispute to any other forum.
+
+ Modification by Unicode, Inc. Unicode, Inc. shall have the right to
+ modify this Agreement at any time by posting it to this website. The
+ user may not assign any part of this Agreement without Unicode,
+ Inc.’s prior written consent.
+
+ Taxes. The user agrees to pay any taxes arising from access to this
+ website or use of the information herein, except for those based on
+ Unicode’s net income.
+
+ Severability. If any provision of this Agreement is declared
+ invalid or unenforceable, the remaining provisions of this Agreement
+ shall remain in effect.
+
+ Entire Agreement. This Agreement constitutes the entire agreement
+ between the parties.
EXHIBIT 1
UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE
- Unicode Data Files include all data files under the directories
-http://www.unicode.org/Public/, http://www.unicode.org/reports/, and
-http://www.unicode.org/cldr/data/ . Unicode Software includes any source code
-published in the Unicode Standard or under the directories
-http://www.unicode.org/Public/, http://www.unicode.org/reports/, and
-http://www.unicode.org/cldr/data/.
-
- NOTICE TO USER: Carefully read the following legal agreement. BY
-DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING UNICODE INC.'S DATA FILES
-("DATA FILES"), AND/OR SOFTWARE ("SOFTWARE"), YOU UNEQUIVOCALLY ACCEPT, AND
-AGREE TO BE BOUND BY, ALL OF THE TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU
-DO NOT AGREE, DO NOT DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES
-OR SOFTWARE.
-
- COPYRIGHT AND PERMISSION NOTICE
-
- Copyright (c) 1991-2008 Unicode, Inc. All rights reserved. Distributed under
-the Terms of Use in http://www.unicode.org/copyright.html.
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
-of the Unicode data files and any associated documentation (the "Data Files") or
-Unicode software and any associated documentation (the "Software") to deal in
-the Data Files or Software without restriction, including without limitation the
-rights to use, copy, modify, merge, publish, distribute, and/or sell copies of
-the Data Files or Software, and to permit persons to whom the Data Files or
-Software are furnished to do so, provided that (a) the above copyright notice(s)
-and this permission notice appear with all copies of the Data Files or Software,
-(b) both the above copyright notice(s) and this permission notice appear in
-associated documentation, and (c) there is clear notice in each modified Data
-File or in the Software as well as in the documentation associated with the Data
-File(s) or Software that the data or software has been modified.
-
- THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD
-PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS
+See Terms of Use <https://www.unicode.org/copyright.html>
+for definitions of Unicode Inc.’s Data Files and Software.
+
+NOTICE TO USER: Carefully read the following legal agreement.
+BY DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING UNICODE INC.'S
+DATA FILES ("DATA FILES"), AND/OR SOFTWARE ("SOFTWARE"),
+YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE
+TERMS AND CONDITIONS OF THIS AGREEMENT.
+IF YOU DO NOT AGREE, DO NOT DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE
+THE DATA FILES OR SOFTWARE.
+
+COPYRIGHT AND PERMISSION NOTICE
+
+Copyright © 1991-2023 Unicode, Inc. All rights reserved.
+Distributed under the Terms of Use in https://www.unicode.org/copyright.html.
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Unicode data files and any associated documentation
+(the "Data Files") or Unicode software and any associated documentation
+(the "Software") to deal in the Data Files or Software
+without restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, and/or sell copies of
+the Data Files or Software, and to permit persons to whom the Data Files
+or Software are furnished to do so, provided that either
+(a) this copyright and permission notice appear with all copies
+of the Data Files or Software, or
+(b) this copyright and permission notice appear in associated
+Documentation.
+
+THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT OF THIRD PARTY RIGHTS.
+IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS
NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL
-DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
-WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
-OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA FILES OR SOFTWARE.
-
- Except as contained in this notice, the name of a copyright holder shall not
-be used in advertising or otherwise to promote the sale, use or other dealings
-in these Data Files or Software without prior written authorization of the
-copyright holder.
-
- Unicode and the Unicode logo are trademarks of Unicode, Inc., and may be
-registered in some jurisdictions. All other trademarks and registered trademarks
-mentioned herein are the property of their respective owners.
+DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THE DATA FILES OR SOFTWARE.
+
+Except as contained in this notice, the name of a copyright holder
+shall not be used in advertising or otherwise to promote the sale,
+use or other dealings in these Data Files or Software without prior
+written authorization of the copyright holder.
***************************************************************************
diff --git a/VERSION b/VERSION
index d2c4c84b782..96a9a52bfd8 100644
--- a/VERSION
+++ b/VERSION
@@ -1,4 +1,4 @@
MYSQL_VERSION_MAJOR=10
-MYSQL_VERSION_MINOR=9
-MYSQL_VERSION_PATCH=6
+MYSQL_VERSION_MINOR=10
+MYSQL_VERSION_PATCH=4
SERVER_MATURITY=stable
diff --git a/client/mysql.cc b/client/mysql.cc
index fff0c5984ad..cf541160ea6 100644
--- a/client/mysql.cc
+++ b/client/mysql.cc
@@ -1481,7 +1481,7 @@ static bool do_connect(MYSQL *mysql, const char *host, const char *user,
if (opt_secure_auth)
mysql_options(mysql, MYSQL_SECURE_AUTH, (char *) &opt_secure_auth);
#if defined(HAVE_OPENSSL) && !defined(EMBEDDED_LIBRARY)
- if (opt_use_ssl)
+ if (opt_use_ssl && opt_protocol <= MYSQL_PROTOCOL_SOCKET)
{
mysql_ssl_set(mysql, opt_ssl_key, opt_ssl_cert, opt_ssl_ca,
opt_ssl_capath, opt_ssl_cipher);
diff --git a/client/mysqldump.c b/client/mysqldump.c
index 2d6584aa05b..99f53a71164 100644
--- a/client/mysqldump.c
+++ b/client/mysqldump.c
@@ -2533,7 +2533,7 @@ static uint dump_events_for_db(char *db)
MYSQL_RES *event_res, *event_list_res;
MYSQL_ROW row, event_list_row;
- char db_cl_name[MY_CS_NAME_SIZE];
+ char db_cl_name[MY_CS_COLLATION_NAME_SIZE];
int db_cl_altered= FALSE;
DBUG_ENTER("dump_events_for_db");
@@ -2756,7 +2756,7 @@ static uint dump_routines_for_db(char *db)
FILE *sql_file= md_result_file;
MYSQL_ROW row, routine_list_row;
- char db_cl_name[MY_CS_NAME_SIZE];
+ char db_cl_name[MY_CS_COLLATION_NAME_SIZE];
int db_cl_altered= FALSE;
// before 10.3 packages are not supported
uint upper_bound= mysql_get_server_version(mysql) >= 100300 ?
@@ -3802,7 +3802,7 @@ static int dump_triggers_for_table(char *table_name, char *db_name)
MYSQL_ROW row;
FILE *sql_file= md_result_file;
- char db_cl_name[MY_CS_NAME_SIZE];
+ char db_cl_name[MY_CS_COLLATION_NAME_SIZE];
int ret= TRUE;
/* Servers below 5.1.21 do not support SHOW CREATE TRIGGER */
const int use_show_create_trigger= mysql_get_server_version(mysql) >= 50121;
diff --git a/client/mysqlimport.c b/client/mysqlimport.c
index 03f47b3a4ad..ae27c691e57 100644
--- a/client/mysqlimport.c
+++ b/client/mysqlimport.c
@@ -531,15 +531,18 @@ static void safe_exit(int error, MYSQL *mysql)
if (mysql)
mysql_close(mysql);
- if (error)
- sf_leaking_memory= 1; /* dirty exit, some threads are still running */
- else
+ if (counter)
{
- mysql_library_end();
- free_defaults(argv_to_free);
- my_free(opt_password);
- my_end(my_end_arg); /* clean exit */
+ /* dirty exit. some threads are running,
+ memory is not freed, openssl not deinitialized */
+ DBUG_ASSERT(error);
+ _exit(error);
}
+
+ mysql_library_end();
+ free_defaults(argv_to_free);
+ my_free(opt_password);
+ my_end(my_end_arg); /* clean exit */
exit(error);
}
diff --git a/client/mysqltest.cc b/client/mysqltest.cc
index 9854001ba1a..a758b19a0fc 100644
--- a/client/mysqltest.cc
+++ b/client/mysqltest.cc
@@ -6146,12 +6146,8 @@ void do_connect(struct st_command *command)
mysql_options(con_slot->mysql, MYSQL_OPT_SSL_CRL, opt_ssl_crl);
mysql_options(con_slot->mysql, MYSQL_OPT_SSL_CRLPATH, opt_ssl_crlpath);
mysql_options(con_slot->mysql, MARIADB_OPT_TLS_VERSION, opt_tls_version);
-#if MYSQL_VERSION_ID >= 50000
- /* Turn on ssl_verify_server_cert only if host is "localhost" */
- opt_ssl_verify_server_cert= !strcmp(ds_host.str, "localhost");
mysql_options(con_slot->mysql, MYSQL_OPT_SSL_VERIFY_SERVER_CERT,
&opt_ssl_verify_server_cert);
-#endif
}
#endif
@@ -9894,12 +9890,8 @@ int main(int argc, char **argv)
mysql_options(con->mysql, MYSQL_OPT_SSL_CRL, opt_ssl_crl);
mysql_options(con->mysql, MYSQL_OPT_SSL_CRLPATH, opt_ssl_crlpath);
mysql_options(con->mysql, MARIADB_OPT_TLS_VERSION, opt_tls_version);
-#if MYSQL_VERSION_ID >= 50000
- /* Turn on ssl_verify_server_cert only if host is "localhost" */
- opt_ssl_verify_server_cert= opt_host && !strcmp(opt_host, "localhost");
mysql_options(con->mysql, MYSQL_OPT_SSL_VERIFY_SERVER_CERT,
&opt_ssl_verify_server_cert);
-#endif
}
#endif
diff --git a/debian/additions/mariadb.conf.d/50-server.cnf b/debian/additions/mariadb.conf.d/50-server.cnf
index 953a34034c6..aa61301297e 100644
--- a/debian/additions/mariadb.conf.d/50-server.cnf
+++ b/debian/additions/mariadb.conf.d/50-server.cnf
@@ -108,7 +108,7 @@ collation-server = utf8mb4_general_ci
# you can put MariaDB-only options here
[mariadb]
-# This group is only read by MariaDB-10.9 servers.
+# This group is only read by MariaDB-10.10 servers.
# If you use the same .cnf file for MariaDB of different versions,
# use this group for options that older servers don't understand
-[mariadb-10.9]
+[mariadb-10.10]
diff --git a/debian/autobake-deb.sh b/debian/autobake-deb.sh
index abced44cdb2..83f1ce73ed2 100755
--- a/debian/autobake-deb.sh
+++ b/debian/autobake-deb.sh
@@ -56,6 +56,15 @@ remove_rocksdb_tools()
fi
}
+add_lsb_base_depends()
+{
+ # Make sure one can run this multiple times remove
+ # lines 'sysvinit-utils' and 'lsb-base'.
+ sed -e '/sysvinit-utils/d' -e '/lsb-base/d' -i debian/control
+ # Add back lsb-base before lsof
+ sed -e 's#lsof #lsb-base (>= 3.0-10),\n lsof #' -i debian/control
+}
+
replace_uring_with_aio()
{
sed 's/liburing-dev/libaio-dev/g' -i debian/control
@@ -106,6 +115,7 @@ case "${LSBNAME}"
in
# Debian
"buster")
+ add_lsb_base_depends
disable_libfmt
replace_uring_with_aio
if [ ! "$architecture" = amd64 ]
@@ -114,6 +124,10 @@ in
fi
;&
"bullseye"|"bookworm")
+ if [[ "${LSBNAME}" == "bullseye" ]]
+ then
+ add_lsb_base_depends
+ fi
# mariadb-plugin-rocksdb in control is 4 arches covered by the distro rocksdb-tools
# so no removal is necessary.
if [[ ! "$architecture" =~ amd64|arm64|ppc64el ]]
@@ -131,14 +145,17 @@ in
;;
# Ubuntu
"bionic")
+ add_lsb_base_depends
remove_rocksdb_tools
[ "$architecture" != amd64 ] && disable_pmem
;&
"focal")
+ add_lsb_base_depends
replace_uring_with_aio
disable_libfmt
;&
"impish"|"jammy"|"kinetic")
+ add_lsb_base_depends
# mariadb-plugin-rocksdb s390x not supported by us (yet)
# ubuntu doesn't support mips64el yet, so keep this just
# in case something changes.
diff --git a/debian/changelog b/debian/changelog
index 0ebfb0a61c2..2f98eccffce 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,4 +1,4 @@
-mariadb (1:10.9.0) unstable; urgency=medium
+mariadb (1:10.10.0) unstable; urgency=medium
* Initial Release
diff --git a/debian/control b/debian/control
index 2c59314bb4b..3dd4c6bd61f 100644
--- a/debian/control
+++ b/debian/control
@@ -341,7 +341,6 @@ Replaces: mariadb-client (<< ${source:Version}),
mariadb-client-10.6,
mariadb-client-10.7,
mariadb-client-10.8,
- mariadb-client-10.9 (<< ${source:Version}),
mariadb-client-5.1,
mariadb-client-5.2,
mariadb-client-5.3,
@@ -371,7 +370,6 @@ Replaces: mariadb-client (<< ${source:Version}),
mariadb-server-core-10.6,
mariadb-server-core-10.7,
mariadb-server-core-10.8,
- mariadb-server-core-10.9 (<< ${source:Version}),
mysql-client (<< 5.0.51),
mysql-client-5.0,
mysql-client-5.1,
@@ -394,7 +392,7 @@ Replaces: mariadb-client (<< ${source:Version}),
percona-xtradb-cluster-server-8.0,
virtual-mysql-client-core
Provides: default-mysql-client-core,
- mariadb-client-core-10.9,
+ mariadb-client-core-10.10,
virtual-mysql-client-core
Description: MariaDB database core client binaries
MariaDB is a fast, stable and true multi-user, multi-threaded SQL database
@@ -423,7 +421,6 @@ Conflicts: mariadb-client (<< ${source:Version}),
mariadb-client-10.6,
mariadb-client-10.7,
mariadb-client-10.8,
- mariadb-client-10.9 (<< ${source:Version}),
mariadb-client-5.1,
mariadb-client-5.2,
mariadb-client-5.3,
@@ -453,7 +450,6 @@ Breaks: mariadb-client-core (<< ${source:Version}),
mariadb-client-core-10.6,
mariadb-client-core-10.7,
mariadb-client-core-10.8,
- mariadb-client-core-10.9 (<< ${source:Version}),
mariadb-server (<< ${source:Version}),
mariadb-server-10.0,
mariadb-server-10.1,
@@ -464,7 +460,6 @@ Breaks: mariadb-client-core (<< ${source:Version}),
mariadb-server-10.6,
mariadb-server-10.7,
mariadb-server-10.8,
- mariadb-server-10.9 (<< ${source:Version}),
mariadb-server-core (<< ${source:Version}),
mariadb-server-core-10.0,
mariadb-server-core-10.1,
@@ -496,7 +491,6 @@ Replaces: mariadb-client (<< ${source:Version}),
mariadb-client-10.6,
mariadb-client-10.7,
mariadb-client-10.8,
- mariadb-client-10.9 (<< ${source:Version}),
mariadb-client-5.1,
mariadb-client-5.2,
mariadb-client-5.3,
@@ -511,7 +505,6 @@ Replaces: mariadb-client (<< ${source:Version}),
mariadb-client-core-10.6,
mariadb-client-core-10.7,
mariadb-client-core-10.8,
- mariadb-client-core-10.9 (<< ${source:Version}),
mariadb-server (<< ${source:Version}),
mariadb-server-10.0,
mariadb-server-10.1,
@@ -522,7 +515,6 @@ Replaces: mariadb-client (<< ${source:Version}),
mariadb-server-10.6,
mariadb-server-10.7,
mariadb-server-10.8,
- mariadb-server-10.9 (<< ${source:Version}),
mariadb-server-core (<< ${source:Version}),
mariadb-server-core-10.0,
mariadb-server-core-10.1,
@@ -533,7 +525,6 @@ Replaces: mariadb-client (<< ${source:Version}),
mariadb-server-core-10.6,
mariadb-server-core-10.7,
mariadb-server-core-10.8,
- mariadb-server-core-10.9 (<< ${source:Version}),
mysql-client (<< 5.0.51),
mysql-client-5.0,
mysql-client-5.1,
@@ -561,7 +552,7 @@ Replaces: mariadb-client (<< ${source:Version}),
percona-xtradb-cluster-server-5.7,
virtual-mysql-client
Provides: default-mysql-client,
- mariadb-client-10.9,
+ mariadb-client-10.10,
virtual-mysql-client
Recommends: libdbd-mariadb-perl | libdbd-mysql-perl,
libdbi-perl,
@@ -580,7 +571,8 @@ Architecture: any
Depends: mariadb-common (>= ${source:Version}),
${misc:Depends},
${shlibs:Depends}
-Conflicts: mariadb-server-core-10.0,
+Conflicts: mariadb-server-core (<< ${source:Version}),
+ mariadb-server-core-10.0,
mariadb-server-core-10.1,
mariadb-server-core-10.2,
mariadb-server-core-10.3,
@@ -589,7 +581,6 @@ Conflicts: mariadb-server-core-10.0,
mariadb-server-core-10.6,
mariadb-server-core-10.7,
mariadb-server-core-10.8,
- mariadb-server-core-10.9 (<< ${source:Version}),
mariadb-server-core-5.1,
mariadb-server-core-5.2,
mariadb-server-core-5.3,
@@ -612,7 +603,6 @@ Breaks: mariadb-client (<< ${source:Version}),
mariadb-client-10.6,
mariadb-client-10.7,
mariadb-client-10.8,
- mariadb-client-10.9 (<< ${source:Version}),
mariadb-server (<< ${source:Version}),
mariadb-server-10.0,
mariadb-server-10.1,
@@ -623,7 +613,6 @@ Breaks: mariadb-client (<< ${source:Version}),
mariadb-server-10.6,
mariadb-server-10.7,
mariadb-server-10.8,
- mariadb-server-10.9 (<< ${source:Version}),
mysql-client-5.5,
mysql-server-5.5,
mysql-server-5.6,
@@ -642,7 +631,6 @@ Replaces: mariadb-client (<< ${source:Version}),
mariadb-client-10.6,
mariadb-client-10.7,
mariadb-client-10.8,
- mariadb-client-10.9 (<< ${source:Version}),
mariadb-server (<< ${source:Version}),
mariadb-server-10.0,
mariadb-server-10.1,
@@ -653,7 +641,6 @@ Replaces: mariadb-client (<< ${source:Version}),
mariadb-server-10.6,
mariadb-server-10.7,
mariadb-server-10.8,
- mariadb-server-10.9 (<< ${source:Version}),
mariadb-server-core-10.0,
mariadb-server-core-10.1,
mariadb-server-core-10.2,
@@ -681,7 +668,7 @@ Replaces: mariadb-client (<< ${source:Version}),
percona-xtradb-cluster-server-5.7,
virtual-mysql-server-core
Provides: default-mysql-server-core,
- mariadb-server-core-10.9,
+ mariadb-server-core-10.10,
virtual-mysql-server-core
Description: MariaDB database core server files
MariaDB is a fast, stable and true multi-user, multi-threaded SQL database
@@ -705,7 +692,6 @@ Depends: galera-4 (>= 26.4),
gawk,
iproute2 [linux-any],
libdbi-perl,
- lsb-base (>= 3.0-10),
lsof [linux-any],
mariadb-client (>= ${source:Version}),
mariadb-server-core (>= ${source:Version}),
@@ -728,7 +714,6 @@ Conflicts: mariadb-server (<< ${source:Version}),
mariadb-server-10.6,
mariadb-server-10.7,
mariadb-server-10.8,
- mariadb-server-10.9 (<< ${source:Version}),
mariadb-server-5.1,
mariadb-server-5.2,
mariadb-server-5.3,
@@ -763,7 +748,6 @@ Replaces: handlersocket-mysql-5.5,
mariadb-client-10.6,
mariadb-client-10.7,
mariadb-client-10.8,
- mariadb-client-10.9 (<< ${source:Version}),
mariadb-server (<< ${source:Version}),
mariadb-server-10.0,
mariadb-server-10.1,
@@ -774,7 +758,6 @@ Replaces: handlersocket-mysql-5.5,
mariadb-server-10.6,
mariadb-server-10.7,
mariadb-server-10.8,
- mariadb-server-10.9 (<< ${source:Version}),
mariadb-server-5.1,
mariadb-server-5.2,
mariadb-server-5.3,
@@ -797,7 +780,7 @@ Replaces: handlersocket-mysql-5.5,
percona-xtradb-cluster-server-5.7,
virtual-mysql-server
Provides: default-mysql-server,
- mariadb-server-10.9,
+ mariadb-server-10.10,
virtual-mysql-server
Description: MariaDB database server binaries
MariaDB is a fast, stable and true multi-user, multi-threaded SQL database
diff --git a/debian/not-installed b/debian/not-installed
index e92a8f77ad0..f209b2394b7 100644
--- a/debian/not-installed
+++ b/debian/not-installed
@@ -24,6 +24,7 @@ usr/lib/x86_64-linux-gnu/libidbboot.a # ColumnStore header file
usr/lib/x86_64-linux-gnu/libprocessor.a # ColumnStore header file
usr/lib/x86_64-linux-gnu/libwe_xml.a # ColumnStore header file
usr/bin/test-connect-t
+usr/bin/uca-dump
usr/bin/wsrep_sst_backup
usr/lib/mysql/plugin/type_test.so
usr/lib/sysusers.d/mariadb.conf # Not used (yet) in Debian systemd
diff --git a/debian/source/lintian-overrides b/debian/source/lintian-overrides
index 0666044ac38..740a7871a2e 100644
--- a/debian/source/lintian-overrides
+++ b/debian/source/lintian-overrides
@@ -10,22 +10,22 @@ version-substvar-for-external-package mariadb-client-10.9 -> mysql-client-core-5
version-substvar-for-external-package mariadb-client-10.9 -> mysql-client-core-8.*
version-substvar-for-external-package libmariadbd-dev -> libmariadbclient-dev
# Intentional version-substvar-for-external-package as long as mariadb-server
-# provides mariadb-server-10.9 and mariadb-client provides mariadb-client-10.9
-version-substvar-for-external-package Conflicts (line 408) ${source:Version} mariadb-client -> mariadb-client-10.9
-version-substvar-for-external-package Conflicts (line 575) ${source:Version} mariadb-server-core -> mariadb-server-core-10.9
-version-substvar-for-external-package Conflicts (line 711) ${source:Version} mariadb-server -> mariadb-server-10.9
+# provides mariadb-server-10.10 and mariadb-client provides mariadb-client-10.10
+version-substvar-for-external-package Conflicts (line 408) ${source:Version} mariadb-client -> mariadb-client-10.10
+version-substvar-for-external-package Conflicts (line 575) ${source:Version} mariadb-server-core -> mariadb-server-core-10.10
+version-substvar-for-external-package Conflicts (line 711) ${source:Version} mariadb-server -> mariadb-server-10.10
version-substvar-for-external-package Conflicts (line 95) ${source:Version} libmariadb-dev-compat -> libmariadbclient-dev
version-substvar-for-external-package Replaces (line 109) ${source:Version} libmariadb-dev-compat -> libmariadbclient-dev
-version-substvar-for-external-package Replaces (line 330) ${source:Version} mariadb-client-core -> mariadb-client-10.9
-version-substvar-for-external-package Replaces (line 330) ${source:Version} mariadb-client-core -> mariadb-server-core-10.9
-version-substvar-for-external-package Replaces (line 481) ${source:Version} mariadb-client -> mariadb-client-10.9
-version-substvar-for-external-package Replaces (line 481) ${source:Version} mariadb-client -> mariadb-client-core-10.9
-version-substvar-for-external-package Replaces (line 481) ${source:Version} mariadb-client -> mariadb-server-10.9
-version-substvar-for-external-package Replaces (line 481) ${source:Version} mariadb-client -> mariadb-server-core-10.9
-version-substvar-for-external-package Replaces (line 626) ${source:Version} mariadb-server-core -> mariadb-client-10.9
-version-substvar-for-external-package Replaces (line 626) ${source:Version} mariadb-server-core -> mariadb-server-10.9
-version-substvar-for-external-package Replaces (line 748) ${source:Version} mariadb-server -> mariadb-client-10.9
-version-substvar-for-external-package Replaces (line 748) ${source:Version} mariadb-server -> mariadb-server-10.9
+version-substvar-for-external-package Replaces (line 330) ${source:Version} mariadb-client-core -> mariadb-client-10.10
+version-substvar-for-external-package Replaces (line 330) ${source:Version} mariadb-client-core -> mariadb-server-core-10.10
+version-substvar-for-external-package Replaces (line 481) ${source:Version} mariadb-client -> mariadb-client-10.10
+version-substvar-for-external-package Replaces (line 481) ${source:Version} mariadb-client -> mariadb-client-core-10.10
+version-substvar-for-external-package Replaces (line 481) ${source:Version} mariadb-client -> mariadb-server-10.10
+version-substvar-for-external-package Replaces (line 481) ${source:Version} mariadb-client -> mariadb-server-core-10.10
+version-substvar-for-external-package Replaces (line 626) ${source:Version} mariadb-server-core -> mariadb-client-10.10
+version-substvar-for-external-package Replaces (line 626) ${source:Version} mariadb-server-core -> mariadb-server-10.10
+version-substvar-for-external-package Replaces (line 748) ${source:Version} mariadb-server -> mariadb-client-10.10
+version-substvar-for-external-package Replaces (line 748) ${source:Version} mariadb-server -> mariadb-server-10.10
# ColumnStore not used in Debian, safe to ignore. Reported upstream in https://jira.mariadb.org/browse/MDEV-24124
source-is-missing storage/columnstore/columnstore/utils/jemalloc/libjemalloc.so.2
source-is-missing [storage/columnstore/columnstore/utils/jemalloc/libjemalloc.so.2]
diff --git a/extra/innochecksum.cc b/extra/innochecksum.cc
index 7b8ffa92d3b..cc8f8d14094 100644
--- a/extra/innochecksum.cc
+++ b/extra/innochecksum.cc
@@ -1205,16 +1205,16 @@ static struct my_option innochecksum_options[] = {
{0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}
};
-/* Print out the Innodb version and machine information. */
-static void print_version(void)
+/** Print out the version and build information. */
+static void print_version()
{
#ifdef DBUG_OFF
printf("%s Ver %s, for %s (%s)\n",
- my_progname, INNODB_VERSION_STR,
+ my_progname, PACKAGE_VERSION,
SYSTEM_TYPE, MACHINE_TYPE);
#else
printf("%s-debug Ver %s, for %s (%s)\n",
- my_progname, INNODB_VERSION_STR,
+ my_progname, PACKAGE_VERSION,
SYSTEM_TYPE, MACHINE_TYPE);
#endif /* DBUG_OFF */
}
diff --git a/extra/mariabackup/backup_copy.cc b/extra/mariabackup/backup_copy.cc
index 661d2eafad1..dbf12cedd68 100644
--- a/extra/mariabackup/backup_copy.cc
+++ b/extra/mariabackup/backup_copy.cc
@@ -1497,7 +1497,7 @@ bool backup_start(ds_ctxt *ds_data, ds_ctxt *ds_meta,
write_binlog_info(ds_data, mysql_connection);
}
- if (have_flush_engine_logs && !opt_no_lock) {
+ if (!opt_no_lock) {
msg("Executing FLUSH NO_WRITE_TO_BINLOG ENGINE LOGS...");
xb_mysql_query(mysql_connection,
"FLUSH NO_WRITE_TO_BINLOG ENGINE LOGS", false);
diff --git a/extra/mariabackup/backup_mysql.cc b/extra/mariabackup/backup_mysql.cc
index 669635f728c..53c95bf85c0 100644
--- a/extra/mariabackup/backup_mysql.cc
+++ b/extra/mariabackup/backup_mysql.cc
@@ -62,16 +62,13 @@ Street, Fifth Floor, Boston, MA 02110-1335 USA
char *tool_name;
char tool_args[2048];
-/* mysql flavor and version */
-mysql_flavor_t server_flavor = FLAVOR_UNKNOWN;
-unsigned long mysql_server_version = 0;
+ulong mysql_server_version;
/* server capabilities */
bool have_changed_page_bitmaps = false;
bool have_backup_locks = false;
bool have_lock_wait_timeout = false;
bool have_galera_enabled = false;
-bool have_flush_engine_logs = false;
bool have_multi_threaded_slave = false;
bool have_gtid_slave = false;
@@ -135,7 +132,7 @@ xb_mysql_connect()
opt_socket ? opt_socket : "not set");
#ifdef HAVE_OPENSSL
- if (opt_use_ssl)
+ if (opt_use_ssl && opt_protocol <= MYSQL_PROTOCOL_SOCKET)
{
mysql_ssl_set(connection, opt_ssl_key, opt_ssl_cert,
opt_ssl_ca, opt_ssl_capath,
@@ -298,48 +295,13 @@ read_mysql_one_value(MYSQL *mysql, const char *query)
static
bool
-check_server_version(unsigned long version_number,
- const char *version_string,
- const char *version_comment,
- const char *innodb_version)
+check_server_version(ulong version_number, const char *version_string)
{
- bool version_supported = false;
- bool mysql51 = false;
-
- mysql_server_version = version_number;
-
- server_flavor = FLAVOR_UNKNOWN;
- if (strstr(version_comment, "Percona") != NULL) {
- server_flavor = FLAVOR_PERCONA_SERVER;
- } else if (strstr(version_comment, "MariaDB") != NULL ||
- strstr(version_string, "MariaDB") != NULL) {
- server_flavor = FLAVOR_MARIADB;
- } else if (strstr(version_comment, "MySQL") != NULL) {
- server_flavor = FLAVOR_MYSQL;
- }
-
- mysql51 = version_number > 50100 && version_number < 50500;
- version_supported = version_supported
- || (mysql51 && innodb_version != NULL);
- version_supported = version_supported
- || (version_number > 50500 && version_number < 50700);
- version_supported = version_supported
- || ((version_number > 100000)
- && server_flavor == FLAVOR_MARIADB);
-
- if (mysql51 && innodb_version == NULL) {
- msg("Error: Built-in InnoDB in MySQL 5.1 is not "
- "supported in this release. You can either use "
- "Percona XtraBackup 2.0, or upgrade to InnoDB "
- "plugin.");
- } else if (!version_supported) {
- msg("Error: Unsupported server version: '%s'. Please "
- "report a bug at "
- "https://bugs.launchpad.net/percona-xtrabackup",
- version_string);
- }
+ if (strstr(version_string, "MariaDB") && version_number >= 100800)
+ return true;
- return(version_supported);
+ msg("Error: Unsupported server version: '%s'.", version_string);
+ return false;
}
/*********************************************************************//**
@@ -349,8 +311,6 @@ bool get_mysql_vars(MYSQL *connection)
{
char *gtid_mode_var= NULL;
char *version_var= NULL;
- char *version_comment_var= NULL;
- char *innodb_version_var= NULL;
char *have_backup_locks_var= NULL;
char *log_bin_var= NULL;
char *lock_wait_timeout_var= NULL;
@@ -371,7 +331,7 @@ bool get_mysql_vars(MYSQL *connection)
char *page_zip_level_var= NULL;
char *ignore_db_dirs= NULL;
char *endptr;
- unsigned long server_version= mysql_get_server_version(connection);
+ ulong server_version= mysql_get_server_version(connection);
bool ret= true;
@@ -381,8 +341,6 @@ bool get_mysql_vars(MYSQL *connection)
{"lock_wait_timeout", &lock_wait_timeout_var},
{"gtid_mode", &gtid_mode_var},
{"version", &version_var},
- {"version_comment", &version_comment_var},
- {"innodb_version", &innodb_version_var},
{"wsrep_on", &wsrep_on_var},
{"slave_parallel_workers", &slave_parallel_workers_var},
{"gtid_slave_pos", &gtid_slave_pos_var},
@@ -426,18 +384,13 @@ bool get_mysql_vars(MYSQL *connection)
have_galera_enabled= true;
}
- /* Check server version compatibility and detect server flavor */
-
- if (!(ret= check_server_version(server_version, version_var,
- version_comment_var, innodb_version_var)))
+ /* Check server version compatibility */
+ if (!(ret= check_server_version(server_version, version_var)))
{
goto out;
}
- if (server_version > 50500)
- {
- have_flush_engine_logs= true;
- }
+ mysql_server_version= server_version;
if (slave_parallel_workers_var != NULL &&
atoi(slave_parallel_workers_var) > 0)
@@ -574,16 +527,6 @@ detect_mysql_capabilities_for_backup()
have_changed_page_bitmaps = (atoi(innodb_changed_pages) == 1);
- /* INNODB_CHANGED_PAGES are listed in
- INFORMATION_SCHEMA.PLUGINS in MariaDB, but
- FLUSH NO_WRITE_TO_BINLOG CHANGED_PAGE_BITMAPS
- is not supported for versions below 10.1.6
- (see MDEV-7472) */
- if (server_flavor == FLAVOR_MARIADB &&
- mysql_server_version < 100106) {
- have_changed_page_bitmaps = false;
- }
-
free_mysql_variables(vars);
}
@@ -1390,21 +1333,8 @@ bool
write_slave_info(ds_ctxt *datasink, MYSQL *connection)
{
String sql, comment;
- bool show_all_slaves_status= false;
-
- switch (server_flavor)
- {
- case FLAVOR_MARIADB:
- show_all_slaves_status= mysql_server_version >= 100000;
- break;
- case FLAVOR_UNKNOWN:
- case FLAVOR_MYSQL:
- case FLAVOR_PERCONA_SERVER:
- break;
- }
- if (Show_slave_status::get_slave_info(connection, show_all_slaves_status,
- &sql, &comment))
+ if (Show_slave_status::get_slave_info(connection, true, &sql, &comment))
return false; // Error
if (!sql.length())
diff --git a/extra/mariabackup/backup_mysql.h b/extra/mariabackup/backup_mysql.h
index d80f3bb7bc1..4b08da0b939 100644
--- a/extra/mariabackup/backup_mysql.h
+++ b/extra/mariabackup/backup_mysql.h
@@ -3,18 +3,14 @@
#include <mysql.h>
-/* mysql flavor and version */
-enum mysql_flavor_t { FLAVOR_UNKNOWN, FLAVOR_MYSQL,
- FLAVOR_PERCONA_SERVER, FLAVOR_MARIADB };
-extern mysql_flavor_t server_flavor;
-extern unsigned long mysql_server_version;
+/* MariaDB version */
+extern ulong mysql_server_version;
/* server capabilities */
extern bool have_changed_page_bitmaps;
extern bool have_backup_locks;
extern bool have_lock_wait_timeout;
extern bool have_galera_enabled;
-extern bool have_flush_engine_logs;
extern bool have_multi_threaded_slave;
extern bool have_gtid_slave;
diff --git a/include/m_ctype.h b/include/m_ctype.h
index 4b7378b4ecd..6812445c6d5 100644
--- a/include/m_ctype.h
+++ b/include/m_ctype.h
@@ -34,7 +34,9 @@ enum loglevel {
extern "C" {
#endif
-#define MY_CS_NAME_SIZE 32
+#define MY_CS_CHARACTER_SET_NAME_SIZE 32
+#define MY_CS_COLLATION_NAME_SIZE 64
+
#define MY_CS_CTYPE_TABLE_SIZE 257
#define MY_CS_TO_LOWER_TABLE_SIZE 256
#define MY_CS_TO_UPPER_TABLE_SIZE 256
@@ -77,31 +79,27 @@ extern "C" {
typedef const struct my_charset_handler_st MY_CHARSET_HANDLER;
typedef const struct my_collation_handler_st MY_COLLATION_HANDLER;
-typedef const struct unicase_info_st MY_UNICASE_INFO;
+typedef const struct casefold_info_st MY_CASEFOLD_INFO;
typedef const struct uni_ctype_st MY_UNI_CTYPE;
typedef const struct my_uni_idx_st MY_UNI_IDX;
typedef uint16 decimal_digits_t;
-typedef struct unicase_info_char_st
+
+typedef struct casefold_info_char_t
{
uint32 toupper;
uint32 tolower;
- uint32 sort;
-} MY_UNICASE_CHARACTER;
+} MY_CASEFOLD_CHARACTER;
-struct unicase_info_st
+struct casefold_info_st
{
my_wc_t maxchar;
- MY_UNICASE_CHARACTER **page;
+ const MY_CASEFOLD_CHARACTER * const *page;
+ const uint16 * const *simple_weight; /* For general_ci-alike collations */
};
-extern MY_UNICASE_INFO my_unicase_default;
-extern MY_UNICASE_INFO my_unicase_turkish;
-extern MY_UNICASE_INFO my_unicase_mysql500;
-extern MY_UNICASE_INFO my_unicase_unicode520;
-
#define MY_UCA_MAX_CONTRACTION 6
/*
The DUCET tables in ctype-uca.c are dumped with a limit of 8 weights
@@ -116,7 +114,7 @@ extern MY_UNICASE_INFO my_unicase_unicode520;
*/
#define MY_UCA_MAX_WEIGHT_SIZE (8+1) /* Including 0 terminator */
#define MY_UCA_CONTRACTION_MAX_WEIGHT_SIZE (2*8+1) /* Including 0 terminator */
-#define MY_UCA_WEIGHT_LEVELS 2
+#define MY_UCA_WEIGHT_LEVELS 3
typedef struct my_contraction_t
{
@@ -139,6 +137,65 @@ const uint16 *my_uca_contraction2_weight(const MY_CONTRACTIONS *c,
my_wc_t wc1, my_wc_t wc2);
+typedef struct my_uca_weight2_t
+{
+ uint16 weight[2];
+} MY_UCA_WEIGHT2;
+
+
+/*
+ In DUCET as of Unicode-14.0.0:
+ - All characters in the range U+0000..U+007F (i.e. using one byte in utf8)
+ have not more than two weights on all weight levels.
+ - All characters in the range U+0080..U+07FF (i.e. using two bytes in utf8)
+ have not more than four weights on all weight levels.
+ Therefore the limit of 4 weights should cover all byte pairs
+ (i.e. two ASCII characters or one 2-byte character)
+ that are a subject for the "process 2 bytes at a time" optimization.
+ If some collation reorders any character from the mentioned ranges
+ in the way that it produces more weights, such character will not
+ be optimized, but will be correctly processed the slower mb_wc-based
+ method (1 character at a time).
+*/
+#define MY_UCA_2BYTES_MAX_WEIGHT_SIZE (4+1) /* Including 0 terminator */
+
+typedef struct my_uca_2bytes_item_t
+{
+ uint16 weight[MY_UCA_2BYTES_MAX_WEIGHT_SIZE];
+} MY_UCA_2BYTES_ITEM;
+
+
+typedef struct my_uca_level_booster_t
+{
+ /*
+ A helper array to process 2 bytes at a time during string comparison.
+ It maps all 2-bytes sequences that make:
+ - two ASCII characters or
+ - one 2-byte character
+ to their weights. The weight length is limited to
+ MY_UCA_2BYTES_MAX_WEIGHT_SIZE-1 weights.
+ This array is used in the main loop optimization.
+ */
+ MY_UCA_2BYTES_ITEM weight_strings_2bytes[0x10000];
+ /*
+ A helper array to process 2bytes at a time during string comparison,
+ with an even more efficient way than the above one.
+ The weight size is limited to 2 weights, so it's used for the cases
+ when 2 input bytes produce 1 or 2 weights.
+ This limit makes the code using this array even simpler and faster.
+ This array is used for prefix optimization.
+ */
+ MY_UCA_WEIGHT2 weight_strings_2bytes_to_1_or_2_weights[0x10000];
+} MY_UCA_LEVEL_BOOSTER;
+
+
+typedef struct my_uca_contraction_hash_t
+{
+ size_t nitems_alloced;
+ MY_CONTRACTION *item;
+} MY_UCA_CONTRACTION_HASH;
+
+
/* Collation weights on a single level (e.g. primary, secondary, tertiary) */
typedef struct my_uca_level_info_st
{
@@ -147,6 +204,8 @@ typedef struct my_uca_level_info_st
uint16 **weights;
MY_CONTRACTIONS contractions;
uint levelno;
+ MY_UCA_CONTRACTION_HASH contraction_hash;
+ MY_UCA_LEVEL_BOOSTER *booster;
} MY_UCA_WEIGHT_LEVEL;
@@ -168,6 +227,9 @@ typedef struct uca_info_st
my_wc_t first_variable;
my_wc_t last_variable;
+ /* Unicode version */
+ uint version;
+
} MY_UCA_INFO;
@@ -237,6 +299,46 @@ typedef enum enum_repertoire_t
} my_repertoire_t;
+/* ID compatibility */
+typedef enum enum_collation_id_type
+{
+ MY_COLLATION_ID_TYPE_PRECISE= 0,
+ MY_COLLATION_ID_TYPE_COMPAT_100800= 1
+} my_collation_id_type_t;
+
+
+/* Collation name display modes */
+typedef enum enum_collation_name_mode
+{
+ MY_COLLATION_NAME_MODE_FULL= 0,
+ MY_COLLATION_NAME_MODE_CONTEXT= 1
+} my_collation_name_mode_t;
+
+
+/* Level flags */
+#define MY_CS_LEVEL_BIT_PRIMARY 0x00
+#define MY_CS_LEVEL_BIT_SECONDARY 0x01
+#define MY_CS_LEVEL_BIT_TERTIARY 0x02
+#define MY_CS_LEVEL_BIT_QUATERNARY 0x03
+
+#define MY_CS_COLL_LEVELS_S1 (1<<MY_CS_LEVEL_BIT_PRIMARY)
+
+#define MY_CS_COLL_LEVELS_AI_CS (1<<MY_CS_LEVEL_BIT_PRIMARY)| \
+ (1<<MY_CS_LEVEL_BIT_TERTIARY)
+
+#define MY_CS_COLL_LEVELS_S2 (1<<MY_CS_LEVEL_BIT_PRIMARY)| \
+ (1<<MY_CS_LEVEL_BIT_SECONDARY)
+
+#define MY_CS_COLL_LEVELS_S3 (1<<MY_CS_LEVEL_BIT_PRIMARY)| \
+ (1<<MY_CS_LEVEL_BIT_SECONDARY) | \
+ (1<<MY_CS_LEVEL_BIT_TERTIARY)
+
+#define MY_CS_COLL_LEVELS_S4 (1<<MY_CS_LEVEL_BIT_PRIMARY)| \
+ (1<<MY_CS_LEVEL_BIT_SECONDARY) | \
+ (1<<MY_CS_LEVEL_BIT_TERTIARY) | \
+ (1<<MY_CS_LEVEL_BIT_QUATERNARY)
+
+
/* Flags for strxfrm */
#define MY_STRXFRM_LEVEL1 0x00000001 /* for primary weights */
#define MY_STRXFRM_LEVEL2 0x00000002 /* for secondary weights */
@@ -460,8 +562,13 @@ struct my_collation_handler_st
*/
size_t (*min_str)(CHARSET_INFO *cs, uchar *dst, size_t dstlen, size_t nchars);
size_t (*max_str)(CHARSET_INFO *cs, uchar *dst, size_t dstlen, size_t nchars);
+
+ uint (*get_id)(CHARSET_INFO *cs, my_collation_id_type_t type);
+ LEX_CSTRING (*get_collation_name)(CHARSET_INFO *cs,
+ my_collation_name_mode_t mode);
};
+
extern MY_COLLATION_HANDLER my_collation_8bit_bin_handler;
extern MY_COLLATION_HANDLER my_collation_8bit_simple_ci_handler;
extern MY_COLLATION_HANDLER my_collation_8bit_nopad_bin_handler;
@@ -632,6 +739,9 @@ struct my_charset_handler_st
*/
my_charset_conv_wc_mb native_to_mb;
my_charset_conv_wc_mb wc_to_printable;
+
+ uint (*caseup_multiply)(CHARSET_INFO *cs);
+ uint (*casedn_multiply)(CHARSET_INFO *cs);
};
extern MY_CHARSET_HANDLER my_charset_8bit_handler;
@@ -664,12 +774,10 @@ struct charset_info_st
MY_UCA_INFO *uca;
const uint16 *tab_to_uni;
MY_UNI_IDX *tab_from_uni;
- MY_UNICASE_INFO *caseinfo;
+ MY_CASEFOLD_INFO *casefold;
const uchar *state_map;
const uchar *ident_map;
uint strxfrm_multiply;
- uchar caseup_multiply;
- uchar casedn_multiply;
uint mbminlen;
uint mbmaxlen;
/*
@@ -739,6 +847,16 @@ struct charset_info_st
return (cset->casedn)(this, src, srclen, dst, dstlen);
}
+ uint caseup_multiply() const
+ {
+ return (cset->caseup_multiply)(this);
+ }
+
+ uint casedn_multiply() const
+ {
+ return (cset->casedn_multiply)(this);
+ }
+
size_t long10_to_str(char *dst, size_t dstlen,
int radix, long int val) const
{
@@ -863,6 +981,21 @@ struct charset_info_st
}
/* Collation routines */
+ uint default_flag() const
+ {
+ return state & MY_CS_PRIMARY;
+ }
+
+ uint binsort_flag() const
+ {
+ return state & MY_CS_BINSORT;
+ }
+
+ uint compiled_flag() const
+ {
+ return state & MY_CS_COMPILED;
+ }
+
int strnncoll(const uchar *a, size_t alen,
const uchar *b, size_t blen, my_bool b_is_prefix= FALSE) const
{
@@ -960,6 +1093,15 @@ struct charset_info_st
return (coll->max_str)(this, dst, dstlen, nchars);
}
+ uint get_id(my_collation_id_type_t type) const
+ {
+ return (coll->get_id)(this, type);
+ }
+
+ LEX_CSTRING get_collation_name(my_collation_name_mode_t mode) const
+ {
+ return (coll->get_collation_name)(this, mode);
+ }
#endif /* __cplusplus */
};
@@ -1528,7 +1670,7 @@ int my_wildcmp_unicode(CHARSET_INFO *cs,
const char *str, const char *str_end,
const char *wildstr, const char *wildend,
int escape, int w_one, int w_many,
- MY_UNICASE_INFO *weights);
+ MY_CASEFOLD_INFO *weights);
extern my_bool my_parse_charset_xml(MY_CHARSET_LOADER *loader,
const char *buf, size_t buflen);
@@ -1540,6 +1682,9 @@ extern size_t my_strcspn(CHARSET_INFO *cs, const char *str, const char *end,
my_bool my_propagate_simple(CHARSET_INFO *cs, const uchar *str, size_t len);
my_bool my_propagate_complex(CHARSET_INFO *cs, const uchar *str, size_t len);
+uint my_ci_get_id_generic(CHARSET_INFO *cs, my_collation_id_type_t type);
+LEX_CSTRING my_ci_get_collation_name_generic(CHARSET_INFO *cs,
+ my_collation_name_mode_t mode);
typedef struct
{
@@ -1554,7 +1699,7 @@ my_repertoire_t my_string_repertoire(CHARSET_INFO *cs,
my_bool my_charset_is_ascii_based(CHARSET_INFO *cs);
my_repertoire_t my_charset_repertoire(CHARSET_INFO *cs);
-uint my_strxfrm_flag_normalize(uint flags, uint nlevels);
+uint my_strxfrm_flag_normalize(CHARSET_INFO *cs, uint flags);
void my_strxfrm_desc_and_reverse(uchar *str, uchar *strend,
uint flags, uint level);
size_t my_strxfrm_pad_desc_and_reverse(CHARSET_INFO *cs,
diff --git a/include/my_rnd.h b/include/my_rnd.h
index a3e3788085d..dc8efbd276e 100644
--- a/include/my_rnd.h
+++ b/include/my_rnd.h
@@ -25,7 +25,6 @@ struct my_rnd_struct {
void my_rnd_init(struct my_rnd_struct *rand_st, ulong seed1, ulong seed2);
double my_rnd(struct my_rnd_struct *rand_st);
-double my_rnd_ssl(struct my_rnd_struct *rand_st);
C_MODE_END
diff --git a/include/my_sys.h b/include/my_sys.h
index cac9f4ad889..41bb7f8575d 100644
--- a/include/my_sys.h
+++ b/include/my_sys.h
@@ -231,7 +231,7 @@ extern void (*proc_info_hook)(void *, const PSI_stage_info *, PSI_stage_info *,
const char *, const char *, const unsigned int);
/* charsets */
-#define MY_ALL_CHARSETS_SIZE 2048
+#define MY_ALL_CHARSETS_SIZE 4096
extern MYSQL_PLUGIN_IMPORT CHARSET_INFO *default_charset_info;
extern MYSQL_PLUGIN_IMPORT CHARSET_INFO *all_charsets[MY_ALL_CHARSETS_SIZE];
extern struct charset_info_st compiled_charsets[];
@@ -1111,4 +1111,135 @@ void my_init_mysys_psi_keys(void);
struct st_mysql_file;
extern struct st_mysql_file *mysql_stdin;
C_MODE_END
+
+
+#ifdef __cplusplus
+
+class Charset_loader_mysys: public MY_CHARSET_LOADER
+{
+public:
+ Charset_loader_mysys()
+ {
+ my_charset_loader_init_mysys(this);
+ }
+
+ /**
+ Get a CHARSET_INFO by a character set name.
+
+ @param name Collation name
+ @param cs_flags e.g. MY_CS_PRIMARY, MY_CS_BINARY
+ @param my_flags mysys flags (MY_WME, MY_UTF8_IS_UTF8MB3)
+ @return
+ @retval NULL on error (e.g. not found)
+ @retval A CHARSET_INFO pointter on success
+ */
+ CHARSET_INFO *get_charset(const char *cs_name, uint cs_flags, myf my_flags)
+ {
+ error[0]= '\0'; // Need to clear in case of the second call
+ return my_charset_get_by_name(this, cs_name, cs_flags, my_flags);
+ }
+
+ /**
+ Get a CHARSET_INFO by an exact collation by name.
+
+ @param name Collation name
+ @param my_flags e.g. the utf8 translation flag
+ @return
+ @retval NULL on error (e.g. not found)
+ @retval A CHARSET_INFO pointter on success
+ */
+ CHARSET_INFO *get_exact_collation(const char *name, myf my_flags)
+ {
+ error[0]= '\0'; // Need to clear in case of the second call
+ return my_collation_get_by_name(this, name, my_flags);
+ }
+
+ /**
+ Get a CHARSET_INFO by a context collation by name.
+ The returned pointer must be further resolved to a character set.
+
+ @param name Collation name
+ @param utf8_flag The utf8 translation flag
+ @return
+ @retval NULL on error (e.g. not found)
+ @retval A CHARSET_INFO pointter on success
+ */
+ CHARSET_INFO *get_context_collation(const char *name, myf my_flags)
+ {
+ return get_exact_collation_by_context_name(&my_charset_utf8mb4_general_ci,
+ name, my_flags);
+ }
+
+ /**
+ Get an exact CHARSET_INFO by a contextually typed collation name.
+
+ @param name Collation name
+ @param utf8_flag The utf8 translation flag
+ @return
+ @retval NULL on error (e.g. not found)
+ @retval A CHARSET_INFO pointer on success
+ */
+ CHARSET_INFO *get_exact_collation_by_context_name(CHARSET_INFO *cs,
+ const char *name,
+ myf my_flags)
+ {
+ char tmp[MY_CS_COLLATION_NAME_SIZE];
+ my_snprintf(tmp, sizeof(tmp), "%s_%s", cs->cs_name.str, name);
+ return get_exact_collation(tmp, my_flags);
+ }
+
+ /*
+ Find a collation with binary comparison rules
+ */
+ CHARSET_INFO *get_bin_collation(CHARSET_INFO *cs, myf my_flags)
+ {
+ /*
+ We don't need to handle old_mode=UTF8_IS_UTF8MB3 here,
+ This method assumes that "cs" points to a real character set name.
+ It can be either "utf8mb3" or "utf8mb4". It cannot be "utf8".
+ No thd->get_utf8_flag() flag passed to get_charset_by_csname().
+ */
+ DBUG_ASSERT(cs->cs_name.length !=4 || memcmp(cs->cs_name.str, "utf8", 4));
+ /*
+ CREATE TABLE t1 (a CHAR(10) BINARY)
+ CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
+ Nothing to do, we have the binary collation already.
+ */
+ if (cs->state & MY_CS_BINSORT)
+ return cs;
+
+ // CREATE TABLE t1 (a CHAR(10) BINARY) CHARACTER SET utf8mb4;/
+ error[0]= '\0'; // Need in case of the second execution
+ return get_charset(cs->cs_name.str, MY_CS_BINSORT, my_flags);
+ }
+
+ /*
+ Find the default collation in the given character set
+ */
+ CHARSET_INFO *get_default_collation(CHARSET_INFO *cs, myf my_flags)
+ {
+ // See comments in find_bin_collation_or_error()
+ DBUG_ASSERT(cs->cs_name.length !=4 || memcmp(cs->cs_name.str, "utf8", 4));
+ /*
+ CREATE TABLE t1 (a CHAR(10) COLLATE DEFAULT) CHARACTER SET utf8mb4;
+ Nothing to do, we have the default collation already.
+ */
+ if (cs->state & MY_CS_PRIMARY)
+ return cs;
+ /*
+ CREATE TABLE t1 (a CHAR(10) COLLATE DEFAULT)
+ CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
+
+ Don't need to handle old_mode=UTF8_IS_UTF8MB3 here.
+ See comments in find_bin_collation_or_error.
+ */
+ cs= get_charset(cs->cs_name.str, MY_CS_PRIMARY, my_flags);
+ DBUG_ASSERT(cs);
+ return cs;
+ }
+};
+
+#endif /*__cplusplus */
+
+
#endif /* _my_sys_h */
diff --git a/include/sslopt-longopts.h b/include/sslopt-longopts.h
index ee90d17fb64..63d1a42c1bd 100644
--- a/include/sslopt-longopts.h
+++ b/include/sslopt-longopts.h
@@ -21,7 +21,7 @@
{"ssl", OPT_SSL_SSL,
"Enable SSL for connection (automatically enabled with other flags).",
- &opt_use_ssl, &opt_use_ssl, 0, GET_BOOL, OPT_ARG, 0, 0, 0, 0, 0, 0},
+ &opt_use_ssl, &opt_use_ssl, 0, GET_BOOL, OPT_ARG, 1, 0, 0, 0, 0, 0},
{"ssl-ca", OPT_SSL_CA,
"CA file in PEM format (check OpenSSL docs, implies --ssl).",
&opt_ssl_ca, &opt_ssl_ca, 0, GET_STR, REQUIRED_ARG,
diff --git a/include/sslopt-vars.h b/include/sslopt-vars.h
index e28f19b919d..d263e5dbd90 100644
--- a/include/sslopt-vars.h
+++ b/include/sslopt-vars.h
@@ -22,7 +22,7 @@
#else
#define SSL_STATIC static
#endif
-SSL_STATIC my_bool opt_use_ssl = 0;
+SSL_STATIC my_bool opt_use_ssl = 1;
SSL_STATIC char *opt_ssl_ca = 0;
SSL_STATIC char *opt_ssl_capath = 0;
SSL_STATIC char *opt_ssl_cert = 0;
diff --git a/libmysqld/lib_sql.cc b/libmysqld/lib_sql.cc
index 4b9d1b1cd48..bbbe10121ba 100644
--- a/libmysqld/lib_sql.cc
+++ b/libmysqld/lib_sql.cc
@@ -1096,13 +1096,15 @@ bool Protocol_text::store_field_metadata(const THD * thd,
if (charset_for_protocol == &my_charset_bin || thd_cs == NULL)
{
/* No conversion */
- client_field->charsetnr= charset_for_protocol->number;
+ client_field->charsetnr= charset_for_protocol->
+ get_id(MY_COLLATION_ID_TYPE_COMPAT_100800);
client_field->length= server_field.length;
}
else
{
/* With conversion */
- client_field->charsetnr= thd_cs->number;
+ client_field->charsetnr= thd_cs->
+ get_id(MY_COLLATION_ID_TYPE_COMPAT_100800);
client_field->length= server_field.max_octet_length(charset_for_protocol,
thd_cs);
}
diff --git a/man/comp_err.1 b/man/comp_err.1
index 6be91925bcc..1603ddf51de 100644
--- a/man/comp_err.1
+++ b/man/comp_err.1
@@ -1,6 +1,6 @@
'\" t
.\"
-.TH "\FBCOMP_ERR\FR" "1" "15 May 2020" "MariaDB 10\&.9" "MariaDB Database System"
+.TH "\FBCOMP_ERR\FR" "1" "15 May 2020" "MariaDB 10\&.10" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
diff --git a/man/galera_new_cluster.1 b/man/galera_new_cluster.1
index 8330668f983..d7efa7c84be 100644
--- a/man/galera_new_cluster.1
+++ b/man/galera_new_cluster.1
@@ -1,6 +1,6 @@
'\" t
.\"
-.TH "\FBGALERA_NEW_CLUSTER\FR" "1" "15 May 2020" "MariaDB 10\&.9" "MariaDB Database System"
+.TH "\FBGALERA_NEW_CLUSTER\FR" "1" "15 May 2020" "MariaDB 10\&.10" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
diff --git a/man/galera_recovery.1 b/man/galera_recovery.1
index 4261e81db79..90fbe67cbc0 100644
--- a/man/galera_recovery.1
+++ b/man/galera_recovery.1
@@ -1,6 +1,6 @@
'\" t
.\"
-.TH "\FBGALERA_RECOVERY\FR" "1" "15 May 2020" "MariaDB 10\&.9" "MariaDB Database System"
+.TH "\FBGALERA_RECOVERY\FR" "1" "15 May 2020" "MariaDB 10\&.10" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
diff --git a/man/innochecksum.1 b/man/innochecksum.1
index eefeddfc67e..56e4f43dbd4 100644
--- a/man/innochecksum.1
+++ b/man/innochecksum.1
@@ -1,6 +1,6 @@
'\" t
.\"
-.TH "\FBINNOCHECKSUM\FR" "1" "15 May 2020" "MariaDB 10\&.9" "MariaDB Database System"
+.TH "\FBINNOCHECKSUM\FR" "1" "15 May 2020" "MariaDB 10\&.10" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
diff --git a/man/mariabackup.1 b/man/mariabackup.1
index 27354687f52..4ee0a2f09d4 100644
--- a/man/mariabackup.1
+++ b/man/mariabackup.1
@@ -1,6 +1,6 @@
'\" t
.\"
-.TH "\FBMARIABACKUP\FR" "1" "15 May 2020" "MariaDB 10\&.9" "MariaDB Database System"
+.TH "\FBMARIABACKUP\FR" "1" "15 May 2020" "MariaDB 10\&.10" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
diff --git a/man/mariadb-conv.1 b/man/mariadb-conv.1
index 282b194f9df..c47e08c99a7 100644
--- a/man/mariadb-conv.1
+++ b/man/mariadb-conv.1
@@ -1,6 +1,6 @@
'\" t
.\"
-.TH "\FBMARIADB-CONV" "1" "15 May 2020" "MariaDB 10\&.9" "MariaDB Database System"
+.TH "\FBMARIADB-CONV" "1" "15 May 2020" "MariaDB 10\&.10" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
diff --git a/man/mariadb-service-convert.1 b/man/mariadb-service-convert.1
index f10af9cb8cd..6694145e491 100644
--- a/man/mariadb-service-convert.1
+++ b/man/mariadb-service-convert.1
@@ -1,6 +1,6 @@
'\" t
.\"
-.TH "\FBMARIADB-SERVICE-CONVERT\FR" "1" "15 May 2020" "MariaDB 10\&.9" "MariaDB Database System"
+.TH "\FBMARIADB-SERVICE-CONVERT\FR" "1" "15 May 2020" "MariaDB 10\&.10" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
diff --git a/man/mbstream.1 b/man/mbstream.1
index 5cf23447e66..ed9d0036381 100644
--- a/man/mbstream.1
+++ b/man/mbstream.1
@@ -1,6 +1,6 @@
'\" t
.\"
-.TH "\FBMBSTREAM\FR" "1" "15 May 2020" "MariaDB 10\&.9" "MariaDB Database System"
+.TH "\FBMBSTREAM\FR" "1" "15 May 2020" "MariaDB 10\&.10" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
diff --git a/man/msql2mysql.1 b/man/msql2mysql.1
index d2a362eceee..4aecf1eb077 100644
--- a/man/msql2mysql.1
+++ b/man/msql2mysql.1
@@ -1,6 +1,6 @@
'\" t
.\"
-.TH "\FBMSQL2MYSQL\FR" "1" "15 May 2020" "MariaDB 10\&.9" "MariaDB Database System"
+.TH "\FBMSQL2MYSQL\FR" "1" "15 May 2020" "MariaDB 10\&.10" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
diff --git a/man/my_print_defaults.1 b/man/my_print_defaults.1
index 7ce606f0bc2..e3d1c7ac06d 100644
--- a/man/my_print_defaults.1
+++ b/man/my_print_defaults.1
@@ -1,6 +1,6 @@
'\" t
.\"
-.TH "\FBMY_PRINT_DEFAULTS" "1" "15 May 2020" "MariaDB 10\&.9" "MariaDB Database System"
+.TH "\FBMY_PRINT_DEFAULTS" "1" "15 May 2020" "MariaDB 10\&.10" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
diff --git a/man/my_safe_process.1 b/man/my_safe_process.1
index 5fdb3195605..faa81190b0a 100644
--- a/man/my_safe_process.1
+++ b/man/my_safe_process.1
@@ -1,6 +1,6 @@
'\" t
.\"
-.TH "\FBMY_SAFE_PROCESS\FR" "1" "15 May 2020" "MariaDB 10\&.9" "MariaDB Database System"
+.TH "\FBMY_SAFE_PROCESS\FR" "1" "15 May 2020" "MariaDB 10\&.10" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
diff --git a/man/myisam_ftdump.1 b/man/myisam_ftdump.1
index 396c8341c8b..a14722f3625 100644
--- a/man/myisam_ftdump.1
+++ b/man/myisam_ftdump.1
@@ -1,6 +1,6 @@
'\" t
.\"
-.TH "\FBMYISAM_FTDUMP\FR" "1" "15 May 2020" "MariaDB 10\&.9" "MariaDB Database System"
+.TH "\FBMYISAM_FTDUMP\FR" "1" "15 May 2020" "MariaDB 10\&.10" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
diff --git a/man/myisamchk.1 b/man/myisamchk.1
index 203f0564f6a..a6a274ed2be 100644
--- a/man/myisamchk.1
+++ b/man/myisamchk.1
@@ -1,6 +1,6 @@
'\" t
.\"
-.TH "\FBMYISAMCHK\FR" "1" "15 May 2020" "MariaDB 10\&.9" "MariaDB Database System"
+.TH "\FBMYISAMCHK\FR" "1" "15 May 2020" "MariaDB 10\&.10" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
diff --git a/man/myisamlog.1 b/man/myisamlog.1
index b77a16d58f8..a907a9f6b99 100644
--- a/man/myisamlog.1
+++ b/man/myisamlog.1
@@ -1,6 +1,6 @@
'\" t
.\"
-.TH "\FBMYISAMLOG\FR" "1" "15 May 2020" "MariaDB 10\&.9" "MariaDB Database System"
+.TH "\FBMYISAMLOG\FR" "1" "15 May 2020" "MariaDB 10\&.10" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
diff --git a/man/myisampack.1 b/man/myisampack.1
index 7a2127dfaac..a27b62150cb 100644
--- a/man/myisampack.1
+++ b/man/myisampack.1
@@ -1,6 +1,6 @@
'\" t
.\"
-.TH "\FBMYISAMPACK\FR" "1" "15 May 2020" "MariaDB 10\&.9" "MariaDB Database System"
+.TH "\FBMYISAMPACK\FR" "1" "15 May 2020" "MariaDB 10\&.10" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
diff --git a/man/myrocks_hotbackup.1 b/man/myrocks_hotbackup.1
index 712bcd0cad4..4237c452f76 100644
--- a/man/myrocks_hotbackup.1
+++ b/man/myrocks_hotbackup.1
@@ -1,4 +1,4 @@
-.TH MYROCKS_HOTBACKUP "1" "15 May 2020" "MariaDB 10\&.9" "MariaDB Database System"
+.TH MYROCKS_HOTBACKUP "1" "15 May 2020" "MariaDB 10\&.10" "MariaDB Database System"
.SH NAME
myrocks_hotbackup \- streaming backup for MariaDB MyRocks
.SH DESCRIPTION
diff --git a/man/mysql-stress-test.pl.1 b/man/mysql-stress-test.pl.1
index f122c0f92ae..c9cf6cb1069 100644
--- a/man/mysql-stress-test.pl.1
+++ b/man/mysql-stress-test.pl.1
@@ -1,6 +1,6 @@
'\" t
.\"
-.TH "\FBMYSQL\-STRESS\-TE" "1" "15 May 2020" "MariaDB 10\&.9" "MariaDB Database System"
+.TH "\FBMYSQL\-STRESS\-TE" "1" "15 May 2020" "MariaDB 10\&.10" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
diff --git a/man/mysql-test-run.pl.1 b/man/mysql-test-run.pl.1
index 9f6909f9c66..618fadb0ba0 100644
--- a/man/mysql-test-run.pl.1
+++ b/man/mysql-test-run.pl.1
@@ -1,6 +1,6 @@
'\" t
.\"
-.TH "\FBMYSQL\-TEST\-RUN\" "1" "15 May 2020" "MariaDB 10\&.9" "MariaDB Database System"
+.TH "\FBMYSQL\-TEST\-RUN\" "1" "15 May 2020" "MariaDB 10\&.10" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
diff --git a/man/mysql.1 b/man/mysql.1
index 6b51e0f46f9..38ab116a2ef 100644
--- a/man/mysql.1
+++ b/man/mysql.1
@@ -1,6 +1,6 @@
'\" t
.\"
-.TH "\FBMARIADB\FR" "1" "15 May 2020" "MariaDB 10\&.9" "MariaDB Database System"
+.TH "\FBMARIADB\FR" "1" "15 May 2020" "MariaDB 10\&.10" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
diff --git a/man/mysql.server.1 b/man/mysql.server.1
index 475b2dd717d..43062e8f88f 100644
--- a/man/mysql.server.1
+++ b/man/mysql.server.1
@@ -1,6 +1,6 @@
'\" t
.\"
-.TH "\FBMYSQL\&.SERVER\FR" "1" "15 May 2020" "MariaDB 10\&.9" "MariaDB Database System"
+.TH "\FBMYSQL\&.SERVER\FR" "1" "15 May 2020" "MariaDB 10\&.10" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
diff --git a/man/mysql_client_test.1 b/man/mysql_client_test.1
index 2ed1527be72..9d23903768c 100644
--- a/man/mysql_client_test.1
+++ b/man/mysql_client_test.1
@@ -1,6 +1,6 @@
'\" t
.\"
-.TH "\FBMARIADB-CLIENT-TEST" "1" "15 May 2020" "MariaDB 10\&.9" "MariaDB Database System"
+.TH "\FBMARIADB-CLIENT-TEST" "1" "15 May 2020" "MariaDB 10\&.10" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
diff --git a/man/mysql_config.1 b/man/mysql_config.1
index 9b45f894c92..334478ce32c 100644
--- a/man/mysql_config.1
+++ b/man/mysql_config.1
@@ -1,6 +1,6 @@
'\" t
.\"
-.TH "\FBMYSQL_CONFIG\FR" "1" "15 May 2020" "MariaDB 10\&.9" "MariaDB Database System"
+.TH "\FBMYSQL_CONFIG\FR" "1" "15 May 2020" "MariaDB 10\&.10" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
diff --git a/man/mysql_convert_table_format.1 b/man/mysql_convert_table_format.1
index 4561270f801..e1deb7df54d 100644
--- a/man/mysql_convert_table_format.1
+++ b/man/mysql_convert_table_format.1
@@ -1,6 +1,6 @@
'\" t
.\"
-.TH "\FBMARIADB-CONVERT-TAB" "1" "15 May 2020" "MariaDB 10\&.9" "MariaDB Database System"
+.TH "\FBMARIADB-CONVERT-TAB" "1" "15 May 2020" "MariaDB 10\&.10" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
diff --git a/man/mysql_find_rows.1 b/man/mysql_find_rows.1
index fb5c0269878..f0220250bf7 100644
--- a/man/mysql_find_rows.1
+++ b/man/mysql_find_rows.1
@@ -1,6 +1,6 @@
'\" t
.\"
-.TH "\FBMARIADB-FIND-ROWS\F" "1" "15 May 2020" "MariaDB 10\&.9" "MariaDB Database System"
+.TH "\FBMARIADB-FIND-ROWS\F" "1" "15 May 2020" "MariaDB 10\&.10" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
diff --git a/man/mysql_fix_extensions.1 b/man/mysql_fix_extensions.1
index 5ad730ffb2d..f043a6e4298 100644
--- a/man/mysql_fix_extensions.1
+++ b/man/mysql_fix_extensions.1
@@ -1,6 +1,6 @@
'\" t
.\"
-.TH "\FBMARIADB-FIX-EXTENSI" "1" "15 May 2020" "MariaDB 10\&.9" "MariaDB Database System"
+.TH "\FBMARIADB-FIX-EXTENSI" "1" "15 May 2020" "MariaDB 10\&.10" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
diff --git a/man/mysql_install_db.1 b/man/mysql_install_db.1
index 17b260277c1..1046a77c7e0 100644
--- a/man/mysql_install_db.1
+++ b/man/mysql_install_db.1
@@ -1,6 +1,6 @@
'\" t
.\"
-.TH "\FBMARIADB-INSTALL-DB\FR" "1" "15 May 2020" "MariaDB 10\&.9" "MariaDB Database System"
+.TH "\FBMARIADB-INSTALL-DB\FR" "1" "15 May 2020" "MariaDB 10\&.10" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
diff --git a/man/mysql_ldb.1 b/man/mysql_ldb.1
index 2903d5f7ae6..e1c08bba995 100644
--- a/man/mysql_ldb.1
+++ b/man/mysql_ldb.1
@@ -1,6 +1,6 @@
'\" t
.\"
-.TH "\FBMARIADB-LDB\FR" "1" "15 May 2020" "MariaDB 10\&.9" "MariaDB Database System"
+.TH "\FBMARIADB-LDB\FR" "1" "15 May 2020" "MariaDB 10\&.10" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
diff --git a/man/mysql_plugin.1 b/man/mysql_plugin.1
index f1180c6e0c0..d01fd26634c 100644
--- a/man/mysql_plugin.1
+++ b/man/mysql_plugin.1
@@ -1,6 +1,6 @@
'\" t
.\"
-.TH "\FBMARIADB-PLUGIN\FR" "1" "15 May 2020" "MariaDB 10\&.9" "MariaDB Database System"
+.TH "\FBMARIADB-PLUGIN\FR" "1" "15 May 2020" "MariaDB 10\&.10" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff --git a/man/mysql_secure_installation.1 b/man/mysql_secure_installation.1
index f4f8b9b54b6..9c788238d9c 100644
--- a/man/mysql_secure_installation.1
+++ b/man/mysql_secure_installation.1
@@ -1,6 +1,6 @@
'\" t
.\"
-.TH "\FBMARIADB-SECURE-INST" "1" "15 May 2020" "MariaDB 10\&.9" "MariaDB Database System"
+.TH "\FBMARIADB-SECURE-INST" "1" "15 May 2020" "MariaDB 10\&.10" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
diff --git a/man/mysql_setpermission.1 b/man/mysql_setpermission.1
index e40d4fe4207..1510981ddeb 100644
--- a/man/mysql_setpermission.1
+++ b/man/mysql_setpermission.1
@@ -1,6 +1,6 @@
'\" t
.\"
-.TH "\FBMARIADB-SETPERMISSI" "1" "15 May 2020" "MariaDB 10\&.9" "MariaDB Database System"
+.TH "\FBMARIADB-SETPERMISSI" "1" "15 May 2020" "MariaDB 10\&.10" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
diff --git a/man/mysql_tzinfo_to_sql.1 b/man/mysql_tzinfo_to_sql.1
index 9e11ac048f3..08681335c47 100644
--- a/man/mysql_tzinfo_to_sql.1
+++ b/man/mysql_tzinfo_to_sql.1
@@ -1,6 +1,6 @@
'\" t
.\"
-.TH "\FBMARIADB-TZINFO-TO-S" "1" "22 April 2022" "MariaDB 10\&.9" "MariaDB Database System"
+.TH "\FBMARIADB-TZINFO-TO-S" "1" "22 April 2022" "MariaDB 10\&.10" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
diff --git a/man/mysql_upgrade.1 b/man/mysql_upgrade.1
index 40486f7cf41..198efcac747 100644
--- a/man/mysql_upgrade.1
+++ b/man/mysql_upgrade.1
@@ -1,6 +1,6 @@
'\" t
.\"
-.TH "\FBMARIADB-UPGRADE\FR" "1" "20 July 2020" "MariaDB 10\&.9" "MariaDB Database System"
+.TH "\FBMARIADB-UPGRADE\FR" "1" "20 July 2020" "MariaDB 10\&.10" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
diff --git a/man/mysql_waitpid.1 b/man/mysql_waitpid.1
index 40b79ba6a41..9153d246a03 100644
--- a/man/mysql_waitpid.1
+++ b/man/mysql_waitpid.1
@@ -1,6 +1,6 @@
'\" t
.\"
-.TH "\FBMARIADB-WAITPID\FR" "1" "15 May 2020" "MariaDB 10\&.9" "MariaDB Database System"
+.TH "\FBMARIADB-WAITPID\FR" "1" "15 May 2020" "MariaDB 10\&.10" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
diff --git a/man/mysqlaccess.1 b/man/mysqlaccess.1
index 874dbaa01ec..4d9e4902dae 100644
--- a/man/mysqlaccess.1
+++ b/man/mysqlaccess.1
@@ -1,6 +1,6 @@
'\" t
.\"
-.TH "\FBMARIADB-ACCESS\FR" "1" "15 May 2020" "MariaDB 10\&.9" "MariaDB Database System"
+.TH "\FBMARIADB-ACCESS\FR" "1" "15 May 2020" "MariaDB 10\&.10" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
diff --git a/man/mysqladmin.1 b/man/mysqladmin.1
index b118e8d8a04..a3b6b167179 100644
--- a/man/mysqladmin.1
+++ b/man/mysqladmin.1
@@ -1,6 +1,6 @@
'\" t
.\"
-.TH "\FBMARIADB-ADMIN\FR" "1" "15 May 2020" "MariaDB 10\&.9" "MariaDB Database System"
+.TH "\FBMARIADB-ADMIN\FR" "1" "15 May 2020" "MariaDB 10\&.10" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
diff --git a/man/mysqlbinlog.1 b/man/mysqlbinlog.1
index a4baf39c22c..05376046259 100644
--- a/man/mysqlbinlog.1
+++ b/man/mysqlbinlog.1
@@ -1,6 +1,6 @@
'\" t
.\"
-.TH "\FBMARIADB-BINLOG\FR" "1" "14 April 2021" "MariaDB 10\&.9" "MariaDB Database System"
+.TH "\FBMARIADB-BINLOG\FR" "1" "14 April 2021" "MariaDB 10\&.10" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
diff --git a/man/mysqlcheck.1 b/man/mysqlcheck.1
index 0138c9a2ff1..ae9937db4d3 100644
--- a/man/mysqlcheck.1
+++ b/man/mysqlcheck.1
@@ -1,6 +1,6 @@
'\" t
.\"
-.TH "\FBMARIADB-CHECK\FR" "1" "15 May 2020" "MariaDB 10\&.9" "MariaDB Database System"
+.TH "\FBMARIADB-CHECK\FR" "1" "15 May 2020" "MariaDB 10\&.10" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
diff --git a/man/mysqld.8 b/man/mysqld.8
index a28d6a46fa5..aee253fc220 100644
--- a/man/mysqld.8
+++ b/man/mysqld.8
@@ -1,6 +1,6 @@
'\" t
.\"
-.TH "\FBMARIADBD\FR" "8" "15 May 2020" "MariaDB 10\&.9" "MariaDB Database System"
+.TH "\FBMARIADBD\FR" "8" "15 May 2020" "MariaDB 10\&.10" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
diff --git a/man/mysqld_multi.1 b/man/mysqld_multi.1
index d333ffea80c..e195eb59e2e 100644
--- a/man/mysqld_multi.1
+++ b/man/mysqld_multi.1
@@ -1,6 +1,6 @@
'\" t
.\"
-.TH "\FBMARIADBD-MULTI\FR" "1" "15 May 2020" "MariaDB 10\&.9" "MariaDB Database System"
+.TH "\FBMARIADBD-MULTI\FR" "1" "15 May 2020" "MariaDB 10\&.10" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
diff --git a/man/mysqld_safe.1 b/man/mysqld_safe.1
index 49d7b30bbd8..2e58df90c69 100644
--- a/man/mysqld_safe.1
+++ b/man/mysqld_safe.1
@@ -1,6 +1,6 @@
'\" t
.\"
-.TH "\FBMARIADBD-SAFE\FR" "1" "15 May 2020" "MariaDB 10\&.9" "MariaDB Database System"
+.TH "\FBMARIADBD-SAFE\FR" "1" "15 May 2020" "MariaDB 10\&.10" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
diff --git a/man/mysqld_safe_helper.1 b/man/mysqld_safe_helper.1
index bfd91f890aa..e25447e2c11 100644
--- a/man/mysqld_safe_helper.1
+++ b/man/mysqld_safe_helper.1
@@ -1,6 +1,6 @@
'\" t
.\"
-.TH "\FBMARIADBD-SAFE-HELPER\FR" "1" "15 May 2020" "MariaDB 10\&.9" "MariaDB Database System"
+.TH "\FBMARIADBD-SAFE-HELPER\FR" "1" "15 May 2020" "MariaDB 10\&.10" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
diff --git a/man/mysqldump.1 b/man/mysqldump.1
index c3b526db891..04efe7e4de7 100644
--- a/man/mysqldump.1
+++ b/man/mysqldump.1
@@ -1,6 +1,6 @@
'\" t
.\"
-.TH "\FBMARIADB-DUMP\FR" "1" "24 October 2020" "MariaDB 10\&.9" "MariaDB Database System"
+.TH "\FBMARIADB-DUMP\FR" "1" "24 October 2020" "MariaDB 10\&.10" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
diff --git a/man/mysqldumpslow.1 b/man/mysqldumpslow.1
index ef154b04302..4f82544dc14 100644
--- a/man/mysqldumpslow.1
+++ b/man/mysqldumpslow.1
@@ -1,6 +1,6 @@
'\" t
.\"
-.TH "\FBMARIADB-DUMPSLOW\FR" "1" "15 May 2020" "MariaDB 10\&.9" "MariaDB Database System"
+.TH "\FBMARIADB-DUMPSLOW\FR" "1" "15 May 2020" "MariaDB 10\&.10" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
diff --git a/man/mysqlhotcopy.1 b/man/mysqlhotcopy.1
index fb819cd146c..9e545c784c0 100644
--- a/man/mysqlhotcopy.1
+++ b/man/mysqlhotcopy.1
@@ -1,6 +1,6 @@
'\" t
.\"
-.TH "\FBMARIADB-HOTCOPY\FR" "1" "15 May 2020" "MariaDB 10\&.9" "MariaDB Database System"
+.TH "\FBMARIADB-HOTCOPY\FR" "1" "15 May 2020" "MariaDB 10\&.10" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
diff --git a/man/mysqlimport.1 b/man/mysqlimport.1
index 3b34c8a809b..bc84ed54179 100644
--- a/man/mysqlimport.1
+++ b/man/mysqlimport.1
@@ -1,6 +1,6 @@
'\" t
.\"
-.TH "\FBMARIADB-IMPORT\FR" "1" "15 May 2020" "MariaDB 10\&.9" "MariaDB Database System"
+.TH "\FBMARIADB-IMPORT\FR" "1" "15 May 2020" "MariaDB 10\&.10" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
diff --git a/man/mysqlshow.1 b/man/mysqlshow.1
index d33b3ad1523..dd0f97ed407 100644
--- a/man/mysqlshow.1
+++ b/man/mysqlshow.1
@@ -1,6 +1,6 @@
'\" t
.\"
-.TH "\FBMARIADB-SHOW\FR" "1" "15 May 2020" "MariaDB 10\&.9" "MariaDB Database System"
+.TH "\FBMARIADB-SHOW\FR" "1" "15 May 2020" "MariaDB 10\&.10" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
diff --git a/man/mysqlslap.1 b/man/mysqlslap.1
index 7641574b526..f14ab8fa3fa 100644
--- a/man/mysqlslap.1
+++ b/man/mysqlslap.1
@@ -1,6 +1,6 @@
'\" t
.\"
-.TH "\FBMARIADB-SLAP\FR" "1" "15 May 2020" "MariaDB 10\&.9" "MariaDB Database System"
+.TH "\FBMARIADB-SLAP\FR" "1" "15 May 2020" "MariaDB 10\&.10" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
diff --git a/man/mysqltest.1 b/man/mysqltest.1
index 415627f7b95..0f1e138a448 100644
--- a/man/mysqltest.1
+++ b/man/mysqltest.1
@@ -1,6 +1,6 @@
'\" t
.\"
-.TH "\FBMARIADB-TEST\FR" "1" "15 May 2020" "MariaDB 10\&.9" "MariaDB Database System"
+.TH "\FBMARIADB-TEST\FR" "1" "15 May 2020" "MariaDB 10\&.10" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
diff --git a/man/mytop.1 b/man/mytop.1
index 057c60d5066..9594caade78 100644
--- a/man/mytop.1
+++ b/man/mytop.1
@@ -1,4 +1,4 @@
-.TH MYTOP "1" "15 May 2020" "MariaDB 10\&.9" "MariaDB Database System"
+.TH MYTOP "1" "15 May 2020" "MariaDB 10\&.10" "MariaDB Database System"
.SH NAME
mytop \- display MariaDB server performance info like 'top'
.SH "SEE ALSO"
diff --git a/man/perror.1 b/man/perror.1
index 5d4a08d9c5a..f225e074f10 100644
--- a/man/perror.1
+++ b/man/perror.1
@@ -1,6 +1,6 @@
'\" t
.\"
-.TH "\FBPERROR\FR" "1" "15 May 2020" "MariaDB 10\&.9" "MariaDB Database System"
+.TH "\FBPERROR\FR" "1" "15 May 2020" "MariaDB 10\&.10" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
diff --git a/man/replace.1 b/man/replace.1
index b4e60d21901..d8cc27e0bab 100644
--- a/man/replace.1
+++ b/man/replace.1
@@ -1,6 +1,6 @@
'\" t
.\"
-.TH "\FBREPLACE\FR" "1" "15 May 2020" "MariaDB 10\&.9" "MariaDB Database System"
+.TH "\FBREPLACE\FR" "1" "15 May 2020" "MariaDB 10\&.10" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
diff --git a/man/resolve_stack_dump.1 b/man/resolve_stack_dump.1
index 8275cd4341a..6f59e8ef4b4 100644
--- a/man/resolve_stack_dump.1
+++ b/man/resolve_stack_dump.1
@@ -1,6 +1,6 @@
'\" t
.\"
-.TH "\FBRESOLVE_STACK_DUM" "1" "15 May 2020" "MariaDB 10\&.9" "MariaDB Database System"
+.TH "\FBRESOLVE_STACK_DUM" "1" "15 May 2020" "MariaDB 10\&.10" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
diff --git a/man/resolveip.1 b/man/resolveip.1
index 6d387d86522..56895b50bfc 100644
--- a/man/resolveip.1
+++ b/man/resolveip.1
@@ -1,6 +1,6 @@
'\" t
.\"
-.TH "\FBRESOLVEIP\FR" "1" "15 May 2020" "MariaDB 10\&.9" "MariaDB Database System"
+.TH "\FBRESOLVEIP\FR" "1" "15 May 2020" "MariaDB 10\&.10" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
diff --git a/man/wsrep_sst_common.1 b/man/wsrep_sst_common.1
index 4bf5d339a69..7b3ac5dd244 100644
--- a/man/wsrep_sst_common.1
+++ b/man/wsrep_sst_common.1
@@ -1,6 +1,6 @@
'\" t
.\"
-.TH "\FBWSREP_SST_COMMON\FR" "1" "15 May 2020" "MariaDB 10\&.9" "MariaDB Database System"
+.TH "\FBWSREP_SST_COMMON\FR" "1" "15 May 2020" "MariaDB 10\&.10" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
diff --git a/man/wsrep_sst_mariabackup.1 b/man/wsrep_sst_mariabackup.1
index e6514a1cf9c..21a73de16db 100644
--- a/man/wsrep_sst_mariabackup.1
+++ b/man/wsrep_sst_mariabackup.1
@@ -1,6 +1,6 @@
'\" t
.\"
-.TH "\FBWSREP_SST_MARIABACKUP\FR" "1" "15 May 2020" "MariaDB 10\&.9" "MariaDB Database System"
+.TH "\FBWSREP_SST_MARIABACKUP\FR" "1" "15 May 2020" "MariaDB 10\&.10" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
diff --git a/man/wsrep_sst_mysqldump.1 b/man/wsrep_sst_mysqldump.1
index 4dbb1887918..55a859bf979 100644
--- a/man/wsrep_sst_mysqldump.1
+++ b/man/wsrep_sst_mysqldump.1
@@ -1,6 +1,6 @@
'\" t
.\"
-.TH "\FBWSREP_SST_MYSQLDUMP\FR" "1" "15 May 2020" "MariaDB 10\&.9" "MariaDB Database System"
+.TH "\FBWSREP_SST_MYSQLDUMP\FR" "1" "15 May 2020" "MariaDB 10\&.10" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
diff --git a/man/wsrep_sst_rsync.1 b/man/wsrep_sst_rsync.1
index 6f31e47fbd2..02862256f1c 100644
--- a/man/wsrep_sst_rsync.1
+++ b/man/wsrep_sst_rsync.1
@@ -1,6 +1,6 @@
'\" t
.\"
-.TH "\FBWSREP_SST_RSYNC\FR" "1" "15 May 2020" "MariaDB 10\&.9" "MariaDB Database System"
+.TH "\FBWSREP_SST_RSYNC\FR" "1" "15 May 2020" "MariaDB 10\&.10" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
diff --git a/man/wsrep_sst_rsync_wan.1 b/man/wsrep_sst_rsync_wan.1
index 03e2bdfb550..0736c03f9e9 100644
--- a/man/wsrep_sst_rsync_wan.1
+++ b/man/wsrep_sst_rsync_wan.1
@@ -1,6 +1,6 @@
'\" t
.\"
-.TH "\FBWSREP_SST_RSYNC_WAN\FR" "1" "15 May 2020" "MariaDB 10\&.9" "MariaDB Database System"
+.TH "\FBWSREP_SST_RSYNC_WAN\FR" "1" "15 May 2020" "MariaDB 10\&.10" "MariaDB Database System"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
diff --git a/mysql-test/include/check-testcase.test b/mysql-test/include/check-testcase.test
index 60b376a2836..4a1af2a4553 100644
--- a/mysql-test/include/check-testcase.test
+++ b/mysql-test/include/check-testcase.test
@@ -62,7 +62,7 @@ if ($tmp)
--echo Master_Server_Id #
--echo Master_SSL_Crl #
--echo Master_SSL_Crlpath #
- --echo Using_Gtid No
+ --echo Using_Gtid Slave_Pos
--echo Gtid_IO_Pos #
--echo Replicate_Do_Domain_Ids
--echo Replicate_Ignore_Domain_Ids
diff --git a/mysql-test/include/check_qep.inc b/mysql-test/include/check_qep.inc
new file mode 100644
index 00000000000..ee5a4025400
--- /dev/null
+++ b/mysql-test/include/check_qep.inc
@@ -0,0 +1,57 @@
+# include/check_qep.inc
+#
+# SUMMARY
+#
+# Designed to be used together with include/expect_qep.inc
+#
+# $query should be assigned a select statement using
+# straight_join to force the tables to be joined in most
+# optimal order.
+#
+# expect_qep.inc will then store the estimated 'Last_query_cost'
+# and total # 'Handler_read%' for this straight_joined query.
+#
+# We should then assign a non-straight_join'ed version of
+# the same query to $query and execute it using
+# 'include/check_qep.inc'. Its estimated cost and
+# #handler_reads will then be verified against the
+# previous straight_joined query.
+#
+# USAGE
+#
+# let $query= <select straight_join optimal statement>;
+# --source include/expect_qep.inc
+# let $query= <select statement>;
+# --source include/check_qep.inc
+#
+# EXAMPLE
+# t/greedy_optimizer.test
+#
+
+flush status;
+eval EXPLAIN $query;
+eval $query;
+
+let $cost=
+ query_get_value(SHOW STATUS LIKE 'Last_query_cost', Value, 1);
+
+--disable_warnings
+let $reads=
+`select sum(variable_value)
+ from information_schema.session_status
+ where VARIABLE_NAME like 'Handler_read%'`;
+--enable_warnings
+
+#echo Cost: $cost, Handler_reads: $reads;
+
+if ($cost != $best_cost)
+{ echo ### FAILED: Query_cost: $cost, expected: $best_cost ###;
+}
+# Difference in handler reads are ok as tables in MariaDB are sorted according
+# to order in the query and the tables in greedy_optimizer.inc has reference to
+# rows that does not exists, so different table orders will do different
+# number of reads
+
+if ($reads != $best_reads)
+{ echo ### NOTE: Handler_reads: $reads, expected: $best_reads ###;
+}
diff --git a/mysql-test/include/ctype_casefolding.inc b/mysql-test/include/ctype_casefolding.inc
index 4ee402c95ad..fc77b396f68 100644
--- a/mysql-test/include/ctype_casefolding.inc
+++ b/mysql-test/include/ctype_casefolding.inc
@@ -13,6 +13,20 @@ INSERT INTO case_folding (code) VALUES
(0x26B),
(0x271),
(0x27D);
+
+INSERT INTO case_folding (code) VALUES
+(0x0049) /* LATIN CAPITAL LETTER I */,
+(0x0069) /* LATIN SMALL LETTER I */,
+(0x0130) /* LATIN CAPITAL LETTER I WITH DOT ABOVE */,
+(0x0131) /* LATIN SMALL LETTER DOTLESS I */
+;
+
+INSERT INTO case_folding (code) VALUES
+(0x2C2F) /* GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI (Unicode-14.0) */,
+(0x2C5F) /* GLAGOLITIC SMALL LETTER CAUDATE CHRIVI (Unicode-14.0) */,
+(0xA7C0) /* LATIN CAPITAL LETTER OLD POLISH O (Unicode-14.0) */,
+(0xA7C1) /* LATIN SMALL LETTER OLD POLISH O (Unicode-14.0) */;
+
UPDATE case_folding SET c=CHAR(code USING ucs2);
SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding;
DROP TABLE case_folding;
diff --git a/mysql-test/include/ctype_casefolding_supplementary.inc b/mysql-test/include/ctype_casefolding_supplementary.inc
new file mode 100644
index 00000000000..7646ab5682e
--- /dev/null
+++ b/mysql-test/include/ctype_casefolding_supplementary.inc
@@ -0,0 +1,16 @@
+CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c, SPACE(64) AS comment LIMIT 0;
+SHOW CREATE TABLE case_folding;
+
+INSERT INTO case_folding (code, comment) VALUES (0x10595, 'VITHKUQI CAPITAL LETTER ZE (Unicode-14.0)');
+INSERT INTO case_folding (code, comment) VALUES (0x105BC, 'VITHKUQI SMALL LETTER ZE (Unicode-14.0)');
+INSERT INTO case_folding (code, comment) VALUES (0x1E921, 'ADLAM CAPITAL LETTER SHA (Unicode-9.0)');
+INSERT INTO case_folding (code, comment) VALUES (0x1E943, 'ADLAM SMALL LETTER SHA (Unicode-9.0)');
+
+UPDATE case_folding SET c=CHAR(code USING utf32);
+SELECT
+ HEX(CONVERT(c USING utf32)) AS ch,
+ HEX(CONVERT(LOWER(c) USING utf32)) AS cl,
+ HEX(CONVERT(UPPER(c) USING utf32)) AS cu,
+ comment
+FROM case_folding ORDER BY BINARY(c);
+DROP TABLE case_folding;
diff --git a/mysql-test/include/ctype_uca1400_ids_using_convert.inc b/mysql-test/include/ctype_uca1400_ids_using_convert.inc
new file mode 100644
index 00000000000..1a6cf3a0460
--- /dev/null
+++ b/mysql-test/include/ctype_uca1400_ids_using_convert.inc
@@ -0,0 +1,21 @@
+--disable_ps_protocol
+--enable_metadata
+DELIMITER $$;
+FOR rec IN (SELECT COLLATION_NAME
+ FROM INFORMATION_SCHEMA.COLLATION_CHARACTER_SET_APPLICABILITY
+ WHERE CHARACTER_SET_NAME=@charset
+ AND COLLATION_NAME RLIKE 'uca1400'
+ ORDER BY ID)
+DO
+ SET NAMES utf8mb4;
+ SET character_set_results=NULL;
+ EXECUTE IMMEDIATE CONCAT('SELECT CONVERT('''' USING ',@charset,')',
+ ' COLLATE ', rec.COLLATION_NAME,
+ ' AS ', rec.COLLATION_NAME,
+ ' LIMIT 0');
+END FOR;
+$$
+DELIMITER ;$$
+--disable_metadata
+--enable_ps_protocol
+SET NAMES utf8;
diff --git a/mysql-test/include/ctype_uca1400_ids_using_set_names.inc b/mysql-test/include/ctype_uca1400_ids_using_set_names.inc
new file mode 100644
index 00000000000..09cf49fc0e7
--- /dev/null
+++ b/mysql-test/include/ctype_uca1400_ids_using_set_names.inc
@@ -0,0 +1,17 @@
+
+--disable_ps_protocol
+--enable_metadata
+DELIMITER $$;
+FOR rec IN (SELECT COLLATION_NAME
+ FROM INFORMATION_SCHEMA.COLLATION_CHARACTER_SET_APPLICABILITY
+ WHERE CHARACTER_SET_NAME=@charset
+ AND COLLATION_NAME RLIKE 'uca1400'
+ ORDER BY ID)
+DO
+ EXECUTE IMMEDIATE CONCAT('SET NAMES ',@charset,' COLLATE ', rec.COLLATION_NAME);
+ SELECT rec.COLLATION_NAME;
+END FOR;
+$$
+DELIMITER ;$$
+--disable_metadata
+--enable_ps_protocol
diff --git a/mysql-test/include/default_client.cnf b/mysql-test/include/default_client.cnf
index 1dda4b5b139..fc2fcf19e71 100644
--- a/mysql-test/include/default_client.cnf
+++ b/mysql-test/include/default_client.cnf
@@ -18,6 +18,9 @@ default-character-set=latin1
[mysql_upgrade]
default-character-set=latin1
+[mysqlslap]
+loose-skip-ssl
+
[mysqltest]
loose-ssl-ca=@ENV.MYSQL_TEST_DIR/std_data/cacert.pem
loose-ssl-cert=@ENV.MYSQL_TEST_DIR/std_data/client-cert.pem
diff --git a/mysql-test/include/execute_with_statistics.inc b/mysql-test/include/execute_with_statistics.inc
new file mode 100644
index 00000000000..c2305fe5247
--- /dev/null
+++ b/mysql-test/include/execute_with_statistics.inc
@@ -0,0 +1,30 @@
+# include/execute_with_statistics.inc
+#
+# SUMMARY
+#
+# Explain and execute the select statment in $query.
+# Then report 'Last_query_cost' estimate from the query
+# optimizer and total number of 'Handler_read%' when the
+# query was executed.
+# Intended usage is to verify that there are not regressions
+# in either calculated or actuall cost for $query.
+#
+# USAGE
+#
+# let $query= <select statement>;
+# --source include/execute_with_statistics.inc
+#
+# EXAMPLE
+# t/greedy_optimizer.test
+#
+
+eval EXPLAIN $query;
+SHOW STATUS LIKE 'Last_query_cost';
+
+FLUSH STATUS;
+eval $query;
+--disable_warnings
+SELECT SUM(variable_value) AS Total_handler_reads
+ FROM information_schema.session_status
+ WHERE variable_name LIKE 'Handler_read%';
+--enable_warnings
diff --git a/mysql-test/include/expect_qep.inc b/mysql-test/include/expect_qep.inc
new file mode 100644
index 00000000000..8878b0b3a5b
--- /dev/null
+++ b/mysql-test/include/expect_qep.inc
@@ -0,0 +1,45 @@
+# include/expect_qep.inc
+#
+# SUMMARY
+#
+# Designed to be used together with include/check_qep.inc
+#
+# $query should be assigned a select statement using
+# straight_join to force the tables to be joined in most
+# optimal order.
+#
+# expect_qep.inc will then store the estimated 'Last_query_cost'
+# and total # 'Handler_read%' for this straight_joined query.
+#
+# We should then assign a non-straight_join'ed version of
+# the same query to $query and execute it using
+# 'include/check_qep.inc'. Its estimated cost and
+# #handler_reads will then be verified against the
+# previous straight_joined query.
+#
+# USAGE
+#
+# let $query= <select straight_join optimal statement>;
+# --source include/expect_qep.inc
+# let $query= <select statement>;
+# --source include/check_qep.inc
+#
+# EXAMPLE
+# t/greedy_optimizer.test
+#
+
+flush status;
+eval EXPLAIN $query;
+eval $query;
+
+let $best_cost=
+ query_get_value(SHOW STATUS LIKE 'Last_query_cost', Value, 1);
+
+--disable_warnings
+let $best_reads=
+`select sum(variable_value)
+ from information_schema.session_status
+ where VARIABLE_NAME like 'Handler_read%'`;
+--enable_warnings
+
+#echo Expect, cost: $best_cost, Handler_reads: $best_reads;
diff --git a/mysql-test/include/reset_slave.inc b/mysql-test/include/reset_slave.inc
new file mode 100644
index 00000000000..567ec796dd3
--- /dev/null
+++ b/mysql-test/include/reset_slave.inc
@@ -0,0 +1,58 @@
+# ==== Purpose ====
+#
+# Reset the slave on the active connection
+#
+#
+# ==== Usage ====
+#
+# [--let $master_use_gtid_option= NO]
+# --source include/reset_slave.inc
+#
+# Parameters:
+# $master_use_gtid_option
+# Sets the context for the reset slave. When No, execute
+# CHANGE MASTER TO MASTER_USE_GTID=No after the RESET SLAVE. When
+# Slave_Pos, execute set gtid_slave_pos= "" after RESET SLAVE.
+#
+# $reset_slave_keep_gtid_state
+# When master_use_gtid_option is Slave_Pos, this defines whether or not
+# gtid_slave_pos will be reset as well. Accepted values are of boolean
+# type. Default value is false.
+#
+
+--let $include_filename= reset_slave.inc
+--source include/begin_include_file.inc
+
+
+if (!$rpl_debug)
+{
+ --disable_query_log
+}
+
+if (!$master_use_gtid_option)
+{
+ --let $master_use_gtid_option= Slave_Pos
+}
+
+if (!$reset_slave_keep_gtid_state)
+{
+ --let $reset_slave_keep_gtid_state=0
+}
+
+if (`SELECT strcmp("$master_use_gtid_option","Slave_Pos") != 0 AND strcmp("$master_use_gtid_option","No") != 0`)
+{
+ die Invalid option provided as master_use_gtid_option, Slave_Pos or No are the only allowed options;
+}
+
+RESET SLAVE;
+if (`SELECT strcmp("$master_use_gtid_option","Slave_Pos") = 0 AND NOT $reset_slave_keep_gtid_state`)
+{
+ SET @@GLOBAL.gtid_slave_pos= "";
+}
+if (`SELECT strcmp("$master_use_gtid_option","No") = 0`)
+{
+ CHANGE MASTER TO MASTER_USE_GTID=No;
+}
+
+--let $include_filename= reset_slave.inc
+--source include/end_include_file.inc
diff --git a/mysql-test/include/rpl_change_topology.inc b/mysql-test/include/rpl_change_topology.inc
index 799262986e6..387ab196ad1 100644
--- a/mysql-test/include/rpl_change_topology.inc
+++ b/mysql-test/include/rpl_change_topology.inc
@@ -225,7 +225,14 @@ if (!$rpl_skip_change_master)
{
--let $_rpl_master_log_pos=
}
- eval CHANGE MASTER TO MASTER_HOST = '127.0.0.1', MASTER_PORT = $_rpl_port, MASTER_USER = 'root', MASTER_LOG_FILE = '$_rpl_master_log_file'$_rpl_master_log_pos, MASTER_CONNECT_RETRY = 1;
+ if ($rpl_master_log_file)
+ {
+ eval CHANGE MASTER TO MASTER_HOST = '127.0.0.1', MASTER_PORT = $_rpl_port, MASTER_USER = 'root', MASTER_LOG_FILE = '$_rpl_master_log_file'$_rpl_master_log_pos, MASTER_CONNECT_RETRY = 1, MASTER_USE_GTID=NO;
+ }
+ if (!$rpl_master_log_file)
+ {
+ eval CHANGE MASTER TO MASTER_HOST = '127.0.0.1', MASTER_PORT = $_rpl_port, MASTER_USER = 'root', MASTER_CONNECT_RETRY=1;
+ }
}
if ($_rpl_master == '')
{
diff --git a/mysql-test/include/rpl_end.inc b/mysql-test/include/rpl_end.inc
index 3fdd91ba319..f49079db332 100644
--- a/mysql-test/include/rpl_end.inc
+++ b/mysql-test/include/rpl_end.inc
@@ -90,7 +90,7 @@ while ($_rpl_server)
--source include/rpl_connection.inc
# Clear Using_Gtid in SHOW SLAVE STATUS to keep check_testcase happy.
- CHANGE MASTER TO master_log_file='';
+ CHANGE MASTER TO master_use_gtid=Slave_Pos;
--dec $_rpl_server
}
diff --git a/mysql-test/include/rpl_reset.inc b/mysql-test/include/rpl_reset.inc
index a94371c38fc..53ed1de9874 100644
--- a/mysql-test/include/rpl_reset.inc
+++ b/mysql-test/include/rpl_reset.inc
@@ -63,13 +63,13 @@ while ($_rpl_server)
--let $rpl_connection_name= server_$_rpl_server
--source include/rpl_connection.inc
+ RESET MASTER;
# Check if this server is configured to have a master
if (`SELECT SUBSTRING('$rpl_master_list', 1 + ($_rpl_server - 1) * $rpl_server_count_length, $rpl_server_count_length) != ''`)
{
--source include/stop_slave.inc
- RESET SLAVE;
+ --source include/reset_slave.inc
}
- RESET MASTER;
--dec $_rpl_server
}
diff --git a/mysql-test/include/setup_fake_relay_log.inc b/mysql-test/include/setup_fake_relay_log.inc
index a1964572427..9f0447925db 100644
--- a/mysql-test/include/setup_fake_relay_log.inc
+++ b/mysql-test/include/setup_fake_relay_log.inc
@@ -100,7 +100,7 @@ RESET SLAVE;
--let $_fake_old_master_host= query_get_value(SHOW SLAVE STATUS, Master_Host, 1)
# Setup replication from existing relay log.
-eval CHANGE MASTER TO MASTER_HOST='dummy.localdomain', RELAY_LOG_FILE='$_fake_filename-fake.000001', RELAY_LOG_POS=4;
+eval CHANGE MASTER TO MASTER_HOST='dummy.localdomain', RELAY_LOG_FILE='$_fake_filename-fake.000001', RELAY_LOG_POS=4, MASTER_USE_GTID=NO;
--let $include_filename= setup_fake_relay_log.inc
--source include/end_include_file.inc
diff --git a/mysql-test/include/test_fieldsize.inc b/mysql-test/include/test_fieldsize.inc
index 105574b15b9..1ce846eed0b 100644
--- a/mysql-test/include/test_fieldsize.inc
+++ b/mysql-test/include/test_fieldsize.inc
@@ -11,7 +11,8 @@ DROP TABLE IF EXISTS t1;
sync_slave_with_master;
STOP SLAVE;
-RESET SLAVE;
+--let $master_use_gtid_option= No
+--source include/reset_slave.inc
eval $test_table_slave;
connection master;
@@ -29,7 +30,7 @@ START SLAVE;
# The following should be 0
SELECT COUNT(*) FROM t1;
STOP SLAVE;
-RESET SLAVE;
+--source include/reset_slave.inc
connection master;
RESET MASTER;
diff --git a/mysql-test/main/alter_table.test b/mysql-test/main/alter_table.test
index f6e9bfe1126..8ddf60f26d8 100644
--- a/mysql-test/main/alter_table.test
+++ b/mysql-test/main/alter_table.test
@@ -648,11 +648,11 @@ set sql_mode="no_zero_date";
create table t1(f1 int);
alter table t1 add column f2 datetime not null, add column f21 date not null;
insert into t1 values(1,'2000-01-01','2000-01-01');
---error 1292
+--error ER_TRUNCATED_WRONG_VALUE
alter table t1 add column f3 datetime not null;
---error 1292
+--error ER_TRUNCATED_WRONG_VALUE
alter table t1 add column f3 date not null;
---error 1292
+--error ER_TRUNCATED_WRONG_VALUE
alter table t1 add column f4 datetime not null default '2002-02-02',
add column f41 date not null;
alter table t1 add column f4 datetime not null default '2002-02-02',
diff --git a/mysql-test/main/check_constraint.result b/mysql-test/main/check_constraint.result
index 01a71bf36a5..899192905ea 100644
--- a/mysql-test/main/check_constraint.result
+++ b/mysql-test/main/check_constraint.result
@@ -284,11 +284,11 @@ drop table t1;
#
# MDEV-26061 MariaDB server crash at Field::set_default
#
-create table t1 (d timestamp check (default (d) is true)) as select 1;
+create table t1 (d timestamp not null default now() check (default (d) is true)) as select 1;
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `d` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp() CHECK (default(`d`) is true),
+ `d` timestamp NOT NULL DEFAULT current_timestamp() CHECK (default(`d`) is true),
`1` int(1) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
drop table t1;
diff --git a/mysql-test/main/check_constraint.test b/mysql-test/main/check_constraint.test
index 194fdc04399..46a34239270 100644
--- a/mysql-test/main/check_constraint.test
+++ b/mysql-test/main/check_constraint.test
@@ -212,7 +212,7 @@ drop table t1;
--echo # MDEV-26061 MariaDB server crash at Field::set_default
--echo #
-create table t1 (d timestamp check (default (d) is true)) as select 1;
+create table t1 (d timestamp not null default now() check (default (d) is true)) as select 1;
show create table t1;
drop table t1;
diff --git a/mysql-test/main/create.result b/mysql-test/main/create.result
index 9ab1db89029..79c86c0ed61 100644
--- a/mysql-test/main/create.result
+++ b/mysql-test/main/create.result
@@ -528,7 +528,7 @@ t2 CREATE TABLE `t2` (
`ifnull(h,h)` decimal(5,4) DEFAULT NULL,
`ifnull(i,i)` year(4) DEFAULT NULL,
`ifnull(j,j)` date DEFAULT NULL,
- `ifnull(k,k)` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `ifnull(k,k)` timestamp NOT NULL,
`ifnull(l,l)` datetime DEFAULT NULL,
`ifnull(m,m)` varchar(1) DEFAULT NULL,
`ifnull(n,n)` varchar(3) DEFAULT NULL,
@@ -1120,7 +1120,7 @@ show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`CHARACTER_SET_NAME` varchar(32) NOT NULL,
- `DEFAULT_COLLATE_NAME` varchar(32) NOT NULL,
+ `DEFAULT_COLLATE_NAME` varchar(64) NOT NULL,
`DESCRIPTION` varchar(60) NOT NULL,
`MAXLEN` bigint(3) NOT NULL
) ENGINE=MEMORY DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci
@@ -1141,9 +1141,6 @@ SET sql_mode = NO_ZERO_DATE;
CREATE TABLE t2(c1 TIMESTAMP, c2 TIMESTAMP DEFAULT 0);
ERROR 42000: Invalid default value for 'c2'
-CREATE TABLE t2(c1 TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, c2 TIMESTAMP NOT NULL);
-ERROR 42000: Invalid default value for 'c2'
-
# -- Check that NULL column still can be created.
CREATE TABLE t2(c1 TIMESTAMP NULL);
diff --git a/mysql-test/main/create.test b/mysql-test/main/create.test
index 0b9e51e8545..7355f35b2d1 100644
--- a/mysql-test/main/create.test
+++ b/mysql-test/main/create.test
@@ -1062,9 +1062,9 @@ SET sql_mode = NO_ZERO_DATE;
--error ER_INVALID_DEFAULT
CREATE TABLE t2(c1 TIMESTAMP, c2 TIMESTAMP DEFAULT 0);
---echo
---error ER_INVALID_DEFAULT
-CREATE TABLE t2(c1 TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, c2 TIMESTAMP NOT NULL);
+#--echo
+#--error ER_INVALID_DEFAULT
+#CREATE TABLE t2(c1 TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, c2 TIMESTAMP NOT NULL);
--echo
--echo # -- Check that NULL column still can be created.
diff --git a/mysql-test/main/ctype_collate_context.result b/mysql-test/main/ctype_collate_context.result
index 53eeaa4e713..4ef3d9a6c7b 100644
--- a/mysql-test/main/ctype_collate_context.result
+++ b/mysql-test/main/ctype_collate_context.result
@@ -6,7 +6,9 @@ INSERT INTO t0 VALUES
('COLLATE DEFAULT'),
('COLLATE utf8mb4_bin'),
('COLLATE latin1_swedish_ci'),
-('COLLATE latin1_bin');
+('COLLATE latin1_bin'),
+('COLLATE uca1400_ai_ci'),
+('COLLATE uca1400_as_ci');
CREATE TABLE clauses
(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
@@ -216,11 +218,11 @@ result CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
TEST: 1 clauses
-TOTAL 7
+TOTAL 9
ERROR 0
-OK 7
+OK 9
query CREATE DATABASE
attrs CHARACTER SET DEFAULT
@@ -250,11 +252,19 @@ query CREATE DATABASE
attrs COLLATE latin1_bin
result CHARACTER SET latin1 COLLATE latin1_bin
+query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci
+result CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_ai_ci
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci
+result CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_as_ci
+
TEST: 2 clauses
-TOTAL 49
+TOTAL 81
-ERROR 24
+ERROR 46
query CREATE DATABASE
attrs CHARACTER SET latin1 CHARACTER SET DEFAULT
@@ -281,6 +291,14 @@ attrs COLLATE utf8mb4_bin CHARACTER SET latin1
result ERROR: COLLATION 'utf8mb4_bin' is not valid for CHARACTER SET 'latin1'
query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci CHARACTER SET latin1
+result ERROR: COLLATION 'uca1400_ai_ci' is not valid for CHARACTER SET 'latin1'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci CHARACTER SET latin1
+result ERROR: COLLATION 'uca1400_as_ci' is not valid for CHARACTER SET 'latin1'
+
+query CREATE DATABASE
attrs CHARACTER SET latin1 CHARACTER SET utf8mb4
result ERROR: Conflicting declarations: 'CHARACTER SET latin1' and 'CHARACTER SET utf8mb4'
@@ -301,6 +319,14 @@ attrs COLLATE latin1_bin COLLATE DEFAULT
result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE DEFAULT'
query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci COLLATE DEFAULT
+result ERROR: Conflicting declarations: 'COLLATE uca1400_ai_ci' and 'COLLATE DEFAULT'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci COLLATE DEFAULT
+result ERROR: Conflicting declarations: 'COLLATE uca1400_as_ci' and 'COLLATE DEFAULT'
+
+query CREATE DATABASE
attrs CHARACTER SET latin1 COLLATE utf8mb4_bin
result ERROR: COLLATION 'utf8mb4_bin' is not valid for CHARACTER SET 'latin1'
@@ -317,6 +343,14 @@ attrs COLLATE latin1_bin COLLATE utf8mb4_bin
result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE utf8mb4_bin'
query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci COLLATE utf8mb4_bin
+result ERROR: Conflicting declarations: 'COLLATE uca1400_ai_ci' and 'COLLATE utf8mb4_bin'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci COLLATE utf8mb4_bin
+result ERROR: Conflicting declarations: 'COLLATE uca1400_as_ci' and 'COLLATE utf8mb4_bin'
+
+query CREATE DATABASE
attrs CHARACTER SET DEFAULT COLLATE latin1_swedish_ci
result ERROR: COLLATION 'latin1_swedish_ci' is not valid for CHARACTER SET 'utf8mb4'
@@ -333,6 +367,14 @@ attrs COLLATE latin1_bin COLLATE latin1_swedish_ci
result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE latin1_swedish_ci'
query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci COLLATE latin1_swedish_ci
+result ERROR: Conflicting declarations: 'COLLATE uca1400_ai_ci' and 'COLLATE latin1_swedish_ci'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci COLLATE latin1_swedish_ci
+result ERROR: Conflicting declarations: 'COLLATE uca1400_as_ci' and 'COLLATE latin1_swedish_ci'
+
+query CREATE DATABASE
attrs CHARACTER SET DEFAULT COLLATE latin1_bin
result ERROR: COLLATION 'latin1_bin' is not valid for CHARACTER SET 'utf8mb4'
@@ -352,7 +394,63 @@ query CREATE DATABASE
attrs COLLATE latin1_swedish_ci COLLATE latin1_bin
result ERROR: Conflicting declarations: 'COLLATE latin1_swedish_ci' and 'COLLATE latin1_bin'
-OK 25
+query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci COLLATE latin1_bin
+result ERROR: Conflicting declarations: 'COLLATE uca1400_ai_ci' and 'COLLATE latin1_bin'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci COLLATE latin1_bin
+result ERROR: Conflicting declarations: 'COLLATE uca1400_as_ci' and 'COLLATE latin1_bin'
+
+query CREATE DATABASE
+attrs CHARACTER SET latin1 COLLATE uca1400_ai_ci
+result ERROR: COLLATION 'uca1400_ai_ci' is not valid for CHARACTER SET 'latin1'
+
+query CREATE DATABASE
+attrs COLLATE DEFAULT COLLATE uca1400_ai_ci
+result ERROR: Conflicting declarations: 'COLLATE DEFAULT' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs COLLATE utf8mb4_bin COLLATE uca1400_ai_ci
+result ERROR: Conflicting declarations: 'COLLATE utf8mb4_bin' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs COLLATE latin1_swedish_ci COLLATE uca1400_ai_ci
+result ERROR: Conflicting declarations: 'COLLATE latin1_swedish_ci' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs COLLATE latin1_bin COLLATE uca1400_ai_ci
+result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci COLLATE uca1400_ai_ci
+result ERROR: Conflicting declarations: 'COLLATE uca1400_as_ci' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs CHARACTER SET latin1 COLLATE uca1400_as_ci
+result ERROR: COLLATION 'uca1400_as_ci' is not valid for CHARACTER SET 'latin1'
+
+query CREATE DATABASE
+attrs COLLATE DEFAULT COLLATE uca1400_as_ci
+result ERROR: Conflicting declarations: 'COLLATE DEFAULT' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs COLLATE utf8mb4_bin COLLATE uca1400_as_ci
+result ERROR: Conflicting declarations: 'COLLATE utf8mb4_bin' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs COLLATE latin1_swedish_ci COLLATE uca1400_as_ci
+result ERROR: Conflicting declarations: 'COLLATE latin1_swedish_ci' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs COLLATE latin1_bin COLLATE uca1400_as_ci
+result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci COLLATE uca1400_as_ci
+result ERROR: Conflicting declarations: 'COLLATE uca1400_ai_ci' and 'COLLATE uca1400_as_ci'
+
+OK 35
query CREATE DATABASE
attrs CHARACTER SET DEFAULT CHARACTER SET DEFAULT
@@ -371,6 +469,14 @@ attrs COLLATE utf8mb4_bin CHARACTER SET DEFAULT
result CHARACTER SET utf8mb4 COLLATE utf8mb4_bin
query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci CHARACTER SET DEFAULT
+result CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_ai_ci
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci CHARACTER SET DEFAULT
+result CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_as_ci
+
+query CREATE DATABASE
attrs CHARACTER SET latin1 CHARACTER SET latin1
result CHARACTER SET latin1 COLLATE latin1_swedish_ci
@@ -403,6 +509,14 @@ attrs COLLATE utf8mb4_bin CHARACTER SET utf8mb4
result CHARACTER SET utf8mb4 COLLATE utf8mb4_bin
query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci CHARACTER SET utf8mb4
+result CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_ai_ci
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci CHARACTER SET utf8mb4
+result CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_as_ci
+
+query CREATE DATABASE
attrs CHARACTER SET DEFAULT COLLATE DEFAULT
result CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci
@@ -454,11 +568,35 @@ query CREATE DATABASE
attrs COLLATE latin1_bin COLLATE latin1_bin
result CHARACTER SET latin1 COLLATE latin1_bin
+query CREATE DATABASE
+attrs CHARACTER SET DEFAULT COLLATE uca1400_ai_ci
+result CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_ai_ci
+
+query CREATE DATABASE
+attrs CHARACTER SET utf8mb4 COLLATE uca1400_ai_ci
+result CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_ai_ci
+
+query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci COLLATE uca1400_ai_ci
+result CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_ai_ci
+
+query CREATE DATABASE
+attrs CHARACTER SET DEFAULT COLLATE uca1400_as_ci
+result CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_as_ci
+
+query CREATE DATABASE
+attrs CHARACTER SET utf8mb4 COLLATE uca1400_as_ci
+result CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_as_ci
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci COLLATE uca1400_as_ci
+result CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_as_ci
+
TEST: 3 clauses
-TOTAL 343
+TOTAL 729
-ERROR 264
+ERROR 612
query CREATE DATABASE
attrs CHARACTER SET latin1 CHARACTER SET DEFAULT CHARACTER SET DEFAULT
@@ -501,6 +639,14 @@ attrs COLLATE latin1_bin CHARACTER SET latin1 CHARACTER SET DEFAULT
result ERROR: Conflicting declarations: 'CHARACTER SET latin1' and 'CHARACTER SET DEFAULT (utf8mb4)'
query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci CHARACTER SET latin1 CHARACTER SET DEFAULT
+result ERROR: COLLATION 'uca1400_ai_ci' is not valid for CHARACTER SET 'latin1'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci CHARACTER SET latin1 CHARACTER SET DEFAULT
+result ERROR: COLLATION 'uca1400_as_ci' is not valid for CHARACTER SET 'latin1'
+
+query CREATE DATABASE
attrs CHARACTER SET latin1 CHARACTER SET utf8mb4 CHARACTER SET DEFAULT
result ERROR: Conflicting declarations: 'CHARACTER SET latin1' and 'CHARACTER SET utf8mb4'
@@ -529,6 +675,14 @@ attrs COLLATE latin1_bin COLLATE DEFAULT CHARACTER SET DEFAULT
result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE DEFAULT'
query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci COLLATE DEFAULT CHARACTER SET DEFAULT
+result ERROR: Conflicting declarations: 'COLLATE uca1400_ai_ci' and 'COLLATE DEFAULT'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci COLLATE DEFAULT CHARACTER SET DEFAULT
+result ERROR: Conflicting declarations: 'COLLATE uca1400_as_ci' and 'COLLATE DEFAULT'
+
+query CREATE DATABASE
attrs CHARACTER SET latin1 COLLATE utf8mb4_bin CHARACTER SET DEFAULT
result ERROR: COLLATION 'utf8mb4_bin' is not valid for CHARACTER SET 'latin1'
@@ -545,6 +699,14 @@ attrs COLLATE latin1_bin COLLATE utf8mb4_bin CHARACTER SET DEFAULT
result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE utf8mb4_bin'
query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci COLLATE utf8mb4_bin CHARACTER SET DEFAULT
+result ERROR: Conflicting declarations: 'COLLATE uca1400_ai_ci' and 'COLLATE utf8mb4_bin'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci COLLATE utf8mb4_bin CHARACTER SET DEFAULT
+result ERROR: Conflicting declarations: 'COLLATE uca1400_as_ci' and 'COLLATE utf8mb4_bin'
+
+query CREATE DATABASE
attrs CHARACTER SET DEFAULT COLLATE latin1_swedish_ci CHARACTER SET DEFAULT
result ERROR: COLLATION 'latin1_swedish_ci' is not valid for CHARACTER SET 'utf8mb4'
@@ -573,6 +735,14 @@ attrs COLLATE latin1_bin COLLATE latin1_swedish_ci CHARACTER SET DEFAULT
result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE latin1_swedish_ci'
query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci COLLATE latin1_swedish_ci CHARACTER SET DEFAULT
+result ERROR: Conflicting declarations: 'COLLATE uca1400_ai_ci' and 'COLLATE latin1_swedish_ci'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci COLLATE latin1_swedish_ci CHARACTER SET DEFAULT
+result ERROR: Conflicting declarations: 'COLLATE uca1400_as_ci' and 'COLLATE latin1_swedish_ci'
+
+query CREATE DATABASE
attrs CHARACTER SET DEFAULT COLLATE latin1_bin CHARACTER SET DEFAULT
result ERROR: COLLATION 'latin1_bin' is not valid for CHARACTER SET 'utf8mb4'
@@ -601,6 +771,62 @@ attrs COLLATE latin1_bin COLLATE latin1_bin CHARACTER SET DEFAULT
result ERROR: COLLATION 'latin1_bin' is not valid for CHARACTER SET 'utf8mb4'
query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci COLLATE latin1_bin CHARACTER SET DEFAULT
+result ERROR: Conflicting declarations: 'COLLATE uca1400_ai_ci' and 'COLLATE latin1_bin'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci COLLATE latin1_bin CHARACTER SET DEFAULT
+result ERROR: Conflicting declarations: 'COLLATE uca1400_as_ci' and 'COLLATE latin1_bin'
+
+query CREATE DATABASE
+attrs CHARACTER SET latin1 COLLATE uca1400_ai_ci CHARACTER SET DEFAULT
+result ERROR: COLLATION 'uca1400_ai_ci' is not valid for CHARACTER SET 'latin1'
+
+query CREATE DATABASE
+attrs COLLATE DEFAULT COLLATE uca1400_ai_ci CHARACTER SET DEFAULT
+result ERROR: Conflicting declarations: 'COLLATE DEFAULT' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs COLLATE utf8mb4_bin COLLATE uca1400_ai_ci CHARACTER SET DEFAULT
+result ERROR: Conflicting declarations: 'COLLATE utf8mb4_bin' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs COLLATE latin1_swedish_ci COLLATE uca1400_ai_ci CHARACTER SET DEFAULT
+result ERROR: Conflicting declarations: 'COLLATE latin1_swedish_ci' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs COLLATE latin1_bin COLLATE uca1400_ai_ci CHARACTER SET DEFAULT
+result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci COLLATE uca1400_ai_ci CHARACTER SET DEFAULT
+result ERROR: Conflicting declarations: 'COLLATE uca1400_as_ci' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs CHARACTER SET latin1 COLLATE uca1400_as_ci CHARACTER SET DEFAULT
+result ERROR: COLLATION 'uca1400_as_ci' is not valid for CHARACTER SET 'latin1'
+
+query CREATE DATABASE
+attrs COLLATE DEFAULT COLLATE uca1400_as_ci CHARACTER SET DEFAULT
+result ERROR: Conflicting declarations: 'COLLATE DEFAULT' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs COLLATE utf8mb4_bin COLLATE uca1400_as_ci CHARACTER SET DEFAULT
+result ERROR: Conflicting declarations: 'COLLATE utf8mb4_bin' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs COLLATE latin1_swedish_ci COLLATE uca1400_as_ci CHARACTER SET DEFAULT
+result ERROR: Conflicting declarations: 'COLLATE latin1_swedish_ci' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs COLLATE latin1_bin COLLATE uca1400_as_ci CHARACTER SET DEFAULT
+result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci COLLATE uca1400_as_ci CHARACTER SET DEFAULT
+result ERROR: Conflicting declarations: 'COLLATE uca1400_ai_ci' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
attrs CHARACTER SET DEFAULT CHARACTER SET DEFAULT CHARACTER SET latin1
result ERROR: Conflicting declarations: 'CHARACTER SET DEFAULT (utf8mb4)' and 'CHARACTER SET latin1'
@@ -629,6 +855,14 @@ attrs COLLATE latin1_bin CHARACTER SET DEFAULT CHARACTER SET latin1
result ERROR: Conflicting declarations: 'CHARACTER SET DEFAULT (utf8mb4)' and 'CHARACTER SET latin1'
query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci CHARACTER SET DEFAULT CHARACTER SET latin1
+result ERROR: COLLATION 'uca1400_ai_ci' is not valid for CHARACTER SET 'latin1'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci CHARACTER SET DEFAULT CHARACTER SET latin1
+result ERROR: COLLATION 'uca1400_as_ci' is not valid for CHARACTER SET 'latin1'
+
+query CREATE DATABASE
attrs CHARACTER SET DEFAULT CHARACTER SET latin1 CHARACTER SET latin1
result ERROR: Conflicting declarations: 'CHARACTER SET DEFAULT (utf8mb4)' and 'CHARACTER SET latin1'
@@ -641,6 +875,14 @@ attrs COLLATE utf8mb4_bin CHARACTER SET latin1 CHARACTER SET latin1
result ERROR: COLLATION 'utf8mb4_bin' is not valid for CHARACTER SET 'latin1'
query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci CHARACTER SET latin1 CHARACTER SET latin1
+result ERROR: COLLATION 'uca1400_ai_ci' is not valid for CHARACTER SET 'latin1'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci CHARACTER SET latin1 CHARACTER SET latin1
+result ERROR: COLLATION 'uca1400_as_ci' is not valid for CHARACTER SET 'latin1'
+
+query CREATE DATABASE
attrs CHARACTER SET DEFAULT CHARACTER SET utf8mb4 CHARACTER SET latin1
result ERROR: Conflicting declarations: 'CHARACTER SET utf8mb4' and 'CHARACTER SET latin1'
@@ -669,6 +911,14 @@ attrs COLLATE latin1_bin CHARACTER SET utf8mb4 CHARACTER SET latin1
result ERROR: COLLATION 'latin1_bin' is not valid for CHARACTER SET 'utf8mb4'
query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci CHARACTER SET utf8mb4 CHARACTER SET latin1
+result ERROR: Conflicting declarations: 'CHARACTER SET utf8mb4' and 'CHARACTER SET latin1'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci CHARACTER SET utf8mb4 CHARACTER SET latin1
+result ERROR: Conflicting declarations: 'CHARACTER SET utf8mb4' and 'CHARACTER SET latin1'
+
+query CREATE DATABASE
attrs CHARACTER SET DEFAULT COLLATE DEFAULT CHARACTER SET latin1
result ERROR: Conflicting declarations: 'CHARACTER SET DEFAULT (utf8mb4)' and 'CHARACTER SET latin1'
@@ -685,6 +935,14 @@ attrs COLLATE latin1_bin COLLATE DEFAULT CHARACTER SET latin1
result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE DEFAULT'
query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci COLLATE DEFAULT CHARACTER SET latin1
+result ERROR: Conflicting declarations: 'COLLATE uca1400_ai_ci' and 'COLLATE DEFAULT'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci COLLATE DEFAULT CHARACTER SET latin1
+result ERROR: Conflicting declarations: 'COLLATE uca1400_as_ci' and 'COLLATE DEFAULT'
+
+query CREATE DATABASE
attrs CHARACTER SET DEFAULT COLLATE utf8mb4_bin CHARACTER SET latin1
result ERROR: COLLATION 'utf8mb4_bin' is not valid for CHARACTER SET 'latin1'
@@ -713,6 +971,14 @@ attrs COLLATE latin1_bin COLLATE utf8mb4_bin CHARACTER SET latin1
result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE utf8mb4_bin'
query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci COLLATE utf8mb4_bin CHARACTER SET latin1
+result ERROR: Conflicting declarations: 'COLLATE uca1400_ai_ci' and 'COLLATE utf8mb4_bin'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci COLLATE utf8mb4_bin CHARACTER SET latin1
+result ERROR: Conflicting declarations: 'COLLATE uca1400_as_ci' and 'COLLATE utf8mb4_bin'
+
+query CREATE DATABASE
attrs CHARACTER SET DEFAULT COLLATE latin1_swedish_ci CHARACTER SET latin1
result ERROR: Conflicting declarations: 'CHARACTER SET DEFAULT (utf8mb4)' and 'CHARACTER SET latin1'
@@ -729,6 +995,14 @@ attrs COLLATE latin1_bin COLLATE latin1_swedish_ci CHARACTER SET latin1
result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE latin1_swedish_ci'
query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci COLLATE latin1_swedish_ci CHARACTER SET latin1
+result ERROR: Conflicting declarations: 'COLLATE uca1400_ai_ci' and 'COLLATE latin1_swedish_ci'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci COLLATE latin1_swedish_ci CHARACTER SET latin1
+result ERROR: Conflicting declarations: 'COLLATE uca1400_as_ci' and 'COLLATE latin1_swedish_ci'
+
+query CREATE DATABASE
attrs CHARACTER SET DEFAULT COLLATE latin1_bin CHARACTER SET latin1
result ERROR: Conflicting declarations: 'CHARACTER SET DEFAULT (utf8mb4)' and 'CHARACTER SET latin1'
@@ -749,6 +1023,86 @@ attrs COLLATE latin1_swedish_ci COLLATE latin1_bin CHARACTER SET latin1
result ERROR: Conflicting declarations: 'COLLATE latin1_swedish_ci' and 'COLLATE latin1_bin'
query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci COLLATE latin1_bin CHARACTER SET latin1
+result ERROR: Conflicting declarations: 'COLLATE uca1400_ai_ci' and 'COLLATE latin1_bin'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci COLLATE latin1_bin CHARACTER SET latin1
+result ERROR: Conflicting declarations: 'COLLATE uca1400_as_ci' and 'COLLATE latin1_bin'
+
+query CREATE DATABASE
+attrs CHARACTER SET DEFAULT COLLATE uca1400_ai_ci CHARACTER SET latin1
+result ERROR: COLLATION 'uca1400_ai_ci' is not valid for CHARACTER SET 'latin1'
+
+query CREATE DATABASE
+attrs CHARACTER SET latin1 COLLATE uca1400_ai_ci CHARACTER SET latin1
+result ERROR: COLLATION 'uca1400_ai_ci' is not valid for CHARACTER SET 'latin1'
+
+query CREATE DATABASE
+attrs CHARACTER SET utf8mb4 COLLATE uca1400_ai_ci CHARACTER SET latin1
+result ERROR: Conflicting declarations: 'CHARACTER SET utf8mb4' and 'CHARACTER SET latin1'
+
+query CREATE DATABASE
+attrs COLLATE DEFAULT COLLATE uca1400_ai_ci CHARACTER SET latin1
+result ERROR: Conflicting declarations: 'COLLATE DEFAULT' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs COLLATE utf8mb4_bin COLLATE uca1400_ai_ci CHARACTER SET latin1
+result ERROR: Conflicting declarations: 'COLLATE utf8mb4_bin' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs COLLATE latin1_swedish_ci COLLATE uca1400_ai_ci CHARACTER SET latin1
+result ERROR: Conflicting declarations: 'COLLATE latin1_swedish_ci' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs COLLATE latin1_bin COLLATE uca1400_ai_ci CHARACTER SET latin1
+result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci COLLATE uca1400_ai_ci CHARACTER SET latin1
+result ERROR: COLLATION 'uca1400_ai_ci' is not valid for CHARACTER SET 'latin1'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci COLLATE uca1400_ai_ci CHARACTER SET latin1
+result ERROR: Conflicting declarations: 'COLLATE uca1400_as_ci' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs CHARACTER SET DEFAULT COLLATE uca1400_as_ci CHARACTER SET latin1
+result ERROR: COLLATION 'uca1400_as_ci' is not valid for CHARACTER SET 'latin1'
+
+query CREATE DATABASE
+attrs CHARACTER SET latin1 COLLATE uca1400_as_ci CHARACTER SET latin1
+result ERROR: COLLATION 'uca1400_as_ci' is not valid for CHARACTER SET 'latin1'
+
+query CREATE DATABASE
+attrs CHARACTER SET utf8mb4 COLLATE uca1400_as_ci CHARACTER SET latin1
+result ERROR: Conflicting declarations: 'CHARACTER SET utf8mb4' and 'CHARACTER SET latin1'
+
+query CREATE DATABASE
+attrs COLLATE DEFAULT COLLATE uca1400_as_ci CHARACTER SET latin1
+result ERROR: Conflicting declarations: 'COLLATE DEFAULT' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs COLLATE utf8mb4_bin COLLATE uca1400_as_ci CHARACTER SET latin1
+result ERROR: Conflicting declarations: 'COLLATE utf8mb4_bin' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs COLLATE latin1_swedish_ci COLLATE uca1400_as_ci CHARACTER SET latin1
+result ERROR: Conflicting declarations: 'COLLATE latin1_swedish_ci' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs COLLATE latin1_bin COLLATE uca1400_as_ci CHARACTER SET latin1
+result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci COLLATE uca1400_as_ci CHARACTER SET latin1
+result ERROR: Conflicting declarations: 'COLLATE uca1400_ai_ci' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci COLLATE uca1400_as_ci CHARACTER SET latin1
+result ERROR: COLLATION 'uca1400_as_ci' is not valid for CHARACTER SET 'latin1'
+
+query CREATE DATABASE
attrs CHARACTER SET latin1 CHARACTER SET DEFAULT CHARACTER SET utf8mb4
result ERROR: Conflicting declarations: 'CHARACTER SET latin1' and 'CHARACTER SET utf8mb4'
@@ -789,6 +1143,14 @@ attrs COLLATE latin1_bin CHARACTER SET latin1 CHARACTER SET utf8mb4
result ERROR: Conflicting declarations: 'CHARACTER SET latin1' and 'CHARACTER SET utf8mb4'
query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci CHARACTER SET latin1 CHARACTER SET utf8mb4
+result ERROR: COLLATION 'uca1400_ai_ci' is not valid for CHARACTER SET 'latin1'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci CHARACTER SET latin1 CHARACTER SET utf8mb4
+result ERROR: COLLATION 'uca1400_as_ci' is not valid for CHARACTER SET 'latin1'
+
+query CREATE DATABASE
attrs CHARACTER SET latin1 CHARACTER SET utf8mb4 CHARACTER SET utf8mb4
result ERROR: Conflicting declarations: 'CHARACTER SET latin1' and 'CHARACTER SET utf8mb4'
@@ -817,6 +1179,14 @@ attrs COLLATE latin1_bin COLLATE DEFAULT CHARACTER SET utf8mb4
result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE DEFAULT'
query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci COLLATE DEFAULT CHARACTER SET utf8mb4
+result ERROR: Conflicting declarations: 'COLLATE uca1400_ai_ci' and 'COLLATE DEFAULT'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci COLLATE DEFAULT CHARACTER SET utf8mb4
+result ERROR: Conflicting declarations: 'COLLATE uca1400_as_ci' and 'COLLATE DEFAULT'
+
+query CREATE DATABASE
attrs CHARACTER SET latin1 COLLATE utf8mb4_bin CHARACTER SET utf8mb4
result ERROR: COLLATION 'utf8mb4_bin' is not valid for CHARACTER SET 'latin1'
@@ -833,6 +1203,14 @@ attrs COLLATE latin1_bin COLLATE utf8mb4_bin CHARACTER SET utf8mb4
result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE utf8mb4_bin'
query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci COLLATE utf8mb4_bin CHARACTER SET utf8mb4
+result ERROR: Conflicting declarations: 'COLLATE uca1400_ai_ci' and 'COLLATE utf8mb4_bin'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci COLLATE utf8mb4_bin CHARACTER SET utf8mb4
+result ERROR: Conflicting declarations: 'COLLATE uca1400_as_ci' and 'COLLATE utf8mb4_bin'
+
+query CREATE DATABASE
attrs CHARACTER SET DEFAULT COLLATE latin1_swedish_ci CHARACTER SET utf8mb4
result ERROR: COLLATION 'latin1_swedish_ci' is not valid for CHARACTER SET 'utf8mb4'
@@ -861,6 +1239,14 @@ attrs COLLATE latin1_bin COLLATE latin1_swedish_ci CHARACTER SET utf8mb4
result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE latin1_swedish_ci'
query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci COLLATE latin1_swedish_ci CHARACTER SET utf8mb4
+result ERROR: Conflicting declarations: 'COLLATE uca1400_ai_ci' and 'COLLATE latin1_swedish_ci'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci COLLATE latin1_swedish_ci CHARACTER SET utf8mb4
+result ERROR: Conflicting declarations: 'COLLATE uca1400_as_ci' and 'COLLATE latin1_swedish_ci'
+
+query CREATE DATABASE
attrs CHARACTER SET DEFAULT COLLATE latin1_bin CHARACTER SET utf8mb4
result ERROR: COLLATION 'latin1_bin' is not valid for CHARACTER SET 'utf8mb4'
@@ -889,6 +1275,62 @@ attrs COLLATE latin1_bin COLLATE latin1_bin CHARACTER SET utf8mb4
result ERROR: COLLATION 'latin1_bin' is not valid for CHARACTER SET 'utf8mb4'
query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci COLLATE latin1_bin CHARACTER SET utf8mb4
+result ERROR: Conflicting declarations: 'COLLATE uca1400_ai_ci' and 'COLLATE latin1_bin'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci COLLATE latin1_bin CHARACTER SET utf8mb4
+result ERROR: Conflicting declarations: 'COLLATE uca1400_as_ci' and 'COLLATE latin1_bin'
+
+query CREATE DATABASE
+attrs CHARACTER SET latin1 COLLATE uca1400_ai_ci CHARACTER SET utf8mb4
+result ERROR: COLLATION 'uca1400_ai_ci' is not valid for CHARACTER SET 'latin1'
+
+query CREATE DATABASE
+attrs COLLATE DEFAULT COLLATE uca1400_ai_ci CHARACTER SET utf8mb4
+result ERROR: Conflicting declarations: 'COLLATE DEFAULT' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs COLLATE utf8mb4_bin COLLATE uca1400_ai_ci CHARACTER SET utf8mb4
+result ERROR: Conflicting declarations: 'COLLATE utf8mb4_bin' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs COLLATE latin1_swedish_ci COLLATE uca1400_ai_ci CHARACTER SET utf8mb4
+result ERROR: Conflicting declarations: 'COLLATE latin1_swedish_ci' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs COLLATE latin1_bin COLLATE uca1400_ai_ci CHARACTER SET utf8mb4
+result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci COLLATE uca1400_ai_ci CHARACTER SET utf8mb4
+result ERROR: Conflicting declarations: 'COLLATE uca1400_as_ci' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs CHARACTER SET latin1 COLLATE uca1400_as_ci CHARACTER SET utf8mb4
+result ERROR: COLLATION 'uca1400_as_ci' is not valid for CHARACTER SET 'latin1'
+
+query CREATE DATABASE
+attrs COLLATE DEFAULT COLLATE uca1400_as_ci CHARACTER SET utf8mb4
+result ERROR: Conflicting declarations: 'COLLATE DEFAULT' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs COLLATE utf8mb4_bin COLLATE uca1400_as_ci CHARACTER SET utf8mb4
+result ERROR: Conflicting declarations: 'COLLATE utf8mb4_bin' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs COLLATE latin1_swedish_ci COLLATE uca1400_as_ci CHARACTER SET utf8mb4
+result ERROR: Conflicting declarations: 'COLLATE latin1_swedish_ci' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs COLLATE latin1_bin COLLATE uca1400_as_ci CHARACTER SET utf8mb4
+result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci COLLATE uca1400_as_ci CHARACTER SET utf8mb4
+result ERROR: Conflicting declarations: 'COLLATE uca1400_ai_ci' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
attrs CHARACTER SET latin1 CHARACTER SET DEFAULT COLLATE DEFAULT
result ERROR: Conflicting declarations: 'CHARACTER SET latin1' and 'CHARACTER SET DEFAULT (utf8mb4)'
@@ -905,6 +1347,14 @@ attrs COLLATE latin1_bin CHARACTER SET DEFAULT COLLATE DEFAULT
result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE DEFAULT'
query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci CHARACTER SET DEFAULT COLLATE DEFAULT
+result ERROR: Conflicting declarations: 'COLLATE uca1400_ai_ci' and 'COLLATE DEFAULT'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci CHARACTER SET DEFAULT COLLATE DEFAULT
+result ERROR: Conflicting declarations: 'COLLATE uca1400_as_ci' and 'COLLATE DEFAULT'
+
+query CREATE DATABASE
attrs CHARACTER SET DEFAULT CHARACTER SET latin1 COLLATE DEFAULT
result ERROR: Conflicting declarations: 'CHARACTER SET DEFAULT (utf8mb4)' and 'CHARACTER SET latin1'
@@ -921,6 +1371,14 @@ attrs COLLATE latin1_bin CHARACTER SET latin1 COLLATE DEFAULT
result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE DEFAULT'
query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci CHARACTER SET latin1 COLLATE DEFAULT
+result ERROR: COLLATION 'uca1400_ai_ci' is not valid for CHARACTER SET 'latin1'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci CHARACTER SET latin1 COLLATE DEFAULT
+result ERROR: COLLATION 'uca1400_as_ci' is not valid for CHARACTER SET 'latin1'
+
+query CREATE DATABASE
attrs CHARACTER SET latin1 CHARACTER SET utf8mb4 COLLATE DEFAULT
result ERROR: Conflicting declarations: 'CHARACTER SET latin1' and 'CHARACTER SET utf8mb4'
@@ -937,6 +1395,14 @@ attrs COLLATE latin1_bin CHARACTER SET utf8mb4 COLLATE DEFAULT
result ERROR: COLLATION 'latin1_bin' is not valid for CHARACTER SET 'utf8mb4'
query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci CHARACTER SET utf8mb4 COLLATE DEFAULT
+result ERROR: Conflicting declarations: 'COLLATE utf8mb4_uca1400_ai_ci' and 'COLLATE DEFAULT'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci CHARACTER SET utf8mb4 COLLATE DEFAULT
+result ERROR: Conflicting declarations: 'COLLATE utf8mb4_uca1400_as_ci' and 'COLLATE DEFAULT'
+
+query CREATE DATABASE
attrs COLLATE utf8mb4_bin COLLATE DEFAULT COLLATE DEFAULT
result ERROR: Conflicting declarations: 'COLLATE utf8mb4_bin' and 'COLLATE DEFAULT'
@@ -945,6 +1411,14 @@ attrs COLLATE latin1_bin COLLATE DEFAULT COLLATE DEFAULT
result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE DEFAULT'
query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci COLLATE DEFAULT COLLATE DEFAULT
+result ERROR: Conflicting declarations: 'COLLATE uca1400_ai_ci' and 'COLLATE DEFAULT'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci COLLATE DEFAULT COLLATE DEFAULT
+result ERROR: Conflicting declarations: 'COLLATE uca1400_as_ci' and 'COLLATE DEFAULT'
+
+query CREATE DATABASE
attrs CHARACTER SET DEFAULT COLLATE utf8mb4_bin COLLATE DEFAULT
result ERROR: Conflicting declarations: 'COLLATE utf8mb4_bin' and 'COLLATE DEFAULT'
@@ -973,6 +1447,14 @@ attrs COLLATE latin1_bin COLLATE utf8mb4_bin COLLATE DEFAULT
result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE utf8mb4_bin'
query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci COLLATE utf8mb4_bin COLLATE DEFAULT
+result ERROR: Conflicting declarations: 'COLLATE uca1400_ai_ci' and 'COLLATE utf8mb4_bin'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci COLLATE utf8mb4_bin COLLATE DEFAULT
+result ERROR: Conflicting declarations: 'COLLATE uca1400_as_ci' and 'COLLATE utf8mb4_bin'
+
+query CREATE DATABASE
attrs CHARACTER SET DEFAULT COLLATE latin1_swedish_ci COLLATE DEFAULT
result ERROR: COLLATION 'latin1_swedish_ci' is not valid for CHARACTER SET 'utf8mb4'
@@ -989,6 +1471,14 @@ attrs COLLATE latin1_bin COLLATE latin1_swedish_ci COLLATE DEFAULT
result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE latin1_swedish_ci'
query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci COLLATE latin1_swedish_ci COLLATE DEFAULT
+result ERROR: Conflicting declarations: 'COLLATE uca1400_ai_ci' and 'COLLATE latin1_swedish_ci'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci COLLATE latin1_swedish_ci COLLATE DEFAULT
+result ERROR: Conflicting declarations: 'COLLATE uca1400_as_ci' and 'COLLATE latin1_swedish_ci'
+
+query CREATE DATABASE
attrs CHARACTER SET DEFAULT COLLATE latin1_bin COLLATE DEFAULT
result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE DEFAULT'
@@ -1017,6 +1507,86 @@ attrs COLLATE latin1_bin COLLATE latin1_bin COLLATE DEFAULT
result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE DEFAULT'
query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci COLLATE latin1_bin COLLATE DEFAULT
+result ERROR: Conflicting declarations: 'COLLATE uca1400_ai_ci' and 'COLLATE latin1_bin'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci COLLATE latin1_bin COLLATE DEFAULT
+result ERROR: Conflicting declarations: 'COLLATE uca1400_as_ci' and 'COLLATE latin1_bin'
+
+query CREATE DATABASE
+attrs CHARACTER SET DEFAULT COLLATE uca1400_ai_ci COLLATE DEFAULT
+result ERROR: Conflicting declarations: 'COLLATE uca1400_ai_ci' and 'COLLATE DEFAULT'
+
+query CREATE DATABASE
+attrs CHARACTER SET latin1 COLLATE uca1400_ai_ci COLLATE DEFAULT
+result ERROR: COLLATION 'uca1400_ai_ci' is not valid for CHARACTER SET 'latin1'
+
+query CREATE DATABASE
+attrs CHARACTER SET utf8mb4 COLLATE uca1400_ai_ci COLLATE DEFAULT
+result ERROR: Conflicting declarations: 'COLLATE utf8mb4_uca1400_ai_ci' and 'COLLATE DEFAULT'
+
+query CREATE DATABASE
+attrs COLLATE DEFAULT COLLATE uca1400_ai_ci COLLATE DEFAULT
+result ERROR: Conflicting declarations: 'COLLATE DEFAULT' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs COLLATE utf8mb4_bin COLLATE uca1400_ai_ci COLLATE DEFAULT
+result ERROR: Conflicting declarations: 'COLLATE utf8mb4_bin' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs COLLATE latin1_swedish_ci COLLATE uca1400_ai_ci COLLATE DEFAULT
+result ERROR: Conflicting declarations: 'COLLATE latin1_swedish_ci' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs COLLATE latin1_bin COLLATE uca1400_ai_ci COLLATE DEFAULT
+result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci COLLATE uca1400_ai_ci COLLATE DEFAULT
+result ERROR: Conflicting declarations: 'COLLATE uca1400_ai_ci' and 'COLLATE DEFAULT'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci COLLATE uca1400_ai_ci COLLATE DEFAULT
+result ERROR: Conflicting declarations: 'COLLATE uca1400_as_ci' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs CHARACTER SET DEFAULT COLLATE uca1400_as_ci COLLATE DEFAULT
+result ERROR: Conflicting declarations: 'COLLATE uca1400_as_ci' and 'COLLATE DEFAULT'
+
+query CREATE DATABASE
+attrs CHARACTER SET latin1 COLLATE uca1400_as_ci COLLATE DEFAULT
+result ERROR: COLLATION 'uca1400_as_ci' is not valid for CHARACTER SET 'latin1'
+
+query CREATE DATABASE
+attrs CHARACTER SET utf8mb4 COLLATE uca1400_as_ci COLLATE DEFAULT
+result ERROR: Conflicting declarations: 'COLLATE utf8mb4_uca1400_as_ci' and 'COLLATE DEFAULT'
+
+query CREATE DATABASE
+attrs COLLATE DEFAULT COLLATE uca1400_as_ci COLLATE DEFAULT
+result ERROR: Conflicting declarations: 'COLLATE DEFAULT' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs COLLATE utf8mb4_bin COLLATE uca1400_as_ci COLLATE DEFAULT
+result ERROR: Conflicting declarations: 'COLLATE utf8mb4_bin' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs COLLATE latin1_swedish_ci COLLATE uca1400_as_ci COLLATE DEFAULT
+result ERROR: Conflicting declarations: 'COLLATE latin1_swedish_ci' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs COLLATE latin1_bin COLLATE uca1400_as_ci COLLATE DEFAULT
+result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci COLLATE uca1400_as_ci COLLATE DEFAULT
+result ERROR: Conflicting declarations: 'COLLATE uca1400_ai_ci' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci COLLATE uca1400_as_ci COLLATE DEFAULT
+result ERROR: Conflicting declarations: 'COLLATE uca1400_as_ci' and 'COLLATE DEFAULT'
+
+query CREATE DATABASE
attrs CHARACTER SET latin1 CHARACTER SET DEFAULT COLLATE utf8mb4_bin
result ERROR: COLLATION 'utf8mb4_bin' is not valid for CHARACTER SET 'latin1'
@@ -1033,6 +1603,14 @@ attrs COLLATE latin1_bin CHARACTER SET DEFAULT COLLATE utf8mb4_bin
result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE utf8mb4_bin'
query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci CHARACTER SET DEFAULT COLLATE utf8mb4_bin
+result ERROR: Conflicting declarations: 'COLLATE uca1400_ai_ci' and 'COLLATE utf8mb4_bin'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci CHARACTER SET DEFAULT COLLATE utf8mb4_bin
+result ERROR: Conflicting declarations: 'COLLATE uca1400_as_ci' and 'COLLATE utf8mb4_bin'
+
+query CREATE DATABASE
attrs CHARACTER SET DEFAULT CHARACTER SET latin1 COLLATE utf8mb4_bin
result ERROR: COLLATION 'utf8mb4_bin' is not valid for CHARACTER SET 'latin1'
@@ -1061,6 +1639,14 @@ attrs COLLATE latin1_bin CHARACTER SET latin1 COLLATE utf8mb4_bin
result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE utf8mb4_bin'
query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci CHARACTER SET latin1 COLLATE utf8mb4_bin
+result ERROR: COLLATION 'uca1400_ai_ci' is not valid for CHARACTER SET 'latin1'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci CHARACTER SET latin1 COLLATE utf8mb4_bin
+result ERROR: COLLATION 'uca1400_as_ci' is not valid for CHARACTER SET 'latin1'
+
+query CREATE DATABASE
attrs CHARACTER SET latin1 CHARACTER SET utf8mb4 COLLATE utf8mb4_bin
result ERROR: Conflicting declarations: 'CHARACTER SET latin1' and 'CHARACTER SET utf8mb4'
@@ -1077,6 +1663,14 @@ attrs COLLATE latin1_bin CHARACTER SET utf8mb4 COLLATE utf8mb4_bin
result ERROR: COLLATION 'latin1_bin' is not valid for CHARACTER SET 'utf8mb4'
query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci CHARACTER SET utf8mb4 COLLATE utf8mb4_bin
+result ERROR: Conflicting declarations: 'COLLATE utf8mb4_uca1400_ai_ci' and 'COLLATE utf8mb4_bin'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci CHARACTER SET utf8mb4 COLLATE utf8mb4_bin
+result ERROR: Conflicting declarations: 'COLLATE utf8mb4_uca1400_as_ci' and 'COLLATE utf8mb4_bin'
+
+query CREATE DATABASE
attrs CHARACTER SET DEFAULT COLLATE DEFAULT COLLATE utf8mb4_bin
result ERROR: Conflicting declarations: 'COLLATE DEFAULT' and 'COLLATE utf8mb4_bin'
@@ -1105,6 +1699,14 @@ attrs COLLATE latin1_bin COLLATE DEFAULT COLLATE utf8mb4_bin
result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE DEFAULT'
query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci COLLATE DEFAULT COLLATE utf8mb4_bin
+result ERROR: Conflicting declarations: 'COLLATE uca1400_ai_ci' and 'COLLATE DEFAULT'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci COLLATE DEFAULT COLLATE utf8mb4_bin
+result ERROR: Conflicting declarations: 'COLLATE uca1400_as_ci' and 'COLLATE DEFAULT'
+
+query CREATE DATABASE
attrs CHARACTER SET latin1 COLLATE utf8mb4_bin COLLATE utf8mb4_bin
result ERROR: COLLATION 'utf8mb4_bin' is not valid for CHARACTER SET 'latin1'
@@ -1121,6 +1723,14 @@ attrs COLLATE latin1_bin COLLATE utf8mb4_bin COLLATE utf8mb4_bin
result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE utf8mb4_bin'
query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci COLLATE utf8mb4_bin COLLATE utf8mb4_bin
+result ERROR: Conflicting declarations: 'COLLATE uca1400_ai_ci' and 'COLLATE utf8mb4_bin'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci COLLATE utf8mb4_bin COLLATE utf8mb4_bin
+result ERROR: Conflicting declarations: 'COLLATE uca1400_as_ci' and 'COLLATE utf8mb4_bin'
+
+query CREATE DATABASE
attrs CHARACTER SET DEFAULT COLLATE latin1_swedish_ci COLLATE utf8mb4_bin
result ERROR: Conflicting declarations: 'COLLATE latin1_swedish_ci' and 'COLLATE utf8mb4_bin'
@@ -1149,6 +1759,14 @@ attrs COLLATE latin1_bin COLLATE latin1_swedish_ci COLLATE utf8mb4_bin
result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE latin1_swedish_ci'
query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci COLLATE latin1_swedish_ci COLLATE utf8mb4_bin
+result ERROR: Conflicting declarations: 'COLLATE uca1400_ai_ci' and 'COLLATE latin1_swedish_ci'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci COLLATE latin1_swedish_ci COLLATE utf8mb4_bin
+result ERROR: Conflicting declarations: 'COLLATE uca1400_as_ci' and 'COLLATE latin1_swedish_ci'
+
+query CREATE DATABASE
attrs CHARACTER SET DEFAULT COLLATE latin1_bin COLLATE utf8mb4_bin
result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE utf8mb4_bin'
@@ -1177,6 +1795,86 @@ attrs COLLATE latin1_bin COLLATE latin1_bin COLLATE utf8mb4_bin
result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE utf8mb4_bin'
query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci COLLATE latin1_bin COLLATE utf8mb4_bin
+result ERROR: Conflicting declarations: 'COLLATE uca1400_ai_ci' and 'COLLATE latin1_bin'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci COLLATE latin1_bin COLLATE utf8mb4_bin
+result ERROR: Conflicting declarations: 'COLLATE uca1400_as_ci' and 'COLLATE latin1_bin'
+
+query CREATE DATABASE
+attrs CHARACTER SET DEFAULT COLLATE uca1400_ai_ci COLLATE utf8mb4_bin
+result ERROR: Conflicting declarations: 'COLLATE uca1400_ai_ci' and 'COLLATE utf8mb4_bin'
+
+query CREATE DATABASE
+attrs CHARACTER SET latin1 COLLATE uca1400_ai_ci COLLATE utf8mb4_bin
+result ERROR: COLLATION 'uca1400_ai_ci' is not valid for CHARACTER SET 'latin1'
+
+query CREATE DATABASE
+attrs CHARACTER SET utf8mb4 COLLATE uca1400_ai_ci COLLATE utf8mb4_bin
+result ERROR: Conflicting declarations: 'COLLATE utf8mb4_uca1400_ai_ci' and 'COLLATE utf8mb4_bin'
+
+query CREATE DATABASE
+attrs COLLATE DEFAULT COLLATE uca1400_ai_ci COLLATE utf8mb4_bin
+result ERROR: Conflicting declarations: 'COLLATE DEFAULT' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs COLLATE utf8mb4_bin COLLATE uca1400_ai_ci COLLATE utf8mb4_bin
+result ERROR: Conflicting declarations: 'COLLATE utf8mb4_bin' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs COLLATE latin1_swedish_ci COLLATE uca1400_ai_ci COLLATE utf8mb4_bin
+result ERROR: Conflicting declarations: 'COLLATE latin1_swedish_ci' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs COLLATE latin1_bin COLLATE uca1400_ai_ci COLLATE utf8mb4_bin
+result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci COLLATE uca1400_ai_ci COLLATE utf8mb4_bin
+result ERROR: Conflicting declarations: 'COLLATE uca1400_ai_ci' and 'COLLATE utf8mb4_bin'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci COLLATE uca1400_ai_ci COLLATE utf8mb4_bin
+result ERROR: Conflicting declarations: 'COLLATE uca1400_as_ci' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs CHARACTER SET DEFAULT COLLATE uca1400_as_ci COLLATE utf8mb4_bin
+result ERROR: Conflicting declarations: 'COLLATE uca1400_as_ci' and 'COLLATE utf8mb4_bin'
+
+query CREATE DATABASE
+attrs CHARACTER SET latin1 COLLATE uca1400_as_ci COLLATE utf8mb4_bin
+result ERROR: COLLATION 'uca1400_as_ci' is not valid for CHARACTER SET 'latin1'
+
+query CREATE DATABASE
+attrs CHARACTER SET utf8mb4 COLLATE uca1400_as_ci COLLATE utf8mb4_bin
+result ERROR: Conflicting declarations: 'COLLATE utf8mb4_uca1400_as_ci' and 'COLLATE utf8mb4_bin'
+
+query CREATE DATABASE
+attrs COLLATE DEFAULT COLLATE uca1400_as_ci COLLATE utf8mb4_bin
+result ERROR: Conflicting declarations: 'COLLATE DEFAULT' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs COLLATE utf8mb4_bin COLLATE uca1400_as_ci COLLATE utf8mb4_bin
+result ERROR: Conflicting declarations: 'COLLATE utf8mb4_bin' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs COLLATE latin1_swedish_ci COLLATE uca1400_as_ci COLLATE utf8mb4_bin
+result ERROR: Conflicting declarations: 'COLLATE latin1_swedish_ci' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs COLLATE latin1_bin COLLATE uca1400_as_ci COLLATE utf8mb4_bin
+result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci COLLATE uca1400_as_ci COLLATE utf8mb4_bin
+result ERROR: Conflicting declarations: 'COLLATE uca1400_ai_ci' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci COLLATE uca1400_as_ci COLLATE utf8mb4_bin
+result ERROR: Conflicting declarations: 'COLLATE uca1400_as_ci' and 'COLLATE utf8mb4_bin'
+
+query CREATE DATABASE
attrs CHARACTER SET DEFAULT CHARACTER SET DEFAULT COLLATE latin1_swedish_ci
result ERROR: COLLATION 'latin1_swedish_ci' is not valid for CHARACTER SET 'utf8mb4'
@@ -1205,6 +1903,14 @@ attrs COLLATE latin1_bin CHARACTER SET DEFAULT COLLATE latin1_swedish_ci
result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE latin1_swedish_ci'
query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci CHARACTER SET DEFAULT COLLATE latin1_swedish_ci
+result ERROR: Conflicting declarations: 'COLLATE uca1400_ai_ci' and 'COLLATE latin1_swedish_ci'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci CHARACTER SET DEFAULT COLLATE latin1_swedish_ci
+result ERROR: Conflicting declarations: 'COLLATE uca1400_as_ci' and 'COLLATE latin1_swedish_ci'
+
+query CREATE DATABASE
attrs CHARACTER SET DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci
result ERROR: Conflicting declarations: 'CHARACTER SET DEFAULT (utf8mb4)' and 'CHARACTER SET latin1'
@@ -1221,6 +1927,14 @@ attrs COLLATE latin1_bin CHARACTER SET latin1 COLLATE latin1_swedish_ci
result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE latin1_swedish_ci'
query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci CHARACTER SET latin1 COLLATE latin1_swedish_ci
+result ERROR: COLLATION 'uca1400_ai_ci' is not valid for CHARACTER SET 'latin1'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci CHARACTER SET latin1 COLLATE latin1_swedish_ci
+result ERROR: COLLATION 'uca1400_as_ci' is not valid for CHARACTER SET 'latin1'
+
+query CREATE DATABASE
attrs CHARACTER SET DEFAULT CHARACTER SET utf8mb4 COLLATE latin1_swedish_ci
result ERROR: COLLATION 'latin1_swedish_ci' is not valid for CHARACTER SET 'utf8mb4'
@@ -1249,6 +1963,14 @@ attrs COLLATE latin1_bin CHARACTER SET utf8mb4 COLLATE latin1_swedish_ci
result ERROR: COLLATION 'latin1_bin' is not valid for CHARACTER SET 'utf8mb4'
query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci CHARACTER SET utf8mb4 COLLATE latin1_swedish_ci
+result ERROR: Conflicting declarations: 'COLLATE utf8mb4_uca1400_ai_ci' and 'COLLATE latin1_swedish_ci'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci CHARACTER SET utf8mb4 COLLATE latin1_swedish_ci
+result ERROR: Conflicting declarations: 'COLLATE utf8mb4_uca1400_as_ci' and 'COLLATE latin1_swedish_ci'
+
+query CREATE DATABASE
attrs CHARACTER SET DEFAULT COLLATE DEFAULT COLLATE latin1_swedish_ci
result ERROR: COLLATION 'latin1_swedish_ci' is not valid for CHARACTER SET 'utf8mb4'
@@ -1265,6 +1987,14 @@ attrs COLLATE latin1_bin COLLATE DEFAULT COLLATE latin1_swedish_ci
result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE DEFAULT'
query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci COLLATE DEFAULT COLLATE latin1_swedish_ci
+result ERROR: Conflicting declarations: 'COLLATE uca1400_ai_ci' and 'COLLATE DEFAULT'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci COLLATE DEFAULT COLLATE latin1_swedish_ci
+result ERROR: Conflicting declarations: 'COLLATE uca1400_as_ci' and 'COLLATE DEFAULT'
+
+query CREATE DATABASE
attrs CHARACTER SET DEFAULT COLLATE utf8mb4_bin COLLATE latin1_swedish_ci
result ERROR: Conflicting declarations: 'COLLATE utf8mb4_bin' and 'COLLATE latin1_swedish_ci'
@@ -1293,6 +2023,14 @@ attrs COLLATE latin1_bin COLLATE utf8mb4_bin COLLATE latin1_swedish_ci
result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE utf8mb4_bin'
query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci COLLATE utf8mb4_bin COLLATE latin1_swedish_ci
+result ERROR: Conflicting declarations: 'COLLATE uca1400_ai_ci' and 'COLLATE utf8mb4_bin'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci COLLATE utf8mb4_bin COLLATE latin1_swedish_ci
+result ERROR: Conflicting declarations: 'COLLATE uca1400_as_ci' and 'COLLATE utf8mb4_bin'
+
+query CREATE DATABASE
attrs CHARACTER SET DEFAULT COLLATE latin1_swedish_ci COLLATE latin1_swedish_ci
result ERROR: COLLATION 'latin1_swedish_ci' is not valid for CHARACTER SET 'utf8mb4'
@@ -1309,6 +2047,14 @@ attrs COLLATE latin1_bin COLLATE latin1_swedish_ci COLLATE latin1_swedish_ci
result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE latin1_swedish_ci'
query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci COLLATE latin1_swedish_ci COLLATE latin1_swedish_ci
+result ERROR: Conflicting declarations: 'COLLATE uca1400_ai_ci' and 'COLLATE latin1_swedish_ci'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci COLLATE latin1_swedish_ci COLLATE latin1_swedish_ci
+result ERROR: Conflicting declarations: 'COLLATE uca1400_as_ci' and 'COLLATE latin1_swedish_ci'
+
+query CREATE DATABASE
attrs CHARACTER SET DEFAULT COLLATE latin1_bin COLLATE latin1_swedish_ci
result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE latin1_swedish_ci'
@@ -1337,6 +2083,86 @@ attrs COLLATE latin1_bin COLLATE latin1_bin COLLATE latin1_swedish_ci
result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE latin1_swedish_ci'
query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci COLLATE latin1_bin COLLATE latin1_swedish_ci
+result ERROR: Conflicting declarations: 'COLLATE uca1400_ai_ci' and 'COLLATE latin1_bin'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci COLLATE latin1_bin COLLATE latin1_swedish_ci
+result ERROR: Conflicting declarations: 'COLLATE uca1400_as_ci' and 'COLLATE latin1_bin'
+
+query CREATE DATABASE
+attrs CHARACTER SET DEFAULT COLLATE uca1400_ai_ci COLLATE latin1_swedish_ci
+result ERROR: Conflicting declarations: 'COLLATE uca1400_ai_ci' and 'COLLATE latin1_swedish_ci'
+
+query CREATE DATABASE
+attrs CHARACTER SET latin1 COLLATE uca1400_ai_ci COLLATE latin1_swedish_ci
+result ERROR: COLLATION 'uca1400_ai_ci' is not valid for CHARACTER SET 'latin1'
+
+query CREATE DATABASE
+attrs CHARACTER SET utf8mb4 COLLATE uca1400_ai_ci COLLATE latin1_swedish_ci
+result ERROR: Conflicting declarations: 'COLLATE utf8mb4_uca1400_ai_ci' and 'COLLATE latin1_swedish_ci'
+
+query CREATE DATABASE
+attrs COLLATE DEFAULT COLLATE uca1400_ai_ci COLLATE latin1_swedish_ci
+result ERROR: Conflicting declarations: 'COLLATE DEFAULT' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs COLLATE utf8mb4_bin COLLATE uca1400_ai_ci COLLATE latin1_swedish_ci
+result ERROR: Conflicting declarations: 'COLLATE utf8mb4_bin' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs COLLATE latin1_swedish_ci COLLATE uca1400_ai_ci COLLATE latin1_swedish_ci
+result ERROR: Conflicting declarations: 'COLLATE latin1_swedish_ci' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs COLLATE latin1_bin COLLATE uca1400_ai_ci COLLATE latin1_swedish_ci
+result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci COLLATE uca1400_ai_ci COLLATE latin1_swedish_ci
+result ERROR: Conflicting declarations: 'COLLATE uca1400_ai_ci' and 'COLLATE latin1_swedish_ci'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci COLLATE uca1400_ai_ci COLLATE latin1_swedish_ci
+result ERROR: Conflicting declarations: 'COLLATE uca1400_as_ci' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs CHARACTER SET DEFAULT COLLATE uca1400_as_ci COLLATE latin1_swedish_ci
+result ERROR: Conflicting declarations: 'COLLATE uca1400_as_ci' and 'COLLATE latin1_swedish_ci'
+
+query CREATE DATABASE
+attrs CHARACTER SET latin1 COLLATE uca1400_as_ci COLLATE latin1_swedish_ci
+result ERROR: COLLATION 'uca1400_as_ci' is not valid for CHARACTER SET 'latin1'
+
+query CREATE DATABASE
+attrs CHARACTER SET utf8mb4 COLLATE uca1400_as_ci COLLATE latin1_swedish_ci
+result ERROR: Conflicting declarations: 'COLLATE utf8mb4_uca1400_as_ci' and 'COLLATE latin1_swedish_ci'
+
+query CREATE DATABASE
+attrs COLLATE DEFAULT COLLATE uca1400_as_ci COLLATE latin1_swedish_ci
+result ERROR: Conflicting declarations: 'COLLATE DEFAULT' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs COLLATE utf8mb4_bin COLLATE uca1400_as_ci COLLATE latin1_swedish_ci
+result ERROR: Conflicting declarations: 'COLLATE utf8mb4_bin' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs COLLATE latin1_swedish_ci COLLATE uca1400_as_ci COLLATE latin1_swedish_ci
+result ERROR: Conflicting declarations: 'COLLATE latin1_swedish_ci' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs COLLATE latin1_bin COLLATE uca1400_as_ci COLLATE latin1_swedish_ci
+result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci COLLATE uca1400_as_ci COLLATE latin1_swedish_ci
+result ERROR: Conflicting declarations: 'COLLATE uca1400_ai_ci' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci COLLATE uca1400_as_ci COLLATE latin1_swedish_ci
+result ERROR: Conflicting declarations: 'COLLATE uca1400_as_ci' and 'COLLATE latin1_swedish_ci'
+
+query CREATE DATABASE
attrs CHARACTER SET DEFAULT CHARACTER SET DEFAULT COLLATE latin1_bin
result ERROR: COLLATION 'latin1_bin' is not valid for CHARACTER SET 'utf8mb4'
@@ -1365,6 +2191,14 @@ attrs COLLATE latin1_bin CHARACTER SET DEFAULT COLLATE latin1_bin
result ERROR: COLLATION 'latin1_bin' is not valid for CHARACTER SET 'utf8mb4'
query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci CHARACTER SET DEFAULT COLLATE latin1_bin
+result ERROR: Conflicting declarations: 'COLLATE uca1400_ai_ci' and 'COLLATE latin1_bin'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci CHARACTER SET DEFAULT COLLATE latin1_bin
+result ERROR: Conflicting declarations: 'COLLATE uca1400_as_ci' and 'COLLATE latin1_bin'
+
+query CREATE DATABASE
attrs CHARACTER SET DEFAULT CHARACTER SET latin1 COLLATE latin1_bin
result ERROR: Conflicting declarations: 'CHARACTER SET DEFAULT (utf8mb4)' and 'CHARACTER SET latin1'
@@ -1385,6 +2219,14 @@ attrs COLLATE latin1_swedish_ci CHARACTER SET latin1 COLLATE latin1_bin
result ERROR: Conflicting declarations: 'COLLATE latin1_swedish_ci' and 'COLLATE latin1_bin'
query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci CHARACTER SET latin1 COLLATE latin1_bin
+result ERROR: COLLATION 'uca1400_ai_ci' is not valid for CHARACTER SET 'latin1'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci CHARACTER SET latin1 COLLATE latin1_bin
+result ERROR: COLLATION 'uca1400_as_ci' is not valid for CHARACTER SET 'latin1'
+
+query CREATE DATABASE
attrs CHARACTER SET DEFAULT CHARACTER SET utf8mb4 COLLATE latin1_bin
result ERROR: COLLATION 'latin1_bin' is not valid for CHARACTER SET 'utf8mb4'
@@ -1413,6 +2255,14 @@ attrs COLLATE latin1_bin CHARACTER SET utf8mb4 COLLATE latin1_bin
result ERROR: COLLATION 'latin1_bin' is not valid for CHARACTER SET 'utf8mb4'
query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci CHARACTER SET utf8mb4 COLLATE latin1_bin
+result ERROR: Conflicting declarations: 'COLLATE utf8mb4_uca1400_ai_ci' and 'COLLATE latin1_bin'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci CHARACTER SET utf8mb4 COLLATE latin1_bin
+result ERROR: Conflicting declarations: 'COLLATE utf8mb4_uca1400_as_ci' and 'COLLATE latin1_bin'
+
+query CREATE DATABASE
attrs CHARACTER SET DEFAULT COLLATE DEFAULT COLLATE latin1_bin
result ERROR: Conflicting declarations: 'COLLATE DEFAULT' and 'COLLATE latin1_bin'
@@ -1441,6 +2291,14 @@ attrs COLLATE latin1_bin COLLATE DEFAULT COLLATE latin1_bin
result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE DEFAULT'
query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci COLLATE DEFAULT COLLATE latin1_bin
+result ERROR: Conflicting declarations: 'COLLATE uca1400_ai_ci' and 'COLLATE DEFAULT'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci COLLATE DEFAULT COLLATE latin1_bin
+result ERROR: Conflicting declarations: 'COLLATE uca1400_as_ci' and 'COLLATE DEFAULT'
+
+query CREATE DATABASE
attrs CHARACTER SET DEFAULT COLLATE utf8mb4_bin COLLATE latin1_bin
result ERROR: Conflicting declarations: 'COLLATE utf8mb4_bin' and 'COLLATE latin1_bin'
@@ -1469,6 +2327,14 @@ attrs COLLATE latin1_bin COLLATE utf8mb4_bin COLLATE latin1_bin
result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE utf8mb4_bin'
query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci COLLATE utf8mb4_bin COLLATE latin1_bin
+result ERROR: Conflicting declarations: 'COLLATE uca1400_ai_ci' and 'COLLATE utf8mb4_bin'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci COLLATE utf8mb4_bin COLLATE latin1_bin
+result ERROR: Conflicting declarations: 'COLLATE uca1400_as_ci' and 'COLLATE utf8mb4_bin'
+
+query CREATE DATABASE
attrs CHARACTER SET DEFAULT COLLATE latin1_swedish_ci COLLATE latin1_bin
result ERROR: Conflicting declarations: 'COLLATE latin1_swedish_ci' and 'COLLATE latin1_bin'
@@ -1497,6 +2363,14 @@ attrs COLLATE latin1_bin COLLATE latin1_swedish_ci COLLATE latin1_bin
result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE latin1_swedish_ci'
query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci COLLATE latin1_swedish_ci COLLATE latin1_bin
+result ERROR: Conflicting declarations: 'COLLATE uca1400_ai_ci' and 'COLLATE latin1_swedish_ci'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci COLLATE latin1_swedish_ci COLLATE latin1_bin
+result ERROR: Conflicting declarations: 'COLLATE uca1400_as_ci' and 'COLLATE latin1_swedish_ci'
+
+query CREATE DATABASE
attrs CHARACTER SET DEFAULT COLLATE latin1_bin COLLATE latin1_bin
result ERROR: COLLATION 'latin1_bin' is not valid for CHARACTER SET 'utf8mb4'
@@ -1516,7 +2390,663 @@ query CREATE DATABASE
attrs COLLATE latin1_swedish_ci COLLATE latin1_bin COLLATE latin1_bin
result ERROR: Conflicting declarations: 'COLLATE latin1_swedish_ci' and 'COLLATE latin1_bin'
-OK 79
+query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci COLLATE latin1_bin COLLATE latin1_bin
+result ERROR: Conflicting declarations: 'COLLATE uca1400_ai_ci' and 'COLLATE latin1_bin'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci COLLATE latin1_bin COLLATE latin1_bin
+result ERROR: Conflicting declarations: 'COLLATE uca1400_as_ci' and 'COLLATE latin1_bin'
+
+query CREATE DATABASE
+attrs CHARACTER SET DEFAULT COLLATE uca1400_ai_ci COLLATE latin1_bin
+result ERROR: Conflicting declarations: 'COLLATE uca1400_ai_ci' and 'COLLATE latin1_bin'
+
+query CREATE DATABASE
+attrs CHARACTER SET latin1 COLLATE uca1400_ai_ci COLLATE latin1_bin
+result ERROR: COLLATION 'uca1400_ai_ci' is not valid for CHARACTER SET 'latin1'
+
+query CREATE DATABASE
+attrs CHARACTER SET utf8mb4 COLLATE uca1400_ai_ci COLLATE latin1_bin
+result ERROR: Conflicting declarations: 'COLLATE utf8mb4_uca1400_ai_ci' and 'COLLATE latin1_bin'
+
+query CREATE DATABASE
+attrs COLLATE DEFAULT COLLATE uca1400_ai_ci COLLATE latin1_bin
+result ERROR: Conflicting declarations: 'COLLATE DEFAULT' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs COLLATE utf8mb4_bin COLLATE uca1400_ai_ci COLLATE latin1_bin
+result ERROR: Conflicting declarations: 'COLLATE utf8mb4_bin' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs COLLATE latin1_swedish_ci COLLATE uca1400_ai_ci COLLATE latin1_bin
+result ERROR: Conflicting declarations: 'COLLATE latin1_swedish_ci' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs COLLATE latin1_bin COLLATE uca1400_ai_ci COLLATE latin1_bin
+result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci COLLATE uca1400_ai_ci COLLATE latin1_bin
+result ERROR: Conflicting declarations: 'COLLATE uca1400_ai_ci' and 'COLLATE latin1_bin'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci COLLATE uca1400_ai_ci COLLATE latin1_bin
+result ERROR: Conflicting declarations: 'COLLATE uca1400_as_ci' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs CHARACTER SET DEFAULT COLLATE uca1400_as_ci COLLATE latin1_bin
+result ERROR: Conflicting declarations: 'COLLATE uca1400_as_ci' and 'COLLATE latin1_bin'
+
+query CREATE DATABASE
+attrs CHARACTER SET latin1 COLLATE uca1400_as_ci COLLATE latin1_bin
+result ERROR: COLLATION 'uca1400_as_ci' is not valid for CHARACTER SET 'latin1'
+
+query CREATE DATABASE
+attrs CHARACTER SET utf8mb4 COLLATE uca1400_as_ci COLLATE latin1_bin
+result ERROR: Conflicting declarations: 'COLLATE utf8mb4_uca1400_as_ci' and 'COLLATE latin1_bin'
+
+query CREATE DATABASE
+attrs COLLATE DEFAULT COLLATE uca1400_as_ci COLLATE latin1_bin
+result ERROR: Conflicting declarations: 'COLLATE DEFAULT' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs COLLATE utf8mb4_bin COLLATE uca1400_as_ci COLLATE latin1_bin
+result ERROR: Conflicting declarations: 'COLLATE utf8mb4_bin' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs COLLATE latin1_swedish_ci COLLATE uca1400_as_ci COLLATE latin1_bin
+result ERROR: Conflicting declarations: 'COLLATE latin1_swedish_ci' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs COLLATE latin1_bin COLLATE uca1400_as_ci COLLATE latin1_bin
+result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci COLLATE uca1400_as_ci COLLATE latin1_bin
+result ERROR: Conflicting declarations: 'COLLATE uca1400_ai_ci' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci COLLATE uca1400_as_ci COLLATE latin1_bin
+result ERROR: Conflicting declarations: 'COLLATE uca1400_as_ci' and 'COLLATE latin1_bin'
+
+query CREATE DATABASE
+attrs CHARACTER SET latin1 CHARACTER SET DEFAULT COLLATE uca1400_ai_ci
+result ERROR: COLLATION 'uca1400_ai_ci' is not valid for CHARACTER SET 'latin1'
+
+query CREATE DATABASE
+attrs COLLATE DEFAULT CHARACTER SET DEFAULT COLLATE uca1400_ai_ci
+result ERROR: Conflicting declarations: 'COLLATE DEFAULT' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs COLLATE utf8mb4_bin CHARACTER SET DEFAULT COLLATE uca1400_ai_ci
+result ERROR: Conflicting declarations: 'COLLATE utf8mb4_bin' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs COLLATE latin1_swedish_ci CHARACTER SET DEFAULT COLLATE uca1400_ai_ci
+result ERROR: Conflicting declarations: 'COLLATE latin1_swedish_ci' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs COLLATE latin1_bin CHARACTER SET DEFAULT COLLATE uca1400_ai_ci
+result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci CHARACTER SET DEFAULT COLLATE uca1400_ai_ci
+result ERROR: Conflicting declarations: 'COLLATE uca1400_as_ci' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs CHARACTER SET DEFAULT CHARACTER SET latin1 COLLATE uca1400_ai_ci
+result ERROR: COLLATION 'uca1400_ai_ci' is not valid for CHARACTER SET 'latin1'
+
+query CREATE DATABASE
+attrs CHARACTER SET latin1 CHARACTER SET latin1 COLLATE uca1400_ai_ci
+result ERROR: COLLATION 'uca1400_ai_ci' is not valid for CHARACTER SET 'latin1'
+
+query CREATE DATABASE
+attrs CHARACTER SET utf8mb4 CHARACTER SET latin1 COLLATE uca1400_ai_ci
+result ERROR: Conflicting declarations: 'CHARACTER SET utf8mb4' and 'CHARACTER SET latin1'
+
+query CREATE DATABASE
+attrs COLLATE DEFAULT CHARACTER SET latin1 COLLATE uca1400_ai_ci
+result ERROR: Conflicting declarations: 'COLLATE latin1_swedish_ci' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs COLLATE utf8mb4_bin CHARACTER SET latin1 COLLATE uca1400_ai_ci
+result ERROR: COLLATION 'utf8mb4_bin' is not valid for CHARACTER SET 'latin1'
+
+query CREATE DATABASE
+attrs COLLATE latin1_swedish_ci CHARACTER SET latin1 COLLATE uca1400_ai_ci
+result ERROR: Conflicting declarations: 'COLLATE latin1_swedish_ci' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs COLLATE latin1_bin CHARACTER SET latin1 COLLATE uca1400_ai_ci
+result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci CHARACTER SET latin1 COLLATE uca1400_ai_ci
+result ERROR: COLLATION 'uca1400_ai_ci' is not valid for CHARACTER SET 'latin1'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci CHARACTER SET latin1 COLLATE uca1400_ai_ci
+result ERROR: COLLATION 'uca1400_as_ci' is not valid for CHARACTER SET 'latin1'
+
+query CREATE DATABASE
+attrs CHARACTER SET latin1 CHARACTER SET utf8mb4 COLLATE uca1400_ai_ci
+result ERROR: Conflicting declarations: 'CHARACTER SET latin1' and 'CHARACTER SET utf8mb4'
+
+query CREATE DATABASE
+attrs COLLATE DEFAULT CHARACTER SET utf8mb4 COLLATE uca1400_ai_ci
+result ERROR: Conflicting declarations: 'COLLATE utf8mb4_general_ci' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs COLLATE utf8mb4_bin CHARACTER SET utf8mb4 COLLATE uca1400_ai_ci
+result ERROR: Conflicting declarations: 'COLLATE utf8mb4_bin' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs COLLATE latin1_swedish_ci CHARACTER SET utf8mb4 COLLATE uca1400_ai_ci
+result ERROR: COLLATION 'latin1_swedish_ci' is not valid for CHARACTER SET 'utf8mb4'
+
+query CREATE DATABASE
+attrs COLLATE latin1_bin CHARACTER SET utf8mb4 COLLATE uca1400_ai_ci
+result ERROR: COLLATION 'latin1_bin' is not valid for CHARACTER SET 'utf8mb4'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci CHARACTER SET utf8mb4 COLLATE uca1400_ai_ci
+result ERROR: Conflicting declarations: 'COLLATE utf8mb4_uca1400_as_ci' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs CHARACTER SET DEFAULT COLLATE DEFAULT COLLATE uca1400_ai_ci
+result ERROR: Conflicting declarations: 'COLLATE DEFAULT' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs CHARACTER SET latin1 COLLATE DEFAULT COLLATE uca1400_ai_ci
+result ERROR: Conflicting declarations: 'COLLATE latin1_swedish_ci' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs CHARACTER SET utf8mb4 COLLATE DEFAULT COLLATE uca1400_ai_ci
+result ERROR: Conflicting declarations: 'COLLATE utf8mb4_general_ci' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs COLLATE DEFAULT COLLATE DEFAULT COLLATE uca1400_ai_ci
+result ERROR: Conflicting declarations: 'COLLATE DEFAULT' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs COLLATE utf8mb4_bin COLLATE DEFAULT COLLATE uca1400_ai_ci
+result ERROR: Conflicting declarations: 'COLLATE utf8mb4_bin' and 'COLLATE DEFAULT'
+
+query CREATE DATABASE
+attrs COLLATE latin1_swedish_ci COLLATE DEFAULT COLLATE uca1400_ai_ci
+result ERROR: Conflicting declarations: 'COLLATE latin1_swedish_ci' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs COLLATE latin1_bin COLLATE DEFAULT COLLATE uca1400_ai_ci
+result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE DEFAULT'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci COLLATE DEFAULT COLLATE uca1400_ai_ci
+result ERROR: Conflicting declarations: 'COLLATE uca1400_ai_ci' and 'COLLATE DEFAULT'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci COLLATE DEFAULT COLLATE uca1400_ai_ci
+result ERROR: Conflicting declarations: 'COLLATE uca1400_as_ci' and 'COLLATE DEFAULT'
+
+query CREATE DATABASE
+attrs CHARACTER SET DEFAULT COLLATE utf8mb4_bin COLLATE uca1400_ai_ci
+result ERROR: Conflicting declarations: 'COLLATE utf8mb4_bin' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs CHARACTER SET latin1 COLLATE utf8mb4_bin COLLATE uca1400_ai_ci
+result ERROR: COLLATION 'utf8mb4_bin' is not valid for CHARACTER SET 'latin1'
+
+query CREATE DATABASE
+attrs CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COLLATE uca1400_ai_ci
+result ERROR: Conflicting declarations: 'COLLATE utf8mb4_bin' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs COLLATE DEFAULT COLLATE utf8mb4_bin COLLATE uca1400_ai_ci
+result ERROR: Conflicting declarations: 'COLLATE DEFAULT' and 'COLLATE utf8mb4_bin'
+
+query CREATE DATABASE
+attrs COLLATE utf8mb4_bin COLLATE utf8mb4_bin COLLATE uca1400_ai_ci
+result ERROR: Conflicting declarations: 'COLLATE utf8mb4_bin' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs COLLATE latin1_swedish_ci COLLATE utf8mb4_bin COLLATE uca1400_ai_ci
+result ERROR: Conflicting declarations: 'COLLATE latin1_swedish_ci' and 'COLLATE utf8mb4_bin'
+
+query CREATE DATABASE
+attrs COLLATE latin1_bin COLLATE utf8mb4_bin COLLATE uca1400_ai_ci
+result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE utf8mb4_bin'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci COLLATE utf8mb4_bin COLLATE uca1400_ai_ci
+result ERROR: Conflicting declarations: 'COLLATE uca1400_ai_ci' and 'COLLATE utf8mb4_bin'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci COLLATE utf8mb4_bin COLLATE uca1400_ai_ci
+result ERROR: Conflicting declarations: 'COLLATE uca1400_as_ci' and 'COLLATE utf8mb4_bin'
+
+query CREATE DATABASE
+attrs CHARACTER SET DEFAULT COLLATE latin1_swedish_ci COLLATE uca1400_ai_ci
+result ERROR: Conflicting declarations: 'COLLATE latin1_swedish_ci' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs CHARACTER SET latin1 COLLATE latin1_swedish_ci COLLATE uca1400_ai_ci
+result ERROR: Conflicting declarations: 'COLLATE latin1_swedish_ci' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs CHARACTER SET utf8mb4 COLLATE latin1_swedish_ci COLLATE uca1400_ai_ci
+result ERROR: COLLATION 'latin1_swedish_ci' is not valid for CHARACTER SET 'utf8mb4'
+
+query CREATE DATABASE
+attrs COLLATE DEFAULT COLLATE latin1_swedish_ci COLLATE uca1400_ai_ci
+result ERROR: Conflicting declarations: 'COLLATE latin1_swedish_ci' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs COLLATE utf8mb4_bin COLLATE latin1_swedish_ci COLLATE uca1400_ai_ci
+result ERROR: Conflicting declarations: 'COLLATE utf8mb4_bin' and 'COLLATE latin1_swedish_ci'
+
+query CREATE DATABASE
+attrs COLLATE latin1_swedish_ci COLLATE latin1_swedish_ci COLLATE uca1400_ai_ci
+result ERROR: Conflicting declarations: 'COLLATE latin1_swedish_ci' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs COLLATE latin1_bin COLLATE latin1_swedish_ci COLLATE uca1400_ai_ci
+result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE latin1_swedish_ci'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci COLLATE latin1_swedish_ci COLLATE uca1400_ai_ci
+result ERROR: Conflicting declarations: 'COLLATE uca1400_ai_ci' and 'COLLATE latin1_swedish_ci'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci COLLATE latin1_swedish_ci COLLATE uca1400_ai_ci
+result ERROR: Conflicting declarations: 'COLLATE uca1400_as_ci' and 'COLLATE latin1_swedish_ci'
+
+query CREATE DATABASE
+attrs CHARACTER SET DEFAULT COLLATE latin1_bin COLLATE uca1400_ai_ci
+result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs CHARACTER SET latin1 COLLATE latin1_bin COLLATE uca1400_ai_ci
+result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs CHARACTER SET utf8mb4 COLLATE latin1_bin COLLATE uca1400_ai_ci
+result ERROR: COLLATION 'latin1_bin' is not valid for CHARACTER SET 'utf8mb4'
+
+query CREATE DATABASE
+attrs COLLATE DEFAULT COLLATE latin1_bin COLLATE uca1400_ai_ci
+result ERROR: Conflicting declarations: 'COLLATE DEFAULT' and 'COLLATE latin1_bin'
+
+query CREATE DATABASE
+attrs COLLATE utf8mb4_bin COLLATE latin1_bin COLLATE uca1400_ai_ci
+result ERROR: Conflicting declarations: 'COLLATE utf8mb4_bin' and 'COLLATE latin1_bin'
+
+query CREATE DATABASE
+attrs COLLATE latin1_swedish_ci COLLATE latin1_bin COLLATE uca1400_ai_ci
+result ERROR: Conflicting declarations: 'COLLATE latin1_swedish_ci' and 'COLLATE latin1_bin'
+
+query CREATE DATABASE
+attrs COLLATE latin1_bin COLLATE latin1_bin COLLATE uca1400_ai_ci
+result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci COLLATE latin1_bin COLLATE uca1400_ai_ci
+result ERROR: Conflicting declarations: 'COLLATE uca1400_ai_ci' and 'COLLATE latin1_bin'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci COLLATE latin1_bin COLLATE uca1400_ai_ci
+result ERROR: Conflicting declarations: 'COLLATE uca1400_as_ci' and 'COLLATE latin1_bin'
+
+query CREATE DATABASE
+attrs CHARACTER SET latin1 COLLATE uca1400_ai_ci COLLATE uca1400_ai_ci
+result ERROR: COLLATION 'uca1400_ai_ci' is not valid for CHARACTER SET 'latin1'
+
+query CREATE DATABASE
+attrs COLLATE DEFAULT COLLATE uca1400_ai_ci COLLATE uca1400_ai_ci
+result ERROR: Conflicting declarations: 'COLLATE DEFAULT' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs COLLATE utf8mb4_bin COLLATE uca1400_ai_ci COLLATE uca1400_ai_ci
+result ERROR: Conflicting declarations: 'COLLATE utf8mb4_bin' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs COLLATE latin1_swedish_ci COLLATE uca1400_ai_ci COLLATE uca1400_ai_ci
+result ERROR: Conflicting declarations: 'COLLATE latin1_swedish_ci' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs COLLATE latin1_bin COLLATE uca1400_ai_ci COLLATE uca1400_ai_ci
+result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci COLLATE uca1400_ai_ci COLLATE uca1400_ai_ci
+result ERROR: Conflicting declarations: 'COLLATE uca1400_as_ci' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs CHARACTER SET DEFAULT COLLATE uca1400_as_ci COLLATE uca1400_ai_ci
+result ERROR: Conflicting declarations: 'COLLATE uca1400_as_ci' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs CHARACTER SET latin1 COLLATE uca1400_as_ci COLLATE uca1400_ai_ci
+result ERROR: COLLATION 'uca1400_as_ci' is not valid for CHARACTER SET 'latin1'
+
+query CREATE DATABASE
+attrs CHARACTER SET utf8mb4 COLLATE uca1400_as_ci COLLATE uca1400_ai_ci
+result ERROR: Conflicting declarations: 'COLLATE utf8mb4_uca1400_as_ci' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs COLLATE DEFAULT COLLATE uca1400_as_ci COLLATE uca1400_ai_ci
+result ERROR: Conflicting declarations: 'COLLATE DEFAULT' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs COLLATE utf8mb4_bin COLLATE uca1400_as_ci COLLATE uca1400_ai_ci
+result ERROR: Conflicting declarations: 'COLLATE utf8mb4_bin' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs COLLATE latin1_swedish_ci COLLATE uca1400_as_ci COLLATE uca1400_ai_ci
+result ERROR: Conflicting declarations: 'COLLATE latin1_swedish_ci' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs COLLATE latin1_bin COLLATE uca1400_as_ci COLLATE uca1400_ai_ci
+result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci COLLATE uca1400_as_ci COLLATE uca1400_ai_ci
+result ERROR: Conflicting declarations: 'COLLATE uca1400_ai_ci' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci COLLATE uca1400_as_ci COLLATE uca1400_ai_ci
+result ERROR: Conflicting declarations: 'COLLATE uca1400_as_ci' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs CHARACTER SET latin1 CHARACTER SET DEFAULT COLLATE uca1400_as_ci
+result ERROR: COLLATION 'uca1400_as_ci' is not valid for CHARACTER SET 'latin1'
+
+query CREATE DATABASE
+attrs COLLATE DEFAULT CHARACTER SET DEFAULT COLLATE uca1400_as_ci
+result ERROR: Conflicting declarations: 'COLLATE DEFAULT' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs COLLATE utf8mb4_bin CHARACTER SET DEFAULT COLLATE uca1400_as_ci
+result ERROR: Conflicting declarations: 'COLLATE utf8mb4_bin' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs COLLATE latin1_swedish_ci CHARACTER SET DEFAULT COLLATE uca1400_as_ci
+result ERROR: Conflicting declarations: 'COLLATE latin1_swedish_ci' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs COLLATE latin1_bin CHARACTER SET DEFAULT COLLATE uca1400_as_ci
+result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci CHARACTER SET DEFAULT COLLATE uca1400_as_ci
+result ERROR: Conflicting declarations: 'COLLATE uca1400_ai_ci' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs CHARACTER SET DEFAULT CHARACTER SET latin1 COLLATE uca1400_as_ci
+result ERROR: COLLATION 'uca1400_as_ci' is not valid for CHARACTER SET 'latin1'
+
+query CREATE DATABASE
+attrs CHARACTER SET latin1 CHARACTER SET latin1 COLLATE uca1400_as_ci
+result ERROR: COLLATION 'uca1400_as_ci' is not valid for CHARACTER SET 'latin1'
+
+query CREATE DATABASE
+attrs CHARACTER SET utf8mb4 CHARACTER SET latin1 COLLATE uca1400_as_ci
+result ERROR: Conflicting declarations: 'CHARACTER SET utf8mb4' and 'CHARACTER SET latin1'
+
+query CREATE DATABASE
+attrs COLLATE DEFAULT CHARACTER SET latin1 COLLATE uca1400_as_ci
+result ERROR: Conflicting declarations: 'COLLATE latin1_swedish_ci' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs COLLATE utf8mb4_bin CHARACTER SET latin1 COLLATE uca1400_as_ci
+result ERROR: COLLATION 'utf8mb4_bin' is not valid for CHARACTER SET 'latin1'
+
+query CREATE DATABASE
+attrs COLLATE latin1_swedish_ci CHARACTER SET latin1 COLLATE uca1400_as_ci
+result ERROR: Conflicting declarations: 'COLLATE latin1_swedish_ci' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs COLLATE latin1_bin CHARACTER SET latin1 COLLATE uca1400_as_ci
+result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci CHARACTER SET latin1 COLLATE uca1400_as_ci
+result ERROR: COLLATION 'uca1400_ai_ci' is not valid for CHARACTER SET 'latin1'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci CHARACTER SET latin1 COLLATE uca1400_as_ci
+result ERROR: COLLATION 'uca1400_as_ci' is not valid for CHARACTER SET 'latin1'
+
+query CREATE DATABASE
+attrs CHARACTER SET latin1 CHARACTER SET utf8mb4 COLLATE uca1400_as_ci
+result ERROR: Conflicting declarations: 'CHARACTER SET latin1' and 'CHARACTER SET utf8mb4'
+
+query CREATE DATABASE
+attrs COLLATE DEFAULT CHARACTER SET utf8mb4 COLLATE uca1400_as_ci
+result ERROR: Conflicting declarations: 'COLLATE utf8mb4_general_ci' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs COLLATE utf8mb4_bin CHARACTER SET utf8mb4 COLLATE uca1400_as_ci
+result ERROR: Conflicting declarations: 'COLLATE utf8mb4_bin' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs COLLATE latin1_swedish_ci CHARACTER SET utf8mb4 COLLATE uca1400_as_ci
+result ERROR: COLLATION 'latin1_swedish_ci' is not valid for CHARACTER SET 'utf8mb4'
+
+query CREATE DATABASE
+attrs COLLATE latin1_bin CHARACTER SET utf8mb4 COLLATE uca1400_as_ci
+result ERROR: COLLATION 'latin1_bin' is not valid for CHARACTER SET 'utf8mb4'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci CHARACTER SET utf8mb4 COLLATE uca1400_as_ci
+result ERROR: Conflicting declarations: 'COLLATE utf8mb4_uca1400_ai_ci' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs CHARACTER SET DEFAULT COLLATE DEFAULT COLLATE uca1400_as_ci
+result ERROR: Conflicting declarations: 'COLLATE DEFAULT' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs CHARACTER SET latin1 COLLATE DEFAULT COLLATE uca1400_as_ci
+result ERROR: Conflicting declarations: 'COLLATE latin1_swedish_ci' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs CHARACTER SET utf8mb4 COLLATE DEFAULT COLLATE uca1400_as_ci
+result ERROR: Conflicting declarations: 'COLLATE utf8mb4_general_ci' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs COLLATE DEFAULT COLLATE DEFAULT COLLATE uca1400_as_ci
+result ERROR: Conflicting declarations: 'COLLATE DEFAULT' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs COLLATE utf8mb4_bin COLLATE DEFAULT COLLATE uca1400_as_ci
+result ERROR: Conflicting declarations: 'COLLATE utf8mb4_bin' and 'COLLATE DEFAULT'
+
+query CREATE DATABASE
+attrs COLLATE latin1_swedish_ci COLLATE DEFAULT COLLATE uca1400_as_ci
+result ERROR: Conflicting declarations: 'COLLATE latin1_swedish_ci' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs COLLATE latin1_bin COLLATE DEFAULT COLLATE uca1400_as_ci
+result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE DEFAULT'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci COLLATE DEFAULT COLLATE uca1400_as_ci
+result ERROR: Conflicting declarations: 'COLLATE uca1400_ai_ci' and 'COLLATE DEFAULT'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci COLLATE DEFAULT COLLATE uca1400_as_ci
+result ERROR: Conflicting declarations: 'COLLATE uca1400_as_ci' and 'COLLATE DEFAULT'
+
+query CREATE DATABASE
+attrs CHARACTER SET DEFAULT COLLATE utf8mb4_bin COLLATE uca1400_as_ci
+result ERROR: Conflicting declarations: 'COLLATE utf8mb4_bin' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs CHARACTER SET latin1 COLLATE utf8mb4_bin COLLATE uca1400_as_ci
+result ERROR: COLLATION 'utf8mb4_bin' is not valid for CHARACTER SET 'latin1'
+
+query CREATE DATABASE
+attrs CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COLLATE uca1400_as_ci
+result ERROR: Conflicting declarations: 'COLLATE utf8mb4_bin' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs COLLATE DEFAULT COLLATE utf8mb4_bin COLLATE uca1400_as_ci
+result ERROR: Conflicting declarations: 'COLLATE DEFAULT' and 'COLLATE utf8mb4_bin'
+
+query CREATE DATABASE
+attrs COLLATE utf8mb4_bin COLLATE utf8mb4_bin COLLATE uca1400_as_ci
+result ERROR: Conflicting declarations: 'COLLATE utf8mb4_bin' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs COLLATE latin1_swedish_ci COLLATE utf8mb4_bin COLLATE uca1400_as_ci
+result ERROR: Conflicting declarations: 'COLLATE latin1_swedish_ci' and 'COLLATE utf8mb4_bin'
+
+query CREATE DATABASE
+attrs COLLATE latin1_bin COLLATE utf8mb4_bin COLLATE uca1400_as_ci
+result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE utf8mb4_bin'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci COLLATE utf8mb4_bin COLLATE uca1400_as_ci
+result ERROR: Conflicting declarations: 'COLLATE uca1400_ai_ci' and 'COLLATE utf8mb4_bin'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci COLLATE utf8mb4_bin COLLATE uca1400_as_ci
+result ERROR: Conflicting declarations: 'COLLATE uca1400_as_ci' and 'COLLATE utf8mb4_bin'
+
+query CREATE DATABASE
+attrs CHARACTER SET DEFAULT COLLATE latin1_swedish_ci COLLATE uca1400_as_ci
+result ERROR: Conflicting declarations: 'COLLATE latin1_swedish_ci' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs CHARACTER SET latin1 COLLATE latin1_swedish_ci COLLATE uca1400_as_ci
+result ERROR: Conflicting declarations: 'COLLATE latin1_swedish_ci' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs CHARACTER SET utf8mb4 COLLATE latin1_swedish_ci COLLATE uca1400_as_ci
+result ERROR: COLLATION 'latin1_swedish_ci' is not valid for CHARACTER SET 'utf8mb4'
+
+query CREATE DATABASE
+attrs COLLATE DEFAULT COLLATE latin1_swedish_ci COLLATE uca1400_as_ci
+result ERROR: Conflicting declarations: 'COLLATE latin1_swedish_ci' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs COLLATE utf8mb4_bin COLLATE latin1_swedish_ci COLLATE uca1400_as_ci
+result ERROR: Conflicting declarations: 'COLLATE utf8mb4_bin' and 'COLLATE latin1_swedish_ci'
+
+query CREATE DATABASE
+attrs COLLATE latin1_swedish_ci COLLATE latin1_swedish_ci COLLATE uca1400_as_ci
+result ERROR: Conflicting declarations: 'COLLATE latin1_swedish_ci' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs COLLATE latin1_bin COLLATE latin1_swedish_ci COLLATE uca1400_as_ci
+result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE latin1_swedish_ci'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci COLLATE latin1_swedish_ci COLLATE uca1400_as_ci
+result ERROR: Conflicting declarations: 'COLLATE uca1400_ai_ci' and 'COLLATE latin1_swedish_ci'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci COLLATE latin1_swedish_ci COLLATE uca1400_as_ci
+result ERROR: Conflicting declarations: 'COLLATE uca1400_as_ci' and 'COLLATE latin1_swedish_ci'
+
+query CREATE DATABASE
+attrs CHARACTER SET DEFAULT COLLATE latin1_bin COLLATE uca1400_as_ci
+result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs CHARACTER SET latin1 COLLATE latin1_bin COLLATE uca1400_as_ci
+result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs CHARACTER SET utf8mb4 COLLATE latin1_bin COLLATE uca1400_as_ci
+result ERROR: COLLATION 'latin1_bin' is not valid for CHARACTER SET 'utf8mb4'
+
+query CREATE DATABASE
+attrs COLLATE DEFAULT COLLATE latin1_bin COLLATE uca1400_as_ci
+result ERROR: Conflicting declarations: 'COLLATE DEFAULT' and 'COLLATE latin1_bin'
+
+query CREATE DATABASE
+attrs COLLATE utf8mb4_bin COLLATE latin1_bin COLLATE uca1400_as_ci
+result ERROR: Conflicting declarations: 'COLLATE utf8mb4_bin' and 'COLLATE latin1_bin'
+
+query CREATE DATABASE
+attrs COLLATE latin1_swedish_ci COLLATE latin1_bin COLLATE uca1400_as_ci
+result ERROR: Conflicting declarations: 'COLLATE latin1_swedish_ci' and 'COLLATE latin1_bin'
+
+query CREATE DATABASE
+attrs COLLATE latin1_bin COLLATE latin1_bin COLLATE uca1400_as_ci
+result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci COLLATE latin1_bin COLLATE uca1400_as_ci
+result ERROR: Conflicting declarations: 'COLLATE uca1400_ai_ci' and 'COLLATE latin1_bin'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci COLLATE latin1_bin COLLATE uca1400_as_ci
+result ERROR: Conflicting declarations: 'COLLATE uca1400_as_ci' and 'COLLATE latin1_bin'
+
+query CREATE DATABASE
+attrs CHARACTER SET DEFAULT COLLATE uca1400_ai_ci COLLATE uca1400_as_ci
+result ERROR: Conflicting declarations: 'COLLATE uca1400_ai_ci' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs CHARACTER SET latin1 COLLATE uca1400_ai_ci COLLATE uca1400_as_ci
+result ERROR: COLLATION 'uca1400_ai_ci' is not valid for CHARACTER SET 'latin1'
+
+query CREATE DATABASE
+attrs CHARACTER SET utf8mb4 COLLATE uca1400_ai_ci COLLATE uca1400_as_ci
+result ERROR: Conflicting declarations: 'COLLATE utf8mb4_uca1400_ai_ci' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs COLLATE DEFAULT COLLATE uca1400_ai_ci COLLATE uca1400_as_ci
+result ERROR: Conflicting declarations: 'COLLATE DEFAULT' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs COLLATE utf8mb4_bin COLLATE uca1400_ai_ci COLLATE uca1400_as_ci
+result ERROR: Conflicting declarations: 'COLLATE utf8mb4_bin' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs COLLATE latin1_swedish_ci COLLATE uca1400_ai_ci COLLATE uca1400_as_ci
+result ERROR: Conflicting declarations: 'COLLATE latin1_swedish_ci' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs COLLATE latin1_bin COLLATE uca1400_ai_ci COLLATE uca1400_as_ci
+result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci COLLATE uca1400_ai_ci COLLATE uca1400_as_ci
+result ERROR: Conflicting declarations: 'COLLATE uca1400_ai_ci' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci COLLATE uca1400_ai_ci COLLATE uca1400_as_ci
+result ERROR: Conflicting declarations: 'COLLATE uca1400_as_ci' and 'COLLATE uca1400_ai_ci'
+
+query CREATE DATABASE
+attrs CHARACTER SET latin1 COLLATE uca1400_as_ci COLLATE uca1400_as_ci
+result ERROR: COLLATION 'uca1400_as_ci' is not valid for CHARACTER SET 'latin1'
+
+query CREATE DATABASE
+attrs COLLATE DEFAULT COLLATE uca1400_as_ci COLLATE uca1400_as_ci
+result ERROR: Conflicting declarations: 'COLLATE DEFAULT' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs COLLATE utf8mb4_bin COLLATE uca1400_as_ci COLLATE uca1400_as_ci
+result ERROR: Conflicting declarations: 'COLLATE utf8mb4_bin' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs COLLATE latin1_swedish_ci COLLATE uca1400_as_ci COLLATE uca1400_as_ci
+result ERROR: Conflicting declarations: 'COLLATE latin1_swedish_ci' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs COLLATE latin1_bin COLLATE uca1400_as_ci COLLATE uca1400_as_ci
+result ERROR: Conflicting declarations: 'COLLATE latin1_bin' and 'COLLATE uca1400_as_ci'
+
+query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci COLLATE uca1400_as_ci COLLATE uca1400_as_ci
+result ERROR: Conflicting declarations: 'COLLATE uca1400_ai_ci' and 'COLLATE uca1400_as_ci'
+
+OK 117
query CREATE DATABASE
attrs CHARACTER SET DEFAULT CHARACTER SET DEFAULT CHARACTER SET DEFAULT
@@ -1535,6 +3065,14 @@ attrs COLLATE utf8mb4_bin CHARACTER SET DEFAULT CHARACTER SET DEFAULT
result CHARACTER SET utf8mb4 COLLATE utf8mb4_bin
query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci CHARACTER SET DEFAULT CHARACTER SET DEFAULT
+result CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_ai_ci
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci CHARACTER SET DEFAULT CHARACTER SET DEFAULT
+result CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_as_ci
+
+query CREATE DATABASE
attrs CHARACTER SET DEFAULT CHARACTER SET utf8mb4 CHARACTER SET DEFAULT
result CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci
@@ -1551,6 +3089,14 @@ attrs COLLATE utf8mb4_bin CHARACTER SET utf8mb4 CHARACTER SET DEFAULT
result CHARACTER SET utf8mb4 COLLATE utf8mb4_bin
query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci CHARACTER SET utf8mb4 CHARACTER SET DEFAULT
+result CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_ai_ci
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci CHARACTER SET utf8mb4 CHARACTER SET DEFAULT
+result CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_as_ci
+
+query CREATE DATABASE
attrs CHARACTER SET DEFAULT COLLATE DEFAULT CHARACTER SET DEFAULT
result CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci
@@ -1575,6 +3121,30 @@ attrs COLLATE utf8mb4_bin COLLATE utf8mb4_bin CHARACTER SET DEFAULT
result CHARACTER SET utf8mb4 COLLATE utf8mb4_bin
query CREATE DATABASE
+attrs CHARACTER SET DEFAULT COLLATE uca1400_ai_ci CHARACTER SET DEFAULT
+result CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_ai_ci
+
+query CREATE DATABASE
+attrs CHARACTER SET utf8mb4 COLLATE uca1400_ai_ci CHARACTER SET DEFAULT
+result CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_ai_ci
+
+query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci COLLATE uca1400_ai_ci CHARACTER SET DEFAULT
+result CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_ai_ci
+
+query CREATE DATABASE
+attrs CHARACTER SET DEFAULT COLLATE uca1400_as_ci CHARACTER SET DEFAULT
+result CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_as_ci
+
+query CREATE DATABASE
+attrs CHARACTER SET utf8mb4 COLLATE uca1400_as_ci CHARACTER SET DEFAULT
+result CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_as_ci
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci COLLATE uca1400_as_ci CHARACTER SET DEFAULT
+result CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_as_ci
+
+query CREATE DATABASE
attrs CHARACTER SET latin1 CHARACTER SET latin1 CHARACTER SET latin1
result CHARACTER SET latin1 COLLATE latin1_swedish_ci
@@ -1639,6 +3209,14 @@ attrs COLLATE utf8mb4_bin CHARACTER SET DEFAULT CHARACTER SET utf8mb4
result CHARACTER SET utf8mb4 COLLATE utf8mb4_bin
query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci CHARACTER SET DEFAULT CHARACTER SET utf8mb4
+result CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_ai_ci
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci CHARACTER SET DEFAULT CHARACTER SET utf8mb4
+result CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_as_ci
+
+query CREATE DATABASE
attrs CHARACTER SET DEFAULT CHARACTER SET utf8mb4 CHARACTER SET utf8mb4
result CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci
@@ -1655,6 +3233,14 @@ attrs COLLATE utf8mb4_bin CHARACTER SET utf8mb4 CHARACTER SET utf8mb4
result CHARACTER SET utf8mb4 COLLATE utf8mb4_bin
query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci CHARACTER SET utf8mb4 CHARACTER SET utf8mb4
+result CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_ai_ci
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci CHARACTER SET utf8mb4 CHARACTER SET utf8mb4
+result CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_as_ci
+
+query CREATE DATABASE
attrs CHARACTER SET DEFAULT COLLATE DEFAULT CHARACTER SET utf8mb4
result CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci
@@ -1679,6 +3265,30 @@ attrs COLLATE utf8mb4_bin COLLATE utf8mb4_bin CHARACTER SET utf8mb4
result CHARACTER SET utf8mb4 COLLATE utf8mb4_bin
query CREATE DATABASE
+attrs CHARACTER SET DEFAULT COLLATE uca1400_ai_ci CHARACTER SET utf8mb4
+result CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_ai_ci
+
+query CREATE DATABASE
+attrs CHARACTER SET utf8mb4 COLLATE uca1400_ai_ci CHARACTER SET utf8mb4
+result CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_ai_ci
+
+query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci COLLATE uca1400_ai_ci CHARACTER SET utf8mb4
+result CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_ai_ci
+
+query CREATE DATABASE
+attrs CHARACTER SET DEFAULT COLLATE uca1400_as_ci CHARACTER SET utf8mb4
+result CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_as_ci
+
+query CREATE DATABASE
+attrs CHARACTER SET utf8mb4 COLLATE uca1400_as_ci CHARACTER SET utf8mb4
+result CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_as_ci
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci COLLATE uca1400_as_ci CHARACTER SET utf8mb4
+result CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_as_ci
+
+query CREATE DATABASE
attrs CHARACTER SET DEFAULT CHARACTER SET DEFAULT COLLATE DEFAULT
result CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci
@@ -1833,6 +3443,78 @@ result CHARACTER SET latin1 COLLATE latin1_bin
query CREATE DATABASE
attrs COLLATE latin1_bin COLLATE latin1_bin COLLATE latin1_bin
result CHARACTER SET latin1 COLLATE latin1_bin
+
+query CREATE DATABASE
+attrs CHARACTER SET DEFAULT CHARACTER SET DEFAULT COLLATE uca1400_ai_ci
+result CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_ai_ci
+
+query CREATE DATABASE
+attrs CHARACTER SET utf8mb4 CHARACTER SET DEFAULT COLLATE uca1400_ai_ci
+result CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_ai_ci
+
+query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci CHARACTER SET DEFAULT COLLATE uca1400_ai_ci
+result CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_ai_ci
+
+query CREATE DATABASE
+attrs CHARACTER SET DEFAULT CHARACTER SET utf8mb4 COLLATE uca1400_ai_ci
+result CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_ai_ci
+
+query CREATE DATABASE
+attrs CHARACTER SET utf8mb4 CHARACTER SET utf8mb4 COLLATE uca1400_ai_ci
+result CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_ai_ci
+
+query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci CHARACTER SET utf8mb4 COLLATE uca1400_ai_ci
+result CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_ai_ci
+
+query CREATE DATABASE
+attrs CHARACTER SET DEFAULT COLLATE uca1400_ai_ci COLLATE uca1400_ai_ci
+result CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_ai_ci
+
+query CREATE DATABASE
+attrs CHARACTER SET utf8mb4 COLLATE uca1400_ai_ci COLLATE uca1400_ai_ci
+result CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_ai_ci
+
+query CREATE DATABASE
+attrs COLLATE uca1400_ai_ci COLLATE uca1400_ai_ci COLLATE uca1400_ai_ci
+result CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_ai_ci
+
+query CREATE DATABASE
+attrs CHARACTER SET DEFAULT CHARACTER SET DEFAULT COLLATE uca1400_as_ci
+result CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_as_ci
+
+query CREATE DATABASE
+attrs CHARACTER SET utf8mb4 CHARACTER SET DEFAULT COLLATE uca1400_as_ci
+result CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_as_ci
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci CHARACTER SET DEFAULT COLLATE uca1400_as_ci
+result CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_as_ci
+
+query CREATE DATABASE
+attrs CHARACTER SET DEFAULT CHARACTER SET utf8mb4 COLLATE uca1400_as_ci
+result CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_as_ci
+
+query CREATE DATABASE
+attrs CHARACTER SET utf8mb4 CHARACTER SET utf8mb4 COLLATE uca1400_as_ci
+result CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_as_ci
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci CHARACTER SET utf8mb4 COLLATE uca1400_as_ci
+result CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_as_ci
+
+query CREATE DATABASE
+attrs CHARACTER SET DEFAULT COLLATE uca1400_as_ci COLLATE uca1400_as_ci
+result CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_as_ci
+
+query CREATE DATABASE
+attrs CHARACTER SET utf8mb4 COLLATE uca1400_as_ci COLLATE uca1400_as_ci
+result CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_as_ci
+
+query CREATE DATABASE
+attrs COLLATE uca1400_as_ci COLLATE uca1400_as_ci COLLATE uca1400_as_ci
+result CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_as_ci
ALTER TABLE results RENAME TO results_create_db;
#
# Running ALTER DATABASE tests
@@ -1850,9 +3532,9 @@ ALTER TABLE results RENAME TO results_alter_db;
# ALTER DATABASE db1 COMMENT '' COLLATE DEFAULT; -- means "the default collation of the current character set of db1"
# ALTER DATABASE db1 COMMENT ''; -- means "keep the current db1 collation"
CALL diff_result_tables('results_create_db', 'results_alter_db', '');
-COUNT(*) 400
-SUM(t1.result=t2.result) 396
-SUM(t1.result<>t2.result) 4
+COUNT(*) 820
+SUM(t1.result=t2.result) 810
+SUM(t1.result<>t2.result) 10
attrs
aaa CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
@@ -1862,13 +3544,37 @@ attrs COLLATE DEFAULT
aaa CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci
bbb CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci
+attrs COLLATE uca1400_ai_ci
+aaa CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_ai_ci
+bbb CHARACTER SET utf8mb3 COLLATE utf8mb3_uca1400_ai_ci
+
+attrs COLLATE uca1400_as_ci
+aaa CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_as_ci
+bbb CHARACTER SET utf8mb3 COLLATE utf8mb3_uca1400_as_ci
+
attrs COLLATE DEFAULT COLLATE DEFAULT
aaa CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci
bbb CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci
+attrs COLLATE uca1400_ai_ci COLLATE uca1400_ai_ci
+aaa CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_ai_ci
+bbb CHARACTER SET utf8mb3 COLLATE utf8mb3_uca1400_ai_ci
+
+attrs COLLATE uca1400_as_ci COLLATE uca1400_as_ci
+aaa CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_as_ci
+bbb CHARACTER SET utf8mb3 COLLATE utf8mb3_uca1400_as_ci
+
attrs COLLATE DEFAULT COLLATE DEFAULT COLLATE DEFAULT
aaa CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci
bbb CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci
+
+attrs COLLATE uca1400_ai_ci COLLATE uca1400_ai_ci COLLATE uca1400_ai_ci
+aaa CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_ai_ci
+bbb CHARACTER SET utf8mb3 COLLATE utf8mb3_uca1400_ai_ci
+
+attrs COLLATE uca1400_as_ci COLLATE uca1400_as_ci COLLATE uca1400_as_ci
+aaa CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_as_ci
+bbb CHARACTER SET utf8mb3 COLLATE utf8mb3_uca1400_as_ci
#
# Running CREATE TABLE tests
#
@@ -1880,8 +3586,8 @@ CALL run_all('',
ALTER TABLE results RENAME TO results_create_table;
# Expect no difference to CREATE DATABASE
CALL diff_result_tables('results_create_db', 'results_create_table', '');
-COUNT(*) 400
-SUM(t1.result=t2.result) 400
+COUNT(*) 820
+SUM(t1.result=t2.result) 820
SUM(t1.result<>t2.result) 0
DROP DATABASE test1;
#
@@ -1900,9 +3606,9 @@ ALTER TABLE results RENAME TO results_alter_table;
# ALTER TABLE test1.t1 COMMENT '' COLLATE DEFAULT; -- means "the default collation of the current character set of test1.t1"
# ALTER TABLE test1.t1 COMMENT ''; -- means "keep the current collation of test.t1"
CALL diff_result_tables('results_create_table', 'results_alter_table', '');
-COUNT(*) 400
-SUM(t1.result=t2.result) 396
-SUM(t1.result<>t2.result) 4
+COUNT(*) 820
+SUM(t1.result=t2.result) 810
+SUM(t1.result<>t2.result) 10
attrs
aaa CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
@@ -1912,13 +3618,37 @@ attrs COLLATE DEFAULT
aaa CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci
bbb CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci
+attrs COLLATE uca1400_ai_ci
+aaa CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_ai_ci
+bbb CHARACTER SET utf8mb3 COLLATE utf8mb3_uca1400_ai_ci
+
+attrs COLLATE uca1400_as_ci
+aaa CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_as_ci
+bbb CHARACTER SET utf8mb3 COLLATE utf8mb3_uca1400_as_ci
+
attrs COLLATE DEFAULT COLLATE DEFAULT
aaa CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci
bbb CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci
+attrs COLLATE uca1400_ai_ci COLLATE uca1400_ai_ci
+aaa CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_ai_ci
+bbb CHARACTER SET utf8mb3 COLLATE utf8mb3_uca1400_ai_ci
+
+attrs COLLATE uca1400_as_ci COLLATE uca1400_as_ci
+aaa CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_as_ci
+bbb CHARACTER SET utf8mb3 COLLATE utf8mb3_uca1400_as_ci
+
attrs COLLATE DEFAULT COLLATE DEFAULT COLLATE DEFAULT
aaa CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci
bbb CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci
+
+attrs COLLATE uca1400_ai_ci COLLATE uca1400_ai_ci COLLATE uca1400_ai_ci
+aaa CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_ai_ci
+bbb CHARACTER SET utf8mb3 COLLATE utf8mb3_uca1400_ai_ci
+
+attrs COLLATE uca1400_as_ci COLLATE uca1400_as_ci COLLATE uca1400_as_ci
+aaa CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_as_ci
+bbb CHARACTER SET utf8mb3 COLLATE utf8mb3_uca1400_as_ci
DROP DATABASE test1;
#
# Running ALTER TABLE CONVERT TO tests
@@ -1931,16 +3661,16 @@ CALL run_all('CREATE TABLE test1.t1(a INT) CHARACTER SET utf8mb3 COLLATE utf8mb3
ALTER TABLE results RENAME TO results_convert_table;
# CONVERT TO COLLATE (without CHARACTER SET) is not supported yet
CALL diff_result_tables_stat('results_alter_table', 'results_convert_table','');
-COUNT(*) 400
-SUM(t1.result=t2.result) 36
-SUM(t1.result<>t2.result) 364
+COUNT(*) 820
+SUM(t1.result=t2.result) 66
+SUM(t1.result<>t2.result) 754
# Everything that did not fail on syntax error
# should give equal results with ALTER TABLE DEFAULT CHARACTER SET
# Expect 0 non-equal results:
CALL diff_result_tables('results_alter_table', 'results_convert_table',
't2.result NOT RLIKE ''SQL syntax''');
-COUNT(*) 36
-SUM(t1.result=t2.result) 36
+COUNT(*) 66
+SUM(t1.result=t2.result) 66
SUM(t1.result<>t2.result) 0
DROP DATABASE test1;
DROP PROCEDURE show_results_all;
diff --git a/mysql-test/main/ctype_collate_context.test b/mysql-test/main/ctype_collate_context.test
index 0867237a223..6934bf487c3 100644
--- a/mysql-test/main/ctype_collate_context.test
+++ b/mysql-test/main/ctype_collate_context.test
@@ -9,7 +9,9 @@ INSERT INTO t0 VALUES
('COLLATE DEFAULT'),
('COLLATE utf8mb4_bin'),
('COLLATE latin1_swedish_ci'),
-('COLLATE latin1_bin');
+('COLLATE latin1_bin'),
+('COLLATE uca1400_ai_ci'),
+('COLLATE uca1400_as_ci');
CREATE TABLE clauses
(
diff --git a/mysql-test/main/ctype_ldml.result b/mysql-test/main/ctype_ldml.result
index 001ac2f0348..31508fcd1b1 100644
--- a/mysql-test/main/ctype_ldml.result
+++ b/mysql-test/main/ctype_ldml.result
@@ -469,6 +469,7 @@ utf8mb4_test_ci utf8mb4 326 8
utf16_test_ci utf16 327 8
utf8mb4_test_400_ci utf8mb4 328 8
utf8mb4_test_520_nopad_ci utf8mb4 329 8
+utf8mb4_uca1400_test01_as_ci utf8mb4 330 4
latin1_test latin1 331 1
latin1_test2 latin1 332 1
latin1_test2_cs latin1 333 1
@@ -505,6 +506,7 @@ ucs2_test_ci ucs2 358 8
utf8mb4_test_ci utf8mb4 326 8
utf8mb4_test_400_ci utf8mb4 328 8
utf8mb4_test_520_nopad_ci utf8mb4 329 8
+utf8mb4_uca1400_test01_as_ci utf8mb4 330 4
utf16_test_ci utf16 327 8
utf32_test_ci utf32 391 8
show collation like 'ucs2_vn_ci';
@@ -3066,6 +3068,17 @@ INSERT INTO case_folding (code) VALUES
(0x26B),
(0x271),
(0x27D);
+INSERT INTO case_folding (code) VALUES
+(0x0049) /* LATIN CAPITAL LETTER I */,
+(0x0069) /* LATIN SMALL LETTER I */,
+(0x0130) /* LATIN CAPITAL LETTER I WITH DOT ABOVE */,
+(0x0131) /* LATIN SMALL LETTER DOTLESS I */
+;
+INSERT INTO case_folding (code) VALUES
+(0x2C2F) /* GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI (Unicode-14.0) */,
+(0x2C5F) /* GLAGOLITIC SMALL LETTER CAUDATE CHRIVI (Unicode-14.0) */,
+(0xA7C0) /* LATIN CAPITAL LETTER OLD POLISH O (Unicode-14.0) */,
+(0xA7C1) /* LATIN SMALL LETTER OLD POLISH O (Unicode-14.0) */;
UPDATE case_folding SET c=CHAR(code USING ucs2);
SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding;
HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c
@@ -3079,6 +3092,14 @@ HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c
26B C9AB E2B1A2 É«
271 C9B1 E2B1AE ɱ
27D C9BD E2B1A4 ɽ
+49 69 49 I
+69 69 49 i
+130 69 C4B0 Ä°
+131 C4B1 49 ı
+2C2F E2B0AF E2B0AF â°¯
+2C5F E2B19F E2B19F ⱟ
+A7C0 EA9F80 EA9F80 Ꟁ
+A7C1 EA9F81 EA9F81 êŸ
DROP TABLE case_folding;
#
# End of 10.3 tests
@@ -3130,3 +3151,187 @@ DROP TABLE t1;
#
# End of 10.8 tests
#
+#
+# MDEV-27009 Add UCA-14.0.0 collations
+#
+CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_test01_as_ci, comment VARCHAR(128));
+INSERT INTO t1 VALUES ('a', '0061 LATIN SMALL LETTER A');
+INSERT INTO t1 VALUES ('c', '0063 LATIN SMALL LETTER C');
+INSERT INTO t1 VALUES ('à', '00E0 LATIN SMALL LETTER A WITH GRAVE');
+INSERT INTO t1 VALUES ('ć', '0107 LATIN SMALL LETTER C WITH ACUTE');
+INSERT INTO t1 VALUES (_ucs2 0x0439, '0439 CYRILLIC SMALL LETTER SHORT I - precomposed');
+INSERT INTO t1 VALUES (_ucs2 0x04380306, '0438 0306 CYRILLIC SMALL LETTER SHORT I - contraction');
+INSERT INTO t1 VALUES (_ucs2 0x0CCB, '0CCB KANNADA VOWEL SIGN OO - precomposed');
+INSERT INTO t1 VALUES (_ucs2 0x0CC60CC20CD5, '0CC6 0CC2 0CD5 KANNADA VOWEL SIGN OO - contraction');
+SELECT
+'---' AS `---`,
+comment,
+HEX(a),
+HEX(WEIGHT_STRING(a)),
+HEX(WEIGHT_STRING(a LEVEL 1)),
+HEX(WEIGHT_STRING(a LEVEL 2)),
+WEIGHT_STRING(a LEVEL 1)=WEIGHT_STRING(a COLLATE utf8mb4_unicode_ci) AS is_400,
+WEIGHT_STRING(a LEVEL 1)=WEIGHT_STRING(a COLLATE utf8mb4_unicode_520_ci) AS is_520,
+WEIGHT_STRING(a LEVEL 1)=WEIGHT_STRING(a COLLATE utf8mb4_uca1400_ai_ci) AS is_1400
+FROM t1
+ORDER BY a, HEX(a);
+--- ---
+comment 0061 LATIN SMALL LETTER A
+HEX(a) 61
+HEX(WEIGHT_STRING(a)) 20750020
+HEX(WEIGHT_STRING(a LEVEL 1)) 2075
+HEX(WEIGHT_STRING(a LEVEL 2)) 0020
+is_400 0
+is_520 0
+is_1400 1
+--- ---
+comment 00E0 LATIN SMALL LETTER A WITH GRAVE
+HEX(a) C3A0
+HEX(WEIGHT_STRING(a)) 207500200025
+HEX(WEIGHT_STRING(a LEVEL 1)) 2075
+HEX(WEIGHT_STRING(a LEVEL 2)) 00200025
+is_400 0
+is_520 0
+is_1400 1
+--- ---
+comment 0063 LATIN SMALL LETTER C
+HEX(a) 63
+HEX(WEIGHT_STRING(a)) 20A90020
+HEX(WEIGHT_STRING(a LEVEL 1)) 20A9
+HEX(WEIGHT_STRING(a LEVEL 2)) 0020
+is_400 0
+is_520 0
+is_1400 1
+--- ---
+comment 0107 LATIN SMALL LETTER C WITH ACUTE
+HEX(a) C487
+HEX(WEIGHT_STRING(a)) 20A900200024
+HEX(WEIGHT_STRING(a LEVEL 1)) 20A9
+HEX(WEIGHT_STRING(a LEVEL 2)) 00200024
+is_400 0
+is_520 0
+is_1400 1
+--- ---
+comment 0438 0306 CYRILLIC SMALL LETTER SHORT I - contraction
+HEX(a) D0B8CC86
+HEX(WEIGHT_STRING(a)) 24E10020
+HEX(WEIGHT_STRING(a LEVEL 1)) 24E1
+HEX(WEIGHT_STRING(a LEVEL 2)) 0020
+is_400 0
+is_520 0
+is_1400 1
+--- ---
+comment 0439 CYRILLIC SMALL LETTER SHORT I - precomposed
+HEX(a) D0B9
+HEX(WEIGHT_STRING(a)) 24E10020
+HEX(WEIGHT_STRING(a LEVEL 1)) 24E1
+HEX(WEIGHT_STRING(a LEVEL 2)) 0020
+is_400 0
+is_520 0
+is_1400 1
+--- ---
+comment 0CC6 0CC2 0CD5 KANNADA VOWEL SIGN OO - contraction
+HEX(a) E0B386E0B382E0B395
+HEX(WEIGHT_STRING(a)) 2D150020
+HEX(WEIGHT_STRING(a LEVEL 1)) 2D15
+HEX(WEIGHT_STRING(a LEVEL 2)) 0020
+is_400 0
+is_520 0
+is_1400 1
+--- ---
+comment 0CCB KANNADA VOWEL SIGN OO - precomposed
+HEX(a) E0B38B
+HEX(WEIGHT_STRING(a)) 2D150020
+HEX(WEIGHT_STRING(a LEVEL 1)) 2D15
+HEX(WEIGHT_STRING(a LEVEL 2)) 0020
+is_400 0
+is_520 0
+is_1400 1
+DROP TABLE t1;
+#
+# MDEV-30661 UPPER() returns an empty string for U+0251 in uca1400 collations for utf8
+#
+SET NAMES utf8mb4 COLLATE utf8mb4_uca1400_test01_as_ci;
+CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c LIMIT 0;
+SHOW CREATE TABLE case_folding;
+Table Create Table
+case_folding CREATE TABLE `case_folding` (
+ `code` int(1) NOT NULL,
+ `c` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_test01_as_ci DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+INSERT INTO case_folding (code) VALUES
+(0x23A),
+(0x23E),
+(0x23F),
+(0x240),
+(0x250),
+(0x251),
+(0x252),
+(0x26B),
+(0x271),
+(0x27D);
+INSERT INTO case_folding (code) VALUES
+(0x0049) /* LATIN CAPITAL LETTER I */,
+(0x0069) /* LATIN SMALL LETTER I */,
+(0x0130) /* LATIN CAPITAL LETTER I WITH DOT ABOVE */,
+(0x0131) /* LATIN SMALL LETTER DOTLESS I */
+;
+INSERT INTO case_folding (code) VALUES
+(0x2C2F) /* GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI (Unicode-14.0) */,
+(0x2C5F) /* GLAGOLITIC SMALL LETTER CAUDATE CHRIVI (Unicode-14.0) */,
+(0xA7C0) /* LATIN CAPITAL LETTER OLD POLISH O (Unicode-14.0) */,
+(0xA7C1) /* LATIN SMALL LETTER OLD POLISH O (Unicode-14.0) */;
+UPDATE case_folding SET c=CHAR(code USING ucs2);
+SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding;
+HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c
+23A E2B1A5 C8BA Ⱥ
+23E E2B1A6 C8BE Ⱦ
+23F C8BF E2B1BE È¿
+240 C980 E2B1BF ɀ
+250 C990 E2B1AF É
+251 C991 E2B1AD É‘
+252 C992 E2B1B0 É’
+26B C9AB E2B1A2 É«
+271 C9B1 E2B1AE ɱ
+27D C9BD E2B1A4 ɽ
+49 69 49 I
+69 69 49 i
+130 69 C4B0 Ä°
+131 C4B1 49 ı
+2C2F E2B19F E2B0AF â°¯
+2C5F E2B19F E2B0AF ⱟ
+A7C0 EA9F81 EA9F80 Ꟁ
+A7C1 EA9F81 EA9F80 êŸ
+DROP TABLE case_folding;
+#
+# MDEV-30577 Case folding for uca1400 collations is not up to date
+#
+SET NAMES utf8mb4 COLLATE utf8mb4_uca1400_test01_as_ci;
+CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c, SPACE(64) AS comment LIMIT 0;
+SHOW CREATE TABLE case_folding;
+Table Create Table
+case_folding CREATE TABLE `case_folding` (
+ `code` int(1) NOT NULL,
+ `c` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_test01_as_ci DEFAULT NULL,
+ `comment` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_test01_as_ci DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+INSERT INTO case_folding (code, comment) VALUES (0x10595, 'VITHKUQI CAPITAL LETTER ZE (Unicode-14.0)');
+INSERT INTO case_folding (code, comment) VALUES (0x105BC, 'VITHKUQI SMALL LETTER ZE (Unicode-14.0)');
+INSERT INTO case_folding (code, comment) VALUES (0x1E921, 'ADLAM CAPITAL LETTER SHA (Unicode-9.0)');
+INSERT INTO case_folding (code, comment) VALUES (0x1E943, 'ADLAM SMALL LETTER SHA (Unicode-9.0)');
+UPDATE case_folding SET c=CHAR(code USING utf32);
+SELECT
+HEX(CONVERT(c USING utf32)) AS ch,
+HEX(CONVERT(LOWER(c) USING utf32)) AS cl,
+HEX(CONVERT(UPPER(c) USING utf32)) AS cu,
+comment
+FROM case_folding ORDER BY BINARY(c);
+ch cl cu comment
+00010595 000105BC 00010595 VITHKUQI CAPITAL LETTER ZE (Unicode-14.0)
+000105BC 000105BC 00010595 VITHKUQI SMALL LETTER ZE (Unicode-14.0)
+0001E921 0001E943 0001E921 ADLAM CAPITAL LETTER SHA (Unicode-9.0)
+0001E943 0001E943 0001E921 ADLAM SMALL LETTER SHA (Unicode-9.0)
+DROP TABLE case_folding;
+#
+# End of 10.10 tests
+#
diff --git a/mysql-test/main/ctype_ldml.test b/mysql-test/main/ctype_ldml.test
index c9397d73126..9189630e5a3 100644
--- a/mysql-test/main/ctype_ldml.test
+++ b/mysql-test/main/ctype_ldml.test
@@ -667,3 +667,50 @@ DROP TABLE t1;
--echo #
--echo # End of 10.8 tests
--echo #
+
+--echo #
+--echo # MDEV-27009 Add UCA-14.0.0 collations
+--echo #
+
+CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_test01_as_ci, comment VARCHAR(128));
+INSERT INTO t1 VALUES ('a', '0061 LATIN SMALL LETTER A');
+INSERT INTO t1 VALUES ('c', '0063 LATIN SMALL LETTER C');
+INSERT INTO t1 VALUES ('à', '00E0 LATIN SMALL LETTER A WITH GRAVE');
+INSERT INTO t1 VALUES ('ć', '0107 LATIN SMALL LETTER C WITH ACUTE');
+INSERT INTO t1 VALUES (_ucs2 0x0439, '0439 CYRILLIC SMALL LETTER SHORT I - precomposed');
+INSERT INTO t1 VALUES (_ucs2 0x04380306, '0438 0306 CYRILLIC SMALL LETTER SHORT I - contraction');
+INSERT INTO t1 VALUES (_ucs2 0x0CCB, '0CCB KANNADA VOWEL SIGN OO - precomposed');
+INSERT INTO t1 VALUES (_ucs2 0x0CC60CC20CD5, '0CC6 0CC2 0CD5 KANNADA VOWEL SIGN OO - contraction');
+--vertical_results
+SELECT
+ '---' AS `---`,
+ comment,
+ HEX(a),
+ HEX(WEIGHT_STRING(a)),
+ HEX(WEIGHT_STRING(a LEVEL 1)),
+ HEX(WEIGHT_STRING(a LEVEL 2)),
+ WEIGHT_STRING(a LEVEL 1)=WEIGHT_STRING(a COLLATE utf8mb4_unicode_ci) AS is_400,
+ WEIGHT_STRING(a LEVEL 1)=WEIGHT_STRING(a COLLATE utf8mb4_unicode_520_ci) AS is_520,
+ WEIGHT_STRING(a LEVEL 1)=WEIGHT_STRING(a COLLATE utf8mb4_uca1400_ai_ci) AS is_1400
+FROM t1
+ORDER BY a, HEX(a);
+--horizontal_results
+DROP TABLE t1;
+
+--echo #
+--echo # MDEV-30661 UPPER() returns an empty string for U+0251 in uca1400 collations for utf8
+--echo #
+
+SET NAMES utf8mb4 COLLATE utf8mb4_uca1400_test01_as_ci;
+--source include/ctype_casefolding.inc
+
+--echo #
+--echo # MDEV-30577 Case folding for uca1400 collations is not up to date
+--echo #
+
+SET NAMES utf8mb4 COLLATE utf8mb4_uca1400_test01_as_ci;
+--source include/ctype_casefolding_supplementary.inc
+
+--echo #
+--echo # End of 10.10 tests
+--echo #
diff --git a/mysql-test/main/ctype_ucs2_uca.result b/mysql-test/main/ctype_ucs2_uca.result
index 430f0ec1c37..317f86b1a4f 100644
--- a/mysql-test/main/ctype_ucs2_uca.result
+++ b/mysql-test/main/ctype_ucs2_uca.result
@@ -588,3 +588,581 @@ SET NAMES utf8;
#
# End of 10.2 tests
#
+#
+# Start of 10.9 tests
+#
+#
+# MDEV-27009 Add UCA-14.0.0 collations
+# Collation IDs in the protocol
+#
+SET @charset='ucs2';
+FOR rec IN (SELECT COLLATION_NAME
+FROM INFORMATION_SCHEMA.COLLATION_CHARACTER_SET_APPLICABILITY
+WHERE CHARACTER_SET_NAME=@charset
+AND COLLATION_NAME RLIKE 'uca1400'
+ ORDER BY ID)
+DO
+SET NAMES utf8mb4;
+SET character_set_results=NULL;
+EXECUTE IMMEDIATE CONCAT('SELECT CONVERT('''' USING ',@charset,')',
+' COLLATE ', rec.COLLATION_NAME,
+' AS ', rec.COLLATION_NAME,
+' LIMIT 0');
+END FOR;
+$$
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_ai_ci 253 0 0 Y 0 39 128
+uca1400_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_ai_cs 253 0 0 Y 0 39 128
+uca1400_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_as_ci 253 0 0 Y 0 39 128
+uca1400_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_as_cs 253 0 0 Y 0 39 128
+uca1400_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_nopad_ai_ci 253 0 0 Y 0 39 128
+uca1400_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_nopad_ai_cs 253 0 0 Y 0 39 128
+uca1400_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_nopad_as_ci 253 0 0 Y 0 39 128
+uca1400_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_nopad_as_cs 253 0 0 Y 0 39 128
+uca1400_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_icelandic_ai_ci 253 0 0 Y 0 39 129
+uca1400_icelandic_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_icelandic_ai_cs 253 0 0 Y 0 39 129
+uca1400_icelandic_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_icelandic_as_ci 253 0 0 Y 0 39 129
+uca1400_icelandic_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_icelandic_as_cs 253 0 0 Y 0 39 129
+uca1400_icelandic_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_icelandic_nopad_ai_ci 253 0 0 Y 0 39 129
+uca1400_icelandic_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_icelandic_nopad_ai_cs 253 0 0 Y 0 39 129
+uca1400_icelandic_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_icelandic_nopad_as_ci 253 0 0 Y 0 39 129
+uca1400_icelandic_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_icelandic_nopad_as_cs 253 0 0 Y 0 39 129
+uca1400_icelandic_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_latvian_ai_ci 253 0 0 Y 0 39 130
+uca1400_latvian_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_latvian_ai_cs 253 0 0 Y 0 39 130
+uca1400_latvian_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_latvian_as_ci 253 0 0 Y 0 39 130
+uca1400_latvian_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_latvian_as_cs 253 0 0 Y 0 39 130
+uca1400_latvian_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_latvian_nopad_ai_ci 253 0 0 Y 0 39 130
+uca1400_latvian_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_latvian_nopad_ai_cs 253 0 0 Y 0 39 130
+uca1400_latvian_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_latvian_nopad_as_ci 253 0 0 Y 0 39 130
+uca1400_latvian_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_latvian_nopad_as_cs 253 0 0 Y 0 39 130
+uca1400_latvian_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_romanian_ai_ci 253 0 0 Y 0 39 131
+uca1400_romanian_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_romanian_ai_cs 253 0 0 Y 0 39 131
+uca1400_romanian_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_romanian_as_ci 253 0 0 Y 0 39 131
+uca1400_romanian_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_romanian_as_cs 253 0 0 Y 0 39 131
+uca1400_romanian_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_romanian_nopad_ai_ci 253 0 0 Y 0 39 131
+uca1400_romanian_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_romanian_nopad_ai_cs 253 0 0 Y 0 39 131
+uca1400_romanian_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_romanian_nopad_as_ci 253 0 0 Y 0 39 131
+uca1400_romanian_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_romanian_nopad_as_cs 253 0 0 Y 0 39 131
+uca1400_romanian_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_slovenian_ai_ci 253 0 0 Y 0 39 132
+uca1400_slovenian_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_slovenian_ai_cs 253 0 0 Y 0 39 132
+uca1400_slovenian_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_slovenian_as_ci 253 0 0 Y 0 39 132
+uca1400_slovenian_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_slovenian_as_cs 253 0 0 Y 0 39 132
+uca1400_slovenian_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_slovenian_nopad_ai_ci 253 0 0 Y 0 39 132
+uca1400_slovenian_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_slovenian_nopad_ai_cs 253 0 0 Y 0 39 132
+uca1400_slovenian_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_slovenian_nopad_as_ci 253 0 0 Y 0 39 132
+uca1400_slovenian_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_slovenian_nopad_as_cs 253 0 0 Y 0 39 132
+uca1400_slovenian_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_polish_ai_ci 253 0 0 Y 0 39 133
+uca1400_polish_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_polish_ai_cs 253 0 0 Y 0 39 133
+uca1400_polish_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_polish_as_ci 253 0 0 Y 0 39 133
+uca1400_polish_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_polish_as_cs 253 0 0 Y 0 39 133
+uca1400_polish_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_polish_nopad_ai_ci 253 0 0 Y 0 39 133
+uca1400_polish_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_polish_nopad_ai_cs 253 0 0 Y 0 39 133
+uca1400_polish_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_polish_nopad_as_ci 253 0 0 Y 0 39 133
+uca1400_polish_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_polish_nopad_as_cs 253 0 0 Y 0 39 133
+uca1400_polish_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_estonian_ai_ci 253 0 0 Y 0 39 134
+uca1400_estonian_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_estonian_ai_cs 253 0 0 Y 0 39 134
+uca1400_estonian_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_estonian_as_ci 253 0 0 Y 0 39 134
+uca1400_estonian_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_estonian_as_cs 253 0 0 Y 0 39 134
+uca1400_estonian_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_estonian_nopad_ai_ci 253 0 0 Y 0 39 134
+uca1400_estonian_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_estonian_nopad_ai_cs 253 0 0 Y 0 39 134
+uca1400_estonian_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_estonian_nopad_as_ci 253 0 0 Y 0 39 134
+uca1400_estonian_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_estonian_nopad_as_cs 253 0 0 Y 0 39 134
+uca1400_estonian_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_spanish_ai_ci 253 0 0 Y 0 39 135
+uca1400_spanish_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_spanish_ai_cs 253 0 0 Y 0 39 135
+uca1400_spanish_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_spanish_as_ci 253 0 0 Y 0 39 135
+uca1400_spanish_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_spanish_as_cs 253 0 0 Y 0 39 135
+uca1400_spanish_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_spanish_nopad_ai_ci 253 0 0 Y 0 39 135
+uca1400_spanish_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_spanish_nopad_ai_cs 253 0 0 Y 0 39 135
+uca1400_spanish_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_spanish_nopad_as_ci 253 0 0 Y 0 39 135
+uca1400_spanish_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_spanish_nopad_as_cs 253 0 0 Y 0 39 135
+uca1400_spanish_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_swedish_ai_ci 253 0 0 Y 0 39 136
+uca1400_swedish_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_swedish_ai_cs 253 0 0 Y 0 39 136
+uca1400_swedish_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_swedish_as_ci 253 0 0 Y 0 39 136
+uca1400_swedish_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_swedish_as_cs 253 0 0 Y 0 39 136
+uca1400_swedish_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_swedish_nopad_ai_ci 253 0 0 Y 0 39 136
+uca1400_swedish_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_swedish_nopad_ai_cs 253 0 0 Y 0 39 136
+uca1400_swedish_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_swedish_nopad_as_ci 253 0 0 Y 0 39 136
+uca1400_swedish_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_swedish_nopad_as_cs 253 0 0 Y 0 39 136
+uca1400_swedish_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_turkish_ai_ci 253 0 0 Y 0 39 137
+uca1400_turkish_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_turkish_ai_cs 253 0 0 Y 0 39 137
+uca1400_turkish_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_turkish_as_ci 253 0 0 Y 0 39 137
+uca1400_turkish_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_turkish_as_cs 253 0 0 Y 0 39 137
+uca1400_turkish_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_turkish_nopad_ai_ci 253 0 0 Y 0 39 137
+uca1400_turkish_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_turkish_nopad_ai_cs 253 0 0 Y 0 39 137
+uca1400_turkish_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_turkish_nopad_as_ci 253 0 0 Y 0 39 137
+uca1400_turkish_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_turkish_nopad_as_cs 253 0 0 Y 0 39 137
+uca1400_turkish_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_czech_ai_ci 253 0 0 Y 0 39 138
+uca1400_czech_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_czech_ai_cs 253 0 0 Y 0 39 138
+uca1400_czech_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_czech_as_ci 253 0 0 Y 0 39 138
+uca1400_czech_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_czech_as_cs 253 0 0 Y 0 39 138
+uca1400_czech_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_czech_nopad_ai_ci 253 0 0 Y 0 39 138
+uca1400_czech_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_czech_nopad_ai_cs 253 0 0 Y 0 39 138
+uca1400_czech_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_czech_nopad_as_ci 253 0 0 Y 0 39 138
+uca1400_czech_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_czech_nopad_as_cs 253 0 0 Y 0 39 138
+uca1400_czech_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_danish_ai_ci 253 0 0 Y 0 39 139
+uca1400_danish_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_danish_ai_cs 253 0 0 Y 0 39 139
+uca1400_danish_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_danish_as_ci 253 0 0 Y 0 39 139
+uca1400_danish_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_danish_as_cs 253 0 0 Y 0 39 139
+uca1400_danish_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_danish_nopad_ai_ci 253 0 0 Y 0 39 139
+uca1400_danish_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_danish_nopad_ai_cs 253 0 0 Y 0 39 139
+uca1400_danish_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_danish_nopad_as_ci 253 0 0 Y 0 39 139
+uca1400_danish_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_danish_nopad_as_cs 253 0 0 Y 0 39 139
+uca1400_danish_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_lithuanian_ai_ci 253 0 0 Y 0 39 140
+uca1400_lithuanian_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_lithuanian_ai_cs 253 0 0 Y 0 39 140
+uca1400_lithuanian_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_lithuanian_as_ci 253 0 0 Y 0 39 140
+uca1400_lithuanian_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_lithuanian_as_cs 253 0 0 Y 0 39 140
+uca1400_lithuanian_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_lithuanian_nopad_ai_ci 253 0 0 Y 0 39 140
+uca1400_lithuanian_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_lithuanian_nopad_ai_cs 253 0 0 Y 0 39 140
+uca1400_lithuanian_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_lithuanian_nopad_as_ci 253 0 0 Y 0 39 140
+uca1400_lithuanian_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_lithuanian_nopad_as_cs 253 0 0 Y 0 39 140
+uca1400_lithuanian_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_slovak_ai_ci 253 0 0 Y 0 39 141
+uca1400_slovak_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_slovak_ai_cs 253 0 0 Y 0 39 141
+uca1400_slovak_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_slovak_as_ci 253 0 0 Y 0 39 141
+uca1400_slovak_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_slovak_as_cs 253 0 0 Y 0 39 141
+uca1400_slovak_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_slovak_nopad_ai_ci 253 0 0 Y 0 39 141
+uca1400_slovak_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_slovak_nopad_ai_cs 253 0 0 Y 0 39 141
+uca1400_slovak_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_slovak_nopad_as_ci 253 0 0 Y 0 39 141
+uca1400_slovak_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_slovak_nopad_as_cs 253 0 0 Y 0 39 141
+uca1400_slovak_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_spanish2_ai_ci 253 0 0 Y 0 39 142
+uca1400_spanish2_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_spanish2_ai_cs 253 0 0 Y 0 39 142
+uca1400_spanish2_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_spanish2_as_ci 253 0 0 Y 0 39 142
+uca1400_spanish2_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_spanish2_as_cs 253 0 0 Y 0 39 142
+uca1400_spanish2_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_spanish2_nopad_ai_ci 253 0 0 Y 0 39 142
+uca1400_spanish2_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_spanish2_nopad_ai_cs 253 0 0 Y 0 39 142
+uca1400_spanish2_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_spanish2_nopad_as_ci 253 0 0 Y 0 39 142
+uca1400_spanish2_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_spanish2_nopad_as_cs 253 0 0 Y 0 39 142
+uca1400_spanish2_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_roman_ai_ci 253 0 0 Y 0 39 143
+uca1400_roman_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_roman_ai_cs 253 0 0 Y 0 39 143
+uca1400_roman_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_roman_as_ci 253 0 0 Y 0 39 143
+uca1400_roman_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_roman_as_cs 253 0 0 Y 0 39 143
+uca1400_roman_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_roman_nopad_ai_ci 253 0 0 Y 0 39 143
+uca1400_roman_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_roman_nopad_ai_cs 253 0 0 Y 0 39 143
+uca1400_roman_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_roman_nopad_as_ci 253 0 0 Y 0 39 143
+uca1400_roman_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_roman_nopad_as_cs 253 0 0 Y 0 39 143
+uca1400_roman_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_persian_ai_ci 253 0 0 Y 0 39 144
+uca1400_persian_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_persian_ai_cs 253 0 0 Y 0 39 144
+uca1400_persian_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_persian_as_ci 253 0 0 Y 0 39 144
+uca1400_persian_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_persian_as_cs 253 0 0 Y 0 39 144
+uca1400_persian_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_persian_nopad_ai_ci 253 0 0 Y 0 39 144
+uca1400_persian_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_persian_nopad_ai_cs 253 0 0 Y 0 39 144
+uca1400_persian_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_persian_nopad_as_ci 253 0 0 Y 0 39 144
+uca1400_persian_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_persian_nopad_as_cs 253 0 0 Y 0 39 144
+uca1400_persian_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_esperanto_ai_ci 253 0 0 Y 0 39 145
+uca1400_esperanto_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_esperanto_ai_cs 253 0 0 Y 0 39 145
+uca1400_esperanto_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_esperanto_as_ci 253 0 0 Y 0 39 145
+uca1400_esperanto_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_esperanto_as_cs 253 0 0 Y 0 39 145
+uca1400_esperanto_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_esperanto_nopad_ai_ci 253 0 0 Y 0 39 145
+uca1400_esperanto_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_esperanto_nopad_ai_cs 253 0 0 Y 0 39 145
+uca1400_esperanto_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_esperanto_nopad_as_ci 253 0 0 Y 0 39 145
+uca1400_esperanto_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_esperanto_nopad_as_cs 253 0 0 Y 0 39 145
+uca1400_esperanto_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_hungarian_ai_ci 253 0 0 Y 0 39 146
+uca1400_hungarian_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_hungarian_ai_cs 253 0 0 Y 0 39 146
+uca1400_hungarian_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_hungarian_as_ci 253 0 0 Y 0 39 146
+uca1400_hungarian_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_hungarian_as_cs 253 0 0 Y 0 39 146
+uca1400_hungarian_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_hungarian_nopad_ai_ci 253 0 0 Y 0 39 146
+uca1400_hungarian_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_hungarian_nopad_ai_cs 253 0 0 Y 0 39 146
+uca1400_hungarian_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_hungarian_nopad_as_ci 253 0 0 Y 0 39 146
+uca1400_hungarian_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_hungarian_nopad_as_cs 253 0 0 Y 0 39 146
+uca1400_hungarian_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_sinhala_ai_ci 253 0 0 Y 0 39 147
+uca1400_sinhala_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_sinhala_ai_cs 253 0 0 Y 0 39 147
+uca1400_sinhala_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_sinhala_as_ci 253 0 0 Y 0 39 147
+uca1400_sinhala_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_sinhala_as_cs 253 0 0 Y 0 39 147
+uca1400_sinhala_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_sinhala_nopad_ai_ci 253 0 0 Y 0 39 147
+uca1400_sinhala_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_sinhala_nopad_ai_cs 253 0 0 Y 0 39 147
+uca1400_sinhala_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_sinhala_nopad_as_ci 253 0 0 Y 0 39 147
+uca1400_sinhala_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_sinhala_nopad_as_cs 253 0 0 Y 0 39 147
+uca1400_sinhala_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_german2_ai_ci 253 0 0 Y 0 39 148
+uca1400_german2_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_german2_ai_cs 253 0 0 Y 0 39 148
+uca1400_german2_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_german2_as_ci 253 0 0 Y 0 39 148
+uca1400_german2_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_german2_as_cs 253 0 0 Y 0 39 148
+uca1400_german2_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_german2_nopad_ai_ci 253 0 0 Y 0 39 148
+uca1400_german2_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_german2_nopad_ai_cs 253 0 0 Y 0 39 148
+uca1400_german2_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_german2_nopad_as_ci 253 0 0 Y 0 39 148
+uca1400_german2_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_german2_nopad_as_cs 253 0 0 Y 0 39 148
+uca1400_german2_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_vietnamese_ai_ci 253 0 0 Y 0 39 151
+uca1400_vietnamese_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_vietnamese_ai_cs 253 0 0 Y 0 39 151
+uca1400_vietnamese_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_vietnamese_as_ci 253 0 0 Y 0 39 151
+uca1400_vietnamese_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_vietnamese_as_cs 253 0 0 Y 0 39 151
+uca1400_vietnamese_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_vietnamese_nopad_ai_ci 253 0 0 Y 0 39 151
+uca1400_vietnamese_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_vietnamese_nopad_ai_cs 253 0 0 Y 0 39 151
+uca1400_vietnamese_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_vietnamese_nopad_as_ci 253 0 0 Y 0 39 151
+uca1400_vietnamese_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_vietnamese_nopad_as_cs 253 0 0 Y 0 39 151
+uca1400_vietnamese_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_croatian_ai_ci 253 0 0 Y 0 39 640
+uca1400_croatian_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_croatian_ai_cs 253 0 0 Y 0 39 640
+uca1400_croatian_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_croatian_as_ci 253 0 0 Y 0 39 640
+uca1400_croatian_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_croatian_as_cs 253 0 0 Y 0 39 640
+uca1400_croatian_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_croatian_nopad_ai_ci 253 0 0 Y 0 39 640
+uca1400_croatian_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_croatian_nopad_ai_cs 253 0 0 Y 0 39 640
+uca1400_croatian_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_croatian_nopad_as_ci 253 0 0 Y 0 39 640
+uca1400_croatian_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_croatian_nopad_as_cs 253 0 0 Y 0 39 640
+uca1400_croatian_nopad_as_cs
+SET NAMES utf8;
+#
+# End of 10.9 tests
+#
diff --git a/mysql-test/main/ctype_ucs2_uca.test b/mysql-test/main/ctype_ucs2_uca.test
index 0aed0956f6c..5d0699401da 100644
--- a/mysql-test/main/ctype_ucs2_uca.test
+++ b/mysql-test/main/ctype_ucs2_uca.test
@@ -23,3 +23,21 @@ SET NAMES utf8;
--echo #
--echo # End of 10.2 tests
--echo #
+
+
+--echo #
+--echo # Start of 10.9 tests
+--echo #
+
+--echo #
+--echo # MDEV-27009 Add UCA-14.0.0 collations
+--echo # Collation IDs in the protocol
+--echo #
+
+SET @charset='ucs2';
+--source include/ctype_uca1400_ids_using_convert.inc
+
+
+--echo #
+--echo # End of 10.9 tests
+--echo #
diff --git a/mysql-test/main/ctype_utf16_uca.result b/mysql-test/main/ctype_utf16_uca.result
index 93a0748adc9..69ebfc4de54 100644
--- a/mysql-test/main/ctype_utf16_uca.result
+++ b/mysql-test/main/ctype_utf16_uca.result
@@ -7939,6 +7939,585 @@ SELECT HEX(c) FROM t1;
HEX(c)
0061006100610061006100610061006100610061
DROP TABLE t1;
+SET NAMES utf8;
#
# End of 10.2 tests
#
+#
+# Start of 10.9 tests
+#
+#
+# MDEV-27009 Add UCA-14.0.0 collations
+# Collation IDs in the protocol
+#
+SET @charset='utf16';
+FOR rec IN (SELECT COLLATION_NAME
+FROM INFORMATION_SCHEMA.COLLATION_CHARACTER_SET_APPLICABILITY
+WHERE CHARACTER_SET_NAME=@charset
+AND COLLATION_NAME RLIKE 'uca1400'
+ ORDER BY ID)
+DO
+SET NAMES utf8mb4;
+SET character_set_results=NULL;
+EXECUTE IMMEDIATE CONCAT('SELECT CONVERT('''' USING ',@charset,')',
+' COLLATE ', rec.COLLATION_NAME,
+' AS ', rec.COLLATION_NAME,
+' LIMIT 0');
+END FOR;
+$$
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_ai_ci 253 0 0 Y 0 39 101
+uca1400_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_ai_cs 253 0 0 Y 0 39 101
+uca1400_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_as_ci 253 0 0 Y 0 39 101
+uca1400_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_as_cs 253 0 0 Y 0 39 101
+uca1400_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_nopad_ai_ci 253 0 0 Y 0 39 101
+uca1400_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_nopad_ai_cs 253 0 0 Y 0 39 101
+uca1400_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_nopad_as_ci 253 0 0 Y 0 39 101
+uca1400_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_nopad_as_cs 253 0 0 Y 0 39 101
+uca1400_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_icelandic_ai_ci 253 0 0 Y 0 39 102
+uca1400_icelandic_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_icelandic_ai_cs 253 0 0 Y 0 39 102
+uca1400_icelandic_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_icelandic_as_ci 253 0 0 Y 0 39 102
+uca1400_icelandic_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_icelandic_as_cs 253 0 0 Y 0 39 102
+uca1400_icelandic_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_icelandic_nopad_ai_ci 253 0 0 Y 0 39 102
+uca1400_icelandic_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_icelandic_nopad_ai_cs 253 0 0 Y 0 39 102
+uca1400_icelandic_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_icelandic_nopad_as_ci 253 0 0 Y 0 39 102
+uca1400_icelandic_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_icelandic_nopad_as_cs 253 0 0 Y 0 39 102
+uca1400_icelandic_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_latvian_ai_ci 253 0 0 Y 0 39 103
+uca1400_latvian_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_latvian_ai_cs 253 0 0 Y 0 39 103
+uca1400_latvian_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_latvian_as_ci 253 0 0 Y 0 39 103
+uca1400_latvian_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_latvian_as_cs 253 0 0 Y 0 39 103
+uca1400_latvian_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_latvian_nopad_ai_ci 253 0 0 Y 0 39 103
+uca1400_latvian_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_latvian_nopad_ai_cs 253 0 0 Y 0 39 103
+uca1400_latvian_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_latvian_nopad_as_ci 253 0 0 Y 0 39 103
+uca1400_latvian_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_latvian_nopad_as_cs 253 0 0 Y 0 39 103
+uca1400_latvian_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_romanian_ai_ci 253 0 0 Y 0 39 104
+uca1400_romanian_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_romanian_ai_cs 253 0 0 Y 0 39 104
+uca1400_romanian_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_romanian_as_ci 253 0 0 Y 0 39 104
+uca1400_romanian_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_romanian_as_cs 253 0 0 Y 0 39 104
+uca1400_romanian_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_romanian_nopad_ai_ci 253 0 0 Y 0 39 104
+uca1400_romanian_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_romanian_nopad_ai_cs 253 0 0 Y 0 39 104
+uca1400_romanian_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_romanian_nopad_as_ci 253 0 0 Y 0 39 104
+uca1400_romanian_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_romanian_nopad_as_cs 253 0 0 Y 0 39 104
+uca1400_romanian_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_slovenian_ai_ci 253 0 0 Y 0 39 105
+uca1400_slovenian_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_slovenian_ai_cs 253 0 0 Y 0 39 105
+uca1400_slovenian_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_slovenian_as_ci 253 0 0 Y 0 39 105
+uca1400_slovenian_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_slovenian_as_cs 253 0 0 Y 0 39 105
+uca1400_slovenian_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_slovenian_nopad_ai_ci 253 0 0 Y 0 39 105
+uca1400_slovenian_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_slovenian_nopad_ai_cs 253 0 0 Y 0 39 105
+uca1400_slovenian_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_slovenian_nopad_as_ci 253 0 0 Y 0 39 105
+uca1400_slovenian_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_slovenian_nopad_as_cs 253 0 0 Y 0 39 105
+uca1400_slovenian_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_polish_ai_ci 253 0 0 Y 0 39 106
+uca1400_polish_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_polish_ai_cs 253 0 0 Y 0 39 106
+uca1400_polish_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_polish_as_ci 253 0 0 Y 0 39 106
+uca1400_polish_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_polish_as_cs 253 0 0 Y 0 39 106
+uca1400_polish_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_polish_nopad_ai_ci 253 0 0 Y 0 39 106
+uca1400_polish_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_polish_nopad_ai_cs 253 0 0 Y 0 39 106
+uca1400_polish_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_polish_nopad_as_ci 253 0 0 Y 0 39 106
+uca1400_polish_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_polish_nopad_as_cs 253 0 0 Y 0 39 106
+uca1400_polish_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_estonian_ai_ci 253 0 0 Y 0 39 107
+uca1400_estonian_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_estonian_ai_cs 253 0 0 Y 0 39 107
+uca1400_estonian_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_estonian_as_ci 253 0 0 Y 0 39 107
+uca1400_estonian_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_estonian_as_cs 253 0 0 Y 0 39 107
+uca1400_estonian_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_estonian_nopad_ai_ci 253 0 0 Y 0 39 107
+uca1400_estonian_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_estonian_nopad_ai_cs 253 0 0 Y 0 39 107
+uca1400_estonian_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_estonian_nopad_as_ci 253 0 0 Y 0 39 107
+uca1400_estonian_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_estonian_nopad_as_cs 253 0 0 Y 0 39 107
+uca1400_estonian_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_spanish_ai_ci 253 0 0 Y 0 39 108
+uca1400_spanish_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_spanish_ai_cs 253 0 0 Y 0 39 108
+uca1400_spanish_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_spanish_as_ci 253 0 0 Y 0 39 108
+uca1400_spanish_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_spanish_as_cs 253 0 0 Y 0 39 108
+uca1400_spanish_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_spanish_nopad_ai_ci 253 0 0 Y 0 39 108
+uca1400_spanish_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_spanish_nopad_ai_cs 253 0 0 Y 0 39 108
+uca1400_spanish_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_spanish_nopad_as_ci 253 0 0 Y 0 39 108
+uca1400_spanish_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_spanish_nopad_as_cs 253 0 0 Y 0 39 108
+uca1400_spanish_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_swedish_ai_ci 253 0 0 Y 0 39 109
+uca1400_swedish_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_swedish_ai_cs 253 0 0 Y 0 39 109
+uca1400_swedish_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_swedish_as_ci 253 0 0 Y 0 39 109
+uca1400_swedish_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_swedish_as_cs 253 0 0 Y 0 39 109
+uca1400_swedish_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_swedish_nopad_ai_ci 253 0 0 Y 0 39 109
+uca1400_swedish_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_swedish_nopad_ai_cs 253 0 0 Y 0 39 109
+uca1400_swedish_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_swedish_nopad_as_ci 253 0 0 Y 0 39 109
+uca1400_swedish_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_swedish_nopad_as_cs 253 0 0 Y 0 39 109
+uca1400_swedish_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_turkish_ai_ci 253 0 0 Y 0 39 110
+uca1400_turkish_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_turkish_ai_cs 253 0 0 Y 0 39 110
+uca1400_turkish_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_turkish_as_ci 253 0 0 Y 0 39 110
+uca1400_turkish_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_turkish_as_cs 253 0 0 Y 0 39 110
+uca1400_turkish_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_turkish_nopad_ai_ci 253 0 0 Y 0 39 110
+uca1400_turkish_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_turkish_nopad_ai_cs 253 0 0 Y 0 39 110
+uca1400_turkish_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_turkish_nopad_as_ci 253 0 0 Y 0 39 110
+uca1400_turkish_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_turkish_nopad_as_cs 253 0 0 Y 0 39 110
+uca1400_turkish_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_czech_ai_ci 253 0 0 Y 0 39 111
+uca1400_czech_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_czech_ai_cs 253 0 0 Y 0 39 111
+uca1400_czech_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_czech_as_ci 253 0 0 Y 0 39 111
+uca1400_czech_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_czech_as_cs 253 0 0 Y 0 39 111
+uca1400_czech_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_czech_nopad_ai_ci 253 0 0 Y 0 39 111
+uca1400_czech_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_czech_nopad_ai_cs 253 0 0 Y 0 39 111
+uca1400_czech_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_czech_nopad_as_ci 253 0 0 Y 0 39 111
+uca1400_czech_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_czech_nopad_as_cs 253 0 0 Y 0 39 111
+uca1400_czech_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_danish_ai_ci 253 0 0 Y 0 39 112
+uca1400_danish_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_danish_ai_cs 253 0 0 Y 0 39 112
+uca1400_danish_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_danish_as_ci 253 0 0 Y 0 39 112
+uca1400_danish_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_danish_as_cs 253 0 0 Y 0 39 112
+uca1400_danish_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_danish_nopad_ai_ci 253 0 0 Y 0 39 112
+uca1400_danish_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_danish_nopad_ai_cs 253 0 0 Y 0 39 112
+uca1400_danish_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_danish_nopad_as_ci 253 0 0 Y 0 39 112
+uca1400_danish_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_danish_nopad_as_cs 253 0 0 Y 0 39 112
+uca1400_danish_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_lithuanian_ai_ci 253 0 0 Y 0 39 113
+uca1400_lithuanian_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_lithuanian_ai_cs 253 0 0 Y 0 39 113
+uca1400_lithuanian_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_lithuanian_as_ci 253 0 0 Y 0 39 113
+uca1400_lithuanian_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_lithuanian_as_cs 253 0 0 Y 0 39 113
+uca1400_lithuanian_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_lithuanian_nopad_ai_ci 253 0 0 Y 0 39 113
+uca1400_lithuanian_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_lithuanian_nopad_ai_cs 253 0 0 Y 0 39 113
+uca1400_lithuanian_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_lithuanian_nopad_as_ci 253 0 0 Y 0 39 113
+uca1400_lithuanian_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_lithuanian_nopad_as_cs 253 0 0 Y 0 39 113
+uca1400_lithuanian_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_slovak_ai_ci 253 0 0 Y 0 39 114
+uca1400_slovak_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_slovak_ai_cs 253 0 0 Y 0 39 114
+uca1400_slovak_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_slovak_as_ci 253 0 0 Y 0 39 114
+uca1400_slovak_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_slovak_as_cs 253 0 0 Y 0 39 114
+uca1400_slovak_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_slovak_nopad_ai_ci 253 0 0 Y 0 39 114
+uca1400_slovak_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_slovak_nopad_ai_cs 253 0 0 Y 0 39 114
+uca1400_slovak_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_slovak_nopad_as_ci 253 0 0 Y 0 39 114
+uca1400_slovak_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_slovak_nopad_as_cs 253 0 0 Y 0 39 114
+uca1400_slovak_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_spanish2_ai_ci 253 0 0 Y 0 39 115
+uca1400_spanish2_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_spanish2_ai_cs 253 0 0 Y 0 39 115
+uca1400_spanish2_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_spanish2_as_ci 253 0 0 Y 0 39 115
+uca1400_spanish2_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_spanish2_as_cs 253 0 0 Y 0 39 115
+uca1400_spanish2_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_spanish2_nopad_ai_ci 253 0 0 Y 0 39 115
+uca1400_spanish2_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_spanish2_nopad_ai_cs 253 0 0 Y 0 39 115
+uca1400_spanish2_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_spanish2_nopad_as_ci 253 0 0 Y 0 39 115
+uca1400_spanish2_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_spanish2_nopad_as_cs 253 0 0 Y 0 39 115
+uca1400_spanish2_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_roman_ai_ci 253 0 0 Y 0 39 116
+uca1400_roman_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_roman_ai_cs 253 0 0 Y 0 39 116
+uca1400_roman_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_roman_as_ci 253 0 0 Y 0 39 116
+uca1400_roman_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_roman_as_cs 253 0 0 Y 0 39 116
+uca1400_roman_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_roman_nopad_ai_ci 253 0 0 Y 0 39 116
+uca1400_roman_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_roman_nopad_ai_cs 253 0 0 Y 0 39 116
+uca1400_roman_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_roman_nopad_as_ci 253 0 0 Y 0 39 116
+uca1400_roman_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_roman_nopad_as_cs 253 0 0 Y 0 39 116
+uca1400_roman_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_persian_ai_ci 253 0 0 Y 0 39 117
+uca1400_persian_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_persian_ai_cs 253 0 0 Y 0 39 117
+uca1400_persian_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_persian_as_ci 253 0 0 Y 0 39 117
+uca1400_persian_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_persian_as_cs 253 0 0 Y 0 39 117
+uca1400_persian_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_persian_nopad_ai_ci 253 0 0 Y 0 39 117
+uca1400_persian_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_persian_nopad_ai_cs 253 0 0 Y 0 39 117
+uca1400_persian_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_persian_nopad_as_ci 253 0 0 Y 0 39 117
+uca1400_persian_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_persian_nopad_as_cs 253 0 0 Y 0 39 117
+uca1400_persian_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_esperanto_ai_ci 253 0 0 Y 0 39 118
+uca1400_esperanto_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_esperanto_ai_cs 253 0 0 Y 0 39 118
+uca1400_esperanto_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_esperanto_as_ci 253 0 0 Y 0 39 118
+uca1400_esperanto_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_esperanto_as_cs 253 0 0 Y 0 39 118
+uca1400_esperanto_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_esperanto_nopad_ai_ci 253 0 0 Y 0 39 118
+uca1400_esperanto_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_esperanto_nopad_ai_cs 253 0 0 Y 0 39 118
+uca1400_esperanto_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_esperanto_nopad_as_ci 253 0 0 Y 0 39 118
+uca1400_esperanto_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_esperanto_nopad_as_cs 253 0 0 Y 0 39 118
+uca1400_esperanto_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_hungarian_ai_ci 253 0 0 Y 0 39 119
+uca1400_hungarian_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_hungarian_ai_cs 253 0 0 Y 0 39 119
+uca1400_hungarian_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_hungarian_as_ci 253 0 0 Y 0 39 119
+uca1400_hungarian_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_hungarian_as_cs 253 0 0 Y 0 39 119
+uca1400_hungarian_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_hungarian_nopad_ai_ci 253 0 0 Y 0 39 119
+uca1400_hungarian_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_hungarian_nopad_ai_cs 253 0 0 Y 0 39 119
+uca1400_hungarian_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_hungarian_nopad_as_ci 253 0 0 Y 0 39 119
+uca1400_hungarian_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_hungarian_nopad_as_cs 253 0 0 Y 0 39 119
+uca1400_hungarian_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_sinhala_ai_ci 253 0 0 Y 0 39 120
+uca1400_sinhala_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_sinhala_ai_cs 253 0 0 Y 0 39 120
+uca1400_sinhala_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_sinhala_as_ci 253 0 0 Y 0 39 120
+uca1400_sinhala_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_sinhala_as_cs 253 0 0 Y 0 39 120
+uca1400_sinhala_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_sinhala_nopad_ai_ci 253 0 0 Y 0 39 120
+uca1400_sinhala_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_sinhala_nopad_ai_cs 253 0 0 Y 0 39 120
+uca1400_sinhala_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_sinhala_nopad_as_ci 253 0 0 Y 0 39 120
+uca1400_sinhala_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_sinhala_nopad_as_cs 253 0 0 Y 0 39 120
+uca1400_sinhala_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_german2_ai_ci 253 0 0 Y 0 39 121
+uca1400_german2_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_german2_ai_cs 253 0 0 Y 0 39 121
+uca1400_german2_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_german2_as_ci 253 0 0 Y 0 39 121
+uca1400_german2_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_german2_as_cs 253 0 0 Y 0 39 121
+uca1400_german2_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_german2_nopad_ai_ci 253 0 0 Y 0 39 121
+uca1400_german2_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_german2_nopad_ai_cs 253 0 0 Y 0 39 121
+uca1400_german2_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_german2_nopad_as_ci 253 0 0 Y 0 39 121
+uca1400_german2_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_german2_nopad_as_cs 253 0 0 Y 0 39 121
+uca1400_german2_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_vietnamese_ai_ci 253 0 0 Y 0 39 124
+uca1400_vietnamese_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_vietnamese_ai_cs 253 0 0 Y 0 39 124
+uca1400_vietnamese_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_vietnamese_as_ci 253 0 0 Y 0 39 124
+uca1400_vietnamese_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_vietnamese_as_cs 253 0 0 Y 0 39 124
+uca1400_vietnamese_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_vietnamese_nopad_ai_ci 253 0 0 Y 0 39 124
+uca1400_vietnamese_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_vietnamese_nopad_ai_cs 253 0 0 Y 0 39 124
+uca1400_vietnamese_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_vietnamese_nopad_as_ci 253 0 0 Y 0 39 124
+uca1400_vietnamese_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_vietnamese_nopad_as_cs 253 0 0 Y 0 39 124
+uca1400_vietnamese_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_croatian_ai_ci 253 0 0 Y 0 39 672
+uca1400_croatian_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_croatian_ai_cs 253 0 0 Y 0 39 672
+uca1400_croatian_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_croatian_as_ci 253 0 0 Y 0 39 672
+uca1400_croatian_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_croatian_as_cs 253 0 0 Y 0 39 672
+uca1400_croatian_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_croatian_nopad_ai_ci 253 0 0 Y 0 39 672
+uca1400_croatian_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_croatian_nopad_ai_cs 253 0 0 Y 0 39 672
+uca1400_croatian_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_croatian_nopad_as_ci 253 0 0 Y 0 39 672
+uca1400_croatian_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_croatian_nopad_as_cs 253 0 0 Y 0 39 672
+uca1400_croatian_nopad_as_cs
+SET NAMES utf8;
+#
+# End of 10.9 tests
+#
diff --git a/mysql-test/main/ctype_utf16_uca.test b/mysql-test/main/ctype_utf16_uca.test
index 9dff7b10c16..0a03c4fa57b 100644
--- a/mysql-test/main/ctype_utf16_uca.test
+++ b/mysql-test/main/ctype_utf16_uca.test
@@ -268,7 +268,26 @@ INSERT INTO t1 (c) VALUES (1);
SELECT HEX(c) FROM t1;
DROP TABLE t1;
+SET NAMES utf8;
+
--enable_service_connection
--echo #
--echo # End of 10.2 tests
--echo #
+
+
+--echo #
+--echo # Start of 10.9 tests
+--echo #
+
+--echo #
+--echo # MDEV-27009 Add UCA-14.0.0 collations
+--echo # Collation IDs in the protocol
+--echo #
+
+SET @charset='utf16';
+--source include/ctype_uca1400_ids_using_convert.inc
+
+--echo #
+--echo # End of 10.9 tests
+--echo #
diff --git a/mysql-test/main/ctype_utf32_uca.result b/mysql-test/main/ctype_utf32_uca.result
index a960325afe9..5468beafd32 100644
--- a/mysql-test/main/ctype_utf32_uca.result
+++ b/mysql-test/main/ctype_utf32_uca.result
@@ -7973,6 +7973,585 @@ t1 CREATE TABLE `t1` (
`c2` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`c2`))
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
+SET NAMES utf8;
#
# End of 10.4 tests
#
+#
+# Start of 10.9 tests
+#
+#
+# MDEV-27009 Add UCA-14.0.0 collations
+# Collation IDs in the protocol
+#
+SET @charset='utf32';
+FOR rec IN (SELECT COLLATION_NAME
+FROM INFORMATION_SCHEMA.COLLATION_CHARACTER_SET_APPLICABILITY
+WHERE CHARACTER_SET_NAME=@charset
+AND COLLATION_NAME RLIKE 'uca1400'
+ ORDER BY ID)
+DO
+SET NAMES utf8mb4;
+SET character_set_results=NULL;
+EXECUTE IMMEDIATE CONCAT('SELECT CONVERT('''' USING ',@charset,')',
+' COLLATE ', rec.COLLATION_NAME,
+' AS ', rec.COLLATION_NAME,
+' LIMIT 0');
+END FOR;
+$$
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_ai_ci 253 0 0 Y 0 39 160
+uca1400_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_ai_cs 253 0 0 Y 0 39 160
+uca1400_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_as_ci 253 0 0 Y 0 39 160
+uca1400_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_as_cs 253 0 0 Y 0 39 160
+uca1400_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_nopad_ai_ci 253 0 0 Y 0 39 160
+uca1400_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_nopad_ai_cs 253 0 0 Y 0 39 160
+uca1400_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_nopad_as_ci 253 0 0 Y 0 39 160
+uca1400_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_nopad_as_cs 253 0 0 Y 0 39 160
+uca1400_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_icelandic_ai_ci 253 0 0 Y 0 39 161
+uca1400_icelandic_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_icelandic_ai_cs 253 0 0 Y 0 39 161
+uca1400_icelandic_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_icelandic_as_ci 253 0 0 Y 0 39 161
+uca1400_icelandic_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_icelandic_as_cs 253 0 0 Y 0 39 161
+uca1400_icelandic_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_icelandic_nopad_ai_ci 253 0 0 Y 0 39 161
+uca1400_icelandic_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_icelandic_nopad_ai_cs 253 0 0 Y 0 39 161
+uca1400_icelandic_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_icelandic_nopad_as_ci 253 0 0 Y 0 39 161
+uca1400_icelandic_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_icelandic_nopad_as_cs 253 0 0 Y 0 39 161
+uca1400_icelandic_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_latvian_ai_ci 253 0 0 Y 0 39 162
+uca1400_latvian_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_latvian_ai_cs 253 0 0 Y 0 39 162
+uca1400_latvian_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_latvian_as_ci 253 0 0 Y 0 39 162
+uca1400_latvian_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_latvian_as_cs 253 0 0 Y 0 39 162
+uca1400_latvian_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_latvian_nopad_ai_ci 253 0 0 Y 0 39 162
+uca1400_latvian_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_latvian_nopad_ai_cs 253 0 0 Y 0 39 162
+uca1400_latvian_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_latvian_nopad_as_ci 253 0 0 Y 0 39 162
+uca1400_latvian_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_latvian_nopad_as_cs 253 0 0 Y 0 39 162
+uca1400_latvian_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_romanian_ai_ci 253 0 0 Y 0 39 163
+uca1400_romanian_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_romanian_ai_cs 253 0 0 Y 0 39 163
+uca1400_romanian_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_romanian_as_ci 253 0 0 Y 0 39 163
+uca1400_romanian_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_romanian_as_cs 253 0 0 Y 0 39 163
+uca1400_romanian_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_romanian_nopad_ai_ci 253 0 0 Y 0 39 163
+uca1400_romanian_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_romanian_nopad_ai_cs 253 0 0 Y 0 39 163
+uca1400_romanian_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_romanian_nopad_as_ci 253 0 0 Y 0 39 163
+uca1400_romanian_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_romanian_nopad_as_cs 253 0 0 Y 0 39 163
+uca1400_romanian_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_slovenian_ai_ci 253 0 0 Y 0 39 164
+uca1400_slovenian_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_slovenian_ai_cs 253 0 0 Y 0 39 164
+uca1400_slovenian_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_slovenian_as_ci 253 0 0 Y 0 39 164
+uca1400_slovenian_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_slovenian_as_cs 253 0 0 Y 0 39 164
+uca1400_slovenian_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_slovenian_nopad_ai_ci 253 0 0 Y 0 39 164
+uca1400_slovenian_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_slovenian_nopad_ai_cs 253 0 0 Y 0 39 164
+uca1400_slovenian_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_slovenian_nopad_as_ci 253 0 0 Y 0 39 164
+uca1400_slovenian_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_slovenian_nopad_as_cs 253 0 0 Y 0 39 164
+uca1400_slovenian_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_polish_ai_ci 253 0 0 Y 0 39 165
+uca1400_polish_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_polish_ai_cs 253 0 0 Y 0 39 165
+uca1400_polish_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_polish_as_ci 253 0 0 Y 0 39 165
+uca1400_polish_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_polish_as_cs 253 0 0 Y 0 39 165
+uca1400_polish_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_polish_nopad_ai_ci 253 0 0 Y 0 39 165
+uca1400_polish_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_polish_nopad_ai_cs 253 0 0 Y 0 39 165
+uca1400_polish_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_polish_nopad_as_ci 253 0 0 Y 0 39 165
+uca1400_polish_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_polish_nopad_as_cs 253 0 0 Y 0 39 165
+uca1400_polish_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_estonian_ai_ci 253 0 0 Y 0 39 166
+uca1400_estonian_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_estonian_ai_cs 253 0 0 Y 0 39 166
+uca1400_estonian_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_estonian_as_ci 253 0 0 Y 0 39 166
+uca1400_estonian_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_estonian_as_cs 253 0 0 Y 0 39 166
+uca1400_estonian_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_estonian_nopad_ai_ci 253 0 0 Y 0 39 166
+uca1400_estonian_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_estonian_nopad_ai_cs 253 0 0 Y 0 39 166
+uca1400_estonian_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_estonian_nopad_as_ci 253 0 0 Y 0 39 166
+uca1400_estonian_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_estonian_nopad_as_cs 253 0 0 Y 0 39 166
+uca1400_estonian_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_spanish_ai_ci 253 0 0 Y 0 39 167
+uca1400_spanish_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_spanish_ai_cs 253 0 0 Y 0 39 167
+uca1400_spanish_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_spanish_as_ci 253 0 0 Y 0 39 167
+uca1400_spanish_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_spanish_as_cs 253 0 0 Y 0 39 167
+uca1400_spanish_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_spanish_nopad_ai_ci 253 0 0 Y 0 39 167
+uca1400_spanish_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_spanish_nopad_ai_cs 253 0 0 Y 0 39 167
+uca1400_spanish_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_spanish_nopad_as_ci 253 0 0 Y 0 39 167
+uca1400_spanish_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_spanish_nopad_as_cs 253 0 0 Y 0 39 167
+uca1400_spanish_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_swedish_ai_ci 253 0 0 Y 0 39 168
+uca1400_swedish_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_swedish_ai_cs 253 0 0 Y 0 39 168
+uca1400_swedish_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_swedish_as_ci 253 0 0 Y 0 39 168
+uca1400_swedish_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_swedish_as_cs 253 0 0 Y 0 39 168
+uca1400_swedish_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_swedish_nopad_ai_ci 253 0 0 Y 0 39 168
+uca1400_swedish_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_swedish_nopad_ai_cs 253 0 0 Y 0 39 168
+uca1400_swedish_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_swedish_nopad_as_ci 253 0 0 Y 0 39 168
+uca1400_swedish_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_swedish_nopad_as_cs 253 0 0 Y 0 39 168
+uca1400_swedish_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_turkish_ai_ci 253 0 0 Y 0 39 169
+uca1400_turkish_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_turkish_ai_cs 253 0 0 Y 0 39 169
+uca1400_turkish_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_turkish_as_ci 253 0 0 Y 0 39 169
+uca1400_turkish_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_turkish_as_cs 253 0 0 Y 0 39 169
+uca1400_turkish_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_turkish_nopad_ai_ci 253 0 0 Y 0 39 169
+uca1400_turkish_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_turkish_nopad_ai_cs 253 0 0 Y 0 39 169
+uca1400_turkish_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_turkish_nopad_as_ci 253 0 0 Y 0 39 169
+uca1400_turkish_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_turkish_nopad_as_cs 253 0 0 Y 0 39 169
+uca1400_turkish_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_czech_ai_ci 253 0 0 Y 0 39 170
+uca1400_czech_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_czech_ai_cs 253 0 0 Y 0 39 170
+uca1400_czech_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_czech_as_ci 253 0 0 Y 0 39 170
+uca1400_czech_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_czech_as_cs 253 0 0 Y 0 39 170
+uca1400_czech_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_czech_nopad_ai_ci 253 0 0 Y 0 39 170
+uca1400_czech_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_czech_nopad_ai_cs 253 0 0 Y 0 39 170
+uca1400_czech_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_czech_nopad_as_ci 253 0 0 Y 0 39 170
+uca1400_czech_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_czech_nopad_as_cs 253 0 0 Y 0 39 170
+uca1400_czech_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_danish_ai_ci 253 0 0 Y 0 39 171
+uca1400_danish_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_danish_ai_cs 253 0 0 Y 0 39 171
+uca1400_danish_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_danish_as_ci 253 0 0 Y 0 39 171
+uca1400_danish_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_danish_as_cs 253 0 0 Y 0 39 171
+uca1400_danish_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_danish_nopad_ai_ci 253 0 0 Y 0 39 171
+uca1400_danish_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_danish_nopad_ai_cs 253 0 0 Y 0 39 171
+uca1400_danish_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_danish_nopad_as_ci 253 0 0 Y 0 39 171
+uca1400_danish_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_danish_nopad_as_cs 253 0 0 Y 0 39 171
+uca1400_danish_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_lithuanian_ai_ci 253 0 0 Y 0 39 172
+uca1400_lithuanian_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_lithuanian_ai_cs 253 0 0 Y 0 39 172
+uca1400_lithuanian_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_lithuanian_as_ci 253 0 0 Y 0 39 172
+uca1400_lithuanian_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_lithuanian_as_cs 253 0 0 Y 0 39 172
+uca1400_lithuanian_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_lithuanian_nopad_ai_ci 253 0 0 Y 0 39 172
+uca1400_lithuanian_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_lithuanian_nopad_ai_cs 253 0 0 Y 0 39 172
+uca1400_lithuanian_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_lithuanian_nopad_as_ci 253 0 0 Y 0 39 172
+uca1400_lithuanian_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_lithuanian_nopad_as_cs 253 0 0 Y 0 39 172
+uca1400_lithuanian_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_slovak_ai_ci 253 0 0 Y 0 39 173
+uca1400_slovak_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_slovak_ai_cs 253 0 0 Y 0 39 173
+uca1400_slovak_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_slovak_as_ci 253 0 0 Y 0 39 173
+uca1400_slovak_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_slovak_as_cs 253 0 0 Y 0 39 173
+uca1400_slovak_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_slovak_nopad_ai_ci 253 0 0 Y 0 39 173
+uca1400_slovak_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_slovak_nopad_ai_cs 253 0 0 Y 0 39 173
+uca1400_slovak_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_slovak_nopad_as_ci 253 0 0 Y 0 39 173
+uca1400_slovak_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_slovak_nopad_as_cs 253 0 0 Y 0 39 173
+uca1400_slovak_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_spanish2_ai_ci 253 0 0 Y 0 39 174
+uca1400_spanish2_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_spanish2_ai_cs 253 0 0 Y 0 39 174
+uca1400_spanish2_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_spanish2_as_ci 253 0 0 Y 0 39 174
+uca1400_spanish2_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_spanish2_as_cs 253 0 0 Y 0 39 174
+uca1400_spanish2_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_spanish2_nopad_ai_ci 253 0 0 Y 0 39 174
+uca1400_spanish2_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_spanish2_nopad_ai_cs 253 0 0 Y 0 39 174
+uca1400_spanish2_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_spanish2_nopad_as_ci 253 0 0 Y 0 39 174
+uca1400_spanish2_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_spanish2_nopad_as_cs 253 0 0 Y 0 39 174
+uca1400_spanish2_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_roman_ai_ci 253 0 0 Y 0 39 175
+uca1400_roman_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_roman_ai_cs 253 0 0 Y 0 39 175
+uca1400_roman_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_roman_as_ci 253 0 0 Y 0 39 175
+uca1400_roman_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_roman_as_cs 253 0 0 Y 0 39 175
+uca1400_roman_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_roman_nopad_ai_ci 253 0 0 Y 0 39 175
+uca1400_roman_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_roman_nopad_ai_cs 253 0 0 Y 0 39 175
+uca1400_roman_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_roman_nopad_as_ci 253 0 0 Y 0 39 175
+uca1400_roman_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_roman_nopad_as_cs 253 0 0 Y 0 39 175
+uca1400_roman_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_persian_ai_ci 253 0 0 Y 0 39 176
+uca1400_persian_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_persian_ai_cs 253 0 0 Y 0 39 176
+uca1400_persian_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_persian_as_ci 253 0 0 Y 0 39 176
+uca1400_persian_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_persian_as_cs 253 0 0 Y 0 39 176
+uca1400_persian_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_persian_nopad_ai_ci 253 0 0 Y 0 39 176
+uca1400_persian_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_persian_nopad_ai_cs 253 0 0 Y 0 39 176
+uca1400_persian_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_persian_nopad_as_ci 253 0 0 Y 0 39 176
+uca1400_persian_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_persian_nopad_as_cs 253 0 0 Y 0 39 176
+uca1400_persian_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_esperanto_ai_ci 253 0 0 Y 0 39 177
+uca1400_esperanto_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_esperanto_ai_cs 253 0 0 Y 0 39 177
+uca1400_esperanto_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_esperanto_as_ci 253 0 0 Y 0 39 177
+uca1400_esperanto_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_esperanto_as_cs 253 0 0 Y 0 39 177
+uca1400_esperanto_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_esperanto_nopad_ai_ci 253 0 0 Y 0 39 177
+uca1400_esperanto_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_esperanto_nopad_ai_cs 253 0 0 Y 0 39 177
+uca1400_esperanto_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_esperanto_nopad_as_ci 253 0 0 Y 0 39 177
+uca1400_esperanto_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_esperanto_nopad_as_cs 253 0 0 Y 0 39 177
+uca1400_esperanto_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_hungarian_ai_ci 253 0 0 Y 0 39 178
+uca1400_hungarian_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_hungarian_ai_cs 253 0 0 Y 0 39 178
+uca1400_hungarian_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_hungarian_as_ci 253 0 0 Y 0 39 178
+uca1400_hungarian_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_hungarian_as_cs 253 0 0 Y 0 39 178
+uca1400_hungarian_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_hungarian_nopad_ai_ci 253 0 0 Y 0 39 178
+uca1400_hungarian_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_hungarian_nopad_ai_cs 253 0 0 Y 0 39 178
+uca1400_hungarian_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_hungarian_nopad_as_ci 253 0 0 Y 0 39 178
+uca1400_hungarian_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_hungarian_nopad_as_cs 253 0 0 Y 0 39 178
+uca1400_hungarian_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_sinhala_ai_ci 253 0 0 Y 0 39 179
+uca1400_sinhala_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_sinhala_ai_cs 253 0 0 Y 0 39 179
+uca1400_sinhala_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_sinhala_as_ci 253 0 0 Y 0 39 179
+uca1400_sinhala_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_sinhala_as_cs 253 0 0 Y 0 39 179
+uca1400_sinhala_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_sinhala_nopad_ai_ci 253 0 0 Y 0 39 179
+uca1400_sinhala_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_sinhala_nopad_ai_cs 253 0 0 Y 0 39 179
+uca1400_sinhala_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_sinhala_nopad_as_ci 253 0 0 Y 0 39 179
+uca1400_sinhala_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_sinhala_nopad_as_cs 253 0 0 Y 0 39 179
+uca1400_sinhala_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_german2_ai_ci 253 0 0 Y 0 39 180
+uca1400_german2_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_german2_ai_cs 253 0 0 Y 0 39 180
+uca1400_german2_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_german2_as_ci 253 0 0 Y 0 39 180
+uca1400_german2_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_german2_as_cs 253 0 0 Y 0 39 180
+uca1400_german2_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_german2_nopad_ai_ci 253 0 0 Y 0 39 180
+uca1400_german2_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_german2_nopad_ai_cs 253 0 0 Y 0 39 180
+uca1400_german2_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_german2_nopad_as_ci 253 0 0 Y 0 39 180
+uca1400_german2_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_german2_nopad_as_cs 253 0 0 Y 0 39 180
+uca1400_german2_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_vietnamese_ai_ci 253 0 0 Y 0 39 183
+uca1400_vietnamese_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_vietnamese_ai_cs 253 0 0 Y 0 39 183
+uca1400_vietnamese_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_vietnamese_as_ci 253 0 0 Y 0 39 183
+uca1400_vietnamese_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_vietnamese_as_cs 253 0 0 Y 0 39 183
+uca1400_vietnamese_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_vietnamese_nopad_ai_ci 253 0 0 Y 0 39 183
+uca1400_vietnamese_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_vietnamese_nopad_ai_cs 253 0 0 Y 0 39 183
+uca1400_vietnamese_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_vietnamese_nopad_as_ci 253 0 0 Y 0 39 183
+uca1400_vietnamese_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_vietnamese_nopad_as_cs 253 0 0 Y 0 39 183
+uca1400_vietnamese_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_croatian_ai_ci 253 0 0 Y 0 39 736
+uca1400_croatian_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_croatian_ai_cs 253 0 0 Y 0 39 736
+uca1400_croatian_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_croatian_as_ci 253 0 0 Y 0 39 736
+uca1400_croatian_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_croatian_as_cs 253 0 0 Y 0 39 736
+uca1400_croatian_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_croatian_nopad_ai_ci 253 0 0 Y 0 39 736
+uca1400_croatian_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_croatian_nopad_ai_cs 253 0 0 Y 0 39 736
+uca1400_croatian_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_croatian_nopad_as_ci 253 0 0 Y 0 39 736
+uca1400_croatian_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def uca1400_croatian_nopad_as_cs 253 0 0 Y 0 39 736
+uca1400_croatian_nopad_as_cs
+SET NAMES utf8;
+#
+# End of 10.9 tests
+#
diff --git a/mysql-test/main/ctype_utf32_uca.test b/mysql-test/main/ctype_utf32_uca.test
index 658a03abacb..dd60feaf8e2 100644
--- a/mysql-test/main/ctype_utf32_uca.test
+++ b/mysql-test/main/ctype_utf32_uca.test
@@ -323,7 +323,25 @@ SET @@SESSION.collation_connection=utf32_estonian_ci;
CREATE TABLE t1(c1 SET('a') COLLATE 'Binary',c2 JSON);
SHOW CREATE TABLE t1;
DROP TABLE t1;
+SET NAMES utf8;
--echo #
--echo # End of 10.4 tests
--echo #
+
+
+--echo #
+--echo # Start of 10.9 tests
+--echo #
+
+--echo #
+--echo # MDEV-27009 Add UCA-14.0.0 collations
+--echo # Collation IDs in the protocol
+--echo #
+
+SET @charset='utf32';
+--source include/ctype_uca1400_ids_using_convert.inc
+
+--echo #
+--echo # End of 10.9 tests
+--echo #
diff --git a/mysql-test/main/ctype_utf8.result b/mysql-test/main/ctype_utf8.result
index 92e8d0b9027..42ab1decc4e 100644
--- a/mysql-test/main/ctype_utf8.result
+++ b/mysql-test/main/ctype_utf8.result
@@ -6130,7 +6130,7 @@ DROP TABLE t1, t2;
# MDEV-8630 Datetime value dropped in "INSERT ... SELECT ... ON DUPLICATE KEY"
#
SET NAMES utf8;
-CREATE TABLE t1 (id2 int, ts timestamp);
+CREATE TABLE t1 (id2 int, ts timestamp not null);
INSERT INTO t1 VALUES (1,'2012-06-11 15:17:34'),(2,'2012-06-11 15:18:24');
CREATE TABLE t2 AS SELECT
COALESCE(ts, 0) AS c0,
diff --git a/mysql-test/main/ctype_utf8.test b/mysql-test/main/ctype_utf8.test
index 363871529da..a875fe51f3a 100644
--- a/mysql-test/main/ctype_utf8.test
+++ b/mysql-test/main/ctype_utf8.test
@@ -1669,7 +1669,7 @@ DROP TABLE t1, t2;
--echo # MDEV-8630 Datetime value dropped in "INSERT ... SELECT ... ON DUPLICATE KEY"
--echo #
SET NAMES utf8;
-CREATE TABLE t1 (id2 int, ts timestamp);
+CREATE TABLE t1 (id2 int, ts timestamp not null);
INSERT INTO t1 VALUES (1,'2012-06-11 15:17:34'),(2,'2012-06-11 15:18:24');
CREATE TABLE t2 AS SELECT
COALESCE(ts, 0) AS c0,
diff --git a/mysql-test/main/ctype_utf8_uca.result b/mysql-test/main/ctype_utf8_uca.result
index 1cc44e7fd26..97bdadbb97b 100644
--- a/mysql-test/main/ctype_utf8_uca.result
+++ b/mysql-test/main/ctype_utf8_uca.result
@@ -612,6 +612,17 @@ INSERT INTO case_folding (code) VALUES
(0x26B),
(0x271),
(0x27D);
+INSERT INTO case_folding (code) VALUES
+(0x0049) /* LATIN CAPITAL LETTER I */,
+(0x0069) /* LATIN SMALL LETTER I */,
+(0x0130) /* LATIN CAPITAL LETTER I WITH DOT ABOVE */,
+(0x0131) /* LATIN SMALL LETTER DOTLESS I */
+;
+INSERT INTO case_folding (code) VALUES
+(0x2C2F) /* GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI (Unicode-14.0) */,
+(0x2C5F) /* GLAGOLITIC SMALL LETTER CAUDATE CHRIVI (Unicode-14.0) */,
+(0xA7C0) /* LATIN CAPITAL LETTER OLD POLISH O (Unicode-14.0) */,
+(0xA7C1) /* LATIN SMALL LETTER OLD POLISH O (Unicode-14.0) */;
UPDATE case_folding SET c=CHAR(code USING ucs2);
SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding;
HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c
@@ -625,6 +636,66 @@ HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c
26B C9AB C9AB É«
271 C9B1 C9B1 ɱ
27D C9BD C9BD ɽ
+49 69 49 I
+69 69 49 i
+130 69 C4B0 Ä°
+131 C4B1 49 ı
+2C2F E2B0AF E2B0AF â°¯
+2C5F E2B19F E2B19F ⱟ
+A7C0 EA9F80 EA9F80 Ꟁ
+A7C1 EA9F81 EA9F81 êŸ
+DROP TABLE case_folding;
+SET NAMES utf8mb3 COLLATE utf8mb3_turkish_ci /*Unicode-4.0 folding, with Turkish mapping for I */;
+CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c LIMIT 0;
+SHOW CREATE TABLE case_folding;
+Table Create Table
+case_folding CREATE TABLE `case_folding` (
+ `code` int(1) NOT NULL,
+ `c` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_turkish_ci DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+INSERT INTO case_folding (code) VALUES
+(0x23A),
+(0x23E),
+(0x23F),
+(0x240),
+(0x250),
+(0x251),
+(0x252),
+(0x26B),
+(0x271),
+(0x27D);
+INSERT INTO case_folding (code) VALUES
+(0x0049) /* LATIN CAPITAL LETTER I */,
+(0x0069) /* LATIN SMALL LETTER I */,
+(0x0130) /* LATIN CAPITAL LETTER I WITH DOT ABOVE */,
+(0x0131) /* LATIN SMALL LETTER DOTLESS I */
+;
+INSERT INTO case_folding (code) VALUES
+(0x2C2F) /* GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI (Unicode-14.0) */,
+(0x2C5F) /* GLAGOLITIC SMALL LETTER CAUDATE CHRIVI (Unicode-14.0) */,
+(0xA7C0) /* LATIN CAPITAL LETTER OLD POLISH O (Unicode-14.0) */,
+(0xA7C1) /* LATIN SMALL LETTER OLD POLISH O (Unicode-14.0) */;
+UPDATE case_folding SET c=CHAR(code USING ucs2);
+SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding;
+HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c
+23A C8BA C8BA Ⱥ
+23E C8BE C8BE Ⱦ
+23F C8BF C8BF È¿
+240 C980 C980 ɀ
+250 C990 C990 É
+251 C991 C991 É‘
+252 C992 C992 É’
+26B C9AB C9AB É«
+271 C9B1 C9B1 ɱ
+27D C9BD C9BD ɽ
+49 C4B1 49 I
+69 69 C4B0 i
+130 69 C4B0 Ä°
+131 C4B1 49 ı
+2C2F E2B0AF E2B0AF â°¯
+2C5F E2B19F E2B19F ⱟ
+A7C0 EA9F80 EA9F80 Ꟁ
+A7C1 EA9F81 EA9F81 êŸ
DROP TABLE case_folding;
SET NAMES utf8mb3 COLLATE utf8mb3_unicode_520_ci;
CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c LIMIT 0;
@@ -645,6 +716,17 @@ INSERT INTO case_folding (code) VALUES
(0x26B),
(0x271),
(0x27D);
+INSERT INTO case_folding (code) VALUES
+(0x0049) /* LATIN CAPITAL LETTER I */,
+(0x0069) /* LATIN SMALL LETTER I */,
+(0x0130) /* LATIN CAPITAL LETTER I WITH DOT ABOVE */,
+(0x0131) /* LATIN SMALL LETTER DOTLESS I */
+;
+INSERT INTO case_folding (code) VALUES
+(0x2C2F) /* GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI (Unicode-14.0) */,
+(0x2C5F) /* GLAGOLITIC SMALL LETTER CAUDATE CHRIVI (Unicode-14.0) */,
+(0xA7C0) /* LATIN CAPITAL LETTER OLD POLISH O (Unicode-14.0) */,
+(0xA7C1) /* LATIN SMALL LETTER OLD POLISH O (Unicode-14.0) */;
UPDATE case_folding SET c=CHAR(code USING ucs2);
SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding;
HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c
@@ -658,6 +740,14 @@ HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c
26B C9AB E2B1A2 É«
271 C9B1 E2B1AE ɱ
27D C9BD E2B1A4 ɽ
+49 69 49 I
+69 69 49 i
+130 69 C4B0 Ä°
+131 C4B1 49 ı
+2C2F E2B0AF E2B0AF â°¯
+2C5F E2B19F E2B19F ⱟ
+A7C0 EA9F80 EA9F80 Ꟁ
+A7C1 EA9F81 EA9F81 êŸ
DROP TABLE case_folding;
SET NAMES utf8mb3 COLLATE utf8mb3_unicode_520_nopad_ci;
CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c LIMIT 0;
@@ -678,6 +768,17 @@ INSERT INTO case_folding (code) VALUES
(0x26B),
(0x271),
(0x27D);
+INSERT INTO case_folding (code) VALUES
+(0x0049) /* LATIN CAPITAL LETTER I */,
+(0x0069) /* LATIN SMALL LETTER I */,
+(0x0130) /* LATIN CAPITAL LETTER I WITH DOT ABOVE */,
+(0x0131) /* LATIN SMALL LETTER DOTLESS I */
+;
+INSERT INTO case_folding (code) VALUES
+(0x2C2F) /* GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI (Unicode-14.0) */,
+(0x2C5F) /* GLAGOLITIC SMALL LETTER CAUDATE CHRIVI (Unicode-14.0) */,
+(0xA7C0) /* LATIN CAPITAL LETTER OLD POLISH O (Unicode-14.0) */,
+(0xA7C1) /* LATIN SMALL LETTER OLD POLISH O (Unicode-14.0) */;
UPDATE case_folding SET c=CHAR(code USING ucs2);
SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding;
HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c
@@ -691,6 +792,14 @@ HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c
26B C9AB E2B1A2 É«
271 C9B1 E2B1AE ɱ
27D C9BD E2B1A4 ɽ
+49 69 49 I
+69 69 49 i
+130 69 C4B0 Ä°
+131 C4B1 49 ı
+2C2F E2B0AF E2B0AF â°¯
+2C5F E2B19F E2B19F ⱟ
+A7C0 EA9F80 EA9F80 Ꟁ
+A7C1 EA9F81 EA9F81 êŸ
DROP TABLE case_folding;
SET NAMES utf8mb3 COLLATE utf8mb3_myanmar_ci;
CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c LIMIT 0;
@@ -711,6 +820,17 @@ INSERT INTO case_folding (code) VALUES
(0x26B),
(0x271),
(0x27D);
+INSERT INTO case_folding (code) VALUES
+(0x0049) /* LATIN CAPITAL LETTER I */,
+(0x0069) /* LATIN SMALL LETTER I */,
+(0x0130) /* LATIN CAPITAL LETTER I WITH DOT ABOVE */,
+(0x0131) /* LATIN SMALL LETTER DOTLESS I */
+;
+INSERT INTO case_folding (code) VALUES
+(0x2C2F) /* GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI (Unicode-14.0) */,
+(0x2C5F) /* GLAGOLITIC SMALL LETTER CAUDATE CHRIVI (Unicode-14.0) */,
+(0xA7C0) /* LATIN CAPITAL LETTER OLD POLISH O (Unicode-14.0) */,
+(0xA7C1) /* LATIN SMALL LETTER OLD POLISH O (Unicode-14.0) */;
UPDATE case_folding SET c=CHAR(code USING ucs2);
SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding;
HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c
@@ -724,6 +844,14 @@ HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c
26B C9AB E2B1A2 É«
271 C9B1 E2B1AE ɱ
27D C9BD E2B1A4 ɽ
+49 69 49 I
+69 69 49 i
+130 69 C4B0 Ä°
+131 C4B1 49 ı
+2C2F E2B0AF E2B0AF â°¯
+2C5F E2B19F E2B19F ⱟ
+A7C0 EA9F80 EA9F80 Ꟁ
+A7C1 EA9F81 EA9F81 êŸ
DROP TABLE case_folding;
SET NAMES utf8mb3 COLLATE utf8mb3_thai_520_w2;
CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c LIMIT 0;
@@ -744,6 +872,17 @@ INSERT INTO case_folding (code) VALUES
(0x26B),
(0x271),
(0x27D);
+INSERT INTO case_folding (code) VALUES
+(0x0049) /* LATIN CAPITAL LETTER I */,
+(0x0069) /* LATIN SMALL LETTER I */,
+(0x0130) /* LATIN CAPITAL LETTER I WITH DOT ABOVE */,
+(0x0131) /* LATIN SMALL LETTER DOTLESS I */
+;
+INSERT INTO case_folding (code) VALUES
+(0x2C2F) /* GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI (Unicode-14.0) */,
+(0x2C5F) /* GLAGOLITIC SMALL LETTER CAUDATE CHRIVI (Unicode-14.0) */,
+(0xA7C0) /* LATIN CAPITAL LETTER OLD POLISH O (Unicode-14.0) */,
+(0xA7C1) /* LATIN SMALL LETTER OLD POLISH O (Unicode-14.0) */;
UPDATE case_folding SET c=CHAR(code USING ucs2);
SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding;
HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c
@@ -757,6 +896,14 @@ HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c
26B C9AB E2B1A2 É«
271 C9B1 E2B1AE ɱ
27D C9BD E2B1A4 ɽ
+49 69 49 I
+69 69 49 i
+130 69 C4B0 Ä°
+131 C4B1 49 ı
+2C2F E2B0AF E2B0AF â°¯
+2C5F E2B19F E2B19F ⱟ
+A7C0 EA9F80 EA9F80 Ꟁ
+A7C1 EA9F81 EA9F81 êŸ
DROP TABLE case_folding;
#
# End of 10.3 tests
@@ -909,3 +1056,836 @@ SET DEFAULT_STORAGE_ENGINE=DEFAULT;
#
# End of 10.4 tests
#
+#
+# Start of 10.10 tests
+#
+#
+# MDEV-27009 Add UCA-14.0.0 collations
+# Collation IDs in the protocol
+#
+SET NAMES utf8mb3;
+SET @charset=(SELECT @@character_set_client);
+FOR rec IN (SELECT COLLATION_NAME
+FROM INFORMATION_SCHEMA.COLLATION_CHARACTER_SET_APPLICABILITY
+WHERE CHARACTER_SET_NAME=@charset
+AND COLLATION_NAME RLIKE 'uca1400'
+ ORDER BY ID)
+DO
+EXECUTE IMMEDIATE CONCAT('SET NAMES ',@charset,' COLLATE ', rec.COLLATION_NAME);
+SELECT rec.COLLATION_NAME;
+END FOR;
+$$
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 13 Y 0 0 192
+rec.COLLATION_NAME
+uca1400_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 13 Y 0 0 192
+rec.COLLATION_NAME
+uca1400_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 13 Y 0 0 192
+rec.COLLATION_NAME
+uca1400_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 13 Y 0 0 192
+rec.COLLATION_NAME
+uca1400_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 19 Y 0 0 192
+rec.COLLATION_NAME
+uca1400_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 19 Y 0 0 192
+rec.COLLATION_NAME
+uca1400_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 19 Y 0 0 192
+rec.COLLATION_NAME
+uca1400_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 19 Y 0 0 192
+rec.COLLATION_NAME
+uca1400_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 23 Y 0 0 193
+rec.COLLATION_NAME
+uca1400_icelandic_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 23 Y 0 0 193
+rec.COLLATION_NAME
+uca1400_icelandic_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 23 Y 0 0 193
+rec.COLLATION_NAME
+uca1400_icelandic_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 23 Y 0 0 193
+rec.COLLATION_NAME
+uca1400_icelandic_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 29 Y 0 0 193
+rec.COLLATION_NAME
+uca1400_icelandic_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 29 Y 0 0 193
+rec.COLLATION_NAME
+uca1400_icelandic_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 29 Y 0 0 193
+rec.COLLATION_NAME
+uca1400_icelandic_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 29 Y 0 0 193
+rec.COLLATION_NAME
+uca1400_icelandic_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 21 Y 0 0 194
+rec.COLLATION_NAME
+uca1400_latvian_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 21 Y 0 0 194
+rec.COLLATION_NAME
+uca1400_latvian_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 21 Y 0 0 194
+rec.COLLATION_NAME
+uca1400_latvian_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 21 Y 0 0 194
+rec.COLLATION_NAME
+uca1400_latvian_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 27 Y 0 0 194
+rec.COLLATION_NAME
+uca1400_latvian_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 27 Y 0 0 194
+rec.COLLATION_NAME
+uca1400_latvian_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 27 Y 0 0 194
+rec.COLLATION_NAME
+uca1400_latvian_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 27 Y 0 0 194
+rec.COLLATION_NAME
+uca1400_latvian_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 22 Y 0 0 195
+rec.COLLATION_NAME
+uca1400_romanian_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 22 Y 0 0 195
+rec.COLLATION_NAME
+uca1400_romanian_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 22 Y 0 0 195
+rec.COLLATION_NAME
+uca1400_romanian_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 22 Y 0 0 195
+rec.COLLATION_NAME
+uca1400_romanian_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 28 Y 0 0 195
+rec.COLLATION_NAME
+uca1400_romanian_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 28 Y 0 0 195
+rec.COLLATION_NAME
+uca1400_romanian_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 28 Y 0 0 195
+rec.COLLATION_NAME
+uca1400_romanian_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 28 Y 0 0 195
+rec.COLLATION_NAME
+uca1400_romanian_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 23 Y 0 0 196
+rec.COLLATION_NAME
+uca1400_slovenian_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 23 Y 0 0 196
+rec.COLLATION_NAME
+uca1400_slovenian_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 23 Y 0 0 196
+rec.COLLATION_NAME
+uca1400_slovenian_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 23 Y 0 0 196
+rec.COLLATION_NAME
+uca1400_slovenian_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 29 Y 0 0 196
+rec.COLLATION_NAME
+uca1400_slovenian_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 29 Y 0 0 196
+rec.COLLATION_NAME
+uca1400_slovenian_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 29 Y 0 0 196
+rec.COLLATION_NAME
+uca1400_slovenian_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 29 Y 0 0 196
+rec.COLLATION_NAME
+uca1400_slovenian_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 20 Y 0 0 197
+rec.COLLATION_NAME
+uca1400_polish_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 20 Y 0 0 197
+rec.COLLATION_NAME
+uca1400_polish_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 20 Y 0 0 197
+rec.COLLATION_NAME
+uca1400_polish_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 20 Y 0 0 197
+rec.COLLATION_NAME
+uca1400_polish_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 26 Y 0 0 197
+rec.COLLATION_NAME
+uca1400_polish_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 26 Y 0 0 197
+rec.COLLATION_NAME
+uca1400_polish_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 26 Y 0 0 197
+rec.COLLATION_NAME
+uca1400_polish_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 26 Y 0 0 197
+rec.COLLATION_NAME
+uca1400_polish_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 22 Y 0 0 198
+rec.COLLATION_NAME
+uca1400_estonian_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 22 Y 0 0 198
+rec.COLLATION_NAME
+uca1400_estonian_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 22 Y 0 0 198
+rec.COLLATION_NAME
+uca1400_estonian_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 22 Y 0 0 198
+rec.COLLATION_NAME
+uca1400_estonian_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 28 Y 0 0 198
+rec.COLLATION_NAME
+uca1400_estonian_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 28 Y 0 0 198
+rec.COLLATION_NAME
+uca1400_estonian_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 28 Y 0 0 198
+rec.COLLATION_NAME
+uca1400_estonian_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 28 Y 0 0 198
+rec.COLLATION_NAME
+uca1400_estonian_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 21 Y 0 0 199
+rec.COLLATION_NAME
+uca1400_spanish_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 21 Y 0 0 199
+rec.COLLATION_NAME
+uca1400_spanish_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 21 Y 0 0 199
+rec.COLLATION_NAME
+uca1400_spanish_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 21 Y 0 0 199
+rec.COLLATION_NAME
+uca1400_spanish_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 27 Y 0 0 199
+rec.COLLATION_NAME
+uca1400_spanish_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 27 Y 0 0 199
+rec.COLLATION_NAME
+uca1400_spanish_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 27 Y 0 0 199
+rec.COLLATION_NAME
+uca1400_spanish_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 27 Y 0 0 199
+rec.COLLATION_NAME
+uca1400_spanish_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 21 Y 0 0 200
+rec.COLLATION_NAME
+uca1400_swedish_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 21 Y 0 0 200
+rec.COLLATION_NAME
+uca1400_swedish_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 21 Y 0 0 200
+rec.COLLATION_NAME
+uca1400_swedish_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 21 Y 0 0 200
+rec.COLLATION_NAME
+uca1400_swedish_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 27 Y 0 0 200
+rec.COLLATION_NAME
+uca1400_swedish_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 27 Y 0 0 200
+rec.COLLATION_NAME
+uca1400_swedish_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 27 Y 0 0 200
+rec.COLLATION_NAME
+uca1400_swedish_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 27 Y 0 0 200
+rec.COLLATION_NAME
+uca1400_swedish_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 21 Y 0 0 201
+rec.COLLATION_NAME
+uca1400_turkish_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 21 Y 0 0 201
+rec.COLLATION_NAME
+uca1400_turkish_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 21 Y 0 0 201
+rec.COLLATION_NAME
+uca1400_turkish_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 21 Y 0 0 201
+rec.COLLATION_NAME
+uca1400_turkish_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 27 Y 0 0 201
+rec.COLLATION_NAME
+uca1400_turkish_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 27 Y 0 0 201
+rec.COLLATION_NAME
+uca1400_turkish_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 27 Y 0 0 201
+rec.COLLATION_NAME
+uca1400_turkish_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 27 Y 0 0 201
+rec.COLLATION_NAME
+uca1400_turkish_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 19 Y 0 0 202
+rec.COLLATION_NAME
+uca1400_czech_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 19 Y 0 0 202
+rec.COLLATION_NAME
+uca1400_czech_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 19 Y 0 0 202
+rec.COLLATION_NAME
+uca1400_czech_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 19 Y 0 0 202
+rec.COLLATION_NAME
+uca1400_czech_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 25 Y 0 0 202
+rec.COLLATION_NAME
+uca1400_czech_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 25 Y 0 0 202
+rec.COLLATION_NAME
+uca1400_czech_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 25 Y 0 0 202
+rec.COLLATION_NAME
+uca1400_czech_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 25 Y 0 0 202
+rec.COLLATION_NAME
+uca1400_czech_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 20 Y 0 0 203
+rec.COLLATION_NAME
+uca1400_danish_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 20 Y 0 0 203
+rec.COLLATION_NAME
+uca1400_danish_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 20 Y 0 0 203
+rec.COLLATION_NAME
+uca1400_danish_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 20 Y 0 0 203
+rec.COLLATION_NAME
+uca1400_danish_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 26 Y 0 0 203
+rec.COLLATION_NAME
+uca1400_danish_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 26 Y 0 0 203
+rec.COLLATION_NAME
+uca1400_danish_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 26 Y 0 0 203
+rec.COLLATION_NAME
+uca1400_danish_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 26 Y 0 0 203
+rec.COLLATION_NAME
+uca1400_danish_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 24 Y 0 0 204
+rec.COLLATION_NAME
+uca1400_lithuanian_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 24 Y 0 0 204
+rec.COLLATION_NAME
+uca1400_lithuanian_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 24 Y 0 0 204
+rec.COLLATION_NAME
+uca1400_lithuanian_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 24 Y 0 0 204
+rec.COLLATION_NAME
+uca1400_lithuanian_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 30 Y 0 0 204
+rec.COLLATION_NAME
+uca1400_lithuanian_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 30 Y 0 0 204
+rec.COLLATION_NAME
+uca1400_lithuanian_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 30 Y 0 0 204
+rec.COLLATION_NAME
+uca1400_lithuanian_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 30 Y 0 0 204
+rec.COLLATION_NAME
+uca1400_lithuanian_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 20 Y 0 0 205
+rec.COLLATION_NAME
+uca1400_slovak_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 20 Y 0 0 205
+rec.COLLATION_NAME
+uca1400_slovak_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 20 Y 0 0 205
+rec.COLLATION_NAME
+uca1400_slovak_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 20 Y 0 0 205
+rec.COLLATION_NAME
+uca1400_slovak_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 26 Y 0 0 205
+rec.COLLATION_NAME
+uca1400_slovak_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 26 Y 0 0 205
+rec.COLLATION_NAME
+uca1400_slovak_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 26 Y 0 0 205
+rec.COLLATION_NAME
+uca1400_slovak_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 26 Y 0 0 205
+rec.COLLATION_NAME
+uca1400_slovak_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 22 Y 0 0 206
+rec.COLLATION_NAME
+uca1400_spanish2_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 22 Y 0 0 206
+rec.COLLATION_NAME
+uca1400_spanish2_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 22 Y 0 0 206
+rec.COLLATION_NAME
+uca1400_spanish2_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 22 Y 0 0 206
+rec.COLLATION_NAME
+uca1400_spanish2_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 28 Y 0 0 206
+rec.COLLATION_NAME
+uca1400_spanish2_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 28 Y 0 0 206
+rec.COLLATION_NAME
+uca1400_spanish2_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 28 Y 0 0 206
+rec.COLLATION_NAME
+uca1400_spanish2_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 28 Y 0 0 206
+rec.COLLATION_NAME
+uca1400_spanish2_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 19 Y 0 0 207
+rec.COLLATION_NAME
+uca1400_roman_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 19 Y 0 0 207
+rec.COLLATION_NAME
+uca1400_roman_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 19 Y 0 0 207
+rec.COLLATION_NAME
+uca1400_roman_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 19 Y 0 0 207
+rec.COLLATION_NAME
+uca1400_roman_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 25 Y 0 0 207
+rec.COLLATION_NAME
+uca1400_roman_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 25 Y 0 0 207
+rec.COLLATION_NAME
+uca1400_roman_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 25 Y 0 0 207
+rec.COLLATION_NAME
+uca1400_roman_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 25 Y 0 0 207
+rec.COLLATION_NAME
+uca1400_roman_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 21 Y 0 0 208
+rec.COLLATION_NAME
+uca1400_persian_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 21 Y 0 0 208
+rec.COLLATION_NAME
+uca1400_persian_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 21 Y 0 0 208
+rec.COLLATION_NAME
+uca1400_persian_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 21 Y 0 0 208
+rec.COLLATION_NAME
+uca1400_persian_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 27 Y 0 0 208
+rec.COLLATION_NAME
+uca1400_persian_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 27 Y 0 0 208
+rec.COLLATION_NAME
+uca1400_persian_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 27 Y 0 0 208
+rec.COLLATION_NAME
+uca1400_persian_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 27 Y 0 0 208
+rec.COLLATION_NAME
+uca1400_persian_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 23 Y 0 0 209
+rec.COLLATION_NAME
+uca1400_esperanto_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 23 Y 0 0 209
+rec.COLLATION_NAME
+uca1400_esperanto_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 23 Y 0 0 209
+rec.COLLATION_NAME
+uca1400_esperanto_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 23 Y 0 0 209
+rec.COLLATION_NAME
+uca1400_esperanto_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 29 Y 0 0 209
+rec.COLLATION_NAME
+uca1400_esperanto_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 29 Y 0 0 209
+rec.COLLATION_NAME
+uca1400_esperanto_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 29 Y 0 0 209
+rec.COLLATION_NAME
+uca1400_esperanto_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 29 Y 0 0 209
+rec.COLLATION_NAME
+uca1400_esperanto_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 23 Y 0 0 210
+rec.COLLATION_NAME
+uca1400_hungarian_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 23 Y 0 0 210
+rec.COLLATION_NAME
+uca1400_hungarian_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 23 Y 0 0 210
+rec.COLLATION_NAME
+uca1400_hungarian_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 23 Y 0 0 210
+rec.COLLATION_NAME
+uca1400_hungarian_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 29 Y 0 0 210
+rec.COLLATION_NAME
+uca1400_hungarian_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 29 Y 0 0 210
+rec.COLLATION_NAME
+uca1400_hungarian_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 29 Y 0 0 210
+rec.COLLATION_NAME
+uca1400_hungarian_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 29 Y 0 0 210
+rec.COLLATION_NAME
+uca1400_hungarian_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 21 Y 0 0 211
+rec.COLLATION_NAME
+uca1400_sinhala_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 21 Y 0 0 211
+rec.COLLATION_NAME
+uca1400_sinhala_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 21 Y 0 0 211
+rec.COLLATION_NAME
+uca1400_sinhala_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 21 Y 0 0 211
+rec.COLLATION_NAME
+uca1400_sinhala_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 27 Y 0 0 211
+rec.COLLATION_NAME
+uca1400_sinhala_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 27 Y 0 0 211
+rec.COLLATION_NAME
+uca1400_sinhala_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 27 Y 0 0 211
+rec.COLLATION_NAME
+uca1400_sinhala_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 27 Y 0 0 211
+rec.COLLATION_NAME
+uca1400_sinhala_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 21 Y 0 0 212
+rec.COLLATION_NAME
+uca1400_german2_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 21 Y 0 0 212
+rec.COLLATION_NAME
+uca1400_german2_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 21 Y 0 0 212
+rec.COLLATION_NAME
+uca1400_german2_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 21 Y 0 0 212
+rec.COLLATION_NAME
+uca1400_german2_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 27 Y 0 0 212
+rec.COLLATION_NAME
+uca1400_german2_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 27 Y 0 0 212
+rec.COLLATION_NAME
+uca1400_german2_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 27 Y 0 0 212
+rec.COLLATION_NAME
+uca1400_german2_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 27 Y 0 0 212
+rec.COLLATION_NAME
+uca1400_german2_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 24 Y 0 0 215
+rec.COLLATION_NAME
+uca1400_vietnamese_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 24 Y 0 0 215
+rec.COLLATION_NAME
+uca1400_vietnamese_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 24 Y 0 0 215
+rec.COLLATION_NAME
+uca1400_vietnamese_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 24 Y 0 0 215
+rec.COLLATION_NAME
+uca1400_vietnamese_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 30 Y 0 0 215
+rec.COLLATION_NAME
+uca1400_vietnamese_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 30 Y 0 0 215
+rec.COLLATION_NAME
+uca1400_vietnamese_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 30 Y 0 0 215
+rec.COLLATION_NAME
+uca1400_vietnamese_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 30 Y 0 0 215
+rec.COLLATION_NAME
+uca1400_vietnamese_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 22 Y 0 0 576
+rec.COLLATION_NAME
+uca1400_croatian_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 22 Y 0 0 576
+rec.COLLATION_NAME
+uca1400_croatian_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 22 Y 0 0 576
+rec.COLLATION_NAME
+uca1400_croatian_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 22 Y 0 0 576
+rec.COLLATION_NAME
+uca1400_croatian_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 28 Y 0 0 576
+rec.COLLATION_NAME
+uca1400_croatian_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 28 Y 0 0 576
+rec.COLLATION_NAME
+uca1400_croatian_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 28 Y 0 0 576
+rec.COLLATION_NAME
+uca1400_croatian_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 192 28 Y 0 0 576
+rec.COLLATION_NAME
+uca1400_croatian_nopad_as_cs
+#
+# MDEV-29776 collation_connection and db_collation are too short in mysql.proc and mysql.event
+#
+SET NAMES 'utf8mb3' COLLATE 'utf8mb3_uca1400_swedish_nopad_ai_ci';
+CREATE FUNCTION f1() RETURNS INT RETURN 1;
+SELECT length(collation_connection), collation_connection
+FROM mysql.proc WHERE db='test' AND name='f1';
+length(collation_connection) collation_connection
+35 utf8mb3_uca1400_swedish_nopad_ai_ci
+SELECT f1();
+f1()
+1
+DROP FUNCTION f1;
+SET NAMES utf8mb3;
+#
+# End of 10.10 tests
+#
+#
+# Start of 10.10 tests
+#
+#
+# MDEV-30661 UPPER() returns an empty string for U+0251 in uca1400 collations for utf8
+#
+SET NAMES utf8mb3 COLLATE utf8mb3_uca1400_ai_ci;
+CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c LIMIT 0;
+SHOW CREATE TABLE case_folding;
+Table Create Table
+case_folding CREATE TABLE `case_folding` (
+ `code` int(1) NOT NULL,
+ `c` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_uca1400_ai_ci DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+INSERT INTO case_folding (code) VALUES
+(0x23A),
+(0x23E),
+(0x23F),
+(0x240),
+(0x250),
+(0x251),
+(0x252),
+(0x26B),
+(0x271),
+(0x27D);
+INSERT INTO case_folding (code) VALUES
+(0x0049) /* LATIN CAPITAL LETTER I */,
+(0x0069) /* LATIN SMALL LETTER I */,
+(0x0130) /* LATIN CAPITAL LETTER I WITH DOT ABOVE */,
+(0x0131) /* LATIN SMALL LETTER DOTLESS I */
+;
+INSERT INTO case_folding (code) VALUES
+(0x2C2F) /* GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI (Unicode-14.0) */,
+(0x2C5F) /* GLAGOLITIC SMALL LETTER CAUDATE CHRIVI (Unicode-14.0) */,
+(0xA7C0) /* LATIN CAPITAL LETTER OLD POLISH O (Unicode-14.0) */,
+(0xA7C1) /* LATIN SMALL LETTER OLD POLISH O (Unicode-14.0) */;
+UPDATE case_folding SET c=CHAR(code USING ucs2);
+SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding;
+HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c
+23A E2B1A5 C8BA Ⱥ
+23E E2B1A6 C8BE Ⱦ
+23F C8BF E2B1BE È¿
+240 C980 E2B1BF ɀ
+250 C990 E2B1AF É
+251 C991 E2B1AD É‘
+252 C992 E2B1B0 É’
+26B C9AB E2B1A2 É«
+271 C9B1 E2B1AE ɱ
+27D C9BD E2B1A4 ɽ
+49 69 49 I
+69 69 49 i
+130 69 C4B0 Ä°
+131 C4B1 49 ı
+2C2F E2B19F E2B0AF â°¯
+2C5F E2B19F E2B0AF ⱟ
+A7C0 EA9F81 EA9F80 Ꟁ
+A7C1 EA9F81 EA9F80 êŸ
+DROP TABLE case_folding;
+#
+# End of 10.10 tests
+#
diff --git a/mysql-test/main/ctype_utf8_uca.test b/mysql-test/main/ctype_utf8_uca.test
index 6361bd32a4a..6f89d646260 100644
--- a/mysql-test/main/ctype_utf8_uca.test
+++ b/mysql-test/main/ctype_utf8_uca.test
@@ -34,6 +34,9 @@ SET NAMES utf8 COLLATE utf8_unicode_nopad_ci;
SET NAMES utf8mb3 COLLATE utf8mb3_unicode_ci /*Unicode-4.0 folding*/;
--source include/ctype_casefolding.inc
+SET NAMES utf8mb3 COLLATE utf8mb3_turkish_ci /*Unicode-4.0 folding, with Turkish mapping for I */;
+--source include/ctype_casefolding.inc
+
SET NAMES utf8mb3 COLLATE utf8mb3_unicode_520_ci;
--source include/ctype_casefolding.inc
@@ -68,3 +71,48 @@ SET DEFAULT_STORAGE_ENGINE=DEFAULT;
--echo #
--echo # End of 10.4 tests
--echo #
+
+--echo #
+--echo # Start of 10.10 tests
+--echo #
+
+--echo #
+--echo # MDEV-27009 Add UCA-14.0.0 collations
+--echo # Collation IDs in the protocol
+--echo #
+
+SET NAMES utf8mb3;
+SET @charset=(SELECT @@character_set_client);
+--source include/ctype_uca1400_ids_using_set_names.inc
+
+--echo #
+--echo # MDEV-29776 collation_connection and db_collation are too short in mysql.proc and mysql.event
+--echo #
+
+SET NAMES 'utf8mb3' COLLATE 'utf8mb3_uca1400_swedish_nopad_ai_ci';
+CREATE FUNCTION f1() RETURNS INT RETURN 1;
+SELECT length(collation_connection), collation_connection
+FROM mysql.proc WHERE db='test' AND name='f1';
+SELECT f1();
+DROP FUNCTION f1;
+SET NAMES utf8mb3;
+
+--echo #
+--echo # End of 10.10 tests
+--echo #
+
+
+--echo #
+--echo # Start of 10.10 tests
+--echo #
+
+--echo #
+--echo # MDEV-30661 UPPER() returns an empty string for U+0251 in uca1400 collations for utf8
+--echo #
+
+SET NAMES utf8mb3 COLLATE utf8mb3_uca1400_ai_ci;
+--source include/ctype_casefolding.inc
+
+--echo #
+--echo # End of 10.10 tests
+--echo #
diff --git a/mysql-test/main/ctype_utf8mb4.test b/mysql-test/main/ctype_utf8mb4.test
index 200a205bd96..46a9c14dec0 100644
--- a/mysql-test/main/ctype_utf8mb4.test
+++ b/mysql-test/main/ctype_utf8mb4.test
@@ -2112,4 +2112,3 @@ DROP TABLE t1;
--echo #
--echo # End of 10.6 tests
--echo #
-
diff --git a/mysql-test/main/ctype_utf8mb4_uca.result b/mysql-test/main/ctype_utf8mb4_uca.result
index 65d8a07a3f3..3cd25891119 100644
--- a/mysql-test/main/ctype_utf8mb4_uca.result
+++ b/mysql-test/main/ctype_utf8mb4_uca.result
@@ -6630,6 +6630,69 @@ INSERT INTO case_folding (code) VALUES
(0x26B),
(0x271),
(0x27D);
+INSERT INTO case_folding (code) VALUES
+(0x0049) /* LATIN CAPITAL LETTER I */,
+(0x0069) /* LATIN SMALL LETTER I */,
+(0x0130) /* LATIN CAPITAL LETTER I WITH DOT ABOVE */,
+(0x0131) /* LATIN SMALL LETTER DOTLESS I */
+;
+INSERT INTO case_folding (code) VALUES
+(0x2C2F) /* GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI (Unicode-14.0) */,
+(0x2C5F) /* GLAGOLITIC SMALL LETTER CAUDATE CHRIVI (Unicode-14.0) */,
+(0xA7C0) /* LATIN CAPITAL LETTER OLD POLISH O (Unicode-14.0) */,
+(0xA7C1) /* LATIN SMALL LETTER OLD POLISH O (Unicode-14.0) */;
+UPDATE case_folding SET c=CHAR(code USING ucs2);
+SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding;
+HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c
+23A C8BA C8BA Ⱥ
+23E C8BE C8BE Ⱦ
+23F C8BF C8BF È¿
+240 C980 C980 ɀ
+250 C990 C990 É
+251 C991 C991 É‘
+252 C992 C992 É’
+26B C9AB C9AB É«
+271 C9B1 C9B1 ɱ
+27D C9BD C9BD ɽ
+49 69 49 I
+69 69 49 i
+130 69 C4B0 Ä°
+131 C4B1 49 ı
+2C2F E2B0AF E2B0AF â°¯
+2C5F E2B19F E2B19F ⱟ
+A7C0 EA9F80 EA9F80 Ꟁ
+A7C1 EA9F81 EA9F81 êŸ
+DROP TABLE case_folding;
+SET NAMES utf8mb4 COLLATE utf8mb4_turkish_ci /*Unicode-4.0 folding with Turkish mapping for I */;
+CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c LIMIT 0;
+SHOW CREATE TABLE case_folding;
+Table Create Table
+case_folding CREATE TABLE `case_folding` (
+ `code` int(1) NOT NULL,
+ `c` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_turkish_ci DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+INSERT INTO case_folding (code) VALUES
+(0x23A),
+(0x23E),
+(0x23F),
+(0x240),
+(0x250),
+(0x251),
+(0x252),
+(0x26B),
+(0x271),
+(0x27D);
+INSERT INTO case_folding (code) VALUES
+(0x0049) /* LATIN CAPITAL LETTER I */,
+(0x0069) /* LATIN SMALL LETTER I */,
+(0x0130) /* LATIN CAPITAL LETTER I WITH DOT ABOVE */,
+(0x0131) /* LATIN SMALL LETTER DOTLESS I */
+;
+INSERT INTO case_folding (code) VALUES
+(0x2C2F) /* GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI (Unicode-14.0) */,
+(0x2C5F) /* GLAGOLITIC SMALL LETTER CAUDATE CHRIVI (Unicode-14.0) */,
+(0xA7C0) /* LATIN CAPITAL LETTER OLD POLISH O (Unicode-14.0) */,
+(0xA7C1) /* LATIN SMALL LETTER OLD POLISH O (Unicode-14.0) */;
UPDATE case_folding SET c=CHAR(code USING ucs2);
SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding;
HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c
@@ -6643,6 +6706,14 @@ HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c
26B C9AB C9AB É«
271 C9B1 C9B1 ɱ
27D C9BD C9BD ɽ
+49 C4B1 49 I
+69 69 C4B0 i
+130 69 C4B0 Ä°
+131 C4B1 49 ı
+2C2F E2B0AF E2B0AF â°¯
+2C5F E2B19F E2B19F ⱟ
+A7C0 EA9F80 EA9F80 Ꟁ
+A7C1 EA9F81 EA9F81 êŸ
DROP TABLE case_folding;
SET NAMES utf8mb4 COLLATE utf8mb4_unicode_520_ci;
CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c LIMIT 0;
@@ -6663,6 +6734,17 @@ INSERT INTO case_folding (code) VALUES
(0x26B),
(0x271),
(0x27D);
+INSERT INTO case_folding (code) VALUES
+(0x0049) /* LATIN CAPITAL LETTER I */,
+(0x0069) /* LATIN SMALL LETTER I */,
+(0x0130) /* LATIN CAPITAL LETTER I WITH DOT ABOVE */,
+(0x0131) /* LATIN SMALL LETTER DOTLESS I */
+;
+INSERT INTO case_folding (code) VALUES
+(0x2C2F) /* GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI (Unicode-14.0) */,
+(0x2C5F) /* GLAGOLITIC SMALL LETTER CAUDATE CHRIVI (Unicode-14.0) */,
+(0xA7C0) /* LATIN CAPITAL LETTER OLD POLISH O (Unicode-14.0) */,
+(0xA7C1) /* LATIN SMALL LETTER OLD POLISH O (Unicode-14.0) */;
UPDATE case_folding SET c=CHAR(code USING ucs2);
SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding;
HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c
@@ -6676,6 +6758,14 @@ HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c
26B C9AB E2B1A2 É«
271 C9B1 E2B1AE ɱ
27D C9BD E2B1A4 ɽ
+49 69 49 I
+69 69 49 i
+130 69 C4B0 Ä°
+131 C4B1 49 ı
+2C2F E2B0AF E2B0AF â°¯
+2C5F E2B19F E2B19F ⱟ
+A7C0 EA9F80 EA9F80 Ꟁ
+A7C1 EA9F81 EA9F81 êŸ
DROP TABLE case_folding;
SET NAMES utf8mb4 COLLATE utf8mb4_unicode_520_nopad_ci;
CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c LIMIT 0;
@@ -6696,6 +6786,17 @@ INSERT INTO case_folding (code) VALUES
(0x26B),
(0x271),
(0x27D);
+INSERT INTO case_folding (code) VALUES
+(0x0049) /* LATIN CAPITAL LETTER I */,
+(0x0069) /* LATIN SMALL LETTER I */,
+(0x0130) /* LATIN CAPITAL LETTER I WITH DOT ABOVE */,
+(0x0131) /* LATIN SMALL LETTER DOTLESS I */
+;
+INSERT INTO case_folding (code) VALUES
+(0x2C2F) /* GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI (Unicode-14.0) */,
+(0x2C5F) /* GLAGOLITIC SMALL LETTER CAUDATE CHRIVI (Unicode-14.0) */,
+(0xA7C0) /* LATIN CAPITAL LETTER OLD POLISH O (Unicode-14.0) */,
+(0xA7C1) /* LATIN SMALL LETTER OLD POLISH O (Unicode-14.0) */;
UPDATE case_folding SET c=CHAR(code USING ucs2);
SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding;
HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c
@@ -6709,6 +6810,14 @@ HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c
26B C9AB E2B1A2 É«
271 C9B1 E2B1AE ɱ
27D C9BD E2B1A4 ɽ
+49 69 49 I
+69 69 49 i
+130 69 C4B0 Ä°
+131 C4B1 49 ı
+2C2F E2B0AF E2B0AF â°¯
+2C5F E2B19F E2B19F ⱟ
+A7C0 EA9F80 EA9F80 Ꟁ
+A7C1 EA9F81 EA9F81 êŸ
DROP TABLE case_folding;
SET NAMES utf8mb4 COLLATE utf8mb4_myanmar_ci;
CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c LIMIT 0;
@@ -6729,6 +6838,17 @@ INSERT INTO case_folding (code) VALUES
(0x26B),
(0x271),
(0x27D);
+INSERT INTO case_folding (code) VALUES
+(0x0049) /* LATIN CAPITAL LETTER I */,
+(0x0069) /* LATIN SMALL LETTER I */,
+(0x0130) /* LATIN CAPITAL LETTER I WITH DOT ABOVE */,
+(0x0131) /* LATIN SMALL LETTER DOTLESS I */
+;
+INSERT INTO case_folding (code) VALUES
+(0x2C2F) /* GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI (Unicode-14.0) */,
+(0x2C5F) /* GLAGOLITIC SMALL LETTER CAUDATE CHRIVI (Unicode-14.0) */,
+(0xA7C0) /* LATIN CAPITAL LETTER OLD POLISH O (Unicode-14.0) */,
+(0xA7C1) /* LATIN SMALL LETTER OLD POLISH O (Unicode-14.0) */;
UPDATE case_folding SET c=CHAR(code USING ucs2);
SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding;
HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c
@@ -6742,6 +6862,14 @@ HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c
26B C9AB E2B1A2 É«
271 C9B1 E2B1AE ɱ
27D C9BD E2B1A4 ɽ
+49 69 49 I
+69 69 49 i
+130 69 C4B0 Ä°
+131 C4B1 49 ı
+2C2F E2B0AF E2B0AF â°¯
+2C5F E2B19F E2B19F ⱟ
+A7C0 EA9F80 EA9F80 Ꟁ
+A7C1 EA9F81 EA9F81 êŸ
DROP TABLE case_folding;
SET NAMES utf8mb4 COLLATE utf8mb4_thai_520_w2;
CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c LIMIT 0;
@@ -6762,6 +6890,17 @@ INSERT INTO case_folding (code) VALUES
(0x26B),
(0x271),
(0x27D);
+INSERT INTO case_folding (code) VALUES
+(0x0049) /* LATIN CAPITAL LETTER I */,
+(0x0069) /* LATIN SMALL LETTER I */,
+(0x0130) /* LATIN CAPITAL LETTER I WITH DOT ABOVE */,
+(0x0131) /* LATIN SMALL LETTER DOTLESS I */
+;
+INSERT INTO case_folding (code) VALUES
+(0x2C2F) /* GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI (Unicode-14.0) */,
+(0x2C5F) /* GLAGOLITIC SMALL LETTER CAUDATE CHRIVI (Unicode-14.0) */,
+(0xA7C0) /* LATIN CAPITAL LETTER OLD POLISH O (Unicode-14.0) */,
+(0xA7C1) /* LATIN SMALL LETTER OLD POLISH O (Unicode-14.0) */;
UPDATE case_folding SET c=CHAR(code USING ucs2);
SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding;
HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c
@@ -6775,7 +6914,4774 @@ HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c
26B C9AB E2B1A2 É«
271 C9B1 E2B1AE ɱ
27D C9BD E2B1A4 ɽ
+49 69 49 I
+69 69 49 i
+130 69 C4B0 Ä°
+131 C4B1 49 ı
+2C2F E2B0AF E2B0AF â°¯
+2C5F E2B19F E2B19F ⱟ
+A7C0 EA9F80 EA9F80 Ꟁ
+A7C1 EA9F81 EA9F81 êŸ
DROP TABLE case_folding;
#
# End of 10.3 tests
#
+#
+# MDEV-27009 Add UCA-14.0.0 collations
+# Collation IDs in the protocol
+#
+SET NAMES utf8mb4;
+SET @charset=(SELECT @@character_set_client);
+FOR rec IN (SELECT COLLATION_NAME
+FROM INFORMATION_SCHEMA.COLLATION_CHARACTER_SET_APPLICABILITY
+WHERE CHARACTER_SET_NAME=@charset
+AND COLLATION_NAME RLIKE 'uca1400'
+ ORDER BY ID)
+DO
+EXECUTE IMMEDIATE CONCAT('SET NAMES ',@charset,' COLLATE ', rec.COLLATION_NAME);
+SELECT rec.COLLATION_NAME;
+END FOR;
+$$
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 13 Y 0 0 224
+rec.COLLATION_NAME
+uca1400_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 13 Y 0 0 224
+rec.COLLATION_NAME
+uca1400_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 13 Y 0 0 224
+rec.COLLATION_NAME
+uca1400_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 13 Y 0 0 224
+rec.COLLATION_NAME
+uca1400_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 19 Y 0 0 224
+rec.COLLATION_NAME
+uca1400_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 19 Y 0 0 224
+rec.COLLATION_NAME
+uca1400_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 19 Y 0 0 224
+rec.COLLATION_NAME
+uca1400_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 19 Y 0 0 224
+rec.COLLATION_NAME
+uca1400_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 23 Y 0 0 225
+rec.COLLATION_NAME
+uca1400_icelandic_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 23 Y 0 0 225
+rec.COLLATION_NAME
+uca1400_icelandic_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 23 Y 0 0 225
+rec.COLLATION_NAME
+uca1400_icelandic_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 23 Y 0 0 225
+rec.COLLATION_NAME
+uca1400_icelandic_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 29 Y 0 0 225
+rec.COLLATION_NAME
+uca1400_icelandic_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 29 Y 0 0 225
+rec.COLLATION_NAME
+uca1400_icelandic_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 29 Y 0 0 225
+rec.COLLATION_NAME
+uca1400_icelandic_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 29 Y 0 0 225
+rec.COLLATION_NAME
+uca1400_icelandic_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 21 Y 0 0 226
+rec.COLLATION_NAME
+uca1400_latvian_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 21 Y 0 0 226
+rec.COLLATION_NAME
+uca1400_latvian_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 21 Y 0 0 226
+rec.COLLATION_NAME
+uca1400_latvian_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 21 Y 0 0 226
+rec.COLLATION_NAME
+uca1400_latvian_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 27 Y 0 0 226
+rec.COLLATION_NAME
+uca1400_latvian_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 27 Y 0 0 226
+rec.COLLATION_NAME
+uca1400_latvian_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 27 Y 0 0 226
+rec.COLLATION_NAME
+uca1400_latvian_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 27 Y 0 0 226
+rec.COLLATION_NAME
+uca1400_latvian_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 22 Y 0 0 227
+rec.COLLATION_NAME
+uca1400_romanian_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 22 Y 0 0 227
+rec.COLLATION_NAME
+uca1400_romanian_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 22 Y 0 0 227
+rec.COLLATION_NAME
+uca1400_romanian_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 22 Y 0 0 227
+rec.COLLATION_NAME
+uca1400_romanian_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 28 Y 0 0 227
+rec.COLLATION_NAME
+uca1400_romanian_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 28 Y 0 0 227
+rec.COLLATION_NAME
+uca1400_romanian_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 28 Y 0 0 227
+rec.COLLATION_NAME
+uca1400_romanian_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 28 Y 0 0 227
+rec.COLLATION_NAME
+uca1400_romanian_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 23 Y 0 0 228
+rec.COLLATION_NAME
+uca1400_slovenian_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 23 Y 0 0 228
+rec.COLLATION_NAME
+uca1400_slovenian_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 23 Y 0 0 228
+rec.COLLATION_NAME
+uca1400_slovenian_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 23 Y 0 0 228
+rec.COLLATION_NAME
+uca1400_slovenian_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 29 Y 0 0 228
+rec.COLLATION_NAME
+uca1400_slovenian_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 29 Y 0 0 228
+rec.COLLATION_NAME
+uca1400_slovenian_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 29 Y 0 0 228
+rec.COLLATION_NAME
+uca1400_slovenian_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 29 Y 0 0 228
+rec.COLLATION_NAME
+uca1400_slovenian_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 20 Y 0 0 229
+rec.COLLATION_NAME
+uca1400_polish_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 20 Y 0 0 229
+rec.COLLATION_NAME
+uca1400_polish_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 20 Y 0 0 229
+rec.COLLATION_NAME
+uca1400_polish_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 20 Y 0 0 229
+rec.COLLATION_NAME
+uca1400_polish_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 26 Y 0 0 229
+rec.COLLATION_NAME
+uca1400_polish_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 26 Y 0 0 229
+rec.COLLATION_NAME
+uca1400_polish_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 26 Y 0 0 229
+rec.COLLATION_NAME
+uca1400_polish_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 26 Y 0 0 229
+rec.COLLATION_NAME
+uca1400_polish_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 22 Y 0 0 230
+rec.COLLATION_NAME
+uca1400_estonian_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 22 Y 0 0 230
+rec.COLLATION_NAME
+uca1400_estonian_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 22 Y 0 0 230
+rec.COLLATION_NAME
+uca1400_estonian_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 22 Y 0 0 230
+rec.COLLATION_NAME
+uca1400_estonian_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 28 Y 0 0 230
+rec.COLLATION_NAME
+uca1400_estonian_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 28 Y 0 0 230
+rec.COLLATION_NAME
+uca1400_estonian_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 28 Y 0 0 230
+rec.COLLATION_NAME
+uca1400_estonian_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 28 Y 0 0 230
+rec.COLLATION_NAME
+uca1400_estonian_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 21 Y 0 0 231
+rec.COLLATION_NAME
+uca1400_spanish_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 21 Y 0 0 231
+rec.COLLATION_NAME
+uca1400_spanish_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 21 Y 0 0 231
+rec.COLLATION_NAME
+uca1400_spanish_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 21 Y 0 0 231
+rec.COLLATION_NAME
+uca1400_spanish_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 27 Y 0 0 231
+rec.COLLATION_NAME
+uca1400_spanish_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 27 Y 0 0 231
+rec.COLLATION_NAME
+uca1400_spanish_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 27 Y 0 0 231
+rec.COLLATION_NAME
+uca1400_spanish_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 27 Y 0 0 231
+rec.COLLATION_NAME
+uca1400_spanish_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 21 Y 0 0 232
+rec.COLLATION_NAME
+uca1400_swedish_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 21 Y 0 0 232
+rec.COLLATION_NAME
+uca1400_swedish_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 21 Y 0 0 232
+rec.COLLATION_NAME
+uca1400_swedish_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 21 Y 0 0 232
+rec.COLLATION_NAME
+uca1400_swedish_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 27 Y 0 0 232
+rec.COLLATION_NAME
+uca1400_swedish_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 27 Y 0 0 232
+rec.COLLATION_NAME
+uca1400_swedish_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 27 Y 0 0 232
+rec.COLLATION_NAME
+uca1400_swedish_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 27 Y 0 0 232
+rec.COLLATION_NAME
+uca1400_swedish_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 21 Y 0 0 233
+rec.COLLATION_NAME
+uca1400_turkish_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 21 Y 0 0 233
+rec.COLLATION_NAME
+uca1400_turkish_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 21 Y 0 0 233
+rec.COLLATION_NAME
+uca1400_turkish_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 21 Y 0 0 233
+rec.COLLATION_NAME
+uca1400_turkish_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 27 Y 0 0 233
+rec.COLLATION_NAME
+uca1400_turkish_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 27 Y 0 0 233
+rec.COLLATION_NAME
+uca1400_turkish_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 27 Y 0 0 233
+rec.COLLATION_NAME
+uca1400_turkish_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 27 Y 0 0 233
+rec.COLLATION_NAME
+uca1400_turkish_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 19 Y 0 0 234
+rec.COLLATION_NAME
+uca1400_czech_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 19 Y 0 0 234
+rec.COLLATION_NAME
+uca1400_czech_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 19 Y 0 0 234
+rec.COLLATION_NAME
+uca1400_czech_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 19 Y 0 0 234
+rec.COLLATION_NAME
+uca1400_czech_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 25 Y 0 0 234
+rec.COLLATION_NAME
+uca1400_czech_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 25 Y 0 0 234
+rec.COLLATION_NAME
+uca1400_czech_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 25 Y 0 0 234
+rec.COLLATION_NAME
+uca1400_czech_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 25 Y 0 0 234
+rec.COLLATION_NAME
+uca1400_czech_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 20 Y 0 0 235
+rec.COLLATION_NAME
+uca1400_danish_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 20 Y 0 0 235
+rec.COLLATION_NAME
+uca1400_danish_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 20 Y 0 0 235
+rec.COLLATION_NAME
+uca1400_danish_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 20 Y 0 0 235
+rec.COLLATION_NAME
+uca1400_danish_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 26 Y 0 0 235
+rec.COLLATION_NAME
+uca1400_danish_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 26 Y 0 0 235
+rec.COLLATION_NAME
+uca1400_danish_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 26 Y 0 0 235
+rec.COLLATION_NAME
+uca1400_danish_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 26 Y 0 0 235
+rec.COLLATION_NAME
+uca1400_danish_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 24 Y 0 0 236
+rec.COLLATION_NAME
+uca1400_lithuanian_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 24 Y 0 0 236
+rec.COLLATION_NAME
+uca1400_lithuanian_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 24 Y 0 0 236
+rec.COLLATION_NAME
+uca1400_lithuanian_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 24 Y 0 0 236
+rec.COLLATION_NAME
+uca1400_lithuanian_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 30 Y 0 0 236
+rec.COLLATION_NAME
+uca1400_lithuanian_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 30 Y 0 0 236
+rec.COLLATION_NAME
+uca1400_lithuanian_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 30 Y 0 0 236
+rec.COLLATION_NAME
+uca1400_lithuanian_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 30 Y 0 0 236
+rec.COLLATION_NAME
+uca1400_lithuanian_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 20 Y 0 0 237
+rec.COLLATION_NAME
+uca1400_slovak_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 20 Y 0 0 237
+rec.COLLATION_NAME
+uca1400_slovak_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 20 Y 0 0 237
+rec.COLLATION_NAME
+uca1400_slovak_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 20 Y 0 0 237
+rec.COLLATION_NAME
+uca1400_slovak_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 26 Y 0 0 237
+rec.COLLATION_NAME
+uca1400_slovak_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 26 Y 0 0 237
+rec.COLLATION_NAME
+uca1400_slovak_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 26 Y 0 0 237
+rec.COLLATION_NAME
+uca1400_slovak_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 26 Y 0 0 237
+rec.COLLATION_NAME
+uca1400_slovak_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 22 Y 0 0 238
+rec.COLLATION_NAME
+uca1400_spanish2_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 22 Y 0 0 238
+rec.COLLATION_NAME
+uca1400_spanish2_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 22 Y 0 0 238
+rec.COLLATION_NAME
+uca1400_spanish2_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 22 Y 0 0 238
+rec.COLLATION_NAME
+uca1400_spanish2_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 28 Y 0 0 238
+rec.COLLATION_NAME
+uca1400_spanish2_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 28 Y 0 0 238
+rec.COLLATION_NAME
+uca1400_spanish2_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 28 Y 0 0 238
+rec.COLLATION_NAME
+uca1400_spanish2_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 28 Y 0 0 238
+rec.COLLATION_NAME
+uca1400_spanish2_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 19 Y 0 0 239
+rec.COLLATION_NAME
+uca1400_roman_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 19 Y 0 0 239
+rec.COLLATION_NAME
+uca1400_roman_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 19 Y 0 0 239
+rec.COLLATION_NAME
+uca1400_roman_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 19 Y 0 0 239
+rec.COLLATION_NAME
+uca1400_roman_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 25 Y 0 0 239
+rec.COLLATION_NAME
+uca1400_roman_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 25 Y 0 0 239
+rec.COLLATION_NAME
+uca1400_roman_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 25 Y 0 0 239
+rec.COLLATION_NAME
+uca1400_roman_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 25 Y 0 0 239
+rec.COLLATION_NAME
+uca1400_roman_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 21 Y 0 0 240
+rec.COLLATION_NAME
+uca1400_persian_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 21 Y 0 0 240
+rec.COLLATION_NAME
+uca1400_persian_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 21 Y 0 0 240
+rec.COLLATION_NAME
+uca1400_persian_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 21 Y 0 0 240
+rec.COLLATION_NAME
+uca1400_persian_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 27 Y 0 0 240
+rec.COLLATION_NAME
+uca1400_persian_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 27 Y 0 0 240
+rec.COLLATION_NAME
+uca1400_persian_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 27 Y 0 0 240
+rec.COLLATION_NAME
+uca1400_persian_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 27 Y 0 0 240
+rec.COLLATION_NAME
+uca1400_persian_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 23 Y 0 0 241
+rec.COLLATION_NAME
+uca1400_esperanto_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 23 Y 0 0 241
+rec.COLLATION_NAME
+uca1400_esperanto_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 23 Y 0 0 241
+rec.COLLATION_NAME
+uca1400_esperanto_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 23 Y 0 0 241
+rec.COLLATION_NAME
+uca1400_esperanto_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 29 Y 0 0 241
+rec.COLLATION_NAME
+uca1400_esperanto_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 29 Y 0 0 241
+rec.COLLATION_NAME
+uca1400_esperanto_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 29 Y 0 0 241
+rec.COLLATION_NAME
+uca1400_esperanto_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 29 Y 0 0 241
+rec.COLLATION_NAME
+uca1400_esperanto_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 23 Y 0 0 242
+rec.COLLATION_NAME
+uca1400_hungarian_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 23 Y 0 0 242
+rec.COLLATION_NAME
+uca1400_hungarian_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 23 Y 0 0 242
+rec.COLLATION_NAME
+uca1400_hungarian_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 23 Y 0 0 242
+rec.COLLATION_NAME
+uca1400_hungarian_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 29 Y 0 0 242
+rec.COLLATION_NAME
+uca1400_hungarian_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 29 Y 0 0 242
+rec.COLLATION_NAME
+uca1400_hungarian_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 29 Y 0 0 242
+rec.COLLATION_NAME
+uca1400_hungarian_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 29 Y 0 0 242
+rec.COLLATION_NAME
+uca1400_hungarian_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 21 Y 0 0 243
+rec.COLLATION_NAME
+uca1400_sinhala_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 21 Y 0 0 243
+rec.COLLATION_NAME
+uca1400_sinhala_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 21 Y 0 0 243
+rec.COLLATION_NAME
+uca1400_sinhala_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 21 Y 0 0 243
+rec.COLLATION_NAME
+uca1400_sinhala_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 27 Y 0 0 243
+rec.COLLATION_NAME
+uca1400_sinhala_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 27 Y 0 0 243
+rec.COLLATION_NAME
+uca1400_sinhala_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 27 Y 0 0 243
+rec.COLLATION_NAME
+uca1400_sinhala_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 27 Y 0 0 243
+rec.COLLATION_NAME
+uca1400_sinhala_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 21 Y 0 0 244
+rec.COLLATION_NAME
+uca1400_german2_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 21 Y 0 0 244
+rec.COLLATION_NAME
+uca1400_german2_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 21 Y 0 0 244
+rec.COLLATION_NAME
+uca1400_german2_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 21 Y 0 0 244
+rec.COLLATION_NAME
+uca1400_german2_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 27 Y 0 0 244
+rec.COLLATION_NAME
+uca1400_german2_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 27 Y 0 0 244
+rec.COLLATION_NAME
+uca1400_german2_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 27 Y 0 0 244
+rec.COLLATION_NAME
+uca1400_german2_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 27 Y 0 0 244
+rec.COLLATION_NAME
+uca1400_german2_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 24 Y 0 0 247
+rec.COLLATION_NAME
+uca1400_vietnamese_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 24 Y 0 0 247
+rec.COLLATION_NAME
+uca1400_vietnamese_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 24 Y 0 0 247
+rec.COLLATION_NAME
+uca1400_vietnamese_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 24 Y 0 0 247
+rec.COLLATION_NAME
+uca1400_vietnamese_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 30 Y 0 0 247
+rec.COLLATION_NAME
+uca1400_vietnamese_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 30 Y 0 0 247
+rec.COLLATION_NAME
+uca1400_vietnamese_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 30 Y 0 0 247
+rec.COLLATION_NAME
+uca1400_vietnamese_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 30 Y 0 0 247
+rec.COLLATION_NAME
+uca1400_vietnamese_nopad_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 22 Y 0 0 608
+rec.COLLATION_NAME
+uca1400_croatian_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 22 Y 0 0 608
+rec.COLLATION_NAME
+uca1400_croatian_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 22 Y 0 0 608
+rec.COLLATION_NAME
+uca1400_croatian_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 22 Y 0 0 608
+rec.COLLATION_NAME
+uca1400_croatian_as_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 28 Y 0 0 608
+rec.COLLATION_NAME
+uca1400_croatian_nopad_ai_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 28 Y 0 0 608
+rec.COLLATION_NAME
+uca1400_croatian_nopad_ai_cs
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 28 Y 0 0 608
+rec.COLLATION_NAME
+uca1400_croatian_nopad_as_ci
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def COLLATION_NAME rec.COLLATION_NAME 253 256 28 Y 0 0 608
+rec.COLLATION_NAME
+uca1400_croatian_nopad_as_cs
+#
+# MDEV-27009 Add UCA-14.0.0 collations
+# SET NAMES CHARACTER SET cs [COLLATE cl]
+#
+CREATE VIEW vars AS
+SELECT * FROM INFORMATION_SCHEMA.SESSION_VARIABLES WHERE variable_name IN
+('character_set_client','character_set_connection','character_set_results',
+'collation_connection') ORDER BY variable_name;
+---
+SET NAMES DEFAULT COLLATE DEFAULT;
+SELECT * FROM vars;
+VARIABLE_NAME VARIABLE_VALUE
+CHARACTER_SET_CLIENT latin1
+CHARACTER_SET_CONNECTION latin1
+CHARACTER_SET_RESULTS latin1
+COLLATION_CONNECTION latin1_swedish_ci
+---
+SET NAMES DEFAULT COLLATE `binary`;
+ERROR 42000: COLLATION 'binary' is not valid for CHARACTER SET 'latin1'
+SELECT * FROM vars;
+VARIABLE_NAME VARIABLE_VALUE
+CHARACTER_SET_CLIENT latin1
+CHARACTER_SET_CONNECTION latin1
+CHARACTER_SET_RESULTS latin1
+COLLATION_CONNECTION latin1_swedish_ci
+---
+SET NAMES DEFAULT COLLATE utf8mb4_uca1400_ai_ci;
+ERROR 42000: COLLATION 'utf8mb4_uca1400_ai_ci' is not valid for CHARACTER SET 'latin1'
+SELECT * FROM vars;
+VARIABLE_NAME VARIABLE_VALUE
+CHARACTER_SET_CLIENT latin1
+CHARACTER_SET_CONNECTION latin1
+CHARACTER_SET_RESULTS latin1
+COLLATION_CONNECTION latin1_swedish_ci
+---
+SET NAMES DEFAULT COLLATE uca1400_ai_ci;
+ERROR 42000: COLLATION 'uca1400_ai_ci' is not valid for CHARACTER SET 'latin1'
+SELECT * FROM vars;
+VARIABLE_NAME VARIABLE_VALUE
+CHARACTER_SET_CLIENT latin1
+CHARACTER_SET_CONNECTION latin1
+CHARACTER_SET_RESULTS latin1
+COLLATION_CONNECTION latin1_swedish_ci
+---
+SET NAMES utf8mb4;
+SELECT * FROM vars;
+VARIABLE_NAME VARIABLE_VALUE
+CHARACTER_SET_CLIENT utf8mb4
+CHARACTER_SET_CONNECTION utf8mb4
+CHARACTER_SET_RESULTS utf8mb4
+COLLATION_CONNECTION utf8mb4_general_ci
+---
+SET NAMES utf8mb4 COLLATE `binary`;
+ERROR 42000: COLLATION 'binary' is not valid for CHARACTER SET 'utf8mb4'
+SELECT * FROM vars;
+VARIABLE_NAME VARIABLE_VALUE
+CHARACTER_SET_CLIENT utf8mb4
+CHARACTER_SET_CONNECTION utf8mb4
+CHARACTER_SET_RESULTS utf8mb4
+COLLATION_CONNECTION utf8mb4_general_ci
+---
+SET NAMES utf8mb4 COLLATE DEFAULT;
+SELECT * FROM vars;
+VARIABLE_NAME VARIABLE_VALUE
+CHARACTER_SET_CLIENT utf8mb4
+CHARACTER_SET_CONNECTION utf8mb4
+CHARACTER_SET_RESULTS utf8mb4
+COLLATION_CONNECTION utf8mb4_general_ci
+---
+SET NAMES utf8mb4 COLLATE utf8mb4_uca1400_ai_ci;
+SELECT * FROM vars;
+VARIABLE_NAME VARIABLE_VALUE
+CHARACTER_SET_CLIENT utf8mb4
+CHARACTER_SET_CONNECTION utf8mb4
+CHARACTER_SET_RESULTS utf8mb4
+COLLATION_CONNECTION utf8mb4_uca1400_ai_ci
+---
+SET NAMES utf8mb4 COLLATE uca1400_ai_ci;
+SELECT * FROM vars;
+VARIABLE_NAME VARIABLE_VALUE
+CHARACTER_SET_CLIENT utf8mb4
+CHARACTER_SET_CONNECTION utf8mb4
+CHARACTER_SET_RESULTS utf8mb4
+COLLATION_CONNECTION utf8mb4_uca1400_ai_ci
+DROP VIEW vars;
+#
+# MDEV-27009 Add UCA-14.0.0 collations
+# ALTER TABLE t1 CONVERT TO CHARACTER SET cs [COLLATE cl]
+#
+CREATE DATABASE db1 CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
+USE db1;
+CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET latin1);
+ALTER TABLE t1 CONVERT TO CHARACTER SET DEFAULT;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` varchar(10) DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
+DROP TABLE t1;
+CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET latin1);
+ALTER TABLE t1 CONVERT TO CHARACTER SET DEFAULT COLLATE DEFAULT;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` varchar(10) DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
+DROP TABLE t1;
+CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET latin1);
+ALTER TABLE t1 CONVERT TO CHARACTER SET DEFAULT COLLATE latin1_bin;
+ERROR 42000: COLLATION 'latin1_bin' is not valid for CHARACTER SET 'utf8mb4'
+DROP TABLE t1;
+CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET latin1);
+ALTER TABLE t1 CONVERT TO CHARACTER SET DEFAULT COLLATE utf8mb4_uca1400_ai_ci;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` varchar(10) DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
+DROP TABLE t1;
+CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET latin1);
+ALTER TABLE t1 CONVERT TO CHARACTER SET DEFAULT COLLATE uca1400_ai_ci;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` varchar(10) DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
+DROP TABLE t1;
+CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET latin1);
+ALTER TABLE t1 CONVERT TO CHARACTER SET utf8mb4;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` varchar(10) DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
+DROP TABLE t1;
+CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET latin1);
+ALTER TABLE t1 CONVERT TO CHARACTER SET utf8mb4 COLLATE DEFAULT;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` varchar(10) DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
+DROP TABLE t1;
+CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET latin1);
+ALTER TABLE t1 CONVERT TO CHARACTER SET utf8mb4 COLLATE latin1_bin;
+ERROR 42000: COLLATION 'latin1_bin' is not valid for CHARACTER SET 'utf8mb4'
+DROP TABLE t1;
+CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET latin1);
+ALTER TABLE t1 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_ai_ci;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` varchar(10) DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
+DROP TABLE t1;
+CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET latin1);
+ALTER TABLE t1 CONVERT TO CHARACTER SET utf8mb4 COLLATE uca1400_ai_ci;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` varchar(10) DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
+DROP TABLE t1;
+DROP DATABASE db1;
+USE test;
+#
+# MDEV-27743 Remove Lex::charset
+# MDEV-27009 Add UCA-14.0.0 collations
+#
+CREATE TABLE t1 (c1 VARCHAR(10) CHARACTER SET utf8mb4);
+INSERT INTO t1 VALUES ('A'),('a'),('Ã'),('á');
+SELECT * FROM t1 ORDER BY c1 COLLATE DEFAULT;
+ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'DEFAULT' at line 1
+SELECT * FROM t1 ORDER BY c1 COLLATE `binary`;
+ERROR 42000: COLLATION 'binary' is not valid for CHARACTER SET 'utf8mb4'
+SELECT * FROM t1 ORDER BY c1 COLLATE utf8mb4_uca1400_as_cs;
+c1
+a
+A
+á
+EXPLAIN EXTENDED SELECT * FROM t1 ORDER BY c1 COLLATE utf8mb4_uca1400_as_cs;
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 4 100.00 Using filesort
+Warnings:
+Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` order by `test`.`t1`.`c1` collate utf8mb4_uca1400_as_cs
+SELECT * FROM t1 ORDER BY c1 COLLATE uca1400_as_cs;
+c1
+a
+A
+á
+EXPLAIN EXTENDED SELECT * FROM t1 ORDER BY c1 COLLATE uca1400_as_cs;
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 4 100.00 Using filesort
+Warnings:
+Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` order by `test`.`t1`.`c1` collate uca1400_as_cs
+DROP TABLE t1;
+#
+# MDEV-27009 Add UCA-14.0.0 collations
+# CREATE DATABASE
+#
+SET @@collation_server=utf8mb4_bin;
+CREATE DATABASE db1;
+SHOW CREATE DATABASE db1;
+Database Create Database
+db1 CREATE DATABASE `db1` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin */
+DROP DATABASE db1;
+CREATE DATABASE db1 COLLATE DEFAULT;
+SHOW CREATE DATABASE db1;
+Database Create Database
+db1 CREATE DATABASE `db1` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci */
+DROP DATABASE db1;
+CREATE DATABASE db1 COLLATE uca1400_ai_ci;
+SHOW CREATE DATABASE db1;
+Database Create Database
+db1 CREATE DATABASE `db1` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_ai_ci */
+DROP DATABASE db1;
+CREATE DATABASE db1 COLLATE utf8mb4_uca1400_ai_ci;
+SHOW CREATE DATABASE db1;
+Database Create Database
+db1 CREATE DATABASE `db1` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_ai_ci */
+DROP DATABASE db1;
+CREATE DATABASE db1 CHARACTER SET DEFAULT;
+SHOW CREATE DATABASE db1;
+Database Create Database
+db1 CREATE DATABASE `db1` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci */
+DROP DATABASE db1;
+CREATE DATABASE db1 CHARACTER SET DEFAULT COLLATE DEFAULT;
+SHOW CREATE DATABASE db1;
+Database Create Database
+db1 CREATE DATABASE `db1` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci */
+DROP DATABASE db1;
+CREATE DATABASE db1 CHARACTER SET DEFAULT COLLATE uca1400_ai_ci;
+SHOW CREATE DATABASE db1;
+Database Create Database
+db1 CREATE DATABASE `db1` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_ai_ci */
+DROP DATABASE db1;
+CREATE DATABASE db1 CHARACTER SET DEFAULT COLLATE utf8mb4_uca1400_ai_ci;
+SHOW CREATE DATABASE db1;
+Database Create Database
+db1 CREATE DATABASE `db1` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_ai_ci */
+DROP DATABASE db1;
+SET @@collation_server=DEFAULT;
+SET @@collation_server=latin1_bin;
+CREATE DATABASE db1 COLLATE uca1400_ai_ci;
+ERROR 42000: COLLATION 'uca1400_ai_ci' is not valid for CHARACTER SET 'latin1'
+CREATE DATABASE db1 CHARACTER SET DEFAULT COLLATE uca1400_ai_ci;
+ERROR 42000: COLLATION 'uca1400_ai_ci' is not valid for CHARACTER SET 'latin1'
+CREATE DATABASE db1 CHARACTER SET utf8mb4 COLLATE uca1400_ai_ci;
+SHOW CREATE DATABASE db1;
+Database Create Database
+db1 CREATE DATABASE `db1` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_ai_ci */
+DROP DATABASE db1;
+SET @@collation_server=DEFAULT;
+#
+# MDEV-27009 Add UCA-14.0.0 collations
+# CREATE TABLE - table level character set and collation
+#
+SELECT @@collation_database;
+@@collation_database
+latin1_swedish_ci
+CREATE DATABASE db1 CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
+CREATE TABLE db1.t1 (a CHAR(1));
+SHOW CREATE TABLE db1.t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` char(1) DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin
+DROP TABLE db1.t1;
+CREATE TABLE db1.t1 (a CHAR(1)) COLLATE DEFAULT;
+SHOW CREATE TABLE db1.t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` char(1) DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
+DROP TABLE db1.t1;
+CREATE TABLE db1.t1 (a CHAR(1)) COLLATE uca1400_ai_ci;
+SHOW CREATE TABLE db1.t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` char(1) DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
+DROP TABLE db1.t1;
+CREATE TABLE db1.t1 (a CHAR(1)) COLLATE utf8mb4_uca1400_ai_ci;
+SHOW CREATE TABLE db1.t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` char(1) DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
+DROP TABLE db1.t1;
+CREATE TABLE db1.t1 (a CHAR(1)) CHARACTER SET DEFAULT;
+SHOW CREATE TABLE db1.t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` char(1) DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
+DROP TABLE db1.t1;
+CREATE TABLE db1.t1 (a CHAR(1)) CHARACTER SET DEFAULT COLLATE DEFAULT;
+SHOW CREATE TABLE db1.t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` char(1) DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
+DROP TABLE db1.t1;
+CREATE TABLE db1.t1 (a CHAR(1)) CHARACTER SET DEFAULT COLLATE uca1400_ai_ci;
+SHOW CREATE TABLE db1.t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` char(1) DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
+DROP TABLE db1.t1;
+CREATE TABLE db1.t1 (a CHAR(1)) CHARACTER SET DEFAULT COLLATE utf8mb4_uca1400_ai_ci;
+SHOW CREATE TABLE db1.t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` char(1) DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
+DROP TABLE db1.t1;
+DROP DATABASE db1;
+#
+# MDEV-27009 Add UCA-14.0.0 collations
+#
+SET NAMES utf8mb4;
+CREATE PROCEDURE exec_verbose(query TEXT CHARACTER SET utf8mb4)
+BEGIN
+SELECT query AS ``;
+EXECUTE IMMEDIATE query;
+END;
+$$
+CREATE PROCEDURE test_styles(clname VARCHAR(64) CHARACTER SET utf8mb4,
+where_clause TEXT CHARACTER SET utf8mb4)
+BEGIN
+DECLARE query TEXT CHARACTER SET utf8mb4 DEFAULT
+'SELECT CONCAT(GROUP_CONCAT(a ORDER BY BINARY(a)),'','') '
+ 'FROM t1 <WHERE> GROUP BY a COLLATE <CL>';
+SET query=REPLACE(query, '<WHERE>', where_clause);
+CALL exec_verbose(REPLACE(query, '<CL>', CONCAT(clname,'_nopad_as_cs')));
+CALL exec_verbose(REPLACE(query, '<CL>', CONCAT(clname,'_as_cs')));
+CALL exec_verbose(REPLACE(query, '<CL>', CONCAT(clname,'_nopad_as_ci')));
+CALL exec_verbose(REPLACE(query, '<CL>', CONCAT(clname,'_as_ci')));
+CALL exec_verbose(REPLACE(query, '<CL>', CONCAT(clname,'_nopad_ai_cs')));
+CALL exec_verbose(REPLACE(query, '<CL>', CONCAT(clname,'_ai_cs')));
+CALL exec_verbose(REPLACE(query, '<CL>', CONCAT(clname,'_nopad_ai_ci')));
+CALL exec_verbose(REPLACE(query, '<CL>', CONCAT(clname,'_ai_ci')));
+END;
+$$
+CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET utf8mb4);
+insert into t1 values ('A'),('a');
+insert into t1 values ('B'),('b');
+insert into t1 values ('C'),('c');
+insert into t1 values ('D'),('d');
+insert into t1 values ('E'),('e');
+insert into t1 values ('F'),('f');
+insert into t1 values ('G'),('g');
+insert into t1 values ('H'),('h');
+insert into t1 values ('I'),('i');
+insert into t1 values ('J'),('j');
+insert into t1 values ('K'),('k');
+insert into t1 values ('L'),('l');
+insert into t1 values ('M'),('m');
+insert into t1 values ('N'),('n');
+insert into t1 values ('O'),('o');
+insert into t1 values ('P'),('p');
+insert into t1 values ('Q'),('q');
+insert into t1 values ('R'),('r');
+insert into t1 values ('S'),('s');
+insert into t1 values ('T'),('t');
+insert into t1 values ('U'),('u');
+insert into t1 values ('V'),('v');
+insert into t1 values ('W'),('w');
+insert into t1 values ('X'),('x');
+insert into t1 values ('Y'),('y');
+insert into t1 values ('Z'),('z');
+insert into t1 values (_ucs2 0x00e0),(_ucs2 0x00c0);
+insert into t1 values (_ucs2 0x00e1),(_ucs2 0x00c1);
+insert into t1 values (_ucs2 0x00e2),(_ucs2 0x00c2);
+insert into t1 values (_ucs2 0x00e3),(_ucs2 0x00c3);
+insert into t1 values (_ucs2 0x00e4),(_ucs2 0x00c4);
+insert into t1 values (_ucs2 0x00e5),(_ucs2 0x00c5);
+insert into t1 values (_ucs2 0x00e6),(_ucs2 0x00c6);
+insert into t1 values (_ucs2 0x00e7),(_ucs2 0x00c7);
+insert into t1 values (_ucs2 0x00e8),(_ucs2 0x00c8);
+insert into t1 values (_ucs2 0x00e9),(_ucs2 0x00c9);
+insert into t1 values (_ucs2 0x00ea),(_ucs2 0x00ca);
+insert into t1 values (_ucs2 0x00eb),(_ucs2 0x00cb);
+insert into t1 values (_ucs2 0x00ec),(_ucs2 0x00cc);
+insert into t1 values (_ucs2 0x00ed),(_ucs2 0x00cd);
+insert into t1 values (_ucs2 0x00ee),(_ucs2 0x00ce);
+insert into t1 values (_ucs2 0x00ef),(_ucs2 0x00cf);
+insert into t1 values (_ucs2 0x00f0),(_ucs2 0x00d0);
+insert into t1 values (_ucs2 0x00f1),(_ucs2 0x00d1);
+insert into t1 values (_ucs2 0x00f2),(_ucs2 0x00d2);
+insert into t1 values (_ucs2 0x00f3),(_ucs2 0x00d3);
+insert into t1 values (_ucs2 0x00f4),(_ucs2 0x00d4);
+insert into t1 values (_ucs2 0x00f5),(_ucs2 0x00d5);
+insert into t1 values (_ucs2 0x00f6),(_ucs2 0x00d6);
+insert into t1 values (_ucs2 0x00f7),(_ucs2 0x00d7);
+insert into t1 values (_ucs2 0x00f8),(_ucs2 0x00d8);
+insert into t1 values (_ucs2 0x00f9),(_ucs2 0x00d9);
+insert into t1 values (_ucs2 0x00fa),(_ucs2 0x00da);
+insert into t1 values (_ucs2 0x00fb),(_ucs2 0x00db);
+insert into t1 values (_ucs2 0x00fc),(_ucs2 0x00dc);
+insert into t1 values (_ucs2 0x00fd),(_ucs2 0x00dd);
+insert into t1 values (_ucs2 0x00fe),(_ucs2 0x00de);
+insert into t1 values (_ucs2 0x00ff),(_ucs2 0x00df);
+insert into t1 values (_ucs2 0x0100),(_ucs2 0x0101),(_ucs2 0x0102),(_ucs2 0x0103);
+insert into t1 values (_ucs2 0x0104),(_ucs2 0x0105),(_ucs2 0x0106),(_ucs2 0x0107);
+insert into t1 values (_ucs2 0x0108),(_ucs2 0x0109),(_ucs2 0x010a),(_ucs2 0x010b);
+insert into t1 values (_ucs2 0x010c),(_ucs2 0x010d),(_ucs2 0x010e),(_ucs2 0x010f);
+insert into t1 values (_ucs2 0x0110),(_ucs2 0x0111),(_ucs2 0x0112),(_ucs2 0x0113);
+insert into t1 values (_ucs2 0x0114),(_ucs2 0x0115),(_ucs2 0x0116),(_ucs2 0x0117);
+insert into t1 values (_ucs2 0x0118),(_ucs2 0x0119),(_ucs2 0x011a),(_ucs2 0x011b);
+insert into t1 values (_ucs2 0x011c),(_ucs2 0x011d),(_ucs2 0x011e),(_ucs2 0x011f);
+insert into t1 values (_ucs2 0x0120),(_ucs2 0x0121),(_ucs2 0x0122),(_ucs2 0x0123);
+insert into t1 values (_ucs2 0x0124),(_ucs2 0x0125),(_ucs2 0x0126),(_ucs2 0x0127);
+insert into t1 values (_ucs2 0x0128),(_ucs2 0x0129),(_ucs2 0x012a),(_ucs2 0x012b);
+insert into t1 values (_ucs2 0x012c),(_ucs2 0x012d),(_ucs2 0x012e),(_ucs2 0x012f);
+insert into t1 values (_ucs2 0x0130),(_ucs2 0x0131),(_ucs2 0x0132),(_ucs2 0x0133);
+insert into t1 values (_ucs2 0x0134),(_ucs2 0x0135),(_ucs2 0x0136),(_ucs2 0x0137);
+insert into t1 values (_ucs2 0x0138),(_ucs2 0x0139),(_ucs2 0x013a),(_ucs2 0x013b);
+insert into t1 values (_ucs2 0x013c),(_ucs2 0x013d),(_ucs2 0x013e),(_ucs2 0x013f);
+insert into t1 values (_ucs2 0x0140),(_ucs2 0x0141),(_ucs2 0x0142),(_ucs2 0x0143);
+insert into t1 values (_ucs2 0x0144),(_ucs2 0x0145),(_ucs2 0x0146),(_ucs2 0x0147);
+insert into t1 values (_ucs2 0x0148),(_ucs2 0x0149),(_ucs2 0x014a),(_ucs2 0x014b);
+insert into t1 values (_ucs2 0x014c),(_ucs2 0x014d),(_ucs2 0x014e),(_ucs2 0x014f);
+insert into t1 values (_ucs2 0x0150),(_ucs2 0x0151),(_ucs2 0x0152),(_ucs2 0x0153);
+insert into t1 values (_ucs2 0x0154),(_ucs2 0x0155),(_ucs2 0x0156),(_ucs2 0x0157);
+insert into t1 values (_ucs2 0x0158),(_ucs2 0x0159),(_ucs2 0x015a),(_ucs2 0x015b);
+insert into t1 values (_ucs2 0x015c),(_ucs2 0x015d),(_ucs2 0x015e),(_ucs2 0x015f);
+insert into t1 values (_ucs2 0x0160),(_ucs2 0x0161),(_ucs2 0x0162),(_ucs2 0x0163);
+insert into t1 values (_ucs2 0x0164),(_ucs2 0x0165),(_ucs2 0x0166),(_ucs2 0x0167);
+insert into t1 values (_ucs2 0x0168),(_ucs2 0x0169),(_ucs2 0x016a),(_ucs2 0x016b);
+insert into t1 values (_ucs2 0x016c),(_ucs2 0x016d),(_ucs2 0x016e),(_ucs2 0x016f);
+insert into t1 values (_ucs2 0x0170),(_ucs2 0x0171),(_ucs2 0x0172),(_ucs2 0x0173);
+insert into t1 values (_ucs2 0x0174),(_ucs2 0x0175),(_ucs2 0x0176),(_ucs2 0x0177);
+insert into t1 values (_ucs2 0x0178),(_ucs2 0x0179),(_ucs2 0x017a),(_ucs2 0x017b);
+insert into t1 values (_ucs2 0x017c),(_ucs2 0x017d),(_ucs2 0x017e),(_ucs2 0x017f);
+insert into t1 values (_ucs2 0x0180),(_ucs2 0x0181),(_ucs2 0x0182),(_ucs2 0x0183);
+insert into t1 values (_ucs2 0x0184),(_ucs2 0x0185),(_ucs2 0x0186),(_ucs2 0x0187);
+insert into t1 values (_ucs2 0x0188),(_ucs2 0x0189),(_ucs2 0x018a),(_ucs2 0x018b);
+insert into t1 values (_ucs2 0x018c),(_ucs2 0x018d),(_ucs2 0x018e),(_ucs2 0x018f);
+insert into t1 values (_ucs2 0x0190),(_ucs2 0x0191),(_ucs2 0x0192),(_ucs2 0x0193);
+insert into t1 values (_ucs2 0x0194),(_ucs2 0x0195),(_ucs2 0x0196),(_ucs2 0x0197);
+insert into t1 values (_ucs2 0x0198),(_ucs2 0x0199),(_ucs2 0x019a),(_ucs2 0x019b);
+insert into t1 values (_ucs2 0x019c),(_ucs2 0x019d),(_ucs2 0x019e),(_ucs2 0x019f);
+insert into t1 values (_ucs2 0x01a0),(_ucs2 0x01a1),(_ucs2 0x01a2),(_ucs2 0x01a3);
+insert into t1 values (_ucs2 0x01a4),(_ucs2 0x01a5),(_ucs2 0x01a6),(_ucs2 0x01a7);
+insert into t1 values (_ucs2 0x01a8),(_ucs2 0x01a9),(_ucs2 0x01aa),(_ucs2 0x01ab);
+insert into t1 values (_ucs2 0x01ac),(_ucs2 0x01ad),(_ucs2 0x01ae),(_ucs2 0x01af);
+insert into t1 values (_ucs2 0x01b0),(_ucs2 0x01b1),(_ucs2 0x01b2),(_ucs2 0x01b3);
+insert into t1 values (_ucs2 0x01b4),(_ucs2 0x01b5),(_ucs2 0x01b6),(_ucs2 0x01b7);
+insert into t1 values (_ucs2 0x01b8),(_ucs2 0x01b9),(_ucs2 0x01ba),(_ucs2 0x01bb);
+insert into t1 values (_ucs2 0x01bc),(_ucs2 0x01bd),(_ucs2 0x01be),(_ucs2 0x01bf);
+insert into t1 values (_ucs2 0x01c0),(_ucs2 0x01c1),(_ucs2 0x01c2),(_ucs2 0x01c3);
+insert into t1 values (_ucs2 0x01c4),(_ucs2 0x01c5),(_ucs2 0x01c6),(_ucs2 0x01c7);
+insert into t1 values (_ucs2 0x01c8),(_ucs2 0x01c9),(_ucs2 0x01ca),(_ucs2 0x01cb);
+insert into t1 values (_ucs2 0x01cc),(_ucs2 0x01cd),(_ucs2 0x01ce),(_ucs2 0x01cf);
+insert into t1 values (_ucs2 0x01d0),(_ucs2 0x01d1),(_ucs2 0x01d2),(_ucs2 0x01d3);
+insert into t1 values (_ucs2 0x01d4),(_ucs2 0x01d5),(_ucs2 0x01d6),(_ucs2 0x01d7);
+insert into t1 values (_ucs2 0x01d8),(_ucs2 0x01d9),(_ucs2 0x01da),(_ucs2 0x01db);
+insert into t1 values (_ucs2 0x01dc),(_ucs2 0x01dd),(_ucs2 0x01de),(_ucs2 0x01df);
+insert into t1 values (_ucs2 0x01e0),(_ucs2 0x01e1),(_ucs2 0x01e2),(_ucs2 0x01e3);
+insert into t1 values (_ucs2 0x01e4),(_ucs2 0x01e5),(_ucs2 0x01e6),(_ucs2 0x01e7);
+insert into t1 values (_ucs2 0x01e8),(_ucs2 0x01e9),(_ucs2 0x01ea),(_ucs2 0x01eb);
+insert into t1 values (_ucs2 0x01ec),(_ucs2 0x01ed),(_ucs2 0x01ee),(_ucs2 0x01ef);
+insert into t1 values (_ucs2 0x01f0),(_ucs2 0x01f1),(_ucs2 0x01f2),(_ucs2 0x01f3);
+insert into t1 values (_ucs2 0x01f4),(_ucs2 0x01f5),(_ucs2 0x01f6),(_ucs2 0x01f7);
+insert into t1 values (_ucs2 0x01f8),(_ucs2 0x01f9),(_ucs2 0x01fa),(_ucs2 0x01fb);
+insert into t1 values (_ucs2 0x01fc),(_ucs2 0x01fd),(_ucs2 0x01fe),(_ucs2 0x01ff);
+INSERT INTO t1 VALUES (_ucs2 0x1EA0),(_ucs2 0x1EA1),(_ucs2 0x1EA2),(_ucs2 0x1EA3);
+INSERT INTO t1 VALUES (_ucs2 0x1EA4),(_ucs2 0x1EA5),(_ucs2 0x1EA6),(_ucs2 0x1EA7);
+INSERT INTO t1 VALUES (_ucs2 0x1EA8),(_ucs2 0x1EA9),(_ucs2 0x1EAA),(_ucs2 0x1EAB);
+INSERT INTO t1 VALUES (_ucs2 0x1EAC),(_ucs2 0x1EAD),(_ucs2 0x1EAE),(_ucs2 0x1EAF);
+INSERT INTO t1 VALUES (_ucs2 0x1EB0),(_ucs2 0x1EB1),(_ucs2 0x1EB2),(_ucs2 0x1EB3);
+INSERT INTO t1 VALUES (_ucs2 0x1EB4),(_ucs2 0x1EB5),(_ucs2 0x1EB6),(_ucs2 0x1EB7);
+INSERT INTO t1 VALUES (_ucs2 0x1EB8),(_ucs2 0x1EB9),(_ucs2 0x1EBA),(_ucs2 0x1EBB);
+INSERT INTO t1 VALUES (_ucs2 0x1EBC),(_ucs2 0x1EBD),(_ucs2 0x1EBE),(_ucs2 0x1EBF);
+INSERT INTO t1 VALUES (_ucs2 0x1EC0),(_ucs2 0x1EC1),(_ucs2 0x1EC2),(_ucs2 0x1EC3);
+INSERT INTO t1 VALUES (_ucs2 0x1EC4),(_ucs2 0x1EC5),(_ucs2 0x1EC6),(_ucs2 0x1EC7);
+INSERT INTO t1 VALUES (_ucs2 0x1EC8),(_ucs2 0x1EC9),(_ucs2 0x1ECA),(_ucs2 0x1ECB);
+INSERT INTO t1 VALUES (_ucs2 0x1ECC),(_ucs2 0x1ECD),(_ucs2 0x1ECE),(_ucs2 0x1ECF);
+INSERT INTO t1 VALUES (_ucs2 0x1ED0),(_ucs2 0x1ED1),(_ucs2 0x1ED2),(_ucs2 0x1ED3);
+INSERT INTO t1 VALUES (_ucs2 0x1ED4),(_ucs2 0x1ED5),(_ucs2 0x1ED6),(_ucs2 0x1ED7);
+INSERT INTO t1 VALUES (_ucs2 0x1ED8),(_ucs2 0x1ED9),(_ucs2 0x1EDA),(_ucs2 0x1EDB);
+INSERT INTO t1 VALUES (_ucs2 0x1EDC),(_ucs2 0x1EDD),(_ucs2 0x1EDE),(_ucs2 0x1EDF);
+INSERT INTO t1 VALUES (_ucs2 0x1EE0),(_ucs2 0x1EE1),(_ucs2 0x1EE2),(_ucs2 0x1EE3);
+INSERT INTO t1 VALUES (_ucs2 0x1EE4),(_ucs2 0x1EE5),(_ucs2 0x1EE6),(_ucs2 0x1EE7);
+INSERT INTO t1 VALUES (_ucs2 0x1EE8),(_ucs2 0x1EE9),(_ucs2 0x1EEA),(_ucs2 0x1EEB);
+INSERT INTO t1 VALUES (_ucs2 0x1EEC),(_ucs2 0x1EED),(_ucs2 0x1EEE),(_ucs2 0x1EEF);
+INSERT INTO t1 VALUES (_ucs2 0x1EF0),(_ucs2 0x1EF1);
+insert into t1 values ('AA'),('Aa'),('aa'),('aA');
+insert into t1 values ('AE'),('Ae'),('ae'),('aE');
+insert into t1 values ('CH'),('Ch'),('ch'),('cH');
+insert into t1 values ('DZ'),('Dz'),('dz'),('dZ');
+insert into t1 values ('DŽ'),('Dž'),('dž'),('dŽ');
+insert into t1 values ('IJ'),('Ij'),('ij'),('iJ');
+insert into t1 values ('LJ'),('Lj'),('lj'),('lJ');
+insert into t1 values ('LL'),('Ll'),('ll'),('lL');
+insert into t1 values ('NJ'),('Nj'),('nj'),('nJ');
+insert into t1 values ('OE'),('Oe'),('oe'),('oE');
+insert into t1 values ('SS'),('Ss'),('ss'),('sS');
+insert into t1 values ('RR'),('Rr'),('rr'),('rR');
+INSERT INTO t1 VALUES('ẞ');
+INSERT INTO t1 SELECT CONCAT(a,' ') FROM t1;
+CALL test_styles('uca1400', '');
+
+SELECT CONCAT(GROUP_CONCAT(a ORDER BY BINARY(a)),',') FROM t1 GROUP BY a COLLATE uca1400_nopad_as_cs
+CONCAT(GROUP_CONCAT(a ORDER BY BINARY(a)),',')
+÷,
+÷ ,
+×,
+× ,
+a,
+A,
+á,
+Ã,
+à,
+À,
+ă,
+Ä‚,
+ắ,
+Ắ,
+ằ,
+Ằ,
+ẵ,
+Ẵ,
+ẳ,
+Ẳ,
+â,
+Â,
+ấ,
+Ấ,
+ầ,
+Ầ,
+ẫ,
+Ẫ,
+ẩ,
+Ẩ,
+ÇŽ,
+Ç,
+Ã¥,
+Ã…,
+Ç»,
+Ǻ,
+ä,
+Ä,
+ÇŸ,
+Çž,
+ã,
+Ã,
+Ç¡,
+Ç ,
+Ä…,
+Ä„,
+Ä,
+Ä€,
+ả,
+Ả,
+ạ,
+Ạ,
+ặ,
+Ặ,
+ậ,
+Ậ,
+a ,
+A ,
+á ,
+Ã ,
+à ,
+À ,
+ă ,
+Ä‚ ,
+ắ ,
+Ắ ,
+ằ ,
+Ằ ,
+ẵ ,
+Ẵ ,
+ẳ ,
+Ẳ ,
+â ,
+Â ,
+ấ ,
+Ấ ,
+ầ ,
+Ầ ,
+ẫ ,
+Ẫ ,
+ẩ ,
+Ẩ ,
+ÇŽ ,
+Ç ,
+Ã¥ ,
+Ã… ,
+Ç» ,
+Ǻ ,
+ä ,
+Ä ,
+ÇŸ ,
+Çž ,
+ã ,
+Ã ,
+Ç¡ ,
+Ç  ,
+Ä… ,
+Ä„ ,
+Ä ,
+Ä€ ,
+ả ,
+Ả ,
+ạ ,
+Ạ ,
+ặ ,
+Ặ ,
+ậ ,
+Ậ ,
+aa,
+aA,
+Aa,
+AA,
+aa ,
+aA ,
+Aa ,
+AA ,
+ae,
+aE,
+Ae,
+AE,
+æ,
+Æ,
+ǽ,
+Ǽ,
+Ç£,
+Ç¢,
+ae ,
+aE ,
+Ae ,
+AE ,
+æ ,
+Æ ,
+ǽ ,
+Ǽ ,
+Ç£ ,
+Ç¢ ,
+b,
+B,
+b ,
+B ,
+Æ€,
+Æ€ ,
+Æ,
+Æ ,
+ƃ,
+Æ‚,
+ƃ ,
+Æ‚ ,
+c,
+C,
+ć,
+Ć,
+ĉ,
+Ĉ,
+Ä,
+Č,
+Ä‹,
+ÄŠ,
+ç,
+Ç,
+c ,
+C ,
+ć ,
+Ć ,
+ĉ ,
+Ĉ ,
+Ä ,
+Č ,
+Ä‹ ,
+ÄŠ ,
+ç ,
+Ç ,
+ch,
+cH,
+Ch,
+CH,
+ch ,
+cH ,
+Ch ,
+CH ,
+ƈ,
+Ƈ,
+ƈ ,
+Ƈ ,
+d,
+D,
+Ä,
+ÄŽ,
+Ä‘,
+Ä,
+ð,
+Ã,
+d ,
+D ,
+Ä ,
+ÄŽ ,
+Ä‘ ,
+Ä ,
+ð ,
+Ã ,
+dz,
+dZ,
+dz,
+Dz,
+DZ,
+Dz,
+DZ,
+dž,
+dŽ,
+dž,
+Dž,
+DŽ,
+Ç…,
+Ç„,
+dz ,
+dZ ,
+dz ,
+Dz ,
+DZ ,
+Dz ,
+DZ ,
+dž ,
+dŽ ,
+dž ,
+Dž ,
+DŽ ,
+Ç… ,
+Ç„ ,
+Ɖ,
+Ɖ ,
+ÆŠ,
+ÆŠ ,
+ƌ,
+Æ‹,
+ƌ ,
+Æ‹ ,
+e,
+E,
+é,
+É,
+è,
+È,
+Ä•,
+Ä”,
+ê,
+Ê,
+ế,
+Ế,
+á»,
+Ề,
+á»…,
+Ễ,
+ể,
+Ể,
+Ä›,
+Äš,
+ë,
+Ë,
+ẽ,
+Ẽ,
+Ä—,
+Ä–,
+Ä™,
+Ę,
+Ä“,
+Ä’,
+ẻ,
+Ẻ,
+ẹ,
+Ẹ,
+ệ,
+Ệ,
+e ,
+E ,
+é ,
+É ,
+è ,
+È ,
+Ä• ,
+Ä” ,
+ê ,
+Ê ,
+ế ,
+Ế ,
+á» ,
+Ề ,
+á»… ,
+Ễ ,
+ể ,
+Ể ,
+Ä› ,
+Äš ,
+ë ,
+Ë ,
+ẽ ,
+Ẽ ,
+Ä— ,
+Ä– ,
+Ä™ ,
+Ę ,
+Ä“ ,
+Ä’ ,
+ẻ ,
+Ẻ ,
+ẹ ,
+Ẹ ,
+ệ ,
+Ệ ,
+Ç,
+ÆŽ,
+Ç ,
+ÆŽ ,
+Æ,
+Æ ,
+Æ,
+Æ ,
+f,
+F,
+f ,
+F ,
+Æ’,
+Æ‘,
+Æ’ ,
+Æ‘ ,
+g,
+G,
+ǵ,
+Ç´,
+ÄŸ,
+Äž,
+Ä,
+Ĝ,
+ǧ,
+Ǧ,
+Ä¡,
+Ä ,
+Ä£,
+Ä¢,
+g ,
+G ,
+ǵ ,
+Ç´ ,
+ÄŸ ,
+Äž ,
+Ä ,
+Ĝ ,
+ǧ ,
+Ǧ ,
+Ä¡ ,
+Ä  ,
+Ä£ ,
+Ä¢ ,
+Ç¥,
+Ǥ,
+Ç¥ ,
+Ǥ ,
+Æ“,
+Æ“ ,
+Æ”,
+Æ” ,
+Æ£,
+Æ¢,
+Æ£ ,
+Æ¢ ,
+h,
+H,
+Ä¥,
+Ĥ,
+ħ,
+Ħ,
+h ,
+H ,
+Ä¥ ,
+Ĥ ,
+ħ ,
+Ħ ,
+Æ•,
+Ƕ,
+Æ• ,
+Ƕ ,
+i,
+I,
+í,
+Ã,
+ì,
+Ì,
+Ä­,
+Ĭ,
+î,
+ÃŽ,
+Ç,
+Ç,
+ï,
+Ã,
+Ä©,
+Ĩ,
+Ä°,
+į,
+Ä®,
+Ä«,
+Ī,
+ỉ,
+Ỉ,
+ị,
+Ị,
+i ,
+I ,
+í ,
+Ã ,
+ì ,
+Ì ,
+Ä­ ,
+Ĭ ,
+î ,
+ÃŽ ,
+Ç ,
+Ç ,
+ï ,
+Ã ,
+Ä© ,
+Ĩ ,
+Ä° ,
+į ,
+Ä® ,
+Ä« ,
+Ī ,
+ỉ ,
+Ỉ ,
+ị ,
+Ị ,
+ij,
+iJ,
+ij,
+Ij,
+IJ,
+IJ,
+ij ,
+iJ ,
+ij ,
+Ij ,
+IJ ,
+IJ ,
+ı,
+ı ,
+Æ—,
+Æ— ,
+Æ–,
+Æ– ,
+j,
+J,
+ĵ,
+Ä´,
+Ç°,
+j ,
+J ,
+ĵ ,
+Ä´ ,
+Ç° ,
+k,
+K,
+Ç©,
+Ǩ,
+Ä·,
+Ķ,
+k ,
+K ,
+Ç© ,
+Ǩ ,
+Ä· ,
+Ķ ,
+Æ™,
+Ƙ,
+Æ™ ,
+Ƙ ,
+l,
+L,
+ĺ,
+Ĺ,
+ľ,
+Ľ,
+ļ,
+Ä»,
+Å‚,
+Å,
+Å€,
+Ä¿,
+l ,
+L ,
+ĺ ,
+Ĺ ,
+ľ ,
+Ľ ,
+ļ ,
+Ä» ,
+Å‚ ,
+Å ,
+Å€ ,
+Ä¿ ,
+lj,
+lJ,
+lj,
+Lj,
+LJ,
+Lj,
+LJ,
+lj ,
+lJ ,
+lj ,
+Lj ,
+LJ ,
+Lj ,
+LJ ,
+ll,
+lL,
+Ll,
+LL,
+ll ,
+lL ,
+Ll ,
+LL ,
+Æš,
+Æš ,
+Æ›,
+Æ› ,
+m,
+M,
+m ,
+M ,
+n,
+N,
+Å„,
+Ń,
+ǹ,
+Ǹ,
+ň,
+Ň,
+ñ,
+Ñ,
+ņ,
+Å…,
+n ,
+N ,
+Å„ ,
+Ń ,
+ǹ ,
+Ǹ ,
+ň ,
+Ň ,
+ñ ,
+Ñ ,
+ņ ,
+Å… ,
+nj,
+nJ,
+nj,
+Nj,
+NJ,
+Ç‹,
+ÇŠ,
+nj ,
+nJ ,
+nj ,
+Nj ,
+NJ ,
+Ç‹ ,
+ÇŠ ,
+Æ,
+Æ ,
+Æž,
+Æž ,
+Å‹,
+ÅŠ,
+Å‹ ,
+ÅŠ ,
+o,
+O,
+ó,
+Ó,
+ò,
+Ã’,
+Å,
+ÅŽ,
+ô,
+Ô,
+ố,
+á»,
+ồ,
+á»’,
+á»—,
+á»–,
+ổ,
+á»”,
+Ç’,
+Ç‘,
+ö,
+Ö,
+Å‘,
+Å,
+õ,
+Õ,
+ø,
+Ø,
+Ç¿,
+Ǿ,
+Ç«,
+Ǫ,
+Ç­,
+Ǭ,
+Å,
+Ō,
+á»,
+Ỏ,
+Æ¡,
+Æ ,
+á»›,
+Ớ,
+á»,
+Ờ,
+ỡ,
+á» ,
+ở,
+Ở,
+ợ,
+Ợ,
+á»,
+Ọ,
+á»™,
+Ộ,
+o ,
+O ,
+ó ,
+Ó ,
+ò ,
+Ã’ ,
+Å ,
+ÅŽ ,
+ô ,
+Ô ,
+ố ,
+á» ,
+ồ ,
+á»’ ,
+á»— ,
+á»– ,
+ổ ,
+á»” ,
+Ç’ ,
+Ç‘ ,
+ö ,
+Ö ,
+Å‘ ,
+Å ,
+õ ,
+Õ ,
+ø ,
+Ø ,
+Ç¿ ,
+Ǿ ,
+Ç« ,
+Ǫ ,
+Ç­ ,
+Ǭ ,
+Å ,
+Ō ,
+á» ,
+Ỏ ,
+Æ¡ ,
+Æ  ,
+á»› ,
+Ớ ,
+á» ,
+Ờ ,
+ỡ ,
+á»  ,
+ở ,
+Ở ,
+ợ ,
+Ợ ,
+á» ,
+Ọ ,
+á»™ ,
+Ộ ,
+oe,
+oE,
+Oe,
+OE,
+Å“,
+Å’,
+oe ,
+oE ,
+Oe ,
+OE ,
+Å“ ,
+Å’ ,
+Ɔ,
+Ɔ ,
+ÆŸ,
+ÆŸ ,
+p,
+P,
+p ,
+P ,
+Æ¥,
+Ƥ,
+Æ¥ ,
+Ƥ ,
+q,
+Q,
+q ,
+Q ,
+ĸ,
+ĸ ,
+r,
+R,
+Å•,
+Å”,
+Å™,
+Ř,
+Å—,
+Å–,
+r ,
+R ,
+Å• ,
+Å” ,
+Å™ ,
+Ř ,
+Å— ,
+Å– ,
+rr,
+rR,
+Rr,
+RR,
+rr ,
+rR ,
+Rr ,
+RR ,
+Ʀ,
+Ʀ ,
+s,
+S,
+Å›,
+Åš,
+Å,
+Ŝ,
+Å¡,
+Å ,
+ÅŸ,
+Åž,
+Å¿,
+s ,
+S ,
+Å› ,
+Åš ,
+Å ,
+Ŝ ,
+Å¡ ,
+Å  ,
+ÅŸ ,
+Åž ,
+Å¿ ,
+ss,
+sS,
+Ss,
+SS,
+ß,
+ẞ,
+ss ,
+sS ,
+Ss ,
+SS ,
+ß ,
+ẞ ,
+Æ©,
+Æ© ,
+ƪ,
+ƪ ,
+t,
+T,
+Å¥,
+Ť,
+Å£,
+Å¢,
+t ,
+T ,
+Å¥ ,
+Ť ,
+Å£ ,
+Å¢ ,
+ƾ,
+ƾ ,
+ŧ,
+Ŧ,
+ŧ ,
+Ŧ ,
+Æ«,
+Æ« ,
+Æ­,
+Ƭ,
+Æ­ ,
+Ƭ ,
+Æ®,
+Æ® ,
+u,
+U,
+ú,
+Ú,
+ù,
+Ù,
+Å­,
+Ŭ,
+û,
+Û,
+Ç”,
+Ç“,
+ů,
+Å®,
+ü,
+Ü,
+ǘ,
+Ç—,
+ǜ,
+Ç›,
+Çš,
+Ç™,
+Ç–,
+Ç•,
+ű,
+Å°,
+Å©,
+Ũ,
+ų,
+Ų,
+Å«,
+Ū,
+ủ,
+Ủ,
+Æ°,
+Ư,
+ứ,
+Ứ,
+ừ,
+Ừ,
+ữ,
+á»®,
+á»­,
+Ử,
+á»±,
+á»°,
+ụ,
+Ụ,
+u ,
+U ,
+ú ,
+Ú ,
+ù ,
+Ù ,
+Å­ ,
+Ŭ ,
+û ,
+Û ,
+Ç” ,
+Ç“ ,
+ů ,
+Å® ,
+ü ,
+Ü ,
+ǘ ,
+Ç— ,
+ǜ ,
+Ç› ,
+Çš ,
+Ç™ ,
+Ç– ,
+Ç• ,
+ű ,
+Å° ,
+Å© ,
+Ũ ,
+ų ,
+Ų ,
+Å« ,
+Ū ,
+ủ ,
+Ủ ,
+Æ° ,
+Ư ,
+ứ ,
+Ứ ,
+ừ ,
+Ừ ,
+ữ ,
+á»® ,
+á»­ ,
+Ử ,
+á»± ,
+á»° ,
+ụ ,
+Ụ ,
+Ɯ,
+Ɯ ,
+Ʊ,
+Ʊ ,
+v,
+V,
+v ,
+V ,
+Ʋ,
+Ʋ ,
+w,
+W,
+ŵ,
+Å´,
+w ,
+W ,
+ŵ ,
+Å´ ,
+x,
+X,
+x ,
+X ,
+y,
+Y,
+ý,
+Ã,
+Å·,
+Ŷ,
+ÿ,
+Ÿ,
+y ,
+Y ,
+ý ,
+Ã ,
+Å· ,
+Ŷ ,
+ÿ ,
+Ÿ ,
+Æ´,
+Ƴ,
+Æ´ ,
+Ƴ ,
+z,
+Z,
+ź,
+Ź,
+ž,
+Ž,
+ż,
+Å»,
+z ,
+Z ,
+ź ,
+Ź ,
+ž ,
+Ž ,
+ż ,
+Å» ,
+Æ,
+Æ ,
+ƶ,
+Ƶ,
+ƶ ,
+Ƶ ,
+Æ·,
+ǯ,
+Ç®,
+Æ· ,
+ǯ ,
+Ç® ,
+ƹ,
+Ƹ,
+ƹ ,
+Ƹ ,
+ƺ,
+ƺ ,
+þ,
+Þ,
+þ ,
+Þ ,
+Æ¿,
+Ç·,
+Æ¿ ,
+Ç· ,
+Æ»,
+Æ» ,
+ƨ,
+Ƨ,
+ƨ ,
+Ƨ ,
+ƽ,
+Ƽ,
+ƽ ,
+Ƽ ,
+Æ…,
+Æ„,
+Æ… ,
+Æ„ ,
+ʼn,
+ʼn ,
+Ç€,
+Ç€ ,
+Ç,
+Ç ,
+Ç‚,
+Ç‚ ,
+ǃ,
+ǃ ,
+
+SELECT CONCAT(GROUP_CONCAT(a ORDER BY BINARY(a)),',') FROM t1 GROUP BY a COLLATE uca1400_as_cs
+CONCAT(GROUP_CONCAT(a ORDER BY BINARY(a)),',')
+÷,÷ ,
+×,× ,
+a,a ,
+A,A ,
+á,á ,
+Ã,Ã ,
+à,à ,
+À,À ,
+ă,ă ,
+Ä‚,Ä‚ ,
+ắ,ắ ,
+Ắ,Ắ ,
+ằ,ằ ,
+Ằ,Ằ ,
+ẵ,ẵ ,
+Ẵ,Ẵ ,
+ẳ,ẳ ,
+Ẳ,Ẳ ,
+â,â ,
+Â, ,
+ấ,ấ ,
+Ấ,Ấ ,
+ầ,ầ ,
+Ầ,Ầ ,
+ẫ,ẫ ,
+Ẫ,Ẫ ,
+ẩ,ẩ ,
+Ẩ,Ẩ ,
+ÇŽ,ÇŽ ,
+Ç,Ç ,
+Ã¥,Ã¥ ,
+Ã…,Ã… ,
+Ç»,Ç» ,
+Ǻ,Ǻ ,
+ä,ä ,
+Ä,Ä ,
+ÇŸ,ÇŸ ,
+Çž,Çž ,
+ã,ã ,
+Ã,Ã ,
+Ç¡,Ç¡ ,
+Ç ,Ç  ,
+Ä…,Ä… ,
+Ä„,Ä„ ,
+Ä,Ä ,
+Ä€,Ä€ ,
+ả,ả ,
+Ả,Ả ,
+ạ,ạ ,
+Ạ,Ạ ,
+ặ,ặ ,
+Ặ,Ặ ,
+ậ,ậ ,
+Ậ,Ậ ,
+aa,aa ,
+aA,aA ,
+Aa,Aa ,
+AA,AA ,
+ae,ae ,
+aE,aE ,
+Ae,Ae ,
+AE,AE ,
+æ,æ ,
+Æ,Æ ,
+ǽ,ǽ ,
+Ǽ,Ǽ ,
+Ç£,Ç£ ,
+Ç¢,Ç¢ ,
+b,b ,
+B,B ,
+Æ€,Æ€ ,
+Æ,Æ ,
+ƃ,ƃ ,
+Æ‚,Æ‚ ,
+c,c ,
+C,C ,
+ć,ć ,
+Ć,Ć ,
+ĉ,ĉ ,
+Ĉ,Ĉ ,
+Ä,Ä ,
+Č,Č ,
+Ä‹,Ä‹ ,
+ÄŠ,ÄŠ ,
+ç,ç ,
+Ç,Ç ,
+ch,ch ,
+cH,cH ,
+Ch,Ch ,
+CH,CH ,
+ƈ,ƈ ,
+Ƈ,Ƈ ,
+d,d ,
+D,D ,
+Ä,Ä ,
+ÄŽ,ÄŽ ,
+Ä‘,Ä‘ ,
+Ä,Ä ,
+ð,ð ,
+Ã,Ã ,
+dz,dz ,
+dZ,dZ ,
+dz,dz ,
+Dz,Dz ,
+DZ,DZ ,
+Dz,Dz ,
+DZ,DZ ,
+dž,dž ,
+dŽ,dŽ ,
+dž,dž ,
+Dž,Dž ,
+DŽ,DŽ ,
+Ç…,Ç… ,
+Ç„,Ç„ ,
+Ɖ,Ɖ ,
+ÆŠ,ÆŠ ,
+ƌ,ƌ ,
+Æ‹,Æ‹ ,
+e,e ,
+E,E ,
+é,é ,
+É,É ,
+è,è ,
+È,È ,
+Ä•,Ä• ,
+Ä”,Ä” ,
+ê,ê ,
+Ê,Ê ,
+ế,ế ,
+Ế,Ế ,
+á»,á» ,
+Ề,Ề ,
+á»…,á»… ,
+Ễ,Ễ ,
+ể,ể ,
+Ể,Ể ,
+Ä›,Ä› ,
+Äš,Äš ,
+ë,ë ,
+Ë,Ë ,
+ẽ,ẽ ,
+Ẽ,Ẽ ,
+Ä—,Ä— ,
+Ä–,Ä– ,
+Ä™,Ä™ ,
+Ę,Ę ,
+Ä“,Ä“ ,
+Ä’,Ä’ ,
+ẻ,ẻ ,
+Ẻ,Ẻ ,
+ẹ,ẹ ,
+Ẹ,Ẹ ,
+ệ,ệ ,
+Ệ,Ệ ,
+Ç,Ç ,
+ÆŽ,ÆŽ ,
+Æ,Æ ,
+Æ,Æ ,
+f,f ,
+F,F ,
+Æ’,Æ’ ,
+Æ‘,Æ‘ ,
+g,g ,
+G,G ,
+ǵ,ǵ ,
+Ç´,Ç´ ,
+ÄŸ,ÄŸ ,
+Äž,Äž ,
+Ä,Ä ,
+Ĝ,Ĝ ,
+ǧ,ǧ ,
+Ǧ,Ǧ ,
+Ä¡,Ä¡ ,
+Ä ,Ä  ,
+Ä£,Ä£ ,
+Ä¢,Ä¢ ,
+Ç¥,Ç¥ ,
+Ǥ,Ǥ ,
+Æ“,Æ“ ,
+Æ”,Æ” ,
+Æ£,Æ£ ,
+Æ¢,Æ¢ ,
+h,h ,
+H,H ,
+Ä¥,Ä¥ ,
+Ĥ,Ĥ ,
+ħ,ħ ,
+Ħ,Ħ ,
+Æ•,Æ• ,
+Ƕ,Ƕ ,
+i,i ,
+I,I ,
+í,í ,
+Ã,Ã ,
+ì,ì ,
+Ì,Ì ,
+Ä­,Ä­ ,
+Ĭ,Ĭ ,
+î,î ,
+ÃŽ,ÃŽ ,
+Ç,Ç ,
+Ç,Ç ,
+ï,ï ,
+Ã,Ã ,
+Ä©,Ä© ,
+Ĩ,Ĩ ,
+Ä°,Ä° ,
+į,į ,
+Ä®,Ä® ,
+Ä«,Ä« ,
+Ī,Ī ,
+ỉ,ỉ ,
+Ỉ,Ỉ ,
+ị,ị ,
+Ị,Ị ,
+ij,ij ,
+iJ,iJ ,
+ij,ij ,
+Ij,Ij ,
+IJ,IJ ,
+IJ,IJ ,
+ı,ı ,
+Æ—,Æ— ,
+Æ–,Æ– ,
+j,j ,
+J,J ,
+ĵ,ĵ ,
+Ä´,Ä´ ,
+Ç°,Ç° ,
+k,k ,
+K,K ,
+Ç©,Ç© ,
+Ǩ,Ǩ ,
+Ä·,Ä· ,
+Ķ,Ķ ,
+Æ™,Æ™ ,
+Ƙ,Ƙ ,
+l,l ,
+L,L ,
+ĺ,ĺ ,
+Ĺ,Ĺ ,
+ľ,ľ ,
+Ľ,Ľ ,
+ļ,ļ ,
+Ä»,Ä» ,
+Å‚,Å‚ ,
+Å,Å ,
+Å€,Å€ ,
+Ä¿,Ä¿ ,
+lj,lj ,
+lJ,lJ ,
+lj,lj ,
+Lj,Lj ,
+LJ,LJ ,
+Lj,Lj ,
+LJ,LJ ,
+ll,ll ,
+lL,lL ,
+Ll,Ll ,
+LL,LL ,
+Æš,Æš ,
+Æ›,Æ› ,
+m,m ,
+M,M ,
+n,n ,
+N,N ,
+Å„,Å„ ,
+Ń,Ń ,
+ǹ,ǹ ,
+Ǹ,Ǹ ,
+ň,ň ,
+Ň,Ň ,
+ñ,ñ ,
+Ñ,Ñ ,
+ņ,ņ ,
+Å…,Å… ,
+nj,nj ,
+nJ,nJ ,
+nj,nj ,
+Nj,Nj ,
+NJ,NJ ,
+Ç‹,Ç‹ ,
+ÇŠ,ÇŠ ,
+Æ,Æ ,
+Æž,Æž ,
+Å‹,Å‹ ,
+ÅŠ,ÅŠ ,
+o,o ,
+O,O ,
+ó,ó ,
+Ó,Ó ,
+ò,ò ,
+Ã’,Ã’ ,
+Å,Å ,
+ÅŽ,ÅŽ ,
+ô,ô ,
+Ô,Ô ,
+ố,ố ,
+á»,á» ,
+ồ,ồ ,
+á»’,á»’ ,
+á»—,á»— ,
+á»–,á»– ,
+ổ,ổ ,
+á»”,á»” ,
+Ç’,Ç’ ,
+Ç‘,Ç‘ ,
+ö,ö ,
+Ö,Ö ,
+Å‘,Å‘ ,
+Å,Å ,
+õ,õ ,
+Õ,Õ ,
+ø,ø ,
+Ø,Ø ,
+Ç¿,Ç¿ ,
+Ǿ,Ǿ ,
+Ç«,Ç« ,
+Ǫ,Ǫ ,
+Ç­,Ç­ ,
+Ǭ,Ǭ ,
+Å,Å ,
+Ō,Ō ,
+á»,á» ,
+Ỏ,Ỏ ,
+Æ¡,Æ¡ ,
+Æ ,Æ  ,
+á»›,á»› ,
+Ớ,Ớ ,
+á»,á» ,
+Ờ,Ờ ,
+ỡ,ỡ ,
+á» ,á»  ,
+ở,ở ,
+Ở,Ở ,
+ợ,ợ ,
+Ợ,Ợ ,
+á»,á» ,
+Ọ,Ọ ,
+á»™,á»™ ,
+Ộ,Ộ ,
+oe,oe ,
+oE,oE ,
+Oe,Oe ,
+OE,OE ,
+Å“,Å“ ,
+Å’,Å’ ,
+Ɔ,Ɔ ,
+ÆŸ,ÆŸ ,
+p,p ,
+P,P ,
+Æ¥,Æ¥ ,
+Ƥ,Ƥ ,
+q,q ,
+Q,Q ,
+ĸ,ĸ ,
+r,r ,
+R,R ,
+Å•,Å• ,
+Å”,Å” ,
+Å™,Å™ ,
+Ř,Ř ,
+Å—,Å— ,
+Å–,Å– ,
+rr,rr ,
+rR,rR ,
+Rr,Rr ,
+RR,RR ,
+Ʀ,Ʀ ,
+s,s ,
+S,S ,
+Å›,Å› ,
+Åš,Åš ,
+Å,Å ,
+Ŝ,Ŝ ,
+Å¡,Å¡ ,
+Å ,Å  ,
+ÅŸ,ÅŸ ,
+Åž,Åž ,
+Å¿,Å¿ ,
+ss,ss ,
+sS,sS ,
+Ss,Ss ,
+SS,SS ,
+ß,ß ,
+ẞ,ẞ ,
+Æ©,Æ© ,
+ƪ,ƪ ,
+t,t ,
+T,T ,
+Å¥,Å¥ ,
+Ť,Ť ,
+Å£,Å£ ,
+Å¢,Å¢ ,
+ƾ,ƾ ,
+ŧ,ŧ ,
+Ŧ,Ŧ ,
+Æ«,Æ« ,
+Æ­,Æ­ ,
+Ƭ,Ƭ ,
+Æ®,Æ® ,
+u,u ,
+U,U ,
+ú,ú ,
+Ú,Ú ,
+ù,ù ,
+Ù,Ù ,
+Å­,Å­ ,
+Ŭ,Ŭ ,
+û,û ,
+Û,Û ,
+Ç”,Ç” ,
+Ç“,Ç“ ,
+ů,ů ,
+Å®,Å® ,
+ü,ü ,
+Ü,Ü ,
+ǘ,ǘ ,
+Ç—,Ç— ,
+ǜ,ǜ ,
+Ç›,Ç› ,
+Çš,Çš ,
+Ç™,Ç™ ,
+Ç–,Ç– ,
+Ç•,Ç• ,
+ű,ű ,
+Å°,Å° ,
+Å©,Å© ,
+Ũ,Ũ ,
+ų,ų ,
+Ų,Ų ,
+Å«,Å« ,
+Ū,Ū ,
+ủ,ủ ,
+Ủ,Ủ ,
+Æ°,Æ° ,
+Ư,Ư ,
+ứ,ứ ,
+Ứ,Ứ ,
+ừ,ừ ,
+Ừ,Ừ ,
+ữ,ữ ,
+á»®,á»® ,
+á»­,á»­ ,
+Ử,Ử ,
+á»±,á»± ,
+á»°,á»° ,
+ụ,ụ ,
+Ụ,Ụ ,
+Ɯ,Ɯ ,
+Ʊ,Ʊ ,
+v,v ,
+V,V ,
+Ʋ,Ʋ ,
+w,w ,
+W,W ,
+ŵ,ŵ ,
+Å´,Å´ ,
+x,x ,
+X,X ,
+y,y ,
+Y,Y ,
+ý,ý ,
+Ã,Ã ,
+Å·,Å· ,
+Ŷ,Ŷ ,
+ÿ,ÿ ,
+Ÿ,Ÿ ,
+Æ´,Æ´ ,
+Ƴ,Ƴ ,
+z,z ,
+Z,Z ,
+ź,ź ,
+Ź,Ź ,
+ž,ž ,
+Ž,Ž ,
+ż,ż ,
+Å»,Å» ,
+Æ,Æ ,
+ƶ,ƶ ,
+Ƶ,Ƶ ,
+Æ·,Æ· ,
+ǯ,ǯ ,
+Ç®,Ç® ,
+ƹ,ƹ ,
+Ƹ,Ƹ ,
+ƺ,ƺ ,
+þ,þ ,
+Þ,Þ ,
+Æ¿,Æ¿ ,
+Ç·,Ç· ,
+Æ»,Æ» ,
+ƨ,ƨ ,
+Ƨ,Ƨ ,
+ƽ,ƽ ,
+Ƽ,Ƽ ,
+Æ…,Æ… ,
+Æ„,Æ„ ,
+ʼn,ʼn ,
+Ç€,Ç€ ,
+Ç,Ç ,
+Ç‚,Ç‚ ,
+ǃ,ǃ ,
+
+SELECT CONCAT(GROUP_CONCAT(a ORDER BY BINARY(a)),',') FROM t1 GROUP BY a COLLATE uca1400_nopad_as_ci
+CONCAT(GROUP_CONCAT(a ORDER BY BINARY(a)),',')
+÷,
+÷ ,
+×,
+× ,
+A,a,
+Ã,á,
+À,à,
+Ă,ă,
+Ắ,ắ,
+Ằ,ằ,
+Ẵ,ẵ,
+Ẳ,ẳ,
+Â,â,
+Ấ,ấ,
+Ầ,ầ,
+Ẫ,ẫ,
+Ẩ,ẩ,
+Ç,ÇŽ,
+Ã…,Ã¥,
+Ǻ,ǻ,
+Ä,ä,
+Çž,ÇŸ,
+Ã,ã,
+Ç ,Ç¡,
+Ä„,Ä…,
+Ä€,Ä,
+Ả,ả,
+Ạ,ạ,
+Ặ,ặ,
+Ậ,ậ,
+A ,a ,
+à ,á ,
+À ,à ,
+Ă ,ă ,
+Ắ ,ắ ,
+Ằ ,ằ ,
+Ẵ ,ẵ ,
+Ẳ ,ẳ ,
+Â ,â ,
+Ấ ,ấ ,
+Ầ ,ầ ,
+Ẫ ,ẫ ,
+Ẩ ,ẩ ,
+Ç ,ÇŽ ,
+Ã… ,Ã¥ ,
+Ǻ ,ǻ ,
+Ä ,ä ,
+Çž ,ÇŸ ,
+Ã ,ã ,
+Ç  ,Ç¡ ,
+Ä„ ,Ä… ,
+Ä€ ,Ä ,
+Ả ,ả ,
+Ạ ,ạ ,
+Ặ ,ặ ,
+Ậ ,ậ ,
+AA,Aa,aA,aa,
+AA ,Aa ,aA ,aa ,
+AE,Ae,aE,ae,
+Æ,æ,
+Ǽ,ǽ,
+Ç¢,Ç£,
+AE ,Ae ,aE ,ae ,
+Æ ,æ ,
+Ǽ ,ǽ ,
+Ç¢ ,Ç£ ,
+B,b,
+B ,b ,
+Æ€,
+Æ€ ,
+Æ,
+Æ ,
+Ƃ,ƃ,
+Ƃ ,ƃ ,
+C,c,
+Ć,ć,
+Ĉ,ĉ,
+ÄŒ,Ä,
+ÄŠ,Ä‹,
+Ç,ç,
+C ,c ,
+Ć ,ć ,
+Ĉ ,ĉ ,
+ÄŒ ,Ä ,
+ÄŠ ,Ä‹ ,
+Ç ,ç ,
+CH,Ch,cH,ch,
+CH ,Ch ,cH ,ch ,
+Ƈ,ƈ,
+Ƈ ,ƈ ,
+D,d,
+ÄŽ,Ä,
+Ä,Ä‘,
+Ã,ð,
+D ,d ,
+ÄŽ ,Ä ,
+Ä ,Ä‘ ,
+à ,ð ,
+DZ,Dz,dZ,dz,DZ,Dz,dz,
+DŽ,Dž,dŽ,dž,DŽ,Dž,dž,
+DZ ,Dz ,dZ ,dz ,DZ ,Dz ,dz ,
+DŽ ,Dž ,dŽ ,dž ,DŽ ,Dž ,dž ,
+Ɖ,
+Ɖ ,
+ÆŠ,
+ÆŠ ,
+Ƌ,ƌ,
+Ƌ ,ƌ ,
+E,e,
+É,é,
+È,è,
+Ä”,Ä•,
+Ê,ê,
+Ế,ế,
+Ề,á»,
+Ễ,ễ,
+Ể,ể,
+Äš,Ä›,
+Ë,ë,
+Ẽ,ẽ,
+Ä–,Ä—,
+Ę,ę,
+Ä’,Ä“,
+Ẻ,ẻ,
+Ẹ,ẹ,
+Ệ,ệ,
+E ,e ,
+É ,é ,
+È ,è ,
+Ä” ,Ä• ,
+Ê ,ê ,
+Ế ,ế ,
+Ề ,Ỡ,
+Ễ ,ễ ,
+Ể ,ể ,
+Äš ,Ä› ,
+Ë ,ë ,
+Ẽ ,ẽ ,
+Ä– ,Ä— ,
+Ę ,ę ,
+Ä’ ,Ä“ ,
+Ẻ ,ẻ ,
+Ẹ ,ẹ ,
+Ệ ,ệ ,
+ÆŽ,Ç,
+ÆŽ ,Ç ,
+Æ,
+Æ ,
+Æ,
+Æ ,
+F,f,
+F ,f ,
+Æ‘,Æ’,
+Æ‘ ,Æ’ ,
+G,g,
+Ǵ,ǵ,
+Äž,ÄŸ,
+Äœ,Ä,
+Ǧ,ǧ,
+Ä ,Ä¡,
+Ä¢,Ä£,
+G ,g ,
+Ǵ ,ǵ ,
+Äž ,ÄŸ ,
+Äœ ,Ä ,
+Ǧ ,ǧ ,
+Ä  ,Ä¡ ,
+Ä¢ ,Ä£ ,
+Ǥ,ǥ,
+Ǥ ,ǥ ,
+Æ“,
+Æ“ ,
+Æ”,
+Æ” ,
+Æ¢,Æ£,
+Æ¢ ,Æ£ ,
+H,h,
+Ĥ,ĥ,
+Ħ,ħ,
+H ,h ,
+Ĥ ,ĥ ,
+Ħ ,ħ ,
+ƕ,Ƕ,
+ƕ ,Ƕ ,
+I,i,
+Ã,í,
+Ì,ì,
+Ĭ,ĭ,
+Î,î,
+Ç,Ç,
+Ã,ï,
+Ĩ,ĩ,
+Ä°,
+Į,į,
+Ī,ī,
+Ỉ,ỉ,
+Ị,ị,
+I ,i ,
+à ,í ,
+Ì ,ì ,
+Ĭ ,ĭ ,
+Î ,î ,
+Ç ,Ç ,
+à ,ï ,
+Ĩ ,ĩ ,
+Ä° ,
+Į ,į ,
+Ī ,ī ,
+Ỉ ,ỉ ,
+Ị ,ị ,
+IJ,Ij,iJ,ij,IJ,ij,
+IJ ,Ij ,iJ ,ij ,IJ ,ij ,
+ı,
+ı ,
+Æ—,
+Æ— ,
+Æ–,
+Æ– ,
+J,j,
+Ĵ,ĵ,
+Ç°,
+J ,j ,
+Ĵ ,ĵ ,
+Ç° ,
+K,k,
+Ǩ,ǩ,
+Ķ,ķ,
+K ,k ,
+Ǩ ,ǩ ,
+Ķ ,ķ ,
+Ƙ,ƙ,
+Ƙ ,ƙ ,
+L,l,
+Ĺ,ĺ,
+Ľ,ľ,
+Ļ,ļ,
+Å,Å‚,
+Ä¿,Å€,
+L ,l ,
+Ĺ ,ĺ ,
+Ľ ,ľ ,
+Ļ ,ļ ,
+Å ,Å‚ ,
+Ä¿ ,Å€ ,
+LJ,Lj,lJ,lj,LJ,Lj,lj,
+LJ ,Lj ,lJ ,lj ,LJ ,Lj ,lj ,
+LL,Ll,lL,ll,
+LL ,Ll ,lL ,ll ,
+Æš,
+Æš ,
+Æ›,
+Æ› ,
+M,m,
+M ,m ,
+N,n,
+Ń,ń,
+Ǹ,ǹ,
+Ň,ň,
+Ñ,ñ,
+Ņ,ņ,
+N ,n ,
+Ń ,ń ,
+Ǹ ,ǹ ,
+Ň ,ň ,
+Ñ ,ñ ,
+Ņ ,ņ ,
+NJ,Nj,nJ,nj,NJ,Nj,nj,
+NJ ,Nj ,nJ ,nj ,NJ ,Nj ,nj ,
+Æ,
+Æ ,
+Æž,
+Æž ,
+ÅŠ,Å‹,
+ÅŠ ,Å‹ ,
+O,o,
+Ó,ó,
+Ò,ò,
+ÅŽ,Å,
+Ô,ô,
+á»,ố,
+Ồ,ồ,
+á»–,á»—,
+Ổ,ổ,
+Ç‘,Ç’,
+Ö,ö,
+Å,Å‘,
+Õ,õ,
+Ø,ø,
+Ǿ,ǿ,
+Ǫ,ǫ,
+Ǭ,ǭ,
+ÅŒ,Å,
+Ỏ,á»,
+Æ ,Æ¡,
+Ớ,ớ,
+Ờ,á»,
+Ỡ,ỡ,
+Ở,ở,
+Ợ,ợ,
+Ọ,á»,
+Ộ,ộ,
+O ,o ,
+Ó ,ó ,
+Ò ,ò ,
+ÅŽ ,Å ,
+Ô ,ô ,
+Ỡ,ố ,
+Ồ ,ồ ,
+á»– ,á»— ,
+Ổ ,ổ ,
+Ç‘ ,Ç’ ,
+Ö ,ö ,
+Å ,Å‘ ,
+Õ ,õ ,
+Ø ,ø ,
+Ǿ ,ǿ ,
+Ǫ ,ǫ ,
+Ǭ ,ǭ ,
+Ō ,Š,
+Ỏ ,Ỡ,
+Æ  ,Æ¡ ,
+Ớ ,ớ ,
+Ờ ,Ỡ,
+Ỡ ,ỡ ,
+Ở ,ở ,
+Ợ ,ợ ,
+Ọ ,Ỡ,
+Ộ ,ộ ,
+OE,Oe,oE,oe,
+Å’,Å“,
+OE ,Oe ,oE ,oe ,
+Å’ ,Å“ ,
+Ɔ,
+Ɔ ,
+ÆŸ,
+ÆŸ ,
+P,p,
+P ,p ,
+Ƥ,ƥ,
+Ƥ ,ƥ ,
+Q,q,
+Q ,q ,
+ĸ,
+ĸ ,
+R,r,
+Å”,Å•,
+Ř,ř,
+Å–,Å—,
+R ,r ,
+Å” ,Å• ,
+Ř ,ř ,
+Å– ,Å— ,
+RR,Rr,rR,rr,
+RR ,Rr ,rR ,rr ,
+Ʀ,
+Ʀ ,
+S,s,
+Åš,Å›,
+Åœ,Å,
+Å ,Å¡,
+Åž,ÅŸ,
+Å¿,
+S ,s ,
+Åš ,Å› ,
+Ŝ ,Š,
+Å  ,Å¡ ,
+Åž ,ÅŸ ,
+Å¿ ,
+SS,Ss,sS,ss,
+ß,ẞ,
+SS ,Ss ,sS ,ss ,
+ß ,ẞ ,
+Æ©,
+Æ© ,
+ƪ,
+ƪ ,
+T,t,
+Ť,ť,
+Å¢,Å£,
+T ,t ,
+Ť ,ť ,
+Å¢ ,Å£ ,
+ƾ,
+ƾ ,
+Ŧ,ŧ,
+Ŧ ,ŧ ,
+Æ«,
+Æ« ,
+Ƭ,ƭ,
+Ƭ ,ƭ ,
+Æ®,
+Æ® ,
+U,u,
+Ú,ú,
+Ù,ù,
+Ŭ,ŭ,
+Û,û,
+Ç“,Ç”,
+Ů,ů,
+Ü,ü,
+Ǘ,ǘ,
+Ǜ,ǜ,
+Ç™,Çš,
+Ç•,Ç–,
+Ű,ű,
+Ũ,ũ,
+Ų,ų,
+Ū,ū,
+Ủ,ủ,
+Ư,ư,
+Ứ,ứ,
+Ừ,ừ,
+Ữ,ữ,
+Ử,ử,
+á»°,á»±,
+Ụ,ụ,
+U ,u ,
+Ú ,ú ,
+Ù ,ù ,
+Ŭ ,ŭ ,
+Û ,û ,
+Ç“ ,Ç” ,
+Ů ,ů ,
+Ü ,ü ,
+Ǘ ,ǘ ,
+Ǜ ,ǜ ,
+Ç™ ,Çš ,
+Ç• ,Ç– ,
+Ű ,ű ,
+Ũ ,ũ ,
+Ų ,ų ,
+Ū ,ū ,
+Ủ ,ủ ,
+Ư ,ư ,
+Ứ ,ứ ,
+Ừ ,ừ ,
+Ữ ,ữ ,
+Ử ,ử ,
+á»° ,á»± ,
+Ụ ,ụ ,
+Ɯ,
+Ɯ ,
+Ʊ,
+Ʊ ,
+V,v,
+V ,v ,
+Ʋ,
+Ʋ ,
+W,w,
+Ŵ,ŵ,
+W ,w ,
+Ŵ ,ŵ ,
+X,x,
+X ,x ,
+Y,y,
+Ã,ý,
+Ŷ,ŷ,
+ÿ,Ÿ,
+Y ,y ,
+à ,ý ,
+Ŷ ,ŷ ,
+ÿ ,Ÿ ,
+Ƴ,ƴ,
+Ƴ ,ƴ ,
+Z,z,
+Ź,ź,
+Ž,ž,
+Ż,ż,
+Z ,z ,
+Ź ,ź ,
+Ž ,ž ,
+Ż ,ż ,
+Æ,
+Æ ,
+Ƶ,ƶ,
+Ƶ ,ƶ ,
+Æ·,
+Ǯ,ǯ,
+Æ· ,
+Ǯ ,ǯ ,
+Ƹ,ƹ,
+Ƹ ,ƹ ,
+ƺ,
+ƺ ,
+Þ,þ,
+Þ ,þ ,
+Æ¿,Ç·,
+Æ¿ ,Ç· ,
+Æ»,
+Æ» ,
+Ƨ,ƨ,
+Ƨ ,ƨ ,
+Ƽ,ƽ,
+Ƽ ,ƽ ,
+Æ„,Æ…,
+Æ„ ,Æ… ,
+ʼn,
+ʼn ,
+Ç€,
+Ç€ ,
+Ç,
+Ç ,
+Ç‚,
+Ç‚ ,
+ǃ,
+ǃ ,
+
+SELECT CONCAT(GROUP_CONCAT(a ORDER BY BINARY(a)),',') FROM t1 GROUP BY a COLLATE uca1400_as_ci
+CONCAT(GROUP_CONCAT(a ORDER BY BINARY(a)),',')
+÷,÷ ,
+×,× ,
+A,A ,a,a ,
+Ã,à ,á,á ,
+À,À ,à,à ,
+Ă,Ă ,ă,ă ,
+Ắ,Ắ ,ắ,ắ ,
+Ằ,Ằ ,ằ,ằ ,
+Ẵ,Ẵ ,ẵ,ẵ ,
+Ẳ,Ẳ ,ẳ,ẳ ,
+Â, ,â,â ,
+Ấ,Ấ ,ấ,ấ ,
+Ầ,Ầ ,ầ,ầ ,
+Ẫ,Ẫ ,ẫ,ẫ ,
+Ẩ,Ẩ ,ẩ,ẩ ,
+Ç,Ç ,ÇŽ,ÇŽ ,
+Ã…,Ã… ,Ã¥,Ã¥ ,
+Ǻ,Ǻ ,ǻ,ǻ ,
+Ä,Ä ,ä,ä ,
+Çž,Çž ,ÇŸ,ÇŸ ,
+Ã,Ã ,ã,ã ,
+Ç ,Ç  ,Ç¡,Ç¡ ,
+Ä„,Ä„ ,Ä…,Ä… ,
+Ä€,Ä€ ,Ä,Ä ,
+Ả,Ả ,ả,ả ,
+Ạ,Ạ ,ạ,ạ ,
+Ặ,Ặ ,ặ,ặ ,
+Ậ,Ậ ,ậ,ậ ,
+AA,AA ,Aa,Aa ,aA,aA ,aa,aa ,
+AE,AE ,Ae,Ae ,aE,aE ,ae,ae ,
+Æ,Æ ,æ,æ ,
+Ǽ,Ǽ ,ǽ,ǽ ,
+Ç¢,Ç¢ ,Ç£,Ç£ ,
+B,B ,b,b ,
+Æ€,Æ€ ,
+Æ,Æ ,
+Ƃ,Ƃ ,ƃ,ƃ ,
+C,C ,c,c ,
+Ć,Ć ,ć,ć ,
+Ĉ,Ĉ ,ĉ,ĉ ,
+ÄŒ,ÄŒ ,Ä,Ä ,
+ÄŠ,ÄŠ ,Ä‹,Ä‹ ,
+Ç,Ç ,ç,ç ,
+CH,CH ,Ch,Ch ,cH,cH ,ch,ch ,
+Ƈ,Ƈ ,ƈ,ƈ ,
+D,D ,d,d ,
+ÄŽ,ÄŽ ,Ä,Ä ,
+Ä,Ä ,Ä‘,Ä‘ ,
+Ã,à ,ð,ð ,
+DZ,DZ ,Dz,Dz ,dZ,dZ ,dz,dz ,DZ,DZ ,Dz,Dz ,dz,dz ,
+DŽ,DŽ ,Dž,Dž ,dŽ,dŽ ,dž,dž ,DŽ,DŽ ,Dž,Dž ,dž,dž ,
+Ɖ,Ɖ ,
+ÆŠ,ÆŠ ,
+Ƌ,Ƌ ,ƌ,ƌ ,
+E,E ,e,e ,
+É,É ,é,é ,
+È,È ,è,è ,
+Ä”,Ä” ,Ä•,Ä• ,
+Ê,Ê ,ê,ê ,
+Ế,Ế ,ế,ế ,
+Ề,Ề ,á»,á» ,
+Ễ,Ễ ,ễ,ễ ,
+Ể,Ể ,ể,ể ,
+Äš,Äš ,Ä›,Ä› ,
+Ë,Ë ,ë,ë ,
+Ẽ,Ẽ ,ẽ,ẽ ,
+Ä–,Ä– ,Ä—,Ä— ,
+Ę,Ę ,ę,ę ,
+Ä’,Ä’ ,Ä“,Ä“ ,
+Ẻ,Ẻ ,ẻ,ẻ ,
+Ẹ,Ẹ ,ẹ,ẹ ,
+Ệ,Ệ ,ệ,ệ ,
+ÆŽ,ÆŽ ,Ç,Ç ,
+Æ,Æ ,
+Æ,Æ ,
+F,F ,f,f ,
+Æ‘,Æ‘ ,Æ’,Æ’ ,
+G,G ,g,g ,
+Ǵ,Ǵ ,ǵ,ǵ ,
+Äž,Äž ,ÄŸ,ÄŸ ,
+Äœ,Äœ ,Ä,Ä ,
+Ǧ,Ǧ ,ǧ,ǧ ,
+Ä ,Ä  ,Ä¡,Ä¡ ,
+Ä¢,Ä¢ ,Ä£,Ä£ ,
+Ǥ,Ǥ ,ǥ,ǥ ,
+Æ“,Æ“ ,
+Æ”,Æ” ,
+Æ¢,Æ¢ ,Æ£,Æ£ ,
+H,H ,h,h ,
+Ĥ,Ĥ ,ĥ,ĥ ,
+Ħ,Ħ ,ħ,ħ ,
+ƕ,ƕ ,Ƕ,Ƕ ,
+I,I ,i,i ,
+Ã,à ,í,í ,
+Ì,Ì ,ì,ì ,
+Ĭ,Ĭ ,ĭ,ĭ ,
+Î,Î ,î,î ,
+Ç,Ç ,Ç,Ç ,
+Ã,à ,ï,ï ,
+Ĩ,Ĩ ,ĩ,ĩ ,
+Ä°,Ä° ,
+Į,Į ,į,į ,
+Ī,Ī ,ī,ī ,
+Ỉ,Ỉ ,ỉ,ỉ ,
+Ị,Ị ,ị,ị ,
+IJ,IJ ,Ij,Ij ,iJ,iJ ,ij,ij ,IJ,IJ ,ij,ij ,
+ı,ı ,
+Æ—,Æ— ,
+Æ–,Æ– ,
+J,J ,j,j ,
+Ĵ,Ĵ ,ĵ,ĵ ,
+Ç°,Ç° ,
+K,K ,k,k ,
+Ǩ,Ǩ ,ǩ,ǩ ,
+Ķ,Ķ ,ķ,ķ ,
+Ƙ,Ƙ ,ƙ,ƙ ,
+L,L ,l,l ,
+Ĺ,Ĺ ,ĺ,ĺ ,
+Ľ,Ľ ,ľ,ľ ,
+Ļ,Ļ ,ļ,ļ ,
+Å,Å ,Å‚,Å‚ ,
+Ä¿,Ä¿ ,Å€,Å€ ,
+LJ,LJ ,Lj,Lj ,lJ,lJ ,lj,lj ,LJ,LJ ,Lj,Lj ,lj,lj ,
+LL,LL ,Ll,Ll ,lL,lL ,ll,ll ,
+Æš,Æš ,
+Æ›,Æ› ,
+M,M ,m,m ,
+N,N ,n,n ,
+Ń,Ń ,ń,ń ,
+Ǹ,Ǹ ,ǹ,ǹ ,
+Ň,Ň ,ň,ň ,
+Ñ,Ñ ,ñ,ñ ,
+Ņ,Ņ ,ņ,ņ ,
+NJ,NJ ,Nj,Nj ,nJ,nJ ,nj,nj ,NJ,NJ ,Nj,Nj ,nj,nj ,
+Æ,Æ ,
+Æž,Æž ,
+ÅŠ,ÅŠ ,Å‹,Å‹ ,
+O,O ,o,o ,
+Ó,Ó ,ó,ó ,
+Ò,Ò ,ò,ò ,
+ÅŽ,ÅŽ ,Å,Å ,
+Ô,Ô ,ô,ô ,
+á»,á» ,ố,ố ,
+Ồ,Ồ ,ồ,ồ ,
+á»–,á»– ,á»—,á»— ,
+Ổ,Ổ ,ổ,ổ ,
+Ç‘,Ç‘ ,Ç’,Ç’ ,
+Ö,Ö ,ö,ö ,
+Å,Å ,Å‘,Å‘ ,
+Õ,Õ ,õ,õ ,
+Ø,Ø ,ø,ø ,
+Ǿ,Ǿ ,ǿ,ǿ ,
+Ǫ,Ǫ ,ǫ,ǫ ,
+Ǭ,Ǭ ,ǭ,ǭ ,
+ÅŒ,ÅŒ ,Å,Å ,
+Ỏ,Ỏ ,á»,á» ,
+Æ ,Æ  ,Æ¡,Æ¡ ,
+Ớ,Ớ ,ớ,ớ ,
+Ờ,Ờ ,á»,á» ,
+Ỡ,Ỡ ,ỡ,ỡ ,
+Ở,Ở ,ở,ở ,
+Ợ,Ợ ,ợ,ợ ,
+Ọ,Ọ ,á»,á» ,
+Ộ,Ộ ,ộ,ộ ,
+OE,OE ,Oe,Oe ,oE,oE ,oe,oe ,
+Å’,Å’ ,Å“,Å“ ,
+Ɔ,Ɔ ,
+ÆŸ,ÆŸ ,
+P,P ,p,p ,
+Ƥ,Ƥ ,ƥ,ƥ ,
+Q,Q ,q,q ,
+ĸ,ĸ ,
+R,R ,r,r ,
+Å”,Å” ,Å•,Å• ,
+Ř,Ř ,ř,ř ,
+Å–,Å– ,Å—,Å— ,
+RR,RR ,Rr,Rr ,rR,rR ,rr,rr ,
+Ʀ,Ʀ ,
+S,S ,s,s ,
+Åš,Åš ,Å›,Å› ,
+Åœ,Åœ ,Å,Å ,
+Å ,Å  ,Å¡,Å¡ ,
+Åž,Åž ,ÅŸ,ÅŸ ,
+Å¿,Å¿ ,
+SS,SS ,Ss,Ss ,sS,sS ,ss,ss ,
+ß,ß ,ẞ,ẞ ,
+Æ©,Æ© ,
+ƪ,ƪ ,
+T,T ,t,t ,
+Ť,Ť ,ť,ť ,
+Å¢,Å¢ ,Å£,Å£ ,
+ƾ,ƾ ,
+Ŧ,Ŧ ,ŧ,ŧ ,
+Æ«,Æ« ,
+Ƭ,Ƭ ,ƭ,ƭ ,
+Æ®,Æ® ,
+U,U ,u,u ,
+Ú,Ú ,ú,ú ,
+Ù,Ù ,ù,ù ,
+Ŭ,Ŭ ,ŭ,ŭ ,
+Û,Û ,û,û ,
+Ç“,Ç“ ,Ç”,Ç” ,
+Ů,Ů ,ů,ů ,
+Ü,Ü ,ü,ü ,
+Ǘ,Ǘ ,ǘ,ǘ ,
+Ǜ,Ǜ ,ǜ,ǜ ,
+Ç™,Ç™ ,Çš,Çš ,
+Ç•,Ç• ,Ç–,Ç– ,
+Ű,Ű ,ű,ű ,
+Ũ,Ũ ,ũ,ũ ,
+Ų,Ų ,ų,ų ,
+Ū,Ū ,ū,ū ,
+Ủ,Ủ ,ủ,ủ ,
+Ư,Ư ,ư,ư ,
+Ứ,Ứ ,ứ,ứ ,
+Ừ,Ừ ,ừ,ừ ,
+Ữ,Ữ ,ữ,ữ ,
+Ử,Ử ,ử,ử ,
+á»°,á»° ,á»±,á»± ,
+Ụ,Ụ ,ụ,ụ ,
+Ɯ,Ɯ ,
+Ʊ,Ʊ ,
+V,V ,v,v ,
+Ʋ,Ʋ ,
+W,W ,w,w ,
+Ŵ,Ŵ ,ŵ,ŵ ,
+X,X ,x,x ,
+Y,Y ,y,y ,
+Ã,à ,ý,ý ,
+Ŷ,Ŷ ,ŷ,ŷ ,
+ÿ,ÿ ,Ÿ,Ÿ ,
+Ƴ,Ƴ ,ƴ,ƴ ,
+Z,Z ,z,z ,
+Ź,Ź ,ź,ź ,
+Ž,Ž ,ž,ž ,
+Ż,Ż ,ż,ż ,
+Æ,Æ ,
+Ƶ,Ƶ ,ƶ,ƶ ,
+Æ·,Æ· ,
+Ǯ,Ǯ ,ǯ,ǯ ,
+Ƹ,Ƹ ,ƹ,ƹ ,
+ƺ,ƺ ,
+Þ,Þ ,þ,þ ,
+Æ¿,Æ¿ ,Ç·,Ç· ,
+Æ»,Æ» ,
+Ƨ,Ƨ ,ƨ,ƨ ,
+Ƽ,Ƽ ,ƽ,ƽ ,
+Æ„,Æ„ ,Æ…,Æ… ,
+ʼn,ʼn ,
+Ç€,Ç€ ,
+Ç,Ç ,
+Ç‚,Ç‚ ,
+ǃ,ǃ ,
+
+SELECT CONCAT(GROUP_CONCAT(a ORDER BY BINARY(a)),',') FROM t1 GROUP BY a COLLATE uca1400_nopad_ai_cs
+CONCAT(GROUP_CONCAT(a ORDER BY BINARY(a)),',')
+÷,
+÷ ,
+×,
+× ,
+a,à,á,â,ã,ä,Ã¥,Ä,ă,Ä…,ÇŽ,ÇŸ,Ç¡,Ç»,ạ,ả,ấ,ầ,ẩ,ẫ,ậ,ắ,ằ,ẳ,ẵ,ặ,
+A,À,Ã,Â,Ã,Ä,Ã…,Ä€,Ä‚,Ä„,Ç,Çž,Ç ,Ǻ,Ạ,Ả,Ấ,Ầ,Ẩ,Ẫ,Ậ,Ắ,Ằ,Ẳ,Ẵ,Ặ,
+a ,à ,á ,â ,ã ,ä ,Ã¥ ,Ä ,ă ,Ä… ,ÇŽ ,ÇŸ ,Ç¡ ,Ç» ,ạ ,ả ,ấ ,ầ ,ẩ ,ẫ ,ậ ,ắ ,ằ ,ẳ ,ẵ ,ặ ,
+A ,À ,à , ,à ,Ä ,Ã… ,Ä€ ,Ä‚ ,Ä„ ,Ç ,Çž ,Ç  ,Ǻ ,Ạ ,Ả ,Ấ ,Ầ ,Ẩ ,Ẫ ,Ậ ,Ắ ,Ằ ,Ẳ ,Ẵ ,Ặ ,
+aa,
+aA,
+Aa,
+AA,
+aa ,
+aA ,
+Aa ,
+AA ,
+ae,
+aE,
+æ,ǣ,ǽ,
+Ae,
+AE,
+Æ,Ǣ,Ǽ,
+ae ,
+aE ,
+æ ,ǣ ,ǽ ,
+Ae ,
+AE ,
+Æ ,Ǣ ,Ǽ ,
+b,
+B,
+b ,
+B ,
+Æ€,
+Æ€ ,
+Æ,
+Æ ,
+ƃ,
+Æ‚,
+ƃ ,
+Æ‚ ,
+c,ç,ć,ĉ,Ä‹,Ä,
+C,Ç,Ć,Ĉ,Ċ,Č,
+c ,ç ,ć ,ĉ ,Ä‹ ,Ä ,
+C ,Ç ,Ć ,Ĉ ,Ċ ,Č ,
+ch,
+cH,
+Ch,
+CH,
+ch ,
+cH ,
+Ch ,
+CH ,
+ƈ,
+Ƈ,
+ƈ ,
+Ƈ ,
+d,Ä,Ä‘,
+ð,
+D,ÄŽ,Ä,
+Ã,
+d ,Ä ,Ä‘ ,
+ð ,
+D ,ÄŽ ,Ä ,
+Ã ,
+dz,dž,
+dZ,dŽ,
+dz,
+dž,
+Dz,Dž,
+DZ,DŽ,
+Dz,
+Ç…,
+DZ,
+Ç„,
+dz ,dž ,
+dZ ,dŽ ,
+dz ,
+dž ,
+Dz ,Dž ,
+DZ ,DŽ ,
+Dz ,
+Ç… ,
+DZ ,
+Ç„ ,
+Ɖ,
+Ɖ ,
+ÆŠ,
+ÆŠ ,
+ƌ,
+Æ‹,
+ƌ ,
+Æ‹ ,
+e,è,é,ê,ë,Ä“,Ä•,Ä—,Ä™,Ä›,ẹ,ẻ,ẽ,ế,á»,ể,á»…,ệ,
+E,È,É,Ê,Ë,Ē,Ĕ,Ė,Ę,Ě,Ẹ,Ẻ,Ẽ,Ế,Ề,Ể,Ễ,Ệ,
+e ,è ,é ,ê ,ë ,ē ,ĕ ,ė ,ę ,ě ,ẹ ,ẻ ,ẽ ,ế ,Ỡ,ể ,ễ ,ệ ,
+E ,È ,É ,Ê ,Ë ,Ē ,Ĕ ,Ė ,Ę ,Ě ,Ẹ ,Ẻ ,Ẽ ,Ế ,Ề ,Ể ,Ễ ,Ệ ,
+Ç,
+ÆŽ,
+Ç ,
+ÆŽ ,
+Æ,
+Æ ,
+Æ,
+Æ ,
+f,
+F,
+f ,
+F ,
+Æ’,
+Æ‘,
+Æ’ ,
+Æ‘ ,
+g,Ä,ÄŸ,Ä¡,Ä£,ǧ,ǵ,
+G,Ĝ,Ğ,Ġ,Ģ,Ǧ,Ǵ,
+g ,Ä ,ÄŸ ,Ä¡ ,Ä£ ,ǧ ,ǵ ,
+G ,Ĝ ,Ğ ,Ġ ,Ģ ,Ǧ ,Ǵ ,
+Ç¥,
+Ǥ,
+Ç¥ ,
+Ǥ ,
+Æ“,
+Æ“ ,
+Æ”,
+Æ” ,
+Æ£,
+Æ¢,
+Æ£ ,
+Æ¢ ,
+h,ĥ,ħ,
+H,Ĥ,Ħ,
+h ,ĥ ,ħ ,
+H ,Ĥ ,Ħ ,
+Æ•,
+Ƕ,
+Æ• ,
+Ƕ ,
+i,ì,í,î,ï,Ä©,Ä«,Ä­,į,Ç,ỉ,ị,
+I,ÃŒ,Ã,ÃŽ,Ã,Ĩ,Ī,Ĭ,Ä®,Ä°,Ç,Ỉ,Ị,
+i ,ì ,í ,î ,ï ,Ä© ,Ä« ,Ä­ ,į ,Ç ,ỉ ,ị ,
+I ,ÃŒ ,à ,ÃŽ ,à ,Ĩ ,Ī ,Ĭ ,Ä® ,Ä° ,Ç ,Ỉ ,Ị ,
+ij,
+iJ,
+ij,
+Ij,
+IJ,
+IJ,
+ij ,
+iJ ,
+ij ,
+Ij ,
+IJ ,
+IJ ,
+ı,
+ı ,
+Æ—,
+Æ— ,
+Æ–,
+Æ– ,
+j,ĵ,ǰ,
+J,Ä´,
+j ,ĵ ,ǰ ,
+J ,Ä´ ,
+k,Ä·,Ç©,
+K,Ķ,Ǩ,
+k ,Ä· ,Ç© ,
+K ,Ķ ,Ǩ ,
+Æ™,
+Ƙ,
+Æ™ ,
+Ƙ ,
+l,ĺ,ļ,ľ,ŀ,ł,
+L,Ĺ,Ä»,Ľ,Ä¿,Å,
+l ,ĺ ,ļ ,ľ ,ŀ ,ł ,
+L ,Ĺ ,Ļ ,Ľ ,Ŀ ,Š,
+lj,
+lJ,
+lj,
+Lj,
+LJ,
+Lj,
+LJ,
+lj ,
+lJ ,
+lj ,
+Lj ,
+LJ ,
+Lj ,
+LJ ,
+ll,
+lL,
+Ll,
+LL,
+ll ,
+lL ,
+Ll ,
+LL ,
+Æš,
+Æš ,
+Æ›,
+Æ› ,
+m,
+M,
+m ,
+M ,
+n,ñ,ń,ņ,ň,ǹ,
+N,Ñ,Ń,Ņ,Ň,Ǹ,
+n ,ñ ,ń ,ņ ,ň ,ǹ ,
+N ,Ñ ,Ń ,Ņ ,Ň ,Ǹ ,
+nj,
+nJ,
+nj,
+Nj,
+NJ,
+Ç‹,
+ÇŠ,
+nj ,
+nJ ,
+nj ,
+Nj ,
+NJ ,
+Ç‹ ,
+ÇŠ ,
+Æ,
+Æ ,
+Æž,
+Æž ,
+Å‹,
+ÅŠ,
+Å‹ ,
+ÅŠ ,
+o,ò,ó,ô,õ,ö,ø,Å,Å,Å‘,Æ¡,Ç’,Ç«,Ç­,Ç¿,á»,á»,ố,ồ,ổ,á»—,á»™,á»›,á»,ở,ỡ,ợ,
+O,Ã’,Ó,Ô,Õ,Ö,Ø,ÅŒ,ÅŽ,Å,Æ ,Ç‘,Ǫ,Ǭ,Ǿ,Ọ,Ỏ,á»,á»’,á»”,á»–,Ộ,Ớ,Ờ,Ở,á» ,Ợ,
+o ,ò ,ó ,ô ,õ ,ö ,ø ,Š,Š,ő ,ơ ,ǒ ,ǫ ,ǭ ,ǿ ,Ỡ,Ỡ,ố ,ồ ,ổ ,ỗ ,ộ ,ớ ,Ỡ,ở ,ỡ ,ợ ,
+O ,Ò ,Ó ,Ô ,Õ ,Ö ,Ø ,Ō ,Ŏ ,Š,Ơ ,Ǒ ,Ǫ ,Ǭ ,Ǿ ,Ọ ,Ỏ ,Ỡ,Ồ ,Ổ ,Ỗ ,Ộ ,Ớ ,Ờ ,Ở ,Ỡ ,Ợ ,
+oe,
+oE,
+Å“,
+Oe,
+OE,
+Å’,
+oe ,
+oE ,
+Å“ ,
+Oe ,
+OE ,
+Å’ ,
+Ɔ,
+Ɔ ,
+ÆŸ,
+ÆŸ ,
+p,
+P,
+p ,
+P ,
+Æ¥,
+Ƥ,
+Æ¥ ,
+Ƥ ,
+q,
+Q,
+q ,
+Q ,
+ĸ,
+ĸ ,
+r,Å•,Å—,Å™,
+R,Ŕ,Ŗ,Ř,
+r ,Å• ,Å— ,Å™ ,
+R ,Ŕ ,Ŗ ,Ř ,
+rr,
+rR,
+Rr,
+RR,
+rr ,
+rR ,
+Rr ,
+RR ,
+Ʀ,
+Ʀ ,
+s,Å›,Å,ÅŸ,Å¡,
+Å¿,
+S,Ś,Ŝ,Ş,Š,
+s ,Å› ,Å ,ÅŸ ,Å¡ ,
+Å¿ ,
+S ,Ś ,Ŝ ,Ş ,Š ,
+ss,
+sS,
+ß,
+Ss,
+SS,
+ẞ,
+ss ,
+sS ,
+ß ,
+Ss ,
+SS ,
+ẞ ,
+Æ©,
+Æ© ,
+ƪ,
+ƪ ,
+t,Å£,Å¥,
+T,Ţ,Ť,
+t ,Å£ ,Å¥ ,
+T ,Ţ ,Ť ,
+ƾ,
+ƾ ,
+ŧ,
+Ŧ,
+ŧ ,
+Ŧ ,
+Æ«,
+Æ« ,
+Æ­,
+Ƭ,
+Æ­ ,
+Ƭ ,
+Æ®,
+Æ® ,
+u,ù,ú,û,ü,ũ,ū,ŭ,ů,ű,ų,ư,ǔ,ǖ,ǘ,ǚ,ǜ,ụ,ủ,ứ,ừ,ử,ữ,ự,
+U,Ù,Ú,Û,Ü,Ũ,Ū,Ŭ,Ů,Ű,Ų,Ư,Ǔ,Ǖ,Ǘ,Ǚ,Ǜ,Ụ,Ủ,Ứ,Ừ,Ử,Ữ,Ự,
+u ,ù ,ú ,û ,ü ,ũ ,ū ,ŭ ,ů ,ű ,ų ,ư ,ǔ ,ǖ ,ǘ ,ǚ ,ǜ ,ụ ,ủ ,ứ ,ừ ,ử ,ữ ,ự ,
+U ,Ù ,Ú ,Û ,Ü ,Ũ ,Ū ,Ŭ ,Ů ,Ű ,Ų ,Ư ,Ǔ ,Ǖ ,Ǘ ,Ǚ ,Ǜ ,Ụ ,Ủ ,Ứ ,Ừ ,Ử ,Ữ ,Ự ,
+Ɯ,
+Ɯ ,
+Ʊ,
+Ʊ ,
+v,
+V,
+v ,
+V ,
+Ʋ,
+Ʋ ,
+w,ŵ,
+W,Å´,
+w ,ŵ ,
+W ,Å´ ,
+x,
+X,
+x ,
+X ,
+y,ý,ÿ,ŷ,
+Y,Ã,Ŷ,Ÿ,
+y ,ý ,ÿ ,ŷ ,
+Y ,à ,Ŷ ,Ÿ ,
+Æ´,
+Ƴ,
+Æ´ ,
+Ƴ ,
+z,ź,ż,ž,
+Z,Ź,Ż,Ž,
+z ,ź ,ż ,ž ,
+Z ,Ź ,Ż ,Ž ,
+Æ,
+Æ ,
+ƶ,
+Ƶ,
+ƶ ,
+Ƶ ,
+ǯ,
+Æ·,Ç®,
+ǯ ,
+Æ· ,Ç® ,
+ƹ,
+Ƹ,
+ƹ ,
+Ƹ ,
+ƺ,
+ƺ ,
+þ,
+Þ,
+þ ,
+Þ ,
+Æ¿,
+Ç·,
+Æ¿ ,
+Ç· ,
+Æ»,
+Æ» ,
+ƨ,
+Ƨ,
+ƨ ,
+Ƨ ,
+ƽ,
+Ƽ,
+ƽ ,
+Ƽ ,
+Æ…,
+Æ„,
+Æ… ,
+Æ„ ,
+ʼn,
+ʼn ,
+Ç€,
+Ç€ ,
+Ç,
+Ç ,
+Ç‚,
+Ç‚ ,
+ǃ,
+ǃ ,
+
+SELECT CONCAT(GROUP_CONCAT(a ORDER BY BINARY(a)),',') FROM t1 GROUP BY a COLLATE uca1400_ai_cs
+CONCAT(GROUP_CONCAT(a ORDER BY BINARY(a)),',')
+÷,÷ ,
+×,× ,
+a,a ,à,à ,á,á ,â,â ,ã,ã ,ä,ä ,Ã¥,Ã¥ ,Ä,Ä ,ă,ă ,Ä…,Ä… ,ÇŽ,ÇŽ ,ÇŸ,ÇŸ ,Ç¡,Ç¡ ,Ç»,Ç» ,ạ,ạ ,ả,ả ,ấ,ấ ,ầ,ầ ,ẩ,ẩ ,ẫ,ẫ ,ậ,ậ ,ắ,ắ ,ằ,ằ ,ẳ,ẳ ,ẵ,ẵ ,ặ,ặ ,
+A,A ,À,À ,Ã,à ,Â, ,Ã,à ,Ä,Ä ,Ã…,Ã… ,Ä€,Ä€ ,Ä‚,Ä‚ ,Ä„,Ä„ ,Ç,Ç ,Çž,Çž ,Ç ,Ç  ,Ǻ,Ǻ ,Ạ,Ạ ,Ả,Ả ,Ấ,Ấ ,Ầ,Ầ ,Ẩ,Ẩ ,Ẫ,Ẫ ,Ậ,Ậ ,Ắ,Ắ ,Ằ,Ằ ,Ẳ,Ẳ ,Ẵ,Ẵ ,Ặ,Ặ ,
+aa,aa ,
+aA,aA ,
+Aa,Aa ,
+AA,AA ,
+ae,ae ,
+aE,aE ,
+æ,æ ,ǣ,ǣ ,ǽ,ǽ ,
+Ae,Ae ,
+AE,AE ,
+Æ,Æ ,Ǣ,Ǣ ,Ǽ,Ǽ ,
+b,b ,
+B,B ,
+Æ€,Æ€ ,
+Æ,Æ ,
+ƃ,ƃ ,
+Æ‚,Æ‚ ,
+c,c ,ç,ç ,ć,ć ,ĉ,ĉ ,Ä‹,Ä‹ ,Ä,Ä ,
+C,C ,Ç,Ç ,Ć,Ć ,Ĉ,Ĉ ,Ċ,Ċ ,Č,Č ,
+ch,ch ,
+cH,cH ,
+Ch,Ch ,
+CH,CH ,
+ƈ,ƈ ,
+Ƈ,Ƈ ,
+d,d ,Ä,Ä ,Ä‘,Ä‘ ,
+ð,ð ,
+D,D ,ÄŽ,ÄŽ ,Ä,Ä ,
+Ã,Ã ,
+dz,dz ,dž,dž ,
+dZ,dZ ,dŽ,dŽ ,
+dz,dz ,
+dž,dž ,
+Dz,Dz ,Dž,Dž ,
+DZ,DZ ,DŽ,DŽ ,
+Dz,Dz ,
+Ç…,Ç… ,
+DZ,DZ ,
+Ç„,Ç„ ,
+Ɖ,Ɖ ,
+ÆŠ,ÆŠ ,
+ƌ,ƌ ,
+Æ‹,Æ‹ ,
+e,e ,è,è ,é,é ,ê,ê ,ë,ë ,Ä“,Ä“ ,Ä•,Ä• ,Ä—,Ä— ,Ä™,Ä™ ,Ä›,Ä› ,ẹ,ẹ ,ẻ,ẻ ,ẽ,ẽ ,ế,ế ,á»,á» ,ể,ể ,á»…,á»… ,ệ,ệ ,
+E,E ,È,È ,É,É ,Ê,Ê ,Ë,Ë ,Ē,Ē ,Ĕ,Ĕ ,Ė,Ė ,Ę,Ę ,Ě,Ě ,Ẹ,Ẹ ,Ẻ,Ẻ ,Ẽ,Ẽ ,Ế,Ế ,Ề,Ề ,Ể,Ể ,Ễ,Ễ ,Ệ,Ệ ,
+Ç,Ç ,
+ÆŽ,ÆŽ ,
+Æ,Æ ,
+Æ,Æ ,
+f,f ,
+F,F ,
+Æ’,Æ’ ,
+Æ‘,Æ‘ ,
+g,g ,Ä,Ä ,ÄŸ,ÄŸ ,Ä¡,Ä¡ ,Ä£,Ä£ ,ǧ,ǧ ,ǵ,ǵ ,
+G,G ,Ĝ,Ĝ ,Ğ,Ğ ,Ġ,Ġ ,Ģ,Ģ ,Ǧ,Ǧ ,Ǵ,Ǵ ,
+Ç¥,Ç¥ ,
+Ǥ,Ǥ ,
+Æ“,Æ“ ,
+Æ”,Æ” ,
+Æ£,Æ£ ,
+Æ¢,Æ¢ ,
+h,h ,ĥ,ĥ ,ħ,ħ ,
+H,H ,Ĥ,Ĥ ,Ħ,Ħ ,
+Æ•,Æ• ,
+Ƕ,Ƕ ,
+i,i ,ì,ì ,í,í ,î,î ,ï,ï ,Ä©,Ä© ,Ä«,Ä« ,Ä­,Ä­ ,į,į ,Ç,Ç ,ỉ,ỉ ,ị,ị ,
+I,I ,ÃŒ,ÃŒ ,Ã,à ,ÃŽ,ÃŽ ,Ã,à ,Ĩ,Ĩ ,Ī,Ī ,Ĭ,Ĭ ,Ä®,Ä® ,Ä°,Ä° ,Ç,Ç ,Ỉ,Ỉ ,Ị,Ị ,
+ij,ij ,
+iJ,iJ ,
+ij,ij ,
+Ij,Ij ,
+IJ,IJ ,
+IJ,IJ ,
+ı,ı ,
+Æ—,Æ— ,
+Æ–,Æ– ,
+j,j ,ĵ,ĵ ,ǰ,ǰ ,
+J,J ,Ä´,Ä´ ,
+k,k ,Ä·,Ä· ,Ç©,Ç© ,
+K,K ,Ķ,Ķ ,Ǩ,Ǩ ,
+Æ™,Æ™ ,
+Ƙ,Ƙ ,
+l,l ,ĺ,ĺ ,ļ,ļ ,ľ,ľ ,ŀ,ŀ ,ł,ł ,
+L,L ,Ĺ,Ĺ ,Ä»,Ä» ,Ľ,Ľ ,Ä¿,Ä¿ ,Å,Å ,
+lj,lj ,
+lJ,lJ ,
+lj,lj ,
+Lj,Lj ,
+LJ,LJ ,
+Lj,Lj ,
+LJ,LJ ,
+ll,ll ,
+lL,lL ,
+Ll,Ll ,
+LL,LL ,
+Æš,Æš ,
+Æ›,Æ› ,
+m,m ,
+M,M ,
+n,n ,ñ,ñ ,ń,ń ,ņ,ņ ,ň,ň ,ǹ,ǹ ,
+N,N ,Ñ,Ñ ,Ń,Ń ,Ņ,Ņ ,Ň,Ň ,Ǹ,Ǹ ,
+nj,nj ,
+nJ,nJ ,
+nj,nj ,
+Nj,Nj ,
+NJ,NJ ,
+Ç‹,Ç‹ ,
+ÇŠ,ÇŠ ,
+Æ,Æ ,
+Æž,Æž ,
+Å‹,Å‹ ,
+ÅŠ,ÅŠ ,
+o,o ,ò,ò ,ó,ó ,ô,ô ,õ,õ ,ö,ö ,ø,ø ,Å,Å ,Å,Å ,Å‘,Å‘ ,Æ¡,Æ¡ ,Ç’,Ç’ ,Ç«,Ç« ,Ç­,Ç­ ,Ç¿,Ç¿ ,á»,á» ,á»,á» ,ố,ố ,ồ,ồ ,ổ,ổ ,á»—,á»— ,á»™,á»™ ,á»›,á»› ,á»,á» ,ở,ở ,ỡ,ỡ ,ợ,ợ ,
+O,O ,Ã’,Ã’ ,Ó,Ó ,Ô,Ô ,Õ,Õ ,Ö,Ö ,Ø,Ø ,ÅŒ,ÅŒ ,ÅŽ,ÅŽ ,Å,Å ,Æ ,Æ  ,Ç‘,Ç‘ ,Ǫ,Ǫ ,Ǭ,Ǭ ,Ǿ,Ǿ ,Ọ,Ọ ,Ỏ,Ỏ ,á»,á» ,á»’,á»’ ,á»”,á»” ,á»–,á»– ,Ộ,Ộ ,Ớ,Ớ ,Ờ,Ờ ,Ở,Ở ,á» ,á»  ,Ợ,Ợ ,
+oe,oe ,
+oE,oE ,
+Å“,Å“ ,
+Oe,Oe ,
+OE,OE ,
+Å’,Å’ ,
+Ɔ,Ɔ ,
+ÆŸ,ÆŸ ,
+p,p ,
+P,P ,
+Æ¥,Æ¥ ,
+Ƥ,Ƥ ,
+q,q ,
+Q,Q ,
+ĸ,ĸ ,
+r,r ,Å•,Å• ,Å—,Å— ,Å™,Å™ ,
+R,R ,Ŕ,Ŕ ,Ŗ,Ŗ ,Ř,Ř ,
+rr,rr ,
+rR,rR ,
+Rr,Rr ,
+RR,RR ,
+Ʀ,Ʀ ,
+s,s ,Å›,Å› ,Å,Å ,ÅŸ,ÅŸ ,Å¡,Å¡ ,
+Å¿,Å¿ ,
+S,S ,Ś,Ś ,Ŝ,Ŝ ,Ş,Ş ,Š,Š ,
+ss,ss ,
+sS,sS ,
+ß,ß ,
+Ss,Ss ,
+SS,SS ,
+ẞ,ẞ ,
+Æ©,Æ© ,
+ƪ,ƪ ,
+t,t ,Å£,Å£ ,Å¥,Å¥ ,
+T,T ,Ţ,Ţ ,Ť,Ť ,
+ƾ,ƾ ,
+ŧ,ŧ ,
+Ŧ,Ŧ ,
+Æ«,Æ« ,
+Æ­,Æ­ ,
+Ƭ,Ƭ ,
+Æ®,Æ® ,
+u,u ,ù,ù ,ú,ú ,û,û ,ü,ü ,ũ,ũ ,ū,ū ,ŭ,ŭ ,ů,ů ,ű,ű ,ų,ų ,ư,ư ,ǔ,ǔ ,ǖ,ǖ ,ǘ,ǘ ,ǚ,ǚ ,ǜ,ǜ ,ụ,ụ ,ủ,ủ ,ứ,ứ ,ừ,ừ ,ử,ử ,ữ,ữ ,ự,ự ,
+U,U ,Ù,Ù ,Ú,Ú ,Û,Û ,Ü,Ü ,Ũ,Ũ ,Ū,Ū ,Ŭ,Ŭ ,Ů,Ů ,Ű,Ű ,Ų,Ų ,Ư,Ư ,Ǔ,Ǔ ,Ǖ,Ǖ ,Ǘ,Ǘ ,Ǚ,Ǚ ,Ǜ,Ǜ ,Ụ,Ụ ,Ủ,Ủ ,Ứ,Ứ ,Ừ,Ừ ,Ử,Ử ,Ữ,Ữ ,Ự,Ự ,
+Ɯ,Ɯ ,
+Ʊ,Ʊ ,
+v,v ,
+V,V ,
+Ʋ,Ʋ ,
+w,w ,ŵ,ŵ ,
+W,W ,Å´,Å´ ,
+x,x ,
+X,X ,
+y,y ,ý,ý ,ÿ,ÿ ,ŷ,ŷ ,
+Y,Y ,Ã,à ,Ŷ,Ŷ ,Ÿ,Ÿ ,
+Æ´,Æ´ ,
+Ƴ,Ƴ ,
+z,z ,ź,ź ,ż,ż ,ž,ž ,
+Z,Z ,Ź,Ź ,Ż,Ż ,Ž,Ž ,
+Æ,Æ ,
+ƶ,ƶ ,
+Ƶ,Ƶ ,
+ǯ,ǯ ,
+Æ·,Æ· ,Ç®,Ç® ,
+ƹ,ƹ ,
+Ƹ,Ƹ ,
+ƺ,ƺ ,
+þ,þ ,
+Þ,Þ ,
+Æ¿,Æ¿ ,
+Ç·,Ç· ,
+Æ»,Æ» ,
+ƨ,ƨ ,
+Ƨ,Ƨ ,
+ƽ,ƽ ,
+Ƽ,Ƽ ,
+Æ…,Æ… ,
+Æ„,Æ„ ,
+ʼn,ʼn ,
+Ç€,Ç€ ,
+Ç,Ç ,
+Ç‚,Ç‚ ,
+ǃ,ǃ ,
+
+SELECT CONCAT(GROUP_CONCAT(a ORDER BY BINARY(a)),',') FROM t1 GROUP BY a COLLATE uca1400_nopad_ai_ci
+CONCAT(GROUP_CONCAT(a ORDER BY BINARY(a)),',')
+÷,
+÷ ,
+×,
+× ,
+A,a,À,Ã,Â,Ã,Ä,Ã…,à,á,â,ã,ä,Ã¥,Ä€,Ä,Ä‚,ă,Ä„,Ä…,Ç,ÇŽ,Çž,ÇŸ,Ç ,Ç¡,Ǻ,Ç»,Ạ,ạ,Ả,ả,Ấ,ấ,Ầ,ầ,Ẩ,ẩ,Ẫ,ẫ,Ậ,ậ,Ắ,ắ,Ằ,ằ,Ẳ,ẳ,Ẵ,ẵ,Ặ,ặ,
+A ,a ,À ,à , ,à ,Ä ,Ã… ,à ,á ,â ,ã ,ä ,Ã¥ ,Ä€ ,Ä ,Ä‚ ,ă ,Ä„ ,Ä… ,Ç ,ÇŽ ,Çž ,ÇŸ ,Ç  ,Ç¡ ,Ǻ ,Ç» ,Ạ ,ạ ,Ả ,ả ,Ấ ,ấ ,Ầ ,ầ ,Ẩ ,ẩ ,Ẫ ,ẫ ,Ậ ,ậ ,Ắ ,ắ ,Ằ ,ằ ,Ẳ ,ẳ ,Ẵ ,ẵ ,Ặ ,ặ ,
+AA,Aa,aA,aa,
+AA ,Aa ,aA ,aa ,
+AE,Ae,aE,ae,Æ,æ,Ǣ,ǣ,Ǽ,ǽ,
+AE ,Ae ,aE ,ae ,Æ ,æ ,Ǣ ,ǣ ,Ǽ ,ǽ ,
+B,b,
+B ,b ,
+Æ€,
+Æ€ ,
+Æ,
+Æ ,
+Ƃ,ƃ,
+Ƃ ,ƃ ,
+C,c,Ç,ç,Ć,ć,Ĉ,ĉ,ÄŠ,Ä‹,ÄŒ,Ä,
+C ,c ,Ç ,ç ,Ć ,ć ,Ĉ ,ĉ ,ÄŠ ,Ä‹ ,ÄŒ ,Ä ,
+CH,Ch,cH,ch,
+CH ,Ch ,cH ,ch ,
+Ƈ,ƈ,
+Ƈ ,ƈ ,
+D,d,Ã,ð,ÄŽ,Ä,Ä,Ä‘,
+D ,d ,à ,ð ,ÄŽ ,Ä ,Ä ,Ä‘ ,
+DZ,Dz,DŽ,Dž,dZ,dz,dŽ,dž,DŽ,Dž,dž,DZ,Dz,dz,
+DZ ,Dz ,DŽ ,Dž ,dZ ,dz ,dŽ ,dž ,DŽ ,Dž ,dž ,DZ ,Dz ,dz ,
+Ɖ,
+Ɖ ,
+ÆŠ,
+ÆŠ ,
+Ƌ,ƌ,
+Ƌ ,ƌ ,
+E,e,È,É,Ê,Ë,è,é,ê,ë,Ä’,Ä“,Ä”,Ä•,Ä–,Ä—,Ę,Ä™,Äš,Ä›,Ẹ,ẹ,Ẻ,ẻ,Ẽ,ẽ,Ế,ế,Ề,á»,Ể,ể,Ễ,á»…,Ệ,ệ,
+E ,e ,È ,É ,Ê ,Ë ,è ,é ,ê ,ë ,Ē ,ē ,Ĕ ,ĕ ,Ė ,ė ,Ę ,ę ,Ě ,ě ,Ẹ ,ẹ ,Ẻ ,ẻ ,Ẽ ,ẽ ,Ế ,ế ,Ề ,Ỡ,Ể ,ể ,Ễ ,ễ ,Ệ ,ệ ,
+ÆŽ,Ç,
+ÆŽ ,Ç ,
+Æ,
+Æ ,
+Æ,
+Æ ,
+F,f,
+F ,f ,
+Æ‘,Æ’,
+Æ‘ ,Æ’ ,
+G,g,Äœ,Ä,Äž,ÄŸ,Ä ,Ä¡,Ä¢,Ä£,Ǧ,ǧ,Ç´,ǵ,
+G ,g ,Äœ ,Ä ,Äž ,ÄŸ ,Ä  ,Ä¡ ,Ä¢ ,Ä£ ,Ǧ ,ǧ ,Ç´ ,ǵ ,
+Ǥ,ǥ,
+Ǥ ,ǥ ,
+Æ“,
+Æ“ ,
+Æ”,
+Æ” ,
+Æ¢,Æ£,
+Æ¢ ,Æ£ ,
+H,h,Ĥ,ĥ,Ħ,ħ,
+H ,h ,Ĥ ,ĥ ,Ħ ,ħ ,
+ƕ,Ƕ,
+ƕ ,Ƕ ,
+I,i,ÃŒ,Ã,ÃŽ,Ã,ì,í,î,ï,Ĩ,Ä©,Ī,Ä«,Ĭ,Ä­,Ä®,į,Ä°,Ç,Ç,Ỉ,ỉ,Ị,ị,
+I ,i ,ÃŒ ,à ,ÃŽ ,à ,ì ,í ,î ,ï ,Ĩ ,Ä© ,Ī ,Ä« ,Ĭ ,Ä­ ,Ä® ,į ,Ä° ,Ç ,Ç ,Ỉ ,ỉ ,Ị ,ị ,
+IJ,Ij,iJ,ij,IJ,ij,
+IJ ,Ij ,iJ ,ij ,IJ ,ij ,
+ı,
+ı ,
+Æ—,
+Æ— ,
+Æ–,
+Æ– ,
+J,j,Ĵ,ĵ,ǰ,
+J ,j ,Ĵ ,ĵ ,ǰ ,
+K,k,Ķ,ķ,Ǩ,ǩ,
+K ,k ,Ķ ,ķ ,Ǩ ,ǩ ,
+Ƙ,ƙ,
+Ƙ ,ƙ ,
+L,l,Ĺ,ĺ,Ä»,ļ,Ľ,ľ,Ä¿,Å€,Å,Å‚,
+L ,l ,Ĺ ,ĺ ,Ļ ,ļ ,Ľ ,ľ ,Ŀ ,ŀ ,Š,ł ,
+LJ,Lj,lJ,lj,LJ,Lj,lj,
+LJ ,Lj ,lJ ,lj ,LJ ,Lj ,lj ,
+LL,Ll,lL,ll,
+LL ,Ll ,lL ,ll ,
+Æš,
+Æš ,
+Æ›,
+Æ› ,
+M,m,
+M ,m ,
+N,n,Ñ,ñ,Ń,ń,Ņ,ņ,Ň,ň,Ǹ,ǹ,
+N ,n ,Ñ ,ñ ,Ń ,ń ,Ņ ,ņ ,Ň ,ň ,Ǹ ,ǹ ,
+NJ,Nj,nJ,nj,NJ,Nj,nj,
+NJ ,Nj ,nJ ,nj ,NJ ,Nj ,nj ,
+Æ,
+Æ ,
+Æž,
+Æž ,
+ÅŠ,Å‹,
+ÅŠ ,Å‹ ,
+O,o,Ã’,Ó,Ô,Õ,Ö,Ø,ò,ó,ô,õ,ö,ø,ÅŒ,Å,ÅŽ,Å,Å,Å‘,Æ ,Æ¡,Ç‘,Ç’,Ǫ,Ç«,Ǭ,Ç­,Ǿ,Ç¿,Ọ,á»,Ỏ,á»,á»,ố,á»’,ồ,á»”,ổ,á»–,á»—,Ộ,á»™,Ớ,á»›,Ờ,á»,Ở,ở,á» ,ỡ,Ợ,ợ,
+O ,o ,Ò ,Ó ,Ô ,Õ ,Ö ,Ø ,ò ,ó ,ô ,õ ,ö ,ø ,Ō ,Š,Ŏ ,Š,Š,ő ,Ơ ,ơ ,Ǒ ,ǒ ,Ǫ ,ǫ ,Ǭ ,ǭ ,Ǿ ,ǿ ,Ọ ,Ỡ,Ỏ ,Ỡ,Ỡ,ố ,Ồ ,ồ ,Ổ ,ổ ,Ỗ ,ỗ ,Ộ ,ộ ,Ớ ,ớ ,Ờ ,Ỡ,Ở ,ở ,Ỡ ,ỡ ,Ợ ,ợ ,
+OE,Oe,oE,oe,Å’,Å“,
+OE ,Oe ,oE ,oe ,Å’ ,Å“ ,
+Ɔ,
+Ɔ ,
+ÆŸ,
+ÆŸ ,
+P,p,
+P ,p ,
+Ƥ,ƥ,
+Ƥ ,ƥ ,
+Q,q,
+Q ,q ,
+ĸ,
+ĸ ,
+R,r,Ŕ,ŕ,Ŗ,ŗ,Ř,ř,
+R ,r ,Ŕ ,ŕ ,Ŗ ,ŗ ,Ř ,ř ,
+RR,Rr,rR,rr,
+RR ,Rr ,rR ,rr ,
+Ʀ,
+Ʀ ,
+S,s,Åš,Å›,Åœ,Å,Åž,ÅŸ,Å ,Å¡,Å¿,
+S ,s ,Ś ,ś ,Ŝ ,Š,Ş ,ş ,Š ,š ,ſ ,
+SS,Ss,sS,ss,ß,ẞ,
+SS ,Ss ,sS ,ss ,ß ,ẞ ,
+Æ©,
+Æ© ,
+ƪ,
+ƪ ,
+T,t,Ţ,ţ,Ť,ť,
+T ,t ,Ţ ,ţ ,Ť ,ť ,
+ƾ,
+ƾ ,
+Ŧ,ŧ,
+Ŧ ,ŧ ,
+Æ«,
+Æ« ,
+Ƭ,ƭ,
+Ƭ ,ƭ ,
+Æ®,
+Æ® ,
+U,u,Ù,Ú,Û,Ü,ù,ú,û,ü,Ũ,ũ,Ū,ū,Ŭ,ŭ,Ů,ů,Ű,ű,Ų,ų,Ư,ư,Ǔ,ǔ,Ǖ,ǖ,Ǘ,ǘ,Ǚ,ǚ,Ǜ,ǜ,Ụ,ụ,Ủ,ủ,Ứ,ứ,Ừ,ừ,Ử,ử,Ữ,ữ,Ự,ự,
+U ,u ,Ù ,Ú ,Û ,Ü ,ù ,ú ,û ,ü ,Ũ ,ũ ,Ū ,ū ,Ŭ ,ŭ ,Ů ,ů ,Ű ,ű ,Ų ,ų ,Ư ,ư ,Ǔ ,ǔ ,Ǖ ,ǖ ,Ǘ ,ǘ ,Ǚ ,ǚ ,Ǜ ,ǜ ,Ụ ,ụ ,Ủ ,ủ ,Ứ ,ứ ,Ừ ,ừ ,Ử ,ử ,Ữ ,ữ ,Ự ,ự ,
+Ɯ,
+Ɯ ,
+Ʊ,
+Ʊ ,
+V,v,
+V ,v ,
+Ʋ,
+Ʋ ,
+W,w,Ŵ,ŵ,
+W ,w ,Ŵ ,ŵ ,
+X,x,
+X ,x ,
+Y,y,Ã,ý,ÿ,Ŷ,Å·,Ÿ,
+Y ,y ,à ,ý ,ÿ ,Ŷ ,ŷ ,Ÿ ,
+Ƴ,ƴ,
+Ƴ ,ƴ ,
+Z,z,Ź,ź,Ż,ż,Ž,ž,
+Z ,z ,Ź ,ź ,Ż ,ż ,Ž ,ž ,
+Æ,
+Æ ,
+Ƶ,ƶ,
+Ƶ ,ƶ ,
+Ʒ,Ǯ,ǯ,
+Ʒ ,Ǯ ,ǯ ,
+Ƹ,ƹ,
+Ƹ ,ƹ ,
+ƺ,
+ƺ ,
+Þ,þ,
+Þ ,þ ,
+Æ¿,Ç·,
+Æ¿ ,Ç· ,
+Æ»,
+Æ» ,
+Ƨ,ƨ,
+Ƨ ,ƨ ,
+Ƽ,ƽ,
+Ƽ ,ƽ ,
+Æ„,Æ…,
+Æ„ ,Æ… ,
+ʼn,
+ʼn ,
+Ç€,
+Ç€ ,
+Ç,
+Ç ,
+Ç‚,
+Ç‚ ,
+ǃ,
+ǃ ,
+
+SELECT CONCAT(GROUP_CONCAT(a ORDER BY BINARY(a)),',') FROM t1 GROUP BY a COLLATE uca1400_ai_ci
+CONCAT(GROUP_CONCAT(a ORDER BY BINARY(a)),',')
+÷,÷ ,
+×,× ,
+A,A ,a,a ,À,À ,Ã,à ,Â, ,Ã,à ,Ä,Ä ,Ã…,Ã… ,à,à ,á,á ,â,â ,ã,ã ,ä,ä ,Ã¥,Ã¥ ,Ä€,Ä€ ,Ä,Ä ,Ä‚,Ä‚ ,ă,ă ,Ä„,Ä„ ,Ä…,Ä… ,Ç,Ç ,ÇŽ,ÇŽ ,Çž,Çž ,ÇŸ,ÇŸ ,Ç ,Ç  ,Ç¡,Ç¡ ,Ǻ,Ǻ ,Ç»,Ç» ,Ạ,Ạ ,ạ,ạ ,Ả,Ả ,ả,ả ,Ấ,Ấ ,ấ,ấ ,Ầ,Ầ ,ầ,ầ ,Ẩ,Ẩ ,ẩ,ẩ ,Ẫ,Ẫ ,ẫ,ẫ ,Ậ,Ậ ,ậ,ậ ,Ắ,Ắ ,ắ,ắ ,Ằ,Ằ ,ằ,ằ ,Ẳ,Ẳ ,ẳ,ẳ ,Ẵ,Ẵ ,ẵ,ẵ ,Ặ,Ặ ,ặ,ặ ,
+AA,AA ,Aa,Aa ,aA,aA ,aa,aa ,
+AE,AE ,Ae,Ae ,aE,aE ,ae,ae ,Æ,Æ ,æ,æ ,Ǣ,Ǣ ,ǣ,ǣ ,Ǽ,Ǽ ,ǽ,ǽ ,
+B,B ,b,b ,
+Æ€,Æ€ ,
+Æ,Æ ,
+Ƃ,Ƃ ,ƃ,ƃ ,
+C,C ,c,c ,Ç,Ç ,ç,ç ,Ć,Ć ,ć,ć ,Ĉ,Ĉ ,ĉ,ĉ ,ÄŠ,ÄŠ ,Ä‹,Ä‹ ,ÄŒ,ÄŒ ,Ä,Ä ,
+CH,CH ,Ch,Ch ,cH,cH ,ch,ch ,
+Ƈ,Ƈ ,ƈ,ƈ ,
+D,D ,d,d ,Ã,à ,ð,ð ,ÄŽ,ÄŽ ,Ä,Ä ,Ä,Ä ,Ä‘,Ä‘ ,
+DZ,DZ ,Dz,Dz ,DŽ,DŽ ,Dž,Dž ,dZ,dZ ,dz,dz ,dŽ,dŽ ,dž,dž ,DŽ,DŽ ,Dž,Dž ,dž,dž ,DZ,DZ ,Dz,Dz ,dz,dz ,
+Ɖ,Ɖ ,
+ÆŠ,ÆŠ ,
+Ƌ,Ƌ ,ƌ,ƌ ,
+E,E ,e,e ,È,È ,É,É ,Ê,Ê ,Ë,Ë ,è,è ,é,é ,ê,ê ,ë,ë ,Ä’,Ä’ ,Ä“,Ä“ ,Ä”,Ä” ,Ä•,Ä• ,Ä–,Ä– ,Ä—,Ä— ,Ę,Ę ,Ä™,Ä™ ,Äš,Äš ,Ä›,Ä› ,Ẹ,Ẹ ,ẹ,ẹ ,Ẻ,Ẻ ,ẻ,ẻ ,Ẽ,Ẽ ,ẽ,ẽ ,Ế,Ế ,ế,ế ,Ề,Ề ,á»,á» ,Ể,Ể ,ể,ể ,Ễ,Ễ ,á»…,á»… ,Ệ,Ệ ,ệ,ệ ,
+ÆŽ,ÆŽ ,Ç,Ç ,
+Æ,Æ ,
+Æ,Æ ,
+F,F ,f,f ,
+Æ‘,Æ‘ ,Æ’,Æ’ ,
+G,G ,g,g ,Äœ,Äœ ,Ä,Ä ,Äž,Äž ,ÄŸ,ÄŸ ,Ä ,Ä  ,Ä¡,Ä¡ ,Ä¢,Ä¢ ,Ä£,Ä£ ,Ǧ,Ǧ ,ǧ,ǧ ,Ç´,Ç´ ,ǵ,ǵ ,
+Ǥ,Ǥ ,ǥ,ǥ ,
+Æ“,Æ“ ,
+Æ”,Æ” ,
+Æ¢,Æ¢ ,Æ£,Æ£ ,
+H,H ,h,h ,Ĥ,Ĥ ,ĥ,ĥ ,Ħ,Ħ ,ħ,ħ ,
+ƕ,ƕ ,Ƕ,Ƕ ,
+I,I ,i,i ,ÃŒ,ÃŒ ,Ã,à ,ÃŽ,ÃŽ ,Ã,à ,ì,ì ,í,í ,î,î ,ï,ï ,Ĩ,Ĩ ,Ä©,Ä© ,Ī,Ī ,Ä«,Ä« ,Ĭ,Ĭ ,Ä­,Ä­ ,Ä®,Ä® ,į,į ,Ä°,Ä° ,Ç,Ç ,Ç,Ç ,Ỉ,Ỉ ,ỉ,ỉ ,Ị,Ị ,ị,ị ,
+IJ,IJ ,Ij,Ij ,iJ,iJ ,ij,ij ,IJ,IJ ,ij,ij ,
+ı,ı ,
+Æ—,Æ— ,
+Æ–,Æ– ,
+J,J ,j,j ,Ĵ,Ĵ ,ĵ,ĵ ,ǰ,ǰ ,
+K,K ,k,k ,Ķ,Ķ ,ķ,ķ ,Ǩ,Ǩ ,ǩ,ǩ ,
+Ƙ,Ƙ ,ƙ,ƙ ,
+L,L ,l,l ,Ĺ,Ĺ ,ĺ,ĺ ,Ä»,Ä» ,ļ,ļ ,Ľ,Ľ ,ľ,ľ ,Ä¿,Ä¿ ,Å€,Å€ ,Å,Å ,Å‚,Å‚ ,
+LJ,LJ ,Lj,Lj ,lJ,lJ ,lj,lj ,LJ,LJ ,Lj,Lj ,lj,lj ,
+LL,LL ,Ll,Ll ,lL,lL ,ll,ll ,
+Æš,Æš ,
+Æ›,Æ› ,
+M,M ,m,m ,
+N,N ,n,n ,Ñ,Ñ ,ñ,ñ ,Ń,Ń ,ń,ń ,Ņ,Ņ ,ņ,ņ ,Ň,Ň ,ň,ň ,Ǹ,Ǹ ,ǹ,ǹ ,
+NJ,NJ ,Nj,Nj ,nJ,nJ ,nj,nj ,NJ,NJ ,Nj,Nj ,nj,nj ,
+Æ,Æ ,
+Æž,Æž ,
+ÅŠ,ÅŠ ,Å‹,Å‹ ,
+O,O ,o,o ,Ã’,Ã’ ,Ó,Ó ,Ô,Ô ,Õ,Õ ,Ö,Ö ,Ø,Ø ,ò,ò ,ó,ó ,ô,ô ,õ,õ ,ö,ö ,ø,ø ,ÅŒ,ÅŒ ,Å,Å ,ÅŽ,ÅŽ ,Å,Å ,Å,Å ,Å‘,Å‘ ,Æ ,Æ  ,Æ¡,Æ¡ ,Ç‘,Ç‘ ,Ç’,Ç’ ,Ǫ,Ǫ ,Ç«,Ç« ,Ǭ,Ǭ ,Ç­,Ç­ ,Ǿ,Ǿ ,Ç¿,Ç¿ ,Ọ,Ọ ,á»,á» ,Ỏ,Ỏ ,á»,á» ,á»,á» ,ố,ố ,á»’,á»’ ,ồ,ồ ,á»”,á»” ,ổ,ổ ,á»–,á»– ,á»—,á»— ,Ộ,Ộ ,á»™,á»™ ,Ớ,Ớ ,á»›,á»› ,Ờ,Ờ ,á»,á» ,Ở,Ở ,ở,ở ,á» ,á»  ,ỡ,ỡ ,Ợ,Ợ ,ợ,ợ ,
+OE,OE ,Oe,Oe ,oE,oE ,oe,oe ,Å’,Å’ ,Å“,Å“ ,
+Ɔ,Ɔ ,
+ÆŸ,ÆŸ ,
+P,P ,p,p ,
+Ƥ,Ƥ ,ƥ,ƥ ,
+Q,Q ,q,q ,
+ĸ,ĸ ,
+R,R ,r,r ,Ŕ,Ŕ ,ŕ,ŕ ,Ŗ,Ŗ ,ŗ,ŗ ,Ř,Ř ,ř,ř ,
+RR,RR ,Rr,Rr ,rR,rR ,rr,rr ,
+Ʀ,Ʀ ,
+S,S ,s,s ,Åš,Åš ,Å›,Å› ,Åœ,Åœ ,Å,Å ,Åž,Åž ,ÅŸ,ÅŸ ,Å ,Å  ,Å¡,Å¡ ,Å¿,Å¿ ,
+SS,SS ,Ss,Ss ,sS,sS ,ss,ss ,ß,ß ,ẞ,ẞ ,
+Æ©,Æ© ,
+ƪ,ƪ ,
+T,T ,t,t ,Ţ,Ţ ,ţ,ţ ,Ť,Ť ,ť,ť ,
+ƾ,ƾ ,
+Ŧ,Ŧ ,ŧ,ŧ ,
+Æ«,Æ« ,
+Ƭ,Ƭ ,ƭ,ƭ ,
+Æ®,Æ® ,
+U,U ,u,u ,Ù,Ù ,Ú,Ú ,Û,Û ,Ü,Ü ,ù,ù ,ú,ú ,û,û ,ü,ü ,Ũ,Ũ ,ũ,ũ ,Ū,Ū ,ū,ū ,Ŭ,Ŭ ,ŭ,ŭ ,Ů,Ů ,ů,ů ,Ű,Ű ,ű,ű ,Ų,Ų ,ų,ų ,Ư,Ư ,ư,ư ,Ǔ,Ǔ ,ǔ,ǔ ,Ǖ,Ǖ ,ǖ,ǖ ,Ǘ,Ǘ ,ǘ,ǘ ,Ǚ,Ǚ ,ǚ,ǚ ,Ǜ,Ǜ ,ǜ,ǜ ,Ụ,Ụ ,ụ,ụ ,Ủ,Ủ ,ủ,ủ ,Ứ,Ứ ,ứ,ứ ,Ừ,Ừ ,ừ,ừ ,Ử,Ử ,ử,ử ,Ữ,Ữ ,ữ,ữ ,Ự,Ự ,ự,ự ,
+Ɯ,Ɯ ,
+Ʊ,Ʊ ,
+V,V ,v,v ,
+Ʋ,Ʋ ,
+W,W ,w,w ,Ŵ,Ŵ ,ŵ,ŵ ,
+X,X ,x,x ,
+Y,Y ,y,y ,Ã,à ,ý,ý ,ÿ,ÿ ,Ŷ,Ŷ ,Å·,Å· ,Ÿ,Ÿ ,
+Ƴ,Ƴ ,ƴ,ƴ ,
+Z,Z ,z,z ,Ź,Ź ,ź,ź ,Ż,Ż ,ż,ż ,Ž,Ž ,ž,ž ,
+Æ,Æ ,
+Ƶ,Ƶ ,ƶ,ƶ ,
+Ʒ,Ʒ ,Ǯ,Ǯ ,ǯ,ǯ ,
+Ƹ,Ƹ ,ƹ,ƹ ,
+ƺ,ƺ ,
+Þ,Þ ,þ,þ ,
+Æ¿,Æ¿ ,Ç·,Ç· ,
+Æ»,Æ» ,
+Ƨ,Ƨ ,ƨ,ƨ ,
+Ƽ,Ƽ ,ƽ,ƽ ,
+Æ„,Æ„ ,Æ…,Æ… ,
+ʼn,ʼn ,
+Ç€,Ç€ ,
+Ç,Ç ,
+Ç‚,Ç‚ ,
+ǃ,ǃ ,
+CALL test_styles('uca1400', _utf8mb4"WHERE BINARY(LOWER(TRIM(a))) IN ('ss','s','ß','ẞ')");
+
+SELECT CONCAT(GROUP_CONCAT(a ORDER BY BINARY(a)),',') FROM t1 WHERE BINARY(LOWER(TRIM(a))) IN ('ss','s','ß','ẞ') GROUP BY a COLLATE uca1400_nopad_as_cs
+CONCAT(GROUP_CONCAT(a ORDER BY BINARY(a)),',')
+s,
+S,
+s ,
+S ,
+ss,
+sS,
+Ss,
+SS,
+ß,
+ẞ,
+ss ,
+sS ,
+Ss ,
+SS ,
+ß ,
+ẞ ,
+
+SELECT CONCAT(GROUP_CONCAT(a ORDER BY BINARY(a)),',') FROM t1 WHERE BINARY(LOWER(TRIM(a))) IN ('ss','s','ß','ẞ') GROUP BY a COLLATE uca1400_as_cs
+CONCAT(GROUP_CONCAT(a ORDER BY BINARY(a)),',')
+s,s ,
+S,S ,
+ss,ss ,
+sS,sS ,
+Ss,Ss ,
+SS,SS ,
+ß,ß ,
+ẞ,ẞ ,
+
+SELECT CONCAT(GROUP_CONCAT(a ORDER BY BINARY(a)),',') FROM t1 WHERE BINARY(LOWER(TRIM(a))) IN ('ss','s','ß','ẞ') GROUP BY a COLLATE uca1400_nopad_as_ci
+CONCAT(GROUP_CONCAT(a ORDER BY BINARY(a)),',')
+S,s,
+S ,s ,
+SS,Ss,sS,ss,
+ß,ẞ,
+SS ,Ss ,sS ,ss ,
+ß ,ẞ ,
+
+SELECT CONCAT(GROUP_CONCAT(a ORDER BY BINARY(a)),',') FROM t1 WHERE BINARY(LOWER(TRIM(a))) IN ('ss','s','ß','ẞ') GROUP BY a COLLATE uca1400_as_ci
+CONCAT(GROUP_CONCAT(a ORDER BY BINARY(a)),',')
+S,S ,s,s ,
+SS,SS ,Ss,Ss ,sS,sS ,ss,ss ,
+ß,ß ,ẞ,ẞ ,
+
+SELECT CONCAT(GROUP_CONCAT(a ORDER BY BINARY(a)),',') FROM t1 WHERE BINARY(LOWER(TRIM(a))) IN ('ss','s','ß','ẞ') GROUP BY a COLLATE uca1400_nopad_ai_cs
+CONCAT(GROUP_CONCAT(a ORDER BY BINARY(a)),',')
+s,
+S,
+s ,
+S ,
+ss,
+sS,
+ß,
+Ss,
+SS,
+ẞ,
+ss ,
+sS ,
+ß ,
+Ss ,
+SS ,
+ẞ ,
+
+SELECT CONCAT(GROUP_CONCAT(a ORDER BY BINARY(a)),',') FROM t1 WHERE BINARY(LOWER(TRIM(a))) IN ('ss','s','ß','ẞ') GROUP BY a COLLATE uca1400_ai_cs
+CONCAT(GROUP_CONCAT(a ORDER BY BINARY(a)),',')
+s,s ,
+S,S ,
+ss,ss ,
+sS,sS ,
+ß,ß ,
+Ss,Ss ,
+SS,SS ,
+ẞ,ẞ ,
+
+SELECT CONCAT(GROUP_CONCAT(a ORDER BY BINARY(a)),',') FROM t1 WHERE BINARY(LOWER(TRIM(a))) IN ('ss','s','ß','ẞ') GROUP BY a COLLATE uca1400_nopad_ai_ci
+CONCAT(GROUP_CONCAT(a ORDER BY BINARY(a)),',')
+S,s,
+S ,s ,
+SS,Ss,sS,ss,ß,ẞ,
+SS ,Ss ,sS ,ss ,ß ,ẞ ,
+
+SELECT CONCAT(GROUP_CONCAT(a ORDER BY BINARY(a)),',') FROM t1 WHERE BINARY(LOWER(TRIM(a))) IN ('ss','s','ß','ẞ') GROUP BY a COLLATE uca1400_ai_ci
+CONCAT(GROUP_CONCAT(a ORDER BY BINARY(a)),',')
+S,S ,s,s ,
+SS,SS ,Ss,Ss ,sS,sS ,ss,ss ,ß,ß ,ẞ,ẞ ,
+CALL test_styles('uca1400_danish', _utf8mb4"WHERE BINARY(LOWER(TRIM(a))) IN ('aa','Ã¥')");
+
+SELECT CONCAT(GROUP_CONCAT(a ORDER BY BINARY(a)),',') FROM t1 WHERE BINARY(LOWER(TRIM(a))) IN ('aa','Ã¥') GROUP BY a COLLATE uca1400_danish_nopad_as_cs
+CONCAT(GROUP_CONCAT(a ORDER BY BINARY(a)),',')
+aA,
+aA ,
+Ã¥,
+Ã…,
+aa,
+Aa,
+AA,
+Ã¥ ,
+Ã… ,
+aa ,
+Aa ,
+AA ,
+
+SELECT CONCAT(GROUP_CONCAT(a ORDER BY BINARY(a)),',') FROM t1 WHERE BINARY(LOWER(TRIM(a))) IN ('aa','Ã¥') GROUP BY a COLLATE uca1400_danish_as_cs
+CONCAT(GROUP_CONCAT(a ORDER BY BINARY(a)),',')
+aA,aA ,
+Ã¥,Ã¥ ,
+Ã…,Ã… ,
+aa,aa ,
+Aa,Aa ,
+AA,AA ,
+
+SELECT CONCAT(GROUP_CONCAT(a ORDER BY BINARY(a)),',') FROM t1 WHERE BINARY(LOWER(TRIM(a))) IN ('aa','Ã¥') GROUP BY a COLLATE uca1400_danish_nopad_as_ci
+CONCAT(GROUP_CONCAT(a ORDER BY BINARY(a)),',')
+aA,
+aA ,
+Ã…,Ã¥,
+AA,Aa,aa,
+Ã… ,Ã¥ ,
+AA ,Aa ,aa ,
+
+SELECT CONCAT(GROUP_CONCAT(a ORDER BY BINARY(a)),',') FROM t1 WHERE BINARY(LOWER(TRIM(a))) IN ('aa','Ã¥') GROUP BY a COLLATE uca1400_danish_as_ci
+CONCAT(GROUP_CONCAT(a ORDER BY BINARY(a)),',')
+aA,aA ,
+Ã…,Ã… ,Ã¥,Ã¥ ,
+AA,AA ,Aa,Aa ,aa,aa ,
+
+SELECT CONCAT(GROUP_CONCAT(a ORDER BY BINARY(a)),',') FROM t1 WHERE BINARY(LOWER(TRIM(a))) IN ('aa','Ã¥') GROUP BY a COLLATE uca1400_danish_nopad_ai_cs
+CONCAT(GROUP_CONCAT(a ORDER BY BINARY(a)),',')
+aA,
+aA ,
+aa,Ã¥,
+Aa,Ã…,
+AA,
+aa ,Ã¥ ,
+Aa ,Ã… ,
+AA ,
+
+SELECT CONCAT(GROUP_CONCAT(a ORDER BY BINARY(a)),',') FROM t1 WHERE BINARY(LOWER(TRIM(a))) IN ('aa','Ã¥') GROUP BY a COLLATE uca1400_danish_ai_cs
+CONCAT(GROUP_CONCAT(a ORDER BY BINARY(a)),',')
+aA,aA ,
+aa,aa ,Ã¥,Ã¥ ,
+Aa,Aa ,Ã…,Ã… ,
+AA,AA ,
+
+SELECT CONCAT(GROUP_CONCAT(a ORDER BY BINARY(a)),',') FROM t1 WHERE BINARY(LOWER(TRIM(a))) IN ('aa','Ã¥') GROUP BY a COLLATE uca1400_danish_nopad_ai_ci
+CONCAT(GROUP_CONCAT(a ORDER BY BINARY(a)),',')
+aA,
+aA ,
+AA,Aa,aa,Ã…,Ã¥,
+AA ,Aa ,aa ,Ã… ,Ã¥ ,
+
+SELECT CONCAT(GROUP_CONCAT(a ORDER BY BINARY(a)),',') FROM t1 WHERE BINARY(LOWER(TRIM(a))) IN ('aa','Ã¥') GROUP BY a COLLATE uca1400_danish_ai_ci
+CONCAT(GROUP_CONCAT(a ORDER BY BINARY(a)),',')
+aA,aA ,
+AA,AA ,Aa,Aa ,aa,aa ,Ã…,Ã… ,Ã¥,Ã¥ ,
+DROP TABLE t1;
+DROP PROCEDURE exec_verbose;
+DROP PROCEDURE test_styles;
+#
+# MDEV-30661 UPPER() returns an empty string for U+0251 in uca1400 collations for utf8
+#
+SET NAMES utf8mb4 COLLATE utf8mb4_uca1400_ai_ci;
+CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c LIMIT 0;
+SHOW CREATE TABLE case_folding;
+Table Create Table
+case_folding CREATE TABLE `case_folding` (
+ `code` int(1) NOT NULL,
+ `c` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_ai_ci DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+INSERT INTO case_folding (code) VALUES
+(0x23A),
+(0x23E),
+(0x23F),
+(0x240),
+(0x250),
+(0x251),
+(0x252),
+(0x26B),
+(0x271),
+(0x27D);
+INSERT INTO case_folding (code) VALUES
+(0x0049) /* LATIN CAPITAL LETTER I */,
+(0x0069) /* LATIN SMALL LETTER I */,
+(0x0130) /* LATIN CAPITAL LETTER I WITH DOT ABOVE */,
+(0x0131) /* LATIN SMALL LETTER DOTLESS I */
+;
+INSERT INTO case_folding (code) VALUES
+(0x2C2F) /* GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI (Unicode-14.0) */,
+(0x2C5F) /* GLAGOLITIC SMALL LETTER CAUDATE CHRIVI (Unicode-14.0) */,
+(0xA7C0) /* LATIN CAPITAL LETTER OLD POLISH O (Unicode-14.0) */,
+(0xA7C1) /* LATIN SMALL LETTER OLD POLISH O (Unicode-14.0) */;
+UPDATE case_folding SET c=CHAR(code USING ucs2);
+SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding;
+HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c
+23A E2B1A5 C8BA Ⱥ
+23E E2B1A6 C8BE Ⱦ
+23F C8BF E2B1BE È¿
+240 C980 E2B1BF ɀ
+250 C990 E2B1AF É
+251 C991 E2B1AD É‘
+252 C992 E2B1B0 É’
+26B C9AB E2B1A2 É«
+271 C9B1 E2B1AE ɱ
+27D C9BD E2B1A4 ɽ
+49 69 49 I
+69 69 49 i
+130 69 C4B0 Ä°
+131 C4B1 49 ı
+2C2F E2B19F E2B0AF â°¯
+2C5F E2B19F E2B0AF ⱟ
+A7C0 EA9F81 EA9F80 Ꟁ
+A7C1 EA9F81 EA9F80 êŸ
+DROP TABLE case_folding;
+CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c, SPACE(64) AS comment LIMIT 0;
+SHOW CREATE TABLE case_folding;
+Table Create Table
+case_folding CREATE TABLE `case_folding` (
+ `code` int(1) NOT NULL,
+ `c` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_ai_ci DEFAULT NULL,
+ `comment` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_ai_ci DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+INSERT INTO case_folding (code, comment) VALUES (0x10595, 'VITHKUQI CAPITAL LETTER ZE (Unicode-14.0)');
+INSERT INTO case_folding (code, comment) VALUES (0x105BC, 'VITHKUQI SMALL LETTER ZE (Unicode-14.0)');
+INSERT INTO case_folding (code, comment) VALUES (0x1E921, 'ADLAM CAPITAL LETTER SHA (Unicode-9.0)');
+INSERT INTO case_folding (code, comment) VALUES (0x1E943, 'ADLAM SMALL LETTER SHA (Unicode-9.0)');
+UPDATE case_folding SET c=CHAR(code USING utf32);
+SELECT
+HEX(CONVERT(c USING utf32)) AS ch,
+HEX(CONVERT(LOWER(c) USING utf32)) AS cl,
+HEX(CONVERT(UPPER(c) USING utf32)) AS cu,
+comment
+FROM case_folding ORDER BY BINARY(c);
+ch cl cu comment
+00010595 000105BC 00010595 VITHKUQI CAPITAL LETTER ZE (Unicode-14.0)
+000105BC 000105BC 00010595 VITHKUQI SMALL LETTER ZE (Unicode-14.0)
+0001E921 0001E943 0001E921 ADLAM CAPITAL LETTER SHA (Unicode-9.0)
+0001E943 0001E943 0001E921 ADLAM SMALL LETTER SHA (Unicode-9.0)
+DROP TABLE case_folding;
+SET NAMES utf8mb4 COLLATE utf8mb4_uca1400_turkish_ai_ci;
+CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c LIMIT 0;
+SHOW CREATE TABLE case_folding;
+Table Create Table
+case_folding CREATE TABLE `case_folding` (
+ `code` int(1) NOT NULL,
+ `c` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_turkish_ai_ci DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+INSERT INTO case_folding (code) VALUES
+(0x23A),
+(0x23E),
+(0x23F),
+(0x240),
+(0x250),
+(0x251),
+(0x252),
+(0x26B),
+(0x271),
+(0x27D);
+INSERT INTO case_folding (code) VALUES
+(0x0049) /* LATIN CAPITAL LETTER I */,
+(0x0069) /* LATIN SMALL LETTER I */,
+(0x0130) /* LATIN CAPITAL LETTER I WITH DOT ABOVE */,
+(0x0131) /* LATIN SMALL LETTER DOTLESS I */
+;
+INSERT INTO case_folding (code) VALUES
+(0x2C2F) /* GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI (Unicode-14.0) */,
+(0x2C5F) /* GLAGOLITIC SMALL LETTER CAUDATE CHRIVI (Unicode-14.0) */,
+(0xA7C0) /* LATIN CAPITAL LETTER OLD POLISH O (Unicode-14.0) */,
+(0xA7C1) /* LATIN SMALL LETTER OLD POLISH O (Unicode-14.0) */;
+UPDATE case_folding SET c=CHAR(code USING ucs2);
+SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding;
+HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c
+23A E2B1A5 C8BA Ⱥ
+23E E2B1A6 C8BE Ⱦ
+23F C8BF E2B1BE È¿
+240 C980 E2B1BF ɀ
+250 C990 E2B1AF É
+251 C991 E2B1AD É‘
+252 C992 E2B1B0 É’
+26B C9AB E2B1A2 É«
+271 C9B1 E2B1AE ɱ
+27D C9BD E2B1A4 ɽ
+49 C4B1 49 I
+69 69 C4B0 i
+130 69 C4B0 Ä°
+131 C4B1 49 ı
+2C2F E2B19F E2B0AF â°¯
+2C5F E2B19F E2B0AF ⱟ
+A7C0 EA9F81 EA9F80 Ꟁ
+A7C1 EA9F81 EA9F80 êŸ
+DROP TABLE case_folding;
+CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c, SPACE(64) AS comment LIMIT 0;
+SHOW CREATE TABLE case_folding;
+Table Create Table
+case_folding CREATE TABLE `case_folding` (
+ `code` int(1) NOT NULL,
+ `c` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_turkish_ai_ci DEFAULT NULL,
+ `comment` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_turkish_ai_ci DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+INSERT INTO case_folding (code, comment) VALUES (0x10595, 'VITHKUQI CAPITAL LETTER ZE (Unicode-14.0)');
+INSERT INTO case_folding (code, comment) VALUES (0x105BC, 'VITHKUQI SMALL LETTER ZE (Unicode-14.0)');
+INSERT INTO case_folding (code, comment) VALUES (0x1E921, 'ADLAM CAPITAL LETTER SHA (Unicode-9.0)');
+INSERT INTO case_folding (code, comment) VALUES (0x1E943, 'ADLAM SMALL LETTER SHA (Unicode-9.0)');
+UPDATE case_folding SET c=CHAR(code USING utf32);
+SELECT
+HEX(CONVERT(c USING utf32)) AS ch,
+HEX(CONVERT(LOWER(c) USING utf32)) AS cl,
+HEX(CONVERT(UPPER(c) USING utf32)) AS cu,
+comment
+FROM case_folding ORDER BY BINARY(c);
+ch cl cu comment
+00010595 000105BC 00010595 VITHKUQI CAPITAL LETTER ZE (Unicode-14.0)
+000105BC 000105BC 00010595 VITHKUQI SMALL LETTER ZE (Unicode-14.0)
+0001E921 0001E943 0001E921 ADLAM CAPITAL LETTER SHA (Unicode-9.0)
+0001E943 0001E943 0001E921 ADLAM SMALL LETTER SHA (Unicode-9.0)
+DROP TABLE case_folding;
+#
+# End of 10.10 tests
+#
diff --git a/mysql-test/main/ctype_utf8mb4_uca.test b/mysql-test/main/ctype_utf8mb4_uca.test
index 81f07d7e03f..1b709ebba69 100644
--- a/mysql-test/main/ctype_utf8mb4_uca.test
+++ b/mysql-test/main/ctype_utf8mb4_uca.test
@@ -121,6 +121,9 @@ SET NAMES utf8mb4;
SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci /*Unicode-4.0 folding*/;
--source include/ctype_casefolding.inc
+SET NAMES utf8mb4 COLLATE utf8mb4_turkish_ci /*Unicode-4.0 folding with Turkish mapping for I */;
+--source include/ctype_casefolding.inc
+
SET NAMES utf8mb4 COLLATE utf8mb4_unicode_520_ci;
--source include/ctype_casefolding.inc
@@ -137,3 +140,307 @@ SET NAMES utf8mb4 COLLATE utf8mb4_thai_520_w2;
--echo #
--echo # End of 10.3 tests
--echo #
+
+--echo #
+--echo # MDEV-27009 Add UCA-14.0.0 collations
+--echo # Collation IDs in the protocol
+--echo #
+
+SET NAMES utf8mb4;
+SET @charset=(SELECT @@character_set_client);
+--source include/ctype_uca1400_ids_using_set_names.inc
+
+
+--echo #
+--echo # MDEV-27009 Add UCA-14.0.0 collations
+--echo # SET NAMES CHARACTER SET cs [COLLATE cl]
+--echo #
+
+#enable after fix MDEV-29554
+--disable_view_protocol
+
+CREATE VIEW vars AS
+SELECT * FROM INFORMATION_SCHEMA.SESSION_VARIABLES WHERE variable_name IN
+('character_set_client','character_set_connection','character_set_results',
+ 'collation_connection') ORDER BY variable_name;
+
+--echo ---
+SET NAMES DEFAULT COLLATE DEFAULT;
+SELECT * FROM vars;
+
+--echo ---
+--error ER_COLLATION_CHARSET_MISMATCH
+SET NAMES DEFAULT COLLATE `binary`;
+SELECT * FROM vars;
+
+--echo ---
+--error ER_COLLATION_CHARSET_MISMATCH
+SET NAMES DEFAULT COLLATE utf8mb4_uca1400_ai_ci;
+SELECT * FROM vars;
+
+--echo ---
+--error ER_COLLATION_CHARSET_MISMATCH
+SET NAMES DEFAULT COLLATE uca1400_ai_ci;
+SELECT * FROM vars;
+
+--echo ---
+SET NAMES utf8mb4;
+SELECT * FROM vars;
+
+--echo ---
+--error ER_COLLATION_CHARSET_MISMATCH
+SET NAMES utf8mb4 COLLATE `binary`;
+SELECT * FROM vars;
+
+--echo ---
+SET NAMES utf8mb4 COLLATE DEFAULT;
+SELECT * FROM vars;
+
+--echo ---
+SET NAMES utf8mb4 COLLATE utf8mb4_uca1400_ai_ci;
+SELECT * FROM vars;
+
+--echo ---
+SET NAMES utf8mb4 COLLATE uca1400_ai_ci;
+SELECT * FROM vars;
+
+DROP VIEW vars;
+
+--enable_view_protocol
+
+--echo #
+--echo # MDEV-27009 Add UCA-14.0.0 collations
+--echo # ALTER TABLE t1 CONVERT TO CHARACTER SET cs [COLLATE cl]
+--echo #
+
+CREATE DATABASE db1 CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
+USE db1;
+
+CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET latin1);
+ALTER TABLE t1 CONVERT TO CHARACTER SET DEFAULT;
+SHOW CREATE TABLE t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET latin1);
+ALTER TABLE t1 CONVERT TO CHARACTER SET DEFAULT COLLATE DEFAULT;
+SHOW CREATE TABLE t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET latin1);
+--error ER_COLLATION_CHARSET_MISMATCH
+ALTER TABLE t1 CONVERT TO CHARACTER SET DEFAULT COLLATE latin1_bin;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET latin1);
+ALTER TABLE t1 CONVERT TO CHARACTER SET DEFAULT COLLATE utf8mb4_uca1400_ai_ci;
+SHOW CREATE TABLE t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET latin1);
+ALTER TABLE t1 CONVERT TO CHARACTER SET DEFAULT COLLATE uca1400_ai_ci;
+SHOW CREATE TABLE t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET latin1);
+ALTER TABLE t1 CONVERT TO CHARACTER SET utf8mb4;
+SHOW CREATE TABLE t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET latin1);
+ALTER TABLE t1 CONVERT TO CHARACTER SET utf8mb4 COLLATE DEFAULT;
+SHOW CREATE TABLE t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET latin1);
+--error ER_COLLATION_CHARSET_MISMATCH
+ALTER TABLE t1 CONVERT TO CHARACTER SET utf8mb4 COLLATE latin1_bin;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET latin1);
+ALTER TABLE t1 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_ai_ci;
+SHOW CREATE TABLE t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET latin1);
+ALTER TABLE t1 CONVERT TO CHARACTER SET utf8mb4 COLLATE uca1400_ai_ci;
+SHOW CREATE TABLE t1;
+DROP TABLE t1;
+
+DROP DATABASE db1;
+USE test;
+
+
+--echo #
+--echo # MDEV-27743 Remove Lex::charset
+--echo # MDEV-27009 Add UCA-14.0.0 collations
+--echo #
+
+CREATE TABLE t1 (c1 VARCHAR(10) CHARACTER SET utf8mb4);
+INSERT INTO t1 VALUES ('A'),('a'),('Ã'),('á');
+--error ER_PARSE_ERROR
+SELECT * FROM t1 ORDER BY c1 COLLATE DEFAULT;
+--error ER_COLLATION_CHARSET_MISMATCH
+SELECT * FROM t1 ORDER BY c1 COLLATE `binary`;
+SELECT * FROM t1 ORDER BY c1 COLLATE utf8mb4_uca1400_as_cs;
+EXPLAIN EXTENDED SELECT * FROM t1 ORDER BY c1 COLLATE utf8mb4_uca1400_as_cs;
+SELECT * FROM t1 ORDER BY c1 COLLATE uca1400_as_cs;
+EXPLAIN EXTENDED SELECT * FROM t1 ORDER BY c1 COLLATE uca1400_as_cs;
+DROP TABLE t1;
+
+
+--echo #
+--echo # MDEV-27009 Add UCA-14.0.0 collations
+--echo # CREATE DATABASE
+--echo #
+
+SET @@collation_server=utf8mb4_bin;
+
+CREATE DATABASE db1;
+SHOW CREATE DATABASE db1;
+DROP DATABASE db1;
+
+CREATE DATABASE db1 COLLATE DEFAULT;
+SHOW CREATE DATABASE db1;
+DROP DATABASE db1;
+
+CREATE DATABASE db1 COLLATE uca1400_ai_ci;
+SHOW CREATE DATABASE db1;
+DROP DATABASE db1;
+
+CREATE DATABASE db1 COLLATE utf8mb4_uca1400_ai_ci;
+SHOW CREATE DATABASE db1;
+DROP DATABASE db1;
+
+CREATE DATABASE db1 CHARACTER SET DEFAULT;
+SHOW CREATE DATABASE db1;
+DROP DATABASE db1;
+
+CREATE DATABASE db1 CHARACTER SET DEFAULT COLLATE DEFAULT;
+SHOW CREATE DATABASE db1;
+DROP DATABASE db1;
+
+CREATE DATABASE db1 CHARACTER SET DEFAULT COLLATE uca1400_ai_ci;
+SHOW CREATE DATABASE db1;
+DROP DATABASE db1;
+
+CREATE DATABASE db1 CHARACTER SET DEFAULT COLLATE utf8mb4_uca1400_ai_ci;
+SHOW CREATE DATABASE db1;
+DROP DATABASE db1;
+
+SET @@collation_server=DEFAULT;
+
+SET @@collation_server=latin1_bin;
+--error ER_COLLATION_CHARSET_MISMATCH
+CREATE DATABASE db1 COLLATE uca1400_ai_ci;
+--error ER_COLLATION_CHARSET_MISMATCH
+CREATE DATABASE db1 CHARACTER SET DEFAULT COLLATE uca1400_ai_ci;
+CREATE DATABASE db1 CHARACTER SET utf8mb4 COLLATE uca1400_ai_ci;
+SHOW CREATE DATABASE db1;
+DROP DATABASE db1;
+SET @@collation_server=DEFAULT;
+
+
+--echo #
+--echo # MDEV-27009 Add UCA-14.0.0 collations
+--echo # CREATE TABLE - table level character set and collation
+--echo #
+
+SELECT @@collation_database;
+CREATE DATABASE db1 CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
+
+CREATE TABLE db1.t1 (a CHAR(1));
+SHOW CREATE TABLE db1.t1;
+DROP TABLE db1.t1;
+
+CREATE TABLE db1.t1 (a CHAR(1)) COLLATE DEFAULT;
+SHOW CREATE TABLE db1.t1;
+DROP TABLE db1.t1;
+
+CREATE TABLE db1.t1 (a CHAR(1)) COLLATE uca1400_ai_ci;
+SHOW CREATE TABLE db1.t1;
+DROP TABLE db1.t1;
+
+CREATE TABLE db1.t1 (a CHAR(1)) COLLATE utf8mb4_uca1400_ai_ci;
+SHOW CREATE TABLE db1.t1;
+DROP TABLE db1.t1;
+
+CREATE TABLE db1.t1 (a CHAR(1)) CHARACTER SET DEFAULT;
+SHOW CREATE TABLE db1.t1;
+DROP TABLE db1.t1;
+
+CREATE TABLE db1.t1 (a CHAR(1)) CHARACTER SET DEFAULT COLLATE DEFAULT;
+SHOW CREATE TABLE db1.t1;
+DROP TABLE db1.t1;
+
+CREATE TABLE db1.t1 (a CHAR(1)) CHARACTER SET DEFAULT COLLATE uca1400_ai_ci;
+SHOW CREATE TABLE db1.t1;
+DROP TABLE db1.t1;
+
+CREATE TABLE db1.t1 (a CHAR(1)) CHARACTER SET DEFAULT COLLATE utf8mb4_uca1400_ai_ci;
+SHOW CREATE TABLE db1.t1;
+DROP TABLE db1.t1;
+
+DROP DATABASE db1;
+
+
+--echo #
+--echo # MDEV-27009 Add UCA-14.0.0 collations
+--echo #
+
+SET NAMES utf8mb4;
+DELIMITER $$;
+CREATE PROCEDURE exec_verbose(query TEXT CHARACTER SET utf8mb4)
+BEGIN
+ SELECT query AS ``;
+ EXECUTE IMMEDIATE query;
+END;
+$$
+
+CREATE PROCEDURE test_styles(clname VARCHAR(64) CHARACTER SET utf8mb4,
+ where_clause TEXT CHARACTER SET utf8mb4)
+BEGIN
+ DECLARE query TEXT CHARACTER SET utf8mb4 DEFAULT
+ 'SELECT CONCAT(GROUP_CONCAT(a ORDER BY BINARY(a)),'','') '
+ 'FROM t1 <WHERE> GROUP BY a COLLATE <CL>';
+ SET query=REPLACE(query, '<WHERE>', where_clause);
+ CALL exec_verbose(REPLACE(query, '<CL>', CONCAT(clname,'_nopad_as_cs')));
+ CALL exec_verbose(REPLACE(query, '<CL>', CONCAT(clname,'_as_cs')));
+ CALL exec_verbose(REPLACE(query, '<CL>', CONCAT(clname,'_nopad_as_ci')));
+ CALL exec_verbose(REPLACE(query, '<CL>', CONCAT(clname,'_as_ci')));
+ CALL exec_verbose(REPLACE(query, '<CL>', CONCAT(clname,'_nopad_ai_cs')));
+ CALL exec_verbose(REPLACE(query, '<CL>', CONCAT(clname,'_ai_cs')));
+ CALL exec_verbose(REPLACE(query, '<CL>', CONCAT(clname,'_nopad_ai_ci')));
+ CALL exec_verbose(REPLACE(query, '<CL>', CONCAT(clname,'_ai_ci')));
+END;
+$$
+DELIMITER ;$$
+
+CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET utf8mb4);
+--source include/ctype_unicode_latin.inc
+INSERT INTO t1 VALUES('ẞ');
+INSERT INTO t1 SELECT CONCAT(a,' ') FROM t1;
+
+CALL test_styles('uca1400', '');
+CALL test_styles('uca1400', _utf8mb4"WHERE BINARY(LOWER(TRIM(a))) IN ('ss','s','ß','ẞ')");
+CALL test_styles('uca1400_danish', _utf8mb4"WHERE BINARY(LOWER(TRIM(a))) IN ('aa','Ã¥')");
+
+DROP TABLE t1;
+
+DROP PROCEDURE exec_verbose;
+DROP PROCEDURE test_styles;
+
+--echo #
+--echo # MDEV-30661 UPPER() returns an empty string for U+0251 in uca1400 collations for utf8
+--echo #
+
+SET NAMES utf8mb4 COLLATE utf8mb4_uca1400_ai_ci;
+--source include/ctype_casefolding.inc
+--source include/ctype_casefolding_supplementary.inc
+
+SET NAMES utf8mb4 COLLATE utf8mb4_uca1400_turkish_ai_ci;
+--source include/ctype_casefolding.inc
+--source include/ctype_casefolding_supplementary.inc
+
+--echo #
+--echo # End of 10.10 tests
+--echo #
diff --git a/mysql-test/main/ctype_utf8mb4_uca1400_ai_ci_casefold.result b/mysql-test/main/ctype_utf8mb4_uca1400_ai_ci_casefold.result
new file mode 100644
index 00000000000..85e87f217cc
--- /dev/null
+++ b/mysql-test/main/ctype_utf8mb4_uca1400_ai_ci_casefold.result
@@ -0,0 +1,2927 @@
+#
+# Start of 10.10 tests
+#
+#
+# MDEV-30577 Case folding for uca1400 collations is not up to date
+#
+SET NAMES utf8mb4 COLLATE utf8mb4_uca1400_ai_ci;
+EXECUTE IMMEDIATE SFORMAT('
+CREATE VIEW v_bmp AS
+SELECT
+ seq AS codepoint,
+ LPAD(HEX(seq),4,''0'') AS codepoint_hex4,
+ CONVERT(CHAR(seq USING utf32) USING {}) COLLATE {} AS c
+FROM
+ seq_0_to_65535', @@character_set_connection, @@collation_connection);
+SELECT COLLATION(c) FROM v_bmp LIMIT 1;
+COLLATION(c)
+utf8mb4_uca1400_ai_ci
+SELECT
+codepoint_hex4,
+HEX(CAST(LOWER(c) AS CHAR CHARACTER SET ucs2)),
+HEX(CAST(UPPER(c) AS CHAR CHARACTER SET ucs2))
+FROM v_bmp
+WHERE BINARY(c)<>BINARY(LOWER(c)) OR BINARY(c)<>BINARY(UPPER(c));
+codepoint_hex4 HEX(CAST(LOWER(c) AS CHAR CHARACTER SET ucs2)) HEX(CAST(UPPER(c) AS CHAR CHARACTER SET ucs2))
+0041 0061 0041
+0042 0062 0042
+0043 0063 0043
+0044 0064 0044
+0045 0065 0045
+0046 0066 0046
+0047 0067 0047
+0048 0068 0048
+0049 0069 0049
+004A 006A 004A
+004B 006B 004B
+004C 006C 004C
+004D 006D 004D
+004E 006E 004E
+004F 006F 004F
+0050 0070 0050
+0051 0071 0051
+0052 0072 0052
+0053 0073 0053
+0054 0074 0054
+0055 0075 0055
+0056 0076 0056
+0057 0077 0057
+0058 0078 0058
+0059 0079 0059
+005A 007A 005A
+0061 0061 0041
+0062 0062 0042
+0063 0063 0043
+0064 0064 0044
+0065 0065 0045
+0066 0066 0046
+0067 0067 0047
+0068 0068 0048
+0069 0069 0049
+006A 006A 004A
+006B 006B 004B
+006C 006C 004C
+006D 006D 004D
+006E 006E 004E
+006F 006F 004F
+0070 0070 0050
+0071 0071 0051
+0072 0072 0052
+0073 0073 0053
+0074 0074 0054
+0075 0075 0055
+0076 0076 0056
+0077 0077 0057
+0078 0078 0058
+0079 0079 0059
+007A 007A 005A
+00B5 00B5 039C
+00C0 00E0 00C0
+00C1 00E1 00C1
+00C2 00E2 00C2
+00C3 00E3 00C3
+00C4 00E4 00C4
+00C5 00E5 00C5
+00C6 00E6 00C6
+00C7 00E7 00C7
+00C8 00E8 00C8
+00C9 00E9 00C9
+00CA 00EA 00CA
+00CB 00EB 00CB
+00CC 00EC 00CC
+00CD 00ED 00CD
+00CE 00EE 00CE
+00CF 00EF 00CF
+00D0 00F0 00D0
+00D1 00F1 00D1
+00D2 00F2 00D2
+00D3 00F3 00D3
+00D4 00F4 00D4
+00D5 00F5 00D5
+00D6 00F6 00D6
+00D8 00F8 00D8
+00D9 00F9 00D9
+00DA 00FA 00DA
+00DB 00FB 00DB
+00DC 00FC 00DC
+00DD 00FD 00DD
+00DE 00FE 00DE
+00E0 00E0 00C0
+00E1 00E1 00C1
+00E2 00E2 00C2
+00E3 00E3 00C3
+00E4 00E4 00C4
+00E5 00E5 00C5
+00E6 00E6 00C6
+00E7 00E7 00C7
+00E8 00E8 00C8
+00E9 00E9 00C9
+00EA 00EA 00CA
+00EB 00EB 00CB
+00EC 00EC 00CC
+00ED 00ED 00CD
+00EE 00EE 00CE
+00EF 00EF 00CF
+00F0 00F0 00D0
+00F1 00F1 00D1
+00F2 00F2 00D2
+00F3 00F3 00D3
+00F4 00F4 00D4
+00F5 00F5 00D5
+00F6 00F6 00D6
+00F8 00F8 00D8
+00F9 00F9 00D9
+00FA 00FA 00DA
+00FB 00FB 00DB
+00FC 00FC 00DC
+00FD 00FD 00DD
+00FE 00FE 00DE
+00FF 00FF 0178
+0100 0101 0100
+0101 0101 0100
+0102 0103 0102
+0103 0103 0102
+0104 0105 0104
+0105 0105 0104
+0106 0107 0106
+0107 0107 0106
+0108 0109 0108
+0109 0109 0108
+010A 010B 010A
+010B 010B 010A
+010C 010D 010C
+010D 010D 010C
+010E 010F 010E
+010F 010F 010E
+0110 0111 0110
+0111 0111 0110
+0112 0113 0112
+0113 0113 0112
+0114 0115 0114
+0115 0115 0114
+0116 0117 0116
+0117 0117 0116
+0118 0119 0118
+0119 0119 0118
+011A 011B 011A
+011B 011B 011A
+011C 011D 011C
+011D 011D 011C
+011E 011F 011E
+011F 011F 011E
+0120 0121 0120
+0121 0121 0120
+0122 0123 0122
+0123 0123 0122
+0124 0125 0124
+0125 0125 0124
+0126 0127 0126
+0127 0127 0126
+0128 0129 0128
+0129 0129 0128
+012A 012B 012A
+012B 012B 012A
+012C 012D 012C
+012D 012D 012C
+012E 012F 012E
+012F 012F 012E
+0130 0069 0130
+0131 0131 0049
+0132 0133 0132
+0133 0133 0132
+0134 0135 0134
+0135 0135 0134
+0136 0137 0136
+0137 0137 0136
+0139 013A 0139
+013A 013A 0139
+013B 013C 013B
+013C 013C 013B
+013D 013E 013D
+013E 013E 013D
+013F 0140 013F
+0140 0140 013F
+0141 0142 0141
+0142 0142 0141
+0143 0144 0143
+0144 0144 0143
+0145 0146 0145
+0146 0146 0145
+0147 0148 0147
+0148 0148 0147
+014A 014B 014A
+014B 014B 014A
+014C 014D 014C
+014D 014D 014C
+014E 014F 014E
+014F 014F 014E
+0150 0151 0150
+0151 0151 0150
+0152 0153 0152
+0153 0153 0152
+0154 0155 0154
+0155 0155 0154
+0156 0157 0156
+0157 0157 0156
+0158 0159 0158
+0159 0159 0158
+015A 015B 015A
+015B 015B 015A
+015C 015D 015C
+015D 015D 015C
+015E 015F 015E
+015F 015F 015E
+0160 0161 0160
+0161 0161 0160
+0162 0163 0162
+0163 0163 0162
+0164 0165 0164
+0165 0165 0164
+0166 0167 0166
+0167 0167 0166
+0168 0169 0168
+0169 0169 0168
+016A 016B 016A
+016B 016B 016A
+016C 016D 016C
+016D 016D 016C
+016E 016F 016E
+016F 016F 016E
+0170 0171 0170
+0171 0171 0170
+0172 0173 0172
+0173 0173 0172
+0174 0175 0174
+0175 0175 0174
+0176 0177 0176
+0177 0177 0176
+0178 00FF 0178
+0179 017A 0179
+017A 017A 0179
+017B 017C 017B
+017C 017C 017B
+017D 017E 017D
+017E 017E 017D
+017F 017F 0053
+0180 0180 0243
+0181 0253 0181
+0182 0183 0182
+0183 0183 0182
+0184 0185 0184
+0185 0185 0184
+0186 0254 0186
+0187 0188 0187
+0188 0188 0187
+0189 0256 0189
+018A 0257 018A
+018B 018C 018B
+018C 018C 018B
+018E 01DD 018E
+018F 0259 018F
+0190 025B 0190
+0191 0192 0191
+0192 0192 0191
+0193 0260 0193
+0194 0263 0194
+0195 0195 01F6
+0196 0269 0196
+0197 0268 0197
+0198 0199 0198
+0199 0199 0198
+019A 019A 023D
+019C 026F 019C
+019D 0272 019D
+019E 019E 0220
+019F 0275 019F
+01A0 01A1 01A0
+01A1 01A1 01A0
+01A2 01A3 01A2
+01A3 01A3 01A2
+01A4 01A5 01A4
+01A5 01A5 01A4
+01A6 0280 01A6
+01A7 01A8 01A7
+01A8 01A8 01A7
+01A9 0283 01A9
+01AC 01AD 01AC
+01AD 01AD 01AC
+01AE 0288 01AE
+01AF 01B0 01AF
+01B0 01B0 01AF
+01B1 028A 01B1
+01B2 028B 01B2
+01B3 01B4 01B3
+01B4 01B4 01B3
+01B5 01B6 01B5
+01B6 01B6 01B5
+01B7 0292 01B7
+01B8 01B9 01B8
+01B9 01B9 01B8
+01BC 01BD 01BC
+01BD 01BD 01BC
+01BF 01BF 01F7
+01C4 01C6 01C4
+01C5 01C6 01C4
+01C6 01C6 01C4
+01C7 01C9 01C7
+01C8 01C9 01C7
+01C9 01C9 01C7
+01CA 01CC 01CA
+01CB 01CC 01CA
+01CC 01CC 01CA
+01CD 01CE 01CD
+01CE 01CE 01CD
+01CF 01D0 01CF
+01D0 01D0 01CF
+01D1 01D2 01D1
+01D2 01D2 01D1
+01D3 01D4 01D3
+01D4 01D4 01D3
+01D5 01D6 01D5
+01D6 01D6 01D5
+01D7 01D8 01D7
+01D8 01D8 01D7
+01D9 01DA 01D9
+01DA 01DA 01D9
+01DB 01DC 01DB
+01DC 01DC 01DB
+01DD 01DD 018E
+01DE 01DF 01DE
+01DF 01DF 01DE
+01E0 01E1 01E0
+01E1 01E1 01E0
+01E2 01E3 01E2
+01E3 01E3 01E2
+01E4 01E5 01E4
+01E5 01E5 01E4
+01E6 01E7 01E6
+01E7 01E7 01E6
+01E8 01E9 01E8
+01E9 01E9 01E8
+01EA 01EB 01EA
+01EB 01EB 01EA
+01EC 01ED 01EC
+01ED 01ED 01EC
+01EE 01EF 01EE
+01EF 01EF 01EE
+01F1 01F3 01F1
+01F2 01F3 01F1
+01F3 01F3 01F1
+01F4 01F5 01F4
+01F5 01F5 01F4
+01F6 0195 01F6
+01F7 01BF 01F7
+01F8 01F9 01F8
+01F9 01F9 01F8
+01FA 01FB 01FA
+01FB 01FB 01FA
+01FC 01FD 01FC
+01FD 01FD 01FC
+01FE 01FF 01FE
+01FF 01FF 01FE
+0200 0201 0200
+0201 0201 0200
+0202 0203 0202
+0203 0203 0202
+0204 0205 0204
+0205 0205 0204
+0206 0207 0206
+0207 0207 0206
+0208 0209 0208
+0209 0209 0208
+020A 020B 020A
+020B 020B 020A
+020C 020D 020C
+020D 020D 020C
+020E 020F 020E
+020F 020F 020E
+0210 0211 0210
+0211 0211 0210
+0212 0213 0212
+0213 0213 0212
+0214 0215 0214
+0215 0215 0214
+0216 0217 0216
+0217 0217 0216
+0218 0219 0218
+0219 0219 0218
+021A 021B 021A
+021B 021B 021A
+021C 021D 021C
+021D 021D 021C
+021E 021F 021E
+021F 021F 021E
+0220 019E 0220
+0222 0223 0222
+0223 0223 0222
+0224 0225 0224
+0225 0225 0224
+0226 0227 0226
+0227 0227 0226
+0228 0229 0228
+0229 0229 0228
+022A 022B 022A
+022B 022B 022A
+022C 022D 022C
+022D 022D 022C
+022E 022F 022E
+022F 022F 022E
+0230 0231 0230
+0231 0231 0230
+0232 0233 0232
+0233 0233 0232
+023A 2C65 023A
+023B 023C 023B
+023C 023C 023B
+023D 019A 023D
+023E 2C66 023E
+023F 023F 2C7E
+0240 0240 2C7F
+0241 0242 0241
+0242 0242 0241
+0243 0180 0243
+0244 0289 0244
+0245 028C 0245
+0246 0247 0246
+0247 0247 0246
+0248 0249 0248
+0249 0249 0248
+024A 024B 024A
+024B 024B 024A
+024C 024D 024C
+024D 024D 024C
+024E 024F 024E
+024F 024F 024E
+0250 0250 2C6F
+0251 0251 2C6D
+0252 0252 2C70
+0253 0253 0181
+0254 0254 0186
+0256 0256 0189
+0257 0257 018A
+0259 0259 018F
+025B 025B 0190
+025C 025C A7AB
+0260 0260 0193
+0261 0261 A7AC
+0263 0263 0194
+0265 0265 A78D
+0266 0266 A7AA
+0268 0268 0197
+0269 0269 0196
+026A 026A A7AE
+026B 026B 2C62
+026C 026C A7AD
+026F 026F 019C
+0271 0271 2C6E
+0272 0272 019D
+0275 0275 019F
+027D 027D 2C64
+0280 0280 01A6
+0282 0282 A7C5
+0283 0283 01A9
+0287 0287 A7B1
+0288 0288 01AE
+0289 0289 0244
+028A 028A 01B1
+028B 028B 01B2
+028C 028C 0245
+0292 0292 01B7
+029D 029D A7B2
+029E 029E A7B0
+0345 0345 0399
+0370 0371 0370
+0371 0371 0370
+0372 0373 0372
+0373 0373 0372
+0376 0377 0376
+0377 0377 0376
+037B 037B 03FD
+037C 037C 03FE
+037D 037D 03FF
+037F 03F3 037F
+0386 03AC 0386
+0388 03AD 0388
+0389 03AE 0389
+038A 03AF 038A
+038C 03CC 038C
+038E 03CD 038E
+038F 03CE 038F
+0391 03B1 0391
+0392 03B2 0392
+0393 03B3 0393
+0394 03B4 0394
+0395 03B5 0395
+0396 03B6 0396
+0397 03B7 0397
+0398 03B8 0398
+0399 03B9 0399
+039A 03BA 039A
+039B 03BB 039B
+039C 03BC 039C
+039D 03BD 039D
+039E 03BE 039E
+039F 03BF 039F
+03A0 03C0 03A0
+03A1 03C1 03A1
+03A3 03C3 03A3
+03A4 03C4 03A4
+03A5 03C5 03A5
+03A6 03C6 03A6
+03A7 03C7 03A7
+03A8 03C8 03A8
+03A9 03C9 03A9
+03AA 03CA 03AA
+03AB 03CB 03AB
+03AC 03AC 0386
+03AD 03AD 0388
+03AE 03AE 0389
+03AF 03AF 038A
+03B1 03B1 0391
+03B2 03B2 0392
+03B3 03B3 0393
+03B4 03B4 0394
+03B5 03B5 0395
+03B6 03B6 0396
+03B7 03B7 0397
+03B8 03B8 0398
+03B9 03B9 0399
+03BA 03BA 039A
+03BB 03BB 039B
+03BC 03BC 039C
+03BD 03BD 039D
+03BE 03BE 039E
+03BF 03BF 039F
+03C0 03C0 03A0
+03C1 03C1 03A1
+03C2 03C2 03A3
+03C3 03C3 03A3
+03C4 03C4 03A4
+03C5 03C5 03A5
+03C6 03C6 03A6
+03C7 03C7 03A7
+03C8 03C8 03A8
+03C9 03C9 03A9
+03CA 03CA 03AA
+03CB 03CB 03AB
+03CC 03CC 038C
+03CD 03CD 038E
+03CE 03CE 038F
+03CF 03D7 03CF
+03D0 03D0 0392
+03D1 03D1 0398
+03D5 03D5 03A6
+03D6 03D6 03A0
+03D7 03D7 03CF
+03D8 03D9 03D8
+03D9 03D9 03D8
+03DA 03DB 03DA
+03DB 03DB 03DA
+03DC 03DD 03DC
+03DD 03DD 03DC
+03DE 03DF 03DE
+03DF 03DF 03DE
+03E0 03E1 03E0
+03E1 03E1 03E0
+03E2 03E3 03E2
+03E3 03E3 03E2
+03E4 03E5 03E4
+03E5 03E5 03E4
+03E6 03E7 03E6
+03E7 03E7 03E6
+03E8 03E9 03E8
+03E9 03E9 03E8
+03EA 03EB 03EA
+03EB 03EB 03EA
+03EC 03ED 03EC
+03ED 03ED 03EC
+03EE 03EF 03EE
+03EF 03EF 03EE
+03F0 03F0 039A
+03F1 03F1 03A1
+03F2 03F2 03F9
+03F3 03F3 037F
+03F4 03B8 03F4
+03F5 03F5 0395
+03F7 03F8 03F7
+03F8 03F8 03F7
+03F9 03F2 03F9
+03FA 03FB 03FA
+03FB 03FB 03FA
+03FD 037B 03FD
+03FE 037C 03FE
+03FF 037D 03FF
+0400 0450 0400
+0401 0451 0401
+0402 0452 0402
+0403 0453 0403
+0404 0454 0404
+0405 0455 0405
+0406 0456 0406
+0407 0457 0407
+0408 0458 0408
+0409 0459 0409
+040A 045A 040A
+040B 045B 040B
+040C 045C 040C
+040D 045D 040D
+040E 045E 040E
+040F 045F 040F
+0410 0430 0410
+0411 0431 0411
+0412 0432 0412
+0413 0433 0413
+0414 0434 0414
+0415 0435 0415
+0416 0436 0416
+0417 0437 0417
+0418 0438 0418
+0419 0439 0419
+041A 043A 041A
+041B 043B 041B
+041C 043C 041C
+041D 043D 041D
+041E 043E 041E
+041F 043F 041F
+0420 0440 0420
+0421 0441 0421
+0422 0442 0422
+0423 0443 0423
+0424 0444 0424
+0425 0445 0425
+0426 0446 0426
+0427 0447 0427
+0428 0448 0428
+0429 0449 0429
+042A 044A 042A
+042B 044B 042B
+042C 044C 042C
+042D 044D 042D
+042E 044E 042E
+042F 044F 042F
+0430 0430 0410
+0431 0431 0411
+0432 0432 0412
+0433 0433 0413
+0434 0434 0414
+0435 0435 0415
+0436 0436 0416
+0437 0437 0417
+0438 0438 0418
+0439 0439 0419
+043A 043A 041A
+043B 043B 041B
+043C 043C 041C
+043D 043D 041D
+043E 043E 041E
+043F 043F 041F
+0440 0440 0420
+0441 0441 0421
+0442 0442 0422
+0443 0443 0423
+0444 0444 0424
+0445 0445 0425
+0446 0446 0426
+0447 0447 0427
+0448 0448 0428
+0449 0449 0429
+044A 044A 042A
+044B 044B 042B
+044C 044C 042C
+044D 044D 042D
+044E 044E 042E
+044F 044F 042F
+0450 0450 0400
+0451 0451 0401
+0452 0452 0402
+0453 0453 0403
+0454 0454 0404
+0455 0455 0405
+0456 0456 0406
+0457 0457 0407
+0458 0458 0408
+0459 0459 0409
+045A 045A 040A
+045B 045B 040B
+045C 045C 040C
+045D 045D 040D
+045E 045E 040E
+045F 045F 040F
+0460 0461 0460
+0461 0461 0460
+0462 0463 0462
+0463 0463 0462
+0464 0465 0464
+0465 0465 0464
+0466 0467 0466
+0467 0467 0466
+0468 0469 0468
+0469 0469 0468
+046A 046B 046A
+046B 046B 046A
+046C 046D 046C
+046D 046D 046C
+046E 046F 046E
+046F 046F 046E
+0470 0471 0470
+0471 0471 0470
+0472 0473 0472
+0473 0473 0472
+0474 0475 0474
+0475 0475 0474
+0476 0477 0476
+0477 0477 0476
+0478 0479 0478
+0479 0479 0478
+047A 047B 047A
+047B 047B 047A
+047C 047D 047C
+047D 047D 047C
+047E 047F 047E
+047F 047F 047E
+0480 0481 0480
+0481 0481 0480
+048A 048B 048A
+048B 048B 048A
+048C 048D 048C
+048D 048D 048C
+048E 048F 048E
+048F 048F 048E
+0490 0491 0490
+0491 0491 0490
+0492 0493 0492
+0493 0493 0492
+0494 0495 0494
+0495 0495 0494
+0496 0497 0496
+0497 0497 0496
+0498 0499 0498
+0499 0499 0498
+049A 049B 049A
+049B 049B 049A
+049C 049D 049C
+049D 049D 049C
+049E 049F 049E
+049F 049F 049E
+04A0 04A1 04A0
+04A1 04A1 04A0
+04A2 04A3 04A2
+04A3 04A3 04A2
+04A4 04A5 04A4
+04A5 04A5 04A4
+04A6 04A7 04A6
+04A7 04A7 04A6
+04A8 04A9 04A8
+04A9 04A9 04A8
+04AA 04AB 04AA
+04AB 04AB 04AA
+04AC 04AD 04AC
+04AD 04AD 04AC
+04AE 04AF 04AE
+04AF 04AF 04AE
+04B0 04B1 04B0
+04B1 04B1 04B0
+04B2 04B3 04B2
+04B3 04B3 04B2
+04B4 04B5 04B4
+04B5 04B5 04B4
+04B6 04B7 04B6
+04B7 04B7 04B6
+04B8 04B9 04B8
+04B9 04B9 04B8
+04BA 04BB 04BA
+04BB 04BB 04BA
+04BC 04BD 04BC
+04BD 04BD 04BC
+04BE 04BF 04BE
+04BF 04BF 04BE
+04C0 04CF 04C0
+04C1 04C2 04C1
+04C2 04C2 04C1
+04C3 04C4 04C3
+04C4 04C4 04C3
+04C5 04C6 04C5
+04C6 04C6 04C5
+04C7 04C8 04C7
+04C8 04C8 04C7
+04C9 04CA 04C9
+04CA 04CA 04C9
+04CB 04CC 04CB
+04CC 04CC 04CB
+04CD 04CE 04CD
+04CE 04CE 04CD
+04CF 04CF 04C0
+04D0 04D1 04D0
+04D1 04D1 04D0
+04D2 04D3 04D2
+04D3 04D3 04D2
+04D4 04D5 04D4
+04D5 04D5 04D4
+04D6 04D7 04D6
+04D7 04D7 04D6
+04D8 04D9 04D8
+04D9 04D9 04D8
+04DA 04DB 04DA
+04DB 04DB 04DA
+04DC 04DD 04DC
+04DD 04DD 04DC
+04DE 04DF 04DE
+04DF 04DF 04DE
+04E0 04E1 04E0
+04E1 04E1 04E0
+04E2 04E3 04E2
+04E3 04E3 04E2
+04E4 04E5 04E4
+04E5 04E5 04E4
+04E6 04E7 04E6
+04E7 04E7 04E6
+04E8 04E9 04E8
+04E9 04E9 04E8
+04EA 04EB 04EA
+04EB 04EB 04EA
+04EC 04ED 04EC
+04ED 04ED 04EC
+04EE 04EF 04EE
+04EF 04EF 04EE
+04F0 04F1 04F0
+04F1 04F1 04F0
+04F2 04F3 04F2
+04F3 04F3 04F2
+04F4 04F5 04F4
+04F5 04F5 04F4
+04F6 04F7 04F6
+04F7 04F7 04F6
+04F8 04F9 04F8
+04F9 04F9 04F8
+04FA 04FB 04FA
+04FB 04FB 04FA
+04FC 04FD 04FC
+04FD 04FD 04FC
+04FE 04FF 04FE
+04FF 04FF 04FE
+0500 0501 0500
+0501 0501 0500
+0502 0503 0502
+0503 0503 0502
+0504 0505 0504
+0505 0505 0504
+0506 0507 0506
+0507 0507 0506
+0508 0509 0508
+0509 0509 0508
+050A 050B 050A
+050B 050B 050A
+050C 050D 050C
+050D 050D 050C
+050E 050F 050E
+050F 050F 050E
+0510 0511 0510
+0511 0511 0510
+0512 0513 0512
+0513 0513 0512
+0514 0515 0514
+0515 0515 0514
+0516 0517 0516
+0517 0517 0516
+0518 0519 0518
+0519 0519 0518
+051A 051B 051A
+051B 051B 051A
+051C 051D 051C
+051D 051D 051C
+051E 051F 051E
+051F 051F 051E
+0520 0521 0520
+0521 0521 0520
+0522 0523 0522
+0523 0523 0522
+0524 0525 0524
+0525 0525 0524
+0526 0527 0526
+0527 0527 0526
+0528 0529 0528
+0529 0529 0528
+052A 052B 052A
+052B 052B 052A
+052C 052D 052C
+052D 052D 052C
+052E 052F 052E
+052F 052F 052E
+0531 0561 0531
+0532 0562 0532
+0533 0563 0533
+0534 0564 0534
+0535 0565 0535
+0536 0566 0536
+0537 0567 0537
+0538 0568 0538
+0539 0569 0539
+053A 056A 053A
+053B 056B 053B
+053C 056C 053C
+053D 056D 053D
+053E 056E 053E
+053F 056F 053F
+0540 0570 0540
+0541 0571 0541
+0542 0572 0542
+0543 0573 0543
+0544 0574 0544
+0545 0575 0545
+0546 0576 0546
+0547 0577 0547
+0548 0578 0548
+0549 0579 0549
+054A 057A 054A
+054B 057B 054B
+054C 057C 054C
+054D 057D 054D
+054E 057E 054E
+054F 057F 054F
+0550 0580 0550
+0551 0581 0551
+0552 0582 0552
+0553 0583 0553
+0554 0584 0554
+0555 0585 0555
+0556 0586 0556
+0561 0561 0531
+0562 0562 0532
+0563 0563 0533
+0564 0564 0534
+0565 0565 0535
+0566 0566 0536
+0567 0567 0537
+0568 0568 0538
+0569 0569 0539
+056A 056A 053A
+056B 056B 053B
+056C 056C 053C
+056D 056D 053D
+056E 056E 053E
+056F 056F 053F
+0570 0570 0540
+0571 0571 0541
+0572 0572 0542
+0573 0573 0543
+0574 0574 0544
+0575 0575 0545
+0576 0576 0546
+0577 0577 0547
+0578 0578 0548
+0579 0579 0549
+057A 057A 054A
+057B 057B 054B
+057C 057C 054C
+057D 057D 054D
+057E 057E 054E
+057F 057F 054F
+0580 0580 0550
+0581 0581 0551
+0582 0582 0552
+0583 0583 0553
+0584 0584 0554
+0585 0585 0555
+0586 0586 0556
+10A0 2D00 10A0
+10A1 2D01 10A1
+10A2 2D02 10A2
+10A3 2D03 10A3
+10A4 2D04 10A4
+10A5 2D05 10A5
+10A6 2D06 10A6
+10A7 2D07 10A7
+10A8 2D08 10A8
+10A9 2D09 10A9
+10AA 2D0A 10AA
+10AB 2D0B 10AB
+10AC 2D0C 10AC
+10AD 2D0D 10AD
+10AE 2D0E 10AE
+10AF 2D0F 10AF
+10B0 2D10 10B0
+10B1 2D11 10B1
+10B2 2D12 10B2
+10B3 2D13 10B3
+10B4 2D14 10B4
+10B5 2D15 10B5
+10B6 2D16 10B6
+10B7 2D17 10B7
+10B8 2D18 10B8
+10B9 2D19 10B9
+10BA 2D1A 10BA
+10BB 2D1B 10BB
+10BC 2D1C 10BC
+10BD 2D1D 10BD
+10BE 2D1E 10BE
+10BF 2D1F 10BF
+10C0 2D20 10C0
+10C1 2D21 10C1
+10C2 2D22 10C2
+10C3 2D23 10C3
+10C4 2D24 10C4
+10C5 2D25 10C5
+10C7 2D27 10C7
+10CD 2D2D 10CD
+10D0 10D0 1C90
+10D1 10D1 1C91
+10D2 10D2 1C92
+10D3 10D3 1C93
+10D4 10D4 1C94
+10D5 10D5 1C95
+10D6 10D6 1C96
+10D7 10D7 1C97
+10D8 10D8 1C98
+10D9 10D9 1C99
+10DA 10DA 1C9A
+10DB 10DB 1C9B
+10DC 10DC 1C9C
+10DD 10DD 1C9D
+10DE 10DE 1C9E
+10DF 10DF 1C9F
+10E0 10E0 1CA0
+10E1 10E1 1CA1
+10E2 10E2 1CA2
+10E3 10E3 1CA3
+10E4 10E4 1CA4
+10E5 10E5 1CA5
+10E6 10E6 1CA6
+10E7 10E7 1CA7
+10E8 10E8 1CA8
+10E9 10E9 1CA9
+10EA 10EA 1CAA
+10EB 10EB 1CAB
+10EC 10EC 1CAC
+10ED 10ED 1CAD
+10EE 10EE 1CAE
+10EF 10EF 1CAF
+10F0 10F0 1CB0
+10F1 10F1 1CB1
+10F2 10F2 1CB2
+10F3 10F3 1CB3
+10F4 10F4 1CB4
+10F5 10F5 1CB5
+10F6 10F6 1CB6
+10F7 10F7 1CB7
+10F8 10F8 1CB8
+10F9 10F9 1CB9
+10FA 10FA 1CBA
+10FD 10FD 1CBD
+10FE 10FE 1CBE
+10FF 10FF 1CBF
+13A0 AB70 13A0
+13A1 AB71 13A1
+13A2 AB72 13A2
+13A3 AB73 13A3
+13A4 AB74 13A4
+13A5 AB75 13A5
+13A6 AB76 13A6
+13A7 AB77 13A7
+13A8 AB78 13A8
+13A9 AB79 13A9
+13AA AB7A 13AA
+13AB AB7B 13AB
+13AC AB7C 13AC
+13AD AB7D 13AD
+13AE AB7E 13AE
+13AF AB7F 13AF
+13B0 AB80 13B0
+13B1 AB81 13B1
+13B2 AB82 13B2
+13B3 AB83 13B3
+13B4 AB84 13B4
+13B5 AB85 13B5
+13B6 AB86 13B6
+13B7 AB87 13B7
+13B8 AB88 13B8
+13B9 AB89 13B9
+13BA AB8A 13BA
+13BB AB8B 13BB
+13BC AB8C 13BC
+13BD AB8D 13BD
+13BE AB8E 13BE
+13BF AB8F 13BF
+13C0 AB90 13C0
+13C1 AB91 13C1
+13C2 AB92 13C2
+13C3 AB93 13C3
+13C4 AB94 13C4
+13C5 AB95 13C5
+13C6 AB96 13C6
+13C7 AB97 13C7
+13C8 AB98 13C8
+13C9 AB99 13C9
+13CA AB9A 13CA
+13CB AB9B 13CB
+13CC AB9C 13CC
+13CD AB9D 13CD
+13CE AB9E 13CE
+13CF AB9F 13CF
+13D0 ABA0 13D0
+13D1 ABA1 13D1
+13D2 ABA2 13D2
+13D3 ABA3 13D3
+13D4 ABA4 13D4
+13D5 ABA5 13D5
+13D6 ABA6 13D6
+13D7 ABA7 13D7
+13D8 ABA8 13D8
+13D9 ABA9 13D9
+13DA ABAA 13DA
+13DB ABAB 13DB
+13DC ABAC 13DC
+13DD ABAD 13DD
+13DE ABAE 13DE
+13DF ABAF 13DF
+13E0 ABB0 13E0
+13E1 ABB1 13E1
+13E2 ABB2 13E2
+13E3 ABB3 13E3
+13E4 ABB4 13E4
+13E5 ABB5 13E5
+13E6 ABB6 13E6
+13E7 ABB7 13E7
+13E8 ABB8 13E8
+13E9 ABB9 13E9
+13EA ABBA 13EA
+13EB ABBB 13EB
+13EC ABBC 13EC
+13ED ABBD 13ED
+13EE ABBE 13EE
+13EF ABBF 13EF
+13F0 13F8 13F0
+13F1 13F9 13F1
+13F2 13FA 13F2
+13F3 13FB 13F3
+13F4 13FC 13F4
+13F5 13FD 13F5
+13F8 13F8 13F0
+13F9 13F9 13F1
+13FA 13FA 13F2
+13FB 13FB 13F3
+13FC 13FC 13F4
+13FD 13FD 13F5
+1C80 1C80 0412
+1C81 1C81 0414
+1C82 1C82 041E
+1C83 1C83 0421
+1C84 1C84 0422
+1C85 1C85 0422
+1C86 1C86 042A
+1C87 1C87 0462
+1C88 1C88 A64A
+1C90 10D0 1C90
+1C91 10D1 1C91
+1C92 10D2 1C92
+1C93 10D3 1C93
+1C94 10D4 1C94
+1C95 10D5 1C95
+1C96 10D6 1C96
+1C97 10D7 1C97
+1C98 10D8 1C98
+1C99 10D9 1C99
+1C9A 10DA 1C9A
+1C9B 10DB 1C9B
+1C9C 10DC 1C9C
+1C9D 10DD 1C9D
+1C9E 10DE 1C9E
+1C9F 10DF 1C9F
+1CA0 10E0 1CA0
+1CA1 10E1 1CA1
+1CA2 10E2 1CA2
+1CA3 10E3 1CA3
+1CA4 10E4 1CA4
+1CA5 10E5 1CA5
+1CA6 10E6 1CA6
+1CA7 10E7 1CA7
+1CA8 10E8 1CA8
+1CA9 10E9 1CA9
+1CAA 10EA 1CAA
+1CAB 10EB 1CAB
+1CAC 10EC 1CAC
+1CAD 10ED 1CAD
+1CAE 10EE 1CAE
+1CAF 10EF 1CAF
+1CB0 10F0 1CB0
+1CB1 10F1 1CB1
+1CB2 10F2 1CB2
+1CB3 10F3 1CB3
+1CB4 10F4 1CB4
+1CB5 10F5 1CB5
+1CB6 10F6 1CB6
+1CB7 10F7 1CB7
+1CB8 10F8 1CB8
+1CB9 10F9 1CB9
+1CBA 10FA 1CBA
+1CBD 10FD 1CBD
+1CBE 10FE 1CBE
+1CBF 10FF 1CBF
+1D79 1D79 A77D
+1D7D 1D7D 2C63
+1D8E 1D8E A7C6
+1E00 1E01 1E00
+1E01 1E01 1E00
+1E02 1E03 1E02
+1E03 1E03 1E02
+1E04 1E05 1E04
+1E05 1E05 1E04
+1E06 1E07 1E06
+1E07 1E07 1E06
+1E08 1E09 1E08
+1E09 1E09 1E08
+1E0A 1E0B 1E0A
+1E0B 1E0B 1E0A
+1E0C 1E0D 1E0C
+1E0D 1E0D 1E0C
+1E0E 1E0F 1E0E
+1E0F 1E0F 1E0E
+1E10 1E11 1E10
+1E11 1E11 1E10
+1E12 1E13 1E12
+1E13 1E13 1E12
+1E14 1E15 1E14
+1E15 1E15 1E14
+1E16 1E17 1E16
+1E17 1E17 1E16
+1E18 1E19 1E18
+1E19 1E19 1E18
+1E1A 1E1B 1E1A
+1E1B 1E1B 1E1A
+1E1C 1E1D 1E1C
+1E1D 1E1D 1E1C
+1E1E 1E1F 1E1E
+1E1F 1E1F 1E1E
+1E20 1E21 1E20
+1E21 1E21 1E20
+1E22 1E23 1E22
+1E23 1E23 1E22
+1E24 1E25 1E24
+1E25 1E25 1E24
+1E26 1E27 1E26
+1E27 1E27 1E26
+1E28 1E29 1E28
+1E29 1E29 1E28
+1E2A 1E2B 1E2A
+1E2B 1E2B 1E2A
+1E2C 1E2D 1E2C
+1E2D 1E2D 1E2C
+1E2E 1E2F 1E2E
+1E2F 1E2F 1E2E
+1E30 1E31 1E30
+1E31 1E31 1E30
+1E32 1E33 1E32
+1E33 1E33 1E32
+1E34 1E35 1E34
+1E35 1E35 1E34
+1E36 1E37 1E36
+1E37 1E37 1E36
+1E38 1E39 1E38
+1E39 1E39 1E38
+1E3A 1E3B 1E3A
+1E3B 1E3B 1E3A
+1E3C 1E3D 1E3C
+1E3D 1E3D 1E3C
+1E3E 1E3F 1E3E
+1E3F 1E3F 1E3E
+1E40 1E41 1E40
+1E41 1E41 1E40
+1E42 1E43 1E42
+1E43 1E43 1E42
+1E44 1E45 1E44
+1E45 1E45 1E44
+1E46 1E47 1E46
+1E47 1E47 1E46
+1E48 1E49 1E48
+1E49 1E49 1E48
+1E4A 1E4B 1E4A
+1E4B 1E4B 1E4A
+1E4C 1E4D 1E4C
+1E4D 1E4D 1E4C
+1E4E 1E4F 1E4E
+1E4F 1E4F 1E4E
+1E50 1E51 1E50
+1E51 1E51 1E50
+1E52 1E53 1E52
+1E53 1E53 1E52
+1E54 1E55 1E54
+1E55 1E55 1E54
+1E56 1E57 1E56
+1E57 1E57 1E56
+1E58 1E59 1E58
+1E59 1E59 1E58
+1E5A 1E5B 1E5A
+1E5B 1E5B 1E5A
+1E5C 1E5D 1E5C
+1E5D 1E5D 1E5C
+1E5E 1E5F 1E5E
+1E5F 1E5F 1E5E
+1E60 1E61 1E60
+1E61 1E61 1E60
+1E62 1E63 1E62
+1E63 1E63 1E62
+1E64 1E65 1E64
+1E65 1E65 1E64
+1E66 1E67 1E66
+1E67 1E67 1E66
+1E68 1E69 1E68
+1E69 1E69 1E68
+1E6A 1E6B 1E6A
+1E6B 1E6B 1E6A
+1E6C 1E6D 1E6C
+1E6D 1E6D 1E6C
+1E6E 1E6F 1E6E
+1E6F 1E6F 1E6E
+1E70 1E71 1E70
+1E71 1E71 1E70
+1E72 1E73 1E72
+1E73 1E73 1E72
+1E74 1E75 1E74
+1E75 1E75 1E74
+1E76 1E77 1E76
+1E77 1E77 1E76
+1E78 1E79 1E78
+1E79 1E79 1E78
+1E7A 1E7B 1E7A
+1E7B 1E7B 1E7A
+1E7C 1E7D 1E7C
+1E7D 1E7D 1E7C
+1E7E 1E7F 1E7E
+1E7F 1E7F 1E7E
+1E80 1E81 1E80
+1E81 1E81 1E80
+1E82 1E83 1E82
+1E83 1E83 1E82
+1E84 1E85 1E84
+1E85 1E85 1E84
+1E86 1E87 1E86
+1E87 1E87 1E86
+1E88 1E89 1E88
+1E89 1E89 1E88
+1E8A 1E8B 1E8A
+1E8B 1E8B 1E8A
+1E8C 1E8D 1E8C
+1E8D 1E8D 1E8C
+1E8E 1E8F 1E8E
+1E8F 1E8F 1E8E
+1E90 1E91 1E90
+1E91 1E91 1E90
+1E92 1E93 1E92
+1E93 1E93 1E92
+1E94 1E95 1E94
+1E95 1E95 1E94
+1E9B 1E9B 1E60
+1E9E 00DF 1E9E
+1EA0 1EA1 1EA0
+1EA1 1EA1 1EA0
+1EA2 1EA3 1EA2
+1EA3 1EA3 1EA2
+1EA4 1EA5 1EA4
+1EA5 1EA5 1EA4
+1EA6 1EA7 1EA6
+1EA7 1EA7 1EA6
+1EA8 1EA9 1EA8
+1EA9 1EA9 1EA8
+1EAA 1EAB 1EAA
+1EAB 1EAB 1EAA
+1EAC 1EAD 1EAC
+1EAD 1EAD 1EAC
+1EAE 1EAF 1EAE
+1EAF 1EAF 1EAE
+1EB0 1EB1 1EB0
+1EB1 1EB1 1EB0
+1EB2 1EB3 1EB2
+1EB3 1EB3 1EB2
+1EB4 1EB5 1EB4
+1EB5 1EB5 1EB4
+1EB6 1EB7 1EB6
+1EB7 1EB7 1EB6
+1EB8 1EB9 1EB8
+1EB9 1EB9 1EB8
+1EBA 1EBB 1EBA
+1EBB 1EBB 1EBA
+1EBC 1EBD 1EBC
+1EBD 1EBD 1EBC
+1EBE 1EBF 1EBE
+1EBF 1EBF 1EBE
+1EC0 1EC1 1EC0
+1EC1 1EC1 1EC0
+1EC2 1EC3 1EC2
+1EC3 1EC3 1EC2
+1EC4 1EC5 1EC4
+1EC5 1EC5 1EC4
+1EC6 1EC7 1EC6
+1EC7 1EC7 1EC6
+1EC8 1EC9 1EC8
+1EC9 1EC9 1EC8
+1ECA 1ECB 1ECA
+1ECB 1ECB 1ECA
+1ECC 1ECD 1ECC
+1ECD 1ECD 1ECC
+1ECE 1ECF 1ECE
+1ECF 1ECF 1ECE
+1ED0 1ED1 1ED0
+1ED1 1ED1 1ED0
+1ED2 1ED3 1ED2
+1ED3 1ED3 1ED2
+1ED4 1ED5 1ED4
+1ED5 1ED5 1ED4
+1ED6 1ED7 1ED6
+1ED7 1ED7 1ED6
+1ED8 1ED9 1ED8
+1ED9 1ED9 1ED8
+1EDA 1EDB 1EDA
+1EDB 1EDB 1EDA
+1EDC 1EDD 1EDC
+1EDD 1EDD 1EDC
+1EDE 1EDF 1EDE
+1EDF 1EDF 1EDE
+1EE0 1EE1 1EE0
+1EE1 1EE1 1EE0
+1EE2 1EE3 1EE2
+1EE3 1EE3 1EE2
+1EE4 1EE5 1EE4
+1EE5 1EE5 1EE4
+1EE6 1EE7 1EE6
+1EE7 1EE7 1EE6
+1EE8 1EE9 1EE8
+1EE9 1EE9 1EE8
+1EEA 1EEB 1EEA
+1EEB 1EEB 1EEA
+1EEC 1EED 1EEC
+1EED 1EED 1EEC
+1EEE 1EEF 1EEE
+1EEF 1EEF 1EEE
+1EF0 1EF1 1EF0
+1EF1 1EF1 1EF0
+1EF2 1EF3 1EF2
+1EF3 1EF3 1EF2
+1EF4 1EF5 1EF4
+1EF5 1EF5 1EF4
+1EF6 1EF7 1EF6
+1EF7 1EF7 1EF6
+1EF8 1EF9 1EF8
+1EF9 1EF9 1EF8
+1EFA 1EFB 1EFA
+1EFB 1EFB 1EFA
+1EFC 1EFD 1EFC
+1EFD 1EFD 1EFC
+1EFE 1EFF 1EFE
+1EFF 1EFF 1EFE
+1F00 1F00 1F08
+1F01 1F01 1F09
+1F02 1F02 1F0A
+1F03 1F03 1F0B
+1F04 1F04 1F0C
+1F05 1F05 1F0D
+1F06 1F06 1F0E
+1F07 1F07 1F0F
+1F08 1F00 1F08
+1F09 1F01 1F09
+1F0A 1F02 1F0A
+1F0B 1F03 1F0B
+1F0C 1F04 1F0C
+1F0D 1F05 1F0D
+1F0E 1F06 1F0E
+1F0F 1F07 1F0F
+1F10 1F10 1F18
+1F11 1F11 1F19
+1F12 1F12 1F1A
+1F13 1F13 1F1B
+1F14 1F14 1F1C
+1F15 1F15 1F1D
+1F18 1F10 1F18
+1F19 1F11 1F19
+1F1A 1F12 1F1A
+1F1B 1F13 1F1B
+1F1C 1F14 1F1C
+1F1D 1F15 1F1D
+1F20 1F20 1F28
+1F21 1F21 1F29
+1F22 1F22 1F2A
+1F23 1F23 1F2B
+1F24 1F24 1F2C
+1F25 1F25 1F2D
+1F26 1F26 1F2E
+1F27 1F27 1F2F
+1F28 1F20 1F28
+1F29 1F21 1F29
+1F2A 1F22 1F2A
+1F2B 1F23 1F2B
+1F2C 1F24 1F2C
+1F2D 1F25 1F2D
+1F2E 1F26 1F2E
+1F2F 1F27 1F2F
+1F30 1F30 1F38
+1F31 1F31 1F39
+1F32 1F32 1F3A
+1F33 1F33 1F3B
+1F34 1F34 1F3C
+1F35 1F35 1F3D
+1F36 1F36 1F3E
+1F37 1F37 1F3F
+1F38 1F30 1F38
+1F39 1F31 1F39
+1F3A 1F32 1F3A
+1F3B 1F33 1F3B
+1F3C 1F34 1F3C
+1F3D 1F35 1F3D
+1F3E 1F36 1F3E
+1F3F 1F37 1F3F
+1F40 1F40 1F48
+1F41 1F41 1F49
+1F42 1F42 1F4A
+1F43 1F43 1F4B
+1F44 1F44 1F4C
+1F45 1F45 1F4D
+1F48 1F40 1F48
+1F49 1F41 1F49
+1F4A 1F42 1F4A
+1F4B 1F43 1F4B
+1F4C 1F44 1F4C
+1F4D 1F45 1F4D
+1F51 1F51 1F59
+1F53 1F53 1F5B
+1F55 1F55 1F5D
+1F57 1F57 1F5F
+1F59 1F51 1F59
+1F5B 1F53 1F5B
+1F5D 1F55 1F5D
+1F5F 1F57 1F5F
+1F60 1F60 1F68
+1F61 1F61 1F69
+1F62 1F62 1F6A
+1F63 1F63 1F6B
+1F64 1F64 1F6C
+1F65 1F65 1F6D
+1F66 1F66 1F6E
+1F67 1F67 1F6F
+1F68 1F60 1F68
+1F69 1F61 1F69
+1F6A 1F62 1F6A
+1F6B 1F63 1F6B
+1F6C 1F64 1F6C
+1F6D 1F65 1F6D
+1F6E 1F66 1F6E
+1F6F 1F67 1F6F
+1F70 1F70 1FBA
+1F71 1F71 1FBB
+1F72 1F72 1FC8
+1F73 1F73 1FC9
+1F74 1F74 1FCA
+1F75 1F75 1FCB
+1F76 1F76 1FDA
+1F77 1F77 1FDB
+1F78 1F78 1FF8
+1F79 1F79 1FF9
+1F7A 1F7A 1FEA
+1F7B 1F7B 1FEB
+1F7C 1F7C 1FFA
+1F7D 1F7D 1FFB
+1F80 1F80 1F88
+1F81 1F81 1F89
+1F82 1F82 1F8A
+1F83 1F83 1F8B
+1F84 1F84 1F8C
+1F85 1F85 1F8D
+1F86 1F86 1F8E
+1F87 1F87 1F8F
+1F88 1F80 1F88
+1F89 1F81 1F89
+1F8A 1F82 1F8A
+1F8B 1F83 1F8B
+1F8C 1F84 1F8C
+1F8D 1F85 1F8D
+1F8E 1F86 1F8E
+1F8F 1F87 1F8F
+1F90 1F90 1F98
+1F91 1F91 1F99
+1F92 1F92 1F9A
+1F93 1F93 1F9B
+1F94 1F94 1F9C
+1F95 1F95 1F9D
+1F96 1F96 1F9E
+1F97 1F97 1F9F
+1F98 1F90 1F98
+1F99 1F91 1F99
+1F9A 1F92 1F9A
+1F9B 1F93 1F9B
+1F9C 1F94 1F9C
+1F9D 1F95 1F9D
+1F9E 1F96 1F9E
+1F9F 1F97 1F9F
+1FA0 1FA0 1FA8
+1FA1 1FA1 1FA9
+1FA2 1FA2 1FAA
+1FA3 1FA3 1FAB
+1FA4 1FA4 1FAC
+1FA5 1FA5 1FAD
+1FA6 1FA6 1FAE
+1FA7 1FA7 1FAF
+1FA8 1FA0 1FA8
+1FA9 1FA1 1FA9
+1FAA 1FA2 1FAA
+1FAB 1FA3 1FAB
+1FAC 1FA4 1FAC
+1FAD 1FA5 1FAD
+1FAE 1FA6 1FAE
+1FAF 1FA7 1FAF
+1FB0 1FB0 1FB8
+1FB1 1FB1 1FB9
+1FB3 1FB3 1FBC
+1FB8 1FB0 1FB8
+1FB9 1FB1 1FB9
+1FBA 1F70 1FBA
+1FBB 1F71 1FBB
+1FBC 1FB3 1FBC
+1FBE 1FBE 0399
+1FC3 1FC3 1FCC
+1FC8 1F72 1FC8
+1FC9 1F73 1FC9
+1FCA 1F74 1FCA
+1FCB 1F75 1FCB
+1FCC 1FC3 1FCC
+1FD0 1FD0 1FD8
+1FD1 1FD1 1FD9
+1FD8 1FD0 1FD8
+1FD9 1FD1 1FD9
+1FDA 1F76 1FDA
+1FDB 1F77 1FDB
+1FE0 1FE0 1FE8
+1FE1 1FE1 1FE9
+1FE5 1FE5 1FEC
+1FE8 1FE0 1FE8
+1FE9 1FE1 1FE9
+1FEA 1F7A 1FEA
+1FEB 1F7B 1FEB
+1FEC 1FE5 1FEC
+1FF3 1FF3 1FFC
+1FF8 1F78 1FF8
+1FF9 1F79 1FF9
+1FFA 1F7C 1FFA
+1FFB 1F7D 1FFB
+1FFC 1FF3 1FFC
+2126 03C9 2126
+212A 006B 212A
+212B 00E5 212B
+2132 214E 2132
+214E 214E 2132
+2160 2170 2160
+2161 2171 2161
+2162 2172 2162
+2163 2173 2163
+2164 2174 2164
+2165 2175 2165
+2166 2176 2166
+2167 2177 2167
+2168 2178 2168
+2169 2179 2169
+216A 217A 216A
+216B 217B 216B
+216C 217C 216C
+216D 217D 216D
+216E 217E 216E
+216F 217F 216F
+2170 2170 2160
+2171 2171 2161
+2172 2172 2162
+2173 2173 2163
+2174 2174 2164
+2175 2175 2165
+2176 2176 2166
+2177 2177 2167
+2178 2178 2168
+2179 2179 2169
+217A 217A 216A
+217B 217B 216B
+217C 217C 216C
+217D 217D 216D
+217E 217E 216E
+217F 217F 216F
+2183 2184 2183
+2184 2184 2183
+24B6 24D0 24B6
+24B7 24D1 24B7
+24B8 24D2 24B8
+24B9 24D3 24B9
+24BA 24D4 24BA
+24BB 24D5 24BB
+24BC 24D6 24BC
+24BD 24D7 24BD
+24BE 24D8 24BE
+24BF 24D9 24BF
+24C0 24DA 24C0
+24C1 24DB 24C1
+24C2 24DC 24C2
+24C3 24DD 24C3
+24C4 24DE 24C4
+24C5 24DF 24C5
+24C6 24E0 24C6
+24C7 24E1 24C7
+24C8 24E2 24C8
+24C9 24E3 24C9
+24CA 24E4 24CA
+24CB 24E5 24CB
+24CC 24E6 24CC
+24CD 24E7 24CD
+24CE 24E8 24CE
+24CF 24E9 24CF
+24D0 24D0 24B6
+24D1 24D1 24B7
+24D2 24D2 24B8
+24D3 24D3 24B9
+24D4 24D4 24BA
+24D5 24D5 24BB
+24D6 24D6 24BC
+24D7 24D7 24BD
+24D8 24D8 24BE
+24D9 24D9 24BF
+24DA 24DA 24C0
+24DB 24DB 24C1
+24DC 24DC 24C2
+24DD 24DD 24C3
+24DE 24DE 24C4
+24DF 24DF 24C5
+24E0 24E0 24C6
+24E1 24E1 24C7
+24E2 24E2 24C8
+24E3 24E3 24C9
+24E4 24E4 24CA
+24E5 24E5 24CB
+24E6 24E6 24CC
+24E7 24E7 24CD
+24E8 24E8 24CE
+24E9 24E9 24CF
+2C00 2C30 2C00
+2C01 2C31 2C01
+2C02 2C32 2C02
+2C03 2C33 2C03
+2C04 2C34 2C04
+2C05 2C35 2C05
+2C06 2C36 2C06
+2C07 2C37 2C07
+2C08 2C38 2C08
+2C09 2C39 2C09
+2C0A 2C3A 2C0A
+2C0B 2C3B 2C0B
+2C0C 2C3C 2C0C
+2C0D 2C3D 2C0D
+2C0E 2C3E 2C0E
+2C0F 2C3F 2C0F
+2C10 2C40 2C10
+2C11 2C41 2C11
+2C12 2C42 2C12
+2C13 2C43 2C13
+2C14 2C44 2C14
+2C15 2C45 2C15
+2C16 2C46 2C16
+2C17 2C47 2C17
+2C18 2C48 2C18
+2C19 2C49 2C19
+2C1A 2C4A 2C1A
+2C1B 2C4B 2C1B
+2C1C 2C4C 2C1C
+2C1D 2C4D 2C1D
+2C1E 2C4E 2C1E
+2C1F 2C4F 2C1F
+2C20 2C50 2C20
+2C21 2C51 2C21
+2C22 2C52 2C22
+2C23 2C53 2C23
+2C24 2C54 2C24
+2C25 2C55 2C25
+2C26 2C56 2C26
+2C27 2C57 2C27
+2C28 2C58 2C28
+2C29 2C59 2C29
+2C2A 2C5A 2C2A
+2C2B 2C5B 2C2B
+2C2C 2C5C 2C2C
+2C2D 2C5D 2C2D
+2C2E 2C5E 2C2E
+2C2F 2C5F 2C2F
+2C30 2C30 2C00
+2C31 2C31 2C01
+2C32 2C32 2C02
+2C33 2C33 2C03
+2C34 2C34 2C04
+2C35 2C35 2C05
+2C36 2C36 2C06
+2C37 2C37 2C07
+2C38 2C38 2C08
+2C39 2C39 2C09
+2C3A 2C3A 2C0A
+2C3B 2C3B 2C0B
+2C3C 2C3C 2C0C
+2C3D 2C3D 2C0D
+2C3E 2C3E 2C0E
+2C3F 2C3F 2C0F
+2C40 2C40 2C10
+2C41 2C41 2C11
+2C42 2C42 2C12
+2C43 2C43 2C13
+2C44 2C44 2C14
+2C45 2C45 2C15
+2C46 2C46 2C16
+2C47 2C47 2C17
+2C48 2C48 2C18
+2C49 2C49 2C19
+2C4A 2C4A 2C1A
+2C4B 2C4B 2C1B
+2C4C 2C4C 2C1C
+2C4D 2C4D 2C1D
+2C4E 2C4E 2C1E
+2C4F 2C4F 2C1F
+2C50 2C50 2C20
+2C51 2C51 2C21
+2C52 2C52 2C22
+2C53 2C53 2C23
+2C54 2C54 2C24
+2C55 2C55 2C25
+2C56 2C56 2C26
+2C57 2C57 2C27
+2C58 2C58 2C28
+2C59 2C59 2C29
+2C5A 2C5A 2C2A
+2C5B 2C5B 2C2B
+2C5C 2C5C 2C2C
+2C5D 2C5D 2C2D
+2C5E 2C5E 2C2E
+2C5F 2C5F 2C2F
+2C60 2C61 2C60
+2C61 2C61 2C60
+2C62 026B 2C62
+2C63 1D7D 2C63
+2C64 027D 2C64
+2C65 2C65 023A
+2C66 2C66 023E
+2C67 2C68 2C67
+2C68 2C68 2C67
+2C69 2C6A 2C69
+2C6A 2C6A 2C69
+2C6B 2C6C 2C6B
+2C6C 2C6C 2C6B
+2C6D 0251 2C6D
+2C6E 0271 2C6E
+2C6F 0250 2C6F
+2C70 0252 2C70
+2C72 2C73 2C72
+2C73 2C73 2C72
+2C75 2C76 2C75
+2C76 2C76 2C75
+2C7E 023F 2C7E
+2C7F 0240 2C7F
+2C80 2C81 2C80
+2C81 2C81 2C80
+2C82 2C83 2C82
+2C83 2C83 2C82
+2C84 2C85 2C84
+2C85 2C85 2C84
+2C86 2C87 2C86
+2C87 2C87 2C86
+2C88 2C89 2C88
+2C89 2C89 2C88
+2C8A 2C8B 2C8A
+2C8B 2C8B 2C8A
+2C8C 2C8D 2C8C
+2C8D 2C8D 2C8C
+2C8E 2C8F 2C8E
+2C8F 2C8F 2C8E
+2C90 2C91 2C90
+2C91 2C91 2C90
+2C92 2C93 2C92
+2C93 2C93 2C92
+2C94 2C95 2C94
+2C95 2C95 2C94
+2C96 2C97 2C96
+2C97 2C97 2C96
+2C98 2C99 2C98
+2C99 2C99 2C98
+2C9A 2C9B 2C9A
+2C9B 2C9B 2C9A
+2C9C 2C9D 2C9C
+2C9D 2C9D 2C9C
+2C9E 2C9F 2C9E
+2C9F 2C9F 2C9E
+2CA0 2CA1 2CA0
+2CA1 2CA1 2CA0
+2CA2 2CA3 2CA2
+2CA3 2CA3 2CA2
+2CA4 2CA5 2CA4
+2CA5 2CA5 2CA4
+2CA6 2CA7 2CA6
+2CA7 2CA7 2CA6
+2CA8 2CA9 2CA8
+2CA9 2CA9 2CA8
+2CAA 2CAB 2CAA
+2CAB 2CAB 2CAA
+2CAC 2CAD 2CAC
+2CAD 2CAD 2CAC
+2CAE 2CAF 2CAE
+2CAF 2CAF 2CAE
+2CB0 2CB1 2CB0
+2CB1 2CB1 2CB0
+2CB2 2CB3 2CB2
+2CB3 2CB3 2CB2
+2CB4 2CB5 2CB4
+2CB5 2CB5 2CB4
+2CB6 2CB7 2CB6
+2CB7 2CB7 2CB6
+2CB8 2CB9 2CB8
+2CB9 2CB9 2CB8
+2CBA 2CBB 2CBA
+2CBB 2CBB 2CBA
+2CBC 2CBD 2CBC
+2CBD 2CBD 2CBC
+2CBE 2CBF 2CBE
+2CBF 2CBF 2CBE
+2CC0 2CC1 2CC0
+2CC1 2CC1 2CC0
+2CC2 2CC3 2CC2
+2CC3 2CC3 2CC2
+2CC4 2CC5 2CC4
+2CC5 2CC5 2CC4
+2CC6 2CC7 2CC6
+2CC7 2CC7 2CC6
+2CC8 2CC9 2CC8
+2CC9 2CC9 2CC8
+2CCA 2CCB 2CCA
+2CCB 2CCB 2CCA
+2CCC 2CCD 2CCC
+2CCD 2CCD 2CCC
+2CCE 2CCF 2CCE
+2CCF 2CCF 2CCE
+2CD0 2CD1 2CD0
+2CD1 2CD1 2CD0
+2CD2 2CD3 2CD2
+2CD3 2CD3 2CD2
+2CD4 2CD5 2CD4
+2CD5 2CD5 2CD4
+2CD6 2CD7 2CD6
+2CD7 2CD7 2CD6
+2CD8 2CD9 2CD8
+2CD9 2CD9 2CD8
+2CDA 2CDB 2CDA
+2CDB 2CDB 2CDA
+2CDC 2CDD 2CDC
+2CDD 2CDD 2CDC
+2CDE 2CDF 2CDE
+2CDF 2CDF 2CDE
+2CE0 2CE1 2CE0
+2CE1 2CE1 2CE0
+2CE2 2CE3 2CE2
+2CE3 2CE3 2CE2
+2CEB 2CEC 2CEB
+2CEC 2CEC 2CEB
+2CED 2CEE 2CED
+2CEE 2CEE 2CED
+2CF2 2CF3 2CF2
+2CF3 2CF3 2CF2
+2D00 2D00 10A0
+2D01 2D01 10A1
+2D02 2D02 10A2
+2D03 2D03 10A3
+2D04 2D04 10A4
+2D05 2D05 10A5
+2D06 2D06 10A6
+2D07 2D07 10A7
+2D08 2D08 10A8
+2D09 2D09 10A9
+2D0A 2D0A 10AA
+2D0B 2D0B 10AB
+2D0C 2D0C 10AC
+2D0D 2D0D 10AD
+2D0E 2D0E 10AE
+2D0F 2D0F 10AF
+2D10 2D10 10B0
+2D11 2D11 10B1
+2D12 2D12 10B2
+2D13 2D13 10B3
+2D14 2D14 10B4
+2D15 2D15 10B5
+2D16 2D16 10B6
+2D17 2D17 10B7
+2D18 2D18 10B8
+2D19 2D19 10B9
+2D1A 2D1A 10BA
+2D1B 2D1B 10BB
+2D1C 2D1C 10BC
+2D1D 2D1D 10BD
+2D1E 2D1E 10BE
+2D1F 2D1F 10BF
+2D20 2D20 10C0
+2D21 2D21 10C1
+2D22 2D22 10C2
+2D23 2D23 10C3
+2D24 2D24 10C4
+2D25 2D25 10C5
+2D27 2D27 10C7
+2D2D 2D2D 10CD
+A640 A641 A640
+A641 A641 A640
+A642 A643 A642
+A643 A643 A642
+A644 A645 A644
+A645 A645 A644
+A646 A647 A646
+A647 A647 A646
+A648 A649 A648
+A649 A649 A648
+A64A A64B A64A
+A64B A64B A64A
+A64C A64D A64C
+A64D A64D A64C
+A64E A64F A64E
+A64F A64F A64E
+A650 A651 A650
+A651 A651 A650
+A652 A653 A652
+A653 A653 A652
+A654 A655 A654
+A655 A655 A654
+A656 A657 A656
+A657 A657 A656
+A658 A659 A658
+A659 A659 A658
+A65A A65B A65A
+A65B A65B A65A
+A65C A65D A65C
+A65D A65D A65C
+A65E A65F A65E
+A65F A65F A65E
+A660 A661 A660
+A661 A661 A660
+A662 A663 A662
+A663 A663 A662
+A664 A665 A664
+A665 A665 A664
+A666 A667 A666
+A667 A667 A666
+A668 A669 A668
+A669 A669 A668
+A66A A66B A66A
+A66B A66B A66A
+A66C A66D A66C
+A66D A66D A66C
+A680 A681 A680
+A681 A681 A680
+A682 A683 A682
+A683 A683 A682
+A684 A685 A684
+A685 A685 A684
+A686 A687 A686
+A687 A687 A686
+A688 A689 A688
+A689 A689 A688
+A68A A68B A68A
+A68B A68B A68A
+A68C A68D A68C
+A68D A68D A68C
+A68E A68F A68E
+A68F A68F A68E
+A690 A691 A690
+A691 A691 A690
+A692 A693 A692
+A693 A693 A692
+A694 A695 A694
+A695 A695 A694
+A696 A697 A696
+A697 A697 A696
+A698 A699 A698
+A699 A699 A698
+A69A A69B A69A
+A69B A69B A69A
+A722 A723 A722
+A723 A723 A722
+A724 A725 A724
+A725 A725 A724
+A726 A727 A726
+A727 A727 A726
+A728 A729 A728
+A729 A729 A728
+A72A A72B A72A
+A72B A72B A72A
+A72C A72D A72C
+A72D A72D A72C
+A72E A72F A72E
+A72F A72F A72E
+A732 A733 A732
+A733 A733 A732
+A734 A735 A734
+A735 A735 A734
+A736 A737 A736
+A737 A737 A736
+A738 A739 A738
+A739 A739 A738
+A73A A73B A73A
+A73B A73B A73A
+A73C A73D A73C
+A73D A73D A73C
+A73E A73F A73E
+A73F A73F A73E
+A740 A741 A740
+A741 A741 A740
+A742 A743 A742
+A743 A743 A742
+A744 A745 A744
+A745 A745 A744
+A746 A747 A746
+A747 A747 A746
+A748 A749 A748
+A749 A749 A748
+A74A A74B A74A
+A74B A74B A74A
+A74C A74D A74C
+A74D A74D A74C
+A74E A74F A74E
+A74F A74F A74E
+A750 A751 A750
+A751 A751 A750
+A752 A753 A752
+A753 A753 A752
+A754 A755 A754
+A755 A755 A754
+A756 A757 A756
+A757 A757 A756
+A758 A759 A758
+A759 A759 A758
+A75A A75B A75A
+A75B A75B A75A
+A75C A75D A75C
+A75D A75D A75C
+A75E A75F A75E
+A75F A75F A75E
+A760 A761 A760
+A761 A761 A760
+A762 A763 A762
+A763 A763 A762
+A764 A765 A764
+A765 A765 A764
+A766 A767 A766
+A767 A767 A766
+A768 A769 A768
+A769 A769 A768
+A76A A76B A76A
+A76B A76B A76A
+A76C A76D A76C
+A76D A76D A76C
+A76E A76F A76E
+A76F A76F A76E
+A779 A77A A779
+A77A A77A A779
+A77B A77C A77B
+A77C A77C A77B
+A77D 1D79 A77D
+A77E A77F A77E
+A77F A77F A77E
+A780 A781 A780
+A781 A781 A780
+A782 A783 A782
+A783 A783 A782
+A784 A785 A784
+A785 A785 A784
+A786 A787 A786
+A787 A787 A786
+A78B A78C A78B
+A78C A78C A78B
+A78D 0265 A78D
+A790 A791 A790
+A791 A791 A790
+A792 A793 A792
+A793 A793 A792
+A794 A794 A7C4
+A796 A797 A796
+A797 A797 A796
+A798 A799 A798
+A799 A799 A798
+A79A A79B A79A
+A79B A79B A79A
+A79C A79D A79C
+A79D A79D A79C
+A79E A79F A79E
+A79F A79F A79E
+A7A0 A7A1 A7A0
+A7A1 A7A1 A7A0
+A7A2 A7A3 A7A2
+A7A3 A7A3 A7A2
+A7A4 A7A5 A7A4
+A7A5 A7A5 A7A4
+A7A6 A7A7 A7A6
+A7A7 A7A7 A7A6
+A7A8 A7A9 A7A8
+A7A9 A7A9 A7A8
+A7AA 0266 A7AA
+A7AB 025C A7AB
+A7AC 0261 A7AC
+A7AD 026C A7AD
+A7AE 026A A7AE
+A7B0 029E A7B0
+A7B1 0287 A7B1
+A7B2 029D A7B2
+A7B3 AB53 A7B3
+A7B4 A7B5 A7B4
+A7B5 A7B5 A7B4
+A7B6 A7B7 A7B6
+A7B7 A7B7 A7B6
+A7B8 A7B9 A7B8
+A7B9 A7B9 A7B8
+A7BA A7BB A7BA
+A7BB A7BB A7BA
+A7BC A7BD A7BC
+A7BD A7BD A7BC
+A7BE A7BF A7BE
+A7BF A7BF A7BE
+A7C0 A7C1 A7C0
+A7C1 A7C1 A7C0
+A7C2 A7C3 A7C2
+A7C3 A7C3 A7C2
+A7C4 A794 A7C4
+A7C5 0282 A7C5
+A7C6 1D8E A7C6
+A7C7 A7C8 A7C7
+A7C8 A7C8 A7C7
+A7C9 A7CA A7C9
+A7CA A7CA A7C9
+A7D0 A7D1 A7D0
+A7D1 A7D1 A7D0
+A7D6 A7D7 A7D6
+A7D7 A7D7 A7D6
+A7D8 A7D9 A7D8
+A7D9 A7D9 A7D8
+A7F5 A7F6 A7F5
+A7F6 A7F6 A7F5
+AB53 AB53 A7B3
+AB70 AB70 13A0
+AB71 AB71 13A1
+AB72 AB72 13A2
+AB73 AB73 13A3
+AB74 AB74 13A4
+AB75 AB75 13A5
+AB76 AB76 13A6
+AB77 AB77 13A7
+AB78 AB78 13A8
+AB79 AB79 13A9
+AB7A AB7A 13AA
+AB7B AB7B 13AB
+AB7C AB7C 13AC
+AB7D AB7D 13AD
+AB7E AB7E 13AE
+AB7F AB7F 13AF
+AB80 AB80 13B0
+AB81 AB81 13B1
+AB82 AB82 13B2
+AB83 AB83 13B3
+AB84 AB84 13B4
+AB85 AB85 13B5
+AB86 AB86 13B6
+AB87 AB87 13B7
+AB88 AB88 13B8
+AB89 AB89 13B9
+AB8A AB8A 13BA
+AB8B AB8B 13BB
+AB8C AB8C 13BC
+AB8D AB8D 13BD
+AB8E AB8E 13BE
+AB8F AB8F 13BF
+AB90 AB90 13C0
+AB91 AB91 13C1
+AB92 AB92 13C2
+AB93 AB93 13C3
+AB94 AB94 13C4
+AB95 AB95 13C5
+AB96 AB96 13C6
+AB97 AB97 13C7
+AB98 AB98 13C8
+AB99 AB99 13C9
+AB9A AB9A 13CA
+AB9B AB9B 13CB
+AB9C AB9C 13CC
+AB9D AB9D 13CD
+AB9E AB9E 13CE
+AB9F AB9F 13CF
+ABA0 ABA0 13D0
+ABA1 ABA1 13D1
+ABA2 ABA2 13D2
+ABA3 ABA3 13D3
+ABA4 ABA4 13D4
+ABA5 ABA5 13D5
+ABA6 ABA6 13D6
+ABA7 ABA7 13D7
+ABA8 ABA8 13D8
+ABA9 ABA9 13D9
+ABAA ABAA 13DA
+ABAB ABAB 13DB
+ABAC ABAC 13DC
+ABAD ABAD 13DD
+ABAE ABAE 13DE
+ABAF ABAF 13DF
+ABB0 ABB0 13E0
+ABB1 ABB1 13E1
+ABB2 ABB2 13E2
+ABB3 ABB3 13E3
+ABB4 ABB4 13E4
+ABB5 ABB5 13E5
+ABB6 ABB6 13E6
+ABB7 ABB7 13E7
+ABB8 ABB8 13E8
+ABB9 ABB9 13E9
+ABBA ABBA 13EA
+ABBB ABBB 13EB
+ABBC ABBC 13EC
+ABBD ABBD 13ED
+ABBE ABBE 13EE
+ABBF ABBF 13EF
+FF21 FF41 FF21
+FF22 FF42 FF22
+FF23 FF43 FF23
+FF24 FF44 FF24
+FF25 FF45 FF25
+FF26 FF46 FF26
+FF27 FF47 FF27
+FF28 FF48 FF28
+FF29 FF49 FF29
+FF2A FF4A FF2A
+FF2B FF4B FF2B
+FF2C FF4C FF2C
+FF2D FF4D FF2D
+FF2E FF4E FF2E
+FF2F FF4F FF2F
+FF30 FF50 FF30
+FF31 FF51 FF31
+FF32 FF52 FF32
+FF33 FF53 FF33
+FF34 FF54 FF34
+FF35 FF55 FF35
+FF36 FF56 FF36
+FF37 FF57 FF37
+FF38 FF58 FF38
+FF39 FF59 FF39
+FF3A FF5A FF3A
+FF41 FF41 FF21
+FF42 FF42 FF22
+FF43 FF43 FF23
+FF44 FF44 FF24
+FF45 FF45 FF25
+FF46 FF46 FF26
+FF47 FF47 FF27
+FF48 FF48 FF28
+FF49 FF49 FF29
+FF4A FF4A FF2A
+FF4B FF4B FF2B
+FF4C FF4C FF2C
+FF4D FF4D FF2D
+FF4E FF4E FF2E
+FF4F FF4F FF2F
+FF50 FF50 FF30
+FF51 FF51 FF31
+FF52 FF52 FF32
+FF53 FF53 FF33
+FF54 FF54 FF34
+FF55 FF55 FF35
+FF56 FF56 FF36
+FF57 FF57 FF37
+FF58 FF58 FF38
+FF59 FF59 FF39
+FF5A FF5A FF3A
+DROP VIEW v_bmp;
+EXECUTE IMMEDIATE SFORMAT('
+CREATE VIEW v_supplementary AS
+SELECT
+ seq AS codepoint,
+ LPAD(HEX(seq),8,''0'') AS codepoint_hex8,
+ CONVERT(CHAR(seq USING utf32) USING {}) COLLATE {} AS c
+FROM
+ seq_65536_to_1114111', @@character_set_connection, @@collation_connection);
+SELECT COLLATION(c) FROM v_supplementary LIMIT 1;
+COLLATION(c)
+utf8mb4_uca1400_ai_ci
+SELECT
+codepoint_hex8,
+HEX(CAST(LOWER(c) AS CHAR CHARACTER SET utf32)),
+HEX(CAST(UPPER(c) AS CHAR CHARACTER SET utf32))
+FROM v_supplementary
+WHERE BINARY(c)<>BINARY(LOWER(c)) OR BINARY(c)<>BINARY(UPPER(c));
+codepoint_hex8 HEX(CAST(LOWER(c) AS CHAR CHARACTER SET utf32)) HEX(CAST(UPPER(c) AS CHAR CHARACTER SET utf32))
+00010400 00010428 00010400
+00010401 00010429 00010401
+00010402 0001042A 00010402
+00010403 0001042B 00010403
+00010404 0001042C 00010404
+00010405 0001042D 00010405
+00010406 0001042E 00010406
+00010407 0001042F 00010407
+00010408 00010430 00010408
+00010409 00010431 00010409
+0001040A 00010432 0001040A
+0001040B 00010433 0001040B
+0001040C 00010434 0001040C
+0001040D 00010435 0001040D
+0001040E 00010436 0001040E
+0001040F 00010437 0001040F
+00010410 00010438 00010410
+00010411 00010439 00010411
+00010412 0001043A 00010412
+00010413 0001043B 00010413
+00010414 0001043C 00010414
+00010415 0001043D 00010415
+00010416 0001043E 00010416
+00010417 0001043F 00010417
+00010418 00010440 00010418
+00010419 00010441 00010419
+0001041A 00010442 0001041A
+0001041B 00010443 0001041B
+0001041C 00010444 0001041C
+0001041D 00010445 0001041D
+0001041E 00010446 0001041E
+0001041F 00010447 0001041F
+00010420 00010448 00010420
+00010421 00010449 00010421
+00010422 0001044A 00010422
+00010423 0001044B 00010423
+00010424 0001044C 00010424
+00010425 0001044D 00010425
+00010426 0001044E 00010426
+00010427 0001044F 00010427
+00010428 00010428 00010400
+00010429 00010429 00010401
+0001042A 0001042A 00010402
+0001042B 0001042B 00010403
+0001042C 0001042C 00010404
+0001042D 0001042D 00010405
+0001042E 0001042E 00010406
+0001042F 0001042F 00010407
+00010430 00010430 00010408
+00010431 00010431 00010409
+00010432 00010432 0001040A
+00010433 00010433 0001040B
+00010434 00010434 0001040C
+00010435 00010435 0001040D
+00010436 00010436 0001040E
+00010437 00010437 0001040F
+00010438 00010438 00010410
+00010439 00010439 00010411
+0001043A 0001043A 00010412
+0001043B 0001043B 00010413
+0001043C 0001043C 00010414
+0001043D 0001043D 00010415
+0001043E 0001043E 00010416
+0001043F 0001043F 00010417
+00010440 00010440 00010418
+00010441 00010441 00010419
+00010442 00010442 0001041A
+00010443 00010443 0001041B
+00010444 00010444 0001041C
+00010445 00010445 0001041D
+00010446 00010446 0001041E
+00010447 00010447 0001041F
+00010448 00010448 00010420
+00010449 00010449 00010421
+0001044A 0001044A 00010422
+0001044B 0001044B 00010423
+0001044C 0001044C 00010424
+0001044D 0001044D 00010425
+0001044E 0001044E 00010426
+0001044F 0001044F 00010427
+000104B0 000104D8 000104B0
+000104B1 000104D9 000104B1
+000104B2 000104DA 000104B2
+000104B3 000104DB 000104B3
+000104B4 000104DC 000104B4
+000104B5 000104DD 000104B5
+000104B6 000104DE 000104B6
+000104B7 000104DF 000104B7
+000104B8 000104E0 000104B8
+000104B9 000104E1 000104B9
+000104BA 000104E2 000104BA
+000104BB 000104E3 000104BB
+000104BC 000104E4 000104BC
+000104BD 000104E5 000104BD
+000104BE 000104E6 000104BE
+000104BF 000104E7 000104BF
+000104C0 000104E8 000104C0
+000104C1 000104E9 000104C1
+000104C2 000104EA 000104C2
+000104C3 000104EB 000104C3
+000104C4 000104EC 000104C4
+000104C5 000104ED 000104C5
+000104C6 000104EE 000104C6
+000104C7 000104EF 000104C7
+000104C8 000104F0 000104C8
+000104C9 000104F1 000104C9
+000104CA 000104F2 000104CA
+000104CB 000104F3 000104CB
+000104CC 000104F4 000104CC
+000104CD 000104F5 000104CD
+000104CE 000104F6 000104CE
+000104CF 000104F7 000104CF
+000104D0 000104F8 000104D0
+000104D1 000104F9 000104D1
+000104D2 000104FA 000104D2
+000104D3 000104FB 000104D3
+000104D8 000104D8 000104B0
+000104D9 000104D9 000104B1
+000104DA 000104DA 000104B2
+000104DB 000104DB 000104B3
+000104DC 000104DC 000104B4
+000104DD 000104DD 000104B5
+000104DE 000104DE 000104B6
+000104DF 000104DF 000104B7
+000104E0 000104E0 000104B8
+000104E1 000104E1 000104B9
+000104E2 000104E2 000104BA
+000104E3 000104E3 000104BB
+000104E4 000104E4 000104BC
+000104E5 000104E5 000104BD
+000104E6 000104E6 000104BE
+000104E7 000104E7 000104BF
+000104E8 000104E8 000104C0
+000104E9 000104E9 000104C1
+000104EA 000104EA 000104C2
+000104EB 000104EB 000104C3
+000104EC 000104EC 000104C4
+000104ED 000104ED 000104C5
+000104EE 000104EE 000104C6
+000104EF 000104EF 000104C7
+000104F0 000104F0 000104C8
+000104F1 000104F1 000104C9
+000104F2 000104F2 000104CA
+000104F3 000104F3 000104CB
+000104F4 000104F4 000104CC
+000104F5 000104F5 000104CD
+000104F6 000104F6 000104CE
+000104F7 000104F7 000104CF
+000104F8 000104F8 000104D0
+000104F9 000104F9 000104D1
+000104FA 000104FA 000104D2
+000104FB 000104FB 000104D3
+00010570 00010597 00010570
+00010571 00010598 00010571
+00010572 00010599 00010572
+00010573 0001059A 00010573
+00010574 0001059B 00010574
+00010575 0001059C 00010575
+00010576 0001059D 00010576
+00010577 0001059E 00010577
+00010578 0001059F 00010578
+00010579 000105A0 00010579
+0001057A 000105A1 0001057A
+0001057C 000105A3 0001057C
+0001057D 000105A4 0001057D
+0001057E 000105A5 0001057E
+0001057F 000105A6 0001057F
+00010580 000105A7 00010580
+00010581 000105A8 00010581
+00010582 000105A9 00010582
+00010583 000105AA 00010583
+00010584 000105AB 00010584
+00010585 000105AC 00010585
+00010586 000105AD 00010586
+00010587 000105AE 00010587
+00010588 000105AF 00010588
+00010589 000105B0 00010589
+0001058A 000105B1 0001058A
+0001058C 000105B3 0001058C
+0001058D 000105B4 0001058D
+0001058E 000105B5 0001058E
+0001058F 000105B6 0001058F
+00010590 000105B7 00010590
+00010591 000105B8 00010591
+00010592 000105B9 00010592
+00010594 000105BB 00010594
+00010595 000105BC 00010595
+00010597 00010597 00010570
+00010598 00010598 00010571
+00010599 00010599 00010572
+0001059A 0001059A 00010573
+0001059B 0001059B 00010574
+0001059C 0001059C 00010575
+0001059D 0001059D 00010576
+0001059E 0001059E 00010577
+0001059F 0001059F 00010578
+000105A0 000105A0 00010579
+000105A1 000105A1 0001057A
+000105A3 000105A3 0001057C
+000105A4 000105A4 0001057D
+000105A5 000105A5 0001057E
+000105A6 000105A6 0001057F
+000105A7 000105A7 00010580
+000105A8 000105A8 00010581
+000105A9 000105A9 00010582
+000105AA 000105AA 00010583
+000105AB 000105AB 00010584
+000105AC 000105AC 00010585
+000105AD 000105AD 00010586
+000105AE 000105AE 00010587
+000105AF 000105AF 00010588
+000105B0 000105B0 00010589
+000105B1 000105B1 0001058A
+000105B3 000105B3 0001058C
+000105B4 000105B4 0001058D
+000105B5 000105B5 0001058E
+000105B6 000105B6 0001058F
+000105B7 000105B7 00010590
+000105B8 000105B8 00010591
+000105B9 000105B9 00010592
+000105BB 000105BB 00010594
+000105BC 000105BC 00010595
+00010C80 00010CC0 00010C80
+00010C81 00010CC1 00010C81
+00010C82 00010CC2 00010C82
+00010C83 00010CC3 00010C83
+00010C84 00010CC4 00010C84
+00010C85 00010CC5 00010C85
+00010C86 00010CC6 00010C86
+00010C87 00010CC7 00010C87
+00010C88 00010CC8 00010C88
+00010C89 00010CC9 00010C89
+00010C8A 00010CCA 00010C8A
+00010C8B 00010CCB 00010C8B
+00010C8C 00010CCC 00010C8C
+00010C8D 00010CCD 00010C8D
+00010C8E 00010CCE 00010C8E
+00010C8F 00010CCF 00010C8F
+00010C90 00010CD0 00010C90
+00010C91 00010CD1 00010C91
+00010C92 00010CD2 00010C92
+00010C93 00010CD3 00010C93
+00010C94 00010CD4 00010C94
+00010C95 00010CD5 00010C95
+00010C96 00010CD6 00010C96
+00010C97 00010CD7 00010C97
+00010C98 00010CD8 00010C98
+00010C99 00010CD9 00010C99
+00010C9A 00010CDA 00010C9A
+00010C9B 00010CDB 00010C9B
+00010C9C 00010CDC 00010C9C
+00010C9D 00010CDD 00010C9D
+00010C9E 00010CDE 00010C9E
+00010C9F 00010CDF 00010C9F
+00010CA0 00010CE0 00010CA0
+00010CA1 00010CE1 00010CA1
+00010CA2 00010CE2 00010CA2
+00010CA3 00010CE3 00010CA3
+00010CA4 00010CE4 00010CA4
+00010CA5 00010CE5 00010CA5
+00010CA6 00010CE6 00010CA6
+00010CA7 00010CE7 00010CA7
+00010CA8 00010CE8 00010CA8
+00010CA9 00010CE9 00010CA9
+00010CAA 00010CEA 00010CAA
+00010CAB 00010CEB 00010CAB
+00010CAC 00010CEC 00010CAC
+00010CAD 00010CED 00010CAD
+00010CAE 00010CEE 00010CAE
+00010CAF 00010CEF 00010CAF
+00010CB0 00010CF0 00010CB0
+00010CB1 00010CF1 00010CB1
+00010CB2 00010CF2 00010CB2
+00010CC0 00010CC0 00010C80
+00010CC1 00010CC1 00010C81
+00010CC2 00010CC2 00010C82
+00010CC3 00010CC3 00010C83
+00010CC4 00010CC4 00010C84
+00010CC5 00010CC5 00010C85
+00010CC6 00010CC6 00010C86
+00010CC7 00010CC7 00010C87
+00010CC8 00010CC8 00010C88
+00010CC9 00010CC9 00010C89
+00010CCA 00010CCA 00010C8A
+00010CCB 00010CCB 00010C8B
+00010CCC 00010CCC 00010C8C
+00010CCD 00010CCD 00010C8D
+00010CCE 00010CCE 00010C8E
+00010CCF 00010CCF 00010C8F
+00010CD0 00010CD0 00010C90
+00010CD1 00010CD1 00010C91
+00010CD2 00010CD2 00010C92
+00010CD3 00010CD3 00010C93
+00010CD4 00010CD4 00010C94
+00010CD5 00010CD5 00010C95
+00010CD6 00010CD6 00010C96
+00010CD7 00010CD7 00010C97
+00010CD8 00010CD8 00010C98
+00010CD9 00010CD9 00010C99
+00010CDA 00010CDA 00010C9A
+00010CDB 00010CDB 00010C9B
+00010CDC 00010CDC 00010C9C
+00010CDD 00010CDD 00010C9D
+00010CDE 00010CDE 00010C9E
+00010CDF 00010CDF 00010C9F
+00010CE0 00010CE0 00010CA0
+00010CE1 00010CE1 00010CA1
+00010CE2 00010CE2 00010CA2
+00010CE3 00010CE3 00010CA3
+00010CE4 00010CE4 00010CA4
+00010CE5 00010CE5 00010CA5
+00010CE6 00010CE6 00010CA6
+00010CE7 00010CE7 00010CA7
+00010CE8 00010CE8 00010CA8
+00010CE9 00010CE9 00010CA9
+00010CEA 00010CEA 00010CAA
+00010CEB 00010CEB 00010CAB
+00010CEC 00010CEC 00010CAC
+00010CED 00010CED 00010CAD
+00010CEE 00010CEE 00010CAE
+00010CEF 00010CEF 00010CAF
+00010CF0 00010CF0 00010CB0
+00010CF1 00010CF1 00010CB1
+00010CF2 00010CF2 00010CB2
+000118A0 000118C0 000118A0
+000118A1 000118C1 000118A1
+000118A2 000118C2 000118A2
+000118A3 000118C3 000118A3
+000118A4 000118C4 000118A4
+000118A5 000118C5 000118A5
+000118A6 000118C6 000118A6
+000118A7 000118C7 000118A7
+000118A8 000118C8 000118A8
+000118A9 000118C9 000118A9
+000118AA 000118CA 000118AA
+000118AB 000118CB 000118AB
+000118AC 000118CC 000118AC
+000118AD 000118CD 000118AD
+000118AE 000118CE 000118AE
+000118AF 000118CF 000118AF
+000118B0 000118D0 000118B0
+000118B1 000118D1 000118B1
+000118B2 000118D2 000118B2
+000118B3 000118D3 000118B3
+000118B4 000118D4 000118B4
+000118B5 000118D5 000118B5
+000118B6 000118D6 000118B6
+000118B7 000118D7 000118B7
+000118B8 000118D8 000118B8
+000118B9 000118D9 000118B9
+000118BA 000118DA 000118BA
+000118BB 000118DB 000118BB
+000118BC 000118DC 000118BC
+000118BD 000118DD 000118BD
+000118BE 000118DE 000118BE
+000118BF 000118DF 000118BF
+000118C0 000118C0 000118A0
+000118C1 000118C1 000118A1
+000118C2 000118C2 000118A2
+000118C3 000118C3 000118A3
+000118C4 000118C4 000118A4
+000118C5 000118C5 000118A5
+000118C6 000118C6 000118A6
+000118C7 000118C7 000118A7
+000118C8 000118C8 000118A8
+000118C9 000118C9 000118A9
+000118CA 000118CA 000118AA
+000118CB 000118CB 000118AB
+000118CC 000118CC 000118AC
+000118CD 000118CD 000118AD
+000118CE 000118CE 000118AE
+000118CF 000118CF 000118AF
+000118D0 000118D0 000118B0
+000118D1 000118D1 000118B1
+000118D2 000118D2 000118B2
+000118D3 000118D3 000118B3
+000118D4 000118D4 000118B4
+000118D5 000118D5 000118B5
+000118D6 000118D6 000118B6
+000118D7 000118D7 000118B7
+000118D8 000118D8 000118B8
+000118D9 000118D9 000118B9
+000118DA 000118DA 000118BA
+000118DB 000118DB 000118BB
+000118DC 000118DC 000118BC
+000118DD 000118DD 000118BD
+000118DE 000118DE 000118BE
+000118DF 000118DF 000118BF
+00016E40 00016E60 00016E40
+00016E41 00016E61 00016E41
+00016E42 00016E62 00016E42
+00016E43 00016E63 00016E43
+00016E44 00016E64 00016E44
+00016E45 00016E65 00016E45
+00016E46 00016E66 00016E46
+00016E47 00016E67 00016E47
+00016E48 00016E68 00016E48
+00016E49 00016E69 00016E49
+00016E4A 00016E6A 00016E4A
+00016E4B 00016E6B 00016E4B
+00016E4C 00016E6C 00016E4C
+00016E4D 00016E6D 00016E4D
+00016E4E 00016E6E 00016E4E
+00016E4F 00016E6F 00016E4F
+00016E50 00016E70 00016E50
+00016E51 00016E71 00016E51
+00016E52 00016E72 00016E52
+00016E53 00016E73 00016E53
+00016E54 00016E74 00016E54
+00016E55 00016E75 00016E55
+00016E56 00016E76 00016E56
+00016E57 00016E77 00016E57
+00016E58 00016E78 00016E58
+00016E59 00016E79 00016E59
+00016E5A 00016E7A 00016E5A
+00016E5B 00016E7B 00016E5B
+00016E5C 00016E7C 00016E5C
+00016E5D 00016E7D 00016E5D
+00016E5E 00016E7E 00016E5E
+00016E5F 00016E7F 00016E5F
+00016E60 00016E60 00016E40
+00016E61 00016E61 00016E41
+00016E62 00016E62 00016E42
+00016E63 00016E63 00016E43
+00016E64 00016E64 00016E44
+00016E65 00016E65 00016E45
+00016E66 00016E66 00016E46
+00016E67 00016E67 00016E47
+00016E68 00016E68 00016E48
+00016E69 00016E69 00016E49
+00016E6A 00016E6A 00016E4A
+00016E6B 00016E6B 00016E4B
+00016E6C 00016E6C 00016E4C
+00016E6D 00016E6D 00016E4D
+00016E6E 00016E6E 00016E4E
+00016E6F 00016E6F 00016E4F
+00016E70 00016E70 00016E50
+00016E71 00016E71 00016E51
+00016E72 00016E72 00016E52
+00016E73 00016E73 00016E53
+00016E74 00016E74 00016E54
+00016E75 00016E75 00016E55
+00016E76 00016E76 00016E56
+00016E77 00016E77 00016E57
+00016E78 00016E78 00016E58
+00016E79 00016E79 00016E59
+00016E7A 00016E7A 00016E5A
+00016E7B 00016E7B 00016E5B
+00016E7C 00016E7C 00016E5C
+00016E7D 00016E7D 00016E5D
+00016E7E 00016E7E 00016E5E
+00016E7F 00016E7F 00016E5F
+0001E900 0001E922 0001E900
+0001E901 0001E923 0001E901
+0001E902 0001E924 0001E902
+0001E903 0001E925 0001E903
+0001E904 0001E926 0001E904
+0001E905 0001E927 0001E905
+0001E906 0001E928 0001E906
+0001E907 0001E929 0001E907
+0001E908 0001E92A 0001E908
+0001E909 0001E92B 0001E909
+0001E90A 0001E92C 0001E90A
+0001E90B 0001E92D 0001E90B
+0001E90C 0001E92E 0001E90C
+0001E90D 0001E92F 0001E90D
+0001E90E 0001E930 0001E90E
+0001E90F 0001E931 0001E90F
+0001E910 0001E932 0001E910
+0001E911 0001E933 0001E911
+0001E912 0001E934 0001E912
+0001E913 0001E935 0001E913
+0001E914 0001E936 0001E914
+0001E915 0001E937 0001E915
+0001E916 0001E938 0001E916
+0001E917 0001E939 0001E917
+0001E918 0001E93A 0001E918
+0001E919 0001E93B 0001E919
+0001E91A 0001E93C 0001E91A
+0001E91B 0001E93D 0001E91B
+0001E91C 0001E93E 0001E91C
+0001E91D 0001E93F 0001E91D
+0001E91E 0001E940 0001E91E
+0001E91F 0001E941 0001E91F
+0001E920 0001E942 0001E920
+0001E921 0001E943 0001E921
+0001E922 0001E922 0001E900
+0001E923 0001E923 0001E901
+0001E924 0001E924 0001E902
+0001E925 0001E925 0001E903
+0001E926 0001E926 0001E904
+0001E927 0001E927 0001E905
+0001E928 0001E928 0001E906
+0001E929 0001E929 0001E907
+0001E92A 0001E92A 0001E908
+0001E92B 0001E92B 0001E909
+0001E92C 0001E92C 0001E90A
+0001E92D 0001E92D 0001E90B
+0001E92E 0001E92E 0001E90C
+0001E92F 0001E92F 0001E90D
+0001E930 0001E930 0001E90E
+0001E931 0001E931 0001E90F
+0001E932 0001E932 0001E910
+0001E933 0001E933 0001E911
+0001E934 0001E934 0001E912
+0001E935 0001E935 0001E913
+0001E936 0001E936 0001E914
+0001E937 0001E937 0001E915
+0001E938 0001E938 0001E916
+0001E939 0001E939 0001E917
+0001E93A 0001E93A 0001E918
+0001E93B 0001E93B 0001E919
+0001E93C 0001E93C 0001E91A
+0001E93D 0001E93D 0001E91B
+0001E93E 0001E93E 0001E91C
+0001E93F 0001E93F 0001E91D
+0001E940 0001E940 0001E91E
+0001E941 0001E941 0001E91F
+0001E942 0001E942 0001E920
+0001E943 0001E943 0001E921
+DROP VIEW v_supplementary;
+#
+# End of 10.10 tests
+#
diff --git a/mysql-test/main/ctype_utf8mb4_uca1400_ai_ci_casefold.test b/mysql-test/main/ctype_utf8mb4_uca1400_ai_ci_casefold.test
new file mode 100644
index 00000000000..288f86155e2
--- /dev/null
+++ b/mysql-test/main/ctype_utf8mb4_uca1400_ai_ci_casefold.test
@@ -0,0 +1,15 @@
+--echo #
+--echo # Start of 10.10 tests
+--echo #
+
+--echo #
+--echo # MDEV-30577 Case folding for uca1400 collations is not up to date
+--echo #
+
+SET NAMES utf8mb4 COLLATE utf8mb4_uca1400_ai_ci;
+--source include/ctype_unicode_casefold_bmp.inc
+--source include/ctype_unicode_casefold_supplementary.inc
+
+--echo #
+--echo # End of 10.10 tests
+--echo #
diff --git a/mysql-test/main/ctype_utf8mb4_uca_allkeys1400.result b/mysql-test/main/ctype_utf8mb4_uca_allkeys1400.result
new file mode 100644
index 00000000000..a3dd7a4d7b8
--- /dev/null
+++ b/mysql-test/main/ctype_utf8mb4_uca_allkeys1400.result
@@ -0,0 +1,120 @@
+#
+# Start of 10.8 tests
+#
+#
+# MDEV-27009 Add UCA-14.0.0 collations
+#
+SET NAMES utf8mb4 COLLATE utf8mb4_bin;
+CREATE TABLE allchars AS SELECT 1 AS code, ' ' AS str LIMIT 0;
+SHOW CREATE TABLE allchars;
+Table Create Table
+allchars CREATE TABLE `allchars` (
+ `code` int(1) NOT NULL,
+ `str` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+CREATE TABLE t1tmp (a INT NOT NULL);
+FOR i IN 0..0xFFF
+DO
+INSERT INTO t1tmp VALUES (i);
+END FOR;
+$$
+INSERT INTO allchars SELECT
+t1.a*0x1000+t2.a,
+CHAR(t1.a*0x1000+t2.a USING utf32)
+FROM t1tmp t1, t1tmp t2
+WHERE t1.a BETWEEN 0 AND 0x10F;
+DROP TABLE t1tmp;
+SELECT COUNT(*) FROM allchars;
+COUNT(*)
+1114112
+#
+# Load allkeys.txt from Unicode-14.0.0
+#
+CREATE TABLE allkeys_txt (a TEXT, b TEXT, c TEXT) ENGINE=MyISAM;
+LOAD DATA INFILE '../../std_data/unicode/allkeys1400.txt'
+INTO TABLE allkeys_txt FIELDS TERMINATED BY ';' (@a,@b,@qq)
+SET a=TRIM(@a), b=TRIM(REGEXP_SUBSTR(@b,'^[^#]*')), c=TRIM(REGEXP_SUBSTR(@b, '#.*$'));
+CREATE TABLE allkeys AS
+SELECT
+a,
+CONVERT(CAST(UNHEX(regexp_replace(regexp_replace(regexp_replace(a,'(\\b[0-9A-Z]{4}\\b)','-0000\\1-'),'(\\b[0-9A-Z]{5}\\b)','-000\\1-'),'[ -]','')) AS CHAR CHARACTER SET utf32) USING utf8mb4) COLLATE utf8mb4_bin AS str,
+HEX(WEIGHT_STRING(CONVERT(CAST(UNHEX(regexp_replace(regexp_replace(regexp_replace(a,'(\\b[0-9A-Z]{4}\\b)','-0000\\1-'),'(\\b[0-9A-Z]{5}\\b)','-000\\1-'),'[ -]','')) AS CHAR CHARACTER SET utf32) USING utf8mb4) COLLATE utf8mb4_uca1400_ai_ci)) as ws,
+REPLACE(REPLACE(REGEXP_REPLACE(b,'[[][.*](....)[.]....[.]....]','-\\1-'),'-0000-',''),'-','') AS wd,
+c
+FROM allkeys_txt
+WHERE a RLIKE '^[0-9A-Z]';
+ALTER TABLE allkeys ADD KEY(str(3));
+#
+# Test explicit weights for individual characters
+# U+FDFA is the only character that has a different weight than allkeys.txt
+#
+SELECT COUNT(*), SUM(ws<>wd) FROM allkeys WHERE a NOT LIKE '% %';
+COUNT(*) SUM(ws<>wd)
+32958 1
+SELECT a, ws, wd FROM allkeys WHERE ws<>wd AND a NOT LIKE '% %';
+a ws wd
+FDFA 27C22802282D02092762280228022819 27C22802282D02092762280228022819020927CE2802282E28190209281F27B72802280A
+#
+# Test explicit weights for built-in contractions
+#
+SELECT COUNT(*), SUM(ws<>wd) FROM allkeys WHERE a LIKE '% %';
+COUNT(*) SUM(ws<>wd)
+939 0
+SELECT a, ws, wd FROM allkeys WHERE ws<>wd AND a LIKE '% %';
+a ws wd
+#
+# Test implicit weights.
+#
+SELECT
+HEX(code),
+HEX(WEIGHT_STRING(str COLLATE utf8mb4_uca1400_ai_ci)) AS ws,
+CASE
+/* Core Han Unified Ideograms */
+WHEN (code >= 0x4E00 AND code <= 0x9FFF) OR
+(code >= 0xFA0E AND code <= 0xFA0F) OR
+(code = 0xFA11) OR
+(code >= 0xFA13 AND code <= 0xFA14) OR
+(code = 0xFA1F) OR
+(code = 0xFA21) OR
+(code >= 0xFA23 AND code <= 0xFA24) OR
+(code >= 0xFA27 AND code <= 0xFA29) THEN
+CONCAT(LPAD(HEX(0xFB40 + (code >> 15)),4,'0'),
+LPAD(HEX(0x8000 | (code & 0x7FFF)),4,'0'))
+/* All other Han Unified Ideographs */
+WHEN (code >= 0x3400 AND code <= 0x4DBF) OR
+(code >= 0x20000 AND code <= 0x2A6DF) OR
+(code >= 0x2A700 AND code <= 0x2B738) OR
+(code >= 0x2B740 AND code <= 0x2B81D) OR
+(code >= 0x2B820 AND code <= 0x2CEA1) OR
+(code >= 0x2CEB0 AND code <= 0x2EBE0) OR
+(code >= 0x30000 AND code <= 0x3134A) THEN
+CONCAT(LPAD(HEX(0xFB80 + (code >> 15)),4,'0'),
+LPAD(HEX(0x8000 | (code & 0x7FFF)),4,'0'))
+/* Siniform: Tangut */
+WHEN (code >= 0x17000 AND code <= 0x187FF) OR
+(code >= 0x18800 AND code <= 0x18AFF) OR
+(code >= 0x18D00 AND code <= 0x18D7F) THEN
+CONCAT('FB00', LPAD(HEX(0x8000 | (code - 0x17000)),4,'0'))
+/* Siniform: Nushu */
+WHEN (code >= 0x1B170 AND code <= 0x1B2FF) THEN
+CONCAT('FB01', LPAD(HEX(0x8000 | (code - 0x1B170)),4,'0'))
+/* Siniform: Khitan */
+WHEN (code >= 0x18B00 AND code <= 0x18CFF) THEN
+CONCAT('FB02', LPAD(HEX(0x8000 | (code - 0x18B00)),4,'0'))
+/* Unassigned: Any other code point */
+ELSE
+CONCAT(LPAD(HEX(0xFBC0 + (code >> 15)),4,'0'),
+LPAD(HEX(0x8000 | (code & 0x7FFF)),4,'0'))
+END AS wd
+FROM allchars
+LEFT OUTER JOIN allkeys USING (str)
+WHERE allkeys.str IS NULL
+HAVING ws<>wd
+ORDER BY HEX(str);
+HEX(code) ws wd
+DROP TABLE allkeys_txt;
+DROP TABLE allkeys;
+DROP TABLE allchars;
+#
+# End of 10.8 tests
+#
diff --git a/mysql-test/main/ctype_utf8mb4_uca_allkeys1400.test b/mysql-test/main/ctype_utf8mb4_uca_allkeys1400.test
new file mode 100644
index 00000000000..074925aef6c
--- /dev/null
+++ b/mysql-test/main/ctype_utf8mb4_uca_allkeys1400.test
@@ -0,0 +1,128 @@
+--source include/have_utf32.inc
+--source include/have_utf8mb4.inc
+
+--echo #
+--echo # Start of 10.8 tests
+--echo #
+
+--echo #
+--echo # MDEV-27009 Add UCA-14.0.0 collations
+--echo #
+
+
+SET NAMES utf8mb4 COLLATE utf8mb4_bin;
+--source include/ctype_unicode_allchars.inc
+
+--echo #
+--echo # Load allkeys.txt from Unicode-14.0.0
+--echo #
+
+# The 14.0.0 file has three weight levels.
+# Unlike 5.2.0, there are no optional extra fields after the character
+# name like "; QQK". But lets still use the "@qq" variable for symmetry.
+#00A0 ; [*0209.0020.001B] # NO-BREAK SPACE
+#
+
+CREATE TABLE allkeys_txt (a TEXT, b TEXT, c TEXT) ENGINE=MyISAM;
+LOAD DATA INFILE '../../std_data/unicode/allkeys1400.txt'
+INTO TABLE allkeys_txt FIELDS TERMINATED BY ';' (@a,@b,@qq)
+SET a=TRIM(@a), b=TRIM(REGEXP_SUBSTR(@b,'^[^#]*')), c=TRIM(REGEXP_SUBSTR(@b, '#.*$'));
+CREATE TABLE allkeys AS
+SELECT
+ a,
+ CONVERT(CAST(UNHEX(regexp_replace(regexp_replace(regexp_replace(a,'(\\b[0-9A-Z]{4}\\b)','-0000\\1-'),'(\\b[0-9A-Z]{5}\\b)','-000\\1-'),'[ -]','')) AS CHAR CHARACTER SET utf32) USING utf8mb4) COLLATE utf8mb4_bin AS str,
+ HEX(WEIGHT_STRING(CONVERT(CAST(UNHEX(regexp_replace(regexp_replace(regexp_replace(a,'(\\b[0-9A-Z]{4}\\b)','-0000\\1-'),'(\\b[0-9A-Z]{5}\\b)','-000\\1-'),'[ -]','')) AS CHAR CHARACTER SET utf32) USING utf8mb4) COLLATE utf8mb4_uca1400_ai_ci)) as ws,
+ REPLACE(REPLACE(REGEXP_REPLACE(b,'[[][.*](....)[.]....[.]....]','-\\1-'),'-0000-',''),'-','') AS wd,
+ c
+FROM allkeys_txt
+WHERE a RLIKE '^[0-9A-Z]';
+ALTER TABLE allkeys ADD KEY(str(3));
+
+--echo #
+--echo # Test explicit weights for individual characters
+--echo # U+FDFA is the only character that has a different weight than allkeys.txt
+--echo #
+
+# The (NOT LIKE '% %') part of the condition filters out contractions.
+
+SELECT COUNT(*), SUM(ws<>wd) FROM allkeys WHERE a NOT LIKE '% %';
+SELECT a, ws, wd FROM allkeys WHERE ws<>wd AND a NOT LIKE '% %';
+
+--echo #
+--echo # Test explicit weights for built-in contractions
+--echo #
+
+SELECT COUNT(*), SUM(ws<>wd) FROM allkeys WHERE a LIKE '% %';
+SELECT a, ws, wd FROM allkeys WHERE ws<>wd AND a LIKE '% %';
+
+
+--echo #
+--echo # Test implicit weights.
+--echo #
+
+# The below CASE resembles the implicit weight formula according to
+# https://unicode.org/reports/tr10/#Implicit_Weights
+# as of Unicode-14.0.0
+
+
+SELECT
+ HEX(code),
+ HEX(WEIGHT_STRING(str COLLATE utf8mb4_uca1400_ai_ci)) AS ws,
+ CASE
+
+ /* Core Han Unified Ideograms */
+ WHEN (code >= 0x4E00 AND code <= 0x9FFF) OR
+ (code >= 0xFA0E AND code <= 0xFA0F) OR
+ (code = 0xFA11) OR
+ (code >= 0xFA13 AND code <= 0xFA14) OR
+ (code = 0xFA1F) OR
+ (code = 0xFA21) OR
+ (code >= 0xFA23 AND code <= 0xFA24) OR
+ (code >= 0xFA27 AND code <= 0xFA29) THEN
+ CONCAT(LPAD(HEX(0xFB40 + (code >> 15)),4,'0'),
+ LPAD(HEX(0x8000 | (code & 0x7FFF)),4,'0'))
+
+ /* All other Han Unified Ideographs */
+ WHEN (code >= 0x3400 AND code <= 0x4DBF) OR
+ (code >= 0x20000 AND code <= 0x2A6DF) OR
+ (code >= 0x2A700 AND code <= 0x2B738) OR
+ (code >= 0x2B740 AND code <= 0x2B81D) OR
+ (code >= 0x2B820 AND code <= 0x2CEA1) OR
+ (code >= 0x2CEB0 AND code <= 0x2EBE0) OR
+ (code >= 0x30000 AND code <= 0x3134A) THEN
+ CONCAT(LPAD(HEX(0xFB80 + (code >> 15)),4,'0'),
+ LPAD(HEX(0x8000 | (code & 0x7FFF)),4,'0'))
+
+ /* Siniform: Tangut */
+ WHEN (code >= 0x17000 AND code <= 0x187FF) OR
+ (code >= 0x18800 AND code <= 0x18AFF) OR
+ (code >= 0x18D00 AND code <= 0x18D7F) THEN
+ CONCAT('FB00', LPAD(HEX(0x8000 | (code - 0x17000)),4,'0'))
+
+ /* Siniform: Nushu */
+ WHEN (code >= 0x1B170 AND code <= 0x1B2FF) THEN
+ CONCAT('FB01', LPAD(HEX(0x8000 | (code - 0x1B170)),4,'0'))
+
+ /* Siniform: Khitan */
+ WHEN (code >= 0x18B00 AND code <= 0x18CFF) THEN
+ CONCAT('FB02', LPAD(HEX(0x8000 | (code - 0x18B00)),4,'0'))
+
+ /* Unassigned: Any other code point */
+ ELSE
+ CONCAT(LPAD(HEX(0xFBC0 + (code >> 15)),4,'0'),
+ LPAD(HEX(0x8000 | (code & 0x7FFF)),4,'0'))
+
+ END AS wd
+FROM allchars
+LEFT OUTER JOIN allkeys USING (str)
+WHERE allkeys.str IS NULL
+HAVING ws<>wd
+ORDER BY HEX(str);
+
+DROP TABLE allkeys_txt;
+DROP TABLE allkeys;
+DROP TABLE allchars;
+
+--echo #
+--echo # End of 10.8 tests
+--echo #
diff --git a/mysql-test/main/default.result b/mysql-test/main/default.result
index 150bc860106..cf1d31e3bc7 100644
--- a/mysql-test/main/default.result
+++ b/mysql-test/main/default.result
@@ -371,7 +371,7 @@ create or replace table t1 (param_list blob DEFAULT "" NOT NULL);
drop table t1;
create table t1 (a int);
insert into t1 values(-1);
-alter table t1 add b int default 1, add c int default -1, add d int default (1+1), add e timestamp;
+alter table t1 add b int default 1, add c int default -1, add d int default (1+1), add e timestamp not null default now();
select a,b,c,d,e from t1;
a b c d e
-1 1 -1 2 2001-01-01 10:20:30
@@ -388,7 +388,7 @@ t1 CREATE TABLE `t1` (
`b` int(11) DEFAULT 1,
`c` int(11) DEFAULT -1,
`d` int(11) DEFAULT (1 + 1),
- `e` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `e` timestamp NOT NULL DEFAULT current_timestamp(),
`f` int(11) DEFAULT (1 + 1 + 1),
`g` int(11) NOT NULL DEFAULT (1 + 1 + 1 + 1),
`h` int(11) DEFAULT (2 + 2 + 2 + 2)
@@ -401,7 +401,7 @@ t2 CREATE TABLE `t2` (
`b` int(11) DEFAULT 1,
`c` int(11) DEFAULT -1,
`d` int(11) DEFAULT (1 + 1),
- `e` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `e` timestamp NOT NULL DEFAULT current_timestamp(),
`f` int(11) DEFAULT (1 + 1 + 1),
`g` int(11) NOT NULL DEFAULT (1 + 1 + 1 + 1),
`h` int(11) DEFAULT (2 + 2 + 2 + 2)
@@ -1067,7 +1067,7 @@ CREATE TABLE t1 (a TIMESTAMP DEFAULT COALESCE(CURRENT_TIMESTAMP));
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `a` timestamp NOT NULL DEFAULT coalesce(current_timestamp())
+ `a` timestamp NULL DEFAULT coalesce(current_timestamp())
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
CREATE TABLE t1 (a DATE DEFAULT COALESCE(CURRENT_DATE));
@@ -1091,8 +1091,8 @@ b TIMESTAMP DEFAULT COALESCE(CURRENT_TIMESTAMP(6))
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `a` timestamp NOT NULL DEFAULT current_timestamp(),
- `b` timestamp NOT NULL DEFAULT coalesce(current_timestamp(6))
+ `a` timestamp NULL DEFAULT current_timestamp(),
+ `b` timestamp NULL DEFAULT coalesce(current_timestamp(6))
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
INSERT INTO t1 VALUES ();
SELECT CURRENT_TIMESTAMP(6);
@@ -1525,8 +1525,8 @@ CREATE TABLE t1 (a TIMESTAMP DEFAULT NOW(), b TIMESTAMP DEFAULT UTC_TIMESTAMP())
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `a` timestamp NOT NULL DEFAULT current_timestamp(),
- `b` timestamp NOT NULL DEFAULT utc_timestamp()
+ `a` timestamp NULL DEFAULT current_timestamp(),
+ `b` timestamp NULL DEFAULT utc_timestamp()
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
INSERT INTO t1 VALUES ();
SELECT * FROM t1;
@@ -1538,9 +1538,9 @@ CREATE TABLE t1 (a TIMESTAMP(6) DEFAULT SYSDATE(6), s INT, b TIMESTAMP(6) DEFAUL
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `a` timestamp(6) NOT NULL DEFAULT sysdate(6),
+ `a` timestamp(6) NULL DEFAULT sysdate(6),
`s` int(11) DEFAULT NULL,
- `b` timestamp(6) NOT NULL DEFAULT sysdate(6)
+ `b` timestamp(6) NULL DEFAULT sysdate(6)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
INSERT INTO t1 VALUES (DEFAULT(a), SLEEP(0.1), DEFAULT(b));
SELECT b>a FROM t1;
@@ -1553,7 +1553,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`a` int(11) DEFAULT NULL,
- `b` timestamp NOT NULL DEFAULT from_unixtime(`a`)
+ `b` timestamp NULL DEFAULT from_unixtime(`a`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
INSERT INTO t1 VALUES (1447430881, DEFAULT);
SELECT * FROM t1;
@@ -1565,8 +1565,8 @@ CREATE TABLE t1 (a TIMESTAMP, b TIMESTAMP DEFAULT CONVERT_TZ(a, '-10:00', '+10:0
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `a` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
- `b` timestamp NOT NULL DEFAULT convert_tz(`a`,'-10:00','+10:00')
+ `a` timestamp NULL DEFAULT NULL,
+ `b` timestamp NULL DEFAULT convert_tz(`a`,'-10:00','+10:00')
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
INSERT INTO t1 VALUES ('2001-01-01 10:20:30', DEFAULT);
SELECT * FROM t1;
diff --git a/mysql-test/main/default.test b/mysql-test/main/default.test
index 13f611246c9..2ebe9ee9c5e 100644
--- a/mysql-test/main/default.test
+++ b/mysql-test/main/default.test
@@ -287,7 +287,7 @@ drop table t1;
create table t1 (a int);
insert into t1 values(-1);
-alter table t1 add b int default 1, add c int default -1, add d int default (1+1), add e timestamp;
+alter table t1 add b int default 1, add c int default -1, add d int default (1+1), add e timestamp not null default now();
select a,b,c,d,e from t1;
insert into t1 values(10,10,10,10,0);
alter table t1 add f int default (1+1+1) null, add g int default (1+1+1+1) not null,add h int default (2+2+2+2);
diff --git a/mysql-test/main/fast_prefix_index_fetch_innodb.result b/mysql-test/main/fast_prefix_index_fetch_innodb.result
index aa888fb0704..1ce29100c66 100644
--- a/mysql-test/main/fast_prefix_index_fetch_innodb.result
+++ b/mysql-test/main/fast_prefix_index_fetch_innodb.result
@@ -1,8 +1,3 @@
-SET @save_opt= @@GLOBAL.innodb_prefix_index_cluster_optimization;
-set global innodb_prefix_index_cluster_optimization = ON;
-show variables like 'innodb_prefix_index_cluster_optimization';
-Variable_name Value
-innodb_prefix_index_cluster_optimization ON
SET @save_innodb_stats_persistent=@@GLOBAL.innodb_stats_persistent;
SET GLOBAL innodb_stats_persistent = OFF;
# Create a table with a large varchar field that we index the prefix
@@ -31,110 +26,39 @@ id fake_id bigfield
32 1032 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
33 1033 yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
128 1128 zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
-# Baseline sanity check: 0, 0.
-select "no-op query";
-no-op query
-no-op query
-select @cluster_lookups;
-@cluster_lookups
-0
-select @cluster_lookups_avoided;
-@cluster_lookups_avoided
-0
# Eligible for optimization.
select id, bigfield from prefixinno where bigfield = repeat('d', 31);
id bigfield
31 ddddddddddddddddddddddddddddddd
-select @cluster_lookups;
-@cluster_lookups
-0
-select @cluster_lookups_avoided;
-@cluster_lookups_avoided
-1
# Eligible for optimization, access via fake_id only.
select id, bigfield from prefixinno where fake_id = 1031;
id bigfield
31 ddddddddddddddddddddddddddddddd
-select @cluster_lookups;
-@cluster_lookups
-0
-select @cluster_lookups_avoided;
-@cluster_lookups_avoided
-1
# Not eligible for optimization, access via fake_id of big row.
select id, bigfield from prefixinno where fake_id = 1033;
id bigfield
33 yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
-select @cluster_lookups;
-@cluster_lookups
-1
-select @cluster_lookups_avoided;
-@cluster_lookups_avoided
-0
# Not eligible for optimization.
select id, bigfield from prefixinno where bigfield = repeat('x', 32);
id bigfield
32 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-select @cluster_lookups;
-@cluster_lookups
-1
-select @cluster_lookups_avoided;
-@cluster_lookups_avoided
-0
-# Not eligible for optimization.
select id, bigfield from prefixinno where bigfield = repeat('y', 33);
id bigfield
33 yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
-select @cluster_lookups;
-@cluster_lookups
-1
-select @cluster_lookups_avoided;
-@cluster_lookups_avoided
-0
-# Eligible, should not increment lookup counter.
select id, bigfield from prefixinno where bigfield = repeat('b', 8);
id bigfield
8 bbbbbbbb
-select @cluster_lookups;
-@cluster_lookups
-0
-select @cluster_lookups_avoided;
-@cluster_lookups_avoided
-1
-# Eligible, should not increment lookup counter.
select id, bigfield from prefixinno where bigfield = repeat('c', 24);
id bigfield
24 cccccccccccccccccccccccc
-select @cluster_lookups;
-@cluster_lookups
-0
-select @cluster_lookups_avoided;
-@cluster_lookups_avoided
-1
-# Should increment lookup counter.
select id, bigfield from prefixinno where bigfield = repeat('z', 128);
id bigfield
128 zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
-select @cluster_lookups;
-@cluster_lookups
-1
-select @cluster_lookups_avoided;
-@cluster_lookups_avoided
-0
-# Disable optimization, confirm we still increment counter.
-set global innodb_prefix_index_cluster_optimization = OFF;
select id, bigfield from prefixinno where fake_id = 1033;
id bigfield
33 yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
-select @cluster_lookups;
-@cluster_lookups
-1
-select @cluster_lookups_avoided;
-@cluster_lookups_avoided
-0
drop table prefixinno;
# Multi-byte handling case
-set global innodb_prefix_index_cluster_optimization = ON;
SET NAMES utf8mb4;
CREATE TABLE t1(
f1 varchar(10) CHARACTER SET UTF8MB4 COLLATE UTF8MB4_BIN,
@@ -146,113 +70,47 @@ INSERT INTO t1 VALUES('😊me'), ('eu€'), ('ls¢');
SELECT f1 FROM t1 FORCE INDEX (`f1`) WHERE f1 = 'a';
f1
a
-select @cluster_lookups;
-@cluster_lookups
-0
-select @cluster_lookups_avoided;
-@cluster_lookups_avoided
-1
# Not eligible - record length longer than prefix length
SELECT f1 FROM t1 FORCE INDEX (`f1`) WHERE f1 like 'c%';
f1
cccc
cÄc
-select @cluster_lookups;
-@cluster_lookups
-3
-select @cluster_lookups_avoided;
-@cluster_lookups_avoided
-0
# Eligible - record length shorter than prefix length
SELECT f1 FROM t1 FORCE INDEX (`f1`) WHERE f1 = 'až';
f1
až
-select @cluster_lookups;
-@cluster_lookups
-0
-select @cluster_lookups_avoided;
-@cluster_lookups_avoided
-1
# Not eligible - record length longer than prefix length
SELECT f1 FROM t1 FORCE INDEX (`f1`) WHERE f1 = 'தமிழà¯';
f1
தமிழà¯
-select @cluster_lookups;
-@cluster_lookups
-1
-select @cluster_lookups_avoided;
-@cluster_lookups_avoided
-0
# Not eligible - record length longer than prefix length
SELECT f1 FROM t1 FORCE INDEX (`f1`) WHERE f1 like 'ggáµ·%';
f1
ggáµ·g
-select @cluster_lookups;
-@cluster_lookups
-1
-select @cluster_lookups_avoided;
-@cluster_lookups_avoided
-0
# Not eligible - record length longer than prefix length
SELECT f1 FROM t1 FORCE INDEX (`f1`) WHERE f1 like '😊%';
f1
😊me
-select @cluster_lookups;
-@cluster_lookups
-1
-select @cluster_lookups_avoided;
-@cluster_lookups_avoided
-0
# Not eligible - record length longer than prefix length
SELECT f1 FROM t1 FORCE INDEX (`f1`) WHERE f1 = 'ls¢';
f1
ls¢
-select @cluster_lookups;
-@cluster_lookups
-1
-select @cluster_lookups_avoided;
-@cluster_lookups_avoided
-0
# Eligible - record length shorter than prefix length
SELECT f1 FROM t1 FORCE INDEX (`f1`) WHERE f1 like '¢¢%';
f1
¢¢
-select @cluster_lookups;
-@cluster_lookups
-1
-select @cluster_lookups_avoided;
-@cluster_lookups_avoided
-1
# Eligible - record length shorter than prefix length
SELECT f1 FROM t1 FORCE INDEX (`f1`) WHERE f1 like 'ðŸ±ðŸŒ‘%';
f1
ðŸ±ðŸŒ‘
-select @cluster_lookups;
-@cluster_lookups
-1
-select @cluster_lookups_avoided;
-@cluster_lookups_avoided
-1
# Not eligible - record length longer than prefix length
SELECT f1 FROM t1 FORCE INDEX (`f1`) WHERE f1 like '🌑%';
f1
🌑
-select @cluster_lookups;
-@cluster_lookups
-0
-select @cluster_lookups_avoided;
-@cluster_lookups_avoided
-2
# Not eligible - record length longer than prefix length
SELECT f1 FROM t1 FORCE INDEX (`f1`) WHERE f1 like '🌒%';
f1
🌒
-select @cluster_lookups;
-@cluster_lookups
-0
-select @cluster_lookups_avoided;
-@cluster_lookups_avoided
-2
DROP TABLE t1;
# Multi-byte with minimum character length > 1 bytes
CREATE TABLE t1(
@@ -265,113 +123,47 @@ INSERT INTO t1 VALUES('😊me'), ('eu€'), ('ls¢');
SELECT f1 FROM t1 FORCE INDEX (`f1`) WHERE f1 = 'a';
f1
a
-select @cluster_lookups;
-@cluster_lookups
-0
-select @cluster_lookups_avoided;
-@cluster_lookups_avoided
-1
# Not eligible - record length longer than prefix length
SELECT f1 FROM t1 FORCE INDEX (`f1`) WHERE f1 like 'c%';
f1
cccc
cÄc
-select @cluster_lookups;
-@cluster_lookups
-3
-select @cluster_lookups_avoided;
-@cluster_lookups_avoided
-0
# Eligible - record length shorter than prefix length
SELECT f1 FROM t1 FORCE INDEX (`f1`) WHERE f1 = 'až';
f1
až
-select @cluster_lookups;
-@cluster_lookups
-0
-select @cluster_lookups_avoided;
-@cluster_lookups_avoided
-1
# Not eligible - record length longer than prefix length
SELECT f1 FROM t1 FORCE INDEX (`f1`) WHERE f1 = 'தமிழà¯';
f1
தமிழà¯
-select @cluster_lookups;
-@cluster_lookups
-1
-select @cluster_lookups_avoided;
-@cluster_lookups_avoided
-0
# Not eligible - record length longer than prefix length
SELECT f1 FROM t1 FORCE INDEX (`f1`) WHERE f1 like 'ggáµ·%';
f1
ggáµ·g
-select @cluster_lookups;
-@cluster_lookups
-2
-select @cluster_lookups_avoided;
-@cluster_lookups_avoided
-0
# Not eligible - record length longer than prefix length
SELECT f1 FROM t1 FORCE INDEX (`f1`) WHERE f1 like '😊%';
f1
😊me
-select @cluster_lookups;
-@cluster_lookups
-1
-select @cluster_lookups_avoided;
-@cluster_lookups_avoided
-0
# Not eligible - record length longer than prefix length
SELECT f1 FROM t1 FORCE INDEX (`f1`) WHERE f1 = 'ls¢';
f1
ls¢
-select @cluster_lookups;
-@cluster_lookups
-1
-select @cluster_lookups_avoided;
-@cluster_lookups_avoided
-0
# Eligible - record length shorter than prefix length
SELECT f1 FROM t1 FORCE INDEX(`f1`) WHERE f1 like '¢¢%';
f1
¢¢
-select @cluster_lookups;
-@cluster_lookups
-1
-select @cluster_lookups_avoided;
-@cluster_lookups_avoided
-1
# Eligible - record length shorter than prefix length
SELECT f1 FROM t1 FORCE INDEX (`f1`) WHERE f1 like 'ðŸ±ðŸŒ‘%';
f1
ðŸ±ðŸŒ‘
-select @cluster_lookups;
-@cluster_lookups
-1
-select @cluster_lookups_avoided;
-@cluster_lookups_avoided
-1
# Eligible - record length is shorter than prefix length
SELECT f1 FROM t1 FORCE INDEX (`f1`) WHERE f1 like '🌑%';
f1
🌑
-select @cluster_lookups;
-@cluster_lookups
-0
-select @cluster_lookups_avoided;
-@cluster_lookups_avoided
-2
# Eligible - record length is shorter than prefix length
SELECT f1 FROM t1 FORCE INDEX (`f1`) WHERE f1 like '🌒%';
f1
🌒
-select @cluster_lookups;
-@cluster_lookups
-0
-select @cluster_lookups_avoided;
-@cluster_lookups_avoided
-2
DROP TABLE t1;
CREATE TABLE t1(
col1 INT,
@@ -383,22 +175,10 @@ INSERT INTO t1(col1) VALUES(1);
SELECT col1 FROM t1 FORCE INDEX (`idx1`) WHERE col2 is NULL;
col1
1
-select @cluster_lookups;
-@cluster_lookups
-0
-select @cluster_lookups_avoided;
-@cluster_lookups_avoided
-1
# Not eligible - record length longer than prefix index
SELECT col1 FROM t1 FORCE INDEX (`idx1`) WHERE col2 like 'test1%';
col1
3
-select @cluster_lookups;
-@cluster_lookups
-2
-select @cluster_lookups_avoided;
-@cluster_lookups_avoided
-0
DROP TABLE t1;
#
# MDEV-20464 Division by 0 in row_search_with_covering_prefix()
@@ -443,18 +223,10 @@ INSERT INTO wp_blogs (domain, path) VALUES
('domain.no', '/fondsinvesteringer/'), ('domain.no', '/'),
('foo', 'bar'), ('bar', 'foo'), ('foo', 'foo'), ('bar', 'bar'),
('foo', 'foobar'), ('bar', 'foobar'), ('foobar', 'foobar');
-SET GLOBAL innodb_prefix_index_cluster_optimization=off;
-SELECT blog_id FROM wp_blogs WHERE domain IN ('domain.no')
-AND path IN ( '/fondsinvesteringer/', '/' );
-blog_id
-2
-1
-SET GLOBAL innodb_prefix_index_cluster_optimization=on;
SELECT blog_id FROM wp_blogs WHERE domain IN ('domain.no')
AND path IN ( '/fondsinvesteringer/', '/' );
blog_id
2
1
DROP TABLE wp_blogs;
-SET GLOBAL innodb_prefix_index_cluster_optimization = @save_opt;
SET GLOBAL innodb_stats_persistent = @save_innodb_stats_persistent;
diff --git a/mysql-test/main/fast_prefix_index_fetch_innodb.test b/mysql-test/main/fast_prefix_index_fetch_innodb.test
index 52066e96117..eca87e3db28 100644
--- a/mysql-test/main/fast_prefix_index_fetch_innodb.test
+++ b/mysql-test/main/fast_prefix_index_fetch_innodb.test
@@ -1,10 +1,6 @@
-- source include/have_innodb.inc
--disable_service_connection
-SET @save_opt= @@GLOBAL.innodb_prefix_index_cluster_optimization;
-set global innodb_prefix_index_cluster_optimization = ON;
-show variables like 'innodb_prefix_index_cluster_optimization';
-
SET @save_innodb_stats_persistent=@@GLOBAL.innodb_stats_persistent;
SET GLOBAL innodb_stats_persistent = OFF;
@@ -29,185 +25,28 @@ insert into prefixinno values (1, 1001, repeat('a', 1)),
select * from prefixinno;
-let $show_count_statement = show status like 'innodb_secondary_index_triggered_cluster_reads';
-let $show_opt_statement = show status like 'innodb_secondary_index_triggered_cluster_reads_avoided';
-
---echo # Baseline sanity check: 0, 0.
-let $base_count = query_get_value($show_count_statement, Value, 1);
-let $base_opt = query_get_value($show_opt_statement, Value, 1);
-
-select "no-op query";
-
-let $count = query_get_value($show_count_statement, Value, 1);
-let $opt = query_get_value($show_opt_statement, Value, 1);
-
---disable_query_log
-eval select $count - $base_count into @cluster_lookups;
-eval select $opt - $base_opt into @cluster_lookups_avoided;
---enable_query_log
-
-select @cluster_lookups;
-select @cluster_lookups_avoided;
-
--echo # Eligible for optimization.
-let $base_count = query_get_value($show_count_statement, Value, 1);
-let $base_opt = query_get_value($show_opt_statement, Value, 1);
-
select id, bigfield from prefixinno where bigfield = repeat('d', 31);
-let $count = query_get_value($show_count_statement, Value, 1);
-let $opt = query_get_value($show_opt_statement, Value, 1);
-
---disable_query_log
-eval select $count - $base_count into @cluster_lookups;
-eval select $opt - $base_opt into @cluster_lookups_avoided;
---enable_query_log
-
-select @cluster_lookups;
-select @cluster_lookups_avoided;
-
--echo # Eligible for optimization, access via fake_id only.
-let $base_count = query_get_value($show_count_statement, Value, 1);
-let $base_opt = query_get_value($show_opt_statement, Value, 1);
-
select id, bigfield from prefixinno where fake_id = 1031;
-let $count = query_get_value($show_count_statement, Value, 1);
-let $opt = query_get_value($show_opt_statement, Value, 1);
-
---disable_query_log
-eval select $count - $base_count into @cluster_lookups;
-eval select $opt - $base_opt into @cluster_lookups_avoided;
---enable_query_log
-
-select @cluster_lookups;
-select @cluster_lookups_avoided;
-
--echo # Not eligible for optimization, access via fake_id of big row.
-let $base_count = query_get_value($show_count_statement, Value, 1);
-let $base_opt = query_get_value($show_opt_statement, Value, 1);
-
select id, bigfield from prefixinno where fake_id = 1033;
-let $count = query_get_value($show_count_statement, Value, 1);
-let $opt = query_get_value($show_opt_statement, Value, 1);
-
---disable_query_log
-eval select $count - $base_count into @cluster_lookups;
-eval select $opt - $base_opt into @cluster_lookups_avoided;
---enable_query_log
-
-select @cluster_lookups;
-select @cluster_lookups_avoided;
-
--echo # Not eligible for optimization.
-let $base_count = query_get_value($show_count_statement, Value, 1);
-let $base_opt = query_get_value($show_opt_statement, Value, 1);
-
select id, bigfield from prefixinno where bigfield = repeat('x', 32);
-
-let $count = query_get_value($show_count_statement, Value, 1);
-let $opt = query_get_value($show_opt_statement, Value, 1);
-
---disable_query_log
-eval select $count - $base_count into @cluster_lookups;
-eval select $opt - $base_opt into @cluster_lookups_avoided;
---enable_query_log
-
-select @cluster_lookups;
-select @cluster_lookups_avoided;
-
---echo # Not eligible for optimization.
-let $base_count = query_get_value($show_count_statement, Value, 1);
-let $base_opt = query_get_value($show_opt_statement, Value, 1);
-
select id, bigfield from prefixinno where bigfield = repeat('y', 33);
-let $count = query_get_value($show_count_statement, Value, 1);
-let $opt = query_get_value($show_opt_statement, Value, 1);
-
---disable_query_log
-eval select $count - $base_count into @cluster_lookups;
-eval select $opt - $base_opt into @cluster_lookups_avoided;
---enable_query_log
-
-select @cluster_lookups;
-select @cluster_lookups_avoided;
-
---echo # Eligible, should not increment lookup counter.
-let $base_count = query_get_value($show_count_statement, Value, 1);
-let $base_opt = query_get_value($show_opt_statement, Value, 1);
-
select id, bigfield from prefixinno where bigfield = repeat('b', 8);
-
-let $count = query_get_value($show_count_statement, Value, 1);
-let $opt = query_get_value($show_opt_statement, Value, 1);
-
---disable_query_log
-eval select $count - $base_count into @cluster_lookups;
-eval select $opt - $base_opt into @cluster_lookups_avoided;
---enable_query_log
-
-select @cluster_lookups;
-select @cluster_lookups_avoided;
-
---echo # Eligible, should not increment lookup counter.
-let $base_count = query_get_value($show_count_statement, Value, 1);
-let $base_opt = query_get_value($show_opt_statement, Value, 1);
-
select id, bigfield from prefixinno where bigfield = repeat('c', 24);
-
-let $count = query_get_value($show_count_statement, Value, 1);
-let $opt = query_get_value($show_opt_statement, Value, 1);
-
---disable_query_log
-eval select $count - $base_count into @cluster_lookups;
-eval select $opt - $base_opt into @cluster_lookups_avoided;
---enable_query_log
-
-select @cluster_lookups;
-select @cluster_lookups_avoided;
-
---echo # Should increment lookup counter.
-let $base_count = query_get_value($show_count_statement, Value, 1);
-let $base_opt = query_get_value($show_opt_statement, Value, 1);
-
select id, bigfield from prefixinno where bigfield = repeat('z', 128);
-
-let $count = query_get_value($show_count_statement, Value, 1);
-let $opt = query_get_value($show_opt_statement, Value, 1);
-
---disable_query_log
-eval select $count - $base_count into @cluster_lookups;
-eval select $opt - $base_opt into @cluster_lookups_avoided;
---enable_query_log
-
-select @cluster_lookups;
-select @cluster_lookups_avoided;
-
---echo # Disable optimization, confirm we still increment counter.
-let $base_count = query_get_value($show_count_statement, Value, 1);
-let $base_opt = query_get_value($show_opt_statement, Value, 1);
-
-set global innodb_prefix_index_cluster_optimization = OFF;
select id, bigfield from prefixinno where fake_id = 1033;
-let $count = query_get_value($show_count_statement, Value, 1);
-let $opt = query_get_value($show_opt_statement, Value, 1);
-
---disable_query_log
-eval select $count - $base_count into @cluster_lookups;
-eval select $opt - $base_opt into @cluster_lookups_avoided;
---enable_query_log
-
-select @cluster_lookups;
-select @cluster_lookups_avoided;
-
drop table prefixinno;
--echo # Multi-byte handling case
-set global innodb_prefix_index_cluster_optimization = ON;
SET NAMES utf8mb4;
CREATE TABLE t1(
f1 varchar(10) CHARACTER SET UTF8MB4 COLLATE UTF8MB4_BIN,
@@ -218,200 +57,38 @@ INSERT INTO t1 VALUES('தமிழà¯'), ('ðŸ±ðŸŒ‘'), ('🌒'), ('🌑');
INSERT INTO t1 VALUES('😊me'), ('eu€'), ('ls¢');
--echo # Eligible - record length is shorter than prefix
-let $base_count = query_get_value($show_count_statement, Value, 1);
-let $base_opt = query_get_value($show_opt_statement, Value, 1);
-
SELECT f1 FROM t1 FORCE INDEX (`f1`) WHERE f1 = 'a';
-let $count = query_get_value($show_count_statement, Value, 1);
-let $opt = query_get_value($show_opt_statement, Value, 1);
-
---disable_query_log
-eval set @cluster_lookups = $count - $base_count;
-eval set @cluster_lookups_avoided = $opt - $base_opt;
---enable_query_log
-
-select @cluster_lookups;
-select @cluster_lookups_avoided;
-
--echo # Not eligible - record length longer than prefix length
-let $base_count = query_get_value($show_count_statement, Value, 1);
-let $base_opt = query_get_value($show_opt_statement, Value, 1);
-
SELECT f1 FROM t1 FORCE INDEX (`f1`) WHERE f1 like 'c%';
-let $count = query_get_value($show_count_statement, Value, 1);
-let $opt = query_get_value($show_opt_statement, Value, 1);
-
---disable_query_log
-eval set @cluster_lookups = $count - $base_count;
-eval set @cluster_lookups_avoided = $opt - $base_opt;
---enable_query_log
-
-select @cluster_lookups;
-select @cluster_lookups_avoided;
-
--echo # Eligible - record length shorter than prefix length
-let $base_count = query_get_value($show_count_statement, Value, 1);
-let $base_opt = query_get_value($show_opt_statement, Value, 1);
-
SELECT f1 FROM t1 FORCE INDEX (`f1`) WHERE f1 = 'až';
-let $count = query_get_value($show_count_statement, Value, 1);
-let $opt = query_get_value($show_opt_statement, Value, 1);
-
---disable_query_log
-eval set @cluster_lookups = $count - $base_count;
-eval set @cluster_lookups_avoided = $opt - $base_opt;
---enable_query_log
-
-select @cluster_lookups;
-select @cluster_lookups_avoided;
-
--echo # Not eligible - record length longer than prefix length
-
-let $base_count = query_get_value($show_count_statement, Value, 1);
-let $base_opt = query_get_value($show_opt_statement, Value, 1);
-
SELECT f1 FROM t1 FORCE INDEX (`f1`) WHERE f1 = 'தமிழà¯';
-let $count = query_get_value($show_count_statement, Value, 1);
-let $opt = query_get_value($show_opt_statement, Value, 1);
-
---disable_query_log
-eval set @cluster_lookups = $count - $base_count;
-eval set @cluster_lookups_avoided = $opt - $base_opt;
---enable_query_log
-
-select @cluster_lookups;
-select @cluster_lookups_avoided;
-
--echo # Not eligible - record length longer than prefix length
-
-let $base_count = query_get_value($show_count_statement, Value, 1);
-let $base_opt = query_get_value($show_opt_statement, Value, 1);
-
SELECT f1 FROM t1 FORCE INDEX (`f1`) WHERE f1 like 'ggáµ·%';
-let $count = query_get_value($show_count_statement, Value, 1);
-let $opt = query_get_value($show_opt_statement, Value, 1);
-
---disable_query_log
-eval set @cluster_lookups = $count - $base_count;
-eval set @cluster_lookups_avoided = $opt - $base_opt;
---enable_query_log
-
-select @cluster_lookups;
-select @cluster_lookups_avoided;
-
--echo # Not eligible - record length longer than prefix length
-
-let $base_count = query_get_value($show_count_statement, Value, 1);
-let $base_opt = query_get_value($show_opt_statement, Value, 1);
-
SELECT f1 FROM t1 FORCE INDEX (`f1`) WHERE f1 like '😊%';
-let $count = query_get_value($show_count_statement, Value, 1);
-let $opt = query_get_value($show_opt_statement, Value, 1);
-
---disable_query_log
-eval set @cluster_lookups = $count - $base_count;
-eval set @cluster_lookups_avoided = $opt - $base_opt;
---enable_query_log
-
-select @cluster_lookups;
-select @cluster_lookups_avoided;
-
--echo # Not eligible - record length longer than prefix length
-
-let $base_count = query_get_value($show_count_statement, Value, 1);
-let $base_opt = query_get_value($show_opt_statement, Value, 1);
-
SELECT f1 FROM t1 FORCE INDEX (`f1`) WHERE f1 = 'ls¢';
-let $count = query_get_value($show_count_statement, Value, 1);
-let $opt = query_get_value($show_opt_statement, Value, 1);
-
---disable_query_log
-eval set @cluster_lookups = $count - $base_count;
-eval set @cluster_lookups_avoided = $opt - $base_opt;
---enable_query_log
-
-select @cluster_lookups;
-select @cluster_lookups_avoided;
-
--echo # Eligible - record length shorter than prefix length
-
-let $base_count = query_get_value($show_count_statement, Value, 1);
-let $base_opt = query_get_value($show_opt_statement, Value, 1);
-
SELECT f1 FROM t1 FORCE INDEX (`f1`) WHERE f1 like '¢¢%';
-let $count = query_get_value($show_count_statement, Value, 1);
-let $opt = query_get_value($show_opt_statement, Value, 1);
-
---disable_query_log
-eval set @cluster_lookups = $count - $base_count;
-eval set @cluster_lookups_avoided = $opt - $base_opt;
---enable_query_log
-
-select @cluster_lookups;
-select @cluster_lookups_avoided;
-
--echo # Eligible - record length shorter than prefix length
-
-let $base_count = query_get_value($show_count_statement, Value, 1);
-let $base_opt = query_get_value($show_opt_statement, Value, 1);
-
SELECT f1 FROM t1 FORCE INDEX (`f1`) WHERE f1 like 'ðŸ±ðŸŒ‘%';
-let $count = query_get_value($show_count_statement, Value, 1);
-let $opt = query_get_value($show_opt_statement, Value, 1);
-
---disable_query_log
-eval set @cluster_lookups = $count - $base_count;
-eval set @cluster_lookups_avoided = $opt - $base_opt;
---enable_query_log
-
-select @cluster_lookups;
-select @cluster_lookups_avoided;
-
--echo # Not eligible - record length longer than prefix length
-
-let $base_count = query_get_value($show_count_statement, Value, 1);
-let $base_opt = query_get_value($show_opt_statement, Value, 1);
-
SELECT f1 FROM t1 FORCE INDEX (`f1`) WHERE f1 like '🌑%';
-let $count = query_get_value($show_count_statement, Value, 1);
-let $opt = query_get_value($show_opt_statement, Value, 1);
-
---disable_query_log
-eval set @cluster_lookups = $count - $base_count;
-eval set @cluster_lookups_avoided = $opt - $base_opt;
---enable_query_log
-
-select @cluster_lookups;
-select @cluster_lookups_avoided;
-
--echo # Not eligible - record length longer than prefix length
-
-let $base_count = query_get_value($show_count_statement, Value, 1);
-let $base_opt = query_get_value($show_opt_statement, Value, 1);
-
SELECT f1 FROM t1 FORCE INDEX (`f1`) WHERE f1 like '🌒%';
-let $count = query_get_value($show_count_statement, Value, 1);
-let $opt = query_get_value($show_opt_statement, Value, 1);
-
---disable_query_log
-eval set @cluster_lookups = $count - $base_count;
-eval set @cluster_lookups_avoided = $opt - $base_opt;
---enable_query_log
-
-select @cluster_lookups;
-select @cluster_lookups_avoided;
-
DROP TABLE t1;
--echo # Multi-byte with minimum character length > 1 bytes
@@ -425,201 +102,38 @@ INSERT INTO t1 VALUES('தமிழà¯'), ('ðŸ±ðŸŒ‘'), ('🌒'), ('🌑');
INSERT INTO t1 VALUES('😊me'), ('eu€'), ('ls¢');
--echo # Eligible - record length is shorter than prefix
-let $base_count = query_get_value($show_count_statement, Value, 1);
-let $base_opt = query_get_value($show_opt_statement, Value, 1);
-
SELECT f1 FROM t1 FORCE INDEX (`f1`) WHERE f1 = 'a';
-let $count = query_get_value($show_count_statement, Value, 1);
-let $opt = query_get_value($show_opt_statement, Value, 1);
-
---disable_query_log
-eval set @cluster_lookups = $count - $base_count;
-eval set @cluster_lookups_avoided = $opt - $base_opt;
---enable_query_log
-
-select @cluster_lookups;
-select @cluster_lookups_avoided;
-
--echo # Not eligible - record length longer than prefix length
-let $base_count = query_get_value($show_count_statement, Value, 1);
-let $base_opt = query_get_value($show_opt_statement, Value, 1);
-
SELECT f1 FROM t1 FORCE INDEX (`f1`) WHERE f1 like 'c%';
-let $count = query_get_value($show_count_statement, Value, 1);
-let $opt = query_get_value($show_opt_statement, Value, 1);
-
---disable_query_log
-eval set @cluster_lookups = $count - $base_count;
-eval set @cluster_lookups_avoided = $opt - $base_opt;
---enable_query_log
-
-select @cluster_lookups;
-select @cluster_lookups_avoided;
-
--echo # Eligible - record length shorter than prefix length
-
-let $base_count = query_get_value($show_count_statement, Value, 1);
-let $base_opt = query_get_value($show_opt_statement, Value, 1);
-
SELECT f1 FROM t1 FORCE INDEX (`f1`) WHERE f1 = 'až';
-let $count = query_get_value($show_count_statement, Value, 1);
-let $opt = query_get_value($show_opt_statement, Value, 1);
-
---disable_query_log
-eval set @cluster_lookups = $count - $base_count;
-eval set @cluster_lookups_avoided = $opt - $base_opt;
---enable_query_log
-
-select @cluster_lookups;
-select @cluster_lookups_avoided;
-
--echo # Not eligible - record length longer than prefix length
-
-let $base_count = query_get_value($show_count_statement, Value, 1);
-let $base_opt = query_get_value($show_opt_statement, Value, 1);
-
SELECT f1 FROM t1 FORCE INDEX (`f1`) WHERE f1 = 'தமிழà¯';
-let $count = query_get_value($show_count_statement, Value, 1);
-let $opt = query_get_value($show_opt_statement, Value, 1);
-
---disable_query_log
-eval set @cluster_lookups = $count - $base_count;
-eval set @cluster_lookups_avoided = $opt - $base_opt;
---enable_query_log
-
-select @cluster_lookups;
-select @cluster_lookups_avoided;
-
--echo # Not eligible - record length longer than prefix length
-
-let $base_count = query_get_value($show_count_statement, Value, 1);
-let $base_opt = query_get_value($show_opt_statement, Value, 1);
-
SELECT f1 FROM t1 FORCE INDEX (`f1`) WHERE f1 like 'ggáµ·%';
-let $count = query_get_value($show_count_statement, Value, 1);
-let $opt = query_get_value($show_opt_statement, Value, 1);
-
---disable_query_log
-eval set @cluster_lookups = $count - $base_count;
-eval set @cluster_lookups_avoided = $opt - $base_opt;
---enable_query_log
-
-select @cluster_lookups;
-select @cluster_lookups_avoided;
-
--echo # Not eligible - record length longer than prefix length
-
-let $base_count = query_get_value($show_count_statement, Value, 1);
-let $base_opt = query_get_value($show_opt_statement, Value, 1);
-
SELECT f1 FROM t1 FORCE INDEX (`f1`) WHERE f1 like '😊%';
-let $count = query_get_value($show_count_statement, Value, 1);
-let $opt = query_get_value($show_opt_statement, Value, 1);
-
---disable_query_log
-eval set @cluster_lookups = $count - $base_count;
-eval set @cluster_lookups_avoided = $opt - $base_opt;
---enable_query_log
-
-select @cluster_lookups;
-select @cluster_lookups_avoided;
-
--echo # Not eligible - record length longer than prefix length
-
-let $base_count = query_get_value($show_count_statement, Value, 1);
-let $base_opt = query_get_value($show_opt_statement, Value, 1);
-
SELECT f1 FROM t1 FORCE INDEX (`f1`) WHERE f1 = 'ls¢';
-let $count = query_get_value($show_count_statement, Value, 1);
-let $opt = query_get_value($show_opt_statement, Value, 1);
-
---disable_query_log
-eval set @cluster_lookups = $count - $base_count;
-eval set @cluster_lookups_avoided = $opt - $base_opt;
---enable_query_log
-
-select @cluster_lookups;
-select @cluster_lookups_avoided;
-
--echo # Eligible - record length shorter than prefix length
-
-let $base_count = query_get_value($show_count_statement, Value, 1);
-let $base_opt = query_get_value($show_opt_statement, Value, 1);
-
SELECT f1 FROM t1 FORCE INDEX(`f1`) WHERE f1 like '¢¢%';
-let $count = query_get_value($show_count_statement, Value, 1);
-let $opt = query_get_value($show_opt_statement, Value, 1);
-
---disable_query_log
-eval set @cluster_lookups = $count - $base_count;
-eval set @cluster_lookups_avoided = $opt - $base_opt;
---enable_query_log
-
-select @cluster_lookups;
-select @cluster_lookups_avoided;
-
--echo # Eligible - record length shorter than prefix length
-
-let $base_count = query_get_value($show_count_statement, Value, 1);
-let $base_opt = query_get_value($show_opt_statement, Value, 1);
-
SELECT f1 FROM t1 FORCE INDEX (`f1`) WHERE f1 like 'ðŸ±ðŸŒ‘%';
-let $count = query_get_value($show_count_statement, Value, 1);
-let $opt = query_get_value($show_opt_statement, Value, 1);
-
---disable_query_log
-eval set @cluster_lookups = $count - $base_count;
-eval set @cluster_lookups_avoided = $opt - $base_opt;
---enable_query_log
-
-select @cluster_lookups;
-select @cluster_lookups_avoided;
-
--echo # Eligible - record length is shorter than prefix length
-
-let $base_count = query_get_value($show_count_statement, Value, 1);
-let $base_opt = query_get_value($show_opt_statement, Value, 1);
-
SELECT f1 FROM t1 FORCE INDEX (`f1`) WHERE f1 like '🌑%';
-let $count = query_get_value($show_count_statement, Value, 1);
-let $opt = query_get_value($show_opt_statement, Value, 1);
-
---disable_query_log
-eval set @cluster_lookups = $count - $base_count;
-eval set @cluster_lookups_avoided = $opt - $base_opt;
---enable_query_log
-
-select @cluster_lookups;
-select @cluster_lookups_avoided;
-
--echo # Eligible - record length is shorter than prefix length
-
-let $base_count = query_get_value($show_count_statement, Value, 1);
-let $base_opt = query_get_value($show_opt_statement, Value, 1);
-
SELECT f1 FROM t1 FORCE INDEX (`f1`) WHERE f1 like '🌒%';
-let $count = query_get_value($show_count_statement, Value, 1);
-let $opt = query_get_value($show_opt_statement, Value, 1);
-
---disable_query_log
-eval set @cluster_lookups = $count - $base_count;
-eval set @cluster_lookups_avoided = $opt - $base_opt;
---enable_query_log
-
-select @cluster_lookups;
-select @cluster_lookups_avoided;
-
DROP TABLE t1;
CREATE TABLE t1(
@@ -630,41 +144,11 @@ INSERT INTO t1 VALUES (2, 'test'), (3, repeat('test1', 2000));
INSERT INTO t1(col1) VALUES(1);
--echo # Eligible - record length is shorter than prefix length
-
-let $base_count = query_get_value($show_count_statement, Value, 1);
-let $base_opt = query_get_value($show_opt_statement, Value, 1);
-
SELECT col1 FROM t1 FORCE INDEX (`idx1`) WHERE col2 is NULL;
-let $count = query_get_value($show_count_statement, Value, 1);
-let $opt = query_get_value($show_opt_statement, Value, 1);
-
---disable_query_log
-eval set @cluster_lookups = $count - $base_count;
-eval set @cluster_lookups_avoided = $opt - $base_opt;
---enable_query_log
-
-select @cluster_lookups;
-select @cluster_lookups_avoided;
-
--echo # Not eligible - record length longer than prefix index
-
-let $base_count = query_get_value($show_count_statement, Value, 1);
-let $base_opt = query_get_value($show_opt_statement, Value, 1);
-
SELECT col1 FROM t1 FORCE INDEX (`idx1`) WHERE col2 like 'test1%';
-let $count = query_get_value($show_count_statement, Value, 1);
-let $opt = query_get_value($show_opt_statement, Value, 1);
-
---disable_query_log
-eval set @cluster_lookups = $count - $base_count;
-eval set @cluster_lookups_avoided = $opt - $base_opt;
---enable_query_log
-
-select @cluster_lookups;
-select @cluster_lookups_avoided;
-
DROP TABLE t1;
--echo #
@@ -710,16 +194,10 @@ INSERT INTO wp_blogs (domain, path) VALUES
('foo', 'bar'), ('bar', 'foo'), ('foo', 'foo'), ('bar', 'bar'),
('foo', 'foobar'), ('bar', 'foobar'), ('foobar', 'foobar');
-SET GLOBAL innodb_prefix_index_cluster_optimization=off;
-SELECT blog_id FROM wp_blogs WHERE domain IN ('domain.no')
-AND path IN ( '/fondsinvesteringer/', '/' );
-
-SET GLOBAL innodb_prefix_index_cluster_optimization=on;
SELECT blog_id FROM wp_blogs WHERE domain IN ('domain.no')
AND path IN ( '/fondsinvesteringer/', '/' );
DROP TABLE wp_blogs;
-SET GLOBAL innodb_prefix_index_cluster_optimization = @save_opt;
SET GLOBAL innodb_stats_persistent = @save_innodb_stats_persistent;
--enable_service_connection
diff --git a/mysql-test/main/func_default.result b/mysql-test/main/func_default.result
index 8330b3a39fe..d01a86b4cd1 100644
--- a/mysql-test/main/func_default.result
+++ b/mysql-test/main/func_default.result
@@ -175,7 +175,7 @@ default(a) = now()
1
drop view v1, v2;
drop table t1;
-create table t1 (v1 timestamp) select 'x';
+create table t1 (v1 timestamp not null default now() on update now()) select 'x';
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
diff --git a/mysql-test/main/func_default.test b/mysql-test/main/func_default.test
index 1125ac32e81..ebd4f6e7b1e 100644
--- a/mysql-test/main/func_default.test
+++ b/mysql-test/main/func_default.test
@@ -156,7 +156,7 @@ drop table t1;
--enable_view_protocol
-create table t1 (v1 timestamp) select 'x';
+create table t1 (v1 timestamp not null default now() on update now()) select 'x';
show create table t1;
select default(v1) from (select v1 from t1) dt;
select default(v1) from (select v1 from t1 group by v1) dt;
diff --git a/mysql-test/main/func_des_encrypt.result b/mysql-test/main/func_des_encrypt.result
index 540596589b6..9ce577a5794 100644
--- a/mysql-test/main/func_des_encrypt.result
+++ b/mysql-test/main/func_des_encrypt.result
@@ -1,12 +1,16 @@
select des_encrypt('hello');
des_encrypt('hello')
€Ö2nV“Ø}
+Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
#
# Bug #11643: des_encrypt() causes server to die
#
CREATE TABLE t1 (des VARBINARY(200) NOT NULL DEFAULT '') ENGINE=MyISAM;
INSERT INTO t1 VALUES ('1234'), ('12345'), ('123456'), ('1234567');
UPDATE t1 SET des=DES_ENCRYPT('1234');
+Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
SELECT LENGTH(des) FROM t1;
LENGTH(des)
9
@@ -19,6 +23,8 @@ DES_DECRYPT(des)
1234
1234
1234
+Warnings:
+Note 1287 'des_decrypt' is deprecated and will be removed in a future release
SELECT
LENGTH(DES_ENCRYPT('1234')),
LENGTH(DES_ENCRYPT('12345')),
@@ -26,6 +32,11 @@ LENGTH(DES_ENCRYPT('123456')),
LENGTH(DES_ENCRYPT('1234567'));
LENGTH(DES_ENCRYPT('1234')) LENGTH(DES_ENCRYPT('12345')) LENGTH(DES_ENCRYPT('123456')) LENGTH(DES_ENCRYPT('1234567'))
9 9 9 9
+Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
SELECT
DES_DECRYPT(DES_ENCRYPT('1234')),
DES_DECRYPT(DES_ENCRYPT('12345')),
@@ -33,6 +44,15 @@ DES_DECRYPT(DES_ENCRYPT('123456')),
DES_DECRYPT(DES_ENCRYPT('1234567'));
DES_DECRYPT(DES_ENCRYPT('1234')) DES_DECRYPT(DES_ENCRYPT('12345')) DES_DECRYPT(DES_ENCRYPT('123456')) DES_DECRYPT(DES_ENCRYPT('1234567'))
1234 12345 123456 1234567
+Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
+Note 1287 'des_decrypt' is deprecated and will be removed in a future release
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
+Note 1287 'des_decrypt' is deprecated and will be removed in a future release
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
+Note 1287 'des_decrypt' is deprecated and will be removed in a future release
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
+Note 1287 'des_decrypt' is deprecated and will be removed in a future release
DROP TABLE t1;
End of 5.0 tests
#
@@ -64,6 +84,8 @@ i NULL
j 000000000009
j NULL
NULL NULL
+Warnings:
+Note 1287 'des_decrypt' is deprecated and will be removed in a future release
DROP TABLE t1;
CREATE TABLE t1 (a INT);
INSERT t1 VALUES (1),(2);
@@ -71,5 +93,20 @@ SELECT CHAR_LENGTH(a), DES_DECRYPT(a) FROM (SELECT _utf8 0xC2A2 AS a FROM t1) AS
CHAR_LENGTH(a) DES_DECRYPT(a)
1 ¢
1 ¢
+Warnings:
+Note 1287 'des_decrypt' is deprecated and will be removed in a future release
DROP TABLE t1;
-End of 10.5 tests
+#
+# End of 10.5 tests
+#
+#
+# MDEV-27104 deprecate DES_ENCRYPT/DECRYPT functions
+#
+# just show how to disable deprecation note
+set sql_notes=0;
+select hex(des_encrypt('a'));
+hex(des_encrypt('a'))
+80E4DE4136BA6CD7F3
+#
+# End of 10.10 tests
+#
diff --git a/mysql-test/main/func_des_encrypt.test b/mysql-test/main/func_des_encrypt.test
index 44fc30ff00f..884fad54635 100644
--- a/mysql-test/main/func_des_encrypt.test
+++ b/mysql-test/main/func_des_encrypt.test
@@ -1,4 +1,6 @@
-- source include/have_des.inc
+#double warning for view protocol
+--source include/no_view_protocol.inc
# This test can't be in func_encrypt.test, because it requires
# --des-key-file to not be set.
@@ -57,4 +59,17 @@ INSERT t1 VALUES (1),(2);
SELECT CHAR_LENGTH(a), DES_DECRYPT(a) FROM (SELECT _utf8 0xC2A2 AS a FROM t1) AS t2;
DROP TABLE t1;
---Echo End of 10.5 tests
+--echo #
+--echo # End of 10.5 tests
+--echo #
+
+--echo #
+--echo # MDEV-27104 deprecate DES_ENCRYPT/DECRYPT functions
+--echo #
+--echo # just show how to disable deprecation note
+set sql_notes=0;
+select hex(des_encrypt('a'));
+
+--echo #
+--echo # End of 10.10 tests
+--echo #
diff --git a/mysql-test/main/func_encrypt.result b/mysql-test/main/func_encrypt.result
index 97aaed336de..4570ff312cf 100644
--- a/mysql-test/main/func_encrypt.result
+++ b/mysql-test/main/func_encrypt.result
@@ -1,45 +1,125 @@
drop table if exists t1;
create table t1 (x blob);
insert into t1 values (des_encrypt('The quick red fox jumped over the lazy brown dog','The quick red fox jumped over the lazy brown dog'));
+Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
insert into t1 values (des_encrypt('a','The quick red fox jumped over the lazy brown dog'));
+Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
insert into t1 values (des_encrypt('The quick red fox jumped over the lazy brown dog','a'));
+Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
insert into t1 values (des_encrypt('ab','The quick red fox jumped over the lazy brown dog'));
+Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
insert into t1 values (des_encrypt('The quick red fox jumped over the lazy brown dog','ab'));
+Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
insert into t1 values (des_encrypt('abc','The quick red fox jumped over the lazy brown dog'));
+Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
insert into t1 values (des_encrypt('The quick red fox jumped over the lazy brown dog','abc'));
+Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
insert into t1 values (des_encrypt('abcd','The quick red fox jumped over the lazy brown dog'));
+Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
insert into t1 values (des_encrypt('The quick red fox jumped over the lazy brown dog','abcd'));
+Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
insert into t1 values (des_encrypt('abcde','The quick red fox jumped over the lazy brown dog'));
+Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
insert into t1 values (des_encrypt('The quick red fox jumped over the lazy brown dog','abcde'));
+Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
insert into t1 values (des_encrypt('abcdef','The quick red fox jumped over the lazy brown dog'));
+Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
insert into t1 values (des_encrypt('The quick red fox jumped over the lazy brown dog','abcdef'));
+Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
insert into t1 values (des_encrypt('abcdefg','The quick red fox jumped over the lazy brown dog'));
+Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
insert into t1 values (des_encrypt('The quick red fox jumped over the lazy brown dog','abcdefg'));
+Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
insert into t1 values (des_encrypt('abcdefgh','The quick red fox jumped over the lazy brown dog'));
+Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
insert into t1 values (des_encrypt('The quick red fox jumped over the lazy brown dog','abcdefgh'));
+Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
insert into t1 values (des_encrypt('abcdefghi','The quick red fox jumped over the lazy brown dog'));
+Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
insert into t1 values (des_encrypt('The quick red fox jumped over the lazy brown dog','abcdefghi'));
+Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
insert into t1 values (des_encrypt('abcdefghij','The quick red fox jumped over the lazy brown dog'));
+Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
insert into t1 values (des_encrypt('The quick red fox jumped over the lazy brown dog','abcdefghij'));
+Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
insert into t1 values (des_encrypt('abcdefghijk','The quick red fox jumped over the lazy brown dog'));
+Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
insert into t1 values (des_encrypt('The quick red fox jumped over the lazy brown dog','abcdefghijk'));
+Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
insert into t1 values (des_encrypt('The quick red fox jumped over the lazy brown dog','sabakala'));
+Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
insert into t1 values (des_encrypt('quick red fox jumped over the lazy brown dog','sabakala'));
+Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
insert into t1 values (des_encrypt('red fox jumped over the lazy brown dog','sabakala'));
+Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
insert into t1 values (des_encrypt('fox jumped over the lazy brown dog','sabakala'));
+Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
insert into t1 values (des_encrypt('jumped over the lazy brown dog','sabakala'));
+Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
insert into t1 values (des_encrypt('over the lazy brown dog','sabakala'));
+Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
insert into t1 values (des_encrypt('the lazy brown dog','sabakala'));
+Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
insert into t1 values (des_encrypt('lazy brown dog','sabakala'));
+Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
insert into t1 values (des_encrypt('brown dog','sabakala'));
+Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
insert into t1 values (des_encrypt('dog','sabakala'));
+Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
insert into t1 values (des_encrypt('dog!','sabakala'));
+Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
insert into t1 values (des_encrypt('dog!!','sabakala'));
+Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
insert into t1 values (des_encrypt('dog!!!','sabakala'));
+Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
insert into t1 values (des_encrypt('dog!!!!','sabakala'));
+Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
insert into t1 values (des_encrypt('dog!!!!!','sabakala'));
+Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
insert into t1 values (des_encrypt('jumped over the lazy brown dog','sabakala'));
+Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
insert into t1 values (des_encrypt('jumped over the lazy brown dog','sabakala'));
+Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
select hex(x), hex(des_decrypt(x,'sabakala')) from t1;
hex(x) hex(des_decrypt(x,'sabakala'))
FFA185A4656D113445E31D7A5B31BB57671A4CA9E21E63FE5D9C801E0CC7AA6190C13E269C2AE8D8060D3FB3FEA94FEC7FB006B9DCAC3E3E41 NULL
@@ -82,6 +162,8 @@ FF3FC2E42D7C840905 646F6721212121
FF9723312D26D9E6DA01D01A784A64DB9D 646F672121212121
FF8333F3DD21E4488F967E03DD12394813A49F72848BB49473D3CB1C8A1AACF220 6A756D706564206F76657220746865206C617A792062726F776E20646F67
FF8333F3DD21E4488F967E03DD12394813A49F72848BB49473D3CB1C8A1AACF220 6A756D706564206F76657220746865206C617A792062726F776E20646F67
+Warnings:
+Note 1287 'des_decrypt' is deprecated and will be removed in a future release
select des_decrypt(x,'sabakala') as s from t1 having s like '%dog%';
s
The quick red fox jumped over the lazy brown dog
@@ -101,87 +183,145 @@ dog!!!!
dog!!!!!
jumped over the lazy brown dog
jumped over the lazy brown dog
+Warnings:
+Note 1287 'des_decrypt' is deprecated and will be removed in a future release
drop table t1;
select hex(des_encrypt("hello")),des_decrypt(des_encrypt("hello"));
hex(des_encrypt("hello")) des_decrypt(des_encrypt("hello"))
85D6DC8859F9759BBB hello
+Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
+Note 1287 'des_decrypt' is deprecated and will be removed in a future release
select des_decrypt(des_encrypt("hello",4));
des_decrypt(des_encrypt("hello",4))
hello
+Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
+Note 1287 'des_decrypt' is deprecated and will be removed in a future release
select des_decrypt(des_encrypt("hello",'test'),'test');
des_decrypt(des_encrypt("hello",'test'),'test')
hello
+Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
+Note 1287 'des_decrypt' is deprecated and will be removed in a future release
select hex(des_encrypt("hello")),hex(des_encrypt("hello",5)),hex(des_encrypt("hello",'default_password'));
hex(des_encrypt("hello")) hex(des_encrypt("hello",5)) hex(des_encrypt("hello",'default_password'))
85D6DC8859F9759BBB 85D6DC8859F9759BBB FFD6DC8859F9759BBB
+Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
select des_decrypt(des_encrypt("hello"),'default_password');
des_decrypt(des_encrypt("hello"),'default_password')
hello
+Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
+Note 1287 'des_decrypt' is deprecated and will be removed in a future release
select des_decrypt(des_encrypt("hello",4),'password4');
des_decrypt(des_encrypt("hello",4),'password4')
hello
+Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
+Note 1287 'des_decrypt' is deprecated and will be removed in a future release
select des_encrypt("hello",10);
des_encrypt("hello",10)
NULL
Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
Warning 1108 Incorrect parameters to procedure 'des_encrypt'
select des_encrypt(NULL);
des_encrypt(NULL)
NULL
+Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
select des_encrypt(NULL, 10);
des_encrypt(NULL, 10)
NULL
+Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
select des_encrypt(NULL, NULL);
des_encrypt(NULL, NULL)
NULL
+Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
select des_encrypt(10, NULL);
des_encrypt(10, NULL)
NULL
Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
Warning 1108 Incorrect parameters to procedure 'des_encrypt'
select des_encrypt("hello", NULL);
des_encrypt("hello", NULL)
NULL
Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
Warning 1108 Incorrect parameters to procedure 'des_encrypt'
select des_decrypt("hello",10);
des_decrypt("hello",10)
hello
+Warnings:
+Note 1287 'des_decrypt' is deprecated and will be removed in a future release
select des_decrypt(NULL);
des_decrypt(NULL)
NULL
+Warnings:
+Note 1287 'des_decrypt' is deprecated and will be removed in a future release
select des_decrypt(NULL, 10);
des_decrypt(NULL, 10)
NULL
+Warnings:
+Note 1287 'des_decrypt' is deprecated and will be removed in a future release
select des_decrypt(NULL, NULL);
des_decrypt(NULL, NULL)
NULL
+Warnings:
+Note 1287 'des_decrypt' is deprecated and will be removed in a future release
select des_decrypt(10, NULL);
des_decrypt(10, NULL)
10
+Warnings:
+Note 1287 'des_decrypt' is deprecated and will be removed in a future release
select des_decrypt("hello", NULL);
des_decrypt("hello", NULL)
hello
+Warnings:
+Note 1287 'des_decrypt' is deprecated and will be removed in a future release
SET @a=des_decrypt(des_encrypt("hello"));
+Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
+Note 1287 'des_decrypt' is deprecated and will be removed in a future release
flush des_key_file;
select @a = des_decrypt(des_encrypt("hello"));
@a = des_decrypt(des_encrypt("hello"))
1
+Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
+Note 1287 'des_decrypt' is deprecated and will be removed in a future release
select hex("hello");
hex("hello")
68656C6C6F
select hex(des_decrypt(des_encrypt("hello",4),'password2'));
hex(des_decrypt(des_encrypt("hello",4),'password2'))
NULL
+Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
+Note 1287 'des_decrypt' is deprecated and will be removed in a future release
select hex(des_decrypt(des_encrypt("hello","hidden")));
hex(des_decrypt(des_encrypt("hello","hidden")))
NULL
Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
+Note 1287 'des_decrypt' is deprecated and will be removed in a future release
Warning 1108 Incorrect parameters to procedure 'des_decrypt'
explain extended select des_decrypt(des_encrypt("hello",4),'password2'), des_decrypt(des_encrypt("hello","hidden"));
id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
+Note 1287 'des_decrypt' is deprecated and will be removed in a future release
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
+Note 1287 'des_decrypt' is deprecated and will be removed in a future release
Note 1003 select des_decrypt(des_encrypt('hello',4),'password2') AS `des_decrypt(des_encrypt("hello",4),'password2')`,des_decrypt(des_encrypt('hello','hidden')) AS `des_decrypt(des_encrypt("hello","hidden"))`
#
# Start of 10.1 tests
@@ -196,6 +336,7 @@ SELECT * FROM t1 WHERE a=1 AND DES_ENCRYPT('test',a)=_latin1 'abc' COLLATE latin
id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
Note 1003 select `test`.`t1`.`a` AS `a` from `test`.`t1` where `test`.`t1`.`a` = 1 and des_encrypt('test',`test`.`t1`.`a`) = 'abc'
DROP TABLE t1;
#
@@ -212,6 +353,9 @@ a VARCHAR(30),
b BLOB DEFAULT DES_ENCRYPT(a, 'passwd'),
c TEXT DEFAULT DES_DECRYPT(b, 'passwd')
);
+Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
+Note 1287 'des_decrypt' is deprecated and will be removed in a future release
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
diff --git a/mysql-test/main/func_encrypt.test b/mysql-test/main/func_encrypt.test
index 4a8c20e3dbc..306939ef2ac 100644
--- a/mysql-test/main/func_encrypt.test
+++ b/mysql-test/main/func_encrypt.test
@@ -1,4 +1,6 @@
-- source include/have_des.inc
+#double warning for view protocol
+--source include/no_view_protocol.inc
--disable_warnings
drop table if exists t1;
@@ -120,7 +122,9 @@ CREATE TABLE t1 (
b BLOB DEFAULT DES_ENCRYPT(a, 'passwd'),
c TEXT DEFAULT DES_DECRYPT(b, 'passwd')
);
+--disable_warnings
SHOW CREATE TABLE t1;
+--enable_warnings
INSERT INTO t1 (a) VALUES ('test');
SELECT c FROM t1;
DROP TABLE t1;
diff --git a/mysql-test/main/func_encrypt_nossl.result b/mysql-test/main/func_encrypt_nossl.result
index dd45717a22f..b28d4811433 100644
--- a/mysql-test/main/func_encrypt_nossl.result
+++ b/mysql-test/main/func_encrypt_nossl.result
@@ -2,67 +2,87 @@ select des_encrypt("test", 'akeystr');
des_encrypt("test", 'akeystr')
NULL
Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
Warning 1289 The 'des_encrypt' feature is disabled; you need MariaDB built with '--with-ssl' to have it working
select des_encrypt("test", 1);
des_encrypt("test", 1)
NULL
Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
Warning 1289 The 'des_encrypt' feature is disabled; you need MariaDB built with '--with-ssl' to have it working
select des_encrypt("test", 9);
des_encrypt("test", 9)
NULL
Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
Warning 1289 The 'des_encrypt' feature is disabled; you need MariaDB built with '--with-ssl' to have it working
select des_encrypt("test", 100);
des_encrypt("test", 100)
NULL
Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
Warning 1289 The 'des_encrypt' feature is disabled; you need MariaDB built with '--with-ssl' to have it working
select des_encrypt("test", NULL);
des_encrypt("test", NULL)
NULL
Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
Warning 1289 The 'des_encrypt' feature is disabled; you need MariaDB built with '--with-ssl' to have it working
select des_encrypt(NULL, NULL);
des_encrypt(NULL, NULL)
NULL
Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
Warning 1289 The 'des_encrypt' feature is disabled; you need MariaDB built with '--with-ssl' to have it working
select des_decrypt("test", 'anotherkeystr');
des_decrypt("test", 'anotherkeystr')
NULL
Warnings:
+Note 1287 'des_decrypt' is deprecated and will be removed in a future release
Warning 1289 The 'des_decrypt' feature is disabled; you need MariaDB built with '--with-ssl' to have it working
select des_decrypt(1, 1);
des_decrypt(1, 1)
NULL
Warnings:
+Note 1287 'des_decrypt' is deprecated and will be removed in a future release
Warning 1289 The 'des_decrypt' feature is disabled; you need MariaDB built with '--with-ssl' to have it working
select des_decrypt(des_encrypt("test", 'thekey'));
des_decrypt(des_encrypt("test", 'thekey'))
NULL
Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
+Note 1287 'des_decrypt' is deprecated and will be removed in a future release
Warning 1289 The 'des_decrypt' feature is disabled; you need MariaDB built with '--with-ssl' to have it working
select hex(des_encrypt("hello")),des_decrypt(des_encrypt("hello"));
hex(des_encrypt("hello")) des_decrypt(des_encrypt("hello"))
NULL NULL
Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
+Note 1287 'des_decrypt' is deprecated and will be removed in a future release
Warning 1289 The 'des_encrypt' feature is disabled; you need MariaDB built with '--with-ssl' to have it working
Warning 1289 The 'des_decrypt' feature is disabled; you need MariaDB built with '--with-ssl' to have it working
select des_decrypt(des_encrypt("hello",4));
des_decrypt(des_encrypt("hello",4))
NULL
Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
+Note 1287 'des_decrypt' is deprecated and will be removed in a future release
Warning 1289 The 'des_decrypt' feature is disabled; you need MariaDB built with '--with-ssl' to have it working
select des_decrypt(des_encrypt("hello",'test'),'test');
des_decrypt(des_encrypt("hello",'test'),'test')
NULL
Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
+Note 1287 'des_decrypt' is deprecated and will be removed in a future release
Warning 1289 The 'des_decrypt' feature is disabled; you need MariaDB built with '--with-ssl' to have it working
select hex(des_encrypt("hello")),hex(des_encrypt("hello",5)),hex(des_encrypt("hello",'default_password'));
hex(des_encrypt("hello")) hex(des_encrypt("hello",5)) hex(des_encrypt("hello",'default_password'))
NULL NULL NULL
Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
Warning 1289 The 'des_encrypt' feature is disabled; you need MariaDB built with '--with-ssl' to have it working
Warning 1289 The 'des_encrypt' feature is disabled; you need MariaDB built with '--with-ssl' to have it working
Warning 1289 The 'des_encrypt' feature is disabled; you need MariaDB built with '--with-ssl' to have it working
@@ -70,19 +90,28 @@ select des_decrypt(des_encrypt("hello"),'default_password');
des_decrypt(des_encrypt("hello"),'default_password')
NULL
Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
+Note 1287 'des_decrypt' is deprecated and will be removed in a future release
Warning 1289 The 'des_decrypt' feature is disabled; you need MariaDB built with '--with-ssl' to have it working
select des_decrypt(des_encrypt("hello",4),'password4');
des_decrypt(des_encrypt("hello",4),'password4')
NULL
Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
+Note 1287 'des_decrypt' is deprecated and will be removed in a future release
Warning 1289 The 'des_decrypt' feature is disabled; you need MariaDB built with '--with-ssl' to have it working
SET @a=des_decrypt(des_encrypt("hello"));
Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
+Note 1287 'des_decrypt' is deprecated and will be removed in a future release
Warning 1289 The 'des_decrypt' feature is disabled; you need MariaDB built with '--with-ssl' to have it working
flush des_key_file;
select @a = des_decrypt(des_encrypt("hello"));
@a = des_decrypt(des_encrypt("hello"))
NULL
+Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
+Note 1287 'des_decrypt' is deprecated and will be removed in a future release
select hex("hello");
hex("hello")
68656C6C6F
@@ -90,9 +119,13 @@ select hex(des_decrypt(des_encrypt("hello",4),'password2'));
hex(des_decrypt(des_encrypt("hello",4),'password2'))
NULL
Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
+Note 1287 'des_decrypt' is deprecated and will be removed in a future release
Warning 1289 The 'des_decrypt' feature is disabled; you need MariaDB built with '--with-ssl' to have it working
select hex(des_decrypt(des_encrypt("hello","hidden")));
hex(des_decrypt(des_encrypt("hello","hidden")))
NULL
Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
+Note 1287 'des_decrypt' is deprecated and will be removed in a future release
Warning 1289 The 'des_decrypt' feature is disabled; you need MariaDB built with '--with-ssl' to have it working
diff --git a/mysql-test/main/func_encrypt_nossl.test b/mysql-test/main/func_encrypt_nossl.test
index 2dafaa671c4..fbaffe7850c 100644
--- a/mysql-test/main/func_encrypt_nossl.test
+++ b/mysql-test/main/func_encrypt_nossl.test
@@ -1,4 +1,4 @@
--- source include/not_ssl.inc
+-- source include/is_embedded.inc
#
# Test output from des_encrypt and des_decrypt when server is
diff --git a/mysql-test/main/func_encrypt_ucs2.result b/mysql-test/main/func_encrypt_ucs2.result
index 989d593da8f..ab04c3b4621 100644
--- a/mysql-test/main/func_encrypt_ucs2.result
+++ b/mysql-test/main/func_encrypt_ucs2.result
@@ -4,16 +4,22 @@
SELECT CHAR_LENGTH(DES_ENCRYPT(0, CHAR('1' USING ucs2)));
CHAR_LENGTH(DES_ENCRYPT(0, CHAR('1' USING ucs2)))
9
+Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
SELECT CONVERT(DES_ENCRYPT(0, CHAR('1' USING ucs2)),UNSIGNED);
CONVERT(DES_ENCRYPT(0, CHAR('1' USING ucs2)),UNSIGNED)
0
Warnings:
+Note 1287 'des_encrypt' is deprecated and will be removed in a future release
Warning 1292 Truncated incorrect INTEGER value: '\xFFT\xDCiK\x92j\xE6\xFC'
SELECT CHAR_LENGTH(DES_DECRYPT(0xFF0DC9FC9537CA75F4, CHAR('1' USING ucs2))) as a;
a
4
+Warnings:
+Note 1287 'des_decrypt' is deprecated and will be removed in a future release
SELECT CONVERT(DES_DECRYPT(0xFF0DC9FC9537CA75F4, CHAR('1' using ucs2)), UNSIGNED) as a;
a
0
Warnings:
+Note 1287 'des_decrypt' is deprecated and will be removed in a future release
Warning 1292 Truncated incorrect INTEGER value: 'test'
diff --git a/mysql-test/main/func_encrypt_ucs2.test b/mysql-test/main/func_encrypt_ucs2.test
index 088af7ffee7..aaf233fa031 100644
--- a/mysql-test/main/func_encrypt_ucs2.test
+++ b/mysql-test/main/func_encrypt_ucs2.test
@@ -1,5 +1,7 @@
-- source include/have_des.inc
-- source include/have_ucs2.inc
+#double warning for view protocol
+--source include/no_view_protocol.inc
--echo #
--echo # Bug#59648 my_strtoll10_mb2: Assertion `(*endptr - s) % 2 == 0' failed.
diff --git a/mysql-test/main/func_hybrid_type.result b/mysql-test/main/func_hybrid_type.result
index dde6cfa4ed8..550f61d46e8 100644
--- a/mysql-test/main/func_hybrid_type.result
+++ b/mysql-test/main/func_hybrid_type.result
@@ -2310,15 +2310,15 @@ LEAST(b, b) AS least____b_b,
GREATEST(b, b) AS greatest_b_b
FROM t1;
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
-def test t1 t1 a ___________a 7 19 19 N 9377 0 63
+def test t1 t1 a ___________a 7 19 19 Y 160 0 63
def case_______a 7 19 19 Y 128 0 63
-def case_____a_a 7 19 19 N 129 0 63
-def coalesce___a 7 19 19 N 129 0 63
-def coalesce_a_a 7 19 19 N 129 0 63
-def if_______a_a 7 19 19 N 129 0 63
-def ifnull___a_a 7 19 19 N 129 0 63
-def least____a_a 7 19 19 N 129 0 63
-def greatest_a_a 7 19 19 N 129 0 63
+def case_____a_a 7 19 19 Y 128 0 63
+def coalesce___a 7 19 19 Y 128 0 63
+def coalesce_a_a 7 19 19 Y 128 0 63
+def if_______a_a 7 19 19 Y 128 0 63
+def ifnull___a_a 7 19 19 Y 128 0 63
+def least____a_a 7 19 19 Y 128 0 63
+def greatest_a_a 7 19 19 Y 128 0 63
def test t1 t1 b ___________b 11 10 8 Y 128 0 63
def case_______b 11 10 8 Y 128 0 63
def case_____b_b 11 10 8 Y 128 0 63
@@ -2368,7 +2368,7 @@ def coalesce_b_a 12 19 19 Y 128 0 63
def if_______a_b 12 19 19 Y 128 0 63
def if_______b_a 12 19 19 Y 128 0 63
def ifnull___a_b 12 19 19 Y 128 0 63
-def ifnull___b_a 12 19 19 N 129 0 63
+def ifnull___b_a 12 19 19 Y 128 0 63
def least____a_b 12 19 19 Y 128 0 63
def least____b_a 12 19 19 Y 128 0 63
def greatest_a_b 12 19 19 Y 128 0 63
@@ -2409,15 +2409,15 @@ FROM t1;
SHOW CREATE TABLE t2;
Table Create Table
t2 CREATE TABLE `t2` (
- `___________a` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `___________a` timestamp NULL DEFAULT NULL,
`case_______a` timestamp NULL DEFAULT NULL,
- `case_____a_a` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
- `coalesce___a` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
- `coalesce_a_a` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
- `if_______a_a` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
- `ifnull___a_a` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
- `least____a_a` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
- `greatest_a_a` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `case_____a_a` timestamp NULL DEFAULT NULL,
+ `coalesce___a` timestamp NULL DEFAULT NULL,
+ `coalesce_a_a` timestamp NULL DEFAULT NULL,
+ `if_______a_a` timestamp NULL DEFAULT NULL,
+ `ifnull___a_a` timestamp NULL DEFAULT NULL,
+ `least____a_a` timestamp NULL DEFAULT NULL,
+ `greatest_a_a` timestamp NULL DEFAULT NULL,
`___________b` time DEFAULT NULL,
`case_______b` time DEFAULT NULL,
`case_____b_b` time DEFAULT NULL,
@@ -2455,7 +2455,7 @@ t2 CREATE TABLE `t2` (
`if_______a_b` datetime DEFAULT NULL,
`if_______b_a` datetime DEFAULT NULL,
`ifnull___a_b` datetime DEFAULT NULL,
- `ifnull___b_a` datetime NOT NULL,
+ `ifnull___b_a` datetime DEFAULT NULL,
`least____a_b` datetime DEFAULT NULL,
`least____b_a` datetime DEFAULT NULL,
`greatest_a_b` datetime DEFAULT NULL,
@@ -3058,12 +3058,12 @@ CREATE TABLE t1 (a TIMESTAMP);
INSERT INTO t1 VALUES ('2010-01-01 10:20:30');
SELECT GREATEST(a,a) FROM t1;
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
-def GREATEST(a,a) 7 19 19 N 129 0 63
+def GREATEST(a,a) 7 19 19 Y 128 0 63
GREATEST(a,a)
2010-01-01 10:20:30
SELECT COALESCE(a,a) FROM t1;
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
-def COALESCE(a,a) 7 19 19 N 129 0 63
+def COALESCE(a,a) 7 19 19 Y 128 0 63
COALESCE(a,a)
2010-01-01 10:20:30
DROP TABLE t1;
@@ -3072,7 +3072,7 @@ CREATE TABLE t2 AS SELECT LEAST(a,a),LEAST(b,b),LEAST(a,b) FROM t1;
SHOW CREATE TABLE t2;
Table Create Table
t2 CREATE TABLE `t2` (
- `LEAST(a,a)` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `LEAST(a,a)` timestamp NULL DEFAULT NULL,
`LEAST(b,b)` datetime DEFAULT NULL,
`LEAST(a,b)` datetime DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
diff --git a/mysql-test/main/func_math.result b/mysql-test/main/func_math.result
index 746dd9169ca..a465199c49c 100644
--- a/mysql-test/main/func_math.result
+++ b/mysql-test/main/func_math.result
@@ -3648,7 +3648,7 @@ DROP TABLE t1,t2;
#
# MDEV-21278 Assertion `is_unsigned() == attr.unsigned_flag' or Assertion `field.is_sane()' failed
#
-CREATE TABLE t1 (a TIMESTAMP);
+CREATE TABLE t1 (a TIMESTAMP NOT NULL DEFAULT NOW());
INSERT INTO t1 VALUES (NULL),(NULL);
SET SESSION SQL_MODE= 'NO_UNSIGNED_SUBTRACTION';
SELECT DISTINCT UUID_SHORT() - a FROM t1;
@@ -3663,7 +3663,7 @@ t2 CREATE TABLE `t2` (
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t2, t1;
SET sql_mode=DEFAULT;
-CREATE TABLE t1 (a TIMESTAMP);
+CREATE TABLE t1 (a TIMESTAMP NOT NULL DEFAULT NOW());
INSERT INTO t1 VALUES (NULL),(NULL);
SET SESSION SQL_MODE= 'NO_UNSIGNED_SUBTRACTION';
SELECT UUID_SHORT() - a FROM t1;
diff --git a/mysql-test/main/func_math.test b/mysql-test/main/func_math.test
index 02c5b872ea5..d4145a71912 100644
--- a/mysql-test/main/func_math.test
+++ b/mysql-test/main/func_math.test
@@ -1931,7 +1931,7 @@ DROP TABLE t1,t2;
--echo # MDEV-21278 Assertion `is_unsigned() == attr.unsigned_flag' or Assertion `field.is_sane()' failed
--echo #
-CREATE TABLE t1 (a TIMESTAMP);
+CREATE TABLE t1 (a TIMESTAMP NOT NULL DEFAULT NOW());
INSERT INTO t1 VALUES (NULL),(NULL);
SET SESSION SQL_MODE= 'NO_UNSIGNED_SUBTRACTION';
--replace_column 1 xxx
@@ -1941,7 +1941,7 @@ SHOW CREATE TABLE t2;
DROP TABLE t2, t1;
SET sql_mode=DEFAULT;
-CREATE TABLE t1 (a TIMESTAMP);
+CREATE TABLE t1 (a TIMESTAMP NOT NULL DEFAULT NOW());
INSERT INTO t1 VALUES (NULL),(NULL);
SET SESSION SQL_MODE= 'NO_UNSIGNED_SUBTRACTION';
--replace_column 1 xxx
diff --git a/mysql-test/main/func_str.result b/mysql-test/main/func_str.result
index 58914338aa6..d43287de53b 100644
--- a/mysql-test/main/func_str.result
+++ b/mysql-test/main/func_str.result
@@ -1,4 +1,3 @@
-drop table if exists t1,t2;
set @save_max_allowed_packet=@@global.max_allowed_packet;
set global max_allowed_packet=1048576;
connect conn1,localhost,root,,;
@@ -5274,3 +5273,178 @@ f
#
# End of 10.4 tests
#
+#
+# MDEV-25704 Function random_bytes
+#
+create table t1 as select random_bytes(100);
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `random_bytes(100)` varbinary(100) DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+drop table t1;
+# The sequence starts at 17 so that the probability of test failure is small enough (about 2^(-136))
+select count(*) from seq_17_to_1024 where random_bytes(seq) <=> random_bytes(seq);
+count(*)
+0
+select count(*) from seq_1_to_1024 where length(random_bytes(seq)) = seq;
+count(*)
+1024
+select random_bytes(`0`),`1` from (values (0,1),(null,2),(0,3)) t1;
+random_bytes(`0`) 1
+ 1
+NULL 2
+ 3
+#
+# Test NULL output for NULL input
+#
+SELECT random_bytes(NULL);
+random_bytes(NULL)
+NULL
+#
+# Test For values outside range from 1 to 1024 return NULL
+#
+SELECT random_bytes(0);
+random_bytes(0)
+
+SELECT random_bytes(-1);
+random_bytes(-1)
+NULL
+SELECT random_bytes(-100);
+random_bytes(-100)
+NULL
+SELECT random_bytes(-26);
+random_bytes(-26)
+NULL
+SELECT random_bytes(-132);
+random_bytes(-132)
+NULL
+SELECT random_bytes(1025);
+random_bytes(1025)
+NULL
+SELECT random_bytes(11111);
+random_bytes(11111)
+NULL
+SELECT random_bytes(2056);
+random_bytes(2056)
+NULL
+SELECT length(random_bytes(10.0));
+length(random_bytes(10.0))
+10
+SELECT length(random_bytes(10.1));
+length(random_bytes(10.1))
+10
+SELECT length(random_bytes(+1e1));
+length(random_bytes(+1e1))
+10
+SELECT length(random_bytes(time("00:01")));
+length(random_bytes(time("00:01")))
+100
+SELECT length(random_bytes("10.0"));
+length(random_bytes("10.0"))
+10
+Warnings:
+Warning 1292 Truncated incorrect INTEGER value: '10.0'
+Warning 1292 Truncated incorrect INTEGER value: '10.0'
+SELECT length(random_bytes("10.1"));
+length(random_bytes("10.1"))
+10
+Warnings:
+Warning 1292 Truncated incorrect INTEGER value: '10.1'
+Warning 1292 Truncated incorrect INTEGER value: '10.1'
+SELECT length(random_bytes("+1e1"));
+length(random_bytes("+1e1"))
+1
+Warnings:
+Warning 1292 Truncated incorrect INTEGER value: '+1e1'
+Warning 1292 Truncated incorrect INTEGER value: '+1e1'
+SELECT length(random_bytes("10.0bunnies"));
+length(random_bytes("10.0bunnies"))
+10
+Warnings:
+Warning 1292 Truncated incorrect INTEGER value: '10.0bunnies'
+Warning 1292 Truncated incorrect INTEGER value: '10.0bunnies'
+SELECT length(random_bytes("10.1chickens"));
+length(random_bytes("10.1chickens"))
+10
+Warnings:
+Warning 1292 Truncated incorrect INTEGER value: '10.1chickens'
+Warning 1292 Truncated incorrect INTEGER value: '10.1chickens'
+SELECT length(random_bytes("+1e1rabbits"));
+length(random_bytes("+1e1rabbits"))
+1
+Warnings:
+Warning 1292 Truncated incorrect INTEGER value: '+1e1rabbits'
+Warning 1292 Truncated incorrect INTEGER value: '+1e1rabbits'
+create procedure p1()
+begin
+declare r ROW (c1 INT);
+set r.c1= 10;
+select random_bytes(r);
+end|
+call p1();
+ERROR 21000: Operand should contain 1 column(s)
+drop procedure p1;
+#
+# Test For invalid argument return NULL
+#
+SELECT random_bytes('s');
+random_bytes('s')
+
+Warnings:
+Warning 1292 Truncated incorrect INTEGER value: 's'
+Warning 1292 Truncated incorrect INTEGER value: 's'
+SELECT random_bytes('r');
+random_bytes('r')
+
+Warnings:
+Warning 1292 Truncated incorrect INTEGER value: 'r'
+Warning 1292 Truncated incorrect INTEGER value: 'r'
+SELECT random_bytes('res');
+random_bytes('res')
+
+Warnings:
+Warning 1292 Truncated incorrect INTEGER value: 'res'
+Warning 1292 Truncated incorrect INTEGER value: 'res'
+SELECT random_bytes('test');
+random_bytes('test')
+
+Warnings:
+Warning 1292 Truncated incorrect INTEGER value: 'test'
+Warning 1292 Truncated incorrect INTEGER value: 'test'
+#
+# MDEV-29108 RANDOM_BYTES - assertion in Create_tmp_table::finalize
+#
+CREATE TABLE t (a INT);
+INSERT INTO t VALUES (1),(2);
+SELECT RANDOM_BYTES(-10) f1, IFNULL(a,1) f2 FROM t GROUP BY f1, f2;
+f1 f2
+NULL 1
+NULL 2
+DROP TABLE t;
+#
+# MDEV-29154 Excessive warnings upon a call to RANDOM_BYTES
+#
+select length(random_bytes(cast('x' as unsigned)+1));
+length(random_bytes(cast('x' as unsigned)+1))
+1
+Warnings:
+Warning 1292 Truncated incorrect INTEGER value: 'x'
+Warning 1292 Truncated incorrect INTEGER value: 'x'
+select repeat('.', cast('x' as unsigned)+1);
+repeat('.', cast('x' as unsigned)+1)
+.
+Warnings:
+Warning 1292 Truncated incorrect INTEGER value: 'x'
+Warning 1292 Truncated incorrect INTEGER value: 'x'
+#
+# MDEV-23149 Server crashes in my_convert / ErrConvString::ptr / Item_char_typecast::check_truncation_with_warn
+#
+select "a" in ("abc", (convert(random_bytes(8) ,binary(2))));
+"a" in ("abc", (convert(random_bytes(8) ,binary(2))))
+0
+Warnings:
+Warning 1292 Truncated incorrect BINARY(2) value: '...random bytes...'
+#
+# End of 10.10 tests
+#
diff --git a/mysql-test/main/func_str.test b/mysql-test/main/func_str.test
index e3a98558967..377470ca60e 100644
--- a/mysql-test/main/func_str.test
+++ b/mysql-test/main/func_str.test
@@ -1,10 +1,7 @@
# Description
# -----------
# Testing string functions
-
---disable_warnings
-drop table if exists t1,t2;
---enable_warnings
+--source include/have_sequence.inc
set @save_max_allowed_packet=@@global.max_allowed_packet;
set global max_allowed_packet=1048576;
@@ -2320,3 +2317,106 @@ SELECT GROUP_CONCAT( UpdateXML( '<a>new year</a>', '/a', '2019-01-01 00:00:00' )
--echo #
--echo # End of 10.4 tests
--echo #
+
+--echo #
+--echo # MDEV-25704 Function random_bytes
+--echo #
+
+create table t1 as select random_bytes(100);
+show create table t1;
+drop table t1;
+
+--echo # The sequence starts at 17 so that the probability of test failure is small enough (about 2^(-136))
+select count(*) from seq_17_to_1024 where random_bytes(seq) <=> random_bytes(seq);
+
+select count(*) from seq_1_to_1024 where length(random_bytes(seq)) = seq;
+
+select random_bytes(`0`),`1` from (values (0,1),(null,2),(0,3)) t1;
+
+--echo #
+--echo # Test NULL output for NULL input
+--echo #
+
+SELECT random_bytes(NULL);
+
+--echo #
+--echo # Test For values outside range from 1 to 1024 return NULL
+--echo #
+
+SELECT random_bytes(0);
+SELECT random_bytes(-1);
+SELECT random_bytes(-100);
+SELECT random_bytes(-26);
+SELECT random_bytes(-132);
+SELECT random_bytes(1025);
+SELECT random_bytes(11111);
+SELECT random_bytes(2056);
+
+#double warning for view protocol
+--disable_view_protocol
+SELECT length(random_bytes(10.0));
+SELECT length(random_bytes(10.1));
+SELECT length(random_bytes(+1e1));
+SELECT length(random_bytes(time("00:01")));
+SELECT length(random_bytes("10.0"));
+SELECT length(random_bytes("10.1"));
+SELECT length(random_bytes("+1e1"));
+SELECT length(random_bytes("10.0bunnies"));
+SELECT length(random_bytes("10.1chickens"));
+SELECT length(random_bytes("+1e1rabbits"));
+--enable_view_protocol
+
+--delimiter |
+create procedure p1()
+begin
+ declare r ROW (c1 INT);
+ set r.c1= 10;
+ select random_bytes(r);
+end|
+--delimiter ;
+--error 1241
+call p1();
+drop procedure p1;
+
+--echo #
+--echo # Test For invalid argument return NULL
+--echo #
+#double warning for view protocol
+--disable_view_protocol
+SELECT random_bytes('s');
+SELECT random_bytes('r');
+SELECT random_bytes('res');
+SELECT random_bytes('test');
+--enable_view_protocol
+
+--echo #
+--echo # MDEV-29108 RANDOM_BYTES - assertion in Create_tmp_table::finalize
+--echo #
+
+CREATE TABLE t (a INT);
+INSERT INTO t VALUES (1),(2);
+SELECT RANDOM_BYTES(-10) f1, IFNULL(a,1) f2 FROM t GROUP BY f1, f2;
+
+# Cleanup
+DROP TABLE t;
+
+--echo #
+--echo # MDEV-29154 Excessive warnings upon a call to RANDOM_BYTES
+--echo #
+#double warning for view protocol
+--disable_view_protocol
+select length(random_bytes(cast('x' as unsigned)+1));
+select repeat('.', cast('x' as unsigned)+1);
+--enable_view_protocol
+
+--echo #
+--echo # MDEV-23149 Server crashes in my_convert / ErrConvString::ptr / Item_char_typecast::check_truncation_with_warn
+--echo #
+#double warning for view protocol
+--disable_view_protocol
+--replace_regex /'.*'/'...random bytes...'/
+select "a" in ("abc", (convert(random_bytes(8) ,binary(2))));
+--enable_view_protocol
+--echo #
+--echo # End of 10.10 tests
+--echo #
diff --git a/mysql-test/main/greedy_optimizer.result b/mysql-test/main/greedy_optimizer.result
index d7c7e603c68..55812cb6ff9 100644
--- a/mysql-test/main/greedy_optimizer.result
+++ b/mysql-test/main/greedy_optimizer.result
@@ -155,9 +155,9 @@ Last_query_cost 844.037037
explain select t1.c11 from t7, t6, t5, t4, t3, t2, t1 where t1.c11 = t2.c21 and t1.c12 = t3.c31 and t1.c13 = t4.c41 and t1.c14 = t5.c51 and t1.c15 = t6.c61 and t1.c16 = t7.c71;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 ALL PRIMARY NULL NULL NULL 3 Using where
-1 SIMPLE t3 eq_ref PRIMARY PRIMARY 4 test.t1.c12 1 Using index
-1 SIMPLE t5 eq_ref PRIMARY PRIMARY 4 test.t1.c14 1 Using index
1 SIMPLE t7 eq_ref PRIMARY PRIMARY 4 test.t1.c16 1 Using index
+1 SIMPLE t5 eq_ref PRIMARY PRIMARY 4 test.t1.c14 1 Using index
+1 SIMPLE t3 eq_ref PRIMARY PRIMARY 4 test.t1.c12 1 Using index
1 SIMPLE t2 ALL NULL NULL NULL NULL 6 Using where; Using join buffer (flat, BNL join)
1 SIMPLE t4 ALL NULL NULL NULL NULL 12 Using where; Using join buffer (flat, BNL join)
1 SIMPLE t6 ALL NULL NULL NULL NULL 18 Using where; Using join buffer (flat, BNL join)
@@ -179,9 +179,9 @@ Last_query_cost 844.037037
explain select t1.c11 from t7, t6, t5, t4, t3, t2, t1 where t1.c11 = t2.c21 and t1.c12 = t3.c31 and t1.c13 = t4.c41 and t1.c14 = t5.c51 and t1.c15 = t6.c61 and t1.c16 = t7.c71 and t2.c22 = t3.c32 and t2.c23 = t4.c42 and t2.c24 = t5.c52 and t2.c25 = t6.c62 and t2.c26 = t7.c72 and t3.c33 = t4.c43 and t3.c34 = t5.c53 and t3.c35 = t6.c63 and t3.c36 = t7.c73 and t4.c42 = t5.c54 and t4.c43 = t6.c64 and t4.c44 = t7.c74 and t5.c52 = t6.c65 and t5.c53 = t7.c75 and t6.c62 = t7.c76;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 ALL PRIMARY NULL NULL NULL 3 Using where
-1 SIMPLE t3 eq_ref PRIMARY PRIMARY 4 test.t1.c12 1
+1 SIMPLE t7 eq_ref PRIMARY PRIMARY 4 test.t1.c16 1
1 SIMPLE t5 eq_ref PRIMARY PRIMARY 4 test.t1.c14 1 Using where
-1 SIMPLE t7 eq_ref PRIMARY PRIMARY 4 test.t1.c16 1 Using where
+1 SIMPLE t3 eq_ref PRIMARY PRIMARY 4 test.t1.c12 1 Using where
1 SIMPLE t2 ALL NULL NULL NULL NULL 6 Using where; Using join buffer (flat, BNL join)
1 SIMPLE t4 ALL NULL NULL NULL NULL 12 Using where; Using join buffer (flat, BNL join)
1 SIMPLE t6 ALL NULL NULL NULL NULL 18 Using where; Using join buffer (flat, BNL join)
@@ -237,9 +237,9 @@ id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t2 ALL NULL NULL NULL NULL 6 Using where
1 SIMPLE t4 ALL NULL NULL NULL NULL 12 Using join buffer (flat, BNL join)
1 SIMPLE t1 eq_ref PRIMARY PRIMARY 4 test.t2.c21 1 Using where
-1 SIMPLE t3 eq_ref PRIMARY PRIMARY 4 test.t1.c12 1 Using index
-1 SIMPLE t5 eq_ref PRIMARY PRIMARY 4 test.t1.c14 1 Using index
1 SIMPLE t7 eq_ref PRIMARY PRIMARY 4 test.t1.c16 1 Using index
+1 SIMPLE t5 eq_ref PRIMARY PRIMARY 4 test.t1.c14 1 Using index
+1 SIMPLE t3 eq_ref PRIMARY PRIMARY 4 test.t1.c12 1 Using index
1 SIMPLE t6 ALL NULL NULL NULL NULL 18 Using where; Using join buffer (flat, BNL join)
show status like 'Last_query_cost';
Variable_name Value
@@ -261,9 +261,9 @@ id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t2 ALL NULL NULL NULL NULL 6 Using where
1 SIMPLE t4 ALL NULL NULL NULL NULL 12 Using where; Using join buffer (flat, BNL join)
1 SIMPLE t1 eq_ref PRIMARY PRIMARY 4 test.t2.c21 1 Using where
-1 SIMPLE t3 eq_ref PRIMARY PRIMARY 4 test.t1.c12 1 Using where
-1 SIMPLE t5 eq_ref PRIMARY PRIMARY 4 test.t1.c14 1 Using where
1 SIMPLE t7 eq_ref PRIMARY PRIMARY 4 test.t1.c16 1 Using where
+1 SIMPLE t5 eq_ref PRIMARY PRIMARY 4 test.t1.c14 1 Using where
+1 SIMPLE t3 eq_ref PRIMARY PRIMARY 4 test.t1.c12 1 Using where
1 SIMPLE t6 ALL NULL NULL NULL NULL 18 Using where; Using join buffer (flat, BNL join)
show status like 'Last_query_cost';
Variable_name Value
@@ -311,9 +311,9 @@ Last_query_cost 844.037037
explain select t1.c11 from t7, t6, t5, t4, t3, t2, t1 where t1.c11 = t2.c21 and t1.c12 = t3.c31 and t1.c13 = t4.c41 and t1.c14 = t5.c51 and t1.c15 = t6.c61 and t1.c16 = t7.c71;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 ALL PRIMARY NULL NULL NULL 3 Using where
-1 SIMPLE t3 eq_ref PRIMARY PRIMARY 4 test.t1.c12 1 Using index
-1 SIMPLE t5 eq_ref PRIMARY PRIMARY 4 test.t1.c14 1 Using index
1 SIMPLE t7 eq_ref PRIMARY PRIMARY 4 test.t1.c16 1 Using index
+1 SIMPLE t5 eq_ref PRIMARY PRIMARY 4 test.t1.c14 1 Using index
+1 SIMPLE t3 eq_ref PRIMARY PRIMARY 4 test.t1.c12 1 Using index
1 SIMPLE t2 ALL NULL NULL NULL NULL 6 Using where; Using join buffer (flat, BNL join)
1 SIMPLE t4 ALL NULL NULL NULL NULL 12 Using where; Using join buffer (flat, BNL join)
1 SIMPLE t6 ALL NULL NULL NULL NULL 18 Using where; Using join buffer (flat, BNL join)
@@ -335,9 +335,9 @@ Last_query_cost 844.037037
explain select t1.c11 from t7, t6, t5, t4, t3, t2, t1 where t1.c11 = t2.c21 and t1.c12 = t3.c31 and t1.c13 = t4.c41 and t1.c14 = t5.c51 and t1.c15 = t6.c61 and t1.c16 = t7.c71 and t2.c22 = t3.c32 and t2.c23 = t4.c42 and t2.c24 = t5.c52 and t2.c25 = t6.c62 and t2.c26 = t7.c72 and t3.c33 = t4.c43 and t3.c34 = t5.c53 and t3.c35 = t6.c63 and t3.c36 = t7.c73 and t4.c42 = t5.c54 and t4.c43 = t6.c64 and t4.c44 = t7.c74 and t5.c52 = t6.c65 and t5.c53 = t7.c75 and t6.c62 = t7.c76;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 ALL PRIMARY NULL NULL NULL 3 Using where
-1 SIMPLE t3 eq_ref PRIMARY PRIMARY 4 test.t1.c12 1
+1 SIMPLE t7 eq_ref PRIMARY PRIMARY 4 test.t1.c16 1
1 SIMPLE t5 eq_ref PRIMARY PRIMARY 4 test.t1.c14 1 Using where
-1 SIMPLE t7 eq_ref PRIMARY PRIMARY 4 test.t1.c16 1 Using where
+1 SIMPLE t3 eq_ref PRIMARY PRIMARY 4 test.t1.c12 1 Using where
1 SIMPLE t2 ALL NULL NULL NULL NULL 6 Using where; Using join buffer (flat, BNL join)
1 SIMPLE t4 ALL NULL NULL NULL NULL 12 Using where; Using join buffer (flat, BNL join)
1 SIMPLE t6 ALL NULL NULL NULL NULL 18 Using where; Using join buffer (flat, BNL join)
@@ -389,9 +389,9 @@ id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t2 ALL NULL NULL NULL NULL 6 Using where
1 SIMPLE t4 ALL NULL NULL NULL NULL 12 Using join buffer (flat, BNL join)
1 SIMPLE t1 eq_ref PRIMARY PRIMARY 4 test.t2.c21 1 Using where
-1 SIMPLE t3 eq_ref PRIMARY PRIMARY 4 test.t1.c12 1 Using index
-1 SIMPLE t5 eq_ref PRIMARY PRIMARY 4 test.t1.c14 1 Using index
1 SIMPLE t7 eq_ref PRIMARY PRIMARY 4 test.t1.c16 1 Using index
+1 SIMPLE t5 eq_ref PRIMARY PRIMARY 4 test.t1.c14 1 Using index
+1 SIMPLE t3 eq_ref PRIMARY PRIMARY 4 test.t1.c12 1 Using index
1 SIMPLE t6 ALL NULL NULL NULL NULL 18 Using where; Using join buffer (flat, BNL join)
show status like 'Last_query_cost';
Variable_name Value
@@ -413,17 +413,17 @@ id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t2 ALL NULL NULL NULL NULL 6 Using where
1 SIMPLE t4 ALL NULL NULL NULL NULL 12 Using where; Using join buffer (flat, BNL join)
1 SIMPLE t1 eq_ref PRIMARY PRIMARY 4 test.t2.c21 1 Using where
-1 SIMPLE t3 eq_ref PRIMARY PRIMARY 4 test.t1.c12 1 Using where
-1 SIMPLE t5 eq_ref PRIMARY PRIMARY 4 test.t1.c14 1 Using where
1 SIMPLE t7 eq_ref PRIMARY PRIMARY 4 test.t1.c16 1 Using where
+1 SIMPLE t5 eq_ref PRIMARY PRIMARY 4 test.t1.c14 1 Using where
+1 SIMPLE t3 eq_ref PRIMARY PRIMARY 4 test.t1.c12 1 Using where
1 SIMPLE t6 ALL NULL NULL NULL NULL 18 Using where; Using join buffer (flat, BNL join)
show status like 'Last_query_cost';
Variable_name Value
Last_query_cost 362.618727
-set optimizer_prune_level=1;
+set optimizer_prune_level=2;
select @@optimizer_prune_level;
@@optimizer_prune_level
-1
+2
set optimizer_search_depth=0;
select @@optimizer_search_depth;
@@optimizer_search_depth
@@ -467,9 +467,9 @@ Last_query_cost 844.037037
explain select t1.c11 from t7, t6, t5, t4, t3, t2, t1 where t1.c11 = t2.c21 and t1.c12 = t3.c31 and t1.c13 = t4.c41 and t1.c14 = t5.c51 and t1.c15 = t6.c61 and t1.c16 = t7.c71;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 ALL PRIMARY NULL NULL NULL 3 Using where
+1 SIMPLE t7 eq_ref PRIMARY PRIMARY 4 test.t1.c16 1 Using index
1 SIMPLE t3 eq_ref PRIMARY PRIMARY 4 test.t1.c12 1 Using index
1 SIMPLE t5 eq_ref PRIMARY PRIMARY 4 test.t1.c14 1 Using index
-1 SIMPLE t7 eq_ref PRIMARY PRIMARY 4 test.t1.c16 1 Using index
1 SIMPLE t2 ALL NULL NULL NULL NULL 6 Using where; Using join buffer (flat, BNL join)
1 SIMPLE t4 ALL NULL NULL NULL NULL 12 Using where; Using join buffer (flat, BNL join)
1 SIMPLE t6 ALL NULL NULL NULL NULL 18 Using where; Using join buffer (flat, BNL join)
@@ -491,9 +491,9 @@ Last_query_cost 844.037037
explain select t1.c11 from t7, t6, t5, t4, t3, t2, t1 where t1.c11 = t2.c21 and t1.c12 = t3.c31 and t1.c13 = t4.c41 and t1.c14 = t5.c51 and t1.c15 = t6.c61 and t1.c16 = t7.c71 and t2.c22 = t3.c32 and t2.c23 = t4.c42 and t2.c24 = t5.c52 and t2.c25 = t6.c62 and t2.c26 = t7.c72 and t3.c33 = t4.c43 and t3.c34 = t5.c53 and t3.c35 = t6.c63 and t3.c36 = t7.c73 and t4.c42 = t5.c54 and t4.c43 = t6.c64 and t4.c44 = t7.c74 and t5.c52 = t6.c65 and t5.c53 = t7.c75 and t6.c62 = t7.c76;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 ALL PRIMARY NULL NULL NULL 3 Using where
-1 SIMPLE t3 eq_ref PRIMARY PRIMARY 4 test.t1.c12 1
+1 SIMPLE t7 eq_ref PRIMARY PRIMARY 4 test.t1.c16 1
+1 SIMPLE t3 eq_ref PRIMARY PRIMARY 4 test.t1.c12 1 Using where
1 SIMPLE t5 eq_ref PRIMARY PRIMARY 4 test.t1.c14 1 Using where
-1 SIMPLE t7 eq_ref PRIMARY PRIMARY 4 test.t1.c16 1 Using where
1 SIMPLE t2 ALL NULL NULL NULL NULL 6 Using where; Using join buffer (flat, BNL join)
1 SIMPLE t4 ALL NULL NULL NULL NULL 12 Using where; Using join buffer (flat, BNL join)
1 SIMPLE t6 ALL NULL NULL NULL NULL 18 Using where; Using join buffer (flat, BNL join)
@@ -543,9 +543,9 @@ Last_query_cost 844.037037
explain select t1.c11 from t7, t6, t5, t4, t3, t2, t1 where t1.c11 = t2.c21 and t1.c12 = t3.c31 and t1.c13 = t4.c41 and t1.c14 = t5.c51 and t1.c15 = t6.c61 and t1.c16 = t7.c71;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 ALL PRIMARY NULL NULL NULL 3 Using where
+1 SIMPLE t7 eq_ref PRIMARY PRIMARY 4 test.t1.c16 1 Using index
1 SIMPLE t3 eq_ref PRIMARY PRIMARY 4 test.t1.c12 1 Using index
1 SIMPLE t5 eq_ref PRIMARY PRIMARY 4 test.t1.c14 1 Using index
-1 SIMPLE t7 eq_ref PRIMARY PRIMARY 4 test.t1.c16 1 Using index
1 SIMPLE t2 ALL NULL NULL NULL NULL 6 Using where; Using join buffer (flat, BNL join)
1 SIMPLE t4 ALL NULL NULL NULL NULL 12 Using where; Using join buffer (flat, BNL join)
1 SIMPLE t6 ALL NULL NULL NULL NULL 18 Using where; Using join buffer (flat, BNL join)
@@ -567,9 +567,9 @@ Last_query_cost 844.037037
explain select t1.c11 from t7, t6, t5, t4, t3, t2, t1 where t1.c11 = t2.c21 and t1.c12 = t3.c31 and t1.c13 = t4.c41 and t1.c14 = t5.c51 and t1.c15 = t6.c61 and t1.c16 = t7.c71 and t2.c22 = t3.c32 and t2.c23 = t4.c42 and t2.c24 = t5.c52 and t2.c25 = t6.c62 and t2.c26 = t7.c72 and t3.c33 = t4.c43 and t3.c34 = t5.c53 and t3.c35 = t6.c63 and t3.c36 = t7.c73 and t4.c42 = t5.c54 and t4.c43 = t6.c64 and t4.c44 = t7.c74 and t5.c52 = t6.c65 and t5.c53 = t7.c75 and t6.c62 = t7.c76;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 ALL PRIMARY NULL NULL NULL 3 Using where
-1 SIMPLE t3 eq_ref PRIMARY PRIMARY 4 test.t1.c12 1
+1 SIMPLE t7 eq_ref PRIMARY PRIMARY 4 test.t1.c16 1
+1 SIMPLE t3 eq_ref PRIMARY PRIMARY 4 test.t1.c12 1 Using where
1 SIMPLE t5 eq_ref PRIMARY PRIMARY 4 test.t1.c14 1 Using where
-1 SIMPLE t7 eq_ref PRIMARY PRIMARY 4 test.t1.c16 1 Using where
1 SIMPLE t2 ALL NULL NULL NULL NULL 6 Using where; Using join buffer (flat, BNL join)
1 SIMPLE t4 ALL NULL NULL NULL NULL 12 Using where; Using join buffer (flat, BNL join)
1 SIMPLE t6 ALL NULL NULL NULL NULL 18 Using where; Using join buffer (flat, BNL join)
@@ -619,9 +619,9 @@ Last_query_cost 844.037037
explain select t1.c11 from t7, t6, t5, t4, t3, t2, t1 where t1.c11 = t2.c21 and t1.c12 = t3.c31 and t1.c13 = t4.c41 and t1.c14 = t5.c51 and t1.c15 = t6.c61 and t1.c16 = t7.c71;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 ALL PRIMARY NULL NULL NULL 3 Using where
+1 SIMPLE t7 eq_ref PRIMARY PRIMARY 4 test.t1.c16 1 Using index
1 SIMPLE t3 eq_ref PRIMARY PRIMARY 4 test.t1.c12 1 Using index
1 SIMPLE t5 eq_ref PRIMARY PRIMARY 4 test.t1.c14 1 Using index
-1 SIMPLE t7 eq_ref PRIMARY PRIMARY 4 test.t1.c16 1 Using index
1 SIMPLE t2 ALL NULL NULL NULL NULL 6 Using where; Using join buffer (flat, BNL join)
1 SIMPLE t4 ALL NULL NULL NULL NULL 12 Using where; Using join buffer (flat, BNL join)
1 SIMPLE t6 ALL NULL NULL NULL NULL 18 Using where; Using join buffer (flat, BNL join)
@@ -643,9 +643,9 @@ Last_query_cost 844.037037
explain select t1.c11 from t7, t6, t5, t4, t3, t2, t1 where t1.c11 = t2.c21 and t1.c12 = t3.c31 and t1.c13 = t4.c41 and t1.c14 = t5.c51 and t1.c15 = t6.c61 and t1.c16 = t7.c71 and t2.c22 = t3.c32 and t2.c23 = t4.c42 and t2.c24 = t5.c52 and t2.c25 = t6.c62 and t2.c26 = t7.c72 and t3.c33 = t4.c43 and t3.c34 = t5.c53 and t3.c35 = t6.c63 and t3.c36 = t7.c73 and t4.c42 = t5.c54 and t4.c43 = t6.c64 and t4.c44 = t7.c74 and t5.c52 = t6.c65 and t5.c53 = t7.c75 and t6.c62 = t7.c76;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 ALL PRIMARY NULL NULL NULL 3 Using where
-1 SIMPLE t3 eq_ref PRIMARY PRIMARY 4 test.t1.c12 1
+1 SIMPLE t7 eq_ref PRIMARY PRIMARY 4 test.t1.c16 1
+1 SIMPLE t3 eq_ref PRIMARY PRIMARY 4 test.t1.c12 1 Using where
1 SIMPLE t5 eq_ref PRIMARY PRIMARY 4 test.t1.c14 1 Using where
-1 SIMPLE t7 eq_ref PRIMARY PRIMARY 4 test.t1.c16 1 Using where
1 SIMPLE t2 ALL NULL NULL NULL NULL 6 Using where; Using join buffer (flat, BNL join)
1 SIMPLE t4 ALL NULL NULL NULL NULL 12 Using where; Using join buffer (flat, BNL join)
1 SIMPLE t6 ALL NULL NULL NULL NULL 18 Using where; Using join buffer (flat, BNL join)
@@ -729,5 +729,2207 @@ t4 LEFT JOIN (t5 JOIN t5_1 ON t5.l = t5_1.l) ON t5.d = t4.d
1
SET optimizer_search_depth = DEFAULT;
DROP TABLE t1,t2,t2_1,t3,t3_1,t4,t4_1,t5,t5_1;
-End of 5.0 tests
set join_cache_level=@save_join_cache_level;
+End of 5.0 tests
+#
+# Bug #59326: Greedy optimizer produce stupid query execution plans.
+#
+CREATE TABLE t10(
+K INT NOT NULL AUTO_INCREMENT,
+I INT,
+PRIMARY KEY(K)
+);
+INSERT INTO t10(I) VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(0);
+CREATE TABLE t100 LIKE t10;
+INSERT INTO t100(I)
+SELECT X.I FROM t10 AS X,t10 AS Y;
+CREATE TABLE t10000 LIKE t10;
+INSERT INTO t10000(I)
+SELECT X.I FROM t100 AS X, t100 AS Y;
+EXPLAIN SELECT * FROM t10,t100,t10000;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t10 ALL NULL NULL NULL NULL 10
+1 SIMPLE t100 ALL NULL NULL NULL NULL 100 Using join buffer (flat, BNL join)
+1 SIMPLE t10000 ALL NULL NULL NULL NULL 10000 Using join buffer (incremental, BNL join)
+EXPLAIN SELECT * FROM t10,t10000,t100;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t10 ALL NULL NULL NULL NULL 10
+1 SIMPLE t100 ALL NULL NULL NULL NULL 100 Using join buffer (flat, BNL join)
+1 SIMPLE t10000 ALL NULL NULL NULL NULL 10000 Using join buffer (incremental, BNL join)
+EXPLAIN SELECT * FROM t100,t10,t10000;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t10 ALL NULL NULL NULL NULL 10
+1 SIMPLE t100 ALL NULL NULL NULL NULL 100 Using join buffer (flat, BNL join)
+1 SIMPLE t10000 ALL NULL NULL NULL NULL 10000 Using join buffer (incremental, BNL join)
+EXPLAIN SELECT * FROM t100,t10000,t10;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t10 ALL NULL NULL NULL NULL 10
+1 SIMPLE t100 ALL NULL NULL NULL NULL 100 Using join buffer (flat, BNL join)
+1 SIMPLE t10000 ALL NULL NULL NULL NULL 10000 Using join buffer (incremental, BNL join)
+EXPLAIN SELECT * FROM t10000,t10,t100;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t10 ALL NULL NULL NULL NULL 10
+1 SIMPLE t100 ALL NULL NULL NULL NULL 100 Using join buffer (flat, BNL join)
+1 SIMPLE t10000 ALL NULL NULL NULL NULL 10000 Using join buffer (incremental, BNL join)
+EXPLAIN SELECT * FROM t10000,t100,t10;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t10 ALL NULL NULL NULL NULL 10
+1 SIMPLE t100 ALL NULL NULL NULL NULL 100 Using join buffer (flat, BNL join)
+1 SIMPLE t10000 ALL NULL NULL NULL NULL 10000 Using join buffer (incremental, BNL join)
+flush status;
+EXPLAIN SELECT STRAIGHT_JOIN COUNT(*) FROM t10,t100,t10000
+WHERE t100.K=t10.I
+AND t10000.K=t10.I;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t10 ALL NULL NULL NULL NULL 10 Using where
+1 SIMPLE t100 eq_ref PRIMARY PRIMARY 4 test.t10.I 1 Using index
+1 SIMPLE t10000 eq_ref PRIMARY PRIMARY 4 test.t10.I 1 Using index
+SELECT STRAIGHT_JOIN COUNT(*) FROM t10,t100,t10000
+WHERE t100.K=t10.I
+AND t10000.K=t10.I;
+COUNT(*)
+9
+flush status;
+EXPLAIN SELECT STRAIGHT_JOIN COUNT(*) FROM t10,t10000,t100
+WHERE t100.K=t10.I
+AND t10000.K=t10.I;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t10 ALL NULL NULL NULL NULL 10 Using where
+1 SIMPLE t10000 eq_ref PRIMARY PRIMARY 4 test.t10.I 1 Using index
+1 SIMPLE t100 eq_ref PRIMARY PRIMARY 4 test.t10.I 1 Using index
+SELECT STRAIGHT_JOIN COUNT(*) FROM t10,t10000,t100
+WHERE t100.K=t10.I
+AND t10000.K=t10.I;
+COUNT(*)
+9
+flush status;
+EXPLAIN SELECT COUNT(*) FROM t10,t100,t10000
+WHERE t100.K=t10.I
+AND t10000.K=t10.I;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t10 ALL NULL NULL NULL NULL 10 Using where
+1 SIMPLE t100 eq_ref PRIMARY PRIMARY 4 test.t10.I 1 Using index
+1 SIMPLE t10000 eq_ref PRIMARY PRIMARY 4 test.t10.I 1 Using index
+SELECT COUNT(*) FROM t10,t100,t10000
+WHERE t100.K=t10.I
+AND t10000.K=t10.I;
+COUNT(*)
+9
+flush status;
+EXPLAIN SELECT COUNT(*) FROM t10,t10000,t100
+WHERE t100.K=t10.I
+AND t10000.K=t10.I;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t10 ALL NULL NULL NULL NULL 10 Using where
+1 SIMPLE t10000 eq_ref PRIMARY PRIMARY 4 test.t10.I 1 Using index
+1 SIMPLE t100 eq_ref PRIMARY PRIMARY 4 test.t10.I 1 Using index
+SELECT COUNT(*) FROM t10,t10000,t100
+WHERE t100.K=t10.I
+AND t10000.K=t10.I;
+COUNT(*)
+9
+flush status;
+EXPLAIN SELECT COUNT(*) FROM t10,t100,t10000
+WHERE t100.K=t10.I
+AND t10000.K=t10.K;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t10 ALL PRIMARY NULL NULL NULL 10 Using where
+1 SIMPLE t100 eq_ref PRIMARY PRIMARY 4 test.t10.I 1 Using index
+1 SIMPLE t10000 eq_ref PRIMARY PRIMARY 4 test.t10.K 1 Using index
+SELECT COUNT(*) FROM t10,t100,t10000
+WHERE t100.K=t10.I
+AND t10000.K=t10.K;
+COUNT(*)
+9
+flush status;
+EXPLAIN SELECT COUNT(*) FROM t10,t10000,t100
+WHERE t100.K=t10.I
+AND t10000.K=t10.K;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t10 ALL PRIMARY NULL NULL NULL 10 Using where
+1 SIMPLE t10000 eq_ref PRIMARY PRIMARY 4 test.t10.K 1 Using index
+1 SIMPLE t100 eq_ref PRIMARY PRIMARY 4 test.t10.I 1 Using index
+SELECT COUNT(*) FROM t10,t10000,t100
+WHERE t100.K=t10.I
+AND t10000.K=t10.K;
+COUNT(*)
+9
+### NOTE: Handler_reads: 31, expected: 30 ###
+flush status;
+EXPLAIN SELECT COUNT(*) FROM t100,t10,t10000
+WHERE t100.K=t10.I
+AND t10000.K=t10.K;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t10 ALL PRIMARY NULL NULL NULL 10 Using where
+1 SIMPLE t100 eq_ref PRIMARY PRIMARY 4 test.t10.I 1 Using index
+1 SIMPLE t10000 eq_ref PRIMARY PRIMARY 4 test.t10.K 1 Using index
+SELECT COUNT(*) FROM t100,t10,t10000
+WHERE t100.K=t10.I
+AND t10000.K=t10.K;
+COUNT(*)
+9
+flush status;
+EXPLAIN SELECT COUNT(*) FROM t100,t10000,t10
+WHERE t100.K=t10.I
+AND t10000.K=t10.K;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t10 ALL PRIMARY NULL NULL NULL 10 Using where
+1 SIMPLE t100 eq_ref PRIMARY PRIMARY 4 test.t10.I 1 Using index
+1 SIMPLE t10000 eq_ref PRIMARY PRIMARY 4 test.t10.K 1 Using index
+SELECT COUNT(*) FROM t100,t10000,t10
+WHERE t100.K=t10.I
+AND t10000.K=t10.K;
+COUNT(*)
+9
+flush status;
+EXPLAIN SELECT COUNT(*) FROM t10000,t10,t100
+WHERE t100.K=t10.I
+AND t10000.K=t10.K;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t10 ALL PRIMARY NULL NULL NULL 10 Using where
+1 SIMPLE t10000 eq_ref PRIMARY PRIMARY 4 test.t10.K 1 Using index
+1 SIMPLE t100 eq_ref PRIMARY PRIMARY 4 test.t10.I 1 Using index
+SELECT COUNT(*) FROM t10000,t10,t100
+WHERE t100.K=t10.I
+AND t10000.K=t10.K;
+COUNT(*)
+9
+### NOTE: Handler_reads: 31, expected: 30 ###
+flush status;
+EXPLAIN SELECT COUNT(*) FROM t10000,t100,t10
+WHERE t100.K=t10.I
+AND t10000.K=t10.K;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t10 ALL PRIMARY NULL NULL NULL 10 Using where
+1 SIMPLE t10000 eq_ref PRIMARY PRIMARY 4 test.t10.K 1 Using index
+1 SIMPLE t100 eq_ref PRIMARY PRIMARY 4 test.t10.I 1 Using index
+SELECT COUNT(*) FROM t10000,t100,t10
+WHERE t100.K=t10.I
+AND t10000.K=t10.K;
+COUNT(*)
+9
+### NOTE: Handler_reads: 31, expected: 30 ###
+flush status;
+EXPLAIN SELECT STRAIGHT_JOIN COUNT(*) FROM t10,t100,t10000
+WHERE t100.K=t10.I
+AND t10000.I=t10.I;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t10 ALL NULL NULL NULL NULL 10 Using where
+1 SIMPLE t100 eq_ref PRIMARY PRIMARY 4 test.t10.I 1 Using index
+1 SIMPLE t10000 ALL NULL NULL NULL NULL 10000 Using where; Using join buffer (flat, BNL join)
+SELECT STRAIGHT_JOIN COUNT(*) FROM t10,t100,t10000
+WHERE t100.K=t10.I
+AND t10000.I=t10.I;
+COUNT(*)
+9000
+flush status;
+EXPLAIN SELECT COUNT(*) FROM t10,t100,t10000
+WHERE t100.K=t10.I
+AND t10000.I=t10.I;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t10 ALL NULL NULL NULL NULL 10 Using where
+1 SIMPLE t100 eq_ref PRIMARY PRIMARY 4 test.t10.I 1 Using index
+1 SIMPLE t10000 ALL NULL NULL NULL NULL 10000 Using where; Using join buffer (flat, BNL join)
+SELECT COUNT(*) FROM t10,t100,t10000
+WHERE t100.K=t10.I
+AND t10000.I=t10.I;
+COUNT(*)
+9000
+flush status;
+EXPLAIN SELECT COUNT(*) FROM t10,t10000,t100
+WHERE t100.K=t10.I
+AND t10000.I=t10.I;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t10 ALL NULL NULL NULL NULL 10 Using where
+1 SIMPLE t100 eq_ref PRIMARY PRIMARY 4 test.t10.I 1 Using index
+1 SIMPLE t10000 ALL NULL NULL NULL NULL 10000 Using where; Using join buffer (flat, BNL join)
+SELECT COUNT(*) FROM t10,t10000,t100
+WHERE t100.K=t10.I
+AND t10000.I=t10.I;
+COUNT(*)
+9000
+flush status;
+EXPLAIN SELECT STRAIGHT_JOIN COUNT(*) FROM t10,t10000,t100
+WHERE t100.I=t10.I
+AND t10000.K=t10.I;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t10 ALL NULL NULL NULL NULL 10 Using where
+1 SIMPLE t10000 eq_ref PRIMARY PRIMARY 4 test.t10.I 1 Using index
+1 SIMPLE t100 ALL NULL NULL NULL NULL 100 Using where; Using join buffer (flat, BNL join)
+SELECT STRAIGHT_JOIN COUNT(*) FROM t10,t10000,t100
+WHERE t100.I=t10.I
+AND t10000.K=t10.I;
+COUNT(*)
+90
+# See BUG#18352936
+flush status;
+EXPLAIN SELECT COUNT(*) FROM t10,t100,t10000
+WHERE t100.I=t10.I
+AND t10000.K=t10.I;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t10 ALL NULL NULL NULL NULL 10 Using where
+1 SIMPLE t10000 eq_ref PRIMARY PRIMARY 4 test.t10.I 1 Using index
+1 SIMPLE t100 ALL NULL NULL NULL NULL 100 Using where; Using join buffer (flat, BNL join)
+SELECT COUNT(*) FROM t10,t100,t10000
+WHERE t100.I=t10.I
+AND t10000.K=t10.I;
+COUNT(*)
+90
+# See BUG#18352936
+flush status;
+EXPLAIN SELECT COUNT(*) FROM t10,t10000,t100
+WHERE t100.I=t10.I
+AND t10000.K=t10.I;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t10 ALL NULL NULL NULL NULL 10 Using where
+1 SIMPLE t10000 eq_ref PRIMARY PRIMARY 4 test.t10.I 1 Using index
+1 SIMPLE t100 ALL NULL NULL NULL NULL 100 Using where; Using join buffer (flat, BNL join)
+SELECT COUNT(*) FROM t10,t10000,t100
+WHERE t100.I=t10.I
+AND t10000.K=t10.I;
+COUNT(*)
+90
+flush status;
+EXPLAIN SELECT STRAIGHT_JOIN COUNT(*) FROM t10,t10000,t100
+WHERE t100.I=t10.I
+AND t10000.K=t100.I;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t10 ALL NULL NULL NULL NULL 10 Using where
+1 SIMPLE t10000 eq_ref PRIMARY PRIMARY 4 test.t10.I 1 Using index
+1 SIMPLE t100 ALL NULL NULL NULL NULL 100 Using where; Using join buffer (flat, BNL join)
+SELECT STRAIGHT_JOIN COUNT(*) FROM t10,t10000,t100
+WHERE t100.I=t10.I
+AND t10000.K=t100.I;
+COUNT(*)
+90
+flush status;
+EXPLAIN SELECT COUNT(*) FROM t10,t100,t10000
+WHERE t100.I=t10.I
+AND t10000.K=t100.I;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t10 ALL NULL NULL NULL NULL 10 Using where
+1 SIMPLE t10000 eq_ref PRIMARY PRIMARY 4 test.t10.I 1 Using index
+1 SIMPLE t100 ALL NULL NULL NULL NULL 100 Using where; Using join buffer (flat, BNL join)
+SELECT COUNT(*) FROM t10,t100,t10000
+WHERE t100.I=t10.I
+AND t10000.K=t100.I;
+COUNT(*)
+90
+flush status;
+EXPLAIN SELECT COUNT(*) FROM t10,t10000,t100
+WHERE t100.I=t10.I
+AND t10000.K=t100.I;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t10 ALL NULL NULL NULL NULL 10 Using where
+1 SIMPLE t10000 eq_ref PRIMARY PRIMARY 4 test.t10.I 1 Using index
+1 SIMPLE t100 ALL NULL NULL NULL NULL 100 Using where; Using join buffer (flat, BNL join)
+SELECT COUNT(*) FROM t10,t10000,t100
+WHERE t100.I=t10.I
+AND t10000.K=t100.I;
+COUNT(*)
+90
+flush status;
+EXPLAIN SELECT STRAIGHT_JOIN COUNT(*) FROM t10,t10000 x,t10000 y
+WHERE x.k=t10.i;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t10 ALL NULL NULL NULL NULL 10 Using where
+1 SIMPLE x eq_ref PRIMARY PRIMARY 4 test.t10.I 1 Using index
+1 SIMPLE y index NULL PRIMARY 4 NULL 10000 Using index; Using join buffer (flat, BNL join)
+SELECT STRAIGHT_JOIN COUNT(*) FROM t10,t10000 x,t10000 y
+WHERE x.k=t10.i;
+COUNT(*)
+90000
+flush status;
+EXPLAIN SELECT COUNT(*) FROM t10,t10000 x,t10000 y
+WHERE x.k=t10.i;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t10 ALL NULL NULL NULL NULL 10 Using where
+1 SIMPLE x eq_ref PRIMARY PRIMARY 4 test.t10.I 1 Using index
+1 SIMPLE y index NULL PRIMARY 4 NULL 10000 Using index; Using join buffer (flat, BNL join)
+SELECT COUNT(*) FROM t10,t10000 x,t10000 y
+WHERE x.k=t10.i;
+COUNT(*)
+90000
+flush status;
+EXPLAIN SELECT COUNT(*) FROM t10,t10000 y,t10000 x
+WHERE x.k=t10.i;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t10 ALL NULL NULL NULL NULL 10 Using where
+1 SIMPLE x eq_ref PRIMARY PRIMARY 4 test.t10.I 1 Using index
+1 SIMPLE y index NULL PRIMARY 4 NULL 10000 Using index; Using join buffer (flat, BNL join)
+SELECT COUNT(*) FROM t10,t10000 y,t10000 x
+WHERE x.k=t10.i;
+COUNT(*)
+90000
+flush status;
+EXPLAIN SELECT STRAIGHT_JOIN COUNT(*) FROM t10,t10000 x,t10000 y
+WHERE x.k=t10.i
+AND y.i=t10.i;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t10 ALL NULL NULL NULL NULL 10 Using where
+1 SIMPLE x eq_ref PRIMARY PRIMARY 4 test.t10.I 1 Using index
+1 SIMPLE y ALL NULL NULL NULL NULL 10000 Using where; Using join buffer (flat, BNL join)
+SELECT STRAIGHT_JOIN COUNT(*) FROM t10,t10000 x,t10000 y
+WHERE x.k=t10.i
+AND y.i=t10.i;
+COUNT(*)
+9000
+flush status;
+EXPLAIN SELECT COUNT(*) FROM t10,t10000 x,t10000 y
+WHERE x.k=t10.i
+AND y.i=t10.i;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t10 ALL NULL NULL NULL NULL 10 Using where
+1 SIMPLE x eq_ref PRIMARY PRIMARY 4 test.t10.I 1 Using index
+1 SIMPLE y ALL NULL NULL NULL NULL 10000 Using where; Using join buffer (flat, BNL join)
+SELECT COUNT(*) FROM t10,t10000 x,t10000 y
+WHERE x.k=t10.i
+AND y.i=t10.i;
+COUNT(*)
+9000
+flush status;
+EXPLAIN SELECT COUNT(*) FROM t10,t10000 y,t10000 x
+WHERE x.k=t10.i
+AND y.i=t10.i;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t10 ALL NULL NULL NULL NULL 10 Using where
+1 SIMPLE x eq_ref PRIMARY PRIMARY 4 test.t10.I 1 Using index
+1 SIMPLE y ALL NULL NULL NULL NULL 10000 Using where; Using join buffer (flat, BNL join)
+SELECT COUNT(*) FROM t10,t10000 y,t10000 x
+WHERE x.k=t10.i
+AND y.i=t10.i;
+COUNT(*)
+9000
+flush status;
+EXPLAIN SELECT STRAIGHT_JOIN COUNT(*) FROM t10,t10000 x,t10000 y
+WHERE x.k=t10.i
+AND y.i=x.k;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t10 ALL NULL NULL NULL NULL 10 Using where
+1 SIMPLE x eq_ref PRIMARY PRIMARY 4 test.t10.I 1 Using index
+1 SIMPLE y ALL NULL NULL NULL NULL 10000 Using where; Using join buffer (flat, BNL join)
+SELECT STRAIGHT_JOIN COUNT(*) FROM t10,t10000 x,t10000 y
+WHERE x.k=t10.i
+AND y.i=x.k;
+COUNT(*)
+9000
+flush status;
+EXPLAIN SELECT COUNT(*) FROM t10,t10000 x,t10000 y
+WHERE x.k=t10.i
+AND y.i=x.k;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t10 ALL NULL NULL NULL NULL 10 Using where
+1 SIMPLE x eq_ref PRIMARY PRIMARY 4 test.t10.I 1 Using index
+1 SIMPLE y ALL NULL NULL NULL NULL 10000 Using where; Using join buffer (flat, BNL join)
+SELECT COUNT(*) FROM t10,t10000 x,t10000 y
+WHERE x.k=t10.i
+AND y.i=x.k;
+COUNT(*)
+9000
+flush status;
+EXPLAIN SELECT COUNT(*) FROM t10,t10000 y,t10000 x
+WHERE x.k=t10.i
+AND y.i=x.k;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t10 ALL NULL NULL NULL NULL 10 Using where
+1 SIMPLE x eq_ref PRIMARY PRIMARY 4 test.t10.I 1 Using index
+1 SIMPLE y ALL NULL NULL NULL NULL 10000 Using where; Using join buffer (flat, BNL join)
+SELECT COUNT(*) FROM t10,t10000 y,t10000 x
+WHERE x.k=t10.i
+AND y.i=x.k;
+COUNT(*)
+9000
+CREATE INDEX IX ON t10(I);
+CREATE INDEX IX ON t100(I);
+CREATE INDEX IX ON t10000(I);
+flush status;
+EXPLAIN SELECT STRAIGHT_JOIN COUNT(*) FROM t10,t100,t10000
+WHERE t100.K=t10.I
+AND t10000.I=t10.I;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t10 index IX IX 5 NULL 10 Using where; Using index
+1 SIMPLE t100 eq_ref PRIMARY PRIMARY 4 test.t10.I 1 Using index
+1 SIMPLE t10000 ref IX IX 5 test.t10.I 1000 Using index
+SELECT STRAIGHT_JOIN COUNT(*) FROM t10,t100,t10000
+WHERE t100.K=t10.I
+AND t10000.I=t10.I;
+COUNT(*)
+9000
+flush status;
+EXPLAIN SELECT COUNT(*) FROM t10,t100,t10000
+WHERE t100.K=t10.I
+AND t10000.I=t10.I;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t10 index IX IX 5 NULL 10 Using where; Using index
+1 SIMPLE t100 eq_ref PRIMARY PRIMARY 4 test.t10.I 1 Using index
+1 SIMPLE t10000 ref IX IX 5 test.t10.I 1000 Using index
+SELECT COUNT(*) FROM t10,t100,t10000
+WHERE t100.K=t10.I
+AND t10000.I=t10.I;
+COUNT(*)
+9000
+### NOTE: Handler_reads: 9030, expected: 9045 ###
+flush status;
+EXPLAIN SELECT COUNT(*) FROM t10,t10000,t100
+WHERE t100.K=t10.I
+AND t10000.I=t10.I;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t10 index IX IX 5 NULL 10 Using where; Using index
+1 SIMPLE t100 eq_ref PRIMARY PRIMARY 4 test.t10.I 1 Using index
+1 SIMPLE t10000 ref IX IX 5 test.t10.I 1000 Using index
+SELECT COUNT(*) FROM t10,t10000,t100
+WHERE t100.K=t10.I
+AND t10000.I=t10.I;
+COUNT(*)
+9000
+### NOTE: Handler_reads: 9030, expected: 9045 ###
+flush status;
+EXPLAIN SELECT STRAIGHT_JOIN COUNT(*) FROM t10,t10000 x,t10000 y
+WHERE x.k=t10.i;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t10 index IX IX 5 NULL 10 Using where; Using index
+1 SIMPLE x eq_ref PRIMARY PRIMARY 4 test.t10.I 1 Using index
+1 SIMPLE y index NULL PRIMARY 4 NULL 10000 Using index; Using join buffer (flat, BNL join)
+SELECT STRAIGHT_JOIN COUNT(*) FROM t10,t10000 x,t10000 y
+WHERE x.k=t10.i;
+COUNT(*)
+90000
+flush status;
+EXPLAIN SELECT COUNT(*) FROM t10,t10000 x,t10000 y
+WHERE x.k=t10.i;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t10 index IX IX 5 NULL 10 Using where; Using index
+1 SIMPLE x eq_ref PRIMARY PRIMARY 4 test.t10.I 1 Using index
+1 SIMPLE y index NULL PRIMARY 4 NULL 10000 Using index; Using join buffer (flat, BNL join)
+SELECT COUNT(*) FROM t10,t10000 x,t10000 y
+WHERE x.k=t10.i;
+COUNT(*)
+90000
+flush status;
+EXPLAIN SELECT COUNT(*) FROM t10,t10000 y,t10000 x
+WHERE x.k=t10.i;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t10 index IX IX 5 NULL 10 Using where; Using index
+1 SIMPLE x eq_ref PRIMARY PRIMARY 4 test.t10.I 1 Using index
+1 SIMPLE y index NULL PRIMARY 4 NULL 10000 Using index; Using join buffer (flat, BNL join)
+SELECT COUNT(*) FROM t10,t10000 y,t10000 x
+WHERE x.k=t10.i;
+COUNT(*)
+90000
+flush status;
+EXPLAIN SELECT STRAIGHT_JOIN COUNT(*) FROM t10,t10000 x,t10000 y
+WHERE x.k=t10.i
+AND y.i=t10.i;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t10 index IX IX 5 NULL 10 Using where; Using index
+1 SIMPLE x eq_ref PRIMARY PRIMARY 4 test.t10.I 1 Using index
+1 SIMPLE y ref IX IX 5 test.t10.I 1000 Using index
+SELECT STRAIGHT_JOIN COUNT(*) FROM t10,t10000 x,t10000 y
+WHERE x.k=t10.i
+AND y.i=t10.i;
+COUNT(*)
+9000
+flush status;
+EXPLAIN SELECT COUNT(*) FROM t10,t10000 x,t10000 y
+WHERE x.k=t10.i
+AND y.i=t10.i;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t10 index IX IX 5 NULL 10 Using where; Using index
+1 SIMPLE x eq_ref PRIMARY PRIMARY 4 test.t10.I 1 Using index
+1 SIMPLE y ref IX IX 5 test.t10.I 1000 Using index
+SELECT COUNT(*) FROM t10,t10000 x,t10000 y
+WHERE x.k=t10.i
+AND y.i=t10.i;
+COUNT(*)
+9000
+flush status;
+EXPLAIN SELECT COUNT(*) FROM t10,t10000 y,t10000 x
+WHERE x.k=t10.i
+AND y.i=t10.i;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t10 index IX IX 5 NULL 10 Using where; Using index
+1 SIMPLE x eq_ref PRIMARY PRIMARY 4 test.t10.I 1 Using index
+1 SIMPLE y ref IX IX 5 test.t10.I 1000 Using index
+SELECT COUNT(*) FROM t10,t10000 y,t10000 x
+WHERE x.k=t10.i
+AND y.i=t10.i;
+COUNT(*)
+9000
+flush status;
+EXPLAIN SELECT STRAIGHT_JOIN COUNT(*) FROM t10,t10000 x,t10000 y
+WHERE x.k=t10.i
+AND y.i=x.k;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t10 index IX IX 5 NULL 10 Using where; Using index
+1 SIMPLE x eq_ref PRIMARY PRIMARY 4 test.t10.I 1 Using index
+1 SIMPLE y ref IX IX 5 test.t10.I 1000 Using index
+SELECT STRAIGHT_JOIN COUNT(*) FROM t10,t10000 x,t10000 y
+WHERE x.k=t10.i
+AND y.i=x.k;
+COUNT(*)
+9000
+flush status;
+EXPLAIN SELECT COUNT(*) FROM t10,t10000 x,t10000 y
+WHERE x.k=t10.i
+AND y.i=x.k;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t10 index IX IX 5 NULL 10 Using where; Using index
+1 SIMPLE x eq_ref PRIMARY PRIMARY 4 test.t10.I 1 Using index
+1 SIMPLE y ref IX IX 5 test.t10.I 1000 Using index
+SELECT COUNT(*) FROM t10,t10000 x,t10000 y
+WHERE x.k=t10.i
+AND y.i=x.k;
+COUNT(*)
+9000
+flush status;
+EXPLAIN SELECT COUNT(*) FROM t10,t10000 y,t10000 x
+WHERE x.k=t10.i
+AND y.i=x.k;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t10 index IX IX 5 NULL 10 Using where; Using index
+1 SIMPLE x eq_ref PRIMARY PRIMARY 4 test.t10.I 1 Using index
+1 SIMPLE y ref IX IX 5 test.t10.I 1000 Using index
+SELECT COUNT(*) FROM t10,t10000 y,t10000 x
+WHERE x.k=t10.i
+AND y.i=x.k;
+COUNT(*)
+9000
+#
+# Test improved capabilities of analyzing complex query
+# plans without restricting 'optimizer_search_depth'.
+# Fix problems like those reported as bug#41740 & bug#58225.
+#
+# EPLAIN of queries using T1-T62 will timeout/hang wo/ fixes
+#
+DROP TABLE t10, t10000;
+CREATE TABLE t1 ( K INT NOT NULL AUTO_INCREMENT,
+I INT,
+A INT,
+PRIMARY KEY(K), KEY IX(A)
+) engine = InnoDB;
+INSERT INTO t1(I,A) SELECT X.K,X.K FROM t100 AS X, t100 AS Y WHERE X.K < 20 AND Y.K <= 1;
+CREATE TABLE t2 ( K INT NOT NULL AUTO_INCREMENT,
+I INT,
+A INT,
+PRIMARY KEY(K), KEY IX(A)
+) engine = InnoDB;
+INSERT INTO t2(I,A) SELECT X.K,X.K FROM t100 AS X, t100 AS Y WHERE X.K < 20 AND Y.K <= 2;
+CREATE TABLE t3 ( K INT NOT NULL AUTO_INCREMENT,
+I INT,
+A INT,
+PRIMARY KEY(K), KEY IX(A)
+) engine = InnoDB;
+INSERT INTO t3(I,A) SELECT X.K,X.K FROM t100 AS X, t100 AS Y WHERE X.K < 20 AND Y.K <= 3;
+CREATE TABLE t4 ( K INT NOT NULL AUTO_INCREMENT,
+I INT,
+A INT,
+PRIMARY KEY(K), KEY IX(A)
+) engine = InnoDB;
+INSERT INTO t4(I,A) SELECT X.K,X.K FROM t100 AS X, t100 AS Y WHERE X.K < 20 AND Y.K <= 4;
+CREATE TABLE t5 ( K INT NOT NULL AUTO_INCREMENT,
+I INT,
+A INT,
+PRIMARY KEY(K), KEY IX(A)
+) engine = InnoDB;
+INSERT INTO t5(I,A) SELECT X.K,X.K FROM t100 AS X, t100 AS Y WHERE X.K < 20 AND Y.K <= 5;
+CREATE TABLE t6 ( K INT NOT NULL AUTO_INCREMENT,
+I INT,
+A INT,
+PRIMARY KEY(K), KEY IX(A)
+) engine = InnoDB;
+INSERT INTO t6(I,A) SELECT X.K,X.K FROM t100 AS X, t100 AS Y WHERE X.K < 20 AND Y.K <= 6;
+CREATE TABLE t7 ( K INT NOT NULL AUTO_INCREMENT,
+I INT,
+A INT,
+PRIMARY KEY(K), KEY IX(A)
+) engine = InnoDB;
+INSERT INTO t7(I,A) SELECT X.K,X.K FROM t100 AS X, t100 AS Y WHERE X.K < 20 AND Y.K <= 7;
+CREATE TABLE t8 ( K INT NOT NULL AUTO_INCREMENT,
+I INT,
+A INT,
+PRIMARY KEY(K), KEY IX(A)
+) engine = InnoDB;
+INSERT INTO t8(I,A) SELECT X.K,X.K FROM t100 AS X, t100 AS Y WHERE X.K < 20 AND Y.K <= 8;
+CREATE TABLE t9 ( K INT NOT NULL AUTO_INCREMENT,
+I INT,
+A INT,
+PRIMARY KEY(K), KEY IX(A)
+) engine = InnoDB;
+INSERT INTO t9(I,A) SELECT X.K,X.K FROM t100 AS X, t100 AS Y WHERE X.K < 20 AND Y.K <= 9;
+CREATE TABLE t10 ( K INT NOT NULL AUTO_INCREMENT,
+I INT,
+A INT,
+PRIMARY KEY(K), KEY IX(A)
+) engine = InnoDB;
+INSERT INTO t10(I,A) SELECT X.K,X.K FROM t100 AS X, t100 AS Y WHERE X.K < 20 AND Y.K <= 10;
+CREATE TABLE t11 ( K INT NOT NULL AUTO_INCREMENT,
+I INT,
+A INT,
+PRIMARY KEY(K), KEY IX(A)
+) engine = InnoDB;
+INSERT INTO t11(I,A) SELECT X.K,X.K FROM t100 AS X, t100 AS Y WHERE X.K < 20 AND Y.K <= 11;
+CREATE TABLE t12 ( K INT NOT NULL AUTO_INCREMENT,
+I INT,
+A INT,
+PRIMARY KEY(K), KEY IX(A)
+) engine = InnoDB;
+INSERT INTO t12(I,A) SELECT X.K,X.K FROM t100 AS X, t100 AS Y WHERE X.K < 20 AND Y.K <= 12;
+CREATE TABLE t13 ( K INT NOT NULL AUTO_INCREMENT,
+I INT,
+A INT,
+PRIMARY KEY(K), KEY IX(A)
+) engine = InnoDB;
+INSERT INTO t13(I,A) SELECT X.K,X.K FROM t100 AS X, t100 AS Y WHERE X.K < 20 AND Y.K <= 13;
+CREATE TABLE t14 ( K INT NOT NULL AUTO_INCREMENT,
+I INT,
+A INT,
+PRIMARY KEY(K), KEY IX(A)
+) engine = InnoDB;
+INSERT INTO t14(I,A) SELECT X.K,X.K FROM t100 AS X, t100 AS Y WHERE X.K < 20 AND Y.K <= 14;
+CREATE TABLE t15 ( K INT NOT NULL AUTO_INCREMENT,
+I INT,
+A INT,
+PRIMARY KEY(K), KEY IX(A)
+) engine = InnoDB;
+INSERT INTO t15(I,A) SELECT X.K,X.K FROM t100 AS X, t100 AS Y WHERE X.K < 20 AND Y.K <= 15;
+CREATE TABLE t16 ( K INT NOT NULL AUTO_INCREMENT,
+I INT,
+A INT,
+PRIMARY KEY(K), KEY IX(A)
+) engine = InnoDB;
+INSERT INTO t16(I,A) SELECT X.K,X.K FROM t100 AS X, t100 AS Y WHERE X.K < 20 AND Y.K <= 16;
+CREATE TABLE t17 ( K INT NOT NULL AUTO_INCREMENT,
+I INT,
+A INT,
+PRIMARY KEY(K), KEY IX(A)
+) engine = InnoDB;
+INSERT INTO t17(I,A) SELECT X.K,X.K FROM t100 AS X, t100 AS Y WHERE X.K < 20 AND Y.K <= 17;
+CREATE TABLE t18 ( K INT NOT NULL AUTO_INCREMENT,
+I INT,
+A INT,
+PRIMARY KEY(K), KEY IX(A)
+) engine = InnoDB;
+INSERT INTO t18(I,A) SELECT X.K,X.K FROM t100 AS X, t100 AS Y WHERE X.K < 20 AND Y.K <= 18;
+CREATE TABLE t19 ( K INT NOT NULL AUTO_INCREMENT,
+I INT,
+A INT,
+PRIMARY KEY(K), KEY IX(A)
+) engine = InnoDB;
+INSERT INTO t19(I,A) SELECT X.K,X.K FROM t100 AS X, t100 AS Y WHERE X.K < 20 AND Y.K <= 19;
+CREATE TABLE t20 ( K INT NOT NULL AUTO_INCREMENT,
+I INT,
+A INT,
+PRIMARY KEY(K), KEY IX(A)
+) engine = InnoDB;
+INSERT INTO t20(I,A) SELECT X.K,X.K FROM t100 AS X, t100 AS Y WHERE X.K < 20 AND Y.K <= 20;
+CREATE TABLE t21 ( K INT NOT NULL AUTO_INCREMENT,
+I INT,
+A INT,
+PRIMARY KEY(K), KEY IX(A)
+) engine = InnoDB;
+INSERT INTO t21(I,A) SELECT X.K,X.K FROM t100 AS X, t100 AS Y WHERE X.K < 20 AND Y.K <= 21;
+CREATE TABLE t22 ( K INT NOT NULL AUTO_INCREMENT,
+I INT,
+A INT,
+PRIMARY KEY(K), KEY IX(A)
+) engine = InnoDB;
+INSERT INTO t22(I,A) SELECT X.K,X.K FROM t100 AS X, t100 AS Y WHERE X.K < 20 AND Y.K <= 22;
+CREATE TABLE t23 ( K INT NOT NULL AUTO_INCREMENT,
+I INT,
+A INT,
+PRIMARY KEY(K), KEY IX(A)
+) engine = InnoDB;
+INSERT INTO t23(I,A) SELECT X.K,X.K FROM t100 AS X, t100 AS Y WHERE X.K < 20 AND Y.K <= 23;
+CREATE TABLE t24 ( K INT NOT NULL AUTO_INCREMENT,
+I INT,
+A INT,
+PRIMARY KEY(K), KEY IX(A)
+) engine = InnoDB;
+INSERT INTO t24(I,A) SELECT X.K,X.K FROM t100 AS X, t100 AS Y WHERE X.K < 20 AND Y.K <= 24;
+CREATE TABLE t25 ( K INT NOT NULL AUTO_INCREMENT,
+I INT,
+A INT,
+PRIMARY KEY(K), KEY IX(A)
+) engine = InnoDB;
+INSERT INTO t25(I,A) SELECT X.K,X.K FROM t100 AS X, t100 AS Y WHERE X.K < 20 AND Y.K <= 25;
+CREATE TABLE t26 ( K INT NOT NULL AUTO_INCREMENT,
+I INT,
+A INT,
+PRIMARY KEY(K), KEY IX(A)
+) engine = InnoDB;
+INSERT INTO t26(I,A) SELECT X.K,X.K FROM t100 AS X, t100 AS Y WHERE X.K < 20 AND Y.K <= 26;
+CREATE TABLE t27 ( K INT NOT NULL AUTO_INCREMENT,
+I INT,
+A INT,
+PRIMARY KEY(K), KEY IX(A)
+) engine = InnoDB;
+INSERT INTO t27(I,A) SELECT X.K,X.K FROM t100 AS X, t100 AS Y WHERE X.K < 20 AND Y.K <= 27;
+CREATE TABLE t28 ( K INT NOT NULL AUTO_INCREMENT,
+I INT,
+A INT,
+PRIMARY KEY(K), KEY IX(A)
+) engine = InnoDB;
+INSERT INTO t28(I,A) SELECT X.K,X.K FROM t100 AS X, t100 AS Y WHERE X.K < 20 AND Y.K <= 28;
+CREATE TABLE t29 ( K INT NOT NULL AUTO_INCREMENT,
+I INT,
+A INT,
+PRIMARY KEY(K), KEY IX(A)
+) engine = InnoDB;
+INSERT INTO t29(I,A) SELECT X.K,X.K FROM t100 AS X, t100 AS Y WHERE X.K < 20 AND Y.K <= 29;
+CREATE TABLE t30 ( K INT NOT NULL AUTO_INCREMENT,
+I INT,
+A INT,
+PRIMARY KEY(K), KEY IX(A)
+) engine = InnoDB;
+INSERT INTO t30(I,A) SELECT X.K,X.K FROM t100 AS X, t100 AS Y WHERE X.K < 20 AND Y.K <= 30;
+CREATE TABLE t31 ( K INT NOT NULL AUTO_INCREMENT,
+I INT,
+A INT,
+PRIMARY KEY(K), KEY IX(A)
+) engine = InnoDB;
+INSERT INTO t31(I,A) SELECT X.K,X.K FROM t100 AS X, t100 AS Y WHERE X.K < 20 AND Y.K <= 31;
+CREATE TABLE t32 ( K INT NOT NULL AUTO_INCREMENT,
+I INT,
+A INT,
+PRIMARY KEY(K), KEY IX(A)
+) engine = InnoDB;
+INSERT INTO t32(I,A) SELECT X.K,X.K FROM t100 AS X, t100 AS Y WHERE X.K < 20 AND Y.K <= 32;
+CREATE TABLE t33 ( K INT NOT NULL AUTO_INCREMENT,
+I INT,
+A INT,
+PRIMARY KEY(K), KEY IX(A)
+) engine = InnoDB;
+INSERT INTO t33(I,A) SELECT X.K,X.K FROM t100 AS X, t100 AS Y WHERE X.K < 20 AND Y.K <= 33;
+CREATE TABLE t34 ( K INT NOT NULL AUTO_INCREMENT,
+I INT,
+A INT,
+PRIMARY KEY(K), KEY IX(A)
+) engine = InnoDB;
+INSERT INTO t34(I,A) SELECT X.K,X.K FROM t100 AS X, t100 AS Y WHERE X.K < 20 AND Y.K <= 34;
+CREATE TABLE t35 ( K INT NOT NULL AUTO_INCREMENT,
+I INT,
+A INT,
+PRIMARY KEY(K), KEY IX(A)
+) engine = InnoDB;
+INSERT INTO t35(I,A) SELECT X.K,X.K FROM t100 AS X, t100 AS Y WHERE X.K < 20 AND Y.K <= 35;
+CREATE TABLE t36 ( K INT NOT NULL AUTO_INCREMENT,
+I INT,
+A INT,
+PRIMARY KEY(K), KEY IX(A)
+) engine = InnoDB;
+INSERT INTO t36(I,A) SELECT X.K,X.K FROM t100 AS X, t100 AS Y WHERE X.K < 20 AND Y.K <= 36;
+CREATE TABLE t37 ( K INT NOT NULL AUTO_INCREMENT,
+I INT,
+A INT,
+PRIMARY KEY(K), KEY IX(A)
+) engine = InnoDB;
+INSERT INTO t37(I,A) SELECT X.K,X.K FROM t100 AS X, t100 AS Y WHERE X.K < 20 AND Y.K <= 37;
+CREATE TABLE t38 ( K INT NOT NULL AUTO_INCREMENT,
+I INT,
+A INT,
+PRIMARY KEY(K), KEY IX(A)
+) engine = InnoDB;
+INSERT INTO t38(I,A) SELECT X.K,X.K FROM t100 AS X, t100 AS Y WHERE X.K < 20 AND Y.K <= 38;
+CREATE TABLE t39 ( K INT NOT NULL AUTO_INCREMENT,
+I INT,
+A INT,
+PRIMARY KEY(K), KEY IX(A)
+) engine = InnoDB;
+INSERT INTO t39(I,A) SELECT X.K,X.K FROM t100 AS X, t100 AS Y WHERE X.K < 20 AND Y.K <= 39;
+CREATE TABLE t40 ( K INT NOT NULL AUTO_INCREMENT,
+I INT,
+A INT,
+PRIMARY KEY(K), KEY IX(A)
+) engine = InnoDB;
+INSERT INTO t40(I,A) SELECT X.K,X.K FROM t100 AS X, t100 AS Y WHERE X.K < 20 AND Y.K <= 40;
+CREATE TABLE t41 ( K INT NOT NULL AUTO_INCREMENT,
+I INT,
+A INT,
+PRIMARY KEY(K), KEY IX(A)
+) engine = InnoDB;
+INSERT INTO t41(I,A) SELECT X.K,X.K FROM t100 AS X, t100 AS Y WHERE X.K < 20 AND Y.K <= 41;
+CREATE TABLE t42 ( K INT NOT NULL AUTO_INCREMENT,
+I INT,
+A INT,
+PRIMARY KEY(K), KEY IX(A)
+) engine = InnoDB;
+INSERT INTO t42(I,A) SELECT X.K,X.K FROM t100 AS X, t100 AS Y WHERE X.K < 20 AND Y.K <= 42;
+CREATE TABLE t43 ( K INT NOT NULL AUTO_INCREMENT,
+I INT,
+A INT,
+PRIMARY KEY(K), KEY IX(A)
+) engine = InnoDB;
+INSERT INTO t43(I,A) SELECT X.K,X.K FROM t100 AS X, t100 AS Y WHERE X.K < 20 AND Y.K <= 43;
+CREATE TABLE t44 ( K INT NOT NULL AUTO_INCREMENT,
+I INT,
+A INT,
+PRIMARY KEY(K), KEY IX(A)
+) engine = InnoDB;
+INSERT INTO t44(I,A) SELECT X.K,X.K FROM t100 AS X, t100 AS Y WHERE X.K < 20 AND Y.K <= 44;
+CREATE TABLE t45 ( K INT NOT NULL AUTO_INCREMENT,
+I INT,
+A INT,
+PRIMARY KEY(K), KEY IX(A)
+) engine = InnoDB;
+INSERT INTO t45(I,A) SELECT X.K,X.K FROM t100 AS X, t100 AS Y WHERE X.K < 20 AND Y.K <= 45;
+CREATE TABLE t46 ( K INT NOT NULL AUTO_INCREMENT,
+I INT,
+A INT,
+PRIMARY KEY(K), KEY IX(A)
+) engine = InnoDB;
+INSERT INTO t46(I,A) SELECT X.K,X.K FROM t100 AS X, t100 AS Y WHERE X.K < 20 AND Y.K <= 46;
+CREATE TABLE t47 ( K INT NOT NULL AUTO_INCREMENT,
+I INT,
+A INT,
+PRIMARY KEY(K), KEY IX(A)
+) engine = InnoDB;
+INSERT INTO t47(I,A) SELECT X.K,X.K FROM t100 AS X, t100 AS Y WHERE X.K < 20 AND Y.K <= 47;
+CREATE TABLE t48 ( K INT NOT NULL AUTO_INCREMENT,
+I INT,
+A INT,
+PRIMARY KEY(K), KEY IX(A)
+) engine = InnoDB;
+INSERT INTO t48(I,A) SELECT X.K,X.K FROM t100 AS X, t100 AS Y WHERE X.K < 20 AND Y.K <= 48;
+CREATE TABLE t49 ( K INT NOT NULL AUTO_INCREMENT,
+I INT,
+A INT,
+PRIMARY KEY(K), KEY IX(A)
+) engine = InnoDB;
+INSERT INTO t49(I,A) SELECT X.K,X.K FROM t100 AS X, t100 AS Y WHERE X.K < 20 AND Y.K <= 49;
+CREATE TABLE t50 ( K INT NOT NULL AUTO_INCREMENT,
+I INT,
+A INT,
+PRIMARY KEY(K), KEY IX(A)
+) engine = InnoDB;
+INSERT INTO t50(I,A) SELECT X.K,X.K FROM t100 AS X, t100 AS Y WHERE X.K < 20 AND Y.K <= 50;
+CREATE TABLE t51 ( K INT NOT NULL AUTO_INCREMENT,
+I INT,
+A INT,
+PRIMARY KEY(K), KEY IX(A)
+) engine = InnoDB;
+INSERT INTO t51(I,A) SELECT X.K,X.K FROM t100 AS X, t100 AS Y WHERE X.K < 20 AND Y.K <= 51;
+CREATE TABLE t52 ( K INT NOT NULL AUTO_INCREMENT,
+I INT,
+A INT,
+PRIMARY KEY(K), KEY IX(A)
+) engine = InnoDB;
+INSERT INTO t52(I,A) SELECT X.K,X.K FROM t100 AS X, t100 AS Y WHERE X.K < 20 AND Y.K <= 52;
+CREATE TABLE t53 ( K INT NOT NULL AUTO_INCREMENT,
+I INT,
+A INT,
+PRIMARY KEY(K), KEY IX(A)
+) engine = InnoDB;
+INSERT INTO t53(I,A) SELECT X.K,X.K FROM t100 AS X, t100 AS Y WHERE X.K < 20 AND Y.K <= 53;
+CREATE TABLE t54 ( K INT NOT NULL AUTO_INCREMENT,
+I INT,
+A INT,
+PRIMARY KEY(K), KEY IX(A)
+) engine = InnoDB;
+INSERT INTO t54(I,A) SELECT X.K,X.K FROM t100 AS X, t100 AS Y WHERE X.K < 20 AND Y.K <= 54;
+CREATE TABLE t55 ( K INT NOT NULL AUTO_INCREMENT,
+I INT,
+A INT,
+PRIMARY KEY(K), KEY IX(A)
+) engine = InnoDB;
+INSERT INTO t55(I,A) SELECT X.K,X.K FROM t100 AS X, t100 AS Y WHERE X.K < 20 AND Y.K <= 55;
+CREATE TABLE t56 ( K INT NOT NULL AUTO_INCREMENT,
+I INT,
+A INT,
+PRIMARY KEY(K), KEY IX(A)
+) engine = InnoDB;
+INSERT INTO t56(I,A) SELECT X.K,X.K FROM t100 AS X, t100 AS Y WHERE X.K < 20 AND Y.K <= 56;
+CREATE TABLE t57 ( K INT NOT NULL AUTO_INCREMENT,
+I INT,
+A INT,
+PRIMARY KEY(K), KEY IX(A)
+) engine = InnoDB;
+INSERT INTO t57(I,A) SELECT X.K,X.K FROM t100 AS X, t100 AS Y WHERE X.K < 20 AND Y.K <= 57;
+CREATE TABLE t58 ( K INT NOT NULL AUTO_INCREMENT,
+I INT,
+A INT,
+PRIMARY KEY(K), KEY IX(A)
+) engine = InnoDB;
+INSERT INTO t58(I,A) SELECT X.K,X.K FROM t100 AS X, t100 AS Y WHERE X.K < 20 AND Y.K <= 58;
+CREATE TABLE t59 ( K INT NOT NULL AUTO_INCREMENT,
+I INT,
+A INT,
+PRIMARY KEY(K), KEY IX(A)
+) engine = InnoDB;
+INSERT INTO t59(I,A) SELECT X.K,X.K FROM t100 AS X, t100 AS Y WHERE X.K < 20 AND Y.K <= 59;
+CREATE TABLE t60 ( K INT NOT NULL AUTO_INCREMENT,
+I INT,
+A INT,
+PRIMARY KEY(K), KEY IX(A)
+) engine = InnoDB;
+INSERT INTO t60(I,A) SELECT X.K,X.K FROM t100 AS X, t100 AS Y WHERE X.K < 20 AND Y.K <= 60;
+CREATE TABLE t61 ( K INT NOT NULL AUTO_INCREMENT,
+I INT,
+A INT,
+PRIMARY KEY(K), KEY IX(A)
+) engine = InnoDB;
+INSERT INTO t61(I,A) SELECT X.K,X.K FROM t100 AS X, t100 AS Y WHERE X.K < 20 AND Y.K <= 61;
+ANALYZE TABLE t100, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18, t19, t20, t21, t22, t23, t24, t25, t26, t27, t28, t29, t30, t31, t32, t33, t34, t35, t36, t37, t38, t39, t40, t41, t42, t43, t44, t45, t46, t47, t48, t49, t50, t51, t52, t53, t54, t55, t56, t57, t58, t59, t60, t61;
+set optimizer_prune_level=default;
+flush status;
+set optimizer_search_depth=0;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I JOIN t45 ON t45.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I JOIN t45 ON t45.I=x.I JOIN t46 ON t46.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I JOIN t45 ON t45.I=x.I JOIN t46 ON t46.I=x.I JOIN t47 ON t47.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I JOIN t45 ON t45.I=x.I JOIN t46 ON t46.I=x.I JOIN t47 ON t47.I=x.I JOIN t48 ON t48.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I JOIN t45 ON t45.I=x.I JOIN t46 ON t46.I=x.I JOIN t47 ON t47.I=x.I JOIN t48 ON t48.I=x.I JOIN t49 ON t49.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I JOIN t45 ON t45.I=x.I JOIN t46 ON t46.I=x.I JOIN t47 ON t47.I=x.I JOIN t48 ON t48.I=x.I JOIN t49 ON t49.I=x.I JOIN t50 ON t50.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I JOIN t45 ON t45.I=x.I JOIN t46 ON t46.I=x.I JOIN t47 ON t47.I=x.I JOIN t48 ON t48.I=x.I JOIN t49 ON t49.I=x.I JOIN t50 ON t50.I=x.I JOIN t51 ON t51.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I JOIN t45 ON t45.I=x.I JOIN t46 ON t46.I=x.I JOIN t47 ON t47.I=x.I JOIN t48 ON t48.I=x.I JOIN t49 ON t49.I=x.I JOIN t50 ON t50.I=x.I JOIN t51 ON t51.I=x.I JOIN t52 ON t52.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I JOIN t45 ON t45.I=x.I JOIN t46 ON t46.I=x.I JOIN t47 ON t47.I=x.I JOIN t48 ON t48.I=x.I JOIN t49 ON t49.I=x.I JOIN t50 ON t50.I=x.I JOIN t51 ON t51.I=x.I JOIN t52 ON t52.I=x.I JOIN t53 ON t53.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I JOIN t45 ON t45.I=x.I JOIN t46 ON t46.I=x.I JOIN t47 ON t47.I=x.I JOIN t48 ON t48.I=x.I JOIN t49 ON t49.I=x.I JOIN t50 ON t50.I=x.I JOIN t51 ON t51.I=x.I JOIN t52 ON t52.I=x.I JOIN t53 ON t53.I=x.I JOIN t54 ON t54.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I JOIN t45 ON t45.I=x.I JOIN t46 ON t46.I=x.I JOIN t47 ON t47.I=x.I JOIN t48 ON t48.I=x.I JOIN t49 ON t49.I=x.I JOIN t50 ON t50.I=x.I JOIN t51 ON t51.I=x.I JOIN t52 ON t52.I=x.I JOIN t53 ON t53.I=x.I JOIN t54 ON t54.I=x.I JOIN t55 ON t55.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I JOIN t45 ON t45.I=x.I JOIN t46 ON t46.I=x.I JOIN t47 ON t47.I=x.I JOIN t48 ON t48.I=x.I JOIN t49 ON t49.I=x.I JOIN t50 ON t50.I=x.I JOIN t51 ON t51.I=x.I JOIN t52 ON t52.I=x.I JOIN t53 ON t53.I=x.I JOIN t54 ON t54.I=x.I JOIN t55 ON t55.I=x.I JOIN t56 ON t56.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I JOIN t45 ON t45.I=x.I JOIN t46 ON t46.I=x.I JOIN t47 ON t47.I=x.I JOIN t48 ON t48.I=x.I JOIN t49 ON t49.I=x.I JOIN t50 ON t50.I=x.I JOIN t51 ON t51.I=x.I JOIN t52 ON t52.I=x.I JOIN t53 ON t53.I=x.I JOIN t54 ON t54.I=x.I JOIN t55 ON t55.I=x.I JOIN t56 ON t56.I=x.I JOIN t57 ON t57.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I JOIN t45 ON t45.I=x.I JOIN t46 ON t46.I=x.I JOIN t47 ON t47.I=x.I JOIN t48 ON t48.I=x.I JOIN t49 ON t49.I=x.I JOIN t50 ON t50.I=x.I JOIN t51 ON t51.I=x.I JOIN t52 ON t52.I=x.I JOIN t53 ON t53.I=x.I JOIN t54 ON t54.I=x.I JOIN t55 ON t55.I=x.I JOIN t56 ON t56.I=x.I JOIN t57 ON t57.I=x.I JOIN t58 ON t58.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I JOIN t45 ON t45.I=x.I JOIN t46 ON t46.I=x.I JOIN t47 ON t47.I=x.I JOIN t48 ON t48.I=x.I JOIN t49 ON t49.I=x.I JOIN t50 ON t50.I=x.I JOIN t51 ON t51.I=x.I JOIN t52 ON t52.I=x.I JOIN t53 ON t53.I=x.I JOIN t54 ON t54.I=x.I JOIN t55 ON t55.I=x.I JOIN t56 ON t56.I=x.I JOIN t57 ON t57.I=x.I JOIN t58 ON t58.I=x.I JOIN t59 ON t59.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I JOIN t45 ON t45.I=x.I JOIN t46 ON t46.I=x.I JOIN t47 ON t47.I=x.I JOIN t48 ON t48.I=x.I JOIN t49 ON t49.I=x.I JOIN t50 ON t50.I=x.I JOIN t51 ON t51.I=x.I JOIN t52 ON t52.I=x.I JOIN t53 ON t53.I=x.I JOIN t54 ON t54.I=x.I JOIN t55 ON t55.I=x.I JOIN t56 ON t56.I=x.I JOIN t57 ON t57.I=x.I JOIN t58 ON t58.I=x.I JOIN t59 ON t59.I=x.I JOIN t60 ON t60.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 as t1 ON t1.I=x.I JOIN t1 as t2 ON t2.I=x.I JOIN t1 as t3 ON t3.I=x.I JOIN t1 as t4 ON t4.I=x.I JOIN t1 as t5 ON t5.I=x.I JOIN t1 as t6 ON t6.I=x.I JOIN t1 as t7 ON t7.I=x.I JOIN t1 as t8 ON t8.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 as t1 ON t1.I=x.I JOIN t1 as t2 ON t2.I=x.I JOIN t1 as t3 ON t3.I=x.I JOIN t1 as t4 ON t4.I=x.I JOIN t1 as t5 ON t5.I=x.I JOIN t1 as t6 ON t6.I=x.I JOIN t1 as t7 ON t7.I=x.I JOIN t1 as t8 ON t8.I=x.I JOIN t9 as t9 ON t9.I=x.I JOIN t9 as t10 ON t10.I=x.I JOIN t9 as t11 ON t11.I=x.I JOIN t9 as t12 ON t12.I=x.I JOIN t9 as t13 ON t13.I=x.I JOIN t9 as t14 ON t14.I=x.I JOIN t9 as t15 ON t15.I=x.I JOIN t9 as t16 ON t16.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 as t1 ON t1.I=x.I JOIN t1 as t2 ON t2.I=x.I JOIN t1 as t3 ON t3.I=x.I JOIN t1 as t4 ON t4.I=x.I JOIN t1 as t5 ON t5.I=x.I JOIN t1 as t6 ON t6.I=x.I JOIN t1 as t7 ON t7.I=x.I JOIN t1 as t8 ON t8.I=x.I JOIN t9 as t9 ON t9.I=x.I JOIN t9 as t10 ON t10.I=x.I JOIN t9 as t11 ON t11.I=x.I JOIN t9 as t12 ON t12.I=x.I JOIN t9 as t13 ON t13.I=x.I JOIN t9 as t14 ON t14.I=x.I JOIN t9 as t15 ON t15.I=x.I JOIN t9 as t16 ON t16.I=x.I JOIN t17 as t17 ON t17.I=x.I JOIN t17 as t18 ON t18.I=x.I JOIN t17 as t19 ON t19.I=x.I JOIN t17 as t20 ON t20.I=x.I JOIN t17 as t21 ON t21.I=x.I JOIN t17 as t22 ON t22.I=x.I JOIN t17 as t23 ON t23.I=x.I JOIN t17 as t24 ON t24.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 as t1 ON t1.I=x.I JOIN t1 as t2 ON t2.I=x.I JOIN t1 as t3 ON t3.I=x.I JOIN t1 as t4 ON t4.I=x.I JOIN t1 as t5 ON t5.I=x.I JOIN t1 as t6 ON t6.I=x.I JOIN t1 as t7 ON t7.I=x.I JOIN t1 as t8 ON t8.I=x.I JOIN t9 as t9 ON t9.I=x.I JOIN t9 as t10 ON t10.I=x.I JOIN t9 as t11 ON t11.I=x.I JOIN t9 as t12 ON t12.I=x.I JOIN t9 as t13 ON t13.I=x.I JOIN t9 as t14 ON t14.I=x.I JOIN t9 as t15 ON t15.I=x.I JOIN t9 as t16 ON t16.I=x.I JOIN t17 as t17 ON t17.I=x.I JOIN t17 as t18 ON t18.I=x.I JOIN t17 as t19 ON t19.I=x.I JOIN t17 as t20 ON t20.I=x.I JOIN t17 as t21 ON t21.I=x.I JOIN t17 as t22 ON t22.I=x.I JOIN t17 as t23 ON t23.I=x.I JOIN t17 as t24 ON t24.I=x.I JOIN t25 as t25 ON t25.I=x.I JOIN t25 as t26 ON t26.I=x.I JOIN t25 as t27 ON t27.I=x.I JOIN t25 as t28 ON t28.I=x.I JOIN t25 as t29 ON t29.I=x.I JOIN t25 as t30 ON t30.I=x.I JOIN t25 as t31 ON t31.I=x.I JOIN t25 as t32 ON t32.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 as t1 ON t1.I=x.I JOIN t1 as t2 ON t2.I=x.I JOIN t1 as t3 ON t3.I=x.I JOIN t1 as t4 ON t4.I=x.I JOIN t1 as t5 ON t5.I=x.I JOIN t1 as t6 ON t6.I=x.I JOIN t1 as t7 ON t7.I=x.I JOIN t1 as t8 ON t8.I=x.I JOIN t9 as t9 ON t9.I=x.I JOIN t9 as t10 ON t10.I=x.I JOIN t9 as t11 ON t11.I=x.I JOIN t9 as t12 ON t12.I=x.I JOIN t9 as t13 ON t13.I=x.I JOIN t9 as t14 ON t14.I=x.I JOIN t9 as t15 ON t15.I=x.I JOIN t9 as t16 ON t16.I=x.I JOIN t17 as t17 ON t17.I=x.I JOIN t17 as t18 ON t18.I=x.I JOIN t17 as t19 ON t19.I=x.I JOIN t17 as t20 ON t20.I=x.I JOIN t17 as t21 ON t21.I=x.I JOIN t17 as t22 ON t22.I=x.I JOIN t17 as t23 ON t23.I=x.I JOIN t17 as t24 ON t24.I=x.I JOIN t25 as t25 ON t25.I=x.I JOIN t25 as t26 ON t26.I=x.I JOIN t25 as t27 ON t27.I=x.I JOIN t25 as t28 ON t28.I=x.I JOIN t25 as t29 ON t29.I=x.I JOIN t25 as t30 ON t30.I=x.I JOIN t25 as t31 ON t31.I=x.I JOIN t25 as t32 ON t32.I=x.I JOIN t33 as t33 ON t33.I=x.I JOIN t33 as t34 ON t34.I=x.I JOIN t33 as t35 ON t35.I=x.I JOIN t33 as t36 ON t36.I=x.I JOIN t33 as t37 ON t37.I=x.I JOIN t33 as t38 ON t38.I=x.I JOIN t33 as t39 ON t39.I=x.I JOIN t33 as t40 ON t40.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 as t1 ON t1.I=x.I JOIN t1 as t2 ON t2.I=x.I JOIN t1 as t3 ON t3.I=x.I JOIN t1 as t4 ON t4.I=x.I JOIN t1 as t5 ON t5.I=x.I JOIN t1 as t6 ON t6.I=x.I JOIN t1 as t7 ON t7.I=x.I JOIN t1 as t8 ON t8.I=x.I JOIN t9 as t9 ON t9.I=x.I JOIN t9 as t10 ON t10.I=x.I JOIN t9 as t11 ON t11.I=x.I JOIN t9 as t12 ON t12.I=x.I JOIN t9 as t13 ON t13.I=x.I JOIN t9 as t14 ON t14.I=x.I JOIN t9 as t15 ON t15.I=x.I JOIN t9 as t16 ON t16.I=x.I JOIN t17 as t17 ON t17.I=x.I JOIN t17 as t18 ON t18.I=x.I JOIN t17 as t19 ON t19.I=x.I JOIN t17 as t20 ON t20.I=x.I JOIN t17 as t21 ON t21.I=x.I JOIN t17 as t22 ON t22.I=x.I JOIN t17 as t23 ON t23.I=x.I JOIN t17 as t24 ON t24.I=x.I JOIN t25 as t25 ON t25.I=x.I JOIN t25 as t26 ON t26.I=x.I JOIN t25 as t27 ON t27.I=x.I JOIN t25 as t28 ON t28.I=x.I JOIN t25 as t29 ON t29.I=x.I JOIN t25 as t30 ON t30.I=x.I JOIN t25 as t31 ON t31.I=x.I JOIN t25 as t32 ON t32.I=x.I JOIN t33 as t33 ON t33.I=x.I JOIN t33 as t34 ON t34.I=x.I JOIN t33 as t35 ON t35.I=x.I JOIN t33 as t36 ON t36.I=x.I JOIN t33 as t37 ON t37.I=x.I JOIN t33 as t38 ON t38.I=x.I JOIN t33 as t39 ON t39.I=x.I JOIN t33 as t40 ON t40.I=x.I JOIN t41 as t41 ON t41.I=x.I JOIN t41 as t42 ON t42.I=x.I JOIN t41 as t43 ON t43.I=x.I JOIN t41 as t44 ON t44.I=x.I JOIN t41 as t45 ON t45.I=x.I JOIN t41 as t46 ON t46.I=x.I JOIN t41 as t47 ON t47.I=x.I JOIN t41 as t48 ON t48.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 as t1 ON t1.I=x.I JOIN t1 as t2 ON t2.I=x.I JOIN t1 as t3 ON t3.I=x.I JOIN t1 as t4 ON t4.I=x.I JOIN t1 as t5 ON t5.I=x.I JOIN t1 as t6 ON t6.I=x.I JOIN t1 as t7 ON t7.I=x.I JOIN t1 as t8 ON t8.I=x.I JOIN t9 as t9 ON t9.I=x.I JOIN t9 as t10 ON t10.I=x.I JOIN t9 as t11 ON t11.I=x.I JOIN t9 as t12 ON t12.I=x.I JOIN t9 as t13 ON t13.I=x.I JOIN t9 as t14 ON t14.I=x.I JOIN t9 as t15 ON t15.I=x.I JOIN t9 as t16 ON t16.I=x.I JOIN t17 as t17 ON t17.I=x.I JOIN t17 as t18 ON t18.I=x.I JOIN t17 as t19 ON t19.I=x.I JOIN t17 as t20 ON t20.I=x.I JOIN t17 as t21 ON t21.I=x.I JOIN t17 as t22 ON t22.I=x.I JOIN t17 as t23 ON t23.I=x.I JOIN t17 as t24 ON t24.I=x.I JOIN t25 as t25 ON t25.I=x.I JOIN t25 as t26 ON t26.I=x.I JOIN t25 as t27 ON t27.I=x.I JOIN t25 as t28 ON t28.I=x.I JOIN t25 as t29 ON t29.I=x.I JOIN t25 as t30 ON t30.I=x.I JOIN t25 as t31 ON t31.I=x.I JOIN t25 as t32 ON t32.I=x.I JOIN t33 as t33 ON t33.I=x.I JOIN t33 as t34 ON t34.I=x.I JOIN t33 as t35 ON t35.I=x.I JOIN t33 as t36 ON t36.I=x.I JOIN t33 as t37 ON t37.I=x.I JOIN t33 as t38 ON t38.I=x.I JOIN t33 as t39 ON t39.I=x.I JOIN t33 as t40 ON t40.I=x.I JOIN t41 as t41 ON t41.I=x.I JOIN t41 as t42 ON t42.I=x.I JOIN t41 as t43 ON t43.I=x.I JOIN t41 as t44 ON t44.I=x.I JOIN t41 as t45 ON t45.I=x.I JOIN t41 as t46 ON t46.I=x.I JOIN t41 as t47 ON t47.I=x.I JOIN t41 as t48 ON t48.I=x.I JOIN t49 as t49 ON t49.I=x.I JOIN t49 as t50 ON t50.I=x.I JOIN t49 as t51 ON t51.I=x.I JOIN t49 as t52 ON t52.I=x.I JOIN t49 as t53 ON t53.I=x.I JOIN t49 as t54 ON t54.I=x.I JOIN t49 as t55 ON t55.I=x.I JOIN t49 as t56 ON t56.I=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.I = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.I = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.I = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.I = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.I = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.I = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.I = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.I = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.I = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.I = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.I = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.I = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.I = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.I = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.I = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.I = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.I = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.I = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.I = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.I = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.I = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.I = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.I = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.I = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.I = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.I = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.I = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.I = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.I = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.I = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.I = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.I = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.I = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.I = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.I = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.I = x.I JOIN t32 ON t32.I = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.I = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.I = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.I = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.I = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.I = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.I = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.I = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.I = x.I JOIN t32 ON t32.I = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.I = x.I JOIN t36 ON t36.I = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.I = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.I = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.I = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.I = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.I = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.I = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.I = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.I = x.I JOIN t32 ON t32.I = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.I = x.I JOIN t36 ON t36.I = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.I = x.I JOIN t40 ON t40.I = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.I = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.I = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.I = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.I = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.I = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.I = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.I = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.I = x.I JOIN t32 ON t32.I = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.I = x.I JOIN t36 ON t36.I = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.I = x.I JOIN t40 ON t40.I = x.I JOIN t41 ON t41.I = x.I JOIN t42 ON t42.K = x.I JOIN t43 ON t43.I = x.I JOIN t44 ON t44.I = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.I = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.I = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.I = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.I = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.I = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.I = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.I = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.I = x.I JOIN t32 ON t32.I = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.I = x.I JOIN t36 ON t36.I = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.I = x.I JOIN t40 ON t40.I = x.I JOIN t41 ON t41.I = x.I JOIN t42 ON t42.K = x.I JOIN t43 ON t43.I = x.I JOIN t44 ON t44.I = x.I JOIN t45 ON t45.I = x.I JOIN t46 ON t46.K = x.I JOIN t47 ON t47.I = x.I JOIN t48 ON t48.I = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.I = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.I = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.I = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.I = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.I = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.I = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.I = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.I = x.I JOIN t32 ON t32.I = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.I = x.I JOIN t36 ON t36.I = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.I = x.I JOIN t40 ON t40.I = x.I JOIN t41 ON t41.I = x.I JOIN t42 ON t42.K = x.I JOIN t43 ON t43.I = x.I JOIN t44 ON t44.I = x.I JOIN t45 ON t45.I = x.I JOIN t46 ON t46.K = x.I JOIN t47 ON t47.I = x.I JOIN t48 ON t48.I = x.I JOIN t49 ON t49.I = x.I JOIN t50 ON t50.K = x.I JOIN t51 ON t51.I = x.I JOIN t52 ON t52.I = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.I = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.I = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.I = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.I = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.I = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.I = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.I = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.I = x.I JOIN t32 ON t32.I = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.I = x.I JOIN t36 ON t36.I = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.I = x.I JOIN t40 ON t40.I = x.I JOIN t41 ON t41.I = x.I JOIN t42 ON t42.K = x.I JOIN t43 ON t43.I = x.I JOIN t44 ON t44.I = x.I JOIN t45 ON t45.I = x.I JOIN t46 ON t46.K = x.I JOIN t47 ON t47.I = x.I JOIN t48 ON t48.I = x.I JOIN t49 ON t49.I = x.I JOIN t50 ON t50.K = x.I JOIN t51 ON t51.I = x.I JOIN t52 ON t52.I = x.I JOIN t53 ON t53.I = x.I JOIN t54 ON t54.K = x.I JOIN t55 ON t55.I = x.I JOIN t56 ON t56.I = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.I = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.I = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.I = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.I = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.I = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.I = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.I = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.I = x.I JOIN t32 ON t32.I = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.I = x.I JOIN t36 ON t36.I = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.I = x.I JOIN t40 ON t40.I = x.I JOIN t41 ON t41.I = x.I JOIN t42 ON t42.K = x.I JOIN t43 ON t43.I = x.I JOIN t44 ON t44.I = x.I JOIN t45 ON t45.I = x.I JOIN t46 ON t46.K = x.I JOIN t47 ON t47.I = x.I JOIN t48 ON t48.I = x.I JOIN t49 ON t49.I = x.I JOIN t50 ON t50.K = x.I JOIN t51 ON t51.I = x.I JOIN t52 ON t52.I = x.I JOIN t53 ON t53.I = x.I JOIN t54 ON t54.K = x.I JOIN t55 ON t55.I = x.I JOIN t56 ON t56.I = x.I JOIN t57 ON t57.I = x.I JOIN t58 ON t58.K = x.I JOIN t59 ON t59.I = x.I JOIN t60 ON t60.I = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.K = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.I = x.I JOIN t32 ON t32.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.K = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.I = x.I JOIN t32 ON t32.K = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.I = x.I JOIN t36 ON t36.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.K = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.I = x.I JOIN t32 ON t32.K = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.I = x.I JOIN t36 ON t36.K = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.I = x.I JOIN t40 ON t40.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.K = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.I = x.I JOIN t32 ON t32.K = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.I = x.I JOIN t36 ON t36.K = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.I = x.I JOIN t40 ON t40.K = x.I JOIN t41 ON t41.I = x.I JOIN t42 ON t42.K = x.I JOIN t43 ON t43.I = x.I JOIN t44 ON t44.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.K = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.I = x.I JOIN t32 ON t32.K = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.I = x.I JOIN t36 ON t36.K = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.I = x.I JOIN t40 ON t40.K = x.I JOIN t41 ON t41.I = x.I JOIN t42 ON t42.K = x.I JOIN t43 ON t43.I = x.I JOIN t44 ON t44.K = x.I JOIN t45 ON t45.I = x.I JOIN t46 ON t46.K = x.I JOIN t47 ON t47.I = x.I JOIN t48 ON t48.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.K = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.I = x.I JOIN t32 ON t32.K = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.I = x.I JOIN t36 ON t36.K = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.I = x.I JOIN t40 ON t40.K = x.I JOIN t41 ON t41.I = x.I JOIN t42 ON t42.K = x.I JOIN t43 ON t43.I = x.I JOIN t44 ON t44.K = x.I JOIN t45 ON t45.I = x.I JOIN t46 ON t46.K = x.I JOIN t47 ON t47.I = x.I JOIN t48 ON t48.K = x.I JOIN t49 ON t49.I = x.I JOIN t50 ON t50.K = x.I JOIN t51 ON t51.I = x.I JOIN t52 ON t52.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.K = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.I = x.I JOIN t32 ON t32.K = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.I = x.I JOIN t36 ON t36.K = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.I = x.I JOIN t40 ON t40.K = x.I JOIN t41 ON t41.I = x.I JOIN t42 ON t42.K = x.I JOIN t43 ON t43.I = x.I JOIN t44 ON t44.K = x.I JOIN t45 ON t45.I = x.I JOIN t46 ON t46.K = x.I JOIN t47 ON t47.I = x.I JOIN t48 ON t48.K = x.I JOIN t49 ON t49.I = x.I JOIN t50 ON t50.K = x.I JOIN t51 ON t51.I = x.I JOIN t52 ON t52.K = x.I JOIN t53 ON t53.I = x.I JOIN t54 ON t54.K = x.I JOIN t55 ON t55.I = x.I JOIN t56 ON t56.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.K = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.I = x.I JOIN t32 ON t32.K = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.I = x.I JOIN t36 ON t36.K = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.I = x.I JOIN t40 ON t40.K = x.I JOIN t41 ON t41.I = x.I JOIN t42 ON t42.K = x.I JOIN t43 ON t43.I = x.I JOIN t44 ON t44.K = x.I JOIN t45 ON t45.I = x.I JOIN t46 ON t46.K = x.I JOIN t47 ON t47.I = x.I JOIN t48 ON t48.K = x.I JOIN t49 ON t49.I = x.I JOIN t50 ON t50.K = x.I JOIN t51 ON t51.I = x.I JOIN t52 ON t52.K = x.I JOIN t53 ON t53.I = x.I JOIN t54 ON t54.K = x.I JOIN t55 ON t55.I = x.I JOIN t56 ON t56.K = x.I JOIN t57 ON t57.I = x.I JOIN t58 ON t58.K = x.I JOIN t59 ON t59.I = x.I JOIN t60 ON t60.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.K = x.I JOIN t4 ON t4.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.K = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.K = x.I JOIN t8 ON t8.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.K = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.K = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.K = x.I JOIN t12 ON t12.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.K = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.K = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.K = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.K = x.I JOIN t16 ON t16.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.K = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.K = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.K = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.K = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.K = x.I JOIN t20 ON t20.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.K = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.K = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.K = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.K = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.K = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.K = x.I JOIN t24 ON t24.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.K = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.K = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.K = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.K = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.K = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.K = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.K = x.I JOIN t28 ON t28.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.K = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.K = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.K = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.K = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.K = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.K = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.K = x.I JOIN t28 ON t28.K = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.K = x.I JOIN t32 ON t32.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.K = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.K = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.K = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.K = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.K = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.K = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.K = x.I JOIN t28 ON t28.K = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.K = x.I JOIN t32 ON t32.K = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.K = x.I JOIN t36 ON t36.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.K = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.K = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.K = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.K = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.K = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.K = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.K = x.I JOIN t28 ON t28.K = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.K = x.I JOIN t32 ON t32.K = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.K = x.I JOIN t36 ON t36.K = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.K = x.I JOIN t40 ON t40.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.K = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.K = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.K = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.K = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.K = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.K = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.K = x.I JOIN t28 ON t28.K = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.K = x.I JOIN t32 ON t32.K = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.K = x.I JOIN t36 ON t36.K = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.K = x.I JOIN t40 ON t40.K = x.I JOIN t41 ON t41.I = x.I JOIN t42 ON t42.K = x.I JOIN t43 ON t43.K = x.I JOIN t44 ON t44.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.K = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.K = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.K = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.K = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.K = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.K = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.K = x.I JOIN t28 ON t28.K = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.K = x.I JOIN t32 ON t32.K = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.K = x.I JOIN t36 ON t36.K = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.K = x.I JOIN t40 ON t40.K = x.I JOIN t41 ON t41.I = x.I JOIN t42 ON t42.K = x.I JOIN t43 ON t43.K = x.I JOIN t44 ON t44.K = x.I JOIN t45 ON t45.I = x.I JOIN t46 ON t46.K = x.I JOIN t47 ON t47.K = x.I JOIN t48 ON t48.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.K = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.K = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.K = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.K = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.K = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.K = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.K = x.I JOIN t28 ON t28.K = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.K = x.I JOIN t32 ON t32.K = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.K = x.I JOIN t36 ON t36.K = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.K = x.I JOIN t40 ON t40.K = x.I JOIN t41 ON t41.I = x.I JOIN t42 ON t42.K = x.I JOIN t43 ON t43.K = x.I JOIN t44 ON t44.K = x.I JOIN t45 ON t45.I = x.I JOIN t46 ON t46.K = x.I JOIN t47 ON t47.K = x.I JOIN t48 ON t48.K = x.I JOIN t49 ON t49.I = x.I JOIN t50 ON t50.K = x.I JOIN t51 ON t51.K = x.I JOIN t52 ON t52.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.K = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.K = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.K = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.K = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.K = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.K = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.K = x.I JOIN t28 ON t28.K = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.K = x.I JOIN t32 ON t32.K = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.K = x.I JOIN t36 ON t36.K = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.K = x.I JOIN t40 ON t40.K = x.I JOIN t41 ON t41.I = x.I JOIN t42 ON t42.K = x.I JOIN t43 ON t43.K = x.I JOIN t44 ON t44.K = x.I JOIN t45 ON t45.I = x.I JOIN t46 ON t46.K = x.I JOIN t47 ON t47.K = x.I JOIN t48 ON t48.K = x.I JOIN t49 ON t49.I = x.I JOIN t50 ON t50.K = x.I JOIN t51 ON t51.K = x.I JOIN t52 ON t52.K = x.I JOIN t53 ON t53.I = x.I JOIN t54 ON t54.K = x.I JOIN t55 ON t55.K = x.I JOIN t56 ON t56.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.K = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.K = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.K = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.K = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.K = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.K = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.K = x.I JOIN t28 ON t28.K = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.K = x.I JOIN t32 ON t32.K = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.K = x.I JOIN t36 ON t36.K = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.K = x.I JOIN t40 ON t40.K = x.I JOIN t41 ON t41.I = x.I JOIN t42 ON t42.K = x.I JOIN t43 ON t43.K = x.I JOIN t44 ON t44.K = x.I JOIN t45 ON t45.I = x.I JOIN t46 ON t46.K = x.I JOIN t47 ON t47.K = x.I JOIN t48 ON t48.K = x.I JOIN t49 ON t49.I = x.I JOIN t50 ON t50.K = x.I JOIN t51 ON t51.K = x.I JOIN t52 ON t52.K = x.I JOIN t53 ON t53.I = x.I JOIN t54 ON t54.K = x.I JOIN t55 ON t55.K = x.I JOIN t56 ON t56.K = x.I JOIN t57 ON t57.I = x.I JOIN t58 ON t58.K = x.I JOIN t59 ON t59.K = x.I JOIN t60 ON t60.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I JOIN t45 ON t45.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I JOIN t45 ON t45.K=x.I JOIN t46 ON t46.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I JOIN t45 ON t45.K=x.I JOIN t46 ON t46.K=x.I JOIN t47 ON t47.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I JOIN t45 ON t45.K=x.I JOIN t46 ON t46.K=x.I JOIN t47 ON t47.K=x.I JOIN t48 ON t48.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I JOIN t45 ON t45.K=x.I JOIN t46 ON t46.K=x.I JOIN t47 ON t47.K=x.I JOIN t48 ON t48.K=x.I JOIN t49 ON t49.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I JOIN t45 ON t45.K=x.I JOIN t46 ON t46.K=x.I JOIN t47 ON t47.K=x.I JOIN t48 ON t48.K=x.I JOIN t49 ON t49.K=x.I JOIN t50 ON t50.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I JOIN t45 ON t45.K=x.I JOIN t46 ON t46.K=x.I JOIN t47 ON t47.K=x.I JOIN t48 ON t48.K=x.I JOIN t49 ON t49.K=x.I JOIN t50 ON t50.K=x.I JOIN t51 ON t51.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I JOIN t45 ON t45.K=x.I JOIN t46 ON t46.K=x.I JOIN t47 ON t47.K=x.I JOIN t48 ON t48.K=x.I JOIN t49 ON t49.K=x.I JOIN t50 ON t50.K=x.I JOIN t51 ON t51.K=x.I JOIN t52 ON t52.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I JOIN t45 ON t45.K=x.I JOIN t46 ON t46.K=x.I JOIN t47 ON t47.K=x.I JOIN t48 ON t48.K=x.I JOIN t49 ON t49.K=x.I JOIN t50 ON t50.K=x.I JOIN t51 ON t51.K=x.I JOIN t52 ON t52.K=x.I JOIN t53 ON t53.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I JOIN t45 ON t45.K=x.I JOIN t46 ON t46.K=x.I JOIN t47 ON t47.K=x.I JOIN t48 ON t48.K=x.I JOIN t49 ON t49.K=x.I JOIN t50 ON t50.K=x.I JOIN t51 ON t51.K=x.I JOIN t52 ON t52.K=x.I JOIN t53 ON t53.K=x.I JOIN t54 ON t54.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I JOIN t45 ON t45.K=x.I JOIN t46 ON t46.K=x.I JOIN t47 ON t47.K=x.I JOIN t48 ON t48.K=x.I JOIN t49 ON t49.K=x.I JOIN t50 ON t50.K=x.I JOIN t51 ON t51.K=x.I JOIN t52 ON t52.K=x.I JOIN t53 ON t53.K=x.I JOIN t54 ON t54.K=x.I JOIN t55 ON t55.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I JOIN t45 ON t45.K=x.I JOIN t46 ON t46.K=x.I JOIN t47 ON t47.K=x.I JOIN t48 ON t48.K=x.I JOIN t49 ON t49.K=x.I JOIN t50 ON t50.K=x.I JOIN t51 ON t51.K=x.I JOIN t52 ON t52.K=x.I JOIN t53 ON t53.K=x.I JOIN t54 ON t54.K=x.I JOIN t55 ON t55.K=x.I JOIN t56 ON t56.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I JOIN t45 ON t45.K=x.I JOIN t46 ON t46.K=x.I JOIN t47 ON t47.K=x.I JOIN t48 ON t48.K=x.I JOIN t49 ON t49.K=x.I JOIN t50 ON t50.K=x.I JOIN t51 ON t51.K=x.I JOIN t52 ON t52.K=x.I JOIN t53 ON t53.K=x.I JOIN t54 ON t54.K=x.I JOIN t55 ON t55.K=x.I JOIN t56 ON t56.K=x.I JOIN t57 ON t57.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I JOIN t45 ON t45.K=x.I JOIN t46 ON t46.K=x.I JOIN t47 ON t47.K=x.I JOIN t48 ON t48.K=x.I JOIN t49 ON t49.K=x.I JOIN t50 ON t50.K=x.I JOIN t51 ON t51.K=x.I JOIN t52 ON t52.K=x.I JOIN t53 ON t53.K=x.I JOIN t54 ON t54.K=x.I JOIN t55 ON t55.K=x.I JOIN t56 ON t56.K=x.I JOIN t57 ON t57.K=x.I JOIN t58 ON t58.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I JOIN t45 ON t45.K=x.I JOIN t46 ON t46.K=x.I JOIN t47 ON t47.K=x.I JOIN t48 ON t48.K=x.I JOIN t49 ON t49.K=x.I JOIN t50 ON t50.K=x.I JOIN t51 ON t51.K=x.I JOIN t52 ON t52.K=x.I JOIN t53 ON t53.K=x.I JOIN t54 ON t54.K=x.I JOIN t55 ON t55.K=x.I JOIN t56 ON t56.K=x.I JOIN t57 ON t57.K=x.I JOIN t58 ON t58.K=x.I JOIN t59 ON t59.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I JOIN t45 ON t45.K=x.I JOIN t46 ON t46.K=x.I JOIN t47 ON t47.K=x.I JOIN t48 ON t48.K=x.I JOIN t49 ON t49.K=x.I JOIN t50 ON t50.K=x.I JOIN t51 ON t51.K=x.I JOIN t52 ON t52.K=x.I JOIN t53 ON t53.K=x.I JOIN t54 ON t54.K=x.I JOIN t55 ON t55.K=x.I JOIN t56 ON t56.K=x.I JOIN t57 ON t57.K=x.I JOIN t58 ON t58.K=x.I JOIN t59 ON t59.K=x.I JOIN t60 ON t60.K=x.I;
+set optimizer_search_depth=1;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I JOIN t45 ON t45.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I JOIN t45 ON t45.I=x.I JOIN t46 ON t46.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I JOIN t45 ON t45.I=x.I JOIN t46 ON t46.I=x.I JOIN t47 ON t47.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I JOIN t45 ON t45.I=x.I JOIN t46 ON t46.I=x.I JOIN t47 ON t47.I=x.I JOIN t48 ON t48.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I JOIN t45 ON t45.I=x.I JOIN t46 ON t46.I=x.I JOIN t47 ON t47.I=x.I JOIN t48 ON t48.I=x.I JOIN t49 ON t49.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I JOIN t45 ON t45.I=x.I JOIN t46 ON t46.I=x.I JOIN t47 ON t47.I=x.I JOIN t48 ON t48.I=x.I JOIN t49 ON t49.I=x.I JOIN t50 ON t50.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I JOIN t45 ON t45.I=x.I JOIN t46 ON t46.I=x.I JOIN t47 ON t47.I=x.I JOIN t48 ON t48.I=x.I JOIN t49 ON t49.I=x.I JOIN t50 ON t50.I=x.I JOIN t51 ON t51.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I JOIN t45 ON t45.I=x.I JOIN t46 ON t46.I=x.I JOIN t47 ON t47.I=x.I JOIN t48 ON t48.I=x.I JOIN t49 ON t49.I=x.I JOIN t50 ON t50.I=x.I JOIN t51 ON t51.I=x.I JOIN t52 ON t52.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I JOIN t45 ON t45.I=x.I JOIN t46 ON t46.I=x.I JOIN t47 ON t47.I=x.I JOIN t48 ON t48.I=x.I JOIN t49 ON t49.I=x.I JOIN t50 ON t50.I=x.I JOIN t51 ON t51.I=x.I JOIN t52 ON t52.I=x.I JOIN t53 ON t53.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I JOIN t45 ON t45.I=x.I JOIN t46 ON t46.I=x.I JOIN t47 ON t47.I=x.I JOIN t48 ON t48.I=x.I JOIN t49 ON t49.I=x.I JOIN t50 ON t50.I=x.I JOIN t51 ON t51.I=x.I JOIN t52 ON t52.I=x.I JOIN t53 ON t53.I=x.I JOIN t54 ON t54.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I JOIN t45 ON t45.I=x.I JOIN t46 ON t46.I=x.I JOIN t47 ON t47.I=x.I JOIN t48 ON t48.I=x.I JOIN t49 ON t49.I=x.I JOIN t50 ON t50.I=x.I JOIN t51 ON t51.I=x.I JOIN t52 ON t52.I=x.I JOIN t53 ON t53.I=x.I JOIN t54 ON t54.I=x.I JOIN t55 ON t55.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I JOIN t45 ON t45.I=x.I JOIN t46 ON t46.I=x.I JOIN t47 ON t47.I=x.I JOIN t48 ON t48.I=x.I JOIN t49 ON t49.I=x.I JOIN t50 ON t50.I=x.I JOIN t51 ON t51.I=x.I JOIN t52 ON t52.I=x.I JOIN t53 ON t53.I=x.I JOIN t54 ON t54.I=x.I JOIN t55 ON t55.I=x.I JOIN t56 ON t56.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I JOIN t45 ON t45.I=x.I JOIN t46 ON t46.I=x.I JOIN t47 ON t47.I=x.I JOIN t48 ON t48.I=x.I JOIN t49 ON t49.I=x.I JOIN t50 ON t50.I=x.I JOIN t51 ON t51.I=x.I JOIN t52 ON t52.I=x.I JOIN t53 ON t53.I=x.I JOIN t54 ON t54.I=x.I JOIN t55 ON t55.I=x.I JOIN t56 ON t56.I=x.I JOIN t57 ON t57.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I JOIN t45 ON t45.I=x.I JOIN t46 ON t46.I=x.I JOIN t47 ON t47.I=x.I JOIN t48 ON t48.I=x.I JOIN t49 ON t49.I=x.I JOIN t50 ON t50.I=x.I JOIN t51 ON t51.I=x.I JOIN t52 ON t52.I=x.I JOIN t53 ON t53.I=x.I JOIN t54 ON t54.I=x.I JOIN t55 ON t55.I=x.I JOIN t56 ON t56.I=x.I JOIN t57 ON t57.I=x.I JOIN t58 ON t58.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I JOIN t45 ON t45.I=x.I JOIN t46 ON t46.I=x.I JOIN t47 ON t47.I=x.I JOIN t48 ON t48.I=x.I JOIN t49 ON t49.I=x.I JOIN t50 ON t50.I=x.I JOIN t51 ON t51.I=x.I JOIN t52 ON t52.I=x.I JOIN t53 ON t53.I=x.I JOIN t54 ON t54.I=x.I JOIN t55 ON t55.I=x.I JOIN t56 ON t56.I=x.I JOIN t57 ON t57.I=x.I JOIN t58 ON t58.I=x.I JOIN t59 ON t59.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I JOIN t45 ON t45.I=x.I JOIN t46 ON t46.I=x.I JOIN t47 ON t47.I=x.I JOIN t48 ON t48.I=x.I JOIN t49 ON t49.I=x.I JOIN t50 ON t50.I=x.I JOIN t51 ON t51.I=x.I JOIN t52 ON t52.I=x.I JOIN t53 ON t53.I=x.I JOIN t54 ON t54.I=x.I JOIN t55 ON t55.I=x.I JOIN t56 ON t56.I=x.I JOIN t57 ON t57.I=x.I JOIN t58 ON t58.I=x.I JOIN t59 ON t59.I=x.I JOIN t60 ON t60.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 as t1 ON t1.I=x.I JOIN t1 as t2 ON t2.I=x.I JOIN t1 as t3 ON t3.I=x.I JOIN t1 as t4 ON t4.I=x.I JOIN t1 as t5 ON t5.I=x.I JOIN t1 as t6 ON t6.I=x.I JOIN t1 as t7 ON t7.I=x.I JOIN t1 as t8 ON t8.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 as t1 ON t1.I=x.I JOIN t1 as t2 ON t2.I=x.I JOIN t1 as t3 ON t3.I=x.I JOIN t1 as t4 ON t4.I=x.I JOIN t1 as t5 ON t5.I=x.I JOIN t1 as t6 ON t6.I=x.I JOIN t1 as t7 ON t7.I=x.I JOIN t1 as t8 ON t8.I=x.I JOIN t9 as t9 ON t9.I=x.I JOIN t9 as t10 ON t10.I=x.I JOIN t9 as t11 ON t11.I=x.I JOIN t9 as t12 ON t12.I=x.I JOIN t9 as t13 ON t13.I=x.I JOIN t9 as t14 ON t14.I=x.I JOIN t9 as t15 ON t15.I=x.I JOIN t9 as t16 ON t16.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 as t1 ON t1.I=x.I JOIN t1 as t2 ON t2.I=x.I JOIN t1 as t3 ON t3.I=x.I JOIN t1 as t4 ON t4.I=x.I JOIN t1 as t5 ON t5.I=x.I JOIN t1 as t6 ON t6.I=x.I JOIN t1 as t7 ON t7.I=x.I JOIN t1 as t8 ON t8.I=x.I JOIN t9 as t9 ON t9.I=x.I JOIN t9 as t10 ON t10.I=x.I JOIN t9 as t11 ON t11.I=x.I JOIN t9 as t12 ON t12.I=x.I JOIN t9 as t13 ON t13.I=x.I JOIN t9 as t14 ON t14.I=x.I JOIN t9 as t15 ON t15.I=x.I JOIN t9 as t16 ON t16.I=x.I JOIN t17 as t17 ON t17.I=x.I JOIN t17 as t18 ON t18.I=x.I JOIN t17 as t19 ON t19.I=x.I JOIN t17 as t20 ON t20.I=x.I JOIN t17 as t21 ON t21.I=x.I JOIN t17 as t22 ON t22.I=x.I JOIN t17 as t23 ON t23.I=x.I JOIN t17 as t24 ON t24.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 as t1 ON t1.I=x.I JOIN t1 as t2 ON t2.I=x.I JOIN t1 as t3 ON t3.I=x.I JOIN t1 as t4 ON t4.I=x.I JOIN t1 as t5 ON t5.I=x.I JOIN t1 as t6 ON t6.I=x.I JOIN t1 as t7 ON t7.I=x.I JOIN t1 as t8 ON t8.I=x.I JOIN t9 as t9 ON t9.I=x.I JOIN t9 as t10 ON t10.I=x.I JOIN t9 as t11 ON t11.I=x.I JOIN t9 as t12 ON t12.I=x.I JOIN t9 as t13 ON t13.I=x.I JOIN t9 as t14 ON t14.I=x.I JOIN t9 as t15 ON t15.I=x.I JOIN t9 as t16 ON t16.I=x.I JOIN t17 as t17 ON t17.I=x.I JOIN t17 as t18 ON t18.I=x.I JOIN t17 as t19 ON t19.I=x.I JOIN t17 as t20 ON t20.I=x.I JOIN t17 as t21 ON t21.I=x.I JOIN t17 as t22 ON t22.I=x.I JOIN t17 as t23 ON t23.I=x.I JOIN t17 as t24 ON t24.I=x.I JOIN t25 as t25 ON t25.I=x.I JOIN t25 as t26 ON t26.I=x.I JOIN t25 as t27 ON t27.I=x.I JOIN t25 as t28 ON t28.I=x.I JOIN t25 as t29 ON t29.I=x.I JOIN t25 as t30 ON t30.I=x.I JOIN t25 as t31 ON t31.I=x.I JOIN t25 as t32 ON t32.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 as t1 ON t1.I=x.I JOIN t1 as t2 ON t2.I=x.I JOIN t1 as t3 ON t3.I=x.I JOIN t1 as t4 ON t4.I=x.I JOIN t1 as t5 ON t5.I=x.I JOIN t1 as t6 ON t6.I=x.I JOIN t1 as t7 ON t7.I=x.I JOIN t1 as t8 ON t8.I=x.I JOIN t9 as t9 ON t9.I=x.I JOIN t9 as t10 ON t10.I=x.I JOIN t9 as t11 ON t11.I=x.I JOIN t9 as t12 ON t12.I=x.I JOIN t9 as t13 ON t13.I=x.I JOIN t9 as t14 ON t14.I=x.I JOIN t9 as t15 ON t15.I=x.I JOIN t9 as t16 ON t16.I=x.I JOIN t17 as t17 ON t17.I=x.I JOIN t17 as t18 ON t18.I=x.I JOIN t17 as t19 ON t19.I=x.I JOIN t17 as t20 ON t20.I=x.I JOIN t17 as t21 ON t21.I=x.I JOIN t17 as t22 ON t22.I=x.I JOIN t17 as t23 ON t23.I=x.I JOIN t17 as t24 ON t24.I=x.I JOIN t25 as t25 ON t25.I=x.I JOIN t25 as t26 ON t26.I=x.I JOIN t25 as t27 ON t27.I=x.I JOIN t25 as t28 ON t28.I=x.I JOIN t25 as t29 ON t29.I=x.I JOIN t25 as t30 ON t30.I=x.I JOIN t25 as t31 ON t31.I=x.I JOIN t25 as t32 ON t32.I=x.I JOIN t33 as t33 ON t33.I=x.I JOIN t33 as t34 ON t34.I=x.I JOIN t33 as t35 ON t35.I=x.I JOIN t33 as t36 ON t36.I=x.I JOIN t33 as t37 ON t37.I=x.I JOIN t33 as t38 ON t38.I=x.I JOIN t33 as t39 ON t39.I=x.I JOIN t33 as t40 ON t40.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 as t1 ON t1.I=x.I JOIN t1 as t2 ON t2.I=x.I JOIN t1 as t3 ON t3.I=x.I JOIN t1 as t4 ON t4.I=x.I JOIN t1 as t5 ON t5.I=x.I JOIN t1 as t6 ON t6.I=x.I JOIN t1 as t7 ON t7.I=x.I JOIN t1 as t8 ON t8.I=x.I JOIN t9 as t9 ON t9.I=x.I JOIN t9 as t10 ON t10.I=x.I JOIN t9 as t11 ON t11.I=x.I JOIN t9 as t12 ON t12.I=x.I JOIN t9 as t13 ON t13.I=x.I JOIN t9 as t14 ON t14.I=x.I JOIN t9 as t15 ON t15.I=x.I JOIN t9 as t16 ON t16.I=x.I JOIN t17 as t17 ON t17.I=x.I JOIN t17 as t18 ON t18.I=x.I JOIN t17 as t19 ON t19.I=x.I JOIN t17 as t20 ON t20.I=x.I JOIN t17 as t21 ON t21.I=x.I JOIN t17 as t22 ON t22.I=x.I JOIN t17 as t23 ON t23.I=x.I JOIN t17 as t24 ON t24.I=x.I JOIN t25 as t25 ON t25.I=x.I JOIN t25 as t26 ON t26.I=x.I JOIN t25 as t27 ON t27.I=x.I JOIN t25 as t28 ON t28.I=x.I JOIN t25 as t29 ON t29.I=x.I JOIN t25 as t30 ON t30.I=x.I JOIN t25 as t31 ON t31.I=x.I JOIN t25 as t32 ON t32.I=x.I JOIN t33 as t33 ON t33.I=x.I JOIN t33 as t34 ON t34.I=x.I JOIN t33 as t35 ON t35.I=x.I JOIN t33 as t36 ON t36.I=x.I JOIN t33 as t37 ON t37.I=x.I JOIN t33 as t38 ON t38.I=x.I JOIN t33 as t39 ON t39.I=x.I JOIN t33 as t40 ON t40.I=x.I JOIN t41 as t41 ON t41.I=x.I JOIN t41 as t42 ON t42.I=x.I JOIN t41 as t43 ON t43.I=x.I JOIN t41 as t44 ON t44.I=x.I JOIN t41 as t45 ON t45.I=x.I JOIN t41 as t46 ON t46.I=x.I JOIN t41 as t47 ON t47.I=x.I JOIN t41 as t48 ON t48.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 as t1 ON t1.I=x.I JOIN t1 as t2 ON t2.I=x.I JOIN t1 as t3 ON t3.I=x.I JOIN t1 as t4 ON t4.I=x.I JOIN t1 as t5 ON t5.I=x.I JOIN t1 as t6 ON t6.I=x.I JOIN t1 as t7 ON t7.I=x.I JOIN t1 as t8 ON t8.I=x.I JOIN t9 as t9 ON t9.I=x.I JOIN t9 as t10 ON t10.I=x.I JOIN t9 as t11 ON t11.I=x.I JOIN t9 as t12 ON t12.I=x.I JOIN t9 as t13 ON t13.I=x.I JOIN t9 as t14 ON t14.I=x.I JOIN t9 as t15 ON t15.I=x.I JOIN t9 as t16 ON t16.I=x.I JOIN t17 as t17 ON t17.I=x.I JOIN t17 as t18 ON t18.I=x.I JOIN t17 as t19 ON t19.I=x.I JOIN t17 as t20 ON t20.I=x.I JOIN t17 as t21 ON t21.I=x.I JOIN t17 as t22 ON t22.I=x.I JOIN t17 as t23 ON t23.I=x.I JOIN t17 as t24 ON t24.I=x.I JOIN t25 as t25 ON t25.I=x.I JOIN t25 as t26 ON t26.I=x.I JOIN t25 as t27 ON t27.I=x.I JOIN t25 as t28 ON t28.I=x.I JOIN t25 as t29 ON t29.I=x.I JOIN t25 as t30 ON t30.I=x.I JOIN t25 as t31 ON t31.I=x.I JOIN t25 as t32 ON t32.I=x.I JOIN t33 as t33 ON t33.I=x.I JOIN t33 as t34 ON t34.I=x.I JOIN t33 as t35 ON t35.I=x.I JOIN t33 as t36 ON t36.I=x.I JOIN t33 as t37 ON t37.I=x.I JOIN t33 as t38 ON t38.I=x.I JOIN t33 as t39 ON t39.I=x.I JOIN t33 as t40 ON t40.I=x.I JOIN t41 as t41 ON t41.I=x.I JOIN t41 as t42 ON t42.I=x.I JOIN t41 as t43 ON t43.I=x.I JOIN t41 as t44 ON t44.I=x.I JOIN t41 as t45 ON t45.I=x.I JOIN t41 as t46 ON t46.I=x.I JOIN t41 as t47 ON t47.I=x.I JOIN t41 as t48 ON t48.I=x.I JOIN t49 as t49 ON t49.I=x.I JOIN t49 as t50 ON t50.I=x.I JOIN t49 as t51 ON t51.I=x.I JOIN t49 as t52 ON t52.I=x.I JOIN t49 as t53 ON t53.I=x.I JOIN t49 as t54 ON t54.I=x.I JOIN t49 as t55 ON t55.I=x.I JOIN t49 as t56 ON t56.I=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.I = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.I = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.I = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.I = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.I = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.I = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.I = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.I = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.I = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.I = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.I = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.I = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.I = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.I = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.I = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.I = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.I = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.I = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.I = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.I = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.I = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.I = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.I = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.I = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.I = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.I = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.I = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.I = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.I = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.I = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.I = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.I = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.I = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.I = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.I = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.I = x.I JOIN t32 ON t32.I = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.I = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.I = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.I = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.I = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.I = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.I = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.I = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.I = x.I JOIN t32 ON t32.I = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.I = x.I JOIN t36 ON t36.I = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.I = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.I = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.I = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.I = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.I = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.I = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.I = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.I = x.I JOIN t32 ON t32.I = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.I = x.I JOIN t36 ON t36.I = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.I = x.I JOIN t40 ON t40.I = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.I = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.I = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.I = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.I = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.I = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.I = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.I = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.I = x.I JOIN t32 ON t32.I = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.I = x.I JOIN t36 ON t36.I = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.I = x.I JOIN t40 ON t40.I = x.I JOIN t41 ON t41.I = x.I JOIN t42 ON t42.K = x.I JOIN t43 ON t43.I = x.I JOIN t44 ON t44.I = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.I = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.I = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.I = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.I = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.I = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.I = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.I = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.I = x.I JOIN t32 ON t32.I = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.I = x.I JOIN t36 ON t36.I = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.I = x.I JOIN t40 ON t40.I = x.I JOIN t41 ON t41.I = x.I JOIN t42 ON t42.K = x.I JOIN t43 ON t43.I = x.I JOIN t44 ON t44.I = x.I JOIN t45 ON t45.I = x.I JOIN t46 ON t46.K = x.I JOIN t47 ON t47.I = x.I JOIN t48 ON t48.I = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.I = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.I = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.I = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.I = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.I = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.I = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.I = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.I = x.I JOIN t32 ON t32.I = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.I = x.I JOIN t36 ON t36.I = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.I = x.I JOIN t40 ON t40.I = x.I JOIN t41 ON t41.I = x.I JOIN t42 ON t42.K = x.I JOIN t43 ON t43.I = x.I JOIN t44 ON t44.I = x.I JOIN t45 ON t45.I = x.I JOIN t46 ON t46.K = x.I JOIN t47 ON t47.I = x.I JOIN t48 ON t48.I = x.I JOIN t49 ON t49.I = x.I JOIN t50 ON t50.K = x.I JOIN t51 ON t51.I = x.I JOIN t52 ON t52.I = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.I = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.I = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.I = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.I = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.I = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.I = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.I = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.I = x.I JOIN t32 ON t32.I = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.I = x.I JOIN t36 ON t36.I = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.I = x.I JOIN t40 ON t40.I = x.I JOIN t41 ON t41.I = x.I JOIN t42 ON t42.K = x.I JOIN t43 ON t43.I = x.I JOIN t44 ON t44.I = x.I JOIN t45 ON t45.I = x.I JOIN t46 ON t46.K = x.I JOIN t47 ON t47.I = x.I JOIN t48 ON t48.I = x.I JOIN t49 ON t49.I = x.I JOIN t50 ON t50.K = x.I JOIN t51 ON t51.I = x.I JOIN t52 ON t52.I = x.I JOIN t53 ON t53.I = x.I JOIN t54 ON t54.K = x.I JOIN t55 ON t55.I = x.I JOIN t56 ON t56.I = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.I = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.I = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.I = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.I = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.I = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.I = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.I = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.I = x.I JOIN t32 ON t32.I = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.I = x.I JOIN t36 ON t36.I = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.I = x.I JOIN t40 ON t40.I = x.I JOIN t41 ON t41.I = x.I JOIN t42 ON t42.K = x.I JOIN t43 ON t43.I = x.I JOIN t44 ON t44.I = x.I JOIN t45 ON t45.I = x.I JOIN t46 ON t46.K = x.I JOIN t47 ON t47.I = x.I JOIN t48 ON t48.I = x.I JOIN t49 ON t49.I = x.I JOIN t50 ON t50.K = x.I JOIN t51 ON t51.I = x.I JOIN t52 ON t52.I = x.I JOIN t53 ON t53.I = x.I JOIN t54 ON t54.K = x.I JOIN t55 ON t55.I = x.I JOIN t56 ON t56.I = x.I JOIN t57 ON t57.I = x.I JOIN t58 ON t58.K = x.I JOIN t59 ON t59.I = x.I JOIN t60 ON t60.I = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.K = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.I = x.I JOIN t32 ON t32.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.K = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.I = x.I JOIN t32 ON t32.K = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.I = x.I JOIN t36 ON t36.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.K = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.I = x.I JOIN t32 ON t32.K = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.I = x.I JOIN t36 ON t36.K = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.I = x.I JOIN t40 ON t40.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.K = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.I = x.I JOIN t32 ON t32.K = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.I = x.I JOIN t36 ON t36.K = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.I = x.I JOIN t40 ON t40.K = x.I JOIN t41 ON t41.I = x.I JOIN t42 ON t42.K = x.I JOIN t43 ON t43.I = x.I JOIN t44 ON t44.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.K = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.I = x.I JOIN t32 ON t32.K = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.I = x.I JOIN t36 ON t36.K = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.I = x.I JOIN t40 ON t40.K = x.I JOIN t41 ON t41.I = x.I JOIN t42 ON t42.K = x.I JOIN t43 ON t43.I = x.I JOIN t44 ON t44.K = x.I JOIN t45 ON t45.I = x.I JOIN t46 ON t46.K = x.I JOIN t47 ON t47.I = x.I JOIN t48 ON t48.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.K = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.I = x.I JOIN t32 ON t32.K = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.I = x.I JOIN t36 ON t36.K = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.I = x.I JOIN t40 ON t40.K = x.I JOIN t41 ON t41.I = x.I JOIN t42 ON t42.K = x.I JOIN t43 ON t43.I = x.I JOIN t44 ON t44.K = x.I JOIN t45 ON t45.I = x.I JOIN t46 ON t46.K = x.I JOIN t47 ON t47.I = x.I JOIN t48 ON t48.K = x.I JOIN t49 ON t49.I = x.I JOIN t50 ON t50.K = x.I JOIN t51 ON t51.I = x.I JOIN t52 ON t52.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.K = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.I = x.I JOIN t32 ON t32.K = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.I = x.I JOIN t36 ON t36.K = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.I = x.I JOIN t40 ON t40.K = x.I JOIN t41 ON t41.I = x.I JOIN t42 ON t42.K = x.I JOIN t43 ON t43.I = x.I JOIN t44 ON t44.K = x.I JOIN t45 ON t45.I = x.I JOIN t46 ON t46.K = x.I JOIN t47 ON t47.I = x.I JOIN t48 ON t48.K = x.I JOIN t49 ON t49.I = x.I JOIN t50 ON t50.K = x.I JOIN t51 ON t51.I = x.I JOIN t52 ON t52.K = x.I JOIN t53 ON t53.I = x.I JOIN t54 ON t54.K = x.I JOIN t55 ON t55.I = x.I JOIN t56 ON t56.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.K = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.I = x.I JOIN t32 ON t32.K = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.I = x.I JOIN t36 ON t36.K = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.I = x.I JOIN t40 ON t40.K = x.I JOIN t41 ON t41.I = x.I JOIN t42 ON t42.K = x.I JOIN t43 ON t43.I = x.I JOIN t44 ON t44.K = x.I JOIN t45 ON t45.I = x.I JOIN t46 ON t46.K = x.I JOIN t47 ON t47.I = x.I JOIN t48 ON t48.K = x.I JOIN t49 ON t49.I = x.I JOIN t50 ON t50.K = x.I JOIN t51 ON t51.I = x.I JOIN t52 ON t52.K = x.I JOIN t53 ON t53.I = x.I JOIN t54 ON t54.K = x.I JOIN t55 ON t55.I = x.I JOIN t56 ON t56.K = x.I JOIN t57 ON t57.I = x.I JOIN t58 ON t58.K = x.I JOIN t59 ON t59.I = x.I JOIN t60 ON t60.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.K = x.I JOIN t4 ON t4.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.K = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.K = x.I JOIN t8 ON t8.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.K = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.K = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.K = x.I JOIN t12 ON t12.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.K = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.K = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.K = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.K = x.I JOIN t16 ON t16.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.K = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.K = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.K = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.K = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.K = x.I JOIN t20 ON t20.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.K = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.K = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.K = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.K = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.K = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.K = x.I JOIN t24 ON t24.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.K = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.K = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.K = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.K = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.K = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.K = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.K = x.I JOIN t28 ON t28.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.K = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.K = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.K = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.K = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.K = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.K = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.K = x.I JOIN t28 ON t28.K = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.K = x.I JOIN t32 ON t32.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.K = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.K = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.K = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.K = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.K = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.K = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.K = x.I JOIN t28 ON t28.K = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.K = x.I JOIN t32 ON t32.K = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.K = x.I JOIN t36 ON t36.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.K = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.K = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.K = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.K = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.K = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.K = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.K = x.I JOIN t28 ON t28.K = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.K = x.I JOIN t32 ON t32.K = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.K = x.I JOIN t36 ON t36.K = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.K = x.I JOIN t40 ON t40.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.K = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.K = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.K = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.K = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.K = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.K = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.K = x.I JOIN t28 ON t28.K = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.K = x.I JOIN t32 ON t32.K = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.K = x.I JOIN t36 ON t36.K = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.K = x.I JOIN t40 ON t40.K = x.I JOIN t41 ON t41.I = x.I JOIN t42 ON t42.K = x.I JOIN t43 ON t43.K = x.I JOIN t44 ON t44.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.K = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.K = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.K = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.K = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.K = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.K = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.K = x.I JOIN t28 ON t28.K = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.K = x.I JOIN t32 ON t32.K = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.K = x.I JOIN t36 ON t36.K = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.K = x.I JOIN t40 ON t40.K = x.I JOIN t41 ON t41.I = x.I JOIN t42 ON t42.K = x.I JOIN t43 ON t43.K = x.I JOIN t44 ON t44.K = x.I JOIN t45 ON t45.I = x.I JOIN t46 ON t46.K = x.I JOIN t47 ON t47.K = x.I JOIN t48 ON t48.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.K = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.K = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.K = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.K = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.K = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.K = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.K = x.I JOIN t28 ON t28.K = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.K = x.I JOIN t32 ON t32.K = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.K = x.I JOIN t36 ON t36.K = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.K = x.I JOIN t40 ON t40.K = x.I JOIN t41 ON t41.I = x.I JOIN t42 ON t42.K = x.I JOIN t43 ON t43.K = x.I JOIN t44 ON t44.K = x.I JOIN t45 ON t45.I = x.I JOIN t46 ON t46.K = x.I JOIN t47 ON t47.K = x.I JOIN t48 ON t48.K = x.I JOIN t49 ON t49.I = x.I JOIN t50 ON t50.K = x.I JOIN t51 ON t51.K = x.I JOIN t52 ON t52.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.K = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.K = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.K = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.K = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.K = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.K = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.K = x.I JOIN t28 ON t28.K = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.K = x.I JOIN t32 ON t32.K = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.K = x.I JOIN t36 ON t36.K = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.K = x.I JOIN t40 ON t40.K = x.I JOIN t41 ON t41.I = x.I JOIN t42 ON t42.K = x.I JOIN t43 ON t43.K = x.I JOIN t44 ON t44.K = x.I JOIN t45 ON t45.I = x.I JOIN t46 ON t46.K = x.I JOIN t47 ON t47.K = x.I JOIN t48 ON t48.K = x.I JOIN t49 ON t49.I = x.I JOIN t50 ON t50.K = x.I JOIN t51 ON t51.K = x.I JOIN t52 ON t52.K = x.I JOIN t53 ON t53.I = x.I JOIN t54 ON t54.K = x.I JOIN t55 ON t55.K = x.I JOIN t56 ON t56.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.K = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.K = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.K = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.K = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.K = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.K = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.K = x.I JOIN t28 ON t28.K = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.K = x.I JOIN t32 ON t32.K = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.K = x.I JOIN t36 ON t36.K = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.K = x.I JOIN t40 ON t40.K = x.I JOIN t41 ON t41.I = x.I JOIN t42 ON t42.K = x.I JOIN t43 ON t43.K = x.I JOIN t44 ON t44.K = x.I JOIN t45 ON t45.I = x.I JOIN t46 ON t46.K = x.I JOIN t47 ON t47.K = x.I JOIN t48 ON t48.K = x.I JOIN t49 ON t49.I = x.I JOIN t50 ON t50.K = x.I JOIN t51 ON t51.K = x.I JOIN t52 ON t52.K = x.I JOIN t53 ON t53.I = x.I JOIN t54 ON t54.K = x.I JOIN t55 ON t55.K = x.I JOIN t56 ON t56.K = x.I JOIN t57 ON t57.I = x.I JOIN t58 ON t58.K = x.I JOIN t59 ON t59.K = x.I JOIN t60 ON t60.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I JOIN t45 ON t45.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I JOIN t45 ON t45.K=x.I JOIN t46 ON t46.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I JOIN t45 ON t45.K=x.I JOIN t46 ON t46.K=x.I JOIN t47 ON t47.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I JOIN t45 ON t45.K=x.I JOIN t46 ON t46.K=x.I JOIN t47 ON t47.K=x.I JOIN t48 ON t48.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I JOIN t45 ON t45.K=x.I JOIN t46 ON t46.K=x.I JOIN t47 ON t47.K=x.I JOIN t48 ON t48.K=x.I JOIN t49 ON t49.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I JOIN t45 ON t45.K=x.I JOIN t46 ON t46.K=x.I JOIN t47 ON t47.K=x.I JOIN t48 ON t48.K=x.I JOIN t49 ON t49.K=x.I JOIN t50 ON t50.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I JOIN t45 ON t45.K=x.I JOIN t46 ON t46.K=x.I JOIN t47 ON t47.K=x.I JOIN t48 ON t48.K=x.I JOIN t49 ON t49.K=x.I JOIN t50 ON t50.K=x.I JOIN t51 ON t51.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I JOIN t45 ON t45.K=x.I JOIN t46 ON t46.K=x.I JOIN t47 ON t47.K=x.I JOIN t48 ON t48.K=x.I JOIN t49 ON t49.K=x.I JOIN t50 ON t50.K=x.I JOIN t51 ON t51.K=x.I JOIN t52 ON t52.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I JOIN t45 ON t45.K=x.I JOIN t46 ON t46.K=x.I JOIN t47 ON t47.K=x.I JOIN t48 ON t48.K=x.I JOIN t49 ON t49.K=x.I JOIN t50 ON t50.K=x.I JOIN t51 ON t51.K=x.I JOIN t52 ON t52.K=x.I JOIN t53 ON t53.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I JOIN t45 ON t45.K=x.I JOIN t46 ON t46.K=x.I JOIN t47 ON t47.K=x.I JOIN t48 ON t48.K=x.I JOIN t49 ON t49.K=x.I JOIN t50 ON t50.K=x.I JOIN t51 ON t51.K=x.I JOIN t52 ON t52.K=x.I JOIN t53 ON t53.K=x.I JOIN t54 ON t54.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I JOIN t45 ON t45.K=x.I JOIN t46 ON t46.K=x.I JOIN t47 ON t47.K=x.I JOIN t48 ON t48.K=x.I JOIN t49 ON t49.K=x.I JOIN t50 ON t50.K=x.I JOIN t51 ON t51.K=x.I JOIN t52 ON t52.K=x.I JOIN t53 ON t53.K=x.I JOIN t54 ON t54.K=x.I JOIN t55 ON t55.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I JOIN t45 ON t45.K=x.I JOIN t46 ON t46.K=x.I JOIN t47 ON t47.K=x.I JOIN t48 ON t48.K=x.I JOIN t49 ON t49.K=x.I JOIN t50 ON t50.K=x.I JOIN t51 ON t51.K=x.I JOIN t52 ON t52.K=x.I JOIN t53 ON t53.K=x.I JOIN t54 ON t54.K=x.I JOIN t55 ON t55.K=x.I JOIN t56 ON t56.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I JOIN t45 ON t45.K=x.I JOIN t46 ON t46.K=x.I JOIN t47 ON t47.K=x.I JOIN t48 ON t48.K=x.I JOIN t49 ON t49.K=x.I JOIN t50 ON t50.K=x.I JOIN t51 ON t51.K=x.I JOIN t52 ON t52.K=x.I JOIN t53 ON t53.K=x.I JOIN t54 ON t54.K=x.I JOIN t55 ON t55.K=x.I JOIN t56 ON t56.K=x.I JOIN t57 ON t57.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I JOIN t45 ON t45.K=x.I JOIN t46 ON t46.K=x.I JOIN t47 ON t47.K=x.I JOIN t48 ON t48.K=x.I JOIN t49 ON t49.K=x.I JOIN t50 ON t50.K=x.I JOIN t51 ON t51.K=x.I JOIN t52 ON t52.K=x.I JOIN t53 ON t53.K=x.I JOIN t54 ON t54.K=x.I JOIN t55 ON t55.K=x.I JOIN t56 ON t56.K=x.I JOIN t57 ON t57.K=x.I JOIN t58 ON t58.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I JOIN t45 ON t45.K=x.I JOIN t46 ON t46.K=x.I JOIN t47 ON t47.K=x.I JOIN t48 ON t48.K=x.I JOIN t49 ON t49.K=x.I JOIN t50 ON t50.K=x.I JOIN t51 ON t51.K=x.I JOIN t52 ON t52.K=x.I JOIN t53 ON t53.K=x.I JOIN t54 ON t54.K=x.I JOIN t55 ON t55.K=x.I JOIN t56 ON t56.K=x.I JOIN t57 ON t57.K=x.I JOIN t58 ON t58.K=x.I JOIN t59 ON t59.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I JOIN t45 ON t45.K=x.I JOIN t46 ON t46.K=x.I JOIN t47 ON t47.K=x.I JOIN t48 ON t48.K=x.I JOIN t49 ON t49.K=x.I JOIN t50 ON t50.K=x.I JOIN t51 ON t51.K=x.I JOIN t52 ON t52.K=x.I JOIN t53 ON t53.K=x.I JOIN t54 ON t54.K=x.I JOIN t55 ON t55.K=x.I JOIN t56 ON t56.K=x.I JOIN t57 ON t57.K=x.I JOIN t58 ON t58.K=x.I JOIN t59 ON t59.K=x.I JOIN t60 ON t60.K=x.I;
+set optimizer_search_depth=3;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I JOIN t45 ON t45.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I JOIN t45 ON t45.I=x.I JOIN t46 ON t46.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I JOIN t45 ON t45.I=x.I JOIN t46 ON t46.I=x.I JOIN t47 ON t47.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I JOIN t45 ON t45.I=x.I JOIN t46 ON t46.I=x.I JOIN t47 ON t47.I=x.I JOIN t48 ON t48.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I JOIN t45 ON t45.I=x.I JOIN t46 ON t46.I=x.I JOIN t47 ON t47.I=x.I JOIN t48 ON t48.I=x.I JOIN t49 ON t49.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I JOIN t45 ON t45.I=x.I JOIN t46 ON t46.I=x.I JOIN t47 ON t47.I=x.I JOIN t48 ON t48.I=x.I JOIN t49 ON t49.I=x.I JOIN t50 ON t50.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I JOIN t45 ON t45.I=x.I JOIN t46 ON t46.I=x.I JOIN t47 ON t47.I=x.I JOIN t48 ON t48.I=x.I JOIN t49 ON t49.I=x.I JOIN t50 ON t50.I=x.I JOIN t51 ON t51.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I JOIN t45 ON t45.I=x.I JOIN t46 ON t46.I=x.I JOIN t47 ON t47.I=x.I JOIN t48 ON t48.I=x.I JOIN t49 ON t49.I=x.I JOIN t50 ON t50.I=x.I JOIN t51 ON t51.I=x.I JOIN t52 ON t52.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I JOIN t45 ON t45.I=x.I JOIN t46 ON t46.I=x.I JOIN t47 ON t47.I=x.I JOIN t48 ON t48.I=x.I JOIN t49 ON t49.I=x.I JOIN t50 ON t50.I=x.I JOIN t51 ON t51.I=x.I JOIN t52 ON t52.I=x.I JOIN t53 ON t53.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I JOIN t45 ON t45.I=x.I JOIN t46 ON t46.I=x.I JOIN t47 ON t47.I=x.I JOIN t48 ON t48.I=x.I JOIN t49 ON t49.I=x.I JOIN t50 ON t50.I=x.I JOIN t51 ON t51.I=x.I JOIN t52 ON t52.I=x.I JOIN t53 ON t53.I=x.I JOIN t54 ON t54.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I JOIN t45 ON t45.I=x.I JOIN t46 ON t46.I=x.I JOIN t47 ON t47.I=x.I JOIN t48 ON t48.I=x.I JOIN t49 ON t49.I=x.I JOIN t50 ON t50.I=x.I JOIN t51 ON t51.I=x.I JOIN t52 ON t52.I=x.I JOIN t53 ON t53.I=x.I JOIN t54 ON t54.I=x.I JOIN t55 ON t55.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I JOIN t45 ON t45.I=x.I JOIN t46 ON t46.I=x.I JOIN t47 ON t47.I=x.I JOIN t48 ON t48.I=x.I JOIN t49 ON t49.I=x.I JOIN t50 ON t50.I=x.I JOIN t51 ON t51.I=x.I JOIN t52 ON t52.I=x.I JOIN t53 ON t53.I=x.I JOIN t54 ON t54.I=x.I JOIN t55 ON t55.I=x.I JOIN t56 ON t56.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I JOIN t45 ON t45.I=x.I JOIN t46 ON t46.I=x.I JOIN t47 ON t47.I=x.I JOIN t48 ON t48.I=x.I JOIN t49 ON t49.I=x.I JOIN t50 ON t50.I=x.I JOIN t51 ON t51.I=x.I JOIN t52 ON t52.I=x.I JOIN t53 ON t53.I=x.I JOIN t54 ON t54.I=x.I JOIN t55 ON t55.I=x.I JOIN t56 ON t56.I=x.I JOIN t57 ON t57.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I JOIN t45 ON t45.I=x.I JOIN t46 ON t46.I=x.I JOIN t47 ON t47.I=x.I JOIN t48 ON t48.I=x.I JOIN t49 ON t49.I=x.I JOIN t50 ON t50.I=x.I JOIN t51 ON t51.I=x.I JOIN t52 ON t52.I=x.I JOIN t53 ON t53.I=x.I JOIN t54 ON t54.I=x.I JOIN t55 ON t55.I=x.I JOIN t56 ON t56.I=x.I JOIN t57 ON t57.I=x.I JOIN t58 ON t58.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I JOIN t45 ON t45.I=x.I JOIN t46 ON t46.I=x.I JOIN t47 ON t47.I=x.I JOIN t48 ON t48.I=x.I JOIN t49 ON t49.I=x.I JOIN t50 ON t50.I=x.I JOIN t51 ON t51.I=x.I JOIN t52 ON t52.I=x.I JOIN t53 ON t53.I=x.I JOIN t54 ON t54.I=x.I JOIN t55 ON t55.I=x.I JOIN t56 ON t56.I=x.I JOIN t57 ON t57.I=x.I JOIN t58 ON t58.I=x.I JOIN t59 ON t59.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I JOIN t45 ON t45.I=x.I JOIN t46 ON t46.I=x.I JOIN t47 ON t47.I=x.I JOIN t48 ON t48.I=x.I JOIN t49 ON t49.I=x.I JOIN t50 ON t50.I=x.I JOIN t51 ON t51.I=x.I JOIN t52 ON t52.I=x.I JOIN t53 ON t53.I=x.I JOIN t54 ON t54.I=x.I JOIN t55 ON t55.I=x.I JOIN t56 ON t56.I=x.I JOIN t57 ON t57.I=x.I JOIN t58 ON t58.I=x.I JOIN t59 ON t59.I=x.I JOIN t60 ON t60.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 as t1 ON t1.I=x.I JOIN t1 as t2 ON t2.I=x.I JOIN t1 as t3 ON t3.I=x.I JOIN t1 as t4 ON t4.I=x.I JOIN t1 as t5 ON t5.I=x.I JOIN t1 as t6 ON t6.I=x.I JOIN t1 as t7 ON t7.I=x.I JOIN t1 as t8 ON t8.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 as t1 ON t1.I=x.I JOIN t1 as t2 ON t2.I=x.I JOIN t1 as t3 ON t3.I=x.I JOIN t1 as t4 ON t4.I=x.I JOIN t1 as t5 ON t5.I=x.I JOIN t1 as t6 ON t6.I=x.I JOIN t1 as t7 ON t7.I=x.I JOIN t1 as t8 ON t8.I=x.I JOIN t9 as t9 ON t9.I=x.I JOIN t9 as t10 ON t10.I=x.I JOIN t9 as t11 ON t11.I=x.I JOIN t9 as t12 ON t12.I=x.I JOIN t9 as t13 ON t13.I=x.I JOIN t9 as t14 ON t14.I=x.I JOIN t9 as t15 ON t15.I=x.I JOIN t9 as t16 ON t16.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 as t1 ON t1.I=x.I JOIN t1 as t2 ON t2.I=x.I JOIN t1 as t3 ON t3.I=x.I JOIN t1 as t4 ON t4.I=x.I JOIN t1 as t5 ON t5.I=x.I JOIN t1 as t6 ON t6.I=x.I JOIN t1 as t7 ON t7.I=x.I JOIN t1 as t8 ON t8.I=x.I JOIN t9 as t9 ON t9.I=x.I JOIN t9 as t10 ON t10.I=x.I JOIN t9 as t11 ON t11.I=x.I JOIN t9 as t12 ON t12.I=x.I JOIN t9 as t13 ON t13.I=x.I JOIN t9 as t14 ON t14.I=x.I JOIN t9 as t15 ON t15.I=x.I JOIN t9 as t16 ON t16.I=x.I JOIN t17 as t17 ON t17.I=x.I JOIN t17 as t18 ON t18.I=x.I JOIN t17 as t19 ON t19.I=x.I JOIN t17 as t20 ON t20.I=x.I JOIN t17 as t21 ON t21.I=x.I JOIN t17 as t22 ON t22.I=x.I JOIN t17 as t23 ON t23.I=x.I JOIN t17 as t24 ON t24.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 as t1 ON t1.I=x.I JOIN t1 as t2 ON t2.I=x.I JOIN t1 as t3 ON t3.I=x.I JOIN t1 as t4 ON t4.I=x.I JOIN t1 as t5 ON t5.I=x.I JOIN t1 as t6 ON t6.I=x.I JOIN t1 as t7 ON t7.I=x.I JOIN t1 as t8 ON t8.I=x.I JOIN t9 as t9 ON t9.I=x.I JOIN t9 as t10 ON t10.I=x.I JOIN t9 as t11 ON t11.I=x.I JOIN t9 as t12 ON t12.I=x.I JOIN t9 as t13 ON t13.I=x.I JOIN t9 as t14 ON t14.I=x.I JOIN t9 as t15 ON t15.I=x.I JOIN t9 as t16 ON t16.I=x.I JOIN t17 as t17 ON t17.I=x.I JOIN t17 as t18 ON t18.I=x.I JOIN t17 as t19 ON t19.I=x.I JOIN t17 as t20 ON t20.I=x.I JOIN t17 as t21 ON t21.I=x.I JOIN t17 as t22 ON t22.I=x.I JOIN t17 as t23 ON t23.I=x.I JOIN t17 as t24 ON t24.I=x.I JOIN t25 as t25 ON t25.I=x.I JOIN t25 as t26 ON t26.I=x.I JOIN t25 as t27 ON t27.I=x.I JOIN t25 as t28 ON t28.I=x.I JOIN t25 as t29 ON t29.I=x.I JOIN t25 as t30 ON t30.I=x.I JOIN t25 as t31 ON t31.I=x.I JOIN t25 as t32 ON t32.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 as t1 ON t1.I=x.I JOIN t1 as t2 ON t2.I=x.I JOIN t1 as t3 ON t3.I=x.I JOIN t1 as t4 ON t4.I=x.I JOIN t1 as t5 ON t5.I=x.I JOIN t1 as t6 ON t6.I=x.I JOIN t1 as t7 ON t7.I=x.I JOIN t1 as t8 ON t8.I=x.I JOIN t9 as t9 ON t9.I=x.I JOIN t9 as t10 ON t10.I=x.I JOIN t9 as t11 ON t11.I=x.I JOIN t9 as t12 ON t12.I=x.I JOIN t9 as t13 ON t13.I=x.I JOIN t9 as t14 ON t14.I=x.I JOIN t9 as t15 ON t15.I=x.I JOIN t9 as t16 ON t16.I=x.I JOIN t17 as t17 ON t17.I=x.I JOIN t17 as t18 ON t18.I=x.I JOIN t17 as t19 ON t19.I=x.I JOIN t17 as t20 ON t20.I=x.I JOIN t17 as t21 ON t21.I=x.I JOIN t17 as t22 ON t22.I=x.I JOIN t17 as t23 ON t23.I=x.I JOIN t17 as t24 ON t24.I=x.I JOIN t25 as t25 ON t25.I=x.I JOIN t25 as t26 ON t26.I=x.I JOIN t25 as t27 ON t27.I=x.I JOIN t25 as t28 ON t28.I=x.I JOIN t25 as t29 ON t29.I=x.I JOIN t25 as t30 ON t30.I=x.I JOIN t25 as t31 ON t31.I=x.I JOIN t25 as t32 ON t32.I=x.I JOIN t33 as t33 ON t33.I=x.I JOIN t33 as t34 ON t34.I=x.I JOIN t33 as t35 ON t35.I=x.I JOIN t33 as t36 ON t36.I=x.I JOIN t33 as t37 ON t37.I=x.I JOIN t33 as t38 ON t38.I=x.I JOIN t33 as t39 ON t39.I=x.I JOIN t33 as t40 ON t40.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 as t1 ON t1.I=x.I JOIN t1 as t2 ON t2.I=x.I JOIN t1 as t3 ON t3.I=x.I JOIN t1 as t4 ON t4.I=x.I JOIN t1 as t5 ON t5.I=x.I JOIN t1 as t6 ON t6.I=x.I JOIN t1 as t7 ON t7.I=x.I JOIN t1 as t8 ON t8.I=x.I JOIN t9 as t9 ON t9.I=x.I JOIN t9 as t10 ON t10.I=x.I JOIN t9 as t11 ON t11.I=x.I JOIN t9 as t12 ON t12.I=x.I JOIN t9 as t13 ON t13.I=x.I JOIN t9 as t14 ON t14.I=x.I JOIN t9 as t15 ON t15.I=x.I JOIN t9 as t16 ON t16.I=x.I JOIN t17 as t17 ON t17.I=x.I JOIN t17 as t18 ON t18.I=x.I JOIN t17 as t19 ON t19.I=x.I JOIN t17 as t20 ON t20.I=x.I JOIN t17 as t21 ON t21.I=x.I JOIN t17 as t22 ON t22.I=x.I JOIN t17 as t23 ON t23.I=x.I JOIN t17 as t24 ON t24.I=x.I JOIN t25 as t25 ON t25.I=x.I JOIN t25 as t26 ON t26.I=x.I JOIN t25 as t27 ON t27.I=x.I JOIN t25 as t28 ON t28.I=x.I JOIN t25 as t29 ON t29.I=x.I JOIN t25 as t30 ON t30.I=x.I JOIN t25 as t31 ON t31.I=x.I JOIN t25 as t32 ON t32.I=x.I JOIN t33 as t33 ON t33.I=x.I JOIN t33 as t34 ON t34.I=x.I JOIN t33 as t35 ON t35.I=x.I JOIN t33 as t36 ON t36.I=x.I JOIN t33 as t37 ON t37.I=x.I JOIN t33 as t38 ON t38.I=x.I JOIN t33 as t39 ON t39.I=x.I JOIN t33 as t40 ON t40.I=x.I JOIN t41 as t41 ON t41.I=x.I JOIN t41 as t42 ON t42.I=x.I JOIN t41 as t43 ON t43.I=x.I JOIN t41 as t44 ON t44.I=x.I JOIN t41 as t45 ON t45.I=x.I JOIN t41 as t46 ON t46.I=x.I JOIN t41 as t47 ON t47.I=x.I JOIN t41 as t48 ON t48.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 as t1 ON t1.I=x.I JOIN t1 as t2 ON t2.I=x.I JOIN t1 as t3 ON t3.I=x.I JOIN t1 as t4 ON t4.I=x.I JOIN t1 as t5 ON t5.I=x.I JOIN t1 as t6 ON t6.I=x.I JOIN t1 as t7 ON t7.I=x.I JOIN t1 as t8 ON t8.I=x.I JOIN t9 as t9 ON t9.I=x.I JOIN t9 as t10 ON t10.I=x.I JOIN t9 as t11 ON t11.I=x.I JOIN t9 as t12 ON t12.I=x.I JOIN t9 as t13 ON t13.I=x.I JOIN t9 as t14 ON t14.I=x.I JOIN t9 as t15 ON t15.I=x.I JOIN t9 as t16 ON t16.I=x.I JOIN t17 as t17 ON t17.I=x.I JOIN t17 as t18 ON t18.I=x.I JOIN t17 as t19 ON t19.I=x.I JOIN t17 as t20 ON t20.I=x.I JOIN t17 as t21 ON t21.I=x.I JOIN t17 as t22 ON t22.I=x.I JOIN t17 as t23 ON t23.I=x.I JOIN t17 as t24 ON t24.I=x.I JOIN t25 as t25 ON t25.I=x.I JOIN t25 as t26 ON t26.I=x.I JOIN t25 as t27 ON t27.I=x.I JOIN t25 as t28 ON t28.I=x.I JOIN t25 as t29 ON t29.I=x.I JOIN t25 as t30 ON t30.I=x.I JOIN t25 as t31 ON t31.I=x.I JOIN t25 as t32 ON t32.I=x.I JOIN t33 as t33 ON t33.I=x.I JOIN t33 as t34 ON t34.I=x.I JOIN t33 as t35 ON t35.I=x.I JOIN t33 as t36 ON t36.I=x.I JOIN t33 as t37 ON t37.I=x.I JOIN t33 as t38 ON t38.I=x.I JOIN t33 as t39 ON t39.I=x.I JOIN t33 as t40 ON t40.I=x.I JOIN t41 as t41 ON t41.I=x.I JOIN t41 as t42 ON t42.I=x.I JOIN t41 as t43 ON t43.I=x.I JOIN t41 as t44 ON t44.I=x.I JOIN t41 as t45 ON t45.I=x.I JOIN t41 as t46 ON t46.I=x.I JOIN t41 as t47 ON t47.I=x.I JOIN t41 as t48 ON t48.I=x.I JOIN t49 as t49 ON t49.I=x.I JOIN t49 as t50 ON t50.I=x.I JOIN t49 as t51 ON t51.I=x.I JOIN t49 as t52 ON t52.I=x.I JOIN t49 as t53 ON t53.I=x.I JOIN t49 as t54 ON t54.I=x.I JOIN t49 as t55 ON t55.I=x.I JOIN t49 as t56 ON t56.I=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.I = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.I = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.I = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.I = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.I = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.I = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.I = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.I = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.I = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.I = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.I = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.I = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.I = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.I = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.I = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.I = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.I = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.I = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.I = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.I = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.I = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.I = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.I = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.I = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.I = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.I = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.I = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.I = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.I = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.I = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.I = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.I = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.I = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.I = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.I = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.I = x.I JOIN t32 ON t32.I = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.I = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.I = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.I = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.I = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.I = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.I = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.I = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.I = x.I JOIN t32 ON t32.I = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.I = x.I JOIN t36 ON t36.I = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.I = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.I = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.I = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.I = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.I = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.I = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.I = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.I = x.I JOIN t32 ON t32.I = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.I = x.I JOIN t36 ON t36.I = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.I = x.I JOIN t40 ON t40.I = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.I = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.I = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.I = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.I = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.I = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.I = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.I = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.I = x.I JOIN t32 ON t32.I = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.I = x.I JOIN t36 ON t36.I = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.I = x.I JOIN t40 ON t40.I = x.I JOIN t41 ON t41.I = x.I JOIN t42 ON t42.K = x.I JOIN t43 ON t43.I = x.I JOIN t44 ON t44.I = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.I = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.I = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.I = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.I = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.I = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.I = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.I = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.I = x.I JOIN t32 ON t32.I = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.I = x.I JOIN t36 ON t36.I = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.I = x.I JOIN t40 ON t40.I = x.I JOIN t41 ON t41.I = x.I JOIN t42 ON t42.K = x.I JOIN t43 ON t43.I = x.I JOIN t44 ON t44.I = x.I JOIN t45 ON t45.I = x.I JOIN t46 ON t46.K = x.I JOIN t47 ON t47.I = x.I JOIN t48 ON t48.I = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.I = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.I = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.I = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.I = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.I = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.I = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.I = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.I = x.I JOIN t32 ON t32.I = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.I = x.I JOIN t36 ON t36.I = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.I = x.I JOIN t40 ON t40.I = x.I JOIN t41 ON t41.I = x.I JOIN t42 ON t42.K = x.I JOIN t43 ON t43.I = x.I JOIN t44 ON t44.I = x.I JOIN t45 ON t45.I = x.I JOIN t46 ON t46.K = x.I JOIN t47 ON t47.I = x.I JOIN t48 ON t48.I = x.I JOIN t49 ON t49.I = x.I JOIN t50 ON t50.K = x.I JOIN t51 ON t51.I = x.I JOIN t52 ON t52.I = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.I = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.I = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.I = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.I = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.I = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.I = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.I = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.I = x.I JOIN t32 ON t32.I = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.I = x.I JOIN t36 ON t36.I = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.I = x.I JOIN t40 ON t40.I = x.I JOIN t41 ON t41.I = x.I JOIN t42 ON t42.K = x.I JOIN t43 ON t43.I = x.I JOIN t44 ON t44.I = x.I JOIN t45 ON t45.I = x.I JOIN t46 ON t46.K = x.I JOIN t47 ON t47.I = x.I JOIN t48 ON t48.I = x.I JOIN t49 ON t49.I = x.I JOIN t50 ON t50.K = x.I JOIN t51 ON t51.I = x.I JOIN t52 ON t52.I = x.I JOIN t53 ON t53.I = x.I JOIN t54 ON t54.K = x.I JOIN t55 ON t55.I = x.I JOIN t56 ON t56.I = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.I = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.I = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.I = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.I = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.I = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.I = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.I = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.I = x.I JOIN t32 ON t32.I = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.I = x.I JOIN t36 ON t36.I = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.I = x.I JOIN t40 ON t40.I = x.I JOIN t41 ON t41.I = x.I JOIN t42 ON t42.K = x.I JOIN t43 ON t43.I = x.I JOIN t44 ON t44.I = x.I JOIN t45 ON t45.I = x.I JOIN t46 ON t46.K = x.I JOIN t47 ON t47.I = x.I JOIN t48 ON t48.I = x.I JOIN t49 ON t49.I = x.I JOIN t50 ON t50.K = x.I JOIN t51 ON t51.I = x.I JOIN t52 ON t52.I = x.I JOIN t53 ON t53.I = x.I JOIN t54 ON t54.K = x.I JOIN t55 ON t55.I = x.I JOIN t56 ON t56.I = x.I JOIN t57 ON t57.I = x.I JOIN t58 ON t58.K = x.I JOIN t59 ON t59.I = x.I JOIN t60 ON t60.I = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.K = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.I = x.I JOIN t32 ON t32.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.K = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.I = x.I JOIN t32 ON t32.K = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.I = x.I JOIN t36 ON t36.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.K = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.I = x.I JOIN t32 ON t32.K = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.I = x.I JOIN t36 ON t36.K = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.I = x.I JOIN t40 ON t40.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.K = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.I = x.I JOIN t32 ON t32.K = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.I = x.I JOIN t36 ON t36.K = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.I = x.I JOIN t40 ON t40.K = x.I JOIN t41 ON t41.I = x.I JOIN t42 ON t42.K = x.I JOIN t43 ON t43.I = x.I JOIN t44 ON t44.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.K = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.I = x.I JOIN t32 ON t32.K = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.I = x.I JOIN t36 ON t36.K = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.I = x.I JOIN t40 ON t40.K = x.I JOIN t41 ON t41.I = x.I JOIN t42 ON t42.K = x.I JOIN t43 ON t43.I = x.I JOIN t44 ON t44.K = x.I JOIN t45 ON t45.I = x.I JOIN t46 ON t46.K = x.I JOIN t47 ON t47.I = x.I JOIN t48 ON t48.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.K = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.I = x.I JOIN t32 ON t32.K = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.I = x.I JOIN t36 ON t36.K = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.I = x.I JOIN t40 ON t40.K = x.I JOIN t41 ON t41.I = x.I JOIN t42 ON t42.K = x.I JOIN t43 ON t43.I = x.I JOIN t44 ON t44.K = x.I JOIN t45 ON t45.I = x.I JOIN t46 ON t46.K = x.I JOIN t47 ON t47.I = x.I JOIN t48 ON t48.K = x.I JOIN t49 ON t49.I = x.I JOIN t50 ON t50.K = x.I JOIN t51 ON t51.I = x.I JOIN t52 ON t52.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.K = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.I = x.I JOIN t32 ON t32.K = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.I = x.I JOIN t36 ON t36.K = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.I = x.I JOIN t40 ON t40.K = x.I JOIN t41 ON t41.I = x.I JOIN t42 ON t42.K = x.I JOIN t43 ON t43.I = x.I JOIN t44 ON t44.K = x.I JOIN t45 ON t45.I = x.I JOIN t46 ON t46.K = x.I JOIN t47 ON t47.I = x.I JOIN t48 ON t48.K = x.I JOIN t49 ON t49.I = x.I JOIN t50 ON t50.K = x.I JOIN t51 ON t51.I = x.I JOIN t52 ON t52.K = x.I JOIN t53 ON t53.I = x.I JOIN t54 ON t54.K = x.I JOIN t55 ON t55.I = x.I JOIN t56 ON t56.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.K = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.I = x.I JOIN t32 ON t32.K = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.I = x.I JOIN t36 ON t36.K = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.I = x.I JOIN t40 ON t40.K = x.I JOIN t41 ON t41.I = x.I JOIN t42 ON t42.K = x.I JOIN t43 ON t43.I = x.I JOIN t44 ON t44.K = x.I JOIN t45 ON t45.I = x.I JOIN t46 ON t46.K = x.I JOIN t47 ON t47.I = x.I JOIN t48 ON t48.K = x.I JOIN t49 ON t49.I = x.I JOIN t50 ON t50.K = x.I JOIN t51 ON t51.I = x.I JOIN t52 ON t52.K = x.I JOIN t53 ON t53.I = x.I JOIN t54 ON t54.K = x.I JOIN t55 ON t55.I = x.I JOIN t56 ON t56.K = x.I JOIN t57 ON t57.I = x.I JOIN t58 ON t58.K = x.I JOIN t59 ON t59.I = x.I JOIN t60 ON t60.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.K = x.I JOIN t4 ON t4.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.K = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.K = x.I JOIN t8 ON t8.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.K = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.K = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.K = x.I JOIN t12 ON t12.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.K = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.K = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.K = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.K = x.I JOIN t16 ON t16.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.K = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.K = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.K = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.K = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.K = x.I JOIN t20 ON t20.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.K = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.K = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.K = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.K = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.K = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.K = x.I JOIN t24 ON t24.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.K = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.K = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.K = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.K = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.K = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.K = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.K = x.I JOIN t28 ON t28.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.K = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.K = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.K = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.K = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.K = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.K = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.K = x.I JOIN t28 ON t28.K = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.K = x.I JOIN t32 ON t32.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.K = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.K = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.K = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.K = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.K = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.K = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.K = x.I JOIN t28 ON t28.K = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.K = x.I JOIN t32 ON t32.K = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.K = x.I JOIN t36 ON t36.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.K = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.K = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.K = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.K = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.K = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.K = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.K = x.I JOIN t28 ON t28.K = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.K = x.I JOIN t32 ON t32.K = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.K = x.I JOIN t36 ON t36.K = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.K = x.I JOIN t40 ON t40.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.K = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.K = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.K = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.K = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.K = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.K = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.K = x.I JOIN t28 ON t28.K = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.K = x.I JOIN t32 ON t32.K = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.K = x.I JOIN t36 ON t36.K = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.K = x.I JOIN t40 ON t40.K = x.I JOIN t41 ON t41.I = x.I JOIN t42 ON t42.K = x.I JOIN t43 ON t43.K = x.I JOIN t44 ON t44.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.K = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.K = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.K = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.K = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.K = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.K = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.K = x.I JOIN t28 ON t28.K = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.K = x.I JOIN t32 ON t32.K = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.K = x.I JOIN t36 ON t36.K = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.K = x.I JOIN t40 ON t40.K = x.I JOIN t41 ON t41.I = x.I JOIN t42 ON t42.K = x.I JOIN t43 ON t43.K = x.I JOIN t44 ON t44.K = x.I JOIN t45 ON t45.I = x.I JOIN t46 ON t46.K = x.I JOIN t47 ON t47.K = x.I JOIN t48 ON t48.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.K = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.K = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.K = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.K = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.K = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.K = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.K = x.I JOIN t28 ON t28.K = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.K = x.I JOIN t32 ON t32.K = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.K = x.I JOIN t36 ON t36.K = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.K = x.I JOIN t40 ON t40.K = x.I JOIN t41 ON t41.I = x.I JOIN t42 ON t42.K = x.I JOIN t43 ON t43.K = x.I JOIN t44 ON t44.K = x.I JOIN t45 ON t45.I = x.I JOIN t46 ON t46.K = x.I JOIN t47 ON t47.K = x.I JOIN t48 ON t48.K = x.I JOIN t49 ON t49.I = x.I JOIN t50 ON t50.K = x.I JOIN t51 ON t51.K = x.I JOIN t52 ON t52.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.K = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.K = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.K = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.K = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.K = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.K = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.K = x.I JOIN t28 ON t28.K = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.K = x.I JOIN t32 ON t32.K = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.K = x.I JOIN t36 ON t36.K = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.K = x.I JOIN t40 ON t40.K = x.I JOIN t41 ON t41.I = x.I JOIN t42 ON t42.K = x.I JOIN t43 ON t43.K = x.I JOIN t44 ON t44.K = x.I JOIN t45 ON t45.I = x.I JOIN t46 ON t46.K = x.I JOIN t47 ON t47.K = x.I JOIN t48 ON t48.K = x.I JOIN t49 ON t49.I = x.I JOIN t50 ON t50.K = x.I JOIN t51 ON t51.K = x.I JOIN t52 ON t52.K = x.I JOIN t53 ON t53.I = x.I JOIN t54 ON t54.K = x.I JOIN t55 ON t55.K = x.I JOIN t56 ON t56.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.K = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.K = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.K = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.K = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.K = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.K = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.K = x.I JOIN t28 ON t28.K = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.K = x.I JOIN t32 ON t32.K = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.K = x.I JOIN t36 ON t36.K = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.K = x.I JOIN t40 ON t40.K = x.I JOIN t41 ON t41.I = x.I JOIN t42 ON t42.K = x.I JOIN t43 ON t43.K = x.I JOIN t44 ON t44.K = x.I JOIN t45 ON t45.I = x.I JOIN t46 ON t46.K = x.I JOIN t47 ON t47.K = x.I JOIN t48 ON t48.K = x.I JOIN t49 ON t49.I = x.I JOIN t50 ON t50.K = x.I JOIN t51 ON t51.K = x.I JOIN t52 ON t52.K = x.I JOIN t53 ON t53.I = x.I JOIN t54 ON t54.K = x.I JOIN t55 ON t55.K = x.I JOIN t56 ON t56.K = x.I JOIN t57 ON t57.I = x.I JOIN t58 ON t58.K = x.I JOIN t59 ON t59.K = x.I JOIN t60 ON t60.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I JOIN t45 ON t45.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I JOIN t45 ON t45.K=x.I JOIN t46 ON t46.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I JOIN t45 ON t45.K=x.I JOIN t46 ON t46.K=x.I JOIN t47 ON t47.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I JOIN t45 ON t45.K=x.I JOIN t46 ON t46.K=x.I JOIN t47 ON t47.K=x.I JOIN t48 ON t48.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I JOIN t45 ON t45.K=x.I JOIN t46 ON t46.K=x.I JOIN t47 ON t47.K=x.I JOIN t48 ON t48.K=x.I JOIN t49 ON t49.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I JOIN t45 ON t45.K=x.I JOIN t46 ON t46.K=x.I JOIN t47 ON t47.K=x.I JOIN t48 ON t48.K=x.I JOIN t49 ON t49.K=x.I JOIN t50 ON t50.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I JOIN t45 ON t45.K=x.I JOIN t46 ON t46.K=x.I JOIN t47 ON t47.K=x.I JOIN t48 ON t48.K=x.I JOIN t49 ON t49.K=x.I JOIN t50 ON t50.K=x.I JOIN t51 ON t51.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I JOIN t45 ON t45.K=x.I JOIN t46 ON t46.K=x.I JOIN t47 ON t47.K=x.I JOIN t48 ON t48.K=x.I JOIN t49 ON t49.K=x.I JOIN t50 ON t50.K=x.I JOIN t51 ON t51.K=x.I JOIN t52 ON t52.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I JOIN t45 ON t45.K=x.I JOIN t46 ON t46.K=x.I JOIN t47 ON t47.K=x.I JOIN t48 ON t48.K=x.I JOIN t49 ON t49.K=x.I JOIN t50 ON t50.K=x.I JOIN t51 ON t51.K=x.I JOIN t52 ON t52.K=x.I JOIN t53 ON t53.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I JOIN t45 ON t45.K=x.I JOIN t46 ON t46.K=x.I JOIN t47 ON t47.K=x.I JOIN t48 ON t48.K=x.I JOIN t49 ON t49.K=x.I JOIN t50 ON t50.K=x.I JOIN t51 ON t51.K=x.I JOIN t52 ON t52.K=x.I JOIN t53 ON t53.K=x.I JOIN t54 ON t54.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I JOIN t45 ON t45.K=x.I JOIN t46 ON t46.K=x.I JOIN t47 ON t47.K=x.I JOIN t48 ON t48.K=x.I JOIN t49 ON t49.K=x.I JOIN t50 ON t50.K=x.I JOIN t51 ON t51.K=x.I JOIN t52 ON t52.K=x.I JOIN t53 ON t53.K=x.I JOIN t54 ON t54.K=x.I JOIN t55 ON t55.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I JOIN t45 ON t45.K=x.I JOIN t46 ON t46.K=x.I JOIN t47 ON t47.K=x.I JOIN t48 ON t48.K=x.I JOIN t49 ON t49.K=x.I JOIN t50 ON t50.K=x.I JOIN t51 ON t51.K=x.I JOIN t52 ON t52.K=x.I JOIN t53 ON t53.K=x.I JOIN t54 ON t54.K=x.I JOIN t55 ON t55.K=x.I JOIN t56 ON t56.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I JOIN t45 ON t45.K=x.I JOIN t46 ON t46.K=x.I JOIN t47 ON t47.K=x.I JOIN t48 ON t48.K=x.I JOIN t49 ON t49.K=x.I JOIN t50 ON t50.K=x.I JOIN t51 ON t51.K=x.I JOIN t52 ON t52.K=x.I JOIN t53 ON t53.K=x.I JOIN t54 ON t54.K=x.I JOIN t55 ON t55.K=x.I JOIN t56 ON t56.K=x.I JOIN t57 ON t57.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I JOIN t45 ON t45.K=x.I JOIN t46 ON t46.K=x.I JOIN t47 ON t47.K=x.I JOIN t48 ON t48.K=x.I JOIN t49 ON t49.K=x.I JOIN t50 ON t50.K=x.I JOIN t51 ON t51.K=x.I JOIN t52 ON t52.K=x.I JOIN t53 ON t53.K=x.I JOIN t54 ON t54.K=x.I JOIN t55 ON t55.K=x.I JOIN t56 ON t56.K=x.I JOIN t57 ON t57.K=x.I JOIN t58 ON t58.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I JOIN t45 ON t45.K=x.I JOIN t46 ON t46.K=x.I JOIN t47 ON t47.K=x.I JOIN t48 ON t48.K=x.I JOIN t49 ON t49.K=x.I JOIN t50 ON t50.K=x.I JOIN t51 ON t51.K=x.I JOIN t52 ON t52.K=x.I JOIN t53 ON t53.K=x.I JOIN t54 ON t54.K=x.I JOIN t55 ON t55.K=x.I JOIN t56 ON t56.K=x.I JOIN t57 ON t57.K=x.I JOIN t58 ON t58.K=x.I JOIN t59 ON t59.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I JOIN t45 ON t45.K=x.I JOIN t46 ON t46.K=x.I JOIN t47 ON t47.K=x.I JOIN t48 ON t48.K=x.I JOIN t49 ON t49.K=x.I JOIN t50 ON t50.K=x.I JOIN t51 ON t51.K=x.I JOIN t52 ON t52.K=x.I JOIN t53 ON t53.K=x.I JOIN t54 ON t54.K=x.I JOIN t55 ON t55.K=x.I JOIN t56 ON t56.K=x.I JOIN t57 ON t57.K=x.I JOIN t58 ON t58.K=x.I JOIN t59 ON t59.K=x.I JOIN t60 ON t60.K=x.I;
+set optimizer_search_depth=62;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I JOIN t45 ON t45.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I JOIN t45 ON t45.I=x.I JOIN t46 ON t46.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I JOIN t45 ON t45.I=x.I JOIN t46 ON t46.I=x.I JOIN t47 ON t47.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I JOIN t45 ON t45.I=x.I JOIN t46 ON t46.I=x.I JOIN t47 ON t47.I=x.I JOIN t48 ON t48.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I JOIN t45 ON t45.I=x.I JOIN t46 ON t46.I=x.I JOIN t47 ON t47.I=x.I JOIN t48 ON t48.I=x.I JOIN t49 ON t49.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I JOIN t45 ON t45.I=x.I JOIN t46 ON t46.I=x.I JOIN t47 ON t47.I=x.I JOIN t48 ON t48.I=x.I JOIN t49 ON t49.I=x.I JOIN t50 ON t50.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I JOIN t45 ON t45.I=x.I JOIN t46 ON t46.I=x.I JOIN t47 ON t47.I=x.I JOIN t48 ON t48.I=x.I JOIN t49 ON t49.I=x.I JOIN t50 ON t50.I=x.I JOIN t51 ON t51.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I JOIN t45 ON t45.I=x.I JOIN t46 ON t46.I=x.I JOIN t47 ON t47.I=x.I JOIN t48 ON t48.I=x.I JOIN t49 ON t49.I=x.I JOIN t50 ON t50.I=x.I JOIN t51 ON t51.I=x.I JOIN t52 ON t52.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I JOIN t45 ON t45.I=x.I JOIN t46 ON t46.I=x.I JOIN t47 ON t47.I=x.I JOIN t48 ON t48.I=x.I JOIN t49 ON t49.I=x.I JOIN t50 ON t50.I=x.I JOIN t51 ON t51.I=x.I JOIN t52 ON t52.I=x.I JOIN t53 ON t53.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I JOIN t45 ON t45.I=x.I JOIN t46 ON t46.I=x.I JOIN t47 ON t47.I=x.I JOIN t48 ON t48.I=x.I JOIN t49 ON t49.I=x.I JOIN t50 ON t50.I=x.I JOIN t51 ON t51.I=x.I JOIN t52 ON t52.I=x.I JOIN t53 ON t53.I=x.I JOIN t54 ON t54.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I JOIN t45 ON t45.I=x.I JOIN t46 ON t46.I=x.I JOIN t47 ON t47.I=x.I JOIN t48 ON t48.I=x.I JOIN t49 ON t49.I=x.I JOIN t50 ON t50.I=x.I JOIN t51 ON t51.I=x.I JOIN t52 ON t52.I=x.I JOIN t53 ON t53.I=x.I JOIN t54 ON t54.I=x.I JOIN t55 ON t55.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I JOIN t45 ON t45.I=x.I JOIN t46 ON t46.I=x.I JOIN t47 ON t47.I=x.I JOIN t48 ON t48.I=x.I JOIN t49 ON t49.I=x.I JOIN t50 ON t50.I=x.I JOIN t51 ON t51.I=x.I JOIN t52 ON t52.I=x.I JOIN t53 ON t53.I=x.I JOIN t54 ON t54.I=x.I JOIN t55 ON t55.I=x.I JOIN t56 ON t56.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I JOIN t45 ON t45.I=x.I JOIN t46 ON t46.I=x.I JOIN t47 ON t47.I=x.I JOIN t48 ON t48.I=x.I JOIN t49 ON t49.I=x.I JOIN t50 ON t50.I=x.I JOIN t51 ON t51.I=x.I JOIN t52 ON t52.I=x.I JOIN t53 ON t53.I=x.I JOIN t54 ON t54.I=x.I JOIN t55 ON t55.I=x.I JOIN t56 ON t56.I=x.I JOIN t57 ON t57.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I JOIN t45 ON t45.I=x.I JOIN t46 ON t46.I=x.I JOIN t47 ON t47.I=x.I JOIN t48 ON t48.I=x.I JOIN t49 ON t49.I=x.I JOIN t50 ON t50.I=x.I JOIN t51 ON t51.I=x.I JOIN t52 ON t52.I=x.I JOIN t53 ON t53.I=x.I JOIN t54 ON t54.I=x.I JOIN t55 ON t55.I=x.I JOIN t56 ON t56.I=x.I JOIN t57 ON t57.I=x.I JOIN t58 ON t58.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I JOIN t45 ON t45.I=x.I JOIN t46 ON t46.I=x.I JOIN t47 ON t47.I=x.I JOIN t48 ON t48.I=x.I JOIN t49 ON t49.I=x.I JOIN t50 ON t50.I=x.I JOIN t51 ON t51.I=x.I JOIN t52 ON t52.I=x.I JOIN t53 ON t53.I=x.I JOIN t54 ON t54.I=x.I JOIN t55 ON t55.I=x.I JOIN t56 ON t56.I=x.I JOIN t57 ON t57.I=x.I JOIN t58 ON t58.I=x.I JOIN t59 ON t59.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I=x.I JOIN t2 ON t2.I=x.I JOIN t3 ON t3.I=x.I JOIN t4 ON t4.I=x.I JOIN t5 ON t5.I=x.I JOIN t6 ON t6.I=x.I JOIN t7 ON t7.I=x.I JOIN t8 ON t8.I=x.I JOIN t9 ON t9.I=x.I JOIN t10 ON t10.I=x.I JOIN t11 ON t11.I=x.I JOIN t12 ON t12.I=x.I JOIN t13 ON t13.I=x.I JOIN t14 ON t14.I=x.I JOIN t15 ON t15.I=x.I JOIN t16 ON t16.I=x.I JOIN t17 ON t17.I=x.I JOIN t18 ON t18.I=x.I JOIN t19 ON t19.I=x.I JOIN t20 ON t20.I=x.I JOIN t21 ON t21.I=x.I JOIN t22 ON t22.I=x.I JOIN t23 ON t23.I=x.I JOIN t24 ON t24.I=x.I JOIN t25 ON t25.I=x.I JOIN t26 ON t26.I=x.I JOIN t27 ON t27.I=x.I JOIN t28 ON t28.I=x.I JOIN t29 ON t29.I=x.I JOIN t30 ON t30.I=x.I JOIN t31 ON t31.I=x.I JOIN t32 ON t32.I=x.I JOIN t33 ON t33.I=x.I JOIN t34 ON t34.I=x.I JOIN t35 ON t35.I=x.I JOIN t36 ON t36.I=x.I JOIN t37 ON t37.I=x.I JOIN t38 ON t38.I=x.I JOIN t39 ON t39.I=x.I JOIN t40 ON t40.I=x.I JOIN t41 ON t41.I=x.I JOIN t42 ON t42.I=x.I JOIN t43 ON t43.I=x.I JOIN t44 ON t44.I=x.I JOIN t45 ON t45.I=x.I JOIN t46 ON t46.I=x.I JOIN t47 ON t47.I=x.I JOIN t48 ON t48.I=x.I JOIN t49 ON t49.I=x.I JOIN t50 ON t50.I=x.I JOIN t51 ON t51.I=x.I JOIN t52 ON t52.I=x.I JOIN t53 ON t53.I=x.I JOIN t54 ON t54.I=x.I JOIN t55 ON t55.I=x.I JOIN t56 ON t56.I=x.I JOIN t57 ON t57.I=x.I JOIN t58 ON t58.I=x.I JOIN t59 ON t59.I=x.I JOIN t60 ON t60.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 as t1 ON t1.I=x.I JOIN t1 as t2 ON t2.I=x.I JOIN t1 as t3 ON t3.I=x.I JOIN t1 as t4 ON t4.I=x.I JOIN t1 as t5 ON t5.I=x.I JOIN t1 as t6 ON t6.I=x.I JOIN t1 as t7 ON t7.I=x.I JOIN t1 as t8 ON t8.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 as t1 ON t1.I=x.I JOIN t1 as t2 ON t2.I=x.I JOIN t1 as t3 ON t3.I=x.I JOIN t1 as t4 ON t4.I=x.I JOIN t1 as t5 ON t5.I=x.I JOIN t1 as t6 ON t6.I=x.I JOIN t1 as t7 ON t7.I=x.I JOIN t1 as t8 ON t8.I=x.I JOIN t9 as t9 ON t9.I=x.I JOIN t9 as t10 ON t10.I=x.I JOIN t9 as t11 ON t11.I=x.I JOIN t9 as t12 ON t12.I=x.I JOIN t9 as t13 ON t13.I=x.I JOIN t9 as t14 ON t14.I=x.I JOIN t9 as t15 ON t15.I=x.I JOIN t9 as t16 ON t16.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 as t1 ON t1.I=x.I JOIN t1 as t2 ON t2.I=x.I JOIN t1 as t3 ON t3.I=x.I JOIN t1 as t4 ON t4.I=x.I JOIN t1 as t5 ON t5.I=x.I JOIN t1 as t6 ON t6.I=x.I JOIN t1 as t7 ON t7.I=x.I JOIN t1 as t8 ON t8.I=x.I JOIN t9 as t9 ON t9.I=x.I JOIN t9 as t10 ON t10.I=x.I JOIN t9 as t11 ON t11.I=x.I JOIN t9 as t12 ON t12.I=x.I JOIN t9 as t13 ON t13.I=x.I JOIN t9 as t14 ON t14.I=x.I JOIN t9 as t15 ON t15.I=x.I JOIN t9 as t16 ON t16.I=x.I JOIN t17 as t17 ON t17.I=x.I JOIN t17 as t18 ON t18.I=x.I JOIN t17 as t19 ON t19.I=x.I JOIN t17 as t20 ON t20.I=x.I JOIN t17 as t21 ON t21.I=x.I JOIN t17 as t22 ON t22.I=x.I JOIN t17 as t23 ON t23.I=x.I JOIN t17 as t24 ON t24.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 as t1 ON t1.I=x.I JOIN t1 as t2 ON t2.I=x.I JOIN t1 as t3 ON t3.I=x.I JOIN t1 as t4 ON t4.I=x.I JOIN t1 as t5 ON t5.I=x.I JOIN t1 as t6 ON t6.I=x.I JOIN t1 as t7 ON t7.I=x.I JOIN t1 as t8 ON t8.I=x.I JOIN t9 as t9 ON t9.I=x.I JOIN t9 as t10 ON t10.I=x.I JOIN t9 as t11 ON t11.I=x.I JOIN t9 as t12 ON t12.I=x.I JOIN t9 as t13 ON t13.I=x.I JOIN t9 as t14 ON t14.I=x.I JOIN t9 as t15 ON t15.I=x.I JOIN t9 as t16 ON t16.I=x.I JOIN t17 as t17 ON t17.I=x.I JOIN t17 as t18 ON t18.I=x.I JOIN t17 as t19 ON t19.I=x.I JOIN t17 as t20 ON t20.I=x.I JOIN t17 as t21 ON t21.I=x.I JOIN t17 as t22 ON t22.I=x.I JOIN t17 as t23 ON t23.I=x.I JOIN t17 as t24 ON t24.I=x.I JOIN t25 as t25 ON t25.I=x.I JOIN t25 as t26 ON t26.I=x.I JOIN t25 as t27 ON t27.I=x.I JOIN t25 as t28 ON t28.I=x.I JOIN t25 as t29 ON t29.I=x.I JOIN t25 as t30 ON t30.I=x.I JOIN t25 as t31 ON t31.I=x.I JOIN t25 as t32 ON t32.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 as t1 ON t1.I=x.I JOIN t1 as t2 ON t2.I=x.I JOIN t1 as t3 ON t3.I=x.I JOIN t1 as t4 ON t4.I=x.I JOIN t1 as t5 ON t5.I=x.I JOIN t1 as t6 ON t6.I=x.I JOIN t1 as t7 ON t7.I=x.I JOIN t1 as t8 ON t8.I=x.I JOIN t9 as t9 ON t9.I=x.I JOIN t9 as t10 ON t10.I=x.I JOIN t9 as t11 ON t11.I=x.I JOIN t9 as t12 ON t12.I=x.I JOIN t9 as t13 ON t13.I=x.I JOIN t9 as t14 ON t14.I=x.I JOIN t9 as t15 ON t15.I=x.I JOIN t9 as t16 ON t16.I=x.I JOIN t17 as t17 ON t17.I=x.I JOIN t17 as t18 ON t18.I=x.I JOIN t17 as t19 ON t19.I=x.I JOIN t17 as t20 ON t20.I=x.I JOIN t17 as t21 ON t21.I=x.I JOIN t17 as t22 ON t22.I=x.I JOIN t17 as t23 ON t23.I=x.I JOIN t17 as t24 ON t24.I=x.I JOIN t25 as t25 ON t25.I=x.I JOIN t25 as t26 ON t26.I=x.I JOIN t25 as t27 ON t27.I=x.I JOIN t25 as t28 ON t28.I=x.I JOIN t25 as t29 ON t29.I=x.I JOIN t25 as t30 ON t30.I=x.I JOIN t25 as t31 ON t31.I=x.I JOIN t25 as t32 ON t32.I=x.I JOIN t33 as t33 ON t33.I=x.I JOIN t33 as t34 ON t34.I=x.I JOIN t33 as t35 ON t35.I=x.I JOIN t33 as t36 ON t36.I=x.I JOIN t33 as t37 ON t37.I=x.I JOIN t33 as t38 ON t38.I=x.I JOIN t33 as t39 ON t39.I=x.I JOIN t33 as t40 ON t40.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 as t1 ON t1.I=x.I JOIN t1 as t2 ON t2.I=x.I JOIN t1 as t3 ON t3.I=x.I JOIN t1 as t4 ON t4.I=x.I JOIN t1 as t5 ON t5.I=x.I JOIN t1 as t6 ON t6.I=x.I JOIN t1 as t7 ON t7.I=x.I JOIN t1 as t8 ON t8.I=x.I JOIN t9 as t9 ON t9.I=x.I JOIN t9 as t10 ON t10.I=x.I JOIN t9 as t11 ON t11.I=x.I JOIN t9 as t12 ON t12.I=x.I JOIN t9 as t13 ON t13.I=x.I JOIN t9 as t14 ON t14.I=x.I JOIN t9 as t15 ON t15.I=x.I JOIN t9 as t16 ON t16.I=x.I JOIN t17 as t17 ON t17.I=x.I JOIN t17 as t18 ON t18.I=x.I JOIN t17 as t19 ON t19.I=x.I JOIN t17 as t20 ON t20.I=x.I JOIN t17 as t21 ON t21.I=x.I JOIN t17 as t22 ON t22.I=x.I JOIN t17 as t23 ON t23.I=x.I JOIN t17 as t24 ON t24.I=x.I JOIN t25 as t25 ON t25.I=x.I JOIN t25 as t26 ON t26.I=x.I JOIN t25 as t27 ON t27.I=x.I JOIN t25 as t28 ON t28.I=x.I JOIN t25 as t29 ON t29.I=x.I JOIN t25 as t30 ON t30.I=x.I JOIN t25 as t31 ON t31.I=x.I JOIN t25 as t32 ON t32.I=x.I JOIN t33 as t33 ON t33.I=x.I JOIN t33 as t34 ON t34.I=x.I JOIN t33 as t35 ON t35.I=x.I JOIN t33 as t36 ON t36.I=x.I JOIN t33 as t37 ON t37.I=x.I JOIN t33 as t38 ON t38.I=x.I JOIN t33 as t39 ON t39.I=x.I JOIN t33 as t40 ON t40.I=x.I JOIN t41 as t41 ON t41.I=x.I JOIN t41 as t42 ON t42.I=x.I JOIN t41 as t43 ON t43.I=x.I JOIN t41 as t44 ON t44.I=x.I JOIN t41 as t45 ON t45.I=x.I JOIN t41 as t46 ON t46.I=x.I JOIN t41 as t47 ON t47.I=x.I JOIN t41 as t48 ON t48.I=x.I;
+select @@optimizer_prune_level;
+select @@optimizer_search_depth;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 as t1 ON t1.I=x.I JOIN t1 as t2 ON t2.I=x.I JOIN t1 as t3 ON t3.I=x.I JOIN t1 as t4 ON t4.I=x.I JOIN t1 as t5 ON t5.I=x.I JOIN t1 as t6 ON t6.I=x.I JOIN t1 as t7 ON t7.I=x.I JOIN t1 as t8 ON t8.I=x.I JOIN t9 as t9 ON t9.I=x.I JOIN t9 as t10 ON t10.I=x.I JOIN t9 as t11 ON t11.I=x.I JOIN t9 as t12 ON t12.I=x.I JOIN t9 as t13 ON t13.I=x.I JOIN t9 as t14 ON t14.I=x.I JOIN t9 as t15 ON t15.I=x.I JOIN t9 as t16 ON t16.I=x.I JOIN t17 as t17 ON t17.I=x.I JOIN t17 as t18 ON t18.I=x.I JOIN t17 as t19 ON t19.I=x.I JOIN t17 as t20 ON t20.I=x.I JOIN t17 as t21 ON t21.I=x.I JOIN t17 as t22 ON t22.I=x.I JOIN t17 as t23 ON t23.I=x.I JOIN t17 as t24 ON t24.I=x.I JOIN t25 as t25 ON t25.I=x.I JOIN t25 as t26 ON t26.I=x.I JOIN t25 as t27 ON t27.I=x.I JOIN t25 as t28 ON t28.I=x.I JOIN t25 as t29 ON t29.I=x.I JOIN t25 as t30 ON t30.I=x.I JOIN t25 as t31 ON t31.I=x.I JOIN t25 as t32 ON t32.I=x.I JOIN t33 as t33 ON t33.I=x.I JOIN t33 as t34 ON t34.I=x.I JOIN t33 as t35 ON t35.I=x.I JOIN t33 as t36 ON t36.I=x.I JOIN t33 as t37 ON t37.I=x.I JOIN t33 as t38 ON t38.I=x.I JOIN t33 as t39 ON t39.I=x.I JOIN t33 as t40 ON t40.I=x.I JOIN t41 as t41 ON t41.I=x.I JOIN t41 as t42 ON t42.I=x.I JOIN t41 as t43 ON t43.I=x.I JOIN t41 as t44 ON t44.I=x.I JOIN t41 as t45 ON t45.I=x.I JOIN t41 as t46 ON t46.I=x.I JOIN t41 as t47 ON t47.I=x.I JOIN t41 as t48 ON t48.I=x.I JOIN t49 as t49 ON t49.I=x.I JOIN t49 as t50 ON t50.I=x.I JOIN t49 as t51 ON t51.I=x.I JOIN t49 as t52 ON t52.I=x.I JOIN t49 as t53 ON t53.I=x.I JOIN t49 as t54 ON t54.I=x.I JOIN t49 as t55 ON t55.I=x.I JOIN t49 as t56 ON t56.I=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.I = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.I = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.I = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.I = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.I = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.I = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.I = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.I = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.I = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.I = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.I = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.I = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.I = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.I = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.I = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.I = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.I = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.I = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.I = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.I = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.I = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.I = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.I = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.I = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.I = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.I = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.I = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.I = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.I = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.I = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.I = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.I = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.I = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.I = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.I = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.I = x.I JOIN t32 ON t32.I = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.I = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.I = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.I = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.I = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.I = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.I = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.I = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.I = x.I JOIN t32 ON t32.I = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.I = x.I JOIN t36 ON t36.I = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.I = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.I = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.I = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.I = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.I = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.I = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.I = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.I = x.I JOIN t32 ON t32.I = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.I = x.I JOIN t36 ON t36.I = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.I = x.I JOIN t40 ON t40.I = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.I = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.I = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.I = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.I = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.I = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.I = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.I = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.I = x.I JOIN t32 ON t32.I = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.I = x.I JOIN t36 ON t36.I = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.I = x.I JOIN t40 ON t40.I = x.I JOIN t41 ON t41.I = x.I JOIN t42 ON t42.K = x.I JOIN t43 ON t43.I = x.I JOIN t44 ON t44.I = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.I = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.I = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.I = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.I = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.I = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.I = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.I = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.I = x.I JOIN t32 ON t32.I = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.I = x.I JOIN t36 ON t36.I = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.I = x.I JOIN t40 ON t40.I = x.I JOIN t41 ON t41.I = x.I JOIN t42 ON t42.K = x.I JOIN t43 ON t43.I = x.I JOIN t44 ON t44.I = x.I JOIN t45 ON t45.I = x.I JOIN t46 ON t46.K = x.I JOIN t47 ON t47.I = x.I JOIN t48 ON t48.I = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.I = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.I = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.I = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.I = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.I = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.I = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.I = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.I = x.I JOIN t32 ON t32.I = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.I = x.I JOIN t36 ON t36.I = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.I = x.I JOIN t40 ON t40.I = x.I JOIN t41 ON t41.I = x.I JOIN t42 ON t42.K = x.I JOIN t43 ON t43.I = x.I JOIN t44 ON t44.I = x.I JOIN t45 ON t45.I = x.I JOIN t46 ON t46.K = x.I JOIN t47 ON t47.I = x.I JOIN t48 ON t48.I = x.I JOIN t49 ON t49.I = x.I JOIN t50 ON t50.K = x.I JOIN t51 ON t51.I = x.I JOIN t52 ON t52.I = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.I = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.I = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.I = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.I = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.I = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.I = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.I = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.I = x.I JOIN t32 ON t32.I = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.I = x.I JOIN t36 ON t36.I = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.I = x.I JOIN t40 ON t40.I = x.I JOIN t41 ON t41.I = x.I JOIN t42 ON t42.K = x.I JOIN t43 ON t43.I = x.I JOIN t44 ON t44.I = x.I JOIN t45 ON t45.I = x.I JOIN t46 ON t46.K = x.I JOIN t47 ON t47.I = x.I JOIN t48 ON t48.I = x.I JOIN t49 ON t49.I = x.I JOIN t50 ON t50.K = x.I JOIN t51 ON t51.I = x.I JOIN t52 ON t52.I = x.I JOIN t53 ON t53.I = x.I JOIN t54 ON t54.K = x.I JOIN t55 ON t55.I = x.I JOIN t56 ON t56.I = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.I = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.I = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.I = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.I = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.I = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.I = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.I = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.I = x.I JOIN t32 ON t32.I = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.I = x.I JOIN t36 ON t36.I = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.I = x.I JOIN t40 ON t40.I = x.I JOIN t41 ON t41.I = x.I JOIN t42 ON t42.K = x.I JOIN t43 ON t43.I = x.I JOIN t44 ON t44.I = x.I JOIN t45 ON t45.I = x.I JOIN t46 ON t46.K = x.I JOIN t47 ON t47.I = x.I JOIN t48 ON t48.I = x.I JOIN t49 ON t49.I = x.I JOIN t50 ON t50.K = x.I JOIN t51 ON t51.I = x.I JOIN t52 ON t52.I = x.I JOIN t53 ON t53.I = x.I JOIN t54 ON t54.K = x.I JOIN t55 ON t55.I = x.I JOIN t56 ON t56.I = x.I JOIN t57 ON t57.I = x.I JOIN t58 ON t58.K = x.I JOIN t59 ON t59.I = x.I JOIN t60 ON t60.I = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.K = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.I = x.I JOIN t32 ON t32.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.K = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.I = x.I JOIN t32 ON t32.K = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.I = x.I JOIN t36 ON t36.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.K = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.I = x.I JOIN t32 ON t32.K = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.I = x.I JOIN t36 ON t36.K = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.I = x.I JOIN t40 ON t40.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.K = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.I = x.I JOIN t32 ON t32.K = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.I = x.I JOIN t36 ON t36.K = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.I = x.I JOIN t40 ON t40.K = x.I JOIN t41 ON t41.I = x.I JOIN t42 ON t42.K = x.I JOIN t43 ON t43.I = x.I JOIN t44 ON t44.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.K = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.I = x.I JOIN t32 ON t32.K = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.I = x.I JOIN t36 ON t36.K = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.I = x.I JOIN t40 ON t40.K = x.I JOIN t41 ON t41.I = x.I JOIN t42 ON t42.K = x.I JOIN t43 ON t43.I = x.I JOIN t44 ON t44.K = x.I JOIN t45 ON t45.I = x.I JOIN t46 ON t46.K = x.I JOIN t47 ON t47.I = x.I JOIN t48 ON t48.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.K = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.I = x.I JOIN t32 ON t32.K = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.I = x.I JOIN t36 ON t36.K = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.I = x.I JOIN t40 ON t40.K = x.I JOIN t41 ON t41.I = x.I JOIN t42 ON t42.K = x.I JOIN t43 ON t43.I = x.I JOIN t44 ON t44.K = x.I JOIN t45 ON t45.I = x.I JOIN t46 ON t46.K = x.I JOIN t47 ON t47.I = x.I JOIN t48 ON t48.K = x.I JOIN t49 ON t49.I = x.I JOIN t50 ON t50.K = x.I JOIN t51 ON t51.I = x.I JOIN t52 ON t52.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.K = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.I = x.I JOIN t32 ON t32.K = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.I = x.I JOIN t36 ON t36.K = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.I = x.I JOIN t40 ON t40.K = x.I JOIN t41 ON t41.I = x.I JOIN t42 ON t42.K = x.I JOIN t43 ON t43.I = x.I JOIN t44 ON t44.K = x.I JOIN t45 ON t45.I = x.I JOIN t46 ON t46.K = x.I JOIN t47 ON t47.I = x.I JOIN t48 ON t48.K = x.I JOIN t49 ON t49.I = x.I JOIN t50 ON t50.K = x.I JOIN t51 ON t51.I = x.I JOIN t52 ON t52.K = x.I JOIN t53 ON t53.I = x.I JOIN t54 ON t54.K = x.I JOIN t55 ON t55.I = x.I JOIN t56 ON t56.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.I = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.I = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.I = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.I = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.I = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.I = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.I = x.I JOIN t28 ON t28.K = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.I = x.I JOIN t32 ON t32.K = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.I = x.I JOIN t36 ON t36.K = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.I = x.I JOIN t40 ON t40.K = x.I JOIN t41 ON t41.I = x.I JOIN t42 ON t42.K = x.I JOIN t43 ON t43.I = x.I JOIN t44 ON t44.K = x.I JOIN t45 ON t45.I = x.I JOIN t46 ON t46.K = x.I JOIN t47 ON t47.I = x.I JOIN t48 ON t48.K = x.I JOIN t49 ON t49.I = x.I JOIN t50 ON t50.K = x.I JOIN t51 ON t51.I = x.I JOIN t52 ON t52.K = x.I JOIN t53 ON t53.I = x.I JOIN t54 ON t54.K = x.I JOIN t55 ON t55.I = x.I JOIN t56 ON t56.K = x.I JOIN t57 ON t57.I = x.I JOIN t58 ON t58.K = x.I JOIN t59 ON t59.I = x.I JOIN t60 ON t60.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.K = x.I JOIN t4 ON t4.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.K = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.K = x.I JOIN t8 ON t8.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.K = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.K = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.K = x.I JOIN t12 ON t12.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.K = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.K = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.K = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.K = x.I JOIN t16 ON t16.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.K = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.K = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.K = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.K = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.K = x.I JOIN t20 ON t20.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.K = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.K = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.K = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.K = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.K = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.K = x.I JOIN t24 ON t24.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.K = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.K = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.K = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.K = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.K = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.K = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.K = x.I JOIN t28 ON t28.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.K = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.K = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.K = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.K = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.K = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.K = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.K = x.I JOIN t28 ON t28.K = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.K = x.I JOIN t32 ON t32.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.K = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.K = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.K = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.K = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.K = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.K = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.K = x.I JOIN t28 ON t28.K = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.K = x.I JOIN t32 ON t32.K = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.K = x.I JOIN t36 ON t36.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.K = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.K = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.K = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.K = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.K = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.K = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.K = x.I JOIN t28 ON t28.K = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.K = x.I JOIN t32 ON t32.K = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.K = x.I JOIN t36 ON t36.K = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.K = x.I JOIN t40 ON t40.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.K = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.K = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.K = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.K = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.K = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.K = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.K = x.I JOIN t28 ON t28.K = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.K = x.I JOIN t32 ON t32.K = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.K = x.I JOIN t36 ON t36.K = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.K = x.I JOIN t40 ON t40.K = x.I JOIN t41 ON t41.I = x.I JOIN t42 ON t42.K = x.I JOIN t43 ON t43.K = x.I JOIN t44 ON t44.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.K = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.K = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.K = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.K = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.K = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.K = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.K = x.I JOIN t28 ON t28.K = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.K = x.I JOIN t32 ON t32.K = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.K = x.I JOIN t36 ON t36.K = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.K = x.I JOIN t40 ON t40.K = x.I JOIN t41 ON t41.I = x.I JOIN t42 ON t42.K = x.I JOIN t43 ON t43.K = x.I JOIN t44 ON t44.K = x.I JOIN t45 ON t45.I = x.I JOIN t46 ON t46.K = x.I JOIN t47 ON t47.K = x.I JOIN t48 ON t48.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.K = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.K = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.K = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.K = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.K = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.K = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.K = x.I JOIN t28 ON t28.K = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.K = x.I JOIN t32 ON t32.K = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.K = x.I JOIN t36 ON t36.K = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.K = x.I JOIN t40 ON t40.K = x.I JOIN t41 ON t41.I = x.I JOIN t42 ON t42.K = x.I JOIN t43 ON t43.K = x.I JOIN t44 ON t44.K = x.I JOIN t45 ON t45.I = x.I JOIN t46 ON t46.K = x.I JOIN t47 ON t47.K = x.I JOIN t48 ON t48.K = x.I JOIN t49 ON t49.I = x.I JOIN t50 ON t50.K = x.I JOIN t51 ON t51.K = x.I JOIN t52 ON t52.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.K = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.K = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.K = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.K = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.K = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.K = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.K = x.I JOIN t28 ON t28.K = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.K = x.I JOIN t32 ON t32.K = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.K = x.I JOIN t36 ON t36.K = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.K = x.I JOIN t40 ON t40.K = x.I JOIN t41 ON t41.I = x.I JOIN t42 ON t42.K = x.I JOIN t43 ON t43.K = x.I JOIN t44 ON t44.K = x.I JOIN t45 ON t45.I = x.I JOIN t46 ON t46.K = x.I JOIN t47 ON t47.K = x.I JOIN t48 ON t48.K = x.I JOIN t49 ON t49.I = x.I JOIN t50 ON t50.K = x.I JOIN t51 ON t51.K = x.I JOIN t52 ON t52.K = x.I JOIN t53 ON t53.I = x.I JOIN t54 ON t54.K = x.I JOIN t55 ON t55.K = x.I JOIN t56 ON t56.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.I = x.I JOIN t2 ON t2.K = x.I JOIN t3 ON t3.K = x.I JOIN t4 ON t4.K = x.I JOIN t5 ON t5.I = x.I JOIN t6 ON t6.K = x.I JOIN t7 ON t7.K = x.I JOIN t8 ON t8.K = x.I JOIN t9 ON t9.I = x.I JOIN t10 ON t10.K = x.I JOIN t11 ON t11.K = x.I JOIN t12 ON t12.K = x.I JOIN t13 ON t13.I = x.I JOIN t14 ON t14.K = x.I JOIN t15 ON t15.K = x.I JOIN t16 ON t16.K = x.I JOIN t17 ON t17.I = x.I JOIN t18 ON t18.K = x.I JOIN t19 ON t19.K = x.I JOIN t20 ON t20.K = x.I JOIN t21 ON t21.I = x.I JOIN t22 ON t22.K = x.I JOIN t23 ON t23.K = x.I JOIN t24 ON t24.K = x.I JOIN t25 ON t25.I = x.I JOIN t26 ON t26.K = x.I JOIN t27 ON t27.K = x.I JOIN t28 ON t28.K = x.I JOIN t29 ON t29.I = x.I JOIN t30 ON t30.K = x.I JOIN t31 ON t31.K = x.I JOIN t32 ON t32.K = x.I JOIN t33 ON t33.I = x.I JOIN t34 ON t34.K = x.I JOIN t35 ON t35.K = x.I JOIN t36 ON t36.K = x.I JOIN t37 ON t37.I = x.I JOIN t38 ON t38.K = x.I JOIN t39 ON t39.K = x.I JOIN t40 ON t40.K = x.I JOIN t41 ON t41.I = x.I JOIN t42 ON t42.K = x.I JOIN t43 ON t43.K = x.I JOIN t44 ON t44.K = x.I JOIN t45 ON t45.I = x.I JOIN t46 ON t46.K = x.I JOIN t47 ON t47.K = x.I JOIN t48 ON t48.K = x.I JOIN t49 ON t49.I = x.I JOIN t50 ON t50.K = x.I JOIN t51 ON t51.K = x.I JOIN t52 ON t52.K = x.I JOIN t53 ON t53.I = x.I JOIN t54 ON t54.K = x.I JOIN t55 ON t55.K = x.I JOIN t56 ON t56.K = x.I JOIN t57 ON t57.I = x.I JOIN t58 ON t58.K = x.I JOIN t59 ON t59.K = x.I JOIN t60 ON t60.K = x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I JOIN t45 ON t45.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I JOIN t45 ON t45.K=x.I JOIN t46 ON t46.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I JOIN t45 ON t45.K=x.I JOIN t46 ON t46.K=x.I JOIN t47 ON t47.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I JOIN t45 ON t45.K=x.I JOIN t46 ON t46.K=x.I JOIN t47 ON t47.K=x.I JOIN t48 ON t48.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I JOIN t45 ON t45.K=x.I JOIN t46 ON t46.K=x.I JOIN t47 ON t47.K=x.I JOIN t48 ON t48.K=x.I JOIN t49 ON t49.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I JOIN t45 ON t45.K=x.I JOIN t46 ON t46.K=x.I JOIN t47 ON t47.K=x.I JOIN t48 ON t48.K=x.I JOIN t49 ON t49.K=x.I JOIN t50 ON t50.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I JOIN t45 ON t45.K=x.I JOIN t46 ON t46.K=x.I JOIN t47 ON t47.K=x.I JOIN t48 ON t48.K=x.I JOIN t49 ON t49.K=x.I JOIN t50 ON t50.K=x.I JOIN t51 ON t51.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I JOIN t45 ON t45.K=x.I JOIN t46 ON t46.K=x.I JOIN t47 ON t47.K=x.I JOIN t48 ON t48.K=x.I JOIN t49 ON t49.K=x.I JOIN t50 ON t50.K=x.I JOIN t51 ON t51.K=x.I JOIN t52 ON t52.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I JOIN t45 ON t45.K=x.I JOIN t46 ON t46.K=x.I JOIN t47 ON t47.K=x.I JOIN t48 ON t48.K=x.I JOIN t49 ON t49.K=x.I JOIN t50 ON t50.K=x.I JOIN t51 ON t51.K=x.I JOIN t52 ON t52.K=x.I JOIN t53 ON t53.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I JOIN t45 ON t45.K=x.I JOIN t46 ON t46.K=x.I JOIN t47 ON t47.K=x.I JOIN t48 ON t48.K=x.I JOIN t49 ON t49.K=x.I JOIN t50 ON t50.K=x.I JOIN t51 ON t51.K=x.I JOIN t52 ON t52.K=x.I JOIN t53 ON t53.K=x.I JOIN t54 ON t54.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I JOIN t45 ON t45.K=x.I JOIN t46 ON t46.K=x.I JOIN t47 ON t47.K=x.I JOIN t48 ON t48.K=x.I JOIN t49 ON t49.K=x.I JOIN t50 ON t50.K=x.I JOIN t51 ON t51.K=x.I JOIN t52 ON t52.K=x.I JOIN t53 ON t53.K=x.I JOIN t54 ON t54.K=x.I JOIN t55 ON t55.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I JOIN t45 ON t45.K=x.I JOIN t46 ON t46.K=x.I JOIN t47 ON t47.K=x.I JOIN t48 ON t48.K=x.I JOIN t49 ON t49.K=x.I JOIN t50 ON t50.K=x.I JOIN t51 ON t51.K=x.I JOIN t52 ON t52.K=x.I JOIN t53 ON t53.K=x.I JOIN t54 ON t54.K=x.I JOIN t55 ON t55.K=x.I JOIN t56 ON t56.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I JOIN t45 ON t45.K=x.I JOIN t46 ON t46.K=x.I JOIN t47 ON t47.K=x.I JOIN t48 ON t48.K=x.I JOIN t49 ON t49.K=x.I JOIN t50 ON t50.K=x.I JOIN t51 ON t51.K=x.I JOIN t52 ON t52.K=x.I JOIN t53 ON t53.K=x.I JOIN t54 ON t54.K=x.I JOIN t55 ON t55.K=x.I JOIN t56 ON t56.K=x.I JOIN t57 ON t57.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I JOIN t45 ON t45.K=x.I JOIN t46 ON t46.K=x.I JOIN t47 ON t47.K=x.I JOIN t48 ON t48.K=x.I JOIN t49 ON t49.K=x.I JOIN t50 ON t50.K=x.I JOIN t51 ON t51.K=x.I JOIN t52 ON t52.K=x.I JOIN t53 ON t53.K=x.I JOIN t54 ON t54.K=x.I JOIN t55 ON t55.K=x.I JOIN t56 ON t56.K=x.I JOIN t57 ON t57.K=x.I JOIN t58 ON t58.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I JOIN t45 ON t45.K=x.I JOIN t46 ON t46.K=x.I JOIN t47 ON t47.K=x.I JOIN t48 ON t48.K=x.I JOIN t49 ON t49.K=x.I JOIN t50 ON t50.K=x.I JOIN t51 ON t51.K=x.I JOIN t52 ON t52.K=x.I JOIN t53 ON t53.K=x.I JOIN t54 ON t54.K=x.I JOIN t55 ON t55.K=x.I JOIN t56 ON t56.K=x.I JOIN t57 ON t57.K=x.I JOIN t58 ON t58.K=x.I JOIN t59 ON t59.K=x.I;
+EXPLAIN SELECT COUNT(*) FROM t1 AS x JOIN t1 ON t1.K=x.I JOIN t2 ON t2.K=x.I JOIN t3 ON t3.K=x.I JOIN t4 ON t4.K=x.I JOIN t5 ON t5.K=x.I JOIN t6 ON t6.K=x.I JOIN t7 ON t7.K=x.I JOIN t8 ON t8.K=x.I JOIN t9 ON t9.K=x.I JOIN t10 ON t10.K=x.I JOIN t11 ON t11.K=x.I JOIN t12 ON t12.K=x.I JOIN t13 ON t13.K=x.I JOIN t14 ON t14.K=x.I JOIN t15 ON t15.K=x.I JOIN t16 ON t16.K=x.I JOIN t17 ON t17.K=x.I JOIN t18 ON t18.K=x.I JOIN t19 ON t19.K=x.I JOIN t20 ON t20.K=x.I JOIN t21 ON t21.K=x.I JOIN t22 ON t22.K=x.I JOIN t23 ON t23.K=x.I JOIN t24 ON t24.K=x.I JOIN t25 ON t25.K=x.I JOIN t26 ON t26.K=x.I JOIN t27 ON t27.K=x.I JOIN t28 ON t28.K=x.I JOIN t29 ON t29.K=x.I JOIN t30 ON t30.K=x.I JOIN t31 ON t31.K=x.I JOIN t32 ON t32.K=x.I JOIN t33 ON t33.K=x.I JOIN t34 ON t34.K=x.I JOIN t35 ON t35.K=x.I JOIN t36 ON t36.K=x.I JOIN t37 ON t37.K=x.I JOIN t38 ON t38.K=x.I JOIN t39 ON t39.K=x.I JOIN t40 ON t40.K=x.I JOIN t41 ON t41.K=x.I JOIN t42 ON t42.K=x.I JOIN t43 ON t43.K=x.I JOIN t44 ON t44.K=x.I JOIN t45 ON t45.K=x.I JOIN t46 ON t46.K=x.I JOIN t47 ON t47.K=x.I JOIN t48 ON t48.K=x.I JOIN t49 ON t49.K=x.I JOIN t50 ON t50.K=x.I JOIN t51 ON t51.K=x.I JOIN t52 ON t52.K=x.I JOIN t53 ON t53.K=x.I JOIN t54 ON t54.K=x.I JOIN t55 ON t55.K=x.I JOIN t56 ON t56.K=x.I JOIN t57 ON t57.K=x.I JOIN t58 ON t58.K=x.I JOIN t59 ON t59.K=x.I JOIN t60 ON t60.K=x.I;
+DROP TABLE t100, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18, t19, t20, t21, t22, t23, t24, t25, t26, t27, t28, t29, t30, t31, t32, t33, t34, t35, t36, t37, t38, t39, t40, t41, t42, t43, t44, t45, t46, t47, t48, t49, t50, t51, t52, t53, t54, t55, t56, t57, t58, t59, t60, t61;
+show status like "optimizer%";
+Variable_name Value
+Optimizer_join_prefixes_check_calls 57916
+SET OPTIMIZER_SEARCH_DEPTH = DEFAULT;
+#
+# Bug found when testing greedy optimizer tests
+#
+CREATE TABLE t1 (pk INTEGER,
+col_int_key INTEGER,
+col_varchar_key VARCHAR(8),
+PRIMARY KEY (pk),
+KEY (col_varchar_key, col_int_key, pk));
+INSERT INTO t1 values (1,1,"A"),(2,2,"B");
+explain SELECT * FROM t1 AS alias1
+WHERE alias1.col_varchar_key IN (SELECT COUNT(*) FROM t1 AS SQ3_alias2 JOIN t1 AS SQ3_alias3 ON (SQ3_alias3.col_varchar_key = SQ3_alias2.col_varchar_key AND SQ3_alias3.pk = SQ3_alias2.pk));
+id select_type table type possible_keys key key_len ref rows Extra
+1 PRIMARY alias1 index NULL col_varchar_key 20 NULL 2 Using where; Using index
+2 DEPENDENT SUBQUERY SQ3_alias2 index PRIMARY,col_varchar_key col_varchar_key 20 NULL 2 Using index
+2 DEPENDENT SUBQUERY SQ3_alias3 eq_ref PRIMARY,col_varchar_key PRIMARY 4 test.SQ3_alias2.pk 1 Using where
+drop table t1;
+#
+# This triggered an assert failure while testing
+#
+CREATE TABLE t1 (a int, b int, key(b));
+INSERT INTO t1 VALUES (7,4),(1,1);
+CREATE TABLE t2 (d int);
+INSERT INTO t2 VALUES (2),(3);
+CREATE TABLE t3 (c int);
+INSERT INTO t3 VALUES (5),(6);
+SELECT * FROM t1 WHERE 5 IN (SELECT t1_a.a FROM t1 as t1_a WHERE 1 IN (SELECT t1_b.a FROM t1 as t1_b LEFT JOIN (t2 JOIN t3) ON (t1_b.a = t2.d) WHERE t1_b.b < 1));
+a b
+drop table t1,t2,t3;
+End of 10.0 tests
diff --git a/mysql-test/main/greedy_optimizer.test b/mysql-test/main/greedy_optimizer.test
index cac262bca64..2a830c70677 100644
--- a/mysql-test/main/greedy_optimizer.test
+++ b/mysql-test/main/greedy_optimizer.test
@@ -1,3 +1,5 @@
+--source include/have_innodb.inc
+
#
# A simple test of the greedy query optimization algorithm and the switches that
# control the optimizationprocess.
@@ -248,7 +250,7 @@ explain select t1.c11 from t7, t6, t5, t4, t3, t2, t1 where t1.c11 = t2.c21 and
show status like 'Last_query_cost';
-set optimizer_prune_level=1;
+set optimizer_prune_level=2;
select @@optimizer_prune_level;
set optimizer_search_depth=0;
@@ -381,6 +383,578 @@ LEFT JOIN (
SET optimizer_search_depth = DEFAULT;
DROP TABLE t1,t2,t2_1,t3,t3_1,t4,t4_1,t5,t5_1;
+set join_cache_level=@save_join_cache_level;
+
--echo End of 5.0 tests
-set join_cache_level=@save_join_cache_level;
+--echo #
+--echo # Bug #59326: Greedy optimizer produce stupid query execution plans.
+--echo #
+
+#double warning for view protocol
+--disable_view_protocol
+
+CREATE TABLE t10(
+ K INT NOT NULL AUTO_INCREMENT,
+ I INT,
+ PRIMARY KEY(K)
+);
+INSERT INTO t10(I) VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(0);
+
+CREATE TABLE t100 LIKE t10;
+INSERT INTO t100(I)
+SELECT X.I FROM t10 AS X,t10 AS Y;
+
+CREATE TABLE t10000 LIKE t10;
+INSERT INTO t10000(I)
+SELECT X.I FROM t100 AS X, t100 AS Y;
+
+--disable_warnings
+let $total_handler_reads=
+select sum(variable_value) from information_schema.session_status
+ where VARIABLE_NAME like 'Handler_read%';
+--enable_warnings
+
+
+## All crossproducts should be executed in order t10,t100,t10000
+EXPLAIN SELECT * FROM t10,t100,t10000;
+EXPLAIN SELECT * FROM t10,t10000,t100;
+EXPLAIN SELECT * FROM t100,t10,t10000;
+EXPLAIN SELECT * FROM t100,t10000,t10;
+EXPLAIN SELECT * FROM t10000,t10,t100;
+EXPLAIN SELECT * FROM t10000,t100,t10;
+
+######
+## Ordering between T100,T10000 EQ-joined T10 will
+## normally be with smallest EQ-table joined first
+######
+let $query=
+SELECT STRAIGHT_JOIN COUNT(*) FROM t10,t100,t10000
+WHERE t100.K=t10.I
+ AND t10000.K=t10.I;
+--source include/expect_qep.inc
+
+## However, swapping EQ_REF-joined tables gives the same cost
+let $query=
+SELECT STRAIGHT_JOIN COUNT(*) FROM t10,t10000,t100
+WHERE t100.K=t10.I
+ AND t10000.K=t10.I;
+--source include/check_qep.inc
+
+#####
+# Expect all variants of EQ joining t100 & t10000 with T10
+# to have same cost # handler_reads:
+let $query=
+SELECT COUNT(*) FROM t10,t100,t10000
+WHERE t100.K=t10.I
+ AND t10000.K=t10.I;
+--source include/check_qep.inc
+
+let $query=
+SELECT COUNT(*) FROM t10,t10000,t100
+WHERE t100.K=t10.I
+ AND t10000.K=t10.I;
+--source include/check_qep.inc
+
+let $query=
+SELECT COUNT(*) FROM t10,t100,t10000
+WHERE t100.K=t10.I
+ AND t10000.K=t10.K;
+--source include/check_qep.inc
+
+let $query=
+SELECT COUNT(*) FROM t10,t10000,t100
+WHERE t100.K=t10.I
+ AND t10000.K=t10.K;
+--source include/check_qep.inc
+
+let $query=
+SELECT COUNT(*) FROM t100,t10,t10000
+WHERE t100.K=t10.I
+ AND t10000.K=t10.K;
+--source include/check_qep.inc
+
+let $query=
+SELECT COUNT(*) FROM t100,t10000,t10
+WHERE t100.K=t10.I
+ AND t10000.K=t10.K;
+--source include/check_qep.inc
+
+let $query=
+SELECT COUNT(*) FROM t10000,t10,t100
+WHERE t100.K=t10.I
+ AND t10000.K=t10.K;
+--source include/check_qep.inc
+
+let $query=
+SELECT COUNT(*) FROM t10000,t100,t10
+WHERE t100.K=t10.I
+ AND t10000.K=t10.K;
+--source include/check_qep.inc
+
+
+#####
+## EQ_REF Should be executed before table scan(ALL)
+## - Independent of #records in table being EQ_REF-joined
+#####
+#####
+# Expect: Join EQ_REF(t100) before ALL(t10000)
+let $query=
+SELECT STRAIGHT_JOIN COUNT(*) FROM t10,t100,t10000
+WHERE t100.K=t10.I
+ AND t10000.I=t10.I;
+--source include/expect_qep.inc
+
+let $query=
+SELECT COUNT(*) FROM t10,t100,t10000
+WHERE t100.K=t10.I
+ AND t10000.I=t10.I;
+--source include/check_qep.inc
+
+let $query=
+SELECT COUNT(*) FROM t10,t10000,t100
+WHERE t100.K=t10.I
+ AND t10000.I=t10.I;
+--source include/check_qep.inc
+
+#####
+# Expect: Join EQ_REF(t10000) before ALL(t100) (star-join)
+let $query=
+SELECT STRAIGHT_JOIN COUNT(*) FROM t10,t10000,t100
+WHERE t100.I=t10.I
+ AND t10000.K=t10.I;
+--source include/expect_qep.inc
+
+--echo # See BUG#18352936
+let $query=
+SELECT COUNT(*) FROM t10,t100,t10000
+WHERE t100.I=t10.I
+ AND t10000.K=t10.I;
+--source include/check_qep.inc
+
+--echo # See BUG#18352936
+let $query=
+SELECT COUNT(*) FROM t10,t10000,t100
+WHERE t100.I=t10.I
+ AND t10000.K=t10.I;
+--source include/check_qep.inc
+
+#####
+# Expect: Join EQ_REF(t10000) before ALL(t100)
+let $query=
+SELECT STRAIGHT_JOIN COUNT(*) FROM t10,t10000,t100
+WHERE t100.I=t10.I
+ AND t10000.K=t100.I;
+--source include/expect_qep.inc
+
+let $query=
+SELECT COUNT(*) FROM t10,t100,t10000
+WHERE t100.I=t10.I
+ AND t10000.K=t100.I;
+--source include/check_qep.inc
+
+let $query=
+SELECT COUNT(*) FROM t10,t10000,t100
+WHERE t100.I=t10.I
+ AND t10000.K=t100.I;
+--source include/check_qep.inc
+
+
+#####
+## EQ_REF & ALL join two instances of t10000 with t10:
+## Always EQ_REF join first before producing cross product
+#####
+
+#####
+# Expected QEP: 'join EQ_REF(X) on X.K=t10.I' before 'cross' ALL(Y)
+let $query=
+SELECT STRAIGHT_JOIN COUNT(*) FROM t10,t10000 x,t10000 y
+WHERE x.k=t10.i;
+--source include/expect_qep.inc
+
+let $query=
+SELECT COUNT(*) FROM t10,t10000 x,t10000 y
+WHERE x.k=t10.i;
+--source include/check_qep.inc
+
+let $query=
+SELECT COUNT(*) FROM t10,t10000 y,t10000 x
+WHERE x.k=t10.i;
+--source include/check_qep.inc
+
+#####
+# Expected QEP: 'join EQ_REF(X) on X.K=t10.I' before ALL(Y)
+let $query=
+SELECT STRAIGHT_JOIN COUNT(*) FROM t10,t10000 x,t10000 y
+WHERE x.k=t10.i
+ AND y.i=t10.i;
+--source include/expect_qep.inc
+
+let $query=
+SELECT COUNT(*) FROM t10,t10000 x,t10000 y
+WHERE x.k=t10.i
+ AND y.i=t10.i;
+--source include/check_qep.inc
+
+let $query=
+SELECT COUNT(*) FROM t10,t10000 y,t10000 x
+WHERE x.k=t10.i
+ AND y.i=t10.i;
+--source include/check_qep.inc
+
+#####
+# Expected QEP: 'join EQ_REF(X) on X.K=t10.I' before ALL(Y)
+let $query=
+SELECT STRAIGHT_JOIN COUNT(*) FROM t10,t10000 x,t10000 y
+WHERE x.k=t10.i
+ AND y.i=x.k;
+--source include/expect_qep.inc
+
+let $query=
+SELECT COUNT(*) FROM t10,t10000 x,t10000 y
+WHERE x.k=t10.i
+ AND y.i=x.k;
+--source include/check_qep.inc
+
+let $query=
+SELECT COUNT(*) FROM t10,t10000 y,t10000 x
+WHERE x.k=t10.i
+ AND y.i=x.k;
+--source include/check_qep.inc
+
+
+
+## Create indexes to test REF access
+CREATE INDEX IX ON t10(I);
+CREATE INDEX IX ON t100(I);
+CREATE INDEX IX ON t10000(I);
+
+########
+## EQ_REF Should be executed before 'REF'
+## - Independent of #records in table being EQ_REF-joined
+
+####
+# Expected QEP: 'join EQ_REF(t100) on t100.K=t10.I' before REF(t10000)
+let $query=
+SELECT STRAIGHT_JOIN COUNT(*) FROM t10,t100,t10000
+WHERE t100.K=t10.I
+ AND t10000.I=t10.I;
+--source include/expect_qep.inc
+
+let $query=
+SELECT COUNT(*) FROM t10,t100,t10000
+WHERE t100.K=t10.I
+ AND t10000.I=t10.I;
+--source include/check_qep.inc
+
+let $query=
+SELECT COUNT(*) FROM t10,t10000,t100
+WHERE t100.K=t10.I
+ AND t10000.I=t10.I;
+--source include/check_qep.inc
+
+
+#####
+## EQ_REF & REF join two instances of t10000 with t10:
+#####
+
+#####
+## Expect this QEP, cost & #handler_read
+# Expected QEP: 'join EQ_REF(X) on X.K=t10.I' before 'cross' ALL(Y)
+let $query=
+SELECT STRAIGHT_JOIN COUNT(*) FROM t10,t10000 x,t10000 y
+WHERE x.k=t10.i;
+--source include/expect_qep.inc
+
+let $query=
+SELECT COUNT(*) FROM t10,t10000 x,t10000 y
+WHERE x.k=t10.i;
+--source include/check_qep.inc
+
+let $query=
+SELECT COUNT(*) FROM t10,t10000 y,t10000 x
+WHERE x.k=t10.i;
+--source include/check_qep.inc
+
+#####
+# Expected QEP: 'join EQ_REF(X) on X.K=t10.I' before REF(Y)
+let $query=
+SELECT STRAIGHT_JOIN COUNT(*) FROM t10,t10000 x,t10000 y
+WHERE x.k=t10.i
+ AND y.i=t10.i;
+--source include/expect_qep.inc
+
+let $query=
+SELECT COUNT(*) FROM t10,t10000 x,t10000 y
+WHERE x.k=t10.i
+ AND y.i=t10.i;
+--source include/check_qep.inc
+
+let $query=
+SELECT COUNT(*) FROM t10,t10000 y,t10000 x
+WHERE x.k=t10.i
+ AND y.i=t10.i;
+--source include/check_qep.inc
+
+#####
+# Expected QEP: 'join EQ_REF(X) on X.K=t10.I' before REF(Y)
+let $query=
+SELECT STRAIGHT_JOIN COUNT(*) FROM t10,t10000 x,t10000 y
+WHERE x.k=t10.i
+ AND y.i=x.k;
+--source include/expect_qep.inc
+
+let $query=
+SELECT COUNT(*) FROM t10,t10000 x,t10000 y
+WHERE x.k=t10.i
+ AND y.i=x.k;
+--source include/check_qep.inc
+
+let $query=
+SELECT COUNT(*) FROM t10,t10000 y,t10000 x
+WHERE x.k=t10.i
+ AND y.i=x.k;
+--source include/check_qep.inc
+
+########
+
+
+
+########
+
+--echo #
+--echo # Test improved capabilities of analyzing complex query
+--echo # plans without restricting 'optimizer_search_depth'.
+--echo # Fix problems like those reported as bug#41740 & bug#58225.
+--echo #
+--echo # EPLAIN of queries using T1-T62 will timeout/hang wo/ fixes
+--echo #
+
+DROP TABLE t10, t10000;
+
+--disable_result_log
+
+let $tabledef=
+( K INT NOT NULL AUTO_INCREMENT,
+ I INT,
+ A INT,
+ PRIMARY KEY(K), KEY IX(A)
+) engine = InnoDB;
+
+let $analyze = ANALYZE TABLE t100;
+
+let $i= 1;
+while ($i < 62)
+{
+ let $create= CREATE TABLE t$i $tabledef;
+ eval $create;
+
+ let $insert =
+ INSERT INTO t$i(I,A) SELECT X.K,X.K FROM t100 AS X, t100 AS Y WHERE X.K < 20 AND Y.K <= $i;
+ eval $insert;
+
+ let $analyze = $analyze, t$i;
+ inc $i;
+}
+eval $analyze;
+
+set optimizer_prune_level=default;
+#--enable_result_log
+#select @@optimizer_prune_level;
+#--disable_result_log
+flush status;
+
+#################
+## The EXPLAIN'ed query itself can't be part of the verified
+## result as the QEP is not 100% predictable due to variation
+## in statistics from the engines. This is believed to be
+## caused by:
+## - Variations in table fill degree.
+## - 'Fuzzy' statistics provided by engines.
+## - Round errors caused by 'cost' calculation using
+## 'only' 64-bit double precision.
+## - Other bugs...?
+##
+###############
+
+## Will test with optimizer_search_depth= [0,1,3,62]
+let $depth= 0;
+while ($depth<4)
+{
+ if ($depth==0)
+ {
+ set optimizer_search_depth=0;
+ }
+ if ($depth==1)
+ {
+ set optimizer_search_depth=1;
+ }
+ if ($depth==2)
+ {
+ set optimizer_search_depth=3;
+ }
+ if ($depth==3)
+ {
+ set optimizer_search_depth=62;
+ }
+ inc $depth;
+
+
+ ## Test pruning of joined table scans (ALL)
+ ## Prepare of QEP without timeout is heavily dependent
+ ## on maintaining correctly '#rows-sorted' plan
+ ##
+ let $query= SELECT COUNT(*) FROM t1 AS x;
+ let $i= 1;
+ while ($i < 61)
+ {
+ let $query= $query JOIN t$i ON t$i.I=x.I;
+ inc $i;
+
+ select @@optimizer_prune_level;
+ select @@optimizer_search_depth;
+ eval EXPLAIN $query;
+ }
+
+ ## Test pruning of joined table scans (ALL)
+ ## with multiple instances of same table.
+ ## (All instances being equally expensive)
+ let $query= SELECT COUNT(*) FROM t1 AS x;
+ let $i= 1;
+ while ($i <= 56)
+ {
+ let $t= t$i;
+ let $query= $query JOIN $t as t$i ON t$i.I=x.I;
+ inc $i;
+ let $query= $query JOIN $t as t$i ON t$i.I=x.I;
+ inc $i;
+ let $query= $query JOIN $t as t$i ON t$i.I=x.I;
+ inc $i;
+ let $query= $query JOIN $t as t$i ON t$i.I=x.I;
+ inc $i;
+ let $query= $query JOIN $t as t$i ON t$i.I=x.I;
+ inc $i;
+ let $query= $query JOIN $t as t$i ON t$i.I=x.I;
+ inc $i;
+ let $query= $query JOIN $t as t$i ON t$i.I=x.I;
+ inc $i;
+ let $query= $query JOIN $t as t$i ON t$i.I=x.I;
+ inc $i;
+
+ select @@optimizer_prune_level;
+ select @@optimizer_search_depth;
+ eval EXPLAIN $query;
+ }
+
+ ## A mix of 25% EQ_REF / 75% ALL joins
+ ##
+ let $query= SELECT COUNT(*) FROM t1 AS x;
+ let $i= 1;
+ while ($i < 60)
+ {
+ let $query= $query JOIN t$i ON t$i.I = x.I;
+ inc $i;
+ let $query= $query JOIN t$i ON t$i.K = x.I;
+ inc $i;
+ let $query= $query JOIN t$i ON t$i.I = x.I;
+ inc $i;
+ let $query= $query JOIN t$i ON t$i.I = x.I;
+ inc $i;
+
+ eval EXPLAIN $query;
+ }
+
+ ## A mix of 50% EQ_REF / 50% ALL joins
+ ##
+ let $query= SELECT COUNT(*) FROM t1 AS x;
+ let $i= 1;
+ while ($i < 60)
+ {
+ let $query= $query JOIN t$i ON t$i.I = x.I;
+ inc $i;
+ let $query= $query JOIN t$i ON t$i.K = x.I;
+ inc $i;
+ let $query= $query JOIN t$i ON t$i.I = x.I;
+ inc $i;
+ let $query= $query JOIN t$i ON t$i.K = x.I;
+ inc $i;
+
+ eval EXPLAIN $query;
+ }
+
+ ## A mix of 75% EQ_REF / 25% ALL joins
+ ##
+ let $query= SELECT COUNT(*) FROM t1 AS x;
+ let $i= 1;
+ while ($i < 60)
+ {
+ let $query= $query JOIN t$i ON t$i.I = x.I;
+ inc $i;
+ let $query= $query JOIN t$i ON t$i.K = x.I;
+ inc $i;
+ let $query= $query JOIN t$i ON t$i.K = x.I;
+ inc $i;
+ let $query= $query JOIN t$i ON t$i.K = x.I;
+ inc $i;
+
+ eval EXPLAIN $query;
+ }
+
+ ## 100% EQ_REF joins
+ ##
+ let $query= SELECT COUNT(*) FROM t1 AS x;
+ let $i= 1;
+ while ($i < 61)
+ {
+ let $query= $query JOIN t$i ON t$i.K=x.I;
+ inc $i;
+
+ eval EXPLAIN $query;
+ }
+}
+
+let $drop = DROP TABLE t100;
+let $i= 1;
+while ($i < 62)
+{
+ let $drop = $drop, t$i;
+ inc $i;
+}
+eval $drop;
+
+--enable_result_log
+
+show status like "optimizer%";
+SET OPTIMIZER_SEARCH_DEPTH = DEFAULT;
+
+--echo #
+--echo # Bug found when testing greedy optimizer tests
+--echo #
+
+CREATE TABLE t1 (pk INTEGER,
+ col_int_key INTEGER,
+ col_varchar_key VARCHAR(8),
+ PRIMARY KEY (pk),
+ KEY (col_varchar_key, col_int_key, pk));
+
+INSERT INTO t1 values (1,1,"A"),(2,2,"B");
+explain SELECT * FROM t1 AS alias1
+WHERE alias1.col_varchar_key IN (SELECT COUNT(*) FROM t1 AS SQ3_alias2 JOIN t1 AS SQ3_alias3 ON (SQ3_alias3.col_varchar_key = SQ3_alias2.col_varchar_key AND SQ3_alias3.pk = SQ3_alias2.pk));
+drop table t1;
+
+--echo #
+--echo # This triggered an assert failure while testing
+--echo #
+
+CREATE TABLE t1 (a int, b int, key(b));
+INSERT INTO t1 VALUES (7,4),(1,1);
+CREATE TABLE t2 (d int);
+INSERT INTO t2 VALUES (2),(3);
+CREATE TABLE t3 (c int);
+INSERT INTO t3 VALUES (5),(6);
+SELECT * FROM t1 WHERE 5 IN (SELECT t1_a.a FROM t1 as t1_a WHERE 1 IN (SELECT t1_b.a FROM t1 as t1_b LEFT JOIN (t2 JOIN t3) ON (t1_b.a = t2.d) WHERE t1_b.b < 1));
+drop table t1,t2,t3;
+
+--enable_view_protocol
+
+--echo End of 10.0 tests
diff --git a/mysql-test/main/information_schema.result b/mysql-test/main/information_schema.result
index 156a7a11578..7c867078f8f 100644
--- a/mysql-test/main/information_schema.result
+++ b/mysql-test/main/information_schema.result
@@ -312,17 +312,17 @@ latin1_swedish_nopad_ci latin1 1032 # 1
latin1_nopad_bin latin1 1071 # 1
select * from information_schema.COLLATION_CHARACTER_SET_APPLICABILITY
where COLLATION_NAME like 'latin1%';
-COLLATION_NAME CHARACTER_SET_NAME
-latin1_german1_ci latin1
-latin1_swedish_ci latin1
-latin1_danish_ci latin1
-latin1_german2_ci latin1
-latin1_bin latin1
-latin1_general_ci latin1
-latin1_general_cs latin1
-latin1_spanish_ci latin1
-latin1_swedish_nopad_ci latin1
-latin1_nopad_bin latin1
+COLLATION_NAME CHARACTER_SET_NAME FULL_COLLATION_NAME ID IS_DEFAULT
+latin1_german1_ci latin1 latin1_german1_ci 5
+latin1_swedish_ci latin1 latin1_swedish_ci 8 Yes
+latin1_danish_ci latin1 latin1_danish_ci 15
+latin1_german2_ci latin1 latin1_german2_ci 31
+latin1_bin latin1 latin1_bin 47
+latin1_general_ci latin1 latin1_general_ci 48
+latin1_general_cs latin1 latin1_general_cs 49
+latin1_spanish_ci latin1 latin1_spanish_ci 94
+latin1_swedish_nopad_ci latin1 latin1_swedish_nopad_ci 1032
+latin1_nopad_bin latin1 latin1_nopad_bin 1071
drop procedure if exists sel2;
drop function if exists sub1;
drop function if exists sub2;
@@ -610,7 +610,7 @@ SHOW CREATE TABLE INFORMATION_SCHEMA.character_sets;
Table Create Table
CHARACTER_SETS CREATE TEMPORARY TABLE `CHARACTER_SETS` (
`CHARACTER_SET_NAME` varchar(32) NOT NULL,
- `DEFAULT_COLLATE_NAME` varchar(32) NOT NULL,
+ `DEFAULT_COLLATE_NAME` varchar(64) NOT NULL,
`DESCRIPTION` varchar(60) NOT NULL,
`MAXLEN` bigint(3) NOT NULL
) ENGINE=MEMORY DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci
@@ -619,7 +619,7 @@ SHOW CREATE TABLE INFORMATION_SCHEMA.character_sets;
Table Create Table
CHARACTER_SETS CREATE TEMPORARY TABLE `CHARACTER_SETS` (
`CHARACTER_SET_NAME` varchar(32) NOT NULL,
- `DEFAULT_COLLATE_NAME` varchar(32) NOT NULL,
+ `DEFAULT_COLLATE_NAME` varchar(64) NOT NULL,
`DESCRIPTION` varchar(60) NOT NULL,
`MAXLEN` bigint(3) NOT NULL
) ENGINE=MEMORY DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci
@@ -634,7 +634,7 @@ show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`CHARACTER_SET_NAME` varchar(32) NOT NULL,
- `DEFAULT_COLLATE_NAME` varchar(32) NOT NULL,
+ `DEFAULT_COLLATE_NAME` varchar(64) NOT NULL,
`DESCRIPTION` varchar(60) NOT NULL,
`MAXLEN` bigint(3) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci
@@ -679,8 +679,8 @@ proc modified timestamp
proc sql_mode set('REAL_AS_FLOAT','PIPES_AS_CONCAT','ANSI_QUOTES','IGNORE_SPACE','IGNORE_BAD_TABLE_OPTIONS','ONLY_FULL_GROUP_BY','NO_UNSIGNED_SUBTRACTION','NO_DIR_IN_CREATE','POSTGRESQL','ORACLE','MSSQL','DB2','MAXDB','NO_KEY_OPTIONS','NO_TABLE_OPTIONS','NO_FIELD_OPTIONS','MYSQL323','MYSQL40','ANSI','NO_AUTO_VALUE_ON_ZERO','NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLES','STRICT_ALL_TABLES','NO_ZERO_IN_DATE','NO_ZERO_DATE','INVALID_DATES','ERROR_FOR_DIVISION_BY_ZERO','TRADITIONAL','NO_AUTO_CREATE_USER','HIGH_NOT_PRECEDENCE','NO_ENGINE_SUBSTITUTION','PAD_CHAR_TO_FULL_LENGTH','EMPTY_STRING_IS_NULL','SIMULTANEOUS_ASSIGNMENT','TIME_ROUND_FRACTIONAL')
proc comment text
proc character_set_client char(32)
-proc collation_connection char(32)
-proc db_collation char(32)
+proc collation_connection char(64)
+proc db_collation char(64)
proc body_utf8 longblob
proc aggregate enum('NONE','GROUP')
drop table t115;
@@ -828,7 +828,7 @@ where table_schema="information_schema" and table_name="COLUMNS" and
(column_name="character_set_name" or column_name="collation_name");
column_type
varchar(32)
-varchar(32)
+varchar(64)
select TABLE_ROWS from information_schema.tables where
table_schema="information_schema" and table_name="COLUMNS";
TABLE_ROWS
diff --git a/mysql-test/main/information_schema_routines.result b/mysql-test/main/information_schema_routines.result
index 90768765883..35f12510556 100644
--- a/mysql-test/main/information_schema_routines.result
+++ b/mysql-test/main/information_schema_routines.result
@@ -34,8 +34,8 @@ ROUTINES CREATE TEMPORARY TABLE `ROUTINES` (
`ROUTINE_COMMENT` longtext NOT NULL,
`DEFINER` varchar(384) NOT NULL,
`CHARACTER_SET_CLIENT` varchar(32) NOT NULL,
- `COLLATION_CONNECTION` varchar(32) NOT NULL,
- `DATABASE_COLLATION` varchar(32) NOT NULL
+ `COLLATION_CONNECTION` varchar(64) NOT NULL,
+ `DATABASE_COLLATION` varchar(64) NOT NULL
) DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci
SELECT * FROM information_schema.columns
WHERE table_schema = 'information_schema'
@@ -687,14 +687,14 @@ ORDINAL_POSITION 30
COLUMN_DEFAULT NULL
IS_NULLABLE NO
DATA_TYPE varchar
-CHARACTER_MAXIMUM_LENGTH 32
-CHARACTER_OCTET_LENGTH 96
+CHARACTER_MAXIMUM_LENGTH 64
+CHARACTER_OCTET_LENGTH 192
NUMERIC_PRECISION NULL
NUMERIC_SCALE NULL
DATETIME_PRECISION NULL
CHARACTER_SET_NAME utf8mb3
COLLATION_NAME utf8mb3_general_ci
-COLUMN_TYPE varchar(32)
+COLUMN_TYPE varchar(64)
COLUMN_KEY
EXTRA
PRIVILEGES #
@@ -709,14 +709,14 @@ ORDINAL_POSITION 31
COLUMN_DEFAULT NULL
IS_NULLABLE NO
DATA_TYPE varchar
-CHARACTER_MAXIMUM_LENGTH 32
-CHARACTER_OCTET_LENGTH 96
+CHARACTER_MAXIMUM_LENGTH 64
+CHARACTER_OCTET_LENGTH 192
NUMERIC_PRECISION NULL
NUMERIC_SCALE NULL
DATETIME_PRECISION NULL
CHARACTER_SET_NAME utf8mb3
COLLATION_NAME utf8mb3_general_ci
-COLUMN_TYPE varchar(32)
+COLUMN_TYPE varchar(64)
COLUMN_KEY
EXTRA
PRIVILEGES #
@@ -754,8 +754,8 @@ SQL_MODE varchar(8192) NO NULL
ROUTINE_COMMENT longtext NO NULL
DEFINER varchar(384) NO NULL
CHARACTER_SET_CLIENT varchar(32) NO NULL
-COLLATION_CONNECTION varchar(32) NO NULL
-DATABASE_COLLATION varchar(32) NO NULL
+COLLATION_CONNECTION varchar(64) NO NULL
+DATABASE_COLLATION varchar(64) NO NULL
# ========== routines.2 ==========
DROP DATABASE IF EXISTS i_s_routines_test;
CREATE DATABASE i_s_routines_test;
diff --git a/mysql-test/main/innodb_ext_key.result b/mysql-test/main/innodb_ext_key.result
index 3025e3ec3f0..02e199bc58a 100644
--- a/mysql-test/main/innodb_ext_key.result
+++ b/mysql-test/main/innodb_ext_key.result
@@ -385,9 +385,9 @@ SELECT a FROM t1 AS t, t2
WHERE c = a AND b IN (SELECT b FROM t1, t2 WHERE b = t.b);
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t index a,b b 7 NULL 10 Using index
+1 PRIMARY t2 eq_ref PRIMARY PRIMARY 4 test.t.a 1 Using index
1 PRIMARY t1 ref b b 3 test.t.b 2 Using index; Start temporary
1 PRIMARY t2 index NULL PRIMARY 4 NULL 11 Using index; End temporary; Using join buffer (flat, BNL join)
-1 PRIMARY t2 eq_ref PRIMARY PRIMARY 4 test.t.a 1 Using index
SELECT a FROM t1 AS t, t2
WHERE c = a AND b IN (SELECT b FROM t1, t2 WHERE b = t.b);
a
diff --git a/mysql-test/main/join.result b/mysql-test/main/join.result
index 942ee96fc32..59d6ae98ff3 100644
--- a/mysql-test/main/join.result
+++ b/mysql-test/main/join.result
@@ -890,7 +890,7 @@ insert into t2 select @v:=A.a+10*B.a, @v from t1 A, t1 B;
explain select * from t1;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 ALL NULL NULL NULL NULL 10
-show status like '%cost%';
+show status like 'Last_query_cost';
Variable_name Value
Last_query_cost 4.016090
select 'The cost of accessing t1 (dont care if it changes' '^';
@@ -904,7 +904,7 @@ id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 ALL NULL NULL NULL NULL 10 Using where
1 SIMPLE A eq_ref PRIMARY PRIMARY 4 test.t1.a 1 Using where
1 SIMPLE B eq_ref PRIMARY PRIMARY 4 test.A.b 1
-show status like '%cost%';
+show status like 'Last_query_cost';
Variable_name Value
Last_query_cost 28.016090
select '^^: The above should be ~= 20 + cost(select * from t1). Value less than 20 is an error' Z;
diff --git a/mysql-test/main/join.test b/mysql-test/main/join.test
index c8bd2886b30..1668787d33e 100644
--- a/mysql-test/main/join.test
+++ b/mysql-test/main/join.test
@@ -692,13 +692,13 @@ create table t2 (a int, b int, primary key(a));
insert into t2 select @v:=A.a+10*B.a, @v from t1 A, t1 B;
explain select * from t1;
-show status like '%cost%';
+show status like 'Last_query_cost';
select 'The cost of accessing t1 (dont care if it changes' '^';
select 'vv: Following query must use ALL(t1), eq_ref(A), eq_ref(B): vv' Z;
explain select * from t1, t2 A, t2 B where A.a = t1.a and B.a=A.b;
-show status like '%cost%';
+show status like 'Last_query_cost';
select '^^: The above should be ~= 20 + cost(select * from t1). Value less than 20 is an error' Z;
diff --git a/mysql-test/main/join_cache.result b/mysql-test/main/join_cache.result
index 10ed8960b64..b32a278d3a1 100644
--- a/mysql-test/main/join_cache.result
+++ b/mysql-test/main/join_cache.result
@@ -2952,7 +2952,7 @@ metaid int NOT NULL default '0',
formatid int NOT NULL default '0',
status int default NULL,
path varchar(100) NOT NULL default '',
-datemodified timestamp NOT NULL ,
+datemodified timestamp NOT NULL default now(),
resourcetype int NOT NULL default '1',
parameters text,
signature int default NULL,
diff --git a/mysql-test/main/join_cache.test b/mysql-test/main/join_cache.test
index f09f28c273a..125ae84c309 100644
--- a/mysql-test/main/join_cache.test
+++ b/mysql-test/main/join_cache.test
@@ -1132,7 +1132,7 @@ CREATE TABLE t3(
formatid int NOT NULL default '0',
status int default NULL,
path varchar(100) NOT NULL default '',
- datemodified timestamp NOT NULL ,
+ datemodified timestamp NOT NULL default now(),
resourcetype int NOT NULL default '1',
parameters text,
signature int default NULL,
diff --git a/mysql-test/main/join_nested.result b/mysql-test/main/join_nested.result
index 4db15f2f5a8..fdfc5a2e7f5 100644
--- a/mysql-test/main/join_nested.result
+++ b/mysql-test/main/join_nested.result
@@ -964,13 +964,13 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE t0 ALL NULL NULL NULL NULL 3 100.00 Using where
1 SIMPLE t1 ALL NULL NULL NULL NULL 3 100.00 Using where; Using join buffer (flat, BNL join)
1 SIMPLE t9 ALL NULL NULL NULL NULL 3 100.00 Using where; Using join buffer (flat, BNL join)
-1 SIMPLE t2 ALL NULL NULL NULL NULL 8 100.00 Using where
-1 SIMPLE t3 ALL NULL NULL NULL NULL 2 100.00 Using where
-1 SIMPLE t4 ref idx_b idx_b 5 test.t2.b 2 100.00 Using where
1 SIMPLE t5 ALL idx_b NULL NULL NULL 7 100.00 Using where
1 SIMPLE t7 ALL NULL NULL NULL NULL 2 100.00 Using where
1 SIMPLE t6 ALL NULL NULL NULL NULL 3 100.00 Using where
1 SIMPLE t8 ALL NULL NULL NULL NULL 2 100.00 Using where
+1 SIMPLE t2 ALL NULL NULL NULL NULL 8 100.00 Using where
+1 SIMPLE t3 ALL NULL NULL NULL NULL 2 100.00 Using where
+1 SIMPLE t4 ref idx_b idx_b 5 test.t2.b 2 100.00 Using where
Warnings:
Note 1003 select `test`.`t0`.`a` AS `a`,`test`.`t0`.`b` AS `b`,`test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t4`.`a` AS `a`,`test`.`t4`.`b` AS `b`,`test`.`t5`.`a` AS `a`,`test`.`t5`.`b` AS `b`,`test`.`t6`.`a` AS `a`,`test`.`t6`.`b` AS `b`,`test`.`t7`.`a` AS `a`,`test`.`t7`.`b` AS `b`,`test`.`t8`.`a` AS `a`,`test`.`t8`.`b` AS `b`,`test`.`t9`.`a` AS `a`,`test`.`t9`.`b` AS `b` from `test`.`t0` join `test`.`t1` left join (`test`.`t2` left join (`test`.`t3` join `test`.`t4`) on(`test`.`t3`.`a` = 1 and `test`.`t4`.`b` = `test`.`t2`.`b` and `test`.`t2`.`a` > 0 and `test`.`t4`.`a` > 0 and `test`.`t2`.`b` is not null) join `test`.`t5` left join (`test`.`t6` join `test`.`t7` left join `test`.`t8` on(`test`.`t8`.`b` = `test`.`t5`.`b` and `test`.`t6`.`b` < 10)) on(`test`.`t7`.`b` = `test`.`t5`.`b` and `test`.`t6`.`b` >= 2 and `test`.`t5`.`a` > 0)) on((`test`.`t3`.`b` = 2 or `test`.`t3`.`c` is null) and (`test`.`t6`.`b` = 2 or `test`.`t6`.`c` is null) and (`test`.`t5`.`b` = `test`.`t0`.`b` or `test`.`t3`.`c` is null or `test`.`t6`.`c` is null or `test`.`t8`.`c` is null) and `test`.`t1`.`a` <> 2) join `test`.`t9` where `test`.`t0`.`a` = 1 and `test`.`t1`.`b` = `test`.`t0`.`b` and `test`.`t9`.`a` = 1 and (`test`.`t2`.`a` >= 4 or `test`.`t2`.`c` is null) and (`test`.`t3`.`a` < 5 or `test`.`t3`.`c` is null) and (`test`.`t4`.`b` = `test`.`t3`.`b` or `test`.`t3`.`c` is null or `test`.`t4`.`c` is null) and (`test`.`t5`.`a` >= 2 or `test`.`t5`.`c` is null) and (`test`.`t6`.`a` >= 4 or `test`.`t6`.`c` is null) and (`test`.`t7`.`a` <= 2 or `test`.`t7`.`c` is null) and (`test`.`t8`.`a` < 1 or `test`.`t8`.`c` is null) and (`test`.`t8`.`b` = `test`.`t9`.`b` or `test`.`t8`.`c` is null)
INSERT INTO t8 VALUES (-3,12,0), (-1,14,0), (-5,15,0), (-1,11,0), (-4,13,0);
@@ -1014,13 +1014,13 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE t0 ALL NULL NULL NULL NULL 3 100.00 Using where
1 SIMPLE t1 ALL NULL NULL NULL NULL 3 100.00 Using where; Using join buffer (flat, BNL join)
1 SIMPLE t9 ALL NULL NULL NULL NULL 3 100.00 Using where; Using join buffer (flat, BNL join)
-1 SIMPLE t2 ALL NULL NULL NULL NULL 8 100.00 Using where
-1 SIMPLE t3 ALL NULL NULL NULL NULL 2 100.00 Using where
-1 SIMPLE t4 ref idx_b idx_b 5 test.t2.b 2 100.00 Using where
1 SIMPLE t5 ALL idx_b NULL NULL NULL 7 100.00 Using where
1 SIMPLE t7 ALL NULL NULL NULL NULL 2 100.00 Using where
1 SIMPLE t6 ALL NULL NULL NULL NULL 3 100.00 Using where
1 SIMPLE t8 ref idx_b idx_b 5 test.t5.b 2 100.00 Using where
+1 SIMPLE t2 ALL NULL NULL NULL NULL 8 100.00 Using where
+1 SIMPLE t3 ALL NULL NULL NULL NULL 2 100.00 Using where
+1 SIMPLE t4 ref idx_b idx_b 5 test.t2.b 2 100.00 Using where
Warnings:
Note 1003 select `test`.`t0`.`a` AS `a`,`test`.`t0`.`b` AS `b`,`test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t4`.`a` AS `a`,`test`.`t4`.`b` AS `b`,`test`.`t5`.`a` AS `a`,`test`.`t5`.`b` AS `b`,`test`.`t6`.`a` AS `a`,`test`.`t6`.`b` AS `b`,`test`.`t7`.`a` AS `a`,`test`.`t7`.`b` AS `b`,`test`.`t8`.`a` AS `a`,`test`.`t8`.`b` AS `b`,`test`.`t9`.`a` AS `a`,`test`.`t9`.`b` AS `b` from `test`.`t0` join `test`.`t1` left join (`test`.`t2` left join (`test`.`t3` join `test`.`t4`) on(`test`.`t3`.`a` = 1 and `test`.`t4`.`b` = `test`.`t2`.`b` and `test`.`t2`.`a` > 0 and `test`.`t4`.`a` > 0 and `test`.`t2`.`b` is not null) join `test`.`t5` left join (`test`.`t6` join `test`.`t7` left join `test`.`t8` on(`test`.`t8`.`b` = `test`.`t5`.`b` and `test`.`t6`.`b` < 10 and `test`.`t8`.`a` >= 0 and `test`.`t5`.`b` is not null)) on(`test`.`t7`.`b` = `test`.`t5`.`b` and `test`.`t6`.`b` >= 2 and `test`.`t5`.`a` > 0)) on((`test`.`t3`.`b` = 2 or `test`.`t3`.`c` is null) and (`test`.`t6`.`b` = 2 or `test`.`t6`.`c` is null) and (`test`.`t5`.`b` = `test`.`t0`.`b` or `test`.`t3`.`c` is null or `test`.`t6`.`c` is null or `test`.`t8`.`c` is null) and `test`.`t1`.`a` <> 2) join `test`.`t9` where `test`.`t0`.`a` = 1 and `test`.`t1`.`b` = `test`.`t0`.`b` and `test`.`t9`.`a` = 1 and (`test`.`t2`.`a` >= 4 or `test`.`t2`.`c` is null) and (`test`.`t3`.`a` < 5 or `test`.`t3`.`c` is null) and (`test`.`t4`.`b` = `test`.`t3`.`b` or `test`.`t3`.`c` is null or `test`.`t4`.`c` is null) and (`test`.`t5`.`a` >= 2 or `test`.`t5`.`c` is null) and (`test`.`t6`.`a` >= 4 or `test`.`t6`.`c` is null) and (`test`.`t7`.`a` <= 2 or `test`.`t7`.`c` is null) and (`test`.`t8`.`a` < 1 or `test`.`t8`.`c` is null) and (`test`.`t8`.`b` = `test`.`t9`.`b` or `test`.`t8`.`c` is null)
INSERT INTO t1 VALUES (-1,133,0), (-2,12,0), (-3,11,0), (-5,15,0);
@@ -1065,13 +1065,13 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE t0 ref idx_a idx_a 5 const 2 100.00
1 SIMPLE t9 ALL NULL NULL NULL NULL 3 100.00 Using where; Using join buffer (flat, BNL join)
1 SIMPLE t1 ALL idx_b NULL NULL NULL 7 100.00 Using where; Using join buffer (flat, BNL join)
-1 SIMPLE t2 ALL NULL NULL NULL NULL 8 100.00 Using where
-1 SIMPLE t3 ALL NULL NULL NULL NULL 2 100.00 Using where
-1 SIMPLE t4 ref idx_b idx_b 5 test.t2.b 2 100.00 Using where
1 SIMPLE t5 ALL idx_b NULL NULL NULL 7 100.00 Using where
1 SIMPLE t7 ALL NULL NULL NULL NULL 2 100.00 Using where
1 SIMPLE t6 ALL NULL NULL NULL NULL 3 100.00 Using where
1 SIMPLE t8 ref idx_b idx_b 5 test.t5.b 2 100.00 Using where
+1 SIMPLE t2 ALL NULL NULL NULL NULL 8 100.00 Using where
+1 SIMPLE t3 ALL NULL NULL NULL NULL 2 100.00 Using where
+1 SIMPLE t4 ref idx_b idx_b 5 test.t2.b 2 100.00 Using where
Warnings:
Note 1003 select `test`.`t0`.`a` AS `a`,`test`.`t0`.`b` AS `b`,`test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t4`.`a` AS `a`,`test`.`t4`.`b` AS `b`,`test`.`t5`.`a` AS `a`,`test`.`t5`.`b` AS `b`,`test`.`t6`.`a` AS `a`,`test`.`t6`.`b` AS `b`,`test`.`t7`.`a` AS `a`,`test`.`t7`.`b` AS `b`,`test`.`t8`.`a` AS `a`,`test`.`t8`.`b` AS `b`,`test`.`t9`.`a` AS `a`,`test`.`t9`.`b` AS `b` from `test`.`t0` join `test`.`t1` left join (`test`.`t2` left join (`test`.`t3` join `test`.`t4`) on(`test`.`t3`.`a` = 1 and `test`.`t4`.`b` = `test`.`t2`.`b` and `test`.`t2`.`b` is not null) join `test`.`t5` left join (`test`.`t6` join `test`.`t7` left join `test`.`t8` on(`test`.`t8`.`b` = `test`.`t5`.`b` and `test`.`t6`.`b` < 10 and `test`.`t5`.`b` is not null)) on(`test`.`t7`.`b` = `test`.`t5`.`b` and `test`.`t6`.`b` >= 2)) on((`test`.`t3`.`b` = 2 or `test`.`t3`.`c` is null) and (`test`.`t6`.`b` = 2 or `test`.`t6`.`c` is null) and (`test`.`t5`.`b` = `test`.`t0`.`b` or `test`.`t3`.`c` is null or `test`.`t6`.`c` is null or `test`.`t8`.`c` is null) and `test`.`t1`.`a` <> 2 and `test`.`t1`.`a` > 0) join `test`.`t9` where `test`.`t0`.`a` = 1 and `test`.`t1`.`b` = `test`.`t0`.`b` and `test`.`t9`.`a` = 1 and (`test`.`t2`.`a` >= 4 or `test`.`t2`.`c` is null) and (`test`.`t3`.`a` < 5 or `test`.`t3`.`c` is null) and (`test`.`t4`.`b` = `test`.`t3`.`b` or `test`.`t3`.`c` is null or `test`.`t4`.`c` is null) and (`test`.`t5`.`a` >= 2 or `test`.`t5`.`c` is null) and (`test`.`t6`.`a` >= 4 or `test`.`t6`.`c` is null) and (`test`.`t7`.`a` <= 2 or `test`.`t7`.`c` is null) and (`test`.`t8`.`a` < 1 or `test`.`t8`.`c` is null) and (`test`.`t8`.`b` = `test`.`t9`.`b` or `test`.`t8`.`c` is null)
SELECT t0.a,t0.b,t1.a,t1.b,t2.a,t2.b,t3.a,t3.b,t4.a,t4.b,
@@ -1111,20 +1111,20 @@ t0.b=t1.b AND
a b a b a b a b a b a b a b a b a b a b
1 2 2 2 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 1
1 2 2 2 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 2
+1 2 3 2 4 2 1 2 3 2 2 2 6 2 2 2 0 2 1 2
1 2 3 2 4 2 1 2 3 2 3 1 6 2 1 1 NULL NULL 1 1
-1 2 3 2 4 2 1 2 3 2 3 3 NULL NULL NULL NULL NULL NULL 1 1
-1 2 3 2 4 2 1 2 4 2 3 1 6 2 1 1 NULL NULL 1 1
-1 2 3 2 4 2 1 2 4 2 3 3 NULL NULL NULL NULL NULL NULL 1 1
-1 2 3 2 5 3 NULL NULL NULL NULL 3 1 6 2 1 1 NULL NULL 1 1
-1 2 3 2 5 3 NULL NULL NULL NULL 3 3 NULL NULL NULL NULL NULL NULL 1 1
1 2 3 2 4 2 1 2 3 2 3 1 6 2 1 1 NULL NULL 1 2
-1 2 3 2 4 2 1 2 3 2 2 2 6 2 2 2 0 2 1 2
+1 2 3 2 4 2 1 2 3 2 3 3 NULL NULL NULL NULL NULL NULL 1 1
1 2 3 2 4 2 1 2 3 2 3 3 NULL NULL NULL NULL NULL NULL 1 2
-1 2 3 2 4 2 1 2 4 2 3 1 6 2 1 1 NULL NULL 1 2
1 2 3 2 4 2 1 2 4 2 2 2 6 2 2 2 0 2 1 2
+1 2 3 2 4 2 1 2 4 2 3 1 6 2 1 1 NULL NULL 1 1
+1 2 3 2 4 2 1 2 4 2 3 1 6 2 1 1 NULL NULL 1 2
+1 2 3 2 4 2 1 2 4 2 3 3 NULL NULL NULL NULL NULL NULL 1 1
1 2 3 2 4 2 1 2 4 2 3 3 NULL NULL NULL NULL NULL NULL 1 2
-1 2 3 2 5 3 NULL NULL NULL NULL 3 1 6 2 1 1 NULL NULL 1 2
1 2 3 2 5 3 NULL NULL NULL NULL 2 2 6 2 2 2 0 2 1 2
+1 2 3 2 5 3 NULL NULL NULL NULL 3 1 6 2 1 1 NULL NULL 1 1
+1 2 3 2 5 3 NULL NULL NULL NULL 3 1 6 2 1 1 NULL NULL 1 2
+1 2 3 2 5 3 NULL NULL NULL NULL 3 3 NULL NULL NULL NULL NULL NULL 1 1
1 2 3 2 5 3 NULL NULL NULL NULL 3 3 NULL NULL NULL NULL NULL NULL 1 2
SELECT t2.a,t2.b
FROM t2;
diff --git a/mysql-test/main/join_nested.test b/mysql-test/main/join_nested.test
index 8ac6b5a1d6b..ed1fe4c9f7e 100644
--- a/mysql-test/main/join_nested.test
+++ b/mysql-test/main/join_nested.test
@@ -637,6 +637,7 @@ SELECT t0.a,t0.b,t1.a,t1.b,t2.a,t2.b,t3.a,t3.b,t4.a,t4.b,
(t8.b=t9.b OR t8.c IS NULL) AND
(t9.a=1);
+--sorted_result
SELECT t0.a,t0.b,t1.a,t1.b,t2.a,t2.b,t3.a,t3.b,t4.a,t4.b,
t5.a,t5.b,t6.a,t6.b,t7.a,t7.b,t8.a,t8.b,t9.a,t9.b
FROM t0,t1
diff --git a/mysql-test/main/join_nested_jcl6.result b/mysql-test/main/join_nested_jcl6.result
index 26081382368..451accd7b1c 100644
--- a/mysql-test/main/join_nested_jcl6.result
+++ b/mysql-test/main/join_nested_jcl6.result
@@ -973,13 +973,13 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE t0 ALL NULL NULL NULL NULL 3 100.00 Using where
1 SIMPLE t1 hash_ALL NULL #hash#$hj 5 test.t0.b 3 100.00 Using where; Using join buffer (flat, BNLH join)
1 SIMPLE t9 ALL NULL NULL NULL NULL 3 100.00 Using where; Using join buffer (incremental, BNL join)
-1 SIMPLE t2 ALL NULL NULL NULL NULL 8 100.00 Using where; Using join buffer (incremental, BNL join)
-1 SIMPLE t3 ALL NULL NULL NULL NULL 2 100.00 Using where; Using join buffer (incremental, BNL join)
-1 SIMPLE t4 ref idx_b idx_b 5 test.t2.b 2 100.00 Using where; Using join buffer (incremental, BKA join); Key-ordered Rowid-ordered scan
1 SIMPLE t5 ALL idx_b NULL NULL NULL 7 100.00 Using where; Using join buffer (incremental, BNL join)
1 SIMPLE t7 hash_ALL NULL #hash#$hj 5 test.t5.b 2 100.00 Using where; Using join buffer (incremental, BNLH join)
1 SIMPLE t6 ALL NULL NULL NULL NULL 3 100.00 Using where; Using join buffer (incremental, BNL join)
1 SIMPLE t8 hash_ALL NULL #hash#$hj 5 test.t5.b 2 100.00 Using where; Using join buffer (incremental, BNLH join)
+1 SIMPLE t2 ALL NULL NULL NULL NULL 8 100.00 Using where; Using join buffer (incremental, BNL join)
+1 SIMPLE t3 ALL NULL NULL NULL NULL 2 100.00 Using where; Using join buffer (incremental, BNL join)
+1 SIMPLE t4 ref idx_b idx_b 5 test.t2.b 2 100.00 Using where; Using join buffer (incremental, BKA join); Key-ordered Rowid-ordered scan
Warnings:
Note 1003 select `test`.`t0`.`a` AS `a`,`test`.`t0`.`b` AS `b`,`test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t4`.`a` AS `a`,`test`.`t4`.`b` AS `b`,`test`.`t5`.`a` AS `a`,`test`.`t5`.`b` AS `b`,`test`.`t6`.`a` AS `a`,`test`.`t6`.`b` AS `b`,`test`.`t7`.`a` AS `a`,`test`.`t7`.`b` AS `b`,`test`.`t8`.`a` AS `a`,`test`.`t8`.`b` AS `b`,`test`.`t9`.`a` AS `a`,`test`.`t9`.`b` AS `b` from `test`.`t0` join `test`.`t1` left join (`test`.`t2` left join (`test`.`t3` join `test`.`t4`) on(`test`.`t3`.`a` = 1 and `test`.`t4`.`b` = `test`.`t2`.`b` and `test`.`t2`.`a` > 0 and `test`.`t4`.`a` > 0 and `test`.`t2`.`b` is not null) join `test`.`t5` left join (`test`.`t6` join `test`.`t7` left join `test`.`t8` on(`test`.`t8`.`b` = `test`.`t5`.`b` and `test`.`t6`.`b` < 10 and `test`.`t5`.`b` is not null)) on(`test`.`t7`.`b` = `test`.`t5`.`b` and `test`.`t6`.`b` >= 2 and `test`.`t5`.`a` > 0 and `test`.`t5`.`b` is not null)) on((`test`.`t3`.`b` = 2 or `test`.`t3`.`c` is null) and (`test`.`t6`.`b` = 2 or `test`.`t6`.`c` is null) and (`test`.`t5`.`b` = `test`.`t0`.`b` or `test`.`t3`.`c` is null or `test`.`t6`.`c` is null or `test`.`t8`.`c` is null) and `test`.`t1`.`a` <> 2) join `test`.`t9` where `test`.`t0`.`a` = 1 and `test`.`t1`.`b` = `test`.`t0`.`b` and `test`.`t9`.`a` = 1 and (`test`.`t2`.`a` >= 4 or `test`.`t2`.`c` is null) and (`test`.`t3`.`a` < 5 or `test`.`t3`.`c` is null) and (`test`.`t4`.`b` = `test`.`t3`.`b` or `test`.`t3`.`c` is null or `test`.`t4`.`c` is null) and (`test`.`t5`.`a` >= 2 or `test`.`t5`.`c` is null) and (`test`.`t6`.`a` >= 4 or `test`.`t6`.`c` is null) and (`test`.`t7`.`a` <= 2 or `test`.`t7`.`c` is null) and (`test`.`t8`.`a` < 1 or `test`.`t8`.`c` is null) and (`test`.`t8`.`b` = `test`.`t9`.`b` or `test`.`t8`.`c` is null)
INSERT INTO t8 VALUES (-3,12,0), (-1,14,0), (-5,15,0), (-1,11,0), (-4,13,0);
@@ -1023,13 +1023,13 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE t0 ALL NULL NULL NULL NULL 3 100.00 Using where
1 SIMPLE t1 hash_ALL NULL #hash#$hj 5 test.t0.b 3 100.00 Using where; Using join buffer (flat, BNLH join)
1 SIMPLE t9 ALL NULL NULL NULL NULL 3 100.00 Using where; Using join buffer (incremental, BNL join)
-1 SIMPLE t2 ALL NULL NULL NULL NULL 8 100.00 Using where; Using join buffer (incremental, BNL join)
-1 SIMPLE t3 ALL NULL NULL NULL NULL 2 100.00 Using where; Using join buffer (incremental, BNL join)
-1 SIMPLE t4 ref idx_b idx_b 5 test.t2.b 2 100.00 Using where; Using join buffer (incremental, BKA join); Key-ordered Rowid-ordered scan
1 SIMPLE t5 ALL idx_b NULL NULL NULL 7 100.00 Using where; Using join buffer (incremental, BNL join)
1 SIMPLE t7 hash_ALL NULL #hash#$hj 5 test.t5.b 2 100.00 Using where; Using join buffer (incremental, BNLH join)
1 SIMPLE t6 ALL NULL NULL NULL NULL 3 100.00 Using where; Using join buffer (incremental, BNL join)
1 SIMPLE t8 ref idx_b idx_b 5 test.t5.b 2 100.00 Using where; Using join buffer (incremental, BKA join); Key-ordered Rowid-ordered scan
+1 SIMPLE t2 ALL NULL NULL NULL NULL 8 100.00 Using where; Using join buffer (incremental, BNL join)
+1 SIMPLE t3 ALL NULL NULL NULL NULL 2 100.00 Using where; Using join buffer (incremental, BNL join)
+1 SIMPLE t4 ref idx_b idx_b 5 test.t2.b 2 100.00 Using where; Using join buffer (incremental, BKA join); Key-ordered Rowid-ordered scan
Warnings:
Note 1003 select `test`.`t0`.`a` AS `a`,`test`.`t0`.`b` AS `b`,`test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t4`.`a` AS `a`,`test`.`t4`.`b` AS `b`,`test`.`t5`.`a` AS `a`,`test`.`t5`.`b` AS `b`,`test`.`t6`.`a` AS `a`,`test`.`t6`.`b` AS `b`,`test`.`t7`.`a` AS `a`,`test`.`t7`.`b` AS `b`,`test`.`t8`.`a` AS `a`,`test`.`t8`.`b` AS `b`,`test`.`t9`.`a` AS `a`,`test`.`t9`.`b` AS `b` from `test`.`t0` join `test`.`t1` left join (`test`.`t2` left join (`test`.`t3` join `test`.`t4`) on(`test`.`t3`.`a` = 1 and `test`.`t4`.`b` = `test`.`t2`.`b` and `test`.`t2`.`a` > 0 and `test`.`t4`.`a` > 0 and `test`.`t2`.`b` is not null) join `test`.`t5` left join (`test`.`t6` join `test`.`t7` left join `test`.`t8` on(`test`.`t8`.`b` = `test`.`t5`.`b` and `test`.`t6`.`b` < 10 and `test`.`t8`.`a` >= 0 and `test`.`t5`.`b` is not null)) on(`test`.`t7`.`b` = `test`.`t5`.`b` and `test`.`t6`.`b` >= 2 and `test`.`t5`.`a` > 0 and `test`.`t5`.`b` is not null)) on((`test`.`t3`.`b` = 2 or `test`.`t3`.`c` is null) and (`test`.`t6`.`b` = 2 or `test`.`t6`.`c` is null) and (`test`.`t5`.`b` = `test`.`t0`.`b` or `test`.`t3`.`c` is null or `test`.`t6`.`c` is null or `test`.`t8`.`c` is null) and `test`.`t1`.`a` <> 2) join `test`.`t9` where `test`.`t0`.`a` = 1 and `test`.`t1`.`b` = `test`.`t0`.`b` and `test`.`t9`.`a` = 1 and (`test`.`t2`.`a` >= 4 or `test`.`t2`.`c` is null) and (`test`.`t3`.`a` < 5 or `test`.`t3`.`c` is null) and (`test`.`t4`.`b` = `test`.`t3`.`b` or `test`.`t3`.`c` is null or `test`.`t4`.`c` is null) and (`test`.`t5`.`a` >= 2 or `test`.`t5`.`c` is null) and (`test`.`t6`.`a` >= 4 or `test`.`t6`.`c` is null) and (`test`.`t7`.`a` <= 2 or `test`.`t7`.`c` is null) and (`test`.`t8`.`a` < 1 or `test`.`t8`.`c` is null) and (`test`.`t8`.`b` = `test`.`t9`.`b` or `test`.`t8`.`c` is null)
INSERT INTO t1 VALUES (-1,133,0), (-2,12,0), (-3,11,0), (-5,15,0);
@@ -1074,13 +1074,13 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE t0 ref idx_a idx_a 5 const 2 100.00
1 SIMPLE t9 ALL NULL NULL NULL NULL 3 100.00 Using where; Using join buffer (flat, BNL join)
1 SIMPLE t1 ALL idx_b NULL NULL NULL 7 100.00 Using where; Using join buffer (incremental, BNL join)
-1 SIMPLE t2 ALL NULL NULL NULL NULL 8 100.00 Using where; Using join buffer (incremental, BNL join)
-1 SIMPLE t3 ALL NULL NULL NULL NULL 2 100.00 Using where; Using join buffer (incremental, BNL join)
-1 SIMPLE t4 ref idx_b idx_b 5 test.t2.b 2 100.00 Using where; Using join buffer (incremental, BKA join); Key-ordered Rowid-ordered scan
1 SIMPLE t5 ALL idx_b NULL NULL NULL 7 100.00 Using where; Using join buffer (incremental, BNL join)
1 SIMPLE t7 hash_ALL NULL #hash#$hj 5 test.t5.b 2 100.00 Using where; Using join buffer (incremental, BNLH join)
1 SIMPLE t6 ALL NULL NULL NULL NULL 3 100.00 Using where; Using join buffer (incremental, BNL join)
1 SIMPLE t8 ref idx_b idx_b 5 test.t5.b 2 100.00 Using where; Using join buffer (incremental, BKA join); Key-ordered Rowid-ordered scan
+1 SIMPLE t2 ALL NULL NULL NULL NULL 8 100.00 Using where; Using join buffer (incremental, BNL join)
+1 SIMPLE t3 ALL NULL NULL NULL NULL 2 100.00 Using where; Using join buffer (incremental, BNL join)
+1 SIMPLE t4 ref idx_b idx_b 5 test.t2.b 2 100.00 Using where; Using join buffer (incremental, BKA join); Key-ordered Rowid-ordered scan
Warnings:
Note 1003 select `test`.`t0`.`a` AS `a`,`test`.`t0`.`b` AS `b`,`test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t4`.`a` AS `a`,`test`.`t4`.`b` AS `b`,`test`.`t5`.`a` AS `a`,`test`.`t5`.`b` AS `b`,`test`.`t6`.`a` AS `a`,`test`.`t6`.`b` AS `b`,`test`.`t7`.`a` AS `a`,`test`.`t7`.`b` AS `b`,`test`.`t8`.`a` AS `a`,`test`.`t8`.`b` AS `b`,`test`.`t9`.`a` AS `a`,`test`.`t9`.`b` AS `b` from `test`.`t0` join `test`.`t1` left join (`test`.`t2` left join (`test`.`t3` join `test`.`t4`) on(`test`.`t3`.`a` = 1 and `test`.`t4`.`b` = `test`.`t2`.`b` and `test`.`t2`.`b` is not null) join `test`.`t5` left join (`test`.`t6` join `test`.`t7` left join `test`.`t8` on(`test`.`t8`.`b` = `test`.`t5`.`b` and `test`.`t6`.`b` < 10 and `test`.`t5`.`b` is not null)) on(`test`.`t7`.`b` = `test`.`t5`.`b` and `test`.`t6`.`b` >= 2 and `test`.`t5`.`b` is not null)) on((`test`.`t3`.`b` = 2 or `test`.`t3`.`c` is null) and (`test`.`t6`.`b` = 2 or `test`.`t6`.`c` is null) and (`test`.`t5`.`b` = `test`.`t0`.`b` or `test`.`t3`.`c` is null or `test`.`t6`.`c` is null or `test`.`t8`.`c` is null) and `test`.`t1`.`a` <> 2 and `test`.`t1`.`a` > 0) join `test`.`t9` where `test`.`t0`.`a` = 1 and `test`.`t1`.`b` = `test`.`t0`.`b` and `test`.`t9`.`a` = 1 and (`test`.`t2`.`a` >= 4 or `test`.`t2`.`c` is null) and (`test`.`t3`.`a` < 5 or `test`.`t3`.`c` is null) and (`test`.`t4`.`b` = `test`.`t3`.`b` or `test`.`t3`.`c` is null or `test`.`t4`.`c` is null) and (`test`.`t5`.`a` >= 2 or `test`.`t5`.`c` is null) and (`test`.`t6`.`a` >= 4 or `test`.`t6`.`c` is null) and (`test`.`t7`.`a` <= 2 or `test`.`t7`.`c` is null) and (`test`.`t8`.`a` < 1 or `test`.`t8`.`c` is null) and (`test`.`t8`.`b` = `test`.`t9`.`b` or `test`.`t8`.`c` is null)
SELECT t0.a,t0.b,t1.a,t1.b,t2.a,t2.b,t3.a,t3.b,t4.a,t4.b,
@@ -1118,14 +1118,16 @@ t0.b=t1.b AND
(t8.b=t9.b OR t8.c IS NULL) AND
(t9.a=1);
a b a b a b a b a b a b a b a b a b a b
-1 2 3 2 4 2 1 2 4 2 2 2 6 2 2 2 0 2 1 2
+1 2 2 2 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 1
+1 2 2 2 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 2
1 2 3 2 4 2 1 2 3 2 2 2 6 2 2 2 0 2 1 2
1 2 3 2 4 2 1 2 3 2 3 1 6 2 1 1 NULL NULL 1 1
1 2 3 2 4 2 1 2 3 2 3 1 6 2 1 1 NULL NULL 1 2
-1 2 3 2 4 2 1 2 4 2 3 1 6 2 1 1 NULL NULL 1 1
-1 2 3 2 4 2 1 2 4 2 3 1 6 2 1 1 NULL NULL 1 2
1 2 3 2 4 2 1 2 3 2 3 3 NULL NULL NULL NULL NULL NULL 1 1
1 2 3 2 4 2 1 2 3 2 3 3 NULL NULL NULL NULL NULL NULL 1 2
+1 2 3 2 4 2 1 2 4 2 2 2 6 2 2 2 0 2 1 2
+1 2 3 2 4 2 1 2 4 2 3 1 6 2 1 1 NULL NULL 1 1
+1 2 3 2 4 2 1 2 4 2 3 1 6 2 1 1 NULL NULL 1 2
1 2 3 2 4 2 1 2 4 2 3 3 NULL NULL NULL NULL NULL NULL 1 1
1 2 3 2 4 2 1 2 4 2 3 3 NULL NULL NULL NULL NULL NULL 1 2
1 2 3 2 5 3 NULL NULL NULL NULL 2 2 6 2 2 2 0 2 1 2
@@ -1133,8 +1135,6 @@ a b a b a b a b a b a b a b a b a b a b
1 2 3 2 5 3 NULL NULL NULL NULL 3 1 6 2 1 1 NULL NULL 1 2
1 2 3 2 5 3 NULL NULL NULL NULL 3 3 NULL NULL NULL NULL NULL NULL 1 1
1 2 3 2 5 3 NULL NULL NULL NULL 3 3 NULL NULL NULL NULL NULL NULL 1 2
-1 2 2 2 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 1
-1 2 2 2 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 2
SELECT t2.a,t2.b
FROM t2;
a b
diff --git a/mysql-test/main/join_outer.result b/mysql-test/main/join_outer.result
index fde7689b142..d6ab8c7dc9c 100644
--- a/mysql-test/main/join_outer.result
+++ b/mysql-test/main/join_outer.result
@@ -2010,10 +2010,10 @@ EXPLAIN EXTENDED
SELECT * FROM (t2 LEFT JOIN t1 ON t1.b = t2.b) JOIN t3 ON t1.b = t3.b;
id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00
-1 SIMPLE t3 hash_ALL PRIMARY #hash#PRIMARY 4 test.t1.b 10 10.00 Using join buffer (flat, BNLH join)
-1 SIMPLE t2 hash_index PRIMARY #hash#PRIMARY:PRIMARY 4:4 test.t1.b 27 3.70 Using index; Using join buffer (incremental, BNLH join)
+1 SIMPLE t2 hash_index PRIMARY #hash#PRIMARY:PRIMARY 4:4 test.t1.b 27 3.70 Using index; Using join buffer (flat, BNLH join)
+1 SIMPLE t3 hash_ALL PRIMARY #hash#PRIMARY 4 test.t1.b 10 10.00 Using join buffer (incremental, BNLH join)
Warnings:
-Note 1003 select `test`.`t2`.`b` AS `b`,`test`.`t1`.`b` AS `b`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b` from `test`.`t2` join `test`.`t1` join `test`.`t3` where `test`.`t3`.`b` = `test`.`t1`.`b` and `test`.`t2`.`b` = `test`.`t1`.`b`
+Note 1003 select `test`.`t2`.`b` AS `b`,`test`.`t1`.`b` AS `b`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b` from `test`.`t2` join `test`.`t1` join `test`.`t3` where `test`.`t2`.`b` = `test`.`t1`.`b` and `test`.`t3`.`b` = `test`.`t1`.`b`
PREPARE stmt FROM
'SELECT * FROM (t2 LEFT JOIN t1 ON t1.b = t2.b) JOIN t3 ON t1.b = t3.b';
EXECUTE stmt;
@@ -2645,9 +2645,9 @@ WHERE t1.timestamp < 1294664900039 AND t1.timestamp > 1294644616416 AND
t2.REVTYPE=2;
id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE t2 ALL NULL NULL NULL NULL 42 100.00 Using where
+1 SIMPLE t1 eq_ref PRIMARY PRIMARY 4 test.t2.REV 1 100.00 Using where
1 SIMPLE t3 ref PRIMARY PRIMARY 4 test.t2.profile_id 1 100.00 Using where
1 SIMPLE t4 ref PRIMARY PRIMARY 4 test.t3.person_id 1 100.00 Using index
-1 SIMPLE t1 eq_ref PRIMARY PRIMARY 4 test.t2.REV 1 100.00 Using where
Warnings:
Note 1003 select `test`.`t1`.`id` AS `id`,`test`.`t1`.`timestamp` AS `timestamp`,`test`.`t1`.`modifiedBy` AS `modifiedBy`,`test`.`t2`.`id` AS `id`,`test`.`t2`.`REV` AS `REV`,`test`.`t2`.`REVTYPE` AS `REVTYPE`,`test`.`t2`.`profile_id` AS `profile_id`,`test`.`t3`.`id` AS `id`,`test`.`t3`.`REV` AS `REV`,`test`.`t3`.`person_id` AS `person_id`,`test`.`t4`.`id` AS `id`,`test`.`t4`.`REV` AS `REV` from `test`.`t1` join `test`.`t2` join `test`.`t3` join `test`.`t4` where `test`.`t2`.`REVTYPE` = 2 and `test`.`t4`.`id` = `test`.`t3`.`person_id` and `test`.`t3`.`id` = `test`.`t2`.`profile_id` and `test`.`t1`.`id` = `test`.`t2`.`REV` and `test`.`t1`.`timestamp` < 1294664900039 and `test`.`t1`.`timestamp` > 1294644616416
SELECT *
@@ -2670,9 +2670,9 @@ WHERE t1.timestamp < 1294664900039 AND t1.timestamp > 1294644616416
AND t2.REVTYPE=2;
id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE t2 ALL NULL NULL NULL NULL 42 100.00 Using where
+1 SIMPLE t1 eq_ref PRIMARY PRIMARY 4 test.t2.REV 1 100.00 Using where
1 SIMPLE t3 ref PRIMARY PRIMARY 4 test.t2.profile_id 1 100.00 Using where
1 SIMPLE t4 ref PRIMARY PRIMARY 4 test.t3.person_id 1 100.00 Using index
-1 SIMPLE t1 eq_ref PRIMARY PRIMARY 4 test.t2.REV 1 100.00 Using where
Warnings:
Note 1003 select `test`.`t1`.`id` AS `id`,`test`.`t1`.`timestamp` AS `timestamp`,`test`.`t1`.`modifiedBy` AS `modifiedBy`,`test`.`t2`.`id` AS `id`,`test`.`t2`.`REV` AS `REV`,`test`.`t2`.`REVTYPE` AS `REVTYPE`,`test`.`t2`.`profile_id` AS `profile_id`,`test`.`t3`.`id` AS `id`,`test`.`t3`.`REV` AS `REV`,`test`.`t3`.`person_id` AS `person_id`,`test`.`t4`.`id` AS `id`,`test`.`t4`.`REV` AS `REV` from `test`.`t4` join `test`.`t3` join `test`.`t2` join `test`.`t1` where `test`.`t2`.`REVTYPE` = 2 and `test`.`t1`.`id` = `test`.`t2`.`REV` and `test`.`t3`.`id` = `test`.`t2`.`profile_id` and `test`.`t4`.`id` = `test`.`t3`.`person_id` and `test`.`t1`.`timestamp` < 1294664900039 and `test`.`t1`.`timestamp` > 1294644616416
SELECT *
diff --git a/mysql-test/main/join_outer_innodb.result b/mysql-test/main/join_outer_innodb.result
index 6f87048cdc1..809a980576d 100644
--- a/mysql-test/main/join_outer_innodb.result
+++ b/mysql-test/main/join_outer_innodb.result
@@ -437,15 +437,15 @@ id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 ALL a4,a6,a5,a7 NULL NULL NULL 3 Using where
1 SIMPLE t2 ref PRIMARY PRIMARY 4 test.t1.a1 1 Using index
1 SIMPLE t3 eq_ref PRIMARY PRIMARY 4 test.t2.b2 1 Using where; Using index
+1 SIMPLE t8 eq_ref PRIMARY PRIMARY 1 test.t1.a4 1 Using index
1 SIMPLE t4 eq_ref PRIMARY PRIMARY 4 test.t1.a2 1 Using index
1 SIMPLE t5 eq_ref PRIMARY PRIMARY 4 test.t4.d1 1 Using where
1 SIMPLE t6 eq_ref PRIMARY PRIMARY 4 test.t1.a3 1 Using where; Using index
-1 SIMPLE t8 eq_ref PRIMARY PRIMARY 1 test.t1.a4 1 Using index
1 SIMPLE t7 eq_ref PRIMARY PRIMARY 1 test.t1.a7 1
-1 SIMPLE t9 ref PRIMARY PRIMARY 1 test.t1.a4 1
1 SIMPLE t11 eq_ref PRIMARY PRIMARY 4 test.t1.a5 1
1 SIMPLE t12 eq_ref PRIMARY PRIMARY 4 test.t11.k3 1 Using where
1 SIMPLE l2 eq_ref PRIMARY PRIMARY 4 test.t11.k4 1 Using where
+1 SIMPLE t9 ref PRIMARY PRIMARY 1 test.t1.a4 1
1 SIMPLE t13 ref PRIMARY,m3 m3 8 const,test.t1.a1 1 Using index
1 SIMPLE l4 eq_ref PRIMARY PRIMARY 4 test.t13.m2 1 Using where; Using index
1 SIMPLE m2 ref PRIMARY,m3 m3 8 const,test.t1.a1 1 Using index
@@ -459,15 +459,15 @@ id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 ALL a4,a6,a5,a7 NULL NULL NULL 3 Using where
1 SIMPLE t2 ref PRIMARY PRIMARY 4 test.t1.a1 1 Using index
1 SIMPLE t3 eq_ref PRIMARY PRIMARY 4 test.t2.b2 1 Using where; Using index
+1 SIMPLE t8 eq_ref PRIMARY PRIMARY 1 test.t1.a4 1 Using index
1 SIMPLE t4 eq_ref PRIMARY PRIMARY 4 test.t1.a2 1 Using index
1 SIMPLE t5 eq_ref PRIMARY PRIMARY 4 test.t4.d1 1 Using where
1 SIMPLE t6 eq_ref PRIMARY PRIMARY 4 test.t1.a3 1 Using where; Using index
-1 SIMPLE t8 eq_ref PRIMARY PRIMARY 1 test.t1.a4 1 Using index
1 SIMPLE t7 eq_ref PRIMARY PRIMARY 1 test.t1.a7 1
-1 SIMPLE t9 ref PRIMARY PRIMARY 1 test.t1.a4 1
1 SIMPLE t11 eq_ref PRIMARY PRIMARY 4 test.t1.a5 1
1 SIMPLE t12 eq_ref PRIMARY PRIMARY 4 test.t11.k3 1 Using where
1 SIMPLE l2 eq_ref PRIMARY PRIMARY 4 test.t11.k4 1 Using where
+1 SIMPLE t9 ref PRIMARY PRIMARY 1 test.t1.a4 1
1 SIMPLE t13 ref PRIMARY,m3 m3 8 const,test.t1.a1 1 Using index
1 SIMPLE l4 eq_ref PRIMARY PRIMARY 4 test.t13.m2 1 Using where; Using index
1 SIMPLE m2 ref PRIMARY,m3 m3 8 const,test.t1.a1 1 Using index
diff --git a/mysql-test/main/join_outer_jcl6.result b/mysql-test/main/join_outer_jcl6.result
index cd13a4c48a6..8dcc41638bb 100644
--- a/mysql-test/main/join_outer_jcl6.result
+++ b/mysql-test/main/join_outer_jcl6.result
@@ -2017,10 +2017,10 @@ EXPLAIN EXTENDED
SELECT * FROM (t2 LEFT JOIN t1 ON t1.b = t2.b) JOIN t3 ON t1.b = t3.b;
id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00
-1 SIMPLE t3 hash_ALL PRIMARY #hash#PRIMARY 4 test.t1.b 10 10.00 Using join buffer (flat, BNLH join)
-1 SIMPLE t2 hash_index PRIMARY #hash#PRIMARY:PRIMARY 4:4 test.t1.b 27 3.70 Using index; Using join buffer (incremental, BNLH join)
+1 SIMPLE t2 hash_index PRIMARY #hash#PRIMARY:PRIMARY 4:4 test.t1.b 27 3.70 Using index; Using join buffer (flat, BNLH join)
+1 SIMPLE t3 hash_ALL PRIMARY #hash#PRIMARY 4 test.t1.b 10 10.00 Using join buffer (incremental, BNLH join)
Warnings:
-Note 1003 select `test`.`t2`.`b` AS `b`,`test`.`t1`.`b` AS `b`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b` from `test`.`t2` join `test`.`t1` join `test`.`t3` where `test`.`t3`.`b` = `test`.`t1`.`b` and `test`.`t2`.`b` = `test`.`t1`.`b`
+Note 1003 select `test`.`t2`.`b` AS `b`,`test`.`t1`.`b` AS `b`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b` from `test`.`t2` join `test`.`t1` join `test`.`t3` where `test`.`t2`.`b` = `test`.`t1`.`b` and `test`.`t3`.`b` = `test`.`t1`.`b`
PREPARE stmt FROM
'SELECT * FROM (t2 LEFT JOIN t1 ON t1.b = t2.b) JOIN t3 ON t1.b = t3.b';
EXECUTE stmt;
@@ -2652,9 +2652,9 @@ WHERE t1.timestamp < 1294664900039 AND t1.timestamp > 1294644616416 AND
t2.REVTYPE=2;
id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE t2 ALL NULL NULL NULL NULL 42 100.00 Using where
-1 SIMPLE t3 ref PRIMARY PRIMARY 4 test.t2.profile_id 1 100.00 Using where; Using join buffer (flat, BKA join); Key-ordered Rowid-ordered scan
-1 SIMPLE t4 ref PRIMARY PRIMARY 4 test.t3.person_id 1 100.00 Using index
1 SIMPLE t1 eq_ref PRIMARY PRIMARY 4 test.t2.REV 1 100.00 Using where; Using join buffer (flat, BKA join); Key-ordered Rowid-ordered scan
+1 SIMPLE t3 ref PRIMARY PRIMARY 4 test.t2.profile_id 1 100.00 Using where; Using join buffer (incremental, BKA join); Key-ordered Rowid-ordered scan
+1 SIMPLE t4 ref PRIMARY PRIMARY 4 test.t3.person_id 1 100.00 Using index
Warnings:
Note 1003 select `test`.`t1`.`id` AS `id`,`test`.`t1`.`timestamp` AS `timestamp`,`test`.`t1`.`modifiedBy` AS `modifiedBy`,`test`.`t2`.`id` AS `id`,`test`.`t2`.`REV` AS `REV`,`test`.`t2`.`REVTYPE` AS `REVTYPE`,`test`.`t2`.`profile_id` AS `profile_id`,`test`.`t3`.`id` AS `id`,`test`.`t3`.`REV` AS `REV`,`test`.`t3`.`person_id` AS `person_id`,`test`.`t4`.`id` AS `id`,`test`.`t4`.`REV` AS `REV` from `test`.`t1` join `test`.`t2` join `test`.`t3` join `test`.`t4` where `test`.`t2`.`REVTYPE` = 2 and `test`.`t4`.`id` = `test`.`t3`.`person_id` and `test`.`t3`.`id` = `test`.`t2`.`profile_id` and `test`.`t1`.`id` = `test`.`t2`.`REV` and `test`.`t1`.`timestamp` < 1294664900039 and `test`.`t1`.`timestamp` > 1294644616416
SELECT *
@@ -2677,9 +2677,9 @@ WHERE t1.timestamp < 1294664900039 AND t1.timestamp > 1294644616416
AND t2.REVTYPE=2;
id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE t2 ALL NULL NULL NULL NULL 42 100.00 Using where
-1 SIMPLE t3 ref PRIMARY PRIMARY 4 test.t2.profile_id 1 100.00 Using where; Using join buffer (flat, BKA join); Key-ordered Rowid-ordered scan
-1 SIMPLE t4 ref PRIMARY PRIMARY 4 test.t3.person_id 1 100.00 Using index
1 SIMPLE t1 eq_ref PRIMARY PRIMARY 4 test.t2.REV 1 100.00 Using where; Using join buffer (flat, BKA join); Key-ordered Rowid-ordered scan
+1 SIMPLE t3 ref PRIMARY PRIMARY 4 test.t2.profile_id 1 100.00 Using where; Using join buffer (incremental, BKA join); Key-ordered Rowid-ordered scan
+1 SIMPLE t4 ref PRIMARY PRIMARY 4 test.t3.person_id 1 100.00 Using index
Warnings:
Note 1003 select `test`.`t1`.`id` AS `id`,`test`.`t1`.`timestamp` AS `timestamp`,`test`.`t1`.`modifiedBy` AS `modifiedBy`,`test`.`t2`.`id` AS `id`,`test`.`t2`.`REV` AS `REV`,`test`.`t2`.`REVTYPE` AS `REVTYPE`,`test`.`t2`.`profile_id` AS `profile_id`,`test`.`t3`.`id` AS `id`,`test`.`t3`.`REV` AS `REV`,`test`.`t3`.`person_id` AS `person_id`,`test`.`t4`.`id` AS `id`,`test`.`t4`.`REV` AS `REV` from `test`.`t4` join `test`.`t3` join `test`.`t2` join `test`.`t1` where `test`.`t2`.`REVTYPE` = 2 and `test`.`t1`.`id` = `test`.`t2`.`REV` and `test`.`t3`.`id` = `test`.`t2`.`profile_id` and `test`.`t4`.`id` = `test`.`t3`.`person_id` and `test`.`t1`.`timestamp` < 1294664900039 and `test`.`t1`.`timestamp` > 1294644616416
SELECT *
diff --git a/mysql-test/main/mysql_upgrade-6984.result b/mysql-test/main/mysql_upgrade-6984.result
index a0ea4607b24..301fdfc3bfd 100644
--- a/mysql-test/main/mysql_upgrade-6984.result
+++ b/mysql-test/main/mysql_upgrade-6984.result
@@ -168,3 +168,4 @@ connect con1,localhost,root,foo,,,;
update mysql.global_priv set priv=json_compact(json_remove(priv, '$.plugin', '$.authentication_string')) where user='root';
flush privileges;
set global event_scheduler=OFF;
+# restart
diff --git a/mysql-test/main/mysql_upgrade-6984.test b/mysql-test/main/mysql_upgrade-6984.test
index 48a06bbd542..034310e036f 100644
--- a/mysql-test/main/mysql_upgrade-6984.test
+++ b/mysql-test/main/mysql_upgrade-6984.test
@@ -26,3 +26,7 @@ set global event_scheduler=OFF;
let MYSQLD_DATADIR= `select @@datadir`;
--remove_file $MYSQLD_DATADIR/mysql_upgrade_info
+
+# --skip-grant-tables state may changed during the test. Need to restart the server
+# to restore the --skip-grant-tables state. Otherwise MTR's internal check will fail
+--source include/restart_mysqld.inc
diff --git a/mysql-test/main/mysql_upgrade.opt b/mysql-test/main/mysql_upgrade.opt
new file mode 100644
index 00000000000..b0a968b1bfb
--- /dev/null
+++ b/mysql-test/main/mysql_upgrade.opt
@@ -0,0 +1 @@
+--loose-skip-ssl
diff --git a/mysql-test/main/mysqlbinlog-innodb.result b/mysql-test/main/mysqlbinlog-innodb.result
index 566563bff76..f8cb3ca3378 100644
--- a/mysql-test/main/mysqlbinlog-innodb.result
+++ b/mysql-test/main/mysqlbinlog-innodb.result
@@ -29,7 +29,7 @@ START TRANSACTION
use `test`/*!*/;
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=999999999/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=#/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
@@ -60,7 +60,7 @@ START TRANSACTION
use `foo`/*!*/;
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=999999999/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=#/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
diff --git a/mysql-test/main/mysqlbinlog.result b/mysql-test/main/mysqlbinlog.result
index 1ca22f42277..b3eb4178795 100644
--- a/mysql-test/main/mysqlbinlog.result
+++ b/mysql-test/main/mysqlbinlog.result
@@ -22,7 +22,7 @@ ROLLBACK/*!*/;
use `test`/*!*/;
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=999999999/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=#/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
@@ -102,7 +102,7 @@ START TRANSACTION
use `test`/*!*/;
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=999999999/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=#/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
@@ -138,7 +138,7 @@ START TRANSACTION
/*!*/;
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=999999999/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=#/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
@@ -189,7 +189,7 @@ START TRANSACTION
use `test`/*!*/;
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=999999999/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=#/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
@@ -216,7 +216,7 @@ ROLLBACK/*!*/;
use `test`/*!*/;
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=999999999/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=#/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
@@ -296,7 +296,7 @@ START TRANSACTION
use `test`/*!*/;
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=999999999/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=#/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
@@ -332,7 +332,7 @@ START TRANSACTION
/*!*/;
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=999999999/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=#/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
@@ -383,7 +383,7 @@ START TRANSACTION
use `test`/*!*/;
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=999999999/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=#/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
@@ -492,7 +492,7 @@ DELIMITER /*!*/;
use `test`/*!*/;
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=999999999/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=#/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
@@ -544,7 +544,7 @@ DELIMITER /*!*/;
use `test`/*!*/;
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=999999999/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=#/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
diff --git a/mysql-test/main/mysqlbinlog_row_compressed.result b/mysql-test/main/mysqlbinlog_row_compressed.result
index 9ea11c7a6d3..3f803086927 100644
--- a/mysql-test/main/mysqlbinlog_row_compressed.result
+++ b/mysql-test/main/mysqlbinlog_row_compressed.result
@@ -33,7 +33,7 @@ ROLLBACK/*!*/;
use `test`/*!*/;
SET TIMESTAMP=X/*!*/;
SET @@session.pseudo_thread_id=5/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=#/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
diff --git a/mysql-test/main/mysqlbinlog_row_minimal.result b/mysql-test/main/mysqlbinlog_row_minimal.result
index cd59d24f007..028f745bb05 100644
--- a/mysql-test/main/mysqlbinlog_row_minimal.result
+++ b/mysql-test/main/mysqlbinlog_row_minimal.result
@@ -31,7 +31,7 @@ ROLLBACK/*!*/;
use `test`/*!*/;
SET TIMESTAMP=X/*!*/;
SET @@session.pseudo_thread_id=5/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=#/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
@@ -397,7 +397,7 @@ START TRANSACTION
#<date> server id 1 end_log_pos END_LOG_POS CRC32 XXX Query thread_id=TID exec_time=x error_code=0 xid=<xid>
SET TIMESTAMP=X/*!*/;
SET @@session.pseudo_thread_id=TID/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=#/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
diff --git a/mysql-test/main/mysqlbinlog_stmt_compressed.result b/mysql-test/main/mysqlbinlog_stmt_compressed.result
index bb1894099a1..7fbbc10545b 100644
--- a/mysql-test/main/mysqlbinlog_stmt_compressed.result
+++ b/mysql-test/main/mysqlbinlog_stmt_compressed.result
@@ -33,7 +33,7 @@ ROLLBACK/*!*/;
use `test`/*!*/;
SET TIMESTAMP=X/*!*/;
SET @@session.pseudo_thread_id=5/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=#/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
diff --git a/mysql-test/main/mysqld--help.result b/mysql-test/main/mysqld--help.result
index 600d7da4157..4f872167ef9 100644
--- a/mysql-test/main/mysqld--help.result
+++ b/mysql-test/main/mysqld--help.result
@@ -8,10 +8,11 @@ The following specify which files/extra groups are read (specified before remain
--defaults-group-suffix=# Additionally read default groups with # appended as a suffix.
--allow-suspicious-udfs
- Allows use of UDFs consisting of only one symbol xxx()
- without corresponding xxx_init() or xxx_deinit(). That
- also means that one can load any function from any
- library, for example exit() from libc.so
+ Allows use of user-defined functions (UDFs) consisting of
+ only one symbol xxx() without corresponding xxx_init() or
+ xxx_deinit(). That also means that one can load any
+ function from any library, for example exit() from
+ libc.so
--alter-algorithm[=name]
Specify the alter table algorithm. One of: DEFAULT, COPY,
INPLACE, NOCOPY, INSTANT
@@ -287,6 +288,7 @@ The following specify which files/extra groups are read (specified before remain
columns as NULL with DEFAULT NULL attribute, Without this
option, TIMESTAMP columns are NOT NULL and have implicit
DEFAULT clauses.
+ (Defaults to on; use --skip-explicit-defaults-for-timestamp to disable.)
--external-locking Use system (external) locking (disabled by default).
With this option enabled you can run myisamchk to test
(not repair) tables while the MySQL server is running.
@@ -702,6 +704,10 @@ The following specify which files/extra groups are read (specified before remain
max_connections*5 or max_connections + table_cache*2
(whichever is larger) number of file descriptors
(Automatically configured unless set explicitly)
+ --optimizer-extra-pruning-depth=#
+ If the optimizer needs to enumerate join prefix of this
+ size or larger, then it will try agressively prune away
+ the search space.
--optimizer-max-sel-arg-weight=#
The maximum weight of the SEL_ARG graph. Set to 0 for no
limit
@@ -709,8 +715,9 @@ The following specify which files/extra groups are read (specified before remain
Controls the heuristic(s) applied during query
optimization to prune less-promising partial plans from
the optimizer search space. Meaning: 0 - do not apply any
- heuristic, thus perform exhaustive search; 1 - prune
- plans based on number of retrieved rows
+ heuristic, thus perform exhaustive search: 1 - prune
+ plans based on cost and number of retrieved rows eq_ref:
+ 2 - prune also if we find an eq_ref chain
--optimizer-search-depth=#
Maximum depth of search performed by the query optimizer.
Values larger than the number of relations in a query
@@ -1220,6 +1227,11 @@ The following specify which files/extra groups are read (specified before remain
--slave-max-allowed-packet=#
The maximum packet length to sent successfully from the
master to slave.
+ --slave-max-statement-time=#
+ A query that has taken more than slave_max_statement_time
+ seconds to run on the slave will be aborted. The argument
+ will be treated as a decimal value with microsecond
+ precision. A value of 0 (default) means no timeout
--slave-net-timeout=#
Number of seconds to wait for more data from any
master/slave connection before aborting the read
@@ -1539,7 +1551,7 @@ eq-range-index-dive-limit 200
event-scheduler OFF
expensive-subquery-limit 100
expire-logs-days 0
-explicit-defaults-for-timestamp FALSE
+explicit-defaults-for-timestamp TRUE
external-locking FALSE
extra-max-connections 1
extra-port 0
@@ -1666,8 +1678,9 @@ old-alter-table DEFAULT
old-mode UTF8_IS_UTF8MB3
old-passwords FALSE
old-style-user-limits FALSE
+optimizer-extra-pruning-depth 8
optimizer-max-sel-arg-weight 32000
-optimizer-prune-level 1
+optimizer-prune-level 2
optimizer-search-depth 62
optimizer-selectivity-sampling-limit 100
optimizer-switch index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=on,derived_merge=on,derived_with_keys=on,firstmatch=on,loosescan=on,materialization=on,in_to_exists=on,semijoin=on,partial_match_rowid_merge=on,partial_match_table_scan=on,subquery_cache=on,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=on,semijoin_with_cache=on,join_cache_incremental=on,join_cache_hashed=on,join_cache_bka=on,optimize_join_buffer_size=on,table_elimination=on,extended_keys=on,exists_to_in=on,orderby_uses_equalities=on,condition_pushdown_for_derived=on,split_materialized=on,condition_pushdown_for_subquery=on,rowid_filter=on,condition_pushdown_from_having=on
@@ -1797,6 +1810,7 @@ slave-ddl-exec-mode IDEMPOTENT
slave-domain-parallel-threads 0
slave-exec-mode STRICT
slave-max-allowed-packet 1073741824
+slave-max-statement-time 0
slave-net-timeout 60
slave-parallel-max-queued 131072
slave-parallel-mode conservative
diff --git a/mysql-test/main/mysqld--help.test b/mysql-test/main/mysqld--help.test
index 42f551974d9..9bf53c7200b 100644
--- a/mysql-test/main/mysqld--help.test
+++ b/mysql-test/main/mysqld--help.test
@@ -39,7 +39,8 @@ perl;
query-response-time metadata-lock-info locales unix-socket
wsrep file-key-management cracklib-password-check user-variables
provider-bzip2 provider-lzma provider-lzo
- thread-pool-groups thread-pool-queues thread-pool-stats thread-pool-waits/;
+ thread-pool-groups thread-pool-queues thread-pool-stats
+ thread-pool-waits hashicorp provider/;
# And substitute the content some environment variables with their
# names:
diff --git a/mysql-test/main/mysqldump.result b/mysql-test/main/mysqldump.result
index 0a84b89b687..3f8d1c404d7 100644
--- a/mysql-test/main/mysqldump.result
+++ b/mysql-test/main/mysqldump.result
@@ -3813,7 +3813,7 @@ CREATE TEMPORARY TABLE `TABLES` (
`CREATE_TIME` datetime,
`UPDATE_TIME` datetime,
`CHECK_TIME` datetime,
- `TABLE_COLLATION` varchar(32),
+ `TABLE_COLLATION` varchar(64),
`CHECKSUM` bigint(21) unsigned,
`CREATE_OPTIONS` varchar(2048),
`TABLE_COMMENT` varchar(2048) NOT NULL,
diff --git a/mysql-test/main/null.result b/mysql-test/main/null.result
index 755108be267..2653140dfc3 100644
--- a/mysql-test/main/null.result
+++ b/mysql-test/main/null.result
@@ -1,4 +1,6 @@
-drop table if exists t1, t2;
+#
+# Testing of NULL in a lot of different places
+#
select null,\N,isnull(null),isnull(1/0),isnull(1/0 = null),ifnull(null,1),ifnull(null,"TRUE"),ifnull("TRUE","ERROR"),1/0 is null,1 is not null;
NULL NULL isnull(null) isnull(1/0) isnull(1/0 = null) ifnull(null,1) ifnull(null,"TRUE") ifnull("TRUE","ERROR") 1/0 is null 1 is not null
NULL NULL 1 1 1 1 TRUE TRUE 1 1
@@ -62,6 +64,9 @@ insert into t1 values (null);
select * from t1 where x != 0;
x
drop table t1;
+#
+# Test problem med index on NULL columns and testing with =NULL;
+#
CREATE TABLE t1 (
indexed_field int default NULL,
KEY indexed_field (indexed_field)
@@ -78,6 +83,9 @@ indexed_field
NULL
NULL
DROP TABLE t1;
+#
+# Testing of IFNULL
+#
create table t1 (a int, b int) engine=myisam;
insert into t1 values(20,null);
select t2.b, ifnull(t2.b,"this is null") from t1 as t2 left join t1 as t3 on
@@ -95,6 +103,9 @@ b ifnull(t2.b,"this is null")
NULL this is null
NULL this is null
drop table t1;
+#
+# Test inserting and updating with NULL
+#
CREATE TABLE t1 (a varchar(16) NOT NULL default '', b smallint(6) NOT NULL default 0, c datetime NOT NULL default '0000-00-00 00:00:00', d smallint(6) NOT NULL default 0);
INSERT IGNORE INTO t1 SET a = "", d= "2003-01-14 03:54:55";
Warnings:
@@ -149,6 +160,10 @@ a b c d
0 0000-00-00 00:00:00 0
0 0000-00-00 00:00:00 0
drop table t1;
+#
+# Test to check elimination of IS NULL predicate for a non-nullable attribute
+# (bug #1990)
+#
create table t1 (a int not null, b int not null, index idx(a));
insert into t1 values
(1,1), (2,2), (3,3), (4,4), (5,5), (6,6),
@@ -163,6 +178,10 @@ drop table t1;
select cast(NULL as signed);
cast(NULL as signed)
NULL
+#
+# IS NULL is unable to use index in range if column is declared not null
+# (Bug #4256)
+#
create table t1(i int, key(i));
insert into t1 values(1);
insert into t1 select i*2 from t1;
@@ -192,6 +211,11 @@ select count(*) from t1 where i=2 or i is null;
count(*)
9
drop table t1;
+#
+# NULL has its own type BINARY(0) by default.
+# But NULL should be weaker than a constant
+# when mixing charsets/collations
+#
set names latin2;
create table t1 select
null as c00,
@@ -275,6 +299,11 @@ t1 CREATE TABLE `t1` (
`c38` varchar(10) CHARACTER SET latin2 COLLATE latin2_general_ci DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
drop table t1;
+#
+# Check that comparison is done according to
+# non-null string collation, i.e. case insensitively,
+# rather than according to NULL's collation, i.e. case sensitively
+#
select
case 'str' when 'STR' then 'str' when null then 'null' end as c01,
case 'str' when null then 'null' when 'STR' then 'str' end as c02,
@@ -286,10 +315,13 @@ field('str1', null, 'STR1') as c05,
c01 c02 c03 c04 c05 c08 c09
str str 0 1 2 1 1
set names latin1;
-create table bug19145a (e enum('a','b','c') default 'b' , s set('x', 'y', 'z') default 'y' ) engine=MyISAM;
-create table bug19145b (e enum('a','b','c') default null, s set('x', 'y', 'z') default null) engine=MyISAM;
+#
+# Bug#19145: mysqld crashes if you set the default value of an enum field to NULL
+#
+create table bug19145a (e enum('a','b','c') default 'b' , s set('x', 'y', 'z') default 'y' ) engine=MyISAM;
+create table bug19145b (e enum('a','b','c') default null, s set('x', 'y', 'z') default null) engine=MyISAM;
create table bug19145c (e enum('a','b','c') not null default 'b' , s set('x', 'y', 'z') not null default 'y' ) engine=MyISAM;
-create table bug19145setnotnulldefaultnull (e enum('a','b','c') default null, s set('x', 'y', 'z') not null default null) engine=MyISAM;
+create table bug19145setnotnulldefaultnull (e enum('a','b','c') default null, s set('x', 'y', 'z') not null default null) engine=MyISAM;
ERROR 42000: Invalid default value for 's'
create table bug19145enumnotnulldefaultnull (e enum('a','b','c') not null default null, s set('x', 'y', 'z') default null) engine=MyISAM;
ERROR 42000: Invalid default value for 'e'
@@ -328,8 +360,10 @@ bug19145c CREATE TABLE `bug19145c` (
drop table bug19145a;
drop table bug19145b;
drop table bug19145c;
+#
# End of 4.1 tests
#
+#
# Bug #31471: decimal_bin_size: Assertion `scale >= 0 &&
# precision > 0 && scale <= precision'
#
@@ -350,8 +384,10 @@ DESCRIBE t2;
Field Type Null Key Default Extra
IFNULL(NULL, b) decimal(1,0) YES NULL
DROP TABLE t1, t2;
+#
# End of 5.0 tests
#
+#
# MDEV-4895 Valgrind warnings (Conditional jump or move depends on uninitialised value) in Field_datetime::get_date on GREATEST(..) IS NULL
#
CREATE TABLE t1 (dt DATETIME NOT NULL);
@@ -382,8 +418,7 @@ SELECT * FROM t1 WHERE NOT (concat( dt, '1' ) IS NOT NULL);
dt
DROP TABLE t1;
#
-# Bug mdev-5132: crash when exeicuting a join query
-# with IS NULL and IS NOT NULL in where
+# MDEV-5132 crash when exeicuting a join query with IS NULL and IS NOT NULL in where
#
CREATE TABLE t1 (a DATE, b INT, c INT, KEY(a), KEY(b), KEY(c)) ENGINE=MyISAM;
CREATE TABLE t2 (d DATE) ENGINE=MyISAM;
@@ -391,9 +426,6 @@ SELECT * FROM t1,t2 WHERE 1 IS NOT NULL AND t1.b IS NULL;
a b c d
DROP TABLE t1,t2;
#
-# Start of 10.0 tests
-#
-#
# MDEV-7001 Bad result for NOT NOT STRCMP('a','b') and NOT NOT NULLIF(2,3)
#
SELECT NOT NOT NULLIF(2,3);
diff --git a/mysql-test/main/null.test b/mysql-test/main/null.test
index 3741ec0f8ea..7bb698e4392 100644
--- a/mysql-test/main/null.test
+++ b/mysql-test/main/null.test
@@ -1,11 +1,6 @@
-# Initialise
---disable_warnings
-drop table if exists t1, t2;
---enable_warnings
-
-#
-# Testing of NULL in a lot of different places
-#
+--echo #
+--echo # Testing of NULL in a lot of different places
+--echo #
#enable view protocol after fix MDEV-28535
--disable_view_protocol
@@ -34,9 +29,9 @@ insert into t1 values (null);
select * from t1 where x != 0;
drop table t1;
-#
-# Test problem med index on NULL columns and testing with =NULL;
-#
+--echo #
+--echo # Test problem med index on NULL columns and testing with =NULL;
+--echo #
CREATE TABLE t1 (
indexed_field int default NULL,
@@ -48,9 +43,9 @@ SELECT * FROM t1 WHERE indexed_field IS NULL;
SELECT * FROM t1 WHERE indexed_field<=>NULL;
DROP TABLE t1;
-#
-# Testing of IFNULL
-#
+--echo #
+--echo # Testing of IFNULL
+--echo #
create table t1 (a int, b int) engine=myisam;
insert into t1 values(20,null);
select t2.b, ifnull(t2.b,"this is null") from t1 as t2 left join t1 as t3 on
@@ -62,40 +57,40 @@ select t2.b, ifnull(t2.b,"this is null") from t1 as t2 left join t1 as t3 on
t2.b=t3.a order by 1;
drop table t1;
-#
-# Test inserting and updating with NULL
-#
+--echo #
+--echo # Test inserting and updating with NULL
+--echo #
CREATE TABLE t1 (a varchar(16) NOT NULL default '', b smallint(6) NOT NULL default 0, c datetime NOT NULL default '0000-00-00 00:00:00', d smallint(6) NOT NULL default 0);
INSERT IGNORE INTO t1 SET a = "", d= "2003-01-14 03:54:55";
UPDATE IGNORE t1 SET d=1/NULL;
UPDATE IGNORE t1 SET d=NULL;
---error 1048
+--error ER_BAD_NULL_ERROR
INSERT INTO t1 (a) values (null);
---error 1048
+--error ER_BAD_NULL_ERROR
INSERT INTO t1 (a) values (1/null);
INSERT IGNORE INTO t1 (a) values (null),(null);
---error 1048
+--error ER_BAD_NULL_ERROR
INSERT INTO t1 (b) values (null);
---error 1048
+--error ER_BAD_NULL_ERROR
INSERT INTO t1 (b) values (1/null);
INSERT IGNORE INTO t1 (b) values (null),(null);
---error 1048
+--error ER_BAD_NULL_ERROR
INSERT INTO t1 (c) values (null);
---error 1048
+--error ER_BAD_NULL_ERROR
INSERT INTO t1 (c) values (1/null);
INSERT IGNORE INTO t1 (c) values (null),(null);
---error 1048
+--error ER_BAD_NULL_ERROR
INSERT INTO t1 (d) values (null);
---error 1048
+--error ER_BAD_NULL_ERROR
INSERT INTO t1 (d) values (1/null);
INSERT IGNORE INTO t1 (d) values (null),(null);
select * from t1;
drop table t1;
-#
-# Test to check elimination of IS NULL predicate for a non-nullable attribute
-# (bug #1990)
-#
+--echo #
+--echo # Test to check elimination of IS NULL predicate for a non-nullable attribute
+--echo # (bug #1990)
+--echo #
create table t1 (a int not null, b int not null, index idx(a));
insert into t1 values
(1,1), (2,2), (3,3), (4,4), (5,5), (6,6),
@@ -105,10 +100,10 @@ explain select * from t1 where a between 2 and 3 or b is null;
drop table t1;
select cast(NULL as signed);
-#
-# IS NULL is unable to use index in range if column is declared not null
-# (Bug #4256)
-#
+--echo #
+--echo # IS NULL is unable to use index in range if column is declared not null
+--echo # (Bug #4256)
+--echo #
create table t1(i int, key(i));
insert into t1 values(1);
insert into t1 select i*2 from t1;
@@ -129,11 +124,11 @@ explain select * from t1 where i=2 or i is null;
select count(*) from t1 where i=2 or i is null;
drop table t1;
-#
-# NULL has its own type BINARY(0) by default.
-# But NULL should be weaker than a constant
-# when mixing charsets/collations
-#
+--echo #
+--echo # NULL has its own type BINARY(0) by default.
+--echo # But NULL should be weaker than a constant
+--echo # when mixing charsets/collations
+--echo #
set names latin2;
# Check that result type is taken from a non-null string
create table t1 select
@@ -179,11 +174,11 @@ create table t1 select
show create table t1;
drop table t1;
-#
-# Check that comparison is done according to
-# non-null string collation, i.e. case insensitively,
-# rather than according to NULL's collation, i.e. case sensitively
-#
+--echo #
+--echo # Check that comparison is done according to
+--echo # non-null string collation, i.e. case insensitively,
+--echo # rather than according to NULL's collation, i.e. case sensitively
+--echo #
# in field
select
case 'str' when 'STR' then 'str' when null then 'null' end as c01,
@@ -197,20 +192,20 @@ select
# Restore charset to the default value.
set names latin1;
-#
-# Bug#19145: mysqld crashes if you set the default value of an enum field to NULL
-#
-create table bug19145a (e enum('a','b','c') default 'b' , s set('x', 'y', 'z') default 'y' ) engine=MyISAM;
-create table bug19145b (e enum('a','b','c') default null, s set('x', 'y', 'z') default null) engine=MyISAM;
+--echo #
+--echo # Bug#19145: mysqld crashes if you set the default value of an enum field to NULL
+--echo #
+create table bug19145a (e enum('a','b','c') default 'b' , s set('x', 'y', 'z') default 'y' ) engine=MyISAM;
+create table bug19145b (e enum('a','b','c') default null, s set('x', 'y', 'z') default null) engine=MyISAM;
create table bug19145c (e enum('a','b','c') not null default 'b' , s set('x', 'y', 'z') not null default 'y' ) engine=MyISAM;
# Invalid default value for 's'
---error 1067
-create table bug19145setnotnulldefaultnull (e enum('a','b','c') default null, s set('x', 'y', 'z') not null default null) engine=MyISAM;
+--error ER_INVALID_DEFAULT
+create table bug19145setnotnulldefaultnull (e enum('a','b','c') default null, s set('x', 'y', 'z') not null default null) engine=MyISAM;
# Invalid default value for 'e'
---error 1067
+--error ER_INVALID_DEFAULT
create table bug19145enumnotnulldefaultnull (e enum('a','b','c') not null default null, s set('x', 'y', 'z') default null) engine=MyISAM;
alter table bug19145a alter column e set default null;
@@ -222,11 +217,11 @@ alter table bug19145b alter column s set default null;
alter table bug19145b add column (i int);
# Invalid default value for 'e'
---error 1067
+--error ER_INVALID_DEFAULT
alter table bug19145c alter column e set default null;
# Invalid default value for 's'
---error 1067
+--error ER_INVALID_DEFAULT
alter table bug19145c alter column s set default null;
alter table bug19145c add column (i int);
@@ -238,7 +233,9 @@ drop table bug19145a;
drop table bug19145b;
drop table bug19145c;
+--echo #
--echo # End of 4.1 tests
+--echo #
--echo #
--echo # Bug #31471: decimal_bin_size: Assertion `scale >= 0 &&
@@ -261,7 +258,9 @@ DESCRIBE t2;
DROP TABLE t1, t2;
+--echo #
--echo # End of 5.0 tests
+--echo #
--echo #
--echo # MDEV-4895 Valgrind warnings (Conditional jump or move depends on uninitialised value) in Field_datetime::get_date on GREATEST(..) IS NULL
@@ -292,8 +291,7 @@ SELECT * FROM t1 WHERE NOT (concat( dt, '1' ) IS NOT NULL);
DROP TABLE t1;
--echo #
---echo # Bug mdev-5132: crash when exeicuting a join query
---echo # with IS NULL and IS NOT NULL in where
+--echo # MDEV-5132 crash when exeicuting a join query with IS NULL and IS NOT NULL in where
--echo #
CREATE TABLE t1 (a DATE, b INT, c INT, KEY(a), KEY(b), KEY(c)) ENGINE=MyISAM;
@@ -304,10 +302,6 @@ SELECT * FROM t1,t2 WHERE 1 IS NOT NULL AND t1.b IS NULL;
DROP TABLE t1,t2;
--echo #
---echo # Start of 10.0 tests
---echo #
-
---echo #
--echo # MDEV-7001 Bad result for NOT NOT STRCMP('a','b') and NOT NOT NULLIF(2,3)
--echo #
SELECT NOT NOT NULLIF(2,3);
@@ -1194,7 +1188,6 @@ SELECT * FROM t1 WHERE ((c1 IS NOT NULL) >= (NOT TRUE)) IS NOT NULL;
SELECT * FROM t1 WHERE ((c1 IS NOT NULL) >= (NOT TRUE)) IS NOT NULL;
DROP TABLE t1;
-
--echo #
--echo # End of 10.1 tests
--echo #
diff --git a/mysql-test/main/old-mode.result b/mysql-test/main/old-mode.result
index bb65acd54ce..daa2a4dc915 100644
--- a/mysql-test/main/old-mode.result
+++ b/mysql-test/main/old-mode.result
@@ -129,7 +129,7 @@ DROP TABLE t1;
SET @@global.mysql56_temporal_format=DEFAULT;
set time_zone='Europe/Moscow';
set global mysql56_temporal_format=false;
-create table t1 (a timestamp);
+create table t1 (a timestamp not null default now());
set timestamp=1288477526;
insert t1 values (null);
insert t1 values ();
@@ -158,7 +158,7 @@ a unix_timestamp(a)
2010-10-31 02:25:26 1288481126
drop table t1;
set global mysql56_temporal_format=false;
-create table t1 (a timestamp);
+create table t1 (a timestamp not null default now());
set timestamp=1288477526;
insert t1 values (null);
set timestamp=1288481126;
diff --git a/mysql-test/main/old-mode.test b/mysql-test/main/old-mode.test
index d3fc254110d..e4928329b47 100644
--- a/mysql-test/main/old-mode.test
+++ b/mysql-test/main/old-mode.test
@@ -91,7 +91,7 @@ SET @@global.mysql56_temporal_format=DEFAULT;
# Copy_field
set time_zone='Europe/Moscow';
set global mysql56_temporal_format=false;
-create table t1 (a timestamp);
+create table t1 (a timestamp not null default now());
set timestamp=1288477526;
insert t1 values (null);
insert t1 values ();
@@ -107,7 +107,7 @@ drop table t1;
# field_conv_incompatible()
set global mysql56_temporal_format=false;
-create table t1 (a timestamp);
+create table t1 (a timestamp not null default now());
set timestamp=1288477526;
insert t1 values (null);
set timestamp=1288481126;
diff --git a/mysql-test/main/openssl_1.test b/mysql-test/main/openssl_1.test
index 639fd0a294d..9232868bddd 100644
--- a/mysql-test/main/openssl_1.test
+++ b/mysql-test/main/openssl_1.test
@@ -72,7 +72,7 @@ drop table t1;
# Handle that openssl gives different error messages from YaSSL.
--replace_regex /2026 TLS\/SSL error.*/2026 TLS\/SSL error: xxxx/
--error 1
---exec $MYSQL_TEST --ssl-ca=$MYSQL_TEST_DIR/std_data/untrusted-cacert.pem --max-connect-retries=1 < $MYSQLTEST_VARDIR/tmp/test.sql 2>&1
+--exec $MYSQL_TEST --ssl-verify-server-cert --ssl-ca=$MYSQL_TEST_DIR/std_data/untrusted-cacert.pem --max-connect-retries=1 < $MYSQLTEST_VARDIR/tmp/test.sql 2>&1
--echo
#
diff --git a/mysql-test/main/opt_trace.result b/mysql-test/main/opt_trace.result
index 1c138e81b02..77e6103f783 100644
--- a/mysql-test/main/opt_trace.result
+++ b/mysql-test/main/opt_trace.result
@@ -127,23 +127,31 @@ select * from v1 {
"considered_execution_plans": [
{
"plan_prefix": [],
- "table": "t1",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 1,
- "cost": 2.204394531,
- "chosen": true
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "t1",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 1,
+ "cost": 2.204394531,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 1,
+ "cost": 2.204394531,
+ "uses_join_buffering": false
+ }
}
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 1,
- "cost": 2.204394531,
- "uses_join_buffering": false
}
- },
+ ]
+ },
+ {
+ "plan_prefix": [],
+ "table": "t1",
"rows_for_plan": 1,
"cost_for_plan": 2.404394531
}
@@ -277,23 +285,31 @@ select * from (select * from t1 where t1.a=1)q {
"considered_execution_plans": [
{
"plan_prefix": [],
- "table": "t1",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 1,
- "cost": 2.204394531,
- "chosen": true
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "t1",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 1,
+ "cost": 2.204394531,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 1,
+ "cost": 2.204394531,
+ "uses_join_buffering": false
+ }
}
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 1,
- "cost": 2.204394531,
- "uses_join_buffering": false
}
- },
+ ]
+ },
+ {
+ "plan_prefix": [],
+ "table": "t1",
"rows_for_plan": 1,
"cost_for_plan": 2.404394531
}
@@ -432,24 +448,32 @@ select * from v2 {
"considered_execution_plans": [
{
"plan_prefix": [],
- "table": "t1",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 1,
- "cost": 2.204394531,
- "chosen": true,
- "use_tmp_table": true
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "t1",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 1,
+ "cost": 2.204394531,
+ "chosen": true,
+ "use_tmp_table": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 1,
+ "cost": 2.204394531,
+ "uses_join_buffering": false
+ }
}
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 1,
- "cost": 2.204394531,
- "uses_join_buffering": false
}
- },
+ ]
+ },
+ {
+ "plan_prefix": [],
+ "table": "t1",
"rows_for_plan": 1,
"cost_for_plan": 2.404394531,
"cost_for_sorting": 1
@@ -509,23 +533,31 @@ select * from v2 {
"considered_execution_plans": [
{
"plan_prefix": [],
- "table": "<derived2>",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 2,
- "cost": 2,
- "chosen": true
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "<derived2>",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 2,
+ "cost": 2,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 2,
+ "cost": 2,
+ "uses_join_buffering": false
+ }
}
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 2,
- "cost": 2,
- "uses_join_buffering": false
}
- },
+ ]
+ },
+ {
+ "plan_prefix": [],
+ "table": "<derived2>",
"rows_for_plan": 2,
"cost_for_plan": 2.4
}
@@ -645,23 +677,31 @@ explain select * from v2 {
"considered_execution_plans": [
{
"plan_prefix": [],
- "table": "t2",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 10,
- "cost": 2.021972656,
- "chosen": true
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "t2",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 10,
+ "cost": 2.021972656,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 10,
+ "cost": 2.021972656,
+ "uses_join_buffering": false
+ }
}
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 10,
- "cost": 2.021972656,
- "uses_join_buffering": false
}
- },
+ ]
+ },
+ {
+ "plan_prefix": [],
+ "table": "t2",
"rows_for_plan": 10,
"cost_for_plan": 4.021972656
}
@@ -760,24 +800,32 @@ explain select * from v1 {
"considered_execution_plans": [
{
"plan_prefix": [],
- "table": "t1",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 10,
- "cost": 2.021972656,
- "chosen": true,
- "use_tmp_table": true
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "t1",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 10,
+ "cost": 2.021972656,
+ "chosen": true,
+ "use_tmp_table": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 10,
+ "cost": 2.021972656,
+ "uses_join_buffering": false
+ }
}
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 10,
- "cost": 2.021972656,
- "uses_join_buffering": false
}
- },
+ ]
+ },
+ {
+ "plan_prefix": [],
+ "table": "t1",
"rows_for_plan": 10,
"cost_for_plan": 4.021972656,
"cost_for_sorting": 10
@@ -831,23 +879,31 @@ explain select * from v1 {
"considered_execution_plans": [
{
"plan_prefix": [],
- "table": "<derived2>",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 10,
- "cost": 10,
- "chosen": true
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "<derived2>",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 10,
+ "cost": 10,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 10,
+ "cost": 10,
+ "uses_join_buffering": false
+ }
}
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 10,
- "cost": 10,
- "uses_join_buffering": false
}
- },
+ ]
+ },
+ {
+ "plan_prefix": [],
+ "table": "<derived2>",
"rows_for_plan": 10,
"cost_for_plan": 12
}
@@ -1002,113 +1058,141 @@ explain select * from t1,t2 where t1.a=t2.b+2 and t2.a= t1.b {
"considered_execution_plans": [
{
"plan_prefix": [],
- "table": "t1",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 100,
- "cost": 2.317382812,
- "chosen": true
- }
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 100,
- "cost": 2.317382812,
- "uses_join_buffering": false
- }
- },
- "rows_for_plan": 100,
- "cost_for_plan": 22.31738281,
- "rest_of_plan": [
+ "get_costs_for_tables": [
{
- "plan_prefix": ["t1"],
- "table": "t2",
"best_access_path": {
+ "table": "t1",
"considered_access_paths": [
{
- "access_type": "ref",
- "index": "a",
- "used_range_estimates": false,
- "reason": "not available",
- "rows": 1,
- "cost": 200.0585794,
+ "access_type": "scan",
+ "resulting_rows": 100,
+ "cost": 2.317382812,
"chosen": true
- },
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 100,
+ "cost": 2.317382812,
+ "uses_join_buffering": false
+ }
+ }
+ },
+ {
+ "best_access_path": {
+ "table": "t2",
+ "considered_access_paths": [
{
"access_type": "scan",
"resulting_rows": 100,
"cost": 2.317382812,
- "chosen": false
+ "chosen": true
}
],
"chosen_access_method": {
- "type": "ref",
- "records": 1,
- "cost": 200.0585794,
+ "type": "scan",
+ "records": 100,
+ "cost": 2.317382812,
"uses_join_buffering": false
}
- },
+ }
+ }
+ ]
+ },
+ {
+ "plan_prefix": [],
+ "table": "t1",
+ "rows_for_plan": 100,
+ "cost_for_plan": 22.31738281,
+ "rest_of_plan": [
+ {
+ "plan_prefix": ["t1"],
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "t2",
+ "considered_access_paths": [
+ {
+ "access_type": "ref",
+ "index": "a",
+ "used_range_estimates": false,
+ "reason": "not available",
+ "rows": 1,
+ "cost": 200.0585794,
+ "chosen": true
+ },
+ {
+ "access_type": "scan",
+ "resulting_rows": 100,
+ "cost": 2.317382812,
+ "chosen": false
+ }
+ ],
+ "chosen_access_method": {
+ "type": "ref",
+ "records": 1,
+ "cost": 200.0585794,
+ "uses_join_buffering": false
+ }
+ }
+ }
+ ]
+ },
+ {
+ "plan_prefix": ["t1"],
+ "table": "t2",
"rows_for_plan": 100,
- "cost_for_plan": 242.3759623,
- "pruned_by_hanging_leaf": true
+ "cost_for_plan": 242.3759623
}
]
},
{
"plan_prefix": [],
"table": "t2",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 100,
- "cost": 2.317382812,
- "chosen": true
- }
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 100,
- "cost": 2.317382812,
- "uses_join_buffering": false
- }
- },
"rows_for_plan": 100,
"cost_for_plan": 22.31738281,
"rest_of_plan": [
{
"plan_prefix": ["t2"],
- "table": "t1",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "ref",
- "index": "a",
- "used_range_estimates": false,
- "reason": "not available",
- "rows": 1,
- "cost": 200.0585794,
- "chosen": true
- },
- {
- "access_type": "scan",
- "resulting_rows": 100,
- "cost": 2.317382812,
- "chosen": false
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "t1",
+ "considered_access_paths": [
+ {
+ "access_type": "ref",
+ "index": "a",
+ "used_range_estimates": false,
+ "reason": "not available",
+ "rows": 1,
+ "cost": 200.0585794,
+ "chosen": true
+ },
+ {
+ "access_type": "scan",
+ "resulting_rows": 100,
+ "cost": 2.317382812,
+ "chosen": false
+ }
+ ],
+ "chosen_access_method": {
+ "type": "ref",
+ "records": 1,
+ "cost": 200.0585794,
+ "uses_join_buffering": false
+ }
}
- ],
- "chosen_access_method": {
- "type": "ref",
- "records": 1,
- "cost": 200.0585794,
- "uses_join_buffering": false
}
- },
+ ]
+ },
+ {
+ "plan_prefix": ["t2"],
+ "table": "t1",
"rows_for_plan": 100,
"cost_for_plan": 242.3759623,
- "pruned_by_cost": true
+ "pruned_by_cost": true,
+ "current_cost": 242.3759623,
+ "best_cost": 242.3759623
}
]
}
@@ -1265,23 +1349,31 @@ EXPLAIN SELECT DISTINCT a FROM t1 {
"considered_execution_plans": [
{
"plan_prefix": [],
- "table": "t1",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "index_merge",
- "resulting_rows": 5,
- "cost": 6.25,
- "chosen": true
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "t1",
+ "considered_access_paths": [
+ {
+ "access_type": "index_merge",
+ "resulting_rows": 5,
+ "cost": 6.25,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "index_merge",
+ "records": 5,
+ "cost": 6.25,
+ "uses_join_buffering": false
+ }
}
- ],
- "chosen_access_method": {
- "type": "index_merge",
- "records": 5,
- "cost": 6.25,
- "uses_join_buffering": false
}
- },
+ ]
+ },
+ {
+ "plan_prefix": [],
+ "table": "t1",
"rows_for_plan": 5,
"cost_for_plan": 7.25
}
@@ -1454,24 +1546,32 @@ EXPLAIN SELECT MIN(d) FROM t1 where b=2 and c=3 group by a {
"considered_execution_plans": [
{
"plan_prefix": [],
- "table": "t1",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "index_merge",
- "resulting_rows": 8,
- "cost": 2.2,
- "chosen": true,
- "use_tmp_table": true
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "t1",
+ "considered_access_paths": [
+ {
+ "access_type": "index_merge",
+ "resulting_rows": 8,
+ "cost": 2.2,
+ "chosen": true,
+ "use_tmp_table": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "index_merge",
+ "records": 8,
+ "cost": 2.2,
+ "uses_join_buffering": false
+ }
}
- ],
- "chosen_access_method": {
- "type": "index_merge",
- "records": 8,
- "cost": 2.2,
- "uses_join_buffering": false
}
- },
+ ]
+ },
+ {
+ "plan_prefix": [],
+ "table": "t1",
"rows_for_plan": 8,
"cost_for_plan": 3.8,
"cost_for_sorting": 8
@@ -1652,24 +1752,32 @@ EXPLAIN SELECT id,MIN(a),MAX(a) FROM t1 WHERE a>=20010104e0 GROUP BY id {
"considered_execution_plans": [
{
"plan_prefix": [],
- "table": "t1",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "index_merge",
- "resulting_rows": 9,
- "cost": 2.35,
- "chosen": true,
- "use_tmp_table": true
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "t1",
+ "considered_access_paths": [
+ {
+ "access_type": "index_merge",
+ "resulting_rows": 9,
+ "cost": 2.35,
+ "chosen": true,
+ "use_tmp_table": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "index_merge",
+ "records": 9,
+ "cost": 2.35,
+ "uses_join_buffering": false
+ }
}
- ],
- "chosen_access_method": {
- "type": "index_merge",
- "records": 9,
- "cost": 2.35,
- "uses_join_buffering": false
}
- },
+ ]
+ },
+ {
+ "plan_prefix": [],
+ "table": "t1",
"rows_for_plan": 9,
"cost_for_plan": 4.15,
"cost_for_sorting": 9
@@ -1839,24 +1947,32 @@ EXPLAIN SELECT * FROM t1 WHERE a = 20010104e0 GROUP BY id {
"considered_execution_plans": [
{
"plan_prefix": [],
- "table": "t1",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "index_merge",
- "resulting_rows": 9,
- "cost": 2.35,
- "chosen": true,
- "use_tmp_table": true
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "t1",
+ "considered_access_paths": [
+ {
+ "access_type": "index_merge",
+ "resulting_rows": 9,
+ "cost": 2.35,
+ "chosen": true,
+ "use_tmp_table": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "index_merge",
+ "records": 9,
+ "cost": 2.35,
+ "uses_join_buffering": false
+ }
}
- ],
- "chosen_access_method": {
- "type": "index_merge",
- "records": 9,
- "cost": 2.35,
- "uses_join_buffering": false
}
- },
+ ]
+ },
+ {
+ "plan_prefix": [],
+ "table": "t1",
"rows_for_plan": 9,
"cost_for_plan": 4.15,
"cost_for_sorting": 9
@@ -2111,39 +2227,47 @@ explain select * from t1 where a=1 and b=2 order by c limit 1 {
"considered_execution_plans": [
{
"plan_prefix": [],
- "table": "t1",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "ref",
- "index": "a_c",
- "used_range_estimates": true,
- "rowid_filter_skipped": "worst/max seeks clipping",
- "rows": 180,
- "cost": 180.2743776,
- "chosen": true
- },
- {
- "access_type": "ref",
- "index": "a_b",
- "used_range_estimates": true,
- "rows": 21,
- "cost": 21.14242739,
- "chosen": true
- },
- {
- "type": "scan",
- "chosen": false,
- "cause": "cost"
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "t1",
+ "considered_access_paths": [
+ {
+ "access_type": "ref",
+ "index": "a_c",
+ "used_range_estimates": true,
+ "rowid_filter_skipped": "worst/max seeks clipping",
+ "rows": 180,
+ "cost": 180.2743776,
+ "chosen": true
+ },
+ {
+ "access_type": "ref",
+ "index": "a_b",
+ "used_range_estimates": true,
+ "rows": 21,
+ "cost": 21.14242739,
+ "chosen": true
+ },
+ {
+ "type": "scan",
+ "chosen": false,
+ "cause": "cost"
+ }
+ ],
+ "chosen_access_method": {
+ "type": "ref",
+ "records": 21,
+ "cost": 21.14242739,
+ "uses_join_buffering": false
+ }
}
- ],
- "chosen_access_method": {
- "type": "ref",
- "records": 21,
- "cost": 21.14242739,
- "uses_join_buffering": false
}
- },
+ ]
+ },
+ {
+ "plan_prefix": [],
+ "table": "t1",
"rows_for_plan": 21,
"cost_for_plan": 25.34242739
}
@@ -2381,23 +2505,31 @@ select t1.a from t1 left join t2 on t1.a=t2.a {
"considered_execution_plans": [
{
"plan_prefix": ["t2"],
- "table": "t1",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 4,
- "cost": 2.006835938,
- "chosen": true
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "t1",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 4,
+ "cost": 2.006835938,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 4,
+ "cost": 2.006835938,
+ "uses_join_buffering": false
+ }
}
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 4,
- "cost": 2.006835938,
- "uses_join_buffering": false
}
- },
+ ]
+ },
+ {
+ "plan_prefix": ["t2"],
+ "table": "t1",
"rows_for_plan": 4,
"cost_for_plan": 2.806835937
}
@@ -2520,55 +2652,70 @@ explain select * from t1 left join t2 on t2.a=t1.a {
"considered_execution_plans": [
{
"plan_prefix": [],
- "table": "t1",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 4,
- "cost": 2.006835938,
- "chosen": true
- }
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 4,
- "cost": 2.006835938,
- "uses_join_buffering": false
- }
- },
- "rows_for_plan": 4,
- "cost_for_plan": 2.806835937,
- "rest_of_plan": [
+ "get_costs_for_tables": [
{
- "plan_prefix": ["t1"],
- "table": "t2",
"best_access_path": {
+ "table": "t1",
"considered_access_paths": [
{
- "access_type": "eq_ref",
- "index": "PRIMARY",
- "rows": 1,
- "cost": 4,
- "chosen": true
- },
- {
"access_type": "scan",
- "resulting_rows": 2,
- "cost": 8.017578125,
- "chosen": false
+ "resulting_rows": 4,
+ "cost": 2.006835938,
+ "chosen": true
}
],
"chosen_access_method": {
- "type": "eq_ref",
- "records": 1,
- "cost": 4,
+ "type": "scan",
+ "records": 4,
+ "cost": 2.006835938,
"uses_join_buffering": false
}
- },
+ }
+ }
+ ]
+ },
+ {
+ "plan_prefix": [],
+ "table": "t1",
+ "rows_for_plan": 4,
+ "cost_for_plan": 2.806835937,
+ "rest_of_plan": [
+ {
+ "plan_prefix": ["t1"],
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "t2",
+ "considered_access_paths": [
+ {
+ "access_type": "eq_ref",
+ "index": "PRIMARY",
+ "rows": 1,
+ "cost": 4,
+ "chosen": true
+ },
+ {
+ "access_type": "scan",
+ "resulting_rows": 2,
+ "cost": 8.017578125,
+ "chosen": false
+ }
+ ],
+ "chosen_access_method": {
+ "type": "eq_ref",
+ "records": 1,
+ "cost": 4,
+ "uses_join_buffering": false
+ }
+ }
+ }
+ ]
+ },
+ {
+ "plan_prefix": ["t1"],
+ "table": "t2",
"rows_for_plan": 4,
- "cost_for_plan": 7.606835937,
- "pruned_by_hanging_leaf": true
+ "cost_for_plan": 7.606835937
}
]
}
@@ -2733,23 +2880,31 @@ explain select t1.a from t1 left join (t2 join t3 on t2.b=t3.b) on t2.a=t1.a and
"considered_execution_plans": [
{
"plan_prefix": ["t3", "t2"],
- "table": "t1",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 4,
- "cost": 2.006835938,
- "chosen": true
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "t1",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 4,
+ "cost": 2.006835938,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 4,
+ "cost": 2.006835938,
+ "uses_join_buffering": false
+ }
}
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 4,
- "cost": 2.006835938,
- "uses_join_buffering": false
}
- },
+ ]
+ },
+ {
+ "plan_prefix": ["t3", "t2"],
+ "table": "t1",
"rows_for_plan": 4,
"cost_for_plan": 2.806835937
}
@@ -2940,23 +3095,31 @@ explain extended select * from t1 where a in (select pk from t10) {
"considered_execution_plans": [
{
"plan_prefix": [],
- "table": "t10",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 10,
- "cost": 2.021972656,
- "chosen": true
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "t10",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 10,
+ "cost": 2.021972656,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 10,
+ "cost": 2.021972656,
+ "uses_join_buffering": false
+ }
}
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 10,
- "cost": 2.021972656,
- "uses_join_buffering": false
}
- },
+ ]
+ },
+ {
+ "plan_prefix": [],
+ "table": "t10",
"rows_for_plan": 10,
"cost_for_plan": 4.021972656
}
@@ -2969,31 +3132,29 @@ explain extended select * from t1 where a in (select pk from t10) {
"considered_execution_plans": [
{
"plan_prefix": [],
- "table": "t1",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 3,
- "cost": 2.006591797,
- "chosen": true
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "t1",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 3,
+ "cost": 2.006591797,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 3,
+ "cost": 2.006591797,
+ "uses_join_buffering": false
+ }
}
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 3,
- "cost": 2.006591797,
- "uses_join_buffering": false
- }
- },
- "rows_for_plan": 3,
- "cost_for_plan": 2.606591797,
- "semijoin_strategy_choice": [],
- "rest_of_plan": [
+ },
{
- "plan_prefix": ["t1"],
- "table": "t10",
"best_access_path": {
+ "table": "t10",
"considered_access_paths": [
{
"access_type": "scan",
@@ -3006,9 +3167,46 @@ explain extended select * from t1 where a in (select pk from t10) {
"type": "scan",
"records": 10,
"cost": 2.021972656,
- "uses_join_buffering": true
+ "uses_join_buffering": false
}
- },
+ }
+ }
+ ]
+ },
+ {
+ "plan_prefix": [],
+ "table": "t1",
+ "rows_for_plan": 3,
+ "cost_for_plan": 2.606591797,
+ "semijoin_strategy_choice": [],
+ "rest_of_plan": [
+ {
+ "plan_prefix": ["t1"],
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "t10",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 10,
+ "cost": 2.021972656,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 10,
+ "cost": 2.021972656,
+ "uses_join_buffering": true
+ }
+ }
+ }
+ ]
+ },
+ {
+ "plan_prefix": ["t1"],
+ "table": "t10",
"rows_for_plan": 30,
"cost_for_plan": 10.62856445,
"semijoin_strategy_choice": [
@@ -3037,22 +3235,6 @@ explain extended select * from t1 where a in (select pk from t10) {
{
"plan_prefix": [],
"table": "t10",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 10,
- "cost": 2.021972656,
- "chosen": true
- }
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 10,
- "cost": 2.021972656,
- "uses_join_buffering": false
- }
- },
"rows_for_plan": 10,
"cost_for_plan": 4.021972656,
"semijoin_strategy_choice": [],
@@ -3398,50 +3580,57 @@ explain select * from t1 where pk = 2 and a=5 and b=1 {
"considered_execution_plans": [
{
"plan_prefix": [],
- "table": "t1",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "ref",
- "index": "pk",
- "used_range_estimates": true,
- "rows": 1,
- "cost": 1.125585794,
- "chosen": true
- },
- {
- "access_type": "ref",
- "index": "pk_a",
- "used_range_estimates": true,
- "rows": 1,
- "cost": 1.125829876,
- "chosen": false,
- "cause": "cost"
- },
- {
- "access_type": "ref",
- "index": "pk_a_b",
- "used_range_estimates": true,
- "rows": 1,
- "cost": 0.126073957,
- "chosen": true
- },
- {
- "type": "scan",
- "chosen": false,
- "cause": "cost"
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "t1",
+ "considered_access_paths": [
+ {
+ "access_type": "ref",
+ "index": "pk",
+ "used_range_estimates": true,
+ "rows": 1,
+ "cost": 1.125585794,
+ "chosen": true
+ },
+ {
+ "access_type": "ref",
+ "index": "pk_a",
+ "used_range_estimates": true,
+ "rows": 1,
+ "cost": 1.125829876,
+ "chosen": false,
+ "cause": "cost"
+ },
+ {
+ "access_type": "ref",
+ "index": "pk_a_b",
+ "used_range_estimates": true,
+ "rows": 1,
+ "cost": 0.126073957,
+ "chosen": true
+ },
+ {
+ "type": "scan",
+ "chosen": false,
+ "cause": "cost"
+ }
+ ],
+ "chosen_access_method": {
+ "type": "ref",
+ "records": 1,
+ "cost": 0.126073957,
+ "uses_join_buffering": false
+ }
}
- ],
- "chosen_access_method": {
- "type": "ref",
- "records": 1,
- "cost": 0.126073957,
- "uses_join_buffering": false
}
- },
+ ]
+ },
+ {
+ "plan_prefix": [],
+ "table": "t1",
"rows_for_plan": 1,
- "cost_for_plan": 0.326073957,
- "pruned_by_hanging_leaf": true
+ "cost_for_plan": 0.326073957
}
]
},
@@ -3551,23 +3740,31 @@ select f1(a) from t1 {
"considered_execution_plans": [
{
"plan_prefix": [],
- "table": "t1",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 4,
- "cost": 2.006835938,
- "chosen": true
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "t1",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 4,
+ "cost": 2.006835938,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 4,
+ "cost": 2.006835938,
+ "uses_join_buffering": false
+ }
}
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 4,
- "cost": 2.006835938,
- "uses_join_buffering": false
}
- },
+ ]
+ },
+ {
+ "plan_prefix": [],
+ "table": "t1",
"rows_for_plan": 4,
"cost_for_plan": 2.806835937
}
@@ -3647,23 +3844,31 @@ select f2(a) from t1 {
"considered_execution_plans": [
{
"plan_prefix": [],
- "table": "t1",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 4,
- "cost": 2.006835938,
- "chosen": true
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "t1",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 4,
+ "cost": 2.006835938,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 4,
+ "cost": 2.006835938,
+ "uses_join_buffering": false
+ }
}
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 4,
- "cost": 2.006835938,
- "uses_join_buffering": false
}
- },
+ ]
+ },
+ {
+ "plan_prefix": [],
+ "table": "t1",
"rows_for_plan": 4,
"cost_for_plan": 2.806835937
}
@@ -3711,7 +3916,7 @@ a
2
select length(trace) from INFORMATION_SCHEMA.OPTIMIZER_TRACE;
length(trace)
-2092
+2360
set optimizer_trace_max_mem_size=100;
select * from t1;
a
@@ -3725,7 +3930,7 @@ select * from t1 {
"join_preparation": {
"select_id": 1,
"steps": [
- 1992 0
+ 2260 0
set optimizer_trace_max_mem_size=0;
select * from t1;
a
@@ -3733,7 +3938,7 @@ a
2
select * from INFORMATION_SCHEMA.OPTIMIZER_TRACE;
QUERY TRACE MISSING_BYTES_BEYOND_MAX_MEM_SIZE INSUFFICIENT_PRIVILEGES
-select * from t1 2092 0
+select * from t1 2360 0
drop table t1;
set optimizer_trace='enabled=off';
set @@optimizer_trace_max_mem_size= @save_optimizer_trace_max_mem_size;
@@ -4029,113 +4234,141 @@ explain delete t0,t1 from t0, t1 where t0.a=t1.a and t1.a<3 {
"considered_execution_plans": [
{
"plan_prefix": [],
- "table": "t0",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "range",
- "resulting_rows": 3,
- "cost": 0.746757383,
- "chosen": true
- }
- ],
- "chosen_access_method": {
- "type": "range",
- "records": 3,
- "cost": 0.746757383,
- "uses_join_buffering": false
- }
- },
- "rows_for_plan": 3,
- "cost_for_plan": 1.346757383,
- "rest_of_plan": [
+ "get_costs_for_tables": [
{
- "plan_prefix": ["t0"],
- "table": "t1",
"best_access_path": {
+ "table": "t0",
"considered_access_paths": [
{
- "access_type": "ref",
- "index": "a",
- "used_range_estimates": false,
- "reason": "not better than ref estimates",
- "rows": 1,
- "cost": 3.001757383,
+ "access_type": "range",
+ "resulting_rows": 3,
+ "cost": 0.746757383,
"chosen": true
- },
+ }
+ ],
+ "chosen_access_method": {
+ "type": "range",
+ "records": 3,
+ "cost": 0.746757383,
+ "uses_join_buffering": false
+ }
+ }
+ },
+ {
+ "best_access_path": {
+ "table": "t1",
+ "considered_access_paths": [
{
- "type": "scan",
- "chosen": false,
- "cause": "cost"
+ "access_type": "range",
+ "resulting_rows": 3,
+ "cost": 0.746757383,
+ "chosen": true
}
],
"chosen_access_method": {
- "type": "ref",
- "records": 1,
- "cost": 3.001757383,
+ "type": "range",
+ "records": 3,
+ "cost": 0.746757383,
"uses_join_buffering": false
}
- },
+ }
+ }
+ ]
+ },
+ {
+ "plan_prefix": [],
+ "table": "t0",
+ "rows_for_plan": 3,
+ "cost_for_plan": 1.346757383,
+ "rest_of_plan": [
+ {
+ "plan_prefix": ["t0"],
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "t1",
+ "considered_access_paths": [
+ {
+ "access_type": "ref",
+ "index": "a",
+ "used_range_estimates": false,
+ "reason": "not better than ref estimates",
+ "rows": 1,
+ "cost": 3.001757383,
+ "chosen": true
+ },
+ {
+ "type": "scan",
+ "chosen": false,
+ "cause": "cost"
+ }
+ ],
+ "chosen_access_method": {
+ "type": "ref",
+ "records": 1,
+ "cost": 3.001757383,
+ "uses_join_buffering": false
+ }
+ }
+ }
+ ]
+ },
+ {
+ "plan_prefix": ["t0"],
+ "table": "t1",
"rows_for_plan": 3,
- "cost_for_plan": 4.948514767,
- "pruned_by_hanging_leaf": true
+ "cost_for_plan": 4.948514767
}
]
},
{
"plan_prefix": [],
"table": "t1",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "range",
- "resulting_rows": 3,
- "cost": 0.746757383,
- "chosen": true
- }
- ],
- "chosen_access_method": {
- "type": "range",
- "records": 3,
- "cost": 0.746757383,
- "uses_join_buffering": false
- }
- },
"rows_for_plan": 3,
"cost_for_plan": 1.346757383,
"rest_of_plan": [
{
"plan_prefix": ["t1"],
- "table": "t0",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "ref",
- "index": "a",
- "rec_per_key_stats_missing": true,
- "used_range_estimates": false,
- "reason": "not better than ref estimates",
- "rowid_filter_skipped": "worst/max seeks clipping",
- "rows": 2,
- "cost": 3.003514767,
- "chosen": true
- },
- {
- "type": "scan",
- "chosen": false,
- "cause": "cost"
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "t0",
+ "considered_access_paths": [
+ {
+ "access_type": "ref",
+ "index": "a",
+ "rec_per_key_stats_missing": true,
+ "used_range_estimates": false,
+ "reason": "not better than ref estimates",
+ "rowid_filter_skipped": "worst/max seeks clipping",
+ "rows": 2,
+ "cost": 3.003514767,
+ "chosen": true
+ },
+ {
+ "type": "scan",
+ "chosen": false,
+ "cause": "cost"
+ }
+ ],
+ "chosen_access_method": {
+ "type": "ref",
+ "records": 2,
+ "cost": 3.003514767,
+ "uses_join_buffering": false
+ }
}
- ],
- "chosen_access_method": {
- "type": "ref",
- "records": 2,
- "cost": 3.003514767,
- "uses_join_buffering": false
}
- },
+ ]
+ },
+ {
+ "plan_prefix": ["t1"],
+ "table": "t0",
"rows_for_plan": 6,
"cost_for_plan": 5.55027215,
- "pruned_by_cost": true
+ "pruned_by_cost": true,
+ "current_cost": 5.55027215,
+ "best_cost": 4.948514767
}
]
}
@@ -4252,23 +4485,31 @@ explain select * from (select rand() from t1)q {
"considered_execution_plans": [
{
"plan_prefix": [],
- "table": "t1",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 3,
- "cost": 2.005126953,
- "chosen": true
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "t1",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 3,
+ "cost": 2.005126953,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 3,
+ "cost": 2.005126953,
+ "uses_join_buffering": false
+ }
}
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 3,
- "cost": 2.005126953,
- "uses_join_buffering": false
}
- },
+ ]
+ },
+ {
+ "plan_prefix": [],
+ "table": "t1",
"rows_for_plan": 3,
"cost_for_plan": 2.605126953
}
@@ -4316,23 +4557,31 @@ explain select * from (select rand() from t1)q {
"considered_execution_plans": [
{
"plan_prefix": [],
- "table": "<derived2>",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 3,
- "cost": 3,
- "chosen": true
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "<derived2>",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 3,
+ "cost": 3,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 3,
+ "cost": 3,
+ "uses_join_buffering": false
+ }
}
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 3,
- "cost": 3,
- "uses_join_buffering": false
}
- },
+ ]
+ },
+ {
+ "plan_prefix": [],
+ "table": "<derived2>",
"rows_for_plan": 3,
"cost_for_plan": 3.6
}
@@ -4522,30 +4771,29 @@ explain select * from t1 where a in (select t_inner_1.a from t1 t_inner_1, t1 t_
"considered_execution_plans": [
{
"plan_prefix": [],
- "table": "t_inner_1",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 3,
- "cost": 2.005126953,
- "chosen": true
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "t_inner_1",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 3,
+ "cost": 2.005126953,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 3,
+ "cost": 2.005126953,
+ "uses_join_buffering": false
+ }
}
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 3,
- "cost": 2.005126953,
- "uses_join_buffering": false
- }
- },
- "rows_for_plan": 3,
- "cost_for_plan": 2.605126953,
- "rest_of_plan": [
+ },
{
- "plan_prefix": ["t_inner_1"],
- "table": "t_inner_2",
"best_access_path": {
+ "table": "t_inner_2",
"considered_access_paths": [
{
"access_type": "scan",
@@ -4558,9 +4806,45 @@ explain select * from t1 where a in (select t_inner_1.a from t1 t_inner_1, t1 t_
"type": "scan",
"records": 3,
"cost": 2.005126953,
- "uses_join_buffering": true
+ "uses_join_buffering": false
}
- },
+ }
+ }
+ ]
+ },
+ {
+ "plan_prefix": [],
+ "table": "t_inner_1",
+ "rows_for_plan": 3,
+ "cost_for_plan": 2.605126953,
+ "rest_of_plan": [
+ {
+ "plan_prefix": ["t_inner_1"],
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "t_inner_2",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 3,
+ "cost": 2.005126953,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 3,
+ "cost": 2.005126953,
+ "uses_join_buffering": true
+ }
+ }
+ }
+ ]
+ },
+ {
+ "plan_prefix": ["t_inner_1"],
+ "table": "t_inner_2",
"rows_for_plan": 9,
"cost_for_plan": 6.410253906
}
@@ -4569,22 +4853,6 @@ explain select * from t1 where a in (select t_inner_1.a from t1 t_inner_1, t1 t_
{
"plan_prefix": [],
"table": "t_inner_2",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 3,
- "cost": 2.005126953,
- "chosen": true
- }
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 3,
- "cost": 2.005126953,
- "uses_join_buffering": false
- }
- },
"rows_for_plan": 3,
"cost_for_plan": 2.605126953,
"pruned_by_heuristic": true
@@ -4598,31 +4866,29 @@ explain select * from t1 where a in (select t_inner_1.a from t1 t_inner_1, t1 t_
"considered_execution_plans": [
{
"plan_prefix": [],
- "table": "t1",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 3,
- "cost": 2.005126953,
- "chosen": true
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "t1",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 3,
+ "cost": 2.005126953,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 3,
+ "cost": 2.005126953,
+ "uses_join_buffering": false
+ }
}
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 3,
- "cost": 2.005126953,
- "uses_join_buffering": false
- }
- },
- "rows_for_plan": 3,
- "cost_for_plan": 2.605126953,
- "semijoin_strategy_choice": [],
- "rest_of_plan": [
+ },
{
- "plan_prefix": ["t1"],
- "table": "t_inner_1",
"best_access_path": {
+ "table": "t_inner_1",
"considered_access_paths": [
{
"access_type": "scan",
@@ -4635,17 +4901,44 @@ explain select * from t1 where a in (select t_inner_1.a from t1 t_inner_1, t1 t_
"type": "scan",
"records": 3,
"cost": 2.005126953,
- "uses_join_buffering": true
+ "uses_join_buffering": false
}
- },
- "rows_for_plan": 9,
- "cost_for_plan": 6.410253906,
- "semijoin_strategy_choice": [],
- "rest_of_plan": [
+ }
+ },
+ {
+ "best_access_path": {
+ "table": "t_inner_2",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 3,
+ "cost": 2.005126953,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 3,
+ "cost": 2.005126953,
+ "uses_join_buffering": false
+ }
+ }
+ }
+ ]
+ },
+ {
+ "plan_prefix": [],
+ "table": "t1",
+ "rows_for_plan": 3,
+ "cost_for_plan": 2.605126953,
+ "semijoin_strategy_choice": [],
+ "rest_of_plan": [
+ {
+ "plan_prefix": ["t1"],
+ "get_costs_for_tables": [
{
- "plan_prefix": ["t1", "t_inner_1"],
- "table": "t_inner_2",
"best_access_path": {
+ "table": "t_inner_1",
"considered_access_paths": [
{
"access_type": "scan",
@@ -4660,7 +4953,63 @@ explain select * from t1 where a in (select t_inner_1.a from t1 t_inner_1, t1 t_
"cost": 2.005126953,
"uses_join_buffering": true
}
- },
+ }
+ },
+ {
+ "best_access_path": {
+ "table": "t_inner_2",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 3,
+ "cost": 2.005126953,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 3,
+ "cost": 2.005126953,
+ "uses_join_buffering": true
+ }
+ }
+ }
+ ]
+ },
+ {
+ "plan_prefix": ["t1"],
+ "table": "t_inner_1",
+ "rows_for_plan": 9,
+ "cost_for_plan": 6.410253906,
+ "semijoin_strategy_choice": [],
+ "rest_of_plan": [
+ {
+ "plan_prefix": ["t1", "t_inner_1"],
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "t_inner_2",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 3,
+ "cost": 2.005126953,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 3,
+ "cost": 2.005126953,
+ "uses_join_buffering": true
+ }
+ }
+ }
+ ]
+ },
+ {
+ "plan_prefix": ["t1", "t_inner_1"],
+ "table": "t_inner_2",
"rows_for_plan": 27,
"cost_for_plan": 13.81538086,
"semijoin_strategy_choice": [
@@ -4689,22 +5038,6 @@ explain select * from t1 where a in (select t_inner_1.a from t1 t_inner_1, t1 t_
{
"plan_prefix": ["t1"],
"table": "t_inner_2",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 3,
- "cost": 2.005126953,
- "chosen": true
- }
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 3,
- "cost": 2.005126953,
- "uses_join_buffering": true
- }
- },
"rows_for_plan": 9,
"cost_for_plan": 6.410253906,
"semijoin_strategy_choice": [],
@@ -4715,22 +5048,6 @@ explain select * from t1 where a in (select t_inner_1.a from t1 t_inner_1, t1 t_
{
"plan_prefix": [],
"table": "t_inner_1",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 3,
- "cost": 2.005126953,
- "chosen": true
- }
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 3,
- "cost": 2.005126953,
- "uses_join_buffering": false
- }
- },
"rows_for_plan": 3,
"cost_for_plan": 2.605126953,
"semijoin_strategy_choice": [],
@@ -4739,22 +5056,6 @@ explain select * from t1 where a in (select t_inner_1.a from t1 t_inner_1, t1 t_
{
"plan_prefix": [],
"table": "t_inner_2",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 3,
- "cost": 2.005126953,
- "chosen": true
- }
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 3,
- "cost": 2.005126953,
- "uses_join_buffering": false
- }
- },
"rows_for_plan": 3,
"cost_for_plan": 2.605126953,
"semijoin_strategy_choice": [],
@@ -5052,31 +5353,29 @@ t_outer_2.a in (select t_inner_3.a from t2 t_inner_3, t1 t_inner_4) {
"considered_execution_plans": [
{
"plan_prefix": [],
- "table": "t_outer_1",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 3,
- "cost": 2.005126953,
- "chosen": true
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "t_outer_1",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 3,
+ "cost": 2.005126953,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 3,
+ "cost": 2.005126953,
+ "uses_join_buffering": false
+ }
}
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 3,
- "cost": 2.005126953,
- "uses_join_buffering": false
- }
- },
- "rows_for_plan": 3,
- "cost_for_plan": 2.605126953,
- "semijoin_strategy_choice": [],
- "rest_of_plan": [
+ },
{
- "plan_prefix": ["t_outer_1"],
- "table": "t_inner_1",
"best_access_path": {
+ "table": "t_inner_1",
"considered_access_paths": [
{
"access_type": "scan",
@@ -5089,17 +5388,120 @@ t_outer_2.a in (select t_inner_3.a from t2 t_inner_3, t1 t_inner_4) {
"type": "scan",
"records": 3,
"cost": 2.005126953,
- "uses_join_buffering": true
+ "uses_join_buffering": false
}
- },
- "rows_for_plan": 9,
- "cost_for_plan": 6.410253906,
- "semijoin_strategy_choice": [],
- "rest_of_plan": [
+ }
+ },
+ {
+ "best_access_path": {
+ "table": "t_inner_2",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 9,
+ "cost": 2.015380859,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 9,
+ "cost": 2.015380859,
+ "uses_join_buffering": false
+ }
+ }
+ },
+ {
+ "best_access_path": {
+ "table": "t_outer_2",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 9,
+ "cost": 2.015380859,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 9,
+ "cost": 2.015380859,
+ "uses_join_buffering": false
+ }
+ }
+ },
+ {
+ "best_access_path": {
+ "table": "t_inner_4",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 3,
+ "cost": 2.005126953,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 3,
+ "cost": 2.005126953,
+ "uses_join_buffering": false
+ }
+ }
+ },
+ {
+ "best_access_path": {
+ "table": "t_inner_3",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 9,
+ "cost": 2.015380859,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 9,
+ "cost": 2.015380859,
+ "uses_join_buffering": false
+ }
+ }
+ }
+ ]
+ },
+ {
+ "plan_prefix": [],
+ "table": "t_outer_1",
+ "rows_for_plan": 3,
+ "cost_for_plan": 2.605126953,
+ "semijoin_strategy_choice": [],
+ "rest_of_plan": [
+ {
+ "plan_prefix": ["t_outer_1"],
+ "get_costs_for_tables": [
{
- "plan_prefix": ["t_outer_1", "t_inner_1"],
- "table": "t_inner_2",
"best_access_path": {
+ "table": "t_inner_1",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 3,
+ "cost": 2.005126953,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 3,
+ "cost": 2.005126953,
+ "uses_join_buffering": true
+ }
+ }
+ },
+ {
+ "best_access_path": {
+ "table": "t_inner_2",
"considered_access_paths": [
{
"access_type": "scan",
@@ -5114,29 +5516,137 @@ t_outer_2.a in (select t_inner_3.a from t2 t_inner_3, t1 t_inner_4) {
"cost": 2.015380859,
"uses_join_buffering": true
}
- },
- "rows_for_plan": 81,
- "cost_for_plan": 24.62563477,
- "semijoin_strategy_choice": [
- {
- "strategy": "FirstMatch",
+ }
+ },
+ {
+ "best_access_path": {
+ "table": "t_outer_2",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 9,
+ "cost": 2.015380859,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 9,
+ "cost": 2.015380859,
+ "uses_join_buffering": true
+ }
+ }
+ },
+ {
+ "best_access_path": {
+ "table": "t_inner_4",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 3,
+ "cost": 2.005126953,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
"records": 3,
- "read_time": 44.75893555
+ "cost": 2.005126953,
+ "uses_join_buffering": true
+ }
+ }
+ },
+ {
+ "best_access_path": {
+ "table": "t_inner_3",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 9,
+ "cost": 2.015380859,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 9,
+ "cost": 2.015380859,
+ "uses_join_buffering": true
+ }
+ }
+ }
+ ]
+ },
+ {
+ "plan_prefix": ["t_outer_1"],
+ "table": "t_outer_2",
+ "rows_for_plan": 27,
+ "cost_for_plan": 10.02050781,
+ "semijoin_strategy_choice": [],
+ "rest_of_plan": [
+ {
+ "plan_prefix": ["t_outer_1", "t_outer_2"],
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "t_inner_2",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 9,
+ "cost": 2.015380859,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 9,
+ "cost": 2.015380859,
+ "uses_join_buffering": true
+ }
+ }
},
{
- "strategy": "DuplicateWeedout",
- "records": 3,
- "read_time": 37.22563477
+ "best_access_path": {
+ "table": "t_inner_1",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 3,
+ "cost": 2.005126953,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 3,
+ "cost": 2.005126953,
+ "uses_join_buffering": true
+ }
+ }
},
{
- "chosen_strategy": "DuplicateWeedout"
- }
- ],
- "rest_of_plan": [
+ "best_access_path": {
+ "table": "t_inner_4",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 3,
+ "cost": 2.005126953,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 3,
+ "cost": 2.005126953,
+ "uses_join_buffering": true
+ }
+ }
+ },
{
- "plan_prefix": ["t_outer_1", "t_inner_1", "t_inner_2"],
- "table": "t_outer_2",
"best_access_path": {
+ "table": "t_inner_3",
"considered_access_paths": [
{
"access_type": "scan",
@@ -5151,20 +5661,42 @@ t_outer_2.a in (select t_inner_3.a from t2 t_inner_3, t1 t_inner_4) {
"cost": 2.015380859,
"uses_join_buffering": true
}
- },
- "rows_for_plan": 27,
- "cost_for_plan": 44.64101563,
- "semijoin_strategy_choice": [],
- "rest_of_plan": [
+ }
+ }
+ ]
+ },
+ {
+ "plan_prefix": ["t_outer_1", "t_outer_2"],
+ "table": "t_inner_1",
+ "rows_for_plan": 81,
+ "cost_for_plan": 28.22563477,
+ "semijoin_strategy_choice": [],
+ "rest_of_plan": [
+ {
+ "plan_prefix": ["t_outer_1", "t_outer_2", "t_inner_1"],
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "t_inner_2",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 9,
+ "cost": 2.015380859,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 9,
+ "cost": 2.015380859,
+ "uses_join_buffering": true
+ }
+ }
+ },
{
- "plan_prefix": [
- "t_outer_1",
- "t_inner_1",
- "t_inner_2",
- "t_outer_2"
- ],
- "table": "t_inner_4",
"best_access_path": {
+ "table": "t_inner_4",
"considered_access_paths": [
{
"access_type": "scan",
@@ -5179,21 +5711,80 @@ t_outer_2.a in (select t_inner_3.a from t2 t_inner_3, t1 t_inner_4) {
"cost": 2.005126953,
"uses_join_buffering": true
}
- },
- "rows_for_plan": 81,
- "cost_for_plan": 62.84614258,
- "semijoin_strategy_choice": [],
- "rest_of_plan": [
+ }
+ },
+ {
+ "best_access_path": {
+ "table": "t_inner_3",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 9,
+ "cost": 2.015380859,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 9,
+ "cost": 2.015380859,
+ "uses_join_buffering": true
+ }
+ }
+ }
+ ]
+ },
+ {
+ "plan_prefix": ["t_outer_1", "t_outer_2", "t_inner_1"],
+ "table": "t_inner_2",
+ "rows_for_plan": 729,
+ "cost_for_plan": 176.0410156,
+ "semijoin_strategy_choice": [
+ {
+ "strategy": "FirstMatch",
+ "records": 27,
+ "read_time": 389.4047852
+ },
+ {
+ "strategy": "DuplicateWeedout",
+ "records": 27,
+ "read_time": 289.4410156
+ },
+ {
+ "chosen_strategy": "DuplicateWeedout"
+ }
+ ],
+ "rest_of_plan": [
+ {
+ "plan_prefix": [
+ "t_outer_1",
+ "t_outer_2",
+ "t_inner_1",
+ "t_inner_2"
+ ],
+ "get_costs_for_tables": [
{
- "plan_prefix": [
- "t_outer_1",
- "t_inner_1",
- "t_inner_2",
- "t_outer_2",
- "t_inner_4"
- ],
- "table": "t_inner_3",
"best_access_path": {
+ "table": "t_inner_4",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 3,
+ "cost": 2.005126953,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 3,
+ "cost": 2.005126953,
+ "uses_join_buffering": true
+ }
+ }
+ },
+ {
+ "best_access_path": {
+ "table": "t_inner_3",
"considered_access_paths": [
{
"access_type": "scan",
@@ -5208,19 +5799,73 @@ t_outer_2.a in (select t_inner_3.a from t2 t_inner_3, t1 t_inner_4) {
"cost": 2.015380859,
"uses_join_buffering": true
}
- },
+ }
+ }
+ ]
+ },
+ {
+ "plan_prefix": [
+ "t_outer_1",
+ "t_outer_2",
+ "t_inner_1",
+ "t_inner_2"
+ ],
+ "table": "t_inner_4",
+ "rows_for_plan": 81,
+ "cost_for_plan": 307.6461426,
+ "semijoin_strategy_choice": [],
+ "rest_of_plan": [
+ {
+ "plan_prefix": [
+ "t_outer_1",
+ "t_outer_2",
+ "t_inner_1",
+ "t_inner_2",
+ "t_inner_4"
+ ],
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "t_inner_3",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 9,
+ "cost": 2.015380859,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 9,
+ "cost": 2.015380859,
+ "uses_join_buffering": true
+ }
+ }
+ }
+ ]
+ },
+ {
+ "plan_prefix": [
+ "t_outer_1",
+ "t_outer_2",
+ "t_inner_1",
+ "t_inner_2",
+ "t_inner_4"
+ ],
+ "table": "t_inner_3",
"rows_for_plan": 729,
- "cost_for_plan": 210.6615234,
+ "cost_for_plan": 455.4615234,
"semijoin_strategy_choice": [
{
"strategy": "FirstMatch",
"records": 27,
- "read_time": 424.025293
+ "read_time": 668.825293
},
{
"strategy": "DuplicateWeedout",
"records": 27,
- "read_time": 324.0615234
+ "read_time": 568.8615234
},
{
"chosen_strategy": "DuplicateWeedout"
@@ -5232,95 +5877,55 @@ t_outer_2.a in (select t_inner_3.a from t2 t_inner_3, t1 t_inner_4) {
{
"plan_prefix": [
"t_outer_1",
+ "t_outer_2",
"t_inner_1",
- "t_inner_2",
- "t_outer_2"
+ "t_inner_2"
],
"table": "t_inner_3",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 9,
- "cost": 2.015380859,
- "chosen": true
- }
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 9,
- "cost": 2.015380859,
- "uses_join_buffering": true
- }
- },
"rows_for_plan": 243,
- "cost_for_plan": 95.25639648,
+ "cost_for_plan": 340.0563965,
"semijoin_strategy_choice": [],
"pruned_by_heuristic": true
}
]
},
{
- "plan_prefix": ["t_outer_1", "t_inner_1", "t_inner_2"],
+ "plan_prefix": ["t_outer_1", "t_outer_2", "t_inner_1"],
"table": "t_inner_4",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 3,
- "cost": 2.005126953,
- "chosen": true
- }
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 3,
- "cost": 2.005126953,
- "uses_join_buffering": true
- }
- },
- "rows_for_plan": 9,
- "cost_for_plan": 41.03076172,
+ "rows_for_plan": 243,
+ "cost_for_plan": 78.83076172,
"semijoin_strategy_choice": [],
"rest_of_plan": [
{
"plan_prefix": [
"t_outer_1",
+ "t_outer_2",
"t_inner_1",
- "t_inner_2",
"t_inner_4"
],
- "table": "t_outer_2",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 9,
- "cost": 2.015380859,
- "chosen": true
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "t_inner_2",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 9,
+ "cost": 2.015380859,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 9,
+ "cost": 2.015380859,
+ "uses_join_buffering": true
+ }
}
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 9,
- "cost": 2.015380859,
- "uses_join_buffering": true
- }
- },
- "rows_for_plan": 81,
- "cost_for_plan": 59.24614258,
- "semijoin_strategy_choice": [],
- "rest_of_plan": [
+ },
{
- "plan_prefix": [
- "t_outer_1",
- "t_inner_1",
- "t_inner_2",
- "t_inner_4",
- "t_outer_2"
- ],
- "table": "t_inner_3",
"best_access_path": {
+ "table": "t_inner_3",
"considered_access_paths": [
{
"access_type": "scan",
@@ -5335,57 +5940,148 @@ t_outer_2.a in (select t_inner_3.a from t2 t_inner_3, t1 t_inner_4) {
"cost": 2.015380859,
"uses_join_buffering": true
}
- },
- "rows_for_plan": 729,
- "cost_for_plan": 207.0615234,
+ }
+ }
+ ]
+ },
+ {
+ "plan_prefix": [
+ "t_outer_1",
+ "t_outer_2",
+ "t_inner_1",
+ "t_inner_4"
+ ],
+ "table": "t_inner_2",
+ "rows_for_plan": 2187,
+ "cost_for_plan": 518.2461426,
+ "semijoin_strategy_choice": [],
+ "rest_of_plan": [
+ {
+ "plan_prefix": [
+ "t_outer_1",
+ "t_outer_2",
+ "t_inner_1",
+ "t_inner_4",
+ "t_inner_2"
+ ],
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "t_inner_3",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 9,
+ "cost": 2.015380859,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 9,
+ "cost": 2.015380859,
+ "uses_join_buffering": true
+ }
+ }
+ }
+ ]
+ },
+ {
+ "plan_prefix": [
+ "t_outer_1",
+ "t_outer_2",
+ "t_inner_1",
+ "t_inner_4",
+ "t_inner_2"
+ ],
+ "table": "t_inner_3",
+ "rows_for_plan": 19683,
+ "cost_for_plan": 4456.861523,
"semijoin_strategy_choice": [
{
+ "strategy": "FirstMatch",
+ "records": 27,
+ "read_time": 9562.749707
+ },
+ {
"strategy": "DuplicateWeedout",
"records": 27,
- "read_time": 320.4615234
+ "read_time": 7413.361523
},
{
- "chosen_strategy": "DuplicateWeedout"
+ "chosen_strategy": "FirstMatch"
}
- ]
+ ],
+ "pruned_by_cost": true,
+ "current_cost": 9562.749707,
+ "best_cost": 568.8615234
}
]
},
{
"plan_prefix": [
"t_outer_1",
+ "t_outer_2",
"t_inner_1",
- "t_inner_2",
"t_inner_4"
],
"table": "t_inner_3",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 9,
- "cost": 2.015380859,
- "chosen": true
- }
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 9,
- "cost": 2.015380859,
- "uses_join_buffering": true
- }
- },
- "rows_for_plan": 81,
- "cost_for_plan": 59.24614258,
+ "rows_for_plan": 2187,
+ "cost_for_plan": 518.2461426,
"semijoin_strategy_choice": [],
"pruned_by_heuristic": true
}
]
},
{
- "plan_prefix": ["t_outer_1", "t_inner_1", "t_inner_2"],
+ "plan_prefix": ["t_outer_1", "t_outer_2", "t_inner_1"],
"table": "t_inner_3",
+ "rows_for_plan": 729,
+ "cost_for_plan": 176.0410156,
+ "semijoin_strategy_choice": [],
+ "pruned_by_heuristic": "min_read_time"
+ }
+ ]
+ },
+ {
+ "plan_prefix": ["t_outer_1", "t_outer_2"],
+ "table": "t_inner_2",
+ "rows_for_plan": 243,
+ "cost_for_plan": 60.63588867,
+ "semijoin_strategy_choice": [],
+ "pruned_by_heuristic": true
+ },
+ {
+ "plan_prefix": ["t_outer_1", "t_outer_2"],
+ "table": "t_inner_4",
+ "rows_for_plan": 81,
+ "cost_for_plan": 28.22563477,
+ "semijoin_strategy_choice": [],
+ "pruned_by_heuristic": true
+ },
+ {
+ "plan_prefix": ["t_outer_1", "t_outer_2"],
+ "table": "t_inner_3",
+ "rows_for_plan": 243,
+ "cost_for_plan": 60.63588867,
+ "semijoin_strategy_choice": [],
+ "pruned_by_heuristic": true
+ }
+ ]
+ },
+ {
+ "plan_prefix": ["t_outer_1"],
+ "table": "t_inner_1",
+ "rows_for_plan": 9,
+ "cost_for_plan": 6.410253906,
+ "semijoin_strategy_choice": [],
+ "rest_of_plan": [
+ {
+ "plan_prefix": ["t_outer_1", "t_inner_1"],
+ "get_costs_for_tables": [
+ {
"best_access_path": {
+ "table": "t_inner_2",
"considered_access_paths": [
{
"access_type": "scan",
@@ -5400,41 +6096,11 @@ t_outer_2.a in (select t_inner_3.a from t2 t_inner_3, t1 t_inner_4) {
"cost": 2.015380859,
"uses_join_buffering": true
}
- },
- "rows_for_plan": 27,
- "cost_for_plan": 44.64101563,
- "semijoin_strategy_choice": [],
- "pruned_by_heuristic": true
- }
- ]
- },
- {
- "plan_prefix": ["t_outer_1", "t_inner_1"],
- "table": "t_outer_2",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 9,
- "cost": 2.015380859,
- "chosen": true
}
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 9,
- "cost": 2.015380859,
- "uses_join_buffering": true
- }
- },
- "rows_for_plan": 81,
- "cost_for_plan": 24.62563477,
- "semijoin_strategy_choice": [],
- "rest_of_plan": [
+ },
{
- "plan_prefix": ["t_outer_1", "t_inner_1", "t_outer_2"],
- "table": "t_inner_2",
"best_access_path": {
+ "table": "t_outer_2",
"considered_access_paths": [
{
"access_type": "scan",
@@ -5449,7 +6115,120 @@ t_outer_2.a in (select t_inner_3.a from t2 t_inner_3, t1 t_inner_4) {
"cost": 2.015380859,
"uses_join_buffering": true
}
- },
+ }
+ },
+ {
+ "best_access_path": {
+ "table": "t_inner_4",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 3,
+ "cost": 2.005126953,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 3,
+ "cost": 2.005126953,
+ "uses_join_buffering": true
+ }
+ }
+ },
+ {
+ "best_access_path": {
+ "table": "t_inner_3",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 9,
+ "cost": 2.015380859,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 9,
+ "cost": 2.015380859,
+ "uses_join_buffering": true
+ }
+ }
+ }
+ ]
+ },
+ {
+ "plan_prefix": ["t_outer_1", "t_inner_1"],
+ "table": "t_outer_2",
+ "rows_for_plan": 81,
+ "cost_for_plan": 24.62563477,
+ "semijoin_strategy_choice": [],
+ "rest_of_plan": [
+ {
+ "plan_prefix": ["t_outer_1", "t_inner_1", "t_outer_2"],
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "t_inner_2",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 9,
+ "cost": 2.015380859,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 9,
+ "cost": 2.015380859,
+ "uses_join_buffering": true
+ }
+ }
+ },
+ {
+ "best_access_path": {
+ "table": "t_inner_4",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 3,
+ "cost": 2.005126953,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 3,
+ "cost": 2.005126953,
+ "uses_join_buffering": true
+ }
+ }
+ },
+ {
+ "best_access_path": {
+ "table": "t_inner_3",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 9,
+ "cost": 2.015380859,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 9,
+ "cost": 2.015380859,
+ "uses_join_buffering": true
+ }
+ }
+ }
+ ]
+ },
+ {
+ "plan_prefix": ["t_outer_1", "t_inner_1", "t_outer_2"],
+ "table": "t_inner_2",
"rows_for_plan": 729,
"cost_for_plan": 172.4410156,
"semijoin_strategy_choice": [
@@ -5470,37 +6249,29 @@ t_outer_2.a in (select t_inner_3.a from t2 t_inner_3, t1 t_inner_4) {
"t_outer_2",
"t_inner_2"
],
- "table": "t_inner_4",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 3,
- "cost": 2.005126953,
- "chosen": true
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "t_inner_4",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 3,
+ "cost": 2.005126953,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 3,
+ "cost": 2.005126953,
+ "uses_join_buffering": true
+ }
}
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 3,
- "cost": 2.005126953,
- "uses_join_buffering": true
- }
- },
- "rows_for_plan": 81,
- "cost_for_plan": 304.0461426,
- "semijoin_strategy_choice": [],
- "rest_of_plan": [
+ },
{
- "plan_prefix": [
- "t_outer_1",
- "t_inner_1",
- "t_outer_2",
- "t_inner_2",
- "t_inner_4"
- ],
- "table": "t_inner_3",
"best_access_path": {
+ "table": "t_inner_3",
"considered_access_paths": [
{
"access_type": "scan",
@@ -5515,7 +6286,61 @@ t_outer_2.a in (select t_inner_3.a from t2 t_inner_3, t1 t_inner_4) {
"cost": 2.015380859,
"uses_join_buffering": true
}
- },
+ }
+ }
+ ]
+ },
+ {
+ "plan_prefix": [
+ "t_outer_1",
+ "t_inner_1",
+ "t_outer_2",
+ "t_inner_2"
+ ],
+ "table": "t_inner_4",
+ "rows_for_plan": 81,
+ "cost_for_plan": 304.0461426,
+ "semijoin_strategy_choice": [],
+ "rest_of_plan": [
+ {
+ "plan_prefix": [
+ "t_outer_1",
+ "t_inner_1",
+ "t_outer_2",
+ "t_inner_2",
+ "t_inner_4"
+ ],
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "t_inner_3",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 9,
+ "cost": 2.015380859,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 9,
+ "cost": 2.015380859,
+ "uses_join_buffering": true
+ }
+ }
+ }
+ ]
+ },
+ {
+ "plan_prefix": [
+ "t_outer_1",
+ "t_inner_1",
+ "t_outer_2",
+ "t_inner_2",
+ "t_inner_4"
+ ],
+ "table": "t_inner_3",
"rows_for_plan": 729,
"cost_for_plan": 451.8615234,
"semijoin_strategy_choice": [
@@ -5532,8 +6357,7 @@ t_outer_2.a in (select t_inner_3.a from t2 t_inner_3, t1 t_inner_4) {
{
"chosen_strategy": "DuplicateWeedout"
}
- ],
- "pruned_by_cost": true
+ ]
}
]
},
@@ -5545,48 +6369,16 @@ t_outer_2.a in (select t_inner_3.a from t2 t_inner_3, t1 t_inner_4) {
"t_inner_2"
],
"table": "t_inner_3",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 9,
- "cost": 2.015380859,
- "chosen": true
- }
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 9,
- "cost": 2.015380859,
- "uses_join_buffering": true
- }
- },
"rows_for_plan": 243,
"cost_for_plan": 336.4563965,
"semijoin_strategy_choice": [],
- "pruned_by_cost": true
+ "pruned_by_heuristic": true
}
]
},
{
"plan_prefix": ["t_outer_1", "t_inner_1", "t_outer_2"],
"table": "t_inner_4",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 3,
- "cost": 2.005126953,
- "chosen": true
- }
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 3,
- "cost": 2.005126953,
- "uses_join_buffering": true
- }
- },
"rows_for_plan": 243,
"cost_for_plan": 75.23076172,
"semijoin_strategy_choice": [],
@@ -5598,27 +6390,115 @@ t_outer_2.a in (select t_inner_3.a from t2 t_inner_3, t1 t_inner_4) {
"t_outer_2",
"t_inner_4"
],
- "table": "t_inner_2",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 9,
- "cost": 2.015380859,
- "chosen": true
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "t_inner_2",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 9,
+ "cost": 2.015380859,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 9,
+ "cost": 2.015380859,
+ "uses_join_buffering": true
+ }
+ }
+ },
+ {
+ "best_access_path": {
+ "table": "t_inner_3",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 9,
+ "cost": 2.015380859,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 9,
+ "cost": 2.015380859,
+ "uses_join_buffering": true
+ }
}
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 9,
- "cost": 2.015380859,
- "uses_join_buffering": true
}
- },
+ ]
+ },
+ {
+ "plan_prefix": [
+ "t_outer_1",
+ "t_inner_1",
+ "t_outer_2",
+ "t_inner_4"
+ ],
+ "table": "t_inner_2",
"rows_for_plan": 2187,
"cost_for_plan": 514.6461426,
"semijoin_strategy_choice": [],
- "pruned_by_cost": true
+ "rest_of_plan": [
+ {
+ "plan_prefix": [
+ "t_outer_1",
+ "t_inner_1",
+ "t_outer_2",
+ "t_inner_4",
+ "t_inner_2"
+ ],
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "t_inner_3",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 9,
+ "cost": 2.015380859,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 9,
+ "cost": 2.015380859,
+ "uses_join_buffering": true
+ }
+ }
+ }
+ ]
+ },
+ {
+ "plan_prefix": [
+ "t_outer_1",
+ "t_inner_1",
+ "t_outer_2",
+ "t_inner_4",
+ "t_inner_2"
+ ],
+ "table": "t_inner_3",
+ "rows_for_plan": 19683,
+ "cost_for_plan": 4453.261523,
+ "semijoin_strategy_choice": [
+ {
+ "strategy": "DuplicateWeedout",
+ "records": 27,
+ "read_time": 7409.761523
+ },
+ {
+ "chosen_strategy": "DuplicateWeedout"
+ }
+ ],
+ "pruned_by_cost": true,
+ "current_cost": 7409.761523,
+ "best_cost": 565.2615234
+ }
+ ]
},
{
"plan_prefix": [
@@ -5628,61 +6508,50 @@ t_outer_2.a in (select t_inner_3.a from t2 t_inner_3, t1 t_inner_4) {
"t_inner_4"
],
"table": "t_inner_3",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 9,
- "cost": 2.015380859,
- "chosen": true
- }
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 9,
- "cost": 2.015380859,
- "uses_join_buffering": true
- }
- },
"rows_for_plan": 2187,
"cost_for_plan": 514.6461426,
"semijoin_strategy_choice": [],
- "pruned_by_cost": true
+ "pruned_by_heuristic": true
}
]
},
{
"plan_prefix": ["t_outer_1", "t_inner_1", "t_outer_2"],
"table": "t_inner_3",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 9,
- "cost": 2.015380859,
- "chosen": true
- }
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 9,
- "cost": 2.015380859,
- "uses_join_buffering": true
- }
- },
"rows_for_plan": 729,
"cost_for_plan": 172.4410156,
"semijoin_strategy_choice": [],
- "rest_of_plan": [
+ "pruned_by_heuristic": "min_read_time"
+ }
+ ]
+ },
+ {
+ "plan_prefix": ["t_outer_1", "t_inner_1"],
+ "table": "t_inner_2",
+ "rows_for_plan": 81,
+ "cost_for_plan": 24.62563477,
+ "semijoin_strategy_choice": [
+ {
+ "strategy": "FirstMatch",
+ "records": 3,
+ "read_time": 44.75893555
+ },
+ {
+ "strategy": "DuplicateWeedout",
+ "records": 3,
+ "read_time": 37.22563477
+ },
+ {
+ "chosen_strategy": "DuplicateWeedout"
+ }
+ ],
+ "rest_of_plan": [
+ {
+ "plan_prefix": ["t_outer_1", "t_inner_1", "t_inner_2"],
+ "get_costs_for_tables": [
{
- "plan_prefix": [
- "t_outer_1",
- "t_inner_1",
- "t_outer_2",
- "t_inner_3"
- ],
- "table": "t_inner_2",
"best_access_path": {
+ "table": "t_outer_2",
"considered_access_paths": [
{
"access_type": "scan",
@@ -5697,21 +6566,11 @@ t_outer_2.a in (select t_inner_3.a from t2 t_inner_3, t1 t_inner_4) {
"cost": 2.015380859,
"uses_join_buffering": true
}
- },
- "rows_for_plan": 6561,
- "cost_for_plan": 1486.656396,
- "semijoin_strategy_choice": [],
- "pruned_by_cost": true
+ }
},
{
- "plan_prefix": [
- "t_outer_1",
- "t_inner_1",
- "t_outer_2",
- "t_inner_3"
- ],
- "table": "t_inner_4",
"best_access_path": {
+ "table": "t_inner_4",
"considered_access_paths": [
{
"access_type": "scan",
@@ -5726,71 +6585,11 @@ t_outer_2.a in (select t_inner_3.a from t2 t_inner_3, t1 t_inner_4) {
"cost": 2.005126953,
"uses_join_buffering": true
}
- },
- "rows_for_plan": 2187,
- "cost_for_plan": 611.8461426,
- "semijoin_strategy_choice": [],
- "pruned_by_cost": true
- }
- ]
- }
- ]
- },
- {
- "plan_prefix": ["t_outer_1", "t_inner_1"],
- "table": "t_inner_4",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 3,
- "cost": 2.005126953,
- "chosen": true
- }
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 3,
- "cost": 2.005126953,
- "uses_join_buffering": true
- }
- },
- "rows_for_plan": 27,
- "cost_for_plan": 13.81538086,
- "semijoin_strategy_choice": [],
- "rest_of_plan": [
- {
- "plan_prefix": ["t_outer_1", "t_inner_1", "t_inner_4"],
- "table": "t_inner_2",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 9,
- "cost": 2.015380859,
- "chosen": true
}
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 9,
- "cost": 2.015380859,
- "uses_join_buffering": true
- }
- },
- "rows_for_plan": 243,
- "cost_for_plan": 64.43076172,
- "semijoin_strategy_choice": [],
- "rest_of_plan": [
+ },
{
- "plan_prefix": [
- "t_outer_1",
- "t_inner_1",
- "t_inner_4",
- "t_inner_2"
- ],
- "table": "t_outer_2",
"best_access_path": {
+ "table": "t_inner_3",
"considered_access_paths": [
{
"access_type": "scan",
@@ -5805,88 +6604,292 @@ t_outer_2.a in (select t_inner_3.a from t2 t_inner_3, t1 t_inner_4) {
"cost": 2.015380859,
"uses_join_buffering": true
}
- },
- "rows_for_plan": 2187,
- "cost_for_plan": 503.8461426,
+ }
+ }
+ ]
+ },
+ {
+ "plan_prefix": ["t_outer_1", "t_inner_1", "t_inner_2"],
+ "table": "t_outer_2",
+ "rows_for_plan": 27,
+ "cost_for_plan": 44.64101563,
+ "semijoin_strategy_choice": [],
+ "rest_of_plan": [
+ {
+ "plan_prefix": [
+ "t_outer_1",
+ "t_inner_1",
+ "t_inner_2",
+ "t_outer_2"
+ ],
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "t_inner_4",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 3,
+ "cost": 2.005126953,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 3,
+ "cost": 2.005126953,
+ "uses_join_buffering": true
+ }
+ }
+ },
+ {
+ "best_access_path": {
+ "table": "t_inner_3",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 9,
+ "cost": 2.015380859,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 9,
+ "cost": 2.015380859,
+ "uses_join_buffering": true
+ }
+ }
+ }
+ ]
+ },
+ {
+ "plan_prefix": [
+ "t_outer_1",
+ "t_inner_1",
+ "t_inner_2",
+ "t_outer_2"
+ ],
+ "table": "t_inner_4",
+ "rows_for_plan": 81,
+ "cost_for_plan": 62.84614258,
"semijoin_strategy_choice": [],
- "pruned_by_cost": true
+ "rest_of_plan": [
+ {
+ "plan_prefix": [
+ "t_outer_1",
+ "t_inner_1",
+ "t_inner_2",
+ "t_outer_2",
+ "t_inner_4"
+ ],
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "t_inner_3",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 9,
+ "cost": 2.015380859,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 9,
+ "cost": 2.015380859,
+ "uses_join_buffering": true
+ }
+ }
+ }
+ ]
+ },
+ {
+ "plan_prefix": [
+ "t_outer_1",
+ "t_inner_1",
+ "t_inner_2",
+ "t_outer_2",
+ "t_inner_4"
+ ],
+ "table": "t_inner_3",
+ "rows_for_plan": 729,
+ "cost_for_plan": 210.6615234,
+ "semijoin_strategy_choice": [
+ {
+ "strategy": "FirstMatch",
+ "records": 27,
+ "read_time": 424.025293
+ },
+ {
+ "strategy": "DuplicateWeedout",
+ "records": 27,
+ "read_time": 324.0615234
+ },
+ {
+ "chosen_strategy": "DuplicateWeedout"
+ }
+ ]
+ }
+ ]
},
{
"plan_prefix": [
"t_outer_1",
"t_inner_1",
- "t_inner_4",
- "t_inner_2"
+ "t_inner_2",
+ "t_outer_2"
],
"table": "t_inner_3",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 9,
- "cost": 2.015380859,
- "chosen": true
- }
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 9,
- "cost": 2.015380859,
- "uses_join_buffering": true
- }
- },
- "rows_for_plan": 2187,
- "cost_for_plan": 503.8461426,
+ "rows_for_plan": 243,
+ "cost_for_plan": 95.25639648,
"semijoin_strategy_choice": [],
- "pruned_by_cost": true
+ "pruned_by_heuristic": true
}
]
},
{
- "plan_prefix": ["t_outer_1", "t_inner_1", "t_inner_4"],
- "table": "t_outer_2",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 9,
- "cost": 2.015380859,
- "chosen": true
- }
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 9,
- "cost": 2.015380859,
- "uses_join_buffering": true
- }
- },
- "rows_for_plan": 243,
- "cost_for_plan": 64.43076172,
+ "plan_prefix": ["t_outer_1", "t_inner_1", "t_inner_2"],
+ "table": "t_inner_4",
+ "rows_for_plan": 9,
+ "cost_for_plan": 41.03076172,
"semijoin_strategy_choice": [],
- "pruned_by_heuristic": true
+ "rest_of_plan": [
+ {
+ "plan_prefix": [
+ "t_outer_1",
+ "t_inner_1",
+ "t_inner_2",
+ "t_inner_4"
+ ],
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "t_outer_2",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 9,
+ "cost": 2.015380859,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 9,
+ "cost": 2.015380859,
+ "uses_join_buffering": true
+ }
+ }
+ },
+ {
+ "best_access_path": {
+ "table": "t_inner_3",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 9,
+ "cost": 2.015380859,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 9,
+ "cost": 2.015380859,
+ "uses_join_buffering": true
+ }
+ }
+ }
+ ]
+ },
+ {
+ "plan_prefix": [
+ "t_outer_1",
+ "t_inner_1",
+ "t_inner_2",
+ "t_inner_4"
+ ],
+ "table": "t_outer_2",
+ "rows_for_plan": 81,
+ "cost_for_plan": 59.24614258,
+ "semijoin_strategy_choice": [],
+ "rest_of_plan": [
+ {
+ "plan_prefix": [
+ "t_outer_1",
+ "t_inner_1",
+ "t_inner_2",
+ "t_inner_4",
+ "t_outer_2"
+ ],
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "t_inner_3",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 9,
+ "cost": 2.015380859,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 9,
+ "cost": 2.015380859,
+ "uses_join_buffering": true
+ }
+ }
+ }
+ ]
+ },
+ {
+ "plan_prefix": [
+ "t_outer_1",
+ "t_inner_1",
+ "t_inner_2",
+ "t_inner_4",
+ "t_outer_2"
+ ],
+ "table": "t_inner_3",
+ "rows_for_plan": 729,
+ "cost_for_plan": 207.0615234,
+ "semijoin_strategy_choice": [
+ {
+ "strategy": "DuplicateWeedout",
+ "records": 27,
+ "read_time": 320.4615234
+ },
+ {
+ "chosen_strategy": "DuplicateWeedout"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "plan_prefix": [
+ "t_outer_1",
+ "t_inner_1",
+ "t_inner_2",
+ "t_inner_4"
+ ],
+ "table": "t_inner_3",
+ "rows_for_plan": 81,
+ "cost_for_plan": 59.24614258,
+ "semijoin_strategy_choice": [],
+ "pruned_by_heuristic": true
+ }
+ ]
},
{
- "plan_prefix": ["t_outer_1", "t_inner_1", "t_inner_4"],
+ "plan_prefix": ["t_outer_1", "t_inner_1", "t_inner_2"],
"table": "t_inner_3",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 9,
- "cost": 2.015380859,
- "chosen": true
- }
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 9,
- "cost": 2.015380859,
- "uses_join_buffering": true
- }
- },
- "rows_for_plan": 243,
- "cost_for_plan": 64.43076172,
+ "rows_for_plan": 27,
+ "cost_for_plan": 44.64101563,
"semijoin_strategy_choice": [],
"pruned_by_heuristic": true
}
@@ -5894,59 +6897,17 @@ t_outer_2.a in (select t_inner_3.a from t2 t_inner_3, t1 t_inner_4) {
},
{
"plan_prefix": ["t_outer_1", "t_inner_1"],
- "table": "t_inner_3",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 9,
- "cost": 2.015380859,
- "chosen": true
- }
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 9,
- "cost": 2.015380859,
- "uses_join_buffering": true
- }
- },
- "rows_for_plan": 81,
- "cost_for_plan": 24.62563477,
+ "table": "t_inner_4",
+ "rows_for_plan": 27,
+ "cost_for_plan": 13.81538086,
"semijoin_strategy_choice": [],
"rest_of_plan": [
{
- "plan_prefix": ["t_outer_1", "t_inner_1", "t_inner_3"],
- "table": "t_inner_2",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 9,
- "cost": 2.015380859,
- "chosen": true
- }
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 9,
- "cost": 2.015380859,
- "uses_join_buffering": true
- }
- },
- "rows_for_plan": 729,
- "cost_for_plan": 172.4410156,
- "semijoin_strategy_choice": [],
- "rest_of_plan": [
+ "plan_prefix": ["t_outer_1", "t_inner_1", "t_inner_4"],
+ "get_costs_for_tables": [
{
- "plan_prefix": [
- "t_outer_1",
- "t_inner_1",
- "t_inner_3",
- "t_inner_2"
- ],
- "table": "t_outer_2",
"best_access_path": {
+ "table": "t_outer_2",
"considered_access_paths": [
{
"access_type": "scan",
@@ -5961,99 +6922,30 @@ t_outer_2.a in (select t_inner_3.a from t2 t_inner_3, t1 t_inner_4) {
"cost": 2.015380859,
"uses_join_buffering": true
}
- },
- "rows_for_plan": 6561,
- "cost_for_plan": 1486.656396,
- "semijoin_strategy_choice": [],
- "pruned_by_cost": true
+ }
},
{
- "plan_prefix": [
- "t_outer_1",
- "t_inner_1",
- "t_inner_3",
- "t_inner_2"
- ],
- "table": "t_inner_4",
"best_access_path": {
+ "table": "t_inner_2",
"considered_access_paths": [
{
"access_type": "scan",
- "resulting_rows": 3,
- "cost": 2.005126953,
+ "resulting_rows": 9,
+ "cost": 2.015380859,
"chosen": true
}
],
"chosen_access_method": {
"type": "scan",
- "records": 3,
- "cost": 2.005126953,
+ "records": 9,
+ "cost": 2.015380859,
"uses_join_buffering": true
}
- },
- "rows_for_plan": 2187,
- "cost_for_plan": 611.8461426,
- "semijoin_strategy_choice": [],
- "pruned_by_cost": true
- }
- ]
- },
- {
- "plan_prefix": ["t_outer_1", "t_inner_1", "t_inner_3"],
- "table": "t_outer_2",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 9,
- "cost": 2.015380859,
- "chosen": true
}
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 9,
- "cost": 2.015380859,
- "uses_join_buffering": true
- }
- },
- "rows_for_plan": 729,
- "cost_for_plan": 172.4410156,
- "semijoin_strategy_choice": [],
- "pruned_by_heuristic": true
- },
- {
- "plan_prefix": ["t_outer_1", "t_inner_1", "t_inner_3"],
- "table": "t_inner_4",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 3,
- "cost": 2.005126953,
- "chosen": true
- }
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 3,
- "cost": 2.005126953,
- "uses_join_buffering": true
- }
- },
- "rows_for_plan": 243,
- "cost_for_plan": 75.23076172,
- "semijoin_strategy_choice": [],
- "rest_of_plan": [
+ },
{
- "plan_prefix": [
- "t_outer_1",
- "t_inner_1",
- "t_inner_3",
- "t_inner_4"
- ],
- "table": "t_inner_2",
"best_access_path": {
+ "table": "t_inner_3",
"considered_access_paths": [
{
"access_type": "scan",
@@ -6068,90 +6960,128 @@ t_outer_2.a in (select t_inner_3.a from t2 t_inner_3, t1 t_inner_4) {
"cost": 2.015380859,
"uses_join_buffering": true
}
- },
+ }
+ }
+ ]
+ },
+ {
+ "plan_prefix": ["t_outer_1", "t_inner_1", "t_inner_4"],
+ "table": "t_outer_2",
+ "rows_for_plan": 243,
+ "cost_for_plan": 64.43076172,
+ "semijoin_strategy_choice": [],
+ "rest_of_plan": [
+ {
+ "plan_prefix": [
+ "t_outer_1",
+ "t_inner_1",
+ "t_inner_4",
+ "t_outer_2"
+ ],
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "t_inner_2",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 9,
+ "cost": 2.015380859,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 9,
+ "cost": 2.015380859,
+ "uses_join_buffering": true
+ }
+ }
+ },
+ {
+ "best_access_path": {
+ "table": "t_inner_3",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 9,
+ "cost": 2.015380859,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 9,
+ "cost": 2.015380859,
+ "uses_join_buffering": true
+ }
+ }
+ }
+ ]
+ },
+ {
+ "plan_prefix": [
+ "t_outer_1",
+ "t_inner_1",
+ "t_inner_4",
+ "t_outer_2"
+ ],
+ "table": "t_inner_2",
"rows_for_plan": 2187,
- "cost_for_plan": 514.6461426,
+ "cost_for_plan": 503.8461426,
"semijoin_strategy_choice": [],
- "pruned_by_cost": true
+ "pruned_by_cost": true,
+ "current_cost": 503.8461426,
+ "best_cost": 320.4615234
},
{
"plan_prefix": [
"t_outer_1",
"t_inner_1",
- "t_inner_3",
- "t_inner_4"
+ "t_inner_4",
+ "t_outer_2"
],
- "table": "t_outer_2",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 9,
- "cost": 2.015380859,
- "chosen": true
- }
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 9,
- "cost": 2.015380859,
- "uses_join_buffering": true
- }
- },
+ "table": "t_inner_3",
"rows_for_plan": 2187,
- "cost_for_plan": 514.6461426,
+ "cost_for_plan": 503.8461426,
"semijoin_strategy_choice": [],
- "pruned_by_cost": true
+ "pruned_by_cost": true,
+ "current_cost": 503.8461426,
+ "best_cost": 320.4615234
}
]
+ },
+ {
+ "plan_prefix": ["t_outer_1", "t_inner_1", "t_inner_4"],
+ "table": "t_inner_2",
+ "rows_for_plan": 243,
+ "cost_for_plan": 64.43076172,
+ "semijoin_strategy_choice": [],
+ "pruned_by_heuristic": true
+ },
+ {
+ "plan_prefix": ["t_outer_1", "t_inner_1", "t_inner_4"],
+ "table": "t_inner_3",
+ "rows_for_plan": 243,
+ "cost_for_plan": 64.43076172,
+ "semijoin_strategy_choice": [],
+ "pruned_by_heuristic": true
}
]
+ },
+ {
+ "plan_prefix": ["t_outer_1", "t_inner_1"],
+ "table": "t_inner_3",
+ "rows_for_plan": 81,
+ "cost_for_plan": 24.62563477,
+ "semijoin_strategy_choice": [],
+ "pruned_by_heuristic": true
}
]
},
{
"plan_prefix": ["t_outer_1"],
"table": "t_inner_2",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 9,
- "cost": 2.015380859,
- "chosen": true
- }
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 9,
- "cost": 2.015380859,
- "uses_join_buffering": true
- }
- },
- "rows_for_plan": 27,
- "cost_for_plan": 10.02050781,
- "semijoin_strategy_choice": [],
- "pruned_by_heuristic": true
- },
- {
- "plan_prefix": ["t_outer_1"],
- "table": "t_outer_2",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 9,
- "cost": 2.015380859,
- "chosen": true
- }
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 9,
- "cost": 2.015380859,
- "uses_join_buffering": true
- }
- },
"rows_for_plan": 27,
"cost_for_plan": 10.02050781,
"semijoin_strategy_choice": [],
@@ -6160,22 +7090,6 @@ t_outer_2.a in (select t_inner_3.a from t2 t_inner_3, t1 t_inner_4) {
{
"plan_prefix": ["t_outer_1"],
"table": "t_inner_4",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 3,
- "cost": 2.005126953,
- "chosen": true
- }
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 3,
- "cost": 2.005126953,
- "uses_join_buffering": true
- }
- },
"rows_for_plan": 9,
"cost_for_plan": 6.410253906,
"semijoin_strategy_choice": [],
@@ -6184,22 +7098,6 @@ t_outer_2.a in (select t_inner_3.a from t2 t_inner_3, t1 t_inner_4) {
{
"plan_prefix": ["t_outer_1"],
"table": "t_inner_3",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 9,
- "cost": 2.015380859,
- "chosen": true
- }
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 9,
- "cost": 2.015380859,
- "uses_join_buffering": true
- }
- },
"rows_for_plan": 27,
"cost_for_plan": 10.02050781,
"semijoin_strategy_choice": [],
@@ -6209,71 +7107,23 @@ t_outer_2.a in (select t_inner_3.a from t2 t_inner_3, t1 t_inner_4) {
},
{
"plan_prefix": [],
- "table": "t_inner_1",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 3,
- "cost": 2.005126953,
- "chosen": true
- }
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 3,
- "cost": 2.005126953,
- "uses_join_buffering": false
- }
- },
- "rows_for_plan": 3,
- "cost_for_plan": 2.605126953,
+ "table": "t_outer_2",
+ "rows_for_plan": 9,
+ "cost_for_plan": 3.815380859,
"semijoin_strategy_choice": [],
"pruned_by_heuristic": true
},
{
"plan_prefix": [],
- "table": "t_inner_2",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 9,
- "cost": 2.015380859,
- "chosen": true
- }
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 9,
- "cost": 2.015380859,
- "uses_join_buffering": false
- }
- },
- "rows_for_plan": 9,
- "cost_for_plan": 3.815380859,
+ "table": "t_inner_1",
+ "rows_for_plan": 3,
+ "cost_for_plan": 2.605126953,
"semijoin_strategy_choice": [],
"pruned_by_heuristic": true
},
{
"plan_prefix": [],
- "table": "t_outer_2",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 9,
- "cost": 2.015380859,
- "chosen": true
- }
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 9,
- "cost": 2.015380859,
- "uses_join_buffering": false
- }
- },
+ "table": "t_inner_2",
"rows_for_plan": 9,
"cost_for_plan": 3.815380859,
"semijoin_strategy_choice": [],
@@ -6282,22 +7132,6 @@ t_outer_2.a in (select t_inner_3.a from t2 t_inner_3, t1 t_inner_4) {
{
"plan_prefix": [],
"table": "t_inner_4",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 3,
- "cost": 2.005126953,
- "chosen": true
- }
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 3,
- "cost": 2.005126953,
- "uses_join_buffering": false
- }
- },
"rows_for_plan": 3,
"cost_for_plan": 2.605126953,
"semijoin_strategy_choice": [],
@@ -6306,22 +7140,6 @@ t_outer_2.a in (select t_inner_3.a from t2 t_inner_3, t1 t_inner_4) {
{
"plan_prefix": [],
"table": "t_inner_3",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 9,
- "cost": 2.015380859,
- "chosen": true
- }
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 9,
- "cost": 2.015380859,
- "uses_join_buffering": false
- }
- },
"rows_for_plan": 9,
"cost_for_plan": 3.815380859,
"semijoin_strategy_choice": [],
@@ -6402,8 +7220,8 @@ explain select * from t1 t_outer_1,t2 t_outer_2 where t_outer_1.a in (select t_
t_outer_2.a in (select t_inner_3.a from t2 t_inner_3, t1 t_inner_4);
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t_outer_1 ALL NULL NULL NULL NULL 3
-1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1
1 PRIMARY t_outer_2 ALL NULL NULL NULL NULL 9 Using join buffer (flat, BNL join)
+1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1
1 PRIMARY <subquery3> eq_ref distinct_key distinct_key 4 func 1
2 MATERIALIZED t_inner_1 ALL NULL NULL NULL NULL 3
2 MATERIALIZED t_inner_2 ALL NULL NULL NULL NULL 9 Using join buffer (flat, BNL join)
@@ -6624,30 +7442,29 @@ t_outer_2.a in (select t_inner_3.a from t2 t_inner_3, t1 t_inner_4) {
"considered_execution_plans": [
{
"plan_prefix": [],
- "table": "t_inner_1",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 3,
- "cost": 2.005126953,
- "chosen": true
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "t_inner_1",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 3,
+ "cost": 2.005126953,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 3,
+ "cost": 2.005126953,
+ "uses_join_buffering": false
+ }
}
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 3,
- "cost": 2.005126953,
- "uses_join_buffering": false
- }
- },
- "rows_for_plan": 3,
- "cost_for_plan": 2.605126953,
- "rest_of_plan": [
+ },
{
- "plan_prefix": ["t_inner_1"],
- "table": "t_inner_2",
"best_access_path": {
+ "table": "t_inner_2",
"considered_access_paths": [
{
"access_type": "scan",
@@ -6660,9 +7477,45 @@ t_outer_2.a in (select t_inner_3.a from t2 t_inner_3, t1 t_inner_4) {
"type": "scan",
"records": 9,
"cost": 2.015380859,
- "uses_join_buffering": true
+ "uses_join_buffering": false
}
- },
+ }
+ }
+ ]
+ },
+ {
+ "plan_prefix": [],
+ "table": "t_inner_1",
+ "rows_for_plan": 3,
+ "cost_for_plan": 2.605126953,
+ "rest_of_plan": [
+ {
+ "plan_prefix": ["t_inner_1"],
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "t_inner_2",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 9,
+ "cost": 2.015380859,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 9,
+ "cost": 2.015380859,
+ "uses_join_buffering": true
+ }
+ }
+ }
+ ]
+ },
+ {
+ "plan_prefix": ["t_inner_1"],
+ "table": "t_inner_2",
"rows_for_plan": 27,
"cost_for_plan": 10.02050781
}
@@ -6671,22 +7524,6 @@ t_outer_2.a in (select t_inner_3.a from t2 t_inner_3, t1 t_inner_4) {
{
"plan_prefix": [],
"table": "t_inner_2",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 9,
- "cost": 2.015380859,
- "chosen": true
- }
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 9,
- "cost": 2.015380859,
- "uses_join_buffering": false
- }
- },
"rows_for_plan": 9,
"cost_for_plan": 3.815380859,
"pruned_by_heuristic": true
@@ -6697,30 +7534,29 @@ t_outer_2.a in (select t_inner_3.a from t2 t_inner_3, t1 t_inner_4) {
"considered_execution_plans": [
{
"plan_prefix": [],
- "table": "t_inner_4",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 3,
- "cost": 2.005126953,
- "chosen": true
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "t_inner_4",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 3,
+ "cost": 2.005126953,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 3,
+ "cost": 2.005126953,
+ "uses_join_buffering": false
+ }
}
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 3,
- "cost": 2.005126953,
- "uses_join_buffering": false
- }
- },
- "rows_for_plan": 3,
- "cost_for_plan": 2.605126953,
- "rest_of_plan": [
+ },
{
- "plan_prefix": ["t_inner_4"],
- "table": "t_inner_3",
"best_access_path": {
+ "table": "t_inner_3",
"considered_access_paths": [
{
"access_type": "scan",
@@ -6733,9 +7569,45 @@ t_outer_2.a in (select t_inner_3.a from t2 t_inner_3, t1 t_inner_4) {
"type": "scan",
"records": 9,
"cost": 2.015380859,
- "uses_join_buffering": true
+ "uses_join_buffering": false
}
- },
+ }
+ }
+ ]
+ },
+ {
+ "plan_prefix": [],
+ "table": "t_inner_4",
+ "rows_for_plan": 3,
+ "cost_for_plan": 2.605126953,
+ "rest_of_plan": [
+ {
+ "plan_prefix": ["t_inner_4"],
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "t_inner_3",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 9,
+ "cost": 2.015380859,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 9,
+ "cost": 2.015380859,
+ "uses_join_buffering": true
+ }
+ }
+ }
+ ]
+ },
+ {
+ "plan_prefix": ["t_inner_4"],
+ "table": "t_inner_3",
"rows_for_plan": 27,
"cost_for_plan": 10.02050781
}
@@ -6744,22 +7616,6 @@ t_outer_2.a in (select t_inner_3.a from t2 t_inner_3, t1 t_inner_4) {
{
"plan_prefix": [],
"table": "t_inner_3",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 9,
- "cost": 2.015380859,
- "chosen": true
- }
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 9,
- "cost": 2.015380859,
- "uses_join_buffering": false
- }
- },
"rows_for_plan": 9,
"cost_for_plan": 3.815380859,
"pruned_by_heuristic": true
@@ -6773,31 +7629,29 @@ t_outer_2.a in (select t_inner_3.a from t2 t_inner_3, t1 t_inner_4) {
"considered_execution_plans": [
{
"plan_prefix": [],
- "table": "t_outer_1",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 3,
- "cost": 2.005126953,
- "chosen": true
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "t_outer_1",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 3,
+ "cost": 2.005126953,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 3,
+ "cost": 2.005126953,
+ "uses_join_buffering": false
+ }
}
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 3,
- "cost": 2.005126953,
- "uses_join_buffering": false
- }
- },
- "rows_for_plan": 3,
- "cost_for_plan": 2.605126953,
- "semijoin_strategy_choice": [],
- "rest_of_plan": [
+ },
{
- "plan_prefix": ["t_outer_1"],
- "table": "t_inner_1",
"best_access_path": {
+ "table": "t_inner_1",
"considered_access_paths": [
{
"access_type": "scan",
@@ -6810,17 +7664,120 @@ t_outer_2.a in (select t_inner_3.a from t2 t_inner_3, t1 t_inner_4) {
"type": "scan",
"records": 3,
"cost": 2.005126953,
- "uses_join_buffering": true
+ "uses_join_buffering": false
}
- },
- "rows_for_plan": 9,
- "cost_for_plan": 6.410253906,
- "semijoin_strategy_choice": [],
- "rest_of_plan": [
+ }
+ },
+ {
+ "best_access_path": {
+ "table": "t_inner_2",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 9,
+ "cost": 2.015380859,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 9,
+ "cost": 2.015380859,
+ "uses_join_buffering": false
+ }
+ }
+ },
+ {
+ "best_access_path": {
+ "table": "t_outer_2",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 9,
+ "cost": 2.015380859,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 9,
+ "cost": 2.015380859,
+ "uses_join_buffering": false
+ }
+ }
+ },
+ {
+ "best_access_path": {
+ "table": "t_inner_4",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 3,
+ "cost": 2.005126953,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 3,
+ "cost": 2.005126953,
+ "uses_join_buffering": false
+ }
+ }
+ },
+ {
+ "best_access_path": {
+ "table": "t_inner_3",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 9,
+ "cost": 2.015380859,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 9,
+ "cost": 2.015380859,
+ "uses_join_buffering": false
+ }
+ }
+ }
+ ]
+ },
+ {
+ "plan_prefix": [],
+ "table": "t_outer_1",
+ "rows_for_plan": 3,
+ "cost_for_plan": 2.605126953,
+ "semijoin_strategy_choice": [],
+ "rest_of_plan": [
+ {
+ "plan_prefix": ["t_outer_1"],
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "t_inner_1",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 3,
+ "cost": 2.005126953,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 3,
+ "cost": 2.005126953,
+ "uses_join_buffering": true
+ }
+ }
+ },
{
- "plan_prefix": ["t_outer_1", "t_inner_1"],
- "table": "t_inner_2",
"best_access_path": {
+ "table": "t_inner_2",
"considered_access_paths": [
{
"access_type": "scan",
@@ -6835,34 +7792,137 @@ t_outer_2.a in (select t_inner_3.a from t2 t_inner_3, t1 t_inner_4) {
"cost": 2.015380859,
"uses_join_buffering": true
}
- },
- "rows_for_plan": 81,
- "cost_for_plan": 24.62563477,
- "semijoin_strategy_choice": [
- {
- "strategy": "FirstMatch",
+ }
+ },
+ {
+ "best_access_path": {
+ "table": "t_outer_2",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 9,
+ "cost": 2.015380859,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 9,
+ "cost": 2.015380859,
+ "uses_join_buffering": true
+ }
+ }
+ },
+ {
+ "best_access_path": {
+ "table": "t_inner_4",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 3,
+ "cost": 2.005126953,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
"records": 3,
- "read_time": 44.75893555
- },
+ "cost": 2.005126953,
+ "uses_join_buffering": true
+ }
+ }
+ },
+ {
+ "best_access_path": {
+ "table": "t_inner_3",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 9,
+ "cost": 2.015380859,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 9,
+ "cost": 2.015380859,
+ "uses_join_buffering": true
+ }
+ }
+ }
+ ]
+ },
+ {
+ "plan_prefix": ["t_outer_1"],
+ "table": "t_outer_2",
+ "rows_for_plan": 27,
+ "cost_for_plan": 10.02050781,
+ "semijoin_strategy_choice": [],
+ "rest_of_plan": [
+ {
+ "plan_prefix": ["t_outer_1", "t_outer_2"],
+ "get_costs_for_tables": [
{
- "strategy": "SJ-Materialization",
- "records": 3,
- "read_time": 8.125634766
+ "best_access_path": {
+ "table": "t_inner_2",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 9,
+ "cost": 2.015380859,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 9,
+ "cost": 2.015380859,
+ "uses_join_buffering": true
+ }
+ }
},
{
- "strategy": "DuplicateWeedout",
- "records": 3,
- "read_time": 37.22563477
+ "best_access_path": {
+ "table": "t_inner_1",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 3,
+ "cost": 2.005126953,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 3,
+ "cost": 2.005126953,
+ "uses_join_buffering": true
+ }
+ }
},
{
- "chosen_strategy": "SJ-Materialization"
- }
- ],
- "rest_of_plan": [
+ "best_access_path": {
+ "table": "t_inner_4",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 3,
+ "cost": 2.005126953,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 3,
+ "cost": 2.005126953,
+ "uses_join_buffering": true
+ }
+ }
+ },
{
- "plan_prefix": ["t_outer_1", "t_inner_1", "t_inner_2"],
- "table": "t_outer_2",
"best_access_path": {
+ "table": "t_inner_3",
"considered_access_paths": [
{
"access_type": "scan",
@@ -6877,20 +7937,42 @@ t_outer_2.a in (select t_inner_3.a from t2 t_inner_3, t1 t_inner_4) {
"cost": 2.015380859,
"uses_join_buffering": true
}
- },
- "rows_for_plan": 27,
- "cost_for_plan": 15.54101562,
- "semijoin_strategy_choice": [],
- "rest_of_plan": [
+ }
+ }
+ ]
+ },
+ {
+ "plan_prefix": ["t_outer_1", "t_outer_2"],
+ "table": "t_inner_1",
+ "rows_for_plan": 81,
+ "cost_for_plan": 28.22563477,
+ "semijoin_strategy_choice": [],
+ "rest_of_plan": [
+ {
+ "plan_prefix": ["t_outer_1", "t_outer_2", "t_inner_1"],
+ "get_costs_for_tables": [
{
- "plan_prefix": [
- "t_outer_1",
- "t_inner_1",
- "t_inner_2",
- "t_outer_2"
- ],
- "table": "t_inner_4",
"best_access_path": {
+ "table": "t_inner_2",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 9,
+ "cost": 2.015380859,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 9,
+ "cost": 2.015380859,
+ "uses_join_buffering": true
+ }
+ }
+ },
+ {
+ "best_access_path": {
+ "table": "t_inner_4",
"considered_access_paths": [
{
"access_type": "scan",
@@ -6905,21 +7987,85 @@ t_outer_2.a in (select t_inner_3.a from t2 t_inner_3, t1 t_inner_4) {
"cost": 2.005126953,
"uses_join_buffering": true
}
- },
- "rows_for_plan": 81,
- "cost_for_plan": 33.74614258,
- "semijoin_strategy_choice": [],
- "rest_of_plan": [
+ }
+ },
+ {
+ "best_access_path": {
+ "table": "t_inner_3",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 9,
+ "cost": 2.015380859,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 9,
+ "cost": 2.015380859,
+ "uses_join_buffering": true
+ }
+ }
+ }
+ ]
+ },
+ {
+ "plan_prefix": ["t_outer_1", "t_outer_2", "t_inner_1"],
+ "table": "t_inner_2",
+ "rows_for_plan": 729,
+ "cost_for_plan": 176.0410156,
+ "semijoin_strategy_choice": [
+ {
+ "strategy": "FirstMatch",
+ "records": 27,
+ "read_time": 389.4047852
+ },
+ {
+ "strategy": "SJ-Materialization",
+ "records": 27,
+ "read_time": 16.74101562
+ },
+ {
+ "strategy": "DuplicateWeedout",
+ "records": 27,
+ "read_time": 289.4410156
+ },
+ {
+ "chosen_strategy": "SJ-Materialization"
+ }
+ ],
+ "rest_of_plan": [
+ {
+ "plan_prefix": [
+ "t_outer_1",
+ "t_outer_2",
+ "t_inner_1",
+ "t_inner_2"
+ ],
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "t_inner_4",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 3,
+ "cost": 2.005126953,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 3,
+ "cost": 2.005126953,
+ "uses_join_buffering": true
+ }
+ }
+ },
{
- "plan_prefix": [
- "t_outer_1",
- "t_inner_1",
- "t_inner_2",
- "t_outer_2",
- "t_inner_4"
- ],
- "table": "t_inner_3",
"best_access_path": {
+ "table": "t_inner_3",
"considered_access_paths": [
{
"access_type": "scan",
@@ -6934,24 +8080,78 @@ t_outer_2.a in (select t_inner_3.a from t2 t_inner_3, t1 t_inner_4) {
"cost": 2.015380859,
"uses_join_buffering": true
}
- },
+ }
+ }
+ ]
+ },
+ {
+ "plan_prefix": [
+ "t_outer_1",
+ "t_outer_2",
+ "t_inner_1",
+ "t_inner_2"
+ ],
+ "table": "t_inner_4",
+ "rows_for_plan": 81,
+ "cost_for_plan": 34.94614258,
+ "semijoin_strategy_choice": [],
+ "rest_of_plan": [
+ {
+ "plan_prefix": [
+ "t_outer_1",
+ "t_outer_2",
+ "t_inner_1",
+ "t_inner_2",
+ "t_inner_4"
+ ],
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "t_inner_3",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 9,
+ "cost": 2.015380859,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 9,
+ "cost": 2.015380859,
+ "uses_join_buffering": true
+ }
+ }
+ }
+ ]
+ },
+ {
+ "plan_prefix": [
+ "t_outer_1",
+ "t_outer_2",
+ "t_inner_1",
+ "t_inner_2",
+ "t_inner_4"
+ ],
+ "table": "t_inner_3",
"rows_for_plan": 729,
- "cost_for_plan": 181.5615234,
+ "cost_for_plan": 182.7615234,
"semijoin_strategy_choice": [
{
"strategy": "FirstMatch",
"records": 27,
- "read_time": 394.925293
+ "read_time": 396.125293
},
{
"strategy": "SJ-Materialization",
"records": 27,
- "read_time": 22.26152344
+ "read_time": 23.46152344
},
{
"strategy": "DuplicateWeedout",
"records": 27,
- "read_time": 294.9615234
+ "read_time": 296.1615234
},
{
"chosen_strategy": "SJ-Materialization"
@@ -6963,38 +8163,125 @@ t_outer_2.a in (select t_inner_3.a from t2 t_inner_3, t1 t_inner_4) {
{
"plan_prefix": [
"t_outer_1",
+ "t_outer_2",
"t_inner_1",
- "t_inner_2",
- "t_outer_2"
+ "t_inner_2"
],
"table": "t_inner_3",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 9,
- "cost": 2.015380859,
- "chosen": true
- }
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 9,
- "cost": 2.015380859,
- "uses_join_buffering": true
- }
- },
"rows_for_plan": 243,
- "cost_for_plan": 66.15639648,
+ "cost_for_plan": 67.35639648,
"semijoin_strategy_choice": [],
- "pruned_by_cost": true
+ "pruned_by_cost": true,
+ "current_cost": 67.35639648,
+ "best_cost": 23.46152344
}
]
},
{
- "plan_prefix": ["t_outer_1", "t_inner_1", "t_inner_2"],
+ "plan_prefix": ["t_outer_1", "t_outer_2", "t_inner_1"],
"table": "t_inner_4",
+ "rows_for_plan": 243,
+ "cost_for_plan": 78.83076172,
+ "semijoin_strategy_choice": [],
+ "pruned_by_cost": true,
+ "current_cost": 78.83076172,
+ "best_cost": 23.46152344
+ },
+ {
+ "plan_prefix": ["t_outer_1", "t_outer_2", "t_inner_1"],
+ "table": "t_inner_3",
+ "rows_for_plan": 729,
+ "cost_for_plan": 176.0410156,
+ "semijoin_strategy_choice": [],
+ "pruned_by_cost": true,
+ "current_cost": 176.0410156,
+ "best_cost": 23.46152344
+ }
+ ]
+ },
+ {
+ "plan_prefix": ["t_outer_1", "t_outer_2"],
+ "table": "t_inner_2",
+ "rows_for_plan": 243,
+ "cost_for_plan": 60.63588867,
+ "semijoin_strategy_choice": [],
+ "pruned_by_cost": true,
+ "current_cost": 60.63588867,
+ "best_cost": 23.46152344
+ },
+ {
+ "plan_prefix": ["t_outer_1", "t_outer_2"],
+ "table": "t_inner_4",
+ "rows_for_plan": 81,
+ "cost_for_plan": 28.22563477,
+ "semijoin_strategy_choice": [],
+ "pruned_by_cost": true,
+ "current_cost": 28.22563477,
+ "best_cost": 23.46152344
+ },
+ {
+ "plan_prefix": ["t_outer_1", "t_outer_2"],
+ "table": "t_inner_3",
+ "rows_for_plan": 243,
+ "cost_for_plan": 60.63588867,
+ "semijoin_strategy_choice": [],
+ "pruned_by_cost": true,
+ "current_cost": 60.63588867,
+ "best_cost": 23.46152344
+ }
+ ]
+ },
+ {
+ "plan_prefix": ["t_outer_1"],
+ "table": "t_inner_1",
+ "rows_for_plan": 9,
+ "cost_for_plan": 6.410253906,
+ "semijoin_strategy_choice": [],
+ "rest_of_plan": [
+ {
+ "plan_prefix": ["t_outer_1", "t_inner_1"],
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "t_inner_2",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 9,
+ "cost": 2.015380859,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 9,
+ "cost": 2.015380859,
+ "uses_join_buffering": true
+ }
+ }
+ },
+ {
+ "best_access_path": {
+ "table": "t_outer_2",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 9,
+ "cost": 2.015380859,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 9,
+ "cost": 2.015380859,
+ "uses_join_buffering": true
+ }
+ }
+ },
+ {
"best_access_path": {
+ "table": "t_inner_4",
"considered_access_paths": [
{
"access_type": "scan",
@@ -7009,20 +8296,71 @@ t_outer_2.a in (select t_inner_3.a from t2 t_inner_3, t1 t_inner_4) {
"cost": 2.005126953,
"uses_join_buffering": true
}
- },
- "rows_for_plan": 9,
- "cost_for_plan": 11.93076172,
- "semijoin_strategy_choice": [],
- "rest_of_plan": [
+ }
+ },
+ {
+ "best_access_path": {
+ "table": "t_inner_3",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 9,
+ "cost": 2.015380859,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 9,
+ "cost": 2.015380859,
+ "uses_join_buffering": true
+ }
+ }
+ }
+ ]
+ },
+ {
+ "plan_prefix": ["t_outer_1", "t_inner_1"],
+ "table": "t_outer_2",
+ "rows_for_plan": 81,
+ "cost_for_plan": 24.62563477,
+ "semijoin_strategy_choice": [],
+ "pruned_by_cost": true,
+ "current_cost": 24.62563477,
+ "best_cost": 23.46152344
+ },
+ {
+ "plan_prefix": ["t_outer_1", "t_inner_1"],
+ "table": "t_inner_2",
+ "rows_for_plan": 81,
+ "cost_for_plan": 24.62563477,
+ "semijoin_strategy_choice": [
+ {
+ "strategy": "FirstMatch",
+ "records": 3,
+ "read_time": 44.75893555
+ },
+ {
+ "strategy": "SJ-Materialization",
+ "records": 3,
+ "read_time": 8.125634766
+ },
+ {
+ "strategy": "DuplicateWeedout",
+ "records": 3,
+ "read_time": 37.22563477
+ },
+ {
+ "chosen_strategy": "SJ-Materialization"
+ }
+ ],
+ "rest_of_plan": [
+ {
+ "plan_prefix": ["t_outer_1", "t_inner_1", "t_inner_2"],
+ "get_costs_for_tables": [
{
- "plan_prefix": [
- "t_outer_1",
- "t_inner_1",
- "t_inner_2",
- "t_inner_4"
- ],
- "table": "t_outer_2",
"best_access_path": {
+ "table": "t_outer_2",
"considered_access_paths": [
{
"access_type": "scan",
@@ -7037,21 +8375,30 @@ t_outer_2.a in (select t_inner_3.a from t2 t_inner_3, t1 t_inner_4) {
"cost": 2.015380859,
"uses_join_buffering": true
}
- },
- "rows_for_plan": 81,
- "cost_for_plan": 30.14614258,
- "semijoin_strategy_choice": [],
- "pruned_by_cost": true
+ }
+ },
+ {
+ "best_access_path": {
+ "table": "t_inner_4",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 3,
+ "cost": 2.005126953,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 3,
+ "cost": 2.005126953,
+ "uses_join_buffering": true
+ }
+ }
},
{
- "plan_prefix": [
- "t_outer_1",
- "t_inner_1",
- "t_inner_2",
- "t_inner_4"
- ],
- "table": "t_inner_3",
"best_access_path": {
+ "table": "t_inner_3",
"considered_access_paths": [
{
"access_type": "scan",
@@ -7066,33 +8413,187 @@ t_outer_2.a in (select t_inner_3.a from t2 t_inner_3, t1 t_inner_4) {
"cost": 2.015380859,
"uses_join_buffering": true
}
- },
+ }
+ }
+ ]
+ },
+ {
+ "plan_prefix": ["t_outer_1", "t_inner_1", "t_inner_2"],
+ "table": "t_outer_2",
+ "rows_for_plan": 27,
+ "cost_for_plan": 15.54101562,
+ "semijoin_strategy_choice": [],
+ "rest_of_plan": [
+ {
+ "plan_prefix": [
+ "t_outer_1",
+ "t_inner_1",
+ "t_inner_2",
+ "t_outer_2"
+ ],
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "t_inner_4",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 3,
+ "cost": 2.005126953,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 3,
+ "cost": 2.005126953,
+ "uses_join_buffering": true
+ }
+ }
+ },
+ {
+ "best_access_path": {
+ "table": "t_inner_3",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 9,
+ "cost": 2.015380859,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 9,
+ "cost": 2.015380859,
+ "uses_join_buffering": true
+ }
+ }
+ }
+ ]
+ },
+ {
+ "plan_prefix": [
+ "t_outer_1",
+ "t_inner_1",
+ "t_inner_2",
+ "t_outer_2"
+ ],
+ "table": "t_inner_4",
+ "rows_for_plan": 81,
+ "cost_for_plan": 33.74614258,
+ "semijoin_strategy_choice": [],
+ "pruned_by_cost": true,
+ "current_cost": 33.74614258,
+ "best_cost": 23.46152344
+ },
+ {
+ "plan_prefix": [
+ "t_outer_1",
+ "t_inner_1",
+ "t_inner_2",
+ "t_outer_2"
+ ],
+ "table": "t_inner_3",
+ "rows_for_plan": 243,
+ "cost_for_plan": 66.15639648,
+ "semijoin_strategy_choice": [],
+ "pruned_by_cost": true,
+ "current_cost": 66.15639648,
+ "best_cost": 23.46152344
+ }
+ ]
+ },
+ {
+ "plan_prefix": ["t_outer_1", "t_inner_1", "t_inner_2"],
+ "table": "t_inner_4",
+ "rows_for_plan": 9,
+ "cost_for_plan": 11.93076172,
+ "semijoin_strategy_choice": [],
+ "rest_of_plan": [
+ {
+ "plan_prefix": [
+ "t_outer_1",
+ "t_inner_1",
+ "t_inner_2",
+ "t_inner_4"
+ ],
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "t_outer_2",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 9,
+ "cost": 2.015380859,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 9,
+ "cost": 2.015380859,
+ "uses_join_buffering": true
+ }
+ }
+ },
+ {
+ "best_access_path": {
+ "table": "t_inner_3",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 9,
+ "cost": 2.015380859,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 9,
+ "cost": 2.015380859,
+ "uses_join_buffering": true
+ }
+ }
+ }
+ ]
+ },
+ {
+ "plan_prefix": [
+ "t_outer_1",
+ "t_inner_1",
+ "t_inner_2",
+ "t_inner_4"
+ ],
+ "table": "t_outer_2",
+ "rows_for_plan": 81,
+ "cost_for_plan": 30.14614258,
+ "semijoin_strategy_choice": [],
+ "pruned_by_cost": true,
+ "current_cost": 30.14614258,
+ "best_cost": 23.46152344
+ },
+ {
+ "plan_prefix": [
+ "t_outer_1",
+ "t_inner_1",
+ "t_inner_2",
+ "t_inner_4"
+ ],
+ "table": "t_inner_3",
"rows_for_plan": 81,
"cost_for_plan": 30.14614258,
"semijoin_strategy_choice": [],
- "pruned_by_cost": true
+ "pruned_by_cost": true,
+ "current_cost": 30.14614258,
+ "best_cost": 23.46152344
}
]
},
{
"plan_prefix": ["t_outer_1", "t_inner_1", "t_inner_2"],
"table": "t_inner_3",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 9,
- "cost": 2.015380859,
- "chosen": true
- }
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 9,
- "cost": 2.015380859,
- "uses_join_buffering": true
- }
- },
"rows_for_plan": 27,
"cost_for_plan": 15.54101562,
"semijoin_strategy_choice": [],
@@ -7102,47 +8603,7 @@ t_outer_2.a in (select t_inner_3.a from t2 t_inner_3, t1 t_inner_4) {
},
{
"plan_prefix": ["t_outer_1", "t_inner_1"],
- "table": "t_outer_2",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 9,
- "cost": 2.015380859,
- "chosen": true
- }
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 9,
- "cost": 2.015380859,
- "uses_join_buffering": true
- }
- },
- "rows_for_plan": 81,
- "cost_for_plan": 24.62563477,
- "semijoin_strategy_choice": [],
- "pruned_by_cost": true
- },
- {
- "plan_prefix": ["t_outer_1", "t_inner_1"],
"table": "t_inner_4",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 3,
- "cost": 2.005126953,
- "chosen": true
- }
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 3,
- "cost": 2.005126953,
- "uses_join_buffering": true
- }
- },
"rows_for_plan": 27,
"cost_for_plan": 13.81538086,
"semijoin_strategy_choice": [],
@@ -7151,72 +8612,18 @@ t_outer_2.a in (select t_inner_3.a from t2 t_inner_3, t1 t_inner_4) {
{
"plan_prefix": ["t_outer_1", "t_inner_1"],
"table": "t_inner_3",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 9,
- "cost": 2.015380859,
- "chosen": true
- }
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 9,
- "cost": 2.015380859,
- "uses_join_buffering": true
- }
- },
"rows_for_plan": 81,
"cost_for_plan": 24.62563477,
"semijoin_strategy_choice": [],
- "pruned_by_cost": true
+ "pruned_by_cost": true,
+ "current_cost": 24.62563477,
+ "best_cost": 23.46152344
}
]
},
{
"plan_prefix": ["t_outer_1"],
"table": "t_inner_2",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 9,
- "cost": 2.015380859,
- "chosen": true
- }
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 9,
- "cost": 2.015380859,
- "uses_join_buffering": true
- }
- },
- "rows_for_plan": 27,
- "cost_for_plan": 10.02050781,
- "semijoin_strategy_choice": [],
- "pruned_by_heuristic": true
- },
- {
- "plan_prefix": ["t_outer_1"],
- "table": "t_outer_2",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 9,
- "cost": 2.015380859,
- "chosen": true
- }
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 9,
- "cost": 2.015380859,
- "uses_join_buffering": true
- }
- },
"rows_for_plan": 27,
"cost_for_plan": 10.02050781,
"semijoin_strategy_choice": [],
@@ -7225,22 +8632,6 @@ t_outer_2.a in (select t_inner_3.a from t2 t_inner_3, t1 t_inner_4) {
{
"plan_prefix": ["t_outer_1"],
"table": "t_inner_4",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 3,
- "cost": 2.005126953,
- "chosen": true
- }
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 3,
- "cost": 2.005126953,
- "uses_join_buffering": true
- }
- },
"rows_for_plan": 9,
"cost_for_plan": 6.410253906,
"semijoin_strategy_choice": [],
@@ -7249,22 +8640,6 @@ t_outer_2.a in (select t_inner_3.a from t2 t_inner_3, t1 t_inner_4) {
{
"plan_prefix": ["t_outer_1"],
"table": "t_inner_3",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 9,
- "cost": 2.015380859,
- "chosen": true
- }
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 9,
- "cost": 2.015380859,
- "uses_join_buffering": true
- }
- },
"rows_for_plan": 27,
"cost_for_plan": 10.02050781,
"semijoin_strategy_choice": [],
@@ -7274,71 +8649,23 @@ t_outer_2.a in (select t_inner_3.a from t2 t_inner_3, t1 t_inner_4) {
},
{
"plan_prefix": [],
- "table": "t_inner_1",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 3,
- "cost": 2.005126953,
- "chosen": true
- }
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 3,
- "cost": 2.005126953,
- "uses_join_buffering": false
- }
- },
- "rows_for_plan": 3,
- "cost_for_plan": 2.605126953,
+ "table": "t_outer_2",
+ "rows_for_plan": 9,
+ "cost_for_plan": 3.815380859,
"semijoin_strategy_choice": [],
"pruned_by_heuristic": true
},
{
"plan_prefix": [],
- "table": "t_inner_2",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 9,
- "cost": 2.015380859,
- "chosen": true
- }
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 9,
- "cost": 2.015380859,
- "uses_join_buffering": false
- }
- },
- "rows_for_plan": 9,
- "cost_for_plan": 3.815380859,
+ "table": "t_inner_1",
+ "rows_for_plan": 3,
+ "cost_for_plan": 2.605126953,
"semijoin_strategy_choice": [],
"pruned_by_heuristic": true
},
{
"plan_prefix": [],
- "table": "t_outer_2",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 9,
- "cost": 2.015380859,
- "chosen": true
- }
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 9,
- "cost": 2.015380859,
- "uses_join_buffering": false
- }
- },
+ "table": "t_inner_2",
"rows_for_plan": 9,
"cost_for_plan": 3.815380859,
"semijoin_strategy_choice": [],
@@ -7347,22 +8674,6 @@ t_outer_2.a in (select t_inner_3.a from t2 t_inner_3, t1 t_inner_4) {
{
"plan_prefix": [],
"table": "t_inner_4",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 3,
- "cost": 2.005126953,
- "chosen": true
- }
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 3,
- "cost": 2.005126953,
- "uses_join_buffering": false
- }
- },
"rows_for_plan": 3,
"cost_for_plan": 2.605126953,
"semijoin_strategy_choice": [],
@@ -7371,22 +8682,6 @@ t_outer_2.a in (select t_inner_3.a from t2 t_inner_3, t1 t_inner_4) {
{
"plan_prefix": [],
"table": "t_inner_3",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 9,
- "cost": 2.015380859,
- "chosen": true
- }
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 9,
- "cost": 2.015380859,
- "uses_join_buffering": false
- }
- },
"rows_for_plan": 9,
"cost_for_plan": 3.815380859,
"semijoin_strategy_choice": [],
@@ -7423,8 +8718,8 @@ t_outer_2.a in (select t_inner_3.a from t2 t_inner_3, t1 t_inner_4) {
{
"best_join_order": [
"t_outer_1",
- "<subquery2>",
"t_outer_2",
+ "<subquery2>",
"<subquery3>"
]
},
@@ -7447,19 +8742,19 @@ t_outer_2.a in (select t_inner_3.a from t2 t_inner_3, t1 t_inner_4) {
"attached": null
},
{
- "table": "t_inner_1",
+ "table": "t_outer_2",
"attached": null
},
{
- "table": "t_inner_2",
+ "table": "t_inner_1",
"attached": null
},
{
- "table": "<subquery2>",
+ "table": "t_inner_2",
"attached": null
},
{
- "table": "t_outer_2",
+ "table": "<subquery2>",
"attached": null
},
{
@@ -8001,42 +9296,40 @@ JSON_DETAILED(JSON_EXTRACT(trace, '$**.considered_execution_plans'))
{
"plan_prefix":
[],
- "table": "A",
- "best_access_path":
- {
- "considered_access_paths":
- [
+ "get_costs_for_tables":
+ [
+ {
+ "best_access_path":
{
- "access_type": "scan",
- "resulting_rows": 5,
- "cost": 3.017089844,
- "chosen": true
+ "table": "A",
+ "considered_access_paths":
+ [
+ {
+ "access_type": "scan",
+ "resulting_rows": 5,
+ "cost": 3.017089844,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method":
+ {
+ "type": "scan",
+ "records": 5,
+ "cost": 3.017089844,
+ "uses_join_buffering": false
+ }
}
- ],
- "chosen_access_method":
- {
- "type": "scan",
- "records": 5,
- "cost": 3.017089844,
- "uses_join_buffering": false
- }
- },
- "rows_for_plan": 5,
- "cost_for_plan": 4.017089844,
- "rest_of_plan":
- [
+ },
{
- "plan_prefix":
- ["A"],
- "table": "B",
"best_access_path":
{
+ "table": "B",
"considered_access_paths":
[
{
"access_type": "scan",
"resulting_rows": 800,
- "cost": 220.9863281,
+ "cost": 44.19726562,
"chosen": true
}
],
@@ -8044,10 +9337,54 @@ JSON_DETAILED(JSON_EXTRACT(trace, '$**.considered_execution_plans'))
{
"type": "scan",
"records": 800,
- "cost": 220.9863281,
+ "cost": 44.19726562,
"uses_join_buffering": false
}
- },
+ }
+ }
+ ]
+ },
+ {
+ "plan_prefix":
+ [],
+ "table": "A",
+ "rows_for_plan": 5,
+ "cost_for_plan": 4.017089844,
+ "rest_of_plan":
+ [
+ {
+ "plan_prefix":
+ ["A"],
+ "get_costs_for_tables":
+ [
+ {
+ "best_access_path":
+ {
+ "table": "B",
+ "considered_access_paths":
+ [
+ {
+ "access_type": "scan",
+ "resulting_rows": 800,
+ "cost": 220.9863281,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method":
+ {
+ "type": "scan",
+ "records": 800,
+ "cost": 220.9863281,
+ "uses_join_buffering": false
+ }
+ }
+ }
+ ]
+ },
+ {
+ "plan_prefix":
+ ["A"],
+ "table": "B",
"rows_for_plan": 4000,
"cost_for_plan": 1025.003418
}
@@ -8057,25 +9394,6 @@ JSON_DETAILED(JSON_EXTRACT(trace, '$**.considered_execution_plans'))
"plan_prefix":
[],
"table": "B",
- "best_access_path":
- {
- "considered_access_paths":
- [
- {
- "access_type": "scan",
- "resulting_rows": 800,
- "cost": 44.19726562,
- "chosen": true
- }
- ],
- "chosen_access_method":
- {
- "type": "scan",
- "records": 800,
- "cost": 44.19726562,
- "uses_join_buffering": false
- }
- },
"rows_for_plan": 800,
"cost_for_plan": 204.1972656,
"pruned_by_heuristic": true
@@ -8095,62 +9413,104 @@ JSON_DETAILED(JSON_EXTRACT(trace, '$**.considered_execution_plans'))
{
"plan_prefix":
[],
- "table": "A",
- "best_access_path":
- {
- "considered_access_paths":
- [
- {
- "access_type": "scan",
- "resulting_rows": 10,
- "cost": 2.017089844,
- "chosen": true
- }
- ],
- "chosen_access_method":
- {
- "type": "scan",
- "records": 10,
- "cost": 2.017089844,
- "uses_join_buffering": false
- }
- },
- "rows_for_plan": 10,
- "cost_for_plan": 4.017089844,
- "rest_of_plan":
+ "get_costs_for_tables":
[
{
- "plan_prefix":
- ["A"],
- "table": "B",
"best_access_path":
{
+ "table": "A",
"considered_access_paths":
[
{
- "access_type": "ref",
- "index": "b",
- "used_range_estimates": false,
- "reason": "not available",
- "rows": 1,
- "cost": 20.00585794,
+ "access_type": "scan",
+ "resulting_rows": 10,
+ "cost": 2.017089844,
"chosen": true
- },
+ }
+ ],
+ "chosen_access_method":
+ {
+ "type": "scan",
+ "records": 10,
+ "cost": 2.017089844,
+ "uses_join_buffering": false
+ }
+ }
+ },
+ {
+ "best_access_path":
+ {
+ "table": "B",
+ "considered_access_paths":
+ [
{
"access_type": "scan",
"resulting_rows": 800,
"cost": 44.19726562,
- "chosen": false
+ "chosen": true
}
],
"chosen_access_method":
{
- "type": "ref",
- "records": 1,
- "cost": 20.00585794,
+ "type": "scan",
+ "records": 800,
+ "cost": 44.19726562,
"uses_join_buffering": false
}
- },
+ }
+ }
+ ]
+ },
+ {
+ "plan_prefix":
+ [],
+ "table": "A",
+ "rows_for_plan": 10,
+ "cost_for_plan": 4.017089844,
+ "rest_of_plan":
+ [
+ {
+ "plan_prefix":
+ ["A"],
+ "get_costs_for_tables":
+ [
+ {
+ "best_access_path":
+ {
+ "table": "B",
+ "considered_access_paths":
+ [
+ {
+ "access_type": "ref",
+ "index": "b",
+ "used_range_estimates": false,
+ "reason": "not available",
+ "rows": 1,
+ "cost": 20.00585794,
+ "chosen": true
+ },
+ {
+ "access_type": "scan",
+ "resulting_rows": 800,
+ "cost": 44.19726562,
+ "chosen": false
+ }
+ ],
+ "chosen_access_method":
+ {
+ "type": "ref",
+ "records": 1,
+ "cost": 20.00585794,
+ "uses_join_buffering": false
+ }
+ }
+ }
+ ]
+ },
+ {
+ "plan_prefix":
+ ["A"],
+ "table": "B",
"rows_for_plan": 10,
"cost_for_plan": 26.02294779,
"selectivity": 0.8,
@@ -8162,28 +9522,11 @@ JSON_DETAILED(JSON_EXTRACT(trace, '$**.considered_execution_plans'))
"plan_prefix":
[],
"table": "B",
- "best_access_path":
- {
- "considered_access_paths":
- [
- {
- "access_type": "scan",
- "resulting_rows": 800,
- "cost": 44.19726562,
- "chosen": true
- }
- ],
- "chosen_access_method":
- {
- "type": "scan",
- "records": 800,
- "cost": 44.19726562,
- "uses_join_buffering": false
- }
- },
"rows_for_plan": 800,
"cost_for_plan": 204.1972656,
- "pruned_by_cost": true
+ "pruned_by_cost": true,
+ "current_cost": 204.1972656,
+ "best_cost": 26.02294779
}
]
]
@@ -8297,66 +9640,108 @@ JSON_DETAILED(JSON_EXTRACT(trace, '$**.considered_execution_plans'))
{
"plan_prefix":
[],
- "table": "t1",
- "best_access_path":
- {
- "considered_access_paths":
- [
- {
- "access_type": "scan",
- "resulting_rows": 10,
- "cost": 2.021972656,
- "chosen": true
- }
- ],
- "chosen_access_method":
- {
- "type": "scan",
- "records": 10,
- "cost": 2.021972656,
- "uses_join_buffering": false
- }
- },
- "rows_for_plan": 10,
- "cost_for_plan": 4.021972656,
- "rest_of_plan":
+ "get_costs_for_tables":
[
{
- "plan_prefix":
- ["t1"],
- "table": "t2",
"best_access_path":
{
+ "table": "t1",
"considered_access_paths":
[
{
- "access_type": "ref",
- "index": "a",
- "used_range_estimates": false,
- "reason": "not available",
- "rows": 1,
- "cost": 20.00585794,
+ "access_type": "scan",
+ "resulting_rows": 10,
+ "cost": 2.021972656,
"chosen": true
- },
+ }
+ ],
+ "chosen_access_method":
+ {
+ "type": "scan",
+ "records": 10,
+ "cost": 2.021972656,
+ "uses_join_buffering": false
+ }
+ }
+ },
+ {
+ "best_access_path":
+ {
+ "table": "t2",
+ "considered_access_paths":
+ [
{
"access_type": "scan",
"resulting_rows": 100,
"cost": 2.219726562,
- "chosen": false
+ "chosen": true,
+ "use_tmp_table": true
}
],
"chosen_access_method":
{
- "type": "ref",
- "records": 1,
- "cost": 20.00585794,
+ "type": "scan",
+ "records": 100,
+ "cost": 2.219726562,
"uses_join_buffering": false
}
- },
+ }
+ }
+ ]
+ },
+ {
+ "plan_prefix":
+ [],
+ "table": "t1",
+ "rows_for_plan": 10,
+ "cost_for_plan": 4.021972656,
+ "rest_of_plan":
+ [
+ {
+ "plan_prefix":
+ ["t1"],
+ "get_costs_for_tables":
+ [
+ {
+ "best_access_path":
+ {
+ "table": "t2",
+ "considered_access_paths":
+ [
+ {
+ "access_type": "ref",
+ "index": "a",
+ "used_range_estimates": false,
+ "reason": "not available",
+ "rows": 1,
+ "cost": 20.00585794,
+ "chosen": true
+ },
+ {
+ "access_type": "scan",
+ "resulting_rows": 100,
+ "cost": 2.219726562,
+ "chosen": false
+ }
+ ],
+ "chosen_access_method":
+ {
+ "type": "ref",
+ "records": 1,
+ "cost": 20.00585794,
+ "uses_join_buffering": false
+ }
+ }
+ }
+ ]
+ },
+ {
+ "plan_prefix":
+ ["t1"],
+ "table": "t2",
"rows_for_plan": 10,
"cost_for_plan": 26.0278306,
- "cost_for_sorting": 10,
- "pruned_by_hanging_leaf": true
+ "cost_for_sorting": 10
}
]
},
@@ -8364,26 +9749,6 @@ JSON_DETAILED(JSON_EXTRACT(trace, '$**.considered_execution_plans'))
"plan_prefix":
[],
"table": "t2",
- "best_access_path":
- {
- "considered_access_paths":
- [
- {
- "access_type": "scan",
- "resulting_rows": 100,
- "cost": 2.219726562,
- "chosen": true,
- "use_tmp_table": true
- }
- ],
- "chosen_access_method":
- {
- "type": "scan",
- "records": 100,
- "cost": 2.219726562,
- "uses_join_buffering": false
- }
- },
"rows_for_plan": 100,
"cost_for_plan": 22.21972656,
"rest_of_plan":
@@ -8391,38 +9756,50 @@ JSON_DETAILED(JSON_EXTRACT(trace, '$**.considered_execution_plans'))
{
"plan_prefix":
["t2"],
- "table": "t1",
- "best_access_path":
- {
- "considered_access_paths":
- [
- {
- "access_type": "ref",
- "index": "a",
- "used_range_estimates": false,
- "reason": "not available",
- "rows": 1,
- "cost": 200.0585794,
- "chosen": true
- },
+ "get_costs_for_tables":
+ [
+ {
+ "best_access_path":
{
- "access_type": "scan",
- "resulting_rows": 10,
- "cost": 2.021972656,
- "chosen": true
+ "table": "t1",
+ "considered_access_paths":
+ [
+ {
+ "access_type": "ref",
+ "index": "a",
+ "used_range_estimates": false,
+ "reason": "not available",
+ "rows": 1,
+ "cost": 200.0585794,
+ "chosen": true
+ },
+ {
+ "access_type": "scan",
+ "resulting_rows": 10,
+ "cost": 2.021972656,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method":
+ {
+ "type": "scan",
+ "records": 10,
+ "cost": 2.021972656,
+ "uses_join_buffering": true
+ }
}
- ],
- "chosen_access_method":
- {
- "type": "scan",
- "records": 10,
- "cost": 2.021972656,
- "uses_join_buffering": true
}
- },
+ ]
+ },
+ {
+ "plan_prefix":
+ ["t2"],
+ "table": "t1",
"rows_for_plan": 1000,
"cost_for_plan": 224.2416992,
- "pruned_by_cost": true
+ "pruned_by_cost": true,
+ "current_cost": 224.2416992,
+ "best_cost": 36.0278306
}
]
}
@@ -8706,30 +10083,29 @@ UPDATE t, v SET t.b = t.a, t.a = v.c WHERE v.c < t.a {
"considered_execution_plans": [
{
"plan_prefix": [],
- "table": "t",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 2,
- "cost": 2.004394531,
- "chosen": true
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "t",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 2,
+ "cost": 2.004394531,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 2,
+ "cost": 2.004394531,
+ "uses_join_buffering": false
+ }
}
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 2,
- "cost": 2.004394531,
- "uses_join_buffering": false
- }
- },
- "rows_for_plan": 2,
- "cost_for_plan": 2.404394531,
- "rest_of_plan": [
+ },
{
- "plan_prefix": ["t"],
- "table": "<derived2>",
"best_access_path": {
+ "table": "<derived2>",
"considered_access_paths": [
{
"access_type": "scan",
@@ -8742,9 +10118,45 @@ UPDATE t, v SET t.b = t.a, t.a = v.c WHERE v.c < t.a {
"type": "scan",
"records": 2,
"cost": 2,
- "uses_join_buffering": true
+ "uses_join_buffering": false
}
- },
+ }
+ }
+ ]
+ },
+ {
+ "plan_prefix": [],
+ "table": "t",
+ "rows_for_plan": 2,
+ "cost_for_plan": 2.404394531,
+ "rest_of_plan": [
+ {
+ "plan_prefix": ["t"],
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "<derived2>",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 2,
+ "cost": 2,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 2,
+ "cost": 2,
+ "uses_join_buffering": true
+ }
+ }
+ }
+ ]
+ },
+ {
+ "plan_prefix": ["t"],
+ "table": "<derived2>",
"rows_for_plan": 4,
"cost_for_plan": 5.204394531
}
@@ -8753,47 +10165,41 @@ UPDATE t, v SET t.b = t.a, t.a = v.c WHERE v.c < t.a {
{
"plan_prefix": [],
"table": "<derived2>",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 2,
- "cost": 2,
- "chosen": true
- }
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 2,
- "cost": 2,
- "uses_join_buffering": false
- }
- },
"rows_for_plan": 2,
"cost_for_plan": 2.4,
"rest_of_plan": [
{
"plan_prefix": ["<derived2>"],
- "table": "t",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 2,
- "cost": 2.004394531,
- "chosen": true
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "t",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 2,
+ "cost": 2.004394531,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 2,
+ "cost": 2.004394531,
+ "uses_join_buffering": true
+ }
}
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 2,
- "cost": 2.004394531,
- "uses_join_buffering": true
}
- },
+ ]
+ },
+ {
+ "plan_prefix": ["<derived2>"],
+ "table": "t",
"rows_for_plan": 4,
"cost_for_plan": 5.204394531,
- "pruned_by_cost": true
+ "pruned_by_cost": true,
+ "current_cost": 5.204394531,
+ "best_cost": 5.204394531
}
]
}
@@ -8881,23 +10287,31 @@ UPDATE t, v SET t.b = t.a, t.a = v.c WHERE v.c < t.a {
"considered_execution_plans": [
{
"plan_prefix": [],
- "table": "union",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 2,
- "cost": 10.1,
- "chosen": true
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "union",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 2,
+ "cost": 10.1,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 2,
+ "cost": 10.1,
+ "uses_join_buffering": false
+ }
}
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 2,
- "cost": 10.1,
- "uses_join_buffering": false
}
- },
+ ]
+ },
+ {
+ "plan_prefix": [],
+ "table": "union",
"rows_for_plan": 2,
"cost_for_plan": 10.5
}
@@ -9095,23 +10509,31 @@ select count(*) from seq_1_to_10000000 {
"considered_execution_plans": [
{
"plan_prefix": [],
- "table": "seq_1_to_10000000",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 10000000,
- "cost": 10000000,
- "chosen": true
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "seq_1_to_10000000",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 10000000,
+ "cost": 10000000,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 10000000,
+ "cost": 10000000,
+ "uses_join_buffering": false
+ }
}
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 10000000,
- "cost": 10000000,
- "uses_join_buffering": false
}
- },
+ ]
+ },
+ {
+ "plan_prefix": [],
+ "table": "seq_1_to_10000000",
"rows_for_plan": 10000000,
"cost_for_plan": 12000000
}
@@ -9274,7 +10696,7 @@ set @path= (select json_search(@trace, 'one', 'no predicate for first keypart'))
set @sub_path= substr(@path, 2, locate('.best_access_path', @path)-2);
select @sub_path;
@sub_path
-$.steps[1].join_optimization.steps[4].considered_execution_plans[0].rest_of_plan[0]
+$.steps[1].join_optimization.steps[4].considered_execution_plans[1].rest_of_plan[0].get_costs_for_tables[0]
select
json_detailed(json_extract(
@trace,
@@ -9457,6 +10879,10 @@ json_detailed(json_extract(trace, '$**.choose_best_splitting'))
[
{
"considered_keys":
+ []
+ },
+ {
+ "considered_keys":
[
{
"table_name": "t2",
@@ -9475,34 +10901,44 @@ json_detailed(json_extract(trace, '$**.choose_best_splitting'))
{
"plan_prefix":
[],
- "table": "t2",
- "best_access_path":
- {
- "considered_access_paths":
- [
- {
- "access_type": "ref",
- "index": "idx_a",
- "used_range_estimates": false,
- "reason": "not available",
- "rows": 1.8367,
- "cost": 2.000585794,
- "chosen": true
- },
+ "get_costs_for_tables":
+ [
+ {
+ "best_access_path":
{
- "type": "scan",
- "chosen": false,
- "cause": "cost"
+ "table": "t2",
+ "considered_access_paths":
+ [
+ {
+ "access_type": "ref",
+ "index": "idx_a",
+ "used_range_estimates": false,
+ "reason": "not available",
+ "rows": 1.8367,
+ "cost": 2.000585794,
+ "chosen": true
+ },
+ {
+ "type": "scan",
+ "chosen": false,
+ "cause": "cost"
+ }
+ ],
+ "chosen_access_method":
+ {
+ "type": "ref",
+ "records": 1.8367,
+ "cost": 2.000585794,
+ "uses_join_buffering": false
+ }
}
- ],
- "chosen_access_method":
- {
- "type": "ref",
- "records": 1.8367,
- "cost": 2.000585794,
- "uses_join_buffering": false
}
- },
+ ]
+ },
+ {
+ "plan_prefix":
+ [],
+ "table": "t2",
"rows_for_plan": 1.8367,
"cost_for_plan": 2.367925794,
"cost_for_sorting": 1.8367
@@ -9518,10 +10954,6 @@ json_detailed(json_extract(trace, '$**.choose_best_splitting'))
"unsplit_cost": 25.72361682,
"records": 1,
"chosen": true
- },
- {
- "considered_keys":
- []
}
]
drop table t1,t2;
@@ -9568,5 +11000,5 @@ left(trace, 100)
"select_id": 1,
"steps": [
-# End of 10.6 tests
set optimizer_trace='enabled=off';
+# End of 10.6 tests
diff --git a/mysql-test/main/opt_trace.test b/mysql-test/main/opt_trace.test
index 171f5a2627f..3f1f1fd1204 100644
--- a/mysql-test/main/opt_trace.test
+++ b/mysql-test/main/opt_trace.test
@@ -1006,6 +1006,7 @@ set optimizer_trace=0;
set statement optimizer_trace=1 for select * from seq_1_to_10 where seq<2;
--echo # The trace must not be empty:
select left(trace, 100) from information_schema.optimizer_trace;
+set optimizer_trace='enabled=off';
--echo # End of 10.6 tests
-set optimizer_trace='enabled=off';
+
diff --git a/mysql-test/main/opt_trace_index_merge.result b/mysql-test/main/opt_trace_index_merge.result
index 1ef7565690e..0ffa930e2b0 100644
--- a/mysql-test/main/opt_trace_index_merge.result
+++ b/mysql-test/main/opt_trace_index_merge.result
@@ -203,23 +203,31 @@ explain select * from t1 where a=1 or b=1 {
"considered_execution_plans": [
{
"plan_prefix": [],
- "table": "t1",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "index_merge",
- "resulting_rows": 2,
- "cost": 2.484903732,
- "chosen": true
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "t1",
+ "considered_access_paths": [
+ {
+ "access_type": "index_merge",
+ "resulting_rows": 2,
+ "cost": 2.484903732,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "index_merge",
+ "records": 2,
+ "cost": 2.484903732,
+ "uses_join_buffering": false
+ }
}
- ],
- "chosen_access_method": {
- "type": "index_merge",
- "records": 2,
- "cost": 2.484903732,
- "uses_join_buffering": false
}
- },
+ ]
+ },
+ {
+ "plan_prefix": [],
+ "table": "t1",
"rows_for_plan": 2,
"cost_for_plan": 2.884903732
}
diff --git a/mysql-test/main/opt_trace_index_merge_innodb.result b/mysql-test/main/opt_trace_index_merge_innodb.result
index 590b659f40d..adb9cd5d622 100644
--- a/mysql-test/main/opt_trace_index_merge_innodb.result
+++ b/mysql-test/main/opt_trace_index_merge_innodb.result
@@ -202,33 +202,40 @@ explain select * from t1 where pk1 != 0 and key1 = 1 {
"considered_execution_plans": [
{
"plan_prefix": [],
- "table": "t1",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "ref",
- "index": "key1",
- "used_range_estimates": true,
- "rows": 1,
- "cost": 1.125146475,
- "chosen": true
- },
- {
- "type": "scan",
- "chosen": false,
- "cause": "cost"
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "t1",
+ "considered_access_paths": [
+ {
+ "access_type": "ref",
+ "index": "key1",
+ "used_range_estimates": true,
+ "rows": 1,
+ "cost": 1.125146475,
+ "chosen": true
+ },
+ {
+ "type": "scan",
+ "chosen": false,
+ "cause": "cost"
+ }
+ ],
+ "chosen_access_method": {
+ "type": "ref",
+ "records": 1,
+ "cost": 1.125146475,
+ "uses_join_buffering": false
+ }
}
- ],
- "chosen_access_method": {
- "type": "ref",
- "records": 1,
- "cost": 1.125146475,
- "uses_join_buffering": false
}
- },
+ ]
+ },
+ {
+ "plan_prefix": [],
+ "table": "t1",
"rows_for_plan": 1,
- "cost_for_plan": 1.325146475,
- "pruned_by_hanging_leaf": true
+ "cost_for_plan": 1.325146475
}
]
},
diff --git a/mysql-test/main/opt_trace_security.result b/mysql-test/main/opt_trace_security.result
index 7debcb06b46..48ca5c5e36f 100644
--- a/mysql-test/main/opt_trace_security.result
+++ b/mysql-test/main/opt_trace_security.result
@@ -89,23 +89,31 @@ select * from db1.t1 {
"considered_execution_plans": [
{
"plan_prefix": [],
- "table": "t1",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 3,
- "cost": 2.005126953,
- "chosen": true
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "t1",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 3,
+ "cost": 2.005126953,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 3,
+ "cost": 2.005126953,
+ "uses_join_buffering": false
+ }
}
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 3,
- "cost": 2.005126953,
- "uses_join_buffering": false
}
- },
+ ]
+ },
+ {
+ "plan_prefix": [],
+ "table": "t1",
"rows_for_plan": 3,
"cost_for_plan": 2.605126953
}
@@ -210,23 +218,31 @@ select * from db1.v1 {
"considered_execution_plans": [
{
"plan_prefix": [],
- "table": "t1",
- "best_access_path": {
- "considered_access_paths": [
- {
- "access_type": "scan",
- "resulting_rows": 3,
- "cost": 2.005126953,
- "chosen": true
+ "get_costs_for_tables": [
+ {
+ "best_access_path": {
+ "table": "t1",
+ "considered_access_paths": [
+ {
+ "access_type": "scan",
+ "resulting_rows": 3,
+ "cost": 2.005126953,
+ "chosen": true
+ }
+ ],
+ "chosen_access_method": {
+ "type": "scan",
+ "records": 3,
+ "cost": 2.005126953,
+ "uses_join_buffering": false
+ }
}
- ],
- "chosen_access_method": {
- "type": "scan",
- "records": 3,
- "cost": 2.005126953,
- "uses_join_buffering": false
}
- },
+ ]
+ },
+ {
+ "plan_prefix": [],
+ "table": "t1",
"rows_for_plan": 3,
"cost_for_plan": 2.605126953
}
diff --git a/mysql-test/main/opt_tvc.result b/mysql-test/main/opt_tvc.result
index 9b6d97492cd..eaf75ed7999 100644
--- a/mysql-test/main/opt_tvc.result
+++ b/mysql-test/main/opt_tvc.result
@@ -91,10 +91,10 @@ where a in (1,2) and
b in (1,5);
id select_type table type possible_keys key key_len ref rows filtered Extra
1 PRIMARY t1 ALL NULL NULL NULL NULL 6 100.00
-1 PRIMARY <subquery4> eq_ref distinct_key distinct_key 4 func 1 100.00
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1 100.00
-4 MATERIALIZED <derived5> ALL NULL NULL NULL NULL 2 100.00
+1 PRIMARY <subquery4> eq_ref distinct_key distinct_key 4 func 1 100.00
2 MATERIALIZED <derived3> ALL NULL NULL NULL NULL 2 100.00
+4 MATERIALIZED <derived5> ALL NULL NULL NULL NULL 2 100.00
5 DERIVED NULL NULL NULL NULL NULL NULL NULL NULL No tables used
3 DERIVED NULL NULL NULL NULL NULL NULL NULL NULL No tables used
Warnings:
@@ -112,10 +112,10 @@ from (values (1),(5)) as tvc_1
);
id select_type table type possible_keys key key_len ref rows filtered Extra
1 PRIMARY t1 ALL NULL NULL NULL NULL 6 100.00
-1 PRIMARY <subquery4> eq_ref distinct_key distinct_key 4 func 1 100.00
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1 100.00
-4 MATERIALIZED <derived5> ALL NULL NULL NULL NULL 2 100.00
+1 PRIMARY <subquery4> eq_ref distinct_key distinct_key 4 func 1 100.00
2 MATERIALIZED <derived3> ALL NULL NULL NULL NULL 2 100.00
+4 MATERIALIZED <derived5> ALL NULL NULL NULL NULL 2 100.00
5 DERIVED NULL NULL NULL NULL NULL NULL NULL NULL No tables used
3 DERIVED NULL NULL NULL NULL NULL NULL NULL NULL No tables used
Warnings:
diff --git a/mysql-test/main/partition_alter.result b/mysql-test/main/partition_alter.result
index 5a2d1ada4a4..29e239aa087 100644
--- a/mysql-test/main/partition_alter.result
+++ b/mysql-test/main/partition_alter.result
@@ -136,7 +136,7 @@ select * from t1 partition (p0);
pk
1
drop table t1;
-create or replace table t1 (pk int not null, x timestamp(6), unique u(pk, x)) engine innodb
+create or replace table t1 (pk int not null, x timestamp(6) not null, unique u(pk, x)) engine innodb
partition by key() partitions 2;
insert into t1 (pk, x) values (1, '2000-01-01 00:00'), (2, '2000-01-01 00:01');
# Same for NOT NULL UNIQUE KEY as this is actually primary key
@@ -147,7 +147,7 @@ select * from t1 partition (p0);
pk
1
drop table t1;
-create or replace table t1 (pk int, x timestamp(6), primary key (pk)) engine innodb
+create or replace table t1 (pk int, x timestamp(6) not null, primary key (pk)) engine innodb
partition by key(pk) partitions 2;
insert into t1 (pk, x) values (1, '2000-01-01 00:00'), (2, '2000-01-01 00:01');
# Inplace for DROP PRIMARY KEY when partitioned by explicit field list is allowed
diff --git a/mysql-test/main/partition_alter.test b/mysql-test/main/partition_alter.test
index a4f2d529109..827527695fa 100644
--- a/mysql-test/main/partition_alter.test
+++ b/mysql-test/main/partition_alter.test
@@ -126,7 +126,7 @@ alter table t1 drop primary key, drop column x, add primary key (pk);
select * from t1 partition (p0);
drop table t1;
-create or replace table t1 (pk int not null, x timestamp(6), unique u(pk, x)) engine innodb
+create or replace table t1 (pk int not null, x timestamp(6) not null, unique u(pk, x)) engine innodb
partition by key() partitions 2;
insert into t1 (pk, x) values (1, '2000-01-01 00:00'), (2, '2000-01-01 00:01');
--echo # Same for NOT NULL UNIQUE KEY as this is actually primary key
@@ -136,7 +136,7 @@ alter table t1 drop key u, drop column x, add unique (pk);
select * from t1 partition (p0);
drop table t1;
-create or replace table t1 (pk int, x timestamp(6), primary key (pk)) engine innodb
+create or replace table t1 (pk int, x timestamp(6) not null, primary key (pk)) engine innodb
partition by key(pk) partitions 2;
insert into t1 (pk, x) values (1, '2000-01-01 00:00'), (2, '2000-01-01 00:01');
--echo # Inplace for DROP PRIMARY KEY when partitioned by explicit field list is allowed
diff --git a/mysql-test/main/query_cache.result b/mysql-test/main/query_cache.result
index 3a81b648171..f78a6ccc388 100644
--- a/mysql-test/main/query_cache.result
+++ b/mysql-test/main/query_cache.result
@@ -2239,3 +2239,28 @@ DROP TABLE t;
restore defaults
SET GLOBAL query_cache_type= default;
SET GLOBAL query_cache_size=@save_query_cache_size;
+#
+# MDEV-29028: Queries using RANDOM_BYTES get stored in query cache
+#
+set @qcache= @@global.query_cache_type;
+set global query_cache_type= 1;
+set query_cache_type= 1;
+create table t1 (a int);
+insert into t1 values (1000);
+flush status;
+select * from information_schema.global_status where variable_name in ('Qcache_inserts','Qcache_hits') order by variable_name;
+VARIABLE_NAME VARIABLE_VALUE
+QCACHE_HITS 0
+QCACHE_INSERTS 0
+select * from information_schema.global_status where variable_name in ('Qcache_inserts','Qcache_hits') order by variable_name;
+VARIABLE_NAME VARIABLE_VALUE
+QCACHE_HITS 0
+QCACHE_INSERTS 0
+select random_bytes(1024) = random_bytes(1024) as improbable;
+improbable
+0
+drop table t1;
+set global query_cache_type= @qcache;
+#
+# End of 10.10 tests
+#
diff --git a/mysql-test/main/query_cache.test b/mysql-test/main/query_cache.test
index f3c8093d41b..8bc98fba982 100644
--- a/mysql-test/main/query_cache.test
+++ b/mysql-test/main/query_cache.test
@@ -1836,3 +1836,35 @@ DROP TABLE t;
--echo restore defaults
SET GLOBAL query_cache_type= default;
SET GLOBAL query_cache_size=@save_query_cache_size;
+
+--echo #
+--echo # MDEV-29028: Queries using RANDOM_BYTES get stored in query cache
+--echo #
+
+set @qcache= @@global.query_cache_type;
+set global query_cache_type= 1;
+set query_cache_type= 1;
+
+create table t1 (a int);
+insert into t1 values (1000);
+
+flush status;
+--let $v1 = `select hex(random_bytes(a)) from t1`
+select * from information_schema.global_status where variable_name in ('Qcache_inserts','Qcache_hits') order by variable_name;
+
+--let $v2 = `select hex(random_bytes(a)) from t1`
+select * from information_schema.global_status where variable_name in ('Qcache_inserts','Qcache_hits') order by variable_name;
+
+if ($v1 == $v2) {
+--echo highly improbable $v1 = $v2
+}
+
+select random_bytes(1024) = random_bytes(1024) as improbable;
+
+# Cleanup
+drop table t1;
+set global query_cache_type= @qcache;
+
+--echo #
+--echo # End of 10.10 tests
+--echo #
diff --git a/mysql-test/main/selectivity.result b/mysql-test/main/selectivity.result
index bbe7948b1b3..62466de1113 100644
--- a/mysql-test/main/selectivity.result
+++ b/mysql-test/main/selectivity.result
@@ -486,8 +486,8 @@ order by s_name
limit 10;
id select_type table type possible_keys key key_len ref rows filtered Extra
1 PRIMARY supplier ALL PRIMARY,i_s_nationkey NULL NULL NULL 10 100.00 Using where; Using filesort
-1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1 100.00
1 PRIMARY nation eq_ref PRIMARY PRIMARY 4 dbt3_s001.supplier.s_nationkey 1 100.00 Using where
+1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1 100.00
2 MATERIALIZED part ALL PRIMARY NULL NULL NULL 200 100.00 Using where
2 MATERIALIZED partsupp ref PRIMARY,i_ps_partkey,i_ps_suppkey i_ps_partkey 4 dbt3_s001.part.p_partkey 3 100.00 Using where
4 DEPENDENT SUBQUERY lineitem ref i_l_shipdate,i_l_suppkey_partkey,i_l_partkey,i_l_suppkey i_l_suppkey_partkey 10 dbt3_s001.partsupp.ps_partkey,dbt3_s001.partsupp.ps_suppkey 8 100.00 Using where
@@ -1245,11 +1245,11 @@ EXPLAIN EXTENDED
SELECT * FROM language, country, continent
WHERE country_group = lang_group AND lang_group IS NULL;
id select_type table type possible_keys key key_len ref rows filtered Extra
-1 SIMPLE country ALL NULL NULL NULL NULL 2 50.00 Using where
-1 SIMPLE language ALL NULL NULL NULL NULL 6 16.67 Using where; Using join buffer (flat, BNL join)
+1 SIMPLE language ALL NULL NULL NULL NULL 6 16.67 Using where
+1 SIMPLE country ALL NULL NULL NULL NULL 2 50.00 Using where; Using join buffer (flat, BNL join)
1 SIMPLE continent ALL NULL NULL NULL NULL 6 100.00 Using join buffer (incremental, BNL join)
Warnings:
-Note 1003 select `test`.`language`.`lang_group` AS `lang_group`,`test`.`language`.`lang` AS `lang`,`test`.`country`.`code` AS `code`,`test`.`country`.`country_group` AS `country_group`,`test`.`continent`.`cont_group` AS `cont_group`,`test`.`continent`.`cont` AS `cont` from `test`.`language` join `test`.`country` join `test`.`continent` where `test`.`language`.`lang_group` = `test`.`country`.`country_group` and `test`.`country`.`country_group` is null
+Note 1003 select `test`.`language`.`lang_group` AS `lang_group`,`test`.`language`.`lang` AS `lang`,`test`.`country`.`code` AS `code`,`test`.`country`.`country_group` AS `country_group`,`test`.`continent`.`cont_group` AS `cont_group`,`test`.`continent`.`cont` AS `cont` from `test`.`language` join `test`.`country` join `test`.`continent` where `test`.`country`.`country_group` = `test`.`language`.`lang_group` and `test`.`language`.`lang_group` is null
set optimizer_use_condition_selectivity=@save_optimizer_use_condition_selectivity;
drop table language, country, continent;
set use_stat_tables=@save_use_stat_tables;
@@ -1769,8 +1769,8 @@ explain extended select t1.b,t2.a,t3.a,t3.b from t1,t2,t3
where t1.c = t2.a AND t1.d = t3.a and t1.a = 50 and t1.b <= 100;
id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE t1 range a a 10 NULL 9 100.00 Using index condition; Using where
-1 SIMPLE t3 eq_ref PRIMARY PRIMARY 4 test.t1.d 1 100.00
1 SIMPLE t2 eq_ref PRIMARY PRIMARY 4 test.t1.c 1 100.00 Using index
+1 SIMPLE t3 eq_ref PRIMARY PRIMARY 4 test.t1.d 1 100.00
Warnings:
Note 1003 select `test`.`t1`.`b` AS `b`,`test`.`t2`.`a` AS `a`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b` from `test`.`t1` join `test`.`t2` join `test`.`t3` where `test`.`t2`.`a` = `test`.`t1`.`c` and `test`.`t3`.`a` = `test`.`t1`.`d` and `test`.`t1`.`a` = 50 and `test`.`t1`.`b` <= 100
select t1.b,t2.a,t3.a,t3.b from t1,t2,t3
@@ -1791,8 +1791,8 @@ explain extended select t1.b,t2.a,t3.a,t3.b from t1,t2,t3
where t1.c = t2.a AND t1.d = t3.a and t1.a = 50 and t1.b <= 100;
id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE t1 range a a 10 NULL 9 9.00 Using index condition; Using where
-1 SIMPLE t3 eq_ref PRIMARY PRIMARY 4 test.t1.d 1 100.00
1 SIMPLE t2 eq_ref PRIMARY PRIMARY 4 test.t1.c 1 100.00 Using index
+1 SIMPLE t3 eq_ref PRIMARY PRIMARY 4 test.t1.d 1 100.00
Warnings:
Note 1003 select `test`.`t1`.`b` AS `b`,`test`.`t2`.`a` AS `a`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b` from `test`.`t1` join `test`.`t2` join `test`.`t3` where `test`.`t2`.`a` = `test`.`t1`.`c` and `test`.`t3`.`a` = `test`.`t1`.`d` and `test`.`t1`.`a` = 50 and `test`.`t1`.`b` <= 100
select t1.b,t2.a,t3.a,t3.b from t1,t2,t3
diff --git a/mysql-test/main/selectivity_innodb.result b/mysql-test/main/selectivity_innodb.result
index f35d8b66f8f..a4366214643 100644
--- a/mysql-test/main/selectivity_innodb.result
+++ b/mysql-test/main/selectivity_innodb.result
@@ -491,8 +491,8 @@ order by s_name
limit 10;
id select_type table type possible_keys key key_len ref rows filtered Extra
1 PRIMARY supplier ALL PRIMARY,i_s_nationkey NULL NULL NULL 10 100.00 Using where; Using filesort
-1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1 100.00
1 PRIMARY nation eq_ref PRIMARY PRIMARY 4 dbt3_s001.supplier.s_nationkey 1 100.00 Using where
+1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1 100.00
2 MATERIALIZED part ALL PRIMARY NULL NULL NULL 200 100.00 Using where
2 MATERIALIZED partsupp ref PRIMARY,i_ps_partkey,i_ps_suppkey PRIMARY 4 dbt3_s001.part.p_partkey 3 100.00 Using where
4 DEPENDENT SUBQUERY lineitem ref i_l_shipdate,i_l_suppkey_partkey,i_l_partkey,i_l_suppkey i_l_suppkey_partkey 10 dbt3_s001.partsupp.ps_partkey,dbt3_s001.partsupp.ps_suppkey 8 100.00 Using where
@@ -1257,11 +1257,11 @@ EXPLAIN EXTENDED
SELECT * FROM language, country, continent
WHERE country_group = lang_group AND lang_group IS NULL;
id select_type table type possible_keys key key_len ref rows filtered Extra
-1 SIMPLE country ALL NULL NULL NULL NULL 2 50.00 Using where
-1 SIMPLE language ALL NULL NULL NULL NULL 6 16.67 Using where; Using join buffer (flat, BNL join)
+1 SIMPLE language ALL NULL NULL NULL NULL 6 16.67 Using where
+1 SIMPLE country ALL NULL NULL NULL NULL 2 50.00 Using where; Using join buffer (flat, BNL join)
1 SIMPLE continent ALL NULL NULL NULL NULL 6 100.00 Using join buffer (incremental, BNL join)
Warnings:
-Note 1003 select `test`.`language`.`lang_group` AS `lang_group`,`test`.`language`.`lang` AS `lang`,`test`.`country`.`code` AS `code`,`test`.`country`.`country_group` AS `country_group`,`test`.`continent`.`cont_group` AS `cont_group`,`test`.`continent`.`cont` AS `cont` from `test`.`language` join `test`.`country` join `test`.`continent` where `test`.`language`.`lang_group` = `test`.`country`.`country_group` and `test`.`country`.`country_group` is null
+Note 1003 select `test`.`language`.`lang_group` AS `lang_group`,`test`.`language`.`lang` AS `lang`,`test`.`country`.`code` AS `code`,`test`.`country`.`country_group` AS `country_group`,`test`.`continent`.`cont_group` AS `cont_group`,`test`.`continent`.`cont` AS `cont` from `test`.`language` join `test`.`country` join `test`.`continent` where `test`.`country`.`country_group` = `test`.`language`.`lang_group` and `test`.`language`.`lang_group` is null
set optimizer_use_condition_selectivity=@save_optimizer_use_condition_selectivity;
drop table language, country, continent;
set use_stat_tables=@save_use_stat_tables;
@@ -1781,8 +1781,8 @@ explain extended select t1.b,t2.a,t3.a,t3.b from t1,t2,t3
where t1.c = t2.a AND t1.d = t3.a and t1.a = 50 and t1.b <= 100;
id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE t1 range a a 10 NULL 11 100.00 Using index condition; Using where
-1 SIMPLE t3 eq_ref PRIMARY PRIMARY 4 test.t1.d 1 100.00
1 SIMPLE t2 eq_ref PRIMARY PRIMARY 4 test.t1.c 1 100.00 Using index
+1 SIMPLE t3 eq_ref PRIMARY PRIMARY 4 test.t1.d 1 100.00
Warnings:
Note 1003 select `test`.`t1`.`b` AS `b`,`test`.`t2`.`a` AS `a`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b` from `test`.`t1` join `test`.`t2` join `test`.`t3` where `test`.`t2`.`a` = `test`.`t1`.`c` and `test`.`t3`.`a` = `test`.`t1`.`d` and `test`.`t1`.`a` = 50 and `test`.`t1`.`b` <= 100
select t1.b,t2.a,t3.a,t3.b from t1,t2,t3
@@ -1803,8 +1803,8 @@ explain extended select t1.b,t2.a,t3.a,t3.b from t1,t2,t3
where t1.c = t2.a AND t1.d = t3.a and t1.a = 50 and t1.b <= 100;
id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE t1 range a a 10 NULL 11 11.00 Using index condition; Using where
-1 SIMPLE t3 eq_ref PRIMARY PRIMARY 4 test.t1.d 1 100.00
1 SIMPLE t2 eq_ref PRIMARY PRIMARY 4 test.t1.c 1 100.00 Using index
+1 SIMPLE t3 eq_ref PRIMARY PRIMARY 4 test.t1.d 1 100.00
Warnings:
Note 1003 select `test`.`t1`.`b` AS `b`,`test`.`t2`.`a` AS `a`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b` from `test`.`t1` join `test`.`t2` join `test`.`t3` where `test`.`t2`.`a` = `test`.`t1`.`c` and `test`.`t3`.`a` = `test`.`t1`.`d` and `test`.`t1`.`a` = 50 and `test`.`t1`.`b` <= 100
select t1.b,t2.a,t3.a,t3.b from t1,t2,t3
diff --git a/mysql-test/main/show_check.result b/mysql-test/main/show_check.result
index 26c96a5114b..35428b34599 100644
--- a/mysql-test/main/show_check.result
+++ b/mysql-test/main/show_check.result
@@ -134,7 +134,7 @@ def information_schema TABLES TABLES AUTO_INCREMENT Auto_increment 8 21 0 Y 3689
def information_schema TABLES TABLES CREATE_TIME Create_time 12 19 0 Y 4224 0 63
def information_schema TABLES TABLES UPDATE_TIME Update_time 12 19 0 Y 4224 0 63
def information_schema TABLES TABLES CHECK_TIME Check_time 12 19 0 Y 4224 0 63
-def information_schema TABLES TABLES TABLE_COLLATION Collation 253 32 0 Y 4096 0 8
+def information_schema TABLES TABLES TABLE_COLLATION Collation 253 64 0 Y 4096 0 8
def information_schema TABLES TABLES CHECKSUM Checksum 8 21 0 Y 36896 0 63
def information_schema TABLES TABLES CREATE_OPTIONS Create_options 253 2048 0 Y 4096 0 8
def information_schema TABLES TABLES TABLE_COMMENT Comment 253 2048 0 N 4097 0 8
@@ -879,17 +879,17 @@ SHOW CHARACTER SET LIKE 'utf8mb3';
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
def information_schema CHARACTER_SETS CHARACTER_SETS CHARACTER_SET_NAME Charset 253 96 7 N 4097 0 33
def information_schema CHARACTER_SETS CHARACTER_SETS DESCRIPTION Description 253 180 13 N 4097 0 33
-def information_schema CHARACTER_SETS CHARACTER_SETS DEFAULT_COLLATE_NAME Default collation 253 96 18 N 4097 0 33
+def information_schema CHARACTER_SETS CHARACTER_SETS DEFAULT_COLLATE_NAME Default collation 253 192 18 N 4097 0 33
def information_schema CHARACTER_SETS CHARACTER_SETS MAXLEN Maxlen 8 3 1 N 36865 0 63
Charset Description Default collation Maxlen
utf8mb3 UTF-8 Unicode utf8mb3_general_ci 3
----------------------------------------------------------------
SHOW COLLATION LIKE 'latin1_bin';
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
-def information_schema COLLATIONS COLLATIONS COLLATION_NAME Collation 253 96 10 N 4097 0 33
-def information_schema COLLATIONS COLLATIONS CHARACTER_SET_NAME Charset 253 96 6 N 4097 0 33
-def information_schema COLLATIONS COLLATIONS ID Id 8 11 2 N 36865 0 63
-def information_schema COLLATIONS COLLATIONS IS_DEFAULT Default 253 9 0 N 4097 0 33
+def information_schema COLLATIONS COLLATIONS COLLATION_NAME Collation 253 192 10 N 4097 0 33
+def information_schema COLLATIONS COLLATIONS CHARACTER_SET_NAME Charset 253 96 6 Y 4096 0 33
+def information_schema COLLATIONS COLLATIONS ID Id 8 11 2 Y 36864 0 63
+def information_schema COLLATIONS COLLATIONS IS_DEFAULT Default 253 9 0 Y 4096 0 33
def information_schema COLLATIONS COLLATIONS IS_COMPILED Compiled 253 9 3 N 4097 0 33
def information_schema COLLATIONS COLLATIONS SORTLEN Sortlen 8 3 1 N 36865 0 63
Collation Charset Id Default Compiled Sortlen
@@ -956,7 +956,7 @@ def information_schema TABLES TABLES TABLE_NAME TABLE_NAME 253 192 2 N 4097 0 33
def information_schema TABLES TABLES TABLE_TYPE TABLE_TYPE 253 192 10 N 4097 0 33
def information_schema TABLES TABLES ENGINE ENGINE 253 192 6 Y 4096 0 33
def information_schema TABLES TABLES ROW_FORMAT ROW_FORMAT 253 30 5 Y 4096 0 33
-def information_schema TABLES TABLES TABLE_COLLATION TABLE_COLLATION 253 96 17 Y 4096 0 33
+def information_schema TABLES TABLES TABLE_COLLATION TABLE_COLLATION 253 192 17 Y 4096 0 33
def information_schema TABLES TABLES CREATE_OPTIONS CREATE_OPTIONS 253 6144 0 Y 4096 0 33
def information_schema TABLES TABLES TABLE_COMMENT TABLE_COMMENT 253 6144 0 N 4097 0 33
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME TABLE_TYPE ENGINE ROW_FORMAT TABLE_COLLATION CREATE_OPTIONS TABLE_COMMENT
@@ -988,7 +988,7 @@ def information_schema COLUMNS COLUMNS COLUMN_DEFAULT COLUMN_DEFAULT 252 589788
def information_schema COLUMNS COLUMNS IS_NULLABLE IS_NULLABLE 253 9 2 N 4097 0 33
def information_schema COLUMNS COLUMNS DATA_TYPE DATA_TYPE 253 192 3 N 4097 0 33
def information_schema COLUMNS COLUMNS CHARACTER_SET_NAME CHARACTER_SET_NAME 253 96 0 Y 4096 0 33
-def information_schema COLUMNS COLUMNS COLLATION_NAME COLLATION_NAME 253 96 0 Y 4096 0 33
+def information_schema COLUMNS COLUMNS COLLATION_NAME COLLATION_NAME 253 192 0 Y 4096 0 33
def information_schema COLUMNS COLUMNS COLUMN_TYPE COLUMN_TYPE 252 589815 7 N 4113 0 33
def information_schema COLUMNS COLUMNS COLUMN_KEY COLUMN_KEY 253 9 3 N 4097 0 33
def information_schema COLUMNS COLUMNS EXTRA EXTRA 253 240 0 N 4097 0 33
@@ -1025,8 +1025,8 @@ def information_schema TRIGGERS TRIGGERS CREATED Created 12 22 22 Y 4224 2 63
def information_schema TRIGGERS TRIGGERS SQL_MODE sql_mode 253 24576 89 N 4097 0 33
def information_schema TRIGGERS TRIGGERS DEFINER Definer 253 1152 14 N 4097 0 33
def information_schema TRIGGERS TRIGGERS CHARACTER_SET_CLIENT character_set_client 253 96 6 N 4097 0 33
-def information_schema TRIGGERS TRIGGERS COLLATION_CONNECTION collation_connection 253 96 6 N 4097 0 33
-def information_schema TRIGGERS TRIGGERS DATABASE_COLLATION Database Collation 253 96 17 N 4097 0 33
+def information_schema TRIGGERS TRIGGERS COLLATION_CONNECTION collation_connection 253 192 6 N 4097 0 33
+def information_schema TRIGGERS TRIGGERS DATABASE_COLLATION Database Collation 253 192 17 N 4097 0 33
Trigger Event Table Statement Timing Created sql_mode Definer character_set_client collation_connection Database Collation
t1_bi INSERT t1 SET @a = 1 BEFORE # STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION root@localhost binary binary latin1_swedish_ci
----------------------------------------------------------------
@@ -1081,7 +1081,7 @@ Catalog Database Table Table_alias Column Column_alias Type Length Max length Is
def View 253 192 2 N 1 39 33
def Create View 253 3072 103 N 1 39 33
def character_set_client 253 96 6 N 1 39 33
-def collation_connection 253 96 6 N 1 39 33
+def collation_connection 253 192 6 N 1 39 33
View Create View character_set_client collation_connection
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select 1 AS `1` binary binary
----------------------------------------------------------------
@@ -1098,7 +1098,7 @@ def information_schema VIEWS VIEWS IS_UPDATABLE IS_UPDATABLE 253 9 2 N 4097 0 33
def information_schema VIEWS VIEWS DEFINER DEFINER 253 1152 14 N 4097 0 33
def information_schema VIEWS VIEWS SECURITY_TYPE SECURITY_TYPE 253 21 7 N 4097 0 33
def information_schema VIEWS VIEWS CHARACTER_SET_CLIENT CHARACTER_SET_CLIENT 253 96 6 N 4097 0 33
-def information_schema VIEWS VIEWS COLLATION_CONNECTION COLLATION_CONNECTION 253 96 6 N 4097 0 33
+def information_schema VIEWS VIEWS COLLATION_CONNECTION COLLATION_CONNECTION 253 192 6 N 4097 0 33
def information_schema VIEWS VIEWS ALGORITHM ALGORITHM 253 30 9 N 4097 0 33
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE CHARACTER_SET_CLIENT COLLATION_CONNECTION ALGORITHM
def test v1 select 1 AS `1` NONE NO root@localhost DEFINER binary binary UNDEFINED
@@ -1109,7 +1109,7 @@ def Procedure 253 192 2 N 1 39 33
def sql_mode 253 267 89 N 1 39 33
def Create Procedure 253 3072 59 Y 0 39 33
def character_set_client 253 96 6 N 1 39 33
-def collation_connection 253 96 6 N 1 39 33
+def collation_connection 253 192 6 N 1 39 33
def Database Collation 253 96 17 N 1 39 33
Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
p1 STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`root`@`localhost` PROCEDURE `p1`()
@@ -1164,7 +1164,7 @@ def Function 253 192 2 N 1 39 33
def sql_mode 253 267 89 N 1 39 33
def Create Function 253 3072 74 Y 0 39 33
def character_set_client 253 96 6 N 1 39 33
-def collation_connection 253 96 6 N 1 39 33
+def collation_connection 253 192 6 N 1 39 33
def Database Collation 253 96 17 N 1 39 33
Function sql_mode Create Function character_set_client collation_connection Database Collation
f1 STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`root`@`localhost` FUNCTION `f1`() RETURNS int(11)
diff --git a/mysql-test/main/skip_grants.result b/mysql-test/main/skip_grants.result
index f21bfa1da41..fdd7be41095 100644
--- a/mysql-test/main/skip_grants.result
+++ b/mysql-test/main/skip_grants.result
@@ -137,3 +137,17 @@ drop user baz@baz;
#
# End of 10.3 tests
#
+#
+# MDEV-24815 Show "--skip-grant-tables" state in SYSTEM VARIABLES
+#
+SELECT @@skip_grant_tables AS EXPECT_1;
+EXPECT_1
+1
+# restart: --skip-skip-grant-tables
+SELECT @@skip_grant_tables AS EXPECT_0;
+EXPECT_0
+0
+# restart: --skip-grant-tables
+#
+# End of 10.10 tests
+#
diff --git a/mysql-test/main/skip_grants.test b/mysql-test/main/skip_grants.test
index 7594285aed7..b74cd41b039 100644
--- a/mysql-test/main/skip_grants.test
+++ b/mysql-test/main/skip_grants.test
@@ -160,7 +160,7 @@ alter user baz@baz identified with mysql_native_password as password("baz");
show create user baz@baz;
drop user bar@foo;
drop user baz@baz;
-# need to restart the server to restore the --skip-grant state
+# Need to restart the server to restore the "--skip-grant-tables" state
--source include/restart_mysqld.inc
--enable_ps_protocol
@@ -168,3 +168,22 @@ drop user baz@baz;
--echo #
--echo # End of 10.3 tests
--echo #
+
+--echo #
+--echo # MDEV-24815 Show "--skip-grant-tables" state in SYSTEM VARIABLES
+--echo #
+
+SELECT @@skip_grant_tables AS EXPECT_1;
+
+# Also check when the server starts without "--skip-grant-table" option
+--let $restart_parameters = "--skip-skip-grant-tables"
+--source include/restart_mysqld.inc
+SELECT @@skip_grant_tables AS EXPECT_0;
+
+# Need to restart the server to restore the "--skip-grant-tables" state
+--let $restart_parameters = "--skip-grant-tables"
+--source include/restart_mysqld.inc
+
+--echo #
+--echo # End of 10.10 tests
+--echo #
diff --git a/mysql-test/main/sp-anchor-type.result b/mysql-test/main/sp-anchor-type.result
index 94e5182acb2..47bbed31e19 100644
--- a/mysql-test/main/sp-anchor-type.result
+++ b/mysql-test/main/sp-anchor-type.result
@@ -562,7 +562,7 @@ def tm6 tm6 11 17 15 Y 128 6 63
def dt0 dt0 12 19 19 Y 128 0 63
def dt3 dt3 12 23 23 Y 128 3 63
def dt6 dt6 12 26 26 Y 128 6 63
-def ts0 ts0 7 19 19 Y 9376 0 63
+def ts0 ts0 7 19 19 Y 160 0 63
def ts3 ts3 7 23 23 Y 160 3 63
def ts6 ts6 7 26 26 Y 160 6 63
bit6 0
diff --git a/mysql-test/main/ssl_7937,nossl.result b/mysql-test/main/ssl_7937,nossl.result
index 7ce4a754bf8..6ba2d23db7d 100644
--- a/mysql-test/main/ssl_7937,nossl.result
+++ b/mysql-test/main/ssl_7937,nossl.result
@@ -12,4 +12,10 @@ mysql --ssl-ca=cacert.pem --ssl-verify-server-cert -e "call test.have_ssl()"
ERROR 2026 (HY000): TLS/SSL error: SSL is required, but the server does not support it
mysql --ssl --ssl-verify-server-cert -e "call test.have_ssl()"
ERROR 2026 (HY000): TLS/SSL error: SSL is required, but the server does not support it
+#
+# MDEV-27105 --ssl option set as default for mariadb CLI
+#
+mysql -e "call test.have_ssl()"
+have_ssl
+no
drop procedure have_ssl;
diff --git a/mysql-test/main/ssl_7937.result b/mysql-test/main/ssl_7937.result
index 86180af3692..1ad3c2464ed 100644
--- a/mysql-test/main/ssl_7937.result
+++ b/mysql-test/main/ssl_7937.result
@@ -13,4 +13,10 @@ have_ssl
yes
mysql --ssl --ssl-verify-server-cert -e "call test.have_ssl()"
ERROR 2026 (HY000): TLS/SSL error: Failed to verify the server certificate
+#
+# MDEV-27105 --ssl option set as default for mariadb CLI
+#
+mysql -e "call test.have_ssl()"
+have_ssl
+yes
drop procedure have_ssl;
diff --git a/mysql-test/main/ssl_7937.test b/mysql-test/main/ssl_7937.test
index 58583a32ae3..be3d43ee4a0 100644
--- a/mysql-test/main/ssl_7937.test
+++ b/mysql-test/main/ssl_7937.test
@@ -23,4 +23,10 @@ create procedure have_ssl()
--echo mysql --ssl --ssl-verify-server-cert -e "call test.have_ssl()"
--replace_regex /TLS\/SSL error.*certificate[^\n]*/TLS\/SSL error: Failed to verify the server certificate/
--exec $MYSQL --ssl --ssl-verify-server-cert -e "call test.have_ssl()" 2>&1
+
+--echo #
+--echo # MDEV-27105 --ssl option set as default for mariadb CLI
+--echo #
+--echo mysql -e "call test.have_ssl()"
+--exec $MYSQL -e "call test.have_ssl()"
drop procedure have_ssl;
diff --git a/mysql-test/main/ssl_and_innodb.result b/mysql-test/main/ssl_and_innodb.result
index 71373fc4033..21d98908517 100644
--- a/mysql-test/main/ssl_and_innodb.result
+++ b/mysql-test/main/ssl_and_innodb.result
@@ -5,4 +5,6 @@ convert((SELECT des_decrypt(2,1) AS a FROM t1 WHERE @a:=1), signed) as d
FROM t1 ;
d
2
+Warnings:
+Note 1287 'des_decrypt' is deprecated and will be removed in a future release
DROP TABLE t1;
diff --git a/mysql-test/main/subselect2.result b/mysql-test/main/subselect2.result
index e6363610301..db6c85900ad 100644
--- a/mysql-test/main/subselect2.result
+++ b/mysql-test/main/subselect2.result
@@ -120,19 +120,19 @@ ALTER TABLE t2 ADD FOREIGN KEY FK_DCMNTS_FLDRS ( FOLDERID)
REFERENCES t3 (FOLDERID );
ALTER TABLE t3 ADD FOREIGN KEY FK_FLDRS_PRNTID ( PARENTID)
REFERENCES t3 (FOLDERID );
-SELECT t2.*, t4.DOCTYPENAME, t1.CONTENTSIZE,t1.MIMETYPE FROM t2 INNER JOIN t4 ON t2.DOCTYPEID = t4.DOCTYPEID LEFT OUTER JOIN t1 ON t2.DOCID = t1.DOCID WHERE t2.FOLDERID IN(SELECT t3.FOLDERID FROM t3 WHERE t3.PARENTID IN(SELECT t3.FOLDERID FROM t3 WHERE t3.PARENTID IN(SELECT t3.FOLDERID FROM t3 WHERE t3.PARENTID IN(SELECT t3.FOLDERID FROM t3 WHERE t3.PARENTID IN(SELECT t3.FOLDERID FROM t3 WHERE t3.PARENTID='2f6161e879db43c1a5b82c21ddc49089' AND t3.FOLDERNAME = 'Level1') AND t3.FOLDERNAME = 'Level2') AND t3.FOLDERNAME = 'Level3') AND t3.FOLDERNAME = 'CopiedFolder') AND t3.FOLDERNAME = 'Movie Reviews') AND t2.DOCNAME = 'Last Discussion';
+SELECT t2.*, t4.DOCTYPENAME, t1.CONTENTSIZE,t1.MIMETYPE FROM t2 INNER JOIN t4 ON t2.DOCTYPEID = t4.DOCTYPEID LEFT OUTER JOIN t1 ON t2.DOCID = t1.DOCID WHERE t2.FOLDERID IN(SELECT t3_a.FOLDERID FROM t3 as t3_a WHERE t3_a.PARENTID IN(SELECT t3_b.FOLDERID FROM t3 as t3_b WHERE t3_b.PARENTID IN(SELECT t3_c.FOLDERID FROM t3 as t3_c WHERE t3_c.PARENTID IN(SELECT t3_d.FOLDERID FROM t3 as t3_d WHERE t3_d.PARENTID IN(SELECT t3_e.FOLDERID FROM t3 as t3_e WHERE t3_e.PARENTID='2f6161e879db43c1a5b82c21ddc49089' AND t3_e.FOLDERNAME = 'Level1') AND t3_d.FOLDERNAME = 'Level2') AND t3_c.FOLDERNAME = 'Level3') AND t3_b.FOLDERNAME = 'CopiedFolder') AND t3_a.FOLDERNAME = 'Movie Reviews') AND t2.DOCNAME = 'Last Discussion';
DOCID DOCNAME DOCTYPEID FOLDERID AUTHOR CREATED TITLE SUBTITLE DOCABSTRACT PUBLISHDATE EXPIRATIONDATE LOCKEDBY STATUS PARENTDOCID REPID MODIFIED MODIFIER PUBLISHSTATUS ORIGINATOR DOCTYPENAME CONTENTSIZE MIMETYPE
c373e9f5ad07993f3859444553544200 Last Discussion c373e9f5ad079174ff17444553544200 c373e9f5ad0796c0eca4444553544200 Goldilocks 2003-06-09 11:21:06 Title: Last Discussion NULL Setting new abstract and keeping doc checked out 2003-06-09 10:51:26 2003-06-09 10:51:26 NULL NULL NULL 03eea05112b845949f3fd03278b5fe43 2003-06-09 11:21:06 admin 0 NULL Discussion NULL NULL
-EXPLAIN SELECT t2.*, t4.DOCTYPENAME, t1.CONTENTSIZE,t1.MIMETYPE FROM t2 INNER JOIN t4 ON t2.DOCTYPEID = t4.DOCTYPEID LEFT OUTER JOIN t1 ON t2.DOCID = t1.DOCID WHERE t2.FOLDERID IN(SELECT t3.FOLDERID FROM t3 WHERE t3.PARENTID IN(SELECT t3.FOLDERID FROM t3 WHERE t3.PARENTID IN(SELECT t3.FOLDERID FROM t3 WHERE t3.PARENTID IN(SELECT t3.FOLDERID FROM t3 WHERE t3.PARENTID IN(SELECT t3.FOLDERID FROM t3 WHERE t3.PARENTID='2f6161e879db43c1a5b82c21ddc49089' AND t3.FOLDERNAME = 'Level1') AND t3.FOLDERNAME = 'Level2') AND t3.FOLDERNAME = 'Level3') AND t3.FOLDERNAME = 'CopiedFolder') AND t3.FOLDERNAME = 'Movie Reviews') AND t2.DOCNAME = 'Last Discussion';
+EXPLAIN SELECT t2.*, t4.DOCTYPENAME, t1.CONTENTSIZE,t1.MIMETYPE FROM t2 INNER JOIN t4 ON t2.DOCTYPEID = t4.DOCTYPEID LEFT OUTER JOIN t1 ON t2.DOCID = t1.DOCID WHERE t2.FOLDERID IN(SELECT t3_a.FOLDERID FROM t3 as t3_a WHERE t3_a.PARENTID IN(SELECT t3_b.FOLDERID FROM t3 as t3_b WHERE t3_b.PARENTID IN(SELECT t3_c.FOLDERID FROM t3 as t3_c WHERE t3_c.PARENTID IN(SELECT t3_d.FOLDERID FROM t3 as t3_d WHERE t3_d.PARENTID IN(SELECT t3_e.FOLDERID FROM t3 as t3_e WHERE t3_e.PARENTID='2f6161e879db43c1a5b82c21ddc49089' AND t3_e.FOLDERNAME = 'Level1') AND t3_d.FOLDERNAME = 'Level2') AND t3_c.FOLDERNAME = 'Level3') AND t3_b.FOLDERNAME = 'CopiedFolder') AND t3_a.FOLDERNAME = 'Movie Reviews') AND t2.DOCNAME = 'Last Discussion';
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t2 ALL DDOCTYPEID_IDX,DFOLDERID_IDX NULL NULL NULL 9 Using where
-1 PRIMARY t1 eq_ref PRIMARY PRIMARY 34 test.t2.DOCID 1
1 PRIMARY t4 eq_ref PRIMARY PRIMARY 34 test.t2.DOCTYPEID 1
-1 PRIMARY t3 eq_ref PRIMARY,FFOLDERID_IDX,CMFLDRPARNT_IDX PRIMARY 34 test.t2.FOLDERID 1 Using where
-1 PRIMARY t3 eq_ref PRIMARY,FFOLDERID_IDX,CMFLDRPARNT_IDX PRIMARY 34 test.t3.PARENTID 1 Using where
-1 PRIMARY t3 eq_ref PRIMARY,FFOLDERID_IDX,CMFLDRPARNT_IDX PRIMARY 34 test.t3.PARENTID 1 Using where
-1 PRIMARY t3 eq_ref PRIMARY,FFOLDERID_IDX,CMFLDRPARNT_IDX PRIMARY 34 test.t3.PARENTID 1 Using where
-1 PRIMARY t3 ref|filter PRIMARY,FFOLDERID_IDX,CMFLDRPARNT_IDX FFOLDERID_IDX|CMFLDRPARNT_IDX 34|35 test.t3.PARENTID 1 (29%) Using where; Using rowid filter
+1 PRIMARY t1 eq_ref PRIMARY PRIMARY 34 test.t2.DOCID 1
+1 PRIMARY t3_a eq_ref PRIMARY,FFOLDERID_IDX,CMFLDRPARNT_IDX PRIMARY 34 test.t2.FOLDERID 1 Using where
+1 PRIMARY t3_b eq_ref PRIMARY,FFOLDERID_IDX,CMFLDRPARNT_IDX PRIMARY 34 test.t3_a.PARENTID 1 Using where
+1 PRIMARY t3_c eq_ref PRIMARY,FFOLDERID_IDX,CMFLDRPARNT_IDX PRIMARY 34 test.t3_b.PARENTID 1 Using where
+1 PRIMARY t3_d eq_ref PRIMARY,FFOLDERID_IDX,CMFLDRPARNT_IDX PRIMARY 34 test.t3_c.PARENTID 1 Using where
+1 PRIMARY t3_e ref|filter PRIMARY,FFOLDERID_IDX,CMFLDRPARNT_IDX FFOLDERID_IDX|CMFLDRPARNT_IDX 34|35 test.t3_d.PARENTID 1 (29%) Using where; Using rowid filter
drop table t1, t2, t3, t4;
CREATE TABLE t1 (a int(10) , PRIMARY KEY (a)) Engine=InnoDB;
INSERT INTO t1 VALUES (1),(2);
diff --git a/mysql-test/main/subselect2.test b/mysql-test/main/subselect2.test
index fcc39f73097..b341e516941 100644
--- a/mysql-test/main/subselect2.test
+++ b/mysql-test/main/subselect2.test
@@ -148,9 +148,9 @@ ALTER TABLE t2 ADD FOREIGN KEY FK_DCMNTS_FLDRS ( FOLDERID)
ALTER TABLE t3 ADD FOREIGN KEY FK_FLDRS_PRNTID ( PARENTID)
REFERENCES t3 (FOLDERID );
-SELECT t2.*, t4.DOCTYPENAME, t1.CONTENTSIZE,t1.MIMETYPE FROM t2 INNER JOIN t4 ON t2.DOCTYPEID = t4.DOCTYPEID LEFT OUTER JOIN t1 ON t2.DOCID = t1.DOCID WHERE t2.FOLDERID IN(SELECT t3.FOLDERID FROM t3 WHERE t3.PARENTID IN(SELECT t3.FOLDERID FROM t3 WHERE t3.PARENTID IN(SELECT t3.FOLDERID FROM t3 WHERE t3.PARENTID IN(SELECT t3.FOLDERID FROM t3 WHERE t3.PARENTID IN(SELECT t3.FOLDERID FROM t3 WHERE t3.PARENTID='2f6161e879db43c1a5b82c21ddc49089' AND t3.FOLDERNAME = 'Level1') AND t3.FOLDERNAME = 'Level2') AND t3.FOLDERNAME = 'Level3') AND t3.FOLDERNAME = 'CopiedFolder') AND t3.FOLDERNAME = 'Movie Reviews') AND t2.DOCNAME = 'Last Discussion';
+SELECT t2.*, t4.DOCTYPENAME, t1.CONTENTSIZE,t1.MIMETYPE FROM t2 INNER JOIN t4 ON t2.DOCTYPEID = t4.DOCTYPEID LEFT OUTER JOIN t1 ON t2.DOCID = t1.DOCID WHERE t2.FOLDERID IN(SELECT t3_a.FOLDERID FROM t3 as t3_a WHERE t3_a.PARENTID IN(SELECT t3_b.FOLDERID FROM t3 as t3_b WHERE t3_b.PARENTID IN(SELECT t3_c.FOLDERID FROM t3 as t3_c WHERE t3_c.PARENTID IN(SELECT t3_d.FOLDERID FROM t3 as t3_d WHERE t3_d.PARENTID IN(SELECT t3_e.FOLDERID FROM t3 as t3_e WHERE t3_e.PARENTID='2f6161e879db43c1a5b82c21ddc49089' AND t3_e.FOLDERNAME = 'Level1') AND t3_d.FOLDERNAME = 'Level2') AND t3_c.FOLDERNAME = 'Level3') AND t3_b.FOLDERNAME = 'CopiedFolder') AND t3_a.FOLDERNAME = 'Movie Reviews') AND t2.DOCNAME = 'Last Discussion';
-EXPLAIN SELECT t2.*, t4.DOCTYPENAME, t1.CONTENTSIZE,t1.MIMETYPE FROM t2 INNER JOIN t4 ON t2.DOCTYPEID = t4.DOCTYPEID LEFT OUTER JOIN t1 ON t2.DOCID = t1.DOCID WHERE t2.FOLDERID IN(SELECT t3.FOLDERID FROM t3 WHERE t3.PARENTID IN(SELECT t3.FOLDERID FROM t3 WHERE t3.PARENTID IN(SELECT t3.FOLDERID FROM t3 WHERE t3.PARENTID IN(SELECT t3.FOLDERID FROM t3 WHERE t3.PARENTID IN(SELECT t3.FOLDERID FROM t3 WHERE t3.PARENTID='2f6161e879db43c1a5b82c21ddc49089' AND t3.FOLDERNAME = 'Level1') AND t3.FOLDERNAME = 'Level2') AND t3.FOLDERNAME = 'Level3') AND t3.FOLDERNAME = 'CopiedFolder') AND t3.FOLDERNAME = 'Movie Reviews') AND t2.DOCNAME = 'Last Discussion';
+EXPLAIN SELECT t2.*, t4.DOCTYPENAME, t1.CONTENTSIZE,t1.MIMETYPE FROM t2 INNER JOIN t4 ON t2.DOCTYPEID = t4.DOCTYPEID LEFT OUTER JOIN t1 ON t2.DOCID = t1.DOCID WHERE t2.FOLDERID IN(SELECT t3_a.FOLDERID FROM t3 as t3_a WHERE t3_a.PARENTID IN(SELECT t3_b.FOLDERID FROM t3 as t3_b WHERE t3_b.PARENTID IN(SELECT t3_c.FOLDERID FROM t3 as t3_c WHERE t3_c.PARENTID IN(SELECT t3_d.FOLDERID FROM t3 as t3_d WHERE t3_d.PARENTID IN(SELECT t3_e.FOLDERID FROM t3 as t3_e WHERE t3_e.PARENTID='2f6161e879db43c1a5b82c21ddc49089' AND t3_e.FOLDERNAME = 'Level1') AND t3_d.FOLDERNAME = 'Level2') AND t3_c.FOLDERNAME = 'Level3') AND t3_b.FOLDERNAME = 'CopiedFolder') AND t3_a.FOLDERNAME = 'Movie Reviews') AND t2.DOCNAME = 'Last Discussion';
drop table t1, t2, t3, t4;
# End of 4.1 tests
diff --git a/mysql-test/main/subselect_mat.result b/mysql-test/main/subselect_mat.result
index 271b3c18a30..25465fe650a 100644
--- a/mysql-test/main/subselect_mat.result
+++ b/mysql-test/main/subselect_mat.result
@@ -2404,6 +2404,21 @@ id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t3 eq_ref PRIMARY PRIMARY 32 test.t1.assignment_group 1 Using where; Using index
2 MATERIALIZED t2 ref idx3,idx4 idx4 35 const 2 Using index condition; Using where
2 MATERIALIZED t3_i eq_ref PRIMARY PRIMARY 32 test.t2.ugroup 1 Using index condition; Using where
+set statement optimizer_prune_level=1 for explain SELECT t1.assignment_group
+FROM t1, t3
+WHERE t1.assignment_group = t3.sys_id AND
+t1.dispatch_group IN
+(SELECT t2.ugroup
+FROM t2, t3 t3_i
+WHERE t2.ugroup = t3_i.sys_id AND
+t3_i.type LIKE '59e22fb137032000158bbfc8bcbe5d52' AND
+t2.user = '86826bf03710200044e0bfc8bcbe5d79');
+id select_type table type possible_keys key key_len ref rows Extra
+1 PRIMARY <subquery3> ALL distinct_key NULL NULL NULL 2
+1 PRIMARY t1 ref idx1,idx2 idx1 35 test.t2.ugroup 2 Using where
+1 PRIMARY t3 eq_ref PRIMARY PRIMARY 32 test.t1.assignment_group 1 Using where; Using index
+3 MATERIALIZED t2 ref idx3,idx4 idx4 35 const 2 Using index condition; Using where
+3 MATERIALIZED t3_i eq_ref PRIMARY PRIMARY 32 test.t2.ugroup 1 Using index condition; Using where
SELECT t1.assignment_group
FROM t1, t3
WHERE t1.assignment_group = t3.sys_id AND
diff --git a/mysql-test/main/subselect_sj.result b/mysql-test/main/subselect_sj.result
index ea6180e9022..b69471edce3 100644
--- a/mysql-test/main/subselect_sj.result
+++ b/mysql-test/main/subselect_sj.result
@@ -1056,10 +1056,10 @@ AND t1.val IN (SELECT t3.val FROM t3
WHERE t3.val LIKE 'a%' OR t3.val LIKE 'e%');
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t1 ALL NULL NULL NULL NULL 5
-1 PRIMARY <subquery3> eq_ref distinct_key distinct_key 13 func 1
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 13 func 1
-3 MATERIALIZED t3 ALL NULL NULL NULL NULL 5 Using where
+1 PRIMARY <subquery3> eq_ref distinct_key distinct_key 13 func 1
2 MATERIALIZED t2 ALL NULL NULL NULL NULL 6 Using where
+3 MATERIALIZED t3 ALL NULL NULL NULL NULL 5 Using where
SELECT *
FROM t1
WHERE t1.val IN (SELECT t2.val FROM t2
@@ -1610,9 +1610,9 @@ A.t1field IN (SELECT C.t2field FROM t2 C
WHERE C.t2field IN (SELECT D.t2field FROM t2 D));
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY A index PRIMARY PRIMARY 4 NULL 3 Using index
-1 PRIMARY B index NULL PRIMARY 4 NULL 3 Using index; Start temporary; End temporary
1 PRIMARY C eq_ref PRIMARY PRIMARY 4 test.A.t1field 1 Using index
1 PRIMARY D eq_ref PRIMARY PRIMARY 4 test.A.t1field 1 Using index
+1 PRIMARY B index NULL PRIMARY 4 NULL 3 Using index; Start temporary; End temporary
SELECT * FROM t1 A
WHERE
A.t1field IN (SELECT A.t1field FROM t2 B) AND
@@ -2179,8 +2179,8 @@ explain
SELECT * FROM t3 WHERE t3.a IN (SELECT t5.a FROM t2, t4, t5 WHERE t2.c = t5.a AND t2.b = t5.b);
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t5 index a a 10 NULL 2 Using where; Using index; LooseScan
-1 PRIMARY t4 ALL NULL NULL NULL NULL 3
-1 PRIMARY t2 ref b b 5 test.t5.b 2 Using where; FirstMatch(t5)
+1 PRIMARY t2 ref b b 5 test.t5.b 2 Using where
+1 PRIMARY t4 ALL NULL NULL NULL NULL 3 FirstMatch(t5)
1 PRIMARY t3 ALL NULL NULL NULL NULL 15 Using where; Using join buffer (flat, BNL join)
SELECT * FROM t3 WHERE t3.a IN (SELECT t5.a FROM t2, t4, t5 WHERE t2.c = t5.a AND t2.b = t5.b);
a
@@ -2260,11 +2260,11 @@ alias1.c IN (SELECT SQ3_alias1.b
FROM t2 AS SQ3_alias1 STRAIGHT_JOIN t2 AS SQ3_alias2)
LIMIT 100;
id select_type table type possible_keys key key_len ref rows Extra
-1 PRIMARY SQ3_alias1 ALL NULL NULL NULL NULL 20 Start temporary
-1 PRIMARY <derived2> ALL NULL NULL NULL NULL 20 Using where; Using join buffer (flat, BNL join)
-1 PRIMARY SQ3_alias2 index NULL PRIMARY 4 NULL 20 Using index; End temporary
+1 PRIMARY <derived2> ALL NULL NULL NULL NULL 20
1 PRIMARY alias2 ALL NULL NULL NULL NULL 20 Using join buffer (flat, BNL join)
1 PRIMARY t2 ALL NULL NULL NULL NULL 20 Using join buffer (flat, BNL join)
+1 PRIMARY SQ3_alias1 ALL NULL NULL NULL NULL 20 Using where; Start temporary
+1 PRIMARY SQ3_alias2 index NULL PRIMARY 4 NULL 20 Using index; End temporary
2 DERIVED t2 ALL NULL NULL NULL NULL 20
create table t3 as
SELECT
diff --git a/mysql-test/main/subselect_sj2.result b/mysql-test/main/subselect_sj2.result
index 727dfcc4c40..6643aa13f83 100644
--- a/mysql-test/main/subselect_sj2.result
+++ b/mysql-test/main/subselect_sj2.result
@@ -466,11 +466,20 @@ where t0.a in ( select t1.a from t1,t2 where t2.a=t0.a and
t1.b=t2.b);
id select_type table type possible_keys key key_len ref rows filtered Extra
1 PRIMARY t0 ALL NULL NULL NULL NULL 5 100.00 Using where
-1 PRIMARY t1 ref a a 5 test.t0.a 1 100.00 Start temporary
-1 PRIMARY t2 eq_ref PRIMARY PRIMARY 4 test.t0.a 1 100.00 Using where; End temporary
+1 PRIMARY t2 eq_ref PRIMARY PRIMARY 4 test.t0.a 1 100.00
+1 PRIMARY t1 ref a a 5 test.t0.a 1 100.00 Using where; FirstMatch(t2)
Warnings:
Note 1276 Field or reference 'test.t0.a' of SELECT #2 was resolved in SELECT #1
-Note 1003 select `test`.`t0`.`a` AS `a` from `test`.`t2` semi join (`test`.`t1`) join `test`.`t0` where `test`.`t1`.`a` = `test`.`t0`.`a` and `test`.`t2`.`a` = `test`.`t0`.`a` and `test`.`t2`.`b` = `test`.`t1`.`b`
+Note 1003 select `test`.`t0`.`a` AS `a` from `test`.`t2` semi join (`test`.`t1`) join `test`.`t0` where `test`.`t2`.`a` = `test`.`t0`.`a` and `test`.`t1`.`a` = `test`.`t0`.`a` and `test`.`t1`.`b` = `test`.`t2`.`b`
+select * from t0
+where t0.a in ( select t1.a from t1,t2 where t2.a=t0.a and
+t1.b=t2.b);
+a
+0
+1
+2
+3
+4
update t1 set a=3, b=11 where a=4;
update t2 set b=11 where a=3;
select * from t0 where t0.a in
@@ -759,10 +768,14 @@ c2 in (select 1 from t3, t2) and
c1 in (select convert(c6,char(1)) from t2);
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t2 ALL NULL NULL NULL NULL 1 Using where
-1 PRIMARY <subquery3> eq_ref distinct_key distinct_key 4 func 1 Using where
1 PRIMARY t2 ALL NULL NULL NULL NULL 1
-1 PRIMARY t3 ALL NULL NULL NULL NULL 2 FirstMatch((sj-nest))
+1 PRIMARY t3 ALL NULL NULL NULL NULL 2 FirstMatch(t2)
+1 PRIMARY <subquery3> eq_ref distinct_key distinct_key 4 func 1 Using where
3 MATERIALIZED t2 ALL NULL NULL NULL NULL 1
+select 1 from t2 where
+c2 in (select 1 from t3, t2) and
+c1 in (select convert(c6,char(1)) from t2);
+1
drop table t2, t3;
#
# BUG#761598: InnoDB: Error: row_search_for_mysql() is called without ha_innobase::external_lock() in maria-5.3
diff --git a/mysql-test/main/subselect_sj2.test b/mysql-test/main/subselect_sj2.test
index be2d91571e7..5b9ec409c5d 100644
--- a/mysql-test/main/subselect_sj2.test
+++ b/mysql-test/main/subselect_sj2.test
@@ -604,6 +604,9 @@ insert into t2 select * from t1;
explain extended select * from t0
where t0.a in ( select t1.a from t1,t2 where t2.a=t0.a and
t1.b=t2.b);
+select * from t0
+where t0.a in ( select t1.a from t1,t2 where t2.a=t0.a and
+t1.b=t2.b);
#
# BUG#46556 "Returning incorrect, empty results for some IN subqueries
@@ -934,6 +937,9 @@ create table t2 (c1 tinytext,c2 text,c6 timestamp) engine=innodb;
explain select 1 from t2 where
c2 in (select 1 from t3, t2) and
c1 in (select convert(c6,char(1)) from t2);
+select 1 from t2 where
+ c2 in (select 1 from t3, t2) and
+ c1 in (select convert(c6,char(1)) from t2);
drop table t2, t3;
diff --git a/mysql-test/main/subselect_sj2_jcl6.result b/mysql-test/main/subselect_sj2_jcl6.result
index 66882150ebd..83abb68ca51 100644
--- a/mysql-test/main/subselect_sj2_jcl6.result
+++ b/mysql-test/main/subselect_sj2_jcl6.result
@@ -477,11 +477,20 @@ where t0.a in ( select t1.a from t1,t2 where t2.a=t0.a and
t1.b=t2.b);
id select_type table type possible_keys key key_len ref rows filtered Extra
1 PRIMARY t0 ALL NULL NULL NULL NULL 5 100.00 Using where
-1 PRIMARY t1 ref a a 5 test.t0.a 1 100.00 Start temporary; Using join buffer (flat, BKA join); Key-ordered Rowid-ordered scan
-1 PRIMARY t2 eq_ref PRIMARY PRIMARY 4 test.t0.a 1 100.00 Using where; End temporary; Using join buffer (incremental, BKA join); Key-ordered Rowid-ordered scan
+1 PRIMARY t2 eq_ref PRIMARY PRIMARY 4 test.t0.a 1 100.00 Using join buffer (flat, BKA join); Key-ordered Rowid-ordered scan
+1 PRIMARY t1 ref a a 5 test.t0.a 1 100.00 Using where; FirstMatch(t2); Using join buffer (incremental, BKA join); Key-ordered Rowid-ordered scan
Warnings:
Note 1276 Field or reference 'test.t0.a' of SELECT #2 was resolved in SELECT #1
-Note 1003 select `test`.`t0`.`a` AS `a` from `test`.`t2` semi join (`test`.`t1`) join `test`.`t0` where `test`.`t1`.`a` = `test`.`t0`.`a` and `test`.`t2`.`a` = `test`.`t0`.`a` and `test`.`t2`.`b` = `test`.`t1`.`b`
+Note 1003 select `test`.`t0`.`a` AS `a` from `test`.`t2` semi join (`test`.`t1`) join `test`.`t0` where `test`.`t2`.`a` = `test`.`t0`.`a` and `test`.`t1`.`a` = `test`.`t0`.`a` and `test`.`t1`.`b` = `test`.`t2`.`b`
+select * from t0
+where t0.a in ( select t1.a from t1,t2 where t2.a=t0.a and
+t1.b=t2.b);
+a
+0
+1
+2
+3
+4
update t1 set a=3, b=11 where a=4;
update t2 set b=11 where a=3;
# Not anymore:
@@ -772,10 +781,14 @@ c2 in (select 1 from t3, t2) and
c1 in (select convert(c6,char(1)) from t2);
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t2 ALL NULL NULL NULL NULL 1 Using where
-1 PRIMARY <subquery3> eq_ref distinct_key distinct_key 4 func 1 Using where
1 PRIMARY t2 ALL NULL NULL NULL NULL 1 Using join buffer (flat, BNL join)
-1 PRIMARY t3 ALL NULL NULL NULL NULL 2 FirstMatch((sj-nest)); Using join buffer (incremental, BNL join)
+1 PRIMARY t3 ALL NULL NULL NULL NULL 2 FirstMatch(t2); Using join buffer (incremental, BNL join)
+1 PRIMARY <subquery3> eq_ref distinct_key distinct_key 4 func 1 Using where
3 MATERIALIZED t2 ALL NULL NULL NULL NULL 1
+select 1 from t2 where
+c2 in (select 1 from t3, t2) and
+c1 in (select convert(c6,char(1)) from t2);
+1
drop table t2, t3;
#
# BUG#761598: InnoDB: Error: row_search_for_mysql() is called without ha_innobase::external_lock() in maria-5.3
diff --git a/mysql-test/main/subselect_sj2_mat.result b/mysql-test/main/subselect_sj2_mat.result
index fe6bc0b9cbe..5d7e7d49da2 100644
--- a/mysql-test/main/subselect_sj2_mat.result
+++ b/mysql-test/main/subselect_sj2_mat.result
@@ -468,11 +468,20 @@ where t0.a in ( select t1.a from t1,t2 where t2.a=t0.a and
t1.b=t2.b);
id select_type table type possible_keys key key_len ref rows filtered Extra
1 PRIMARY t0 ALL NULL NULL NULL NULL 5 100.00 Using where
-1 PRIMARY t1 ref a a 5 test.t0.a 1 100.00 Start temporary
-1 PRIMARY t2 eq_ref PRIMARY PRIMARY 4 test.t0.a 1 100.00 Using where; End temporary
+1 PRIMARY t2 eq_ref PRIMARY PRIMARY 4 test.t0.a 1 100.00
+1 PRIMARY t1 ref a a 5 test.t0.a 1 100.00 Using where; FirstMatch(t2)
Warnings:
Note 1276 Field or reference 'test.t0.a' of SELECT #2 was resolved in SELECT #1
-Note 1003 select `test`.`t0`.`a` AS `a` from `test`.`t2` semi join (`test`.`t1`) join `test`.`t0` where `test`.`t1`.`a` = `test`.`t0`.`a` and `test`.`t2`.`a` = `test`.`t0`.`a` and `test`.`t2`.`b` = `test`.`t1`.`b`
+Note 1003 select `test`.`t0`.`a` AS `a` from `test`.`t2` semi join (`test`.`t1`) join `test`.`t0` where `test`.`t2`.`a` = `test`.`t0`.`a` and `test`.`t1`.`a` = `test`.`t0`.`a` and `test`.`t1`.`b` = `test`.`t2`.`b`
+select * from t0
+where t0.a in ( select t1.a from t1,t2 where t2.a=t0.a and
+t1.b=t2.b);
+a
+0
+1
+2
+3
+4
update t1 set a=3, b=11 where a=4;
update t2 set b=11 where a=3;
select * from t0 where t0.a in
@@ -761,10 +770,14 @@ c2 in (select 1 from t3, t2) and
c1 in (select convert(c6,char(1)) from t2);
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t2 ALL NULL NULL NULL NULL 1 Using where
-1 PRIMARY <subquery3> eq_ref distinct_key distinct_key 4 func 1 Using where
1 PRIMARY t2 ALL NULL NULL NULL NULL 1
-1 PRIMARY t3 ALL NULL NULL NULL NULL 2 FirstMatch((sj-nest))
+1 PRIMARY t3 ALL NULL NULL NULL NULL 2 FirstMatch(t2)
+1 PRIMARY <subquery3> eq_ref distinct_key distinct_key 4 func 1 Using where
3 MATERIALIZED t2 ALL NULL NULL NULL NULL 1
+select 1 from t2 where
+c2 in (select 1 from t3, t2) and
+c1 in (select convert(c6,char(1)) from t2);
+1
drop table t2, t3;
#
# BUG#761598: InnoDB: Error: row_search_for_mysql() is called without ha_innobase::external_lock() in maria-5.3
@@ -1481,8 +1494,8 @@ t3.cat_id IN (SELECT cat_id FROM t2) AND
t3.sack_id = 33479 AND t3.kit_id = 6;
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t3 ref PRIMARY PRIMARY 5 const,const 5 Using index
-1 PRIMARY t2 ref cat_id cat_id 4 test.t3.cat_id 2 Using where; Using index; FirstMatch(t3)
-1 PRIMARY t1 eq_ref PRIMARY PRIMARY 4 test.t2.cat_id 1 Using where; Using index
+1 PRIMARY t1 eq_ref PRIMARY PRIMARY 4 test.t3.cat_id 1 Using index
+1 PRIMARY t2 ref cat_id cat_id 4 test.t3.cat_id 2 Using where; Using index; FirstMatch(t1)
SELECT count(*) FROM t1, t3
WHERE t1.cat_id = t3.cat_id AND
t3.cat_id IN (SELECT cat_id FROM t2) AND
@@ -1497,8 +1510,8 @@ t3.cat_id IN (SELECT cat_id FROM t4) AND
t3.sack_id = 33479 AND t3.kit_id = 6;
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t3 ref PRIMARY PRIMARY 5 const,const 5 Using index
-1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1
1 PRIMARY t1 eq_ref PRIMARY PRIMARY 4 test.t3.cat_id 1 Using index
+1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1
2 MATERIALIZED t4 index cat_id cat_id 4 NULL 19 Using index
SELECT count(*) FROM t1, t3
WHERE t1.cat_id = t3.cat_id AND
@@ -1513,8 +1526,8 @@ t3.cat_id IN (SELECT cat_id FROM t2) AND
t3.sack_id = 33479 AND t3.kit_id = 6;
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t3 ref PRIMARY PRIMARY 5 const,const 5 Using index
-1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1 Using where
1 PRIMARY t1 eq_ref PRIMARY PRIMARY 4 test.t3.cat_id 1 Using index
+1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1 Using where
2 MATERIALIZED t2 index cat_id cat_id 4 NULL 19 Using index
SELECT count(*) FROM t1, t3
WHERE t1.cat_id = t3.cat_id AND
@@ -1542,9 +1555,9 @@ EXPLAIN EXTENDED
SELECT * FROM t1 LEFT JOIN t2 ON ( b1 = a2 )
WHERE ( b1, b1 ) IN ( SELECT a4, b4 FROM t3, t4);
id select_type table type possible_keys key key_len ref rows filtered Extra
-1 PRIMARY t3 ALL NULL NULL NULL NULL 2 100.00 Start temporary
-1 PRIMARY t4 ALL NULL NULL NULL NULL 3 100.00 Using where; Using join buffer (flat, BNL join)
-1 PRIMARY t1 ref idx idx 2 test.t4.a4 1 100.00 Using index; End temporary
+1 PRIMARY t4 ALL NULL NULL NULL NULL 3 100.00 Using where; Start temporary
+1 PRIMARY t1 ref idx idx 2 test.t4.a4 1 100.00 Using index
+1 PRIMARY t3 ALL NULL NULL NULL NULL 2 100.00 End temporary; Using join buffer (flat, BNL join)
1 PRIMARY t2 ALL NULL NULL NULL NULL 3 100.00 Using where; Using join buffer (flat, BNL join)
Warnings:
Note 1003 select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`b1` AS `b1`,`test`.`t2`.`a2` AS `a2`,`test`.`t2`.`b2` AS `b2` from `test`.`t1` semi join (`test`.`t3` join `test`.`t4`) left join `test`.`t2` on(`test`.`t2`.`a2` = `test`.`t4`.`a4`) where `test`.`t4`.`b4` = `test`.`t4`.`a4` and `test`.`t1`.`b1` = `test`.`t4`.`a4`
@@ -1560,13 +1573,12 @@ EXPLAIN EXTENDED
SELECT * FROM t1 LEFT JOIN t2 ON ( b1 = a2 )
WHERE ( b1, b1 ) IN ( SELECT a4, b4 FROM t3, t4);
id select_type table type possible_keys key key_len ref rows filtered Extra
-1 PRIMARY <subquery2> ALL distinct_key NULL NULL NULL 3 100.00
+1 PRIMARY t4 ALL NULL NULL NULL NULL 3 100.00 Using where; Start temporary
1 PRIMARY t1 ref idx idx 2 test.t4.a4 1 100.00 Using index
+1 PRIMARY t3 ALL NULL NULL NULL NULL 2 100.00 End temporary; Using join buffer (flat, BNL join)
1 PRIMARY t2 ALL NULL NULL NULL NULL 3 100.00 Using where; Using join buffer (flat, BNL join)
-2 MATERIALIZED t3 ALL NULL NULL NULL NULL 2 100.00
-2 MATERIALIZED t4 ALL NULL NULL NULL NULL 3 100.00 Using where; Using join buffer (flat, BNL join)
Warnings:
-Note 1003 select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`b1` AS `b1`,`test`.`t2`.`a2` AS `a2`,`test`.`t2`.`b2` AS `b2` from `test`.`t1` semi join (`test`.`t3` join `test`.`t4`) left join `test`.`t2` on(`test`.`t1`.`b1` = `test`.`t4`.`a4` and `test`.`t2`.`a2` = `test`.`t4`.`a4`) where `test`.`t4`.`b4` = `test`.`t4`.`a4` and `test`.`t1`.`b1` = `test`.`t4`.`a4`
+Note 1003 select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`b1` AS `b1`,`test`.`t2`.`a2` AS `a2`,`test`.`t2`.`b2` AS `b2` from `test`.`t1` semi join (`test`.`t3` join `test`.`t4`) left join `test`.`t2` on(`test`.`t2`.`a2` = `test`.`t4`.`a4`) where `test`.`t4`.`b4` = `test`.`t4`.`a4` and `test`.`t1`.`b1` = `test`.`t4`.`a4`
SELECT * FROM t1 LEFT JOIN t2 ON ( b1 = a2 )
WHERE ( b1, b1 ) IN ( SELECT a4, b4 FROM t3, t4);
a1 b1 a2 b2
@@ -1827,8 +1839,8 @@ SELECT t2.id FROM t2,t1
WHERE t2.id IN (SELECT t3.ref_id FROM t3,t1 where t3.id = t1.id) and t2.id = t1.id;
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t2 index PRIMARY PRIMARY 4 NULL 30 Using index
-1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1 Using where
1 PRIMARY t1 eq_ref PRIMARY PRIMARY 4 test.t2.id 1 Using index
+1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1 Using where
2 MATERIALIZED t3 ALL NULL NULL NULL NULL 14
2 MATERIALIZED t1 eq_ref PRIMARY PRIMARY 4 test.t3.id 1 Using index
SELECT t2.id FROM t2,t1
@@ -1933,19 +1945,19 @@ AND t3.id_product IN (SELECT id_product FROM t2 t2_4 WHERE t2_4.id_t2 = 34 OR t2
AND t3.id_product IN (SELECT id_product FROM t2 t2_5 WHERE t2_5.id_t2 = 29 OR t2_5.id_t2 = 28 OR t2_5.id_t2 = 26);
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t3 index PRIMARY PRIMARY 4 NULL 18 Using index
-1 PRIMARY <subquery5> eq_ref distinct_key distinct_key 4 func 1 Using where
+1 PRIMARY <subquery3> eq_ref distinct_key distinct_key 4 func 1 Using where
1 PRIMARY t5 ALL NULL NULL NULL NULL 18 Using where; Using join buffer (flat, BNL join)
-1 PRIMARY <subquery6> eq_ref distinct_key distinct_key 4 func 1 Using where
1 PRIMARY t4 eq_ref PRIMARY PRIMARY 8 test.t3.id_product,const 1 Using where; Using index
-1 PRIMARY <subquery3> eq_ref distinct_key distinct_key 4 func 1 Using where
-1 PRIMARY t1 index NULL PRIMARY 8 NULL 73 Using where; Using index; Using join buffer (flat, BNL join)
-1 PRIMARY <subquery4> eq_ref distinct_key distinct_key 4 func 1 Using where
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1 Using where
-5 MATERIALIZED t2_4 range id_t2,id_product id_t2 5 NULL 18 Using index condition; Using where
-6 MATERIALIZED t2_5 range id_t2,id_product id_t2 5 NULL 31 Using index condition; Using where
+1 PRIMARY <subquery4> eq_ref distinct_key distinct_key 4 func 1 Using where
+1 PRIMARY <subquery5> eq_ref distinct_key distinct_key 4 func 1 Using where
+1 PRIMARY t1 index NULL PRIMARY 8 NULL 73 Using where; Using index; Using join buffer (flat, BNL join)
+1 PRIMARY <subquery6> eq_ref distinct_key distinct_key 4 func 1 Using where
3 MATERIALIZED t2_2 ref id_t2,id_product id_t2 5 const 12
-4 MATERIALIZED t2_3 range id_t2,id_product id_t2 5 NULL 33 Using index condition; Using where
2 MATERIALIZED t2_1 ALL id_t2,id_product NULL NULL NULL 223 Using where
+4 MATERIALIZED t2_3 range id_t2,id_product id_t2 5 NULL 33 Using index condition; Using where
+5 MATERIALIZED t2_4 range id_t2,id_product id_t2 5 NULL 18 Using index condition; Using where
+6 MATERIALIZED t2_5 range id_t2,id_product id_t2 5 NULL 31 Using index condition; Using where
set optimizer_switch='rowid_filter=default';
drop table t1,t2,t3,t4,t5;
set global innodb_stats_persistent= @innodb_stats_persistent_save;
diff --git a/mysql-test/main/subselect_sj_jcl6.result b/mysql-test/main/subselect_sj_jcl6.result
index bddf3fdd268..6efa3fc12b1 100644
--- a/mysql-test/main/subselect_sj_jcl6.result
+++ b/mysql-test/main/subselect_sj_jcl6.result
@@ -1067,10 +1067,10 @@ AND t1.val IN (SELECT t3.val FROM t3
WHERE t3.val LIKE 'a%' OR t3.val LIKE 'e%');
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t1 ALL NULL NULL NULL NULL 5
-1 PRIMARY <subquery3> eq_ref distinct_key distinct_key 13 func 1
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 13 func 1
-3 MATERIALIZED t3 ALL NULL NULL NULL NULL 5 Using where
+1 PRIMARY <subquery3> eq_ref distinct_key distinct_key 13 func 1
2 MATERIALIZED t2 ALL NULL NULL NULL NULL 6 Using where
+3 MATERIALIZED t3 ALL NULL NULL NULL NULL 5 Using where
SELECT *
FROM t1
WHERE t1.val IN (SELECT t2.val FROM t2
@@ -1621,9 +1621,9 @@ A.t1field IN (SELECT C.t2field FROM t2 C
WHERE C.t2field IN (SELECT D.t2field FROM t2 D));
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY A index PRIMARY PRIMARY 4 NULL 3 Using index
-1 PRIMARY B index NULL PRIMARY 4 NULL 3 Using index; FirstMatch(A); Using join buffer (flat, BNL join)
1 PRIMARY C eq_ref PRIMARY PRIMARY 4 test.A.t1field 1 Using index
1 PRIMARY D eq_ref PRIMARY PRIMARY 4 test.A.t1field 1 Using index
+1 PRIMARY B index NULL PRIMARY 4 NULL 3 Using index; FirstMatch(D); Using join buffer (flat, BNL join)
SELECT * FROM t1 A
WHERE
A.t1field IN (SELECT A.t1field FROM t2 B) AND
@@ -2190,8 +2190,8 @@ explain
SELECT * FROM t3 WHERE t3.a IN (SELECT t5.a FROM t2, t4, t5 WHERE t2.c = t5.a AND t2.b = t5.b);
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t5 index a a 10 NULL 2 Using where; Using index; LooseScan
-1 PRIMARY t4 ALL NULL NULL NULL NULL 3
-1 PRIMARY t2 ref b b 5 test.t5.b 2 Using where; FirstMatch(t5)
+1 PRIMARY t2 ref b b 5 test.t5.b 2 Using where
+1 PRIMARY t4 ALL NULL NULL NULL NULL 3 FirstMatch(t5)
1 PRIMARY t3 ALL NULL NULL NULL NULL 15 Using where; Using join buffer (flat, BNL join)
SELECT * FROM t3 WHERE t3.a IN (SELECT t5.a FROM t2, t4, t5 WHERE t2.c = t5.a AND t2.b = t5.b);
a
@@ -2271,11 +2271,11 @@ alias1.c IN (SELECT SQ3_alias1.b
FROM t2 AS SQ3_alias1 STRAIGHT_JOIN t2 AS SQ3_alias2)
LIMIT 100;
id select_type table type possible_keys key key_len ref rows Extra
-1 PRIMARY SQ3_alias1 ALL NULL NULL NULL NULL 20 Start temporary
-1 PRIMARY <derived2> ALL NULL NULL NULL NULL 20 Using where; Using join buffer (flat, BNL join)
-1 PRIMARY SQ3_alias2 index NULL PRIMARY 4 NULL 20 Using index; End temporary; Using join buffer (incremental, BNL join)
-1 PRIMARY alias2 ALL NULL NULL NULL NULL 20 Using join buffer (incremental, BNL join)
+1 PRIMARY <derived2> ALL NULL NULL NULL NULL 20
+1 PRIMARY alias2 ALL NULL NULL NULL NULL 20 Using join buffer (flat, BNL join)
1 PRIMARY t2 ALL NULL NULL NULL NULL 20 Using join buffer (incremental, BNL join)
+1 PRIMARY SQ3_alias1 ALL NULL NULL NULL NULL 20 Using where; Start temporary; Using join buffer (incremental, BNL join)
+1 PRIMARY SQ3_alias2 index NULL PRIMARY 4 NULL 20 Using index; End temporary; Using join buffer (incremental, BNL join)
2 DERIVED t2 ALL NULL NULL NULL NULL 20
create table t3 as
SELECT
@@ -3382,8 +3382,8 @@ SELECT * FROM t0 WHERE t0.a IN
(SELECT t1.a FROM t1, t2 WHERE t2.a=t0.a AND t1.b=t2.b);
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t0 ALL NULL NULL NULL NULL 5 Using where
-1 PRIMARY t1 ref a a 5 test.t0.a 1 Start temporary; Using join buffer (flat, BKA join); Key-ordered Rowid-ordered scan
-1 PRIMARY t2 eq_ref PRIMARY PRIMARY 4 test.t0.a 1 Using where; End temporary; Using join buffer (incremental, BKA join); Key-ordered Rowid-ordered scan
+1 PRIMARY t2 eq_ref PRIMARY PRIMARY 4 test.t0.a 1 Using join buffer (flat, BKA join); Key-ordered Rowid-ordered scan
+1 PRIMARY t1 ref a a 5 test.t0.a 1 Using where; Start temporary; End temporary; Using join buffer (incremental, BKA join); Key-ordered Rowid-ordered scan
SELECT * FROM t0 WHERE t0.a IN
(SELECT t1.a FROM t1, t2 WHERE t2.a=t0.a AND t1.b=t2.b);
a
diff --git a/mysql-test/main/subselect_sj_mat.result b/mysql-test/main/subselect_sj_mat.result
index 2cc35c1896c..61a7ff25569 100644
--- a/mysql-test/main/subselect_sj_mat.result
+++ b/mysql-test/main/subselect_sj_mat.result
@@ -332,11 +332,11 @@ where (a1, a2) in (select b1, b2 from t2 where b1 > '0') and
where (c1, c2) in (select b1, b2 from t2i where b2 > '0'));
id select_type table type possible_keys key key_len ref rows filtered Extra
1 PRIMARY t1 ALL NULL NULL NULL NULL 3 100.00
-1 PRIMARY <subquery3> eq_ref distinct_key distinct_key 16 func,func 1 100.00
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 16 func,func 1 100.00
+1 PRIMARY <subquery3> eq_ref distinct_key distinct_key 16 func,func 1 100.00
+2 MATERIALIZED t2 ALL NULL NULL NULL NULL 5 100.00 Using where
3 MATERIALIZED t3 ALL NULL NULL NULL NULL 4 100.00 Using where
3 MATERIALIZED t2i ref it2i1,it2i2,it2i3 it2i3 18 test.t3.c1,test.t3.c2 1 100.00 Using index
-2 MATERIALIZED t2 ALL NULL NULL NULL NULL 5 100.00 Using where
Warnings:
Note 1003 select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2` from `test`.`t1` semi join (`test`.`t2`) semi join (`test`.`t2i` join `test`.`t3`) where `test`.`t2i`.`b1` = `test`.`t3`.`c1` and `test`.`t2i`.`b2` = `test`.`t3`.`c2` and `test`.`t2`.`b1` > '0' and `test`.`t3`.`c2` > '0'
select * from t1
@@ -353,11 +353,11 @@ where (a1, a2) in (select b1, b2 from t2i where b1 > '0') and
where (c1, c2) in (select b1, b2 from t2i where b2 > '0'));
id select_type table type possible_keys key key_len ref rows filtered Extra
1 PRIMARY t1i range it1i1,it1i2,it1i3 # # # 3 100.00 #
-1 PRIMARY <subquery3> eq_ref distinct_key # # # 1 100.00 #
1 PRIMARY <subquery2> eq_ref distinct_key # # # 1 100.00 #
+1 PRIMARY <subquery3> eq_ref distinct_key # # # 1 100.00 #
+2 MATERIALIZED t2i range it2i1,it2i2,it2i3 # # # 5 100.00 #
3 MATERIALIZED t3i range it3i1,it3i2,it3i3 # # # 4 100.00 #
3 MATERIALIZED t2i ref it2i1,it2i2,it2i3 # # # 1 100.00 #
-2 MATERIALIZED t2i range it2i1,it2i2,it2i3 # # # 5 100.00 #
Warnings:
Note 1003 select `test`.`t1i`.`a1` AS `a1`,`test`.`t1i`.`a2` AS `a2` from `test`.`t1i` semi join (`test`.`t2i`) semi join (`test`.`t2i` join `test`.`t3i`) where `test`.`t2i`.`b1` = `test`.`t3i`.`c1` and `test`.`t2i`.`b2` = `test`.`t3i`.`c2` and `test`.`t2i`.`b1` > '0' and `test`.`t3i`.`c2` > '0'
select * from t1i
@@ -376,11 +376,11 @@ b2 in (select c2 from t3 where c2 LIKE '%03')) and
where (c1, c2) in (select b1, b2 from t2i where b2 > '0'));
id select_type table type possible_keys key key_len ref rows filtered Extra
1 PRIMARY t1 ALL NULL NULL NULL NULL 3 100.00
-1 PRIMARY <subquery5> eq_ref distinct_key distinct_key 16 func,func 1 100.00
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 16 func,func 1 100.00
+1 PRIMARY <subquery5> eq_ref distinct_key distinct_key 16 func,func 1 100.00
+2 MATERIALIZED t2 ALL NULL NULL NULL NULL 5 100.00 Using where
5 MATERIALIZED t3 ALL NULL NULL NULL NULL 4 100.00 Using where
5 MATERIALIZED t2i ref it2i1,it2i2,it2i3 it2i3 18 test.t3.c1,test.t3.c2 1 100.00 Using index
-2 MATERIALIZED t2 ALL NULL NULL NULL NULL 5 100.00 Using where
4 MATERIALIZED t3 ALL NULL NULL NULL NULL 4 100.00 Using where
3 MATERIALIZED t3 ALL NULL NULL NULL NULL 4 100.00 Using where
Warnings:
@@ -402,15 +402,15 @@ b2 in (select c2 from t3 t3b where c2 LIKE '%03')) and
where (c1, c2) in (select b1, b2 from t2i where b2 > '0'));
id select_type table type possible_keys key key_len ref rows filtered Extra
1 PRIMARY t1 ALL NULL NULL NULL NULL 3 100.00
-1 PRIMARY <subquery5> eq_ref distinct_key distinct_key 16 func,func 1 100.00
1 PRIMARY t2 ALL NULL NULL NULL NULL 5 100.00 Using where; Start temporary; End temporary; Using join buffer (flat, BNL join)
+1 PRIMARY <subquery5> eq_ref distinct_key distinct_key 16 func,func 1 100.00
5 MATERIALIZED t3c ALL NULL NULL NULL NULL 4 100.00 Using where
5 MATERIALIZED t2i ref it2i1,it2i2,it2i3 it2i3 18 test.t3c.c1,test.t3c.c2 1 100.00 Using index
4 MATERIALIZED t3b ALL NULL NULL NULL NULL 4 100.00 Using where
3 DEPENDENT SUBQUERY t3a ALL NULL NULL NULL NULL 4 100.00 Using where
Warnings:
Note 1276 Field or reference 'test.t1.a1' of SELECT #3 was resolved in SELECT #1
-Note 1003 /* select#1 */ select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2` from `test`.`t1` semi join (`test`.`t2`) semi join (`test`.`t2i` join `test`.`t3` `t3c`) where `test`.`t2i`.`b1` = `test`.`t3c`.`c1` and `test`.`t2`.`b1` = `test`.`t1`.`a1` and `test`.`t2i`.`b2` = `test`.`t3c`.`c2` and `test`.`t2`.`b2` = `test`.`t1`.`a2` and (<expr_cache><`test`.`t2`.`b2`,`test`.`t1`.`a1`>(<in_optimizer>(`test`.`t2`.`b2`,<exists>(/* select#3 */ select `test`.`t3a`.`c2` from `test`.`t3` `t3a` where `test`.`t3a`.`c1` = `test`.`t1`.`a1` and <cache>(`test`.`t2`.`b2`) = `test`.`t3a`.`c2`))) or <expr_cache><`test`.`t2`.`b2`>(<in_optimizer>(`test`.`t2`.`b2`,`test`.`t2`.`b2` in ( <materialize> (/* select#4 */ select `test`.`t3b`.`c2` from `test`.`t3` `t3b` where `test`.`t3b`.`c2` like '%03' ), <primary_index_lookup>(`test`.`t2`.`b2` in <temporary table> on distinct_key where `test`.`t2`.`b2` = `<subquery4>`.`c2`))))) and `test`.`t3c`.`c2` > '0'
+Note 1003 /* select#1 */ select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2` from `test`.`t1` semi join (`test`.`t2`) semi join (`test`.`t2i` join `test`.`t3` `t3c`) where `test`.`t2`.`b1` = `test`.`t1`.`a1` and `test`.`t2i`.`b1` = `test`.`t3c`.`c1` and `test`.`t2`.`b2` = `test`.`t1`.`a2` and `test`.`t2i`.`b2` = `test`.`t3c`.`c2` and (<expr_cache><`test`.`t2`.`b2`,`test`.`t1`.`a1`>(<in_optimizer>(`test`.`t2`.`b2`,<exists>(/* select#3 */ select `test`.`t3a`.`c2` from `test`.`t3` `t3a` where `test`.`t3a`.`c1` = `test`.`t1`.`a1` and <cache>(`test`.`t2`.`b2`) = `test`.`t3a`.`c2`))) or <expr_cache><`test`.`t2`.`b2`>(<in_optimizer>(`test`.`t2`.`b2`,`test`.`t2`.`b2` in ( <materialize> (/* select#4 */ select `test`.`t3b`.`c2` from `test`.`t3` `t3b` where `test`.`t3b`.`c2` like '%03' ), <primary_index_lookup>(`test`.`t2`.`b2` in <temporary table> on distinct_key where `test`.`t2`.`b2` = `<subquery4>`.`c2`))))) and `test`.`t3c`.`c2` > '0'
select * from t1
where (a1, a2) in (select b1, b2 from t2
where b2 in (select c2 from t3 t3a where c1 = a1) or
@@ -435,19 +435,19 @@ where (a1, a2) in (select b1, b2 from t2i where b1 > '0') and
where (c1, c2) in (select b1, b2 from t2i where b2 > '0')));
id select_type table type possible_keys key key_len ref rows filtered Extra
1 PRIMARY t1 ALL NULL # # # 3 100.00 #
-1 PRIMARY <subquery5> eq_ref distinct_key # # # 1 100.00 #
1 PRIMARY <subquery2> eq_ref distinct_key # # # 1 100.00 #
+1 PRIMARY <subquery5> eq_ref distinct_key # # # 1 100.00 #
+2 MATERIALIZED t2 ALL NULL # # # 5 100.00 #
5 MATERIALIZED t3 ALL NULL # # # 4 100.00 #
5 MATERIALIZED t2i ref it2i1,it2i2,it2i3 # # # 1 100.00 #
-2 MATERIALIZED t2 ALL NULL # # # 5 100.00 #
4 MATERIALIZED t3 ALL NULL # # # 4 100.00 #
3 MATERIALIZED t3 ALL NULL # # # 4 100.00 #
7 UNION t1i range it1i1,it1i2,it1i3 # # # 3 100.00 #
-7 UNION <subquery9> eq_ref distinct_key # # # 1 100.00 #
7 UNION <subquery8> eq_ref distinct_key # # # 1 100.00 #
+7 UNION <subquery9> eq_ref distinct_key # # # 1 100.00 #
+8 MATERIALIZED t2i range it2i1,it2i2,it2i3 # # # 5 100.00 #
9 MATERIALIZED t3i range it3i1,it3i2,it3i3 # # # 4 100.00 #
9 MATERIALIZED t2i ref it2i1,it2i2,it2i3 # # # 1 100.00 #
-8 MATERIALIZED t2i range it2i1,it2i2,it2i3 # # # 5 100.00 #
NULL UNION RESULT <union1,7> ALL NULL # # # NULL NULL #
Warnings:
Note 1003 (/* select#1 */ select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2` from `test`.`t1` semi join (`test`.`t2`) semi join (`test`.`t2i` join `test`.`t3`) where `test`.`t2i`.`b1` = `test`.`t3`.`c1` and `test`.`t2i`.`b2` = `test`.`t3`.`c2` and (<expr_cache><`test`.`t2`.`b2`>(<in_optimizer>(`test`.`t2`.`b2`,`test`.`t2`.`b2` in ( <materialize> (/* select#3 */ select `test`.`t3`.`c2` from `test`.`t3` where `test`.`t3`.`c2` like '%02' ), <primary_index_lookup>(`test`.`t2`.`b2` in <temporary table> on distinct_key where `test`.`t2`.`b2` = `<subquery3>`.`c2`)))) or <expr_cache><`test`.`t2`.`b2`>(<in_optimizer>(`test`.`t2`.`b2`,`test`.`t2`.`b2` in ( <materialize> (/* select#4 */ select `test`.`t3`.`c2` from `test`.`t3` where `test`.`t3`.`c2` like '%03' ), <primary_index_lookup>(`test`.`t2`.`b2` in <temporary table> on distinct_key where `test`.`t2`.`b2` = `<subquery4>`.`c2`))))) and `test`.`t3`.`c2` > '0') union (/* select#7 */ select `test`.`t1i`.`a1` AS `a1`,`test`.`t1i`.`a2` AS `a2` from `test`.`t1i` semi join (`test`.`t2i`) semi join (`test`.`t2i` join `test`.`t3i`) where `test`.`t2i`.`b1` = `test`.`t3i`.`c1` and `test`.`t2i`.`b2` = `test`.`t3i`.`c2` and `test`.`t2i`.`b1` > '0' and `test`.`t3i`.`c2` > '0')
@@ -542,15 +542,15 @@ b2 in (select c2 from t3 t3b where c2 LIKE '%03')) and
where (c1, c2) in (select b1, b2 from t2i where b2 > '0' or b2 = a2));
id select_type table type possible_keys key key_len ref rows filtered Extra
1 PRIMARY t1 ALL NULL NULL NULL NULL 3 100.00 Using where
+1 PRIMARY t2 ALL NULL NULL NULL NULL 5 100.00 Using where; Start temporary; End temporary; Using join buffer (flat, BNL join)
1 PRIMARY t2i ref it2i1,it2i2,it2i3 it2i3 18 test.t1.a1,test.t1.a2 1 100.00 Using index; Start temporary
1 PRIMARY t3c ALL NULL NULL NULL NULL 4 100.00 Using where; End temporary; Using join buffer (flat, BNL join)
-1 PRIMARY t2 ALL NULL NULL NULL NULL 5 100.00 Using where; Start temporary; End temporary; Using join buffer (flat, BNL join)
4 MATERIALIZED t3b ALL NULL NULL NULL NULL 4 100.00 Using where
3 DEPENDENT SUBQUERY t3a ALL NULL NULL NULL NULL 4 100.00 Using where
Warnings:
Note 1276 Field or reference 'test.t1.a1' of SELECT #3 was resolved in SELECT #1
Note 1276 Field or reference 'test.t1.a2' of SELECT #6 was resolved in SELECT #1
-Note 1003 /* select#1 */ select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2` from `test`.`t1` semi join (`test`.`t2`) semi join (`test`.`t2i` join `test`.`t3` `t3c`) where `test`.`t2i`.`b1` = `test`.`t1`.`a1` and `test`.`t3c`.`c1` = `test`.`t1`.`a1` and `test`.`t2`.`b1` = `test`.`t1`.`a1` and `test`.`t2i`.`b2` = `test`.`t1`.`a2` and `test`.`t3c`.`c2` = `test`.`t1`.`a2` and `test`.`t2`.`b2` = `test`.`t1`.`a2` and (<expr_cache><`test`.`t2`.`b2`,`test`.`t1`.`a1`>(<in_optimizer>(`test`.`t2`.`b2`,<exists>(/* select#3 */ select `test`.`t3a`.`c2` from `test`.`t3` `t3a` where `test`.`t3a`.`c1` = `test`.`t1`.`a1` and <cache>(`test`.`t2`.`b2`) = `test`.`t3a`.`c2`))) or <expr_cache><`test`.`t2`.`b2`>(<in_optimizer>(`test`.`t2`.`b2`,`test`.`t2`.`b2` in ( <materialize> (/* select#4 */ select `test`.`t3b`.`c2` from `test`.`t3` `t3b` where `test`.`t3b`.`c2` like '%03' ), <primary_index_lookup>(`test`.`t2`.`b2` in <temporary table> on distinct_key where `test`.`t2`.`b2` = `<subquery4>`.`c2`)))))
+Note 1003 /* select#1 */ select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2` from `test`.`t1` semi join (`test`.`t2`) semi join (`test`.`t2i` join `test`.`t3` `t3c`) where `test`.`t2`.`b1` = `test`.`t1`.`a1` and `test`.`t2i`.`b1` = `test`.`t1`.`a1` and `test`.`t3c`.`c1` = `test`.`t1`.`a1` and `test`.`t2`.`b2` = `test`.`t1`.`a2` and `test`.`t2i`.`b2` = `test`.`t1`.`a2` and `test`.`t3c`.`c2` = `test`.`t1`.`a2` and (<expr_cache><`test`.`t2`.`b2`,`test`.`t1`.`a1`>(<in_optimizer>(`test`.`t2`.`b2`,<exists>(/* select#3 */ select `test`.`t3a`.`c2` from `test`.`t3` `t3a` where `test`.`t3a`.`c1` = `test`.`t1`.`a1` and <cache>(`test`.`t2`.`b2`) = `test`.`t3a`.`c2`))) or <expr_cache><`test`.`t2`.`b2`>(<in_optimizer>(`test`.`t2`.`b2`,`test`.`t2`.`b2` in ( <materialize> (/* select#4 */ select `test`.`t3b`.`c2` from `test`.`t3` `t3b` where `test`.`t3b`.`c2` like '%03' ), <primary_index_lookup>(`test`.`t2`.`b2` in <temporary table> on distinct_key where `test`.`t2`.`b2` = `<subquery4>`.`c2`)))))
explain extended
select * from t1 where (a1, a2) in (select '1 - 01', '2 - 01');
id select_type table type possible_keys key key_len ref rows filtered Extra
@@ -2446,6 +2446,21 @@ id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t3 eq_ref PRIMARY PRIMARY 32 test.t1.assignment_group 1 Using where; Using index
2 MATERIALIZED t2 ref idx3,idx4 idx4 35 const 2 Using index condition; Using where
2 MATERIALIZED t3_i eq_ref PRIMARY PRIMARY 32 test.t2.ugroup 1 Using index condition; Using where
+set statement optimizer_prune_level=1 for explain SELECT t1.assignment_group
+FROM t1, t3
+WHERE t1.assignment_group = t3.sys_id AND
+t1.dispatch_group IN
+(SELECT t2.ugroup
+FROM t2, t3 t3_i
+WHERE t2.ugroup = t3_i.sys_id AND
+t3_i.type LIKE '59e22fb137032000158bbfc8bcbe5d52' AND
+t2.user = '86826bf03710200044e0bfc8bcbe5d79');
+id select_type table type possible_keys key key_len ref rows Extra
+1 PRIMARY <subquery3> ALL distinct_key NULL NULL NULL 2
+1 PRIMARY t1 ref idx1,idx2 idx1 35 test.t2.ugroup 2 Using where
+1 PRIMARY t3 eq_ref PRIMARY PRIMARY 32 test.t1.assignment_group 1 Using where; Using index
+3 MATERIALIZED t2 ref idx3,idx4 idx4 35 const 2 Using index condition; Using where
+3 MATERIALIZED t3_i eq_ref PRIMARY PRIMARY 32 test.t2.ugroup 1 Using index condition; Using where
SELECT t1.assignment_group
FROM t1, t3
WHERE t1.assignment_group = t3.sys_id AND
diff --git a/mysql-test/main/subselect_sj_mat.test b/mysql-test/main/subselect_sj_mat.test
index 6b343900dca..6a9c78adc52 100644
--- a/mysql-test/main/subselect_sj_mat.test
+++ b/mysql-test/main/subselect_sj_mat.test
@@ -2171,6 +2171,7 @@ eval $q;
set optimizer_switch='materialization=on';
eval explain $q;
+eval set statement optimizer_prune_level=1 for explain $q;
eval $q;
DROP TABLE t1,t2,t3;
diff --git a/mysql-test/main/subselect_sj_nonmerged.result b/mysql-test/main/subselect_sj_nonmerged.result
index 422af02c31a..a3e6c493930 100644
--- a/mysql-test/main/subselect_sj_nonmerged.result
+++ b/mysql-test/main/subselect_sj_nonmerged.result
@@ -77,8 +77,8 @@ explain select * from t4 where
t4.a in (select max(t2.a) from t1, t2 group by t2.b) and
t4.b in (select max(t2.a) from t1, t2 group by t2.b);
id select_type table type possible_keys key key_len ref rows Extra
-1 PRIMARY <subquery3> ALL distinct_key NULL NULL NULL 5
-1 PRIMARY <subquery2> ALL distinct_key NULL NULL NULL 5 Using join buffer (flat, BNL join)
+1 PRIMARY <subquery2> ALL distinct_key NULL NULL NULL 5
+1 PRIMARY <subquery3> ALL distinct_key NULL NULL NULL 5 Using join buffer (flat, BNL join)
1 PRIMARY t4 eq_ref a a 10 <subquery2>.max(t2.a),<subquery3>.max(t2.a) 1
3 MATERIALIZED t2 ALL NULL NULL NULL NULL 5 Using temporary
3 MATERIALIZED t1 ALL NULL NULL NULL NULL 10 Using join buffer (flat, BNL join)
diff --git a/mysql-test/main/system_mysql_db.result b/mysql-test/main/system_mysql_db.result
index 2c97d0c6809..b89381da5c3 100644
--- a/mysql-test/main/system_mysql_db.result
+++ b/mysql-test/main/system_mysql_db.result
@@ -154,8 +154,8 @@ proc CREATE TABLE `proc` (
`sql_mode` set('REAL_AS_FLOAT','PIPES_AS_CONCAT','ANSI_QUOTES','IGNORE_SPACE','IGNORE_BAD_TABLE_OPTIONS','ONLY_FULL_GROUP_BY','NO_UNSIGNED_SUBTRACTION','NO_DIR_IN_CREATE','POSTGRESQL','ORACLE','MSSQL','DB2','MAXDB','NO_KEY_OPTIONS','NO_TABLE_OPTIONS','NO_FIELD_OPTIONS','MYSQL323','MYSQL40','ANSI','NO_AUTO_VALUE_ON_ZERO','NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLES','STRICT_ALL_TABLES','NO_ZERO_IN_DATE','NO_ZERO_DATE','INVALID_DATES','ERROR_FOR_DIVISION_BY_ZERO','TRADITIONAL','NO_AUTO_CREATE_USER','HIGH_NOT_PRECEDENCE','NO_ENGINE_SUBSTITUTION','PAD_CHAR_TO_FULL_LENGTH','EMPTY_STRING_IS_NULL','SIMULTANEOUS_ASSIGNMENT','TIME_ROUND_FRACTIONAL') NOT NULL DEFAULT '',
`comment` text CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL,
`character_set_client` char(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
- `collation_connection` char(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
- `db_collation` char(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
+ `collation_connection` char(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
+ `db_collation` char(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
`body_utf8` longblob DEFAULT NULL,
`aggregate` enum('NONE','GROUP') NOT NULL DEFAULT 'NONE',
PRIMARY KEY (`db`,`name`,`type`)
@@ -182,8 +182,8 @@ event CREATE TABLE `event` (
`originator` int(10) unsigned NOT NULL,
`time_zone` char(64) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL DEFAULT 'SYSTEM',
`character_set_client` char(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
- `collation_connection` char(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
- `db_collation` char(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
+ `collation_connection` char(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
+ `db_collation` char(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
`body_utf8` longblob DEFAULT NULL,
PRIMARY KEY (`db`,`name`)
) ENGINE=Aria DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci PAGE_CHECKSUM=1 TRANSACTIONAL=1 COMMENT='Events'
diff --git a/mysql-test/main/system_mysql_db_fix40123.result b/mysql-test/main/system_mysql_db_fix40123.result
index 57845704fa1..31a334878ec 100644
--- a/mysql-test/main/system_mysql_db_fix40123.result
+++ b/mysql-test/main/system_mysql_db_fix40123.result
@@ -14,8 +14,8 @@ Warning 1280 Name 'Host' ignored for PRIMARY key.
INSERT INTO user VALUES ('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0);
INSERT INTO user VALUES ('localhost','','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0);
CREATE TABLE func ( name char(64) binary DEFAULT '' NOT NULL, ret tinyint(1) DEFAULT '0' NOT NULL, dl char(128) DEFAULT '' NOT NULL, type enum ('function','aggregate') COLLATE utf8_general_ci NOT NULL, PRIMARY KEY (name) ) engine=MyISAM CHARACTER SET utf8 COLLATE utf8_bin comment='User defined functions';
-CREATE TABLE tables_priv ( Host char(60) binary DEFAULT '' NOT NULL, Db char(64) binary DEFAULT '' NOT NULL, User char(16) binary DEFAULT '' NOT NULL, Table_name char(64) binary DEFAULT '' NOT NULL, Grantor char(77) DEFAULT '' NOT NULL, Timestamp timestamp, Table_priv set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter') COLLATE utf8_general_ci DEFAULT '' NOT NULL, Column_priv set('Select','Insert','Update','References') COLLATE utf8_general_ci DEFAULT '' NOT NULL, PRIMARY KEY (Host,Db,User,Table_name), KEY Grantor (Grantor) ) engine=MyISAM CHARACTER SET utf8 COLLATE utf8_bin comment='Table privileges';
-CREATE TABLE columns_priv ( Host char(60) binary DEFAULT '' NOT NULL, Db char(64) binary DEFAULT '' NOT NULL, User char(16) binary DEFAULT '' NOT NULL, Table_name char(64) binary DEFAULT '' NOT NULL, Column_name char(64) binary DEFAULT '' NOT NULL, Timestamp timestamp, Column_priv set('Select','Insert','Update','References') COLLATE utf8_general_ci DEFAULT '' NOT NULL, PRIMARY KEY (Host,Db,User,Table_name,Column_name) ) engine=MyISAM CHARACTER SET utf8 COLLATE utf8_bin comment='Column privileges';
+CREATE TABLE tables_priv ( Host char(60) binary DEFAULT '' NOT NULL, Db char(64) binary DEFAULT '' NOT NULL, User char(16) binary DEFAULT '' NOT NULL, Table_name char(64) binary DEFAULT '' NOT NULL, Grantor char(77) DEFAULT '' NOT NULL, Timestamp timestamp not null default now() on update now(), Table_priv set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter') COLLATE utf8_general_ci DEFAULT '' NOT NULL, Column_priv set('Select','Insert','Update','References') COLLATE utf8_general_ci DEFAULT '' NOT NULL, PRIMARY KEY (Host,Db,User,Table_name), KEY Grantor (Grantor) ) engine=MyISAM CHARACTER SET utf8 COLLATE utf8_bin comment='Table privileges';
+CREATE TABLE columns_priv ( Host char(60) binary DEFAULT '' NOT NULL, Db char(64) binary DEFAULT '' NOT NULL, User char(16) binary DEFAULT '' NOT NULL, Table_name char(64) binary DEFAULT '' NOT NULL, Column_name char(64) binary DEFAULT '' NOT NULL, Timestamp timestamp not null default now() on update now(), Column_priv set('Select','Insert','Update','References') COLLATE utf8_general_ci DEFAULT '' NOT NULL, PRIMARY KEY (Host,Db,User,Table_name,Column_name) ) engine=MyISAM CHARACTER SET utf8 COLLATE utf8_bin comment='Column privileges';
CREATE TABLE help_topic ( help_topic_id int unsigned not null, name varchar(64) not null, help_category_id smallint unsigned not null, description text not null, example text not null, url varchar(128) not null, primary key (help_topic_id), unique index (name) ) engine=MyISAM CHARACTER SET utf8 comment='help topics';
CREATE TABLE help_category ( help_category_id smallint unsigned not null, name varchar(64) not null, parent_category_id smallint unsigned null, url varchar(128) not null, primary key (help_category_id), unique index (name) ) engine=MyISAM CHARACTER SET utf8 comment='help categories';
CREATE TABLE help_relation ( help_topic_id int unsigned not null references help_topic, help_keyword_id int unsigned not null references help_keyword, primary key (help_keyword_id, help_topic_id) ) engine=MyISAM CHARACTER SET utf8 comment='keyword-topic relation';
@@ -192,8 +192,8 @@ proc CREATE TABLE `proc` (
`sql_mode` set('REAL_AS_FLOAT','PIPES_AS_CONCAT','ANSI_QUOTES','IGNORE_SPACE','IGNORE_BAD_TABLE_OPTIONS','ONLY_FULL_GROUP_BY','NO_UNSIGNED_SUBTRACTION','NO_DIR_IN_CREATE','POSTGRESQL','ORACLE','MSSQL','DB2','MAXDB','NO_KEY_OPTIONS','NO_TABLE_OPTIONS','NO_FIELD_OPTIONS','MYSQL323','MYSQL40','ANSI','NO_AUTO_VALUE_ON_ZERO','NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLES','STRICT_ALL_TABLES','NO_ZERO_IN_DATE','NO_ZERO_DATE','INVALID_DATES','ERROR_FOR_DIVISION_BY_ZERO','TRADITIONAL','NO_AUTO_CREATE_USER','HIGH_NOT_PRECEDENCE','NO_ENGINE_SUBSTITUTION','PAD_CHAR_TO_FULL_LENGTH','EMPTY_STRING_IS_NULL','SIMULTANEOUS_ASSIGNMENT','TIME_ROUND_FRACTIONAL') NOT NULL DEFAULT '',
`comment` text CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL,
`character_set_client` char(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
- `collation_connection` char(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
- `db_collation` char(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
+ `collation_connection` char(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
+ `db_collation` char(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
`body_utf8` longblob DEFAULT NULL,
`aggregate` enum('NONE','GROUP') NOT NULL DEFAULT 'NONE',
PRIMARY KEY (`db`,`name`,`type`)
@@ -220,8 +220,8 @@ event CREATE TABLE `event` (
`originator` int(10) unsigned NOT NULL,
`time_zone` char(64) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL DEFAULT 'SYSTEM',
`character_set_client` char(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
- `collation_connection` char(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
- `db_collation` char(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
+ `collation_connection` char(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
+ `db_collation` char(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
`body_utf8` longblob DEFAULT NULL,
PRIMARY KEY (`db`,`name`)
) ENGINE=Aria DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci PAGE_CHECKSUM=1 TRANSACTIONAL=1 COMMENT='Events'
diff --git a/mysql-test/main/system_mysql_db_fix40123.test b/mysql-test/main/system_mysql_db_fix40123.test
index 08aac433433..5e4672ea4e8 100644
--- a/mysql-test/main/system_mysql_db_fix40123.test
+++ b/mysql-test/main/system_mysql_db_fix40123.test
@@ -33,8 +33,8 @@ CREATE TABLE user ( Host char(60) binary DEFAULT '' NOT NULL, User char(16) bina
INSERT INTO user VALUES ('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0);
INSERT INTO user VALUES ('localhost','','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0);
CREATE TABLE func ( name char(64) binary DEFAULT '' NOT NULL, ret tinyint(1) DEFAULT '0' NOT NULL, dl char(128) DEFAULT '' NOT NULL, type enum ('function','aggregate') COLLATE utf8_general_ci NOT NULL, PRIMARY KEY (name) ) engine=MyISAM CHARACTER SET utf8 COLLATE utf8_bin comment='User defined functions';
-CREATE TABLE tables_priv ( Host char(60) binary DEFAULT '' NOT NULL, Db char(64) binary DEFAULT '' NOT NULL, User char(16) binary DEFAULT '' NOT NULL, Table_name char(64) binary DEFAULT '' NOT NULL, Grantor char(77) DEFAULT '' NOT NULL, Timestamp timestamp, Table_priv set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter') COLLATE utf8_general_ci DEFAULT '' NOT NULL, Column_priv set('Select','Insert','Update','References') COLLATE utf8_general_ci DEFAULT '' NOT NULL, PRIMARY KEY (Host,Db,User,Table_name), KEY Grantor (Grantor) ) engine=MyISAM CHARACTER SET utf8 COLLATE utf8_bin comment='Table privileges';
-CREATE TABLE columns_priv ( Host char(60) binary DEFAULT '' NOT NULL, Db char(64) binary DEFAULT '' NOT NULL, User char(16) binary DEFAULT '' NOT NULL, Table_name char(64) binary DEFAULT '' NOT NULL, Column_name char(64) binary DEFAULT '' NOT NULL, Timestamp timestamp, Column_priv set('Select','Insert','Update','References') COLLATE utf8_general_ci DEFAULT '' NOT NULL, PRIMARY KEY (Host,Db,User,Table_name,Column_name) ) engine=MyISAM CHARACTER SET utf8 COLLATE utf8_bin comment='Column privileges';
+CREATE TABLE tables_priv ( Host char(60) binary DEFAULT '' NOT NULL, Db char(64) binary DEFAULT '' NOT NULL, User char(16) binary DEFAULT '' NOT NULL, Table_name char(64) binary DEFAULT '' NOT NULL, Grantor char(77) DEFAULT '' NOT NULL, Timestamp timestamp not null default now() on update now(), Table_priv set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter') COLLATE utf8_general_ci DEFAULT '' NOT NULL, Column_priv set('Select','Insert','Update','References') COLLATE utf8_general_ci DEFAULT '' NOT NULL, PRIMARY KEY (Host,Db,User,Table_name), KEY Grantor (Grantor) ) engine=MyISAM CHARACTER SET utf8 COLLATE utf8_bin comment='Table privileges';
+CREATE TABLE columns_priv ( Host char(60) binary DEFAULT '' NOT NULL, Db char(64) binary DEFAULT '' NOT NULL, User char(16) binary DEFAULT '' NOT NULL, Table_name char(64) binary DEFAULT '' NOT NULL, Column_name char(64) binary DEFAULT '' NOT NULL, Timestamp timestamp not null default now() on update now(), Column_priv set('Select','Insert','Update','References') COLLATE utf8_general_ci DEFAULT '' NOT NULL, PRIMARY KEY (Host,Db,User,Table_name,Column_name) ) engine=MyISAM CHARACTER SET utf8 COLLATE utf8_bin comment='Column privileges';
CREATE TABLE help_topic ( help_topic_id int unsigned not null, name varchar(64) not null, help_category_id smallint unsigned not null, description text not null, example text not null, url varchar(128) not null, primary key (help_topic_id), unique index (name) ) engine=MyISAM CHARACTER SET utf8 comment='help topics';
CREATE TABLE help_category ( help_category_id smallint unsigned not null, name varchar(64) not null, parent_category_id smallint unsigned null, url varchar(128) not null, primary key (help_category_id), unique index (name) ) engine=MyISAM CHARACTER SET utf8 comment='help categories';
CREATE TABLE help_relation ( help_topic_id int unsigned not null references help_topic, help_keyword_id int unsigned not null references help_keyword, primary key (help_keyword_id, help_topic_id) ) engine=MyISAM CHARACTER SET utf8 comment='keyword-topic relation';
diff --git a/mysql-test/main/system_mysql_db_fix50030.result b/mysql-test/main/system_mysql_db_fix50030.result
index 28a33d11104..d870a645a6b 100644
--- a/mysql-test/main/system_mysql_db_fix50030.result
+++ b/mysql-test/main/system_mysql_db_fix50030.result
@@ -14,8 +14,8 @@ Warning 1280 Name 'Host' ignored for PRIMARY key.
INSERT INTO user VALUES ('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0);
INSERT INTO user VALUES ('localhost','','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0, 0);
CREATE TABLE func ( name char(64) binary DEFAULT '' NOT NULL, ret tinyint(1) DEFAULT '0' NOT NULL, dl char(128) DEFAULT '' NOT NULL, type enum ('function','aggregate') COLLATE utf8_general_ci NOT NULL, PRIMARY KEY (name) ) engine=MyISAM CHARACTER SET utf8 COLLATE utf8_bin comment='User defined functions';
-CREATE TABLE tables_priv ( Host char(60) binary DEFAULT '' NOT NULL, Db char(64) binary DEFAULT '' NOT NULL, User char(16) binary DEFAULT '' NOT NULL, Table_name char(64) binary DEFAULT '' NOT NULL, Grantor char(77) DEFAULT '' NOT NULL, Timestamp timestamp, Table_priv set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter','Create View','Show view') COLLATE utf8_general_ci DEFAULT '' NOT NULL, Column_priv set('Select','Insert','Update','References') COLLATE utf8_general_ci DEFAULT '' NOT NULL, PRIMARY KEY (Host,Db,User,Table_name), KEY Grantor (Grantor) ) engine=MyISAM CHARACTER SET utf8 COLLATE utf8_bin comment='Table privileges';
-CREATE TABLE columns_priv ( Host char(60) binary DEFAULT '' NOT NULL, Db char(64) binary DEFAULT '' NOT NULL, User char(16) binary DEFAULT '' NOT NULL, Table_name char(64) binary DEFAULT '' NOT NULL, Column_name char(64) binary DEFAULT '' NOT NULL, Timestamp timestamp, Column_priv set('Select','Insert','Update','References') COLLATE utf8_general_ci DEFAULT '' NOT NULL, PRIMARY KEY (Host,Db,User,Table_name,Column_name) ) engine=MyISAM CHARACTER SET utf8 COLLATE utf8_bin comment='Column privileges';
+CREATE TABLE tables_priv ( Host char(60) binary DEFAULT '' NOT NULL, Db char(64) binary DEFAULT '' NOT NULL, User char(16) binary DEFAULT '' NOT NULL, Table_name char(64) binary DEFAULT '' NOT NULL, Grantor char(77) DEFAULT '' NOT NULL, Timestamp timestamp not null default now() on update now(), Table_priv set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter','Create View','Show view') COLLATE utf8_general_ci DEFAULT '' NOT NULL, Column_priv set('Select','Insert','Update','References') COLLATE utf8_general_ci DEFAULT '' NOT NULL, PRIMARY KEY (Host,Db,User,Table_name), KEY Grantor (Grantor) ) engine=MyISAM CHARACTER SET utf8 COLLATE utf8_bin comment='Table privileges';
+CREATE TABLE columns_priv ( Host char(60) binary DEFAULT '' NOT NULL, Db char(64) binary DEFAULT '' NOT NULL, User char(16) binary DEFAULT '' NOT NULL, Table_name char(64) binary DEFAULT '' NOT NULL, Column_name char(64) binary DEFAULT '' NOT NULL, Timestamp timestamp not null default now() on update now(), Column_priv set('Select','Insert','Update','References') COLLATE utf8_general_ci DEFAULT '' NOT NULL, PRIMARY KEY (Host,Db,User,Table_name,Column_name) ) engine=MyISAM CHARACTER SET utf8 COLLATE utf8_bin comment='Column privileges';
CREATE TABLE help_topic ( help_topic_id int unsigned not null, name char(64) not null, help_category_id smallint unsigned not null, description text not null, example text not null, url char(128) not null, primary key (help_topic_id), unique index (name) ) engine=MyISAM CHARACTER SET utf8 comment='help topics';
CREATE TABLE help_category ( help_category_id smallint unsigned not null, name char(64) not null, parent_category_id smallint unsigned null, url char(128) not null, primary key (help_category_id), unique index (name) ) engine=MyISAM CHARACTER SET utf8 comment='help categories';
CREATE TABLE help_relation ( help_topic_id int unsigned not null references help_topic, help_keyword_id int unsigned not null references help_keyword, primary key (help_keyword_id, help_topic_id) ) engine=MyISAM CHARACTER SET utf8 comment='keyword-topic relation';
@@ -35,7 +35,7 @@ Warning 1280 Name 'TzIdTrTId' ignored for PRIMARY key.
CREATE TABLE time_zone_leap_second ( Transition_time bigint signed NOT NULL, Correction int signed NOT NULL, PRIMARY KEY TranTime (Transition_time) ) engine=MyISAM CHARACTER SET utf8 comment='Leap seconds information for time zones';
Warnings:
Warning 1280 Name 'TranTime' ignored for PRIMARY key.
-CREATE TABLE proc ( db char(64) collate utf8_bin DEFAULT '' NOT NULL, name char(64) DEFAULT '' NOT NULL, type enum('FUNCTION','PROCEDURE') NOT NULL, specific_name char(64) DEFAULT '' NOT NULL, language enum('SQL') DEFAULT 'SQL' NOT NULL, sql_data_access enum('CONTAINS_SQL', 'NO_SQL', 'READS_SQL_DATA', 'MODIFIES_SQL_DATA' ) DEFAULT 'CONTAINS_SQL' NOT NULL, is_deterministic enum('YES','NO') DEFAULT 'NO' NOT NULL, security_type enum('INVOKER','DEFINER') DEFAULT 'DEFINER' NOT NULL, param_list blob DEFAULT '' NOT NULL, returns char(64) DEFAULT '' NOT NULL, body longblob DEFAULT '' NOT NULL, definer char(77) collate utf8_bin DEFAULT '' NOT NULL, created timestamp, modified timestamp, sql_mode set( 'REAL_AS_FLOAT', 'PIPES_AS_CONCAT', 'ANSI_QUOTES', 'IGNORE_SPACE', 'NOT_USED', 'ONLY_FULL_GROUP_BY', 'NO_UNSIGNED_SUBTRACTION', 'NO_DIR_IN_CREATE', 'POSTGRESQL', 'ORACLE', 'MSSQL', 'DB2', 'MAXDB', 'NO_KEY_OPTIONS', 'NO_TABLE_OPTIONS', 'NO_FIELD_OPTIONS', 'MYSQL323', 'MYSQL40', 'ANSI', 'NO_AUTO_VALUE_ON_ZERO', 'NO_BACKSLASH_ESCAPES', 'STRICT_TRANS_TABLES', 'STRICT_ALL_TABLES', 'NO_ZERO_IN_DATE', 'NO_ZERO_DATE', 'INVALID_DATES', 'ERROR_FOR_DIVISION_BY_ZERO', 'TRADITIONAL', 'NO_AUTO_CREATE_USER', 'HIGH_NOT_PRECEDENCE' ) DEFAULT '' NOT NULL, comment char(64) collate utf8_bin DEFAULT '' NOT NULL, PRIMARY KEY (db,name,type) ) engine=MyISAM character set utf8 comment='Stored Procedures';
+CREATE TABLE proc (db char(64) collate utf8_bin DEFAULT '' NOT NULL, name char(64) DEFAULT '' NOT NULL, type enum('FUNCTION','PROCEDURE') NOT NULL, specific_name char(64) DEFAULT '' NOT NULL, language enum('SQL') DEFAULT 'SQL' NOT NULL, sql_data_access enum('CONTAINS_SQL','NO_SQL','READS_SQL_DATA','MODIFIES_SQL_DATA' ) DEFAULT 'CONTAINS_SQL' NOT NULL, is_deterministic enum('YES','NO') DEFAULT 'NO' NOT NULL, security_type enum('INVOKER','DEFINER') DEFAULT 'DEFINER' NOT NULL, param_list blob DEFAULT '' NOT NULL, returns char(64) DEFAULT '' NOT NULL, body longblob DEFAULT '' NOT NULL, definer char(77) collate utf8_bin DEFAULT '' NOT NULL, created timestamp not null default now() on update now(), modified timestamp not null default 0, sql_mode set( 'REAL_AS_FLOAT', 'PIPES_AS_CONCAT', 'ANSI_QUOTES', 'IGNORE_SPACE', 'NOT_USED', 'ONLY_FULL_GROUP_BY', 'NO_UNSIGNED_SUBTRACTION', 'NO_DIR_IN_CREATE', 'POSTGRESQL', 'ORACLE', 'MSSQL', 'DB2', 'MAXDB', 'NO_KEY_OPTIONS', 'NO_TABLE_OPTIONS', 'NO_FIELD_OPTIONS', 'MYSQL323', 'MYSQL40', 'ANSI', 'NO_AUTO_VALUE_ON_ZERO', 'NO_BACKSLASH_ESCAPES', 'STRICT_TRANS_TABLES', 'STRICT_ALL_TABLES', 'NO_ZERO_IN_DATE', 'NO_ZERO_DATE', 'INVALID_DATES', 'ERROR_FOR_DIVISION_BY_ZERO', 'TRADITIONAL', 'NO_AUTO_CREATE_USER', 'HIGH_NOT_PRECEDENCE' ) DEFAULT '' NOT NULL, comment char(64) collate utf8_bin DEFAULT '' NOT NULL, PRIMARY KEY (db,name,type) ) engine=MyISAM character set utf8 comment='Stored Procedures';
CREATE TABLE procs_priv ( Host char(60) binary DEFAULT '' NOT NULL, Db char(64) binary DEFAULT '' NOT NULL, User char(16) binary DEFAULT '' NOT NULL, Routine_name char(64) binary DEFAULT '' NOT NULL, Routine_type enum('FUNCTION','PROCEDURE') NOT NULL, Grantor char(77) DEFAULT '' NOT NULL, Proc_priv set('Execute','Alter Routine','Grant') COLLATE utf8_general_ci DEFAULT '' NOT NULL, Timestamp timestamp, PRIMARY KEY (Host,Db,User,Routine_name,Routine_type), KEY Grantor (Grantor) ) engine=MyISAM CHARACTER SET utf8 COLLATE utf8_bin comment='Procedure privileges';
CREATE TABLE servers ( Server_name char(64) NOT NULL DEFAULT '', Host char(64) NOT NULL DEFAULT '', Db char(64) NOT NULL DEFAULT '', Username char(64) NOT NULL DEFAULT '', Password char(64) NOT NULL DEFAULT '', Port INT(4) NOT NULL DEFAULT '0', Socket char(64) NOT NULL DEFAULT '', Wrapper char(64) NOT NULL DEFAULT '', Owner char(64) NOT NULL DEFAULT '', PRIMARY KEY (Server_name)) CHARACTER SET utf8 comment='MySQL Foreign Servers table';
INSERT INTO servers VALUES ('test','localhost','test','root','', 0,'','mysql','root');
@@ -196,8 +196,8 @@ proc CREATE TABLE `proc` (
`sql_mode` set('REAL_AS_FLOAT','PIPES_AS_CONCAT','ANSI_QUOTES','IGNORE_SPACE','IGNORE_BAD_TABLE_OPTIONS','ONLY_FULL_GROUP_BY','NO_UNSIGNED_SUBTRACTION','NO_DIR_IN_CREATE','POSTGRESQL','ORACLE','MSSQL','DB2','MAXDB','NO_KEY_OPTIONS','NO_TABLE_OPTIONS','NO_FIELD_OPTIONS','MYSQL323','MYSQL40','ANSI','NO_AUTO_VALUE_ON_ZERO','NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLES','STRICT_ALL_TABLES','NO_ZERO_IN_DATE','NO_ZERO_DATE','INVALID_DATES','ERROR_FOR_DIVISION_BY_ZERO','TRADITIONAL','NO_AUTO_CREATE_USER','HIGH_NOT_PRECEDENCE','NO_ENGINE_SUBSTITUTION','PAD_CHAR_TO_FULL_LENGTH','EMPTY_STRING_IS_NULL','SIMULTANEOUS_ASSIGNMENT','TIME_ROUND_FRACTIONAL') NOT NULL DEFAULT '',
`comment` text CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL,
`character_set_client` char(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
- `collation_connection` char(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
- `db_collation` char(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
+ `collation_connection` char(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
+ `db_collation` char(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
`body_utf8` longblob DEFAULT NULL,
`aggregate` enum('NONE','GROUP') NOT NULL DEFAULT 'NONE',
PRIMARY KEY (`db`,`name`,`type`)
@@ -224,8 +224,8 @@ event CREATE TABLE `event` (
`originator` int(10) unsigned NOT NULL,
`time_zone` char(64) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL DEFAULT 'SYSTEM',
`character_set_client` char(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
- `collation_connection` char(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
- `db_collation` char(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
+ `collation_connection` char(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
+ `db_collation` char(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
`body_utf8` longblob DEFAULT NULL,
PRIMARY KEY (`db`,`name`)
) ENGINE=Aria DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci PAGE_CHECKSUM=1 TRANSACTIONAL=1 COMMENT='Events'
diff --git a/mysql-test/main/system_mysql_db_fix50030.test b/mysql-test/main/system_mysql_db_fix50030.test
index a9830471988..8fc049f8797 100644
--- a/mysql-test/main/system_mysql_db_fix50030.test
+++ b/mysql-test/main/system_mysql_db_fix50030.test
@@ -33,8 +33,8 @@ CREATE TABLE user ( Host char(60) binary DEFAULT '' NOT NULL, User char(16) bina
INSERT INTO user VALUES ('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0);
INSERT INTO user VALUES ('localhost','','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0, 0);
CREATE TABLE func ( name char(64) binary DEFAULT '' NOT NULL, ret tinyint(1) DEFAULT '0' NOT NULL, dl char(128) DEFAULT '' NOT NULL, type enum ('function','aggregate') COLLATE utf8_general_ci NOT NULL, PRIMARY KEY (name) ) engine=MyISAM CHARACTER SET utf8 COLLATE utf8_bin comment='User defined functions';
-CREATE TABLE tables_priv ( Host char(60) binary DEFAULT '' NOT NULL, Db char(64) binary DEFAULT '' NOT NULL, User char(16) binary DEFAULT '' NOT NULL, Table_name char(64) binary DEFAULT '' NOT NULL, Grantor char(77) DEFAULT '' NOT NULL, Timestamp timestamp, Table_priv set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter','Create View','Show view') COLLATE utf8_general_ci DEFAULT '' NOT NULL, Column_priv set('Select','Insert','Update','References') COLLATE utf8_general_ci DEFAULT '' NOT NULL, PRIMARY KEY (Host,Db,User,Table_name), KEY Grantor (Grantor) ) engine=MyISAM CHARACTER SET utf8 COLLATE utf8_bin comment='Table privileges';
-CREATE TABLE columns_priv ( Host char(60) binary DEFAULT '' NOT NULL, Db char(64) binary DEFAULT '' NOT NULL, User char(16) binary DEFAULT '' NOT NULL, Table_name char(64) binary DEFAULT '' NOT NULL, Column_name char(64) binary DEFAULT '' NOT NULL, Timestamp timestamp, Column_priv set('Select','Insert','Update','References') COLLATE utf8_general_ci DEFAULT '' NOT NULL, PRIMARY KEY (Host,Db,User,Table_name,Column_name) ) engine=MyISAM CHARACTER SET utf8 COLLATE utf8_bin comment='Column privileges';
+CREATE TABLE tables_priv ( Host char(60) binary DEFAULT '' NOT NULL, Db char(64) binary DEFAULT '' NOT NULL, User char(16) binary DEFAULT '' NOT NULL, Table_name char(64) binary DEFAULT '' NOT NULL, Grantor char(77) DEFAULT '' NOT NULL, Timestamp timestamp not null default now() on update now(), Table_priv set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter','Create View','Show view') COLLATE utf8_general_ci DEFAULT '' NOT NULL, Column_priv set('Select','Insert','Update','References') COLLATE utf8_general_ci DEFAULT '' NOT NULL, PRIMARY KEY (Host,Db,User,Table_name), KEY Grantor (Grantor) ) engine=MyISAM CHARACTER SET utf8 COLLATE utf8_bin comment='Table privileges';
+CREATE TABLE columns_priv ( Host char(60) binary DEFAULT '' NOT NULL, Db char(64) binary DEFAULT '' NOT NULL, User char(16) binary DEFAULT '' NOT NULL, Table_name char(64) binary DEFAULT '' NOT NULL, Column_name char(64) binary DEFAULT '' NOT NULL, Timestamp timestamp not null default now() on update now(), Column_priv set('Select','Insert','Update','References') COLLATE utf8_general_ci DEFAULT '' NOT NULL, PRIMARY KEY (Host,Db,User,Table_name,Column_name) ) engine=MyISAM CHARACTER SET utf8 COLLATE utf8_bin comment='Column privileges';
CREATE TABLE help_topic ( help_topic_id int unsigned not null, name char(64) not null, help_category_id smallint unsigned not null, description text not null, example text not null, url char(128) not null, primary key (help_topic_id), unique index (name) ) engine=MyISAM CHARACTER SET utf8 comment='help topics';
CREATE TABLE help_category ( help_category_id smallint unsigned not null, name char(64) not null, parent_category_id smallint unsigned null, url char(128) not null, primary key (help_category_id), unique index (name) ) engine=MyISAM CHARACTER SET utf8 comment='help categories';
CREATE TABLE help_relation ( help_topic_id int unsigned not null references help_topic, help_keyword_id int unsigned not null references help_keyword, primary key (help_keyword_id, help_topic_id) ) engine=MyISAM CHARACTER SET utf8 comment='keyword-topic relation';
@@ -44,7 +44,7 @@ CREATE TABLE time_zone ( Time_zone_id int unsigned NOT NULL auto_increment, Use_
CREATE TABLE time_zone_transition ( Time_zone_id int unsigned NOT NULL, Transition_time bigint signed NOT NULL, Transition_type_id int unsigned NOT NULL, PRIMARY KEY TzIdTranTime (Time_zone_id, Transition_time) ) engine=MyISAM CHARACTER SET utf8 comment='Time zone transitions';
CREATE TABLE time_zone_transition_type ( Time_zone_id int unsigned NOT NULL, Transition_type_id int unsigned NOT NULL, `Offset` int signed DEFAULT 0 NOT NULL, Is_DST tinyint unsigned DEFAULT 0 NOT NULL, Abbreviation char(8) DEFAULT '' NOT NULL, PRIMARY KEY TzIdTrTId (Time_zone_id, Transition_type_id) ) engine=MyISAM CHARACTER SET utf8 comment='Time zone transition types';
CREATE TABLE time_zone_leap_second ( Transition_time bigint signed NOT NULL, Correction int signed NOT NULL, PRIMARY KEY TranTime (Transition_time) ) engine=MyISAM CHARACTER SET utf8 comment='Leap seconds information for time zones';
-CREATE TABLE proc ( db char(64) collate utf8_bin DEFAULT '' NOT NULL, name char(64) DEFAULT '' NOT NULL, type enum('FUNCTION','PROCEDURE') NOT NULL, specific_name char(64) DEFAULT '' NOT NULL, language enum('SQL') DEFAULT 'SQL' NOT NULL, sql_data_access enum('CONTAINS_SQL', 'NO_SQL', 'READS_SQL_DATA', 'MODIFIES_SQL_DATA' ) DEFAULT 'CONTAINS_SQL' NOT NULL, is_deterministic enum('YES','NO') DEFAULT 'NO' NOT NULL, security_type enum('INVOKER','DEFINER') DEFAULT 'DEFINER' NOT NULL, param_list blob DEFAULT '' NOT NULL, returns char(64) DEFAULT '' NOT NULL, body longblob DEFAULT '' NOT NULL, definer char(77) collate utf8_bin DEFAULT '' NOT NULL, created timestamp, modified timestamp, sql_mode set( 'REAL_AS_FLOAT', 'PIPES_AS_CONCAT', 'ANSI_QUOTES', 'IGNORE_SPACE', 'NOT_USED', 'ONLY_FULL_GROUP_BY', 'NO_UNSIGNED_SUBTRACTION', 'NO_DIR_IN_CREATE', 'POSTGRESQL', 'ORACLE', 'MSSQL', 'DB2', 'MAXDB', 'NO_KEY_OPTIONS', 'NO_TABLE_OPTIONS', 'NO_FIELD_OPTIONS', 'MYSQL323', 'MYSQL40', 'ANSI', 'NO_AUTO_VALUE_ON_ZERO', 'NO_BACKSLASH_ESCAPES', 'STRICT_TRANS_TABLES', 'STRICT_ALL_TABLES', 'NO_ZERO_IN_DATE', 'NO_ZERO_DATE', 'INVALID_DATES', 'ERROR_FOR_DIVISION_BY_ZERO', 'TRADITIONAL', 'NO_AUTO_CREATE_USER', 'HIGH_NOT_PRECEDENCE' ) DEFAULT '' NOT NULL, comment char(64) collate utf8_bin DEFAULT '' NOT NULL, PRIMARY KEY (db,name,type) ) engine=MyISAM character set utf8 comment='Stored Procedures';
+CREATE TABLE proc (db char(64) collate utf8_bin DEFAULT '' NOT NULL, name char(64) DEFAULT '' NOT NULL, type enum('FUNCTION','PROCEDURE') NOT NULL, specific_name char(64) DEFAULT '' NOT NULL, language enum('SQL') DEFAULT 'SQL' NOT NULL, sql_data_access enum('CONTAINS_SQL','NO_SQL','READS_SQL_DATA','MODIFIES_SQL_DATA' ) DEFAULT 'CONTAINS_SQL' NOT NULL, is_deterministic enum('YES','NO') DEFAULT 'NO' NOT NULL, security_type enum('INVOKER','DEFINER') DEFAULT 'DEFINER' NOT NULL, param_list blob DEFAULT '' NOT NULL, returns char(64) DEFAULT '' NOT NULL, body longblob DEFAULT '' NOT NULL, definer char(77) collate utf8_bin DEFAULT '' NOT NULL, created timestamp not null default now() on update now(), modified timestamp not null default 0, sql_mode set( 'REAL_AS_FLOAT', 'PIPES_AS_CONCAT', 'ANSI_QUOTES', 'IGNORE_SPACE', 'NOT_USED', 'ONLY_FULL_GROUP_BY', 'NO_UNSIGNED_SUBTRACTION', 'NO_DIR_IN_CREATE', 'POSTGRESQL', 'ORACLE', 'MSSQL', 'DB2', 'MAXDB', 'NO_KEY_OPTIONS', 'NO_TABLE_OPTIONS', 'NO_FIELD_OPTIONS', 'MYSQL323', 'MYSQL40', 'ANSI', 'NO_AUTO_VALUE_ON_ZERO', 'NO_BACKSLASH_ESCAPES', 'STRICT_TRANS_TABLES', 'STRICT_ALL_TABLES', 'NO_ZERO_IN_DATE', 'NO_ZERO_DATE', 'INVALID_DATES', 'ERROR_FOR_DIVISION_BY_ZERO', 'TRADITIONAL', 'NO_AUTO_CREATE_USER', 'HIGH_NOT_PRECEDENCE' ) DEFAULT '' NOT NULL, comment char(64) collate utf8_bin DEFAULT '' NOT NULL, PRIMARY KEY (db,name,type) ) engine=MyISAM character set utf8 comment='Stored Procedures';
CREATE TABLE procs_priv ( Host char(60) binary DEFAULT '' NOT NULL, Db char(64) binary DEFAULT '' NOT NULL, User char(16) binary DEFAULT '' NOT NULL, Routine_name char(64) binary DEFAULT '' NOT NULL, Routine_type enum('FUNCTION','PROCEDURE') NOT NULL, Grantor char(77) DEFAULT '' NOT NULL, Proc_priv set('Execute','Alter Routine','Grant') COLLATE utf8_general_ci DEFAULT '' NOT NULL, Timestamp timestamp, PRIMARY KEY (Host,Db,User,Routine_name,Routine_type), KEY Grantor (Grantor) ) engine=MyISAM CHARACTER SET utf8 COLLATE utf8_bin comment='Procedure privileges';
CREATE TABLE servers ( Server_name char(64) NOT NULL DEFAULT '', Host char(64) NOT NULL DEFAULT '', Db char(64) NOT NULL DEFAULT '', Username char(64) NOT NULL DEFAULT '', Password char(64) NOT NULL DEFAULT '', Port INT(4) NOT NULL DEFAULT '0', Socket char(64) NOT NULL DEFAULT '', Wrapper char(64) NOT NULL DEFAULT '', Owner char(64) NOT NULL DEFAULT '', PRIMARY KEY (Server_name)) CHARACTER SET utf8 comment='MySQL Foreign Servers table';
INSERT INTO servers VALUES ('test','localhost','test','root','', 0,'','mysql','root');
diff --git a/mysql-test/main/system_mysql_db_fix50117.result b/mysql-test/main/system_mysql_db_fix50117.result
index 10f6ae00c97..5e9e3df5829 100644
--- a/mysql-test/main/system_mysql_db_fix50117.result
+++ b/mysql-test/main/system_mysql_db_fix50117.result
@@ -176,8 +176,8 @@ proc CREATE TABLE `proc` (
`sql_mode` set('REAL_AS_FLOAT','PIPES_AS_CONCAT','ANSI_QUOTES','IGNORE_SPACE','IGNORE_BAD_TABLE_OPTIONS','ONLY_FULL_GROUP_BY','NO_UNSIGNED_SUBTRACTION','NO_DIR_IN_CREATE','POSTGRESQL','ORACLE','MSSQL','DB2','MAXDB','NO_KEY_OPTIONS','NO_TABLE_OPTIONS','NO_FIELD_OPTIONS','MYSQL323','MYSQL40','ANSI','NO_AUTO_VALUE_ON_ZERO','NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLES','STRICT_ALL_TABLES','NO_ZERO_IN_DATE','NO_ZERO_DATE','INVALID_DATES','ERROR_FOR_DIVISION_BY_ZERO','TRADITIONAL','NO_AUTO_CREATE_USER','HIGH_NOT_PRECEDENCE','NO_ENGINE_SUBSTITUTION','PAD_CHAR_TO_FULL_LENGTH','EMPTY_STRING_IS_NULL','SIMULTANEOUS_ASSIGNMENT','TIME_ROUND_FRACTIONAL') NOT NULL DEFAULT '',
`comment` text CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL,
`character_set_client` char(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
- `collation_connection` char(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
- `db_collation` char(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
+ `collation_connection` char(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
+ `db_collation` char(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
`body_utf8` longblob DEFAULT NULL,
`aggregate` enum('NONE','GROUP') NOT NULL DEFAULT 'NONE',
PRIMARY KEY (`db`,`name`,`type`)
@@ -204,8 +204,8 @@ event CREATE TABLE `event` (
`originator` int(10) unsigned NOT NULL,
`time_zone` char(64) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL DEFAULT 'SYSTEM',
`character_set_client` char(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
- `collation_connection` char(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
- `db_collation` char(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
+ `collation_connection` char(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
+ `db_collation` char(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
`body_utf8` longblob DEFAULT NULL,
PRIMARY KEY (`db`,`name`)
) ENGINE=Aria DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci PAGE_CHECKSUM=1 TRANSACTIONAL=1 COMMENT='Events'
diff --git a/mysql-test/main/system_mysql_db_fix50568.result b/mysql-test/main/system_mysql_db_fix50568.result
index 842d470f3cc..09c51b80409 100644
--- a/mysql-test/main/system_mysql_db_fix50568.result
+++ b/mysql-test/main/system_mysql_db_fix50568.result
@@ -131,7 +131,7 @@ tables_priv CREATE TABLE `tables_priv` (
`User` char(128) NOT NULL DEFAULT '',
`Table_name` char(64) NOT NULL DEFAULT '',
`Grantor` varchar(384) NOT NULL DEFAULT '',
- `Timestamp` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `Timestamp` timestamp NULL DEFAULT NULL,
`Table_priv` set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter','Create View','Show view','Trigger','Delete versioning rows') CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '',
`Column_priv` set('Select','Insert','Update','References') CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '',
PRIMARY KEY (`Host`,`Db`,`User`,`Table_name`),
@@ -145,7 +145,7 @@ columns_priv CREATE TABLE `columns_priv` (
`User` char(128) NOT NULL DEFAULT '',
`Table_name` char(64) NOT NULL DEFAULT '',
`Column_name` char(64) NOT NULL DEFAULT '',
- `Timestamp` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `Timestamp` timestamp NULL DEFAULT NULL,
`Column_priv` set('Select','Insert','Update','References') CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '',
PRIMARY KEY (`Host`,`Db`,`User`,`Table_name`,`Column_name`)
) ENGINE=Aria DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin PAGE_CHECKSUM=1 TRANSACTIONAL=1 COMMENT='Column privileges'
@@ -192,13 +192,13 @@ proc CREATE TABLE `proc` (
`returns` longblob NOT NULL,
`body` longblob NOT NULL,
`definer` varchar(384) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL DEFAULT '',
- `created` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
- `modified` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `created` timestamp NULL DEFAULT NULL,
+ `modified` timestamp NULL DEFAULT NULL,
`sql_mode` set('REAL_AS_FLOAT','PIPES_AS_CONCAT','ANSI_QUOTES','IGNORE_SPACE','IGNORE_BAD_TABLE_OPTIONS','ONLY_FULL_GROUP_BY','NO_UNSIGNED_SUBTRACTION','NO_DIR_IN_CREATE','POSTGRESQL','ORACLE','MSSQL','DB2','MAXDB','NO_KEY_OPTIONS','NO_TABLE_OPTIONS','NO_FIELD_OPTIONS','MYSQL323','MYSQL40','ANSI','NO_AUTO_VALUE_ON_ZERO','NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLES','STRICT_ALL_TABLES','NO_ZERO_IN_DATE','NO_ZERO_DATE','INVALID_DATES','ERROR_FOR_DIVISION_BY_ZERO','TRADITIONAL','NO_AUTO_CREATE_USER','HIGH_NOT_PRECEDENCE','NO_ENGINE_SUBSTITUTION','PAD_CHAR_TO_FULL_LENGTH','EMPTY_STRING_IS_NULL','SIMULTANEOUS_ASSIGNMENT','TIME_ROUND_FRACTIONAL') NOT NULL DEFAULT '',
`comment` text CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL,
`character_set_client` char(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
- `collation_connection` char(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
- `db_collation` char(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
+ `collation_connection` char(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
+ `db_collation` char(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
`body_utf8` longblob DEFAULT NULL,
`aggregate` enum('NONE','GROUP') NOT NULL DEFAULT 'NONE',
PRIMARY KEY (`db`,`name`,`type`)
@@ -213,8 +213,8 @@ event CREATE TABLE `event` (
`execute_at` datetime DEFAULT NULL,
`interval_value` int(11) DEFAULT NULL,
`interval_field` enum('YEAR','QUARTER','MONTH','DAY','HOUR','MINUTE','WEEK','SECOND','MICROSECOND','YEAR_MONTH','DAY_HOUR','DAY_MINUTE','DAY_SECOND','HOUR_MINUTE','HOUR_SECOND','MINUTE_SECOND','DAY_MICROSECOND','HOUR_MICROSECOND','MINUTE_MICROSECOND','SECOND_MICROSECOND') DEFAULT NULL,
- `created` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
- `modified` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `created` timestamp NOT NULL,
+ `modified` timestamp NOT NULL,
`last_executed` datetime DEFAULT NULL,
`starts` datetime DEFAULT NULL,
`ends` datetime DEFAULT NULL,
@@ -225,8 +225,8 @@ event CREATE TABLE `event` (
`originator` int(10) unsigned NOT NULL,
`time_zone` char(64) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL DEFAULT 'SYSTEM',
`character_set_client` char(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
- `collation_connection` char(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
- `db_collation` char(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
+ `collation_connection` char(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
+ `db_collation` char(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
`body_utf8` longblob DEFAULT NULL,
PRIMARY KEY (`db`,`name`)
) ENGINE=Aria DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci PAGE_CHECKSUM=1 TRANSACTIONAL=1 COMMENT='Events'
diff --git a/mysql-test/main/table_elim.result b/mysql-test/main/table_elim.result
index deff0623370..4da85c4a9ca 100644
--- a/mysql-test/main/table_elim.result
+++ b/mysql-test/main/table_elim.result
@@ -704,3 +704,322 @@ LIMIT 1;
PostID Voted
1 NULL
DROP TABLE t1,t2;
+#
+# MDEV-26278: Table elimination does not work across derived tables
+#
+create table t1 (a int, b int);
+insert into t1 select seq, seq+10 from seq_1_to_10;
+create table t11 (
+a int not null,
+b int,
+key(a)
+);
+insert into t11 select A.seq, A.seq+B.seq
+from
+seq_1_to_10 A,
+seq_1_to_100 B;
+create table t12 (
+pk int primary key,
+col1 int
+);
+insert into t12 select seq, seq from seq_1_to_1000;
+create view v2b as
+select t11.a as a, count(*) as b
+from t11 left join t12 on t12.pk=t11.b
+group by t11.a;
+# The whole v2b is eliminated
+explain select t1.* from t1 left join v2b on v2b.a=t1.a;
+id select_type table type possible_keys key key_len ref rows Extra
+1 PRIMARY t1 ALL NULL NULL NULL NULL 10
+# Check format JSON as well
+explain format=JSON select t1.* from t1 left join v2b on t1.a=v2b.a;
+EXPLAIN
+{
+ "query_block": {
+ "select_id": 1,
+ "const_condition": "1",
+ "nested_loop": [
+ {
+ "table": {
+ "table_name": "t1",
+ "access_type": "ALL",
+ "rows": 10,
+ "filtered": 100
+ }
+ }
+ ]
+ }
+}
+# Elimination of a whole subquery
+explain select t1.* from t1 left join
+(select t11.a as a, count(*) as b
+from t11 left join t12 on t12.pk=t11.b
+group by t11.a) v2b on v2b.a=t1.a;
+id select_type table type possible_keys key key_len ref rows Extra
+1 PRIMARY t1 ALL NULL NULL NULL NULL 10
+# In this case v2b cannot be eliminated (since v2b.b is not unique)!
+explain select t1.* from t1 left join v2b on t1.a=v2b.b;
+id select_type table type possible_keys key key_len ref rows Extra
+1 PRIMARY t1 ALL NULL NULL NULL NULL 10
+1 PRIMARY <derived2> ref key0 key0 8 test.t1.a 10 Using where
+2 DERIVED t11 ALL NULL NULL NULL NULL 1000 Using temporary; Using filesort
+# Check format JSON as well
+explain format=JSON select t1.* from t1 left join v2b on t1.a=v2b.b;
+EXPLAIN
+{
+ "query_block": {
+ "select_id": 1,
+ "const_condition": "1",
+ "nested_loop": [
+ {
+ "table": {
+ "table_name": "t1",
+ "access_type": "ALL",
+ "rows": 10,
+ "filtered": 100
+ }
+ },
+ {
+ "table": {
+ "table_name": "<derived2>",
+ "access_type": "ref",
+ "possible_keys": ["key0"],
+ "key": "key0",
+ "key_length": "8",
+ "used_key_parts": ["b"],
+ "ref": ["test.t1.a"],
+ "rows": 10,
+ "filtered": 100,
+ "attached_condition": "trigcond(t1.a = v2b.b and trigcond(t1.a is not null))",
+ "materialized": {
+ "query_block": {
+ "select_id": 2,
+ "const_condition": "1",
+ "filesort": {
+ "sort_key": "t11.a",
+ "temporary_table": {
+ "nested_loop": [
+ {
+ "table": {
+ "table_name": "t11",
+ "access_type": "ALL",
+ "rows": 1000,
+ "filtered": 100
+ }
+ }
+ ]
+ }
+ }
+ }
+ }
+ }
+ }
+ ]
+ }
+}
+create view v2c as
+select t11.a as a, max(t12.col1) as b
+from t11 left join t12 on t12.pk=t11.b
+group by t11.a;
+# The whole v2c is eliminated
+explain select t1.* from t1 left join v2c on v2c.a=t1.a;
+id select_type table type possible_keys key key_len ref rows Extra
+1 PRIMARY t1 ALL NULL NULL NULL NULL 10
+# Check format JSON as well
+explain format=JSON select t1.* from t1 left join v2c on v2c.a=t1.a;
+EXPLAIN
+{
+ "query_block": {
+ "select_id": 1,
+ "const_condition": "1",
+ "nested_loop": [
+ {
+ "table": {
+ "table_name": "t1",
+ "access_type": "ALL",
+ "rows": 10,
+ "filtered": 100
+ }
+ }
+ ]
+ }
+}
+# In this case v2c cannot be eliminated (since v2c.b is not unique)!
+explain select t1.* from t1 left join v2c on t1.a=v2c.b;
+id select_type table type possible_keys key key_len ref rows Extra
+1 PRIMARY t1 ALL NULL NULL NULL NULL 10
+1 PRIMARY <derived2> ref key0 key0 5 test.t1.a 10 Using where
+2 DERIVED t11 ALL NULL NULL NULL NULL 1000 Using temporary; Using filesort
+2 DERIVED t12 eq_ref PRIMARY PRIMARY 4 test.t11.b 1 Using where
+# Check format JSON as well
+explain format=JSON select t1.* from t1 left join v2c on t1.a=v2c.b;
+EXPLAIN
+{
+ "query_block": {
+ "select_id": 1,
+ "const_condition": "1",
+ "nested_loop": [
+ {
+ "table": {
+ "table_name": "t1",
+ "access_type": "ALL",
+ "rows": 10,
+ "filtered": 100
+ }
+ },
+ {
+ "table": {
+ "table_name": "<derived2>",
+ "access_type": "ref",
+ "possible_keys": ["key0"],
+ "key": "key0",
+ "key_length": "5",
+ "used_key_parts": ["b"],
+ "ref": ["test.t1.a"],
+ "rows": 10,
+ "filtered": 100,
+ "attached_condition": "trigcond(trigcond(t1.a is not null))",
+ "materialized": {
+ "query_block": {
+ "select_id": 2,
+ "const_condition": "1",
+ "filesort": {
+ "sort_key": "t11.a",
+ "temporary_table": {
+ "nested_loop": [
+ {
+ "table": {
+ "table_name": "t11",
+ "access_type": "ALL",
+ "rows": 1000,
+ "filtered": 100
+ }
+ },
+ {
+ "table": {
+ "table_name": "t12",
+ "access_type": "eq_ref",
+ "possible_keys": ["PRIMARY"],
+ "key": "PRIMARY",
+ "key_length": "4",
+ "used_key_parts": ["pk"],
+ "ref": ["test.t11.b"],
+ "rows": 1,
+ "filtered": 100,
+ "attached_condition": "trigcond(trigcond(t11.b is not null))"
+ }
+ }
+ ]
+ }
+ }
+ }
+ }
+ }
+ }
+ ]
+ }
+}
+# Create a view with multiple fields in the GROUP BY clause:
+create view v2d as
+select t11.a as a, t11.b as b, max(t12.col1) as max_col1
+from t11 left join t12 on t12.pk=t11.b
+group by t11.a, t11.b;
+# This one must not be eliminated since only one of the GROUP BY fields is bound:
+explain select t1.* from t1 left join v2d on v2d.a=t1.a;
+id select_type table type possible_keys key key_len ref rows Extra
+1 PRIMARY t1 ALL NULL NULL NULL NULL 10
+1 PRIMARY <derived2> ref key0 key0 5 test.t1.a 10 Using where
+2 DERIVED t11 ALL a NULL NULL NULL 1000 Using temporary; Using filesort
+2 DERIVED t12 eq_ref PRIMARY PRIMARY 4 test.t11.b 1 Using where
+# This must be eliminated since both fields are bound:
+explain select t1.* from t1 left join v2d on v2d.a=t1.a and v2d.b=t1.b;
+id select_type table type possible_keys key key_len ref rows Extra
+1 PRIMARY t1 ALL NULL NULL NULL NULL 10
+create table t13 (dt date, b int);
+# Function year() in the GROUP BY list prevents treating this field
+# as a unique key
+create view v2e as
+select year(t13.dt) as yyy, max(t12.col1) as max_col1
+from t13 join t12 on t12.pk=t13.b
+group by yyy;
+# No elimination here since function year() is used
+explain select t1.* from t1 left join v2e on v2e.yyy=t1.a;
+id select_type table type possible_keys key key_len ref rows Extra
+1 PRIMARY t1 ALL NULL NULL NULL NULL 10
+1 PRIMARY <derived2> ref key0 key0 5 test.t1.a 2 Using where
+2 DERIVED NULL NULL NULL NULL NULL NULL NULL no matching row in const table
+create table t2 (a int, b int, c int);
+insert into t2 select A.seq, B.seq, 123 from seq_1_to_3 A, seq_1_to_3 B;
+# No elimination here since not all fields of the derived table's
+# GROUP BY are on the SELECT list so D.a is not unique
+explain select t1.* from t1 left join
+(select a, count(*) as cnt from t2 group by a, b) D on D.a=t1.a;
+id select_type table type possible_keys key key_len ref rows Extra
+1 PRIMARY t1 ALL NULL NULL NULL NULL 10
+1 PRIMARY <derived2> ref key0 key0 5 test.t1.a 2 Using where
+2 DERIVED t2 ALL NULL NULL NULL NULL 9 Using temporary; Using filesort
+# Still no elimination 'cause field D.b is just an alias for t2.a
+explain select t1.* from t1 left join
+(select a, a as b, count(*) as cnt from t2 group by a, b) D on D.a=t1.a and D.b=t1.b;
+id select_type table type possible_keys key key_len ref rows Extra
+1 PRIMARY t1 ALL NULL NULL NULL NULL 10
+1 PRIMARY <derived2> ref key0 key0 10 test.t1.a,test.t1.b 2 Using where
+2 DERIVED t2 ALL NULL NULL NULL NULL 9 Using temporary; Using filesort
+Warnings:
+Warning 1052 Column 'b' in group statement is ambiguous
+# Now both a and b fields are on the SELECT list and they are bound to t1
+# so derived D must be eliminated
+explain select t1.* from t1 left join
+(select a as a1, b as b1, count(*) as cnt from t2 group by a, b) D
+on D.a1=t1.a and D.b1=t1.b;
+id select_type table type possible_keys key key_len ref rows Extra
+1 PRIMARY t1 ALL NULL NULL NULL NULL 10
+# Different order of fields in GROUP BY and SELECT lists
+# must not hamper the elimination
+explain select t1.* from t1 left join
+(select count(*) as cnt, b, a from t2 group by a, b) D on D.a=t1.a and D.b=t1.b;
+id select_type table type possible_keys key key_len ref rows Extra
+1 PRIMARY t1 ALL NULL NULL NULL NULL 10
+drop view v2b, v2c, v2d, v2e;
+drop table t1, t11, t12, t13, t2;
+#
+# End of MDEV-26278: Table elimination does not work across derived tables
+#
+#
+# MDEV-28881: Server crashes in Dep_analysis_context::create_table_value/
+# check_func_dependency
+#
+CREATE TABLE t1 (a1 int, a2 int);
+INSERT INTO t1 VALUES (0,276),(5,277),(NULL,278);
+CREATE TABLE t2 ( a1 int, a2 int, KEY a2 (a2));
+INSERT INTO t2 VALUES (11,NULL),(185,0);
+SELECT t1.* FROM t1 LEFT JOIN
+( SELECT * FROM (SELECT t2.a1 AS a1, min(t2.a2) AS a2 FROM t2
+WHERE t2.a2 <> NULL
+GROUP BY t2.a1) dt
+) dt2 ON dt2.a2 = t1.a2;
+a1 a2
+0 276
+5 277
+NULL 278
+DROP TABLE t1, t2;
+#
+# MDEV-30007: SIGSEGV in st_select_lex_unit::is_derived_eliminated,
+# runtime error: member access within null pointer of type
+# 'struct TABLE' in st_select_lex_unit::is_derived_eliminated()
+#
+CREATE VIEW v AS SELECT 1 AS a;
+SELECT ROUND ((SELECT 1 FROM v)) FROM v GROUP BY ROUND ((SELECT 1 FROM v));
+ROUND ((SELECT 1 FROM v))
+1
+EXPLAIN
+SELECT ROUND ((SELECT 1 FROM v)) FROM v GROUP BY ROUND ((SELECT 1 FROM v));
+id select_type table type possible_keys key key_len ref rows Extra
+1 PRIMARY <derived4> system NULL NULL NULL NULL 1
+4 DERIVED NULL NULL NULL NULL NULL NULL NULL No tables used
+2 SUBQUERY <derived5> system NULL NULL NULL NULL 1
+5 DERIVED NULL NULL NULL NULL NULL NULL NULL No tables used
+DROP VIEW v;
+#
+# End of 10.10 tests
+#
diff --git a/mysql-test/main/table_elim.test b/mysql-test/main/table_elim.test
index e5770877e6f..d6bf925c2c0 100644
--- a/mysql-test/main/table_elim.test
+++ b/mysql-test/main/table_elim.test
@@ -1,6 +1,7 @@
#
# Table elimination (MWL#17) tests
#
+--source include/have_sequence.inc
--disable_warnings
drop table if exists t0, t1, t2, t3, t4, t5, t6;
drop view if exists v1, v2;
@@ -646,3 +647,155 @@ LIMIT 1;
DROP TABLE t1,t2;
--enable_view_protocol
+
+--echo #
+--echo # MDEV-26278: Table elimination does not work across derived tables
+--echo #
+create table t1 (a int, b int);
+insert into t1 select seq, seq+10 from seq_1_to_10;
+
+create table t11 (
+ a int not null,
+ b int,
+ key(a)
+);
+
+insert into t11 select A.seq, A.seq+B.seq
+from
+ seq_1_to_10 A,
+ seq_1_to_100 B;
+create table t12 (
+ pk int primary key,
+ col1 int
+);
+
+insert into t12 select seq, seq from seq_1_to_1000;
+
+create view v2b as
+select t11.a as a, count(*) as b
+from t11 left join t12 on t12.pk=t11.b
+group by t11.a;
+
+--echo # The whole v2b is eliminated
+explain select t1.* from t1 left join v2b on v2b.a=t1.a;
+
+--echo # Check format JSON as well
+explain format=JSON select t1.* from t1 left join v2b on t1.a=v2b.a;
+
+--echo # Elimination of a whole subquery
+explain select t1.* from t1 left join
+ (select t11.a as a, count(*) as b
+ from t11 left join t12 on t12.pk=t11.b
+ group by t11.a) v2b on v2b.a=t1.a;
+
+--echo # In this case v2b cannot be eliminated (since v2b.b is not unique)!
+explain select t1.* from t1 left join v2b on t1.a=v2b.b;
+
+--echo # Check format JSON as well
+explain format=JSON select t1.* from t1 left join v2b on t1.a=v2b.b;
+
+create view v2c as
+select t11.a as a, max(t12.col1) as b
+from t11 left join t12 on t12.pk=t11.b
+group by t11.a;
+
+--echo # The whole v2c is eliminated
+explain select t1.* from t1 left join v2c on v2c.a=t1.a;
+
+--echo # Check format JSON as well
+explain format=JSON select t1.* from t1 left join v2c on v2c.a=t1.a;
+
+--echo # In this case v2c cannot be eliminated (since v2c.b is not unique)!
+explain select t1.* from t1 left join v2c on t1.a=v2c.b;
+
+--echo # Check format JSON as well
+explain format=JSON select t1.* from t1 left join v2c on t1.a=v2c.b;
+
+--echo # Create a view with multiple fields in the GROUP BY clause:
+create view v2d as
+select t11.a as a, t11.b as b, max(t12.col1) as max_col1
+from t11 left join t12 on t12.pk=t11.b
+group by t11.a, t11.b;
+
+--echo # This one must not be eliminated since only one of the GROUP BY fields is bound:
+explain select t1.* from t1 left join v2d on v2d.a=t1.a;
+
+--echo # This must be eliminated since both fields are bound:
+explain select t1.* from t1 left join v2d on v2d.a=t1.a and v2d.b=t1.b;
+
+create table t13 (dt date, b int);
+
+--echo # Function year() in the GROUP BY list prevents treating this field
+--echo # as a unique key
+create view v2e as
+select year(t13.dt) as yyy, max(t12.col1) as max_col1
+from t13 join t12 on t12.pk=t13.b
+group by yyy;
+
+--echo # No elimination here since function year() is used
+explain select t1.* from t1 left join v2e on v2e.yyy=t1.a;
+
+create table t2 (a int, b int, c int);
+insert into t2 select A.seq, B.seq, 123 from seq_1_to_3 A, seq_1_to_3 B;
+
+--echo # No elimination here since not all fields of the derived table's
+--echo # GROUP BY are on the SELECT list so D.a is not unique
+explain select t1.* from t1 left join
+ (select a, count(*) as cnt from t2 group by a, b) D on D.a=t1.a;
+
+--echo # Still no elimination 'cause field D.b is just an alias for t2.a
+explain select t1.* from t1 left join
+ (select a, a as b, count(*) as cnt from t2 group by a, b) D on D.a=t1.a and D.b=t1.b;
+
+--echo # Now both a and b fields are on the SELECT list and they are bound to t1
+--echo # so derived D must be eliminated
+explain select t1.* from t1 left join
+ (select a as a1, b as b1, count(*) as cnt from t2 group by a, b) D
+ on D.a1=t1.a and D.b1=t1.b;
+
+--echo # Different order of fields in GROUP BY and SELECT lists
+--echo # must not hamper the elimination
+explain select t1.* from t1 left join
+ (select count(*) as cnt, b, a from t2 group by a, b) D on D.a=t1.a and D.b=t1.b;
+
+
+drop view v2b, v2c, v2d, v2e;
+drop table t1, t11, t12, t13, t2;
+
+--echo #
+--echo # End of MDEV-26278: Table elimination does not work across derived tables
+--echo #
+
+--echo #
+--echo # MDEV-28881: Server crashes in Dep_analysis_context::create_table_value/
+--echo # check_func_dependency
+--echo #
+
+CREATE TABLE t1 (a1 int, a2 int);
+INSERT INTO t1 VALUES (0,276),(5,277),(NULL,278);
+
+CREATE TABLE t2 ( a1 int, a2 int, KEY a2 (a2));
+INSERT INTO t2 VALUES (11,NULL),(185,0);
+
+SELECT t1.* FROM t1 LEFT JOIN
+ ( SELECT * FROM (SELECT t2.a1 AS a1, min(t2.a2) AS a2 FROM t2
+ WHERE t2.a2 <> NULL
+ GROUP BY t2.a1) dt
+ ) dt2 ON dt2.a2 = t1.a2;
+
+DROP TABLE t1, t2;
+
+--echo #
+--echo # MDEV-30007: SIGSEGV in st_select_lex_unit::is_derived_eliminated,
+--echo # runtime error: member access within null pointer of type
+--echo # 'struct TABLE' in st_select_lex_unit::is_derived_eliminated()
+--echo #
+CREATE VIEW v AS SELECT 1 AS a;
+SELECT ROUND ((SELECT 1 FROM v)) FROM v GROUP BY ROUND ((SELECT 1 FROM v));
+EXPLAIN
+SELECT ROUND ((SELECT 1 FROM v)) FROM v GROUP BY ROUND ((SELECT 1 FROM v));
+DROP VIEW v;
+
+--echo #
+--echo # End of 10.10 tests
+--echo #
diff --git a/mysql-test/main/timezone2.result b/mysql-test/main/timezone2.result
index 806255f26f5..31b17fbc0d9 100644
--- a/mysql-test/main/timezone2.result
+++ b/mysql-test/main/timezone2.result
@@ -607,7 +607,7 @@ SET time_zone=DEFAULT;
# MDEV-19961 MIN(timestamp_column) returns a wrong result in a GROUP BY query
#
SET time_zone='Europe/Moscow';
-CREATE OR REPLACE TABLE t1 (i INT, d TIMESTAMP);
+CREATE OR REPLACE TABLE t1 (i INT, d TIMESTAMP NOT NULL DEFAULT NOW());
SET timestamp=1288477526 /* this is summer time */ ;
INSERT INTO t1 VALUES (3,NULL);
SET timestamp=1288477526+3599 /* this is winter time*/ ;
@@ -629,7 +629,7 @@ SET time_zone=DEFAULT;
# MDEV-20397 Support TIMESTAMP, DATETIME, TIME in ROUND() and TRUNCATE()
#
SET time_zone='Europe/Moscow';
-CREATE TABLE t1 (i INT, d TIMESTAMP(6));
+CREATE TABLE t1 (i INT, d TIMESTAMP(6) NOT NULL DEFAULT NOW());
SET timestamp=1288479599.999999 /* this is the last second in summer time */ ;
INSERT INTO t1 VALUES (1,NULL);
SET timestamp=1288479600.000000 /* this is the first second in winter time */ ;
diff --git a/mysql-test/main/timezone2.test b/mysql-test/main/timezone2.test
index 20c926a796c..b5045203903 100644
--- a/mysql-test/main/timezone2.test
+++ b/mysql-test/main/timezone2.test
@@ -573,7 +573,7 @@ SET time_zone=DEFAULT;
--echo #
SET time_zone='Europe/Moscow';
-CREATE OR REPLACE TABLE t1 (i INT, d TIMESTAMP);
+CREATE OR REPLACE TABLE t1 (i INT, d TIMESTAMP NOT NULL DEFAULT NOW());
SET timestamp=1288477526 /* this is summer time */ ;
INSERT INTO t1 VALUES (3,NULL);
SET timestamp=1288477526+3599 /* this is winter time*/ ;
@@ -590,7 +590,7 @@ SET time_zone=DEFAULT;
--echo #
SET time_zone='Europe/Moscow';
-CREATE TABLE t1 (i INT, d TIMESTAMP(6));
+CREATE TABLE t1 (i INT, d TIMESTAMP(6) NOT NULL DEFAULT NOW());
SET timestamp=1288479599.999999 /* this is the last second in summer time */ ;
INSERT INTO t1 VALUES (1,NULL);
SET timestamp=1288479600.000000 /* this is the first second in winter time */ ;
diff --git a/mysql-test/main/trigger_null-8605.result b/mysql-test/main/trigger_null-8605.result
index 10315988708..9dcd2994b79 100644
--- a/mysql-test/main/trigger_null-8605.result
+++ b/mysql-test/main/trigger_null-8605.result
@@ -183,7 +183,7 @@ a b c
1 NULL 1
2 2 NULL
drop table t1;
-create table t1 (a timestamp, b int auto_increment primary key);
+create table t1 (a timestamp not null default now() on update now(), b int auto_increment primary key);
create trigger trgi before insert on t1 for each row set new.a=if(new.a is null, '2000-10-20 10:20:30', NULL);
set statement timestamp=777777777 for insert t1 (a) values (NULL);
set statement timestamp=888888888 for insert t1 (a) values ('1999-12-11 10:9:8');
diff --git a/mysql-test/main/trigger_null-8605.test b/mysql-test/main/trigger_null-8605.test
index 7645b61f5ad..c9a7cd5477d 100644
--- a/mysql-test/main/trigger_null-8605.test
+++ b/mysql-test/main/trigger_null-8605.test
@@ -152,7 +152,7 @@ drop table t1;
--remove_file $datadir/test/mdev8605.txt
# timestamps (on NULL = NOW())
-create table t1 (a timestamp, b int auto_increment primary key);
+create table t1 (a timestamp not null default now() on update now(), b int auto_increment primary key);
create trigger trgi before insert on t1 for each row set new.a=if(new.a is null, '2000-10-20 10:20:30', NULL);
set statement timestamp=777777777 for insert t1 (a) values (NULL);
set statement timestamp=888888888 for insert t1 (a) values ('1999-12-11 10:9:8');
diff --git a/mysql-test/main/type_temporal_mysql56_debug.result b/mysql-test/main/type_temporal_mysql56_debug.result
index 24fbc511aef..5ee22aa5b7f 100644
--- a/mysql-test/main/type_temporal_mysql56_debug.result
+++ b/mysql-test/main/type_temporal_mysql56_debug.result
@@ -301,25 +301,25 @@ CALL mdev16542;
# Original table
Table Create Table
t1 CREATE TABLE `t1` (
- `a0` timestamp /* mysql-5.6 */ NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
- `a1` timestamp(1) /* mysql-5.6 */ NOT NULL DEFAULT '0000-00-00 00:00:00.0',
- `a2` timestamp(2) /* mysql-5.6 */ NOT NULL DEFAULT '0000-00-00 00:00:00.00',
- `a3` timestamp(3) /* mysql-5.6 */ NOT NULL DEFAULT '0000-00-00 00:00:00.000',
- `a4` timestamp(4) /* mysql-5.6 */ NOT NULL DEFAULT '0000-00-00 00:00:00.0000',
- `a5` timestamp(5) /* mysql-5.6 */ NOT NULL DEFAULT '0000-00-00 00:00:00.00000',
- `a6` timestamp(6) /* mysql-5.6 */ NOT NULL DEFAULT '0000-00-00 00:00:00.000000'
+ `a0` timestamp /* mysql-5.6 */ NULL DEFAULT NULL,
+ `a1` timestamp(1) /* mysql-5.6 */ NULL DEFAULT NULL,
+ `a2` timestamp(2) /* mysql-5.6 */ NULL DEFAULT NULL,
+ `a3` timestamp(3) /* mysql-5.6 */ NULL DEFAULT NULL,
+ `a4` timestamp(4) /* mysql-5.6 */ NULL DEFAULT NULL,
+ `a5` timestamp(5) /* mysql-5.6 */ NULL DEFAULT NULL,
+ `a6` timestamp(6) /* mysql-5.6 */ NULL DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
# CREATE..SELECT and SHOW
Table Create Table
t2 CREATE TABLE `t2` (
- `a0` timestamp /* mysql-5.6 */ NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
- `a1` timestamp(1) /* mysql-5.6 */ NOT NULL DEFAULT '0000-00-00 00:00:00.0',
- `a2` timestamp(2) /* mysql-5.6 */ NOT NULL DEFAULT '0000-00-00 00:00:00.00',
- `a3` timestamp(3) /* mysql-5.6 */ NOT NULL DEFAULT '0000-00-00 00:00:00.000',
- `a4` timestamp(4) /* mysql-5.6 */ NOT NULL DEFAULT '0000-00-00 00:00:00.0000',
- `a5` timestamp(5) /* mysql-5.6 */ NOT NULL DEFAULT '0000-00-00 00:00:00.00000',
- `a6` timestamp(6) /* mysql-5.6 */ NOT NULL DEFAULT '0000-00-00 00:00:00.000000',
+ `a0` timestamp /* mysql-5.6 */ NULL DEFAULT NULL,
+ `a1` timestamp(1) /* mysql-5.6 */ NULL DEFAULT NULL,
+ `a2` timestamp(2) /* mysql-5.6 */ NULL DEFAULT NULL,
+ `a3` timestamp(3) /* mysql-5.6 */ NULL DEFAULT NULL,
+ `a4` timestamp(4) /* mysql-5.6 */ NULL DEFAULT NULL,
+ `a5` timestamp(5) /* mysql-5.6 */ NULL DEFAULT NULL,
+ `a6` timestamp(6) /* mysql-5.6 */ NULL DEFAULT NULL,
`COALESCE(a0)` timestamp /* mysql-5.6 */ NULL DEFAULT NULL,
`COALESCE(a1)` timestamp(1) /* mysql-5.6 */ NULL DEFAULT NULL,
`COALESCE(a2)` timestamp(2) /* mysql-5.6 */ NULL DEFAULT NULL,
@@ -332,13 +332,13 @@ t2 CREATE TABLE `t2` (
# ALTER..FORCE and SHOW
Table Create Table
t1 CREATE TABLE `t1` (
- `a0` timestamp /* mysql-5.6 */ NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
- `a1` timestamp(1) /* mysql-5.6 */ NOT NULL DEFAULT '0000-00-00 00:00:00.0',
- `a2` timestamp(2) /* mysql-5.6 */ NOT NULL DEFAULT '0000-00-00 00:00:00.00',
- `a3` timestamp(3) /* mysql-5.6 */ NOT NULL DEFAULT '0000-00-00 00:00:00.000',
- `a4` timestamp(4) /* mysql-5.6 */ NOT NULL DEFAULT '0000-00-00 00:00:00.0000',
- `a5` timestamp(5) /* mysql-5.6 */ NOT NULL DEFAULT '0000-00-00 00:00:00.00000',
- `a6` timestamp(6) /* mysql-5.6 */ NOT NULL DEFAULT '0000-00-00 00:00:00.000000'
+ `a0` timestamp /* mysql-5.6 */ NULL DEFAULT NULL,
+ `a1` timestamp(1) /* mysql-5.6 */ NULL DEFAULT NULL,
+ `a2` timestamp(2) /* mysql-5.6 */ NULL DEFAULT NULL,
+ `a3` timestamp(3) /* mysql-5.6 */ NULL DEFAULT NULL,
+ `a4` timestamp(4) /* mysql-5.6 */ NULL DEFAULT NULL,
+ `a5` timestamp(5) /* mysql-5.6 */ NULL DEFAULT NULL,
+ `a6` timestamp(6) /* mysql-5.6 */ NULL DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
# Setting @@global.mysql56_temporal_format=false
@@ -346,13 +346,13 @@ t1 CREATE TABLE `t1` (
# CREATE..SELECT and SHOW
Table Create Table
t2 CREATE TABLE `t2` (
- `a0` timestamp /* mariadb-5.3 */ NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
- `a1` timestamp(1) /* mariadb-5.3 */ NOT NULL DEFAULT '0000-00-00 00:00:00.0',
- `a2` timestamp(2) /* mariadb-5.3 */ NOT NULL DEFAULT '0000-00-00 00:00:00.00',
- `a3` timestamp(3) /* mariadb-5.3 */ NOT NULL DEFAULT '0000-00-00 00:00:00.000',
- `a4` timestamp(4) /* mariadb-5.3 */ NOT NULL DEFAULT '0000-00-00 00:00:00.0000',
- `a5` timestamp(5) /* mariadb-5.3 */ NOT NULL DEFAULT '0000-00-00 00:00:00.00000',
- `a6` timestamp(6) /* mariadb-5.3 */ NOT NULL DEFAULT '0000-00-00 00:00:00.000000',
+ `a0` timestamp /* mariadb-5.3 */ NULL DEFAULT NULL,
+ `a1` timestamp(1) /* mariadb-5.3 */ NULL DEFAULT NULL,
+ `a2` timestamp(2) /* mariadb-5.3 */ NULL DEFAULT NULL,
+ `a3` timestamp(3) /* mariadb-5.3 */ NULL DEFAULT NULL,
+ `a4` timestamp(4) /* mariadb-5.3 */ NULL DEFAULT NULL,
+ `a5` timestamp(5) /* mariadb-5.3 */ NULL DEFAULT NULL,
+ `a6` timestamp(6) /* mariadb-5.3 */ NULL DEFAULT NULL,
`COALESCE(a0)` timestamp /* mariadb-5.3 */ NULL DEFAULT NULL,
`COALESCE(a1)` timestamp(1) /* mariadb-5.3 */ NULL DEFAULT NULL,
`COALESCE(a2)` timestamp(2) /* mariadb-5.3 */ NULL DEFAULT NULL,
@@ -365,13 +365,13 @@ t2 CREATE TABLE `t2` (
# ALTER..FORCE and SHOW
Table Create Table
t1 CREATE TABLE `t1` (
- `a0` timestamp /* mariadb-5.3 */ NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
- `a1` timestamp(1) /* mariadb-5.3 */ NOT NULL DEFAULT '0000-00-00 00:00:00.0',
- `a2` timestamp(2) /* mariadb-5.3 */ NOT NULL DEFAULT '0000-00-00 00:00:00.00',
- `a3` timestamp(3) /* mariadb-5.3 */ NOT NULL DEFAULT '0000-00-00 00:00:00.000',
- `a4` timestamp(4) /* mariadb-5.3 */ NOT NULL DEFAULT '0000-00-00 00:00:00.0000',
- `a5` timestamp(5) /* mariadb-5.3 */ NOT NULL DEFAULT '0000-00-00 00:00:00.00000',
- `a6` timestamp(6) /* mariadb-5.3 */ NOT NULL DEFAULT '0000-00-00 00:00:00.000000'
+ `a0` timestamp /* mariadb-5.3 */ NULL DEFAULT NULL,
+ `a1` timestamp(1) /* mariadb-5.3 */ NULL DEFAULT NULL,
+ `a2` timestamp(2) /* mariadb-5.3 */ NULL DEFAULT NULL,
+ `a3` timestamp(3) /* mariadb-5.3 */ NULL DEFAULT NULL,
+ `a4` timestamp(4) /* mariadb-5.3 */ NULL DEFAULT NULL,
+ `a5` timestamp(5) /* mariadb-5.3 */ NULL DEFAULT NULL,
+ `a6` timestamp(6) /* mariadb-5.3 */ NULL DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
# Setting @@global.mysql56_temporal_format=true
@@ -379,13 +379,13 @@ t1 CREATE TABLE `t1` (
# CREATE..SELECT and SHOW
Table Create Table
t2 CREATE TABLE `t2` (
- `a0` timestamp /* mysql-5.6 */ NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
- `a1` timestamp(1) /* mysql-5.6 */ NOT NULL DEFAULT '0000-00-00 00:00:00.0',
- `a2` timestamp(2) /* mysql-5.6 */ NOT NULL DEFAULT '0000-00-00 00:00:00.00',
- `a3` timestamp(3) /* mysql-5.6 */ NOT NULL DEFAULT '0000-00-00 00:00:00.000',
- `a4` timestamp(4) /* mysql-5.6 */ NOT NULL DEFAULT '0000-00-00 00:00:00.0000',
- `a5` timestamp(5) /* mysql-5.6 */ NOT NULL DEFAULT '0000-00-00 00:00:00.00000',
- `a6` timestamp(6) /* mysql-5.6 */ NOT NULL DEFAULT '0000-00-00 00:00:00.000000',
+ `a0` timestamp /* mysql-5.6 */ NULL DEFAULT NULL,
+ `a1` timestamp(1) /* mysql-5.6 */ NULL DEFAULT NULL,
+ `a2` timestamp(2) /* mysql-5.6 */ NULL DEFAULT NULL,
+ `a3` timestamp(3) /* mysql-5.6 */ NULL DEFAULT NULL,
+ `a4` timestamp(4) /* mysql-5.6 */ NULL DEFAULT NULL,
+ `a5` timestamp(5) /* mysql-5.6 */ NULL DEFAULT NULL,
+ `a6` timestamp(6) /* mysql-5.6 */ NULL DEFAULT NULL,
`COALESCE(a0)` timestamp /* mysql-5.6 */ NULL DEFAULT NULL,
`COALESCE(a1)` timestamp(1) /* mysql-5.6 */ NULL DEFAULT NULL,
`COALESCE(a2)` timestamp(2) /* mysql-5.6 */ NULL DEFAULT NULL,
@@ -398,13 +398,13 @@ t2 CREATE TABLE `t2` (
# ALTER..FORCE and SHOW
Table Create Table
t1 CREATE TABLE `t1` (
- `a0` timestamp /* mysql-5.6 */ NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
- `a1` timestamp(1) /* mysql-5.6 */ NOT NULL DEFAULT '0000-00-00 00:00:00.0',
- `a2` timestamp(2) /* mysql-5.6 */ NOT NULL DEFAULT '0000-00-00 00:00:00.00',
- `a3` timestamp(3) /* mysql-5.6 */ NOT NULL DEFAULT '0000-00-00 00:00:00.000',
- `a4` timestamp(4) /* mysql-5.6 */ NOT NULL DEFAULT '0000-00-00 00:00:00.0000',
- `a5` timestamp(5) /* mysql-5.6 */ NOT NULL DEFAULT '0000-00-00 00:00:00.00000',
- `a6` timestamp(6) /* mysql-5.6 */ NOT NULL DEFAULT '0000-00-00 00:00:00.000000'
+ `a0` timestamp /* mysql-5.6 */ NULL DEFAULT NULL,
+ `a1` timestamp(1) /* mysql-5.6 */ NULL DEFAULT NULL,
+ `a2` timestamp(2) /* mysql-5.6 */ NULL DEFAULT NULL,
+ `a3` timestamp(3) /* mysql-5.6 */ NULL DEFAULT NULL,
+ `a4` timestamp(4) /* mysql-5.6 */ NULL DEFAULT NULL,
+ `a5` timestamp(5) /* mysql-5.6 */ NULL DEFAULT NULL,
+ `a6` timestamp(6) /* mysql-5.6 */ NULL DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
SET @@global.mysql56_temporal_format=DEFAULT;
diff --git a/mysql-test/main/type_timestamp.result b/mysql-test/main/type_timestamp.result
index 275d35ac476..a4516fc91a2 100644
--- a/mysql-test/main/type_timestamp.result
+++ b/mysql-test/main/type_timestamp.result
@@ -1145,7 +1145,7 @@ DROP TABLE t1;
# MDEV-17972 Assertion `is_valid_value_slow()' failed in Datetime::Datetime
#
SET time_zone='+00:00';
-CREATE TABLE t1 (a TIMESTAMP(6)) ENGINE=MyISAM;
+CREATE TABLE t1 (a TIMESTAMP(6) NOT NULL) ENGINE=MyISAM;
INSERT INTO t1 VALUES ('2001-01-01 10:20:30');
FLUSH TABLES;
MYD
diff --git a/mysql-test/main/type_timestamp.test b/mysql-test/main/type_timestamp.test
index bff33c030b5..8edd52fec2a 100644
--- a/mysql-test/main/type_timestamp.test
+++ b/mysql-test/main/type_timestamp.test
@@ -731,7 +731,7 @@ DROP TABLE t1;
let $MYSQLD_DATADIR= `select @@datadir`;
SET time_zone='+00:00';
-CREATE TABLE t1 (a TIMESTAMP(6)) ENGINE=MyISAM;
+CREATE TABLE t1 (a TIMESTAMP(6) NOT NULL) ENGINE=MyISAM;
INSERT INTO t1 VALUES ('2001-01-01 10:20:30');
FLUSH TABLES;
--remove_file $MYSQLD_DATADIR/test/t1.MYD
diff --git a/mysql-test/main/type_timestamp_hires.result b/mysql-test/main/type_timestamp_hires.result
index 94807e8c561..ac2d4392bee 100644
--- a/mysql-test/main/type_timestamp_hires.result
+++ b/mysql-test/main/type_timestamp_hires.result
@@ -276,19 +276,19 @@ create or replace table t1 (a timestamp(5) default current_timestamp);
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `a` timestamp(5) NOT NULL DEFAULT current_timestamp(5)
+ `a` timestamp(5) NULL DEFAULT current_timestamp(5)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
create or replace table t1 (a timestamp(5) default current_timestamp());
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `a` timestamp(5) NOT NULL DEFAULT current_timestamp(5)
+ `a` timestamp(5) NULL DEFAULT current_timestamp(5)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
create or replace table t1 (a timestamp(5) default current_timestamp(2));
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `a` timestamp(5) NOT NULL DEFAULT current_timestamp(2)
+ `a` timestamp(5) NULL DEFAULT current_timestamp(2)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
insert t1 () values ();
select * from t1;
@@ -298,25 +298,25 @@ create or replace table t1 (a timestamp(5) default current_timestamp(5));
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `a` timestamp(5) NOT NULL DEFAULT current_timestamp(5)
+ `a` timestamp(5) NULL DEFAULT current_timestamp(5)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
create or replace table t1 (a timestamp(5) default current_timestamp(6));
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `a` timestamp(5) NOT NULL DEFAULT current_timestamp(5)
+ `a` timestamp(5) NULL DEFAULT current_timestamp(5)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
create or replace table t1 (a timestamp(5) on update current_timestamp);
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `a` timestamp(5) NOT NULL DEFAULT '0000-00-00 00:00:00.00000' ON UPDATE current_timestamp(5)
+ `a` timestamp(5) NULL DEFAULT NULL ON UPDATE current_timestamp(5)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
create or replace table t1 (a timestamp(5) on update current_timestamp());
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `a` timestamp(5) NOT NULL DEFAULT '0000-00-00 00:00:00.00000' ON UPDATE current_timestamp(5)
+ `a` timestamp(5) NULL DEFAULT NULL ON UPDATE current_timestamp(5)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
create or replace table t1 (a timestamp(5) on update current_timestamp(3));
ERROR HY000: Invalid ON UPDATE clause for 'a' column
@@ -324,13 +324,13 @@ create or replace table t1 (a timestamp(5) on update current_timestamp(5));
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `a` timestamp(5) NOT NULL DEFAULT '0000-00-00 00:00:00.00000' ON UPDATE current_timestamp(5)
+ `a` timestamp(5) NULL DEFAULT NULL ON UPDATE current_timestamp(5)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
create or replace table t1 (a timestamp(5) on update current_timestamp(6));
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `a` timestamp(5) NOT NULL DEFAULT '0000-00-00 00:00:00.00000' ON UPDATE current_timestamp(5)
+ `a` timestamp(5) NULL DEFAULT NULL ON UPDATE current_timestamp(5)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
drop table t1;
#
diff --git a/mysql-test/main/user_var-binlog.result b/mysql-test/main/user_var-binlog.result
index cd0bf056c17..d2a39f1ae4e 100644
--- a/mysql-test/main/user_var-binlog.result
+++ b/mysql-test/main/user_var-binlog.result
@@ -29,7 +29,7 @@ SET @`a b`:=_latin1 X'68656C6C6F' COLLATE `latin1_swedish_ci`/*!*/;
use `test`/*!*/;
SET TIMESTAMP=10000/*!*/;
SET @@session.pseudo_thread_id=999999999/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=1411383296/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
diff --git a/mysql-test/main/variables.result b/mysql-test/main/variables.result
index 3f367ef4599..f6817a2a4d2 100644
--- a/mysql-test/main/variables.result
+++ b/mysql-test/main/variables.result
@@ -1744,24 +1744,24 @@ drop function t1_max;
#
# Bug #59884: setting charset to 2048 crashes
#
-set session character_set_results = 2048;
-ERROR 42000: Unknown character set: '2048'
-set session character_set_client=2048;
-ERROR 42000: Unknown character set: '2048'
-set session character_set_connection=2048;
-ERROR 42000: Unknown character set: '2048'
-set session character_set_server=2048;
-ERROR 42000: Unknown character set: '2048'
-set session collation_server=2048;
-ERROR HY000: Unknown collation: '2048'
-set session character_set_filesystem=2048;
-ERROR 42000: Unknown character set: '2048'
-set session character_set_database=2048;
-ERROR 42000: Unknown character set: '2048'
-set session collation_connection=2048;
-ERROR HY000: Unknown collation: '2048'
-set session collation_database=2048;
-ERROR HY000: Unknown collation: '2048'
+set session character_set_results = 4096;
+ERROR 42000: Unknown character set: '4096'
+set session character_set_client=4096;
+ERROR 42000: Unknown character set: '4096'
+set session character_set_connection=4096;
+ERROR 42000: Unknown character set: '4096'
+set session character_set_server=4096;
+ERROR 42000: Unknown character set: '4096'
+set session collation_server=4096;
+ERROR HY000: Unknown collation: '4096'
+set session character_set_filesystem=4096;
+ERROR 42000: Unknown character set: '4096'
+set session character_set_database=4096;
+ERROR 42000: Unknown character set: '4096'
+set session collation_connection=4096;
+ERROR HY000: Unknown collation: '4096'
+set session collation_database=4096;
+ERROR HY000: Unknown collation: '4096'
set session rand_seed1=DEFAULT;
ERROR 42000: Variable 'rand_seed1' doesn't have a default value
set autocommit = value(v);
diff --git a/mysql-test/main/variables.test b/mysql-test/main/variables.test
index 495ab101352..c8b36925df6 100644
--- a/mysql-test/main/variables.test
+++ b/mysql-test/main/variables.test
@@ -1484,23 +1484,23 @@ drop function t1_max;
--echo #
--error ER_UNKNOWN_CHARACTER_SET
-set session character_set_results = 2048;
+set session character_set_results = 4096;
--error ER_UNKNOWN_CHARACTER_SET
-set session character_set_client=2048;
+set session character_set_client=4096;
--error ER_UNKNOWN_CHARACTER_SET
-set session character_set_connection=2048;
+set session character_set_connection=4096;
--error ER_UNKNOWN_CHARACTER_SET
-set session character_set_server=2048;
+set session character_set_server=4096;
--error ER_UNKNOWN_COLLATION
-set session collation_server=2048;
+set session collation_server=4096;
--error ER_UNKNOWN_CHARACTER_SET
-set session character_set_filesystem=2048;
+set session character_set_filesystem=4096;
--error ER_UNKNOWN_CHARACTER_SET
-set session character_set_database=2048;
+set session character_set_database=4096;
--error ER_UNKNOWN_COLLATION
-set session collation_connection=2048;
+set session collation_connection=4096;
--error ER_UNKNOWN_COLLATION
-set session collation_database=2048;
+set session collation_database=4096;
#
# Bug #16044655 CRASH: SETTING DEFAULT VALUE FOR SOME VARIABLES
diff --git a/mysql-test/std_data/ldml/Index.xml b/mysql-test/std_data/ldml/Index.xml
index a6fee091d02..b55b05598da 100644
--- a/mysql-test/std_data/ldml/Index.xml
+++ b/mysql-test/std_data/ldml/Index.xml
@@ -175,6 +175,9 @@
</collation>
<collation name="utf8mb4_test_520_nopad_ci" id="329" version="5.2.0" flag="nopad">
</collation>
+ <collation name="utf8mb4_uca1400_test01_as_ci" id="330" version="14.0.0">
+ <settings strength="2"/>
+ </collation>
</charset>
<charset name="utf16">
diff --git a/mysql-test/std_data/unicode/allkeys1400.txt b/mysql-test/std_data/unicode/allkeys1400.txt
new file mode 100644
index 00000000000..ef0f8816a95
--- /dev/null
+++ b/mysql-test/std_data/unicode/allkeys1400.txt
@@ -0,0 +1,33925 @@
+# allkeys-14.0.0.txt
+# Date: 2021-07-10, 10:53:42 GMT [KW]
+# Copyright 2021 Unicode, Inc.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
+#
+# This file defines the Default Unicode Collation Element Table
+# (DUCET) for the Unicode Collation Algorithm
+#
+# See UTS #10, Unicode Collation Algorithm, for more information.
+#
+# Diagnostic weight ranges
+# Primary weight range: 0200..5E72 (23667)
+# Secondary weight range: 0020..011C (253)
+# Variant secondaries: 0118..011C (5)
+# Tertiary weight range: 0002..001F (30)
+#
+@version 14.0.0
+
+@implicitweights 17000..18AFF; FB00 # Tangut and Tangut Components
+
+@implicitweights 18D00..18D8F; FB00 # Tangut Supplement
+
+@implicitweights 1B170..1B2FF; FB01 # Nushu
+
+@implicitweights 18B00..18CFF; FB02 # Khitan Small Script
+
+0000 ; [.0000.0000.0000] # NULL (in ISO 6429)
+0001 ; [.0000.0000.0000] # START OF HEADING (in ISO 6429)
+0002 ; [.0000.0000.0000] # START OF TEXT (in ISO 6429)
+0003 ; [.0000.0000.0000] # END OF TEXT (in ISO 6429)
+0004 ; [.0000.0000.0000] # END OF TRANSMISSION (in ISO 6429)
+0005 ; [.0000.0000.0000] # ENQUIRY (in ISO 6429)
+0006 ; [.0000.0000.0000] # ACKNOWLEDGE (in ISO 6429)
+0007 ; [.0000.0000.0000] # BELL (in ISO 6429)
+0008 ; [.0000.0000.0000] # BACKSPACE (in ISO 6429)
+000E ; [.0000.0000.0000] # SHIFT OUT (in ISO 6429)
+000F ; [.0000.0000.0000] # SHIFT IN (in ISO 6429)
+0010 ; [.0000.0000.0000] # DATA LINK ESCAPE (in ISO 6429)
+0011 ; [.0000.0000.0000] # DEVICE CONTROL ONE (in ISO 6429)
+0012 ; [.0000.0000.0000] # DEVICE CONTROL TWO (in ISO 6429)
+0013 ; [.0000.0000.0000] # DEVICE CONTROL THREE (in ISO 6429)
+0014 ; [.0000.0000.0000] # DEVICE CONTROL FOUR (in ISO 6429)
+0015 ; [.0000.0000.0000] # NEGATIVE ACKNOWLEDGE (in ISO 6429)
+0016 ; [.0000.0000.0000] # SYNCHRONOUS IDLE (in ISO 6429)
+0017 ; [.0000.0000.0000] # END OF TRANSMISSION BLOCK (in ISO 6429)
+0018 ; [.0000.0000.0000] # CANCEL (in ISO 6429)
+0019 ; [.0000.0000.0000] # END OF MEDIUM (in ISO 6429)
+001A ; [.0000.0000.0000] # SUBSTITUTE (in ISO 6429)
+001B ; [.0000.0000.0000] # ESCAPE (in ISO 6429)
+001C ; [.0000.0000.0000] # FILE SEPARATOR (in ISO 6429)
+001D ; [.0000.0000.0000] # GROUP SEPARATOR (in ISO 6429)
+001E ; [.0000.0000.0000] # RECORD SEPARATOR (in ISO 6429)
+001F ; [.0000.0000.0000] # UNIT SEPARATOR (in ISO 6429)
+007F ; [.0000.0000.0000] # DELETE (in ISO 6429)
+0080 ; [.0000.0000.0000] # <control>
+0081 ; [.0000.0000.0000] # <control>
+0082 ; [.0000.0000.0000] # BREAK PERMITTED HERE (in ISO 6429)
+0083 ; [.0000.0000.0000] # NO BREAK HERE (in ISO 6429)
+0084 ; [.0000.0000.0000] # <control>
+0086 ; [.0000.0000.0000] # START OF SELECTED AREA (in ISO 6429)
+0087 ; [.0000.0000.0000] # END OF SELECTED AREA (in ISO 6429)
+0088 ; [.0000.0000.0000] # CHARACTER TABULATION SET (in ISO 6429)
+0089 ; [.0000.0000.0000] # CHARACTER TABULATION WITH JUSTIFICATION (in ISO 6429)
+008A ; [.0000.0000.0000] # LINE TABULATION SET (in ISO 6429)
+008B ; [.0000.0000.0000] # PARTIAL LINE FORWARD (in ISO 6429)
+008C ; [.0000.0000.0000] # PARTIAL LINE BACKWARD (in ISO 6429)
+008D ; [.0000.0000.0000] # PARTIAL LINE FEED (in ISO 6429)
+008E ; [.0000.0000.0000] # SINGLE SHIFT TWO (in ISO 6429)
+008F ; [.0000.0000.0000] # SINGLE SHIFT THREE (in ISO 6429)
+0090 ; [.0000.0000.0000] # DEVICE CONTROL STRING (in ISO 6429)
+0091 ; [.0000.0000.0000] # PRIVATE USE ONE (in ISO 6429)
+0092 ; [.0000.0000.0000] # PRIVATE USE TWO (in ISO 6429)
+0093 ; [.0000.0000.0000] # SET TRANSMIT STATE (in ISO 6429)
+0094 ; [.0000.0000.0000] # CANCEL CHARACTER (in ISO 6429)
+0095 ; [.0000.0000.0000] # MESSAGE WAITING (in ISO 6429)
+0096 ; [.0000.0000.0000] # START OF GUARDED AREA (in ISO 6429)
+0097 ; [.0000.0000.0000] # END OF GUARDED AREA (in ISO 6429)
+0098 ; [.0000.0000.0000] # START OF STRING (in ISO 6429)
+0099 ; [.0000.0000.0000] # <control>
+009A ; [.0000.0000.0000] # SINGLE CHARACTER INTRODUCER (in ISO 6429)
+009B ; [.0000.0000.0000] # CONTROL SEQUENCE INTRODUCER (in ISO 6429)
+009C ; [.0000.0000.0000] # STRING TERMINATOR (in ISO 6429)
+009D ; [.0000.0000.0000] # OPERATING SYSTEM COMMAND (in ISO 6429)
+009E ; [.0000.0000.0000] # PRIVACY MESSAGE (in ISO 6429)
+009F ; [.0000.0000.0000] # APPLICATION PROGRAM COMMAND (in ISO 6429)
+00AD ; [.0000.0000.0000] # SOFT HYPHEN
+061C ; [.0000.0000.0000] # ARABIC LETTER MARK
+180B ; [.0000.0000.0000] # MONGOLIAN FREE VARIATION SELECTOR ONE
+180C ; [.0000.0000.0000] # MONGOLIAN FREE VARIATION SELECTOR TWO
+180D ; [.0000.0000.0000] # MONGOLIAN FREE VARIATION SELECTOR THREE
+180E ; [.0000.0000.0000] # MONGOLIAN VOWEL SEPARATOR
+180F ; [.0000.0000.0000] # MONGOLIAN FREE VARIATION SELECTOR FOUR
+200B ; [.0000.0000.0000] # ZERO WIDTH SPACE
+200C ; [.0000.0000.0000] # ZERO WIDTH NON-JOINER
+200D ; [.0000.0000.0000] # ZERO WIDTH JOINER
+200E ; [.0000.0000.0000] # LEFT-TO-RIGHT MARK
+200F ; [.0000.0000.0000] # RIGHT-TO-LEFT MARK
+202A ; [.0000.0000.0000] # LEFT-TO-RIGHT EMBEDDING
+202B ; [.0000.0000.0000] # RIGHT-TO-LEFT EMBEDDING
+202C ; [.0000.0000.0000] # POP DIRECTIONAL FORMATTING
+202D ; [.0000.0000.0000] # LEFT-TO-RIGHT OVERRIDE
+202E ; [.0000.0000.0000] # RIGHT-TO-LEFT OVERRIDE
+2060 ; [.0000.0000.0000] # WORD JOINER
+2066 ; [.0000.0000.0000] # LEFT-TO-RIGHT ISOLATE
+2067 ; [.0000.0000.0000] # RIGHT-TO-LEFT ISOLATE
+2068 ; [.0000.0000.0000] # FIRST STRONG ISOLATE
+2069 ; [.0000.0000.0000] # POP DIRECTIONAL ISOLATE
+206A ; [.0000.0000.0000] # INHIBIT SYMMETRIC SWAPPING
+206B ; [.0000.0000.0000] # ACTIVATE SYMMETRIC SWAPPING
+206C ; [.0000.0000.0000] # INHIBIT ARABIC FORM SHAPING
+206D ; [.0000.0000.0000] # ACTIVATE ARABIC FORM SHAPING
+206E ; [.0000.0000.0000] # NATIONAL DIGIT SHAPES
+206F ; [.0000.0000.0000] # NOMINAL DIGIT SHAPES
+FE00 ; [.0000.0000.0000] # VARIATION SELECTOR-1
+FE01 ; [.0000.0000.0000] # VARIATION SELECTOR-2
+FE02 ; [.0000.0000.0000] # VARIATION SELECTOR-3
+FE03 ; [.0000.0000.0000] # VARIATION SELECTOR-4
+FE04 ; [.0000.0000.0000] # VARIATION SELECTOR-5
+FE05 ; [.0000.0000.0000] # VARIATION SELECTOR-6
+FE06 ; [.0000.0000.0000] # VARIATION SELECTOR-7
+FE07 ; [.0000.0000.0000] # VARIATION SELECTOR-8
+FE08 ; [.0000.0000.0000] # VARIATION SELECTOR-9
+FE09 ; [.0000.0000.0000] # VARIATION SELECTOR-10
+FE0A ; [.0000.0000.0000] # VARIATION SELECTOR-11
+FE0B ; [.0000.0000.0000] # VARIATION SELECTOR-12
+FE0C ; [.0000.0000.0000] # VARIATION SELECTOR-13
+FE0D ; [.0000.0000.0000] # VARIATION SELECTOR-14
+FE0E ; [.0000.0000.0000] # VARIATION SELECTOR-15
+FE0F ; [.0000.0000.0000] # VARIATION SELECTOR-16
+FEFF ; [.0000.0000.0000] # ZERO WIDTH NO-BREAK SPACE
+FFF9 ; [.0000.0000.0000] # INTERLINEAR ANNOTATION ANCHOR
+FFFA ; [.0000.0000.0000] # INTERLINEAR ANNOTATION SEPARATOR
+FFFB ; [.0000.0000.0000] # INTERLINEAR ANNOTATION TERMINATOR
+13430 ; [.0000.0000.0000] # EGYPTIAN HIEROGLYPH VERTICAL JOINER
+13431 ; [.0000.0000.0000] # EGYPTIAN HIEROGLYPH HORIZONTAL JOINER
+13432 ; [.0000.0000.0000] # EGYPTIAN HIEROGLYPH INSERT AT TOP START
+13433 ; [.0000.0000.0000] # EGYPTIAN HIEROGLYPH INSERT AT BOTTOM START
+13434 ; [.0000.0000.0000] # EGYPTIAN HIEROGLYPH INSERT AT TOP END
+13435 ; [.0000.0000.0000] # EGYPTIAN HIEROGLYPH INSERT AT BOTTOM END
+13436 ; [.0000.0000.0000] # EGYPTIAN HIEROGLYPH OVERLAY MIDDLE
+13437 ; [.0000.0000.0000] # EGYPTIAN HIEROGLYPH BEGIN SEGMENT
+13438 ; [.0000.0000.0000] # EGYPTIAN HIEROGLYPH END SEGMENT
+1BCA0 ; [.0000.0000.0000] # SHORTHAND FORMAT LETTER OVERLAP
+1BCA1 ; [.0000.0000.0000] # SHORTHAND FORMAT CONTINUING OVERLAP
+1BCA2 ; [.0000.0000.0000] # SHORTHAND FORMAT DOWN STEP
+1BCA3 ; [.0000.0000.0000] # SHORTHAND FORMAT UP STEP
+1D173 ; [.0000.0000.0000] # MUSICAL SYMBOL BEGIN BEAM
+1D174 ; [.0000.0000.0000] # MUSICAL SYMBOL END BEAM
+1D175 ; [.0000.0000.0000] # MUSICAL SYMBOL BEGIN TIE
+1D176 ; [.0000.0000.0000] # MUSICAL SYMBOL END TIE
+1D177 ; [.0000.0000.0000] # MUSICAL SYMBOL BEGIN SLUR
+1D178 ; [.0000.0000.0000] # MUSICAL SYMBOL END SLUR
+1D179 ; [.0000.0000.0000] # MUSICAL SYMBOL BEGIN PHRASE
+1D17A ; [.0000.0000.0000] # MUSICAL SYMBOL END PHRASE
+E0001 ; [.0000.0000.0000] # LANGUAGE TAG
+E0020 ; [.0000.0000.0000] # TAG SPACE
+E0021 ; [.0000.0000.0000] # TAG EXCLAMATION MARK
+E0022 ; [.0000.0000.0000] # TAG QUOTATION MARK
+E0023 ; [.0000.0000.0000] # TAG NUMBER SIGN
+E0024 ; [.0000.0000.0000] # TAG DOLLAR SIGN
+E0025 ; [.0000.0000.0000] # TAG PERCENT SIGN
+E0026 ; [.0000.0000.0000] # TAG AMPERSAND
+E0027 ; [.0000.0000.0000] # TAG APOSTROPHE
+E0028 ; [.0000.0000.0000] # TAG LEFT PARENTHESIS
+E0029 ; [.0000.0000.0000] # TAG RIGHT PARENTHESIS
+E002A ; [.0000.0000.0000] # TAG ASTERISK
+E002B ; [.0000.0000.0000] # TAG PLUS SIGN
+E002C ; [.0000.0000.0000] # TAG COMMA
+E002D ; [.0000.0000.0000] # TAG HYPHEN-MINUS
+E002E ; [.0000.0000.0000] # TAG FULL STOP
+E002F ; [.0000.0000.0000] # TAG SOLIDUS
+E0030 ; [.0000.0000.0000] # TAG DIGIT ZERO
+E0031 ; [.0000.0000.0000] # TAG DIGIT ONE
+E0032 ; [.0000.0000.0000] # TAG DIGIT TWO
+E0033 ; [.0000.0000.0000] # TAG DIGIT THREE
+E0034 ; [.0000.0000.0000] # TAG DIGIT FOUR
+E0035 ; [.0000.0000.0000] # TAG DIGIT FIVE
+E0036 ; [.0000.0000.0000] # TAG DIGIT SIX
+E0037 ; [.0000.0000.0000] # TAG DIGIT SEVEN
+E0038 ; [.0000.0000.0000] # TAG DIGIT EIGHT
+E0039 ; [.0000.0000.0000] # TAG DIGIT NINE
+E003A ; [.0000.0000.0000] # TAG COLON
+E003B ; [.0000.0000.0000] # TAG SEMICOLON
+E003C ; [.0000.0000.0000] # TAG LESS-THAN SIGN
+E003D ; [.0000.0000.0000] # TAG EQUALS SIGN
+E003E ; [.0000.0000.0000] # TAG GREATER-THAN SIGN
+E003F ; [.0000.0000.0000] # TAG QUESTION MARK
+E0040 ; [.0000.0000.0000] # TAG COMMERCIAL AT
+E0041 ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER A
+E0042 ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER B
+E0043 ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER C
+E0044 ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER D
+E0045 ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER E
+E0046 ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER F
+E0047 ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER G
+E0048 ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER H
+E0049 ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER I
+E004A ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER J
+E004B ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER K
+E004C ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER L
+E004D ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER M
+E004E ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER N
+E004F ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER O
+E0050 ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER P
+E0051 ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER Q
+E0052 ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER R
+E0053 ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER S
+E0054 ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER T
+E0055 ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER U
+E0056 ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER V
+E0057 ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER W
+E0058 ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER X
+E0059 ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER Y
+E005A ; [.0000.0000.0000] # TAG LATIN CAPITAL LETTER Z
+E005B ; [.0000.0000.0000] # TAG LEFT SQUARE BRACKET
+E005C ; [.0000.0000.0000] # TAG REVERSE SOLIDUS
+E005D ; [.0000.0000.0000] # TAG RIGHT SQUARE BRACKET
+E005E ; [.0000.0000.0000] # TAG CIRCUMFLEX ACCENT
+E005F ; [.0000.0000.0000] # TAG LOW LINE
+E0060 ; [.0000.0000.0000] # TAG GRAVE ACCENT
+E0061 ; [.0000.0000.0000] # TAG LATIN SMALL LETTER A
+E0062 ; [.0000.0000.0000] # TAG LATIN SMALL LETTER B
+E0063 ; [.0000.0000.0000] # TAG LATIN SMALL LETTER C
+E0064 ; [.0000.0000.0000] # TAG LATIN SMALL LETTER D
+E0065 ; [.0000.0000.0000] # TAG LATIN SMALL LETTER E
+E0066 ; [.0000.0000.0000] # TAG LATIN SMALL LETTER F
+E0067 ; [.0000.0000.0000] # TAG LATIN SMALL LETTER G
+E0068 ; [.0000.0000.0000] # TAG LATIN SMALL LETTER H
+E0069 ; [.0000.0000.0000] # TAG LATIN SMALL LETTER I
+E006A ; [.0000.0000.0000] # TAG LATIN SMALL LETTER J
+E006B ; [.0000.0000.0000] # TAG LATIN SMALL LETTER K
+E006C ; [.0000.0000.0000] # TAG LATIN SMALL LETTER L
+E006D ; [.0000.0000.0000] # TAG LATIN SMALL LETTER M
+E006E ; [.0000.0000.0000] # TAG LATIN SMALL LETTER N
+E006F ; [.0000.0000.0000] # TAG LATIN SMALL LETTER O
+E0070 ; [.0000.0000.0000] # TAG LATIN SMALL LETTER P
+E0071 ; [.0000.0000.0000] # TAG LATIN SMALL LETTER Q
+E0072 ; [.0000.0000.0000] # TAG LATIN SMALL LETTER R
+E0073 ; [.0000.0000.0000] # TAG LATIN SMALL LETTER S
+E0074 ; [.0000.0000.0000] # TAG LATIN SMALL LETTER T
+E0075 ; [.0000.0000.0000] # TAG LATIN SMALL LETTER U
+E0076 ; [.0000.0000.0000] # TAG LATIN SMALL LETTER V
+E0077 ; [.0000.0000.0000] # TAG LATIN SMALL LETTER W
+E0078 ; [.0000.0000.0000] # TAG LATIN SMALL LETTER X
+E0079 ; [.0000.0000.0000] # TAG LATIN SMALL LETTER Y
+E007A ; [.0000.0000.0000] # TAG LATIN SMALL LETTER Z
+E007B ; [.0000.0000.0000] # TAG LEFT CURLY BRACKET
+E007C ; [.0000.0000.0000] # TAG VERTICAL LINE
+E007D ; [.0000.0000.0000] # TAG RIGHT CURLY BRACKET
+E007E ; [.0000.0000.0000] # TAG TILDE
+E007F ; [.0000.0000.0000] # CANCEL TAG
+E0100 ; [.0000.0000.0000] # VARIATION SELECTOR-17
+E0101 ; [.0000.0000.0000] # VARIATION SELECTOR-18
+E0102 ; [.0000.0000.0000] # VARIATION SELECTOR-19
+E0103 ; [.0000.0000.0000] # VARIATION SELECTOR-20
+E0104 ; [.0000.0000.0000] # VARIATION SELECTOR-21
+E0105 ; [.0000.0000.0000] # VARIATION SELECTOR-22
+E0106 ; [.0000.0000.0000] # VARIATION SELECTOR-23
+E0107 ; [.0000.0000.0000] # VARIATION SELECTOR-24
+E0108 ; [.0000.0000.0000] # VARIATION SELECTOR-25
+E0109 ; [.0000.0000.0000] # VARIATION SELECTOR-26
+E010A ; [.0000.0000.0000] # VARIATION SELECTOR-27
+E010B ; [.0000.0000.0000] # VARIATION SELECTOR-28
+E010C ; [.0000.0000.0000] # VARIATION SELECTOR-29
+E010D ; [.0000.0000.0000] # VARIATION SELECTOR-30
+E010E ; [.0000.0000.0000] # VARIATION SELECTOR-31
+E010F ; [.0000.0000.0000] # VARIATION SELECTOR-32
+E0110 ; [.0000.0000.0000] # VARIATION SELECTOR-33
+E0111 ; [.0000.0000.0000] # VARIATION SELECTOR-34
+E0112 ; [.0000.0000.0000] # VARIATION SELECTOR-35
+E0113 ; [.0000.0000.0000] # VARIATION SELECTOR-36
+E0114 ; [.0000.0000.0000] # VARIATION SELECTOR-37
+E0115 ; [.0000.0000.0000] # VARIATION SELECTOR-38
+E0116 ; [.0000.0000.0000] # VARIATION SELECTOR-39
+E0117 ; [.0000.0000.0000] # VARIATION SELECTOR-40
+E0118 ; [.0000.0000.0000] # VARIATION SELECTOR-41
+E0119 ; [.0000.0000.0000] # VARIATION SELECTOR-42
+E011A ; [.0000.0000.0000] # VARIATION SELECTOR-43
+E011B ; [.0000.0000.0000] # VARIATION SELECTOR-44
+E011C ; [.0000.0000.0000] # VARIATION SELECTOR-45
+E011D ; [.0000.0000.0000] # VARIATION SELECTOR-46
+E011E ; [.0000.0000.0000] # VARIATION SELECTOR-47
+E011F ; [.0000.0000.0000] # VARIATION SELECTOR-48
+E0120 ; [.0000.0000.0000] # VARIATION SELECTOR-49
+E0121 ; [.0000.0000.0000] # VARIATION SELECTOR-50
+E0122 ; [.0000.0000.0000] # VARIATION SELECTOR-51
+E0123 ; [.0000.0000.0000] # VARIATION SELECTOR-52
+E0124 ; [.0000.0000.0000] # VARIATION SELECTOR-53
+E0125 ; [.0000.0000.0000] # VARIATION SELECTOR-54
+E0126 ; [.0000.0000.0000] # VARIATION SELECTOR-55
+E0127 ; [.0000.0000.0000] # VARIATION SELECTOR-56
+E0128 ; [.0000.0000.0000] # VARIATION SELECTOR-57
+E0129 ; [.0000.0000.0000] # VARIATION SELECTOR-58
+E012A ; [.0000.0000.0000] # VARIATION SELECTOR-59
+E012B ; [.0000.0000.0000] # VARIATION SELECTOR-60
+E012C ; [.0000.0000.0000] # VARIATION SELECTOR-61
+E012D ; [.0000.0000.0000] # VARIATION SELECTOR-62
+E012E ; [.0000.0000.0000] # VARIATION SELECTOR-63
+E012F ; [.0000.0000.0000] # VARIATION SELECTOR-64
+E0130 ; [.0000.0000.0000] # VARIATION SELECTOR-65
+E0131 ; [.0000.0000.0000] # VARIATION SELECTOR-66
+E0132 ; [.0000.0000.0000] # VARIATION SELECTOR-67
+E0133 ; [.0000.0000.0000] # VARIATION SELECTOR-68
+E0134 ; [.0000.0000.0000] # VARIATION SELECTOR-69
+E0135 ; [.0000.0000.0000] # VARIATION SELECTOR-70
+E0136 ; [.0000.0000.0000] # VARIATION SELECTOR-71
+E0137 ; [.0000.0000.0000] # VARIATION SELECTOR-72
+E0138 ; [.0000.0000.0000] # VARIATION SELECTOR-73
+E0139 ; [.0000.0000.0000] # VARIATION SELECTOR-74
+E013A ; [.0000.0000.0000] # VARIATION SELECTOR-75
+E013B ; [.0000.0000.0000] # VARIATION SELECTOR-76
+E013C ; [.0000.0000.0000] # VARIATION SELECTOR-77
+E013D ; [.0000.0000.0000] # VARIATION SELECTOR-78
+E013E ; [.0000.0000.0000] # VARIATION SELECTOR-79
+E013F ; [.0000.0000.0000] # VARIATION SELECTOR-80
+E0140 ; [.0000.0000.0000] # VARIATION SELECTOR-81
+E0141 ; [.0000.0000.0000] # VARIATION SELECTOR-82
+E0142 ; [.0000.0000.0000] # VARIATION SELECTOR-83
+E0143 ; [.0000.0000.0000] # VARIATION SELECTOR-84
+E0144 ; [.0000.0000.0000] # VARIATION SELECTOR-85
+E0145 ; [.0000.0000.0000] # VARIATION SELECTOR-86
+E0146 ; [.0000.0000.0000] # VARIATION SELECTOR-87
+E0147 ; [.0000.0000.0000] # VARIATION SELECTOR-88
+E0148 ; [.0000.0000.0000] # VARIATION SELECTOR-89
+E0149 ; [.0000.0000.0000] # VARIATION SELECTOR-90
+E014A ; [.0000.0000.0000] # VARIATION SELECTOR-91
+E014B ; [.0000.0000.0000] # VARIATION SELECTOR-92
+E014C ; [.0000.0000.0000] # VARIATION SELECTOR-93
+E014D ; [.0000.0000.0000] # VARIATION SELECTOR-94
+E014E ; [.0000.0000.0000] # VARIATION SELECTOR-95
+E014F ; [.0000.0000.0000] # VARIATION SELECTOR-96
+E0150 ; [.0000.0000.0000] # VARIATION SELECTOR-97
+E0151 ; [.0000.0000.0000] # VARIATION SELECTOR-98
+E0152 ; [.0000.0000.0000] # VARIATION SELECTOR-99
+E0153 ; [.0000.0000.0000] # VARIATION SELECTOR-100
+E0154 ; [.0000.0000.0000] # VARIATION SELECTOR-101
+E0155 ; [.0000.0000.0000] # VARIATION SELECTOR-102
+E0156 ; [.0000.0000.0000] # VARIATION SELECTOR-103
+E0157 ; [.0000.0000.0000] # VARIATION SELECTOR-104
+E0158 ; [.0000.0000.0000] # VARIATION SELECTOR-105
+E0159 ; [.0000.0000.0000] # VARIATION SELECTOR-106
+E015A ; [.0000.0000.0000] # VARIATION SELECTOR-107
+E015B ; [.0000.0000.0000] # VARIATION SELECTOR-108
+E015C ; [.0000.0000.0000] # VARIATION SELECTOR-109
+E015D ; [.0000.0000.0000] # VARIATION SELECTOR-110
+E015E ; [.0000.0000.0000] # VARIATION SELECTOR-111
+E015F ; [.0000.0000.0000] # VARIATION SELECTOR-112
+E0160 ; [.0000.0000.0000] # VARIATION SELECTOR-113
+E0161 ; [.0000.0000.0000] # VARIATION SELECTOR-114
+E0162 ; [.0000.0000.0000] # VARIATION SELECTOR-115
+E0163 ; [.0000.0000.0000] # VARIATION SELECTOR-116
+E0164 ; [.0000.0000.0000] # VARIATION SELECTOR-117
+E0165 ; [.0000.0000.0000] # VARIATION SELECTOR-118
+E0166 ; [.0000.0000.0000] # VARIATION SELECTOR-119
+E0167 ; [.0000.0000.0000] # VARIATION SELECTOR-120
+E0168 ; [.0000.0000.0000] # VARIATION SELECTOR-121
+E0169 ; [.0000.0000.0000] # VARIATION SELECTOR-122
+E016A ; [.0000.0000.0000] # VARIATION SELECTOR-123
+E016B ; [.0000.0000.0000] # VARIATION SELECTOR-124
+E016C ; [.0000.0000.0000] # VARIATION SELECTOR-125
+E016D ; [.0000.0000.0000] # VARIATION SELECTOR-126
+E016E ; [.0000.0000.0000] # VARIATION SELECTOR-127
+E016F ; [.0000.0000.0000] # VARIATION SELECTOR-128
+E0170 ; [.0000.0000.0000] # VARIATION SELECTOR-129
+E0171 ; [.0000.0000.0000] # VARIATION SELECTOR-130
+E0172 ; [.0000.0000.0000] # VARIATION SELECTOR-131
+E0173 ; [.0000.0000.0000] # VARIATION SELECTOR-132
+E0174 ; [.0000.0000.0000] # VARIATION SELECTOR-133
+E0175 ; [.0000.0000.0000] # VARIATION SELECTOR-134
+E0176 ; [.0000.0000.0000] # VARIATION SELECTOR-135
+E0177 ; [.0000.0000.0000] # VARIATION SELECTOR-136
+E0178 ; [.0000.0000.0000] # VARIATION SELECTOR-137
+E0179 ; [.0000.0000.0000] # VARIATION SELECTOR-138
+E017A ; [.0000.0000.0000] # VARIATION SELECTOR-139
+E017B ; [.0000.0000.0000] # VARIATION SELECTOR-140
+E017C ; [.0000.0000.0000] # VARIATION SELECTOR-141
+E017D ; [.0000.0000.0000] # VARIATION SELECTOR-142
+E017E ; [.0000.0000.0000] # VARIATION SELECTOR-143
+E017F ; [.0000.0000.0000] # VARIATION SELECTOR-144
+E0180 ; [.0000.0000.0000] # VARIATION SELECTOR-145
+E0181 ; [.0000.0000.0000] # VARIATION SELECTOR-146
+E0182 ; [.0000.0000.0000] # VARIATION SELECTOR-147
+E0183 ; [.0000.0000.0000] # VARIATION SELECTOR-148
+E0184 ; [.0000.0000.0000] # VARIATION SELECTOR-149
+E0185 ; [.0000.0000.0000] # VARIATION SELECTOR-150
+E0186 ; [.0000.0000.0000] # VARIATION SELECTOR-151
+E0187 ; [.0000.0000.0000] # VARIATION SELECTOR-152
+E0188 ; [.0000.0000.0000] # VARIATION SELECTOR-153
+E0189 ; [.0000.0000.0000] # VARIATION SELECTOR-154
+E018A ; [.0000.0000.0000] # VARIATION SELECTOR-155
+E018B ; [.0000.0000.0000] # VARIATION SELECTOR-156
+E018C ; [.0000.0000.0000] # VARIATION SELECTOR-157
+E018D ; [.0000.0000.0000] # VARIATION SELECTOR-158
+E018E ; [.0000.0000.0000] # VARIATION SELECTOR-159
+E018F ; [.0000.0000.0000] # VARIATION SELECTOR-160
+E0190 ; [.0000.0000.0000] # VARIATION SELECTOR-161
+E0191 ; [.0000.0000.0000] # VARIATION SELECTOR-162
+E0192 ; [.0000.0000.0000] # VARIATION SELECTOR-163
+E0193 ; [.0000.0000.0000] # VARIATION SELECTOR-164
+E0194 ; [.0000.0000.0000] # VARIATION SELECTOR-165
+E0195 ; [.0000.0000.0000] # VARIATION SELECTOR-166
+E0196 ; [.0000.0000.0000] # VARIATION SELECTOR-167
+E0197 ; [.0000.0000.0000] # VARIATION SELECTOR-168
+E0198 ; [.0000.0000.0000] # VARIATION SELECTOR-169
+E0199 ; [.0000.0000.0000] # VARIATION SELECTOR-170
+E019A ; [.0000.0000.0000] # VARIATION SELECTOR-171
+E019B ; [.0000.0000.0000] # VARIATION SELECTOR-172
+E019C ; [.0000.0000.0000] # VARIATION SELECTOR-173
+E019D ; [.0000.0000.0000] # VARIATION SELECTOR-174
+E019E ; [.0000.0000.0000] # VARIATION SELECTOR-175
+E019F ; [.0000.0000.0000] # VARIATION SELECTOR-176
+E01A0 ; [.0000.0000.0000] # VARIATION SELECTOR-177
+E01A1 ; [.0000.0000.0000] # VARIATION SELECTOR-178
+E01A2 ; [.0000.0000.0000] # VARIATION SELECTOR-179
+E01A3 ; [.0000.0000.0000] # VARIATION SELECTOR-180
+E01A4 ; [.0000.0000.0000] # VARIATION SELECTOR-181
+E01A5 ; [.0000.0000.0000] # VARIATION SELECTOR-182
+E01A6 ; [.0000.0000.0000] # VARIATION SELECTOR-183
+E01A7 ; [.0000.0000.0000] # VARIATION SELECTOR-184
+E01A8 ; [.0000.0000.0000] # VARIATION SELECTOR-185
+E01A9 ; [.0000.0000.0000] # VARIATION SELECTOR-186
+E01AA ; [.0000.0000.0000] # VARIATION SELECTOR-187
+E01AB ; [.0000.0000.0000] # VARIATION SELECTOR-188
+E01AC ; [.0000.0000.0000] # VARIATION SELECTOR-189
+E01AD ; [.0000.0000.0000] # VARIATION SELECTOR-190
+E01AE ; [.0000.0000.0000] # VARIATION SELECTOR-191
+E01AF ; [.0000.0000.0000] # VARIATION SELECTOR-192
+E01B0 ; [.0000.0000.0000] # VARIATION SELECTOR-193
+E01B1 ; [.0000.0000.0000] # VARIATION SELECTOR-194
+E01B2 ; [.0000.0000.0000] # VARIATION SELECTOR-195
+E01B3 ; [.0000.0000.0000] # VARIATION SELECTOR-196
+E01B4 ; [.0000.0000.0000] # VARIATION SELECTOR-197
+E01B5 ; [.0000.0000.0000] # VARIATION SELECTOR-198
+E01B6 ; [.0000.0000.0000] # VARIATION SELECTOR-199
+E01B7 ; [.0000.0000.0000] # VARIATION SELECTOR-200
+E01B8 ; [.0000.0000.0000] # VARIATION SELECTOR-201
+E01B9 ; [.0000.0000.0000] # VARIATION SELECTOR-202
+E01BA ; [.0000.0000.0000] # VARIATION SELECTOR-203
+E01BB ; [.0000.0000.0000] # VARIATION SELECTOR-204
+E01BC ; [.0000.0000.0000] # VARIATION SELECTOR-205
+E01BD ; [.0000.0000.0000] # VARIATION SELECTOR-206
+E01BE ; [.0000.0000.0000] # VARIATION SELECTOR-207
+E01BF ; [.0000.0000.0000] # VARIATION SELECTOR-208
+E01C0 ; [.0000.0000.0000] # VARIATION SELECTOR-209
+E01C1 ; [.0000.0000.0000] # VARIATION SELECTOR-210
+E01C2 ; [.0000.0000.0000] # VARIATION SELECTOR-211
+E01C3 ; [.0000.0000.0000] # VARIATION SELECTOR-212
+E01C4 ; [.0000.0000.0000] # VARIATION SELECTOR-213
+E01C5 ; [.0000.0000.0000] # VARIATION SELECTOR-214
+E01C6 ; [.0000.0000.0000] # VARIATION SELECTOR-215
+E01C7 ; [.0000.0000.0000] # VARIATION SELECTOR-216
+E01C8 ; [.0000.0000.0000] # VARIATION SELECTOR-217
+E01C9 ; [.0000.0000.0000] # VARIATION SELECTOR-218
+E01CA ; [.0000.0000.0000] # VARIATION SELECTOR-219
+E01CB ; [.0000.0000.0000] # VARIATION SELECTOR-220
+E01CC ; [.0000.0000.0000] # VARIATION SELECTOR-221
+E01CD ; [.0000.0000.0000] # VARIATION SELECTOR-222
+E01CE ; [.0000.0000.0000] # VARIATION SELECTOR-223
+E01CF ; [.0000.0000.0000] # VARIATION SELECTOR-224
+E01D0 ; [.0000.0000.0000] # VARIATION SELECTOR-225
+E01D1 ; [.0000.0000.0000] # VARIATION SELECTOR-226
+E01D2 ; [.0000.0000.0000] # VARIATION SELECTOR-227
+E01D3 ; [.0000.0000.0000] # VARIATION SELECTOR-228
+E01D4 ; [.0000.0000.0000] # VARIATION SELECTOR-229
+E01D5 ; [.0000.0000.0000] # VARIATION SELECTOR-230
+E01D6 ; [.0000.0000.0000] # VARIATION SELECTOR-231
+E01D7 ; [.0000.0000.0000] # VARIATION SELECTOR-232
+E01D8 ; [.0000.0000.0000] # VARIATION SELECTOR-233
+E01D9 ; [.0000.0000.0000] # VARIATION SELECTOR-234
+E01DA ; [.0000.0000.0000] # VARIATION SELECTOR-235
+E01DB ; [.0000.0000.0000] # VARIATION SELECTOR-236
+E01DC ; [.0000.0000.0000] # VARIATION SELECTOR-237
+E01DD ; [.0000.0000.0000] # VARIATION SELECTOR-238
+E01DE ; [.0000.0000.0000] # VARIATION SELECTOR-239
+E01DF ; [.0000.0000.0000] # VARIATION SELECTOR-240
+E01E0 ; [.0000.0000.0000] # VARIATION SELECTOR-241
+E01E1 ; [.0000.0000.0000] # VARIATION SELECTOR-242
+E01E2 ; [.0000.0000.0000] # VARIATION SELECTOR-243
+E01E3 ; [.0000.0000.0000] # VARIATION SELECTOR-244
+E01E4 ; [.0000.0000.0000] # VARIATION SELECTOR-245
+E01E5 ; [.0000.0000.0000] # VARIATION SELECTOR-246
+E01E6 ; [.0000.0000.0000] # VARIATION SELECTOR-247
+E01E7 ; [.0000.0000.0000] # VARIATION SELECTOR-248
+E01E8 ; [.0000.0000.0000] # VARIATION SELECTOR-249
+E01E9 ; [.0000.0000.0000] # VARIATION SELECTOR-250
+E01EA ; [.0000.0000.0000] # VARIATION SELECTOR-251
+E01EB ; [.0000.0000.0000] # VARIATION SELECTOR-252
+E01EC ; [.0000.0000.0000] # VARIATION SELECTOR-253
+E01ED ; [.0000.0000.0000] # VARIATION SELECTOR-254
+E01EE ; [.0000.0000.0000] # VARIATION SELECTOR-255
+E01EF ; [.0000.0000.0000] # VARIATION SELECTOR-256
+0009 ; [*0201.0020.0002] # HORIZONTAL TABULATION (in ISO 6429)
+000A ; [*0202.0020.0002] # LINE FEED (in ISO 6429)
+000B ; [*0203.0020.0002] # VERTICAL TABULATION (in ISO 6429)
+000C ; [*0204.0020.0002] # FORM FEED (in ISO 6429)
+000D ; [*0205.0020.0002] # CARRIAGE RETURN (in ISO 6429)
+0020 ; [*0209.0020.0002] # SPACE
+0021 ; [*0268.0020.0002] # EXCLAMATION MARK
+0022 ; [*0329.0020.0002] # QUOTATION MARK
+0023 ; [*03C0.0020.0002] # NUMBER SIGN
+0025 ; [*03C1.0020.0002] # PERCENT SIGN
+0026 ; [*03BD.0020.0002] # AMPERSAND
+0027 ; [*0322.0020.0002] # APOSTROPHE
+0028 ; [*0334.0020.0002] # LEFT PARENTHESIS
+0029 ; [*0335.0020.0002] # RIGHT PARENTHESIS
+002A ; [*03B5.0020.0002] # ASTERISK
+002B ; [*069D.0020.0002] # PLUS SIGN
+002C ; [*0224.0020.0002] # COMMA
+002D ; [*020D.0020.0002] # HYPHEN-MINUS
+002E ; [*0281.0020.0002] # FULL STOP
+002F ; [*03BA.0020.0002] # SOLIDUS
+003A ; [*0241.0020.0002] # COLON
+003B ; [*023B.0020.0002] # SEMICOLON
+003C ; [*06A1.0020.0002] # LESS-THAN SIGN
+003D ; [*06A2.0020.0002] # EQUALS SIGN
+003E ; [*06A3.0020.0002] # GREATER-THAN SIGN
+003F ; [*026F.0020.0002] # QUESTION MARK
+0040 ; [*03B4.0020.0002] # COMMERCIAL AT
+005B ; [*0336.0020.0002] # LEFT SQUARE BRACKET
+005C ; [*03BB.0020.0002] # REVERSE SOLIDUS
+005D ; [*0337.0020.0002] # RIGHT SQUARE BRACKET
+005E ; [*04CC.0020.0002] # CIRCUMFLEX ACCENT
+005F ; [*020B.0020.0002] # LOW LINE
+0060 ; [*04C9.0020.0002] # GRAVE ACCENT
+007B ; [*0338.0020.0002] # LEFT CURLY BRACKET
+007C ; [*06A5.0020.0002] # VERTICAL LINE
+007D ; [*0339.0020.0002] # RIGHT CURLY BRACKET
+007E ; [*06A7.0020.0002] # TILDE
+0085 ; [*0206.0020.0002] # NEXT LINE (in ISO 6429)
+00A0 ; [*0209.0020.001B] # NO-BREAK SPACE
+00A1 ; [*0269.0020.0002] # INVERTED EXCLAMATION MARK
+00A6 ; [*06A6.0020.0002] # BROKEN BAR
+00A7 ; [*03AE.0020.0002] # SECTION SIGN
+00A8 ; [*04D0.0020.0002] # DIAERESIS
+00A9 ; [*0609.0020.0002] # COPYRIGHT SIGN
+00AB ; [*0332.0020.0002] # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+00AC ; [*06A4.0020.0002] # NOT SIGN
+00AE ; [*060B.0020.0002] # REGISTERED SIGN
+00AF ; [*04CD.0020.0002] # MACRON
+00B0 ; [*054C.0020.0002] # DEGREE SIGN
+00B1 ; [*069E.0020.0002] # PLUS-MINUS SIGN
+00B4 ; [*04CA.0020.0002] # ACUTE ACCENT
+00B6 ; [*03B0.0020.0002] # PILCROW SIGN
+00B7 ; [*0296.0020.0002] # MIDDLE DOT
+00B8 ; [*04D3.0020.0002] # CEDILLA
+00BB ; [*0333.0020.0002] # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+00BF ; [*0270.0020.0002] # INVERTED QUESTION MARK
+00D7 ; [*06A0.0020.0002] # MULTIPLICATION SIGN
+00F7 ; [*069F.0020.0002] # DIVISION SIGN
+02B9 ; [*04DA.0020.0002] # MODIFIER LETTER PRIME
+02BA ; [*04DC.0020.0002] # MODIFIER LETTER DOUBLE PRIME
+02C2 ; [*04DD.0020.0002] # MODIFIER LETTER LEFT ARROWHEAD
+02C3 ; [*04DE.0020.0002] # MODIFIER LETTER RIGHT ARROWHEAD
+02C4 ; [*04DF.0020.0002] # MODIFIER LETTER UP ARROWHEAD
+02C5 ; [*04E0.0020.0002] # MODIFIER LETTER DOWN ARROWHEAD
+02C6 ; [*04E1.0020.0002] # MODIFIER LETTER CIRCUMFLEX ACCENT
+02C7 ; [*04E2.0020.0002] # CARON
+02C8 ; [*04E3.0020.0002] # MODIFIER LETTER VERTICAL LINE
+02C9 ; [*04E4.0020.0002] # MODIFIER LETTER MACRON
+02CA ; [*04E5.0020.0002] # MODIFIER LETTER ACUTE ACCENT
+02CB ; [*04E6.0020.0002] # MODIFIER LETTER GRAVE ACCENT
+02CC ; [*04E7.0020.0002] # MODIFIER LETTER LOW VERTICAL LINE
+02CD ; [*04E8.0020.0002] # MODIFIER LETTER LOW MACRON
+02CE ; [*04E9.0020.0002] # MODIFIER LETTER LOW GRAVE ACCENT
+02CF ; [*04EA.0020.0002] # MODIFIER LETTER LOW ACUTE ACCENT
+02D2 ; [*04EB.0020.0002] # MODIFIER LETTER CENTRED RIGHT HALF RING
+02D3 ; [*04EC.0020.0002] # MODIFIER LETTER CENTRED LEFT HALF RING
+02D4 ; [*04ED.0020.0002] # MODIFIER LETTER UP TACK
+02D5 ; [*04EE.0020.0002] # MODIFIER LETTER DOWN TACK
+02D6 ; [*04F1.0020.0002] # MODIFIER LETTER PLUS SIGN
+02D7 ; [*04F2.0020.0002] # MODIFIER LETTER MINUS SIGN
+02D8 ; [*04CE.0020.0002] # BREVE
+02D9 ; [*04CF.0020.0002] # DOT ABOVE
+02DA ; [*04D1.0020.0002] # RING ABOVE
+02DB ; [*04D4.0020.0002] # OGONEK
+02DC ; [*04CB.0020.0002] # SMALL TILDE
+02DD ; [*04D2.0020.0002] # DOUBLE ACUTE ACCENT
+02DE ; [*04F3.0020.0002] # MODIFIER LETTER RHOTIC HOOK
+02DF ; [*04F4.0020.0002] # MODIFIER LETTER CROSS ACCENT
+02E5 ; [*04F5.0020.0002] # MODIFIER LETTER EXTRA-HIGH TONE BAR
+02E6 ; [*04F6.0020.0002] # MODIFIER LETTER HIGH TONE BAR
+02E7 ; [*04F7.0020.0002] # MODIFIER LETTER MID TONE BAR
+02E8 ; [*04F8.0020.0002] # MODIFIER LETTER LOW TONE BAR
+02E9 ; [*04F9.0020.0002] # MODIFIER LETTER EXTRA-LOW TONE BAR
+02EA ; [*04FA.0020.0002] # MODIFIER LETTER YIN DEPARTING TONE MARK
+02EB ; [*04FB.0020.0002] # MODIFIER LETTER YANG DEPARTING TONE MARK
+02EC ; [*04FC.0020.0002] # MODIFIER LETTER VOICING
+02ED ; [*04FD.0020.0002] # MODIFIER LETTER UNASPIRATED
+02EF ; [*04FE.0020.0002] # MODIFIER LETTER LOW DOWN ARROWHEAD
+02F0 ; [*04FF.0020.0002] # MODIFIER LETTER LOW UP ARROWHEAD
+02F1 ; [*0500.0020.0002] # MODIFIER LETTER LOW LEFT ARROWHEAD
+02F2 ; [*0501.0020.0002] # MODIFIER LETTER LOW RIGHT ARROWHEAD
+02F3 ; [*0502.0020.0002] # MODIFIER LETTER LOW RING
+02F4 ; [*0503.0020.0002] # MODIFIER LETTER MIDDLE GRAVE ACCENT
+02F5 ; [*0504.0020.0002] # MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT
+02F6 ; [*0505.0020.0002] # MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT
+02F7 ; [*0506.0020.0002] # MODIFIER LETTER LOW TILDE
+02F8 ; [*0507.0020.0002] # MODIFIER LETTER RAISED COLON
+02F9 ; [*0508.0020.0002] # MODIFIER LETTER BEGIN HIGH TONE
+02FA ; [*0509.0020.0002] # MODIFIER LETTER END HIGH TONE
+02FB ; [*050A.0020.0002] # MODIFIER LETTER BEGIN LOW TONE
+02FC ; [*050B.0020.0002] # MODIFIER LETTER END LOW TONE
+02FD ; [*050C.0020.0002] # MODIFIER LETTER SHELF
+02FE ; [*050D.0020.0002] # MODIFIER LETTER OPEN SHELF
+02FF ; [*050E.0020.0002] # MODIFIER LETTER LOW LEFT ARROW
+034F ; [.0000.0000.0000] # COMBINING GRAPHEME JOINER
+0374 ; [*04DA.0020.0002] # GREEK NUMERAL SIGN
+0375 ; [*04DB.0020.0002] # GREEK LOWER NUMERAL SIGN
+037E ; [*023B.0020.0002] # GREEK QUESTION MARK
+0384 ; [*04CA.0020.0002] # GREEK TONOS
+0385 ; [*04D0.0020.0002][.0000.0024.0002] # GREEK DIALYTIKA TONOS
+0387 ; [*0296.0020.0002] # GREEK ANO TELEIA
+03F6 ; [*0698.0020.0002] # GREEK REVERSED LUNATE EPSILON SYMBOL
+0482 ; [*054D.0020.0002] # CYRILLIC THOUSANDS SIGN
+0488 ; [.0000.0000.0000] # COMBINING CYRILLIC HUNDRED THOUSANDS SIGN
+0489 ; [.0000.0000.0000] # COMBINING CYRILLIC MILLIONS SIGN
+055A ; [*03F8.0020.0002] # ARMENIAN APOSTROPHE
+055B ; [*03F9.0020.0002] # ARMENIAN EMPHASIS MARK
+055C ; [*026B.0020.0002] # ARMENIAN EXCLAMATION MARK
+055D ; [*022B.0020.0002] # ARMENIAN COMMA
+055E ; [*0273.0020.0002] # ARMENIAN QUESTION MARK
+055F ; [*03FA.0020.0002] # ARMENIAN ABBREVIATION MARK
+0589 ; [*0242.0020.0002] # ARMENIAN FULL STOP
+058A ; [*020E.0020.0002] # ARMENIAN HYPHEN
+058D ; [*054E.0020.0002] # RIGHT-FACING ARMENIAN ETERNITY SIGN
+058E ; [*054F.0020.0002] # LEFT-FACING ARMENIAN ETERNITY SIGN
+0591 ; [.0000.0000.0000] # HEBREW ACCENT ETNAHTA
+0592 ; [.0000.0000.0000] # HEBREW ACCENT SEGOL
+0593 ; [.0000.0000.0000] # HEBREW ACCENT SHALSHELET
+0594 ; [.0000.0000.0000] # HEBREW ACCENT ZAQEF QATAN
+0595 ; [.0000.0000.0000] # HEBREW ACCENT ZAQEF GADOL
+0596 ; [.0000.0000.0000] # HEBREW ACCENT TIPEHA
+0597 ; [.0000.0000.0000] # HEBREW ACCENT REVIA
+0598 ; [.0000.0000.0000] # HEBREW ACCENT ZARQA
+0599 ; [.0000.0000.0000] # HEBREW ACCENT PASHTA
+059A ; [.0000.0000.0000] # HEBREW ACCENT YETIV
+059B ; [.0000.0000.0000] # HEBREW ACCENT TEVIR
+059C ; [.0000.0000.0000] # HEBREW ACCENT GERESH
+059D ; [.0000.0000.0000] # HEBREW ACCENT GERESH MUQDAM
+059E ; [.0000.0000.0000] # HEBREW ACCENT GERSHAYIM
+059F ; [.0000.0000.0000] # HEBREW ACCENT QARNEY PARA
+05A0 ; [.0000.0000.0000] # HEBREW ACCENT TELISHA GEDOLA
+05A1 ; [.0000.0000.0000] # HEBREW ACCENT PAZER
+05A2 ; [.0000.0000.0000] # HEBREW ACCENT ATNAH HAFUKH
+05A3 ; [.0000.0000.0000] # HEBREW ACCENT MUNAH
+05A4 ; [.0000.0000.0000] # HEBREW ACCENT MAHAPAKH
+05A5 ; [.0000.0000.0000] # HEBREW ACCENT MERKHA
+05A6 ; [.0000.0000.0000] # HEBREW ACCENT MERKHA KEFULA
+05A7 ; [.0000.0000.0000] # HEBREW ACCENT DARGA
+05A8 ; [.0000.0000.0000] # HEBREW ACCENT QADMA
+05A9 ; [.0000.0000.0000] # HEBREW ACCENT TELISHA QETANA
+05AA ; [.0000.0000.0000] # HEBREW ACCENT YERAH BEN YOMO
+05AB ; [.0000.0000.0000] # HEBREW ACCENT OLE
+05AC ; [.0000.0000.0000] # HEBREW ACCENT ILUY
+05AD ; [.0000.0000.0000] # HEBREW ACCENT DEHI
+05AE ; [.0000.0000.0000] # HEBREW ACCENT ZINOR
+05AF ; [.0000.0000.0000] # HEBREW MARK MASORA CIRCLE
+05BD ; [.0000.0000.0000] # HEBREW POINT METEG
+05BE ; [*03FB.0020.0002] # HEBREW PUNCTUATION MAQAF
+05C0 ; [*03FC.0020.0002] # HEBREW PUNCTUATION PASEQ
+05C3 ; [*03FD.0020.0002] # HEBREW PUNCTUATION SOF PASUQ
+05C4 ; [.0000.0000.0000] # HEBREW MARK UPPER DOT
+05C5 ; [.0000.0000.0000] # HEBREW MARK LOWER DOT
+05C6 ; [*03FE.0020.0002] # HEBREW PUNCTUATION NUN HAFUKHA
+05F3 ; [*03FF.0020.0002] # HEBREW PUNCTUATION GERESH
+05F4 ; [*0400.0020.0002] # HEBREW PUNCTUATION GERSHAYIM
+0600 ; [.0000.0000.0000] # ARABIC NUMBER SIGN
+0601 ; [.0000.0000.0000] # ARABIC SIGN SANAH
+0602 ; [.0000.0000.0000] # ARABIC FOOTNOTE MARKER
+0603 ; [.0000.0000.0000] # ARABIC SIGN SAFHA
+0604 ; [.0000.0000.0000] # ARABIC SIGN SAMVAT
+0605 ; [.0000.0000.0000] # ARABIC NUMBER MARK ABOVE
+0606 ; [*06B4.0020.0002] # ARABIC-INDIC CUBE ROOT
+0607 ; [*06B6.0020.0002] # ARABIC-INDIC FOURTH ROOT
+0608 ; [*0550.0020.0002] # ARABIC RAY
+0609 ; [*03C4.0020.0002] # ARABIC-INDIC PER MILLE SIGN
+060A ; [*03C6.0020.0002] # ARABIC-INDIC PER TEN THOUSAND SIGN
+060C ; [*022C.0020.0002] # ARABIC COMMA
+060D ; [*022D.0020.0002] # ARABIC DATE SEPARATOR
+060E ; [*0553.0020.0002] # ARABIC POETIC VERSE SIGN
+060F ; [*0554.0020.0002] # ARABIC SIGN MISRA
+0610 ; [.0000.0000.0000] # ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM
+0611 ; [.0000.0000.0000] # ARABIC SIGN ALAYHE ASSALLAM
+0612 ; [.0000.0000.0000] # ARABIC SIGN RAHMATULLAH ALAYHE
+0613 ; [.0000.0000.0000] # ARABIC SIGN RADI ALLAHOU ANHU
+0614 ; [.0000.0000.0000] # ARABIC SIGN TAKHALLUS
+0615 ; [.0000.0000.0000] # ARABIC SMALL HIGH TAH
+0616 ; [.0000.0000.0000] # ARABIC SMALL HIGH LIGATURE ALEF WITH LAM WITH YEH
+0617 ; [.0000.0000.0000] # ARABIC SMALL HIGH ZAIN
+0618 ; [.0000.0000.0000] # ARABIC SMALL FATHA
+0619 ; [.0000.0000.0000] # ARABIC SMALL DAMMA
+061A ; [.0000.0000.0000] # ARABIC SMALL KASRA
+061B ; [*023C.0020.0002] # ARABIC SEMICOLON
+061D ; [*02D0.0020.0002] # ARABIC END OF TEXT MARK
+061E ; [*0243.0020.0002] # ARABIC TRIPLE DOT PUNCTUATION MARK
+061F ; [*0274.0020.0002] # ARABIC QUESTION MARK
+0640 ; [.0000.0000.0000] # ARABIC TATWEEL
+066A ; [*03C2.0020.0002] # ARABIC PERCENT SIGN
+066B ; [*022E.0020.0002] # ARABIC DECIMAL SEPARATOR
+066C ; [*022F.0020.0002] # ARABIC THOUSANDS SEPARATOR
+066D ; [*03B8.0020.0002] # ARABIC FIVE POINTED STAR
+06D4 ; [*0283.0020.0002] # ARABIC FULL STOP
+06D6 ; [.0000.0000.0000] # ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA
+06D7 ; [.0000.0000.0000] # ARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURA
+06D8 ; [.0000.0000.0000] # ARABIC SMALL HIGH MEEM INITIAL FORM
+06D9 ; [.0000.0000.0000] # ARABIC SMALL HIGH LAM ALEF
+06DA ; [.0000.0000.0000] # ARABIC SMALL HIGH JEEM
+06DB ; [.0000.0000.0000] # ARABIC SMALL HIGH THREE DOTS
+06DC ; [.0000.0000.0000] # ARABIC SMALL HIGH SEEN
+06DD ; [.0000.0000.0000] # ARABIC END OF AYAH
+06DE ; [*0555.0020.0002] # ARABIC START OF RUB EL HIZB
+06DF ; [.0000.0000.0000] # ARABIC SMALL HIGH ROUNDED ZERO
+06E0 ; [.0000.0000.0000] # ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO
+06E1 ; [.0000.0000.0000] # ARABIC SMALL HIGH DOTLESS HEAD OF KHAH
+06E2 ; [.0000.0000.0000] # ARABIC SMALL HIGH MEEM ISOLATED FORM
+06E3 ; [.0000.0000.0000] # ARABIC SMALL LOW SEEN
+06E4 ; [.0000.0000.0000] # ARABIC SMALL HIGH MADDA
+06E7 ; [.0000.0000.0000] # ARABIC SMALL HIGH YEH
+06E8 ; [.0000.0000.0000] # ARABIC SMALL HIGH NOON
+06E9 ; [*0556.0020.0002] # ARABIC PLACE OF SAJDAH
+06EA ; [.0000.0000.0000] # ARABIC EMPTY CENTRE LOW STOP
+06EB ; [.0000.0000.0000] # ARABIC EMPTY CENTRE HIGH STOP
+06EC ; [.0000.0000.0000] # ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE
+06ED ; [.0000.0000.0000] # ARABIC SMALL LOW MEEM
+0700 ; [*02D1.0020.0002] # SYRIAC END OF PARAGRAPH
+0701 ; [*0284.0020.0002] # SYRIAC SUPRALINEAR FULL STOP
+0702 ; [*0285.0020.0002] # SYRIAC SUBLINEAR FULL STOP
+0703 ; [*0244.0020.0002] # SYRIAC SUPRALINEAR COLON
+0704 ; [*0245.0020.0002] # SYRIAC SUBLINEAR COLON
+0705 ; [*0246.0020.0002] # SYRIAC HORIZONTAL COLON
+0706 ; [*0247.0020.0002] # SYRIAC COLON SKEWED LEFT
+0707 ; [*0248.0020.0002] # SYRIAC COLON SKEWED RIGHT
+0708 ; [*0249.0020.0002] # SYRIAC SUPRALINEAR COLON SKEWED LEFT
+0709 ; [*0275.0020.0002] # SYRIAC SUBLINEAR COLON SKEWED RIGHT
+070A ; [*0401.0020.0002] # SYRIAC CONTRACTION
+070B ; [*0402.0020.0002] # SYRIAC HARKLEAN OBELUS
+070C ; [*0403.0020.0002] # SYRIAC HARKLEAN METOBELUS
+070D ; [*0404.0020.0002] # SYRIAC HARKLEAN ASTERISCUS
+070F ; [.0000.0000.0000] # SYRIAC ABBREVIATION MARK
+0740 ; [.0000.0000.0000] # SYRIAC FEMININE DOT
+0743 ; [.0000.0000.0000] # SYRIAC TWO VERTICAL DOTS ABOVE
+0744 ; [.0000.0000.0000] # SYRIAC TWO VERTICAL DOTS BELOW
+0747 ; [.0000.0000.0000] # SYRIAC OBLIQUE LINE ABOVE
+0748 ; [.0000.0000.0000] # SYRIAC OBLIQUE LINE BELOW
+0749 ; [.0000.0000.0000] # SYRIAC MUSIC
+074A ; [.0000.0000.0000] # SYRIAC BARREKH
+07F6 ; [*057D.0020.0002] # NKO SYMBOL OO DENNEN
+07F7 ; [*02D2.0020.0002] # NKO SYMBOL GBAKURUNEN
+07F8 ; [*0230.0020.0002] # NKO COMMA
+07F9 ; [*026C.0020.0002] # NKO EXCLAMATION MARK
+07FA ; [.0000.0000.0000] # NKO LAJANYALAN
+0830 ; [*024A.0020.0002] # SAMARITAN PUNCTUATION NEQUDAA
+0831 ; [*024B.0020.0002] # SAMARITAN PUNCTUATION AFSAAQ
+0832 ; [*024C.0020.0002] # SAMARITAN PUNCTUATION ANGED
+0833 ; [*024D.0020.0002] # SAMARITAN PUNCTUATION BAU
+0834 ; [*024E.0020.0002] # SAMARITAN PUNCTUATION ATMAAU
+0835 ; [*024F.0020.0002] # SAMARITAN PUNCTUATION SHIYYAALAA
+0836 ; [*0250.0020.0002] # SAMARITAN ABBREVIATION MARK
+0837 ; [*0251.0020.0002] # SAMARITAN PUNCTUATION MELODIC QITSA
+0838 ; [*0252.0020.0002] # SAMARITAN PUNCTUATION ZIQAA
+0839 ; [*0253.0020.0002] # SAMARITAN PUNCTUATION QITSA
+083A ; [*0254.0020.0002] # SAMARITAN PUNCTUATION ZAEF
+083B ; [*0255.0020.0002] # SAMARITAN PUNCTUATION TURU
+083C ; [*0256.0020.0002] # SAMARITAN PUNCTUATION ARKAANU
+083D ; [*0257.0020.0002] # SAMARITAN PUNCTUATION SOF MASHFAAT
+083E ; [*0258.0020.0002] # SAMARITAN PUNCTUATION ANNAAU
+085E ; [*0405.0020.0002] # MANDAIC PUNCTUATION
+0888 ; [*056B.0020.0002] # ARABIC RAISED ROUND DOT
+0890 ; [.0000.0000.0000] # ARABIC POUND MARK ABOVE
+0891 ; [.0000.0000.0000] # ARABIC PIASTRE MARK ABOVE
+0898 ; [.0000.0000.0000] # ARABIC SMALL HIGH WORD AL-JUZ
+0899 ; [.0000.0000.0000] # ARABIC SMALL LOW WORD ISHMAAM
+089A ; [.0000.0000.0000] # ARABIC SMALL LOW WORD IMAALA
+089B ; [.0000.0000.0000] # ARABIC SMALL LOW WORD TASHEEL
+089C ; [.0000.0000.0000] # ARABIC MADDA WAAJIB
+089D ; [.0000.0000.0000] # ARABIC SUPERSCRIPT ALEF MOKHASSAS
+08CA ; [.0000.0000.0000] # ARABIC SMALL HIGH FARSI YEH
+08CB ; [.0000.0000.0000] # ARABIC SMALL HIGH YEH BARREE WITH TWO DOTS BELOW
+08CC ; [.0000.0000.0000] # ARABIC SMALL HIGH WORD SAH
+08CD ; [.0000.0000.0000] # ARABIC SMALL HIGH ZAH
+08CE ; [.0000.0000.0000] # ARABIC LARGE ROUND DOT ABOVE
+08CF ; [.0000.0000.0000] # ARABIC LARGE ROUND DOT BELOW
+08D0 ; [.0000.0000.0000] # ARABIC SUKUN BELOW
+08D1 ; [.0000.0000.0000] # ARABIC LARGE CIRCLE BELOW
+08D2 ; [.0000.0000.0000] # ARABIC LARGE ROUND DOT INSIDE CIRCLE BELOW
+08D3 ; [.0000.0000.0000] # ARABIC SMALL LOW WAW
+08D4 ; [.0000.0000.0000] # ARABIC SMALL HIGH WORD AR-RUB
+08D5 ; [.0000.0000.0000] # ARABIC SMALL HIGH SAD
+08D6 ; [.0000.0000.0000] # ARABIC SMALL HIGH AIN
+08D7 ; [.0000.0000.0000] # ARABIC SMALL HIGH QAF
+08D8 ; [.0000.0000.0000] # ARABIC SMALL HIGH NOON WITH KASRA
+08D9 ; [.0000.0000.0000] # ARABIC SMALL LOW NOON WITH KASRA
+08DA ; [.0000.0000.0000] # ARABIC SMALL HIGH WORD ATH-THALATHA
+08DB ; [.0000.0000.0000] # ARABIC SMALL HIGH WORD AS-SAJDA
+08DC ; [.0000.0000.0000] # ARABIC SMALL HIGH WORD AN-NISF
+08DD ; [.0000.0000.0000] # ARABIC SMALL HIGH WORD SAKTA
+08DE ; [.0000.0000.0000] # ARABIC SMALL HIGH WORD QIF
+08DF ; [.0000.0000.0000] # ARABIC SMALL HIGH WORD WAQFA
+08E0 ; [.0000.0000.0000] # ARABIC SMALL HIGH FOOTNOTE MARKER
+08E1 ; [.0000.0000.0000] # ARABIC SMALL HIGH SIGN SAFHA
+08E2 ; [.0000.0000.0000] # ARABIC DISPUTED END OF AYAH
+08EA ; [.0000.0000.0000] # ARABIC TONE ONE DOT ABOVE
+08EB ; [.0000.0000.0000] # ARABIC TONE TWO DOTS ABOVE
+08EC ; [.0000.0000.0000] # ARABIC TONE LOOP ABOVE
+08ED ; [.0000.0000.0000] # ARABIC TONE ONE DOT BELOW
+08EE ; [.0000.0000.0000] # ARABIC TONE TWO DOTS BELOW
+08EF ; [.0000.0000.0000] # ARABIC TONE LOOP BELOW
+08F3 ; [.0000.0000.0000] # ARABIC SMALL HIGH WAW
+0951 ; [.0000.0000.0000] # DEVANAGARI STRESS SIGN UDATTA
+0952 ; [.0000.0000.0000] # DEVANAGARI STRESS SIGN ANUDATTA
+0964 ; [*0299.0020.0002] # DEVANAGARI DANDA
+0965 ; [*029A.0020.0002] # DEVANAGARI DOUBLE DANDA
+0970 ; [*0414.0020.0002] # DEVANAGARI ABBREVIATION SIGN
+09F4 ; [*1E28.0020.0002] # BENGALI CURRENCY NUMERATOR ONE
+09F5 ; [*1E29.0020.0002] # BENGALI CURRENCY NUMERATOR TWO
+09F6 ; [*1E2A.0020.0002] # BENGALI CURRENCY NUMERATOR THREE
+09F7 ; [*1E2B.0020.0002] # BENGALI CURRENCY NUMERATOR FOUR
+09F8 ; [*1E2C.0020.0002] # BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR
+09F9 ; [*1E2D.0020.0002] # BENGALI CURRENCY DENOMINATOR SIXTEEN
+09FA ; [*057E.0020.0002] # BENGALI ISSHAR
+09FD ; [*0419.0020.0002] # BENGALI ABBREVIATION SIGN
+0A76 ; [*041A.0020.0002] # GURMUKHI ABBREVIATION SIGN
+0AF0 ; [*041B.0020.0002] # GUJARATI ABBREVIATION SIGN
+0B70 ; [*057F.0020.0002] # ORIYA ISSHAR
+0B72 ; [*1E2E.0020.0002] # ORIYA FRACTION ONE QUARTER
+0B73 ; [*1E2F.0020.0002] # ORIYA FRACTION ONE HALF
+0B74 ; [*1E30.0020.0002] # ORIYA FRACTION THREE QUARTERS
+0B75 ; [*1E31.0020.0002] # ORIYA FRACTION ONE SIXTEENTH
+0B76 ; [*1E32.0020.0002] # ORIYA FRACTION ONE EIGHTH
+0B77 ; [*1E33.0020.0002] # ORIYA FRACTION THREE SIXTEENTHS
+0BF0 ; [*1E3A.0020.0002] # TAMIL NUMBER TEN
+0BF1 ; [*1E3B.0020.0002] # TAMIL NUMBER ONE HUNDRED
+0BF2 ; [*1E3C.0020.0002] # TAMIL NUMBER ONE THOUSAND
+0BF3 ; [*0580.0020.0002] # TAMIL DAY SIGN
+0BF4 ; [*0581.0020.0002] # TAMIL MONTH SIGN
+0BF5 ; [*0582.0020.0002] # TAMIL YEAR SIGN
+0BF6 ; [*0583.0020.0002] # TAMIL DEBIT SIGN
+0BF7 ; [*0584.0020.0002] # TAMIL CREDIT SIGN
+0BF8 ; [*0585.0020.0002] # TAMIL AS ABOVE SIGN
+0BFA ; [*0586.0020.0002] # TAMIL NUMBER SIGN
+0C77 ; [*041C.0020.0002] # TELUGU SIGN SIDDHAM
+0C7F ; [*05A0.0020.0002] # TELUGU SIGN TUUMU
+0C84 ; [*041D.0020.0002] # KANNADA SIGN SIDDHAM
+0D4F ; [*05A1.0020.0002] # MALAYALAM SIGN PARA
+0D58 ; [*1E52.0020.0002] # MALAYALAM FRACTION ONE ONE-HUNDRED-AND-SIXTIETH
+0D59 ; [*1E53.0020.0002] # MALAYALAM FRACTION ONE FORTIETH
+0D5A ; [*1E54.0020.0002] # MALAYALAM FRACTION THREE EIGHTIETHS
+0D5B ; [*1E55.0020.0002] # MALAYALAM FRACTION ONE TWENTIETH
+0D5C ; [*1E56.0020.0002] # MALAYALAM FRACTION ONE TENTH
+0D5D ; [*1E57.0020.0002] # MALAYALAM FRACTION THREE TWENTIETHS
+0D5E ; [*1E58.0020.0002] # MALAYALAM FRACTION ONE FIFTH
+0D70 ; [*1E59.0020.0002] # MALAYALAM NUMBER TEN
+0D71 ; [*1E5A.0020.0002] # MALAYALAM NUMBER ONE HUNDRED
+0D72 ; [*1E5B.0020.0002] # MALAYALAM NUMBER ONE THOUSAND
+0D73 ; [*1E5C.0020.0002] # MALAYALAM FRACTION ONE QUARTER
+0D74 ; [*1E5D.0020.0002] # MALAYALAM FRACTION ONE HALF
+0D75 ; [*1E5E.0020.0002] # MALAYALAM FRACTION THREE QUARTERS
+0D76 ; [*1E5F.0020.0002] # MALAYALAM FRACTION ONE SIXTEENTH
+0D77 ; [*1E60.0020.0002] # MALAYALAM FRACTION ONE EIGHTH
+0D78 ; [*1E61.0020.0002] # MALAYALAM FRACTION THREE SIXTEENTHS
+0D79 ; [*05A2.0020.0002] # MALAYALAM DATE MARK
+0DF4 ; [*041E.0020.0002] # SINHALA PUNCTUATION KUNDDALIYA
+0E4F ; [*041F.0020.0002] # THAI CHARACTER FONGMAN
+0E5A ; [*0420.0020.0002] # THAI CHARACTER ANGKHANKHU
+0E5B ; [*0421.0020.0002] # THAI CHARACTER KHOMUT
+0F01 ; [*05AA.0020.0002] # TIBETAN MARK GTER YIG MGO TRUNCATED A
+0F02 ; [*05AB.0020.0002] # TIBETAN MARK GTER YIG MGO -UM RNAM BCAD MA
+0F03 ; [*05AC.0020.0002] # TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA
+0F04 ; [*0424.0020.0002] # TIBETAN MARK INITIAL YIG MGO MDUN MA
+0F05 ; [*0425.0020.0002] # TIBETAN MARK CLOSING YIG MGO SGAB MA
+0F06 ; [*0426.0020.0002] # TIBETAN MARK CARET YIG MGO PHUR SHAD MA
+0F07 ; [*0427.0020.0002] # TIBETAN MARK YIG MGO TSHEG SHAD MA
+0F08 ; [*0428.0020.0002] # TIBETAN MARK SBRUL SHAD
+0F09 ; [*0429.0020.0002] # TIBETAN MARK BSKUR YIG MGO
+0F0A ; [*042A.0020.0002] # TIBETAN MARK BKA- SHOG YIG MGO
+0F0B ; [*042D.0020.0002] # TIBETAN MARK INTERSYLLABIC TSHEG
+0F0C ; [*042D.0020.001B] # TIBETAN MARK DELIMITER TSHEG BSTAR
+0F0D ; [*042E.0020.0002] # TIBETAN MARK SHAD
+0F0E ; [*042F.0020.0002] # TIBETAN MARK NYIS SHAD
+0F0F ; [*0430.0020.0002] # TIBETAN MARK TSHEG SHAD
+0F10 ; [*0431.0020.0002] # TIBETAN MARK NYIS TSHEG SHAD
+0F11 ; [*0432.0020.0002] # TIBETAN MARK RIN CHEN SPUNGS SHAD
+0F12 ; [*0433.0020.0002] # TIBETAN MARK RGYA GRAM SHAD
+0F13 ; [*05AD.0020.0002] # TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN
+0F14 ; [*0260.0020.0002] # TIBETAN MARK GTER TSHEG
+0F15 ; [*05AE.0020.0002] # TIBETAN LOGOTYPE SIGN CHAD RTAGS
+0F16 ; [*05AF.0020.0002] # TIBETAN LOGOTYPE SIGN LHAG RTAGS
+0F17 ; [*05B0.0020.0002] # TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS
+0F18 ; [.0000.0000.0000] # TIBETAN ASTROLOGICAL SIGN -KHYUD PA
+0F19 ; [.0000.0000.0000] # TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS
+0F1A ; [*05B1.0020.0002] # TIBETAN SIGN RDEL DKAR GCIG
+0F1B ; [*05B2.0020.0002] # TIBETAN SIGN RDEL DKAR GNYIS
+0F1C ; [*05B3.0020.0002] # TIBETAN SIGN RDEL DKAR GSUM
+0F1D ; [*05B4.0020.0002] # TIBETAN SIGN RDEL NAG GCIG
+0F1E ; [*05B5.0020.0002] # TIBETAN SIGN RDEL NAG GNYIS
+0F1F ; [*05B6.0020.0002] # TIBETAN SIGN RDEL DKAR RDEL NAG
+0F34 ; [*05B7.0020.0002] # TIBETAN MARK BSDUS RTAGS
+0F35 ; [.0000.0000.0000] # TIBETAN MARK NGAS BZUNG NYI ZLA
+0F36 ; [*05B8.0020.0002] # TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN
+0F37 ; [.0000.0000.0000] # TIBETAN MARK NGAS BZUNG SGOR RTAGS
+0F38 ; [*05B9.0020.0002] # TIBETAN MARK CHE MGO
+0F3A ; [*033A.0020.0002] # TIBETAN MARK GUG RTAGS GYON
+0F3B ; [*033B.0020.0002] # TIBETAN MARK GUG RTAGS GYAS
+0F3C ; [*033C.0020.0002] # TIBETAN MARK ANG KHANG GYON
+0F3D ; [*033D.0020.0002] # TIBETAN MARK ANG KHANG GYAS
+0F3E ; [.0000.0000.0000] # TIBETAN SIGN YAR TSHES
+0F3F ; [.0000.0000.0000] # TIBETAN SIGN MAR TSHES
+0F82 ; [.0000.0000.0000] # TIBETAN SIGN NYI ZLA NAA DA
+0F83 ; [.0000.0000.0000] # TIBETAN SIGN SNA LDAN
+0F85 ; [*0434.0020.0002] # TIBETAN MARK PALUTA
+0F86 ; [.0000.0000.0000] # TIBETAN SIGN LCI RTAGS
+0F87 ; [.0000.0000.0000] # TIBETAN SIGN YANG RTAGS
+0FBE ; [*05BA.0020.0002] # TIBETAN KU RU KHA
+0FBF ; [*05BB.0020.0002] # TIBETAN KU RU KHA BZHI MIG CAN
+0FC0 ; [*05BC.0020.0002] # TIBETAN CANTILLATION SIGN HEAVY BEAT
+0FC1 ; [*05BD.0020.0002] # TIBETAN CANTILLATION SIGN LIGHT BEAT
+0FC2 ; [*05BE.0020.0002] # TIBETAN CANTILLATION SIGN CANG TE-U
+0FC3 ; [*05BF.0020.0002] # TIBETAN CANTILLATION SIGN SBUB -CHAL
+0FC4 ; [*05C0.0020.0002] # TIBETAN SYMBOL DRIL BU
+0FC5 ; [*05C1.0020.0002] # TIBETAN SYMBOL RDO RJE
+0FC6 ; [.0000.0000.0000] # TIBETAN SYMBOL PADMA GDAN
+0FC7 ; [*05C2.0020.0002] # TIBETAN SYMBOL RDO RJE RGYA GRAM
+0FC8 ; [*05C3.0020.0002] # TIBETAN SYMBOL PHUR PA
+0FC9 ; [*05C4.0020.0002] # TIBETAN SYMBOL NOR BU
+0FCA ; [*05C5.0020.0002] # TIBETAN SYMBOL NOR BU NYIS -KHYIL
+0FCB ; [*05C6.0020.0002] # TIBETAN SYMBOL NOR BU GSUM -KHYIL
+0FCC ; [*05C7.0020.0002] # TIBETAN SYMBOL NOR BU BZHI -KHYIL
+0FCE ; [*05C8.0020.0002] # TIBETAN SIGN RDEL NAG RDEL DKAR
+0FCF ; [*05C9.0020.0002] # TIBETAN SIGN RDEL NAG GSUM
+0FD0 ; [*042B.0020.0002] # TIBETAN MARK BSKA- SHOG GI MGO RGYAN
+0FD1 ; [*042C.0020.0002] # TIBETAN MARK MNYAM YIG GI MGO RGYAN
+0FD2 ; [*0435.0020.0002] # TIBETAN MARK NYIS TSHEG
+0FD3 ; [*0436.0020.0002] # TIBETAN MARK INITIAL BRDA RNYING YIG MGO MDUN MA
+0FD4 ; [*0437.0020.0002] # TIBETAN MARK CLOSING BRDA RNYING YIG MGO SGAB MA
+0FD5 ; [*05CA.0020.0002] # RIGHT-FACING SVASTI SIGN
+0FD6 ; [*05CB.0020.0002] # LEFT-FACING SVASTI SIGN
+0FD7 ; [*05CC.0020.0002] # RIGHT-FACING SVASTI SIGN WITH DOTS
+0FD8 ; [*05CD.0020.0002] # LEFT-FACING SVASTI SIGN WITH DOTS
+0FD9 ; [*0438.0020.0002] # TIBETAN MARK LEADING MCHAN RTAGS
+0FDA ; [*0439.0020.0002] # TIBETAN MARK TRAILING MCHAN RTAGS
+104A ; [*02A4.0020.0002] # MYANMAR SIGN LITTLE SECTION
+104B ; [*02A5.0020.0002] # MYANMAR SIGN SECTION
+104C ; [*044F.0020.0002] # MYANMAR SYMBOL LOCATIVE
+104D ; [*0450.0020.0002] # MYANMAR SYMBOL COMPLETED
+104E ; [*0451.0020.0002] # MYANMAR SYMBOL AFOREMENTIONED
+104F ; [*0452.0020.0002] # MYANMAR SYMBOL GENITIVE
+109E ; [*05D0.0020.0002] # MYANMAR SYMBOL SHAN ONE
+109F ; [*05D1.0020.0002] # MYANMAR SYMBOL SHAN EXCLAMATION
+10FB ; [*02D3.0020.0002] # GEORGIAN PARAGRAPH SEPARATOR
+1360 ; [*02D4.0020.0002] # ETHIOPIC SECTION MARK
+1361 ; [*0259.0020.0002] # ETHIOPIC WORDSPACE
+1362 ; [*0286.0020.0002] # ETHIOPIC FULL STOP
+1363 ; [*025A.0020.0002] # ETHIOPIC COMMA
+1364 ; [*025B.0020.0002] # ETHIOPIC SEMICOLON
+1365 ; [*025C.0020.0002] # ETHIOPIC COLON
+1366 ; [*025D.0020.0002] # ETHIOPIC PREFACE COLON
+1367 ; [*0276.0020.0002] # ETHIOPIC QUESTION MARK
+1368 ; [*02D5.0020.0002] # ETHIOPIC PARAGRAPH SEPARATOR
+1372 ; [*1E62.0020.0002] # ETHIOPIC NUMBER TEN
+1373 ; [*1E63.0020.0002] # ETHIOPIC NUMBER TWENTY
+1374 ; [*1E64.0020.0002] # ETHIOPIC NUMBER THIRTY
+1375 ; [*1E65.0020.0002] # ETHIOPIC NUMBER FORTY
+1376 ; [*1E66.0020.0002] # ETHIOPIC NUMBER FIFTY
+1377 ; [*1E67.0020.0002] # ETHIOPIC NUMBER SIXTY
+1378 ; [*1E68.0020.0002] # ETHIOPIC NUMBER SEVENTY
+1379 ; [*1E69.0020.0002] # ETHIOPIC NUMBER EIGHTY
+137A ; [*1E6A.0020.0002] # ETHIOPIC NUMBER NINETY
+137B ; [*1E6B.0020.0002] # ETHIOPIC NUMBER HUNDRED
+137C ; [*1E6C.0020.0002] # ETHIOPIC NUMBER TEN THOUSAND
+1390 ; [*050F.0020.0002] # ETHIOPIC TONAL MARK YIZET
+1391 ; [*0510.0020.0002] # ETHIOPIC TONAL MARK DERET
+1392 ; [*0511.0020.0002] # ETHIOPIC TONAL MARK RIKRIK
+1393 ; [*0512.0020.0002] # ETHIOPIC TONAL MARK SHORT RIKRIK
+1394 ; [*0513.0020.0002] # ETHIOPIC TONAL MARK DIFAT
+1395 ; [*0514.0020.0002] # ETHIOPIC TONAL MARK KENAT
+1396 ; [*0515.0020.0002] # ETHIOPIC TONAL MARK CHIRET
+1397 ; [*0516.0020.0002] # ETHIOPIC TONAL MARK HIDET
+1398 ; [*0517.0020.0002] # ETHIOPIC TONAL MARK DERET-HIDET
+1399 ; [*0518.0020.0002] # ETHIOPIC TONAL MARK KURT
+1400 ; [*020F.0020.0002] # CANADIAN SYLLABICS HYPHEN
+166D ; [*05CE.0020.0002] # CANADIAN SYLLABICS CHI SIGN
+166E ; [*0289.0020.0002] # CANADIAN SYLLABICS FULL STOP
+1680 ; [*0209.0020.0004] # OGHAM SPACE MARK
+169B ; [*033E.0020.0002] # OGHAM FEATHER MARK
+169C ; [*033F.0020.0002] # OGHAM REVERSED FEATHER MARK
+16EB ; [*0264.0020.0002] # RUNIC SINGLE PUNCTUATION
+16EC ; [*0265.0020.0002] # RUNIC MULTIPLE PUNCTUATION
+16ED ; [*0266.0020.0002] # RUNIC CROSS PUNCTUATION
+1735 ; [*02A1.0020.0002] # PHILIPPINE SINGLE PUNCTUATION
+1736 ; [*02A2.0020.0002] # PHILIPPINE DOUBLE PUNCTUATION
+17B4 ; [.0000.0000.0000] # KHMER VOWEL INHERENT AQ
+17B5 ; [.0000.0000.0000] # KHMER VOWEL INHERENT AA
+17D3 ; [.0000.0000.0000] # KHMER SIGN BATHAMASAT
+17D4 ; [*02A6.0020.0002] # KHMER SIGN KHAN
+17D5 ; [*02A7.0020.0002] # KHMER SIGN BARIYOOSAN
+17D6 ; [*0261.0020.0002] # KHMER SIGN CAMNUC PII KUUH
+17D8 ; [*0453.0020.0002] # KHMER SIGN BEYYAL
+17D9 ; [*0454.0020.0002] # KHMER SIGN PHNAEK MUAN
+17DA ; [*0455.0020.0002] # KHMER SIGN KOOMUUT
+1800 ; [*0406.0020.0002] # MONGOLIAN BIRGA
+1801 ; [*0282.0020.0002] # MONGOLIAN ELLIPSIS
+1802 ; [*0231.0020.0002] # MONGOLIAN COMMA
+1803 ; [*0287.0020.0002] # MONGOLIAN FULL STOP
+1804 ; [*025E.0020.0002] # MONGOLIAN COLON
+1805 ; [*025F.0020.0002] # MONGOLIAN FOUR DOTS
+1806 ; [*0211.0020.0002] # MONGOLIAN TODO SOFT HYPHEN
+1807 ; [*0212.0020.0002] # MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER
+1808 ; [*0232.0020.0002] # MONGOLIAN MANCHU COMMA
+1809 ; [*0288.0020.0002] # MONGOLIAN MANCHU FULL STOP
+180A ; [.0000.0000.0000] # MONGOLIAN NIRUGU
+1940 ; [*05CF.0020.0002] # LIMBU SIGN LOO
+1944 ; [*026D.0020.0002] # LIMBU EXCLAMATION MARK
+1945 ; [*0277.0020.0002] # LIMBU QUESTION MARK
+19E0 ; [*05D6.0020.0002] # KHMER SYMBOL PATHAMASAT
+19E1 ; [*05D7.0020.0002] # KHMER SYMBOL MUOY KOET
+19E2 ; [*05D8.0020.0002] # KHMER SYMBOL PII KOET
+19E3 ; [*05D9.0020.0002] # KHMER SYMBOL BEI KOET
+19E4 ; [*05DA.0020.0002] # KHMER SYMBOL BUON KOET
+19E5 ; [*05DB.0020.0002] # KHMER SYMBOL PRAM KOET
+19E6 ; [*05DC.0020.0002] # KHMER SYMBOL PRAM-MUOY KOET
+19E7 ; [*05DD.0020.0002] # KHMER SYMBOL PRAM-PII KOET
+19E8 ; [*05DE.0020.0002] # KHMER SYMBOL PRAM-BEI KOET
+19E9 ; [*05DF.0020.0002] # KHMER SYMBOL PRAM-BUON KOET
+19EA ; [*05E0.0020.0002] # KHMER SYMBOL DAP KOET
+19EB ; [*05E1.0020.0002] # KHMER SYMBOL DAP-MUOY KOET
+19EC ; [*05E2.0020.0002] # KHMER SYMBOL DAP-PII KOET
+19ED ; [*05E3.0020.0002] # KHMER SYMBOL DAP-BEI KOET
+19EE ; [*05E4.0020.0002] # KHMER SYMBOL DAP-BUON KOET
+19EF ; [*05E5.0020.0002] # KHMER SYMBOL DAP-PRAM KOET
+19F0 ; [*05E6.0020.0002] # KHMER SYMBOL TUTEYASAT
+19F1 ; [*05E7.0020.0002] # KHMER SYMBOL MUOY ROC
+19F2 ; [*05E8.0020.0002] # KHMER SYMBOL PII ROC
+19F3 ; [*05E9.0020.0002] # KHMER SYMBOL BEI ROC
+19F4 ; [*05EA.0020.0002] # KHMER SYMBOL BUON ROC
+19F5 ; [*05EB.0020.0002] # KHMER SYMBOL PRAM ROC
+19F6 ; [*05EC.0020.0002] # KHMER SYMBOL PRAM-MUOY ROC
+19F7 ; [*05ED.0020.0002] # KHMER SYMBOL PRAM-PII ROC
+19F8 ; [*05EE.0020.0002] # KHMER SYMBOL PRAM-BEI ROC
+19F9 ; [*05EF.0020.0002] # KHMER SYMBOL PRAM-BUON ROC
+19FA ; [*05F0.0020.0002] # KHMER SYMBOL DAP ROC
+19FB ; [*05F1.0020.0002] # KHMER SYMBOL DAP-MUOY ROC
+19FC ; [*05F2.0020.0002] # KHMER SYMBOL DAP-PII ROC
+19FD ; [*05F3.0020.0002] # KHMER SYMBOL DAP-BEI ROC
+19FE ; [*05F4.0020.0002] # KHMER SYMBOL DAP-BUON ROC
+19FF ; [*05F5.0020.0002] # KHMER SYMBOL DAP-PRAM ROC
+1A1E ; [*02D6.0020.0002] # BUGINESE PALLAWA
+1A1F ; [*02D7.0020.0002] # BUGINESE END OF SECTION
+1A7F ; [.0000.0000.0000] # TAI THAM COMBINING CRYPTOGRAMMIC DOT
+1AA0 ; [*0456.0020.0002] # TAI THAM SIGN WIANG
+1AA1 ; [*0457.0020.0002] # TAI THAM SIGN WIANGWAAK
+1AA2 ; [*0458.0020.0002] # TAI THAM SIGN SAWAN
+1AA3 ; [*0459.0020.0002] # TAI THAM SIGN KEOW
+1AA4 ; [*045A.0020.0002] # TAI THAM SIGN HOY
+1AA5 ; [*045B.0020.0002] # TAI THAM SIGN DOKMAI
+1AA6 ; [*045C.0020.0002] # TAI THAM SIGN REVERSED ROTATED RANA
+1AA8 ; [*02A8.0020.0002] # TAI THAM SIGN KAAN
+1AA9 ; [*02A9.0020.0002] # TAI THAM SIGN KAANKUU
+1AAA ; [*02AA.0020.0002] # TAI THAM SIGN SATKAAN
+1AAB ; [*02AB.0020.0002] # TAI THAM SIGN SATKAANKUU
+1AAC ; [*045D.0020.0002] # TAI THAM SIGN HANG
+1AAD ; [*045E.0020.0002] # TAI THAM SIGN CAANG
+1B5A ; [*02D8.0020.0002] # BALINESE PANTI
+1B5B ; [*02D9.0020.0002] # BALINESE PAMADA
+1B5C ; [*028A.0020.0002] # BALINESE WINDU
+1B5D ; [*0262.0020.0002] # BALINESE CARIK PAMUNGKAH
+1B5E ; [*02AC.0020.0002] # BALINESE CARIK SIKI
+1B5F ; [*02AD.0020.0002] # BALINESE CARIK PAREREN
+1B60 ; [*0210.0020.0002] # BALINESE PAMENENG
+1B61 ; [*05F6.0020.0002] # BALINESE MUSICAL SYMBOL DONG
+1B62 ; [*05F7.0020.0002] # BALINESE MUSICAL SYMBOL DENG
+1B63 ; [*05F8.0020.0002] # BALINESE MUSICAL SYMBOL DUNG
+1B64 ; [*05F9.0020.0002] # BALINESE MUSICAL SYMBOL DANG
+1B65 ; [*05FA.0020.0002] # BALINESE MUSICAL SYMBOL DANG SURANG
+1B66 ; [*05FB.0020.0002] # BALINESE MUSICAL SYMBOL DING
+1B67 ; [*05FC.0020.0002] # BALINESE MUSICAL SYMBOL DAENG
+1B68 ; [*05FD.0020.0002] # BALINESE MUSICAL SYMBOL DEUNG
+1B69 ; [*05FE.0020.0002] # BALINESE MUSICAL SYMBOL DAING
+1B6A ; [*05FF.0020.0002] # BALINESE MUSICAL SYMBOL DANG GEDE
+1B6B ; [.0000.0000.0000] # BALINESE MUSICAL SYMBOL COMBINING TEGEH
+1B6C ; [.0000.0000.0000] # BALINESE MUSICAL SYMBOL COMBINING ENDEP
+1B6D ; [.0000.0000.0000] # BALINESE MUSICAL SYMBOL COMBINING KEMPUL
+1B6E ; [.0000.0000.0000] # BALINESE MUSICAL SYMBOL COMBINING KEMPLI
+1B6F ; [.0000.0000.0000] # BALINESE MUSICAL SYMBOL COMBINING JEGOGAN
+1B70 ; [.0000.0000.0000] # BALINESE MUSICAL SYMBOL COMBINING KEMPUL WITH JEGOGAN
+1B71 ; [.0000.0000.0000] # BALINESE MUSICAL SYMBOL COMBINING KEMPLI WITH JEGOGAN
+1B72 ; [.0000.0000.0000] # BALINESE MUSICAL SYMBOL COMBINING BENDE
+1B73 ; [.0000.0000.0000] # BALINESE MUSICAL SYMBOL COMBINING GONG
+1B74 ; [*0600.0020.0002] # BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG
+1B75 ; [*0601.0020.0002] # BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DAG
+1B76 ; [*0602.0020.0002] # BALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TUK
+1B77 ; [*0603.0020.0002] # BALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TAK
+1B78 ; [*0604.0020.0002] # BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PANG
+1B79 ; [*0605.0020.0002] # BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PUNG
+1B7A ; [*0606.0020.0002] # BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLAK
+1B7B ; [*0607.0020.0002] # BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLUK
+1B7C ; [*0608.0020.0002] # BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING
+1B7D ; [*02DA.0020.0002] # BALINESE PANTI LANTANG
+1B7E ; [*02DB.0020.0002] # BALINESE PAMADA LANTANG
+1BFC ; [*046A.0020.0002] # BATAK SYMBOL BINDU NA METEK
+1BFD ; [*046B.0020.0002] # BATAK SYMBOL BINDU PINARBORAS
+1BFE ; [*046C.0020.0002] # BATAK SYMBOL BINDU JUDUL
+1BFF ; [*046D.0020.0002] # BATAK SYMBOL BINDU PANGOLAT
+1C3B ; [*029D.0020.0002] # LEPCHA PUNCTUATION TA-ROL
+1C3C ; [*029E.0020.0002] # LEPCHA PUNCTUATION NYET THYOOM TA-ROL
+1C3D ; [*044C.0020.0002] # LEPCHA PUNCTUATION CER-WA
+1C3E ; [*044D.0020.0002] # LEPCHA PUNCTUATION TSHOOK CER-WA
+1C3F ; [*044E.0020.0002] # LEPCHA PUNCTUATION TSHOOK
+1C7E ; [*02CE.0020.0002] # OL CHIKI PUNCTUATION MUCAAD
+1C7F ; [*02CF.0020.0002] # OL CHIKI PUNCTUATION DOUBLE MUCAAD
+1CC0 ; [*045F.0020.0002] # SUNDANESE PUNCTUATION BINDU SURYA
+1CC1 ; [*0460.0020.0002] # SUNDANESE PUNCTUATION BINDU PANGLONG
+1CC2 ; [*0461.0020.0002] # SUNDANESE PUNCTUATION BINDU PURNAMA
+1CC3 ; [*0462.0020.0002] # SUNDANESE PUNCTUATION BINDU CAKRA
+1CC4 ; [*0463.0020.0002] # SUNDANESE PUNCTUATION BINDU LEU SATANGA
+1CC5 ; [*0464.0020.0002] # SUNDANESE PUNCTUATION BINDU KA SATANGA
+1CC6 ; [*0465.0020.0002] # SUNDANESE PUNCTUATION BINDU DA SATANGA
+1CC7 ; [*0466.0020.0002] # SUNDANESE PUNCTUATION BINDU BA SATANGA
+1CD0 ; [.0000.0000.0000] # VEDIC TONE KARSHANA
+1CD1 ; [.0000.0000.0000] # VEDIC TONE SHARA
+1CD2 ; [.0000.0000.0000] # VEDIC TONE PRENKHA
+1CD3 ; [.0000.0000.0000] # VEDIC SIGN NIHSHVASA
+1CD4 ; [.0000.0000.0000] # VEDIC SIGN YAJURVEDIC MIDLINE SVARITA
+1CD5 ; [.0000.0000.0000] # VEDIC TONE YAJURVEDIC AGGRAVATED INDEPENDENT SVARITA
+1CD6 ; [.0000.0000.0000] # VEDIC TONE YAJURVEDIC INDEPENDENT SVARITA
+1CD7 ; [.0000.0000.0000] # VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA
+1CD8 ; [.0000.0000.0000] # VEDIC TONE CANDRA BELOW
+1CD9 ; [.0000.0000.0000] # VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA SCHROEDER
+1CDA ; [.0000.0000.0000] # VEDIC TONE DOUBLE SVARITA
+1CDB ; [.0000.0000.0000] # VEDIC TONE TRIPLE SVARITA
+1CDC ; [.0000.0000.0000] # VEDIC TONE KATHAKA ANUDATTA
+1CDD ; [.0000.0000.0000] # VEDIC TONE DOT BELOW
+1CDE ; [.0000.0000.0000] # VEDIC TONE TWO DOTS BELOW
+1CDF ; [.0000.0000.0000] # VEDIC TONE THREE DOTS BELOW
+1CE0 ; [.0000.0000.0000] # VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA
+1CE1 ; [.0000.0000.0000] # VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA
+1CE2 ; [.0000.0000.0000] # VEDIC SIGN VISARGA SVARITA
+1CE3 ; [.0000.0000.0000] # VEDIC SIGN VISARGA UDATTA
+1CE4 ; [.0000.0000.0000] # VEDIC SIGN REVERSED VISARGA UDATTA
+1CE5 ; [.0000.0000.0000] # VEDIC SIGN VISARGA ANUDATTA
+1CE6 ; [.0000.0000.0000] # VEDIC SIGN REVERSED VISARGA ANUDATTA
+1CE7 ; [.0000.0000.0000] # VEDIC SIGN VISARGA UDATTA WITH TAIL
+1CE8 ; [.0000.0000.0000] # VEDIC SIGN VISARGA ANUDATTA WITH TAIL
+1CF4 ; [.0000.0000.0000] # VEDIC TONE CANDRA ABOVE
+1CF7 ; [.0000.0000.0000] # VEDIC SIGN ATIKRAMA
+1CF8 ; [.0000.0000.0000] # VEDIC TONE RING ABOVE
+1CF9 ; [.0000.0000.0000] # VEDIC TONE DOUBLE RING ABOVE
+1FBD ; [*04D5.0020.0002] # GREEK KORONIS
+1FBF ; [*04D5.0020.0002] # GREEK PSILI
+1FC0 ; [*04D7.0020.0002] # GREEK PERISPOMENI
+1FC1 ; [*04D0.0020.0002][.0000.002A.0002] # GREEK DIALYTIKA AND PERISPOMENI
+1FCD ; [*04D5.0020.0002][.0000.0025.0002] # GREEK PSILI AND VARIA
+1FCE ; [*04D5.0020.0002][.0000.0024.0002] # GREEK PSILI AND OXIA
+1FCF ; [*04D5.0020.0002][.0000.002A.0002] # GREEK PSILI AND PERISPOMENI
+1FDD ; [*04D6.0020.0002][.0000.0025.0002] # GREEK DASIA AND VARIA
+1FDE ; [*04D6.0020.0002][.0000.0024.0002] # GREEK DASIA AND OXIA
+1FDF ; [*04D6.0020.0002][.0000.002A.0002] # GREEK DASIA AND PERISPOMENI
+1FED ; [*04D0.0020.0002][.0000.0025.0002] # GREEK DIALYTIKA AND VARIA
+1FEE ; [*04D0.0020.0002][.0000.0024.0002] # GREEK DIALYTIKA AND OXIA
+1FEF ; [*04C9.0020.0002] # GREEK VARIA
+1FFD ; [*04CA.0020.0002] # GREEK OXIA
+1FFE ; [*04D6.0020.0002] # GREEK DASIA
+2000 ; [*0209.0020.0004] # EN QUAD
+2001 ; [*0209.0020.0004] # EM QUAD
+2002 ; [*0209.0020.0004] # EN SPACE
+2003 ; [*0209.0020.0004] # EM SPACE
+2004 ; [*0209.0020.0004] # THREE-PER-EM SPACE
+2005 ; [*0209.0020.0004] # FOUR-PER-EM SPACE
+2006 ; [*0209.0020.0004] # SIX-PER-EM SPACE
+2007 ; [*0209.0020.001B] # FIGURE SPACE
+2008 ; [*0209.0020.0004] # PUNCTUATION SPACE
+2009 ; [*0209.0020.0004] # THIN SPACE
+200A ; [*0209.0020.0004] # HAIR SPACE
+2010 ; [*0213.0020.0002] # HYPHEN
+2011 ; [*0213.0020.001B] # NON-BREAKING HYPHEN
+2012 ; [*0214.0020.0002] # FIGURE DASH
+2013 ; [*0215.0020.0002] # EN DASH
+2014 ; [*0216.0020.0002] # EM DASH
+2015 ; [*0217.0020.0002] # HORIZONTAL BAR
+2016 ; [*03A8.0020.0002] # DOUBLE VERTICAL LINE
+2017 ; [*020C.0020.0002] # DOUBLE LOW LINE
+2018 ; [*0323.0020.0002] # LEFT SINGLE QUOTATION MARK
+2019 ; [*0324.0020.0002] # RIGHT SINGLE QUOTATION MARK
+201A ; [*0325.0020.0002] # SINGLE LOW-9 QUOTATION MARK
+201B ; [*0326.0020.0002] # SINGLE HIGH-REVERSED-9 QUOTATION MARK
+201C ; [*032A.0020.0002] # LEFT DOUBLE QUOTATION MARK
+201D ; [*032B.0020.0002] # RIGHT DOUBLE QUOTATION MARK
+201E ; [*032C.0020.0002] # DOUBLE LOW-9 QUOTATION MARK
+201F ; [*032D.0020.0002] # DOUBLE HIGH-REVERSED-9 QUOTATION MARK
+2020 ; [*03C7.0020.0002] # DAGGER
+2021 ; [*03C8.0020.0002] # DOUBLE DAGGER
+2022 ; [*03CD.0020.0002] # BULLET
+2023 ; [*03CE.0020.0002] # TRIANGULAR BULLET
+2024 ; [*0281.0020.0004] # ONE DOT LEADER
+2025 ; [*0281.0020.0004][*0281.0020.0004] # TWO DOT LEADER
+2026 ; [*0281.0020.0004][*0281.0020.0004][*0281.0020.0004] # HORIZONTAL ELLIPSIS
+2027 ; [*03CF.0020.0002] # HYPHENATION POINT
+2028 ; [*0207.0020.0002] # LINE SEPARATOR
+2029 ; [*0208.0020.0002] # PARAGRAPH SEPARATOR
+202F ; [*0209.0020.001B] # NARROW NO-BREAK SPACE
+2030 ; [*03C3.0020.0002] # PER MILLE SIGN
+2031 ; [*03C5.0020.0002] # PER TEN THOUSAND SIGN
+2032 ; [*03D3.0020.0002] # PRIME
+2033 ; [*03D3.0020.0004][*03D3.0020.0004] # DOUBLE PRIME
+2034 ; [*03D3.0020.0004][*03D3.0020.0004][*03D3.0020.0004] # TRIPLE PRIME
+2035 ; [*03D4.0020.0002] # REVERSED PRIME
+2036 ; [*03D4.0020.0004][*03D4.0020.0004] # REVERSED DOUBLE PRIME
+2037 ; [*03D4.0020.0004][*03D4.0020.0004][*03D4.0020.0004] # REVERSED TRIPLE PRIME
+2038 ; [*03D7.0020.0002] # CARET
+2039 ; [*0327.0020.0002] # SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+203A ; [*0328.0020.0002] # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+203B ; [*03D8.0020.0002] # REFERENCE MARK
+203C ; [*0268.0020.0004][*0268.0020.0004] # DOUBLE EXCLAMATION MARK
+203D ; [*027F.0020.0002] # INTERROBANG
+203E ; [*020A.0020.0002] # OVERLINE
+203F ; [*03D9.0020.0002] # UNDERTIE
+2040 ; [*03DB.0020.0002] # CHARACTER TIE
+2041 ; [*03DD.0020.0002] # CARET INSERTION POINT
+2042 ; [*03DE.0020.0002] # ASTERISM
+2043 ; [*03D0.0020.0002] # HYPHEN BULLET
+2044 ; [*06AD.0020.0002] # FRACTION SLASH
+2045 ; [*0340.0020.0002] # LEFT SQUARE BRACKET WITH QUILL
+2046 ; [*0341.0020.0002] # RIGHT SQUARE BRACKET WITH QUILL
+2047 ; [*026F.0020.0004][*026F.0020.0004] # DOUBLE QUESTION MARK
+2048 ; [*026F.0020.0004][*0268.0020.0004] # QUESTION EXCLAMATION MARK
+2049 ; [*0268.0020.0004][*026F.0020.0004] # EXCLAMATION QUESTION MARK
+204A ; [*03BE.0020.0002] # TIRONIAN SIGN ET
+204B ; [*03B1.0020.0002] # REVERSED PILCROW SIGN
+204C ; [*03D1.0020.0002] # BLACK LEFTWARDS BULLET
+204D ; [*03D2.0020.0002] # BLACK RIGHTWARDS BULLET
+204E ; [*03B6.0020.0002] # LOW ASTERISK
+204F ; [*023D.0020.0002] # REVERSED SEMICOLON
+2050 ; [*03DC.0020.0002] # CLOSE UP
+2051 ; [*03B7.0020.0002] # TWO ASTERISKS ALIGNED VERTICALLY
+2052 ; [*06A9.0020.0002] # COMMERCIAL MINUS SIGN
+2053 ; [*021A.0020.0002] # SWUNG DASH
+2054 ; [*03DA.0020.0002] # INVERTED UNDERTIE
+2055 ; [*0303.0020.0002] # FLOWER PUNCTUATION MARK
+2056 ; [*0304.0020.0002] # THREE DOT PUNCTUATION
+2057 ; [*03D3.0020.0004][*03D3.0020.0004][*03D3.0020.0004][*03D3.0020.0004] # QUADRUPLE PRIME
+2058 ; [*0305.0020.0002] # FOUR DOT PUNCTUATION
+2059 ; [*0306.0020.0002] # FIVE DOT PUNCTUATION
+205A ; [*0307.0020.0002] # TWO DOT PUNCTUATION
+205B ; [*0308.0020.0002] # FOUR DOT MARK
+205C ; [*0309.0020.0002] # DOTTED CROSS
+205D ; [*030A.0020.0002] # TRICOLON
+205E ; [*030B.0020.0002] # VERTICAL FOUR DOTS
+205F ; [*0209.0020.0004] # MEDIUM MATHEMATICAL SPACE
+2061 ; [.0000.0000.0000] # FUNCTION APPLICATION
+2062 ; [.0000.0000.0000] # INVISIBLE TIMES
+2063 ; [.0000.0000.0000] # INVISIBLE SEPARATOR
+2064 ; [.0000.0000.0000] # INVISIBLE PLUS
+207A ; [*069D.0020.0014] # SUPERSCRIPT PLUS SIGN
+207B ; [*06A8.0020.0014] # SUPERSCRIPT MINUS
+207C ; [*06A2.0020.0014] # SUPERSCRIPT EQUALS SIGN
+207D ; [*0334.0020.0014] # SUPERSCRIPT LEFT PARENTHESIS
+207E ; [*0335.0020.0014] # SUPERSCRIPT RIGHT PARENTHESIS
+208A ; [*069D.0020.0015] # SUBSCRIPT PLUS SIGN
+208B ; [*06A8.0020.0015] # SUBSCRIPT MINUS
+208C ; [*06A2.0020.0015] # SUBSCRIPT EQUALS SIGN
+208D ; [*0334.0020.0015] # SUBSCRIPT LEFT PARENTHESIS
+208E ; [*0335.0020.0015] # SUBSCRIPT RIGHT PARENTHESIS
+2104 ; [*060D.0020.0002] # CENTRE LINE SYMBOL
+2108 ; [*060E.0020.0002] # SCRUPLE
+2114 ; [*060F.0020.0002] # L B BAR SYMBOL
+2117 ; [*0610.0020.0002] # SOUND RECORDING COPYRIGHT
+2118 ; [*0611.0020.0002] # SCRIPT CAPITAL P
+211E ; [*0612.0020.0002] # PRESCRIPTION TAKE
+211F ; [*0613.0020.0002] # RESPONSE
+2123 ; [*0614.0020.0002] # VERSICLE
+2125 ; [*0615.0020.0002] # OUNCE SIGN
+2127 ; [*0616.0020.0002] # INVERTED OHM SIGN
+2129 ; [*0617.0020.0002] # TURNED GREEK SMALL LETTER IOTA
+212E ; [*0618.0020.0002] # ESTIMATED SYMBOL
+213A ; [*0619.0020.0002] # ROTATED CAPITAL Q
+2140 ; [*069C.0020.0005] # DOUBLE-STRUCK N-ARY SUMMATION
+2141 ; [*061A.0020.0002] # TURNED SANS-SERIF CAPITAL G
+2142 ; [*061B.0020.0002] # TURNED SANS-SERIF CAPITAL L
+2143 ; [*061C.0020.0002] # REVERSED SANS-SERIF CAPITAL L
+2144 ; [*061D.0020.0002] # TURNED SANS-SERIF CAPITAL Y
+214A ; [*061E.0020.0002] # PROPERTY LINE
+214B ; [*0738.0020.0002] # TURNED AMPERSAND
+214C ; [*061F.0020.0002] # PER SIGN
+214F ; [*0620.0020.0002] # SYMBOL FOR SAMARITAN SOURCE
+2180 ; [*1E6D.0020.0002] # ROMAN NUMERAL ONE THOUSAND C D
+2181 ; [*1E6E.0020.0002] # ROMAN NUMERAL FIVE THOUSAND
+2182 ; [*1E6F.0020.0002] # ROMAN NUMERAL TEN THOUSAND
+2186 ; [*1E70.0020.0002] # ROMAN NUMERAL FIFTY EARLY FORM
+2187 ; [*1E71.0020.0002] # ROMAN NUMERAL FIFTY THOUSAND
+2188 ; [*1E72.0020.0002] # ROMAN NUMERAL ONE HUNDRED THOUSAND
+218A ; [*0621.0020.0002] # TURNED DIGIT TWO
+218B ; [*0622.0020.0002] # TURNED DIGIT THREE
+2190 ; [*0623.0020.0002] # LEFTWARDS ARROW
+2191 ; [*0625.0020.0002] # UPWARDS ARROW
+2192 ; [*0624.0020.0002] # RIGHTWARDS ARROW
+2193 ; [*0626.0020.0002] # DOWNWARDS ARROW
+2194 ; [*0627.0020.0002] # LEFT RIGHT ARROW
+2195 ; [*0628.0020.0002] # UP DOWN ARROW
+2196 ; [*0629.0020.0002] # NORTH WEST ARROW
+2197 ; [*062A.0020.0002] # NORTH EAST ARROW
+2198 ; [*062B.0020.0002] # SOUTH EAST ARROW
+2199 ; [*062C.0020.0002] # SOUTH WEST ARROW
+219A ; [*0623.0020.0002][.0000.002F.0002] # LEFTWARDS ARROW WITH STROKE
+219B ; [*0624.0020.0002][.0000.002F.0002] # RIGHTWARDS ARROW WITH STROKE
+219C ; [*062D.0020.0002] # LEFTWARDS WAVE ARROW
+219D ; [*062E.0020.0002] # RIGHTWARDS WAVE ARROW
+219E ; [*062F.0020.0002] # LEFTWARDS TWO HEADED ARROW
+219F ; [*0630.0020.0002] # UPWARDS TWO HEADED ARROW
+21A0 ; [*0631.0020.0002] # RIGHTWARDS TWO HEADED ARROW
+21A1 ; [*0632.0020.0002] # DOWNWARDS TWO HEADED ARROW
+21A2 ; [*0633.0020.0002] # LEFTWARDS ARROW WITH TAIL
+21A3 ; [*0634.0020.0002] # RIGHTWARDS ARROW WITH TAIL
+21A4 ; [*0635.0020.0002] # LEFTWARDS ARROW FROM BAR
+21A5 ; [*0636.0020.0002] # UPWARDS ARROW FROM BAR
+21A6 ; [*0637.0020.0002] # RIGHTWARDS ARROW FROM BAR
+21A7 ; [*0638.0020.0002] # DOWNWARDS ARROW FROM BAR
+21A8 ; [*0639.0020.0002] # UP DOWN ARROW WITH BASE
+21A9 ; [*063A.0020.0002] # LEFTWARDS ARROW WITH HOOK
+21AA ; [*063B.0020.0002] # RIGHTWARDS ARROW WITH HOOK
+21AB ; [*063C.0020.0002] # LEFTWARDS ARROW WITH LOOP
+21AC ; [*063D.0020.0002] # RIGHTWARDS ARROW WITH LOOP
+21AD ; [*063E.0020.0002] # LEFT RIGHT WAVE ARROW
+21AE ; [*0627.0020.0002][.0000.002F.0002] # LEFT RIGHT ARROW WITH STROKE
+21AF ; [*063F.0020.0002] # DOWNWARDS ZIGZAG ARROW
+21B0 ; [*0640.0020.0002] # UPWARDS ARROW WITH TIP LEFTWARDS
+21B1 ; [*0641.0020.0002] # UPWARDS ARROW WITH TIP RIGHTWARDS
+21B2 ; [*0642.0020.0002] # DOWNWARDS ARROW WITH TIP LEFTWARDS
+21B3 ; [*0643.0020.0002] # DOWNWARDS ARROW WITH TIP RIGHTWARDS
+21B4 ; [*0644.0020.0002] # RIGHTWARDS ARROW WITH CORNER DOWNWARDS
+21B5 ; [*0645.0020.0002] # DOWNWARDS ARROW WITH CORNER LEFTWARDS
+21B6 ; [*0646.0020.0002] # ANTICLOCKWISE TOP SEMICIRCLE ARROW
+21B7 ; [*0647.0020.0002] # CLOCKWISE TOP SEMICIRCLE ARROW
+21B8 ; [*0648.0020.0002] # NORTH WEST ARROW TO LONG BAR
+21B9 ; [*0649.0020.0002] # LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR
+21BA ; [*064A.0020.0002] # ANTICLOCKWISE OPEN CIRCLE ARROW
+21BB ; [*064B.0020.0002] # CLOCKWISE OPEN CIRCLE ARROW
+21BC ; [*064C.0020.0002] # LEFTWARDS HARPOON WITH BARB UPWARDS
+21BD ; [*064D.0020.0002] # LEFTWARDS HARPOON WITH BARB DOWNWARDS
+21BE ; [*064E.0020.0002] # UPWARDS HARPOON WITH BARB RIGHTWARDS
+21BF ; [*064F.0020.0002] # UPWARDS HARPOON WITH BARB LEFTWARDS
+21C0 ; [*0650.0020.0002] # RIGHTWARDS HARPOON WITH BARB UPWARDS
+21C1 ; [*0651.0020.0002] # RIGHTWARDS HARPOON WITH BARB DOWNWARDS
+21C2 ; [*0652.0020.0002] # DOWNWARDS HARPOON WITH BARB RIGHTWARDS
+21C3 ; [*0653.0020.0002] # DOWNWARDS HARPOON WITH BARB LEFTWARDS
+21C4 ; [*0654.0020.0002] # RIGHTWARDS ARROW OVER LEFTWARDS ARROW
+21C5 ; [*0655.0020.0002] # UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW
+21C6 ; [*0656.0020.0002] # LEFTWARDS ARROW OVER RIGHTWARDS ARROW
+21C7 ; [*0657.0020.0002] # LEFTWARDS PAIRED ARROWS
+21C8 ; [*0658.0020.0002] # UPWARDS PAIRED ARROWS
+21C9 ; [*0659.0020.0002] # RIGHTWARDS PAIRED ARROWS
+21CA ; [*065A.0020.0002] # DOWNWARDS PAIRED ARROWS
+21CB ; [*065B.0020.0002] # LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON
+21CC ; [*065C.0020.0002] # RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON
+21CD ; [*065D.0020.0002][.0000.002F.0002] # LEFTWARDS DOUBLE ARROW WITH STROKE
+21CE ; [*0661.0020.0002][.0000.002F.0002] # LEFT RIGHT DOUBLE ARROW WITH STROKE
+21CF ; [*065F.0020.0002][.0000.002F.0002] # RIGHTWARDS DOUBLE ARROW WITH STROKE
+21D0 ; [*065D.0020.0002] # LEFTWARDS DOUBLE ARROW
+21D1 ; [*065E.0020.0002] # UPWARDS DOUBLE ARROW
+21D2 ; [*065F.0020.0002] # RIGHTWARDS DOUBLE ARROW
+21D3 ; [*0660.0020.0002] # DOWNWARDS DOUBLE ARROW
+21D4 ; [*0661.0020.0002] # LEFT RIGHT DOUBLE ARROW
+21D5 ; [*0662.0020.0002] # UP DOWN DOUBLE ARROW
+21D6 ; [*0663.0020.0002] # NORTH WEST DOUBLE ARROW
+21D7 ; [*0664.0020.0002] # NORTH EAST DOUBLE ARROW
+21D8 ; [*0665.0020.0002] # SOUTH EAST DOUBLE ARROW
+21D9 ; [*0666.0020.0002] # SOUTH WEST DOUBLE ARROW
+21DA ; [*0667.0020.0002] # LEFTWARDS TRIPLE ARROW
+21DB ; [*0668.0020.0002] # RIGHTWARDS TRIPLE ARROW
+21DC ; [*0669.0020.0002] # LEFTWARDS SQUIGGLE ARROW
+21DD ; [*066A.0020.0002] # RIGHTWARDS SQUIGGLE ARROW
+21DE ; [*066B.0020.0002] # UPWARDS ARROW WITH DOUBLE STROKE
+21DF ; [*066C.0020.0002] # DOWNWARDS ARROW WITH DOUBLE STROKE
+21E0 ; [*066D.0020.0002] # LEFTWARDS DASHED ARROW
+21E1 ; [*066E.0020.0002] # UPWARDS DASHED ARROW
+21E2 ; [*066F.0020.0002] # RIGHTWARDS DASHED ARROW
+21E3 ; [*0670.0020.0002] # DOWNWARDS DASHED ARROW
+21E4 ; [*0671.0020.0002] # LEFTWARDS ARROW TO BAR
+21E5 ; [*0672.0020.0002] # RIGHTWARDS ARROW TO BAR
+21E6 ; [*0673.0020.0002] # LEFTWARDS WHITE ARROW
+21E7 ; [*0674.0020.0002] # UPWARDS WHITE ARROW
+21E8 ; [*0675.0020.0002] # RIGHTWARDS WHITE ARROW
+21E9 ; [*0676.0020.0002] # DOWNWARDS WHITE ARROW
+21EA ; [*0677.0020.0002] # UPWARDS WHITE ARROW FROM BAR
+21EB ; [*0678.0020.0002] # UPWARDS WHITE ARROW ON PEDESTAL
+21EC ; [*0679.0020.0002] # UPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BAR
+21ED ; [*067A.0020.0002] # UPWARDS WHITE ARROW ON PEDESTAL WITH VERTICAL BAR
+21EE ; [*067B.0020.0002] # UPWARDS WHITE DOUBLE ARROW
+21EF ; [*067C.0020.0002] # UPWARDS WHITE DOUBLE ARROW ON PEDESTAL
+21F0 ; [*067D.0020.0002] # RIGHTWARDS WHITE ARROW FROM WALL
+21F1 ; [*067E.0020.0002] # NORTH WEST ARROW TO CORNER
+21F2 ; [*067F.0020.0002] # SOUTH EAST ARROW TO CORNER
+21F3 ; [*0680.0020.0002] # UP DOWN WHITE ARROW
+21F4 ; [*0681.0020.0002] # RIGHT ARROW WITH SMALL CIRCLE
+21F5 ; [*0682.0020.0002] # DOWNWARDS ARROW LEFTWARDS OF UPWARDS ARROW
+21F6 ; [*0683.0020.0002] # THREE RIGHTWARDS ARROWS
+21F7 ; [*0684.0020.0002] # LEFTWARDS ARROW WITH VERTICAL STROKE
+21F8 ; [*0685.0020.0002] # RIGHTWARDS ARROW WITH VERTICAL STROKE
+21F9 ; [*0686.0020.0002] # LEFT RIGHT ARROW WITH VERTICAL STROKE
+21FA ; [*0687.0020.0002] # LEFTWARDS ARROW WITH DOUBLE VERTICAL STROKE
+21FB ; [*0688.0020.0002] # RIGHTWARDS ARROW WITH DOUBLE VERTICAL STROKE
+21FC ; [*0689.0020.0002] # LEFT RIGHT ARROW WITH DOUBLE VERTICAL STROKE
+21FD ; [*068A.0020.0002] # LEFTWARDS OPEN-HEADED ARROW
+21FE ; [*068B.0020.0002] # RIGHTWARDS OPEN-HEADED ARROW
+21FF ; [*068C.0020.0002] # LEFT RIGHT OPEN-HEADED ARROW
+2200 ; [*068D.0020.0002] # FOR ALL
+2201 ; [*068E.0020.0002] # COMPLEMENT
+2202 ; [*068F.0020.0002] # PARTIAL DIFFERENTIAL
+2203 ; [*0690.0020.0002] # THERE EXISTS
+2204 ; [*0690.0020.0002][.0000.002F.0002] # THERE DOES NOT EXIST
+2205 ; [*0691.0020.0002] # EMPTY SET
+2206 ; [*0692.0020.0002] # INCREMENT
+2207 ; [*0693.0020.0002] # NABLA
+2208 ; [*0694.0020.0002] # ELEMENT OF
+2209 ; [*0694.0020.0002][.0000.002F.0002] # NOT AN ELEMENT OF
+220A ; [*0695.0020.0002] # SMALL ELEMENT OF
+220B ; [*0696.0020.0002] # CONTAINS AS MEMBER
+220C ; [*0696.0020.0002][.0000.002F.0002] # DOES NOT CONTAIN AS MEMBER
+220D ; [*0697.0020.0002] # SMALL CONTAINS AS MEMBER
+220E ; [*0699.0020.0002] # END OF PROOF
+220F ; [*069A.0020.0002] # N-ARY PRODUCT
+2210 ; [*069B.0020.0002] # N-ARY COPRODUCT
+2211 ; [*069C.0020.0002] # N-ARY SUMMATION
+2212 ; [*06A8.0020.0002] # MINUS SIGN
+2213 ; [*06AA.0020.0002] # MINUS-OR-PLUS SIGN
+2214 ; [*06AB.0020.0002] # DOT PLUS
+2215 ; [*06AC.0020.0002] # DIVISION SLASH
+2216 ; [*06AE.0020.0002] # SET MINUS
+2217 ; [*06AF.0020.0002] # ASTERISK OPERATOR
+2218 ; [*06B0.0020.0002] # RING OPERATOR
+2219 ; [*06B1.0020.0002] # BULLET OPERATOR
+221A ; [*06B2.0020.0002] # SQUARE ROOT
+221B ; [*06B3.0020.0002] # CUBE ROOT
+221C ; [*06B5.0020.0002] # FOURTH ROOT
+221D ; [*06B7.0020.0002] # PROPORTIONAL TO
+221E ; [*06B8.0020.0002] # INFINITY
+221F ; [*06B9.0020.0002] # RIGHT ANGLE
+2220 ; [*06BA.0020.0002] # ANGLE
+2221 ; [*06BB.0020.0002] # MEASURED ANGLE
+2222 ; [*06BC.0020.0002] # SPHERICAL ANGLE
+2223 ; [*06BD.0020.0002] # DIVIDES
+2224 ; [*06BD.0020.0002][.0000.002F.0002] # DOES NOT DIVIDE
+2225 ; [*06BE.0020.0002] # PARALLEL TO
+2226 ; [*06BE.0020.0002][.0000.002F.0002] # NOT PARALLEL TO
+2227 ; [*06BF.0020.0002] # LOGICAL AND
+2228 ; [*06C0.0020.0002] # LOGICAL OR
+2229 ; [*06C1.0020.0002] # INTERSECTION
+222A ; [*06C2.0020.0002] # UNION
+222B ; [*06C3.0020.0002] # INTEGRAL
+222C ; [*06C3.0020.0004][*06C3.0020.0004] # DOUBLE INTEGRAL
+222D ; [*06C3.0020.0004][*06C3.0020.0004][*06C3.0020.0004] # TRIPLE INTEGRAL
+222E ; [*06C4.0020.0002] # CONTOUR INTEGRAL
+222F ; [*06C4.0020.0004][*06C4.0020.0004] # SURFACE INTEGRAL
+2230 ; [*06C4.0020.0004][*06C4.0020.0004][*06C4.0020.0004] # VOLUME INTEGRAL
+2231 ; [*06C5.0020.0002] # CLOCKWISE INTEGRAL
+2232 ; [*06C6.0020.0002] # CLOCKWISE CONTOUR INTEGRAL
+2233 ; [*06C7.0020.0002] # ANTICLOCKWISE CONTOUR INTEGRAL
+2234 ; [*06C8.0020.0002] # THEREFORE
+2235 ; [*06C9.0020.0002] # BECAUSE
+2236 ; [*06CA.0020.0002] # RATIO
+2237 ; [*06CB.0020.0002] # PROPORTION
+2238 ; [*06CC.0020.0002] # DOT MINUS
+2239 ; [*06CD.0020.0002] # EXCESS
+223A ; [*06CE.0020.0002] # GEOMETRIC PROPORTION
+223B ; [*06CF.0020.0002] # HOMOTHETIC
+223C ; [*06D0.0020.0002] # TILDE OPERATOR
+223D ; [*06D1.0020.0002] # REVERSED TILDE
+223E ; [*06D2.0020.0002] # INVERTED LAZY S
+223F ; [*06D3.0020.0002] # SINE WAVE
+2240 ; [*06D4.0020.0002] # WREATH PRODUCT
+2241 ; [*06D0.0020.0002][.0000.002F.0002] # NOT TILDE
+2242 ; [*06D5.0020.0002] # MINUS TILDE
+2243 ; [*06D6.0020.0002] # ASYMPTOTICALLY EQUAL TO
+2244 ; [*06D6.0020.0002][.0000.002F.0002] # NOT ASYMPTOTICALLY EQUAL TO
+2245 ; [*06D7.0020.0002] # APPROXIMATELY EQUAL TO
+2246 ; [*06D8.0020.0002] # APPROXIMATELY BUT NOT ACTUALLY EQUAL TO
+2247 ; [*06D7.0020.0002][.0000.002F.0002] # NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO
+2248 ; [*06D9.0020.0002] # ALMOST EQUAL TO
+2249 ; [*06D9.0020.0002][.0000.002F.0002] # NOT ALMOST EQUAL TO
+224A ; [*06DA.0020.0002] # ALMOST EQUAL OR EQUAL TO
+224B ; [*06DB.0020.0002] # TRIPLE TILDE
+224C ; [*06DC.0020.0002] # ALL EQUAL TO
+224D ; [*06DD.0020.0002] # EQUIVALENT TO
+224E ; [*06DE.0020.0002] # GEOMETRICALLY EQUIVALENT TO
+224F ; [*06DF.0020.0002] # DIFFERENCE BETWEEN
+2250 ; [*06E0.0020.0002] # APPROACHES THE LIMIT
+2251 ; [*06E1.0020.0002] # GEOMETRICALLY EQUAL TO
+2252 ; [*06E2.0020.0002] # APPROXIMATELY EQUAL TO OR THE IMAGE OF
+2253 ; [*06E3.0020.0002] # IMAGE OF OR APPROXIMATELY EQUAL TO
+2254 ; [*06E4.0020.0002] # COLON EQUALS
+2255 ; [*06E5.0020.0002] # EQUALS COLON
+2256 ; [*06E6.0020.0002] # RING IN EQUAL TO
+2257 ; [*06E7.0020.0002] # RING EQUAL TO
+2258 ; [*06E8.0020.0002] # CORRESPONDS TO
+2259 ; [*06E9.0020.0002] # ESTIMATES
+225A ; [*06EA.0020.0002] # EQUIANGULAR TO
+225B ; [*06EB.0020.0002] # STAR EQUALS
+225C ; [*06EC.0020.0002] # DELTA EQUAL TO
+225D ; [*06ED.0020.0002] # EQUAL TO BY DEFINITION
+225E ; [*06EE.0020.0002] # MEASURED BY
+225F ; [*06EF.0020.0002] # QUESTIONED EQUAL TO
+2260 ; [*06A2.0020.0002][.0000.002F.0002] # NOT EQUAL TO
+2261 ; [*06F0.0020.0002] # IDENTICAL TO
+2262 ; [*06F0.0020.0002][.0000.002F.0002] # NOT IDENTICAL TO
+2263 ; [*06F1.0020.0002] # STRICTLY EQUIVALENT TO
+2264 ; [*06F2.0020.0002] # LESS-THAN OR EQUAL TO
+2265 ; [*06F3.0020.0002] # GREATER-THAN OR EQUAL TO
+2266 ; [*06F4.0020.0002] # LESS-THAN OVER EQUAL TO
+2267 ; [*06F5.0020.0002] # GREATER-THAN OVER EQUAL TO
+2268 ; [*06F6.0020.0002] # LESS-THAN BUT NOT EQUAL TO
+2269 ; [*06F7.0020.0002] # GREATER-THAN BUT NOT EQUAL TO
+226A ; [*06F8.0020.0002] # MUCH LESS-THAN
+226B ; [*06F9.0020.0002] # MUCH GREATER-THAN
+226C ; [*06FA.0020.0002] # BETWEEN
+226D ; [*06DD.0020.0002][.0000.002F.0002] # NOT EQUIVALENT TO
+226E ; [*06A1.0020.0002][.0000.002F.0002] # NOT LESS-THAN
+226F ; [*06A3.0020.0002][.0000.002F.0002] # NOT GREATER-THAN
+2270 ; [*06F2.0020.0002][.0000.002F.0002] # NEITHER LESS-THAN NOR EQUAL TO
+2271 ; [*06F3.0020.0002][.0000.002F.0002] # NEITHER GREATER-THAN NOR EQUAL TO
+2272 ; [*06FB.0020.0002] # LESS-THAN OR EQUIVALENT TO
+2273 ; [*06FC.0020.0002] # GREATER-THAN OR EQUIVALENT TO
+2274 ; [*06FB.0020.0002][.0000.002F.0002] # NEITHER LESS-THAN NOR EQUIVALENT TO
+2275 ; [*06FC.0020.0002][.0000.002F.0002] # NEITHER GREATER-THAN NOR EQUIVALENT TO
+2276 ; [*06FD.0020.0002] # LESS-THAN OR GREATER-THAN
+2277 ; [*06FE.0020.0002] # GREATER-THAN OR LESS-THAN
+2278 ; [*06FD.0020.0002][.0000.002F.0002] # NEITHER LESS-THAN NOR GREATER-THAN
+2279 ; [*06FE.0020.0002][.0000.002F.0002] # NEITHER GREATER-THAN NOR LESS-THAN
+227A ; [*06FF.0020.0002] # PRECEDES
+227B ; [*0700.0020.0002] # SUCCEEDS
+227C ; [*0701.0020.0002] # PRECEDES OR EQUAL TO
+227D ; [*0702.0020.0002] # SUCCEEDS OR EQUAL TO
+227E ; [*0703.0020.0002] # PRECEDES OR EQUIVALENT TO
+227F ; [*0704.0020.0002] # SUCCEEDS OR EQUIVALENT TO
+2280 ; [*06FF.0020.0002][.0000.002F.0002] # DOES NOT PRECEDE
+2281 ; [*0700.0020.0002][.0000.002F.0002] # DOES NOT SUCCEED
+2282 ; [*0705.0020.0002] # SUBSET OF
+2283 ; [*0706.0020.0002] # SUPERSET OF
+2284 ; [*0705.0020.0002][.0000.002F.0002] # NOT A SUBSET OF
+2285 ; [*0706.0020.0002][.0000.002F.0002] # NOT A SUPERSET OF
+2286 ; [*0707.0020.0002] # SUBSET OF OR EQUAL TO
+2287 ; [*0708.0020.0002] # SUPERSET OF OR EQUAL TO
+2288 ; [*0707.0020.0002][.0000.002F.0002] # NEITHER A SUBSET OF NOR EQUAL TO
+2289 ; [*0708.0020.0002][.0000.002F.0002] # NEITHER A SUPERSET OF NOR EQUAL TO
+228A ; [*0709.0020.0002] # SUBSET OF WITH NOT EQUAL TO
+228B ; [*070A.0020.0002] # SUPERSET OF WITH NOT EQUAL TO
+228C ; [*070B.0020.0002] # MULTISET
+228D ; [*070C.0020.0002] # MULTISET MULTIPLICATION
+228E ; [*070D.0020.0002] # MULTISET UNION
+228F ; [*070E.0020.0002] # SQUARE IMAGE OF
+2290 ; [*070F.0020.0002] # SQUARE ORIGINAL OF
+2291 ; [*0710.0020.0002] # SQUARE IMAGE OF OR EQUAL TO
+2292 ; [*0711.0020.0002] # SQUARE ORIGINAL OF OR EQUAL TO
+2293 ; [*0712.0020.0002] # SQUARE CAP
+2294 ; [*0713.0020.0002] # SQUARE CUP
+2295 ; [*0714.0020.0002] # CIRCLED PLUS
+2296 ; [*0715.0020.0002] # CIRCLED MINUS
+2297 ; [*0716.0020.0002] # CIRCLED TIMES
+2298 ; [*0717.0020.0002] # CIRCLED DIVISION SLASH
+2299 ; [*0718.0020.0002] # CIRCLED DOT OPERATOR
+229A ; [*0719.0020.0002] # CIRCLED RING OPERATOR
+229B ; [*071A.0020.0002] # CIRCLED ASTERISK OPERATOR
+229C ; [*071B.0020.0002] # CIRCLED EQUALS
+229D ; [*071C.0020.0002] # CIRCLED DASH
+229E ; [*071D.0020.0002] # SQUARED PLUS
+229F ; [*071E.0020.0002] # SQUARED MINUS
+22A0 ; [*071F.0020.0002] # SQUARED TIMES
+22A1 ; [*0720.0020.0002] # SQUARED DOT OPERATOR
+22A2 ; [*0721.0020.0002] # RIGHT TACK
+22A3 ; [*0722.0020.0002] # LEFT TACK
+22A4 ; [*0723.0020.0002] # DOWN TACK
+22A5 ; [*0724.0020.0002] # UP TACK
+22A6 ; [*0725.0020.0002] # ASSERTION
+22A7 ; [*0726.0020.0002] # MODELS
+22A8 ; [*0727.0020.0002] # TRUE
+22A9 ; [*0728.0020.0002] # FORCES
+22AA ; [*0729.0020.0002] # TRIPLE VERTICAL BAR RIGHT TURNSTILE
+22AB ; [*072A.0020.0002] # DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE
+22AC ; [*0721.0020.0002][.0000.002F.0002] # DOES NOT PROVE
+22AD ; [*0727.0020.0002][.0000.002F.0002] # NOT TRUE
+22AE ; [*0728.0020.0002][.0000.002F.0002] # DOES NOT FORCE
+22AF ; [*072A.0020.0002][.0000.002F.0002] # NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE
+22B0 ; [*072B.0020.0002] # PRECEDES UNDER RELATION
+22B1 ; [*072C.0020.0002] # SUCCEEDS UNDER RELATION
+22B2 ; [*072D.0020.0002] # NORMAL SUBGROUP OF
+22B3 ; [*072E.0020.0002] # CONTAINS AS NORMAL SUBGROUP
+22B4 ; [*072F.0020.0002] # NORMAL SUBGROUP OF OR EQUAL TO
+22B5 ; [*0730.0020.0002] # CONTAINS AS NORMAL SUBGROUP OR EQUAL TO
+22B6 ; [*0731.0020.0002] # ORIGINAL OF
+22B7 ; [*0732.0020.0002] # IMAGE OF
+22B8 ; [*0733.0020.0002] # MULTIMAP
+22B9 ; [*0734.0020.0002] # HERMITIAN CONJUGATE MATRIX
+22BA ; [*0735.0020.0002] # INTERCALATE
+22BB ; [*0736.0020.0002] # XOR
+22BC ; [*0737.0020.0002] # NAND
+22BD ; [*0739.0020.0002] # NOR
+22BE ; [*073A.0020.0002] # RIGHT ANGLE WITH ARC
+22BF ; [*073B.0020.0002] # RIGHT TRIANGLE
+22C0 ; [*073C.0020.0002] # N-ARY LOGICAL AND
+22C1 ; [*073D.0020.0002] # N-ARY LOGICAL OR
+22C2 ; [*073E.0020.0002] # N-ARY INTERSECTION
+22C3 ; [*073F.0020.0002] # N-ARY UNION
+22C4 ; [*0740.0020.0002] # DIAMOND OPERATOR
+22C5 ; [*0741.0020.0002] # DOT OPERATOR
+22C6 ; [*0742.0020.0002] # STAR OPERATOR
+22C7 ; [*0743.0020.0002] # DIVISION TIMES
+22C8 ; [*0744.0020.0002] # BOWTIE
+22C9 ; [*0745.0020.0002] # LEFT NORMAL FACTOR SEMIDIRECT PRODUCT
+22CA ; [*0746.0020.0002] # RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT
+22CB ; [*0747.0020.0002] # LEFT SEMIDIRECT PRODUCT
+22CC ; [*0748.0020.0002] # RIGHT SEMIDIRECT PRODUCT
+22CD ; [*0749.0020.0002] # REVERSED TILDE EQUALS
+22CE ; [*074A.0020.0002] # CURLY LOGICAL OR
+22CF ; [*074B.0020.0002] # CURLY LOGICAL AND
+22D0 ; [*074C.0020.0002] # DOUBLE SUBSET
+22D1 ; [*074D.0020.0002] # DOUBLE SUPERSET
+22D2 ; [*074E.0020.0002] # DOUBLE INTERSECTION
+22D3 ; [*074F.0020.0002] # DOUBLE UNION
+22D4 ; [*0750.0020.0002] # PITCHFORK
+22D5 ; [*0751.0020.0002] # EQUAL AND PARALLEL TO
+22D6 ; [*0752.0020.0002] # LESS-THAN WITH DOT
+22D7 ; [*0753.0020.0002] # GREATER-THAN WITH DOT
+22D8 ; [*0754.0020.0002] # VERY MUCH LESS-THAN
+22D9 ; [*0755.0020.0002] # VERY MUCH GREATER-THAN
+22DA ; [*0756.0020.0002] # LESS-THAN EQUAL TO OR GREATER-THAN
+22DB ; [*0757.0020.0002] # GREATER-THAN EQUAL TO OR LESS-THAN
+22DC ; [*0758.0020.0002] # EQUAL TO OR LESS-THAN
+22DD ; [*0759.0020.0002] # EQUAL TO OR GREATER-THAN
+22DE ; [*075A.0020.0002] # EQUAL TO OR PRECEDES
+22DF ; [*075B.0020.0002] # EQUAL TO OR SUCCEEDS
+22E0 ; [*0701.0020.0002][.0000.002F.0002] # DOES NOT PRECEDE OR EQUAL
+22E1 ; [*0702.0020.0002][.0000.002F.0002] # DOES NOT SUCCEED OR EQUAL
+22E2 ; [*0710.0020.0002][.0000.002F.0002] # NOT SQUARE IMAGE OF OR EQUAL TO
+22E3 ; [*0711.0020.0002][.0000.002F.0002] # NOT SQUARE ORIGINAL OF OR EQUAL TO
+22E4 ; [*075C.0020.0002] # SQUARE IMAGE OF OR NOT EQUAL TO
+22E5 ; [*075D.0020.0002] # SQUARE ORIGINAL OF OR NOT EQUAL TO
+22E6 ; [*075E.0020.0002] # LESS-THAN BUT NOT EQUIVALENT TO
+22E7 ; [*075F.0020.0002] # GREATER-THAN BUT NOT EQUIVALENT TO
+22E8 ; [*0760.0020.0002] # PRECEDES BUT NOT EQUIVALENT TO
+22E9 ; [*0761.0020.0002] # SUCCEEDS BUT NOT EQUIVALENT TO
+22EA ; [*072D.0020.0002][.0000.002F.0002] # NOT NORMAL SUBGROUP OF
+22EB ; [*072E.0020.0002][.0000.002F.0002] # DOES NOT CONTAIN AS NORMAL SUBGROUP
+22EC ; [*072F.0020.0002][.0000.002F.0002] # NOT NORMAL SUBGROUP OF OR EQUAL TO
+22ED ; [*0730.0020.0002][.0000.002F.0002] # DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL
+22EE ; [*0762.0020.0002] # VERTICAL ELLIPSIS
+22EF ; [*0763.0020.0002] # MIDLINE HORIZONTAL ELLIPSIS
+22F0 ; [*0764.0020.0002] # UP RIGHT DIAGONAL ELLIPSIS
+22F1 ; [*0765.0020.0002] # DOWN RIGHT DIAGONAL ELLIPSIS
+22F2 ; [*0766.0020.0002] # ELEMENT OF WITH LONG HORIZONTAL STROKE
+22F3 ; [*0767.0020.0002] # ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
+22F4 ; [*0768.0020.0002] # SMALL ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
+22F5 ; [*0769.0020.0002] # ELEMENT OF WITH DOT ABOVE
+22F6 ; [*076A.0020.0002] # ELEMENT OF WITH OVERBAR
+22F7 ; [*076B.0020.0002] # SMALL ELEMENT OF WITH OVERBAR
+22F8 ; [*076C.0020.0002] # ELEMENT OF WITH UNDERBAR
+22F9 ; [*076D.0020.0002] # ELEMENT OF WITH TWO HORIZONTAL STROKES
+22FA ; [*076E.0020.0002] # CONTAINS WITH LONG HORIZONTAL STROKE
+22FB ; [*076F.0020.0002] # CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
+22FC ; [*0770.0020.0002] # SMALL CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
+22FD ; [*0771.0020.0002] # CONTAINS WITH OVERBAR
+22FE ; [*0772.0020.0002] # SMALL CONTAINS WITH OVERBAR
+22FF ; [*0773.0020.0002] # Z NOTATION BAG MEMBERSHIP
+2300 ; [*0774.0020.0002] # DIAMETER SIGN
+2301 ; [*0775.0020.0002] # ELECTRIC ARROW
+2302 ; [*0776.0020.0002] # HOUSE
+2303 ; [*0777.0020.0002] # UP ARROWHEAD
+2304 ; [*0778.0020.0002] # DOWN ARROWHEAD
+2305 ; [*0779.0020.0002] # PROJECTIVE
+2306 ; [*077A.0020.0002] # PERSPECTIVE
+2307 ; [*077B.0020.0002] # WAVY LINE
+2308 ; [*0342.0020.0002] # LEFT CEILING
+2309 ; [*0343.0020.0002] # RIGHT CEILING
+230A ; [*0344.0020.0002] # LEFT FLOOR
+230B ; [*0345.0020.0002] # RIGHT FLOOR
+230C ; [*077C.0020.0002] # BOTTOM RIGHT CROP
+230D ; [*077D.0020.0002] # BOTTOM LEFT CROP
+230E ; [*077E.0020.0002] # TOP RIGHT CROP
+230F ; [*077F.0020.0002] # TOP LEFT CROP
+2310 ; [*0780.0020.0002] # REVERSED NOT SIGN
+2311 ; [*0781.0020.0002] # SQUARE LOZENGE
+2312 ; [*0782.0020.0002] # ARC
+2313 ; [*0783.0020.0002] # SEGMENT
+2314 ; [*0784.0020.0002] # SECTOR
+2315 ; [*0785.0020.0002] # TELEPHONE RECORDER
+2316 ; [*0786.0020.0002] # POSITION INDICATOR
+2317 ; [*0787.0020.0002] # VIEWDATA SQUARE
+2318 ; [*0788.0020.0002] # PLACE OF INTEREST SIGN
+2319 ; [*0789.0020.0002] # TURNED NOT SIGN
+231A ; [*078A.0020.0002] # WATCH
+231B ; [*078B.0020.0002] # HOURGLASS
+231C ; [*078C.0020.0002] # TOP LEFT CORNER
+231D ; [*078D.0020.0002] # TOP RIGHT CORNER
+231E ; [*078E.0020.0002] # BOTTOM LEFT CORNER
+231F ; [*078F.0020.0002] # BOTTOM RIGHT CORNER
+2320 ; [*0790.0020.0002] # TOP HALF INTEGRAL
+2321 ; [*0791.0020.0002] # BOTTOM HALF INTEGRAL
+2322 ; [*0792.0020.0002] # FROWN
+2323 ; [*0793.0020.0002] # SMILE
+2324 ; [*0794.0020.0002] # UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS
+2325 ; [*0795.0020.0002] # OPTION KEY
+2326 ; [*0796.0020.0002] # ERASE TO THE RIGHT
+2327 ; [*0797.0020.0002] # X IN A RECTANGLE BOX
+2328 ; [*0798.0020.0002] # KEYBOARD
+2329 ; [*0394.0020.0002] # LEFT-POINTING ANGLE BRACKET
+232A ; [*0395.0020.0002] # RIGHT-POINTING ANGLE BRACKET
+232B ; [*0799.0020.0002] # ERASE TO THE LEFT
+232C ; [*079A.0020.0002] # BENZENE RING
+232D ; [*079B.0020.0002] # CYLINDRICITY
+232E ; [*079C.0020.0002] # ALL AROUND-PROFILE
+232F ; [*079D.0020.0002] # SYMMETRY
+2330 ; [*079E.0020.0002] # TOTAL RUNOUT
+2331 ; [*079F.0020.0002] # DIMENSION ORIGIN
+2332 ; [*07A0.0020.0002] # CONICAL TAPER
+2333 ; [*07A1.0020.0002] # SLOPE
+2334 ; [*07A2.0020.0002] # COUNTERBORE
+2335 ; [*07A3.0020.0002] # COUNTERSINK
+2336 ; [*07A4.0020.0002] # APL FUNCTIONAL SYMBOL I-BEAM
+2337 ; [*07A5.0020.0002] # APL FUNCTIONAL SYMBOL SQUISH QUAD
+2338 ; [*07A6.0020.0002] # APL FUNCTIONAL SYMBOL QUAD EQUAL
+2339 ; [*07A7.0020.0002] # APL FUNCTIONAL SYMBOL QUAD DIVIDE
+233A ; [*07A8.0020.0002] # APL FUNCTIONAL SYMBOL QUAD DIAMOND
+233B ; [*07A9.0020.0002] # APL FUNCTIONAL SYMBOL QUAD JOT
+233C ; [*07AA.0020.0002] # APL FUNCTIONAL SYMBOL QUAD CIRCLE
+233D ; [*07AB.0020.0002] # APL FUNCTIONAL SYMBOL CIRCLE STILE
+233E ; [*07AC.0020.0002] # APL FUNCTIONAL SYMBOL CIRCLE JOT
+233F ; [*07AD.0020.0002] # APL FUNCTIONAL SYMBOL SLASH BAR
+2340 ; [*07AE.0020.0002] # APL FUNCTIONAL SYMBOL BACKSLASH BAR
+2341 ; [*07AF.0020.0002] # APL FUNCTIONAL SYMBOL QUAD SLASH
+2342 ; [*07B0.0020.0002] # APL FUNCTIONAL SYMBOL QUAD BACKSLASH
+2343 ; [*07B1.0020.0002] # APL FUNCTIONAL SYMBOL QUAD LESS-THAN
+2344 ; [*07B2.0020.0002] # APL FUNCTIONAL SYMBOL QUAD GREATER-THAN
+2345 ; [*07B3.0020.0002] # APL FUNCTIONAL SYMBOL LEFTWARDS VANE
+2346 ; [*07B4.0020.0002] # APL FUNCTIONAL SYMBOL RIGHTWARDS VANE
+2347 ; [*07B5.0020.0002] # APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW
+2348 ; [*07B6.0020.0002] # APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW
+2349 ; [*07B7.0020.0002] # APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH
+234A ; [*07B8.0020.0002] # APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR
+234B ; [*07B9.0020.0002] # APL FUNCTIONAL SYMBOL DELTA STILE
+234C ; [*07BA.0020.0002] # APL FUNCTIONAL SYMBOL QUAD DOWN CARET
+234D ; [*07BB.0020.0002] # APL FUNCTIONAL SYMBOL QUAD DELTA
+234E ; [*07BC.0020.0002] # APL FUNCTIONAL SYMBOL DOWN TACK JOT
+234F ; [*07BD.0020.0002] # APL FUNCTIONAL SYMBOL UPWARDS VANE
+2350 ; [*07BE.0020.0002] # APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW
+2351 ; [*07BF.0020.0002] # APL FUNCTIONAL SYMBOL UP TACK OVERBAR
+2352 ; [*07C0.0020.0002] # APL FUNCTIONAL SYMBOL DEL STILE
+2353 ; [*07C1.0020.0002] # APL FUNCTIONAL SYMBOL QUAD UP CARET
+2354 ; [*07C2.0020.0002] # APL FUNCTIONAL SYMBOL QUAD DEL
+2355 ; [*07C3.0020.0002] # APL FUNCTIONAL SYMBOL UP TACK JOT
+2356 ; [*07C4.0020.0002] # APL FUNCTIONAL SYMBOL DOWNWARDS VANE
+2357 ; [*07C5.0020.0002] # APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW
+2358 ; [*07C6.0020.0002] # APL FUNCTIONAL SYMBOL QUOTE UNDERBAR
+2359 ; [*07C7.0020.0002] # APL FUNCTIONAL SYMBOL DELTA UNDERBAR
+235A ; [*07C8.0020.0002] # APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR
+235B ; [*07C9.0020.0002] # APL FUNCTIONAL SYMBOL JOT UNDERBAR
+235C ; [*07CA.0020.0002] # APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR
+235D ; [*07CB.0020.0002] # APL FUNCTIONAL SYMBOL UP SHOE JOT
+235E ; [*07CC.0020.0002] # APL FUNCTIONAL SYMBOL QUOTE QUAD
+235F ; [*07CD.0020.0002] # APL FUNCTIONAL SYMBOL CIRCLE STAR
+2360 ; [*07CE.0020.0002] # APL FUNCTIONAL SYMBOL QUAD COLON
+2361 ; [*07CF.0020.0002] # APL FUNCTIONAL SYMBOL UP TACK DIAERESIS
+2362 ; [*07D0.0020.0002] # APL FUNCTIONAL SYMBOL DEL DIAERESIS
+2363 ; [*07D1.0020.0002] # APL FUNCTIONAL SYMBOL STAR DIAERESIS
+2364 ; [*07D2.0020.0002] # APL FUNCTIONAL SYMBOL JOT DIAERESIS
+2365 ; [*07D3.0020.0002] # APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS
+2366 ; [*07D4.0020.0002] # APL FUNCTIONAL SYMBOL DOWN SHOE STILE
+2367 ; [*07D5.0020.0002] # APL FUNCTIONAL SYMBOL LEFT SHOE STILE
+2368 ; [*07D6.0020.0002] # APL FUNCTIONAL SYMBOL TILDE DIAERESIS
+2369 ; [*07D7.0020.0002] # APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS
+236A ; [*07D8.0020.0002] # APL FUNCTIONAL SYMBOL COMMA BAR
+236B ; [*07D9.0020.0002] # APL FUNCTIONAL SYMBOL DEL TILDE
+236C ; [*07DA.0020.0002] # APL FUNCTIONAL SYMBOL ZILDE
+236D ; [*07DB.0020.0002] # APL FUNCTIONAL SYMBOL STILE TILDE
+236E ; [*07DC.0020.0002] # APL FUNCTIONAL SYMBOL SEMICOLON UNDERBAR
+236F ; [*07DD.0020.0002] # APL FUNCTIONAL SYMBOL QUAD NOT EQUAL
+2370 ; [*07DE.0020.0002] # APL FUNCTIONAL SYMBOL QUAD QUESTION
+2371 ; [*07DF.0020.0002] # APL FUNCTIONAL SYMBOL DOWN CARET TILDE
+2372 ; [*07E0.0020.0002] # APL FUNCTIONAL SYMBOL UP CARET TILDE
+2373 ; [*07E1.0020.0002] # APL FUNCTIONAL SYMBOL IOTA
+2374 ; [*07E2.0020.0002] # APL FUNCTIONAL SYMBOL RHO
+2375 ; [*07E3.0020.0002] # APL FUNCTIONAL SYMBOL OMEGA
+2376 ; [*07E4.0020.0002] # APL FUNCTIONAL SYMBOL ALPHA UNDERBAR
+2377 ; [*07E5.0020.0002] # APL FUNCTIONAL SYMBOL EPSILON UNDERBAR
+2378 ; [*07E6.0020.0002] # APL FUNCTIONAL SYMBOL IOTA UNDERBAR
+2379 ; [*07E7.0020.0002] # APL FUNCTIONAL SYMBOL OMEGA UNDERBAR
+237A ; [*07E8.0020.0002] # APL FUNCTIONAL SYMBOL ALPHA
+237B ; [*07E9.0020.0002] # NOT CHECK MARK
+237C ; [*07EA.0020.0002] # RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW
+237D ; [*07EB.0020.0002] # SHOULDERED OPEN BOX
+237E ; [*07EC.0020.0002] # BELL SYMBOL
+237F ; [*07ED.0020.0002] # VERTICAL LINE WITH MIDDLE DOT
+2380 ; [*07EE.0020.0002] # INSERTION SYMBOL
+2381 ; [*07EF.0020.0002] # CONTINUOUS UNDERLINE SYMBOL
+2382 ; [*07F0.0020.0002] # DISCONTINUOUS UNDERLINE SYMBOL
+2383 ; [*07F1.0020.0002] # EMPHASIS SYMBOL
+2384 ; [*07F2.0020.0002] # COMPOSITION SYMBOL
+2385 ; [*07F3.0020.0002] # WHITE SQUARE WITH CENTRE VERTICAL LINE
+2386 ; [*07F4.0020.0002] # ENTER SYMBOL
+2387 ; [*07F5.0020.0002] # ALTERNATIVE KEY SYMBOL
+2388 ; [*07F6.0020.0002] # HELM SYMBOL
+2389 ; [*07F7.0020.0002] # CIRCLED HORIZONTAL BAR WITH NOTCH
+238A ; [*07F8.0020.0002] # CIRCLED TRIANGLE DOWN
+238B ; [*07F9.0020.0002] # BROKEN CIRCLE WITH NORTHWEST ARROW
+238C ; [*07FA.0020.0002] # UNDO SYMBOL
+238D ; [*07FB.0020.0002] # MONOSTABLE SYMBOL
+238E ; [*07FC.0020.0002] # HYSTERESIS SYMBOL
+238F ; [*07FD.0020.0002] # OPEN-CIRCUIT-OUTPUT H-TYPE SYMBOL
+2390 ; [*07FE.0020.0002] # OPEN-CIRCUIT-OUTPUT L-TYPE SYMBOL
+2391 ; [*07FF.0020.0002] # PASSIVE-PULL-DOWN-OUTPUT SYMBOL
+2392 ; [*0800.0020.0002] # PASSIVE-PULL-UP-OUTPUT SYMBOL
+2393 ; [*0801.0020.0002] # DIRECT CURRENT SYMBOL FORM TWO
+2394 ; [*0802.0020.0002] # SOFTWARE-FUNCTION SYMBOL
+2395 ; [*0803.0020.0002] # APL FUNCTIONAL SYMBOL QUAD
+2396 ; [*0804.0020.0002] # DECIMAL SEPARATOR KEY SYMBOL
+2397 ; [*0805.0020.0002] # PREVIOUS PAGE
+2398 ; [*0806.0020.0002] # NEXT PAGE
+2399 ; [*0807.0020.0002] # PRINT SCREEN SYMBOL
+239A ; [*0808.0020.0002] # CLEAR SCREEN SYMBOL
+239B ; [*0809.0020.0002] # LEFT PARENTHESIS UPPER HOOK
+239C ; [*080A.0020.0002] # LEFT PARENTHESIS EXTENSION
+239D ; [*080B.0020.0002] # LEFT PARENTHESIS LOWER HOOK
+239E ; [*080C.0020.0002] # RIGHT PARENTHESIS UPPER HOOK
+239F ; [*080D.0020.0002] # RIGHT PARENTHESIS EXTENSION
+23A0 ; [*080E.0020.0002] # RIGHT PARENTHESIS LOWER HOOK
+23A1 ; [*080F.0020.0002] # LEFT SQUARE BRACKET UPPER CORNER
+23A2 ; [*0810.0020.0002] # LEFT SQUARE BRACKET EXTENSION
+23A3 ; [*0811.0020.0002] # LEFT SQUARE BRACKET LOWER CORNER
+23A4 ; [*0812.0020.0002] # RIGHT SQUARE BRACKET UPPER CORNER
+23A5 ; [*0813.0020.0002] # RIGHT SQUARE BRACKET EXTENSION
+23A6 ; [*0814.0020.0002] # RIGHT SQUARE BRACKET LOWER CORNER
+23A7 ; [*0815.0020.0002] # LEFT CURLY BRACKET UPPER HOOK
+23A8 ; [*0816.0020.0002] # LEFT CURLY BRACKET MIDDLE PIECE
+23A9 ; [*0817.0020.0002] # LEFT CURLY BRACKET LOWER HOOK
+23AA ; [*0818.0020.0002] # CURLY BRACKET EXTENSION
+23AB ; [*0819.0020.0002] # RIGHT CURLY BRACKET UPPER HOOK
+23AC ; [*081A.0020.0002] # RIGHT CURLY BRACKET MIDDLE PIECE
+23AD ; [*081B.0020.0002] # RIGHT CURLY BRACKET LOWER HOOK
+23AE ; [*081C.0020.0002] # INTEGRAL EXTENSION
+23AF ; [*081D.0020.0002] # HORIZONTAL LINE EXTENSION
+23B0 ; [*081E.0020.0002] # UPPER LEFT OR LOWER RIGHT CURLY BRACKET SECTION
+23B1 ; [*081F.0020.0002] # UPPER RIGHT OR LOWER LEFT CURLY BRACKET SECTION
+23B2 ; [*0820.0020.0002] # SUMMATION TOP
+23B3 ; [*0821.0020.0002] # SUMMATION BOTTOM
+23B4 ; [*0822.0020.0002] # TOP SQUARE BRACKET
+23B5 ; [*0823.0020.0002] # BOTTOM SQUARE BRACKET
+23B6 ; [*0824.0020.0002] # BOTTOM SQUARE BRACKET OVER TOP SQUARE BRACKET
+23B7 ; [*0825.0020.0002] # RADICAL SYMBOL BOTTOM
+23B8 ; [*0826.0020.0002] # LEFT VERTICAL BOX LINE
+23B9 ; [*0827.0020.0002] # RIGHT VERTICAL BOX LINE
+23BA ; [*0828.0020.0002] # HORIZONTAL SCAN LINE-1
+23BB ; [*0829.0020.0002] # HORIZONTAL SCAN LINE-3
+23BC ; [*082A.0020.0002] # HORIZONTAL SCAN LINE-7
+23BD ; [*082B.0020.0002] # HORIZONTAL SCAN LINE-9
+23BE ; [*082C.0020.0002] # DENTISTRY SYMBOL LIGHT VERTICAL AND TOP RIGHT
+23BF ; [*082D.0020.0002] # DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM RIGHT
+23C0 ; [*082E.0020.0002] # DENTISTRY SYMBOL LIGHT VERTICAL WITH CIRCLE
+23C1 ; [*082F.0020.0002] # DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH CIRCLE
+23C2 ; [*0830.0020.0002] # DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH CIRCLE
+23C3 ; [*0831.0020.0002] # DENTISTRY SYMBOL LIGHT VERTICAL WITH TRIANGLE
+23C4 ; [*0832.0020.0002] # DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH TRIANGLE
+23C5 ; [*0833.0020.0002] # DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH TRIANGLE
+23C6 ; [*0834.0020.0002] # DENTISTRY SYMBOL LIGHT VERTICAL AND WAVE
+23C7 ; [*0835.0020.0002] # DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH WAVE
+23C8 ; [*0836.0020.0002] # DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH WAVE
+23C9 ; [*0837.0020.0002] # DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL
+23CA ; [*0838.0020.0002] # DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL
+23CB ; [*0839.0020.0002] # DENTISTRY SYMBOL LIGHT VERTICAL AND TOP LEFT
+23CC ; [*083A.0020.0002] # DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM LEFT
+23CD ; [*083B.0020.0002] # SQUARE FOOT
+23CE ; [*083C.0020.0002] # RETURN SYMBOL
+23CF ; [*083D.0020.0002] # EJECT SYMBOL
+23D0 ; [*083E.0020.0002] # VERTICAL LINE EXTENSION
+23D1 ; [*083F.0020.0002] # METRICAL BREVE
+23D2 ; [*0840.0020.0002] # METRICAL LONG OVER SHORT
+23D3 ; [*0841.0020.0002] # METRICAL SHORT OVER LONG
+23D4 ; [*0842.0020.0002] # METRICAL LONG OVER TWO SHORTS
+23D5 ; [*0843.0020.0002] # METRICAL TWO SHORTS OVER LONG
+23D6 ; [*0844.0020.0002] # METRICAL TWO SHORTS JOINED
+23D7 ; [*0845.0020.0002] # METRICAL TRISEME
+23D8 ; [*0846.0020.0002] # METRICAL TETRASEME
+23D9 ; [*0847.0020.0002] # METRICAL PENTASEME
+23DA ; [*0848.0020.0002] # EARTH GROUND
+23DB ; [*0849.0020.0002] # FUSE
+23DC ; [*084A.0020.0002] # TOP PARENTHESIS
+23DD ; [*084B.0020.0002] # BOTTOM PARENTHESIS
+23DE ; [*084C.0020.0002] # TOP CURLY BRACKET
+23DF ; [*084D.0020.0002] # BOTTOM CURLY BRACKET
+23E0 ; [*084E.0020.0002] # TOP TORTOISE SHELL BRACKET
+23E1 ; [*084F.0020.0002] # BOTTOM TORTOISE SHELL BRACKET
+23E2 ; [*0850.0020.0002] # WHITE TRAPEZIUM
+23E3 ; [*0851.0020.0002] # BENZENE RING WITH CIRCLE
+23E4 ; [*0852.0020.0002] # STRAIGHTNESS
+23E5 ; [*0853.0020.0002] # FLATNESS
+23E6 ; [*0854.0020.0002] # AC CURRENT
+23E7 ; [*0855.0020.0002] # ELECTRICAL INTERSECTION
+23E8 ; [*0856.0020.0002] # DECIMAL EXPONENT SYMBOL
+23E9 ; [*0857.0020.0002] # BLACK RIGHT-POINTING DOUBLE TRIANGLE
+23EA ; [*0858.0020.0002] # BLACK LEFT-POINTING DOUBLE TRIANGLE
+23EB ; [*0859.0020.0002] # BLACK UP-POINTING DOUBLE TRIANGLE
+23EC ; [*085A.0020.0002] # BLACK DOWN-POINTING DOUBLE TRIANGLE
+23ED ; [*085B.0020.0002] # BLACK RIGHT-POINTING DOUBLE TRIANGLE WITH VERTICAL BAR
+23EE ; [*085C.0020.0002] # BLACK LEFT-POINTING DOUBLE TRIANGLE WITH VERTICAL BAR
+23EF ; [*085D.0020.0002] # BLACK RIGHT-POINTING TRIANGLE WITH DOUBLE VERTICAL BAR
+23F0 ; [*085E.0020.0002] # ALARM CLOCK
+23F1 ; [*085F.0020.0002] # STOPWATCH
+23F2 ; [*0860.0020.0002] # TIMER CLOCK
+23F3 ; [*0861.0020.0002] # HOURGLASS WITH FLOWING SAND
+23F4 ; [*0862.0020.0002] # BLACK MEDIUM LEFT-POINTING TRIANGLE
+23F5 ; [*0863.0020.0002] # BLACK MEDIUM RIGHT-POINTING TRIANGLE
+23F6 ; [*0864.0020.0002] # BLACK MEDIUM UP-POINTING TRIANGLE
+23F7 ; [*0865.0020.0002] # BLACK MEDIUM DOWN-POINTING TRIANGLE
+23F8 ; [*0866.0020.0002] # DOUBLE VERTICAL BAR
+23F9 ; [*0867.0020.0002] # BLACK SQUARE FOR STOP
+23FA ; [*0868.0020.0002] # BLACK CIRCLE FOR RECORD
+23FB ; [*0869.0020.0002] # POWER SYMBOL
+23FC ; [*086A.0020.0002] # POWER ON-OFF SYMBOL
+23FD ; [*086B.0020.0002] # POWER ON SYMBOL
+23FE ; [*086C.0020.0002] # POWER SLEEP SYMBOL
+23FF ; [*086D.0020.0002] # OBSERVER EYE SYMBOL
+2400 ; [*086E.0020.0002] # SYMBOL FOR NULL
+2401 ; [*086F.0020.0002] # SYMBOL FOR START OF HEADING
+2402 ; [*0870.0020.0002] # SYMBOL FOR START OF TEXT
+2403 ; [*0871.0020.0002] # SYMBOL FOR END OF TEXT
+2404 ; [*0872.0020.0002] # SYMBOL FOR END OF TRANSMISSION
+2405 ; [*0873.0020.0002] # SYMBOL FOR ENQUIRY
+2406 ; [*0874.0020.0002] # SYMBOL FOR ACKNOWLEDGE
+2407 ; [*0875.0020.0002] # SYMBOL FOR BELL
+2408 ; [*0876.0020.0002] # SYMBOL FOR BACKSPACE
+2409 ; [*0877.0020.0002] # SYMBOL FOR HORIZONTAL TABULATION
+240A ; [*0878.0020.0002] # SYMBOL FOR LINE FEED
+240B ; [*0879.0020.0002] # SYMBOL FOR VERTICAL TABULATION
+240C ; [*087A.0020.0002] # SYMBOL FOR FORM FEED
+240D ; [*087B.0020.0002] # SYMBOL FOR CARRIAGE RETURN
+240E ; [*087C.0020.0002] # SYMBOL FOR SHIFT OUT
+240F ; [*087D.0020.0002] # SYMBOL FOR SHIFT IN
+2410 ; [*087E.0020.0002] # SYMBOL FOR DATA LINK ESCAPE
+2411 ; [*087F.0020.0002] # SYMBOL FOR DEVICE CONTROL ONE
+2412 ; [*0880.0020.0002] # SYMBOL FOR DEVICE CONTROL TWO
+2413 ; [*0881.0020.0002] # SYMBOL FOR DEVICE CONTROL THREE
+2414 ; [*0882.0020.0002] # SYMBOL FOR DEVICE CONTROL FOUR
+2415 ; [*0883.0020.0002] # SYMBOL FOR NEGATIVE ACKNOWLEDGE
+2416 ; [*0884.0020.0002] # SYMBOL FOR SYNCHRONOUS IDLE
+2417 ; [*0885.0020.0002] # SYMBOL FOR END OF TRANSMISSION BLOCK
+2418 ; [*0886.0020.0002] # SYMBOL FOR CANCEL
+2419 ; [*0887.0020.0002] # SYMBOL FOR END OF MEDIUM
+241A ; [*0888.0020.0002] # SYMBOL FOR SUBSTITUTE
+241B ; [*0889.0020.0002] # SYMBOL FOR ESCAPE
+241C ; [*088A.0020.0002] # SYMBOL FOR FILE SEPARATOR
+241D ; [*088B.0020.0002] # SYMBOL FOR GROUP SEPARATOR
+241E ; [*088C.0020.0002] # SYMBOL FOR RECORD SEPARATOR
+241F ; [*088D.0020.0002] # SYMBOL FOR UNIT SEPARATOR
+2420 ; [*088E.0020.0002] # SYMBOL FOR SPACE
+2421 ; [*088F.0020.0002] # SYMBOL FOR DELETE
+2422 ; [*0890.0020.0002] # BLANK SYMBOL
+2423 ; [*0891.0020.0002] # OPEN BOX
+2424 ; [*0892.0020.0002] # SYMBOL FOR NEWLINE
+2425 ; [*0893.0020.0002] # SYMBOL FOR DELETE FORM TWO
+2426 ; [*0894.0020.0002] # SYMBOL FOR SUBSTITUTE FORM TWO
+2440 ; [*0895.0020.0002] # OCR HOOK
+2441 ; [*0896.0020.0002] # OCR CHAIR
+2442 ; [*0897.0020.0002] # OCR FORK
+2443 ; [*0898.0020.0002] # OCR INVERTED FORK
+2444 ; [*0899.0020.0002] # OCR BELT BUCKLE
+2445 ; [*089A.0020.0002] # OCR BOW TIE
+2446 ; [*089B.0020.0002] # OCR BRANCH BANK IDENTIFICATION
+2447 ; [*089C.0020.0002] # OCR AMOUNT OF CHECK
+2448 ; [*089D.0020.0002] # OCR DASH
+2449 ; [*089E.0020.0002] # OCR CUSTOMER ACCOUNT NUMBER
+244A ; [*089F.0020.0002] # OCR DOUBLE BACKSLASH
+2500 ; [*08A0.0020.0002] # BOX DRAWINGS LIGHT HORIZONTAL
+2501 ; [*08A1.0020.0002] # BOX DRAWINGS HEAVY HORIZONTAL
+2502 ; [*08A2.0020.0002] # BOX DRAWINGS LIGHT VERTICAL
+2503 ; [*08A3.0020.0002] # BOX DRAWINGS HEAVY VERTICAL
+2504 ; [*08A4.0020.0002] # BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL
+2505 ; [*08A5.0020.0002] # BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL
+2506 ; [*08A6.0020.0002] # BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL
+2507 ; [*08A7.0020.0002] # BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL
+2508 ; [*08A8.0020.0002] # BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL
+2509 ; [*08A9.0020.0002] # BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL
+250A ; [*08AA.0020.0002] # BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL
+250B ; [*08AB.0020.0002] # BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL
+250C ; [*08AC.0020.0002] # BOX DRAWINGS LIGHT DOWN AND RIGHT
+250D ; [*08AD.0020.0002] # BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY
+250E ; [*08AE.0020.0002] # BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT
+250F ; [*08AF.0020.0002] # BOX DRAWINGS HEAVY DOWN AND RIGHT
+2510 ; [*08B0.0020.0002] # BOX DRAWINGS LIGHT DOWN AND LEFT
+2511 ; [*08B1.0020.0002] # BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY
+2512 ; [*08B2.0020.0002] # BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT
+2513 ; [*08B3.0020.0002] # BOX DRAWINGS HEAVY DOWN AND LEFT
+2514 ; [*08B4.0020.0002] # BOX DRAWINGS LIGHT UP AND RIGHT
+2515 ; [*08B5.0020.0002] # BOX DRAWINGS UP LIGHT AND RIGHT HEAVY
+2516 ; [*08B6.0020.0002] # BOX DRAWINGS UP HEAVY AND RIGHT LIGHT
+2517 ; [*08B7.0020.0002] # BOX DRAWINGS HEAVY UP AND RIGHT
+2518 ; [*08B8.0020.0002] # BOX DRAWINGS LIGHT UP AND LEFT
+2519 ; [*08B9.0020.0002] # BOX DRAWINGS UP LIGHT AND LEFT HEAVY
+251A ; [*08BA.0020.0002] # BOX DRAWINGS UP HEAVY AND LEFT LIGHT
+251B ; [*08BB.0020.0002] # BOX DRAWINGS HEAVY UP AND LEFT
+251C ; [*08BC.0020.0002] # BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+251D ; [*08BD.0020.0002] # BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY
+251E ; [*08BE.0020.0002] # BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT
+251F ; [*08BF.0020.0002] # BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT
+2520 ; [*08C0.0020.0002] # BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT
+2521 ; [*08C1.0020.0002] # BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY
+2522 ; [*08C2.0020.0002] # BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY
+2523 ; [*08C3.0020.0002] # BOX DRAWINGS HEAVY VERTICAL AND RIGHT
+2524 ; [*08C4.0020.0002] # BOX DRAWINGS LIGHT VERTICAL AND LEFT
+2525 ; [*08C5.0020.0002] # BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY
+2526 ; [*08C6.0020.0002] # BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT
+2527 ; [*08C7.0020.0002] # BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT
+2528 ; [*08C8.0020.0002] # BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT
+2529 ; [*08C9.0020.0002] # BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY
+252A ; [*08CA.0020.0002] # BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY
+252B ; [*08CB.0020.0002] # BOX DRAWINGS HEAVY VERTICAL AND LEFT
+252C ; [*08CC.0020.0002] # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+252D ; [*08CD.0020.0002] # BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT
+252E ; [*08CE.0020.0002] # BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT
+252F ; [*08CF.0020.0002] # BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY
+2530 ; [*08D0.0020.0002] # BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT
+2531 ; [*08D1.0020.0002] # BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY
+2532 ; [*08D2.0020.0002] # BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY
+2533 ; [*08D3.0020.0002] # BOX DRAWINGS HEAVY DOWN AND HORIZONTAL
+2534 ; [*08D4.0020.0002] # BOX DRAWINGS LIGHT UP AND HORIZONTAL
+2535 ; [*08D5.0020.0002] # BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT
+2536 ; [*08D6.0020.0002] # BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT
+2537 ; [*08D7.0020.0002] # BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY
+2538 ; [*08D8.0020.0002] # BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT
+2539 ; [*08D9.0020.0002] # BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY
+253A ; [*08DA.0020.0002] # BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY
+253B ; [*08DB.0020.0002] # BOX DRAWINGS HEAVY UP AND HORIZONTAL
+253C ; [*08DC.0020.0002] # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+253D ; [*08DD.0020.0002] # BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT
+253E ; [*08DE.0020.0002] # BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT
+253F ; [*08DF.0020.0002] # BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY
+2540 ; [*08E0.0020.0002] # BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT
+2541 ; [*08E1.0020.0002] # BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT
+2542 ; [*08E2.0020.0002] # BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT
+2543 ; [*08E3.0020.0002] # BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT
+2544 ; [*08E4.0020.0002] # BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT
+2545 ; [*08E5.0020.0002] # BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT
+2546 ; [*08E6.0020.0002] # BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT
+2547 ; [*08E7.0020.0002] # BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY
+2548 ; [*08E8.0020.0002] # BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY
+2549 ; [*08E9.0020.0002] # BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY
+254A ; [*08EA.0020.0002] # BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY
+254B ; [*08EB.0020.0002] # BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL
+254C ; [*08EC.0020.0002] # BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL
+254D ; [*08ED.0020.0002] # BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL
+254E ; [*08EE.0020.0002] # BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL
+254F ; [*08EF.0020.0002] # BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL
+2550 ; [*08F0.0020.0002] # BOX DRAWINGS DOUBLE HORIZONTAL
+2551 ; [*08F1.0020.0002] # BOX DRAWINGS DOUBLE VERTICAL
+2552 ; [*08F2.0020.0002] # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+2553 ; [*08F3.0020.0002] # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
+2554 ; [*08F4.0020.0002] # BOX DRAWINGS DOUBLE DOWN AND RIGHT
+2555 ; [*08F5.0020.0002] # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
+2556 ; [*08F6.0020.0002] # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
+2557 ; [*08F7.0020.0002] # BOX DRAWINGS DOUBLE DOWN AND LEFT
+2558 ; [*08F8.0020.0002] # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+2559 ; [*08F9.0020.0002] # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+255A ; [*08FA.0020.0002] # BOX DRAWINGS DOUBLE UP AND RIGHT
+255B ; [*08FB.0020.0002] # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+255C ; [*08FC.0020.0002] # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
+255D ; [*08FD.0020.0002] # BOX DRAWINGS DOUBLE UP AND LEFT
+255E ; [*08FE.0020.0002] # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+255F ; [*08FF.0020.0002] # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+2560 ; [*0900.0020.0002] # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+2561 ; [*0901.0020.0002] # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+2562 ; [*0902.0020.0002] # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
+2563 ; [*0903.0020.0002] # BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+2564 ; [*0904.0020.0002] # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
+2565 ; [*0905.0020.0002] # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
+2566 ; [*0906.0020.0002] # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+2567 ; [*0907.0020.0002] # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+2568 ; [*0908.0020.0002] # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+2569 ; [*0909.0020.0002] # BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+256A ; [*090A.0020.0002] # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+256B ; [*090B.0020.0002] # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
+256C ; [*090C.0020.0002] # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+256D ; [*090D.0020.0002] # BOX DRAWINGS LIGHT ARC DOWN AND RIGHT
+256E ; [*090E.0020.0002] # BOX DRAWINGS LIGHT ARC DOWN AND LEFT
+256F ; [*090F.0020.0002] # BOX DRAWINGS LIGHT ARC UP AND LEFT
+2570 ; [*0910.0020.0002] # BOX DRAWINGS LIGHT ARC UP AND RIGHT
+2571 ; [*0911.0020.0002] # BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT
+2572 ; [*0912.0020.0002] # BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT
+2573 ; [*0913.0020.0002] # BOX DRAWINGS LIGHT DIAGONAL CROSS
+2574 ; [*0914.0020.0002] # BOX DRAWINGS LIGHT LEFT
+2575 ; [*0915.0020.0002] # BOX DRAWINGS LIGHT UP
+2576 ; [*0916.0020.0002] # BOX DRAWINGS LIGHT RIGHT
+2577 ; [*0917.0020.0002] # BOX DRAWINGS LIGHT DOWN
+2578 ; [*0918.0020.0002] # BOX DRAWINGS HEAVY LEFT
+2579 ; [*0919.0020.0002] # BOX DRAWINGS HEAVY UP
+257A ; [*091A.0020.0002] # BOX DRAWINGS HEAVY RIGHT
+257B ; [*091B.0020.0002] # BOX DRAWINGS HEAVY DOWN
+257C ; [*091C.0020.0002] # BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT
+257D ; [*091D.0020.0002] # BOX DRAWINGS LIGHT UP AND HEAVY DOWN
+257E ; [*091E.0020.0002] # BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT
+257F ; [*091F.0020.0002] # BOX DRAWINGS HEAVY UP AND LIGHT DOWN
+2580 ; [*0920.0020.0002] # UPPER HALF BLOCK
+2581 ; [*0921.0020.0002] # LOWER ONE EIGHTH BLOCK
+2582 ; [*0922.0020.0002] # LOWER ONE QUARTER BLOCK
+2583 ; [*0923.0020.0002] # LOWER THREE EIGHTHS BLOCK
+2584 ; [*0924.0020.0002] # LOWER HALF BLOCK
+2585 ; [*0925.0020.0002] # LOWER FIVE EIGHTHS BLOCK
+2586 ; [*0926.0020.0002] # LOWER THREE QUARTERS BLOCK
+2587 ; [*0927.0020.0002] # LOWER SEVEN EIGHTHS BLOCK
+2588 ; [*0928.0020.0002] # FULL BLOCK
+2589 ; [*0929.0020.0002] # LEFT SEVEN EIGHTHS BLOCK
+258A ; [*092A.0020.0002] # LEFT THREE QUARTERS BLOCK
+258B ; [*092B.0020.0002] # LEFT FIVE EIGHTHS BLOCK
+258C ; [*092C.0020.0002] # LEFT HALF BLOCK
+258D ; [*092D.0020.0002] # LEFT THREE EIGHTHS BLOCK
+258E ; [*092E.0020.0002] # LEFT ONE QUARTER BLOCK
+258F ; [*092F.0020.0002] # LEFT ONE EIGHTH BLOCK
+2590 ; [*0930.0020.0002] # RIGHT HALF BLOCK
+2591 ; [*0931.0020.0002] # LIGHT SHADE
+2592 ; [*0932.0020.0002] # MEDIUM SHADE
+2593 ; [*0933.0020.0002] # DARK SHADE
+2594 ; [*0934.0020.0002] # UPPER ONE EIGHTH BLOCK
+2595 ; [*0935.0020.0002] # RIGHT ONE EIGHTH BLOCK
+2596 ; [*0936.0020.0002] # QUADRANT LOWER LEFT
+2597 ; [*0937.0020.0002] # QUADRANT LOWER RIGHT
+2598 ; [*0938.0020.0002] # QUADRANT UPPER LEFT
+2599 ; [*0939.0020.0002] # QUADRANT UPPER LEFT AND LOWER LEFT AND LOWER RIGHT
+259A ; [*093A.0020.0002] # QUADRANT UPPER LEFT AND LOWER RIGHT
+259B ; [*093B.0020.0002] # QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER LEFT
+259C ; [*093C.0020.0002] # QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER RIGHT
+259D ; [*093D.0020.0002] # QUADRANT UPPER RIGHT
+259E ; [*093E.0020.0002] # QUADRANT UPPER RIGHT AND LOWER LEFT
+259F ; [*093F.0020.0002] # QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT
+25A0 ; [*0940.0020.0002] # BLACK SQUARE
+25A1 ; [*0941.0020.0002] # WHITE SQUARE
+25A2 ; [*0942.0020.0002] # WHITE SQUARE WITH ROUNDED CORNERS
+25A3 ; [*0943.0020.0002] # WHITE SQUARE CONTAINING BLACK SMALL SQUARE
+25A4 ; [*0944.0020.0002] # SQUARE WITH HORIZONTAL FILL
+25A5 ; [*0945.0020.0002] # SQUARE WITH VERTICAL FILL
+25A6 ; [*0946.0020.0002] # SQUARE WITH ORTHOGONAL CROSSHATCH FILL
+25A7 ; [*0947.0020.0002] # SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL
+25A8 ; [*0948.0020.0002] # SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL
+25A9 ; [*0949.0020.0002] # SQUARE WITH DIAGONAL CROSSHATCH FILL
+25AA ; [*094A.0020.0002] # BLACK SMALL SQUARE
+25AB ; [*094B.0020.0002] # WHITE SMALL SQUARE
+25AC ; [*094C.0020.0002] # BLACK RECTANGLE
+25AD ; [*094D.0020.0002] # WHITE RECTANGLE
+25AE ; [*094E.0020.0002] # BLACK VERTICAL RECTANGLE
+25AF ; [*094F.0020.0002] # WHITE VERTICAL RECTANGLE
+25B0 ; [*0950.0020.0002] # BLACK PARALLELOGRAM
+25B1 ; [*0951.0020.0002] # WHITE PARALLELOGRAM
+25B2 ; [*0952.0020.0002] # BLACK UP-POINTING TRIANGLE
+25B3 ; [*0953.0020.0002] # WHITE UP-POINTING TRIANGLE
+25B4 ; [*0954.0020.0002] # BLACK UP-POINTING SMALL TRIANGLE
+25B5 ; [*0955.0020.0002] # WHITE UP-POINTING SMALL TRIANGLE
+25B6 ; [*0956.0020.0002] # BLACK RIGHT-POINTING TRIANGLE
+25B7 ; [*0957.0020.0002] # WHITE RIGHT-POINTING TRIANGLE
+25B8 ; [*0958.0020.0002] # BLACK RIGHT-POINTING SMALL TRIANGLE
+25B9 ; [*0959.0020.0002] # WHITE RIGHT-POINTING SMALL TRIANGLE
+25BA ; [*095A.0020.0002] # BLACK RIGHT-POINTING POINTER
+25BB ; [*095B.0020.0002] # WHITE RIGHT-POINTING POINTER
+25BC ; [*095C.0020.0002] # BLACK DOWN-POINTING TRIANGLE
+25BD ; [*095D.0020.0002] # WHITE DOWN-POINTING TRIANGLE
+25BE ; [*095E.0020.0002] # BLACK DOWN-POINTING SMALL TRIANGLE
+25BF ; [*095F.0020.0002] # WHITE DOWN-POINTING SMALL TRIANGLE
+25C0 ; [*0960.0020.0002] # BLACK LEFT-POINTING TRIANGLE
+25C1 ; [*0961.0020.0002] # WHITE LEFT-POINTING TRIANGLE
+25C2 ; [*0962.0020.0002] # BLACK LEFT-POINTING SMALL TRIANGLE
+25C3 ; [*0963.0020.0002] # WHITE LEFT-POINTING SMALL TRIANGLE
+25C4 ; [*0964.0020.0002] # BLACK LEFT-POINTING POINTER
+25C5 ; [*0965.0020.0002] # WHITE LEFT-POINTING POINTER
+25C6 ; [*0966.0020.0002] # BLACK DIAMOND
+25C7 ; [*0967.0020.0002] # WHITE DIAMOND
+25C8 ; [*0968.0020.0002] # WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND
+25C9 ; [*0969.0020.0002] # FISHEYE
+25CA ; [*096A.0020.0002] # LOZENGE
+25CB ; [*096B.0020.0002] # WHITE CIRCLE
+25CC ; [*096C.0020.0002] # DOTTED CIRCLE
+25CD ; [*096D.0020.0002] # CIRCLE WITH VERTICAL FILL
+25CE ; [*096E.0020.0002] # BULLSEYE
+25CF ; [*096F.0020.0002] # BLACK CIRCLE
+25D0 ; [*0970.0020.0002] # CIRCLE WITH LEFT HALF BLACK
+25D1 ; [*0971.0020.0002] # CIRCLE WITH RIGHT HALF BLACK
+25D2 ; [*0972.0020.0002] # CIRCLE WITH LOWER HALF BLACK
+25D3 ; [*0973.0020.0002] # CIRCLE WITH UPPER HALF BLACK
+25D4 ; [*0974.0020.0002] # CIRCLE WITH UPPER RIGHT QUADRANT BLACK
+25D5 ; [*0975.0020.0002] # CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK
+25D6 ; [*0976.0020.0002] # LEFT HALF BLACK CIRCLE
+25D7 ; [*0977.0020.0002] # RIGHT HALF BLACK CIRCLE
+25D8 ; [*0978.0020.0002] # INVERSE BULLET
+25D9 ; [*0979.0020.0002] # INVERSE WHITE CIRCLE
+25DA ; [*097A.0020.0002] # UPPER HALF INVERSE WHITE CIRCLE
+25DB ; [*097B.0020.0002] # LOWER HALF INVERSE WHITE CIRCLE
+25DC ; [*097C.0020.0002] # UPPER LEFT QUADRANT CIRCULAR ARC
+25DD ; [*097D.0020.0002] # UPPER RIGHT QUADRANT CIRCULAR ARC
+25DE ; [*097E.0020.0002] # LOWER RIGHT QUADRANT CIRCULAR ARC
+25DF ; [*097F.0020.0002] # LOWER LEFT QUADRANT CIRCULAR ARC
+25E0 ; [*0980.0020.0002] # UPPER HALF CIRCLE
+25E1 ; [*0981.0020.0002] # LOWER HALF CIRCLE
+25E2 ; [*0982.0020.0002] # BLACK LOWER RIGHT TRIANGLE
+25E3 ; [*0983.0020.0002] # BLACK LOWER LEFT TRIANGLE
+25E4 ; [*0984.0020.0002] # BLACK UPPER LEFT TRIANGLE
+25E5 ; [*0985.0020.0002] # BLACK UPPER RIGHT TRIANGLE
+25E6 ; [*0986.0020.0002] # WHITE BULLET
+25E7 ; [*0987.0020.0002] # SQUARE WITH LEFT HALF BLACK
+25E8 ; [*0988.0020.0002] # SQUARE WITH RIGHT HALF BLACK
+25E9 ; [*0989.0020.0002] # SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK
+25EA ; [*098A.0020.0002] # SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK
+25EB ; [*098B.0020.0002] # WHITE SQUARE WITH VERTICAL BISECTING LINE
+25EC ; [*098C.0020.0002] # WHITE UP-POINTING TRIANGLE WITH DOT
+25ED ; [*098D.0020.0002] # UP-POINTING TRIANGLE WITH LEFT HALF BLACK
+25EE ; [*098E.0020.0002] # UP-POINTING TRIANGLE WITH RIGHT HALF BLACK
+25EF ; [*098F.0020.0002] # LARGE CIRCLE
+25F0 ; [*0990.0020.0002] # WHITE SQUARE WITH UPPER LEFT QUADRANT
+25F1 ; [*0991.0020.0002] # WHITE SQUARE WITH LOWER LEFT QUADRANT
+25F2 ; [*0992.0020.0002] # WHITE SQUARE WITH LOWER RIGHT QUADRANT
+25F3 ; [*0993.0020.0002] # WHITE SQUARE WITH UPPER RIGHT QUADRANT
+25F4 ; [*0994.0020.0002] # WHITE CIRCLE WITH UPPER LEFT QUADRANT
+25F5 ; [*0995.0020.0002] # WHITE CIRCLE WITH LOWER LEFT QUADRANT
+25F6 ; [*0996.0020.0002] # WHITE CIRCLE WITH LOWER RIGHT QUADRANT
+25F7 ; [*0997.0020.0002] # WHITE CIRCLE WITH UPPER RIGHT QUADRANT
+25F8 ; [*0998.0020.0002] # UPPER LEFT TRIANGLE
+25F9 ; [*0999.0020.0002] # UPPER RIGHT TRIANGLE
+25FA ; [*099A.0020.0002] # LOWER LEFT TRIANGLE
+25FB ; [*099B.0020.0002] # WHITE MEDIUM SQUARE
+25FC ; [*099C.0020.0002] # BLACK MEDIUM SQUARE
+25FD ; [*099D.0020.0002] # WHITE MEDIUM SMALL SQUARE
+25FE ; [*099E.0020.0002] # BLACK MEDIUM SMALL SQUARE
+25FF ; [*099F.0020.0002] # LOWER RIGHT TRIANGLE
+2600 ; [*0A6A.0020.0002] # BLACK SUN WITH RAYS
+2601 ; [*0A6B.0020.0002] # CLOUD
+2602 ; [*0A6C.0020.0002] # UMBRELLA
+2603 ; [*0A6D.0020.0002] # SNOWMAN
+2604 ; [*0A6E.0020.0002] # COMET
+2605 ; [*0A6F.0020.0002] # BLACK STAR
+2606 ; [*0A70.0020.0002] # WHITE STAR
+2607 ; [*0A71.0020.0002] # LIGHTNING
+2608 ; [*0A72.0020.0002] # THUNDERSTORM
+2609 ; [*0A73.0020.0002] # SUN
+260A ; [*0A74.0020.0002] # ASCENDING NODE
+260B ; [*0A75.0020.0002] # DESCENDING NODE
+260C ; [*0A76.0020.0002] # CONJUNCTION
+260D ; [*0A77.0020.0002] # OPPOSITION
+260E ; [*0A78.0020.0002] # BLACK TELEPHONE
+260F ; [*0A79.0020.0002] # WHITE TELEPHONE
+2610 ; [*0A7A.0020.0002] # BALLOT BOX
+2611 ; [*0A7B.0020.0002] # BALLOT BOX WITH CHECK
+2612 ; [*0A7C.0020.0002] # BALLOT BOX WITH X
+2613 ; [*0A7D.0020.0002] # SALTIRE
+2614 ; [*0A7E.0020.0002] # UMBRELLA WITH RAIN DROPS
+2615 ; [*0A7F.0020.0002] # HOT BEVERAGE
+2616 ; [*0A80.0020.0002] # WHITE SHOGI PIECE
+2617 ; [*0A81.0020.0002] # BLACK SHOGI PIECE
+2618 ; [*0A82.0020.0002] # SHAMROCK
+2619 ; [*0A83.0020.0002] # REVERSED ROTATED FLORAL HEART BULLET
+261A ; [*0A84.0020.0002] # BLACK LEFT POINTING INDEX
+261B ; [*0A85.0020.0002] # BLACK RIGHT POINTING INDEX
+261C ; [*0A86.0020.0002] # WHITE LEFT POINTING INDEX
+261D ; [*0A87.0020.0002] # WHITE UP POINTING INDEX
+261E ; [*0A88.0020.0002] # WHITE RIGHT POINTING INDEX
+261F ; [*0A89.0020.0002] # WHITE DOWN POINTING INDEX
+2620 ; [*0A8A.0020.0002] # SKULL AND CROSSBONES
+2621 ; [*0A8B.0020.0002] # CAUTION SIGN
+2622 ; [*0A8C.0020.0002] # RADIOACTIVE SIGN
+2623 ; [*0A8D.0020.0002] # BIOHAZARD SIGN
+2624 ; [*0A8E.0020.0002] # CADUCEUS
+2625 ; [*0A8F.0020.0002] # ANKH
+2626 ; [*0A90.0020.0002] # ORTHODOX CROSS
+2627 ; [*0A91.0020.0002] # CHI RHO
+2628 ; [*0A92.0020.0002] # CROSS OF LORRAINE
+2629 ; [*0A93.0020.0002] # CROSS OF JERUSALEM
+262A ; [*0A94.0020.0002] # STAR AND CRESCENT
+262B ; [*0A95.0020.0002] # FARSI SYMBOL
+262C ; [*0A96.0020.0002] # ADI SHAKTI
+262D ; [*0A97.0020.0002] # HAMMER AND SICKLE
+262E ; [*0A98.0020.0002] # PEACE SYMBOL
+262F ; [*0A99.0020.0002] # YIN YANG
+2630 ; [*1025.0020.0002] # TRIGRAM FOR HEAVEN
+2631 ; [*1026.0020.0002] # TRIGRAM FOR LAKE
+2632 ; [*1027.0020.0002] # TRIGRAM FOR FIRE
+2633 ; [*1028.0020.0002] # TRIGRAM FOR THUNDER
+2634 ; [*1029.0020.0002] # TRIGRAM FOR WIND
+2635 ; [*102A.0020.0002] # TRIGRAM FOR WATER
+2636 ; [*102B.0020.0002] # TRIGRAM FOR MOUNTAIN
+2637 ; [*102C.0020.0002] # TRIGRAM FOR EARTH
+2638 ; [*0A9A.0020.0002] # WHEEL OF DHARMA
+2639 ; [*0A9B.0020.0002] # WHITE FROWNING FACE
+263A ; [*0A9C.0020.0002] # WHITE SMILING FACE
+263B ; [*0A9D.0020.0002] # BLACK SMILING FACE
+263C ; [*0A9E.0020.0002] # WHITE SUN WITH RAYS
+263D ; [*0A9F.0020.0002] # FIRST QUARTER MOON
+263E ; [*0AA0.0020.0002] # LAST QUARTER MOON
+263F ; [*0AA1.0020.0002] # MERCURY
+2640 ; [*0AA2.0020.0002] # FEMALE SIGN
+2641 ; [*0AA3.0020.0002] # EARTH
+2642 ; [*0AA4.0020.0002] # MALE SIGN
+2643 ; [*0AA5.0020.0002] # JUPITER
+2644 ; [*0AA6.0020.0002] # SATURN
+2645 ; [*0AA7.0020.0002] # URANUS
+2646 ; [*0AA8.0020.0002] # NEPTUNE
+2647 ; [*0AA9.0020.0002] # PLUTO
+2648 ; [*0AAA.0020.0002] # ARIES
+2649 ; [*0AAB.0020.0002] # TAURUS
+264A ; [*0AAC.0020.0002] # GEMINI
+264B ; [*0AAD.0020.0002] # CANCER
+264C ; [*0AAE.0020.0002] # LEO
+264D ; [*0AAF.0020.0002] # VIRGO
+264E ; [*0AB0.0020.0002] # LIBRA
+264F ; [*0AB1.0020.0002] # SCORPIUS
+2650 ; [*0AB2.0020.0002] # SAGITTARIUS
+2651 ; [*0AB3.0020.0002] # CAPRICORN
+2652 ; [*0AB4.0020.0002] # AQUARIUS
+2653 ; [*0AB5.0020.0002] # PISCES
+2654 ; [*0AB6.0020.0002] # WHITE CHESS KING
+2655 ; [*0AB7.0020.0002] # WHITE CHESS QUEEN
+2656 ; [*0AB8.0020.0002] # WHITE CHESS ROOK
+2657 ; [*0AB9.0020.0002] # WHITE CHESS BISHOP
+2658 ; [*0ABA.0020.0002] # WHITE CHESS KNIGHT
+2659 ; [*0ABB.0020.0002] # WHITE CHESS PAWN
+265A ; [*0ABC.0020.0002] # BLACK CHESS KING
+265B ; [*0ABD.0020.0002] # BLACK CHESS QUEEN
+265C ; [*0ABE.0020.0002] # BLACK CHESS ROOK
+265D ; [*0ABF.0020.0002] # BLACK CHESS BISHOP
+265E ; [*0AC0.0020.0002] # BLACK CHESS KNIGHT
+265F ; [*0AC1.0020.0002] # BLACK CHESS PAWN
+2660 ; [*0AC2.0020.0002] # BLACK SPADE SUIT
+2661 ; [*0AC3.0020.0002] # WHITE HEART SUIT
+2662 ; [*0AC4.0020.0002] # WHITE DIAMOND SUIT
+2663 ; [*0AC5.0020.0002] # BLACK CLUB SUIT
+2664 ; [*0AC6.0020.0002] # WHITE SPADE SUIT
+2665 ; [*0AC7.0020.0002] # BLACK HEART SUIT
+2666 ; [*0AC8.0020.0002] # BLACK DIAMOND SUIT
+2667 ; [*0AC9.0020.0002] # WHITE CLUB SUIT
+2668 ; [*0ACA.0020.0002] # HOT SPRINGS
+2669 ; [*0ACB.0020.0002] # QUARTER NOTE
+266A ; [*0ACC.0020.0002] # EIGHTH NOTE
+266B ; [*0ACD.0020.0002] # BEAMED EIGHTH NOTES
+266C ; [*0ACE.0020.0002] # BEAMED SIXTEENTH NOTES
+266D ; [*12EC.0020.0002] # MUSIC FLAT SIGN
+266E ; [*12ED.0020.0002] # MUSIC NATURAL SIGN
+266F ; [*12EE.0020.0002] # MUSIC SHARP SIGN
+2670 ; [*0ACF.0020.0002] # WEST SYRIAC CROSS
+2671 ; [*0AD0.0020.0002] # EAST SYRIAC CROSS
+2672 ; [*0AD1.0020.0002] # UNIVERSAL RECYCLING SYMBOL
+2673 ; [*0AD2.0020.0002] # RECYCLING SYMBOL FOR TYPE-1 PLASTICS
+2674 ; [*0AD3.0020.0002] # RECYCLING SYMBOL FOR TYPE-2 PLASTICS
+2675 ; [*0AD4.0020.0002] # RECYCLING SYMBOL FOR TYPE-3 PLASTICS
+2676 ; [*0AD5.0020.0002] # RECYCLING SYMBOL FOR TYPE-4 PLASTICS
+2677 ; [*0AD6.0020.0002] # RECYCLING SYMBOL FOR TYPE-5 PLASTICS
+2678 ; [*0AD7.0020.0002] # RECYCLING SYMBOL FOR TYPE-6 PLASTICS
+2679 ; [*0AD8.0020.0002] # RECYCLING SYMBOL FOR TYPE-7 PLASTICS
+267A ; [*0AD9.0020.0002] # RECYCLING SYMBOL FOR GENERIC MATERIALS
+267B ; [*0ADA.0020.0002] # BLACK UNIVERSAL RECYCLING SYMBOL
+267C ; [*0ADB.0020.0002] # RECYCLED PAPER SYMBOL
+267D ; [*0ADC.0020.0002] # PARTIALLY-RECYCLED PAPER SYMBOL
+267E ; [*0ADD.0020.0002] # PERMANENT PAPER SIGN
+267F ; [*0ADE.0020.0002] # WHEELCHAIR SYMBOL
+2680 ; [*0ADF.0020.0002] # DIE FACE-1
+2681 ; [*0AE0.0020.0002] # DIE FACE-2
+2682 ; [*0AE1.0020.0002] # DIE FACE-3
+2683 ; [*0AE2.0020.0002] # DIE FACE-4
+2684 ; [*0AE3.0020.0002] # DIE FACE-5
+2685 ; [*0AE4.0020.0002] # DIE FACE-6
+2686 ; [*0AE5.0020.0002] # WHITE CIRCLE WITH DOT RIGHT
+2687 ; [*0AE6.0020.0002] # WHITE CIRCLE WITH TWO DOTS
+2688 ; [*0AE7.0020.0002] # BLACK CIRCLE WITH WHITE DOT RIGHT
+2689 ; [*0AE8.0020.0002] # BLACK CIRCLE WITH TWO WHITE DOTS
+268A ; [*101F.0020.0002] # MONOGRAM FOR YANG
+268B ; [*1020.0020.0002] # MONOGRAM FOR YIN
+268C ; [*1021.0020.0002] # DIGRAM FOR GREATER YANG
+268D ; [*1022.0020.0002] # DIGRAM FOR LESSER YIN
+268E ; [*1023.0020.0002] # DIGRAM FOR LESSER YANG
+268F ; [*1024.0020.0002] # DIGRAM FOR GREATER YIN
+2690 ; [*0AE9.0020.0002] # WHITE FLAG
+2691 ; [*0AEA.0020.0002] # BLACK FLAG
+2692 ; [*0AEB.0020.0002] # HAMMER AND PICK
+2693 ; [*0AEC.0020.0002] # ANCHOR
+2694 ; [*0AED.0020.0002] # CROSSED SWORDS
+2695 ; [*0AEE.0020.0002] # STAFF OF AESCULAPIUS
+2696 ; [*0AEF.0020.0002] # SCALES
+2697 ; [*0AF0.0020.0002] # ALEMBIC
+2698 ; [*0AF1.0020.0002] # FLOWER
+2699 ; [*0AF2.0020.0002] # GEAR
+269A ; [*0AF3.0020.0002] # STAFF OF HERMES
+269B ; [*0AF4.0020.0002] # ATOM SYMBOL
+269C ; [*0AF5.0020.0002] # FLEUR-DE-LIS
+269D ; [*0AF6.0020.0002] # OUTLINED WHITE STAR
+269E ; [*0AF7.0020.0002] # THREE LINES CONVERGING RIGHT
+269F ; [*0AF8.0020.0002] # THREE LINES CONVERGING LEFT
+26A0 ; [*0AF9.0020.0002] # WARNING SIGN
+26A1 ; [*0AFA.0020.0002] # HIGH VOLTAGE SIGN
+26A2 ; [*0AFB.0020.0002] # DOUBLED FEMALE SIGN
+26A3 ; [*0AFC.0020.0002] # DOUBLED MALE SIGN
+26A4 ; [*0AFD.0020.0002] # INTERLOCKED FEMALE AND MALE SIGN
+26A5 ; [*0AFE.0020.0002] # MALE AND FEMALE SIGN
+26A6 ; [*0AFF.0020.0002] # MALE WITH STROKE SIGN
+26A7 ; [*0B00.0020.0002] # MALE WITH STROKE AND MALE AND FEMALE SIGN
+26A8 ; [*0B01.0020.0002] # VERTICAL MALE WITH STROKE SIGN
+26A9 ; [*0B02.0020.0002] # HORIZONTAL MALE WITH STROKE SIGN
+26AA ; [*0B03.0020.0002] # MEDIUM WHITE CIRCLE
+26AB ; [*0B04.0020.0002] # MEDIUM BLACK CIRCLE
+26AC ; [*0B05.0020.0002] # MEDIUM SMALL WHITE CIRCLE
+26AD ; [*0B06.0020.0002] # MARRIAGE SYMBOL
+26AE ; [*0B07.0020.0002] # DIVORCE SYMBOL
+26AF ; [*0B08.0020.0002] # UNMARRIED PARTNERSHIP SYMBOL
+26B0 ; [*0B09.0020.0002] # COFFIN
+26B1 ; [*0B0A.0020.0002] # FUNERAL URN
+26B2 ; [*0B0B.0020.0002] # NEUTER
+26B3 ; [*0B0C.0020.0002] # CERES
+26B4 ; [*0B0D.0020.0002] # PALLAS
+26B5 ; [*0B0E.0020.0002] # JUNO
+26B6 ; [*0B0F.0020.0002] # VESTA
+26B7 ; [*0B10.0020.0002] # CHIRON
+26B8 ; [*0B11.0020.0002] # BLACK MOON LILITH
+26B9 ; [*0B12.0020.0002] # SEXTILE
+26BA ; [*0B13.0020.0002] # SEMISEXTILE
+26BB ; [*0B14.0020.0002] # QUINCUNX
+26BC ; [*0B15.0020.0002] # SESQUIQUADRATE
+26BD ; [*0B16.0020.0002] # SOCCER BALL
+26BE ; [*0B17.0020.0002] # BASEBALL
+26BF ; [*0B18.0020.0002] # SQUARED KEY
+26C0 ; [*0B19.0020.0002] # WHITE DRAUGHTS MAN
+26C1 ; [*0B1A.0020.0002] # WHITE DRAUGHTS KING
+26C2 ; [*0B1B.0020.0002] # BLACK DRAUGHTS MAN
+26C3 ; [*0B1C.0020.0002] # BLACK DRAUGHTS KING
+26C4 ; [*0B1D.0020.0002] # SNOWMAN WITHOUT SNOW
+26C5 ; [*0B1E.0020.0002] # SUN BEHIND CLOUD
+26C6 ; [*0B1F.0020.0002] # RAIN
+26C7 ; [*0B20.0020.0002] # BLACK SNOWMAN
+26C8 ; [*0B21.0020.0002] # THUNDER CLOUD AND RAIN
+26C9 ; [*0B22.0020.0002] # TURNED WHITE SHOGI PIECE
+26CA ; [*0B23.0020.0002] # TURNED BLACK SHOGI PIECE
+26CB ; [*0B24.0020.0002] # WHITE DIAMOND IN SQUARE
+26CC ; [*0B25.0020.0002] # CROSSING LANES
+26CD ; [*0B26.0020.0002] # DISABLED CAR
+26CE ; [*0B27.0020.0002] # OPHIUCHUS
+26CF ; [*0B28.0020.0002] # PICK
+26D0 ; [*0B29.0020.0002] # CAR SLIDING
+26D1 ; [*0B2A.0020.0002] # HELMET WITH WHITE CROSS
+26D2 ; [*0B2B.0020.0002] # CIRCLED CROSSING LANES
+26D3 ; [*0B2C.0020.0002] # CHAINS
+26D4 ; [*0B2D.0020.0002] # NO ENTRY
+26D5 ; [*0B2E.0020.0002] # ALTERNATE ONE-WAY LEFT WAY TRAFFIC
+26D6 ; [*0B2F.0020.0002] # BLACK TWO-WAY LEFT WAY TRAFFIC
+26D7 ; [*0B30.0020.0002] # WHITE TWO-WAY LEFT WAY TRAFFIC
+26D8 ; [*0B31.0020.0002] # BLACK LEFT LANE MERGE
+26D9 ; [*0B32.0020.0002] # WHITE LEFT LANE MERGE
+26DA ; [*0B33.0020.0002] # DRIVE SLOW SIGN
+26DB ; [*0B34.0020.0002] # HEAVY WHITE DOWN-POINTING TRIANGLE
+26DC ; [*0B35.0020.0002] # LEFT CLOSED ENTRY
+26DD ; [*0B36.0020.0002] # SQUARED SALTIRE
+26DE ; [*0B37.0020.0002] # FALLING DIAGONAL IN WHITE CIRCLE IN BLACK SQUARE
+26DF ; [*0B38.0020.0002] # BLACK TRUCK
+26E0 ; [*0B39.0020.0002] # RESTRICTED LEFT ENTRY-1
+26E1 ; [*0B3A.0020.0002] # RESTRICTED LEFT ENTRY-2
+26E2 ; [*0B3B.0020.0002] # ASTRONOMICAL SYMBOL FOR URANUS
+26E3 ; [*0B3C.0020.0002] # HEAVY CIRCLE WITH STROKE AND TWO DOTS ABOVE
+26E4 ; [*0B3D.0020.0002] # PENTAGRAM
+26E5 ; [*0B3E.0020.0002] # RIGHT-HANDED INTERLACED PENTAGRAM
+26E6 ; [*0B3F.0020.0002] # LEFT-HANDED INTERLACED PENTAGRAM
+26E7 ; [*0B40.0020.0002] # INVERTED PENTAGRAM
+26E8 ; [*0B41.0020.0002] # BLACK CROSS ON SHIELD
+26E9 ; [*0B42.0020.0002] # SHINTO SHRINE
+26EA ; [*0B43.0020.0002] # CHURCH
+26EB ; [*0B44.0020.0002] # CASTLE
+26EC ; [*0B45.0020.0002] # HISTORIC SITE
+26ED ; [*0B46.0020.0002] # GEAR WITHOUT HUB
+26EE ; [*0B47.0020.0002] # GEAR WITH HANDLES
+26EF ; [*0B48.0020.0002] # MAP SYMBOL FOR LIGHTHOUSE
+26F0 ; [*0B49.0020.0002] # MOUNTAIN
+26F1 ; [*0B4A.0020.0002] # UMBRELLA ON GROUND
+26F2 ; [*0B4B.0020.0002] # FOUNTAIN
+26F3 ; [*0B4C.0020.0002] # FLAG IN HOLE
+26F4 ; [*0B4D.0020.0002] # FERRY
+26F5 ; [*0B4E.0020.0002] # SAILBOAT
+26F6 ; [*0B4F.0020.0002] # SQUARE FOUR CORNERS
+26F7 ; [*0B50.0020.0002] # SKIER
+26F8 ; [*0B51.0020.0002] # ICE SKATE
+26F9 ; [*0B52.0020.0002] # PERSON WITH BALL
+26FA ; [*0B53.0020.0002] # TENT
+26FB ; [*0B54.0020.0002] # JAPANESE BANK SYMBOL
+26FC ; [*0B55.0020.0002] # HEADSTONE GRAVEYARD SYMBOL
+26FD ; [*0B56.0020.0002] # FUEL PUMP
+26FE ; [*0B57.0020.0002] # CUP ON BLACK SQUARE
+26FF ; [*0B58.0020.0002] # WHITE FLAG WITH HORIZONTAL MIDDLE BLACK STRIPE
+2700 ; [*0B73.0020.0002] # BLACK SAFETY SCISSORS
+2701 ; [*0B74.0020.0002] # UPPER BLADE SCISSORS
+2702 ; [*0B75.0020.0002] # BLACK SCISSORS
+2703 ; [*0B76.0020.0002] # LOWER BLADE SCISSORS
+2704 ; [*0B77.0020.0002] # WHITE SCISSORS
+2705 ; [*0B78.0020.0002] # WHITE HEAVY CHECK MARK
+2706 ; [*0B79.0020.0002] # TELEPHONE LOCATION SIGN
+2707 ; [*0B7A.0020.0002] # TAPE DRIVE
+2708 ; [*0B7B.0020.0002] # AIRPLANE
+2709 ; [*0B7C.0020.0002] # ENVELOPE
+270A ; [*0B7D.0020.0002] # RAISED FIST
+270B ; [*0B7E.0020.0002] # RAISED HAND
+270C ; [*0B7F.0020.0002] # VICTORY HAND
+270D ; [*0B80.0020.0002] # WRITING HAND
+270E ; [*0B81.0020.0002] # LOWER RIGHT PENCIL
+270F ; [*0B82.0020.0002] # PENCIL
+2710 ; [*0B83.0020.0002] # UPPER RIGHT PENCIL
+2711 ; [*0B84.0020.0002] # WHITE NIB
+2712 ; [*0B85.0020.0002] # BLACK NIB
+2713 ; [*0B86.0020.0002] # CHECK MARK
+2714 ; [*0B87.0020.0002] # HEAVY CHECK MARK
+2715 ; [*0B88.0020.0002] # MULTIPLICATION X
+2716 ; [*0B89.0020.0002] # HEAVY MULTIPLICATION X
+2717 ; [*0B8A.0020.0002] # BALLOT X
+2718 ; [*0B8B.0020.0002] # HEAVY BALLOT X
+2719 ; [*0B8C.0020.0002] # OUTLINED GREEK CROSS
+271A ; [*0B8D.0020.0002] # HEAVY GREEK CROSS
+271B ; [*0B8E.0020.0002] # OPEN CENTRE CROSS
+271C ; [*0B8F.0020.0002] # HEAVY OPEN CENTRE CROSS
+271D ; [*0B90.0020.0002] # LATIN CROSS
+271E ; [*0B91.0020.0002] # SHADOWED WHITE LATIN CROSS
+271F ; [*0B92.0020.0002] # OUTLINED LATIN CROSS
+2720 ; [*0B93.0020.0002] # MALTESE CROSS
+2721 ; [*0B96.0020.0002] # STAR OF DAVID
+2722 ; [*0B97.0020.0002] # FOUR TEARDROP-SPOKED ASTERISK
+2723 ; [*0B98.0020.0002] # FOUR BALLOON-SPOKED ASTERISK
+2724 ; [*0B99.0020.0002] # HEAVY FOUR BALLOON-SPOKED ASTERISK
+2725 ; [*0B9A.0020.0002] # FOUR CLUB-SPOKED ASTERISK
+2726 ; [*0B9B.0020.0002] # BLACK FOUR POINTED STAR
+2727 ; [*0B9C.0020.0002] # WHITE FOUR POINTED STAR
+2728 ; [*0B9D.0020.0002] # SPARKLES
+2729 ; [*0B9E.0020.0002] # STRESS OUTLINED WHITE STAR
+272A ; [*0B9F.0020.0002] # CIRCLED WHITE STAR
+272B ; [*0BA0.0020.0002] # OPEN CENTRE BLACK STAR
+272C ; [*0BA1.0020.0002] # BLACK CENTRE WHITE STAR
+272D ; [*0BA2.0020.0002] # OUTLINED BLACK STAR
+272E ; [*0BA3.0020.0002] # HEAVY OUTLINED BLACK STAR
+272F ; [*0BA4.0020.0002] # PINWHEEL STAR
+2730 ; [*0BA5.0020.0002] # SHADOWED WHITE STAR
+2731 ; [*0BA6.0020.0002] # HEAVY ASTERISK
+2732 ; [*0BA7.0020.0002] # OPEN CENTRE ASTERISK
+2733 ; [*0BA8.0020.0002] # EIGHT SPOKED ASTERISK
+2734 ; [*0BA9.0020.0002] # EIGHT POINTED BLACK STAR
+2735 ; [*0BAA.0020.0002] # EIGHT POINTED PINWHEEL STAR
+2736 ; [*0BAB.0020.0002] # SIX POINTED BLACK STAR
+2737 ; [*0BAC.0020.0002] # EIGHT POINTED RECTILINEAR BLACK STAR
+2738 ; [*0BAD.0020.0002] # HEAVY EIGHT POINTED RECTILINEAR BLACK STAR
+2739 ; [*0BAE.0020.0002] # TWELVE POINTED BLACK STAR
+273A ; [*0BAF.0020.0002] # SIXTEEN POINTED ASTERISK
+273B ; [*0BB0.0020.0002] # TEARDROP-SPOKED ASTERISK
+273C ; [*0BB1.0020.0002] # OPEN CENTRE TEARDROP-SPOKED ASTERISK
+273D ; [*0BB2.0020.0002] # HEAVY TEARDROP-SPOKED ASTERISK
+273E ; [*0BB3.0020.0002] # SIX PETALLED BLACK AND WHITE FLORETTE
+273F ; [*0BB4.0020.0002] # BLACK FLORETTE
+2740 ; [*0BB5.0020.0002] # WHITE FLORETTE
+2741 ; [*0BB6.0020.0002] # EIGHT PETALLED OUTLINED BLACK FLORETTE
+2742 ; [*0BB7.0020.0002] # CIRCLED OPEN CENTRE EIGHT POINTED STAR
+2743 ; [*0BB8.0020.0002] # HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK
+2744 ; [*0BB9.0020.0002] # SNOWFLAKE
+2745 ; [*0BBA.0020.0002] # TIGHT TRIFOLIATE SNOWFLAKE
+2746 ; [*0BBB.0020.0002] # HEAVY CHEVRON SNOWFLAKE
+2747 ; [*0BBC.0020.0002] # SPARKLE
+2748 ; [*0BBD.0020.0002] # HEAVY SPARKLE
+2749 ; [*0BBE.0020.0002] # BALLOON-SPOKED ASTERISK
+274A ; [*0BBF.0020.0002] # EIGHT TEARDROP-SPOKED PROPELLER ASTERISK
+274B ; [*0BC0.0020.0002] # HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK
+274C ; [*0BC1.0020.0002] # CROSS MARK
+274D ; [*0BC2.0020.0002] # SHADOWED WHITE CIRCLE
+274E ; [*0BC3.0020.0002] # NEGATIVE SQUARED CROSS MARK
+274F ; [*0BC4.0020.0002] # LOWER RIGHT DROP-SHADOWED WHITE SQUARE
+2750 ; [*0BC5.0020.0002] # UPPER RIGHT DROP-SHADOWED WHITE SQUARE
+2751 ; [*0BC6.0020.0002] # LOWER RIGHT SHADOWED WHITE SQUARE
+2752 ; [*0BC7.0020.0002] # UPPER RIGHT SHADOWED WHITE SQUARE
+2753 ; [*0BC8.0020.0002] # BLACK QUESTION MARK ORNAMENT
+2754 ; [*0BC9.0020.0002] # WHITE QUESTION MARK ORNAMENT
+2755 ; [*0BCA.0020.0002] # WHITE EXCLAMATION MARK ORNAMENT
+2756 ; [*0BCB.0020.0002] # BLACK DIAMOND MINUS WHITE X
+2757 ; [*0BCC.0020.0002] # HEAVY EXCLAMATION MARK SYMBOL
+2758 ; [*0BCD.0020.0002] # LIGHT VERTICAL BAR
+2759 ; [*0BCE.0020.0002] # MEDIUM VERTICAL BAR
+275A ; [*0BCF.0020.0002] # HEAVY VERTICAL BAR
+275B ; [*0BD0.0020.0002] # HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT
+275C ; [*0BD1.0020.0002] # HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT
+275D ; [*0BD2.0020.0002] # HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT
+275E ; [*0BD3.0020.0002] # HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT
+275F ; [*0BD4.0020.0002] # HEAVY LOW SINGLE COMMA QUOTATION MARK ORNAMENT
+2760 ; [*0BD5.0020.0002] # HEAVY LOW DOUBLE COMMA QUOTATION MARK ORNAMENT
+2761 ; [*0BD6.0020.0002] # CURVED STEM PARAGRAPH SIGN ORNAMENT
+2762 ; [*0BD7.0020.0002] # HEAVY EXCLAMATION MARK ORNAMENT
+2763 ; [*0BD8.0020.0002] # HEAVY HEART EXCLAMATION MARK ORNAMENT
+2764 ; [*0BD9.0020.0002] # HEAVY BLACK HEART
+2765 ; [*0BDA.0020.0002] # ROTATED HEAVY BLACK HEART BULLET
+2766 ; [*0BDB.0020.0002] # FLORAL HEART
+2767 ; [*0BDC.0020.0002] # ROTATED FLORAL HEART BULLET
+2768 ; [*036A.0020.0002] # MEDIUM LEFT PARENTHESIS ORNAMENT
+2769 ; [*036B.0020.0002] # MEDIUM RIGHT PARENTHESIS ORNAMENT
+276A ; [*036C.0020.0002] # MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT
+276B ; [*036D.0020.0002] # MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT
+276C ; [*036E.0020.0002] # MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT
+276D ; [*036F.0020.0002] # MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT
+276E ; [*0370.0020.0002] # HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT
+276F ; [*0371.0020.0002] # HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT
+2770 ; [*0372.0020.0002] # HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT
+2771 ; [*0373.0020.0002] # HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT
+2772 ; [*0374.0020.0002] # LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT
+2773 ; [*0375.0020.0002] # LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT
+2774 ; [*0376.0020.0002] # MEDIUM LEFT CURLY BRACKET ORNAMENT
+2775 ; [*0377.0020.0002] # MEDIUM RIGHT CURLY BRACKET ORNAMENT
+2794 ; [*0BDD.0020.0002] # HEAVY WIDE-HEADED RIGHTWARDS ARROW
+2795 ; [*0BDE.0020.0002] # HEAVY PLUS SIGN
+2796 ; [*0BDF.0020.0002] # HEAVY MINUS SIGN
+2797 ; [*0BE0.0020.0002] # HEAVY DIVISION SIGN
+2798 ; [*0BE1.0020.0002] # HEAVY SOUTH EAST ARROW
+2799 ; [*0BE2.0020.0002] # HEAVY RIGHTWARDS ARROW
+279A ; [*0BE3.0020.0002] # HEAVY NORTH EAST ARROW
+279B ; [*0BE4.0020.0002] # DRAFTING POINT RIGHTWARDS ARROW
+279C ; [*0BE5.0020.0002] # HEAVY ROUND-TIPPED RIGHTWARDS ARROW
+279D ; [*0BE6.0020.0002] # TRIANGLE-HEADED RIGHTWARDS ARROW
+279E ; [*0BE7.0020.0002] # HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW
+279F ; [*0BE8.0020.0002] # DASHED TRIANGLE-HEADED RIGHTWARDS ARROW
+27A0 ; [*0BE9.0020.0002] # HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW
+27A1 ; [*0BEA.0020.0002] # BLACK RIGHTWARDS ARROW
+27A2 ; [*0BEB.0020.0002] # THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD
+27A3 ; [*0BEC.0020.0002] # THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD
+27A4 ; [*0BED.0020.0002] # BLACK RIGHTWARDS ARROWHEAD
+27A5 ; [*0BEE.0020.0002] # HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW
+27A6 ; [*0BEF.0020.0002] # HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW
+27A7 ; [*0BF0.0020.0002] # SQUAT BLACK RIGHTWARDS ARROW
+27A8 ; [*0BF1.0020.0002] # HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW
+27A9 ; [*0BF2.0020.0002] # RIGHT-SHADED WHITE RIGHTWARDS ARROW
+27AA ; [*0BF3.0020.0002] # LEFT-SHADED WHITE RIGHTWARDS ARROW
+27AB ; [*0BF4.0020.0002] # BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW
+27AC ; [*0BF5.0020.0002] # FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW
+27AD ; [*0BF6.0020.0002] # HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
+27AE ; [*0BF7.0020.0002] # HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
+27AF ; [*0BF8.0020.0002] # NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
+27B0 ; [*0BF9.0020.0002] # CURLY LOOP
+27B1 ; [*0BFA.0020.0002] # NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
+27B2 ; [*0BFB.0020.0002] # CIRCLED HEAVY WHITE RIGHTWARDS ARROW
+27B3 ; [*0BFC.0020.0002] # WHITE-FEATHERED RIGHTWARDS ARROW
+27B4 ; [*0BFD.0020.0002] # BLACK-FEATHERED SOUTH EAST ARROW
+27B5 ; [*0BFE.0020.0002] # BLACK-FEATHERED RIGHTWARDS ARROW
+27B6 ; [*0BFF.0020.0002] # BLACK-FEATHERED NORTH EAST ARROW
+27B7 ; [*0C00.0020.0002] # HEAVY BLACK-FEATHERED SOUTH EAST ARROW
+27B8 ; [*0C01.0020.0002] # HEAVY BLACK-FEATHERED RIGHTWARDS ARROW
+27B9 ; [*0C02.0020.0002] # HEAVY BLACK-FEATHERED NORTH EAST ARROW
+27BA ; [*0C03.0020.0002] # TEARDROP-BARBED RIGHTWARDS ARROW
+27BB ; [*0C04.0020.0002] # HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW
+27BC ; [*0C05.0020.0002] # WEDGE-TAILED RIGHTWARDS ARROW
+27BD ; [*0C06.0020.0002] # HEAVY WEDGE-TAILED RIGHTWARDS ARROW
+27BE ; [*0C07.0020.0002] # OPEN-OUTLINED RIGHTWARDS ARROW
+27BF ; [*0C08.0020.0002] # DOUBLE CURLY LOOP
+27C0 ; [*0C09.0020.0002] # THREE DIMENSIONAL ANGLE
+27C1 ; [*0C0A.0020.0002] # WHITE TRIANGLE CONTAINING SMALL WHITE TRIANGLE
+27C2 ; [*0C0B.0020.0002] # PERPENDICULAR
+27C3 ; [*0C0C.0020.0002] # OPEN SUBSET
+27C4 ; [*0C0D.0020.0002] # OPEN SUPERSET
+27C5 ; [*035E.0020.0002] # LEFT S-SHAPED BAG DELIMITER
+27C6 ; [*035F.0020.0002] # RIGHT S-SHAPED BAG DELIMITER
+27C7 ; [*0C0E.0020.0002] # OR WITH DOT INSIDE
+27C8 ; [*0C0F.0020.0002] # REVERSE SOLIDUS PRECEDING SUBSET
+27C9 ; [*0C10.0020.0002] # SUPERSET PRECEDING SOLIDUS
+27CA ; [*0C11.0020.0002] # VERTICAL BAR WITH HORIZONTAL STROKE
+27CB ; [*0C12.0020.0002] # MATHEMATICAL RISING DIAGONAL
+27CC ; [*0C13.0020.0002] # LONG DIVISION
+27CD ; [*0C14.0020.0002] # MATHEMATICAL FALLING DIAGONAL
+27CE ; [*0C15.0020.0002] # SQUARED LOGICAL AND
+27CF ; [*0C16.0020.0002] # SQUARED LOGICAL OR
+27D0 ; [*0C17.0020.0002] # WHITE DIAMOND WITH CENTRED DOT
+27D1 ; [*0C18.0020.0002] # AND WITH DOT
+27D2 ; [*0C19.0020.0002] # ELEMENT OF OPENING UPWARDS
+27D3 ; [*0C1A.0020.0002] # LOWER RIGHT CORNER WITH DOT
+27D4 ; [*0C1B.0020.0002] # UPPER LEFT CORNER WITH DOT
+27D5 ; [*0C1C.0020.0002] # LEFT OUTER JOIN
+27D6 ; [*0C1D.0020.0002] # RIGHT OUTER JOIN
+27D7 ; [*0C1E.0020.0002] # FULL OUTER JOIN
+27D8 ; [*0C1F.0020.0002] # LARGE UP TACK
+27D9 ; [*0C20.0020.0002] # LARGE DOWN TACK
+27DA ; [*0C21.0020.0002] # LEFT AND RIGHT DOUBLE TURNSTILE
+27DB ; [*0C22.0020.0002] # LEFT AND RIGHT TACK
+27DC ; [*0C23.0020.0002] # LEFT MULTIMAP
+27DD ; [*0C24.0020.0002] # LONG RIGHT TACK
+27DE ; [*0C25.0020.0002] # LONG LEFT TACK
+27DF ; [*0C26.0020.0002] # UP TACK WITH CIRCLE ABOVE
+27E0 ; [*0C27.0020.0002] # LOZENGE DIVIDED BY HORIZONTAL RULE
+27E1 ; [*0C28.0020.0002] # WHITE CONCAVE-SIDED DIAMOND
+27E2 ; [*0C29.0020.0002] # WHITE CONCAVE-SIDED DIAMOND WITH LEFTWARDS TICK
+27E3 ; [*0C2A.0020.0002] # WHITE CONCAVE-SIDED DIAMOND WITH RIGHTWARDS TICK
+27E4 ; [*0C2B.0020.0002] # WHITE SQUARE WITH LEFTWARDS TICK
+27E5 ; [*0C2C.0020.0002] # WHITE SQUARE WITH RIGHTWARDS TICK
+27E6 ; [*0360.0020.0002] # MATHEMATICAL LEFT WHITE SQUARE BRACKET
+27E7 ; [*0361.0020.0002] # MATHEMATICAL RIGHT WHITE SQUARE BRACKET
+27E8 ; [*0362.0020.0002] # MATHEMATICAL LEFT ANGLE BRACKET
+27E9 ; [*0363.0020.0002] # MATHEMATICAL RIGHT ANGLE BRACKET
+27EA ; [*0364.0020.0002] # MATHEMATICAL LEFT DOUBLE ANGLE BRACKET
+27EB ; [*0365.0020.0002] # MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET
+27EC ; [*0366.0020.0002] # MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET
+27ED ; [*0367.0020.0002] # MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET
+27EE ; [*0368.0020.0002] # MATHEMATICAL LEFT FLATTENED PARENTHESIS
+27EF ; [*0369.0020.0002] # MATHEMATICAL RIGHT FLATTENED PARENTHESIS
+27F0 ; [*0C2D.0020.0002] # UPWARDS QUADRUPLE ARROW
+27F1 ; [*0C2E.0020.0002] # DOWNWARDS QUADRUPLE ARROW
+27F2 ; [*0C2F.0020.0002] # ANTICLOCKWISE GAPPED CIRCLE ARROW
+27F3 ; [*0C30.0020.0002] # CLOCKWISE GAPPED CIRCLE ARROW
+27F4 ; [*0C31.0020.0002] # RIGHT ARROW WITH CIRCLED PLUS
+27F5 ; [*0C32.0020.0002] # LONG LEFTWARDS ARROW
+27F6 ; [*0C33.0020.0002] # LONG RIGHTWARDS ARROW
+27F7 ; [*0C34.0020.0002] # LONG LEFT RIGHT ARROW
+27F8 ; [*0C35.0020.0002] # LONG LEFTWARDS DOUBLE ARROW
+27F9 ; [*0C36.0020.0002] # LONG RIGHTWARDS DOUBLE ARROW
+27FA ; [*0C37.0020.0002] # LONG LEFT RIGHT DOUBLE ARROW
+27FB ; [*0C38.0020.0002] # LONG LEFTWARDS ARROW FROM BAR
+27FC ; [*0C39.0020.0002] # LONG RIGHTWARDS ARROW FROM BAR
+27FD ; [*0C3A.0020.0002] # LONG LEFTWARDS DOUBLE ARROW FROM BAR
+27FE ; [*0C3B.0020.0002] # LONG RIGHTWARDS DOUBLE ARROW FROM BAR
+27FF ; [*0C3C.0020.0002] # LONG RIGHTWARDS SQUIGGLE ARROW
+2800 ; [*0F1F.0020.0002] # BRAILLE PATTERN BLANK
+2801 ; [*0F20.0020.0002] # BRAILLE PATTERN DOTS-1
+2802 ; [*0F21.0020.0002] # BRAILLE PATTERN DOTS-2
+2803 ; [*0F22.0020.0002] # BRAILLE PATTERN DOTS-12
+2804 ; [*0F23.0020.0002] # BRAILLE PATTERN DOTS-3
+2805 ; [*0F24.0020.0002] # BRAILLE PATTERN DOTS-13
+2806 ; [*0F25.0020.0002] # BRAILLE PATTERN DOTS-23
+2807 ; [*0F26.0020.0002] # BRAILLE PATTERN DOTS-123
+2808 ; [*0F27.0020.0002] # BRAILLE PATTERN DOTS-4
+2809 ; [*0F28.0020.0002] # BRAILLE PATTERN DOTS-14
+280A ; [*0F29.0020.0002] # BRAILLE PATTERN DOTS-24
+280B ; [*0F2A.0020.0002] # BRAILLE PATTERN DOTS-124
+280C ; [*0F2B.0020.0002] # BRAILLE PATTERN DOTS-34
+280D ; [*0F2C.0020.0002] # BRAILLE PATTERN DOTS-134
+280E ; [*0F2D.0020.0002] # BRAILLE PATTERN DOTS-234
+280F ; [*0F2E.0020.0002] # BRAILLE PATTERN DOTS-1234
+2810 ; [*0F2F.0020.0002] # BRAILLE PATTERN DOTS-5
+2811 ; [*0F30.0020.0002] # BRAILLE PATTERN DOTS-15
+2812 ; [*0F31.0020.0002] # BRAILLE PATTERN DOTS-25
+2813 ; [*0F32.0020.0002] # BRAILLE PATTERN DOTS-125
+2814 ; [*0F33.0020.0002] # BRAILLE PATTERN DOTS-35
+2815 ; [*0F34.0020.0002] # BRAILLE PATTERN DOTS-135
+2816 ; [*0F35.0020.0002] # BRAILLE PATTERN DOTS-235
+2817 ; [*0F36.0020.0002] # BRAILLE PATTERN DOTS-1235
+2818 ; [*0F37.0020.0002] # BRAILLE PATTERN DOTS-45
+2819 ; [*0F38.0020.0002] # BRAILLE PATTERN DOTS-145
+281A ; [*0F39.0020.0002] # BRAILLE PATTERN DOTS-245
+281B ; [*0F3A.0020.0002] # BRAILLE PATTERN DOTS-1245
+281C ; [*0F3B.0020.0002] # BRAILLE PATTERN DOTS-345
+281D ; [*0F3C.0020.0002] # BRAILLE PATTERN DOTS-1345
+281E ; [*0F3D.0020.0002] # BRAILLE PATTERN DOTS-2345
+281F ; [*0F3E.0020.0002] # BRAILLE PATTERN DOTS-12345
+2820 ; [*0F3F.0020.0002] # BRAILLE PATTERN DOTS-6
+2821 ; [*0F40.0020.0002] # BRAILLE PATTERN DOTS-16
+2822 ; [*0F41.0020.0002] # BRAILLE PATTERN DOTS-26
+2823 ; [*0F42.0020.0002] # BRAILLE PATTERN DOTS-126
+2824 ; [*0F43.0020.0002] # BRAILLE PATTERN DOTS-36
+2825 ; [*0F44.0020.0002] # BRAILLE PATTERN DOTS-136
+2826 ; [*0F45.0020.0002] # BRAILLE PATTERN DOTS-236
+2827 ; [*0F46.0020.0002] # BRAILLE PATTERN DOTS-1236
+2828 ; [*0F47.0020.0002] # BRAILLE PATTERN DOTS-46
+2829 ; [*0F48.0020.0002] # BRAILLE PATTERN DOTS-146
+282A ; [*0F49.0020.0002] # BRAILLE PATTERN DOTS-246
+282B ; [*0F4A.0020.0002] # BRAILLE PATTERN DOTS-1246
+282C ; [*0F4B.0020.0002] # BRAILLE PATTERN DOTS-346
+282D ; [*0F4C.0020.0002] # BRAILLE PATTERN DOTS-1346
+282E ; [*0F4D.0020.0002] # BRAILLE PATTERN DOTS-2346
+282F ; [*0F4E.0020.0002] # BRAILLE PATTERN DOTS-12346
+2830 ; [*0F4F.0020.0002] # BRAILLE PATTERN DOTS-56
+2831 ; [*0F50.0020.0002] # BRAILLE PATTERN DOTS-156
+2832 ; [*0F51.0020.0002] # BRAILLE PATTERN DOTS-256
+2833 ; [*0F52.0020.0002] # BRAILLE PATTERN DOTS-1256
+2834 ; [*0F53.0020.0002] # BRAILLE PATTERN DOTS-356
+2835 ; [*0F54.0020.0002] # BRAILLE PATTERN DOTS-1356
+2836 ; [*0F55.0020.0002] # BRAILLE PATTERN DOTS-2356
+2837 ; [*0F56.0020.0002] # BRAILLE PATTERN DOTS-12356
+2838 ; [*0F57.0020.0002] # BRAILLE PATTERN DOTS-456
+2839 ; [*0F58.0020.0002] # BRAILLE PATTERN DOTS-1456
+283A ; [*0F59.0020.0002] # BRAILLE PATTERN DOTS-2456
+283B ; [*0F5A.0020.0002] # BRAILLE PATTERN DOTS-12456
+283C ; [*0F5B.0020.0002] # BRAILLE PATTERN DOTS-3456
+283D ; [*0F5C.0020.0002] # BRAILLE PATTERN DOTS-13456
+283E ; [*0F5D.0020.0002] # BRAILLE PATTERN DOTS-23456
+283F ; [*0F5E.0020.0002] # BRAILLE PATTERN DOTS-123456
+2840 ; [*0F5F.0020.0002] # BRAILLE PATTERN DOTS-7
+2841 ; [*0F60.0020.0002] # BRAILLE PATTERN DOTS-17
+2842 ; [*0F61.0020.0002] # BRAILLE PATTERN DOTS-27
+2843 ; [*0F62.0020.0002] # BRAILLE PATTERN DOTS-127
+2844 ; [*0F63.0020.0002] # BRAILLE PATTERN DOTS-37
+2845 ; [*0F64.0020.0002] # BRAILLE PATTERN DOTS-137
+2846 ; [*0F65.0020.0002] # BRAILLE PATTERN DOTS-237
+2847 ; [*0F66.0020.0002] # BRAILLE PATTERN DOTS-1237
+2848 ; [*0F67.0020.0002] # BRAILLE PATTERN DOTS-47
+2849 ; [*0F68.0020.0002] # BRAILLE PATTERN DOTS-147
+284A ; [*0F69.0020.0002] # BRAILLE PATTERN DOTS-247
+284B ; [*0F6A.0020.0002] # BRAILLE PATTERN DOTS-1247
+284C ; [*0F6B.0020.0002] # BRAILLE PATTERN DOTS-347
+284D ; [*0F6C.0020.0002] # BRAILLE PATTERN DOTS-1347
+284E ; [*0F6D.0020.0002] # BRAILLE PATTERN DOTS-2347
+284F ; [*0F6E.0020.0002] # BRAILLE PATTERN DOTS-12347
+2850 ; [*0F6F.0020.0002] # BRAILLE PATTERN DOTS-57
+2851 ; [*0F70.0020.0002] # BRAILLE PATTERN DOTS-157
+2852 ; [*0F71.0020.0002] # BRAILLE PATTERN DOTS-257
+2853 ; [*0F72.0020.0002] # BRAILLE PATTERN DOTS-1257
+2854 ; [*0F73.0020.0002] # BRAILLE PATTERN DOTS-357
+2855 ; [*0F74.0020.0002] # BRAILLE PATTERN DOTS-1357
+2856 ; [*0F75.0020.0002] # BRAILLE PATTERN DOTS-2357
+2857 ; [*0F76.0020.0002] # BRAILLE PATTERN DOTS-12357
+2858 ; [*0F77.0020.0002] # BRAILLE PATTERN DOTS-457
+2859 ; [*0F78.0020.0002] # BRAILLE PATTERN DOTS-1457
+285A ; [*0F79.0020.0002] # BRAILLE PATTERN DOTS-2457
+285B ; [*0F7A.0020.0002] # BRAILLE PATTERN DOTS-12457
+285C ; [*0F7B.0020.0002] # BRAILLE PATTERN DOTS-3457
+285D ; [*0F7C.0020.0002] # BRAILLE PATTERN DOTS-13457
+285E ; [*0F7D.0020.0002] # BRAILLE PATTERN DOTS-23457
+285F ; [*0F7E.0020.0002] # BRAILLE PATTERN DOTS-123457
+2860 ; [*0F7F.0020.0002] # BRAILLE PATTERN DOTS-67
+2861 ; [*0F80.0020.0002] # BRAILLE PATTERN DOTS-167
+2862 ; [*0F81.0020.0002] # BRAILLE PATTERN DOTS-267
+2863 ; [*0F82.0020.0002] # BRAILLE PATTERN DOTS-1267
+2864 ; [*0F83.0020.0002] # BRAILLE PATTERN DOTS-367
+2865 ; [*0F84.0020.0002] # BRAILLE PATTERN DOTS-1367
+2866 ; [*0F85.0020.0002] # BRAILLE PATTERN DOTS-2367
+2867 ; [*0F86.0020.0002] # BRAILLE PATTERN DOTS-12367
+2868 ; [*0F87.0020.0002] # BRAILLE PATTERN DOTS-467
+2869 ; [*0F88.0020.0002] # BRAILLE PATTERN DOTS-1467
+286A ; [*0F89.0020.0002] # BRAILLE PATTERN DOTS-2467
+286B ; [*0F8A.0020.0002] # BRAILLE PATTERN DOTS-12467
+286C ; [*0F8B.0020.0002] # BRAILLE PATTERN DOTS-3467
+286D ; [*0F8C.0020.0002] # BRAILLE PATTERN DOTS-13467
+286E ; [*0F8D.0020.0002] # BRAILLE PATTERN DOTS-23467
+286F ; [*0F8E.0020.0002] # BRAILLE PATTERN DOTS-123467
+2870 ; [*0F8F.0020.0002] # BRAILLE PATTERN DOTS-567
+2871 ; [*0F90.0020.0002] # BRAILLE PATTERN DOTS-1567
+2872 ; [*0F91.0020.0002] # BRAILLE PATTERN DOTS-2567
+2873 ; [*0F92.0020.0002] # BRAILLE PATTERN DOTS-12567
+2874 ; [*0F93.0020.0002] # BRAILLE PATTERN DOTS-3567
+2875 ; [*0F94.0020.0002] # BRAILLE PATTERN DOTS-13567
+2876 ; [*0F95.0020.0002] # BRAILLE PATTERN DOTS-23567
+2877 ; [*0F96.0020.0002] # BRAILLE PATTERN DOTS-123567
+2878 ; [*0F97.0020.0002] # BRAILLE PATTERN DOTS-4567
+2879 ; [*0F98.0020.0002] # BRAILLE PATTERN DOTS-14567
+287A ; [*0F99.0020.0002] # BRAILLE PATTERN DOTS-24567
+287B ; [*0F9A.0020.0002] # BRAILLE PATTERN DOTS-124567
+287C ; [*0F9B.0020.0002] # BRAILLE PATTERN DOTS-34567
+287D ; [*0F9C.0020.0002] # BRAILLE PATTERN DOTS-134567
+287E ; [*0F9D.0020.0002] # BRAILLE PATTERN DOTS-234567
+287F ; [*0F9E.0020.0002] # BRAILLE PATTERN DOTS-1234567
+2880 ; [*0F9F.0020.0002] # BRAILLE PATTERN DOTS-8
+2881 ; [*0FA0.0020.0002] # BRAILLE PATTERN DOTS-18
+2882 ; [*0FA1.0020.0002] # BRAILLE PATTERN DOTS-28
+2883 ; [*0FA2.0020.0002] # BRAILLE PATTERN DOTS-128
+2884 ; [*0FA3.0020.0002] # BRAILLE PATTERN DOTS-38
+2885 ; [*0FA4.0020.0002] # BRAILLE PATTERN DOTS-138
+2886 ; [*0FA5.0020.0002] # BRAILLE PATTERN DOTS-238
+2887 ; [*0FA6.0020.0002] # BRAILLE PATTERN DOTS-1238
+2888 ; [*0FA7.0020.0002] # BRAILLE PATTERN DOTS-48
+2889 ; [*0FA8.0020.0002] # BRAILLE PATTERN DOTS-148
+288A ; [*0FA9.0020.0002] # BRAILLE PATTERN DOTS-248
+288B ; [*0FAA.0020.0002] # BRAILLE PATTERN DOTS-1248
+288C ; [*0FAB.0020.0002] # BRAILLE PATTERN DOTS-348
+288D ; [*0FAC.0020.0002] # BRAILLE PATTERN DOTS-1348
+288E ; [*0FAD.0020.0002] # BRAILLE PATTERN DOTS-2348
+288F ; [*0FAE.0020.0002] # BRAILLE PATTERN DOTS-12348
+2890 ; [*0FAF.0020.0002] # BRAILLE PATTERN DOTS-58
+2891 ; [*0FB0.0020.0002] # BRAILLE PATTERN DOTS-158
+2892 ; [*0FB1.0020.0002] # BRAILLE PATTERN DOTS-258
+2893 ; [*0FB2.0020.0002] # BRAILLE PATTERN DOTS-1258
+2894 ; [*0FB3.0020.0002] # BRAILLE PATTERN DOTS-358
+2895 ; [*0FB4.0020.0002] # BRAILLE PATTERN DOTS-1358
+2896 ; [*0FB5.0020.0002] # BRAILLE PATTERN DOTS-2358
+2897 ; [*0FB6.0020.0002] # BRAILLE PATTERN DOTS-12358
+2898 ; [*0FB7.0020.0002] # BRAILLE PATTERN DOTS-458
+2899 ; [*0FB8.0020.0002] # BRAILLE PATTERN DOTS-1458
+289A ; [*0FB9.0020.0002] # BRAILLE PATTERN DOTS-2458
+289B ; [*0FBA.0020.0002] # BRAILLE PATTERN DOTS-12458
+289C ; [*0FBB.0020.0002] # BRAILLE PATTERN DOTS-3458
+289D ; [*0FBC.0020.0002] # BRAILLE PATTERN DOTS-13458
+289E ; [*0FBD.0020.0002] # BRAILLE PATTERN DOTS-23458
+289F ; [*0FBE.0020.0002] # BRAILLE PATTERN DOTS-123458
+28A0 ; [*0FBF.0020.0002] # BRAILLE PATTERN DOTS-68
+28A1 ; [*0FC0.0020.0002] # BRAILLE PATTERN DOTS-168
+28A2 ; [*0FC1.0020.0002] # BRAILLE PATTERN DOTS-268
+28A3 ; [*0FC2.0020.0002] # BRAILLE PATTERN DOTS-1268
+28A4 ; [*0FC3.0020.0002] # BRAILLE PATTERN DOTS-368
+28A5 ; [*0FC4.0020.0002] # BRAILLE PATTERN DOTS-1368
+28A6 ; [*0FC5.0020.0002] # BRAILLE PATTERN DOTS-2368
+28A7 ; [*0FC6.0020.0002] # BRAILLE PATTERN DOTS-12368
+28A8 ; [*0FC7.0020.0002] # BRAILLE PATTERN DOTS-468
+28A9 ; [*0FC8.0020.0002] # BRAILLE PATTERN DOTS-1468
+28AA ; [*0FC9.0020.0002] # BRAILLE PATTERN DOTS-2468
+28AB ; [*0FCA.0020.0002] # BRAILLE PATTERN DOTS-12468
+28AC ; [*0FCB.0020.0002] # BRAILLE PATTERN DOTS-3468
+28AD ; [*0FCC.0020.0002] # BRAILLE PATTERN DOTS-13468
+28AE ; [*0FCD.0020.0002] # BRAILLE PATTERN DOTS-23468
+28AF ; [*0FCE.0020.0002] # BRAILLE PATTERN DOTS-123468
+28B0 ; [*0FCF.0020.0002] # BRAILLE PATTERN DOTS-568
+28B1 ; [*0FD0.0020.0002] # BRAILLE PATTERN DOTS-1568
+28B2 ; [*0FD1.0020.0002] # BRAILLE PATTERN DOTS-2568
+28B3 ; [*0FD2.0020.0002] # BRAILLE PATTERN DOTS-12568
+28B4 ; [*0FD3.0020.0002] # BRAILLE PATTERN DOTS-3568
+28B5 ; [*0FD4.0020.0002] # BRAILLE PATTERN DOTS-13568
+28B6 ; [*0FD5.0020.0002] # BRAILLE PATTERN DOTS-23568
+28B7 ; [*0FD6.0020.0002] # BRAILLE PATTERN DOTS-123568
+28B8 ; [*0FD7.0020.0002] # BRAILLE PATTERN DOTS-4568
+28B9 ; [*0FD8.0020.0002] # BRAILLE PATTERN DOTS-14568
+28BA ; [*0FD9.0020.0002] # BRAILLE PATTERN DOTS-24568
+28BB ; [*0FDA.0020.0002] # BRAILLE PATTERN DOTS-124568
+28BC ; [*0FDB.0020.0002] # BRAILLE PATTERN DOTS-34568
+28BD ; [*0FDC.0020.0002] # BRAILLE PATTERN DOTS-134568
+28BE ; [*0FDD.0020.0002] # BRAILLE PATTERN DOTS-234568
+28BF ; [*0FDE.0020.0002] # BRAILLE PATTERN DOTS-1234568
+28C0 ; [*0FDF.0020.0002] # BRAILLE PATTERN DOTS-78
+28C1 ; [*0FE0.0020.0002] # BRAILLE PATTERN DOTS-178
+28C2 ; [*0FE1.0020.0002] # BRAILLE PATTERN DOTS-278
+28C3 ; [*0FE2.0020.0002] # BRAILLE PATTERN DOTS-1278
+28C4 ; [*0FE3.0020.0002] # BRAILLE PATTERN DOTS-378
+28C5 ; [*0FE4.0020.0002] # BRAILLE PATTERN DOTS-1378
+28C6 ; [*0FE5.0020.0002] # BRAILLE PATTERN DOTS-2378
+28C7 ; [*0FE6.0020.0002] # BRAILLE PATTERN DOTS-12378
+28C8 ; [*0FE7.0020.0002] # BRAILLE PATTERN DOTS-478
+28C9 ; [*0FE8.0020.0002] # BRAILLE PATTERN DOTS-1478
+28CA ; [*0FE9.0020.0002] # BRAILLE PATTERN DOTS-2478
+28CB ; [*0FEA.0020.0002] # BRAILLE PATTERN DOTS-12478
+28CC ; [*0FEB.0020.0002] # BRAILLE PATTERN DOTS-3478
+28CD ; [*0FEC.0020.0002] # BRAILLE PATTERN DOTS-13478
+28CE ; [*0FED.0020.0002] # BRAILLE PATTERN DOTS-23478
+28CF ; [*0FEE.0020.0002] # BRAILLE PATTERN DOTS-123478
+28D0 ; [*0FEF.0020.0002] # BRAILLE PATTERN DOTS-578
+28D1 ; [*0FF0.0020.0002] # BRAILLE PATTERN DOTS-1578
+28D2 ; [*0FF1.0020.0002] # BRAILLE PATTERN DOTS-2578
+28D3 ; [*0FF2.0020.0002] # BRAILLE PATTERN DOTS-12578
+28D4 ; [*0FF3.0020.0002] # BRAILLE PATTERN DOTS-3578
+28D5 ; [*0FF4.0020.0002] # BRAILLE PATTERN DOTS-13578
+28D6 ; [*0FF5.0020.0002] # BRAILLE PATTERN DOTS-23578
+28D7 ; [*0FF6.0020.0002] # BRAILLE PATTERN DOTS-123578
+28D8 ; [*0FF7.0020.0002] # BRAILLE PATTERN DOTS-4578
+28D9 ; [*0FF8.0020.0002] # BRAILLE PATTERN DOTS-14578
+28DA ; [*0FF9.0020.0002] # BRAILLE PATTERN DOTS-24578
+28DB ; [*0FFA.0020.0002] # BRAILLE PATTERN DOTS-124578
+28DC ; [*0FFB.0020.0002] # BRAILLE PATTERN DOTS-34578
+28DD ; [*0FFC.0020.0002] # BRAILLE PATTERN DOTS-134578
+28DE ; [*0FFD.0020.0002] # BRAILLE PATTERN DOTS-234578
+28DF ; [*0FFE.0020.0002] # BRAILLE PATTERN DOTS-1234578
+28E0 ; [*0FFF.0020.0002] # BRAILLE PATTERN DOTS-678
+28E1 ; [*1000.0020.0002] # BRAILLE PATTERN DOTS-1678
+28E2 ; [*1001.0020.0002] # BRAILLE PATTERN DOTS-2678
+28E3 ; [*1002.0020.0002] # BRAILLE PATTERN DOTS-12678
+28E4 ; [*1003.0020.0002] # BRAILLE PATTERN DOTS-3678
+28E5 ; [*1004.0020.0002] # BRAILLE PATTERN DOTS-13678
+28E6 ; [*1005.0020.0002] # BRAILLE PATTERN DOTS-23678
+28E7 ; [*1006.0020.0002] # BRAILLE PATTERN DOTS-123678
+28E8 ; [*1007.0020.0002] # BRAILLE PATTERN DOTS-4678
+28E9 ; [*1008.0020.0002] # BRAILLE PATTERN DOTS-14678
+28EA ; [*1009.0020.0002] # BRAILLE PATTERN DOTS-24678
+28EB ; [*100A.0020.0002] # BRAILLE PATTERN DOTS-124678
+28EC ; [*100B.0020.0002] # BRAILLE PATTERN DOTS-34678
+28ED ; [*100C.0020.0002] # BRAILLE PATTERN DOTS-134678
+28EE ; [*100D.0020.0002] # BRAILLE PATTERN DOTS-234678
+28EF ; [*100E.0020.0002] # BRAILLE PATTERN DOTS-1234678
+28F0 ; [*100F.0020.0002] # BRAILLE PATTERN DOTS-5678
+28F1 ; [*1010.0020.0002] # BRAILLE PATTERN DOTS-15678
+28F2 ; [*1011.0020.0002] # BRAILLE PATTERN DOTS-25678
+28F3 ; [*1012.0020.0002] # BRAILLE PATTERN DOTS-125678
+28F4 ; [*1013.0020.0002] # BRAILLE PATTERN DOTS-35678
+28F5 ; [*1014.0020.0002] # BRAILLE PATTERN DOTS-135678
+28F6 ; [*1015.0020.0002] # BRAILLE PATTERN DOTS-235678
+28F7 ; [*1016.0020.0002] # BRAILLE PATTERN DOTS-1235678
+28F8 ; [*1017.0020.0002] # BRAILLE PATTERN DOTS-45678
+28F9 ; [*1018.0020.0002] # BRAILLE PATTERN DOTS-145678
+28FA ; [*1019.0020.0002] # BRAILLE PATTERN DOTS-245678
+28FB ; [*101A.0020.0002] # BRAILLE PATTERN DOTS-1245678
+28FC ; [*101B.0020.0002] # BRAILLE PATTERN DOTS-345678
+28FD ; [*101C.0020.0002] # BRAILLE PATTERN DOTS-1345678
+28FE ; [*101D.0020.0002] # BRAILLE PATTERN DOTS-2345678
+28FF ; [*101E.0020.0002] # BRAILLE PATTERN DOTS-12345678
+2900 ; [*0C3D.0020.0002] # RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE
+2901 ; [*0C3E.0020.0002] # RIGHTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE
+2902 ; [*0C3F.0020.0002] # LEFTWARDS DOUBLE ARROW WITH VERTICAL STROKE
+2903 ; [*0C40.0020.0002] # RIGHTWARDS DOUBLE ARROW WITH VERTICAL STROKE
+2904 ; [*0C41.0020.0002] # LEFT RIGHT DOUBLE ARROW WITH VERTICAL STROKE
+2905 ; [*0C42.0020.0002] # RIGHTWARDS TWO-HEADED ARROW FROM BAR
+2906 ; [*0C43.0020.0002] # LEFTWARDS DOUBLE ARROW FROM BAR
+2907 ; [*0C44.0020.0002] # RIGHTWARDS DOUBLE ARROW FROM BAR
+2908 ; [*0C45.0020.0002] # DOWNWARDS ARROW WITH HORIZONTAL STROKE
+2909 ; [*0C46.0020.0002] # UPWARDS ARROW WITH HORIZONTAL STROKE
+290A ; [*0C47.0020.0002] # UPWARDS TRIPLE ARROW
+290B ; [*0C48.0020.0002] # DOWNWARDS TRIPLE ARROW
+290C ; [*0C49.0020.0002] # LEFTWARDS DOUBLE DASH ARROW
+290D ; [*0C4A.0020.0002] # RIGHTWARDS DOUBLE DASH ARROW
+290E ; [*0C4B.0020.0002] # LEFTWARDS TRIPLE DASH ARROW
+290F ; [*0C4C.0020.0002] # RIGHTWARDS TRIPLE DASH ARROW
+2910 ; [*0C4D.0020.0002] # RIGHTWARDS TWO-HEADED TRIPLE DASH ARROW
+2911 ; [*0C4E.0020.0002] # RIGHTWARDS ARROW WITH DOTTED STEM
+2912 ; [*0C4F.0020.0002] # UPWARDS ARROW TO BAR
+2913 ; [*0C50.0020.0002] # DOWNWARDS ARROW TO BAR
+2914 ; [*0C51.0020.0002] # RIGHTWARDS ARROW WITH TAIL WITH VERTICAL STROKE
+2915 ; [*0C52.0020.0002] # RIGHTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE
+2916 ; [*0C53.0020.0002] # RIGHTWARDS TWO-HEADED ARROW WITH TAIL
+2917 ; [*0C54.0020.0002] # RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE
+2918 ; [*0C55.0020.0002] # RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE
+2919 ; [*0C56.0020.0002] # LEFTWARDS ARROW-TAIL
+291A ; [*0C57.0020.0002] # RIGHTWARDS ARROW-TAIL
+291B ; [*0C58.0020.0002] # LEFTWARDS DOUBLE ARROW-TAIL
+291C ; [*0C59.0020.0002] # RIGHTWARDS DOUBLE ARROW-TAIL
+291D ; [*0C5A.0020.0002] # LEFTWARDS ARROW TO BLACK DIAMOND
+291E ; [*0C5B.0020.0002] # RIGHTWARDS ARROW TO BLACK DIAMOND
+291F ; [*0C5C.0020.0002] # LEFTWARDS ARROW FROM BAR TO BLACK DIAMOND
+2920 ; [*0C5D.0020.0002] # RIGHTWARDS ARROW FROM BAR TO BLACK DIAMOND
+2921 ; [*0C5E.0020.0002] # NORTH WEST AND SOUTH EAST ARROW
+2922 ; [*0C5F.0020.0002] # NORTH EAST AND SOUTH WEST ARROW
+2923 ; [*0C60.0020.0002] # NORTH WEST ARROW WITH HOOK
+2924 ; [*0C61.0020.0002] # NORTH EAST ARROW WITH HOOK
+2925 ; [*0C62.0020.0002] # SOUTH EAST ARROW WITH HOOK
+2926 ; [*0C63.0020.0002] # SOUTH WEST ARROW WITH HOOK
+2927 ; [*0C64.0020.0002] # NORTH WEST ARROW AND NORTH EAST ARROW
+2928 ; [*0C65.0020.0002] # NORTH EAST ARROW AND SOUTH EAST ARROW
+2929 ; [*0C66.0020.0002] # SOUTH EAST ARROW AND SOUTH WEST ARROW
+292A ; [*0C67.0020.0002] # SOUTH WEST ARROW AND NORTH WEST ARROW
+292B ; [*0C68.0020.0002] # RISING DIAGONAL CROSSING FALLING DIAGONAL
+292C ; [*0C69.0020.0002] # FALLING DIAGONAL CROSSING RISING DIAGONAL
+292D ; [*0C6A.0020.0002] # SOUTH EAST ARROW CROSSING NORTH EAST ARROW
+292E ; [*0C6B.0020.0002] # NORTH EAST ARROW CROSSING SOUTH EAST ARROW
+292F ; [*0C6C.0020.0002] # FALLING DIAGONAL CROSSING NORTH EAST ARROW
+2930 ; [*0C6D.0020.0002] # RISING DIAGONAL CROSSING SOUTH EAST ARROW
+2931 ; [*0C6E.0020.0002] # NORTH EAST ARROW CROSSING NORTH WEST ARROW
+2932 ; [*0C6F.0020.0002] # NORTH WEST ARROW CROSSING NORTH EAST ARROW
+2933 ; [*0C70.0020.0002] # WAVE ARROW POINTING DIRECTLY RIGHT
+2934 ; [*0C71.0020.0002] # ARROW POINTING RIGHTWARDS THEN CURVING UPWARDS
+2935 ; [*0C72.0020.0002] # ARROW POINTING RIGHTWARDS THEN CURVING DOWNWARDS
+2936 ; [*0C73.0020.0002] # ARROW POINTING DOWNWARDS THEN CURVING LEFTWARDS
+2937 ; [*0C74.0020.0002] # ARROW POINTING DOWNWARDS THEN CURVING RIGHTWARDS
+2938 ; [*0C75.0020.0002] # RIGHT-SIDE ARC CLOCKWISE ARROW
+2939 ; [*0C76.0020.0002] # LEFT-SIDE ARC ANTICLOCKWISE ARROW
+293A ; [*0C77.0020.0002] # TOP ARC ANTICLOCKWISE ARROW
+293B ; [*0C78.0020.0002] # BOTTOM ARC ANTICLOCKWISE ARROW
+293C ; [*0C79.0020.0002] # TOP ARC CLOCKWISE ARROW WITH MINUS
+293D ; [*0C7A.0020.0002] # TOP ARC ANTICLOCKWISE ARROW WITH PLUS
+293E ; [*0C7B.0020.0002] # LOWER RIGHT SEMICIRCULAR CLOCKWISE ARROW
+293F ; [*0C7C.0020.0002] # LOWER LEFT SEMICIRCULAR ANTICLOCKWISE ARROW
+2940 ; [*0C7D.0020.0002] # ANTICLOCKWISE CLOSED CIRCLE ARROW
+2941 ; [*0C7E.0020.0002] # CLOCKWISE CLOSED CIRCLE ARROW
+2942 ; [*0C7F.0020.0002] # RIGHTWARDS ARROW ABOVE SHORT LEFTWARDS ARROW
+2943 ; [*0C80.0020.0002] # LEFTWARDS ARROW ABOVE SHORT RIGHTWARDS ARROW
+2944 ; [*0C81.0020.0002] # SHORT RIGHTWARDS ARROW ABOVE LEFTWARDS ARROW
+2945 ; [*0C82.0020.0002] # RIGHTWARDS ARROW WITH PLUS BELOW
+2946 ; [*0C83.0020.0002] # LEFTWARDS ARROW WITH PLUS BELOW
+2947 ; [*0C84.0020.0002] # RIGHTWARDS ARROW THROUGH X
+2948 ; [*0C85.0020.0002] # LEFT RIGHT ARROW THROUGH SMALL CIRCLE
+2949 ; [*0C86.0020.0002] # UPWARDS TWO-HEADED ARROW FROM SMALL CIRCLE
+294A ; [*0C87.0020.0002] # LEFT BARB UP RIGHT BARB DOWN HARPOON
+294B ; [*0C88.0020.0002] # LEFT BARB DOWN RIGHT BARB UP HARPOON
+294C ; [*0C89.0020.0002] # UP BARB RIGHT DOWN BARB LEFT HARPOON
+294D ; [*0C8A.0020.0002] # UP BARB LEFT DOWN BARB RIGHT HARPOON
+294E ; [*0C8B.0020.0002] # LEFT BARB UP RIGHT BARB UP HARPOON
+294F ; [*0C8C.0020.0002] # UP BARB RIGHT DOWN BARB RIGHT HARPOON
+2950 ; [*0C8D.0020.0002] # LEFT BARB DOWN RIGHT BARB DOWN HARPOON
+2951 ; [*0C8E.0020.0002] # UP BARB LEFT DOWN BARB LEFT HARPOON
+2952 ; [*0C8F.0020.0002] # LEFTWARDS HARPOON WITH BARB UP TO BAR
+2953 ; [*0C90.0020.0002] # RIGHTWARDS HARPOON WITH BARB UP TO BAR
+2954 ; [*0C91.0020.0002] # UPWARDS HARPOON WITH BARB RIGHT TO BAR
+2955 ; [*0C92.0020.0002] # DOWNWARDS HARPOON WITH BARB RIGHT TO BAR
+2956 ; [*0C93.0020.0002] # LEFTWARDS HARPOON WITH BARB DOWN TO BAR
+2957 ; [*0C94.0020.0002] # RIGHTWARDS HARPOON WITH BARB DOWN TO BAR
+2958 ; [*0C95.0020.0002] # UPWARDS HARPOON WITH BARB LEFT TO BAR
+2959 ; [*0C96.0020.0002] # DOWNWARDS HARPOON WITH BARB LEFT TO BAR
+295A ; [*0C97.0020.0002] # LEFTWARDS HARPOON WITH BARB UP FROM BAR
+295B ; [*0C98.0020.0002] # RIGHTWARDS HARPOON WITH BARB UP FROM BAR
+295C ; [*0C99.0020.0002] # UPWARDS HARPOON WITH BARB RIGHT FROM BAR
+295D ; [*0C9A.0020.0002] # DOWNWARDS HARPOON WITH BARB RIGHT FROM BAR
+295E ; [*0C9B.0020.0002] # LEFTWARDS HARPOON WITH BARB DOWN FROM BAR
+295F ; [*0C9C.0020.0002] # RIGHTWARDS HARPOON WITH BARB DOWN FROM BAR
+2960 ; [*0C9D.0020.0002] # UPWARDS HARPOON WITH BARB LEFT FROM BAR
+2961 ; [*0C9E.0020.0002] # DOWNWARDS HARPOON WITH BARB LEFT FROM BAR
+2962 ; [*0C9F.0020.0002] # LEFTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB DOWN
+2963 ; [*0CA0.0020.0002] # UPWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT
+2964 ; [*0CA1.0020.0002] # RIGHTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB DOWN
+2965 ; [*0CA2.0020.0002] # DOWNWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT
+2966 ; [*0CA3.0020.0002] # LEFTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB UP
+2967 ; [*0CA4.0020.0002] # LEFTWARDS HARPOON WITH BARB DOWN ABOVE RIGHTWARDS HARPOON WITH BARB DOWN
+2968 ; [*0CA5.0020.0002] # RIGHTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB UP
+2969 ; [*0CA6.0020.0002] # RIGHTWARDS HARPOON WITH BARB DOWN ABOVE LEFTWARDS HARPOON WITH BARB DOWN
+296A ; [*0CA7.0020.0002] # LEFTWARDS HARPOON WITH BARB UP ABOVE LONG DASH
+296B ; [*0CA8.0020.0002] # LEFTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH
+296C ; [*0CA9.0020.0002] # RIGHTWARDS HARPOON WITH BARB UP ABOVE LONG DASH
+296D ; [*0CAA.0020.0002] # RIGHTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH
+296E ; [*0CAB.0020.0002] # UPWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT
+296F ; [*0CAC.0020.0002] # DOWNWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT
+2970 ; [*0CAD.0020.0002] # RIGHT DOUBLE ARROW WITH ROUNDED HEAD
+2971 ; [*0CAE.0020.0002] # EQUALS SIGN ABOVE RIGHTWARDS ARROW
+2972 ; [*0CAF.0020.0002] # TILDE OPERATOR ABOVE RIGHTWARDS ARROW
+2973 ; [*0CB0.0020.0002] # LEFTWARDS ARROW ABOVE TILDE OPERATOR
+2974 ; [*0CB1.0020.0002] # RIGHTWARDS ARROW ABOVE TILDE OPERATOR
+2975 ; [*0CB2.0020.0002] # RIGHTWARDS ARROW ABOVE ALMOST EQUAL TO
+2976 ; [*0CB3.0020.0002] # LESS-THAN ABOVE LEFTWARDS ARROW
+2977 ; [*0CB4.0020.0002] # LEFTWARDS ARROW THROUGH LESS-THAN
+2978 ; [*0CB5.0020.0002] # GREATER-THAN ABOVE RIGHTWARDS ARROW
+2979 ; [*0CB6.0020.0002] # SUBSET ABOVE RIGHTWARDS ARROW
+297A ; [*0CB7.0020.0002] # LEFTWARDS ARROW THROUGH SUBSET
+297B ; [*0CB8.0020.0002] # SUPERSET ABOVE LEFTWARDS ARROW
+297C ; [*0CB9.0020.0002] # LEFT FISH TAIL
+297D ; [*0CBA.0020.0002] # RIGHT FISH TAIL
+297E ; [*0CBB.0020.0002] # UP FISH TAIL
+297F ; [*0CBC.0020.0002] # DOWN FISH TAIL
+2980 ; [*0CBD.0020.0002] # TRIPLE VERTICAL BAR DELIMITER
+2981 ; [*0CBE.0020.0002] # Z NOTATION SPOT
+2982 ; [*0CBF.0020.0002] # Z NOTATION TYPE COLON
+2983 ; [*0348.0020.0002] # LEFT WHITE CURLY BRACKET
+2984 ; [*0349.0020.0002] # RIGHT WHITE CURLY BRACKET
+2985 ; [*034A.0020.0002] # LEFT WHITE PARENTHESIS
+2986 ; [*034B.0020.0002] # RIGHT WHITE PARENTHESIS
+2987 ; [*034C.0020.0002] # Z NOTATION LEFT IMAGE BRACKET
+2988 ; [*034D.0020.0002] # Z NOTATION RIGHT IMAGE BRACKET
+2989 ; [*034E.0020.0002] # Z NOTATION LEFT BINDING BRACKET
+298A ; [*034F.0020.0002] # Z NOTATION RIGHT BINDING BRACKET
+298B ; [*0350.0020.0002] # LEFT SQUARE BRACKET WITH UNDERBAR
+298C ; [*0351.0020.0002] # RIGHT SQUARE BRACKET WITH UNDERBAR
+298D ; [*0352.0020.0002] # LEFT SQUARE BRACKET WITH TICK IN TOP CORNER
+298E ; [*0353.0020.0002] # RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+298F ; [*0354.0020.0002] # LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+2990 ; [*0355.0020.0002] # RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER
+2991 ; [*0356.0020.0002] # LEFT ANGLE BRACKET WITH DOT
+2992 ; [*0357.0020.0002] # RIGHT ANGLE BRACKET WITH DOT
+2993 ; [*0358.0020.0002] # LEFT ARC LESS-THAN BRACKET
+2994 ; [*0359.0020.0002] # RIGHT ARC GREATER-THAN BRACKET
+2995 ; [*035A.0020.0002] # DOUBLE LEFT ARC GREATER-THAN BRACKET
+2996 ; [*035B.0020.0002] # DOUBLE RIGHT ARC LESS-THAN BRACKET
+2997 ; [*035C.0020.0002] # LEFT BLACK TORTOISE SHELL BRACKET
+2998 ; [*035D.0020.0002] # RIGHT BLACK TORTOISE SHELL BRACKET
+2999 ; [*0CC0.0020.0002] # DOTTED FENCE
+299A ; [*0CC1.0020.0002] # VERTICAL ZIGZAG LINE
+299B ; [*0CC2.0020.0002] # MEASURED ANGLE OPENING LEFT
+299C ; [*0CC3.0020.0002] # RIGHT ANGLE VARIANT WITH SQUARE
+299D ; [*0CC4.0020.0002] # MEASURED RIGHT ANGLE WITH DOT
+299E ; [*0CC5.0020.0002] # ANGLE WITH S INSIDE
+299F ; [*0CC6.0020.0002] # ACUTE ANGLE
+29A0 ; [*0CC7.0020.0002] # SPHERICAL ANGLE OPENING LEFT
+29A1 ; [*0CC8.0020.0002] # SPHERICAL ANGLE OPENING UP
+29A2 ; [*0CC9.0020.0002] # TURNED ANGLE
+29A3 ; [*0CCA.0020.0002] # REVERSED ANGLE
+29A4 ; [*0CCB.0020.0002] # ANGLE WITH UNDERBAR
+29A5 ; [*0CCC.0020.0002] # REVERSED ANGLE WITH UNDERBAR
+29A6 ; [*0CCD.0020.0002] # OBLIQUE ANGLE OPENING UP
+29A7 ; [*0CCE.0020.0002] # OBLIQUE ANGLE OPENING DOWN
+29A8 ; [*0CCF.0020.0002] # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND RIGHT
+29A9 ; [*0CD0.0020.0002] # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND LEFT
+29AA ; [*0CD1.0020.0002] # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND RIGHT
+29AB ; [*0CD2.0020.0002] # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND LEFT
+29AC ; [*0CD3.0020.0002] # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND UP
+29AD ; [*0CD4.0020.0002] # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND UP
+29AE ; [*0CD5.0020.0002] # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND DOWN
+29AF ; [*0CD6.0020.0002] # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND DOWN
+29B0 ; [*0CD7.0020.0002] # REVERSED EMPTY SET
+29B1 ; [*0CD8.0020.0002] # EMPTY SET WITH OVERBAR
+29B2 ; [*0CD9.0020.0002] # EMPTY SET WITH SMALL CIRCLE ABOVE
+29B3 ; [*0CDA.0020.0002] # EMPTY SET WITH RIGHT ARROW ABOVE
+29B4 ; [*0CDB.0020.0002] # EMPTY SET WITH LEFT ARROW ABOVE
+29B5 ; [*0CDC.0020.0002] # CIRCLE WITH HORIZONTAL BAR
+29B6 ; [*0CDD.0020.0002] # CIRCLED VERTICAL BAR
+29B7 ; [*0CDE.0020.0002] # CIRCLED PARALLEL
+29B8 ; [*0CDF.0020.0002] # CIRCLED REVERSE SOLIDUS
+29B9 ; [*0CE0.0020.0002] # CIRCLED PERPENDICULAR
+29BA ; [*0CE1.0020.0002] # CIRCLE DIVIDED BY HORIZONTAL BAR AND TOP HALF DIVIDED BY VERTICAL BAR
+29BB ; [*0CE2.0020.0002] # CIRCLE WITH SUPERIMPOSED X
+29BC ; [*0CE3.0020.0002] # CIRCLED ANTICLOCKWISE-ROTATED DIVISION SIGN
+29BD ; [*0CE4.0020.0002] # UP ARROW THROUGH CIRCLE
+29BE ; [*0CE5.0020.0002] # CIRCLED WHITE BULLET
+29BF ; [*0CE6.0020.0002] # CIRCLED BULLET
+29C0 ; [*0CE7.0020.0002] # CIRCLED LESS-THAN
+29C1 ; [*0CE8.0020.0002] # CIRCLED GREATER-THAN
+29C2 ; [*0CE9.0020.0002] # CIRCLE WITH SMALL CIRCLE TO THE RIGHT
+29C3 ; [*0CEA.0020.0002] # CIRCLE WITH TWO HORIZONTAL STROKES TO THE RIGHT
+29C4 ; [*0CEB.0020.0002] # SQUARED RISING DIAGONAL SLASH
+29C5 ; [*0CEC.0020.0002] # SQUARED FALLING DIAGONAL SLASH
+29C6 ; [*0CED.0020.0002] # SQUARED ASTERISK
+29C7 ; [*0CEE.0020.0002] # SQUARED SMALL CIRCLE
+29C8 ; [*0CEF.0020.0002] # SQUARED SQUARE
+29C9 ; [*0CF0.0020.0002] # TWO JOINED SQUARES
+29CA ; [*0CF1.0020.0002] # TRIANGLE WITH DOT ABOVE
+29CB ; [*0CF2.0020.0002] # TRIANGLE WITH UNDERBAR
+29CC ; [*0CF3.0020.0002] # S IN TRIANGLE
+29CD ; [*0CF4.0020.0002] # TRIANGLE WITH SERIFS AT BOTTOM
+29CE ; [*0CF5.0020.0002] # RIGHT TRIANGLE ABOVE LEFT TRIANGLE
+29CF ; [*0CF6.0020.0002] # LEFT TRIANGLE BESIDE VERTICAL BAR
+29D0 ; [*0CF7.0020.0002] # VERTICAL BAR BESIDE RIGHT TRIANGLE
+29D1 ; [*0CF8.0020.0002] # BOWTIE WITH LEFT HALF BLACK
+29D2 ; [*0CF9.0020.0002] # BOWTIE WITH RIGHT HALF BLACK
+29D3 ; [*0CFA.0020.0002] # BLACK BOWTIE
+29D4 ; [*0CFB.0020.0002] # TIMES WITH LEFT HALF BLACK
+29D5 ; [*0CFC.0020.0002] # TIMES WITH RIGHT HALF BLACK
+29D6 ; [*0CFD.0020.0002] # WHITE HOURGLASS
+29D7 ; [*0CFE.0020.0002] # BLACK HOURGLASS
+29D8 ; [*03AA.0020.0002] # LEFT WIGGLY FENCE
+29D9 ; [*03AB.0020.0002] # RIGHT WIGGLY FENCE
+29DA ; [*03AC.0020.0002] # LEFT DOUBLE WIGGLY FENCE
+29DB ; [*03AD.0020.0002] # RIGHT DOUBLE WIGGLY FENCE
+29DC ; [*0CFF.0020.0002] # INCOMPLETE INFINITY
+29DD ; [*0D00.0020.0002] # TIE OVER INFINITY
+29DE ; [*0D01.0020.0002] # INFINITY NEGATED WITH VERTICAL BAR
+29DF ; [*0D02.0020.0002] # DOUBLE-ENDED MULTIMAP
+29E0 ; [*0D03.0020.0002] # SQUARE WITH CONTOURED OUTLINE
+29E1 ; [*0D04.0020.0002] # INCREASES AS
+29E2 ; [*0D05.0020.0002] # SHUFFLE PRODUCT
+29E3 ; [*0D06.0020.0002] # EQUALS SIGN AND SLANTED PARALLEL
+29E4 ; [*0D07.0020.0002] # EQUALS SIGN AND SLANTED PARALLEL WITH TILDE ABOVE
+29E5 ; [*0D08.0020.0002] # IDENTICAL TO AND SLANTED PARALLEL
+29E6 ; [*0D09.0020.0002] # GLEICH STARK
+29E7 ; [*0D0A.0020.0002] # THERMODYNAMIC
+29E8 ; [*0D0B.0020.0002] # DOWN-POINTING TRIANGLE WITH LEFT HALF BLACK
+29E9 ; [*0D0C.0020.0002] # DOWN-POINTING TRIANGLE WITH RIGHT HALF BLACK
+29EA ; [*0D0D.0020.0002] # BLACK DIAMOND WITH DOWN ARROW
+29EB ; [*0D0E.0020.0002] # BLACK LOZENGE
+29EC ; [*0D0F.0020.0002] # WHITE CIRCLE WITH DOWN ARROW
+29ED ; [*0D10.0020.0002] # BLACK CIRCLE WITH DOWN ARROW
+29EE ; [*0D11.0020.0002] # ERROR-BARRED WHITE SQUARE
+29EF ; [*0D12.0020.0002] # ERROR-BARRED BLACK SQUARE
+29F0 ; [*0D13.0020.0002] # ERROR-BARRED WHITE DIAMOND
+29F1 ; [*0D14.0020.0002] # ERROR-BARRED BLACK DIAMOND
+29F2 ; [*0D15.0020.0002] # ERROR-BARRED WHITE CIRCLE
+29F3 ; [*0D16.0020.0002] # ERROR-BARRED BLACK CIRCLE
+29F4 ; [*0D17.0020.0002] # RULE-DELAYED
+29F5 ; [*0D18.0020.0002] # REVERSE SOLIDUS OPERATOR
+29F6 ; [*0D19.0020.0002] # SOLIDUS WITH OVERBAR
+29F7 ; [*0D1A.0020.0002] # REVERSE SOLIDUS WITH HORIZONTAL STROKE
+29F8 ; [*0D1B.0020.0002] # BIG SOLIDUS
+29F9 ; [*0D1C.0020.0002] # BIG REVERSE SOLIDUS
+29FA ; [*0D1D.0020.0002] # DOUBLE PLUS
+29FB ; [*0D1E.0020.0002] # TRIPLE PLUS
+29FC ; [*0346.0020.0002] # LEFT-POINTING CURVED ANGLE BRACKET
+29FD ; [*0347.0020.0002] # RIGHT-POINTING CURVED ANGLE BRACKET
+29FE ; [*0D1F.0020.0002] # TINY
+29FF ; [*0D20.0020.0002] # MINY
+2A00 ; [*0D21.0020.0002] # N-ARY CIRCLED DOT OPERATOR
+2A01 ; [*0D22.0020.0002] # N-ARY CIRCLED PLUS OPERATOR
+2A02 ; [*0D23.0020.0002] # N-ARY CIRCLED TIMES OPERATOR
+2A03 ; [*0D24.0020.0002] # N-ARY UNION OPERATOR WITH DOT
+2A04 ; [*0D25.0020.0002] # N-ARY UNION OPERATOR WITH PLUS
+2A05 ; [*0D26.0020.0002] # N-ARY SQUARE INTERSECTION OPERATOR
+2A06 ; [*0D27.0020.0002] # N-ARY SQUARE UNION OPERATOR
+2A07 ; [*0D28.0020.0002] # TWO LOGICAL AND OPERATOR
+2A08 ; [*0D29.0020.0002] # TWO LOGICAL OR OPERATOR
+2A09 ; [*0D2A.0020.0002] # N-ARY TIMES OPERATOR
+2A0A ; [*0D2B.0020.0002] # MODULO TWO SUM
+2A0B ; [*0D2C.0020.0002] # SUMMATION WITH INTEGRAL
+2A0C ; [*06C3.0020.0004][*06C3.0020.0004][*06C3.0020.0004][*06C3.0020.0004] # QUADRUPLE INTEGRAL OPERATOR
+2A0D ; [*0D2D.0020.0002] # FINITE PART INTEGRAL
+2A0E ; [*0D2E.0020.0002] # INTEGRAL WITH DOUBLE STROKE
+2A0F ; [*0D2F.0020.0002] # INTEGRAL AVERAGE WITH SLASH
+2A10 ; [*0D30.0020.0002] # CIRCULATION FUNCTION
+2A11 ; [*0D31.0020.0002] # ANTICLOCKWISE INTEGRATION
+2A12 ; [*0D32.0020.0002] # LINE INTEGRATION WITH RECTANGULAR PATH AROUND POLE
+2A13 ; [*0D33.0020.0002] # LINE INTEGRATION WITH SEMICIRCULAR PATH AROUND POLE
+2A14 ; [*0D34.0020.0002] # LINE INTEGRATION NOT INCLUDING THE POLE
+2A15 ; [*0D35.0020.0002] # INTEGRAL AROUND A POINT OPERATOR
+2A16 ; [*0D36.0020.0002] # QUATERNION INTEGRAL OPERATOR
+2A17 ; [*0D37.0020.0002] # INTEGRAL WITH LEFTWARDS ARROW WITH HOOK
+2A18 ; [*0D38.0020.0002] # INTEGRAL WITH TIMES SIGN
+2A19 ; [*0D39.0020.0002] # INTEGRAL WITH INTERSECTION
+2A1A ; [*0D3A.0020.0002] # INTEGRAL WITH UNION
+2A1B ; [*0D3B.0020.0002] # INTEGRAL WITH OVERBAR
+2A1C ; [*0D3C.0020.0002] # INTEGRAL WITH UNDERBAR
+2A1D ; [*0D3D.0020.0002] # JOIN
+2A1E ; [*0D3E.0020.0002] # LARGE LEFT TRIANGLE OPERATOR
+2A1F ; [*0D3F.0020.0002] # Z NOTATION SCHEMA COMPOSITION
+2A20 ; [*0D40.0020.0002] # Z NOTATION SCHEMA PIPING
+2A21 ; [*0D41.0020.0002] # Z NOTATION SCHEMA PROJECTION
+2A22 ; [*0D42.0020.0002] # PLUS SIGN WITH SMALL CIRCLE ABOVE
+2A23 ; [*0D43.0020.0002] # PLUS SIGN WITH CIRCUMFLEX ACCENT ABOVE
+2A24 ; [*0D44.0020.0002] # PLUS SIGN WITH TILDE ABOVE
+2A25 ; [*0D45.0020.0002] # PLUS SIGN WITH DOT BELOW
+2A26 ; [*0D46.0020.0002] # PLUS SIGN WITH TILDE BELOW
+2A27 ; [*0D47.0020.0002] # PLUS SIGN WITH SUBSCRIPT TWO
+2A28 ; [*0D48.0020.0002] # PLUS SIGN WITH BLACK TRIANGLE
+2A29 ; [*0D49.0020.0002] # MINUS SIGN WITH COMMA ABOVE
+2A2A ; [*0D4A.0020.0002] # MINUS SIGN WITH DOT BELOW
+2A2B ; [*0D4B.0020.0002] # MINUS SIGN WITH FALLING DOTS
+2A2C ; [*0D4C.0020.0002] # MINUS SIGN WITH RISING DOTS
+2A2D ; [*0D4D.0020.0002] # PLUS SIGN IN LEFT HALF CIRCLE
+2A2E ; [*0D4E.0020.0002] # PLUS SIGN IN RIGHT HALF CIRCLE
+2A2F ; [*0D4F.0020.0002] # VECTOR OR CROSS PRODUCT
+2A30 ; [*0D50.0020.0002] # MULTIPLICATION SIGN WITH DOT ABOVE
+2A31 ; [*0D51.0020.0002] # MULTIPLICATION SIGN WITH UNDERBAR
+2A32 ; [*0D52.0020.0002] # SEMIDIRECT PRODUCT WITH BOTTOM CLOSED
+2A33 ; [*0D53.0020.0002] # SMASH PRODUCT
+2A34 ; [*0D54.0020.0002] # MULTIPLICATION SIGN IN LEFT HALF CIRCLE
+2A35 ; [*0D55.0020.0002] # MULTIPLICATION SIGN IN RIGHT HALF CIRCLE
+2A36 ; [*0D56.0020.0002] # CIRCLED MULTIPLICATION SIGN WITH CIRCUMFLEX ACCENT
+2A37 ; [*0D57.0020.0002] # MULTIPLICATION SIGN IN DOUBLE CIRCLE
+2A38 ; [*0D58.0020.0002] # CIRCLED DIVISION SIGN
+2A39 ; [*0D59.0020.0002] # PLUS SIGN IN TRIANGLE
+2A3A ; [*0D5A.0020.0002] # MINUS SIGN IN TRIANGLE
+2A3B ; [*0D5B.0020.0002] # MULTIPLICATION SIGN IN TRIANGLE
+2A3C ; [*0D5C.0020.0002] # INTERIOR PRODUCT
+2A3D ; [*0D5D.0020.0002] # RIGHTHAND INTERIOR PRODUCT
+2A3E ; [*0D5E.0020.0002] # Z NOTATION RELATIONAL COMPOSITION
+2A3F ; [*0D5F.0020.0002] # AMALGAMATION OR COPRODUCT
+2A40 ; [*0D60.0020.0002] # INTERSECTION WITH DOT
+2A41 ; [*0D61.0020.0002] # UNION WITH MINUS SIGN
+2A42 ; [*0D62.0020.0002] # UNION WITH OVERBAR
+2A43 ; [*0D63.0020.0002] # INTERSECTION WITH OVERBAR
+2A44 ; [*0D64.0020.0002] # INTERSECTION WITH LOGICAL AND
+2A45 ; [*0D65.0020.0002] # UNION WITH LOGICAL OR
+2A46 ; [*0D66.0020.0002] # UNION ABOVE INTERSECTION
+2A47 ; [*0D67.0020.0002] # INTERSECTION ABOVE UNION
+2A48 ; [*0D68.0020.0002] # UNION ABOVE BAR ABOVE INTERSECTION
+2A49 ; [*0D69.0020.0002] # INTERSECTION ABOVE BAR ABOVE UNION
+2A4A ; [*0D6A.0020.0002] # UNION BESIDE AND JOINED WITH UNION
+2A4B ; [*0D6B.0020.0002] # INTERSECTION BESIDE AND JOINED WITH INTERSECTION
+2A4C ; [*0D6C.0020.0002] # CLOSED UNION WITH SERIFS
+2A4D ; [*0D6D.0020.0002] # CLOSED INTERSECTION WITH SERIFS
+2A4E ; [*0D6E.0020.0002] # DOUBLE SQUARE INTERSECTION
+2A4F ; [*0D6F.0020.0002] # DOUBLE SQUARE UNION
+2A50 ; [*0D70.0020.0002] # CLOSED UNION WITH SERIFS AND SMASH PRODUCT
+2A51 ; [*0D71.0020.0002] # LOGICAL AND WITH DOT ABOVE
+2A52 ; [*0D72.0020.0002] # LOGICAL OR WITH DOT ABOVE
+2A53 ; [*0D73.0020.0002] # DOUBLE LOGICAL AND
+2A54 ; [*0D74.0020.0002] # DOUBLE LOGICAL OR
+2A55 ; [*0D75.0020.0002] # TWO INTERSECTING LOGICAL AND
+2A56 ; [*0D76.0020.0002] # TWO INTERSECTING LOGICAL OR
+2A57 ; [*0D77.0020.0002] # SLOPING LARGE OR
+2A58 ; [*0D78.0020.0002] # SLOPING LARGE AND
+2A59 ; [*0D79.0020.0002] # LOGICAL OR OVERLAPPING LOGICAL AND
+2A5A ; [*0D7A.0020.0002] # LOGICAL AND WITH MIDDLE STEM
+2A5B ; [*0D7B.0020.0002] # LOGICAL OR WITH MIDDLE STEM
+2A5C ; [*0D7C.0020.0002] # LOGICAL AND WITH HORIZONTAL DASH
+2A5D ; [*0D7D.0020.0002] # LOGICAL OR WITH HORIZONTAL DASH
+2A5E ; [*0D7E.0020.0002] # LOGICAL AND WITH DOUBLE OVERBAR
+2A5F ; [*0D7F.0020.0002] # LOGICAL AND WITH UNDERBAR
+2A60 ; [*0D80.0020.0002] # LOGICAL AND WITH DOUBLE UNDERBAR
+2A61 ; [*0D81.0020.0002] # SMALL VEE WITH UNDERBAR
+2A62 ; [*0D82.0020.0002] # LOGICAL OR WITH DOUBLE OVERBAR
+2A63 ; [*0D83.0020.0002] # LOGICAL OR WITH DOUBLE UNDERBAR
+2A64 ; [*0D84.0020.0002] # Z NOTATION DOMAIN ANTIRESTRICTION
+2A65 ; [*0D85.0020.0002] # Z NOTATION RANGE ANTIRESTRICTION
+2A66 ; [*0D86.0020.0002] # EQUALS SIGN WITH DOT BELOW
+2A67 ; [*0D87.0020.0002] # IDENTICAL WITH DOT ABOVE
+2A68 ; [*0D88.0020.0002] # TRIPLE HORIZONTAL BAR WITH DOUBLE VERTICAL STROKE
+2A69 ; [*0D89.0020.0002] # TRIPLE HORIZONTAL BAR WITH TRIPLE VERTICAL STROKE
+2A6A ; [*0D8A.0020.0002] # TILDE OPERATOR WITH DOT ABOVE
+2A6B ; [*0D8B.0020.0002] # TILDE OPERATOR WITH RISING DOTS
+2A6C ; [*0D8C.0020.0002] # SIMILAR MINUS SIMILAR
+2A6D ; [*0D8D.0020.0002] # CONGRUENT WITH DOT ABOVE
+2A6E ; [*0D8E.0020.0002] # EQUALS WITH ASTERISK
+2A6F ; [*0D8F.0020.0002] # ALMOST EQUAL TO WITH CIRCUMFLEX ACCENT
+2A70 ; [*0D90.0020.0002] # APPROXIMATELY EQUAL OR EQUAL TO
+2A71 ; [*0D91.0020.0002] # EQUALS SIGN ABOVE PLUS SIGN
+2A72 ; [*0D92.0020.0002] # PLUS SIGN ABOVE EQUALS SIGN
+2A73 ; [*0D93.0020.0002] # EQUALS SIGN ABOVE TILDE OPERATOR
+2A74 ; [*0241.0020.0004][*0241.0020.0004][*06A2.0020.0004] # DOUBLE COLON EQUAL
+2A75 ; [*06A2.0020.0004][*06A2.0020.0004] # TWO CONSECUTIVE EQUALS SIGNS
+2A76 ; [*06A2.0020.0004][*06A2.0020.0004][*06A2.0020.0004] # THREE CONSECUTIVE EQUALS SIGNS
+2A77 ; [*0D94.0020.0002] # EQUALS SIGN WITH TWO DOTS ABOVE AND TWO DOTS BELOW
+2A78 ; [*0D95.0020.0002] # EQUIVALENT WITH FOUR DOTS ABOVE
+2A79 ; [*0D96.0020.0002] # LESS-THAN WITH CIRCLE INSIDE
+2A7A ; [*0D97.0020.0002] # GREATER-THAN WITH CIRCLE INSIDE
+2A7B ; [*0D98.0020.0002] # LESS-THAN WITH QUESTION MARK ABOVE
+2A7C ; [*0D99.0020.0002] # GREATER-THAN WITH QUESTION MARK ABOVE
+2A7D ; [*0D9A.0020.0002] # LESS-THAN OR SLANTED EQUAL TO
+2A7E ; [*0D9B.0020.0002] # GREATER-THAN OR SLANTED EQUAL TO
+2A7F ; [*0D9C.0020.0002] # LESS-THAN OR SLANTED EQUAL TO WITH DOT INSIDE
+2A80 ; [*0D9D.0020.0002] # GREATER-THAN OR SLANTED EQUAL TO WITH DOT INSIDE
+2A81 ; [*0D9E.0020.0002] # LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE
+2A82 ; [*0D9F.0020.0002] # GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE
+2A83 ; [*0DA0.0020.0002] # LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE RIGHT
+2A84 ; [*0DA1.0020.0002] # GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE LEFT
+2A85 ; [*0DA2.0020.0002] # LESS-THAN OR APPROXIMATE
+2A86 ; [*0DA3.0020.0002] # GREATER-THAN OR APPROXIMATE
+2A87 ; [*0DA4.0020.0002] # LESS-THAN AND SINGLE-LINE NOT EQUAL TO
+2A88 ; [*0DA5.0020.0002] # GREATER-THAN AND SINGLE-LINE NOT EQUAL TO
+2A89 ; [*0DA6.0020.0002] # LESS-THAN AND NOT APPROXIMATE
+2A8A ; [*0DA7.0020.0002] # GREATER-THAN AND NOT APPROXIMATE
+2A8B ; [*0DA8.0020.0002] # LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN
+2A8C ; [*0DA9.0020.0002] # GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN
+2A8D ; [*0DAA.0020.0002] # LESS-THAN ABOVE SIMILAR OR EQUAL
+2A8E ; [*0DAB.0020.0002] # GREATER-THAN ABOVE SIMILAR OR EQUAL
+2A8F ; [*0DAC.0020.0002] # LESS-THAN ABOVE SIMILAR ABOVE GREATER-THAN
+2A90 ; [*0DAD.0020.0002] # GREATER-THAN ABOVE SIMILAR ABOVE LESS-THAN
+2A91 ; [*0DAE.0020.0002] # LESS-THAN ABOVE GREATER-THAN ABOVE DOUBLE-LINE EQUAL
+2A92 ; [*0DAF.0020.0002] # GREATER-THAN ABOVE LESS-THAN ABOVE DOUBLE-LINE EQUAL
+2A93 ; [*0DB0.0020.0002] # LESS-THAN ABOVE SLANTED EQUAL ABOVE GREATER-THAN ABOVE SLANTED EQUAL
+2A94 ; [*0DB1.0020.0002] # GREATER-THAN ABOVE SLANTED EQUAL ABOVE LESS-THAN ABOVE SLANTED EQUAL
+2A95 ; [*0DB2.0020.0002] # SLANTED EQUAL TO OR LESS-THAN
+2A96 ; [*0DB3.0020.0002] # SLANTED EQUAL TO OR GREATER-THAN
+2A97 ; [*0DB4.0020.0002] # SLANTED EQUAL TO OR LESS-THAN WITH DOT INSIDE
+2A98 ; [*0DB5.0020.0002] # SLANTED EQUAL TO OR GREATER-THAN WITH DOT INSIDE
+2A99 ; [*0DB6.0020.0002] # DOUBLE-LINE EQUAL TO OR LESS-THAN
+2A9A ; [*0DB7.0020.0002] # DOUBLE-LINE EQUAL TO OR GREATER-THAN
+2A9B ; [*0DB8.0020.0002] # DOUBLE-LINE SLANTED EQUAL TO OR LESS-THAN
+2A9C ; [*0DB9.0020.0002] # DOUBLE-LINE SLANTED EQUAL TO OR GREATER-THAN
+2A9D ; [*0DBA.0020.0002] # SIMILAR OR LESS-THAN
+2A9E ; [*0DBB.0020.0002] # SIMILAR OR GREATER-THAN
+2A9F ; [*0DBC.0020.0002] # SIMILAR ABOVE LESS-THAN ABOVE EQUALS SIGN
+2AA0 ; [*0DBD.0020.0002] # SIMILAR ABOVE GREATER-THAN ABOVE EQUALS SIGN
+2AA1 ; [*0DBE.0020.0002] # DOUBLE NESTED LESS-THAN
+2AA2 ; [*0DBF.0020.0002] # DOUBLE NESTED GREATER-THAN
+2AA3 ; [*0DC0.0020.0002] # DOUBLE NESTED LESS-THAN WITH UNDERBAR
+2AA4 ; [*0DC1.0020.0002] # GREATER-THAN OVERLAPPING LESS-THAN
+2AA5 ; [*0DC2.0020.0002] # GREATER-THAN BESIDE LESS-THAN
+2AA6 ; [*0DC3.0020.0002] # LESS-THAN CLOSED BY CURVE
+2AA7 ; [*0DC4.0020.0002] # GREATER-THAN CLOSED BY CURVE
+2AA8 ; [*0DC5.0020.0002] # LESS-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL
+2AA9 ; [*0DC6.0020.0002] # GREATER-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL
+2AAA ; [*0DC7.0020.0002] # SMALLER THAN
+2AAB ; [*0DC8.0020.0002] # LARGER THAN
+2AAC ; [*0DC9.0020.0002] # SMALLER THAN OR EQUAL TO
+2AAD ; [*0DCA.0020.0002] # LARGER THAN OR EQUAL TO
+2AAE ; [*0DCB.0020.0002] # EQUALS SIGN WITH BUMPY ABOVE
+2AAF ; [*0DCC.0020.0002] # PRECEDES ABOVE SINGLE-LINE EQUALS SIGN
+2AB0 ; [*0DCD.0020.0002] # SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN
+2AB1 ; [*0DCE.0020.0002] # PRECEDES ABOVE SINGLE-LINE NOT EQUAL TO
+2AB2 ; [*0DCF.0020.0002] # SUCCEEDS ABOVE SINGLE-LINE NOT EQUAL TO
+2AB3 ; [*0DD0.0020.0002] # PRECEDES ABOVE EQUALS SIGN
+2AB4 ; [*0DD1.0020.0002] # SUCCEEDS ABOVE EQUALS SIGN
+2AB5 ; [*0DD2.0020.0002] # PRECEDES ABOVE NOT EQUAL TO
+2AB6 ; [*0DD3.0020.0002] # SUCCEEDS ABOVE NOT EQUAL TO
+2AB7 ; [*0DD4.0020.0002] # PRECEDES ABOVE ALMOST EQUAL TO
+2AB8 ; [*0DD5.0020.0002] # SUCCEEDS ABOVE ALMOST EQUAL TO
+2AB9 ; [*0DD6.0020.0002] # PRECEDES ABOVE NOT ALMOST EQUAL TO
+2ABA ; [*0DD7.0020.0002] # SUCCEEDS ABOVE NOT ALMOST EQUAL TO
+2ABB ; [*0DD8.0020.0002] # DOUBLE PRECEDES
+2ABC ; [*0DD9.0020.0002] # DOUBLE SUCCEEDS
+2ABD ; [*0DDA.0020.0002] # SUBSET WITH DOT
+2ABE ; [*0DDB.0020.0002] # SUPERSET WITH DOT
+2ABF ; [*0DDC.0020.0002] # SUBSET WITH PLUS SIGN BELOW
+2AC0 ; [*0DDD.0020.0002] # SUPERSET WITH PLUS SIGN BELOW
+2AC1 ; [*0DDE.0020.0002] # SUBSET WITH MULTIPLICATION SIGN BELOW
+2AC2 ; [*0DDF.0020.0002] # SUPERSET WITH MULTIPLICATION SIGN BELOW
+2AC3 ; [*0DE0.0020.0002] # SUBSET OF OR EQUAL TO WITH DOT ABOVE
+2AC4 ; [*0DE1.0020.0002] # SUPERSET OF OR EQUAL TO WITH DOT ABOVE
+2AC5 ; [*0DE2.0020.0002] # SUBSET OF ABOVE EQUALS SIGN
+2AC6 ; [*0DE3.0020.0002] # SUPERSET OF ABOVE EQUALS SIGN
+2AC7 ; [*0DE4.0020.0002] # SUBSET OF ABOVE TILDE OPERATOR
+2AC8 ; [*0DE5.0020.0002] # SUPERSET OF ABOVE TILDE OPERATOR
+2AC9 ; [*0DE6.0020.0002] # SUBSET OF ABOVE ALMOST EQUAL TO
+2ACA ; [*0DE7.0020.0002] # SUPERSET OF ABOVE ALMOST EQUAL TO
+2ACB ; [*0DE8.0020.0002] # SUBSET OF ABOVE NOT EQUAL TO
+2ACC ; [*0DE9.0020.0002] # SUPERSET OF ABOVE NOT EQUAL TO
+2ACD ; [*0DEA.0020.0002] # SQUARE LEFT OPEN BOX OPERATOR
+2ACE ; [*0DEB.0020.0002] # SQUARE RIGHT OPEN BOX OPERATOR
+2ACF ; [*0DEC.0020.0002] # CLOSED SUBSET
+2AD0 ; [*0DED.0020.0002] # CLOSED SUPERSET
+2AD1 ; [*0DEE.0020.0002] # CLOSED SUBSET OR EQUAL TO
+2AD2 ; [*0DEF.0020.0002] # CLOSED SUPERSET OR EQUAL TO
+2AD3 ; [*0DF0.0020.0002] # SUBSET ABOVE SUPERSET
+2AD4 ; [*0DF1.0020.0002] # SUPERSET ABOVE SUBSET
+2AD5 ; [*0DF2.0020.0002] # SUBSET ABOVE SUBSET
+2AD6 ; [*0DF3.0020.0002] # SUPERSET ABOVE SUPERSET
+2AD7 ; [*0DF4.0020.0002] # SUPERSET BESIDE SUBSET
+2AD8 ; [*0DF5.0020.0002] # SUPERSET BESIDE AND JOINED BY DASH WITH SUBSET
+2AD9 ; [*0DF6.0020.0002] # ELEMENT OF OPENING DOWNWARDS
+2ADA ; [*0DF7.0020.0002] # PITCHFORK WITH TEE TOP
+2ADB ; [*0DF8.0020.0002] # TRANSVERSAL INTERSECTION
+2ADC ; [*0DF9.0020.0002][.0000.002F.0002] # FORKING
+2ADD ; [*0DF9.0020.0002] # NONFORKING
+2ADE ; [*0DFA.0020.0002] # SHORT LEFT TACK
+2ADF ; [*0DFB.0020.0002] # SHORT DOWN TACK
+2AE0 ; [*0DFC.0020.0002] # SHORT UP TACK
+2AE1 ; [*0DFD.0020.0002] # PERPENDICULAR WITH S
+2AE2 ; [*0DFE.0020.0002] # VERTICAL BAR TRIPLE RIGHT TURNSTILE
+2AE3 ; [*0DFF.0020.0002] # DOUBLE VERTICAL BAR LEFT TURNSTILE
+2AE4 ; [*0E00.0020.0002] # VERTICAL BAR DOUBLE LEFT TURNSTILE
+2AE5 ; [*0E01.0020.0002] # DOUBLE VERTICAL BAR DOUBLE LEFT TURNSTILE
+2AE6 ; [*0E02.0020.0002] # LONG DASH FROM LEFT MEMBER OF DOUBLE VERTICAL
+2AE7 ; [*0E03.0020.0002] # SHORT DOWN TACK WITH OVERBAR
+2AE8 ; [*0E04.0020.0002] # SHORT UP TACK WITH UNDERBAR
+2AE9 ; [*0E05.0020.0002] # SHORT UP TACK ABOVE SHORT DOWN TACK
+2AEA ; [*0E06.0020.0002] # DOUBLE DOWN TACK
+2AEB ; [*0E07.0020.0002] # DOUBLE UP TACK
+2AEC ; [*0E08.0020.0002] # DOUBLE STROKE NOT SIGN
+2AED ; [*0E09.0020.0002] # REVERSED DOUBLE STROKE NOT SIGN
+2AEE ; [*0E0A.0020.0002] # DOES NOT DIVIDE WITH REVERSED NEGATION SLASH
+2AEF ; [*0E0B.0020.0002] # VERTICAL LINE WITH CIRCLE ABOVE
+2AF0 ; [*0E0C.0020.0002] # VERTICAL LINE WITH CIRCLE BELOW
+2AF1 ; [*0E0D.0020.0002] # DOWN TACK WITH CIRCLE BELOW
+2AF2 ; [*0E0E.0020.0002] # PARALLEL WITH HORIZONTAL STROKE
+2AF3 ; [*0E0F.0020.0002] # PARALLEL WITH TILDE OPERATOR
+2AF4 ; [*0E10.0020.0002] # TRIPLE VERTICAL BAR BINARY RELATION
+2AF5 ; [*0E11.0020.0002] # TRIPLE VERTICAL BAR WITH HORIZONTAL STROKE
+2AF6 ; [*0E12.0020.0002] # TRIPLE COLON OPERATOR
+2AF7 ; [*0E13.0020.0002] # TRIPLE NESTED LESS-THAN
+2AF8 ; [*0E14.0020.0002] # TRIPLE NESTED GREATER-THAN
+2AF9 ; [*0E15.0020.0002] # DOUBLE-LINE SLANTED LESS-THAN OR EQUAL TO
+2AFA ; [*0E16.0020.0002] # DOUBLE-LINE SLANTED GREATER-THAN OR EQUAL TO
+2AFB ; [*0E17.0020.0002] # TRIPLE SOLIDUS BINARY RELATION
+2AFC ; [*0E18.0020.0002] # LARGE TRIPLE VERTICAL BAR OPERATOR
+2AFD ; [*0E19.0020.0002] # DOUBLE SOLIDUS OPERATOR
+2AFE ; [*0E1A.0020.0002] # WHITE VERTICAL BAR
+2AFF ; [*0E1B.0020.0002] # N-ARY WHITE VERTICAL BAR
+2B00 ; [*0E1C.0020.0002] # NORTH EAST WHITE ARROW
+2B01 ; [*0E1D.0020.0002] # NORTH WEST WHITE ARROW
+2B02 ; [*0E1E.0020.0002] # SOUTH EAST WHITE ARROW
+2B03 ; [*0E1F.0020.0002] # SOUTH WEST WHITE ARROW
+2B04 ; [*0E20.0020.0002] # LEFT RIGHT WHITE ARROW
+2B05 ; [*0E21.0020.0002] # LEFTWARDS BLACK ARROW
+2B06 ; [*0E22.0020.0002] # UPWARDS BLACK ARROW
+2B07 ; [*0E23.0020.0002] # DOWNWARDS BLACK ARROW
+2B08 ; [*0E24.0020.0002] # NORTH EAST BLACK ARROW
+2B09 ; [*0E25.0020.0002] # NORTH WEST BLACK ARROW
+2B0A ; [*0E26.0020.0002] # SOUTH EAST BLACK ARROW
+2B0B ; [*0E27.0020.0002] # SOUTH WEST BLACK ARROW
+2B0C ; [*0E28.0020.0002] # LEFT RIGHT BLACK ARROW
+2B0D ; [*0E29.0020.0002] # UP DOWN BLACK ARROW
+2B0E ; [*0E2A.0020.0002] # RIGHTWARDS ARROW WITH TIP DOWNWARDS
+2B0F ; [*0E2B.0020.0002] # RIGHTWARDS ARROW WITH TIP UPWARDS
+2B10 ; [*0E2C.0020.0002] # LEFTWARDS ARROW WITH TIP DOWNWARDS
+2B11 ; [*0E2D.0020.0002] # LEFTWARDS ARROW WITH TIP UPWARDS
+2B12 ; [*0E2E.0020.0002] # SQUARE WITH TOP HALF BLACK
+2B13 ; [*0E2F.0020.0002] # SQUARE WITH BOTTOM HALF BLACK
+2B14 ; [*0E30.0020.0002] # SQUARE WITH UPPER RIGHT DIAGONAL HALF BLACK
+2B15 ; [*0E31.0020.0002] # SQUARE WITH LOWER LEFT DIAGONAL HALF BLACK
+2B16 ; [*0E32.0020.0002] # DIAMOND WITH LEFT HALF BLACK
+2B17 ; [*0E33.0020.0002] # DIAMOND WITH RIGHT HALF BLACK
+2B18 ; [*0E34.0020.0002] # DIAMOND WITH TOP HALF BLACK
+2B19 ; [*0E35.0020.0002] # DIAMOND WITH BOTTOM HALF BLACK
+2B1A ; [*0E36.0020.0002] # DOTTED SQUARE
+2B1B ; [*0E37.0020.0002] # BLACK LARGE SQUARE
+2B1C ; [*0E38.0020.0002] # WHITE LARGE SQUARE
+2B1D ; [*0E39.0020.0002] # BLACK VERY SMALL SQUARE
+2B1E ; [*0E3A.0020.0002] # WHITE VERY SMALL SQUARE
+2B1F ; [*0E3B.0020.0002] # BLACK PENTAGON
+2B20 ; [*0E3C.0020.0002] # WHITE PENTAGON
+2B21 ; [*0E3D.0020.0002] # WHITE HEXAGON
+2B22 ; [*0E3E.0020.0002] # BLACK HEXAGON
+2B23 ; [*0E3F.0020.0002] # HORIZONTAL BLACK HEXAGON
+2B24 ; [*0E40.0020.0002] # BLACK LARGE CIRCLE
+2B25 ; [*0E41.0020.0002] # BLACK MEDIUM DIAMOND
+2B26 ; [*0E42.0020.0002] # WHITE MEDIUM DIAMOND
+2B27 ; [*0E43.0020.0002] # BLACK MEDIUM LOZENGE
+2B28 ; [*0E44.0020.0002] # WHITE MEDIUM LOZENGE
+2B29 ; [*0E45.0020.0002] # BLACK SMALL DIAMOND
+2B2A ; [*0E46.0020.0002] # BLACK SMALL LOZENGE
+2B2B ; [*0E47.0020.0002] # WHITE SMALL LOZENGE
+2B2C ; [*0E48.0020.0002] # BLACK HORIZONTAL ELLIPSE
+2B2D ; [*0E49.0020.0002] # WHITE HORIZONTAL ELLIPSE
+2B2E ; [*0E4A.0020.0002] # BLACK VERTICAL ELLIPSE
+2B2F ; [*0E4B.0020.0002] # WHITE VERTICAL ELLIPSE
+2B30 ; [*0E4C.0020.0002] # LEFT ARROW WITH SMALL CIRCLE
+2B31 ; [*0E4D.0020.0002] # THREE LEFTWARDS ARROWS
+2B32 ; [*0E4E.0020.0002] # LEFT ARROW WITH CIRCLED PLUS
+2B33 ; [*0E4F.0020.0002] # LONG LEFTWARDS SQUIGGLE ARROW
+2B34 ; [*0E50.0020.0002] # LEFTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE
+2B35 ; [*0E51.0020.0002] # LEFTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE
+2B36 ; [*0E52.0020.0002] # LEFTWARDS TWO-HEADED ARROW FROM BAR
+2B37 ; [*0E53.0020.0002] # LEFTWARDS TWO-HEADED TRIPLE DASH ARROW
+2B38 ; [*0E54.0020.0002] # LEFTWARDS ARROW WITH DOTTED STEM
+2B39 ; [*0E55.0020.0002] # LEFTWARDS ARROW WITH TAIL WITH VERTICAL STROKE
+2B3A ; [*0E56.0020.0002] # LEFTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE
+2B3B ; [*0E57.0020.0002] # LEFTWARDS TWO-HEADED ARROW WITH TAIL
+2B3C ; [*0E58.0020.0002] # LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE
+2B3D ; [*0E59.0020.0002] # LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE
+2B3E ; [*0E5A.0020.0002] # LEFTWARDS ARROW THROUGH X
+2B3F ; [*0E5B.0020.0002] # WAVE ARROW POINTING DIRECTLY LEFT
+2B40 ; [*0E5C.0020.0002] # EQUALS SIGN ABOVE LEFTWARDS ARROW
+2B41 ; [*0E5D.0020.0002] # REVERSE TILDE OPERATOR ABOVE LEFTWARDS ARROW
+2B42 ; [*0E5E.0020.0002] # LEFTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO
+2B43 ; [*0E5F.0020.0002] # RIGHTWARDS ARROW THROUGH GREATER-THAN
+2B44 ; [*0E60.0020.0002] # RIGHTWARDS ARROW THROUGH SUPERSET
+2B45 ; [*0E61.0020.0002] # LEFTWARDS QUADRUPLE ARROW
+2B46 ; [*0E62.0020.0002] # RIGHTWARDS QUADRUPLE ARROW
+2B47 ; [*0E63.0020.0002] # REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW
+2B48 ; [*0E64.0020.0002] # RIGHTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO
+2B49 ; [*0E65.0020.0002] # TILDE OPERATOR ABOVE LEFTWARDS ARROW
+2B4A ; [*0E66.0020.0002] # LEFTWARDS ARROW ABOVE ALMOST EQUAL TO
+2B4B ; [*0E67.0020.0002] # LEFTWARDS ARROW ABOVE REVERSE TILDE OPERATOR
+2B4C ; [*0E68.0020.0002] # RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR
+2B4D ; [*0E69.0020.0002] # DOWNWARDS TRIANGLE-HEADED ZIGZAG ARROW
+2B4E ; [*0E6A.0020.0002] # SHORT SLANTED NORTH ARROW
+2B4F ; [*0E6B.0020.0002] # SHORT BACKSLANTED SOUTH ARROW
+2B50 ; [*0E6C.0020.0002] # WHITE MEDIUM STAR
+2B51 ; [*0E6D.0020.0002] # BLACK SMALL STAR
+2B52 ; [*0E6E.0020.0002] # WHITE SMALL STAR
+2B53 ; [*0E6F.0020.0002] # BLACK RIGHT-POINTING PENTAGON
+2B54 ; [*0E70.0020.0002] # WHITE RIGHT-POINTING PENTAGON
+2B55 ; [*0E71.0020.0002] # HEAVY LARGE CIRCLE
+2B56 ; [*0E72.0020.0002] # HEAVY OVAL WITH OVAL INSIDE
+2B57 ; [*0E73.0020.0002] # HEAVY CIRCLE WITH CIRCLE INSIDE
+2B58 ; [*0E74.0020.0002] # HEAVY CIRCLE
+2B59 ; [*0E75.0020.0002] # HEAVY CIRCLED SALTIRE
+2B5A ; [*0E76.0020.0002] # SLANTED NORTH ARROW WITH HOOKED HEAD
+2B5B ; [*0E77.0020.0002] # BACKSLANTED SOUTH ARROW WITH HOOKED TAIL
+2B5C ; [*0E78.0020.0002] # SLANTED NORTH ARROW WITH HORIZONTAL TAIL
+2B5D ; [*0E79.0020.0002] # BACKSLANTED SOUTH ARROW WITH HORIZONTAL TAIL
+2B5E ; [*0E7A.0020.0002] # BENT ARROW POINTING DOWNWARDS THEN NORTH EAST
+2B5F ; [*0E7B.0020.0002] # SHORT BENT ARROW POINTING DOWNWARDS THEN NORTH EAST
+2B60 ; [*0E7C.0020.0002] # LEFTWARDS TRIANGLE-HEADED ARROW
+2B61 ; [*0E7D.0020.0002] # UPWARDS TRIANGLE-HEADED ARROW
+2B62 ; [*0E7E.0020.0002] # RIGHTWARDS TRIANGLE-HEADED ARROW
+2B63 ; [*0E7F.0020.0002] # DOWNWARDS TRIANGLE-HEADED ARROW
+2B64 ; [*0E80.0020.0002] # LEFT RIGHT TRIANGLE-HEADED ARROW
+2B65 ; [*0E81.0020.0002] # UP DOWN TRIANGLE-HEADED ARROW
+2B66 ; [*0E82.0020.0002] # NORTH WEST TRIANGLE-HEADED ARROW
+2B67 ; [*0E83.0020.0002] # NORTH EAST TRIANGLE-HEADED ARROW
+2B68 ; [*0E84.0020.0002] # SOUTH EAST TRIANGLE-HEADED ARROW
+2B69 ; [*0E85.0020.0002] # SOUTH WEST TRIANGLE-HEADED ARROW
+2B6A ; [*0E86.0020.0002] # LEFTWARDS TRIANGLE-HEADED DASHED ARROW
+2B6B ; [*0E87.0020.0002] # UPWARDS TRIANGLE-HEADED DASHED ARROW
+2B6C ; [*0E88.0020.0002] # RIGHTWARDS TRIANGLE-HEADED DASHED ARROW
+2B6D ; [*0E89.0020.0002] # DOWNWARDS TRIANGLE-HEADED DASHED ARROW
+2B6E ; [*0E8A.0020.0002] # CLOCKWISE TRIANGLE-HEADED OPEN CIRCLE ARROW
+2B6F ; [*0E8B.0020.0002] # ANTICLOCKWISE TRIANGLE-HEADED OPEN CIRCLE ARROW
+2B70 ; [*0E8C.0020.0002] # LEFTWARDS TRIANGLE-HEADED ARROW TO BAR
+2B71 ; [*0E8D.0020.0002] # UPWARDS TRIANGLE-HEADED ARROW TO BAR
+2B72 ; [*0E8E.0020.0002] # RIGHTWARDS TRIANGLE-HEADED ARROW TO BAR
+2B73 ; [*0E8F.0020.0002] # DOWNWARDS TRIANGLE-HEADED ARROW TO BAR
+2B76 ; [*0E90.0020.0002] # NORTH WEST TRIANGLE-HEADED ARROW TO BAR
+2B77 ; [*0E91.0020.0002] # NORTH EAST TRIANGLE-HEADED ARROW TO BAR
+2B78 ; [*0E92.0020.0002] # SOUTH EAST TRIANGLE-HEADED ARROW TO BAR
+2B79 ; [*0E93.0020.0002] # SOUTH WEST TRIANGLE-HEADED ARROW TO BAR
+2B7A ; [*0E94.0020.0002] # LEFTWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE
+2B7B ; [*0E95.0020.0002] # UPWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE
+2B7C ; [*0E96.0020.0002] # RIGHTWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE
+2B7D ; [*0E97.0020.0002] # DOWNWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE
+2B7E ; [*0E98.0020.0002] # HORIZONTAL TAB KEY
+2B7F ; [*0E99.0020.0002] # VERTICAL TAB KEY
+2B80 ; [*0E9A.0020.0002] # LEFTWARDS TRIANGLE-HEADED ARROW OVER RIGHTWARDS TRIANGLE-HEADED ARROW
+2B81 ; [*0E9B.0020.0002] # UPWARDS TRIANGLE-HEADED ARROW LEFTWARDS OF DOWNWARDS TRIANGLE-HEADED ARROW
+2B82 ; [*0E9C.0020.0002] # RIGHTWARDS TRIANGLE-HEADED ARROW OVER LEFTWARDS TRIANGLE-HEADED ARROW
+2B83 ; [*0E9D.0020.0002] # DOWNWARDS TRIANGLE-HEADED ARROW LEFTWARDS OF UPWARDS TRIANGLE-HEADED ARROW
+2B84 ; [*0E9E.0020.0002] # LEFTWARDS TRIANGLE-HEADED PAIRED ARROWS
+2B85 ; [*0E9F.0020.0002] # UPWARDS TRIANGLE-HEADED PAIRED ARROWS
+2B86 ; [*0EA0.0020.0002] # RIGHTWARDS TRIANGLE-HEADED PAIRED ARROWS
+2B87 ; [*0EA1.0020.0002] # DOWNWARDS TRIANGLE-HEADED PAIRED ARROWS
+2B88 ; [*0EA2.0020.0002] # LEFTWARDS BLACK CIRCLED WHITE ARROW
+2B89 ; [*0EA3.0020.0002] # UPWARDS BLACK CIRCLED WHITE ARROW
+2B8A ; [*0EA4.0020.0002] # RIGHTWARDS BLACK CIRCLED WHITE ARROW
+2B8B ; [*0EA5.0020.0002] # DOWNWARDS BLACK CIRCLED WHITE ARROW
+2B8C ; [*0EA6.0020.0002] # ANTICLOCKWISE TRIANGLE-HEADED RIGHT U-SHAPED ARROW
+2B8D ; [*0EA7.0020.0002] # ANTICLOCKWISE TRIANGLE-HEADED BOTTOM U-SHAPED ARROW
+2B8E ; [*0EA8.0020.0002] # ANTICLOCKWISE TRIANGLE-HEADED LEFT U-SHAPED ARROW
+2B8F ; [*0EA9.0020.0002] # ANTICLOCKWISE TRIANGLE-HEADED TOP U-SHAPED ARROW
+2B90 ; [*0EAA.0020.0002] # RETURN LEFT
+2B91 ; [*0EAB.0020.0002] # RETURN RIGHT
+2B92 ; [*0EAC.0020.0002] # NEWLINE LEFT
+2B93 ; [*0EAD.0020.0002] # NEWLINE RIGHT
+2B94 ; [*0EAE.0020.0002] # FOUR CORNER ARROWS CIRCLING ANTICLOCKWISE
+2B95 ; [*0EAF.0020.0002] # RIGHTWARDS BLACK ARROW
+2B97 ; [*0EB0.0020.0002] # SYMBOL FOR TYPE A ELECTRONICS
+2B98 ; [*0EB1.0020.0002] # THREE-D TOP-LIGHTED LEFTWARDS EQUILATERAL ARROWHEAD
+2B99 ; [*0EB2.0020.0002] # THREE-D RIGHT-LIGHTED UPWARDS EQUILATERAL ARROWHEAD
+2B9A ; [*0EB3.0020.0002] # THREE-D TOP-LIGHTED RIGHTWARDS EQUILATERAL ARROWHEAD
+2B9B ; [*0EB4.0020.0002] # THREE-D LEFT-LIGHTED DOWNWARDS EQUILATERAL ARROWHEAD
+2B9C ; [*0EB5.0020.0002] # BLACK LEFTWARDS EQUILATERAL ARROWHEAD
+2B9D ; [*0EB6.0020.0002] # BLACK UPWARDS EQUILATERAL ARROWHEAD
+2B9E ; [*0EB7.0020.0002] # BLACK RIGHTWARDS EQUILATERAL ARROWHEAD
+2B9F ; [*0EB8.0020.0002] # BLACK DOWNWARDS EQUILATERAL ARROWHEAD
+2BA0 ; [*0EB9.0020.0002] # DOWNWARDS TRIANGLE-HEADED ARROW WITH LONG TIP LEFTWARDS
+2BA1 ; [*0EBA.0020.0002] # DOWNWARDS TRIANGLE-HEADED ARROW WITH LONG TIP RIGHTWARDS
+2BA2 ; [*0EBB.0020.0002] # UPWARDS TRIANGLE-HEADED ARROW WITH LONG TIP LEFTWARDS
+2BA3 ; [*0EBC.0020.0002] # UPWARDS TRIANGLE-HEADED ARROW WITH LONG TIP RIGHTWARDS
+2BA4 ; [*0EBD.0020.0002] # LEFTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP UPWARDS
+2BA5 ; [*0EBE.0020.0002] # RIGHTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP UPWARDS
+2BA6 ; [*0EBF.0020.0002] # LEFTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP DOWNWARDS
+2BA7 ; [*0EC0.0020.0002] # RIGHTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP DOWNWARDS
+2BA8 ; [*0EC1.0020.0002] # BLACK CURVED DOWNWARDS AND LEFTWARDS ARROW
+2BA9 ; [*0EC2.0020.0002] # BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW
+2BAA ; [*0EC3.0020.0002] # BLACK CURVED UPWARDS AND LEFTWARDS ARROW
+2BAB ; [*0EC4.0020.0002] # BLACK CURVED UPWARDS AND RIGHTWARDS ARROW
+2BAC ; [*0EC5.0020.0002] # BLACK CURVED LEFTWARDS AND UPWARDS ARROW
+2BAD ; [*0EC6.0020.0002] # BLACK CURVED RIGHTWARDS AND UPWARDS ARROW
+2BAE ; [*0EC7.0020.0002] # BLACK CURVED LEFTWARDS AND DOWNWARDS ARROW
+2BAF ; [*0EC8.0020.0002] # BLACK CURVED RIGHTWARDS AND DOWNWARDS ARROW
+2BB0 ; [*0EC9.0020.0002] # RIBBON ARROW DOWN LEFT
+2BB1 ; [*0ECA.0020.0002] # RIBBON ARROW DOWN RIGHT
+2BB2 ; [*0ECB.0020.0002] # RIBBON ARROW UP LEFT
+2BB3 ; [*0ECC.0020.0002] # RIBBON ARROW UP RIGHT
+2BB4 ; [*0ECD.0020.0002] # RIBBON ARROW LEFT UP
+2BB5 ; [*0ECE.0020.0002] # RIBBON ARROW RIGHT UP
+2BB6 ; [*0ECF.0020.0002] # RIBBON ARROW LEFT DOWN
+2BB7 ; [*0ED0.0020.0002] # RIBBON ARROW RIGHT DOWN
+2BB8 ; [*0ED1.0020.0002] # UPWARDS WHITE ARROW FROM BAR WITH HORIZONTAL BAR
+2BB9 ; [*0ED2.0020.0002] # UP ARROWHEAD IN A RECTANGLE BOX
+2BBA ; [*0ED3.0020.0002] # OVERLAPPING WHITE SQUARES
+2BBB ; [*0ED4.0020.0002] # OVERLAPPING WHITE AND BLACK SQUARES
+2BBC ; [*0ED5.0020.0002] # OVERLAPPING BLACK SQUARES
+2BBD ; [*0ED6.0020.0002] # BALLOT BOX WITH LIGHT X
+2BBE ; [*0ED7.0020.0002] # CIRCLED X
+2BBF ; [*0ED8.0020.0002] # CIRCLED BOLD X
+2BC0 ; [*0ED9.0020.0002] # BLACK SQUARE CENTRED
+2BC1 ; [*0EDA.0020.0002] # BLACK DIAMOND CENTRED
+2BC2 ; [*0EDB.0020.0002] # TURNED BLACK PENTAGON
+2BC3 ; [*0EDC.0020.0002] # HORIZONTAL BLACK OCTAGON
+2BC4 ; [*0EDD.0020.0002] # BLACK OCTAGON
+2BC5 ; [*0EDE.0020.0002] # BLACK MEDIUM UP-POINTING TRIANGLE CENTRED
+2BC6 ; [*0EDF.0020.0002] # BLACK MEDIUM DOWN-POINTING TRIANGLE CENTRED
+2BC7 ; [*0EE0.0020.0002] # BLACK MEDIUM LEFT-POINTING TRIANGLE CENTRED
+2BC8 ; [*0EE1.0020.0002] # BLACK MEDIUM RIGHT-POINTING TRIANGLE CENTRED
+2BC9 ; [*0EE2.0020.0002] # NEPTUNE FORM TWO
+2BCA ; [*0EE3.0020.0002] # TOP HALF BLACK CIRCLE
+2BCB ; [*0EE4.0020.0002] # BOTTOM HALF BLACK CIRCLE
+2BCC ; [*0EE5.0020.0002] # LIGHT FOUR POINTED BLACK CUSP
+2BCD ; [*0EE6.0020.0002] # ROTATED LIGHT FOUR POINTED BLACK CUSP
+2BCE ; [*0EE7.0020.0002] # WHITE FOUR POINTED CUSP
+2BCF ; [*0EE8.0020.0002] # ROTATED WHITE FOUR POINTED CUSP
+2BD0 ; [*0EE9.0020.0002] # SQUARE POSITION INDICATOR
+2BD1 ; [*0EEA.0020.0002] # UNCERTAINTY SIGN
+2BD2 ; [*0EEB.0020.0002] # GROUP MARK
+2BD3 ; [*0EEC.0020.0002] # PLUTO FORM TWO
+2BD4 ; [*0EED.0020.0002] # PLUTO FORM THREE
+2BD5 ; [*0EEE.0020.0002] # PLUTO FORM FOUR
+2BD6 ; [*0EEF.0020.0002] # PLUTO FORM FIVE
+2BD7 ; [*0EF0.0020.0002] # TRANSPLUTO
+2BD8 ; [*0EF1.0020.0002] # PROSERPINA
+2BD9 ; [*0EF2.0020.0002] # ASTRAEA
+2BDA ; [*0EF3.0020.0002] # HYGIEA
+2BDB ; [*0EF4.0020.0002] # PHOLUS
+2BDC ; [*0EF5.0020.0002] # NESSUS
+2BDD ; [*0EF6.0020.0002] # WHITE MOON SELENA
+2BDE ; [*0EF7.0020.0002] # BLACK DIAMOND ON CROSS
+2BDF ; [*0EF8.0020.0002] # TRUE LIGHT MOON ARTA
+2BE0 ; [*0EF9.0020.0002] # CUPIDO
+2BE1 ; [*0EFA.0020.0002] # HADES
+2BE2 ; [*0EFB.0020.0002] # ZEUS
+2BE3 ; [*0EFC.0020.0002] # KRONOS
+2BE4 ; [*0EFD.0020.0002] # APOLLON
+2BE5 ; [*0EFE.0020.0002] # ADMETOS
+2BE6 ; [*0EFF.0020.0002] # VULCANUS
+2BE7 ; [*0F00.0020.0002] # POSEIDON
+2BE8 ; [*0F01.0020.0002] # LEFT HALF BLACK STAR
+2BE9 ; [*0F02.0020.0002] # RIGHT HALF BLACK STAR
+2BEA ; [*0F03.0020.0002] # STAR WITH LEFT HALF BLACK
+2BEB ; [*0F04.0020.0002] # STAR WITH RIGHT HALF BLACK
+2BEC ; [*0F05.0020.0002] # LEFTWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS
+2BED ; [*0F06.0020.0002] # UPWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS
+2BEE ; [*0F07.0020.0002] # RIGHTWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS
+2BEF ; [*0F08.0020.0002] # DOWNWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS
+2BF0 ; [*0F09.0020.0002] # ERIS FORM ONE
+2BF1 ; [*0F0A.0020.0002] # ERIS FORM TWO
+2BF2 ; [*0F0B.0020.0002] # SEDNA
+2BF3 ; [*0F0C.0020.0002] # RUSSIAN ASTROLOGICAL SYMBOL VIGINTILE
+2BF4 ; [*0F0D.0020.0002] # RUSSIAN ASTROLOGICAL SYMBOL NOVILE
+2BF5 ; [*0F0E.0020.0002] # RUSSIAN ASTROLOGICAL SYMBOL QUINTILE
+2BF6 ; [*0F0F.0020.0002] # RUSSIAN ASTROLOGICAL SYMBOL BINOVILE
+2BF7 ; [*0F10.0020.0002] # RUSSIAN ASTROLOGICAL SYMBOL SENTAGON
+2BF8 ; [*0F11.0020.0002] # RUSSIAN ASTROLOGICAL SYMBOL TREDECILE
+2BF9 ; [*0F12.0020.0002] # EQUALS SIGN WITH INFINITY BELOW
+2BFA ; [*0F13.0020.0002] # UNITED SYMBOL
+2BFB ; [*0F14.0020.0002] # SEPARATED SYMBOL
+2BFC ; [*0F15.0020.0002] # DOUBLED SYMBOL
+2BFD ; [*0F16.0020.0002] # PASSED SYMBOL
+2BFE ; [*0F17.0020.0002] # REVERSED RIGHT ANGLE
+2BFF ; [*0F18.0020.0002] # HELLSCHREIBER PAUSE SYMBOL
+2CE5 ; [*0F19.0020.0002] # COPTIC SYMBOL MI RO
+2CE6 ; [*0F1A.0020.0002] # COPTIC SYMBOL PI RO
+2CE7 ; [*0F1B.0020.0002] # COPTIC SYMBOL STAUROS
+2CE8 ; [*0F1C.0020.0002] # COPTIC SYMBOL TAU RO
+2CE9 ; [*0F1D.0020.0002] # COPTIC SYMBOL KHI RO
+2CEA ; [*0F1E.0020.0002] # COPTIC SYMBOL SHIMA SIMA
+2CF9 ; [*028B.0020.0002] # COPTIC OLD NUBIAN FULL STOP
+2CFA ; [*0278.0020.0002] # COPTIC OLD NUBIAN DIRECT QUESTION MARK
+2CFB ; [*0279.0020.0002] # COPTIC OLD NUBIAN INDIRECT QUESTION MARK
+2CFC ; [*0311.0020.0002] # COPTIC OLD NUBIAN VERSE DIVIDER
+2CFD ; [*1E89.0020.0002] # COPTIC FRACTION ONE HALF
+2CFE ; [*028C.0020.0002] # COPTIC FULL STOP
+2CFF ; [*0312.0020.0002] # COPTIC MORPHOLOGICAL DIVIDER
+2D70 ; [*0467.0020.0002] # TIFINAGH SEPARATOR MARK
+2D7F ; [.0000.0000.0000] # TIFINAGH CONSONANT JOINER
+2E00 ; [*03DF.0020.0002] # RIGHT ANGLE SUBSTITUTION MARKER
+2E01 ; [*03E0.0020.0002] # RIGHT ANGLE DOTTED SUBSTITUTION MARKER
+2E02 ; [*0378.0020.0002] # LEFT SUBSTITUTION BRACKET
+2E03 ; [*0379.0020.0002] # RIGHT SUBSTITUTION BRACKET
+2E04 ; [*037A.0020.0002] # LEFT DOTTED SUBSTITUTION BRACKET
+2E05 ; [*037B.0020.0002] # RIGHT DOTTED SUBSTITUTION BRACKET
+2E06 ; [*03E1.0020.0002] # RAISED INTERPOLATION MARKER
+2E07 ; [*03E2.0020.0002] # RAISED DOTTED INTERPOLATION MARKER
+2E08 ; [*03E3.0020.0002] # DOTTED TRANSPOSITION MARKER
+2E09 ; [*037C.0020.0002] # LEFT TRANSPOSITION BRACKET
+2E0A ; [*037D.0020.0002] # RIGHT TRANSPOSITION BRACKET
+2E0B ; [*03E4.0020.0002] # RAISED SQUARE
+2E0C ; [*037E.0020.0002] # LEFT RAISED OMISSION BRACKET
+2E0D ; [*037F.0020.0002] # RIGHT RAISED OMISSION BRACKET
+2E0E ; [*03E5.0020.0002] # EDITORIAL CORONIS
+2E0F ; [*03E6.0020.0002] # PARAGRAPHOS
+2E10 ; [*03E7.0020.0002] # FORKED PARAGRAPHOS
+2E11 ; [*03E8.0020.0002] # REVERSED FORKED PARAGRAPHOS
+2E12 ; [*03E9.0020.0002] # HYPODIASTOLE
+2E13 ; [*03EA.0020.0002] # DOTTED OBELOS
+2E14 ; [*03EB.0020.0002] # DOWNWARDS ANCORA
+2E15 ; [*03EC.0020.0002] # UPWARDS ANCORA
+2E16 ; [*03ED.0020.0002] # DOTTED RIGHT-POINTING ANGLE
+2E17 ; [*021C.0020.0002] # DOUBLE OBLIQUE HYPHEN
+2E18 ; [*0280.0020.0002] # INVERTED INTERROBANG
+2E19 ; [*0313.0020.0002] # PALM BRANCH
+2E1A ; [*03EE.0020.0002] # HYPHEN WITH DIAERESIS
+2E1B ; [*03EF.0020.0002] # TILDE WITH RING ABOVE
+2E1C ; [*0380.0020.0002] # LEFT LOW PARAPHRASE BRACKET
+2E1D ; [*0381.0020.0002] # RIGHT LOW PARAPHRASE BRACKET
+2E1E ; [*03F0.0020.0002] # TILDE WITH DOT ABOVE
+2E1F ; [*03F1.0020.0002] # TILDE WITH DOT BELOW
+2E20 ; [*0382.0020.0002] # LEFT VERTICAL BAR WITH QUILL
+2E21 ; [*0383.0020.0002] # RIGHT VERTICAL BAR WITH QUILL
+2E22 ; [*0384.0020.0002] # TOP LEFT HALF BRACKET
+2E23 ; [*0385.0020.0002] # TOP RIGHT HALF BRACKET
+2E24 ; [*0386.0020.0002] # BOTTOM LEFT HALF BRACKET
+2E25 ; [*0387.0020.0002] # BOTTOM RIGHT HALF BRACKET
+2E26 ; [*0388.0020.0002] # LEFT SIDEWAYS U BRACKET
+2E27 ; [*0389.0020.0002] # RIGHT SIDEWAYS U BRACKET
+2E28 ; [*038A.0020.0002] # LEFT DOUBLE PARENTHESIS
+2E29 ; [*038B.0020.0002] # RIGHT DOUBLE PARENTHESIS
+2E2A ; [*030C.0020.0002] # TWO DOTS OVER ONE DOT PUNCTUATION
+2E2B ; [*030D.0020.0002] # ONE DOT OVER TWO DOTS PUNCTUATION
+2E2C ; [*030E.0020.0002] # SQUARED FOUR DOT PUNCTUATION
+2E2D ; [*030F.0020.0002] # FIVE DOT MARK
+2E2E ; [*0271.0020.0002] # REVERSED QUESTION MARK
+2E30 ; [*028D.0020.0002] # RING POINT
+2E31 ; [*0297.0020.0002] # WORD SEPARATOR MIDDLE DOT
+2E32 ; [*0226.0020.0002] # TURNED COMMA
+2E33 ; [*0298.0020.0002] # RAISED DOT
+2E34 ; [*0225.0020.0002] # RAISED COMMA
+2E35 ; [*023E.0020.0002] # TURNED SEMICOLON
+2E36 ; [*03C9.0020.0002] # DAGGER WITH LEFT GUARD
+2E37 ; [*03CA.0020.0002] # DAGGER WITH RIGHT GUARD
+2E38 ; [*03CB.0020.0002] # TURNED DAGGER
+2E39 ; [*03AF.0020.0002] # TOP HALF SECTION SIGN
+2E3A ; [*0218.0020.0002] # TWO-EM DASH
+2E3B ; [*0219.0020.0002] # THREE-EM DASH
+2E3C ; [*028E.0020.0002] # STENOGRAPHIC FULL STOP
+2E3D ; [*0310.0020.0002] # VERTICAL SIX DOTS
+2E3E ; [*03A9.0020.0002] # WIGGLY VERTICAL LINE
+2E3F ; [*03B3.0020.0002] # CAPITULUM
+2E40 ; [*021D.0020.0002] # DOUBLE HYPHEN
+2E41 ; [*0227.0020.0002] # REVERSED COMMA
+2E42 ; [*032E.0020.0002] # DOUBLE LOW-REVERSED-9 QUOTATION MARK
+2E43 ; [*021B.0020.0002] # DASH WITH LEFT UPTURN
+2E44 ; [*03F2.0020.0002] # DOUBLE SUSPENSION MARK
+2E45 ; [*03F3.0020.0002] # INVERTED LOW KAVYKA
+2E46 ; [*03F4.0020.0002] # INVERTED LOW KAVYKA WITH KAVYKA ABOVE
+2E47 ; [*03F5.0020.0002] # LOW KAVYKA
+2E48 ; [*03F6.0020.0002] # LOW KAVYKA WITH DOT
+2E49 ; [*0240.0020.0002] # DOUBLE STACKED COMMA
+2E4A ; [*03BC.0020.0002] # DOTTED SOLIDUS
+2E4B ; [*03CC.0020.0002] # TRIPLE DAGGER
+2E4C ; [*0228.0020.0002] # MEDIEVAL COMMA
+2E4D ; [*03B2.0020.0002] # PARAGRAPHUS MARK
+2E4E ; [*0229.0020.0002] # PUNCTUS ELEVATUS MARK
+2E4F ; [*022A.0020.0002] # CORNISH VERSE DIVIDER
+2E50 ; [*0B94.0020.0002] # CROSS PATTY WITH RIGHT CROSSBAR
+2E51 ; [*0B95.0020.0002] # CROSS PATTY WITH LEFT CROSSBAR
+2E52 ; [*03BF.0020.0002] # TIRONIAN SIGN CAPITAL ET
+2E53 ; [*026A.0020.0002] # MEDIEVAL EXCLAMATION MARK
+2E54 ; [*0272.0020.0002] # MEDIEVAL QUESTION MARK
+2E55 ; [*038C.0020.0002] # LEFT SQUARE BRACKET WITH STROKE
+2E56 ; [*038D.0020.0002] # RIGHT SQUARE BRACKET WITH STROKE
+2E57 ; [*038E.0020.0002] # LEFT SQUARE BRACKET WITH DOUBLE STROKE
+2E58 ; [*038F.0020.0002] # RIGHT SQUARE BRACKET WITH DOUBLE STROKE
+2E59 ; [*0390.0020.0002] # TOP HALF LEFT PARENTHESIS
+2E5A ; [*0391.0020.0002] # TOP HALF RIGHT PARENTHESIS
+2E5B ; [*0392.0020.0002] # BOTTOM HALF LEFT PARENTHESIS
+2E5C ; [*0393.0020.0002] # BOTTOM HALF RIGHT PARENTHESIS
+2E5D ; [*021E.0020.0002] # OBLIQUE HYPHEN
+2FF0 ; [*1DED.0020.0002] # IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT
+2FF1 ; [*1DEE.0020.0002] # IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO BELOW
+2FF2 ; [*1DEF.0020.0002] # IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT
+2FF3 ; [*1DF0.0020.0002] # IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO MIDDLE AND BELOW
+2FF4 ; [*1DF1.0020.0002] # IDEOGRAPHIC DESCRIPTION CHARACTER FULL SURROUND
+2FF5 ; [*1DF2.0020.0002] # IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM ABOVE
+2FF6 ; [*1DF3.0020.0002] # IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM BELOW
+2FF7 ; [*1DF4.0020.0002] # IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LEFT
+2FF8 ; [*1DF5.0020.0002] # IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER LEFT
+2FF9 ; [*1DF6.0020.0002] # IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER RIGHT
+2FFA ; [*1DF7.0020.0002] # IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER LEFT
+2FFB ; [*1DF8.0020.0002] # IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID
+3000 ; [*0209.0020.0003] # IDEOGRAPHIC SPACE
+3001 ; [*0237.0020.0002] # IDEOGRAPHIC COMMA
+3002 ; [*0295.0020.0002] # IDEOGRAPHIC FULL STOP
+3003 ; [*03D5.0020.0002] # DITTO MARK
+3004 ; [*1E1D.0020.0002] # JAPANESE INDUSTRIAL STANDARD SYMBOL
+3008 ; [*0394.0020.0002] # LEFT ANGLE BRACKET
+3009 ; [*0395.0020.0002] # RIGHT ANGLE BRACKET
+300A ; [*0396.0020.0002] # LEFT DOUBLE ANGLE BRACKET
+300B ; [*0397.0020.0002] # RIGHT DOUBLE ANGLE BRACKET
+300C ; [*0398.0020.0002] # LEFT CORNER BRACKET
+300D ; [*0399.0020.0002] # RIGHT CORNER BRACKET
+300E ; [*039A.0020.0002] # LEFT WHITE CORNER BRACKET
+300F ; [*039B.0020.0002] # RIGHT WHITE CORNER BRACKET
+3010 ; [*039C.0020.0002] # LEFT BLACK LENTICULAR BRACKET
+3011 ; [*039D.0020.0002] # RIGHT BLACK LENTICULAR BRACKET
+3012 ; [*1E1E.0020.0002] # POSTAL MARK
+3013 ; [*1E1F.0020.0002] # GETA MARK
+3014 ; [*039E.0020.0002] # LEFT TORTOISE SHELL BRACKET
+3015 ; [*039F.0020.0002] # RIGHT TORTOISE SHELL BRACKET
+3016 ; [*03A0.0020.0002] # LEFT WHITE LENTICULAR BRACKET
+3017 ; [*03A1.0020.0002] # RIGHT WHITE LENTICULAR BRACKET
+3018 ; [*03A2.0020.0002] # LEFT WHITE TORTOISE SHELL BRACKET
+3019 ; [*03A3.0020.0002] # RIGHT WHITE TORTOISE SHELL BRACKET
+301A ; [*03A4.0020.0002] # LEFT WHITE SQUARE BRACKET
+301B ; [*03A5.0020.0002] # RIGHT WHITE SQUARE BRACKET
+301C ; [*021F.0020.0002] # WAVE DASH
+301D ; [*032F.0020.0002] # REVERSED DOUBLE PRIME QUOTATION MARK
+301E ; [*0330.0020.0002] # DOUBLE PRIME QUOTATION MARK
+301F ; [*0331.0020.0002] # LOW DOUBLE PRIME QUOTATION MARK
+3020 ; [*1E20.0020.0002] # POSTAL MARK FACE
+3030 ; [*0220.0020.0002] # WAVY DASH
+3036 ; [*1E1E.0020.0004] # CIRCLED POSTAL MARK
+3037 ; [*1E21.0020.0002] # IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL
+303D ; [*03D6.0020.0002] # PART ALTERNATION MARK
+303E ; [*1E22.0020.0002] # IDEOGRAPHIC VARIATION INDICATOR
+303F ; [*1E23.0020.0002] # IDEOGRAPHIC HALF FILL SPACE
+309B ; [*04D8.0020.0002] # KATAKANA-HIRAGANA VOICED SOUND MARK
+309C ; [*04D9.0020.0002] # KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+30A0 ; [*0221.0020.0002] # KATAKANA-HIRAGANA DOUBLE HYPHEN
+30FB ; [*0222.0020.0002] # KATAKANA MIDDLE DOT
+3190 ; [*1E24.0020.0002] # IDEOGRAPHIC ANNOTATION LINKING MARK
+3191 ; [*1E25.0020.0002] # IDEOGRAPHIC ANNOTATION REVERSE MARK
+31C0 ; [*1DF9.0020.0002] # CJK STROKE T
+31C1 ; [*1DFA.0020.0002] # CJK STROKE WG
+31C2 ; [*1DFB.0020.0002] # CJK STROKE XG
+31C3 ; [*1DFC.0020.0002] # CJK STROKE BXG
+31C4 ; [*1DFD.0020.0002] # CJK STROKE SW
+31C5 ; [*1DFE.0020.0002] # CJK STROKE HZZ
+31C6 ; [*1DFF.0020.0002] # CJK STROKE HZG
+31C7 ; [*1E00.0020.0002] # CJK STROKE HP
+31C8 ; [*1E01.0020.0002] # CJK STROKE HZWG
+31C9 ; [*1E02.0020.0002] # CJK STROKE SZWG
+31CA ; [*1E03.0020.0002] # CJK STROKE HZT
+31CB ; [*1E04.0020.0002] # CJK STROKE HZZP
+31CC ; [*1E05.0020.0002] # CJK STROKE HPWG
+31CD ; [*1E06.0020.0002] # CJK STROKE HZW
+31CE ; [*1E07.0020.0002] # CJK STROKE HZZZ
+31CF ; [*1E08.0020.0002] # CJK STROKE N
+31D0 ; [*1E09.0020.0002] # CJK STROKE H
+31D1 ; [*1E0A.0020.0002] # CJK STROKE S
+31D2 ; [*1E0B.0020.0002] # CJK STROKE P
+31D3 ; [*1E0C.0020.0002] # CJK STROKE SP
+31D4 ; [*1E0D.0020.0002] # CJK STROKE D
+31D5 ; [*1E0E.0020.0002] # CJK STROKE HZ
+31D6 ; [*1E0F.0020.0002] # CJK STROKE HG
+31D7 ; [*1E10.0020.0002] # CJK STROKE SZ
+31D8 ; [*1E11.0020.0002] # CJK STROKE SWZ
+31D9 ; [*1E12.0020.0002] # CJK STROKE ST
+31DA ; [*1E13.0020.0002] # CJK STROKE SG
+31DB ; [*1E14.0020.0002] # CJK STROKE PD
+31DC ; [*1E15.0020.0002] # CJK STROKE PZ
+31DD ; [*1E16.0020.0002] # CJK STROKE TN
+31DE ; [*1E17.0020.0002] # CJK STROKE SZZ
+31DF ; [*1E18.0020.0002] # CJK STROKE SWG
+31E0 ; [*1E19.0020.0002] # CJK STROKE HXWG
+31E1 ; [*1E1A.0020.0002] # CJK STROKE HZZZG
+31E2 ; [*1E1B.0020.0002] # CJK STROKE PG
+31E3 ; [*1E1C.0020.0002] # CJK STROKE Q
+327F ; [*1E26.0020.0002] # KOREAN STANDARD SYMBOL
+4DC0 ; [*102D.0020.0002] # HEXAGRAM FOR THE CREATIVE HEAVEN
+4DC1 ; [*102E.0020.0002] # HEXAGRAM FOR THE RECEPTIVE EARTH
+4DC2 ; [*102F.0020.0002] # HEXAGRAM FOR DIFFICULTY AT THE BEGINNING
+4DC3 ; [*1030.0020.0002] # HEXAGRAM FOR YOUTHFUL FOLLY
+4DC4 ; [*1031.0020.0002] # HEXAGRAM FOR WAITING
+4DC5 ; [*1032.0020.0002] # HEXAGRAM FOR CONFLICT
+4DC6 ; [*1033.0020.0002] # HEXAGRAM FOR THE ARMY
+4DC7 ; [*1034.0020.0002] # HEXAGRAM FOR HOLDING TOGETHER
+4DC8 ; [*1035.0020.0002] # HEXAGRAM FOR SMALL TAMING
+4DC9 ; [*1036.0020.0002] # HEXAGRAM FOR TREADING
+4DCA ; [*1037.0020.0002] # HEXAGRAM FOR PEACE
+4DCB ; [*1038.0020.0002] # HEXAGRAM FOR STANDSTILL
+4DCC ; [*1039.0020.0002] # HEXAGRAM FOR FELLOWSHIP
+4DCD ; [*103A.0020.0002] # HEXAGRAM FOR GREAT POSSESSION
+4DCE ; [*103B.0020.0002] # HEXAGRAM FOR MODESTY
+4DCF ; [*103C.0020.0002] # HEXAGRAM FOR ENTHUSIASM
+4DD0 ; [*103D.0020.0002] # HEXAGRAM FOR FOLLOWING
+4DD1 ; [*103E.0020.0002] # HEXAGRAM FOR WORK ON THE DECAYED
+4DD2 ; [*103F.0020.0002] # HEXAGRAM FOR APPROACH
+4DD3 ; [*1040.0020.0002] # HEXAGRAM FOR CONTEMPLATION
+4DD4 ; [*1041.0020.0002] # HEXAGRAM FOR BITING THROUGH
+4DD5 ; [*1042.0020.0002] # HEXAGRAM FOR GRACE
+4DD6 ; [*1043.0020.0002] # HEXAGRAM FOR SPLITTING APART
+4DD7 ; [*1044.0020.0002] # HEXAGRAM FOR RETURN
+4DD8 ; [*1045.0020.0002] # HEXAGRAM FOR INNOCENCE
+4DD9 ; [*1046.0020.0002] # HEXAGRAM FOR GREAT TAMING
+4DDA ; [*1047.0020.0002] # HEXAGRAM FOR MOUTH CORNERS
+4DDB ; [*1048.0020.0002] # HEXAGRAM FOR GREAT PREPONDERANCE
+4DDC ; [*1049.0020.0002] # HEXAGRAM FOR THE ABYSMAL WATER
+4DDD ; [*104A.0020.0002] # HEXAGRAM FOR THE CLINGING FIRE
+4DDE ; [*104B.0020.0002] # HEXAGRAM FOR INFLUENCE
+4DDF ; [*104C.0020.0002] # HEXAGRAM FOR DURATION
+4DE0 ; [*104D.0020.0002] # HEXAGRAM FOR RETREAT
+4DE1 ; [*104E.0020.0002] # HEXAGRAM FOR GREAT POWER
+4DE2 ; [*104F.0020.0002] # HEXAGRAM FOR PROGRESS
+4DE3 ; [*1050.0020.0002] # HEXAGRAM FOR DARKENING OF THE LIGHT
+4DE4 ; [*1051.0020.0002] # HEXAGRAM FOR THE FAMILY
+4DE5 ; [*1052.0020.0002] # HEXAGRAM FOR OPPOSITION
+4DE6 ; [*1053.0020.0002] # HEXAGRAM FOR OBSTRUCTION
+4DE7 ; [*1054.0020.0002] # HEXAGRAM FOR DELIVERANCE
+4DE8 ; [*1055.0020.0002] # HEXAGRAM FOR DECREASE
+4DE9 ; [*1056.0020.0002] # HEXAGRAM FOR INCREASE
+4DEA ; [*1057.0020.0002] # HEXAGRAM FOR BREAKTHROUGH
+4DEB ; [*1058.0020.0002] # HEXAGRAM FOR COMING TO MEET
+4DEC ; [*1059.0020.0002] # HEXAGRAM FOR GATHERING TOGETHER
+4DED ; [*105A.0020.0002] # HEXAGRAM FOR PUSHING UPWARD
+4DEE ; [*105B.0020.0002] # HEXAGRAM FOR OPPRESSION
+4DEF ; [*105C.0020.0002] # HEXAGRAM FOR THE WELL
+4DF0 ; [*105D.0020.0002] # HEXAGRAM FOR REVOLUTION
+4DF1 ; [*105E.0020.0002] # HEXAGRAM FOR THE CAULDRON
+4DF2 ; [*105F.0020.0002] # HEXAGRAM FOR THE AROUSING THUNDER
+4DF3 ; [*1060.0020.0002] # HEXAGRAM FOR THE KEEPING STILL MOUNTAIN
+4DF4 ; [*1061.0020.0002] # HEXAGRAM FOR DEVELOPMENT
+4DF5 ; [*1062.0020.0002] # HEXAGRAM FOR THE MARRYING MAIDEN
+4DF6 ; [*1063.0020.0002] # HEXAGRAM FOR ABUNDANCE
+4DF7 ; [*1064.0020.0002] # HEXAGRAM FOR THE WANDERER
+4DF8 ; [*1065.0020.0002] # HEXAGRAM FOR THE GENTLE WIND
+4DF9 ; [*1066.0020.0002] # HEXAGRAM FOR THE JOYOUS LAKE
+4DFA ; [*1067.0020.0002] # HEXAGRAM FOR DISPERSION
+4DFB ; [*1068.0020.0002] # HEXAGRAM FOR LIMITATION
+4DFC ; [*1069.0020.0002] # HEXAGRAM FOR INNER TRUTH
+4DFD ; [*106A.0020.0002] # HEXAGRAM FOR SMALL PREPONDERANCE
+4DFE ; [*106B.0020.0002] # HEXAGRAM FOR AFTER COMPLETION
+4DFF ; [*106C.0020.0002] # HEXAGRAM FOR BEFORE COMPLETION
+A490 ; [*10C4.0020.0002] # YI RADICAL QOT
+A491 ; [*10C5.0020.0002] # YI RADICAL LI
+A492 ; [*10C6.0020.0002] # YI RADICAL KIT
+A493 ; [*10C7.0020.0002] # YI RADICAL NYIP
+A494 ; [*10C8.0020.0002] # YI RADICAL CYP
+A495 ; [*10C9.0020.0002] # YI RADICAL SSI
+A496 ; [*10CA.0020.0002] # YI RADICAL GGOP
+A497 ; [*10CB.0020.0002] # YI RADICAL GEP
+A498 ; [*10CC.0020.0002] # YI RADICAL MI
+A499 ; [*10CD.0020.0002] # YI RADICAL HXIT
+A49A ; [*10CE.0020.0002] # YI RADICAL LYR
+A49B ; [*10CF.0020.0002] # YI RADICAL BBUT
+A49C ; [*10D0.0020.0002] # YI RADICAL MOP
+A49D ; [*10D1.0020.0002] # YI RADICAL YO
+A49E ; [*10D2.0020.0002] # YI RADICAL PUT
+A49F ; [*10D3.0020.0002] # YI RADICAL HXUO
+A4A0 ; [*10D4.0020.0002] # YI RADICAL TAT
+A4A1 ; [*10D5.0020.0002] # YI RADICAL GA
+A4A2 ; [*10D6.0020.0002] # YI RADICAL ZUP
+A4A3 ; [*10D7.0020.0002] # YI RADICAL CYT
+A4A4 ; [*10D8.0020.0002] # YI RADICAL DDUR
+A4A5 ; [*10D9.0020.0002] # YI RADICAL BUR
+A4A6 ; [*10DA.0020.0002] # YI RADICAL GGUO
+A4A7 ; [*10DB.0020.0002] # YI RADICAL NYOP
+A4A8 ; [*10DC.0020.0002] # YI RADICAL TU
+A4A9 ; [*10DD.0020.0002] # YI RADICAL OP
+A4AA ; [*10DE.0020.0002] # YI RADICAL JJUT
+A4AB ; [*10DF.0020.0002] # YI RADICAL ZOT
+A4AC ; [*10E0.0020.0002] # YI RADICAL PYT
+A4AD ; [*10E1.0020.0002] # YI RADICAL HMO
+A4AE ; [*10E2.0020.0002] # YI RADICAL YIT
+A4AF ; [*10E3.0020.0002] # YI RADICAL VUR
+A4B0 ; [*10E4.0020.0002] # YI RADICAL SHY
+A4B1 ; [*10E5.0020.0002] # YI RADICAL VEP
+A4B2 ; [*10E6.0020.0002] # YI RADICAL ZA
+A4B3 ; [*10E7.0020.0002] # YI RADICAL JO
+A4B4 ; [*10E8.0020.0002] # YI RADICAL NZUP
+A4B5 ; [*10E9.0020.0002] # YI RADICAL JJY
+A4B6 ; [*10EA.0020.0002] # YI RADICAL GOT
+A4B7 ; [*10EB.0020.0002] # YI RADICAL JJIE
+A4B8 ; [*10EC.0020.0002] # YI RADICAL WO
+A4B9 ; [*10ED.0020.0002] # YI RADICAL DU
+A4BA ; [*10EE.0020.0002] # YI RADICAL SHUR
+A4BB ; [*10EF.0020.0002] # YI RADICAL LIE
+A4BC ; [*10F0.0020.0002] # YI RADICAL CY
+A4BD ; [*10F1.0020.0002] # YI RADICAL CUOP
+A4BE ; [*10F2.0020.0002] # YI RADICAL CIP
+A4BF ; [*10F3.0020.0002] # YI RADICAL HXOP
+A4C0 ; [*10F4.0020.0002] # YI RADICAL SHAT
+A4C1 ; [*10F5.0020.0002] # YI RADICAL ZUR
+A4C2 ; [*10F6.0020.0002] # YI RADICAL SHOP
+A4C3 ; [*10F7.0020.0002] # YI RADICAL CHE
+A4C4 ; [*10F8.0020.0002] # YI RADICAL ZZIET
+A4C5 ; [*10F9.0020.0002] # YI RADICAL NBIE
+A4C6 ; [*10FA.0020.0002] # YI RADICAL KE
+A4FE ; [*0233.0020.0002] # LISU PUNCTUATION COMMA
+A4FF ; [*028F.0020.0002] # LISU PUNCTUATION FULL STOP
+A60D ; [*0234.0020.0002] # VAI COMMA
+A60E ; [*0290.0020.0002] # VAI FULL STOP
+A60F ; [*027A.0020.0002] # VAI QUESTION MARK
+A670 ; [.0000.0000.0000] # COMBINING CYRILLIC TEN MILLIONS SIGN
+A671 ; [.0000.0000.0000] # COMBINING CYRILLIC HUNDRED MILLIONS SIGN
+A672 ; [.0000.0000.0000] # COMBINING CYRILLIC THOUSAND MILLIONS SIGN
+A673 ; [*03B9.0020.0002] # SLAVONIC ASTERISK
+A67E ; [*03F7.0020.0002] # CYRILLIC KAVYKA
+A6F2 ; [*02E6.0020.0002] # BAMUM NJAEMLI
+A6F3 ; [*0291.0020.0002] # BAMUM FULL STOP
+A6F4 ; [*0267.0020.0002] # BAMUM COLON
+A6F5 ; [*0235.0020.0002] # BAMUM COMMA
+A6F6 ; [*023F.0020.0002] # BAMUM SEMICOLON
+A6F7 ; [*027B.0020.0002] # BAMUM QUESTION MARK
+A700 ; [*0519.0020.0002] # MODIFIER LETTER CHINESE TONE YIN PING
+A701 ; [*051A.0020.0002] # MODIFIER LETTER CHINESE TONE YANG PING
+A702 ; [*051B.0020.0002] # MODIFIER LETTER CHINESE TONE YIN SHANG
+A703 ; [*051C.0020.0002] # MODIFIER LETTER CHINESE TONE YANG SHANG
+A704 ; [*051D.0020.0002] # MODIFIER LETTER CHINESE TONE YIN QU
+A705 ; [*051E.0020.0002] # MODIFIER LETTER CHINESE TONE YANG QU
+A706 ; [*051F.0020.0002] # MODIFIER LETTER CHINESE TONE YIN RU
+A707 ; [*0520.0020.0002] # MODIFIER LETTER CHINESE TONE YANG RU
+A708 ; [*0521.0020.0002] # MODIFIER LETTER EXTRA-HIGH DOTTED TONE BAR
+A709 ; [*0522.0020.0002] # MODIFIER LETTER HIGH DOTTED TONE BAR
+A70A ; [*0523.0020.0002] # MODIFIER LETTER MID DOTTED TONE BAR
+A70B ; [*0524.0020.0002] # MODIFIER LETTER LOW DOTTED TONE BAR
+A70C ; [*0525.0020.0002] # MODIFIER LETTER EXTRA-LOW DOTTED TONE BAR
+A70D ; [*0526.0020.0002] # MODIFIER LETTER EXTRA-HIGH DOTTED LEFT-STEM TONE BAR
+A70E ; [*0527.0020.0002] # MODIFIER LETTER HIGH DOTTED LEFT-STEM TONE BAR
+A70F ; [*0528.0020.0002] # MODIFIER LETTER MID DOTTED LEFT-STEM TONE BAR
+A710 ; [*0529.0020.0002] # MODIFIER LETTER LOW DOTTED LEFT-STEM TONE BAR
+A711 ; [*052A.0020.0002] # MODIFIER LETTER EXTRA-LOW DOTTED LEFT-STEM TONE BAR
+A712 ; [*052B.0020.0002] # MODIFIER LETTER EXTRA-HIGH LEFT-STEM TONE BAR
+A713 ; [*052C.0020.0002] # MODIFIER LETTER HIGH LEFT-STEM TONE BAR
+A714 ; [*052D.0020.0002] # MODIFIER LETTER MID LEFT-STEM TONE BAR
+A715 ; [*052E.0020.0002] # MODIFIER LETTER LOW LEFT-STEM TONE BAR
+A716 ; [*052F.0020.0002] # MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR
+A717 ; [*0530.0020.0002] # MODIFIER LETTER DOT VERTICAL BAR
+A718 ; [*0531.0020.0002] # MODIFIER LETTER DOT SLASH
+A719 ; [*0532.0020.0002] # MODIFIER LETTER DOT HORIZONTAL BAR
+A71A ; [*0533.0020.0002] # MODIFIER LETTER LOWER RIGHT CORNER ANGLE
+A71B ; [*0534.0020.0002] # MODIFIER LETTER RAISED UP ARROW
+A71C ; [*0535.0020.0002] # MODIFIER LETTER RAISED DOWN ARROW
+A71D ; [*0536.0020.0002] # MODIFIER LETTER RAISED EXCLAMATION MARK
+A71E ; [*0537.0020.0002] # MODIFIER LETTER RAISED INVERTED EXCLAMATION MARK
+A71F ; [*0538.0020.0002] # MODIFIER LETTER LOW INVERTED EXCLAMATION MARK
+A720 ; [*0539.0020.0002] # MODIFIER LETTER STRESS AND HIGH TONE
+A721 ; [*053A.0020.0002] # MODIFIER LETTER STRESS AND LOW TONE
+A788 ; [*053B.0020.0002] # MODIFIER LETTER LOW CIRCUMFLEX ACCENT
+A789 ; [*053C.0020.0002] # MODIFIER LETTER COLON
+A78A ; [*053D.0020.0002] # MODIFIER LETTER SHORT EQUALS SIGN
+A828 ; [*05A3.0020.0002] # SYLOTI NAGRI POETRY MARK-1
+A829 ; [*05A4.0020.0002] # SYLOTI NAGRI POETRY MARK-2
+A82A ; [*05A5.0020.0002] # SYLOTI NAGRI POETRY MARK-3
+A82B ; [*05A6.0020.0002] # SYLOTI NAGRI POETRY MARK-4
+A830 ; [*1E34.0020.0002] # NORTH INDIC FRACTION ONE QUARTER
+A831 ; [*1E35.0020.0002] # NORTH INDIC FRACTION ONE HALF
+A832 ; [*1E36.0020.0002] # NORTH INDIC FRACTION THREE QUARTERS
+A833 ; [*1E37.0020.0002] # NORTH INDIC FRACTION ONE SIXTEENTH
+A834 ; [*1E38.0020.0002] # NORTH INDIC FRACTION ONE EIGHTH
+A835 ; [*1E39.0020.0002] # NORTH INDIC FRACTION THREE SIXTEENTHS
+A836 ; [*05A7.0020.0002] # NORTH INDIC QUARTER MARK
+A837 ; [*05A8.0020.0002] # NORTH INDIC PLACEHOLDER MARK
+A839 ; [*05A9.0020.0002] # NORTH INDIC QUANTITY MARK
+A874 ; [*0468.0020.0002] # PHAGS-PA SINGLE HEAD MARK
+A875 ; [*0469.0020.0002] # PHAGS-PA DOUBLE HEAD MARK
+A876 ; [*029F.0020.0002] # PHAGS-PA MARK SHAD
+A877 ; [*02A0.0020.0002] # PHAGS-PA MARK DOUBLE SHAD
+A8CE ; [*029B.0020.0002] # SAURASHTRA DANDA
+A8CF ; [*029C.0020.0002] # SAURASHTRA DOUBLE DANDA
+A8E0 ; [.0000.0000.0000] # COMBINING DEVANAGARI DIGIT ZERO
+A8E1 ; [.0000.0000.0000] # COMBINING DEVANAGARI DIGIT ONE
+A8E2 ; [.0000.0000.0000] # COMBINING DEVANAGARI DIGIT TWO
+A8E3 ; [.0000.0000.0000] # COMBINING DEVANAGARI DIGIT THREE
+A8E4 ; [.0000.0000.0000] # COMBINING DEVANAGARI DIGIT FOUR
+A8E5 ; [.0000.0000.0000] # COMBINING DEVANAGARI DIGIT FIVE
+A8E6 ; [.0000.0000.0000] # COMBINING DEVANAGARI DIGIT SIX
+A8E7 ; [.0000.0000.0000] # COMBINING DEVANAGARI DIGIT SEVEN
+A8E8 ; [.0000.0000.0000] # COMBINING DEVANAGARI DIGIT EIGHT
+A8E9 ; [.0000.0000.0000] # COMBINING DEVANAGARI DIGIT NINE
+A8EA ; [.0000.0000.0000] # COMBINING DEVANAGARI LETTER A
+A8EB ; [.0000.0000.0000] # COMBINING DEVANAGARI LETTER U
+A8EC ; [.0000.0000.0000] # COMBINING DEVANAGARI LETTER KA
+A8ED ; [.0000.0000.0000] # COMBINING DEVANAGARI LETTER NA
+A8EE ; [.0000.0000.0000] # COMBINING DEVANAGARI LETTER PA
+A8EF ; [.0000.0000.0000] # COMBINING DEVANAGARI LETTER RA
+A8F0 ; [.0000.0000.0000] # COMBINING DEVANAGARI LETTER VI
+A8F1 ; [.0000.0000.0000] # COMBINING DEVANAGARI SIGN AVAGRAHA
+A8F8 ; [*0415.0020.0002] # DEVANAGARI SIGN PUSHPIKA
+A8F9 ; [*0416.0020.0002] # DEVANAGARI GAP FILLER
+A8FA ; [*0417.0020.0002] # DEVANAGARI CARET
+A8FC ; [*0418.0020.0002] # DEVANAGARI SIGN SIDDHAM
+A92E ; [*046E.0020.0002] # KAYAH LI SIGN CWI
+A92F ; [*02A3.0020.0002] # KAYAH LI SIGN SHYA
+A95F ; [*02E7.0020.0002] # REJANG SECTION MARK
+A9C1 ; [*02DC.0020.0002] # JAVANESE LEFT RERENGGAN
+A9C2 ; [*02DD.0020.0002] # JAVANESE RIGHT RERENGGAN
+A9C3 ; [*02DE.0020.0002] # JAVANESE PADA ANDAP
+A9C4 ; [*02DF.0020.0002] # JAVANESE PADA MADYA
+A9C5 ; [*02E0.0020.0002] # JAVANESE PADA LUHUR
+A9C6 ; [*02E1.0020.0002] # JAVANESE PADA WINDU
+A9C7 ; [*0263.0020.0002] # JAVANESE PADA PANGKAT
+A9C8 ; [*02AE.0020.0002] # JAVANESE PADA LINGSA
+A9C9 ; [*02AF.0020.0002] # JAVANESE PADA LUNGSI
+A9CA ; [*02E2.0020.0002] # JAVANESE PADA ADEG
+A9CB ; [*02E3.0020.0002] # JAVANESE PADA ADEG ADEG
+A9CC ; [*02E4.0020.0002] # JAVANESE PADA PISELEH
+A9CD ; [*02E5.0020.0002] # JAVANESE TURNED PADA PISELEH
+A9DE ; [*046F.0020.0002] # JAVANESE PADA TIRTA TUMETES
+A9DF ; [*0470.0020.0002] # JAVANESE PADA ISEN-ISEN
+AA5C ; [*0471.0020.0002] # CHAM PUNCTUATION SPIRAL
+AA5D ; [*02B0.0020.0002] # CHAM PUNCTUATION DANDA
+AA5E ; [*02B1.0020.0002] # CHAM PUNCTUATION DOUBLE DANDA
+AA5F ; [*02B2.0020.0002] # CHAM PUNCTUATION TRIPLE DANDA
+AA77 ; [*05D2.0020.0002] # MYANMAR SYMBOL AITON EXCLAMATION
+AA78 ; [*05D3.0020.0002] # MYANMAR SYMBOL AITON ONE
+AA79 ; [*05D4.0020.0002] # MYANMAR SYMBOL AITON TWO
+AADE ; [*0422.0020.0002] # TAI VIET SYMBOL HO HOI
+AADF ; [*0423.0020.0002] # TAI VIET SYMBOL KOI KOI
+AAF0 ; [*02B3.0020.0002] # MEETEI MAYEK CHEIKHAN
+AAF1 ; [*027C.0020.0002] # MEETEI MAYEK AHANG KHUDAM
+AB5B ; [*053E.0020.0002] # MODIFIER BREVE WITH INVERTED BREVE
+AB6A ; [*04EF.0020.0002] # MODIFIER LETTER LEFT TACK
+AB6B ; [*04F0.0020.0002] # MODIFIER LETTER RIGHT TACK
+ABEB ; [*02B4.0020.0002] # MEETEI MAYEK CHEIKHEI
+FB29 ; [*069D.0020.0005] # HEBREW LETTER ALTERNATIVE PLUS SIGN
+FBB2 ; [*056C.0020.0002] # ARABIC SYMBOL DOT ABOVE
+FBB3 ; [*056D.0020.0002] # ARABIC SYMBOL DOT BELOW
+FBB4 ; [*056E.0020.0002] # ARABIC SYMBOL TWO DOTS ABOVE
+FBB5 ; [*056F.0020.0002] # ARABIC SYMBOL TWO DOTS BELOW
+FBB6 ; [*0570.0020.0002] # ARABIC SYMBOL THREE DOTS ABOVE
+FBB7 ; [*0571.0020.0002] # ARABIC SYMBOL THREE DOTS BELOW
+FBB8 ; [*0572.0020.0002] # ARABIC SYMBOL THREE DOTS POINTING DOWNWARDS ABOVE
+FBB9 ; [*0573.0020.0002] # ARABIC SYMBOL THREE DOTS POINTING DOWNWARDS BELOW
+FBBA ; [*0574.0020.0002] # ARABIC SYMBOL FOUR DOTS ABOVE
+FBBB ; [*0575.0020.0002] # ARABIC SYMBOL FOUR DOTS BELOW
+FBBC ; [*0576.0020.0002] # ARABIC SYMBOL DOUBLE VERTICAL BAR BELOW
+FBBD ; [*0577.0020.0002] # ARABIC SYMBOL TWO DOTS VERTICALLY ABOVE
+FBBE ; [*0578.0020.0002] # ARABIC SYMBOL TWO DOTS VERTICALLY BELOW
+FBBF ; [*0579.0020.0002] # ARABIC SYMBOL RING
+FBC0 ; [*057A.0020.0002] # ARABIC SYMBOL SMALL TAH ABOVE
+FBC1 ; [*057B.0020.0002] # ARABIC SYMBOL SMALL TAH BELOW
+FBC2 ; [*057C.0020.0002] # ARABIC SYMBOL WASLA ABOVE
+FD3E ; [*03A6.0020.0002] # ORNATE LEFT PARENTHESIS
+FD3F ; [*03A7.0020.0002] # ORNATE RIGHT PARENTHESIS
+FD40 ; [*0557.0020.0002] # ARABIC LIGATURE RAHIMAHU ALLAAH
+FD41 ; [*0558.0020.0002] # ARABIC LIGATURE RADI ALLAAHU ANH
+FD42 ; [*0559.0020.0002] # ARABIC LIGATURE RADI ALLAAHU ANHAA
+FD43 ; [*055A.0020.0002] # ARABIC LIGATURE RADI ALLAAHU ANHUM
+FD44 ; [*055B.0020.0002] # ARABIC LIGATURE RADI ALLAAHU ANHUMAA
+FD45 ; [*055C.0020.0002] # ARABIC LIGATURE RADI ALLAAHU ANHUNNA
+FD46 ; [*055D.0020.0002] # ARABIC LIGATURE SALLALLAAHU ALAYHI WA-AALIH
+FD47 ; [*055E.0020.0002] # ARABIC LIGATURE ALAYHI AS-SALAAM
+FD48 ; [*055F.0020.0002] # ARABIC LIGATURE ALAYHIM AS-SALAAM
+FD49 ; [*0560.0020.0002] # ARABIC LIGATURE ALAYHIMAA AS-SALAAM
+FD4A ; [*0561.0020.0002] # ARABIC LIGATURE ALAYHI AS-SALAATU WAS-SALAAM
+FD4B ; [*0562.0020.0002] # ARABIC LIGATURE QUDDISA SIRRAH
+FD4C ; [*0563.0020.0002] # ARABIC LIGATURE SALLALLAHU ALAYHI WAAALIHEE WA-SALLAM
+FD4D ; [*0564.0020.0002] # ARABIC LIGATURE ALAYHAA AS-SALAAM
+FD4E ; [*0565.0020.0002] # ARABIC LIGATURE TABAARAKA WA-TAAALAA
+FD4F ; [*0566.0020.0002] # ARABIC LIGATURE RAHIMAHUM ALLAAH
+FDCF ; [*0567.0020.0002] # ARABIC LIGATURE SALAAMUHU ALAYNAA
+FDFD ; [*0568.0020.0002] # ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM
+FDFE ; [*0569.0020.0002] # ARABIC LIGATURE SUBHAANAHU WA TAAALAA
+FDFF ; [*056A.0020.0002] # ARABIC LIGATURE AZZA WA JALL
+FE10 ; [*0224.0020.0016] # PRESENTATION FORM FOR VERTICAL COMMA
+FE11 ; [*0237.0020.0016] # PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC COMMA
+FE12 ; [*0295.0020.0016] # PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC FULL STOP
+FE13 ; [*0241.0020.0016] # PRESENTATION FORM FOR VERTICAL COLON
+FE14 ; [*023B.0020.0016] # PRESENTATION FORM FOR VERTICAL SEMICOLON
+FE15 ; [*0268.0020.0016] # PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK
+FE16 ; [*026F.0020.0016] # PRESENTATION FORM FOR VERTICAL QUESTION MARK
+FE17 ; [*03A0.0020.0016] # PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET
+FE18 ; [*03A1.0020.0016] # PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET
+FE19 ; [*0281.0020.0016][*0281.0020.0016][*0281.0020.0016] # PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS
+FE21 ; [.0000.0000.0000] # COMBINING LIGATURE RIGHT HALF
+FE23 ; [.0000.0000.0000] # COMBINING DOUBLE TILDE RIGHT HALF
+FE24 ; [.0000.0000.0000] # COMBINING MACRON LEFT HALF
+FE25 ; [.0000.0000.0000] # COMBINING MACRON RIGHT HALF
+FE26 ; [.0000.0000.0000] # COMBINING CONJOINING MACRON
+FE28 ; [.0000.0000.0000] # COMBINING LIGATURE RIGHT HALF BELOW
+FE2A ; [.0000.0000.0000] # COMBINING TILDE RIGHT HALF BELOW
+FE2B ; [.0000.0000.0000] # COMBINING MACRON LEFT HALF BELOW
+FE2C ; [.0000.0000.0000] # COMBINING MACRON RIGHT HALF BELOW
+FE2D ; [.0000.0000.0000] # COMBINING CONJOINING MACRON BELOW
+FE2F ; [.0000.0000.0000] # COMBINING CYRILLIC TITLO RIGHT HALF
+FE30 ; [*0281.0020.0016][*0281.0020.0016] # PRESENTATION FORM FOR VERTICAL TWO DOT LEADER
+FE31 ; [*0216.0020.0016] # PRESENTATION FORM FOR VERTICAL EM DASH
+FE32 ; [*0215.0020.0016] # PRESENTATION FORM FOR VERTICAL EN DASH
+FE33 ; [*020B.0020.0016] # PRESENTATION FORM FOR VERTICAL LOW LINE
+FE34 ; [*020B.0020.0016] # PRESENTATION FORM FOR VERTICAL WAVY LOW LINE
+FE35 ; [*0334.0020.0016] # PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS
+FE36 ; [*0335.0020.0016] # PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS
+FE37 ; [*0338.0020.0016] # PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET
+FE38 ; [*0339.0020.0016] # PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET
+FE39 ; [*039E.0020.0016] # PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET
+FE3A ; [*039F.0020.0016] # PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET
+FE3B ; [*039C.0020.0016] # PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET
+FE3C ; [*039D.0020.0016] # PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET
+FE3D ; [*0396.0020.0016] # PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET
+FE3E ; [*0397.0020.0016] # PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET
+FE3F ; [*0394.0020.0016] # PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET
+FE40 ; [*0395.0020.0016] # PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET
+FE41 ; [*0398.0020.0016] # PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET
+FE42 ; [*0399.0020.0016] # PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET
+FE43 ; [*039A.0020.0016] # PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET
+FE44 ; [*039B.0020.0016] # PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET
+FE45 ; [*0238.0020.0002] # SESAME DOT
+FE46 ; [*0239.0020.0002] # WHITE SESAME DOT
+FE47 ; [*0336.0020.0016] # PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET
+FE48 ; [*0337.0020.0016] # PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET
+FE49 ; [*020A.0020.0004] # DASHED OVERLINE
+FE4A ; [*020A.0020.0004] # CENTRELINE OVERLINE
+FE4B ; [*020A.0020.0004] # WAVY OVERLINE
+FE4C ; [*020A.0020.0004] # DOUBLE WAVY OVERLINE
+FE4D ; [*020B.0020.0004] # DASHED LOW LINE
+FE4E ; [*020B.0020.0004] # CENTRELINE LOW LINE
+FE4F ; [*020B.0020.0004] # WAVY LOW LINE
+FE50 ; [*0224.0020.000F] # SMALL COMMA
+FE51 ; [*0237.0020.000F] # SMALL IDEOGRAPHIC COMMA
+FE52 ; [*0281.0020.000F] # SMALL FULL STOP
+FE54 ; [*023B.0020.000F] # SMALL SEMICOLON
+FE55 ; [*0241.0020.000F] # SMALL COLON
+FE56 ; [*026F.0020.000F] # SMALL QUESTION MARK
+FE57 ; [*0268.0020.000F] # SMALL EXCLAMATION MARK
+FE58 ; [*0216.0020.000F] # SMALL EM DASH
+FE59 ; [*0334.0020.000F] # SMALL LEFT PARENTHESIS
+FE5A ; [*0335.0020.000F] # SMALL RIGHT PARENTHESIS
+FE5B ; [*0338.0020.000F] # SMALL LEFT CURLY BRACKET
+FE5C ; [*0339.0020.000F] # SMALL RIGHT CURLY BRACKET
+FE5D ; [*039E.0020.000F] # SMALL LEFT TORTOISE SHELL BRACKET
+FE5E ; [*039F.0020.000F] # SMALL RIGHT TORTOISE SHELL BRACKET
+FE5F ; [*03C0.0020.000F] # SMALL NUMBER SIGN
+FE60 ; [*03BD.0020.000F] # SMALL AMPERSAND
+FE61 ; [*03B5.0020.000F] # SMALL ASTERISK
+FE62 ; [*069D.0020.000F] # SMALL PLUS SIGN
+FE63 ; [*020D.0020.000F] # SMALL HYPHEN-MINUS
+FE64 ; [*06A1.0020.000F] # SMALL LESS-THAN SIGN
+FE65 ; [*06A3.0020.000F] # SMALL GREATER-THAN SIGN
+FE66 ; [*06A2.0020.000F] # SMALL EQUALS SIGN
+FE68 ; [*03BB.0020.000F] # SMALL REVERSE SOLIDUS
+FE6A ; [*03C1.0020.000F] # SMALL PERCENT SIGN
+FE6B ; [*03B4.0020.000F] # SMALL COMMERCIAL AT
+FE73 ; [.0000.0000.0000] # ARABIC TAIL FRAGMENT
+FF01 ; [*0268.0020.0003] # FULLWIDTH EXCLAMATION MARK
+FF02 ; [*0329.0020.0003] # FULLWIDTH QUOTATION MARK
+FF03 ; [*03C0.0020.0003] # FULLWIDTH NUMBER SIGN
+FF05 ; [*03C1.0020.0003] # FULLWIDTH PERCENT SIGN
+FF06 ; [*03BD.0020.0003] # FULLWIDTH AMPERSAND
+FF07 ; [*0322.0020.0003] # FULLWIDTH APOSTROPHE
+FF08 ; [*0334.0020.0003] # FULLWIDTH LEFT PARENTHESIS
+FF09 ; [*0335.0020.0003] # FULLWIDTH RIGHT PARENTHESIS
+FF0A ; [*03B5.0020.0003] # FULLWIDTH ASTERISK
+FF0B ; [*069D.0020.0003] # FULLWIDTH PLUS SIGN
+FF0C ; [*0224.0020.0003] # FULLWIDTH COMMA
+FF0D ; [*020D.0020.0003] # FULLWIDTH HYPHEN-MINUS
+FF0E ; [*0281.0020.0003] # FULLWIDTH FULL STOP
+FF0F ; [*03BA.0020.0003] # FULLWIDTH SOLIDUS
+FF1A ; [*0241.0020.0003] # FULLWIDTH COLON
+FF1B ; [*023B.0020.0003] # FULLWIDTH SEMICOLON
+FF1C ; [*06A1.0020.0003] # FULLWIDTH LESS-THAN SIGN
+FF1D ; [*06A2.0020.0003] # FULLWIDTH EQUALS SIGN
+FF1E ; [*06A3.0020.0003] # FULLWIDTH GREATER-THAN SIGN
+FF1F ; [*026F.0020.0003] # FULLWIDTH QUESTION MARK
+FF20 ; [*03B4.0020.0003] # FULLWIDTH COMMERCIAL AT
+FF3B ; [*0336.0020.0003] # FULLWIDTH LEFT SQUARE BRACKET
+FF3C ; [*03BB.0020.0003] # FULLWIDTH REVERSE SOLIDUS
+FF3D ; [*0337.0020.0003] # FULLWIDTH RIGHT SQUARE BRACKET
+FF3E ; [*04CC.0020.0003] # FULLWIDTH CIRCUMFLEX ACCENT
+FF3F ; [*020B.0020.0003] # FULLWIDTH LOW LINE
+FF40 ; [*04C9.0020.0003] # FULLWIDTH GRAVE ACCENT
+FF5B ; [*0338.0020.0003] # FULLWIDTH LEFT CURLY BRACKET
+FF5C ; [*06A5.0020.0003] # FULLWIDTH VERTICAL LINE
+FF5D ; [*0339.0020.0003] # FULLWIDTH RIGHT CURLY BRACKET
+FF5E ; [*06A7.0020.0003] # FULLWIDTH TILDE
+FF5F ; [*034A.0020.0003] # FULLWIDTH LEFT WHITE PARENTHESIS
+FF60 ; [*034B.0020.0003] # FULLWIDTH RIGHT WHITE PARENTHESIS
+FF61 ; [*0295.0020.0012] # HALFWIDTH IDEOGRAPHIC FULL STOP
+FF62 ; [*0398.0020.0012] # HALFWIDTH LEFT CORNER BRACKET
+FF63 ; [*0399.0020.0012] # HALFWIDTH RIGHT CORNER BRACKET
+FF64 ; [*0237.0020.0012] # HALFWIDTH IDEOGRAPHIC COMMA
+FF65 ; [*0222.0020.0012] # HALFWIDTH KATAKANA MIDDLE DOT
+FFE2 ; [*06A4.0020.0003] # FULLWIDTH NOT SIGN
+FFE3 ; [*04CD.0020.0003] # FULLWIDTH MACRON
+FFE4 ; [*06A6.0020.0003] # FULLWIDTH BROKEN BAR
+FFE8 ; [*08A2.0020.0012] # HALFWIDTH FORMS LIGHT VERTICAL
+FFE9 ; [*0623.0020.0012] # HALFWIDTH LEFTWARDS ARROW
+FFEA ; [*0625.0020.0012] # HALFWIDTH UPWARDS ARROW
+FFEB ; [*0624.0020.0012] # HALFWIDTH RIGHTWARDS ARROW
+FFEC ; [*0626.0020.0012] # HALFWIDTH DOWNWARDS ARROW
+FFED ; [*0940.0020.0012] # HALFWIDTH BLACK SQUARE
+FFEE ; [*096B.0020.0012] # HALFWIDTH WHITE CIRCLE
+FFFC ; [*1E27.0020.0002] # OBJECT REPLACEMENT CHARACTER
+10100 ; [*0315.0020.0002] # AEGEAN WORD SEPARATOR LINE
+10101 ; [*0316.0020.0002] # AEGEAN WORD SEPARATOR DOT
+10102 ; [*0317.0020.0002] # AEGEAN CHECK MARK
+10110 ; [*1E90.0020.0002] # AEGEAN NUMBER TEN
+10111 ; [*1E91.0020.0002] # AEGEAN NUMBER TWENTY
+10112 ; [*1E92.0020.0002] # AEGEAN NUMBER THIRTY
+10113 ; [*1E93.0020.0002] # AEGEAN NUMBER FORTY
+10114 ; [*1E94.0020.0002] # AEGEAN NUMBER FIFTY
+10115 ; [*1E95.0020.0002] # AEGEAN NUMBER SIXTY
+10116 ; [*1E96.0020.0002] # AEGEAN NUMBER SEVENTY
+10117 ; [*1E97.0020.0002] # AEGEAN NUMBER EIGHTY
+10118 ; [*1E98.0020.0002] # AEGEAN NUMBER NINETY
+10119 ; [*1E99.0020.0002] # AEGEAN NUMBER ONE HUNDRED
+1011A ; [*1E9A.0020.0002] # AEGEAN NUMBER TWO HUNDRED
+1011B ; [*1E9B.0020.0002] # AEGEAN NUMBER THREE HUNDRED
+1011C ; [*1E9C.0020.0002] # AEGEAN NUMBER FOUR HUNDRED
+1011D ; [*1E9D.0020.0002] # AEGEAN NUMBER FIVE HUNDRED
+1011E ; [*1E9E.0020.0002] # AEGEAN NUMBER SIX HUNDRED
+1011F ; [*1E9F.0020.0002] # AEGEAN NUMBER SEVEN HUNDRED
+10120 ; [*1EA0.0020.0002] # AEGEAN NUMBER EIGHT HUNDRED
+10121 ; [*1EA1.0020.0002] # AEGEAN NUMBER NINE HUNDRED
+10122 ; [*1EA2.0020.0002] # AEGEAN NUMBER ONE THOUSAND
+10123 ; [*1EA3.0020.0002] # AEGEAN NUMBER TWO THOUSAND
+10124 ; [*1EA4.0020.0002] # AEGEAN NUMBER THREE THOUSAND
+10125 ; [*1EA5.0020.0002] # AEGEAN NUMBER FOUR THOUSAND
+10126 ; [*1EA6.0020.0002] # AEGEAN NUMBER FIVE THOUSAND
+10127 ; [*1EA7.0020.0002] # AEGEAN NUMBER SIX THOUSAND
+10128 ; [*1EA8.0020.0002] # AEGEAN NUMBER SEVEN THOUSAND
+10129 ; [*1EA9.0020.0002] # AEGEAN NUMBER EIGHT THOUSAND
+1012A ; [*1EAA.0020.0002] # AEGEAN NUMBER NINE THOUSAND
+1012B ; [*1EAB.0020.0002] # AEGEAN NUMBER TEN THOUSAND
+1012C ; [*1EAC.0020.0002] # AEGEAN NUMBER TWENTY THOUSAND
+1012D ; [*1EAD.0020.0002] # AEGEAN NUMBER THIRTY THOUSAND
+1012E ; [*1EAE.0020.0002] # AEGEAN NUMBER FORTY THOUSAND
+1012F ; [*1EAF.0020.0002] # AEGEAN NUMBER FIFTY THOUSAND
+10130 ; [*1EB0.0020.0002] # AEGEAN NUMBER SIXTY THOUSAND
+10131 ; [*1EB1.0020.0002] # AEGEAN NUMBER SEVENTY THOUSAND
+10132 ; [*1EB2.0020.0002] # AEGEAN NUMBER EIGHTY THOUSAND
+10133 ; [*1EB3.0020.0002] # AEGEAN NUMBER NINETY THOUSAND
+10137 ; [*10FB.0020.0002] # AEGEAN WEIGHT BASE UNIT
+10138 ; [*10FC.0020.0002] # AEGEAN WEIGHT FIRST SUBUNIT
+10139 ; [*10FD.0020.0002] # AEGEAN WEIGHT SECOND SUBUNIT
+1013A ; [*10FE.0020.0002] # AEGEAN WEIGHT THIRD SUBUNIT
+1013B ; [*10FF.0020.0002] # AEGEAN WEIGHT FOURTH SUBUNIT
+1013C ; [*1100.0020.0002] # AEGEAN DRY MEASURE FIRST SUBUNIT
+1013D ; [*1101.0020.0002] # AEGEAN LIQUID MEASURE FIRST SUBUNIT
+1013E ; [*1102.0020.0002] # AEGEAN MEASURE SECOND SUBUNIT
+1013F ; [*1103.0020.0002] # AEGEAN MEASURE THIRD SUBUNIT
+10140 ; [*1EB4.0020.0002] # GREEK ACROPHONIC ATTIC ONE QUARTER
+10141 ; [*1EB5.0020.0002] # GREEK ACROPHONIC ATTIC ONE HALF
+10144 ; [*1EB6.0020.0002] # GREEK ACROPHONIC ATTIC FIFTY
+10145 ; [*1EB7.0020.0002] # GREEK ACROPHONIC ATTIC FIVE HUNDRED
+10146 ; [*1EB8.0020.0002] # GREEK ACROPHONIC ATTIC FIVE THOUSAND
+10147 ; [*1EB9.0020.0002] # GREEK ACROPHONIC ATTIC FIFTY THOUSAND
+10149 ; [*1EBA.0020.0002] # GREEK ACROPHONIC ATTIC TEN TALENTS
+1014A ; [*1EBB.0020.0002] # GREEK ACROPHONIC ATTIC FIFTY TALENTS
+1014B ; [*1EBC.0020.0002] # GREEK ACROPHONIC ATTIC ONE HUNDRED TALENTS
+1014C ; [*1EBD.0020.0002] # GREEK ACROPHONIC ATTIC FIVE HUNDRED TALENTS
+1014D ; [*1EBE.0020.0002] # GREEK ACROPHONIC ATTIC ONE THOUSAND TALENTS
+1014E ; [*1EBF.0020.0002] # GREEK ACROPHONIC ATTIC FIVE THOUSAND TALENTS
+10150 ; [*1EC0.0020.0002] # GREEK ACROPHONIC ATTIC TEN STATERS
+10151 ; [*1EC1.0020.0002] # GREEK ACROPHONIC ATTIC FIFTY STATERS
+10152 ; [*1EC2.0020.0002] # GREEK ACROPHONIC ATTIC ONE HUNDRED STATERS
+10153 ; [*1EC3.0020.0002] # GREEK ACROPHONIC ATTIC FIVE HUNDRED STATERS
+10154 ; [*1EC4.0020.0002] # GREEK ACROPHONIC ATTIC ONE THOUSAND STATERS
+10155 ; [*1EC5.0020.0002] # GREEK ACROPHONIC ATTIC TEN THOUSAND STATERS
+10156 ; [*1EC6.0020.0002] # GREEK ACROPHONIC ATTIC FIFTY THOUSAND STATERS
+10157 ; [*1EC7.0020.0002] # GREEK ACROPHONIC ATTIC TEN MNAS
+10160 ; [*1EC8.0020.0002] # GREEK ACROPHONIC TROEZENIAN TEN
+10161 ; [*1EC9.0020.0002] # GREEK ACROPHONIC TROEZENIAN TEN ALTERNATE FORM
+10162 ; [*1ECA.0020.0002] # GREEK ACROPHONIC HERMIONIAN TEN
+10163 ; [*1ECB.0020.0002] # GREEK ACROPHONIC MESSENIAN TEN
+10164 ; [*1ECC.0020.0002] # GREEK ACROPHONIC THESPIAN TEN
+10165 ; [*1ECD.0020.0002] # GREEK ACROPHONIC THESPIAN THIRTY
+10166 ; [*1ECE.0020.0002] # GREEK ACROPHONIC TROEZENIAN FIFTY
+10167 ; [*1ECF.0020.0002] # GREEK ACROPHONIC TROEZENIAN FIFTY ALTERNATE FORM
+10168 ; [*1ED0.0020.0002] # GREEK ACROPHONIC HERMIONIAN FIFTY
+10169 ; [*1ED1.0020.0002] # GREEK ACROPHONIC THESPIAN FIFTY
+1016A ; [*1ED2.0020.0002] # GREEK ACROPHONIC THESPIAN ONE HUNDRED
+1016B ; [*1ED3.0020.0002] # GREEK ACROPHONIC THESPIAN THREE HUNDRED
+1016C ; [*1ED4.0020.0002] # GREEK ACROPHONIC EPIDAUREAN FIVE HUNDRED
+1016D ; [*1ED5.0020.0002] # GREEK ACROPHONIC TROEZENIAN FIVE HUNDRED
+1016E ; [*1ED6.0020.0002] # GREEK ACROPHONIC THESPIAN FIVE HUNDRED
+1016F ; [*1ED7.0020.0002] # GREEK ACROPHONIC CARYSTIAN FIVE HUNDRED
+10170 ; [*1ED8.0020.0002] # GREEK ACROPHONIC NAXIAN FIVE HUNDRED
+10171 ; [*1ED9.0020.0002] # GREEK ACROPHONIC THESPIAN ONE THOUSAND
+10172 ; [*1EDA.0020.0002] # GREEK ACROPHONIC THESPIAN FIVE THOUSAND
+10174 ; [*1EDB.0020.0002] # GREEK ACROPHONIC STRATIAN FIFTY MNAS
+10175 ; [*1EDC.0020.0002] # GREEK ONE HALF SIGN
+10176 ; [*1EDD.0020.0002] # GREEK ONE HALF SIGN ALTERNATE FORM
+10177 ; [*1EDE.0020.0002] # GREEK TWO THIRDS SIGN
+10178 ; [*1EDF.0020.0002] # GREEK THREE QUARTERS SIGN
+10179 ; [*1104.0020.0002] # GREEK YEAR SIGN
+1017A ; [*1105.0020.0002] # GREEK TALENT SIGN
+1017B ; [*1106.0020.0002] # GREEK DRACHMA SIGN
+1017C ; [*1107.0020.0002] # GREEK OBOL SIGN
+1017D ; [*1108.0020.0002] # GREEK TWO OBOLS SIGN
+1017E ; [*1109.0020.0002] # GREEK THREE OBOLS SIGN
+1017F ; [*110A.0020.0002] # GREEK FOUR OBOLS SIGN
+10180 ; [*110B.0020.0002] # GREEK FIVE OBOLS SIGN
+10181 ; [*110C.0020.0002] # GREEK METRETES SIGN
+10182 ; [*110D.0020.0002] # GREEK KYATHOS BASE SIGN
+10183 ; [*110E.0020.0002] # GREEK LITRA SIGN
+10184 ; [*110F.0020.0002] # GREEK OUNKIA SIGN
+10185 ; [*1110.0020.0002] # GREEK XESTES SIGN
+10186 ; [*1111.0020.0002] # GREEK ARTABE SIGN
+10187 ; [*1112.0020.0002] # GREEK AROURA SIGN
+10188 ; [*1113.0020.0002] # GREEK GRAMMA SIGN
+10189 ; [*1114.0020.0002] # GREEK TRYBLION BASE SIGN
+1018B ; [*1EE0.0020.0002] # GREEK ONE QUARTER SIGN
+1018C ; [*1115.0020.0002] # GREEK SINUSOID SIGN
+1018D ; [*1116.0020.0002] # GREEK INDICTION SIGN
+1018E ; [*1117.0020.0002] # NOMISMA SIGN
+10190 ; [*1118.0020.0002] # ROMAN SEXTANS SIGN
+10191 ; [*1119.0020.0002] # ROMAN UNCIA SIGN
+10192 ; [*111A.0020.0002] # ROMAN SEMUNCIA SIGN
+10193 ; [*111B.0020.0002] # ROMAN SEXTULA SIGN
+10194 ; [*111C.0020.0002] # ROMAN DIMIDIA SEXTULA SIGN
+10195 ; [*111D.0020.0002] # ROMAN SILIQUA SIGN
+10196 ; [*111E.0020.0002] # ROMAN DENARIUS SIGN
+10197 ; [*111F.0020.0002] # ROMAN QUINARIUS SIGN
+10198 ; [*1120.0020.0002] # ROMAN SESTERTIUS SIGN
+10199 ; [*1121.0020.0002] # ROMAN DUPONDIUS SIGN
+1019A ; [*1122.0020.0002] # ROMAN AS SIGN
+1019B ; [*1123.0020.0002] # ROMAN CENTURIAL SIGN
+1019C ; [*1124.0020.0002] # ASCIA SYMBOL
+101A0 ; [*1125.0020.0002] # GREEK SYMBOL TAU RHO
+101D0 ; [*1126.0020.0002] # PHAISTOS DISC SIGN PEDESTRIAN
+101D1 ; [*1127.0020.0002] # PHAISTOS DISC SIGN PLUMED HEAD
+101D2 ; [*1128.0020.0002] # PHAISTOS DISC SIGN TATTOOED HEAD
+101D3 ; [*1129.0020.0002] # PHAISTOS DISC SIGN CAPTIVE
+101D4 ; [*112A.0020.0002] # PHAISTOS DISC SIGN CHILD
+101D5 ; [*112B.0020.0002] # PHAISTOS DISC SIGN WOMAN
+101D6 ; [*112C.0020.0002] # PHAISTOS DISC SIGN HELMET
+101D7 ; [*112D.0020.0002] # PHAISTOS DISC SIGN GAUNTLET
+101D8 ; [*112E.0020.0002] # PHAISTOS DISC SIGN TIARA
+101D9 ; [*112F.0020.0002] # PHAISTOS DISC SIGN ARROW
+101DA ; [*1130.0020.0002] # PHAISTOS DISC SIGN BOW
+101DB ; [*1131.0020.0002] # PHAISTOS DISC SIGN SHIELD
+101DC ; [*1132.0020.0002] # PHAISTOS DISC SIGN CLUB
+101DD ; [*1133.0020.0002] # PHAISTOS DISC SIGN MANACLES
+101DE ; [*1134.0020.0002] # PHAISTOS DISC SIGN MATTOCK
+101DF ; [*1135.0020.0002] # PHAISTOS DISC SIGN SAW
+101E0 ; [*1136.0020.0002] # PHAISTOS DISC SIGN LID
+101E1 ; [*1137.0020.0002] # PHAISTOS DISC SIGN BOOMERANG
+101E2 ; [*1138.0020.0002] # PHAISTOS DISC SIGN CARPENTRY PLANE
+101E3 ; [*1139.0020.0002] # PHAISTOS DISC SIGN DOLIUM
+101E4 ; [*113A.0020.0002] # PHAISTOS DISC SIGN COMB
+101E5 ; [*113B.0020.0002] # PHAISTOS DISC SIGN SLING
+101E6 ; [*113C.0020.0002] # PHAISTOS DISC SIGN COLUMN
+101E7 ; [*113D.0020.0002] # PHAISTOS DISC SIGN BEEHIVE
+101E8 ; [*113E.0020.0002] # PHAISTOS DISC SIGN SHIP
+101E9 ; [*113F.0020.0002] # PHAISTOS DISC SIGN HORN
+101EA ; [*1140.0020.0002] # PHAISTOS DISC SIGN HIDE
+101EB ; [*1141.0020.0002] # PHAISTOS DISC SIGN BULLS LEG
+101EC ; [*1142.0020.0002] # PHAISTOS DISC SIGN CAT
+101ED ; [*1143.0020.0002] # PHAISTOS DISC SIGN RAM
+101EE ; [*1144.0020.0002] # PHAISTOS DISC SIGN EAGLE
+101EF ; [*1145.0020.0002] # PHAISTOS DISC SIGN DOVE
+101F0 ; [*1146.0020.0002] # PHAISTOS DISC SIGN TUNNY
+101F1 ; [*1147.0020.0002] # PHAISTOS DISC SIGN BEE
+101F2 ; [*1148.0020.0002] # PHAISTOS DISC SIGN PLANE TREE
+101F3 ; [*1149.0020.0002] # PHAISTOS DISC SIGN VINE
+101F4 ; [*114A.0020.0002] # PHAISTOS DISC SIGN PAPYRUS
+101F5 ; [*114B.0020.0002] # PHAISTOS DISC SIGN ROSETTE
+101F6 ; [*114C.0020.0002] # PHAISTOS DISC SIGN LILY
+101F7 ; [*114D.0020.0002] # PHAISTOS DISC SIGN OX BACK
+101F8 ; [*114E.0020.0002] # PHAISTOS DISC SIGN FLUTE
+101F9 ; [*114F.0020.0002] # PHAISTOS DISC SIGN GRATER
+101FA ; [*1150.0020.0002] # PHAISTOS DISC SIGN STRAINER
+101FB ; [*1151.0020.0002] # PHAISTOS DISC SIGN SMALL AXE
+101FC ; [*1152.0020.0002] # PHAISTOS DISC SIGN WAVY BAND
+102E0 ; [.0000.0000.0000] # COPTIC EPACT THOUSANDS MARK
+102EA ; [*1EE1.0020.0002] # COPTIC EPACT NUMBER TEN
+102EB ; [*1EE2.0020.0002] # COPTIC EPACT NUMBER TWENTY
+102EC ; [*1EE3.0020.0002] # COPTIC EPACT NUMBER THIRTY
+102ED ; [*1EE4.0020.0002] # COPTIC EPACT NUMBER FORTY
+102EE ; [*1EE5.0020.0002] # COPTIC EPACT NUMBER FIFTY
+102EF ; [*1EE6.0020.0002] # COPTIC EPACT NUMBER SIXTY
+102F0 ; [*1EE7.0020.0002] # COPTIC EPACT NUMBER SEVENTY
+102F1 ; [*1EE8.0020.0002] # COPTIC EPACT NUMBER EIGHTY
+102F2 ; [*1EE9.0020.0002] # COPTIC EPACT NUMBER NINETY
+102F3 ; [*1EEA.0020.0002] # COPTIC EPACT NUMBER ONE HUNDRED
+102F4 ; [*1EEB.0020.0002] # COPTIC EPACT NUMBER TWO HUNDRED
+102F5 ; [*1EEC.0020.0002] # COPTIC EPACT NUMBER THREE HUNDRED
+102F6 ; [*1EED.0020.0002] # COPTIC EPACT NUMBER FOUR HUNDRED
+102F7 ; [*1EEE.0020.0002] # COPTIC EPACT NUMBER FIVE HUNDRED
+102F8 ; [*1EEF.0020.0002] # COPTIC EPACT NUMBER SIX HUNDRED
+102F9 ; [*1EF0.0020.0002] # COPTIC EPACT NUMBER SEVEN HUNDRED
+102FA ; [*1EF1.0020.0002] # COPTIC EPACT NUMBER EIGHT HUNDRED
+102FB ; [*1EF2.0020.0002] # COPTIC EPACT NUMBER NINE HUNDRED
+10322 ; [*1E8A.0020.0002] # OLD ITALIC NUMERAL TEN
+10323 ; [*1E8B.0020.0002] # OLD ITALIC NUMERAL FIFTY
+1039F ; [*0318.0020.0002] # UGARITIC WORD DIVIDER
+103D0 ; [*0319.0020.0002] # OLD PERSIAN WORD DIVIDER
+103D3 ; [*1EF3.0020.0002] # OLD PERSIAN NUMBER TEN
+103D4 ; [*1EF4.0020.0002] # OLD PERSIAN NUMBER TWENTY
+103D5 ; [*1EF5.0020.0002] # OLD PERSIAN NUMBER HUNDRED
+1056F ; [*0472.0020.0002] # CAUCASIAN ALBANIAN CITATION MARK
+10857 ; [*02E8.0020.0002] # IMPERIAL ARAMAIC SECTION SIGN
+1085B ; [*1F05.0020.0002] # IMPERIAL ARAMAIC NUMBER TEN
+1085C ; [*1F06.0020.0002] # IMPERIAL ARAMAIC NUMBER TWENTY
+1085D ; [*1F07.0020.0002] # IMPERIAL ARAMAIC NUMBER ONE HUNDRED
+1085E ; [*1F08.0020.0002] # IMPERIAL ARAMAIC NUMBER ONE THOUSAND
+1085F ; [*1F09.0020.0002] # IMPERIAL ARAMAIC NUMBER TEN THOUSAND
+10877 ; [*1153.0020.0002] # PALMYRENE LEFT-POINTING FLEURON
+10878 ; [*1154.0020.0002] # PALMYRENE RIGHT-POINTING FLEURON
+1087E ; [*1EF6.0020.0002] # PALMYRENE NUMBER TEN
+1087F ; [*1EF7.0020.0002] # PALMYRENE NUMBER TWENTY
+108AD ; [*1EF8.0020.0002] # NABATAEAN NUMBER TEN
+108AE ; [*1EF9.0020.0002] # NABATAEAN NUMBER TWENTY
+108AF ; [*1EFA.0020.0002] # NABATAEAN NUMBER ONE HUNDRED
+108FD ; [*1EFB.0020.0002] # HATRAN NUMBER TEN
+108FE ; [*1EFC.0020.0002] # HATRAN NUMBER TWENTY
+108FF ; [*1EFD.0020.0002] # HATRAN NUMBER ONE HUNDRED
+10917 ; [*1F02.0020.0002] # PHOENICIAN NUMBER TEN
+10918 ; [*1F03.0020.0002] # PHOENICIAN NUMBER TWENTY
+10919 ; [*1F04.0020.0002] # PHOENICIAN NUMBER ONE HUNDRED
+1091F ; [*031A.0020.0002] # PHOENICIAN WORD SEPARATOR
+1093F ; [*0314.0020.0002] # LYDIAN TRIANGULAR MARK
+109BC ; [*1FFD.0020.0002] # MEROITIC CURSIVE FRACTION ELEVEN TWELFTHS
+109BD ; [*1FF2.0020.0002] # MEROITIC CURSIVE FRACTION ONE HALF
+109C9 ; [*1FC7.0020.0002] # MEROITIC CURSIVE NUMBER TEN
+109CA ; [*1FC8.0020.0002] # MEROITIC CURSIVE NUMBER TWENTY
+109CB ; [*1FC9.0020.0002] # MEROITIC CURSIVE NUMBER THIRTY
+109CC ; [*1FCA.0020.0002] # MEROITIC CURSIVE NUMBER FORTY
+109CD ; [*1FCB.0020.0002] # MEROITIC CURSIVE NUMBER FIFTY
+109CE ; [*1FCC.0020.0002] # MEROITIC CURSIVE NUMBER SIXTY
+109CF ; [*1FCD.0020.0002] # MEROITIC CURSIVE NUMBER SEVENTY
+109D2 ; [*1FCE.0020.0002] # MEROITIC CURSIVE NUMBER ONE HUNDRED
+109D3 ; [*1FCF.0020.0002] # MEROITIC CURSIVE NUMBER TWO HUNDRED
+109D4 ; [*1FD0.0020.0002] # MEROITIC CURSIVE NUMBER THREE HUNDRED
+109D5 ; [*1FD1.0020.0002] # MEROITIC CURSIVE NUMBER FOUR HUNDRED
+109D6 ; [*1FD2.0020.0002] # MEROITIC CURSIVE NUMBER FIVE HUNDRED
+109D7 ; [*1FD3.0020.0002] # MEROITIC CURSIVE NUMBER SIX HUNDRED
+109D8 ; [*1FD4.0020.0002] # MEROITIC CURSIVE NUMBER SEVEN HUNDRED
+109D9 ; [*1FD5.0020.0002] # MEROITIC CURSIVE NUMBER EIGHT HUNDRED
+109DA ; [*1FD6.0020.0002] # MEROITIC CURSIVE NUMBER NINE HUNDRED
+109DB ; [*1FD7.0020.0002] # MEROITIC CURSIVE NUMBER ONE THOUSAND
+109DC ; [*1FD8.0020.0002] # MEROITIC CURSIVE NUMBER TWO THOUSAND
+109DD ; [*1FD9.0020.0002] # MEROITIC CURSIVE NUMBER THREE THOUSAND
+109DE ; [*1FDA.0020.0002] # MEROITIC CURSIVE NUMBER FOUR THOUSAND
+109DF ; [*1FDB.0020.0002] # MEROITIC CURSIVE NUMBER FIVE THOUSAND
+109E0 ; [*1FDC.0020.0002] # MEROITIC CURSIVE NUMBER SIX THOUSAND
+109E1 ; [*1FDD.0020.0002] # MEROITIC CURSIVE NUMBER SEVEN THOUSAND
+109E2 ; [*1FDE.0020.0002] # MEROITIC CURSIVE NUMBER EIGHT THOUSAND
+109E3 ; [*1FDF.0020.0002] # MEROITIC CURSIVE NUMBER NINE THOUSAND
+109E4 ; [*1FE0.0020.0002] # MEROITIC CURSIVE NUMBER TEN THOUSAND
+109E5 ; [*1FE1.0020.0002] # MEROITIC CURSIVE NUMBER TWENTY THOUSAND
+109E6 ; [*1FE2.0020.0002] # MEROITIC CURSIVE NUMBER THIRTY THOUSAND
+109E7 ; [*1FE3.0020.0002] # MEROITIC CURSIVE NUMBER FORTY THOUSAND
+109E8 ; [*1FE4.0020.0002] # MEROITIC CURSIVE NUMBER FIFTY THOUSAND
+109E9 ; [*1FE5.0020.0002] # MEROITIC CURSIVE NUMBER SIXTY THOUSAND
+109EA ; [*1FE6.0020.0002] # MEROITIC CURSIVE NUMBER SEVENTY THOUSAND
+109EB ; [*1FE7.0020.0002] # MEROITIC CURSIVE NUMBER EIGHTY THOUSAND
+109EC ; [*1FE8.0020.0002] # MEROITIC CURSIVE NUMBER NINETY THOUSAND
+109ED ; [*1FE9.0020.0002] # MEROITIC CURSIVE NUMBER ONE HUNDRED THOUSAND
+109EE ; [*1FEA.0020.0002] # MEROITIC CURSIVE NUMBER TWO HUNDRED THOUSAND
+109EF ; [*1FEB.0020.0002] # MEROITIC CURSIVE NUMBER THREE HUNDRED THOUSAND
+109F0 ; [*1FEC.0020.0002] # MEROITIC CURSIVE NUMBER FOUR HUNDRED THOUSAND
+109F1 ; [*1FED.0020.0002] # MEROITIC CURSIVE NUMBER FIVE HUNDRED THOUSAND
+109F2 ; [*1FEE.0020.0002] # MEROITIC CURSIVE NUMBER SIX HUNDRED THOUSAND
+109F3 ; [*1FEF.0020.0002] # MEROITIC CURSIVE NUMBER SEVEN HUNDRED THOUSAND
+109F4 ; [*1FF0.0020.0002] # MEROITIC CURSIVE NUMBER EIGHT HUNDRED THOUSAND
+109F5 ; [*1FF1.0020.0002] # MEROITIC CURSIVE NUMBER NINE HUNDRED THOUSAND
+109F6 ; [*1FF3.0020.0002] # MEROITIC CURSIVE FRACTION ONE TWELFTH
+109F7 ; [*1FF4.0020.0002] # MEROITIC CURSIVE FRACTION TWO TWELFTHS
+109F8 ; [*1FF5.0020.0002] # MEROITIC CURSIVE FRACTION THREE TWELFTHS
+109F9 ; [*1FF6.0020.0002] # MEROITIC CURSIVE FRACTION FOUR TWELFTHS
+109FA ; [*1FF7.0020.0002] # MEROITIC CURSIVE FRACTION FIVE TWELFTHS
+109FB ; [*1FF8.0020.0002] # MEROITIC CURSIVE FRACTION SIX TWELFTHS
+109FC ; [*1FF9.0020.0002] # MEROITIC CURSIVE FRACTION SEVEN TWELFTHS
+109FD ; [*1FFA.0020.0002] # MEROITIC CURSIVE FRACTION EIGHT TWELFTHS
+109FE ; [*1FFB.0020.0002] # MEROITIC CURSIVE FRACTION NINE TWELFTHS
+109FF ; [*1FFC.0020.0002] # MEROITIC CURSIVE FRACTION TEN TWELFTHS
+10A44 ; [*1F30.0020.0002] # KHAROSHTHI NUMBER TEN
+10A45 ; [*1F31.0020.0002] # KHAROSHTHI NUMBER TWENTY
+10A46 ; [*1F32.0020.0002] # KHAROSHTHI NUMBER ONE HUNDRED
+10A47 ; [*1F33.0020.0002] # KHAROSHTHI NUMBER ONE THOUSAND
+10A48 ; [*1F34.0020.0002] # KHAROSHTHI FRACTION ONE HALF
+10A50 ; [*0478.0020.0002] # KHAROSHTHI PUNCTUATION DOT
+10A51 ; [*0479.0020.0002] # KHAROSHTHI PUNCTUATION SMALL CIRCLE
+10A52 ; [*047A.0020.0002] # KHAROSHTHI PUNCTUATION CIRCLE
+10A53 ; [*047B.0020.0002] # KHAROSHTHI PUNCTUATION CRESCENT BAR
+10A54 ; [*047C.0020.0002] # KHAROSHTHI PUNCTUATION MANGALAM
+10A55 ; [*047D.0020.0002] # KHAROSHTHI PUNCTUATION LOTUS
+10A56 ; [*02B5.0020.0002] # KHAROSHTHI PUNCTUATION DANDA
+10A57 ; [*02B6.0020.0002] # KHAROSHTHI PUNCTUATION DOUBLE DANDA
+10A58 ; [*047E.0020.0002] # KHAROSHTHI PUNCTUATION LINES
+10A7E ; [*1EFE.0020.0002] # OLD SOUTH ARABIAN NUMBER FIFTY
+10A7F ; [*1EFF.0020.0002] # OLD SOUTH ARABIAN NUMERIC INDICATOR
+10A9E ; [*1F00.0020.0002] # OLD NORTH ARABIAN NUMBER TEN
+10A9F ; [*1F01.0020.0002] # OLD NORTH ARABIAN NUMBER TWENTY
+10AED ; [*1F0A.0020.0002] # MANICHAEAN NUMBER TEN
+10AEE ; [*1F0B.0020.0002] # MANICHAEAN NUMBER TWENTY
+10AEF ; [*1F0C.0020.0002] # MANICHAEAN NUMBER ONE HUNDRED
+10AF0 ; [*0483.0020.0002] # MANICHAEAN PUNCTUATION STAR
+10AF1 ; [*0484.0020.0002] # MANICHAEAN PUNCTUATION FLEURON
+10AF2 ; [*0485.0020.0002] # MANICHAEAN PUNCTUATION DOUBLE DOT WITHIN DOT
+10AF3 ; [*0486.0020.0002] # MANICHAEAN PUNCTUATION DOT WITHIN DOT
+10AF4 ; [*0487.0020.0002] # MANICHAEAN PUNCTUATION DOT
+10AF5 ; [*0488.0020.0002] # MANICHAEAN PUNCTUATION TWO DOTS
+10AF6 ; [*0489.0020.0002] # MANICHAEAN PUNCTUATION LINE FILLER
+10B39 ; [*0482.0020.0002] # AVESTAN ABBREVIATION MARK
+10B3A ; [*02E9.0020.0002] # TINY TWO DOTS OVER ONE DOT PUNCTUATION
+10B3B ; [*02EA.0020.0002] # SMALL TWO DOTS OVER ONE DOT PUNCTUATION
+10B3C ; [*02EB.0020.0002] # LARGE TWO DOTS OVER ONE DOT PUNCTUATION
+10B3D ; [*02EC.0020.0002] # LARGE ONE DOT OVER TWO DOTS PUNCTUATION
+10B3E ; [*02ED.0020.0002] # LARGE TWO RINGS OVER ONE RING PUNCTUATION
+10B3F ; [*02EE.0020.0002] # LARGE ONE RING OVER TWO RINGS PUNCTUATION
+10B5C ; [*1F0D.0020.0002] # INSCRIPTIONAL PARTHIAN NUMBER TEN
+10B5D ; [*1F0E.0020.0002] # INSCRIPTIONAL PARTHIAN NUMBER TWENTY
+10B5E ; [*1F0F.0020.0002] # INSCRIPTIONAL PARTHIAN NUMBER ONE HUNDRED
+10B5F ; [*1F10.0020.0002] # INSCRIPTIONAL PARTHIAN NUMBER ONE THOUSAND
+10B7C ; [*1F11.0020.0002] # INSCRIPTIONAL PAHLAVI NUMBER TEN
+10B7D ; [*1F12.0020.0002] # INSCRIPTIONAL PAHLAVI NUMBER TWENTY
+10B7E ; [*1F13.0020.0002] # INSCRIPTIONAL PAHLAVI NUMBER ONE HUNDRED
+10B7F ; [*1F14.0020.0002] # INSCRIPTIONAL PAHLAVI NUMBER ONE THOUSAND
+10B99 ; [*048A.0020.0002] # PSALTER PAHLAVI SECTION MARK
+10B9A ; [*048B.0020.0002] # PSALTER PAHLAVI TURNED SECTION MARK
+10B9B ; [*048C.0020.0002] # PSALTER PAHLAVI FOUR DOTS WITH CROSS
+10B9C ; [*048D.0020.0002] # PSALTER PAHLAVI FOUR DOTS WITH DOT
+10BAD ; [*1F15.0020.0002] # PSALTER PAHLAVI NUMBER TEN
+10BAE ; [*1F16.0020.0002] # PSALTER PAHLAVI NUMBER TWENTY
+10BAF ; [*1F17.0020.0002] # PSALTER PAHLAVI NUMBER ONE HUNDRED
+10CFC ; [*1E8C.0020.0002] # OLD HUNGARIAN NUMBER TEN
+10CFD ; [*1E8D.0020.0002] # OLD HUNGARIAN NUMBER FIFTY
+10CFE ; [*1E8E.0020.0002] # OLD HUNGARIAN NUMBER ONE HUNDRED
+10CFF ; [*1E8F.0020.0002] # OLD HUNGARIAN NUMBER ONE THOUSAND
+10E69 ; [*1E73.0020.0002] # RUMI NUMBER TEN
+10E6A ; [*1E74.0020.0002] # RUMI NUMBER TWENTY
+10E6B ; [*1E75.0020.0002] # RUMI NUMBER THIRTY
+10E6C ; [*1E76.0020.0002] # RUMI NUMBER FORTY
+10E6D ; [*1E77.0020.0002] # RUMI NUMBER FIFTY
+10E6E ; [*1E78.0020.0002] # RUMI NUMBER SIXTY
+10E6F ; [*1E79.0020.0002] # RUMI NUMBER SEVENTY
+10E70 ; [*1E7A.0020.0002] # RUMI NUMBER EIGHTY
+10E71 ; [*1E7B.0020.0002] # RUMI NUMBER NINETY
+10E72 ; [*1E7C.0020.0002] # RUMI NUMBER ONE HUNDRED
+10E73 ; [*1E7D.0020.0002] # RUMI NUMBER TWO HUNDRED
+10E74 ; [*1E7E.0020.0002] # RUMI NUMBER THREE HUNDRED
+10E75 ; [*1E7F.0020.0002] # RUMI NUMBER FOUR HUNDRED
+10E76 ; [*1E80.0020.0002] # RUMI NUMBER FIVE HUNDRED
+10E77 ; [*1E81.0020.0002] # RUMI NUMBER SIX HUNDRED
+10E78 ; [*1E82.0020.0002] # RUMI NUMBER SEVEN HUNDRED
+10E79 ; [*1E83.0020.0002] # RUMI NUMBER EIGHT HUNDRED
+10E7A ; [*1E84.0020.0002] # RUMI NUMBER NINE HUNDRED
+10E7B ; [*1E85.0020.0002] # RUMI FRACTION ONE HALF
+10E7C ; [*1E86.0020.0002] # RUMI FRACTION ONE QUARTER
+10E7D ; [*1E87.0020.0002] # RUMI FRACTION ONE THIRD
+10E7E ; [*1E88.0020.0002] # RUMI FRACTION TWO THIRDS
+10EAD ; [*0223.0020.0002] # YEZIDI HYPHENATION MARK
+10F22 ; [*1F18.0020.0002] # OLD SOGDIAN NUMBER TEN
+10F23 ; [*1F19.0020.0002] # OLD SOGDIAN NUMBER TWENTY
+10F24 ; [*1F1A.0020.0002] # OLD SOGDIAN NUMBER THIRTY
+10F25 ; [*1F1B.0020.0002] # OLD SOGDIAN NUMBER ONE HUNDRED
+10F26 ; [*1F1C.0020.0002] # OLD SOGDIAN FRACTION ONE HALF
+10F52 ; [*1F1D.0020.0002] # SOGDIAN NUMBER TEN
+10F53 ; [*1F1E.0020.0002] # SOGDIAN NUMBER TWENTY
+10F54 ; [*1F1F.0020.0002] # SOGDIAN NUMBER ONE HUNDRED
+10F55 ; [*02EF.0020.0002] # SOGDIAN PUNCTUATION TWO VERTICAL BARS
+10F56 ; [*02F0.0020.0002] # SOGDIAN PUNCTUATION TWO VERTICAL BARS WITH DOTS
+10F57 ; [*02F1.0020.0002] # SOGDIAN PUNCTUATION CIRCLE WITH DOT
+10F58 ; [*02F2.0020.0002] # SOGDIAN PUNCTUATION TWO CIRCLES WITH DOTS
+10F59 ; [*02F3.0020.0002] # SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT
+10F86 ; [*02F4.0020.0002] # OLD UYGHUR PUNCTUATION BAR
+10F87 ; [*02F5.0020.0002] # OLD UYGHUR PUNCTUATION TWO BARS
+10F88 ; [*02F6.0020.0002] # OLD UYGHUR PUNCTUATION TWO DOTS
+10F89 ; [*02F7.0020.0002] # OLD UYGHUR PUNCTUATION FOUR DOTS
+10FC9 ; [*1F20.0020.0002] # CHORASMIAN NUMBER TEN
+10FCA ; [*1F21.0020.0002] # CHORASMIAN NUMBER TWENTY
+10FCB ; [*1F22.0020.0002] # CHORASMIAN NUMBER ONE HUNDRED
+11047 ; [*02B7.0020.0002] # BRAHMI DANDA
+11048 ; [*02B8.0020.0002] # BRAHMI DOUBLE DANDA
+11049 ; [*0473.0020.0002] # BRAHMI PUNCTUATION DOT
+1104A ; [*0474.0020.0002] # BRAHMI PUNCTUATION DOUBLE DOT
+1104B ; [*0475.0020.0002] # BRAHMI PUNCTUATION LINE
+1104C ; [*0476.0020.0002] # BRAHMI PUNCTUATION CRESCENT BAR
+1104D ; [*0477.0020.0002] # BRAHMI PUNCTUATION LOTUS
+1105B ; [*1F25.0020.0002] # BRAHMI NUMBER TEN
+1105C ; [*1F26.0020.0002] # BRAHMI NUMBER TWENTY
+1105D ; [*1F27.0020.0002] # BRAHMI NUMBER THIRTY
+1105E ; [*1F28.0020.0002] # BRAHMI NUMBER FORTY
+1105F ; [*1F29.0020.0002] # BRAHMI NUMBER FIFTY
+11060 ; [*1F2A.0020.0002] # BRAHMI NUMBER SIXTY
+11061 ; [*1F2B.0020.0002] # BRAHMI NUMBER SEVENTY
+11062 ; [*1F2C.0020.0002] # BRAHMI NUMBER EIGHTY
+11063 ; [*1F2D.0020.0002] # BRAHMI NUMBER NINETY
+11064 ; [*1F2E.0020.0002] # BRAHMI NUMBER ONE HUNDRED
+11065 ; [*1F2F.0020.0002] # BRAHMI NUMBER ONE THOUSAND
+110BB ; [*048E.0020.0002] # KAITHI ABBREVIATION SIGN
+110BC ; [*048F.0020.0002] # KAITHI ENUMERATION SIGN
+110BD ; [.0000.0000.0000] # KAITHI NUMBER SIGN
+110BE ; [*02F8.0020.0002] # KAITHI SECTION MARK
+110BF ; [*02F9.0020.0002] # KAITHI DOUBLE SECTION MARK
+110C0 ; [*02B9.0020.0002] # KAITHI DANDA
+110C1 ; [*02BA.0020.0002] # KAITHI DOUBLE DANDA
+110CD ; [.0000.0000.0000] # KAITHI NUMBER SIGN ABOVE
+11140 ; [*02FA.0020.0002] # CHAKMA SECTION MARK
+11141 ; [*02BB.0020.0002] # CHAKMA DANDA
+11142 ; [*02BC.0020.0002] # CHAKMA DOUBLE DANDA
+11143 ; [*027D.0020.0002] # CHAKMA QUESTION MARK
+11174 ; [*0490.0020.0002] # MAHAJANI ABBREVIATION SIGN
+11175 ; [*0491.0020.0002] # MAHAJANI SECTION MARK
+111C5 ; [*02BD.0020.0002] # SHARADA DANDA
+111C6 ; [*02BE.0020.0002] # SHARADA DOUBLE DANDA
+111C7 ; [*0493.0020.0002] # SHARADA ABBREVIATION SIGN
+111C8 ; [*02FB.0020.0002] # SHARADA SEPARATOR
+111CD ; [*0492.0020.0002] # SHARADA SUTRA MARK
+111DB ; [*0494.0020.0002] # SHARADA SIGN SIDDHAM
+111DD ; [*0495.0020.0002] # SHARADA CONTINUATION SIGN
+111DE ; [*02FC.0020.0002] # SHARADA SECTION MARK-1
+111DF ; [*02FD.0020.0002] # SHARADA SECTION MARK-2
+111EA ; [*1F3F.0020.0002] # SINHALA ARCHAIC NUMBER TEN
+111EB ; [*1F40.0020.0002] # SINHALA ARCHAIC NUMBER TWENTY
+111EC ; [*1F41.0020.0002] # SINHALA ARCHAIC NUMBER THIRTY
+111ED ; [*1F42.0020.0002] # SINHALA ARCHAIC NUMBER FORTY
+111EE ; [*1F43.0020.0002] # SINHALA ARCHAIC NUMBER FIFTY
+111EF ; [*1F44.0020.0002] # SINHALA ARCHAIC NUMBER SIXTY
+111F0 ; [*1F45.0020.0002] # SINHALA ARCHAIC NUMBER SEVENTY
+111F1 ; [*1F46.0020.0002] # SINHALA ARCHAIC NUMBER EIGHTY
+111F2 ; [*1F47.0020.0002] # SINHALA ARCHAIC NUMBER NINETY
+111F3 ; [*1F48.0020.0002] # SINHALA ARCHAIC NUMBER ONE HUNDRED
+111F4 ; [*1F49.0020.0002] # SINHALA ARCHAIC NUMBER ONE THOUSAND
+11238 ; [*02BF.0020.0002] # KHOJKI DANDA
+11239 ; [*02C0.0020.0002] # KHOJKI DOUBLE DANDA
+1123A ; [*0496.0020.0002] # KHOJKI WORD SEPARATOR
+1123B ; [*0497.0020.0002] # KHOJKI SECTION MARK
+1123C ; [*0498.0020.0002] # KHOJKI DOUBLE SECTION MARK
+1123D ; [*0499.0020.0002] # KHOJKI ABBREVIATION SIGN
+112A9 ; [*02FE.0020.0002] # MULTANI SECTION MARK
+11366 ; [.0000.0000.0000] # COMBINING GRANTHA DIGIT ZERO
+11367 ; [.0000.0000.0000] # COMBINING GRANTHA DIGIT ONE
+11368 ; [.0000.0000.0000] # COMBINING GRANTHA DIGIT TWO
+11369 ; [.0000.0000.0000] # COMBINING GRANTHA DIGIT THREE
+1136A ; [.0000.0000.0000] # COMBINING GRANTHA DIGIT FOUR
+1136B ; [.0000.0000.0000] # COMBINING GRANTHA DIGIT FIVE
+1136C ; [.0000.0000.0000] # COMBINING GRANTHA DIGIT SIX
+11370 ; [.0000.0000.0000] # COMBINING GRANTHA LETTER A
+11371 ; [.0000.0000.0000] # COMBINING GRANTHA LETTER KA
+11372 ; [.0000.0000.0000] # COMBINING GRANTHA LETTER NA
+11373 ; [.0000.0000.0000] # COMBINING GRANTHA LETTER VI
+11374 ; [.0000.0000.0000] # COMBINING GRANTHA LETTER PA
+1144B ; [*02C1.0020.0002] # NEWA DANDA
+1144C ; [*02C2.0020.0002] # NEWA DOUBLE DANDA
+1144D ; [*049A.0020.0002] # NEWA COMMA
+1144E ; [*049C.0020.0002] # NEWA GAP FILLER
+1144F ; [*049D.0020.0002] # NEWA ABBREVIATION SIGN
+1145A ; [*049B.0020.0002] # NEWA DOUBLE COMMA
+1145B ; [*049E.0020.0002] # NEWA PLACEHOLDER MARK
+1145D ; [*049F.0020.0002] # NEWA INSERTION SIGN
+114C6 ; [*04A0.0020.0002] # TIRHUTA ABBREVIATION SIGN
+115C1 ; [*04A1.0020.0002] # SIDDHAM SIGN SIDDHAM
+115C2 ; [*02C3.0020.0002] # SIDDHAM DANDA
+115C3 ; [*02C4.0020.0002] # SIDDHAM DOUBLE DANDA
+115C4 ; [*04A2.0020.0002] # SIDDHAM SEPARATOR DOT
+115C5 ; [*04A3.0020.0002] # SIDDHAM SEPARATOR BAR
+115C6 ; [*04A4.0020.0002] # SIDDHAM REPETITION MARK-1
+115C7 ; [*04A5.0020.0002] # SIDDHAM REPETITION MARK-2
+115C8 ; [*04A6.0020.0002] # SIDDHAM REPETITION MARK-3
+115C9 ; [*04A7.0020.0002] # SIDDHAM END OF TEXT MARK
+115CA ; [*04A8.0020.0002] # SIDDHAM SECTION MARK WITH TRIDENT AND U-SHAPED ORNAMENTS
+115CB ; [*04A9.0020.0002] # SIDDHAM SECTION MARK WITH TRIDENT AND DOTTED CRESCENTS
+115CC ; [*04AA.0020.0002] # SIDDHAM SECTION MARK WITH RAYS AND DOTTED CRESCENTS
+115CD ; [*04AB.0020.0002] # SIDDHAM SECTION MARK WITH RAYS AND DOTTED DOUBLE CRESCENTS
+115CE ; [*04AC.0020.0002] # SIDDHAM SECTION MARK WITH RAYS AND DOTTED TRIPLE CRESCENTS
+115CF ; [*04AD.0020.0002] # SIDDHAM SECTION MARK DOUBLE RING
+115D0 ; [*04AE.0020.0002] # SIDDHAM SECTION MARK DOUBLE RING WITH RAYS
+115D1 ; [*04AF.0020.0002] # SIDDHAM SECTION MARK WITH DOUBLE CRESCENTS
+115D2 ; [*04B0.0020.0002] # SIDDHAM SECTION MARK WITH TRIPLE CRESCENTS
+115D3 ; [*04B1.0020.0002] # SIDDHAM SECTION MARK WITH QUADRUPLE CRESCENTS
+115D4 ; [*04B2.0020.0002] # SIDDHAM SECTION MARK WITH SEPTUPLE CRESCENTS
+115D5 ; [*04B3.0020.0002] # SIDDHAM SECTION MARK WITH CIRCLES AND RAYS
+115D6 ; [*04B4.0020.0002] # SIDDHAM SECTION MARK WITH CIRCLES AND TWO ENCLOSURES
+115D7 ; [*04B5.0020.0002] # SIDDHAM SECTION MARK WITH CIRCLES AND FOUR ENCLOSURES
+11641 ; [*02C5.0020.0002] # MODI DANDA
+11642 ; [*02C6.0020.0002] # MODI DOUBLE DANDA
+11643 ; [*04B6.0020.0002] # MODI ABBREVIATION SIGN
+11660 ; [*0407.0020.0002] # MONGOLIAN BIRGA WITH ORNAMENT
+11661 ; [*0408.0020.0002] # MONGOLIAN ROTATED BIRGA
+11662 ; [*0409.0020.0002] # MONGOLIAN DOUBLE BIRGA WITH ORNAMENT
+11663 ; [*040A.0020.0002] # MONGOLIAN TRIPLE BIRGA WITH ORNAMENT
+11664 ; [*040B.0020.0002] # MONGOLIAN BIRGA WITH DOUBLE ORNAMENT
+11665 ; [*040C.0020.0002] # MONGOLIAN ROTATED BIRGA WITH ORNAMENT
+11666 ; [*040D.0020.0002] # MONGOLIAN ROTATED BIRGA WITH DOUBLE ORNAMENT
+11667 ; [*040E.0020.0002] # MONGOLIAN INVERTED BIRGA
+11668 ; [*040F.0020.0002] # MONGOLIAN INVERTED BIRGA WITH DOUBLE ORNAMENT
+11669 ; [*0410.0020.0002] # MONGOLIAN SWIRL BIRGA
+1166A ; [*0411.0020.0002] # MONGOLIAN SWIRL BIRGA WITH ORNAMENT
+1166B ; [*0412.0020.0002] # MONGOLIAN SWIRL BIRGA WITH DOUBLE ORNAMENT
+1166C ; [*0413.0020.0002] # MONGOLIAN TURNED SWIRL BIRGA WITH DOUBLE ORNAMENT
+116B9 ; [*04B7.0020.0002] # TAKRI ABBREVIATION SIGN
+1173A ; [*1F23.0020.0002] # AHOM NUMBER TEN
+1173B ; [*1F24.0020.0002] # AHOM NUMBER TWENTY
+1173C ; [*02C7.0020.0002] # AHOM SIGN SMALL SECTION
+1173D ; [*02C8.0020.0002] # AHOM SIGN SECTION
+1173E ; [*02FF.0020.0002] # AHOM SIGN RULAI
+1173F ; [*05D5.0020.0002] # AHOM SYMBOL VI
+1183B ; [*04B8.0020.0002] # DOGRA ABBREVIATION SIGN
+118EA ; [*1F4A.0020.0002] # WARANG CITI NUMBER TEN
+118EB ; [*1F4B.0020.0002] # WARANG CITI NUMBER TWENTY
+118EC ; [*1F4C.0020.0002] # WARANG CITI NUMBER THIRTY
+118ED ; [*1F4D.0020.0002] # WARANG CITI NUMBER FORTY
+118EE ; [*1F4E.0020.0002] # WARANG CITI NUMBER FIFTY
+118EF ; [*1F4F.0020.0002] # WARANG CITI NUMBER SIXTY
+118F0 ; [*1F50.0020.0002] # WARANG CITI NUMBER SEVENTY
+118F1 ; [*1F51.0020.0002] # WARANG CITI NUMBER EIGHTY
+118F2 ; [*1F52.0020.0002] # WARANG CITI NUMBER NINETY
+11944 ; [*02C9.0020.0002] # DIVES AKURU DOUBLE DANDA
+11945 ; [*04B9.0020.0002] # DIVES AKURU GAP FILLER
+11946 ; [*0300.0020.0002] # DIVES AKURU END OF TEXT MARK
+119E2 ; [*04BA.0020.0002] # NANDINAGARI SIGN SIDDHAM
+11A3F ; [*043A.0020.0002] # ZANABAZAR SQUARE INITIAL HEAD MARK
+11A40 ; [*043B.0020.0002] # ZANABAZAR SQUARE CLOSING HEAD MARK
+11A41 ; [*043C.0020.0002] # ZANABAZAR SQUARE MARK TSHEG
+11A42 ; [*043D.0020.0002] # ZANABAZAR SQUARE MARK SHAD
+11A43 ; [*043E.0020.0002] # ZANABAZAR SQUARE MARK DOUBLE SHAD
+11A44 ; [*043F.0020.0002] # ZANABAZAR SQUARE MARK LONG TSHEG
+11A45 ; [*0440.0020.0002] # ZANABAZAR SQUARE INITIAL DOUBLE-LINED HEAD MARK
+11A46 ; [*0441.0020.0002] # ZANABAZAR SQUARE CLOSING DOUBLE-LINED HEAD MARK
+11A9A ; [*0442.0020.0002] # SOYOMBO MARK TSHEG
+11A9B ; [*0443.0020.0002] # SOYOMBO MARK SHAD
+11A9C ; [*0444.0020.0002] # SOYOMBO MARK DOUBLE SHAD
+11A9E ; [*0445.0020.0002] # SOYOMBO HEAD MARK WITH MOON AND SUN AND TRIPLE FLAME
+11A9F ; [*0446.0020.0002] # SOYOMBO HEAD MARK WITH MOON AND SUN AND FLAME
+11AA0 ; [*0447.0020.0002] # SOYOMBO HEAD MARK WITH MOON AND SUN
+11AA1 ; [*0448.0020.0002] # SOYOMBO TERMINAL MARK-1
+11AA2 ; [*0449.0020.0002] # SOYOMBO TERMINAL MARK-2
+11C41 ; [*02CA.0020.0002] # BHAIKSUKI DANDA
+11C42 ; [*02CB.0020.0002] # BHAIKSUKI DOUBLE DANDA
+11C43 ; [*047F.0020.0002] # BHAIKSUKI WORD SEPARATOR
+11C44 ; [*0480.0020.0002] # BHAIKSUKI GAP FILLER-1
+11C45 ; [*0481.0020.0002] # BHAIKSUKI GAP FILLER-2
+11C63 ; [*1F35.0020.0002] # BHAIKSUKI NUMBER TEN
+11C64 ; [*1F36.0020.0002] # BHAIKSUKI NUMBER TWENTY
+11C65 ; [*1F37.0020.0002] # BHAIKSUKI NUMBER THIRTY
+11C66 ; [*1F38.0020.0002] # BHAIKSUKI NUMBER FORTY
+11C67 ; [*1F39.0020.0002] # BHAIKSUKI NUMBER FIFTY
+11C68 ; [*1F3A.0020.0002] # BHAIKSUKI NUMBER SIXTY
+11C69 ; [*1F3B.0020.0002] # BHAIKSUKI NUMBER SEVENTY
+11C6A ; [*1F3C.0020.0002] # BHAIKSUKI NUMBER EIGHTY
+11C6B ; [*1F3D.0020.0002] # BHAIKSUKI NUMBER NINETY
+11C6C ; [*1F3E.0020.0002] # BHAIKSUKI HUNDREDS UNIT MARK
+11C70 ; [*044A.0020.0002] # MARCHEN HEAD MARK
+11C71 ; [*044B.0020.0002] # MARCHEN MARK SHAD
+11EF7 ; [*0301.0020.0002] # MAKASAR PASSIMBANG
+11EF8 ; [*0302.0020.0002] # MAKASAR END OF SECTION
+11FC0 ; [*1E3D.0020.0002] # TAMIL FRACTION ONE THREE-HUNDRED-AND-TWENTIETH
+11FC1 ; [*1E3E.0020.0002] # TAMIL FRACTION ONE ONE-HUNDRED-AND-SIXTIETH
+11FC2 ; [*1E3F.0020.0002] # TAMIL FRACTION ONE EIGHTIETH
+11FC3 ; [*1E40.0020.0002] # TAMIL FRACTION ONE SIXTY-FOURTH
+11FC4 ; [*1E41.0020.0002] # TAMIL FRACTION ONE FORTIETH
+11FC5 ; [*1E42.0020.0002] # TAMIL FRACTION ONE THIRTY-SECOND
+11FC6 ; [*1E43.0020.0002] # TAMIL FRACTION THREE EIGHTIETHS
+11FC7 ; [*1E44.0020.0002] # TAMIL FRACTION THREE SIXTY-FOURTHS
+11FC8 ; [*1E45.0020.0002] # TAMIL FRACTION ONE TWENTIETH
+11FC9 ; [*1E46.0020.0002] # TAMIL FRACTION ONE SIXTEENTH-1
+11FCA ; [*1E47.0020.0002] # TAMIL FRACTION ONE SIXTEENTH-2
+11FCB ; [*1E48.0020.0002] # TAMIL FRACTION ONE TENTH
+11FCC ; [*1E49.0020.0002] # TAMIL FRACTION ONE EIGHTH
+11FCD ; [*1E4A.0020.0002] # TAMIL FRACTION THREE TWENTIETHS
+11FCE ; [*1E4B.0020.0002] # TAMIL FRACTION THREE SIXTEENTHS
+11FCF ; [*1E4C.0020.0002] # TAMIL FRACTION ONE FIFTH
+11FD0 ; [*1E4D.0020.0002] # TAMIL FRACTION ONE QUARTER
+11FD1 ; [*1E4E.0020.0002] # TAMIL FRACTION ONE HALF-1
+11FD2 ; [*1E4F.0020.0002] # TAMIL FRACTION ONE HALF-2
+11FD3 ; [*1E50.0020.0002] # TAMIL FRACTION THREE QUARTERS
+11FD4 ; [*1E51.0020.0002] # TAMIL FRACTION DOWNSCALING FACTOR KIIZH
+11FD5 ; [*0587.0020.0002] # TAMIL SIGN NEL
+11FD6 ; [*0588.0020.0002] # TAMIL SIGN CEVITU
+11FD7 ; [*0589.0020.0002] # TAMIL SIGN AAZHAAKKU
+11FD8 ; [*058A.0020.0002] # TAMIL SIGN UZHAKKU
+11FD9 ; [*058B.0020.0002] # TAMIL SIGN MUUVUZHAKKU
+11FDA ; [*058C.0020.0002] # TAMIL SIGN KURUNI
+11FDB ; [*058D.0020.0002] # TAMIL SIGN PATHAKKU
+11FDC ; [*058E.0020.0002] # TAMIL SIGN MUKKURUNI
+11FE1 ; [*058F.0020.0002] # TAMIL SIGN PAARAM
+11FE2 ; [*0590.0020.0002] # TAMIL SIGN KUZHI
+11FE3 ; [*0591.0020.0002] # TAMIL SIGN VELI
+11FE4 ; [*0592.0020.0002] # TAMIL WET CULTIVATION SIGN
+11FE5 ; [*0593.0020.0002] # TAMIL DRY CULTIVATION SIGN
+11FE6 ; [*0594.0020.0002] # TAMIL LAND SIGN
+11FE7 ; [*0595.0020.0002] # TAMIL SALT PAN SIGN
+11FE8 ; [*0596.0020.0002] # TAMIL TRADITIONAL CREDIT SIGN
+11FE9 ; [*0597.0020.0002] # TAMIL TRADITIONAL NUMBER SIGN
+11FEA ; [*0598.0020.0002] # TAMIL CURRENT SIGN
+11FEB ; [*0599.0020.0002] # TAMIL AND ODD SIGN
+11FEC ; [*059A.0020.0002] # TAMIL SPENT SIGN
+11FED ; [*059B.0020.0002] # TAMIL TOTAL SIGN
+11FEE ; [*059C.0020.0002] # TAMIL IN POSSESSION SIGN
+11FEF ; [*059D.0020.0002] # TAMIL STARTING FROM SIGN
+11FF0 ; [*059E.0020.0002] # TAMIL SIGN MUTHALIYA
+11FF1 ; [*059F.0020.0002] # TAMIL SIGN VAKAIYARAA
+11FFF ; [*04BB.0020.0002] # TAMIL PUNCTUATION END OF TEXT
+12432 ; [*1FFE.0020.0002] # CUNEIFORM NUMERIC SIGN SHAR2 TIMES GAL PLUS DISH
+12433 ; [*1FFF.0020.0002] # CUNEIFORM NUMERIC SIGN SHAR2 TIMES GAL PLUS MIN
+1245A ; [*2000.0020.0002] # CUNEIFORM NUMERIC SIGN ONE THIRD DISH
+1245B ; [*2001.0020.0002] # CUNEIFORM NUMERIC SIGN TWO THIRDS DISH
+1245C ; [*2002.0020.0002] # CUNEIFORM NUMERIC SIGN FIVE SIXTHS DISH
+1245D ; [*2003.0020.0002] # CUNEIFORM NUMERIC SIGN ONE THIRD VARIANT FORM A
+1245E ; [*2004.0020.0002] # CUNEIFORM NUMERIC SIGN TWO THIRDS VARIANT FORM A
+1245F ; [*2005.0020.0002] # CUNEIFORM NUMERIC SIGN ONE EIGHTH ASH
+12460 ; [*2006.0020.0002] # CUNEIFORM NUMERIC SIGN ONE QUARTER ASH
+12461 ; [*2007.0020.0002] # CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE SIXTH
+12462 ; [*2008.0020.0002] # CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE QUARTER
+12463 ; [*2009.0020.0002] # CUNEIFORM NUMERIC SIGN ONE QUARTER GUR
+12464 ; [*200A.0020.0002] # CUNEIFORM NUMERIC SIGN ONE HALF GUR
+12465 ; [*200B.0020.0002] # CUNEIFORM NUMERIC SIGN ELAMITE ONE THIRD
+12466 ; [*200C.0020.0002] # CUNEIFORM NUMERIC SIGN ELAMITE TWO THIRDS
+12467 ; [*200D.0020.0002] # CUNEIFORM NUMERIC SIGN ELAMITE FORTY
+12468 ; [*200E.0020.0002] # CUNEIFORM NUMERIC SIGN ELAMITE FIFTY
+12470 ; [*031B.0020.0002] # CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER
+12471 ; [*031C.0020.0002] # CUNEIFORM PUNCTUATION SIGN VERTICAL COLON
+12472 ; [*031D.0020.0002] # CUNEIFORM PUNCTUATION SIGN DIAGONAL COLON
+12473 ; [*031E.0020.0002] # CUNEIFORM PUNCTUATION SIGN DIAGONAL TRICOLON
+12474 ; [*031F.0020.0002] # CUNEIFORM PUNCTUATION SIGN DIAGONAL QUADCOLON
+12FF1 ; [*0320.0020.0002] # CYPRO-MINOAN SIGN CM301
+12FF2 ; [*0321.0020.0002] # CYPRO-MINOAN SIGN CM302
+16A6E ; [*02CC.0020.0002] # MRO DANDA
+16A6F ; [*02CD.0020.0002] # MRO DOUBLE DANDA
+16AF5 ; [*0292.0020.0002] # BASSA VAH FULL STOP
+16B37 ; [*04BC.0020.0002] # PAHAWH HMONG SIGN VOS THOM
+16B38 ; [*04BD.0020.0002] # PAHAWH HMONG SIGN VOS TSHAB CEEB
+16B39 ; [*04BE.0020.0002] # PAHAWH HMONG SIGN CIM CHEEM
+16B3A ; [*04BF.0020.0002] # PAHAWH HMONG SIGN VOS THIAB
+16B3B ; [*04C0.0020.0002] # PAHAWH HMONG SIGN VOS FEEM
+16B3C ; [*1155.0020.0002] # PAHAWH HMONG SIGN XYEEM NTXIV
+16B3D ; [*1156.0020.0002] # PAHAWH HMONG SIGN XYEEM RHO
+16B3E ; [*1157.0020.0002] # PAHAWH HMONG SIGN XYEEM TOV
+16B3F ; [*1158.0020.0002] # PAHAWH HMONG SIGN XYEEM FAIB
+16B44 ; [*04C1.0020.0002] # PAHAWH HMONG SIGN XAUS
+16B45 ; [*1159.0020.0002] # PAHAWH HMONG SIGN CIM TSOV ROG
+16B5B ; [*1F53.0020.0002] # PAHAWH HMONG NUMBER TENS
+16B5C ; [*1F54.0020.0002] # PAHAWH HMONG NUMBER HUNDREDS
+16B5D ; [*1F55.0020.0002] # PAHAWH HMONG NUMBER TEN THOUSANDS
+16B5E ; [*1F56.0020.0002] # PAHAWH HMONG NUMBER MILLIONS
+16B5F ; [*1F57.0020.0002] # PAHAWH HMONG NUMBER HUNDRED MILLIONS
+16B60 ; [*1F58.0020.0002] # PAHAWH HMONG NUMBER TEN BILLIONS
+16B61 ; [*1F59.0020.0002] # PAHAWH HMONG NUMBER TRILLIONS
+16E8A ; [*1F5A.0020.0002] # MEDEFAIDRIN NUMBER TEN
+16E8B ; [*1F5B.0020.0002] # MEDEFAIDRIN NUMBER ELEVEN
+16E8C ; [*1F5C.0020.0002] # MEDEFAIDRIN NUMBER TWELVE
+16E8D ; [*1F5D.0020.0002] # MEDEFAIDRIN NUMBER THIRTEEN
+16E8E ; [*1F5E.0020.0002] # MEDEFAIDRIN NUMBER FOURTEEN
+16E8F ; [*1F5F.0020.0002] # MEDEFAIDRIN NUMBER FIFTEEN
+16E90 ; [*1F60.0020.0002] # MEDEFAIDRIN NUMBER SIXTEEN
+16E91 ; [*1F61.0020.0002] # MEDEFAIDRIN NUMBER SEVENTEEN
+16E92 ; [*1F62.0020.0002] # MEDEFAIDRIN NUMBER EIGHTEEN
+16E93 ; [*1F63.0020.0002] # MEDEFAIDRIN NUMBER NINETEEN
+16E97 ; [*0236.0020.0002] # MEDEFAIDRIN COMMA
+16E98 ; [*0293.0020.0002] # MEDEFAIDRIN FULL STOP
+16E99 ; [*04C2.0020.0002] # MEDEFAIDRIN SYMBOL AIVA
+16E9A ; [*04C3.0020.0002] # MEDEFAIDRIN EXCLAMATION OH
+16FE2 ; [*023A.0020.0002] # OLD CHINESE HOOK MARK
+16FE4 ; [.0000.0000.0000] # KHITAN SMALL SCRIPT FILLER
+1AFF0 ; [*053F.0020.0002] # KATAKANA LETTER MINNAN TONE-2
+1AFF1 ; [*0540.0020.0002] # KATAKANA LETTER MINNAN TONE-3
+1AFF2 ; [*0541.0020.0002] # KATAKANA LETTER MINNAN TONE-4
+1AFF3 ; [*0542.0020.0002] # KATAKANA LETTER MINNAN TONE-5
+1AFF5 ; [*0543.0020.0002] # KATAKANA LETTER MINNAN TONE-7
+1AFF6 ; [*0544.0020.0002] # KATAKANA LETTER MINNAN TONE-8
+1AFF7 ; [*0545.0020.0002] # KATAKANA LETTER MINNAN NASALIZED TONE-1
+1AFF8 ; [*0546.0020.0002] # KATAKANA LETTER MINNAN NASALIZED TONE-2
+1AFF9 ; [*0547.0020.0002] # KATAKANA LETTER MINNAN NASALIZED TONE-3
+1AFFA ; [*0548.0020.0002] # KATAKANA LETTER MINNAN NASALIZED TONE-4
+1AFFB ; [*0549.0020.0002] # KATAKANA LETTER MINNAN NASALIZED TONE-5
+1AFFD ; [*054A.0020.0002] # KATAKANA LETTER MINNAN NASALIZED TONE-7
+1AFFE ; [*054B.0020.0002] # KATAKANA LETTER MINNAN NASALIZED TONE-8
+1BC9C ; [*13C1.0020.0002] # DUPLOYAN SIGN O WITH CROSS
+1BC9F ; [*0294.0020.0002] # DUPLOYAN PUNCTUATION CHINOOK FULL STOP
+1CF00 ; [.0000.0000.0000] # ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT
+1CF01 ; [.0000.0000.0000] # ZNAMENNY COMBINING MARK NIZKO S KRYZHEM ON LEFT
+1CF02 ; [.0000.0000.0000] # ZNAMENNY COMBINING MARK TSATA ON LEFT
+1CF03 ; [.0000.0000.0000] # ZNAMENNY COMBINING MARK GORAZDO NIZKO ON LEFT
+1CF04 ; [.0000.0000.0000] # ZNAMENNY COMBINING MARK NIZKO ON LEFT
+1CF05 ; [.0000.0000.0000] # ZNAMENNY COMBINING MARK SREDNE ON LEFT
+1CF06 ; [.0000.0000.0000] # ZNAMENNY COMBINING MARK MALO POVYSHE ON LEFT
+1CF07 ; [.0000.0000.0000] # ZNAMENNY COMBINING MARK POVYSHE ON LEFT
+1CF08 ; [.0000.0000.0000] # ZNAMENNY COMBINING MARK VYSOKO ON LEFT
+1CF09 ; [.0000.0000.0000] # ZNAMENNY COMBINING MARK MALO POVYSHE S KHOKHLOM ON LEFT
+1CF0A ; [.0000.0000.0000] # ZNAMENNY COMBINING MARK POVYSHE S KHOKHLOM ON LEFT
+1CF0B ; [.0000.0000.0000] # ZNAMENNY COMBINING MARK VYSOKO S KHOKHLOM ON LEFT
+1CF0C ; [.0000.0000.0000] # ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON RIGHT
+1CF0D ; [.0000.0000.0000] # ZNAMENNY COMBINING MARK NIZKO S KRYZHEM ON RIGHT
+1CF0E ; [.0000.0000.0000] # ZNAMENNY COMBINING MARK TSATA ON RIGHT
+1CF0F ; [.0000.0000.0000] # ZNAMENNY COMBINING MARK GORAZDO NIZKO ON RIGHT
+1CF10 ; [.0000.0000.0000] # ZNAMENNY COMBINING MARK NIZKO ON RIGHT
+1CF11 ; [.0000.0000.0000] # ZNAMENNY COMBINING MARK SREDNE ON RIGHT
+1CF12 ; [.0000.0000.0000] # ZNAMENNY COMBINING MARK MALO POVYSHE ON RIGHT
+1CF13 ; [.0000.0000.0000] # ZNAMENNY COMBINING MARK POVYSHE ON RIGHT
+1CF14 ; [.0000.0000.0000] # ZNAMENNY COMBINING MARK VYSOKO ON RIGHT
+1CF15 ; [.0000.0000.0000] # ZNAMENNY COMBINING MARK MALO POVYSHE S KHOKHLOM ON RIGHT
+1CF16 ; [.0000.0000.0000] # ZNAMENNY COMBINING MARK POVYSHE S KHOKHLOM ON RIGHT
+1CF17 ; [.0000.0000.0000] # ZNAMENNY COMBINING MARK VYSOKO S KHOKHLOM ON RIGHT
+1CF18 ; [.0000.0000.0000] # ZNAMENNY COMBINING MARK TSATA S KRYZHEM
+1CF19 ; [.0000.0000.0000] # ZNAMENNY COMBINING MARK MALO POVYSHE S KRYZHEM
+1CF1A ; [.0000.0000.0000] # ZNAMENNY COMBINING MARK STRANNO MALO POVYSHE
+1CF1B ; [.0000.0000.0000] # ZNAMENNY COMBINING MARK POVYSHE S KRYZHEM
+1CF1C ; [.0000.0000.0000] # ZNAMENNY COMBINING MARK POVYSHE STRANNO
+1CF1D ; [.0000.0000.0000] # ZNAMENNY COMBINING MARK VYSOKO S KRYZHEM
+1CF1E ; [.0000.0000.0000] # ZNAMENNY COMBINING MARK MALO POVYSHE STRANNO
+1CF1F ; [.0000.0000.0000] # ZNAMENNY COMBINING MARK GORAZDO VYSOKO
+1CF20 ; [.0000.0000.0000] # ZNAMENNY COMBINING MARK ZELO
+1CF21 ; [.0000.0000.0000] # ZNAMENNY COMBINING MARK ON
+1CF22 ; [.0000.0000.0000] # ZNAMENNY COMBINING MARK RAVNO
+1CF23 ; [.0000.0000.0000] # ZNAMENNY COMBINING MARK TIKHAYA
+1CF24 ; [.0000.0000.0000] # ZNAMENNY COMBINING MARK BORZAYA
+1CF25 ; [.0000.0000.0000] # ZNAMENNY COMBINING MARK UDARKA
+1CF26 ; [.0000.0000.0000] # ZNAMENNY COMBINING MARK PODVERTKA
+1CF27 ; [.0000.0000.0000] # ZNAMENNY COMBINING MARK LOMKA
+1CF28 ; [.0000.0000.0000] # ZNAMENNY COMBINING MARK KUPNAYA
+1CF29 ; [.0000.0000.0000] # ZNAMENNY COMBINING MARK KACHKA
+1CF2A ; [.0000.0000.0000] # ZNAMENNY COMBINING MARK ZEVOK
+1CF2B ; [.0000.0000.0000] # ZNAMENNY COMBINING MARK SKOBA
+1CF2C ; [.0000.0000.0000] # ZNAMENNY COMBINING MARK RAZSEKA
+1CF2D ; [.0000.0000.0000] # ZNAMENNY COMBINING MARK KRYZH ON LEFT
+1CF30 ; [.0000.0000.0000] # ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO
+1CF31 ; [.0000.0000.0000] # ZNAMENNY COMBINING TONAL RANGE MARK SVETLO
+1CF32 ; [.0000.0000.0000] # ZNAMENNY COMBINING TONAL RANGE MARK TRESVETLO
+1CF33 ; [.0000.0000.0000] # ZNAMENNY COMBINING MARK ZADERZHKA
+1CF34 ; [.0000.0000.0000] # ZNAMENNY COMBINING MARK DEMESTVENNY ZADERZHKA
+1CF35 ; [.0000.0000.0000] # ZNAMENNY COMBINING MARK OTSECHKA
+1CF36 ; [.0000.0000.0000] # ZNAMENNY COMBINING MARK PODCHASHIE
+1CF37 ; [.0000.0000.0000] # ZNAMENNY COMBINING MARK PODCHASHIE WITH VERTICAL STROKE
+1CF38 ; [.0000.0000.0000] # ZNAMENNY COMBINING MARK CHASHKA
+1CF39 ; [.0000.0000.0000] # ZNAMENNY COMBINING MARK CHASHKA POLNAYA
+1CF3A ; [.0000.0000.0000] # ZNAMENNY COMBINING MARK OBLACHKO
+1CF3B ; [.0000.0000.0000] # ZNAMENNY COMBINING MARK SOROCHYA NOZHKA
+1CF3C ; [.0000.0000.0000] # ZNAMENNY COMBINING MARK TOCHKA
+1CF3D ; [.0000.0000.0000] # ZNAMENNY COMBINING MARK DVOETOCHIE
+1CF3E ; [.0000.0000.0000] # ZNAMENNY COMBINING ATTACHING VERTICAL OMET
+1CF3F ; [.0000.0000.0000] # ZNAMENNY COMBINING MARK CURVED OMET
+1CF40 ; [.0000.0000.0000] # ZNAMENNY COMBINING MARK KRYZH
+1CF41 ; [.0000.0000.0000] # ZNAMENNY COMBINING LOWER TONAL RANGE INDICATOR
+1CF42 ; [.0000.0000.0000] # ZNAMENNY PRIZNAK MODIFIER LEVEL-2
+1CF43 ; [.0000.0000.0000] # ZNAMENNY PRIZNAK MODIFIER LEVEL-3
+1CF44 ; [.0000.0000.0000] # ZNAMENNY PRIZNAK MODIFIER DIRECTION FLIP
+1CF45 ; [.0000.0000.0000] # ZNAMENNY PRIZNAK MODIFIER KRYZH
+1CF46 ; [.0000.0000.0000] # ZNAMENNY PRIZNAK MODIFIER ROG
+1CF50 ; [*115B.0020.0002] # ZNAMENNY NEUME KRYUK
+1CF51 ; [*115C.0020.0002] # ZNAMENNY NEUME KRYUK TIKHY
+1CF52 ; [*115D.0020.0002] # ZNAMENNY NEUME PARAKLIT
+1CF53 ; [*115E.0020.0002] # ZNAMENNY NEUME DVA V CHELNU
+1CF54 ; [*115F.0020.0002] # ZNAMENNY NEUME KLYUCH
+1CF55 ; [*1160.0020.0002] # ZNAMENNY NEUME ZANOZHEK
+1CF56 ; [*1161.0020.0002] # ZNAMENNY NEUME STOPITSA
+1CF57 ; [*1162.0020.0002] # ZNAMENNY NEUME STOPITSA S OCHKOM
+1CF58 ; [*1163.0020.0002] # ZNAMENNY NEUME PEREVODKA
+1CF59 ; [*1164.0020.0002] # ZNAMENNY NEUME PEREVODKA NEPOSTOYANNAYA
+1CF5A ; [*1165.0020.0002] # ZNAMENNY NEUME STOPITSA WITH SOROCHYA NOZHKA
+1CF5B ; [*1166.0020.0002] # ZNAMENNY NEUME CHELYUSTKA
+1CF5C ; [*1167.0020.0002] # ZNAMENNY NEUME PALKA
+1CF5D ; [*1168.0020.0002] # ZNAMENNY NEUME ZAPYATAYA
+1CF5E ; [*1169.0020.0002] # ZNAMENNY NEUME GOLUBCHIK BORZY
+1CF5F ; [*116A.0020.0002] # ZNAMENNY NEUME GOLUBCHIK TIKHY
+1CF60 ; [*116B.0020.0002] # ZNAMENNY NEUME GOLUBCHIK MRACHNY
+1CF61 ; [*116C.0020.0002] # ZNAMENNY NEUME GOLUBCHIK SVETLY
+1CF62 ; [*116D.0020.0002] # ZNAMENNY NEUME GOLUBCHIK TRESVETLY
+1CF63 ; [*116E.0020.0002] # ZNAMENNY NEUME VRAKHIYA PROSTAYA
+1CF64 ; [*116F.0020.0002] # ZNAMENNY NEUME VRAKHIYA MRACHNAYA
+1CF65 ; [*1170.0020.0002] # ZNAMENNY NEUME VRAKHIYA SVETLAYA
+1CF66 ; [*1171.0020.0002] # ZNAMENNY NEUME VRAKHIYA TRESVETLAYA
+1CF67 ; [*1172.0020.0002] # ZNAMENNY NEUME VRAKHIYA KLYUCHEVAYA PROSTAYA
+1CF68 ; [*1173.0020.0002] # ZNAMENNY NEUME VRAKHIYA KLYUCHEVAYA MRACHNAYA
+1CF69 ; [*1174.0020.0002] # ZNAMENNY NEUME VRAKHIYA KLYUCHEVAYA SVETLAYA
+1CF6A ; [*1175.0020.0002] # ZNAMENNY NEUME VRAKHIYA KLYUCHEVAYA TRESVETLAYA
+1CF6B ; [*1176.0020.0002] # ZNAMENNY NEUME DOUBLE ZAPYATAYA
+1CF6C ; [*1177.0020.0002] # ZNAMENNY NEUME REVERSED CHELYUSTKA
+1CF6D ; [*1178.0020.0002] # ZNAMENNY NEUME DERBITSA
+1CF6E ; [*1179.0020.0002] # ZNAMENNY NEUME KHAMILO
+1CF6F ; [*117A.0020.0002] # ZNAMENNY NEUME CHASHKA
+1CF70 ; [*117B.0020.0002] # ZNAMENNY NEUME PODCHASHIE
+1CF71 ; [*117C.0020.0002] # ZNAMENNY NEUME SKAMEYTSA MRACHNAYA
+1CF72 ; [*117D.0020.0002] # ZNAMENNY NEUME SKAMEYTSA SVETLAYA
+1CF73 ; [*117E.0020.0002] # ZNAMENNY NEUME SKAMEYTSA TRESVETLAYA
+1CF74 ; [*117F.0020.0002] # ZNAMENNY NEUME SKAMEYTSA TIKHAYA
+1CF75 ; [*1180.0020.0002] # ZNAMENNY NEUME DEMESTVENNY KLYUCH
+1CF76 ; [*1181.0020.0002] # ZNAMENNY NEUME SKAMEYTSA KLYUCHEVAYA SVETLAYA
+1CF77 ; [*1182.0020.0002] # ZNAMENNY NEUME SKAMEYTSA KLYUCHENEPOSTOYANNAYA
+1CF78 ; [*1183.0020.0002] # ZNAMENNY NEUME SKAMEYTSA KLYUCHEVAYA TIKHAYA
+1CF79 ; [*1184.0020.0002] # ZNAMENNY NEUME SKAMEYTSA DVOECHELNAYA PROSTAYA
+1CF7A ; [*1185.0020.0002] # ZNAMENNY NEUME SKAMEYTSA DVOECHELNAYA SVETLAYA
+1CF7B ; [*1186.0020.0002] # ZNAMENNY NEUME SKAMEYTSA DVOECHELNAYA NEPOSTOYANNAYA
+1CF7C ; [*1187.0020.0002] # ZNAMENNY NEUME SKAMEYTSA DVOECHELNAYA KLYUCHEVAYA
+1CF7D ; [*1188.0020.0002] # ZNAMENNY NEUME SLOZHITIE
+1CF7E ; [*1189.0020.0002] # ZNAMENNY NEUME SLOZHITIE S ZAPYATOY
+1CF7F ; [*118A.0020.0002] # ZNAMENNY NEUME SLOZHITIE ZAKRYTOE
+1CF80 ; [*118B.0020.0002] # ZNAMENNY NEUME SLOZHITIE S KRYZHEM
+1CF81 ; [*118C.0020.0002] # ZNAMENNY NEUME KRYZH
+1CF82 ; [*118D.0020.0002] # ZNAMENNY NEUME ROG
+1CF83 ; [*118E.0020.0002] # ZNAMENNY NEUME FITA
+1CF84 ; [*118F.0020.0002] # ZNAMENNY NEUME KOBYLA
+1CF85 ; [*1190.0020.0002] # ZNAMENNY NEUME ZMEYTSA
+1CF86 ; [*1191.0020.0002] # ZNAMENNY NEUME STATYA
+1CF87 ; [*1192.0020.0002] # ZNAMENNY NEUME STATYA S ZAPYATOY
+1CF88 ; [*1193.0020.0002] # ZNAMENNY NEUME STATYA S KRYZHEM
+1CF89 ; [*1194.0020.0002] # ZNAMENNY NEUME STATYA S ZAPYATOY I KRYZHEM
+1CF8A ; [*1195.0020.0002] # ZNAMENNY NEUME STATYA S KRYZHEM I ZAPYATOY
+1CF8B ; [*1196.0020.0002] # ZNAMENNY NEUME STATYA ZAKRYTAYA
+1CF8C ; [*1197.0020.0002] # ZNAMENNY NEUME STATYA ZAKRYTAYA S ZAPYATOY
+1CF8D ; [*1198.0020.0002] # ZNAMENNY NEUME STATYA S ROGOM
+1CF8E ; [*1199.0020.0002] # ZNAMENNY NEUME STATYA S DVUMYA ZAPYATYMI
+1CF8F ; [*119A.0020.0002] # ZNAMENNY NEUME STATYA S ZAPYATOY I PODCHASHIEM
+1CF90 ; [*119B.0020.0002] # ZNAMENNY NEUME POLKULIZMY
+1CF91 ; [*119C.0020.0002] # ZNAMENNY NEUME STATYA NEPOSTOYANNAYA
+1CF92 ; [*119D.0020.0002] # ZNAMENNY NEUME STRELA PROSTAYA
+1CF93 ; [*119E.0020.0002] # ZNAMENNY NEUME STRELA MRACHNOTIKHAYA
+1CF94 ; [*119F.0020.0002] # ZNAMENNY NEUME STRELA KRYZHEVAYA
+1CF95 ; [*11A0.0020.0002] # ZNAMENNY NEUME STRELA POLUPOVODNAYA
+1CF96 ; [*11A1.0020.0002] # ZNAMENNY NEUME STRELA POVODNAYA
+1CF97 ; [*11A2.0020.0002] # ZNAMENNY NEUME STRELA NEPOSTOYANNAYA
+1CF98 ; [*11A3.0020.0002] # ZNAMENNY NEUME STRELA KLYUCHEPOVODNAYA
+1CF99 ; [*11A4.0020.0002] # ZNAMENNY NEUME STRELA KLYUCHENEPOSTOYANNAYA
+1CF9A ; [*11A5.0020.0002] # ZNAMENNY NEUME STRELA TIKHAYA PUTNAYA
+1CF9B ; [*11A6.0020.0002] # ZNAMENNY NEUME STRELA DVOECHELNAYA
+1CF9C ; [*11A7.0020.0002] # ZNAMENNY NEUME STRELA DVOECHELNOKRYZHEVAYA
+1CF9D ; [*11A8.0020.0002] # ZNAMENNY NEUME STRELA DVOECHELNOPOVODNAYA
+1CF9E ; [*11A9.0020.0002] # ZNAMENNY NEUME STRELA DVOECHELNAYA KLYUCHEVAYA
+1CF9F ; [*11AA.0020.0002] # ZNAMENNY NEUME STRELA DVOECHELNOPOVODNAYA KLYUCHEVAYA
+1CFA0 ; [*11AB.0020.0002] # ZNAMENNY NEUME STRELA GROMNAYA WITH SINGLE ZAPYATAYA
+1CFA1 ; [*11AC.0020.0002] # ZNAMENNY NEUME STRELA GROMOPOVODNAYA WITH SINGLE ZAPYATAYA
+1CFA2 ; [*11AD.0020.0002] # ZNAMENNY NEUME STRELA GROMNAYA
+1CFA3 ; [*11AE.0020.0002] # ZNAMENNY NEUME STRELA GROMOPOVODNAYA
+1CFA4 ; [*11AF.0020.0002] # ZNAMENNY NEUME STRELA GROMOPOVODNAYA WITH DOUBLE ZAPYATAYA
+1CFA5 ; [*11B0.0020.0002] # ZNAMENNY NEUME STRELA GROMOKRYZHEVAYA
+1CFA6 ; [*11B1.0020.0002] # ZNAMENNY NEUME STRELA GROMOKRYZHEVAYA POVODNAYA
+1CFA7 ; [*11B2.0020.0002] # ZNAMENNY NEUME MECHIK
+1CFA8 ; [*11B3.0020.0002] # ZNAMENNY NEUME MECHIK POVODNY
+1CFA9 ; [*11B4.0020.0002] # ZNAMENNY NEUME MECHIK KLYUCHEVOY
+1CFAA ; [*11B5.0020.0002] # ZNAMENNY NEUME MECHIK KLYUCHEPOVODNY
+1CFAB ; [*11B6.0020.0002] # ZNAMENNY NEUME MECHIK KLYUCHENEPOSTOYANNY
+1CFAC ; [*11B7.0020.0002] # ZNAMENNY NEUME STRELA TRYASOGLASNAYA
+1CFAD ; [*11B8.0020.0002] # ZNAMENNY NEUME STRELA TRYASOPOVODNAYA
+1CFAE ; [*11B9.0020.0002] # ZNAMENNY NEUME STRELA TRYASOSTRELNAYA
+1CFAF ; [*11BA.0020.0002] # ZNAMENNY NEUME OSOKA
+1CFB0 ; [*11BB.0020.0002] # ZNAMENNY NEUME OSOKA SVETLAYA
+1CFB1 ; [*11BC.0020.0002] # ZNAMENNY NEUME OSOKA TRESVETLAYA
+1CFB2 ; [*11BD.0020.0002] # ZNAMENNY NEUME OSOKA KRYUKOVAYA SVETLAYA
+1CFB3 ; [*11BE.0020.0002] # ZNAMENNY NEUME OSOKA KLYUCHEVAYA SVETLAYA
+1CFB4 ; [*11BF.0020.0002] # ZNAMENNY NEUME OSOKA KLYUCHEVAYA NEPOSTOYANNAYA
+1CFB5 ; [*11C0.0020.0002] # ZNAMENNY NEUME STRELA KRYUKOVAYA
+1CFB6 ; [*11C1.0020.0002] # ZNAMENNY NEUME STRELA KRYUKOVAYA POVODNAYA
+1CFB7 ; [*11C2.0020.0002] # ZNAMENNY NEUME STRELA KRYUKOVAYA GROMNAYA WITH SINGLE ZAPYATAYA
+1CFB8 ; [*11C3.0020.0002] # ZNAMENNY NEUME STRELA KRYUKOVAYA GROMOPOVODNAYA WITH SINGLE ZAPYATAYA
+1CFB9 ; [*11C4.0020.0002] # ZNAMENNY NEUME STRELA KRYUKOVAYA GROMNAYA
+1CFBA ; [*11C5.0020.0002] # ZNAMENNY NEUME STRELA KRYUKOVAYA GROMOPOVODNAYA
+1CFBB ; [*11C6.0020.0002] # ZNAMENNY NEUME STRELA KRYUKOVAYA GROMOPOVODNAYA WITH DOUBLE ZAPYATAYA
+1CFBC ; [*11C7.0020.0002] # ZNAMENNY NEUME STRELA KRYUKOVAYA GROMOKRYZHEVAYA
+1CFBD ; [*11C8.0020.0002] # ZNAMENNY NEUME STRELA KRYUKOVAYA GROMOKRYZHEVAYA POVODNAYA
+1CFBE ; [*11C9.0020.0002] # ZNAMENNY NEUME STRELA KRYUKOVAYA TRYASKA
+1CFBF ; [*11CA.0020.0002] # ZNAMENNY NEUME KUFISMA
+1CFC0 ; [*11CB.0020.0002] # ZNAMENNY NEUME OBLAKO
+1CFC1 ; [*11CC.0020.0002] # ZNAMENNY NEUME DUDA
+1CFC2 ; [*11CD.0020.0002] # ZNAMENNY NEUME NEMKA
+1CFC3 ; [*11CE.0020.0002] # ZNAMENNY NEUME PAUK
+1D000 ; [*11CF.0020.0002] # BYZANTINE MUSICAL SYMBOL PSILI
+1D001 ; [*11D0.0020.0002] # BYZANTINE MUSICAL SYMBOL DASEIA
+1D002 ; [*11D1.0020.0002] # BYZANTINE MUSICAL SYMBOL PERISPOMENI
+1D003 ; [*11D2.0020.0002] # BYZANTINE MUSICAL SYMBOL OXEIA EKFONITIKON
+1D004 ; [*11D3.0020.0002] # BYZANTINE MUSICAL SYMBOL OXEIA DIPLI
+1D005 ; [*11D4.0020.0002] # BYZANTINE MUSICAL SYMBOL VAREIA EKFONITIKON
+1D006 ; [*11D5.0020.0002] # BYZANTINE MUSICAL SYMBOL VAREIA DIPLI
+1D007 ; [*11D6.0020.0002] # BYZANTINE MUSICAL SYMBOL KATHISTI
+1D008 ; [*11D7.0020.0002] # BYZANTINE MUSICAL SYMBOL SYRMATIKI
+1D009 ; [*11D8.0020.0002] # BYZANTINE MUSICAL SYMBOL PARAKLITIKI
+1D00A ; [*11D9.0020.0002] # BYZANTINE MUSICAL SYMBOL YPOKRISIS
+1D00B ; [*11DA.0020.0002] # BYZANTINE MUSICAL SYMBOL YPOKRISIS DIPLI
+1D00C ; [*11DB.0020.0002] # BYZANTINE MUSICAL SYMBOL KREMASTI
+1D00D ; [*11DC.0020.0002] # BYZANTINE MUSICAL SYMBOL APESO EKFONITIKON
+1D00E ; [*11DD.0020.0002] # BYZANTINE MUSICAL SYMBOL EXO EKFONITIKON
+1D00F ; [*11DE.0020.0002] # BYZANTINE MUSICAL SYMBOL TELEIA
+1D010 ; [*11DF.0020.0002] # BYZANTINE MUSICAL SYMBOL KENTIMATA
+1D011 ; [*11E0.0020.0002] # BYZANTINE MUSICAL SYMBOL APOSTROFOS
+1D012 ; [*11E1.0020.0002] # BYZANTINE MUSICAL SYMBOL APOSTROFOS DIPLI
+1D013 ; [*11E2.0020.0002] # BYZANTINE MUSICAL SYMBOL SYNEVMA
+1D014 ; [*11E3.0020.0002] # BYZANTINE MUSICAL SYMBOL THITA
+1D015 ; [*11E4.0020.0002] # BYZANTINE MUSICAL SYMBOL OLIGON ARCHAION
+1D016 ; [*11E5.0020.0002] # BYZANTINE MUSICAL SYMBOL GORGON ARCHAION
+1D017 ; [*11E6.0020.0002] # BYZANTINE MUSICAL SYMBOL PSILON
+1D018 ; [*11E7.0020.0002] # BYZANTINE MUSICAL SYMBOL CHAMILON
+1D019 ; [*11E8.0020.0002] # BYZANTINE MUSICAL SYMBOL VATHY
+1D01A ; [*11E9.0020.0002] # BYZANTINE MUSICAL SYMBOL ISON ARCHAION
+1D01B ; [*11EA.0020.0002] # BYZANTINE MUSICAL SYMBOL KENTIMA ARCHAION
+1D01C ; [*11EB.0020.0002] # BYZANTINE MUSICAL SYMBOL KENTIMATA ARCHAION
+1D01D ; [*11EC.0020.0002] # BYZANTINE MUSICAL SYMBOL SAXIMATA
+1D01E ; [*11ED.0020.0002] # BYZANTINE MUSICAL SYMBOL PARICHON
+1D01F ; [*11EE.0020.0002] # BYZANTINE MUSICAL SYMBOL STAVROS APODEXIA
+1D020 ; [*11EF.0020.0002] # BYZANTINE MUSICAL SYMBOL OXEIAI ARCHAION
+1D021 ; [*11F0.0020.0002] # BYZANTINE MUSICAL SYMBOL VAREIAI ARCHAION
+1D022 ; [*11F1.0020.0002] # BYZANTINE MUSICAL SYMBOL APODERMA ARCHAION
+1D023 ; [*11F2.0020.0002] # BYZANTINE MUSICAL SYMBOL APOTHEMA
+1D024 ; [*11F3.0020.0002] # BYZANTINE MUSICAL SYMBOL KLASMA
+1D025 ; [*11F4.0020.0002] # BYZANTINE MUSICAL SYMBOL REVMA
+1D026 ; [*11F5.0020.0002] # BYZANTINE MUSICAL SYMBOL PIASMA ARCHAION
+1D027 ; [*11F6.0020.0002] # BYZANTINE MUSICAL SYMBOL TINAGMA
+1D028 ; [*11F7.0020.0002] # BYZANTINE MUSICAL SYMBOL ANATRICHISMA
+1D029 ; [*11F8.0020.0002] # BYZANTINE MUSICAL SYMBOL SEISMA
+1D02A ; [*11F9.0020.0002] # BYZANTINE MUSICAL SYMBOL SYNAGMA ARCHAION
+1D02B ; [*11FA.0020.0002] # BYZANTINE MUSICAL SYMBOL SYNAGMA META STAVROU
+1D02C ; [*11FB.0020.0002] # BYZANTINE MUSICAL SYMBOL OYRANISMA ARCHAION
+1D02D ; [*11FC.0020.0002] # BYZANTINE MUSICAL SYMBOL THEMA
+1D02E ; [*11FD.0020.0002] # BYZANTINE MUSICAL SYMBOL LEMOI
+1D02F ; [*11FE.0020.0002] # BYZANTINE MUSICAL SYMBOL DYO
+1D030 ; [*11FF.0020.0002] # BYZANTINE MUSICAL SYMBOL TRIA
+1D031 ; [*1200.0020.0002] # BYZANTINE MUSICAL SYMBOL TESSERA
+1D032 ; [*1201.0020.0002] # BYZANTINE MUSICAL SYMBOL KRATIMATA
+1D033 ; [*1202.0020.0002] # BYZANTINE MUSICAL SYMBOL APESO EXO NEO
+1D034 ; [*1203.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION
+1D035 ; [*1204.0020.0002] # BYZANTINE MUSICAL SYMBOL IMIFTHORA
+1D036 ; [*1205.0020.0002] # BYZANTINE MUSICAL SYMBOL TROMIKON ARCHAION
+1D037 ; [*1206.0020.0002] # BYZANTINE MUSICAL SYMBOL KATAVA TROMIKON
+1D038 ; [*1207.0020.0002] # BYZANTINE MUSICAL SYMBOL PELASTON
+1D039 ; [*1208.0020.0002] # BYZANTINE MUSICAL SYMBOL PSIFISTON
+1D03A ; [*1209.0020.0002] # BYZANTINE MUSICAL SYMBOL KONTEVMA
+1D03B ; [*120A.0020.0002] # BYZANTINE MUSICAL SYMBOL CHOREVMA ARCHAION
+1D03C ; [*120B.0020.0002] # BYZANTINE MUSICAL SYMBOL RAPISMA
+1D03D ; [*120C.0020.0002] # BYZANTINE MUSICAL SYMBOL PARAKALESMA ARCHAION
+1D03E ; [*120D.0020.0002] # BYZANTINE MUSICAL SYMBOL PARAKLITIKI ARCHAION
+1D03F ; [*120E.0020.0002] # BYZANTINE MUSICAL SYMBOL ICHADIN
+1D040 ; [*120F.0020.0002] # BYZANTINE MUSICAL SYMBOL NANA
+1D041 ; [*1210.0020.0002] # BYZANTINE MUSICAL SYMBOL PETASMA
+1D042 ; [*1211.0020.0002] # BYZANTINE MUSICAL SYMBOL KONTEVMA ALLO
+1D043 ; [*1212.0020.0002] # BYZANTINE MUSICAL SYMBOL TROMIKON ALLO
+1D044 ; [*1213.0020.0002] # BYZANTINE MUSICAL SYMBOL STRAGGISMATA
+1D045 ; [*1214.0020.0002] # BYZANTINE MUSICAL SYMBOL GRONTHISMATA
+1D046 ; [*1215.0020.0002] # BYZANTINE MUSICAL SYMBOL ISON NEO
+1D047 ; [*1216.0020.0002] # BYZANTINE MUSICAL SYMBOL OLIGON NEO
+1D048 ; [*1217.0020.0002] # BYZANTINE MUSICAL SYMBOL OXEIA NEO
+1D049 ; [*1218.0020.0002] # BYZANTINE MUSICAL SYMBOL PETASTI
+1D04A ; [*1219.0020.0002] # BYZANTINE MUSICAL SYMBOL KOUFISMA
+1D04B ; [*121A.0020.0002] # BYZANTINE MUSICAL SYMBOL PETASTOKOUFISMA
+1D04C ; [*121B.0020.0002] # BYZANTINE MUSICAL SYMBOL KRATIMOKOUFISMA
+1D04D ; [*121C.0020.0002] # BYZANTINE MUSICAL SYMBOL PELASTON NEO
+1D04E ; [*121D.0020.0002] # BYZANTINE MUSICAL SYMBOL KENTIMATA NEO ANO
+1D04F ; [*121E.0020.0002] # BYZANTINE MUSICAL SYMBOL KENTIMA NEO ANO
+1D050 ; [*121F.0020.0002] # BYZANTINE MUSICAL SYMBOL YPSILI
+1D051 ; [*1220.0020.0002] # BYZANTINE MUSICAL SYMBOL APOSTROFOS NEO
+1D052 ; [*1221.0020.0002] # BYZANTINE MUSICAL SYMBOL APOSTROFOI SYNDESMOS NEO
+1D053 ; [*1222.0020.0002] # BYZANTINE MUSICAL SYMBOL YPORROI
+1D054 ; [*1223.0020.0002] # BYZANTINE MUSICAL SYMBOL KRATIMOYPORROON
+1D055 ; [*1224.0020.0002] # BYZANTINE MUSICAL SYMBOL ELAFRON
+1D056 ; [*1225.0020.0002] # BYZANTINE MUSICAL SYMBOL CHAMILI
+1D057 ; [*1226.0020.0002] # BYZANTINE MUSICAL SYMBOL MIKRON ISON
+1D058 ; [*1227.0020.0002] # BYZANTINE MUSICAL SYMBOL VAREIA NEO
+1D059 ; [*1228.0020.0002] # BYZANTINE MUSICAL SYMBOL PIASMA NEO
+1D05A ; [*1229.0020.0002] # BYZANTINE MUSICAL SYMBOL PSIFISTON NEO
+1D05B ; [*122A.0020.0002] # BYZANTINE MUSICAL SYMBOL OMALON
+1D05C ; [*122B.0020.0002] # BYZANTINE MUSICAL SYMBOL ANTIKENOMA
+1D05D ; [*122C.0020.0002] # BYZANTINE MUSICAL SYMBOL LYGISMA
+1D05E ; [*122D.0020.0002] # BYZANTINE MUSICAL SYMBOL PARAKLITIKI NEO
+1D05F ; [*122E.0020.0002] # BYZANTINE MUSICAL SYMBOL PARAKALESMA NEO
+1D060 ; [*122F.0020.0002] # BYZANTINE MUSICAL SYMBOL ETERON PARAKALESMA
+1D061 ; [*1230.0020.0002] # BYZANTINE MUSICAL SYMBOL KYLISMA
+1D062 ; [*1231.0020.0002] # BYZANTINE MUSICAL SYMBOL ANTIKENOKYLISMA
+1D063 ; [*1232.0020.0002] # BYZANTINE MUSICAL SYMBOL TROMIKON NEO
+1D064 ; [*1233.0020.0002] # BYZANTINE MUSICAL SYMBOL EKSTREPTON
+1D065 ; [*1234.0020.0002] # BYZANTINE MUSICAL SYMBOL SYNAGMA NEO
+1D066 ; [*1235.0020.0002] # BYZANTINE MUSICAL SYMBOL SYRMA
+1D067 ; [*1236.0020.0002] # BYZANTINE MUSICAL SYMBOL CHOREVMA NEO
+1D068 ; [*1237.0020.0002] # BYZANTINE MUSICAL SYMBOL EPEGERMA
+1D069 ; [*1238.0020.0002] # BYZANTINE MUSICAL SYMBOL SEISMA NEO
+1D06A ; [*1239.0020.0002] # BYZANTINE MUSICAL SYMBOL XIRON KLASMA
+1D06B ; [*123A.0020.0002] # BYZANTINE MUSICAL SYMBOL TROMIKOPSIFISTON
+1D06C ; [*123B.0020.0002] # BYZANTINE MUSICAL SYMBOL PSIFISTOLYGISMA
+1D06D ; [*123C.0020.0002] # BYZANTINE MUSICAL SYMBOL TROMIKOLYGISMA
+1D06E ; [*123D.0020.0002] # BYZANTINE MUSICAL SYMBOL TROMIKOPARAKALESMA
+1D06F ; [*123E.0020.0002] # BYZANTINE MUSICAL SYMBOL PSIFISTOPARAKALESMA
+1D070 ; [*123F.0020.0002] # BYZANTINE MUSICAL SYMBOL TROMIKOSYNAGMA
+1D071 ; [*1240.0020.0002] # BYZANTINE MUSICAL SYMBOL PSIFISTOSYNAGMA
+1D072 ; [*1241.0020.0002] # BYZANTINE MUSICAL SYMBOL GORGOSYNTHETON
+1D073 ; [*1242.0020.0002] # BYZANTINE MUSICAL SYMBOL ARGOSYNTHETON
+1D074 ; [*1243.0020.0002] # BYZANTINE MUSICAL SYMBOL ETERON ARGOSYNTHETON
+1D075 ; [*1244.0020.0002] # BYZANTINE MUSICAL SYMBOL OYRANISMA NEO
+1D076 ; [*1245.0020.0002] # BYZANTINE MUSICAL SYMBOL THEMATISMOS ESO
+1D077 ; [*1246.0020.0002] # BYZANTINE MUSICAL SYMBOL THEMATISMOS EXO
+1D078 ; [*1247.0020.0002] # BYZANTINE MUSICAL SYMBOL THEMA APLOUN
+1D079 ; [*1248.0020.0002] # BYZANTINE MUSICAL SYMBOL THES KAI APOTHES
+1D07A ; [*1249.0020.0002] # BYZANTINE MUSICAL SYMBOL KATAVASMA
+1D07B ; [*124A.0020.0002] # BYZANTINE MUSICAL SYMBOL ENDOFONON
+1D07C ; [*124B.0020.0002] # BYZANTINE MUSICAL SYMBOL YFEN KATO
+1D07D ; [*124C.0020.0002] # BYZANTINE MUSICAL SYMBOL YFEN ANO
+1D07E ; [*124D.0020.0002] # BYZANTINE MUSICAL SYMBOL STAVROS
+1D07F ; [*124E.0020.0002] # BYZANTINE MUSICAL SYMBOL KLASMA ANO
+1D080 ; [*124F.0020.0002] # BYZANTINE MUSICAL SYMBOL DIPLI ARCHAION
+1D081 ; [*1250.0020.0002] # BYZANTINE MUSICAL SYMBOL KRATIMA ARCHAION
+1D082 ; [*1251.0020.0002] # BYZANTINE MUSICAL SYMBOL KRATIMA ALLO
+1D083 ; [*1252.0020.0002] # BYZANTINE MUSICAL SYMBOL KRATIMA NEO
+1D084 ; [*1253.0020.0002] # BYZANTINE MUSICAL SYMBOL APODERMA NEO
+1D085 ; [*1254.0020.0002] # BYZANTINE MUSICAL SYMBOL APLI
+1D086 ; [*1255.0020.0002] # BYZANTINE MUSICAL SYMBOL DIPLI
+1D087 ; [*1256.0020.0002] # BYZANTINE MUSICAL SYMBOL TRIPLI
+1D088 ; [*1257.0020.0002] # BYZANTINE MUSICAL SYMBOL TETRAPLI
+1D089 ; [*1258.0020.0002] # BYZANTINE MUSICAL SYMBOL KORONIS
+1D08A ; [*1259.0020.0002] # BYZANTINE MUSICAL SYMBOL LEIMMA ENOS CHRONOU
+1D08B ; [*125A.0020.0002] # BYZANTINE MUSICAL SYMBOL LEIMMA DYO CHRONON
+1D08C ; [*125B.0020.0002] # BYZANTINE MUSICAL SYMBOL LEIMMA TRION CHRONON
+1D08D ; [*125C.0020.0002] # BYZANTINE MUSICAL SYMBOL LEIMMA TESSARON CHRONON
+1D08E ; [*125D.0020.0002] # BYZANTINE MUSICAL SYMBOL LEIMMA IMISEOS CHRONOU
+1D08F ; [*125E.0020.0002] # BYZANTINE MUSICAL SYMBOL GORGON NEO ANO
+1D090 ; [*125F.0020.0002] # BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON ARISTERA
+1D091 ; [*1260.0020.0002] # BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON DEXIA
+1D092 ; [*1261.0020.0002] # BYZANTINE MUSICAL SYMBOL DIGORGON
+1D093 ; [*1262.0020.0002] # BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA KATO
+1D094 ; [*1263.0020.0002] # BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA ANO
+1D095 ; [*1264.0020.0002] # BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON DEXIA
+1D096 ; [*1265.0020.0002] # BYZANTINE MUSICAL SYMBOL TRIGORGON
+1D097 ; [*1266.0020.0002] # BYZANTINE MUSICAL SYMBOL ARGON
+1D098 ; [*1267.0020.0002] # BYZANTINE MUSICAL SYMBOL IMIDIARGON
+1D099 ; [*1268.0020.0002] # BYZANTINE MUSICAL SYMBOL DIARGON
+1D09A ; [*1269.0020.0002] # BYZANTINE MUSICAL SYMBOL AGOGI POLI ARGI
+1D09B ; [*126A.0020.0002] # BYZANTINE MUSICAL SYMBOL AGOGI ARGOTERI
+1D09C ; [*126B.0020.0002] # BYZANTINE MUSICAL SYMBOL AGOGI ARGI
+1D09D ; [*126C.0020.0002] # BYZANTINE MUSICAL SYMBOL AGOGI METRIA
+1D09E ; [*126D.0020.0002] # BYZANTINE MUSICAL SYMBOL AGOGI MESI
+1D09F ; [*126E.0020.0002] # BYZANTINE MUSICAL SYMBOL AGOGI GORGI
+1D0A0 ; [*126F.0020.0002] # BYZANTINE MUSICAL SYMBOL AGOGI GORGOTERI
+1D0A1 ; [*1270.0020.0002] # BYZANTINE MUSICAL SYMBOL AGOGI POLI GORGI
+1D0A2 ; [*1271.0020.0002] # BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOS ICHOS
+1D0A3 ; [*1272.0020.0002] # BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI PROTOS ICHOS
+1D0A4 ; [*1273.0020.0002] # BYZANTINE MUSICAL SYMBOL MARTYRIA DEYTEROS ICHOS
+1D0A5 ; [*1274.0020.0002] # BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI DEYTEROS ICHOS
+1D0A6 ; [*1275.0020.0002] # BYZANTINE MUSICAL SYMBOL MARTYRIA TRITOS ICHOS
+1D0A7 ; [*1276.0020.0002] # BYZANTINE MUSICAL SYMBOL MARTYRIA TRIFONIAS
+1D0A8 ; [*1277.0020.0002] # BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS ICHOS
+1D0A9 ; [*1278.0020.0002] # BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS LEGETOS ICHOS
+1D0AA ; [*1279.0020.0002] # BYZANTINE MUSICAL SYMBOL MARTYRIA LEGETOS ICHOS
+1D0AB ; [*127A.0020.0002] # BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS ICHOS
+1D0AC ; [*127B.0020.0002] # BYZANTINE MUSICAL SYMBOL ISAKIA TELOUS ICHIMATOS
+1D0AD ; [*127C.0020.0002] # BYZANTINE MUSICAL SYMBOL APOSTROFOI TELOUS ICHIMATOS
+1D0AE ; [*127D.0020.0002] # BYZANTINE MUSICAL SYMBOL FANEROSIS TETRAFONIAS
+1D0AF ; [*127E.0020.0002] # BYZANTINE MUSICAL SYMBOL FANEROSIS MONOFONIAS
+1D0B0 ; [*127F.0020.0002] # BYZANTINE MUSICAL SYMBOL FANEROSIS DIFONIAS
+1D0B1 ; [*1280.0020.0002] # BYZANTINE MUSICAL SYMBOL MARTYRIA VARYS ICHOS
+1D0B2 ; [*1281.0020.0002] # BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOVARYS ICHOS
+1D0B3 ; [*1282.0020.0002] # BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS TETARTOS ICHOS
+1D0B4 ; [*1283.0020.0002] # BYZANTINE MUSICAL SYMBOL GORTHMIKON N APLOUN
+1D0B5 ; [*1284.0020.0002] # BYZANTINE MUSICAL SYMBOL GORTHMIKON N DIPLOUN
+1D0B6 ; [*1285.0020.0002] # BYZANTINE MUSICAL SYMBOL ENARXIS KAI FTHORA VOU
+1D0B7 ; [*1286.0020.0002] # BYZANTINE MUSICAL SYMBOL IMIFONON
+1D0B8 ; [*1287.0020.0002] # BYZANTINE MUSICAL SYMBOL IMIFTHORON
+1D0B9 ; [*1288.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION DEYTEROU ICHOU
+1D0BA ; [*1289.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI PA
+1D0BB ; [*128A.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NANA
+1D0BC ; [*128B.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA NAOS ICHOS
+1D0BD ; [*128C.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI DI
+1D0BE ; [*128D.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON DIATONON DI
+1D0BF ; [*128E.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI KE
+1D0C0 ; [*128F.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI ZO
+1D0C1 ; [*1290.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI KATO
+1D0C2 ; [*1291.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI ANO
+1D0C3 ; [*1292.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA DIFONIAS
+1D0C4 ; [*1293.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA MONOFONIAS
+1D0C5 ; [*1294.0020.0002] # BYZANTINE MUSICAL SYMBOL FHTORA SKLIRON CHROMA VASIS
+1D0C6 ; [*1295.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON CHROMA SYNAFI
+1D0C7 ; [*1296.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA NENANO
+1D0C8 ; [*1297.0020.0002] # BYZANTINE MUSICAL SYMBOL CHROA ZYGOS
+1D0C9 ; [*1298.0020.0002] # BYZANTINE MUSICAL SYMBOL CHROA KLITON
+1D0CA ; [*1299.0020.0002] # BYZANTINE MUSICAL SYMBOL CHROA SPATHI
+1D0CB ; [*129A.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA I YFESIS TETARTIMORION
+1D0CC ; [*129B.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA ENARMONIOS ANTIFONIA
+1D0CD ; [*129C.0020.0002] # BYZANTINE MUSICAL SYMBOL YFESIS TRITIMORION
+1D0CE ; [*129D.0020.0002] # BYZANTINE MUSICAL SYMBOL DIESIS TRITIMORION
+1D0CF ; [*129E.0020.0002] # BYZANTINE MUSICAL SYMBOL DIESIS TETARTIMORION
+1D0D0 ; [*129F.0020.0002] # BYZANTINE MUSICAL SYMBOL DIESIS APLI DYO DODEKATA
+1D0D1 ; [*12A0.0020.0002] # BYZANTINE MUSICAL SYMBOL DIESIS MONOGRAMMOS TESSERA DODEKATA
+1D0D2 ; [*12A1.0020.0002] # BYZANTINE MUSICAL SYMBOL DIESIS DIGRAMMOS EX DODEKATA
+1D0D3 ; [*12A2.0020.0002] # BYZANTINE MUSICAL SYMBOL DIESIS TRIGRAMMOS OKTO DODEKATA
+1D0D4 ; [*12A3.0020.0002] # BYZANTINE MUSICAL SYMBOL YFESIS APLI DYO DODEKATA
+1D0D5 ; [*12A4.0020.0002] # BYZANTINE MUSICAL SYMBOL YFESIS MONOGRAMMOS TESSERA DODEKATA
+1D0D6 ; [*12A5.0020.0002] # BYZANTINE MUSICAL SYMBOL YFESIS DIGRAMMOS EX DODEKATA
+1D0D7 ; [*12A6.0020.0002] # BYZANTINE MUSICAL SYMBOL YFESIS TRIGRAMMOS OKTO DODEKATA
+1D0D8 ; [*12A7.0020.0002] # BYZANTINE MUSICAL SYMBOL GENIKI DIESIS
+1D0D9 ; [*12A8.0020.0002] # BYZANTINE MUSICAL SYMBOL GENIKI YFESIS
+1D0DA ; [*12A9.0020.0002] # BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MIKRI
+1D0DB ; [*12AA.0020.0002] # BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MEGALI
+1D0DC ; [*12AB.0020.0002] # BYZANTINE MUSICAL SYMBOL DIASTOLI DIPLI
+1D0DD ; [*12AC.0020.0002] # BYZANTINE MUSICAL SYMBOL DIASTOLI THESEOS
+1D0DE ; [*12AD.0020.0002] # BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS
+1D0DF ; [*12AE.0020.0002] # BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS DISIMOU
+1D0E0 ; [*12AF.0020.0002] # BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TRISIMOU
+1D0E1 ; [*12B0.0020.0002] # BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TETRASIMOU
+1D0E2 ; [*12B1.0020.0002] # BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS
+1D0E3 ; [*12B2.0020.0002] # BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS DISIMOU
+1D0E4 ; [*12B3.0020.0002] # BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TRISIMOU
+1D0E5 ; [*12B4.0020.0002] # BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TETRASIMOU
+1D0E6 ; [*12B5.0020.0002] # BYZANTINE MUSICAL SYMBOL DIGRAMMA GG
+1D0E7 ; [*12B6.0020.0002] # BYZANTINE MUSICAL SYMBOL DIFTOGGOS OU
+1D0E8 ; [*12B7.0020.0002] # BYZANTINE MUSICAL SYMBOL STIGMA
+1D0E9 ; [*12B8.0020.0002] # BYZANTINE MUSICAL SYMBOL ARKTIKO PA
+1D0EA ; [*12B9.0020.0002] # BYZANTINE MUSICAL SYMBOL ARKTIKO VOU
+1D0EB ; [*12BA.0020.0002] # BYZANTINE MUSICAL SYMBOL ARKTIKO GA
+1D0EC ; [*12BB.0020.0002] # BYZANTINE MUSICAL SYMBOL ARKTIKO DI
+1D0ED ; [*12BC.0020.0002] # BYZANTINE MUSICAL SYMBOL ARKTIKO KE
+1D0EE ; [*12BD.0020.0002] # BYZANTINE MUSICAL SYMBOL ARKTIKO ZO
+1D0EF ; [*12BE.0020.0002] # BYZANTINE MUSICAL SYMBOL ARKTIKO NI
+1D0F0 ; [*12BF.0020.0002] # BYZANTINE MUSICAL SYMBOL KENTIMATA NEO MESO
+1D0F1 ; [*12C0.0020.0002] # BYZANTINE MUSICAL SYMBOL KENTIMA NEO MESO
+1D0F2 ; [*12C1.0020.0002] # BYZANTINE MUSICAL SYMBOL KENTIMATA NEO KATO
+1D0F3 ; [*12C2.0020.0002] # BYZANTINE MUSICAL SYMBOL KENTIMA NEO KATO
+1D0F4 ; [*12C3.0020.0002] # BYZANTINE MUSICAL SYMBOL KLASMA KATO
+1D0F5 ; [*12C4.0020.0002] # BYZANTINE MUSICAL SYMBOL GORGON NEO KATO
+1D100 ; [*12C5.0020.0002] # MUSICAL SYMBOL SINGLE BARLINE
+1D101 ; [*12C6.0020.0002] # MUSICAL SYMBOL DOUBLE BARLINE
+1D102 ; [*12C7.0020.0002] # MUSICAL SYMBOL FINAL BARLINE
+1D103 ; [*12C8.0020.0002] # MUSICAL SYMBOL REVERSE FINAL BARLINE
+1D104 ; [*12C9.0020.0002] # MUSICAL SYMBOL DASHED BARLINE
+1D105 ; [*12CA.0020.0002] # MUSICAL SYMBOL SHORT BARLINE
+1D106 ; [*12CB.0020.0002] # MUSICAL SYMBOL LEFT REPEAT SIGN
+1D107 ; [*12CC.0020.0002] # MUSICAL SYMBOL RIGHT REPEAT SIGN
+1D108 ; [*12CD.0020.0002] # MUSICAL SYMBOL REPEAT DOTS
+1D109 ; [*12CE.0020.0002] # MUSICAL SYMBOL DAL SEGNO
+1D10A ; [*12CF.0020.0002] # MUSICAL SYMBOL DA CAPO
+1D10B ; [*12D0.0020.0002] # MUSICAL SYMBOL SEGNO
+1D10C ; [*12D1.0020.0002] # MUSICAL SYMBOL CODA
+1D10D ; [*12D2.0020.0002] # MUSICAL SYMBOL REPEATED FIGURE-1
+1D10E ; [*12D3.0020.0002] # MUSICAL SYMBOL REPEATED FIGURE-2
+1D10F ; [*12D4.0020.0002] # MUSICAL SYMBOL REPEATED FIGURE-3
+1D110 ; [*12D5.0020.0002] # MUSICAL SYMBOL FERMATA
+1D111 ; [*12D6.0020.0002] # MUSICAL SYMBOL FERMATA BELOW
+1D112 ; [*12D7.0020.0002] # MUSICAL SYMBOL BREATH MARK
+1D113 ; [*12D8.0020.0002] # MUSICAL SYMBOL CAESURA
+1D114 ; [*12D9.0020.0002] # MUSICAL SYMBOL BRACE
+1D115 ; [*12DA.0020.0002] # MUSICAL SYMBOL BRACKET
+1D116 ; [*12DB.0020.0002] # MUSICAL SYMBOL ONE-LINE STAFF
+1D117 ; [*12DC.0020.0002] # MUSICAL SYMBOL TWO-LINE STAFF
+1D118 ; [*12DD.0020.0002] # MUSICAL SYMBOL THREE-LINE STAFF
+1D119 ; [*12DE.0020.0002] # MUSICAL SYMBOL FOUR-LINE STAFF
+1D11A ; [*12DF.0020.0002] # MUSICAL SYMBOL FIVE-LINE STAFF
+1D11B ; [*12E0.0020.0002] # MUSICAL SYMBOL SIX-LINE STAFF
+1D11C ; [*12E1.0020.0002] # MUSICAL SYMBOL SIX-STRING FRETBOARD
+1D11D ; [*12E2.0020.0002] # MUSICAL SYMBOL FOUR-STRING FRETBOARD
+1D11E ; [*12E3.0020.0002] # MUSICAL SYMBOL G CLEF
+1D11F ; [*12E4.0020.0002] # MUSICAL SYMBOL G CLEF OTTAVA ALTA
+1D120 ; [*12E5.0020.0002] # MUSICAL SYMBOL G CLEF OTTAVA BASSA
+1D121 ; [*12E6.0020.0002] # MUSICAL SYMBOL C CLEF
+1D122 ; [*12E7.0020.0002] # MUSICAL SYMBOL F CLEF
+1D123 ; [*12E8.0020.0002] # MUSICAL SYMBOL F CLEF OTTAVA ALTA
+1D124 ; [*12E9.0020.0002] # MUSICAL SYMBOL F CLEF OTTAVA BASSA
+1D125 ; [*12EA.0020.0002] # MUSICAL SYMBOL DRUM CLEF-1
+1D126 ; [*12EB.0020.0002] # MUSICAL SYMBOL DRUM CLEF-2
+1D129 ; [*12FF.0020.0002] # MUSICAL SYMBOL MULTIPLE MEASURE REST
+1D12A ; [*12EF.0020.0002] # MUSICAL SYMBOL DOUBLE SHARP
+1D12B ; [*12F0.0020.0002] # MUSICAL SYMBOL DOUBLE FLAT
+1D12C ; [*12F1.0020.0002] # MUSICAL SYMBOL FLAT UP
+1D12D ; [*12F2.0020.0002] # MUSICAL SYMBOL FLAT DOWN
+1D12E ; [*12F3.0020.0002] # MUSICAL SYMBOL NATURAL UP
+1D12F ; [*12F4.0020.0002] # MUSICAL SYMBOL NATURAL DOWN
+1D130 ; [*12F5.0020.0002] # MUSICAL SYMBOL SHARP UP
+1D131 ; [*12F6.0020.0002] # MUSICAL SYMBOL SHARP DOWN
+1D132 ; [*12F7.0020.0002] # MUSICAL SYMBOL QUARTER TONE SHARP
+1D133 ; [*12F8.0020.0002] # MUSICAL SYMBOL QUARTER TONE FLAT
+1D134 ; [*12F9.0020.0002] # MUSICAL SYMBOL COMMON TIME
+1D135 ; [*12FA.0020.0002] # MUSICAL SYMBOL CUT TIME
+1D136 ; [*12FB.0020.0002] # MUSICAL SYMBOL OTTAVA ALTA
+1D137 ; [*12FC.0020.0002] # MUSICAL SYMBOL OTTAVA BASSA
+1D138 ; [*12FD.0020.0002] # MUSICAL SYMBOL QUINDICESIMA ALTA
+1D139 ; [*12FE.0020.0002] # MUSICAL SYMBOL QUINDICESIMA BASSA
+1D13A ; [*1300.0020.0002] # MUSICAL SYMBOL MULTI REST
+1D13B ; [*1301.0020.0002] # MUSICAL SYMBOL WHOLE REST
+1D13C ; [*1302.0020.0002] # MUSICAL SYMBOL HALF REST
+1D13D ; [*1303.0020.0002] # MUSICAL SYMBOL QUARTER REST
+1D13E ; [*1304.0020.0002] # MUSICAL SYMBOL EIGHTH REST
+1D13F ; [*1305.0020.0002] # MUSICAL SYMBOL SIXTEENTH REST
+1D140 ; [*1306.0020.0002] # MUSICAL SYMBOL THIRTY-SECOND REST
+1D141 ; [*1307.0020.0002] # MUSICAL SYMBOL SIXTY-FOURTH REST
+1D142 ; [*1308.0020.0002] # MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH REST
+1D143 ; [*1309.0020.0002] # MUSICAL SYMBOL X NOTEHEAD
+1D144 ; [*130A.0020.0002] # MUSICAL SYMBOL PLUS NOTEHEAD
+1D145 ; [*130B.0020.0002] # MUSICAL SYMBOL CIRCLE X NOTEHEAD
+1D146 ; [*130C.0020.0002] # MUSICAL SYMBOL SQUARE NOTEHEAD WHITE
+1D147 ; [*130D.0020.0002] # MUSICAL SYMBOL SQUARE NOTEHEAD BLACK
+1D148 ; [*130E.0020.0002] # MUSICAL SYMBOL TRIANGLE NOTEHEAD UP WHITE
+1D149 ; [*130F.0020.0002] # MUSICAL SYMBOL TRIANGLE NOTEHEAD UP BLACK
+1D14A ; [*1310.0020.0002] # MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT WHITE
+1D14B ; [*1311.0020.0002] # MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT BLACK
+1D14C ; [*1312.0020.0002] # MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT WHITE
+1D14D ; [*1313.0020.0002] # MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT BLACK
+1D14E ; [*1314.0020.0002] # MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN WHITE
+1D14F ; [*1315.0020.0002] # MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN BLACK
+1D150 ; [*1316.0020.0002] # MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT WHITE
+1D151 ; [*1317.0020.0002] # MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT BLACK
+1D152 ; [*1318.0020.0002] # MUSICAL SYMBOL MOON NOTEHEAD WHITE
+1D153 ; [*1319.0020.0002] # MUSICAL SYMBOL MOON NOTEHEAD BLACK
+1D154 ; [*131A.0020.0002] # MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN WHITE
+1D155 ; [*131B.0020.0002] # MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN BLACK
+1D156 ; [*131C.0020.0002] # MUSICAL SYMBOL PARENTHESIS NOTEHEAD
+1D157 ; [*131D.0020.0002] # MUSICAL SYMBOL VOID NOTEHEAD
+1D158 ; [*131E.0020.0002] # MUSICAL SYMBOL NOTEHEAD BLACK
+1D159 ; [*131F.0020.0002] # MUSICAL SYMBOL NULL NOTEHEAD
+1D15A ; [*1320.0020.0002] # MUSICAL SYMBOL CLUSTER NOTEHEAD WHITE
+1D15B ; [*1321.0020.0002] # MUSICAL SYMBOL CLUSTER NOTEHEAD BLACK
+1D15C ; [*1322.0020.0002] # MUSICAL SYMBOL BREVE
+1D15D ; [*1323.0020.0002] # MUSICAL SYMBOL WHOLE NOTE
+1D15E ; [*131D.0020.0002][.0000.0000.0000] # MUSICAL SYMBOL HALF NOTE
+1D15F ; [*131E.0020.0002][.0000.0000.0000] # MUSICAL SYMBOL QUARTER NOTE
+1D160 ; [*131E.0020.0002][.0000.0000.0000][.0000.0000.0000] # MUSICAL SYMBOL EIGHTH NOTE
+1D161 ; [*131E.0020.0002][.0000.0000.0000][.0000.0000.0000] # MUSICAL SYMBOL SIXTEENTH NOTE
+1D162 ; [*131E.0020.0002][.0000.0000.0000][.0000.0000.0000] # MUSICAL SYMBOL THIRTY-SECOND NOTE
+1D163 ; [*131E.0020.0002][.0000.0000.0000][.0000.0000.0000] # MUSICAL SYMBOL SIXTY-FOURTH NOTE
+1D164 ; [*131E.0020.0002][.0000.0000.0000][.0000.0000.0000] # MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE
+1D165 ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING STEM
+1D166 ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING SPRECHGESANG STEM
+1D167 ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING TREMOLO-1
+1D168 ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING TREMOLO-2
+1D169 ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING TREMOLO-3
+1D16A ; [*1324.0020.0002] # MUSICAL SYMBOL FINGERED TREMOLO-1
+1D16B ; [*1325.0020.0002] # MUSICAL SYMBOL FINGERED TREMOLO-2
+1D16C ; [*1326.0020.0002] # MUSICAL SYMBOL FINGERED TREMOLO-3
+1D16D ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING AUGMENTATION DOT
+1D16E ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING FLAG-1
+1D16F ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING FLAG-2
+1D170 ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING FLAG-3
+1D171 ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING FLAG-4
+1D172 ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING FLAG-5
+1D17B ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING ACCENT
+1D17C ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING STACCATO
+1D17D ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING TENUTO
+1D17E ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING STACCATISSIMO
+1D17F ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING MARCATO
+1D180 ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING MARCATO-STACCATO
+1D181 ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING ACCENT-STACCATO
+1D182 ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING LOURE
+1D183 ; [*1327.0020.0002] # MUSICAL SYMBOL ARPEGGIATO UP
+1D184 ; [*1328.0020.0002] # MUSICAL SYMBOL ARPEGGIATO DOWN
+1D185 ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING DOIT
+1D186 ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING RIP
+1D187 ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING FLIP
+1D188 ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING SMEAR
+1D189 ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING BEND
+1D18A ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING DOUBLE TONGUE
+1D18B ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING TRIPLE TONGUE
+1D18C ; [*1329.0020.0002] # MUSICAL SYMBOL RINFORZANDO
+1D18D ; [*132A.0020.0002] # MUSICAL SYMBOL SUBITO
+1D18E ; [*132B.0020.0002] # MUSICAL SYMBOL Z
+1D18F ; [*132C.0020.0002] # MUSICAL SYMBOL PIANO
+1D190 ; [*132D.0020.0002] # MUSICAL SYMBOL MEZZO
+1D191 ; [*132E.0020.0002] # MUSICAL SYMBOL FORTE
+1D192 ; [*132F.0020.0002] # MUSICAL SYMBOL CRESCENDO
+1D193 ; [*1330.0020.0002] # MUSICAL SYMBOL DECRESCENDO
+1D194 ; [*1331.0020.0002] # MUSICAL SYMBOL GRACE NOTE SLASH
+1D195 ; [*1332.0020.0002] # MUSICAL SYMBOL GRACE NOTE NO SLASH
+1D196 ; [*1333.0020.0002] # MUSICAL SYMBOL TR
+1D197 ; [*1334.0020.0002] # MUSICAL SYMBOL TURN
+1D198 ; [*1335.0020.0002] # MUSICAL SYMBOL INVERTED TURN
+1D199 ; [*1336.0020.0002] # MUSICAL SYMBOL TURN SLASH
+1D19A ; [*1337.0020.0002] # MUSICAL SYMBOL TURN UP
+1D19B ; [*1338.0020.0002] # MUSICAL SYMBOL ORNAMENT STROKE-1
+1D19C ; [*1339.0020.0002] # MUSICAL SYMBOL ORNAMENT STROKE-2
+1D19D ; [*133A.0020.0002] # MUSICAL SYMBOL ORNAMENT STROKE-3
+1D19E ; [*133B.0020.0002] # MUSICAL SYMBOL ORNAMENT STROKE-4
+1D19F ; [*133C.0020.0002] # MUSICAL SYMBOL ORNAMENT STROKE-5
+1D1A0 ; [*133D.0020.0002] # MUSICAL SYMBOL ORNAMENT STROKE-6
+1D1A1 ; [*133E.0020.0002] # MUSICAL SYMBOL ORNAMENT STROKE-7
+1D1A2 ; [*133F.0020.0002] # MUSICAL SYMBOL ORNAMENT STROKE-8
+1D1A3 ; [*1340.0020.0002] # MUSICAL SYMBOL ORNAMENT STROKE-9
+1D1A4 ; [*1341.0020.0002] # MUSICAL SYMBOL ORNAMENT STROKE-10
+1D1A5 ; [*1342.0020.0002] # MUSICAL SYMBOL ORNAMENT STROKE-11
+1D1A6 ; [*1343.0020.0002] # MUSICAL SYMBOL HAUPTSTIMME
+1D1A7 ; [*1344.0020.0002] # MUSICAL SYMBOL NEBENSTIMME
+1D1A8 ; [*1345.0020.0002] # MUSICAL SYMBOL END OF STIMME
+1D1A9 ; [*1346.0020.0002] # MUSICAL SYMBOL DEGREE SLASH
+1D1AA ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING DOWN BOW
+1D1AB ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING UP BOW
+1D1AC ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING HARMONIC
+1D1AD ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING SNAP PIZZICATO
+1D1AE ; [*1347.0020.0002] # MUSICAL SYMBOL PEDAL MARK
+1D1AF ; [*1348.0020.0002] # MUSICAL SYMBOL PEDAL UP MARK
+1D1B0 ; [*1349.0020.0002] # MUSICAL SYMBOL HALF PEDAL MARK
+1D1B1 ; [*134A.0020.0002] # MUSICAL SYMBOL GLISSANDO UP
+1D1B2 ; [*134B.0020.0002] # MUSICAL SYMBOL GLISSANDO DOWN
+1D1B3 ; [*134C.0020.0002] # MUSICAL SYMBOL WITH FINGERNAILS
+1D1B4 ; [*134D.0020.0002] # MUSICAL SYMBOL DAMP
+1D1B5 ; [*134E.0020.0002] # MUSICAL SYMBOL DAMP ALL
+1D1B6 ; [*134F.0020.0002] # MUSICAL SYMBOL MAXIMA
+1D1B7 ; [*1350.0020.0002] # MUSICAL SYMBOL LONGA
+1D1B8 ; [*1351.0020.0002] # MUSICAL SYMBOL BREVIS
+1D1B9 ; [*1352.0020.0002] # MUSICAL SYMBOL SEMIBREVIS WHITE
+1D1BA ; [*1353.0020.0002] # MUSICAL SYMBOL SEMIBREVIS BLACK
+1D1BB ; [*1352.0020.0002][.0000.0000.0000] # MUSICAL SYMBOL MINIMA
+1D1BC ; [*1353.0020.0002][.0000.0000.0000] # MUSICAL SYMBOL MINIMA BLACK
+1D1BD ; [*1352.0020.0002][.0000.0000.0000][.0000.0000.0000] # MUSICAL SYMBOL SEMIMINIMA WHITE
+1D1BE ; [*1353.0020.0002][.0000.0000.0000][.0000.0000.0000] # MUSICAL SYMBOL SEMIMINIMA BLACK
+1D1BF ; [*1352.0020.0002][.0000.0000.0000][.0000.0000.0000] # MUSICAL SYMBOL FUSA WHITE
+1D1C0 ; [*1353.0020.0002][.0000.0000.0000][.0000.0000.0000] # MUSICAL SYMBOL FUSA BLACK
+1D1C1 ; [*1354.0020.0002] # MUSICAL SYMBOL LONGA PERFECTA REST
+1D1C2 ; [*1355.0020.0002] # MUSICAL SYMBOL LONGA IMPERFECTA REST
+1D1C3 ; [*1356.0020.0002] # MUSICAL SYMBOL BREVIS REST
+1D1C4 ; [*1357.0020.0002] # MUSICAL SYMBOL SEMIBREVIS REST
+1D1C5 ; [*1358.0020.0002] # MUSICAL SYMBOL MINIMA REST
+1D1C6 ; [*1359.0020.0002] # MUSICAL SYMBOL SEMIMINIMA REST
+1D1C7 ; [*135A.0020.0002] # MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA
+1D1C8 ; [*135B.0020.0002] # MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE IMPERFECTA
+1D1C9 ; [*135C.0020.0002] # MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA DIMINUTION-1
+1D1CA ; [*135D.0020.0002] # MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE PERFECTA
+1D1CB ; [*135E.0020.0002] # MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA
+1D1CC ; [*135F.0020.0002] # MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-1
+1D1CD ; [*1360.0020.0002] # MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-2
+1D1CE ; [*1361.0020.0002] # MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-3
+1D1CF ; [*1362.0020.0002] # MUSICAL SYMBOL CROIX
+1D1D0 ; [*1363.0020.0002] # MUSICAL SYMBOL GREGORIAN C CLEF
+1D1D1 ; [*1364.0020.0002] # MUSICAL SYMBOL GREGORIAN F CLEF
+1D1D2 ; [*1365.0020.0002] # MUSICAL SYMBOL SQUARE B
+1D1D3 ; [*1366.0020.0002] # MUSICAL SYMBOL VIRGA
+1D1D4 ; [*1367.0020.0002] # MUSICAL SYMBOL PODATUS
+1D1D5 ; [*1368.0020.0002] # MUSICAL SYMBOL CLIVIS
+1D1D6 ; [*1369.0020.0002] # MUSICAL SYMBOL SCANDICUS
+1D1D7 ; [*136A.0020.0002] # MUSICAL SYMBOL CLIMACUS
+1D1D8 ; [*136B.0020.0002] # MUSICAL SYMBOL TORCULUS
+1D1D9 ; [*136C.0020.0002] # MUSICAL SYMBOL PORRECTUS
+1D1DA ; [*136D.0020.0002] # MUSICAL SYMBOL PORRECTUS FLEXUS
+1D1DB ; [*136E.0020.0002] # MUSICAL SYMBOL SCANDICUS FLEXUS
+1D1DC ; [*136F.0020.0002] # MUSICAL SYMBOL TORCULUS RESUPINUS
+1D1DD ; [*1370.0020.0002] # MUSICAL SYMBOL PES SUBPUNCTIS
+1D1DE ; [*1371.0020.0002] # MUSICAL SYMBOL KIEVAN C CLEF
+1D1DF ; [*1372.0020.0002] # MUSICAL SYMBOL KIEVAN END OF PIECE
+1D1E0 ; [*1373.0020.0002] # MUSICAL SYMBOL KIEVAN FINAL NOTE
+1D1E1 ; [*1374.0020.0002] # MUSICAL SYMBOL KIEVAN RECITATIVE MARK
+1D1E2 ; [*1375.0020.0002] # MUSICAL SYMBOL KIEVAN WHOLE NOTE
+1D1E3 ; [*1376.0020.0002] # MUSICAL SYMBOL KIEVAN HALF NOTE
+1D1E4 ; [*1377.0020.0002] # MUSICAL SYMBOL KIEVAN QUARTER NOTE STEM DOWN
+1D1E5 ; [*1378.0020.0002] # MUSICAL SYMBOL KIEVAN QUARTER NOTE STEM UP
+1D1E6 ; [*1379.0020.0002] # MUSICAL SYMBOL KIEVAN EIGHTH NOTE STEM DOWN
+1D1E7 ; [*137A.0020.0002] # MUSICAL SYMBOL KIEVAN EIGHTH NOTE STEM UP
+1D1E8 ; [*137B.0020.0002] # MUSICAL SYMBOL KIEVAN FLAT SIGN
+1D1E9 ; [*137C.0020.0002] # MUSICAL SYMBOL SORI
+1D1EA ; [*137D.0020.0002] # MUSICAL SYMBOL KORON
+1D200 ; [*137E.0020.0002] # GREEK VOCAL NOTATION SYMBOL-1
+1D201 ; [*137F.0020.0002] # GREEK VOCAL NOTATION SYMBOL-2
+1D202 ; [*1380.0020.0002] # GREEK VOCAL NOTATION SYMBOL-3
+1D203 ; [*1381.0020.0002] # GREEK VOCAL NOTATION SYMBOL-4
+1D204 ; [*1382.0020.0002] # GREEK VOCAL NOTATION SYMBOL-5
+1D205 ; [*1383.0020.0002] # GREEK VOCAL NOTATION SYMBOL-6
+1D206 ; [*1384.0020.0002] # GREEK VOCAL NOTATION SYMBOL-7
+1D207 ; [*1385.0020.0002] # GREEK VOCAL NOTATION SYMBOL-8
+1D208 ; [*1386.0020.0002] # GREEK VOCAL NOTATION SYMBOL-9
+1D209 ; [*1387.0020.0002] # GREEK VOCAL NOTATION SYMBOL-10
+1D20A ; [*1388.0020.0002] # GREEK VOCAL NOTATION SYMBOL-11
+1D20B ; [*1389.0020.0002] # GREEK VOCAL NOTATION SYMBOL-12
+1D20C ; [*138A.0020.0002] # GREEK VOCAL NOTATION SYMBOL-13
+1D20D ; [*138B.0020.0002] # GREEK VOCAL NOTATION SYMBOL-14
+1D20E ; [*138C.0020.0002] # GREEK VOCAL NOTATION SYMBOL-15
+1D20F ; [*138D.0020.0002] # GREEK VOCAL NOTATION SYMBOL-16
+1D210 ; [*138E.0020.0002] # GREEK VOCAL NOTATION SYMBOL-17
+1D211 ; [*138F.0020.0002] # GREEK VOCAL NOTATION SYMBOL-18
+1D212 ; [*1390.0020.0002] # GREEK VOCAL NOTATION SYMBOL-19
+1D213 ; [*1391.0020.0002] # GREEK VOCAL NOTATION SYMBOL-20
+1D214 ; [*1392.0020.0002] # GREEK VOCAL NOTATION SYMBOL-21
+1D215 ; [*1393.0020.0002] # GREEK VOCAL NOTATION SYMBOL-22
+1D216 ; [*1394.0020.0002] # GREEK VOCAL NOTATION SYMBOL-23
+1D217 ; [*1395.0020.0002] # GREEK VOCAL NOTATION SYMBOL-24
+1D218 ; [*1396.0020.0002] # GREEK VOCAL NOTATION SYMBOL-50
+1D219 ; [*1397.0020.0002] # GREEK VOCAL NOTATION SYMBOL-51
+1D21A ; [*1398.0020.0002] # GREEK VOCAL NOTATION SYMBOL-52
+1D21B ; [*1399.0020.0002] # GREEK VOCAL NOTATION SYMBOL-53
+1D21C ; [*139A.0020.0002] # GREEK VOCAL NOTATION SYMBOL-54
+1D21D ; [*139B.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-1
+1D21E ; [*139C.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-2
+1D21F ; [*139D.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-4
+1D220 ; [*139E.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-5
+1D221 ; [*139F.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-7
+1D222 ; [*13A0.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-8
+1D223 ; [*13A1.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-11
+1D224 ; [*13A2.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-12
+1D225 ; [*13A3.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-13
+1D226 ; [*13A4.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-14
+1D227 ; [*13A5.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-17
+1D228 ; [*13A6.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-18
+1D229 ; [*13A7.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-19
+1D22A ; [*13A8.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-23
+1D22B ; [*13A9.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-24
+1D22C ; [*13AA.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-25
+1D22D ; [*13AB.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-26
+1D22E ; [*13AC.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-27
+1D22F ; [*13AD.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-29
+1D230 ; [*13AE.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-30
+1D231 ; [*13AF.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-32
+1D232 ; [*13B0.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-36
+1D233 ; [*13B1.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-37
+1D234 ; [*13B2.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-38
+1D235 ; [*13B3.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-39
+1D236 ; [*13B4.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-40
+1D237 ; [*13B5.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-42
+1D238 ; [*13B6.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-43
+1D239 ; [*13B7.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-45
+1D23A ; [*13B8.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-47
+1D23B ; [*13B9.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-48
+1D23C ; [*13BA.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-49
+1D23D ; [*13BB.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-50
+1D23E ; [*13BC.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-51
+1D23F ; [*13BD.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-52
+1D240 ; [*13BE.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-53
+1D241 ; [*13BF.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-54
+1D242 ; [.0000.0000.0000] # COMBINING GREEK MUSICAL TRISEME
+1D243 ; [.0000.0000.0000] # COMBINING GREEK MUSICAL TETRASEME
+1D244 ; [.0000.0000.0000] # COMBINING GREEK MUSICAL PENTASEME
+1D245 ; [*13C0.0020.0002] # GREEK MUSICAL LEIMMA
+1D2EA ; [*1F64.0020.0002] # MAYAN NUMERAL TEN
+1D2EB ; [*1F65.0020.0002] # MAYAN NUMERAL ELEVEN
+1D2EC ; [*1F66.0020.0002] # MAYAN NUMERAL TWELVE
+1D2ED ; [*1F67.0020.0002] # MAYAN NUMERAL THIRTEEN
+1D2EE ; [*1F68.0020.0002] # MAYAN NUMERAL FOURTEEN
+1D2EF ; [*1F69.0020.0002] # MAYAN NUMERAL FIFTEEN
+1D2F0 ; [*1F6A.0020.0002] # MAYAN NUMERAL SIXTEEN
+1D2F1 ; [*1F6B.0020.0002] # MAYAN NUMERAL SEVENTEEN
+1D2F2 ; [*1F6C.0020.0002] # MAYAN NUMERAL EIGHTEEN
+1D2F3 ; [*1F6D.0020.0002] # MAYAN NUMERAL NINETEEN
+1D300 ; [*106D.0020.0002] # MONOGRAM FOR EARTH
+1D301 ; [*106E.0020.0002] # DIGRAM FOR HEAVENLY EARTH
+1D302 ; [*106F.0020.0002] # DIGRAM FOR HUMAN EARTH
+1D303 ; [*1070.0020.0002] # DIGRAM FOR EARTHLY HEAVEN
+1D304 ; [*1071.0020.0002] # DIGRAM FOR EARTHLY HUMAN
+1D305 ; [*1072.0020.0002] # DIGRAM FOR EARTH
+1D306 ; [*1073.0020.0002] # TETRAGRAM FOR CENTRE
+1D307 ; [*1074.0020.0002] # TETRAGRAM FOR FULL CIRCLE
+1D308 ; [*1075.0020.0002] # TETRAGRAM FOR MIRED
+1D309 ; [*1076.0020.0002] # TETRAGRAM FOR BARRIER
+1D30A ; [*1077.0020.0002] # TETRAGRAM FOR KEEPING SMALL
+1D30B ; [*1078.0020.0002] # TETRAGRAM FOR CONTRARIETY
+1D30C ; [*1079.0020.0002] # TETRAGRAM FOR ASCENT
+1D30D ; [*107A.0020.0002] # TETRAGRAM FOR OPPOSITION
+1D30E ; [*107B.0020.0002] # TETRAGRAM FOR BRANCHING OUT
+1D30F ; [*107C.0020.0002] # TETRAGRAM FOR DEFECTIVENESS OR DISTORTION
+1D310 ; [*107D.0020.0002] # TETRAGRAM FOR DIVERGENCE
+1D311 ; [*107E.0020.0002] # TETRAGRAM FOR YOUTHFULNESS
+1D312 ; [*107F.0020.0002] # TETRAGRAM FOR INCREASE
+1D313 ; [*1080.0020.0002] # TETRAGRAM FOR PENETRATION
+1D314 ; [*1081.0020.0002] # TETRAGRAM FOR REACH
+1D315 ; [*1082.0020.0002] # TETRAGRAM FOR CONTACT
+1D316 ; [*1083.0020.0002] # TETRAGRAM FOR HOLDING BACK
+1D317 ; [*1084.0020.0002] # TETRAGRAM FOR WAITING
+1D318 ; [*1085.0020.0002] # TETRAGRAM FOR FOLLOWING
+1D319 ; [*1086.0020.0002] # TETRAGRAM FOR ADVANCE
+1D31A ; [*1087.0020.0002] # TETRAGRAM FOR RELEASE
+1D31B ; [*1088.0020.0002] # TETRAGRAM FOR RESISTANCE
+1D31C ; [*1089.0020.0002] # TETRAGRAM FOR EASE
+1D31D ; [*108A.0020.0002] # TETRAGRAM FOR JOY
+1D31E ; [*108B.0020.0002] # TETRAGRAM FOR CONTENTION
+1D31F ; [*108C.0020.0002] # TETRAGRAM FOR ENDEAVOUR
+1D320 ; [*108D.0020.0002] # TETRAGRAM FOR DUTIES
+1D321 ; [*108E.0020.0002] # TETRAGRAM FOR CHANGE
+1D322 ; [*108F.0020.0002] # TETRAGRAM FOR DECISIVENESS
+1D323 ; [*1090.0020.0002] # TETRAGRAM FOR BOLD RESOLUTION
+1D324 ; [*1091.0020.0002] # TETRAGRAM FOR PACKING
+1D325 ; [*1092.0020.0002] # TETRAGRAM FOR LEGION
+1D326 ; [*1093.0020.0002] # TETRAGRAM FOR CLOSENESS
+1D327 ; [*1094.0020.0002] # TETRAGRAM FOR KINSHIP
+1D328 ; [*1095.0020.0002] # TETRAGRAM FOR GATHERING
+1D329 ; [*1096.0020.0002] # TETRAGRAM FOR STRENGTH
+1D32A ; [*1097.0020.0002] # TETRAGRAM FOR PURITY
+1D32B ; [*1098.0020.0002] # TETRAGRAM FOR FULLNESS
+1D32C ; [*1099.0020.0002] # TETRAGRAM FOR RESIDENCE
+1D32D ; [*109A.0020.0002] # TETRAGRAM FOR LAW OR MODEL
+1D32E ; [*109B.0020.0002] # TETRAGRAM FOR RESPONSE
+1D32F ; [*109C.0020.0002] # TETRAGRAM FOR GOING TO MEET
+1D330 ; [*109D.0020.0002] # TETRAGRAM FOR ENCOUNTERS
+1D331 ; [*109E.0020.0002] # TETRAGRAM FOR STOVE
+1D332 ; [*109F.0020.0002] # TETRAGRAM FOR GREATNESS
+1D333 ; [*10A0.0020.0002] # TETRAGRAM FOR ENLARGEMENT
+1D334 ; [*10A1.0020.0002] # TETRAGRAM FOR PATTERN
+1D335 ; [*10A2.0020.0002] # TETRAGRAM FOR RITUAL
+1D336 ; [*10A3.0020.0002] # TETRAGRAM FOR FLIGHT
+1D337 ; [*10A4.0020.0002] # TETRAGRAM FOR VASTNESS OR WASTING
+1D338 ; [*10A5.0020.0002] # TETRAGRAM FOR CONSTANCY
+1D339 ; [*10A6.0020.0002] # TETRAGRAM FOR MEASURE
+1D33A ; [*10A7.0020.0002] # TETRAGRAM FOR ETERNITY
+1D33B ; [*10A8.0020.0002] # TETRAGRAM FOR UNITY
+1D33C ; [*10A9.0020.0002] # TETRAGRAM FOR DIMINISHMENT
+1D33D ; [*10AA.0020.0002] # TETRAGRAM FOR CLOSED MOUTH
+1D33E ; [*10AB.0020.0002] # TETRAGRAM FOR GUARDEDNESS
+1D33F ; [*10AC.0020.0002] # TETRAGRAM FOR GATHERING IN
+1D340 ; [*10AD.0020.0002] # TETRAGRAM FOR MASSING
+1D341 ; [*10AE.0020.0002] # TETRAGRAM FOR ACCUMULATION
+1D342 ; [*10AF.0020.0002] # TETRAGRAM FOR EMBELLISHMENT
+1D343 ; [*10B0.0020.0002] # TETRAGRAM FOR DOUBT
+1D344 ; [*10B1.0020.0002] # TETRAGRAM FOR WATCH
+1D345 ; [*10B2.0020.0002] # TETRAGRAM FOR SINKING
+1D346 ; [*10B3.0020.0002] # TETRAGRAM FOR INNER
+1D347 ; [*10B4.0020.0002] # TETRAGRAM FOR DEPARTURE
+1D348 ; [*10B5.0020.0002] # TETRAGRAM FOR DARKENING
+1D349 ; [*10B6.0020.0002] # TETRAGRAM FOR DIMMING
+1D34A ; [*10B7.0020.0002] # TETRAGRAM FOR EXHAUSTION
+1D34B ; [*10B8.0020.0002] # TETRAGRAM FOR SEVERANCE
+1D34C ; [*10B9.0020.0002] # TETRAGRAM FOR STOPPAGE
+1D34D ; [*10BA.0020.0002] # TETRAGRAM FOR HARDNESS
+1D34E ; [*10BB.0020.0002] # TETRAGRAM FOR COMPLETION
+1D34F ; [*10BC.0020.0002] # TETRAGRAM FOR CLOSURE
+1D350 ; [*10BD.0020.0002] # TETRAGRAM FOR FAILURE
+1D351 ; [*10BE.0020.0002] # TETRAGRAM FOR AGGRAVATION
+1D352 ; [*10BF.0020.0002] # TETRAGRAM FOR COMPLIANCE
+1D353 ; [*10C0.0020.0002] # TETRAGRAM FOR ON THE VERGE
+1D354 ; [*10C1.0020.0002] # TETRAGRAM FOR DIFFICULTIES
+1D355 ; [*10C2.0020.0002] # TETRAGRAM FOR LABOURING
+1D356 ; [*10C3.0020.0002] # TETRAGRAM FOR FOSTERING
+1D369 ; [*200F.0020.0002] # COUNTING ROD TENS DIGIT ONE
+1D36A ; [*2010.0020.0002] # COUNTING ROD TENS DIGIT TWO
+1D36B ; [*2011.0020.0002] # COUNTING ROD TENS DIGIT THREE
+1D36C ; [*2012.0020.0002] # COUNTING ROD TENS DIGIT FOUR
+1D36D ; [*2013.0020.0002] # COUNTING ROD TENS DIGIT FIVE
+1D36E ; [*2014.0020.0002] # COUNTING ROD TENS DIGIT SIX
+1D36F ; [*2015.0020.0002] # COUNTING ROD TENS DIGIT SEVEN
+1D370 ; [*2016.0020.0002] # COUNTING ROD TENS DIGIT EIGHT
+1D371 ; [*2017.0020.0002] # COUNTING ROD TENS DIGIT NINE
+1D6C1 ; [*0693.0020.0005] # MATHEMATICAL BOLD NABLA
+1D6DB ; [*068F.0020.0005] # MATHEMATICAL BOLD PARTIAL DIFFERENTIAL
+1D6FB ; [*0693.0020.0005] # MATHEMATICAL ITALIC NABLA
+1D715 ; [*068F.0020.0005] # MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL
+1D735 ; [*0693.0020.0005] # MATHEMATICAL BOLD ITALIC NABLA
+1D74F ; [*068F.0020.0005] # MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL
+1D76F ; [*0693.0020.0005] # MATHEMATICAL SANS-SERIF BOLD NABLA
+1D789 ; [*068F.0020.0005] # MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL
+1D7A9 ; [*0693.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA
+1D7C3 ; [*068F.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL
+1D800 ; [*1BD1.0020.0002] # SIGNWRITING HAND-FIST INDEX
+1D801 ; [*1BD2.0020.0002] # SIGNWRITING HAND-CIRCLE INDEX
+1D802 ; [*1BD3.0020.0002] # SIGNWRITING HAND-CUP INDEX
+1D803 ; [*1BD4.0020.0002] # SIGNWRITING HAND-OVAL INDEX
+1D804 ; [*1BD5.0020.0002] # SIGNWRITING HAND-HINGE INDEX
+1D805 ; [*1BD6.0020.0002] # SIGNWRITING HAND-ANGLE INDEX
+1D806 ; [*1BD7.0020.0002] # SIGNWRITING HAND-FIST INDEX BENT
+1D807 ; [*1BD8.0020.0002] # SIGNWRITING HAND-CIRCLE INDEX BENT
+1D808 ; [*1BD9.0020.0002] # SIGNWRITING HAND-FIST THUMB UNDER INDEX BENT
+1D809 ; [*1BDA.0020.0002] # SIGNWRITING HAND-FIST INDEX RAISED KNUCKLE
+1D80A ; [*1BDB.0020.0002] # SIGNWRITING HAND-FIST INDEX CUPPED
+1D80B ; [*1BDC.0020.0002] # SIGNWRITING HAND-FIST INDEX HINGED
+1D80C ; [*1BDD.0020.0002] # SIGNWRITING HAND-FIST INDEX HINGED LOW
+1D80D ; [*1BDE.0020.0002] # SIGNWRITING HAND-CIRCLE INDEX HINGE
+1D80E ; [*1BDF.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE
+1D80F ; [*1BE0.0020.0002] # SIGNWRITING HAND-CIRCLE INDEX MIDDLE
+1D810 ; [*1BE1.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE BENT
+1D811 ; [*1BE2.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE RAISED KNUCKLES
+1D812 ; [*1BE3.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE HINGED
+1D813 ; [*1BE4.0020.0002] # SIGNWRITING HAND-FIST INDEX UP MIDDLE HINGED
+1D814 ; [*1BE5.0020.0002] # SIGNWRITING HAND-FIST INDEX HINGED MIDDLE UP
+1D815 ; [*1BE6.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED
+1D816 ; [*1BE7.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED INDEX BENT
+1D817 ; [*1BE8.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED MIDDLE BENT
+1D818 ; [*1BE9.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED CUPPED
+1D819 ; [*1BEA.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED HINGED
+1D81A ; [*1BEB.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CROSSED
+1D81B ; [*1BEC.0020.0002] # SIGNWRITING HAND-CIRCLE INDEX MIDDLE CROSSED
+1D81C ; [*1BED.0020.0002] # SIGNWRITING HAND-FIST MIDDLE BENT OVER INDEX
+1D81D ; [*1BEE.0020.0002] # SIGNWRITING HAND-FIST INDEX BENT OVER MIDDLE
+1D81E ; [*1BEF.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE THUMB
+1D81F ; [*1BF0.0020.0002] # SIGNWRITING HAND-CIRCLE INDEX MIDDLE THUMB
+1D820 ; [*1BF1.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE STRAIGHT THUMB BENT
+1D821 ; [*1BF2.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE BENT THUMB STRAIGHT
+1D822 ; [*1BF3.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE THUMB BENT
+1D823 ; [*1BF4.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE HINGED SPREAD THUMB SIDE
+1D824 ; [*1BF5.0020.0002] # SIGNWRITING HAND-FIST INDEX UP MIDDLE HINGED THUMB SIDE
+1D825 ; [*1BF6.0020.0002] # SIGNWRITING HAND-FIST INDEX UP MIDDLE HINGED THUMB CONJOINED
+1D826 ; [*1BF7.0020.0002] # SIGNWRITING HAND-FIST INDEX HINGED MIDDLE UP THUMB SIDE
+1D827 ; [*1BF8.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE UP SPREAD THUMB FORWARD
+1D828 ; [*1BF9.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE THUMB CUPPED
+1D829 ; [*1BFA.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE THUMB CIRCLED
+1D82A ; [*1BFB.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE THUMB HOOKED
+1D82B ; [*1BFC.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE THUMB HINGED
+1D82C ; [*1BFD.0020.0002] # SIGNWRITING HAND-FIST THUMB BETWEEN INDEX MIDDLE STRAIGHT
+1D82D ; [*1BFE.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB SIDE
+1D82E ; [*1BFF.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB SIDE CONJOINED
+1D82F ; [*1C00.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB SIDE BENT
+1D830 ; [*1C01.0020.0002] # SIGNWRITING HAND-FIST MIDDLE THUMB HOOKED INDEX UP
+1D831 ; [*1C02.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB HOOKED MIDDLE UP
+1D832 ; [*1C03.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED HINGED THUMB SIDE
+1D833 ; [*1C04.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CROSSED THUMB SIDE
+1D834 ; [*1C05.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB FORWARD
+1D835 ; [*1C06.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED CUPPED THUMB FORWARD
+1D836 ; [*1C07.0020.0002] # SIGNWRITING HAND-FIST MIDDLE THUMB CUPPED INDEX UP
+1D837 ; [*1C08.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB CUPPED MIDDLE UP
+1D838 ; [*1C09.0020.0002] # SIGNWRITING HAND-FIST MIDDLE THUMB CIRCLED INDEX UP
+1D839 ; [*1C0A.0020.0002] # SIGNWRITING HAND-FIST MIDDLE THUMB CIRCLED INDEX HINGED
+1D83A ; [*1C0B.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB ANGLED OUT MIDDLE UP
+1D83B ; [*1C0C.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB ANGLED IN MIDDLE UP
+1D83C ; [*1C0D.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB CIRCLED MIDDLE UP
+1D83D ; [*1C0E.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE THUMB CONJOINED HINGED
+1D83E ; [*1C0F.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE THUMB ANGLED OUT
+1D83F ; [*1C10.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE THUMB ANGLED
+1D840 ; [*1C11.0020.0002] # SIGNWRITING HAND-FIST MIDDLE THUMB ANGLED OUT INDEX UP
+1D841 ; [*1C12.0020.0002] # SIGNWRITING HAND-FIST MIDDLE THUMB ANGLED OUT INDEX CROSSED
+1D842 ; [*1C13.0020.0002] # SIGNWRITING HAND-FIST MIDDLE THUMB ANGLED INDEX UP
+1D843 ; [*1C14.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB HOOKED MIDDLE HINGED
+1D844 ; [*1C15.0020.0002] # SIGNWRITING HAND-FLAT FOUR FINGERS
+1D845 ; [*1C16.0020.0002] # SIGNWRITING HAND-FLAT FOUR FINGERS BENT
+1D846 ; [*1C17.0020.0002] # SIGNWRITING HAND-FLAT FOUR FINGERS HINGED
+1D847 ; [*1C18.0020.0002] # SIGNWRITING HAND-FLAT FOUR FINGERS CONJOINED
+1D848 ; [*1C19.0020.0002] # SIGNWRITING HAND-FLAT FOUR FINGERS CONJOINED SPLIT
+1D849 ; [*1C1A.0020.0002] # SIGNWRITING HAND-CLAW FOUR FINGERS CONJOINED
+1D84A ; [*1C1B.0020.0002] # SIGNWRITING HAND-FIST FOUR FINGERS CONJOINED BENT
+1D84B ; [*1C1C.0020.0002] # SIGNWRITING HAND-HINGE FOUR FINGERS CONJOINED
+1D84C ; [*1C1D.0020.0002] # SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD
+1D84D ; [*1C1E.0020.0002] # SIGNWRITING HAND-FLAT HEEL FIVE FINGERS SPREAD
+1D84E ; [*1C1F.0020.0002] # SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD FOUR BENT
+1D84F ; [*1C20.0020.0002] # SIGNWRITING HAND-FLAT HEEL FIVE FINGERS SPREAD FOUR BENT
+1D850 ; [*1C21.0020.0002] # SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD BENT
+1D851 ; [*1C22.0020.0002] # SIGNWRITING HAND-FLAT HEEL FIVE FINGERS SPREAD BENT
+1D852 ; [*1C23.0020.0002] # SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD THUMB FORWARD
+1D853 ; [*1C24.0020.0002] # SIGNWRITING HAND-CUP FIVE FINGERS SPREAD
+1D854 ; [*1C25.0020.0002] # SIGNWRITING HAND-CUP FIVE FINGERS SPREAD OPEN
+1D855 ; [*1C26.0020.0002] # SIGNWRITING HAND-HINGE FIVE FINGERS SPREAD OPEN
+1D856 ; [*1C27.0020.0002] # SIGNWRITING HAND-OVAL FIVE FINGERS SPREAD
+1D857 ; [*1C28.0020.0002] # SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD HINGED
+1D858 ; [*1C29.0020.0002] # SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD HINGED THUMB SIDE
+1D859 ; [*1C2A.0020.0002] # SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD HINGED NO THUMB
+1D85A ; [*1C2B.0020.0002] # SIGNWRITING HAND-FLAT
+1D85B ; [*1C2C.0020.0002] # SIGNWRITING HAND-FLAT BETWEEN PALM FACINGS
+1D85C ; [*1C2D.0020.0002] # SIGNWRITING HAND-FLAT HEEL
+1D85D ; [*1C2E.0020.0002] # SIGNWRITING HAND-FLAT THUMB SIDE
+1D85E ; [*1C2F.0020.0002] # SIGNWRITING HAND-FLAT HEEL THUMB SIDE
+1D85F ; [*1C30.0020.0002] # SIGNWRITING HAND-FLAT THUMB BENT
+1D860 ; [*1C31.0020.0002] # SIGNWRITING HAND-FLAT THUMB FORWARD
+1D861 ; [*1C32.0020.0002] # SIGNWRITING HAND-FLAT SPLIT INDEX THUMB SIDE
+1D862 ; [*1C33.0020.0002] # SIGNWRITING HAND-FLAT SPLIT CENTRE
+1D863 ; [*1C34.0020.0002] # SIGNWRITING HAND-FLAT SPLIT CENTRE THUMB SIDE
+1D864 ; [*1C35.0020.0002] # SIGNWRITING HAND-FLAT SPLIT CENTRE THUMB SIDE BENT
+1D865 ; [*1C36.0020.0002] # SIGNWRITING HAND-FLAT SPLIT LITTLE
+1D866 ; [*1C37.0020.0002] # SIGNWRITING HAND-CLAW
+1D867 ; [*1C38.0020.0002] # SIGNWRITING HAND-CLAW THUMB SIDE
+1D868 ; [*1C39.0020.0002] # SIGNWRITING HAND-CLAW NO THUMB
+1D869 ; [*1C3A.0020.0002] # SIGNWRITING HAND-CLAW THUMB FORWARD
+1D86A ; [*1C3B.0020.0002] # SIGNWRITING HAND-HOOK CURLICUE
+1D86B ; [*1C3C.0020.0002] # SIGNWRITING HAND-HOOK
+1D86C ; [*1C3D.0020.0002] # SIGNWRITING HAND-CUP OPEN
+1D86D ; [*1C3E.0020.0002] # SIGNWRITING HAND-CUP
+1D86E ; [*1C3F.0020.0002] # SIGNWRITING HAND-CUP OPEN THUMB SIDE
+1D86F ; [*1C40.0020.0002] # SIGNWRITING HAND-CUP THUMB SIDE
+1D870 ; [*1C41.0020.0002] # SIGNWRITING HAND-CUP OPEN NO THUMB
+1D871 ; [*1C42.0020.0002] # SIGNWRITING HAND-CUP NO THUMB
+1D872 ; [*1C43.0020.0002] # SIGNWRITING HAND-CUP OPEN THUMB FORWARD
+1D873 ; [*1C44.0020.0002] # SIGNWRITING HAND-CUP THUMB FORWARD
+1D874 ; [*1C45.0020.0002] # SIGNWRITING HAND-CURLICUE OPEN
+1D875 ; [*1C46.0020.0002] # SIGNWRITING HAND-CURLICUE
+1D876 ; [*1C47.0020.0002] # SIGNWRITING HAND-CIRCLE
+1D877 ; [*1C48.0020.0002] # SIGNWRITING HAND-OVAL
+1D878 ; [*1C49.0020.0002] # SIGNWRITING HAND-OVAL THUMB SIDE
+1D879 ; [*1C4A.0020.0002] # SIGNWRITING HAND-OVAL NO THUMB
+1D87A ; [*1C4B.0020.0002] # SIGNWRITING HAND-OVAL THUMB FORWARD
+1D87B ; [*1C4C.0020.0002] # SIGNWRITING HAND-HINGE OPEN
+1D87C ; [*1C4D.0020.0002] # SIGNWRITING HAND-HINGE OPEN THUMB FORWARD
+1D87D ; [*1C4E.0020.0002] # SIGNWRITING HAND-HINGE
+1D87E ; [*1C4F.0020.0002] # SIGNWRITING HAND-HINGE SMALL
+1D87F ; [*1C50.0020.0002] # SIGNWRITING HAND-HINGE OPEN THUMB SIDE
+1D880 ; [*1C51.0020.0002] # SIGNWRITING HAND-HINGE THUMB SIDE
+1D881 ; [*1C52.0020.0002] # SIGNWRITING HAND-HINGE OPEN NO THUMB
+1D882 ; [*1C53.0020.0002] # SIGNWRITING HAND-HINGE NO THUMB
+1D883 ; [*1C54.0020.0002] # SIGNWRITING HAND-HINGE THUMB SIDE TOUCHING INDEX
+1D884 ; [*1C55.0020.0002] # SIGNWRITING HAND-HINGE THUMB BETWEEN MIDDLE RING
+1D885 ; [*1C56.0020.0002] # SIGNWRITING HAND-ANGLE
+1D886 ; [*1C57.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE RING
+1D887 ; [*1C58.0020.0002] # SIGNWRITING HAND-CIRCLE INDEX MIDDLE RING
+1D888 ; [*1C59.0020.0002] # SIGNWRITING HAND-HINGE INDEX MIDDLE RING
+1D889 ; [*1C5A.0020.0002] # SIGNWRITING HAND-ANGLE INDEX MIDDLE RING
+1D88A ; [*1C5B.0020.0002] # SIGNWRITING HAND-HINGE LITTLE
+1D88B ; [*1C5C.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE RING BENT
+1D88C ; [*1C5D.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE RING CONJOINED
+1D88D ; [*1C5E.0020.0002] # SIGNWRITING HAND-HINGE INDEX MIDDLE RING CONJOINED
+1D88E ; [*1C5F.0020.0002] # SIGNWRITING HAND-FIST LITTLE DOWN
+1D88F ; [*1C60.0020.0002] # SIGNWRITING HAND-FIST LITTLE DOWN RIPPLE STRAIGHT
+1D890 ; [*1C61.0020.0002] # SIGNWRITING HAND-FIST LITTLE DOWN RIPPLE CURVED
+1D891 ; [*1C62.0020.0002] # SIGNWRITING HAND-FIST LITTLE DOWN OTHERS CIRCLED
+1D892 ; [*1C63.0020.0002] # SIGNWRITING HAND-FIST LITTLE UP
+1D893 ; [*1C64.0020.0002] # SIGNWRITING HAND-FIST THUMB UNDER LITTLE UP
+1D894 ; [*1C65.0020.0002] # SIGNWRITING HAND-CIRCLE LITTLE UP
+1D895 ; [*1C66.0020.0002] # SIGNWRITING HAND-OVAL LITTLE UP
+1D896 ; [*1C67.0020.0002] # SIGNWRITING HAND-ANGLE LITTLE UP
+1D897 ; [*1C68.0020.0002] # SIGNWRITING HAND-FIST LITTLE RAISED KNUCKLE
+1D898 ; [*1C69.0020.0002] # SIGNWRITING HAND-FIST LITTLE BENT
+1D899 ; [*1C6A.0020.0002] # SIGNWRITING HAND-FIST LITTLE TOUCHES THUMB
+1D89A ; [*1C6B.0020.0002] # SIGNWRITING HAND-FIST LITTLE THUMB
+1D89B ; [*1C6C.0020.0002] # SIGNWRITING HAND-HINGE LITTLE THUMB
+1D89C ; [*1C6D.0020.0002] # SIGNWRITING HAND-FIST LITTLE INDEX THUMB
+1D89D ; [*1C6E.0020.0002] # SIGNWRITING HAND-HINGE LITTLE INDEX THUMB
+1D89E ; [*1C6F.0020.0002] # SIGNWRITING HAND-ANGLE LITTLE INDEX THUMB INDEX THUMB OUT
+1D89F ; [*1C70.0020.0002] # SIGNWRITING HAND-ANGLE LITTLE INDEX THUMB INDEX THUMB
+1D8A0 ; [*1C71.0020.0002] # SIGNWRITING HAND-FIST LITTLE INDEX
+1D8A1 ; [*1C72.0020.0002] # SIGNWRITING HAND-CIRCLE LITTLE INDEX
+1D8A2 ; [*1C73.0020.0002] # SIGNWRITING HAND-HINGE LITTLE INDEX
+1D8A3 ; [*1C74.0020.0002] # SIGNWRITING HAND-ANGLE LITTLE INDEX
+1D8A4 ; [*1C75.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE LITTLE
+1D8A5 ; [*1C76.0020.0002] # SIGNWRITING HAND-CIRCLE INDEX MIDDLE LITTLE
+1D8A6 ; [*1C77.0020.0002] # SIGNWRITING HAND-HINGE INDEX MIDDLE LITTLE
+1D8A7 ; [*1C78.0020.0002] # SIGNWRITING HAND-HINGE RING
+1D8A8 ; [*1C79.0020.0002] # SIGNWRITING HAND-ANGLE INDEX MIDDLE LITTLE
+1D8A9 ; [*1C7A.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CROSS LITTLE
+1D8AA ; [*1C7B.0020.0002] # SIGNWRITING HAND-CIRCLE INDEX MIDDLE CROSS LITTLE
+1D8AB ; [*1C7C.0020.0002] # SIGNWRITING HAND-FIST RING DOWN
+1D8AC ; [*1C7D.0020.0002] # SIGNWRITING HAND-HINGE RING DOWN INDEX THUMB HOOK MIDDLE
+1D8AD ; [*1C7E.0020.0002] # SIGNWRITING HAND-ANGLE RING DOWN MIDDLE THUMB INDEX CROSS
+1D8AE ; [*1C7F.0020.0002] # SIGNWRITING HAND-FIST RING UP
+1D8AF ; [*1C80.0020.0002] # SIGNWRITING HAND-FIST RING RAISED KNUCKLE
+1D8B0 ; [*1C81.0020.0002] # SIGNWRITING HAND-FIST RING LITTLE
+1D8B1 ; [*1C82.0020.0002] # SIGNWRITING HAND-CIRCLE RING LITTLE
+1D8B2 ; [*1C83.0020.0002] # SIGNWRITING HAND-OVAL RING LITTLE
+1D8B3 ; [*1C84.0020.0002] # SIGNWRITING HAND-ANGLE RING LITTLE
+1D8B4 ; [*1C85.0020.0002] # SIGNWRITING HAND-FIST RING MIDDLE
+1D8B5 ; [*1C86.0020.0002] # SIGNWRITING HAND-FIST RING MIDDLE CONJOINED
+1D8B6 ; [*1C87.0020.0002] # SIGNWRITING HAND-FIST RING MIDDLE RAISED KNUCKLES
+1D8B7 ; [*1C88.0020.0002] # SIGNWRITING HAND-FIST RING INDEX
+1D8B8 ; [*1C89.0020.0002] # SIGNWRITING HAND-FIST RING THUMB
+1D8B9 ; [*1C8A.0020.0002] # SIGNWRITING HAND-HOOK RING THUMB
+1D8BA ; [*1C8B.0020.0002] # SIGNWRITING HAND-FIST INDEX RING LITTLE
+1D8BB ; [*1C8C.0020.0002] # SIGNWRITING HAND-CIRCLE INDEX RING LITTLE
+1D8BC ; [*1C8D.0020.0002] # SIGNWRITING HAND-CURLICUE INDEX RING LITTLE ON
+1D8BD ; [*1C8E.0020.0002] # SIGNWRITING HAND-HOOK INDEX RING LITTLE OUT
+1D8BE ; [*1C8F.0020.0002] # SIGNWRITING HAND-HOOK INDEX RING LITTLE IN
+1D8BF ; [*1C90.0020.0002] # SIGNWRITING HAND-HOOK INDEX RING LITTLE UNDER
+1D8C0 ; [*1C91.0020.0002] # SIGNWRITING HAND-CUP INDEX RING LITTLE
+1D8C1 ; [*1C92.0020.0002] # SIGNWRITING HAND-HINGE INDEX RING LITTLE
+1D8C2 ; [*1C93.0020.0002] # SIGNWRITING HAND-ANGLE INDEX RING LITTLE OUT
+1D8C3 ; [*1C94.0020.0002] # SIGNWRITING HAND-ANGLE INDEX RING LITTLE
+1D8C4 ; [*1C95.0020.0002] # SIGNWRITING HAND-FIST MIDDLE DOWN
+1D8C5 ; [*1C96.0020.0002] # SIGNWRITING HAND-HINGE MIDDLE
+1D8C6 ; [*1C97.0020.0002] # SIGNWRITING HAND-FIST MIDDLE UP
+1D8C7 ; [*1C98.0020.0002] # SIGNWRITING HAND-CIRCLE MIDDLE UP
+1D8C8 ; [*1C99.0020.0002] # SIGNWRITING HAND-FIST MIDDLE RAISED KNUCKLE
+1D8C9 ; [*1C9A.0020.0002] # SIGNWRITING HAND-FIST MIDDLE UP THUMB SIDE
+1D8CA ; [*1C9B.0020.0002] # SIGNWRITING HAND-HOOK MIDDLE THUMB
+1D8CB ; [*1C9C.0020.0002] # SIGNWRITING HAND-FIST MIDDLE THUMB LITTLE
+1D8CC ; [*1C9D.0020.0002] # SIGNWRITING HAND-FIST MIDDLE LITTLE
+1D8CD ; [*1C9E.0020.0002] # SIGNWRITING HAND-FIST MIDDLE RING LITTLE
+1D8CE ; [*1C9F.0020.0002] # SIGNWRITING HAND-CIRCLE MIDDLE RING LITTLE
+1D8CF ; [*1CA0.0020.0002] # SIGNWRITING HAND-CURLICUE MIDDLE RING LITTLE ON
+1D8D0 ; [*1CA1.0020.0002] # SIGNWRITING HAND-CUP MIDDLE RING LITTLE
+1D8D1 ; [*1CA2.0020.0002] # SIGNWRITING HAND-HINGE MIDDLE RING LITTLE
+1D8D2 ; [*1CA3.0020.0002] # SIGNWRITING HAND-ANGLE MIDDLE RING LITTLE OUT
+1D8D3 ; [*1CA4.0020.0002] # SIGNWRITING HAND-ANGLE MIDDLE RING LITTLE IN
+1D8D4 ; [*1CA5.0020.0002] # SIGNWRITING HAND-ANGLE MIDDLE RING LITTLE
+1D8D5 ; [*1CA6.0020.0002] # SIGNWRITING HAND-CIRCLE MIDDLE RING LITTLE BENT
+1D8D6 ; [*1CA7.0020.0002] # SIGNWRITING HAND-CLAW MIDDLE RING LITTLE CONJOINED
+1D8D7 ; [*1CA8.0020.0002] # SIGNWRITING HAND-CLAW MIDDLE RING LITTLE CONJOINED SIDE
+1D8D8 ; [*1CA9.0020.0002] # SIGNWRITING HAND-HOOK MIDDLE RING LITTLE CONJOINED OUT
+1D8D9 ; [*1CAA.0020.0002] # SIGNWRITING HAND-HOOK MIDDLE RING LITTLE CONJOINED IN
+1D8DA ; [*1CAB.0020.0002] # SIGNWRITING HAND-HOOK MIDDLE RING LITTLE CONJOINED
+1D8DB ; [*1CAC.0020.0002] # SIGNWRITING HAND-HINGE INDEX HINGED
+1D8DC ; [*1CAD.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB SIDE
+1D8DD ; [*1CAE.0020.0002] # SIGNWRITING HAND-HINGE INDEX THUMB SIDE
+1D8DE ; [*1CAF.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB SIDE THUMB DIAGONAL
+1D8DF ; [*1CB0.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB SIDE THUMB CONJOINED
+1D8E0 ; [*1CB1.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB SIDE THUMB BENT
+1D8E1 ; [*1CB2.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB SIDE INDEX BENT
+1D8E2 ; [*1CB3.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB SIDE BOTH BENT
+1D8E3 ; [*1CB4.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB SIDE INDEX HINGE
+1D8E4 ; [*1CB5.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB FORWARD INDEX STRAIGHT
+1D8E5 ; [*1CB6.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB FORWARD INDEX BENT
+1D8E6 ; [*1CB7.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB HOOK
+1D8E7 ; [*1CB8.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB CURLICUE
+1D8E8 ; [*1CB9.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB CURVE THUMB INSIDE
+1D8E9 ; [*1CBA.0020.0002] # SIGNWRITING HAND-CLAW INDEX THUMB CURVE THUMB INSIDE
+1D8EA ; [*1CBB.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB CURVE THUMB UNDER
+1D8EB ; [*1CBC.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB CIRCLE
+1D8EC ; [*1CBD.0020.0002] # SIGNWRITING HAND-CUP INDEX THUMB
+1D8ED ; [*1CBE.0020.0002] # SIGNWRITING HAND-CUP INDEX THUMB OPEN
+1D8EE ; [*1CBF.0020.0002] # SIGNWRITING HAND-HINGE INDEX THUMB OPEN
+1D8EF ; [*1CC0.0020.0002] # SIGNWRITING HAND-HINGE INDEX THUMB LARGE
+1D8F0 ; [*1CC1.0020.0002] # SIGNWRITING HAND-HINGE INDEX THUMB
+1D8F1 ; [*1CC2.0020.0002] # SIGNWRITING HAND-HINGE INDEX THUMB SMALL
+1D8F2 ; [*1CC3.0020.0002] # SIGNWRITING HAND-ANGLE INDEX THUMB OUT
+1D8F3 ; [*1CC4.0020.0002] # SIGNWRITING HAND-ANGLE INDEX THUMB IN
+1D8F4 ; [*1CC5.0020.0002] # SIGNWRITING HAND-ANGLE INDEX THUMB
+1D8F5 ; [*1CC6.0020.0002] # SIGNWRITING HAND-FIST THUMB
+1D8F6 ; [*1CC7.0020.0002] # SIGNWRITING HAND-FIST THUMB HEEL
+1D8F7 ; [*1CC8.0020.0002] # SIGNWRITING HAND-FIST THUMB SIDE DIAGONAL
+1D8F8 ; [*1CC9.0020.0002] # SIGNWRITING HAND-FIST THUMB SIDE CONJOINED
+1D8F9 ; [*1CCA.0020.0002] # SIGNWRITING HAND-FIST THUMB SIDE BENT
+1D8FA ; [*1CCB.0020.0002] # SIGNWRITING HAND-FIST THUMB FORWARD
+1D8FB ; [*1CCC.0020.0002] # SIGNWRITING HAND-FIST THUMB BETWEEN INDEX MIDDLE
+1D8FC ; [*1CCD.0020.0002] # SIGNWRITING HAND-FIST THUMB BETWEEN MIDDLE RING
+1D8FD ; [*1CCE.0020.0002] # SIGNWRITING HAND-FIST THUMB BETWEEN RING LITTLE
+1D8FE ; [*1CCF.0020.0002] # SIGNWRITING HAND-FIST THUMB UNDER TWO FINGERS
+1D8FF ; [*1CD0.0020.0002] # SIGNWRITING HAND-FIST THUMB OVER TWO FINGERS
+1D900 ; [*1CD1.0020.0002] # SIGNWRITING HAND-FIST THUMB UNDER THREE FINGERS
+1D901 ; [*1CD2.0020.0002] # SIGNWRITING HAND-FIST THUMB UNDER FOUR FINGERS
+1D902 ; [*1CD3.0020.0002] # SIGNWRITING HAND-FIST THUMB OVER FOUR RAISED KNUCKLES
+1D903 ; [*1CD4.0020.0002] # SIGNWRITING HAND-FIST
+1D904 ; [*1CD5.0020.0002] # SIGNWRITING HAND-FIST HEEL
+1D905 ; [*1CD6.0020.0002] # SIGNWRITING TOUCH SINGLE
+1D906 ; [*1CD7.0020.0002] # SIGNWRITING TOUCH MULTIPLE
+1D907 ; [*1CD8.0020.0002] # SIGNWRITING TOUCH BETWEEN
+1D908 ; [*1CD9.0020.0002] # SIGNWRITING GRASP SINGLE
+1D909 ; [*1CDA.0020.0002] # SIGNWRITING GRASP MULTIPLE
+1D90A ; [*1CDB.0020.0002] # SIGNWRITING GRASP BETWEEN
+1D90B ; [*1CDC.0020.0002] # SIGNWRITING STRIKE SINGLE
+1D90C ; [*1CDD.0020.0002] # SIGNWRITING STRIKE MULTIPLE
+1D90D ; [*1CDE.0020.0002] # SIGNWRITING STRIKE BETWEEN
+1D90E ; [*1CDF.0020.0002] # SIGNWRITING BRUSH SINGLE
+1D90F ; [*1CE0.0020.0002] # SIGNWRITING BRUSH MULTIPLE
+1D910 ; [*1CE1.0020.0002] # SIGNWRITING BRUSH BETWEEN
+1D911 ; [*1CE2.0020.0002] # SIGNWRITING RUB SINGLE
+1D912 ; [*1CE3.0020.0002] # SIGNWRITING RUB MULTIPLE
+1D913 ; [*1CE4.0020.0002] # SIGNWRITING RUB BETWEEN
+1D914 ; [*1CE5.0020.0002] # SIGNWRITING SURFACE SYMBOLS
+1D915 ; [*1CE6.0020.0002] # SIGNWRITING SURFACE BETWEEN
+1D916 ; [*1CE7.0020.0002] # SIGNWRITING SQUEEZE LARGE SINGLE
+1D917 ; [*1CE8.0020.0002] # SIGNWRITING SQUEEZE SMALL SINGLE
+1D918 ; [*1CE9.0020.0002] # SIGNWRITING SQUEEZE LARGE MULTIPLE
+1D919 ; [*1CEA.0020.0002] # SIGNWRITING SQUEEZE SMALL MULTIPLE
+1D91A ; [*1CEB.0020.0002] # SIGNWRITING SQUEEZE SEQUENTIAL
+1D91B ; [*1CEC.0020.0002] # SIGNWRITING FLICK LARGE SINGLE
+1D91C ; [*1CED.0020.0002] # SIGNWRITING FLICK SMALL SINGLE
+1D91D ; [*1CEE.0020.0002] # SIGNWRITING FLICK LARGE MULTIPLE
+1D91E ; [*1CEF.0020.0002] # SIGNWRITING FLICK SMALL MULTIPLE
+1D91F ; [*1CF0.0020.0002] # SIGNWRITING FLICK SEQUENTIAL
+1D920 ; [*1CF1.0020.0002] # SIGNWRITING SQUEEZE FLICK ALTERNATING
+1D921 ; [*1CF2.0020.0002] # SIGNWRITING MOVEMENT-HINGE UP DOWN LARGE
+1D922 ; [*1CF3.0020.0002] # SIGNWRITING MOVEMENT-HINGE UP DOWN SMALL
+1D923 ; [*1CF4.0020.0002] # SIGNWRITING MOVEMENT-HINGE UP SEQUENTIAL
+1D924 ; [*1CF5.0020.0002] # SIGNWRITING MOVEMENT-HINGE DOWN SEQUENTIAL
+1D925 ; [*1CF6.0020.0002] # SIGNWRITING MOVEMENT-HINGE UP DOWN ALTERNATING LARGE
+1D926 ; [*1CF7.0020.0002] # SIGNWRITING MOVEMENT-HINGE UP DOWN ALTERNATING SMALL
+1D927 ; [*1CF8.0020.0002] # SIGNWRITING MOVEMENT-HINGE SIDE TO SIDE SCISSORS
+1D928 ; [*1CF9.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE FINGER CONTACT
+1D929 ; [*1CFA.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE FINGER CONTACT
+1D92A ; [*1CFB.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT SMALL
+1D92B ; [*1CFC.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT MEDIUM
+1D92C ; [*1CFD.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT LARGE
+1D92D ; [*1CFE.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT LARGEST
+1D92E ; [*1CFF.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE SINGLE WRIST FLEX
+1D92F ; [*1D00.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE DOUBLE STRAIGHT
+1D930 ; [*1D01.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE DOUBLE WRIST FLEX
+1D931 ; [*1D02.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE DOUBLE ALTERNATING
+1D932 ; [*1D03.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE DOUBLE ALTERNATING WRIST FLEX
+1D933 ; [*1D04.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CROSS
+1D934 ; [*1D05.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE TRIPLE STRAIGHT MOVEMENT
+1D935 ; [*1D06.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE TRIPLE WRIST FLEX
+1D936 ; [*1D07.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE TRIPLE ALTERNATING
+1D937 ; [*1D08.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE TRIPLE ALTERNATING WRIST FLEX
+1D938 ; [*1D09.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE BEND SMALL
+1D939 ; [*1D0A.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE BEND MEDIUM
+1D93A ; [*1D0B.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE BEND LARGE
+1D93B ; [*1D0C.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CORNER SMALL
+1D93C ; [*1D0D.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CORNER MEDIUM
+1D93D ; [*1D0E.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CORNER LARGE
+1D93E ; [*1D0F.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CORNER ROTATION
+1D93F ; [*1D10.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CHECK SMALL
+1D940 ; [*1D11.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CHECK MEDIUM
+1D941 ; [*1D12.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CHECK LARGE
+1D942 ; [*1D13.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE BOX SMALL
+1D943 ; [*1D14.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE BOX MEDIUM
+1D944 ; [*1D15.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE BOX LARGE
+1D945 ; [*1D16.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE ZIGZAG SMALL
+1D946 ; [*1D17.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE ZIGZAG MEDIUM
+1D947 ; [*1D18.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE ZIGZAG LARGE
+1D948 ; [*1D19.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE PEAKS SMALL
+1D949 ; [*1D1A.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE PEAKS MEDIUM
+1D94A ; [*1D1B.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE PEAKS LARGE
+1D94B ; [*1D1C.0020.0002] # SIGNWRITING TRAVEL-WALLPLANE ROTATION-WALLPLANE SINGLE
+1D94C ; [*1D1D.0020.0002] # SIGNWRITING TRAVEL-WALLPLANE ROTATION-WALLPLANE DOUBLE
+1D94D ; [*1D1E.0020.0002] # SIGNWRITING TRAVEL-WALLPLANE ROTATION-WALLPLANE ALTERNATING
+1D94E ; [*1D1F.0020.0002] # SIGNWRITING TRAVEL-WALLPLANE ROTATION-FLOORPLANE SINGLE
+1D94F ; [*1D20.0020.0002] # SIGNWRITING TRAVEL-WALLPLANE ROTATION-FLOORPLANE DOUBLE
+1D950 ; [*1D21.0020.0002] # SIGNWRITING TRAVEL-WALLPLANE ROTATION-FLOORPLANE ALTERNATING
+1D951 ; [*1D22.0020.0002] # SIGNWRITING TRAVEL-WALLPLANE SHAKING
+1D952 ; [*1D23.0020.0002] # SIGNWRITING TRAVEL-WALLPLANE ARM SPIRAL SINGLE
+1D953 ; [*1D24.0020.0002] # SIGNWRITING TRAVEL-WALLPLANE ARM SPIRAL DOUBLE
+1D954 ; [*1D25.0020.0002] # SIGNWRITING TRAVEL-WALLPLANE ARM SPIRAL TRIPLE
+1D955 ; [*1D26.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL AWAY SMALL
+1D956 ; [*1D27.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL AWAY MEDIUM
+1D957 ; [*1D28.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL AWAY LARGE
+1D958 ; [*1D29.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL AWAY LARGEST
+1D959 ; [*1D2A.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL TOWARDS SMALL
+1D95A ; [*1D2B.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL TOWARDS MEDIUM
+1D95B ; [*1D2C.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL TOWARDS LARGE
+1D95C ; [*1D2D.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL TOWARDS LARGEST
+1D95D ; [*1D2E.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY SMALL
+1D95E ; [*1D2F.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY MEDIUM
+1D95F ; [*1D30.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY LARGE
+1D960 ; [*1D31.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY LARGEST
+1D961 ; [*1D32.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS SMALL
+1D962 ; [*1D33.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS MEDIUM
+1D963 ; [*1D34.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS LARGE
+1D964 ; [*1D35.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS LARGEST
+1D965 ; [*1D36.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT SMALL
+1D966 ; [*1D37.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT MEDIUM
+1D967 ; [*1D38.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT LARGE
+1D968 ; [*1D39.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT LARGEST
+1D969 ; [*1D3A.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE SINGLE WRIST FLEX
+1D96A ; [*1D3B.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE DOUBLE STRAIGHT
+1D96B ; [*1D3C.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE DOUBLE WRIST FLEX
+1D96C ; [*1D3D.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE DOUBLE ALTERNATING
+1D96D ; [*1D3E.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE DOUBLE ALTERNATING WRIST FLEX
+1D96E ; [*1D3F.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CROSS
+1D96F ; [*1D40.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE TRIPLE STRAIGHT MOVEMENT
+1D970 ; [*1D41.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE TRIPLE WRIST FLEX
+1D971 ; [*1D42.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE TRIPLE ALTERNATING MOVEMENT
+1D972 ; [*1D43.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE TRIPLE ALTERNATING WRIST FLEX
+1D973 ; [*1D44.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE BEND
+1D974 ; [*1D45.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CORNER SMALL
+1D975 ; [*1D46.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CORNER MEDIUM
+1D976 ; [*1D47.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CORNER LARGE
+1D977 ; [*1D48.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CHECK
+1D978 ; [*1D49.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE BOX SMALL
+1D979 ; [*1D4A.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE BOX MEDIUM
+1D97A ; [*1D4B.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE BOX LARGE
+1D97B ; [*1D4C.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE ZIGZAG SMALL
+1D97C ; [*1D4D.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE ZIGZAG MEDIUM
+1D97D ; [*1D4E.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE ZIGZAG LARGE
+1D97E ; [*1D4F.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE PEAKS SMALL
+1D97F ; [*1D50.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE PEAKS MEDIUM
+1D980 ; [*1D51.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE PEAKS LARGE
+1D981 ; [*1D52.0020.0002] # SIGNWRITING TRAVEL-FLOORPLANE ROTATION-FLOORPLANE SINGLE
+1D982 ; [*1D53.0020.0002] # SIGNWRITING TRAVEL-FLOORPLANE ROTATION-FLOORPLANE DOUBLE
+1D983 ; [*1D54.0020.0002] # SIGNWRITING TRAVEL-FLOORPLANE ROTATION-FLOORPLANE ALTERNATING
+1D984 ; [*1D55.0020.0002] # SIGNWRITING TRAVEL-FLOORPLANE ROTATION-WALLPLANE SINGLE
+1D985 ; [*1D56.0020.0002] # SIGNWRITING TRAVEL-FLOORPLANE ROTATION-WALLPLANE DOUBLE
+1D986 ; [*1D57.0020.0002] # SIGNWRITING TRAVEL-FLOORPLANE ROTATION-WALLPLANE ALTERNATING
+1D987 ; [*1D58.0020.0002] # SIGNWRITING TRAVEL-FLOORPLANE SHAKING
+1D988 ; [*1D59.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTER SMALL
+1D989 ; [*1D5A.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTER MEDIUM
+1D98A ; [*1D5B.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTER LARGE
+1D98B ; [*1D5C.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTER LARGEST
+1D98C ; [*1D5D.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE SMALL
+1D98D ; [*1D5E.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE MEDIUM
+1D98E ; [*1D5F.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE LARGE
+1D98F ; [*1D60.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE LARGEST
+1D990 ; [*1D61.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVE THREE-QUARTER CIRCLE SMALL
+1D991 ; [*1D62.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVE THREE-QUARTER CIRCLE MEDIUM
+1D992 ; [*1D63.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE HUMP SMALL
+1D993 ; [*1D64.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE HUMP MEDIUM
+1D994 ; [*1D65.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE HUMP LARGE
+1D995 ; [*1D66.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE LOOP SMALL
+1D996 ; [*1D67.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE LOOP MEDIUM
+1D997 ; [*1D68.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE LOOP LARGE
+1D998 ; [*1D69.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE LOOP SMALL DOUBLE
+1D999 ; [*1D6A.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE DOUBLE SMALL
+1D99A ; [*1D6B.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE DOUBLE MEDIUM
+1D99B ; [*1D6C.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE DOUBLE LARGE
+1D99C ; [*1D6D.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE TRIPLE SMALL
+1D99D ; [*1D6E.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE TRIPLE MEDIUM
+1D99E ; [*1D6F.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE TRIPLE LARGE
+1D99F ; [*1D70.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVE THEN STRAIGHT
+1D9A0 ; [*1D71.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVED CROSS SMALL
+1D9A1 ; [*1D72.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVED CROSS MEDIUM
+1D9A2 ; [*1D73.0020.0002] # SIGNWRITING ROTATION-WALLPLANE SINGLE
+1D9A3 ; [*1D74.0020.0002] # SIGNWRITING ROTATION-WALLPLANE DOUBLE
+1D9A4 ; [*1D75.0020.0002] # SIGNWRITING ROTATION-WALLPLANE ALTERNATE
+1D9A5 ; [*1D76.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE SHAKING
+1D9A6 ; [*1D77.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVE HITTING FRONT WALL
+1D9A7 ; [*1D78.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE HUMP HITTING FRONT WALL
+1D9A8 ; [*1D79.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE LOOP HITTING FRONT WALL
+1D9A9 ; [*1D7A.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE WAVE HITTING FRONT WALL
+1D9AA ; [*1D7B.0020.0002] # SIGNWRITING ROTATION-WALLPLANE SINGLE HITTING FRONT WALL
+1D9AB ; [*1D7C.0020.0002] # SIGNWRITING ROTATION-WALLPLANE DOUBLE HITTING FRONT WALL
+1D9AC ; [*1D7D.0020.0002] # SIGNWRITING ROTATION-WALLPLANE ALTERNATING HITTING FRONT WALL
+1D9AD ; [*1D7E.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVE HITTING CHEST
+1D9AE ; [*1D7F.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE HUMP HITTING CHEST
+1D9AF ; [*1D80.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE LOOP HITTING CHEST
+1D9B0 ; [*1D81.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE WAVE HITTING CHEST
+1D9B1 ; [*1D82.0020.0002] # SIGNWRITING ROTATION-WALLPLANE SINGLE HITTING CHEST
+1D9B2 ; [*1D83.0020.0002] # SIGNWRITING ROTATION-WALLPLANE DOUBLE HITTING CHEST
+1D9B3 ; [*1D84.0020.0002] # SIGNWRITING ROTATION-WALLPLANE ALTERNATING HITTING CHEST
+1D9B4 ; [*1D85.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE WAVE DIAGONAL PATH SMALL
+1D9B5 ; [*1D86.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE WAVE DIAGONAL PATH MEDIUM
+1D9B6 ; [*1D87.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE WAVE DIAGONAL PATH LARGE
+1D9B7 ; [*1D88.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING CEILING SMALL
+1D9B8 ; [*1D89.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING CEILING LARGE
+1D9B9 ; [*1D8A.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING SMALL DOUBLE
+1D9BA ; [*1D8B.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING LARGE DOUBLE
+1D9BB ; [*1D8C.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING SMALL TRIPLE
+1D9BC ; [*1D8D.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING LARGE TRIPLE
+1D9BD ; [*1D8E.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING CEILING SMALL SINGLE
+1D9BE ; [*1D8F.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING CEILING LARGE SINGLE
+1D9BF ; [*1D90.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING CEILING SMALL DOUBLE
+1D9C0 ; [*1D91.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING CEILING LARGE DOUBLE
+1D9C1 ; [*1D92.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING CEILING SMALL
+1D9C2 ; [*1D93.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING CEILING LARGE
+1D9C3 ; [*1D94.0020.0002] # SIGNWRITING ROTATION-FLOORPLANE SINGLE HITTING CEILING
+1D9C4 ; [*1D95.0020.0002] # SIGNWRITING ROTATION-FLOORPLANE DOUBLE HITTING CEILING
+1D9C5 ; [*1D96.0020.0002] # SIGNWRITING ROTATION-FLOORPLANE ALTERNATING HITTING CEILING
+1D9C6 ; [*1D97.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING FLOOR SMALL
+1D9C7 ; [*1D98.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING FLOOR LARGE
+1D9C8 ; [*1D99.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING FLOOR SMALL DOUBLE
+1D9C9 ; [*1D9A.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING FLOOR LARGE DOUBLE
+1D9CA ; [*1D9B.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING FLOOR TRIPLE SMALL TRIPLE
+1D9CB ; [*1D9C.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING FLOOR TRIPLE LARGE TRIPLE
+1D9CC ; [*1D9D.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOOR SMALL SINGLE
+1D9CD ; [*1D9E.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOOR LARGE SINGLE
+1D9CE ; [*1D9F.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOOR SMALL DOUBLE
+1D9CF ; [*1DA0.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOOR LARGE DOUBLE
+1D9D0 ; [*1DA1.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING FLOOR SMALL
+1D9D1 ; [*1DA2.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING FLOOR LARGE
+1D9D2 ; [*1DA3.0020.0002] # SIGNWRITING ROTATION-FLOORPLANE SINGLE HITTING FLOOR
+1D9D3 ; [*1DA4.0020.0002] # SIGNWRITING ROTATION-FLOORPLANE DOUBLE HITTING FLOOR
+1D9D4 ; [*1DA5.0020.0002] # SIGNWRITING ROTATION-FLOORPLANE ALTERNATING HITTING FLOOR
+1D9D5 ; [*1DA6.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CURVE SMALL
+1D9D6 ; [*1DA7.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CURVE MEDIUM
+1D9D7 ; [*1DA8.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CURVE LARGE
+1D9D8 ; [*1DA9.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CURVE LARGEST
+1D9D9 ; [*1DAA.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CURVE COMBINED
+1D9DA ; [*1DAB.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE HUMP SMALL
+1D9DB ; [*1DAC.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE LOOP SMALL
+1D9DC ; [*1DAD.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE WAVE SNAKE
+1D9DD ; [*1DAE.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE WAVE SMALL
+1D9DE ; [*1DAF.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE WAVE LARGE
+1D9DF ; [*1DB0.0020.0002] # SIGNWRITING ROTATION-FLOORPLANE SINGLE
+1D9E0 ; [*1DB1.0020.0002] # SIGNWRITING ROTATION-FLOORPLANE DOUBLE
+1D9E1 ; [*1DB2.0020.0002] # SIGNWRITING ROTATION-FLOORPLANE ALTERNATING
+1D9E2 ; [*1DB3.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE SHAKING PARALLEL
+1D9E3 ; [*1DB4.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE SMALL SINGLE
+1D9E4 ; [*1DB5.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE MEDIUM SINGLE
+1D9E5 ; [*1DB6.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE SMALL DOUBLE
+1D9E6 ; [*1DB7.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE MEDIUM DOUBLE
+1D9E7 ; [*1DB8.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL SMALL SINGLE
+1D9E8 ; [*1DB9.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL MEDIUM SINGLE
+1D9E9 ; [*1DBA.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL LARGE SINGLE
+1D9EA ; [*1DBB.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL SMALL DOUBLE
+1D9EB ; [*1DBC.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL MEDIUM DOUBLE
+1D9EC ; [*1DBD.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL LARGE DOUBLE
+1D9ED ; [*1DBE.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE WRIST CIRCLE FRONT SINGLE
+1D9EE ; [*1DBF.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE WRIST CIRCLE FRONT DOUBLE
+1D9EF ; [*1DC0.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE WRIST CIRCLE HITTING WALL SINGLE
+1D9F0 ; [*1DC1.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE WRIST CIRCLE HITTING WALL DOUBLE
+1D9F1 ; [*1DC2.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE FINGER CIRCLES SINGLE
+1D9F2 ; [*1DC3.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE FINGER CIRCLES DOUBLE
+1D9F3 ; [*1DC4.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE FINGER CIRCLES HITTING WALL SINGLE
+1D9F4 ; [*1DC5.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE FINGER CIRCLES HITTING WALL DOUBLE
+1D9F5 ; [*1DC6.0020.0002] # SIGNWRITING DYNAMIC ARROWHEAD SMALL
+1D9F6 ; [*1DC7.0020.0002] # SIGNWRITING DYNAMIC ARROWHEAD LARGE
+1D9F7 ; [*1DC8.0020.0002] # SIGNWRITING DYNAMIC FAST
+1D9F8 ; [*1DC9.0020.0002] # SIGNWRITING DYNAMIC SLOW
+1D9F9 ; [*1DCA.0020.0002] # SIGNWRITING DYNAMIC TENSE
+1D9FA ; [*1DCB.0020.0002] # SIGNWRITING DYNAMIC RELAXED
+1D9FB ; [*1DCC.0020.0002] # SIGNWRITING DYNAMIC SIMULTANEOUS
+1D9FC ; [*1DCD.0020.0002] # SIGNWRITING DYNAMIC SIMULTANEOUS ALTERNATING
+1D9FD ; [*1DCE.0020.0002] # SIGNWRITING DYNAMIC EVERY OTHER TIME
+1D9FE ; [*1DCF.0020.0002] # SIGNWRITING DYNAMIC GRADUAL
+1D9FF ; [*1DD0.0020.0002] # SIGNWRITING HEAD
+1DA00 ; [.0000.0000.0000] # SIGNWRITING HEAD RIM
+1DA01 ; [.0000.0000.0000] # SIGNWRITING HEAD MOVEMENT-WALLPLANE STRAIGHT
+1DA02 ; [.0000.0000.0000] # SIGNWRITING HEAD MOVEMENT-WALLPLANE TILT
+1DA03 ; [.0000.0000.0000] # SIGNWRITING HEAD MOVEMENT-FLOORPLANE STRAIGHT
+1DA04 ; [.0000.0000.0000] # SIGNWRITING HEAD MOVEMENT-WALLPLANE CURVE
+1DA05 ; [.0000.0000.0000] # SIGNWRITING HEAD MOVEMENT-FLOORPLANE CURVE
+1DA06 ; [.0000.0000.0000] # SIGNWRITING HEAD MOVEMENT CIRCLE
+1DA07 ; [.0000.0000.0000] # SIGNWRITING FACE DIRECTION POSITION NOSE FORWARD TILTING
+1DA08 ; [.0000.0000.0000] # SIGNWRITING FACE DIRECTION POSITION NOSE UP OR DOWN
+1DA09 ; [.0000.0000.0000] # SIGNWRITING FACE DIRECTION POSITION NOSE UP OR DOWN TILTING
+1DA0A ; [.0000.0000.0000] # SIGNWRITING EYEBROWS STRAIGHT UP
+1DA0B ; [.0000.0000.0000] # SIGNWRITING EYEBROWS STRAIGHT NEUTRAL
+1DA0C ; [.0000.0000.0000] # SIGNWRITING EYEBROWS STRAIGHT DOWN
+1DA0D ; [.0000.0000.0000] # SIGNWRITING DREAMY EYEBROWS NEUTRAL DOWN
+1DA0E ; [.0000.0000.0000] # SIGNWRITING DREAMY EYEBROWS DOWN NEUTRAL
+1DA0F ; [.0000.0000.0000] # SIGNWRITING DREAMY EYEBROWS UP NEUTRAL
+1DA10 ; [.0000.0000.0000] # SIGNWRITING DREAMY EYEBROWS NEUTRAL UP
+1DA11 ; [.0000.0000.0000] # SIGNWRITING FOREHEAD NEUTRAL
+1DA12 ; [.0000.0000.0000] # SIGNWRITING FOREHEAD CONTACT
+1DA13 ; [.0000.0000.0000] # SIGNWRITING FOREHEAD WRINKLED
+1DA14 ; [.0000.0000.0000] # SIGNWRITING EYES OPEN
+1DA15 ; [.0000.0000.0000] # SIGNWRITING EYES SQUEEZED
+1DA16 ; [.0000.0000.0000] # SIGNWRITING EYES CLOSED
+1DA17 ; [.0000.0000.0000] # SIGNWRITING EYE BLINK SINGLE
+1DA18 ; [.0000.0000.0000] # SIGNWRITING EYE BLINK MULTIPLE
+1DA19 ; [.0000.0000.0000] # SIGNWRITING EYES HALF OPEN
+1DA1A ; [.0000.0000.0000] # SIGNWRITING EYES WIDE OPEN
+1DA1B ; [.0000.0000.0000] # SIGNWRITING EYES HALF CLOSED
+1DA1C ; [.0000.0000.0000] # SIGNWRITING EYES WIDENING MOVEMENT
+1DA1D ; [.0000.0000.0000] # SIGNWRITING EYE WINK
+1DA1E ; [.0000.0000.0000] # SIGNWRITING EYELASHES UP
+1DA1F ; [.0000.0000.0000] # SIGNWRITING EYELASHES DOWN
+1DA20 ; [.0000.0000.0000] # SIGNWRITING EYELASHES FLUTTERING
+1DA21 ; [.0000.0000.0000] # SIGNWRITING EYEGAZE-WALLPLANE STRAIGHT
+1DA22 ; [.0000.0000.0000] # SIGNWRITING EYEGAZE-WALLPLANE STRAIGHT DOUBLE
+1DA23 ; [.0000.0000.0000] # SIGNWRITING EYEGAZE-WALLPLANE STRAIGHT ALTERNATING
+1DA24 ; [.0000.0000.0000] # SIGNWRITING EYEGAZE-FLOORPLANE STRAIGHT
+1DA25 ; [.0000.0000.0000] # SIGNWRITING EYEGAZE-FLOORPLANE STRAIGHT DOUBLE
+1DA26 ; [.0000.0000.0000] # SIGNWRITING EYEGAZE-FLOORPLANE STRAIGHT ALTERNATING
+1DA27 ; [.0000.0000.0000] # SIGNWRITING EYEGAZE-WALLPLANE CURVED
+1DA28 ; [.0000.0000.0000] # SIGNWRITING EYEGAZE-FLOORPLANE CURVED
+1DA29 ; [.0000.0000.0000] # SIGNWRITING EYEGAZE-WALLPLANE CIRCLING
+1DA2A ; [.0000.0000.0000] # SIGNWRITING CHEEKS PUFFED
+1DA2B ; [.0000.0000.0000] # SIGNWRITING CHEEKS NEUTRAL
+1DA2C ; [.0000.0000.0000] # SIGNWRITING CHEEKS SUCKED
+1DA2D ; [.0000.0000.0000] # SIGNWRITING TENSE CHEEKS HIGH
+1DA2E ; [.0000.0000.0000] # SIGNWRITING TENSE CHEEKS MIDDLE
+1DA2F ; [.0000.0000.0000] # SIGNWRITING TENSE CHEEKS LOW
+1DA30 ; [.0000.0000.0000] # SIGNWRITING EARS
+1DA31 ; [.0000.0000.0000] # SIGNWRITING NOSE NEUTRAL
+1DA32 ; [.0000.0000.0000] # SIGNWRITING NOSE CONTACT
+1DA33 ; [.0000.0000.0000] # SIGNWRITING NOSE WRINKLES
+1DA34 ; [.0000.0000.0000] # SIGNWRITING NOSE WIGGLES
+1DA35 ; [.0000.0000.0000] # SIGNWRITING AIR BLOWING OUT
+1DA36 ; [.0000.0000.0000] # SIGNWRITING AIR SUCKING IN
+1DA37 ; [*1DD1.0020.0002] # SIGNWRITING AIR BLOW SMALL ROTATIONS
+1DA38 ; [*1DD2.0020.0002] # SIGNWRITING AIR SUCK SMALL ROTATIONS
+1DA39 ; [*1DD3.0020.0002] # SIGNWRITING BREATH INHALE
+1DA3A ; [*1DD4.0020.0002] # SIGNWRITING BREATH EXHALE
+1DA3B ; [.0000.0000.0000] # SIGNWRITING MOUTH CLOSED NEUTRAL
+1DA3C ; [.0000.0000.0000] # SIGNWRITING MOUTH CLOSED FORWARD
+1DA3D ; [.0000.0000.0000] # SIGNWRITING MOUTH CLOSED CONTACT
+1DA3E ; [.0000.0000.0000] # SIGNWRITING MOUTH SMILE
+1DA3F ; [.0000.0000.0000] # SIGNWRITING MOUTH SMILE WRINKLED
+1DA40 ; [.0000.0000.0000] # SIGNWRITING MOUTH SMILE OPEN
+1DA41 ; [.0000.0000.0000] # SIGNWRITING MOUTH FROWN
+1DA42 ; [.0000.0000.0000] # SIGNWRITING MOUTH FROWN WRINKLED
+1DA43 ; [.0000.0000.0000] # SIGNWRITING MOUTH FROWN OPEN
+1DA44 ; [.0000.0000.0000] # SIGNWRITING MOUTH OPEN CIRCLE
+1DA45 ; [.0000.0000.0000] # SIGNWRITING MOUTH OPEN FORWARD
+1DA46 ; [.0000.0000.0000] # SIGNWRITING MOUTH OPEN WRINKLED
+1DA47 ; [.0000.0000.0000] # SIGNWRITING MOUTH OPEN OVAL
+1DA48 ; [.0000.0000.0000] # SIGNWRITING MOUTH OPEN OVAL WRINKLED
+1DA49 ; [.0000.0000.0000] # SIGNWRITING MOUTH OPEN OVAL YAWN
+1DA4A ; [.0000.0000.0000] # SIGNWRITING MOUTH OPEN RECTANGLE
+1DA4B ; [.0000.0000.0000] # SIGNWRITING MOUTH OPEN RECTANGLE WRINKLED
+1DA4C ; [.0000.0000.0000] # SIGNWRITING MOUTH OPEN RECTANGLE YAWN
+1DA4D ; [.0000.0000.0000] # SIGNWRITING MOUTH KISS
+1DA4E ; [.0000.0000.0000] # SIGNWRITING MOUTH KISS FORWARD
+1DA4F ; [.0000.0000.0000] # SIGNWRITING MOUTH KISS WRINKLED
+1DA50 ; [.0000.0000.0000] # SIGNWRITING MOUTH TENSE
+1DA51 ; [.0000.0000.0000] # SIGNWRITING MOUTH TENSE FORWARD
+1DA52 ; [.0000.0000.0000] # SIGNWRITING MOUTH TENSE SUCKED
+1DA53 ; [.0000.0000.0000] # SIGNWRITING LIPS PRESSED TOGETHER
+1DA54 ; [.0000.0000.0000] # SIGNWRITING LIP LOWER OVER UPPER
+1DA55 ; [.0000.0000.0000] # SIGNWRITING LIP UPPER OVER LOWER
+1DA56 ; [.0000.0000.0000] # SIGNWRITING MOUTH CORNERS
+1DA57 ; [.0000.0000.0000] # SIGNWRITING MOUTH WRINKLES SINGLE
+1DA58 ; [.0000.0000.0000] # SIGNWRITING MOUTH WRINKLES DOUBLE
+1DA59 ; [.0000.0000.0000] # SIGNWRITING TONGUE STICKING OUT FAR
+1DA5A ; [.0000.0000.0000] # SIGNWRITING TONGUE LICKING LIPS
+1DA5B ; [.0000.0000.0000] # SIGNWRITING TONGUE TIP BETWEEN LIPS
+1DA5C ; [.0000.0000.0000] # SIGNWRITING TONGUE TIP TOUCHING INSIDE MOUTH
+1DA5D ; [.0000.0000.0000] # SIGNWRITING TONGUE INSIDE MOUTH RELAXED
+1DA5E ; [.0000.0000.0000] # SIGNWRITING TONGUE MOVES AGAINST CHEEK
+1DA5F ; [.0000.0000.0000] # SIGNWRITING TONGUE CENTRE STICKING OUT
+1DA60 ; [.0000.0000.0000] # SIGNWRITING TONGUE CENTRE INSIDE MOUTH
+1DA61 ; [.0000.0000.0000] # SIGNWRITING TEETH
+1DA62 ; [.0000.0000.0000] # SIGNWRITING TEETH MOVEMENT
+1DA63 ; [.0000.0000.0000] # SIGNWRITING TEETH ON TONGUE
+1DA64 ; [.0000.0000.0000] # SIGNWRITING TEETH ON TONGUE MOVEMENT
+1DA65 ; [.0000.0000.0000] # SIGNWRITING TEETH ON LIPS
+1DA66 ; [.0000.0000.0000] # SIGNWRITING TEETH ON LIPS MOVEMENT
+1DA67 ; [.0000.0000.0000] # SIGNWRITING TEETH BITE LIPS
+1DA68 ; [.0000.0000.0000] # SIGNWRITING MOVEMENT-WALLPLANE JAW
+1DA69 ; [.0000.0000.0000] # SIGNWRITING MOVEMENT-FLOORPLANE JAW
+1DA6A ; [.0000.0000.0000] # SIGNWRITING NECK
+1DA6B ; [.0000.0000.0000] # SIGNWRITING HAIR
+1DA6C ; [.0000.0000.0000] # SIGNWRITING EXCITEMENT
+1DA6D ; [*1DD5.0020.0002] # SIGNWRITING SHOULDER HIP SPINE
+1DA6E ; [*1DD6.0020.0002] # SIGNWRITING SHOULDER HIP POSITIONS
+1DA6F ; [*1DD7.0020.0002] # SIGNWRITING WALLPLANE SHOULDER HIP MOVE
+1DA70 ; [*1DD8.0020.0002] # SIGNWRITING FLOORPLANE SHOULDER HIP MOVE
+1DA71 ; [*1DD9.0020.0002] # SIGNWRITING SHOULDER TILTING FROM WAIST
+1DA72 ; [*1DDA.0020.0002] # SIGNWRITING TORSO-WALLPLANE STRAIGHT STRETCH
+1DA73 ; [*1DDB.0020.0002] # SIGNWRITING TORSO-WALLPLANE CURVED BEND
+1DA74 ; [*1DDC.0020.0002] # SIGNWRITING TORSO-FLOORPLANE TWISTING
+1DA75 ; [.0000.0000.0000] # SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS
+1DA76 ; [*1DDD.0020.0002] # SIGNWRITING LIMB COMBINATION
+1DA77 ; [*1DDE.0020.0002] # SIGNWRITING LIMB LENGTH-1
+1DA78 ; [*1DDF.0020.0002] # SIGNWRITING LIMB LENGTH-2
+1DA79 ; [*1DE0.0020.0002] # SIGNWRITING LIMB LENGTH-3
+1DA7A ; [*1DE1.0020.0002] # SIGNWRITING LIMB LENGTH-4
+1DA7B ; [*1DE2.0020.0002] # SIGNWRITING LIMB LENGTH-5
+1DA7C ; [*1DE3.0020.0002] # SIGNWRITING LIMB LENGTH-6
+1DA7D ; [*1DE4.0020.0002] # SIGNWRITING LIMB LENGTH-7
+1DA7E ; [*1DE5.0020.0002] # SIGNWRITING FINGER
+1DA7F ; [*1DE6.0020.0002] # SIGNWRITING LOCATION-WALLPLANE SPACE
+1DA80 ; [*1DE7.0020.0002] # SIGNWRITING LOCATION-FLOORPLANE SPACE
+1DA81 ; [*1DE8.0020.0002] # SIGNWRITING LOCATION HEIGHT
+1DA82 ; [*1DE9.0020.0002] # SIGNWRITING LOCATION WIDTH
+1DA83 ; [*1DEA.0020.0002] # SIGNWRITING LOCATION DEPTH
+1DA84 ; [.0000.0000.0000] # SIGNWRITING LOCATION HEAD NECK
+1DA85 ; [*1DEB.0020.0002] # SIGNWRITING LOCATION TORSO
+1DA86 ; [*1DEC.0020.0002] # SIGNWRITING LOCATION LIMBS DIGITS
+1DA87 ; [*04C4.0020.0002] # SIGNWRITING COMMA
+1DA88 ; [*04C5.0020.0002] # SIGNWRITING FULL STOP
+1DA89 ; [*04C6.0020.0002] # SIGNWRITING SEMICOLON
+1DA8A ; [*04C7.0020.0002] # SIGNWRITING COLON
+1DA8B ; [*04C8.0020.0002] # SIGNWRITING PARENTHESIS
+1DA9B ; [.0000.0000.0000] # SIGNWRITING FILL MODIFIER-2
+1DA9C ; [.0000.0000.0000] # SIGNWRITING FILL MODIFIER-3
+1DA9D ; [.0000.0000.0000] # SIGNWRITING FILL MODIFIER-4
+1DA9E ; [.0000.0000.0000] # SIGNWRITING FILL MODIFIER-5
+1DA9F ; [.0000.0000.0000] # SIGNWRITING FILL MODIFIER-6
+1DAA1 ; [.0000.0000.0000] # SIGNWRITING ROTATION MODIFIER-2
+1DAA2 ; [.0000.0000.0000] # SIGNWRITING ROTATION MODIFIER-3
+1DAA3 ; [.0000.0000.0000] # SIGNWRITING ROTATION MODIFIER-4
+1DAA4 ; [.0000.0000.0000] # SIGNWRITING ROTATION MODIFIER-5
+1DAA5 ; [.0000.0000.0000] # SIGNWRITING ROTATION MODIFIER-6
+1DAA6 ; [.0000.0000.0000] # SIGNWRITING ROTATION MODIFIER-7
+1DAA7 ; [.0000.0000.0000] # SIGNWRITING ROTATION MODIFIER-8
+1DAA8 ; [.0000.0000.0000] # SIGNWRITING ROTATION MODIFIER-9
+1DAA9 ; [.0000.0000.0000] # SIGNWRITING ROTATION MODIFIER-10
+1DAAA ; [.0000.0000.0000] # SIGNWRITING ROTATION MODIFIER-11
+1DAAB ; [.0000.0000.0000] # SIGNWRITING ROTATION MODIFIER-12
+1DAAC ; [.0000.0000.0000] # SIGNWRITING ROTATION MODIFIER-13
+1DAAD ; [.0000.0000.0000] # SIGNWRITING ROTATION MODIFIER-14
+1DAAE ; [.0000.0000.0000] # SIGNWRITING ROTATION MODIFIER-15
+1DAAF ; [.0000.0000.0000] # SIGNWRITING ROTATION MODIFIER-16
+1E14F ; [*115A.0020.0002] # NYIAKENG PUACHUE HMONG CIRCLED CA
+1E8D0 ; [.0000.0000.0000] # MENDE KIKAKUI COMBINING NUMBER TEENS
+1E8D1 ; [.0000.0000.0000] # MENDE KIKAKUI COMBINING NUMBER TENS
+1E8D2 ; [.0000.0000.0000] # MENDE KIKAKUI COMBINING NUMBER HUNDREDS
+1E8D3 ; [.0000.0000.0000] # MENDE KIKAKUI COMBINING NUMBER THOUSANDS
+1E8D4 ; [.0000.0000.0000] # MENDE KIKAKUI COMBINING NUMBER TEN THOUSANDS
+1E8D5 ; [.0000.0000.0000] # MENDE KIKAKUI COMBINING NUMBER HUNDRED THOUSANDS
+1E8D6 ; [.0000.0000.0000] # MENDE KIKAKUI COMBINING NUMBER MILLIONS
+1E95E ; [*026E.0020.0002] # ADLAM INITIAL EXCLAMATION MARK
+1E95F ; [*027E.0020.0002] # ADLAM INITIAL QUESTION MARK
+1EC7A ; [*1F6E.0020.0002] # INDIC SIYAQ NUMBER TEN
+1EC7B ; [*1F6F.0020.0002] # INDIC SIYAQ NUMBER TWENTY
+1EC7C ; [*1F70.0020.0002] # INDIC SIYAQ NUMBER THIRTY
+1EC7D ; [*1F71.0020.0002] # INDIC SIYAQ NUMBER FORTY
+1EC7E ; [*1F72.0020.0002] # INDIC SIYAQ NUMBER FIFTY
+1EC7F ; [*1F73.0020.0002] # INDIC SIYAQ NUMBER SIXTY
+1EC80 ; [*1F74.0020.0002] # INDIC SIYAQ NUMBER SEVENTY
+1EC81 ; [*1F75.0020.0002] # INDIC SIYAQ NUMBER EIGHTY
+1EC82 ; [*1F76.0020.0002] # INDIC SIYAQ NUMBER NINETY
+1EC83 ; [*1F77.0020.0002] # INDIC SIYAQ NUMBER ONE HUNDRED
+1EC84 ; [*1F78.0020.0002] # INDIC SIYAQ NUMBER TWO HUNDRED
+1EC85 ; [*1F79.0020.0002] # INDIC SIYAQ NUMBER THREE HUNDRED
+1EC86 ; [*1F7A.0020.0002] # INDIC SIYAQ NUMBER FOUR HUNDRED
+1EC87 ; [*1F7B.0020.0002] # INDIC SIYAQ NUMBER FIVE HUNDRED
+1EC88 ; [*1F7C.0020.0002] # INDIC SIYAQ NUMBER SIX HUNDRED
+1EC89 ; [*1F7D.0020.0002] # INDIC SIYAQ NUMBER SEVEN HUNDRED
+1EC8A ; [*1F7E.0020.0002] # INDIC SIYAQ NUMBER EIGHT HUNDRED
+1EC8B ; [*1F7F.0020.0002] # INDIC SIYAQ NUMBER NINE HUNDRED
+1EC8C ; [*1F80.0020.0002] # INDIC SIYAQ NUMBER ONE THOUSAND
+1EC8D ; [*1F81.0020.0002] # INDIC SIYAQ NUMBER TWO THOUSAND
+1EC8E ; [*1F82.0020.0002] # INDIC SIYAQ NUMBER THREE THOUSAND
+1EC8F ; [*1F83.0020.0002] # INDIC SIYAQ NUMBER FOUR THOUSAND
+1EC90 ; [*1F84.0020.0002] # INDIC SIYAQ NUMBER FIVE THOUSAND
+1EC91 ; [*1F85.0020.0002] # INDIC SIYAQ NUMBER SIX THOUSAND
+1EC92 ; [*1F86.0020.0002] # INDIC SIYAQ NUMBER SEVEN THOUSAND
+1EC93 ; [*1F87.0020.0002] # INDIC SIYAQ NUMBER EIGHT THOUSAND
+1EC94 ; [*1F88.0020.0002] # INDIC SIYAQ NUMBER NINE THOUSAND
+1EC95 ; [*1F89.0020.0002] # INDIC SIYAQ NUMBER TEN THOUSAND
+1EC96 ; [*1F8A.0020.0002] # INDIC SIYAQ NUMBER TWENTY THOUSAND
+1EC97 ; [*1F8B.0020.0002] # INDIC SIYAQ NUMBER THIRTY THOUSAND
+1EC98 ; [*1F8C.0020.0002] # INDIC SIYAQ NUMBER FORTY THOUSAND
+1EC99 ; [*1F8D.0020.0002] # INDIC SIYAQ NUMBER FIFTY THOUSAND
+1EC9A ; [*1F8E.0020.0002] # INDIC SIYAQ NUMBER SIXTY THOUSAND
+1EC9B ; [*1F8F.0020.0002] # INDIC SIYAQ NUMBER SEVENTY THOUSAND
+1EC9C ; [*1F90.0020.0002] # INDIC SIYAQ NUMBER EIGHTY THOUSAND
+1EC9D ; [*1F91.0020.0002] # INDIC SIYAQ NUMBER NINETY THOUSAND
+1EC9E ; [*1F92.0020.0002] # INDIC SIYAQ NUMBER LAKH
+1EC9F ; [*1F93.0020.0002] # INDIC SIYAQ NUMBER LAKHAN
+1ECA0 ; [*1F94.0020.0002] # INDIC SIYAQ LAKH MARK
+1ECA1 ; [*1F95.0020.0002] # INDIC SIYAQ NUMBER KAROR
+1ECA2 ; [*1F96.0020.0002] # INDIC SIYAQ NUMBER KARORAN
+1ECAC ; [*13C2.0020.0002] # INDIC SIYAQ PLACEHOLDER
+1ECAD ; [*1F97.0020.0002] # INDIC SIYAQ FRACTION ONE QUARTER
+1ECAE ; [*1F98.0020.0002] # INDIC SIYAQ FRACTION ONE HALF
+1ECAF ; [*1F99.0020.0002] # INDIC SIYAQ FRACTION THREE QUARTERS
+1ECB3 ; [*1F9A.0020.0002] # INDIC SIYAQ NUMBER ALTERNATE TEN THOUSAND
+1ECB4 ; [*1F9B.0020.0002] # INDIC SIYAQ ALTERNATE LAKH MARK
+1ED0A ; [*1F9C.0020.0002] # OTTOMAN SIYAQ NUMBER TEN
+1ED0B ; [*1F9D.0020.0002] # OTTOMAN SIYAQ NUMBER TWENTY
+1ED0C ; [*1F9E.0020.0002] # OTTOMAN SIYAQ NUMBER THIRTY
+1ED0D ; [*1F9F.0020.0002] # OTTOMAN SIYAQ NUMBER FORTY
+1ED0E ; [*1FA0.0020.0002] # OTTOMAN SIYAQ NUMBER FIFTY
+1ED0F ; [*1FA1.0020.0002] # OTTOMAN SIYAQ NUMBER SIXTY
+1ED10 ; [*1FA2.0020.0002] # OTTOMAN SIYAQ NUMBER SEVENTY
+1ED11 ; [*1FA3.0020.0002] # OTTOMAN SIYAQ NUMBER EIGHTY
+1ED12 ; [*1FA4.0020.0002] # OTTOMAN SIYAQ NUMBER NINETY
+1ED13 ; [*1FA5.0020.0002] # OTTOMAN SIYAQ NUMBER ONE HUNDRED
+1ED14 ; [*1FA6.0020.0002] # OTTOMAN SIYAQ NUMBER TWO HUNDRED
+1ED15 ; [*1FA7.0020.0002] # OTTOMAN SIYAQ NUMBER THREE HUNDRED
+1ED16 ; [*1FA8.0020.0002] # OTTOMAN SIYAQ NUMBER FOUR HUNDRED
+1ED17 ; [*1FA9.0020.0002] # OTTOMAN SIYAQ NUMBER FIVE HUNDRED
+1ED18 ; [*1FAA.0020.0002] # OTTOMAN SIYAQ NUMBER SIX HUNDRED
+1ED19 ; [*1FAB.0020.0002] # OTTOMAN SIYAQ NUMBER SEVEN HUNDRED
+1ED1A ; [*1FAC.0020.0002] # OTTOMAN SIYAQ NUMBER EIGHT HUNDRED
+1ED1B ; [*1FAD.0020.0002] # OTTOMAN SIYAQ NUMBER NINE HUNDRED
+1ED1C ; [*1FAE.0020.0002] # OTTOMAN SIYAQ NUMBER ONE THOUSAND
+1ED1D ; [*1FAF.0020.0002] # OTTOMAN SIYAQ NUMBER TWO THOUSAND
+1ED1E ; [*1FB0.0020.0002] # OTTOMAN SIYAQ NUMBER THREE THOUSAND
+1ED1F ; [*1FB1.0020.0002] # OTTOMAN SIYAQ NUMBER FOUR THOUSAND
+1ED20 ; [*1FB2.0020.0002] # OTTOMAN SIYAQ NUMBER FIVE THOUSAND
+1ED21 ; [*1FB3.0020.0002] # OTTOMAN SIYAQ NUMBER SIX THOUSAND
+1ED22 ; [*1FB4.0020.0002] # OTTOMAN SIYAQ NUMBER SEVEN THOUSAND
+1ED23 ; [*1FB5.0020.0002] # OTTOMAN SIYAQ NUMBER EIGHT THOUSAND
+1ED24 ; [*1FB6.0020.0002] # OTTOMAN SIYAQ NUMBER NINE THOUSAND
+1ED25 ; [*1FB7.0020.0002] # OTTOMAN SIYAQ NUMBER TEN THOUSAND
+1ED26 ; [*1FB8.0020.0002] # OTTOMAN SIYAQ NUMBER TWENTY THOUSAND
+1ED27 ; [*1FB9.0020.0002] # OTTOMAN SIYAQ NUMBER THIRTY THOUSAND
+1ED28 ; [*1FBA.0020.0002] # OTTOMAN SIYAQ NUMBER FORTY THOUSAND
+1ED29 ; [*1FBB.0020.0002] # OTTOMAN SIYAQ NUMBER FIFTY THOUSAND
+1ED2A ; [*1FBC.0020.0002] # OTTOMAN SIYAQ NUMBER SIXTY THOUSAND
+1ED2B ; [*1FBD.0020.0002] # OTTOMAN SIYAQ NUMBER SEVENTY THOUSAND
+1ED2C ; [*1FBE.0020.0002] # OTTOMAN SIYAQ NUMBER EIGHTY THOUSAND
+1ED2D ; [*1FBF.0020.0002] # OTTOMAN SIYAQ NUMBER NINETY THOUSAND
+1ED2E ; [*13C3.0020.0002] # OTTOMAN SIYAQ MARRATAN
+1ED37 ; [*1FC0.0020.0002] # OTTOMAN SIYAQ ALTERNATE NUMBER TEN
+1ED38 ; [*1FC1.0020.0002] # OTTOMAN SIYAQ ALTERNATE NUMBER FOUR HUNDRED
+1ED39 ; [*1FC2.0020.0002] # OTTOMAN SIYAQ ALTERNATE NUMBER SIX HUNDRED
+1ED3A ; [*1FC3.0020.0002] # OTTOMAN SIYAQ ALTERNATE NUMBER TWO THOUSAND
+1ED3B ; [*1FC4.0020.0002] # OTTOMAN SIYAQ ALTERNATE NUMBER TEN THOUSAND
+1ED3C ; [*1FC5.0020.0002] # OTTOMAN SIYAQ FRACTION ONE HALF
+1ED3D ; [*1FC6.0020.0002] # OTTOMAN SIYAQ FRACTION ONE SIXTH
+1EEF0 ; [*0551.0020.0002] # ARABIC MATHEMATICAL OPERATOR MEEM WITH HAH WITH TATWEEL
+1EEF1 ; [*0552.0020.0002] # ARABIC MATHEMATICAL OPERATOR HAH WITH DAL
+1F000 ; [*13C4.0020.0002] # MAHJONG TILE EAST WIND
+1F001 ; [*13C5.0020.0002] # MAHJONG TILE SOUTH WIND
+1F002 ; [*13C6.0020.0002] # MAHJONG TILE WEST WIND
+1F003 ; [*13C7.0020.0002] # MAHJONG TILE NORTH WIND
+1F004 ; [*13C8.0020.0002] # MAHJONG TILE RED DRAGON
+1F005 ; [*13C9.0020.0002] # MAHJONG TILE GREEN DRAGON
+1F006 ; [*13CA.0020.0002] # MAHJONG TILE WHITE DRAGON
+1F007 ; [*13CB.0020.0002] # MAHJONG TILE ONE OF CHARACTERS
+1F008 ; [*13CC.0020.0002] # MAHJONG TILE TWO OF CHARACTERS
+1F009 ; [*13CD.0020.0002] # MAHJONG TILE THREE OF CHARACTERS
+1F00A ; [*13CE.0020.0002] # MAHJONG TILE FOUR OF CHARACTERS
+1F00B ; [*13CF.0020.0002] # MAHJONG TILE FIVE OF CHARACTERS
+1F00C ; [*13D0.0020.0002] # MAHJONG TILE SIX OF CHARACTERS
+1F00D ; [*13D1.0020.0002] # MAHJONG TILE SEVEN OF CHARACTERS
+1F00E ; [*13D2.0020.0002] # MAHJONG TILE EIGHT OF CHARACTERS
+1F00F ; [*13D3.0020.0002] # MAHJONG TILE NINE OF CHARACTERS
+1F010 ; [*13D4.0020.0002] # MAHJONG TILE ONE OF BAMBOOS
+1F011 ; [*13D5.0020.0002] # MAHJONG TILE TWO OF BAMBOOS
+1F012 ; [*13D6.0020.0002] # MAHJONG TILE THREE OF BAMBOOS
+1F013 ; [*13D7.0020.0002] # MAHJONG TILE FOUR OF BAMBOOS
+1F014 ; [*13D8.0020.0002] # MAHJONG TILE FIVE OF BAMBOOS
+1F015 ; [*13D9.0020.0002] # MAHJONG TILE SIX OF BAMBOOS
+1F016 ; [*13DA.0020.0002] # MAHJONG TILE SEVEN OF BAMBOOS
+1F017 ; [*13DB.0020.0002] # MAHJONG TILE EIGHT OF BAMBOOS
+1F018 ; [*13DC.0020.0002] # MAHJONG TILE NINE OF BAMBOOS
+1F019 ; [*13DD.0020.0002] # MAHJONG TILE ONE OF CIRCLES
+1F01A ; [*13DE.0020.0002] # MAHJONG TILE TWO OF CIRCLES
+1F01B ; [*13DF.0020.0002] # MAHJONG TILE THREE OF CIRCLES
+1F01C ; [*13E0.0020.0002] # MAHJONG TILE FOUR OF CIRCLES
+1F01D ; [*13E1.0020.0002] # MAHJONG TILE FIVE OF CIRCLES
+1F01E ; [*13E2.0020.0002] # MAHJONG TILE SIX OF CIRCLES
+1F01F ; [*13E3.0020.0002] # MAHJONG TILE SEVEN OF CIRCLES
+1F020 ; [*13E4.0020.0002] # MAHJONG TILE EIGHT OF CIRCLES
+1F021 ; [*13E5.0020.0002] # MAHJONG TILE NINE OF CIRCLES
+1F022 ; [*13E6.0020.0002] # MAHJONG TILE PLUM
+1F023 ; [*13E7.0020.0002] # MAHJONG TILE ORCHID
+1F024 ; [*13E8.0020.0002] # MAHJONG TILE BAMBOO
+1F025 ; [*13E9.0020.0002] # MAHJONG TILE CHRYSANTHEMUM
+1F026 ; [*13EA.0020.0002] # MAHJONG TILE SPRING
+1F027 ; [*13EB.0020.0002] # MAHJONG TILE SUMMER
+1F028 ; [*13EC.0020.0002] # MAHJONG TILE AUTUMN
+1F029 ; [*13ED.0020.0002] # MAHJONG TILE WINTER
+1F02A ; [*13EE.0020.0002] # MAHJONG TILE JOKER
+1F02B ; [*13EF.0020.0002] # MAHJONG TILE BACK
+1F030 ; [*13F0.0020.0002] # DOMINO TILE HORIZONTAL BACK
+1F031 ; [*13F1.0020.0002] # DOMINO TILE HORIZONTAL-00-00
+1F032 ; [*13F2.0020.0002] # DOMINO TILE HORIZONTAL-00-01
+1F033 ; [*13F3.0020.0002] # DOMINO TILE HORIZONTAL-00-02
+1F034 ; [*13F4.0020.0002] # DOMINO TILE HORIZONTAL-00-03
+1F035 ; [*13F5.0020.0002] # DOMINO TILE HORIZONTAL-00-04
+1F036 ; [*13F6.0020.0002] # DOMINO TILE HORIZONTAL-00-05
+1F037 ; [*13F7.0020.0002] # DOMINO TILE HORIZONTAL-00-06
+1F038 ; [*13F8.0020.0002] # DOMINO TILE HORIZONTAL-01-00
+1F039 ; [*13F9.0020.0002] # DOMINO TILE HORIZONTAL-01-01
+1F03A ; [*13FA.0020.0002] # DOMINO TILE HORIZONTAL-01-02
+1F03B ; [*13FB.0020.0002] # DOMINO TILE HORIZONTAL-01-03
+1F03C ; [*13FC.0020.0002] # DOMINO TILE HORIZONTAL-01-04
+1F03D ; [*13FD.0020.0002] # DOMINO TILE HORIZONTAL-01-05
+1F03E ; [*13FE.0020.0002] # DOMINO TILE HORIZONTAL-01-06
+1F03F ; [*13FF.0020.0002] # DOMINO TILE HORIZONTAL-02-00
+1F040 ; [*1400.0020.0002] # DOMINO TILE HORIZONTAL-02-01
+1F041 ; [*1401.0020.0002] # DOMINO TILE HORIZONTAL-02-02
+1F042 ; [*1402.0020.0002] # DOMINO TILE HORIZONTAL-02-03
+1F043 ; [*1403.0020.0002] # DOMINO TILE HORIZONTAL-02-04
+1F044 ; [*1404.0020.0002] # DOMINO TILE HORIZONTAL-02-05
+1F045 ; [*1405.0020.0002] # DOMINO TILE HORIZONTAL-02-06
+1F046 ; [*1406.0020.0002] # DOMINO TILE HORIZONTAL-03-00
+1F047 ; [*1407.0020.0002] # DOMINO TILE HORIZONTAL-03-01
+1F048 ; [*1408.0020.0002] # DOMINO TILE HORIZONTAL-03-02
+1F049 ; [*1409.0020.0002] # DOMINO TILE HORIZONTAL-03-03
+1F04A ; [*140A.0020.0002] # DOMINO TILE HORIZONTAL-03-04
+1F04B ; [*140B.0020.0002] # DOMINO TILE HORIZONTAL-03-05
+1F04C ; [*140C.0020.0002] # DOMINO TILE HORIZONTAL-03-06
+1F04D ; [*140D.0020.0002] # DOMINO TILE HORIZONTAL-04-00
+1F04E ; [*140E.0020.0002] # DOMINO TILE HORIZONTAL-04-01
+1F04F ; [*140F.0020.0002] # DOMINO TILE HORIZONTAL-04-02
+1F050 ; [*1410.0020.0002] # DOMINO TILE HORIZONTAL-04-03
+1F051 ; [*1411.0020.0002] # DOMINO TILE HORIZONTAL-04-04
+1F052 ; [*1412.0020.0002] # DOMINO TILE HORIZONTAL-04-05
+1F053 ; [*1413.0020.0002] # DOMINO TILE HORIZONTAL-04-06
+1F054 ; [*1414.0020.0002] # DOMINO TILE HORIZONTAL-05-00
+1F055 ; [*1415.0020.0002] # DOMINO TILE HORIZONTAL-05-01
+1F056 ; [*1416.0020.0002] # DOMINO TILE HORIZONTAL-05-02
+1F057 ; [*1417.0020.0002] # DOMINO TILE HORIZONTAL-05-03
+1F058 ; [*1418.0020.0002] # DOMINO TILE HORIZONTAL-05-04
+1F059 ; [*1419.0020.0002] # DOMINO TILE HORIZONTAL-05-05
+1F05A ; [*141A.0020.0002] # DOMINO TILE HORIZONTAL-05-06
+1F05B ; [*141B.0020.0002] # DOMINO TILE HORIZONTAL-06-00
+1F05C ; [*141C.0020.0002] # DOMINO TILE HORIZONTAL-06-01
+1F05D ; [*141D.0020.0002] # DOMINO TILE HORIZONTAL-06-02
+1F05E ; [*141E.0020.0002] # DOMINO TILE HORIZONTAL-06-03
+1F05F ; [*141F.0020.0002] # DOMINO TILE HORIZONTAL-06-04
+1F060 ; [*1420.0020.0002] # DOMINO TILE HORIZONTAL-06-05
+1F061 ; [*1421.0020.0002] # DOMINO TILE HORIZONTAL-06-06
+1F062 ; [*1422.0020.0002] # DOMINO TILE VERTICAL BACK
+1F063 ; [*1423.0020.0002] # DOMINO TILE VERTICAL-00-00
+1F064 ; [*1424.0020.0002] # DOMINO TILE VERTICAL-00-01
+1F065 ; [*1425.0020.0002] # DOMINO TILE VERTICAL-00-02
+1F066 ; [*1426.0020.0002] # DOMINO TILE VERTICAL-00-03
+1F067 ; [*1427.0020.0002] # DOMINO TILE VERTICAL-00-04
+1F068 ; [*1428.0020.0002] # DOMINO TILE VERTICAL-00-05
+1F069 ; [*1429.0020.0002] # DOMINO TILE VERTICAL-00-06
+1F06A ; [*142A.0020.0002] # DOMINO TILE VERTICAL-01-00
+1F06B ; [*142B.0020.0002] # DOMINO TILE VERTICAL-01-01
+1F06C ; [*142C.0020.0002] # DOMINO TILE VERTICAL-01-02
+1F06D ; [*142D.0020.0002] # DOMINO TILE VERTICAL-01-03
+1F06E ; [*142E.0020.0002] # DOMINO TILE VERTICAL-01-04
+1F06F ; [*142F.0020.0002] # DOMINO TILE VERTICAL-01-05
+1F070 ; [*1430.0020.0002] # DOMINO TILE VERTICAL-01-06
+1F071 ; [*1431.0020.0002] # DOMINO TILE VERTICAL-02-00
+1F072 ; [*1432.0020.0002] # DOMINO TILE VERTICAL-02-01
+1F073 ; [*1433.0020.0002] # DOMINO TILE VERTICAL-02-02
+1F074 ; [*1434.0020.0002] # DOMINO TILE VERTICAL-02-03
+1F075 ; [*1435.0020.0002] # DOMINO TILE VERTICAL-02-04
+1F076 ; [*1436.0020.0002] # DOMINO TILE VERTICAL-02-05
+1F077 ; [*1437.0020.0002] # DOMINO TILE VERTICAL-02-06
+1F078 ; [*1438.0020.0002] # DOMINO TILE VERTICAL-03-00
+1F079 ; [*1439.0020.0002] # DOMINO TILE VERTICAL-03-01
+1F07A ; [*143A.0020.0002] # DOMINO TILE VERTICAL-03-02
+1F07B ; [*143B.0020.0002] # DOMINO TILE VERTICAL-03-03
+1F07C ; [*143C.0020.0002] # DOMINO TILE VERTICAL-03-04
+1F07D ; [*143D.0020.0002] # DOMINO TILE VERTICAL-03-05
+1F07E ; [*143E.0020.0002] # DOMINO TILE VERTICAL-03-06
+1F07F ; [*143F.0020.0002] # DOMINO TILE VERTICAL-04-00
+1F080 ; [*1440.0020.0002] # DOMINO TILE VERTICAL-04-01
+1F081 ; [*1441.0020.0002] # DOMINO TILE VERTICAL-04-02
+1F082 ; [*1442.0020.0002] # DOMINO TILE VERTICAL-04-03
+1F083 ; [*1443.0020.0002] # DOMINO TILE VERTICAL-04-04
+1F084 ; [*1444.0020.0002] # DOMINO TILE VERTICAL-04-05
+1F085 ; [*1445.0020.0002] # DOMINO TILE VERTICAL-04-06
+1F086 ; [*1446.0020.0002] # DOMINO TILE VERTICAL-05-00
+1F087 ; [*1447.0020.0002] # DOMINO TILE VERTICAL-05-01
+1F088 ; [*1448.0020.0002] # DOMINO TILE VERTICAL-05-02
+1F089 ; [*1449.0020.0002] # DOMINO TILE VERTICAL-05-03
+1F08A ; [*144A.0020.0002] # DOMINO TILE VERTICAL-05-04
+1F08B ; [*144B.0020.0002] # DOMINO TILE VERTICAL-05-05
+1F08C ; [*144C.0020.0002] # DOMINO TILE VERTICAL-05-06
+1F08D ; [*144D.0020.0002] # DOMINO TILE VERTICAL-06-00
+1F08E ; [*144E.0020.0002] # DOMINO TILE VERTICAL-06-01
+1F08F ; [*144F.0020.0002] # DOMINO TILE VERTICAL-06-02
+1F090 ; [*1450.0020.0002] # DOMINO TILE VERTICAL-06-03
+1F091 ; [*1451.0020.0002] # DOMINO TILE VERTICAL-06-04
+1F092 ; [*1452.0020.0002] # DOMINO TILE VERTICAL-06-05
+1F093 ; [*1453.0020.0002] # DOMINO TILE VERTICAL-06-06
+1F0A0 ; [*1454.0020.0002] # PLAYING CARD BACK
+1F0A1 ; [*1455.0020.0002] # PLAYING CARD ACE OF SPADES
+1F0A2 ; [*1456.0020.0002] # PLAYING CARD TWO OF SPADES
+1F0A3 ; [*1457.0020.0002] # PLAYING CARD THREE OF SPADES
+1F0A4 ; [*1458.0020.0002] # PLAYING CARD FOUR OF SPADES
+1F0A5 ; [*1459.0020.0002] # PLAYING CARD FIVE OF SPADES
+1F0A6 ; [*145A.0020.0002] # PLAYING CARD SIX OF SPADES
+1F0A7 ; [*145B.0020.0002] # PLAYING CARD SEVEN OF SPADES
+1F0A8 ; [*145C.0020.0002] # PLAYING CARD EIGHT OF SPADES
+1F0A9 ; [*145D.0020.0002] # PLAYING CARD NINE OF SPADES
+1F0AA ; [*145E.0020.0002] # PLAYING CARD TEN OF SPADES
+1F0AB ; [*145F.0020.0002] # PLAYING CARD JACK OF SPADES
+1F0AC ; [*1460.0020.0002] # PLAYING CARD KNIGHT OF SPADES
+1F0AD ; [*1461.0020.0002] # PLAYING CARD QUEEN OF SPADES
+1F0AE ; [*1462.0020.0002] # PLAYING CARD KING OF SPADES
+1F0B1 ; [*1463.0020.0002] # PLAYING CARD ACE OF HEARTS
+1F0B2 ; [*1464.0020.0002] # PLAYING CARD TWO OF HEARTS
+1F0B3 ; [*1465.0020.0002] # PLAYING CARD THREE OF HEARTS
+1F0B4 ; [*1466.0020.0002] # PLAYING CARD FOUR OF HEARTS
+1F0B5 ; [*1467.0020.0002] # PLAYING CARD FIVE OF HEARTS
+1F0B6 ; [*1468.0020.0002] # PLAYING CARD SIX OF HEARTS
+1F0B7 ; [*1469.0020.0002] # PLAYING CARD SEVEN OF HEARTS
+1F0B8 ; [*146A.0020.0002] # PLAYING CARD EIGHT OF HEARTS
+1F0B9 ; [*146B.0020.0002] # PLAYING CARD NINE OF HEARTS
+1F0BA ; [*146C.0020.0002] # PLAYING CARD TEN OF HEARTS
+1F0BB ; [*146D.0020.0002] # PLAYING CARD JACK OF HEARTS
+1F0BC ; [*146E.0020.0002] # PLAYING CARD KNIGHT OF HEARTS
+1F0BD ; [*146F.0020.0002] # PLAYING CARD QUEEN OF HEARTS
+1F0BE ; [*1470.0020.0002] # PLAYING CARD KING OF HEARTS
+1F0BF ; [*1471.0020.0002] # PLAYING CARD RED JOKER
+1F0C1 ; [*1472.0020.0002] # PLAYING CARD ACE OF DIAMONDS
+1F0C2 ; [*1473.0020.0002] # PLAYING CARD TWO OF DIAMONDS
+1F0C3 ; [*1474.0020.0002] # PLAYING CARD THREE OF DIAMONDS
+1F0C4 ; [*1475.0020.0002] # PLAYING CARD FOUR OF DIAMONDS
+1F0C5 ; [*1476.0020.0002] # PLAYING CARD FIVE OF DIAMONDS
+1F0C6 ; [*1477.0020.0002] # PLAYING CARD SIX OF DIAMONDS
+1F0C7 ; [*1478.0020.0002] # PLAYING CARD SEVEN OF DIAMONDS
+1F0C8 ; [*1479.0020.0002] # PLAYING CARD EIGHT OF DIAMONDS
+1F0C9 ; [*147A.0020.0002] # PLAYING CARD NINE OF DIAMONDS
+1F0CA ; [*147B.0020.0002] # PLAYING CARD TEN OF DIAMONDS
+1F0CB ; [*147C.0020.0002] # PLAYING CARD JACK OF DIAMONDS
+1F0CC ; [*147D.0020.0002] # PLAYING CARD KNIGHT OF DIAMONDS
+1F0CD ; [*147E.0020.0002] # PLAYING CARD QUEEN OF DIAMONDS
+1F0CE ; [*147F.0020.0002] # PLAYING CARD KING OF DIAMONDS
+1F0CF ; [*1480.0020.0002] # PLAYING CARD BLACK JOKER
+1F0D1 ; [*1481.0020.0002] # PLAYING CARD ACE OF CLUBS
+1F0D2 ; [*1482.0020.0002] # PLAYING CARD TWO OF CLUBS
+1F0D3 ; [*1483.0020.0002] # PLAYING CARD THREE OF CLUBS
+1F0D4 ; [*1484.0020.0002] # PLAYING CARD FOUR OF CLUBS
+1F0D5 ; [*1485.0020.0002] # PLAYING CARD FIVE OF CLUBS
+1F0D6 ; [*1486.0020.0002] # PLAYING CARD SIX OF CLUBS
+1F0D7 ; [*1487.0020.0002] # PLAYING CARD SEVEN OF CLUBS
+1F0D8 ; [*1488.0020.0002] # PLAYING CARD EIGHT OF CLUBS
+1F0D9 ; [*1489.0020.0002] # PLAYING CARD NINE OF CLUBS
+1F0DA ; [*148A.0020.0002] # PLAYING CARD TEN OF CLUBS
+1F0DB ; [*148B.0020.0002] # PLAYING CARD JACK OF CLUBS
+1F0DC ; [*148C.0020.0002] # PLAYING CARD KNIGHT OF CLUBS
+1F0DD ; [*148D.0020.0002] # PLAYING CARD QUEEN OF CLUBS
+1F0DE ; [*148E.0020.0002] # PLAYING CARD KING OF CLUBS
+1F0DF ; [*148F.0020.0002] # PLAYING CARD WHITE JOKER
+1F0E0 ; [*1490.0020.0002] # PLAYING CARD FOOL
+1F0E1 ; [*1491.0020.0002] # PLAYING CARD TRUMP-1
+1F0E2 ; [*1492.0020.0002] # PLAYING CARD TRUMP-2
+1F0E3 ; [*1493.0020.0002] # PLAYING CARD TRUMP-3
+1F0E4 ; [*1494.0020.0002] # PLAYING CARD TRUMP-4
+1F0E5 ; [*1495.0020.0002] # PLAYING CARD TRUMP-5
+1F0E6 ; [*1496.0020.0002] # PLAYING CARD TRUMP-6
+1F0E7 ; [*1497.0020.0002] # PLAYING CARD TRUMP-7
+1F0E8 ; [*1498.0020.0002] # PLAYING CARD TRUMP-8
+1F0E9 ; [*1499.0020.0002] # PLAYING CARD TRUMP-9
+1F0EA ; [*149A.0020.0002] # PLAYING CARD TRUMP-10
+1F0EB ; [*149B.0020.0002] # PLAYING CARD TRUMP-11
+1F0EC ; [*149C.0020.0002] # PLAYING CARD TRUMP-12
+1F0ED ; [*149D.0020.0002] # PLAYING CARD TRUMP-13
+1F0EE ; [*149E.0020.0002] # PLAYING CARD TRUMP-14
+1F0EF ; [*149F.0020.0002] # PLAYING CARD TRUMP-15
+1F0F0 ; [*14A0.0020.0002] # PLAYING CARD TRUMP-16
+1F0F1 ; [*14A1.0020.0002] # PLAYING CARD TRUMP-17
+1F0F2 ; [*14A2.0020.0002] # PLAYING CARD TRUMP-18
+1F0F3 ; [*14A3.0020.0002] # PLAYING CARD TRUMP-19
+1F0F4 ; [*14A4.0020.0002] # PLAYING CARD TRUMP-20
+1F0F5 ; [*14A5.0020.0002] # PLAYING CARD TRUMP-21
+1F10D ; [*1508.0020.0002] # CIRCLED ZERO WITH SLASH
+1F10E ; [*1509.0020.0002] # CIRCLED ANTICLOCKWISE ARROW
+1F10F ; [*150A.0020.0002] # CIRCLED DOLLAR SIGN WITH OVERLAID BACKSLASH
+1F12F ; [*060A.0020.0002] # COPYLEFT SYMBOL
+1F16D ; [*150B.0020.0002] # CIRCLED CC
+1F16E ; [*150C.0020.0002] # CIRCLED C WITH OVERLAID BACKSLASH
+1F16F ; [*150D.0020.0002] # CIRCLED HUMAN FIGURE
+1F1AD ; [*060C.0020.0002] # MASK WORK SYMBOL
+1F1E6 ; [*0B59.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER A
+1F1E7 ; [*0B5A.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER B
+1F1E8 ; [*0B5B.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER C
+1F1E9 ; [*0B5C.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER D
+1F1EA ; [*0B5D.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER E
+1F1EB ; [*0B5E.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER F
+1F1EC ; [*0B5F.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER G
+1F1ED ; [*0B60.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER H
+1F1EE ; [*0B61.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER I
+1F1EF ; [*0B62.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER J
+1F1F0 ; [*0B63.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER K
+1F1F1 ; [*0B64.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER L
+1F1F2 ; [*0B65.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER M
+1F1F3 ; [*0B66.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER N
+1F1F4 ; [*0B67.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER O
+1F1F5 ; [*0B68.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER P
+1F1F6 ; [*0B69.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER Q
+1F1F7 ; [*0B6A.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER R
+1F1F8 ; [*0B6B.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER S
+1F1F9 ; [*0B6C.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER T
+1F1FA ; [*0B6D.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER U
+1F1FB ; [*0B6E.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER V
+1F1FC ; [*0B6F.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER W
+1F1FD ; [*0B70.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER X
+1F1FE ; [*0B71.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER Y
+1F1FF ; [*0B72.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER Z
+1F260 ; [*150E.0020.0002] # ROUNDED SYMBOL FOR FU
+1F261 ; [*150F.0020.0002] # ROUNDED SYMBOL FOR LU
+1F262 ; [*1510.0020.0002] # ROUNDED SYMBOL FOR SHOU
+1F263 ; [*1511.0020.0002] # ROUNDED SYMBOL FOR XI
+1F264 ; [*1512.0020.0002] # ROUNDED SYMBOL FOR SHUANGXI
+1F265 ; [*1513.0020.0002] # ROUNDED SYMBOL FOR CAI
+1F300 ; [*1514.0020.0002] # CYCLONE
+1F301 ; [*1515.0020.0002] # FOGGY
+1F302 ; [*1516.0020.0002] # CLOSED UMBRELLA
+1F303 ; [*1517.0020.0002] # NIGHT WITH STARS
+1F304 ; [*1518.0020.0002] # SUNRISE OVER MOUNTAINS
+1F305 ; [*1519.0020.0002] # SUNRISE
+1F306 ; [*151A.0020.0002] # CITYSCAPE AT DUSK
+1F307 ; [*151B.0020.0002] # SUNSET OVER BUILDINGS
+1F308 ; [*151C.0020.0002] # RAINBOW
+1F309 ; [*151D.0020.0002] # BRIDGE AT NIGHT
+1F30A ; [*151E.0020.0002] # WATER WAVE
+1F30B ; [*151F.0020.0002] # VOLCANO
+1F30C ; [*1520.0020.0002] # MILKY WAY
+1F30D ; [*1521.0020.0002] # EARTH GLOBE EUROPE-AFRICA
+1F30E ; [*1522.0020.0002] # EARTH GLOBE AMERICAS
+1F30F ; [*1523.0020.0002] # EARTH GLOBE ASIA-AUSTRALIA
+1F310 ; [*1524.0020.0002] # GLOBE WITH MERIDIANS
+1F311 ; [*1525.0020.0002] # NEW MOON SYMBOL
+1F312 ; [*1526.0020.0002] # WAXING CRESCENT MOON SYMBOL
+1F313 ; [*1527.0020.0002] # FIRST QUARTER MOON SYMBOL
+1F314 ; [*1528.0020.0002] # WAXING GIBBOUS MOON SYMBOL
+1F315 ; [*1529.0020.0002] # FULL MOON SYMBOL
+1F316 ; [*152A.0020.0002] # WANING GIBBOUS MOON SYMBOL
+1F317 ; [*152B.0020.0002] # LAST QUARTER MOON SYMBOL
+1F318 ; [*152C.0020.0002] # WANING CRESCENT MOON SYMBOL
+1F319 ; [*152D.0020.0002] # CRESCENT MOON
+1F31A ; [*152E.0020.0002] # NEW MOON WITH FACE
+1F31B ; [*152F.0020.0002] # FIRST QUARTER MOON WITH FACE
+1F31C ; [*1530.0020.0002] # LAST QUARTER MOON WITH FACE
+1F31D ; [*1531.0020.0002] # FULL MOON WITH FACE
+1F31E ; [*1532.0020.0002] # SUN WITH FACE
+1F31F ; [*1533.0020.0002] # GLOWING STAR
+1F320 ; [*1534.0020.0002] # SHOOTING STAR
+1F321 ; [*1535.0020.0002] # THERMOMETER
+1F322 ; [*1536.0020.0002] # BLACK DROPLET
+1F323 ; [*1537.0020.0002] # WHITE SUN
+1F324 ; [*1538.0020.0002] # WHITE SUN WITH SMALL CLOUD
+1F325 ; [*1539.0020.0002] # WHITE SUN BEHIND CLOUD
+1F326 ; [*153A.0020.0002] # WHITE SUN BEHIND CLOUD WITH RAIN
+1F327 ; [*153B.0020.0002] # CLOUD WITH RAIN
+1F328 ; [*153C.0020.0002] # CLOUD WITH SNOW
+1F329 ; [*153D.0020.0002] # CLOUD WITH LIGHTNING
+1F32A ; [*153E.0020.0002] # CLOUD WITH TORNADO
+1F32B ; [*153F.0020.0002] # FOG
+1F32C ; [*1540.0020.0002] # WIND BLOWING FACE
+1F32D ; [*1541.0020.0002] # HOT DOG
+1F32E ; [*1542.0020.0002] # TACO
+1F32F ; [*1543.0020.0002] # BURRITO
+1F330 ; [*1544.0020.0002] # CHESTNUT
+1F331 ; [*1545.0020.0002] # SEEDLING
+1F332 ; [*1546.0020.0002] # EVERGREEN TREE
+1F333 ; [*1547.0020.0002] # DECIDUOUS TREE
+1F334 ; [*1548.0020.0002] # PALM TREE
+1F335 ; [*1549.0020.0002] # CACTUS
+1F336 ; [*154A.0020.0002] # HOT PEPPER
+1F337 ; [*154B.0020.0002] # TULIP
+1F338 ; [*154C.0020.0002] # CHERRY BLOSSOM
+1F339 ; [*154D.0020.0002] # ROSE
+1F33A ; [*154E.0020.0002] # HIBISCUS
+1F33B ; [*154F.0020.0002] # SUNFLOWER
+1F33C ; [*1550.0020.0002] # BLOSSOM
+1F33D ; [*1551.0020.0002] # EAR OF MAIZE
+1F33E ; [*1552.0020.0002] # EAR OF RICE
+1F33F ; [*1553.0020.0002] # HERB
+1F340 ; [*1554.0020.0002] # FOUR LEAF CLOVER
+1F341 ; [*1555.0020.0002] # MAPLE LEAF
+1F342 ; [*1556.0020.0002] # FALLEN LEAF
+1F343 ; [*1557.0020.0002] # LEAF FLUTTERING IN WIND
+1F344 ; [*1558.0020.0002] # MUSHROOM
+1F345 ; [*1559.0020.0002] # TOMATO
+1F346 ; [*155A.0020.0002] # AUBERGINE
+1F347 ; [*155B.0020.0002] # GRAPES
+1F348 ; [*155C.0020.0002] # MELON
+1F349 ; [*155D.0020.0002] # WATERMELON
+1F34A ; [*155E.0020.0002] # TANGERINE
+1F34B ; [*155F.0020.0002] # LEMON
+1F34C ; [*1560.0020.0002] # BANANA
+1F34D ; [*1561.0020.0002] # PINEAPPLE
+1F34E ; [*1562.0020.0002] # RED APPLE
+1F34F ; [*1563.0020.0002] # GREEN APPLE
+1F350 ; [*1564.0020.0002] # PEAR
+1F351 ; [*1565.0020.0002] # PEACH
+1F352 ; [*1566.0020.0002] # CHERRIES
+1F353 ; [*1567.0020.0002] # STRAWBERRY
+1F354 ; [*1568.0020.0002] # HAMBURGER
+1F355 ; [*1569.0020.0002] # SLICE OF PIZZA
+1F356 ; [*156A.0020.0002] # MEAT ON BONE
+1F357 ; [*156B.0020.0002] # POULTRY LEG
+1F358 ; [*156C.0020.0002] # RICE CRACKER
+1F359 ; [*156D.0020.0002] # RICE BALL
+1F35A ; [*156E.0020.0002] # COOKED RICE
+1F35B ; [*156F.0020.0002] # CURRY AND RICE
+1F35C ; [*1570.0020.0002] # STEAMING BOWL
+1F35D ; [*1571.0020.0002] # SPAGHETTI
+1F35E ; [*1572.0020.0002] # BREAD
+1F35F ; [*1573.0020.0002] # FRENCH FRIES
+1F360 ; [*1574.0020.0002] # ROASTED SWEET POTATO
+1F361 ; [*1575.0020.0002] # DANGO
+1F362 ; [*1576.0020.0002] # ODEN
+1F363 ; [*1577.0020.0002] # SUSHI
+1F364 ; [*1578.0020.0002] # FRIED SHRIMP
+1F365 ; [*1579.0020.0002] # FISH CAKE WITH SWIRL DESIGN
+1F366 ; [*157A.0020.0002] # SOFT ICE CREAM
+1F367 ; [*157B.0020.0002] # SHAVED ICE
+1F368 ; [*157C.0020.0002] # ICE CREAM
+1F369 ; [*157D.0020.0002] # DOUGHNUT
+1F36A ; [*157E.0020.0002] # COOKIE
+1F36B ; [*157F.0020.0002] # CHOCOLATE BAR
+1F36C ; [*1580.0020.0002] # CANDY
+1F36D ; [*1581.0020.0002] # LOLLIPOP
+1F36E ; [*1582.0020.0002] # CUSTARD
+1F36F ; [*1583.0020.0002] # HONEY POT
+1F370 ; [*1584.0020.0002] # SHORTCAKE
+1F371 ; [*1585.0020.0002] # BENTO BOX
+1F372 ; [*1586.0020.0002] # POT OF FOOD
+1F373 ; [*1587.0020.0002] # COOKING
+1F374 ; [*1588.0020.0002] # FORK AND KNIFE
+1F375 ; [*1589.0020.0002] # TEACUP WITHOUT HANDLE
+1F376 ; [*158A.0020.0002] # SAKE BOTTLE AND CUP
+1F377 ; [*158B.0020.0002] # WINE GLASS
+1F378 ; [*158C.0020.0002] # COCKTAIL GLASS
+1F379 ; [*158D.0020.0002] # TROPICAL DRINK
+1F37A ; [*158E.0020.0002] # BEER MUG
+1F37B ; [*158F.0020.0002] # CLINKING BEER MUGS
+1F37C ; [*1590.0020.0002] # BABY BOTTLE
+1F37D ; [*1591.0020.0002] # FORK AND KNIFE WITH PLATE
+1F37E ; [*1592.0020.0002] # BOTTLE WITH POPPING CORK
+1F37F ; [*1593.0020.0002] # POPCORN
+1F380 ; [*1594.0020.0002] # RIBBON
+1F381 ; [*1595.0020.0002] # WRAPPED PRESENT
+1F382 ; [*1596.0020.0002] # BIRTHDAY CAKE
+1F383 ; [*1597.0020.0002] # JACK-O-LANTERN
+1F384 ; [*1598.0020.0002] # CHRISTMAS TREE
+1F385 ; [*1599.0020.0002] # FATHER CHRISTMAS
+1F386 ; [*159A.0020.0002] # FIREWORKS
+1F387 ; [*159B.0020.0002] # FIREWORK SPARKLER
+1F388 ; [*159C.0020.0002] # BALLOON
+1F389 ; [*159D.0020.0002] # PARTY POPPER
+1F38A ; [*159E.0020.0002] # CONFETTI BALL
+1F38B ; [*159F.0020.0002] # TANABATA TREE
+1F38C ; [*15A0.0020.0002] # CROSSED FLAGS
+1F38D ; [*15A1.0020.0002] # PINE DECORATION
+1F38E ; [*15A2.0020.0002] # JAPANESE DOLLS
+1F38F ; [*15A3.0020.0002] # CARP STREAMER
+1F390 ; [*15A4.0020.0002] # WIND CHIME
+1F391 ; [*15A5.0020.0002] # MOON VIEWING CEREMONY
+1F392 ; [*15A6.0020.0002] # SCHOOL SATCHEL
+1F393 ; [*15A7.0020.0002] # GRADUATION CAP
+1F394 ; [*15A8.0020.0002] # HEART WITH TIP ON THE LEFT
+1F395 ; [*15A9.0020.0002] # BOUQUET OF FLOWERS
+1F396 ; [*15AA.0020.0002] # MILITARY MEDAL
+1F397 ; [*15AB.0020.0002] # REMINDER RIBBON
+1F398 ; [*15AC.0020.0002] # MUSICAL KEYBOARD WITH JACKS
+1F399 ; [*15AD.0020.0002] # STUDIO MICROPHONE
+1F39A ; [*15AE.0020.0002] # LEVEL SLIDER
+1F39B ; [*15AF.0020.0002] # CONTROL KNOBS
+1F39C ; [*15B0.0020.0002] # BEAMED ASCENDING MUSICAL NOTES
+1F39D ; [*15B1.0020.0002] # BEAMED DESCENDING MUSICAL NOTES
+1F39E ; [*15B2.0020.0002] # FILM FRAMES
+1F39F ; [*15B3.0020.0002] # ADMISSION TICKETS
+1F3A0 ; [*15B4.0020.0002] # CAROUSEL HORSE
+1F3A1 ; [*15B5.0020.0002] # FERRIS WHEEL
+1F3A2 ; [*15B6.0020.0002] # ROLLER COASTER
+1F3A3 ; [*15B7.0020.0002] # FISHING POLE AND FISH
+1F3A4 ; [*15B8.0020.0002] # MICROPHONE
+1F3A5 ; [*15B9.0020.0002] # MOVIE CAMERA
+1F3A6 ; [*15BA.0020.0002] # CINEMA
+1F3A7 ; [*15BB.0020.0002] # HEADPHONE
+1F3A8 ; [*15BC.0020.0002] # ARTIST PALETTE
+1F3A9 ; [*15BD.0020.0002] # TOP HAT
+1F3AA ; [*15BE.0020.0002] # CIRCUS TENT
+1F3AB ; [*15BF.0020.0002] # TICKET
+1F3AC ; [*15C0.0020.0002] # CLAPPER BOARD
+1F3AD ; [*15C1.0020.0002] # PERFORMING ARTS
+1F3AE ; [*15C2.0020.0002] # VIDEO GAME
+1F3AF ; [*15C3.0020.0002] # DIRECT HIT
+1F3B0 ; [*15C4.0020.0002] # SLOT MACHINE
+1F3B1 ; [*15C5.0020.0002] # BILLIARDS
+1F3B2 ; [*15C6.0020.0002] # GAME DIE
+1F3B3 ; [*15C7.0020.0002] # BOWLING
+1F3B4 ; [*15C8.0020.0002] # FLOWER PLAYING CARDS
+1F3B5 ; [*15C9.0020.0002] # MUSICAL NOTE
+1F3B6 ; [*15CA.0020.0002] # MULTIPLE MUSICAL NOTES
+1F3B7 ; [*15CB.0020.0002] # SAXOPHONE
+1F3B8 ; [*15CC.0020.0002] # GUITAR
+1F3B9 ; [*15CD.0020.0002] # MUSICAL KEYBOARD
+1F3BA ; [*15CE.0020.0002] # TRUMPET
+1F3BB ; [*15CF.0020.0002] # VIOLIN
+1F3BC ; [*15D0.0020.0002] # MUSICAL SCORE
+1F3BD ; [*15D1.0020.0002] # RUNNING SHIRT WITH SASH
+1F3BE ; [*15D2.0020.0002] # TENNIS RACQUET AND BALL
+1F3BF ; [*15D3.0020.0002] # SKI AND SKI BOOT
+1F3C0 ; [*15D4.0020.0002] # BASKETBALL AND HOOP
+1F3C1 ; [*15D5.0020.0002] # CHEQUERED FLAG
+1F3C2 ; [*15D6.0020.0002] # SNOWBOARDER
+1F3C3 ; [*15D7.0020.0002] # RUNNER
+1F3C4 ; [*15D8.0020.0002] # SURFER
+1F3C5 ; [*15D9.0020.0002] # SPORTS MEDAL
+1F3C6 ; [*15DA.0020.0002] # TROPHY
+1F3C7 ; [*15DB.0020.0002] # HORSE RACING
+1F3C8 ; [*15DC.0020.0002] # AMERICAN FOOTBALL
+1F3C9 ; [*15DD.0020.0002] # RUGBY FOOTBALL
+1F3CA ; [*15DE.0020.0002] # SWIMMER
+1F3CB ; [*15DF.0020.0002] # WEIGHT LIFTER
+1F3CC ; [*15E0.0020.0002] # GOLFER
+1F3CD ; [*15E1.0020.0002] # RACING MOTORCYCLE
+1F3CE ; [*15E2.0020.0002] # RACING CAR
+1F3CF ; [*15E3.0020.0002] # CRICKET BAT AND BALL
+1F3D0 ; [*15E4.0020.0002] # VOLLEYBALL
+1F3D1 ; [*15E5.0020.0002] # FIELD HOCKEY STICK AND BALL
+1F3D2 ; [*15E6.0020.0002] # ICE HOCKEY STICK AND PUCK
+1F3D3 ; [*15E7.0020.0002] # TABLE TENNIS PADDLE AND BALL
+1F3D4 ; [*15E8.0020.0002] # SNOW CAPPED MOUNTAIN
+1F3D5 ; [*15E9.0020.0002] # CAMPING
+1F3D6 ; [*15EA.0020.0002] # BEACH WITH UMBRELLA
+1F3D7 ; [*15EB.0020.0002] # BUILDING CONSTRUCTION
+1F3D8 ; [*15EC.0020.0002] # HOUSE BUILDINGS
+1F3D9 ; [*15ED.0020.0002] # CITYSCAPE
+1F3DA ; [*15EE.0020.0002] # DERELICT HOUSE BUILDING
+1F3DB ; [*15EF.0020.0002] # CLASSICAL BUILDING
+1F3DC ; [*15F0.0020.0002] # DESERT
+1F3DD ; [*15F1.0020.0002] # DESERT ISLAND
+1F3DE ; [*15F2.0020.0002] # NATIONAL PARK
+1F3DF ; [*15F3.0020.0002] # STADIUM
+1F3E0 ; [*15F4.0020.0002] # HOUSE BUILDING
+1F3E1 ; [*15F5.0020.0002] # HOUSE WITH GARDEN
+1F3E2 ; [*15F6.0020.0002] # OFFICE BUILDING
+1F3E3 ; [*15F7.0020.0002] # JAPANESE POST OFFICE
+1F3E4 ; [*15F8.0020.0002] # EUROPEAN POST OFFICE
+1F3E5 ; [*15F9.0020.0002] # HOSPITAL
+1F3E6 ; [*15FA.0020.0002] # BANK
+1F3E7 ; [*15FB.0020.0002] # AUTOMATED TELLER MACHINE
+1F3E8 ; [*15FC.0020.0002] # HOTEL
+1F3E9 ; [*15FD.0020.0002] # LOVE HOTEL
+1F3EA ; [*15FE.0020.0002] # CONVENIENCE STORE
+1F3EB ; [*15FF.0020.0002] # SCHOOL
+1F3EC ; [*1600.0020.0002] # DEPARTMENT STORE
+1F3ED ; [*1601.0020.0002] # FACTORY
+1F3EE ; [*1602.0020.0002] # IZAKAYA LANTERN
+1F3EF ; [*1603.0020.0002] # JAPANESE CASTLE
+1F3F0 ; [*1604.0020.0002] # EUROPEAN CASTLE
+1F3F1 ; [*1605.0020.0002] # WHITE PENNANT
+1F3F2 ; [*1606.0020.0002] # BLACK PENNANT
+1F3F3 ; [*1607.0020.0002] # WAVING WHITE FLAG
+1F3F4 ; [*1608.0020.0002] # WAVING BLACK FLAG
+1F3F5 ; [*1609.0020.0002] # ROSETTE
+1F3F6 ; [*160A.0020.0002] # BLACK ROSETTE
+1F3F7 ; [*160B.0020.0002] # LABEL
+1F3F8 ; [*160C.0020.0002] # BADMINTON RACQUET AND SHUTTLECOCK
+1F3F9 ; [*160D.0020.0002] # BOW AND ARROW
+1F3FA ; [*160E.0020.0002] # AMPHORA
+1F3FB ; [*160F.0020.0002] # EMOJI MODIFIER FITZPATRICK TYPE-1-2
+1F3FC ; [*1610.0020.0002] # EMOJI MODIFIER FITZPATRICK TYPE-3
+1F3FD ; [*1611.0020.0002] # EMOJI MODIFIER FITZPATRICK TYPE-4
+1F3FE ; [*1612.0020.0002] # EMOJI MODIFIER FITZPATRICK TYPE-5
+1F3FF ; [*1613.0020.0002] # EMOJI MODIFIER FITZPATRICK TYPE-6
+1F400 ; [*1614.0020.0002] # RAT
+1F401 ; [*1615.0020.0002] # MOUSE
+1F402 ; [*1616.0020.0002] # OX
+1F403 ; [*1617.0020.0002] # WATER BUFFALO
+1F404 ; [*1618.0020.0002] # COW
+1F405 ; [*1619.0020.0002] # TIGER
+1F406 ; [*161A.0020.0002] # LEOPARD
+1F407 ; [*161B.0020.0002] # RABBIT
+1F408 ; [*161C.0020.0002] # CAT
+1F409 ; [*161D.0020.0002] # DRAGON
+1F40A ; [*161E.0020.0002] # CROCODILE
+1F40B ; [*161F.0020.0002] # WHALE
+1F40C ; [*1620.0020.0002] # SNAIL
+1F40D ; [*1621.0020.0002] # SNAKE
+1F40E ; [*1622.0020.0002] # HORSE
+1F40F ; [*1623.0020.0002] # RAM
+1F410 ; [*1624.0020.0002] # GOAT
+1F411 ; [*1625.0020.0002] # SHEEP
+1F412 ; [*1626.0020.0002] # MONKEY
+1F413 ; [*1627.0020.0002] # ROOSTER
+1F414 ; [*1628.0020.0002] # CHICKEN
+1F415 ; [*1629.0020.0002] # DOG
+1F416 ; [*162A.0020.0002] # PIG
+1F417 ; [*162B.0020.0002] # BOAR
+1F418 ; [*162C.0020.0002] # ELEPHANT
+1F419 ; [*162D.0020.0002] # OCTOPUS
+1F41A ; [*162E.0020.0002] # SPIRAL SHELL
+1F41B ; [*162F.0020.0002] # BUG
+1F41C ; [*1630.0020.0002] # ANT
+1F41D ; [*1631.0020.0002] # HONEYBEE
+1F41E ; [*1632.0020.0002] # LADY BEETLE
+1F41F ; [*1633.0020.0002] # FISH
+1F420 ; [*1634.0020.0002] # TROPICAL FISH
+1F421 ; [*1635.0020.0002] # BLOWFISH
+1F422 ; [*1636.0020.0002] # TURTLE
+1F423 ; [*1637.0020.0002] # HATCHING CHICK
+1F424 ; [*1638.0020.0002] # BABY CHICK
+1F425 ; [*1639.0020.0002] # FRONT-FACING BABY CHICK
+1F426 ; [*163A.0020.0002] # BIRD
+1F427 ; [*163B.0020.0002] # PENGUIN
+1F428 ; [*163C.0020.0002] # KOALA
+1F429 ; [*163D.0020.0002] # POODLE
+1F42A ; [*163E.0020.0002] # DROMEDARY CAMEL
+1F42B ; [*163F.0020.0002] # BACTRIAN CAMEL
+1F42C ; [*1640.0020.0002] # DOLPHIN
+1F42D ; [*1641.0020.0002] # MOUSE FACE
+1F42E ; [*1642.0020.0002] # COW FACE
+1F42F ; [*1643.0020.0002] # TIGER FACE
+1F430 ; [*1644.0020.0002] # RABBIT FACE
+1F431 ; [*1645.0020.0002] # CAT FACE
+1F432 ; [*1646.0020.0002] # DRAGON FACE
+1F433 ; [*1647.0020.0002] # SPOUTING WHALE
+1F434 ; [*1648.0020.0002] # HORSE FACE
+1F435 ; [*1649.0020.0002] # MONKEY FACE
+1F436 ; [*164A.0020.0002] # DOG FACE
+1F437 ; [*164B.0020.0002] # PIG FACE
+1F438 ; [*164C.0020.0002] # FROG FACE
+1F439 ; [*164D.0020.0002] # HAMSTER FACE
+1F43A ; [*164E.0020.0002] # WOLF FACE
+1F43B ; [*164F.0020.0002] # BEAR FACE
+1F43C ; [*1650.0020.0002] # PANDA FACE
+1F43D ; [*1651.0020.0002] # PIG NOSE
+1F43E ; [*1652.0020.0002] # PAW PRINTS
+1F43F ; [*1653.0020.0002] # CHIPMUNK
+1F440 ; [*1654.0020.0002] # EYES
+1F441 ; [*1655.0020.0002] # EYE
+1F442 ; [*1656.0020.0002] # EAR
+1F443 ; [*1657.0020.0002] # NOSE
+1F444 ; [*1658.0020.0002] # MOUTH
+1F445 ; [*1659.0020.0002] # TONGUE
+1F446 ; [*165A.0020.0002] # WHITE UP POINTING BACKHAND INDEX
+1F447 ; [*165B.0020.0002] # WHITE DOWN POINTING BACKHAND INDEX
+1F448 ; [*165C.0020.0002] # WHITE LEFT POINTING BACKHAND INDEX
+1F449 ; [*165D.0020.0002] # WHITE RIGHT POINTING BACKHAND INDEX
+1F44A ; [*165E.0020.0002] # FISTED HAND SIGN
+1F44B ; [*165F.0020.0002] # WAVING HAND SIGN
+1F44C ; [*1660.0020.0002] # OK HAND SIGN
+1F44D ; [*1661.0020.0002] # THUMBS UP SIGN
+1F44E ; [*1662.0020.0002] # THUMBS DOWN SIGN
+1F44F ; [*1663.0020.0002] # CLAPPING HANDS SIGN
+1F450 ; [*1664.0020.0002] # OPEN HANDS SIGN
+1F451 ; [*1665.0020.0002] # CROWN
+1F452 ; [*1666.0020.0002] # WOMANS HAT
+1F453 ; [*1667.0020.0002] # EYEGLASSES
+1F454 ; [*1668.0020.0002] # NECKTIE
+1F455 ; [*1669.0020.0002] # T-SHIRT
+1F456 ; [*166A.0020.0002] # JEANS
+1F457 ; [*166B.0020.0002] # DRESS
+1F458 ; [*166C.0020.0002] # KIMONO
+1F459 ; [*166D.0020.0002] # BIKINI
+1F45A ; [*166E.0020.0002] # WOMANS CLOTHES
+1F45B ; [*166F.0020.0002] # PURSE
+1F45C ; [*1670.0020.0002] # HANDBAG
+1F45D ; [*1671.0020.0002] # POUCH
+1F45E ; [*1672.0020.0002] # MANS SHOE
+1F45F ; [*1673.0020.0002] # ATHLETIC SHOE
+1F460 ; [*1674.0020.0002] # HIGH-HEELED SHOE
+1F461 ; [*1675.0020.0002] # WOMANS SANDAL
+1F462 ; [*1676.0020.0002] # WOMANS BOOTS
+1F463 ; [*1677.0020.0002] # FOOTPRINTS
+1F464 ; [*1678.0020.0002] # BUST IN SILHOUETTE
+1F465 ; [*1679.0020.0002] # BUSTS IN SILHOUETTE
+1F466 ; [*167A.0020.0002] # BOY
+1F467 ; [*167B.0020.0002] # GIRL
+1F468 ; [*167C.0020.0002] # MAN
+1F469 ; [*167D.0020.0002] # WOMAN
+1F46A ; [*167E.0020.0002] # FAMILY
+1F46B ; [*167F.0020.0002] # MAN AND WOMAN HOLDING HANDS
+1F46C ; [*1680.0020.0002] # TWO MEN HOLDING HANDS
+1F46D ; [*1681.0020.0002] # TWO WOMEN HOLDING HANDS
+1F46E ; [*1682.0020.0002] # POLICE OFFICER
+1F46F ; [*1683.0020.0002] # WOMAN WITH BUNNY EARS
+1F470 ; [*1684.0020.0002] # BRIDE WITH VEIL
+1F471 ; [*1685.0020.0002] # PERSON WITH BLOND HAIR
+1F472 ; [*1686.0020.0002] # MAN WITH GUA PI MAO
+1F473 ; [*1687.0020.0002] # MAN WITH TURBAN
+1F474 ; [*1688.0020.0002] # OLDER MAN
+1F475 ; [*1689.0020.0002] # OLDER WOMAN
+1F476 ; [*168A.0020.0002] # BABY
+1F477 ; [*168B.0020.0002] # CONSTRUCTION WORKER
+1F478 ; [*168C.0020.0002] # PRINCESS
+1F479 ; [*168D.0020.0002] # JAPANESE OGRE
+1F47A ; [*168E.0020.0002] # JAPANESE GOBLIN
+1F47B ; [*168F.0020.0002] # GHOST
+1F47C ; [*1690.0020.0002] # BABY ANGEL
+1F47D ; [*1691.0020.0002] # EXTRATERRESTRIAL ALIEN
+1F47E ; [*1692.0020.0002] # ALIEN MONSTER
+1F47F ; [*1693.0020.0002] # IMP
+1F480 ; [*1694.0020.0002] # SKULL
+1F481 ; [*1695.0020.0002] # INFORMATION DESK PERSON
+1F482 ; [*1696.0020.0002] # GUARDSMAN
+1F483 ; [*1697.0020.0002] # DANCER
+1F484 ; [*1698.0020.0002] # LIPSTICK
+1F485 ; [*1699.0020.0002] # NAIL POLISH
+1F486 ; [*169A.0020.0002] # FACE MASSAGE
+1F487 ; [*169B.0020.0002] # HAIRCUT
+1F488 ; [*169C.0020.0002] # BARBER POLE
+1F489 ; [*169D.0020.0002] # SYRINGE
+1F48A ; [*169E.0020.0002] # PILL
+1F48B ; [*169F.0020.0002] # KISS MARK
+1F48C ; [*16A0.0020.0002] # LOVE LETTER
+1F48D ; [*16A1.0020.0002] # RING
+1F48E ; [*16A2.0020.0002] # GEM STONE
+1F48F ; [*16A3.0020.0002] # KISS
+1F490 ; [*16A4.0020.0002] # BOUQUET
+1F491 ; [*16A5.0020.0002] # COUPLE WITH HEART
+1F492 ; [*16A6.0020.0002] # WEDDING
+1F493 ; [*16A7.0020.0002] # BEATING HEART
+1F494 ; [*16A8.0020.0002] # BROKEN HEART
+1F495 ; [*16A9.0020.0002] # TWO HEARTS
+1F496 ; [*16AA.0020.0002] # SPARKLING HEART
+1F497 ; [*16AB.0020.0002] # GROWING HEART
+1F498 ; [*16AC.0020.0002] # HEART WITH ARROW
+1F499 ; [*16AD.0020.0002] # BLUE HEART
+1F49A ; [*16AE.0020.0002] # GREEN HEART
+1F49B ; [*16AF.0020.0002] # YELLOW HEART
+1F49C ; [*16B0.0020.0002] # PURPLE HEART
+1F49D ; [*16B1.0020.0002] # HEART WITH RIBBON
+1F49E ; [*16B2.0020.0002] # REVOLVING HEARTS
+1F49F ; [*16B3.0020.0002] # HEART DECORATION
+1F4A0 ; [*16B4.0020.0002] # DIAMOND SHAPE WITH A DOT INSIDE
+1F4A1 ; [*16B5.0020.0002] # ELECTRIC LIGHT BULB
+1F4A2 ; [*16B6.0020.0002] # ANGER SYMBOL
+1F4A3 ; [*16B7.0020.0002] # BOMB
+1F4A4 ; [*16B8.0020.0002] # SLEEPING SYMBOL
+1F4A5 ; [*16B9.0020.0002] # COLLISION SYMBOL
+1F4A6 ; [*16BA.0020.0002] # SPLASHING SWEAT SYMBOL
+1F4A7 ; [*16BB.0020.0002] # DROPLET
+1F4A8 ; [*16BC.0020.0002] # DASH SYMBOL
+1F4A9 ; [*16BD.0020.0002] # PILE OF POO
+1F4AA ; [*16BE.0020.0002] # FLEXED BICEPS
+1F4AB ; [*16BF.0020.0002] # DIZZY SYMBOL
+1F4AC ; [*16C0.0020.0002] # SPEECH BALLOON
+1F4AD ; [*16C1.0020.0002] # THOUGHT BALLOON
+1F4AE ; [*16C2.0020.0002] # WHITE FLOWER
+1F4AF ; [*16C3.0020.0002] # HUNDRED POINTS SYMBOL
+1F4B0 ; [*16C4.0020.0002] # MONEY BAG
+1F4B1 ; [*16C5.0020.0002] # CURRENCY EXCHANGE
+1F4B2 ; [*16C6.0020.0002] # HEAVY DOLLAR SIGN
+1F4B3 ; [*16C7.0020.0002] # CREDIT CARD
+1F4B4 ; [*16C8.0020.0002] # BANKNOTE WITH YEN SIGN
+1F4B5 ; [*16C9.0020.0002] # BANKNOTE WITH DOLLAR SIGN
+1F4B6 ; [*16CA.0020.0002] # BANKNOTE WITH EURO SIGN
+1F4B7 ; [*16CB.0020.0002] # BANKNOTE WITH POUND SIGN
+1F4B8 ; [*16CC.0020.0002] # MONEY WITH WINGS
+1F4B9 ; [*16CD.0020.0002] # CHART WITH UPWARDS TREND AND YEN SIGN
+1F4BA ; [*16CE.0020.0002] # SEAT
+1F4BB ; [*16CF.0020.0002] # PERSONAL COMPUTER
+1F4BC ; [*16D0.0020.0002] # BRIEFCASE
+1F4BD ; [*16D1.0020.0002] # MINIDISC
+1F4BE ; [*16D2.0020.0002] # FLOPPY DISK
+1F4BF ; [*16D3.0020.0002] # OPTICAL DISC
+1F4C0 ; [*16D4.0020.0002] # DVD
+1F4C1 ; [*16D5.0020.0002] # FILE FOLDER
+1F4C2 ; [*16D6.0020.0002] # OPEN FILE FOLDER
+1F4C3 ; [*16D7.0020.0002] # PAGE WITH CURL
+1F4C4 ; [*16D8.0020.0002] # PAGE FACING UP
+1F4C5 ; [*16D9.0020.0002] # CALENDAR
+1F4C6 ; [*16DA.0020.0002] # TEAR-OFF CALENDAR
+1F4C7 ; [*16DB.0020.0002] # CARD INDEX
+1F4C8 ; [*16DC.0020.0002] # CHART WITH UPWARDS TREND
+1F4C9 ; [*16DD.0020.0002] # CHART WITH DOWNWARDS TREND
+1F4CA ; [*16DE.0020.0002] # BAR CHART
+1F4CB ; [*16DF.0020.0002] # CLIPBOARD
+1F4CC ; [*16E0.0020.0002] # PUSHPIN
+1F4CD ; [*16E1.0020.0002] # ROUND PUSHPIN
+1F4CE ; [*16E2.0020.0002] # PAPERCLIP
+1F4CF ; [*16E3.0020.0002] # STRAIGHT RULER
+1F4D0 ; [*16E4.0020.0002] # TRIANGULAR RULER
+1F4D1 ; [*16E5.0020.0002] # BOOKMARK TABS
+1F4D2 ; [*16E6.0020.0002] # LEDGER
+1F4D3 ; [*16E7.0020.0002] # NOTEBOOK
+1F4D4 ; [*16E8.0020.0002] # NOTEBOOK WITH DECORATIVE COVER
+1F4D5 ; [*16E9.0020.0002] # CLOSED BOOK
+1F4D6 ; [*16EA.0020.0002] # OPEN BOOK
+1F4D7 ; [*16EB.0020.0002] # GREEN BOOK
+1F4D8 ; [*16EC.0020.0002] # BLUE BOOK
+1F4D9 ; [*16ED.0020.0002] # ORANGE BOOK
+1F4DA ; [*16EE.0020.0002] # BOOKS
+1F4DB ; [*16EF.0020.0002] # NAME BADGE
+1F4DC ; [*16F0.0020.0002] # SCROLL
+1F4DD ; [*16F1.0020.0002] # MEMO
+1F4DE ; [*16F2.0020.0002] # TELEPHONE RECEIVER
+1F4DF ; [*16F3.0020.0002] # PAGER
+1F4E0 ; [*16F4.0020.0002] # FAX MACHINE
+1F4E1 ; [*16F5.0020.0002] # SATELLITE ANTENNA
+1F4E2 ; [*16F6.0020.0002] # PUBLIC ADDRESS LOUDSPEAKER
+1F4E3 ; [*16F7.0020.0002] # CHEERING MEGAPHONE
+1F4E4 ; [*16F8.0020.0002] # OUTBOX TRAY
+1F4E5 ; [*16F9.0020.0002] # INBOX TRAY
+1F4E6 ; [*16FA.0020.0002] # PACKAGE
+1F4E7 ; [*16FB.0020.0002] # E-MAIL SYMBOL
+1F4E8 ; [*16FC.0020.0002] # INCOMING ENVELOPE
+1F4E9 ; [*16FD.0020.0002] # ENVELOPE WITH DOWNWARDS ARROW ABOVE
+1F4EA ; [*16FE.0020.0002] # CLOSED MAILBOX WITH LOWERED FLAG
+1F4EB ; [*16FF.0020.0002] # CLOSED MAILBOX WITH RAISED FLAG
+1F4EC ; [*1700.0020.0002] # OPEN MAILBOX WITH RAISED FLAG
+1F4ED ; [*1701.0020.0002] # OPEN MAILBOX WITH LOWERED FLAG
+1F4EE ; [*1702.0020.0002] # POSTBOX
+1F4EF ; [*1703.0020.0002] # POSTAL HORN
+1F4F0 ; [*1704.0020.0002] # NEWSPAPER
+1F4F1 ; [*1705.0020.0002] # MOBILE PHONE
+1F4F2 ; [*1706.0020.0002] # MOBILE PHONE WITH RIGHTWARDS ARROW AT LEFT
+1F4F3 ; [*1707.0020.0002] # VIBRATION MODE
+1F4F4 ; [*1708.0020.0002] # MOBILE PHONE OFF
+1F4F5 ; [*1709.0020.0002] # NO MOBILE PHONES
+1F4F6 ; [*170A.0020.0002] # ANTENNA WITH BARS
+1F4F7 ; [*170B.0020.0002] # CAMERA
+1F4F8 ; [*170C.0020.0002] # CAMERA WITH FLASH
+1F4F9 ; [*170D.0020.0002] # VIDEO CAMERA
+1F4FA ; [*170E.0020.0002] # TELEVISION
+1F4FB ; [*170F.0020.0002] # RADIO
+1F4FC ; [*1710.0020.0002] # VIDEOCASSETTE
+1F4FD ; [*1711.0020.0002] # FILM PROJECTOR
+1F4FE ; [*1712.0020.0002] # PORTABLE STEREO
+1F4FF ; [*1713.0020.0002] # PRAYER BEADS
+1F500 ; [*1714.0020.0002] # TWISTED RIGHTWARDS ARROWS
+1F501 ; [*1715.0020.0002] # CLOCKWISE RIGHTWARDS AND LEFTWARDS OPEN CIRCLE ARROWS
+1F502 ; [*1716.0020.0002] # CLOCKWISE RIGHTWARDS AND LEFTWARDS OPEN CIRCLE ARROWS WITH CIRCLED ONE OVERLAY
+1F503 ; [*1717.0020.0002] # CLOCKWISE DOWNWARDS AND UPWARDS OPEN CIRCLE ARROWS
+1F504 ; [*1718.0020.0002] # ANTICLOCKWISE DOWNWARDS AND UPWARDS OPEN CIRCLE ARROWS
+1F505 ; [*1719.0020.0002] # LOW BRIGHTNESS SYMBOL
+1F506 ; [*171A.0020.0002] # HIGH BRIGHTNESS SYMBOL
+1F507 ; [*171B.0020.0002] # SPEAKER WITH CANCELLATION STROKE
+1F508 ; [*171C.0020.0002] # SPEAKER
+1F509 ; [*171D.0020.0002] # SPEAKER WITH ONE SOUND WAVE
+1F50A ; [*171E.0020.0002] # SPEAKER WITH THREE SOUND WAVES
+1F50B ; [*171F.0020.0002] # BATTERY
+1F50C ; [*1720.0020.0002] # ELECTRIC PLUG
+1F50D ; [*1721.0020.0002] # LEFT-POINTING MAGNIFYING GLASS
+1F50E ; [*1722.0020.0002] # RIGHT-POINTING MAGNIFYING GLASS
+1F50F ; [*1723.0020.0002] # LOCK WITH INK PEN
+1F510 ; [*1724.0020.0002] # CLOSED LOCK WITH KEY
+1F511 ; [*1725.0020.0002] # KEY
+1F512 ; [*1726.0020.0002] # LOCK
+1F513 ; [*1727.0020.0002] # OPEN LOCK
+1F514 ; [*1728.0020.0002] # BELL
+1F515 ; [*1729.0020.0002] # BELL WITH CANCELLATION STROKE
+1F516 ; [*172A.0020.0002] # BOOKMARK
+1F517 ; [*172B.0020.0002] # LINK SYMBOL
+1F518 ; [*172C.0020.0002] # RADIO BUTTON
+1F519 ; [*172D.0020.0002] # BACK WITH LEFTWARDS ARROW ABOVE
+1F51A ; [*172E.0020.0002] # END WITH LEFTWARDS ARROW ABOVE
+1F51B ; [*172F.0020.0002] # ON WITH EXCLAMATION MARK WITH LEFT RIGHT ARROW ABOVE
+1F51C ; [*1730.0020.0002] # SOON WITH RIGHTWARDS ARROW ABOVE
+1F51D ; [*1731.0020.0002] # TOP WITH UPWARDS ARROW ABOVE
+1F51E ; [*1732.0020.0002] # NO ONE UNDER EIGHTEEN SYMBOL
+1F51F ; [*1733.0020.0002] # KEYCAP TEN
+1F520 ; [*1734.0020.0002] # INPUT SYMBOL FOR LATIN CAPITAL LETTERS
+1F521 ; [*1735.0020.0002] # INPUT SYMBOL FOR LATIN SMALL LETTERS
+1F522 ; [*1736.0020.0002] # INPUT SYMBOL FOR NUMBERS
+1F523 ; [*1737.0020.0002] # INPUT SYMBOL FOR SYMBOLS
+1F524 ; [*1738.0020.0002] # INPUT SYMBOL FOR LATIN LETTERS
+1F525 ; [*1739.0020.0002] # FIRE
+1F526 ; [*173A.0020.0002] # ELECTRIC TORCH
+1F527 ; [*173B.0020.0002] # WRENCH
+1F528 ; [*173C.0020.0002] # HAMMER
+1F529 ; [*173D.0020.0002] # NUT AND BOLT
+1F52A ; [*173E.0020.0002] # HOCHO
+1F52B ; [*173F.0020.0002] # PISTOL
+1F52C ; [*1740.0020.0002] # MICROSCOPE
+1F52D ; [*1741.0020.0002] # TELESCOPE
+1F52E ; [*1742.0020.0002] # CRYSTAL BALL
+1F52F ; [*1743.0020.0002] # SIX POINTED STAR WITH MIDDLE DOT
+1F530 ; [*1744.0020.0002] # JAPANESE SYMBOL FOR BEGINNER
+1F531 ; [*1745.0020.0002] # TRIDENT EMBLEM
+1F532 ; [*1746.0020.0002] # BLACK SQUARE BUTTON
+1F533 ; [*1747.0020.0002] # WHITE SQUARE BUTTON
+1F534 ; [*1748.0020.0002] # LARGE RED CIRCLE
+1F535 ; [*1749.0020.0002] # LARGE BLUE CIRCLE
+1F536 ; [*174A.0020.0002] # LARGE ORANGE DIAMOND
+1F537 ; [*174B.0020.0002] # LARGE BLUE DIAMOND
+1F538 ; [*174C.0020.0002] # SMALL ORANGE DIAMOND
+1F539 ; [*174D.0020.0002] # SMALL BLUE DIAMOND
+1F53A ; [*174E.0020.0002] # UP-POINTING RED TRIANGLE
+1F53B ; [*174F.0020.0002] # DOWN-POINTING RED TRIANGLE
+1F53C ; [*1750.0020.0002] # UP-POINTING SMALL RED TRIANGLE
+1F53D ; [*1751.0020.0002] # DOWN-POINTING SMALL RED TRIANGLE
+1F53E ; [*1752.0020.0002] # LOWER RIGHT SHADOWED WHITE CIRCLE
+1F53F ; [*1753.0020.0002] # UPPER RIGHT SHADOWED WHITE CIRCLE
+1F540 ; [*1754.0020.0002] # CIRCLED CROSS POMMEE
+1F541 ; [*1755.0020.0002] # CROSS POMMEE WITH HALF-CIRCLE BELOW
+1F542 ; [*1756.0020.0002] # CROSS POMMEE
+1F543 ; [*1757.0020.0002] # NOTCHED LEFT SEMICIRCLE WITH THREE DOTS
+1F544 ; [*1758.0020.0002] # NOTCHED RIGHT SEMICIRCLE WITH THREE DOTS
+1F545 ; [*1759.0020.0002] # SYMBOL FOR MARKS CHAPTER
+1F546 ; [*175A.0020.0002] # WHITE LATIN CROSS
+1F547 ; [*175B.0020.0002] # HEAVY LATIN CROSS
+1F548 ; [*175C.0020.0002] # CELTIC CROSS
+1F549 ; [*175D.0020.0002] # OM SYMBOL
+1F54A ; [*175E.0020.0002] # DOVE OF PEACE
+1F54B ; [*175F.0020.0002] # KAABA
+1F54C ; [*1760.0020.0002] # MOSQUE
+1F54D ; [*1761.0020.0002] # SYNAGOGUE
+1F54E ; [*1762.0020.0002] # MENORAH WITH NINE BRANCHES
+1F54F ; [*1763.0020.0002] # BOWL OF HYGIEIA
+1F550 ; [*1764.0020.0002] # CLOCK FACE ONE OCLOCK
+1F551 ; [*1765.0020.0002] # CLOCK FACE TWO OCLOCK
+1F552 ; [*1766.0020.0002] # CLOCK FACE THREE OCLOCK
+1F553 ; [*1767.0020.0002] # CLOCK FACE FOUR OCLOCK
+1F554 ; [*1768.0020.0002] # CLOCK FACE FIVE OCLOCK
+1F555 ; [*1769.0020.0002] # CLOCK FACE SIX OCLOCK
+1F556 ; [*176A.0020.0002] # CLOCK FACE SEVEN OCLOCK
+1F557 ; [*176B.0020.0002] # CLOCK FACE EIGHT OCLOCK
+1F558 ; [*176C.0020.0002] # CLOCK FACE NINE OCLOCK
+1F559 ; [*176D.0020.0002] # CLOCK FACE TEN OCLOCK
+1F55A ; [*176E.0020.0002] # CLOCK FACE ELEVEN OCLOCK
+1F55B ; [*176F.0020.0002] # CLOCK FACE TWELVE OCLOCK
+1F55C ; [*1770.0020.0002] # CLOCK FACE ONE-THIRTY
+1F55D ; [*1771.0020.0002] # CLOCK FACE TWO-THIRTY
+1F55E ; [*1772.0020.0002] # CLOCK FACE THREE-THIRTY
+1F55F ; [*1773.0020.0002] # CLOCK FACE FOUR-THIRTY
+1F560 ; [*1774.0020.0002] # CLOCK FACE FIVE-THIRTY
+1F561 ; [*1775.0020.0002] # CLOCK FACE SIX-THIRTY
+1F562 ; [*1776.0020.0002] # CLOCK FACE SEVEN-THIRTY
+1F563 ; [*1777.0020.0002] # CLOCK FACE EIGHT-THIRTY
+1F564 ; [*1778.0020.0002] # CLOCK FACE NINE-THIRTY
+1F565 ; [*1779.0020.0002] # CLOCK FACE TEN-THIRTY
+1F566 ; [*177A.0020.0002] # CLOCK FACE ELEVEN-THIRTY
+1F567 ; [*177B.0020.0002] # CLOCK FACE TWELVE-THIRTY
+1F568 ; [*177C.0020.0002] # RIGHT SPEAKER
+1F569 ; [*177D.0020.0002] # RIGHT SPEAKER WITH ONE SOUND WAVE
+1F56A ; [*177E.0020.0002] # RIGHT SPEAKER WITH THREE SOUND WAVES
+1F56B ; [*177F.0020.0002] # BULLHORN
+1F56C ; [*1780.0020.0002] # BULLHORN WITH SOUND WAVES
+1F56D ; [*1781.0020.0002] # RINGING BELL
+1F56E ; [*1782.0020.0002] # BOOK
+1F56F ; [*1783.0020.0002] # CANDLE
+1F570 ; [*1784.0020.0002] # MANTELPIECE CLOCK
+1F571 ; [*1785.0020.0002] # BLACK SKULL AND CROSSBONES
+1F572 ; [*1786.0020.0002] # NO PIRACY
+1F573 ; [*1787.0020.0002] # HOLE
+1F574 ; [*1788.0020.0002] # MAN IN BUSINESS SUIT LEVITATING
+1F575 ; [*1789.0020.0002] # SLEUTH OR SPY
+1F576 ; [*178A.0020.0002] # DARK SUNGLASSES
+1F577 ; [*178B.0020.0002] # SPIDER
+1F578 ; [*178C.0020.0002] # SPIDER WEB
+1F579 ; [*178D.0020.0002] # JOYSTICK
+1F57A ; [*178E.0020.0002] # MAN DANCING
+1F57B ; [*178F.0020.0002] # LEFT HAND TELEPHONE RECEIVER
+1F57C ; [*1790.0020.0002] # TELEPHONE RECEIVER WITH PAGE
+1F57D ; [*1791.0020.0002] # RIGHT HAND TELEPHONE RECEIVER
+1F57E ; [*1792.0020.0002] # WHITE TOUCHTONE TELEPHONE
+1F57F ; [*1793.0020.0002] # BLACK TOUCHTONE TELEPHONE
+1F580 ; [*1794.0020.0002] # TELEPHONE ON TOP OF MODEM
+1F581 ; [*1795.0020.0002] # CLAMSHELL MOBILE PHONE
+1F582 ; [*1796.0020.0002] # BACK OF ENVELOPE
+1F583 ; [*1797.0020.0002] # STAMPED ENVELOPE
+1F584 ; [*1798.0020.0002] # ENVELOPE WITH LIGHTNING
+1F585 ; [*1799.0020.0002] # FLYING ENVELOPE
+1F586 ; [*179A.0020.0002] # PEN OVER STAMPED ENVELOPE
+1F587 ; [*179B.0020.0002] # LINKED PAPERCLIPS
+1F588 ; [*179C.0020.0002] # BLACK PUSHPIN
+1F589 ; [*179D.0020.0002] # LOWER LEFT PENCIL
+1F58A ; [*179E.0020.0002] # LOWER LEFT BALLPOINT PEN
+1F58B ; [*179F.0020.0002] # LOWER LEFT FOUNTAIN PEN
+1F58C ; [*17A0.0020.0002] # LOWER LEFT PAINTBRUSH
+1F58D ; [*17A1.0020.0002] # LOWER LEFT CRAYON
+1F58E ; [*17A2.0020.0002] # LEFT WRITING HAND
+1F58F ; [*17A3.0020.0002] # TURNED OK HAND SIGN
+1F590 ; [*17A4.0020.0002] # RAISED HAND WITH FINGERS SPLAYED
+1F591 ; [*17A5.0020.0002] # REVERSED RAISED HAND WITH FINGERS SPLAYED
+1F592 ; [*17A6.0020.0002] # REVERSED THUMBS UP SIGN
+1F593 ; [*17A7.0020.0002] # REVERSED THUMBS DOWN SIGN
+1F594 ; [*17A8.0020.0002] # REVERSED VICTORY HAND
+1F595 ; [*17A9.0020.0002] # REVERSED HAND WITH MIDDLE FINGER EXTENDED
+1F596 ; [*17AA.0020.0002] # RAISED HAND WITH PART BETWEEN MIDDLE AND RING FINGERS
+1F597 ; [*17AB.0020.0002] # WHITE DOWN POINTING LEFT HAND INDEX
+1F598 ; [*17AC.0020.0002] # SIDEWAYS WHITE LEFT POINTING INDEX
+1F599 ; [*17AD.0020.0002] # SIDEWAYS WHITE RIGHT POINTING INDEX
+1F59A ; [*17AE.0020.0002] # SIDEWAYS BLACK LEFT POINTING INDEX
+1F59B ; [*17AF.0020.0002] # SIDEWAYS BLACK RIGHT POINTING INDEX
+1F59C ; [*17B0.0020.0002] # BLACK LEFT POINTING BACKHAND INDEX
+1F59D ; [*17B1.0020.0002] # BLACK RIGHT POINTING BACKHAND INDEX
+1F59E ; [*17B2.0020.0002] # SIDEWAYS WHITE UP POINTING INDEX
+1F59F ; [*17B3.0020.0002] # SIDEWAYS WHITE DOWN POINTING INDEX
+1F5A0 ; [*17B4.0020.0002] # SIDEWAYS BLACK UP POINTING INDEX
+1F5A1 ; [*17B5.0020.0002] # SIDEWAYS BLACK DOWN POINTING INDEX
+1F5A2 ; [*17B6.0020.0002] # BLACK UP POINTING BACKHAND INDEX
+1F5A3 ; [*17B7.0020.0002] # BLACK DOWN POINTING BACKHAND INDEX
+1F5A4 ; [*17B8.0020.0002] # BLACK HEART
+1F5A5 ; [*17B9.0020.0002] # DESKTOP COMPUTER
+1F5A6 ; [*17BA.0020.0002] # KEYBOARD AND MOUSE
+1F5A7 ; [*17BB.0020.0002] # THREE NETWORKED COMPUTERS
+1F5A8 ; [*17BC.0020.0002] # PRINTER
+1F5A9 ; [*17BD.0020.0002] # POCKET CALCULATOR
+1F5AA ; [*17BE.0020.0002] # BLACK HARD SHELL FLOPPY DISK
+1F5AB ; [*17BF.0020.0002] # WHITE HARD SHELL FLOPPY DISK
+1F5AC ; [*17C0.0020.0002] # SOFT SHELL FLOPPY DISK
+1F5AD ; [*17C1.0020.0002] # TAPE CARTRIDGE
+1F5AE ; [*17C2.0020.0002] # WIRED KEYBOARD
+1F5AF ; [*17C3.0020.0002] # ONE BUTTON MOUSE
+1F5B0 ; [*17C4.0020.0002] # TWO BUTTON MOUSE
+1F5B1 ; [*17C5.0020.0002] # THREE BUTTON MOUSE
+1F5B2 ; [*17C6.0020.0002] # TRACKBALL
+1F5B3 ; [*17C7.0020.0002] # OLD PERSONAL COMPUTER
+1F5B4 ; [*17C8.0020.0002] # HARD DISK
+1F5B5 ; [*17C9.0020.0002] # SCREEN
+1F5B6 ; [*17CA.0020.0002] # PRINTER ICON
+1F5B7 ; [*17CB.0020.0002] # FAX ICON
+1F5B8 ; [*17CC.0020.0002] # OPTICAL DISC ICON
+1F5B9 ; [*17CD.0020.0002] # DOCUMENT WITH TEXT
+1F5BA ; [*17CE.0020.0002] # DOCUMENT WITH TEXT AND PICTURE
+1F5BB ; [*17CF.0020.0002] # DOCUMENT WITH PICTURE
+1F5BC ; [*17D0.0020.0002] # FRAME WITH PICTURE
+1F5BD ; [*17D1.0020.0002] # FRAME WITH TILES
+1F5BE ; [*17D2.0020.0002] # FRAME WITH AN X
+1F5BF ; [*17D3.0020.0002] # BLACK FOLDER
+1F5C0 ; [*17D4.0020.0002] # FOLDER
+1F5C1 ; [*17D5.0020.0002] # OPEN FOLDER
+1F5C2 ; [*17D6.0020.0002] # CARD INDEX DIVIDERS
+1F5C3 ; [*17D7.0020.0002] # CARD FILE BOX
+1F5C4 ; [*17D8.0020.0002] # FILE CABINET
+1F5C5 ; [*17D9.0020.0002] # EMPTY NOTE
+1F5C6 ; [*17DA.0020.0002] # EMPTY NOTE PAGE
+1F5C7 ; [*17DB.0020.0002] # EMPTY NOTE PAD
+1F5C8 ; [*17DC.0020.0002] # NOTE
+1F5C9 ; [*17DD.0020.0002] # NOTE PAGE
+1F5CA ; [*17DE.0020.0002] # NOTE PAD
+1F5CB ; [*17DF.0020.0002] # EMPTY DOCUMENT
+1F5CC ; [*17E0.0020.0002] # EMPTY PAGE
+1F5CD ; [*17E1.0020.0002] # EMPTY PAGES
+1F5CE ; [*17E2.0020.0002] # DOCUMENT
+1F5CF ; [*17E3.0020.0002] # PAGE
+1F5D0 ; [*17E4.0020.0002] # PAGES
+1F5D1 ; [*17E5.0020.0002] # WASTEBASKET
+1F5D2 ; [*17E6.0020.0002] # SPIRAL NOTE PAD
+1F5D3 ; [*17E7.0020.0002] # SPIRAL CALENDAR PAD
+1F5D4 ; [*17E8.0020.0002] # DESKTOP WINDOW
+1F5D5 ; [*17E9.0020.0002] # MINIMIZE
+1F5D6 ; [*17EA.0020.0002] # MAXIMIZE
+1F5D7 ; [*17EB.0020.0002] # OVERLAP
+1F5D8 ; [*17EC.0020.0002] # CLOCKWISE RIGHT AND LEFT SEMICIRCLE ARROWS
+1F5D9 ; [*17ED.0020.0002] # CANCELLATION X
+1F5DA ; [*17EE.0020.0002] # INCREASE FONT SIZE SYMBOL
+1F5DB ; [*17EF.0020.0002] # DECREASE FONT SIZE SYMBOL
+1F5DC ; [*17F0.0020.0002] # COMPRESSION
+1F5DD ; [*17F1.0020.0002] # OLD KEY
+1F5DE ; [*17F2.0020.0002] # ROLLED-UP NEWSPAPER
+1F5DF ; [*17F3.0020.0002] # PAGE WITH CIRCLED TEXT
+1F5E0 ; [*17F4.0020.0002] # STOCK CHART
+1F5E1 ; [*17F5.0020.0002] # DAGGER KNIFE
+1F5E2 ; [*17F6.0020.0002] # LIPS
+1F5E3 ; [*17F7.0020.0002] # SPEAKING HEAD IN SILHOUETTE
+1F5E4 ; [*17F8.0020.0002] # THREE RAYS ABOVE
+1F5E5 ; [*17F9.0020.0002] # THREE RAYS BELOW
+1F5E6 ; [*17FA.0020.0002] # THREE RAYS LEFT
+1F5E7 ; [*17FB.0020.0002] # THREE RAYS RIGHT
+1F5E8 ; [*17FC.0020.0002] # LEFT SPEECH BUBBLE
+1F5E9 ; [*17FD.0020.0002] # RIGHT SPEECH BUBBLE
+1F5EA ; [*17FE.0020.0002] # TWO SPEECH BUBBLES
+1F5EB ; [*17FF.0020.0002] # THREE SPEECH BUBBLES
+1F5EC ; [*1800.0020.0002] # LEFT THOUGHT BUBBLE
+1F5ED ; [*1801.0020.0002] # RIGHT THOUGHT BUBBLE
+1F5EE ; [*1802.0020.0002] # LEFT ANGER BUBBLE
+1F5EF ; [*1803.0020.0002] # RIGHT ANGER BUBBLE
+1F5F0 ; [*1804.0020.0002] # MOOD BUBBLE
+1F5F1 ; [*1805.0020.0002] # LIGHTNING MOOD BUBBLE
+1F5F2 ; [*1806.0020.0002] # LIGHTNING MOOD
+1F5F3 ; [*1807.0020.0002] # BALLOT BOX WITH BALLOT
+1F5F4 ; [*1808.0020.0002] # BALLOT SCRIPT X
+1F5F5 ; [*1809.0020.0002] # BALLOT BOX WITH SCRIPT X
+1F5F6 ; [*180A.0020.0002] # BALLOT BOLD SCRIPT X
+1F5F7 ; [*180B.0020.0002] # BALLOT BOX WITH BOLD SCRIPT X
+1F5F8 ; [*180C.0020.0002] # LIGHT CHECK MARK
+1F5F9 ; [*180D.0020.0002] # BALLOT BOX WITH BOLD CHECK
+1F5FA ; [*180E.0020.0002] # WORLD MAP
+1F5FB ; [*180F.0020.0002] # MOUNT FUJI
+1F5FC ; [*1810.0020.0002] # TOKYO TOWER
+1F5FD ; [*1811.0020.0002] # STATUE OF LIBERTY
+1F5FE ; [*1812.0020.0002] # SILHOUETTE OF JAPAN
+1F5FF ; [*1813.0020.0002] # MOYAI
+1F600 ; [*196C.0020.0002] # GRINNING FACE
+1F601 ; [*196D.0020.0002] # GRINNING FACE WITH SMILING EYES
+1F602 ; [*196E.0020.0002] # FACE WITH TEARS OF JOY
+1F603 ; [*196F.0020.0002] # SMILING FACE WITH OPEN MOUTH
+1F604 ; [*1970.0020.0002] # SMILING FACE WITH OPEN MOUTH AND SMILING EYES
+1F605 ; [*1971.0020.0002] # SMILING FACE WITH OPEN MOUTH AND COLD SWEAT
+1F606 ; [*1972.0020.0002] # SMILING FACE WITH OPEN MOUTH AND TIGHTLY-CLOSED EYES
+1F607 ; [*1973.0020.0002] # SMILING FACE WITH HALO
+1F608 ; [*1974.0020.0002] # SMILING FACE WITH HORNS
+1F609 ; [*1975.0020.0002] # WINKING FACE
+1F60A ; [*1976.0020.0002] # SMILING FACE WITH SMILING EYES
+1F60B ; [*1977.0020.0002] # FACE SAVOURING DELICIOUS FOOD
+1F60C ; [*1978.0020.0002] # RELIEVED FACE
+1F60D ; [*1979.0020.0002] # SMILING FACE WITH HEART-SHAPED EYES
+1F60E ; [*197A.0020.0002] # SMILING FACE WITH SUNGLASSES
+1F60F ; [*197B.0020.0002] # SMIRKING FACE
+1F610 ; [*197C.0020.0002] # NEUTRAL FACE
+1F611 ; [*197D.0020.0002] # EXPRESSIONLESS FACE
+1F612 ; [*197E.0020.0002] # UNAMUSED FACE
+1F613 ; [*197F.0020.0002] # FACE WITH COLD SWEAT
+1F614 ; [*1980.0020.0002] # PENSIVE FACE
+1F615 ; [*1981.0020.0002] # CONFUSED FACE
+1F616 ; [*1982.0020.0002] # CONFOUNDED FACE
+1F617 ; [*1983.0020.0002] # KISSING FACE
+1F618 ; [*1984.0020.0002] # FACE THROWING A KISS
+1F619 ; [*1985.0020.0002] # KISSING FACE WITH SMILING EYES
+1F61A ; [*1986.0020.0002] # KISSING FACE WITH CLOSED EYES
+1F61B ; [*1987.0020.0002] # FACE WITH STUCK-OUT TONGUE
+1F61C ; [*1988.0020.0002] # FACE WITH STUCK-OUT TONGUE AND WINKING EYE
+1F61D ; [*1989.0020.0002] # FACE WITH STUCK-OUT TONGUE AND TIGHTLY-CLOSED EYES
+1F61E ; [*198A.0020.0002] # DISAPPOINTED FACE
+1F61F ; [*198B.0020.0002] # WORRIED FACE
+1F620 ; [*198C.0020.0002] # ANGRY FACE
+1F621 ; [*198D.0020.0002] # POUTING FACE
+1F622 ; [*198E.0020.0002] # CRYING FACE
+1F623 ; [*198F.0020.0002] # PERSEVERING FACE
+1F624 ; [*1990.0020.0002] # FACE WITH LOOK OF TRIUMPH
+1F625 ; [*1991.0020.0002] # DISAPPOINTED BUT RELIEVED FACE
+1F626 ; [*1992.0020.0002] # FROWNING FACE WITH OPEN MOUTH
+1F627 ; [*1993.0020.0002] # ANGUISHED FACE
+1F628 ; [*1994.0020.0002] # FEARFUL FACE
+1F629 ; [*1995.0020.0002] # WEARY FACE
+1F62A ; [*1996.0020.0002] # SLEEPY FACE
+1F62B ; [*1997.0020.0002] # TIRED FACE
+1F62C ; [*1998.0020.0002] # GRIMACING FACE
+1F62D ; [*1999.0020.0002] # LOUDLY CRYING FACE
+1F62E ; [*199A.0020.0002] # FACE WITH OPEN MOUTH
+1F62F ; [*199B.0020.0002] # HUSHED FACE
+1F630 ; [*199C.0020.0002] # FACE WITH OPEN MOUTH AND COLD SWEAT
+1F631 ; [*199D.0020.0002] # FACE SCREAMING IN FEAR
+1F632 ; [*199E.0020.0002] # ASTONISHED FACE
+1F633 ; [*199F.0020.0002] # FLUSHED FACE
+1F634 ; [*19A0.0020.0002] # SLEEPING FACE
+1F635 ; [*19A1.0020.0002] # DIZZY FACE
+1F636 ; [*19A2.0020.0002] # FACE WITHOUT MOUTH
+1F637 ; [*19A3.0020.0002] # FACE WITH MEDICAL MASK
+1F638 ; [*19A4.0020.0002] # GRINNING CAT FACE WITH SMILING EYES
+1F639 ; [*19A5.0020.0002] # CAT FACE WITH TEARS OF JOY
+1F63A ; [*19A6.0020.0002] # SMILING CAT FACE WITH OPEN MOUTH
+1F63B ; [*19A7.0020.0002] # SMILING CAT FACE WITH HEART-SHAPED EYES
+1F63C ; [*19A8.0020.0002] # CAT FACE WITH WRY SMILE
+1F63D ; [*19A9.0020.0002] # KISSING CAT FACE WITH CLOSED EYES
+1F63E ; [*19AA.0020.0002] # POUTING CAT FACE
+1F63F ; [*19AB.0020.0002] # CRYING CAT FACE
+1F640 ; [*19AC.0020.0002] # WEARY CAT FACE
+1F641 ; [*19AD.0020.0002] # SLIGHTLY FROWNING FACE
+1F642 ; [*19AE.0020.0002] # SLIGHTLY SMILING FACE
+1F643 ; [*19AF.0020.0002] # UPSIDE-DOWN FACE
+1F644 ; [*19B0.0020.0002] # FACE WITH ROLLING EYES
+1F645 ; [*19B1.0020.0002] # FACE WITH NO GOOD GESTURE
+1F646 ; [*19B2.0020.0002] # FACE WITH OK GESTURE
+1F647 ; [*19B3.0020.0002] # PERSON BOWING DEEPLY
+1F648 ; [*19B4.0020.0002] # SEE-NO-EVIL MONKEY
+1F649 ; [*19B5.0020.0002] # HEAR-NO-EVIL MONKEY
+1F64A ; [*19B6.0020.0002] # SPEAK-NO-EVIL MONKEY
+1F64B ; [*19B7.0020.0002] # HAPPY PERSON RAISING ONE HAND
+1F64C ; [*19B8.0020.0002] # PERSON RAISING BOTH HANDS IN CELEBRATION
+1F64D ; [*19B9.0020.0002] # PERSON FROWNING
+1F64E ; [*19BA.0020.0002] # PERSON WITH POUTING FACE
+1F64F ; [*19BB.0020.0002] # PERSON WITH FOLDED HANDS
+1F650 ; [*19BC.0020.0002] # NORTH WEST POINTING LEAF
+1F651 ; [*19BD.0020.0002] # SOUTH WEST POINTING LEAF
+1F652 ; [*19BE.0020.0002] # NORTH EAST POINTING LEAF
+1F653 ; [*19BF.0020.0002] # SOUTH EAST POINTING LEAF
+1F654 ; [*19C0.0020.0002] # TURNED NORTH WEST POINTING LEAF
+1F655 ; [*19C1.0020.0002] # TURNED SOUTH WEST POINTING LEAF
+1F656 ; [*19C2.0020.0002] # TURNED NORTH EAST POINTING LEAF
+1F657 ; [*19C3.0020.0002] # TURNED SOUTH EAST POINTING LEAF
+1F658 ; [*19C4.0020.0002] # NORTH WEST POINTING VINE LEAF
+1F659 ; [*19C5.0020.0002] # SOUTH WEST POINTING VINE LEAF
+1F65A ; [*19C6.0020.0002] # NORTH EAST POINTING VINE LEAF
+1F65B ; [*19C7.0020.0002] # SOUTH EAST POINTING VINE LEAF
+1F65C ; [*19C8.0020.0002] # HEAVY NORTH WEST POINTING VINE LEAF
+1F65D ; [*19C9.0020.0002] # HEAVY SOUTH WEST POINTING VINE LEAF
+1F65E ; [*19CA.0020.0002] # HEAVY NORTH EAST POINTING VINE LEAF
+1F65F ; [*19CB.0020.0002] # HEAVY SOUTH EAST POINTING VINE LEAF
+1F660 ; [*19CC.0020.0002] # NORTH WEST POINTING BUD
+1F661 ; [*19CD.0020.0002] # SOUTH WEST POINTING BUD
+1F662 ; [*19CE.0020.0002] # NORTH EAST POINTING BUD
+1F663 ; [*19CF.0020.0002] # SOUTH EAST POINTING BUD
+1F664 ; [*19D0.0020.0002] # HEAVY NORTH WEST POINTING BUD
+1F665 ; [*19D1.0020.0002] # HEAVY SOUTH WEST POINTING BUD
+1F666 ; [*19D2.0020.0002] # HEAVY NORTH EAST POINTING BUD
+1F667 ; [*19D3.0020.0002] # HEAVY SOUTH EAST POINTING BUD
+1F668 ; [*19D4.0020.0002] # HOLLOW QUILT SQUARE ORNAMENT
+1F669 ; [*19D5.0020.0002] # HOLLOW QUILT SQUARE ORNAMENT IN BLACK SQUARE
+1F66A ; [*19D6.0020.0002] # SOLID QUILT SQUARE ORNAMENT
+1F66B ; [*19D7.0020.0002] # SOLID QUILT SQUARE ORNAMENT IN BLACK SQUARE
+1F66C ; [*19D8.0020.0002] # LEFTWARDS ROCKET
+1F66D ; [*19D9.0020.0002] # UPWARDS ROCKET
+1F66E ; [*19DA.0020.0002] # RIGHTWARDS ROCKET
+1F66F ; [*19DB.0020.0002] # DOWNWARDS ROCKET
+1F670 ; [*19DC.0020.0002] # SCRIPT LIGATURE ET ORNAMENT
+1F671 ; [*19DD.0020.0002] # HEAVY SCRIPT LIGATURE ET ORNAMENT
+1F672 ; [*19DE.0020.0002] # LIGATURE OPEN ET ORNAMENT
+1F673 ; [*19DF.0020.0002] # HEAVY LIGATURE OPEN ET ORNAMENT
+1F674 ; [*19E0.0020.0002] # HEAVY AMPERSAND ORNAMENT
+1F675 ; [*19E1.0020.0002] # SWASH AMPERSAND ORNAMENT
+1F676 ; [*19E2.0020.0002] # SANS-SERIF HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT
+1F677 ; [*19E3.0020.0002] # SANS-SERIF HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT
+1F678 ; [*19E4.0020.0002] # SANS-SERIF HEAVY LOW DOUBLE COMMA QUOTATION MARK ORNAMENT
+1F679 ; [*19E5.0020.0002] # HEAVY INTERROBANG ORNAMENT
+1F67A ; [*19E6.0020.0002] # SANS-SERIF INTERROBANG ORNAMENT
+1F67B ; [*19E7.0020.0002] # HEAVY SANS-SERIF INTERROBANG ORNAMENT
+1F67C ; [*19E8.0020.0002] # VERY HEAVY SOLIDUS
+1F67D ; [*19E9.0020.0002] # VERY HEAVY REVERSE SOLIDUS
+1F67E ; [*19EA.0020.0002] # CHECKER BOARD
+1F67F ; [*19EB.0020.0002] # REVERSE CHECKER BOARD
+1F680 ; [*19EC.0020.0002] # ROCKET
+1F681 ; [*19ED.0020.0002] # HELICOPTER
+1F682 ; [*19EE.0020.0002] # STEAM LOCOMOTIVE
+1F683 ; [*19EF.0020.0002] # RAILWAY CAR
+1F684 ; [*19F0.0020.0002] # HIGH-SPEED TRAIN
+1F685 ; [*19F1.0020.0002] # HIGH-SPEED TRAIN WITH BULLET NOSE
+1F686 ; [*19F2.0020.0002] # TRAIN
+1F687 ; [*19F3.0020.0002] # METRO
+1F688 ; [*19F4.0020.0002] # LIGHT RAIL
+1F689 ; [*19F5.0020.0002] # STATION
+1F68A ; [*19F6.0020.0002] # TRAM
+1F68B ; [*19F7.0020.0002] # TRAM CAR
+1F68C ; [*19F8.0020.0002] # BUS
+1F68D ; [*19F9.0020.0002] # ONCOMING BUS
+1F68E ; [*19FA.0020.0002] # TROLLEYBUS
+1F68F ; [*19FB.0020.0002] # BUS STOP
+1F690 ; [*19FC.0020.0002] # MINIBUS
+1F691 ; [*19FD.0020.0002] # AMBULANCE
+1F692 ; [*19FE.0020.0002] # FIRE ENGINE
+1F693 ; [*19FF.0020.0002] # POLICE CAR
+1F694 ; [*1A00.0020.0002] # ONCOMING POLICE CAR
+1F695 ; [*1A01.0020.0002] # TAXI
+1F696 ; [*1A02.0020.0002] # ONCOMING TAXI
+1F697 ; [*1A03.0020.0002] # AUTOMOBILE
+1F698 ; [*1A04.0020.0002] # ONCOMING AUTOMOBILE
+1F699 ; [*1A05.0020.0002] # RECREATIONAL VEHICLE
+1F69A ; [*1A06.0020.0002] # DELIVERY TRUCK
+1F69B ; [*1A07.0020.0002] # ARTICULATED LORRY
+1F69C ; [*1A08.0020.0002] # TRACTOR
+1F69D ; [*1A09.0020.0002] # MONORAIL
+1F69E ; [*1A0A.0020.0002] # MOUNTAIN RAILWAY
+1F69F ; [*1A0B.0020.0002] # SUSPENSION RAILWAY
+1F6A0 ; [*1A0C.0020.0002] # MOUNTAIN CABLEWAY
+1F6A1 ; [*1A0D.0020.0002] # AERIAL TRAMWAY
+1F6A2 ; [*1A0E.0020.0002] # SHIP
+1F6A3 ; [*1A0F.0020.0002] # ROWBOAT
+1F6A4 ; [*1A10.0020.0002] # SPEEDBOAT
+1F6A5 ; [*1A11.0020.0002] # HORIZONTAL TRAFFIC LIGHT
+1F6A6 ; [*1A12.0020.0002] # VERTICAL TRAFFIC LIGHT
+1F6A7 ; [*1A13.0020.0002] # CONSTRUCTION SIGN
+1F6A8 ; [*1A14.0020.0002] # POLICE CARS REVOLVING LIGHT
+1F6A9 ; [*1A15.0020.0002] # TRIANGULAR FLAG ON POST
+1F6AA ; [*1A16.0020.0002] # DOOR
+1F6AB ; [*1A17.0020.0002] # NO ENTRY SIGN
+1F6AC ; [*1A18.0020.0002] # SMOKING SYMBOL
+1F6AD ; [*1A19.0020.0002] # NO SMOKING SYMBOL
+1F6AE ; [*1A1A.0020.0002] # PUT LITTER IN ITS PLACE SYMBOL
+1F6AF ; [*1A1B.0020.0002] # DO NOT LITTER SYMBOL
+1F6B0 ; [*1A1C.0020.0002] # POTABLE WATER SYMBOL
+1F6B1 ; [*1A1D.0020.0002] # NON-POTABLE WATER SYMBOL
+1F6B2 ; [*1A1E.0020.0002] # BICYCLE
+1F6B3 ; [*1A1F.0020.0002] # NO BICYCLES
+1F6B4 ; [*1A20.0020.0002] # BICYCLIST
+1F6B5 ; [*1A21.0020.0002] # MOUNTAIN BICYCLIST
+1F6B6 ; [*1A22.0020.0002] # PEDESTRIAN
+1F6B7 ; [*1A23.0020.0002] # NO PEDESTRIANS
+1F6B8 ; [*1A24.0020.0002] # CHILDREN CROSSING
+1F6B9 ; [*1A25.0020.0002] # MENS SYMBOL
+1F6BA ; [*1A26.0020.0002] # WOMENS SYMBOL
+1F6BB ; [*1A27.0020.0002] # RESTROOM
+1F6BC ; [*1A28.0020.0002] # BABY SYMBOL
+1F6BD ; [*1A29.0020.0002] # TOILET
+1F6BE ; [*1A2A.0020.0002] # WATER CLOSET
+1F6BF ; [*1A2B.0020.0002] # SHOWER
+1F6C0 ; [*1A2C.0020.0002] # BATH
+1F6C1 ; [*1A2D.0020.0002] # BATHTUB
+1F6C2 ; [*1A2E.0020.0002] # PASSPORT CONTROL
+1F6C3 ; [*1A2F.0020.0002] # CUSTOMS
+1F6C4 ; [*1A30.0020.0002] # BAGGAGE CLAIM
+1F6C5 ; [*1A31.0020.0002] # LEFT LUGGAGE
+1F6C6 ; [*1A32.0020.0002] # TRIANGLE WITH ROUNDED CORNERS
+1F6C7 ; [*1A33.0020.0002] # PROHIBITED SIGN
+1F6C8 ; [*1A34.0020.0002] # CIRCLED INFORMATION SOURCE
+1F6C9 ; [*1A35.0020.0002] # BOYS SYMBOL
+1F6CA ; [*1A36.0020.0002] # GIRLS SYMBOL
+1F6CB ; [*1A37.0020.0002] # COUCH AND LAMP
+1F6CC ; [*1A38.0020.0002] # SLEEPING ACCOMMODATION
+1F6CD ; [*1A39.0020.0002] # SHOPPING BAGS
+1F6CE ; [*1A3A.0020.0002] # BELLHOP BELL
+1F6CF ; [*1A3B.0020.0002] # BED
+1F6D0 ; [*1A3C.0020.0002] # PLACE OF WORSHIP
+1F6D1 ; [*1A3D.0020.0002] # OCTAGONAL SIGN
+1F6D2 ; [*1A3E.0020.0002] # SHOPPING TROLLEY
+1F6D3 ; [*1A3F.0020.0002] # STUPA
+1F6D4 ; [*1A40.0020.0002] # PAGODA
+1F6D5 ; [*1A41.0020.0002] # HINDU TEMPLE
+1F6D6 ; [*1A42.0020.0002] # HUT
+1F6D7 ; [*1A43.0020.0002] # ELEVATOR
+1F6DD ; [*1A44.0020.0002] # PLAYGROUND SLIDE
+1F6DE ; [*1A45.0020.0002] # WHEEL
+1F6DF ; [*1A46.0020.0002] # RING BUOY
+1F6E0 ; [*1A47.0020.0002] # HAMMER AND WRENCH
+1F6E1 ; [*1A48.0020.0002] # SHIELD
+1F6E2 ; [*1A49.0020.0002] # OIL DRUM
+1F6E3 ; [*1A4A.0020.0002] # MOTORWAY
+1F6E4 ; [*1A4B.0020.0002] # RAILWAY TRACK
+1F6E5 ; [*1A4C.0020.0002] # MOTOR BOAT
+1F6E6 ; [*1A4D.0020.0002] # UP-POINTING MILITARY AIRPLANE
+1F6E7 ; [*1A4E.0020.0002] # UP-POINTING AIRPLANE
+1F6E8 ; [*1A4F.0020.0002] # UP-POINTING SMALL AIRPLANE
+1F6E9 ; [*1A50.0020.0002] # SMALL AIRPLANE
+1F6EA ; [*1A51.0020.0002] # NORTHEAST-POINTING AIRPLANE
+1F6EB ; [*1A52.0020.0002] # AIRPLANE DEPARTURE
+1F6EC ; [*1A53.0020.0002] # AIRPLANE ARRIVING
+1F6F0 ; [*1A54.0020.0002] # SATELLITE
+1F6F1 ; [*1A55.0020.0002] # ONCOMING FIRE ENGINE
+1F6F2 ; [*1A56.0020.0002] # DIESEL LOCOMOTIVE
+1F6F3 ; [*1A57.0020.0002] # PASSENGER SHIP
+1F6F4 ; [*1A58.0020.0002] # SCOOTER
+1F6F5 ; [*1A59.0020.0002] # MOTOR SCOOTER
+1F6F6 ; [*1A5A.0020.0002] # CANOE
+1F6F7 ; [*1A5B.0020.0002] # SLED
+1F6F8 ; [*1A5C.0020.0002] # FLYING SAUCER
+1F6F9 ; [*1A5D.0020.0002] # SKATEBOARD
+1F6FA ; [*1A5E.0020.0002] # AUTO RICKSHAW
+1F6FB ; [*1A5F.0020.0002] # PICKUP TRUCK
+1F6FC ; [*1A60.0020.0002] # ROLLER SKATE
+1F700 ; [*1A61.0020.0002] # ALCHEMICAL SYMBOL FOR QUINTESSENCE
+1F701 ; [*1A62.0020.0002] # ALCHEMICAL SYMBOL FOR AIR
+1F702 ; [*1A63.0020.0002] # ALCHEMICAL SYMBOL FOR FIRE
+1F703 ; [*1A64.0020.0002] # ALCHEMICAL SYMBOL FOR EARTH
+1F704 ; [*1A65.0020.0002] # ALCHEMICAL SYMBOL FOR WATER
+1F705 ; [*1A66.0020.0002] # ALCHEMICAL SYMBOL FOR AQUAFORTIS
+1F706 ; [*1A67.0020.0002] # ALCHEMICAL SYMBOL FOR AQUA REGIA
+1F707 ; [*1A68.0020.0002] # ALCHEMICAL SYMBOL FOR AQUA REGIA-2
+1F708 ; [*1A69.0020.0002] # ALCHEMICAL SYMBOL FOR AQUA VITAE
+1F709 ; [*1A6A.0020.0002] # ALCHEMICAL SYMBOL FOR AQUA VITAE-2
+1F70A ; [*1A6B.0020.0002] # ALCHEMICAL SYMBOL FOR VINEGAR
+1F70B ; [*1A6C.0020.0002] # ALCHEMICAL SYMBOL FOR VINEGAR-2
+1F70C ; [*1A6D.0020.0002] # ALCHEMICAL SYMBOL FOR VINEGAR-3
+1F70D ; [*1A6E.0020.0002] # ALCHEMICAL SYMBOL FOR SULFUR
+1F70E ; [*1A6F.0020.0002] # ALCHEMICAL SYMBOL FOR PHILOSOPHERS SULFUR
+1F70F ; [*1A70.0020.0002] # ALCHEMICAL SYMBOL FOR BLACK SULFUR
+1F710 ; [*1A71.0020.0002] # ALCHEMICAL SYMBOL FOR MERCURY SUBLIMATE
+1F711 ; [*1A72.0020.0002] # ALCHEMICAL SYMBOL FOR MERCURY SUBLIMATE-2
+1F712 ; [*1A73.0020.0002] # ALCHEMICAL SYMBOL FOR MERCURY SUBLIMATE-3
+1F713 ; [*1A74.0020.0002] # ALCHEMICAL SYMBOL FOR CINNABAR
+1F714 ; [*1A75.0020.0002] # ALCHEMICAL SYMBOL FOR SALT
+1F715 ; [*1A76.0020.0002] # ALCHEMICAL SYMBOL FOR NITRE
+1F716 ; [*1A77.0020.0002] # ALCHEMICAL SYMBOL FOR VITRIOL
+1F717 ; [*1A78.0020.0002] # ALCHEMICAL SYMBOL FOR VITRIOL-2
+1F718 ; [*1A79.0020.0002] # ALCHEMICAL SYMBOL FOR ROCK SALT
+1F719 ; [*1A7A.0020.0002] # ALCHEMICAL SYMBOL FOR ROCK SALT-2
+1F71A ; [*1A7B.0020.0002] # ALCHEMICAL SYMBOL FOR GOLD
+1F71B ; [*1A7C.0020.0002] # ALCHEMICAL SYMBOL FOR SILVER
+1F71C ; [*1A7D.0020.0002] # ALCHEMICAL SYMBOL FOR IRON ORE
+1F71D ; [*1A7E.0020.0002] # ALCHEMICAL SYMBOL FOR IRON ORE-2
+1F71E ; [*1A7F.0020.0002] # ALCHEMICAL SYMBOL FOR CROCUS OF IRON
+1F71F ; [*1A80.0020.0002] # ALCHEMICAL SYMBOL FOR REGULUS OF IRON
+1F720 ; [*1A81.0020.0002] # ALCHEMICAL SYMBOL FOR COPPER ORE
+1F721 ; [*1A82.0020.0002] # ALCHEMICAL SYMBOL FOR IRON-COPPER ORE
+1F722 ; [*1A83.0020.0002] # ALCHEMICAL SYMBOL FOR SUBLIMATE OF COPPER
+1F723 ; [*1A84.0020.0002] # ALCHEMICAL SYMBOL FOR CROCUS OF COPPER
+1F724 ; [*1A85.0020.0002] # ALCHEMICAL SYMBOL FOR CROCUS OF COPPER-2
+1F725 ; [*1A86.0020.0002] # ALCHEMICAL SYMBOL FOR COPPER ANTIMONIATE
+1F726 ; [*1A87.0020.0002] # ALCHEMICAL SYMBOL FOR SALT OF COPPER ANTIMONIATE
+1F727 ; [*1A88.0020.0002] # ALCHEMICAL SYMBOL FOR SUBLIMATE OF SALT OF COPPER
+1F728 ; [*1A89.0020.0002] # ALCHEMICAL SYMBOL FOR VERDIGRIS
+1F729 ; [*1A8A.0020.0002] # ALCHEMICAL SYMBOL FOR TIN ORE
+1F72A ; [*1A8B.0020.0002] # ALCHEMICAL SYMBOL FOR LEAD ORE
+1F72B ; [*1A8C.0020.0002] # ALCHEMICAL SYMBOL FOR ANTIMONY ORE
+1F72C ; [*1A8D.0020.0002] # ALCHEMICAL SYMBOL FOR SUBLIMATE OF ANTIMONY
+1F72D ; [*1A8E.0020.0002] # ALCHEMICAL SYMBOL FOR SALT OF ANTIMONY
+1F72E ; [*1A8F.0020.0002] # ALCHEMICAL SYMBOL FOR SUBLIMATE OF SALT OF ANTIMONY
+1F72F ; [*1A90.0020.0002] # ALCHEMICAL SYMBOL FOR VINEGAR OF ANTIMONY
+1F730 ; [*1A91.0020.0002] # ALCHEMICAL SYMBOL FOR REGULUS OF ANTIMONY
+1F731 ; [*1A92.0020.0002] # ALCHEMICAL SYMBOL FOR REGULUS OF ANTIMONY-2
+1F732 ; [*1A93.0020.0002] # ALCHEMICAL SYMBOL FOR REGULUS
+1F733 ; [*1A94.0020.0002] # ALCHEMICAL SYMBOL FOR REGULUS-2
+1F734 ; [*1A95.0020.0002] # ALCHEMICAL SYMBOL FOR REGULUS-3
+1F735 ; [*1A96.0020.0002] # ALCHEMICAL SYMBOL FOR REGULUS-4
+1F736 ; [*1A97.0020.0002] # ALCHEMICAL SYMBOL FOR ALKALI
+1F737 ; [*1A98.0020.0002] # ALCHEMICAL SYMBOL FOR ALKALI-2
+1F738 ; [*1A99.0020.0002] # ALCHEMICAL SYMBOL FOR MARCASITE
+1F739 ; [*1A9A.0020.0002] # ALCHEMICAL SYMBOL FOR SAL-AMMONIAC
+1F73A ; [*1A9B.0020.0002] # ALCHEMICAL SYMBOL FOR ARSENIC
+1F73B ; [*1A9C.0020.0002] # ALCHEMICAL SYMBOL FOR REALGAR
+1F73C ; [*1A9D.0020.0002] # ALCHEMICAL SYMBOL FOR REALGAR-2
+1F73D ; [*1A9E.0020.0002] # ALCHEMICAL SYMBOL FOR AURIPIGMENT
+1F73E ; [*1A9F.0020.0002] # ALCHEMICAL SYMBOL FOR BISMUTH ORE
+1F73F ; [*1AA0.0020.0002] # ALCHEMICAL SYMBOL FOR TARTAR
+1F740 ; [*1AA1.0020.0002] # ALCHEMICAL SYMBOL FOR TARTAR-2
+1F741 ; [*1AA2.0020.0002] # ALCHEMICAL SYMBOL FOR QUICK LIME
+1F742 ; [*1AA3.0020.0002] # ALCHEMICAL SYMBOL FOR BORAX
+1F743 ; [*1AA4.0020.0002] # ALCHEMICAL SYMBOL FOR BORAX-2
+1F744 ; [*1AA5.0020.0002] # ALCHEMICAL SYMBOL FOR BORAX-3
+1F745 ; [*1AA6.0020.0002] # ALCHEMICAL SYMBOL FOR ALUM
+1F746 ; [*1AA7.0020.0002] # ALCHEMICAL SYMBOL FOR OIL
+1F747 ; [*1AA8.0020.0002] # ALCHEMICAL SYMBOL FOR SPIRIT
+1F748 ; [*1AA9.0020.0002] # ALCHEMICAL SYMBOL FOR TINCTURE
+1F749 ; [*1AAA.0020.0002] # ALCHEMICAL SYMBOL FOR GUM
+1F74A ; [*1AAB.0020.0002] # ALCHEMICAL SYMBOL FOR WAX
+1F74B ; [*1AAC.0020.0002] # ALCHEMICAL SYMBOL FOR POWDER
+1F74C ; [*1AAD.0020.0002] # ALCHEMICAL SYMBOL FOR CALX
+1F74D ; [*1AAE.0020.0002] # ALCHEMICAL SYMBOL FOR TUTTY
+1F74E ; [*1AAF.0020.0002] # ALCHEMICAL SYMBOL FOR CAPUT MORTUUM
+1F74F ; [*1AB0.0020.0002] # ALCHEMICAL SYMBOL FOR SCEPTER OF JOVE
+1F750 ; [*1AB1.0020.0002] # ALCHEMICAL SYMBOL FOR CADUCEUS
+1F751 ; [*1AB2.0020.0002] # ALCHEMICAL SYMBOL FOR TRIDENT
+1F752 ; [*1AB3.0020.0002] # ALCHEMICAL SYMBOL FOR STARRED TRIDENT
+1F753 ; [*1AB4.0020.0002] # ALCHEMICAL SYMBOL FOR LODESTONE
+1F754 ; [*1AB5.0020.0002] # ALCHEMICAL SYMBOL FOR SOAP
+1F755 ; [*1AB6.0020.0002] # ALCHEMICAL SYMBOL FOR URINE
+1F756 ; [*1AB7.0020.0002] # ALCHEMICAL SYMBOL FOR HORSE DUNG
+1F757 ; [*1AB8.0020.0002] # ALCHEMICAL SYMBOL FOR ASHES
+1F758 ; [*1AB9.0020.0002] # ALCHEMICAL SYMBOL FOR POT ASHES
+1F759 ; [*1ABA.0020.0002] # ALCHEMICAL SYMBOL FOR BRICK
+1F75A ; [*1ABB.0020.0002] # ALCHEMICAL SYMBOL FOR POWDERED BRICK
+1F75B ; [*1ABC.0020.0002] # ALCHEMICAL SYMBOL FOR AMALGAM
+1F75C ; [*1ABD.0020.0002] # ALCHEMICAL SYMBOL FOR STRATUM SUPER STRATUM
+1F75D ; [*1ABE.0020.0002] # ALCHEMICAL SYMBOL FOR STRATUM SUPER STRATUM-2
+1F75E ; [*1ABF.0020.0002] # ALCHEMICAL SYMBOL FOR SUBLIMATION
+1F75F ; [*1AC0.0020.0002] # ALCHEMICAL SYMBOL FOR PRECIPITATE
+1F760 ; [*1AC1.0020.0002] # ALCHEMICAL SYMBOL FOR DISTILL
+1F761 ; [*1AC2.0020.0002] # ALCHEMICAL SYMBOL FOR DISSOLVE
+1F762 ; [*1AC3.0020.0002] # ALCHEMICAL SYMBOL FOR DISSOLVE-2
+1F763 ; [*1AC4.0020.0002] # ALCHEMICAL SYMBOL FOR PURIFY
+1F764 ; [*1AC5.0020.0002] # ALCHEMICAL SYMBOL FOR PUTREFACTION
+1F765 ; [*1AC6.0020.0002] # ALCHEMICAL SYMBOL FOR CRUCIBLE
+1F766 ; [*1AC7.0020.0002] # ALCHEMICAL SYMBOL FOR CRUCIBLE-2
+1F767 ; [*1AC8.0020.0002] # ALCHEMICAL SYMBOL FOR CRUCIBLE-3
+1F768 ; [*1AC9.0020.0002] # ALCHEMICAL SYMBOL FOR CRUCIBLE-4
+1F769 ; [*1ACA.0020.0002] # ALCHEMICAL SYMBOL FOR CRUCIBLE-5
+1F76A ; [*1ACB.0020.0002] # ALCHEMICAL SYMBOL FOR ALEMBIC
+1F76B ; [*1ACC.0020.0002] # ALCHEMICAL SYMBOL FOR BATH OF MARY
+1F76C ; [*1ACD.0020.0002] # ALCHEMICAL SYMBOL FOR BATH OF VAPOURS
+1F76D ; [*1ACE.0020.0002] # ALCHEMICAL SYMBOL FOR RETORT
+1F76E ; [*1ACF.0020.0002] # ALCHEMICAL SYMBOL FOR HOUR
+1F76F ; [*1AD0.0020.0002] # ALCHEMICAL SYMBOL FOR NIGHT
+1F770 ; [*1AD1.0020.0002] # ALCHEMICAL SYMBOL FOR DAY-NIGHT
+1F771 ; [*1AD2.0020.0002] # ALCHEMICAL SYMBOL FOR MONTH
+1F772 ; [*1AD3.0020.0002] # ALCHEMICAL SYMBOL FOR HALF DRAM
+1F773 ; [*1AD4.0020.0002] # ALCHEMICAL SYMBOL FOR HALF OUNCE
+1F780 ; [*1AD5.0020.0002] # BLACK LEFT-POINTING ISOSCELES RIGHT TRIANGLE
+1F781 ; [*1AD6.0020.0002] # BLACK UP-POINTING ISOSCELES RIGHT TRIANGLE
+1F782 ; [*1AD7.0020.0002] # BLACK RIGHT-POINTING ISOSCELES RIGHT TRIANGLE
+1F783 ; [*1AD8.0020.0002] # BLACK DOWN-POINTING ISOSCELES RIGHT TRIANGLE
+1F784 ; [*1AD9.0020.0002] # BLACK SLIGHTLY SMALL CIRCLE
+1F785 ; [*1ADA.0020.0002] # MEDIUM BOLD WHITE CIRCLE
+1F786 ; [*1ADB.0020.0002] # BOLD WHITE CIRCLE
+1F787 ; [*1ADC.0020.0002] # HEAVY WHITE CIRCLE
+1F788 ; [*1ADD.0020.0002] # VERY HEAVY WHITE CIRCLE
+1F789 ; [*1ADE.0020.0002] # EXTREMELY HEAVY WHITE CIRCLE
+1F78A ; [*1ADF.0020.0002] # WHITE CIRCLE CONTAINING BLACK SMALL CIRCLE
+1F78B ; [*1AE0.0020.0002] # ROUND TARGET
+1F78C ; [*1AE1.0020.0002] # BLACK TINY SQUARE
+1F78D ; [*1AE2.0020.0002] # BLACK SLIGHTLY SMALL SQUARE
+1F78E ; [*1AE3.0020.0002] # LIGHT WHITE SQUARE
+1F78F ; [*1AE4.0020.0002] # MEDIUM WHITE SQUARE
+1F790 ; [*1AE5.0020.0002] # BOLD WHITE SQUARE
+1F791 ; [*1AE6.0020.0002] # HEAVY WHITE SQUARE
+1F792 ; [*1AE7.0020.0002] # VERY HEAVY WHITE SQUARE
+1F793 ; [*1AE8.0020.0002] # EXTREMELY HEAVY WHITE SQUARE
+1F794 ; [*1AE9.0020.0002] # WHITE SQUARE CONTAINING BLACK VERY SMALL SQUARE
+1F795 ; [*1AEA.0020.0002] # WHITE SQUARE CONTAINING BLACK MEDIUM SQUARE
+1F796 ; [*1AEB.0020.0002] # SQUARE TARGET
+1F797 ; [*1AEC.0020.0002] # BLACK TINY DIAMOND
+1F798 ; [*1AED.0020.0002] # BLACK VERY SMALL DIAMOND
+1F799 ; [*1AEE.0020.0002] # BLACK MEDIUM SMALL DIAMOND
+1F79A ; [*1AEF.0020.0002] # WHITE DIAMOND CONTAINING BLACK VERY SMALL DIAMOND
+1F79B ; [*1AF0.0020.0002] # WHITE DIAMOND CONTAINING BLACK MEDIUM DIAMOND
+1F79C ; [*1AF1.0020.0002] # DIAMOND TARGET
+1F79D ; [*1AF2.0020.0002] # BLACK TINY LOZENGE
+1F79E ; [*1AF3.0020.0002] # BLACK VERY SMALL LOZENGE
+1F79F ; [*1AF4.0020.0002] # BLACK MEDIUM SMALL LOZENGE
+1F7A0 ; [*1AF5.0020.0002] # WHITE LOZENGE CONTAINING BLACK SMALL LOZENGE
+1F7A1 ; [*1AF6.0020.0002] # THIN GREEK CROSS
+1F7A2 ; [*1AF7.0020.0002] # LIGHT GREEK CROSS
+1F7A3 ; [*1AF8.0020.0002] # MEDIUM GREEK CROSS
+1F7A4 ; [*1AF9.0020.0002] # BOLD GREEK CROSS
+1F7A5 ; [*1AFA.0020.0002] # VERY BOLD GREEK CROSS
+1F7A6 ; [*1AFB.0020.0002] # VERY HEAVY GREEK CROSS
+1F7A7 ; [*1AFC.0020.0002] # EXTREMELY HEAVY GREEK CROSS
+1F7A8 ; [*1AFD.0020.0002] # THIN SALTIRE
+1F7A9 ; [*1AFE.0020.0002] # LIGHT SALTIRE
+1F7AA ; [*1AFF.0020.0002] # MEDIUM SALTIRE
+1F7AB ; [*1B00.0020.0002] # BOLD SALTIRE
+1F7AC ; [*1B01.0020.0002] # HEAVY SALTIRE
+1F7AD ; [*1B02.0020.0002] # VERY HEAVY SALTIRE
+1F7AE ; [*1B03.0020.0002] # EXTREMELY HEAVY SALTIRE
+1F7AF ; [*1B04.0020.0002] # LIGHT FIVE SPOKED ASTERISK
+1F7B0 ; [*1B05.0020.0002] # MEDIUM FIVE SPOKED ASTERISK
+1F7B1 ; [*1B06.0020.0002] # BOLD FIVE SPOKED ASTERISK
+1F7B2 ; [*1B07.0020.0002] # HEAVY FIVE SPOKED ASTERISK
+1F7B3 ; [*1B08.0020.0002] # VERY HEAVY FIVE SPOKED ASTERISK
+1F7B4 ; [*1B09.0020.0002] # EXTREMELY HEAVY FIVE SPOKED ASTERISK
+1F7B5 ; [*1B0A.0020.0002] # LIGHT SIX SPOKED ASTERISK
+1F7B6 ; [*1B0B.0020.0002] # MEDIUM SIX SPOKED ASTERISK
+1F7B7 ; [*1B0C.0020.0002] # BOLD SIX SPOKED ASTERISK
+1F7B8 ; [*1B0D.0020.0002] # HEAVY SIX SPOKED ASTERISK
+1F7B9 ; [*1B0E.0020.0002] # VERY HEAVY SIX SPOKED ASTERISK
+1F7BA ; [*1B0F.0020.0002] # EXTREMELY HEAVY SIX SPOKED ASTERISK
+1F7BB ; [*1B10.0020.0002] # LIGHT EIGHT SPOKED ASTERISK
+1F7BC ; [*1B11.0020.0002] # MEDIUM EIGHT SPOKED ASTERISK
+1F7BD ; [*1B12.0020.0002] # BOLD EIGHT SPOKED ASTERISK
+1F7BE ; [*1B13.0020.0002] # HEAVY EIGHT SPOKED ASTERISK
+1F7BF ; [*1B14.0020.0002] # VERY HEAVY EIGHT SPOKED ASTERISK
+1F7C0 ; [*1B15.0020.0002] # LIGHT THREE POINTED BLACK STAR
+1F7C1 ; [*1B16.0020.0002] # MEDIUM THREE POINTED BLACK STAR
+1F7C2 ; [*1B17.0020.0002] # THREE POINTED BLACK STAR
+1F7C3 ; [*1B18.0020.0002] # MEDIUM THREE POINTED PINWHEEL STAR
+1F7C4 ; [*1B19.0020.0002] # LIGHT FOUR POINTED BLACK STAR
+1F7C5 ; [*1B1A.0020.0002] # MEDIUM FOUR POINTED BLACK STAR
+1F7C6 ; [*1B1B.0020.0002] # FOUR POINTED BLACK STAR
+1F7C7 ; [*1B1C.0020.0002] # MEDIUM FOUR POINTED PINWHEEL STAR
+1F7C8 ; [*1B1D.0020.0002] # REVERSE LIGHT FOUR POINTED PINWHEEL STAR
+1F7C9 ; [*1B1E.0020.0002] # LIGHT FIVE POINTED BLACK STAR
+1F7CA ; [*1B1F.0020.0002] # HEAVY FIVE POINTED BLACK STAR
+1F7CB ; [*1B20.0020.0002] # MEDIUM SIX POINTED BLACK STAR
+1F7CC ; [*1B21.0020.0002] # HEAVY SIX POINTED BLACK STAR
+1F7CD ; [*1B22.0020.0002] # SIX POINTED PINWHEEL STAR
+1F7CE ; [*1B23.0020.0002] # MEDIUM EIGHT POINTED BLACK STAR
+1F7CF ; [*1B24.0020.0002] # HEAVY EIGHT POINTED BLACK STAR
+1F7D0 ; [*1B25.0020.0002] # VERY HEAVY EIGHT POINTED BLACK STAR
+1F7D1 ; [*1B26.0020.0002] # HEAVY EIGHT POINTED PINWHEEL STAR
+1F7D2 ; [*1B27.0020.0002] # LIGHT TWELVE POINTED BLACK STAR
+1F7D3 ; [*1B28.0020.0002] # HEAVY TWELVE POINTED BLACK STAR
+1F7D4 ; [*1B29.0020.0002] # HEAVY TWELVE POINTED PINWHEEL STAR
+1F7D5 ; [*1B2A.0020.0002] # CIRCLED TRIANGLE
+1F7D6 ; [*1B2B.0020.0002] # NEGATIVE CIRCLED TRIANGLE
+1F7D7 ; [*1B2C.0020.0002] # CIRCLED SQUARE
+1F7D8 ; [*1B2D.0020.0002] # NEGATIVE CIRCLED SQUARE
+1F7E0 ; [*1B2E.0020.0002] # LARGE ORANGE CIRCLE
+1F7E1 ; [*1B2F.0020.0002] # LARGE YELLOW CIRCLE
+1F7E2 ; [*1B30.0020.0002] # LARGE GREEN CIRCLE
+1F7E3 ; [*1B31.0020.0002] # LARGE PURPLE CIRCLE
+1F7E4 ; [*1B32.0020.0002] # LARGE BROWN CIRCLE
+1F7E5 ; [*1B33.0020.0002] # LARGE RED SQUARE
+1F7E6 ; [*1B34.0020.0002] # LARGE BLUE SQUARE
+1F7E7 ; [*1B35.0020.0002] # LARGE ORANGE SQUARE
+1F7E8 ; [*1B36.0020.0002] # LARGE YELLOW SQUARE
+1F7E9 ; [*1B37.0020.0002] # LARGE GREEN SQUARE
+1F7EA ; [*1B38.0020.0002] # LARGE PURPLE SQUARE
+1F7EB ; [*1B39.0020.0002] # LARGE BROWN SQUARE
+1F7F0 ; [*1B3A.0020.0002] # HEAVY EQUALS SIGN
+1F800 ; [*1B3B.0020.0002] # LEFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD
+1F801 ; [*1B3C.0020.0002] # UPWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD
+1F802 ; [*1B3D.0020.0002] # RIGHTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD
+1F803 ; [*1B3E.0020.0002] # DOWNWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD
+1F804 ; [*1B3F.0020.0002] # LEFTWARDS ARROW WITH MEDIUM TRIANGLE ARROWHEAD
+1F805 ; [*1B40.0020.0002] # UPWARDS ARROW WITH MEDIUM TRIANGLE ARROWHEAD
+1F806 ; [*1B41.0020.0002] # RIGHTWARDS ARROW WITH MEDIUM TRIANGLE ARROWHEAD
+1F807 ; [*1B42.0020.0002] # DOWNWARDS ARROW WITH MEDIUM TRIANGLE ARROWHEAD
+1F808 ; [*1B43.0020.0002] # LEFTWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD
+1F809 ; [*1B44.0020.0002] # UPWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD
+1F80A ; [*1B45.0020.0002] # RIGHTWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD
+1F80B ; [*1B46.0020.0002] # DOWNWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD
+1F810 ; [*1B47.0020.0002] # LEFTWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD
+1F811 ; [*1B48.0020.0002] # UPWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD
+1F812 ; [*1B49.0020.0002] # RIGHTWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD
+1F813 ; [*1B4A.0020.0002] # DOWNWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD
+1F814 ; [*1B4B.0020.0002] # LEFTWARDS ARROW WITH EQUILATERAL ARROWHEAD
+1F815 ; [*1B4C.0020.0002] # UPWARDS ARROW WITH EQUILATERAL ARROWHEAD
+1F816 ; [*1B4D.0020.0002] # RIGHTWARDS ARROW WITH EQUILATERAL ARROWHEAD
+1F817 ; [*1B4E.0020.0002] # DOWNWARDS ARROW WITH EQUILATERAL ARROWHEAD
+1F818 ; [*1B4F.0020.0002] # HEAVY LEFTWARDS ARROW WITH EQUILATERAL ARROWHEAD
+1F819 ; [*1B50.0020.0002] # HEAVY UPWARDS ARROW WITH EQUILATERAL ARROWHEAD
+1F81A ; [*1B51.0020.0002] # HEAVY RIGHTWARDS ARROW WITH EQUILATERAL ARROWHEAD
+1F81B ; [*1B52.0020.0002] # HEAVY DOWNWARDS ARROW WITH EQUILATERAL ARROWHEAD
+1F81C ; [*1B53.0020.0002] # HEAVY LEFTWARDS ARROW WITH LARGE EQUILATERAL ARROWHEAD
+1F81D ; [*1B54.0020.0002] # HEAVY UPWARDS ARROW WITH LARGE EQUILATERAL ARROWHEAD
+1F81E ; [*1B55.0020.0002] # HEAVY RIGHTWARDS ARROW WITH LARGE EQUILATERAL ARROWHEAD
+1F81F ; [*1B56.0020.0002] # HEAVY DOWNWARDS ARROW WITH LARGE EQUILATERAL ARROWHEAD
+1F820 ; [*1B57.0020.0002] # LEFTWARDS TRIANGLE-HEADED ARROW WITH NARROW SHAFT
+1F821 ; [*1B58.0020.0002] # UPWARDS TRIANGLE-HEADED ARROW WITH NARROW SHAFT
+1F822 ; [*1B59.0020.0002] # RIGHTWARDS TRIANGLE-HEADED ARROW WITH NARROW SHAFT
+1F823 ; [*1B5A.0020.0002] # DOWNWARDS TRIANGLE-HEADED ARROW WITH NARROW SHAFT
+1F824 ; [*1B5B.0020.0002] # LEFTWARDS TRIANGLE-HEADED ARROW WITH MEDIUM SHAFT
+1F825 ; [*1B5C.0020.0002] # UPWARDS TRIANGLE-HEADED ARROW WITH MEDIUM SHAFT
+1F826 ; [*1B5D.0020.0002] # RIGHTWARDS TRIANGLE-HEADED ARROW WITH MEDIUM SHAFT
+1F827 ; [*1B5E.0020.0002] # DOWNWARDS TRIANGLE-HEADED ARROW WITH MEDIUM SHAFT
+1F828 ; [*1B5F.0020.0002] # LEFTWARDS TRIANGLE-HEADED ARROW WITH BOLD SHAFT
+1F829 ; [*1B60.0020.0002] # UPWARDS TRIANGLE-HEADED ARROW WITH BOLD SHAFT
+1F82A ; [*1B61.0020.0002] # RIGHTWARDS TRIANGLE-HEADED ARROW WITH BOLD SHAFT
+1F82B ; [*1B62.0020.0002] # DOWNWARDS TRIANGLE-HEADED ARROW WITH BOLD SHAFT
+1F82C ; [*1B63.0020.0002] # LEFTWARDS TRIANGLE-HEADED ARROW WITH HEAVY SHAFT
+1F82D ; [*1B64.0020.0002] # UPWARDS TRIANGLE-HEADED ARROW WITH HEAVY SHAFT
+1F82E ; [*1B65.0020.0002] # RIGHTWARDS TRIANGLE-HEADED ARROW WITH HEAVY SHAFT
+1F82F ; [*1B66.0020.0002] # DOWNWARDS TRIANGLE-HEADED ARROW WITH HEAVY SHAFT
+1F830 ; [*1B67.0020.0002] # LEFTWARDS TRIANGLE-HEADED ARROW WITH VERY HEAVY SHAFT
+1F831 ; [*1B68.0020.0002] # UPWARDS TRIANGLE-HEADED ARROW WITH VERY HEAVY SHAFT
+1F832 ; [*1B69.0020.0002] # RIGHTWARDS TRIANGLE-HEADED ARROW WITH VERY HEAVY SHAFT
+1F833 ; [*1B6A.0020.0002] # DOWNWARDS TRIANGLE-HEADED ARROW WITH VERY HEAVY SHAFT
+1F834 ; [*1B6B.0020.0002] # LEFTWARDS FINGER-POST ARROW
+1F835 ; [*1B6C.0020.0002] # UPWARDS FINGER-POST ARROW
+1F836 ; [*1B6D.0020.0002] # RIGHTWARDS FINGER-POST ARROW
+1F837 ; [*1B6E.0020.0002] # DOWNWARDS FINGER-POST ARROW
+1F838 ; [*1B6F.0020.0002] # LEFTWARDS SQUARED ARROW
+1F839 ; [*1B70.0020.0002] # UPWARDS SQUARED ARROW
+1F83A ; [*1B71.0020.0002] # RIGHTWARDS SQUARED ARROW
+1F83B ; [*1B72.0020.0002] # DOWNWARDS SQUARED ARROW
+1F83C ; [*1B73.0020.0002] # LEFTWARDS COMPRESSED ARROW
+1F83D ; [*1B74.0020.0002] # UPWARDS COMPRESSED ARROW
+1F83E ; [*1B75.0020.0002] # RIGHTWARDS COMPRESSED ARROW
+1F83F ; [*1B76.0020.0002] # DOWNWARDS COMPRESSED ARROW
+1F840 ; [*1B77.0020.0002] # LEFTWARDS HEAVY COMPRESSED ARROW
+1F841 ; [*1B78.0020.0002] # UPWARDS HEAVY COMPRESSED ARROW
+1F842 ; [*1B79.0020.0002] # RIGHTWARDS HEAVY COMPRESSED ARROW
+1F843 ; [*1B7A.0020.0002] # DOWNWARDS HEAVY COMPRESSED ARROW
+1F844 ; [*1B7B.0020.0002] # LEFTWARDS HEAVY ARROW
+1F845 ; [*1B7C.0020.0002] # UPWARDS HEAVY ARROW
+1F846 ; [*1B7D.0020.0002] # RIGHTWARDS HEAVY ARROW
+1F847 ; [*1B7E.0020.0002] # DOWNWARDS HEAVY ARROW
+1F850 ; [*1B7F.0020.0002] # LEFTWARDS SANS-SERIF ARROW
+1F851 ; [*1B80.0020.0002] # UPWARDS SANS-SERIF ARROW
+1F852 ; [*1B81.0020.0002] # RIGHTWARDS SANS-SERIF ARROW
+1F853 ; [*1B82.0020.0002] # DOWNWARDS SANS-SERIF ARROW
+1F854 ; [*1B83.0020.0002] # NORTH WEST SANS-SERIF ARROW
+1F855 ; [*1B84.0020.0002] # NORTH EAST SANS-SERIF ARROW
+1F856 ; [*1B85.0020.0002] # SOUTH EAST SANS-SERIF ARROW
+1F857 ; [*1B86.0020.0002] # SOUTH WEST SANS-SERIF ARROW
+1F858 ; [*1B87.0020.0002] # LEFT RIGHT SANS-SERIF ARROW
+1F859 ; [*1B88.0020.0002] # UP DOWN SANS-SERIF ARROW
+1F860 ; [*1B89.0020.0002] # WIDE-HEADED LEFTWARDS LIGHT BARB ARROW
+1F861 ; [*1B8A.0020.0002] # WIDE-HEADED UPWARDS LIGHT BARB ARROW
+1F862 ; [*1B8B.0020.0002] # WIDE-HEADED RIGHTWARDS LIGHT BARB ARROW
+1F863 ; [*1B8C.0020.0002] # WIDE-HEADED DOWNWARDS LIGHT BARB ARROW
+1F864 ; [*1B8D.0020.0002] # WIDE-HEADED NORTH WEST LIGHT BARB ARROW
+1F865 ; [*1B8E.0020.0002] # WIDE-HEADED NORTH EAST LIGHT BARB ARROW
+1F866 ; [*1B8F.0020.0002] # WIDE-HEADED SOUTH EAST LIGHT BARB ARROW
+1F867 ; [*1B90.0020.0002] # WIDE-HEADED SOUTH WEST LIGHT BARB ARROW
+1F868 ; [*1B91.0020.0002] # WIDE-HEADED LEFTWARDS BARB ARROW
+1F869 ; [*1B92.0020.0002] # WIDE-HEADED UPWARDS BARB ARROW
+1F86A ; [*1B93.0020.0002] # WIDE-HEADED RIGHTWARDS BARB ARROW
+1F86B ; [*1B94.0020.0002] # WIDE-HEADED DOWNWARDS BARB ARROW
+1F86C ; [*1B95.0020.0002] # WIDE-HEADED NORTH WEST BARB ARROW
+1F86D ; [*1B96.0020.0002] # WIDE-HEADED NORTH EAST BARB ARROW
+1F86E ; [*1B97.0020.0002] # WIDE-HEADED SOUTH EAST BARB ARROW
+1F86F ; [*1B98.0020.0002] # WIDE-HEADED SOUTH WEST BARB ARROW
+1F870 ; [*1B99.0020.0002] # WIDE-HEADED LEFTWARDS MEDIUM BARB ARROW
+1F871 ; [*1B9A.0020.0002] # WIDE-HEADED UPWARDS MEDIUM BARB ARROW
+1F872 ; [*1B9B.0020.0002] # WIDE-HEADED RIGHTWARDS MEDIUM BARB ARROW
+1F873 ; [*1B9C.0020.0002] # WIDE-HEADED DOWNWARDS MEDIUM BARB ARROW
+1F874 ; [*1B9D.0020.0002] # WIDE-HEADED NORTH WEST MEDIUM BARB ARROW
+1F875 ; [*1B9E.0020.0002] # WIDE-HEADED NORTH EAST MEDIUM BARB ARROW
+1F876 ; [*1B9F.0020.0002] # WIDE-HEADED SOUTH EAST MEDIUM BARB ARROW
+1F877 ; [*1BA0.0020.0002] # WIDE-HEADED SOUTH WEST MEDIUM BARB ARROW
+1F878 ; [*1BA1.0020.0002] # WIDE-HEADED LEFTWARDS HEAVY BARB ARROW
+1F879 ; [*1BA2.0020.0002] # WIDE-HEADED UPWARDS HEAVY BARB ARROW
+1F87A ; [*1BA3.0020.0002] # WIDE-HEADED RIGHTWARDS HEAVY BARB ARROW
+1F87B ; [*1BA4.0020.0002] # WIDE-HEADED DOWNWARDS HEAVY BARB ARROW
+1F87C ; [*1BA5.0020.0002] # WIDE-HEADED NORTH WEST HEAVY BARB ARROW
+1F87D ; [*1BA6.0020.0002] # WIDE-HEADED NORTH EAST HEAVY BARB ARROW
+1F87E ; [*1BA7.0020.0002] # WIDE-HEADED SOUTH EAST HEAVY BARB ARROW
+1F87F ; [*1BA8.0020.0002] # WIDE-HEADED SOUTH WEST HEAVY BARB ARROW
+1F880 ; [*1BA9.0020.0002] # WIDE-HEADED LEFTWARDS VERY HEAVY BARB ARROW
+1F881 ; [*1BAA.0020.0002] # WIDE-HEADED UPWARDS VERY HEAVY BARB ARROW
+1F882 ; [*1BAB.0020.0002] # WIDE-HEADED RIGHTWARDS VERY HEAVY BARB ARROW
+1F883 ; [*1BAC.0020.0002] # WIDE-HEADED DOWNWARDS VERY HEAVY BARB ARROW
+1F884 ; [*1BAD.0020.0002] # WIDE-HEADED NORTH WEST VERY HEAVY BARB ARROW
+1F885 ; [*1BAE.0020.0002] # WIDE-HEADED NORTH EAST VERY HEAVY BARB ARROW
+1F886 ; [*1BAF.0020.0002] # WIDE-HEADED SOUTH EAST VERY HEAVY BARB ARROW
+1F887 ; [*1BB0.0020.0002] # WIDE-HEADED SOUTH WEST VERY HEAVY BARB ARROW
+1F890 ; [*1BB1.0020.0002] # LEFTWARDS TRIANGLE ARROWHEAD
+1F891 ; [*1BB2.0020.0002] # UPWARDS TRIANGLE ARROWHEAD
+1F892 ; [*1BB3.0020.0002] # RIGHTWARDS TRIANGLE ARROWHEAD
+1F893 ; [*1BB4.0020.0002] # DOWNWARDS TRIANGLE ARROWHEAD
+1F894 ; [*1BB5.0020.0002] # LEFTWARDS WHITE ARROW WITHIN TRIANGLE ARROWHEAD
+1F895 ; [*1BB6.0020.0002] # UPWARDS WHITE ARROW WITHIN TRIANGLE ARROWHEAD
+1F896 ; [*1BB7.0020.0002] # RIGHTWARDS WHITE ARROW WITHIN TRIANGLE ARROWHEAD
+1F897 ; [*1BB8.0020.0002] # DOWNWARDS WHITE ARROW WITHIN TRIANGLE ARROWHEAD
+1F898 ; [*1BB9.0020.0002] # LEFTWARDS ARROW WITH NOTCHED TAIL
+1F899 ; [*1BBA.0020.0002] # UPWARDS ARROW WITH NOTCHED TAIL
+1F89A ; [*1BBB.0020.0002] # RIGHTWARDS ARROW WITH NOTCHED TAIL
+1F89B ; [*1BBC.0020.0002] # DOWNWARDS ARROW WITH NOTCHED TAIL
+1F89C ; [*1BBD.0020.0002] # HEAVY ARROW SHAFT WIDTH ONE
+1F89D ; [*1BBE.0020.0002] # HEAVY ARROW SHAFT WIDTH TWO THIRDS
+1F89E ; [*1BBF.0020.0002] # HEAVY ARROW SHAFT WIDTH ONE HALF
+1F89F ; [*1BC0.0020.0002] # HEAVY ARROW SHAFT WIDTH ONE THIRD
+1F8A0 ; [*1BC1.0020.0002] # LEFTWARDS BOTTOM-SHADED WHITE ARROW
+1F8A1 ; [*1BC2.0020.0002] # RIGHTWARDS BOTTOM SHADED WHITE ARROW
+1F8A2 ; [*1BC3.0020.0002] # LEFTWARDS TOP SHADED WHITE ARROW
+1F8A3 ; [*1BC4.0020.0002] # RIGHTWARDS TOP SHADED WHITE ARROW
+1F8A4 ; [*1BC5.0020.0002] # LEFTWARDS LEFT-SHADED WHITE ARROW
+1F8A5 ; [*1BC6.0020.0002] # RIGHTWARDS RIGHT-SHADED WHITE ARROW
+1F8A6 ; [*1BC7.0020.0002] # LEFTWARDS RIGHT-SHADED WHITE ARROW
+1F8A7 ; [*1BC8.0020.0002] # RIGHTWARDS LEFT-SHADED WHITE ARROW
+1F8A8 ; [*1BC9.0020.0002] # LEFTWARDS BACK-TILTED SHADOWED WHITE ARROW
+1F8A9 ; [*1BCA.0020.0002] # RIGHTWARDS BACK-TILTED SHADOWED WHITE ARROW
+1F8AA ; [*1BCB.0020.0002] # LEFTWARDS FRONT-TILTED SHADOWED WHITE ARROW
+1F8AB ; [*1BCC.0020.0002] # RIGHTWARDS FRONT-TILTED SHADOWED WHITE ARROW
+1F8AC ; [*1BCD.0020.0002] # WHITE ARROW SHAFT WIDTH ONE
+1F8AD ; [*1BCE.0020.0002] # WHITE ARROW SHAFT WIDTH TWO THIRDS
+1F8B0 ; [*1BCF.0020.0002] # ARROW POINTING UPWARDS THEN NORTH WEST
+1F8B1 ; [*1BD0.0020.0002] # ARROW POINTING RIGHTWARDS THEN CURVING SOUTH WEST
+1F900 ; [*1814.0020.0002] # CIRCLED CROSS FORMEE WITH FOUR DOTS
+1F901 ; [*1815.0020.0002] # CIRCLED CROSS FORMEE WITH TWO DOTS
+1F902 ; [*1816.0020.0002] # CIRCLED CROSS FORMEE
+1F903 ; [*1817.0020.0002] # LEFT HALF CIRCLE WITH FOUR DOTS
+1F904 ; [*1818.0020.0002] # LEFT HALF CIRCLE WITH THREE DOTS
+1F905 ; [*1819.0020.0002] # LEFT HALF CIRCLE WITH TWO DOTS
+1F906 ; [*181A.0020.0002] # LEFT HALF CIRCLE WITH DOT
+1F907 ; [*181B.0020.0002] # LEFT HALF CIRCLE
+1F908 ; [*181C.0020.0002] # DOWNWARD FACING HOOK
+1F909 ; [*181D.0020.0002] # DOWNWARD FACING NOTCHED HOOK
+1F90A ; [*181E.0020.0002] # DOWNWARD FACING HOOK WITH DOT
+1F90B ; [*181F.0020.0002] # DOWNWARD FACING NOTCHED HOOK WITH DOT
+1F90C ; [*1820.0020.0002] # PINCHED FINGERS
+1F90D ; [*1821.0020.0002] # WHITE HEART
+1F90E ; [*1822.0020.0002] # BROWN HEART
+1F90F ; [*1823.0020.0002] # PINCHING HAND
+1F910 ; [*1824.0020.0002] # ZIPPER-MOUTH FACE
+1F911 ; [*1825.0020.0002] # MONEY-MOUTH FACE
+1F912 ; [*1826.0020.0002] # FACE WITH THERMOMETER
+1F913 ; [*1827.0020.0002] # NERD FACE
+1F914 ; [*1828.0020.0002] # THINKING FACE
+1F915 ; [*1829.0020.0002] # FACE WITH HEAD-BANDAGE
+1F916 ; [*182A.0020.0002] # ROBOT FACE
+1F917 ; [*182B.0020.0002] # HUGGING FACE
+1F918 ; [*182C.0020.0002] # SIGN OF THE HORNS
+1F919 ; [*182D.0020.0002] # CALL ME HAND
+1F91A ; [*182E.0020.0002] # RAISED BACK OF HAND
+1F91B ; [*182F.0020.0002] # LEFT-FACING FIST
+1F91C ; [*1830.0020.0002] # RIGHT-FACING FIST
+1F91D ; [*1831.0020.0002] # HANDSHAKE
+1F91E ; [*1832.0020.0002] # HAND WITH INDEX AND MIDDLE FINGERS CROSSED
+1F91F ; [*1833.0020.0002] # I LOVE YOU HAND SIGN
+1F920 ; [*1834.0020.0002] # FACE WITH COWBOY HAT
+1F921 ; [*1835.0020.0002] # CLOWN FACE
+1F922 ; [*1836.0020.0002] # NAUSEATED FACE
+1F923 ; [*1837.0020.0002] # ROLLING ON THE FLOOR LAUGHING
+1F924 ; [*1838.0020.0002] # DROOLING FACE
+1F925 ; [*1839.0020.0002] # LYING FACE
+1F926 ; [*183A.0020.0002] # FACE PALM
+1F927 ; [*183B.0020.0002] # SNEEZING FACE
+1F928 ; [*183C.0020.0002] # FACE WITH ONE EYEBROW RAISED
+1F929 ; [*183D.0020.0002] # GRINNING FACE WITH STAR EYES
+1F92A ; [*183E.0020.0002] # GRINNING FACE WITH ONE LARGE AND ONE SMALL EYE
+1F92B ; [*183F.0020.0002] # FACE WITH FINGER COVERING CLOSED LIPS
+1F92C ; [*1840.0020.0002] # SERIOUS FACE WITH SYMBOLS COVERING MOUTH
+1F92D ; [*1841.0020.0002] # SMILING FACE WITH SMILING EYES AND HAND COVERING MOUTH
+1F92E ; [*1842.0020.0002] # FACE WITH OPEN MOUTH VOMITING
+1F92F ; [*1843.0020.0002] # SHOCKED FACE WITH EXPLODING HEAD
+1F930 ; [*1844.0020.0002] # PREGNANT WOMAN
+1F931 ; [*1845.0020.0002] # BREAST-FEEDING
+1F932 ; [*1846.0020.0002] # PALMS UP TOGETHER
+1F933 ; [*1847.0020.0002] # SELFIE
+1F934 ; [*1848.0020.0002] # PRINCE
+1F935 ; [*1849.0020.0002] # MAN IN TUXEDO
+1F936 ; [*184A.0020.0002] # MOTHER CHRISTMAS
+1F937 ; [*184B.0020.0002] # SHRUG
+1F938 ; [*184C.0020.0002] # PERSON DOING CARTWHEEL
+1F939 ; [*184D.0020.0002] # JUGGLING
+1F93A ; [*184E.0020.0002] # FENCER
+1F93B ; [*184F.0020.0002] # MODERN PENTATHLON
+1F93C ; [*1850.0020.0002] # WRESTLERS
+1F93D ; [*1851.0020.0002] # WATER POLO
+1F93E ; [*1852.0020.0002] # HANDBALL
+1F93F ; [*1853.0020.0002] # DIVING MASK
+1F940 ; [*1854.0020.0002] # WILTED FLOWER
+1F941 ; [*1855.0020.0002] # DRUM WITH DRUMSTICKS
+1F942 ; [*1856.0020.0002] # CLINKING GLASSES
+1F943 ; [*1857.0020.0002] # TUMBLER GLASS
+1F944 ; [*1858.0020.0002] # SPOON
+1F945 ; [*1859.0020.0002] # GOAL NET
+1F946 ; [*185A.0020.0002] # RIFLE
+1F947 ; [*185B.0020.0002] # FIRST PLACE MEDAL
+1F948 ; [*185C.0020.0002] # SECOND PLACE MEDAL
+1F949 ; [*185D.0020.0002] # THIRD PLACE MEDAL
+1F94A ; [*185E.0020.0002] # BOXING GLOVE
+1F94B ; [*185F.0020.0002] # MARTIAL ARTS UNIFORM
+1F94C ; [*1860.0020.0002] # CURLING STONE
+1F94D ; [*1861.0020.0002] # LACROSSE STICK AND BALL
+1F94E ; [*1862.0020.0002] # SOFTBALL
+1F94F ; [*1863.0020.0002] # FLYING DISC
+1F950 ; [*1864.0020.0002] # CROISSANT
+1F951 ; [*1865.0020.0002] # AVOCADO
+1F952 ; [*1866.0020.0002] # CUCUMBER
+1F953 ; [*1867.0020.0002] # BACON
+1F954 ; [*1868.0020.0002] # POTATO
+1F955 ; [*1869.0020.0002] # CARROT
+1F956 ; [*186A.0020.0002] # BAGUETTE BREAD
+1F957 ; [*186B.0020.0002] # GREEN SALAD
+1F958 ; [*186C.0020.0002] # SHALLOW PAN OF FOOD
+1F959 ; [*186D.0020.0002] # STUFFED FLATBREAD
+1F95A ; [*186E.0020.0002] # EGG
+1F95B ; [*186F.0020.0002] # GLASS OF MILK
+1F95C ; [*1870.0020.0002] # PEANUTS
+1F95D ; [*1871.0020.0002] # KIWIFRUIT
+1F95E ; [*1872.0020.0002] # PANCAKES
+1F95F ; [*1873.0020.0002] # DUMPLING
+1F960 ; [*1874.0020.0002] # FORTUNE COOKIE
+1F961 ; [*1875.0020.0002] # TAKEOUT BOX
+1F962 ; [*1876.0020.0002] # CHOPSTICKS
+1F963 ; [*1877.0020.0002] # BOWL WITH SPOON
+1F964 ; [*1878.0020.0002] # CUP WITH STRAW
+1F965 ; [*1879.0020.0002] # COCONUT
+1F966 ; [*187A.0020.0002] # BROCCOLI
+1F967 ; [*187B.0020.0002] # PIE
+1F968 ; [*187C.0020.0002] # PRETZEL
+1F969 ; [*187D.0020.0002] # CUT OF MEAT
+1F96A ; [*187E.0020.0002] # SANDWICH
+1F96B ; [*187F.0020.0002] # CANNED FOOD
+1F96C ; [*1880.0020.0002] # LEAFY GREEN
+1F96D ; [*1881.0020.0002] # MANGO
+1F96E ; [*1882.0020.0002] # MOON CAKE
+1F96F ; [*1883.0020.0002] # BAGEL
+1F970 ; [*1884.0020.0002] # SMILING FACE WITH SMILING EYES AND THREE HEARTS
+1F971 ; [*1885.0020.0002] # YAWNING FACE
+1F972 ; [*1886.0020.0002] # SMILING FACE WITH TEAR
+1F973 ; [*1887.0020.0002] # FACE WITH PARTY HORN AND PARTY HAT
+1F974 ; [*1888.0020.0002] # FACE WITH UNEVEN EYES AND WAVY MOUTH
+1F975 ; [*1889.0020.0002] # OVERHEATED FACE
+1F976 ; [*188A.0020.0002] # FREEZING FACE
+1F977 ; [*188B.0020.0002] # NINJA
+1F978 ; [*188C.0020.0002] # DISGUISED FACE
+1F979 ; [*188D.0020.0002] # FACE HOLDING BACK TEARS
+1F97A ; [*188E.0020.0002] # FACE WITH PLEADING EYES
+1F97B ; [*188F.0020.0002] # SARI
+1F97C ; [*1890.0020.0002] # LAB COAT
+1F97D ; [*1891.0020.0002] # GOGGLES
+1F97E ; [*1892.0020.0002] # HIKING BOOT
+1F97F ; [*1893.0020.0002] # FLAT SHOE
+1F980 ; [*1894.0020.0002] # CRAB
+1F981 ; [*1895.0020.0002] # LION FACE
+1F982 ; [*1896.0020.0002] # SCORPION
+1F983 ; [*1897.0020.0002] # TURKEY
+1F984 ; [*1898.0020.0002] # UNICORN FACE
+1F985 ; [*1899.0020.0002] # EAGLE
+1F986 ; [*189A.0020.0002] # DUCK
+1F987 ; [*189B.0020.0002] # BAT
+1F988 ; [*189C.0020.0002] # SHARK
+1F989 ; [*189D.0020.0002] # OWL
+1F98A ; [*189E.0020.0002] # FOX FACE
+1F98B ; [*189F.0020.0002] # BUTTERFLY
+1F98C ; [*18A0.0020.0002] # DEER
+1F98D ; [*18A1.0020.0002] # GORILLA
+1F98E ; [*18A2.0020.0002] # LIZARD
+1F98F ; [*18A3.0020.0002] # RHINOCEROS
+1F990 ; [*18A4.0020.0002] # SHRIMP
+1F991 ; [*18A5.0020.0002] # SQUID
+1F992 ; [*18A6.0020.0002] # GIRAFFE FACE
+1F993 ; [*18A7.0020.0002] # ZEBRA FACE
+1F994 ; [*18A8.0020.0002] # HEDGEHOG
+1F995 ; [*18A9.0020.0002] # SAUROPOD
+1F996 ; [*18AA.0020.0002] # T-REX
+1F997 ; [*18AB.0020.0002] # CRICKET
+1F998 ; [*18AC.0020.0002] # KANGAROO
+1F999 ; [*18AD.0020.0002] # LLAMA
+1F99A ; [*18AE.0020.0002] # PEACOCK
+1F99B ; [*18AF.0020.0002] # HIPPOPOTAMUS
+1F99C ; [*18B0.0020.0002] # PARROT
+1F99D ; [*18B1.0020.0002] # RACCOON
+1F99E ; [*18B2.0020.0002] # LOBSTER
+1F99F ; [*18B3.0020.0002] # MOSQUITO
+1F9A0 ; [*18B4.0020.0002] # MICROBE
+1F9A1 ; [*18B5.0020.0002] # BADGER
+1F9A2 ; [*18B6.0020.0002] # SWAN
+1F9A3 ; [*18B7.0020.0002] # MAMMOTH
+1F9A4 ; [*18B8.0020.0002] # DODO
+1F9A5 ; [*18B9.0020.0002] # SLOTH
+1F9A6 ; [*18BA.0020.0002] # OTTER
+1F9A7 ; [*18BB.0020.0002] # ORANGUTAN
+1F9A8 ; [*18BC.0020.0002] # SKUNK
+1F9A9 ; [*18BD.0020.0002] # FLAMINGO
+1F9AA ; [*18BE.0020.0002] # OYSTER
+1F9AB ; [*18BF.0020.0002] # BEAVER
+1F9AC ; [*18C0.0020.0002] # BISON
+1F9AD ; [*18C1.0020.0002] # SEAL
+1F9AE ; [*18C2.0020.0002] # GUIDE DOG
+1F9AF ; [*18C3.0020.0002] # PROBING CANE
+1F9B0 ; [*18C4.0020.0002] # EMOJI COMPONENT RED HAIR
+1F9B1 ; [*18C5.0020.0002] # EMOJI COMPONENT CURLY HAIR
+1F9B2 ; [*18C6.0020.0002] # EMOJI COMPONENT BALD
+1F9B3 ; [*18C7.0020.0002] # EMOJI COMPONENT WHITE HAIR
+1F9B4 ; [*18C8.0020.0002] # BONE
+1F9B5 ; [*18C9.0020.0002] # LEG
+1F9B6 ; [*18CA.0020.0002] # FOOT
+1F9B7 ; [*18CB.0020.0002] # TOOTH
+1F9B8 ; [*18CC.0020.0002] # SUPERHERO
+1F9B9 ; [*18CD.0020.0002] # SUPERVILLAIN
+1F9BA ; [*18CE.0020.0002] # SAFETY VEST
+1F9BB ; [*18CF.0020.0002] # EAR WITH HEARING AID
+1F9BC ; [*18D0.0020.0002] # MOTORIZED WHEELCHAIR
+1F9BD ; [*18D1.0020.0002] # MANUAL WHEELCHAIR
+1F9BE ; [*18D2.0020.0002] # MECHANICAL ARM
+1F9BF ; [*18D3.0020.0002] # MECHANICAL LEG
+1F9C0 ; [*18D4.0020.0002] # CHEESE WEDGE
+1F9C1 ; [*18D5.0020.0002] # CUPCAKE
+1F9C2 ; [*18D6.0020.0002] # SALT SHAKER
+1F9C3 ; [*18D7.0020.0002] # BEVERAGE BOX
+1F9C4 ; [*18D8.0020.0002] # GARLIC
+1F9C5 ; [*18D9.0020.0002] # ONION
+1F9C6 ; [*18DA.0020.0002] # FALAFEL
+1F9C7 ; [*18DB.0020.0002] # WAFFLE
+1F9C8 ; [*18DC.0020.0002] # BUTTER
+1F9C9 ; [*18DD.0020.0002] # MATE DRINK
+1F9CA ; [*18DE.0020.0002] # ICE CUBE
+1F9CB ; [*18DF.0020.0002] # BUBBLE TEA
+1F9CC ; [*18E0.0020.0002] # TROLL
+1F9CD ; [*18E1.0020.0002] # STANDING PERSON
+1F9CE ; [*18E2.0020.0002] # KNEELING PERSON
+1F9CF ; [*18E3.0020.0002] # DEAF PERSON
+1F9D0 ; [*18E4.0020.0002] # FACE WITH MONOCLE
+1F9D1 ; [*18E5.0020.0002] # ADULT
+1F9D2 ; [*18E6.0020.0002] # CHILD
+1F9D3 ; [*18E7.0020.0002] # OLDER ADULT
+1F9D4 ; [*18E8.0020.0002] # BEARDED PERSON
+1F9D5 ; [*18E9.0020.0002] # PERSON WITH HEADSCARF
+1F9D6 ; [*18EA.0020.0002] # PERSON IN STEAMY ROOM
+1F9D7 ; [*18EB.0020.0002] # PERSON CLIMBING
+1F9D8 ; [*18EC.0020.0002] # PERSON IN LOTUS POSITION
+1F9D9 ; [*18ED.0020.0002] # MAGE
+1F9DA ; [*18EE.0020.0002] # FAIRY
+1F9DB ; [*18EF.0020.0002] # VAMPIRE
+1F9DC ; [*18F0.0020.0002] # MERPERSON
+1F9DD ; [*18F1.0020.0002] # ELF
+1F9DE ; [*18F2.0020.0002] # GENIE
+1F9DF ; [*18F3.0020.0002] # ZOMBIE
+1F9E0 ; [*18F4.0020.0002] # BRAIN
+1F9E1 ; [*18F5.0020.0002] # ORANGE HEART
+1F9E2 ; [*18F6.0020.0002] # BILLED CAP
+1F9E3 ; [*18F7.0020.0002] # SCARF
+1F9E4 ; [*18F8.0020.0002] # GLOVES
+1F9E5 ; [*18F9.0020.0002] # COAT
+1F9E6 ; [*18FA.0020.0002] # SOCKS
+1F9E7 ; [*18FB.0020.0002] # RED GIFT ENVELOPE
+1F9E8 ; [*18FC.0020.0002] # FIRECRACKER
+1F9E9 ; [*18FD.0020.0002] # JIGSAW PUZZLE PIECE
+1F9EA ; [*18FE.0020.0002] # TEST TUBE
+1F9EB ; [*18FF.0020.0002] # PETRI DISH
+1F9EC ; [*1900.0020.0002] # DNA DOUBLE HELIX
+1F9ED ; [*1901.0020.0002] # COMPASS
+1F9EE ; [*1902.0020.0002] # ABACUS
+1F9EF ; [*1903.0020.0002] # FIRE EXTINGUISHER
+1F9F0 ; [*1904.0020.0002] # TOOLBOX
+1F9F1 ; [*1905.0020.0002] # BRICK
+1F9F2 ; [*1906.0020.0002] # MAGNET
+1F9F3 ; [*1907.0020.0002] # LUGGAGE
+1F9F4 ; [*1908.0020.0002] # LOTION BOTTLE
+1F9F5 ; [*1909.0020.0002] # SPOOL OF THREAD
+1F9F6 ; [*190A.0020.0002] # BALL OF YARN
+1F9F7 ; [*190B.0020.0002] # SAFETY PIN
+1F9F8 ; [*190C.0020.0002] # TEDDY BEAR
+1F9F9 ; [*190D.0020.0002] # BROOM
+1F9FA ; [*190E.0020.0002] # BASKET
+1F9FB ; [*190F.0020.0002] # ROLL OF PAPER
+1F9FC ; [*1910.0020.0002] # BAR OF SOAP
+1F9FD ; [*1911.0020.0002] # SPONGE
+1F9FE ; [*1912.0020.0002] # RECEIPT
+1F9FF ; [*1913.0020.0002] # NAZAR AMULET
+1FA00 ; [*14A6.0020.0002] # NEUTRAL CHESS KING
+1FA01 ; [*14A7.0020.0002] # NEUTRAL CHESS QUEEN
+1FA02 ; [*14A8.0020.0002] # NEUTRAL CHESS ROOK
+1FA03 ; [*14A9.0020.0002] # NEUTRAL CHESS BISHOP
+1FA04 ; [*14AA.0020.0002] # NEUTRAL CHESS KNIGHT
+1FA05 ; [*14AB.0020.0002] # NEUTRAL CHESS PAWN
+1FA06 ; [*14AC.0020.0002] # WHITE CHESS KNIGHT ROTATED FORTY-FIVE DEGREES
+1FA07 ; [*14AD.0020.0002] # BLACK CHESS KNIGHT ROTATED FORTY-FIVE DEGREES
+1FA08 ; [*14AE.0020.0002] # NEUTRAL CHESS KNIGHT ROTATED FORTY-FIVE DEGREES
+1FA09 ; [*14AF.0020.0002] # WHITE CHESS KING ROTATED NINETY DEGREES
+1FA0A ; [*14B0.0020.0002] # WHITE CHESS QUEEN ROTATED NINETY DEGREES
+1FA0B ; [*14B1.0020.0002] # WHITE CHESS ROOK ROTATED NINETY DEGREES
+1FA0C ; [*14B2.0020.0002] # WHITE CHESS BISHOP ROTATED NINETY DEGREES
+1FA0D ; [*14B3.0020.0002] # WHITE CHESS KNIGHT ROTATED NINETY DEGREES
+1FA0E ; [*14B4.0020.0002] # WHITE CHESS PAWN ROTATED NINETY DEGREES
+1FA0F ; [*14B5.0020.0002] # BLACK CHESS KING ROTATED NINETY DEGREES
+1FA10 ; [*14B6.0020.0002] # BLACK CHESS QUEEN ROTATED NINETY DEGREES
+1FA11 ; [*14B7.0020.0002] # BLACK CHESS ROOK ROTATED NINETY DEGREES
+1FA12 ; [*14B8.0020.0002] # BLACK CHESS BISHOP ROTATED NINETY DEGREES
+1FA13 ; [*14B9.0020.0002] # BLACK CHESS KNIGHT ROTATED NINETY DEGREES
+1FA14 ; [*14BA.0020.0002] # BLACK CHESS PAWN ROTATED NINETY DEGREES
+1FA15 ; [*14BB.0020.0002] # NEUTRAL CHESS KING ROTATED NINETY DEGREES
+1FA16 ; [*14BC.0020.0002] # NEUTRAL CHESS QUEEN ROTATED NINETY DEGREES
+1FA17 ; [*14BD.0020.0002] # NEUTRAL CHESS ROOK ROTATED NINETY DEGREES
+1FA18 ; [*14BE.0020.0002] # NEUTRAL CHESS BISHOP ROTATED NINETY DEGREES
+1FA19 ; [*14BF.0020.0002] # NEUTRAL CHESS KNIGHT ROTATED NINETY DEGREES
+1FA1A ; [*14C0.0020.0002] # NEUTRAL CHESS PAWN ROTATED NINETY DEGREES
+1FA1B ; [*14C1.0020.0002] # WHITE CHESS KNIGHT ROTATED ONE HUNDRED THIRTY-FIVE DEGREES
+1FA1C ; [*14C2.0020.0002] # BLACK CHESS KNIGHT ROTATED ONE HUNDRED THIRTY-FIVE DEGREES
+1FA1D ; [*14C3.0020.0002] # NEUTRAL CHESS KNIGHT ROTATED ONE HUNDRED THIRTY-FIVE DEGREES
+1FA1E ; [*14C4.0020.0002] # WHITE CHESS TURNED KING
+1FA1F ; [*14C5.0020.0002] # WHITE CHESS TURNED QUEEN
+1FA20 ; [*14C6.0020.0002] # WHITE CHESS TURNED ROOK
+1FA21 ; [*14C7.0020.0002] # WHITE CHESS TURNED BISHOP
+1FA22 ; [*14C8.0020.0002] # WHITE CHESS TURNED KNIGHT
+1FA23 ; [*14C9.0020.0002] # WHITE CHESS TURNED PAWN
+1FA24 ; [*14CA.0020.0002] # BLACK CHESS TURNED KING
+1FA25 ; [*14CB.0020.0002] # BLACK CHESS TURNED QUEEN
+1FA26 ; [*14CC.0020.0002] # BLACK CHESS TURNED ROOK
+1FA27 ; [*14CD.0020.0002] # BLACK CHESS TURNED BISHOP
+1FA28 ; [*14CE.0020.0002] # BLACK CHESS TURNED KNIGHT
+1FA29 ; [*14CF.0020.0002] # BLACK CHESS TURNED PAWN
+1FA2A ; [*14D0.0020.0002] # NEUTRAL CHESS TURNED KING
+1FA2B ; [*14D1.0020.0002] # NEUTRAL CHESS TURNED QUEEN
+1FA2C ; [*14D2.0020.0002] # NEUTRAL CHESS TURNED ROOK
+1FA2D ; [*14D3.0020.0002] # NEUTRAL CHESS TURNED BISHOP
+1FA2E ; [*14D4.0020.0002] # NEUTRAL CHESS TURNED KNIGHT
+1FA2F ; [*14D5.0020.0002] # NEUTRAL CHESS TURNED PAWN
+1FA30 ; [*14D6.0020.0002] # WHITE CHESS KNIGHT ROTATED TWO HUNDRED TWENTY-FIVE DEGREES
+1FA31 ; [*14D7.0020.0002] # BLACK CHESS KNIGHT ROTATED TWO HUNDRED TWENTY-FIVE DEGREES
+1FA32 ; [*14D8.0020.0002] # NEUTRAL CHESS KNIGHT ROTATED TWO HUNDRED TWENTY-FIVE DEGREES
+1FA33 ; [*14D9.0020.0002] # WHITE CHESS KING ROTATED TWO HUNDRED SEVENTY DEGREES
+1FA34 ; [*14DA.0020.0002] # WHITE CHESS QUEEN ROTATED TWO HUNDRED SEVENTY DEGREES
+1FA35 ; [*14DB.0020.0002] # WHITE CHESS ROOK ROTATED TWO HUNDRED SEVENTY DEGREES
+1FA36 ; [*14DC.0020.0002] # WHITE CHESS BISHOP ROTATED TWO HUNDRED SEVENTY DEGREES
+1FA37 ; [*14DD.0020.0002] # WHITE CHESS KNIGHT ROTATED TWO HUNDRED SEVENTY DEGREES
+1FA38 ; [*14DE.0020.0002] # WHITE CHESS PAWN ROTATED TWO HUNDRED SEVENTY DEGREES
+1FA39 ; [*14DF.0020.0002] # BLACK CHESS KING ROTATED TWO HUNDRED SEVENTY DEGREES
+1FA3A ; [*14E0.0020.0002] # BLACK CHESS QUEEN ROTATED TWO HUNDRED SEVENTY DEGREES
+1FA3B ; [*14E1.0020.0002] # BLACK CHESS ROOK ROTATED TWO HUNDRED SEVENTY DEGREES
+1FA3C ; [*14E2.0020.0002] # BLACK CHESS BISHOP ROTATED TWO HUNDRED SEVENTY DEGREES
+1FA3D ; [*14E3.0020.0002] # BLACK CHESS KNIGHT ROTATED TWO HUNDRED SEVENTY DEGREES
+1FA3E ; [*14E4.0020.0002] # BLACK CHESS PAWN ROTATED TWO HUNDRED SEVENTY DEGREES
+1FA3F ; [*14E5.0020.0002] # NEUTRAL CHESS KING ROTATED TWO HUNDRED SEVENTY DEGREES
+1FA40 ; [*14E6.0020.0002] # NEUTRAL CHESS QUEEN ROTATED TWO HUNDRED SEVENTY DEGREES
+1FA41 ; [*14E7.0020.0002] # NEUTRAL CHESS ROOK ROTATED TWO HUNDRED SEVENTY DEGREES
+1FA42 ; [*14E8.0020.0002] # NEUTRAL CHESS BISHOP ROTATED TWO HUNDRED SEVENTY DEGREES
+1FA43 ; [*14E9.0020.0002] # NEUTRAL CHESS KNIGHT ROTATED TWO HUNDRED SEVENTY DEGREES
+1FA44 ; [*14EA.0020.0002] # NEUTRAL CHESS PAWN ROTATED TWO HUNDRED SEVENTY DEGREES
+1FA45 ; [*14EB.0020.0002] # WHITE CHESS KNIGHT ROTATED THREE HUNDRED FIFTEEN DEGREES
+1FA46 ; [*14EC.0020.0002] # BLACK CHESS KNIGHT ROTATED THREE HUNDRED FIFTEEN DEGREES
+1FA47 ; [*14ED.0020.0002] # NEUTRAL CHESS KNIGHT ROTATED THREE HUNDRED FIFTEEN DEGREES
+1FA48 ; [*14EE.0020.0002] # WHITE CHESS EQUIHOPPER
+1FA49 ; [*14EF.0020.0002] # BLACK CHESS EQUIHOPPER
+1FA4A ; [*14F0.0020.0002] # NEUTRAL CHESS EQUIHOPPER
+1FA4B ; [*14F1.0020.0002] # WHITE CHESS EQUIHOPPER ROTATED NINETY DEGREES
+1FA4C ; [*14F2.0020.0002] # BLACK CHESS EQUIHOPPER ROTATED NINETY DEGREES
+1FA4D ; [*14F3.0020.0002] # NEUTRAL CHESS EQUIHOPPER ROTATED NINETY DEGREES
+1FA4E ; [*14F4.0020.0002] # WHITE CHESS KNIGHT-QUEEN
+1FA4F ; [*14F5.0020.0002] # WHITE CHESS KNIGHT-ROOK
+1FA50 ; [*14F6.0020.0002] # WHITE CHESS KNIGHT-BISHOP
+1FA51 ; [*14F7.0020.0002] # BLACK CHESS KNIGHT-QUEEN
+1FA52 ; [*14F8.0020.0002] # BLACK CHESS KNIGHT-ROOK
+1FA53 ; [*14F9.0020.0002] # BLACK CHESS KNIGHT-BISHOP
+1FA60 ; [*14FA.0020.0002] # XIANGQI RED GENERAL
+1FA61 ; [*14FB.0020.0002] # XIANGQI RED MANDARIN
+1FA62 ; [*14FC.0020.0002] # XIANGQI RED ELEPHANT
+1FA63 ; [*14FD.0020.0002] # XIANGQI RED HORSE
+1FA64 ; [*14FE.0020.0002] # XIANGQI RED CHARIOT
+1FA65 ; [*14FF.0020.0002] # XIANGQI RED CANNON
+1FA66 ; [*1500.0020.0002] # XIANGQI RED SOLDIER
+1FA67 ; [*1501.0020.0002] # XIANGQI BLACK GENERAL
+1FA68 ; [*1502.0020.0002] # XIANGQI BLACK MANDARIN
+1FA69 ; [*1503.0020.0002] # XIANGQI BLACK ELEPHANT
+1FA6A ; [*1504.0020.0002] # XIANGQI BLACK HORSE
+1FA6B ; [*1505.0020.0002] # XIANGQI BLACK CHARIOT
+1FA6C ; [*1506.0020.0002] # XIANGQI BLACK CANNON
+1FA6D ; [*1507.0020.0002] # XIANGQI BLACK SOLDIER
+1FA70 ; [*1914.0020.0002] # BALLET SHOES
+1FA71 ; [*1915.0020.0002] # ONE-PIECE SWIMSUIT
+1FA72 ; [*1916.0020.0002] # BRIEFS
+1FA73 ; [*1917.0020.0002] # SHORTS
+1FA74 ; [*1918.0020.0002] # THONG SANDAL
+1FA78 ; [*1919.0020.0002] # DROP OF BLOOD
+1FA79 ; [*191A.0020.0002] # ADHESIVE BANDAGE
+1FA7A ; [*191B.0020.0002] # STETHOSCOPE
+1FA7B ; [*191C.0020.0002] # X-RAY
+1FA7C ; [*191D.0020.0002] # CRUTCH
+1FA80 ; [*191E.0020.0002] # YO-YO
+1FA81 ; [*191F.0020.0002] # KITE
+1FA82 ; [*1920.0020.0002] # PARACHUTE
+1FA83 ; [*1921.0020.0002] # BOOMERANG
+1FA84 ; [*1922.0020.0002] # MAGIC WAND
+1FA85 ; [*1923.0020.0002] # PINATA
+1FA86 ; [*1924.0020.0002] # NESTING DOLLS
+1FA90 ; [*1925.0020.0002] # RINGED PLANET
+1FA91 ; [*1926.0020.0002] # CHAIR
+1FA92 ; [*1927.0020.0002] # RAZOR
+1FA93 ; [*1928.0020.0002] # AXE
+1FA94 ; [*1929.0020.0002] # DIYA LAMP
+1FA95 ; [*192A.0020.0002] # BANJO
+1FA96 ; [*192B.0020.0002] # MILITARY HELMET
+1FA97 ; [*192C.0020.0002] # ACCORDION
+1FA98 ; [*192D.0020.0002] # LONG DRUM
+1FA99 ; [*192E.0020.0002] # COIN
+1FA9A ; [*192F.0020.0002] # CARPENTRY SAW
+1FA9B ; [*1930.0020.0002] # SCREWDRIVER
+1FA9C ; [*1931.0020.0002] # LADDER
+1FA9D ; [*1932.0020.0002] # HOOK
+1FA9E ; [*1933.0020.0002] # MIRROR
+1FA9F ; [*1934.0020.0002] # WINDOW
+1FAA0 ; [*1935.0020.0002] # PLUNGER
+1FAA1 ; [*1936.0020.0002] # SEWING NEEDLE
+1FAA2 ; [*1937.0020.0002] # KNOT
+1FAA3 ; [*1938.0020.0002] # BUCKET
+1FAA4 ; [*1939.0020.0002] # MOUSE TRAP
+1FAA5 ; [*193A.0020.0002] # TOOTHBRUSH
+1FAA6 ; [*193B.0020.0002] # HEADSTONE
+1FAA7 ; [*193C.0020.0002] # PLACARD
+1FAA8 ; [*193D.0020.0002] # ROCK
+1FAA9 ; [*193E.0020.0002] # MIRROR BALL
+1FAAA ; [*193F.0020.0002] # IDENTIFICATION CARD
+1FAAB ; [*1940.0020.0002] # LOW BATTERY
+1FAAC ; [*1941.0020.0002] # HAMSA
+1FAB0 ; [*1942.0020.0002] # FLY
+1FAB1 ; [*1943.0020.0002] # WORM
+1FAB2 ; [*1944.0020.0002] # BEETLE
+1FAB3 ; [*1945.0020.0002] # COCKROACH
+1FAB4 ; [*1946.0020.0002] # POTTED PLANT
+1FAB5 ; [*1947.0020.0002] # WOOD
+1FAB6 ; [*1948.0020.0002] # FEATHER
+1FAB7 ; [*1949.0020.0002] # LOTUS
+1FAB8 ; [*194A.0020.0002] # CORAL
+1FAB9 ; [*194B.0020.0002] # EMPTY NEST
+1FABA ; [*194C.0020.0002] # NEST WITH EGGS
+1FAC0 ; [*194D.0020.0002] # ANATOMICAL HEART
+1FAC1 ; [*194E.0020.0002] # LUNGS
+1FAC2 ; [*194F.0020.0002] # PEOPLE HUGGING
+1FAC3 ; [*1950.0020.0002] # PREGNANT MAN
+1FAC4 ; [*1951.0020.0002] # PREGNANT PERSON
+1FAC5 ; [*1952.0020.0002] # PERSON WITH CROWN
+1FAD0 ; [*1953.0020.0002] # BLUEBERRIES
+1FAD1 ; [*1954.0020.0002] # BELL PEPPER
+1FAD2 ; [*1955.0020.0002] # OLIVE
+1FAD3 ; [*1956.0020.0002] # FLATBREAD
+1FAD4 ; [*1957.0020.0002] # TAMALE
+1FAD5 ; [*1958.0020.0002] # FONDUE
+1FAD6 ; [*1959.0020.0002] # TEAPOT
+1FAD7 ; [*195A.0020.0002] # POURING LIQUID
+1FAD8 ; [*195B.0020.0002] # BEANS
+1FAD9 ; [*195C.0020.0002] # JAR
+1FAE0 ; [*195D.0020.0002] # MELTING FACE
+1FAE1 ; [*195E.0020.0002] # SALUTING FACE
+1FAE2 ; [*195F.0020.0002] # FACE WITH OPEN EYES AND HAND OVER MOUTH
+1FAE3 ; [*1960.0020.0002] # FACE WITH PEEKING EYE
+1FAE4 ; [*1961.0020.0002] # FACE WITH DIAGONAL MOUTH
+1FAE5 ; [*1962.0020.0002] # DOTTED LINE FACE
+1FAE6 ; [*1963.0020.0002] # BITING LIP
+1FAE7 ; [*1964.0020.0002] # BUBBLES
+1FAF0 ; [*1965.0020.0002] # HAND WITH INDEX FINGER AND THUMB CROSSED
+1FAF1 ; [*1966.0020.0002] # RIGHTWARDS HAND
+1FAF2 ; [*1967.0020.0002] # LEFTWARDS HAND
+1FAF3 ; [*1968.0020.0002] # PALM DOWN HAND
+1FAF4 ; [*1969.0020.0002] # PALM UP HAND
+1FAF5 ; [*196A.0020.0002] # INDEX POINTING AT THE VIEWER
+1FAF6 ; [*196B.0020.0002] # HEART HANDS
+1FB00 ; [*09A0.0020.0002] # BLOCK SEXTANT-1
+1FB01 ; [*09A1.0020.0002] # BLOCK SEXTANT-2
+1FB02 ; [*09A2.0020.0002] # BLOCK SEXTANT-12
+1FB03 ; [*09A3.0020.0002] # BLOCK SEXTANT-3
+1FB04 ; [*09A4.0020.0002] # BLOCK SEXTANT-13
+1FB05 ; [*09A5.0020.0002] # BLOCK SEXTANT-23
+1FB06 ; [*09A6.0020.0002] # BLOCK SEXTANT-123
+1FB07 ; [*09A7.0020.0002] # BLOCK SEXTANT-4
+1FB08 ; [*09A8.0020.0002] # BLOCK SEXTANT-14
+1FB09 ; [*09A9.0020.0002] # BLOCK SEXTANT-24
+1FB0A ; [*09AA.0020.0002] # BLOCK SEXTANT-124
+1FB0B ; [*09AB.0020.0002] # BLOCK SEXTANT-34
+1FB0C ; [*09AC.0020.0002] # BLOCK SEXTANT-134
+1FB0D ; [*09AD.0020.0002] # BLOCK SEXTANT-234
+1FB0E ; [*09AE.0020.0002] # BLOCK SEXTANT-1234
+1FB0F ; [*09AF.0020.0002] # BLOCK SEXTANT-5
+1FB10 ; [*09B0.0020.0002] # BLOCK SEXTANT-15
+1FB11 ; [*09B1.0020.0002] # BLOCK SEXTANT-25
+1FB12 ; [*09B2.0020.0002] # BLOCK SEXTANT-125
+1FB13 ; [*09B3.0020.0002] # BLOCK SEXTANT-35
+1FB14 ; [*09B4.0020.0002] # BLOCK SEXTANT-235
+1FB15 ; [*09B5.0020.0002] # BLOCK SEXTANT-1235
+1FB16 ; [*09B6.0020.0002] # BLOCK SEXTANT-45
+1FB17 ; [*09B7.0020.0002] # BLOCK SEXTANT-145
+1FB18 ; [*09B8.0020.0002] # BLOCK SEXTANT-245
+1FB19 ; [*09B9.0020.0002] # BLOCK SEXTANT-1245
+1FB1A ; [*09BA.0020.0002] # BLOCK SEXTANT-345
+1FB1B ; [*09BB.0020.0002] # BLOCK SEXTANT-1345
+1FB1C ; [*09BC.0020.0002] # BLOCK SEXTANT-2345
+1FB1D ; [*09BD.0020.0002] # BLOCK SEXTANT-12345
+1FB1E ; [*09BE.0020.0002] # BLOCK SEXTANT-6
+1FB1F ; [*09BF.0020.0002] # BLOCK SEXTANT-16
+1FB20 ; [*09C0.0020.0002] # BLOCK SEXTANT-26
+1FB21 ; [*09C1.0020.0002] # BLOCK SEXTANT-126
+1FB22 ; [*09C2.0020.0002] # BLOCK SEXTANT-36
+1FB23 ; [*09C3.0020.0002] # BLOCK SEXTANT-136
+1FB24 ; [*09C4.0020.0002] # BLOCK SEXTANT-236
+1FB25 ; [*09C5.0020.0002] # BLOCK SEXTANT-1236
+1FB26 ; [*09C6.0020.0002] # BLOCK SEXTANT-46
+1FB27 ; [*09C7.0020.0002] # BLOCK SEXTANT-146
+1FB28 ; [*09C8.0020.0002] # BLOCK SEXTANT-1246
+1FB29 ; [*09C9.0020.0002] # BLOCK SEXTANT-346
+1FB2A ; [*09CA.0020.0002] # BLOCK SEXTANT-1346
+1FB2B ; [*09CB.0020.0002] # BLOCK SEXTANT-2346
+1FB2C ; [*09CC.0020.0002] # BLOCK SEXTANT-12346
+1FB2D ; [*09CD.0020.0002] # BLOCK SEXTANT-56
+1FB2E ; [*09CE.0020.0002] # BLOCK SEXTANT-156
+1FB2F ; [*09CF.0020.0002] # BLOCK SEXTANT-256
+1FB30 ; [*09D0.0020.0002] # BLOCK SEXTANT-1256
+1FB31 ; [*09D1.0020.0002] # BLOCK SEXTANT-356
+1FB32 ; [*09D2.0020.0002] # BLOCK SEXTANT-1356
+1FB33 ; [*09D3.0020.0002] # BLOCK SEXTANT-2356
+1FB34 ; [*09D4.0020.0002] # BLOCK SEXTANT-12356
+1FB35 ; [*09D5.0020.0002] # BLOCK SEXTANT-456
+1FB36 ; [*09D6.0020.0002] # BLOCK SEXTANT-1456
+1FB37 ; [*09D7.0020.0002] # BLOCK SEXTANT-2456
+1FB38 ; [*09D8.0020.0002] # BLOCK SEXTANT-12456
+1FB39 ; [*09D9.0020.0002] # BLOCK SEXTANT-3456
+1FB3A ; [*09DA.0020.0002] # BLOCK SEXTANT-13456
+1FB3B ; [*09DB.0020.0002] # BLOCK SEXTANT-23456
+1FB3C ; [*09DC.0020.0002] # LOWER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER CENTRE
+1FB3D ; [*09DD.0020.0002] # LOWER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER RIGHT
+1FB3E ; [*09DE.0020.0002] # LOWER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER CENTRE
+1FB3F ; [*09DF.0020.0002] # LOWER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER RIGHT
+1FB40 ; [*09E0.0020.0002] # LOWER LEFT BLOCK DIAGONAL UPPER LEFT TO LOWER CENTRE
+1FB41 ; [*09E1.0020.0002] # LOWER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER CENTRE
+1FB42 ; [*09E2.0020.0002] # LOWER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER RIGHT
+1FB43 ; [*09E3.0020.0002] # LOWER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER CENTRE
+1FB44 ; [*09E4.0020.0002] # LOWER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER RIGHT
+1FB45 ; [*09E5.0020.0002] # LOWER RIGHT BLOCK DIAGONAL LOWER LEFT TO UPPER CENTRE
+1FB46 ; [*09E6.0020.0002] # LOWER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER MIDDLE RIGHT
+1FB47 ; [*09E7.0020.0002] # LOWER RIGHT BLOCK DIAGONAL LOWER CENTRE TO LOWER MIDDLE RIGHT
+1FB48 ; [*09E8.0020.0002] # LOWER RIGHT BLOCK DIAGONAL LOWER LEFT TO LOWER MIDDLE RIGHT
+1FB49 ; [*09E9.0020.0002] # LOWER RIGHT BLOCK DIAGONAL LOWER CENTRE TO UPPER MIDDLE RIGHT
+1FB4A ; [*09EA.0020.0002] # LOWER RIGHT BLOCK DIAGONAL LOWER LEFT TO UPPER MIDDLE RIGHT
+1FB4B ; [*09EB.0020.0002] # LOWER RIGHT BLOCK DIAGONAL LOWER CENTRE TO UPPER RIGHT
+1FB4C ; [*09EC.0020.0002] # LOWER LEFT BLOCK DIAGONAL UPPER CENTRE TO UPPER MIDDLE RIGHT
+1FB4D ; [*09ED.0020.0002] # LOWER LEFT BLOCK DIAGONAL UPPER LEFT TO UPPER MIDDLE RIGHT
+1FB4E ; [*09EE.0020.0002] # LOWER LEFT BLOCK DIAGONAL UPPER CENTRE TO LOWER MIDDLE RIGHT
+1FB4F ; [*09EF.0020.0002] # LOWER LEFT BLOCK DIAGONAL UPPER LEFT TO LOWER MIDDLE RIGHT
+1FB50 ; [*09F0.0020.0002] # LOWER LEFT BLOCK DIAGONAL UPPER CENTRE TO LOWER RIGHT
+1FB51 ; [*09F1.0020.0002] # LOWER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER MIDDLE RIGHT
+1FB52 ; [*09F2.0020.0002] # UPPER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER CENTRE
+1FB53 ; [*09F3.0020.0002] # UPPER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER RIGHT
+1FB54 ; [*09F4.0020.0002] # UPPER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER CENTRE
+1FB55 ; [*09F5.0020.0002] # UPPER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER RIGHT
+1FB56 ; [*09F6.0020.0002] # UPPER RIGHT BLOCK DIAGONAL UPPER LEFT TO LOWER CENTRE
+1FB57 ; [*09F7.0020.0002] # UPPER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER CENTRE
+1FB58 ; [*09F8.0020.0002] # UPPER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER RIGHT
+1FB59 ; [*09F9.0020.0002] # UPPER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER CENTRE
+1FB5A ; [*09FA.0020.0002] # UPPER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER RIGHT
+1FB5B ; [*09FB.0020.0002] # UPPER LEFT BLOCK DIAGONAL LOWER LEFT TO UPPER CENTRE
+1FB5C ; [*09FC.0020.0002] # UPPER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER MIDDLE RIGHT
+1FB5D ; [*09FD.0020.0002] # UPPER LEFT BLOCK DIAGONAL LOWER CENTRE TO LOWER MIDDLE RIGHT
+1FB5E ; [*09FE.0020.0002] # UPPER LEFT BLOCK DIAGONAL LOWER LEFT TO LOWER MIDDLE RIGHT
+1FB5F ; [*09FF.0020.0002] # UPPER LEFT BLOCK DIAGONAL LOWER CENTRE TO UPPER MIDDLE RIGHT
+1FB60 ; [*0A00.0020.0002] # UPPER LEFT BLOCK DIAGONAL LOWER LEFT TO UPPER MIDDLE RIGHT
+1FB61 ; [*0A01.0020.0002] # UPPER LEFT BLOCK DIAGONAL LOWER CENTRE TO UPPER RIGHT
+1FB62 ; [*0A02.0020.0002] # UPPER RIGHT BLOCK DIAGONAL UPPER CENTRE TO UPPER MIDDLE RIGHT
+1FB63 ; [*0A03.0020.0002] # UPPER RIGHT BLOCK DIAGONAL UPPER LEFT TO UPPER MIDDLE RIGHT
+1FB64 ; [*0A04.0020.0002] # UPPER RIGHT BLOCK DIAGONAL UPPER CENTRE TO LOWER MIDDLE RIGHT
+1FB65 ; [*0A05.0020.0002] # UPPER RIGHT BLOCK DIAGONAL UPPER LEFT TO LOWER MIDDLE RIGHT
+1FB66 ; [*0A06.0020.0002] # UPPER RIGHT BLOCK DIAGONAL UPPER CENTRE TO LOWER RIGHT
+1FB67 ; [*0A07.0020.0002] # UPPER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER MIDDLE RIGHT
+1FB68 ; [*0A08.0020.0002] # UPPER AND RIGHT AND LOWER TRIANGULAR THREE QUARTERS BLOCK
+1FB69 ; [*0A09.0020.0002] # LEFT AND LOWER AND RIGHT TRIANGULAR THREE QUARTERS BLOCK
+1FB6A ; [*0A0A.0020.0002] # UPPER AND LEFT AND LOWER TRIANGULAR THREE QUARTERS BLOCK
+1FB6B ; [*0A0B.0020.0002] # LEFT AND UPPER AND RIGHT TRIANGULAR THREE QUARTERS BLOCK
+1FB6C ; [*0A0C.0020.0002] # LEFT TRIANGULAR ONE QUARTER BLOCK
+1FB6D ; [*0A0D.0020.0002] # UPPER TRIANGULAR ONE QUARTER BLOCK
+1FB6E ; [*0A0E.0020.0002] # RIGHT TRIANGULAR ONE QUARTER BLOCK
+1FB6F ; [*0A0F.0020.0002] # LOWER TRIANGULAR ONE QUARTER BLOCK
+1FB70 ; [*0A10.0020.0002] # VERTICAL ONE EIGHTH BLOCK-2
+1FB71 ; [*0A11.0020.0002] # VERTICAL ONE EIGHTH BLOCK-3
+1FB72 ; [*0A12.0020.0002] # VERTICAL ONE EIGHTH BLOCK-4
+1FB73 ; [*0A13.0020.0002] # VERTICAL ONE EIGHTH BLOCK-5
+1FB74 ; [*0A14.0020.0002] # VERTICAL ONE EIGHTH BLOCK-6
+1FB75 ; [*0A15.0020.0002] # VERTICAL ONE EIGHTH BLOCK-7
+1FB76 ; [*0A16.0020.0002] # HORIZONTAL ONE EIGHTH BLOCK-2
+1FB77 ; [*0A17.0020.0002] # HORIZONTAL ONE EIGHTH BLOCK-3
+1FB78 ; [*0A18.0020.0002] # HORIZONTAL ONE EIGHTH BLOCK-4
+1FB79 ; [*0A19.0020.0002] # HORIZONTAL ONE EIGHTH BLOCK-5
+1FB7A ; [*0A1A.0020.0002] # HORIZONTAL ONE EIGHTH BLOCK-6
+1FB7B ; [*0A1B.0020.0002] # HORIZONTAL ONE EIGHTH BLOCK-7
+1FB7C ; [*0A1C.0020.0002] # LEFT AND LOWER ONE EIGHTH BLOCK
+1FB7D ; [*0A1D.0020.0002] # LEFT AND UPPER ONE EIGHTH BLOCK
+1FB7E ; [*0A1E.0020.0002] # RIGHT AND UPPER ONE EIGHTH BLOCK
+1FB7F ; [*0A1F.0020.0002] # RIGHT AND LOWER ONE EIGHTH BLOCK
+1FB80 ; [*0A20.0020.0002] # UPPER AND LOWER ONE EIGHTH BLOCK
+1FB81 ; [*0A21.0020.0002] # HORIZONTAL ONE EIGHTH BLOCK-1358
+1FB82 ; [*0A22.0020.0002] # UPPER ONE QUARTER BLOCK
+1FB83 ; [*0A23.0020.0002] # UPPER THREE EIGHTHS BLOCK
+1FB84 ; [*0A24.0020.0002] # UPPER FIVE EIGHTHS BLOCK
+1FB85 ; [*0A25.0020.0002] # UPPER THREE QUARTERS BLOCK
+1FB86 ; [*0A26.0020.0002] # UPPER SEVEN EIGHTHS BLOCK
+1FB87 ; [*0A27.0020.0002] # RIGHT ONE QUARTER BLOCK
+1FB88 ; [*0A28.0020.0002] # RIGHT THREE EIGHTHS BLOCK
+1FB89 ; [*0A29.0020.0002] # RIGHT FIVE EIGHTHS BLOCK
+1FB8A ; [*0A2A.0020.0002] # RIGHT THREE QUARTERS BLOCK
+1FB8B ; [*0A2B.0020.0002] # RIGHT SEVEN EIGHTHS BLOCK
+1FB8C ; [*0A2C.0020.0002] # LEFT HALF MEDIUM SHADE
+1FB8D ; [*0A2D.0020.0002] # RIGHT HALF MEDIUM SHADE
+1FB8E ; [*0A2E.0020.0002] # UPPER HALF MEDIUM SHADE
+1FB8F ; [*0A2F.0020.0002] # LOWER HALF MEDIUM SHADE
+1FB90 ; [*0A30.0020.0002] # INVERSE MEDIUM SHADE
+1FB91 ; [*0A31.0020.0002] # UPPER HALF BLOCK AND LOWER HALF INVERSE MEDIUM SHADE
+1FB92 ; [*0A32.0020.0002] # UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK
+1FB94 ; [*0A33.0020.0002] # LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK
+1FB95 ; [*0A34.0020.0002] # CHECKER BOARD FILL
+1FB96 ; [*0A35.0020.0002] # INVERSE CHECKER BOARD FILL
+1FB97 ; [*0A36.0020.0002] # HEAVY HORIZONTAL FILL
+1FB98 ; [*0A37.0020.0002] # UPPER LEFT TO LOWER RIGHT FILL
+1FB99 ; [*0A38.0020.0002] # UPPER RIGHT TO LOWER LEFT FILL
+1FB9A ; [*0A39.0020.0002] # UPPER AND LOWER TRIANGULAR HALF BLOCK
+1FB9B ; [*0A3A.0020.0002] # LEFT AND RIGHT TRIANGULAR HALF BLOCK
+1FB9C ; [*0A3B.0020.0002] # UPPER LEFT TRIANGULAR MEDIUM SHADE
+1FB9D ; [*0A3C.0020.0002] # UPPER RIGHT TRIANGULAR MEDIUM SHADE
+1FB9E ; [*0A3D.0020.0002] # LOWER RIGHT TRIANGULAR MEDIUM SHADE
+1FB9F ; [*0A3E.0020.0002] # LOWER LEFT TRIANGULAR MEDIUM SHADE
+1FBA0 ; [*0A3F.0020.0002] # BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT
+1FBA1 ; [*0A40.0020.0002] # BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT
+1FBA2 ; [*0A41.0020.0002] # BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO LOWER CENTRE
+1FBA3 ; [*0A42.0020.0002] # BOX DRAWINGS LIGHT DIAGONAL MIDDLE RIGHT TO LOWER CENTRE
+1FBA4 ; [*0A43.0020.0002] # BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT TO LOWER CENTRE
+1FBA5 ; [*0A44.0020.0002] # BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT TO LOWER CENTRE
+1FBA6 ; [*0A45.0020.0002] # BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO LOWER CENTRE TO MIDDLE RIGHT
+1FBA7 ; [*0A46.0020.0002] # BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO UPPER CENTRE TO MIDDLE RIGHT
+1FBA8 ; [*0A47.0020.0002] # BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT AND MIDDLE RIGHT TO LOWER CENTRE
+1FBA9 ; [*0A48.0020.0002] # BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT AND MIDDLE LEFT TO LOWER CENTRE
+1FBAA ; [*0A49.0020.0002] # BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT TO LOWER CENTRE TO MIDDLE LEFT
+1FBAB ; [*0A4A.0020.0002] # BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT TO LOWER CENTRE TO MIDDLE RIGHT
+1FBAC ; [*0A4B.0020.0002] # BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO UPPER CENTRE TO MIDDLE RIGHT TO LOWER CENTRE
+1FBAD ; [*0A4C.0020.0002] # BOX DRAWINGS LIGHT DIAGONAL MIDDLE RIGHT TO UPPER CENTRE TO MIDDLE LEFT TO LOWER CENTRE
+1FBAE ; [*0A4D.0020.0002] # BOX DRAWINGS LIGHT DIAGONAL DIAMOND
+1FBAF ; [*0A4E.0020.0002] # BOX DRAWINGS LIGHT HORIZONTAL WITH VERTICAL STROKE
+1FBB0 ; [*0A4F.0020.0002] # ARROWHEAD-SHAPED POINTER
+1FBB1 ; [*0A50.0020.0002] # INVERSE CHECK MARK
+1FBB2 ; [*0A51.0020.0002] # LEFT HALF RUNNING MAN
+1FBB3 ; [*0A52.0020.0002] # RIGHT HALF RUNNING MAN
+1FBB4 ; [*0A53.0020.0002] # INVERSE DOWNWARDS ARROW WITH TIP LEFTWARDS
+1FBB5 ; [*0A54.0020.0002] # LEFTWARDS ARROW AND UPPER AND LOWER ONE EIGHTH BLOCK
+1FBB6 ; [*0A55.0020.0002] # RIGHTWARDS ARROW AND UPPER AND LOWER ONE EIGHTH BLOCK
+1FBB7 ; [*0A56.0020.0002] # DOWNWARDS ARROW AND RIGHT ONE EIGHTH BLOCK
+1FBB8 ; [*0A57.0020.0002] # UPWARDS ARROW AND RIGHT ONE EIGHTH BLOCK
+1FBB9 ; [*0A58.0020.0002] # LEFT HALF FOLDER
+1FBBA ; [*0A59.0020.0002] # RIGHT HALF FOLDER
+1FBBB ; [*0A5A.0020.0002] # VOIDED GREEK CROSS
+1FBBC ; [*0A5B.0020.0002] # RIGHT OPEN SQUARED DOT
+1FBBD ; [*0A5C.0020.0002] # NEGATIVE DIAGONAL CROSS
+1FBBE ; [*0A5D.0020.0002] # NEGATIVE DIAGONAL MIDDLE RIGHT TO LOWER CENTRE
+1FBBF ; [*0A5E.0020.0002] # NEGATIVE DIAGONAL DIAMOND
+1FBC0 ; [*0A5F.0020.0002] # WHITE HEAVY SALTIRE WITH ROUNDED CORNERS
+1FBC1 ; [*0A60.0020.0002] # LEFT THIRD WHITE RIGHT POINTING INDEX
+1FBC2 ; [*0A61.0020.0002] # MIDDLE THIRD WHITE RIGHT POINTING INDEX
+1FBC3 ; [*0A62.0020.0002] # RIGHT THIRD WHITE RIGHT POINTING INDEX
+1FBC4 ; [*0A63.0020.0002] # NEGATIVE SQUARED QUESTION MARK
+1FBC5 ; [*0A64.0020.0002] # STICK FIGURE
+1FBC6 ; [*0A65.0020.0002] # STICK FIGURE WITH ARMS RAISED
+1FBC7 ; [*0A66.0020.0002] # STICK FIGURE LEANING LEFT
+1FBC8 ; [*0A67.0020.0002] # STICK FIGURE LEANING RIGHT
+1FBC9 ; [*0A68.0020.0002] # STICK FIGURE WITH DRESS
+1FBCA ; [*0A69.0020.0002] # WHITE UP-POINTING CHEVRON
+0332 ; [.0000.0021.0002] # COMBINING LOW LINE
+0313 ; [.0000.0022.0002] # COMBINING COMMA ABOVE
+0343 ; [.0000.0022.0002] # COMBINING GREEK KORONIS
+0486 ; [.0000.0022.0002] # COMBINING CYRILLIC PSILI PNEUMATA
+2CF1 ; [.0000.0022.0002] # COPTIC COMBINING SPIRITUS LENIS
+0314 ; [.0000.0023.0002] # COMBINING REVERSED COMMA ABOVE
+0485 ; [.0000.0023.0002] # COMBINING CYRILLIC DASIA PNEUMATA
+2CF0 ; [.0000.0023.0002] # COPTIC COMBINING SPIRITUS ASPER
+0301 ; [.0000.0024.0002] # COMBINING ACUTE ACCENT
+0341 ; [.0000.0024.0002] # COMBINING ACUTE TONE MARK
+0954 ; [.0000.0024.0002] # DEVANAGARI ACUTE ACCENT
+0300 ; [.0000.0025.0002] # COMBINING GRAVE ACCENT
+0340 ; [.0000.0025.0002] # COMBINING GRAVE TONE MARK
+0953 ; [.0000.0025.0002] # DEVANAGARI GRAVE ACCENT
+0306 ; [.0000.0026.0002] # COMBINING BREVE
+0302 ; [.0000.0027.0002] # COMBINING CIRCUMFLEX ACCENT
+030C ; [.0000.0028.0002] # COMBINING CARON
+030A ; [.0000.0029.0002] # COMBINING RING ABOVE
+0342 ; [.0000.002A.0002] # COMBINING GREEK PERISPOMENI
+0308 ; [.0000.002B.0002] # COMBINING DIAERESIS
+0344 ; [.0000.002B.0002][.0000.0024.0002] # COMBINING GREEK DIALYTIKA TONOS
+030B ; [.0000.002C.0002] # COMBINING DOUBLE ACUTE ACCENT
+0303 ; [.0000.002D.0002] # COMBINING TILDE
+0307 ; [.0000.002E.0002] # COMBINING DOT ABOVE
+0338 ; [.0000.002F.0002] # COMBINING LONG SOLIDUS OVERLAY
+0327 ; [.0000.0030.0002] # COMBINING CEDILLA
+0328 ; [.0000.0031.0002] # COMBINING OGONEK
+0304 ; [.0000.0032.0002] # COMBINING MACRON
+030D ; [.0000.0033.0002] # COMBINING VERTICAL LINE ABOVE
+030E ; [.0000.0033.0002] # COMBINING DOUBLE VERTICAL LINE ABOVE
+0312 ; [.0000.0033.0002] # COMBINING TURNED COMMA ABOVE
+0315 ; [.0000.0033.0002] # COMBINING COMMA ABOVE RIGHT
+031A ; [.0000.0033.0002] # COMBINING LEFT ANGLE ABOVE
+033D ; [.0000.0033.0002] # COMBINING X ABOVE
+033E ; [.0000.0033.0002] # COMBINING VERTICAL TILDE
+033F ; [.0000.0033.0002] # COMBINING DOUBLE OVERLINE
+0346 ; [.0000.0033.0002] # COMBINING BRIDGE ABOVE
+034A ; [.0000.0033.0002] # COMBINING NOT TILDE ABOVE
+034B ; [.0000.0033.0002] # COMBINING HOMOTHETIC ABOVE
+034C ; [.0000.0033.0002] # COMBINING ALMOST EQUAL TO ABOVE
+0350 ; [.0000.0033.0002] # COMBINING RIGHT ARROWHEAD ABOVE
+0351 ; [.0000.0033.0002] # COMBINING LEFT HALF RING ABOVE
+0352 ; [.0000.0033.0002] # COMBINING FERMATA
+0357 ; [.0000.0033.0002] # COMBINING RIGHT HALF RING ABOVE
+035B ; [.0000.0033.0002] # COMBINING ZIGZAG ABOVE
+035D ; [.0000.0033.0002] # COMBINING DOUBLE BREVE
+035E ; [.0000.0033.0002] # COMBINING DOUBLE MACRON
+0484 ; [.0000.0033.0002] # COMBINING CYRILLIC PALATALIZATION
+0487 ; [.0000.0033.0002] # COMBINING CYRILLIC POKRYTIE
+0741 ; [.0000.0033.0002] # SYRIAC QUSHSHAYA
+0745 ; [.0000.0033.0002] # SYRIAC THREE DOTS ABOVE
+0B55 ; [.0000.0033.0002] # ORIYA SIGN OVERLINE
+17CB ; [.0000.0033.0002] # KHMER SIGN BANTOC
+17CC ; [.0000.0033.0002] # KHMER SIGN ROBAT
+17CD ; [.0000.0033.0002] # KHMER SIGN TOANDAKHIAT
+17CE ; [.0000.0033.0002] # KHMER SIGN KAKABAT
+17CF ; [.0000.0033.0002] # KHMER SIGN AHSDA
+17D0 ; [.0000.0033.0002] # KHMER SIGN SAMYOK SANNYA
+17D1 ; [.0000.0033.0002] # KHMER SIGN VIRIAM
+17DD ; [.0000.0033.0002] # KHMER SIGN ATTHACAN
+1AB0 ; [.0000.0033.0002] # COMBINING DOUBLED CIRCUMFLEX ACCENT
+1AB1 ; [.0000.0033.0002] # COMBINING DIAERESIS-RING
+1AB2 ; [.0000.0033.0002] # COMBINING INFINITY
+1AB3 ; [.0000.0033.0002] # COMBINING DOWNWARDS ARROW
+1AB4 ; [.0000.0033.0002] # COMBINING TRIPLE DOT
+1ABB ; [.0000.0033.0002] # COMBINING PARENTHESES ABOVE
+1ABC ; [.0000.0033.0002] # COMBINING DOUBLE PARENTHESES ABOVE
+1AC1 ; [.0000.0033.0002] # COMBINING LEFT PARENTHESIS ABOVE LEFT
+1AC2 ; [.0000.0033.0002] # COMBINING RIGHT PARENTHESIS ABOVE RIGHT
+1AC5 ; [.0000.0033.0002] # COMBINING SQUARE BRACKETS ABOVE
+1AC6 ; [.0000.0033.0002] # COMBINING NUMBER SIGN ABOVE
+1AC7 ; [.0000.0033.0002] # COMBINING INVERTED DOUBLE ARCH ABOVE
+1AC8 ; [.0000.0033.0002] # COMBINING PLUS SIGN ABOVE
+1AC9 ; [.0000.0033.0002] # COMBINING DOUBLE PLUS SIGN ABOVE
+1ACB ; [.0000.0033.0002] # COMBINING TRIPLE ACUTE ACCENT
+1DC0 ; [.0000.0033.0002] # COMBINING DOTTED GRAVE ACCENT
+1DC1 ; [.0000.0033.0002] # COMBINING DOTTED ACUTE ACCENT
+1DC3 ; [.0000.0033.0002] # COMBINING SUSPENSION MARK
+1DC4 ; [.0000.0033.0002] # COMBINING MACRON-ACUTE
+1DC5 ; [.0000.0033.0002] # COMBINING GRAVE-MACRON
+1DC6 ; [.0000.0033.0002] # COMBINING MACRON-GRAVE
+1DC7 ; [.0000.0033.0002] # COMBINING ACUTE-MACRON
+1DC8 ; [.0000.0033.0002] # COMBINING GRAVE-ACUTE-GRAVE
+1DC9 ; [.0000.0033.0002] # COMBINING ACUTE-GRAVE-ACUTE
+1DCB ; [.0000.0033.0002] # COMBINING BREVE-MACRON
+1DCC ; [.0000.0033.0002] # COMBINING MACRON-BREVE
+1DCD ; [.0000.0033.0002] # COMBINING DOUBLE CIRCUMFLEX ABOVE
+1DCE ; [.0000.0033.0002] # COMBINING OGONEK ABOVE
+1DD1 ; [.0000.0033.0002] # COMBINING UR ABOVE
+1DF5 ; [.0000.0033.0002] # COMBINING UP TACK ABOVE
+1DF6 ; [.0000.0033.0002] # COMBINING KAVYKA ABOVE RIGHT
+1DF7 ; [.0000.0033.0002] # COMBINING KAVYKA ABOVE LEFT
+1DF8 ; [.0000.0033.0002] # COMBINING DOT ABOVE LEFT
+1DFB ; [.0000.0033.0002] # COMBINING DELETION MARK
+1DFE ; [.0000.0033.0002] # COMBINING LEFT ARROWHEAD ABOVE
+20F0 ; [.0000.0033.0002] # COMBINING ASTERISK ABOVE
+2CEF ; [.0000.0033.0002] # COPTIC COMBINING NI ABOVE
+A67C ; [.0000.0033.0002] # COMBINING CYRILLIC KAVYKA
+A67D ; [.0000.0033.0002] # COMBINING CYRILLIC PAYEROK
+10AE5 ; [.0000.0033.0002] # MANICHAEAN ABBREVIATION MARK ABOVE
+10D24 ; [.0000.0033.0002] # HANIFI ROHINGYA SIGN HARBAHAY
+10D25 ; [.0000.0033.0002] # HANIFI ROHINGYA SIGN TAHALA
+10D26 ; [.0000.0033.0002] # HANIFI ROHINGYA SIGN TANA
+10D27 ; [.0000.0033.0002] # HANIFI ROHINGYA SIGN TASSI
+10F48 ; [.0000.0033.0002] # SOGDIAN COMBINING DOT ABOVE
+10F49 ; [.0000.0033.0002] # SOGDIAN COMBINING TWO DOTS ABOVE
+10F4A ; [.0000.0033.0002] # SOGDIAN COMBINING CURVE ABOVE
+10F4C ; [.0000.0033.0002] # SOGDIAN COMBINING HOOK ABOVE
+10F82 ; [.0000.0033.0002] # OLD UYGHUR COMBINING DOT ABOVE
+10F84 ; [.0000.0033.0002] # OLD UYGHUR COMBINING TWO DOTS ABOVE
+1BC9D ; [.0000.0033.0002] # DUPLOYAN THICK LETTER SELECTOR
+1E2AE ; [.0000.0033.0002] # TOTO SIGN RISING TONE
+0316 ; [.0000.0034.0002] # COMBINING GRAVE ACCENT BELOW
+0317 ; [.0000.0034.0002] # COMBINING ACUTE ACCENT BELOW
+0318 ; [.0000.0034.0002] # COMBINING LEFT TACK BELOW
+0319 ; [.0000.0034.0002] # COMBINING RIGHT TACK BELOW
+031C ; [.0000.0034.0002] # COMBINING LEFT HALF RING BELOW
+031D ; [.0000.0034.0002] # COMBINING UP TACK BELOW
+031E ; [.0000.0034.0002] # COMBINING DOWN TACK BELOW
+031F ; [.0000.0034.0002] # COMBINING PLUS SIGN BELOW
+0320 ; [.0000.0034.0002] # COMBINING MINUS SIGN BELOW
+0329 ; [.0000.0034.0002] # COMBINING VERTICAL LINE BELOW
+032A ; [.0000.0034.0002] # COMBINING BRIDGE BELOW
+032B ; [.0000.0034.0002] # COMBINING INVERTED DOUBLE ARCH BELOW
+032C ; [.0000.0034.0002] # COMBINING CARON BELOW
+032F ; [.0000.0034.0002] # COMBINING INVERTED BREVE BELOW
+0333 ; [.0000.0034.0002] # COMBINING DOUBLE LOW LINE
+033A ; [.0000.0034.0002] # COMBINING INVERTED BRIDGE BELOW
+033B ; [.0000.0034.0002] # COMBINING SQUARE BELOW
+033C ; [.0000.0034.0002] # COMBINING SEAGULL BELOW
+0347 ; [.0000.0034.0002] # COMBINING EQUALS SIGN BELOW
+0348 ; [.0000.0034.0002] # COMBINING DOUBLE VERTICAL LINE BELOW
+0349 ; [.0000.0034.0002] # COMBINING LEFT ANGLE BELOW
+034D ; [.0000.0034.0002] # COMBINING LEFT RIGHT ARROW BELOW
+034E ; [.0000.0034.0002] # COMBINING UPWARDS ARROW BELOW
+0353 ; [.0000.0034.0002] # COMBINING X BELOW
+0354 ; [.0000.0034.0002] # COMBINING LEFT ARROWHEAD BELOW
+0355 ; [.0000.0034.0002] # COMBINING RIGHT ARROWHEAD BELOW
+0356 ; [.0000.0034.0002] # COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW
+0359 ; [.0000.0034.0002] # COMBINING ASTERISK BELOW
+035A ; [.0000.0034.0002] # COMBINING DOUBLE RING BELOW
+035C ; [.0000.0034.0002] # COMBINING DOUBLE BREVE BELOW
+035F ; [.0000.0034.0002] # COMBINING DOUBLE MACRON BELOW
+0362 ; [.0000.0034.0002] # COMBINING DOUBLE RIGHTWARDS ARROW BELOW
+0742 ; [.0000.0034.0002] # SYRIAC RUKKAKHA
+0746 ; [.0000.0034.0002] # SYRIAC THREE DOTS BELOW
+07FD ; [.0000.0034.0002] # NKO DANTAYALAN
+0859 ; [.0000.0034.0002] # MANDAIC AFFRICATION MARK
+085A ; [.0000.0034.0002] # MANDAIC VOCALIZATION MARK
+085B ; [.0000.0034.0002] # MANDAIC GEMINATION MARK
+1AB5 ; [.0000.0034.0002] # COMBINING X-X BELOW
+1AB6 ; [.0000.0034.0002] # COMBINING WIGGLY LINE BELOW
+1AB7 ; [.0000.0034.0002] # COMBINING OPEN MARK BELOW
+1AB8 ; [.0000.0034.0002] # COMBINING DOUBLE OPEN MARK BELOW
+1AB9 ; [.0000.0034.0002] # COMBINING LIGHT CENTRALIZATION STROKE BELOW
+1ABA ; [.0000.0034.0002] # COMBINING STRONG CENTRALIZATION STROKE BELOW
+1ABD ; [.0000.0034.0002] # COMBINING PARENTHESES BELOW
+1AC3 ; [.0000.0034.0002] # COMBINING LEFT PARENTHESIS BELOW LEFT
+1AC4 ; [.0000.0034.0002] # COMBINING RIGHT PARENTHESIS BELOW RIGHT
+1ACA ; [.0000.0034.0002] # COMBINING DOUBLE PLUS SIGN BELOW
+1DC2 ; [.0000.0034.0002] # COMBINING SNAKE BELOW
+1DCF ; [.0000.0034.0002] # COMBINING ZIGZAG BELOW
+1DD0 ; [.0000.0034.0002] # COMBINING IS BELOW
+1DF9 ; [.0000.0034.0002] # COMBINING WIDE INVERTED BRIDGE BELOW
+1DFA ; [.0000.0034.0002] # COMBINING DOT BELOW LEFT
+1DFC ; [.0000.0034.0002] # COMBINING DOUBLE INVERTED BREVE BELOW
+1DFD ; [.0000.0034.0002] # COMBINING ALMOST EQUAL TO BELOW
+1DFF ; [.0000.0034.0002] # COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW
+20EC ; [.0000.0034.0002] # COMBINING RIGHTWARDS HARPOON WITH BARB DOWNWARDS
+20ED ; [.0000.0034.0002] # COMBINING LEFTWARDS HARPOON WITH BARB DOWNWARDS
+20EE ; [.0000.0034.0002] # COMBINING LEFT ARROW BELOW
+20EF ; [.0000.0034.0002] # COMBINING RIGHT ARROW BELOW
+FE27 ; [.0000.0034.0002] # COMBINING LIGATURE LEFT HALF BELOW
+10A0D ; [.0000.0034.0002] # KHAROSHTHI SIGN DOUBLE RING BELOW
+10AE6 ; [.0000.0034.0002] # MANICHAEAN ABBREVIATION MARK BELOW
+10F46 ; [.0000.0034.0002] # SOGDIAN COMBINING DOT BELOW
+10F47 ; [.0000.0034.0002] # SOGDIAN COMBINING TWO DOTS BELOW
+10F4B ; [.0000.0034.0002] # SOGDIAN COMBINING CURVE BELOW
+10F4D ; [.0000.0034.0002] # SOGDIAN COMBINING HOOK BELOW
+10F4E ; [.0000.0034.0002] # SOGDIAN COMBINING LONG HOOK BELOW
+10F4F ; [.0000.0034.0002] # SOGDIAN COMBINING RESH BELOW
+10F50 ; [.0000.0034.0002] # SOGDIAN COMBINING STROKE BELOW
+10F83 ; [.0000.0034.0002] # OLD UYGHUR COMBINING DOT BELOW
+10F85 ; [.0000.0034.0002] # OLD UYGHUR COMBINING TWO DOTS BELOW
+0336 ; [.0000.0035.0002] # COMBINING LONG STROKE OVERLAY
+0337 ; [.0000.0035.0002] # COMBINING SHORT SOLIDUS OVERLAY
+20D8 ; [.0000.0035.0002] # COMBINING RING OVERLAY
+20D9 ; [.0000.0035.0002] # COMBINING CLOCKWISE RING OVERLAY
+20DA ; [.0000.0035.0002] # COMBINING ANTICLOCKWISE RING OVERLAY
+20E5 ; [.0000.0035.0002] # COMBINING REVERSE SOLIDUS OVERLAY
+20EA ; [.0000.0035.0002] # COMBINING LEFTWARDS ARROW OVERLAY
+20EB ; [.0000.0035.0002] # COMBINING LONG DOUBLE SOLIDUS OVERLAY
+1BC9E ; [.0000.0035.0002] # DUPLOYAN DOUBLE MARK
+1ABE ; [.0000.0036.0002] # COMBINING PARENTHESES OVERLAY
+20DD ; [.0000.0036.0002] # COMBINING ENCLOSING CIRCLE
+20DE ; [.0000.0036.0002] # COMBINING ENCLOSING SQUARE
+20DF ; [.0000.0036.0002] # COMBINING ENCLOSING DIAMOND
+20E0 ; [.0000.0036.0002] # COMBINING ENCLOSING CIRCLE BACKSLASH
+20E2 ; [.0000.0036.0002] # COMBINING ENCLOSING SCREEN
+20E3 ; [.0000.0036.0002] # COMBINING ENCLOSING KEYCAP
+20E4 ; [.0000.0036.0002] # COMBINING ENCLOSING UPWARD POINTING TRIANGLE
+3099 ; [.0000.0037.0002] # COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
+FF9E ; [.0000.0037.0012] # HALFWIDTH KATAKANA VOICED SOUND MARK
+309A ; [.0000.0038.0002] # COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+FF9F ; [.0000.0038.0012] # HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
+0335 ; [.0000.0039.0002] # COMBINING SHORT STROKE OVERLAY
+0305 ; [.0000.003A.0002] # COMBINING OVERLINE
+0309 ; [.0000.003B.0002] # COMBINING HOOK ABOVE
+030F ; [.0000.003C.0002] # COMBINING DOUBLE GRAVE ACCENT
+0310 ; [.0000.003D.0002] # COMBINING CANDRABINDU
+0311 ; [.0000.003E.0002] # COMBINING INVERTED BREVE
+031B ; [.0000.003F.0002] # COMBINING HORN
+0321 ; [.0000.0040.0002] # COMBINING PALATALIZED HOOK BELOW
+0322 ; [.0000.0041.0002] # COMBINING RETROFLEX HOOK BELOW
+0323 ; [.0000.0042.0002] # COMBINING DOT BELOW
+0324 ; [.0000.0043.0002] # COMBINING DIAERESIS BELOW
+0325 ; [.0000.0044.0002] # COMBINING RING BELOW
+0326 ; [.0000.0045.0002] # COMBINING COMMA BELOW
+032D ; [.0000.0046.0002] # COMBINING CIRCUMFLEX ACCENT BELOW
+032E ; [.0000.0047.0002] # COMBINING BREVE BELOW
+0330 ; [.0000.0048.0002] # COMBINING TILDE BELOW
+0331 ; [.0000.0049.0002] # COMBINING MACRON BELOW
+0334 ; [.0000.004A.0002] # COMBINING TILDE OVERLAY
+0339 ; [.0000.004B.0002] # COMBINING RIGHT HALF RING BELOW
+0345 ; [.0000.004C.0002] # COMBINING GREEK YPOGEGRAMMENI
+0358 ; [.0000.004D.0002] # COMBINING DOT ABOVE RIGHT
+0360 ; [.0000.004E.0002] # COMBINING DOUBLE TILDE
+FE22 ; [.0000.004E.0002] # COMBINING DOUBLE TILDE LEFT HALF
+FE29 ; [.0000.004E.0002] # COMBINING TILDE LEFT HALF BELOW
+0361 ; [.0000.004F.0002] # COMBINING DOUBLE INVERTED BREVE
+FE20 ; [.0000.004F.0002] # COMBINING LIGATURE LEFT HALF
+0483 ; [.0000.0050.0002] # COMBINING CYRILLIC TITLO
+FE2E ; [.0000.0050.0002] # COMBINING CYRILLIC TITLO LEFT HALF
+A66F ; [.0000.0051.0002] # COMBINING CYRILLIC VZMET
+05B0 ; [.0000.0052.0002] # HEBREW POINT SHEVA
+05B1 ; [.0000.0053.0002] # HEBREW POINT HATAF SEGOL
+05B2 ; [.0000.0054.0002] # HEBREW POINT HATAF PATAH
+05B3 ; [.0000.0055.0002] # HEBREW POINT HATAF QAMATS
+05B4 ; [.0000.0056.0002] # HEBREW POINT HIRIQ
+05B5 ; [.0000.0057.0002] # HEBREW POINT TSERE
+05B6 ; [.0000.0058.0002] # HEBREW POINT SEGOL
+05B7 ; [.0000.0059.0002] # HEBREW POINT PATAH
+05B8 ; [.0000.005A.0002] # HEBREW POINT QAMATS
+05C7 ; [.0000.005A.0002] # HEBREW POINT QAMATS QATAN
+05B9 ; [.0000.005B.0002] # HEBREW POINT HOLAM
+05BA ; [.0000.005B.0002] # HEBREW POINT HOLAM HASER FOR VAV
+05BB ; [.0000.005C.0002] # HEBREW POINT QUBUTS
+05C2 ; [.0000.005D.0002] # HEBREW POINT SIN DOT
+05C1 ; [.0000.005E.0002] # HEBREW POINT SHIN DOT
+05BC ; [.0000.005F.0002] # HEBREW POINT DAGESH OR MAPIQ
+05BF ; [.0000.0060.0002] # HEBREW POINT RAFE
+FB1E ; [.0000.0061.0002] # HEBREW POINT JUDEO-SPANISH VARIKA
+081C ; [.0000.0062.0002] # SAMARITAN VOWEL SIGN LONG E
+081D ; [.0000.0062.0002] # SAMARITAN VOWEL SIGN E
+081E ; [.0000.0063.0002] # SAMARITAN VOWEL SIGN OVERLONG AA
+081F ; [.0000.0063.0002] # SAMARITAN VOWEL SIGN LONG AA
+0820 ; [.0000.0063.0002] # SAMARITAN VOWEL SIGN AA
+0821 ; [.0000.0064.0002] # SAMARITAN VOWEL SIGN OVERLONG A
+0822 ; [.0000.0064.0002] # SAMARITAN VOWEL SIGN LONG A
+0823 ; [.0000.0064.0002] # SAMARITAN VOWEL SIGN A
+0824 ; [.0000.0065.0002] # SAMARITAN MODIFIER LETTER SHORT A
+0825 ; [.0000.0065.0002] # SAMARITAN VOWEL SIGN SHORT A
+0826 ; [.0000.0066.0002] # SAMARITAN VOWEL SIGN LONG U
+0827 ; [.0000.0066.0002] # SAMARITAN VOWEL SIGN U
+0828 ; [.0000.0067.0002] # SAMARITAN MODIFIER LETTER I
+0829 ; [.0000.0067.0002] # SAMARITAN VOWEL SIGN LONG I
+082A ; [.0000.0067.0002] # SAMARITAN VOWEL SIGN I
+082B ; [.0000.0068.0002] # SAMARITAN VOWEL SIGN O
+082C ; [.0000.0069.0002] # SAMARITAN VOWEL SIGN SUKUN
+0818 ; [.0000.006A.0002] # SAMARITAN MARK OCCLUSION
+0819 ; [.0000.006B.0002] # SAMARITAN MARK DAGESH
+082D ; [.0000.006C.0002] # SAMARITAN MARK NEQUDAA
+064B ; [.0000.006D.0002] # ARABIC FATHATAN
+FE71 ; [.0000.006D.0018] # ARABIC TATWEEL WITH FATHATAN ABOVE
+FE70 ; [.0000.006D.001A] # ARABIC FATHATAN ISOLATED FORM
+08F0 ; [.0000.006E.0002] # ARABIC OPEN FATHATAN
+08E7 ; [.0000.006F.0002] # ARABIC CURLY FATHATAN
+064C ; [.0000.0070.0002] # ARABIC DAMMATAN
+FE72 ; [.0000.0070.001A] # ARABIC DAMMATAN ISOLATED FORM
+FC5E ; [.0000.0070.001A][.0000.0080.001A] # ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM
+08F1 ; [.0000.0071.0002] # ARABIC OPEN DAMMATAN
+08E8 ; [.0000.0072.0002] # ARABIC CURLY DAMMATAN
+064D ; [.0000.0073.0002] # ARABIC KASRATAN
+FE74 ; [.0000.0073.001A] # ARABIC KASRATAN ISOLATED FORM
+FC5F ; [.0000.0073.001A][.0000.0080.001A] # ARABIC LIGATURE SHADDA WITH KASRATAN ISOLATED FORM
+08F2 ; [.0000.0074.0002] # ARABIC OPEN KASRATAN
+08E9 ; [.0000.0075.0002] # ARABIC CURLY KASRATAN
+064E ; [.0000.0076.0002] # ARABIC FATHA
+FE77 ; [.0000.0076.0018] # ARABIC FATHA MEDIAL FORM
+FE76 ; [.0000.0076.001A] # ARABIC FATHA ISOLATED FORM
+FCF2 ; [.0000.0076.0018][.0000.0080.0018] # ARABIC LIGATURE SHADDA WITH FATHA MEDIAL FORM
+FC60 ; [.0000.0076.001A][.0000.0080.001A] # ARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM
+08E4 ; [.0000.0077.0002] # ARABIC CURLY FATHA
+08F4 ; [.0000.0078.0002] # ARABIC FATHA WITH RING
+08F5 ; [.0000.0079.0002] # ARABIC FATHA WITH DOT ABOVE
+064F ; [.0000.007A.0002] # ARABIC DAMMA
+FE79 ; [.0000.007A.0018] # ARABIC DAMMA MEDIAL FORM
+FE78 ; [.0000.007A.001A] # ARABIC DAMMA ISOLATED FORM
+FCF3 ; [.0000.007A.0018][.0000.0080.0018] # ARABIC LIGATURE SHADDA WITH DAMMA MEDIAL FORM
+FC61 ; [.0000.007A.001A][.0000.0080.001A] # ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORM
+08E5 ; [.0000.007B.0002] # ARABIC CURLY DAMMA
+08FE ; [.0000.007C.0002] # ARABIC DAMMA WITH DOT
+0650 ; [.0000.007D.0002] # ARABIC KASRA
+FE7B ; [.0000.007D.0018] # ARABIC KASRA MEDIAL FORM
+FE7A ; [.0000.007D.001A] # ARABIC KASRA ISOLATED FORM
+FCF4 ; [.0000.007D.0018][.0000.0080.0018] # ARABIC LIGATURE SHADDA WITH KASRA MEDIAL FORM
+FC62 ; [.0000.007D.001A][.0000.0080.001A] # ARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORM
+08E6 ; [.0000.007E.0002] # ARABIC CURLY KASRA
+08F6 ; [.0000.007F.0002] # ARABIC KASRA WITH DOT BELOW
+0651 ; [.0000.0080.0002] # ARABIC SHADDA
+0AFB ; [.0000.0080.0002] # GUJARATI SIGN SHADDA
+11237 ; [.0000.0080.0002] # KHOJKI SIGN SHADDA
+FE7D ; [.0000.0080.0018] # ARABIC SHADDA MEDIAL FORM
+FE7C ; [.0000.0080.001A] # ARABIC SHADDA ISOLATED FORM
+FC63 ; [.0000.0080.001A][.0000.0098.001A] # ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM
+0652 ; [.0000.0081.0002] # ARABIC SUKUN
+0AFA ; [.0000.0081.0002] # GUJARATI SIGN SUKUN
+1123E ; [.0000.0081.0002] # KHOJKI SIGN SUKUN
+FE7F ; [.0000.0081.0018] # ARABIC SUKUN MEDIAL FORM
+FE7E ; [.0000.0081.001A] # ARABIC SUKUN ISOLATED FORM
+0653 ; [.0000.0082.0002] # ARABIC MADDAH ABOVE
+089E ; [.0000.0082.0002] # ARABIC DOUBLED MADDA
+089F ; [.0000.0082.0002] # ARABIC HALF MADDA OVER MADDA
+0AFC ; [.0000.0082.0002] # GUJARATI SIGN MADDAH
+10EAC ; [.0000.0082.0002] # YEZIDI COMBINING MADDA MARK
+0654 ; [.0000.0083.0002] # ARABIC HAMZA ABOVE
+10EAB ; [.0000.0083.0002] # YEZIDI COMBINING HAMZA MARK
+0655 ; [.0000.0084.0002] # ARABIC HAMZA BELOW
+065F ; [.0000.0085.0002] # ARABIC WAVY HAMZA BELOW
+0656 ; [.0000.0086.0002] # ARABIC SUBSCRIPT ALEF
+0657 ; [.0000.0087.0002] # ARABIC INVERTED DAMMA
+0658 ; [.0000.0088.0002] # ARABIC MARK NOON GHUNNA
+08FF ; [.0000.0089.0002] # ARABIC MARK SIDEWAYS NOON GHUNNA
+0659 ; [.0000.008A.0002] # ARABIC ZWARAKAY
+065A ; [.0000.008B.0002] # ARABIC VOWEL SIGN SMALL V ABOVE
+065B ; [.0000.008C.0002] # ARABIC VOWEL SIGN INVERTED SMALL V ABOVE
+065C ; [.0000.008D.0002] # ARABIC VOWEL SIGN DOT BELOW
+065D ; [.0000.008E.0002] # ARABIC REVERSED DAMMA
+065E ; [.0000.008F.0002] # ARABIC FATHA WITH TWO DOTS
+08E3 ; [.0000.0090.0002] # ARABIC TURNED DAMMA BELOW
+08F7 ; [.0000.0091.0002] # ARABIC LEFT ARROWHEAD ABOVE
+08F8 ; [.0000.0092.0002] # ARABIC RIGHT ARROWHEAD ABOVE
+08FD ; [.0000.0093.0002] # ARABIC RIGHT ARROWHEAD ABOVE WITH DOT
+08FB ; [.0000.0094.0002] # ARABIC DOUBLE RIGHT ARROWHEAD ABOVE
+08FC ; [.0000.0095.0002] # ARABIC DOUBLE RIGHT ARROWHEAD ABOVE WITH DOT
+08F9 ; [.0000.0096.0002] # ARABIC LEFT ARROWHEAD BELOW
+08FA ; [.0000.0097.0002] # ARABIC RIGHT ARROWHEAD BELOW
+0670 ; [.0000.0098.0002] # ARABIC LETTER SUPERSCRIPT ALEF
+0711 ; [.0000.0099.0002] # SYRIAC LETTER SUPERSCRIPT ALAPH
+0730 ; [.0000.009A.0002] # SYRIAC PTHAHA ABOVE
+0731 ; [.0000.009B.0002] # SYRIAC PTHAHA BELOW
+0732 ; [.0000.009C.0002] # SYRIAC PTHAHA DOTTED
+0733 ; [.0000.009D.0002] # SYRIAC ZQAPHA ABOVE
+0734 ; [.0000.009E.0002] # SYRIAC ZQAPHA BELOW
+0735 ; [.0000.009F.0002] # SYRIAC ZQAPHA DOTTED
+0736 ; [.0000.00A0.0002] # SYRIAC RBASA ABOVE
+0737 ; [.0000.00A1.0002] # SYRIAC RBASA BELOW
+0738 ; [.0000.00A2.0002] # SYRIAC DOTTED ZLAMA HORIZONTAL
+0739 ; [.0000.00A3.0002] # SYRIAC DOTTED ZLAMA ANGULAR
+073A ; [.0000.00A4.0002] # SYRIAC HBASA ABOVE
+073B ; [.0000.00A5.0002] # SYRIAC HBASA BELOW
+073C ; [.0000.00A6.0002] # SYRIAC HBASA-ESASA DOTTED
+073D ; [.0000.00A7.0002] # SYRIAC ESASA ABOVE
+073E ; [.0000.00A8.0002] # SYRIAC ESASA BELOW
+073F ; [.0000.00A9.0002] # SYRIAC RWAHA
+07EB ; [.0000.00AA.0002] # NKO COMBINING SHORT HIGH TONE
+07EC ; [.0000.00AB.0002] # NKO COMBINING SHORT LOW TONE
+07ED ; [.0000.00AC.0002] # NKO COMBINING SHORT RISING TONE
+07EE ; [.0000.00AD.0002] # NKO COMBINING LONG DESCENDING TONE
+07EF ; [.0000.00AE.0002] # NKO COMBINING LONG HIGH TONE
+07F0 ; [.0000.00AF.0002] # NKO COMBINING LONG LOW TONE
+07F1 ; [.0000.00B0.0002] # NKO COMBINING LONG RISING TONE
+07F2 ; [.0000.00B1.0002] # NKO COMBINING NASALIZATION MARK
+07F3 ; [.0000.00B2.0002] # NKO COMBINING DOUBLE DOT ABOVE
+135F ; [.0000.00B3.0002] # ETHIOPIC COMBINING GEMINATION MARK
+135E ; [.0000.00B4.0002] # ETHIOPIC COMBINING VOWEL LENGTH MARK
+135D ; [.0000.00B5.0002] # ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK
+A6F0 ; [.0000.00B6.0002] # BAMUM COMBINING MARK KOQNDON
+A6F1 ; [.0000.00B7.0002] # BAMUM COMBINING MARK TUKWENTIS
+16AF0 ; [.0000.00B8.0002] # BASSA VAH COMBINING HIGH TONE
+16AF1 ; [.0000.00B9.0002] # BASSA VAH COMBINING LOW TONE
+16AF2 ; [.0000.00BA.0002] # BASSA VAH COMBINING MID TONE
+16AF3 ; [.0000.00BB.0002] # BASSA VAH COMBINING LOW-MID TONE
+16AF4 ; [.0000.00BC.0002] # BASSA VAH COMBINING HIGH-LOW TONE
+1E944 ; [.0000.00BD.0002] # ADLAM ALIF LENGTHENER
+1E945 ; [.0000.00BD.0002] # ADLAM VOWEL LENGTHENER
+1E946 ; [.0000.00BD.0002] # ADLAM GEMINATION MARK
+1E94A ; [.0000.00BE.0002] # ADLAM NUKTA
+1E947 ; [.0000.00BF.0002] # ADLAM HAMZA
+1E948 ; [.0000.00C0.0002] # ADLAM CONSONANT MODIFIER
+1E949 ; [.0000.00C1.0002] # ADLAM GEMINATE CONSONANT MODIFIER
+093C ; [.0000.00C2.0002] # DEVANAGARI SIGN NUKTA
+09BC ; [.0000.00C2.0002] # BENGALI SIGN NUKTA
+0A3C ; [.0000.00C2.0002] # GURMUKHI SIGN NUKTA
+0ABC ; [.0000.00C2.0002] # GUJARATI SIGN NUKTA
+0AFD ; [.0000.00C2.0002] # GUJARATI SIGN THREE-DOT NUKTA ABOVE
+0AFE ; [.0000.00C2.0002] # GUJARATI SIGN CIRCLE NUKTA ABOVE
+0AFF ; [.0000.00C2.0002] # GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE
+0B3C ; [.0000.00C2.0002] # ORIYA SIGN NUKTA
+0C3C ; [.0000.00C2.0002] # TELUGU SIGN NUKTA
+0CBC ; [.0000.00C2.0002] # KANNADA SIGN NUKTA
+1B34 ; [.0000.00C2.0002] # BALINESE SIGN REREKAN
+1BE6 ; [.0000.00C2.0002] # BATAK SIGN TOMPI
+1C37 ; [.0000.00C2.0002] # LEPCHA SIGN NUKTA
+A9B3 ; [.0000.00C2.0002] # JAVANESE SIGN CECAK TELU
+110BA ; [.0000.00C2.0002] # KAITHI SIGN NUKTA
+11173 ; [.0000.00C2.0002] # MAHAJANI SIGN NUKTA
+111CA ; [.0000.00C2.0002] # SHARADA SIGN NUKTA
+11236 ; [.0000.00C2.0002] # KHOJKI SIGN NUKTA
+112E9 ; [.0000.00C2.0002] # KHUDAWADI SIGN NUKTA
+1133B ; [.0000.00C2.0002] # COMBINING BINDU BELOW
+1133C ; [.0000.00C2.0002] # GRANTHA SIGN NUKTA
+11446 ; [.0000.00C2.0002] # NEWA SIGN NUKTA
+114C3 ; [.0000.00C2.0002] # TIRHUTA SIGN NUKTA
+115C0 ; [.0000.00C2.0002] # SIDDHAM SIGN NUKTA
+116B7 ; [.0000.00C2.0002] # TAKRI SIGN NUKTA
+1183A ; [.0000.00C2.0002] # DOGRA SIGN NUKTA
+11943 ; [.0000.00C2.0002] # DIVES AKURU SIGN NUKTA
+11A33 ; [.0000.00C2.0002] # ZANABAZAR SQUARE FINAL CONSONANT MARK
+11D42 ; [.0000.00C2.0002] # MASARAM GONDI SIGN NUKTA
+0900 ; [.0000.00C3.0002] # DEVANAGARI SIGN INVERTED CANDRABINDU
+0901 ; [.0000.00C3.0002] # DEVANAGARI SIGN CANDRABINDU
+0981 ; [.0000.00C3.0002] # BENGALI SIGN CANDRABINDU
+0A01 ; [.0000.00C3.0002] # GURMUKHI SIGN ADAK BINDI
+0A81 ; [.0000.00C3.0002] # GUJARATI SIGN CANDRABINDU
+0B01 ; [.0000.00C3.0002] # ORIYA SIGN CANDRABINDU
+0C00 ; [.0000.00C3.0002] # TELUGU SIGN COMBINING CANDRABINDU ABOVE
+0C01 ; [.0000.00C3.0002] # TELUGU SIGN CANDRABINDU
+0C81 ; [.0000.00C3.0002] # KANNADA SIGN CANDRABINDU
+0D01 ; [.0000.00C3.0002] # MALAYALAM SIGN CANDRABINDU
+0D81 ; [.0000.00C3.0002] # SINHALA SIGN CANDRABINDU
+1B00 ; [.0000.00C3.0002] # BALINESE SIGN ULU RICEM
+1B01 ; [.0000.00C3.0002] # BALINESE SIGN ULU CANDRA
+A8C5 ; [.0000.00C3.0002] # SAURASHTRA SIGN CANDRABINDU
+A980 ; [.0000.00C3.0002] # JAVANESE SIGN PANYANGGA
+11000 ; [.0000.00C3.0002] # BRAHMI SIGN CANDRABINDU
+11080 ; [.0000.00C3.0002] # KAITHI SIGN CANDRABINDU
+11100 ; [.0000.00C3.0002] # CHAKMA SIGN CANDRABINDU
+11180 ; [.0000.00C3.0002] # SHARADA SIGN CANDRABINDU
+111CF ; [.0000.00C3.0002] # SHARADA SIGN INVERTED CANDRABINDU
+11301 ; [.0000.00C3.0002] # GRANTHA SIGN CANDRABINDU
+11443 ; [.0000.00C3.0002] # NEWA SIGN CANDRABINDU
+114BF ; [.0000.00C3.0002] # TIRHUTA SIGN CANDRABINDU
+115BC ; [.0000.00C3.0002] # SIDDHAM SIGN CANDRABINDU
+11640 ; [.0000.00C3.0002] # MODI SIGN ARDHACANDRA
+1193C ; [.0000.00C3.0002] # DIVES AKURU SIGN CANDRABINDU
+11A35 ; [.0000.00C3.0002] # ZANABAZAR SQUARE SIGN CANDRABINDU
+11A36 ; [.0000.00C3.0002] # ZANABAZAR SQUARE SIGN CANDRABINDU WITH ORNAMENT
+11A37 ; [.0000.00C3.0002] # ZANABAZAR SQUARE SIGN CANDRA WITH ORNAMENT
+11C3C ; [.0000.00C3.0002] # BHAIKSUKI SIGN CANDRABINDU
+11CB6 ; [.0000.00C3.0002] # MARCHEN SIGN CANDRABINDU
+11D43 ; [.0000.00C3.0002] # MASARAM GONDI SIGN CANDRA
+0902 ; [.0000.00C4.0002] # DEVANAGARI SIGN ANUSVARA
+0982 ; [.0000.00C4.0002] # BENGALI SIGN ANUSVARA
+0A02 ; [.0000.00C4.0002] # GURMUKHI SIGN BINDI
+0A82 ; [.0000.00C4.0002] # GUJARATI SIGN ANUSVARA
+0B02 ; [.0000.00C4.0002] # ORIYA SIGN ANUSVARA
+0B82 ; [.0000.00C4.0002] # TAMIL SIGN ANUSVARA
+0C02 ; [.0000.00C4.0002] # TELUGU SIGN ANUSVARA
+0C04 ; [.0000.00C4.0002] # TELUGU SIGN COMBINING ANUSVARA ABOVE
+0C82 ; [.0000.00C4.0002] # KANNADA SIGN ANUSVARA
+0D00 ; [.0000.00C4.0002] # MALAYALAM SIGN COMBINING ANUSVARA ABOVE
+0D02 ; [.0000.00C4.0002] # MALAYALAM SIGN ANUSVARA
+0D82 ; [.0000.00C4.0002] # SINHALA SIGN ANUSVARAYA
+0F7E ; [.0000.00C4.0002] # TIBETAN SIGN RJES SU NGA RO
+1036 ; [.0000.00C4.0002] # MYANMAR SIGN ANUSVARA
+17C6 ; [.0000.00C4.0002] # KHMER SIGN NIKAHIT
+1A74 ; [.0000.00C4.0002] # TAI THAM SIGN MAI KANG
+1B02 ; [.0000.00C4.0002] # BALINESE SIGN CECEK
+1B80 ; [.0000.00C4.0002] # SUNDANESE SIGN PANYECEK
+1CED ; [.0000.00C4.0002] # VEDIC SIGN TIRYAK
+A80B ; [.0000.00C4.0002] # SYLOTI NAGRI SIGN ANUSVARA
+A880 ; [.0000.00C4.0002] # SAURASHTRA SIGN ANUSVARA
+A981 ; [.0000.00C4.0002] # JAVANESE SIGN CECAK
+10A0E ; [.0000.00C4.0002] # KHAROSHTHI SIGN ANUSVARA
+11001 ; [.0000.00C4.0002] # BRAHMI SIGN ANUSVARA
+11081 ; [.0000.00C4.0002] # KAITHI SIGN ANUSVARA
+11101 ; [.0000.00C4.0002] # CHAKMA SIGN ANUSVARA
+11181 ; [.0000.00C4.0002] # SHARADA SIGN ANUSVARA
+11234 ; [.0000.00C4.0002] # KHOJKI SIGN ANUSVARA
+112DF ; [.0000.00C4.0002] # KHUDAWADI SIGN ANUSVARA
+11300 ; [.0000.00C4.0002] # GRANTHA SIGN COMBINING ANUSVARA ABOVE
+11302 ; [.0000.00C4.0002] # GRANTHA SIGN ANUSVARA
+11444 ; [.0000.00C4.0002] # NEWA SIGN ANUSVARA
+114C0 ; [.0000.00C4.0002] # TIRHUTA SIGN ANUSVARA
+115BD ; [.0000.00C4.0002] # SIDDHAM SIGN ANUSVARA
+1163D ; [.0000.00C4.0002] # MODI SIGN ANUSVARA
+116AB ; [.0000.00C4.0002] # TAKRI SIGN ANUSVARA
+11837 ; [.0000.00C4.0002] # DOGRA SIGN ANUSVARA
+1193B ; [.0000.00C4.0002] # DIVES AKURU SIGN ANUSVARA
+119DE ; [.0000.00C4.0002] # NANDINAGARI SIGN ANUSVARA
+11A38 ; [.0000.00C4.0002] # ZANABAZAR SQUARE SIGN ANUSVARA
+11A96 ; [.0000.00C4.0002] # SOYOMBO SIGN ANUSVARA
+11C3D ; [.0000.00C4.0002] # BHAIKSUKI SIGN ANUSVARA
+11CB5 ; [.0000.00C4.0002] # MARCHEN SIGN ANUSVARA
+11D40 ; [.0000.00C4.0002] # MASARAM GONDI SIGN ANUSVARA
+11D95 ; [.0000.00C4.0002] # GUNJALA GONDI SIGN ANUSVARA
+0903 ; [.0000.00C5.0002] # DEVANAGARI SIGN VISARGA
+0983 ; [.0000.00C5.0002] # BENGALI SIGN VISARGA
+0A03 ; [.0000.00C5.0002] # GURMUKHI SIGN VISARGA
+0A83 ; [.0000.00C5.0002] # GUJARATI SIGN VISARGA
+0B03 ; [.0000.00C5.0002] # ORIYA SIGN VISARGA
+0C03 ; [.0000.00C5.0002] # TELUGU SIGN VISARGA
+0C83 ; [.0000.00C5.0002] # KANNADA SIGN VISARGA
+0D03 ; [.0000.00C5.0002] # MALAYALAM SIGN VISARGA
+0D83 ; [.0000.00C5.0002] # SINHALA SIGN VISARGAYA
+0F7F ; [.0000.00C5.0002] # TIBETAN SIGN RNAM BCAD
+1038 ; [.0000.00C5.0002] # MYANMAR SIGN VISARGA
+17C7 ; [.0000.00C5.0002] # KHMER SIGN REAHMUK
+1B04 ; [.0000.00C5.0002] # BALINESE SIGN BISAH
+1B82 ; [.0000.00C5.0002] # SUNDANESE SIGN PANGWISAD
+1CF2 ; [.0000.00C5.0002] # VEDIC SIGN ARDHAVISARGA
+1CF3 ; [.0000.00C5.0002] # VEDIC SIGN ROTATED ARDHAVISARGA
+A881 ; [.0000.00C5.0002] # SAURASHTRA SIGN VISARGA
+A983 ; [.0000.00C5.0002] # JAVANESE SIGN WIGNYAN
+10A0F ; [.0000.00C5.0002] # KHAROSHTHI SIGN VISARGA
+11002 ; [.0000.00C5.0002] # BRAHMI SIGN VISARGA
+11082 ; [.0000.00C5.0002] # KAITHI SIGN VISARGA
+11102 ; [.0000.00C5.0002] # CHAKMA SIGN VISARGA
+11182 ; [.0000.00C5.0002] # SHARADA SIGN VISARGA
+11303 ; [.0000.00C5.0002] # GRANTHA SIGN VISARGA
+11445 ; [.0000.00C5.0002] # NEWA SIGN VISARGA
+114C1 ; [.0000.00C5.0002] # TIRHUTA SIGN VISARGA
+115BE ; [.0000.00C5.0002] # SIDDHAM SIGN VISARGA
+1163E ; [.0000.00C5.0002] # MODI SIGN VISARGA
+116AC ; [.0000.00C5.0002] # TAKRI SIGN VISARGA
+11838 ; [.0000.00C5.0002] # DOGRA SIGN VISARGA
+119DF ; [.0000.00C5.0002] # NANDINAGARI SIGN VISARGA
+11A39 ; [.0000.00C5.0002] # ZANABAZAR SQUARE SIGN VISARGA
+11A97 ; [.0000.00C5.0002] # SOYOMBO SIGN VISARGA
+11C3E ; [.0000.00C5.0002] # BHAIKSUKI SIGN VISARGA
+11D41 ; [.0000.00C5.0002] # MASARAM GONDI SIGN VISARGA
+11D96 ; [.0000.00C5.0002] # GUNJALA GONDI SIGN VISARGA
+09FE ; [.0000.00C6.0002] # BENGALI SANDHI MARK
+111C9 ; [.0000.00C6.0002] # SHARADA SANDHI MARK
+1145E ; [.0000.00C6.0002] # NEWA SANDHI MARK
+0A70 ; [.0000.00C7.0002] # GURMUKHI TIPPI
+0A71 ; [.0000.00C8.0002] # GURMUKHI ADDAK
+1B03 ; [.0000.00C9.0002] # BALINESE SIGN SURANG
+A982 ; [.0000.00CA.0002] # JAVANESE SIGN LAYAR
+1B81 ; [.0000.00CB.0002] # SUNDANESE SIGN PANGLAYAR
+ABEC ; [.0000.00CC.0002] # MEETEI MAYEK LUM IYEK
+10A38 ; [.0000.00CD.0002] # KHAROSHTHI SIGN BAR ABOVE
+10A39 ; [.0000.00CE.0002] # KHAROSHTHI SIGN CAUDA
+10A3A ; [.0000.00CF.0002] # KHAROSHTHI SIGN DOT BELOW
+111CB ; [.0000.00D0.0002] # SHARADA VOWEL MODIFIER MARK
+111CC ; [.0000.00D1.0002] # SHARADA EXTRA SHORT VOWEL MARK
+11A98 ; [.0000.00D2.0002] # SOYOMBO GEMINATION MARK
+0E4E ; [.0000.00D3.0002] # THAI CHARACTER YAMAKKAN
+0E47 ; [.0000.00D4.0002] # THAI CHARACTER MAITAIKHU
+0E48 ; [.0000.00D5.0002] # THAI CHARACTER MAI EK
+0E49 ; [.0000.00D6.0002] # THAI CHARACTER MAI THO
+0E4A ; [.0000.00D7.0002] # THAI CHARACTER MAI TRI
+0E4B ; [.0000.00D8.0002] # THAI CHARACTER MAI CHATTAWA
+0E4C ; [.0000.00D9.0002] # THAI CHARACTER THANTHAKHAT
+0E4D ; [.0000.00DA.0002] # THAI CHARACTER NIKHAHIT
+0EC8 ; [.0000.00DB.0002] # LAO TONE MAI EK
+0EC9 ; [.0000.00DC.0002] # LAO TONE MAI THO
+0ECA ; [.0000.00DD.0002] # LAO TONE MAI TI
+0ECB ; [.0000.00DE.0002] # LAO TONE MAI CATAWA
+0ECC ; [.0000.00DF.0002] # LAO CANCELLATION MARK
+0ECD ; [.0000.00E0.0002] # LAO NIGGAHITA
+AABF ; [.0000.00E1.0002] # TAI VIET TONE MAI EK
+AAC1 ; [.0000.00E2.0002] # TAI VIET TONE MAI THO
+0F39 ; [.0000.00E3.0002] # TIBETAN MARK TSA -PHRU
+A92B ; [.0000.00E4.0002] # KAYAH LI TONE PLOPHU
+A92C ; [.0000.00E5.0002] # KAYAH LI TONE CALYA
+A92D ; [.0000.00E6.0002] # KAYAH LI TONE CALYA PLOPHU
+1037 ; [.0000.00E7.0002] # MYANMAR SIGN DOT BELOW
+17C8 ; [.0000.00E8.0002] # KHMER SIGN YUUKALEAPINTU
+17C9 ; [.0000.00E9.0002] # KHMER SIGN MUUSIKATOAN
+17CA ; [.0000.00EA.0002] # KHMER SIGN TRIISAP
+1A75 ; [.0000.00EB.0002] # TAI THAM SIGN TONE-1
+1A76 ; [.0000.00EC.0002] # TAI THAM SIGN TONE-2
+1A77 ; [.0000.00ED.0002] # TAI THAM SIGN KHUEN TONE-3
+1A78 ; [.0000.00EE.0002] # TAI THAM SIGN KHUEN TONE-4
+1A79 ; [.0000.00EF.0002] # TAI THAM SIGN KHUEN TONE-5
+1A7A ; [.0000.00F0.0002] # TAI THAM SIGN RA HAAM
+1A7B ; [.0000.00F1.0002] # TAI THAM SIGN MAI SAM
+1A7C ; [.0000.00F2.0002] # TAI THAM SIGN KHUEN-LUE KARAN
+1939 ; [.0000.00F3.0002] # LIMBU SIGN MUKPHRENG
+193A ; [.0000.00F4.0002] # LIMBU SIGN KEMPHRENG
+193B ; [.0000.00F5.0002] # LIMBU SIGN SA-I
+16B30 ; [.0000.00F6.0002] # PAHAWH HMONG MARK CIM TUB
+1E131 ; [.0000.00F6.0002] # NYIAKENG PUACHUE HMONG TONE-M
+16B31 ; [.0000.00F7.0002] # PAHAWH HMONG MARK CIM SO
+1E136 ; [.0000.00F7.0002] # NYIAKENG PUACHUE HMONG TONE-D
+16B32 ; [.0000.00F8.0002] # PAHAWH HMONG MARK CIM KES
+1E132 ; [.0000.00F8.0002] # NYIAKENG PUACHUE HMONG TONE-J
+16B33 ; [.0000.00F9.0002] # PAHAWH HMONG MARK CIM KHAV
+1E133 ; [.0000.00F9.0002] # NYIAKENG PUACHUE HMONG TONE-V
+16B34 ; [.0000.00FA.0002] # PAHAWH HMONG MARK CIM SUAM
+1E130 ; [.0000.00FA.0002] # NYIAKENG PUACHUE HMONG TONE-B
+16B35 ; [.0000.00FB.0002] # PAHAWH HMONG MARK CIM HOM
+1E134 ; [.0000.00FB.0002] # NYIAKENG PUACHUE HMONG TONE-S
+16B36 ; [.0000.00FC.0002] # PAHAWH HMONG MARK CIM TAUM
+1E135 ; [.0000.00FC.0002] # NYIAKENG PUACHUE HMONG TONE-G
+1E2EC ; [.0000.00FD.0002] # WANCHO TONE TUP
+1E2ED ; [.0000.00FE.0002] # WANCHO TONE TUPNI
+1E2EE ; [.0000.00FF.0002] # WANCHO TONE KOI
+1E2EF ; [.0000.0100.0002] # WANCHO TONE KOINI
+302A ; [.0000.0101.0002] # IDEOGRAPHIC LEVEL TONE MARK
+302B ; [.0000.0102.0002] # IDEOGRAPHIC RISING TONE MARK
+302C ; [.0000.0103.0002] # IDEOGRAPHIC DEPARTING TONE MARK
+302D ; [.0000.0104.0002] # IDEOGRAPHIC ENTERING TONE MARK
+302E ; [.0000.0105.0002] # HANGUL SINGLE DOT TONE MARK
+302F ; [.0000.0106.0002] # HANGUL DOUBLE DOT TONE MARK
+16FF0 ; [.0000.0107.0002] # VIETNAMESE ALTERNATE READING MARK CA
+16FF1 ; [.0000.0108.0002] # VIETNAMESE ALTERNATE READING MARK NHAY
+20D0 ; [.0000.0109.0002] # COMBINING LEFT HARPOON ABOVE
+20D1 ; [.0000.010A.0002] # COMBINING RIGHT HARPOON ABOVE
+20D2 ; [.0000.010B.0002] # COMBINING LONG VERTICAL LINE OVERLAY
+20D3 ; [.0000.010B.0002] # COMBINING SHORT VERTICAL LINE OVERLAY
+20D4 ; [.0000.010C.0002] # COMBINING ANTICLOCKWISE ARROW ABOVE
+20D5 ; [.0000.010D.0002] # COMBINING CLOCKWISE ARROW ABOVE
+20D6 ; [.0000.010E.0002] # COMBINING LEFT ARROW ABOVE
+20D7 ; [.0000.010F.0002] # COMBINING RIGHT ARROW ABOVE
+20DB ; [.0000.0110.0002] # COMBINING THREE DOTS ABOVE
+20DC ; [.0000.0111.0002] # COMBINING FOUR DOTS ABOVE
+20E1 ; [.0000.0112.0002] # COMBINING LEFT RIGHT ARROW ABOVE
+20E6 ; [.0000.0113.0002] # COMBINING DOUBLE VERTICAL STROKE OVERLAY
+20E7 ; [.0000.0114.0002] # COMBINING ANNUITY SYMBOL
+20E8 ; [.0000.0115.0002] # COMBINING TRIPLE UNDERDOT
+20E9 ; [.0000.0116.0002] # COMBINING WIDE BRIDGE ABOVE
+101FD ; [.0000.0117.0002] # PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE
+02D0 ; [.2018.0020.0002] # MODIFIER LETTER TRIANGULAR COLON
+10781 ; [.2018.0020.0014] # MODIFIER LETTER SUPERSCRIPT TRIANGULAR COLON
+02D1 ; [.2019.0020.0002] # MODIFIER LETTER HALF TRIANGULAR COLON
+10782 ; [.2019.0020.0014] # MODIFIER LETTER SUPERSCRIPT HALF TRIANGULAR COLON
+0971 ; [.201A.0020.0002] # DEVANAGARI SIGN HIGH SPACING DOT
+0E46 ; [.201B.0020.0002] # THAI CHARACTER MAIYAMOK
+0EC6 ; [.201C.0020.0002] # LAO KO LA
+17D7 ; [.201D.0020.0002] # KHMER SIGN LEK TOO
+1AA7 ; [.201E.0020.0002] # TAI THAM SIGN MAI YAMOK
+A9CF ; [.201F.0020.0002] # JAVANESE PANGRANGKEP
+A9E6 ; [.2020.0020.0002] # MYANMAR MODIFIER LETTER SHAN REDUPLICATION
+AA70 ; [.2021.0020.0002] # MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION
+AADD ; [.2022.0020.0002] # TAI VIET SYMBOL SAM
+AAF3 ; [.2023.0020.0002] # MEETEI MAYEK SYLLABLE REPETITION MARK
+AAF4 ; [.2024.0020.0002] # MEETEI MAYEK WORD REPETITION MARK
+16B42 ; [.2025.0020.0002] # PAHAWH HMONG SIGN VOS NRUA
+16B43 ; [.2026.0020.0002] # PAHAWH HMONG SIGN IB YAM
+1E13C ; [.2027.0020.0002] # NYIAKENG PUACHUE HMONG SIGN XW XW
+1E13D ; [.2028.0020.0002] # NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER
+3005 ; [.2029.0020.0002] # IDEOGRAPHIC ITERATION MARK
+303B ; [.202A.0020.0002] # VERTICAL IDEOGRAPHIC ITERATION MARK
+16FE0 ; [.202B.0020.0002] # TANGUT ITERATION MARK
+16FE1 ; [.202C.0020.0002] # NUSHU ITERATION MARK
+16FE3 ; [.202D.0020.0002] # OLD CHINESE ITERATION MARK
+3031 ; [.202E.0020.0002] # VERTICAL KANA REPEAT MARK
+3032 ; [.202E.0020.0002][.0000.0037.0002] # VERTICAL KANA REPEAT WITH VOICED SOUND MARK
+3033 ; [.202F.0020.0002] # VERTICAL KANA REPEAT MARK UPPER HALF
+3034 ; [.202F.0020.0002][.0000.0037.0002] # VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF
+3035 ; [.2030.0020.0002] # VERTICAL KANA REPEAT MARK LOWER HALF
+309D ; [.2031.0020.0002] # HIRAGANA ITERATION MARK
+309E ; [.2031.0020.0002][.0000.0037.0002] # HIRAGANA VOICED ITERATION MARK
+30FC ; [.2032.0020.0002] # KATAKANA-HIRAGANA PROLONGED SOUND MARK
+FF70 ; [.2032.0020.0012] # HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
+30FD ; [.2033.0020.0002] # KATAKANA ITERATION MARK
+30FE ; [.2033.0020.0002][.0000.0037.0002] # KATAKANA VOICED ITERATION MARK
+00A4 ; [.2034.0020.0002] # CURRENCY SIGN
+00A2 ; [.2035.0020.0002] # CENT SIGN
+FFE0 ; [.2035.0020.0003] # FULLWIDTH CENT SIGN
+0024 ; [.2036.0020.0002] # DOLLAR SIGN
+FF04 ; [.2036.0020.0003] # FULLWIDTH DOLLAR SIGN
+FE69 ; [.2036.0020.000F] # SMALL DOLLAR SIGN
+00A3 ; [.2037.0020.0002] # POUND SIGN
+FFE1 ; [.2037.0020.0003] # FULLWIDTH POUND SIGN
+00A5 ; [.2038.0020.0002] # YEN SIGN
+FFE5 ; [.2038.0020.0003] # FULLWIDTH YEN SIGN
+058F ; [.2039.0020.0002] # ARMENIAN DRAM SIGN
+060B ; [.203A.0020.0002] # AFGHANI SIGN
+07FE ; [.203B.0020.0002] # NKO DOROME SIGN
+07FF ; [.203C.0020.0002] # NKO TAMAN SIGN
+09F2 ; [.203D.0020.0002] # BENGALI RUPEE MARK
+09F3 ; [.203E.0020.0002] # BENGALI RUPEE SIGN
+09FB ; [.203F.0020.0002] # BENGALI GANDA MARK
+0AF1 ; [.2040.0020.0002] # GUJARATI RUPEE SIGN
+A838 ; [.2041.0020.0002] # NORTH INDIC RUPEE MARK
+0BF9 ; [.2042.0020.0002] # TAMIL RUPEE SIGN
+11FDD ; [.2043.0020.0002] # TAMIL SIGN KAACU
+11FDE ; [.2044.0020.0002] # TAMIL SIGN PANAM
+11FDF ; [.2045.0020.0002] # TAMIL SIGN PON
+11FE0 ; [.2046.0020.0002] # TAMIL SIGN VARAAKAN
+0E3F ; [.2047.0020.0002] # THAI CURRENCY SYMBOL BAHT
+17DB ; [.2048.0020.0002] # KHMER CURRENCY SYMBOL RIEL
+1E2FF ; [.2049.0020.0002] # WANCHO NGUN SIGN
+20A0 ; [.204A.0020.0002] # EURO-CURRENCY SIGN
+20A1 ; [.204B.0020.0002] # COLON SIGN
+20A2 ; [.204C.0020.0002] # CRUZEIRO SIGN
+20A3 ; [.204D.0020.0002] # FRENCH FRANC SIGN
+20A4 ; [.204E.0020.0002] # LIRA SIGN
+20A5 ; [.204F.0020.0002] # MILL SIGN
+20A6 ; [.2050.0020.0002] # NAIRA SIGN
+20A7 ; [.2051.0020.0002] # PESETA SIGN
+20A9 ; [.2052.0020.0002] # WON SIGN
+FFE6 ; [.2052.0020.0003] # FULLWIDTH WON SIGN
+20AA ; [.2053.0020.0002] # NEW SHEQEL SIGN
+20AB ; [.2054.0020.0002] # DONG SIGN
+20AC ; [.2055.0020.0002] # EURO SIGN
+20AD ; [.2056.0020.0002] # KIP SIGN
+20AE ; [.2057.0020.0002] # TUGRIK SIGN
+20AF ; [.2058.0020.0002] # DRACHMA SIGN
+20B0 ; [.2059.0020.0002] # GERMAN PENNY SIGN
+20B1 ; [.205A.0020.0002] # PESO SIGN
+20B2 ; [.205B.0020.0002] # GUARANI SIGN
+20B3 ; [.205C.0020.0002] # AUSTRAL SIGN
+20B4 ; [.205D.0020.0002] # HRYVNIA SIGN
+20B5 ; [.205E.0020.0002] # CEDI SIGN
+20B6 ; [.205F.0020.0002] # LIVRE TOURNOIS SIGN
+20B7 ; [.2060.0020.0002] # SPESMILO SIGN
+20B8 ; [.2061.0020.0002] # TENGE SIGN
+20B9 ; [.2062.0020.0002] # INDIAN RUPEE SIGN
+1ECB0 ; [.2063.0020.0002] # INDIC SIYAQ RUPEE MARK
+20BA ; [.2064.0020.0002] # TURKISH LIRA SIGN
+20BB ; [.2065.0020.0002] # NORDIC MARK SIGN
+20BC ; [.2066.0020.0002] # MANAT SIGN
+20BD ; [.2067.0020.0002] # RUBLE SIGN
+20BE ; [.2068.0020.0002] # LARI SIGN
+20BF ; [.2069.0020.0002] # BITCOIN SIGN
+20C0 ; [.206A.0020.0002] # SOM SIGN
+0030 ; [.206B.0020.0002] # DIGIT ZERO
+0660 ; [.206B.0020.0002] # ARABIC-INDIC DIGIT ZERO
+06F0 ; [.206B.0020.0002] # EXTENDED ARABIC-INDIC DIGIT ZERO
+07C0 ; [.206B.0020.0002] # NKO DIGIT ZERO
+0966 ; [.206B.0020.0002] # DEVANAGARI DIGIT ZERO
+09E6 ; [.206B.0020.0002] # BENGALI DIGIT ZERO
+0A66 ; [.206B.0020.0002] # GURMUKHI DIGIT ZERO
+0AE6 ; [.206B.0020.0002] # GUJARATI DIGIT ZERO
+0B66 ; [.206B.0020.0002] # ORIYA DIGIT ZERO
+0BE6 ; [.206B.0020.0002] # TAMIL DIGIT ZERO
+0C66 ; [.206B.0020.0002] # TELUGU DIGIT ZERO
+0C78 ; [.206B.0020.0002] # TELUGU FRACTION DIGIT ZERO FOR ODD POWERS OF FOUR
+0CE6 ; [.206B.0020.0002] # KANNADA DIGIT ZERO
+0D66 ; [.206B.0020.0002] # MALAYALAM DIGIT ZERO
+0DE6 ; [.206B.0020.0002] # SINHALA LITH DIGIT ZERO
+0E50 ; [.206B.0020.0002] # THAI DIGIT ZERO
+0ED0 ; [.206B.0020.0002] # LAO DIGIT ZERO
+0F20 ; [.206B.0020.0002] # TIBETAN DIGIT ZERO
+1040 ; [.206B.0020.0002] # MYANMAR DIGIT ZERO
+1090 ; [.206B.0020.0002] # MYANMAR SHAN DIGIT ZERO
+17E0 ; [.206B.0020.0002] # KHMER DIGIT ZERO
+17F0 ; [.206B.0020.0002] # KHMER SYMBOL LEK ATTAK SON
+1810 ; [.206B.0020.0002] # MONGOLIAN DIGIT ZERO
+1946 ; [.206B.0020.0002] # LIMBU DIGIT ZERO
+19D0 ; [.206B.0020.0002] # NEW TAI LUE DIGIT ZERO
+1A80 ; [.206B.0020.0002] # TAI THAM HORA DIGIT ZERO
+1A90 ; [.206B.0020.0002] # TAI THAM THAM DIGIT ZERO
+1B50 ; [.206B.0020.0002] # BALINESE DIGIT ZERO
+1BB0 ; [.206B.0020.0002] # SUNDANESE DIGIT ZERO
+1C40 ; [.206B.0020.0002] # LEPCHA DIGIT ZERO
+1C50 ; [.206B.0020.0002] # OL CHIKI DIGIT ZERO
+3007 ; [.206B.0020.0002] # IDEOGRAPHIC NUMBER ZERO
+A620 ; [.206B.0020.0002] # VAI DIGIT ZERO
+A8D0 ; [.206B.0020.0002] # SAURASHTRA DIGIT ZERO
+A900 ; [.206B.0020.0002] # KAYAH LI DIGIT ZERO
+A9D0 ; [.206B.0020.0002] # JAVANESE DIGIT ZERO
+A9F0 ; [.206B.0020.0002] # MYANMAR TAI LAING DIGIT ZERO
+AA50 ; [.206B.0020.0002] # CHAM DIGIT ZERO
+ABF0 ; [.206B.0020.0002] # MEETEI MAYEK DIGIT ZERO
+1018A ; [.206B.0020.0002] # GREEK ZERO SIGN
+104A0 ; [.206B.0020.0002] # OSMANYA DIGIT ZERO
+10D30 ; [.206B.0020.0002] # HANIFI ROHINGYA DIGIT ZERO
+11066 ; [.206B.0020.0002] # BRAHMI DIGIT ZERO
+110F0 ; [.206B.0020.0002] # SORA SOMPENG DIGIT ZERO
+11136 ; [.206B.0020.0002] # CHAKMA DIGIT ZERO
+111D0 ; [.206B.0020.0002] # SHARADA DIGIT ZERO
+112F0 ; [.206B.0020.0002] # KHUDAWADI DIGIT ZERO
+11450 ; [.206B.0020.0002] # NEWA DIGIT ZERO
+114D0 ; [.206B.0020.0002] # TIRHUTA DIGIT ZERO
+11650 ; [.206B.0020.0002] # MODI DIGIT ZERO
+116C0 ; [.206B.0020.0002] # TAKRI DIGIT ZERO
+11730 ; [.206B.0020.0002] # AHOM DIGIT ZERO
+118E0 ; [.206B.0020.0002] # WARANG CITI DIGIT ZERO
+11950 ; [.206B.0020.0002] # DIVES AKURU DIGIT ZERO
+11C50 ; [.206B.0020.0002] # BHAIKSUKI DIGIT ZERO
+11D50 ; [.206B.0020.0002] # MASARAM GONDI DIGIT ZERO
+11DA0 ; [.206B.0020.0002] # GUNJALA GONDI DIGIT ZERO
+16A60 ; [.206B.0020.0002] # MRO DIGIT ZERO
+16AC0 ; [.206B.0020.0002] # TANGSA DIGIT ZERO
+16B50 ; [.206B.0020.0002] # PAHAWH HMONG DIGIT ZERO
+16E80 ; [.206B.0020.0002] # MEDEFAIDRIN DIGIT ZERO
+1D2E0 ; [.206B.0020.0002] # MAYAN NUMERAL ZERO
+1E140 ; [.206B.0020.0002] # NYIAKENG PUACHUE HMONG DIGIT ZERO
+1E2F0 ; [.206B.0020.0002] # WANCHO DIGIT ZERO
+1E950 ; [.206B.0020.0002] # ADLAM DIGIT ZERO
+FF10 ; [.206B.0020.0003] # FULLWIDTH DIGIT ZERO
+0F33 ; [.206B.0020.0004] # TIBETAN DIGIT HALF ZERO
+1F100 ; [.206B.0020.0004][*0281.0020.0004] # DIGIT ZERO FULL STOP
+1F101 ; [.206B.0020.0004][*0224.0020.0004] # DIGIT ZERO COMMA
+1D7CE ; [.206B.0020.0005] # MATHEMATICAL BOLD DIGIT ZERO
+1D7D8 ; [.206B.0020.0005] # MATHEMATICAL DOUBLE-STRUCK DIGIT ZERO
+1D7E2 ; [.206B.0020.0005] # MATHEMATICAL SANS-SERIF DIGIT ZERO
+1D7EC ; [.206B.0020.0005] # MATHEMATICAL SANS-SERIF BOLD DIGIT ZERO
+1D7F6 ; [.206B.0020.0005] # MATHEMATICAL MONOSPACE DIGIT ZERO
+1FBF0 ; [.206B.0020.0005] # SEGMENTED DIGIT ZERO
+24EA ; [.206B.0020.0006] # CIRCLED DIGIT ZERO
+24FF ; [.206B.0020.0006] # NEGATIVE CIRCLED DIGIT ZERO
+1F10B ; [.206B.0020.0006] # DINGBAT CIRCLED SANS-SERIF DIGIT ZERO
+1F10C ; [.206B.0020.0006] # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ZERO
+2070 ; [.206B.0020.0014] # SUPERSCRIPT ZERO
+2080 ; [.206B.0020.0015] # SUBSCRIPT ZERO
+2189 ; [.206B.0020.001E][*06AD.0020.001E][.206E.0020.001E] # VULGAR FRACTION ZERO THIRDS
+3358 ; [.206B.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO
+0031 ; [.206C.0020.0002] # DIGIT ONE
+0661 ; [.206C.0020.0002] # ARABIC-INDIC DIGIT ONE
+06F1 ; [.206C.0020.0002] # EXTENDED ARABIC-INDIC DIGIT ONE
+07C1 ; [.206C.0020.0002] # NKO DIGIT ONE
+0967 ; [.206C.0020.0002] # DEVANAGARI DIGIT ONE
+09E7 ; [.206C.0020.0002] # BENGALI DIGIT ONE
+0A67 ; [.206C.0020.0002] # GURMUKHI DIGIT ONE
+0AE7 ; [.206C.0020.0002] # GUJARATI DIGIT ONE
+0B67 ; [.206C.0020.0002] # ORIYA DIGIT ONE
+0BE7 ; [.206C.0020.0002] # TAMIL DIGIT ONE
+0C67 ; [.206C.0020.0002] # TELUGU DIGIT ONE
+0C79 ; [.206C.0020.0002] # TELUGU FRACTION DIGIT ONE FOR ODD POWERS OF FOUR
+0C7C ; [.206C.0020.0002] # TELUGU FRACTION DIGIT ONE FOR EVEN POWERS OF FOUR
+0CE7 ; [.206C.0020.0002] # KANNADA DIGIT ONE
+0D67 ; [.206C.0020.0002] # MALAYALAM DIGIT ONE
+0DE7 ; [.206C.0020.0002] # SINHALA LITH DIGIT ONE
+0E51 ; [.206C.0020.0002] # THAI DIGIT ONE
+0ED1 ; [.206C.0020.0002] # LAO DIGIT ONE
+0F21 ; [.206C.0020.0002] # TIBETAN DIGIT ONE
+1041 ; [.206C.0020.0002] # MYANMAR DIGIT ONE
+1091 ; [.206C.0020.0002] # MYANMAR SHAN DIGIT ONE
+1369 ; [.206C.0020.0002] # ETHIOPIC DIGIT ONE
+17E1 ; [.206C.0020.0002] # KHMER DIGIT ONE
+17F1 ; [.206C.0020.0002] # KHMER SYMBOL LEK ATTAK MUOY
+1811 ; [.206C.0020.0002] # MONGOLIAN DIGIT ONE
+1947 ; [.206C.0020.0002] # LIMBU DIGIT ONE
+19D1 ; [.206C.0020.0002] # NEW TAI LUE DIGIT ONE
+19DA ; [.206C.0020.0002] # NEW TAI LUE THAM DIGIT ONE
+1A81 ; [.206C.0020.0002] # TAI THAM HORA DIGIT ONE
+1A91 ; [.206C.0020.0002] # TAI THAM THAM DIGIT ONE
+1B51 ; [.206C.0020.0002] # BALINESE DIGIT ONE
+1BB1 ; [.206C.0020.0002] # SUNDANESE DIGIT ONE
+1C41 ; [.206C.0020.0002] # LEPCHA DIGIT ONE
+1C51 ; [.206C.0020.0002] # OL CHIKI DIGIT ONE
+3021 ; [.206C.0020.0002] # HANGZHOU NUMERAL ONE
+A621 ; [.206C.0020.0002] # VAI DIGIT ONE
+A8D1 ; [.206C.0020.0002] # SAURASHTRA DIGIT ONE
+A901 ; [.206C.0020.0002] # KAYAH LI DIGIT ONE
+A9D1 ; [.206C.0020.0002] # JAVANESE DIGIT ONE
+A9F1 ; [.206C.0020.0002] # MYANMAR TAI LAING DIGIT ONE
+AA51 ; [.206C.0020.0002] # CHAM DIGIT ONE
+ABF1 ; [.206C.0020.0002] # MEETEI MAYEK DIGIT ONE
+10107 ; [.206C.0020.0002] # AEGEAN NUMBER ONE
+10142 ; [.206C.0020.0002] # GREEK ACROPHONIC ATTIC ONE DRACHMA
+10158 ; [.206C.0020.0002] # GREEK ACROPHONIC HERAEUM ONE PLETHRON
+10159 ; [.206C.0020.0002] # GREEK ACROPHONIC THESPIAN ONE
+1015A ; [.206C.0020.0002] # GREEK ACROPHONIC HERMIONIAN ONE
+102E1 ; [.206C.0020.0002] # COPTIC EPACT DIGIT ONE
+10320 ; [.206C.0020.0002] # OLD ITALIC NUMERAL ONE
+103D1 ; [.206C.0020.0002] # OLD PERSIAN NUMBER ONE
+104A1 ; [.206C.0020.0002] # OSMANYA DIGIT ONE
+10858 ; [.206C.0020.0002] # IMPERIAL ARAMAIC NUMBER ONE
+10879 ; [.206C.0020.0002] # PALMYRENE NUMBER ONE
+108A7 ; [.206C.0020.0002] # NABATAEAN NUMBER ONE
+108FB ; [.206C.0020.0002] # HATRAN NUMBER ONE
+10916 ; [.206C.0020.0002] # PHOENICIAN NUMBER ONE
+109C0 ; [.206C.0020.0002] # MEROITIC CURSIVE NUMBER ONE
+10A40 ; [.206C.0020.0002] # KHAROSHTHI DIGIT ONE
+10A7D ; [.206C.0020.0002] # OLD SOUTH ARABIAN NUMBER ONE
+10A9D ; [.206C.0020.0002] # OLD NORTH ARABIAN NUMBER ONE
+10AEB ; [.206C.0020.0002] # MANICHAEAN NUMBER ONE
+10B58 ; [.206C.0020.0002] # INSCRIPTIONAL PARTHIAN NUMBER ONE
+10B78 ; [.206C.0020.0002] # INSCRIPTIONAL PAHLAVI NUMBER ONE
+10BA9 ; [.206C.0020.0002] # PSALTER PAHLAVI NUMBER ONE
+10CFA ; [.206C.0020.0002] # OLD HUNGARIAN NUMBER ONE
+10D31 ; [.206C.0020.0002] # HANIFI ROHINGYA DIGIT ONE
+10E60 ; [.206C.0020.0002] # RUMI DIGIT ONE
+10F1D ; [.206C.0020.0002] # OLD SOGDIAN NUMBER ONE
+10F51 ; [.206C.0020.0002] # SOGDIAN NUMBER ONE
+10FC5 ; [.206C.0020.0002] # CHORASMIAN NUMBER ONE
+11052 ; [.206C.0020.0002] # BRAHMI NUMBER ONE
+11067 ; [.206C.0020.0002] # BRAHMI DIGIT ONE
+110F1 ; [.206C.0020.0002] # SORA SOMPENG DIGIT ONE
+11137 ; [.206C.0020.0002] # CHAKMA DIGIT ONE
+111D1 ; [.206C.0020.0002] # SHARADA DIGIT ONE
+111E1 ; [.206C.0020.0002] # SINHALA ARCHAIC DIGIT ONE
+112F1 ; [.206C.0020.0002] # KHUDAWADI DIGIT ONE
+11451 ; [.206C.0020.0002] # NEWA DIGIT ONE
+114D1 ; [.206C.0020.0002] # TIRHUTA DIGIT ONE
+11651 ; [.206C.0020.0002] # MODI DIGIT ONE
+116C1 ; [.206C.0020.0002] # TAKRI DIGIT ONE
+11731 ; [.206C.0020.0002] # AHOM DIGIT ONE
+118E1 ; [.206C.0020.0002] # WARANG CITI DIGIT ONE
+11951 ; [.206C.0020.0002] # DIVES AKURU DIGIT ONE
+11C51 ; [.206C.0020.0002] # BHAIKSUKI DIGIT ONE
+11C5A ; [.206C.0020.0002] # BHAIKSUKI NUMBER ONE
+11D51 ; [.206C.0020.0002] # MASARAM GONDI DIGIT ONE
+11DA1 ; [.206C.0020.0002] # GUNJALA GONDI DIGIT ONE
+12415 ; [.206C.0020.0002] # CUNEIFORM NUMERIC SIGN ONE GESH2
+1241E ; [.206C.0020.0002] # CUNEIFORM NUMERIC SIGN ONE GESHU
+1242C ; [.206C.0020.0002] # CUNEIFORM NUMERIC SIGN ONE SHARU
+12434 ; [.206C.0020.0002] # CUNEIFORM NUMERIC SIGN ONE BURU
+1244F ; [.206C.0020.0002] # CUNEIFORM NUMERIC SIGN ONE BAN2
+12458 ; [.206C.0020.0002] # CUNEIFORM NUMERIC SIGN ONE ESHE3
+16A61 ; [.206C.0020.0002] # MRO DIGIT ONE
+16AC1 ; [.206C.0020.0002] # TANGSA DIGIT ONE
+16B51 ; [.206C.0020.0002] # PAHAWH HMONG DIGIT ONE
+16E81 ; [.206C.0020.0002] # MEDEFAIDRIN DIGIT ONE
+1D2E1 ; [.206C.0020.0002] # MAYAN NUMERAL ONE
+1D360 ; [.206C.0020.0002] # COUNTING ROD UNIT DIGIT ONE
+1D372 ; [.206C.0020.0002] # IDEOGRAPHIC TALLY MARK ONE
+1D377 ; [.206C.0020.0002] # TALLY MARK ONE
+1E141 ; [.206C.0020.0002] # NYIAKENG PUACHUE HMONG DIGIT ONE
+1E2F1 ; [.206C.0020.0002] # WANCHO DIGIT ONE
+1E8C7 ; [.206C.0020.0002] # MENDE KIKAKUI DIGIT ONE
+1E951 ; [.206C.0020.0002] # ADLAM DIGIT ONE
+1EC71 ; [.206C.0020.0002] # INDIC SIYAQ NUMBER ONE
+1ECA3 ; [.206C.0020.0002] # INDIC SIYAQ NUMBER PREFIXED ONE
+1ED01 ; [.206C.0020.0002] # OTTOMAN SIYAQ NUMBER ONE
+FF11 ; [.206C.0020.0003] # FULLWIDTH DIGIT ONE
+0F2A ; [.206C.0020.0004] # TIBETAN DIGIT HALF ONE
+2474 ; [*0334.0020.0004][.206C.0020.0004][*0335.0020.0004] # PARENTHESIZED DIGIT ONE
+2488 ; [.206C.0020.0004][*0281.0020.0004] # DIGIT ONE FULL STOP
+1F102 ; [.206C.0020.0004][*0224.0020.0004] # DIGIT ONE COMMA
+1D7CF ; [.206C.0020.0005] # MATHEMATICAL BOLD DIGIT ONE
+1D7D9 ; [.206C.0020.0005] # MATHEMATICAL DOUBLE-STRUCK DIGIT ONE
+1D7E3 ; [.206C.0020.0005] # MATHEMATICAL SANS-SERIF DIGIT ONE
+1D7ED ; [.206C.0020.0005] # MATHEMATICAL SANS-SERIF BOLD DIGIT ONE
+1D7F7 ; [.206C.0020.0005] # MATHEMATICAL MONOSPACE DIGIT ONE
+1FBF1 ; [.206C.0020.0005] # SEGMENTED DIGIT ONE
+2460 ; [.206C.0020.0006] # CIRCLED DIGIT ONE
+24F5 ; [.206C.0020.0006] # DOUBLE CIRCLED DIGIT ONE
+2776 ; [.206C.0020.0006] # DINGBAT NEGATIVE CIRCLED DIGIT ONE
+2780 ; [.206C.0020.0006] # DINGBAT CIRCLED SANS-SERIF DIGIT ONE
+278A ; [.206C.0020.0006] # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE
+00B9 ; [.206C.0020.0014] # SUPERSCRIPT ONE
+2081 ; [.206C.0020.0015] # SUBSCRIPT ONE
+215F ; [.206C.0020.001E][*06AD.0020.001E] # FRACTION NUMERATOR ONE
+16E94 ; [.206C.0020.0004][.0000.0118.0004] # MEDEFAIDRIN DIGIT ONE ALTERNATE FORM
+1ECB1 ; [.206C.0020.0004][.0000.0118.0004] # INDIC SIYAQ NUMBER ALTERNATE ONE
+247D ; [*0334.0020.0004][.206C.0020.0004][.206B.0020.0004][*0335.0020.0004] # PARENTHESIZED NUMBER TEN
+2491 ; [.206C.0020.0004][.206B.0020.0004][*0281.0020.0004] # NUMBER TEN FULL STOP
+2469 ; [.206C.0020.0006][.206B.0020.0006] # CIRCLED NUMBER TEN
+24FE ; [.206C.0020.0006][.206B.0020.0006] # DOUBLE CIRCLED NUMBER TEN
+277F ; [.206C.0020.0006][.206B.0020.0006] # DINGBAT NEGATIVE CIRCLED NUMBER TEN
+2789 ; [.206C.0020.0006][.206B.0020.0006] # DINGBAT CIRCLED SANS-SERIF NUMBER TEN
+2793 ; [.206C.0020.0006][.206B.0020.0006] # DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN
+3248 ; [.206C.0020.0006][.206B.0020.0006] # CIRCLED NUMBER TEN ON BLACK SQUARE
+33E9 ; [.206C.0020.0004][.206B.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN
+32C9 ; [.206C.0020.0004][.206B.0020.0004][.FB40.0020.0004][.E708.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER
+3362 ; [.206C.0020.0004][.206B.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN
+247E ; [*0334.0020.0004][.206C.0020.0004][.206C.0020.0004][*0335.0020.0004] # PARENTHESIZED NUMBER ELEVEN
+2492 ; [.206C.0020.0004][.206C.0020.0004][*0281.0020.0004] # NUMBER ELEVEN FULL STOP
+246A ; [.206C.0020.0006][.206C.0020.0006] # CIRCLED NUMBER ELEVEN
+24EB ; [.206C.0020.0006][.206C.0020.0006] # NEGATIVE CIRCLED NUMBER ELEVEN
+2152 ; [.206C.0020.001E][*06AD.0020.001E][.206C.0020.001E][.206B.0020.001E] # VULGAR FRACTION ONE TENTH
+33EA ; [.206C.0020.0004][.206C.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN
+32CA ; [.206C.0020.0004][.206C.0020.0004][.FB40.0020.0004][.E708.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER
+3363 ; [.206C.0020.0004][.206C.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN
+247F ; [*0334.0020.0004][.206C.0020.0004][.206D.0020.0004][*0335.0020.0004] # PARENTHESIZED NUMBER TWELVE
+2493 ; [.206C.0020.0004][.206D.0020.0004][*0281.0020.0004] # NUMBER TWELVE FULL STOP
+246B ; [.206C.0020.0006][.206D.0020.0006] # CIRCLED NUMBER TWELVE
+24EC ; [.206C.0020.0006][.206D.0020.0006] # NEGATIVE CIRCLED NUMBER TWELVE
+00BD ; [.206C.0020.001E][*06AD.0020.001E][.206D.0020.001E] # VULGAR FRACTION ONE HALF
+1F1A4 ; [.206C.0020.001C][.206D.0020.001C][.206B.0020.001C][.224D.0020.001D] # SQUARED ONE HUNDRED TWENTY P
+33EB ; [.206C.0020.0004][.206D.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE
+32CB ; [.206C.0020.0004][.206D.0020.0004][.FB40.0020.0004][.E708.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER
+3364 ; [.206C.0020.0004][.206D.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE
+2480 ; [*0334.0020.0004][.206C.0020.0004][.206E.0020.0004][*0335.0020.0004] # PARENTHESIZED NUMBER THIRTEEN
+2494 ; [.206C.0020.0004][.206E.0020.0004][*0281.0020.0004] # NUMBER THIRTEEN FULL STOP
+246C ; [.206C.0020.0006][.206E.0020.0006] # CIRCLED NUMBER THIRTEEN
+24ED ; [.206C.0020.0006][.206E.0020.0006] # NEGATIVE CIRCLED NUMBER THIRTEEN
+2153 ; [.206C.0020.001E][*06AD.0020.001E][.206E.0020.001E] # VULGAR FRACTION ONE THIRD
+33EC ; [.206C.0020.0004][.206E.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN
+3365 ; [.206C.0020.0004][.206E.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN
+2481 ; [*0334.0020.0004][.206C.0020.0004][.206F.0020.0004][*0335.0020.0004] # PARENTHESIZED NUMBER FOURTEEN
+2495 ; [.206C.0020.0004][.206F.0020.0004][*0281.0020.0004] # NUMBER FOURTEEN FULL STOP
+246D ; [.206C.0020.0006][.206F.0020.0006] # CIRCLED NUMBER FOURTEEN
+24EE ; [.206C.0020.0006][.206F.0020.0006] # NEGATIVE CIRCLED NUMBER FOURTEEN
+00BC ; [.206C.0020.001E][*06AD.0020.001E][.206F.0020.001E] # VULGAR FRACTION ONE QUARTER
+33ED ; [.206C.0020.0004][.206F.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN
+3366 ; [.206C.0020.0004][.206F.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN
+2482 ; [*0334.0020.0004][.206C.0020.0004][.2070.0020.0004][*0335.0020.0004] # PARENTHESIZED NUMBER FIFTEEN
+2496 ; [.206C.0020.0004][.2070.0020.0004][*0281.0020.0004] # NUMBER FIFTEEN FULL STOP
+246E ; [.206C.0020.0006][.2070.0020.0006] # CIRCLED NUMBER FIFTEEN
+24EF ; [.206C.0020.0006][.2070.0020.0006] # NEGATIVE CIRCLED NUMBER FIFTEEN
+2155 ; [.206C.0020.001E][*06AD.0020.001E][.2070.0020.001E] # VULGAR FRACTION ONE FIFTH
+33EE ; [.206C.0020.0004][.2070.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN
+3367 ; [.206C.0020.0004][.2070.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN
+2483 ; [*0334.0020.0004][.206C.0020.0004][.2071.0020.0004][*0335.0020.0004] # PARENTHESIZED NUMBER SIXTEEN
+2497 ; [.206C.0020.0004][.2071.0020.0004][*0281.0020.0004] # NUMBER SIXTEEN FULL STOP
+246F ; [.206C.0020.0006][.2071.0020.0006] # CIRCLED NUMBER SIXTEEN
+24F0 ; [.206C.0020.0006][.2071.0020.0006] # NEGATIVE CIRCLED NUMBER SIXTEEN
+2159 ; [.206C.0020.001E][*06AD.0020.001E][.2071.0020.001E] # VULGAR FRACTION ONE SIXTH
+33EF ; [.206C.0020.0004][.2071.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN
+3368 ; [.206C.0020.0004][.2071.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN
+2484 ; [*0334.0020.0004][.206C.0020.0004][.2072.0020.0004][*0335.0020.0004] # PARENTHESIZED NUMBER SEVENTEEN
+2498 ; [.206C.0020.0004][.2072.0020.0004][*0281.0020.0004] # NUMBER SEVENTEEN FULL STOP
+2470 ; [.206C.0020.0006][.2072.0020.0006] # CIRCLED NUMBER SEVENTEEN
+24F1 ; [.206C.0020.0006][.2072.0020.0006] # NEGATIVE CIRCLED NUMBER SEVENTEEN
+2150 ; [.206C.0020.001E][*06AD.0020.001E][.2072.0020.001E] # VULGAR FRACTION ONE SEVENTH
+33F0 ; [.206C.0020.0004][.2072.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN
+3369 ; [.206C.0020.0004][.2072.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN
+2485 ; [*0334.0020.0004][.206C.0020.0004][.2073.0020.0004][*0335.0020.0004] # PARENTHESIZED NUMBER EIGHTEEN
+2499 ; [.206C.0020.0004][.2073.0020.0004][*0281.0020.0004] # NUMBER EIGHTEEN FULL STOP
+2471 ; [.206C.0020.0006][.2073.0020.0006] # CIRCLED NUMBER EIGHTEEN
+24F2 ; [.206C.0020.0006][.2073.0020.0006] # NEGATIVE CIRCLED NUMBER EIGHTEEN
+215B ; [.206C.0020.001E][*06AD.0020.001E][.2073.0020.001E] # VULGAR FRACTION ONE EIGHTH
+33F1 ; [.206C.0020.0004][.2073.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN
+336A ; [.206C.0020.0004][.2073.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN
+2486 ; [*0334.0020.0004][.206C.0020.0004][.2074.0020.0004][*0335.0020.0004] # PARENTHESIZED NUMBER NINETEEN
+249A ; [.206C.0020.0004][.2074.0020.0004][*0281.0020.0004] # NUMBER NINETEEN FULL STOP
+2472 ; [.206C.0020.0006][.2074.0020.0006] # CIRCLED NUMBER NINETEEN
+24F3 ; [.206C.0020.0006][.2074.0020.0006] # NEGATIVE CIRCLED NUMBER NINETEEN
+2151 ; [.206C.0020.001E][*06AD.0020.001E][.2074.0020.001E] # VULGAR FRACTION ONE NINTH
+33F2 ; [.206C.0020.0004][.2074.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN
+336B ; [.206C.0020.0004][.2074.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN
+33E0 ; [.206C.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE
+32C0 ; [.206C.0020.0004][.FB40.0020.0004][.E708.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY
+3359 ; [.206C.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE
+0032 ; [.206D.0020.0002] # DIGIT TWO
+0662 ; [.206D.0020.0002] # ARABIC-INDIC DIGIT TWO
+06F2 ; [.206D.0020.0002] # EXTENDED ARABIC-INDIC DIGIT TWO
+07C2 ; [.206D.0020.0002] # NKO DIGIT TWO
+0968 ; [.206D.0020.0002] # DEVANAGARI DIGIT TWO
+09E8 ; [.206D.0020.0002] # BENGALI DIGIT TWO
+0A68 ; [.206D.0020.0002] # GURMUKHI DIGIT TWO
+0AE8 ; [.206D.0020.0002] # GUJARATI DIGIT TWO
+0B68 ; [.206D.0020.0002] # ORIYA DIGIT TWO
+0BE8 ; [.206D.0020.0002] # TAMIL DIGIT TWO
+0C68 ; [.206D.0020.0002] # TELUGU DIGIT TWO
+0C7A ; [.206D.0020.0002] # TELUGU FRACTION DIGIT TWO FOR ODD POWERS OF FOUR
+0C7D ; [.206D.0020.0002] # TELUGU FRACTION DIGIT TWO FOR EVEN POWERS OF FOUR
+0CE8 ; [.206D.0020.0002] # KANNADA DIGIT TWO
+0D68 ; [.206D.0020.0002] # MALAYALAM DIGIT TWO
+0DE8 ; [.206D.0020.0002] # SINHALA LITH DIGIT TWO
+0E52 ; [.206D.0020.0002] # THAI DIGIT TWO
+0ED2 ; [.206D.0020.0002] # LAO DIGIT TWO
+0F22 ; [.206D.0020.0002] # TIBETAN DIGIT TWO
+1042 ; [.206D.0020.0002] # MYANMAR DIGIT TWO
+1092 ; [.206D.0020.0002] # MYANMAR SHAN DIGIT TWO
+136A ; [.206D.0020.0002] # ETHIOPIC DIGIT TWO
+17E2 ; [.206D.0020.0002] # KHMER DIGIT TWO
+17F2 ; [.206D.0020.0002] # KHMER SYMBOL LEK ATTAK PII
+1812 ; [.206D.0020.0002] # MONGOLIAN DIGIT TWO
+1948 ; [.206D.0020.0002] # LIMBU DIGIT TWO
+19D2 ; [.206D.0020.0002] # NEW TAI LUE DIGIT TWO
+1A82 ; [.206D.0020.0002] # TAI THAM HORA DIGIT TWO
+1A92 ; [.206D.0020.0002] # TAI THAM THAM DIGIT TWO
+1B52 ; [.206D.0020.0002] # BALINESE DIGIT TWO
+1BB2 ; [.206D.0020.0002] # SUNDANESE DIGIT TWO
+1C42 ; [.206D.0020.0002] # LEPCHA DIGIT TWO
+1C52 ; [.206D.0020.0002] # OL CHIKI DIGIT TWO
+3022 ; [.206D.0020.0002] # HANGZHOU NUMERAL TWO
+A622 ; [.206D.0020.0002] # VAI DIGIT TWO
+A8D2 ; [.206D.0020.0002] # SAURASHTRA DIGIT TWO
+A902 ; [.206D.0020.0002] # KAYAH LI DIGIT TWO
+A9D2 ; [.206D.0020.0002] # JAVANESE DIGIT TWO
+A9F2 ; [.206D.0020.0002] # MYANMAR TAI LAING DIGIT TWO
+AA52 ; [.206D.0020.0002] # CHAM DIGIT TWO
+ABF2 ; [.206D.0020.0002] # MEETEI MAYEK DIGIT TWO
+10108 ; [.206D.0020.0002] # AEGEAN NUMBER TWO
+1015B ; [.206D.0020.0002] # GREEK ACROPHONIC EPIDAUREAN TWO
+1015C ; [.206D.0020.0002] # GREEK ACROPHONIC THESPIAN TWO
+1015D ; [.206D.0020.0002] # GREEK ACROPHONIC CYRENAIC TWO DRACHMAS
+1015E ; [.206D.0020.0002] # GREEK ACROPHONIC EPIDAUREAN TWO DRACHMAS
+102E2 ; [.206D.0020.0002] # COPTIC EPACT DIGIT TWO
+103D2 ; [.206D.0020.0002] # OLD PERSIAN NUMBER TWO
+104A2 ; [.206D.0020.0002] # OSMANYA DIGIT TWO
+10859 ; [.206D.0020.0002] # IMPERIAL ARAMAIC NUMBER TWO
+1087A ; [.206D.0020.0002] # PALMYRENE NUMBER TWO
+108A8 ; [.206D.0020.0002] # NABATAEAN NUMBER TWO
+1091A ; [.206D.0020.0002] # PHOENICIAN NUMBER TWO
+109C1 ; [.206D.0020.0002] # MEROITIC CURSIVE NUMBER TWO
+10A41 ; [.206D.0020.0002] # KHAROSHTHI DIGIT TWO
+10B59 ; [.206D.0020.0002] # INSCRIPTIONAL PARTHIAN NUMBER TWO
+10B79 ; [.206D.0020.0002] # INSCRIPTIONAL PAHLAVI NUMBER TWO
+10BAA ; [.206D.0020.0002] # PSALTER PAHLAVI NUMBER TWO
+10D32 ; [.206D.0020.0002] # HANIFI ROHINGYA DIGIT TWO
+10E61 ; [.206D.0020.0002] # RUMI DIGIT TWO
+10F1E ; [.206D.0020.0002] # OLD SOGDIAN NUMBER TWO
+10FC6 ; [.206D.0020.0002] # CHORASMIAN NUMBER TWO
+11053 ; [.206D.0020.0002] # BRAHMI NUMBER TWO
+11068 ; [.206D.0020.0002] # BRAHMI DIGIT TWO
+110F2 ; [.206D.0020.0002] # SORA SOMPENG DIGIT TWO
+11138 ; [.206D.0020.0002] # CHAKMA DIGIT TWO
+111D2 ; [.206D.0020.0002] # SHARADA DIGIT TWO
+111E2 ; [.206D.0020.0002] # SINHALA ARCHAIC DIGIT TWO
+112F2 ; [.206D.0020.0002] # KHUDAWADI DIGIT TWO
+11452 ; [.206D.0020.0002] # NEWA DIGIT TWO
+114D2 ; [.206D.0020.0002] # TIRHUTA DIGIT TWO
+11652 ; [.206D.0020.0002] # MODI DIGIT TWO
+116C2 ; [.206D.0020.0002] # TAKRI DIGIT TWO
+11732 ; [.206D.0020.0002] # AHOM DIGIT TWO
+118E2 ; [.206D.0020.0002] # WARANG CITI DIGIT TWO
+11952 ; [.206D.0020.0002] # DIVES AKURU DIGIT TWO
+11C52 ; [.206D.0020.0002] # BHAIKSUKI DIGIT TWO
+11C5B ; [.206D.0020.0002] # BHAIKSUKI NUMBER TWO
+11D52 ; [.206D.0020.0002] # MASARAM GONDI DIGIT TWO
+11DA2 ; [.206D.0020.0002] # GUNJALA GONDI DIGIT TWO
+12400 ; [.206D.0020.0002] # CUNEIFORM NUMERIC SIGN TWO ASH
+12416 ; [.206D.0020.0002] # CUNEIFORM NUMERIC SIGN TWO GESH2
+1241F ; [.206D.0020.0002] # CUNEIFORM NUMERIC SIGN TWO GESHU
+12423 ; [.206D.0020.0002] # CUNEIFORM NUMERIC SIGN TWO SHAR2
+1242D ; [.206D.0020.0002] # CUNEIFORM NUMERIC SIGN TWO SHARU
+12435 ; [.206D.0020.0002] # CUNEIFORM NUMERIC SIGN TWO BURU
+1244A ; [.206D.0020.0002] # CUNEIFORM NUMERIC SIGN TWO ASH TENU
+12450 ; [.206D.0020.0002] # CUNEIFORM NUMERIC SIGN TWO BAN2
+12456 ; [.206D.0020.0002] # CUNEIFORM NUMERIC SIGN NIGIDAMIN
+12459 ; [.206D.0020.0002] # CUNEIFORM NUMERIC SIGN TWO ESHE3
+16A62 ; [.206D.0020.0002] # MRO DIGIT TWO
+16AC2 ; [.206D.0020.0002] # TANGSA DIGIT TWO
+16B52 ; [.206D.0020.0002] # PAHAWH HMONG DIGIT TWO
+16E82 ; [.206D.0020.0002] # MEDEFAIDRIN DIGIT TWO
+1D2E2 ; [.206D.0020.0002] # MAYAN NUMERAL TWO
+1D361 ; [.206D.0020.0002] # COUNTING ROD UNIT DIGIT TWO
+1D373 ; [.206D.0020.0002] # IDEOGRAPHIC TALLY MARK TWO
+1E142 ; [.206D.0020.0002] # NYIAKENG PUACHUE HMONG DIGIT TWO
+1E2F2 ; [.206D.0020.0002] # WANCHO DIGIT TWO
+1E8C8 ; [.206D.0020.0002] # MENDE KIKAKUI DIGIT TWO
+1E952 ; [.206D.0020.0002] # ADLAM DIGIT TWO
+1EC72 ; [.206D.0020.0002] # INDIC SIYAQ NUMBER TWO
+1ECA4 ; [.206D.0020.0002] # INDIC SIYAQ NUMBER PREFIXED TWO
+1ED02 ; [.206D.0020.0002] # OTTOMAN SIYAQ NUMBER TWO
+FF12 ; [.206D.0020.0003] # FULLWIDTH DIGIT TWO
+0F2B ; [.206D.0020.0004] # TIBETAN DIGIT HALF TWO
+2475 ; [*0334.0020.0004][.206D.0020.0004][*0335.0020.0004] # PARENTHESIZED DIGIT TWO
+2489 ; [.206D.0020.0004][*0281.0020.0004] # DIGIT TWO FULL STOP
+1F103 ; [.206D.0020.0004][*0224.0020.0004] # DIGIT TWO COMMA
+1D7D0 ; [.206D.0020.0005] # MATHEMATICAL BOLD DIGIT TWO
+1D7DA ; [.206D.0020.0005] # MATHEMATICAL DOUBLE-STRUCK DIGIT TWO
+1D7E4 ; [.206D.0020.0005] # MATHEMATICAL SANS-SERIF DIGIT TWO
+1D7EE ; [.206D.0020.0005] # MATHEMATICAL SANS-SERIF BOLD DIGIT TWO
+1D7F8 ; [.206D.0020.0005] # MATHEMATICAL MONOSPACE DIGIT TWO
+1FBF2 ; [.206D.0020.0005] # SEGMENTED DIGIT TWO
+2461 ; [.206D.0020.0006] # CIRCLED DIGIT TWO
+24F6 ; [.206D.0020.0006] # DOUBLE CIRCLED DIGIT TWO
+2777 ; [.206D.0020.0006] # DINGBAT NEGATIVE CIRCLED DIGIT TWO
+2781 ; [.206D.0020.0006] # DINGBAT CIRCLED SANS-SERIF DIGIT TWO
+278B ; [.206D.0020.0006] # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO
+00B2 ; [.206D.0020.0014] # SUPERSCRIPT TWO
+2082 ; [.206D.0020.0015] # SUBSCRIPT TWO
+16E95 ; [.206D.0020.0004][.0000.0118.0004] # MEDEFAIDRIN DIGIT TWO ALTERNATE FORM
+1ECB2 ; [.206D.0020.0004][.0000.0118.0004] # INDIC SIYAQ NUMBER ALTERNATE TWO
+1ED2F ; [.206D.0020.0004][.0000.0118.0004] # OTTOMAN SIYAQ ALTERNATE NUMBER TWO
+2487 ; [*0334.0020.0004][.206D.0020.0004][.206B.0020.0004][*0335.0020.0004] # PARENTHESIZED NUMBER TWENTY
+249B ; [.206D.0020.0004][.206B.0020.0004][*0281.0020.0004] # NUMBER TWENTY FULL STOP
+2473 ; [.206D.0020.0006][.206B.0020.0006] # CIRCLED NUMBER TWENTY
+24F4 ; [.206D.0020.0006][.206B.0020.0006] # NEGATIVE CIRCLED NUMBER TWENTY
+3249 ; [.206D.0020.0006][.206B.0020.0006] # CIRCLED NUMBER TWENTY ON BLACK SQUARE
+33F3 ; [.206D.0020.0004][.206B.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY
+336C ; [.206D.0020.0004][.206B.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY
+3251 ; [.206D.0020.0006][.206C.0020.0006] # CIRCLED NUMBER TWENTY ONE
+33F4 ; [.206D.0020.0004][.206C.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE
+336D ; [.206D.0020.0004][.206C.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE
+3252 ; [.206D.0020.0006][.206D.0020.0006] # CIRCLED NUMBER TWENTY TWO
+1F1A2 ; [.206D.0020.001C][.206D.0020.001C][*0281.0020.001C][.206D.0020.001C] # SQUARED TWENTY-TWO POINT TWO
+33F5 ; [.206D.0020.0004][.206D.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO
+336E ; [.206D.0020.0004][.206D.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO
+3253 ; [.206D.0020.0006][.206E.0020.0006] # CIRCLED NUMBER TWENTY THREE
+2154 ; [.206D.0020.001E][*06AD.0020.001E][.206E.0020.001E] # VULGAR FRACTION TWO THIRDS
+33F6 ; [.206D.0020.0004][.206E.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE
+336F ; [.206D.0020.0004][.206E.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE
+3254 ; [.206D.0020.0006][.206F.0020.0006] # CIRCLED NUMBER TWENTY FOUR
+33F7 ; [.206D.0020.0004][.206F.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR
+3370 ; [.206D.0020.0004][.206F.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR
+3255 ; [.206D.0020.0006][.2070.0020.0006] # CIRCLED NUMBER TWENTY FIVE
+2156 ; [.206D.0020.001E][*06AD.0020.001E][.2070.0020.001E] # VULGAR FRACTION TWO FIFTHS
+33F8 ; [.206D.0020.0004][.2070.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE
+3256 ; [.206D.0020.0006][.2071.0020.0006] # CIRCLED NUMBER TWENTY SIX
+33F9 ; [.206D.0020.0004][.2071.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX
+3257 ; [.206D.0020.0006][.2072.0020.0006] # CIRCLED NUMBER TWENTY SEVEN
+33FA ; [.206D.0020.0004][.2072.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN
+3258 ; [.206D.0020.0006][.2073.0020.0006] # CIRCLED NUMBER TWENTY EIGHT
+33FB ; [.206D.0020.0004][.2073.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT
+3259 ; [.206D.0020.0006][.2074.0020.0006] # CIRCLED NUMBER TWENTY NINE
+33FC ; [.206D.0020.0004][.2074.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE
+1F19D ; [.206D.0020.001C][.219C.0020.001D] # SQUARED TWO K
+1F19C ; [.206D.0020.001C][.21F7.0020.001C][.20BF.0020.001C][*0209.0020.001C][.22B6.0020.001D][.20A9.0020.001C][.2275.0020.001C] # SQUARED SECOND SCREEN
+33E1 ; [.206D.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO
+32C1 ; [.206D.0020.0004][.FB40.0020.0004][.E708.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY
+335A ; [.206D.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO
+0033 ; [.206E.0020.0002] # DIGIT THREE
+0663 ; [.206E.0020.0002] # ARABIC-INDIC DIGIT THREE
+06F3 ; [.206E.0020.0002] # EXTENDED ARABIC-INDIC DIGIT THREE
+07C3 ; [.206E.0020.0002] # NKO DIGIT THREE
+0969 ; [.206E.0020.0002] # DEVANAGARI DIGIT THREE
+09E9 ; [.206E.0020.0002] # BENGALI DIGIT THREE
+0A69 ; [.206E.0020.0002] # GURMUKHI DIGIT THREE
+0AE9 ; [.206E.0020.0002] # GUJARATI DIGIT THREE
+0B69 ; [.206E.0020.0002] # ORIYA DIGIT THREE
+0BE9 ; [.206E.0020.0002] # TAMIL DIGIT THREE
+0C69 ; [.206E.0020.0002] # TELUGU DIGIT THREE
+0C7B ; [.206E.0020.0002] # TELUGU FRACTION DIGIT THREE FOR ODD POWERS OF FOUR
+0C7E ; [.206E.0020.0002] # TELUGU FRACTION DIGIT THREE FOR EVEN POWERS OF FOUR
+0CE9 ; [.206E.0020.0002] # KANNADA DIGIT THREE
+0D69 ; [.206E.0020.0002] # MALAYALAM DIGIT THREE
+0DE9 ; [.206E.0020.0002] # SINHALA LITH DIGIT THREE
+0E53 ; [.206E.0020.0002] # THAI DIGIT THREE
+0ED3 ; [.206E.0020.0002] # LAO DIGIT THREE
+0F23 ; [.206E.0020.0002] # TIBETAN DIGIT THREE
+1043 ; [.206E.0020.0002] # MYANMAR DIGIT THREE
+1093 ; [.206E.0020.0002] # MYANMAR SHAN DIGIT THREE
+136B ; [.206E.0020.0002] # ETHIOPIC DIGIT THREE
+17E3 ; [.206E.0020.0002] # KHMER DIGIT THREE
+17F3 ; [.206E.0020.0002] # KHMER SYMBOL LEK ATTAK BEI
+1813 ; [.206E.0020.0002] # MONGOLIAN DIGIT THREE
+1949 ; [.206E.0020.0002] # LIMBU DIGIT THREE
+19D3 ; [.206E.0020.0002] # NEW TAI LUE DIGIT THREE
+1A83 ; [.206E.0020.0002] # TAI THAM HORA DIGIT THREE
+1A93 ; [.206E.0020.0002] # TAI THAM THAM DIGIT THREE
+1B53 ; [.206E.0020.0002] # BALINESE DIGIT THREE
+1BB3 ; [.206E.0020.0002] # SUNDANESE DIGIT THREE
+1C43 ; [.206E.0020.0002] # LEPCHA DIGIT THREE
+1C53 ; [.206E.0020.0002] # OL CHIKI DIGIT THREE
+3023 ; [.206E.0020.0002] # HANGZHOU NUMERAL THREE
+A623 ; [.206E.0020.0002] # VAI DIGIT THREE
+A8D3 ; [.206E.0020.0002] # SAURASHTRA DIGIT THREE
+A903 ; [.206E.0020.0002] # KAYAH LI DIGIT THREE
+A9D3 ; [.206E.0020.0002] # JAVANESE DIGIT THREE
+A9F3 ; [.206E.0020.0002] # MYANMAR TAI LAING DIGIT THREE
+AA53 ; [.206E.0020.0002] # CHAM DIGIT THREE
+ABF3 ; [.206E.0020.0002] # MEETEI MAYEK DIGIT THREE
+10109 ; [.206E.0020.0002] # AEGEAN NUMBER THREE
+102E3 ; [.206E.0020.0002] # COPTIC EPACT DIGIT THREE
+104A3 ; [.206E.0020.0002] # OSMANYA DIGIT THREE
+1085A ; [.206E.0020.0002] # IMPERIAL ARAMAIC NUMBER THREE
+1087B ; [.206E.0020.0002] # PALMYRENE NUMBER THREE
+108A9 ; [.206E.0020.0002] # NABATAEAN NUMBER THREE
+1091B ; [.206E.0020.0002] # PHOENICIAN NUMBER THREE
+109C2 ; [.206E.0020.0002] # MEROITIC CURSIVE NUMBER THREE
+10A42 ; [.206E.0020.0002] # KHAROSHTHI DIGIT THREE
+10B5A ; [.206E.0020.0002] # INSCRIPTIONAL PARTHIAN NUMBER THREE
+10B7A ; [.206E.0020.0002] # INSCRIPTIONAL PAHLAVI NUMBER THREE
+10BAB ; [.206E.0020.0002] # PSALTER PAHLAVI NUMBER THREE
+10D33 ; [.206E.0020.0002] # HANIFI ROHINGYA DIGIT THREE
+10E62 ; [.206E.0020.0002] # RUMI DIGIT THREE
+10F1F ; [.206E.0020.0002] # OLD SOGDIAN NUMBER THREE
+10FC7 ; [.206E.0020.0002] # CHORASMIAN NUMBER THREE
+11054 ; [.206E.0020.0002] # BRAHMI NUMBER THREE
+11069 ; [.206E.0020.0002] # BRAHMI DIGIT THREE
+110F3 ; [.206E.0020.0002] # SORA SOMPENG DIGIT THREE
+11139 ; [.206E.0020.0002] # CHAKMA DIGIT THREE
+111D3 ; [.206E.0020.0002] # SHARADA DIGIT THREE
+111E3 ; [.206E.0020.0002] # SINHALA ARCHAIC DIGIT THREE
+112F3 ; [.206E.0020.0002] # KHUDAWADI DIGIT THREE
+11453 ; [.206E.0020.0002] # NEWA DIGIT THREE
+114D3 ; [.206E.0020.0002] # TIRHUTA DIGIT THREE
+11653 ; [.206E.0020.0002] # MODI DIGIT THREE
+116C3 ; [.206E.0020.0002] # TAKRI DIGIT THREE
+11733 ; [.206E.0020.0002] # AHOM DIGIT THREE
+118E3 ; [.206E.0020.0002] # WARANG CITI DIGIT THREE
+11953 ; [.206E.0020.0002] # DIVES AKURU DIGIT THREE
+11C53 ; [.206E.0020.0002] # BHAIKSUKI DIGIT THREE
+11C5C ; [.206E.0020.0002] # BHAIKSUKI NUMBER THREE
+11D53 ; [.206E.0020.0002] # MASARAM GONDI DIGIT THREE
+11DA3 ; [.206E.0020.0002] # GUNJALA GONDI DIGIT THREE
+12401 ; [.206E.0020.0002] # CUNEIFORM NUMERIC SIGN THREE ASH
+12408 ; [.206E.0020.0002] # CUNEIFORM NUMERIC SIGN THREE DISH
+12417 ; [.206E.0020.0002] # CUNEIFORM NUMERIC SIGN THREE GESH2
+12420 ; [.206E.0020.0002] # CUNEIFORM NUMERIC SIGN THREE GESHU
+12424 ; [.206E.0020.0002] # CUNEIFORM NUMERIC SIGN THREE SHAR2
+12425 ; [.206E.0020.0002] # CUNEIFORM NUMERIC SIGN THREE SHAR2 VARIANT FORM
+1242E ; [.206E.0020.0002] # CUNEIFORM NUMERIC SIGN THREE SHARU
+1242F ; [.206E.0020.0002] # CUNEIFORM NUMERIC SIGN THREE SHARU VARIANT FORM
+12436 ; [.206E.0020.0002] # CUNEIFORM NUMERIC SIGN THREE BURU
+12437 ; [.206E.0020.0002] # CUNEIFORM NUMERIC SIGN THREE BURU VARIANT FORM
+1243A ; [.206E.0020.0002] # CUNEIFORM NUMERIC SIGN THREE VARIANT FORM ESH16
+1243B ; [.206E.0020.0002] # CUNEIFORM NUMERIC SIGN THREE VARIANT FORM ESH21
+1244B ; [.206E.0020.0002] # CUNEIFORM NUMERIC SIGN THREE ASH TENU
+12451 ; [.206E.0020.0002] # CUNEIFORM NUMERIC SIGN THREE BAN2
+12457 ; [.206E.0020.0002] # CUNEIFORM NUMERIC SIGN NIGIDAESH
+16A63 ; [.206E.0020.0002] # MRO DIGIT THREE
+16AC3 ; [.206E.0020.0002] # TANGSA DIGIT THREE
+16B53 ; [.206E.0020.0002] # PAHAWH HMONG DIGIT THREE
+16E83 ; [.206E.0020.0002] # MEDEFAIDRIN DIGIT THREE
+1D2E3 ; [.206E.0020.0002] # MAYAN NUMERAL THREE
+1D362 ; [.206E.0020.0002] # COUNTING ROD UNIT DIGIT THREE
+1D374 ; [.206E.0020.0002] # IDEOGRAPHIC TALLY MARK THREE
+1E143 ; [.206E.0020.0002] # NYIAKENG PUACHUE HMONG DIGIT THREE
+1E2F3 ; [.206E.0020.0002] # WANCHO DIGIT THREE
+1E8C9 ; [.206E.0020.0002] # MENDE KIKAKUI DIGIT THREE
+1E953 ; [.206E.0020.0002] # ADLAM DIGIT THREE
+1EC73 ; [.206E.0020.0002] # INDIC SIYAQ NUMBER THREE
+1ECA5 ; [.206E.0020.0002] # INDIC SIYAQ NUMBER PREFIXED THREE
+1ED03 ; [.206E.0020.0002] # OTTOMAN SIYAQ NUMBER THREE
+FF13 ; [.206E.0020.0003] # FULLWIDTH DIGIT THREE
+0F2C ; [.206E.0020.0004] # TIBETAN DIGIT HALF THREE
+2476 ; [*0334.0020.0004][.206E.0020.0004][*0335.0020.0004] # PARENTHESIZED DIGIT THREE
+248A ; [.206E.0020.0004][*0281.0020.0004] # DIGIT THREE FULL STOP
+1F104 ; [.206E.0020.0004][*0224.0020.0004] # DIGIT THREE COMMA
+1D7D1 ; [.206E.0020.0005] # MATHEMATICAL BOLD DIGIT THREE
+1D7DB ; [.206E.0020.0005] # MATHEMATICAL DOUBLE-STRUCK DIGIT THREE
+1D7E5 ; [.206E.0020.0005] # MATHEMATICAL SANS-SERIF DIGIT THREE
+1D7EF ; [.206E.0020.0005] # MATHEMATICAL SANS-SERIF BOLD DIGIT THREE
+1D7F9 ; [.206E.0020.0005] # MATHEMATICAL MONOSPACE DIGIT THREE
+1FBF3 ; [.206E.0020.0005] # SEGMENTED DIGIT THREE
+2462 ; [.206E.0020.0006] # CIRCLED DIGIT THREE
+24F7 ; [.206E.0020.0006] # DOUBLE CIRCLED DIGIT THREE
+2778 ; [.206E.0020.0006] # DINGBAT NEGATIVE CIRCLED DIGIT THREE
+2782 ; [.206E.0020.0006] # DINGBAT CIRCLED SANS-SERIF DIGIT THREE
+278C ; [.206E.0020.0006] # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE
+00B3 ; [.206E.0020.0014] # SUPERSCRIPT THREE
+2083 ; [.206E.0020.0015] # SUBSCRIPT THREE
+16E96 ; [.206E.0020.0002][.0000.0118.0002] # MEDEFAIDRIN DIGIT THREE ALTERNATE FORM
+1ED30 ; [.206E.0020.0004][.0000.0118.0004] # OTTOMAN SIYAQ ALTERNATE NUMBER THREE
+324A ; [.206E.0020.0006][.206B.0020.0006] # CIRCLED NUMBER THIRTY ON BLACK SQUARE
+325A ; [.206E.0020.0006][.206B.0020.0006] # CIRCLED NUMBER THIRTY
+33FD ; [.206E.0020.0004][.206B.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY
+325B ; [.206E.0020.0006][.206C.0020.0006] # CIRCLED NUMBER THIRTY ONE
+33FE ; [.206E.0020.0004][.206C.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE
+325C ; [.206E.0020.0006][.206D.0020.0006] # CIRCLED NUMBER THIRTY TWO
+325D ; [.206E.0020.0006][.206E.0020.0006] # CIRCLED NUMBER THIRTY THREE
+325E ; [.206E.0020.0006][.206F.0020.0006] # CIRCLED NUMBER THIRTY FOUR
+00BE ; [.206E.0020.001E][*06AD.0020.001E][.206F.0020.001E] # VULGAR FRACTION THREE QUARTERS
+325F ; [.206E.0020.0006][.2070.0020.0006] # CIRCLED NUMBER THIRTY FIVE
+2157 ; [.206E.0020.001E][*06AD.0020.001E][.2070.0020.001E] # VULGAR FRACTION THREE FIFTHS
+32B1 ; [.206E.0020.0006][.2071.0020.0006] # CIRCLED NUMBER THIRTY SIX
+32B2 ; [.206E.0020.0006][.2072.0020.0006] # CIRCLED NUMBER THIRTY SEVEN
+32B3 ; [.206E.0020.0006][.2073.0020.0006] # CIRCLED NUMBER THIRTY EIGHT
+215C ; [.206E.0020.001E][*06AD.0020.001E][.2073.0020.001E] # VULGAR FRACTION THREE EIGHTHS
+32B4 ; [.206E.0020.0006][.2074.0020.0006] # CIRCLED NUMBER THIRTY NINE
+1F19B ; [.206E.0020.001C][.20BF.0020.001D] # SQUARED THREE D
+33E2 ; [.206E.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE
+32C2 ; [.206E.0020.0004][.FB40.0020.0004][.E708.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH
+335B ; [.206E.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE
+0034 ; [.206F.0020.0002] # DIGIT FOUR
+0664 ; [.206F.0020.0002] # ARABIC-INDIC DIGIT FOUR
+06F4 ; [.206F.0020.0002] # EXTENDED ARABIC-INDIC DIGIT FOUR
+07C4 ; [.206F.0020.0002] # NKO DIGIT FOUR
+096A ; [.206F.0020.0002] # DEVANAGARI DIGIT FOUR
+09EA ; [.206F.0020.0002] # BENGALI DIGIT FOUR
+0A6A ; [.206F.0020.0002] # GURMUKHI DIGIT FOUR
+0AEA ; [.206F.0020.0002] # GUJARATI DIGIT FOUR
+0B6A ; [.206F.0020.0002] # ORIYA DIGIT FOUR
+0BEA ; [.206F.0020.0002] # TAMIL DIGIT FOUR
+0C6A ; [.206F.0020.0002] # TELUGU DIGIT FOUR
+0CEA ; [.206F.0020.0002] # KANNADA DIGIT FOUR
+0D6A ; [.206F.0020.0002] # MALAYALAM DIGIT FOUR
+0DEA ; [.206F.0020.0002] # SINHALA LITH DIGIT FOUR
+0E54 ; [.206F.0020.0002] # THAI DIGIT FOUR
+0ED4 ; [.206F.0020.0002] # LAO DIGIT FOUR
+0F24 ; [.206F.0020.0002] # TIBETAN DIGIT FOUR
+1044 ; [.206F.0020.0002] # MYANMAR DIGIT FOUR
+1094 ; [.206F.0020.0002] # MYANMAR SHAN DIGIT FOUR
+136C ; [.206F.0020.0002] # ETHIOPIC DIGIT FOUR
+17E4 ; [.206F.0020.0002] # KHMER DIGIT FOUR
+17F4 ; [.206F.0020.0002] # KHMER SYMBOL LEK ATTAK BUON
+1814 ; [.206F.0020.0002] # MONGOLIAN DIGIT FOUR
+194A ; [.206F.0020.0002] # LIMBU DIGIT FOUR
+19D4 ; [.206F.0020.0002] # NEW TAI LUE DIGIT FOUR
+1A84 ; [.206F.0020.0002] # TAI THAM HORA DIGIT FOUR
+1A94 ; [.206F.0020.0002] # TAI THAM THAM DIGIT FOUR
+1B54 ; [.206F.0020.0002] # BALINESE DIGIT FOUR
+1BB4 ; [.206F.0020.0002] # SUNDANESE DIGIT FOUR
+1C44 ; [.206F.0020.0002] # LEPCHA DIGIT FOUR
+1C54 ; [.206F.0020.0002] # OL CHIKI DIGIT FOUR
+3024 ; [.206F.0020.0002] # HANGZHOU NUMERAL FOUR
+A624 ; [.206F.0020.0002] # VAI DIGIT FOUR
+A8D4 ; [.206F.0020.0002] # SAURASHTRA DIGIT FOUR
+A904 ; [.206F.0020.0002] # KAYAH LI DIGIT FOUR
+A9D4 ; [.206F.0020.0002] # JAVANESE DIGIT FOUR
+A9F4 ; [.206F.0020.0002] # MYANMAR TAI LAING DIGIT FOUR
+AA54 ; [.206F.0020.0002] # CHAM DIGIT FOUR
+ABF4 ; [.206F.0020.0002] # MEETEI MAYEK DIGIT FOUR
+1010A ; [.206F.0020.0002] # AEGEAN NUMBER FOUR
+102E4 ; [.206F.0020.0002] # COPTIC EPACT DIGIT FOUR
+104A4 ; [.206F.0020.0002] # OSMANYA DIGIT FOUR
+1087C ; [.206F.0020.0002] # PALMYRENE NUMBER FOUR
+108AA ; [.206F.0020.0002] # NABATAEAN NUMBER FOUR
+108AB ; [.206F.0020.0002] # NABATAEAN CRUCIFORM NUMBER FOUR
+109C3 ; [.206F.0020.0002] # MEROITIC CURSIVE NUMBER FOUR
+10A43 ; [.206F.0020.0002] # KHAROSHTHI DIGIT FOUR
+10B5B ; [.206F.0020.0002] # INSCRIPTIONAL PARTHIAN NUMBER FOUR
+10B7B ; [.206F.0020.0002] # INSCRIPTIONAL PAHLAVI NUMBER FOUR
+10BAC ; [.206F.0020.0002] # PSALTER PAHLAVI NUMBER FOUR
+10D34 ; [.206F.0020.0002] # HANIFI ROHINGYA DIGIT FOUR
+10E63 ; [.206F.0020.0002] # RUMI DIGIT FOUR
+10F20 ; [.206F.0020.0002] # OLD SOGDIAN NUMBER FOUR
+10FC8 ; [.206F.0020.0002] # CHORASMIAN NUMBER FOUR
+11055 ; [.206F.0020.0002] # BRAHMI NUMBER FOUR
+1106A ; [.206F.0020.0002] # BRAHMI DIGIT FOUR
+110F4 ; [.206F.0020.0002] # SORA SOMPENG DIGIT FOUR
+1113A ; [.206F.0020.0002] # CHAKMA DIGIT FOUR
+111D4 ; [.206F.0020.0002] # SHARADA DIGIT FOUR
+111E4 ; [.206F.0020.0002] # SINHALA ARCHAIC DIGIT FOUR
+112F4 ; [.206F.0020.0002] # KHUDAWADI DIGIT FOUR
+11454 ; [.206F.0020.0002] # NEWA DIGIT FOUR
+114D4 ; [.206F.0020.0002] # TIRHUTA DIGIT FOUR
+11654 ; [.206F.0020.0002] # MODI DIGIT FOUR
+116C4 ; [.206F.0020.0002] # TAKRI DIGIT FOUR
+11734 ; [.206F.0020.0002] # AHOM DIGIT FOUR
+118E4 ; [.206F.0020.0002] # WARANG CITI DIGIT FOUR
+11954 ; [.206F.0020.0002] # DIVES AKURU DIGIT FOUR
+11C54 ; [.206F.0020.0002] # BHAIKSUKI DIGIT FOUR
+11C5D ; [.206F.0020.0002] # BHAIKSUKI NUMBER FOUR
+11D54 ; [.206F.0020.0002] # MASARAM GONDI DIGIT FOUR
+11DA4 ; [.206F.0020.0002] # GUNJALA GONDI DIGIT FOUR
+12402 ; [.206F.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR ASH
+12409 ; [.206F.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR DISH
+1240F ; [.206F.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR U
+12418 ; [.206F.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR GESH2
+12421 ; [.206F.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR GESHU
+12426 ; [.206F.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR SHAR2
+12430 ; [.206F.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR SHARU
+12438 ; [.206F.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR BURU
+1243C ; [.206F.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU
+1243D ; [.206F.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU4
+1243E ; [.206F.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU A
+1243F ; [.206F.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU B
+1244C ; [.206F.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR ASH TENU
+12452 ; [.206F.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR BAN2
+12453 ; [.206F.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR BAN2 VARIANT FORM
+12469 ; [.206F.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR U VARIANT FORM
+16A64 ; [.206F.0020.0002] # MRO DIGIT FOUR
+16AC4 ; [.206F.0020.0002] # TANGSA DIGIT FOUR
+16B54 ; [.206F.0020.0002] # PAHAWH HMONG DIGIT FOUR
+16E84 ; [.206F.0020.0002] # MEDEFAIDRIN DIGIT FOUR
+1D2E4 ; [.206F.0020.0002] # MAYAN NUMERAL FOUR
+1D363 ; [.206F.0020.0002] # COUNTING ROD UNIT DIGIT FOUR
+1D375 ; [.206F.0020.0002] # IDEOGRAPHIC TALLY MARK FOUR
+1E144 ; [.206F.0020.0002] # NYIAKENG PUACHUE HMONG DIGIT FOUR
+1E2F4 ; [.206F.0020.0002] # WANCHO DIGIT FOUR
+1E8CA ; [.206F.0020.0002] # MENDE KIKAKUI DIGIT FOUR
+1E954 ; [.206F.0020.0002] # ADLAM DIGIT FOUR
+1EC74 ; [.206F.0020.0002] # INDIC SIYAQ NUMBER FOUR
+1ECA6 ; [.206F.0020.0002] # INDIC SIYAQ NUMBER PREFIXED FOUR
+1ED04 ; [.206F.0020.0002] # OTTOMAN SIYAQ NUMBER FOUR
+FF14 ; [.206F.0020.0003] # FULLWIDTH DIGIT FOUR
+0F2D ; [.206F.0020.0004] # TIBETAN DIGIT HALF FOUR
+2477 ; [*0334.0020.0004][.206F.0020.0004][*0335.0020.0004] # PARENTHESIZED DIGIT FOUR
+248B ; [.206F.0020.0004][*0281.0020.0004] # DIGIT FOUR FULL STOP
+1F105 ; [.206F.0020.0004][*0224.0020.0004] # DIGIT FOUR COMMA
+1D7D2 ; [.206F.0020.0005] # MATHEMATICAL BOLD DIGIT FOUR
+1D7DC ; [.206F.0020.0005] # MATHEMATICAL DOUBLE-STRUCK DIGIT FOUR
+1D7E6 ; [.206F.0020.0005] # MATHEMATICAL SANS-SERIF DIGIT FOUR
+1D7F0 ; [.206F.0020.0005] # MATHEMATICAL SANS-SERIF BOLD DIGIT FOUR
+1D7FA ; [.206F.0020.0005] # MATHEMATICAL MONOSPACE DIGIT FOUR
+1FBF4 ; [.206F.0020.0005] # SEGMENTED DIGIT FOUR
+2463 ; [.206F.0020.0006] # CIRCLED DIGIT FOUR
+24F8 ; [.206F.0020.0006] # DOUBLE CIRCLED DIGIT FOUR
+2779 ; [.206F.0020.0006] # DINGBAT NEGATIVE CIRCLED DIGIT FOUR
+2783 ; [.206F.0020.0006] # DINGBAT CIRCLED SANS-SERIF DIGIT FOUR
+278D ; [.206F.0020.0006] # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR
+2074 ; [.206F.0020.0014] # SUPERSCRIPT FOUR
+2084 ; [.206F.0020.0015] # SUBSCRIPT FOUR
+1ED31 ; [.206F.0020.0004][.0000.0118.0004] # OTTOMAN SIYAQ ALTERNATE NUMBER FOUR
+324B ; [.206F.0020.0006][.206B.0020.0006] # CIRCLED NUMBER FORTY ON BLACK SQUARE
+32B5 ; [.206F.0020.0006][.206B.0020.0006] # CIRCLED NUMBER FORTY
+32B6 ; [.206F.0020.0006][.206C.0020.0006] # CIRCLED NUMBER FORTY ONE
+32B7 ; [.206F.0020.0006][.206D.0020.0006] # CIRCLED NUMBER FORTY TWO
+32B8 ; [.206F.0020.0006][.206E.0020.0006] # CIRCLED NUMBER FORTY THREE
+32B9 ; [.206F.0020.0006][.206F.0020.0006] # CIRCLED NUMBER FORTY FOUR
+32BA ; [.206F.0020.0006][.2070.0020.0006] # CIRCLED NUMBER FORTY FIVE
+2158 ; [.206F.0020.001E][*06AD.0020.001E][.2070.0020.001E] # VULGAR FRACTION FOUR FIFTHS
+32BB ; [.206F.0020.0006][.2071.0020.0006] # CIRCLED NUMBER FORTY SIX
+32BC ; [.206F.0020.0006][.2072.0020.0006] # CIRCLED NUMBER FORTY SEVEN
+32BD ; [.206F.0020.0006][.2073.0020.0006] # CIRCLED NUMBER FORTY EIGHT
+32BE ; [.206F.0020.0006][.2074.0020.0006] # CIRCLED NUMBER FORTY NINE
+1F19E ; [.206F.0020.001C][.219C.0020.001D] # SQUARED FOUR K
+33E3 ; [.206F.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR
+32C3 ; [.206F.0020.0004][.FB40.0020.0004][.E708.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL
+335C ; [.206F.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR
+0035 ; [.2070.0020.0002] # DIGIT FIVE
+0665 ; [.2070.0020.0002] # ARABIC-INDIC DIGIT FIVE
+06F5 ; [.2070.0020.0002] # EXTENDED ARABIC-INDIC DIGIT FIVE
+07C5 ; [.2070.0020.0002] # NKO DIGIT FIVE
+096B ; [.2070.0020.0002] # DEVANAGARI DIGIT FIVE
+09EB ; [.2070.0020.0002] # BENGALI DIGIT FIVE
+0A6B ; [.2070.0020.0002] # GURMUKHI DIGIT FIVE
+0AEB ; [.2070.0020.0002] # GUJARATI DIGIT FIVE
+0B6B ; [.2070.0020.0002] # ORIYA DIGIT FIVE
+0BEB ; [.2070.0020.0002] # TAMIL DIGIT FIVE
+0C6B ; [.2070.0020.0002] # TELUGU DIGIT FIVE
+0CEB ; [.2070.0020.0002] # KANNADA DIGIT FIVE
+0D6B ; [.2070.0020.0002] # MALAYALAM DIGIT FIVE
+0DEB ; [.2070.0020.0002] # SINHALA LITH DIGIT FIVE
+0E55 ; [.2070.0020.0002] # THAI DIGIT FIVE
+0ED5 ; [.2070.0020.0002] # LAO DIGIT FIVE
+0F25 ; [.2070.0020.0002] # TIBETAN DIGIT FIVE
+1045 ; [.2070.0020.0002] # MYANMAR DIGIT FIVE
+1095 ; [.2070.0020.0002] # MYANMAR SHAN DIGIT FIVE
+136D ; [.2070.0020.0002] # ETHIOPIC DIGIT FIVE
+17E5 ; [.2070.0020.0002] # KHMER DIGIT FIVE
+17F5 ; [.2070.0020.0002] # KHMER SYMBOL LEK ATTAK PRAM
+1815 ; [.2070.0020.0002] # MONGOLIAN DIGIT FIVE
+194B ; [.2070.0020.0002] # LIMBU DIGIT FIVE
+19D5 ; [.2070.0020.0002] # NEW TAI LUE DIGIT FIVE
+1A85 ; [.2070.0020.0002] # TAI THAM HORA DIGIT FIVE
+1A95 ; [.2070.0020.0002] # TAI THAM THAM DIGIT FIVE
+1B55 ; [.2070.0020.0002] # BALINESE DIGIT FIVE
+1BB5 ; [.2070.0020.0002] # SUNDANESE DIGIT FIVE
+1C45 ; [.2070.0020.0002] # LEPCHA DIGIT FIVE
+1C55 ; [.2070.0020.0002] # OL CHIKI DIGIT FIVE
+3025 ; [.2070.0020.0002] # HANGZHOU NUMERAL FIVE
+A625 ; [.2070.0020.0002] # VAI DIGIT FIVE
+A8D5 ; [.2070.0020.0002] # SAURASHTRA DIGIT FIVE
+A905 ; [.2070.0020.0002] # KAYAH LI DIGIT FIVE
+A9D5 ; [.2070.0020.0002] # JAVANESE DIGIT FIVE
+A9F5 ; [.2070.0020.0002] # MYANMAR TAI LAING DIGIT FIVE
+AA55 ; [.2070.0020.0002] # CHAM DIGIT FIVE
+ABF5 ; [.2070.0020.0002] # MEETEI MAYEK DIGIT FIVE
+1010B ; [.2070.0020.0002] # AEGEAN NUMBER FIVE
+10143 ; [.2070.0020.0002] # GREEK ACROPHONIC ATTIC FIVE
+10148 ; [.2070.0020.0002] # GREEK ACROPHONIC ATTIC FIVE TALENTS
+1014F ; [.2070.0020.0002] # GREEK ACROPHONIC ATTIC FIVE STATERS
+1015F ; [.2070.0020.0002] # GREEK ACROPHONIC TROEZENIAN FIVE
+10173 ; [.2070.0020.0002] # GREEK ACROPHONIC DELPHIC FIVE MNAS
+102E5 ; [.2070.0020.0002] # COPTIC EPACT DIGIT FIVE
+10321 ; [.2070.0020.0002] # OLD ITALIC NUMERAL FIVE
+104A5 ; [.2070.0020.0002] # OSMANYA DIGIT FIVE
+1087D ; [.2070.0020.0002] # PALMYRENE NUMBER FIVE
+108AC ; [.2070.0020.0002] # NABATAEAN NUMBER FIVE
+108FC ; [.2070.0020.0002] # HATRAN NUMBER FIVE
+109C4 ; [.2070.0020.0002] # MEROITIC CURSIVE NUMBER FIVE
+10AEC ; [.2070.0020.0002] # MANICHAEAN NUMBER FIVE
+10CFB ; [.2070.0020.0002] # OLD HUNGARIAN NUMBER FIVE
+10D35 ; [.2070.0020.0002] # HANIFI ROHINGYA DIGIT FIVE
+10E64 ; [.2070.0020.0002] # RUMI DIGIT FIVE
+10F21 ; [.2070.0020.0002] # OLD SOGDIAN NUMBER FIVE
+11056 ; [.2070.0020.0002] # BRAHMI NUMBER FIVE
+1106B ; [.2070.0020.0002] # BRAHMI DIGIT FIVE
+110F5 ; [.2070.0020.0002] # SORA SOMPENG DIGIT FIVE
+1113B ; [.2070.0020.0002] # CHAKMA DIGIT FIVE
+111D5 ; [.2070.0020.0002] # SHARADA DIGIT FIVE
+111E5 ; [.2070.0020.0002] # SINHALA ARCHAIC DIGIT FIVE
+112F5 ; [.2070.0020.0002] # KHUDAWADI DIGIT FIVE
+11455 ; [.2070.0020.0002] # NEWA DIGIT FIVE
+114D5 ; [.2070.0020.0002] # TIRHUTA DIGIT FIVE
+11655 ; [.2070.0020.0002] # MODI DIGIT FIVE
+116C5 ; [.2070.0020.0002] # TAKRI DIGIT FIVE
+11735 ; [.2070.0020.0002] # AHOM DIGIT FIVE
+118E5 ; [.2070.0020.0002] # WARANG CITI DIGIT FIVE
+11955 ; [.2070.0020.0002] # DIVES AKURU DIGIT FIVE
+11C55 ; [.2070.0020.0002] # BHAIKSUKI DIGIT FIVE
+11C5E ; [.2070.0020.0002] # BHAIKSUKI NUMBER FIVE
+11D55 ; [.2070.0020.0002] # MASARAM GONDI DIGIT FIVE
+11DA5 ; [.2070.0020.0002] # GUNJALA GONDI DIGIT FIVE
+12403 ; [.2070.0020.0002] # CUNEIFORM NUMERIC SIGN FIVE ASH
+1240A ; [.2070.0020.0002] # CUNEIFORM NUMERIC SIGN FIVE DISH
+12410 ; [.2070.0020.0002] # CUNEIFORM NUMERIC SIGN FIVE U
+12419 ; [.2070.0020.0002] # CUNEIFORM NUMERIC SIGN FIVE GESH2
+12422 ; [.2070.0020.0002] # CUNEIFORM NUMERIC SIGN FIVE GESHU
+12427 ; [.2070.0020.0002] # CUNEIFORM NUMERIC SIGN FIVE SHAR2
+12431 ; [.2070.0020.0002] # CUNEIFORM NUMERIC SIGN FIVE SHARU
+12439 ; [.2070.0020.0002] # CUNEIFORM NUMERIC SIGN FIVE BURU
+1244D ; [.2070.0020.0002] # CUNEIFORM NUMERIC SIGN FIVE ASH TENU
+12454 ; [.2070.0020.0002] # CUNEIFORM NUMERIC SIGN FIVE BAN2
+12455 ; [.2070.0020.0002] # CUNEIFORM NUMERIC SIGN FIVE BAN2 VARIANT FORM
+1246A ; [.2070.0020.0002] # CUNEIFORM NUMERIC SIGN FIVE U VARIANT FORM
+16A65 ; [.2070.0020.0002] # MRO DIGIT FIVE
+16AC5 ; [.2070.0020.0002] # TANGSA DIGIT FIVE
+16B55 ; [.2070.0020.0002] # PAHAWH HMONG DIGIT FIVE
+16E85 ; [.2070.0020.0002] # MEDEFAIDRIN DIGIT FIVE
+1D2E5 ; [.2070.0020.0002] # MAYAN NUMERAL FIVE
+1D364 ; [.2070.0020.0002] # COUNTING ROD UNIT DIGIT FIVE
+1D376 ; [.2070.0020.0002] # IDEOGRAPHIC TALLY MARK FIVE
+1D378 ; [.2070.0020.0002] # TALLY MARK FIVE
+1E145 ; [.2070.0020.0002] # NYIAKENG PUACHUE HMONG DIGIT FIVE
+1E2F5 ; [.2070.0020.0002] # WANCHO DIGIT FIVE
+1E8CB ; [.2070.0020.0002] # MENDE KIKAKUI DIGIT FIVE
+1E955 ; [.2070.0020.0002] # ADLAM DIGIT FIVE
+1EC75 ; [.2070.0020.0002] # INDIC SIYAQ NUMBER FIVE
+1ECA7 ; [.2070.0020.0002] # INDIC SIYAQ NUMBER PREFIXED FIVE
+1ED05 ; [.2070.0020.0002] # OTTOMAN SIYAQ NUMBER FIVE
+FF15 ; [.2070.0020.0003] # FULLWIDTH DIGIT FIVE
+0F2E ; [.2070.0020.0004] # TIBETAN DIGIT HALF FIVE
+2478 ; [*0334.0020.0004][.2070.0020.0004][*0335.0020.0004] # PARENTHESIZED DIGIT FIVE
+248C ; [.2070.0020.0004][*0281.0020.0004] # DIGIT FIVE FULL STOP
+1F106 ; [.2070.0020.0004][*0224.0020.0004] # DIGIT FIVE COMMA
+1D7D3 ; [.2070.0020.0005] # MATHEMATICAL BOLD DIGIT FIVE
+1D7DD ; [.2070.0020.0005] # MATHEMATICAL DOUBLE-STRUCK DIGIT FIVE
+1D7E7 ; [.2070.0020.0005] # MATHEMATICAL SANS-SERIF DIGIT FIVE
+1D7F1 ; [.2070.0020.0005] # MATHEMATICAL SANS-SERIF BOLD DIGIT FIVE
+1D7FB ; [.2070.0020.0005] # MATHEMATICAL MONOSPACE DIGIT FIVE
+1FBF5 ; [.2070.0020.0005] # SEGMENTED DIGIT FIVE
+2464 ; [.2070.0020.0006] # CIRCLED DIGIT FIVE
+24F9 ; [.2070.0020.0006] # DOUBLE CIRCLED DIGIT FIVE
+277A ; [.2070.0020.0006] # DINGBAT NEGATIVE CIRCLED DIGIT FIVE
+2784 ; [.2070.0020.0006] # DINGBAT CIRCLED SANS-SERIF DIGIT FIVE
+278E ; [.2070.0020.0006] # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE
+2075 ; [.2070.0020.0014] # SUPERSCRIPT FIVE
+2085 ; [.2070.0020.0015] # SUBSCRIPT FIVE
+1ED32 ; [.2070.0020.0004][.0000.0118.0004] # OTTOMAN SIYAQ ALTERNATE NUMBER FIVE
+324C ; [.2070.0020.0006][.206B.0020.0006] # CIRCLED NUMBER FIFTY ON BLACK SQUARE
+32BF ; [.2070.0020.0006][.206B.0020.0006] # CIRCLED NUMBER FIFTY
+1F1A0 ; [.2070.0020.001C][*0281.0020.001C][.206C.0020.001C] # SQUARED FIVE POINT ONE
+215A ; [.2070.0020.001E][*06AD.0020.001E][.2071.0020.001E] # VULGAR FRACTION FIVE SIXTHS
+215D ; [.2070.0020.001E][*06AD.0020.001E][.2073.0020.001E] # VULGAR FRACTION FIVE EIGHTHS
+33E4 ; [.2070.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE
+32C4 ; [.2070.0020.0004][.FB40.0020.0004][.E708.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY
+335D ; [.2070.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE
+0036 ; [.2071.0020.0002] # DIGIT SIX
+0666 ; [.2071.0020.0002] # ARABIC-INDIC DIGIT SIX
+06F6 ; [.2071.0020.0002] # EXTENDED ARABIC-INDIC DIGIT SIX
+07C6 ; [.2071.0020.0002] # NKO DIGIT SIX
+096C ; [.2071.0020.0002] # DEVANAGARI DIGIT SIX
+09EC ; [.2071.0020.0002] # BENGALI DIGIT SIX
+0A6C ; [.2071.0020.0002] # GURMUKHI DIGIT SIX
+0AEC ; [.2071.0020.0002] # GUJARATI DIGIT SIX
+0B6C ; [.2071.0020.0002] # ORIYA DIGIT SIX
+0BEC ; [.2071.0020.0002] # TAMIL DIGIT SIX
+0C6C ; [.2071.0020.0002] # TELUGU DIGIT SIX
+0CEC ; [.2071.0020.0002] # KANNADA DIGIT SIX
+0D6C ; [.2071.0020.0002] # MALAYALAM DIGIT SIX
+0DEC ; [.2071.0020.0002] # SINHALA LITH DIGIT SIX
+0E56 ; [.2071.0020.0002] # THAI DIGIT SIX
+0ED6 ; [.2071.0020.0002] # LAO DIGIT SIX
+0F26 ; [.2071.0020.0002] # TIBETAN DIGIT SIX
+1046 ; [.2071.0020.0002] # MYANMAR DIGIT SIX
+1096 ; [.2071.0020.0002] # MYANMAR SHAN DIGIT SIX
+136E ; [.2071.0020.0002] # ETHIOPIC DIGIT SIX
+17E6 ; [.2071.0020.0002] # KHMER DIGIT SIX
+17F6 ; [.2071.0020.0002] # KHMER SYMBOL LEK ATTAK PRAM-MUOY
+1816 ; [.2071.0020.0002] # MONGOLIAN DIGIT SIX
+194C ; [.2071.0020.0002] # LIMBU DIGIT SIX
+19D6 ; [.2071.0020.0002] # NEW TAI LUE DIGIT SIX
+1A86 ; [.2071.0020.0002] # TAI THAM HORA DIGIT SIX
+1A96 ; [.2071.0020.0002] # TAI THAM THAM DIGIT SIX
+1B56 ; [.2071.0020.0002] # BALINESE DIGIT SIX
+1BB6 ; [.2071.0020.0002] # SUNDANESE DIGIT SIX
+1C46 ; [.2071.0020.0002] # LEPCHA DIGIT SIX
+1C56 ; [.2071.0020.0002] # OL CHIKI DIGIT SIX
+2185 ; [.2071.0020.0002] # ROMAN NUMERAL SIX LATE FORM
+3026 ; [.2071.0020.0002] # HANGZHOU NUMERAL SIX
+A626 ; [.2071.0020.0002] # VAI DIGIT SIX
+A8D6 ; [.2071.0020.0002] # SAURASHTRA DIGIT SIX
+A906 ; [.2071.0020.0002] # KAYAH LI DIGIT SIX
+A9D6 ; [.2071.0020.0002] # JAVANESE DIGIT SIX
+A9F6 ; [.2071.0020.0002] # MYANMAR TAI LAING DIGIT SIX
+AA56 ; [.2071.0020.0002] # CHAM DIGIT SIX
+ABF6 ; [.2071.0020.0002] # MEETEI MAYEK DIGIT SIX
+1010C ; [.2071.0020.0002] # AEGEAN NUMBER SIX
+102E6 ; [.2071.0020.0002] # COPTIC EPACT DIGIT SIX
+104A6 ; [.2071.0020.0002] # OSMANYA DIGIT SIX
+109C5 ; [.2071.0020.0002] # MEROITIC CURSIVE NUMBER SIX
+10D36 ; [.2071.0020.0002] # HANIFI ROHINGYA DIGIT SIX
+10E65 ; [.2071.0020.0002] # RUMI DIGIT SIX
+11057 ; [.2071.0020.0002] # BRAHMI NUMBER SIX
+1106C ; [.2071.0020.0002] # BRAHMI DIGIT SIX
+110F6 ; [.2071.0020.0002] # SORA SOMPENG DIGIT SIX
+1113C ; [.2071.0020.0002] # CHAKMA DIGIT SIX
+111D6 ; [.2071.0020.0002] # SHARADA DIGIT SIX
+111E6 ; [.2071.0020.0002] # SINHALA ARCHAIC DIGIT SIX
+112F6 ; [.2071.0020.0002] # KHUDAWADI DIGIT SIX
+11456 ; [.2071.0020.0002] # NEWA DIGIT SIX
+114D6 ; [.2071.0020.0002] # TIRHUTA DIGIT SIX
+11656 ; [.2071.0020.0002] # MODI DIGIT SIX
+116C6 ; [.2071.0020.0002] # TAKRI DIGIT SIX
+11736 ; [.2071.0020.0002] # AHOM DIGIT SIX
+118E6 ; [.2071.0020.0002] # WARANG CITI DIGIT SIX
+11956 ; [.2071.0020.0002] # DIVES AKURU DIGIT SIX
+11C56 ; [.2071.0020.0002] # BHAIKSUKI DIGIT SIX
+11C5F ; [.2071.0020.0002] # BHAIKSUKI NUMBER SIX
+11D56 ; [.2071.0020.0002] # MASARAM GONDI DIGIT SIX
+11DA6 ; [.2071.0020.0002] # GUNJALA GONDI DIGIT SIX
+12404 ; [.2071.0020.0002] # CUNEIFORM NUMERIC SIGN SIX ASH
+1240B ; [.2071.0020.0002] # CUNEIFORM NUMERIC SIGN SIX DISH
+12411 ; [.2071.0020.0002] # CUNEIFORM NUMERIC SIGN SIX U
+1241A ; [.2071.0020.0002] # CUNEIFORM NUMERIC SIGN SIX GESH2
+12428 ; [.2071.0020.0002] # CUNEIFORM NUMERIC SIGN SIX SHAR2
+12440 ; [.2071.0020.0002] # CUNEIFORM NUMERIC SIGN SIX VARIANT FORM ASH9
+1244E ; [.2071.0020.0002] # CUNEIFORM NUMERIC SIGN SIX ASH TENU
+1246B ; [.2071.0020.0002] # CUNEIFORM NUMERIC SIGN SIX U VARIANT FORM
+16A66 ; [.2071.0020.0002] # MRO DIGIT SIX
+16AC6 ; [.2071.0020.0002] # TANGSA DIGIT SIX
+16B56 ; [.2071.0020.0002] # PAHAWH HMONG DIGIT SIX
+16E86 ; [.2071.0020.0002] # MEDEFAIDRIN DIGIT SIX
+1D2E6 ; [.2071.0020.0002] # MAYAN NUMERAL SIX
+1D365 ; [.2071.0020.0002] # COUNTING ROD UNIT DIGIT SIX
+1E146 ; [.2071.0020.0002] # NYIAKENG PUACHUE HMONG DIGIT SIX
+1E2F6 ; [.2071.0020.0002] # WANCHO DIGIT SIX
+1E8CC ; [.2071.0020.0002] # MENDE KIKAKUI DIGIT SIX
+1E956 ; [.2071.0020.0002] # ADLAM DIGIT SIX
+1EC76 ; [.2071.0020.0002] # INDIC SIYAQ NUMBER SIX
+1ECA8 ; [.2071.0020.0002] # INDIC SIYAQ NUMBER PREFIXED SIX
+1ED06 ; [.2071.0020.0002] # OTTOMAN SIYAQ NUMBER SIX
+FF16 ; [.2071.0020.0003] # FULLWIDTH DIGIT SIX
+0F2F ; [.2071.0020.0004] # TIBETAN DIGIT HALF SIX
+2479 ; [*0334.0020.0004][.2071.0020.0004][*0335.0020.0004] # PARENTHESIZED DIGIT SIX
+248D ; [.2071.0020.0004][*0281.0020.0004] # DIGIT SIX FULL STOP
+1F107 ; [.2071.0020.0004][*0224.0020.0004] # DIGIT SIX COMMA
+1D7D4 ; [.2071.0020.0005] # MATHEMATICAL BOLD DIGIT SIX
+1D7DE ; [.2071.0020.0005] # MATHEMATICAL DOUBLE-STRUCK DIGIT SIX
+1D7E8 ; [.2071.0020.0005] # MATHEMATICAL SANS-SERIF DIGIT SIX
+1D7F2 ; [.2071.0020.0005] # MATHEMATICAL SANS-SERIF BOLD DIGIT SIX
+1D7FC ; [.2071.0020.0005] # MATHEMATICAL MONOSPACE DIGIT SIX
+1FBF6 ; [.2071.0020.0005] # SEGMENTED DIGIT SIX
+2465 ; [.2071.0020.0006] # CIRCLED DIGIT SIX
+24FA ; [.2071.0020.0006] # DOUBLE CIRCLED DIGIT SIX
+277B ; [.2071.0020.0006] # DINGBAT NEGATIVE CIRCLED DIGIT SIX
+2785 ; [.2071.0020.0006] # DINGBAT CIRCLED SANS-SERIF DIGIT SIX
+278F ; [.2071.0020.0006] # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX
+2076 ; [.2071.0020.0014] # SUPERSCRIPT SIX
+2086 ; [.2071.0020.0015] # SUBSCRIPT SIX
+1ED33 ; [.2071.0020.0004][.0000.0118.0004] # OTTOMAN SIYAQ ALTERNATE NUMBER SIX
+324D ; [.2071.0020.0006][.206B.0020.0006] # CIRCLED NUMBER SIXTY ON BLACK SQUARE
+1F1A3 ; [.2071.0020.001C][.206B.0020.001C][.224D.0020.001D] # SQUARED SIXTY P
+33E5 ; [.2071.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX
+32C5 ; [.2071.0020.0004][.FB40.0020.0004][.E708.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE
+335E ; [.2071.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX
+0037 ; [.2072.0020.0002] # DIGIT SEVEN
+0667 ; [.2072.0020.0002] # ARABIC-INDIC DIGIT SEVEN
+06F7 ; [.2072.0020.0002] # EXTENDED ARABIC-INDIC DIGIT SEVEN
+07C7 ; [.2072.0020.0002] # NKO DIGIT SEVEN
+096D ; [.2072.0020.0002] # DEVANAGARI DIGIT SEVEN
+09ED ; [.2072.0020.0002] # BENGALI DIGIT SEVEN
+0A6D ; [.2072.0020.0002] # GURMUKHI DIGIT SEVEN
+0AED ; [.2072.0020.0002] # GUJARATI DIGIT SEVEN
+0B6D ; [.2072.0020.0002] # ORIYA DIGIT SEVEN
+0BED ; [.2072.0020.0002] # TAMIL DIGIT SEVEN
+0C6D ; [.2072.0020.0002] # TELUGU DIGIT SEVEN
+0CED ; [.2072.0020.0002] # KANNADA DIGIT SEVEN
+0D6D ; [.2072.0020.0002] # MALAYALAM DIGIT SEVEN
+0DED ; [.2072.0020.0002] # SINHALA LITH DIGIT SEVEN
+0E57 ; [.2072.0020.0002] # THAI DIGIT SEVEN
+0ED7 ; [.2072.0020.0002] # LAO DIGIT SEVEN
+0F27 ; [.2072.0020.0002] # TIBETAN DIGIT SEVEN
+1047 ; [.2072.0020.0002] # MYANMAR DIGIT SEVEN
+1097 ; [.2072.0020.0002] # MYANMAR SHAN DIGIT SEVEN
+136F ; [.2072.0020.0002] # ETHIOPIC DIGIT SEVEN
+17E7 ; [.2072.0020.0002] # KHMER DIGIT SEVEN
+17F7 ; [.2072.0020.0002] # KHMER SYMBOL LEK ATTAK PRAM-PII
+1817 ; [.2072.0020.0002] # MONGOLIAN DIGIT SEVEN
+194D ; [.2072.0020.0002] # LIMBU DIGIT SEVEN
+19D7 ; [.2072.0020.0002] # NEW TAI LUE DIGIT SEVEN
+1A87 ; [.2072.0020.0002] # TAI THAM HORA DIGIT SEVEN
+1A97 ; [.2072.0020.0002] # TAI THAM THAM DIGIT SEVEN
+1B57 ; [.2072.0020.0002] # BALINESE DIGIT SEVEN
+1BB7 ; [.2072.0020.0002] # SUNDANESE DIGIT SEVEN
+1C47 ; [.2072.0020.0002] # LEPCHA DIGIT SEVEN
+1C57 ; [.2072.0020.0002] # OL CHIKI DIGIT SEVEN
+3027 ; [.2072.0020.0002] # HANGZHOU NUMERAL SEVEN
+A627 ; [.2072.0020.0002] # VAI DIGIT SEVEN
+A8D7 ; [.2072.0020.0002] # SAURASHTRA DIGIT SEVEN
+A907 ; [.2072.0020.0002] # KAYAH LI DIGIT SEVEN
+A9D7 ; [.2072.0020.0002] # JAVANESE DIGIT SEVEN
+A9F7 ; [.2072.0020.0002] # MYANMAR TAI LAING DIGIT SEVEN
+AA57 ; [.2072.0020.0002] # CHAM DIGIT SEVEN
+ABF7 ; [.2072.0020.0002] # MEETEI MAYEK DIGIT SEVEN
+1010D ; [.2072.0020.0002] # AEGEAN NUMBER SEVEN
+102E7 ; [.2072.0020.0002] # COPTIC EPACT DIGIT SEVEN
+104A7 ; [.2072.0020.0002] # OSMANYA DIGIT SEVEN
+109C6 ; [.2072.0020.0002] # MEROITIC CURSIVE NUMBER SEVEN
+10D37 ; [.2072.0020.0002] # HANIFI ROHINGYA DIGIT SEVEN
+10E66 ; [.2072.0020.0002] # RUMI DIGIT SEVEN
+11058 ; [.2072.0020.0002] # BRAHMI NUMBER SEVEN
+1106D ; [.2072.0020.0002] # BRAHMI DIGIT SEVEN
+110F7 ; [.2072.0020.0002] # SORA SOMPENG DIGIT SEVEN
+1113D ; [.2072.0020.0002] # CHAKMA DIGIT SEVEN
+111D7 ; [.2072.0020.0002] # SHARADA DIGIT SEVEN
+111E7 ; [.2072.0020.0002] # SINHALA ARCHAIC DIGIT SEVEN
+112F7 ; [.2072.0020.0002] # KHUDAWADI DIGIT SEVEN
+11457 ; [.2072.0020.0002] # NEWA DIGIT SEVEN
+114D7 ; [.2072.0020.0002] # TIRHUTA DIGIT SEVEN
+11657 ; [.2072.0020.0002] # MODI DIGIT SEVEN
+116C7 ; [.2072.0020.0002] # TAKRI DIGIT SEVEN
+11737 ; [.2072.0020.0002] # AHOM DIGIT SEVEN
+118E7 ; [.2072.0020.0002] # WARANG CITI DIGIT SEVEN
+11957 ; [.2072.0020.0002] # DIVES AKURU DIGIT SEVEN
+11C57 ; [.2072.0020.0002] # BHAIKSUKI DIGIT SEVEN
+11C60 ; [.2072.0020.0002] # BHAIKSUKI NUMBER SEVEN
+11D57 ; [.2072.0020.0002] # MASARAM GONDI DIGIT SEVEN
+11DA7 ; [.2072.0020.0002] # GUNJALA GONDI DIGIT SEVEN
+12405 ; [.2072.0020.0002] # CUNEIFORM NUMERIC SIGN SEVEN ASH
+1240C ; [.2072.0020.0002] # CUNEIFORM NUMERIC SIGN SEVEN DISH
+12412 ; [.2072.0020.0002] # CUNEIFORM NUMERIC SIGN SEVEN U
+1241B ; [.2072.0020.0002] # CUNEIFORM NUMERIC SIGN SEVEN GESH2
+12429 ; [.2072.0020.0002] # CUNEIFORM NUMERIC SIGN SEVEN SHAR2
+12441 ; [.2072.0020.0002] # CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN3
+12442 ; [.2072.0020.0002] # CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN A
+12443 ; [.2072.0020.0002] # CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN B
+1246C ; [.2072.0020.0002] # CUNEIFORM NUMERIC SIGN SEVEN U VARIANT FORM
+16A67 ; [.2072.0020.0002] # MRO DIGIT SEVEN
+16AC7 ; [.2072.0020.0002] # TANGSA DIGIT SEVEN
+16B57 ; [.2072.0020.0002] # PAHAWH HMONG DIGIT SEVEN
+16E87 ; [.2072.0020.0002] # MEDEFAIDRIN DIGIT SEVEN
+1D2E7 ; [.2072.0020.0002] # MAYAN NUMERAL SEVEN
+1D366 ; [.2072.0020.0002] # COUNTING ROD UNIT DIGIT SEVEN
+1E147 ; [.2072.0020.0002] # NYIAKENG PUACHUE HMONG DIGIT SEVEN
+1E2F7 ; [.2072.0020.0002] # WANCHO DIGIT SEVEN
+1E8CD ; [.2072.0020.0002] # MENDE KIKAKUI DIGIT SEVEN
+1E957 ; [.2072.0020.0002] # ADLAM DIGIT SEVEN
+1EC77 ; [.2072.0020.0002] # INDIC SIYAQ NUMBER SEVEN
+1ECA9 ; [.2072.0020.0002] # INDIC SIYAQ NUMBER PREFIXED SEVEN
+1ED07 ; [.2072.0020.0002] # OTTOMAN SIYAQ NUMBER SEVEN
+FF17 ; [.2072.0020.0003] # FULLWIDTH DIGIT SEVEN
+0F30 ; [.2072.0020.0004] # TIBETAN DIGIT HALF SEVEN
+247A ; [*0334.0020.0004][.2072.0020.0004][*0335.0020.0004] # PARENTHESIZED DIGIT SEVEN
+248E ; [.2072.0020.0004][*0281.0020.0004] # DIGIT SEVEN FULL STOP
+1F108 ; [.2072.0020.0004][*0224.0020.0004] # DIGIT SEVEN COMMA
+1D7D5 ; [.2072.0020.0005] # MATHEMATICAL BOLD DIGIT SEVEN
+1D7DF ; [.2072.0020.0005] # MATHEMATICAL DOUBLE-STRUCK DIGIT SEVEN
+1D7E9 ; [.2072.0020.0005] # MATHEMATICAL SANS-SERIF DIGIT SEVEN
+1D7F3 ; [.2072.0020.0005] # MATHEMATICAL SANS-SERIF BOLD DIGIT SEVEN
+1D7FD ; [.2072.0020.0005] # MATHEMATICAL MONOSPACE DIGIT SEVEN
+1FBF7 ; [.2072.0020.0005] # SEGMENTED DIGIT SEVEN
+2466 ; [.2072.0020.0006] # CIRCLED DIGIT SEVEN
+24FB ; [.2072.0020.0006] # DOUBLE CIRCLED DIGIT SEVEN
+277C ; [.2072.0020.0006] # DINGBAT NEGATIVE CIRCLED DIGIT SEVEN
+2786 ; [.2072.0020.0006] # DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN
+2790 ; [.2072.0020.0006] # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN
+2077 ; [.2072.0020.0014] # SUPERSCRIPT SEVEN
+2087 ; [.2072.0020.0015] # SUBSCRIPT SEVEN
+1ED34 ; [.2072.0020.0004][.0000.0118.0004] # OTTOMAN SIYAQ ALTERNATE NUMBER SEVEN
+324E ; [.2072.0020.0006][.206B.0020.0006] # CIRCLED NUMBER SEVENTY ON BLACK SQUARE
+1F1A1 ; [.2072.0020.001C][*0281.0020.001C][.206C.0020.001C] # SQUARED SEVEN POINT ONE
+215E ; [.2072.0020.001E][*06AD.0020.001E][.2073.0020.001E] # VULGAR FRACTION SEVEN EIGHTHS
+33E6 ; [.2072.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN
+32C6 ; [.2072.0020.0004][.FB40.0020.0004][.E708.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY
+335F ; [.2072.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN
+0038 ; [.2073.0020.0002] # DIGIT EIGHT
+0668 ; [.2073.0020.0002] # ARABIC-INDIC DIGIT EIGHT
+06F8 ; [.2073.0020.0002] # EXTENDED ARABIC-INDIC DIGIT EIGHT
+07C8 ; [.2073.0020.0002] # NKO DIGIT EIGHT
+096E ; [.2073.0020.0002] # DEVANAGARI DIGIT EIGHT
+09EE ; [.2073.0020.0002] # BENGALI DIGIT EIGHT
+0A6E ; [.2073.0020.0002] # GURMUKHI DIGIT EIGHT
+0AEE ; [.2073.0020.0002] # GUJARATI DIGIT EIGHT
+0B6E ; [.2073.0020.0002] # ORIYA DIGIT EIGHT
+0BEE ; [.2073.0020.0002] # TAMIL DIGIT EIGHT
+0C6E ; [.2073.0020.0002] # TELUGU DIGIT EIGHT
+0CEE ; [.2073.0020.0002] # KANNADA DIGIT EIGHT
+0D6E ; [.2073.0020.0002] # MALAYALAM DIGIT EIGHT
+0DEE ; [.2073.0020.0002] # SINHALA LITH DIGIT EIGHT
+0E58 ; [.2073.0020.0002] # THAI DIGIT EIGHT
+0ED8 ; [.2073.0020.0002] # LAO DIGIT EIGHT
+0F28 ; [.2073.0020.0002] # TIBETAN DIGIT EIGHT
+1048 ; [.2073.0020.0002] # MYANMAR DIGIT EIGHT
+1098 ; [.2073.0020.0002] # MYANMAR SHAN DIGIT EIGHT
+1370 ; [.2073.0020.0002] # ETHIOPIC DIGIT EIGHT
+17E8 ; [.2073.0020.0002] # KHMER DIGIT EIGHT
+17F8 ; [.2073.0020.0002] # KHMER SYMBOL LEK ATTAK PRAM-BEI
+1818 ; [.2073.0020.0002] # MONGOLIAN DIGIT EIGHT
+194E ; [.2073.0020.0002] # LIMBU DIGIT EIGHT
+19D8 ; [.2073.0020.0002] # NEW TAI LUE DIGIT EIGHT
+1A88 ; [.2073.0020.0002] # TAI THAM HORA DIGIT EIGHT
+1A98 ; [.2073.0020.0002] # TAI THAM THAM DIGIT EIGHT
+1B58 ; [.2073.0020.0002] # BALINESE DIGIT EIGHT
+1BB8 ; [.2073.0020.0002] # SUNDANESE DIGIT EIGHT
+1C48 ; [.2073.0020.0002] # LEPCHA DIGIT EIGHT
+1C58 ; [.2073.0020.0002] # OL CHIKI DIGIT EIGHT
+3028 ; [.2073.0020.0002] # HANGZHOU NUMERAL EIGHT
+A628 ; [.2073.0020.0002] # VAI DIGIT EIGHT
+A8D8 ; [.2073.0020.0002] # SAURASHTRA DIGIT EIGHT
+A908 ; [.2073.0020.0002] # KAYAH LI DIGIT EIGHT
+A9D8 ; [.2073.0020.0002] # JAVANESE DIGIT EIGHT
+A9F8 ; [.2073.0020.0002] # MYANMAR TAI LAING DIGIT EIGHT
+AA58 ; [.2073.0020.0002] # CHAM DIGIT EIGHT
+ABF8 ; [.2073.0020.0002] # MEETEI MAYEK DIGIT EIGHT
+1010E ; [.2073.0020.0002] # AEGEAN NUMBER EIGHT
+102E8 ; [.2073.0020.0002] # COPTIC EPACT DIGIT EIGHT
+104A8 ; [.2073.0020.0002] # OSMANYA DIGIT EIGHT
+109C7 ; [.2073.0020.0002] # MEROITIC CURSIVE NUMBER EIGHT
+10D38 ; [.2073.0020.0002] # HANIFI ROHINGYA DIGIT EIGHT
+10E67 ; [.2073.0020.0002] # RUMI DIGIT EIGHT
+11059 ; [.2073.0020.0002] # BRAHMI NUMBER EIGHT
+1106E ; [.2073.0020.0002] # BRAHMI DIGIT EIGHT
+110F8 ; [.2073.0020.0002] # SORA SOMPENG DIGIT EIGHT
+1113E ; [.2073.0020.0002] # CHAKMA DIGIT EIGHT
+111D8 ; [.2073.0020.0002] # SHARADA DIGIT EIGHT
+111E8 ; [.2073.0020.0002] # SINHALA ARCHAIC DIGIT EIGHT
+112F8 ; [.2073.0020.0002] # KHUDAWADI DIGIT EIGHT
+11458 ; [.2073.0020.0002] # NEWA DIGIT EIGHT
+114D8 ; [.2073.0020.0002] # TIRHUTA DIGIT EIGHT
+11658 ; [.2073.0020.0002] # MODI DIGIT EIGHT
+116C8 ; [.2073.0020.0002] # TAKRI DIGIT EIGHT
+11738 ; [.2073.0020.0002] # AHOM DIGIT EIGHT
+118E8 ; [.2073.0020.0002] # WARANG CITI DIGIT EIGHT
+11958 ; [.2073.0020.0002] # DIVES AKURU DIGIT EIGHT
+11C58 ; [.2073.0020.0002] # BHAIKSUKI DIGIT EIGHT
+11C61 ; [.2073.0020.0002] # BHAIKSUKI NUMBER EIGHT
+11D58 ; [.2073.0020.0002] # MASARAM GONDI DIGIT EIGHT
+11DA8 ; [.2073.0020.0002] # GUNJALA GONDI DIGIT EIGHT
+12406 ; [.2073.0020.0002] # CUNEIFORM NUMERIC SIGN EIGHT ASH
+1240D ; [.2073.0020.0002] # CUNEIFORM NUMERIC SIGN EIGHT DISH
+12413 ; [.2073.0020.0002] # CUNEIFORM NUMERIC SIGN EIGHT U
+1241C ; [.2073.0020.0002] # CUNEIFORM NUMERIC SIGN EIGHT GESH2
+1242A ; [.2073.0020.0002] # CUNEIFORM NUMERIC SIGN EIGHT SHAR2
+12444 ; [.2073.0020.0002] # CUNEIFORM NUMERIC SIGN EIGHT VARIANT FORM USSU
+12445 ; [.2073.0020.0002] # CUNEIFORM NUMERIC SIGN EIGHT VARIANT FORM USSU3
+1246D ; [.2073.0020.0002] # CUNEIFORM NUMERIC SIGN EIGHT U VARIANT FORM
+16A68 ; [.2073.0020.0002] # MRO DIGIT EIGHT
+16AC8 ; [.2073.0020.0002] # TANGSA DIGIT EIGHT
+16B58 ; [.2073.0020.0002] # PAHAWH HMONG DIGIT EIGHT
+16E88 ; [.2073.0020.0002] # MEDEFAIDRIN DIGIT EIGHT
+1D2E8 ; [.2073.0020.0002] # MAYAN NUMERAL EIGHT
+1D367 ; [.2073.0020.0002] # COUNTING ROD UNIT DIGIT EIGHT
+1E148 ; [.2073.0020.0002] # NYIAKENG PUACHUE HMONG DIGIT EIGHT
+1E2F8 ; [.2073.0020.0002] # WANCHO DIGIT EIGHT
+1E8CE ; [.2073.0020.0002] # MENDE KIKAKUI DIGIT EIGHT
+1E958 ; [.2073.0020.0002] # ADLAM DIGIT EIGHT
+1EC78 ; [.2073.0020.0002] # INDIC SIYAQ NUMBER EIGHT
+1ECAA ; [.2073.0020.0002] # INDIC SIYAQ NUMBER PREFIXED EIGHT
+1ED08 ; [.2073.0020.0002] # OTTOMAN SIYAQ NUMBER EIGHT
+FF18 ; [.2073.0020.0003] # FULLWIDTH DIGIT EIGHT
+0F31 ; [.2073.0020.0004] # TIBETAN DIGIT HALF EIGHT
+247B ; [*0334.0020.0004][.2073.0020.0004][*0335.0020.0004] # PARENTHESIZED DIGIT EIGHT
+248F ; [.2073.0020.0004][*0281.0020.0004] # DIGIT EIGHT FULL STOP
+1F109 ; [.2073.0020.0004][*0224.0020.0004] # DIGIT EIGHT COMMA
+1D7D6 ; [.2073.0020.0005] # MATHEMATICAL BOLD DIGIT EIGHT
+1D7E0 ; [.2073.0020.0005] # MATHEMATICAL DOUBLE-STRUCK DIGIT EIGHT
+1D7EA ; [.2073.0020.0005] # MATHEMATICAL SANS-SERIF DIGIT EIGHT
+1D7F4 ; [.2073.0020.0005] # MATHEMATICAL SANS-SERIF BOLD DIGIT EIGHT
+1D7FE ; [.2073.0020.0005] # MATHEMATICAL MONOSPACE DIGIT EIGHT
+1FBF8 ; [.2073.0020.0005] # SEGMENTED DIGIT EIGHT
+2467 ; [.2073.0020.0006] # CIRCLED DIGIT EIGHT
+24FC ; [.2073.0020.0006] # DOUBLE CIRCLED DIGIT EIGHT
+277D ; [.2073.0020.0006] # DINGBAT NEGATIVE CIRCLED DIGIT EIGHT
+2787 ; [.2073.0020.0006] # DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT
+2791 ; [.2073.0020.0006] # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT
+2078 ; [.2073.0020.0014] # SUPERSCRIPT EIGHT
+2088 ; [.2073.0020.0015] # SUBSCRIPT EIGHT
+1ED35 ; [.2073.0020.0004][.0000.0118.0004] # OTTOMAN SIYAQ ALTERNATE NUMBER EIGHT
+324F ; [.2073.0020.0006][.206B.0020.0006] # CIRCLED NUMBER EIGHTY ON BLACK SQUARE
+1F19F ; [.2073.0020.001C][.219C.0020.001D] # SQUARED EIGHT K
+33E7 ; [.2073.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT
+32C7 ; [.2073.0020.0004][.FB40.0020.0004][.E708.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST
+3360 ; [.2073.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT
+0039 ; [.2074.0020.0002] # DIGIT NINE
+0669 ; [.2074.0020.0002] # ARABIC-INDIC DIGIT NINE
+06F9 ; [.2074.0020.0002] # EXTENDED ARABIC-INDIC DIGIT NINE
+07C9 ; [.2074.0020.0002] # NKO DIGIT NINE
+096F ; [.2074.0020.0002] # DEVANAGARI DIGIT NINE
+09EF ; [.2074.0020.0002] # BENGALI DIGIT NINE
+0A6F ; [.2074.0020.0002] # GURMUKHI DIGIT NINE
+0AEF ; [.2074.0020.0002] # GUJARATI DIGIT NINE
+0B6F ; [.2074.0020.0002] # ORIYA DIGIT NINE
+0BEF ; [.2074.0020.0002] # TAMIL DIGIT NINE
+0C6F ; [.2074.0020.0002] # TELUGU DIGIT NINE
+0CEF ; [.2074.0020.0002] # KANNADA DIGIT NINE
+0D6F ; [.2074.0020.0002] # MALAYALAM DIGIT NINE
+0DEF ; [.2074.0020.0002] # SINHALA LITH DIGIT NINE
+0E59 ; [.2074.0020.0002] # THAI DIGIT NINE
+0ED9 ; [.2074.0020.0002] # LAO DIGIT NINE
+0F29 ; [.2074.0020.0002] # TIBETAN DIGIT NINE
+1049 ; [.2074.0020.0002] # MYANMAR DIGIT NINE
+1099 ; [.2074.0020.0002] # MYANMAR SHAN DIGIT NINE
+1371 ; [.2074.0020.0002] # ETHIOPIC DIGIT NINE
+17E9 ; [.2074.0020.0002] # KHMER DIGIT NINE
+17F9 ; [.2074.0020.0002] # KHMER SYMBOL LEK ATTAK PRAM-BUON
+1819 ; [.2074.0020.0002] # MONGOLIAN DIGIT NINE
+194F ; [.2074.0020.0002] # LIMBU DIGIT NINE
+19D9 ; [.2074.0020.0002] # NEW TAI LUE DIGIT NINE
+1A89 ; [.2074.0020.0002] # TAI THAM HORA DIGIT NINE
+1A99 ; [.2074.0020.0002] # TAI THAM THAM DIGIT NINE
+1B59 ; [.2074.0020.0002] # BALINESE DIGIT NINE
+1BB9 ; [.2074.0020.0002] # SUNDANESE DIGIT NINE
+1C49 ; [.2074.0020.0002] # LEPCHA DIGIT NINE
+1C59 ; [.2074.0020.0002] # OL CHIKI DIGIT NINE
+3029 ; [.2074.0020.0002] # HANGZHOU NUMERAL NINE
+A629 ; [.2074.0020.0002] # VAI DIGIT NINE
+A8D9 ; [.2074.0020.0002] # SAURASHTRA DIGIT NINE
+A909 ; [.2074.0020.0002] # KAYAH LI DIGIT NINE
+A9D9 ; [.2074.0020.0002] # JAVANESE DIGIT NINE
+A9F9 ; [.2074.0020.0002] # MYANMAR TAI LAING DIGIT NINE
+AA59 ; [.2074.0020.0002] # CHAM DIGIT NINE
+ABF9 ; [.2074.0020.0002] # MEETEI MAYEK DIGIT NINE
+1010F ; [.2074.0020.0002] # AEGEAN NUMBER NINE
+102E9 ; [.2074.0020.0002] # COPTIC EPACT DIGIT NINE
+104A9 ; [.2074.0020.0002] # OSMANYA DIGIT NINE
+109C8 ; [.2074.0020.0002] # MEROITIC CURSIVE NUMBER NINE
+10D39 ; [.2074.0020.0002] # HANIFI ROHINGYA DIGIT NINE
+10E68 ; [.2074.0020.0002] # RUMI DIGIT NINE
+1105A ; [.2074.0020.0002] # BRAHMI NUMBER NINE
+1106F ; [.2074.0020.0002] # BRAHMI DIGIT NINE
+110F9 ; [.2074.0020.0002] # SORA SOMPENG DIGIT NINE
+1113F ; [.2074.0020.0002] # CHAKMA DIGIT NINE
+111D9 ; [.2074.0020.0002] # SHARADA DIGIT NINE
+111E9 ; [.2074.0020.0002] # SINHALA ARCHAIC DIGIT NINE
+112F9 ; [.2074.0020.0002] # KHUDAWADI DIGIT NINE
+11459 ; [.2074.0020.0002] # NEWA DIGIT NINE
+114D9 ; [.2074.0020.0002] # TIRHUTA DIGIT NINE
+11659 ; [.2074.0020.0002] # MODI DIGIT NINE
+116C9 ; [.2074.0020.0002] # TAKRI DIGIT NINE
+11739 ; [.2074.0020.0002] # AHOM DIGIT NINE
+118E9 ; [.2074.0020.0002] # WARANG CITI DIGIT NINE
+11959 ; [.2074.0020.0002] # DIVES AKURU DIGIT NINE
+11C59 ; [.2074.0020.0002] # BHAIKSUKI DIGIT NINE
+11C62 ; [.2074.0020.0002] # BHAIKSUKI NUMBER NINE
+11D59 ; [.2074.0020.0002] # MASARAM GONDI DIGIT NINE
+11DA9 ; [.2074.0020.0002] # GUNJALA GONDI DIGIT NINE
+12407 ; [.2074.0020.0002] # CUNEIFORM NUMERIC SIGN NINE ASH
+1240E ; [.2074.0020.0002] # CUNEIFORM NUMERIC SIGN NINE DISH
+12414 ; [.2074.0020.0002] # CUNEIFORM NUMERIC SIGN NINE U
+1241D ; [.2074.0020.0002] # CUNEIFORM NUMERIC SIGN NINE GESH2
+1242B ; [.2074.0020.0002] # CUNEIFORM NUMERIC SIGN NINE SHAR2
+12446 ; [.2074.0020.0002] # CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU
+12447 ; [.2074.0020.0002] # CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU3
+12448 ; [.2074.0020.0002] # CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU4
+12449 ; [.2074.0020.0002] # CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU A
+1246E ; [.2074.0020.0002] # CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM
+16A69 ; [.2074.0020.0002] # MRO DIGIT NINE
+16AC9 ; [.2074.0020.0002] # TANGSA DIGIT NINE
+16B59 ; [.2074.0020.0002] # PAHAWH HMONG DIGIT NINE
+16E89 ; [.2074.0020.0002] # MEDEFAIDRIN DIGIT NINE
+1D2E9 ; [.2074.0020.0002] # MAYAN NUMERAL NINE
+1D368 ; [.2074.0020.0002] # COUNTING ROD UNIT DIGIT NINE
+1E149 ; [.2074.0020.0002] # NYIAKENG PUACHUE HMONG DIGIT NINE
+1E2F9 ; [.2074.0020.0002] # WANCHO DIGIT NINE
+1E8CF ; [.2074.0020.0002] # MENDE KIKAKUI DIGIT NINE
+1E959 ; [.2074.0020.0002] # ADLAM DIGIT NINE
+1EC79 ; [.2074.0020.0002] # INDIC SIYAQ NUMBER NINE
+1ECAB ; [.2074.0020.0002] # INDIC SIYAQ NUMBER PREFIXED NINE
+1ED09 ; [.2074.0020.0002] # OTTOMAN SIYAQ NUMBER NINE
+FF19 ; [.2074.0020.0003] # FULLWIDTH DIGIT NINE
+0F32 ; [.2074.0020.0004] # TIBETAN DIGIT HALF NINE
+247C ; [*0334.0020.0004][.2074.0020.0004][*0335.0020.0004] # PARENTHESIZED DIGIT NINE
+2490 ; [.2074.0020.0004][*0281.0020.0004] # DIGIT NINE FULL STOP
+1F10A ; [.2074.0020.0004][*0224.0020.0004] # DIGIT NINE COMMA
+1D7D7 ; [.2074.0020.0005] # MATHEMATICAL BOLD DIGIT NINE
+1D7E1 ; [.2074.0020.0005] # MATHEMATICAL DOUBLE-STRUCK DIGIT NINE
+1D7EB ; [.2074.0020.0005] # MATHEMATICAL SANS-SERIF DIGIT NINE
+1D7F5 ; [.2074.0020.0005] # MATHEMATICAL SANS-SERIF BOLD DIGIT NINE
+1D7FF ; [.2074.0020.0005] # MATHEMATICAL MONOSPACE DIGIT NINE
+1FBF9 ; [.2074.0020.0005] # SEGMENTED DIGIT NINE
+2468 ; [.2074.0020.0006] # CIRCLED DIGIT NINE
+24FD ; [.2074.0020.0006] # DOUBLE CIRCLED DIGIT NINE
+277E ; [.2074.0020.0006] # DINGBAT NEGATIVE CIRCLED DIGIT NINE
+2788 ; [.2074.0020.0006] # DINGBAT CIRCLED SANS-SERIF DIGIT NINE
+2792 ; [.2074.0020.0006] # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE
+2079 ; [.2074.0020.0014] # SUPERSCRIPT NINE
+2089 ; [.2074.0020.0015] # SUBSCRIPT NINE
+1ED36 ; [.2074.0020.0004][.0000.0118.0004] # OTTOMAN SIYAQ ALTERNATE NUMBER NINE
+33E8 ; [.2074.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE
+32C8 ; [.2074.0020.0004][.FB40.0020.0004][.E708.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER
+3361 ; [.2074.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE
+0061 ; [.2075.0020.0002] # LATIN SMALL LETTER A
+FF41 ; [.2075.0020.0003] # FULLWIDTH LATIN SMALL LETTER A
+0363 ; [.2075.0020.0004] # COMBINING LATIN SMALL LETTER A
+249C ; [*0334.0020.0004][.2075.0020.0004][*0335.0020.0004] # PARENTHESIZED LATIN SMALL LETTER A
+1D41A ; [.2075.0020.0005] # MATHEMATICAL BOLD SMALL A
+1D44E ; [.2075.0020.0005] # MATHEMATICAL ITALIC SMALL A
+1D482 ; [.2075.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL A
+1D4B6 ; [.2075.0020.0005] # MATHEMATICAL SCRIPT SMALL A
+1D4EA ; [.2075.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL A
+1D51E ; [.2075.0020.0005] # MATHEMATICAL FRAKTUR SMALL A
+1D552 ; [.2075.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL A
+1D586 ; [.2075.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL A
+1D5BA ; [.2075.0020.0005] # MATHEMATICAL SANS-SERIF SMALL A
+1D5EE ; [.2075.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL A
+1D622 ; [.2075.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL A
+1D656 ; [.2075.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL A
+1D68A ; [.2075.0020.0005] # MATHEMATICAL MONOSPACE SMALL A
+24D0 ; [.2075.0020.0006] # CIRCLED LATIN SMALL LETTER A
+0041 ; [.2075.0020.0008] # LATIN CAPITAL LETTER A
+FF21 ; [.2075.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER A
+1F110 ; [*0334.0020.0004][.2075.0020.000A][*0335.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER A
+1D400 ; [.2075.0020.000B] # MATHEMATICAL BOLD CAPITAL A
+1D434 ; [.2075.0020.000B] # MATHEMATICAL ITALIC CAPITAL A
+1D468 ; [.2075.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL A
+1D49C ; [.2075.0020.000B] # MATHEMATICAL SCRIPT CAPITAL A
+1D4D0 ; [.2075.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL A
+1D504 ; [.2075.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL A
+1D538 ; [.2075.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL A
+1D56C ; [.2075.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL A
+1D5A0 ; [.2075.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL A
+1D5D4 ; [.2075.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL A
+1D608 ; [.2075.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL A
+1D63C ; [.2075.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL A
+1D670 ; [.2075.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL A
+24B6 ; [.2075.0020.000C] # CIRCLED LATIN CAPITAL LETTER A
+1F150 ; [.2075.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER A
+00AA ; [.2075.0020.0014] # FEMININE ORDINAL INDICATOR
+1D43 ; [.2075.0020.0014] # MODIFIER LETTER SMALL A
+2090 ; [.2075.0020.0015] # LATIN SUBSCRIPT SMALL LETTER A
+1D2C ; [.2075.0020.001D] # MODIFIER LETTER CAPITAL A
+1F130 ; [.2075.0020.001D] # SQUARED LATIN CAPITAL LETTER A
+1F170 ; [.2075.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER A
+00E1 ; [.2075.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH ACUTE
+00C1 ; [.2075.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH ACUTE
+00E0 ; [.2075.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER A WITH GRAVE
+00C0 ; [.2075.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER A WITH GRAVE
+0103 ; [.2075.0020.0002][.0000.0026.0002] # LATIN SMALL LETTER A WITH BREVE
+0102 ; [.2075.0020.0008][.0000.0026.0002] # LATIN CAPITAL LETTER A WITH BREVE
+1EAF ; [.2075.0020.0002][.0000.0026.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH BREVE AND ACUTE
+1EAE ; [.2075.0020.0008][.0000.0026.0002][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
+1EB1 ; [.2075.0020.0002][.0000.0026.0002][.0000.0025.0002] # LATIN SMALL LETTER A WITH BREVE AND GRAVE
+1EB0 ; [.2075.0020.0008][.0000.0026.0002][.0000.0025.0002] # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
+1EB5 ; [.2075.0020.0002][.0000.0026.0002][.0000.002D.0002] # LATIN SMALL LETTER A WITH BREVE AND TILDE
+1EB4 ; [.2075.0020.0008][.0000.0026.0002][.0000.002D.0002] # LATIN CAPITAL LETTER A WITH BREVE AND TILDE
+1EB3 ; [.2075.0020.0002][.0000.0026.0002][.0000.003B.0002] # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
+1EB2 ; [.2075.0020.0008][.0000.0026.0002][.0000.003B.0002] # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
+00E2 ; [.2075.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX
+00C2 ; [.2075.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+1EA5 ; [.2075.0020.0002][.0000.0027.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
+1EA4 ; [.2075.0020.0008][.0000.0027.0002][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
+1EA7 ; [.2075.0020.0002][.0000.0027.0002][.0000.0025.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
+1EA6 ; [.2075.0020.0008][.0000.0027.0002][.0000.0025.0002] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
+1EAB ; [.2075.0020.0002][.0000.0027.0002][.0000.002D.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
+1EAA ; [.2075.0020.0008][.0000.0027.0002][.0000.002D.0002] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
+1EA9 ; [.2075.0020.0002][.0000.0027.0002][.0000.003B.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+1EA8 ; [.2075.0020.0008][.0000.0027.0002][.0000.003B.0002] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+01CE ; [.2075.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER A WITH CARON
+01CD ; [.2075.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER A WITH CARON
+00E5 ; [.2075.0020.0002][.0000.0029.0002] # LATIN SMALL LETTER A WITH RING ABOVE
+00C5 ; [.2075.0020.0008][.0000.0029.0002] # LATIN CAPITAL LETTER A WITH RING ABOVE
+212B ; [.2075.0020.0008][.0000.0029.0002] # ANGSTROM SIGN
+01FB ; [.2075.0020.0002][.0000.0029.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
+01FA ; [.2075.0020.0008][.0000.0029.0002][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
+00E4 ; [.2075.0020.0002][.0000.002B.0002] # LATIN SMALL LETTER A WITH DIAERESIS
+1DF2 ; [.2075.0020.0004][.0000.002B.0004] # COMBINING LATIN SMALL LETTER A WITH DIAERESIS
+A79B ; [.2075.0020.0004][.0000.002B.0004] # LATIN SMALL LETTER VOLAPUK AE
+00C4 ; [.2075.0020.0008][.0000.002B.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS
+A79A ; [.2075.0020.000A][.0000.002B.0004] # LATIN CAPITAL LETTER VOLAPUK AE
+01DF ; [.2075.0020.0002][.0000.002B.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
+01DE ; [.2075.0020.0008][.0000.002B.0002][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
+00E3 ; [.2075.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER A WITH TILDE
+00C3 ; [.2075.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER A WITH TILDE
+0227 ; [.2075.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER A WITH DOT ABOVE
+0226 ; [.2075.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER A WITH DOT ABOVE
+01E1 ; [.2075.0020.0002][.0000.002E.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
+01E0 ; [.2075.0020.0008][.0000.002E.0002][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
+0105 ; [.2075.0020.0002][.0000.0031.0002] # LATIN SMALL LETTER A WITH OGONEK
+A7C1 ; [.2075.0020.0004][.0000.0031.0004] # LATIN SMALL LETTER OLD POLISH O
+0104 ; [.2075.0020.0008][.0000.0031.0002] # LATIN CAPITAL LETTER A WITH OGONEK
+A7C0 ; [.2075.0020.000A][.0000.0031.0004] # LATIN CAPITAL LETTER OLD POLISH O
+0101 ; [.2075.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH MACRON
+0100 ; [.2075.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH MACRON
+1EA3 ; [.2075.0020.0002][.0000.003B.0002] # LATIN SMALL LETTER A WITH HOOK ABOVE
+1EA2 ; [.2075.0020.0008][.0000.003B.0002] # LATIN CAPITAL LETTER A WITH HOOK ABOVE
+0201 ; [.2075.0020.0002][.0000.003C.0002] # LATIN SMALL LETTER A WITH DOUBLE GRAVE
+0200 ; [.2075.0020.0008][.0000.003C.0002] # LATIN CAPITAL LETTER A WITH DOUBLE GRAVE
+0203 ; [.2075.0020.0002][.0000.003E.0002] # LATIN SMALL LETTER A WITH INVERTED BREVE
+0202 ; [.2075.0020.0008][.0000.003E.0002] # LATIN CAPITAL LETTER A WITH INVERTED BREVE
+1EA1 ; [.2075.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER A WITH DOT BELOW
+1EA0 ; [.2075.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER A WITH DOT BELOW
+1EB7 ; [.2075.0020.0002][.0000.0042.0002][.0000.0026.0002] # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
+1EB6 ; [.2075.0020.0008][.0000.0042.0002][.0000.0026.0002] # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
+1EAD ; [.2075.0020.0002][.0000.0042.0002][.0000.0027.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+1EAC ; [.2075.0020.0008][.0000.0042.0002][.0000.0027.0002] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+1E01 ; [.2075.0020.0002][.0000.0044.0002] # LATIN SMALL LETTER A WITH RING BELOW
+1E00 ; [.2075.0020.0008][.0000.0044.0002] # LATIN CAPITAL LETTER A WITH RING BELOW
+1DD3 ; [.2075.0020.0004][.0000.0118.0004] # COMBINING LATIN SMALL LETTER FLATTENED OPEN A ABOVE
+A733 ; [.2075.0020.0004][.2075.0020.0004] # LATIN SMALL LETTER AA
+A732 ; [.2075.0020.000A][.2075.0020.000A] # LATIN CAPITAL LETTER AA
+10780 ; [.2075.0020.0014][.2075.0020.0014] # MODIFIER LETTER SMALL CAPITAL AA
+1F18E ; [.2075.0020.001D][.208F.0020.001D] # NEGATIVE SQUARED AB
+2100 ; [.2075.0020.0004][*03BA.0020.0004][.20A9.0020.0004] # ACCOUNT OF
+00E6 ; [.2075.0020.0004][.0000.0118.0004][.20DB.0020.0004] # LATIN SMALL LETTER AE
+1DD4 ; [.2075.0020.0004][.0000.0118.0004][.20DB.0020.0004] # COMBINING LATIN SMALL LETTER AE
+00C6 ; [.2075.0020.000A][.0000.0118.0004][.20DB.0020.000A] # LATIN CAPITAL LETTER AE
+1D2D ; [.2075.0020.0014][.0000.0118.0014][.20DB.0020.0014] # MODIFIER LETTER CAPITAL AE
+10783 ; [.2075.0020.0014][.0000.0118.0014][.20DB.0020.0014] # MODIFIER LETTER SMALL AE
+01FD ; [.2075.0020.0004][.0000.0118.0004][.20DB.0020.0004][.0000.0024.0002] # LATIN SMALL LETTER AE WITH ACUTE
+01FC ; [.2075.0020.000A][.0000.0118.0004][.20DB.0020.000A][.0000.0024.0002] # LATIN CAPITAL LETTER AE WITH ACUTE
+01E3 ; [.2075.0020.0004][.0000.0118.0004][.20DB.0020.0004][.0000.0032.0002] # LATIN SMALL LETTER AE WITH MACRON
+01E2 ; [.2075.0020.000A][.0000.0118.0004][.20DB.0020.000A][.0000.0032.0002] # LATIN CAPITAL LETTER AE WITH MACRON
+33C2 ; [.2075.0020.001C][*0281.0020.001C][.21E8.0020.001C][*0281.0020.001C] # SQUARE AM
+33DF ; [.2075.0020.001D][*06AC.0020.001C][.21E8.0020.001C] # SQUARE A OVER M
+1DD5 ; [.2075.0020.0004][.221D.0020.0004] # COMBINING LATIN SMALL LETTER AO
+A735 ; [.2075.0020.0004][.221D.0020.0004] # LATIN SMALL LETTER AO
+A734 ; [.2075.0020.000A][.221D.0020.000A] # LATIN CAPITAL LETTER AO
+2101 ; [.2075.0020.0004][*03BA.0020.0004][.22B6.0020.0004] # ADDRESSED TO THE SUBJECT
+214D ; [.2075.0020.000A][*03BA.0020.0004][.22B6.0020.000A] # AKTIESELSKAB
+A737 ; [.2075.0020.0004][.2301.0020.0004] # LATIN SMALL LETTER AU
+A736 ; [.2075.0020.000A][.2301.0020.000A] # LATIN CAPITAL LETTER AU
+3373 ; [.2075.0020.001D][.2301.0020.001D] # SQUARE AU
+1DD6 ; [.2075.0020.0004][.2331.0020.0004] # COMBINING LATIN SMALL LETTER AV
+A739 ; [.2075.0020.0004][.2331.0020.0004] # LATIN SMALL LETTER AV
+A738 ; [.2075.0020.000A][.2331.0020.000A] # LATIN CAPITAL LETTER AV
+A73B ; [.2075.0020.0004][.0000.0118.0004][.2331.0020.0004] # LATIN SMALL LETTER AV WITH HORIZONTAL BAR
+A73A ; [.2075.0020.000A][.0000.0118.0004][.2331.0020.000A] # LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR
+A73D ; [.2075.0020.0004][.2359.0020.0004] # LATIN SMALL LETTER AY
+A73C ; [.2075.0020.000A][.2359.0020.000A] # LATIN CAPITAL LETTER AY
+1E9A ; [.2075.0020.0004][.23D1.0020.0004] # LATIN SMALL LETTER A WITH RIGHT HALF RING
+1D00 ; [.2079.0020.0002] # LATIN LETTER SMALL CAPITAL A
+2C65 ; [.207A.0020.0002] # LATIN SMALL LETTER A WITH STROKE
+023A ; [.207A.0020.0008] # LATIN CAPITAL LETTER A WITH STROKE
+1D8F ; [.207B.0020.0002] # LATIN SMALL LETTER A WITH RETROFLEX HOOK
+A7BB ; [.207C.0020.0002] # LATIN SMALL LETTER GLOTTAL A
+A7BA ; [.207C.0020.0008] # LATIN CAPITAL LETTER GLOTTAL A
+1D01 ; [.207D.0020.0002] # LATIN LETTER SMALL CAPITAL AE
+1D02 ; [.207E.0020.0002] # LATIN SMALL LETTER TURNED AE
+1D46 ; [.207E.0020.0014] # MODIFIER LETTER SMALL TURNED AE
+AB31 ; [.207F.0020.0002] # LATIN SMALL LETTER A REVERSED-SCHWA
+0250 ; [.2080.0020.0002] # LATIN SMALL LETTER TURNED A
+2C6F ; [.2080.0020.0008] # LATIN CAPITAL LETTER TURNED A
+1D44 ; [.2080.0020.0014] # MODIFIER LETTER SMALL TURNED A
+0251 ; [.2084.0020.0002] # LATIN SMALL LETTER ALPHA
+1DE7 ; [.2084.0020.0004] # COMBINING LATIN SMALL LETTER ALPHA
+2C6D ; [.2084.0020.0008] # LATIN CAPITAL LETTER ALPHA
+1D45 ; [.2084.0020.0014] # MODIFIER LETTER SMALL ALPHA
+AB30 ; [.2088.0020.0002] # LATIN SMALL LETTER BARRED ALPHA
+1D90 ; [.2089.0020.0002] # LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK
+0252 ; [.208A.0020.0002] # LATIN SMALL LETTER TURNED ALPHA
+2C70 ; [.208A.0020.0008] # LATIN CAPITAL LETTER TURNED ALPHA
+1D9B ; [.208A.0020.0014] # MODIFIER LETTER SMALL TURNED ALPHA
+AB64 ; [.208E.0020.0002] # LATIN SMALL LETTER INVERTED ALPHA
+0062 ; [.208F.0020.0002] # LATIN SMALL LETTER B
+FF42 ; [.208F.0020.0003] # FULLWIDTH LATIN SMALL LETTER B
+1DE8 ; [.208F.0020.0004] # COMBINING LATIN SMALL LETTER B
+249D ; [*0334.0020.0004][.208F.0020.0004][*0335.0020.0004] # PARENTHESIZED LATIN SMALL LETTER B
+1D41B ; [.208F.0020.0005] # MATHEMATICAL BOLD SMALL B
+1D44F ; [.208F.0020.0005] # MATHEMATICAL ITALIC SMALL B
+1D483 ; [.208F.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL B
+1D4B7 ; [.208F.0020.0005] # MATHEMATICAL SCRIPT SMALL B
+1D4EB ; [.208F.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL B
+1D51F ; [.208F.0020.0005] # MATHEMATICAL FRAKTUR SMALL B
+1D553 ; [.208F.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL B
+1D587 ; [.208F.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL B
+1D5BB ; [.208F.0020.0005] # MATHEMATICAL SANS-SERIF SMALL B
+1D5EF ; [.208F.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL B
+1D623 ; [.208F.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL B
+1D657 ; [.208F.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL B
+1D68B ; [.208F.0020.0005] # MATHEMATICAL MONOSPACE SMALL B
+24D1 ; [.208F.0020.0006] # CIRCLED LATIN SMALL LETTER B
+0042 ; [.208F.0020.0008] # LATIN CAPITAL LETTER B
+FF22 ; [.208F.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER B
+1F111 ; [*0334.0020.0004][.208F.0020.000A][*0335.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER B
+212C ; [.208F.0020.000B] # SCRIPT CAPITAL B
+1D401 ; [.208F.0020.000B] # MATHEMATICAL BOLD CAPITAL B
+1D435 ; [.208F.0020.000B] # MATHEMATICAL ITALIC CAPITAL B
+1D469 ; [.208F.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL B
+1D4D1 ; [.208F.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL B
+1D505 ; [.208F.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL B
+1D539 ; [.208F.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL B
+1D56D ; [.208F.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL B
+1D5A1 ; [.208F.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL B
+1D5D5 ; [.208F.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL B
+1D609 ; [.208F.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL B
+1D63D ; [.208F.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL B
+1D671 ; [.208F.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL B
+24B7 ; [.208F.0020.000C] # CIRCLED LATIN CAPITAL LETTER B
+1F151 ; [.208F.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER B
+1D47 ; [.208F.0020.0014] # MODIFIER LETTER SMALL B
+1D2E ; [.208F.0020.001D] # MODIFIER LETTER CAPITAL B
+1F131 ; [.208F.0020.001D] # SQUARED LATIN CAPITAL LETTER B
+1F171 ; [.208F.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER B
+1E03 ; [.208F.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER B WITH DOT ABOVE
+1E02 ; [.208F.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER B WITH DOT ABOVE
+1E05 ; [.208F.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER B WITH DOT BELOW
+1E04 ; [.208F.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER B WITH DOT BELOW
+1E07 ; [.208F.0020.0002][.0000.0049.0002] # LATIN SMALL LETTER B WITH LINE BELOW
+1E06 ; [.208F.0020.0008][.0000.0049.0002] # LATIN CAPITAL LETTER B WITH LINE BELOW
+3374 ; [.208F.0020.001C][.2075.0020.001C][.2275.0020.001C] # SQUARE BAR
+33C3 ; [.208F.0020.001D][.2262.0020.001C] # SQUARE BQ
+0299 ; [.2093.0020.0002] # LATIN LETTER SMALL CAPITAL B
+10784 ; [.2093.0020.0014] # MODIFIER LETTER SMALL CAPITAL B
+0180 ; [.2097.0020.0002] # LATIN SMALL LETTER B WITH STROKE
+0243 ; [.2097.0020.0008] # LATIN CAPITAL LETTER B WITH STROKE
+1D2F ; [.209B.0020.0002] # MODIFIER LETTER CAPITAL BARRED B
+1D03 ; [.209C.0020.0002] # LATIN LETTER SMALL CAPITAL BARRED B
+1D6C ; [.209D.0020.0002] # LATIN SMALL LETTER B WITH MIDDLE TILDE
+A797 ; [.209E.0020.0002] # LATIN SMALL LETTER B WITH FLOURISH
+A796 ; [.209E.0020.0008] # LATIN CAPITAL LETTER B WITH FLOURISH
+1D80 ; [.209F.0020.0002] # LATIN SMALL LETTER B WITH PALATAL HOOK
+0253 ; [.20A0.0020.0002] # LATIN SMALL LETTER B WITH HOOK
+0181 ; [.20A0.0020.0008] # LATIN CAPITAL LETTER B WITH HOOK
+10785 ; [.20A0.0020.0014] # MODIFIER LETTER SMALL B WITH HOOK
+0183 ; [.20A4.0020.0002] # LATIN SMALL LETTER B WITH TOPBAR
+0182 ; [.20A4.0020.0008] # LATIN CAPITAL LETTER B WITH TOPBAR
+A7B5 ; [.20A8.0020.0002] # LATIN SMALL LETTER BETA
+1DE9 ; [.20A8.0020.0004] # COMBINING LATIN SMALL LETTER BETA
+A7B4 ; [.20A8.0020.0008] # LATIN CAPITAL LETTER BETA
+0063 ; [.20A9.0020.0002] # LATIN SMALL LETTER C
+FF43 ; [.20A9.0020.0003] # FULLWIDTH LATIN SMALL LETTER C
+0368 ; [.20A9.0020.0004] # COMBINING LATIN SMALL LETTER C
+217D ; [.20A9.0020.0004] # SMALL ROMAN NUMERAL ONE HUNDRED
+249E ; [*0334.0020.0004][.20A9.0020.0004][*0335.0020.0004] # PARENTHESIZED LATIN SMALL LETTER C
+1D41C ; [.20A9.0020.0005] # MATHEMATICAL BOLD SMALL C
+1D450 ; [.20A9.0020.0005] # MATHEMATICAL ITALIC SMALL C
+1D484 ; [.20A9.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL C
+1D4B8 ; [.20A9.0020.0005] # MATHEMATICAL SCRIPT SMALL C
+1D4EC ; [.20A9.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL C
+1D520 ; [.20A9.0020.0005] # MATHEMATICAL FRAKTUR SMALL C
+1D554 ; [.20A9.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL C
+1D588 ; [.20A9.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL C
+1D5BC ; [.20A9.0020.0005] # MATHEMATICAL SANS-SERIF SMALL C
+1D5F0 ; [.20A9.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL C
+1D624 ; [.20A9.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL C
+1D658 ; [.20A9.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL C
+1D68C ; [.20A9.0020.0005] # MATHEMATICAL MONOSPACE SMALL C
+24D2 ; [.20A9.0020.0006] # CIRCLED LATIN SMALL LETTER C
+0043 ; [.20A9.0020.0008] # LATIN CAPITAL LETTER C
+FF23 ; [.20A9.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER C
+2103 ; [*054C.0020.0004][.20A9.0020.000A] # DEGREE CELSIUS
+216D ; [.20A9.0020.000A] # ROMAN NUMERAL ONE HUNDRED
+1F112 ; [*0334.0020.0004][.20A9.0020.000A][*0335.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER C
+2102 ; [.20A9.0020.000B] # DOUBLE-STRUCK CAPITAL C
+212D ; [.20A9.0020.000B] # BLACK-LETTER CAPITAL C
+1D402 ; [.20A9.0020.000B] # MATHEMATICAL BOLD CAPITAL C
+1D436 ; [.20A9.0020.000B] # MATHEMATICAL ITALIC CAPITAL C
+1D46A ; [.20A9.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL C
+1D49E ; [.20A9.0020.000B] # MATHEMATICAL SCRIPT CAPITAL C
+1D4D2 ; [.20A9.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL C
+1D56E ; [.20A9.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL C
+1D5A2 ; [.20A9.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL C
+1D5D6 ; [.20A9.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL C
+1D60A ; [.20A9.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL C
+1D63E ; [.20A9.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL C
+1D672 ; [.20A9.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL C
+24B8 ; [.20A9.0020.000C] # CIRCLED LATIN CAPITAL LETTER C
+1F12B ; [.20A9.0020.000C] # CIRCLED ITALIC LATIN CAPITAL LETTER C
+1F152 ; [.20A9.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER C
+1D9C ; [.20A9.0020.0014] # MODIFIER LETTER SMALL C
+A7F2 ; [.20A9.0020.001D] # MODIFIER LETTER CAPITAL C
+1F132 ; [.20A9.0020.001D] # SQUARED LATIN CAPITAL LETTER C
+1F172 ; [.20A9.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER C
+0107 ; [.20A9.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER C WITH ACUTE
+0106 ; [.20A9.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER C WITH ACUTE
+0109 ; [.20A9.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER C WITH CIRCUMFLEX
+0108 ; [.20A9.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER C WITH CIRCUMFLEX
+010D ; [.20A9.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER C WITH CARON
+010C ; [.20A9.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER C WITH CARON
+010B ; [.20A9.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER C WITH DOT ABOVE
+010A ; [.20A9.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER C WITH DOT ABOVE
+00E7 ; [.20A9.0020.0002][.0000.0030.0002] # LATIN SMALL LETTER C WITH CEDILLA
+1DD7 ; [.20A9.0020.0004][.0000.0030.0004] # COMBINING LATIN SMALL LETTER C CEDILLA
+00C7 ; [.20A9.0020.0008][.0000.0030.0002] # LATIN CAPITAL LETTER C WITH CEDILLA
+1E09 ; [.20A9.0020.0002][.0000.0030.0002][.0000.0024.0002] # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
+1E08 ; [.20A9.0020.0008][.0000.0030.0002][.0000.0024.0002] # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
+3388 ; [.20A9.0020.001C][.2075.0020.001C][.21B0.0020.001C] # SQUARE CAL
+33C4 ; [.20A9.0020.001C][.20A9.0020.001C] # SQUARE CC
+1F12D ; [.20A9.0020.000C][.20BF.0020.000C] # CIRCLED CD
+33C5 ; [.20A9.0020.001C][.20BF.0020.001C] # SQUARE CD
+33C6 ; [.20A9.0020.001D][*06AC.0020.001C][.219C.0020.001C][.2125.0020.001C] # SQUARE C OVER KG
+1F191 ; [.20A9.0020.001D][.21B0.0020.001D] # SQUARED CL
+339D ; [.20A9.0020.001C][.21E8.0020.001C] # SQUARE CM
+33A0 ; [.20A9.0020.001C][.21E8.0020.001C][.206D.0020.001C] # SQUARE CM SQUARED
+33A4 ; [.20A9.0020.001C][.21E8.0020.001C][.206E.0020.001C] # SQUARE CM CUBED
+2105 ; [.20A9.0020.0004][*03BA.0020.0004][.221D.0020.0004] # CARE OF
+33C7 ; [.20A9.0020.001D][.221D.0020.001C][*0281.0020.001C] # SQUARE CO
+1F192 ; [.20A9.0020.001D][.221D.0020.001D][.221D.0020.001D][.21B0.0020.001D] # SQUARED COOL
+2106 ; [.20A9.0020.0004][*03BA.0020.0004][.2301.0020.0004] # CADA UNA
+1D04 ; [.20AD.0020.0002] # LATIN LETTER SMALL CAPITAL C
+023C ; [.20AE.0020.0002] # LATIN SMALL LETTER C WITH STROKE
+023B ; [.20AE.0020.0008] # LATIN CAPITAL LETTER C WITH STROKE
+A793 ; [.20B2.0020.0002] # LATIN SMALL LETTER C WITH BAR
+A792 ; [.20B2.0020.0008] # LATIN CAPITAL LETTER C WITH BAR
+A794 ; [.20B3.0020.0002] # LATIN SMALL LETTER C WITH PALATAL HOOK
+A7C4 ; [.20B3.0020.0008] # LATIN CAPITAL LETTER C WITH PALATAL HOOK
+1DF1D ; [.20B4.0020.0002] # LATIN SMALL LETTER C WITH RETROFLEX HOOK
+0188 ; [.20B5.0020.0002] # LATIN SMALL LETTER C WITH HOOK
+0187 ; [.20B5.0020.0008] # LATIN CAPITAL LETTER C WITH HOOK
+0255 ; [.20B9.0020.0002] # LATIN SMALL LETTER C WITH CURL
+1D9D ; [.20B9.0020.0014] # MODIFIER LETTER SMALL C WITH CURL
+2184 ; [.20BD.0020.0002] # LATIN SMALL LETTER REVERSED C
+2183 ; [.20BD.0020.0008] # ROMAN NUMERAL REVERSED ONE HUNDRED
+A73F ; [.20BE.0020.0002] # LATIN SMALL LETTER REVERSED C WITH DOT
+A73E ; [.20BE.0020.0008] # LATIN CAPITAL LETTER REVERSED C WITH DOT
+0064 ; [.20BF.0020.0002] # LATIN SMALL LETTER D
+FF44 ; [.20BF.0020.0003] # FULLWIDTH LATIN SMALL LETTER D
+0369 ; [.20BF.0020.0004] # COMBINING LATIN SMALL LETTER D
+217E ; [.20BF.0020.0004] # SMALL ROMAN NUMERAL FIVE HUNDRED
+249F ; [*0334.0020.0004][.20BF.0020.0004][*0335.0020.0004] # PARENTHESIZED LATIN SMALL LETTER D
+2146 ; [.20BF.0020.0005] # DOUBLE-STRUCK ITALIC SMALL D
+1D41D ; [.20BF.0020.0005] # MATHEMATICAL BOLD SMALL D
+1D451 ; [.20BF.0020.0005] # MATHEMATICAL ITALIC SMALL D
+1D485 ; [.20BF.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL D
+1D4B9 ; [.20BF.0020.0005] # MATHEMATICAL SCRIPT SMALL D
+1D4ED ; [.20BF.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL D
+1D521 ; [.20BF.0020.0005] # MATHEMATICAL FRAKTUR SMALL D
+1D555 ; [.20BF.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL D
+1D589 ; [.20BF.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL D
+1D5BD ; [.20BF.0020.0005] # MATHEMATICAL SANS-SERIF SMALL D
+1D5F1 ; [.20BF.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL D
+1D625 ; [.20BF.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL D
+1D659 ; [.20BF.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL D
+1D68D ; [.20BF.0020.0005] # MATHEMATICAL MONOSPACE SMALL D
+24D3 ; [.20BF.0020.0006] # CIRCLED LATIN SMALL LETTER D
+0044 ; [.20BF.0020.0008] # LATIN CAPITAL LETTER D
+FF24 ; [.20BF.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER D
+216E ; [.20BF.0020.000A] # ROMAN NUMERAL FIVE HUNDRED
+1F113 ; [*0334.0020.0004][.20BF.0020.000A][*0335.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER D
+2145 ; [.20BF.0020.000B] # DOUBLE-STRUCK ITALIC CAPITAL D
+1D403 ; [.20BF.0020.000B] # MATHEMATICAL BOLD CAPITAL D
+1D437 ; [.20BF.0020.000B] # MATHEMATICAL ITALIC CAPITAL D
+1D46B ; [.20BF.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL D
+1D49F ; [.20BF.0020.000B] # MATHEMATICAL SCRIPT CAPITAL D
+1D4D3 ; [.20BF.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL D
+1D507 ; [.20BF.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL D
+1D53B ; [.20BF.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL D
+1D56F ; [.20BF.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL D
+1D5A3 ; [.20BF.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL D
+1D5D7 ; [.20BF.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL D
+1D60B ; [.20BF.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL D
+1D63F ; [.20BF.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL D
+1D673 ; [.20BF.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL D
+24B9 ; [.20BF.0020.000C] # CIRCLED LATIN CAPITAL LETTER D
+1F153 ; [.20BF.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER D
+1D48 ; [.20BF.0020.0014] # MODIFIER LETTER SMALL D
+1F1A5 ; [.20BF.0020.001C] # SQUARED LATIN SMALL LETTER D
+1D30 ; [.20BF.0020.001D] # MODIFIER LETTER CAPITAL D
+1F133 ; [.20BF.0020.001D] # SQUARED LATIN CAPITAL LETTER D
+1F173 ; [.20BF.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER D
+010F ; [.20BF.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER D WITH CARON
+010E ; [.20BF.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER D WITH CARON
+1E0B ; [.20BF.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER D WITH DOT ABOVE
+1E0A ; [.20BF.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER D WITH DOT ABOVE
+1E11 ; [.20BF.0020.0002][.0000.0030.0002] # LATIN SMALL LETTER D WITH CEDILLA
+1E10 ; [.20BF.0020.0008][.0000.0030.0002] # LATIN CAPITAL LETTER D WITH CEDILLA
+0111 ; [.20BF.0020.0002][.0000.0039.0002] # LATIN SMALL LETTER D WITH STROKE
+0110 ; [.20BF.0020.0008][.0000.0039.0002] # LATIN CAPITAL LETTER D WITH STROKE
+1E0D ; [.20BF.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER D WITH DOT BELOW
+1E0C ; [.20BF.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER D WITH DOT BELOW
+1E13 ; [.20BF.0020.0002][.0000.0046.0002] # LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW
+1E12 ; [.20BF.0020.0008][.0000.0046.0002] # LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW
+1E0F ; [.20BF.0020.0002][.0000.0049.0002] # LATIN SMALL LETTER D WITH LINE BELOW
+1E0E ; [.20BF.0020.0008][.0000.0049.0002] # LATIN CAPITAL LETTER D WITH LINE BELOW
+00F0 ; [.20BF.0020.0004][.0000.0118.0004] # LATIN SMALL LETTER ETH
+1DD9 ; [.20BF.0020.0004][.0000.0118.0004] # COMBINING LATIN SMALL LETTER ETH
+00D0 ; [.20BF.0020.000A][.0000.0118.0004] # LATIN CAPITAL LETTER ETH
+1D9E ; [.20BF.0020.0014][.0000.0118.0014] # MODIFIER LETTER SMALL ETH
+1DD8 ; [.20BF.0020.0004][.0000.0119.0004] # COMBINING LATIN SMALL LETTER INSULAR D
+A77A ; [.20BF.0020.0004][.0000.0119.0004] # LATIN SMALL LETTER INSULAR D
+A779 ; [.20BF.0020.000A][.0000.0119.0004] # LATIN CAPITAL LETTER INSULAR D
+3372 ; [.20BF.0020.001C][.2075.0020.001C] # SQUARE DA
+0238 ; [.20BF.0020.0004][.208F.0020.0004] # LATIN SMALL LETTER DB DIGRAPH
+33C8 ; [.20BF.0020.001C][.208F.0020.001D] # SQUARE DB
+1F190 ; [.20BF.0020.001D][.2183.0020.001D] # SQUARE DJ
+3397 ; [.20BF.0020.001C][.21B0.0020.001C] # SQUARE DL
+3377 ; [.20BF.0020.001C][.21E8.0020.001C] # SQUARE DM
+3378 ; [.20BF.0020.001C][.21E8.0020.001C][.206D.0020.001C] # SQUARE DM SQUARED
+3379 ; [.20BF.0020.001C][.21E8.0020.001C][.206E.0020.001C] # SQUARE DM CUBED
+01F3 ; [.20BF.0020.0004][.236F.0020.0004] # LATIN SMALL LETTER DZ
+02A3 ; [.20BF.0020.0004][.236F.0020.0004] # LATIN SMALL LETTER DZ DIGRAPH
+01F2 ; [.20BF.0020.000A][.236F.0020.0004] # LATIN CAPITAL LETTER D WITH SMALL LETTER Z
+01F1 ; [.20BF.0020.000A][.236F.0020.000A] # LATIN CAPITAL LETTER DZ
+10787 ; [.20BF.0020.0014][.236F.0020.0014] # MODIFIER LETTER SMALL DZ DIGRAPH
+01C6 ; [.20BF.0020.0004][.236F.0020.0004][.0000.0028.0004] # LATIN SMALL LETTER DZ WITH CARON
+01C5 ; [.20BF.0020.000A][.236F.0020.0004][.0000.0028.0004] # LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON
+01C4 ; [.20BF.0020.000A][.236F.0020.000A][.0000.0028.0004] # LATIN CAPITAL LETTER DZ WITH CARON
+AB66 ; [.20BF.0020.0004][.237E.0020.0004] # LATIN SMALL LETTER DZ DIGRAPH WITH RETROFLEX HOOK
+10788 ; [.20BF.0020.0014][.237E.0020.0014] # MODIFIER LETTER SMALL DZ DIGRAPH WITH RETROFLEX HOOK
+02A5 ; [.20BF.0020.0004][.2382.0020.0004] # LATIN SMALL LETTER DZ DIGRAPH WITH CURL
+10789 ; [.20BF.0020.0014][.2382.0020.0014] # MODIFIER LETTER SMALL DZ DIGRAPH WITH CURL
+02A4 ; [.20BF.0020.0004][.238C.0020.0004] # LATIN SMALL LETTER DEZH DIGRAPH
+1078A ; [.20BF.0020.0014][.238C.0020.0014] # MODIFIER LETTER SMALL DEZH DIGRAPH
+1DF12 ; [.20BF.0020.0004][.2395.0020.0004] # LATIN SMALL LETTER DEZH DIGRAPH WITH PALATAL HOOK
+1DF19 ; [.20BF.0020.0004][.2396.0020.0004] # LATIN SMALL LETTER DEZH DIGRAPH WITH RETROFLEX HOOK
+1D05 ; [.20C3.0020.0002] # LATIN LETTER SMALL CAPITAL D
+1D06 ; [.20C4.0020.0002] # LATIN LETTER SMALL CAPITAL ETH
+A7C8 ; [.20C5.0020.0002] # LATIN SMALL LETTER D WITH SHORT STROKE OVERLAY
+A7C7 ; [.20C5.0020.0008] # LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY
+1D6D ; [.20C6.0020.0002] # LATIN SMALL LETTER D WITH MIDDLE TILDE
+1D81 ; [.20C7.0020.0002] # LATIN SMALL LETTER D WITH PALATAL HOOK
+0256 ; [.20C8.0020.0002] # LATIN SMALL LETTER D WITH TAIL
+0189 ; [.20C8.0020.0008] # LATIN CAPITAL LETTER AFRICAN D
+1078B ; [.20C8.0020.0014] # MODIFIER LETTER SMALL D WITH TAIL
+0257 ; [.20CC.0020.0002] # LATIN SMALL LETTER D WITH HOOK
+018A ; [.20CC.0020.0008] # LATIN CAPITAL LETTER D WITH HOOK
+1078C ; [.20CC.0020.0014] # MODIFIER LETTER SMALL D WITH HOOK
+1D91 ; [.20D0.0020.0002] # LATIN SMALL LETTER D WITH HOOK AND TAIL
+1078D ; [.20D0.0020.0014] # MODIFIER LETTER SMALL D WITH HOOK AND TAIL
+018C ; [.20D1.0020.0002] # LATIN SMALL LETTER D WITH TOPBAR
+018B ; [.20D1.0020.0008] # LATIN CAPITAL LETTER D WITH TOPBAR
+0221 ; [.20D5.0020.0002] # LATIN SMALL LETTER D WITH CURL
+A771 ; [.20D9.0020.0002] # LATIN SMALL LETTER DUM
+1E9F ; [.20DA.0020.0002] # LATIN SMALL LETTER DELTA
+0065 ; [.20DB.0020.0002] # LATIN SMALL LETTER E
+FF45 ; [.20DB.0020.0003] # FULLWIDTH LATIN SMALL LETTER E
+0364 ; [.20DB.0020.0004] # COMBINING LATIN SMALL LETTER E
+24A0 ; [*0334.0020.0004][.20DB.0020.0004][*0335.0020.0004] # PARENTHESIZED LATIN SMALL LETTER E
+212F ; [.20DB.0020.0005] # SCRIPT SMALL E
+2147 ; [.20DB.0020.0005] # DOUBLE-STRUCK ITALIC SMALL E
+1D41E ; [.20DB.0020.0005] # MATHEMATICAL BOLD SMALL E
+1D452 ; [.20DB.0020.0005] # MATHEMATICAL ITALIC SMALL E
+1D486 ; [.20DB.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL E
+1D4EE ; [.20DB.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL E
+1D522 ; [.20DB.0020.0005] # MATHEMATICAL FRAKTUR SMALL E
+1D556 ; [.20DB.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL E
+1D58A ; [.20DB.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL E
+1D5BE ; [.20DB.0020.0005] # MATHEMATICAL SANS-SERIF SMALL E
+1D5F2 ; [.20DB.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL E
+1D626 ; [.20DB.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL E
+1D65A ; [.20DB.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL E
+1D68E ; [.20DB.0020.0005] # MATHEMATICAL MONOSPACE SMALL E
+24D4 ; [.20DB.0020.0006] # CIRCLED LATIN SMALL LETTER E
+0045 ; [.20DB.0020.0008] # LATIN CAPITAL LETTER E
+FF25 ; [.20DB.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER E
+1F114 ; [*0334.0020.0004][.20DB.0020.000A][*0335.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER E
+2130 ; [.20DB.0020.000B] # SCRIPT CAPITAL E
+1D404 ; [.20DB.0020.000B] # MATHEMATICAL BOLD CAPITAL E
+1D438 ; [.20DB.0020.000B] # MATHEMATICAL ITALIC CAPITAL E
+1D46C ; [.20DB.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL E
+1D4D4 ; [.20DB.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL E
+1D508 ; [.20DB.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL E
+1D53C ; [.20DB.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL E
+1D570 ; [.20DB.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL E
+1D5A4 ; [.20DB.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL E
+1D5D8 ; [.20DB.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL E
+1D60C ; [.20DB.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL E
+1D640 ; [.20DB.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL E
+1D674 ; [.20DB.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL E
+24BA ; [.20DB.0020.000C] # CIRCLED LATIN CAPITAL LETTER E
+1F154 ; [.20DB.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER E
+1D49 ; [.20DB.0020.0014] # MODIFIER LETTER SMALL E
+2091 ; [.20DB.0020.0015] # LATIN SUBSCRIPT SMALL LETTER E
+1D31 ; [.20DB.0020.001D] # MODIFIER LETTER CAPITAL E
+1F134 ; [.20DB.0020.001D] # SQUARED LATIN CAPITAL LETTER E
+1F174 ; [.20DB.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER E
+00E9 ; [.20DB.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER E WITH ACUTE
+00C9 ; [.20DB.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER E WITH ACUTE
+00E8 ; [.20DB.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER E WITH GRAVE
+00C8 ; [.20DB.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER E WITH GRAVE
+0115 ; [.20DB.0020.0002][.0000.0026.0002] # LATIN SMALL LETTER E WITH BREVE
+0114 ; [.20DB.0020.0008][.0000.0026.0002] # LATIN CAPITAL LETTER E WITH BREVE
+00EA ; [.20DB.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX
+00CA ; [.20DB.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+1EBF ; [.20DB.0020.0002][.0000.0027.0002][.0000.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
+1EBE ; [.20DB.0020.0008][.0000.0027.0002][.0000.0024.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
+1EC1 ; [.20DB.0020.0002][.0000.0027.0002][.0000.0025.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
+1EC0 ; [.20DB.0020.0008][.0000.0027.0002][.0000.0025.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
+1EC5 ; [.20DB.0020.0002][.0000.0027.0002][.0000.002D.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
+1EC4 ; [.20DB.0020.0008][.0000.0027.0002][.0000.002D.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
+1EC3 ; [.20DB.0020.0002][.0000.0027.0002][.0000.003B.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+1EC2 ; [.20DB.0020.0008][.0000.0027.0002][.0000.003B.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+011B ; [.20DB.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER E WITH CARON
+011A ; [.20DB.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER E WITH CARON
+00EB ; [.20DB.0020.0002][.0000.002B.0002] # LATIN SMALL LETTER E WITH DIAERESIS
+00CB ; [.20DB.0020.0008][.0000.002B.0002] # LATIN CAPITAL LETTER E WITH DIAERESIS
+1EBD ; [.20DB.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER E WITH TILDE
+1EBC ; [.20DB.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER E WITH TILDE
+0117 ; [.20DB.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER E WITH DOT ABOVE
+0116 ; [.20DB.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER E WITH DOT ABOVE
+0229 ; [.20DB.0020.0002][.0000.0030.0002] # LATIN SMALL LETTER E WITH CEDILLA
+0228 ; [.20DB.0020.0008][.0000.0030.0002] # LATIN CAPITAL LETTER E WITH CEDILLA
+1E1D ; [.20DB.0020.0002][.0000.0030.0002][.0000.0026.0002] # LATIN SMALL LETTER E WITH CEDILLA AND BREVE
+1E1C ; [.20DB.0020.0008][.0000.0030.0002][.0000.0026.0002] # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
+0119 ; [.20DB.0020.0002][.0000.0031.0002] # LATIN SMALL LETTER E WITH OGONEK
+0118 ; [.20DB.0020.0008][.0000.0031.0002] # LATIN CAPITAL LETTER E WITH OGONEK
+0113 ; [.20DB.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER E WITH MACRON
+0112 ; [.20DB.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER E WITH MACRON
+1E17 ; [.20DB.0020.0002][.0000.0032.0002][.0000.0024.0002] # LATIN SMALL LETTER E WITH MACRON AND ACUTE
+1E16 ; [.20DB.0020.0008][.0000.0032.0002][.0000.0024.0002] # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
+1E15 ; [.20DB.0020.0002][.0000.0032.0002][.0000.0025.0002] # LATIN SMALL LETTER E WITH MACRON AND GRAVE
+1E14 ; [.20DB.0020.0008][.0000.0032.0002][.0000.0025.0002] # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
+1EBB ; [.20DB.0020.0002][.0000.003B.0002] # LATIN SMALL LETTER E WITH HOOK ABOVE
+1EBA ; [.20DB.0020.0008][.0000.003B.0002] # LATIN CAPITAL LETTER E WITH HOOK ABOVE
+0205 ; [.20DB.0020.0002][.0000.003C.0002] # LATIN SMALL LETTER E WITH DOUBLE GRAVE
+0204 ; [.20DB.0020.0008][.0000.003C.0002] # LATIN CAPITAL LETTER E WITH DOUBLE GRAVE
+0207 ; [.20DB.0020.0002][.0000.003E.0002] # LATIN SMALL LETTER E WITH INVERTED BREVE
+0206 ; [.20DB.0020.0008][.0000.003E.0002] # LATIN CAPITAL LETTER E WITH INVERTED BREVE
+1EB9 ; [.20DB.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER E WITH DOT BELOW
+1EB8 ; [.20DB.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER E WITH DOT BELOW
+1EC7 ; [.20DB.0020.0002][.0000.0042.0002][.0000.0027.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+1EC6 ; [.20DB.0020.0008][.0000.0042.0002][.0000.0027.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+1E19 ; [.20DB.0020.0002][.0000.0046.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW
+1E18 ; [.20DB.0020.0008][.0000.0046.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW
+1E1B ; [.20DB.0020.0002][.0000.0048.0002] # LATIN SMALL LETTER E WITH TILDE BELOW
+1E1A ; [.20DB.0020.0008][.0000.0048.0002] # LATIN CAPITAL LETTER E WITH TILDE BELOW
+32CD ; [.20DB.0020.001C][.2275.0020.001C][.2125.0020.001C] # SQUARE ERG
+32CE ; [.20DB.0020.001C][.2331.0020.001D] # SQUARE EV
+1D07 ; [.20DF.0020.0002] # LATIN LETTER SMALL CAPITAL E
+AB32 ; [.20E0.0020.0002] # LATIN SMALL LETTER BLACKLETTER E
+AB33 ; [.20E1.0020.0002] # LATIN SMALL LETTER BARRED E
+0247 ; [.20E2.0020.0002] # LATIN SMALL LETTER E WITH STROKE
+0246 ; [.20E2.0020.0008] # LATIN CAPITAL LETTER E WITH STROKE
+1D92 ; [.20E6.0020.0002] # LATIN SMALL LETTER E WITH RETROFLEX HOOK
+AB34 ; [.20E7.0020.0002] # LATIN SMALL LETTER E WITH FLOURISH
+2C78 ; [.20E8.0020.0002] # LATIN SMALL LETTER E WITH NOTCH
+01DD ; [.20E9.0020.0002] # LATIN SMALL LETTER TURNED E
+018E ; [.20E9.0020.0008] # LATIN CAPITAL LETTER REVERSED E
+1D32 ; [.20E9.0020.001D] # MODIFIER LETTER CAPITAL REVERSED E
+2C7B ; [.20ED.0020.0002] # LATIN LETTER SMALL CAPITAL TURNED E
+0259 ; [.20EE.0020.0002] # LATIN SMALL LETTER SCHWA
+1DEA ; [.20EE.0020.0004] # COMBINING LATIN SMALL LETTER SCHWA
+018F ; [.20EE.0020.0008] # LATIN CAPITAL LETTER SCHWA
+1D4A ; [.20EE.0020.0014] # MODIFIER LETTER SMALL SCHWA
+2094 ; [.20EE.0020.0015] # LATIN SUBSCRIPT SMALL LETTER SCHWA
+1D95 ; [.20F2.0020.0002] # LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK
+025B ; [.20F3.0020.0002] # LATIN SMALL LETTER OPEN E
+0190 ; [.20F3.0020.0008] # LATIN CAPITAL LETTER OPEN E
+2107 ; [.20F3.0020.000A] # EULER CONSTANT
+1D4B ; [.20F3.0020.0014] # MODIFIER LETTER SMALL OPEN E
+1D93 ; [.20F7.0020.0002] # LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK
+0258 ; [.20F8.0020.0002] # LATIN SMALL LETTER REVERSED E
+1078E ; [.20F8.0020.0014] # MODIFIER LETTER SMALL REVERSED E
+025A ; [.20FC.0020.0002] # LATIN SMALL LETTER SCHWA WITH HOOK
+025C ; [.2100.0020.0002] # LATIN SMALL LETTER REVERSED OPEN E
+A7AB ; [.2100.0020.0008] # LATIN CAPITAL LETTER REVERSED OPEN E
+1D9F ; [.2100.0020.0014] # MODIFIER LETTER SMALL REVERSED OPEN E
+1D94 ; [.2104.0020.0002] # LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK
+1D08 ; [.2105.0020.0002] # LATIN SMALL LETTER TURNED OPEN E
+1D4C ; [.2105.0020.0014] # MODIFIER LETTER SMALL TURNED OPEN E
+025D ; [.2106.0020.0002] # LATIN SMALL LETTER REVERSED OPEN E WITH HOOK
+025E ; [.210A.0020.0002] # LATIN SMALL LETTER CLOSED REVERSED OPEN E
+1078F ; [.210A.0020.0014] # MODIFIER LETTER SMALL CLOSED REVERSED OPEN E
+029A ; [.210E.0020.0002] # LATIN SMALL LETTER CLOSED OPEN E
+0264 ; [.2112.0020.0002] # LATIN SMALL LETTER RAMS HORN
+10791 ; [.2112.0020.0014] # MODIFIER LETTER SMALL RAMS HORN
+0066 ; [.2116.0020.0002] # LATIN SMALL LETTER F
+FF46 ; [.2116.0020.0003] # FULLWIDTH LATIN SMALL LETTER F
+1DEB ; [.2116.0020.0004] # COMBINING LATIN SMALL LETTER F
+24A1 ; [*0334.0020.0004][.2116.0020.0004][*0335.0020.0004] # PARENTHESIZED LATIN SMALL LETTER F
+1D41F ; [.2116.0020.0005] # MATHEMATICAL BOLD SMALL F
+1D453 ; [.2116.0020.0005] # MATHEMATICAL ITALIC SMALL F
+1D487 ; [.2116.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL F
+1D4BB ; [.2116.0020.0005] # MATHEMATICAL SCRIPT SMALL F
+1D4EF ; [.2116.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL F
+1D523 ; [.2116.0020.0005] # MATHEMATICAL FRAKTUR SMALL F
+1D557 ; [.2116.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL F
+1D58B ; [.2116.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL F
+1D5BF ; [.2116.0020.0005] # MATHEMATICAL SANS-SERIF SMALL F
+1D5F3 ; [.2116.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL F
+1D627 ; [.2116.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL F
+1D65B ; [.2116.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL F
+1D68F ; [.2116.0020.0005] # MATHEMATICAL MONOSPACE SMALL F
+24D5 ; [.2116.0020.0006] # CIRCLED LATIN SMALL LETTER F
+0046 ; [.2116.0020.0008] # LATIN CAPITAL LETTER F
+FF26 ; [.2116.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER F
+2109 ; [*054C.0020.0004][.2116.0020.000A] # DEGREE FAHRENHEIT
+1F115 ; [*0334.0020.0004][.2116.0020.000A][*0335.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER F
+2131 ; [.2116.0020.000B] # SCRIPT CAPITAL F
+1D405 ; [.2116.0020.000B] # MATHEMATICAL BOLD CAPITAL F
+1D439 ; [.2116.0020.000B] # MATHEMATICAL ITALIC CAPITAL F
+1D46D ; [.2116.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL F
+1D4D5 ; [.2116.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL F
+1D509 ; [.2116.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL F
+1D53D ; [.2116.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL F
+1D571 ; [.2116.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL F
+1D5A5 ; [.2116.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL F
+1D5D9 ; [.2116.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL F
+1D60D ; [.2116.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL F
+1D641 ; [.2116.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL F
+1D675 ; [.2116.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL F
+24BB ; [.2116.0020.000C] # CIRCLED LATIN CAPITAL LETTER F
+1F155 ; [.2116.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER F
+1DA0 ; [.2116.0020.0014] # MODIFIER LETTER SMALL F
+A7F3 ; [.2116.0020.001D] # MODIFIER LETTER CAPITAL F
+1F135 ; [.2116.0020.001D] # SQUARED LATIN CAPITAL LETTER F
+1F175 ; [.2116.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER F
+1E1F ; [.2116.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER F WITH DOT ABOVE
+1E1E ; [.2116.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER F WITH DOT ABOVE
+A77C ; [.2116.0020.0004][.0000.0119.0004] # LATIN SMALL LETTER INSULAR F
+A77B ; [.2116.0020.000A][.0000.0119.0004] # LATIN CAPITAL LETTER INSULAR F
+213B ; [.2116.0020.000A][.2075.0020.000A][.234D.0020.000A] # FACSIMILE SIGN
+FB00 ; [.2116.0020.0004][.2116.0020.0004] # LATIN SMALL LIGATURE FF
+FB03 ; [.2116.0020.0004][.2116.0020.0004][.2167.0020.0004] # LATIN SMALL LIGATURE FFI
+FB04 ; [.2116.0020.0004][.2116.0020.0004][.21B0.0020.0004] # LATIN SMALL LIGATURE FFL
+FB01 ; [.2116.0020.0004][.2167.0020.0004] # LATIN SMALL LIGATURE FI
+FB02 ; [.2116.0020.0004][.21B0.0020.0004] # LATIN SMALL LIGATURE FL
+3399 ; [.2116.0020.001C][.21E8.0020.001C] # SQUARE FM
+02A9 ; [.2116.0020.0004][.2216.0020.0004] # LATIN SMALL LETTER FENG DIGRAPH
+10790 ; [.2116.0020.0014][.2216.0020.0014] # MODIFIER LETTER SMALL FENG DIGRAPH
+1DF00 ; [.2116.0020.0004][.0000.011A.0004][.2216.0020.0004] # LATIN SMALL LETTER FENG DIGRAPH WITH TRILL
+1F193 ; [.2116.0020.001D][.2275.0020.001D][.20DB.0020.001D][.20DB.0020.001D] # SQUARED FREE
+A730 ; [.211A.0020.0002] # LATIN LETTER SMALL CAPITAL F
+AB35 ; [.211B.0020.0002] # LATIN SMALL LETTER LENIS F
+A799 ; [.211C.0020.0002] # LATIN SMALL LETTER F WITH STROKE
+A798 ; [.211C.0020.0008] # LATIN CAPITAL LETTER F WITH STROKE
+1D6E ; [.211D.0020.0002] # LATIN SMALL LETTER F WITH MIDDLE TILDE
+1D82 ; [.211E.0020.0002] # LATIN SMALL LETTER F WITH PALATAL HOOK
+0192 ; [.211F.0020.0002] # LATIN SMALL LETTER F WITH HOOK
+0191 ; [.211F.0020.0008] # LATIN CAPITAL LETTER F WITH HOOK
+214E ; [.2123.0020.0002] # TURNED SMALL F
+2132 ; [.2123.0020.0008] # TURNED CAPITAL F
+A7FB ; [.2124.0020.0002] # LATIN EPIGRAPHIC LETTER REVERSED F
+0067 ; [.2125.0020.0002] # LATIN SMALL LETTER G
+FF47 ; [.2125.0020.0003] # FULLWIDTH LATIN SMALL LETTER G
+1DDA ; [.2125.0020.0004] # COMBINING LATIN SMALL LETTER G
+24A2 ; [*0334.0020.0004][.2125.0020.0004][*0335.0020.0004] # PARENTHESIZED LATIN SMALL LETTER G
+210A ; [.2125.0020.0005] # SCRIPT SMALL G
+1D420 ; [.2125.0020.0005] # MATHEMATICAL BOLD SMALL G
+1D454 ; [.2125.0020.0005] # MATHEMATICAL ITALIC SMALL G
+1D488 ; [.2125.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL G
+1D4F0 ; [.2125.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL G
+1D524 ; [.2125.0020.0005] # MATHEMATICAL FRAKTUR SMALL G
+1D558 ; [.2125.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL G
+1D58C ; [.2125.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL G
+1D5C0 ; [.2125.0020.0005] # MATHEMATICAL SANS-SERIF SMALL G
+1D5F4 ; [.2125.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL G
+1D628 ; [.2125.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL G
+1D65C ; [.2125.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL G
+1D690 ; [.2125.0020.0005] # MATHEMATICAL MONOSPACE SMALL G
+24D6 ; [.2125.0020.0006] # CIRCLED LATIN SMALL LETTER G
+0047 ; [.2125.0020.0008] # LATIN CAPITAL LETTER G
+FF27 ; [.2125.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER G
+1F116 ; [*0334.0020.0004][.2125.0020.000A][*0335.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER G
+1D406 ; [.2125.0020.000B] # MATHEMATICAL BOLD CAPITAL G
+1D43A ; [.2125.0020.000B] # MATHEMATICAL ITALIC CAPITAL G
+1D46E ; [.2125.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL G
+1D4A2 ; [.2125.0020.000B] # MATHEMATICAL SCRIPT CAPITAL G
+1D4D6 ; [.2125.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL G
+1D50A ; [.2125.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL G
+1D53E ; [.2125.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL G
+1D572 ; [.2125.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL G
+1D5A6 ; [.2125.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL G
+1D5DA ; [.2125.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL G
+1D60E ; [.2125.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL G
+1D642 ; [.2125.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL G
+1D676 ; [.2125.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL G
+24BC ; [.2125.0020.000C] # CIRCLED LATIN CAPITAL LETTER G
+1F156 ; [.2125.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER G
+1D4D ; [.2125.0020.0014] # MODIFIER LETTER SMALL G
+1D33 ; [.2125.0020.001D] # MODIFIER LETTER CAPITAL G
+1F136 ; [.2125.0020.001D] # SQUARED LATIN CAPITAL LETTER G
+1F176 ; [.2125.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER G
+01F5 ; [.2125.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER G WITH ACUTE
+01F4 ; [.2125.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER G WITH ACUTE
+011F ; [.2125.0020.0002][.0000.0026.0002] # LATIN SMALL LETTER G WITH BREVE
+011E ; [.2125.0020.0008][.0000.0026.0002] # LATIN CAPITAL LETTER G WITH BREVE
+011D ; [.2125.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER G WITH CIRCUMFLEX
+011C ; [.2125.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER G WITH CIRCUMFLEX
+01E7 ; [.2125.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER G WITH CARON
+01E6 ; [.2125.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER G WITH CARON
+0121 ; [.2125.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER G WITH DOT ABOVE
+0120 ; [.2125.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER G WITH DOT ABOVE
+0123 ; [.2125.0020.0002][.0000.0030.0002] # LATIN SMALL LETTER G WITH CEDILLA
+0122 ; [.2125.0020.0008][.0000.0030.0002] # LATIN CAPITAL LETTER G WITH CEDILLA
+1E21 ; [.2125.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER G WITH MACRON
+1E20 ; [.2125.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER G WITH MACRON
+A7A1 ; [.2125.0020.0004][.0000.0035.0004] # LATIN SMALL LETTER G WITH OBLIQUE STROKE
+A7A0 ; [.2125.0020.000A][.0000.0035.0004] # LATIN CAPITAL LETTER G WITH OBLIQUE STROKE
+1ACC ; [.2125.0020.0004][.0000.0119.0004] # COMBINING LATIN SMALL LETTER INSULAR G
+1D79 ; [.2125.0020.0004][.0000.0119.0004] # LATIN SMALL LETTER INSULAR G
+A77D ; [.2125.0020.000A][.0000.0119.0004] # LATIN CAPITAL LETTER INSULAR G
+33FF ; [.2125.0020.001C][.2075.0020.001C][.21B0.0020.001C] # SQUARE GAL
+3387 ; [.2125.0020.001D][.208F.0020.001D] # SQUARE GB
+3393 ; [.2125.0020.001D][.214C.0020.001D][.236F.0020.001C] # SQUARE GHZ
+33AC ; [.2125.0020.001D][.224D.0020.001D][.2075.0020.001C] # SQUARE GPA
+33C9 ; [.2125.0020.001D][.2359.0020.001C] # SQUARE GY
+A7D1 ; [.2129.0020.0002] # LATIN SMALL LETTER CLOSED INSULAR G
+A7D0 ; [.2129.0020.0008] # LATIN CAPITAL LETTER CLOSED INSULAR G
+0261 ; [.212A.0020.0002] # LATIN SMALL LETTER SCRIPT G
+A7AC ; [.212A.0020.0008] # LATIN CAPITAL LETTER SCRIPT G
+1DA2 ; [.212A.0020.0014] # MODIFIER LETTER SMALL SCRIPT G
+1DF01 ; [.212E.0020.0002] # LATIN SMALL LETTER REVERSED SCRIPT G
+AB36 ; [.212F.0020.0002] # LATIN SMALL LETTER SCRIPT G WITH CROSSED-TAIL
+0262 ; [.2130.0020.0002] # LATIN LETTER SMALL CAPITAL G
+1DDB ; [.2130.0020.0004] # COMBINING LATIN LETTER SMALL CAPITAL G
+10792 ; [.2130.0020.0014] # MODIFIER LETTER SMALL CAPITAL G
+01E5 ; [.2134.0020.0002] # LATIN SMALL LETTER G WITH STROKE
+01E4 ; [.2134.0020.0008] # LATIN CAPITAL LETTER G WITH STROKE
+1D83 ; [.2138.0020.0002] # LATIN SMALL LETTER G WITH PALATAL HOOK
+0260 ; [.2139.0020.0002] # LATIN SMALL LETTER G WITH HOOK
+0193 ; [.2139.0020.0008] # LATIN CAPITAL LETTER G WITH HOOK
+10793 ; [.2139.0020.0014] # MODIFIER LETTER SMALL G WITH HOOK
+029B ; [.213D.0020.0002] # LATIN LETTER SMALL CAPITAL G WITH HOOK
+10794 ; [.213D.0020.0014] # MODIFIER LETTER SMALL CAPITAL G WITH HOOK
+1D77 ; [.2141.0020.0002] # LATIN SMALL LETTER TURNED G
+1DF02 ; [.2142.0020.0002] # LATIN LETTER SMALL CAPITAL TURNED G
+A77F ; [.2143.0020.0002] # LATIN SMALL LETTER TURNED INSULAR G
+A77E ; [.2143.0020.0008] # LATIN CAPITAL LETTER TURNED INSULAR G
+0263 ; [.2144.0020.0002] # LATIN SMALL LETTER GAMMA
+0194 ; [.2144.0020.0008] # LATIN CAPITAL LETTER GAMMA
+02E0 ; [.2144.0020.0014] # MODIFIER LETTER SMALL GAMMA
+01A3 ; [.2148.0020.0002] # LATIN SMALL LETTER OI
+01A2 ; [.2148.0020.0008] # LATIN CAPITAL LETTER OI
+0068 ; [.214C.0020.0002] # LATIN SMALL LETTER H
+FF48 ; [.214C.0020.0003] # FULLWIDTH LATIN SMALL LETTER H
+036A ; [.214C.0020.0004] # COMBINING LATIN SMALL LETTER H
+24A3 ; [*0334.0020.0004][.214C.0020.0004][*0335.0020.0004] # PARENTHESIZED LATIN SMALL LETTER H
+210E ; [.214C.0020.0005] # PLANCK CONSTANT
+1D421 ; [.214C.0020.0005] # MATHEMATICAL BOLD SMALL H
+1D489 ; [.214C.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL H
+1D4BD ; [.214C.0020.0005] # MATHEMATICAL SCRIPT SMALL H
+1D4F1 ; [.214C.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL H
+1D525 ; [.214C.0020.0005] # MATHEMATICAL FRAKTUR SMALL H
+1D559 ; [.214C.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL H
+1D58D ; [.214C.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL H
+1D5C1 ; [.214C.0020.0005] # MATHEMATICAL SANS-SERIF SMALL H
+1D5F5 ; [.214C.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL H
+1D629 ; [.214C.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL H
+1D65D ; [.214C.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL H
+1D691 ; [.214C.0020.0005] # MATHEMATICAL MONOSPACE SMALL H
+24D7 ; [.214C.0020.0006] # CIRCLED LATIN SMALL LETTER H
+0048 ; [.214C.0020.0008] # LATIN CAPITAL LETTER H
+FF28 ; [.214C.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER H
+1F117 ; [*0334.0020.0004][.214C.0020.000A][*0335.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER H
+210B ; [.214C.0020.000B] # SCRIPT CAPITAL H
+210C ; [.214C.0020.000B] # BLACK-LETTER CAPITAL H
+210D ; [.214C.0020.000B] # DOUBLE-STRUCK CAPITAL H
+1D407 ; [.214C.0020.000B] # MATHEMATICAL BOLD CAPITAL H
+1D43B ; [.214C.0020.000B] # MATHEMATICAL ITALIC CAPITAL H
+1D46F ; [.214C.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL H
+1D4D7 ; [.214C.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL H
+1D573 ; [.214C.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL H
+1D5A7 ; [.214C.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL H
+1D5DB ; [.214C.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL H
+1D60F ; [.214C.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL H
+1D643 ; [.214C.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL H
+1D677 ; [.214C.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL H
+24BD ; [.214C.0020.000C] # CIRCLED LATIN CAPITAL LETTER H
+1F157 ; [.214C.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER H
+02B0 ; [.214C.0020.0014] # MODIFIER LETTER SMALL H
+2095 ; [.214C.0020.0015] # LATIN SUBSCRIPT SMALL LETTER H
+1D34 ; [.214C.0020.001D] # MODIFIER LETTER CAPITAL H
+1F137 ; [.214C.0020.001D] # SQUARED LATIN CAPITAL LETTER H
+1F177 ; [.214C.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER H
+0125 ; [.214C.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER H WITH CIRCUMFLEX
+0124 ; [.214C.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER H WITH CIRCUMFLEX
+021F ; [.214C.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER H WITH CARON
+021E ; [.214C.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER H WITH CARON
+1E27 ; [.214C.0020.0002][.0000.002B.0002] # LATIN SMALL LETTER H WITH DIAERESIS
+1E26 ; [.214C.0020.0008][.0000.002B.0002] # LATIN CAPITAL LETTER H WITH DIAERESIS
+1E23 ; [.214C.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER H WITH DOT ABOVE
+1E22 ; [.214C.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER H WITH DOT ABOVE
+1E29 ; [.214C.0020.0002][.0000.0030.0002] # LATIN SMALL LETTER H WITH CEDILLA
+1E28 ; [.214C.0020.0008][.0000.0030.0002] # LATIN CAPITAL LETTER H WITH CEDILLA
+0127 ; [.214C.0020.0002][.0000.0039.0002] # LATIN SMALL LETTER H WITH STROKE
+210F ; [.214C.0020.0002][.0000.0039.0002] # PLANCK CONSTANT OVER TWO PI
+0126 ; [.214C.0020.0008][.0000.0039.0002] # LATIN CAPITAL LETTER H WITH STROKE
+A7F8 ; [.214C.0020.0014][.0000.0039.0014] # MODIFIER LETTER CAPITAL H WITH STROKE
+10795 ; [.214C.0020.0014][.0000.0039.0014] # MODIFIER LETTER SMALL H WITH STROKE
+1E25 ; [.214C.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER H WITH DOT BELOW
+1E24 ; [.214C.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER H WITH DOT BELOW
+1E2B ; [.214C.0020.0002][.0000.0047.0002] # LATIN SMALL LETTER H WITH BREVE BELOW
+1E2A ; [.214C.0020.0008][.0000.0047.0002] # LATIN CAPITAL LETTER H WITH BREVE BELOW
+1E96 ; [.214C.0020.0002][.0000.0049.0002] # LATIN SMALL LETTER H WITH LINE BELOW
+33CA ; [.214C.0020.001C][.2075.0020.001C] # SQUARE HA
+1F1A6 ; [.214C.0020.001D][.20A9.0020.001C] # SQUARED HC
+1F1A7 ; [.214C.0020.001D][.20BF.0020.001C][.2275.0020.001D] # SQUARED HDR
+32CC ; [.214C.0020.001D][.2125.0020.001C] # SQUARE HG
+1F1A8 ; [.214C.0020.001D][.2167.0020.001C][*0209.0020.001C][.2275.0020.001D][.20DB.0020.001C][.22B6.0020.001C] # SQUARED HI-RES
+33CB ; [.214C.0020.001D][.224D.0020.001D] # SQUARE HP
+3371 ; [.214C.0020.001C][.224D.0020.001D][.2075.0020.001C] # SQUARE HPA
+1F14A ; [.214C.0020.001D][.2331.0020.001D] # SQUARED HV
+3390 ; [.214C.0020.001D][.236F.0020.001C] # SQUARE HZ
+029C ; [.2150.0020.0002] # LATIN LETTER SMALL CAPITAL H
+10796 ; [.2150.0020.0014] # MODIFIER LETTER SMALL CAPITAL H
+0195 ; [.2154.0020.0002] # LATIN SMALL LETTER HV
+01F6 ; [.2154.0020.0008] # LATIN CAPITAL LETTER HWAIR
+A795 ; [.2158.0020.0002] # LATIN SMALL LETTER H WITH PALATAL HOOK
+0266 ; [.2159.0020.0002] # LATIN SMALL LETTER H WITH HOOK
+A7AA ; [.2159.0020.0008] # LATIN CAPITAL LETTER H WITH HOOK
+02B1 ; [.2159.0020.0014] # MODIFIER LETTER SMALL H WITH HOOK
+2C68 ; [.215D.0020.0002] # LATIN SMALL LETTER H WITH DESCENDER
+2C67 ; [.215D.0020.0008] # LATIN CAPITAL LETTER H WITH DESCENDER
+2C76 ; [.215E.0020.0002] # LATIN SMALL LETTER HALF H
+2C75 ; [.215E.0020.0008] # LATIN CAPITAL LETTER HALF H
+A7F6 ; [.215F.0020.0002] # LATIN SMALL LETTER REVERSED HALF H
+A7F5 ; [.215F.0020.0008] # LATIN CAPITAL LETTER REVERSED HALF H
+A727 ; [.2160.0020.0002] # LATIN SMALL LETTER HENG
+A726 ; [.2160.0020.0008] # LATIN CAPITAL LETTER HENG
+AB5C ; [.2160.0020.0014] # MODIFIER LETTER SMALL HENG
+0267 ; [.2161.0020.0002] # LATIN SMALL LETTER HENG WITH HOOK
+10797 ; [.2161.0020.0014] # MODIFIER LETTER SMALL HENG WITH HOOK
+02BB ; [.2165.0020.0002] # MODIFIER LETTER TURNED COMMA
+02BD ; [.2166.0020.0002] # MODIFIER LETTER REVERSED COMMA
+0069 ; [.2167.0020.0002] # LATIN SMALL LETTER I
+FF49 ; [.2167.0020.0003] # FULLWIDTH LATIN SMALL LETTER I
+0365 ; [.2167.0020.0004] # COMBINING LATIN SMALL LETTER I
+2170 ; [.2167.0020.0004] # SMALL ROMAN NUMERAL ONE
+24A4 ; [*0334.0020.0004][.2167.0020.0004][*0335.0020.0004] # PARENTHESIZED LATIN SMALL LETTER I
+2139 ; [.2167.0020.0005] # INFORMATION SOURCE
+2148 ; [.2167.0020.0005] # DOUBLE-STRUCK ITALIC SMALL I
+1D422 ; [.2167.0020.0005] # MATHEMATICAL BOLD SMALL I
+1D456 ; [.2167.0020.0005] # MATHEMATICAL ITALIC SMALL I
+1D48A ; [.2167.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL I
+1D4BE ; [.2167.0020.0005] # MATHEMATICAL SCRIPT SMALL I
+1D4F2 ; [.2167.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL I
+1D526 ; [.2167.0020.0005] # MATHEMATICAL FRAKTUR SMALL I
+1D55A ; [.2167.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL I
+1D58E ; [.2167.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL I
+1D5C2 ; [.2167.0020.0005] # MATHEMATICAL SANS-SERIF SMALL I
+1D5F6 ; [.2167.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL I
+1D62A ; [.2167.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL I
+1D65E ; [.2167.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL I
+1D692 ; [.2167.0020.0005] # MATHEMATICAL MONOSPACE SMALL I
+24D8 ; [.2167.0020.0006] # CIRCLED LATIN SMALL LETTER I
+0049 ; [.2167.0020.0008] # LATIN CAPITAL LETTER I
+FF29 ; [.2167.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER I
+2160 ; [.2167.0020.000A] # ROMAN NUMERAL ONE
+1F118 ; [*0334.0020.0004][.2167.0020.000A][*0335.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER I
+2110 ; [.2167.0020.000B] # SCRIPT CAPITAL I
+2111 ; [.2167.0020.000B] # BLACK-LETTER CAPITAL I
+1D408 ; [.2167.0020.000B] # MATHEMATICAL BOLD CAPITAL I
+1D43C ; [.2167.0020.000B] # MATHEMATICAL ITALIC CAPITAL I
+1D470 ; [.2167.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL I
+1D4D8 ; [.2167.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL I
+1D540 ; [.2167.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL I
+1D574 ; [.2167.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL I
+1D5A8 ; [.2167.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL I
+1D5DC ; [.2167.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL I
+1D610 ; [.2167.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL I
+1D644 ; [.2167.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL I
+1D678 ; [.2167.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL I
+24BE ; [.2167.0020.000C] # CIRCLED LATIN CAPITAL LETTER I
+1F158 ; [.2167.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER I
+2071 ; [.2167.0020.0014] # SUPERSCRIPT LATIN SMALL LETTER I
+1D62 ; [.2167.0020.0015] # LATIN SUBSCRIPT SMALL LETTER I
+1D35 ; [.2167.0020.001D] # MODIFIER LETTER CAPITAL I
+1F138 ; [.2167.0020.001D] # SQUARED LATIN CAPITAL LETTER I
+1F178 ; [.2167.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER I
+00ED ; [.2167.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER I WITH ACUTE
+00CD ; [.2167.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER I WITH ACUTE
+00EC ; [.2167.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER I WITH GRAVE
+00CC ; [.2167.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER I WITH GRAVE
+012D ; [.2167.0020.0002][.0000.0026.0002] # LATIN SMALL LETTER I WITH BREVE
+012C ; [.2167.0020.0008][.0000.0026.0002] # LATIN CAPITAL LETTER I WITH BREVE
+00EE ; [.2167.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER I WITH CIRCUMFLEX
+00CE ; [.2167.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+01D0 ; [.2167.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER I WITH CARON
+01CF ; [.2167.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER I WITH CARON
+00EF ; [.2167.0020.0002][.0000.002B.0002] # LATIN SMALL LETTER I WITH DIAERESIS
+00CF ; [.2167.0020.0008][.0000.002B.0002] # LATIN CAPITAL LETTER I WITH DIAERESIS
+1E2F ; [.2167.0020.0002][.0000.002B.0002][.0000.0024.0002] # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
+1E2E ; [.2167.0020.0008][.0000.002B.0002][.0000.0024.0002] # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
+0129 ; [.2167.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER I WITH TILDE
+0128 ; [.2167.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER I WITH TILDE
+0130 ; [.2167.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER I WITH DOT ABOVE
+012F ; [.2167.0020.0002][.0000.0031.0002] # LATIN SMALL LETTER I WITH OGONEK
+012E ; [.2167.0020.0008][.0000.0031.0002] # LATIN CAPITAL LETTER I WITH OGONEK
+012B ; [.2167.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER I WITH MACRON
+012A ; [.2167.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER I WITH MACRON
+1EC9 ; [.2167.0020.0002][.0000.003B.0002] # LATIN SMALL LETTER I WITH HOOK ABOVE
+1EC8 ; [.2167.0020.0008][.0000.003B.0002] # LATIN CAPITAL LETTER I WITH HOOK ABOVE
+0209 ; [.2167.0020.0002][.0000.003C.0002] # LATIN SMALL LETTER I WITH DOUBLE GRAVE
+0208 ; [.2167.0020.0008][.0000.003C.0002] # LATIN CAPITAL LETTER I WITH DOUBLE GRAVE
+020B ; [.2167.0020.0002][.0000.003E.0002] # LATIN SMALL LETTER I WITH INVERTED BREVE
+020A ; [.2167.0020.0008][.0000.003E.0002] # LATIN CAPITAL LETTER I WITH INVERTED BREVE
+1ECB ; [.2167.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER I WITH DOT BELOW
+1ECA ; [.2167.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER I WITH DOT BELOW
+1E2D ; [.2167.0020.0002][.0000.0048.0002] # LATIN SMALL LETTER I WITH TILDE BELOW
+1E2C ; [.2167.0020.0008][.0000.0048.0002] # LATIN CAPITAL LETTER I WITH TILDE BELOW
+1F18B ; [.2167.0020.001D][.20A9.0020.001D] # NEGATIVE SQUARED IC
+1F194 ; [.2167.0020.001D][.20BF.0020.001D] # SQUARED ID
+2171 ; [.2167.0020.0004][.2167.0020.0004] # SMALL ROMAN NUMERAL TWO
+2161 ; [.2167.0020.000A][.2167.0020.000A] # ROMAN NUMERAL TWO
+2172 ; [.2167.0020.0004][.2167.0020.0004][.2167.0020.0004] # SMALL ROMAN NUMERAL THREE
+2162 ; [.2167.0020.000A][.2167.0020.000A][.2167.0020.000A] # ROMAN NUMERAL THREE
+0133 ; [.2167.0020.0004][.2183.0020.0004] # LATIN SMALL LIGATURE IJ
+0132 ; [.2167.0020.000A][.2183.0020.000A] # LATIN CAPITAL LIGATURE IJ
+33CC ; [.2167.0020.001C][.21F7.0020.001C] # SQUARE IN
+337A ; [.2167.0020.001D][.2301.0020.001D] # SQUARE IU
+2173 ; [.2167.0020.0004][.2331.0020.0004] # SMALL ROMAN NUMERAL FOUR
+2163 ; [.2167.0020.000A][.2331.0020.000A] # ROMAN NUMERAL FOUR
+2178 ; [.2167.0020.0004][.234D.0020.0004] # SMALL ROMAN NUMERAL NINE
+2168 ; [.2167.0020.000A][.234D.0020.000A] # ROMAN NUMERAL NINE
+0131 ; [.216B.0020.0002] # LATIN SMALL LETTER DOTLESS I
+1D6A4 ; [.216B.0020.0005] # MATHEMATICAL ITALIC SMALL DOTLESS I
+026A ; [.216F.0020.0002] # LATIN LETTER SMALL CAPITAL I
+A7AE ; [.216F.0020.0008] # LATIN CAPITAL LETTER SMALL CAPITAL I
+1DA6 ; [.216F.0020.0014] # MODIFIER LETTER SMALL CAPITAL I
+A7FE ; [.2173.0020.0002] # LATIN EPIGRAPHIC LETTER I LONGA
+A7F7 ; [.2174.0020.0002] # LATIN EPIGRAPHIC LETTER SIDEWAYS I
+1D09 ; [.2175.0020.0002] # LATIN SMALL LETTER TURNED I
+1D4E ; [.2175.0020.0014] # MODIFIER LETTER SMALL TURNED I
+0268 ; [.2176.0020.0002] # LATIN SMALL LETTER I WITH STROKE
+0197 ; [.2176.0020.0008] # LATIN CAPITAL LETTER I WITH STROKE
+1DA4 ; [.2176.0020.0014] # MODIFIER LETTER SMALL I WITH STROKE
+1D7B ; [.217A.0020.0002] # LATIN SMALL CAPITAL LETTER I WITH STROKE
+1DA7 ; [.217A.0020.0014] # MODIFIER LETTER SMALL CAPITAL I WITH STROKE
+1DF1A ; [.217B.0020.0002] # LATIN SMALL LETTER I WITH STROKE AND RETROFLEX HOOK
+1D96 ; [.217C.0020.0002] # LATIN SMALL LETTER I WITH RETROFLEX HOOK
+A7BD ; [.217D.0020.0002] # LATIN SMALL LETTER GLOTTAL I
+A7BC ; [.217D.0020.0008] # LATIN CAPITAL LETTER GLOTTAL I
+0269 ; [.217E.0020.0002] # LATIN SMALL LETTER IOTA
+0196 ; [.217E.0020.0008] # LATIN CAPITAL LETTER IOTA
+1DA5 ; [.217E.0020.0014] # MODIFIER LETTER SMALL IOTA
+1D7C ; [.2182.0020.0002] # LATIN SMALL LETTER IOTA WITH STROKE
+006A ; [.2183.0020.0002] # LATIN SMALL LETTER J
+FF4A ; [.2183.0020.0003] # FULLWIDTH LATIN SMALL LETTER J
+24A5 ; [*0334.0020.0004][.2183.0020.0004][*0335.0020.0004] # PARENTHESIZED LATIN SMALL LETTER J
+2149 ; [.2183.0020.0005] # DOUBLE-STRUCK ITALIC SMALL J
+1D423 ; [.2183.0020.0005] # MATHEMATICAL BOLD SMALL J
+1D457 ; [.2183.0020.0005] # MATHEMATICAL ITALIC SMALL J
+1D48B ; [.2183.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL J
+1D4BF ; [.2183.0020.0005] # MATHEMATICAL SCRIPT SMALL J
+1D4F3 ; [.2183.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL J
+1D527 ; [.2183.0020.0005] # MATHEMATICAL FRAKTUR SMALL J
+1D55B ; [.2183.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL J
+1D58F ; [.2183.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL J
+1D5C3 ; [.2183.0020.0005] # MATHEMATICAL SANS-SERIF SMALL J
+1D5F7 ; [.2183.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL J
+1D62B ; [.2183.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL J
+1D65F ; [.2183.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL J
+1D693 ; [.2183.0020.0005] # MATHEMATICAL MONOSPACE SMALL J
+24D9 ; [.2183.0020.0006] # CIRCLED LATIN SMALL LETTER J
+004A ; [.2183.0020.0008] # LATIN CAPITAL LETTER J
+FF2A ; [.2183.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER J
+1F119 ; [*0334.0020.0004][.2183.0020.000A][*0335.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER J
+1D409 ; [.2183.0020.000B] # MATHEMATICAL BOLD CAPITAL J
+1D43D ; [.2183.0020.000B] # MATHEMATICAL ITALIC CAPITAL J
+1D471 ; [.2183.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL J
+1D4A5 ; [.2183.0020.000B] # MATHEMATICAL SCRIPT CAPITAL J
+1D4D9 ; [.2183.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL J
+1D50D ; [.2183.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL J
+1D541 ; [.2183.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL J
+1D575 ; [.2183.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL J
+1D5A9 ; [.2183.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL J
+1D5DD ; [.2183.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL J
+1D611 ; [.2183.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL J
+1D645 ; [.2183.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL J
+1D679 ; [.2183.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL J
+24BF ; [.2183.0020.000C] # CIRCLED LATIN CAPITAL LETTER J
+1F159 ; [.2183.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER J
+02B2 ; [.2183.0020.0014] # MODIFIER LETTER SMALL J
+2C7C ; [.2183.0020.0015] # LATIN SUBSCRIPT SMALL LETTER J
+1D36 ; [.2183.0020.001D] # MODIFIER LETTER CAPITAL J
+1F139 ; [.2183.0020.001D] # SQUARED LATIN CAPITAL LETTER J
+1F179 ; [.2183.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER J
+0135 ; [.2183.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER J WITH CIRCUMFLEX
+0134 ; [.2183.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER J WITH CIRCUMFLEX
+01F0 ; [.2183.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER J WITH CARON
+0237 ; [.2187.0020.0002] # LATIN SMALL LETTER DOTLESS J
+1D6A5 ; [.2187.0020.0005] # MATHEMATICAL ITALIC SMALL DOTLESS J
+1D0A ; [.218B.0020.0002] # LATIN LETTER SMALL CAPITAL J
+0249 ; [.218C.0020.0002] # LATIN SMALL LETTER J WITH STROKE
+0248 ; [.218C.0020.0008] # LATIN CAPITAL LETTER J WITH STROKE
+029D ; [.2190.0020.0002] # LATIN SMALL LETTER J WITH CROSSED-TAIL
+A7B2 ; [.2190.0020.0008] # LATIN CAPITAL LETTER J WITH CROSSED-TAIL
+1DA8 ; [.2190.0020.0014] # MODIFIER LETTER SMALL J WITH CROSSED-TAIL
+025F ; [.2194.0020.0002] # LATIN SMALL LETTER DOTLESS J WITH STROKE
+1DA1 ; [.2194.0020.0014] # MODIFIER LETTER SMALL DOTLESS J WITH STROKE
+0284 ; [.2198.0020.0002] # LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK
+10798 ; [.2198.0020.0014] # MODIFIER LETTER SMALL DOTLESS J WITH STROKE AND HOOK
+006B ; [.219C.0020.0002] # LATIN SMALL LETTER K
+FF4B ; [.219C.0020.0003] # FULLWIDTH LATIN SMALL LETTER K
+1DDC ; [.219C.0020.0004] # COMBINING LATIN SMALL LETTER K
+24A6 ; [*0334.0020.0004][.219C.0020.0004][*0335.0020.0004] # PARENTHESIZED LATIN SMALL LETTER K
+1D424 ; [.219C.0020.0005] # MATHEMATICAL BOLD SMALL K
+1D458 ; [.219C.0020.0005] # MATHEMATICAL ITALIC SMALL K
+1D48C ; [.219C.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL K
+1D4C0 ; [.219C.0020.0005] # MATHEMATICAL SCRIPT SMALL K
+1D4F4 ; [.219C.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL K
+1D528 ; [.219C.0020.0005] # MATHEMATICAL FRAKTUR SMALL K
+1D55C ; [.219C.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL K
+1D590 ; [.219C.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL K
+1D5C4 ; [.219C.0020.0005] # MATHEMATICAL SANS-SERIF SMALL K
+1D5F8 ; [.219C.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL K
+1D62C ; [.219C.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL K
+1D660 ; [.219C.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL K
+1D694 ; [.219C.0020.0005] # MATHEMATICAL MONOSPACE SMALL K
+24DA ; [.219C.0020.0006] # CIRCLED LATIN SMALL LETTER K
+004B ; [.219C.0020.0008] # LATIN CAPITAL LETTER K
+212A ; [.219C.0020.0008] # KELVIN SIGN
+FF2B ; [.219C.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER K
+1F11A ; [*0334.0020.0004][.219C.0020.000A][*0335.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER K
+1D40A ; [.219C.0020.000B] # MATHEMATICAL BOLD CAPITAL K
+1D43E ; [.219C.0020.000B] # MATHEMATICAL ITALIC CAPITAL K
+1D472 ; [.219C.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL K
+1D4A6 ; [.219C.0020.000B] # MATHEMATICAL SCRIPT CAPITAL K
+1D4DA ; [.219C.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL K
+1D50E ; [.219C.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL K
+1D542 ; [.219C.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL K
+1D576 ; [.219C.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL K
+1D5AA ; [.219C.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL K
+1D5DE ; [.219C.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL K
+1D612 ; [.219C.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL K
+1D646 ; [.219C.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL K
+1D67A ; [.219C.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL K
+24C0 ; [.219C.0020.000C] # CIRCLED LATIN CAPITAL LETTER K
+1F15A ; [.219C.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER K
+1D4F ; [.219C.0020.0014] # MODIFIER LETTER SMALL K
+2096 ; [.219C.0020.0015] # LATIN SUBSCRIPT SMALL LETTER K
+1D37 ; [.219C.0020.001D] # MODIFIER LETTER CAPITAL K
+1F13A ; [.219C.0020.001D] # SQUARED LATIN CAPITAL LETTER K
+1F17A ; [.219C.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER K
+1E31 ; [.219C.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER K WITH ACUTE
+1E30 ; [.219C.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER K WITH ACUTE
+01E9 ; [.219C.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER K WITH CARON
+01E8 ; [.219C.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER K WITH CARON
+0137 ; [.219C.0020.0002][.0000.0030.0002] # LATIN SMALL LETTER K WITH CEDILLA
+0136 ; [.219C.0020.0008][.0000.0030.0002] # LATIN CAPITAL LETTER K WITH CEDILLA
+A7A3 ; [.219C.0020.0004][.0000.0035.0004] # LATIN SMALL LETTER K WITH OBLIQUE STROKE
+A7A2 ; [.219C.0020.000A][.0000.0035.0004] # LATIN CAPITAL LETTER K WITH OBLIQUE STROKE
+1E33 ; [.219C.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER K WITH DOT BELOW
+1E32 ; [.219C.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER K WITH DOT BELOW
+1E35 ; [.219C.0020.0002][.0000.0049.0002] # LATIN SMALL LETTER K WITH LINE BELOW
+1E34 ; [.219C.0020.0008][.0000.0049.0002] # LATIN CAPITAL LETTER K WITH LINE BELOW
+3384 ; [.219C.0020.001C][.2075.0020.001D] # SQUARE KA
+3385 ; [.219C.0020.001D][.208F.0020.001D] # SQUARE KB
+3389 ; [.219C.0020.001C][.20A9.0020.001C][.2075.0020.001C][.21B0.0020.001C] # SQUARE KCAL
+338F ; [.219C.0020.001C][.2125.0020.001C] # SQUARE KG
+3391 ; [.219C.0020.001C][.214C.0020.001D][.236F.0020.001C] # SQUARE KHZ
+33CD ; [.219C.0020.001D][.219C.0020.001D] # SQUARE KK
+3398 ; [.219C.0020.001C][.21B0.0020.001C] # SQUARE KL
+339E ; [.219C.0020.001C][.21E8.0020.001C] # SQUARE KM
+33CE ; [.219C.0020.001D][.21E8.0020.001D] # SQUARE KM CAPITAL
+33A2 ; [.219C.0020.001C][.21E8.0020.001C][.206D.0020.001C] # SQUARE KM SQUARED
+33A6 ; [.219C.0020.001C][.21E8.0020.001C][.206E.0020.001C] # SQUARE KM CUBED
+33AA ; [.219C.0020.001C][.224D.0020.001D][.2075.0020.001C] # SQUARE KPA
+33CF ; [.219C.0020.001C][.22DF.0020.001C] # SQUARE KT
+33B8 ; [.219C.0020.001C][.2331.0020.001D] # SQUARE KV
+33BE ; [.219C.0020.001C][.2343.0020.001D] # SQUARE KW
+33C0 ; [.219C.0020.001C][.2435.0020.001D] # SQUARE K OHM
+1D0B ; [.21A0.0020.0002] # LATIN LETTER SMALL CAPITAL K
+1D84 ; [.21A1.0020.0002] # LATIN SMALL LETTER K WITH PALATAL HOOK
+0199 ; [.21A2.0020.0002] # LATIN SMALL LETTER K WITH HOOK
+0198 ; [.21A2.0020.0008] # LATIN CAPITAL LETTER K WITH HOOK
+2C6A ; [.21A6.0020.0002] # LATIN SMALL LETTER K WITH DESCENDER
+2C69 ; [.21A6.0020.0008] # LATIN CAPITAL LETTER K WITH DESCENDER
+A741 ; [.21A7.0020.0002] # LATIN SMALL LETTER K WITH STROKE
+A740 ; [.21A7.0020.0008] # LATIN CAPITAL LETTER K WITH STROKE
+A743 ; [.21A8.0020.0002] # LATIN SMALL LETTER K WITH DIAGONAL STROKE
+A742 ; [.21A8.0020.0008] # LATIN CAPITAL LETTER K WITH DIAGONAL STROKE
+A745 ; [.21A9.0020.0002] # LATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKE
+A744 ; [.21A9.0020.0008] # LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE
+1DF03 ; [.21AA.0020.0002] # LATIN SMALL LETTER REVERSED K
+029E ; [.21AB.0020.0002] # LATIN SMALL LETTER TURNED K
+A7B0 ; [.21AB.0020.0008] # LATIN CAPITAL LETTER TURNED K
+1DF10 ; [.21AF.0020.0002] # LATIN LETTER SMALL CAPITAL TURNED K
+006C ; [.21B0.0020.0002] # LATIN SMALL LETTER L
+FF4C ; [.21B0.0020.0003] # FULLWIDTH LATIN SMALL LETTER L
+1DDD ; [.21B0.0020.0004] # COMBINING LATIN SMALL LETTER L
+217C ; [.21B0.0020.0004] # SMALL ROMAN NUMERAL FIFTY
+24A7 ; [*0334.0020.0004][.21B0.0020.0004][*0335.0020.0004] # PARENTHESIZED LATIN SMALL LETTER L
+2113 ; [.21B0.0020.0005] # SCRIPT SMALL L
+1D425 ; [.21B0.0020.0005] # MATHEMATICAL BOLD SMALL L
+1D459 ; [.21B0.0020.0005] # MATHEMATICAL ITALIC SMALL L
+1D48D ; [.21B0.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL L
+1D4C1 ; [.21B0.0020.0005] # MATHEMATICAL SCRIPT SMALL L
+1D4F5 ; [.21B0.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL L
+1D529 ; [.21B0.0020.0005] # MATHEMATICAL FRAKTUR SMALL L
+1D55D ; [.21B0.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL L
+1D591 ; [.21B0.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL L
+1D5C5 ; [.21B0.0020.0005] # MATHEMATICAL SANS-SERIF SMALL L
+1D5F9 ; [.21B0.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL L
+1D62D ; [.21B0.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL L
+1D661 ; [.21B0.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL L
+1D695 ; [.21B0.0020.0005] # MATHEMATICAL MONOSPACE SMALL L
+24DB ; [.21B0.0020.0006] # CIRCLED LATIN SMALL LETTER L
+004C ; [.21B0.0020.0008] # LATIN CAPITAL LETTER L
+FF2C ; [.21B0.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER L
+216C ; [.21B0.0020.000A] # ROMAN NUMERAL FIFTY
+1F11B ; [*0334.0020.0004][.21B0.0020.000A][*0335.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER L
+2112 ; [.21B0.0020.000B] # SCRIPT CAPITAL L
+1D40B ; [.21B0.0020.000B] # MATHEMATICAL BOLD CAPITAL L
+1D43F ; [.21B0.0020.000B] # MATHEMATICAL ITALIC CAPITAL L
+1D473 ; [.21B0.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL L
+1D4DB ; [.21B0.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL L
+1D50F ; [.21B0.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL L
+1D543 ; [.21B0.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL L
+1D577 ; [.21B0.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL L
+1D5AB ; [.21B0.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL L
+1D5DF ; [.21B0.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL L
+1D613 ; [.21B0.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL L
+1D647 ; [.21B0.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL L
+1D67B ; [.21B0.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL L
+24C1 ; [.21B0.0020.000C] # CIRCLED LATIN CAPITAL LETTER L
+1F15B ; [.21B0.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER L
+02E1 ; [.21B0.0020.0014] # MODIFIER LETTER SMALL L
+2097 ; [.21B0.0020.0015] # LATIN SUBSCRIPT SMALL LETTER L
+1D38 ; [.21B0.0020.001D] # MODIFIER LETTER CAPITAL L
+1F13B ; [.21B0.0020.001D] # SQUARED LATIN CAPITAL LETTER L
+1F17B ; [.21B0.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER L
+013A ; [.21B0.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER L WITH ACUTE
+0139 ; [.21B0.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER L WITH ACUTE
+013E ; [.21B0.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER L WITH CARON
+013D ; [.21B0.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER L WITH CARON
+013C ; [.21B0.0020.0002][.0000.0030.0002] # LATIN SMALL LETTER L WITH CEDILLA
+013B ; [.21B0.0020.0008][.0000.0030.0002] # LATIN CAPITAL LETTER L WITH CEDILLA
+0142 ; [.21B0.0020.0002][.0000.0039.0002] # LATIN SMALL LETTER L WITH STROKE
+0141 ; [.21B0.0020.0008][.0000.0039.0002] # LATIN CAPITAL LETTER L WITH STROKE
+1E37 ; [.21B0.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER L WITH DOT BELOW
+1E36 ; [.21B0.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER L WITH DOT BELOW
+1E39 ; [.21B0.0020.0002][.0000.0042.0002][.0000.0032.0002] # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
+1E38 ; [.21B0.0020.0008][.0000.0042.0002][.0000.0032.0002] # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
+1E3D ; [.21B0.0020.0002][.0000.0046.0002] # LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW
+1E3C ; [.21B0.0020.0008][.0000.0046.0002] # LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW
+1E3B ; [.21B0.0020.0002][.0000.0049.0002] # LATIN SMALL LETTER L WITH LINE BELOW
+1E3A ; [.21B0.0020.0008][.0000.0049.0002] # LATIN CAPITAL LETTER L WITH LINE BELOW
+0140 ; [.21B0.0020.0002][.0000.0118.0002] # LATIN SMALL LETTER L WITH MIDDLE DOT
+006C 00B7 ; [.21B0.0020.0002][.0000.0118.0002] # LATIN SMALL LETTER L WITH MIDDLE DOT
+006C 0387 ; [.21B0.0020.0002][.0000.0118.0002] # LATIN SMALL LETTER L WITH MIDDLE DOT
+013F ; [.21B0.0020.0008][.0000.0118.0002] # LATIN CAPITAL LETTER L WITH MIDDLE DOT
+004C 00B7 ; [.21B0.0020.0008][.0000.0118.0002] # LATIN CAPITAL LETTER L WITH MIDDLE DOT
+004C 0387 ; [.21B0.0020.0008][.0000.0118.0002] # LATIN CAPITAL LETTER L WITH MIDDLE DOT
+01C9 ; [.21B0.0020.0004][.2183.0020.0004] # LATIN SMALL LETTER LJ
+01C8 ; [.21B0.0020.000A][.2183.0020.0004] # LATIN CAPITAL LETTER L WITH SMALL LETTER J
+01C7 ; [.21B0.0020.000A][.2183.0020.000A] # LATIN CAPITAL LETTER LJ
+1EFB ; [.21B0.0020.0004][.21B0.0020.0004] # LATIN SMALL LETTER MIDDLE-WELSH LL
+1EFA ; [.21B0.0020.000A][.21B0.0020.000A] # LATIN CAPITAL LETTER MIDDLE-WELSH LL
+33D0 ; [.21B0.0020.001C][.21E8.0020.001C] # SQUARE LM
+33D1 ; [.21B0.0020.001C][.21F7.0020.001C] # SQUARE LN
+33D2 ; [.21B0.0020.001C][.221D.0020.001C][.2125.0020.001C] # SQUARE LOG
+1F1A9 ; [.21B0.0020.001D][.221D.0020.001C][.22B6.0020.001C][.22B6.0020.001C][.21B0.0020.001C][.20DB.0020.001C][.22B6.0020.001C][.22B6.0020.001C] # SQUARED LOSSLESS
+02AA ; [.21B0.0020.0004][.22B6.0020.0004] # LATIN SMALL LETTER LS DIGRAPH
+10799 ; [.21B0.0020.0014][.22B6.0020.0014] # MODIFIER LETTER SMALL LS DIGRAPH
+32CF ; [.21B0.0020.001D][.22DF.0020.001D][.20BF.0020.001D] # LIMITED LIABILITY SIGN
+33D3 ; [.21B0.0020.001C][.234D.0020.001C] # SQUARE LX
+02AB ; [.21B0.0020.0004][.236F.0020.0004] # LATIN SMALL LETTER LZ DIGRAPH
+1079A ; [.21B0.0020.0014][.236F.0020.0014] # MODIFIER LETTER SMALL LZ DIGRAPH
+029F ; [.21B4.0020.0002] # LATIN LETTER SMALL CAPITAL L
+1DDE ; [.21B4.0020.0004] # COMBINING LATIN LETTER SMALL CAPITAL L
+1DAB ; [.21B4.0020.0014] # MODIFIER LETTER SMALL CAPITAL L
+A747 ; [.21B8.0020.0002] # LATIN SMALL LETTER BROKEN L
+A746 ; [.21B8.0020.0008] # LATIN CAPITAL LETTER BROKEN L
+1D0C ; [.21B9.0020.0002] # LATIN LETTER SMALL CAPITAL L WITH STROKE
+A749 ; [.21BA.0020.0002] # LATIN SMALL LETTER L WITH HIGH STROKE
+A748 ; [.21BA.0020.0008] # LATIN CAPITAL LETTER L WITH HIGH STROKE
+019A ; [.21BB.0020.0002] # LATIN SMALL LETTER L WITH BAR
+023D ; [.21BB.0020.0008] # LATIN CAPITAL LETTER L WITH BAR
+2C61 ; [.21BF.0020.0002] # LATIN SMALL LETTER L WITH DOUBLE BAR
+2C60 ; [.21BF.0020.0008] # LATIN CAPITAL LETTER L WITH DOUBLE BAR
+026B ; [.21C0.0020.0002] # LATIN SMALL LETTER L WITH MIDDLE TILDE
+2C62 ; [.21C0.0020.0008] # LATIN CAPITAL LETTER L WITH MIDDLE TILDE
+AB5E ; [.21C0.0020.0014] # MODIFIER LETTER SMALL L WITH MIDDLE TILDE
+AB38 ; [.21C4.0020.0002] # LATIN SMALL LETTER L WITH DOUBLE MIDDLE TILDE
+1DEC ; [.21C4.0020.0004] # COMBINING LATIN SMALL LETTER L WITH DOUBLE MIDDLE TILDE
+AB39 ; [.21C5.0020.0002] # LATIN SMALL LETTER L WITH MIDDLE RING
+026C ; [.21C6.0020.0002] # LATIN SMALL LETTER L WITH BELT
+A7AD ; [.21C6.0020.0008] # LATIN CAPITAL LETTER L WITH BELT
+1079B ; [.21C6.0020.0014] # MODIFIER LETTER SMALL L WITH BELT
+1DF04 ; [.21CA.0020.0002] # LATIN LETTER SMALL CAPITAL L WITH BELT
+1079C ; [.21CA.0020.0014] # MODIFIER LETTER SMALL CAPITAL L WITH BELT
+1DF13 ; [.21CB.0020.0002] # LATIN SMALL LETTER L WITH BELT AND PALATAL HOOK
+AB37 ; [.21CC.0020.0002] # LATIN SMALL LETTER L WITH INVERTED LAZY S
+AB5D ; [.21CC.0020.0014] # MODIFIER LETTER SMALL L WITH INVERTED LAZY S
+1D85 ; [.21CD.0020.0002] # LATIN SMALL LETTER L WITH PALATAL HOOK
+1DAA ; [.21CD.0020.0014] # MODIFIER LETTER SMALL L WITH PALATAL HOOK
+026D ; [.21CE.0020.0002] # LATIN SMALL LETTER L WITH RETROFLEX HOOK
+1DA9 ; [.21CE.0020.0014] # MODIFIER LETTER SMALL L WITH RETROFLEX HOOK
+A78E ; [.21D2.0020.0002] # LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT
+1079D ; [.21D2.0020.0014] # MODIFIER LETTER SMALL L WITH RETROFLEX HOOK AND BELT
+1DF11 ; [.21D3.0020.0002] # LATIN SMALL LETTER L WITH FISHHOOK
+0234 ; [.21D4.0020.0002] # LATIN SMALL LETTER L WITH CURL
+A772 ; [.21D8.0020.0002] # LATIN SMALL LETTER LUM
+026E ; [.21D9.0020.0002] # LATIN SMALL LETTER LEZH
+1079E ; [.21D9.0020.0014] # MODIFIER LETTER SMALL LEZH
+1DF05 ; [.21DD.0020.0002] # LATIN SMALL LETTER LEZH WITH RETROFLEX HOOK
+1079F ; [.21DD.0020.0014] # MODIFIER LETTER SMALL LEZH WITH RETROFLEX HOOK
+A781 ; [.21DE.0020.0002] # LATIN SMALL LETTER TURNED L
+A780 ; [.21DE.0020.0008] # LATIN CAPITAL LETTER TURNED L
+019B ; [.21DF.0020.0002] # LATIN SMALL LETTER LAMBDA WITH STROKE
+028E ; [.21E3.0020.0002] # LATIN SMALL LETTER TURNED Y
+107A0 ; [.21E3.0020.0014] # MODIFIER LETTER SMALL TURNED Y
+1DF06 ; [.21E7.0020.0002] # LATIN SMALL LETTER TURNED Y WITH BELT
+107A1 ; [.21E7.0020.0014] # MODIFIER LETTER SMALL TURNED Y WITH BELT
+006D ; [.21E8.0020.0002] # LATIN SMALL LETTER M
+FF4D ; [.21E8.0020.0003] # FULLWIDTH LATIN SMALL LETTER M
+036B ; [.21E8.0020.0004] # COMBINING LATIN SMALL LETTER M
+217F ; [.21E8.0020.0004] # SMALL ROMAN NUMERAL ONE THOUSAND
+24A8 ; [*0334.0020.0004][.21E8.0020.0004][*0335.0020.0004] # PARENTHESIZED LATIN SMALL LETTER M
+1D426 ; [.21E8.0020.0005] # MATHEMATICAL BOLD SMALL M
+1D45A ; [.21E8.0020.0005] # MATHEMATICAL ITALIC SMALL M
+1D48E ; [.21E8.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL M
+1D4C2 ; [.21E8.0020.0005] # MATHEMATICAL SCRIPT SMALL M
+1D4F6 ; [.21E8.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL M
+1D52A ; [.21E8.0020.0005] # MATHEMATICAL FRAKTUR SMALL M
+1D55E ; [.21E8.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL M
+1D592 ; [.21E8.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL M
+1D5C6 ; [.21E8.0020.0005] # MATHEMATICAL SANS-SERIF SMALL M
+1D5FA ; [.21E8.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL M
+1D62E ; [.21E8.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL M
+1D662 ; [.21E8.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL M
+1D696 ; [.21E8.0020.0005] # MATHEMATICAL MONOSPACE SMALL M
+24DC ; [.21E8.0020.0006] # CIRCLED LATIN SMALL LETTER M
+004D ; [.21E8.0020.0008] # LATIN CAPITAL LETTER M
+FF2D ; [.21E8.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER M
+216F ; [.21E8.0020.000A] # ROMAN NUMERAL ONE THOUSAND
+1F11C ; [*0334.0020.0004][.21E8.0020.000A][*0335.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER M
+2133 ; [.21E8.0020.000B] # SCRIPT CAPITAL M
+1D40C ; [.21E8.0020.000B] # MATHEMATICAL BOLD CAPITAL M
+1D440 ; [.21E8.0020.000B] # MATHEMATICAL ITALIC CAPITAL M
+1D474 ; [.21E8.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL M
+1D4DC ; [.21E8.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL M
+1D510 ; [.21E8.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL M
+1D544 ; [.21E8.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL M
+1D578 ; [.21E8.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL M
+1D5AC ; [.21E8.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL M
+1D5E0 ; [.21E8.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL M
+1D614 ; [.21E8.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL M
+1D648 ; [.21E8.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL M
+1D67C ; [.21E8.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL M
+24C2 ; [.21E8.0020.000C] # CIRCLED LATIN CAPITAL LETTER M
+1F15C ; [.21E8.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER M
+1D50 ; [.21E8.0020.0014] # MODIFIER LETTER SMALL M
+2098 ; [.21E8.0020.0015] # LATIN SUBSCRIPT SMALL LETTER M
+1D39 ; [.21E8.0020.001D] # MODIFIER LETTER CAPITAL M
+1F13C ; [.21E8.0020.001D] # SQUARED LATIN CAPITAL LETTER M
+1F17C ; [.21E8.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER M
+1E3F ; [.21E8.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER M WITH ACUTE
+1E3E ; [.21E8.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER M WITH ACUTE
+1E41 ; [.21E8.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER M WITH DOT ABOVE
+1E40 ; [.21E8.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER M WITH DOT ABOVE
+1E43 ; [.21E8.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER M WITH DOT BELOW
+1E42 ; [.21E8.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER M WITH DOT BELOW
+33A1 ; [.21E8.0020.001C][.206D.0020.001C] # SQUARE M SQUARED
+33A5 ; [.21E8.0020.001C][.206E.0020.001C] # SQUARE M CUBED
+3383 ; [.21E8.0020.001C][.2075.0020.001D] # SQUARE MA
+33D4 ; [.21E8.0020.001C][.208F.0020.001C] # SQUARE MB SMALL
+3386 ; [.21E8.0020.001D][.208F.0020.001D] # SQUARE MB
+1F16A ; [.21E8.0020.0014][.20A9.0020.0014] # RAISED MC SIGN
+1F16B ; [.21E8.0020.0014][.20BF.0020.0014] # RAISED MD SIGN
+338E ; [.21E8.0020.001C][.2125.0020.001C] # SQUARE MG
+3392 ; [.21E8.0020.001D][.214C.0020.001D][.236F.0020.001C] # SQUARE MHZ
+33D5 ; [.21E8.0020.001C][.2167.0020.001C][.21B0.0020.001C] # SQUARE MIL
+3396 ; [.21E8.0020.001C][.21B0.0020.001C] # SQUARE ML
+339C ; [.21E8.0020.001C][.21E8.0020.001C] # SQUARE MM
+339F ; [.21E8.0020.001C][.21E8.0020.001C][.206D.0020.001C] # SQUARE MM SQUARED
+33A3 ; [.21E8.0020.001C][.21E8.0020.001C][.206E.0020.001C] # SQUARE MM CUBED
+33D6 ; [.21E8.0020.001C][.221D.0020.001C][.21B0.0020.001C] # SQUARE MOL
+33AB ; [.21E8.0020.001D][.224D.0020.001D][.2075.0020.001C] # SQUARE MPA
+1F16C ; [.21E8.0020.0014][.2275.0020.0014] # RAISED MR SIGN
+33A7 ; [.21E8.0020.001C][*06AC.0020.001C][.22B6.0020.001C] # SQUARE M OVER S
+33B3 ; [.21E8.0020.001C][.22B6.0020.001C] # SQUARE MS
+33A8 ; [.21E8.0020.001C][*06AC.0020.001C][.22B6.0020.001C][.206D.0020.001C] # SQUARE M OVER S SQUARED
+33B7 ; [.21E8.0020.001C][.2331.0020.001D] # SQUARE MV
+33B9 ; [.21E8.0020.001D][.2331.0020.001D] # SQUARE MV MEGA
+1F14B ; [.21E8.0020.001D][.2331.0020.001D] # SQUARED MV
+33BD ; [.21E8.0020.001C][.2343.0020.001D] # SQUARE MW
+33BF ; [.21E8.0020.001D][.2343.0020.001D] # SQUARE MW MEGA
+33C1 ; [.21E8.0020.001D][.2435.0020.001D] # SQUARE M OHM
+1D0D ; [.21EC.0020.0002] # LATIN LETTER SMALL CAPITAL M
+1DDF ; [.21EC.0020.0004] # COMBINING LATIN LETTER SMALL CAPITAL M
+1D6F ; [.21ED.0020.0002] # LATIN SMALL LETTER M WITH MIDDLE TILDE
+1D86 ; [.21EE.0020.0002] # LATIN SMALL LETTER M WITH PALATAL HOOK
+0271 ; [.21EF.0020.0002] # LATIN SMALL LETTER M WITH HOOK
+2C6E ; [.21EF.0020.0008] # LATIN CAPITAL LETTER M WITH HOOK
+1DAC ; [.21EF.0020.0014] # MODIFIER LETTER SMALL M WITH HOOK
+AB3A ; [.21F3.0020.0002] # LATIN SMALL LETTER M WITH CROSSED-TAIL
+A7FD ; [.21F4.0020.0002] # LATIN EPIGRAPHIC LETTER INVERTED M
+A7FF ; [.21F5.0020.0002] # LATIN EPIGRAPHIC LETTER ARCHAIC M
+A773 ; [.21F6.0020.0002] # LATIN SMALL LETTER MUM
+006E ; [.21F7.0020.0002] # LATIN SMALL LETTER N
+FF4E ; [.21F7.0020.0003] # FULLWIDTH LATIN SMALL LETTER N
+1DE0 ; [.21F7.0020.0004] # COMBINING LATIN SMALL LETTER N
+24A9 ; [*0334.0020.0004][.21F7.0020.0004][*0335.0020.0004] # PARENTHESIZED LATIN SMALL LETTER N
+1D427 ; [.21F7.0020.0005] # MATHEMATICAL BOLD SMALL N
+1D45B ; [.21F7.0020.0005] # MATHEMATICAL ITALIC SMALL N
+1D48F ; [.21F7.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL N
+1D4C3 ; [.21F7.0020.0005] # MATHEMATICAL SCRIPT SMALL N
+1D4F7 ; [.21F7.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL N
+1D52B ; [.21F7.0020.0005] # MATHEMATICAL FRAKTUR SMALL N
+1D55F ; [.21F7.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL N
+1D593 ; [.21F7.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL N
+1D5C7 ; [.21F7.0020.0005] # MATHEMATICAL SANS-SERIF SMALL N
+1D5FB ; [.21F7.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL N
+1D62F ; [.21F7.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL N
+1D663 ; [.21F7.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL N
+1D697 ; [.21F7.0020.0005] # MATHEMATICAL MONOSPACE SMALL N
+24DD ; [.21F7.0020.0006] # CIRCLED LATIN SMALL LETTER N
+004E ; [.21F7.0020.0008] # LATIN CAPITAL LETTER N
+FF2E ; [.21F7.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER N
+1F11D ; [*0334.0020.0004][.21F7.0020.000A][*0335.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER N
+2115 ; [.21F7.0020.000B] # DOUBLE-STRUCK CAPITAL N
+1D40D ; [.21F7.0020.000B] # MATHEMATICAL BOLD CAPITAL N
+1D441 ; [.21F7.0020.000B] # MATHEMATICAL ITALIC CAPITAL N
+1D475 ; [.21F7.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL N
+1D4A9 ; [.21F7.0020.000B] # MATHEMATICAL SCRIPT CAPITAL N
+1D4DD ; [.21F7.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL N
+1D511 ; [.21F7.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL N
+1D579 ; [.21F7.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL N
+1D5AD ; [.21F7.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL N
+1D5E1 ; [.21F7.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL N
+1D615 ; [.21F7.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL N
+1D649 ; [.21F7.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL N
+1D67D ; [.21F7.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL N
+24C3 ; [.21F7.0020.000C] # CIRCLED LATIN CAPITAL LETTER N
+1F15D ; [.21F7.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER N
+207F ; [.21F7.0020.0014] # SUPERSCRIPT LATIN SMALL LETTER N
+2099 ; [.21F7.0020.0015] # LATIN SUBSCRIPT SMALL LETTER N
+1D3A ; [.21F7.0020.001D] # MODIFIER LETTER CAPITAL N
+1F13D ; [.21F7.0020.001D] # SQUARED LATIN CAPITAL LETTER N
+1F17D ; [.21F7.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER N
+0144 ; [.21F7.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER N WITH ACUTE
+0143 ; [.21F7.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER N WITH ACUTE
+01F9 ; [.21F7.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER N WITH GRAVE
+01F8 ; [.21F7.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER N WITH GRAVE
+0148 ; [.21F7.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER N WITH CARON
+0147 ; [.21F7.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER N WITH CARON
+00F1 ; [.21F7.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER N WITH TILDE
+00D1 ; [.21F7.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER N WITH TILDE
+1E45 ; [.21F7.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER N WITH DOT ABOVE
+1E44 ; [.21F7.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER N WITH DOT ABOVE
+0146 ; [.21F7.0020.0002][.0000.0030.0002] # LATIN SMALL LETTER N WITH CEDILLA
+0145 ; [.21F7.0020.0008][.0000.0030.0002] # LATIN CAPITAL LETTER N WITH CEDILLA
+A7A5 ; [.21F7.0020.0004][.0000.0035.0004] # LATIN SMALL LETTER N WITH OBLIQUE STROKE
+A7A4 ; [.21F7.0020.000A][.0000.0035.0004] # LATIN CAPITAL LETTER N WITH OBLIQUE STROKE
+1E47 ; [.21F7.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER N WITH DOT BELOW
+1E46 ; [.21F7.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER N WITH DOT BELOW
+1E4B ; [.21F7.0020.0002][.0000.0046.0002] # LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW
+1E4A ; [.21F7.0020.0008][.0000.0046.0002] # LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW
+1E49 ; [.21F7.0020.0002][.0000.0049.0002] # LATIN SMALL LETTER N WITH LINE BELOW
+1E48 ; [.21F7.0020.0008][.0000.0049.0002] # LATIN CAPITAL LETTER N WITH LINE BELOW
+3381 ; [.21F7.0020.001C][.2075.0020.001D] # SQUARE NA
+1F195 ; [.21F7.0020.001D][.20DB.0020.001D][.2343.0020.001D] # SQUARED NEW
+338B ; [.21F7.0020.001C][.2116.0020.001D] # SQUARE NF
+1F196 ; [.21F7.0020.001D][.2125.0020.001D] # SQUARED NG
+01CC ; [.21F7.0020.0004][.2183.0020.0004] # LATIN SMALL LETTER NJ
+01CB ; [.21F7.0020.000A][.2183.0020.0004] # LATIN CAPITAL LETTER N WITH SMALL LETTER J
+01CA ; [.21F7.0020.000A][.2183.0020.000A] # LATIN CAPITAL LETTER NJ
+339A ; [.21F7.0020.001C][.21E8.0020.001C] # SQUARE NM
+2116 ; [.21F7.0020.000A][.221D.0020.0004] # NUMERO SIGN
+33B1 ; [.21F7.0020.001C][.22B6.0020.001C] # SQUARE NS
+33B5 ; [.21F7.0020.001C][.2331.0020.001D] # SQUARE NV
+33BB ; [.21F7.0020.001C][.2343.0020.001D] # SQUARE NW
+0274 ; [.21FB.0020.0002] # LATIN LETTER SMALL CAPITAL N
+1DE1 ; [.21FB.0020.0004] # COMBINING LATIN LETTER SMALL CAPITAL N
+1DB0 ; [.21FB.0020.0014] # MODIFIER LETTER SMALL CAPITAL N
+1D3B ; [.21FF.0020.0002] # MODIFIER LETTER CAPITAL REVERSED N
+1D0E ; [.2200.0020.0002] # LATIN LETTER SMALL CAPITAL REVERSED N
+1D70 ; [.2201.0020.0002] # LATIN SMALL LETTER N WITH MIDDLE TILDE
+0272 ; [.2202.0020.0002] # LATIN SMALL LETTER N WITH LEFT HOOK
+019D ; [.2202.0020.0008] # LATIN CAPITAL LETTER N WITH LEFT HOOK
+1DAE ; [.2202.0020.0014] # MODIFIER LETTER SMALL N WITH LEFT HOOK
+019E ; [.2206.0020.0002] # LATIN SMALL LETTER N WITH LONG RIGHT LEG
+0220 ; [.2206.0020.0008] # LATIN CAPITAL LETTER N WITH LONG RIGHT LEG
+A791 ; [.220A.0020.0002] # LATIN SMALL LETTER N WITH DESCENDER
+A790 ; [.220A.0020.0008] # LATIN CAPITAL LETTER N WITH DESCENDER
+1D87 ; [.220B.0020.0002] # LATIN SMALL LETTER N WITH PALATAL HOOK
+0273 ; [.220C.0020.0002] # LATIN SMALL LETTER N WITH RETROFLEX HOOK
+1DAF ; [.220C.0020.0014] # MODIFIER LETTER SMALL N WITH RETROFLEX HOOK
+0235 ; [.2210.0020.0002] # LATIN SMALL LETTER N WITH CURL
+AB3B ; [.2214.0020.0002] # LATIN SMALL LETTER N WITH CROSSED-TAIL
+A774 ; [.2215.0020.0002] # LATIN SMALL LETTER NUM
+014B ; [.2216.0020.0002] # LATIN SMALL LETTER ENG
+014A ; [.2216.0020.0008] # LATIN CAPITAL LETTER ENG
+1D51 ; [.2216.0020.0014] # MODIFIER LETTER SMALL ENG
+AB3C ; [.221A.0020.0002] # LATIN SMALL LETTER ENG WITH CROSSED-TAIL
+1DF14 ; [.221B.0020.0002] # LATIN SMALL LETTER ENG WITH PALATAL HOOK
+1DF07 ; [.221C.0020.0002] # LATIN SMALL LETTER REVERSED ENG
+006F ; [.221D.0020.0002] # LATIN SMALL LETTER O
+FF4F ; [.221D.0020.0003] # FULLWIDTH LATIN SMALL LETTER O
+0366 ; [.221D.0020.0004] # COMBINING LATIN SMALL LETTER O
+24AA ; [*0334.0020.0004][.221D.0020.0004][*0335.0020.0004] # PARENTHESIZED LATIN SMALL LETTER O
+2134 ; [.221D.0020.0005] # SCRIPT SMALL O
+1D428 ; [.221D.0020.0005] # MATHEMATICAL BOLD SMALL O
+1D45C ; [.221D.0020.0005] # MATHEMATICAL ITALIC SMALL O
+1D490 ; [.221D.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL O
+1D4F8 ; [.221D.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL O
+1D52C ; [.221D.0020.0005] # MATHEMATICAL FRAKTUR SMALL O
+1D560 ; [.221D.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL O
+1D594 ; [.221D.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL O
+1D5C8 ; [.221D.0020.0005] # MATHEMATICAL SANS-SERIF SMALL O
+1D5FC ; [.221D.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL O
+1D630 ; [.221D.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL O
+1D664 ; [.221D.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL O
+1D698 ; [.221D.0020.0005] # MATHEMATICAL MONOSPACE SMALL O
+24DE ; [.221D.0020.0006] # CIRCLED LATIN SMALL LETTER O
+004F ; [.221D.0020.0008] # LATIN CAPITAL LETTER O
+FF2F ; [.221D.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER O
+1F11E ; [*0334.0020.0004][.221D.0020.000A][*0335.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER O
+1D40E ; [.221D.0020.000B] # MATHEMATICAL BOLD CAPITAL O
+1D442 ; [.221D.0020.000B] # MATHEMATICAL ITALIC CAPITAL O
+1D476 ; [.221D.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL O
+1D4AA ; [.221D.0020.000B] # MATHEMATICAL SCRIPT CAPITAL O
+1D4DE ; [.221D.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL O
+1D512 ; [.221D.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL O
+1D546 ; [.221D.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL O
+1D57A ; [.221D.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL O
+1D5AE ; [.221D.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL O
+1D5E2 ; [.221D.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL O
+1D616 ; [.221D.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL O
+1D64A ; [.221D.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL O
+1D67E ; [.221D.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL O
+24C4 ; [.221D.0020.000C] # CIRCLED LATIN CAPITAL LETTER O
+1F15E ; [.221D.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER O
+00BA ; [.221D.0020.0014] # MASCULINE ORDINAL INDICATOR
+1D52 ; [.221D.0020.0014] # MODIFIER LETTER SMALL O
+2092 ; [.221D.0020.0015] # LATIN SUBSCRIPT SMALL LETTER O
+1D3C ; [.221D.0020.001D] # MODIFIER LETTER CAPITAL O
+1F13E ; [.221D.0020.001D] # SQUARED LATIN CAPITAL LETTER O
+1F17E ; [.221D.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER O
+00F3 ; [.221D.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH ACUTE
+00D3 ; [.221D.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH ACUTE
+00F2 ; [.221D.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER O WITH GRAVE
+00D2 ; [.221D.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER O WITH GRAVE
+014F ; [.221D.0020.0002][.0000.0026.0002] # LATIN SMALL LETTER O WITH BREVE
+014E ; [.221D.0020.0008][.0000.0026.0002] # LATIN CAPITAL LETTER O WITH BREVE
+00F4 ; [.221D.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX
+00D4 ; [.221D.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+1ED1 ; [.221D.0020.0002][.0000.0027.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
+1ED0 ; [.221D.0020.0008][.0000.0027.0002][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
+1ED3 ; [.221D.0020.0002][.0000.0027.0002][.0000.0025.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
+1ED2 ; [.221D.0020.0008][.0000.0027.0002][.0000.0025.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
+1ED7 ; [.221D.0020.0002][.0000.0027.0002][.0000.002D.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
+1ED6 ; [.221D.0020.0008][.0000.0027.0002][.0000.002D.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
+1ED5 ; [.221D.0020.0002][.0000.0027.0002][.0000.003B.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+1ED4 ; [.221D.0020.0008][.0000.0027.0002][.0000.003B.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+01D2 ; [.221D.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER O WITH CARON
+01D1 ; [.221D.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER O WITH CARON
+00F6 ; [.221D.0020.0002][.0000.002B.0002] # LATIN SMALL LETTER O WITH DIAERESIS
+1DF3 ; [.221D.0020.0004][.0000.002B.0004] # COMBINING LATIN SMALL LETTER O WITH DIAERESIS
+A79D ; [.221D.0020.0004][.0000.002B.0004] # LATIN SMALL LETTER VOLAPUK OE
+00D6 ; [.221D.0020.0008][.0000.002B.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS
+A79C ; [.221D.0020.000A][.0000.002B.0004] # LATIN CAPITAL LETTER VOLAPUK OE
+022B ; [.221D.0020.0002][.0000.002B.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
+022A ; [.221D.0020.0008][.0000.002B.0002][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
+0151 ; [.221D.0020.0002][.0000.002C.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE
+0150 ; [.221D.0020.0008][.0000.002C.0002] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+00F5 ; [.221D.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER O WITH TILDE
+00D5 ; [.221D.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER O WITH TILDE
+1E4D ; [.221D.0020.0002][.0000.002D.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH TILDE AND ACUTE
+1E4C ; [.221D.0020.0008][.0000.002D.0002][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
+1E4F ; [.221D.0020.0002][.0000.002D.0002][.0000.002B.0002] # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS
+1E4E ; [.221D.0020.0008][.0000.002D.0002][.0000.002B.0002] # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
+022D ; [.221D.0020.0002][.0000.002D.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH TILDE AND MACRON
+022C ; [.221D.0020.0008][.0000.002D.0002][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH TILDE AND MACRON
+022F ; [.221D.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER O WITH DOT ABOVE
+022E ; [.221D.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER O WITH DOT ABOVE
+0231 ; [.221D.0020.0002][.0000.002E.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON
+0230 ; [.221D.0020.0008][.0000.002E.0002][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
+00F8 ; [.221D.0020.0002][.0000.002F.0002] # LATIN SMALL LETTER O WITH STROKE
+00D8 ; [.221D.0020.0008][.0000.002F.0002] # LATIN CAPITAL LETTER O WITH STROKE
+107A2 ; [.221D.0020.0014][.0000.002F.0014] # MODIFIER LETTER SMALL O WITH STROKE
+01FF ; [.221D.0020.0002][.0000.002F.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH STROKE AND ACUTE
+01FE ; [.221D.0020.0008][.0000.002F.0002][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
+01EB ; [.221D.0020.0002][.0000.0031.0002] # LATIN SMALL LETTER O WITH OGONEK
+01EA ; [.221D.0020.0008][.0000.0031.0002] # LATIN CAPITAL LETTER O WITH OGONEK
+01ED ; [.221D.0020.0002][.0000.0031.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH OGONEK AND MACRON
+01EC ; [.221D.0020.0008][.0000.0031.0002][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
+014D ; [.221D.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH MACRON
+014C ; [.221D.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH MACRON
+1E53 ; [.221D.0020.0002][.0000.0032.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH MACRON AND ACUTE
+1E52 ; [.221D.0020.0008][.0000.0032.0002][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
+1E51 ; [.221D.0020.0002][.0000.0032.0002][.0000.0025.0002] # LATIN SMALL LETTER O WITH MACRON AND GRAVE
+1E50 ; [.221D.0020.0008][.0000.0032.0002][.0000.0025.0002] # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
+1DED ; [.221D.0020.0004][.0000.0034.0004] # COMBINING LATIN SMALL LETTER O WITH LIGHT CENTRALIZATION STROKE
+1ECF ; [.221D.0020.0002][.0000.003B.0002] # LATIN SMALL LETTER O WITH HOOK ABOVE
+1ECE ; [.221D.0020.0008][.0000.003B.0002] # LATIN CAPITAL LETTER O WITH HOOK ABOVE
+020D ; [.221D.0020.0002][.0000.003C.0002] # LATIN SMALL LETTER O WITH DOUBLE GRAVE
+020C ; [.221D.0020.0008][.0000.003C.0002] # LATIN CAPITAL LETTER O WITH DOUBLE GRAVE
+020F ; [.221D.0020.0002][.0000.003E.0002] # LATIN SMALL LETTER O WITH INVERTED BREVE
+020E ; [.221D.0020.0008][.0000.003E.0002] # LATIN CAPITAL LETTER O WITH INVERTED BREVE
+01A1 ; [.221D.0020.0002][.0000.003F.0002] # LATIN SMALL LETTER O WITH HORN
+01A0 ; [.221D.0020.0008][.0000.003F.0002] # LATIN CAPITAL LETTER O WITH HORN
+1EDB ; [.221D.0020.0002][.0000.003F.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH HORN AND ACUTE
+1EDA ; [.221D.0020.0008][.0000.003F.0002][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH HORN AND ACUTE
+1EDD ; [.221D.0020.0002][.0000.003F.0002][.0000.0025.0002] # LATIN SMALL LETTER O WITH HORN AND GRAVE
+1EDC ; [.221D.0020.0008][.0000.003F.0002][.0000.0025.0002] # LATIN CAPITAL LETTER O WITH HORN AND GRAVE
+1EE1 ; [.221D.0020.0002][.0000.003F.0002][.0000.002D.0002] # LATIN SMALL LETTER O WITH HORN AND TILDE
+1EE0 ; [.221D.0020.0008][.0000.003F.0002][.0000.002D.0002] # LATIN CAPITAL LETTER O WITH HORN AND TILDE
+1EDF ; [.221D.0020.0002][.0000.003F.0002][.0000.003B.0002] # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
+1EDE ; [.221D.0020.0008][.0000.003F.0002][.0000.003B.0002] # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
+1EE3 ; [.221D.0020.0002][.0000.003F.0002][.0000.0042.0002] # LATIN SMALL LETTER O WITH HORN AND DOT BELOW
+1EE2 ; [.221D.0020.0008][.0000.003F.0002][.0000.0042.0002] # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
+1ECD ; [.221D.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER O WITH DOT BELOW
+1ECC ; [.221D.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER O WITH DOT BELOW
+1ED9 ; [.221D.0020.0002][.0000.0042.0002][.0000.0027.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+1ED8 ; [.221D.0020.0008][.0000.0042.0002][.0000.0027.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+0153 ; [.221D.0020.0004][.0000.0118.0004][.20DB.0020.0004] # LATIN SMALL LIGATURE OE
+0152 ; [.221D.0020.000A][.0000.0118.0004][.20DB.0020.000A] # LATIN CAPITAL LIGATURE OE
+A7F9 ; [.221D.0020.0014][.0000.0118.0014][.20DB.0020.0014] # MODIFIER LETTER SMALL LIGATURE OE
+1F197 ; [.221D.0020.001D][.219C.0020.001D] # SQUARED OK
+A74F ; [.221D.0020.0004][.221D.0020.0004] # LATIN SMALL LETTER OO
+A74E ; [.221D.0020.000A][.221D.0020.000A] # LATIN CAPITAL LETTER OO
+3375 ; [.221D.0020.001C][.2331.0020.001D] # SQUARE OV
+1D0F ; [.2221.0020.0002] # LATIN LETTER SMALL CAPITAL O
+1D11 ; [.2222.0020.0002] # LATIN SMALL LETTER SIDEWAYS O
+AB3D ; [.2223.0020.0002] # LATIN SMALL LETTER BLACKLETTER O
+0276 ; [.2224.0020.0002] # LATIN LETTER SMALL CAPITAL OE
+107A3 ; [.2224.0020.0014] # MODIFIER LETTER SMALL CAPITAL OE
+1D14 ; [.2228.0020.0002] # LATIN SMALL LETTER TURNED OE
+AB41 ; [.2229.0020.0002] # LATIN SMALL LETTER TURNED OE WITH STROKE
+AB42 ; [.222A.0020.0002] # LATIN SMALL LETTER TURNED OE WITH HORIZONTAL STROKE
+AB40 ; [.222B.0020.0002] # LATIN SMALL LETTER INVERTED OE
+AB43 ; [.222C.0020.0002] # LATIN SMALL LETTER TURNED O OPEN-O
+AB44 ; [.222D.0020.0002] # LATIN SMALL LETTER TURNED O OPEN-O WITH STROKE
+1D13 ; [.222E.0020.0002] # LATIN SMALL LETTER SIDEWAYS O WITH STROKE
+AB3E ; [.222F.0020.0002] # LATIN SMALL LETTER BLACKLETTER O WITH STROKE
+1DF1B ; [.2230.0020.0002] # LATIN SMALL LETTER O WITH RETROFLEX HOOK
+0254 ; [.2231.0020.0002] # LATIN SMALL LETTER OPEN O
+0186 ; [.2231.0020.0008] # LATIN CAPITAL LETTER OPEN O
+1D53 ; [.2231.0020.0014] # MODIFIER LETTER SMALL OPEN O
+1D10 ; [.2235.0020.0002] # LATIN LETTER SMALL CAPITAL OPEN O
+1D12 ; [.2236.0020.0002] # LATIN SMALL LETTER SIDEWAYS OPEN O
+AB3F ; [.2237.0020.0002] # LATIN SMALL LETTER OPEN O WITH STROKE
+1D97 ; [.2238.0020.0002] # LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK
+AB62 ; [.2239.0020.0002] # LATIN SMALL LETTER OPEN OE
+A74D ; [.223A.0020.0002] # LATIN SMALL LETTER O WITH LOOP
+A74C ; [.223A.0020.0008] # LATIN CAPITAL LETTER O WITH LOOP
+1D16 ; [.223B.0020.0002] # LATIN SMALL LETTER TOP HALF O
+1D54 ; [.223B.0020.0014] # MODIFIER LETTER SMALL TOP HALF O
+1D17 ; [.223C.0020.0002] # LATIN SMALL LETTER BOTTOM HALF O
+1D55 ; [.223C.0020.0014] # MODIFIER LETTER SMALL BOTTOM HALF O
+2C7A ; [.223D.0020.0002] # LATIN SMALL LETTER O WITH LOW RING INSIDE
+0275 ; [.223E.0020.0002] # LATIN SMALL LETTER BARRED O
+019F ; [.223E.0020.0008] # LATIN CAPITAL LETTER O WITH MIDDLE TILDE
+1DB1 ; [.223E.0020.0014] # MODIFIER LETTER SMALL BARRED O
+A74B ; [.2242.0020.0002] # LATIN SMALL LETTER O WITH LONG STROKE OVERLAY
+A74A ; [.2242.0020.0008] # LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY
+0277 ; [.2243.0020.0002] # LATIN SMALL LETTER CLOSED OMEGA
+107A4 ; [.2243.0020.0014] # MODIFIER LETTER SMALL CLOSED OMEGA
+A7B7 ; [.2247.0020.0002] # LATIN SMALL LETTER OMEGA
+A7B6 ; [.2247.0020.0008] # LATIN CAPITAL LETTER OMEGA
+0223 ; [.2248.0020.0002] # LATIN SMALL LETTER OU
+0222 ; [.2248.0020.0008] # LATIN CAPITAL LETTER OU
+1D3D ; [.2248.0020.001D] # MODIFIER LETTER CAPITAL OU
+1D15 ; [.224C.0020.0002] # LATIN LETTER SMALL CAPITAL OU
+0070 ; [.224D.0020.0002] # LATIN SMALL LETTER P
+FF50 ; [.224D.0020.0003] # FULLWIDTH LATIN SMALL LETTER P
+1DEE ; [.224D.0020.0004] # COMBINING LATIN SMALL LETTER P
+24AB ; [*0334.0020.0004][.224D.0020.0004][*0335.0020.0004] # PARENTHESIZED LATIN SMALL LETTER P
+1D429 ; [.224D.0020.0005] # MATHEMATICAL BOLD SMALL P
+1D45D ; [.224D.0020.0005] # MATHEMATICAL ITALIC SMALL P
+1D491 ; [.224D.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL P
+1D4C5 ; [.224D.0020.0005] # MATHEMATICAL SCRIPT SMALL P
+1D4F9 ; [.224D.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL P
+1D52D ; [.224D.0020.0005] # MATHEMATICAL FRAKTUR SMALL P
+1D561 ; [.224D.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL P
+1D595 ; [.224D.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL P
+1D5C9 ; [.224D.0020.0005] # MATHEMATICAL SANS-SERIF SMALL P
+1D5FD ; [.224D.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL P
+1D631 ; [.224D.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL P
+1D665 ; [.224D.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL P
+1D699 ; [.224D.0020.0005] # MATHEMATICAL MONOSPACE SMALL P
+24DF ; [.224D.0020.0006] # CIRCLED LATIN SMALL LETTER P
+0050 ; [.224D.0020.0008] # LATIN CAPITAL LETTER P
+FF30 ; [.224D.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER P
+1F11F ; [*0334.0020.0004][.224D.0020.000A][*0335.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER P
+2119 ; [.224D.0020.000B] # DOUBLE-STRUCK CAPITAL P
+1D40F ; [.224D.0020.000B] # MATHEMATICAL BOLD CAPITAL P
+1D443 ; [.224D.0020.000B] # MATHEMATICAL ITALIC CAPITAL P
+1D477 ; [.224D.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL P
+1D4AB ; [.224D.0020.000B] # MATHEMATICAL SCRIPT CAPITAL P
+1D4DF ; [.224D.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL P
+1D513 ; [.224D.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL P
+1D57B ; [.224D.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL P
+1D5AF ; [.224D.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL P
+1D5E3 ; [.224D.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL P
+1D617 ; [.224D.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL P
+1D64B ; [.224D.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL P
+1D67F ; [.224D.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL P
+24C5 ; [.224D.0020.000C] # CIRCLED LATIN CAPITAL LETTER P
+1F15F ; [.224D.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER P
+1D56 ; [.224D.0020.0014] # MODIFIER LETTER SMALL P
+209A ; [.224D.0020.0015] # LATIN SUBSCRIPT SMALL LETTER P
+1D3E ; [.224D.0020.001D] # MODIFIER LETTER CAPITAL P
+1F13F ; [.224D.0020.001D] # SQUARED LATIN CAPITAL LETTER P
+1F17F ; [.224D.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER P
+1F18A ; [.224D.0020.001D] # CROSSED NEGATIVE SQUARED LATIN CAPITAL LETTER P
+1E55 ; [.224D.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER P WITH ACUTE
+1E54 ; [.224D.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER P WITH ACUTE
+1E57 ; [.224D.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER P WITH DOT ABOVE
+1E56 ; [.224D.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER P WITH DOT ABOVE
+3380 ; [.224D.0020.001C][.2075.0020.001D] # SQUARE PA AMPS
+33A9 ; [.224D.0020.001D][.2075.0020.001C] # SQUARE PA
+1F18C ; [.224D.0020.001D][.2075.0020.001D] # NEGATIVE SQUARED PA
+3376 ; [.224D.0020.001C][.20A9.0020.001C] # SQUARE PC
+338A ; [.224D.0020.001C][.2116.0020.001D] # SQUARE PF
+33D7 ; [.224D.0020.001D][.214C.0020.001D] # SQUARE PH
+33D8 ; [.224D.0020.001C][*0281.0020.001C][.21E8.0020.001C][*0281.0020.001C] # SQUARE PM
+33D9 ; [.224D.0020.001D][.224D.0020.001D][.21E8.0020.001D] # SQUARE PPM
+1F14E ; [.224D.0020.001D][.224D.0020.001D][.2331.0020.001D] # SQUARED PPV
+33DA ; [.224D.0020.001D][.2275.0020.001D] # SQUARE PR
+33B0 ; [.224D.0020.001C][.22B6.0020.001C] # SQUARE PS
+3250 ; [.224D.0020.001D][.22DF.0020.001D][.20DB.0020.001D] # PARTNERSHIP SIGN
+33B4 ; [.224D.0020.001C][.2331.0020.001D] # SQUARE PV
+33BA ; [.224D.0020.001C][.2343.0020.001D] # SQUARE PW
+1D18 ; [.2251.0020.0002] # LATIN LETTER SMALL CAPITAL P
+1D7D ; [.2252.0020.0002] # LATIN SMALL LETTER P WITH STROKE
+2C63 ; [.2252.0020.0008] # LATIN CAPITAL LETTER P WITH STROKE
+A751 ; [.2253.0020.0002] # LATIN SMALL LETTER P WITH STROKE THROUGH DESCENDER
+A750 ; [.2253.0020.0008] # LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER
+1D71 ; [.2254.0020.0002] # LATIN SMALL LETTER P WITH MIDDLE TILDE
+1D88 ; [.2255.0020.0002] # LATIN SMALL LETTER P WITH PALATAL HOOK
+01A5 ; [.2256.0020.0002] # LATIN SMALL LETTER P WITH HOOK
+01A4 ; [.2256.0020.0008] # LATIN CAPITAL LETTER P WITH HOOK
+A753 ; [.225A.0020.0002] # LATIN SMALL LETTER P WITH FLOURISH
+A752 ; [.225A.0020.0008] # LATIN CAPITAL LETTER P WITH FLOURISH
+A755 ; [.225B.0020.0002] # LATIN SMALL LETTER P WITH SQUIRREL TAIL
+A754 ; [.225B.0020.0008] # LATIN CAPITAL LETTER P WITH SQUIRREL TAIL
+A7FC ; [.225C.0020.0002] # LATIN EPIGRAPHIC LETTER REVERSED P
+0278 ; [.225D.0020.0002] # LATIN SMALL LETTER PHI
+1DB2 ; [.225D.0020.0014] # MODIFIER LETTER SMALL PHI
+2C77 ; [.2261.0020.0002] # LATIN SMALL LETTER TAILLESS PHI
+0071 ; [.2262.0020.0002] # LATIN SMALL LETTER Q
+FF51 ; [.2262.0020.0003] # FULLWIDTH LATIN SMALL LETTER Q
+24AC ; [*0334.0020.0004][.2262.0020.0004][*0335.0020.0004] # PARENTHESIZED LATIN SMALL LETTER Q
+1D42A ; [.2262.0020.0005] # MATHEMATICAL BOLD SMALL Q
+1D45E ; [.2262.0020.0005] # MATHEMATICAL ITALIC SMALL Q
+1D492 ; [.2262.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL Q
+1D4C6 ; [.2262.0020.0005] # MATHEMATICAL SCRIPT SMALL Q
+1D4FA ; [.2262.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL Q
+1D52E ; [.2262.0020.0005] # MATHEMATICAL FRAKTUR SMALL Q
+1D562 ; [.2262.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL Q
+1D596 ; [.2262.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL Q
+1D5CA ; [.2262.0020.0005] # MATHEMATICAL SANS-SERIF SMALL Q
+1D5FE ; [.2262.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL Q
+1D632 ; [.2262.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL Q
+1D666 ; [.2262.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Q
+1D69A ; [.2262.0020.0005] # MATHEMATICAL MONOSPACE SMALL Q
+24E0 ; [.2262.0020.0006] # CIRCLED LATIN SMALL LETTER Q
+0051 ; [.2262.0020.0008] # LATIN CAPITAL LETTER Q
+FF31 ; [.2262.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER Q
+1F120 ; [*0334.0020.0004][.2262.0020.000A][*0335.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER Q
+211A ; [.2262.0020.000B] # DOUBLE-STRUCK CAPITAL Q
+1D410 ; [.2262.0020.000B] # MATHEMATICAL BOLD CAPITAL Q
+1D444 ; [.2262.0020.000B] # MATHEMATICAL ITALIC CAPITAL Q
+1D478 ; [.2262.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL Q
+1D4AC ; [.2262.0020.000B] # MATHEMATICAL SCRIPT CAPITAL Q
+1D4E0 ; [.2262.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL Q
+1D514 ; [.2262.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL Q
+1D57C ; [.2262.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL Q
+1D5B0 ; [.2262.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL Q
+1D5E4 ; [.2262.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL Q
+1D618 ; [.2262.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL Q
+1D64C ; [.2262.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Q
+1D680 ; [.2262.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL Q
+24C6 ; [.2262.0020.000C] # CIRCLED LATIN CAPITAL LETTER Q
+1F160 ; [.2262.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER Q
+107A5 ; [.2262.0020.0014] # MODIFIER LETTER SMALL Q
+A7F4 ; [.2262.0020.001D] # MODIFIER LETTER CAPITAL Q
+1F140 ; [.2262.0020.001D] # SQUARED LATIN CAPITAL LETTER Q
+1F180 ; [.2262.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER Q
+0239 ; [.2262.0020.0004][.224D.0020.0004] # LATIN SMALL LETTER QP DIGRAPH
+A7AF ; [.2266.0020.0002] # LATIN LETTER SMALL CAPITAL Q
+A757 ; [.2267.0020.0002] # LATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDER
+A756 ; [.2267.0020.0008] # LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER
+A759 ; [.2268.0020.0002] # LATIN SMALL LETTER Q WITH DIAGONAL STROKE
+A758 ; [.2268.0020.0008] # LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE
+02A0 ; [.2269.0020.0002] # LATIN SMALL LETTER Q WITH HOOK
+024B ; [.226D.0020.0002] # LATIN SMALL LETTER Q WITH HOOK TAIL
+024A ; [.226D.0020.0008] # LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL
+0138 ; [.2271.0020.0002] # LATIN SMALL LETTER KRA
+0072 ; [.2275.0020.0002] # LATIN SMALL LETTER R
+FF52 ; [.2275.0020.0003] # FULLWIDTH LATIN SMALL LETTER R
+036C ; [.2275.0020.0004] # COMBINING LATIN SMALL LETTER R
+1DCA ; [.2275.0020.0004] # COMBINING LATIN SMALL LETTER R BELOW
+24AD ; [*0334.0020.0004][.2275.0020.0004][*0335.0020.0004] # PARENTHESIZED LATIN SMALL LETTER R
+1D42B ; [.2275.0020.0005] # MATHEMATICAL BOLD SMALL R
+1D45F ; [.2275.0020.0005] # MATHEMATICAL ITALIC SMALL R
+1D493 ; [.2275.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL R
+1D4C7 ; [.2275.0020.0005] # MATHEMATICAL SCRIPT SMALL R
+1D4FB ; [.2275.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL R
+1D52F ; [.2275.0020.0005] # MATHEMATICAL FRAKTUR SMALL R
+1D563 ; [.2275.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL R
+1D597 ; [.2275.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL R
+1D5CB ; [.2275.0020.0005] # MATHEMATICAL SANS-SERIF SMALL R
+1D5FF ; [.2275.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL R
+1D633 ; [.2275.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL R
+1D667 ; [.2275.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL R
+1D69B ; [.2275.0020.0005] # MATHEMATICAL MONOSPACE SMALL R
+24E1 ; [.2275.0020.0006] # CIRCLED LATIN SMALL LETTER R
+0052 ; [.2275.0020.0008] # LATIN CAPITAL LETTER R
+FF32 ; [.2275.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER R
+1F121 ; [*0334.0020.0004][.2275.0020.000A][*0335.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER R
+211B ; [.2275.0020.000B] # SCRIPT CAPITAL R
+211C ; [.2275.0020.000B] # BLACK-LETTER CAPITAL R
+211D ; [.2275.0020.000B] # DOUBLE-STRUCK CAPITAL R
+1D411 ; [.2275.0020.000B] # MATHEMATICAL BOLD CAPITAL R
+1D445 ; [.2275.0020.000B] # MATHEMATICAL ITALIC CAPITAL R
+1D479 ; [.2275.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL R
+1D4E1 ; [.2275.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL R
+1D57D ; [.2275.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL R
+1D5B1 ; [.2275.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL R
+1D5E5 ; [.2275.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL R
+1D619 ; [.2275.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL R
+1D64D ; [.2275.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL R
+1D681 ; [.2275.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL R
+24C7 ; [.2275.0020.000C] # CIRCLED LATIN CAPITAL LETTER R
+1F12C ; [.2275.0020.000C] # CIRCLED ITALIC LATIN CAPITAL LETTER R
+1F161 ; [.2275.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER R
+02B3 ; [.2275.0020.0014] # MODIFIER LETTER SMALL R
+1D63 ; [.2275.0020.0015] # LATIN SUBSCRIPT SMALL LETTER R
+1D3F ; [.2275.0020.001D] # MODIFIER LETTER CAPITAL R
+1F141 ; [.2275.0020.001D] # SQUARED LATIN CAPITAL LETTER R
+1F181 ; [.2275.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER R
+0155 ; [.2275.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER R WITH ACUTE
+0154 ; [.2275.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER R WITH ACUTE
+0159 ; [.2275.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER R WITH CARON
+0158 ; [.2275.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER R WITH CARON
+1E59 ; [.2275.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER R WITH DOT ABOVE
+1E58 ; [.2275.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER R WITH DOT ABOVE
+0157 ; [.2275.0020.0002][.0000.0030.0002] # LATIN SMALL LETTER R WITH CEDILLA
+0156 ; [.2275.0020.0008][.0000.0030.0002] # LATIN CAPITAL LETTER R WITH CEDILLA
+A7A7 ; [.2275.0020.0004][.0000.0035.0004] # LATIN SMALL LETTER R WITH OBLIQUE STROKE
+A7A6 ; [.2275.0020.000A][.0000.0035.0004] # LATIN CAPITAL LETTER R WITH OBLIQUE STROKE
+0211 ; [.2275.0020.0002][.0000.003C.0002] # LATIN SMALL LETTER R WITH DOUBLE GRAVE
+0210 ; [.2275.0020.0008][.0000.003C.0002] # LATIN CAPITAL LETTER R WITH DOUBLE GRAVE
+0213 ; [.2275.0020.0002][.0000.003E.0002] # LATIN SMALL LETTER R WITH INVERTED BREVE
+0212 ; [.2275.0020.0008][.0000.003E.0002] # LATIN CAPITAL LETTER R WITH INVERTED BREVE
+1E5B ; [.2275.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER R WITH DOT BELOW
+1E5A ; [.2275.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER R WITH DOT BELOW
+1E5D ; [.2275.0020.0002][.0000.0042.0002][.0000.0032.0002] # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
+1E5C ; [.2275.0020.0008][.0000.0042.0002][.0000.0032.0002] # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
+1E5F ; [.2275.0020.0002][.0000.0049.0002] # LATIN SMALL LETTER R WITH LINE BELOW
+1E5E ; [.2275.0020.0008][.0000.0049.0002] # LATIN CAPITAL LETTER R WITH LINE BELOW
+1ACD ; [.2275.0020.0004][.0000.0119.0004] # COMBINING LATIN SMALL LETTER INSULAR R
+A783 ; [.2275.0020.0004][.0000.0119.0004] # LATIN SMALL LETTER INSULAR R
+A782 ; [.2275.0020.000A][.0000.0119.0004] # LATIN CAPITAL LETTER INSULAR R
+1DE3 ; [.2275.0020.0004][.0000.011A.0004] # COMBINING LATIN SMALL LETTER R ROTUNDA
+A75B ; [.2275.0020.0004][.0000.011A.0004] # LATIN SMALL LETTER R ROTUNDA
+A75A ; [.2275.0020.000A][.0000.011A.0004] # LATIN CAPITAL LETTER R ROTUNDA
+33AD ; [.2275.0020.001C][.2075.0020.001C][.20BF.0020.001C] # SQUARE RAD
+33AE ; [.2275.0020.001C][.2075.0020.001C][.20BF.0020.001C][*06AC.0020.001C][.22B6.0020.001C] # SQUARE RAD OVER S
+33AF ; [.2275.0020.001C][.2075.0020.001C][.20BF.0020.001C][*06AC.0020.001C][.22B6.0020.001C][.206D.0020.001C] # SQUARE RAD OVER S SQUARED
+20A8 ; [.2275.0020.000A][.22B6.0020.0004] # RUPEE SIGN
+AB45 ; [.2279.0020.0002] # LATIN SMALL LETTER STIRRUP R
+0280 ; [.227A.0020.0002] # LATIN LETTER SMALL CAPITAL R
+1DE2 ; [.227A.0020.0004] # COMBINING LATIN LETTER SMALL CAPITAL R
+01A6 ; [.227A.0020.0008] # LATIN LETTER YR
+107AA ; [.227A.0020.0014] # MODIFIER LETTER SMALL CAPITAL R
+AB46 ; [.227E.0020.0002] # LATIN LETTER SMALL CAPITAL R WITH RIGHT LEG
+1D19 ; [.227F.0020.0002] # LATIN LETTER SMALL CAPITAL REVERSED R
+024D ; [.2280.0020.0002] # LATIN SMALL LETTER R WITH STROKE
+024C ; [.2280.0020.0008] # LATIN CAPITAL LETTER R WITH STROKE
+1D72 ; [.2284.0020.0002] # LATIN SMALL LETTER R WITH MIDDLE TILDE
+0279 ; [.2285.0020.0002] # LATIN SMALL LETTER TURNED R
+02B4 ; [.2285.0020.0014] # MODIFIER LETTER SMALL TURNED R
+1D1A ; [.2289.0020.0002] # LATIN LETTER SMALL CAPITAL TURNED R
+027A ; [.228A.0020.0002] # LATIN SMALL LETTER TURNED R WITH LONG LEG
+107A6 ; [.228A.0020.0014] # MODIFIER LETTER SMALL TURNED R WITH LONG LEG
+1DF08 ; [.228E.0020.0002] # LATIN SMALL LETTER TURNED R WITH LONG LEG AND RETROFLEX HOOK
+107A7 ; [.228E.0020.0014] # MODIFIER LETTER SMALL TURNED R WITH LONG LEG AND RETROFLEX HOOK
+1D89 ; [.228F.0020.0002] # LATIN SMALL LETTER R WITH PALATAL HOOK
+027B ; [.2290.0020.0002] # LATIN SMALL LETTER TURNED R WITH HOOK
+02B5 ; [.2290.0020.0014] # MODIFIER LETTER SMALL TURNED R WITH HOOK
+2C79 ; [.2294.0020.0002] # LATIN SMALL LETTER TURNED R WITH TAIL
+027C ; [.2295.0020.0002] # LATIN SMALL LETTER R WITH LONG LEG
+027D ; [.2299.0020.0002] # LATIN SMALL LETTER R WITH TAIL
+2C64 ; [.2299.0020.0008] # LATIN CAPITAL LETTER R WITH TAIL
+107A8 ; [.2299.0020.0014] # MODIFIER LETTER SMALL R WITH TAIL
+AB49 ; [.229D.0020.0002] # LATIN SMALL LETTER R WITH CROSSED-TAIL
+027E ; [.229E.0020.0002] # LATIN SMALL LETTER R WITH FISHHOOK
+107A9 ; [.229E.0020.0014] # MODIFIER LETTER SMALL R WITH FISHHOOK
+1D73 ; [.22A2.0020.0002] # LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE
+1DF16 ; [.22A3.0020.0002] # LATIN SMALL LETTER R WITH FISHHOOK AND PALATAL HOOK
+027F ; [.22A4.0020.0002] # LATIN SMALL LETTER REVERSED R WITH FISHHOOK
+AB47 ; [.22A8.0020.0002] # LATIN SMALL LETTER R WITHOUT HANDLE
+AB48 ; [.22A9.0020.0002] # LATIN SMALL LETTER DOUBLE R
+AB4A ; [.22AA.0020.0002] # LATIN SMALL LETTER DOUBLE R WITH CROSSED-TAIL
+AB4B ; [.22AB.0020.0002] # LATIN SMALL LETTER SCRIPT R
+AB4C ; [.22AC.0020.0002] # LATIN SMALL LETTER SCRIPT R WITH RING
+0281 ; [.22AD.0020.0002] # LATIN LETTER SMALL CAPITAL INVERTED R
+02B6 ; [.22AD.0020.0014] # MODIFIER LETTER SMALL CAPITAL INVERTED R
+AB68 ; [.22B1.0020.0002] # LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE
+1DF15 ; [.22B2.0020.0002] # LATIN SMALL LETTER TURNED R WITH PALATAL HOOK
+A775 ; [.22B3.0020.0002] # LATIN SMALL LETTER RUM
+A776 ; [.22B4.0020.0002] # LATIN LETTER SMALL CAPITAL RUM
+A75D ; [.22B5.0020.0002] # LATIN SMALL LETTER RUM ROTUNDA
+A75C ; [.22B5.0020.0008] # LATIN CAPITAL LETTER RUM ROTUNDA
+0073 ; [.22B6.0020.0002] # LATIN SMALL LETTER S
+FF53 ; [.22B6.0020.0003] # FULLWIDTH LATIN SMALL LETTER S
+1DE4 ; [.22B6.0020.0004] # COMBINING LATIN SMALL LETTER S
+24AE ; [*0334.0020.0004][.22B6.0020.0004][*0335.0020.0004] # PARENTHESIZED LATIN SMALL LETTER S
+1D42C ; [.22B6.0020.0005] # MATHEMATICAL BOLD SMALL S
+1D460 ; [.22B6.0020.0005] # MATHEMATICAL ITALIC SMALL S
+1D494 ; [.22B6.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL S
+1D4C8 ; [.22B6.0020.0005] # MATHEMATICAL SCRIPT SMALL S
+1D4FC ; [.22B6.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL S
+1D530 ; [.22B6.0020.0005] # MATHEMATICAL FRAKTUR SMALL S
+1D564 ; [.22B6.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL S
+1D598 ; [.22B6.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL S
+1D5CC ; [.22B6.0020.0005] # MATHEMATICAL SANS-SERIF SMALL S
+1D600 ; [.22B6.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL S
+1D634 ; [.22B6.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL S
+1D668 ; [.22B6.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL S
+1D69C ; [.22B6.0020.0005] # MATHEMATICAL MONOSPACE SMALL S
+24E2 ; [.22B6.0020.0006] # CIRCLED LATIN SMALL LETTER S
+0053 ; [.22B6.0020.0008] # LATIN CAPITAL LETTER S
+FF33 ; [.22B6.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER S
+1F122 ; [*0334.0020.0004][.22B6.0020.000A][*0335.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER S
+1F12A ; [*039E.0020.0004][.22B6.0020.000A][*039F.0020.0004] # TORTOISE SHELL BRACKETED LATIN CAPITAL LETTER S
+1D412 ; [.22B6.0020.000B] # MATHEMATICAL BOLD CAPITAL S
+1D446 ; [.22B6.0020.000B] # MATHEMATICAL ITALIC CAPITAL S
+1D47A ; [.22B6.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL S
+1D4AE ; [.22B6.0020.000B] # MATHEMATICAL SCRIPT CAPITAL S
+1D4E2 ; [.22B6.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL S
+1D516 ; [.22B6.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL S
+1D54A ; [.22B6.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL S
+1D57E ; [.22B6.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL S
+1D5B2 ; [.22B6.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL S
+1D5E6 ; [.22B6.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL S
+1D61A ; [.22B6.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL S
+1D64E ; [.22B6.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL S
+1D682 ; [.22B6.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL S
+24C8 ; [.22B6.0020.000C] # CIRCLED LATIN CAPITAL LETTER S
+1F162 ; [.22B6.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER S
+02E2 ; [.22B6.0020.0014] # MODIFIER LETTER SMALL S
+209B ; [.22B6.0020.0015] # LATIN SUBSCRIPT SMALL LETTER S
+1F142 ; [.22B6.0020.001D] # SQUARED LATIN CAPITAL LETTER S
+1F182 ; [.22B6.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER S
+015B ; [.22B6.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER S WITH ACUTE
+015A ; [.22B6.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER S WITH ACUTE
+1E65 ; [.22B6.0020.0002][.0000.0024.0002][.0000.002E.0002] # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
+1E64 ; [.22B6.0020.0008][.0000.0024.0002][.0000.002E.0002] # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
+015D ; [.22B6.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER S WITH CIRCUMFLEX
+015C ; [.22B6.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER S WITH CIRCUMFLEX
+0161 ; [.22B6.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER S WITH CARON
+0160 ; [.22B6.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER S WITH CARON
+1E67 ; [.22B6.0020.0002][.0000.0028.0002][.0000.002E.0002] # LATIN SMALL LETTER S WITH CARON AND DOT ABOVE
+1E66 ; [.22B6.0020.0008][.0000.0028.0002][.0000.002E.0002] # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE
+1E61 ; [.22B6.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER S WITH DOT ABOVE
+1E60 ; [.22B6.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER S WITH DOT ABOVE
+015F ; [.22B6.0020.0002][.0000.0030.0002] # LATIN SMALL LETTER S WITH CEDILLA
+015E ; [.22B6.0020.0008][.0000.0030.0002] # LATIN CAPITAL LETTER S WITH CEDILLA
+A7A9 ; [.22B6.0020.0004][.0000.0035.0004] # LATIN SMALL LETTER S WITH OBLIQUE STROKE
+A7A8 ; [.22B6.0020.000A][.0000.0035.0004] # LATIN CAPITAL LETTER S WITH OBLIQUE STROKE
+1E63 ; [.22B6.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER S WITH DOT BELOW
+1E62 ; [.22B6.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER S WITH DOT BELOW
+1E69 ; [.22B6.0020.0002][.0000.0042.0002][.0000.002E.0002] # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE
+1E68 ; [.22B6.0020.0008][.0000.0042.0002][.0000.002E.0002] # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE
+0219 ; [.22B6.0020.0002][.0000.0045.0002] # LATIN SMALL LETTER S WITH COMMA BELOW
+0218 ; [.22B6.0020.0008][.0000.0045.0002] # LATIN CAPITAL LETTER S WITH COMMA BELOW
+017F ; [.22B6.0020.0004][.0000.0119.0004] # LATIN SMALL LETTER LONG S
+1DE5 ; [.22B6.0020.0004][.0000.0119.0004] # COMBINING LATIN SMALL LETTER LONG S
+1E9B ; [.22B6.0020.0004][.0000.0119.0004][.0000.002E.0002] # LATIN SMALL LETTER LONG S WITH DOT ABOVE
+A785 ; [.22B6.0020.0004][.0000.011A.0004] # LATIN SMALL LETTER INSULAR S
+A784 ; [.22B6.0020.000A][.0000.011A.0004] # LATIN CAPITAL LETTER INSULAR S
+A7D9 ; [.22B6.0020.0004][.0000.011B.0004] # LATIN SMALL LETTER SIGMOID S
+A7D8 ; [.22B6.0020.000A][.0000.011B.0004] # LATIN CAPITAL LETTER SIGMOID S
+1F18D ; [.22B6.0020.001D][.2075.0020.001D] # NEGATIVE SQUARED SA
+1F14C ; [.22B6.0020.001D][.20BF.0020.001D] # SQUARED SD
+1F1AA ; [.22B6.0020.001D][.214C.0020.001D][.2331.0020.001D] # SQUARED SHV
+2120 ; [.22B6.0020.0014][.21E8.0020.0014] # SERVICE MARK
+1F198 ; [.22B6.0020.001D][.221D.0020.001D][.22B6.0020.001D] # SQUARED SOS
+33DB ; [.22B6.0020.001C][.2275.0020.001C] # SQUARE SR
+1F14D ; [.22B6.0020.001D][.22B6.0020.001D] # SQUARED SS
+00DF ; [.22B6.0020.0004][.0000.0118.0004][.22B6.0020.0004] # LATIN SMALL LETTER SHARP S
+1E9E ; [.22B6.0020.000A][.0000.0118.0004][.22B6.0020.000A] # LATIN CAPITAL LETTER SHARP S
+FB06 ; [.22B6.0020.0004][.22DF.0020.0004] # LATIN SMALL LIGATURE ST
+FB05 ; [.22B6.0020.0004][.0000.0119.0004][.22DF.0020.0004] # LATIN SMALL LIGATURE LONG S T
+33DC ; [.22B6.0020.001D][.2331.0020.001C] # SQUARE SV
+A731 ; [.22BA.0020.0002] # LATIN LETTER SMALL CAPITAL S
+A7CA ; [.22BB.0020.0002] # LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY
+A7C9 ; [.22BB.0020.0008] # LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY
+1D74 ; [.22BC.0020.0002] # LATIN SMALL LETTER S WITH MIDDLE TILDE
+1D8A ; [.22BD.0020.0002] # LATIN SMALL LETTER S WITH PALATAL HOOK
+0282 ; [.22BE.0020.0002] # LATIN SMALL LETTER S WITH HOOK
+A7C5 ; [.22BE.0020.0008] # LATIN CAPITAL LETTER S WITH HOOK
+1DB3 ; [.22BE.0020.0014] # MODIFIER LETTER SMALL S WITH HOOK
+1DF1E ; [.22C2.0020.0002] # LATIN SMALL LETTER S WITH CURL
+107BA ; [.22C2.0020.0014] # MODIFIER LETTER SMALL S WITH CURL
+023F ; [.22C3.0020.0002] # LATIN SMALL LETTER S WITH SWASH TAIL
+2C7E ; [.22C3.0020.0008] # LATIN CAPITAL LETTER S WITH SWASH TAIL
+A7D7 ; [.22C7.0020.0002] # LATIN SMALL LETTER MIDDLE SCOTS S
+A7D6 ; [.22C7.0020.0008] # LATIN CAPITAL LETTER MIDDLE SCOTS S
+1E9C ; [.22C8.0020.0002] # LATIN SMALL LETTER LONG S WITH DIAGONAL STROKE
+1E9D ; [.22C9.0020.0002] # LATIN SMALL LETTER LONG S WITH HIGH STROKE
+0283 ; [.22CA.0020.0002] # LATIN SMALL LETTER ESH
+1DEF ; [.22CA.0020.0004] # COMBINING LATIN SMALL LETTER ESH
+01A9 ; [.22CA.0020.0008] # LATIN CAPITAL LETTER ESH
+1DB4 ; [.22CA.0020.0014] # MODIFIER LETTER SMALL ESH
+AB4D ; [.22CE.0020.0002] # LATIN SMALL LETTER BASELINE ESH
+1D8B ; [.22CF.0020.0002] # LATIN SMALL LETTER ESH WITH PALATAL HOOK
+1D98 ; [.22D0.0020.0002] # LATIN SMALL LETTER ESH WITH RETROFLEX HOOK
+01AA ; [.22D1.0020.0002] # LATIN LETTER REVERSED ESH LOOP
+0285 ; [.22D5.0020.0002] # LATIN SMALL LETTER SQUAT REVERSED ESH
+0286 ; [.22D9.0020.0002] # LATIN SMALL LETTER ESH WITH CURL
+1DF0B ; [.22DD.0020.0002] # LATIN SMALL LETTER ESH WITH DOUBLE BAR
+1DF0C ; [.22DE.0020.0002] # LATIN SMALL LETTER ESH WITH DOUBLE BAR AND CURL
+0074 ; [.22DF.0020.0002] # LATIN SMALL LETTER T
+FF54 ; [.22DF.0020.0003] # FULLWIDTH LATIN SMALL LETTER T
+036D ; [.22DF.0020.0004] # COMBINING LATIN SMALL LETTER T
+24AF ; [*0334.0020.0004][.22DF.0020.0004][*0335.0020.0004] # PARENTHESIZED LATIN SMALL LETTER T
+1D42D ; [.22DF.0020.0005] # MATHEMATICAL BOLD SMALL T
+1D461 ; [.22DF.0020.0005] # MATHEMATICAL ITALIC SMALL T
+1D495 ; [.22DF.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL T
+1D4C9 ; [.22DF.0020.0005] # MATHEMATICAL SCRIPT SMALL T
+1D4FD ; [.22DF.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL T
+1D531 ; [.22DF.0020.0005] # MATHEMATICAL FRAKTUR SMALL T
+1D565 ; [.22DF.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL T
+1D599 ; [.22DF.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL T
+1D5CD ; [.22DF.0020.0005] # MATHEMATICAL SANS-SERIF SMALL T
+1D601 ; [.22DF.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL T
+1D635 ; [.22DF.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL T
+1D669 ; [.22DF.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL T
+1D69D ; [.22DF.0020.0005] # MATHEMATICAL MONOSPACE SMALL T
+24E3 ; [.22DF.0020.0006] # CIRCLED LATIN SMALL LETTER T
+0054 ; [.22DF.0020.0008] # LATIN CAPITAL LETTER T
+FF34 ; [.22DF.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER T
+1F123 ; [*0334.0020.0004][.22DF.0020.000A][*0335.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER T
+1D413 ; [.22DF.0020.000B] # MATHEMATICAL BOLD CAPITAL T
+1D447 ; [.22DF.0020.000B] # MATHEMATICAL ITALIC CAPITAL T
+1D47B ; [.22DF.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL T
+1D4AF ; [.22DF.0020.000B] # MATHEMATICAL SCRIPT CAPITAL T
+1D4E3 ; [.22DF.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL T
+1D517 ; [.22DF.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL T
+1D54B ; [.22DF.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL T
+1D57F ; [.22DF.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL T
+1D5B3 ; [.22DF.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL T
+1D5E7 ; [.22DF.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL T
+1D61B ; [.22DF.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL T
+1D64F ; [.22DF.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL T
+1D683 ; [.22DF.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL T
+24C9 ; [.22DF.0020.000C] # CIRCLED LATIN CAPITAL LETTER T
+1F163 ; [.22DF.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER T
+1D57 ; [.22DF.0020.0014] # MODIFIER LETTER SMALL T
+209C ; [.22DF.0020.0015] # LATIN SUBSCRIPT SMALL LETTER T
+1D40 ; [.22DF.0020.001D] # MODIFIER LETTER CAPITAL T
+1F143 ; [.22DF.0020.001D] # SQUARED LATIN CAPITAL LETTER T
+1F183 ; [.22DF.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER T
+0165 ; [.22DF.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER T WITH CARON
+0164 ; [.22DF.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER T WITH CARON
+1E97 ; [.22DF.0020.0002][.0000.002B.0002] # LATIN SMALL LETTER T WITH DIAERESIS
+1E6B ; [.22DF.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER T WITH DOT ABOVE
+1E6A ; [.22DF.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER T WITH DOT ABOVE
+0163 ; [.22DF.0020.0002][.0000.0030.0002] # LATIN SMALL LETTER T WITH CEDILLA
+0162 ; [.22DF.0020.0008][.0000.0030.0002] # LATIN CAPITAL LETTER T WITH CEDILLA
+1E6D ; [.22DF.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER T WITH DOT BELOW
+1E6C ; [.22DF.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER T WITH DOT BELOW
+021B ; [.22DF.0020.0002][.0000.0045.0002] # LATIN SMALL LETTER T WITH COMMA BELOW
+021A ; [.22DF.0020.0008][.0000.0045.0002] # LATIN CAPITAL LETTER T WITH COMMA BELOW
+1E71 ; [.22DF.0020.0002][.0000.0046.0002] # LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW
+1E70 ; [.22DF.0020.0008][.0000.0046.0002] # LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW
+1E6F ; [.22DF.0020.0002][.0000.0049.0002] # LATIN SMALL LETTER T WITH LINE BELOW
+1E6E ; [.22DF.0020.0008][.0000.0049.0002] # LATIN CAPITAL LETTER T WITH LINE BELOW
+1ACE ; [.22DF.0020.0004][.0000.0119.0004] # COMBINING LATIN SMALL LETTER INSULAR T
+A787 ; [.22DF.0020.0004][.0000.0119.0004] # LATIN SMALL LETTER INSULAR T
+A786 ; [.22DF.0020.000A][.0000.0119.0004] # LATIN CAPITAL LETTER INSULAR T
+02A8 ; [.22DF.0020.0004][.20B9.0020.0004] # LATIN SMALL LETTER TC DIGRAPH WITH CURL
+107AB ; [.22DF.0020.0014][.20B9.0020.0014] # MODIFIER LETTER SMALL TC DIGRAPH WITH CURL
+2121 ; [.22DF.0020.000A][.20DB.0020.000A][.21B0.0020.000A] # TELEPHONE SIGN
+1D7A ; [.22DF.0020.0004][.0000.0118.0004][.214C.0020.0004] # LATIN SMALL LETTER TH WITH STRIKETHROUGH
+3394 ; [.22DF.0020.001D][.214C.0020.001D][.236F.0020.001C] # SQUARE THZ
+2122 ; [.22DF.0020.0014][.21E8.0020.0014] # TRADE MARK SIGN
+01BE ; [.22DF.0020.0004][.22B6.0020.0004] # LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE
+02A6 ; [.22DF.0020.0004][.22B6.0020.0004] # LATIN SMALL LETTER TS DIGRAPH
+107AC ; [.22DF.0020.0014][.22B6.0020.0014] # MODIFIER LETTER SMALL TS DIGRAPH
+AB67 ; [.22DF.0020.0004][.22BE.0020.0004] # LATIN SMALL LETTER TS DIGRAPH WITH RETROFLEX HOOK
+107AD ; [.22DF.0020.0014][.22BE.0020.0014] # MODIFIER LETTER SMALL TS DIGRAPH WITH RETROFLEX HOOK
+02A7 ; [.22DF.0020.0004][.22CA.0020.0004] # LATIN SMALL LETTER TESH DIGRAPH
+107AE ; [.22DF.0020.0014][.22CA.0020.0014] # MODIFIER LETTER SMALL TESH DIGRAPH
+1DF17 ; [.22DF.0020.0004][.22CF.0020.0004] # LATIN SMALL LETTER TESH DIGRAPH WITH PALATAL HOOK
+1DF1C ; [.22DF.0020.0004][.22D0.0020.0004] # LATIN SMALL LETTER TESH DIGRAPH WITH RETROFLEX HOOK
+A729 ; [.22DF.0020.0004][.236F.0020.0004] # LATIN SMALL LETTER TZ
+A728 ; [.22DF.0020.000A][.236F.0020.0004] # LATIN CAPITAL LETTER TZ
+1D1B ; [.22E3.0020.0002] # LATIN LETTER SMALL CAPITAL T
+0167 ; [.22E4.0020.0002] # LATIN SMALL LETTER T WITH STROKE
+0166 ; [.22E4.0020.0008] # LATIN CAPITAL LETTER T WITH STROKE
+2C66 ; [.22E8.0020.0002] # LATIN SMALL LETTER T WITH DIAGONAL STROKE
+023E ; [.22E8.0020.0008] # LATIN CAPITAL LETTER T WITH DIAGONAL STROKE
+1D75 ; [.22E9.0020.0002] # LATIN SMALL LETTER T WITH MIDDLE TILDE
+01AB ; [.22EA.0020.0002] # LATIN SMALL LETTER T WITH PALATAL HOOK
+1DB5 ; [.22EA.0020.0014] # MODIFIER LETTER SMALL T WITH PALATAL HOOK
+01AD ; [.22EE.0020.0002] # LATIN SMALL LETTER T WITH HOOK
+01AC ; [.22EE.0020.0008] # LATIN CAPITAL LETTER T WITH HOOK
+0288 ; [.22F2.0020.0002] # LATIN SMALL LETTER T WITH RETROFLEX HOOK
+01AE ; [.22F2.0020.0008] # LATIN CAPITAL LETTER T WITH RETROFLEX HOOK
+107AF ; [.22F2.0020.0014] # MODIFIER LETTER SMALL T WITH RETROFLEX HOOK
+1DF09 ; [.22F6.0020.0002] # LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK
+0236 ; [.22F7.0020.0002] # LATIN SMALL LETTER T WITH CURL
+A777 ; [.22FB.0020.0002] # LATIN SMALL LETTER TUM
+0287 ; [.22FC.0020.0002] # LATIN SMALL LETTER TURNED T
+A7B1 ; [.22FC.0020.0008] # LATIN CAPITAL LETTER TURNED T
+1DF0D ; [.2300.0020.0002] # LATIN SMALL LETTER TURNED T WITH CURL
+0075 ; [.2301.0020.0002] # LATIN SMALL LETTER U
+FF55 ; [.2301.0020.0003] # FULLWIDTH LATIN SMALL LETTER U
+0367 ; [.2301.0020.0004] # COMBINING LATIN SMALL LETTER U
+24B0 ; [*0334.0020.0004][.2301.0020.0004][*0335.0020.0004] # PARENTHESIZED LATIN SMALL LETTER U
+1D42E ; [.2301.0020.0005] # MATHEMATICAL BOLD SMALL U
+1D462 ; [.2301.0020.0005] # MATHEMATICAL ITALIC SMALL U
+1D496 ; [.2301.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL U
+1D4CA ; [.2301.0020.0005] # MATHEMATICAL SCRIPT SMALL U
+1D4FE ; [.2301.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL U
+1D532 ; [.2301.0020.0005] # MATHEMATICAL FRAKTUR SMALL U
+1D566 ; [.2301.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL U
+1D59A ; [.2301.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL U
+1D5CE ; [.2301.0020.0005] # MATHEMATICAL SANS-SERIF SMALL U
+1D602 ; [.2301.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL U
+1D636 ; [.2301.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL U
+1D66A ; [.2301.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL U
+1D69E ; [.2301.0020.0005] # MATHEMATICAL MONOSPACE SMALL U
+24E4 ; [.2301.0020.0006] # CIRCLED LATIN SMALL LETTER U
+0055 ; [.2301.0020.0008] # LATIN CAPITAL LETTER U
+FF35 ; [.2301.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER U
+1F124 ; [*0334.0020.0004][.2301.0020.000A][*0335.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER U
+1D414 ; [.2301.0020.000B] # MATHEMATICAL BOLD CAPITAL U
+1D448 ; [.2301.0020.000B] # MATHEMATICAL ITALIC CAPITAL U
+1D47C ; [.2301.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL U
+1D4B0 ; [.2301.0020.000B] # MATHEMATICAL SCRIPT CAPITAL U
+1D4E4 ; [.2301.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL U
+1D518 ; [.2301.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL U
+1D54C ; [.2301.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL U
+1D580 ; [.2301.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL U
+1D5B4 ; [.2301.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL U
+1D5E8 ; [.2301.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL U
+1D61C ; [.2301.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL U
+1D650 ; [.2301.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL U
+1D684 ; [.2301.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL U
+24CA ; [.2301.0020.000C] # CIRCLED LATIN CAPITAL LETTER U
+1F164 ; [.2301.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER U
+1D58 ; [.2301.0020.0014] # MODIFIER LETTER SMALL U
+1D64 ; [.2301.0020.0015] # LATIN SUBSCRIPT SMALL LETTER U
+1D41 ; [.2301.0020.001D] # MODIFIER LETTER CAPITAL U
+1F144 ; [.2301.0020.001D] # SQUARED LATIN CAPITAL LETTER U
+1F184 ; [.2301.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER U
+00FA ; [.2301.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH ACUTE
+00DA ; [.2301.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH ACUTE
+00F9 ; [.2301.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH GRAVE
+00D9 ; [.2301.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH GRAVE
+016D ; [.2301.0020.0002][.0000.0026.0002] # LATIN SMALL LETTER U WITH BREVE
+016C ; [.2301.0020.0008][.0000.0026.0002] # LATIN CAPITAL LETTER U WITH BREVE
+00FB ; [.2301.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER U WITH CIRCUMFLEX
+00DB ; [.2301.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+01D4 ; [.2301.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH CARON
+01D3 ; [.2301.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH CARON
+016F ; [.2301.0020.0002][.0000.0029.0002] # LATIN SMALL LETTER U WITH RING ABOVE
+016E ; [.2301.0020.0008][.0000.0029.0002] # LATIN CAPITAL LETTER U WITH RING ABOVE
+00FC ; [.2301.0020.0002][.0000.002B.0002] # LATIN SMALL LETTER U WITH DIAERESIS
+1DF4 ; [.2301.0020.0004][.0000.002B.0004] # COMBINING LATIN SMALL LETTER U WITH DIAERESIS
+A79F ; [.2301.0020.0004][.0000.002B.0004] # LATIN SMALL LETTER VOLAPUK UE
+00DC ; [.2301.0020.0008][.0000.002B.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS
+A79E ; [.2301.0020.000A][.0000.002B.0004] # LATIN CAPITAL LETTER VOLAPUK UE
+01D8 ; [.2301.0020.0002][.0000.002B.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
+01D7 ; [.2301.0020.0008][.0000.002B.0002][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
+01DC ; [.2301.0020.0002][.0000.002B.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
+01DB ; [.2301.0020.0008][.0000.002B.0002][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
+01DA ; [.2301.0020.0002][.0000.002B.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON
+01D9 ; [.2301.0020.0008][.0000.002B.0002][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
+01D6 ; [.2301.0020.0002][.0000.002B.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
+01D5 ; [.2301.0020.0008][.0000.002B.0002][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
+0171 ; [.2301.0020.0002][.0000.002C.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE
+0170 ; [.2301.0020.0008][.0000.002C.0002] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+0169 ; [.2301.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER U WITH TILDE
+0168 ; [.2301.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER U WITH TILDE
+1E79 ; [.2301.0020.0002][.0000.002D.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH TILDE AND ACUTE
+1E78 ; [.2301.0020.0008][.0000.002D.0002][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
+0173 ; [.2301.0020.0002][.0000.0031.0002] # LATIN SMALL LETTER U WITH OGONEK
+0172 ; [.2301.0020.0008][.0000.0031.0002] # LATIN CAPITAL LETTER U WITH OGONEK
+016B ; [.2301.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH MACRON
+016A ; [.2301.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH MACRON
+1E7B ; [.2301.0020.0002][.0000.0032.0002][.0000.002B.0002] # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS
+1E7A ; [.2301.0020.0008][.0000.0032.0002][.0000.002B.0002] # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS
+1DF0 ; [.2301.0020.0004][.0000.0034.0004] # COMBINING LATIN SMALL LETTER U WITH LIGHT CENTRALIZATION STROKE
+1EE7 ; [.2301.0020.0002][.0000.003B.0002] # LATIN SMALL LETTER U WITH HOOK ABOVE
+1EE6 ; [.2301.0020.0008][.0000.003B.0002] # LATIN CAPITAL LETTER U WITH HOOK ABOVE
+0215 ; [.2301.0020.0002][.0000.003C.0002] # LATIN SMALL LETTER U WITH DOUBLE GRAVE
+0214 ; [.2301.0020.0008][.0000.003C.0002] # LATIN CAPITAL LETTER U WITH DOUBLE GRAVE
+0217 ; [.2301.0020.0002][.0000.003E.0002] # LATIN SMALL LETTER U WITH INVERTED BREVE
+0216 ; [.2301.0020.0008][.0000.003E.0002] # LATIN CAPITAL LETTER U WITH INVERTED BREVE
+01B0 ; [.2301.0020.0002][.0000.003F.0002] # LATIN SMALL LETTER U WITH HORN
+01AF ; [.2301.0020.0008][.0000.003F.0002] # LATIN CAPITAL LETTER U WITH HORN
+1EE9 ; [.2301.0020.0002][.0000.003F.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH HORN AND ACUTE
+1EE8 ; [.2301.0020.0008][.0000.003F.0002][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH HORN AND ACUTE
+1EEB ; [.2301.0020.0002][.0000.003F.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH HORN AND GRAVE
+1EEA ; [.2301.0020.0008][.0000.003F.0002][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH HORN AND GRAVE
+1EEF ; [.2301.0020.0002][.0000.003F.0002][.0000.002D.0002] # LATIN SMALL LETTER U WITH HORN AND TILDE
+1EEE ; [.2301.0020.0008][.0000.003F.0002][.0000.002D.0002] # LATIN CAPITAL LETTER U WITH HORN AND TILDE
+1EED ; [.2301.0020.0002][.0000.003F.0002][.0000.003B.0002] # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
+1EEC ; [.2301.0020.0008][.0000.003F.0002][.0000.003B.0002] # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
+1EF1 ; [.2301.0020.0002][.0000.003F.0002][.0000.0042.0002] # LATIN SMALL LETTER U WITH HORN AND DOT BELOW
+1EF0 ; [.2301.0020.0008][.0000.003F.0002][.0000.0042.0002] # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
+1EE5 ; [.2301.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER U WITH DOT BELOW
+1EE4 ; [.2301.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER U WITH DOT BELOW
+1E73 ; [.2301.0020.0002][.0000.0043.0002] # LATIN SMALL LETTER U WITH DIAERESIS BELOW
+1E72 ; [.2301.0020.0008][.0000.0043.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS BELOW
+1E77 ; [.2301.0020.0002][.0000.0046.0002] # LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW
+1E76 ; [.2301.0020.0008][.0000.0046.0002] # LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW
+1E75 ; [.2301.0020.0002][.0000.0048.0002] # LATIN SMALL LETTER U WITH TILDE BELOW
+1E74 ; [.2301.0020.0008][.0000.0048.0002] # LATIN CAPITAL LETTER U WITH TILDE BELOW
+1F1AB ; [.2301.0020.001D][.214C.0020.001D][.20BF.0020.001D] # SQUARED UHD
+1F199 ; [.2301.0020.001D][.224D.0020.001D][*0268.0020.001C] # SQUARED UP WITH EXCLAMATION MARK
+1D1C ; [.2305.0020.0002] # LATIN LETTER SMALL CAPITAL U
+1DB8 ; [.2305.0020.0014] # MODIFIER LETTER SMALL CAPITAL U
+AB4E ; [.2306.0020.0002] # LATIN SMALL LETTER U WITH SHORT RIGHT LEG
+1D1D ; [.2307.0020.0002] # LATIN SMALL LETTER SIDEWAYS U
+1D59 ; [.2307.0020.0014] # MODIFIER LETTER SMALL SIDEWAYS U
+1D1E ; [.2308.0020.0002] # LATIN SMALL LETTER SIDEWAYS DIAERESIZED U
+1D6B ; [.2309.0020.0002] # LATIN SMALL LETTER UE
+AB50 ; [.230A.0020.0002] # LATIN SMALL LETTER UI
+AB51 ; [.230B.0020.0002] # LATIN SMALL LETTER TURNED UI
+0289 ; [.230C.0020.0002] # LATIN SMALL LETTER U BAR
+0244 ; [.230C.0020.0008] # LATIN CAPITAL LETTER U BAR
+1DB6 ; [.230C.0020.0014] # MODIFIER LETTER SMALL U BAR
+AB4F ; [.2310.0020.0002] # LATIN SMALL LETTER U BAR WITH SHORT RIGHT LEG
+A7B9 ; [.2311.0020.0002] # LATIN SMALL LETTER U WITH STROKE
+A7B8 ; [.2311.0020.0008] # LATIN CAPITAL LETTER U WITH STROKE
+1D7E ; [.2312.0020.0002] # LATIN SMALL CAPITAL LETTER U WITH STROKE
+1D99 ; [.2313.0020.0002] # LATIN SMALL LETTER U WITH RETROFLEX HOOK
+AB52 ; [.2314.0020.0002] # LATIN SMALL LETTER U WITH LEFT HOOK
+AB5F ; [.2314.0020.0014] # MODIFIER LETTER SMALL U WITH LEFT HOOK
+A7BF ; [.2315.0020.0002] # LATIN SMALL LETTER GLOTTAL U
+A7BE ; [.2315.0020.0008] # LATIN CAPITAL LETTER GLOTTAL U
+0265 ; [.2316.0020.0002] # LATIN SMALL LETTER TURNED H
+A78D ; [.2316.0020.0008] # LATIN CAPITAL LETTER TURNED H
+1DA3 ; [.2316.0020.0014] # MODIFIER LETTER SMALL TURNED H
+02AE ; [.231A.0020.0002] # LATIN SMALL LETTER TURNED H WITH FISHHOOK
+02AF ; [.231E.0020.0002] # LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL
+026F ; [.2322.0020.0002] # LATIN SMALL LETTER TURNED M
+019C ; [.2322.0020.0008] # LATIN CAPITAL LETTER TURNED M
+1D5A ; [.2322.0020.0014] # MODIFIER LETTER SMALL TURNED M
+A7FA ; [.2326.0020.0002] # LATIN LETTER SMALL CAPITAL TURNED M
+1D1F ; [.2327.0020.0002] # LATIN SMALL LETTER SIDEWAYS TURNED M
+0270 ; [.2328.0020.0002] # LATIN SMALL LETTER TURNED M WITH LONG LEG
+1DAD ; [.2328.0020.0014] # MODIFIER LETTER SMALL TURNED M WITH LONG LEG
+028A ; [.232C.0020.0002] # LATIN SMALL LETTER UPSILON
+01B1 ; [.232C.0020.0008] # LATIN CAPITAL LETTER UPSILON
+1DB7 ; [.232C.0020.0014] # MODIFIER LETTER SMALL UPSILON
+1D7F ; [.2330.0020.0002] # LATIN SMALL LETTER UPSILON WITH STROKE
+0076 ; [.2331.0020.0002] # LATIN SMALL LETTER V
+FF56 ; [.2331.0020.0003] # FULLWIDTH LATIN SMALL LETTER V
+036E ; [.2331.0020.0004] # COMBINING LATIN SMALL LETTER V
+2174 ; [.2331.0020.0004] # SMALL ROMAN NUMERAL FIVE
+24B1 ; [*0334.0020.0004][.2331.0020.0004][*0335.0020.0004] # PARENTHESIZED LATIN SMALL LETTER V
+1D42F ; [.2331.0020.0005] # MATHEMATICAL BOLD SMALL V
+1D463 ; [.2331.0020.0005] # MATHEMATICAL ITALIC SMALL V
+1D497 ; [.2331.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL V
+1D4CB ; [.2331.0020.0005] # MATHEMATICAL SCRIPT SMALL V
+1D4FF ; [.2331.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL V
+1D533 ; [.2331.0020.0005] # MATHEMATICAL FRAKTUR SMALL V
+1D567 ; [.2331.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL V
+1D59B ; [.2331.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL V
+1D5CF ; [.2331.0020.0005] # MATHEMATICAL SANS-SERIF SMALL V
+1D603 ; [.2331.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL V
+1D637 ; [.2331.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL V
+1D66B ; [.2331.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL V
+1D69F ; [.2331.0020.0005] # MATHEMATICAL MONOSPACE SMALL V
+24E5 ; [.2331.0020.0006] # CIRCLED LATIN SMALL LETTER V
+0056 ; [.2331.0020.0008] # LATIN CAPITAL LETTER V
+FF36 ; [.2331.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER V
+2164 ; [.2331.0020.000A] # ROMAN NUMERAL FIVE
+1F125 ; [*0334.0020.0004][.2331.0020.000A][*0335.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER V
+1D415 ; [.2331.0020.000B] # MATHEMATICAL BOLD CAPITAL V
+1D449 ; [.2331.0020.000B] # MATHEMATICAL ITALIC CAPITAL V
+1D47D ; [.2331.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL V
+1D4B1 ; [.2331.0020.000B] # MATHEMATICAL SCRIPT CAPITAL V
+1D4E5 ; [.2331.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL V
+1D519 ; [.2331.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL V
+1D54D ; [.2331.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL V
+1D581 ; [.2331.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL V
+1D5B5 ; [.2331.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL V
+1D5E9 ; [.2331.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL V
+1D61D ; [.2331.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL V
+1D651 ; [.2331.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL V
+1D685 ; [.2331.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL V
+24CB ; [.2331.0020.000C] # CIRCLED LATIN CAPITAL LETTER V
+1F165 ; [.2331.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER V
+1D5B ; [.2331.0020.0014] # MODIFIER LETTER SMALL V
+1D65 ; [.2331.0020.0015] # LATIN SUBSCRIPT SMALL LETTER V
+2C7D ; [.2331.0020.001D] # MODIFIER LETTER CAPITAL V
+1F145 ; [.2331.0020.001D] # SQUARED LATIN CAPITAL LETTER V
+1F185 ; [.2331.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER V
+1E7D ; [.2331.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER V WITH TILDE
+1E7C ; [.2331.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER V WITH TILDE
+1E7F ; [.2331.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER V WITH DOT BELOW
+1E7E ; [.2331.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER V WITH DOT BELOW
+2175 ; [.2331.0020.0004][.2167.0020.0004] # SMALL ROMAN NUMERAL SIX
+2165 ; [.2331.0020.000A][.2167.0020.000A] # ROMAN NUMERAL SIX
+2176 ; [.2331.0020.0004][.2167.0020.0004][.2167.0020.0004] # SMALL ROMAN NUMERAL SEVEN
+2166 ; [.2331.0020.000A][.2167.0020.000A][.2167.0020.000A] # ROMAN NUMERAL SEVEN
+2177 ; [.2331.0020.0004][.2167.0020.0004][.2167.0020.0004][.2167.0020.0004] # SMALL ROMAN NUMERAL EIGHT
+2167 ; [.2331.0020.000A][.2167.0020.000A][.2167.0020.000A][.2167.0020.000A] # ROMAN NUMERAL EIGHT
+33DE ; [.2331.0020.001D][*06AC.0020.001C][.21E8.0020.001C] # SQUARE V OVER M
+1F1AC ; [.2331.0020.001D][.221D.0020.001D][.20BF.0020.001D] # SQUARED VOD
+1F19A ; [.2331.0020.001D][.22B6.0020.001D] # SQUARED VS
+A761 ; [.2331.0020.0004][.2359.0020.0004] # LATIN SMALL LETTER VY
+A760 ; [.2331.0020.000A][.2359.0020.000A] # LATIN CAPITAL LETTER VY
+1D20 ; [.2335.0020.0002] # LATIN LETTER SMALL CAPITAL V
+A75F ; [.2336.0020.0002] # LATIN SMALL LETTER V WITH DIAGONAL STROKE
+A75E ; [.2336.0020.0008] # LATIN CAPITAL LETTER V WITH DIAGONAL STROKE
+1D8C ; [.2337.0020.0002] # LATIN SMALL LETTER V WITH PALATAL HOOK
+028B ; [.2338.0020.0002] # LATIN SMALL LETTER V WITH HOOK
+01B2 ; [.2338.0020.0008] # LATIN CAPITAL LETTER V WITH HOOK
+1DB9 ; [.2338.0020.0014] # MODIFIER LETTER SMALL V WITH HOOK
+2C71 ; [.233C.0020.0002] # LATIN SMALL LETTER V WITH RIGHT HOOK
+107B0 ; [.233C.0020.0014] # MODIFIER LETTER SMALL V WITH RIGHT HOOK
+2C74 ; [.233D.0020.0002] # LATIN SMALL LETTER V WITH CURL
+1EFD ; [.233E.0020.0002] # LATIN SMALL LETTER MIDDLE-WELSH V
+1EFC ; [.233E.0020.0008] # LATIN CAPITAL LETTER MIDDLE-WELSH V
+028C ; [.233F.0020.0002] # LATIN SMALL LETTER TURNED V
+0245 ; [.233F.0020.0008] # LATIN CAPITAL LETTER TURNED V
+1DBA ; [.233F.0020.0014] # MODIFIER LETTER SMALL TURNED V
+0077 ; [.2343.0020.0002] # LATIN SMALL LETTER W
+FF57 ; [.2343.0020.0003] # FULLWIDTH LATIN SMALL LETTER W
+1ABF ; [.2343.0020.0004] # COMBINING LATIN SMALL LETTER W BELOW
+1DF1 ; [.2343.0020.0004] # COMBINING LATIN SMALL LETTER W
+24B2 ; [*0334.0020.0004][.2343.0020.0004][*0335.0020.0004] # PARENTHESIZED LATIN SMALL LETTER W
+1D430 ; [.2343.0020.0005] # MATHEMATICAL BOLD SMALL W
+1D464 ; [.2343.0020.0005] # MATHEMATICAL ITALIC SMALL W
+1D498 ; [.2343.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL W
+1D4CC ; [.2343.0020.0005] # MATHEMATICAL SCRIPT SMALL W
+1D500 ; [.2343.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL W
+1D534 ; [.2343.0020.0005] # MATHEMATICAL FRAKTUR SMALL W
+1D568 ; [.2343.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL W
+1D59C ; [.2343.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL W
+1D5D0 ; [.2343.0020.0005] # MATHEMATICAL SANS-SERIF SMALL W
+1D604 ; [.2343.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL W
+1D638 ; [.2343.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL W
+1D66C ; [.2343.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL W
+1D6A0 ; [.2343.0020.0005] # MATHEMATICAL MONOSPACE SMALL W
+24E6 ; [.2343.0020.0006] # CIRCLED LATIN SMALL LETTER W
+0057 ; [.2343.0020.0008] # LATIN CAPITAL LETTER W
+FF37 ; [.2343.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER W
+1F126 ; [*0334.0020.0004][.2343.0020.000A][*0335.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER W
+1D416 ; [.2343.0020.000B] # MATHEMATICAL BOLD CAPITAL W
+1D44A ; [.2343.0020.000B] # MATHEMATICAL ITALIC CAPITAL W
+1D47E ; [.2343.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL W
+1D4B2 ; [.2343.0020.000B] # MATHEMATICAL SCRIPT CAPITAL W
+1D4E6 ; [.2343.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL W
+1D51A ; [.2343.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL W
+1D54E ; [.2343.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL W
+1D582 ; [.2343.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL W
+1D5B6 ; [.2343.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL W
+1D5EA ; [.2343.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL W
+1D61E ; [.2343.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL W
+1D652 ; [.2343.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL W
+1D686 ; [.2343.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL W
+24CC ; [.2343.0020.000C] # CIRCLED LATIN CAPITAL LETTER W
+1F166 ; [.2343.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER W
+02B7 ; [.2343.0020.0014] # MODIFIER LETTER SMALL W
+1D42 ; [.2343.0020.001D] # MODIFIER LETTER CAPITAL W
+1F146 ; [.2343.0020.001D] # SQUARED LATIN CAPITAL LETTER W
+1F186 ; [.2343.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER W
+1E83 ; [.2343.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER W WITH ACUTE
+1E82 ; [.2343.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER W WITH ACUTE
+1E81 ; [.2343.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER W WITH GRAVE
+1E80 ; [.2343.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER W WITH GRAVE
+0175 ; [.2343.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER W WITH CIRCUMFLEX
+0174 ; [.2343.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER W WITH CIRCUMFLEX
+1E98 ; [.2343.0020.0002][.0000.0029.0002] # LATIN SMALL LETTER W WITH RING ABOVE
+1E85 ; [.2343.0020.0002][.0000.002B.0002] # LATIN SMALL LETTER W WITH DIAERESIS
+1E84 ; [.2343.0020.0008][.0000.002B.0002] # LATIN CAPITAL LETTER W WITH DIAERESIS
+1E87 ; [.2343.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER W WITH DOT ABOVE
+1E86 ; [.2343.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER W WITH DOT ABOVE
+1E89 ; [.2343.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER W WITH DOT BELOW
+1E88 ; [.2343.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER W WITH DOT BELOW
+A7C3 ; [.2343.0020.0004][.0000.0118.0004] # LATIN SMALL LETTER ANGLICANA W
+A7C2 ; [.2343.0020.000A][.0000.0118.0004] # LATIN CAPITAL LETTER ANGLICANA W
+33DD ; [.2343.0020.001D][.208F.0020.001C] # SQUARE WB
+1F14F ; [.2343.0020.001D][.20A9.0020.001D] # SQUARED WC
+1F18F ; [.2343.0020.001D][.20A9.0020.001D] # NEGATIVE SQUARED WC
+1F12E ; [.2343.0020.000C][.236F.0020.000C] # CIRCLED WZ
+1D21 ; [.2347.0020.0002] # LATIN LETTER SMALL CAPITAL W
+2C73 ; [.2348.0020.0002] # LATIN SMALL LETTER W WITH HOOK
+2C72 ; [.2348.0020.0008] # LATIN CAPITAL LETTER W WITH HOOK
+028D ; [.2349.0020.0002] # LATIN SMALL LETTER TURNED W
+1AC0 ; [.2349.0020.0004] # COMBINING LATIN SMALL LETTER TURNED W BELOW
+AB69 ; [.2349.0020.0014] # MODIFIER LETTER SMALL TURNED W
+0078 ; [.234D.0020.0002] # LATIN SMALL LETTER X
+FF58 ; [.234D.0020.0003] # FULLWIDTH LATIN SMALL LETTER X
+036F ; [.234D.0020.0004] # COMBINING LATIN SMALL LETTER X
+2179 ; [.234D.0020.0004] # SMALL ROMAN NUMERAL TEN
+24B3 ; [*0334.0020.0004][.234D.0020.0004][*0335.0020.0004] # PARENTHESIZED LATIN SMALL LETTER X
+1D431 ; [.234D.0020.0005] # MATHEMATICAL BOLD SMALL X
+1D465 ; [.234D.0020.0005] # MATHEMATICAL ITALIC SMALL X
+1D499 ; [.234D.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL X
+1D4CD ; [.234D.0020.0005] # MATHEMATICAL SCRIPT SMALL X
+1D501 ; [.234D.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL X
+1D535 ; [.234D.0020.0005] # MATHEMATICAL FRAKTUR SMALL X
+1D569 ; [.234D.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL X
+1D59D ; [.234D.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL X
+1D5D1 ; [.234D.0020.0005] # MATHEMATICAL SANS-SERIF SMALL X
+1D605 ; [.234D.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL X
+1D639 ; [.234D.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL X
+1D66D ; [.234D.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL X
+1D6A1 ; [.234D.0020.0005] # MATHEMATICAL MONOSPACE SMALL X
+24E7 ; [.234D.0020.0006] # CIRCLED LATIN SMALL LETTER X
+0058 ; [.234D.0020.0008] # LATIN CAPITAL LETTER X
+FF38 ; [.234D.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER X
+2169 ; [.234D.0020.000A] # ROMAN NUMERAL TEN
+1F127 ; [*0334.0020.0004][.234D.0020.000A][*0335.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER X
+1D417 ; [.234D.0020.000B] # MATHEMATICAL BOLD CAPITAL X
+1D44B ; [.234D.0020.000B] # MATHEMATICAL ITALIC CAPITAL X
+1D47F ; [.234D.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL X
+1D4B3 ; [.234D.0020.000B] # MATHEMATICAL SCRIPT CAPITAL X
+1D4E7 ; [.234D.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL X
+1D51B ; [.234D.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL X
+1D54F ; [.234D.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL X
+1D583 ; [.234D.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL X
+1D5B7 ; [.234D.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL X
+1D5EB ; [.234D.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL X
+1D61F ; [.234D.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL X
+1D653 ; [.234D.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL X
+1D687 ; [.234D.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL X
+24CD ; [.234D.0020.000C] # CIRCLED LATIN CAPITAL LETTER X
+1F167 ; [.234D.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER X
+02E3 ; [.234D.0020.0014] # MODIFIER LETTER SMALL X
+2093 ; [.234D.0020.0015] # LATIN SUBSCRIPT SMALL LETTER X
+1F147 ; [.234D.0020.001D] # SQUARED LATIN CAPITAL LETTER X
+1F187 ; [.234D.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER X
+1E8D ; [.234D.0020.0002][.0000.002B.0002] # LATIN SMALL LETTER X WITH DIAERESIS
+1E8C ; [.234D.0020.0008][.0000.002B.0002] # LATIN CAPITAL LETTER X WITH DIAERESIS
+1E8B ; [.234D.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER X WITH DOT ABOVE
+1E8A ; [.234D.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER X WITH DOT ABOVE
+217A ; [.234D.0020.0004][.2167.0020.0004] # SMALL ROMAN NUMERAL ELEVEN
+216A ; [.234D.0020.000A][.2167.0020.000A] # ROMAN NUMERAL ELEVEN
+217B ; [.234D.0020.0004][.2167.0020.0004][.2167.0020.0004] # SMALL ROMAN NUMERAL TWELVE
+216B ; [.234D.0020.000A][.2167.0020.000A][.2167.0020.000A] # ROMAN NUMERAL TWELVE
+1D8D ; [.2351.0020.0002] # LATIN SMALL LETTER X WITH PALATAL HOOK
+AB56 ; [.2352.0020.0002] # LATIN SMALL LETTER X WITH LOW RIGHT RING
+AB57 ; [.2353.0020.0002] # LATIN SMALL LETTER X WITH LONG LEFT LEG
+AB58 ; [.2354.0020.0002] # LATIN SMALL LETTER X WITH LONG LEFT LEG AND LOW RIGHT RING
+AB59 ; [.2355.0020.0002] # LATIN SMALL LETTER X WITH LONG LEFT LEG WITH SERIF
+AB53 ; [.2356.0020.0002] # LATIN SMALL LETTER CHI
+A7B3 ; [.2356.0020.0008] # LATIN CAPITAL LETTER CHI
+AB54 ; [.2357.0020.0002] # LATIN SMALL LETTER CHI WITH LOW RIGHT RING
+AB55 ; [.2358.0020.0002] # LATIN SMALL LETTER CHI WITH LOW LEFT SERIF
+0079 ; [.2359.0020.0002] # LATIN SMALL LETTER Y
+FF59 ; [.2359.0020.0003] # FULLWIDTH LATIN SMALL LETTER Y
+24B4 ; [*0334.0020.0004][.2359.0020.0004][*0335.0020.0004] # PARENTHESIZED LATIN SMALL LETTER Y
+1D432 ; [.2359.0020.0005] # MATHEMATICAL BOLD SMALL Y
+1D466 ; [.2359.0020.0005] # MATHEMATICAL ITALIC SMALL Y
+1D49A ; [.2359.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL Y
+1D4CE ; [.2359.0020.0005] # MATHEMATICAL SCRIPT SMALL Y
+1D502 ; [.2359.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL Y
+1D536 ; [.2359.0020.0005] # MATHEMATICAL FRAKTUR SMALL Y
+1D56A ; [.2359.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL Y
+1D59E ; [.2359.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL Y
+1D5D2 ; [.2359.0020.0005] # MATHEMATICAL SANS-SERIF SMALL Y
+1D606 ; [.2359.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL Y
+1D63A ; [.2359.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL Y
+1D66E ; [.2359.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Y
+1D6A2 ; [.2359.0020.0005] # MATHEMATICAL MONOSPACE SMALL Y
+24E8 ; [.2359.0020.0006] # CIRCLED LATIN SMALL LETTER Y
+0059 ; [.2359.0020.0008] # LATIN CAPITAL LETTER Y
+FF39 ; [.2359.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER Y
+1F128 ; [*0334.0020.0004][.2359.0020.000A][*0335.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER Y
+1D418 ; [.2359.0020.000B] # MATHEMATICAL BOLD CAPITAL Y
+1D44C ; [.2359.0020.000B] # MATHEMATICAL ITALIC CAPITAL Y
+1D480 ; [.2359.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL Y
+1D4B4 ; [.2359.0020.000B] # MATHEMATICAL SCRIPT CAPITAL Y
+1D4E8 ; [.2359.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL Y
+1D51C ; [.2359.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL Y
+1D550 ; [.2359.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL Y
+1D584 ; [.2359.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL Y
+1D5B8 ; [.2359.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL Y
+1D5EC ; [.2359.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL Y
+1D620 ; [.2359.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL Y
+1D654 ; [.2359.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Y
+1D688 ; [.2359.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL Y
+24CE ; [.2359.0020.000C] # CIRCLED LATIN CAPITAL LETTER Y
+1F168 ; [.2359.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER Y
+02B8 ; [.2359.0020.0014] # MODIFIER LETTER SMALL Y
+1F148 ; [.2359.0020.001D] # SQUARED LATIN CAPITAL LETTER Y
+1F188 ; [.2359.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER Y
+00FD ; [.2359.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER Y WITH ACUTE
+00DD ; [.2359.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER Y WITH ACUTE
+1EF3 ; [.2359.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER Y WITH GRAVE
+1EF2 ; [.2359.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER Y WITH GRAVE
+0177 ; [.2359.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER Y WITH CIRCUMFLEX
+0176 ; [.2359.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
+1E99 ; [.2359.0020.0002][.0000.0029.0002] # LATIN SMALL LETTER Y WITH RING ABOVE
+00FF ; [.2359.0020.0002][.0000.002B.0002] # LATIN SMALL LETTER Y WITH DIAERESIS
+0178 ; [.2359.0020.0008][.0000.002B.0002] # LATIN CAPITAL LETTER Y WITH DIAERESIS
+1EF9 ; [.2359.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER Y WITH TILDE
+1EF8 ; [.2359.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER Y WITH TILDE
+1E8F ; [.2359.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER Y WITH DOT ABOVE
+1E8E ; [.2359.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER Y WITH DOT ABOVE
+0233 ; [.2359.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER Y WITH MACRON
+0232 ; [.2359.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER Y WITH MACRON
+1EF7 ; [.2359.0020.0002][.0000.003B.0002] # LATIN SMALL LETTER Y WITH HOOK ABOVE
+1EF6 ; [.2359.0020.0008][.0000.003B.0002] # LATIN CAPITAL LETTER Y WITH HOOK ABOVE
+1EF5 ; [.2359.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER Y WITH DOT BELOW
+1EF4 ; [.2359.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER Y WITH DOT BELOW
+028F ; [.235D.0020.0002] # LATIN LETTER SMALL CAPITAL Y
+107B2 ; [.235D.0020.0014] # MODIFIER LETTER SMALL CAPITAL Y
+024F ; [.2361.0020.0002] # LATIN SMALL LETTER Y WITH STROKE
+024E ; [.2361.0020.0008] # LATIN CAPITAL LETTER Y WITH STROKE
+01B4 ; [.2365.0020.0002] # LATIN SMALL LETTER Y WITH HOOK
+01B3 ; [.2365.0020.0008] # LATIN CAPITAL LETTER Y WITH HOOK
+1EFF ; [.2369.0020.0002] # LATIN SMALL LETTER Y WITH LOOP
+1EFE ; [.2369.0020.0008] # LATIN CAPITAL LETTER Y WITH LOOP
+AB5A ; [.236A.0020.0002] # LATIN SMALL LETTER Y WITH SHORT RIGHT LEG
+021D ; [.236B.0020.0002] # LATIN SMALL LETTER YOGH
+021C ; [.236B.0020.0008] # LATIN CAPITAL LETTER YOGH
+007A ; [.236F.0020.0002] # LATIN SMALL LETTER Z
+FF5A ; [.236F.0020.0003] # FULLWIDTH LATIN SMALL LETTER Z
+1DE6 ; [.236F.0020.0004] # COMBINING LATIN SMALL LETTER Z
+24B5 ; [*0334.0020.0004][.236F.0020.0004][*0335.0020.0004] # PARENTHESIZED LATIN SMALL LETTER Z
+1D433 ; [.236F.0020.0005] # MATHEMATICAL BOLD SMALL Z
+1D467 ; [.236F.0020.0005] # MATHEMATICAL ITALIC SMALL Z
+1D49B ; [.236F.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL Z
+1D4CF ; [.236F.0020.0005] # MATHEMATICAL SCRIPT SMALL Z
+1D503 ; [.236F.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL Z
+1D537 ; [.236F.0020.0005] # MATHEMATICAL FRAKTUR SMALL Z
+1D56B ; [.236F.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL Z
+1D59F ; [.236F.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL Z
+1D5D3 ; [.236F.0020.0005] # MATHEMATICAL SANS-SERIF SMALL Z
+1D607 ; [.236F.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL Z
+1D63B ; [.236F.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL Z
+1D66F ; [.236F.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Z
+1D6A3 ; [.236F.0020.0005] # MATHEMATICAL MONOSPACE SMALL Z
+24E9 ; [.236F.0020.0006] # CIRCLED LATIN SMALL LETTER Z
+005A ; [.236F.0020.0008] # LATIN CAPITAL LETTER Z
+FF3A ; [.236F.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER Z
+1F129 ; [*0334.0020.0004][.236F.0020.000A][*0335.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER Z
+2124 ; [.236F.0020.000B] # DOUBLE-STRUCK CAPITAL Z
+2128 ; [.236F.0020.000B] # BLACK-LETTER CAPITAL Z
+1D419 ; [.236F.0020.000B] # MATHEMATICAL BOLD CAPITAL Z
+1D44D ; [.236F.0020.000B] # MATHEMATICAL ITALIC CAPITAL Z
+1D481 ; [.236F.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL Z
+1D4B5 ; [.236F.0020.000B] # MATHEMATICAL SCRIPT CAPITAL Z
+1D4E9 ; [.236F.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL Z
+1D585 ; [.236F.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL Z
+1D5B9 ; [.236F.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL Z
+1D5ED ; [.236F.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL Z
+1D621 ; [.236F.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL Z
+1D655 ; [.236F.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Z
+1D689 ; [.236F.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL Z
+24CF ; [.236F.0020.000C] # CIRCLED LATIN CAPITAL LETTER Z
+1F169 ; [.236F.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER Z
+1DBB ; [.236F.0020.0014] # MODIFIER LETTER SMALL Z
+1F149 ; [.236F.0020.001D] # SQUARED LATIN CAPITAL LETTER Z
+1F189 ; [.236F.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER Z
+017A ; [.236F.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER Z WITH ACUTE
+0179 ; [.236F.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER Z WITH ACUTE
+1E91 ; [.236F.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER Z WITH CIRCUMFLEX
+1E90 ; [.236F.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER Z WITH CIRCUMFLEX
+017E ; [.236F.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER Z WITH CARON
+017D ; [.236F.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER Z WITH CARON
+017C ; [.236F.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER Z WITH DOT ABOVE
+017B ; [.236F.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER Z WITH DOT ABOVE
+1E93 ; [.236F.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER Z WITH DOT BELOW
+1E92 ; [.236F.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER Z WITH DOT BELOW
+1E95 ; [.236F.0020.0002][.0000.0049.0002] # LATIN SMALL LETTER Z WITH LINE BELOW
+1E94 ; [.236F.0020.0008][.0000.0049.0002] # LATIN CAPITAL LETTER Z WITH LINE BELOW
+018D ; [.236F.0020.0004][.2343.0020.0004] # LATIN SMALL LETTER TURNED DELTA
+1D22 ; [.2373.0020.0002] # LATIN LETTER SMALL CAPITAL Z
+01B6 ; [.2374.0020.0002] # LATIN SMALL LETTER Z WITH STROKE
+01B5 ; [.2374.0020.0008] # LATIN CAPITAL LETTER Z WITH STROKE
+1D76 ; [.2378.0020.0002] # LATIN SMALL LETTER Z WITH MIDDLE TILDE
+1D8E ; [.2379.0020.0002] # LATIN SMALL LETTER Z WITH PALATAL HOOK
+A7C6 ; [.2379.0020.0008] # LATIN CAPITAL LETTER Z WITH PALATAL HOOK
+0225 ; [.237A.0020.0002] # LATIN SMALL LETTER Z WITH HOOK
+0224 ; [.237A.0020.0008] # LATIN CAPITAL LETTER Z WITH HOOK
+0290 ; [.237E.0020.0002] # LATIN SMALL LETTER Z WITH RETROFLEX HOOK
+1DBC ; [.237E.0020.0014] # MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK
+0291 ; [.2382.0020.0002] # LATIN SMALL LETTER Z WITH CURL
+1DBD ; [.2382.0020.0014] # MODIFIER LETTER SMALL Z WITH CURL
+0240 ; [.2386.0020.0002] # LATIN SMALL LETTER Z WITH SWASH TAIL
+2C7F ; [.2386.0020.0008] # LATIN CAPITAL LETTER Z WITH SWASH TAIL
+2C6C ; [.238A.0020.0002] # LATIN SMALL LETTER Z WITH DESCENDER
+2C6B ; [.238A.0020.0008] # LATIN CAPITAL LETTER Z WITH DESCENDER
+A763 ; [.238B.0020.0002] # LATIN SMALL LETTER VISIGOTHIC Z
+A762 ; [.238B.0020.0008] # LATIN CAPITAL LETTER VISIGOTHIC Z
+0292 ; [.238C.0020.0002] # LATIN SMALL LETTER EZH
+01B7 ; [.238C.0020.0008] # LATIN CAPITAL LETTER EZH
+1DBE ; [.238C.0020.0014] # MODIFIER LETTER SMALL EZH
+01EF ; [.238C.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER EZH WITH CARON
+01EE ; [.238C.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER EZH WITH CARON
+1D23 ; [.2390.0020.0002] # LATIN LETTER SMALL CAPITAL EZH
+01B9 ; [.2391.0020.0002] # LATIN SMALL LETTER EZH REVERSED
+01B8 ; [.2391.0020.0008] # LATIN CAPITAL LETTER EZH REVERSED
+1DF18 ; [.2395.0020.0002] # LATIN SMALL LETTER EZH WITH PALATAL HOOK
+1D9A ; [.2396.0020.0002] # LATIN SMALL LETTER EZH WITH RETROFLEX HOOK
+01BA ; [.2397.0020.0002] # LATIN SMALL LETTER EZH WITH TAIL
+0293 ; [.239B.0020.0002] # LATIN SMALL LETTER EZH WITH CURL
+00FE ; [.239F.0020.0002] # LATIN SMALL LETTER THORN
+00DE ; [.239F.0020.0008] # LATIN CAPITAL LETTER THORN
+A7D3 ; [.23A3.0020.0002] # LATIN SMALL LETTER DOUBLE THORN
+A765 ; [.23A4.0020.0002] # LATIN SMALL LETTER THORN WITH STROKE
+A764 ; [.23A4.0020.0008] # LATIN CAPITAL LETTER THORN WITH STROKE
+A767 ; [.23A5.0020.0002] # LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER
+A766 ; [.23A5.0020.0008] # LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER
+01BF ; [.23A6.0020.0002] # LATIN LETTER WYNN
+01F7 ; [.23A6.0020.0008] # LATIN CAPITAL LETTER WYNN
+A7D5 ; [.23AA.0020.0002] # LATIN SMALL LETTER DOUBLE WYNN
+A769 ; [.23AB.0020.0002] # LATIN SMALL LETTER VEND
+A768 ; [.23AB.0020.0008] # LATIN CAPITAL LETTER VEND
+AB60 ; [.23AC.0020.0002] # LATIN SMALL LETTER SAKHA YAT
+AB61 ; [.23AD.0020.0002] # LATIN SMALL LETTER IOTIFIED E
+AB63 ; [.23AE.0020.0002] # LATIN SMALL LETTER UO
+A76B ; [.23AF.0020.0002] # LATIN SMALL LETTER ET
+A76A ; [.23AF.0020.0008] # LATIN CAPITAL LETTER ET
+A76D ; [.23B0.0020.0002] # LATIN SMALL LETTER IS
+A76C ; [.23B0.0020.0008] # LATIN CAPITAL LETTER IS
+A76F ; [.23B1.0020.0002] # LATIN SMALL LETTER CON
+1DD2 ; [.23B1.0020.0004] # COMBINING US ABOVE
+A76E ; [.23B1.0020.0008] # LATIN CAPITAL LETTER CON
+A770 ; [.23B1.0020.0014] # MODIFIER LETTER US
+A778 ; [.23B2.0020.0002] # LATIN SMALL LETTER UM
+01BB ; [.23B3.0020.0002] # LATIN LETTER TWO WITH STROKE
+A72B ; [.23B7.0020.0002] # LATIN SMALL LETTER TRESILLO
+A72A ; [.23B7.0020.0008] # LATIN CAPITAL LETTER TRESILLO
+A72D ; [.23B8.0020.0002] # LATIN SMALL LETTER CUATRILLO
+A72C ; [.23B8.0020.0008] # LATIN CAPITAL LETTER CUATRILLO
+A72F ; [.23B9.0020.0002] # LATIN SMALL LETTER CUATRILLO WITH COMMA
+A72E ; [.23B9.0020.0008] # LATIN CAPITAL LETTER CUATRILLO WITH COMMA
+01A8 ; [.23BA.0020.0002] # LATIN SMALL LETTER TONE TWO
+01A7 ; [.23BA.0020.0008] # LATIN CAPITAL LETTER TONE TWO
+01BD ; [.23BE.0020.0002] # LATIN SMALL LETTER TONE FIVE
+01BC ; [.23BE.0020.0008] # LATIN CAPITAL LETTER TONE FIVE
+0185 ; [.23C2.0020.0002] # LATIN SMALL LETTER TONE SIX
+0184 ; [.23C2.0020.0008] # LATIN CAPITAL LETTER TONE SIX
+0294 ; [.23C6.0020.0002] # LATIN LETTER GLOTTAL STOP
+0242 ; [.23CA.0020.0002] # LATIN SMALL LETTER GLOTTAL STOP
+0241 ; [.23CA.0020.0008] # LATIN CAPITAL LETTER GLOTTAL STOP
+02C0 ; [.23CE.0020.0002] # MODIFIER LETTER GLOTTAL STOP
+02BC ; [.23CF.0020.0002] # MODIFIER LETTER APOSTROPHE
+0149 ; [.23CF.0020.0004][.21F7.0020.0004] # LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
+02EE ; [.23D0.0020.0002] # MODIFIER LETTER DOUBLE APOSTROPHE
+02BE ; [.23D1.0020.0002] # MODIFIER LETTER RIGHT HALF RING
+A723 ; [.23D2.0020.0002] # LATIN SMALL LETTER EGYPTOLOGICAL ALEF
+A722 ; [.23D2.0020.0008] # LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF
+A78C ; [.23D3.0020.0002] # LATIN SMALL LETTER SALTILLO
+A78B ; [.23D3.0020.0008] # LATIN CAPITAL LETTER SALTILLO
+A78F ; [.23D4.0020.0002] # LATIN LETTER SINOLOGICAL DOT
+0295 ; [.23D5.0020.0002] # LATIN LETTER PHARYNGEAL VOICED FRICATIVE
+02E4 ; [.23D5.0020.0014] # MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
+02BF ; [.23D9.0020.0002] # MODIFIER LETTER LEFT HALF RING
+02C1 ; [.23DA.0020.0002] # MODIFIER LETTER REVERSED GLOTTAL STOP
+1D24 ; [.23DB.0020.0002] # LATIN LETTER VOICED LARYNGEAL SPIRANT
+1D25 ; [.23DC.0020.0002] # LATIN LETTER AIN
+1D5C ; [.23DC.0020.0014] # MODIFIER LETTER SMALL AIN
+A725 ; [.23DD.0020.0002] # LATIN SMALL LETTER EGYPTOLOGICAL AIN
+A724 ; [.23DD.0020.0008] # LATIN CAPITAL LETTER EGYPTOLOGICAL AIN
+02A1 ; [.23DE.0020.0002] # LATIN LETTER GLOTTAL STOP WITH STROKE
+107B3 ; [.23DE.0020.0014] # MODIFIER LETTER GLOTTAL STOP WITH STROKE
+02A2 ; [.23E2.0020.0002] # LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE
+107B4 ; [.23E2.0020.0014] # MODIFIER LETTER REVERSED GLOTTAL STOP WITH STROKE
+0296 ; [.23E6.0020.0002] # LATIN LETTER INVERTED GLOTTAL STOP
+1DF0E ; [.23EA.0020.0002] # LATIN LETTER INVERTED GLOTTAL STOP WITH CURL
+01C0 ; [.23EB.0020.0002] # LATIN LETTER DENTAL CLICK
+107B6 ; [.23EB.0020.0014] # MODIFIER LETTER DENTAL CLICK
+01C1 ; [.23EF.0020.0002] # LATIN LETTER LATERAL CLICK
+107B7 ; [.23EF.0020.0014] # MODIFIER LETTER LATERAL CLICK
+01C2 ; [.23F3.0020.0002] # LATIN LETTER ALVEOLAR CLICK
+107B8 ; [.23F3.0020.0014] # MODIFIER LETTER ALVEOLAR CLICK
+01C3 ; [.23F7.0020.0002] # LATIN LETTER RETROFLEX CLICK
+1DF0A ; [.23FB.0020.0002] # LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK
+107B9 ; [.23FB.0020.0014] # MODIFIER LETTER RETROFLEX CLICK WITH RETROFLEX HOOK
+0297 ; [.23FC.0020.0002] # LATIN LETTER STRETCHED C
+1DF0F ; [.2400.0020.0002] # LATIN LETTER STRETCHED C WITH CURL
+0298 ; [.2401.0020.0002] # LATIN LETTER BILABIAL CLICK
+107B5 ; [.2401.0020.0014] # MODIFIER LETTER BILABIAL CLICK
+02AC ; [.2405.0020.0002] # LATIN LETTER BILABIAL PERCUSSIVE
+02AD ; [.2409.0020.0002] # LATIN LETTER BIDENTAL PERCUSSIVE
+03B1 ; [.240D.0020.0002] # GREEK SMALL LETTER ALPHA
+1D6C2 ; [.240D.0020.0005] # MATHEMATICAL BOLD SMALL ALPHA
+1D6FC ; [.240D.0020.0005] # MATHEMATICAL ITALIC SMALL ALPHA
+1D736 ; [.240D.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL ALPHA
+1D770 ; [.240D.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA
+1D7AA ; [.240D.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA
+0391 ; [.240D.0020.0008] # GREEK CAPITAL LETTER ALPHA
+1D6A8 ; [.240D.0020.000B] # MATHEMATICAL BOLD CAPITAL ALPHA
+1D6E2 ; [.240D.0020.000B] # MATHEMATICAL ITALIC CAPITAL ALPHA
+1D71C ; [.240D.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL ALPHA
+1D756 ; [.240D.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL ALPHA
+1D790 ; [.240D.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ALPHA
+1F00 ; [.240D.0020.0002][.0000.0022.0002] # GREEK SMALL LETTER ALPHA WITH PSILI
+1F08 ; [.240D.0020.0008][.0000.0022.0002] # GREEK CAPITAL LETTER ALPHA WITH PSILI
+1F04 ; [.240D.0020.0002][.0000.0022.0002][.0000.0024.0002] # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA
+1F0C ; [.240D.0020.0008][.0000.0022.0002][.0000.0024.0002] # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA
+1F84 ; [.240D.0020.0002][.0000.0022.0002][.0000.0024.0002][.0000.004C.0002] # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+1F8C ; [.240D.0020.0008][.0000.0022.0002][.0000.0024.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+1F02 ; [.240D.0020.0002][.0000.0022.0002][.0000.0025.0002] # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA
+1F0A ; [.240D.0020.0008][.0000.0022.0002][.0000.0025.0002] # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA
+1F82 ; [.240D.0020.0002][.0000.0022.0002][.0000.0025.0002][.0000.004C.0002] # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+1F8A ; [.240D.0020.0008][.0000.0022.0002][.0000.0025.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+1F06 ; [.240D.0020.0002][.0000.0022.0002][.0000.002A.0002] # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI
+1F0E ; [.240D.0020.0008][.0000.0022.0002][.0000.002A.0002] # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI
+1F86 ; [.240D.0020.0002][.0000.0022.0002][.0000.002A.0002][.0000.004C.0002] # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+1F8E ; [.240D.0020.0008][.0000.0022.0002][.0000.002A.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+1F80 ; [.240D.0020.0002][.0000.0022.0002][.0000.004C.0002] # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI
+1F88 ; [.240D.0020.0008][.0000.0022.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI
+1F01 ; [.240D.0020.0002][.0000.0023.0002] # GREEK SMALL LETTER ALPHA WITH DASIA
+1F09 ; [.240D.0020.0008][.0000.0023.0002] # GREEK CAPITAL LETTER ALPHA WITH DASIA
+1F05 ; [.240D.0020.0002][.0000.0023.0002][.0000.0024.0002] # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA
+1F0D ; [.240D.0020.0008][.0000.0023.0002][.0000.0024.0002] # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA
+1F85 ; [.240D.0020.0002][.0000.0023.0002][.0000.0024.0002][.0000.004C.0002] # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+1F8D ; [.240D.0020.0008][.0000.0023.0002][.0000.0024.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+1F03 ; [.240D.0020.0002][.0000.0023.0002][.0000.0025.0002] # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA
+1F0B ; [.240D.0020.0008][.0000.0023.0002][.0000.0025.0002] # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA
+1F83 ; [.240D.0020.0002][.0000.0023.0002][.0000.0025.0002][.0000.004C.0002] # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+1F8B ; [.240D.0020.0008][.0000.0023.0002][.0000.0025.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+1F07 ; [.240D.0020.0002][.0000.0023.0002][.0000.002A.0002] # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
+1F0F ; [.240D.0020.0008][.0000.0023.0002][.0000.002A.0002] # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
+1F87 ; [.240D.0020.0002][.0000.0023.0002][.0000.002A.0002][.0000.004C.0002] # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+1F8F ; [.240D.0020.0008][.0000.0023.0002][.0000.002A.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1F81 ; [.240D.0020.0002][.0000.0023.0002][.0000.004C.0002] # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI
+1F89 ; [.240D.0020.0008][.0000.0023.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI
+03AC ; [.240D.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER ALPHA WITH TONOS
+1F71 ; [.240D.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER ALPHA WITH OXIA
+0386 ; [.240D.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER ALPHA WITH TONOS
+1FBB ; [.240D.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER ALPHA WITH OXIA
+1FB4 ; [.240D.0020.0002][.0000.0024.0002][.0000.004C.0002] # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+1F70 ; [.240D.0020.0002][.0000.0025.0002] # GREEK SMALL LETTER ALPHA WITH VARIA
+1FBA ; [.240D.0020.0008][.0000.0025.0002] # GREEK CAPITAL LETTER ALPHA WITH VARIA
+1FB2 ; [.240D.0020.0002][.0000.0025.0002][.0000.004C.0002] # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
+1FB0 ; [.240D.0020.0002][.0000.0026.0002] # GREEK SMALL LETTER ALPHA WITH VRACHY
+1FB8 ; [.240D.0020.0008][.0000.0026.0002] # GREEK CAPITAL LETTER ALPHA WITH VRACHY
+1FB6 ; [.240D.0020.0002][.0000.002A.0002] # GREEK SMALL LETTER ALPHA WITH PERISPOMENI
+1FB7 ; [.240D.0020.0002][.0000.002A.0002][.0000.004C.0002] # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
+1FB1 ; [.240D.0020.0002][.0000.0032.0002] # GREEK SMALL LETTER ALPHA WITH MACRON
+1FB9 ; [.240D.0020.0008][.0000.0032.0002] # GREEK CAPITAL LETTER ALPHA WITH MACRON
+1FB3 ; [.240D.0020.0002][.0000.004C.0002] # GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI
+1FBC ; [.240D.0020.0008][.0000.004C.0002] # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+03B2 ; [.240E.0020.0002] # GREEK SMALL LETTER BETA
+03D0 ; [.240E.0020.0004] # GREEK BETA SYMBOL
+1D6C3 ; [.240E.0020.0005] # MATHEMATICAL BOLD SMALL BETA
+1D6FD ; [.240E.0020.0005] # MATHEMATICAL ITALIC SMALL BETA
+1D737 ; [.240E.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL BETA
+1D771 ; [.240E.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL BETA
+1D7AB ; [.240E.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL BETA
+0392 ; [.240E.0020.0008] # GREEK CAPITAL LETTER BETA
+1D6A9 ; [.240E.0020.000B] # MATHEMATICAL BOLD CAPITAL BETA
+1D6E3 ; [.240E.0020.000B] # MATHEMATICAL ITALIC CAPITAL BETA
+1D71D ; [.240E.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL BETA
+1D757 ; [.240E.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL BETA
+1D791 ; [.240E.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL BETA
+1D5D ; [.240E.0020.0014] # MODIFIER LETTER SMALL BETA
+1D66 ; [.240E.0020.0015] # GREEK SUBSCRIPT SMALL LETTER BETA
+03B3 ; [.240F.0020.0002] # GREEK SMALL LETTER GAMMA
+213D ; [.240F.0020.0005] # DOUBLE-STRUCK SMALL GAMMA
+1D6C4 ; [.240F.0020.0005] # MATHEMATICAL BOLD SMALL GAMMA
+1D6FE ; [.240F.0020.0005] # MATHEMATICAL ITALIC SMALL GAMMA
+1D738 ; [.240F.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL GAMMA
+1D772 ; [.240F.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL GAMMA
+1D7AC ; [.240F.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL GAMMA
+0393 ; [.240F.0020.0008] # GREEK CAPITAL LETTER GAMMA
+213E ; [.240F.0020.000B] # DOUBLE-STRUCK CAPITAL GAMMA
+1D6AA ; [.240F.0020.000B] # MATHEMATICAL BOLD CAPITAL GAMMA
+1D6E4 ; [.240F.0020.000B] # MATHEMATICAL ITALIC CAPITAL GAMMA
+1D71E ; [.240F.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL GAMMA
+1D758 ; [.240F.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL GAMMA
+1D792 ; [.240F.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL GAMMA
+1D5E ; [.240F.0020.0014] # MODIFIER LETTER SMALL GREEK GAMMA
+1D67 ; [.240F.0020.0015] # GREEK SUBSCRIPT SMALL LETTER GAMMA
+1D26 ; [.2410.0020.0002] # GREEK LETTER SMALL CAPITAL GAMMA
+03B4 ; [.2411.0020.0002] # GREEK SMALL LETTER DELTA
+1D6C5 ; [.2411.0020.0005] # MATHEMATICAL BOLD SMALL DELTA
+1D6FF ; [.2411.0020.0005] # MATHEMATICAL ITALIC SMALL DELTA
+1D739 ; [.2411.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL DELTA
+1D773 ; [.2411.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL DELTA
+1D7AD ; [.2411.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL DELTA
+0394 ; [.2411.0020.0008] # GREEK CAPITAL LETTER DELTA
+1D6AB ; [.2411.0020.000B] # MATHEMATICAL BOLD CAPITAL DELTA
+1D6E5 ; [.2411.0020.000B] # MATHEMATICAL ITALIC CAPITAL DELTA
+1D71F ; [.2411.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL DELTA
+1D759 ; [.2411.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL DELTA
+1D793 ; [.2411.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL DELTA
+1D5F ; [.2411.0020.0014] # MODIFIER LETTER SMALL DELTA
+03B5 ; [.2412.0020.0002] # GREEK SMALL LETTER EPSILON
+03F5 ; [.2412.0020.0004] # GREEK LUNATE EPSILON SYMBOL
+1D6C6 ; [.2412.0020.0005] # MATHEMATICAL BOLD SMALL EPSILON
+1D6DC ; [.2412.0020.0005] # MATHEMATICAL BOLD EPSILON SYMBOL
+1D700 ; [.2412.0020.0005] # MATHEMATICAL ITALIC SMALL EPSILON
+1D716 ; [.2412.0020.0005] # MATHEMATICAL ITALIC EPSILON SYMBOL
+1D73A ; [.2412.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL EPSILON
+1D750 ; [.2412.0020.0005] # MATHEMATICAL BOLD ITALIC EPSILON SYMBOL
+1D774 ; [.2412.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL EPSILON
+1D78A ; [.2412.0020.0005] # MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL
+1D7AE ; [.2412.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL EPSILON
+1D7C4 ; [.2412.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL
+0395 ; [.2412.0020.0008] # GREEK CAPITAL LETTER EPSILON
+1D6AC ; [.2412.0020.000B] # MATHEMATICAL BOLD CAPITAL EPSILON
+1D6E6 ; [.2412.0020.000B] # MATHEMATICAL ITALIC CAPITAL EPSILON
+1D720 ; [.2412.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL EPSILON
+1D75A ; [.2412.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL EPSILON
+1D794 ; [.2412.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL EPSILON
+1F10 ; [.2412.0020.0002][.0000.0022.0002] # GREEK SMALL LETTER EPSILON WITH PSILI
+1F18 ; [.2412.0020.0008][.0000.0022.0002] # GREEK CAPITAL LETTER EPSILON WITH PSILI
+1F14 ; [.2412.0020.0002][.0000.0022.0002][.0000.0024.0002] # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA
+1F1C ; [.2412.0020.0008][.0000.0022.0002][.0000.0024.0002] # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA
+1F12 ; [.2412.0020.0002][.0000.0022.0002][.0000.0025.0002] # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA
+1F1A ; [.2412.0020.0008][.0000.0022.0002][.0000.0025.0002] # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA
+1F11 ; [.2412.0020.0002][.0000.0023.0002] # GREEK SMALL LETTER EPSILON WITH DASIA
+1F19 ; [.2412.0020.0008][.0000.0023.0002] # GREEK CAPITAL LETTER EPSILON WITH DASIA
+1F15 ; [.2412.0020.0002][.0000.0023.0002][.0000.0024.0002] # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+1F1D ; [.2412.0020.0008][.0000.0023.0002][.0000.0024.0002] # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+1F13 ; [.2412.0020.0002][.0000.0023.0002][.0000.0025.0002] # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA
+1F1B ; [.2412.0020.0008][.0000.0023.0002][.0000.0025.0002] # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA
+03AD ; [.2412.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER EPSILON WITH TONOS
+1F73 ; [.2412.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER EPSILON WITH OXIA
+0388 ; [.2412.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER EPSILON WITH TONOS
+1FC9 ; [.2412.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER EPSILON WITH OXIA
+1F72 ; [.2412.0020.0002][.0000.0025.0002] # GREEK SMALL LETTER EPSILON WITH VARIA
+1FC8 ; [.2412.0020.0008][.0000.0025.0002] # GREEK CAPITAL LETTER EPSILON WITH VARIA
+03DD ; [.2413.0020.0002] # GREEK SMALL LETTER DIGAMMA
+1D7CB ; [.2413.0020.0005] # MATHEMATICAL BOLD SMALL DIGAMMA
+03DC ; [.2413.0020.0008] # GREEK LETTER DIGAMMA
+1D7CA ; [.2413.0020.000B] # MATHEMATICAL BOLD CAPITAL DIGAMMA
+0377 ; [.2414.0020.0002] # GREEK SMALL LETTER PAMPHYLIAN DIGAMMA
+0376 ; [.2414.0020.0008] # GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA
+03DB ; [.2415.0020.0002] # GREEK SMALL LETTER STIGMA
+03DA ; [.2415.0020.0008] # GREEK LETTER STIGMA
+03B6 ; [.2416.0020.0002] # GREEK SMALL LETTER ZETA
+1D6C7 ; [.2416.0020.0005] # MATHEMATICAL BOLD SMALL ZETA
+1D701 ; [.2416.0020.0005] # MATHEMATICAL ITALIC SMALL ZETA
+1D73B ; [.2416.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL ZETA
+1D775 ; [.2416.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL ZETA
+1D7AF ; [.2416.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ZETA
+0396 ; [.2416.0020.0008] # GREEK CAPITAL LETTER ZETA
+1D6AD ; [.2416.0020.000B] # MATHEMATICAL BOLD CAPITAL ZETA
+1D6E7 ; [.2416.0020.000B] # MATHEMATICAL ITALIC CAPITAL ZETA
+1D721 ; [.2416.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL ZETA
+1D75B ; [.2416.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL ZETA
+1D795 ; [.2416.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ZETA
+0371 ; [.2417.0020.0002] # GREEK SMALL LETTER HETA
+0370 ; [.2417.0020.0008] # GREEK CAPITAL LETTER HETA
+03B7 ; [.2418.0020.0002] # GREEK SMALL LETTER ETA
+1D6C8 ; [.2418.0020.0005] # MATHEMATICAL BOLD SMALL ETA
+1D702 ; [.2418.0020.0005] # MATHEMATICAL ITALIC SMALL ETA
+1D73C ; [.2418.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL ETA
+1D776 ; [.2418.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL ETA
+1D7B0 ; [.2418.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ETA
+0397 ; [.2418.0020.0008] # GREEK CAPITAL LETTER ETA
+1D6AE ; [.2418.0020.000B] # MATHEMATICAL BOLD CAPITAL ETA
+1D6E8 ; [.2418.0020.000B] # MATHEMATICAL ITALIC CAPITAL ETA
+1D722 ; [.2418.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL ETA
+1D75C ; [.2418.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL ETA
+1D796 ; [.2418.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ETA
+1F20 ; [.2418.0020.0002][.0000.0022.0002] # GREEK SMALL LETTER ETA WITH PSILI
+1F28 ; [.2418.0020.0008][.0000.0022.0002] # GREEK CAPITAL LETTER ETA WITH PSILI
+1F24 ; [.2418.0020.0002][.0000.0022.0002][.0000.0024.0002] # GREEK SMALL LETTER ETA WITH PSILI AND OXIA
+1F2C ; [.2418.0020.0008][.0000.0022.0002][.0000.0024.0002] # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
+1F94 ; [.2418.0020.0002][.0000.0022.0002][.0000.0024.0002][.0000.004C.0002] # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+1F9C ; [.2418.0020.0008][.0000.0022.0002][.0000.0024.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+1F22 ; [.2418.0020.0002][.0000.0022.0002][.0000.0025.0002] # GREEK SMALL LETTER ETA WITH PSILI AND VARIA
+1F2A ; [.2418.0020.0008][.0000.0022.0002][.0000.0025.0002] # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA
+1F92 ; [.2418.0020.0002][.0000.0022.0002][.0000.0025.0002][.0000.004C.0002] # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+1F9A ; [.2418.0020.0008][.0000.0022.0002][.0000.0025.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+1F26 ; [.2418.0020.0002][.0000.0022.0002][.0000.002A.0002] # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI
+1F2E ; [.2418.0020.0008][.0000.0022.0002][.0000.002A.0002] # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI
+1F96 ; [.2418.0020.0002][.0000.0022.0002][.0000.002A.0002][.0000.004C.0002] # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+1F9E ; [.2418.0020.0008][.0000.0022.0002][.0000.002A.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+1F90 ; [.2418.0020.0002][.0000.0022.0002][.0000.004C.0002] # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI
+1F98 ; [.2418.0020.0008][.0000.0022.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
+1F21 ; [.2418.0020.0002][.0000.0023.0002] # GREEK SMALL LETTER ETA WITH DASIA
+1F29 ; [.2418.0020.0008][.0000.0023.0002] # GREEK CAPITAL LETTER ETA WITH DASIA
+1F25 ; [.2418.0020.0002][.0000.0023.0002][.0000.0024.0002] # GREEK SMALL LETTER ETA WITH DASIA AND OXIA
+1F2D ; [.2418.0020.0008][.0000.0023.0002][.0000.0024.0002] # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA
+1F95 ; [.2418.0020.0002][.0000.0023.0002][.0000.0024.0002][.0000.004C.0002] # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+1F9D ; [.2418.0020.0008][.0000.0023.0002][.0000.0024.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+1F23 ; [.2418.0020.0002][.0000.0023.0002][.0000.0025.0002] # GREEK SMALL LETTER ETA WITH DASIA AND VARIA
+1F2B ; [.2418.0020.0008][.0000.0023.0002][.0000.0025.0002] # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA
+1F93 ; [.2418.0020.0002][.0000.0023.0002][.0000.0025.0002][.0000.004C.0002] # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+1F9B ; [.2418.0020.0008][.0000.0023.0002][.0000.0025.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+1F27 ; [.2418.0020.0002][.0000.0023.0002][.0000.002A.0002] # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI
+1F2F ; [.2418.0020.0008][.0000.0023.0002][.0000.002A.0002] # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
+1F97 ; [.2418.0020.0002][.0000.0023.0002][.0000.002A.0002][.0000.004C.0002] # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+1F9F ; [.2418.0020.0008][.0000.0023.0002][.0000.002A.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1F91 ; [.2418.0020.0002][.0000.0023.0002][.0000.004C.0002] # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI
+1F99 ; [.2418.0020.0008][.0000.0023.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
+03AE ; [.2418.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER ETA WITH TONOS
+1F75 ; [.2418.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER ETA WITH OXIA
+0389 ; [.2418.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER ETA WITH TONOS
+1FCB ; [.2418.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER ETA WITH OXIA
+1FC4 ; [.2418.0020.0002][.0000.0024.0002][.0000.004C.0002] # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+1F74 ; [.2418.0020.0002][.0000.0025.0002] # GREEK SMALL LETTER ETA WITH VARIA
+1FCA ; [.2418.0020.0008][.0000.0025.0002] # GREEK CAPITAL LETTER ETA WITH VARIA
+1FC2 ; [.2418.0020.0002][.0000.0025.0002][.0000.004C.0002] # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI
+1FC6 ; [.2418.0020.0002][.0000.002A.0002] # GREEK SMALL LETTER ETA WITH PERISPOMENI
+1FC7 ; [.2418.0020.0002][.0000.002A.0002][.0000.004C.0002] # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
+1FC3 ; [.2418.0020.0002][.0000.004C.0002] # GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI
+1FCC ; [.2418.0020.0008][.0000.004C.0002] # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+03B8 ; [.2419.0020.0002] # GREEK SMALL LETTER THETA
+03D1 ; [.2419.0020.0004] # GREEK THETA SYMBOL
+1D6C9 ; [.2419.0020.0005] # MATHEMATICAL BOLD SMALL THETA
+1D6DD ; [.2419.0020.0005] # MATHEMATICAL BOLD THETA SYMBOL
+1D703 ; [.2419.0020.0005] # MATHEMATICAL ITALIC SMALL THETA
+1D717 ; [.2419.0020.0005] # MATHEMATICAL ITALIC THETA SYMBOL
+1D73D ; [.2419.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL THETA
+1D751 ; [.2419.0020.0005] # MATHEMATICAL BOLD ITALIC THETA SYMBOL
+1D777 ; [.2419.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL THETA
+1D78B ; [.2419.0020.0005] # MATHEMATICAL SANS-SERIF BOLD THETA SYMBOL
+1D7B1 ; [.2419.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL THETA
+1D7C5 ; [.2419.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC THETA SYMBOL
+0398 ; [.2419.0020.0008] # GREEK CAPITAL LETTER THETA
+03F4 ; [.2419.0020.000A] # GREEK CAPITAL THETA SYMBOL
+1D6AF ; [.2419.0020.000B] # MATHEMATICAL BOLD CAPITAL THETA
+1D6B9 ; [.2419.0020.000B] # MATHEMATICAL BOLD CAPITAL THETA SYMBOL
+1D6E9 ; [.2419.0020.000B] # MATHEMATICAL ITALIC CAPITAL THETA
+1D6F3 ; [.2419.0020.000B] # MATHEMATICAL ITALIC CAPITAL THETA SYMBOL
+1D723 ; [.2419.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL THETA
+1D72D ; [.2419.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL THETA SYMBOL
+1D75D ; [.2419.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA
+1D767 ; [.2419.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA SYMBOL
+1D797 ; [.2419.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA
+1D7A1 ; [.2419.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA SYMBOL
+1DBF ; [.2419.0020.0014] # MODIFIER LETTER SMALL THETA
+03B9 ; [.241A.0020.0002] # GREEK SMALL LETTER IOTA
+1FBE ; [.241A.0020.0002] # GREEK PROSGEGRAMMENI
+037A ; [.241A.0020.0004] # GREEK YPOGEGRAMMENI
+1D6CA ; [.241A.0020.0005] # MATHEMATICAL BOLD SMALL IOTA
+1D704 ; [.241A.0020.0005] # MATHEMATICAL ITALIC SMALL IOTA
+1D73E ; [.241A.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL IOTA
+1D778 ; [.241A.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL IOTA
+1D7B2 ; [.241A.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL IOTA
+0399 ; [.241A.0020.0008] # GREEK CAPITAL LETTER IOTA
+1D6B0 ; [.241A.0020.000B] # MATHEMATICAL BOLD CAPITAL IOTA
+1D6EA ; [.241A.0020.000B] # MATHEMATICAL ITALIC CAPITAL IOTA
+1D724 ; [.241A.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL IOTA
+1D75E ; [.241A.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL IOTA
+1D798 ; [.241A.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL IOTA
+1F30 ; [.241A.0020.0002][.0000.0022.0002] # GREEK SMALL LETTER IOTA WITH PSILI
+1F38 ; [.241A.0020.0008][.0000.0022.0002] # GREEK CAPITAL LETTER IOTA WITH PSILI
+1F34 ; [.241A.0020.0002][.0000.0022.0002][.0000.0024.0002] # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA
+1F3C ; [.241A.0020.0008][.0000.0022.0002][.0000.0024.0002] # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA
+1F32 ; [.241A.0020.0002][.0000.0022.0002][.0000.0025.0002] # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA
+1F3A ; [.241A.0020.0008][.0000.0022.0002][.0000.0025.0002] # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA
+1F36 ; [.241A.0020.0002][.0000.0022.0002][.0000.002A.0002] # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI
+1F3E ; [.241A.0020.0008][.0000.0022.0002][.0000.002A.0002] # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI
+1F31 ; [.241A.0020.0002][.0000.0023.0002] # GREEK SMALL LETTER IOTA WITH DASIA
+1F39 ; [.241A.0020.0008][.0000.0023.0002] # GREEK CAPITAL LETTER IOTA WITH DASIA
+1F35 ; [.241A.0020.0002][.0000.0023.0002][.0000.0024.0002] # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA
+1F3D ; [.241A.0020.0008][.0000.0023.0002][.0000.0024.0002] # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA
+1F33 ; [.241A.0020.0002][.0000.0023.0002][.0000.0025.0002] # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA
+1F3B ; [.241A.0020.0008][.0000.0023.0002][.0000.0025.0002] # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA
+1F37 ; [.241A.0020.0002][.0000.0023.0002][.0000.002A.0002] # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI
+1F3F ; [.241A.0020.0008][.0000.0023.0002][.0000.002A.0002] # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI
+03AF ; [.241A.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER IOTA WITH TONOS
+1F77 ; [.241A.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER IOTA WITH OXIA
+038A ; [.241A.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER IOTA WITH TONOS
+1FDB ; [.241A.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER IOTA WITH OXIA
+1F76 ; [.241A.0020.0002][.0000.0025.0002] # GREEK SMALL LETTER IOTA WITH VARIA
+1FDA ; [.241A.0020.0008][.0000.0025.0002] # GREEK CAPITAL LETTER IOTA WITH VARIA
+1FD0 ; [.241A.0020.0002][.0000.0026.0002] # GREEK SMALL LETTER IOTA WITH VRACHY
+1FD8 ; [.241A.0020.0008][.0000.0026.0002] # GREEK CAPITAL LETTER IOTA WITH VRACHY
+1FD6 ; [.241A.0020.0002][.0000.002A.0002] # GREEK SMALL LETTER IOTA WITH PERISPOMENI
+03CA ; [.241A.0020.0002][.0000.002B.0002] # GREEK SMALL LETTER IOTA WITH DIALYTIKA
+03AA ; [.241A.0020.0008][.0000.002B.0002] # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
+0390 ; [.241A.0020.0002][.0000.002B.0002][.0000.0024.0002] # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+1FD3 ; [.241A.0020.0002][.0000.002B.0002][.0000.0024.0002] # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+1FD2 ; [.241A.0020.0002][.0000.002B.0002][.0000.0025.0002] # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
+1FD7 ; [.241A.0020.0002][.0000.002B.0002][.0000.002A.0002] # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
+1FD1 ; [.241A.0020.0002][.0000.0032.0002] # GREEK SMALL LETTER IOTA WITH MACRON
+1FD9 ; [.241A.0020.0008][.0000.0032.0002] # GREEK CAPITAL LETTER IOTA WITH MACRON
+03F3 ; [.241B.0020.0002] # GREEK LETTER YOT
+037F ; [.241B.0020.0008] # GREEK CAPITAL LETTER YOT
+03BA ; [.241C.0020.0002] # GREEK SMALL LETTER KAPPA
+03F0 ; [.241C.0020.0004] # GREEK KAPPA SYMBOL
+1D6CB ; [.241C.0020.0005] # MATHEMATICAL BOLD SMALL KAPPA
+1D6DE ; [.241C.0020.0005] # MATHEMATICAL BOLD KAPPA SYMBOL
+1D705 ; [.241C.0020.0005] # MATHEMATICAL ITALIC SMALL KAPPA
+1D718 ; [.241C.0020.0005] # MATHEMATICAL ITALIC KAPPA SYMBOL
+1D73F ; [.241C.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL KAPPA
+1D752 ; [.241C.0020.0005] # MATHEMATICAL BOLD ITALIC KAPPA SYMBOL
+1D779 ; [.241C.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL KAPPA
+1D78C ; [.241C.0020.0005] # MATHEMATICAL SANS-SERIF BOLD KAPPA SYMBOL
+1D7B3 ; [.241C.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL KAPPA
+1D7C6 ; [.241C.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC KAPPA SYMBOL
+039A ; [.241C.0020.0008] # GREEK CAPITAL LETTER KAPPA
+1D6B1 ; [.241C.0020.000B] # MATHEMATICAL BOLD CAPITAL KAPPA
+1D6EB ; [.241C.0020.000B] # MATHEMATICAL ITALIC CAPITAL KAPPA
+1D725 ; [.241C.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL KAPPA
+1D75F ; [.241C.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL KAPPA
+1D799 ; [.241C.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL KAPPA
+03D7 ; [.241C.0020.0004][.240D.0020.0004][.241A.0020.0004] # GREEK KAI SYMBOL
+03CF ; [.241C.0020.000A][.240D.0020.0004][.241A.0020.0004] # GREEK CAPITAL KAI SYMBOL
+03BB ; [.241D.0020.0002] # GREEK SMALL LETTER LAMDA
+1D6CC ; [.241D.0020.0005] # MATHEMATICAL BOLD SMALL LAMDA
+1D706 ; [.241D.0020.0005] # MATHEMATICAL ITALIC SMALL LAMDA
+1D740 ; [.241D.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL LAMDA
+1D77A ; [.241D.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL LAMDA
+1D7B4 ; [.241D.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL LAMDA
+039B ; [.241D.0020.0008] # GREEK CAPITAL LETTER LAMDA
+1D6B2 ; [.241D.0020.000B] # MATHEMATICAL BOLD CAPITAL LAMDA
+1D6EC ; [.241D.0020.000B] # MATHEMATICAL ITALIC CAPITAL LAMDA
+1D726 ; [.241D.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL LAMDA
+1D760 ; [.241D.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL LAMDA
+1D79A ; [.241D.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL LAMDA
+1D27 ; [.241E.0020.0002] # GREEK LETTER SMALL CAPITAL LAMDA
+03BC ; [.241F.0020.0002] # GREEK SMALL LETTER MU
+00B5 ; [.241F.0020.0004] # MICRO SIGN
+1D6CD ; [.241F.0020.0005] # MATHEMATICAL BOLD SMALL MU
+1D707 ; [.241F.0020.0005] # MATHEMATICAL ITALIC SMALL MU
+1D741 ; [.241F.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL MU
+1D77B ; [.241F.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL MU
+1D7B5 ; [.241F.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL MU
+039C ; [.241F.0020.0008] # GREEK CAPITAL LETTER MU
+1D6B3 ; [.241F.0020.000B] # MATHEMATICAL BOLD CAPITAL MU
+1D6ED ; [.241F.0020.000B] # MATHEMATICAL ITALIC CAPITAL MU
+1D727 ; [.241F.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL MU
+1D761 ; [.241F.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL MU
+1D79B ; [.241F.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL MU
+3382 ; [.241F.0020.001C][.2075.0020.001D] # SQUARE MU A
+338C ; [.241F.0020.001C][.2116.0020.001D] # SQUARE MU F
+338D ; [.241F.0020.001C][.2125.0020.001C] # SQUARE MU G
+3395 ; [.241F.0020.001C][.21B0.0020.001C] # SQUARE MU L
+339B ; [.241F.0020.001C][.21E8.0020.001C] # SQUARE MU M
+33B2 ; [.241F.0020.001C][.22B6.0020.001C] # SQUARE MU S
+33B6 ; [.241F.0020.001C][.2331.0020.001D] # SQUARE MU V
+33BC ; [.241F.0020.001C][.2343.0020.001D] # SQUARE MU W
+03BD ; [.2420.0020.0002] # GREEK SMALL LETTER NU
+1D6CE ; [.2420.0020.0005] # MATHEMATICAL BOLD SMALL NU
+1D708 ; [.2420.0020.0005] # MATHEMATICAL ITALIC SMALL NU
+1D742 ; [.2420.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL NU
+1D77C ; [.2420.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL NU
+1D7B6 ; [.2420.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL NU
+039D ; [.2420.0020.0008] # GREEK CAPITAL LETTER NU
+1D6B4 ; [.2420.0020.000B] # MATHEMATICAL BOLD CAPITAL NU
+1D6EE ; [.2420.0020.000B] # MATHEMATICAL ITALIC CAPITAL NU
+1D728 ; [.2420.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL NU
+1D762 ; [.2420.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL NU
+1D79C ; [.2420.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL NU
+03BE ; [.2421.0020.0002] # GREEK SMALL LETTER XI
+1D6CF ; [.2421.0020.0005] # MATHEMATICAL BOLD SMALL XI
+1D709 ; [.2421.0020.0005] # MATHEMATICAL ITALIC SMALL XI
+1D743 ; [.2421.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL XI
+1D77D ; [.2421.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL XI
+1D7B7 ; [.2421.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL XI
+039E ; [.2421.0020.0008] # GREEK CAPITAL LETTER XI
+1D6B5 ; [.2421.0020.000B] # MATHEMATICAL BOLD CAPITAL XI
+1D6EF ; [.2421.0020.000B] # MATHEMATICAL ITALIC CAPITAL XI
+1D729 ; [.2421.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL XI
+1D763 ; [.2421.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL XI
+1D79D ; [.2421.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL XI
+03BF ; [.2422.0020.0002] # GREEK SMALL LETTER OMICRON
+1D6D0 ; [.2422.0020.0005] # MATHEMATICAL BOLD SMALL OMICRON
+1D70A ; [.2422.0020.0005] # MATHEMATICAL ITALIC SMALL OMICRON
+1D744 ; [.2422.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL OMICRON
+1D77E ; [.2422.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL OMICRON
+1D7B8 ; [.2422.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMICRON
+039F ; [.2422.0020.0008] # GREEK CAPITAL LETTER OMICRON
+1D6B6 ; [.2422.0020.000B] # MATHEMATICAL BOLD CAPITAL OMICRON
+1D6F0 ; [.2422.0020.000B] # MATHEMATICAL ITALIC CAPITAL OMICRON
+1D72A ; [.2422.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL OMICRON
+1D764 ; [.2422.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL OMICRON
+1D79E ; [.2422.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMICRON
+1F40 ; [.2422.0020.0002][.0000.0022.0002] # GREEK SMALL LETTER OMICRON WITH PSILI
+1F48 ; [.2422.0020.0008][.0000.0022.0002] # GREEK CAPITAL LETTER OMICRON WITH PSILI
+1F44 ; [.2422.0020.0002][.0000.0022.0002][.0000.0024.0002] # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA
+1F4C ; [.2422.0020.0008][.0000.0022.0002][.0000.0024.0002] # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA
+1F42 ; [.2422.0020.0002][.0000.0022.0002][.0000.0025.0002] # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA
+1F4A ; [.2422.0020.0008][.0000.0022.0002][.0000.0025.0002] # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA
+1F41 ; [.2422.0020.0002][.0000.0023.0002] # GREEK SMALL LETTER OMICRON WITH DASIA
+1F49 ; [.2422.0020.0008][.0000.0023.0002] # GREEK CAPITAL LETTER OMICRON WITH DASIA
+1F45 ; [.2422.0020.0002][.0000.0023.0002][.0000.0024.0002] # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+1F4D ; [.2422.0020.0008][.0000.0023.0002][.0000.0024.0002] # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+1F43 ; [.2422.0020.0002][.0000.0023.0002][.0000.0025.0002] # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA
+1F4B ; [.2422.0020.0008][.0000.0023.0002][.0000.0025.0002] # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA
+03CC ; [.2422.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER OMICRON WITH TONOS
+1F79 ; [.2422.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER OMICRON WITH OXIA
+038C ; [.2422.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER OMICRON WITH TONOS
+1FF9 ; [.2422.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER OMICRON WITH OXIA
+1F78 ; [.2422.0020.0002][.0000.0025.0002] # GREEK SMALL LETTER OMICRON WITH VARIA
+1FF8 ; [.2422.0020.0008][.0000.0025.0002] # GREEK CAPITAL LETTER OMICRON WITH VARIA
+03C0 ; [.2423.0020.0002] # GREEK SMALL LETTER PI
+03D6 ; [.2423.0020.0004] # GREEK PI SYMBOL
+213C ; [.2423.0020.0005] # DOUBLE-STRUCK SMALL PI
+1D6D1 ; [.2423.0020.0005] # MATHEMATICAL BOLD SMALL PI
+1D6E1 ; [.2423.0020.0005] # MATHEMATICAL BOLD PI SYMBOL
+1D70B ; [.2423.0020.0005] # MATHEMATICAL ITALIC SMALL PI
+1D71B ; [.2423.0020.0005] # MATHEMATICAL ITALIC PI SYMBOL
+1D745 ; [.2423.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL PI
+1D755 ; [.2423.0020.0005] # MATHEMATICAL BOLD ITALIC PI SYMBOL
+1D77F ; [.2423.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL PI
+1D78F ; [.2423.0020.0005] # MATHEMATICAL SANS-SERIF BOLD PI SYMBOL
+1D7B9 ; [.2423.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PI
+1D7C9 ; [.2423.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL
+03A0 ; [.2423.0020.0008] # GREEK CAPITAL LETTER PI
+213F ; [.2423.0020.000B] # DOUBLE-STRUCK CAPITAL PI
+1D6B7 ; [.2423.0020.000B] # MATHEMATICAL BOLD CAPITAL PI
+1D6F1 ; [.2423.0020.000B] # MATHEMATICAL ITALIC CAPITAL PI
+1D72B ; [.2423.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL PI
+1D765 ; [.2423.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL PI
+1D79F ; [.2423.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PI
+1D28 ; [.2424.0020.0002] # GREEK LETTER SMALL CAPITAL PI
+03FB ; [.2425.0020.0002] # GREEK SMALL LETTER SAN
+03FA ; [.2425.0020.0008] # GREEK CAPITAL LETTER SAN
+03DF ; [.2426.0020.0002] # GREEK SMALL LETTER KOPPA
+03DE ; [.2426.0020.0008] # GREEK LETTER KOPPA
+03D9 ; [.2427.0020.0002] # GREEK SMALL LETTER ARCHAIC KOPPA
+03D8 ; [.2427.0020.0008] # GREEK LETTER ARCHAIC KOPPA
+03C1 ; [.2428.0020.0002] # GREEK SMALL LETTER RHO
+03F1 ; [.2428.0020.0004] # GREEK RHO SYMBOL
+1D6D2 ; [.2428.0020.0005] # MATHEMATICAL BOLD SMALL RHO
+1D6E0 ; [.2428.0020.0005] # MATHEMATICAL BOLD RHO SYMBOL
+1D70C ; [.2428.0020.0005] # MATHEMATICAL ITALIC SMALL RHO
+1D71A ; [.2428.0020.0005] # MATHEMATICAL ITALIC RHO SYMBOL
+1D746 ; [.2428.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL RHO
+1D754 ; [.2428.0020.0005] # MATHEMATICAL BOLD ITALIC RHO SYMBOL
+1D780 ; [.2428.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL RHO
+1D78E ; [.2428.0020.0005] # MATHEMATICAL SANS-SERIF BOLD RHO SYMBOL
+1D7BA ; [.2428.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL RHO
+1D7C8 ; [.2428.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC RHO SYMBOL
+03A1 ; [.2428.0020.0008] # GREEK CAPITAL LETTER RHO
+1D6B8 ; [.2428.0020.000B] # MATHEMATICAL BOLD CAPITAL RHO
+1D6F2 ; [.2428.0020.000B] # MATHEMATICAL ITALIC CAPITAL RHO
+1D72C ; [.2428.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL RHO
+1D766 ; [.2428.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL RHO
+1D7A0 ; [.2428.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL RHO
+1D68 ; [.2428.0020.0015] # GREEK SUBSCRIPT SMALL LETTER RHO
+1FE4 ; [.2428.0020.0002][.0000.0022.0002] # GREEK SMALL LETTER RHO WITH PSILI
+1FE5 ; [.2428.0020.0002][.0000.0023.0002] # GREEK SMALL LETTER RHO WITH DASIA
+1FEC ; [.2428.0020.0008][.0000.0023.0002] # GREEK CAPITAL LETTER RHO WITH DASIA
+1D29 ; [.2429.0020.0002] # GREEK LETTER SMALL CAPITAL RHO
+03FC ; [.242A.0020.0002] # GREEK RHO WITH STROKE SYMBOL
+03C3 ; [.242B.0020.0002] # GREEK SMALL LETTER SIGMA
+03F2 ; [.242B.0020.0004] # GREEK LUNATE SIGMA SYMBOL
+1D6D3 ; [.242B.0020.0005] # MATHEMATICAL BOLD SMALL FINAL SIGMA
+1D6D4 ; [.242B.0020.0005] # MATHEMATICAL BOLD SMALL SIGMA
+1D70D ; [.242B.0020.0005] # MATHEMATICAL ITALIC SMALL FINAL SIGMA
+1D70E ; [.242B.0020.0005] # MATHEMATICAL ITALIC SMALL SIGMA
+1D747 ; [.242B.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL FINAL SIGMA
+1D748 ; [.242B.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL SIGMA
+1D781 ; [.242B.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL FINAL SIGMA
+1D782 ; [.242B.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL SIGMA
+1D7BB ; [.242B.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL FINAL SIGMA
+1D7BC ; [.242B.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL SIGMA
+03A3 ; [.242B.0020.0008] # GREEK CAPITAL LETTER SIGMA
+03F9 ; [.242B.0020.000A] # GREEK CAPITAL LUNATE SIGMA SYMBOL
+1D6BA ; [.242B.0020.000B] # MATHEMATICAL BOLD CAPITAL SIGMA
+1D6F4 ; [.242B.0020.000B] # MATHEMATICAL ITALIC CAPITAL SIGMA
+1D72E ; [.242B.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL SIGMA
+1D768 ; [.242B.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL SIGMA
+1D7A2 ; [.242B.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL SIGMA
+03C2 ; [.242B.0020.0019] # GREEK SMALL LETTER FINAL SIGMA
+037C ; [.242C.0020.0002] # GREEK SMALL DOTTED LUNATE SIGMA SYMBOL
+03FE ; [.242C.0020.0008] # GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL
+037B ; [.242D.0020.0002] # GREEK SMALL REVERSED LUNATE SIGMA SYMBOL
+03FD ; [.242D.0020.0008] # GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL
+037D ; [.242E.0020.0002] # GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL
+03FF ; [.242E.0020.0008] # GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL
+03C4 ; [.242F.0020.0002] # GREEK SMALL LETTER TAU
+1D6D5 ; [.242F.0020.0005] # MATHEMATICAL BOLD SMALL TAU
+1D70F ; [.242F.0020.0005] # MATHEMATICAL ITALIC SMALL TAU
+1D749 ; [.242F.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL TAU
+1D783 ; [.242F.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL TAU
+1D7BD ; [.242F.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL TAU
+03A4 ; [.242F.0020.0008] # GREEK CAPITAL LETTER TAU
+1D6BB ; [.242F.0020.000B] # MATHEMATICAL BOLD CAPITAL TAU
+1D6F5 ; [.242F.0020.000B] # MATHEMATICAL ITALIC CAPITAL TAU
+1D72F ; [.242F.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL TAU
+1D769 ; [.242F.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL TAU
+1D7A3 ; [.242F.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL TAU
+03C5 ; [.2430.0020.0002] # GREEK SMALL LETTER UPSILON
+1D6D6 ; [.2430.0020.0005] # MATHEMATICAL BOLD SMALL UPSILON
+1D710 ; [.2430.0020.0005] # MATHEMATICAL ITALIC SMALL UPSILON
+1D74A ; [.2430.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL UPSILON
+1D784 ; [.2430.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL UPSILON
+1D7BE ; [.2430.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL UPSILON
+03A5 ; [.2430.0020.0008] # GREEK CAPITAL LETTER UPSILON
+03D2 ; [.2430.0020.000A] # GREEK UPSILON WITH HOOK SYMBOL
+1D6BC ; [.2430.0020.000B] # MATHEMATICAL BOLD CAPITAL UPSILON
+1D6F6 ; [.2430.0020.000B] # MATHEMATICAL ITALIC CAPITAL UPSILON
+1D730 ; [.2430.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL UPSILON
+1D76A ; [.2430.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL UPSILON
+1D7A4 ; [.2430.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL UPSILON
+1F50 ; [.2430.0020.0002][.0000.0022.0002] # GREEK SMALL LETTER UPSILON WITH PSILI
+1F54 ; [.2430.0020.0002][.0000.0022.0002][.0000.0024.0002] # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
+1F52 ; [.2430.0020.0002][.0000.0022.0002][.0000.0025.0002] # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
+1F56 ; [.2430.0020.0002][.0000.0022.0002][.0000.002A.0002] # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
+1F51 ; [.2430.0020.0002][.0000.0023.0002] # GREEK SMALL LETTER UPSILON WITH DASIA
+1F59 ; [.2430.0020.0008][.0000.0023.0002] # GREEK CAPITAL LETTER UPSILON WITH DASIA
+1F55 ; [.2430.0020.0002][.0000.0023.0002][.0000.0024.0002] # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA
+1F5D ; [.2430.0020.0008][.0000.0023.0002][.0000.0024.0002] # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+1F53 ; [.2430.0020.0002][.0000.0023.0002][.0000.0025.0002] # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA
+1F5B ; [.2430.0020.0008][.0000.0023.0002][.0000.0025.0002] # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+1F57 ; [.2430.0020.0002][.0000.0023.0002][.0000.002A.0002] # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+1F5F ; [.2430.0020.0008][.0000.0023.0002][.0000.002A.0002] # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI
+03CD ; [.2430.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER UPSILON WITH TONOS
+1F7B ; [.2430.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER UPSILON WITH OXIA
+038E ; [.2430.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER UPSILON WITH TONOS
+1FEB ; [.2430.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER UPSILON WITH OXIA
+03D3 ; [.2430.0020.000A][.0000.0024.0002] # GREEK UPSILON WITH ACUTE AND HOOK SYMBOL
+1F7A ; [.2430.0020.0002][.0000.0025.0002] # GREEK SMALL LETTER UPSILON WITH VARIA
+1FEA ; [.2430.0020.0008][.0000.0025.0002] # GREEK CAPITAL LETTER UPSILON WITH VARIA
+1FE0 ; [.2430.0020.0002][.0000.0026.0002] # GREEK SMALL LETTER UPSILON WITH VRACHY
+1FE8 ; [.2430.0020.0008][.0000.0026.0002] # GREEK CAPITAL LETTER UPSILON WITH VRACHY
+1FE6 ; [.2430.0020.0002][.0000.002A.0002] # GREEK SMALL LETTER UPSILON WITH PERISPOMENI
+03CB ; [.2430.0020.0002][.0000.002B.0002] # GREEK SMALL LETTER UPSILON WITH DIALYTIKA
+03AB ; [.2430.0020.0008][.0000.002B.0002] # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+03D4 ; [.2430.0020.000A][.0000.002B.0002] # GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL
+03B0 ; [.2430.0020.0002][.0000.002B.0002][.0000.0024.0002] # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+1FE3 ; [.2430.0020.0002][.0000.002B.0002][.0000.0024.0002] # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA
+1FE2 ; [.2430.0020.0002][.0000.002B.0002][.0000.0025.0002] # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
+1FE7 ; [.2430.0020.0002][.0000.002B.0002][.0000.002A.0002] # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
+1FE1 ; [.2430.0020.0002][.0000.0032.0002] # GREEK SMALL LETTER UPSILON WITH MACRON
+1FE9 ; [.2430.0020.0008][.0000.0032.0002] # GREEK CAPITAL LETTER UPSILON WITH MACRON
+03C6 ; [.2431.0020.0002] # GREEK SMALL LETTER PHI
+03D5 ; [.2431.0020.0004] # GREEK PHI SYMBOL
+1D6D7 ; [.2431.0020.0005] # MATHEMATICAL BOLD SMALL PHI
+1D6DF ; [.2431.0020.0005] # MATHEMATICAL BOLD PHI SYMBOL
+1D711 ; [.2431.0020.0005] # MATHEMATICAL ITALIC SMALL PHI
+1D719 ; [.2431.0020.0005] # MATHEMATICAL ITALIC PHI SYMBOL
+1D74B ; [.2431.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL PHI
+1D753 ; [.2431.0020.0005] # MATHEMATICAL BOLD ITALIC PHI SYMBOL
+1D785 ; [.2431.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL PHI
+1D78D ; [.2431.0020.0005] # MATHEMATICAL SANS-SERIF BOLD PHI SYMBOL
+1D7BF ; [.2431.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PHI
+1D7C7 ; [.2431.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC PHI SYMBOL
+03A6 ; [.2431.0020.0008] # GREEK CAPITAL LETTER PHI
+1D6BD ; [.2431.0020.000B] # MATHEMATICAL BOLD CAPITAL PHI
+1D6F7 ; [.2431.0020.000B] # MATHEMATICAL ITALIC CAPITAL PHI
+1D731 ; [.2431.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL PHI
+1D76B ; [.2431.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL PHI
+1D7A5 ; [.2431.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PHI
+1D60 ; [.2431.0020.0014] # MODIFIER LETTER SMALL GREEK PHI
+1D69 ; [.2431.0020.0015] # GREEK SUBSCRIPT SMALL LETTER PHI
+03C7 ; [.2432.0020.0002] # GREEK SMALL LETTER CHI
+1D6D8 ; [.2432.0020.0005] # MATHEMATICAL BOLD SMALL CHI
+1D712 ; [.2432.0020.0005] # MATHEMATICAL ITALIC SMALL CHI
+1D74C ; [.2432.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL CHI
+1D786 ; [.2432.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL CHI
+1D7C0 ; [.2432.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL CHI
+03A7 ; [.2432.0020.0008] # GREEK CAPITAL LETTER CHI
+1D6BE ; [.2432.0020.000B] # MATHEMATICAL BOLD CAPITAL CHI
+1D6F8 ; [.2432.0020.000B] # MATHEMATICAL ITALIC CAPITAL CHI
+1D732 ; [.2432.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL CHI
+1D76C ; [.2432.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL CHI
+1D7A6 ; [.2432.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL CHI
+1D61 ; [.2432.0020.0014] # MODIFIER LETTER SMALL CHI
+1D6A ; [.2432.0020.0015] # GREEK SUBSCRIPT SMALL LETTER CHI
+03C8 ; [.2433.0020.0002] # GREEK SMALL LETTER PSI
+1D6D9 ; [.2433.0020.0005] # MATHEMATICAL BOLD SMALL PSI
+1D713 ; [.2433.0020.0005] # MATHEMATICAL ITALIC SMALL PSI
+1D74D ; [.2433.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL PSI
+1D787 ; [.2433.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL PSI
+1D7C1 ; [.2433.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PSI
+03A8 ; [.2433.0020.0008] # GREEK CAPITAL LETTER PSI
+1D6BF ; [.2433.0020.000B] # MATHEMATICAL BOLD CAPITAL PSI
+1D6F9 ; [.2433.0020.000B] # MATHEMATICAL ITALIC CAPITAL PSI
+1D733 ; [.2433.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL PSI
+1D76D ; [.2433.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL PSI
+1D7A7 ; [.2433.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PSI
+1D2A ; [.2434.0020.0002] # GREEK LETTER SMALL CAPITAL PSI
+03C9 ; [.2435.0020.0002] # GREEK SMALL LETTER OMEGA
+1D6DA ; [.2435.0020.0005] # MATHEMATICAL BOLD SMALL OMEGA
+1D714 ; [.2435.0020.0005] # MATHEMATICAL ITALIC SMALL OMEGA
+1D74E ; [.2435.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL OMEGA
+1D788 ; [.2435.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA
+1D7C2 ; [.2435.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA
+03A9 ; [.2435.0020.0008] # GREEK CAPITAL LETTER OMEGA
+2126 ; [.2435.0020.0008] # OHM SIGN
+1D6C0 ; [.2435.0020.000B] # MATHEMATICAL BOLD CAPITAL OMEGA
+1D6FA ; [.2435.0020.000B] # MATHEMATICAL ITALIC CAPITAL OMEGA
+1D734 ; [.2435.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL OMEGA
+1D76E ; [.2435.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA
+1D7A8 ; [.2435.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA
+1F60 ; [.2435.0020.0002][.0000.0022.0002] # GREEK SMALL LETTER OMEGA WITH PSILI
+1F68 ; [.2435.0020.0008][.0000.0022.0002] # GREEK CAPITAL LETTER OMEGA WITH PSILI
+1F64 ; [.2435.0020.0002][.0000.0022.0002][.0000.0024.0002] # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA
+1F6C ; [.2435.0020.0008][.0000.0022.0002][.0000.0024.0002] # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA
+1FA4 ; [.2435.0020.0002][.0000.0022.0002][.0000.0024.0002][.0000.004C.0002] # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+1FAC ; [.2435.0020.0008][.0000.0022.0002][.0000.0024.0002][.0000.004C.0002] # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+1F62 ; [.2435.0020.0002][.0000.0022.0002][.0000.0025.0002] # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA
+1F6A ; [.2435.0020.0008][.0000.0022.0002][.0000.0025.0002] # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA
+1FA2 ; [.2435.0020.0002][.0000.0022.0002][.0000.0025.0002][.0000.004C.0002] # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+1FAA ; [.2435.0020.0008][.0000.0022.0002][.0000.0025.0002][.0000.004C.0002] # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+1F66 ; [.2435.0020.0002][.0000.0022.0002][.0000.002A.0002] # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI
+1F6E ; [.2435.0020.0008][.0000.0022.0002][.0000.002A.0002] # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI
+1FA6 ; [.2435.0020.0002][.0000.0022.0002][.0000.002A.0002][.0000.004C.0002] # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+1FAE ; [.2435.0020.0008][.0000.0022.0002][.0000.002A.0002][.0000.004C.0002] # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+1FA0 ; [.2435.0020.0002][.0000.0022.0002][.0000.004C.0002] # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI
+1FA8 ; [.2435.0020.0008][.0000.0022.0002][.0000.004C.0002] # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI
+1F61 ; [.2435.0020.0002][.0000.0023.0002] # GREEK SMALL LETTER OMEGA WITH DASIA
+1F69 ; [.2435.0020.0008][.0000.0023.0002] # GREEK CAPITAL LETTER OMEGA WITH DASIA
+1F65 ; [.2435.0020.0002][.0000.0023.0002][.0000.0024.0002] # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA
+1F6D ; [.2435.0020.0008][.0000.0023.0002][.0000.0024.0002] # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA
+1FA5 ; [.2435.0020.0002][.0000.0023.0002][.0000.0024.0002][.0000.004C.0002] # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+1FAD ; [.2435.0020.0008][.0000.0023.0002][.0000.0024.0002][.0000.004C.0002] # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+1F63 ; [.2435.0020.0002][.0000.0023.0002][.0000.0025.0002] # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA
+1F6B ; [.2435.0020.0008][.0000.0023.0002][.0000.0025.0002] # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA
+1FA3 ; [.2435.0020.0002][.0000.0023.0002][.0000.0025.0002][.0000.004C.0002] # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+1FAB ; [.2435.0020.0008][.0000.0023.0002][.0000.0025.0002][.0000.004C.0002] # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+1F67 ; [.2435.0020.0002][.0000.0023.0002][.0000.002A.0002] # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI
+1F6F ; [.2435.0020.0008][.0000.0023.0002][.0000.002A.0002] # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
+1FA7 ; [.2435.0020.0002][.0000.0023.0002][.0000.002A.0002][.0000.004C.0002] # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+1FAF ; [.2435.0020.0008][.0000.0023.0002][.0000.002A.0002][.0000.004C.0002] # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1FA1 ; [.2435.0020.0002][.0000.0023.0002][.0000.004C.0002] # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI
+1FA9 ; [.2435.0020.0008][.0000.0023.0002][.0000.004C.0002] # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI
+03CE ; [.2435.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER OMEGA WITH TONOS
+1F7D ; [.2435.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER OMEGA WITH OXIA
+038F ; [.2435.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER OMEGA WITH TONOS
+1FFB ; [.2435.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER OMEGA WITH OXIA
+1FF4 ; [.2435.0020.0002][.0000.0024.0002][.0000.004C.0002] # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+1F7C ; [.2435.0020.0002][.0000.0025.0002] # GREEK SMALL LETTER OMEGA WITH VARIA
+1FFA ; [.2435.0020.0008][.0000.0025.0002] # GREEK CAPITAL LETTER OMEGA WITH VARIA
+1FF2 ; [.2435.0020.0002][.0000.0025.0002][.0000.004C.0002] # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI
+1FF6 ; [.2435.0020.0002][.0000.002A.0002] # GREEK SMALL LETTER OMEGA WITH PERISPOMENI
+1FF7 ; [.2435.0020.0002][.0000.002A.0002][.0000.004C.0002] # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
+1FF3 ; [.2435.0020.0002][.0000.004C.0002] # GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI
+1FFC ; [.2435.0020.0008][.0000.004C.0002] # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+AB65 ; [.2436.0020.0002] # GREEK LETTER SMALL CAPITAL OMEGA
+03E1 ; [.2437.0020.0002] # GREEK SMALL LETTER SAMPI
+03E0 ; [.2437.0020.0008] # GREEK LETTER SAMPI
+0373 ; [.2438.0020.0002] # GREEK SMALL LETTER ARCHAIC SAMPI
+0372 ; [.2438.0020.0008] # GREEK CAPITAL LETTER ARCHAIC SAMPI
+03F8 ; [.2439.0020.0002] # GREEK SMALL LETTER SHO
+03F7 ; [.2439.0020.0008] # GREEK CAPITAL LETTER SHO
+2C81 ; [.243A.0020.0002] # COPTIC SMALL LETTER ALFA
+2C80 ; [.243A.0020.0008] # COPTIC CAPITAL LETTER ALFA
+2C83 ; [.243B.0020.0002] # COPTIC SMALL LETTER VIDA
+2C82 ; [.243B.0020.0008] # COPTIC CAPITAL LETTER VIDA
+2C85 ; [.243C.0020.0002] # COPTIC SMALL LETTER GAMMA
+2C84 ; [.243C.0020.0008] # COPTIC CAPITAL LETTER GAMMA
+2C87 ; [.243D.0020.0002] # COPTIC SMALL LETTER DALDA
+2C86 ; [.243D.0020.0008] # COPTIC CAPITAL LETTER DALDA
+2C89 ; [.243E.0020.0002] # COPTIC SMALL LETTER EIE
+2C88 ; [.243E.0020.0008] # COPTIC CAPITAL LETTER EIE
+2CB7 ; [.243F.0020.0002] # COPTIC SMALL LETTER CRYPTOGRAMMIC EIE
+2CB6 ; [.243F.0020.0008] # COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE
+2C8B ; [.2440.0020.0002] # COPTIC SMALL LETTER SOU
+2C8A ; [.2440.0020.0008] # COPTIC CAPITAL LETTER SOU
+2C8D ; [.2441.0020.0002] # COPTIC SMALL LETTER ZATA
+2C8C ; [.2441.0020.0008] # COPTIC CAPITAL LETTER ZATA
+2C8F ; [.2442.0020.0002] # COPTIC SMALL LETTER HATE
+2C8E ; [.2442.0020.0008] # COPTIC CAPITAL LETTER HATE
+2C91 ; [.2443.0020.0002] # COPTIC SMALL LETTER THETHE
+2C90 ; [.2443.0020.0008] # COPTIC CAPITAL LETTER THETHE
+2C93 ; [.2444.0020.0002] # COPTIC SMALL LETTER IAUDA
+2C92 ; [.2444.0020.0008] # COPTIC CAPITAL LETTER IAUDA
+2C95 ; [.2445.0020.0002] # COPTIC SMALL LETTER KAPA
+2C94 ; [.2445.0020.0008] # COPTIC CAPITAL LETTER KAPA
+2CE4 ; [.2445.0020.0004][.243A.0020.0004][.2444.0020.0004] # COPTIC SYMBOL KAI
+2CB9 ; [.2446.0020.0002] # COPTIC SMALL LETTER DIALECT-P KAPA
+2CB8 ; [.2446.0020.0008] # COPTIC CAPITAL LETTER DIALECT-P KAPA
+2C97 ; [.2447.0020.0002] # COPTIC SMALL LETTER LAULA
+2C96 ; [.2447.0020.0008] # COPTIC CAPITAL LETTER LAULA
+2C99 ; [.2448.0020.0002] # COPTIC SMALL LETTER MI
+2C98 ; [.2448.0020.0008] # COPTIC CAPITAL LETTER MI
+2C9B ; [.2449.0020.0002] # COPTIC SMALL LETTER NI
+2C9A ; [.2449.0020.0008] # COPTIC CAPITAL LETTER NI
+2CBB ; [.244A.0020.0002] # COPTIC SMALL LETTER DIALECT-P NI
+2CBA ; [.244A.0020.0008] # COPTIC CAPITAL LETTER DIALECT-P NI
+2CBD ; [.244B.0020.0002] # COPTIC SMALL LETTER CRYPTOGRAMMIC NI
+2CBC ; [.244B.0020.0008] # COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI
+2C9D ; [.244C.0020.0002] # COPTIC SMALL LETTER KSI
+2C9C ; [.244C.0020.0008] # COPTIC CAPITAL LETTER KSI
+2C9F ; [.244D.0020.0002] # COPTIC SMALL LETTER O
+2C9E ; [.244D.0020.0008] # COPTIC CAPITAL LETTER O
+2CA1 ; [.244E.0020.0002] # COPTIC SMALL LETTER PI
+2CA0 ; [.244E.0020.0008] # COPTIC CAPITAL LETTER PI
+2CA3 ; [.244F.0020.0002] # COPTIC SMALL LETTER RO
+2CA2 ; [.244F.0020.0008] # COPTIC CAPITAL LETTER RO
+2CA5 ; [.2450.0020.0002] # COPTIC SMALL LETTER SIMA
+2CA4 ; [.2450.0020.0008] # COPTIC CAPITAL LETTER SIMA
+2CA7 ; [.2451.0020.0002] # COPTIC SMALL LETTER TAU
+2CA6 ; [.2451.0020.0008] # COPTIC CAPITAL LETTER TAU
+2CA9 ; [.2452.0020.0002] # COPTIC SMALL LETTER UA
+2CA8 ; [.2452.0020.0008] # COPTIC CAPITAL LETTER UA
+2CAB ; [.2453.0020.0002] # COPTIC SMALL LETTER FI
+2CAA ; [.2453.0020.0008] # COPTIC CAPITAL LETTER FI
+2CAD ; [.2454.0020.0002] # COPTIC SMALL LETTER KHI
+2CAC ; [.2454.0020.0008] # COPTIC CAPITAL LETTER KHI
+2CAF ; [.2455.0020.0002] # COPTIC SMALL LETTER PSI
+2CAE ; [.2455.0020.0008] # COPTIC CAPITAL LETTER PSI
+2CB1 ; [.2456.0020.0002] # COPTIC SMALL LETTER OOU
+2CB0 ; [.2456.0020.0008] # COPTIC CAPITAL LETTER OOU
+2CBF ; [.2457.0020.0002] # COPTIC SMALL LETTER OLD COPTIC OOU
+2CBE ; [.2457.0020.0008] # COPTIC CAPITAL LETTER OLD COPTIC OOU
+2CC1 ; [.2458.0020.0002] # COPTIC SMALL LETTER SAMPI
+2CC0 ; [.2458.0020.0008] # COPTIC CAPITAL LETTER SAMPI
+03E3 ; [.2459.0020.0002] # COPTIC SMALL LETTER SHEI
+03E2 ; [.2459.0020.0008] # COPTIC CAPITAL LETTER SHEI
+2CEC ; [.245A.0020.0002] # COPTIC SMALL LETTER CRYPTOGRAMMIC SHEI
+2CEB ; [.245A.0020.0008] # COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI
+2CC3 ; [.245B.0020.0002] # COPTIC SMALL LETTER CROSSED SHEI
+2CC2 ; [.245B.0020.0008] # COPTIC CAPITAL LETTER CROSSED SHEI
+2CC5 ; [.245C.0020.0002] # COPTIC SMALL LETTER OLD COPTIC SHEI
+2CC4 ; [.245C.0020.0008] # COPTIC CAPITAL LETTER OLD COPTIC SHEI
+2CC7 ; [.245D.0020.0002] # COPTIC SMALL LETTER OLD COPTIC ESH
+2CC6 ; [.245D.0020.0008] # COPTIC CAPITAL LETTER OLD COPTIC ESH
+03E5 ; [.245E.0020.0002] # COPTIC SMALL LETTER FEI
+03E4 ; [.245E.0020.0008] # COPTIC CAPITAL LETTER FEI
+03E7 ; [.245F.0020.0002] # COPTIC SMALL LETTER KHEI
+03E6 ; [.245F.0020.0008] # COPTIC CAPITAL LETTER KHEI
+2CF3 ; [.2460.0020.0002] # COPTIC SMALL LETTER BOHAIRIC KHEI
+2CF2 ; [.2460.0020.0008] # COPTIC CAPITAL LETTER BOHAIRIC KHEI
+2CC9 ; [.2461.0020.0002] # COPTIC SMALL LETTER AKHMIMIC KHEI
+2CC8 ; [.2461.0020.0008] # COPTIC CAPITAL LETTER AKHMIMIC KHEI
+03E9 ; [.2462.0020.0002] # COPTIC SMALL LETTER HORI
+03E8 ; [.2462.0020.0008] # COPTIC CAPITAL LETTER HORI
+2CCB ; [.2463.0020.0002] # COPTIC SMALL LETTER DIALECT-P HORI
+2CCA ; [.2463.0020.0008] # COPTIC CAPITAL LETTER DIALECT-P HORI
+2CCD ; [.2464.0020.0002] # COPTIC SMALL LETTER OLD COPTIC HORI
+2CCC ; [.2464.0020.0008] # COPTIC CAPITAL LETTER OLD COPTIC HORI
+2CCF ; [.2465.0020.0002] # COPTIC SMALL LETTER OLD COPTIC HA
+2CCE ; [.2465.0020.0008] # COPTIC CAPITAL LETTER OLD COPTIC HA
+2CD1 ; [.2466.0020.0002] # COPTIC SMALL LETTER L-SHAPED HA
+2CD0 ; [.2466.0020.0008] # COPTIC CAPITAL LETTER L-SHAPED HA
+2CD3 ; [.2467.0020.0002] # COPTIC SMALL LETTER OLD COPTIC HEI
+2CD2 ; [.2467.0020.0008] # COPTIC CAPITAL LETTER OLD COPTIC HEI
+2CD5 ; [.2468.0020.0002] # COPTIC SMALL LETTER OLD COPTIC HAT
+2CD4 ; [.2468.0020.0008] # COPTIC CAPITAL LETTER OLD COPTIC HAT
+03EB ; [.2469.0020.0002] # COPTIC SMALL LETTER GANGIA
+03EA ; [.2469.0020.0008] # COPTIC CAPITAL LETTER GANGIA
+2CEE ; [.246A.0020.0002] # COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA
+2CED ; [.246A.0020.0008] # COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA
+2CD7 ; [.246B.0020.0002] # COPTIC SMALL LETTER OLD COPTIC GANGIA
+2CD6 ; [.246B.0020.0008] # COPTIC CAPITAL LETTER OLD COPTIC GANGIA
+03ED ; [.246C.0020.0002] # COPTIC SMALL LETTER SHIMA
+03EC ; [.246C.0020.0008] # COPTIC CAPITAL LETTER SHIMA
+2CD9 ; [.246D.0020.0002] # COPTIC SMALL LETTER OLD COPTIC DJA
+2CD8 ; [.246D.0020.0008] # COPTIC CAPITAL LETTER OLD COPTIC DJA
+2CDB ; [.246E.0020.0002] # COPTIC SMALL LETTER OLD COPTIC SHIMA
+2CDA ; [.246E.0020.0008] # COPTIC CAPITAL LETTER OLD COPTIC SHIMA
+2CDD ; [.246F.0020.0002] # COPTIC SMALL LETTER OLD NUBIAN SHIMA
+2CDC ; [.246F.0020.0008] # COPTIC CAPITAL LETTER OLD NUBIAN SHIMA
+03EF ; [.2470.0020.0002] # COPTIC SMALL LETTER DEI
+03EE ; [.2470.0020.0008] # COPTIC CAPITAL LETTER DEI
+2CB3 ; [.2471.0020.0002] # COPTIC SMALL LETTER DIALECT-P ALEF
+2CB2 ; [.2471.0020.0008] # COPTIC CAPITAL LETTER DIALECT-P ALEF
+2CB5 ; [.2472.0020.0002] # COPTIC SMALL LETTER OLD COPTIC AIN
+2CB4 ; [.2472.0020.0008] # COPTIC CAPITAL LETTER OLD COPTIC AIN
+2CDF ; [.2473.0020.0002] # COPTIC SMALL LETTER OLD NUBIAN NGI
+2CDE ; [.2473.0020.0008] # COPTIC CAPITAL LETTER OLD NUBIAN NGI
+2CE1 ; [.2474.0020.0002] # COPTIC SMALL LETTER OLD NUBIAN NYI
+2CE0 ; [.2474.0020.0008] # COPTIC CAPITAL LETTER OLD NUBIAN NYI
+2CE3 ; [.2475.0020.0002] # COPTIC SMALL LETTER OLD NUBIAN WAU
+2CE2 ; [.2475.0020.0008] # COPTIC CAPITAL LETTER OLD NUBIAN WAU
+0430 ; [.2476.0020.0002] # CYRILLIC SMALL LETTER A
+2DF6 ; [.2476.0020.0004] # COMBINING CYRILLIC LETTER A
+0410 ; [.2476.0020.0008] # CYRILLIC CAPITAL LETTER A
+04D1 ; [.2476.0020.0002][.0000.0026.0002] # CYRILLIC SMALL LETTER A WITH BREVE
+04D0 ; [.2476.0020.0008][.0000.0026.0002] # CYRILLIC CAPITAL LETTER A WITH BREVE
+04D3 ; [.2476.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER A WITH DIAERESIS
+04D2 ; [.2476.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER A WITH DIAERESIS
+04D9 ; [.247A.0020.0002] # CYRILLIC SMALL LETTER SCHWA
+04D8 ; [.247A.0020.0008] # CYRILLIC CAPITAL LETTER SCHWA
+04DB ; [.247A.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS
+04DA ; [.247A.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS
+04D5 ; [.247E.0020.0002] # CYRILLIC SMALL LIGATURE A IE
+04D4 ; [.247E.0020.0008] # CYRILLIC CAPITAL LIGATURE A IE
+0431 ; [.2482.0020.0002] # CYRILLIC SMALL LETTER BE
+2DE0 ; [.2482.0020.0004] # COMBINING CYRILLIC LETTER BE
+0411 ; [.2482.0020.0008] # CYRILLIC CAPITAL LETTER BE
+0432 ; [.2486.0020.0002] # CYRILLIC SMALL LETTER VE
+1C80 ; [.2486.0020.0004] # CYRILLIC SMALL LETTER ROUNDED VE
+2DE1 ; [.2486.0020.0004] # COMBINING CYRILLIC LETTER VE
+0412 ; [.2486.0020.0008] # CYRILLIC CAPITAL LETTER VE
+0433 ; [.248A.0020.0002] # CYRILLIC SMALL LETTER GHE
+2DE2 ; [.248A.0020.0004] # COMBINING CYRILLIC LETTER GHE
+0413 ; [.248A.0020.0008] # CYRILLIC CAPITAL LETTER GHE
+0453 ; [.248A.0020.0002][.0000.0024.0002] # CYRILLIC SMALL LETTER GJE
+0403 ; [.248A.0020.0008][.0000.0024.0002] # CYRILLIC CAPITAL LETTER GJE
+0491 ; [.248A.0020.0004][.0000.0119.0004] # CYRILLIC SMALL LETTER GHE WITH UPTURN
+0490 ; [.248A.0020.000A][.0000.0119.0004] # CYRILLIC CAPITAL LETTER GHE WITH UPTURN
+0493 ; [.248E.0020.0002] # CYRILLIC SMALL LETTER GHE WITH STROKE
+0492 ; [.248E.0020.0008] # CYRILLIC CAPITAL LETTER GHE WITH STROKE
+04FB ; [.2492.0020.0002] # CYRILLIC SMALL LETTER GHE WITH STROKE AND HOOK
+04FA ; [.2492.0020.0008] # CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK
+0495 ; [.2496.0020.0002] # CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK
+0494 ; [.2496.0020.0008] # CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK
+04F7 ; [.249A.0020.0002] # CYRILLIC SMALL LETTER GHE WITH DESCENDER
+04F6 ; [.249A.0020.0008] # CYRILLIC CAPITAL LETTER GHE WITH DESCENDER
+0434 ; [.249E.0020.0002] # CYRILLIC SMALL LETTER DE
+1C81 ; [.249E.0020.0004] # CYRILLIC SMALL LETTER LONG-LEGGED DE
+2DE3 ; [.249E.0020.0004] # COMBINING CYRILLIC LETTER DE
+0414 ; [.249E.0020.0008] # CYRILLIC CAPITAL LETTER DE
+0501 ; [.24A2.0020.0002] # CYRILLIC SMALL LETTER KOMI DE
+0500 ; [.24A2.0020.0008] # CYRILLIC CAPITAL LETTER KOMI DE
+A681 ; [.24A3.0020.0002] # CYRILLIC SMALL LETTER DWE
+A680 ; [.24A3.0020.0008] # CYRILLIC CAPITAL LETTER DWE
+0452 ; [.24A4.0020.0002] # CYRILLIC SMALL LETTER DJE
+0402 ; [.24A4.0020.0008] # CYRILLIC CAPITAL LETTER DJE
+A663 ; [.24A8.0020.0002] # CYRILLIC SMALL LETTER SOFT DE
+A662 ; [.24A8.0020.0008] # CYRILLIC CAPITAL LETTER SOFT DE
+0503 ; [.24A9.0020.0002] # CYRILLIC SMALL LETTER KOMI DJE
+0502 ; [.24A9.0020.0008] # CYRILLIC CAPITAL LETTER KOMI DJE
+0499 ; [.24AA.0020.0002] # CYRILLIC SMALL LETTER ZE WITH DESCENDER
+0498 ; [.24AA.0020.0008] # CYRILLIC CAPITAL LETTER ZE WITH DESCENDER
+0435 ; [.24AE.0020.0002] # CYRILLIC SMALL LETTER IE
+2DF7 ; [.24AE.0020.0004] # COMBINING CYRILLIC LETTER IE
+0415 ; [.24AE.0020.0008] # CYRILLIC CAPITAL LETTER IE
+0450 ; [.24AE.0020.0002][.0000.0025.0002] # CYRILLIC SMALL LETTER IE WITH GRAVE
+0400 ; [.24AE.0020.0008][.0000.0025.0002] # CYRILLIC CAPITAL LETTER IE WITH GRAVE
+04D7 ; [.24AE.0020.0002][.0000.0026.0002] # CYRILLIC SMALL LETTER IE WITH BREVE
+04D6 ; [.24AE.0020.0008][.0000.0026.0002] # CYRILLIC CAPITAL LETTER IE WITH BREVE
+0451 ; [.24AE.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER IO
+0401 ; [.24AE.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER IO
+0454 ; [.24B2.0020.0002] # CYRILLIC SMALL LETTER UKRAINIAN IE
+A674 ; [.24B2.0020.0004] # COMBINING CYRILLIC LETTER UKRAINIAN IE
+0404 ; [.24B2.0020.0008] # CYRILLIC CAPITAL LETTER UKRAINIAN IE
+0436 ; [.24B6.0020.0002] # CYRILLIC SMALL LETTER ZHE
+2DE4 ; [.24B6.0020.0004] # COMBINING CYRILLIC LETTER ZHE
+0416 ; [.24B6.0020.0008] # CYRILLIC CAPITAL LETTER ZHE
+04C2 ; [.24B6.0020.0002][.0000.0026.0002] # CYRILLIC SMALL LETTER ZHE WITH BREVE
+04C1 ; [.24B6.0020.0008][.0000.0026.0002] # CYRILLIC CAPITAL LETTER ZHE WITH BREVE
+04DD ; [.24B6.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER ZHE WITH DIAERESIS
+04DC ; [.24B6.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS
+052B ; [.24BA.0020.0002] # CYRILLIC SMALL LETTER DZZHE
+052A ; [.24BA.0020.0008] # CYRILLIC CAPITAL LETTER DZZHE
+A685 ; [.24BB.0020.0002] # CYRILLIC SMALL LETTER ZHWE
+A684 ; [.24BB.0020.0008] # CYRILLIC CAPITAL LETTER ZHWE
+0497 ; [.24BC.0020.0002] # CYRILLIC SMALL LETTER ZHE WITH DESCENDER
+0496 ; [.24BC.0020.0008] # CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER
+0437 ; [.24C0.0020.0002] # CYRILLIC SMALL LETTER ZE
+2DE5 ; [.24C0.0020.0004] # COMBINING CYRILLIC LETTER ZE
+0417 ; [.24C0.0020.0008] # CYRILLIC CAPITAL LETTER ZE
+04DF ; [.24C0.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER ZE WITH DIAERESIS
+04DE ; [.24C0.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS
+A641 ; [.24C4.0020.0002] # CYRILLIC SMALL LETTER ZEMLYA
+A640 ; [.24C4.0020.0008] # CYRILLIC CAPITAL LETTER ZEMLYA
+0505 ; [.24C5.0020.0002] # CYRILLIC SMALL LETTER KOMI ZJE
+0504 ; [.24C5.0020.0008] # CYRILLIC CAPITAL LETTER KOMI ZJE
+0511 ; [.24C6.0020.0002] # CYRILLIC SMALL LETTER REVERSED ZE
+0510 ; [.24C6.0020.0008] # CYRILLIC CAPITAL LETTER REVERSED ZE
+A643 ; [.24C7.0020.0002] # CYRILLIC SMALL LETTER DZELO
+A642 ; [.24C7.0020.0008] # CYRILLIC CAPITAL LETTER DZELO
+0455 ; [.24C8.0020.0002] # CYRILLIC SMALL LETTER DZE
+0405 ; [.24C8.0020.0008] # CYRILLIC CAPITAL LETTER DZE
+A645 ; [.24CC.0020.0002] # CYRILLIC SMALL LETTER REVERSED DZE
+A644 ; [.24CC.0020.0008] # CYRILLIC CAPITAL LETTER REVERSED DZE
+04E1 ; [.24CD.0020.0002] # CYRILLIC SMALL LETTER ABKHASIAN DZE
+04E0 ; [.24CD.0020.0008] # CYRILLIC CAPITAL LETTER ABKHASIAN DZE
+A689 ; [.24D1.0020.0002] # CYRILLIC SMALL LETTER DZZE
+A688 ; [.24D1.0020.0008] # CYRILLIC CAPITAL LETTER DZZE
+0507 ; [.24D2.0020.0002] # CYRILLIC SMALL LETTER KOMI DZJE
+0506 ; [.24D2.0020.0008] # CYRILLIC CAPITAL LETTER KOMI DZJE
+A683 ; [.24D3.0020.0002] # CYRILLIC SMALL LETTER DZWE
+A682 ; [.24D3.0020.0008] # CYRILLIC CAPITAL LETTER DZWE
+0438 ; [.24D4.0020.0002] # CYRILLIC SMALL LETTER I
+A675 ; [.24D4.0020.0004] # COMBINING CYRILLIC LETTER I
+0418 ; [.24D4.0020.0008] # CYRILLIC CAPITAL LETTER I
+045D ; [.24D4.0020.0002][.0000.0025.0002] # CYRILLIC SMALL LETTER I WITH GRAVE
+040D ; [.24D4.0020.0008][.0000.0025.0002] # CYRILLIC CAPITAL LETTER I WITH GRAVE
+04E5 ; [.24D4.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER I WITH DIAERESIS
+04E4 ; [.24D4.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER I WITH DIAERESIS
+04E3 ; [.24D4.0020.0002][.0000.0032.0002] # CYRILLIC SMALL LETTER I WITH MACRON
+04E2 ; [.24D4.0020.0008][.0000.0032.0002] # CYRILLIC CAPITAL LETTER I WITH MACRON
+048B ; [.24D8.0020.0002] # CYRILLIC SMALL LETTER SHORT I WITH TAIL
+048A ; [.24D8.0020.0008] # CYRILLIC CAPITAL LETTER SHORT I WITH TAIL
+0456 ; [.24DC.0020.0002] # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
+0406 ; [.24DC.0020.0008] # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+0457 ; [.24DC.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER YI
+A676 ; [.24DC.0020.0004][.0000.002B.0004] # COMBINING CYRILLIC LETTER YI
+0407 ; [.24DC.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER YI
+A647 ; [.24E0.0020.0002] # CYRILLIC SMALL LETTER IOTA
+A646 ; [.24E0.0020.0008] # CYRILLIC CAPITAL LETTER IOTA
+0439 ; [.24E1.0020.0002] # CYRILLIC SMALL LETTER SHORT I
+0438 0306 ; [.24E1.0020.0002] # CYRILLIC SMALL LETTER SHORT I
+0419 ; [.24E1.0020.0008] # CYRILLIC CAPITAL LETTER SHORT I
+0418 0306 ; [.24E1.0020.0008] # CYRILLIC CAPITAL LETTER SHORT I
+0458 ; [.24E5.0020.0002] # CYRILLIC SMALL LETTER JE
+0408 ; [.24E5.0020.0008] # CYRILLIC CAPITAL LETTER JE
+A649 ; [.24E9.0020.0002] # CYRILLIC SMALL LETTER DJERV
+2DF8 ; [.24E9.0020.0004] # COMBINING CYRILLIC LETTER DJERV
+A648 ; [.24E9.0020.0008] # CYRILLIC CAPITAL LETTER DJERV
+043A ; [.24EA.0020.0002] # CYRILLIC SMALL LETTER KA
+2DE6 ; [.24EA.0020.0004] # COMBINING CYRILLIC LETTER KA
+041A ; [.24EA.0020.0008] # CYRILLIC CAPITAL LETTER KA
+045C ; [.24EA.0020.0002][.0000.0024.0002] # CYRILLIC SMALL LETTER KJE
+040C ; [.24EA.0020.0008][.0000.0024.0002] # CYRILLIC CAPITAL LETTER KJE
+049B ; [.24EE.0020.0002] # CYRILLIC SMALL LETTER KA WITH DESCENDER
+049A ; [.24EE.0020.0008] # CYRILLIC CAPITAL LETTER KA WITH DESCENDER
+04C4 ; [.24F2.0020.0002] # CYRILLIC SMALL LETTER KA WITH HOOK
+04C3 ; [.24F2.0020.0008] # CYRILLIC CAPITAL LETTER KA WITH HOOK
+04A1 ; [.24F6.0020.0002] # CYRILLIC SMALL LETTER BASHKIR KA
+04A0 ; [.24F6.0020.0008] # CYRILLIC CAPITAL LETTER BASHKIR KA
+049F ; [.24FA.0020.0002] # CYRILLIC SMALL LETTER KA WITH STROKE
+049E ; [.24FA.0020.0008] # CYRILLIC CAPITAL LETTER KA WITH STROKE
+049D ; [.24FE.0020.0002] # CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE
+049C ; [.24FE.0020.0008] # CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE
+051F ; [.2502.0020.0002] # CYRILLIC SMALL LETTER ALEUT KA
+051E ; [.2502.0020.0008] # CYRILLIC CAPITAL LETTER ALEUT KA
+051B ; [.2503.0020.0002] # CYRILLIC SMALL LETTER QA
+051A ; [.2503.0020.0008] # CYRILLIC CAPITAL LETTER QA
+043B ; [.2504.0020.0002] # CYRILLIC SMALL LETTER EL
+2DE7 ; [.2504.0020.0004] # COMBINING CYRILLIC LETTER EL
+041B ; [.2504.0020.0008] # CYRILLIC CAPITAL LETTER EL
+1D2B ; [.2508.0020.0002] # CYRILLIC LETTER SMALL CAPITAL EL
+04C6 ; [.2509.0020.0002] # CYRILLIC SMALL LETTER EL WITH TAIL
+04C5 ; [.2509.0020.0008] # CYRILLIC CAPITAL LETTER EL WITH TAIL
+052F ; [.250D.0020.0002] # CYRILLIC SMALL LETTER EL WITH DESCENDER
+052E ; [.250D.0020.0008] # CYRILLIC CAPITAL LETTER EL WITH DESCENDER
+0513 ; [.250E.0020.0002] # CYRILLIC SMALL LETTER EL WITH HOOK
+0512 ; [.250E.0020.0008] # CYRILLIC CAPITAL LETTER EL WITH HOOK
+0521 ; [.250F.0020.0002] # CYRILLIC SMALL LETTER EL WITH MIDDLE HOOK
+0520 ; [.250F.0020.0008] # CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK
+0459 ; [.2510.0020.0002] # CYRILLIC SMALL LETTER LJE
+0409 ; [.2510.0020.0008] # CYRILLIC CAPITAL LETTER LJE
+A665 ; [.2514.0020.0002] # CYRILLIC SMALL LETTER SOFT EL
+A664 ; [.2514.0020.0008] # CYRILLIC CAPITAL LETTER SOFT EL
+0509 ; [.2515.0020.0002] # CYRILLIC SMALL LETTER KOMI LJE
+0508 ; [.2515.0020.0008] # CYRILLIC CAPITAL LETTER KOMI LJE
+0515 ; [.2516.0020.0002] # CYRILLIC SMALL LETTER LHA
+0514 ; [.2516.0020.0008] # CYRILLIC CAPITAL LETTER LHA
+043C ; [.2517.0020.0002] # CYRILLIC SMALL LETTER EM
+2DE8 ; [.2517.0020.0004] # COMBINING CYRILLIC LETTER EM
+041C ; [.2517.0020.0008] # CYRILLIC CAPITAL LETTER EM
+04CE ; [.251B.0020.0002] # CYRILLIC SMALL LETTER EM WITH TAIL
+04CD ; [.251B.0020.0008] # CYRILLIC CAPITAL LETTER EM WITH TAIL
+A667 ; [.251F.0020.0002] # CYRILLIC SMALL LETTER SOFT EM
+A666 ; [.251F.0020.0008] # CYRILLIC CAPITAL LETTER SOFT EM
+043D ; [.2520.0020.0002] # CYRILLIC SMALL LETTER EN
+2DE9 ; [.2520.0020.0004] # COMBINING CYRILLIC LETTER EN
+041D ; [.2520.0020.0008] # CYRILLIC CAPITAL LETTER EN
+1D78 ; [.2520.0020.0014] # MODIFIER LETTER CYRILLIC EN
+0529 ; [.2524.0020.0002] # CYRILLIC SMALL LETTER EN WITH LEFT HOOK
+0528 ; [.2524.0020.0008] # CYRILLIC CAPITAL LETTER EN WITH LEFT HOOK
+04CA ; [.2525.0020.0002] # CYRILLIC SMALL LETTER EN WITH TAIL
+04C9 ; [.2525.0020.0008] # CYRILLIC CAPITAL LETTER EN WITH TAIL
+04A3 ; [.2529.0020.0002] # CYRILLIC SMALL LETTER EN WITH DESCENDER
+04A2 ; [.2529.0020.0008] # CYRILLIC CAPITAL LETTER EN WITH DESCENDER
+04C8 ; [.252D.0020.0002] # CYRILLIC SMALL LETTER EN WITH HOOK
+04C7 ; [.252D.0020.0008] # CYRILLIC CAPITAL LETTER EN WITH HOOK
+0523 ; [.2531.0020.0002] # CYRILLIC SMALL LETTER EN WITH MIDDLE HOOK
+0522 ; [.2531.0020.0008] # CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK
+04A5 ; [.2532.0020.0002] # CYRILLIC SMALL LIGATURE EN GHE
+04A4 ; [.2532.0020.0008] # CYRILLIC CAPITAL LIGATURE EN GHE
+045A ; [.2536.0020.0002] # CYRILLIC SMALL LETTER NJE
+040A ; [.2536.0020.0008] # CYRILLIC CAPITAL LETTER NJE
+050B ; [.253A.0020.0002] # CYRILLIC SMALL LETTER KOMI NJE
+050A ; [.253A.0020.0008] # CYRILLIC CAPITAL LETTER KOMI NJE
+043E ; [.253B.0020.0002] # CYRILLIC SMALL LETTER O
+1C82 ; [.253B.0020.0004] # CYRILLIC SMALL LETTER NARROW O
+2DEA ; [.253B.0020.0004] # COMBINING CYRILLIC LETTER O
+A669 ; [.253B.0020.0004] # CYRILLIC SMALL LETTER MONOCULAR O
+A66B ; [.253B.0020.0004] # CYRILLIC SMALL LETTER BINOCULAR O
+A66D ; [.253B.0020.0004] # CYRILLIC SMALL LETTER DOUBLE MONOCULAR O
+A66E ; [.253B.0020.0004] # CYRILLIC LETTER MULTIOCULAR O
+A699 ; [.253B.0020.0004] # CYRILLIC SMALL LETTER DOUBLE O
+A69B ; [.253B.0020.0004] # CYRILLIC SMALL LETTER CROSSED O
+041E ; [.253B.0020.0008] # CYRILLIC CAPITAL LETTER O
+A668 ; [.253B.0020.000A] # CYRILLIC CAPITAL LETTER MONOCULAR O
+A66A ; [.253B.0020.000A] # CYRILLIC CAPITAL LETTER BINOCULAR O
+A66C ; [.253B.0020.000A] # CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O
+A698 ; [.253B.0020.000A] # CYRILLIC CAPITAL LETTER DOUBLE O
+A69A ; [.253B.0020.000A] # CYRILLIC CAPITAL LETTER CROSSED O
+04E7 ; [.253B.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER O WITH DIAERESIS
+04E6 ; [.253B.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER O WITH DIAERESIS
+04E9 ; [.253F.0020.0002] # CYRILLIC SMALL LETTER BARRED O
+04E8 ; [.253F.0020.0008] # CYRILLIC CAPITAL LETTER BARRED O
+04EB ; [.253F.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS
+04EA ; [.253F.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS
+043F ; [.2543.0020.0002] # CYRILLIC SMALL LETTER PE
+2DEB ; [.2543.0020.0004] # COMBINING CYRILLIC LETTER PE
+041F ; [.2543.0020.0008] # CYRILLIC CAPITAL LETTER PE
+0525 ; [.2547.0020.0002] # CYRILLIC SMALL LETTER PE WITH DESCENDER
+0524 ; [.2547.0020.0008] # CYRILLIC CAPITAL LETTER PE WITH DESCENDER
+04A7 ; [.2548.0020.0002] # CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK
+04A6 ; [.2548.0020.0008] # CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK
+0481 ; [.254C.0020.0002] # CYRILLIC SMALL LETTER KOPPA
+0480 ; [.254C.0020.0008] # CYRILLIC CAPITAL LETTER KOPPA
+0440 ; [.2550.0020.0002] # CYRILLIC SMALL LETTER ER
+2DEC ; [.2550.0020.0004] # COMBINING CYRILLIC LETTER ER
+0420 ; [.2550.0020.0008] # CYRILLIC CAPITAL LETTER ER
+048F ; [.2554.0020.0002] # CYRILLIC SMALL LETTER ER WITH TICK
+048E ; [.2554.0020.0008] # CYRILLIC CAPITAL LETTER ER WITH TICK
+0517 ; [.2558.0020.0002] # CYRILLIC SMALL LETTER RHA
+0516 ; [.2558.0020.0008] # CYRILLIC CAPITAL LETTER RHA
+0441 ; [.2559.0020.0002] # CYRILLIC SMALL LETTER ES
+1C83 ; [.2559.0020.0004] # CYRILLIC SMALL LETTER WIDE ES
+2DED ; [.2559.0020.0004] # COMBINING CYRILLIC LETTER ES
+0421 ; [.2559.0020.0008] # CYRILLIC CAPITAL LETTER ES
+2DF5 ; [.2559.0020.0004][.2562.0020.0004] # COMBINING CYRILLIC LETTER ES-TE
+050D ; [.255D.0020.0002] # CYRILLIC SMALL LETTER KOMI SJE
+050C ; [.255D.0020.0008] # CYRILLIC CAPITAL LETTER KOMI SJE
+04AB ; [.255E.0020.0002] # CYRILLIC SMALL LETTER ES WITH DESCENDER
+04AA ; [.255E.0020.0008] # CYRILLIC CAPITAL LETTER ES WITH DESCENDER
+0442 ; [.2562.0020.0002] # CYRILLIC SMALL LETTER TE
+1C84 ; [.2562.0020.0004] # CYRILLIC SMALL LETTER TALL TE
+1C85 ; [.2562.0020.0004] # CYRILLIC SMALL LETTER THREE-LEGGED TE
+2DEE ; [.2562.0020.0004] # COMBINING CYRILLIC LETTER TE
+0422 ; [.2562.0020.0008] # CYRILLIC CAPITAL LETTER TE
+A68D ; [.2566.0020.0002] # CYRILLIC SMALL LETTER TWE
+A68C ; [.2566.0020.0008] # CYRILLIC CAPITAL LETTER TWE
+050F ; [.2567.0020.0002] # CYRILLIC SMALL LETTER KOMI TJE
+050E ; [.2567.0020.0008] # CYRILLIC CAPITAL LETTER KOMI TJE
+04AD ; [.2568.0020.0002] # CYRILLIC SMALL LETTER TE WITH DESCENDER
+04AC ; [.2568.0020.0008] # CYRILLIC CAPITAL LETTER TE WITH DESCENDER
+A68B ; [.256C.0020.0002] # CYRILLIC SMALL LETTER TE WITH MIDDLE HOOK
+A68A ; [.256C.0020.0008] # CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK
+045B ; [.256D.0020.0002] # CYRILLIC SMALL LETTER TSHE
+040B ; [.256D.0020.0008] # CYRILLIC CAPITAL LETTER TSHE
+0443 ; [.2571.0020.0002] # CYRILLIC SMALL LETTER U
+A677 ; [.2571.0020.0004] # COMBINING CYRILLIC LETTER U
+0423 ; [.2571.0020.0008] # CYRILLIC CAPITAL LETTER U
+045E ; [.2571.0020.0002][.0000.0026.0002] # CYRILLIC SMALL LETTER SHORT U
+040E ; [.2571.0020.0008][.0000.0026.0002] # CYRILLIC CAPITAL LETTER SHORT U
+04F1 ; [.2571.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER U WITH DIAERESIS
+04F0 ; [.2571.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER U WITH DIAERESIS
+04F3 ; [.2571.0020.0002][.0000.002C.0002] # CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE
+04F2 ; [.2571.0020.0008][.0000.002C.0002] # CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE
+04EF ; [.2571.0020.0002][.0000.0032.0002] # CYRILLIC SMALL LETTER U WITH MACRON
+04EE ; [.2571.0020.0008][.0000.0032.0002] # CYRILLIC CAPITAL LETTER U WITH MACRON
+04AF ; [.2575.0020.0002] # CYRILLIC SMALL LETTER STRAIGHT U
+04AE ; [.2575.0020.0008] # CYRILLIC CAPITAL LETTER STRAIGHT U
+04B1 ; [.2579.0020.0002] # CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE
+04B0 ; [.2579.0020.0008] # CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE
+A64B ; [.257D.0020.0002] # CYRILLIC SMALL LETTER MONOGRAPH UK
+1C88 ; [.257D.0020.0004] # CYRILLIC SMALL LETTER UNBLENDED UK
+2DF9 ; [.257D.0020.0004] # COMBINING CYRILLIC LETTER MONOGRAPH UK
+A64A ; [.257D.0020.0008] # CYRILLIC CAPITAL LETTER MONOGRAPH UK
+0479 ; [.257E.0020.0002] # CYRILLIC SMALL LETTER UK
+0478 ; [.257E.0020.0008] # CYRILLIC CAPITAL LETTER UK
+0444 ; [.2582.0020.0002] # CYRILLIC SMALL LETTER EF
+A69E ; [.2582.0020.0004] # COMBINING CYRILLIC LETTER EF
+0424 ; [.2582.0020.0008] # CYRILLIC CAPITAL LETTER EF
+0445 ; [.2586.0020.0002] # CYRILLIC SMALL LETTER HA
+2DEF ; [.2586.0020.0004] # COMBINING CYRILLIC LETTER HA
+0425 ; [.2586.0020.0008] # CYRILLIC CAPITAL LETTER HA
+04FD ; [.258A.0020.0002] # CYRILLIC SMALL LETTER HA WITH HOOK
+04FC ; [.258A.0020.0008] # CYRILLIC CAPITAL LETTER HA WITH HOOK
+04FF ; [.258E.0020.0002] # CYRILLIC SMALL LETTER HA WITH STROKE
+04FE ; [.258E.0020.0008] # CYRILLIC CAPITAL LETTER HA WITH STROKE
+04B3 ; [.2592.0020.0002] # CYRILLIC SMALL LETTER HA WITH DESCENDER
+04B2 ; [.2592.0020.0008] # CYRILLIC CAPITAL LETTER HA WITH DESCENDER
+04BB ; [.2596.0020.0002] # CYRILLIC SMALL LETTER SHHA
+04BA ; [.2596.0020.0008] # CYRILLIC CAPITAL LETTER SHHA
+0527 ; [.259A.0020.0002] # CYRILLIC SMALL LETTER SHHA WITH DESCENDER
+0526 ; [.259A.0020.0008] # CYRILLIC CAPITAL LETTER SHHA WITH DESCENDER
+A695 ; [.259B.0020.0002] # CYRILLIC SMALL LETTER HWE
+A694 ; [.259B.0020.0008] # CYRILLIC CAPITAL LETTER HWE
+0461 ; [.259C.0020.0002] # CYRILLIC SMALL LETTER OMEGA
+A67B ; [.259C.0020.0004] # COMBINING CYRILLIC LETTER OMEGA
+0460 ; [.259C.0020.0008] # CYRILLIC CAPITAL LETTER OMEGA
+047F ; [.25A0.0020.0002] # CYRILLIC SMALL LETTER OT
+047E ; [.25A0.0020.0008] # CYRILLIC CAPITAL LETTER OT
+A64D ; [.25A4.0020.0002] # CYRILLIC SMALL LETTER BROAD OMEGA
+A64C ; [.25A4.0020.0008] # CYRILLIC CAPITAL LETTER BROAD OMEGA
+047D ; [.25A5.0020.0002] # CYRILLIC SMALL LETTER OMEGA WITH TITLO
+047C ; [.25A5.0020.0008] # CYRILLIC CAPITAL LETTER OMEGA WITH TITLO
+047B ; [.25A9.0020.0002] # CYRILLIC SMALL LETTER ROUND OMEGA
+047A ; [.25A9.0020.0008] # CYRILLIC CAPITAL LETTER ROUND OMEGA
+0446 ; [.25AD.0020.0002] # CYRILLIC SMALL LETTER TSE
+2DF0 ; [.25AD.0020.0004] # COMBINING CYRILLIC LETTER TSE
+0426 ; [.25AD.0020.0008] # CYRILLIC CAPITAL LETTER TSE
+A661 ; [.25B1.0020.0002] # CYRILLIC SMALL LETTER REVERSED TSE
+A660 ; [.25B1.0020.0008] # CYRILLIC CAPITAL LETTER REVERSED TSE
+A68F ; [.25B2.0020.0002] # CYRILLIC SMALL LETTER TSWE
+A68E ; [.25B2.0020.0008] # CYRILLIC CAPITAL LETTER TSWE
+04B5 ; [.25B3.0020.0002] # CYRILLIC SMALL LIGATURE TE TSE
+04B4 ; [.25B3.0020.0008] # CYRILLIC CAPITAL LIGATURE TE TSE
+A691 ; [.25B7.0020.0002] # CYRILLIC SMALL LETTER TSSE
+A690 ; [.25B7.0020.0008] # CYRILLIC CAPITAL LETTER TSSE
+0447 ; [.25B8.0020.0002] # CYRILLIC SMALL LETTER CHE
+2DF1 ; [.25B8.0020.0004] # COMBINING CYRILLIC LETTER CHE
+0427 ; [.25B8.0020.0008] # CYRILLIC CAPITAL LETTER CHE
+04F5 ; [.25B8.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER CHE WITH DIAERESIS
+04F4 ; [.25B8.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS
+052D ; [.25BC.0020.0002] # CYRILLIC SMALL LETTER DCHE
+052C ; [.25BC.0020.0008] # CYRILLIC CAPITAL LETTER DCHE
+A693 ; [.25BD.0020.0002] # CYRILLIC SMALL LETTER TCHE
+A692 ; [.25BD.0020.0008] # CYRILLIC CAPITAL LETTER TCHE
+04B7 ; [.25BE.0020.0002] # CYRILLIC SMALL LETTER CHE WITH DESCENDER
+04B6 ; [.25BE.0020.0008] # CYRILLIC CAPITAL LETTER CHE WITH DESCENDER
+04CC ; [.25C2.0020.0002] # CYRILLIC SMALL LETTER KHAKASSIAN CHE
+04CB ; [.25C2.0020.0008] # CYRILLIC CAPITAL LETTER KHAKASSIAN CHE
+04B9 ; [.25C6.0020.0002] # CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE
+04B8 ; [.25C6.0020.0008] # CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE
+A687 ; [.25CA.0020.0002] # CYRILLIC SMALL LETTER CCHE
+A686 ; [.25CA.0020.0008] # CYRILLIC CAPITAL LETTER CCHE
+04BD ; [.25CB.0020.0002] # CYRILLIC SMALL LETTER ABKHASIAN CHE
+04BC ; [.25CB.0020.0008] # CYRILLIC CAPITAL LETTER ABKHASIAN CHE
+04BF ; [.25CF.0020.0002] # CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER
+04BE ; [.25CF.0020.0008] # CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER
+045F ; [.25D3.0020.0002] # CYRILLIC SMALL LETTER DZHE
+040F ; [.25D3.0020.0008] # CYRILLIC CAPITAL LETTER DZHE
+0448 ; [.25D7.0020.0002] # CYRILLIC SMALL LETTER SHA
+2DF2 ; [.25D7.0020.0004] # COMBINING CYRILLIC LETTER SHA
+0428 ; [.25D7.0020.0008] # CYRILLIC CAPITAL LETTER SHA
+A697 ; [.25DB.0020.0002] # CYRILLIC SMALL LETTER SHWE
+A696 ; [.25DB.0020.0008] # CYRILLIC CAPITAL LETTER SHWE
+0449 ; [.25DC.0020.0002] # CYRILLIC SMALL LETTER SHCHA
+2DF3 ; [.25DC.0020.0004] # COMBINING CYRILLIC LETTER SHCHA
+0429 ; [.25DC.0020.0008] # CYRILLIC CAPITAL LETTER SHCHA
+A64F ; [.25E0.0020.0002] # CYRILLIC SMALL LETTER NEUTRAL YER
+A64E ; [.25E0.0020.0008] # CYRILLIC CAPITAL LETTER NEUTRAL YER
+2E2F ; [.25E1.0020.0002] # VERTICAL TILDE
+A67F ; [.25E2.0020.0002] # CYRILLIC PAYEROK
+044A ; [.25E3.0020.0002] # CYRILLIC SMALL LETTER HARD SIGN
+1C86 ; [.25E3.0020.0004] # CYRILLIC SMALL LETTER TALL HARD SIGN
+A678 ; [.25E3.0020.0004] # COMBINING CYRILLIC LETTER HARD SIGN
+042A ; [.25E3.0020.0008] # CYRILLIC CAPITAL LETTER HARD SIGN
+A69C ; [.25E3.0020.0014] # MODIFIER LETTER CYRILLIC HARD SIGN
+A651 ; [.25E7.0020.0002] # CYRILLIC SMALL LETTER YERU WITH BACK YER
+A650 ; [.25E7.0020.0008] # CYRILLIC CAPITAL LETTER YERU WITH BACK YER
+044B ; [.25E8.0020.0002] # CYRILLIC SMALL LETTER YERU
+A679 ; [.25E8.0020.0004] # COMBINING CYRILLIC LETTER YERU
+042B ; [.25E8.0020.0008] # CYRILLIC CAPITAL LETTER YERU
+04F9 ; [.25E8.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER YERU WITH DIAERESIS
+04F8 ; [.25E8.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS
+044C ; [.25EC.0020.0002] # CYRILLIC SMALL LETTER SOFT SIGN
+A67A ; [.25EC.0020.0004] # COMBINING CYRILLIC LETTER SOFT SIGN
+042C ; [.25EC.0020.0008] # CYRILLIC CAPITAL LETTER SOFT SIGN
+A69D ; [.25EC.0020.0014] # MODIFIER LETTER CYRILLIC SOFT SIGN
+048D ; [.25F0.0020.0002] # CYRILLIC SMALL LETTER SEMISOFT SIGN
+048C ; [.25F0.0020.0008] # CYRILLIC CAPITAL LETTER SEMISOFT SIGN
+0463 ; [.25F4.0020.0002] # CYRILLIC SMALL LETTER YAT
+1C87 ; [.25F4.0020.0004] # CYRILLIC SMALL LETTER TALL YAT
+2DFA ; [.25F4.0020.0004] # COMBINING CYRILLIC LETTER YAT
+0462 ; [.25F4.0020.0008] # CYRILLIC CAPITAL LETTER YAT
+A653 ; [.25F8.0020.0002] # CYRILLIC SMALL LETTER IOTIFIED YAT
+A652 ; [.25F8.0020.0008] # CYRILLIC CAPITAL LETTER IOTIFIED YAT
+044D ; [.25F9.0020.0002] # CYRILLIC SMALL LETTER E
+042D ; [.25F9.0020.0008] # CYRILLIC CAPITAL LETTER E
+04ED ; [.25F9.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER E WITH DIAERESIS
+04EC ; [.25F9.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER E WITH DIAERESIS
+044E ; [.25FD.0020.0002] # CYRILLIC SMALL LETTER YU
+2DFB ; [.25FD.0020.0004] # COMBINING CYRILLIC LETTER YU
+042E ; [.25FD.0020.0008] # CYRILLIC CAPITAL LETTER YU
+A655 ; [.2601.0020.0002] # CYRILLIC SMALL LETTER REVERSED YU
+A654 ; [.2601.0020.0008] # CYRILLIC CAPITAL LETTER REVERSED YU
+A657 ; [.2602.0020.0002] # CYRILLIC SMALL LETTER IOTIFIED A
+2DFC ; [.2602.0020.0004] # COMBINING CYRILLIC LETTER IOTIFIED A
+A656 ; [.2602.0020.0008] # CYRILLIC CAPITAL LETTER IOTIFIED A
+044F ; [.2603.0020.0002] # CYRILLIC SMALL LETTER YA
+042F ; [.2603.0020.0008] # CYRILLIC CAPITAL LETTER YA
+0519 ; [.2607.0020.0002] # CYRILLIC SMALL LETTER YAE
+0518 ; [.2607.0020.0008] # CYRILLIC CAPITAL LETTER YAE
+0465 ; [.2608.0020.0002] # CYRILLIC SMALL LETTER IOTIFIED E
+A69F ; [.2608.0020.0004] # COMBINING CYRILLIC LETTER IOTIFIED E
+0464 ; [.2608.0020.0008] # CYRILLIC CAPITAL LETTER IOTIFIED E
+0467 ; [.260C.0020.0002] # CYRILLIC SMALL LETTER LITTLE YUS
+2DFD ; [.260C.0020.0004] # COMBINING CYRILLIC LETTER LITTLE YUS
+0466 ; [.260C.0020.0008] # CYRILLIC CAPITAL LETTER LITTLE YUS
+A659 ; [.2610.0020.0002] # CYRILLIC SMALL LETTER CLOSED LITTLE YUS
+A658 ; [.2610.0020.0008] # CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS
+046B ; [.2611.0020.0002] # CYRILLIC SMALL LETTER BIG YUS
+2DFE ; [.2611.0020.0004] # COMBINING CYRILLIC LETTER BIG YUS
+046A ; [.2611.0020.0008] # CYRILLIC CAPITAL LETTER BIG YUS
+A65B ; [.2615.0020.0002] # CYRILLIC SMALL LETTER BLENDED YUS
+A65A ; [.2615.0020.0008] # CYRILLIC CAPITAL LETTER BLENDED YUS
+0469 ; [.2616.0020.0002] # CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS
+0468 ; [.2616.0020.0008] # CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS
+A65D ; [.261A.0020.0002] # CYRILLIC SMALL LETTER IOTIFIED CLOSED LITTLE YUS
+A65C ; [.261A.0020.0008] # CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS
+046D ; [.261B.0020.0002] # CYRILLIC SMALL LETTER IOTIFIED BIG YUS
+2DFF ; [.261B.0020.0004] # COMBINING CYRILLIC LETTER IOTIFIED BIG YUS
+046C ; [.261B.0020.0008] # CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS
+046F ; [.261F.0020.0002] # CYRILLIC SMALL LETTER KSI
+046E ; [.261F.0020.0008] # CYRILLIC CAPITAL LETTER KSI
+0471 ; [.2623.0020.0002] # CYRILLIC SMALL LETTER PSI
+0470 ; [.2623.0020.0008] # CYRILLIC CAPITAL LETTER PSI
+0473 ; [.2627.0020.0002] # CYRILLIC SMALL LETTER FITA
+2DF4 ; [.2627.0020.0004] # COMBINING CYRILLIC LETTER FITA
+0472 ; [.2627.0020.0008] # CYRILLIC CAPITAL LETTER FITA
+0475 ; [.262B.0020.0002] # CYRILLIC SMALL LETTER IZHITSA
+0474 ; [.262B.0020.0008] # CYRILLIC CAPITAL LETTER IZHITSA
+0477 ; [.262B.0020.0002][.0000.003C.0002] # CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+0476 ; [.262B.0020.0008][.0000.003C.0002] # CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+A65F ; [.262F.0020.0002] # CYRILLIC SMALL LETTER YN
+A65E ; [.262F.0020.0008] # CYRILLIC CAPITAL LETTER YN
+04A9 ; [.2630.0020.0002] # CYRILLIC SMALL LETTER ABKHASIAN HA
+04A8 ; [.2630.0020.0008] # CYRILLIC CAPITAL LETTER ABKHASIAN HA
+051D ; [.2634.0020.0002] # CYRILLIC SMALL LETTER WE
+051C ; [.2634.0020.0008] # CYRILLIC CAPITAL LETTER WE
+04CF ; [.2635.0020.0002] # CYRILLIC SMALL LETTER PALOCHKA
+04C0 ; [.2635.0020.0008] # CYRILLIC LETTER PALOCHKA
+2C30 ; [.2639.0020.0002] # GLAGOLITIC SMALL LETTER AZU
+1E000 ; [.2639.0020.0004] # COMBINING GLAGOLITIC LETTER AZU
+2C00 ; [.2639.0020.0008] # GLAGOLITIC CAPITAL LETTER AZU
+2C31 ; [.263A.0020.0002] # GLAGOLITIC SMALL LETTER BUKY
+1E001 ; [.263A.0020.0004] # COMBINING GLAGOLITIC LETTER BUKY
+2C01 ; [.263A.0020.0008] # GLAGOLITIC CAPITAL LETTER BUKY
+2C32 ; [.263B.0020.0002] # GLAGOLITIC SMALL LETTER VEDE
+1E002 ; [.263B.0020.0004] # COMBINING GLAGOLITIC LETTER VEDE
+2C02 ; [.263B.0020.0008] # GLAGOLITIC CAPITAL LETTER VEDE
+2C33 ; [.263C.0020.0002] # GLAGOLITIC SMALL LETTER GLAGOLI
+1E003 ; [.263C.0020.0004] # COMBINING GLAGOLITIC LETTER GLAGOLI
+2C03 ; [.263C.0020.0008] # GLAGOLITIC CAPITAL LETTER GLAGOLI
+2C34 ; [.263D.0020.0002] # GLAGOLITIC SMALL LETTER DOBRO
+1E004 ; [.263D.0020.0004] # COMBINING GLAGOLITIC LETTER DOBRO
+2C04 ; [.263D.0020.0008] # GLAGOLITIC CAPITAL LETTER DOBRO
+2C35 ; [.263E.0020.0002] # GLAGOLITIC SMALL LETTER YESTU
+1E005 ; [.263E.0020.0004] # COMBINING GLAGOLITIC LETTER YESTU
+2C05 ; [.263E.0020.0008] # GLAGOLITIC CAPITAL LETTER YESTU
+2C36 ; [.263F.0020.0002] # GLAGOLITIC SMALL LETTER ZHIVETE
+1E006 ; [.263F.0020.0004] # COMBINING GLAGOLITIC LETTER ZHIVETE
+2C06 ; [.263F.0020.0008] # GLAGOLITIC CAPITAL LETTER ZHIVETE
+2C37 ; [.2640.0020.0002] # GLAGOLITIC SMALL LETTER DZELO
+2C07 ; [.2640.0020.0008] # GLAGOLITIC CAPITAL LETTER DZELO
+2C38 ; [.2641.0020.0002] # GLAGOLITIC SMALL LETTER ZEMLJA
+1E008 ; [.2641.0020.0004] # COMBINING GLAGOLITIC LETTER ZEMLJA
+2C08 ; [.2641.0020.0008] # GLAGOLITIC CAPITAL LETTER ZEMLJA
+2C39 ; [.2642.0020.0002] # GLAGOLITIC SMALL LETTER IZHE
+1E009 ; [.2642.0020.0004] # COMBINING GLAGOLITIC LETTER IZHE
+2C09 ; [.2642.0020.0008] # GLAGOLITIC CAPITAL LETTER IZHE
+2C3A ; [.2643.0020.0002] # GLAGOLITIC SMALL LETTER INITIAL IZHE
+1E00A ; [.2643.0020.0004] # COMBINING GLAGOLITIC LETTER INITIAL IZHE
+2C0A ; [.2643.0020.0008] # GLAGOLITIC CAPITAL LETTER INITIAL IZHE
+2C3B ; [.2644.0020.0002] # GLAGOLITIC SMALL LETTER I
+1E00B ; [.2644.0020.0004] # COMBINING GLAGOLITIC LETTER I
+2C0B ; [.2644.0020.0008] # GLAGOLITIC CAPITAL LETTER I
+2C3C ; [.2645.0020.0002] # GLAGOLITIC SMALL LETTER DJERVI
+1E00C ; [.2645.0020.0004] # COMBINING GLAGOLITIC LETTER DJERVI
+2C0C ; [.2645.0020.0008] # GLAGOLITIC CAPITAL LETTER DJERVI
+2C3D ; [.2646.0020.0002] # GLAGOLITIC SMALL LETTER KAKO
+1E00D ; [.2646.0020.0004] # COMBINING GLAGOLITIC LETTER KAKO
+2C0D ; [.2646.0020.0008] # GLAGOLITIC CAPITAL LETTER KAKO
+2C3E ; [.2647.0020.0002] # GLAGOLITIC SMALL LETTER LJUDIJE
+1E00E ; [.2647.0020.0004] # COMBINING GLAGOLITIC LETTER LJUDIJE
+2C0E ; [.2647.0020.0008] # GLAGOLITIC CAPITAL LETTER LJUDIJE
+2C3F ; [.2648.0020.0002] # GLAGOLITIC SMALL LETTER MYSLITE
+1E00F ; [.2648.0020.0004] # COMBINING GLAGOLITIC LETTER MYSLITE
+2C0F ; [.2648.0020.0008] # GLAGOLITIC CAPITAL LETTER MYSLITE
+2C40 ; [.2649.0020.0002] # GLAGOLITIC SMALL LETTER NASHI
+1E010 ; [.2649.0020.0004] # COMBINING GLAGOLITIC LETTER NASHI
+2C10 ; [.2649.0020.0008] # GLAGOLITIC CAPITAL LETTER NASHI
+2C41 ; [.264A.0020.0002] # GLAGOLITIC SMALL LETTER ONU
+1E011 ; [.264A.0020.0004] # COMBINING GLAGOLITIC LETTER ONU
+2C11 ; [.264A.0020.0008] # GLAGOLITIC CAPITAL LETTER ONU
+2C42 ; [.264B.0020.0002] # GLAGOLITIC SMALL LETTER POKOJI
+1E012 ; [.264B.0020.0004] # COMBINING GLAGOLITIC LETTER POKOJI
+2C12 ; [.264B.0020.0008] # GLAGOLITIC CAPITAL LETTER POKOJI
+2C43 ; [.264C.0020.0002] # GLAGOLITIC SMALL LETTER RITSI
+1E013 ; [.264C.0020.0004] # COMBINING GLAGOLITIC LETTER RITSI
+2C13 ; [.264C.0020.0008] # GLAGOLITIC CAPITAL LETTER RITSI
+2C44 ; [.264D.0020.0002] # GLAGOLITIC SMALL LETTER SLOVO
+1E014 ; [.264D.0020.0004] # COMBINING GLAGOLITIC LETTER SLOVO
+2C14 ; [.264D.0020.0008] # GLAGOLITIC CAPITAL LETTER SLOVO
+2C45 ; [.264E.0020.0002] # GLAGOLITIC SMALL LETTER TVRIDO
+1E015 ; [.264E.0020.0004] # COMBINING GLAGOLITIC LETTER TVRIDO
+2C15 ; [.264E.0020.0008] # GLAGOLITIC CAPITAL LETTER TVRIDO
+2C46 ; [.264F.0020.0002] # GLAGOLITIC SMALL LETTER UKU
+1E016 ; [.264F.0020.0004] # COMBINING GLAGOLITIC LETTER UKU
+2C16 ; [.264F.0020.0008] # GLAGOLITIC CAPITAL LETTER UKU
+2C47 ; [.2650.0020.0002] # GLAGOLITIC SMALL LETTER FRITU
+1E017 ; [.2650.0020.0004] # COMBINING GLAGOLITIC LETTER FRITU
+2C17 ; [.2650.0020.0008] # GLAGOLITIC CAPITAL LETTER FRITU
+2C48 ; [.2651.0020.0002] # GLAGOLITIC SMALL LETTER HERU
+1E018 ; [.2651.0020.0004] # COMBINING GLAGOLITIC LETTER HERU
+2C18 ; [.2651.0020.0008] # GLAGOLITIC CAPITAL LETTER HERU
+2C49 ; [.2652.0020.0002] # GLAGOLITIC SMALL LETTER OTU
+2C19 ; [.2652.0020.0008] # GLAGOLITIC CAPITAL LETTER OTU
+2C4A ; [.2653.0020.0002] # GLAGOLITIC SMALL LETTER PE
+2C1A ; [.2653.0020.0008] # GLAGOLITIC CAPITAL LETTER PE
+2C4B ; [.2654.0020.0002] # GLAGOLITIC SMALL LETTER SHTA
+1E01B ; [.2654.0020.0004] # COMBINING GLAGOLITIC LETTER SHTA
+2C1B ; [.2654.0020.0008] # GLAGOLITIC CAPITAL LETTER SHTA
+2C4C ; [.2655.0020.0002] # GLAGOLITIC SMALL LETTER TSI
+1E01C ; [.2655.0020.0004] # COMBINING GLAGOLITIC LETTER TSI
+2C1C ; [.2655.0020.0008] # GLAGOLITIC CAPITAL LETTER TSI
+2C4D ; [.2656.0020.0002] # GLAGOLITIC SMALL LETTER CHRIVI
+1E01D ; [.2656.0020.0004] # COMBINING GLAGOLITIC LETTER CHRIVI
+2C1D ; [.2656.0020.0008] # GLAGOLITIC CAPITAL LETTER CHRIVI
+2C4E ; [.2657.0020.0002] # GLAGOLITIC SMALL LETTER SHA
+1E01E ; [.2657.0020.0004] # COMBINING GLAGOLITIC LETTER SHA
+2C1E ; [.2657.0020.0008] # GLAGOLITIC CAPITAL LETTER SHA
+2C4F ; [.2658.0020.0002] # GLAGOLITIC SMALL LETTER YERU
+1E01F ; [.2658.0020.0004] # COMBINING GLAGOLITIC LETTER YERU
+2C1F ; [.2658.0020.0008] # GLAGOLITIC CAPITAL LETTER YERU
+2C50 ; [.2659.0020.0002] # GLAGOLITIC SMALL LETTER YERI
+1E020 ; [.2659.0020.0004] # COMBINING GLAGOLITIC LETTER YERI
+2C20 ; [.2659.0020.0008] # GLAGOLITIC CAPITAL LETTER YERI
+2C51 ; [.265A.0020.0002] # GLAGOLITIC SMALL LETTER YATI
+1E021 ; [.265A.0020.0004] # COMBINING GLAGOLITIC LETTER YATI
+2C21 ; [.265A.0020.0008] # GLAGOLITIC CAPITAL LETTER YATI
+2C52 ; [.265B.0020.0002] # GLAGOLITIC SMALL LETTER SPIDERY HA
+2C22 ; [.265B.0020.0008] # GLAGOLITIC CAPITAL LETTER SPIDERY HA
+2C53 ; [.265C.0020.0002] # GLAGOLITIC SMALL LETTER YU
+1E023 ; [.265C.0020.0004] # COMBINING GLAGOLITIC LETTER YU
+2C23 ; [.265C.0020.0008] # GLAGOLITIC CAPITAL LETTER YU
+2C54 ; [.265D.0020.0002] # GLAGOLITIC SMALL LETTER SMALL YUS
+1E024 ; [.265D.0020.0004] # COMBINING GLAGOLITIC LETTER SMALL YUS
+2C24 ; [.265D.0020.0008] # GLAGOLITIC CAPITAL LETTER SMALL YUS
+2C55 ; [.265E.0020.0002] # GLAGOLITIC SMALL LETTER SMALL YUS WITH TAIL
+2C25 ; [.265E.0020.0008] # GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL
+2C56 ; [.265F.0020.0002] # GLAGOLITIC SMALL LETTER YO
+1E026 ; [.265F.0020.0004] # COMBINING GLAGOLITIC LETTER YO
+2C26 ; [.265F.0020.0008] # GLAGOLITIC CAPITAL LETTER YO
+2C57 ; [.2660.0020.0002] # GLAGOLITIC SMALL LETTER IOTATED SMALL YUS
+1E027 ; [.2660.0020.0004] # COMBINING GLAGOLITIC LETTER IOTATED SMALL YUS
+2C27 ; [.2660.0020.0008] # GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS
+2C58 ; [.2661.0020.0002] # GLAGOLITIC SMALL LETTER BIG YUS
+1E028 ; [.2661.0020.0004] # COMBINING GLAGOLITIC LETTER BIG YUS
+2C28 ; [.2661.0020.0008] # GLAGOLITIC CAPITAL LETTER BIG YUS
+2C59 ; [.2662.0020.0002] # GLAGOLITIC SMALL LETTER IOTATED BIG YUS
+1E029 ; [.2662.0020.0004] # COMBINING GLAGOLITIC LETTER IOTATED BIG YUS
+2C29 ; [.2662.0020.0008] # GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS
+2C5A ; [.2663.0020.0002] # GLAGOLITIC SMALL LETTER FITA
+1E02A ; [.2663.0020.0004] # COMBINING GLAGOLITIC LETTER FITA
+2C2A ; [.2663.0020.0008] # GLAGOLITIC CAPITAL LETTER FITA
+2C5B ; [.2664.0020.0002] # GLAGOLITIC SMALL LETTER IZHITSA
+2C2B ; [.2664.0020.0008] # GLAGOLITIC CAPITAL LETTER IZHITSA
+2C5C ; [.2665.0020.0002] # GLAGOLITIC SMALL LETTER SHTAPIC
+2C2C ; [.2665.0020.0008] # GLAGOLITIC CAPITAL LETTER SHTAPIC
+2C5D ; [.2666.0020.0002] # GLAGOLITIC SMALL LETTER TROKUTASTI A
+2C2D ; [.2666.0020.0008] # GLAGOLITIC CAPITAL LETTER TROKUTASTI A
+2C5E ; [.2667.0020.0002] # GLAGOLITIC SMALL LETTER LATINATE MYSLITE
+2C2E ; [.2667.0020.0008] # GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE
+2C5F ; [.2668.0020.0002] # GLAGOLITIC SMALL LETTER CAUDATE CHRIVI
+2C2F ; [.2668.0020.0008] # GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI
+10350 ; [.2669.0020.0002] # OLD PERMIC LETTER AN
+10376 ; [.2669.0020.0004] # COMBINING OLD PERMIC LETTER AN
+10351 ; [.266A.0020.0002] # OLD PERMIC LETTER BUR
+10352 ; [.266B.0020.0002] # OLD PERMIC LETTER GAI
+10353 ; [.266C.0020.0002] # OLD PERMIC LETTER DOI
+10377 ; [.266C.0020.0004] # COMBINING OLD PERMIC LETTER DOI
+10354 ; [.266D.0020.0002] # OLD PERMIC LETTER E
+10355 ; [.266E.0020.0002] # OLD PERMIC LETTER ZHOI
+10356 ; [.266F.0020.0002] # OLD PERMIC LETTER DZHOI
+10357 ; [.2670.0020.0002] # OLD PERMIC LETTER ZATA
+10378 ; [.2670.0020.0004] # COMBINING OLD PERMIC LETTER ZATA
+10358 ; [.2671.0020.0002] # OLD PERMIC LETTER DZITA
+10359 ; [.2672.0020.0002] # OLD PERMIC LETTER I
+1035A ; [.2673.0020.0002] # OLD PERMIC LETTER KOKE
+1035B ; [.2674.0020.0002] # OLD PERMIC LETTER LEI
+1035C ; [.2675.0020.0002] # OLD PERMIC LETTER MENOE
+1035D ; [.2676.0020.0002] # OLD PERMIC LETTER NENOE
+10379 ; [.2676.0020.0004] # COMBINING OLD PERMIC LETTER NENOE
+1035E ; [.2677.0020.0002] # OLD PERMIC LETTER VOOI
+1035F ; [.2678.0020.0002] # OLD PERMIC LETTER PEEI
+10360 ; [.2679.0020.0002] # OLD PERMIC LETTER REI
+10361 ; [.267A.0020.0002] # OLD PERMIC LETTER SII
+1037A ; [.267A.0020.0004] # COMBINING OLD PERMIC LETTER SII
+10362 ; [.267B.0020.0002] # OLD PERMIC LETTER TAI
+10363 ; [.267C.0020.0002] # OLD PERMIC LETTER U
+10364 ; [.267D.0020.0002] # OLD PERMIC LETTER CHERY
+10365 ; [.267E.0020.0002] # OLD PERMIC LETTER SHOOI
+10366 ; [.267F.0020.0002] # OLD PERMIC LETTER SHCHOOI
+10367 ; [.2680.0020.0002] # OLD PERMIC LETTER YRY
+10368 ; [.2681.0020.0002] # OLD PERMIC LETTER YERU
+10369 ; [.2682.0020.0002] # OLD PERMIC LETTER O
+1036A ; [.2683.0020.0002] # OLD PERMIC LETTER OO
+1036B ; [.2684.0020.0002] # OLD PERMIC LETTER EF
+1036C ; [.2685.0020.0002] # OLD PERMIC LETTER HA
+1036D ; [.2686.0020.0002] # OLD PERMIC LETTER TSIU
+1036E ; [.2687.0020.0002] # OLD PERMIC LETTER VER
+1036F ; [.2688.0020.0002] # OLD PERMIC LETTER YER
+10370 ; [.2689.0020.0002] # OLD PERMIC LETTER YERI
+10371 ; [.268A.0020.0002] # OLD PERMIC LETTER YAT
+10372 ; [.268B.0020.0002] # OLD PERMIC LETTER IE
+10373 ; [.268C.0020.0002] # OLD PERMIC LETTER YU
+10374 ; [.268D.0020.0002] # OLD PERMIC LETTER YA
+10375 ; [.268E.0020.0002] # OLD PERMIC LETTER IA
+10D0 ; [.268F.0020.0002] # GEORGIAN LETTER AN
+1C90 ; [.268F.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER AN
+2D00 ; [.2690.0020.0002] # GEORGIAN SMALL LETTER AN
+10A0 ; [.2690.0020.0008] # GEORGIAN CAPITAL LETTER AN
+10D1 ; [.2691.0020.0002] # GEORGIAN LETTER BAN
+1C91 ; [.2691.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER BAN
+2D01 ; [.2692.0020.0002] # GEORGIAN SMALL LETTER BAN
+10A1 ; [.2692.0020.0008] # GEORGIAN CAPITAL LETTER BAN
+10D2 ; [.2693.0020.0002] # GEORGIAN LETTER GAN
+1C92 ; [.2693.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER GAN
+2D02 ; [.2694.0020.0002] # GEORGIAN SMALL LETTER GAN
+10A2 ; [.2694.0020.0008] # GEORGIAN CAPITAL LETTER GAN
+10D3 ; [.2695.0020.0002] # GEORGIAN LETTER DON
+1C93 ; [.2695.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER DON
+2D03 ; [.2696.0020.0002] # GEORGIAN SMALL LETTER DON
+10A3 ; [.2696.0020.0008] # GEORGIAN CAPITAL LETTER DON
+10D4 ; [.2697.0020.0002] # GEORGIAN LETTER EN
+1C94 ; [.2697.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER EN
+2D04 ; [.2698.0020.0002] # GEORGIAN SMALL LETTER EN
+10A4 ; [.2698.0020.0008] # GEORGIAN CAPITAL LETTER EN
+10D5 ; [.2699.0020.0002] # GEORGIAN LETTER VIN
+1C95 ; [.2699.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER VIN
+2D05 ; [.269A.0020.0002] # GEORGIAN SMALL LETTER VIN
+10A5 ; [.269A.0020.0008] # GEORGIAN CAPITAL LETTER VIN
+10D6 ; [.269B.0020.0002] # GEORGIAN LETTER ZEN
+1C96 ; [.269B.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER ZEN
+2D06 ; [.269C.0020.0002] # GEORGIAN SMALL LETTER ZEN
+10A6 ; [.269C.0020.0008] # GEORGIAN CAPITAL LETTER ZEN
+10F1 ; [.269D.0020.0002] # GEORGIAN LETTER HE
+1CB1 ; [.269D.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER HE
+2D21 ; [.269E.0020.0002] # GEORGIAN SMALL LETTER HE
+10C1 ; [.269E.0020.0008] # GEORGIAN CAPITAL LETTER HE
+10D7 ; [.269F.0020.0002] # GEORGIAN LETTER TAN
+1C97 ; [.269F.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER TAN
+2D07 ; [.26A0.0020.0002] # GEORGIAN SMALL LETTER TAN
+10A7 ; [.26A0.0020.0008] # GEORGIAN CAPITAL LETTER TAN
+10D8 ; [.26A1.0020.0002] # GEORGIAN LETTER IN
+1C98 ; [.26A1.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER IN
+2D08 ; [.26A2.0020.0002] # GEORGIAN SMALL LETTER IN
+10A8 ; [.26A2.0020.0008] # GEORGIAN CAPITAL LETTER IN
+10D9 ; [.26A3.0020.0002] # GEORGIAN LETTER KAN
+1C99 ; [.26A3.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER KAN
+2D09 ; [.26A4.0020.0002] # GEORGIAN SMALL LETTER KAN
+10A9 ; [.26A4.0020.0008] # GEORGIAN CAPITAL LETTER KAN
+10DA ; [.26A5.0020.0002] # GEORGIAN LETTER LAS
+1C9A ; [.26A5.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER LAS
+2D0A ; [.26A6.0020.0002] # GEORGIAN SMALL LETTER LAS
+10AA ; [.26A6.0020.0008] # GEORGIAN CAPITAL LETTER LAS
+10DB ; [.26A7.0020.0002] # GEORGIAN LETTER MAN
+1C9B ; [.26A7.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER MAN
+2D0B ; [.26A8.0020.0002] # GEORGIAN SMALL LETTER MAN
+10AB ; [.26A8.0020.0008] # GEORGIAN CAPITAL LETTER MAN
+10DC ; [.26A9.0020.0002] # GEORGIAN LETTER NAR
+1C9C ; [.26A9.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER NAR
+10FC ; [.26A9.0020.0014] # MODIFIER LETTER GEORGIAN NAR
+2D0C ; [.26AA.0020.0002] # GEORGIAN SMALL LETTER NAR
+10AC ; [.26AA.0020.0008] # GEORGIAN CAPITAL LETTER NAR
+10F2 ; [.26AB.0020.0002] # GEORGIAN LETTER HIE
+1CB2 ; [.26AB.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER HIE
+2D22 ; [.26AC.0020.0002] # GEORGIAN SMALL LETTER HIE
+10C2 ; [.26AC.0020.0008] # GEORGIAN CAPITAL LETTER HIE
+10DD ; [.26AD.0020.0002] # GEORGIAN LETTER ON
+1C9D ; [.26AD.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER ON
+2D0D ; [.26AE.0020.0002] # GEORGIAN SMALL LETTER ON
+10AD ; [.26AE.0020.0008] # GEORGIAN CAPITAL LETTER ON
+10DE ; [.26AF.0020.0002] # GEORGIAN LETTER PAR
+1C9E ; [.26AF.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER PAR
+2D0E ; [.26B0.0020.0002] # GEORGIAN SMALL LETTER PAR
+10AE ; [.26B0.0020.0008] # GEORGIAN CAPITAL LETTER PAR
+10DF ; [.26B1.0020.0002] # GEORGIAN LETTER ZHAR
+1C9F ; [.26B1.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER ZHAR
+2D0F ; [.26B2.0020.0002] # GEORGIAN SMALL LETTER ZHAR
+10AF ; [.26B2.0020.0008] # GEORGIAN CAPITAL LETTER ZHAR
+10E0 ; [.26B3.0020.0002] # GEORGIAN LETTER RAE
+1CA0 ; [.26B3.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER RAE
+2D10 ; [.26B4.0020.0002] # GEORGIAN SMALL LETTER RAE
+10B0 ; [.26B4.0020.0008] # GEORGIAN CAPITAL LETTER RAE
+10E1 ; [.26B5.0020.0002] # GEORGIAN LETTER SAN
+1CA1 ; [.26B5.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER SAN
+2D11 ; [.26B6.0020.0002] # GEORGIAN SMALL LETTER SAN
+10B1 ; [.26B6.0020.0008] # GEORGIAN CAPITAL LETTER SAN
+10E2 ; [.26B7.0020.0002] # GEORGIAN LETTER TAR
+1CA2 ; [.26B7.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER TAR
+2D12 ; [.26B8.0020.0002] # GEORGIAN SMALL LETTER TAR
+10B2 ; [.26B8.0020.0008] # GEORGIAN CAPITAL LETTER TAR
+10F3 ; [.26B9.0020.0002] # GEORGIAN LETTER WE
+1CB3 ; [.26B9.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER WE
+2D23 ; [.26BA.0020.0002] # GEORGIAN SMALL LETTER WE
+10C3 ; [.26BA.0020.0008] # GEORGIAN CAPITAL LETTER WE
+10E3 ; [.26BB.0020.0002] # GEORGIAN LETTER UN
+1CA3 ; [.26BB.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER UN
+2D13 ; [.26BC.0020.0002] # GEORGIAN SMALL LETTER UN
+10B3 ; [.26BC.0020.0008] # GEORGIAN CAPITAL LETTER UN
+10E4 ; [.26BD.0020.0002] # GEORGIAN LETTER PHAR
+1CA4 ; [.26BD.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER PHAR
+2D14 ; [.26BE.0020.0002] # GEORGIAN SMALL LETTER PHAR
+10B4 ; [.26BE.0020.0008] # GEORGIAN CAPITAL LETTER PHAR
+10E5 ; [.26BF.0020.0002] # GEORGIAN LETTER KHAR
+1CA5 ; [.26BF.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER KHAR
+2D15 ; [.26C0.0020.0002] # GEORGIAN SMALL LETTER KHAR
+10B5 ; [.26C0.0020.0008] # GEORGIAN CAPITAL LETTER KHAR
+10E6 ; [.26C1.0020.0002] # GEORGIAN LETTER GHAN
+1CA6 ; [.26C1.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER GHAN
+2D16 ; [.26C2.0020.0002] # GEORGIAN SMALL LETTER GHAN
+10B6 ; [.26C2.0020.0008] # GEORGIAN CAPITAL LETTER GHAN
+10E7 ; [.26C3.0020.0002] # GEORGIAN LETTER QAR
+1CA7 ; [.26C3.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER QAR
+2D17 ; [.26C4.0020.0002] # GEORGIAN SMALL LETTER QAR
+10B7 ; [.26C4.0020.0008] # GEORGIAN CAPITAL LETTER QAR
+10E8 ; [.26C5.0020.0002] # GEORGIAN LETTER SHIN
+1CA8 ; [.26C5.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER SHIN
+2D18 ; [.26C6.0020.0002] # GEORGIAN SMALL LETTER SHIN
+10B8 ; [.26C6.0020.0008] # GEORGIAN CAPITAL LETTER SHIN
+10E9 ; [.26C7.0020.0002] # GEORGIAN LETTER CHIN
+1CA9 ; [.26C7.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER CHIN
+2D19 ; [.26C8.0020.0002] # GEORGIAN SMALL LETTER CHIN
+10B9 ; [.26C8.0020.0008] # GEORGIAN CAPITAL LETTER CHIN
+10EA ; [.26C9.0020.0002] # GEORGIAN LETTER CAN
+1CAA ; [.26C9.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER CAN
+2D1A ; [.26CA.0020.0002] # GEORGIAN SMALL LETTER CAN
+10BA ; [.26CA.0020.0008] # GEORGIAN CAPITAL LETTER CAN
+10EB ; [.26CB.0020.0002] # GEORGIAN LETTER JIL
+1CAB ; [.26CB.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER JIL
+2D1B ; [.26CC.0020.0002] # GEORGIAN SMALL LETTER JIL
+10BB ; [.26CC.0020.0008] # GEORGIAN CAPITAL LETTER JIL
+10EC ; [.26CD.0020.0002] # GEORGIAN LETTER CIL
+1CAC ; [.26CD.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER CIL
+2D1C ; [.26CE.0020.0002] # GEORGIAN SMALL LETTER CIL
+10BC ; [.26CE.0020.0008] # GEORGIAN CAPITAL LETTER CIL
+10ED ; [.26CF.0020.0002] # GEORGIAN LETTER CHAR
+1CAD ; [.26CF.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER CHAR
+2D1D ; [.26D0.0020.0002] # GEORGIAN SMALL LETTER CHAR
+10BD ; [.26D0.0020.0008] # GEORGIAN CAPITAL LETTER CHAR
+10EE ; [.26D1.0020.0002] # GEORGIAN LETTER XAN
+1CAE ; [.26D1.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER XAN
+2D1E ; [.26D2.0020.0002] # GEORGIAN SMALL LETTER XAN
+10BE ; [.26D2.0020.0008] # GEORGIAN CAPITAL LETTER XAN
+10F4 ; [.26D3.0020.0002] # GEORGIAN LETTER HAR
+1CB4 ; [.26D3.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER HAR
+2D24 ; [.26D4.0020.0002] # GEORGIAN SMALL LETTER HAR
+10C4 ; [.26D4.0020.0008] # GEORGIAN CAPITAL LETTER HAR
+10EF ; [.26D5.0020.0002] # GEORGIAN LETTER JHAN
+1CAF ; [.26D5.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER JHAN
+2D1F ; [.26D6.0020.0002] # GEORGIAN SMALL LETTER JHAN
+10BF ; [.26D6.0020.0008] # GEORGIAN CAPITAL LETTER JHAN
+10F0 ; [.26D7.0020.0002] # GEORGIAN LETTER HAE
+1CB0 ; [.26D7.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER HAE
+2D20 ; [.26D8.0020.0002] # GEORGIAN SMALL LETTER HAE
+10C0 ; [.26D8.0020.0008] # GEORGIAN CAPITAL LETTER HAE
+10F5 ; [.26D9.0020.0002] # GEORGIAN LETTER HOE
+1CB5 ; [.26D9.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER HOE
+2D25 ; [.26DA.0020.0002] # GEORGIAN SMALL LETTER HOE
+10C5 ; [.26DA.0020.0008] # GEORGIAN CAPITAL LETTER HOE
+10F6 ; [.26DB.0020.0002] # GEORGIAN LETTER FI
+1CB6 ; [.26DB.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER FI
+10F7 ; [.26DC.0020.0002] # GEORGIAN LETTER YN
+1CB7 ; [.26DC.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER YN
+2D27 ; [.26DD.0020.0002] # GEORGIAN SMALL LETTER YN
+10C7 ; [.26DD.0020.0008] # GEORGIAN CAPITAL LETTER YN
+10F8 ; [.26DE.0020.0002] # GEORGIAN LETTER ELIFI
+1CB8 ; [.26DE.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER ELIFI
+10F9 ; [.26DF.0020.0002] # GEORGIAN LETTER TURNED GAN
+1CB9 ; [.26DF.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER TURNED GAN
+10FA ; [.26E0.0020.0002] # GEORGIAN LETTER AIN
+1CBA ; [.26E0.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER AIN
+10FD ; [.26E1.0020.0002] # GEORGIAN LETTER AEN
+1CBD ; [.26E1.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER AEN
+2D2D ; [.26E2.0020.0002] # GEORGIAN SMALL LETTER AEN
+10CD ; [.26E2.0020.0008] # GEORGIAN CAPITAL LETTER AEN
+10FE ; [.26E3.0020.0002] # GEORGIAN LETTER HARD SIGN
+1CBE ; [.26E3.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER HARD SIGN
+10FF ; [.26E4.0020.0002] # GEORGIAN LETTER LABIAL SIGN
+1CBF ; [.26E4.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN
+0561 ; [.26E5.0020.0002] # ARMENIAN SMALL LETTER AYB
+0531 ; [.26E5.0020.0008] # ARMENIAN CAPITAL LETTER AYB
+0560 ; [.26E6.0020.0002] # ARMENIAN SMALL LETTER TURNED AYB
+0562 ; [.26E7.0020.0002] # ARMENIAN SMALL LETTER BEN
+0532 ; [.26E7.0020.0008] # ARMENIAN CAPITAL LETTER BEN
+0563 ; [.26E8.0020.0002] # ARMENIAN SMALL LETTER GIM
+0533 ; [.26E8.0020.0008] # ARMENIAN CAPITAL LETTER GIM
+0564 ; [.26E9.0020.0002] # ARMENIAN SMALL LETTER DA
+0534 ; [.26E9.0020.0008] # ARMENIAN CAPITAL LETTER DA
+0565 ; [.26EA.0020.0002] # ARMENIAN SMALL LETTER ECH
+0535 ; [.26EA.0020.0008] # ARMENIAN CAPITAL LETTER ECH
+0587 ; [.26EA.0020.0004][.2708.0020.0004] # ARMENIAN SMALL LIGATURE ECH YIWN
+0566 ; [.26EB.0020.0002] # ARMENIAN SMALL LETTER ZA
+0536 ; [.26EB.0020.0008] # ARMENIAN CAPITAL LETTER ZA
+0567 ; [.26EC.0020.0002] # ARMENIAN SMALL LETTER EH
+0537 ; [.26EC.0020.0008] # ARMENIAN CAPITAL LETTER EH
+0568 ; [.26ED.0020.0002] # ARMENIAN SMALL LETTER ET
+0538 ; [.26ED.0020.0008] # ARMENIAN CAPITAL LETTER ET
+0569 ; [.26EE.0020.0002] # ARMENIAN SMALL LETTER TO
+0539 ; [.26EE.0020.0008] # ARMENIAN CAPITAL LETTER TO
+056A ; [.26EF.0020.0002] # ARMENIAN SMALL LETTER ZHE
+053A ; [.26EF.0020.0008] # ARMENIAN CAPITAL LETTER ZHE
+056B ; [.26F0.0020.0002] # ARMENIAN SMALL LETTER INI
+053B ; [.26F0.0020.0008] # ARMENIAN CAPITAL LETTER INI
+056C ; [.26F1.0020.0002] # ARMENIAN SMALL LETTER LIWN
+053C ; [.26F1.0020.0008] # ARMENIAN CAPITAL LETTER LIWN
+056D ; [.26F2.0020.0002] # ARMENIAN SMALL LETTER XEH
+053D ; [.26F2.0020.0008] # ARMENIAN CAPITAL LETTER XEH
+056E ; [.26F3.0020.0002] # ARMENIAN SMALL LETTER CA
+053E ; [.26F3.0020.0008] # ARMENIAN CAPITAL LETTER CA
+056F ; [.26F4.0020.0002] # ARMENIAN SMALL LETTER KEN
+053F ; [.26F4.0020.0008] # ARMENIAN CAPITAL LETTER KEN
+0570 ; [.26F5.0020.0002] # ARMENIAN SMALL LETTER HO
+0540 ; [.26F5.0020.0008] # ARMENIAN CAPITAL LETTER HO
+0571 ; [.26F6.0020.0002] # ARMENIAN SMALL LETTER JA
+0541 ; [.26F6.0020.0008] # ARMENIAN CAPITAL LETTER JA
+0572 ; [.26F7.0020.0002] # ARMENIAN SMALL LETTER GHAD
+0542 ; [.26F7.0020.0008] # ARMENIAN CAPITAL LETTER GHAD
+0573 ; [.26F8.0020.0002] # ARMENIAN SMALL LETTER CHEH
+0543 ; [.26F8.0020.0008] # ARMENIAN CAPITAL LETTER CHEH
+0574 ; [.26F9.0020.0002] # ARMENIAN SMALL LETTER MEN
+0544 ; [.26F9.0020.0008] # ARMENIAN CAPITAL LETTER MEN
+FB14 ; [.26F9.0020.0004][.26EA.0020.0004] # ARMENIAN SMALL LIGATURE MEN ECH
+FB15 ; [.26F9.0020.0004][.26F0.0020.0004] # ARMENIAN SMALL LIGATURE MEN INI
+FB17 ; [.26F9.0020.0004][.26F2.0020.0004] # ARMENIAN SMALL LIGATURE MEN XEH
+FB13 ; [.26F9.0020.0004][.26FC.0020.0004] # ARMENIAN SMALL LIGATURE MEN NOW
+0575 ; [.26FA.0020.0002] # ARMENIAN SMALL LETTER YI
+0545 ; [.26FA.0020.0008] # ARMENIAN CAPITAL LETTER YI
+0588 ; [.26FB.0020.0002] # ARMENIAN SMALL LETTER YI WITH STROKE
+0576 ; [.26FC.0020.0002] # ARMENIAN SMALL LETTER NOW
+0546 ; [.26FC.0020.0008] # ARMENIAN CAPITAL LETTER NOW
+0577 ; [.26FD.0020.0002] # ARMENIAN SMALL LETTER SHA
+0547 ; [.26FD.0020.0008] # ARMENIAN CAPITAL LETTER SHA
+0578 ; [.26FE.0020.0002] # ARMENIAN SMALL LETTER VO
+0548 ; [.26FE.0020.0008] # ARMENIAN CAPITAL LETTER VO
+0579 ; [.26FF.0020.0002] # ARMENIAN SMALL LETTER CHA
+0549 ; [.26FF.0020.0008] # ARMENIAN CAPITAL LETTER CHA
+057A ; [.2700.0020.0002] # ARMENIAN SMALL LETTER PEH
+054A ; [.2700.0020.0008] # ARMENIAN CAPITAL LETTER PEH
+057B ; [.2701.0020.0002] # ARMENIAN SMALL LETTER JHEH
+054B ; [.2701.0020.0008] # ARMENIAN CAPITAL LETTER JHEH
+057C ; [.2702.0020.0002] # ARMENIAN SMALL LETTER RA
+054C ; [.2702.0020.0008] # ARMENIAN CAPITAL LETTER RA
+057D ; [.2703.0020.0002] # ARMENIAN SMALL LETTER SEH
+054D ; [.2703.0020.0008] # ARMENIAN CAPITAL LETTER SEH
+057E ; [.2704.0020.0002] # ARMENIAN SMALL LETTER VEW
+054E ; [.2704.0020.0008] # ARMENIAN CAPITAL LETTER VEW
+FB16 ; [.2704.0020.0004][.26FC.0020.0004] # ARMENIAN SMALL LIGATURE VEW NOW
+057F ; [.2705.0020.0002] # ARMENIAN SMALL LETTER TIWN
+054F ; [.2705.0020.0008] # ARMENIAN CAPITAL LETTER TIWN
+0580 ; [.2706.0020.0002] # ARMENIAN SMALL LETTER REH
+0550 ; [.2706.0020.0008] # ARMENIAN CAPITAL LETTER REH
+0581 ; [.2707.0020.0002] # ARMENIAN SMALL LETTER CO
+0551 ; [.2707.0020.0008] # ARMENIAN CAPITAL LETTER CO
+0582 ; [.2708.0020.0002] # ARMENIAN SMALL LETTER YIWN
+0552 ; [.2708.0020.0008] # ARMENIAN CAPITAL LETTER YIWN
+0583 ; [.2709.0020.0002] # ARMENIAN SMALL LETTER PIWR
+0553 ; [.2709.0020.0008] # ARMENIAN CAPITAL LETTER PIWR
+0584 ; [.270A.0020.0002] # ARMENIAN SMALL LETTER KEH
+0554 ; [.270A.0020.0008] # ARMENIAN CAPITAL LETTER KEH
+0585 ; [.270B.0020.0002] # ARMENIAN SMALL LETTER OH
+0555 ; [.270B.0020.0008] # ARMENIAN CAPITAL LETTER OH
+0586 ; [.270C.0020.0002] # ARMENIAN SMALL LETTER FEH
+0556 ; [.270C.0020.0008] # ARMENIAN CAPITAL LETTER FEH
+0559 ; [.270D.0020.0002] # ARMENIAN MODIFIER LETTER LEFT HALF RING
+05D0 ; [.270E.0020.0002] # HEBREW LETTER ALEF
+2135 ; [.270E.0020.0004] # ALEF SYMBOL
+FB21 ; [.270E.0020.0005] # HEBREW LETTER WIDE ALEF
+FB2E ; [.270E.0020.0002][.0000.0059.0002] # HEBREW LETTER ALEF WITH PATAH
+FB2F ; [.270E.0020.0002][.0000.005A.0002] # HEBREW LETTER ALEF WITH QAMATS
+FB30 ; [.270E.0020.0002][.0000.005F.0002] # HEBREW LETTER ALEF WITH MAPIQ
+FB4F ; [.270E.0020.0004][.2719.0020.0004] # HEBREW LIGATURE ALEF LAMED
+05D1 ; [.270F.0020.0002] # HEBREW LETTER BET
+2136 ; [.270F.0020.0004] # BET SYMBOL
+FB31 ; [.270F.0020.0002][.0000.005F.0002] # HEBREW LETTER BET WITH DAGESH
+FB4C ; [.270F.0020.0002][.0000.0060.0002] # HEBREW LETTER BET WITH RAFE
+05D2 ; [.2710.0020.0002] # HEBREW LETTER GIMEL
+2137 ; [.2710.0020.0004] # GIMEL SYMBOL
+FB32 ; [.2710.0020.0002][.0000.005F.0002] # HEBREW LETTER GIMEL WITH DAGESH
+05D3 ; [.2711.0020.0002] # HEBREW LETTER DALET
+2138 ; [.2711.0020.0004] # DALET SYMBOL
+FB22 ; [.2711.0020.0005] # HEBREW LETTER WIDE DALET
+FB33 ; [.2711.0020.0002][.0000.005F.0002] # HEBREW LETTER DALET WITH DAGESH
+05D4 ; [.2712.0020.0002] # HEBREW LETTER HE
+FB23 ; [.2712.0020.0005] # HEBREW LETTER WIDE HE
+FB34 ; [.2712.0020.0002][.0000.005F.0002] # HEBREW LETTER HE WITH MAPIQ
+05D5 ; [.2713.0020.0002] # HEBREW LETTER VAV
+FB4B ; [.2713.0020.0002][.0000.005B.0002] # HEBREW LETTER VAV WITH HOLAM
+FB35 ; [.2713.0020.0002][.0000.005F.0002] # HEBREW LETTER VAV WITH DAGESH
+05F0 ; [.2713.0020.0004][.2713.0020.0004] # HEBREW LIGATURE YIDDISH DOUBLE VAV
+05F1 ; [.2713.0020.0004][.2717.0020.0004] # HEBREW LIGATURE YIDDISH VAV YOD
+05D6 ; [.2714.0020.0002] # HEBREW LETTER ZAYIN
+FB36 ; [.2714.0020.0002][.0000.005F.0002] # HEBREW LETTER ZAYIN WITH DAGESH
+05D7 ; [.2715.0020.0002] # HEBREW LETTER HET
+05D8 ; [.2716.0020.0002] # HEBREW LETTER TET
+FB38 ; [.2716.0020.0002][.0000.005F.0002] # HEBREW LETTER TET WITH DAGESH
+05D9 ; [.2717.0020.0002] # HEBREW LETTER YOD
+FB1D ; [.2717.0020.0002][.0000.0056.0002] # HEBREW LETTER YOD WITH HIRIQ
+FB39 ; [.2717.0020.0002][.0000.005F.0002] # HEBREW LETTER YOD WITH DAGESH
+05EF ; [.2717.0020.0004][.2712.0020.0004][.2713.0020.0004][.2712.0020.0004] # HEBREW YOD TRIANGLE
+05F2 ; [.2717.0020.0004][.2717.0020.0004] # HEBREW LIGATURE YIDDISH DOUBLE YOD
+FB1F ; [.2717.0020.0004][.2717.0020.0004][.0000.0059.0002] # HEBREW LIGATURE YIDDISH YOD YOD PATAH
+05DB ; [.2718.0020.0002] # HEBREW LETTER KAF
+FB24 ; [.2718.0020.0005] # HEBREW LETTER WIDE KAF
+05DA ; [.2718.0020.0019] # HEBREW LETTER FINAL KAF
+FB3B ; [.2718.0020.0002][.0000.005F.0002] # HEBREW LETTER KAF WITH DAGESH
+FB3A ; [.2718.0020.0019][.0000.005F.0002] # HEBREW LETTER FINAL KAF WITH DAGESH
+FB4D ; [.2718.0020.0002][.0000.0060.0002] # HEBREW LETTER KAF WITH RAFE
+05DC ; [.2719.0020.0002] # HEBREW LETTER LAMED
+FB25 ; [.2719.0020.0005] # HEBREW LETTER WIDE LAMED
+FB3C ; [.2719.0020.0002][.0000.005F.0002] # HEBREW LETTER LAMED WITH DAGESH
+05DE ; [.271A.0020.0002] # HEBREW LETTER MEM
+FB26 ; [.271A.0020.0005] # HEBREW LETTER WIDE FINAL MEM
+05DD ; [.271A.0020.0019] # HEBREW LETTER FINAL MEM
+FB3E ; [.271A.0020.0002][.0000.005F.0002] # HEBREW LETTER MEM WITH DAGESH
+05E0 ; [.271B.0020.0002] # HEBREW LETTER NUN
+05DF ; [.271B.0020.0019] # HEBREW LETTER FINAL NUN
+FB40 ; [.271B.0020.0002][.0000.005F.0002] # HEBREW LETTER NUN WITH DAGESH
+05E1 ; [.271C.0020.0002] # HEBREW LETTER SAMEKH
+FB41 ; [.271C.0020.0002][.0000.005F.0002] # HEBREW LETTER SAMEKH WITH DAGESH
+05E2 ; [.271D.0020.0002] # HEBREW LETTER AYIN
+FB20 ; [.271D.0020.0005] # HEBREW LETTER ALTERNATIVE AYIN
+05E4 ; [.271E.0020.0002] # HEBREW LETTER PE
+05E3 ; [.271E.0020.0019] # HEBREW LETTER FINAL PE
+FB44 ; [.271E.0020.0002][.0000.005F.0002] # HEBREW LETTER PE WITH DAGESH
+FB43 ; [.271E.0020.0019][.0000.005F.0002] # HEBREW LETTER FINAL PE WITH DAGESH
+FB4E ; [.271E.0020.0002][.0000.0060.0002] # HEBREW LETTER PE WITH RAFE
+05E6 ; [.271F.0020.0002] # HEBREW LETTER TSADI
+05E5 ; [.271F.0020.0019] # HEBREW LETTER FINAL TSADI
+FB46 ; [.271F.0020.0002][.0000.005F.0002] # HEBREW LETTER TSADI WITH DAGESH
+05E7 ; [.2720.0020.0002] # HEBREW LETTER QOF
+FB47 ; [.2720.0020.0002][.0000.005F.0002] # HEBREW LETTER QOF WITH DAGESH
+05E8 ; [.2721.0020.0002] # HEBREW LETTER RESH
+FB27 ; [.2721.0020.0005] # HEBREW LETTER WIDE RESH
+FB48 ; [.2721.0020.0002][.0000.005F.0002] # HEBREW LETTER RESH WITH DAGESH
+05E9 ; [.2722.0020.0002] # HEBREW LETTER SHIN
+FB2B ; [.2722.0020.0002][.0000.005D.0002] # HEBREW LETTER SHIN WITH SIN DOT
+FB2A ; [.2722.0020.0002][.0000.005E.0002] # HEBREW LETTER SHIN WITH SHIN DOT
+FB49 ; [.2722.0020.0002][.0000.005F.0002] # HEBREW LETTER SHIN WITH DAGESH
+FB2D ; [.2722.0020.0002][.0000.005F.0002][.0000.005D.0002] # HEBREW LETTER SHIN WITH DAGESH AND SIN DOT
+FB2C ; [.2722.0020.0002][.0000.005F.0002][.0000.005E.0002] # HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT
+05EA ; [.2723.0020.0002] # HEBREW LETTER TAV
+FB28 ; [.2723.0020.0005] # HEBREW LETTER WIDE TAV
+FB4A ; [.2723.0020.0002][.0000.005F.0002] # HEBREW LETTER TAV WITH DAGESH
+10900 ; [.2724.0020.0002] # PHOENICIAN LETTER ALF
+10901 ; [.2725.0020.0002] # PHOENICIAN LETTER BET
+10902 ; [.2726.0020.0002] # PHOENICIAN LETTER GAML
+10903 ; [.2727.0020.0002] # PHOENICIAN LETTER DELT
+10904 ; [.2728.0020.0002] # PHOENICIAN LETTER HE
+10905 ; [.2729.0020.0002] # PHOENICIAN LETTER WAU
+10906 ; [.272A.0020.0002] # PHOENICIAN LETTER ZAI
+10907 ; [.272B.0020.0002] # PHOENICIAN LETTER HET
+10908 ; [.272C.0020.0002] # PHOENICIAN LETTER TET
+10909 ; [.272D.0020.0002] # PHOENICIAN LETTER YOD
+1090A ; [.272E.0020.0002] # PHOENICIAN LETTER KAF
+1090B ; [.272F.0020.0002] # PHOENICIAN LETTER LAMD
+1090C ; [.2730.0020.0002] # PHOENICIAN LETTER MEM
+1090D ; [.2731.0020.0002] # PHOENICIAN LETTER NUN
+1090E ; [.2732.0020.0002] # PHOENICIAN LETTER SEMK
+1090F ; [.2733.0020.0002] # PHOENICIAN LETTER AIN
+10910 ; [.2734.0020.0002] # PHOENICIAN LETTER PE
+10911 ; [.2735.0020.0002] # PHOENICIAN LETTER SADE
+10912 ; [.2736.0020.0002] # PHOENICIAN LETTER QOF
+10913 ; [.2737.0020.0002] # PHOENICIAN LETTER ROSH
+10914 ; [.2738.0020.0002] # PHOENICIAN LETTER SHIN
+10915 ; [.2739.0020.0002] # PHOENICIAN LETTER TAU
+0800 ; [.273A.0020.0002] # SAMARITAN LETTER ALAF
+0801 ; [.273B.0020.0002] # SAMARITAN LETTER BIT
+0802 ; [.273C.0020.0002] # SAMARITAN LETTER GAMAN
+0803 ; [.273D.0020.0002] # SAMARITAN LETTER DALAT
+0804 ; [.273E.0020.0002] # SAMARITAN LETTER IY
+0805 ; [.273F.0020.0002] # SAMARITAN LETTER BAA
+0806 ; [.2740.0020.0002] # SAMARITAN LETTER ZEN
+0807 ; [.2741.0020.0002] # SAMARITAN LETTER IT
+0808 ; [.2742.0020.0002] # SAMARITAN LETTER TIT
+0809 ; [.2743.0020.0002] # SAMARITAN LETTER YUT
+080A ; [.2744.0020.0002] # SAMARITAN LETTER KAAF
+080B ; [.2745.0020.0002] # SAMARITAN LETTER LABAT
+080C ; [.2746.0020.0002] # SAMARITAN LETTER MIM
+080D ; [.2747.0020.0002] # SAMARITAN LETTER NUN
+080E ; [.2748.0020.0002] # SAMARITAN LETTER SINGAAT
+080F ; [.2749.0020.0002] # SAMARITAN LETTER IN
+0810 ; [.274A.0020.0002] # SAMARITAN LETTER FI
+0811 ; [.274B.0020.0002] # SAMARITAN LETTER TSAADIY
+0812 ; [.274C.0020.0002] # SAMARITAN LETTER QUF
+0813 ; [.274D.0020.0002] # SAMARITAN LETTER RISH
+0814 ; [.274E.0020.0002] # SAMARITAN LETTER SHAN
+0815 ; [.274F.0020.0002] # SAMARITAN LETTER TAAF
+0816 ; [.2750.0020.0002] # SAMARITAN MARK IN
+0817 ; [.2751.0020.0002] # SAMARITAN MARK IN-ALAF
+081A ; [.2752.0020.0002] # SAMARITAN MODIFIER LETTER EPENTHETIC YUT
+081B ; [.2753.0020.0002] # SAMARITAN MARK EPENTHETIC YUT
+0621 ; [.2754.0020.0002] # ARABIC LETTER HAMZA
+0674 ; [.2754.0020.0004] # ARABIC LETTER HIGH HAMZA
+0883 ; [.2754.0020.0004] # ARABIC TATWEEL WITH OVERSTRUCK HAMZA
+0887 ; [.2754.0020.0004] # ARABIC BASELINE ROUND DOT
+FE80 ; [.2754.0020.001A] # ARABIC LETTER HAMZA ISOLATED FORM
+06FD ; [.2754.0020.0004][.0000.0119.0004] # ARABIC SIGN SINDHI AMPERSAND
+0675 ; [.2754.0020.0004][.2762.0020.0004] # ARABIC LETTER HIGH HAMZA ALEF
+0676 ; [.2754.0020.0004][.281F.0020.0004] # ARABIC LETTER HIGH HAMZA WAW
+0677 ; [.2754.0020.0004][.2823.0020.0004] # ARABIC LETTER U WITH HAMZA ABOVE
+FBDD ; [.2754.0020.001A][.2823.0020.001A] # ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM
+0678 ; [.2754.0020.0004][.282E.0020.0004] # ARABIC LETTER HIGH HAMZA YEH
+0622 ; [.2755.0020.0002] # ARABIC LETTER ALEF WITH MADDA ABOVE
+0627 0653 ; [.2755.0020.0002] # ARABIC LETTER ALEF WITH MADDA ABOVE
+FE82 ; [.2755.0020.0019] # ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM
+FE81 ; [.2755.0020.001A] # ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM
+0623 ; [.2756.0020.0002] # ARABIC LETTER ALEF WITH HAMZA ABOVE
+0627 0654 ; [.2756.0020.0002] # ARABIC LETTER ALEF WITH HAMZA ABOVE
+FE84 ; [.2756.0020.0019] # ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM
+FE83 ; [.2756.0020.001A] # ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM
+0672 ; [.2757.0020.0002] # ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE
+0671 ; [.2758.0020.0002] # ARABIC LETTER ALEF WASLA
+FB51 ; [.2758.0020.0019] # ARABIC LETTER ALEF WASLA FINAL FORM
+FB50 ; [.2758.0020.001A] # ARABIC LETTER ALEF WASLA ISOLATED FORM
+0624 ; [.2759.0020.0002] # ARABIC LETTER WAW WITH HAMZA ABOVE
+0648 0654 ; [.2759.0020.0002] # ARABIC LETTER WAW WITH HAMZA ABOVE
+FE86 ; [.2759.0020.0019] # ARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORM
+FE85 ; [.2759.0020.001A] # ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM
+0625 ; [.275A.0020.0002] # ARABIC LETTER ALEF WITH HAMZA BELOW
+0627 0655 ; [.275A.0020.0002] # ARABIC LETTER ALEF WITH HAMZA BELOW
+FE88 ; [.275A.0020.0019] # ARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORM
+FE87 ; [.275A.0020.001A] # ARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORM
+0673 ; [.275B.0020.0002] # ARABIC LETTER ALEF WITH WAVY HAMZA BELOW
+0773 ; [.275C.0020.0002] # ARABIC LETTER ALEF WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE
+0774 ; [.275D.0020.0002] # ARABIC LETTER ALEF WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE
+0626 ; [.275E.0020.0002] # ARABIC LETTER YEH WITH HAMZA ABOVE
+064A 0654 ; [.275E.0020.0002] # ARABIC LETTER YEH WITH HAMZA ABOVE
+FE8B ; [.275E.0020.0017] # ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM
+FE8C ; [.275E.0020.0018] # ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM
+FE8A ; [.275E.0020.0019] # ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM
+FE89 ; [.275E.0020.001A] # ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM
+FBEB ; [.275E.0020.0019][.2762.0020.0019] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORM
+FBEA ; [.275E.0020.001A][.2762.0020.001A] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM
+FC97 ; [.275E.0020.0017][.277F.0020.0017] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORM
+FC00 ; [.275E.0020.001A][.277F.0020.001A] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM
+FC98 ; [.275E.0020.0017][.278A.0020.0017] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORM
+FC01 ; [.275E.0020.001A][.278A.0020.001A] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORM
+FC99 ; [.275E.0020.0017][.278B.0020.0017] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHAH INITIAL FORM
+FC64 ; [.275E.0020.0019][.27A4.0020.0019] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM
+FC65 ; [.275E.0020.0019][.27A5.0020.0019] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORM
+FC9A ; [.275E.0020.0017][.280A.0020.0017] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FORM
+FCDF ; [.275E.0020.0018][.280A.0020.0018] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORM
+FC66 ; [.275E.0020.0019][.280A.0020.0019] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM
+FC02 ; [.275E.0020.001A][.280A.0020.001A] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORM
+FC67 ; [.275E.0020.0019][.280E.0020.0019] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORM
+FC9B ; [.275E.0020.0017][.2819.0020.0017] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORM
+FCE0 ; [.275E.0020.0018][.2819.0020.0018] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORM
+FBED ; [.275E.0020.0019][.281E.0020.0019] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORM
+FBEC ; [.275E.0020.001A][.281E.0020.001A] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORM
+FBEF ; [.275E.0020.0019][.281F.0020.0019] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORM
+FBEE ; [.275E.0020.001A][.281F.0020.001A] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED FORM
+FBF3 ; [.275E.0020.0019][.2822.0020.0019] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORM
+FBF2 ; [.275E.0020.001A][.2822.0020.001A] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORM
+FBF1 ; [.275E.0020.0019][.2823.0020.0019] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORM
+FBF0 ; [.275E.0020.001A][.2823.0020.001A] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORM
+FBF5 ; [.275E.0020.0019][.2824.0020.0019] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORM
+FBF4 ; [.275E.0020.001A][.2824.0020.001A] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORM
+FBFB ; [.275E.0020.0017][.282D.0020.0017] # ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM
+FBFA ; [.275E.0020.0019][.282D.0020.0019] # ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM
+FC68 ; [.275E.0020.0019][.282D.0020.0019] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM
+FBF9 ; [.275E.0020.001A][.282D.0020.001A] # ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM
+FC03 ; [.275E.0020.001A][.282D.0020.001A] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM
+FC69 ; [.275E.0020.0019][.282E.0020.0019] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORM
+FC04 ; [.275E.0020.001A][.282E.0020.001A] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORM
+FBF8 ; [.275E.0020.0017][.2832.0020.0017] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORM
+FBF7 ; [.275E.0020.0019][.2832.0020.0019] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E FINAL FORM
+FBF6 ; [.275E.0020.001A][.2832.0020.001A] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORM
+08A8 ; [.275F.0020.0002] # ARABIC LETTER YEH WITH TWO DOTS BELOW AND HAMZA ABOVE
+08A9 ; [.2760.0020.0002] # ARABIC LETTER YEH WITH TWO DOTS BELOW AND DOT ABOVE
+08AC ; [.2761.0020.0002] # ARABIC LETTER ROHINGYA YEH
+0627 ; [.2762.0020.0002] # ARABIC LETTER ALEF
+0870 ; [.2762.0020.0004] # ARABIC LETTER ALEF WITH ATTACHED FATHA
+0871 ; [.2762.0020.0004] # ARABIC LETTER ALEF WITH ATTACHED TOP RIGHT FATHA
+0872 ; [.2762.0020.0004] # ARABIC LETTER ALEF WITH RIGHT MIDDLE STROKE
+0873 ; [.2762.0020.0004] # ARABIC LETTER ALEF WITH LEFT MIDDLE STROKE
+0874 ; [.2762.0020.0004] # ARABIC LETTER ALEF WITH ATTACHED KASRA
+0875 ; [.2762.0020.0004] # ARABIC LETTER ALEF WITH ATTACHED BOTTOM RIGHT KASRA
+0876 ; [.2762.0020.0004] # ARABIC LETTER ALEF WITH ATTACHED ROUND DOT ABOVE
+0877 ; [.2762.0020.0004] # ARABIC LETTER ALEF WITH ATTACHED RIGHT ROUND DOT
+0878 ; [.2762.0020.0004] # ARABIC LETTER ALEF WITH ATTACHED LEFT ROUND DOT
+0879 ; [.2762.0020.0004] # ARABIC LETTER ALEF WITH ATTACHED ROUND DOT BELOW
+087A ; [.2762.0020.0004] # ARABIC LETTER ALEF WITH DOT ABOVE
+087B ; [.2762.0020.0004] # ARABIC LETTER ALEF WITH ATTACHED TOP RIGHT FATHA AND DOT ABOVE
+087C ; [.2762.0020.0004] # ARABIC LETTER ALEF WITH RIGHT MIDDLE STROKE AND DOT ABOVE
+087D ; [.2762.0020.0004] # ARABIC LETTER ALEF WITH ATTACHED BOTTOM RIGHT KASRA AND DOT ABOVE
+087E ; [.2762.0020.0004] # ARABIC LETTER ALEF WITH ATTACHED TOP RIGHT FATHA AND LEFT RING
+087F ; [.2762.0020.0004] # ARABIC LETTER ALEF WITH RIGHT MIDDLE STROKE AND LEFT RING
+0880 ; [.2762.0020.0004] # ARABIC LETTER ALEF WITH ATTACHED BOTTOM RIGHT KASRA AND LEFT RING
+0881 ; [.2762.0020.0004] # ARABIC LETTER ALEF WITH ATTACHED RIGHT HAMZA
+0882 ; [.2762.0020.0004] # ARABIC LETTER ALEF WITH ATTACHED LEFT HAMZA
+08AD ; [.2762.0020.0004] # ARABIC LETTER LOW ALEF
+1EE00 ; [.2762.0020.0005] # ARABIC MATHEMATICAL ALEF
+1EE80 ; [.2762.0020.0005] # ARABIC MATHEMATICAL LOOPED ALEF
+FE8E ; [.2762.0020.0019] # ARABIC LETTER ALEF FINAL FORM
+FE8D ; [.2762.0020.001A] # ARABIC LETTER ALEF ISOLATED FORM
+FD3C ; [.2762.0020.0019][.0000.006D.0019] # ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM
+FD3D ; [.2762.0020.001A][.0000.006D.001A] # ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM
+FDF3 ; [.2762.0020.001A][.27EA.0020.001A][.2764.0020.001A][.27A4.0020.001A] # ARABIC LIGATURE AKBAR ISOLATED FORM
+FDF2 ; [.2762.0020.001A][.2802.0020.001A][.2802.0020.001A][.2819.0020.001A] # ARABIC LIGATURE ALLAH ISOLATED FORM
+066E ; [.2763.0020.0002] # ARABIC LETTER DOTLESS BEH
+1EE1C ; [.2763.0020.0005] # ARABIC MATHEMATICAL DOTLESS BEH
+1EE7C ; [.2763.0020.0005] # ARABIC MATHEMATICAL STRETCHED DOTLESS BEH
+0628 ; [.2764.0020.0002] # ARABIC LETTER BEH
+1EE01 ; [.2764.0020.0005] # ARABIC MATHEMATICAL BEH
+1EE21 ; [.2764.0020.0005] # ARABIC MATHEMATICAL INITIAL BEH
+1EE61 ; [.2764.0020.0005] # ARABIC MATHEMATICAL STRETCHED BEH
+1EE81 ; [.2764.0020.0005] # ARABIC MATHEMATICAL LOOPED BEH
+1EEA1 ; [.2764.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK BEH
+FE91 ; [.2764.0020.0017] # ARABIC LETTER BEH INITIAL FORM
+FE92 ; [.2764.0020.0018] # ARABIC LETTER BEH MEDIAL FORM
+FE90 ; [.2764.0020.0019] # ARABIC LETTER BEH FINAL FORM
+FE8F ; [.2764.0020.001A] # ARABIC LETTER BEH ISOLATED FORM
+FC9C ; [.2764.0020.0017][.277F.0020.0017] # ARABIC LIGATURE BEH WITH JEEM INITIAL FORM
+FC05 ; [.2764.0020.001A][.277F.0020.001A] # ARABIC LIGATURE BEH WITH JEEM ISOLATED FORM
+FC9D ; [.2764.0020.0017][.278A.0020.0017] # ARABIC LIGATURE BEH WITH HAH INITIAL FORM
+FC06 ; [.2764.0020.001A][.278A.0020.001A] # ARABIC LIGATURE BEH WITH HAH ISOLATED FORM
+FDC2 ; [.2764.0020.0019][.278A.0020.0019][.282E.0020.0019] # ARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORM
+FC9E ; [.2764.0020.0017][.278B.0020.0017] # ARABIC LIGATURE BEH WITH KHAH INITIAL FORM
+FC07 ; [.2764.0020.001A][.278B.0020.001A] # ARABIC LIGATURE BEH WITH KHAH ISOLATED FORM
+FD9E ; [.2764.0020.0019][.278B.0020.0019][.282E.0020.0019] # ARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORM
+FC6A ; [.2764.0020.0019][.27A4.0020.0019] # ARABIC LIGATURE BEH WITH REH FINAL FORM
+FC6B ; [.2764.0020.0019][.27A5.0020.0019] # ARABIC LIGATURE BEH WITH ZAIN FINAL FORM
+FC9F ; [.2764.0020.0017][.280A.0020.0017] # ARABIC LIGATURE BEH WITH MEEM INITIAL FORM
+FCE1 ; [.2764.0020.0018][.280A.0020.0018] # ARABIC LIGATURE BEH WITH MEEM MEDIAL FORM
+FC6C ; [.2764.0020.0019][.280A.0020.0019] # ARABIC LIGATURE BEH WITH MEEM FINAL FORM
+FC08 ; [.2764.0020.001A][.280A.0020.001A] # ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM
+FC6D ; [.2764.0020.0019][.280E.0020.0019] # ARABIC LIGATURE BEH WITH NOON FINAL FORM
+FCA0 ; [.2764.0020.0017][.2819.0020.0017] # ARABIC LIGATURE BEH WITH HEH INITIAL FORM
+FCE2 ; [.2764.0020.0018][.2819.0020.0018] # ARABIC LIGATURE BEH WITH HEH MEDIAL FORM
+FC6E ; [.2764.0020.0019][.282D.0020.0019] # ARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORM
+FC09 ; [.2764.0020.001A][.282D.0020.001A] # ARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORM
+FC6F ; [.2764.0020.0019][.282E.0020.0019] # ARABIC LIGATURE BEH WITH YEH FINAL FORM
+FC0A ; [.2764.0020.001A][.282E.0020.001A] # ARABIC LIGATURE BEH WITH YEH ISOLATED FORM
+067B ; [.2765.0020.0002] # ARABIC LETTER BEEH
+FB54 ; [.2765.0020.0017] # ARABIC LETTER BEEH INITIAL FORM
+FB55 ; [.2765.0020.0018] # ARABIC LETTER BEEH MEDIAL FORM
+FB53 ; [.2765.0020.0019] # ARABIC LETTER BEEH FINAL FORM
+FB52 ; [.2765.0020.001A] # ARABIC LETTER BEEH ISOLATED FORM
+067E ; [.2766.0020.0002] # ARABIC LETTER PEH
+FB58 ; [.2766.0020.0017] # ARABIC LETTER PEH INITIAL FORM
+FB59 ; [.2766.0020.0018] # ARABIC LETTER PEH MEDIAL FORM
+FB57 ; [.2766.0020.0019] # ARABIC LETTER PEH FINAL FORM
+FB56 ; [.2766.0020.001A] # ARABIC LETTER PEH ISOLATED FORM
+0680 ; [.2767.0020.0002] # ARABIC LETTER BEHEH
+FB5C ; [.2767.0020.0017] # ARABIC LETTER BEHEH INITIAL FORM
+FB5D ; [.2767.0020.0018] # ARABIC LETTER BEHEH MEDIAL FORM
+FB5B ; [.2767.0020.0019] # ARABIC LETTER BEHEH FINAL FORM
+FB5A ; [.2767.0020.001A] # ARABIC LETTER BEHEH ISOLATED FORM
+0750 ; [.2768.0020.0002] # ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW
+0751 ; [.2769.0020.0002] # ARABIC LETTER BEH WITH DOT BELOW AND THREE DOTS ABOVE
+0752 ; [.276A.0020.0002] # ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW
+0753 ; [.276B.0020.0002] # ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW AND TWO DOTS ABOVE
+0754 ; [.276C.0020.0002] # ARABIC LETTER BEH WITH TWO DOTS BELOW AND DOT ABOVE
+0755 ; [.276D.0020.0002] # ARABIC LETTER BEH WITH INVERTED SMALL V BELOW
+08A0 ; [.276E.0020.0002] # ARABIC LETTER BEH WITH SMALL V BELOW
+0756 ; [.276F.0020.0002] # ARABIC LETTER BEH WITH SMALL V
+08BE ; [.2770.0020.0002] # ARABIC LETTER PEH WITH SMALL V
+08A1 ; [.2771.0020.0002] # ARABIC LETTER BEH WITH HAMZA ABOVE
+08B6 ; [.2772.0020.0002] # ARABIC LETTER BEH WITH SMALL MEEM ABOVE
+08B7 ; [.2773.0020.0002] # ARABIC LETTER PEH WITH SMALL MEEM ABOVE
+0629 ; [.2774.0020.0002] # ARABIC LETTER TEH MARBUTA
+FE94 ; [.2774.0020.0019] # ARABIC LETTER TEH MARBUTA FINAL FORM
+FE93 ; [.2774.0020.001A] # ARABIC LETTER TEH MARBUTA ISOLATED FORM
+062A ; [.2775.0020.0002] # ARABIC LETTER TEH
+1EE15 ; [.2775.0020.0005] # ARABIC MATHEMATICAL TEH
+1EE35 ; [.2775.0020.0005] # ARABIC MATHEMATICAL INITIAL TEH
+1EE75 ; [.2775.0020.0005] # ARABIC MATHEMATICAL STRETCHED TEH
+1EE95 ; [.2775.0020.0005] # ARABIC MATHEMATICAL LOOPED TEH
+1EEB5 ; [.2775.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK TEH
+FE97 ; [.2775.0020.0017] # ARABIC LETTER TEH INITIAL FORM
+FE98 ; [.2775.0020.0018] # ARABIC LETTER TEH MEDIAL FORM
+FE96 ; [.2775.0020.0019] # ARABIC LETTER TEH FINAL FORM
+FE95 ; [.2775.0020.001A] # ARABIC LETTER TEH ISOLATED FORM
+FCA1 ; [.2775.0020.0017][.277F.0020.0017] # ARABIC LIGATURE TEH WITH JEEM INITIAL FORM
+FC0B ; [.2775.0020.001A][.277F.0020.001A] # ARABIC LIGATURE TEH WITH JEEM ISOLATED FORM
+FD50 ; [.2775.0020.0017][.277F.0020.0017][.280A.0020.0017] # ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM
+FDA0 ; [.2775.0020.0019][.277F.0020.0019][.282D.0020.0019] # ARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORM
+FD9F ; [.2775.0020.0019][.277F.0020.0019][.282E.0020.0019] # ARABIC LIGATURE TEH WITH JEEM WITH YEH FINAL FORM
+FCA2 ; [.2775.0020.0017][.278A.0020.0017] # ARABIC LIGATURE TEH WITH HAH INITIAL FORM
+FC0C ; [.2775.0020.001A][.278A.0020.001A] # ARABIC LIGATURE TEH WITH HAH ISOLATED FORM
+FD52 ; [.2775.0020.0017][.278A.0020.0017][.277F.0020.0017] # ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM
+FD51 ; [.2775.0020.0019][.278A.0020.0019][.277F.0020.0019] # ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM
+FD53 ; [.2775.0020.0017][.278A.0020.0017][.280A.0020.0017] # ARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORM
+FCA3 ; [.2775.0020.0017][.278B.0020.0017] # ARABIC LIGATURE TEH WITH KHAH INITIAL FORM
+FC0D ; [.2775.0020.001A][.278B.0020.001A] # ARABIC LIGATURE TEH WITH KHAH ISOLATED FORM
+FD54 ; [.2775.0020.0017][.278B.0020.0017][.280A.0020.0017] # ARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORM
+FDA2 ; [.2775.0020.0019][.278B.0020.0019][.282D.0020.0019] # ARABIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORM
+FDA1 ; [.2775.0020.0019][.278B.0020.0019][.282E.0020.0019] # ARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL FORM
+FC70 ; [.2775.0020.0019][.27A4.0020.0019] # ARABIC LIGATURE TEH WITH REH FINAL FORM
+FC71 ; [.2775.0020.0019][.27A5.0020.0019] # ARABIC LIGATURE TEH WITH ZAIN FINAL FORM
+FCA4 ; [.2775.0020.0017][.280A.0020.0017] # ARABIC LIGATURE TEH WITH MEEM INITIAL FORM
+FCE3 ; [.2775.0020.0018][.280A.0020.0018] # ARABIC LIGATURE TEH WITH MEEM MEDIAL FORM
+FC72 ; [.2775.0020.0019][.280A.0020.0019] # ARABIC LIGATURE TEH WITH MEEM FINAL FORM
+FC0E ; [.2775.0020.001A][.280A.0020.001A] # ARABIC LIGATURE TEH WITH MEEM ISOLATED FORM
+FD55 ; [.2775.0020.0017][.280A.0020.0017][.277F.0020.0017] # ARABIC LIGATURE TEH WITH MEEM WITH JEEM INITIAL FORM
+FD56 ; [.2775.0020.0017][.280A.0020.0017][.278A.0020.0017] # ARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORM
+FD57 ; [.2775.0020.0017][.280A.0020.0017][.278B.0020.0017] # ARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORM
+FDA4 ; [.2775.0020.0019][.280A.0020.0019][.282D.0020.0019] # ARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORM
+FDA3 ; [.2775.0020.0019][.280A.0020.0019][.282E.0020.0019] # ARABIC LIGATURE TEH WITH MEEM WITH YEH FINAL FORM
+FC73 ; [.2775.0020.0019][.280E.0020.0019] # ARABIC LIGATURE TEH WITH NOON FINAL FORM
+FCA5 ; [.2775.0020.0017][.2819.0020.0017] # ARABIC LIGATURE TEH WITH HEH INITIAL FORM
+FCE4 ; [.2775.0020.0018][.2819.0020.0018] # ARABIC LIGATURE TEH WITH HEH MEDIAL FORM
+FC74 ; [.2775.0020.0019][.282D.0020.0019] # ARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORM
+FC0F ; [.2775.0020.001A][.282D.0020.001A] # ARABIC LIGATURE TEH WITH ALEF MAKSURA ISOLATED FORM
+FC75 ; [.2775.0020.0019][.282E.0020.0019] # ARABIC LIGATURE TEH WITH YEH FINAL FORM
+FC10 ; [.2775.0020.001A][.282E.0020.001A] # ARABIC LIGATURE TEH WITH YEH ISOLATED FORM
+062B ; [.2776.0020.0002] # ARABIC LETTER THEH
+1EE16 ; [.2776.0020.0005] # ARABIC MATHEMATICAL THEH
+1EE36 ; [.2776.0020.0005] # ARABIC MATHEMATICAL INITIAL THEH
+1EE76 ; [.2776.0020.0005] # ARABIC MATHEMATICAL STRETCHED THEH
+1EE96 ; [.2776.0020.0005] # ARABIC MATHEMATICAL LOOPED THEH
+1EEB6 ; [.2776.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK THEH
+FE9B ; [.2776.0020.0017] # ARABIC LETTER THEH INITIAL FORM
+FE9C ; [.2776.0020.0018] # ARABIC LETTER THEH MEDIAL FORM
+FE9A ; [.2776.0020.0019] # ARABIC LETTER THEH FINAL FORM
+FE99 ; [.2776.0020.001A] # ARABIC LETTER THEH ISOLATED FORM
+FC11 ; [.2776.0020.001A][.277F.0020.001A] # ARABIC LIGATURE THEH WITH JEEM ISOLATED FORM
+FC76 ; [.2776.0020.0019][.27A4.0020.0019] # ARABIC LIGATURE THEH WITH REH FINAL FORM
+FC77 ; [.2776.0020.0019][.27A5.0020.0019] # ARABIC LIGATURE THEH WITH ZAIN FINAL FORM
+FCA6 ; [.2776.0020.0017][.280A.0020.0017] # ARABIC LIGATURE THEH WITH MEEM INITIAL FORM
+FCE5 ; [.2776.0020.0018][.280A.0020.0018] # ARABIC LIGATURE THEH WITH MEEM MEDIAL FORM
+FC78 ; [.2776.0020.0019][.280A.0020.0019] # ARABIC LIGATURE THEH WITH MEEM FINAL FORM
+FC12 ; [.2776.0020.001A][.280A.0020.001A] # ARABIC LIGATURE THEH WITH MEEM ISOLATED FORM
+FC79 ; [.2776.0020.0019][.280E.0020.0019] # ARABIC LIGATURE THEH WITH NOON FINAL FORM
+FCE6 ; [.2776.0020.0018][.2819.0020.0018] # ARABIC LIGATURE THEH WITH HEH MEDIAL FORM
+FC7A ; [.2776.0020.0019][.282D.0020.0019] # ARABIC LIGATURE THEH WITH ALEF MAKSURA FINAL FORM
+FC13 ; [.2776.0020.001A][.282D.0020.001A] # ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORM
+FC7B ; [.2776.0020.0019][.282E.0020.0019] # ARABIC LIGATURE THEH WITH YEH FINAL FORM
+FC14 ; [.2776.0020.001A][.282E.0020.001A] # ARABIC LIGATURE THEH WITH YEH ISOLATED FORM
+0679 ; [.2777.0020.0002] # ARABIC LETTER TTEH
+FB68 ; [.2777.0020.0017] # ARABIC LETTER TTEH INITIAL FORM
+FB69 ; [.2777.0020.0018] # ARABIC LETTER TTEH MEDIAL FORM
+FB67 ; [.2777.0020.0019] # ARABIC LETTER TTEH FINAL FORM
+FB66 ; [.2777.0020.001A] # ARABIC LETTER TTEH ISOLATED FORM
+067A ; [.2778.0020.0002] # ARABIC LETTER TTEHEH
+FB60 ; [.2778.0020.0017] # ARABIC LETTER TTEHEH INITIAL FORM
+FB61 ; [.2778.0020.0018] # ARABIC LETTER TTEHEH MEDIAL FORM
+FB5F ; [.2778.0020.0019] # ARABIC LETTER TTEHEH FINAL FORM
+FB5E ; [.2778.0020.001A] # ARABIC LETTER TTEHEH ISOLATED FORM
+067C ; [.2779.0020.0002] # ARABIC LETTER TEH WITH RING
+067D ; [.277A.0020.0002] # ARABIC LETTER TEH WITH THREE DOTS ABOVE DOWNWARDS
+067F ; [.277B.0020.0002] # ARABIC LETTER TEHEH
+FB64 ; [.277B.0020.0017] # ARABIC LETTER TEHEH INITIAL FORM
+FB65 ; [.277B.0020.0018] # ARABIC LETTER TEHEH MEDIAL FORM
+FB63 ; [.277B.0020.0019] # ARABIC LETTER TEHEH FINAL FORM
+FB62 ; [.277B.0020.001A] # ARABIC LETTER TEHEH ISOLATED FORM
+08B8 ; [.277C.0020.0002] # ARABIC LETTER TEH WITH SMALL TEH ABOVE
+08BF ; [.277D.0020.0002] # ARABIC LETTER TEH WITH SMALL V
+08C0 ; [.277E.0020.0002] # ARABIC LETTER TTEH WITH SMALL V
+062C ; [.277F.0020.0002] # ARABIC LETTER JEEM
+1EE02 ; [.277F.0020.0005] # ARABIC MATHEMATICAL JEEM
+1EE22 ; [.277F.0020.0005] # ARABIC MATHEMATICAL INITIAL JEEM
+1EE42 ; [.277F.0020.0005] # ARABIC MATHEMATICAL TAILED JEEM
+1EE62 ; [.277F.0020.0005] # ARABIC MATHEMATICAL STRETCHED JEEM
+1EE82 ; [.277F.0020.0005] # ARABIC MATHEMATICAL LOOPED JEEM
+1EEA2 ; [.277F.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK JEEM
+FE9F ; [.277F.0020.0017] # ARABIC LETTER JEEM INITIAL FORM
+FEA0 ; [.277F.0020.0018] # ARABIC LETTER JEEM MEDIAL FORM
+FE9E ; [.277F.0020.0019] # ARABIC LETTER JEEM FINAL FORM
+FE9D ; [.277F.0020.001A] # ARABIC LETTER JEEM ISOLATED FORM
+FCA7 ; [.277F.0020.0017][.278A.0020.0017] # ARABIC LIGATURE JEEM WITH HAH INITIAL FORM
+FC15 ; [.277F.0020.001A][.278A.0020.001A] # ARABIC LIGATURE JEEM WITH HAH ISOLATED FORM
+FDA6 ; [.277F.0020.0019][.278A.0020.0019][.282D.0020.0019] # ARABIC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORM
+FDBE ; [.277F.0020.0019][.278A.0020.0019][.282E.0020.0019] # ARABIC LIGATURE JEEM WITH HAH WITH YEH FINAL FORM
+FDFB ; [.277F.0020.001A][.2802.0020.001A][*0209.0020.001A][.277F.0020.001A][.2802.0020.001A][.2762.0020.001A][.2802.0020.001A][.2819.0020.001A] # ARABIC LIGATURE JALLAJALALOUHOU
+FCA8 ; [.277F.0020.0017][.280A.0020.0017] # ARABIC LIGATURE JEEM WITH MEEM INITIAL FORM
+FC16 ; [.277F.0020.001A][.280A.0020.001A] # ARABIC LIGATURE JEEM WITH MEEM ISOLATED FORM
+FD59 ; [.277F.0020.0017][.280A.0020.0017][.278A.0020.0017] # ARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORM
+FD58 ; [.277F.0020.0019][.280A.0020.0019][.278A.0020.0019] # ARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORM
+FDA7 ; [.277F.0020.0019][.280A.0020.0019][.282D.0020.0019] # ARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAKSURA FINAL FORM
+FDA5 ; [.277F.0020.0019][.280A.0020.0019][.282E.0020.0019] # ARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL FORM
+FD1D ; [.277F.0020.0019][.282D.0020.0019] # ARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORM
+FD01 ; [.277F.0020.001A][.282D.0020.001A] # ARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORM
+FD1E ; [.277F.0020.0019][.282E.0020.0019] # ARABIC LIGATURE JEEM WITH YEH FINAL FORM
+FD02 ; [.277F.0020.001A][.282E.0020.001A] # ARABIC LIGATURE JEEM WITH YEH ISOLATED FORM
+0683 ; [.2780.0020.0002] # ARABIC LETTER NYEH
+FB78 ; [.2780.0020.0017] # ARABIC LETTER NYEH INITIAL FORM
+FB79 ; [.2780.0020.0018] # ARABIC LETTER NYEH MEDIAL FORM
+FB77 ; [.2780.0020.0019] # ARABIC LETTER NYEH FINAL FORM
+FB76 ; [.2780.0020.001A] # ARABIC LETTER NYEH ISOLATED FORM
+0684 ; [.2781.0020.0002] # ARABIC LETTER DYEH
+FB74 ; [.2781.0020.0017] # ARABIC LETTER DYEH INITIAL FORM
+FB75 ; [.2781.0020.0018] # ARABIC LETTER DYEH MEDIAL FORM
+FB73 ; [.2781.0020.0019] # ARABIC LETTER DYEH FINAL FORM
+FB72 ; [.2781.0020.001A] # ARABIC LETTER DYEH ISOLATED FORM
+088A ; [.2782.0020.0002] # ARABIC LETTER HAH WITH INVERTED SMALL V BELOW
+0686 ; [.2783.0020.0002] # ARABIC LETTER TCHEH
+FB7C ; [.2783.0020.0017] # ARABIC LETTER TCHEH INITIAL FORM
+FB7D ; [.2783.0020.0018] # ARABIC LETTER TCHEH MEDIAL FORM
+FB7B ; [.2783.0020.0019] # ARABIC LETTER TCHEH FINAL FORM
+FB7A ; [.2783.0020.001A] # ARABIC LETTER TCHEH ISOLATED FORM
+06BF ; [.2784.0020.0002] # ARABIC LETTER TCHEH WITH DOT ABOVE
+0687 ; [.2785.0020.0002] # ARABIC LETTER TCHEHEH
+FB80 ; [.2785.0020.0017] # ARABIC LETTER TCHEHEH INITIAL FORM
+FB81 ; [.2785.0020.0018] # ARABIC LETTER TCHEHEH MEDIAL FORM
+FB7F ; [.2785.0020.0019] # ARABIC LETTER TCHEHEH FINAL FORM
+FB7E ; [.2785.0020.001A] # ARABIC LETTER TCHEHEH ISOLATED FORM
+08A2 ; [.2786.0020.0002] # ARABIC LETTER JEEM WITH TWO DOTS ABOVE
+08C1 ; [.2787.0020.0002] # ARABIC LETTER TCHEH WITH SMALL V
+08C5 ; [.2788.0020.0002] # ARABIC LETTER JEEM WITH THREE DOTS ABOVE
+08C6 ; [.2789.0020.0002] # ARABIC LETTER JEEM WITH THREE DOTS BELOW
+062D ; [.278A.0020.0002] # ARABIC LETTER HAH
+1EE07 ; [.278A.0020.0005] # ARABIC MATHEMATICAL HAH
+1EE27 ; [.278A.0020.0005] # ARABIC MATHEMATICAL INITIAL HAH
+1EE47 ; [.278A.0020.0005] # ARABIC MATHEMATICAL TAILED HAH
+1EE67 ; [.278A.0020.0005] # ARABIC MATHEMATICAL STRETCHED HAH
+1EE87 ; [.278A.0020.0005] # ARABIC MATHEMATICAL LOOPED HAH
+1EEA7 ; [.278A.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK HAH
+FEA3 ; [.278A.0020.0017] # ARABIC LETTER HAH INITIAL FORM
+FEA4 ; [.278A.0020.0018] # ARABIC LETTER HAH MEDIAL FORM
+FEA2 ; [.278A.0020.0019] # ARABIC LETTER HAH FINAL FORM
+FEA1 ; [.278A.0020.001A] # ARABIC LETTER HAH ISOLATED FORM
+FCA9 ; [.278A.0020.0017][.277F.0020.0017] # ARABIC LIGATURE HAH WITH JEEM INITIAL FORM
+FC17 ; [.278A.0020.001A][.277F.0020.001A] # ARABIC LIGATURE HAH WITH JEEM ISOLATED FORM
+FDBF ; [.278A.0020.0019][.277F.0020.0019][.282E.0020.0019] # ARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORM
+FCAA ; [.278A.0020.0017][.280A.0020.0017] # ARABIC LIGATURE HAH WITH MEEM INITIAL FORM
+FC18 ; [.278A.0020.001A][.280A.0020.001A] # ARABIC LIGATURE HAH WITH MEEM ISOLATED FORM
+FD5B ; [.278A.0020.0019][.280A.0020.0019][.282D.0020.0019] # ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORM
+FD5A ; [.278A.0020.0019][.280A.0020.0019][.282E.0020.0019] # ARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM
+FD1B ; [.278A.0020.0019][.282D.0020.0019] # ARABIC LIGATURE HAH WITH ALEF MAKSURA FINAL FORM
+FCFF ; [.278A.0020.001A][.282D.0020.001A] # ARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED FORM
+FD1C ; [.278A.0020.0019][.282E.0020.0019] # ARABIC LIGATURE HAH WITH YEH FINAL FORM
+FD00 ; [.278A.0020.001A][.282E.0020.001A] # ARABIC LIGATURE HAH WITH YEH ISOLATED FORM
+062E ; [.278B.0020.0002] # ARABIC LETTER KHAH
+1EE17 ; [.278B.0020.0005] # ARABIC MATHEMATICAL KHAH
+1EE37 ; [.278B.0020.0005] # ARABIC MATHEMATICAL INITIAL KHAH
+1EE57 ; [.278B.0020.0005] # ARABIC MATHEMATICAL TAILED KHAH
+1EE77 ; [.278B.0020.0005] # ARABIC MATHEMATICAL STRETCHED KHAH
+1EE97 ; [.278B.0020.0005] # ARABIC MATHEMATICAL LOOPED KHAH
+1EEB7 ; [.278B.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK KHAH
+FEA7 ; [.278B.0020.0017] # ARABIC LETTER KHAH INITIAL FORM
+FEA8 ; [.278B.0020.0018] # ARABIC LETTER KHAH MEDIAL FORM
+FEA6 ; [.278B.0020.0019] # ARABIC LETTER KHAH FINAL FORM
+FEA5 ; [.278B.0020.001A] # ARABIC LETTER KHAH ISOLATED FORM
+FCAB ; [.278B.0020.0017][.277F.0020.0017] # ARABIC LIGATURE KHAH WITH JEEM INITIAL FORM
+FC19 ; [.278B.0020.001A][.277F.0020.001A] # ARABIC LIGATURE KHAH WITH JEEM ISOLATED FORM
+FC1A ; [.278B.0020.001A][.278A.0020.001A] # ARABIC LIGATURE KHAH WITH HAH ISOLATED FORM
+FCAC ; [.278B.0020.0017][.280A.0020.0017] # ARABIC LIGATURE KHAH WITH MEEM INITIAL FORM
+FC1B ; [.278B.0020.001A][.280A.0020.001A] # ARABIC LIGATURE KHAH WITH MEEM ISOLATED FORM
+FD1F ; [.278B.0020.0019][.282D.0020.0019] # ARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FORM
+FD03 ; [.278B.0020.001A][.282D.0020.001A] # ARABIC LIGATURE KHAH WITH ALEF MAKSURA ISOLATED FORM
+FD20 ; [.278B.0020.0019][.282E.0020.0019] # ARABIC LIGATURE KHAH WITH YEH FINAL FORM
+FD04 ; [.278B.0020.001A][.282E.0020.001A] # ARABIC LIGATURE KHAH WITH YEH ISOLATED FORM
+0681 ; [.278C.0020.0002] # ARABIC LETTER HAH WITH HAMZA ABOVE
+0682 ; [.278D.0020.0002] # ARABIC LETTER HAH WITH TWO DOTS VERTICAL ABOVE
+0685 ; [.278E.0020.0002] # ARABIC LETTER HAH WITH THREE DOTS ABOVE
+0757 ; [.278F.0020.0002] # ARABIC LETTER HAH WITH TWO DOTS ABOVE
+0758 ; [.2790.0020.0002] # ARABIC LETTER HAH WITH THREE DOTS POINTING UPWARDS BELOW
+076E ; [.2791.0020.0002] # ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH BELOW
+076F ; [.2792.0020.0002] # ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH AND TWO DOTS
+0772 ; [.2793.0020.0002] # ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH ABOVE
+077C ; [.2794.0020.0002] # ARABIC LETTER HAH WITH EXTENDED ARABIC-INDIC DIGIT FOUR BELOW
+062F ; [.2795.0020.0002] # ARABIC LETTER DAL
+1EE03 ; [.2795.0020.0005] # ARABIC MATHEMATICAL DAL
+1EE83 ; [.2795.0020.0005] # ARABIC MATHEMATICAL LOOPED DAL
+1EEA3 ; [.2795.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK DAL
+FEAA ; [.2795.0020.0019] # ARABIC LETTER DAL FINAL FORM
+FEA9 ; [.2795.0020.001A] # ARABIC LETTER DAL ISOLATED FORM
+0630 ; [.2796.0020.0002] # ARABIC LETTER THAL
+1EE18 ; [.2796.0020.0005] # ARABIC MATHEMATICAL THAL
+1EE98 ; [.2796.0020.0005] # ARABIC MATHEMATICAL LOOPED THAL
+1EEB8 ; [.2796.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK THAL
+FEAC ; [.2796.0020.0019] # ARABIC LETTER THAL FINAL FORM
+FEAB ; [.2796.0020.001A] # ARABIC LETTER THAL ISOLATED FORM
+FC5B ; [.2796.0020.001A][.0000.0098.001A] # ARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORM
+0688 ; [.2797.0020.0002] # ARABIC LETTER DDAL
+FB89 ; [.2797.0020.0019] # ARABIC LETTER DDAL FINAL FORM
+FB88 ; [.2797.0020.001A] # ARABIC LETTER DDAL ISOLATED FORM
+0689 ; [.2798.0020.0002] # ARABIC LETTER DAL WITH RING
+068A ; [.2799.0020.0002] # ARABIC LETTER DAL WITH DOT BELOW
+068B ; [.279A.0020.0002] # ARABIC LETTER DAL WITH DOT BELOW AND SMALL TAH
+068C ; [.279B.0020.0002] # ARABIC LETTER DAHAL
+FB85 ; [.279B.0020.0019] # ARABIC LETTER DAHAL FINAL FORM
+FB84 ; [.279B.0020.001A] # ARABIC LETTER DAHAL ISOLATED FORM
+068D ; [.279C.0020.0002] # ARABIC LETTER DDAHAL
+FB83 ; [.279C.0020.0019] # ARABIC LETTER DDAHAL FINAL FORM
+FB82 ; [.279C.0020.001A] # ARABIC LETTER DDAHAL ISOLATED FORM
+08AE ; [.279D.0020.0002] # ARABIC LETTER DAL WITH THREE DOTS BELOW
+068E ; [.279E.0020.0002] # ARABIC LETTER DUL
+FB87 ; [.279E.0020.0019] # ARABIC LETTER DUL FINAL FORM
+FB86 ; [.279E.0020.001A] # ARABIC LETTER DUL ISOLATED FORM
+068F ; [.279F.0020.0002] # ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS
+0690 ; [.27A0.0020.0002] # ARABIC LETTER DAL WITH FOUR DOTS ABOVE
+06EE ; [.27A1.0020.0002] # ARABIC LETTER DAL WITH INVERTED V
+0759 ; [.27A2.0020.0002] # ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW AND SMALL TAH
+075A ; [.27A3.0020.0002] # ARABIC LETTER DAL WITH INVERTED SMALL V BELOW
+0631 ; [.27A4.0020.0002] # ARABIC LETTER REH
+1EE13 ; [.27A4.0020.0005] # ARABIC MATHEMATICAL REH
+1EE93 ; [.27A4.0020.0005] # ARABIC MATHEMATICAL LOOPED REH
+1EEB3 ; [.27A4.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK REH
+FEAE ; [.27A4.0020.0019] # ARABIC LETTER REH FINAL FORM
+FEAD ; [.27A4.0020.001A] # ARABIC LETTER REH ISOLATED FORM
+FC5C ; [.27A4.0020.001A][.0000.0098.001A] # ARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORM
+FDF6 ; [.27A4.0020.001A][.27B7.0020.001A][.281F.0020.001A][.2802.0020.001A] # ARABIC LIGATURE RASOUL ISOLATED FORM
+FDFC ; [.27A4.0020.001A][.282F.0020.001A][.2762.0020.001A][.2802.0020.001A] # RIAL SIGN
+0632 ; [.27A5.0020.0002] # ARABIC LETTER ZAIN
+1EE06 ; [.27A5.0020.0005] # ARABIC MATHEMATICAL ZAIN
+1EE86 ; [.27A5.0020.0005] # ARABIC MATHEMATICAL LOOPED ZAIN
+1EEA6 ; [.27A5.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK ZAIN
+FEB0 ; [.27A5.0020.0019] # ARABIC LETTER ZAIN FINAL FORM
+FEAF ; [.27A5.0020.001A] # ARABIC LETTER ZAIN ISOLATED FORM
+0691 ; [.27A6.0020.0002] # ARABIC LETTER RREH
+FB8D ; [.27A6.0020.0019] # ARABIC LETTER RREH FINAL FORM
+FB8C ; [.27A6.0020.001A] # ARABIC LETTER RREH ISOLATED FORM
+0692 ; [.27A7.0020.0002] # ARABIC LETTER REH WITH SMALL V
+0693 ; [.27A8.0020.0002] # ARABIC LETTER REH WITH RING
+0694 ; [.27A9.0020.0002] # ARABIC LETTER REH WITH DOT BELOW
+0695 ; [.27AA.0020.0002] # ARABIC LETTER REH WITH SMALL V BELOW
+0696 ; [.27AB.0020.0002] # ARABIC LETTER REH WITH DOT BELOW AND DOT ABOVE
+0697 ; [.27AC.0020.0002] # ARABIC LETTER REH WITH TWO DOTS ABOVE
+0698 ; [.27AD.0020.0002] # ARABIC LETTER JEH
+FB8B ; [.27AD.0020.0019] # ARABIC LETTER JEH FINAL FORM
+FB8A ; [.27AD.0020.001A] # ARABIC LETTER JEH ISOLATED FORM
+0699 ; [.27AE.0020.0002] # ARABIC LETTER REH WITH FOUR DOTS ABOVE
+06EF ; [.27AF.0020.0002] # ARABIC LETTER REH WITH INVERTED V
+075B ; [.27B0.0020.0002] # ARABIC LETTER REH WITH STROKE
+076B ; [.27B1.0020.0002] # ARABIC LETTER REH WITH TWO DOTS VERTICALLY ABOVE
+076C ; [.27B2.0020.0002] # ARABIC LETTER REH WITH HAMZA ABOVE
+0771 ; [.27B3.0020.0002] # ARABIC LETTER REH WITH SMALL ARABIC LETTER TAH AND TWO DOTS
+08AA ; [.27B4.0020.0002] # ARABIC LETTER REH WITH LOOP
+08B2 ; [.27B5.0020.0002] # ARABIC LETTER ZAIN WITH INVERTED V ABOVE
+08B9 ; [.27B6.0020.0002] # ARABIC LETTER REH WITH SMALL NOON ABOVE
+0633 ; [.27B7.0020.0002] # ARABIC LETTER SEEN
+1EE0E ; [.27B7.0020.0005] # ARABIC MATHEMATICAL SEEN
+1EE2E ; [.27B7.0020.0005] # ARABIC MATHEMATICAL INITIAL SEEN
+1EE4E ; [.27B7.0020.0005] # ARABIC MATHEMATICAL TAILED SEEN
+1EE6E ; [.27B7.0020.0005] # ARABIC MATHEMATICAL STRETCHED SEEN
+1EE8E ; [.27B7.0020.0005] # ARABIC MATHEMATICAL LOOPED SEEN
+1EEAE ; [.27B7.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK SEEN
+FEB3 ; [.27B7.0020.0017] # ARABIC LETTER SEEN INITIAL FORM
+FEB4 ; [.27B7.0020.0018] # ARABIC LETTER SEEN MEDIAL FORM
+FEB2 ; [.27B7.0020.0019] # ARABIC LETTER SEEN FINAL FORM
+FEB1 ; [.27B7.0020.001A] # ARABIC LETTER SEEN ISOLATED FORM
+FCAD ; [.27B7.0020.0017][.277F.0020.0017] # ARABIC LIGATURE SEEN WITH JEEM INITIAL FORM
+FD34 ; [.27B7.0020.0018][.277F.0020.0018] # ARABIC LIGATURE SEEN WITH JEEM MEDIAL FORM
+FC1C ; [.27B7.0020.001A][.277F.0020.001A] # ARABIC LIGATURE SEEN WITH JEEM ISOLATED FORM
+FD5D ; [.27B7.0020.0017][.277F.0020.0017][.278A.0020.0017] # ARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORM
+FD5E ; [.27B7.0020.0019][.277F.0020.0019][.282D.0020.0019] # ARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORM
+FCAE ; [.27B7.0020.0017][.278A.0020.0017] # ARABIC LIGATURE SEEN WITH HAH INITIAL FORM
+FD35 ; [.27B7.0020.0018][.278A.0020.0018] # ARABIC LIGATURE SEEN WITH HAH MEDIAL FORM
+FC1D ; [.27B7.0020.001A][.278A.0020.001A] # ARABIC LIGATURE SEEN WITH HAH ISOLATED FORM
+FD5C ; [.27B7.0020.0017][.278A.0020.0017][.277F.0020.0017] # ARABIC LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORM
+FCAF ; [.27B7.0020.0017][.278B.0020.0017] # ARABIC LIGATURE SEEN WITH KHAH INITIAL FORM
+FD36 ; [.27B7.0020.0018][.278B.0020.0018] # ARABIC LIGATURE SEEN WITH KHAH MEDIAL FORM
+FC1E ; [.27B7.0020.001A][.278B.0020.001A] # ARABIC LIGATURE SEEN WITH KHAH ISOLATED FORM
+FDA8 ; [.27B7.0020.0019][.278B.0020.0019][.282D.0020.0019] # ARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FORM
+FDC6 ; [.27B7.0020.0019][.278B.0020.0019][.282E.0020.0019] # ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM
+FD2A ; [.27B7.0020.0019][.27A4.0020.0019] # ARABIC LIGATURE SEEN WITH REH FINAL FORM
+FD0E ; [.27B7.0020.001A][.27A4.0020.001A] # ARABIC LIGATURE SEEN WITH REH ISOLATED FORM
+FCB0 ; [.27B7.0020.0017][.280A.0020.0017] # ARABIC LIGATURE SEEN WITH MEEM INITIAL FORM
+FCE7 ; [.27B7.0020.0018][.280A.0020.0018] # ARABIC LIGATURE SEEN WITH MEEM MEDIAL FORM
+FC1F ; [.27B7.0020.001A][.280A.0020.001A] # ARABIC LIGATURE SEEN WITH MEEM ISOLATED FORM
+FD61 ; [.27B7.0020.0017][.280A.0020.0017][.277F.0020.0017] # ARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORM
+FD60 ; [.27B7.0020.0017][.280A.0020.0017][.278A.0020.0017] # ARABIC LIGATURE SEEN WITH MEEM WITH HAH INITIAL FORM
+FD5F ; [.27B7.0020.0019][.280A.0020.0019][.278A.0020.0019] # ARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORM
+FD63 ; [.27B7.0020.0017][.280A.0020.0017][.280A.0020.0017] # ARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORM
+FD62 ; [.27B7.0020.0019][.280A.0020.0019][.280A.0020.0019] # ARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORM
+FD31 ; [.27B7.0020.0017][.2819.0020.0017] # ARABIC LIGATURE SEEN WITH HEH INITIAL FORM
+FCE8 ; [.27B7.0020.0018][.2819.0020.0018] # ARABIC LIGATURE SEEN WITH HEH MEDIAL FORM
+FD17 ; [.27B7.0020.0019][.282D.0020.0019] # ARABIC LIGATURE SEEN WITH ALEF MAKSURA FINAL FORM
+FCFB ; [.27B7.0020.001A][.282D.0020.001A] # ARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORM
+FD18 ; [.27B7.0020.0019][.282E.0020.0019] # ARABIC LIGATURE SEEN WITH YEH FINAL FORM
+FCFC ; [.27B7.0020.001A][.282E.0020.001A] # ARABIC LIGATURE SEEN WITH YEH ISOLATED FORM
+0634 ; [.27B8.0020.0002] # ARABIC LETTER SHEEN
+1EE14 ; [.27B8.0020.0005] # ARABIC MATHEMATICAL SHEEN
+1EE34 ; [.27B8.0020.0005] # ARABIC MATHEMATICAL INITIAL SHEEN
+1EE54 ; [.27B8.0020.0005] # ARABIC MATHEMATICAL TAILED SHEEN
+1EE74 ; [.27B8.0020.0005] # ARABIC MATHEMATICAL STRETCHED SHEEN
+1EE94 ; [.27B8.0020.0005] # ARABIC MATHEMATICAL LOOPED SHEEN
+1EEB4 ; [.27B8.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK SHEEN
+FEB7 ; [.27B8.0020.0017] # ARABIC LETTER SHEEN INITIAL FORM
+FEB8 ; [.27B8.0020.0018] # ARABIC LETTER SHEEN MEDIAL FORM
+FEB6 ; [.27B8.0020.0019] # ARABIC LETTER SHEEN FINAL FORM
+FEB5 ; [.27B8.0020.001A] # ARABIC LETTER SHEEN ISOLATED FORM
+FD2D ; [.27B8.0020.0017][.277F.0020.0017] # ARABIC LIGATURE SHEEN WITH JEEM INITIAL FORM
+FD37 ; [.27B8.0020.0018][.277F.0020.0018] # ARABIC LIGATURE SHEEN WITH JEEM MEDIAL FORM
+FD25 ; [.27B8.0020.0019][.277F.0020.0019] # ARABIC LIGATURE SHEEN WITH JEEM FINAL FORM
+FD09 ; [.27B8.0020.001A][.277F.0020.001A] # ARABIC LIGATURE SHEEN WITH JEEM ISOLATED FORM
+FD69 ; [.27B8.0020.0019][.277F.0020.0019][.282E.0020.0019] # ARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORM
+FD2E ; [.27B8.0020.0017][.278A.0020.0017] # ARABIC LIGATURE SHEEN WITH HAH INITIAL FORM
+FD38 ; [.27B8.0020.0018][.278A.0020.0018] # ARABIC LIGATURE SHEEN WITH HAH MEDIAL FORM
+FD26 ; [.27B8.0020.0019][.278A.0020.0019] # ARABIC LIGATURE SHEEN WITH HAH FINAL FORM
+FD0A ; [.27B8.0020.001A][.278A.0020.001A] # ARABIC LIGATURE SHEEN WITH HAH ISOLATED FORM
+FD68 ; [.27B8.0020.0017][.278A.0020.0017][.280A.0020.0017] # ARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORM
+FD67 ; [.27B8.0020.0019][.278A.0020.0019][.280A.0020.0019] # ARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL FORM
+FDAA ; [.27B8.0020.0019][.278A.0020.0019][.282E.0020.0019] # ARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORM
+FD2F ; [.27B8.0020.0017][.278B.0020.0017] # ARABIC LIGATURE SHEEN WITH KHAH INITIAL FORM
+FD39 ; [.27B8.0020.0018][.278B.0020.0018] # ARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORM
+FD27 ; [.27B8.0020.0019][.278B.0020.0019] # ARABIC LIGATURE SHEEN WITH KHAH FINAL FORM
+FD0B ; [.27B8.0020.001A][.278B.0020.001A] # ARABIC LIGATURE SHEEN WITH KHAH ISOLATED FORM
+FD29 ; [.27B8.0020.0019][.27A4.0020.0019] # ARABIC LIGATURE SHEEN WITH REH FINAL FORM
+FD0D ; [.27B8.0020.001A][.27A4.0020.001A] # ARABIC LIGATURE SHEEN WITH REH ISOLATED FORM
+FD30 ; [.27B8.0020.0017][.280A.0020.0017] # ARABIC LIGATURE SHEEN WITH MEEM INITIAL FORM
+FCE9 ; [.27B8.0020.0018][.280A.0020.0018] # ARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORM
+FD28 ; [.27B8.0020.0019][.280A.0020.0019] # ARABIC LIGATURE SHEEN WITH MEEM FINAL FORM
+FD0C ; [.27B8.0020.001A][.280A.0020.001A] # ARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORM
+FD6B ; [.27B8.0020.0017][.280A.0020.0017][.278B.0020.0017] # ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORM
+FD6A ; [.27B8.0020.0019][.280A.0020.0019][.278B.0020.0019] # ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORM
+FD6D ; [.27B8.0020.0017][.280A.0020.0017][.280A.0020.0017] # ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORM
+FD6C ; [.27B8.0020.0019][.280A.0020.0019][.280A.0020.0019] # ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORM
+FD32 ; [.27B8.0020.0017][.2819.0020.0017] # ARABIC LIGATURE SHEEN WITH HEH INITIAL FORM
+FCEA ; [.27B8.0020.0018][.2819.0020.0018] # ARABIC LIGATURE SHEEN WITH HEH MEDIAL FORM
+FD19 ; [.27B8.0020.0019][.282D.0020.0019] # ARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORM
+FCFD ; [.27B8.0020.001A][.282D.0020.001A] # ARABIC LIGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORM
+FD1A ; [.27B8.0020.0019][.282E.0020.0019] # ARABIC LIGATURE SHEEN WITH YEH FINAL FORM
+FCFE ; [.27B8.0020.001A][.282E.0020.001A] # ARABIC LIGATURE SHEEN WITH YEH ISOLATED FORM
+069A ; [.27B9.0020.0002] # ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE
+069B ; [.27BA.0020.0002] # ARABIC LETTER SEEN WITH THREE DOTS BELOW
+069C ; [.27BB.0020.0002] # ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE
+06FA ; [.27BC.0020.0002] # ARABIC LETTER SHEEN WITH DOT BELOW
+075C ; [.27BD.0020.0002] # ARABIC LETTER SEEN WITH FOUR DOTS ABOVE
+076D ; [.27BE.0020.0002] # ARABIC LETTER SEEN WITH TWO DOTS VERTICALLY ABOVE
+0770 ; [.27BF.0020.0002] # ARABIC LETTER SEEN WITH SMALL ARABIC LETTER TAH AND TWO DOTS
+077D ; [.27C0.0020.0002] # ARABIC LETTER SEEN WITH EXTENDED ARABIC-INDIC DIGIT FOUR ABOVE
+077E ; [.27C1.0020.0002] # ARABIC LETTER SEEN WITH INVERTED V
+0635 ; [.27C2.0020.0002] # ARABIC LETTER SAD
+1EE11 ; [.27C2.0020.0005] # ARABIC MATHEMATICAL SAD
+1EE31 ; [.27C2.0020.0005] # ARABIC MATHEMATICAL INITIAL SAD
+1EE51 ; [.27C2.0020.0005] # ARABIC MATHEMATICAL TAILED SAD
+1EE71 ; [.27C2.0020.0005] # ARABIC MATHEMATICAL STRETCHED SAD
+1EE91 ; [.27C2.0020.0005] # ARABIC MATHEMATICAL LOOPED SAD
+1EEB1 ; [.27C2.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK SAD
+FEBB ; [.27C2.0020.0017] # ARABIC LETTER SAD INITIAL FORM
+FEBC ; [.27C2.0020.0018] # ARABIC LETTER SAD MEDIAL FORM
+FEBA ; [.27C2.0020.0019] # ARABIC LETTER SAD FINAL FORM
+FEB9 ; [.27C2.0020.001A] # ARABIC LETTER SAD ISOLATED FORM
+FCB1 ; [.27C2.0020.0017][.278A.0020.0017] # ARABIC LIGATURE SAD WITH HAH INITIAL FORM
+FC20 ; [.27C2.0020.001A][.278A.0020.001A] # ARABIC LIGATURE SAD WITH HAH ISOLATED FORM
+FD65 ; [.27C2.0020.0017][.278A.0020.0017][.278A.0020.0017] # ARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORM
+FD64 ; [.27C2.0020.0019][.278A.0020.0019][.278A.0020.0019] # ARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORM
+FDA9 ; [.27C2.0020.0019][.278A.0020.0019][.282E.0020.0019] # ARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORM
+FCB2 ; [.27C2.0020.0017][.278B.0020.0017] # ARABIC LIGATURE SAD WITH KHAH INITIAL FORM
+FD2B ; [.27C2.0020.0019][.27A4.0020.0019] # ARABIC LIGATURE SAD WITH REH FINAL FORM
+FD0F ; [.27C2.0020.001A][.27A4.0020.001A] # ARABIC LIGATURE SAD WITH REH ISOLATED FORM
+FDF5 ; [.27C2.0020.001A][.2802.0020.001A][.27CE.0020.001A][.280A.0020.001A] # ARABIC LIGATURE SALAM ISOLATED FORM
+FDF9 ; [.27C2.0020.001A][.2802.0020.001A][.282D.0020.001A] # ARABIC LIGATURE SALLA ISOLATED FORM
+FDFA ; [.27C2.0020.001A][.2802.0020.001A][.282D.0020.001A][*0209.0020.001A][.2762.0020.001A][.2802.0020.001A][.2802.0020.001A][.2819.0020.001A][*0209.0020.001A][.27CE.0020.001A][.2802.0020.001A][.282E.0020.001A][.2819.0020.001A][*0209.0020.001A][.281F.0020.001A][.27B7.0020.001A][.2802.0020.001A][.280A.0020.001A] # ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM
+FDF0 ; [.27C2.0020.001A][.2802.0020.001A][.283C.0020.001A] # ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM
+FCB3 ; [.27C2.0020.0017][.280A.0020.0017] # ARABIC LIGATURE SAD WITH MEEM INITIAL FORM
+FC21 ; [.27C2.0020.001A][.280A.0020.001A] # ARABIC LIGATURE SAD WITH MEEM ISOLATED FORM
+FDC5 ; [.27C2.0020.0017][.280A.0020.0017][.280A.0020.0017] # ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM
+FD66 ; [.27C2.0020.0019][.280A.0020.0019][.280A.0020.0019] # ARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORM
+FD21 ; [.27C2.0020.0019][.282D.0020.0019] # ARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORM
+FD05 ; [.27C2.0020.001A][.282D.0020.001A] # ARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORM
+FD22 ; [.27C2.0020.0019][.282E.0020.0019] # ARABIC LIGATURE SAD WITH YEH FINAL FORM
+FD06 ; [.27C2.0020.001A][.282E.0020.001A] # ARABIC LIGATURE SAD WITH YEH ISOLATED FORM
+0636 ; [.27C3.0020.0002] # ARABIC LETTER DAD
+1EE19 ; [.27C3.0020.0005] # ARABIC MATHEMATICAL DAD
+1EE39 ; [.27C3.0020.0005] # ARABIC MATHEMATICAL INITIAL DAD
+1EE59 ; [.27C3.0020.0005] # ARABIC MATHEMATICAL TAILED DAD
+1EE79 ; [.27C3.0020.0005] # ARABIC MATHEMATICAL STRETCHED DAD
+1EE99 ; [.27C3.0020.0005] # ARABIC MATHEMATICAL LOOPED DAD
+1EEB9 ; [.27C3.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK DAD
+FEBF ; [.27C3.0020.0017] # ARABIC LETTER DAD INITIAL FORM
+FEC0 ; [.27C3.0020.0018] # ARABIC LETTER DAD MEDIAL FORM
+FEBE ; [.27C3.0020.0019] # ARABIC LETTER DAD FINAL FORM
+FEBD ; [.27C3.0020.001A] # ARABIC LETTER DAD ISOLATED FORM
+FCB4 ; [.27C3.0020.0017][.277F.0020.0017] # ARABIC LIGATURE DAD WITH JEEM INITIAL FORM
+FC22 ; [.27C3.0020.001A][.277F.0020.001A] # ARABIC LIGATURE DAD WITH JEEM ISOLATED FORM
+FCB5 ; [.27C3.0020.0017][.278A.0020.0017] # ARABIC LIGATURE DAD WITH HAH INITIAL FORM
+FC23 ; [.27C3.0020.001A][.278A.0020.001A] # ARABIC LIGATURE DAD WITH HAH ISOLATED FORM
+FD6E ; [.27C3.0020.0019][.278A.0020.0019][.282D.0020.0019] # ARABIC LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORM
+FDAB ; [.27C3.0020.0019][.278A.0020.0019][.282E.0020.0019] # ARABIC LIGATURE DAD WITH HAH WITH YEH FINAL FORM
+FCB6 ; [.27C3.0020.0017][.278B.0020.0017] # ARABIC LIGATURE DAD WITH KHAH INITIAL FORM
+FC24 ; [.27C3.0020.001A][.278B.0020.001A] # ARABIC LIGATURE DAD WITH KHAH ISOLATED FORM
+FD70 ; [.27C3.0020.0017][.278B.0020.0017][.280A.0020.0017] # ARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORM
+FD6F ; [.27C3.0020.0019][.278B.0020.0019][.280A.0020.0019] # ARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORM
+FD2C ; [.27C3.0020.0019][.27A4.0020.0019] # ARABIC LIGATURE DAD WITH REH FINAL FORM
+FD10 ; [.27C3.0020.001A][.27A4.0020.001A] # ARABIC LIGATURE DAD WITH REH ISOLATED FORM
+FCB7 ; [.27C3.0020.0017][.280A.0020.0017] # ARABIC LIGATURE DAD WITH MEEM INITIAL FORM
+FC25 ; [.27C3.0020.001A][.280A.0020.001A] # ARABIC LIGATURE DAD WITH MEEM ISOLATED FORM
+FD23 ; [.27C3.0020.0019][.282D.0020.0019] # ARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORM
+FD07 ; [.27C3.0020.001A][.282D.0020.001A] # ARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORM
+FD24 ; [.27C3.0020.0019][.282E.0020.0019] # ARABIC LIGATURE DAD WITH YEH FINAL FORM
+FD08 ; [.27C3.0020.001A][.282E.0020.001A] # ARABIC LIGATURE DAD WITH YEH ISOLATED FORM
+069D ; [.27C4.0020.0002] # ARABIC LETTER SAD WITH TWO DOTS BELOW
+08AF ; [.27C5.0020.0002] # ARABIC LETTER SAD WITH THREE DOTS BELOW
+069E ; [.27C6.0020.0002] # ARABIC LETTER SAD WITH THREE DOTS ABOVE
+06FB ; [.27C7.0020.0002] # ARABIC LETTER DAD WITH DOT BELOW
+0637 ; [.27C8.0020.0002] # ARABIC LETTER TAH
+1EE08 ; [.27C8.0020.0005] # ARABIC MATHEMATICAL TAH
+1EE68 ; [.27C8.0020.0005] # ARABIC MATHEMATICAL STRETCHED TAH
+1EE88 ; [.27C8.0020.0005] # ARABIC MATHEMATICAL LOOPED TAH
+1EEA8 ; [.27C8.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK TAH
+FEC3 ; [.27C8.0020.0017] # ARABIC LETTER TAH INITIAL FORM
+FEC4 ; [.27C8.0020.0018] # ARABIC LETTER TAH MEDIAL FORM
+FEC2 ; [.27C8.0020.0019] # ARABIC LETTER TAH FINAL FORM
+FEC1 ; [.27C8.0020.001A] # ARABIC LETTER TAH ISOLATED FORM
+FCB8 ; [.27C8.0020.0017][.278A.0020.0017] # ARABIC LIGATURE TAH WITH HAH INITIAL FORM
+FC26 ; [.27C8.0020.001A][.278A.0020.001A] # ARABIC LIGATURE TAH WITH HAH ISOLATED FORM
+FD33 ; [.27C8.0020.0017][.280A.0020.0017] # ARABIC LIGATURE TAH WITH MEEM INITIAL FORM
+FD3A ; [.27C8.0020.0018][.280A.0020.0018] # ARABIC LIGATURE TAH WITH MEEM MEDIAL FORM
+FC27 ; [.27C8.0020.001A][.280A.0020.001A] # ARABIC LIGATURE TAH WITH MEEM ISOLATED FORM
+FD72 ; [.27C8.0020.0017][.280A.0020.0017][.278A.0020.0017] # ARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL FORM
+FD71 ; [.27C8.0020.0019][.280A.0020.0019][.278A.0020.0019] # ARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORM
+FD73 ; [.27C8.0020.0017][.280A.0020.0017][.280A.0020.0017] # ARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORM
+FD74 ; [.27C8.0020.0019][.280A.0020.0019][.282E.0020.0019] # ARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORM
+FD11 ; [.27C8.0020.0019][.282D.0020.0019] # ARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORM
+FCF5 ; [.27C8.0020.001A][.282D.0020.001A] # ARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORM
+FD12 ; [.27C8.0020.0019][.282E.0020.0019] # ARABIC LIGATURE TAH WITH YEH FINAL FORM
+FCF6 ; [.27C8.0020.001A][.282E.0020.001A] # ARABIC LIGATURE TAH WITH YEH ISOLATED FORM
+0638 ; [.27C9.0020.0002] # ARABIC LETTER ZAH
+1EE1A ; [.27C9.0020.0005] # ARABIC MATHEMATICAL ZAH
+1EE7A ; [.27C9.0020.0005] # ARABIC MATHEMATICAL STRETCHED ZAH
+1EE9A ; [.27C9.0020.0005] # ARABIC MATHEMATICAL LOOPED ZAH
+1EEBA ; [.27C9.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK ZAH
+FEC7 ; [.27C9.0020.0017] # ARABIC LETTER ZAH INITIAL FORM
+FEC8 ; [.27C9.0020.0018] # ARABIC LETTER ZAH MEDIAL FORM
+FEC6 ; [.27C9.0020.0019] # ARABIC LETTER ZAH FINAL FORM
+FEC5 ; [.27C9.0020.001A] # ARABIC LETTER ZAH ISOLATED FORM
+FCB9 ; [.27C9.0020.0017][.280A.0020.0017] # ARABIC LIGATURE ZAH WITH MEEM INITIAL FORM
+FD3B ; [.27C9.0020.0018][.280A.0020.0018] # ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM
+FC28 ; [.27C9.0020.001A][.280A.0020.001A] # ARABIC LIGATURE ZAH WITH MEEM ISOLATED FORM
+069F ; [.27CA.0020.0002] # ARABIC LETTER TAH WITH THREE DOTS ABOVE
+08A3 ; [.27CB.0020.0002] # ARABIC LETTER TAH WITH TWO DOTS ABOVE
+088B ; [.27CC.0020.0002] # ARABIC LETTER TAH WITH DOT BELOW
+088C ; [.27CD.0020.0002] # ARABIC LETTER TAH WITH THREE DOTS BELOW
+0639 ; [.27CE.0020.0002] # ARABIC LETTER AIN
+1EE0F ; [.27CE.0020.0005] # ARABIC MATHEMATICAL AIN
+1EE2F ; [.27CE.0020.0005] # ARABIC MATHEMATICAL INITIAL AIN
+1EE4F ; [.27CE.0020.0005] # ARABIC MATHEMATICAL TAILED AIN
+1EE6F ; [.27CE.0020.0005] # ARABIC MATHEMATICAL STRETCHED AIN
+1EE8F ; [.27CE.0020.0005] # ARABIC MATHEMATICAL LOOPED AIN
+1EEAF ; [.27CE.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK AIN
+FECB ; [.27CE.0020.0017] # ARABIC LETTER AIN INITIAL FORM
+FECC ; [.27CE.0020.0018] # ARABIC LETTER AIN MEDIAL FORM
+FECA ; [.27CE.0020.0019] # ARABIC LETTER AIN FINAL FORM
+FEC9 ; [.27CE.0020.001A] # ARABIC LETTER AIN ISOLATED FORM
+FCBA ; [.27CE.0020.0017][.277F.0020.0017] # ARABIC LIGATURE AIN WITH JEEM INITIAL FORM
+FC29 ; [.27CE.0020.001A][.277F.0020.001A] # ARABIC LIGATURE AIN WITH JEEM ISOLATED FORM
+FDC4 ; [.27CE.0020.0017][.277F.0020.0017][.280A.0020.0017] # ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM
+FD75 ; [.27CE.0020.0019][.277F.0020.0019][.280A.0020.0019] # ARABIC LIGATURE AIN WITH JEEM WITH MEEM FINAL FORM
+FDF7 ; [.27CE.0020.001A][.2802.0020.001A][.282E.0020.001A][.2819.0020.001A] # ARABIC LIGATURE ALAYHE ISOLATED FORM
+FCBB ; [.27CE.0020.0017][.280A.0020.0017] # ARABIC LIGATURE AIN WITH MEEM INITIAL FORM
+FC2A ; [.27CE.0020.001A][.280A.0020.001A] # ARABIC LIGATURE AIN WITH MEEM ISOLATED FORM
+FD77 ; [.27CE.0020.0017][.280A.0020.0017][.280A.0020.0017] # ARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORM
+FD76 ; [.27CE.0020.0019][.280A.0020.0019][.280A.0020.0019] # ARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORM
+FD78 ; [.27CE.0020.0019][.280A.0020.0019][.282D.0020.0019] # ARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORM
+FDB6 ; [.27CE.0020.0019][.280A.0020.0019][.282E.0020.0019] # ARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORM
+FD13 ; [.27CE.0020.0019][.282D.0020.0019] # ARABIC LIGATURE AIN WITH ALEF MAKSURA FINAL FORM
+FCF7 ; [.27CE.0020.001A][.282D.0020.001A] # ARABIC LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORM
+FD14 ; [.27CE.0020.0019][.282E.0020.0019] # ARABIC LIGATURE AIN WITH YEH FINAL FORM
+FCF8 ; [.27CE.0020.001A][.282E.0020.001A] # ARABIC LIGATURE AIN WITH YEH ISOLATED FORM
+063A ; [.27CF.0020.0002] # ARABIC LETTER GHAIN
+1EE1B ; [.27CF.0020.0005] # ARABIC MATHEMATICAL GHAIN
+1EE3B ; [.27CF.0020.0005] # ARABIC MATHEMATICAL INITIAL GHAIN
+1EE5B ; [.27CF.0020.0005] # ARABIC MATHEMATICAL TAILED GHAIN
+1EE7B ; [.27CF.0020.0005] # ARABIC MATHEMATICAL STRETCHED GHAIN
+1EE9B ; [.27CF.0020.0005] # ARABIC MATHEMATICAL LOOPED GHAIN
+1EEBB ; [.27CF.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN
+FECF ; [.27CF.0020.0017] # ARABIC LETTER GHAIN INITIAL FORM
+FED0 ; [.27CF.0020.0018] # ARABIC LETTER GHAIN MEDIAL FORM
+FECE ; [.27CF.0020.0019] # ARABIC LETTER GHAIN FINAL FORM
+FECD ; [.27CF.0020.001A] # ARABIC LETTER GHAIN ISOLATED FORM
+FCBC ; [.27CF.0020.0017][.277F.0020.0017] # ARABIC LIGATURE GHAIN WITH JEEM INITIAL FORM
+FC2B ; [.27CF.0020.001A][.277F.0020.001A] # ARABIC LIGATURE GHAIN WITH JEEM ISOLATED FORM
+FCBD ; [.27CF.0020.0017][.280A.0020.0017] # ARABIC LIGATURE GHAIN WITH MEEM INITIAL FORM
+FC2C ; [.27CF.0020.001A][.280A.0020.001A] # ARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORM
+FD79 ; [.27CF.0020.0019][.280A.0020.0019][.280A.0020.0019] # ARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FINAL FORM
+FD7B ; [.27CF.0020.0019][.280A.0020.0019][.282D.0020.0019] # ARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORM
+FD7A ; [.27CF.0020.0019][.280A.0020.0019][.282E.0020.0019] # ARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORM
+FD15 ; [.27CF.0020.0019][.282D.0020.0019] # ARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORM
+FCF9 ; [.27CF.0020.001A][.282D.0020.001A] # ARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED FORM
+FD16 ; [.27CF.0020.0019][.282E.0020.0019] # ARABIC LIGATURE GHAIN WITH YEH FINAL FORM
+FCFA ; [.27CF.0020.001A][.282E.0020.001A] # ARABIC LIGATURE GHAIN WITH YEH ISOLATED FORM
+06A0 ; [.27D0.0020.0002] # ARABIC LETTER AIN WITH THREE DOTS ABOVE
+08C3 ; [.27D1.0020.0002] # ARABIC LETTER GHAIN WITH THREE DOTS ABOVE
+06FC ; [.27D2.0020.0002] # ARABIC LETTER GHAIN WITH DOT BELOW
+075D ; [.27D3.0020.0002] # ARABIC LETTER AIN WITH TWO DOTS ABOVE
+075E ; [.27D4.0020.0002] # ARABIC LETTER AIN WITH THREE DOTS POINTING DOWNWARDS ABOVE
+075F ; [.27D5.0020.0002] # ARABIC LETTER AIN WITH TWO DOTS VERTICALLY ABOVE
+08B3 ; [.27D6.0020.0002] # ARABIC LETTER AIN WITH THREE DOTS BELOW
+0641 ; [.27D7.0020.0002] # ARABIC LETTER FEH
+1EE10 ; [.27D7.0020.0005] # ARABIC MATHEMATICAL FEH
+1EE30 ; [.27D7.0020.0005] # ARABIC MATHEMATICAL INITIAL FEH
+1EE70 ; [.27D7.0020.0005] # ARABIC MATHEMATICAL STRETCHED FEH
+1EE90 ; [.27D7.0020.0005] # ARABIC MATHEMATICAL LOOPED FEH
+1EEB0 ; [.27D7.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK FEH
+FED3 ; [.27D7.0020.0017] # ARABIC LETTER FEH INITIAL FORM
+FED4 ; [.27D7.0020.0018] # ARABIC LETTER FEH MEDIAL FORM
+FED2 ; [.27D7.0020.0019] # ARABIC LETTER FEH FINAL FORM
+FED1 ; [.27D7.0020.001A] # ARABIC LETTER FEH ISOLATED FORM
+FCBE ; [.27D7.0020.0017][.277F.0020.0017] # ARABIC LIGATURE FEH WITH JEEM INITIAL FORM
+FC2D ; [.27D7.0020.001A][.277F.0020.001A] # ARABIC LIGATURE FEH WITH JEEM ISOLATED FORM
+FCBF ; [.27D7.0020.0017][.278A.0020.0017] # ARABIC LIGATURE FEH WITH HAH INITIAL FORM
+FC2E ; [.27D7.0020.001A][.278A.0020.001A] # ARABIC LIGATURE FEH WITH HAH ISOLATED FORM
+FCC0 ; [.27D7.0020.0017][.278B.0020.0017] # ARABIC LIGATURE FEH WITH KHAH INITIAL FORM
+FC2F ; [.27D7.0020.001A][.278B.0020.001A] # ARABIC LIGATURE FEH WITH KHAH ISOLATED FORM
+FD7D ; [.27D7.0020.0017][.278B.0020.0017][.280A.0020.0017] # ARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL FORM
+FD7C ; [.27D7.0020.0019][.278B.0020.0019][.280A.0020.0019] # ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORM
+FCC1 ; [.27D7.0020.0017][.280A.0020.0017] # ARABIC LIGATURE FEH WITH MEEM INITIAL FORM
+FC30 ; [.27D7.0020.001A][.280A.0020.001A] # ARABIC LIGATURE FEH WITH MEEM ISOLATED FORM
+FDC1 ; [.27D7.0020.0019][.280A.0020.0019][.282E.0020.0019] # ARABIC LIGATURE FEH WITH MEEM WITH YEH FINAL FORM
+FC7C ; [.27D7.0020.0019][.282D.0020.0019] # ARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORM
+FC31 ; [.27D7.0020.001A][.282D.0020.001A] # ARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORM
+FC7D ; [.27D7.0020.0019][.282E.0020.0019] # ARABIC LIGATURE FEH WITH YEH FINAL FORM
+FC32 ; [.27D7.0020.001A][.282E.0020.001A] # ARABIC LIGATURE FEH WITH YEH ISOLATED FORM
+06A1 ; [.27D8.0020.0002] # ARABIC LETTER DOTLESS FEH
+1EE1E ; [.27D8.0020.0005] # ARABIC MATHEMATICAL DOTLESS FEH
+1EE7E ; [.27D8.0020.0005] # ARABIC MATHEMATICAL STRETCHED DOTLESS FEH
+06A2 ; [.27D9.0020.0002] # ARABIC LETTER FEH WITH DOT MOVED BELOW
+08BB ; [.27DA.0020.0002] # ARABIC LETTER AFRICAN FEH
+06A3 ; [.27DB.0020.0002] # ARABIC LETTER FEH WITH DOT BELOW
+06A4 ; [.27DC.0020.0002] # ARABIC LETTER VEH
+FB6C ; [.27DC.0020.0017] # ARABIC LETTER VEH INITIAL FORM
+FB6D ; [.27DC.0020.0018] # ARABIC LETTER VEH MEDIAL FORM
+FB6B ; [.27DC.0020.0019] # ARABIC LETTER VEH FINAL FORM
+FB6A ; [.27DC.0020.001A] # ARABIC LETTER VEH ISOLATED FORM
+08A4 ; [.27DD.0020.0002] # ARABIC LETTER FEH WITH DOT BELOW AND THREE DOTS ABOVE
+06A5 ; [.27DE.0020.0002] # ARABIC LETTER FEH WITH THREE DOTS BELOW
+06A6 ; [.27DF.0020.0002] # ARABIC LETTER PEHEH
+FB70 ; [.27DF.0020.0017] # ARABIC LETTER PEHEH INITIAL FORM
+FB71 ; [.27DF.0020.0018] # ARABIC LETTER PEHEH MEDIAL FORM
+FB6F ; [.27DF.0020.0019] # ARABIC LETTER PEHEH FINAL FORM
+FB6E ; [.27DF.0020.001A] # ARABIC LETTER PEHEH ISOLATED FORM
+0760 ; [.27E0.0020.0002] # ARABIC LETTER FEH WITH TWO DOTS BELOW
+0761 ; [.27E1.0020.0002] # ARABIC LETTER FEH WITH THREE DOTS POINTING UPWARDS BELOW
+066F ; [.27E2.0020.0002] # ARABIC LETTER DOTLESS QAF
+1EE1F ; [.27E2.0020.0005] # ARABIC MATHEMATICAL DOTLESS QAF
+1EE5F ; [.27E2.0020.0005] # ARABIC MATHEMATICAL TAILED DOTLESS QAF
+0642 ; [.27E3.0020.0002] # ARABIC LETTER QAF
+1EE12 ; [.27E3.0020.0005] # ARABIC MATHEMATICAL QAF
+1EE32 ; [.27E3.0020.0005] # ARABIC MATHEMATICAL INITIAL QAF
+1EE52 ; [.27E3.0020.0005] # ARABIC MATHEMATICAL TAILED QAF
+1EE72 ; [.27E3.0020.0005] # ARABIC MATHEMATICAL STRETCHED QAF
+1EE92 ; [.27E3.0020.0005] # ARABIC MATHEMATICAL LOOPED QAF
+1EEB2 ; [.27E3.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK QAF
+FED7 ; [.27E3.0020.0017] # ARABIC LETTER QAF INITIAL FORM
+FED8 ; [.27E3.0020.0018] # ARABIC LETTER QAF MEDIAL FORM
+FED6 ; [.27E3.0020.0019] # ARABIC LETTER QAF FINAL FORM
+FED5 ; [.27E3.0020.001A] # ARABIC LETTER QAF ISOLATED FORM
+FCC2 ; [.27E3.0020.0017][.278A.0020.0017] # ARABIC LIGATURE QAF WITH HAH INITIAL FORM
+FC33 ; [.27E3.0020.001A][.278A.0020.001A] # ARABIC LIGATURE QAF WITH HAH ISOLATED FORM
+FDF1 ; [.27E3.0020.001A][.2802.0020.001A][.283C.0020.001A] # ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM
+FCC3 ; [.27E3.0020.0017][.280A.0020.0017] # ARABIC LIGATURE QAF WITH MEEM INITIAL FORM
+FC34 ; [.27E3.0020.001A][.280A.0020.001A] # ARABIC LIGATURE QAF WITH MEEM ISOLATED FORM
+FDB4 ; [.27E3.0020.0017][.280A.0020.0017][.278A.0020.0017] # ARABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORM
+FD7E ; [.27E3.0020.0019][.280A.0020.0019][.278A.0020.0019] # ARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORM
+FD7F ; [.27E3.0020.0019][.280A.0020.0019][.280A.0020.0019] # ARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORM
+FDB2 ; [.27E3.0020.0019][.280A.0020.0019][.282E.0020.0019] # ARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORM
+FC7E ; [.27E3.0020.0019][.282D.0020.0019] # ARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORM
+FC35 ; [.27E3.0020.001A][.282D.0020.001A] # ARABIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORM
+FC7F ; [.27E3.0020.0019][.282E.0020.0019] # ARABIC LIGATURE QAF WITH YEH FINAL FORM
+FC36 ; [.27E3.0020.001A][.282E.0020.001A] # ARABIC LIGATURE QAF WITH YEH ISOLATED FORM
+06A7 ; [.27E4.0020.0002] # ARABIC LETTER QAF WITH DOT ABOVE
+08BC ; [.27E5.0020.0002] # ARABIC LETTER AFRICAN QAF
+06A8 ; [.27E6.0020.0002] # ARABIC LETTER QAF WITH THREE DOTS ABOVE
+08C4 ; [.27E7.0020.0002] # ARABIC LETTER AFRICAN QAF WITH THREE DOTS ABOVE
+08A5 ; [.27E8.0020.0002] # ARABIC LETTER QAF WITH DOT BELOW
+08B5 ; [.27E9.0020.0002] # ARABIC LETTER QAF WITH DOT BELOW AND NO DOTS ABOVE
+0643 ; [.27EA.0020.0002] # ARABIC LETTER KAF
+1EE0A ; [.27EA.0020.0005] # ARABIC MATHEMATICAL KAF
+1EE2A ; [.27EA.0020.0005] # ARABIC MATHEMATICAL INITIAL KAF
+1EE6A ; [.27EA.0020.0005] # ARABIC MATHEMATICAL STRETCHED KAF
+FEDB ; [.27EA.0020.0017] # ARABIC LETTER KAF INITIAL FORM
+FEDC ; [.27EA.0020.0018] # ARABIC LETTER KAF MEDIAL FORM
+FEDA ; [.27EA.0020.0019] # ARABIC LETTER KAF FINAL FORM
+FED9 ; [.27EA.0020.001A] # ARABIC LETTER KAF ISOLATED FORM
+FC80 ; [.27EA.0020.0019][.2762.0020.0019] # ARABIC LIGATURE KAF WITH ALEF FINAL FORM
+FC37 ; [.27EA.0020.001A][.2762.0020.001A] # ARABIC LIGATURE KAF WITH ALEF ISOLATED FORM
+FCC4 ; [.27EA.0020.0017][.277F.0020.0017] # ARABIC LIGATURE KAF WITH JEEM INITIAL FORM
+FC38 ; [.27EA.0020.001A][.277F.0020.001A] # ARABIC LIGATURE KAF WITH JEEM ISOLATED FORM
+FCC5 ; [.27EA.0020.0017][.278A.0020.0017] # ARABIC LIGATURE KAF WITH HAH INITIAL FORM
+FC39 ; [.27EA.0020.001A][.278A.0020.001A] # ARABIC LIGATURE KAF WITH HAH ISOLATED FORM
+FCC6 ; [.27EA.0020.0017][.278B.0020.0017] # ARABIC LIGATURE KAF WITH KHAH INITIAL FORM
+FC3A ; [.27EA.0020.001A][.278B.0020.001A] # ARABIC LIGATURE KAF WITH KHAH ISOLATED FORM
+FCC7 ; [.27EA.0020.0017][.2802.0020.0017] # ARABIC LIGATURE KAF WITH LAM INITIAL FORM
+FCEB ; [.27EA.0020.0018][.2802.0020.0018] # ARABIC LIGATURE KAF WITH LAM MEDIAL FORM
+FC81 ; [.27EA.0020.0019][.2802.0020.0019] # ARABIC LIGATURE KAF WITH LAM FINAL FORM
+FC3B ; [.27EA.0020.001A][.2802.0020.001A] # ARABIC LIGATURE KAF WITH LAM ISOLATED FORM
+FCC8 ; [.27EA.0020.0017][.280A.0020.0017] # ARABIC LIGATURE KAF WITH MEEM INITIAL FORM
+FCEC ; [.27EA.0020.0018][.280A.0020.0018] # ARABIC LIGATURE KAF WITH MEEM MEDIAL FORM
+FC82 ; [.27EA.0020.0019][.280A.0020.0019] # ARABIC LIGATURE KAF WITH MEEM FINAL FORM
+FC3C ; [.27EA.0020.001A][.280A.0020.001A] # ARABIC LIGATURE KAF WITH MEEM ISOLATED FORM
+FDC3 ; [.27EA.0020.0017][.280A.0020.0017][.280A.0020.0017] # ARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORM
+FDBB ; [.27EA.0020.0019][.280A.0020.0019][.280A.0020.0019] # ARABIC LIGATURE KAF WITH MEEM WITH MEEM FINAL FORM
+FDB7 ; [.27EA.0020.0019][.280A.0020.0019][.282E.0020.0019] # ARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORM
+FC83 ; [.27EA.0020.0019][.282D.0020.0019] # ARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FORM
+FC3D ; [.27EA.0020.001A][.282D.0020.001A] # ARABIC LIGATURE KAF WITH ALEF MAKSURA ISOLATED FORM
+FC84 ; [.27EA.0020.0019][.282E.0020.0019] # ARABIC LIGATURE KAF WITH YEH FINAL FORM
+FC3E ; [.27EA.0020.001A][.282E.0020.001A] # ARABIC LIGATURE KAF WITH YEH ISOLATED FORM
+06A9 ; [.27EB.0020.0002] # ARABIC LETTER KEHEH
+FB90 ; [.27EB.0020.0017] # ARABIC LETTER KEHEH INITIAL FORM
+FB91 ; [.27EB.0020.0018] # ARABIC LETTER KEHEH MEDIAL FORM
+FB8F ; [.27EB.0020.0019] # ARABIC LETTER KEHEH FINAL FORM
+FB8E ; [.27EB.0020.001A] # ARABIC LETTER KEHEH ISOLATED FORM
+06AA ; [.27EC.0020.0002] # ARABIC LETTER SWASH KAF
+06AB ; [.27ED.0020.0002] # ARABIC LETTER KAF WITH RING
+06AC ; [.27EE.0020.0002] # ARABIC LETTER KAF WITH DOT ABOVE
+077F ; [.27EF.0020.0002] # ARABIC LETTER KAF WITH TWO DOTS ABOVE
+06AD ; [.27F0.0020.0002] # ARABIC LETTER NG
+FBD5 ; [.27F0.0020.0017] # ARABIC LETTER NG INITIAL FORM
+FBD6 ; [.27F0.0020.0018] # ARABIC LETTER NG MEDIAL FORM
+FBD4 ; [.27F0.0020.0019] # ARABIC LETTER NG FINAL FORM
+FBD3 ; [.27F0.0020.001A] # ARABIC LETTER NG ISOLATED FORM
+06AE ; [.27F1.0020.0002] # ARABIC LETTER KAF WITH THREE DOTS BELOW
+08B4 ; [.27F2.0020.0002] # ARABIC LETTER KAF WITH DOT BELOW
+06AF ; [.27F3.0020.0002] # ARABIC LETTER GAF
+FB94 ; [.27F3.0020.0017] # ARABIC LETTER GAF INITIAL FORM
+FB95 ; [.27F3.0020.0018] # ARABIC LETTER GAF MEDIAL FORM
+FB93 ; [.27F3.0020.0019] # ARABIC LETTER GAF FINAL FORM
+FB92 ; [.27F3.0020.001A] # ARABIC LETTER GAF ISOLATED FORM
+08B0 ; [.27F4.0020.0002] # ARABIC LETTER GAF WITH INVERTED STROKE
+08C8 ; [.27F5.0020.0002] # ARABIC LETTER GRAF
+06B0 ; [.27F6.0020.0002] # ARABIC LETTER GAF WITH RING
+06B1 ; [.27F7.0020.0002] # ARABIC LETTER NGOEH
+FB9C ; [.27F7.0020.0017] # ARABIC LETTER NGOEH INITIAL FORM
+FB9D ; [.27F7.0020.0018] # ARABIC LETTER NGOEH MEDIAL FORM
+FB9B ; [.27F7.0020.0019] # ARABIC LETTER NGOEH FINAL FORM
+FB9A ; [.27F7.0020.001A] # ARABIC LETTER NGOEH ISOLATED FORM
+06B2 ; [.27F8.0020.0002] # ARABIC LETTER GAF WITH TWO DOTS BELOW
+06B3 ; [.27F9.0020.0002] # ARABIC LETTER GUEH
+FB98 ; [.27F9.0020.0017] # ARABIC LETTER GUEH INITIAL FORM
+FB99 ; [.27F9.0020.0018] # ARABIC LETTER GUEH MEDIAL FORM
+FB97 ; [.27F9.0020.0019] # ARABIC LETTER GUEH FINAL FORM
+FB96 ; [.27F9.0020.001A] # ARABIC LETTER GUEH ISOLATED FORM
+06B4 ; [.27FA.0020.0002] # ARABIC LETTER GAF WITH THREE DOTS ABOVE
+0762 ; [.27FB.0020.0002] # ARABIC LETTER KEHEH WITH DOT ABOVE
+063B ; [.27FC.0020.0002] # ARABIC LETTER KEHEH WITH TWO DOTS ABOVE
+088D ; [.27FD.0020.0002] # ARABIC LETTER KEHEH WITH TWO DOTS VERTICALLY BELOW
+063C ; [.27FE.0020.0002] # ARABIC LETTER KEHEH WITH THREE DOTS BELOW
+0763 ; [.27FF.0020.0002] # ARABIC LETTER KEHEH WITH THREE DOTS ABOVE
+0764 ; [.2800.0020.0002] # ARABIC LETTER KEHEH WITH THREE DOTS POINTING UPWARDS BELOW
+08C2 ; [.2801.0020.0002] # ARABIC LETTER KEHEH WITH SMALL V
+0644 ; [.2802.0020.0002] # ARABIC LETTER LAM
+1EE0B ; [.2802.0020.0005] # ARABIC MATHEMATICAL LAM
+1EE2B ; [.2802.0020.0005] # ARABIC MATHEMATICAL INITIAL LAM
+1EE4B ; [.2802.0020.0005] # ARABIC MATHEMATICAL TAILED LAM
+1EE8B ; [.2802.0020.0005] # ARABIC MATHEMATICAL LOOPED LAM
+1EEAB ; [.2802.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK LAM
+FEDF ; [.2802.0020.0017] # ARABIC LETTER LAM INITIAL FORM
+FEE0 ; [.2802.0020.0018] # ARABIC LETTER LAM MEDIAL FORM
+FEDE ; [.2802.0020.0019] # ARABIC LETTER LAM FINAL FORM
+FEDD ; [.2802.0020.001A] # ARABIC LETTER LAM ISOLATED FORM
+FEF6 ; [.2802.0020.0019][.2755.0020.0019] # ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM
+FEF5 ; [.2802.0020.001A][.2755.0020.001A] # ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM
+FEF8 ; [.2802.0020.0019][.2756.0020.0019] # ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM
+FEF7 ; [.2802.0020.001A][.2756.0020.001A] # ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM
+FEFA ; [.2802.0020.0019][.275A.0020.0019] # ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM
+FEF9 ; [.2802.0020.001A][.275A.0020.001A] # ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM
+FEFC ; [.2802.0020.0019][.2762.0020.0019] # ARABIC LIGATURE LAM WITH ALEF FINAL FORM
+FEFB ; [.2802.0020.001A][.2762.0020.001A] # ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM
+FCC9 ; [.2802.0020.0017][.277F.0020.0017] # ARABIC LIGATURE LAM WITH JEEM INITIAL FORM
+FC3F ; [.2802.0020.001A][.277F.0020.001A] # ARABIC LIGATURE LAM WITH JEEM ISOLATED FORM
+FD83 ; [.2802.0020.0017][.277F.0020.0017][.277F.0020.0017] # ARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORM
+FD84 ; [.2802.0020.0019][.277F.0020.0019][.277F.0020.0019] # ARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORM
+FDBA ; [.2802.0020.0017][.277F.0020.0017][.280A.0020.0017] # ARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORM
+FDBC ; [.2802.0020.0019][.277F.0020.0019][.280A.0020.0019] # ARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORM
+FDAC ; [.2802.0020.0019][.277F.0020.0019][.282E.0020.0019] # ARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORM
+FCCA ; [.2802.0020.0017][.278A.0020.0017] # ARABIC LIGATURE LAM WITH HAH INITIAL FORM
+FC40 ; [.2802.0020.001A][.278A.0020.001A] # ARABIC LIGATURE LAM WITH HAH ISOLATED FORM
+FDB5 ; [.2802.0020.0017][.278A.0020.0017][.280A.0020.0017] # ARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORM
+FD80 ; [.2802.0020.0019][.278A.0020.0019][.280A.0020.0019] # ARABIC LIGATURE LAM WITH HAH WITH MEEM FINAL FORM
+FD82 ; [.2802.0020.0019][.278A.0020.0019][.282D.0020.0019] # ARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORM
+FD81 ; [.2802.0020.0019][.278A.0020.0019][.282E.0020.0019] # ARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORM
+FCCB ; [.2802.0020.0017][.278B.0020.0017] # ARABIC LIGATURE LAM WITH KHAH INITIAL FORM
+FC41 ; [.2802.0020.001A][.278B.0020.001A] # ARABIC LIGATURE LAM WITH KHAH ISOLATED FORM
+FD86 ; [.2802.0020.0017][.278B.0020.0017][.280A.0020.0017] # ARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORM
+FD85 ; [.2802.0020.0019][.278B.0020.0019][.280A.0020.0019] # ARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORM
+FCCC ; [.2802.0020.0017][.280A.0020.0017] # ARABIC LIGATURE LAM WITH MEEM INITIAL FORM
+FCED ; [.2802.0020.0018][.280A.0020.0018] # ARABIC LIGATURE LAM WITH MEEM MEDIAL FORM
+FC85 ; [.2802.0020.0019][.280A.0020.0019] # ARABIC LIGATURE LAM WITH MEEM FINAL FORM
+FC42 ; [.2802.0020.001A][.280A.0020.001A] # ARABIC LIGATURE LAM WITH MEEM ISOLATED FORM
+FD88 ; [.2802.0020.0017][.280A.0020.0017][.278A.0020.0017] # ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM
+FD87 ; [.2802.0020.0019][.280A.0020.0019][.278A.0020.0019] # ARABIC LIGATURE LAM WITH MEEM WITH HAH FINAL FORM
+FDAD ; [.2802.0020.0019][.280A.0020.0019][.282E.0020.0019] # ARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORM
+FCCD ; [.2802.0020.0017][.2819.0020.0017] # ARABIC LIGATURE LAM WITH HEH INITIAL FORM
+FC86 ; [.2802.0020.0019][.282D.0020.0019] # ARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORM
+FC43 ; [.2802.0020.001A][.282D.0020.001A] # ARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORM
+FC87 ; [.2802.0020.0019][.282E.0020.0019] # ARABIC LIGATURE LAM WITH YEH FINAL FORM
+FC44 ; [.2802.0020.001A][.282E.0020.001A] # ARABIC LIGATURE LAM WITH YEH ISOLATED FORM
+06B5 ; [.2803.0020.0002] # ARABIC LETTER LAM WITH SMALL V
+06B6 ; [.2804.0020.0002] # ARABIC LETTER LAM WITH DOT ABOVE
+06B7 ; [.2805.0020.0002] # ARABIC LETTER LAM WITH THREE DOTS ABOVE
+06B8 ; [.2806.0020.0002] # ARABIC LETTER LAM WITH THREE DOTS BELOW
+076A ; [.2807.0020.0002] # ARABIC LETTER LAM WITH BAR
+08A6 ; [.2808.0020.0002] # ARABIC LETTER LAM WITH DOUBLE BAR
+08C7 ; [.2809.0020.0002] # ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE
+0645 ; [.280A.0020.0002] # ARABIC LETTER MEEM
+1EE0C ; [.280A.0020.0005] # ARABIC MATHEMATICAL MEEM
+1EE2C ; [.280A.0020.0005] # ARABIC MATHEMATICAL INITIAL MEEM
+1EE6C ; [.280A.0020.0005] # ARABIC MATHEMATICAL STRETCHED MEEM
+1EE8C ; [.280A.0020.0005] # ARABIC MATHEMATICAL LOOPED MEEM
+1EEAC ; [.280A.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK MEEM
+FEE3 ; [.280A.0020.0017] # ARABIC LETTER MEEM INITIAL FORM
+FEE4 ; [.280A.0020.0018] # ARABIC LETTER MEEM MEDIAL FORM
+FEE2 ; [.280A.0020.0019] # ARABIC LETTER MEEM FINAL FORM
+FEE1 ; [.280A.0020.001A] # ARABIC LETTER MEEM ISOLATED FORM
+06FE ; [.280A.0020.0004][.0000.0119.0004] # ARABIC SIGN SINDHI POSTPOSITION MEN
+FC88 ; [.280A.0020.0019][.2762.0020.0019] # ARABIC LIGATURE MEEM WITH ALEF FINAL FORM
+FCCE ; [.280A.0020.0017][.277F.0020.0017] # ARABIC LIGATURE MEEM WITH JEEM INITIAL FORM
+FC45 ; [.280A.0020.001A][.277F.0020.001A] # ARABIC LIGATURE MEEM WITH JEEM ISOLATED FORM
+FD8C ; [.280A.0020.0017][.277F.0020.0017][.278A.0020.0017] # ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM
+FD92 ; [.280A.0020.0017][.277F.0020.0017][.278B.0020.0017] # ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM
+FD8D ; [.280A.0020.0017][.277F.0020.0017][.280A.0020.0017] # ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM
+FDC0 ; [.280A.0020.0019][.277F.0020.0019][.282E.0020.0019] # ARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FORM
+FCCF ; [.280A.0020.0017][.278A.0020.0017] # ARABIC LIGATURE MEEM WITH HAH INITIAL FORM
+FC46 ; [.280A.0020.001A][.278A.0020.001A] # ARABIC LIGATURE MEEM WITH HAH ISOLATED FORM
+FD89 ; [.280A.0020.0017][.278A.0020.0017][.277F.0020.0017] # ARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORM
+FD8A ; [.280A.0020.0017][.278A.0020.0017][.280A.0020.0017] # ARABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORM
+FDF4 ; [.280A.0020.001A][.278A.0020.001A][.280A.0020.001A][.2795.0020.001A] # ARABIC LIGATURE MOHAMMAD ISOLATED FORM
+FD8B ; [.280A.0020.0019][.278A.0020.0019][.282E.0020.0019] # ARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORM
+FCD0 ; [.280A.0020.0017][.278B.0020.0017] # ARABIC LIGATURE MEEM WITH KHAH INITIAL FORM
+FC47 ; [.280A.0020.001A][.278B.0020.001A] # ARABIC LIGATURE MEEM WITH KHAH ISOLATED FORM
+FD8E ; [.280A.0020.0017][.278B.0020.0017][.277F.0020.0017] # ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM
+FD8F ; [.280A.0020.0017][.278B.0020.0017][.280A.0020.0017] # ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM
+FDB9 ; [.280A.0020.0019][.278B.0020.0019][.282E.0020.0019] # ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORM
+FCD1 ; [.280A.0020.0017][.280A.0020.0017] # ARABIC LIGATURE MEEM WITH MEEM INITIAL FORM
+FC89 ; [.280A.0020.0019][.280A.0020.0019] # ARABIC LIGATURE MEEM WITH MEEM FINAL FORM
+FC48 ; [.280A.0020.001A][.280A.0020.001A] # ARABIC LIGATURE MEEM WITH MEEM ISOLATED FORM
+FDB1 ; [.280A.0020.0019][.280A.0020.0019][.282E.0020.0019] # ARABIC LIGATURE MEEM WITH MEEM WITH YEH FINAL FORM
+FC49 ; [.280A.0020.001A][.282D.0020.001A] # ARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORM
+FC4A ; [.280A.0020.001A][.282E.0020.001A] # ARABIC LIGATURE MEEM WITH YEH ISOLATED FORM
+0765 ; [.280B.0020.0002] # ARABIC LETTER MEEM WITH DOT ABOVE
+0766 ; [.280C.0020.0002] # ARABIC LETTER MEEM WITH DOT BELOW
+08A7 ; [.280D.0020.0002] # ARABIC LETTER MEEM WITH THREE DOTS ABOVE
+0646 ; [.280E.0020.0002] # ARABIC LETTER NOON
+1EE0D ; [.280E.0020.0005] # ARABIC MATHEMATICAL NOON
+1EE2D ; [.280E.0020.0005] # ARABIC MATHEMATICAL INITIAL NOON
+1EE4D ; [.280E.0020.0005] # ARABIC MATHEMATICAL TAILED NOON
+1EE6D ; [.280E.0020.0005] # ARABIC MATHEMATICAL STRETCHED NOON
+1EE8D ; [.280E.0020.0005] # ARABIC MATHEMATICAL LOOPED NOON
+1EEAD ; [.280E.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK NOON
+FEE7 ; [.280E.0020.0017] # ARABIC LETTER NOON INITIAL FORM
+FEE8 ; [.280E.0020.0018] # ARABIC LETTER NOON MEDIAL FORM
+FEE6 ; [.280E.0020.0019] # ARABIC LETTER NOON FINAL FORM
+FEE5 ; [.280E.0020.001A] # ARABIC LETTER NOON ISOLATED FORM
+FCD2 ; [.280E.0020.0017][.277F.0020.0017] # ARABIC LIGATURE NOON WITH JEEM INITIAL FORM
+FC4B ; [.280E.0020.001A][.277F.0020.001A] # ARABIC LIGATURE NOON WITH JEEM ISOLATED FORM
+FDB8 ; [.280E.0020.0017][.277F.0020.0017][.278A.0020.0017] # ARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM
+FDBD ; [.280E.0020.0019][.277F.0020.0019][.278A.0020.0019] # ARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORM
+FD98 ; [.280E.0020.0017][.277F.0020.0017][.280A.0020.0017] # ARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM
+FD97 ; [.280E.0020.0019][.277F.0020.0019][.280A.0020.0019] # ARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORM
+FD99 ; [.280E.0020.0019][.277F.0020.0019][.282D.0020.0019] # ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORM
+FDC7 ; [.280E.0020.0019][.277F.0020.0019][.282E.0020.0019] # ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM
+FCD3 ; [.280E.0020.0017][.278A.0020.0017] # ARABIC LIGATURE NOON WITH HAH INITIAL FORM
+FC4C ; [.280E.0020.001A][.278A.0020.001A] # ARABIC LIGATURE NOON WITH HAH ISOLATED FORM
+FD95 ; [.280E.0020.0017][.278A.0020.0017][.280A.0020.0017] # ARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORM
+FD96 ; [.280E.0020.0019][.278A.0020.0019][.282D.0020.0019] # ARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORM
+FDB3 ; [.280E.0020.0019][.278A.0020.0019][.282E.0020.0019] # ARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORM
+FCD4 ; [.280E.0020.0017][.278B.0020.0017] # ARABIC LIGATURE NOON WITH KHAH INITIAL FORM
+FC4D ; [.280E.0020.001A][.278B.0020.001A] # ARABIC LIGATURE NOON WITH KHAH ISOLATED FORM
+FC8A ; [.280E.0020.0019][.27A4.0020.0019] # ARABIC LIGATURE NOON WITH REH FINAL FORM
+FC8B ; [.280E.0020.0019][.27A5.0020.0019] # ARABIC LIGATURE NOON WITH ZAIN FINAL FORM
+FCD5 ; [.280E.0020.0017][.280A.0020.0017] # ARABIC LIGATURE NOON WITH MEEM INITIAL FORM
+FCEE ; [.280E.0020.0018][.280A.0020.0018] # ARABIC LIGATURE NOON WITH MEEM MEDIAL FORM
+FC8C ; [.280E.0020.0019][.280A.0020.0019] # ARABIC LIGATURE NOON WITH MEEM FINAL FORM
+FC4E ; [.280E.0020.001A][.280A.0020.001A] # ARABIC LIGATURE NOON WITH MEEM ISOLATED FORM
+FD9B ; [.280E.0020.0019][.280A.0020.0019][.282D.0020.0019] # ARABIC LIGATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORM
+FD9A ; [.280E.0020.0019][.280A.0020.0019][.282E.0020.0019] # ARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORM
+FC8D ; [.280E.0020.0019][.280E.0020.0019] # ARABIC LIGATURE NOON WITH NOON FINAL FORM
+FCD6 ; [.280E.0020.0017][.2819.0020.0017] # ARABIC LIGATURE NOON WITH HEH INITIAL FORM
+FCEF ; [.280E.0020.0018][.2819.0020.0018] # ARABIC LIGATURE NOON WITH HEH MEDIAL FORM
+FC8E ; [.280E.0020.0019][.282D.0020.0019] # ARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORM
+FC4F ; [.280E.0020.001A][.282D.0020.001A] # ARABIC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORM
+FC8F ; [.280E.0020.0019][.282E.0020.0019] # ARABIC LIGATURE NOON WITH YEH FINAL FORM
+FC50 ; [.280E.0020.001A][.282E.0020.001A] # ARABIC LIGATURE NOON WITH YEH ISOLATED FORM
+06BA ; [.280F.0020.0002] # ARABIC LETTER NOON GHUNNA
+1EE1D ; [.280F.0020.0005] # ARABIC MATHEMATICAL DOTLESS NOON
+1EE5D ; [.280F.0020.0005] # ARABIC MATHEMATICAL TAILED DOTLESS NOON
+FB9F ; [.280F.0020.0019] # ARABIC LETTER NOON GHUNNA FINAL FORM
+FB9E ; [.280F.0020.001A] # ARABIC LETTER NOON GHUNNA ISOLATED FORM
+08BD ; [.2810.0020.0002] # ARABIC LETTER AFRICAN NOON
+06BB ; [.2811.0020.0002] # ARABIC LETTER RNOON
+FBA2 ; [.2811.0020.0017] # ARABIC LETTER RNOON INITIAL FORM
+FBA3 ; [.2811.0020.0018] # ARABIC LETTER RNOON MEDIAL FORM
+FBA1 ; [.2811.0020.0019] # ARABIC LETTER RNOON FINAL FORM
+FBA0 ; [.2811.0020.001A] # ARABIC LETTER RNOON ISOLATED FORM
+06BC ; [.2812.0020.0002] # ARABIC LETTER NOON WITH RING
+06BD ; [.2813.0020.0002] # ARABIC LETTER NOON WITH THREE DOTS ABOVE
+06B9 ; [.2814.0020.0002] # ARABIC LETTER NOON WITH DOT BELOW
+0767 ; [.2815.0020.0002] # ARABIC LETTER NOON WITH TWO DOTS BELOW
+0768 ; [.2816.0020.0002] # ARABIC LETTER NOON WITH SMALL TAH
+0769 ; [.2817.0020.0002] # ARABIC LETTER NOON WITH SMALL V
+0889 ; [.2818.0020.0002] # ARABIC LETTER NOON WITH INVERTED SMALL V
+0647 ; [.2819.0020.0002] # ARABIC LETTER HEH
+1EE24 ; [.2819.0020.0005] # ARABIC MATHEMATICAL INITIAL HEH
+1EE64 ; [.2819.0020.0005] # ARABIC MATHEMATICAL STRETCHED HEH
+1EE84 ; [.2819.0020.0005] # ARABIC MATHEMATICAL LOOPED HEH
+FEEB ; [.2819.0020.0017] # ARABIC LETTER HEH INITIAL FORM
+FEEC ; [.2819.0020.0018] # ARABIC LETTER HEH MEDIAL FORM
+FEEA ; [.2819.0020.0019] # ARABIC LETTER HEH FINAL FORM
+FEE9 ; [.2819.0020.001A] # ARABIC LETTER HEH ISOLATED FORM
+FCD9 ; [.2819.0020.0017][.0000.0098.0017] # ARABIC LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORM
+FCD7 ; [.2819.0020.0017][.277F.0020.0017] # ARABIC LIGATURE HEH WITH JEEM INITIAL FORM
+FC51 ; [.2819.0020.001A][.277F.0020.001A] # ARABIC LIGATURE HEH WITH JEEM ISOLATED FORM
+FCD8 ; [.2819.0020.0017][.280A.0020.0017] # ARABIC LIGATURE HEH WITH MEEM INITIAL FORM
+FC52 ; [.2819.0020.001A][.280A.0020.001A] # ARABIC LIGATURE HEH WITH MEEM ISOLATED FORM
+FD93 ; [.2819.0020.0017][.280A.0020.0017][.277F.0020.0017] # ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM
+FD94 ; [.2819.0020.0017][.280A.0020.0017][.280A.0020.0017] # ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM
+FC53 ; [.2819.0020.001A][.282D.0020.001A] # ARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORM
+FC54 ; [.2819.0020.001A][.282E.0020.001A] # ARABIC LIGATURE HEH WITH YEH ISOLATED FORM
+06BE ; [.281A.0020.0002] # ARABIC LETTER HEH DOACHASHMEE
+FBAC ; [.281A.0020.0017] # ARABIC LETTER HEH DOACHASHMEE INITIAL FORM
+FBAD ; [.281A.0020.0018] # ARABIC LETTER HEH DOACHASHMEE MEDIAL FORM
+FBAB ; [.281A.0020.0019] # ARABIC LETTER HEH DOACHASHMEE FINAL FORM
+FBAA ; [.281A.0020.001A] # ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM
+06C1 ; [.281B.0020.0002] # ARABIC LETTER HEH GOAL
+FBA8 ; [.281B.0020.0017] # ARABIC LETTER HEH GOAL INITIAL FORM
+FBA9 ; [.281B.0020.0018] # ARABIC LETTER HEH GOAL MEDIAL FORM
+FBA7 ; [.281B.0020.0019] # ARABIC LETTER HEH GOAL FINAL FORM
+FBA6 ; [.281B.0020.001A] # ARABIC LETTER HEH GOAL ISOLATED FORM
+06C2 ; [.281B.0020.0002][.0000.0083.0002] # ARABIC LETTER HEH GOAL WITH HAMZA ABOVE
+06C3 ; [.281C.0020.0002] # ARABIC LETTER TEH MARBUTA GOAL
+06FF ; [.281D.0020.0002] # ARABIC LETTER HEH WITH INVERTED V
+06D5 ; [.281E.0020.0002] # ARABIC LETTER AE
+06C0 ; [.281E.0020.0002][.0000.0083.0002] # ARABIC LETTER HEH WITH YEH ABOVE
+FBA5 ; [.281E.0020.0019][.0000.0083.0019] # ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM
+FBA4 ; [.281E.0020.001A][.0000.0083.001A] # ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM
+0648 ; [.281F.0020.0002] # ARABIC LETTER WAW
+06E5 ; [.281F.0020.0004] # ARABIC SMALL WAW
+0884 ; [.281F.0020.0004] # ARABIC TATWEEL WITH OVERSTRUCK WAW
+1EE05 ; [.281F.0020.0005] # ARABIC MATHEMATICAL WAW
+1EE85 ; [.281F.0020.0005] # ARABIC MATHEMATICAL LOOPED WAW
+1EEA5 ; [.281F.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK WAW
+FEEE ; [.281F.0020.0019] # ARABIC LETTER WAW FINAL FORM
+FEED ; [.281F.0020.001A] # ARABIC LETTER WAW ISOLATED FORM
+FDF8 ; [.281F.0020.001A][.27B7.0020.001A][.2802.0020.001A][.280A.0020.001A] # ARABIC LIGATURE WASALLAM ISOLATED FORM
+06C4 ; [.2820.0020.0002] # ARABIC LETTER WAW WITH RING
+06C5 ; [.2821.0020.0002] # ARABIC LETTER KIRGHIZ OE
+FBE1 ; [.2821.0020.0019] # ARABIC LETTER KIRGHIZ OE FINAL FORM
+FBE0 ; [.2821.0020.001A] # ARABIC LETTER KIRGHIZ OE ISOLATED FORM
+06C6 ; [.2822.0020.0002] # ARABIC LETTER OE
+FBDA ; [.2822.0020.0019] # ARABIC LETTER OE FINAL FORM
+FBD9 ; [.2822.0020.001A] # ARABIC LETTER OE ISOLATED FORM
+06C7 ; [.2823.0020.0002] # ARABIC LETTER U
+FBD8 ; [.2823.0020.0019] # ARABIC LETTER U FINAL FORM
+FBD7 ; [.2823.0020.001A] # ARABIC LETTER U ISOLATED FORM
+06C8 ; [.2824.0020.0002] # ARABIC LETTER YU
+FBDC ; [.2824.0020.0019] # ARABIC LETTER YU FINAL FORM
+FBDB ; [.2824.0020.001A] # ARABIC LETTER YU ISOLATED FORM
+06C9 ; [.2825.0020.0002] # ARABIC LETTER KIRGHIZ YU
+FBE3 ; [.2825.0020.0019] # ARABIC LETTER KIRGHIZ YU FINAL FORM
+FBE2 ; [.2825.0020.001A] # ARABIC LETTER KIRGHIZ YU ISOLATED FORM
+06CA ; [.2826.0020.0002] # ARABIC LETTER WAW WITH TWO DOTS ABOVE
+06CB ; [.2827.0020.0002] # ARABIC LETTER VE
+FBDF ; [.2827.0020.0019] # ARABIC LETTER VE FINAL FORM
+FBDE ; [.2827.0020.001A] # ARABIC LETTER VE ISOLATED FORM
+08B1 ; [.2828.0020.0002] # ARABIC LETTER STRAIGHT WAW
+06CF ; [.2829.0020.0002] # ARABIC LETTER WAW WITH DOT ABOVE
+0778 ; [.282A.0020.0002] # ARABIC LETTER WAW WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE
+0779 ; [.282B.0020.0002] # ARABIC LETTER WAW WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE
+08AB ; [.282C.0020.0002] # ARABIC LETTER WAW WITH DOT WITHIN
+0649 ; [.282D.0020.0002] # ARABIC LETTER ALEF MAKSURA
+FBE8 ; [.282D.0020.0017] # ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM
+FBE9 ; [.282D.0020.0018] # ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM
+FEF0 ; [.282D.0020.0019] # ARABIC LETTER ALEF MAKSURA FINAL FORM
+FEEF ; [.282D.0020.001A] # ARABIC LETTER ALEF MAKSURA ISOLATED FORM
+FC90 ; [.282D.0020.0019][.0000.0098.0019] # ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM
+FC5D ; [.282D.0020.001A][.0000.0098.001A] # ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM
+064A ; [.282E.0020.0002] # ARABIC LETTER YEH
+06E6 ; [.282E.0020.0004] # ARABIC SMALL YEH
+0885 ; [.282E.0020.0004] # ARABIC TATWEEL WITH TWO DOTS BELOW
+0886 ; [.282E.0020.0004] # ARABIC LETTER THIN YEH
+1EE09 ; [.282E.0020.0005] # ARABIC MATHEMATICAL YEH
+1EE29 ; [.282E.0020.0005] # ARABIC MATHEMATICAL INITIAL YEH
+1EE49 ; [.282E.0020.0005] # ARABIC MATHEMATICAL TAILED YEH
+1EE69 ; [.282E.0020.0005] # ARABIC MATHEMATICAL STRETCHED YEH
+1EE89 ; [.282E.0020.0005] # ARABIC MATHEMATICAL LOOPED YEH
+1EEA9 ; [.282E.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK YEH
+FEF3 ; [.282E.0020.0017] # ARABIC LETTER YEH INITIAL FORM
+FEF4 ; [.282E.0020.0018] # ARABIC LETTER YEH MEDIAL FORM
+FEF2 ; [.282E.0020.0019] # ARABIC LETTER YEH FINAL FORM
+FEF1 ; [.282E.0020.001A] # ARABIC LETTER YEH ISOLATED FORM
+FCDA ; [.282E.0020.0017][.277F.0020.0017] # ARABIC LIGATURE YEH WITH JEEM INITIAL FORM
+FC55 ; [.282E.0020.001A][.277F.0020.001A] # ARABIC LIGATURE YEH WITH JEEM ISOLATED FORM
+FDAF ; [.282E.0020.0019][.277F.0020.0019][.282E.0020.0019] # ARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORM
+FCDB ; [.282E.0020.0017][.278A.0020.0017] # ARABIC LIGATURE YEH WITH HAH INITIAL FORM
+FC56 ; [.282E.0020.001A][.278A.0020.001A] # ARABIC LIGATURE YEH WITH HAH ISOLATED FORM
+FDAE ; [.282E.0020.0019][.278A.0020.0019][.282E.0020.0019] # ARABIC LIGATURE YEH WITH HAH WITH YEH FINAL FORM
+FCDC ; [.282E.0020.0017][.278B.0020.0017] # ARABIC LIGATURE YEH WITH KHAH INITIAL FORM
+FC57 ; [.282E.0020.001A][.278B.0020.001A] # ARABIC LIGATURE YEH WITH KHAH ISOLATED FORM
+FC91 ; [.282E.0020.0019][.27A4.0020.0019] # ARABIC LIGATURE YEH WITH REH FINAL FORM
+FC92 ; [.282E.0020.0019][.27A5.0020.0019] # ARABIC LIGATURE YEH WITH ZAIN FINAL FORM
+FCDD ; [.282E.0020.0017][.280A.0020.0017] # ARABIC LIGATURE YEH WITH MEEM INITIAL FORM
+FCF0 ; [.282E.0020.0018][.280A.0020.0018] # ARABIC LIGATURE YEH WITH MEEM MEDIAL FORM
+FC93 ; [.282E.0020.0019][.280A.0020.0019] # ARABIC LIGATURE YEH WITH MEEM FINAL FORM
+FC58 ; [.282E.0020.001A][.280A.0020.001A] # ARABIC LIGATURE YEH WITH MEEM ISOLATED FORM
+FD9D ; [.282E.0020.0017][.280A.0020.0017][.280A.0020.0017] # ARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORM
+FD9C ; [.282E.0020.0019][.280A.0020.0019][.280A.0020.0019] # ARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FORM
+FDB0 ; [.282E.0020.0019][.280A.0020.0019][.282E.0020.0019] # ARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORM
+FC94 ; [.282E.0020.0019][.280E.0020.0019] # ARABIC LIGATURE YEH WITH NOON FINAL FORM
+FCDE ; [.282E.0020.0017][.2819.0020.0017] # ARABIC LIGATURE YEH WITH HEH INITIAL FORM
+FCF1 ; [.282E.0020.0018][.2819.0020.0018] # ARABIC LIGATURE YEH WITH HEH MEDIAL FORM
+FC95 ; [.282E.0020.0019][.282D.0020.0019] # ARABIC LIGATURE YEH WITH ALEF MAKSURA FINAL FORM
+FC59 ; [.282E.0020.001A][.282D.0020.001A] # ARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORM
+FC96 ; [.282E.0020.0019][.282E.0020.0019] # ARABIC LIGATURE YEH WITH YEH FINAL FORM
+FC5A ; [.282E.0020.001A][.282E.0020.001A] # ARABIC LIGATURE YEH WITH YEH ISOLATED FORM
+06CC ; [.282F.0020.0002] # ARABIC LETTER FARSI YEH
+08C9 ; [.282F.0020.0004] # ARABIC SMALL FARSI YEH
+FBFE ; [.282F.0020.0017] # ARABIC LETTER FARSI YEH INITIAL FORM
+FBFF ; [.282F.0020.0018] # ARABIC LETTER FARSI YEH MEDIAL FORM
+FBFD ; [.282F.0020.0019] # ARABIC LETTER FARSI YEH FINAL FORM
+FBFC ; [.282F.0020.001A] # ARABIC LETTER FARSI YEH ISOLATED FORM
+06CD ; [.2830.0020.0002] # ARABIC LETTER YEH WITH TAIL
+06CE ; [.2831.0020.0002] # ARABIC LETTER YEH WITH SMALL V
+06D0 ; [.2832.0020.0002] # ARABIC LETTER E
+FBE6 ; [.2832.0020.0017] # ARABIC LETTER E INITIAL FORM
+FBE7 ; [.2832.0020.0018] # ARABIC LETTER E MEDIAL FORM
+FBE5 ; [.2832.0020.0019] # ARABIC LETTER E FINAL FORM
+FBE4 ; [.2832.0020.001A] # ARABIC LETTER E ISOLATED FORM
+06D1 ; [.2833.0020.0002] # ARABIC LETTER YEH WITH THREE DOTS BELOW
+063D ; [.2834.0020.0002] # ARABIC LETTER FARSI YEH WITH INVERTED V
+063E ; [.2835.0020.0002] # ARABIC LETTER FARSI YEH WITH TWO DOTS ABOVE
+063F ; [.2836.0020.0002] # ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE
+0620 ; [.2837.0020.0002] # ARABIC LETTER KASHMIRI YEH
+0775 ; [.2838.0020.0002] # ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE
+0776 ; [.2839.0020.0002] # ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE
+0777 ; [.283A.0020.0002] # ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT FOUR BELOW
+08BA ; [.283B.0020.0002] # ARABIC LETTER YEH WITH TWO DOTS BELOW AND SMALL NOON ABOVE
+06D2 ; [.283C.0020.0002] # ARABIC LETTER YEH BARREE
+FBAF ; [.283C.0020.0019] # ARABIC LETTER YEH BARREE FINAL FORM
+FBAE ; [.283C.0020.001A] # ARABIC LETTER YEH BARREE ISOLATED FORM
+06D3 ; [.283C.0020.0002][.0000.0083.0002] # ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
+FBB1 ; [.283C.0020.0019][.0000.0083.0019] # ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
+FBB0 ; [.283C.0020.001A][.0000.0083.001A] # ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM
+077A ; [.283D.0020.0002] # ARABIC LETTER YEH BARREE WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE
+077B ; [.283E.0020.0002] # ARABIC LETTER YEH BARREE WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE
+088E ; [.283F.0020.0002] # ARABIC VERTICAL TAIL
+0710 ; [.2840.0020.0002] # SYRIAC LETTER ALAPH
+0712 ; [.2841.0020.0002] # SYRIAC LETTER BETH
+072D ; [.2841.0020.0004][.0000.011A.0004] # SYRIAC LETTER PERSIAN BHETH
+0713 ; [.2842.0020.0002] # SYRIAC LETTER GAMAL
+0714 ; [.2842.0020.0004][.0000.0119.0004] # SYRIAC LETTER GAMAL GARSHUNI
+072E ; [.2842.0020.0004][.0000.011A.0004] # SYRIAC LETTER PERSIAN GHAMAL
+0716 ; [.2843.0020.0002] # SYRIAC LETTER DOTLESS DALATH RISH
+0715 ; [.2844.0020.0002] # SYRIAC LETTER DALATH
+072F ; [.2844.0020.0004][.0000.011A.0004] # SYRIAC LETTER PERSIAN DHALATH
+0717 ; [.2845.0020.0002] # SYRIAC LETTER HE
+0718 ; [.2846.0020.0002] # SYRIAC LETTER WAW
+0719 ; [.2847.0020.0002] # SYRIAC LETTER ZAIN
+074D ; [.2848.0020.0002] # SYRIAC LETTER SOGDIAN ZHAIN
+071A ; [.2849.0020.0002] # SYRIAC LETTER HETH
+071B ; [.284A.0020.0002] # SYRIAC LETTER TETH
+071C ; [.284A.0020.0004][.0000.0119.0004] # SYRIAC LETTER TETH GARSHUNI
+071D ; [.284B.0020.0002] # SYRIAC LETTER YUDH
+071E ; [.284C.0020.0002] # SYRIAC LETTER YUDH HE
+071F ; [.284D.0020.0002] # SYRIAC LETTER KAPH
+074E ; [.284E.0020.0002] # SYRIAC LETTER SOGDIAN KHAPH
+0720 ; [.284F.0020.0002] # SYRIAC LETTER LAMADH
+0721 ; [.2850.0020.0002] # SYRIAC LETTER MIM
+0722 ; [.2851.0020.0002] # SYRIAC LETTER NUN
+0723 ; [.2852.0020.0002] # SYRIAC LETTER SEMKATH
+0724 ; [.2852.0020.0019] # SYRIAC LETTER FINAL SEMKATH
+0725 ; [.2853.0020.0002] # SYRIAC LETTER E
+0726 ; [.2854.0020.0002] # SYRIAC LETTER PE
+0727 ; [.2854.0020.0004][.0000.0119.0004] # SYRIAC LETTER REVERSED PE
+074F ; [.2855.0020.0002] # SYRIAC LETTER SOGDIAN FE
+0728 ; [.2856.0020.0002] # SYRIAC LETTER SADHE
+0729 ; [.2857.0020.0002] # SYRIAC LETTER QAPH
+072A ; [.2858.0020.0002] # SYRIAC LETTER RISH
+072B ; [.2859.0020.0002] # SYRIAC LETTER SHIN
+072C ; [.285A.0020.0002] # SYRIAC LETTER TAW
+0860 ; [.285B.0020.0002] # SYRIAC LETTER MALAYALAM NGA
+0861 ; [.285C.0020.0002] # SYRIAC LETTER MALAYALAM JA
+0862 ; [.285D.0020.0002] # SYRIAC LETTER MALAYALAM NYA
+0863 ; [.285E.0020.0002] # SYRIAC LETTER MALAYALAM TTA
+0864 ; [.285F.0020.0002] # SYRIAC LETTER MALAYALAM NNA
+0865 ; [.2860.0020.0002] # SYRIAC LETTER MALAYALAM NNNA
+0866 ; [.2861.0020.0002] # SYRIAC LETTER MALAYALAM BHA
+0867 ; [.2862.0020.0002] # SYRIAC LETTER MALAYALAM RA
+0868 ; [.2863.0020.0002] # SYRIAC LETTER MALAYALAM LLA
+0869 ; [.2864.0020.0002] # SYRIAC LETTER MALAYALAM LLLA
+086A ; [.2865.0020.0002] # SYRIAC LETTER MALAYALAM SSA
+0840 ; [.2866.0020.0002] # MANDAIC LETTER HALQA
+0841 ; [.2867.0020.0002] # MANDAIC LETTER AB
+0842 ; [.2868.0020.0002] # MANDAIC LETTER AG
+0843 ; [.2869.0020.0002] # MANDAIC LETTER AD
+0844 ; [.286A.0020.0002] # MANDAIC LETTER AH
+0845 ; [.286B.0020.0002] # MANDAIC LETTER USHENNA
+0846 ; [.286C.0020.0002] # MANDAIC LETTER AZ
+0847 ; [.286D.0020.0002] # MANDAIC LETTER IT
+0848 ; [.286E.0020.0002] # MANDAIC LETTER ATT
+0849 ; [.286F.0020.0002] # MANDAIC LETTER AKSA
+084A ; [.2870.0020.0002] # MANDAIC LETTER AK
+084B ; [.2871.0020.0002] # MANDAIC LETTER AL
+084C ; [.2872.0020.0002] # MANDAIC LETTER AM
+084D ; [.2873.0020.0002] # MANDAIC LETTER AN
+084E ; [.2874.0020.0002] # MANDAIC LETTER AS
+084F ; [.2875.0020.0002] # MANDAIC LETTER IN
+0850 ; [.2876.0020.0002] # MANDAIC LETTER AP
+0851 ; [.2877.0020.0002] # MANDAIC LETTER ASZ
+0852 ; [.2878.0020.0002] # MANDAIC LETTER AQ
+0853 ; [.2879.0020.0002] # MANDAIC LETTER AR
+0854 ; [.287A.0020.0002] # MANDAIC LETTER ASH
+0855 ; [.287B.0020.0002] # MANDAIC LETTER AT
+0856 ; [.287C.0020.0002] # MANDAIC LETTER DUSHENNA
+0857 ; [.287D.0020.0002] # MANDAIC LETTER KAD
+0858 ; [.287E.0020.0002] # MANDAIC LETTER AIN
+0780 ; [.287F.0020.0002] # THAANA LETTER HAA
+0799 ; [.2880.0020.0002] # THAANA LETTER HHAA
+079A ; [.2881.0020.0002] # THAANA LETTER KHAA
+0781 ; [.2882.0020.0002] # THAANA LETTER SHAVIYANI
+0782 ; [.2883.0020.0002] # THAANA LETTER NOONU
+0783 ; [.2884.0020.0002] # THAANA LETTER RAA
+079C ; [.2885.0020.0002] # THAANA LETTER ZAA
+0784 ; [.2886.0020.0002] # THAANA LETTER BAA
+0785 ; [.2887.0020.0002] # THAANA LETTER LHAVIYANI
+0786 ; [.2888.0020.0002] # THAANA LETTER KAAFU
+0787 ; [.2889.0020.0002] # THAANA LETTER ALIFU
+07A2 ; [.288A.0020.0002] # THAANA LETTER AINU
+07A3 ; [.288B.0020.0002] # THAANA LETTER GHAINU
+0788 ; [.288C.0020.0002] # THAANA LETTER VAAVU
+07A5 ; [.288D.0020.0002] # THAANA LETTER WAAVU
+0789 ; [.288E.0020.0002] # THAANA LETTER MEEMU
+078A ; [.288F.0020.0002] # THAANA LETTER FAAFU
+078B ; [.2890.0020.0002] # THAANA LETTER DHAALU
+079B ; [.2891.0020.0002] # THAANA LETTER THAALU
+078C ; [.2892.0020.0002] # THAANA LETTER THAA
+0798 ; [.2893.0020.0002] # THAANA LETTER TTAA
+07A0 ; [.2894.0020.0002] # THAANA LETTER TO
+07A1 ; [.2895.0020.0002] # THAANA LETTER ZO
+078D ; [.2896.0020.0002] # THAANA LETTER LAAMU
+078E ; [.2897.0020.0002] # THAANA LETTER GAAFU
+07A4 ; [.2898.0020.0002] # THAANA LETTER QAAFU
+078F ; [.2899.0020.0002] # THAANA LETTER GNAVIYANI
+0790 ; [.289A.0020.0002] # THAANA LETTER SEENU
+079D ; [.289B.0020.0002] # THAANA LETTER SHEENU
+079E ; [.289C.0020.0002] # THAANA LETTER SAADHU
+079F ; [.289D.0020.0002] # THAANA LETTER DAADHU
+0791 ; [.289E.0020.0002] # THAANA LETTER DAVIYANI
+0792 ; [.289F.0020.0002] # THAANA LETTER ZAVIYANI
+0793 ; [.28A0.0020.0002] # THAANA LETTER TAVIYANI
+0794 ; [.28A1.0020.0002] # THAANA LETTER YAA
+0795 ; [.28A2.0020.0002] # THAANA LETTER PAVIYANI
+0796 ; [.28A3.0020.0002] # THAANA LETTER JAVIYANI
+0797 ; [.28A4.0020.0002] # THAANA LETTER CHAVIYANI
+07B1 ; [.28A5.0020.0002] # THAANA LETTER NAA
+07A6 ; [.28A6.0020.0002] # THAANA ABAFILI
+07A7 ; [.28A7.0020.0002] # THAANA AABAAFILI
+07A8 ; [.28A8.0020.0002] # THAANA IBIFILI
+07A9 ; [.28A9.0020.0002] # THAANA EEBEEFILI
+07AA ; [.28AA.0020.0002] # THAANA UBUFILI
+07AB ; [.28AB.0020.0002] # THAANA OOBOOFILI
+07AC ; [.28AC.0020.0002] # THAANA EBEFILI
+07AD ; [.28AD.0020.0002] # THAANA EYBEYFILI
+07AE ; [.28AE.0020.0002] # THAANA OBOFILI
+07AF ; [.28AF.0020.0002] # THAANA OABOAFILI
+07B0 ; [.28B0.0020.0002] # THAANA SUKUN
+07CA ; [.28B1.0020.0002] # NKO LETTER A
+07CB ; [.28B2.0020.0002] # NKO LETTER EE
+07CC ; [.28B3.0020.0002] # NKO LETTER I
+07CD ; [.28B4.0020.0002] # NKO LETTER E
+07CE ; [.28B5.0020.0002] # NKO LETTER U
+07CF ; [.28B6.0020.0002] # NKO LETTER OO
+07D0 ; [.28B7.0020.0002] # NKO LETTER O
+07D1 ; [.28B8.0020.0002] # NKO LETTER DAGBASINNA
+07D2 ; [.28B9.0020.0002] # NKO LETTER N
+07D3 ; [.28BA.0020.0002] # NKO LETTER BA
+07D4 ; [.28BB.0020.0002] # NKO LETTER PA
+07D5 ; [.28BC.0020.0002] # NKO LETTER TA
+07D6 ; [.28BD.0020.0002] # NKO LETTER JA
+07E8 ; [.28BD.0020.0004][.0000.0118.0004] # NKO LETTER JONA JA
+07D7 ; [.28BE.0020.0002] # NKO LETTER CHA
+07E9 ; [.28BE.0020.0004][.0000.0118.0004] # NKO LETTER JONA CHA
+07D8 ; [.28BF.0020.0002] # NKO LETTER DA
+07D9 ; [.28C0.0020.0002] # NKO LETTER RA
+07EA ; [.28C0.0020.0004][.0000.0118.0004] # NKO LETTER JONA RA
+07DA ; [.28C1.0020.0002] # NKO LETTER RRA
+07DB ; [.28C2.0020.0002] # NKO LETTER SA
+07DC ; [.28C3.0020.0002] # NKO LETTER GBA
+07DD ; [.28C4.0020.0002] # NKO LETTER FA
+07DE ; [.28C5.0020.0002] # NKO LETTER KA
+07DF ; [.28C6.0020.0002] # NKO LETTER LA
+07E0 ; [.28C7.0020.0002] # NKO LETTER NA WOLOSO
+07E1 ; [.28C8.0020.0002] # NKO LETTER MA
+07E2 ; [.28C9.0020.0002] # NKO LETTER NYA
+07E3 ; [.28CA.0020.0002] # NKO LETTER NA
+07E4 ; [.28CB.0020.0002] # NKO LETTER HA
+07E5 ; [.28CC.0020.0002] # NKO LETTER WA
+07E6 ; [.28CD.0020.0002] # NKO LETTER YA
+07E7 ; [.28CE.0020.0002] # NKO LETTER NYA WOLOSO
+07F4 ; [.28CF.0020.0002] # NKO HIGH TONE APOSTROPHE
+07F5 ; [.28D0.0020.0002] # NKO LOW TONE APOSTROPHE
+2D30 ; [.28D1.0020.0002] # TIFINAGH LETTER YA
+2D31 ; [.28D2.0020.0002] # TIFINAGH LETTER YAB
+2D32 ; [.28D3.0020.0002] # TIFINAGH LETTER YABH
+2D33 ; [.28D4.0020.0002] # TIFINAGH LETTER YAG
+2D34 ; [.28D5.0020.0002] # TIFINAGH LETTER YAGHH
+2D35 ; [.28D6.0020.0002] # TIFINAGH LETTER BERBER ACADEMY YAJ
+2D36 ; [.28D7.0020.0002] # TIFINAGH LETTER YAJ
+2D37 ; [.28D8.0020.0002] # TIFINAGH LETTER YAD
+2D38 ; [.28D9.0020.0002] # TIFINAGH LETTER YADH
+2D39 ; [.28DA.0020.0002] # TIFINAGH LETTER YADD
+2D3A ; [.28DB.0020.0002] # TIFINAGH LETTER YADDH
+2D3B ; [.28DC.0020.0002] # TIFINAGH LETTER YEY
+2D66 ; [.28DD.0020.0002] # TIFINAGH LETTER YE
+2D3C ; [.28DE.0020.0002] # TIFINAGH LETTER YAF
+2D3D ; [.28DF.0020.0002] # TIFINAGH LETTER YAK
+2D3E ; [.28E0.0020.0002] # TIFINAGH LETTER TUAREG YAK
+2D3F ; [.28E1.0020.0002] # TIFINAGH LETTER YAKHH
+2D40 ; [.28E2.0020.0002] # TIFINAGH LETTER YAH
+2D41 ; [.28E3.0020.0002] # TIFINAGH LETTER BERBER ACADEMY YAH
+2D42 ; [.28E4.0020.0002] # TIFINAGH LETTER TUAREG YAH
+2D43 ; [.28E5.0020.0002] # TIFINAGH LETTER YAHH
+2D44 ; [.28E6.0020.0002] # TIFINAGH LETTER YAA
+2D45 ; [.28E7.0020.0002] # TIFINAGH LETTER YAKH
+2D46 ; [.28E8.0020.0002] # TIFINAGH LETTER TUAREG YAKH
+2D47 ; [.28E9.0020.0002] # TIFINAGH LETTER YAQ
+2D48 ; [.28EA.0020.0002] # TIFINAGH LETTER TUAREG YAQ
+2D49 ; [.28EB.0020.0002] # TIFINAGH LETTER YI
+2D4A ; [.28EC.0020.0002] # TIFINAGH LETTER YAZH
+2D4B ; [.28ED.0020.0002] # TIFINAGH LETTER AHAGGAR YAZH
+2D4C ; [.28EE.0020.0002] # TIFINAGH LETTER TUAREG YAZH
+2D4D ; [.28EF.0020.0002] # TIFINAGH LETTER YAL
+2D4E ; [.28F0.0020.0002] # TIFINAGH LETTER YAM
+2D4F ; [.28F1.0020.0002] # TIFINAGH LETTER YAN
+2D50 ; [.28F2.0020.0002] # TIFINAGH LETTER TUAREG YAGN
+2D51 ; [.28F3.0020.0002] # TIFINAGH LETTER TUAREG YANG
+2D52 ; [.28F4.0020.0002] # TIFINAGH LETTER YAP
+2D53 ; [.28F5.0020.0002] # TIFINAGH LETTER YU
+2D67 ; [.28F6.0020.0002] # TIFINAGH LETTER YO
+2D54 ; [.28F7.0020.0002] # TIFINAGH LETTER YAR
+2D55 ; [.28F8.0020.0002] # TIFINAGH LETTER YARR
+2D56 ; [.28F9.0020.0002] # TIFINAGH LETTER YAGH
+2D57 ; [.28FA.0020.0002] # TIFINAGH LETTER TUAREG YAGH
+2D58 ; [.28FB.0020.0002] # TIFINAGH LETTER AYER YAGH
+2D59 ; [.28FC.0020.0002] # TIFINAGH LETTER YAS
+2D5A ; [.28FD.0020.0002] # TIFINAGH LETTER YASS
+2D5B ; [.28FE.0020.0002] # TIFINAGH LETTER YASH
+2D5C ; [.28FF.0020.0002] # TIFINAGH LETTER YAT
+2D5D ; [.2900.0020.0002] # TIFINAGH LETTER YATH
+2D5E ; [.2901.0020.0002] # TIFINAGH LETTER YACH
+2D5F ; [.2902.0020.0002] # TIFINAGH LETTER YATT
+2D60 ; [.2903.0020.0002] # TIFINAGH LETTER YAV
+2D61 ; [.2904.0020.0002] # TIFINAGH LETTER YAW
+2D62 ; [.2905.0020.0002] # TIFINAGH LETTER YAY
+2D63 ; [.2906.0020.0002] # TIFINAGH LETTER YAZ
+2D64 ; [.2907.0020.0002] # TIFINAGH LETTER TAWELLEMET YAZ
+2D65 ; [.2908.0020.0002] # TIFINAGH LETTER YAZZ
+2D6F ; [.2909.0020.0002] # TIFINAGH MODIFIER LETTER LABIALIZATION MARK
+1200 ; [.290A.0020.0002] # ETHIOPIC SYLLABLE HA
+1201 ; [.290B.0020.0002] # ETHIOPIC SYLLABLE HU
+1202 ; [.290C.0020.0002] # ETHIOPIC SYLLABLE HI
+1203 ; [.290D.0020.0002] # ETHIOPIC SYLLABLE HAA
+1204 ; [.290E.0020.0002] # ETHIOPIC SYLLABLE HEE
+1205 ; [.290F.0020.0002] # ETHIOPIC SYLLABLE HE
+1206 ; [.2910.0020.0002] # ETHIOPIC SYLLABLE HO
+1207 ; [.2911.0020.0002] # ETHIOPIC SYLLABLE HOA
+1208 ; [.2912.0020.0002] # ETHIOPIC SYLLABLE LA
+1209 ; [.2913.0020.0002] # ETHIOPIC SYLLABLE LU
+120A ; [.2914.0020.0002] # ETHIOPIC SYLLABLE LI
+120B ; [.2915.0020.0002] # ETHIOPIC SYLLABLE LAA
+120C ; [.2916.0020.0002] # ETHIOPIC SYLLABLE LEE
+120D ; [.2917.0020.0002] # ETHIOPIC SYLLABLE LE
+120E ; [.2918.0020.0002] # ETHIOPIC SYLLABLE LO
+120F ; [.2919.0020.0002] # ETHIOPIC SYLLABLE LWA
+2D80 ; [.291A.0020.0002] # ETHIOPIC SYLLABLE LOA
+1210 ; [.291B.0020.0002] # ETHIOPIC SYLLABLE HHA
+1211 ; [.291C.0020.0002] # ETHIOPIC SYLLABLE HHU
+1212 ; [.291D.0020.0002] # ETHIOPIC SYLLABLE HHI
+1213 ; [.291E.0020.0002] # ETHIOPIC SYLLABLE HHAA
+1214 ; [.291F.0020.0002] # ETHIOPIC SYLLABLE HHEE
+1215 ; [.2920.0020.0002] # ETHIOPIC SYLLABLE HHE
+1216 ; [.2921.0020.0002] # ETHIOPIC SYLLABLE HHO
+1217 ; [.2922.0020.0002] # ETHIOPIC SYLLABLE HHWA
+1218 ; [.2923.0020.0002] # ETHIOPIC SYLLABLE MA
+1219 ; [.2924.0020.0002] # ETHIOPIC SYLLABLE MU
+121A ; [.2925.0020.0002] # ETHIOPIC SYLLABLE MI
+121B ; [.2926.0020.0002] # ETHIOPIC SYLLABLE MAA
+121C ; [.2927.0020.0002] # ETHIOPIC SYLLABLE MEE
+121D ; [.2928.0020.0002] # ETHIOPIC SYLLABLE ME
+121E ; [.2929.0020.0002] # ETHIOPIC SYLLABLE MO
+121F ; [.292A.0020.0002] # ETHIOPIC SYLLABLE MWA
+1380 ; [.292B.0020.0002] # ETHIOPIC SYLLABLE SEBATBEIT MWA
+1E7ED ; [.292C.0020.0002] # ETHIOPIC SYLLABLE GURAGE MWI
+1381 ; [.292D.0020.0002] # ETHIOPIC SYLLABLE MWI
+1E7EE ; [.292E.0020.0002] # ETHIOPIC SYLLABLE GURAGE MWEE
+1382 ; [.292F.0020.0002] # ETHIOPIC SYLLABLE MWEE
+1383 ; [.2930.0020.0002] # ETHIOPIC SYLLABLE MWE
+2D81 ; [.2931.0020.0002] # ETHIOPIC SYLLABLE MOA
+1220 ; [.2932.0020.0002] # ETHIOPIC SYLLABLE SZA
+1221 ; [.2933.0020.0002] # ETHIOPIC SYLLABLE SZU
+1222 ; [.2934.0020.0002] # ETHIOPIC SYLLABLE SZI
+1223 ; [.2935.0020.0002] # ETHIOPIC SYLLABLE SZAA
+1224 ; [.2936.0020.0002] # ETHIOPIC SYLLABLE SZEE
+1225 ; [.2937.0020.0002] # ETHIOPIC SYLLABLE SZE
+1226 ; [.2938.0020.0002] # ETHIOPIC SYLLABLE SZO
+1227 ; [.2939.0020.0002] # ETHIOPIC SYLLABLE SZWA
+1228 ; [.293A.0020.0002] # ETHIOPIC SYLLABLE RA
+1229 ; [.293B.0020.0002] # ETHIOPIC SYLLABLE RU
+122A ; [.293C.0020.0002] # ETHIOPIC SYLLABLE RI
+122B ; [.293D.0020.0002] # ETHIOPIC SYLLABLE RAA
+122C ; [.293E.0020.0002] # ETHIOPIC SYLLABLE REE
+122D ; [.293F.0020.0002] # ETHIOPIC SYLLABLE RE
+122E ; [.2940.0020.0002] # ETHIOPIC SYLLABLE RO
+122F ; [.2941.0020.0002] # ETHIOPIC SYLLABLE RWA
+2D82 ; [.2942.0020.0002] # ETHIOPIC SYLLABLE ROA
+1230 ; [.2943.0020.0002] # ETHIOPIC SYLLABLE SA
+1231 ; [.2944.0020.0002] # ETHIOPIC SYLLABLE SU
+1232 ; [.2945.0020.0002] # ETHIOPIC SYLLABLE SI
+1233 ; [.2946.0020.0002] # ETHIOPIC SYLLABLE SAA
+1234 ; [.2947.0020.0002] # ETHIOPIC SYLLABLE SEE
+1235 ; [.2948.0020.0002] # ETHIOPIC SYLLABLE SE
+1236 ; [.2949.0020.0002] # ETHIOPIC SYLLABLE SO
+1237 ; [.294A.0020.0002] # ETHIOPIC SYLLABLE SWA
+2D83 ; [.294B.0020.0002] # ETHIOPIC SYLLABLE SOA
+AB01 ; [.294C.0020.0002] # ETHIOPIC SYLLABLE TTHU
+AB02 ; [.294D.0020.0002] # ETHIOPIC SYLLABLE TTHI
+AB03 ; [.294E.0020.0002] # ETHIOPIC SYLLABLE TTHAA
+AB04 ; [.294F.0020.0002] # ETHIOPIC SYLLABLE TTHEE
+AB05 ; [.2950.0020.0002] # ETHIOPIC SYLLABLE TTHE
+AB06 ; [.2951.0020.0002] # ETHIOPIC SYLLABLE TTHO
+1238 ; [.2952.0020.0002] # ETHIOPIC SYLLABLE SHA
+1239 ; [.2953.0020.0002] # ETHIOPIC SYLLABLE SHU
+123A ; [.2954.0020.0002] # ETHIOPIC SYLLABLE SHI
+123B ; [.2955.0020.0002] # ETHIOPIC SYLLABLE SHAA
+123C ; [.2956.0020.0002] # ETHIOPIC SYLLABLE SHEE
+123D ; [.2957.0020.0002] # ETHIOPIC SYLLABLE SHE
+123E ; [.2958.0020.0002] # ETHIOPIC SYLLABLE SHO
+123F ; [.2959.0020.0002] # ETHIOPIC SYLLABLE SHWA
+2D84 ; [.295A.0020.0002] # ETHIOPIC SYLLABLE SHOA
+1240 ; [.295B.0020.0002] # ETHIOPIC SYLLABLE QA
+1241 ; [.295C.0020.0002] # ETHIOPIC SYLLABLE QU
+1242 ; [.295D.0020.0002] # ETHIOPIC SYLLABLE QI
+1243 ; [.295E.0020.0002] # ETHIOPIC SYLLABLE QAA
+1244 ; [.295F.0020.0002] # ETHIOPIC SYLLABLE QEE
+1245 ; [.2960.0020.0002] # ETHIOPIC SYLLABLE QE
+1246 ; [.2961.0020.0002] # ETHIOPIC SYLLABLE QO
+1247 ; [.2962.0020.0002] # ETHIOPIC SYLLABLE QOA
+1248 ; [.2963.0020.0002] # ETHIOPIC SYLLABLE QWA
+1E7F0 ; [.2964.0020.0002] # ETHIOPIC SYLLABLE GURAGE QWI
+124A ; [.2965.0020.0002] # ETHIOPIC SYLLABLE QWI
+124B ; [.2966.0020.0002] # ETHIOPIC SYLLABLE QWAA
+1E7F1 ; [.2967.0020.0002] # ETHIOPIC SYLLABLE GURAGE QWEE
+124C ; [.2968.0020.0002] # ETHIOPIC SYLLABLE QWEE
+1E7F2 ; [.2969.0020.0002] # ETHIOPIC SYLLABLE GURAGE QWE
+124D ; [.296A.0020.0002] # ETHIOPIC SYLLABLE QWE
+1250 ; [.296B.0020.0002] # ETHIOPIC SYLLABLE QHA
+1251 ; [.296C.0020.0002] # ETHIOPIC SYLLABLE QHU
+1252 ; [.296D.0020.0002] # ETHIOPIC SYLLABLE QHI
+1253 ; [.296E.0020.0002] # ETHIOPIC SYLLABLE QHAA
+1254 ; [.296F.0020.0002] # ETHIOPIC SYLLABLE QHEE
+1255 ; [.2970.0020.0002] # ETHIOPIC SYLLABLE QHE
+1256 ; [.2971.0020.0002] # ETHIOPIC SYLLABLE QHO
+1258 ; [.2972.0020.0002] # ETHIOPIC SYLLABLE QHWA
+125A ; [.2973.0020.0002] # ETHIOPIC SYLLABLE QHWI
+125B ; [.2974.0020.0002] # ETHIOPIC SYLLABLE QHWAA
+125C ; [.2975.0020.0002] # ETHIOPIC SYLLABLE QHWEE
+125D ; [.2976.0020.0002] # ETHIOPIC SYLLABLE QHWE
+1260 ; [.2977.0020.0002] # ETHIOPIC SYLLABLE BA
+1261 ; [.2978.0020.0002] # ETHIOPIC SYLLABLE BU
+1262 ; [.2979.0020.0002] # ETHIOPIC SYLLABLE BI
+1263 ; [.297A.0020.0002] # ETHIOPIC SYLLABLE BAA
+1264 ; [.297B.0020.0002] # ETHIOPIC SYLLABLE BEE
+1265 ; [.297C.0020.0002] # ETHIOPIC SYLLABLE BE
+1266 ; [.297D.0020.0002] # ETHIOPIC SYLLABLE BO
+1267 ; [.297E.0020.0002] # ETHIOPIC SYLLABLE BWA
+1384 ; [.297F.0020.0002] # ETHIOPIC SYLLABLE SEBATBEIT BWA
+1E7F3 ; [.2980.0020.0002] # ETHIOPIC SYLLABLE GURAGE BWI
+1385 ; [.2981.0020.0002] # ETHIOPIC SYLLABLE BWI
+1E7F4 ; [.2982.0020.0002] # ETHIOPIC SYLLABLE GURAGE BWEE
+1386 ; [.2983.0020.0002] # ETHIOPIC SYLLABLE BWEE
+1387 ; [.2984.0020.0002] # ETHIOPIC SYLLABLE BWE
+2D85 ; [.2985.0020.0002] # ETHIOPIC SYLLABLE BOA
+1268 ; [.2986.0020.0002] # ETHIOPIC SYLLABLE VA
+1269 ; [.2987.0020.0002] # ETHIOPIC SYLLABLE VU
+126A ; [.2988.0020.0002] # ETHIOPIC SYLLABLE VI
+126B ; [.2989.0020.0002] # ETHIOPIC SYLLABLE VAA
+126C ; [.298A.0020.0002] # ETHIOPIC SYLLABLE VEE
+126D ; [.298B.0020.0002] # ETHIOPIC SYLLABLE VE
+126E ; [.298C.0020.0002] # ETHIOPIC SYLLABLE VO
+126F ; [.298D.0020.0002] # ETHIOPIC SYLLABLE VWA
+1270 ; [.298E.0020.0002] # ETHIOPIC SYLLABLE TA
+1271 ; [.298F.0020.0002] # ETHIOPIC SYLLABLE TU
+1272 ; [.2990.0020.0002] # ETHIOPIC SYLLABLE TI
+1273 ; [.2991.0020.0002] # ETHIOPIC SYLLABLE TAA
+1274 ; [.2992.0020.0002] # ETHIOPIC SYLLABLE TEE
+1275 ; [.2993.0020.0002] # ETHIOPIC SYLLABLE TE
+1276 ; [.2994.0020.0002] # ETHIOPIC SYLLABLE TO
+1277 ; [.2995.0020.0002] # ETHIOPIC SYLLABLE TWA
+2D86 ; [.2996.0020.0002] # ETHIOPIC SYLLABLE TOA
+1278 ; [.2997.0020.0002] # ETHIOPIC SYLLABLE CA
+1279 ; [.2998.0020.0002] # ETHIOPIC SYLLABLE CU
+127A ; [.2999.0020.0002] # ETHIOPIC SYLLABLE CI
+127B ; [.299A.0020.0002] # ETHIOPIC SYLLABLE CAA
+127C ; [.299B.0020.0002] # ETHIOPIC SYLLABLE CEE
+127D ; [.299C.0020.0002] # ETHIOPIC SYLLABLE CE
+127E ; [.299D.0020.0002] # ETHIOPIC SYLLABLE CO
+127F ; [.299E.0020.0002] # ETHIOPIC SYLLABLE CWA
+2D87 ; [.299F.0020.0002] # ETHIOPIC SYLLABLE COA
+1280 ; [.29A0.0020.0002] # ETHIOPIC SYLLABLE XA
+1281 ; [.29A1.0020.0002] # ETHIOPIC SYLLABLE XU
+1282 ; [.29A2.0020.0002] # ETHIOPIC SYLLABLE XI
+1283 ; [.29A3.0020.0002] # ETHIOPIC SYLLABLE XAA
+1284 ; [.29A4.0020.0002] # ETHIOPIC SYLLABLE XEE
+1285 ; [.29A5.0020.0002] # ETHIOPIC SYLLABLE XE
+1286 ; [.29A6.0020.0002] # ETHIOPIC SYLLABLE XO
+1287 ; [.29A7.0020.0002] # ETHIOPIC SYLLABLE XOA
+1288 ; [.29A8.0020.0002] # ETHIOPIC SYLLABLE XWA
+128A ; [.29A9.0020.0002] # ETHIOPIC SYLLABLE XWI
+128B ; [.29AA.0020.0002] # ETHIOPIC SYLLABLE XWAA
+128C ; [.29AB.0020.0002] # ETHIOPIC SYLLABLE XWEE
+128D ; [.29AC.0020.0002] # ETHIOPIC SYLLABLE XWE
+1290 ; [.29AD.0020.0002] # ETHIOPIC SYLLABLE NA
+1291 ; [.29AE.0020.0002] # ETHIOPIC SYLLABLE NU
+1292 ; [.29AF.0020.0002] # ETHIOPIC SYLLABLE NI
+1293 ; [.29B0.0020.0002] # ETHIOPIC SYLLABLE NAA
+1294 ; [.29B1.0020.0002] # ETHIOPIC SYLLABLE NEE
+1295 ; [.29B2.0020.0002] # ETHIOPIC SYLLABLE NE
+1296 ; [.29B3.0020.0002] # ETHIOPIC SYLLABLE NO
+1297 ; [.29B4.0020.0002] # ETHIOPIC SYLLABLE NWA
+2D88 ; [.29B5.0020.0002] # ETHIOPIC SYLLABLE NOA
+1298 ; [.29B6.0020.0002] # ETHIOPIC SYLLABLE NYA
+1299 ; [.29B7.0020.0002] # ETHIOPIC SYLLABLE NYU
+129A ; [.29B8.0020.0002] # ETHIOPIC SYLLABLE NYI
+129B ; [.29B9.0020.0002] # ETHIOPIC SYLLABLE NYAA
+129C ; [.29BA.0020.0002] # ETHIOPIC SYLLABLE NYEE
+129D ; [.29BB.0020.0002] # ETHIOPIC SYLLABLE NYE
+129E ; [.29BC.0020.0002] # ETHIOPIC SYLLABLE NYO
+129F ; [.29BD.0020.0002] # ETHIOPIC SYLLABLE NYWA
+2D89 ; [.29BE.0020.0002] # ETHIOPIC SYLLABLE NYOA
+12A0 ; [.29BF.0020.0002] # ETHIOPIC SYLLABLE GLOTTAL A
+12A1 ; [.29C0.0020.0002] # ETHIOPIC SYLLABLE GLOTTAL U
+12A2 ; [.29C1.0020.0002] # ETHIOPIC SYLLABLE GLOTTAL I
+12A3 ; [.29C2.0020.0002] # ETHIOPIC SYLLABLE GLOTTAL AA
+12A4 ; [.29C3.0020.0002] # ETHIOPIC SYLLABLE GLOTTAL EE
+12A5 ; [.29C4.0020.0002] # ETHIOPIC SYLLABLE GLOTTAL E
+12A6 ; [.29C5.0020.0002] # ETHIOPIC SYLLABLE GLOTTAL O
+12A7 ; [.29C6.0020.0002] # ETHIOPIC SYLLABLE GLOTTAL WA
+2D8A ; [.29C7.0020.0002] # ETHIOPIC SYLLABLE GLOTTAL OA
+12A8 ; [.29C8.0020.0002] # ETHIOPIC SYLLABLE KA
+12A9 ; [.29C9.0020.0002] # ETHIOPIC SYLLABLE KU
+12AA ; [.29CA.0020.0002] # ETHIOPIC SYLLABLE KI
+12AB ; [.29CB.0020.0002] # ETHIOPIC SYLLABLE KAA
+12AC ; [.29CC.0020.0002] # ETHIOPIC SYLLABLE KEE
+12AD ; [.29CD.0020.0002] # ETHIOPIC SYLLABLE KE
+12AE ; [.29CE.0020.0002] # ETHIOPIC SYLLABLE KO
+12AF ; [.29CF.0020.0002] # ETHIOPIC SYLLABLE KOA
+12B0 ; [.29D0.0020.0002] # ETHIOPIC SYLLABLE KWA
+1E7F5 ; [.29D1.0020.0002] # ETHIOPIC SYLLABLE GURAGE KWI
+12B2 ; [.29D2.0020.0002] # ETHIOPIC SYLLABLE KWI
+12B3 ; [.29D3.0020.0002] # ETHIOPIC SYLLABLE KWAA
+1E7F6 ; [.29D4.0020.0002] # ETHIOPIC SYLLABLE GURAGE KWEE
+12B4 ; [.29D5.0020.0002] # ETHIOPIC SYLLABLE KWEE
+1E7F7 ; [.29D6.0020.0002] # ETHIOPIC SYLLABLE GURAGE KWE
+12B5 ; [.29D7.0020.0002] # ETHIOPIC SYLLABLE KWE
+12B8 ; [.29D8.0020.0002] # ETHIOPIC SYLLABLE KXA
+12B9 ; [.29D9.0020.0002] # ETHIOPIC SYLLABLE KXU
+12BA ; [.29DA.0020.0002] # ETHIOPIC SYLLABLE KXI
+12BB ; [.29DB.0020.0002] # ETHIOPIC SYLLABLE KXAA
+12BC ; [.29DC.0020.0002] # ETHIOPIC SYLLABLE KXEE
+12BD ; [.29DD.0020.0002] # ETHIOPIC SYLLABLE KXE
+12BE ; [.29DE.0020.0002] # ETHIOPIC SYLLABLE KXO
+1E7E8 ; [.29DF.0020.0002] # ETHIOPIC SYLLABLE GURAGE HHWA
+12C0 ; [.29E0.0020.0002] # ETHIOPIC SYLLABLE KXWA
+1E7E9 ; [.29E1.0020.0002] # ETHIOPIC SYLLABLE HHWI
+12C2 ; [.29E2.0020.0002] # ETHIOPIC SYLLABLE KXWI
+12C3 ; [.29E3.0020.0002] # ETHIOPIC SYLLABLE KXWAA
+1E7EA ; [.29E4.0020.0002] # ETHIOPIC SYLLABLE HHWEE
+12C4 ; [.29E5.0020.0002] # ETHIOPIC SYLLABLE KXWEE
+1E7EB ; [.29E6.0020.0002] # ETHIOPIC SYLLABLE HHWE
+12C5 ; [.29E7.0020.0002] # ETHIOPIC SYLLABLE KXWE
+12C8 ; [.29E8.0020.0002] # ETHIOPIC SYLLABLE WA
+12C9 ; [.29E9.0020.0002] # ETHIOPIC SYLLABLE WU
+12CA ; [.29EA.0020.0002] # ETHIOPIC SYLLABLE WI
+12CB ; [.29EB.0020.0002] # ETHIOPIC SYLLABLE WAA
+12CC ; [.29EC.0020.0002] # ETHIOPIC SYLLABLE WEE
+12CD ; [.29ED.0020.0002] # ETHIOPIC SYLLABLE WE
+12CE ; [.29EE.0020.0002] # ETHIOPIC SYLLABLE WO
+12CF ; [.29EF.0020.0002] # ETHIOPIC SYLLABLE WOA
+12D0 ; [.29F0.0020.0002] # ETHIOPIC SYLLABLE PHARYNGEAL A
+12D1 ; [.29F1.0020.0002] # ETHIOPIC SYLLABLE PHARYNGEAL U
+12D2 ; [.29F2.0020.0002] # ETHIOPIC SYLLABLE PHARYNGEAL I
+12D3 ; [.29F3.0020.0002] # ETHIOPIC SYLLABLE PHARYNGEAL AA
+12D4 ; [.29F4.0020.0002] # ETHIOPIC SYLLABLE PHARYNGEAL EE
+12D5 ; [.29F5.0020.0002] # ETHIOPIC SYLLABLE PHARYNGEAL E
+12D6 ; [.29F6.0020.0002] # ETHIOPIC SYLLABLE PHARYNGEAL O
+12D8 ; [.29F7.0020.0002] # ETHIOPIC SYLLABLE ZA
+12D9 ; [.29F8.0020.0002] # ETHIOPIC SYLLABLE ZU
+12DA ; [.29F9.0020.0002] # ETHIOPIC SYLLABLE ZI
+12DB ; [.29FA.0020.0002] # ETHIOPIC SYLLABLE ZAA
+12DC ; [.29FB.0020.0002] # ETHIOPIC SYLLABLE ZEE
+12DD ; [.29FC.0020.0002] # ETHIOPIC SYLLABLE ZE
+12DE ; [.29FD.0020.0002] # ETHIOPIC SYLLABLE ZO
+12DF ; [.29FE.0020.0002] # ETHIOPIC SYLLABLE ZWA
+2D8B ; [.29FF.0020.0002] # ETHIOPIC SYLLABLE ZOA
+AB11 ; [.2A00.0020.0002] # ETHIOPIC SYLLABLE DZU
+AB12 ; [.2A01.0020.0002] # ETHIOPIC SYLLABLE DZI
+AB13 ; [.2A02.0020.0002] # ETHIOPIC SYLLABLE DZAA
+AB14 ; [.2A03.0020.0002] # ETHIOPIC SYLLABLE DZEE
+AB15 ; [.2A04.0020.0002] # ETHIOPIC SYLLABLE DZE
+AB16 ; [.2A05.0020.0002] # ETHIOPIC SYLLABLE DZO
+12E0 ; [.2A06.0020.0002] # ETHIOPIC SYLLABLE ZHA
+12E1 ; [.2A07.0020.0002] # ETHIOPIC SYLLABLE ZHU
+12E2 ; [.2A08.0020.0002] # ETHIOPIC SYLLABLE ZHI
+12E3 ; [.2A09.0020.0002] # ETHIOPIC SYLLABLE ZHAA
+12E4 ; [.2A0A.0020.0002] # ETHIOPIC SYLLABLE ZHEE
+12E5 ; [.2A0B.0020.0002] # ETHIOPIC SYLLABLE ZHE
+12E6 ; [.2A0C.0020.0002] # ETHIOPIC SYLLABLE ZHO
+12E7 ; [.2A0D.0020.0002] # ETHIOPIC SYLLABLE ZHWA
+12E8 ; [.2A0E.0020.0002] # ETHIOPIC SYLLABLE YA
+12E9 ; [.2A0F.0020.0002] # ETHIOPIC SYLLABLE YU
+12EA ; [.2A10.0020.0002] # ETHIOPIC SYLLABLE YI
+12EB ; [.2A11.0020.0002] # ETHIOPIC SYLLABLE YAA
+12EC ; [.2A12.0020.0002] # ETHIOPIC SYLLABLE YEE
+12ED ; [.2A13.0020.0002] # ETHIOPIC SYLLABLE YE
+12EE ; [.2A14.0020.0002] # ETHIOPIC SYLLABLE YO
+12EF ; [.2A15.0020.0002] # ETHIOPIC SYLLABLE YOA
+12F0 ; [.2A16.0020.0002] # ETHIOPIC SYLLABLE DA
+12F1 ; [.2A17.0020.0002] # ETHIOPIC SYLLABLE DU
+12F2 ; [.2A18.0020.0002] # ETHIOPIC SYLLABLE DI
+12F3 ; [.2A19.0020.0002] # ETHIOPIC SYLLABLE DAA
+12F4 ; [.2A1A.0020.0002] # ETHIOPIC SYLLABLE DEE
+12F5 ; [.2A1B.0020.0002] # ETHIOPIC SYLLABLE DE
+12F6 ; [.2A1C.0020.0002] # ETHIOPIC SYLLABLE DO
+12F7 ; [.2A1D.0020.0002] # ETHIOPIC SYLLABLE DWA
+2D8C ; [.2A1E.0020.0002] # ETHIOPIC SYLLABLE DOA
+AB09 ; [.2A1F.0020.0002] # ETHIOPIC SYLLABLE DDHU
+AB0A ; [.2A20.0020.0002] # ETHIOPIC SYLLABLE DDHI
+AB0B ; [.2A21.0020.0002] # ETHIOPIC SYLLABLE DDHAA
+AB0C ; [.2A22.0020.0002] # ETHIOPIC SYLLABLE DDHEE
+AB0D ; [.2A23.0020.0002] # ETHIOPIC SYLLABLE DDHE
+AB0E ; [.2A24.0020.0002] # ETHIOPIC SYLLABLE DDHO
+12F8 ; [.2A25.0020.0002] # ETHIOPIC SYLLABLE DDA
+12F9 ; [.2A26.0020.0002] # ETHIOPIC SYLLABLE DDU
+12FA ; [.2A27.0020.0002] # ETHIOPIC SYLLABLE DDI
+12FB ; [.2A28.0020.0002] # ETHIOPIC SYLLABLE DDAA
+12FC ; [.2A29.0020.0002] # ETHIOPIC SYLLABLE DDEE
+12FD ; [.2A2A.0020.0002] # ETHIOPIC SYLLABLE DDE
+12FE ; [.2A2B.0020.0002] # ETHIOPIC SYLLABLE DDO
+12FF ; [.2A2C.0020.0002] # ETHIOPIC SYLLABLE DDWA
+2D8D ; [.2A2D.0020.0002] # ETHIOPIC SYLLABLE DDOA
+1300 ; [.2A2E.0020.0002] # ETHIOPIC SYLLABLE JA
+1301 ; [.2A2F.0020.0002] # ETHIOPIC SYLLABLE JU
+1302 ; [.2A30.0020.0002] # ETHIOPIC SYLLABLE JI
+1303 ; [.2A31.0020.0002] # ETHIOPIC SYLLABLE JAA
+1304 ; [.2A32.0020.0002] # ETHIOPIC SYLLABLE JEE
+1305 ; [.2A33.0020.0002] # ETHIOPIC SYLLABLE JE
+1306 ; [.2A34.0020.0002] # ETHIOPIC SYLLABLE JO
+1307 ; [.2A35.0020.0002] # ETHIOPIC SYLLABLE JWA
+2D8E ; [.2A36.0020.0002] # ETHIOPIC SYLLABLE JOA
+1308 ; [.2A37.0020.0002] # ETHIOPIC SYLLABLE GA
+1309 ; [.2A38.0020.0002] # ETHIOPIC SYLLABLE GU
+130A ; [.2A39.0020.0002] # ETHIOPIC SYLLABLE GI
+130B ; [.2A3A.0020.0002] # ETHIOPIC SYLLABLE GAA
+130C ; [.2A3B.0020.0002] # ETHIOPIC SYLLABLE GEE
+130D ; [.2A3C.0020.0002] # ETHIOPIC SYLLABLE GE
+130E ; [.2A3D.0020.0002] # ETHIOPIC SYLLABLE GO
+130F ; [.2A3E.0020.0002] # ETHIOPIC SYLLABLE GOA
+1310 ; [.2A3F.0020.0002] # ETHIOPIC SYLLABLE GWA
+1E7F8 ; [.2A40.0020.0002] # ETHIOPIC SYLLABLE GURAGE GWI
+1312 ; [.2A41.0020.0002] # ETHIOPIC SYLLABLE GWI
+1313 ; [.2A42.0020.0002] # ETHIOPIC SYLLABLE GWAA
+1E7F9 ; [.2A43.0020.0002] # ETHIOPIC SYLLABLE GURAGE GWEE
+1314 ; [.2A44.0020.0002] # ETHIOPIC SYLLABLE GWEE
+1E7FA ; [.2A45.0020.0002] # ETHIOPIC SYLLABLE GURAGE GWE
+1315 ; [.2A46.0020.0002] # ETHIOPIC SYLLABLE GWE
+1318 ; [.2A47.0020.0002] # ETHIOPIC SYLLABLE GGA
+1319 ; [.2A48.0020.0002] # ETHIOPIC SYLLABLE GGU
+131A ; [.2A49.0020.0002] # ETHIOPIC SYLLABLE GGI
+131B ; [.2A4A.0020.0002] # ETHIOPIC SYLLABLE GGAA
+131C ; [.2A4B.0020.0002] # ETHIOPIC SYLLABLE GGEE
+131D ; [.2A4C.0020.0002] # ETHIOPIC SYLLABLE GGE
+131E ; [.2A4D.0020.0002] # ETHIOPIC SYLLABLE GGO
+131F ; [.2A4E.0020.0002] # ETHIOPIC SYLLABLE GGWAA
+2D93 ; [.2A4F.0020.0002] # ETHIOPIC SYLLABLE GGWA
+2D94 ; [.2A50.0020.0002] # ETHIOPIC SYLLABLE GGWI
+2D95 ; [.2A51.0020.0002] # ETHIOPIC SYLLABLE GGWEE
+2D96 ; [.2A52.0020.0002] # ETHIOPIC SYLLABLE GGWE
+1320 ; [.2A53.0020.0002] # ETHIOPIC SYLLABLE THA
+1321 ; [.2A54.0020.0002] # ETHIOPIC SYLLABLE THU
+1322 ; [.2A55.0020.0002] # ETHIOPIC SYLLABLE THI
+1323 ; [.2A56.0020.0002] # ETHIOPIC SYLLABLE THAA
+1324 ; [.2A57.0020.0002] # ETHIOPIC SYLLABLE THEE
+1325 ; [.2A58.0020.0002] # ETHIOPIC SYLLABLE THE
+1326 ; [.2A59.0020.0002] # ETHIOPIC SYLLABLE THO
+1327 ; [.2A5A.0020.0002] # ETHIOPIC SYLLABLE THWA
+2D8F ; [.2A5B.0020.0002] # ETHIOPIC SYLLABLE THOA
+1328 ; [.2A5C.0020.0002] # ETHIOPIC SYLLABLE CHA
+1329 ; [.2A5D.0020.0002] # ETHIOPIC SYLLABLE CHU
+132A ; [.2A5E.0020.0002] # ETHIOPIC SYLLABLE CHI
+132B ; [.2A5F.0020.0002] # ETHIOPIC SYLLABLE CHAA
+132C ; [.2A60.0020.0002] # ETHIOPIC SYLLABLE CHEE
+132D ; [.2A61.0020.0002] # ETHIOPIC SYLLABLE CHE
+132E ; [.2A62.0020.0002] # ETHIOPIC SYLLABLE CHO
+132F ; [.2A63.0020.0002] # ETHIOPIC SYLLABLE CHWA
+2D90 ; [.2A64.0020.0002] # ETHIOPIC SYLLABLE CHOA
+AB20 ; [.2A65.0020.0002] # ETHIOPIC SYLLABLE CCHHA
+AB21 ; [.2A66.0020.0002] # ETHIOPIC SYLLABLE CCHHU
+AB22 ; [.2A67.0020.0002] # ETHIOPIC SYLLABLE CCHHI
+AB23 ; [.2A68.0020.0002] # ETHIOPIC SYLLABLE CCHHAA
+AB24 ; [.2A69.0020.0002] # ETHIOPIC SYLLABLE CCHHEE
+AB25 ; [.2A6A.0020.0002] # ETHIOPIC SYLLABLE CCHHE
+AB26 ; [.2A6B.0020.0002] # ETHIOPIC SYLLABLE CCHHO
+1330 ; [.2A6C.0020.0002] # ETHIOPIC SYLLABLE PHA
+1331 ; [.2A6D.0020.0002] # ETHIOPIC SYLLABLE PHU
+1332 ; [.2A6E.0020.0002] # ETHIOPIC SYLLABLE PHI
+1333 ; [.2A6F.0020.0002] # ETHIOPIC SYLLABLE PHAA
+1334 ; [.2A70.0020.0002] # ETHIOPIC SYLLABLE PHEE
+1335 ; [.2A71.0020.0002] # ETHIOPIC SYLLABLE PHE
+1336 ; [.2A72.0020.0002] # ETHIOPIC SYLLABLE PHO
+1337 ; [.2A73.0020.0002] # ETHIOPIC SYLLABLE PHWA
+2D91 ; [.2A74.0020.0002] # ETHIOPIC SYLLABLE PHOA
+1338 ; [.2A75.0020.0002] # ETHIOPIC SYLLABLE TSA
+1339 ; [.2A76.0020.0002] # ETHIOPIC SYLLABLE TSU
+133A ; [.2A77.0020.0002] # ETHIOPIC SYLLABLE TSI
+133B ; [.2A78.0020.0002] # ETHIOPIC SYLLABLE TSAA
+133C ; [.2A79.0020.0002] # ETHIOPIC SYLLABLE TSEE
+133D ; [.2A7A.0020.0002] # ETHIOPIC SYLLABLE TSE
+133E ; [.2A7B.0020.0002] # ETHIOPIC SYLLABLE TSO
+133F ; [.2A7C.0020.0002] # ETHIOPIC SYLLABLE TSWA
+AB28 ; [.2A7D.0020.0002] # ETHIOPIC SYLLABLE BBA
+AB29 ; [.2A7E.0020.0002] # ETHIOPIC SYLLABLE BBU
+AB2A ; [.2A7F.0020.0002] # ETHIOPIC SYLLABLE BBI
+AB2B ; [.2A80.0020.0002] # ETHIOPIC SYLLABLE BBAA
+AB2C ; [.2A81.0020.0002] # ETHIOPIC SYLLABLE BBEE
+AB2D ; [.2A82.0020.0002] # ETHIOPIC SYLLABLE BBE
+AB2E ; [.2A83.0020.0002] # ETHIOPIC SYLLABLE BBO
+1340 ; [.2A84.0020.0002] # ETHIOPIC SYLLABLE TZA
+1341 ; [.2A85.0020.0002] # ETHIOPIC SYLLABLE TZU
+1342 ; [.2A86.0020.0002] # ETHIOPIC SYLLABLE TZI
+1343 ; [.2A87.0020.0002] # ETHIOPIC SYLLABLE TZAA
+1344 ; [.2A88.0020.0002] # ETHIOPIC SYLLABLE TZEE
+1345 ; [.2A89.0020.0002] # ETHIOPIC SYLLABLE TZE
+1346 ; [.2A8A.0020.0002] # ETHIOPIC SYLLABLE TZO
+1347 ; [.2A8B.0020.0002] # ETHIOPIC SYLLABLE TZOA
+1348 ; [.2A8C.0020.0002] # ETHIOPIC SYLLABLE FA
+1349 ; [.2A8D.0020.0002] # ETHIOPIC SYLLABLE FU
+134A ; [.2A8E.0020.0002] # ETHIOPIC SYLLABLE FI
+134B ; [.2A8F.0020.0002] # ETHIOPIC SYLLABLE FAA
+134C ; [.2A90.0020.0002] # ETHIOPIC SYLLABLE FEE
+134D ; [.2A91.0020.0002] # ETHIOPIC SYLLABLE FE
+134E ; [.2A92.0020.0002] # ETHIOPIC SYLLABLE FO
+134F ; [.2A93.0020.0002] # ETHIOPIC SYLLABLE FWA
+1388 ; [.2A94.0020.0002] # ETHIOPIC SYLLABLE SEBATBEIT FWA
+1E7FB ; [.2A95.0020.0002] # ETHIOPIC SYLLABLE GURAGE FWI
+1389 ; [.2A96.0020.0002] # ETHIOPIC SYLLABLE FWI
+1E7FC ; [.2A97.0020.0002] # ETHIOPIC SYLLABLE GURAGE FWEE
+138A ; [.2A98.0020.0002] # ETHIOPIC SYLLABLE FWEE
+138B ; [.2A99.0020.0002] # ETHIOPIC SYLLABLE FWE
+1350 ; [.2A9A.0020.0002] # ETHIOPIC SYLLABLE PA
+1351 ; [.2A9B.0020.0002] # ETHIOPIC SYLLABLE PU
+1352 ; [.2A9C.0020.0002] # ETHIOPIC SYLLABLE PI
+1353 ; [.2A9D.0020.0002] # ETHIOPIC SYLLABLE PAA
+1354 ; [.2A9E.0020.0002] # ETHIOPIC SYLLABLE PEE
+1355 ; [.2A9F.0020.0002] # ETHIOPIC SYLLABLE PE
+1356 ; [.2AA0.0020.0002] # ETHIOPIC SYLLABLE PO
+1357 ; [.2AA1.0020.0002] # ETHIOPIC SYLLABLE PWA
+138C ; [.2AA2.0020.0002] # ETHIOPIC SYLLABLE SEBATBEIT PWA
+1E7FD ; [.2AA3.0020.0002] # ETHIOPIC SYLLABLE GURAGE PWI
+138D ; [.2AA4.0020.0002] # ETHIOPIC SYLLABLE PWI
+1E7FE ; [.2AA5.0020.0002] # ETHIOPIC SYLLABLE GURAGE PWEE
+138E ; [.2AA6.0020.0002] # ETHIOPIC SYLLABLE PWEE
+138F ; [.2AA7.0020.0002] # ETHIOPIC SYLLABLE PWE
+2D92 ; [.2AA8.0020.0002] # ETHIOPIC SYLLABLE POA
+1358 ; [.2AA9.0020.0002] # ETHIOPIC SYLLABLE RYA
+1359 ; [.2AAA.0020.0002] # ETHIOPIC SYLLABLE MYA
+135A ; [.2AAB.0020.0002] # ETHIOPIC SYLLABLE FYA
+2DA0 ; [.2AAC.0020.0002] # ETHIOPIC SYLLABLE SSA
+2DA1 ; [.2AAD.0020.0002] # ETHIOPIC SYLLABLE SSU
+2DA2 ; [.2AAE.0020.0002] # ETHIOPIC SYLLABLE SSI
+2DA3 ; [.2AAF.0020.0002] # ETHIOPIC SYLLABLE SSAA
+2DA4 ; [.2AB0.0020.0002] # ETHIOPIC SYLLABLE SSEE
+2DA5 ; [.2AB1.0020.0002] # ETHIOPIC SYLLABLE SSE
+2DA6 ; [.2AB2.0020.0002] # ETHIOPIC SYLLABLE SSO
+2DA8 ; [.2AB3.0020.0002] # ETHIOPIC SYLLABLE CCA
+2DA9 ; [.2AB4.0020.0002] # ETHIOPIC SYLLABLE CCU
+2DAA ; [.2AB5.0020.0002] # ETHIOPIC SYLLABLE CCI
+2DAB ; [.2AB6.0020.0002] # ETHIOPIC SYLLABLE CCAA
+2DAC ; [.2AB7.0020.0002] # ETHIOPIC SYLLABLE CCEE
+2DAD ; [.2AB8.0020.0002] # ETHIOPIC SYLLABLE CCE
+2DAE ; [.2AB9.0020.0002] # ETHIOPIC SYLLABLE CCO
+2DB0 ; [.2ABA.0020.0002] # ETHIOPIC SYLLABLE ZZA
+2DB1 ; [.2ABB.0020.0002] # ETHIOPIC SYLLABLE ZZU
+2DB2 ; [.2ABC.0020.0002] # ETHIOPIC SYLLABLE ZZI
+2DB3 ; [.2ABD.0020.0002] # ETHIOPIC SYLLABLE ZZAA
+2DB4 ; [.2ABE.0020.0002] # ETHIOPIC SYLLABLE ZZEE
+2DB5 ; [.2ABF.0020.0002] # ETHIOPIC SYLLABLE ZZE
+2DB6 ; [.2AC0.0020.0002] # ETHIOPIC SYLLABLE ZZO
+2DB8 ; [.2AC1.0020.0002] # ETHIOPIC SYLLABLE CCHA
+2DB9 ; [.2AC2.0020.0002] # ETHIOPIC SYLLABLE CCHU
+2DBA ; [.2AC3.0020.0002] # ETHIOPIC SYLLABLE CCHI
+2DBB ; [.2AC4.0020.0002] # ETHIOPIC SYLLABLE CCHAA
+2DBC ; [.2AC5.0020.0002] # ETHIOPIC SYLLABLE CCHEE
+2DBD ; [.2AC6.0020.0002] # ETHIOPIC SYLLABLE CCHE
+2DBE ; [.2AC7.0020.0002] # ETHIOPIC SYLLABLE CCHO
+2DC0 ; [.2AC8.0020.0002] # ETHIOPIC SYLLABLE QYA
+2DC1 ; [.2AC9.0020.0002] # ETHIOPIC SYLLABLE QYU
+2DC2 ; [.2ACA.0020.0002] # ETHIOPIC SYLLABLE QYI
+2DC3 ; [.2ACB.0020.0002] # ETHIOPIC SYLLABLE QYAA
+2DC4 ; [.2ACC.0020.0002] # ETHIOPIC SYLLABLE QYEE
+2DC5 ; [.2ACD.0020.0002] # ETHIOPIC SYLLABLE QYE
+2DC6 ; [.2ACE.0020.0002] # ETHIOPIC SYLLABLE QYO
+2DC8 ; [.2ACF.0020.0002] # ETHIOPIC SYLLABLE KYA
+2DC9 ; [.2AD0.0020.0002] # ETHIOPIC SYLLABLE KYU
+2DCA ; [.2AD1.0020.0002] # ETHIOPIC SYLLABLE KYI
+2DCB ; [.2AD2.0020.0002] # ETHIOPIC SYLLABLE KYAA
+2DCC ; [.2AD3.0020.0002] # ETHIOPIC SYLLABLE KYEE
+2DCD ; [.2AD4.0020.0002] # ETHIOPIC SYLLABLE KYE
+2DCE ; [.2AD5.0020.0002] # ETHIOPIC SYLLABLE KYO
+1E7E0 ; [.2AD6.0020.0002] # ETHIOPIC SYLLABLE HHYA
+2DD0 ; [.2AD7.0020.0002] # ETHIOPIC SYLLABLE XYA
+1E7E1 ; [.2AD8.0020.0002] # ETHIOPIC SYLLABLE HHYU
+2DD1 ; [.2AD9.0020.0002] # ETHIOPIC SYLLABLE XYU
+1E7E2 ; [.2ADA.0020.0002] # ETHIOPIC SYLLABLE HHYI
+2DD2 ; [.2ADB.0020.0002] # ETHIOPIC SYLLABLE XYI
+1E7E3 ; [.2ADC.0020.0002] # ETHIOPIC SYLLABLE HHYAA
+2DD3 ; [.2ADD.0020.0002] # ETHIOPIC SYLLABLE XYAA
+1E7E4 ; [.2ADE.0020.0002] # ETHIOPIC SYLLABLE HHYEE
+2DD4 ; [.2ADF.0020.0002] # ETHIOPIC SYLLABLE XYEE
+1E7E5 ; [.2AE0.0020.0002] # ETHIOPIC SYLLABLE HHYE
+2DD5 ; [.2AE1.0020.0002] # ETHIOPIC SYLLABLE XYE
+1E7E6 ; [.2AE2.0020.0002] # ETHIOPIC SYLLABLE HHYO
+2DD6 ; [.2AE3.0020.0002] # ETHIOPIC SYLLABLE XYO
+2DD8 ; [.2AE4.0020.0002] # ETHIOPIC SYLLABLE GYA
+2DD9 ; [.2AE5.0020.0002] # ETHIOPIC SYLLABLE GYU
+2DDA ; [.2AE6.0020.0002] # ETHIOPIC SYLLABLE GYI
+2DDB ; [.2AE7.0020.0002] # ETHIOPIC SYLLABLE GYAA
+2DDC ; [.2AE8.0020.0002] # ETHIOPIC SYLLABLE GYEE
+2DDD ; [.2AE9.0020.0002] # ETHIOPIC SYLLABLE GYE
+2DDE ; [.2AEA.0020.0002] # ETHIOPIC SYLLABLE GYO
+0950 ; [.2AEB.0020.0002] # DEVANAGARI OM
+A8FD ; [.2AEC.0020.0002] # DEVANAGARI JAIN OM
+0972 ; [.2AED.0020.0002] # DEVANAGARI LETTER CANDRA A
+0904 ; [.2AEE.0020.0002] # DEVANAGARI LETTER SHORT A
+0905 ; [.2AEF.0020.0002] # DEVANAGARI LETTER A
+0906 ; [.2AF0.0020.0002] # DEVANAGARI LETTER AA
+0973 ; [.2AF1.0020.0002] # DEVANAGARI LETTER OE
+0974 ; [.2AF2.0020.0002] # DEVANAGARI LETTER OOE
+0975 ; [.2AF3.0020.0002] # DEVANAGARI LETTER AW
+0976 ; [.2AF4.0020.0002] # DEVANAGARI LETTER UE
+0977 ; [.2AF5.0020.0002] # DEVANAGARI LETTER UUE
+0907 ; [.2AF6.0020.0002] # DEVANAGARI LETTER I
+0908 ; [.2AF7.0020.0002] # DEVANAGARI LETTER II
+0909 ; [.2AF8.0020.0002] # DEVANAGARI LETTER U
+090A ; [.2AF9.0020.0002] # DEVANAGARI LETTER UU
+090B ; [.2AFA.0020.0002] # DEVANAGARI LETTER VOCALIC R
+0960 ; [.2AFB.0020.0002] # DEVANAGARI LETTER VOCALIC RR
+090C ; [.2AFC.0020.0002] # DEVANAGARI LETTER VOCALIC L
+0961 ; [.2AFD.0020.0002] # DEVANAGARI LETTER VOCALIC LL
+090D ; [.2AFE.0020.0002] # DEVANAGARI LETTER CANDRA E
+090E ; [.2AFF.0020.0002] # DEVANAGARI LETTER SHORT E
+090F ; [.2B00.0020.0002] # DEVANAGARI LETTER E
+0910 ; [.2B01.0020.0002] # DEVANAGARI LETTER AI
+A8FE ; [.2B02.0020.0002] # DEVANAGARI LETTER AY
+0911 ; [.2B03.0020.0002] # DEVANAGARI LETTER CANDRA O
+0912 ; [.2B04.0020.0002] # DEVANAGARI LETTER SHORT O
+0913 ; [.2B05.0020.0002] # DEVANAGARI LETTER O
+0914 ; [.2B06.0020.0002] # DEVANAGARI LETTER AU
+0915 ; [.2B07.0020.0002] # DEVANAGARI LETTER KA
+0958 ; [.2B07.0020.0002][.0000.00C2.0002] # DEVANAGARI LETTER QA
+0916 ; [.2B08.0020.0002] # DEVANAGARI LETTER KHA
+0959 ; [.2B08.0020.0002][.0000.00C2.0002] # DEVANAGARI LETTER KHHA
+0917 ; [.2B09.0020.0002] # DEVANAGARI LETTER GA
+095A ; [.2B09.0020.0002][.0000.00C2.0002] # DEVANAGARI LETTER GHHA
+097B ; [.2B0A.0020.0002] # DEVANAGARI LETTER GGA
+0918 ; [.2B0B.0020.0002] # DEVANAGARI LETTER GHA
+0919 ; [.2B0C.0020.0002] # DEVANAGARI LETTER NGA
+091A ; [.2B0D.0020.0002] # DEVANAGARI LETTER CA
+091B ; [.2B0E.0020.0002] # DEVANAGARI LETTER CHA
+091C ; [.2B0F.0020.0002] # DEVANAGARI LETTER JA
+095B ; [.2B0F.0020.0002][.0000.00C2.0002] # DEVANAGARI LETTER ZA
+0979 ; [.2B10.0020.0002] # DEVANAGARI LETTER ZHA
+097C ; [.2B11.0020.0002] # DEVANAGARI LETTER JJA
+091D ; [.2B12.0020.0002] # DEVANAGARI LETTER JHA
+091E ; [.2B13.0020.0002] # DEVANAGARI LETTER NYA
+091F ; [.2B14.0020.0002] # DEVANAGARI LETTER TTA
+0920 ; [.2B15.0020.0002] # DEVANAGARI LETTER TTHA
+0978 ; [.2B16.0020.0002] # DEVANAGARI LETTER MARWARI DDA
+0921 ; [.2B17.0020.0002] # DEVANAGARI LETTER DDA
+095C ; [.2B17.0020.0002][.0000.00C2.0002] # DEVANAGARI LETTER DDDHA
+097E ; [.2B18.0020.0002] # DEVANAGARI LETTER DDDA
+0922 ; [.2B19.0020.0002] # DEVANAGARI LETTER DDHA
+095D ; [.2B19.0020.0002][.0000.00C2.0002] # DEVANAGARI LETTER RHA
+0923 ; [.2B1A.0020.0002] # DEVANAGARI LETTER NNA
+0924 ; [.2B1B.0020.0002] # DEVANAGARI LETTER TA
+0925 ; [.2B1C.0020.0002] # DEVANAGARI LETTER THA
+0926 ; [.2B1D.0020.0002] # DEVANAGARI LETTER DA
+0927 ; [.2B1E.0020.0002] # DEVANAGARI LETTER DHA
+0928 ; [.2B1F.0020.0002] # DEVANAGARI LETTER NA
+0929 ; [.2B1F.0020.0002][.0000.00C2.0002] # DEVANAGARI LETTER NNNA
+092A ; [.2B20.0020.0002] # DEVANAGARI LETTER PA
+092B ; [.2B21.0020.0002] # DEVANAGARI LETTER PHA
+095E ; [.2B21.0020.0002][.0000.00C2.0002] # DEVANAGARI LETTER FA
+092C ; [.2B22.0020.0002] # DEVANAGARI LETTER BA
+097F ; [.2B23.0020.0002] # DEVANAGARI LETTER BBA
+092D ; [.2B24.0020.0002] # DEVANAGARI LETTER BHA
+092E ; [.2B25.0020.0002] # DEVANAGARI LETTER MA
+092F ; [.2B26.0020.0002] # DEVANAGARI LETTER YA
+095F ; [.2B26.0020.0002][.0000.00C2.0002] # DEVANAGARI LETTER YYA
+097A ; [.2B27.0020.0002] # DEVANAGARI LETTER HEAVY YA
+0930 ; [.2B28.0020.0002] # DEVANAGARI LETTER RA
+0931 ; [.2B28.0020.0002][.0000.00C2.0002] # DEVANAGARI LETTER RRA
+0932 ; [.2B29.0020.0002] # DEVANAGARI LETTER LA
+0933 ; [.2B2A.0020.0002] # DEVANAGARI LETTER LLA
+0934 ; [.2B2A.0020.0002][.0000.00C2.0002] # DEVANAGARI LETTER LLLA
+0935 ; [.2B2B.0020.0002] # DEVANAGARI LETTER VA
+0936 ; [.2B2C.0020.0002] # DEVANAGARI LETTER SHA
+0937 ; [.2B2D.0020.0002] # DEVANAGARI LETTER SSA
+0938 ; [.2B2E.0020.0002] # DEVANAGARI LETTER SA
+0939 ; [.2B2F.0020.0002] # DEVANAGARI LETTER HA
+093D ; [.2B30.0020.0002] # DEVANAGARI SIGN AVAGRAHA
+097D ; [.2B31.0020.0002] # DEVANAGARI LETTER GLOTTAL STOP
+1CE9 ; [.2B32.0020.0002] # VEDIC SIGN ANUSVARA ANTARGOMUKHA
+1CEA ; [.2B32.0020.0004] # VEDIC SIGN ANUSVARA BAHIRGOMUKHA
+1CEB ; [.2B32.0020.0004] # VEDIC SIGN ANUSVARA VAMAGOMUKHA
+1CEC ; [.2B32.0020.0004] # VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL
+1CEE ; [.2B32.0020.0004] # VEDIC SIGN HEXIFORM LONG ANUSVARA
+1CEF ; [.2B32.0020.0004] # VEDIC SIGN LONG ANUSVARA
+1CF0 ; [.2B32.0020.0004] # VEDIC SIGN RTHANG LONG ANUSVARA
+1CF1 ; [.2B32.0020.0004] # VEDIC SIGN ANUSVARA UBHAYATO MUKHA
+1CFA ; [.2B32.0020.0004] # VEDIC SIGN DOUBLE ANUSVARA ANTARGOMUKHA
+1CF5 ; [.2B33.0020.0002] # VEDIC SIGN JIHVAMULIYA
+1CF6 ; [.2B34.0020.0002] # VEDIC SIGN UPADHMANIYA
+A8F2 ; [.2B35.0020.0002] # DEVANAGARI SIGN SPACING CANDRABINDU
+A8F3 ; [.2B35.0020.0004] # DEVANAGARI SIGN CANDRABINDU VIRAMA
+A8F4 ; [.2B35.0020.0004] # DEVANAGARI SIGN DOUBLE CANDRABINDU VIRAMA
+A8F5 ; [.2B35.0020.0004] # DEVANAGARI SIGN CANDRABINDU TWO
+A8F6 ; [.2B35.0020.0004] # DEVANAGARI SIGN CANDRABINDU THREE
+A8F7 ; [.2B35.0020.0004] # DEVANAGARI SIGN CANDRABINDU AVAGRAHA
+A8FB ; [.2B36.0020.0002] # DEVANAGARI HEADSTROKE
+093E ; [.2B37.0020.0002] # DEVANAGARI VOWEL SIGN AA
+093A ; [.2B38.0020.0002] # DEVANAGARI VOWEL SIGN OE
+093B ; [.2B39.0020.0002] # DEVANAGARI VOWEL SIGN OOE
+094F ; [.2B3A.0020.0002] # DEVANAGARI VOWEL SIGN AW
+0956 ; [.2B3B.0020.0002] # DEVANAGARI VOWEL SIGN UE
+0957 ; [.2B3C.0020.0002] # DEVANAGARI VOWEL SIGN UUE
+093F ; [.2B3D.0020.0002] # DEVANAGARI VOWEL SIGN I
+0940 ; [.2B3E.0020.0002] # DEVANAGARI VOWEL SIGN II
+0941 ; [.2B3F.0020.0002] # DEVANAGARI VOWEL SIGN U
+0942 ; [.2B40.0020.0002] # DEVANAGARI VOWEL SIGN UU
+0943 ; [.2B41.0020.0002] # DEVANAGARI VOWEL SIGN VOCALIC R
+0944 ; [.2B42.0020.0002] # DEVANAGARI VOWEL SIGN VOCALIC RR
+0962 ; [.2B43.0020.0002] # DEVANAGARI VOWEL SIGN VOCALIC L
+0963 ; [.2B44.0020.0002] # DEVANAGARI VOWEL SIGN VOCALIC LL
+0945 ; [.2B45.0020.0002] # DEVANAGARI VOWEL SIGN CANDRA E
+0955 ; [.2B46.0020.0002] # DEVANAGARI VOWEL SIGN CANDRA LONG E
+0946 ; [.2B47.0020.0002] # DEVANAGARI VOWEL SIGN SHORT E
+0947 ; [.2B48.0020.0002] # DEVANAGARI VOWEL SIGN E
+094E ; [.2B49.0020.0002] # DEVANAGARI VOWEL SIGN PRISHTHAMATRA E
+0948 ; [.2B4A.0020.0002] # DEVANAGARI VOWEL SIGN AI
+A8FF ; [.2B4B.0020.0002] # DEVANAGARI VOWEL SIGN AY
+0949 ; [.2B4C.0020.0002] # DEVANAGARI VOWEL SIGN CANDRA O
+094A ; [.2B4D.0020.0002] # DEVANAGARI VOWEL SIGN SHORT O
+094B ; [.2B4E.0020.0002] # DEVANAGARI VOWEL SIGN O
+094C ; [.2B4F.0020.0002] # DEVANAGARI VOWEL SIGN AU
+094D ; [.2B50.0020.0002] # DEVANAGARI SIGN VIRAMA
+0980 ; [.2B51.0020.0002] # BENGALI ANJI
+0985 ; [.2B52.0020.0002] # BENGALI LETTER A
+0986 ; [.2B53.0020.0002] # BENGALI LETTER AA
+0987 ; [.2B54.0020.0002] # BENGALI LETTER I
+0988 ; [.2B55.0020.0002] # BENGALI LETTER II
+0989 ; [.2B56.0020.0002] # BENGALI LETTER U
+098A ; [.2B57.0020.0002] # BENGALI LETTER UU
+098B ; [.2B58.0020.0002] # BENGALI LETTER VOCALIC R
+09E0 ; [.2B59.0020.0002] # BENGALI LETTER VOCALIC RR
+098C ; [.2B5A.0020.0002] # BENGALI LETTER VOCALIC L
+09E1 ; [.2B5B.0020.0002] # BENGALI LETTER VOCALIC LL
+098F ; [.2B5C.0020.0002] # BENGALI LETTER E
+0990 ; [.2B5D.0020.0002] # BENGALI LETTER AI
+0993 ; [.2B5E.0020.0002] # BENGALI LETTER O
+0994 ; [.2B5F.0020.0002] # BENGALI LETTER AU
+0995 ; [.2B60.0020.0002] # BENGALI LETTER KA
+0996 ; [.2B61.0020.0002] # BENGALI LETTER KHA
+0997 ; [.2B62.0020.0002] # BENGALI LETTER GA
+0998 ; [.2B63.0020.0002] # BENGALI LETTER GHA
+0999 ; [.2B64.0020.0002] # BENGALI LETTER NGA
+099A ; [.2B65.0020.0002] # BENGALI LETTER CA
+099B ; [.2B66.0020.0002] # BENGALI LETTER CHA
+099C ; [.2B67.0020.0002] # BENGALI LETTER JA
+099D ; [.2B68.0020.0002] # BENGALI LETTER JHA
+099E ; [.2B69.0020.0002] # BENGALI LETTER NYA
+099F ; [.2B6A.0020.0002] # BENGALI LETTER TTA
+09A0 ; [.2B6B.0020.0002] # BENGALI LETTER TTHA
+09A1 ; [.2B6C.0020.0002] # BENGALI LETTER DDA
+09DC ; [.2B6C.0020.0002][.0000.00C2.0002] # BENGALI LETTER RRA
+09A2 ; [.2B6D.0020.0002] # BENGALI LETTER DDHA
+09DD ; [.2B6D.0020.0002][.0000.00C2.0002] # BENGALI LETTER RHA
+09A3 ; [.2B6E.0020.0002] # BENGALI LETTER NNA
+09A4 ; [.2B6F.0020.0002] # BENGALI LETTER TA
+09CE ; [.2B6F.0020.0004][.2B90.0020.0004] # BENGALI LETTER KHANDA TA
+09A5 ; [.2B70.0020.0002] # BENGALI LETTER THA
+09A6 ; [.2B71.0020.0002] # BENGALI LETTER DA
+09A7 ; [.2B72.0020.0002] # BENGALI LETTER DHA
+09A8 ; [.2B73.0020.0002] # BENGALI LETTER NA
+09AA ; [.2B74.0020.0002] # BENGALI LETTER PA
+09AB ; [.2B75.0020.0002] # BENGALI LETTER PHA
+09AC ; [.2B76.0020.0002] # BENGALI LETTER BA
+09AD ; [.2B77.0020.0002] # BENGALI LETTER BHA
+09AE ; [.2B78.0020.0002] # BENGALI LETTER MA
+09AF ; [.2B79.0020.0002] # BENGALI LETTER YA
+09DF ; [.2B79.0020.0002][.0000.00C2.0002] # BENGALI LETTER YYA
+09B0 ; [.2B7A.0020.0002] # BENGALI LETTER RA
+09F0 ; [.2B7B.0020.0002] # BENGALI LETTER RA WITH MIDDLE DIAGONAL
+09B2 ; [.2B7C.0020.0002] # BENGALI LETTER LA
+09F1 ; [.2B7D.0020.0002] # BENGALI LETTER RA WITH LOWER DIAGONAL
+09B6 ; [.2B7E.0020.0002] # BENGALI LETTER SHA
+09B7 ; [.2B7F.0020.0002] # BENGALI LETTER SSA
+09B8 ; [.2B80.0020.0002] # BENGALI LETTER SA
+09B9 ; [.2B81.0020.0002] # BENGALI LETTER HA
+09BD ; [.2B82.0020.0002] # BENGALI SIGN AVAGRAHA
+09BE ; [.2B83.0020.0002] # BENGALI VOWEL SIGN AA
+09BF ; [.2B84.0020.0002] # BENGALI VOWEL SIGN I
+09C0 ; [.2B85.0020.0002] # BENGALI VOWEL SIGN II
+09C1 ; [.2B86.0020.0002] # BENGALI VOWEL SIGN U
+09C2 ; [.2B87.0020.0002] # BENGALI VOWEL SIGN UU
+09C3 ; [.2B88.0020.0002] # BENGALI VOWEL SIGN VOCALIC R
+09C4 ; [.2B89.0020.0002] # BENGALI VOWEL SIGN VOCALIC RR
+09E2 ; [.2B8A.0020.0002] # BENGALI VOWEL SIGN VOCALIC L
+09E3 ; [.2B8B.0020.0002] # BENGALI VOWEL SIGN VOCALIC LL
+09C7 ; [.2B8C.0020.0002] # BENGALI VOWEL SIGN E
+09C8 ; [.2B8D.0020.0002] # BENGALI VOWEL SIGN AI
+09CB ; [.2B8E.0020.0002] # BENGALI VOWEL SIGN O
+09C7 09BE ; [.2B8E.0020.0002] # BENGALI VOWEL SIGN O
+09CC ; [.2B8F.0020.0002] # BENGALI VOWEL SIGN AU
+09C7 09D7 ; [.2B8F.0020.0002] # BENGALI VOWEL SIGN AU
+09CD ; [.2B90.0020.0002] # BENGALI SIGN VIRAMA
+09D7 ; [.2B91.0020.0002] # BENGALI AU LENGTH MARK
+09FC ; [.2B92.0020.0002] # BENGALI LETTER VEDIC ANUSVARA
+0A74 ; [.2B93.0020.0002] # GURMUKHI EK ONKAR
+0A73 ; [.2B94.0020.0002] # GURMUKHI URA
+0A09 ; [.2B95.0020.0002] # GURMUKHI LETTER U
+0A0A ; [.2B96.0020.0002] # GURMUKHI LETTER UU
+0A13 ; [.2B97.0020.0002] # GURMUKHI LETTER OO
+0A05 ; [.2B98.0020.0002] # GURMUKHI LETTER A
+0A06 ; [.2B99.0020.0002] # GURMUKHI LETTER AA
+0A10 ; [.2B9A.0020.0002] # GURMUKHI LETTER AI
+0A14 ; [.2B9B.0020.0002] # GURMUKHI LETTER AU
+0A72 ; [.2B9C.0020.0002] # GURMUKHI IRI
+0A07 ; [.2B9D.0020.0002] # GURMUKHI LETTER I
+0A08 ; [.2B9E.0020.0002] # GURMUKHI LETTER II
+0A0F ; [.2B9F.0020.0002] # GURMUKHI LETTER EE
+0A38 ; [.2BA0.0020.0002] # GURMUKHI LETTER SA
+0A36 ; [.2BA0.0020.0002][.0000.00C2.0002] # GURMUKHI LETTER SHA
+0A39 ; [.2BA1.0020.0002] # GURMUKHI LETTER HA
+0A51 ; [.2BA2.0020.0002] # GURMUKHI SIGN UDAAT
+0A15 ; [.2BA3.0020.0002] # GURMUKHI LETTER KA
+0A16 ; [.2BA4.0020.0002] # GURMUKHI LETTER KHA
+0A59 ; [.2BA4.0020.0002][.0000.00C2.0002] # GURMUKHI LETTER KHHA
+0A17 ; [.2BA5.0020.0002] # GURMUKHI LETTER GA
+0A5A ; [.2BA5.0020.0002][.0000.00C2.0002] # GURMUKHI LETTER GHHA
+0A18 ; [.2BA6.0020.0002] # GURMUKHI LETTER GHA
+0A19 ; [.2BA7.0020.0002] # GURMUKHI LETTER NGA
+0A1A ; [.2BA8.0020.0002] # GURMUKHI LETTER CA
+0A1B ; [.2BA9.0020.0002] # GURMUKHI LETTER CHA
+0A1C ; [.2BAA.0020.0002] # GURMUKHI LETTER JA
+0A5B ; [.2BAA.0020.0002][.0000.00C2.0002] # GURMUKHI LETTER ZA
+0A1D ; [.2BAB.0020.0002] # GURMUKHI LETTER JHA
+0A1E ; [.2BAC.0020.0002] # GURMUKHI LETTER NYA
+0A1F ; [.2BAD.0020.0002] # GURMUKHI LETTER TTA
+0A20 ; [.2BAE.0020.0002] # GURMUKHI LETTER TTHA
+0A21 ; [.2BAF.0020.0002] # GURMUKHI LETTER DDA
+0A22 ; [.2BB0.0020.0002] # GURMUKHI LETTER DDHA
+0A23 ; [.2BB1.0020.0002] # GURMUKHI LETTER NNA
+0A24 ; [.2BB2.0020.0002] # GURMUKHI LETTER TA
+0A25 ; [.2BB3.0020.0002] # GURMUKHI LETTER THA
+0A26 ; [.2BB4.0020.0002] # GURMUKHI LETTER DA
+0A27 ; [.2BB5.0020.0002] # GURMUKHI LETTER DHA
+0A28 ; [.2BB6.0020.0002] # GURMUKHI LETTER NA
+0A2A ; [.2BB7.0020.0002] # GURMUKHI LETTER PA
+0A2B ; [.2BB8.0020.0002] # GURMUKHI LETTER PHA
+0A5E ; [.2BB8.0020.0002][.0000.00C2.0002] # GURMUKHI LETTER FA
+0A2C ; [.2BB9.0020.0002] # GURMUKHI LETTER BA
+0A2D ; [.2BBA.0020.0002] # GURMUKHI LETTER BHA
+0A2E ; [.2BBB.0020.0002] # GURMUKHI LETTER MA
+0A2F ; [.2BBC.0020.0002] # GURMUKHI LETTER YA
+0A75 ; [.2BBD.0020.0002] # GURMUKHI SIGN YAKASH
+0A30 ; [.2BBE.0020.0002] # GURMUKHI LETTER RA
+0A32 ; [.2BBF.0020.0002] # GURMUKHI LETTER LA
+0A33 ; [.2BBF.0020.0002][.0000.00C2.0002] # GURMUKHI LETTER LLA
+0A35 ; [.2BC0.0020.0002] # GURMUKHI LETTER VA
+0A5C ; [.2BC1.0020.0002] # GURMUKHI LETTER RRA
+0A3E ; [.2BC2.0020.0002] # GURMUKHI VOWEL SIGN AA
+0A3F ; [.2BC3.0020.0002] # GURMUKHI VOWEL SIGN I
+0A40 ; [.2BC4.0020.0002] # GURMUKHI VOWEL SIGN II
+0A41 ; [.2BC5.0020.0002] # GURMUKHI VOWEL SIGN U
+0A42 ; [.2BC6.0020.0002] # GURMUKHI VOWEL SIGN UU
+0A47 ; [.2BC7.0020.0002] # GURMUKHI VOWEL SIGN EE
+0A48 ; [.2BC8.0020.0002] # GURMUKHI VOWEL SIGN AI
+0A4B ; [.2BC9.0020.0002] # GURMUKHI VOWEL SIGN OO
+0A4C ; [.2BCA.0020.0002] # GURMUKHI VOWEL SIGN AU
+0A4D ; [.2BCB.0020.0002] # GURMUKHI SIGN VIRAMA
+0AD0 ; [.2BCC.0020.0002] # GUJARATI OM
+0A85 ; [.2BCD.0020.0002] # GUJARATI LETTER A
+0A86 ; [.2BCE.0020.0002] # GUJARATI LETTER AA
+0A87 ; [.2BCF.0020.0002] # GUJARATI LETTER I
+0A88 ; [.2BD0.0020.0002] # GUJARATI LETTER II
+0A89 ; [.2BD1.0020.0002] # GUJARATI LETTER U
+0A8A ; [.2BD2.0020.0002] # GUJARATI LETTER UU
+0A8B ; [.2BD3.0020.0002] # GUJARATI LETTER VOCALIC R
+0AE0 ; [.2BD4.0020.0002] # GUJARATI LETTER VOCALIC RR
+0A8C ; [.2BD5.0020.0002] # GUJARATI LETTER VOCALIC L
+0AE1 ; [.2BD6.0020.0002] # GUJARATI LETTER VOCALIC LL
+0A8D ; [.2BD7.0020.0002] # GUJARATI VOWEL CANDRA E
+0A8F ; [.2BD8.0020.0002] # GUJARATI LETTER E
+0A90 ; [.2BD9.0020.0002] # GUJARATI LETTER AI
+0A91 ; [.2BDA.0020.0002] # GUJARATI VOWEL CANDRA O
+0A93 ; [.2BDB.0020.0002] # GUJARATI LETTER O
+0A94 ; [.2BDC.0020.0002] # GUJARATI LETTER AU
+0A95 ; [.2BDD.0020.0002] # GUJARATI LETTER KA
+0A96 ; [.2BDE.0020.0002] # GUJARATI LETTER KHA
+0A97 ; [.2BDF.0020.0002] # GUJARATI LETTER GA
+0A98 ; [.2BE0.0020.0002] # GUJARATI LETTER GHA
+0A99 ; [.2BE1.0020.0002] # GUJARATI LETTER NGA
+0A9A ; [.2BE2.0020.0002] # GUJARATI LETTER CA
+0A9B ; [.2BE3.0020.0002] # GUJARATI LETTER CHA
+0A9C ; [.2BE4.0020.0002] # GUJARATI LETTER JA
+0AF9 ; [.2BE5.0020.0002] # GUJARATI LETTER ZHA
+0A9D ; [.2BE6.0020.0002] # GUJARATI LETTER JHA
+0A9E ; [.2BE7.0020.0002] # GUJARATI LETTER NYA
+0A9F ; [.2BE8.0020.0002] # GUJARATI LETTER TTA
+0AA0 ; [.2BE9.0020.0002] # GUJARATI LETTER TTHA
+0AA1 ; [.2BEA.0020.0002] # GUJARATI LETTER DDA
+0AA2 ; [.2BEB.0020.0002] # GUJARATI LETTER DDHA
+0AA3 ; [.2BEC.0020.0002] # GUJARATI LETTER NNA
+0AA4 ; [.2BED.0020.0002] # GUJARATI LETTER TA
+0AA5 ; [.2BEE.0020.0002] # GUJARATI LETTER THA
+0AA6 ; [.2BEF.0020.0002] # GUJARATI LETTER DA
+0AA7 ; [.2BF0.0020.0002] # GUJARATI LETTER DHA
+0AA8 ; [.2BF1.0020.0002] # GUJARATI LETTER NA
+0AAA ; [.2BF2.0020.0002] # GUJARATI LETTER PA
+0AAB ; [.2BF3.0020.0002] # GUJARATI LETTER PHA
+0AAC ; [.2BF4.0020.0002] # GUJARATI LETTER BA
+0AAD ; [.2BF5.0020.0002] # GUJARATI LETTER BHA
+0AAE ; [.2BF6.0020.0002] # GUJARATI LETTER MA
+0AAF ; [.2BF7.0020.0002] # GUJARATI LETTER YA
+0AB0 ; [.2BF8.0020.0002] # GUJARATI LETTER RA
+0AB2 ; [.2BF9.0020.0002] # GUJARATI LETTER LA
+0AB5 ; [.2BFA.0020.0002] # GUJARATI LETTER VA
+0AB6 ; [.2BFB.0020.0002] # GUJARATI LETTER SHA
+0AB7 ; [.2BFC.0020.0002] # GUJARATI LETTER SSA
+0AB8 ; [.2BFD.0020.0002] # GUJARATI LETTER SA
+0AB9 ; [.2BFE.0020.0002] # GUJARATI LETTER HA
+0AB3 ; [.2BFF.0020.0002] # GUJARATI LETTER LLA
+0ABD ; [.2C00.0020.0002] # GUJARATI SIGN AVAGRAHA
+0ABE ; [.2C01.0020.0002] # GUJARATI VOWEL SIGN AA
+0ABF ; [.2C02.0020.0002] # GUJARATI VOWEL SIGN I
+0AC0 ; [.2C03.0020.0002] # GUJARATI VOWEL SIGN II
+0AC1 ; [.2C04.0020.0002] # GUJARATI VOWEL SIGN U
+0AC2 ; [.2C05.0020.0002] # GUJARATI VOWEL SIGN UU
+0AC3 ; [.2C06.0020.0002] # GUJARATI VOWEL SIGN VOCALIC R
+0AC4 ; [.2C07.0020.0002] # GUJARATI VOWEL SIGN VOCALIC RR
+0AE2 ; [.2C08.0020.0002] # GUJARATI VOWEL SIGN VOCALIC L
+0AE3 ; [.2C09.0020.0002] # GUJARATI VOWEL SIGN VOCALIC LL
+0AC5 ; [.2C0A.0020.0002] # GUJARATI VOWEL SIGN CANDRA E
+0AC7 ; [.2C0B.0020.0002] # GUJARATI VOWEL SIGN E
+0AC8 ; [.2C0C.0020.0002] # GUJARATI VOWEL SIGN AI
+0AC9 ; [.2C0D.0020.0002] # GUJARATI VOWEL SIGN CANDRA O
+0ACB ; [.2C0E.0020.0002] # GUJARATI VOWEL SIGN O
+0ACC ; [.2C0F.0020.0002] # GUJARATI VOWEL SIGN AU
+0ACD ; [.2C10.0020.0002] # GUJARATI SIGN VIRAMA
+0B05 ; [.2C11.0020.0002] # ORIYA LETTER A
+0B06 ; [.2C12.0020.0002] # ORIYA LETTER AA
+0B07 ; [.2C13.0020.0002] # ORIYA LETTER I
+0B08 ; [.2C14.0020.0002] # ORIYA LETTER II
+0B09 ; [.2C15.0020.0002] # ORIYA LETTER U
+0B0A ; [.2C16.0020.0002] # ORIYA LETTER UU
+0B0B ; [.2C17.0020.0002] # ORIYA LETTER VOCALIC R
+0B60 ; [.2C18.0020.0002] # ORIYA LETTER VOCALIC RR
+0B0C ; [.2C19.0020.0002] # ORIYA LETTER VOCALIC L
+0B61 ; [.2C1A.0020.0002] # ORIYA LETTER VOCALIC LL
+0B0F ; [.2C1B.0020.0002] # ORIYA LETTER E
+0B10 ; [.2C1C.0020.0002] # ORIYA LETTER AI
+0B13 ; [.2C1D.0020.0002] # ORIYA LETTER O
+0B14 ; [.2C1E.0020.0002] # ORIYA LETTER AU
+0B15 ; [.2C1F.0020.0002] # ORIYA LETTER KA
+0B16 ; [.2C20.0020.0002] # ORIYA LETTER KHA
+0B17 ; [.2C21.0020.0002] # ORIYA LETTER GA
+0B18 ; [.2C22.0020.0002] # ORIYA LETTER GHA
+0B19 ; [.2C23.0020.0002] # ORIYA LETTER NGA
+0B1A ; [.2C24.0020.0002] # ORIYA LETTER CA
+0B1B ; [.2C25.0020.0002] # ORIYA LETTER CHA
+0B1C ; [.2C26.0020.0002] # ORIYA LETTER JA
+0B1D ; [.2C27.0020.0002] # ORIYA LETTER JHA
+0B1E ; [.2C28.0020.0002] # ORIYA LETTER NYA
+0B1F ; [.2C29.0020.0002] # ORIYA LETTER TTA
+0B20 ; [.2C2A.0020.0002] # ORIYA LETTER TTHA
+0B21 ; [.2C2B.0020.0002] # ORIYA LETTER DDA
+0B5C ; [.2C2B.0020.0002][.0000.00C2.0002] # ORIYA LETTER RRA
+0B22 ; [.2C2C.0020.0002] # ORIYA LETTER DDHA
+0B5D ; [.2C2C.0020.0002][.0000.00C2.0002] # ORIYA LETTER RHA
+0B23 ; [.2C2D.0020.0002] # ORIYA LETTER NNA
+0B24 ; [.2C2E.0020.0002] # ORIYA LETTER TA
+0B25 ; [.2C2F.0020.0002] # ORIYA LETTER THA
+0B26 ; [.2C30.0020.0002] # ORIYA LETTER DA
+0B27 ; [.2C31.0020.0002] # ORIYA LETTER DHA
+0B28 ; [.2C32.0020.0002] # ORIYA LETTER NA
+0B2A ; [.2C33.0020.0002] # ORIYA LETTER PA
+0B2B ; [.2C34.0020.0002] # ORIYA LETTER PHA
+0B2C ; [.2C35.0020.0002] # ORIYA LETTER BA
+0B2D ; [.2C36.0020.0002] # ORIYA LETTER BHA
+0B2E ; [.2C37.0020.0002] # ORIYA LETTER MA
+0B2F ; [.2C38.0020.0002] # ORIYA LETTER YA
+0B5F ; [.2C39.0020.0002] # ORIYA LETTER YYA
+0B30 ; [.2C3A.0020.0002] # ORIYA LETTER RA
+0B32 ; [.2C3B.0020.0002] # ORIYA LETTER LA
+0B33 ; [.2C3C.0020.0002] # ORIYA LETTER LLA
+0B35 ; [.2C3D.0020.0002] # ORIYA LETTER VA
+0B71 ; [.2C3E.0020.0002] # ORIYA LETTER WA
+0B36 ; [.2C3F.0020.0002] # ORIYA LETTER SHA
+0B37 ; [.2C40.0020.0002] # ORIYA LETTER SSA
+0B38 ; [.2C41.0020.0002] # ORIYA LETTER SA
+0B39 ; [.2C42.0020.0002] # ORIYA LETTER HA
+0B3D ; [.2C43.0020.0002] # ORIYA SIGN AVAGRAHA
+0B3E ; [.2C44.0020.0002] # ORIYA VOWEL SIGN AA
+0B3F ; [.2C45.0020.0002] # ORIYA VOWEL SIGN I
+0B40 ; [.2C46.0020.0002] # ORIYA VOWEL SIGN II
+0B41 ; [.2C47.0020.0002] # ORIYA VOWEL SIGN U
+0B42 ; [.2C48.0020.0002] # ORIYA VOWEL SIGN UU
+0B43 ; [.2C49.0020.0002] # ORIYA VOWEL SIGN VOCALIC R
+0B44 ; [.2C4A.0020.0002] # ORIYA VOWEL SIGN VOCALIC RR
+0B62 ; [.2C4B.0020.0002] # ORIYA VOWEL SIGN VOCALIC L
+0B63 ; [.2C4C.0020.0002] # ORIYA VOWEL SIGN VOCALIC LL
+0B47 ; [.2C4D.0020.0002] # ORIYA VOWEL SIGN E
+0B48 ; [.2C4E.0020.0002] # ORIYA VOWEL SIGN AI
+0B47 0B56 ; [.2C4E.0020.0002] # ORIYA VOWEL SIGN AI
+0B4B ; [.2C4F.0020.0002] # ORIYA VOWEL SIGN O
+0B47 0B3E ; [.2C4F.0020.0002] # ORIYA VOWEL SIGN O
+0B4C ; [.2C50.0020.0002] # ORIYA VOWEL SIGN AU
+0B47 0B57 ; [.2C50.0020.0002] # ORIYA VOWEL SIGN AU
+0B4D ; [.2C51.0020.0002] # ORIYA SIGN VIRAMA
+0B56 ; [.2C52.0020.0002] # ORIYA AI LENGTH MARK
+0B57 ; [.2C53.0020.0002] # ORIYA AU LENGTH MARK
+0BD0 ; [.2C54.0020.0002] # TAMIL OM
+0B85 ; [.2C55.0020.0002] # TAMIL LETTER A
+0B86 ; [.2C56.0020.0002] # TAMIL LETTER AA
+0B87 ; [.2C57.0020.0002] # TAMIL LETTER I
+0B88 ; [.2C58.0020.0002] # TAMIL LETTER II
+0B89 ; [.2C59.0020.0002] # TAMIL LETTER U
+0B8A ; [.2C5A.0020.0002] # TAMIL LETTER UU
+0B8E ; [.2C5B.0020.0002] # TAMIL LETTER E
+0B8F ; [.2C5C.0020.0002] # TAMIL LETTER EE
+0B90 ; [.2C5D.0020.0002] # TAMIL LETTER AI
+0B92 ; [.2C5E.0020.0002] # TAMIL LETTER O
+0B93 ; [.2C5F.0020.0002] # TAMIL LETTER OO
+0B94 ; [.2C60.0020.0002] # TAMIL LETTER AU
+0B92 0BD7 ; [.2C60.0020.0002] # TAMIL LETTER AU
+0B83 ; [.2C61.0020.0002] # TAMIL SIGN VISARGA
+0B95 ; [.2C62.0020.0002] # TAMIL LETTER KA
+0B99 ; [.2C63.0020.0002] # TAMIL LETTER NGA
+0B9A ; [.2C64.0020.0002] # TAMIL LETTER CA
+0B9E ; [.2C65.0020.0002] # TAMIL LETTER NYA
+0B9F ; [.2C66.0020.0002] # TAMIL LETTER TTA
+0BA3 ; [.2C67.0020.0002] # TAMIL LETTER NNA
+0BA4 ; [.2C68.0020.0002] # TAMIL LETTER TA
+0BA8 ; [.2C69.0020.0002] # TAMIL LETTER NA
+0BAA ; [.2C6A.0020.0002] # TAMIL LETTER PA
+0BAE ; [.2C6B.0020.0002] # TAMIL LETTER MA
+0BAF ; [.2C6C.0020.0002] # TAMIL LETTER YA
+0BB0 ; [.2C6D.0020.0002] # TAMIL LETTER RA
+0BB2 ; [.2C6E.0020.0002] # TAMIL LETTER LA
+0BB5 ; [.2C6F.0020.0002] # TAMIL LETTER VA
+0BB4 ; [.2C70.0020.0002] # TAMIL LETTER LLLA
+0BB3 ; [.2C71.0020.0002] # TAMIL LETTER LLA
+0BB1 ; [.2C72.0020.0002] # TAMIL LETTER RRA
+0BA9 ; [.2C73.0020.0002] # TAMIL LETTER NNNA
+0B9C ; [.2C74.0020.0002] # TAMIL LETTER JA
+0BB6 ; [.2C75.0020.0002] # TAMIL LETTER SHA
+0BB7 ; [.2C76.0020.0002] # TAMIL LETTER SSA
+0BB8 ; [.2C77.0020.0002] # TAMIL LETTER SA
+0BB9 ; [.2C78.0020.0002] # TAMIL LETTER HA
+0BBE ; [.2C79.0020.0002] # TAMIL VOWEL SIGN AA
+0BBF ; [.2C7A.0020.0002] # TAMIL VOWEL SIGN I
+0BC0 ; [.2C7B.0020.0002] # TAMIL VOWEL SIGN II
+0BC1 ; [.2C7C.0020.0002] # TAMIL VOWEL SIGN U
+0BC2 ; [.2C7D.0020.0002] # TAMIL VOWEL SIGN UU
+0BC6 ; [.2C7E.0020.0002] # TAMIL VOWEL SIGN E
+0BC7 ; [.2C7F.0020.0002] # TAMIL VOWEL SIGN EE
+0BC8 ; [.2C80.0020.0002] # TAMIL VOWEL SIGN AI
+0BCA ; [.2C81.0020.0002] # TAMIL VOWEL SIGN O
+0BC6 0BBE ; [.2C81.0020.0002] # TAMIL VOWEL SIGN O
+0BCB ; [.2C82.0020.0002] # TAMIL VOWEL SIGN OO
+0BC7 0BBE ; [.2C82.0020.0002] # TAMIL VOWEL SIGN OO
+0BCC ; [.2C83.0020.0002] # TAMIL VOWEL SIGN AU
+0BC6 0BD7 ; [.2C83.0020.0002] # TAMIL VOWEL SIGN AU
+0BCD ; [.2C84.0020.0002] # TAMIL SIGN VIRAMA
+0BD7 ; [.2C85.0020.0002] # TAMIL AU LENGTH MARK
+0C05 ; [.2C86.0020.0002] # TELUGU LETTER A
+0C06 ; [.2C87.0020.0002] # TELUGU LETTER AA
+0C07 ; [.2C88.0020.0002] # TELUGU LETTER I
+0C08 ; [.2C89.0020.0002] # TELUGU LETTER II
+0C09 ; [.2C8A.0020.0002] # TELUGU LETTER U
+0C0A ; [.2C8B.0020.0002] # TELUGU LETTER UU
+0C0B ; [.2C8C.0020.0002] # TELUGU LETTER VOCALIC R
+0C60 ; [.2C8D.0020.0002] # TELUGU LETTER VOCALIC RR
+0C0C ; [.2C8E.0020.0002] # TELUGU LETTER VOCALIC L
+0C61 ; [.2C8F.0020.0002] # TELUGU LETTER VOCALIC LL
+0C0E ; [.2C90.0020.0002] # TELUGU LETTER E
+0C0F ; [.2C91.0020.0002] # TELUGU LETTER EE
+0C10 ; [.2C92.0020.0002] # TELUGU LETTER AI
+0C12 ; [.2C93.0020.0002] # TELUGU LETTER O
+0C13 ; [.2C94.0020.0002] # TELUGU LETTER OO
+0C14 ; [.2C95.0020.0002] # TELUGU LETTER AU
+0C15 ; [.2C96.0020.0002] # TELUGU LETTER KA
+0C16 ; [.2C97.0020.0002] # TELUGU LETTER KHA
+0C17 ; [.2C98.0020.0002] # TELUGU LETTER GA
+0C18 ; [.2C99.0020.0002] # TELUGU LETTER GHA
+0C19 ; [.2C9A.0020.0002] # TELUGU LETTER NGA
+0C1A ; [.2C9B.0020.0002] # TELUGU LETTER CA
+0C58 ; [.2C9C.0020.0002] # TELUGU LETTER TSA
+0C1B ; [.2C9D.0020.0002] # TELUGU LETTER CHA
+0C1C ; [.2C9E.0020.0002] # TELUGU LETTER JA
+0C59 ; [.2C9F.0020.0002] # TELUGU LETTER DZA
+0C1D ; [.2CA0.0020.0002] # TELUGU LETTER JHA
+0C1E ; [.2CA1.0020.0002] # TELUGU LETTER NYA
+0C1F ; [.2CA2.0020.0002] # TELUGU LETTER TTA
+0C20 ; [.2CA3.0020.0002] # TELUGU LETTER TTHA
+0C21 ; [.2CA4.0020.0002] # TELUGU LETTER DDA
+0C22 ; [.2CA5.0020.0002] # TELUGU LETTER DDHA
+0C23 ; [.2CA6.0020.0002] # TELUGU LETTER NNA
+0C24 ; [.2CA7.0020.0002] # TELUGU LETTER TA
+0C25 ; [.2CA8.0020.0002] # TELUGU LETTER THA
+0C26 ; [.2CA9.0020.0002] # TELUGU LETTER DA
+0C27 ; [.2CAA.0020.0002] # TELUGU LETTER DHA
+0C28 ; [.2CAB.0020.0002] # TELUGU LETTER NA
+0C5D ; [.2CAB.0020.0004][.2CCD.0020.0004] # TELUGU LETTER NAKAARA POLLU
+0C2A ; [.2CAC.0020.0002] # TELUGU LETTER PA
+0C2B ; [.2CAD.0020.0002] # TELUGU LETTER PHA
+0C2C ; [.2CAE.0020.0002] # TELUGU LETTER BA
+0C2D ; [.2CAF.0020.0002] # TELUGU LETTER BHA
+0C2E ; [.2CB0.0020.0002] # TELUGU LETTER MA
+0C2F ; [.2CB1.0020.0002] # TELUGU LETTER YA
+0C30 ; [.2CB2.0020.0002] # TELUGU LETTER RA
+0C31 ; [.2CB3.0020.0002] # TELUGU LETTER RRA
+0C32 ; [.2CB4.0020.0002] # TELUGU LETTER LA
+0C35 ; [.2CB5.0020.0002] # TELUGU LETTER VA
+0C36 ; [.2CB6.0020.0002] # TELUGU LETTER SHA
+0C37 ; [.2CB7.0020.0002] # TELUGU LETTER SSA
+0C38 ; [.2CB8.0020.0002] # TELUGU LETTER SA
+0C39 ; [.2CB9.0020.0002] # TELUGU LETTER HA
+0C33 ; [.2CBA.0020.0002] # TELUGU LETTER LLA
+0C34 ; [.2CBB.0020.0002] # TELUGU LETTER LLLA
+0C5A ; [.2CBC.0020.0002] # TELUGU LETTER RRRA
+0C3D ; [.2CBD.0020.0002] # TELUGU SIGN AVAGRAHA
+0C3E ; [.2CBE.0020.0002] # TELUGU VOWEL SIGN AA
+0C3F ; [.2CBF.0020.0002] # TELUGU VOWEL SIGN I
+0C40 ; [.2CC0.0020.0002] # TELUGU VOWEL SIGN II
+0C41 ; [.2CC1.0020.0002] # TELUGU VOWEL SIGN U
+0C42 ; [.2CC2.0020.0002] # TELUGU VOWEL SIGN UU
+0C43 ; [.2CC3.0020.0002] # TELUGU VOWEL SIGN VOCALIC R
+0C44 ; [.2CC4.0020.0002] # TELUGU VOWEL SIGN VOCALIC RR
+0C62 ; [.2CC5.0020.0002] # TELUGU VOWEL SIGN VOCALIC L
+0C63 ; [.2CC6.0020.0002] # TELUGU VOWEL SIGN VOCALIC LL
+0C46 ; [.2CC7.0020.0002] # TELUGU VOWEL SIGN E
+0C47 ; [.2CC8.0020.0002] # TELUGU VOWEL SIGN EE
+0C48 ; [.2CC9.0020.0002] # TELUGU VOWEL SIGN AI
+0C46 0C56 ; [.2CC9.0020.0002] # TELUGU VOWEL SIGN AI
+0C4A ; [.2CCA.0020.0002] # TELUGU VOWEL SIGN O
+0C4B ; [.2CCB.0020.0002] # TELUGU VOWEL SIGN OO
+0C4C ; [.2CCC.0020.0002] # TELUGU VOWEL SIGN AU
+0C4D ; [.2CCD.0020.0002] # TELUGU SIGN VIRAMA
+0C55 ; [.2CCE.0020.0002] # TELUGU LENGTH MARK
+0C56 ; [.2CCF.0020.0002] # TELUGU AI LENGTH MARK
+0C85 ; [.2CD0.0020.0002] # KANNADA LETTER A
+0C86 ; [.2CD1.0020.0002] # KANNADA LETTER AA
+0C87 ; [.2CD2.0020.0002] # KANNADA LETTER I
+0C88 ; [.2CD3.0020.0002] # KANNADA LETTER II
+0C89 ; [.2CD4.0020.0002] # KANNADA LETTER U
+0C8A ; [.2CD5.0020.0002] # KANNADA LETTER UU
+0C8B ; [.2CD6.0020.0002] # KANNADA LETTER VOCALIC R
+0CE0 ; [.2CD7.0020.0002] # KANNADA LETTER VOCALIC RR
+0C8C ; [.2CD8.0020.0002] # KANNADA LETTER VOCALIC L
+0CE1 ; [.2CD9.0020.0002] # KANNADA LETTER VOCALIC LL
+0C8E ; [.2CDA.0020.0002] # KANNADA LETTER E
+0C8F ; [.2CDB.0020.0002] # KANNADA LETTER EE
+0C90 ; [.2CDC.0020.0002] # KANNADA LETTER AI
+0C92 ; [.2CDD.0020.0002] # KANNADA LETTER O
+0C93 ; [.2CDE.0020.0002] # KANNADA LETTER OO
+0C94 ; [.2CDF.0020.0002] # KANNADA LETTER AU
+0C95 ; [.2CE0.0020.0002] # KANNADA LETTER KA
+0C96 ; [.2CE1.0020.0002] # KANNADA LETTER KHA
+0C97 ; [.2CE2.0020.0002] # KANNADA LETTER GA
+0C98 ; [.2CE3.0020.0002] # KANNADA LETTER GHA
+0C99 ; [.2CE4.0020.0002] # KANNADA LETTER NGA
+0C9A ; [.2CE5.0020.0002] # KANNADA LETTER CA
+0C9B ; [.2CE6.0020.0002] # KANNADA LETTER CHA
+0C9C ; [.2CE7.0020.0002] # KANNADA LETTER JA
+0C9D ; [.2CE8.0020.0002] # KANNADA LETTER JHA
+0C9E ; [.2CE9.0020.0002] # KANNADA LETTER NYA
+0C9F ; [.2CEA.0020.0002] # KANNADA LETTER TTA
+0CA0 ; [.2CEB.0020.0002] # KANNADA LETTER TTHA
+0CA1 ; [.2CEC.0020.0002] # KANNADA LETTER DDA
+0CA2 ; [.2CED.0020.0002] # KANNADA LETTER DDHA
+0CA3 ; [.2CEE.0020.0002] # KANNADA LETTER NNA
+0CA4 ; [.2CEF.0020.0002] # KANNADA LETTER TA
+0CA5 ; [.2CF0.0020.0002] # KANNADA LETTER THA
+0CA6 ; [.2CF1.0020.0002] # KANNADA LETTER DA
+0CA7 ; [.2CF2.0020.0002] # KANNADA LETTER DHA
+0CA8 ; [.2CF3.0020.0002] # KANNADA LETTER NA
+0CDD ; [.2CF3.0020.0004][.2D17.0020.0004] # KANNADA LETTER NAKAARA POLLU
+0CAA ; [.2CF4.0020.0002] # KANNADA LETTER PA
+0CAB ; [.2CF5.0020.0002] # KANNADA LETTER PHA
+0CAC ; [.2CF6.0020.0002] # KANNADA LETTER BA
+0CAD ; [.2CF7.0020.0002] # KANNADA LETTER BHA
+0CAE ; [.2CF8.0020.0002] # KANNADA LETTER MA
+0CAF ; [.2CF9.0020.0002] # KANNADA LETTER YA
+0CB0 ; [.2CFA.0020.0002] # KANNADA LETTER RA
+0CB1 ; [.2CFB.0020.0002] # KANNADA LETTER RRA
+0CB2 ; [.2CFC.0020.0002] # KANNADA LETTER LA
+0CB5 ; [.2CFD.0020.0002] # KANNADA LETTER VA
+0CB6 ; [.2CFE.0020.0002] # KANNADA LETTER SHA
+0CB7 ; [.2CFF.0020.0002] # KANNADA LETTER SSA
+0CB8 ; [.2D00.0020.0002] # KANNADA LETTER SA
+0CB9 ; [.2D01.0020.0002] # KANNADA LETTER HA
+0CB3 ; [.2D02.0020.0002] # KANNADA LETTER LLA
+0CDE ; [.2D03.0020.0002] # KANNADA LETTER FA
+0CBD ; [.2D04.0020.0002] # KANNADA SIGN AVAGRAHA
+0CF1 ; [.2D05.0020.0002] # KANNADA SIGN JIHVAMULIYA
+0CF2 ; [.2D06.0020.0002] # KANNADA SIGN UPADHMANIYA
+0C80 ; [.2D07.0020.0002] # KANNADA SIGN SPACING CANDRABINDU
+0CBE ; [.2D08.0020.0002] # KANNADA VOWEL SIGN AA
+0CBF ; [.2D09.0020.0002] # KANNADA VOWEL SIGN I
+0CC0 ; [.2D0A.0020.0002] # KANNADA VOWEL SIGN II
+0CBF 0CD5 ; [.2D0A.0020.0002] # KANNADA VOWEL SIGN II
+0CC1 ; [.2D0B.0020.0002] # KANNADA VOWEL SIGN U
+0CC2 ; [.2D0C.0020.0002] # KANNADA VOWEL SIGN UU
+0CC3 ; [.2D0D.0020.0002] # KANNADA VOWEL SIGN VOCALIC R
+0CC4 ; [.2D0E.0020.0002] # KANNADA VOWEL SIGN VOCALIC RR
+0CE2 ; [.2D0F.0020.0002] # KANNADA VOWEL SIGN VOCALIC L
+0CE3 ; [.2D10.0020.0002] # KANNADA VOWEL SIGN VOCALIC LL
+0CC6 ; [.2D11.0020.0002] # KANNADA VOWEL SIGN E
+0CC7 ; [.2D12.0020.0002] # KANNADA VOWEL SIGN EE
+0CC6 0CD5 ; [.2D12.0020.0002] # KANNADA VOWEL SIGN EE
+0CC8 ; [.2D13.0020.0002] # KANNADA VOWEL SIGN AI
+0CC6 0CD6 ; [.2D13.0020.0002] # KANNADA VOWEL SIGN AI
+0CCA ; [.2D14.0020.0002] # KANNADA VOWEL SIGN O
+0CC6 0CC2 ; [.2D14.0020.0002] # KANNADA VOWEL SIGN O
+0CCB ; [.2D15.0020.0002] # KANNADA VOWEL SIGN OO
+0CC6 0CC2 0CD5 ; [.2D15.0020.0002] # KANNADA VOWEL SIGN OO
+0CCA 0CD5 ; [.2D15.0020.0002] # KANNADA VOWEL SIGN OO
+0CCC ; [.2D16.0020.0002] # KANNADA VOWEL SIGN AU
+0CCD ; [.2D17.0020.0002] # KANNADA SIGN VIRAMA
+0CD5 ; [.2D18.0020.0002] # KANNADA LENGTH MARK
+0CD6 ; [.2D19.0020.0002] # KANNADA AI LENGTH MARK
+0D05 ; [.2D1A.0020.0002] # MALAYALAM LETTER A
+0D06 ; [.2D1B.0020.0002] # MALAYALAM LETTER AA
+0D07 ; [.2D1C.0020.0002] # MALAYALAM LETTER I
+0D08 ; [.2D1D.0020.0002] # MALAYALAM LETTER II
+0D5F ; [.2D1E.0020.0002] # MALAYALAM LETTER ARCHAIC II
+0D09 ; [.2D1F.0020.0002] # MALAYALAM LETTER U
+0D0A ; [.2D20.0020.0002] # MALAYALAM LETTER UU
+0D0B ; [.2D21.0020.0002] # MALAYALAM LETTER VOCALIC R
+0D60 ; [.2D22.0020.0002] # MALAYALAM LETTER VOCALIC RR
+0D0C ; [.2D23.0020.0002] # MALAYALAM LETTER VOCALIC L
+0D61 ; [.2D24.0020.0002] # MALAYALAM LETTER VOCALIC LL
+0D0E ; [.2D25.0020.0002] # MALAYALAM LETTER E
+0D0F ; [.2D26.0020.0002] # MALAYALAM LETTER EE
+0D10 ; [.2D27.0020.0002] # MALAYALAM LETTER AI
+0D12 ; [.2D28.0020.0002] # MALAYALAM LETTER O
+0D13 ; [.2D29.0020.0002] # MALAYALAM LETTER OO
+0D14 ; [.2D2A.0020.0002] # MALAYALAM LETTER AU
+0D15 ; [.2D2B.0020.0002] # MALAYALAM LETTER KA
+0D7F ; [.2D2B.0020.0004][.2D63.0020.0004] # MALAYALAM LETTER CHILLU K
+0D16 ; [.2D2C.0020.0002] # MALAYALAM LETTER KHA
+0D17 ; [.2D2D.0020.0002] # MALAYALAM LETTER GA
+0D18 ; [.2D2E.0020.0002] # MALAYALAM LETTER GHA
+0D19 ; [.2D2F.0020.0002] # MALAYALAM LETTER NGA
+0D1A ; [.2D30.0020.0002] # MALAYALAM LETTER CA
+0D1B ; [.2D31.0020.0002] # MALAYALAM LETTER CHA
+0D1C ; [.2D32.0020.0002] # MALAYALAM LETTER JA
+0D1D ; [.2D33.0020.0002] # MALAYALAM LETTER JHA
+0D1E ; [.2D34.0020.0002] # MALAYALAM LETTER NYA
+0D1F ; [.2D35.0020.0002] # MALAYALAM LETTER TTA
+0D20 ; [.2D36.0020.0002] # MALAYALAM LETTER TTHA
+0D21 ; [.2D37.0020.0002] # MALAYALAM LETTER DDA
+0D22 ; [.2D38.0020.0002] # MALAYALAM LETTER DDHA
+0D23 ; [.2D39.0020.0002] # MALAYALAM LETTER NNA
+0D7A ; [.2D39.0020.0004][.2D63.0020.0004] # MALAYALAM LETTER CHILLU NN
+0D24 ; [.2D3A.0020.0002] # MALAYALAM LETTER TA
+0D25 ; [.2D3B.0020.0002] # MALAYALAM LETTER THA
+0D26 ; [.2D3C.0020.0002] # MALAYALAM LETTER DA
+0D27 ; [.2D3D.0020.0002] # MALAYALAM LETTER DHA
+0D28 ; [.2D3E.0020.0002] # MALAYALAM LETTER NA
+0D7B ; [.2D3E.0020.0004][.2D63.0020.0004] # MALAYALAM LETTER CHILLU N
+0D29 ; [.2D3F.0020.0002] # MALAYALAM LETTER NNNA
+0D2A ; [.2D40.0020.0002] # MALAYALAM LETTER PA
+0D2B ; [.2D41.0020.0002] # MALAYALAM LETTER PHA
+0D2C ; [.2D42.0020.0002] # MALAYALAM LETTER BA
+0D2D ; [.2D43.0020.0002] # MALAYALAM LETTER BHA
+0D2E ; [.2D44.0020.0002] # MALAYALAM LETTER MA
+0D54 ; [.2D44.0020.0004][.2D63.0020.0004] # MALAYALAM LETTER CHILLU M
+0D2F ; [.2D45.0020.0002] # MALAYALAM LETTER YA
+0D55 ; [.2D45.0020.0004][.2D63.0020.0004] # MALAYALAM LETTER CHILLU Y
+0D30 ; [.2D46.0020.0002] # MALAYALAM LETTER RA
+0D4E ; [.2D46.0020.0004][.2D63.0020.0004] # MALAYALAM LETTER DOT REPH
+0D7C ; [.2D46.0020.0004][.2D63.0020.0004] # MALAYALAM LETTER CHILLU RR
+0D32 ; [.2D47.0020.0002] # MALAYALAM LETTER LA
+0D7D ; [.2D47.0020.0004][.2D63.0020.0004] # MALAYALAM LETTER CHILLU L
+0D35 ; [.2D48.0020.0002] # MALAYALAM LETTER VA
+0D36 ; [.2D49.0020.0002] # MALAYALAM LETTER SHA
+0D37 ; [.2D4A.0020.0002] # MALAYALAM LETTER SSA
+0D38 ; [.2D4B.0020.0002] # MALAYALAM LETTER SA
+0D39 ; [.2D4C.0020.0002] # MALAYALAM LETTER HA
+0D33 ; [.2D4D.0020.0002] # MALAYALAM LETTER LLA
+0D7E ; [.2D4D.0020.0004][.2D63.0020.0004] # MALAYALAM LETTER CHILLU LL
+0D34 ; [.2D4E.0020.0002] # MALAYALAM LETTER LLLA
+0D56 ; [.2D4E.0020.0004][.2D63.0020.0004] # MALAYALAM LETTER CHILLU LLL
+0D31 ; [.2D4F.0020.0002] # MALAYALAM LETTER RRA
+0D3A ; [.2D50.0020.0002] # MALAYALAM LETTER TTTA
+0D3D ; [.2D51.0020.0002] # MALAYALAM SIGN AVAGRAHA
+0D04 ; [.2D52.0020.0002] # MALAYALAM LETTER VEDIC ANUSVARA
+0D3E ; [.2D53.0020.0002] # MALAYALAM VOWEL SIGN AA
+0D3F ; [.2D54.0020.0002] # MALAYALAM VOWEL SIGN I
+0D40 ; [.2D55.0020.0002] # MALAYALAM VOWEL SIGN II
+0D41 ; [.2D56.0020.0002] # MALAYALAM VOWEL SIGN U
+0D42 ; [.2D57.0020.0002] # MALAYALAM VOWEL SIGN UU
+0D43 ; [.2D58.0020.0002] # MALAYALAM VOWEL SIGN VOCALIC R
+0D44 ; [.2D59.0020.0002] # MALAYALAM VOWEL SIGN VOCALIC RR
+0D62 ; [.2D5A.0020.0002] # MALAYALAM VOWEL SIGN VOCALIC L
+0D63 ; [.2D5B.0020.0002] # MALAYALAM VOWEL SIGN VOCALIC LL
+0D46 ; [.2D5C.0020.0002] # MALAYALAM VOWEL SIGN E
+0D47 ; [.2D5D.0020.0002] # MALAYALAM VOWEL SIGN EE
+0D48 ; [.2D5E.0020.0002] # MALAYALAM VOWEL SIGN AI
+0D4A ; [.2D5F.0020.0002] # MALAYALAM VOWEL SIGN O
+0D46 0D3E ; [.2D5F.0020.0002] # MALAYALAM VOWEL SIGN O
+0D4B ; [.2D60.0020.0002] # MALAYALAM VOWEL SIGN OO
+0D47 0D3E ; [.2D60.0020.0002] # MALAYALAM VOWEL SIGN OO
+0D4C ; [.2D61.0020.0002] # MALAYALAM VOWEL SIGN AU
+0D46 0D57 ; [.2D61.0020.0002] # MALAYALAM VOWEL SIGN AU
+0D57 ; [.2D62.0020.0002] # MALAYALAM AU LENGTH MARK
+0D4D ; [.2D63.0020.0002] # MALAYALAM SIGN VIRAMA
+0D3B ; [.2D63.0020.0004] # MALAYALAM SIGN VERTICAL BAR VIRAMA
+0D3C ; [.2D63.0020.0004] # MALAYALAM SIGN CIRCULAR VIRAMA
+0D85 ; [.2D64.0020.0002] # SINHALA LETTER AYANNA
+0D86 ; [.2D65.0020.0002] # SINHALA LETTER AAYANNA
+0D87 ; [.2D66.0020.0002] # SINHALA LETTER AEYANNA
+0D88 ; [.2D67.0020.0002] # SINHALA LETTER AEEYANNA
+0D89 ; [.2D68.0020.0002] # SINHALA LETTER IYANNA
+0D8A ; [.2D69.0020.0002] # SINHALA LETTER IIYANNA
+0D8B ; [.2D6A.0020.0002] # SINHALA LETTER UYANNA
+0D8C ; [.2D6B.0020.0002] # SINHALA LETTER UUYANNA
+0D8D ; [.2D6C.0020.0002] # SINHALA LETTER IRUYANNA
+0D8E ; [.2D6D.0020.0002] # SINHALA LETTER IRUUYANNA
+0D8F ; [.2D6E.0020.0002] # SINHALA LETTER ILUYANNA
+0D90 ; [.2D6F.0020.0002] # SINHALA LETTER ILUUYANNA
+0D91 ; [.2D70.0020.0002] # SINHALA LETTER EYANNA
+0D92 ; [.2D71.0020.0002] # SINHALA LETTER EEYANNA
+0D93 ; [.2D72.0020.0002] # SINHALA LETTER AIYANNA
+0D94 ; [.2D73.0020.0002] # SINHALA LETTER OYANNA
+0D95 ; [.2D74.0020.0002] # SINHALA LETTER OOYANNA
+0D96 ; [.2D75.0020.0002] # SINHALA LETTER AUYANNA
+0D9A ; [.2D76.0020.0002] # SINHALA LETTER ALPAPRAANA KAYANNA
+0D9B ; [.2D77.0020.0002] # SINHALA LETTER MAHAAPRAANA KAYANNA
+0D9C ; [.2D78.0020.0002] # SINHALA LETTER ALPAPRAANA GAYANNA
+0D9D ; [.2D79.0020.0002] # SINHALA LETTER MAHAAPRAANA GAYANNA
+0D9E ; [.2D7A.0020.0002] # SINHALA LETTER KANTAJA NAASIKYAYA
+0D9F ; [.2D7B.0020.0002] # SINHALA LETTER SANYAKA GAYANNA
+0DA0 ; [.2D7C.0020.0002] # SINHALA LETTER ALPAPRAANA CAYANNA
+0DA1 ; [.2D7D.0020.0002] # SINHALA LETTER MAHAAPRAANA CAYANNA
+0DA2 ; [.2D7E.0020.0002] # SINHALA LETTER ALPAPRAANA JAYANNA
+0DA3 ; [.2D7F.0020.0002] # SINHALA LETTER MAHAAPRAANA JAYANNA
+0DA4 ; [.2D80.0020.0002] # SINHALA LETTER TAALUJA NAASIKYAYA
+0DA5 ; [.2D81.0020.0002] # SINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYA
+0DA6 ; [.2D82.0020.0002] # SINHALA LETTER SANYAKA JAYANNA
+0DA7 ; [.2D83.0020.0002] # SINHALA LETTER ALPAPRAANA TTAYANNA
+0DA8 ; [.2D84.0020.0002] # SINHALA LETTER MAHAAPRAANA TTAYANNA
+0DA9 ; [.2D85.0020.0002] # SINHALA LETTER ALPAPRAANA DDAYANNA
+0DAA ; [.2D86.0020.0002] # SINHALA LETTER MAHAAPRAANA DDAYANNA
+0DAB ; [.2D87.0020.0002] # SINHALA LETTER MUURDHAJA NAYANNA
+0DAC ; [.2D88.0020.0002] # SINHALA LETTER SANYAKA DDAYANNA
+0DAD ; [.2D89.0020.0002] # SINHALA LETTER ALPAPRAANA TAYANNA
+0DAE ; [.2D8A.0020.0002] # SINHALA LETTER MAHAAPRAANA TAYANNA
+0DAF ; [.2D8B.0020.0002] # SINHALA LETTER ALPAPRAANA DAYANNA
+0DB0 ; [.2D8C.0020.0002] # SINHALA LETTER MAHAAPRAANA DAYANNA
+0DB1 ; [.2D8D.0020.0002] # SINHALA LETTER DANTAJA NAYANNA
+0DB3 ; [.2D8E.0020.0002] # SINHALA LETTER SANYAKA DAYANNA
+0DB4 ; [.2D8F.0020.0002] # SINHALA LETTER ALPAPRAANA PAYANNA
+0DB5 ; [.2D90.0020.0002] # SINHALA LETTER MAHAAPRAANA PAYANNA
+0DB6 ; [.2D91.0020.0002] # SINHALA LETTER ALPAPRAANA BAYANNA
+0DB7 ; [.2D92.0020.0002] # SINHALA LETTER MAHAAPRAANA BAYANNA
+0DB8 ; [.2D93.0020.0002] # SINHALA LETTER MAYANNA
+0DB9 ; [.2D94.0020.0002] # SINHALA LETTER AMBA BAYANNA
+0DBA ; [.2D95.0020.0002] # SINHALA LETTER YAYANNA
+0DBB ; [.2D96.0020.0002] # SINHALA LETTER RAYANNA
+0DBD ; [.2D97.0020.0002] # SINHALA LETTER DANTAJA LAYANNA
+0DC0 ; [.2D98.0020.0002] # SINHALA LETTER VAYANNA
+0DC1 ; [.2D99.0020.0002] # SINHALA LETTER TAALUJA SAYANNA
+0DC2 ; [.2D9A.0020.0002] # SINHALA LETTER MUURDHAJA SAYANNA
+0DC3 ; [.2D9B.0020.0002] # SINHALA LETTER DANTAJA SAYANNA
+0DC4 ; [.2D9C.0020.0002] # SINHALA LETTER HAYANNA
+0DC5 ; [.2D9D.0020.0002] # SINHALA LETTER MUURDHAJA LAYANNA
+0DC6 ; [.2D9E.0020.0002] # SINHALA LETTER FAYANNA
+0DCF ; [.2D9F.0020.0002] # SINHALA VOWEL SIGN AELA-PILLA
+0DD0 ; [.2DA0.0020.0002] # SINHALA VOWEL SIGN KETTI AEDA-PILLA
+0DD1 ; [.2DA1.0020.0002] # SINHALA VOWEL SIGN DIGA AEDA-PILLA
+0DD2 ; [.2DA2.0020.0002] # SINHALA VOWEL SIGN KETTI IS-PILLA
+0DD3 ; [.2DA3.0020.0002] # SINHALA VOWEL SIGN DIGA IS-PILLA
+0DD4 ; [.2DA4.0020.0002] # SINHALA VOWEL SIGN KETTI PAA-PILLA
+0DD6 ; [.2DA5.0020.0002] # SINHALA VOWEL SIGN DIGA PAA-PILLA
+0DD8 ; [.2DA6.0020.0002] # SINHALA VOWEL SIGN GAETTA-PILLA
+0DF2 ; [.2DA7.0020.0002] # SINHALA VOWEL SIGN DIGA GAETTA-PILLA
+0DDF ; [.2DA8.0020.0002] # SINHALA VOWEL SIGN GAYANUKITTA
+0DF3 ; [.2DA9.0020.0002] # SINHALA VOWEL SIGN DIGA GAYANUKITTA
+0DD9 ; [.2DAA.0020.0002] # SINHALA VOWEL SIGN KOMBUVA
+0DDA ; [.2DAB.0020.0002] # SINHALA VOWEL SIGN DIGA KOMBUVA
+0DD9 0DCA ; [.2DAB.0020.0002] # SINHALA VOWEL SIGN DIGA KOMBUVA
+0DDB ; [.2DAC.0020.0002] # SINHALA VOWEL SIGN KOMBU DEKA
+0DDC ; [.2DAD.0020.0002] # SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA
+0DD9 0DCF ; [.2DAD.0020.0002] # SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA
+0DDD ; [.2DAE.0020.0002] # SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA
+0DD9 0DCF 0DCA ; [.2DAE.0020.0002] # SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA
+0DDC 0DCA ; [.2DAE.0020.0002] # SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA
+0DDE ; [.2DAF.0020.0002] # SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA
+0DD9 0DDF ; [.2DAF.0020.0002] # SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA
+0DCA ; [.2DB0.0020.0002] # SINHALA SIGN AL-LAKUNA
+AAF2 ; [.2DB1.0020.0002] # MEETEI MAYEK ANJI
+ABC0 ; [.2DB2.0020.0002] # MEETEI MAYEK LETTER KOK
+ABC1 ; [.2DB3.0020.0002] # MEETEI MAYEK LETTER SAM
+ABC2 ; [.2DB4.0020.0002] # MEETEI MAYEK LETTER LAI
+ABC3 ; [.2DB5.0020.0002] # MEETEI MAYEK LETTER MIT
+ABC4 ; [.2DB6.0020.0002] # MEETEI MAYEK LETTER PA
+ABC5 ; [.2DB7.0020.0002] # MEETEI MAYEK LETTER NA
+ABC6 ; [.2DB8.0020.0002] # MEETEI MAYEK LETTER CHIL
+ABC7 ; [.2DB9.0020.0002] # MEETEI MAYEK LETTER TIL
+ABC8 ; [.2DBA.0020.0002] # MEETEI MAYEK LETTER KHOU
+ABC9 ; [.2DBB.0020.0002] # MEETEI MAYEK LETTER NGOU
+ABCA ; [.2DBC.0020.0002] # MEETEI MAYEK LETTER THOU
+ABCB ; [.2DBD.0020.0002] # MEETEI MAYEK LETTER WAI
+ABCC ; [.2DBE.0020.0002] # MEETEI MAYEK LETTER YANG
+ABCD ; [.2DBF.0020.0002] # MEETEI MAYEK LETTER HUK
+ABCE ; [.2DC0.0020.0002] # MEETEI MAYEK LETTER UN
+ABCF ; [.2DC1.0020.0002] # MEETEI MAYEK LETTER I
+ABD0 ; [.2DC2.0020.0002] # MEETEI MAYEK LETTER PHAM
+ABD1 ; [.2DC3.0020.0002] # MEETEI MAYEK LETTER ATIYA
+ABD2 ; [.2DC4.0020.0002] # MEETEI MAYEK LETTER GOK
+ABD3 ; [.2DC5.0020.0002] # MEETEI MAYEK LETTER JHAM
+ABD4 ; [.2DC6.0020.0002] # MEETEI MAYEK LETTER RAI
+ABD5 ; [.2DC7.0020.0002] # MEETEI MAYEK LETTER BA
+ABD6 ; [.2DC8.0020.0002] # MEETEI MAYEK LETTER JIL
+ABD7 ; [.2DC9.0020.0002] # MEETEI MAYEK LETTER DIL
+ABD8 ; [.2DCA.0020.0002] # MEETEI MAYEK LETTER GHOU
+ABD9 ; [.2DCB.0020.0002] # MEETEI MAYEK LETTER DHOU
+ABDA ; [.2DCC.0020.0002] # MEETEI MAYEK LETTER BHAM
+AAE0 ; [.2DCD.0020.0002] # MEETEI MAYEK LETTER E
+AAE1 ; [.2DCE.0020.0002] # MEETEI MAYEK LETTER O
+AAE2 ; [.2DCF.0020.0002] # MEETEI MAYEK LETTER CHA
+AAE3 ; [.2DD0.0020.0002] # MEETEI MAYEK LETTER NYA
+AAE4 ; [.2DD1.0020.0002] # MEETEI MAYEK LETTER TTA
+AAE5 ; [.2DD2.0020.0002] # MEETEI MAYEK LETTER TTHA
+AAE6 ; [.2DD3.0020.0002] # MEETEI MAYEK LETTER DDA
+AAE7 ; [.2DD4.0020.0002] # MEETEI MAYEK LETTER DDHA
+AAE8 ; [.2DD5.0020.0002] # MEETEI MAYEK LETTER NNA
+AAE9 ; [.2DD6.0020.0002] # MEETEI MAYEK LETTER SHA
+AAEA ; [.2DD7.0020.0002] # MEETEI MAYEK LETTER SSA
+ABE3 ; [.2DD8.0020.0002] # MEETEI MAYEK VOWEL SIGN ONAP
+ABE4 ; [.2DD9.0020.0002] # MEETEI MAYEK VOWEL SIGN INAP
+ABE5 ; [.2DDA.0020.0002] # MEETEI MAYEK VOWEL SIGN ANAP
+ABE6 ; [.2DDB.0020.0002] # MEETEI MAYEK VOWEL SIGN YENAP
+ABE7 ; [.2DDC.0020.0002] # MEETEI MAYEK VOWEL SIGN SOUNAP
+ABE8 ; [.2DDD.0020.0002] # MEETEI MAYEK VOWEL SIGN UNAP
+ABE9 ; [.2DDE.0020.0002] # MEETEI MAYEK VOWEL SIGN CHEINAP
+ABEA ; [.2DDF.0020.0002] # MEETEI MAYEK VOWEL SIGN NUNG
+AAEB ; [.2DE0.0020.0002] # MEETEI MAYEK VOWEL SIGN II
+AAEC ; [.2DE1.0020.0002] # MEETEI MAYEK VOWEL SIGN UU
+AAED ; [.2DE2.0020.0002] # MEETEI MAYEK VOWEL SIGN AAI
+AAEE ; [.2DE3.0020.0002] # MEETEI MAYEK VOWEL SIGN AU
+AAEF ; [.2DE4.0020.0002] # MEETEI MAYEK VOWEL SIGN AAU
+AAF5 ; [.2DE5.0020.0002] # MEETEI MAYEK VOWEL SIGN VISARGA
+ABDB ; [.2DE6.0020.0002] # MEETEI MAYEK LETTER KOK LONSUM
+ABDC ; [.2DE7.0020.0002] # MEETEI MAYEK LETTER LAI LONSUM
+ABDD ; [.2DE8.0020.0002] # MEETEI MAYEK LETTER MIT LONSUM
+ABDE ; [.2DE9.0020.0002] # MEETEI MAYEK LETTER PA LONSUM
+ABDF ; [.2DEA.0020.0002] # MEETEI MAYEK LETTER NA LONSUM
+ABE0 ; [.2DEB.0020.0002] # MEETEI MAYEK LETTER TIL LONSUM
+ABE1 ; [.2DEC.0020.0002] # MEETEI MAYEK LETTER NGOU LONSUM
+ABE2 ; [.2DED.0020.0002] # MEETEI MAYEK LETTER I LONSUM
+ABED ; [.2DEE.0020.0002] # MEETEI MAYEK APUN IYEK
+AAF6 ; [.2DEF.0020.0002] # MEETEI MAYEK VIRAMA
+A800 ; [.2DF0.0020.0002] # SYLOTI NAGRI LETTER A
+A801 ; [.2DF1.0020.0002] # SYLOTI NAGRI LETTER I
+A802 ; [.2DF2.0020.0002] # SYLOTI NAGRI SIGN DVISVARA
+A803 ; [.2DF3.0020.0002] # SYLOTI NAGRI LETTER U
+A804 ; [.2DF4.0020.0002] # SYLOTI NAGRI LETTER E
+A805 ; [.2DF5.0020.0002] # SYLOTI NAGRI LETTER O
+A806 ; [.2DF6.0020.0002] # SYLOTI NAGRI SIGN HASANTA
+A82C ; [.2DF7.0020.0002] # SYLOTI NAGRI SIGN ALTERNATE HASANTA
+A807 ; [.2DF8.0020.0002] # SYLOTI NAGRI LETTER KO
+A808 ; [.2DF9.0020.0002] # SYLOTI NAGRI LETTER KHO
+A809 ; [.2DFA.0020.0002] # SYLOTI NAGRI LETTER GO
+A80A ; [.2DFB.0020.0002] # SYLOTI NAGRI LETTER GHO
+A80C ; [.2DFC.0020.0002] # SYLOTI NAGRI LETTER CO
+A80D ; [.2DFD.0020.0002] # SYLOTI NAGRI LETTER CHO
+A80E ; [.2DFE.0020.0002] # SYLOTI NAGRI LETTER JO
+A80F ; [.2DFF.0020.0002] # SYLOTI NAGRI LETTER JHO
+A810 ; [.2E00.0020.0002] # SYLOTI NAGRI LETTER TTO
+A811 ; [.2E01.0020.0002] # SYLOTI NAGRI LETTER TTHO
+A812 ; [.2E02.0020.0002] # SYLOTI NAGRI LETTER DDO
+A813 ; [.2E03.0020.0002] # SYLOTI NAGRI LETTER DDHO
+A814 ; [.2E04.0020.0002] # SYLOTI NAGRI LETTER TO
+A815 ; [.2E05.0020.0002] # SYLOTI NAGRI LETTER THO
+A816 ; [.2E06.0020.0002] # SYLOTI NAGRI LETTER DO
+A817 ; [.2E07.0020.0002] # SYLOTI NAGRI LETTER DHO
+A818 ; [.2E08.0020.0002] # SYLOTI NAGRI LETTER NO
+A819 ; [.2E09.0020.0002] # SYLOTI NAGRI LETTER PO
+A81A ; [.2E0A.0020.0002] # SYLOTI NAGRI LETTER PHO
+A81B ; [.2E0B.0020.0002] # SYLOTI NAGRI LETTER BO
+A81C ; [.2E0C.0020.0002] # SYLOTI NAGRI LETTER BHO
+A81D ; [.2E0D.0020.0002] # SYLOTI NAGRI LETTER MO
+A81E ; [.2E0E.0020.0002] # SYLOTI NAGRI LETTER RO
+A81F ; [.2E0F.0020.0002] # SYLOTI NAGRI LETTER LO
+A820 ; [.2E10.0020.0002] # SYLOTI NAGRI LETTER RRO
+A821 ; [.2E11.0020.0002] # SYLOTI NAGRI LETTER SO
+A822 ; [.2E12.0020.0002] # SYLOTI NAGRI LETTER HO
+A823 ; [.2E13.0020.0002] # SYLOTI NAGRI VOWEL SIGN A
+A824 ; [.2E14.0020.0002] # SYLOTI NAGRI VOWEL SIGN I
+A825 ; [.2E15.0020.0002] # SYLOTI NAGRI VOWEL SIGN U
+A826 ; [.2E16.0020.0002] # SYLOTI NAGRI VOWEL SIGN E
+A827 ; [.2E17.0020.0002] # SYLOTI NAGRI VOWEL SIGN OO
+A882 ; [.2E18.0020.0002] # SAURASHTRA LETTER A
+A883 ; [.2E19.0020.0002] # SAURASHTRA LETTER AA
+A884 ; [.2E1A.0020.0002] # SAURASHTRA LETTER I
+A885 ; [.2E1B.0020.0002] # SAURASHTRA LETTER II
+A886 ; [.2E1C.0020.0002] # SAURASHTRA LETTER U
+A887 ; [.2E1D.0020.0002] # SAURASHTRA LETTER UU
+A888 ; [.2E1E.0020.0002] # SAURASHTRA LETTER VOCALIC R
+A889 ; [.2E1F.0020.0002] # SAURASHTRA LETTER VOCALIC RR
+A88A ; [.2E20.0020.0002] # SAURASHTRA LETTER VOCALIC L
+A88B ; [.2E21.0020.0002] # SAURASHTRA LETTER VOCALIC LL
+A88C ; [.2E22.0020.0002] # SAURASHTRA LETTER E
+A88D ; [.2E23.0020.0002] # SAURASHTRA LETTER EE
+A88E ; [.2E24.0020.0002] # SAURASHTRA LETTER AI
+A88F ; [.2E25.0020.0002] # SAURASHTRA LETTER O
+A890 ; [.2E26.0020.0002] # SAURASHTRA LETTER OO
+A891 ; [.2E27.0020.0002] # SAURASHTRA LETTER AU
+A892 ; [.2E28.0020.0002] # SAURASHTRA LETTER KA
+A893 ; [.2E29.0020.0002] # SAURASHTRA LETTER KHA
+A894 ; [.2E2A.0020.0002] # SAURASHTRA LETTER GA
+A895 ; [.2E2B.0020.0002] # SAURASHTRA LETTER GHA
+A896 ; [.2E2C.0020.0002] # SAURASHTRA LETTER NGA
+A897 ; [.2E2D.0020.0002] # SAURASHTRA LETTER CA
+A898 ; [.2E2E.0020.0002] # SAURASHTRA LETTER CHA
+A899 ; [.2E2F.0020.0002] # SAURASHTRA LETTER JA
+A89A ; [.2E30.0020.0002] # SAURASHTRA LETTER JHA
+A89B ; [.2E31.0020.0002] # SAURASHTRA LETTER NYA
+A89C ; [.2E32.0020.0002] # SAURASHTRA LETTER TTA
+A89D ; [.2E33.0020.0002] # SAURASHTRA LETTER TTHA
+A89E ; [.2E34.0020.0002] # SAURASHTRA LETTER DDA
+A89F ; [.2E35.0020.0002] # SAURASHTRA LETTER DDHA
+A8A0 ; [.2E36.0020.0002] # SAURASHTRA LETTER NNA
+A8A1 ; [.2E37.0020.0002] # SAURASHTRA LETTER TA
+A8A2 ; [.2E38.0020.0002] # SAURASHTRA LETTER THA
+A8A3 ; [.2E39.0020.0002] # SAURASHTRA LETTER DA
+A8A4 ; [.2E3A.0020.0002] # SAURASHTRA LETTER DHA
+A8A5 ; [.2E3B.0020.0002] # SAURASHTRA LETTER NA
+A8A6 ; [.2E3C.0020.0002] # SAURASHTRA LETTER PA
+A8A7 ; [.2E3D.0020.0002] # SAURASHTRA LETTER PHA
+A8A8 ; [.2E3E.0020.0002] # SAURASHTRA LETTER BA
+A8A9 ; [.2E3F.0020.0002] # SAURASHTRA LETTER BHA
+A8AA ; [.2E40.0020.0002] # SAURASHTRA LETTER MA
+A8AB ; [.2E41.0020.0002] # SAURASHTRA LETTER YA
+A8AC ; [.2E42.0020.0002] # SAURASHTRA LETTER RA
+A8AD ; [.2E43.0020.0002] # SAURASHTRA LETTER LA
+A8AE ; [.2E44.0020.0002] # SAURASHTRA LETTER VA
+A8AF ; [.2E45.0020.0002] # SAURASHTRA LETTER SHA
+A8B0 ; [.2E46.0020.0002] # SAURASHTRA LETTER SSA
+A8B1 ; [.2E47.0020.0002] # SAURASHTRA LETTER SA
+A8B2 ; [.2E48.0020.0002] # SAURASHTRA LETTER HA
+A8B3 ; [.2E49.0020.0002] # SAURASHTRA LETTER LLA
+A8B4 ; [.2E4A.0020.0002] # SAURASHTRA CONSONANT SIGN HAARU
+A8B5 ; [.2E4B.0020.0002] # SAURASHTRA VOWEL SIGN AA
+A8B6 ; [.2E4C.0020.0002] # SAURASHTRA VOWEL SIGN I
+A8B7 ; [.2E4D.0020.0002] # SAURASHTRA VOWEL SIGN II
+A8B8 ; [.2E4E.0020.0002] # SAURASHTRA VOWEL SIGN U
+A8B9 ; [.2E4F.0020.0002] # SAURASHTRA VOWEL SIGN UU
+A8BA ; [.2E50.0020.0002] # SAURASHTRA VOWEL SIGN VOCALIC R
+A8BB ; [.2E51.0020.0002] # SAURASHTRA VOWEL SIGN VOCALIC RR
+A8BC ; [.2E52.0020.0002] # SAURASHTRA VOWEL SIGN VOCALIC L
+A8BD ; [.2E53.0020.0002] # SAURASHTRA VOWEL SIGN VOCALIC LL
+A8BE ; [.2E54.0020.0002] # SAURASHTRA VOWEL SIGN E
+A8BF ; [.2E55.0020.0002] # SAURASHTRA VOWEL SIGN EE
+A8C0 ; [.2E56.0020.0002] # SAURASHTRA VOWEL SIGN AI
+A8C1 ; [.2E57.0020.0002] # SAURASHTRA VOWEL SIGN O
+A8C2 ; [.2E58.0020.0002] # SAURASHTRA VOWEL SIGN OO
+A8C3 ; [.2E59.0020.0002] # SAURASHTRA VOWEL SIGN AU
+A8C4 ; [.2E5A.0020.0002] # SAURASHTRA SIGN VIRAMA
+11083 ; [.2E5B.0020.0002] # KAITHI LETTER A
+11084 ; [.2E5C.0020.0002] # KAITHI LETTER AA
+11085 ; [.2E5D.0020.0002] # KAITHI LETTER I
+11086 ; [.2E5E.0020.0002] # KAITHI LETTER II
+11087 ; [.2E5F.0020.0002] # KAITHI LETTER U
+11088 ; [.2E60.0020.0002] # KAITHI LETTER UU
+11089 ; [.2E61.0020.0002] # KAITHI LETTER E
+1108A ; [.2E62.0020.0002] # KAITHI LETTER AI
+1108B ; [.2E63.0020.0002] # KAITHI LETTER O
+1108C ; [.2E64.0020.0002] # KAITHI LETTER AU
+1108D ; [.2E65.0020.0002] # KAITHI LETTER KA
+1108E ; [.2E66.0020.0002] # KAITHI LETTER KHA
+1108F ; [.2E67.0020.0002] # KAITHI LETTER GA
+11090 ; [.2E68.0020.0002] # KAITHI LETTER GHA
+11091 ; [.2E69.0020.0002] # KAITHI LETTER NGA
+11092 ; [.2E6A.0020.0002] # KAITHI LETTER CA
+11093 ; [.2E6B.0020.0002] # KAITHI LETTER CHA
+11094 ; [.2E6C.0020.0002] # KAITHI LETTER JA
+11095 ; [.2E6D.0020.0002] # KAITHI LETTER JHA
+11096 ; [.2E6E.0020.0002] # KAITHI LETTER NYA
+11097 ; [.2E6F.0020.0002] # KAITHI LETTER TTA
+11098 ; [.2E70.0020.0002] # KAITHI LETTER TTHA
+11099 ; [.2E71.0020.0002] # KAITHI LETTER DDA
+1109A ; [.2E71.0020.0002][.0000.00C2.0002] # KAITHI LETTER DDDHA
+1109B ; [.2E72.0020.0002] # KAITHI LETTER DDHA
+1109C ; [.2E72.0020.0002][.0000.00C2.0002] # KAITHI LETTER RHA
+1109D ; [.2E73.0020.0002] # KAITHI LETTER NNA
+1109E ; [.2E74.0020.0002] # KAITHI LETTER TA
+1109F ; [.2E75.0020.0002] # KAITHI LETTER THA
+110A0 ; [.2E76.0020.0002] # KAITHI LETTER DA
+110A1 ; [.2E77.0020.0002] # KAITHI LETTER DHA
+110A2 ; [.2E78.0020.0002] # KAITHI LETTER NA
+110A3 ; [.2E79.0020.0002] # KAITHI LETTER PA
+110A4 ; [.2E7A.0020.0002] # KAITHI LETTER PHA
+110A5 ; [.2E7B.0020.0002] # KAITHI LETTER BA
+110AB ; [.2E7B.0020.0002][.0000.00C2.0002] # KAITHI LETTER VA
+110A6 ; [.2E7C.0020.0002] # KAITHI LETTER BHA
+110A7 ; [.2E7D.0020.0002] # KAITHI LETTER MA
+110A8 ; [.2E7E.0020.0002] # KAITHI LETTER YA
+110A9 ; [.2E7F.0020.0002] # KAITHI LETTER RA
+110AA ; [.2E80.0020.0002] # KAITHI LETTER LA
+110AC ; [.2E81.0020.0002] # KAITHI LETTER SHA
+110AD ; [.2E82.0020.0002] # KAITHI LETTER SSA
+110AE ; [.2E83.0020.0002] # KAITHI LETTER SA
+110AF ; [.2E84.0020.0002] # KAITHI LETTER HA
+110B0 ; [.2E85.0020.0002] # KAITHI VOWEL SIGN AA
+110B1 ; [.2E86.0020.0002] # KAITHI VOWEL SIGN I
+110B2 ; [.2E87.0020.0002] # KAITHI VOWEL SIGN II
+110B3 ; [.2E88.0020.0002] # KAITHI VOWEL SIGN U
+110B4 ; [.2E89.0020.0002] # KAITHI VOWEL SIGN UU
+110C2 ; [.2E8A.0020.0002] # KAITHI VOWEL SIGN VOCALIC R
+110B5 ; [.2E8B.0020.0002] # KAITHI VOWEL SIGN E
+110B6 ; [.2E8C.0020.0002] # KAITHI VOWEL SIGN AI
+110B7 ; [.2E8D.0020.0002] # KAITHI VOWEL SIGN O
+110B8 ; [.2E8E.0020.0002] # KAITHI VOWEL SIGN AU
+110B9 ; [.2E8F.0020.0002] # KAITHI SIGN VIRAMA
+11150 ; [.2E90.0020.0002] # MAHAJANI LETTER A
+11151 ; [.2E91.0020.0002] # MAHAJANI LETTER I
+11152 ; [.2E92.0020.0002] # MAHAJANI LETTER U
+11153 ; [.2E93.0020.0002] # MAHAJANI LETTER E
+11154 ; [.2E94.0020.0002] # MAHAJANI LETTER O
+11155 ; [.2E95.0020.0002] # MAHAJANI LETTER KA
+11156 ; [.2E96.0020.0002] # MAHAJANI LETTER KHA
+11157 ; [.2E97.0020.0002] # MAHAJANI LETTER GA
+11158 ; [.2E98.0020.0002] # MAHAJANI LETTER GHA
+11159 ; [.2E99.0020.0002] # MAHAJANI LETTER CA
+1115A ; [.2E9A.0020.0002] # MAHAJANI LETTER CHA
+1115B ; [.2E9B.0020.0002] # MAHAJANI LETTER JA
+1115C ; [.2E9C.0020.0002] # MAHAJANI LETTER JHA
+1115D ; [.2E9D.0020.0002] # MAHAJANI LETTER NYA
+1115E ; [.2E9E.0020.0002] # MAHAJANI LETTER TTA
+1115F ; [.2E9F.0020.0002] # MAHAJANI LETTER TTHA
+11160 ; [.2EA0.0020.0002] # MAHAJANI LETTER DDA
+11161 ; [.2EA1.0020.0002] # MAHAJANI LETTER DDHA
+11162 ; [.2EA2.0020.0002] # MAHAJANI LETTER NNA
+11163 ; [.2EA3.0020.0002] # MAHAJANI LETTER TA
+11164 ; [.2EA4.0020.0002] # MAHAJANI LETTER THA
+11165 ; [.2EA5.0020.0002] # MAHAJANI LETTER DA
+11166 ; [.2EA6.0020.0002] # MAHAJANI LETTER DHA
+11167 ; [.2EA7.0020.0002] # MAHAJANI LETTER NA
+11168 ; [.2EA8.0020.0002] # MAHAJANI LETTER PA
+11169 ; [.2EA9.0020.0002] # MAHAJANI LETTER PHA
+1116A ; [.2EAA.0020.0002] # MAHAJANI LETTER BA
+1116B ; [.2EAB.0020.0002] # MAHAJANI LETTER BHA
+1116C ; [.2EAC.0020.0002] # MAHAJANI LETTER MA
+1116D ; [.2EAD.0020.0002] # MAHAJANI LETTER RA
+1116E ; [.2EAE.0020.0002] # MAHAJANI LETTER LA
+1116F ; [.2EAF.0020.0002] # MAHAJANI LETTER VA
+11176 ; [.2EB0.0020.0002] # MAHAJANI LIGATURE SHRI
+11170 ; [.2EB1.0020.0002] # MAHAJANI LETTER SA
+11171 ; [.2EB2.0020.0002] # MAHAJANI LETTER HA
+11172 ; [.2EB3.0020.0002] # MAHAJANI LETTER RRA
+111C4 ; [.2EB4.0020.0002] # SHARADA OM
+111DA ; [.2EB5.0020.0002] # SHARADA EKAM
+11183 ; [.2EB6.0020.0002] # SHARADA LETTER A
+11184 ; [.2EB7.0020.0002] # SHARADA LETTER AA
+11185 ; [.2EB8.0020.0002] # SHARADA LETTER I
+11186 ; [.2EB9.0020.0002] # SHARADA LETTER II
+11187 ; [.2EBA.0020.0002] # SHARADA LETTER U
+11188 ; [.2EBB.0020.0002] # SHARADA LETTER UU
+11189 ; [.2EBC.0020.0002] # SHARADA LETTER VOCALIC R
+1118A ; [.2EBD.0020.0002] # SHARADA LETTER VOCALIC RR
+1118B ; [.2EBE.0020.0002] # SHARADA LETTER VOCALIC L
+1118C ; [.2EBF.0020.0002] # SHARADA LETTER VOCALIC LL
+1118D ; [.2EC0.0020.0002] # SHARADA LETTER E
+1118E ; [.2EC1.0020.0002] # SHARADA LETTER AI
+1118F ; [.2EC2.0020.0002] # SHARADA LETTER O
+11190 ; [.2EC3.0020.0002] # SHARADA LETTER AU
+11191 ; [.2EC4.0020.0002] # SHARADA LETTER KA
+11192 ; [.2EC5.0020.0002] # SHARADA LETTER KHA
+11193 ; [.2EC6.0020.0002] # SHARADA LETTER GA
+11194 ; [.2EC7.0020.0002] # SHARADA LETTER GHA
+11195 ; [.2EC8.0020.0002] # SHARADA LETTER NGA
+11196 ; [.2EC9.0020.0002] # SHARADA LETTER CA
+11197 ; [.2ECA.0020.0002] # SHARADA LETTER CHA
+11198 ; [.2ECB.0020.0002] # SHARADA LETTER JA
+11199 ; [.2ECC.0020.0002] # SHARADA LETTER JHA
+1119A ; [.2ECD.0020.0002] # SHARADA LETTER NYA
+1119B ; [.2ECE.0020.0002] # SHARADA LETTER TTA
+1119C ; [.2ECF.0020.0002] # SHARADA LETTER TTHA
+1119D ; [.2ED0.0020.0002] # SHARADA LETTER DDA
+1119E ; [.2ED1.0020.0002] # SHARADA LETTER DDHA
+1119F ; [.2ED2.0020.0002] # SHARADA LETTER NNA
+111A0 ; [.2ED3.0020.0002] # SHARADA LETTER TA
+111A1 ; [.2ED4.0020.0002] # SHARADA LETTER THA
+111A2 ; [.2ED5.0020.0002] # SHARADA LETTER DA
+111A3 ; [.2ED6.0020.0002] # SHARADA LETTER DHA
+111A4 ; [.2ED7.0020.0002] # SHARADA LETTER NA
+111A5 ; [.2ED8.0020.0002] # SHARADA LETTER PA
+111A6 ; [.2ED9.0020.0002] # SHARADA LETTER PHA
+111A7 ; [.2EDA.0020.0002] # SHARADA LETTER BA
+111A8 ; [.2EDB.0020.0002] # SHARADA LETTER BHA
+111A9 ; [.2EDC.0020.0002] # SHARADA LETTER MA
+111AA ; [.2EDD.0020.0002] # SHARADA LETTER YA
+111AB ; [.2EDE.0020.0002] # SHARADA LETTER RA
+111AC ; [.2EDF.0020.0002] # SHARADA LETTER LA
+111AD ; [.2EE0.0020.0002] # SHARADA LETTER LLA
+111AE ; [.2EE1.0020.0002] # SHARADA LETTER VA
+111AF ; [.2EE2.0020.0002] # SHARADA LETTER SHA
+111B0 ; [.2EE3.0020.0002] # SHARADA LETTER SSA
+111B1 ; [.2EE4.0020.0002] # SHARADA LETTER SA
+111B2 ; [.2EE5.0020.0002] # SHARADA LETTER HA
+111C1 ; [.2EE6.0020.0002] # SHARADA SIGN AVAGRAHA
+111C2 ; [.2EE7.0020.0002] # SHARADA SIGN JIHVAMULIYA
+111C3 ; [.2EE8.0020.0002] # SHARADA SIGN UPADHMANIYA
+111DC ; [.2EE9.0020.0002] # SHARADA HEADSTROKE
+111B3 ; [.2EEA.0020.0002] # SHARADA VOWEL SIGN AA
+111B4 ; [.2EEB.0020.0002] # SHARADA VOWEL SIGN I
+111B5 ; [.2EEC.0020.0002] # SHARADA VOWEL SIGN II
+111B6 ; [.2EED.0020.0002] # SHARADA VOWEL SIGN U
+111B7 ; [.2EEE.0020.0002] # SHARADA VOWEL SIGN UU
+111B8 ; [.2EEF.0020.0002] # SHARADA VOWEL SIGN VOCALIC R
+111B9 ; [.2EF0.0020.0002] # SHARADA VOWEL SIGN VOCALIC RR
+111BA ; [.2EF1.0020.0002] # SHARADA VOWEL SIGN VOCALIC L
+111BB ; [.2EF2.0020.0002] # SHARADA VOWEL SIGN VOCALIC LL
+111BC ; [.2EF3.0020.0002] # SHARADA VOWEL SIGN E
+111CE ; [.2EF4.0020.0002] # SHARADA VOWEL SIGN PRISHTHAMATRA E
+111BD ; [.2EF5.0020.0002] # SHARADA VOWEL SIGN AI
+111BE ; [.2EF6.0020.0002] # SHARADA VOWEL SIGN O
+111BF ; [.2EF7.0020.0002] # SHARADA VOWEL SIGN AU
+111C0 ; [.2EF8.0020.0002] # SHARADA SIGN VIRAMA
+11200 ; [.2EF9.0020.0002] # KHOJKI LETTER A
+11201 ; [.2EFA.0020.0002] # KHOJKI LETTER AA
+11202 ; [.2EFB.0020.0002] # KHOJKI LETTER I
+11203 ; [.2EFC.0020.0002] # KHOJKI LETTER U
+11204 ; [.2EFD.0020.0002] # KHOJKI LETTER E
+11205 ; [.2EFE.0020.0002] # KHOJKI LETTER AI
+11206 ; [.2EFF.0020.0002] # KHOJKI LETTER O
+11207 ; [.2F00.0020.0002] # KHOJKI LETTER AU
+11208 ; [.2F01.0020.0002] # KHOJKI LETTER KA
+11209 ; [.2F02.0020.0002] # KHOJKI LETTER KHA
+1120A ; [.2F03.0020.0002] # KHOJKI LETTER GA
+1120B ; [.2F04.0020.0002] # KHOJKI LETTER GGA
+1120C ; [.2F05.0020.0002] # KHOJKI LETTER GHA
+1120D ; [.2F06.0020.0002] # KHOJKI LETTER NGA
+1120E ; [.2F07.0020.0002] # KHOJKI LETTER CA
+1120F ; [.2F08.0020.0002] # KHOJKI LETTER CHA
+11210 ; [.2F09.0020.0002] # KHOJKI LETTER JA
+11211 ; [.2F0A.0020.0002] # KHOJKI LETTER JJA
+11213 ; [.2F0B.0020.0002] # KHOJKI LETTER NYA
+11214 ; [.2F0C.0020.0002] # KHOJKI LETTER TTA
+11215 ; [.2F0D.0020.0002] # KHOJKI LETTER TTHA
+11216 ; [.2F0E.0020.0002] # KHOJKI LETTER DDA
+11217 ; [.2F0F.0020.0002] # KHOJKI LETTER DDHA
+11218 ; [.2F10.0020.0002] # KHOJKI LETTER NNA
+11219 ; [.2F11.0020.0002] # KHOJKI LETTER TA
+1121A ; [.2F12.0020.0002] # KHOJKI LETTER THA
+1121B ; [.2F13.0020.0002] # KHOJKI LETTER DA
+1121C ; [.2F14.0020.0002] # KHOJKI LETTER DDDA
+1121D ; [.2F15.0020.0002] # KHOJKI LETTER DHA
+1121E ; [.2F16.0020.0002] # KHOJKI LETTER NA
+1121F ; [.2F17.0020.0002] # KHOJKI LETTER PA
+11220 ; [.2F18.0020.0002] # KHOJKI LETTER PHA
+11221 ; [.2F19.0020.0002] # KHOJKI LETTER BA
+11222 ; [.2F1A.0020.0002] # KHOJKI LETTER BBA
+11223 ; [.2F1B.0020.0002] # KHOJKI LETTER BHA
+11224 ; [.2F1C.0020.0002] # KHOJKI LETTER MA
+11225 ; [.2F1D.0020.0002] # KHOJKI LETTER YA
+11226 ; [.2F1E.0020.0002] # KHOJKI LETTER RA
+11227 ; [.2F1F.0020.0002] # KHOJKI LETTER LA
+11228 ; [.2F20.0020.0002] # KHOJKI LETTER VA
+11229 ; [.2F21.0020.0002] # KHOJKI LETTER SA
+1122A ; [.2F22.0020.0002] # KHOJKI LETTER HA
+1122B ; [.2F23.0020.0002] # KHOJKI LETTER LLA
+1122C ; [.2F24.0020.0002] # KHOJKI VOWEL SIGN AA
+1122D ; [.2F25.0020.0002] # KHOJKI VOWEL SIGN I
+1122E ; [.2F26.0020.0002] # KHOJKI VOWEL SIGN II
+1122F ; [.2F27.0020.0002] # KHOJKI VOWEL SIGN U
+11230 ; [.2F28.0020.0002] # KHOJKI VOWEL SIGN E
+11231 ; [.2F29.0020.0002] # KHOJKI VOWEL SIGN AI
+11232 ; [.2F2A.0020.0002] # KHOJKI VOWEL SIGN O
+11233 ; [.2F2B.0020.0002] # KHOJKI VOWEL SIGN AU
+11235 ; [.2F2C.0020.0002] # KHOJKI SIGN VIRAMA
+112B0 ; [.2F2D.0020.0002] # KHUDAWADI LETTER A
+112B1 ; [.2F2E.0020.0002] # KHUDAWADI LETTER AA
+112B2 ; [.2F2F.0020.0002] # KHUDAWADI LETTER I
+112B3 ; [.2F30.0020.0002] # KHUDAWADI LETTER II
+112B4 ; [.2F31.0020.0002] # KHUDAWADI LETTER U
+112B5 ; [.2F32.0020.0002] # KHUDAWADI LETTER UU
+112B6 ; [.2F33.0020.0002] # KHUDAWADI LETTER E
+112B7 ; [.2F34.0020.0002] # KHUDAWADI LETTER AI
+112B8 ; [.2F35.0020.0002] # KHUDAWADI LETTER O
+112B9 ; [.2F36.0020.0002] # KHUDAWADI LETTER AU
+112BA ; [.2F37.0020.0002] # KHUDAWADI LETTER KA
+112BB ; [.2F38.0020.0002] # KHUDAWADI LETTER KHA
+112BC ; [.2F39.0020.0002] # KHUDAWADI LETTER GA
+112BD ; [.2F3A.0020.0002] # KHUDAWADI LETTER GGA
+112BE ; [.2F3B.0020.0002] # KHUDAWADI LETTER GHA
+112BF ; [.2F3C.0020.0002] # KHUDAWADI LETTER NGA
+112C0 ; [.2F3D.0020.0002] # KHUDAWADI LETTER CA
+112C1 ; [.2F3E.0020.0002] # KHUDAWADI LETTER CHA
+112C2 ; [.2F3F.0020.0002] # KHUDAWADI LETTER JA
+112C3 ; [.2F40.0020.0002] # KHUDAWADI LETTER JJA
+112C4 ; [.2F41.0020.0002] # KHUDAWADI LETTER JHA
+112C5 ; [.2F42.0020.0002] # KHUDAWADI LETTER NYA
+112C6 ; [.2F43.0020.0002] # KHUDAWADI LETTER TTA
+112C7 ; [.2F44.0020.0002] # KHUDAWADI LETTER TTHA
+112C8 ; [.2F45.0020.0002] # KHUDAWADI LETTER DDA
+112C9 ; [.2F46.0020.0002] # KHUDAWADI LETTER DDDA
+112CA ; [.2F47.0020.0002] # KHUDAWADI LETTER RRA
+112CB ; [.2F48.0020.0002] # KHUDAWADI LETTER DDHA
+112CC ; [.2F49.0020.0002] # KHUDAWADI LETTER NNA
+112CD ; [.2F4A.0020.0002] # KHUDAWADI LETTER TA
+112CE ; [.2F4B.0020.0002] # KHUDAWADI LETTER THA
+112CF ; [.2F4C.0020.0002] # KHUDAWADI LETTER DA
+112D0 ; [.2F4D.0020.0002] # KHUDAWADI LETTER DHA
+112D1 ; [.2F4E.0020.0002] # KHUDAWADI LETTER NA
+112D2 ; [.2F4F.0020.0002] # KHUDAWADI LETTER PA
+112D3 ; [.2F50.0020.0002] # KHUDAWADI LETTER PHA
+112D4 ; [.2F51.0020.0002] # KHUDAWADI LETTER BA
+112D5 ; [.2F52.0020.0002] # KHUDAWADI LETTER BBA
+112D6 ; [.2F53.0020.0002] # KHUDAWADI LETTER BHA
+112D7 ; [.2F54.0020.0002] # KHUDAWADI LETTER MA
+112D8 ; [.2F55.0020.0002] # KHUDAWADI LETTER YA
+112D9 ; [.2F56.0020.0002] # KHUDAWADI LETTER RA
+112DA ; [.2F57.0020.0002] # KHUDAWADI LETTER LA
+112DB ; [.2F58.0020.0002] # KHUDAWADI LETTER VA
+112DC ; [.2F59.0020.0002] # KHUDAWADI LETTER SHA
+112DD ; [.2F5A.0020.0002] # KHUDAWADI LETTER SA
+112DE ; [.2F5B.0020.0002] # KHUDAWADI LETTER HA
+112E0 ; [.2F5C.0020.0002] # KHUDAWADI VOWEL SIGN AA
+112E1 ; [.2F5D.0020.0002] # KHUDAWADI VOWEL SIGN I
+112E2 ; [.2F5E.0020.0002] # KHUDAWADI VOWEL SIGN II
+112E3 ; [.2F5F.0020.0002] # KHUDAWADI VOWEL SIGN U
+112E4 ; [.2F60.0020.0002] # KHUDAWADI VOWEL SIGN UU
+112E5 ; [.2F61.0020.0002] # KHUDAWADI VOWEL SIGN E
+112E6 ; [.2F62.0020.0002] # KHUDAWADI VOWEL SIGN AI
+112E7 ; [.2F63.0020.0002] # KHUDAWADI VOWEL SIGN O
+112E8 ; [.2F64.0020.0002] # KHUDAWADI VOWEL SIGN AU
+112EA ; [.2F65.0020.0002] # KHUDAWADI SIGN VIRAMA
+11280 ; [.2F66.0020.0002] # MULTANI LETTER A
+11281 ; [.2F67.0020.0002] # MULTANI LETTER I
+11282 ; [.2F68.0020.0002] # MULTANI LETTER U
+11283 ; [.2F69.0020.0002] # MULTANI LETTER E
+112A5 ; [.2F6A.0020.0002] # MULTANI LETTER SA
+112A6 ; [.2F6B.0020.0002] # MULTANI LETTER HA
+11284 ; [.2F6C.0020.0002] # MULTANI LETTER KA
+11285 ; [.2F6D.0020.0002] # MULTANI LETTER KHA
+11286 ; [.2F6E.0020.0002] # MULTANI LETTER GA
+11288 ; [.2F6F.0020.0002] # MULTANI LETTER GHA
+1128A ; [.2F70.0020.0002] # MULTANI LETTER CA
+1128B ; [.2F71.0020.0002] # MULTANI LETTER CHA
+1128C ; [.2F72.0020.0002] # MULTANI LETTER JA
+1128D ; [.2F73.0020.0002] # MULTANI LETTER JJA
+1128F ; [.2F74.0020.0002] # MULTANI LETTER NYA
+11290 ; [.2F75.0020.0002] # MULTANI LETTER TTA
+11291 ; [.2F76.0020.0002] # MULTANI LETTER TTHA
+11292 ; [.2F77.0020.0002] # MULTANI LETTER DDA
+11293 ; [.2F78.0020.0002] # MULTANI LETTER DDDA
+11294 ; [.2F79.0020.0002] # MULTANI LETTER DDHA
+11295 ; [.2F7A.0020.0002] # MULTANI LETTER NNA
+11296 ; [.2F7B.0020.0002] # MULTANI LETTER TA
+11297 ; [.2F7C.0020.0002] # MULTANI LETTER THA
+11298 ; [.2F7D.0020.0002] # MULTANI LETTER DA
+11299 ; [.2F7E.0020.0002] # MULTANI LETTER DHA
+1129A ; [.2F7F.0020.0002] # MULTANI LETTER NA
+1129B ; [.2F80.0020.0002] # MULTANI LETTER PA
+1129C ; [.2F81.0020.0002] # MULTANI LETTER PHA
+1129D ; [.2F82.0020.0002] # MULTANI LETTER BA
+1129F ; [.2F83.0020.0002] # MULTANI LETTER BHA
+112A0 ; [.2F84.0020.0002] # MULTANI LETTER MA
+112A1 ; [.2F85.0020.0002] # MULTANI LETTER YA
+112A2 ; [.2F86.0020.0002] # MULTANI LETTER RA
+112A3 ; [.2F87.0020.0002] # MULTANI LETTER LA
+112A4 ; [.2F88.0020.0002] # MULTANI LETTER VA
+112A7 ; [.2F89.0020.0002] # MULTANI LETTER RRA
+112A8 ; [.2F8A.0020.0002] # MULTANI LETTER RHA
+11350 ; [.2F8B.0020.0002] # GRANTHA OM
+11305 ; [.2F8C.0020.0002] # GRANTHA LETTER A
+11306 ; [.2F8D.0020.0002] # GRANTHA LETTER AA
+11307 ; [.2F8E.0020.0002] # GRANTHA LETTER I
+11308 ; [.2F8F.0020.0002] # GRANTHA LETTER II
+11309 ; [.2F90.0020.0002] # GRANTHA LETTER U
+1130A ; [.2F91.0020.0002] # GRANTHA LETTER UU
+1130B ; [.2F92.0020.0002] # GRANTHA LETTER VOCALIC R
+11360 ; [.2F93.0020.0002] # GRANTHA LETTER VOCALIC RR
+1130C ; [.2F94.0020.0002] # GRANTHA LETTER VOCALIC L
+11361 ; [.2F95.0020.0002] # GRANTHA LETTER VOCALIC LL
+1130F ; [.2F96.0020.0002] # GRANTHA LETTER EE
+11310 ; [.2F97.0020.0002] # GRANTHA LETTER AI
+11313 ; [.2F98.0020.0002] # GRANTHA LETTER OO
+11314 ; [.2F99.0020.0002] # GRANTHA LETTER AU
+11315 ; [.2F9A.0020.0002] # GRANTHA LETTER KA
+11316 ; [.2F9B.0020.0002] # GRANTHA LETTER KHA
+11317 ; [.2F9C.0020.0002] # GRANTHA LETTER GA
+11318 ; [.2F9D.0020.0002] # GRANTHA LETTER GHA
+11319 ; [.2F9E.0020.0002] # GRANTHA LETTER NGA
+1131A ; [.2F9F.0020.0002] # GRANTHA LETTER CA
+1131B ; [.2FA0.0020.0002] # GRANTHA LETTER CHA
+1131C ; [.2FA1.0020.0002] # GRANTHA LETTER JA
+1131D ; [.2FA2.0020.0002] # GRANTHA LETTER JHA
+1131E ; [.2FA3.0020.0002] # GRANTHA LETTER NYA
+1131F ; [.2FA4.0020.0002] # GRANTHA LETTER TTA
+11320 ; [.2FA5.0020.0002] # GRANTHA LETTER TTHA
+11321 ; [.2FA6.0020.0002] # GRANTHA LETTER DDA
+11322 ; [.2FA7.0020.0002] # GRANTHA LETTER DDHA
+11323 ; [.2FA8.0020.0002] # GRANTHA LETTER NNA
+11324 ; [.2FA9.0020.0002] # GRANTHA LETTER TA
+11325 ; [.2FAA.0020.0002] # GRANTHA LETTER THA
+11326 ; [.2FAB.0020.0002] # GRANTHA LETTER DA
+11327 ; [.2FAC.0020.0002] # GRANTHA LETTER DHA
+11328 ; [.2FAD.0020.0002] # GRANTHA LETTER NA
+1132A ; [.2FAE.0020.0002] # GRANTHA LETTER PA
+1132B ; [.2FAF.0020.0002] # GRANTHA LETTER PHA
+1132C ; [.2FB0.0020.0002] # GRANTHA LETTER BA
+1132D ; [.2FB1.0020.0002] # GRANTHA LETTER BHA
+1132E ; [.2FB2.0020.0002] # GRANTHA LETTER MA
+1132F ; [.2FB3.0020.0002] # GRANTHA LETTER YA
+11330 ; [.2FB4.0020.0002] # GRANTHA LETTER RA
+11332 ; [.2FB5.0020.0002] # GRANTHA LETTER LA
+11333 ; [.2FB6.0020.0002] # GRANTHA LETTER LLA
+11335 ; [.2FB7.0020.0002] # GRANTHA LETTER VA
+11336 ; [.2FB8.0020.0002] # GRANTHA LETTER SHA
+11337 ; [.2FB9.0020.0002] # GRANTHA LETTER SSA
+11338 ; [.2FBA.0020.0002] # GRANTHA LETTER SA
+11339 ; [.2FBB.0020.0002] # GRANTHA LETTER HA
+1133D ; [.2FBC.0020.0002] # GRANTHA SIGN AVAGRAHA
+1135E ; [.2FBD.0020.0002] # GRANTHA LETTER VEDIC ANUSVARA
+1135F ; [.2FBE.0020.0002] # GRANTHA LETTER VEDIC DOUBLE ANUSVARA
+1133E ; [.2FBF.0020.0002] # GRANTHA VOWEL SIGN AA
+1133F ; [.2FC0.0020.0002] # GRANTHA VOWEL SIGN I
+11340 ; [.2FC1.0020.0002] # GRANTHA VOWEL SIGN II
+11341 ; [.2FC2.0020.0002] # GRANTHA VOWEL SIGN U
+11342 ; [.2FC3.0020.0002] # GRANTHA VOWEL SIGN UU
+11343 ; [.2FC4.0020.0002] # GRANTHA VOWEL SIGN VOCALIC R
+11344 ; [.2FC5.0020.0002] # GRANTHA VOWEL SIGN VOCALIC RR
+11362 ; [.2FC6.0020.0002] # GRANTHA VOWEL SIGN VOCALIC L
+11363 ; [.2FC7.0020.0002] # GRANTHA VOWEL SIGN VOCALIC LL
+11347 ; [.2FC8.0020.0002] # GRANTHA VOWEL SIGN EE
+11348 ; [.2FC9.0020.0002] # GRANTHA VOWEL SIGN AI
+1134B ; [.2FCA.0020.0002] # GRANTHA VOWEL SIGN OO
+11347 1133E ; [.2FCA.0020.0002] # GRANTHA VOWEL SIGN OO
+1134C ; [.2FCB.0020.0002] # GRANTHA VOWEL SIGN AU
+11347 11357 ; [.2FCB.0020.0002] # GRANTHA VOWEL SIGN AU
+1134D ; [.2FCC.0020.0002] # GRANTHA SIGN VIRAMA
+11357 ; [.2FCD.0020.0002] # GRANTHA AU LENGTH MARK
+1135D ; [.2FCE.0020.0002] # GRANTHA SIGN PLUTA
+11449 ; [.2FCF.0020.0002] # NEWA OM
+1144A ; [.2FD0.0020.0002] # NEWA SIDDHI
+11400 ; [.2FD1.0020.0002] # NEWA LETTER A
+11401 ; [.2FD2.0020.0002] # NEWA LETTER AA
+11402 ; [.2FD3.0020.0002] # NEWA LETTER I
+11403 ; [.2FD4.0020.0002] # NEWA LETTER II
+11404 ; [.2FD5.0020.0002] # NEWA LETTER U
+11405 ; [.2FD6.0020.0002] # NEWA LETTER UU
+11406 ; [.2FD7.0020.0002] # NEWA LETTER VOCALIC R
+11407 ; [.2FD8.0020.0002] # NEWA LETTER VOCALIC RR
+11408 ; [.2FD9.0020.0002] # NEWA LETTER VOCALIC L
+11409 ; [.2FDA.0020.0002] # NEWA LETTER VOCALIC LL
+1140A ; [.2FDB.0020.0002] # NEWA LETTER E
+1140B ; [.2FDC.0020.0002] # NEWA LETTER AI
+1140C ; [.2FDD.0020.0002] # NEWA LETTER O
+1140D ; [.2FDE.0020.0002] # NEWA LETTER AU
+1140E ; [.2FDF.0020.0002] # NEWA LETTER KA
+1140F ; [.2FE0.0020.0002] # NEWA LETTER KHA
+11410 ; [.2FE1.0020.0002] # NEWA LETTER GA
+11411 ; [.2FE2.0020.0002] # NEWA LETTER GHA
+11412 ; [.2FE3.0020.0002] # NEWA LETTER NGA
+11413 ; [.2FE4.0020.0002] # NEWA LETTER NGHA
+11414 ; [.2FE5.0020.0002] # NEWA LETTER CA
+11415 ; [.2FE6.0020.0002] # NEWA LETTER CHA
+11416 ; [.2FE7.0020.0002] # NEWA LETTER JA
+11417 ; [.2FE8.0020.0002] # NEWA LETTER JHA
+11418 ; [.2FE9.0020.0002] # NEWA LETTER NYA
+11419 ; [.2FEA.0020.0002] # NEWA LETTER NYHA
+1141A ; [.2FEB.0020.0002] # NEWA LETTER TTA
+1141B ; [.2FEC.0020.0002] # NEWA LETTER TTHA
+1141C ; [.2FED.0020.0002] # NEWA LETTER DDA
+1141D ; [.2FEE.0020.0002] # NEWA LETTER DDHA
+1141E ; [.2FEF.0020.0002] # NEWA LETTER NNA
+1141F ; [.2FF0.0020.0002] # NEWA LETTER TA
+11420 ; [.2FF1.0020.0002] # NEWA LETTER THA
+11421 ; [.2FF2.0020.0002] # NEWA LETTER DA
+11422 ; [.2FF3.0020.0002] # NEWA LETTER DHA
+11423 ; [.2FF4.0020.0002] # NEWA LETTER NA
+11424 ; [.2FF5.0020.0002] # NEWA LETTER NHA
+11425 ; [.2FF6.0020.0002] # NEWA LETTER PA
+11426 ; [.2FF7.0020.0002] # NEWA LETTER PHA
+11427 ; [.2FF8.0020.0002] # NEWA LETTER BA
+11428 ; [.2FF9.0020.0002] # NEWA LETTER BHA
+11429 ; [.2FFA.0020.0002] # NEWA LETTER MA
+1142A ; [.2FFB.0020.0002] # NEWA LETTER MHA
+1142B ; [.2FFC.0020.0002] # NEWA LETTER YA
+1142C ; [.2FFD.0020.0002] # NEWA LETTER RA
+1142D ; [.2FFE.0020.0002] # NEWA LETTER RHA
+1142E ; [.2FFF.0020.0002] # NEWA LETTER LA
+1142F ; [.3000.0020.0002] # NEWA LETTER LHA
+11430 ; [.3001.0020.0002] # NEWA LETTER WA
+11431 ; [.3002.0020.0002] # NEWA LETTER SHA
+11432 ; [.3003.0020.0002] # NEWA LETTER SSA
+11433 ; [.3004.0020.0002] # NEWA LETTER SA
+11434 ; [.3005.0020.0002] # NEWA LETTER HA
+11447 ; [.3006.0020.0002] # NEWA SIGN AVAGRAHA
+11460 ; [.3007.0020.0002] # NEWA SIGN JIHVAMULIYA
+11461 ; [.3008.0020.0002] # NEWA SIGN UPADHMANIYA
+11448 ; [.3009.0020.0002] # NEWA SIGN FINAL ANUSVARA
+1145F ; [.300A.0020.0002] # NEWA LETTER VEDIC ANUSVARA
+11435 ; [.300B.0020.0002] # NEWA VOWEL SIGN AA
+11436 ; [.300C.0020.0002] # NEWA VOWEL SIGN I
+11437 ; [.300D.0020.0002] # NEWA VOWEL SIGN II
+11438 ; [.300E.0020.0002] # NEWA VOWEL SIGN U
+11439 ; [.300F.0020.0002] # NEWA VOWEL SIGN UU
+1143A ; [.3010.0020.0002] # NEWA VOWEL SIGN VOCALIC R
+1143B ; [.3011.0020.0002] # NEWA VOWEL SIGN VOCALIC RR
+1143C ; [.3012.0020.0002] # NEWA VOWEL SIGN VOCALIC L
+1143D ; [.3013.0020.0002] # NEWA VOWEL SIGN VOCALIC LL
+1143E ; [.3014.0020.0002] # NEWA VOWEL SIGN E
+1143F ; [.3015.0020.0002] # NEWA VOWEL SIGN AI
+11440 ; [.3016.0020.0002] # NEWA VOWEL SIGN O
+11441 ; [.3017.0020.0002] # NEWA VOWEL SIGN AU
+11442 ; [.3018.0020.0002] # NEWA SIGN VIRAMA
+114C7 ; [.3019.0020.0002] # TIRHUTA OM
+11480 ; [.301A.0020.0002] # TIRHUTA ANJI
+11481 ; [.301B.0020.0002] # TIRHUTA LETTER A
+11482 ; [.301C.0020.0002] # TIRHUTA LETTER AA
+11483 ; [.301D.0020.0002] # TIRHUTA LETTER I
+11484 ; [.301E.0020.0002] # TIRHUTA LETTER II
+11485 ; [.301F.0020.0002] # TIRHUTA LETTER U
+11486 ; [.3020.0020.0002] # TIRHUTA LETTER UU
+11487 ; [.3021.0020.0002] # TIRHUTA LETTER VOCALIC R
+11488 ; [.3022.0020.0002] # TIRHUTA LETTER VOCALIC RR
+11489 ; [.3023.0020.0002] # TIRHUTA LETTER VOCALIC L
+1148A ; [.3024.0020.0002] # TIRHUTA LETTER VOCALIC LL
+1148B ; [.3025.0020.0002] # TIRHUTA LETTER E
+1148C ; [.3026.0020.0002] # TIRHUTA LETTER AI
+1148D ; [.3027.0020.0002] # TIRHUTA LETTER O
+1148E ; [.3028.0020.0002] # TIRHUTA LETTER AU
+1148F ; [.3029.0020.0002] # TIRHUTA LETTER KA
+11490 ; [.302A.0020.0002] # TIRHUTA LETTER KHA
+11491 ; [.302B.0020.0002] # TIRHUTA LETTER GA
+11492 ; [.302C.0020.0002] # TIRHUTA LETTER GHA
+11493 ; [.302D.0020.0002] # TIRHUTA LETTER NGA
+11494 ; [.302E.0020.0002] # TIRHUTA LETTER CA
+11495 ; [.302F.0020.0002] # TIRHUTA LETTER CHA
+11496 ; [.3030.0020.0002] # TIRHUTA LETTER JA
+11497 ; [.3031.0020.0002] # TIRHUTA LETTER JHA
+11498 ; [.3032.0020.0002] # TIRHUTA LETTER NYA
+11499 ; [.3033.0020.0002] # TIRHUTA LETTER TTA
+1149A ; [.3034.0020.0002] # TIRHUTA LETTER TTHA
+1149B ; [.3035.0020.0002] # TIRHUTA LETTER DDA
+1149C ; [.3036.0020.0002] # TIRHUTA LETTER DDHA
+1149D ; [.3037.0020.0002] # TIRHUTA LETTER NNA
+1149E ; [.3038.0020.0002] # TIRHUTA LETTER TA
+1149F ; [.3039.0020.0002] # TIRHUTA LETTER THA
+114A0 ; [.303A.0020.0002] # TIRHUTA LETTER DA
+114A1 ; [.303B.0020.0002] # TIRHUTA LETTER DHA
+114A2 ; [.303C.0020.0002] # TIRHUTA LETTER NA
+114A3 ; [.303D.0020.0002] # TIRHUTA LETTER PA
+114A4 ; [.303E.0020.0002] # TIRHUTA LETTER PHA
+114A5 ; [.303F.0020.0002] # TIRHUTA LETTER BA
+114A6 ; [.3040.0020.0002] # TIRHUTA LETTER BHA
+114A7 ; [.3041.0020.0002] # TIRHUTA LETTER MA
+114A8 ; [.3042.0020.0002] # TIRHUTA LETTER YA
+114A9 ; [.3043.0020.0002] # TIRHUTA LETTER RA
+114AA ; [.3044.0020.0002] # TIRHUTA LETTER LA
+114AB ; [.3045.0020.0002] # TIRHUTA LETTER VA
+114AC ; [.3046.0020.0002] # TIRHUTA LETTER SHA
+114AD ; [.3047.0020.0002] # TIRHUTA LETTER SSA
+114AE ; [.3048.0020.0002] # TIRHUTA LETTER SA
+114AF ; [.3049.0020.0002] # TIRHUTA LETTER HA
+114C4 ; [.304A.0020.0002] # TIRHUTA SIGN AVAGRAHA
+114C5 ; [.304B.0020.0002] # TIRHUTA GVANG
+114B0 ; [.304C.0020.0002] # TIRHUTA VOWEL SIGN AA
+114B1 ; [.304D.0020.0002] # TIRHUTA VOWEL SIGN I
+114B2 ; [.304E.0020.0002] # TIRHUTA VOWEL SIGN II
+114B3 ; [.304F.0020.0002] # TIRHUTA VOWEL SIGN U
+114B4 ; [.3050.0020.0002] # TIRHUTA VOWEL SIGN UU
+114B5 ; [.3051.0020.0002] # TIRHUTA VOWEL SIGN VOCALIC R
+114B6 ; [.3052.0020.0002] # TIRHUTA VOWEL SIGN VOCALIC RR
+114B7 ; [.3053.0020.0002] # TIRHUTA VOWEL SIGN VOCALIC L
+114B8 ; [.3054.0020.0002] # TIRHUTA VOWEL SIGN VOCALIC LL
+114B9 ; [.3055.0020.0002] # TIRHUTA VOWEL SIGN E
+114BA ; [.3056.0020.0002] # TIRHUTA VOWEL SIGN SHORT E
+114BB ; [.3057.0020.0002] # TIRHUTA VOWEL SIGN AI
+114B9 114BA ; [.3057.0020.0002] # TIRHUTA VOWEL SIGN AI
+114BC ; [.3058.0020.0002] # TIRHUTA VOWEL SIGN O
+114B9 114B0 ; [.3058.0020.0002] # TIRHUTA VOWEL SIGN O
+114BD ; [.3059.0020.0002] # TIRHUTA VOWEL SIGN SHORT O
+114BE ; [.305A.0020.0002] # TIRHUTA VOWEL SIGN AU
+114B9 114BD ; [.305A.0020.0002] # TIRHUTA VOWEL SIGN AU
+114C2 ; [.305B.0020.0002] # TIRHUTA SIGN VIRAMA
+11580 ; [.305C.0020.0002] # SIDDHAM LETTER A
+11581 ; [.305D.0020.0002] # SIDDHAM LETTER AA
+11582 ; [.305E.0020.0002] # SIDDHAM LETTER I
+115D8 ; [.305E.0020.0004][.0000.0118.0004] # SIDDHAM LETTER THREE-CIRCLE ALTERNATE I
+115D9 ; [.305E.0020.0004][.0000.0119.0004] # SIDDHAM LETTER TWO-CIRCLE ALTERNATE I
+11583 ; [.305F.0020.0002] # SIDDHAM LETTER II
+115DA ; [.305F.0020.0004][.0000.0118.0004] # SIDDHAM LETTER TWO-CIRCLE ALTERNATE II
+11584 ; [.3060.0020.0002] # SIDDHAM LETTER U
+115DB ; [.3060.0020.0004][.0000.0118.0004] # SIDDHAM LETTER ALTERNATE U
+11585 ; [.3061.0020.0002] # SIDDHAM LETTER UU
+11586 ; [.3062.0020.0002] # SIDDHAM LETTER VOCALIC R
+11587 ; [.3063.0020.0002] # SIDDHAM LETTER VOCALIC RR
+11588 ; [.3064.0020.0002] # SIDDHAM LETTER VOCALIC L
+11589 ; [.3065.0020.0002] # SIDDHAM LETTER VOCALIC LL
+1158A ; [.3066.0020.0002] # SIDDHAM LETTER E
+1158B ; [.3067.0020.0002] # SIDDHAM LETTER AI
+1158C ; [.3068.0020.0002] # SIDDHAM LETTER O
+1158D ; [.3069.0020.0002] # SIDDHAM LETTER AU
+1158E ; [.306A.0020.0002] # SIDDHAM LETTER KA
+1158F ; [.306B.0020.0002] # SIDDHAM LETTER KHA
+11590 ; [.306C.0020.0002] # SIDDHAM LETTER GA
+11591 ; [.306D.0020.0002] # SIDDHAM LETTER GHA
+11592 ; [.306E.0020.0002] # SIDDHAM LETTER NGA
+11593 ; [.306F.0020.0002] # SIDDHAM LETTER CA
+11594 ; [.3070.0020.0002] # SIDDHAM LETTER CHA
+11595 ; [.3071.0020.0002] # SIDDHAM LETTER JA
+11596 ; [.3072.0020.0002] # SIDDHAM LETTER JHA
+11597 ; [.3073.0020.0002] # SIDDHAM LETTER NYA
+11598 ; [.3074.0020.0002] # SIDDHAM LETTER TTA
+11599 ; [.3075.0020.0002] # SIDDHAM LETTER TTHA
+1159A ; [.3076.0020.0002] # SIDDHAM LETTER DDA
+1159B ; [.3077.0020.0002] # SIDDHAM LETTER DDHA
+1159C ; [.3078.0020.0002] # SIDDHAM LETTER NNA
+1159D ; [.3079.0020.0002] # SIDDHAM LETTER TA
+1159E ; [.307A.0020.0002] # SIDDHAM LETTER THA
+1159F ; [.307B.0020.0002] # SIDDHAM LETTER DA
+115A0 ; [.307C.0020.0002] # SIDDHAM LETTER DHA
+115A1 ; [.307D.0020.0002] # SIDDHAM LETTER NA
+115A2 ; [.307E.0020.0002] # SIDDHAM LETTER PA
+115A3 ; [.307F.0020.0002] # SIDDHAM LETTER PHA
+115A4 ; [.3080.0020.0002] # SIDDHAM LETTER BA
+115A5 ; [.3081.0020.0002] # SIDDHAM LETTER BHA
+115A6 ; [.3082.0020.0002] # SIDDHAM LETTER MA
+115A7 ; [.3083.0020.0002] # SIDDHAM LETTER YA
+115A8 ; [.3084.0020.0002] # SIDDHAM LETTER RA
+115A9 ; [.3085.0020.0002] # SIDDHAM LETTER LA
+115AA ; [.3086.0020.0002] # SIDDHAM LETTER VA
+115AB ; [.3087.0020.0002] # SIDDHAM LETTER SHA
+115AC ; [.3088.0020.0002] # SIDDHAM LETTER SSA
+115AD ; [.3089.0020.0002] # SIDDHAM LETTER SA
+115AE ; [.308A.0020.0002] # SIDDHAM LETTER HA
+115AF ; [.308B.0020.0002] # SIDDHAM VOWEL SIGN AA
+115B0 ; [.308C.0020.0002] # SIDDHAM VOWEL SIGN I
+115B1 ; [.308D.0020.0002] # SIDDHAM VOWEL SIGN II
+115B2 ; [.308E.0020.0002] # SIDDHAM VOWEL SIGN U
+115DC ; [.308E.0020.0004][.0000.0118.0004] # SIDDHAM VOWEL SIGN ALTERNATE U
+115B3 ; [.308F.0020.0002] # SIDDHAM VOWEL SIGN UU
+115DD ; [.308F.0020.0004][.0000.0118.0004] # SIDDHAM VOWEL SIGN ALTERNATE UU
+115B4 ; [.3090.0020.0002] # SIDDHAM VOWEL SIGN VOCALIC R
+115B5 ; [.3091.0020.0002] # SIDDHAM VOWEL SIGN VOCALIC RR
+115B8 ; [.3092.0020.0002] # SIDDHAM VOWEL SIGN E
+115B9 ; [.3093.0020.0002] # SIDDHAM VOWEL SIGN AI
+115BA ; [.3094.0020.0002] # SIDDHAM VOWEL SIGN O
+115B8 115AF ; [.3094.0020.0002] # SIDDHAM VOWEL SIGN O
+115BB ; [.3095.0020.0002] # SIDDHAM VOWEL SIGN AU
+115B9 115AF ; [.3095.0020.0002] # SIDDHAM VOWEL SIGN AU
+115BF ; [.3096.0020.0002] # SIDDHAM SIGN VIRAMA
+11600 ; [.3097.0020.0002] # MODI LETTER A
+11601 ; [.3098.0020.0002] # MODI LETTER AA
+11602 ; [.3099.0020.0002] # MODI LETTER I
+11603 ; [.309A.0020.0002] # MODI LETTER II
+11604 ; [.309B.0020.0002] # MODI LETTER U
+11605 ; [.309C.0020.0002] # MODI LETTER UU
+11606 ; [.309D.0020.0002] # MODI LETTER VOCALIC R
+11607 ; [.309E.0020.0002] # MODI LETTER VOCALIC RR
+11608 ; [.309F.0020.0002] # MODI LETTER VOCALIC L
+11609 ; [.30A0.0020.0002] # MODI LETTER VOCALIC LL
+1160A ; [.30A1.0020.0002] # MODI LETTER E
+1160B ; [.30A2.0020.0002] # MODI LETTER AI
+1160C ; [.30A3.0020.0002] # MODI LETTER O
+1160D ; [.30A4.0020.0002] # MODI LETTER AU
+1160E ; [.30A5.0020.0002] # MODI LETTER KA
+1160F ; [.30A6.0020.0002] # MODI LETTER KHA
+11610 ; [.30A7.0020.0002] # MODI LETTER GA
+11611 ; [.30A8.0020.0002] # MODI LETTER GHA
+11612 ; [.30A9.0020.0002] # MODI LETTER NGA
+11613 ; [.30AA.0020.0002] # MODI LETTER CA
+11614 ; [.30AB.0020.0002] # MODI LETTER CHA
+11615 ; [.30AC.0020.0002] # MODI LETTER JA
+11616 ; [.30AD.0020.0002] # MODI LETTER JHA
+11617 ; [.30AE.0020.0002] # MODI LETTER NYA
+11618 ; [.30AF.0020.0002] # MODI LETTER TTA
+11619 ; [.30B0.0020.0002] # MODI LETTER TTHA
+1161A ; [.30B1.0020.0002] # MODI LETTER DDA
+1161B ; [.30B2.0020.0002] # MODI LETTER DDHA
+1161C ; [.30B3.0020.0002] # MODI LETTER NNA
+1161D ; [.30B4.0020.0002] # MODI LETTER TA
+1161E ; [.30B5.0020.0002] # MODI LETTER THA
+1161F ; [.30B6.0020.0002] # MODI LETTER DA
+11620 ; [.30B7.0020.0002] # MODI LETTER DHA
+11621 ; [.30B8.0020.0002] # MODI LETTER NA
+11622 ; [.30B9.0020.0002] # MODI LETTER PA
+11623 ; [.30BA.0020.0002] # MODI LETTER PHA
+11624 ; [.30BB.0020.0002] # MODI LETTER BA
+11625 ; [.30BC.0020.0002] # MODI LETTER BHA
+11626 ; [.30BD.0020.0002] # MODI LETTER MA
+11627 ; [.30BE.0020.0002] # MODI LETTER YA
+11628 ; [.30BF.0020.0002] # MODI LETTER RA
+11629 ; [.30C0.0020.0002] # MODI LETTER LA
+1162A ; [.30C1.0020.0002] # MODI LETTER VA
+1162B ; [.30C2.0020.0002] # MODI LETTER SHA
+1162C ; [.30C3.0020.0002] # MODI LETTER SSA
+1162D ; [.30C4.0020.0002] # MODI LETTER SA
+1162E ; [.30C5.0020.0002] # MODI LETTER HA
+1162F ; [.30C6.0020.0002] # MODI LETTER LLA
+11630 ; [.30C7.0020.0002] # MODI VOWEL SIGN AA
+11631 ; [.30C8.0020.0002] # MODI VOWEL SIGN I
+11632 ; [.30C9.0020.0002] # MODI VOWEL SIGN II
+11633 ; [.30CA.0020.0002] # MODI VOWEL SIGN U
+11634 ; [.30CB.0020.0002] # MODI VOWEL SIGN UU
+11635 ; [.30CC.0020.0002] # MODI VOWEL SIGN VOCALIC R
+11636 ; [.30CD.0020.0002] # MODI VOWEL SIGN VOCALIC RR
+11637 ; [.30CE.0020.0002] # MODI VOWEL SIGN VOCALIC L
+11638 ; [.30CF.0020.0002] # MODI VOWEL SIGN VOCALIC LL
+11639 ; [.30D0.0020.0002] # MODI VOWEL SIGN E
+1163A ; [.30D1.0020.0002] # MODI VOWEL SIGN AI
+1163B ; [.30D2.0020.0002] # MODI VOWEL SIGN O
+1163C ; [.30D3.0020.0002] # MODI VOWEL SIGN AU
+1163F ; [.30D4.0020.0002] # MODI SIGN VIRAMA
+11644 ; [.30D5.0020.0002] # MODI SIGN HUVA
+11680 ; [.30D6.0020.0002] # TAKRI LETTER A
+11681 ; [.30D7.0020.0002] # TAKRI LETTER AA
+11682 ; [.30D8.0020.0002] # TAKRI LETTER I
+11683 ; [.30D9.0020.0002] # TAKRI LETTER II
+11684 ; [.30DA.0020.0002] # TAKRI LETTER U
+11685 ; [.30DB.0020.0002] # TAKRI LETTER UU
+11686 ; [.30DC.0020.0002] # TAKRI LETTER E
+11687 ; [.30DD.0020.0002] # TAKRI LETTER AI
+11688 ; [.30DE.0020.0002] # TAKRI LETTER O
+11689 ; [.30DF.0020.0002] # TAKRI LETTER AU
+116A8 ; [.30E0.0020.0002] # TAKRI LETTER SA
+116A7 ; [.30E1.0020.0002] # TAKRI LETTER SHA
+116A9 ; [.30E2.0020.0002] # TAKRI LETTER HA
+1168A ; [.30E3.0020.0002] # TAKRI LETTER KA
+1168B ; [.30E4.0020.0002] # TAKRI LETTER KHA
+116B8 ; [.30E5.0020.0002] # TAKRI LETTER ARCHAIC KHA
+1168C ; [.30E6.0020.0002] # TAKRI LETTER GA
+1168D ; [.30E7.0020.0002] # TAKRI LETTER GHA
+1168E ; [.30E8.0020.0002] # TAKRI LETTER NGA
+1168F ; [.30E9.0020.0002] # TAKRI LETTER CA
+11690 ; [.30EA.0020.0002] # TAKRI LETTER CHA
+11691 ; [.30EB.0020.0002] # TAKRI LETTER JA
+11692 ; [.30EC.0020.0002] # TAKRI LETTER JHA
+11693 ; [.30ED.0020.0002] # TAKRI LETTER NYA
+11694 ; [.30EE.0020.0002] # TAKRI LETTER TTA
+11695 ; [.30EF.0020.0002] # TAKRI LETTER TTHA
+11696 ; [.30F0.0020.0002] # TAKRI LETTER DDA
+11697 ; [.30F1.0020.0002] # TAKRI LETTER DDHA
+11698 ; [.30F2.0020.0002] # TAKRI LETTER NNA
+11699 ; [.30F3.0020.0002] # TAKRI LETTER TA
+1169A ; [.30F4.0020.0002] # TAKRI LETTER THA
+1169B ; [.30F5.0020.0002] # TAKRI LETTER DA
+1169C ; [.30F6.0020.0002] # TAKRI LETTER DHA
+1169D ; [.30F7.0020.0002] # TAKRI LETTER NA
+1169E ; [.30F8.0020.0002] # TAKRI LETTER PA
+1169F ; [.30F9.0020.0002] # TAKRI LETTER PHA
+116A0 ; [.30FA.0020.0002] # TAKRI LETTER BA
+116A1 ; [.30FB.0020.0002] # TAKRI LETTER BHA
+116A2 ; [.30FC.0020.0002] # TAKRI LETTER MA
+116A3 ; [.30FD.0020.0002] # TAKRI LETTER YA
+116A4 ; [.30FE.0020.0002] # TAKRI LETTER RA
+116A5 ; [.30FF.0020.0002] # TAKRI LETTER LA
+116A6 ; [.3100.0020.0002] # TAKRI LETTER VA
+116AA ; [.3101.0020.0002] # TAKRI LETTER RRA
+116AD ; [.3102.0020.0002] # TAKRI VOWEL SIGN AA
+116AE ; [.3103.0020.0002] # TAKRI VOWEL SIGN I
+116AF ; [.3104.0020.0002] # TAKRI VOWEL SIGN II
+116B0 ; [.3105.0020.0002] # TAKRI VOWEL SIGN U
+116B1 ; [.3106.0020.0002] # TAKRI VOWEL SIGN UU
+116B2 ; [.3107.0020.0002] # TAKRI VOWEL SIGN E
+116B3 ; [.3108.0020.0002] # TAKRI VOWEL SIGN AI
+116B4 ; [.3109.0020.0002] # TAKRI VOWEL SIGN O
+116B5 ; [.310A.0020.0002] # TAKRI VOWEL SIGN AU
+116B6 ; [.310B.0020.0002] # TAKRI SIGN VIRAMA
+11900 ; [.310C.0020.0002] # DIVES AKURU LETTER A
+11901 ; [.310D.0020.0002] # DIVES AKURU LETTER AA
+11902 ; [.310E.0020.0002] # DIVES AKURU LETTER I
+11903 ; [.310F.0020.0002] # DIVES AKURU LETTER II
+11904 ; [.3110.0020.0002] # DIVES AKURU LETTER U
+11905 ; [.3111.0020.0002] # DIVES AKURU LETTER UU
+11906 ; [.3112.0020.0002] # DIVES AKURU LETTER E
+11909 ; [.3113.0020.0002] # DIVES AKURU LETTER O
+1190C ; [.3114.0020.0002] # DIVES AKURU LETTER KA
+1190D ; [.3115.0020.0002] # DIVES AKURU LETTER KHA
+1190E ; [.3116.0020.0002] # DIVES AKURU LETTER GA
+1190F ; [.3117.0020.0002] # DIVES AKURU LETTER GHA
+11910 ; [.3118.0020.0002] # DIVES AKURU LETTER NGA
+1193F ; [.3119.0020.0002] # DIVES AKURU PREFIXED NASAL SIGN
+11911 ; [.311A.0020.0002] # DIVES AKURU LETTER CA
+11912 ; [.311B.0020.0002] # DIVES AKURU LETTER CHA
+11913 ; [.311C.0020.0002] # DIVES AKURU LETTER JA
+11915 ; [.311D.0020.0002] # DIVES AKURU LETTER NYA
+11916 ; [.311E.0020.0002] # DIVES AKURU LETTER TTA
+11918 ; [.311F.0020.0002] # DIVES AKURU LETTER DDA
+11919 ; [.3120.0020.0002] # DIVES AKURU LETTER DDHA
+1191A ; [.3121.0020.0002] # DIVES AKURU LETTER NNA
+1191B ; [.3122.0020.0002] # DIVES AKURU LETTER TA
+1191C ; [.3123.0020.0002] # DIVES AKURU LETTER THA
+1191D ; [.3124.0020.0002] # DIVES AKURU LETTER DA
+1191E ; [.3125.0020.0002] # DIVES AKURU LETTER DHA
+1191F ; [.3126.0020.0002] # DIVES AKURU LETTER NA
+11920 ; [.3127.0020.0002] # DIVES AKURU LETTER PA
+11921 ; [.3128.0020.0002] # DIVES AKURU LETTER PHA
+11922 ; [.3129.0020.0002] # DIVES AKURU LETTER BA
+11923 ; [.312A.0020.0002] # DIVES AKURU LETTER BHA
+11924 ; [.312B.0020.0002] # DIVES AKURU LETTER MA
+11925 ; [.312C.0020.0002] # DIVES AKURU LETTER YA
+11940 ; [.312D.0020.0002] # DIVES AKURU MEDIAL YA
+11926 ; [.312E.0020.0002] # DIVES AKURU LETTER YYA
+11941 ; [.312F.0020.0002] # DIVES AKURU INITIAL RA
+11927 ; [.3130.0020.0002] # DIVES AKURU LETTER RA
+11942 ; [.3131.0020.0002] # DIVES AKURU MEDIAL RA
+11928 ; [.3132.0020.0002] # DIVES AKURU LETTER LA
+11929 ; [.3133.0020.0002] # DIVES AKURU LETTER VA
+1192A ; [.3134.0020.0002] # DIVES AKURU LETTER SHA
+1192B ; [.3135.0020.0002] # DIVES AKURU LETTER SSA
+1192C ; [.3136.0020.0002] # DIVES AKURU LETTER SA
+1192D ; [.3137.0020.0002] # DIVES AKURU LETTER HA
+1192E ; [.3138.0020.0002] # DIVES AKURU LETTER LLA
+1192F ; [.3139.0020.0002] # DIVES AKURU LETTER ZA
+11930 ; [.313A.0020.0002] # DIVES AKURU VOWEL SIGN AA
+11931 ; [.313B.0020.0002] # DIVES AKURU VOWEL SIGN I
+11932 ; [.313C.0020.0002] # DIVES AKURU VOWEL SIGN II
+11933 ; [.313D.0020.0002] # DIVES AKURU VOWEL SIGN U
+11934 ; [.313E.0020.0002] # DIVES AKURU VOWEL SIGN UU
+11935 ; [.313F.0020.0002] # DIVES AKURU VOWEL SIGN E
+11937 ; [.3140.0020.0002] # DIVES AKURU VOWEL SIGN AI
+11938 ; [.3141.0020.0002] # DIVES AKURU VOWEL SIGN O
+11935 11930 ; [.3141.0020.0002] # DIVES AKURU VOWEL SIGN O
+1193D ; [.3142.0020.0002] # DIVES AKURU SIGN HALANTA
+1193E ; [.3143.0020.0002] # DIVES AKURU VIRAMA
+119A0 ; [.3144.0020.0002] # NANDINAGARI LETTER A
+119A1 ; [.3145.0020.0002] # NANDINAGARI LETTER AA
+119A2 ; [.3146.0020.0002] # NANDINAGARI LETTER I
+119A3 ; [.3147.0020.0002] # NANDINAGARI LETTER II
+119A4 ; [.3148.0020.0002] # NANDINAGARI LETTER U
+119A5 ; [.3149.0020.0002] # NANDINAGARI LETTER UU
+119A6 ; [.314A.0020.0002] # NANDINAGARI LETTER VOCALIC R
+119A7 ; [.314B.0020.0002] # NANDINAGARI LETTER VOCALIC RR
+119AA ; [.314C.0020.0002] # NANDINAGARI LETTER E
+119AB ; [.314D.0020.0002] # NANDINAGARI LETTER AI
+119AC ; [.314E.0020.0002] # NANDINAGARI LETTER O
+119AD ; [.314F.0020.0002] # NANDINAGARI LETTER AU
+119AE ; [.3150.0020.0002] # NANDINAGARI LETTER KA
+119AF ; [.3151.0020.0002] # NANDINAGARI LETTER KHA
+119B0 ; [.3152.0020.0002] # NANDINAGARI LETTER GA
+119B1 ; [.3153.0020.0002] # NANDINAGARI LETTER GHA
+119B2 ; [.3154.0020.0002] # NANDINAGARI LETTER NGA
+119B3 ; [.3155.0020.0002] # NANDINAGARI LETTER CA
+119B4 ; [.3156.0020.0002] # NANDINAGARI LETTER CHA
+119B5 ; [.3157.0020.0002] # NANDINAGARI LETTER JA
+119B6 ; [.3158.0020.0002] # NANDINAGARI LETTER JHA
+119B7 ; [.3159.0020.0002] # NANDINAGARI LETTER NYA
+119B8 ; [.315A.0020.0002] # NANDINAGARI LETTER TTA
+119B9 ; [.315B.0020.0002] # NANDINAGARI LETTER TTHA
+119BA ; [.315C.0020.0002] # NANDINAGARI LETTER DDA
+119BB ; [.315D.0020.0002] # NANDINAGARI LETTER DDHA
+119BC ; [.315E.0020.0002] # NANDINAGARI LETTER NNA
+119BD ; [.315F.0020.0002] # NANDINAGARI LETTER TA
+119BE ; [.3160.0020.0002] # NANDINAGARI LETTER THA
+119BF ; [.3161.0020.0002] # NANDINAGARI LETTER DA
+119C0 ; [.3162.0020.0002] # NANDINAGARI LETTER DHA
+119C1 ; [.3163.0020.0002] # NANDINAGARI LETTER NA
+119C2 ; [.3164.0020.0002] # NANDINAGARI LETTER PA
+119C3 ; [.3165.0020.0002] # NANDINAGARI LETTER PHA
+119C4 ; [.3166.0020.0002] # NANDINAGARI LETTER BA
+119C5 ; [.3167.0020.0002] # NANDINAGARI LETTER BHA
+119C6 ; [.3168.0020.0002] # NANDINAGARI LETTER MA
+119C7 ; [.3169.0020.0002] # NANDINAGARI LETTER YA
+119C8 ; [.316A.0020.0002] # NANDINAGARI LETTER RA
+119C9 ; [.316B.0020.0002] # NANDINAGARI LETTER LA
+119CA ; [.316C.0020.0002] # NANDINAGARI LETTER VA
+119CB ; [.316D.0020.0002] # NANDINAGARI LETTER SHA
+119CC ; [.316E.0020.0002] # NANDINAGARI LETTER SSA
+119CD ; [.316F.0020.0002] # NANDINAGARI LETTER SA
+119CE ; [.3170.0020.0002] # NANDINAGARI LETTER HA
+119CF ; [.3171.0020.0002] # NANDINAGARI LETTER LLA
+119D0 ; [.3172.0020.0002] # NANDINAGARI LETTER RRA
+119E1 ; [.3173.0020.0002] # NANDINAGARI SIGN AVAGRAHA
+119E3 ; [.3174.0020.0002] # NANDINAGARI HEADSTROKE
+119D1 ; [.3175.0020.0002] # NANDINAGARI VOWEL SIGN AA
+119D2 ; [.3176.0020.0002] # NANDINAGARI VOWEL SIGN I
+119D3 ; [.3177.0020.0002] # NANDINAGARI VOWEL SIGN II
+119D4 ; [.3178.0020.0002] # NANDINAGARI VOWEL SIGN U
+119D5 ; [.3179.0020.0002] # NANDINAGARI VOWEL SIGN UU
+119D6 ; [.317A.0020.0002] # NANDINAGARI VOWEL SIGN VOCALIC R
+119D7 ; [.317B.0020.0002] # NANDINAGARI VOWEL SIGN VOCALIC RR
+119DA ; [.317C.0020.0002] # NANDINAGARI VOWEL SIGN E
+119E4 ; [.317D.0020.0002] # NANDINAGARI VOWEL SIGN PRISHTHAMATRA E
+119DB ; [.317E.0020.0002] # NANDINAGARI VOWEL SIGN AI
+119DC ; [.317F.0020.0002] # NANDINAGARI VOWEL SIGN O
+119DD ; [.3180.0020.0002] # NANDINAGARI VOWEL SIGN AU
+119E0 ; [.3181.0020.0002] # NANDINAGARI SIGN VIRAMA
+11800 ; [.3182.0020.0002] # DOGRA LETTER A
+11801 ; [.3183.0020.0002] # DOGRA LETTER AA
+11802 ; [.3184.0020.0002] # DOGRA LETTER I
+11803 ; [.3185.0020.0002] # DOGRA LETTER II
+11804 ; [.3186.0020.0002] # DOGRA LETTER U
+11805 ; [.3187.0020.0002] # DOGRA LETTER UU
+11806 ; [.3188.0020.0002] # DOGRA LETTER E
+11807 ; [.3189.0020.0002] # DOGRA LETTER AI
+11808 ; [.318A.0020.0002] # DOGRA LETTER O
+11809 ; [.318B.0020.0002] # DOGRA LETTER AU
+1180A ; [.318C.0020.0002] # DOGRA LETTER KA
+1180B ; [.318D.0020.0002] # DOGRA LETTER KHA
+1180C ; [.318E.0020.0002] # DOGRA LETTER GA
+1180D ; [.318F.0020.0002] # DOGRA LETTER GHA
+1180E ; [.3190.0020.0002] # DOGRA LETTER NGA
+1180F ; [.3191.0020.0002] # DOGRA LETTER CA
+11810 ; [.3192.0020.0002] # DOGRA LETTER CHA
+11811 ; [.3193.0020.0002] # DOGRA LETTER JA
+11812 ; [.3194.0020.0002] # DOGRA LETTER JHA
+11813 ; [.3195.0020.0002] # DOGRA LETTER NYA
+11814 ; [.3196.0020.0002] # DOGRA LETTER TTA
+11815 ; [.3197.0020.0002] # DOGRA LETTER TTHA
+11816 ; [.3198.0020.0002] # DOGRA LETTER DDA
+11817 ; [.3199.0020.0002] # DOGRA LETTER DDHA
+11818 ; [.319A.0020.0002] # DOGRA LETTER NNA
+11819 ; [.319B.0020.0002] # DOGRA LETTER TA
+1181A ; [.319C.0020.0002] # DOGRA LETTER THA
+1181B ; [.319D.0020.0002] # DOGRA LETTER DA
+1181C ; [.319E.0020.0002] # DOGRA LETTER DHA
+1181D ; [.319F.0020.0002] # DOGRA LETTER NA
+1181E ; [.31A0.0020.0002] # DOGRA LETTER PA
+1181F ; [.31A1.0020.0002] # DOGRA LETTER PHA
+11820 ; [.31A2.0020.0002] # DOGRA LETTER BA
+11821 ; [.31A3.0020.0002] # DOGRA LETTER BHA
+11822 ; [.31A4.0020.0002] # DOGRA LETTER MA
+11823 ; [.31A5.0020.0002] # DOGRA LETTER YA
+11824 ; [.31A6.0020.0002] # DOGRA LETTER RA
+11825 ; [.31A7.0020.0002] # DOGRA LETTER LA
+11826 ; [.31A8.0020.0002] # DOGRA LETTER VA
+11827 ; [.31A9.0020.0002] # DOGRA LETTER SHA
+11828 ; [.31AA.0020.0002] # DOGRA LETTER SSA
+11829 ; [.31AB.0020.0002] # DOGRA LETTER SA
+1182A ; [.31AC.0020.0002] # DOGRA LETTER HA
+1182B ; [.31AD.0020.0002] # DOGRA LETTER RRA
+1182C ; [.31AE.0020.0002] # DOGRA VOWEL SIGN AA
+1182D ; [.31AF.0020.0002] # DOGRA VOWEL SIGN I
+1182E ; [.31B0.0020.0002] # DOGRA VOWEL SIGN II
+1182F ; [.31B1.0020.0002] # DOGRA VOWEL SIGN U
+11830 ; [.31B2.0020.0002] # DOGRA VOWEL SIGN UU
+11831 ; [.31B3.0020.0002] # DOGRA VOWEL SIGN VOCALIC R
+11832 ; [.31B4.0020.0002] # DOGRA VOWEL SIGN VOCALIC RR
+11833 ; [.31B5.0020.0002] # DOGRA VOWEL SIGN E
+11834 ; [.31B6.0020.0002] # DOGRA VOWEL SIGN AI
+11835 ; [.31B7.0020.0002] # DOGRA VOWEL SIGN O
+11836 ; [.31B8.0020.0002] # DOGRA VOWEL SIGN AU
+11839 ; [.31B9.0020.0002] # DOGRA SIGN VIRAMA
+11700 ; [.31BA.0020.0002] # AHOM LETTER KA
+11701 ; [.31BB.0020.0002] # AHOM LETTER KHA
+11702 ; [.31BC.0020.0002] # AHOM LETTER NGA
+11703 ; [.31BD.0020.0002] # AHOM LETTER NA
+11704 ; [.31BE.0020.0002] # AHOM LETTER TA
+11705 ; [.31BE.0020.0004][.0000.0118.0004] # AHOM LETTER ALTERNATE TA
+11706 ; [.31BF.0020.0002] # AHOM LETTER PA
+11707 ; [.31C0.0020.0002] # AHOM LETTER PHA
+11708 ; [.31C1.0020.0002] # AHOM LETTER BA
+1171A ; [.31C1.0020.0004][.0000.0118.0004] # AHOM LETTER ALTERNATE BA
+11709 ; [.31C2.0020.0002] # AHOM LETTER MA
+1170A ; [.31C3.0020.0002] # AHOM LETTER JA
+1170B ; [.31C4.0020.0002] # AHOM LETTER CHA
+1170C ; [.31C5.0020.0002] # AHOM LETTER THA
+1170D ; [.31C6.0020.0002] # AHOM LETTER RA
+1170E ; [.31C7.0020.0002] # AHOM LETTER LA
+1170F ; [.31C8.0020.0002] # AHOM LETTER SA
+11710 ; [.31C9.0020.0002] # AHOM LETTER NYA
+11711 ; [.31CA.0020.0002] # AHOM LETTER HA
+11712 ; [.31CB.0020.0002] # AHOM LETTER A
+11713 ; [.31CC.0020.0002] # AHOM LETTER DA
+11714 ; [.31CD.0020.0002] # AHOM LETTER DHA
+11715 ; [.31CE.0020.0002] # AHOM LETTER GA
+11716 ; [.31CE.0020.0004][.0000.0118.0004] # AHOM LETTER ALTERNATE GA
+11717 ; [.31CF.0020.0002] # AHOM LETTER GHA
+11718 ; [.31D0.0020.0002] # AHOM LETTER BHA
+11719 ; [.31D1.0020.0002] # AHOM LETTER JHA
+11740 ; [.31D2.0020.0002] # AHOM LETTER CA
+11741 ; [.31D3.0020.0002] # AHOM LETTER TTA
+11742 ; [.31D4.0020.0002] # AHOM LETTER TTHA
+11743 ; [.31D5.0020.0002] # AHOM LETTER DDA
+11744 ; [.31D6.0020.0002] # AHOM LETTER DDHA
+11745 ; [.31D7.0020.0002] # AHOM LETTER NNA
+11746 ; [.31D8.0020.0002] # AHOM LETTER LLA
+11720 ; [.31D9.0020.0002] # AHOM VOWEL SIGN A
+11721 ; [.31DA.0020.0002] # AHOM VOWEL SIGN AA
+11722 ; [.31DB.0020.0002] # AHOM VOWEL SIGN I
+11723 ; [.31DC.0020.0002] # AHOM VOWEL SIGN II
+11724 ; [.31DD.0020.0002] # AHOM VOWEL SIGN U
+11725 ; [.31DE.0020.0002] # AHOM VOWEL SIGN UU
+11726 ; [.31DF.0020.0002] # AHOM VOWEL SIGN E
+11727 ; [.31E0.0020.0002] # AHOM VOWEL SIGN AW
+11728 ; [.31E1.0020.0002] # AHOM VOWEL SIGN O
+11729 ; [.31E2.0020.0002] # AHOM VOWEL SIGN AI
+1172A ; [.31E3.0020.0002] # AHOM VOWEL SIGN AM
+1172B ; [.31E4.0020.0002] # AHOM SIGN KILLER
+1171D ; [.31E5.0020.0002] # AHOM CONSONANT SIGN MEDIAL LA
+1171E ; [.31E6.0020.0002] # AHOM CONSONANT SIGN MEDIAL RA
+1171F ; [.31E7.0020.0002] # AHOM CONSONANT SIGN MEDIAL LIGATING RA
+11D00 ; [.31E8.0020.0002] # MASARAM GONDI LETTER A
+11D01 ; [.31E9.0020.0002] # MASARAM GONDI LETTER AA
+11D02 ; [.31EA.0020.0002] # MASARAM GONDI LETTER I
+11D03 ; [.31EB.0020.0002] # MASARAM GONDI LETTER II
+11D04 ; [.31EC.0020.0002] # MASARAM GONDI LETTER U
+11D05 ; [.31ED.0020.0002] # MASARAM GONDI LETTER UU
+11D06 ; [.31EE.0020.0002] # MASARAM GONDI LETTER E
+11D08 ; [.31EF.0020.0002] # MASARAM GONDI LETTER AI
+11D09 ; [.31F0.0020.0002] # MASARAM GONDI LETTER O
+11D0B ; [.31F1.0020.0002] # MASARAM GONDI LETTER AU
+11D0C ; [.31F2.0020.0002] # MASARAM GONDI LETTER KA
+11D0D ; [.31F3.0020.0002] # MASARAM GONDI LETTER KHA
+11D0E ; [.31F4.0020.0002] # MASARAM GONDI LETTER GA
+11D0F ; [.31F5.0020.0002] # MASARAM GONDI LETTER GHA
+11D10 ; [.31F6.0020.0002] # MASARAM GONDI LETTER NGA
+11D11 ; [.31F7.0020.0002] # MASARAM GONDI LETTER CA
+11D12 ; [.31F8.0020.0002] # MASARAM GONDI LETTER CHA
+11D13 ; [.31F9.0020.0002] # MASARAM GONDI LETTER JA
+11D14 ; [.31FA.0020.0002] # MASARAM GONDI LETTER JHA
+11D15 ; [.31FB.0020.0002] # MASARAM GONDI LETTER NYA
+11D16 ; [.31FC.0020.0002] # MASARAM GONDI LETTER TTA
+11D17 ; [.31FD.0020.0002] # MASARAM GONDI LETTER TTHA
+11D18 ; [.31FE.0020.0002] # MASARAM GONDI LETTER DDA
+11D19 ; [.31FF.0020.0002] # MASARAM GONDI LETTER DDHA
+11D1A ; [.3200.0020.0002] # MASARAM GONDI LETTER NNA
+11D1B ; [.3201.0020.0002] # MASARAM GONDI LETTER TA
+11D1C ; [.3202.0020.0002] # MASARAM GONDI LETTER THA
+11D1D ; [.3203.0020.0002] # MASARAM GONDI LETTER DA
+11D1E ; [.3204.0020.0002] # MASARAM GONDI LETTER DHA
+11D1F ; [.3205.0020.0002] # MASARAM GONDI LETTER NA
+11D20 ; [.3206.0020.0002] # MASARAM GONDI LETTER PA
+11D21 ; [.3207.0020.0002] # MASARAM GONDI LETTER PHA
+11D22 ; [.3208.0020.0002] # MASARAM GONDI LETTER BA
+11D23 ; [.3209.0020.0002] # MASARAM GONDI LETTER BHA
+11D24 ; [.320A.0020.0002] # MASARAM GONDI LETTER MA
+11D25 ; [.320B.0020.0002] # MASARAM GONDI LETTER YA
+11D26 ; [.320C.0020.0002] # MASARAM GONDI LETTER RA
+11D46 ; [.320C.0020.0017] # MASARAM GONDI REPHA
+11D47 ; [.320C.0020.0019] # MASARAM GONDI RA-KARA
+11D27 ; [.320D.0020.0002] # MASARAM GONDI LETTER LA
+11D28 ; [.320E.0020.0002] # MASARAM GONDI LETTER VA
+11D29 ; [.320F.0020.0002] # MASARAM GONDI LETTER SHA
+11D2A ; [.3210.0020.0002] # MASARAM GONDI LETTER SSA
+11D2B ; [.3211.0020.0002] # MASARAM GONDI LETTER SA
+11D2C ; [.3212.0020.0002] # MASARAM GONDI LETTER HA
+11D2D ; [.3213.0020.0002] # MASARAM GONDI LETTER LLA
+11D2E ; [.3214.0020.0002] # MASARAM GONDI LETTER KSSA
+11D2F ; [.3215.0020.0002] # MASARAM GONDI LETTER JNYA
+11D30 ; [.3216.0020.0002] # MASARAM GONDI LETTER TRA
+11D31 ; [.3217.0020.0002] # MASARAM GONDI VOWEL SIGN AA
+11D32 ; [.3218.0020.0002] # MASARAM GONDI VOWEL SIGN I
+11D33 ; [.3219.0020.0002] # MASARAM GONDI VOWEL SIGN II
+11D34 ; [.321A.0020.0002] # MASARAM GONDI VOWEL SIGN U
+11D35 ; [.321B.0020.0002] # MASARAM GONDI VOWEL SIGN UU
+11D36 ; [.321C.0020.0002] # MASARAM GONDI VOWEL SIGN VOCALIC R
+11D3A ; [.321D.0020.0002] # MASARAM GONDI VOWEL SIGN E
+11D3C ; [.321E.0020.0002] # MASARAM GONDI VOWEL SIGN AI
+11D3D ; [.321F.0020.0002] # MASARAM GONDI VOWEL SIGN O
+11D3F ; [.3220.0020.0002] # MASARAM GONDI VOWEL SIGN AU
+11D44 ; [.3221.0020.0002] # MASARAM GONDI SIGN HALANTA
+11D45 ; [.3222.0020.0002] # MASARAM GONDI VIRAMA
+11D98 ; [.3223.0020.0002] # GUNJALA GONDI OM
+11D60 ; [.3224.0020.0002] # GUNJALA GONDI LETTER A
+11D61 ; [.3225.0020.0002] # GUNJALA GONDI LETTER AA
+11D62 ; [.3226.0020.0002] # GUNJALA GONDI LETTER I
+11D63 ; [.3227.0020.0002] # GUNJALA GONDI LETTER II
+11D64 ; [.3228.0020.0002] # GUNJALA GONDI LETTER U
+11D65 ; [.3229.0020.0002] # GUNJALA GONDI LETTER UU
+11D67 ; [.322A.0020.0002] # GUNJALA GONDI LETTER EE
+11D68 ; [.322B.0020.0002] # GUNJALA GONDI LETTER AI
+11D6A ; [.322C.0020.0002] # GUNJALA GONDI LETTER OO
+11D6B ; [.322D.0020.0002] # GUNJALA GONDI LETTER AU
+11D6C ; [.322E.0020.0002] # GUNJALA GONDI LETTER YA
+11D6D ; [.322F.0020.0002] # GUNJALA GONDI LETTER VA
+11D6E ; [.3230.0020.0002] # GUNJALA GONDI LETTER BA
+11D6F ; [.3231.0020.0002] # GUNJALA GONDI LETTER BHA
+11D70 ; [.3232.0020.0002] # GUNJALA GONDI LETTER MA
+11D71 ; [.3233.0020.0002] # GUNJALA GONDI LETTER KA
+11D72 ; [.3234.0020.0002] # GUNJALA GONDI LETTER KHA
+11D73 ; [.3235.0020.0002] # GUNJALA GONDI LETTER TA
+11D74 ; [.3236.0020.0002] # GUNJALA GONDI LETTER THA
+11D75 ; [.3237.0020.0002] # GUNJALA GONDI LETTER LA
+11D76 ; [.3238.0020.0002] # GUNJALA GONDI LETTER GA
+11D77 ; [.3239.0020.0002] # GUNJALA GONDI LETTER GHA
+11D78 ; [.323A.0020.0002] # GUNJALA GONDI LETTER DA
+11D79 ; [.323B.0020.0002] # GUNJALA GONDI LETTER DHA
+11D7A ; [.323C.0020.0002] # GUNJALA GONDI LETTER NA
+11D7B ; [.323D.0020.0002] # GUNJALA GONDI LETTER CA
+11D7C ; [.323E.0020.0002] # GUNJALA GONDI LETTER CHA
+11D7D ; [.323F.0020.0002] # GUNJALA GONDI LETTER TTA
+11D7E ; [.3240.0020.0002] # GUNJALA GONDI LETTER TTHA
+11D7F ; [.3241.0020.0002] # GUNJALA GONDI LETTER LLA
+11D80 ; [.3242.0020.0002] # GUNJALA GONDI LETTER JA
+11D81 ; [.3243.0020.0002] # GUNJALA GONDI LETTER JHA
+11D82 ; [.3244.0020.0002] # GUNJALA GONDI LETTER DDA
+11D83 ; [.3245.0020.0002] # GUNJALA GONDI LETTER DDHA
+11D84 ; [.3246.0020.0002] # GUNJALA GONDI LETTER NGA
+11D85 ; [.3247.0020.0002] # GUNJALA GONDI LETTER PA
+11D86 ; [.3248.0020.0002] # GUNJALA GONDI LETTER PHA
+11D87 ; [.3249.0020.0002] # GUNJALA GONDI LETTER HA
+11D88 ; [.324A.0020.0002] # GUNJALA GONDI LETTER RA
+11D89 ; [.324B.0020.0002] # GUNJALA GONDI LETTER SA
+11D8A ; [.324C.0020.0002] # GUNJALA GONDI VOWEL SIGN AA
+11D8B ; [.324D.0020.0002] # GUNJALA GONDI VOWEL SIGN I
+11D8C ; [.324E.0020.0002] # GUNJALA GONDI VOWEL SIGN II
+11D8D ; [.324F.0020.0002] # GUNJALA GONDI VOWEL SIGN U
+11D8E ; [.3250.0020.0002] # GUNJALA GONDI VOWEL SIGN UU
+11D90 ; [.3251.0020.0002] # GUNJALA GONDI VOWEL SIGN EE
+11D91 ; [.3252.0020.0002] # GUNJALA GONDI VOWEL SIGN AI
+11D93 ; [.3253.0020.0002] # GUNJALA GONDI VOWEL SIGN OO
+11D94 ; [.3254.0020.0002] # GUNJALA GONDI VOWEL SIGN AU
+11D97 ; [.3255.0020.0002] # GUNJALA GONDI VIRAMA
+1B83 ; [.3256.0020.0002] # SUNDANESE LETTER A
+1BBA ; [.3256.0020.0004] # SUNDANESE AVAGRAHA
+1B84 ; [.3257.0020.0002] # SUNDANESE LETTER I
+1B85 ; [.3258.0020.0002] # SUNDANESE LETTER U
+1B86 ; [.3259.0020.0002] # SUNDANESE LETTER AE
+1B87 ; [.325A.0020.0002] # SUNDANESE LETTER O
+1B88 ; [.325B.0020.0002] # SUNDANESE LETTER E
+1B89 ; [.325C.0020.0002] # SUNDANESE LETTER EU
+1B8A ; [.325D.0020.0002] # SUNDANESE LETTER KA
+1BBE ; [.325D.0020.0019] # SUNDANESE LETTER FINAL K
+1BAE ; [.325E.0020.0002] # SUNDANESE LETTER KHA
+1B8B ; [.325F.0020.0002] # SUNDANESE LETTER QA
+1B8C ; [.3260.0020.0002] # SUNDANESE LETTER GA
+1B8D ; [.3261.0020.0002] # SUNDANESE LETTER NGA
+1B8E ; [.3262.0020.0002] # SUNDANESE LETTER CA
+1B8F ; [.3263.0020.0002] # SUNDANESE LETTER JA
+1B90 ; [.3264.0020.0002] # SUNDANESE LETTER ZA
+1B91 ; [.3265.0020.0002] # SUNDANESE LETTER NYA
+1B92 ; [.3266.0020.0002] # SUNDANESE LETTER TA
+1B93 ; [.3267.0020.0002] # SUNDANESE LETTER DA
+1B94 ; [.3268.0020.0002] # SUNDANESE LETTER NA
+1B95 ; [.3269.0020.0002] # SUNDANESE LETTER PA
+1B96 ; [.326A.0020.0002] # SUNDANESE LETTER FA
+1B97 ; [.326B.0020.0002] # SUNDANESE LETTER VA
+1B98 ; [.326C.0020.0002] # SUNDANESE LETTER BA
+1BBD ; [.326D.0020.0002] # SUNDANESE LETTER BHA
+1B99 ; [.326E.0020.0002] # SUNDANESE LETTER MA
+1BBF ; [.326E.0020.0019] # SUNDANESE LETTER FINAL M
+1BAC ; [.326F.0020.0002] # SUNDANESE CONSONANT SIGN PASANGAN MA
+1B9A ; [.3270.0020.0002] # SUNDANESE LETTER YA
+1BA1 ; [.3271.0020.0002] # SUNDANESE CONSONANT SIGN PAMINGKAL
+1B9B ; [.3272.0020.0002] # SUNDANESE LETTER RA
+1BA2 ; [.3273.0020.0002] # SUNDANESE CONSONANT SIGN PANYAKRA
+1BBB ; [.3274.0020.0002] # SUNDANESE LETTER REU
+1B9C ; [.3275.0020.0002] # SUNDANESE LETTER LA
+1BA3 ; [.3276.0020.0002] # SUNDANESE CONSONANT SIGN PANYIKU
+1BBC ; [.3277.0020.0002] # SUNDANESE LETTER LEU
+1B9D ; [.3278.0020.0002] # SUNDANESE LETTER WA
+1BAD ; [.3279.0020.0002] # SUNDANESE CONSONANT SIGN PASANGAN WA
+1B9E ; [.327A.0020.0002] # SUNDANESE LETTER SA
+1B9F ; [.327B.0020.0002] # SUNDANESE LETTER XA
+1BAF ; [.327C.0020.0002] # SUNDANESE LETTER SYA
+1BA0 ; [.327D.0020.0002] # SUNDANESE LETTER HA
+1BA4 ; [.327E.0020.0002] # SUNDANESE VOWEL SIGN PANGHULU
+1BA5 ; [.327F.0020.0002] # SUNDANESE VOWEL SIGN PANYUKU
+1BA6 ; [.3280.0020.0002] # SUNDANESE VOWEL SIGN PANAELAENG
+1BA7 ; [.3281.0020.0002] # SUNDANESE VOWEL SIGN PANOLONG
+1BA8 ; [.3282.0020.0002] # SUNDANESE VOWEL SIGN PAMEPET
+1BA9 ; [.3283.0020.0002] # SUNDANESE VOWEL SIGN PANEULEUNG
+1BAA ; [.3284.0020.0002] # SUNDANESE SIGN PAMAAEH
+1BAB ; [.3285.0020.0002] # SUNDANESE SIGN VIRAMA
+11005 ; [.3286.0020.0002] # BRAHMI LETTER A
+11006 ; [.3287.0020.0002] # BRAHMI LETTER AA
+11007 ; [.3288.0020.0002] # BRAHMI LETTER I
+11008 ; [.3289.0020.0002] # BRAHMI LETTER II
+11009 ; [.328A.0020.0002] # BRAHMI LETTER U
+1100A ; [.328B.0020.0002] # BRAHMI LETTER UU
+1100B ; [.328C.0020.0002] # BRAHMI LETTER VOCALIC R
+1100C ; [.328D.0020.0002] # BRAHMI LETTER VOCALIC RR
+1100D ; [.328E.0020.0002] # BRAHMI LETTER VOCALIC L
+1100E ; [.328F.0020.0002] # BRAHMI LETTER VOCALIC LL
+11071 ; [.3290.0020.0002] # BRAHMI LETTER OLD TAMIL SHORT E
+1100F ; [.3291.0020.0002] # BRAHMI LETTER E
+11010 ; [.3292.0020.0002] # BRAHMI LETTER AI
+11072 ; [.3293.0020.0002] # BRAHMI LETTER OLD TAMIL SHORT O
+11011 ; [.3294.0020.0002] # BRAHMI LETTER O
+11012 ; [.3295.0020.0002] # BRAHMI LETTER AU
+11013 ; [.3296.0020.0002] # BRAHMI LETTER KA
+11014 ; [.3297.0020.0002] # BRAHMI LETTER KHA
+11015 ; [.3298.0020.0002] # BRAHMI LETTER GA
+11016 ; [.3299.0020.0002] # BRAHMI LETTER GHA
+11017 ; [.329A.0020.0002] # BRAHMI LETTER NGA
+11018 ; [.329B.0020.0002] # BRAHMI LETTER CA
+11019 ; [.329C.0020.0002] # BRAHMI LETTER CHA
+1101A ; [.329D.0020.0002] # BRAHMI LETTER JA
+1101B ; [.329E.0020.0002] # BRAHMI LETTER JHA
+1101C ; [.329F.0020.0002] # BRAHMI LETTER NYA
+1101D ; [.32A0.0020.0002] # BRAHMI LETTER TTA
+1101E ; [.32A1.0020.0002] # BRAHMI LETTER TTHA
+1101F ; [.32A2.0020.0002] # BRAHMI LETTER DDA
+11020 ; [.32A3.0020.0002] # BRAHMI LETTER DDHA
+11021 ; [.32A4.0020.0002] # BRAHMI LETTER NNA
+11022 ; [.32A5.0020.0002] # BRAHMI LETTER TA
+11023 ; [.32A6.0020.0002] # BRAHMI LETTER THA
+11024 ; [.32A7.0020.0002] # BRAHMI LETTER DA
+11025 ; [.32A8.0020.0002] # BRAHMI LETTER DHA
+11026 ; [.32A9.0020.0002] # BRAHMI LETTER NA
+11027 ; [.32AA.0020.0002] # BRAHMI LETTER PA
+11028 ; [.32AB.0020.0002] # BRAHMI LETTER PHA
+11029 ; [.32AC.0020.0002] # BRAHMI LETTER BA
+1102A ; [.32AD.0020.0002] # BRAHMI LETTER BHA
+1102B ; [.32AE.0020.0002] # BRAHMI LETTER MA
+1102C ; [.32AF.0020.0002] # BRAHMI LETTER YA
+1102D ; [.32B0.0020.0002] # BRAHMI LETTER RA
+1102E ; [.32B1.0020.0002] # BRAHMI LETTER LA
+1102F ; [.32B2.0020.0002] # BRAHMI LETTER VA
+11030 ; [.32B3.0020.0002] # BRAHMI LETTER SHA
+11031 ; [.32B4.0020.0002] # BRAHMI LETTER SSA
+11032 ; [.32B5.0020.0002] # BRAHMI LETTER SA
+11033 ; [.32B6.0020.0002] # BRAHMI LETTER HA
+11003 ; [.32B7.0020.0002] # BRAHMI SIGN JIHVAMULIYA
+11004 ; [.32B8.0020.0002] # BRAHMI SIGN UPADHMANIYA
+11034 ; [.32B9.0020.0002] # BRAHMI LETTER LLA
+11035 ; [.32BA.0020.0002] # BRAHMI LETTER OLD TAMIL LLLA
+11075 ; [.32BB.0020.0002] # BRAHMI LETTER OLD TAMIL LLA
+11036 ; [.32BC.0020.0002] # BRAHMI LETTER OLD TAMIL RRA
+11037 ; [.32BD.0020.0002] # BRAHMI LETTER OLD TAMIL NNNA
+11038 ; [.32BE.0020.0002] # BRAHMI VOWEL SIGN AA
+11039 ; [.32BF.0020.0002] # BRAHMI VOWEL SIGN BHATTIPROLU AA
+1103A ; [.32C0.0020.0002] # BRAHMI VOWEL SIGN I
+1103B ; [.32C1.0020.0002] # BRAHMI VOWEL SIGN II
+1103C ; [.32C2.0020.0002] # BRAHMI VOWEL SIGN U
+1103D ; [.32C3.0020.0002] # BRAHMI VOWEL SIGN UU
+1103E ; [.32C4.0020.0002] # BRAHMI VOWEL SIGN VOCALIC R
+1103F ; [.32C5.0020.0002] # BRAHMI VOWEL SIGN VOCALIC RR
+11040 ; [.32C6.0020.0002] # BRAHMI VOWEL SIGN VOCALIC L
+11041 ; [.32C7.0020.0002] # BRAHMI VOWEL SIGN VOCALIC LL
+11073 ; [.32C8.0020.0002] # BRAHMI VOWEL SIGN OLD TAMIL SHORT E
+11042 ; [.32C9.0020.0002] # BRAHMI VOWEL SIGN E
+11043 ; [.32CA.0020.0002] # BRAHMI VOWEL SIGN AI
+11074 ; [.32CB.0020.0002] # BRAHMI VOWEL SIGN OLD TAMIL SHORT O
+11044 ; [.32CC.0020.0002] # BRAHMI VOWEL SIGN O
+11045 ; [.32CD.0020.0002] # BRAHMI VOWEL SIGN AU
+11046 ; [.32CE.0020.0002] # BRAHMI VIRAMA
+1107F ; [.32CF.0020.0002] # BRAHMI NUMBER JOINER
+11070 ; [.32D0.0020.0002] # BRAHMI SIGN OLD TAMIL VIRAMA
+10A00 ; [.32D1.0020.0002] # KHAROSHTHI LETTER A
+10A01 ; [.32D2.0020.0002] # KHAROSHTHI VOWEL SIGN I
+10A02 ; [.32D3.0020.0002] # KHAROSHTHI VOWEL SIGN U
+10A03 ; [.32D4.0020.0002] # KHAROSHTHI VOWEL SIGN VOCALIC R
+10A05 ; [.32D5.0020.0002] # KHAROSHTHI VOWEL SIGN E
+10A06 ; [.32D6.0020.0002] # KHAROSHTHI VOWEL SIGN O
+10A0C ; [.32D7.0020.0002] # KHAROSHTHI VOWEL LENGTH MARK
+10A10 ; [.32D8.0020.0002] # KHAROSHTHI LETTER KA
+10A32 ; [.32D9.0020.0002] # KHAROSHTHI LETTER KKA
+10A11 ; [.32DA.0020.0002] # KHAROSHTHI LETTER KHA
+10A12 ; [.32DB.0020.0002] # KHAROSHTHI LETTER GA
+10A13 ; [.32DC.0020.0002] # KHAROSHTHI LETTER GHA
+10A15 ; [.32DD.0020.0002] # KHAROSHTHI LETTER CA
+10A16 ; [.32DE.0020.0002] # KHAROSHTHI LETTER CHA
+10A17 ; [.32DF.0020.0002] # KHAROSHTHI LETTER JA
+10A19 ; [.32E0.0020.0002] # KHAROSHTHI LETTER NYA
+10A1A ; [.32E1.0020.0002] # KHAROSHTHI LETTER TTA
+10A34 ; [.32E2.0020.0002] # KHAROSHTHI LETTER TTTA
+10A1B ; [.32E3.0020.0002] # KHAROSHTHI LETTER TTHA
+10A33 ; [.32E4.0020.0002] # KHAROSHTHI LETTER TTTHA
+10A1C ; [.32E5.0020.0002] # KHAROSHTHI LETTER DDA
+10A1D ; [.32E6.0020.0002] # KHAROSHTHI LETTER DDHA
+10A1E ; [.32E7.0020.0002] # KHAROSHTHI LETTER NNA
+10A1F ; [.32E8.0020.0002] # KHAROSHTHI LETTER TA
+10A20 ; [.32E9.0020.0002] # KHAROSHTHI LETTER THA
+10A21 ; [.32EA.0020.0002] # KHAROSHTHI LETTER DA
+10A22 ; [.32EB.0020.0002] # KHAROSHTHI LETTER DHA
+10A23 ; [.32EC.0020.0002] # KHAROSHTHI LETTER NA
+10A24 ; [.32ED.0020.0002] # KHAROSHTHI LETTER PA
+10A25 ; [.32EE.0020.0002] # KHAROSHTHI LETTER PHA
+10A26 ; [.32EF.0020.0002] # KHAROSHTHI LETTER BA
+10A27 ; [.32F0.0020.0002] # KHAROSHTHI LETTER BHA
+10A28 ; [.32F1.0020.0002] # KHAROSHTHI LETTER MA
+10A29 ; [.32F2.0020.0002] # KHAROSHTHI LETTER YA
+10A2A ; [.32F3.0020.0002] # KHAROSHTHI LETTER RA
+10A2B ; [.32F4.0020.0002] # KHAROSHTHI LETTER LA
+10A2C ; [.32F5.0020.0002] # KHAROSHTHI LETTER VA
+10A35 ; [.32F6.0020.0002] # KHAROSHTHI LETTER VHA
+10A2D ; [.32F7.0020.0002] # KHAROSHTHI LETTER SHA
+10A2E ; [.32F8.0020.0002] # KHAROSHTHI LETTER SSA
+10A2F ; [.32F9.0020.0002] # KHAROSHTHI LETTER SA
+10A30 ; [.32FA.0020.0002] # KHAROSHTHI LETTER ZA
+10A31 ; [.32FB.0020.0002] # KHAROSHTHI LETTER HA
+10A3F ; [.32FC.0020.0002] # KHAROSHTHI VIRAMA
+11C00 ; [.32FD.0020.0002] # BHAIKSUKI LETTER A
+11C01 ; [.32FE.0020.0002] # BHAIKSUKI LETTER AA
+11C02 ; [.32FF.0020.0002] # BHAIKSUKI LETTER I
+11C03 ; [.3300.0020.0002] # BHAIKSUKI LETTER II
+11C04 ; [.3301.0020.0002] # BHAIKSUKI LETTER U
+11C05 ; [.3302.0020.0002] # BHAIKSUKI LETTER UU
+11C06 ; [.3303.0020.0002] # BHAIKSUKI LETTER VOCALIC R
+11C07 ; [.3304.0020.0002] # BHAIKSUKI LETTER VOCALIC RR
+11C08 ; [.3305.0020.0002] # BHAIKSUKI LETTER VOCALIC L
+11C0A ; [.3306.0020.0002] # BHAIKSUKI LETTER E
+11C0B ; [.3307.0020.0002] # BHAIKSUKI LETTER AI
+11C0C ; [.3308.0020.0002] # BHAIKSUKI LETTER O
+11C0D ; [.3309.0020.0002] # BHAIKSUKI LETTER AU
+11C0E ; [.330A.0020.0002] # BHAIKSUKI LETTER KA
+11C0F ; [.330B.0020.0002] # BHAIKSUKI LETTER KHA
+11C10 ; [.330C.0020.0002] # BHAIKSUKI LETTER GA
+11C11 ; [.330D.0020.0002] # BHAIKSUKI LETTER GHA
+11C12 ; [.330E.0020.0002] # BHAIKSUKI LETTER NGA
+11C13 ; [.330F.0020.0002] # BHAIKSUKI LETTER CA
+11C14 ; [.3310.0020.0002] # BHAIKSUKI LETTER CHA
+11C15 ; [.3311.0020.0002] # BHAIKSUKI LETTER JA
+11C16 ; [.3312.0020.0002] # BHAIKSUKI LETTER JHA
+11C17 ; [.3313.0020.0002] # BHAIKSUKI LETTER NYA
+11C18 ; [.3314.0020.0002] # BHAIKSUKI LETTER TTA
+11C19 ; [.3315.0020.0002] # BHAIKSUKI LETTER TTHA
+11C1A ; [.3316.0020.0002] # BHAIKSUKI LETTER DDA
+11C1B ; [.3317.0020.0002] # BHAIKSUKI LETTER DDHA
+11C1C ; [.3318.0020.0002] # BHAIKSUKI LETTER NNA
+11C1D ; [.3319.0020.0002] # BHAIKSUKI LETTER TA
+11C1E ; [.331A.0020.0002] # BHAIKSUKI LETTER THA
+11C1F ; [.331B.0020.0002] # BHAIKSUKI LETTER DA
+11C20 ; [.331C.0020.0002] # BHAIKSUKI LETTER DHA
+11C21 ; [.331D.0020.0002] # BHAIKSUKI LETTER NA
+11C22 ; [.331E.0020.0002] # BHAIKSUKI LETTER PA
+11C23 ; [.331F.0020.0002] # BHAIKSUKI LETTER PHA
+11C24 ; [.3320.0020.0002] # BHAIKSUKI LETTER BA
+11C25 ; [.3321.0020.0002] # BHAIKSUKI LETTER BHA
+11C26 ; [.3322.0020.0002] # BHAIKSUKI LETTER MA
+11C27 ; [.3323.0020.0002] # BHAIKSUKI LETTER YA
+11C28 ; [.3324.0020.0002] # BHAIKSUKI LETTER RA
+11C29 ; [.3325.0020.0002] # BHAIKSUKI LETTER LA
+11C2A ; [.3326.0020.0002] # BHAIKSUKI LETTER VA
+11C2B ; [.3327.0020.0002] # BHAIKSUKI LETTER SHA
+11C2C ; [.3328.0020.0002] # BHAIKSUKI LETTER SSA
+11C2D ; [.3329.0020.0002] # BHAIKSUKI LETTER SA
+11C2E ; [.332A.0020.0002] # BHAIKSUKI LETTER HA
+11C40 ; [.332B.0020.0002] # BHAIKSUKI SIGN AVAGRAHA
+11C2F ; [.332C.0020.0002] # BHAIKSUKI VOWEL SIGN AA
+11C30 ; [.332D.0020.0002] # BHAIKSUKI VOWEL SIGN I
+11C31 ; [.332E.0020.0002] # BHAIKSUKI VOWEL SIGN II
+11C32 ; [.332F.0020.0002] # BHAIKSUKI VOWEL SIGN U
+11C33 ; [.3330.0020.0002] # BHAIKSUKI VOWEL SIGN UU
+11C34 ; [.3331.0020.0002] # BHAIKSUKI VOWEL SIGN VOCALIC R
+11C35 ; [.3332.0020.0002] # BHAIKSUKI VOWEL SIGN VOCALIC RR
+11C36 ; [.3333.0020.0002] # BHAIKSUKI VOWEL SIGN VOCALIC L
+11C38 ; [.3334.0020.0002] # BHAIKSUKI VOWEL SIGN E
+11C39 ; [.3335.0020.0002] # BHAIKSUKI VOWEL SIGN AI
+11C3A ; [.3336.0020.0002] # BHAIKSUKI VOWEL SIGN O
+11C3B ; [.3337.0020.0002] # BHAIKSUKI VOWEL SIGN AU
+11C3F ; [.3338.0020.0002] # BHAIKSUKI SIGN VIRAMA
+0E01 ; [.3339.0020.0002] # THAI CHARACTER KO KAI
+0E40 0E01 ; [.3339.0020.0002][.3373.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER KO KAI>
+0E41 0E01 ; [.3339.0020.0002][.3374.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER KO KAI>
+0E42 0E01 ; [.3339.0020.0002][.3375.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER KO KAI>
+0E43 0E01 ; [.3339.0020.0002][.3376.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER KO KAI>
+0E44 0E01 ; [.3339.0020.0002][.3377.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER KO KAI>
+0E02 ; [.333A.0020.0002] # THAI CHARACTER KHO KHAI
+0E40 0E02 ; [.333A.0020.0002][.3373.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER KHO KHAI>
+0E41 0E02 ; [.333A.0020.0002][.3374.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER KHO KHAI>
+0E42 0E02 ; [.333A.0020.0002][.3375.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER KHO KHAI>
+0E43 0E02 ; [.333A.0020.0002][.3376.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER KHO KHAI>
+0E44 0E02 ; [.333A.0020.0002][.3377.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER KHO KHAI>
+0E03 ; [.333B.0020.0002] # THAI CHARACTER KHO KHUAT
+0E40 0E03 ; [.333B.0020.0002][.3373.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER KHO KHUAT>
+0E41 0E03 ; [.333B.0020.0002][.3374.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER KHO KHUAT>
+0E42 0E03 ; [.333B.0020.0002][.3375.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER KHO KHUAT>
+0E43 0E03 ; [.333B.0020.0002][.3376.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER KHO KHUAT>
+0E44 0E03 ; [.333B.0020.0002][.3377.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER KHO KHUAT>
+0E04 ; [.333C.0020.0002] # THAI CHARACTER KHO KHWAI
+0E40 0E04 ; [.333C.0020.0002][.3373.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER KHO KHWAI>
+0E41 0E04 ; [.333C.0020.0002][.3374.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER KHO KHWAI>
+0E42 0E04 ; [.333C.0020.0002][.3375.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER KHO KHWAI>
+0E43 0E04 ; [.333C.0020.0002][.3376.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER KHO KHWAI>
+0E44 0E04 ; [.333C.0020.0002][.3377.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER KHO KHWAI>
+0E05 ; [.333D.0020.0002] # THAI CHARACTER KHO KHON
+0E40 0E05 ; [.333D.0020.0002][.3373.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER KHO KHON>
+0E41 0E05 ; [.333D.0020.0002][.3374.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER KHO KHON>
+0E42 0E05 ; [.333D.0020.0002][.3375.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER KHO KHON>
+0E43 0E05 ; [.333D.0020.0002][.3376.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER KHO KHON>
+0E44 0E05 ; [.333D.0020.0002][.3377.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER KHO KHON>
+0E06 ; [.333E.0020.0002] # THAI CHARACTER KHO RAKHANG
+0E40 0E06 ; [.333E.0020.0002][.3373.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER KHO RAKHANG>
+0E41 0E06 ; [.333E.0020.0002][.3374.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER KHO RAKHANG>
+0E42 0E06 ; [.333E.0020.0002][.3375.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER KHO RAKHANG>
+0E43 0E06 ; [.333E.0020.0002][.3376.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER KHO RAKHANG>
+0E44 0E06 ; [.333E.0020.0002][.3377.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER KHO RAKHANG>
+0E07 ; [.333F.0020.0002] # THAI CHARACTER NGO NGU
+0E40 0E07 ; [.333F.0020.0002][.3373.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER NGO NGU>
+0E41 0E07 ; [.333F.0020.0002][.3374.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER NGO NGU>
+0E42 0E07 ; [.333F.0020.0002][.3375.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER NGO NGU>
+0E43 0E07 ; [.333F.0020.0002][.3376.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER NGO NGU>
+0E44 0E07 ; [.333F.0020.0002][.3377.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER NGO NGU>
+0E08 ; [.3340.0020.0002] # THAI CHARACTER CHO CHAN
+0E40 0E08 ; [.3340.0020.0002][.3373.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER CHO CHAN>
+0E41 0E08 ; [.3340.0020.0002][.3374.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER CHO CHAN>
+0E42 0E08 ; [.3340.0020.0002][.3375.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER CHO CHAN>
+0E43 0E08 ; [.3340.0020.0002][.3376.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER CHO CHAN>
+0E44 0E08 ; [.3340.0020.0002][.3377.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER CHO CHAN>
+0E09 ; [.3341.0020.0002] # THAI CHARACTER CHO CHING
+0E40 0E09 ; [.3341.0020.0002][.3373.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER CHO CHING>
+0E41 0E09 ; [.3341.0020.0002][.3374.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER CHO CHING>
+0E42 0E09 ; [.3341.0020.0002][.3375.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER CHO CHING>
+0E43 0E09 ; [.3341.0020.0002][.3376.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER CHO CHING>
+0E44 0E09 ; [.3341.0020.0002][.3377.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER CHO CHING>
+0E0A ; [.3342.0020.0002] # THAI CHARACTER CHO CHANG
+0E40 0E0A ; [.3342.0020.0002][.3373.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER CHO CHANG>
+0E41 0E0A ; [.3342.0020.0002][.3374.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER CHO CHANG>
+0E42 0E0A ; [.3342.0020.0002][.3375.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER CHO CHANG>
+0E43 0E0A ; [.3342.0020.0002][.3376.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER CHO CHANG>
+0E44 0E0A ; [.3342.0020.0002][.3377.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER CHO CHANG>
+0E0B ; [.3343.0020.0002] # THAI CHARACTER SO SO
+0E40 0E0B ; [.3343.0020.0002][.3373.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER SO SO>
+0E41 0E0B ; [.3343.0020.0002][.3374.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER SO SO>
+0E42 0E0B ; [.3343.0020.0002][.3375.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER SO SO>
+0E43 0E0B ; [.3343.0020.0002][.3376.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER SO SO>
+0E44 0E0B ; [.3343.0020.0002][.3377.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER SO SO>
+0E0C ; [.3344.0020.0002] # THAI CHARACTER CHO CHOE
+0E40 0E0C ; [.3344.0020.0002][.3373.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER CHO CHOE>
+0E41 0E0C ; [.3344.0020.0002][.3374.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER CHO CHOE>
+0E42 0E0C ; [.3344.0020.0002][.3375.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER CHO CHOE>
+0E43 0E0C ; [.3344.0020.0002][.3376.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER CHO CHOE>
+0E44 0E0C ; [.3344.0020.0002][.3377.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER CHO CHOE>
+0E0D ; [.3345.0020.0002] # THAI CHARACTER YO YING
+0E40 0E0D ; [.3345.0020.0002][.3373.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER YO YING>
+0E41 0E0D ; [.3345.0020.0002][.3374.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER YO YING>
+0E42 0E0D ; [.3345.0020.0002][.3375.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER YO YING>
+0E43 0E0D ; [.3345.0020.0002][.3376.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER YO YING>
+0E44 0E0D ; [.3345.0020.0002][.3377.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER YO YING>
+0E0E ; [.3346.0020.0002] # THAI CHARACTER DO CHADA
+0E40 0E0E ; [.3346.0020.0002][.3373.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER DO CHADA>
+0E41 0E0E ; [.3346.0020.0002][.3374.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER DO CHADA>
+0E42 0E0E ; [.3346.0020.0002][.3375.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER DO CHADA>
+0E43 0E0E ; [.3346.0020.0002][.3376.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER DO CHADA>
+0E44 0E0E ; [.3346.0020.0002][.3377.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER DO CHADA>
+0E0F ; [.3347.0020.0002] # THAI CHARACTER TO PATAK
+0E40 0E0F ; [.3347.0020.0002][.3373.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER TO PATAK>
+0E41 0E0F ; [.3347.0020.0002][.3374.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER TO PATAK>
+0E42 0E0F ; [.3347.0020.0002][.3375.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER TO PATAK>
+0E43 0E0F ; [.3347.0020.0002][.3376.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER TO PATAK>
+0E44 0E0F ; [.3347.0020.0002][.3377.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER TO PATAK>
+0E10 ; [.3348.0020.0002] # THAI CHARACTER THO THAN
+0E40 0E10 ; [.3348.0020.0002][.3373.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER THO THAN>
+0E41 0E10 ; [.3348.0020.0002][.3374.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER THO THAN>
+0E42 0E10 ; [.3348.0020.0002][.3375.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER THO THAN>
+0E43 0E10 ; [.3348.0020.0002][.3376.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER THO THAN>
+0E44 0E10 ; [.3348.0020.0002][.3377.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER THO THAN>
+0E11 ; [.3349.0020.0002] # THAI CHARACTER THO NANGMONTHO
+0E40 0E11 ; [.3349.0020.0002][.3373.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER THO NANGMONTHO>
+0E41 0E11 ; [.3349.0020.0002][.3374.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER THO NANGMONTHO>
+0E42 0E11 ; [.3349.0020.0002][.3375.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER THO NANGMONTHO>
+0E43 0E11 ; [.3349.0020.0002][.3376.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER THO NANGMONTHO>
+0E44 0E11 ; [.3349.0020.0002][.3377.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER THO NANGMONTHO>
+0E12 ; [.334A.0020.0002] # THAI CHARACTER THO PHUTHAO
+0E40 0E12 ; [.334A.0020.0002][.3373.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER THO PHUTHAO>
+0E41 0E12 ; [.334A.0020.0002][.3374.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER THO PHUTHAO>
+0E42 0E12 ; [.334A.0020.0002][.3375.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER THO PHUTHAO>
+0E43 0E12 ; [.334A.0020.0002][.3376.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER THO PHUTHAO>
+0E44 0E12 ; [.334A.0020.0002][.3377.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER THO PHUTHAO>
+0E13 ; [.334B.0020.0002] # THAI CHARACTER NO NEN
+0E40 0E13 ; [.334B.0020.0002][.3373.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER NO NEN>
+0E41 0E13 ; [.334B.0020.0002][.3374.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER NO NEN>
+0E42 0E13 ; [.334B.0020.0002][.3375.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER NO NEN>
+0E43 0E13 ; [.334B.0020.0002][.3376.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER NO NEN>
+0E44 0E13 ; [.334B.0020.0002][.3377.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER NO NEN>
+0E14 ; [.334C.0020.0002] # THAI CHARACTER DO DEK
+0E40 0E14 ; [.334C.0020.0002][.3373.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER DO DEK>
+0E41 0E14 ; [.334C.0020.0002][.3374.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER DO DEK>
+0E42 0E14 ; [.334C.0020.0002][.3375.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER DO DEK>
+0E43 0E14 ; [.334C.0020.0002][.3376.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER DO DEK>
+0E44 0E14 ; [.334C.0020.0002][.3377.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER DO DEK>
+0E15 ; [.334D.0020.0002] # THAI CHARACTER TO TAO
+0E40 0E15 ; [.334D.0020.0002][.3373.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER TO TAO>
+0E41 0E15 ; [.334D.0020.0002][.3374.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER TO TAO>
+0E42 0E15 ; [.334D.0020.0002][.3375.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER TO TAO>
+0E43 0E15 ; [.334D.0020.0002][.3376.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER TO TAO>
+0E44 0E15 ; [.334D.0020.0002][.3377.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER TO TAO>
+0E16 ; [.334E.0020.0002] # THAI CHARACTER THO THUNG
+0E40 0E16 ; [.334E.0020.0002][.3373.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER THO THUNG>
+0E41 0E16 ; [.334E.0020.0002][.3374.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER THO THUNG>
+0E42 0E16 ; [.334E.0020.0002][.3375.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER THO THUNG>
+0E43 0E16 ; [.334E.0020.0002][.3376.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER THO THUNG>
+0E44 0E16 ; [.334E.0020.0002][.3377.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER THO THUNG>
+0E17 ; [.334F.0020.0002] # THAI CHARACTER THO THAHAN
+0E40 0E17 ; [.334F.0020.0002][.3373.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER THO THAHAN>
+0E41 0E17 ; [.334F.0020.0002][.3374.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER THO THAHAN>
+0E42 0E17 ; [.334F.0020.0002][.3375.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER THO THAHAN>
+0E43 0E17 ; [.334F.0020.0002][.3376.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER THO THAHAN>
+0E44 0E17 ; [.334F.0020.0002][.3377.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER THO THAHAN>
+0E18 ; [.3350.0020.0002] # THAI CHARACTER THO THONG
+0E40 0E18 ; [.3350.0020.0002][.3373.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER THO THONG>
+0E41 0E18 ; [.3350.0020.0002][.3374.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER THO THONG>
+0E42 0E18 ; [.3350.0020.0002][.3375.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER THO THONG>
+0E43 0E18 ; [.3350.0020.0002][.3376.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER THO THONG>
+0E44 0E18 ; [.3350.0020.0002][.3377.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER THO THONG>
+0E19 ; [.3351.0020.0002] # THAI CHARACTER NO NU
+0E40 0E19 ; [.3351.0020.0002][.3373.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER NO NU>
+0E41 0E19 ; [.3351.0020.0002][.3374.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER NO NU>
+0E42 0E19 ; [.3351.0020.0002][.3375.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER NO NU>
+0E43 0E19 ; [.3351.0020.0002][.3376.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER NO NU>
+0E44 0E19 ; [.3351.0020.0002][.3377.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER NO NU>
+0E1A ; [.3352.0020.0002] # THAI CHARACTER BO BAIMAI
+0E40 0E1A ; [.3352.0020.0002][.3373.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER BO BAIMAI>
+0E41 0E1A ; [.3352.0020.0002][.3374.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER BO BAIMAI>
+0E42 0E1A ; [.3352.0020.0002][.3375.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER BO BAIMAI>
+0E43 0E1A ; [.3352.0020.0002][.3376.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER BO BAIMAI>
+0E44 0E1A ; [.3352.0020.0002][.3377.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER BO BAIMAI>
+0E1B ; [.3353.0020.0002] # THAI CHARACTER PO PLA
+0E40 0E1B ; [.3353.0020.0002][.3373.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER PO PLA>
+0E41 0E1B ; [.3353.0020.0002][.3374.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER PO PLA>
+0E42 0E1B ; [.3353.0020.0002][.3375.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER PO PLA>
+0E43 0E1B ; [.3353.0020.0002][.3376.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER PO PLA>
+0E44 0E1B ; [.3353.0020.0002][.3377.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER PO PLA>
+0E1C ; [.3354.0020.0002] # THAI CHARACTER PHO PHUNG
+0E40 0E1C ; [.3354.0020.0002][.3373.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER PHO PHUNG>
+0E41 0E1C ; [.3354.0020.0002][.3374.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER PHO PHUNG>
+0E42 0E1C ; [.3354.0020.0002][.3375.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER PHO PHUNG>
+0E43 0E1C ; [.3354.0020.0002][.3376.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER PHO PHUNG>
+0E44 0E1C ; [.3354.0020.0002][.3377.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER PHO PHUNG>
+0E1D ; [.3355.0020.0002] # THAI CHARACTER FO FA
+0E40 0E1D ; [.3355.0020.0002][.3373.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER FO FA>
+0E41 0E1D ; [.3355.0020.0002][.3374.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER FO FA>
+0E42 0E1D ; [.3355.0020.0002][.3375.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER FO FA>
+0E43 0E1D ; [.3355.0020.0002][.3376.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER FO FA>
+0E44 0E1D ; [.3355.0020.0002][.3377.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER FO FA>
+0E1E ; [.3356.0020.0002] # THAI CHARACTER PHO PHAN
+0E40 0E1E ; [.3356.0020.0002][.3373.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER PHO PHAN>
+0E41 0E1E ; [.3356.0020.0002][.3374.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER PHO PHAN>
+0E42 0E1E ; [.3356.0020.0002][.3375.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER PHO PHAN>
+0E43 0E1E ; [.3356.0020.0002][.3376.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER PHO PHAN>
+0E44 0E1E ; [.3356.0020.0002][.3377.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER PHO PHAN>
+0E1F ; [.3357.0020.0002] # THAI CHARACTER FO FAN
+0E40 0E1F ; [.3357.0020.0002][.3373.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER FO FAN>
+0E41 0E1F ; [.3357.0020.0002][.3374.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER FO FAN>
+0E42 0E1F ; [.3357.0020.0002][.3375.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER FO FAN>
+0E43 0E1F ; [.3357.0020.0002][.3376.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER FO FAN>
+0E44 0E1F ; [.3357.0020.0002][.3377.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER FO FAN>
+0E20 ; [.3358.0020.0002] # THAI CHARACTER PHO SAMPHAO
+0E40 0E20 ; [.3358.0020.0002][.3373.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER PHO SAMPHAO>
+0E41 0E20 ; [.3358.0020.0002][.3374.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER PHO SAMPHAO>
+0E42 0E20 ; [.3358.0020.0002][.3375.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER PHO SAMPHAO>
+0E43 0E20 ; [.3358.0020.0002][.3376.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER PHO SAMPHAO>
+0E44 0E20 ; [.3358.0020.0002][.3377.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER PHO SAMPHAO>
+0E21 ; [.3359.0020.0002] # THAI CHARACTER MO MA
+0E40 0E21 ; [.3359.0020.0002][.3373.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER MO MA>
+0E41 0E21 ; [.3359.0020.0002][.3374.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER MO MA>
+0E42 0E21 ; [.3359.0020.0002][.3375.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER MO MA>
+0E43 0E21 ; [.3359.0020.0002][.3376.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER MO MA>
+0E44 0E21 ; [.3359.0020.0002][.3377.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER MO MA>
+0E22 ; [.335A.0020.0002] # THAI CHARACTER YO YAK
+0E40 0E22 ; [.335A.0020.0002][.3373.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER YO YAK>
+0E41 0E22 ; [.335A.0020.0002][.3374.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER YO YAK>
+0E42 0E22 ; [.335A.0020.0002][.3375.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER YO YAK>
+0E43 0E22 ; [.335A.0020.0002][.3376.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER YO YAK>
+0E44 0E22 ; [.335A.0020.0002][.3377.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER YO YAK>
+0E23 ; [.335B.0020.0002] # THAI CHARACTER RO RUA
+0E40 0E23 ; [.335B.0020.0002][.3373.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER RO RUA>
+0E41 0E23 ; [.335B.0020.0002][.3374.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER RO RUA>
+0E42 0E23 ; [.335B.0020.0002][.3375.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER RO RUA>
+0E43 0E23 ; [.335B.0020.0002][.3376.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER RO RUA>
+0E44 0E23 ; [.335B.0020.0002][.3377.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER RO RUA>
+0E24 ; [.335C.0020.0002] # THAI CHARACTER RU
+0E40 0E24 ; [.335C.0020.0002][.3373.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER RU>
+0E41 0E24 ; [.335C.0020.0002][.3374.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER RU>
+0E42 0E24 ; [.335C.0020.0002][.3375.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER RU>
+0E43 0E24 ; [.335C.0020.0002][.3376.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER RU>
+0E44 0E24 ; [.335C.0020.0002][.3377.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER RU>
+0E25 ; [.335D.0020.0002] # THAI CHARACTER LO LING
+0E40 0E25 ; [.335D.0020.0002][.3373.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER LO LING>
+0E41 0E25 ; [.335D.0020.0002][.3374.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER LO LING>
+0E42 0E25 ; [.335D.0020.0002][.3375.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER LO LING>
+0E43 0E25 ; [.335D.0020.0002][.3376.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER LO LING>
+0E44 0E25 ; [.335D.0020.0002][.3377.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER LO LING>
+0E26 ; [.335E.0020.0002] # THAI CHARACTER LU
+0E40 0E26 ; [.335E.0020.0002][.3373.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER LU>
+0E41 0E26 ; [.335E.0020.0002][.3374.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER LU>
+0E42 0E26 ; [.335E.0020.0002][.3375.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER LU>
+0E43 0E26 ; [.335E.0020.0002][.3376.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER LU>
+0E44 0E26 ; [.335E.0020.0002][.3377.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER LU>
+0E27 ; [.335F.0020.0002] # THAI CHARACTER WO WAEN
+0E40 0E27 ; [.335F.0020.0002][.3373.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER WO WAEN>
+0E41 0E27 ; [.335F.0020.0002][.3374.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER WO WAEN>
+0E42 0E27 ; [.335F.0020.0002][.3375.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER WO WAEN>
+0E43 0E27 ; [.335F.0020.0002][.3376.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER WO WAEN>
+0E44 0E27 ; [.335F.0020.0002][.3377.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER WO WAEN>
+0E28 ; [.3360.0020.0002] # THAI CHARACTER SO SALA
+0E40 0E28 ; [.3360.0020.0002][.3373.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER SO SALA>
+0E41 0E28 ; [.3360.0020.0002][.3374.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER SO SALA>
+0E42 0E28 ; [.3360.0020.0002][.3375.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER SO SALA>
+0E43 0E28 ; [.3360.0020.0002][.3376.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER SO SALA>
+0E44 0E28 ; [.3360.0020.0002][.3377.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER SO SALA>
+0E29 ; [.3361.0020.0002] # THAI CHARACTER SO RUSI
+0E40 0E29 ; [.3361.0020.0002][.3373.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER SO RUSI>
+0E41 0E29 ; [.3361.0020.0002][.3374.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER SO RUSI>
+0E42 0E29 ; [.3361.0020.0002][.3375.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER SO RUSI>
+0E43 0E29 ; [.3361.0020.0002][.3376.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER SO RUSI>
+0E44 0E29 ; [.3361.0020.0002][.3377.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER SO RUSI>
+0E2A ; [.3362.0020.0002] # THAI CHARACTER SO SUA
+0E40 0E2A ; [.3362.0020.0002][.3373.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER SO SUA>
+0E41 0E2A ; [.3362.0020.0002][.3374.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER SO SUA>
+0E42 0E2A ; [.3362.0020.0002][.3375.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER SO SUA>
+0E43 0E2A ; [.3362.0020.0002][.3376.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER SO SUA>
+0E44 0E2A ; [.3362.0020.0002][.3377.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER SO SUA>
+0E2B ; [.3363.0020.0002] # THAI CHARACTER HO HIP
+0E40 0E2B ; [.3363.0020.0002][.3373.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER HO HIP>
+0E41 0E2B ; [.3363.0020.0002][.3374.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER HO HIP>
+0E42 0E2B ; [.3363.0020.0002][.3375.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER HO HIP>
+0E43 0E2B ; [.3363.0020.0002][.3376.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER HO HIP>
+0E44 0E2B ; [.3363.0020.0002][.3377.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER HO HIP>
+0E2C ; [.3364.0020.0002] # THAI CHARACTER LO CHULA
+0E40 0E2C ; [.3364.0020.0002][.3373.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER LO CHULA>
+0E41 0E2C ; [.3364.0020.0002][.3374.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER LO CHULA>
+0E42 0E2C ; [.3364.0020.0002][.3375.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER LO CHULA>
+0E43 0E2C ; [.3364.0020.0002][.3376.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER LO CHULA>
+0E44 0E2C ; [.3364.0020.0002][.3377.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER LO CHULA>
+0E2D ; [.3365.0020.0002] # THAI CHARACTER O ANG
+0E40 0E2D ; [.3365.0020.0002][.3373.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER O ANG>
+0E41 0E2D ; [.3365.0020.0002][.3374.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER O ANG>
+0E42 0E2D ; [.3365.0020.0002][.3375.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER O ANG>
+0E43 0E2D ; [.3365.0020.0002][.3376.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER O ANG>
+0E44 0E2D ; [.3365.0020.0002][.3377.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER O ANG>
+0E2E ; [.3366.0020.0002] # THAI CHARACTER HO NOKHUK
+0E40 0E2E ; [.3366.0020.0002][.3373.0020.0002] # <THAI CHARACTER SARA E, THAI CHARACTER HO NOKHUK>
+0E41 0E2E ; [.3366.0020.0002][.3374.0020.0002] # <THAI CHARACTER SARA AE, THAI CHARACTER HO NOKHUK>
+0E42 0E2E ; [.3366.0020.0002][.3375.0020.0002] # <THAI CHARACTER SARA O, THAI CHARACTER HO NOKHUK>
+0E43 0E2E ; [.3366.0020.0002][.3376.0020.0002] # <THAI CHARACTER SARA AI MAIMUAN, THAI CHARACTER HO NOKHUK>
+0E44 0E2E ; [.3366.0020.0002][.3377.0020.0002] # <THAI CHARACTER SARA AI MAIMALAI, THAI CHARACTER HO NOKHUK>
+0E2F ; [.3367.0020.0002] # THAI CHARACTER PAIYANNOI
+0E30 ; [.3368.0020.0002] # THAI CHARACTER SARA A
+0E31 ; [.3369.0020.0002] # THAI CHARACTER MAI HAN-AKAT
+0E32 ; [.336A.0020.0002] # THAI CHARACTER SARA AA
+0E33 ; [.336B.0020.0002] # THAI CHARACTER SARA AM
+0E4D 0E32 ; [.336B.0020.0002] # THAI CHARACTER SARA AM
+0E34 ; [.336C.0020.0002] # THAI CHARACTER SARA I
+0E35 ; [.336D.0020.0002] # THAI CHARACTER SARA II
+0E36 ; [.336E.0020.0002] # THAI CHARACTER SARA UE
+0E37 ; [.336F.0020.0002] # THAI CHARACTER SARA UEE
+0E38 ; [.3370.0020.0002] # THAI CHARACTER SARA U
+0E39 ; [.3371.0020.0002] # THAI CHARACTER SARA UU
+0E3A ; [.3372.0020.0002] # THAI CHARACTER PHINTHU
+0E40 ; [.3373.0020.0002] # THAI CHARACTER SARA E
+0E41 ; [.3374.0020.0002] # THAI CHARACTER SARA AE
+0E42 ; [.3375.0020.0002] # THAI CHARACTER SARA O
+0E43 ; [.3376.0020.0002] # THAI CHARACTER SARA AI MAIMUAN
+0E44 ; [.3377.0020.0002] # THAI CHARACTER SARA AI MAIMALAI
+0E45 ; [.3378.0020.0002] # THAI CHARACTER LAKKHANGYAO
+0EDE ; [.3379.0020.0002] # LAO LETTER KHMU GO
+0EC0 0EDE ; [.3379.0020.0002][.33B3.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER KHMU GO>
+0EC1 0EDE ; [.3379.0020.0002][.33B4.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER KHMU GO>
+0EC2 0EDE ; [.3379.0020.0002][.33B5.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER KHMU GO>
+0EC3 0EDE ; [.3379.0020.0002][.33B6.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER KHMU GO>
+0EC4 0EDE ; [.3379.0020.0002][.33B7.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER KHMU GO>
+0E81 ; [.337A.0020.0002] # LAO LETTER KO
+0EC0 0E81 ; [.337A.0020.0002][.33B3.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER KO>
+0EC1 0E81 ; [.337A.0020.0002][.33B4.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER KO>
+0EC2 0E81 ; [.337A.0020.0002][.33B5.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER KO>
+0EC3 0E81 ; [.337A.0020.0002][.33B6.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER KO>
+0EC4 0E81 ; [.337A.0020.0002][.33B7.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER KO>
+0E82 ; [.337B.0020.0002] # LAO LETTER KHO SUNG
+0EC0 0E82 ; [.337B.0020.0002][.33B3.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER KHO SUNG>
+0EC1 0E82 ; [.337B.0020.0002][.33B4.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER KHO SUNG>
+0EC2 0E82 ; [.337B.0020.0002][.33B5.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER KHO SUNG>
+0EC3 0E82 ; [.337B.0020.0002][.33B6.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER KHO SUNG>
+0EC4 0E82 ; [.337B.0020.0002][.33B7.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER KHO SUNG>
+0E84 ; [.337C.0020.0002] # LAO LETTER KHO TAM
+0EC0 0E84 ; [.337C.0020.0002][.33B3.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER KHO TAM>
+0EC1 0E84 ; [.337C.0020.0002][.33B4.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER KHO TAM>
+0EC2 0E84 ; [.337C.0020.0002][.33B5.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER KHO TAM>
+0EC3 0E84 ; [.337C.0020.0002][.33B6.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER KHO TAM>
+0EC4 0E84 ; [.337C.0020.0002][.33B7.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER KHO TAM>
+0E86 ; [.337D.0020.0002] # LAO LETTER PALI GHA
+0EC0 0E86 ; [.337D.0020.0002][.33B3.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER PALI GHA>
+0EC1 0E86 ; [.337D.0020.0002][.33B4.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER PALI GHA>
+0EC2 0E86 ; [.337D.0020.0002][.33B5.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER PALI GHA>
+0EC3 0E86 ; [.337D.0020.0002][.33B6.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER PALI GHA>
+0EC4 0E86 ; [.337D.0020.0002][.33B7.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER PALI GHA>
+0E87 ; [.337E.0020.0002] # LAO LETTER NGO
+0EC0 0E87 ; [.337E.0020.0002][.33B3.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER NGO>
+0EC1 0E87 ; [.337E.0020.0002][.33B4.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER NGO>
+0EC2 0E87 ; [.337E.0020.0002][.33B5.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER NGO>
+0EC3 0E87 ; [.337E.0020.0002][.33B6.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER NGO>
+0EC4 0E87 ; [.337E.0020.0002][.33B7.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER NGO>
+0E88 ; [.337F.0020.0002] # LAO LETTER CO
+0EC0 0E88 ; [.337F.0020.0002][.33B3.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER CO>
+0EC1 0E88 ; [.337F.0020.0002][.33B4.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER CO>
+0EC2 0E88 ; [.337F.0020.0002][.33B5.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER CO>
+0EC3 0E88 ; [.337F.0020.0002][.33B6.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER CO>
+0EC4 0E88 ; [.337F.0020.0002][.33B7.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER CO>
+0E89 ; [.3380.0020.0002] # LAO LETTER PALI CHA
+0EC0 0E89 ; [.3380.0020.0002][.33B3.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER PALI CHA>
+0EC1 0E89 ; [.3380.0020.0002][.33B4.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER PALI CHA>
+0EC2 0E89 ; [.3380.0020.0002][.33B5.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER PALI CHA>
+0EC3 0E89 ; [.3380.0020.0002][.33B6.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER PALI CHA>
+0EC4 0E89 ; [.3380.0020.0002][.33B7.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER PALI CHA>
+0EAA ; [.3381.0020.0002] # LAO LETTER SO SUNG
+0EC0 0EAA ; [.3381.0020.0002][.33B3.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER SO SUNG>
+0EC1 0EAA ; [.3381.0020.0002][.33B4.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER SO SUNG>
+0EC2 0EAA ; [.3381.0020.0002][.33B5.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER SO SUNG>
+0EC3 0EAA ; [.3381.0020.0002][.33B6.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER SO SUNG>
+0EC4 0EAA ; [.3381.0020.0002][.33B7.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER SO SUNG>
+0E8A ; [.3382.0020.0002] # LAO LETTER SO TAM
+0EC0 0E8A ; [.3382.0020.0002][.33B3.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER SO TAM>
+0EC1 0E8A ; [.3382.0020.0002][.33B4.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER SO TAM>
+0EC2 0E8A ; [.3382.0020.0002][.33B5.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER SO TAM>
+0EC3 0E8A ; [.3382.0020.0002][.33B6.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER SO TAM>
+0EC4 0E8A ; [.3382.0020.0002][.33B7.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER SO TAM>
+0E8C ; [.3383.0020.0002] # LAO LETTER PALI JHA
+0EC0 0E8C ; [.3383.0020.0002][.33B3.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER PALI JHA>
+0EC1 0E8C ; [.3383.0020.0002][.33B4.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER PALI JHA>
+0EC2 0E8C ; [.3383.0020.0002][.33B5.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER PALI JHA>
+0EC3 0E8C ; [.3383.0020.0002][.33B6.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER PALI JHA>
+0EC4 0E8C ; [.3383.0020.0002][.33B7.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER PALI JHA>
+0E8E ; [.3384.0020.0002] # LAO LETTER PALI NYA
+0EC0 0E8E ; [.3384.0020.0002][.33B3.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER PALI NYA>
+0EC1 0E8E ; [.3384.0020.0002][.33B4.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER PALI NYA>
+0EC2 0E8E ; [.3384.0020.0002][.33B5.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER PALI NYA>
+0EC3 0E8E ; [.3384.0020.0002][.33B6.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER PALI NYA>
+0EC4 0E8E ; [.3384.0020.0002][.33B7.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER PALI NYA>
+0EDF ; [.3385.0020.0002] # LAO LETTER KHMU NYO
+0EC0 0EDF ; [.3385.0020.0002][.33B3.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER KHMU NYO>
+0EC1 0EDF ; [.3385.0020.0002][.33B4.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER KHMU NYO>
+0EC2 0EDF ; [.3385.0020.0002][.33B5.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER KHMU NYO>
+0EC3 0EDF ; [.3385.0020.0002][.33B6.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER KHMU NYO>
+0EC4 0EDF ; [.3385.0020.0002][.33B7.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER KHMU NYO>
+0E8D ; [.3386.0020.0002] # LAO LETTER NYO
+0EC0 0E8D ; [.3386.0020.0002][.33B3.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER NYO>
+0EC1 0E8D ; [.3386.0020.0002][.33B4.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER NYO>
+0EC2 0E8D ; [.3386.0020.0002][.33B5.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER NYO>
+0EC3 0E8D ; [.3386.0020.0002][.33B6.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER NYO>
+0EC4 0E8D ; [.3386.0020.0002][.33B7.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER NYO>
+0E8F ; [.3387.0020.0002] # LAO LETTER PALI TTA
+0EC0 0E8F ; [.3387.0020.0002][.33B3.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER PALI TTA>
+0EC1 0E8F ; [.3387.0020.0002][.33B4.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER PALI TTA>
+0EC2 0E8F ; [.3387.0020.0002][.33B5.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER PALI TTA>
+0EC3 0E8F ; [.3387.0020.0002][.33B6.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER PALI TTA>
+0EC4 0E8F ; [.3387.0020.0002][.33B7.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER PALI TTA>
+0E90 ; [.3388.0020.0002] # LAO LETTER PALI TTHA
+0EC0 0E90 ; [.3388.0020.0002][.33B3.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER PALI TTHA>
+0EC1 0E90 ; [.3388.0020.0002][.33B4.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER PALI TTHA>
+0EC2 0E90 ; [.3388.0020.0002][.33B5.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER PALI TTHA>
+0EC3 0E90 ; [.3388.0020.0002][.33B6.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER PALI TTHA>
+0EC4 0E90 ; [.3388.0020.0002][.33B7.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER PALI TTHA>
+0E91 ; [.3389.0020.0002] # LAO LETTER PALI DDA
+0EC0 0E91 ; [.3389.0020.0002][.33B3.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER PALI DDA>
+0EC1 0E91 ; [.3389.0020.0002][.33B4.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER PALI DDA>
+0EC2 0E91 ; [.3389.0020.0002][.33B5.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER PALI DDA>
+0EC3 0E91 ; [.3389.0020.0002][.33B6.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER PALI DDA>
+0EC4 0E91 ; [.3389.0020.0002][.33B7.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER PALI DDA>
+0E92 ; [.338A.0020.0002] # LAO LETTER PALI DDHA
+0EC0 0E92 ; [.338A.0020.0002][.33B3.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER PALI DDHA>
+0EC1 0E92 ; [.338A.0020.0002][.33B4.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER PALI DDHA>
+0EC2 0E92 ; [.338A.0020.0002][.33B5.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER PALI DDHA>
+0EC3 0E92 ; [.338A.0020.0002][.33B6.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER PALI DDHA>
+0EC4 0E92 ; [.338A.0020.0002][.33B7.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER PALI DDHA>
+0E93 ; [.338B.0020.0002] # LAO LETTER PALI NNA
+0EC0 0E93 ; [.338B.0020.0002][.33B3.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER PALI NNA>
+0EC1 0E93 ; [.338B.0020.0002][.33B4.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER PALI NNA>
+0EC2 0E93 ; [.338B.0020.0002][.33B5.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER PALI NNA>
+0EC3 0E93 ; [.338B.0020.0002][.33B6.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER PALI NNA>
+0EC4 0E93 ; [.338B.0020.0002][.33B7.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER PALI NNA>
+0E94 ; [.338C.0020.0002] # LAO LETTER DO
+0EC0 0E94 ; [.338C.0020.0002][.33B3.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER DO>
+0EC1 0E94 ; [.338C.0020.0002][.33B4.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER DO>
+0EC2 0E94 ; [.338C.0020.0002][.33B5.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER DO>
+0EC3 0E94 ; [.338C.0020.0002][.33B6.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER DO>
+0EC4 0E94 ; [.338C.0020.0002][.33B7.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER DO>
+0E95 ; [.338D.0020.0002] # LAO LETTER TO
+0EC0 0E95 ; [.338D.0020.0002][.33B3.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER TO>
+0EC1 0E95 ; [.338D.0020.0002][.33B4.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER TO>
+0EC2 0E95 ; [.338D.0020.0002][.33B5.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER TO>
+0EC3 0E95 ; [.338D.0020.0002][.33B6.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER TO>
+0EC4 0E95 ; [.338D.0020.0002][.33B7.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER TO>
+0E96 ; [.338E.0020.0002] # LAO LETTER THO SUNG
+0EC0 0E96 ; [.338E.0020.0002][.33B3.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER THO SUNG>
+0EC1 0E96 ; [.338E.0020.0002][.33B4.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER THO SUNG>
+0EC2 0E96 ; [.338E.0020.0002][.33B5.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER THO SUNG>
+0EC3 0E96 ; [.338E.0020.0002][.33B6.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER THO SUNG>
+0EC4 0E96 ; [.338E.0020.0002][.33B7.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER THO SUNG>
+0E97 ; [.338F.0020.0002] # LAO LETTER THO TAM
+0EC0 0E97 ; [.338F.0020.0002][.33B3.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER THO TAM>
+0EC1 0E97 ; [.338F.0020.0002][.33B4.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER THO TAM>
+0EC2 0E97 ; [.338F.0020.0002][.33B5.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER THO TAM>
+0EC3 0E97 ; [.338F.0020.0002][.33B6.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER THO TAM>
+0EC4 0E97 ; [.338F.0020.0002][.33B7.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER THO TAM>
+0E98 ; [.3390.0020.0002] # LAO LETTER PALI DHA
+0EC0 0E98 ; [.3390.0020.0002][.33B3.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER PALI DHA>
+0EC1 0E98 ; [.3390.0020.0002][.33B4.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER PALI DHA>
+0EC2 0E98 ; [.3390.0020.0002][.33B5.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER PALI DHA>
+0EC3 0E98 ; [.3390.0020.0002][.33B6.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER PALI DHA>
+0EC4 0E98 ; [.3390.0020.0002][.33B7.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER PALI DHA>
+0E99 ; [.3391.0020.0002] # LAO LETTER NO
+0EC0 0E99 ; [.3391.0020.0002][.33B3.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER NO>
+0EC1 0E99 ; [.3391.0020.0002][.33B4.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER NO>
+0EC2 0E99 ; [.3391.0020.0002][.33B5.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER NO>
+0EC3 0E99 ; [.3391.0020.0002][.33B6.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER NO>
+0EC4 0E99 ; [.3391.0020.0002][.33B7.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER NO>
+0E9A ; [.3392.0020.0002] # LAO LETTER BO
+0EC0 0E9A ; [.3392.0020.0002][.33B3.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER BO>
+0EC1 0E9A ; [.3392.0020.0002][.33B4.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER BO>
+0EC2 0E9A ; [.3392.0020.0002][.33B5.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER BO>
+0EC3 0E9A ; [.3392.0020.0002][.33B6.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER BO>
+0EC4 0E9A ; [.3392.0020.0002][.33B7.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER BO>
+0E9B ; [.3393.0020.0002] # LAO LETTER PO
+0EC0 0E9B ; [.3393.0020.0002][.33B3.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER PO>
+0EC1 0E9B ; [.3393.0020.0002][.33B4.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER PO>
+0EC2 0E9B ; [.3393.0020.0002][.33B5.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER PO>
+0EC3 0E9B ; [.3393.0020.0002][.33B6.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER PO>
+0EC4 0E9B ; [.3393.0020.0002][.33B7.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER PO>
+0E9C ; [.3394.0020.0002] # LAO LETTER PHO SUNG
+0EC0 0E9C ; [.3394.0020.0002][.33B3.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER PHO SUNG>
+0EC1 0E9C ; [.3394.0020.0002][.33B4.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER PHO SUNG>
+0EC2 0E9C ; [.3394.0020.0002][.33B5.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER PHO SUNG>
+0EC3 0E9C ; [.3394.0020.0002][.33B6.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER PHO SUNG>
+0EC4 0E9C ; [.3394.0020.0002][.33B7.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER PHO SUNG>
+0E9D ; [.3395.0020.0002] # LAO LETTER FO TAM
+0EC0 0E9D ; [.3395.0020.0002][.33B3.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER FO TAM>
+0EC1 0E9D ; [.3395.0020.0002][.33B4.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER FO TAM>
+0EC2 0E9D ; [.3395.0020.0002][.33B5.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER FO TAM>
+0EC3 0E9D ; [.3395.0020.0002][.33B6.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER FO TAM>
+0EC4 0E9D ; [.3395.0020.0002][.33B7.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER FO TAM>
+0E9E ; [.3396.0020.0002] # LAO LETTER PHO TAM
+0EC0 0E9E ; [.3396.0020.0002][.33B3.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER PHO TAM>
+0EC1 0E9E ; [.3396.0020.0002][.33B4.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER PHO TAM>
+0EC2 0E9E ; [.3396.0020.0002][.33B5.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER PHO TAM>
+0EC3 0E9E ; [.3396.0020.0002][.33B6.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER PHO TAM>
+0EC4 0E9E ; [.3396.0020.0002][.33B7.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER PHO TAM>
+0E9F ; [.3397.0020.0002] # LAO LETTER FO SUNG
+0EC0 0E9F ; [.3397.0020.0002][.33B3.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER FO SUNG>
+0EC1 0E9F ; [.3397.0020.0002][.33B4.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER FO SUNG>
+0EC2 0E9F ; [.3397.0020.0002][.33B5.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER FO SUNG>
+0EC3 0E9F ; [.3397.0020.0002][.33B6.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER FO SUNG>
+0EC4 0E9F ; [.3397.0020.0002][.33B7.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER FO SUNG>
+0EA0 ; [.3398.0020.0002] # LAO LETTER PALI BHA
+0EC0 0EA0 ; [.3398.0020.0002][.33B3.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER PALI BHA>
+0EC1 0EA0 ; [.3398.0020.0002][.33B4.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER PALI BHA>
+0EC2 0EA0 ; [.3398.0020.0002][.33B5.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER PALI BHA>
+0EC3 0EA0 ; [.3398.0020.0002][.33B6.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER PALI BHA>
+0EC4 0EA0 ; [.3398.0020.0002][.33B7.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER PALI BHA>
+0EA1 ; [.3399.0020.0002] # LAO LETTER MO
+0EC0 0EA1 ; [.3399.0020.0002][.33B3.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER MO>
+0EC1 0EA1 ; [.3399.0020.0002][.33B4.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER MO>
+0EC2 0EA1 ; [.3399.0020.0002][.33B5.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER MO>
+0EC3 0EA1 ; [.3399.0020.0002][.33B6.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER MO>
+0EC4 0EA1 ; [.3399.0020.0002][.33B7.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER MO>
+0EA2 ; [.339A.0020.0002] # LAO LETTER YO
+0EC0 0EA2 ; [.339A.0020.0002][.33B3.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER YO>
+0EC1 0EA2 ; [.339A.0020.0002][.33B4.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER YO>
+0EC2 0EA2 ; [.339A.0020.0002][.33B5.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER YO>
+0EC3 0EA2 ; [.339A.0020.0002][.33B6.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER YO>
+0EC4 0EA2 ; [.339A.0020.0002][.33B7.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER YO>
+0EA3 ; [.339B.0020.0002] # LAO LETTER LO LING
+0EC0 0EA3 ; [.339B.0020.0002][.33B3.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER LO LING>
+0EC1 0EA3 ; [.339B.0020.0002][.33B4.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER LO LING>
+0EC2 0EA3 ; [.339B.0020.0002][.33B5.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER LO LING>
+0EC3 0EA3 ; [.339B.0020.0002][.33B6.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER LO LING>
+0EC4 0EA3 ; [.339B.0020.0002][.33B7.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER LO LING>
+0EA5 ; [.339C.0020.0002] # LAO LETTER LO LOOT
+0EC0 0EA5 ; [.339C.0020.0002][.33B3.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER LO LOOT>
+0EC1 0EA5 ; [.339C.0020.0002][.33B4.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER LO LOOT>
+0EC2 0EA5 ; [.339C.0020.0002][.33B5.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER LO LOOT>
+0EC3 0EA5 ; [.339C.0020.0002][.33B6.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER LO LOOT>
+0EC4 0EA5 ; [.339C.0020.0002][.33B7.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER LO LOOT>
+0EA7 ; [.339D.0020.0002] # LAO LETTER WO
+0EC0 0EA7 ; [.339D.0020.0002][.33B3.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER WO>
+0EC1 0EA7 ; [.339D.0020.0002][.33B4.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER WO>
+0EC2 0EA7 ; [.339D.0020.0002][.33B5.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER WO>
+0EC3 0EA7 ; [.339D.0020.0002][.33B6.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER WO>
+0EC4 0EA7 ; [.339D.0020.0002][.33B7.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER WO>
+0EA8 ; [.339E.0020.0002] # LAO LETTER SANSKRIT SHA
+0EC0 0EA8 ; [.339E.0020.0002][.33B3.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER SANSKRIT SHA>
+0EC1 0EA8 ; [.339E.0020.0002][.33B4.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER SANSKRIT SHA>
+0EC2 0EA8 ; [.339E.0020.0002][.33B5.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER SANSKRIT SHA>
+0EC3 0EA8 ; [.339E.0020.0002][.33B6.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER SANSKRIT SHA>
+0EC4 0EA8 ; [.339E.0020.0002][.33B7.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER SANSKRIT SHA>
+0EA9 ; [.339F.0020.0002] # LAO LETTER SANSKRIT SSA
+0EC0 0EA9 ; [.339F.0020.0002][.33B3.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER SANSKRIT SSA>
+0EC1 0EA9 ; [.339F.0020.0002][.33B4.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER SANSKRIT SSA>
+0EC2 0EA9 ; [.339F.0020.0002][.33B5.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER SANSKRIT SSA>
+0EC3 0EA9 ; [.339F.0020.0002][.33B6.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER SANSKRIT SSA>
+0EC4 0EA9 ; [.339F.0020.0002][.33B7.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER SANSKRIT SSA>
+0EAB ; [.33A0.0020.0002] # LAO LETTER HO SUNG
+0EDC ; [.33A0.0020.0004][.3391.0020.0004] # LAO HO NO
+0EC0 0EDC ; [.33A0.0020.0004][.3391.0020.0004][.33B3.0020.0002] # <LAO VOWEL SIGN E, LAO HO NO>
+0EC1 0EDC ; [.33A0.0020.0004][.3391.0020.0004][.33B4.0020.0002] # <LAO VOWEL SIGN EI, LAO HO NO>
+0EC2 0EDC ; [.33A0.0020.0004][.3391.0020.0004][.33B5.0020.0002] # <LAO VOWEL SIGN O, LAO HO NO>
+0EC3 0EDC ; [.33A0.0020.0004][.3391.0020.0004][.33B6.0020.0002] # <LAO VOWEL SIGN AY, LAO HO NO>
+0EC4 0EDC ; [.33A0.0020.0004][.3391.0020.0004][.33B7.0020.0002] # <LAO VOWEL SIGN AI, LAO HO NO>
+0EDD ; [.33A0.0020.0004][.3399.0020.0004] # LAO HO MO
+0EC0 0EDD ; [.33A0.0020.0004][.3399.0020.0004][.33B3.0020.0002] # <LAO VOWEL SIGN E, LAO HO MO>
+0EC1 0EDD ; [.33A0.0020.0004][.3399.0020.0004][.33B4.0020.0002] # <LAO VOWEL SIGN EI, LAO HO MO>
+0EC2 0EDD ; [.33A0.0020.0004][.3399.0020.0004][.33B5.0020.0002] # <LAO VOWEL SIGN O, LAO HO MO>
+0EC3 0EDD ; [.33A0.0020.0004][.3399.0020.0004][.33B6.0020.0002] # <LAO VOWEL SIGN AY, LAO HO MO>
+0EC4 0EDD ; [.33A0.0020.0004][.3399.0020.0004][.33B7.0020.0002] # <LAO VOWEL SIGN AI, LAO HO MO>
+0EC0 0EAB ; [.33A0.0020.0002][.33B3.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER HO SUNG>
+0EC1 0EAB ; [.33A0.0020.0002][.33B4.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER HO SUNG>
+0EC2 0EAB ; [.33A0.0020.0002][.33B5.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER HO SUNG>
+0EC3 0EAB ; [.33A0.0020.0002][.33B6.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER HO SUNG>
+0EC4 0EAB ; [.33A0.0020.0002][.33B7.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER HO SUNG>
+0EAC ; [.33A1.0020.0002] # LAO LETTER PALI LLA
+0EC0 0EAC ; [.33A1.0020.0002][.33B3.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER PALI LLA>
+0EC1 0EAC ; [.33A1.0020.0002][.33B4.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER PALI LLA>
+0EC2 0EAC ; [.33A1.0020.0002][.33B5.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER PALI LLA>
+0EC3 0EAC ; [.33A1.0020.0002][.33B6.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER PALI LLA>
+0EC4 0EAC ; [.33A1.0020.0002][.33B7.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER PALI LLA>
+0EAD ; [.33A2.0020.0002] # LAO LETTER O
+0EC0 0EAD ; [.33A2.0020.0002][.33B3.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER O>
+0EC1 0EAD ; [.33A2.0020.0002][.33B4.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER O>
+0EC2 0EAD ; [.33A2.0020.0002][.33B5.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER O>
+0EC3 0EAD ; [.33A2.0020.0002][.33B6.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER O>
+0EC4 0EAD ; [.33A2.0020.0002][.33B7.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER O>
+0EAE ; [.33A3.0020.0002] # LAO LETTER HO TAM
+0EC0 0EAE ; [.33A3.0020.0002][.33B3.0020.0002] # <LAO VOWEL SIGN E, LAO LETTER HO TAM>
+0EC1 0EAE ; [.33A3.0020.0002][.33B4.0020.0002] # <LAO VOWEL SIGN EI, LAO LETTER HO TAM>
+0EC2 0EAE ; [.33A3.0020.0002][.33B5.0020.0002] # <LAO VOWEL SIGN O, LAO LETTER HO TAM>
+0EC3 0EAE ; [.33A3.0020.0002][.33B6.0020.0002] # <LAO VOWEL SIGN AY, LAO LETTER HO TAM>
+0EC4 0EAE ; [.33A3.0020.0002][.33B7.0020.0002] # <LAO VOWEL SIGN AI, LAO LETTER HO TAM>
+0EAF ; [.33A4.0020.0002] # LAO ELLIPSIS
+0EB0 ; [.33A5.0020.0002] # LAO VOWEL SIGN A
+0EB1 ; [.33A6.0020.0002] # LAO VOWEL SIGN MAI KAN
+0EB2 ; [.33A7.0020.0002] # LAO VOWEL SIGN AA
+0EB3 ; [.33A8.0020.0002] # LAO VOWEL SIGN AM
+0ECD 0EB2 ; [.33A8.0020.0002] # LAO VOWEL SIGN AM
+0EB4 ; [.33A9.0020.0002] # LAO VOWEL SIGN I
+0EB5 ; [.33AA.0020.0002] # LAO VOWEL SIGN II
+0EB6 ; [.33AB.0020.0002] # LAO VOWEL SIGN Y
+0EB7 ; [.33AC.0020.0002] # LAO VOWEL SIGN YY
+0EB8 ; [.33AD.0020.0002] # LAO VOWEL SIGN U
+0EB9 ; [.33AE.0020.0002] # LAO VOWEL SIGN UU
+0EBA ; [.33AF.0020.0002] # LAO SIGN PALI VIRAMA
+0EBB ; [.33B0.0020.0002] # LAO VOWEL SIGN MAI KON
+0EBC ; [.33B1.0020.0002] # LAO SEMIVOWEL SIGN LO
+0EBD ; [.33B2.0020.0002] # LAO SEMIVOWEL SIGN NYO
+0EC0 ; [.33B3.0020.0002] # LAO VOWEL SIGN E
+0EC1 ; [.33B4.0020.0002] # LAO VOWEL SIGN EI
+0EC2 ; [.33B5.0020.0002] # LAO VOWEL SIGN O
+0EC3 ; [.33B6.0020.0002] # LAO VOWEL SIGN AY
+0EC4 ; [.33B7.0020.0002] # LAO VOWEL SIGN AI
+AA80 ; [.33B8.0020.0002] # TAI VIET LETTER LOW KO
+AAB5 AA80 ; [.33B8.0020.0002][.33ED.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW KO>
+AAB6 AA80 ; [.33B8.0020.0002][.33EE.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW KO>
+AAB9 AA80 ; [.33B8.0020.0002][.33F1.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW KO>
+AABB AA80 ; [.33B8.0020.0002][.33F3.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW KO>
+AABC AA80 ; [.33B8.0020.0002][.33F4.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW KO>
+AA81 ; [.33B9.0020.0002] # TAI VIET LETTER HIGH KO
+AAB5 AA81 ; [.33B9.0020.0002][.33ED.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH KO>
+AAB6 AA81 ; [.33B9.0020.0002][.33EE.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH KO>
+AAB9 AA81 ; [.33B9.0020.0002][.33F1.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH KO>
+AABB AA81 ; [.33B9.0020.0002][.33F3.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH KO>
+AABC AA81 ; [.33B9.0020.0002][.33F4.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH KO>
+AA82 ; [.33BA.0020.0002] # TAI VIET LETTER LOW KHO
+AAB5 AA82 ; [.33BA.0020.0002][.33ED.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW KHO>
+AAB6 AA82 ; [.33BA.0020.0002][.33EE.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW KHO>
+AAB9 AA82 ; [.33BA.0020.0002][.33F1.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW KHO>
+AABB AA82 ; [.33BA.0020.0002][.33F3.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW KHO>
+AABC AA82 ; [.33BA.0020.0002][.33F4.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW KHO>
+AA83 ; [.33BB.0020.0002] # TAI VIET LETTER HIGH KHO
+AAB5 AA83 ; [.33BB.0020.0002][.33ED.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH KHO>
+AAB6 AA83 ; [.33BB.0020.0002][.33EE.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH KHO>
+AAB9 AA83 ; [.33BB.0020.0002][.33F1.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH KHO>
+AABB AA83 ; [.33BB.0020.0002][.33F3.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH KHO>
+AABC AA83 ; [.33BB.0020.0002][.33F4.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH KHO>
+AA84 ; [.33BC.0020.0002] # TAI VIET LETTER LOW KHHO
+AAB5 AA84 ; [.33BC.0020.0002][.33ED.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW KHHO>
+AAB6 AA84 ; [.33BC.0020.0002][.33EE.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW KHHO>
+AAB9 AA84 ; [.33BC.0020.0002][.33F1.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW KHHO>
+AABB AA84 ; [.33BC.0020.0002][.33F3.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW KHHO>
+AABC AA84 ; [.33BC.0020.0002][.33F4.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW KHHO>
+AA85 ; [.33BD.0020.0002] # TAI VIET LETTER HIGH KHHO
+AAB5 AA85 ; [.33BD.0020.0002][.33ED.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH KHHO>
+AAB6 AA85 ; [.33BD.0020.0002][.33EE.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH KHHO>
+AAB9 AA85 ; [.33BD.0020.0002][.33F1.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH KHHO>
+AABB AA85 ; [.33BD.0020.0002][.33F3.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH KHHO>
+AABC AA85 ; [.33BD.0020.0002][.33F4.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH KHHO>
+AA86 ; [.33BE.0020.0002] # TAI VIET LETTER LOW GO
+AAB5 AA86 ; [.33BE.0020.0002][.33ED.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW GO>
+AAB6 AA86 ; [.33BE.0020.0002][.33EE.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW GO>
+AAB9 AA86 ; [.33BE.0020.0002][.33F1.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW GO>
+AABB AA86 ; [.33BE.0020.0002][.33F3.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW GO>
+AABC AA86 ; [.33BE.0020.0002][.33F4.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW GO>
+AA87 ; [.33BF.0020.0002] # TAI VIET LETTER HIGH GO
+AAB5 AA87 ; [.33BF.0020.0002][.33ED.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH GO>
+AAB6 AA87 ; [.33BF.0020.0002][.33EE.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH GO>
+AAB9 AA87 ; [.33BF.0020.0002][.33F1.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH GO>
+AABB AA87 ; [.33BF.0020.0002][.33F3.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH GO>
+AABC AA87 ; [.33BF.0020.0002][.33F4.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH GO>
+AA88 ; [.33C0.0020.0002] # TAI VIET LETTER LOW NGO
+AAB5 AA88 ; [.33C0.0020.0002][.33ED.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW NGO>
+AAB6 AA88 ; [.33C0.0020.0002][.33EE.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW NGO>
+AAB9 AA88 ; [.33C0.0020.0002][.33F1.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW NGO>
+AABB AA88 ; [.33C0.0020.0002][.33F3.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW NGO>
+AABC AA88 ; [.33C0.0020.0002][.33F4.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW NGO>
+AA89 ; [.33C1.0020.0002] # TAI VIET LETTER HIGH NGO
+AAB5 AA89 ; [.33C1.0020.0002][.33ED.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH NGO>
+AAB6 AA89 ; [.33C1.0020.0002][.33EE.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH NGO>
+AAB9 AA89 ; [.33C1.0020.0002][.33F1.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH NGO>
+AABB AA89 ; [.33C1.0020.0002][.33F3.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH NGO>
+AABC AA89 ; [.33C1.0020.0002][.33F4.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH NGO>
+AA8A ; [.33C2.0020.0002] # TAI VIET LETTER LOW CO
+AAB5 AA8A ; [.33C2.0020.0002][.33ED.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW CO>
+AAB6 AA8A ; [.33C2.0020.0002][.33EE.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW CO>
+AAB9 AA8A ; [.33C2.0020.0002][.33F1.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW CO>
+AABB AA8A ; [.33C2.0020.0002][.33F3.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW CO>
+AABC AA8A ; [.33C2.0020.0002][.33F4.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW CO>
+AA8B ; [.33C3.0020.0002] # TAI VIET LETTER HIGH CO
+AAB5 AA8B ; [.33C3.0020.0002][.33ED.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH CO>
+AAB6 AA8B ; [.33C3.0020.0002][.33EE.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH CO>
+AAB9 AA8B ; [.33C3.0020.0002][.33F1.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH CO>
+AABB AA8B ; [.33C3.0020.0002][.33F3.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH CO>
+AABC AA8B ; [.33C3.0020.0002][.33F4.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH CO>
+AA8C ; [.33C4.0020.0002] # TAI VIET LETTER LOW CHO
+AAB5 AA8C ; [.33C4.0020.0002][.33ED.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW CHO>
+AAB6 AA8C ; [.33C4.0020.0002][.33EE.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW CHO>
+AAB9 AA8C ; [.33C4.0020.0002][.33F1.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW CHO>
+AABB AA8C ; [.33C4.0020.0002][.33F3.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW CHO>
+AABC AA8C ; [.33C4.0020.0002][.33F4.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW CHO>
+AA8D ; [.33C5.0020.0002] # TAI VIET LETTER HIGH CHO
+AAB5 AA8D ; [.33C5.0020.0002][.33ED.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH CHO>
+AAB6 AA8D ; [.33C5.0020.0002][.33EE.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH CHO>
+AAB9 AA8D ; [.33C5.0020.0002][.33F1.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH CHO>
+AABB AA8D ; [.33C5.0020.0002][.33F3.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH CHO>
+AABC AA8D ; [.33C5.0020.0002][.33F4.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH CHO>
+AA8E ; [.33C6.0020.0002] # TAI VIET LETTER LOW SO
+AAB5 AA8E ; [.33C6.0020.0002][.33ED.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW SO>
+AAB6 AA8E ; [.33C6.0020.0002][.33EE.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW SO>
+AAB9 AA8E ; [.33C6.0020.0002][.33F1.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW SO>
+AABB AA8E ; [.33C6.0020.0002][.33F3.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW SO>
+AABC AA8E ; [.33C6.0020.0002][.33F4.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW SO>
+AA8F ; [.33C7.0020.0002] # TAI VIET LETTER HIGH SO
+AAB5 AA8F ; [.33C7.0020.0002][.33ED.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH SO>
+AAB6 AA8F ; [.33C7.0020.0002][.33EE.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH SO>
+AAB9 AA8F ; [.33C7.0020.0002][.33F1.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH SO>
+AABB AA8F ; [.33C7.0020.0002][.33F3.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH SO>
+AABC AA8F ; [.33C7.0020.0002][.33F4.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH SO>
+AA90 ; [.33C8.0020.0002] # TAI VIET LETTER LOW NYO
+AAB5 AA90 ; [.33C8.0020.0002][.33ED.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW NYO>
+AAB6 AA90 ; [.33C8.0020.0002][.33EE.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW NYO>
+AAB9 AA90 ; [.33C8.0020.0002][.33F1.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW NYO>
+AABB AA90 ; [.33C8.0020.0002][.33F3.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW NYO>
+AABC AA90 ; [.33C8.0020.0002][.33F4.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW NYO>
+AA91 ; [.33C9.0020.0002] # TAI VIET LETTER HIGH NYO
+AAB5 AA91 ; [.33C9.0020.0002][.33ED.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH NYO>
+AAB6 AA91 ; [.33C9.0020.0002][.33EE.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH NYO>
+AAB9 AA91 ; [.33C9.0020.0002][.33F1.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH NYO>
+AABB AA91 ; [.33C9.0020.0002][.33F3.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH NYO>
+AABC AA91 ; [.33C9.0020.0002][.33F4.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH NYO>
+AA92 ; [.33CA.0020.0002] # TAI VIET LETTER LOW DO
+AAB5 AA92 ; [.33CA.0020.0002][.33ED.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW DO>
+AAB6 AA92 ; [.33CA.0020.0002][.33EE.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW DO>
+AAB9 AA92 ; [.33CA.0020.0002][.33F1.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW DO>
+AABB AA92 ; [.33CA.0020.0002][.33F3.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW DO>
+AABC AA92 ; [.33CA.0020.0002][.33F4.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW DO>
+AA93 ; [.33CB.0020.0002] # TAI VIET LETTER HIGH DO
+AAB5 AA93 ; [.33CB.0020.0002][.33ED.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH DO>
+AAB6 AA93 ; [.33CB.0020.0002][.33EE.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH DO>
+AAB9 AA93 ; [.33CB.0020.0002][.33F1.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH DO>
+AABB AA93 ; [.33CB.0020.0002][.33F3.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH DO>
+AABC AA93 ; [.33CB.0020.0002][.33F4.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH DO>
+AA94 ; [.33CC.0020.0002] # TAI VIET LETTER LOW TO
+AAB5 AA94 ; [.33CC.0020.0002][.33ED.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW TO>
+AAB6 AA94 ; [.33CC.0020.0002][.33EE.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW TO>
+AAB9 AA94 ; [.33CC.0020.0002][.33F1.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW TO>
+AABB AA94 ; [.33CC.0020.0002][.33F3.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW TO>
+AABC AA94 ; [.33CC.0020.0002][.33F4.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW TO>
+AA95 ; [.33CD.0020.0002] # TAI VIET LETTER HIGH TO
+AAB5 AA95 ; [.33CD.0020.0002][.33ED.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH TO>
+AAB6 AA95 ; [.33CD.0020.0002][.33EE.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH TO>
+AAB9 AA95 ; [.33CD.0020.0002][.33F1.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH TO>
+AABB AA95 ; [.33CD.0020.0002][.33F3.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH TO>
+AABC AA95 ; [.33CD.0020.0002][.33F4.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH TO>
+AA96 ; [.33CE.0020.0002] # TAI VIET LETTER LOW THO
+AAB5 AA96 ; [.33CE.0020.0002][.33ED.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW THO>
+AAB6 AA96 ; [.33CE.0020.0002][.33EE.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW THO>
+AAB9 AA96 ; [.33CE.0020.0002][.33F1.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW THO>
+AABB AA96 ; [.33CE.0020.0002][.33F3.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW THO>
+AABC AA96 ; [.33CE.0020.0002][.33F4.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW THO>
+AA97 ; [.33CF.0020.0002] # TAI VIET LETTER HIGH THO
+AAB5 AA97 ; [.33CF.0020.0002][.33ED.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH THO>
+AAB6 AA97 ; [.33CF.0020.0002][.33EE.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH THO>
+AAB9 AA97 ; [.33CF.0020.0002][.33F1.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH THO>
+AABB AA97 ; [.33CF.0020.0002][.33F3.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH THO>
+AABC AA97 ; [.33CF.0020.0002][.33F4.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH THO>
+AA98 ; [.33D0.0020.0002] # TAI VIET LETTER LOW NO
+AAB5 AA98 ; [.33D0.0020.0002][.33ED.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW NO>
+AAB6 AA98 ; [.33D0.0020.0002][.33EE.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW NO>
+AAB9 AA98 ; [.33D0.0020.0002][.33F1.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW NO>
+AABB AA98 ; [.33D0.0020.0002][.33F3.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW NO>
+AABC AA98 ; [.33D0.0020.0002][.33F4.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW NO>
+AA99 ; [.33D1.0020.0002] # TAI VIET LETTER HIGH NO
+AAB5 AA99 ; [.33D1.0020.0002][.33ED.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH NO>
+AAB6 AA99 ; [.33D1.0020.0002][.33EE.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH NO>
+AAB9 AA99 ; [.33D1.0020.0002][.33F1.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH NO>
+AABB AA99 ; [.33D1.0020.0002][.33F3.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH NO>
+AABC AA99 ; [.33D1.0020.0002][.33F4.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH NO>
+AA9A ; [.33D2.0020.0002] # TAI VIET LETTER LOW BO
+AAB5 AA9A ; [.33D2.0020.0002][.33ED.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW BO>
+AAB6 AA9A ; [.33D2.0020.0002][.33EE.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW BO>
+AAB9 AA9A ; [.33D2.0020.0002][.33F1.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW BO>
+AABB AA9A ; [.33D2.0020.0002][.33F3.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW BO>
+AABC AA9A ; [.33D2.0020.0002][.33F4.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW BO>
+AA9B ; [.33D3.0020.0002] # TAI VIET LETTER HIGH BO
+AAB5 AA9B ; [.33D3.0020.0002][.33ED.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH BO>
+AAB6 AA9B ; [.33D3.0020.0002][.33EE.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH BO>
+AAB9 AA9B ; [.33D3.0020.0002][.33F1.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH BO>
+AABB AA9B ; [.33D3.0020.0002][.33F3.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH BO>
+AABC AA9B ; [.33D3.0020.0002][.33F4.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH BO>
+AA9C ; [.33D4.0020.0002] # TAI VIET LETTER LOW PO
+AAB5 AA9C ; [.33D4.0020.0002][.33ED.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW PO>
+AAB6 AA9C ; [.33D4.0020.0002][.33EE.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW PO>
+AAB9 AA9C ; [.33D4.0020.0002][.33F1.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW PO>
+AABB AA9C ; [.33D4.0020.0002][.33F3.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW PO>
+AABC AA9C ; [.33D4.0020.0002][.33F4.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW PO>
+AA9D ; [.33D5.0020.0002] # TAI VIET LETTER HIGH PO
+AAB5 AA9D ; [.33D5.0020.0002][.33ED.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH PO>
+AAB6 AA9D ; [.33D5.0020.0002][.33EE.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH PO>
+AAB9 AA9D ; [.33D5.0020.0002][.33F1.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH PO>
+AABB AA9D ; [.33D5.0020.0002][.33F3.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH PO>
+AABC AA9D ; [.33D5.0020.0002][.33F4.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH PO>
+AA9E ; [.33D6.0020.0002] # TAI VIET LETTER LOW PHO
+AAB5 AA9E ; [.33D6.0020.0002][.33ED.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW PHO>
+AAB6 AA9E ; [.33D6.0020.0002][.33EE.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW PHO>
+AAB9 AA9E ; [.33D6.0020.0002][.33F1.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW PHO>
+AABB AA9E ; [.33D6.0020.0002][.33F3.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW PHO>
+AABC AA9E ; [.33D6.0020.0002][.33F4.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW PHO>
+AA9F ; [.33D7.0020.0002] # TAI VIET LETTER HIGH PHO
+AAB5 AA9F ; [.33D7.0020.0002][.33ED.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH PHO>
+AAB6 AA9F ; [.33D7.0020.0002][.33EE.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH PHO>
+AAB9 AA9F ; [.33D7.0020.0002][.33F1.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH PHO>
+AABB AA9F ; [.33D7.0020.0002][.33F3.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH PHO>
+AABC AA9F ; [.33D7.0020.0002][.33F4.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH PHO>
+AAA0 ; [.33D8.0020.0002] # TAI VIET LETTER LOW FO
+AAB5 AAA0 ; [.33D8.0020.0002][.33ED.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW FO>
+AAB6 AAA0 ; [.33D8.0020.0002][.33EE.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW FO>
+AAB9 AAA0 ; [.33D8.0020.0002][.33F1.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW FO>
+AABB AAA0 ; [.33D8.0020.0002][.33F3.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW FO>
+AABC AAA0 ; [.33D8.0020.0002][.33F4.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW FO>
+AAA1 ; [.33D9.0020.0002] # TAI VIET LETTER HIGH FO
+AAB5 AAA1 ; [.33D9.0020.0002][.33ED.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH FO>
+AAB6 AAA1 ; [.33D9.0020.0002][.33EE.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH FO>
+AAB9 AAA1 ; [.33D9.0020.0002][.33F1.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH FO>
+AABB AAA1 ; [.33D9.0020.0002][.33F3.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH FO>
+AABC AAA1 ; [.33D9.0020.0002][.33F4.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH FO>
+AAA2 ; [.33DA.0020.0002] # TAI VIET LETTER LOW MO
+AAB5 AAA2 ; [.33DA.0020.0002][.33ED.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW MO>
+AAB6 AAA2 ; [.33DA.0020.0002][.33EE.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW MO>
+AAB9 AAA2 ; [.33DA.0020.0002][.33F1.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW MO>
+AABB AAA2 ; [.33DA.0020.0002][.33F3.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW MO>
+AABC AAA2 ; [.33DA.0020.0002][.33F4.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW MO>
+AAA3 ; [.33DB.0020.0002] # TAI VIET LETTER HIGH MO
+AAB5 AAA3 ; [.33DB.0020.0002][.33ED.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH MO>
+AAB6 AAA3 ; [.33DB.0020.0002][.33EE.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH MO>
+AAB9 AAA3 ; [.33DB.0020.0002][.33F1.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH MO>
+AABB AAA3 ; [.33DB.0020.0002][.33F3.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH MO>
+AABC AAA3 ; [.33DB.0020.0002][.33F4.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH MO>
+AAA4 ; [.33DC.0020.0002] # TAI VIET LETTER LOW YO
+AAB5 AAA4 ; [.33DC.0020.0002][.33ED.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW YO>
+AAB6 AAA4 ; [.33DC.0020.0002][.33EE.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW YO>
+AAB9 AAA4 ; [.33DC.0020.0002][.33F1.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW YO>
+AABB AAA4 ; [.33DC.0020.0002][.33F3.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW YO>
+AABC AAA4 ; [.33DC.0020.0002][.33F4.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW YO>
+AAA5 ; [.33DD.0020.0002] # TAI VIET LETTER HIGH YO
+AAB5 AAA5 ; [.33DD.0020.0002][.33ED.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH YO>
+AAB6 AAA5 ; [.33DD.0020.0002][.33EE.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH YO>
+AAB9 AAA5 ; [.33DD.0020.0002][.33F1.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH YO>
+AABB AAA5 ; [.33DD.0020.0002][.33F3.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH YO>
+AABC AAA5 ; [.33DD.0020.0002][.33F4.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH YO>
+AAA6 ; [.33DE.0020.0002] # TAI VIET LETTER LOW RO
+AAB5 AAA6 ; [.33DE.0020.0002][.33ED.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW RO>
+AAB6 AAA6 ; [.33DE.0020.0002][.33EE.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW RO>
+AAB9 AAA6 ; [.33DE.0020.0002][.33F1.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW RO>
+AABB AAA6 ; [.33DE.0020.0002][.33F3.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW RO>
+AABC AAA6 ; [.33DE.0020.0002][.33F4.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW RO>
+AAA7 ; [.33DF.0020.0002] # TAI VIET LETTER HIGH RO
+AAB5 AAA7 ; [.33DF.0020.0002][.33ED.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH RO>
+AAB6 AAA7 ; [.33DF.0020.0002][.33EE.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH RO>
+AAB9 AAA7 ; [.33DF.0020.0002][.33F1.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH RO>
+AABB AAA7 ; [.33DF.0020.0002][.33F3.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH RO>
+AABC AAA7 ; [.33DF.0020.0002][.33F4.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH RO>
+AAA8 ; [.33E0.0020.0002] # TAI VIET LETTER LOW LO
+AAB5 AAA8 ; [.33E0.0020.0002][.33ED.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW LO>
+AAB6 AAA8 ; [.33E0.0020.0002][.33EE.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW LO>
+AAB9 AAA8 ; [.33E0.0020.0002][.33F1.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW LO>
+AABB AAA8 ; [.33E0.0020.0002][.33F3.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW LO>
+AABC AAA8 ; [.33E0.0020.0002][.33F4.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW LO>
+AAA9 ; [.33E1.0020.0002] # TAI VIET LETTER HIGH LO
+AAB5 AAA9 ; [.33E1.0020.0002][.33ED.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH LO>
+AAB6 AAA9 ; [.33E1.0020.0002][.33EE.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH LO>
+AAB9 AAA9 ; [.33E1.0020.0002][.33F1.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH LO>
+AABB AAA9 ; [.33E1.0020.0002][.33F3.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH LO>
+AABC AAA9 ; [.33E1.0020.0002][.33F4.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH LO>
+AAAA ; [.33E2.0020.0002] # TAI VIET LETTER LOW VO
+AAB5 AAAA ; [.33E2.0020.0002][.33ED.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW VO>
+AAB6 AAAA ; [.33E2.0020.0002][.33EE.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW VO>
+AAB9 AAAA ; [.33E2.0020.0002][.33F1.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW VO>
+AABB AAAA ; [.33E2.0020.0002][.33F3.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW VO>
+AABC AAAA ; [.33E2.0020.0002][.33F4.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW VO>
+AAAB ; [.33E3.0020.0002] # TAI VIET LETTER HIGH VO
+AAB5 AAAB ; [.33E3.0020.0002][.33ED.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH VO>
+AAB6 AAAB ; [.33E3.0020.0002][.33EE.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH VO>
+AAB9 AAAB ; [.33E3.0020.0002][.33F1.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH VO>
+AABB AAAB ; [.33E3.0020.0002][.33F3.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH VO>
+AABC AAAB ; [.33E3.0020.0002][.33F4.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH VO>
+AAAC ; [.33E4.0020.0002] # TAI VIET LETTER LOW HO
+AAB5 AAAC ; [.33E4.0020.0002][.33ED.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW HO>
+AAB6 AAAC ; [.33E4.0020.0002][.33EE.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW HO>
+AAB9 AAAC ; [.33E4.0020.0002][.33F1.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW HO>
+AABB AAAC ; [.33E4.0020.0002][.33F3.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW HO>
+AABC AAAC ; [.33E4.0020.0002][.33F4.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW HO>
+AAAD ; [.33E5.0020.0002] # TAI VIET LETTER HIGH HO
+AAB5 AAAD ; [.33E5.0020.0002][.33ED.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH HO>
+AAB6 AAAD ; [.33E5.0020.0002][.33EE.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH HO>
+AAB9 AAAD ; [.33E5.0020.0002][.33F1.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH HO>
+AABB AAAD ; [.33E5.0020.0002][.33F3.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH HO>
+AABC AAAD ; [.33E5.0020.0002][.33F4.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH HO>
+AAAE ; [.33E6.0020.0002] # TAI VIET LETTER LOW O
+AAB5 AAAE ; [.33E6.0020.0002][.33ED.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER LOW O>
+AAB6 AAAE ; [.33E6.0020.0002][.33EE.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER LOW O>
+AAB9 AAAE ; [.33E6.0020.0002][.33F1.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER LOW O>
+AABB AAAE ; [.33E6.0020.0002][.33F3.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER LOW O>
+AABC AAAE ; [.33E6.0020.0002][.33F4.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER LOW O>
+AAAF ; [.33E7.0020.0002] # TAI VIET LETTER HIGH O
+AAB5 AAAF ; [.33E7.0020.0002][.33ED.0020.0002] # <TAI VIET VOWEL E, TAI VIET LETTER HIGH O>
+AAB6 AAAF ; [.33E7.0020.0002][.33EE.0020.0002] # <TAI VIET VOWEL O, TAI VIET LETTER HIGH O>
+AAB9 AAAF ; [.33E7.0020.0002][.33F1.0020.0002] # <TAI VIET VOWEL UEA, TAI VIET LETTER HIGH O>
+AABB AAAF ; [.33E7.0020.0002][.33F3.0020.0002] # <TAI VIET VOWEL AUE, TAI VIET LETTER HIGH O>
+AABC AAAF ; [.33E7.0020.0002][.33F4.0020.0002] # <TAI VIET VOWEL AY, TAI VIET LETTER HIGH O>
+AAB0 ; [.33E8.0020.0002] # TAI VIET MAI KANG
+AAB1 ; [.33E9.0020.0002] # TAI VIET VOWEL AA
+AAB2 ; [.33EA.0020.0002] # TAI VIET VOWEL I
+AAB3 ; [.33EB.0020.0002] # TAI VIET VOWEL UE
+AAB4 ; [.33EC.0020.0002] # TAI VIET VOWEL U
+AAB5 ; [.33ED.0020.0002] # TAI VIET VOWEL E
+AAB6 ; [.33EE.0020.0002] # TAI VIET VOWEL O
+AAB7 ; [.33EF.0020.0002] # TAI VIET MAI KHIT
+AAB8 ; [.33F0.0020.0002] # TAI VIET VOWEL IA
+AAB9 ; [.33F1.0020.0002] # TAI VIET VOWEL UEA
+AABA ; [.33F2.0020.0002] # TAI VIET VOWEL UA
+AABB ; [.33F3.0020.0002] # TAI VIET VOWEL AUE
+AABC ; [.33F4.0020.0002] # TAI VIET VOWEL AY
+AABD ; [.33F5.0020.0002] # TAI VIET VOWEL AN
+AABE ; [.33F6.0020.0002] # TAI VIET VOWEL AM
+AAC0 ; [.33F7.0020.0002] # TAI VIET TONE MAI NUENG
+AAC2 ; [.33F8.0020.0002] # TAI VIET TONE MAI SONG
+AADB ; [.33F9.0020.0002] # TAI VIET SYMBOL KON
+AADC ; [.33FA.0020.0002] # TAI VIET SYMBOL NUENG
+0F40 ; [.33FB.0020.0002] # TIBETAN LETTER KA
+0F69 ; [.33FB.0020.0002][.343C.0020.0002] # TIBETAN LETTER KSSA
+0F90 ; [.33FC.0020.0002] # TIBETAN SUBJOINED LETTER KA
+0FB9 ; [.33FC.0020.0002][.343C.0020.0002] # TIBETAN SUBJOINED LETTER KSSA
+0F6B ; [.33FD.0020.0002] # TIBETAN LETTER KKA
+0F41 ; [.33FE.0020.0002] # TIBETAN LETTER KHA
+0F91 ; [.33FF.0020.0002] # TIBETAN SUBJOINED LETTER KHA
+0F42 ; [.3400.0020.0002] # TIBETAN LETTER GA
+0F43 ; [.3400.0020.0002][.3440.0020.0002] # TIBETAN LETTER GHA
+0F92 ; [.3401.0020.0002] # TIBETAN SUBJOINED LETTER GA
+0F93 ; [.3401.0020.0002][.3440.0020.0002] # TIBETAN SUBJOINED LETTER GHA
+0F44 ; [.3402.0020.0002] # TIBETAN LETTER NGA
+0F94 ; [.3403.0020.0002] # TIBETAN SUBJOINED LETTER NGA
+0F45 ; [.3404.0020.0002] # TIBETAN LETTER CA
+0F95 ; [.3405.0020.0002] # TIBETAN SUBJOINED LETTER CA
+0F46 ; [.3406.0020.0002] # TIBETAN LETTER CHA
+0F96 ; [.3407.0020.0002] # TIBETAN SUBJOINED LETTER CHA
+0F47 ; [.3408.0020.0002] # TIBETAN LETTER JA
+0F97 ; [.3409.0020.0002] # TIBETAN SUBJOINED LETTER JA
+0F49 ; [.340A.0020.0002] # TIBETAN LETTER NYA
+0F99 ; [.340B.0020.0002] # TIBETAN SUBJOINED LETTER NYA
+0F4A ; [.340C.0020.0002] # TIBETAN LETTER TTA
+0F9A ; [.340D.0020.0002] # TIBETAN SUBJOINED LETTER TTA
+0F4B ; [.340E.0020.0002] # TIBETAN LETTER TTHA
+0F9B ; [.340F.0020.0002] # TIBETAN SUBJOINED LETTER TTHA
+0F4C ; [.3410.0020.0002] # TIBETAN LETTER DDA
+0F4D ; [.3410.0020.0002][.3440.0020.0002] # TIBETAN LETTER DDHA
+0F9C ; [.3411.0020.0002] # TIBETAN SUBJOINED LETTER DDA
+0F9D ; [.3411.0020.0002][.3440.0020.0002] # TIBETAN SUBJOINED LETTER DDHA
+0F4E ; [.3412.0020.0002] # TIBETAN LETTER NNA
+0F9E ; [.3413.0020.0002] # TIBETAN SUBJOINED LETTER NNA
+0F4F ; [.3414.0020.0002] # TIBETAN LETTER TA
+0F9F ; [.3415.0020.0002] # TIBETAN SUBJOINED LETTER TA
+0F50 ; [.3416.0020.0002] # TIBETAN LETTER THA
+0FA0 ; [.3417.0020.0002] # TIBETAN SUBJOINED LETTER THA
+0F51 ; [.3418.0020.0002] # TIBETAN LETTER DA
+0F52 ; [.3418.0020.0002][.3440.0020.0002] # TIBETAN LETTER DHA
+0FA1 ; [.3419.0020.0002] # TIBETAN SUBJOINED LETTER DA
+0FA2 ; [.3419.0020.0002][.3440.0020.0002] # TIBETAN SUBJOINED LETTER DHA
+0F53 ; [.341A.0020.0002] # TIBETAN LETTER NA
+0FA3 ; [.341B.0020.0002] # TIBETAN SUBJOINED LETTER NA
+0F54 ; [.341C.0020.0002] # TIBETAN LETTER PA
+0FA4 ; [.341D.0020.0002] # TIBETAN SUBJOINED LETTER PA
+0F55 ; [.341E.0020.0002] # TIBETAN LETTER PHA
+0FA5 ; [.341F.0020.0002] # TIBETAN SUBJOINED LETTER PHA
+0F56 ; [.3420.0020.0002] # TIBETAN LETTER BA
+0F57 ; [.3420.0020.0002][.3440.0020.0002] # TIBETAN LETTER BHA
+0FA6 ; [.3421.0020.0002] # TIBETAN SUBJOINED LETTER BA
+0FA7 ; [.3421.0020.0002][.3440.0020.0002] # TIBETAN SUBJOINED LETTER BHA
+0F58 ; [.3422.0020.0002] # TIBETAN LETTER MA
+0FA8 ; [.3423.0020.0002] # TIBETAN SUBJOINED LETTER MA
+0F59 ; [.3424.0020.0002] # TIBETAN LETTER TSA
+0FA9 ; [.3425.0020.0002] # TIBETAN SUBJOINED LETTER TSA
+0F5A ; [.3426.0020.0002] # TIBETAN LETTER TSHA
+0FAA ; [.3427.0020.0002] # TIBETAN SUBJOINED LETTER TSHA
+0F5B ; [.3428.0020.0002] # TIBETAN LETTER DZA
+0F5C ; [.3428.0020.0002][.3440.0020.0002] # TIBETAN LETTER DZHA
+0FAB ; [.3429.0020.0002] # TIBETAN SUBJOINED LETTER DZA
+0FAC ; [.3429.0020.0002][.3440.0020.0002] # TIBETAN SUBJOINED LETTER DZHA
+0F5D ; [.342A.0020.0002] # TIBETAN LETTER WA
+0FAD ; [.342B.0020.0002] # TIBETAN SUBJOINED LETTER WA
+0FBA ; [.342B.0020.0004][.0000.0119.0004] # TIBETAN SUBJOINED LETTER FIXED-FORM WA
+0F5E ; [.342C.0020.0002] # TIBETAN LETTER ZHA
+0FAE ; [.342D.0020.0002] # TIBETAN SUBJOINED LETTER ZHA
+0F5F ; [.342E.0020.0002] # TIBETAN LETTER ZA
+0FAF ; [.342F.0020.0002] # TIBETAN SUBJOINED LETTER ZA
+0F60 ; [.3430.0020.0002] # TIBETAN LETTER -A
+0FB0 ; [.3431.0020.0002] # TIBETAN SUBJOINED LETTER -A
+0F61 ; [.3432.0020.0002] # TIBETAN LETTER YA
+0FB1 ; [.3433.0020.0002] # TIBETAN SUBJOINED LETTER YA
+0FBB ; [.3433.0020.0004][.0000.0119.0004] # TIBETAN SUBJOINED LETTER FIXED-FORM YA
+0F62 ; [.3434.0020.0002] # TIBETAN LETTER RA
+0F6A ; [.3434.0020.0004][.0000.0119.0004] # TIBETAN LETTER FIXED-FORM RA
+0FB2 ; [.3435.0020.0002] # TIBETAN SUBJOINED LETTER RA
+0FBC ; [.3435.0020.0004][.0000.0119.0004] # TIBETAN SUBJOINED LETTER FIXED-FORM RA
+0F6C ; [.3436.0020.0002] # TIBETAN LETTER RRA
+0F63 ; [.3437.0020.0002] # TIBETAN LETTER LA
+0FB3 ; [.3438.0020.0002] # TIBETAN SUBJOINED LETTER LA
+0F64 ; [.3439.0020.0002] # TIBETAN LETTER SHA
+0FB4 ; [.343A.0020.0002] # TIBETAN SUBJOINED LETTER SHA
+0F65 ; [.343B.0020.0002] # TIBETAN LETTER SSA
+0FB5 ; [.343C.0020.0002] # TIBETAN SUBJOINED LETTER SSA
+0F66 ; [.343D.0020.0002] # TIBETAN LETTER SA
+0FB6 ; [.343E.0020.0002] # TIBETAN SUBJOINED LETTER SA
+0F67 ; [.343F.0020.0002] # TIBETAN LETTER HA
+0FB7 ; [.3440.0020.0002] # TIBETAN SUBJOINED LETTER HA
+0F68 ; [.3441.0020.0002] # TIBETAN LETTER A
+0F00 ; [.3441.0020.0004][.3458.0020.0004][.0000.00C4.0004] # TIBETAN SYLLABLE OM
+0FB8 ; [.3442.0020.0002] # TIBETAN SUBJOINED LETTER A
+0F88 ; [.3443.0020.0002] # TIBETAN SIGN LCE TSA CAN
+0F8D ; [.3444.0020.0002] # TIBETAN SUBJOINED SIGN LCE TSA CAN
+0F89 ; [.3445.0020.0002] # TIBETAN SIGN MCHU CAN
+0F8E ; [.3446.0020.0002] # TIBETAN SUBJOINED SIGN MCHU CAN
+0F8C ; [.3447.0020.0002] # TIBETAN SIGN INVERTED MCHU CAN
+0F8F ; [.3448.0020.0002] # TIBETAN SUBJOINED SIGN INVERTED MCHU CAN
+0F8A ; [.3449.0020.0002] # TIBETAN SIGN GRU CAN RGYINGS
+0F8B ; [.344A.0020.0002] # TIBETAN SIGN GRU MED RGYINGS
+0F71 ; [.344B.0020.0002] # TIBETAN VOWEL SIGN AA
+0F72 ; [.344C.0020.0002] # TIBETAN VOWEL SIGN I
+0F73 ; [.344D.0020.0002] # TIBETAN VOWEL SIGN II
+0F71 0F72 ; [.344D.0020.0002] # TIBETAN VOWEL SIGN II
+0F80 ; [.344E.0020.0002] # TIBETAN VOWEL SIGN REVERSED I
+0F81 ; [.344F.0020.0002] # TIBETAN VOWEL SIGN REVERSED II
+0F71 0F80 ; [.344F.0020.0002] # TIBETAN VOWEL SIGN REVERSED II
+0F74 ; [.3450.0020.0002] # TIBETAN VOWEL SIGN U
+0F75 ; [.3451.0020.0002] # TIBETAN VOWEL SIGN UU
+0F71 0F74 ; [.3451.0020.0002] # TIBETAN VOWEL SIGN UU
+0F76 ; [.3452.0020.0002] # TIBETAN VOWEL SIGN VOCALIC R
+0FB2 0F80 ; [.3452.0020.0002] # TIBETAN VOWEL SIGN VOCALIC R
+0F77 ; [.3453.0020.0002] # TIBETAN VOWEL SIGN VOCALIC RR
+0FB2 0F71 0F80 ; [.3453.0020.0002] # TIBETAN VOWEL SIGN VOCALIC RR
+0FB2 0F81 ; [.3453.0020.0002] # TIBETAN VOWEL SIGN VOCALIC RR
+0F78 ; [.3454.0020.0002] # TIBETAN VOWEL SIGN VOCALIC L
+0FB3 0F80 ; [.3454.0020.0002] # TIBETAN VOWEL SIGN VOCALIC L
+0F79 ; [.3455.0020.0002] # TIBETAN VOWEL SIGN VOCALIC LL
+0FB3 0F71 0F80 ; [.3455.0020.0002] # TIBETAN VOWEL SIGN VOCALIC LL
+0FB3 0F81 ; [.3455.0020.0002] # TIBETAN VOWEL SIGN VOCALIC LL
+0F7A ; [.3456.0020.0002] # TIBETAN VOWEL SIGN E
+0F7B ; [.3457.0020.0002] # TIBETAN VOWEL SIGN EE
+0F7C ; [.3458.0020.0002] # TIBETAN VOWEL SIGN O
+0F7D ; [.3459.0020.0002] # TIBETAN VOWEL SIGN OO
+0F84 ; [.345A.0020.0002] # TIBETAN MARK HALANTA
+11A0B ; [.345B.0020.0002] # ZANABAZAR SQUARE LETTER KA
+11A32 ; [.345C.0020.0002] # ZANABAZAR SQUARE LETTER KSSA
+11A0C ; [.345D.0020.0002] # ZANABAZAR SQUARE LETTER KHA
+11A0D ; [.345E.0020.0002] # ZANABAZAR SQUARE LETTER GA
+11A0E ; [.345F.0020.0002] # ZANABAZAR SQUARE LETTER GHA
+11A0F ; [.3460.0020.0002] # ZANABAZAR SQUARE LETTER NGA
+11A10 ; [.3461.0020.0002] # ZANABAZAR SQUARE LETTER CA
+11A11 ; [.3462.0020.0002] # ZANABAZAR SQUARE LETTER CHA
+11A12 ; [.3463.0020.0002] # ZANABAZAR SQUARE LETTER JA
+11A13 ; [.3464.0020.0002] # ZANABAZAR SQUARE LETTER NYA
+11A14 ; [.3465.0020.0002] # ZANABAZAR SQUARE LETTER TTA
+11A15 ; [.3466.0020.0002] # ZANABAZAR SQUARE LETTER TTHA
+11A16 ; [.3467.0020.0002] # ZANABAZAR SQUARE LETTER DDA
+11A17 ; [.3468.0020.0002] # ZANABAZAR SQUARE LETTER DDHA
+11A18 ; [.3469.0020.0002] # ZANABAZAR SQUARE LETTER NNA
+11A19 ; [.346A.0020.0002] # ZANABAZAR SQUARE LETTER TA
+11A1A ; [.346B.0020.0002] # ZANABAZAR SQUARE LETTER THA
+11A1B ; [.346C.0020.0002] # ZANABAZAR SQUARE LETTER DA
+11A1C ; [.346D.0020.0002] # ZANABAZAR SQUARE LETTER DHA
+11A1D ; [.346E.0020.0002] # ZANABAZAR SQUARE LETTER NA
+11A1E ; [.346F.0020.0002] # ZANABAZAR SQUARE LETTER PA
+11A1F ; [.3470.0020.0002] # ZANABAZAR SQUARE LETTER PHA
+11A20 ; [.3471.0020.0002] # ZANABAZAR SQUARE LETTER BA
+11A21 ; [.3472.0020.0002] # ZANABAZAR SQUARE LETTER BHA
+11A22 ; [.3473.0020.0002] # ZANABAZAR SQUARE LETTER MA
+11A23 ; [.3474.0020.0002] # ZANABAZAR SQUARE LETTER TSA
+11A24 ; [.3475.0020.0002] # ZANABAZAR SQUARE LETTER TSHA
+11A25 ; [.3476.0020.0002] # ZANABAZAR SQUARE LETTER DZA
+11A26 ; [.3477.0020.0002] # ZANABAZAR SQUARE LETTER DZHA
+11A27 ; [.3478.0020.0002] # ZANABAZAR SQUARE LETTER ZHA
+11A28 ; [.3479.0020.0002] # ZANABAZAR SQUARE LETTER ZA
+11A29 ; [.347A.0020.0002] # ZANABAZAR SQUARE LETTER -A
+11A2A ; [.347B.0020.0002] # ZANABAZAR SQUARE LETTER YA
+11A3B ; [.347B.0020.0019] # ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA
+11A2B ; [.347C.0020.0002] # ZANABAZAR SQUARE LETTER RA
+11A3A ; [.347C.0020.0017] # ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA
+11A3C ; [.347C.0020.0019] # ZANABAZAR SQUARE CLUSTER-FINAL LETTER RA
+11A2C ; [.347D.0020.0002] # ZANABAZAR SQUARE LETTER LA
+11A3D ; [.347D.0020.0019] # ZANABAZAR SQUARE CLUSTER-FINAL LETTER LA
+11A2D ; [.347E.0020.0002] # ZANABAZAR SQUARE LETTER VA
+11A3E ; [.347E.0020.0019] # ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA
+11A2E ; [.347F.0020.0002] # ZANABAZAR SQUARE LETTER SHA
+11A2F ; [.3480.0020.0002] # ZANABAZAR SQUARE LETTER SSA
+11A30 ; [.3481.0020.0002] # ZANABAZAR SQUARE LETTER SA
+11A31 ; [.3482.0020.0002] # ZANABAZAR SQUARE LETTER HA
+11A00 ; [.3483.0020.0002] # ZANABAZAR SQUARE LETTER A
+11A01 ; [.3484.0020.0002] # ZANABAZAR SQUARE VOWEL SIGN I
+11A02 ; [.3485.0020.0002] # ZANABAZAR SQUARE VOWEL SIGN UE
+11A03 ; [.3486.0020.0002] # ZANABAZAR SQUARE VOWEL SIGN U
+11A04 ; [.3487.0020.0002] # ZANABAZAR SQUARE VOWEL SIGN E
+11A05 ; [.3488.0020.0002] # ZANABAZAR SQUARE VOWEL SIGN OE
+11A06 ; [.3489.0020.0002] # ZANABAZAR SQUARE VOWEL SIGN O
+11A07 ; [.348A.0020.0002] # ZANABAZAR SQUARE VOWEL SIGN AI
+11A08 ; [.348B.0020.0002] # ZANABAZAR SQUARE VOWEL SIGN AU
+11A09 ; [.348C.0020.0002] # ZANABAZAR SQUARE VOWEL SIGN REVERSED I
+11A0A ; [.348D.0020.0002] # ZANABAZAR SQUARE VOWEL LENGTH MARK
+11A34 ; [.348E.0020.0002] # ZANABAZAR SQUARE SIGN VIRAMA
+11A47 ; [.348F.0020.0002] # ZANABAZAR SQUARE SUBJOINER
+11A50 ; [.3490.0020.0002] # SOYOMBO LETTER A
+11A51 ; [.3491.0020.0002] # SOYOMBO VOWEL SIGN I
+11A52 ; [.3492.0020.0002] # SOYOMBO VOWEL SIGN UE
+11A53 ; [.3493.0020.0002] # SOYOMBO VOWEL SIGN U
+11A59 ; [.3494.0020.0002] # SOYOMBO VOWEL SIGN VOCALIC R
+11A5A ; [.3495.0020.0002] # SOYOMBO VOWEL SIGN VOCALIC L
+11A54 ; [.3496.0020.0002] # SOYOMBO VOWEL SIGN E
+11A56 ; [.3497.0020.0002] # SOYOMBO VOWEL SIGN OE
+11A55 ; [.3498.0020.0002] # SOYOMBO VOWEL SIGN O
+11A57 ; [.3499.0020.0002] # SOYOMBO VOWEL SIGN AI
+11A58 ; [.349A.0020.0002] # SOYOMBO VOWEL SIGN AU
+11A5B ; [.349B.0020.0002] # SOYOMBO VOWEL LENGTH MARK
+11A5C ; [.349C.0020.0002] # SOYOMBO LETTER KA
+11A8A ; [.349C.0020.0019] # SOYOMBO FINAL CONSONANT SIGN G
+11A83 ; [.349D.0020.0002] # SOYOMBO LETTER KSSA
+11A5D ; [.349E.0020.0002] # SOYOMBO LETTER KHA
+11A8B ; [.349E.0020.0019] # SOYOMBO FINAL CONSONANT SIGN K
+11A5E ; [.349F.0020.0002] # SOYOMBO LETTER GA
+11A5F ; [.34A0.0020.0002] # SOYOMBO LETTER GHA
+11A60 ; [.34A1.0020.0002] # SOYOMBO LETTER NGA
+11A8C ; [.34A1.0020.0019] # SOYOMBO FINAL CONSONANT SIGN NG
+11A61 ; [.34A2.0020.0002] # SOYOMBO LETTER CA
+11A62 ; [.34A3.0020.0002] # SOYOMBO LETTER CHA
+11A63 ; [.34A4.0020.0002] # SOYOMBO LETTER JA
+11A64 ; [.34A5.0020.0002] # SOYOMBO LETTER JHA
+11A65 ; [.34A6.0020.0002] # SOYOMBO LETTER NYA
+11A66 ; [.34A7.0020.0002] # SOYOMBO LETTER TTA
+11A67 ; [.34A8.0020.0002] # SOYOMBO LETTER TTHA
+11A68 ; [.34A9.0020.0002] # SOYOMBO LETTER DDA
+11A69 ; [.34AA.0020.0002] # SOYOMBO LETTER DDHA
+11A6A ; [.34AB.0020.0002] # SOYOMBO LETTER NNA
+11A6B ; [.34AC.0020.0002] # SOYOMBO LETTER TA
+11A8D ; [.34AC.0020.0019] # SOYOMBO FINAL CONSONANT SIGN D
+11A6C ; [.34AD.0020.0002] # SOYOMBO LETTER THA
+11A6D ; [.34AE.0020.0002] # SOYOMBO LETTER DA
+11A6E ; [.34AF.0020.0002] # SOYOMBO LETTER DHA
+11A6F ; [.34B0.0020.0002] # SOYOMBO LETTER NA
+11A8E ; [.34B0.0020.0019] # SOYOMBO FINAL CONSONANT SIGN N
+11A70 ; [.34B1.0020.0002] # SOYOMBO LETTER PA
+11A8F ; [.34B1.0020.0019] # SOYOMBO FINAL CONSONANT SIGN B
+11A71 ; [.34B2.0020.0002] # SOYOMBO LETTER PHA
+11A72 ; [.34B3.0020.0002] # SOYOMBO LETTER BA
+11A73 ; [.34B4.0020.0002] # SOYOMBO LETTER BHA
+11A74 ; [.34B5.0020.0002] # SOYOMBO LETTER MA
+11A90 ; [.34B5.0020.0019] # SOYOMBO FINAL CONSONANT SIGN M
+11A75 ; [.34B6.0020.0002] # SOYOMBO LETTER TSA
+11A76 ; [.34B7.0020.0002] # SOYOMBO LETTER TSHA
+11A77 ; [.34B8.0020.0002] # SOYOMBO LETTER DZA
+11A78 ; [.34B9.0020.0002] # SOYOMBO LETTER ZHA
+11A79 ; [.34BA.0020.0002] # SOYOMBO LETTER ZA
+11A7A ; [.34BB.0020.0002] # SOYOMBO LETTER -A
+11A95 ; [.34BB.0020.0019] # SOYOMBO FINAL CONSONANT SIGN -A
+11A7B ; [.34BC.0020.0002] # SOYOMBO LETTER YA
+11A7C ; [.34BD.0020.0002] # SOYOMBO LETTER RA
+11A86 ; [.34BD.0020.0017] # SOYOMBO CLUSTER-INITIAL LETTER RA
+11A91 ; [.34BD.0020.0019] # SOYOMBO FINAL CONSONANT SIGN R
+11A7D ; [.34BE.0020.0002] # SOYOMBO LETTER LA
+11A87 ; [.34BE.0020.0017] # SOYOMBO CLUSTER-INITIAL LETTER LA
+11A92 ; [.34BE.0020.0019] # SOYOMBO FINAL CONSONANT SIGN L
+11A7E ; [.34BF.0020.0002] # SOYOMBO LETTER VA
+11A7F ; [.34C0.0020.0002] # SOYOMBO LETTER SHA
+11A88 ; [.34C0.0020.0017] # SOYOMBO CLUSTER-INITIAL LETTER SHA
+11A93 ; [.34C0.0020.0019] # SOYOMBO FINAL CONSONANT SIGN SH
+11A80 ; [.34C1.0020.0002] # SOYOMBO LETTER SSA
+11A81 ; [.34C2.0020.0002] # SOYOMBO LETTER SA
+11A89 ; [.34C2.0020.0017] # SOYOMBO CLUSTER-INITIAL LETTER SA
+11A94 ; [.34C2.0020.0019] # SOYOMBO FINAL CONSONANT SIGN S
+11A82 ; [.34C3.0020.0002] # SOYOMBO LETTER HA
+11A84 ; [.34C4.0020.0002] # SOYOMBO SIGN JIHVAMULIYA
+11A85 ; [.34C5.0020.0002] # SOYOMBO SIGN UPADHMANIYA
+11A99 ; [.34C6.0020.0002] # SOYOMBO SUBJOINER
+11A9D ; [.34C7.0020.0002] # SOYOMBO MARK PLUTA
+11C72 ; [.34C8.0020.0002] # MARCHEN LETTER KA
+11C92 ; [.34C9.0020.0002] # MARCHEN SUBJOINED LETTER KA
+11C73 ; [.34CA.0020.0002] # MARCHEN LETTER KHA
+11C93 ; [.34CB.0020.0002] # MARCHEN SUBJOINED LETTER KHA
+11C74 ; [.34CC.0020.0002] # MARCHEN LETTER GA
+11C94 ; [.34CD.0020.0002] # MARCHEN SUBJOINED LETTER GA
+11C75 ; [.34CE.0020.0002] # MARCHEN LETTER NGA
+11C95 ; [.34CF.0020.0002] # MARCHEN SUBJOINED LETTER NGA
+11C76 ; [.34D0.0020.0002] # MARCHEN LETTER CA
+11C96 ; [.34D1.0020.0002] # MARCHEN SUBJOINED LETTER CA
+11C77 ; [.34D2.0020.0002] # MARCHEN LETTER CHA
+11C97 ; [.34D3.0020.0002] # MARCHEN SUBJOINED LETTER CHA
+11C78 ; [.34D4.0020.0002] # MARCHEN LETTER JA
+11C98 ; [.34D5.0020.0002] # MARCHEN SUBJOINED LETTER JA
+11C79 ; [.34D6.0020.0002] # MARCHEN LETTER NYA
+11C99 ; [.34D7.0020.0002] # MARCHEN SUBJOINED LETTER NYA
+11C7A ; [.34D8.0020.0002] # MARCHEN LETTER TA
+11C9A ; [.34D9.0020.0002] # MARCHEN SUBJOINED LETTER TA
+11C7B ; [.34DA.0020.0002] # MARCHEN LETTER THA
+11C9B ; [.34DB.0020.0002] # MARCHEN SUBJOINED LETTER THA
+11C7C ; [.34DC.0020.0002] # MARCHEN LETTER DA
+11C9C ; [.34DD.0020.0002] # MARCHEN SUBJOINED LETTER DA
+11C7D ; [.34DE.0020.0002] # MARCHEN LETTER NA
+11C9D ; [.34DF.0020.0002] # MARCHEN SUBJOINED LETTER NA
+11C7E ; [.34E0.0020.0002] # MARCHEN LETTER PA
+11C9E ; [.34E1.0020.0002] # MARCHEN SUBJOINED LETTER PA
+11C7F ; [.34E2.0020.0002] # MARCHEN LETTER PHA
+11C9F ; [.34E3.0020.0002] # MARCHEN SUBJOINED LETTER PHA
+11C80 ; [.34E4.0020.0002] # MARCHEN LETTER BA
+11CA0 ; [.34E5.0020.0002] # MARCHEN SUBJOINED LETTER BA
+11C81 ; [.34E6.0020.0002] # MARCHEN LETTER MA
+11CA1 ; [.34E7.0020.0002] # MARCHEN SUBJOINED LETTER MA
+11C82 ; [.34E8.0020.0002] # MARCHEN LETTER TSA
+11CA2 ; [.34E9.0020.0002] # MARCHEN SUBJOINED LETTER TSA
+11C83 ; [.34EA.0020.0002] # MARCHEN LETTER TSHA
+11CA3 ; [.34EB.0020.0002] # MARCHEN SUBJOINED LETTER TSHA
+11C84 ; [.34EC.0020.0002] # MARCHEN LETTER DZA
+11CA4 ; [.34ED.0020.0002] # MARCHEN SUBJOINED LETTER DZA
+11C85 ; [.34EE.0020.0002] # MARCHEN LETTER WA
+11CA5 ; [.34EF.0020.0002] # MARCHEN SUBJOINED LETTER WA
+11C86 ; [.34F0.0020.0002] # MARCHEN LETTER ZHA
+11CA6 ; [.34F1.0020.0002] # MARCHEN SUBJOINED LETTER ZHA
+11C87 ; [.34F2.0020.0002] # MARCHEN LETTER ZA
+11CA7 ; [.34F3.0020.0002] # MARCHEN SUBJOINED LETTER ZA
+11C88 ; [.34F4.0020.0002] # MARCHEN LETTER -A
+11C89 ; [.34F5.0020.0002] # MARCHEN LETTER YA
+11CA9 ; [.34F6.0020.0002] # MARCHEN SUBJOINED LETTER YA
+11C8A ; [.34F7.0020.0002] # MARCHEN LETTER RA
+11CAA ; [.34F8.0020.0002] # MARCHEN SUBJOINED LETTER RA
+11C8B ; [.34F9.0020.0002] # MARCHEN LETTER LA
+11CAB ; [.34FA.0020.0002] # MARCHEN SUBJOINED LETTER LA
+11C8C ; [.34FB.0020.0002] # MARCHEN LETTER SHA
+11CAC ; [.34FC.0020.0002] # MARCHEN SUBJOINED LETTER SHA
+11C8D ; [.34FD.0020.0002] # MARCHEN LETTER SA
+11CAD ; [.34FE.0020.0002] # MARCHEN SUBJOINED LETTER SA
+11C8E ; [.34FF.0020.0002] # MARCHEN LETTER HA
+11CAE ; [.3500.0020.0002] # MARCHEN SUBJOINED LETTER HA
+11C8F ; [.3501.0020.0002] # MARCHEN LETTER A
+11CAF ; [.3502.0020.0002] # MARCHEN SUBJOINED LETTER A
+11CB0 ; [.3503.0020.0002] # MARCHEN VOWEL SIGN AA
+11CB1 ; [.3504.0020.0002] # MARCHEN VOWEL SIGN I
+11CB2 ; [.3505.0020.0002] # MARCHEN VOWEL SIGN U
+11CB3 ; [.3506.0020.0002] # MARCHEN VOWEL SIGN E
+11CB4 ; [.3507.0020.0002] # MARCHEN VOWEL SIGN O
+1C00 ; [.3508.0020.0002] # LEPCHA LETTER KA
+1C01 ; [.3509.0020.0002] # LEPCHA LETTER KLA
+1C02 ; [.350A.0020.0002] # LEPCHA LETTER KHA
+1C03 ; [.350B.0020.0002] # LEPCHA LETTER GA
+1C04 ; [.350C.0020.0002] # LEPCHA LETTER GLA
+1C05 ; [.350D.0020.0002] # LEPCHA LETTER NGA
+1C06 ; [.350E.0020.0002] # LEPCHA LETTER CA
+1C07 ; [.350F.0020.0002] # LEPCHA LETTER CHA
+1C08 ; [.3510.0020.0002] # LEPCHA LETTER JA
+1C09 ; [.3511.0020.0002] # LEPCHA LETTER NYA
+1C4D ; [.3512.0020.0002] # LEPCHA LETTER TTA
+1C4E ; [.3513.0020.0002] # LEPCHA LETTER TTHA
+1C4F ; [.3514.0020.0002] # LEPCHA LETTER DDA
+1C0A ; [.3515.0020.0002] # LEPCHA LETTER TA
+1C0B ; [.3516.0020.0002] # LEPCHA LETTER THA
+1C0C ; [.3517.0020.0002] # LEPCHA LETTER DA
+1C0D ; [.3518.0020.0002] # LEPCHA LETTER NA
+1C0E ; [.3519.0020.0002] # LEPCHA LETTER PA
+1C0F ; [.351A.0020.0002] # LEPCHA LETTER PLA
+1C10 ; [.351B.0020.0002] # LEPCHA LETTER PHA
+1C11 ; [.351C.0020.0002] # LEPCHA LETTER FA
+1C12 ; [.351D.0020.0002] # LEPCHA LETTER FLA
+1C13 ; [.351E.0020.0002] # LEPCHA LETTER BA
+1C14 ; [.351F.0020.0002] # LEPCHA LETTER BLA
+1C15 ; [.3520.0020.0002] # LEPCHA LETTER MA
+1C16 ; [.3521.0020.0002] # LEPCHA LETTER MLA
+1C17 ; [.3522.0020.0002] # LEPCHA LETTER TSA
+1C18 ; [.3523.0020.0002] # LEPCHA LETTER TSHA
+1C19 ; [.3524.0020.0002] # LEPCHA LETTER DZA
+1C1A ; [.3525.0020.0002] # LEPCHA LETTER YA
+1C24 ; [.3526.0020.0002] # LEPCHA SUBJOINED LETTER YA
+1C1B ; [.3527.0020.0002] # LEPCHA LETTER RA
+1C25 ; [.3528.0020.0002] # LEPCHA SUBJOINED LETTER RA
+1C1C ; [.3529.0020.0002] # LEPCHA LETTER LA
+1C1D ; [.352A.0020.0002] # LEPCHA LETTER HA
+1C1E ; [.352B.0020.0002] # LEPCHA LETTER HLA
+1C1F ; [.352C.0020.0002] # LEPCHA LETTER VA
+1C20 ; [.352D.0020.0002] # LEPCHA LETTER SA
+1C21 ; [.352E.0020.0002] # LEPCHA LETTER SHA
+1C22 ; [.352F.0020.0002] # LEPCHA LETTER WA
+1C23 ; [.3530.0020.0002] # LEPCHA LETTER A
+1C36 ; [.3531.0020.0002] # LEPCHA SIGN RAN
+1C26 ; [.3532.0020.0002] # LEPCHA VOWEL SIGN AA
+1C27 ; [.3533.0020.0002] # LEPCHA VOWEL SIGN I
+1C28 ; [.3534.0020.0002] # LEPCHA VOWEL SIGN O
+1C29 ; [.3535.0020.0002] # LEPCHA VOWEL SIGN OO
+1C2A ; [.3536.0020.0002] # LEPCHA VOWEL SIGN U
+1C2B ; [.3537.0020.0002] # LEPCHA VOWEL SIGN UU
+1C2C ; [.3538.0020.0002] # LEPCHA VOWEL SIGN E
+1C2D ; [.3539.0020.0002] # LEPCHA CONSONANT SIGN K
+1C2E ; [.353A.0020.0002] # LEPCHA CONSONANT SIGN M
+1C2F ; [.353B.0020.0002] # LEPCHA CONSONANT SIGN L
+1C30 ; [.353C.0020.0002] # LEPCHA CONSONANT SIGN N
+1C31 ; [.353D.0020.0002] # LEPCHA CONSONANT SIGN P
+1C32 ; [.353E.0020.0002] # LEPCHA CONSONANT SIGN R
+1C33 ; [.353F.0020.0002] # LEPCHA CONSONANT SIGN T
+1C34 ; [.3540.0020.0002] # LEPCHA CONSONANT SIGN NYIN-DO
+1C35 ; [.3541.0020.0002] # LEPCHA CONSONANT SIGN KANG
+A840 ; [.3542.0020.0002] # PHAGS-PA LETTER KA
+A841 ; [.3543.0020.0002] # PHAGS-PA LETTER KHA
+A842 ; [.3544.0020.0002] # PHAGS-PA LETTER GA
+A843 ; [.3545.0020.0002] # PHAGS-PA LETTER NGA
+A844 ; [.3546.0020.0002] # PHAGS-PA LETTER CA
+A845 ; [.3547.0020.0002] # PHAGS-PA LETTER CHA
+A846 ; [.3548.0020.0002] # PHAGS-PA LETTER JA
+A847 ; [.3549.0020.0002] # PHAGS-PA LETTER NYA
+A869 ; [.354A.0020.0002] # PHAGS-PA LETTER TTA
+A86A ; [.354B.0020.0002] # PHAGS-PA LETTER TTHA
+A86B ; [.354C.0020.0002] # PHAGS-PA LETTER DDA
+A86C ; [.354D.0020.0002] # PHAGS-PA LETTER NNA
+A848 ; [.354E.0020.0002] # PHAGS-PA LETTER TA
+A849 ; [.354F.0020.0002] # PHAGS-PA LETTER THA
+A84A ; [.3550.0020.0002] # PHAGS-PA LETTER DA
+A84B ; [.3551.0020.0002] # PHAGS-PA LETTER NA
+A84C ; [.3552.0020.0002] # PHAGS-PA LETTER PA
+A84D ; [.3553.0020.0002] # PHAGS-PA LETTER PHA
+A84E ; [.3554.0020.0002] # PHAGS-PA LETTER BA
+A84F ; [.3555.0020.0002] # PHAGS-PA LETTER MA
+A850 ; [.3556.0020.0002] # PHAGS-PA LETTER TSA
+A851 ; [.3557.0020.0002] # PHAGS-PA LETTER TSHA
+A852 ; [.3558.0020.0002] # PHAGS-PA LETTER DZA
+A853 ; [.3559.0020.0002] # PHAGS-PA LETTER WA
+A867 ; [.355A.0020.0002] # PHAGS-PA SUBJOINED LETTER WA
+A854 ; [.355B.0020.0002] # PHAGS-PA LETTER ZHA
+A855 ; [.355C.0020.0002] # PHAGS-PA LETTER ZA
+A856 ; [.355D.0020.0002] # PHAGS-PA LETTER SMALL A
+A857 ; [.355E.0020.0002] # PHAGS-PA LETTER YA
+A868 ; [.355F.0020.0002] # PHAGS-PA SUBJOINED LETTER YA
+A86D ; [.3560.0020.0002] # PHAGS-PA LETTER ALTERNATE YA
+A858 ; [.3561.0020.0002] # PHAGS-PA LETTER RA
+A871 ; [.3562.0020.0002] # PHAGS-PA SUBJOINED LETTER RA
+A872 ; [.3563.0020.0002] # PHAGS-PA SUPERFIXED LETTER RA
+A859 ; [.3564.0020.0002] # PHAGS-PA LETTER LA
+A85A ; [.3565.0020.0002] # PHAGS-PA LETTER SHA
+A86E ; [.3566.0020.0002] # PHAGS-PA LETTER VOICELESS SHA
+A85B ; [.3567.0020.0002] # PHAGS-PA LETTER SA
+A85C ; [.3568.0020.0002] # PHAGS-PA LETTER HA
+A86F ; [.3569.0020.0002] # PHAGS-PA LETTER VOICED HA
+A870 ; [.356A.0020.0002] # PHAGS-PA LETTER ASPIRATED FA
+A85D ; [.356B.0020.0002] # PHAGS-PA LETTER A
+A862 ; [.356C.0020.0002] # PHAGS-PA LETTER QA
+A863 ; [.356D.0020.0002] # PHAGS-PA LETTER XA
+A864 ; [.356E.0020.0002] # PHAGS-PA LETTER FA
+A865 ; [.356F.0020.0002] # PHAGS-PA LETTER GGA
+A85E ; [.3570.0020.0002] # PHAGS-PA LETTER I
+A85F ; [.3571.0020.0002] # PHAGS-PA LETTER U
+A860 ; [.3572.0020.0002] # PHAGS-PA LETTER E
+A861 ; [.3573.0020.0002] # PHAGS-PA LETTER O
+A866 ; [.3574.0020.0002] # PHAGS-PA LETTER EE
+A873 ; [.3575.0020.0002] # PHAGS-PA LETTER CANDRABINDU
+1900 ; [.3576.0020.0002] # LIMBU VOWEL-CARRIER LETTER
+1901 ; [.3577.0020.0002] # LIMBU LETTER KA
+1902 ; [.3578.0020.0002] # LIMBU LETTER KHA
+1903 ; [.3579.0020.0002] # LIMBU LETTER GA
+1904 ; [.357A.0020.0002] # LIMBU LETTER GHA
+1905 ; [.357B.0020.0002] # LIMBU LETTER NGA
+1906 ; [.357C.0020.0002] # LIMBU LETTER CA
+1907 ; [.357D.0020.0002] # LIMBU LETTER CHA
+1908 ; [.357E.0020.0002] # LIMBU LETTER JA
+191D ; [.357E.0020.0004][.359C.0020.0004] # LIMBU LETTER GYAN
+1909 ; [.357F.0020.0002] # LIMBU LETTER JHA
+190A ; [.3580.0020.0002] # LIMBU LETTER YAN
+190B ; [.3581.0020.0002] # LIMBU LETTER TA
+191E ; [.3581.0020.0004][.359D.0020.0004] # LIMBU LETTER TRA
+190C ; [.3582.0020.0002] # LIMBU LETTER THA
+190D ; [.3583.0020.0002] # LIMBU LETTER DA
+190E ; [.3584.0020.0002] # LIMBU LETTER DHA
+190F ; [.3585.0020.0002] # LIMBU LETTER NA
+1910 ; [.3586.0020.0002] # LIMBU LETTER PA
+1911 ; [.3587.0020.0002] # LIMBU LETTER PHA
+1912 ; [.3588.0020.0002] # LIMBU LETTER BA
+1913 ; [.3589.0020.0002] # LIMBU LETTER BHA
+1914 ; [.358A.0020.0002] # LIMBU LETTER MA
+1915 ; [.358B.0020.0002] # LIMBU LETTER YA
+1916 ; [.358C.0020.0002] # LIMBU LETTER RA
+1917 ; [.358D.0020.0002] # LIMBU LETTER LA
+1918 ; [.358E.0020.0002] # LIMBU LETTER WA
+1919 ; [.358F.0020.0002] # LIMBU LETTER SHA
+191A ; [.3590.0020.0002] # LIMBU LETTER SSA
+191B ; [.3591.0020.0002] # LIMBU LETTER SA
+191C ; [.3592.0020.0002] # LIMBU LETTER HA
+1920 ; [.3593.0020.0002] # LIMBU VOWEL SIGN A
+1921 ; [.3594.0020.0002] # LIMBU VOWEL SIGN I
+1922 ; [.3595.0020.0002] # LIMBU VOWEL SIGN U
+1923 ; [.3596.0020.0002] # LIMBU VOWEL SIGN EE
+1924 ; [.3597.0020.0002] # LIMBU VOWEL SIGN AI
+1925 ; [.3598.0020.0002] # LIMBU VOWEL SIGN OO
+1926 ; [.3599.0020.0002] # LIMBU VOWEL SIGN AU
+1927 ; [.359A.0020.0002] # LIMBU VOWEL SIGN E
+1928 ; [.359B.0020.0002] # LIMBU VOWEL SIGN O
+1929 ; [.359C.0020.0002] # LIMBU SUBJOINED LETTER YA
+192A ; [.359D.0020.0002] # LIMBU SUBJOINED LETTER RA
+192B ; [.359E.0020.0002] # LIMBU SUBJOINED LETTER WA
+1930 ; [.359F.0020.0002] # LIMBU SMALL LETTER KA
+1931 ; [.35A0.0020.0002] # LIMBU SMALL LETTER NGA
+1932 ; [.35A1.0020.0002] # LIMBU SMALL LETTER ANUSVARA
+1933 ; [.35A2.0020.0002] # LIMBU SMALL LETTER TA
+1934 ; [.35A3.0020.0002] # LIMBU SMALL LETTER NA
+1935 ; [.35A4.0020.0002] # LIMBU SMALL LETTER PA
+1936 ; [.35A5.0020.0002] # LIMBU SMALL LETTER MA
+1937 ; [.35A6.0020.0002] # LIMBU SMALL LETTER RA
+1938 ; [.35A7.0020.0002] # LIMBU SMALL LETTER LA
+1700 ; [.35A8.0020.0002] # TAGALOG LETTER A
+1701 ; [.35A9.0020.0002] # TAGALOG LETTER I
+1702 ; [.35AA.0020.0002] # TAGALOG LETTER U
+1703 ; [.35AB.0020.0002] # TAGALOG LETTER KA
+1704 ; [.35AC.0020.0002] # TAGALOG LETTER GA
+1705 ; [.35AD.0020.0002] # TAGALOG LETTER NGA
+1706 ; [.35AE.0020.0002] # TAGALOG LETTER TA
+1707 ; [.35AF.0020.0002] # TAGALOG LETTER DA
+1708 ; [.35B0.0020.0002] # TAGALOG LETTER NA
+1709 ; [.35B1.0020.0002] # TAGALOG LETTER PA
+170A ; [.35B2.0020.0002] # TAGALOG LETTER BA
+170B ; [.35B3.0020.0002] # TAGALOG LETTER MA
+170C ; [.35B4.0020.0002] # TAGALOG LETTER YA
+170D ; [.35B5.0020.0002] # TAGALOG LETTER RA
+171F ; [.35B6.0020.0002] # TAGALOG LETTER ARCHAIC RA
+170E ; [.35B7.0020.0002] # TAGALOG LETTER LA
+170F ; [.35B8.0020.0002] # TAGALOG LETTER WA
+1710 ; [.35B9.0020.0002] # TAGALOG LETTER SA
+1711 ; [.35BA.0020.0002] # TAGALOG LETTER HA
+1712 ; [.35BB.0020.0002] # TAGALOG VOWEL SIGN I
+1713 ; [.35BC.0020.0002] # TAGALOG VOWEL SIGN U
+1714 ; [.35BD.0020.0002] # TAGALOG SIGN VIRAMA
+1715 ; [.35BE.0020.0002] # TAGALOG SIGN PAMUDPOD
+1720 ; [.35BF.0020.0002] # HANUNOO LETTER A
+1721 ; [.35C0.0020.0002] # HANUNOO LETTER I
+1722 ; [.35C1.0020.0002] # HANUNOO LETTER U
+1723 ; [.35C2.0020.0002] # HANUNOO LETTER KA
+1724 ; [.35C3.0020.0002] # HANUNOO LETTER GA
+1725 ; [.35C4.0020.0002] # HANUNOO LETTER NGA
+1726 ; [.35C5.0020.0002] # HANUNOO LETTER TA
+1727 ; [.35C6.0020.0002] # HANUNOO LETTER DA
+1728 ; [.35C7.0020.0002] # HANUNOO LETTER NA
+1729 ; [.35C8.0020.0002] # HANUNOO LETTER PA
+172A ; [.35C9.0020.0002] # HANUNOO LETTER BA
+172B ; [.35CA.0020.0002] # HANUNOO LETTER MA
+172C ; [.35CB.0020.0002] # HANUNOO LETTER YA
+172D ; [.35CC.0020.0002] # HANUNOO LETTER RA
+172E ; [.35CD.0020.0002] # HANUNOO LETTER LA
+172F ; [.35CE.0020.0002] # HANUNOO LETTER WA
+1730 ; [.35CF.0020.0002] # HANUNOO LETTER SA
+1731 ; [.35D0.0020.0002] # HANUNOO LETTER HA
+1732 ; [.35D1.0020.0002] # HANUNOO VOWEL SIGN I
+1733 ; [.35D2.0020.0002] # HANUNOO VOWEL SIGN U
+1734 ; [.35D3.0020.0002] # HANUNOO SIGN PAMUDPOD
+1740 ; [.35D4.0020.0002] # BUHID LETTER A
+1741 ; [.35D5.0020.0002] # BUHID LETTER I
+1742 ; [.35D6.0020.0002] # BUHID LETTER U
+1743 ; [.35D7.0020.0002] # BUHID LETTER KA
+1744 ; [.35D8.0020.0002] # BUHID LETTER GA
+1745 ; [.35D9.0020.0002] # BUHID LETTER NGA
+1746 ; [.35DA.0020.0002] # BUHID LETTER TA
+1747 ; [.35DB.0020.0002] # BUHID LETTER DA
+1748 ; [.35DC.0020.0002] # BUHID LETTER NA
+1749 ; [.35DD.0020.0002] # BUHID LETTER PA
+174A ; [.35DE.0020.0002] # BUHID LETTER BA
+174B ; [.35DF.0020.0002] # BUHID LETTER MA
+174C ; [.35E0.0020.0002] # BUHID LETTER YA
+174D ; [.35E1.0020.0002] # BUHID LETTER RA
+174E ; [.35E2.0020.0002] # BUHID LETTER LA
+174F ; [.35E3.0020.0002] # BUHID LETTER WA
+1750 ; [.35E4.0020.0002] # BUHID LETTER SA
+1751 ; [.35E5.0020.0002] # BUHID LETTER HA
+1752 ; [.35E6.0020.0002] # BUHID VOWEL SIGN I
+1753 ; [.35E7.0020.0002] # BUHID VOWEL SIGN U
+1760 ; [.35E8.0020.0002] # TAGBANWA LETTER A
+1761 ; [.35E9.0020.0002] # TAGBANWA LETTER I
+1762 ; [.35EA.0020.0002] # TAGBANWA LETTER U
+1763 ; [.35EB.0020.0002] # TAGBANWA LETTER KA
+1764 ; [.35EC.0020.0002] # TAGBANWA LETTER GA
+1765 ; [.35ED.0020.0002] # TAGBANWA LETTER NGA
+1766 ; [.35EE.0020.0002] # TAGBANWA LETTER TA
+1767 ; [.35EF.0020.0002] # TAGBANWA LETTER DA
+1768 ; [.35F0.0020.0002] # TAGBANWA LETTER NA
+1769 ; [.35F1.0020.0002] # TAGBANWA LETTER PA
+176A ; [.35F2.0020.0002] # TAGBANWA LETTER BA
+176B ; [.35F3.0020.0002] # TAGBANWA LETTER MA
+176C ; [.35F4.0020.0002] # TAGBANWA LETTER YA
+176E ; [.35F5.0020.0002] # TAGBANWA LETTER LA
+176F ; [.35F6.0020.0002] # TAGBANWA LETTER WA
+1770 ; [.35F7.0020.0002] # TAGBANWA LETTER SA
+1772 ; [.35F8.0020.0002] # TAGBANWA VOWEL SIGN I
+1773 ; [.35F9.0020.0002] # TAGBANWA VOWEL SIGN U
+1A00 ; [.35FA.0020.0002] # BUGINESE LETTER KA
+1A01 ; [.35FB.0020.0002] # BUGINESE LETTER GA
+1A02 ; [.35FC.0020.0002] # BUGINESE LETTER NGA
+1A03 ; [.35FD.0020.0002] # BUGINESE LETTER NGKA
+1A04 ; [.35FE.0020.0002] # BUGINESE LETTER PA
+1A05 ; [.35FF.0020.0002] # BUGINESE LETTER BA
+1A06 ; [.3600.0020.0002] # BUGINESE LETTER MA
+1A07 ; [.3601.0020.0002] # BUGINESE LETTER MPA
+1A08 ; [.3602.0020.0002] # BUGINESE LETTER TA
+1A09 ; [.3603.0020.0002] # BUGINESE LETTER DA
+1A0A ; [.3604.0020.0002] # BUGINESE LETTER NA
+1A0B ; [.3605.0020.0002] # BUGINESE LETTER NRA
+1A0C ; [.3606.0020.0002] # BUGINESE LETTER CA
+1A0D ; [.3607.0020.0002] # BUGINESE LETTER JA
+1A0E ; [.3608.0020.0002] # BUGINESE LETTER NYA
+1A0F ; [.3609.0020.0002] # BUGINESE LETTER NYCA
+1A10 ; [.360A.0020.0002] # BUGINESE LETTER YA
+1A11 ; [.360B.0020.0002] # BUGINESE LETTER RA
+1A12 ; [.360C.0020.0002] # BUGINESE LETTER LA
+1A13 ; [.360D.0020.0002] # BUGINESE LETTER VA
+1A14 ; [.360E.0020.0002] # BUGINESE LETTER SA
+1A15 ; [.360F.0020.0002] # BUGINESE LETTER A
+1A16 ; [.3610.0020.0002] # BUGINESE LETTER HA
+1A17 ; [.3611.0020.0002] # BUGINESE VOWEL SIGN I
+1A18 ; [.3612.0020.0002] # BUGINESE VOWEL SIGN U
+1A19 ; [.3613.0020.0002] # BUGINESE VOWEL SIGN E
+1A1A ; [.3614.0020.0002] # BUGINESE VOWEL SIGN O
+1A1B ; [.3615.0020.0002] # BUGINESE VOWEL SIGN AE
+11EE0 ; [.3616.0020.0002] # MAKASAR LETTER KA
+11EE1 ; [.3617.0020.0002] # MAKASAR LETTER GA
+11EE2 ; [.3618.0020.0002] # MAKASAR LETTER NGA
+11EE3 ; [.3619.0020.0002] # MAKASAR LETTER PA
+11EE4 ; [.361A.0020.0002] # MAKASAR LETTER BA
+11EE5 ; [.361B.0020.0002] # MAKASAR LETTER MA
+11EE6 ; [.361C.0020.0002] # MAKASAR LETTER TA
+11EE7 ; [.361D.0020.0002] # MAKASAR LETTER DA
+11EE8 ; [.361E.0020.0002] # MAKASAR LETTER NA
+11EE9 ; [.361F.0020.0002] # MAKASAR LETTER CA
+11EEA ; [.3620.0020.0002] # MAKASAR LETTER JA
+11EEB ; [.3621.0020.0002] # MAKASAR LETTER NYA
+11EEC ; [.3622.0020.0002] # MAKASAR LETTER YA
+11EED ; [.3623.0020.0002] # MAKASAR LETTER RA
+11EEE ; [.3624.0020.0002] # MAKASAR LETTER LA
+11EEF ; [.3625.0020.0002] # MAKASAR LETTER VA
+11EF0 ; [.3626.0020.0002] # MAKASAR LETTER SA
+11EF1 ; [.3627.0020.0002] # MAKASAR LETTER A
+11EF2 ; [.3628.0020.0002] # MAKASAR ANGKA
+11EF3 ; [.3629.0020.0002] # MAKASAR VOWEL SIGN I
+11EF4 ; [.362A.0020.0002] # MAKASAR VOWEL SIGN U
+11EF5 ; [.362B.0020.0002] # MAKASAR VOWEL SIGN E
+11EF6 ; [.362C.0020.0002] # MAKASAR VOWEL SIGN O
+1BC0 ; [.362D.0020.0002] # BATAK LETTER A
+1BC1 ; [.362D.0020.0004] # BATAK LETTER SIMALUNGUN A
+1BC2 ; [.362E.0020.0002] # BATAK LETTER HA
+1BC3 ; [.362E.0020.0004] # BATAK LETTER SIMALUNGUN HA
+1BC4 ; [.362E.0020.0004] # BATAK LETTER MANDAILING HA
+1BC5 ; [.362F.0020.0002] # BATAK LETTER BA
+1BC6 ; [.362F.0020.0004] # BATAK LETTER KARO BA
+1BC7 ; [.3630.0020.0002] # BATAK LETTER PA
+1BC8 ; [.3630.0020.0004] # BATAK LETTER SIMALUNGUN PA
+1BC9 ; [.3631.0020.0002] # BATAK LETTER NA
+1BCA ; [.3631.0020.0004] # BATAK LETTER MANDAILING NA
+1BCB ; [.3632.0020.0002] # BATAK LETTER WA
+1BCC ; [.3632.0020.0004] # BATAK LETTER SIMALUNGUN WA
+1BCD ; [.3632.0020.0004] # BATAK LETTER PAKPAK WA
+1BCE ; [.3633.0020.0002] # BATAK LETTER GA
+1BCF ; [.3633.0020.0004] # BATAK LETTER SIMALUNGUN GA
+1BD0 ; [.3634.0020.0002] # BATAK LETTER JA
+1BD1 ; [.3635.0020.0002] # BATAK LETTER DA
+1BD2 ; [.3636.0020.0002] # BATAK LETTER RA
+1BD3 ; [.3636.0020.0004] # BATAK LETTER SIMALUNGUN RA
+1BD4 ; [.3637.0020.0002] # BATAK LETTER MA
+1BD5 ; [.3637.0020.0004] # BATAK LETTER SIMALUNGUN MA
+1BD6 ; [.3638.0020.0002] # BATAK LETTER SOUTHERN TA
+1BD7 ; [.3638.0020.0004] # BATAK LETTER NORTHERN TA
+1BD8 ; [.3639.0020.0002] # BATAK LETTER SA
+1BD9 ; [.3639.0020.0004] # BATAK LETTER SIMALUNGUN SA
+1BDA ; [.3639.0020.0004] # BATAK LETTER MANDAILING SA
+1BDB ; [.363A.0020.0002] # BATAK LETTER YA
+1BDC ; [.363A.0020.0004] # BATAK LETTER SIMALUNGUN YA
+1BDD ; [.363B.0020.0002] # BATAK LETTER NGA
+1BDE ; [.363C.0020.0002] # BATAK LETTER LA
+1BDF ; [.363C.0020.0004] # BATAK LETTER SIMALUNGUN LA
+1BE0 ; [.363D.0020.0002] # BATAK LETTER NYA
+1BE1 ; [.363E.0020.0002] # BATAK LETTER CA
+1BE2 ; [.363F.0020.0002] # BATAK LETTER NDA
+1BE3 ; [.3640.0020.0002] # BATAK LETTER MBA
+1BE4 ; [.3641.0020.0002] # BATAK LETTER I
+1BE5 ; [.3642.0020.0002] # BATAK LETTER U
+1BE7 ; [.3643.0020.0002] # BATAK VOWEL SIGN E
+1BE8 ; [.3643.0020.0004] # BATAK VOWEL SIGN PAKPAK E
+1BE9 ; [.3644.0020.0002] # BATAK VOWEL SIGN EE
+1BEA ; [.3645.0020.0002] # BATAK VOWEL SIGN I
+1BEB ; [.3645.0020.0004] # BATAK VOWEL SIGN KARO I
+1BEC ; [.3646.0020.0002] # BATAK VOWEL SIGN O
+1BED ; [.3646.0020.0004] # BATAK VOWEL SIGN KARO O
+1BEE ; [.3647.0020.0002] # BATAK VOWEL SIGN U
+1BEF ; [.3647.0020.0004] # BATAK VOWEL SIGN U FOR SIMALUNGUN SA
+1BF0 ; [.3648.0020.0002] # BATAK CONSONANT SIGN NG
+1BF1 ; [.3649.0020.0002] # BATAK CONSONANT SIGN H
+1BF2 ; [.364A.0020.0002] # BATAK PANGOLAT
+1BF3 ; [.364B.0020.0002] # BATAK PANONGONAN
+A930 ; [.364C.0020.0002] # REJANG LETTER KA
+A931 ; [.364D.0020.0002] # REJANG LETTER GA
+A932 ; [.364E.0020.0002] # REJANG LETTER NGA
+A933 ; [.364F.0020.0002] # REJANG LETTER TA
+A934 ; [.3650.0020.0002] # REJANG LETTER DA
+A935 ; [.3651.0020.0002] # REJANG LETTER NA
+A936 ; [.3652.0020.0002] # REJANG LETTER PA
+A937 ; [.3653.0020.0002] # REJANG LETTER BA
+A938 ; [.3654.0020.0002] # REJANG LETTER MA
+A939 ; [.3655.0020.0002] # REJANG LETTER CA
+A93A ; [.3656.0020.0002] # REJANG LETTER JA
+A93B ; [.3657.0020.0002] # REJANG LETTER NYA
+A93C ; [.3658.0020.0002] # REJANG LETTER SA
+A93D ; [.3659.0020.0002] # REJANG LETTER RA
+A93E ; [.365A.0020.0002] # REJANG LETTER LA
+A93F ; [.365B.0020.0002] # REJANG LETTER YA
+A940 ; [.365C.0020.0002] # REJANG LETTER WA
+A941 ; [.365D.0020.0002] # REJANG LETTER HA
+A942 ; [.365E.0020.0002] # REJANG LETTER MBA
+A943 ; [.365F.0020.0002] # REJANG LETTER NGGA
+A944 ; [.3660.0020.0002] # REJANG LETTER NDA
+A945 ; [.3661.0020.0002] # REJANG LETTER NYJA
+A946 ; [.3662.0020.0002] # REJANG LETTER A
+A947 ; [.3663.0020.0002] # REJANG VOWEL SIGN I
+A948 ; [.3664.0020.0002] # REJANG VOWEL SIGN U
+A949 ; [.3665.0020.0002] # REJANG VOWEL SIGN E
+A94A ; [.3666.0020.0002] # REJANG VOWEL SIGN AI
+A94B ; [.3667.0020.0002] # REJANG VOWEL SIGN O
+A94C ; [.3668.0020.0002] # REJANG VOWEL SIGN AU
+A94D ; [.3669.0020.0002] # REJANG VOWEL SIGN EU
+A94E ; [.366A.0020.0002] # REJANG VOWEL SIGN EA
+A94F ; [.366B.0020.0002] # REJANG CONSONANT SIGN NG
+A950 ; [.366C.0020.0002] # REJANG CONSONANT SIGN N
+A951 ; [.366D.0020.0002] # REJANG CONSONANT SIGN R
+A952 ; [.366E.0020.0002] # REJANG CONSONANT SIGN H
+A953 ; [.366F.0020.0002] # REJANG VIRAMA
+A90A ; [.3670.0020.0002] # KAYAH LI LETTER KA
+A90B ; [.3671.0020.0002] # KAYAH LI LETTER KHA
+A90C ; [.3672.0020.0002] # KAYAH LI LETTER GA
+A90D ; [.3673.0020.0002] # KAYAH LI LETTER NGA
+A90E ; [.3674.0020.0002] # KAYAH LI LETTER SA
+A90F ; [.3675.0020.0002] # KAYAH LI LETTER SHA
+A910 ; [.3676.0020.0002] # KAYAH LI LETTER ZA
+A911 ; [.3677.0020.0002] # KAYAH LI LETTER NYA
+A912 ; [.3678.0020.0002] # KAYAH LI LETTER TA
+A913 ; [.3679.0020.0002] # KAYAH LI LETTER HTA
+A914 ; [.367A.0020.0002] # KAYAH LI LETTER NA
+A915 ; [.367B.0020.0002] # KAYAH LI LETTER PA
+A916 ; [.367C.0020.0002] # KAYAH LI LETTER PHA
+A917 ; [.367D.0020.0002] # KAYAH LI LETTER MA
+A918 ; [.367E.0020.0002] # KAYAH LI LETTER DA
+A919 ; [.367F.0020.0002] # KAYAH LI LETTER BA
+A91A ; [.3680.0020.0002] # KAYAH LI LETTER RA
+A91B ; [.3681.0020.0002] # KAYAH LI LETTER YA
+A91C ; [.3682.0020.0002] # KAYAH LI LETTER LA
+A91D ; [.3683.0020.0002] # KAYAH LI LETTER WA
+A91E ; [.3684.0020.0002] # KAYAH LI LETTER THA
+A91F ; [.3685.0020.0002] # KAYAH LI LETTER HA
+A920 ; [.3686.0020.0002] # KAYAH LI LETTER VA
+A921 ; [.3687.0020.0002] # KAYAH LI LETTER CA
+A922 ; [.3688.0020.0002] # KAYAH LI LETTER A
+A923 ; [.3689.0020.0002] # KAYAH LI LETTER OE
+A924 ; [.368A.0020.0002] # KAYAH LI LETTER I
+A925 ; [.368B.0020.0002] # KAYAH LI LETTER OO
+A926 ; [.368C.0020.0002] # KAYAH LI VOWEL UE
+A927 ; [.368D.0020.0002] # KAYAH LI VOWEL E
+A928 ; [.368E.0020.0002] # KAYAH LI VOWEL U
+A929 ; [.368F.0020.0002] # KAYAH LI VOWEL EE
+A92A ; [.3690.0020.0002] # KAYAH LI VOWEL O
+1000 ; [.3691.0020.0002] # MYANMAR LETTER KA
+1075 ; [.3692.0020.0002] # MYANMAR LETTER SHAN KA
+1001 ; [.3693.0020.0002] # MYANMAR LETTER KHA
+1076 ; [.3694.0020.0002] # MYANMAR LETTER SHAN KHA
+1002 ; [.3695.0020.0002] # MYANMAR LETTER GA
+1077 ; [.3696.0020.0002] # MYANMAR LETTER SHAN GA
+AA60 ; [.3697.0020.0002] # MYANMAR LETTER KHAMTI GA
+A9E9 ; [.3698.0020.0002] # MYANMAR LETTER TAI LAING GA
+1003 ; [.3699.0020.0002] # MYANMAR LETTER GHA
+A9E0 ; [.369A.0020.0002] # MYANMAR LETTER SHAN GHA
+A9EA ; [.369B.0020.0002] # MYANMAR LETTER TAI LAING GHA
+1004 ; [.369C.0020.0002] # MYANMAR LETTER NGA
+105A ; [.369D.0020.0002] # MYANMAR LETTER MON NGA
+1005 ; [.369E.0020.0002] # MYANMAR LETTER CA
+1078 ; [.369F.0020.0002] # MYANMAR LETTER SHAN CA
+AA61 ; [.36A0.0020.0002] # MYANMAR LETTER KHAMTI CA
+1006 ; [.36A1.0020.0002] # MYANMAR LETTER CHA
+A9E1 ; [.36A2.0020.0002] # MYANMAR LETTER SHAN CHA
+AA62 ; [.36A3.0020.0002] # MYANMAR LETTER KHAMTI CHA
+AA7E ; [.36A4.0020.0002] # MYANMAR LETTER SHWE PALAUNG CHA
+1007 ; [.36A5.0020.0002] # MYANMAR LETTER JA
+AA63 ; [.36A6.0020.0002] # MYANMAR LETTER KHAMTI JA
+A9EB ; [.36A7.0020.0002] # MYANMAR LETTER TAI LAING JA
+1079 ; [.36A8.0020.0002] # MYANMAR LETTER SHAN ZA
+AA72 ; [.36A9.0020.0002] # MYANMAR LETTER KHAMTI ZA
+1008 ; [.36AA.0020.0002] # MYANMAR LETTER JHA
+105B ; [.36AB.0020.0002] # MYANMAR LETTER MON JHA
+A9E2 ; [.36AC.0020.0002] # MYANMAR LETTER SHAN JHA
+AA64 ; [.36AD.0020.0002] # MYANMAR LETTER KHAMTI JHA
+A9EC ; [.36AE.0020.0002] # MYANMAR LETTER TAI LAING JHA
+1061 ; [.36AF.0020.0002] # MYANMAR LETTER SGAW KAREN SHA
+AA7F ; [.36B0.0020.0002] # MYANMAR LETTER SHWE PALAUNG SHA
+1009 ; [.36B1.0020.0002] # MYANMAR LETTER NYA
+107A ; [.36B2.0020.0002] # MYANMAR LETTER SHAN NYA
+AA65 ; [.36B3.0020.0002] # MYANMAR LETTER KHAMTI NYA
+A9E7 ; [.36B4.0020.0002] # MYANMAR LETTER TAI LAING NYA
+100A ; [.36B5.0020.0002] # MYANMAR LETTER NNYA
+100B ; [.36B6.0020.0002] # MYANMAR LETTER TTA
+AA66 ; [.36B7.0020.0002] # MYANMAR LETTER KHAMTI TTA
+100C ; [.36B8.0020.0002] # MYANMAR LETTER TTHA
+AA67 ; [.36B9.0020.0002] # MYANMAR LETTER KHAMTI TTHA
+100D ; [.36BA.0020.0002] # MYANMAR LETTER DDA
+AA68 ; [.36BB.0020.0002] # MYANMAR LETTER KHAMTI DDA
+A9ED ; [.36BC.0020.0002] # MYANMAR LETTER TAI LAING DDA
+100E ; [.36BD.0020.0002] # MYANMAR LETTER DDHA
+AA69 ; [.36BE.0020.0002] # MYANMAR LETTER KHAMTI DDHA
+A9EE ; [.36BF.0020.0002] # MYANMAR LETTER TAI LAING DDHA
+100F ; [.36C0.0020.0002] # MYANMAR LETTER NNA
+106E ; [.36C1.0020.0002] # MYANMAR LETTER EASTERN PWO KAREN NNA
+A9E3 ; [.36C2.0020.0002] # MYANMAR LETTER SHAN NNA
+A9EF ; [.36C3.0020.0002] # MYANMAR LETTER TAI LAING NNA
+1010 ; [.36C4.0020.0002] # MYANMAR LETTER TA
+1011 ; [.36C5.0020.0002] # MYANMAR LETTER THA
+1012 ; [.36C6.0020.0002] # MYANMAR LETTER DA
+107B ; [.36C7.0020.0002] # MYANMAR LETTER SHAN DA
+A9FB ; [.36C8.0020.0002] # MYANMAR LETTER TAI LAING DA
+1013 ; [.36C9.0020.0002] # MYANMAR LETTER DHA
+AA6A ; [.36CA.0020.0002] # MYANMAR LETTER KHAMTI DHA
+A9FC ; [.36CB.0020.0002] # MYANMAR LETTER TAI LAING DHA
+1014 ; [.36CC.0020.0002] # MYANMAR LETTER NA
+107C ; [.36CD.0020.0002] # MYANMAR LETTER SHAN NA
+AA6B ; [.36CE.0020.0002] # MYANMAR LETTER KHAMTI NA
+105E ; [.36CF.0020.0002] # MYANMAR CONSONANT SIGN MON MEDIAL NA
+1015 ; [.36D0.0020.0002] # MYANMAR LETTER PA
+1016 ; [.36D1.0020.0002] # MYANMAR LETTER PHA
+107D ; [.36D2.0020.0002] # MYANMAR LETTER SHAN PHA
+107E ; [.36D3.0020.0002] # MYANMAR LETTER SHAN FA
+AA6F ; [.36D4.0020.0002] # MYANMAR LETTER KHAMTI FA
+108E ; [.36D5.0020.0002] # MYANMAR LETTER RUMAI PALAUNG FA
+A9E8 ; [.36D6.0020.0002] # MYANMAR LETTER TAI LAING FA
+1017 ; [.36D7.0020.0002] # MYANMAR LETTER BA
+107F ; [.36D8.0020.0002] # MYANMAR LETTER SHAN BA
+A9FD ; [.36D9.0020.0002] # MYANMAR LETTER TAI LAING BA
+1018 ; [.36DA.0020.0002] # MYANMAR LETTER BHA
+A9E4 ; [.36DB.0020.0002] # MYANMAR LETTER SHAN BHA
+A9FE ; [.36DC.0020.0002] # MYANMAR LETTER TAI LAING BHA
+1019 ; [.36DD.0020.0002] # MYANMAR LETTER MA
+105F ; [.36DE.0020.0002] # MYANMAR CONSONANT SIGN MON MEDIAL MA
+101A ; [.36DF.0020.0002] # MYANMAR LETTER YA
+103B ; [.36E0.0020.0002] # MYANMAR CONSONANT SIGN MEDIAL YA
+101B ; [.36E1.0020.0002] # MYANMAR LETTER RA
+AA73 ; [.36E2.0020.0002] # MYANMAR LETTER KHAMTI RA
+AA7A ; [.36E3.0020.0002] # MYANMAR LETTER AITON RA
+103C ; [.36E4.0020.0002] # MYANMAR CONSONANT SIGN MEDIAL RA
+101C ; [.36E5.0020.0002] # MYANMAR LETTER LA
+1060 ; [.36E6.0020.0002] # MYANMAR CONSONANT SIGN MON MEDIAL LA
+101D ; [.36E7.0020.0002] # MYANMAR LETTER WA
+103D ; [.36E8.0020.0002] # MYANMAR CONSONANT SIGN MEDIAL WA
+1082 ; [.36E9.0020.0002] # MYANMAR CONSONANT SIGN SHAN MEDIAL WA
+1080 ; [.36EA.0020.0002] # MYANMAR LETTER SHAN THA
+1050 ; [.36EB.0020.0002] # MYANMAR LETTER SHA
+1051 ; [.36EC.0020.0002] # MYANMAR LETTER SSA
+1065 ; [.36ED.0020.0002] # MYANMAR LETTER WESTERN PWO KAREN THA
+101E ; [.36EE.0020.0002] # MYANMAR LETTER SA
+103F ; [.36EE.0020.0004][.3727.0020.0004][.36EE.0020.0004] # MYANMAR LETTER GREAT SA
+AA6C ; [.36EF.0020.0002] # MYANMAR LETTER KHAMTI SA
+101F ; [.36F0.0020.0002] # MYANMAR LETTER HA
+1081 ; [.36F1.0020.0002] # MYANMAR LETTER SHAN HA
+AA6D ; [.36F2.0020.0002] # MYANMAR LETTER KHAMTI HA
+103E ; [.36F3.0020.0002] # MYANMAR CONSONANT SIGN MEDIAL HA
+AA6E ; [.36F4.0020.0002] # MYANMAR LETTER KHAMTI HHA
+AA71 ; [.36F5.0020.0002] # MYANMAR LETTER KHAMTI XA
+1020 ; [.36F6.0020.0002] # MYANMAR LETTER LLA
+A9FA ; [.36F7.0020.0002] # MYANMAR LETTER TAI LAING LLA
+105C ; [.36F8.0020.0002] # MYANMAR LETTER MON BBA
+105D ; [.36F9.0020.0002] # MYANMAR LETTER MON BBE
+106F ; [.36FA.0020.0002] # MYANMAR LETTER EASTERN PWO KAREN YWA
+1070 ; [.36FB.0020.0002] # MYANMAR LETTER EASTERN PWO KAREN GHWA
+1066 ; [.36FC.0020.0002] # MYANMAR LETTER WESTERN PWO KAREN PWA
+1021 ; [.36FD.0020.0002] # MYANMAR LETTER A
+1022 ; [.36FE.0020.0002] # MYANMAR LETTER SHAN A
+1023 ; [.36FF.0020.0002] # MYANMAR LETTER I
+1024 ; [.3700.0020.0002] # MYANMAR LETTER II
+1025 ; [.3701.0020.0002] # MYANMAR LETTER U
+1026 ; [.3702.0020.0002] # MYANMAR LETTER UU
+1025 102E ; [.3702.0020.0002] # MYANMAR LETTER UU
+1052 ; [.3703.0020.0002] # MYANMAR LETTER VOCALIC R
+1053 ; [.3704.0020.0002] # MYANMAR LETTER VOCALIC RR
+1054 ; [.3705.0020.0002] # MYANMAR LETTER VOCALIC L
+1055 ; [.3706.0020.0002] # MYANMAR LETTER VOCALIC LL
+1027 ; [.3707.0020.0002] # MYANMAR LETTER E
+1028 ; [.3708.0020.0002] # MYANMAR LETTER MON E
+1029 ; [.3709.0020.0002] # MYANMAR LETTER O
+102A ; [.370A.0020.0002] # MYANMAR LETTER AU
+102C ; [.370B.0020.0002] # MYANMAR VOWEL SIGN AA
+102B ; [.370B.0020.0004] # MYANMAR VOWEL SIGN TALL AA
+1083 ; [.370C.0020.0002] # MYANMAR VOWEL SIGN SHAN AA
+1072 ; [.370D.0020.0002] # MYANMAR VOWEL SIGN KAYAH OE
+109C ; [.370E.0020.0002] # MYANMAR VOWEL SIGN AITON A
+102D ; [.370F.0020.0002] # MYANMAR VOWEL SIGN I
+1071 ; [.3710.0020.0002] # MYANMAR VOWEL SIGN GEBA KAREN I
+102E ; [.3711.0020.0002] # MYANMAR VOWEL SIGN II
+1033 ; [.3712.0020.0002] # MYANMAR VOWEL SIGN MON II
+102F ; [.3713.0020.0002] # MYANMAR VOWEL SIGN U
+1073 ; [.3714.0020.0002] # MYANMAR VOWEL SIGN KAYAH U
+1074 ; [.3715.0020.0002] # MYANMAR VOWEL SIGN KAYAH EE
+1030 ; [.3716.0020.0002] # MYANMAR VOWEL SIGN UU
+1056 ; [.3717.0020.0002] # MYANMAR VOWEL SIGN VOCALIC R
+1057 ; [.3718.0020.0002] # MYANMAR VOWEL SIGN VOCALIC RR
+1058 ; [.3719.0020.0002] # MYANMAR VOWEL SIGN VOCALIC L
+1059 ; [.371A.0020.0002] # MYANMAR VOWEL SIGN VOCALIC LL
+1031 ; [.371B.0020.0002] # MYANMAR VOWEL SIGN E
+1084 ; [.371C.0020.0002] # MYANMAR VOWEL SIGN SHAN E
+1035 ; [.371D.0020.0002] # MYANMAR VOWEL SIGN E ABOVE
+1085 ; [.371E.0020.0002] # MYANMAR VOWEL SIGN SHAN E ABOVE
+1032 ; [.371F.0020.0002] # MYANMAR VOWEL SIGN AI
+109D ; [.3720.0020.0002] # MYANMAR VOWEL SIGN AITON AI
+1086 ; [.3721.0020.0002] # MYANMAR VOWEL SIGN SHAN FINAL Y
+1034 ; [.3722.0020.0002] # MYANMAR VOWEL SIGN MON O
+1062 ; [.3723.0020.0002] # MYANMAR VOWEL SIGN SGAW KAREN EU
+1067 ; [.3724.0020.0002] # MYANMAR VOWEL SIGN WESTERN PWO KAREN EU
+1068 ; [.3725.0020.0002] # MYANMAR VOWEL SIGN WESTERN PWO KAREN UE
+A9E5 ; [.3726.0020.0002] # MYANMAR SIGN SHAN SAW
+1039 ; [.3727.0020.0002] # MYANMAR SIGN VIRAMA
+103A ; [.3728.0020.0002] # MYANMAR SIGN ASAT
+1063 ; [.3729.0020.0002] # MYANMAR TONE MARK SGAW KAREN HATHI
+1064 ; [.372A.0020.0002] # MYANMAR TONE MARK SGAW KAREN KE PHO
+1069 ; [.372B.0020.0002] # MYANMAR SIGN WESTERN PWO KAREN TONE-1
+106A ; [.372C.0020.0002] # MYANMAR SIGN WESTERN PWO KAREN TONE-2
+106B ; [.372D.0020.0002] # MYANMAR SIGN WESTERN PWO KAREN TONE-3
+106C ; [.372E.0020.0002] # MYANMAR SIGN WESTERN PWO KAREN TONE-4
+106D ; [.372F.0020.0002] # MYANMAR SIGN WESTERN PWO KAREN TONE-5
+1087 ; [.3730.0020.0002] # MYANMAR SIGN SHAN TONE-2
+108B ; [.3731.0020.0002] # MYANMAR SIGN SHAN COUNCIL TONE-2
+1088 ; [.3732.0020.0002] # MYANMAR SIGN SHAN TONE-3
+108C ; [.3733.0020.0002] # MYANMAR SIGN SHAN COUNCIL TONE-3
+108D ; [.3734.0020.0002] # MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE
+1089 ; [.3735.0020.0002] # MYANMAR SIGN SHAN TONE-5
+108A ; [.3736.0020.0002] # MYANMAR SIGN SHAN TONE-6
+108F ; [.3737.0020.0002] # MYANMAR SIGN RUMAI PALAUNG TONE-5
+109A ; [.3738.0020.0002] # MYANMAR SIGN KHAMTI TONE-1
+109B ; [.3739.0020.0002] # MYANMAR SIGN KHAMTI TONE-3
+AA7B ; [.373A.0020.0002] # MYANMAR SIGN PAO KAREN TONE
+AA7C ; [.373B.0020.0002] # MYANMAR SIGN TAI LAING TONE-2
+AA7D ; [.373C.0020.0002] # MYANMAR SIGN TAI LAING TONE-5
+AA74 ; [.373D.0020.0002] # MYANMAR LOGOGRAM KHAMTI OAY
+AA75 ; [.373E.0020.0002] # MYANMAR LOGOGRAM KHAMTI QN
+AA76 ; [.373F.0020.0002] # MYANMAR LOGOGRAM KHAMTI HM
+10D00 ; [.3740.0020.0002] # HANIFI ROHINGYA LETTER A
+10D1D ; [.3741.0020.0002] # HANIFI ROHINGYA VOWEL A
+10D1E ; [.3742.0020.0002] # HANIFI ROHINGYA VOWEL I
+10D1F ; [.3743.0020.0002] # HANIFI ROHINGYA VOWEL U
+10D20 ; [.3744.0020.0002] # HANIFI ROHINGYA VOWEL E
+10D21 ; [.3745.0020.0002] # HANIFI ROHINGYA VOWEL O
+10D01 ; [.3746.0020.0002] # HANIFI ROHINGYA LETTER BA
+10D02 ; [.3747.0020.0002] # HANIFI ROHINGYA LETTER PA
+10D03 ; [.3748.0020.0002] # HANIFI ROHINGYA LETTER TA
+10D04 ; [.3749.0020.0002] # HANIFI ROHINGYA LETTER TTA
+10D05 ; [.374A.0020.0002] # HANIFI ROHINGYA LETTER JA
+10D06 ; [.374B.0020.0002] # HANIFI ROHINGYA LETTER CA
+10D07 ; [.374C.0020.0002] # HANIFI ROHINGYA LETTER HA
+10D08 ; [.374D.0020.0002] # HANIFI ROHINGYA LETTER KHA
+10D09 ; [.374E.0020.0002] # HANIFI ROHINGYA LETTER FA
+10D0A ; [.374F.0020.0002] # HANIFI ROHINGYA LETTER DA
+10D0B ; [.3750.0020.0002] # HANIFI ROHINGYA LETTER DDA
+10D0C ; [.3751.0020.0002] # HANIFI ROHINGYA LETTER RA
+10D0D ; [.3752.0020.0002] # HANIFI ROHINGYA LETTER RRA
+10D0E ; [.3753.0020.0002] # HANIFI ROHINGYA LETTER ZA
+10D0F ; [.3754.0020.0002] # HANIFI ROHINGYA LETTER SA
+10D10 ; [.3755.0020.0002] # HANIFI ROHINGYA LETTER SHA
+10D11 ; [.3756.0020.0002] # HANIFI ROHINGYA LETTER KA
+10D12 ; [.3757.0020.0002] # HANIFI ROHINGYA LETTER GA
+10D13 ; [.3758.0020.0002] # HANIFI ROHINGYA LETTER LA
+10D14 ; [.3759.0020.0002] # HANIFI ROHINGYA LETTER MA
+10D15 ; [.375A.0020.0002] # HANIFI ROHINGYA LETTER NA
+10D16 ; [.375B.0020.0002] # HANIFI ROHINGYA LETTER WA
+10D17 ; [.375C.0020.0002] # HANIFI ROHINGYA LETTER KINNA WA
+10D18 ; [.375D.0020.0002] # HANIFI ROHINGYA LETTER YA
+10D19 ; [.375E.0020.0002] # HANIFI ROHINGYA LETTER KINNA YA
+10D1A ; [.375F.0020.0002] # HANIFI ROHINGYA LETTER NGA
+10D1B ; [.3760.0020.0002] # HANIFI ROHINGYA LETTER NYA
+10D1C ; [.3761.0020.0002] # HANIFI ROHINGYA LETTER VA
+10D22 ; [.3762.0020.0002] # HANIFI ROHINGYA MARK SAKIN
+10D23 ; [.3763.0020.0002] # HANIFI ROHINGYA MARK NA KHONNA
+11103 ; [.3764.0020.0002] # CHAKMA LETTER AA
+11104 ; [.3765.0020.0002] # CHAKMA LETTER I
+11105 ; [.3766.0020.0002] # CHAKMA LETTER U
+11106 ; [.3767.0020.0002] # CHAKMA LETTER E
+11107 ; [.3768.0020.0002] # CHAKMA LETTER KAA
+11108 ; [.3769.0020.0002] # CHAKMA LETTER KHAA
+11109 ; [.376A.0020.0002] # CHAKMA LETTER GAA
+1110A ; [.376B.0020.0002] # CHAKMA LETTER GHAA
+1110B ; [.376C.0020.0002] # CHAKMA LETTER NGAA
+1110C ; [.376D.0020.0002] # CHAKMA LETTER CAA
+1110D ; [.376E.0020.0002] # CHAKMA LETTER CHAA
+1110E ; [.376F.0020.0002] # CHAKMA LETTER JAA
+1110F ; [.3770.0020.0002] # CHAKMA LETTER JHAA
+11110 ; [.3771.0020.0002] # CHAKMA LETTER NYAA
+11111 ; [.3772.0020.0002] # CHAKMA LETTER TTAA
+11112 ; [.3773.0020.0002] # CHAKMA LETTER TTHAA
+11113 ; [.3774.0020.0002] # CHAKMA LETTER DDAA
+11114 ; [.3775.0020.0002] # CHAKMA LETTER DDHAA
+11115 ; [.3776.0020.0002] # CHAKMA LETTER NNAA
+11116 ; [.3777.0020.0002] # CHAKMA LETTER TAA
+11117 ; [.3778.0020.0002] # CHAKMA LETTER THAA
+11118 ; [.3779.0020.0002] # CHAKMA LETTER DAA
+11119 ; [.377A.0020.0002] # CHAKMA LETTER DHAA
+1111A ; [.377B.0020.0002] # CHAKMA LETTER NAA
+1111B ; [.377C.0020.0002] # CHAKMA LETTER PAA
+1111C ; [.377D.0020.0002] # CHAKMA LETTER PHAA
+1111D ; [.377E.0020.0002] # CHAKMA LETTER BAA
+1111E ; [.377F.0020.0002] # CHAKMA LETTER BHAA
+1111F ; [.3780.0020.0002] # CHAKMA LETTER MAA
+11120 ; [.3781.0020.0002] # CHAKMA LETTER YYAA
+11121 ; [.3782.0020.0002] # CHAKMA LETTER YAA
+11122 ; [.3783.0020.0002] # CHAKMA LETTER RAA
+11123 ; [.3784.0020.0002] # CHAKMA LETTER LAA
+11147 ; [.3785.0020.0002] # CHAKMA LETTER VAA
+11124 ; [.3786.0020.0002] # CHAKMA LETTER WAA
+11125 ; [.3787.0020.0002] # CHAKMA LETTER SAA
+11126 ; [.3788.0020.0002] # CHAKMA LETTER HAA
+11144 ; [.3789.0020.0002] # CHAKMA LETTER LHAA
+11127 ; [.378A.0020.0002] # CHAKMA VOWEL SIGN A
+11128 ; [.378B.0020.0002] # CHAKMA VOWEL SIGN I
+11129 ; [.378C.0020.0002] # CHAKMA VOWEL SIGN II
+1112A ; [.378D.0020.0002] # CHAKMA VOWEL SIGN U
+1112B ; [.378E.0020.0002] # CHAKMA VOWEL SIGN UU
+1112C ; [.378F.0020.0002] # CHAKMA VOWEL SIGN E
+1112D ; [.3790.0020.0002] # CHAKMA VOWEL SIGN AI
+1112E ; [.3791.0020.0002] # CHAKMA VOWEL SIGN O
+11131 11127 ; [.3791.0020.0002] # CHAKMA VOWEL SIGN O
+1112F ; [.3792.0020.0002] # CHAKMA VOWEL SIGN AU
+11132 11127 ; [.3792.0020.0002] # CHAKMA VOWEL SIGN AU
+11130 ; [.3793.0020.0002] # CHAKMA VOWEL SIGN OI
+11131 ; [.3794.0020.0002] # CHAKMA O MARK
+11132 ; [.3795.0020.0002] # CHAKMA AU MARK
+11145 ; [.3796.0020.0002] # CHAKMA VOWEL SIGN AA
+11146 ; [.3797.0020.0002] # CHAKMA VOWEL SIGN EI
+11133 ; [.3798.0020.0002] # CHAKMA VIRAMA
+11134 ; [.3799.0020.0002] # CHAKMA MAAYYAA
+1780 ; [.379A.0020.0002] # KHMER LETTER KA
+1781 ; [.379B.0020.0002] # KHMER LETTER KHA
+1782 ; [.379C.0020.0002] # KHMER LETTER KO
+1783 ; [.379D.0020.0002] # KHMER LETTER KHO
+1784 ; [.379E.0020.0002] # KHMER LETTER NGO
+1785 ; [.379F.0020.0002] # KHMER LETTER CA
+1786 ; [.37A0.0020.0002] # KHMER LETTER CHA
+1787 ; [.37A1.0020.0002] # KHMER LETTER CO
+1788 ; [.37A2.0020.0002] # KHMER LETTER CHO
+1789 ; [.37A3.0020.0002] # KHMER LETTER NYO
+178A ; [.37A4.0020.0002] # KHMER LETTER DA
+178B ; [.37A5.0020.0002] # KHMER LETTER TTHA
+178C ; [.37A6.0020.0002] # KHMER LETTER DO
+178D ; [.37A7.0020.0002] # KHMER LETTER TTHO
+178E ; [.37A8.0020.0002] # KHMER LETTER NNO
+178F ; [.37A9.0020.0002] # KHMER LETTER TA
+1790 ; [.37AA.0020.0002] # KHMER LETTER THA
+1791 ; [.37AB.0020.0002] # KHMER LETTER TO
+1792 ; [.37AC.0020.0002] # KHMER LETTER THO
+1793 ; [.37AD.0020.0002] # KHMER LETTER NO
+1794 ; [.37AE.0020.0002] # KHMER LETTER BA
+1795 ; [.37AF.0020.0002] # KHMER LETTER PHA
+1796 ; [.37B0.0020.0002] # KHMER LETTER PO
+1797 ; [.37B1.0020.0002] # KHMER LETTER PHO
+1798 ; [.37B2.0020.0002] # KHMER LETTER MO
+1799 ; [.37B3.0020.0002] # KHMER LETTER YO
+179A ; [.37B4.0020.0002] # KHMER LETTER RO
+179B ; [.37B5.0020.0002] # KHMER LETTER LO
+179C ; [.37B6.0020.0002] # KHMER LETTER VO
+179D ; [.37B7.0020.0002] # KHMER LETTER SHA
+179E ; [.37B8.0020.0002] # KHMER LETTER SSO
+179F ; [.37B9.0020.0002] # KHMER LETTER SA
+17A0 ; [.37BA.0020.0002] # KHMER LETTER HA
+17A1 ; [.37BB.0020.0002] # KHMER LETTER LA
+17A2 ; [.37BC.0020.0002] # KHMER LETTER QA
+17DC ; [.37BD.0020.0002] # KHMER SIGN AVAKRAHASANYA
+17A3 ; [.37BE.0020.0002] # KHMER INDEPENDENT VOWEL QAQ
+17A4 ; [.37BF.0020.0002] # KHMER INDEPENDENT VOWEL QAA
+17A5 ; [.37C0.0020.0002] # KHMER INDEPENDENT VOWEL QI
+17A6 ; [.37C1.0020.0002] # KHMER INDEPENDENT VOWEL QII
+17A7 ; [.37C2.0020.0002] # KHMER INDEPENDENT VOWEL QU
+17A8 ; [.37C3.0020.0002] # KHMER INDEPENDENT VOWEL QUK
+17A9 ; [.37C4.0020.0002] # KHMER INDEPENDENT VOWEL QUU
+17AA ; [.37C5.0020.0002] # KHMER INDEPENDENT VOWEL QUUV
+17AB ; [.37C6.0020.0002] # KHMER INDEPENDENT VOWEL RY
+17AC ; [.37C7.0020.0002] # KHMER INDEPENDENT VOWEL RYY
+17AD ; [.37C8.0020.0002] # KHMER INDEPENDENT VOWEL LY
+17AE ; [.37C9.0020.0002] # KHMER INDEPENDENT VOWEL LYY
+17AF ; [.37CA.0020.0002] # KHMER INDEPENDENT VOWEL QE
+17B0 ; [.37CB.0020.0002] # KHMER INDEPENDENT VOWEL QAI
+17B1 ; [.37CC.0020.0002] # KHMER INDEPENDENT VOWEL QOO TYPE ONE
+17B2 ; [.37CD.0020.0002] # KHMER INDEPENDENT VOWEL QOO TYPE TWO
+17B3 ; [.37CE.0020.0002] # KHMER INDEPENDENT VOWEL QAU
+17B6 ; [.37CF.0020.0002] # KHMER VOWEL SIGN AA
+17B7 ; [.37D0.0020.0002] # KHMER VOWEL SIGN I
+17B8 ; [.37D1.0020.0002] # KHMER VOWEL SIGN II
+17B9 ; [.37D2.0020.0002] # KHMER VOWEL SIGN Y
+17BA ; [.37D3.0020.0002] # KHMER VOWEL SIGN YY
+17BB ; [.37D4.0020.0002] # KHMER VOWEL SIGN U
+17BC ; [.37D5.0020.0002] # KHMER VOWEL SIGN UU
+17BD ; [.37D6.0020.0002] # KHMER VOWEL SIGN UA
+17BE ; [.37D7.0020.0002] # KHMER VOWEL SIGN OE
+17BF ; [.37D8.0020.0002] # KHMER VOWEL SIGN YA
+17C0 ; [.37D9.0020.0002] # KHMER VOWEL SIGN IE
+17C1 ; [.37DA.0020.0002] # KHMER VOWEL SIGN E
+17C2 ; [.37DB.0020.0002] # KHMER VOWEL SIGN AE
+17C3 ; [.37DC.0020.0002] # KHMER VOWEL SIGN AI
+17C4 ; [.37DD.0020.0002] # KHMER VOWEL SIGN OO
+17C5 ; [.37DE.0020.0002] # KHMER VOWEL SIGN AU
+17D2 ; [.37DF.0020.0002] # KHMER SIGN COENG
+1950 ; [.37E0.0020.0002] # TAI LE LETTER KA
+1951 ; [.37E1.0020.0002] # TAI LE LETTER XA
+1952 ; [.37E2.0020.0002] # TAI LE LETTER NGA
+1953 ; [.37E3.0020.0002] # TAI LE LETTER TSA
+1954 ; [.37E4.0020.0002] # TAI LE LETTER SA
+1955 ; [.37E5.0020.0002] # TAI LE LETTER YA
+1956 ; [.37E6.0020.0002] # TAI LE LETTER TA
+1957 ; [.37E7.0020.0002] # TAI LE LETTER THA
+1958 ; [.37E8.0020.0002] # TAI LE LETTER LA
+1959 ; [.37E9.0020.0002] # TAI LE LETTER PA
+195A ; [.37EA.0020.0002] # TAI LE LETTER PHA
+195B ; [.37EB.0020.0002] # TAI LE LETTER MA
+195C ; [.37EC.0020.0002] # TAI LE LETTER FA
+195D ; [.37ED.0020.0002] # TAI LE LETTER VA
+195E ; [.37EE.0020.0002] # TAI LE LETTER HA
+195F ; [.37EF.0020.0002] # TAI LE LETTER QA
+1960 ; [.37F0.0020.0002] # TAI LE LETTER KHA
+1961 ; [.37F1.0020.0002] # TAI LE LETTER TSHA
+1962 ; [.37F2.0020.0002] # TAI LE LETTER NA
+1963 ; [.37F3.0020.0002] # TAI LE LETTER A
+1964 ; [.37F4.0020.0002] # TAI LE LETTER I
+1965 ; [.37F5.0020.0002] # TAI LE LETTER EE
+1966 ; [.37F6.0020.0002] # TAI LE LETTER EH
+1967 ; [.37F7.0020.0002] # TAI LE LETTER U
+1968 ; [.37F8.0020.0002] # TAI LE LETTER OO
+1969 ; [.37F9.0020.0002] # TAI LE LETTER O
+196A ; [.37FA.0020.0002] # TAI LE LETTER UE
+196B ; [.37FB.0020.0002] # TAI LE LETTER E
+196C ; [.37FC.0020.0002] # TAI LE LETTER AUE
+196D ; [.37FD.0020.0002] # TAI LE LETTER AI
+1970 ; [.37FE.0020.0002] # TAI LE LETTER TONE-2
+1971 ; [.37FF.0020.0002] # TAI LE LETTER TONE-3
+1972 ; [.3800.0020.0002] # TAI LE LETTER TONE-4
+1973 ; [.3801.0020.0002] # TAI LE LETTER TONE-5
+1974 ; [.3802.0020.0002] # TAI LE LETTER TONE-6
+1980 ; [.3803.0020.0002] # NEW TAI LUE LETTER HIGH QA
+19B5 1980 ; [.3803.0020.0002][.3834.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH QA>
+19B6 1980 ; [.3803.0020.0002][.3835.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH QA>
+19B7 1980 ; [.3803.0020.0002][.3836.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH QA>
+19BA 1980 ; [.3803.0020.0002][.3839.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH QA>
+1981 ; [.3804.0020.0002] # NEW TAI LUE LETTER LOW QA
+19B5 1981 ; [.3804.0020.0002][.3834.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW QA>
+19B6 1981 ; [.3804.0020.0002][.3835.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW QA>
+19B7 1981 ; [.3804.0020.0002][.3836.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW QA>
+19BA 1981 ; [.3804.0020.0002][.3839.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW QA>
+1982 ; [.3805.0020.0002] # NEW TAI LUE LETTER HIGH KA
+19B5 1982 ; [.3805.0020.0002][.3834.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH KA>
+19B6 1982 ; [.3805.0020.0002][.3835.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH KA>
+19B7 1982 ; [.3805.0020.0002][.3836.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH KA>
+19BA 1982 ; [.3805.0020.0002][.3839.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH KA>
+1983 ; [.3806.0020.0002] # NEW TAI LUE LETTER HIGH XA
+19B5 1983 ; [.3806.0020.0002][.3834.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH XA>
+19B6 1983 ; [.3806.0020.0002][.3835.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH XA>
+19B7 1983 ; [.3806.0020.0002][.3836.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH XA>
+19BA 1983 ; [.3806.0020.0002][.3839.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH XA>
+1984 ; [.3807.0020.0002] # NEW TAI LUE LETTER HIGH NGA
+19B5 1984 ; [.3807.0020.0002][.3834.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH NGA>
+19B6 1984 ; [.3807.0020.0002][.3835.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH NGA>
+19B7 1984 ; [.3807.0020.0002][.3836.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH NGA>
+19BA 1984 ; [.3807.0020.0002][.3839.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH NGA>
+1985 ; [.3808.0020.0002] # NEW TAI LUE LETTER LOW KA
+19B5 1985 ; [.3808.0020.0002][.3834.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW KA>
+19B6 1985 ; [.3808.0020.0002][.3835.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW KA>
+19B7 1985 ; [.3808.0020.0002][.3836.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW KA>
+19BA 1985 ; [.3808.0020.0002][.3839.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW KA>
+1986 ; [.3809.0020.0002] # NEW TAI LUE LETTER LOW XA
+19B5 1986 ; [.3809.0020.0002][.3834.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW XA>
+19B6 1986 ; [.3809.0020.0002][.3835.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW XA>
+19B7 1986 ; [.3809.0020.0002][.3836.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW XA>
+19BA 1986 ; [.3809.0020.0002][.3839.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW XA>
+1987 ; [.380A.0020.0002] # NEW TAI LUE LETTER LOW NGA
+19B5 1987 ; [.380A.0020.0002][.3834.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW NGA>
+19B6 1987 ; [.380A.0020.0002][.3835.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW NGA>
+19B7 1987 ; [.380A.0020.0002][.3836.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW NGA>
+19BA 1987 ; [.380A.0020.0002][.3839.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW NGA>
+1988 ; [.380B.0020.0002] # NEW TAI LUE LETTER HIGH TSA
+19B5 1988 ; [.380B.0020.0002][.3834.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH TSA>
+19B6 1988 ; [.380B.0020.0002][.3835.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH TSA>
+19B7 1988 ; [.380B.0020.0002][.3836.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH TSA>
+19BA 1988 ; [.380B.0020.0002][.3839.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH TSA>
+1989 ; [.380C.0020.0002] # NEW TAI LUE LETTER HIGH SA
+19B5 1989 ; [.380C.0020.0002][.3834.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH SA>
+19B6 1989 ; [.380C.0020.0002][.3835.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH SA>
+19B7 1989 ; [.380C.0020.0002][.3836.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH SA>
+19BA 1989 ; [.380C.0020.0002][.3839.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH SA>
+198A ; [.380D.0020.0002] # NEW TAI LUE LETTER HIGH YA
+19B5 198A ; [.380D.0020.0002][.3834.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH YA>
+19B6 198A ; [.380D.0020.0002][.3835.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH YA>
+19B7 198A ; [.380D.0020.0002][.3836.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH YA>
+19BA 198A ; [.380D.0020.0002][.3839.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH YA>
+198B ; [.380E.0020.0002] # NEW TAI LUE LETTER LOW TSA
+19B5 198B ; [.380E.0020.0002][.3834.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW TSA>
+19B6 198B ; [.380E.0020.0002][.3835.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW TSA>
+19B7 198B ; [.380E.0020.0002][.3836.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW TSA>
+19BA 198B ; [.380E.0020.0002][.3839.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW TSA>
+198C ; [.380F.0020.0002] # NEW TAI LUE LETTER LOW SA
+19B5 198C ; [.380F.0020.0002][.3834.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW SA>
+19B6 198C ; [.380F.0020.0002][.3835.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW SA>
+19B7 198C ; [.380F.0020.0002][.3836.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW SA>
+19BA 198C ; [.380F.0020.0002][.3839.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW SA>
+198D ; [.3810.0020.0002] # NEW TAI LUE LETTER LOW YA
+19B5 198D ; [.3810.0020.0002][.3834.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW YA>
+19B6 198D ; [.3810.0020.0002][.3835.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW YA>
+19B7 198D ; [.3810.0020.0002][.3836.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW YA>
+19BA 198D ; [.3810.0020.0002][.3839.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW YA>
+198E ; [.3811.0020.0002] # NEW TAI LUE LETTER HIGH TA
+19B5 198E ; [.3811.0020.0002][.3834.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH TA>
+19B6 198E ; [.3811.0020.0002][.3835.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH TA>
+19B7 198E ; [.3811.0020.0002][.3836.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH TA>
+19BA 198E ; [.3811.0020.0002][.3839.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH TA>
+198F ; [.3812.0020.0002] # NEW TAI LUE LETTER HIGH THA
+19B5 198F ; [.3812.0020.0002][.3834.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH THA>
+19B6 198F ; [.3812.0020.0002][.3835.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH THA>
+19B7 198F ; [.3812.0020.0002][.3836.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH THA>
+19BA 198F ; [.3812.0020.0002][.3839.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH THA>
+1990 ; [.3813.0020.0002] # NEW TAI LUE LETTER HIGH NA
+19B5 1990 ; [.3813.0020.0002][.3834.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH NA>
+19B6 1990 ; [.3813.0020.0002][.3835.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH NA>
+19B7 1990 ; [.3813.0020.0002][.3836.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH NA>
+19BA 1990 ; [.3813.0020.0002][.3839.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH NA>
+1991 ; [.3814.0020.0002] # NEW TAI LUE LETTER LOW TA
+19B5 1991 ; [.3814.0020.0002][.3834.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW TA>
+19B6 1991 ; [.3814.0020.0002][.3835.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW TA>
+19B7 1991 ; [.3814.0020.0002][.3836.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW TA>
+19BA 1991 ; [.3814.0020.0002][.3839.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW TA>
+1992 ; [.3815.0020.0002] # NEW TAI LUE LETTER LOW THA
+19B5 1992 ; [.3815.0020.0002][.3834.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW THA>
+19B6 1992 ; [.3815.0020.0002][.3835.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW THA>
+19B7 1992 ; [.3815.0020.0002][.3836.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW THA>
+19BA 1992 ; [.3815.0020.0002][.3839.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW THA>
+1993 ; [.3816.0020.0002] # NEW TAI LUE LETTER LOW NA
+19B5 1993 ; [.3816.0020.0002][.3834.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW NA>
+19B6 1993 ; [.3816.0020.0002][.3835.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW NA>
+19B7 1993 ; [.3816.0020.0002][.3836.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW NA>
+19BA 1993 ; [.3816.0020.0002][.3839.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW NA>
+1994 ; [.3817.0020.0002] # NEW TAI LUE LETTER HIGH PA
+19B5 1994 ; [.3817.0020.0002][.3834.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH PA>
+19B6 1994 ; [.3817.0020.0002][.3835.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH PA>
+19B7 1994 ; [.3817.0020.0002][.3836.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH PA>
+19BA 1994 ; [.3817.0020.0002][.3839.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH PA>
+1995 ; [.3818.0020.0002] # NEW TAI LUE LETTER HIGH PHA
+19B5 1995 ; [.3818.0020.0002][.3834.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH PHA>
+19B6 1995 ; [.3818.0020.0002][.3835.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH PHA>
+19B7 1995 ; [.3818.0020.0002][.3836.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH PHA>
+19BA 1995 ; [.3818.0020.0002][.3839.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH PHA>
+1996 ; [.3819.0020.0002] # NEW TAI LUE LETTER HIGH MA
+19B5 1996 ; [.3819.0020.0002][.3834.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH MA>
+19B6 1996 ; [.3819.0020.0002][.3835.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH MA>
+19B7 1996 ; [.3819.0020.0002][.3836.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH MA>
+19BA 1996 ; [.3819.0020.0002][.3839.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH MA>
+1997 ; [.381A.0020.0002] # NEW TAI LUE LETTER LOW PA
+19B5 1997 ; [.381A.0020.0002][.3834.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW PA>
+19B6 1997 ; [.381A.0020.0002][.3835.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW PA>
+19B7 1997 ; [.381A.0020.0002][.3836.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW PA>
+19BA 1997 ; [.381A.0020.0002][.3839.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW PA>
+1998 ; [.381B.0020.0002] # NEW TAI LUE LETTER LOW PHA
+19B5 1998 ; [.381B.0020.0002][.3834.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW PHA>
+19B6 1998 ; [.381B.0020.0002][.3835.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW PHA>
+19B7 1998 ; [.381B.0020.0002][.3836.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW PHA>
+19BA 1998 ; [.381B.0020.0002][.3839.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW PHA>
+1999 ; [.381C.0020.0002] # NEW TAI LUE LETTER LOW MA
+19B5 1999 ; [.381C.0020.0002][.3834.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW MA>
+19B6 1999 ; [.381C.0020.0002][.3835.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW MA>
+19B7 1999 ; [.381C.0020.0002][.3836.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW MA>
+19BA 1999 ; [.381C.0020.0002][.3839.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW MA>
+199A ; [.381D.0020.0002] # NEW TAI LUE LETTER HIGH FA
+19B5 199A ; [.381D.0020.0002][.3834.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH FA>
+19B6 199A ; [.381D.0020.0002][.3835.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH FA>
+19B7 199A ; [.381D.0020.0002][.3836.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH FA>
+19BA 199A ; [.381D.0020.0002][.3839.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH FA>
+199B ; [.381E.0020.0002] # NEW TAI LUE LETTER HIGH VA
+19B5 199B ; [.381E.0020.0002][.3834.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH VA>
+19B6 199B ; [.381E.0020.0002][.3835.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH VA>
+19B7 199B ; [.381E.0020.0002][.3836.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH VA>
+19BA 199B ; [.381E.0020.0002][.3839.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH VA>
+199C ; [.381F.0020.0002] # NEW TAI LUE LETTER HIGH LA
+19B5 199C ; [.381F.0020.0002][.3834.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH LA>
+19B6 199C ; [.381F.0020.0002][.3835.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH LA>
+19DE ; [.381F.0020.0004][.3835.0020.0004] # NEW TAI LUE SIGN LAE
+19DF ; [.381F.0020.0004][.3835.0020.0004][.3840.0020.0004] # NEW TAI LUE SIGN LAEV
+19B7 199C ; [.381F.0020.0002][.3836.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH LA>
+19BA 199C ; [.381F.0020.0002][.3839.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH LA>
+199D ; [.3820.0020.0002] # NEW TAI LUE LETTER LOW FA
+19B5 199D ; [.3820.0020.0002][.3834.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW FA>
+19B6 199D ; [.3820.0020.0002][.3835.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW FA>
+19B7 199D ; [.3820.0020.0002][.3836.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW FA>
+19BA 199D ; [.3820.0020.0002][.3839.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW FA>
+199E ; [.3821.0020.0002] # NEW TAI LUE LETTER LOW VA
+19B5 199E ; [.3821.0020.0002][.3834.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW VA>
+19B6 199E ; [.3821.0020.0002][.3835.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW VA>
+19B7 199E ; [.3821.0020.0002][.3836.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW VA>
+19BA 199E ; [.3821.0020.0002][.3839.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW VA>
+199F ; [.3822.0020.0002] # NEW TAI LUE LETTER LOW LA
+19B5 199F ; [.3822.0020.0002][.3834.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW LA>
+19B6 199F ; [.3822.0020.0002][.3835.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW LA>
+19B7 199F ; [.3822.0020.0002][.3836.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW LA>
+19BA 199F ; [.3822.0020.0002][.3839.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW LA>
+19A0 ; [.3823.0020.0002] # NEW TAI LUE LETTER HIGH HA
+19B5 19A0 ; [.3823.0020.0002][.3834.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH HA>
+19B6 19A0 ; [.3823.0020.0002][.3835.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH HA>
+19B7 19A0 ; [.3823.0020.0002][.3836.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH HA>
+19BA 19A0 ; [.3823.0020.0002][.3839.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH HA>
+19A1 ; [.3824.0020.0002] # NEW TAI LUE LETTER HIGH DA
+19B5 19A1 ; [.3824.0020.0002][.3834.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH DA>
+19B6 19A1 ; [.3824.0020.0002][.3835.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH DA>
+19B7 19A1 ; [.3824.0020.0002][.3836.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH DA>
+19BA 19A1 ; [.3824.0020.0002][.3839.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH DA>
+19A2 ; [.3825.0020.0002] # NEW TAI LUE LETTER HIGH BA
+19B5 19A2 ; [.3825.0020.0002][.3834.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH BA>
+19B6 19A2 ; [.3825.0020.0002][.3835.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH BA>
+19B7 19A2 ; [.3825.0020.0002][.3836.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH BA>
+19BA 19A2 ; [.3825.0020.0002][.3839.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH BA>
+19A3 ; [.3826.0020.0002] # NEW TAI LUE LETTER LOW HA
+19B5 19A3 ; [.3826.0020.0002][.3834.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW HA>
+19B6 19A3 ; [.3826.0020.0002][.3835.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW HA>
+19B7 19A3 ; [.3826.0020.0002][.3836.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW HA>
+19BA 19A3 ; [.3826.0020.0002][.3839.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW HA>
+19A4 ; [.3827.0020.0002] # NEW TAI LUE LETTER LOW DA
+19B5 19A4 ; [.3827.0020.0002][.3834.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW DA>
+19B6 19A4 ; [.3827.0020.0002][.3835.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW DA>
+19B7 19A4 ; [.3827.0020.0002][.3836.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW DA>
+19BA 19A4 ; [.3827.0020.0002][.3839.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW DA>
+19A5 ; [.3828.0020.0002] # NEW TAI LUE LETTER LOW BA
+19B5 19A5 ; [.3828.0020.0002][.3834.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW BA>
+19B6 19A5 ; [.3828.0020.0002][.3835.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW BA>
+19B7 19A5 ; [.3828.0020.0002][.3836.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW BA>
+19BA 19A5 ; [.3828.0020.0002][.3839.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW BA>
+19A6 ; [.3829.0020.0002] # NEW TAI LUE LETTER HIGH KVA
+19B5 19A6 ; [.3829.0020.0002][.3834.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH KVA>
+19B6 19A6 ; [.3829.0020.0002][.3835.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH KVA>
+19B7 19A6 ; [.3829.0020.0002][.3836.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH KVA>
+19BA 19A6 ; [.3829.0020.0002][.3839.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH KVA>
+19A7 ; [.382A.0020.0002] # NEW TAI LUE LETTER HIGH XVA
+19B5 19A7 ; [.382A.0020.0002][.3834.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH XVA>
+19B6 19A7 ; [.382A.0020.0002][.3835.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH XVA>
+19B7 19A7 ; [.382A.0020.0002][.3836.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH XVA>
+19BA 19A7 ; [.382A.0020.0002][.3839.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH XVA>
+19A8 ; [.382B.0020.0002] # NEW TAI LUE LETTER LOW KVA
+19B5 19A8 ; [.382B.0020.0002][.3834.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW KVA>
+19B6 19A8 ; [.382B.0020.0002][.3835.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW KVA>
+19B7 19A8 ; [.382B.0020.0002][.3836.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW KVA>
+19BA 19A8 ; [.382B.0020.0002][.3839.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW KVA>
+19A9 ; [.382C.0020.0002] # NEW TAI LUE LETTER LOW XVA
+19B5 19A9 ; [.382C.0020.0002][.3834.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW XVA>
+19B6 19A9 ; [.382C.0020.0002][.3835.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW XVA>
+19B7 19A9 ; [.382C.0020.0002][.3836.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW XVA>
+19BA 19A9 ; [.382C.0020.0002][.3839.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW XVA>
+19AA ; [.382D.0020.0002] # NEW TAI LUE LETTER HIGH SUA
+19B5 19AA ; [.382D.0020.0002][.3834.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER HIGH SUA>
+19B6 19AA ; [.382D.0020.0002][.3835.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER HIGH SUA>
+19B7 19AA ; [.382D.0020.0002][.3836.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER HIGH SUA>
+19BA 19AA ; [.382D.0020.0002][.3839.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER HIGH SUA>
+19AB ; [.382E.0020.0002] # NEW TAI LUE LETTER LOW SUA
+19B5 19AB ; [.382E.0020.0002][.3834.0020.0002] # <NEW TAI LUE VOWEL SIGN E, NEW TAI LUE LETTER LOW SUA>
+19B6 19AB ; [.382E.0020.0002][.3835.0020.0002] # <NEW TAI LUE VOWEL SIGN AE, NEW TAI LUE LETTER LOW SUA>
+19B7 19AB ; [.382E.0020.0002][.3836.0020.0002] # <NEW TAI LUE VOWEL SIGN O, NEW TAI LUE LETTER LOW SUA>
+19BA 19AB ; [.382E.0020.0002][.3839.0020.0002] # <NEW TAI LUE VOWEL SIGN AY, NEW TAI LUE LETTER LOW SUA>
+19B0 ; [.382F.0020.0002] # NEW TAI LUE VOWEL SIGN VOWEL SHORTENER
+19B1 ; [.3830.0020.0002] # NEW TAI LUE VOWEL SIGN AA
+19B2 ; [.3831.0020.0002] # NEW TAI LUE VOWEL SIGN II
+19B3 ; [.3832.0020.0002] # NEW TAI LUE VOWEL SIGN U
+19B4 ; [.3833.0020.0002] # NEW TAI LUE VOWEL SIGN UU
+19B5 ; [.3834.0020.0002] # NEW TAI LUE VOWEL SIGN E
+19B6 ; [.3835.0020.0002] # NEW TAI LUE VOWEL SIGN AE
+19B7 ; [.3836.0020.0002] # NEW TAI LUE VOWEL SIGN O
+19B8 ; [.3837.0020.0002] # NEW TAI LUE VOWEL SIGN OA
+19B9 ; [.3838.0020.0002] # NEW TAI LUE VOWEL SIGN UE
+19BA ; [.3839.0020.0002] # NEW TAI LUE VOWEL SIGN AY
+19BB ; [.383A.0020.0002] # NEW TAI LUE VOWEL SIGN AAY
+19BC ; [.383B.0020.0002] # NEW TAI LUE VOWEL SIGN UY
+19BD ; [.383C.0020.0002] # NEW TAI LUE VOWEL SIGN OY
+19BE ; [.383D.0020.0002] # NEW TAI LUE VOWEL SIGN OAY
+19BF ; [.383E.0020.0002] # NEW TAI LUE VOWEL SIGN UEY
+19C0 ; [.383F.0020.0002] # NEW TAI LUE VOWEL SIGN IY
+19C1 ; [.3840.0020.0002] # NEW TAI LUE LETTER FINAL V
+19C2 ; [.3841.0020.0002] # NEW TAI LUE LETTER FINAL NG
+19C3 ; [.3842.0020.0002] # NEW TAI LUE LETTER FINAL N
+19C4 ; [.3843.0020.0002] # NEW TAI LUE LETTER FINAL M
+19C5 ; [.3844.0020.0002] # NEW TAI LUE LETTER FINAL K
+19C6 ; [.3845.0020.0002] # NEW TAI LUE LETTER FINAL D
+19C7 ; [.3846.0020.0002] # NEW TAI LUE LETTER FINAL B
+19C8 ; [.3847.0020.0002] # NEW TAI LUE TONE MARK-1
+19C9 ; [.3848.0020.0002] # NEW TAI LUE TONE MARK-2
+1A20 ; [.3849.0020.0002] # TAI THAM LETTER HIGH KA
+1A21 ; [.384A.0020.0002] # TAI THAM LETTER HIGH KHA
+1A22 ; [.384B.0020.0002] # TAI THAM LETTER HIGH KXA
+1A23 ; [.384C.0020.0002] # TAI THAM LETTER LOW KA
+1A24 ; [.384D.0020.0002] # TAI THAM LETTER LOW KXA
+1A25 ; [.384E.0020.0002] # TAI THAM LETTER LOW KHA
+1A26 ; [.384F.0020.0002] # TAI THAM LETTER NGA
+1A58 ; [.384F.0020.0004] # TAI THAM SIGN MAI KANG LAI
+1A59 ; [.384F.0020.0004] # TAI THAM CONSONANT SIGN FINAL NGA
+1A27 ; [.3850.0020.0002] # TAI THAM LETTER HIGH CA
+1A28 ; [.3851.0020.0002] # TAI THAM LETTER HIGH CHA
+1A29 ; [.3852.0020.0002] # TAI THAM LETTER LOW CA
+1A2A ; [.3853.0020.0002] # TAI THAM LETTER LOW SA
+1A2B ; [.3854.0020.0002] # TAI THAM LETTER LOW CHA
+1A2C ; [.3855.0020.0002] # TAI THAM LETTER NYA
+1A2D ; [.3856.0020.0002] # TAI THAM LETTER RATA
+1A2E ; [.3857.0020.0002] # TAI THAM LETTER HIGH RATHA
+1A2F ; [.3858.0020.0002] # TAI THAM LETTER DA
+1A30 ; [.3859.0020.0002] # TAI THAM LETTER LOW RATHA
+1A31 ; [.385A.0020.0002] # TAI THAM LETTER RANA
+1A32 ; [.385B.0020.0002] # TAI THAM LETTER HIGH TA
+1A33 ; [.385C.0020.0002] # TAI THAM LETTER HIGH THA
+1A34 ; [.385D.0020.0002] # TAI THAM LETTER LOW TA
+1A35 ; [.385E.0020.0002] # TAI THAM LETTER LOW THA
+1A36 ; [.385F.0020.0002] # TAI THAM LETTER NA
+1A37 ; [.3860.0020.0002] # TAI THAM LETTER BA
+1A38 ; [.3861.0020.0002] # TAI THAM LETTER HIGH PA
+1A39 ; [.3862.0020.0002] # TAI THAM LETTER HIGH PHA
+1A3A ; [.3863.0020.0002] # TAI THAM LETTER HIGH FA
+1A3B ; [.3864.0020.0002] # TAI THAM LETTER LOW PA
+1A5A ; [.3864.0020.0004] # TAI THAM CONSONANT SIGN LOW PA
+1A5B ; [.3864.0020.0004] # TAI THAM CONSONANT SIGN HIGH RATHA OR LOW PA
+1A3C ; [.3865.0020.0002] # TAI THAM LETTER LOW FA
+1A3D ; [.3866.0020.0002] # TAI THAM LETTER LOW PHA
+1A3E ; [.3867.0020.0002] # TAI THAM LETTER MA
+1A3F ; [.3868.0020.0002] # TAI THAM LETTER LOW YA
+1A40 ; [.3869.0020.0002] # TAI THAM LETTER HIGH YA
+1A41 ; [.386A.0020.0002] # TAI THAM LETTER RA
+1A42 ; [.386B.0020.0002] # TAI THAM LETTER RUE
+1A43 ; [.386C.0020.0002] # TAI THAM LETTER LA
+1A44 ; [.386D.0020.0002] # TAI THAM LETTER LUE
+1A45 ; [.386E.0020.0002] # TAI THAM LETTER WA
+1A46 ; [.386F.0020.0002] # TAI THAM LETTER HIGH SHA
+1A54 ; [.386F.0020.0004][.3895.0020.0004][.386F.0020.0004] # TAI THAM LETTER GREAT SA
+1A47 ; [.3870.0020.0002] # TAI THAM LETTER HIGH SSA
+1A48 ; [.3871.0020.0002] # TAI THAM LETTER HIGH SA
+1A49 ; [.3872.0020.0002] # TAI THAM LETTER HIGH HA
+1A4A ; [.3873.0020.0002] # TAI THAM LETTER LLA
+1A4B ; [.3874.0020.0002] # TAI THAM LETTER A
+1A4C ; [.3875.0020.0002] # TAI THAM LETTER LOW HA
+1A53 ; [.3876.0020.0002] # TAI THAM LETTER LAE
+1A6B ; [.3877.0020.0002] # TAI THAM VOWEL SIGN O
+1A55 ; [.3878.0020.0002] # TAI THAM CONSONANT SIGN MEDIAL RA
+1A56 ; [.3879.0020.0002] # TAI THAM CONSONANT SIGN MEDIAL LA
+1A57 ; [.387A.0020.0002] # TAI THAM CONSONANT SIGN LA TANG LAI
+1A5C ; [.387B.0020.0002] # TAI THAM CONSONANT SIGN MA
+1A5D ; [.387C.0020.0002] # TAI THAM CONSONANT SIGN BA
+1A5E ; [.387D.0020.0002] # TAI THAM CONSONANT SIGN SA
+1A4D ; [.387E.0020.0002] # TAI THAM LETTER I
+1A4E ; [.387F.0020.0002] # TAI THAM LETTER II
+1A4F ; [.3880.0020.0002] # TAI THAM LETTER U
+1A50 ; [.3881.0020.0002] # TAI THAM LETTER UU
+1A51 ; [.3882.0020.0002] # TAI THAM LETTER EE
+1A52 ; [.3883.0020.0002] # TAI THAM LETTER OO
+1A61 ; [.3884.0020.0002] # TAI THAM VOWEL SIGN A
+1A6C ; [.3885.0020.0002] # TAI THAM VOWEL SIGN OA BELOW
+1A62 ; [.3886.0020.0002] # TAI THAM VOWEL SIGN MAI SAT
+1A63 ; [.3887.0020.0002] # TAI THAM VOWEL SIGN AA
+1A64 ; [.3887.0020.0004] # TAI THAM VOWEL SIGN TALL AA
+1A65 ; [.3888.0020.0002] # TAI THAM VOWEL SIGN I
+1A66 ; [.3889.0020.0002] # TAI THAM VOWEL SIGN II
+1A67 ; [.388A.0020.0002] # TAI THAM VOWEL SIGN UE
+1A68 ; [.388B.0020.0002] # TAI THAM VOWEL SIGN UUE
+1A69 ; [.388C.0020.0002] # TAI THAM VOWEL SIGN U
+1A6A ; [.388D.0020.0002] # TAI THAM VOWEL SIGN UU
+1A6E ; [.388E.0020.0002] # TAI THAM VOWEL SIGN E
+1A6F ; [.388F.0020.0002] # TAI THAM VOWEL SIGN AE
+1A73 ; [.3890.0020.0002] # TAI THAM VOWEL SIGN OA ABOVE
+1A70 ; [.3891.0020.0002] # TAI THAM VOWEL SIGN OO
+1A71 ; [.3892.0020.0002] # TAI THAM VOWEL SIGN AI
+1A72 ; [.3893.0020.0002] # TAI THAM VOWEL SIGN THAM AI
+1A6D ; [.3894.0020.0002] # TAI THAM VOWEL SIGN OY
+1A60 ; [.3895.0020.0002] # TAI THAM SIGN SAKOT
+AA00 ; [.3896.0020.0002] # CHAM LETTER A
+AA01 ; [.3897.0020.0002] # CHAM LETTER I
+AA02 ; [.3898.0020.0002] # CHAM LETTER U
+AA03 ; [.3899.0020.0002] # CHAM LETTER E
+AA04 ; [.389A.0020.0002] # CHAM LETTER AI
+AA05 ; [.389B.0020.0002] # CHAM LETTER O
+AA06 ; [.389C.0020.0002] # CHAM LETTER KA
+AA07 ; [.389D.0020.0002] # CHAM LETTER KHA
+AA08 ; [.389E.0020.0002] # CHAM LETTER GA
+AA09 ; [.389F.0020.0002] # CHAM LETTER GHA
+AA0A ; [.38A0.0020.0002] # CHAM LETTER NGUE
+AA0B ; [.38A1.0020.0002] # CHAM LETTER NGA
+AA0C ; [.38A2.0020.0002] # CHAM LETTER CHA
+AA0D ; [.38A3.0020.0002] # CHAM LETTER CHHA
+AA0E ; [.38A4.0020.0002] # CHAM LETTER JA
+AA0F ; [.38A5.0020.0002] # CHAM LETTER JHA
+AA10 ; [.38A6.0020.0002] # CHAM LETTER NHUE
+AA11 ; [.38A7.0020.0002] # CHAM LETTER NHA
+AA12 ; [.38A8.0020.0002] # CHAM LETTER NHJA
+AA13 ; [.38A9.0020.0002] # CHAM LETTER TA
+AA14 ; [.38AA.0020.0002] # CHAM LETTER THA
+AA15 ; [.38AB.0020.0002] # CHAM LETTER DA
+AA16 ; [.38AC.0020.0002] # CHAM LETTER DHA
+AA17 ; [.38AD.0020.0002] # CHAM LETTER NUE
+AA18 ; [.38AE.0020.0002] # CHAM LETTER NA
+AA19 ; [.38AF.0020.0002] # CHAM LETTER DDA
+AA1A ; [.38B0.0020.0002] # CHAM LETTER PA
+AA1B ; [.38B1.0020.0002] # CHAM LETTER PPA
+AA1C ; [.38B2.0020.0002] # CHAM LETTER PHA
+AA1D ; [.38B3.0020.0002] # CHAM LETTER BA
+AA1E ; [.38B4.0020.0002] # CHAM LETTER BHA
+AA1F ; [.38B5.0020.0002] # CHAM LETTER MUE
+AA20 ; [.38B6.0020.0002] # CHAM LETTER MA
+AA21 ; [.38B7.0020.0002] # CHAM LETTER BBA
+AA22 ; [.38B8.0020.0002] # CHAM LETTER YA
+AA23 ; [.38B9.0020.0002] # CHAM LETTER RA
+AA24 ; [.38BA.0020.0002] # CHAM LETTER LA
+AA25 ; [.38BB.0020.0002] # CHAM LETTER VA
+AA26 ; [.38BC.0020.0002] # CHAM LETTER SSA
+AA27 ; [.38BD.0020.0002] # CHAM LETTER SA
+AA28 ; [.38BE.0020.0002] # CHAM LETTER HA
+AA33 ; [.38BF.0020.0002] # CHAM CONSONANT SIGN YA
+AA34 ; [.38C0.0020.0002] # CHAM CONSONANT SIGN RA
+AA35 ; [.38C1.0020.0002] # CHAM CONSONANT SIGN LA
+AA36 ; [.38C2.0020.0002] # CHAM CONSONANT SIGN WA
+AA29 ; [.38C3.0020.0002] # CHAM VOWEL SIGN AA
+AA2A ; [.38C4.0020.0002] # CHAM VOWEL SIGN I
+AA2B ; [.38C5.0020.0002] # CHAM VOWEL SIGN II
+AA2C ; [.38C6.0020.0002] # CHAM VOWEL SIGN EI
+AA2D ; [.38C7.0020.0002] # CHAM VOWEL SIGN U
+AA2E ; [.38C8.0020.0002] # CHAM VOWEL SIGN OE
+AA2F ; [.38C9.0020.0002] # CHAM VOWEL SIGN O
+AA30 ; [.38CA.0020.0002] # CHAM VOWEL SIGN AI
+AA31 ; [.38CB.0020.0002] # CHAM VOWEL SIGN AU
+AA32 ; [.38CC.0020.0002] # CHAM VOWEL SIGN UE
+AA40 ; [.38CD.0020.0002] # CHAM LETTER FINAL K
+AA41 ; [.38CE.0020.0002] # CHAM LETTER FINAL G
+AA42 ; [.38CF.0020.0002] # CHAM LETTER FINAL NG
+AA43 ; [.38D0.0020.0002] # CHAM CONSONANT SIGN FINAL NG
+AA44 ; [.38D1.0020.0002] # CHAM LETTER FINAL CH
+AA45 ; [.38D2.0020.0002] # CHAM LETTER FINAL T
+AA46 ; [.38D3.0020.0002] # CHAM LETTER FINAL N
+AA47 ; [.38D4.0020.0002] # CHAM LETTER FINAL P
+AA48 ; [.38D5.0020.0002] # CHAM LETTER FINAL Y
+AA49 ; [.38D6.0020.0002] # CHAM LETTER FINAL R
+AA4A ; [.38D7.0020.0002] # CHAM LETTER FINAL L
+AA4B ; [.38D8.0020.0002] # CHAM LETTER FINAL SS
+AA4C ; [.38D9.0020.0002] # CHAM CONSONANT SIGN FINAL M
+AA4D ; [.38DA.0020.0002] # CHAM CONSONANT SIGN FINAL H
+1B05 ; [.38DB.0020.0002] # BALINESE LETTER AKARA
+1B06 ; [.38DC.0020.0002] # BALINESE LETTER AKARA TEDUNG
+1B05 1B35 ; [.38DC.0020.0002] # BALINESE LETTER AKARA TEDUNG
+1B07 ; [.38DD.0020.0002] # BALINESE LETTER IKARA
+1B08 ; [.38DE.0020.0002] # BALINESE LETTER IKARA TEDUNG
+1B07 1B35 ; [.38DE.0020.0002] # BALINESE LETTER IKARA TEDUNG
+1B09 ; [.38DF.0020.0002] # BALINESE LETTER UKARA
+1B0A ; [.38E0.0020.0002] # BALINESE LETTER UKARA TEDUNG
+1B09 1B35 ; [.38E0.0020.0002] # BALINESE LETTER UKARA TEDUNG
+1B0B ; [.38E1.0020.0002] # BALINESE LETTER RA REPA
+1B0C ; [.38E2.0020.0002] # BALINESE LETTER RA REPA TEDUNG
+1B0B 1B35 ; [.38E2.0020.0002] # BALINESE LETTER RA REPA TEDUNG
+1B0D ; [.38E3.0020.0002] # BALINESE LETTER LA LENGA
+1B0E ; [.38E4.0020.0002] # BALINESE LETTER LA LENGA TEDUNG
+1B0D 1B35 ; [.38E4.0020.0002] # BALINESE LETTER LA LENGA TEDUNG
+1B0F ; [.38E5.0020.0002] # BALINESE LETTER EKARA
+1B10 ; [.38E6.0020.0002] # BALINESE LETTER AIKARA
+1B11 ; [.38E7.0020.0002] # BALINESE LETTER OKARA
+1B12 ; [.38E8.0020.0002] # BALINESE LETTER OKARA TEDUNG
+1B11 1B35 ; [.38E8.0020.0002] # BALINESE LETTER OKARA TEDUNG
+1B13 ; [.38E9.0020.0002] # BALINESE LETTER KA
+1B45 ; [.38EA.0020.0002] # BALINESE LETTER KAF SASAK
+1B46 ; [.38EB.0020.0002] # BALINESE LETTER KHOT SASAK
+1B14 ; [.38EC.0020.0002] # BALINESE LETTER KA MAHAPRANA
+1B15 ; [.38ED.0020.0002] # BALINESE LETTER GA
+1B16 ; [.38EE.0020.0002] # BALINESE LETTER GA GORA
+1B17 ; [.38EF.0020.0002] # BALINESE LETTER NGA
+1B18 ; [.38F0.0020.0002] # BALINESE LETTER CA
+1B19 ; [.38F1.0020.0002] # BALINESE LETTER CA LACA
+1B1A ; [.38F2.0020.0002] # BALINESE LETTER JA
+1B4C ; [.38F2.0020.0004][.3920.0020.0004][.38F4.0020.0004] # BALINESE LETTER ARCHAIC JNYA
+1B1B ; [.38F3.0020.0002] # BALINESE LETTER JA JERA
+1B1C ; [.38F4.0020.0002] # BALINESE LETTER NYA
+1B1D ; [.38F5.0020.0002] # BALINESE LETTER TA LATIK
+1B1E ; [.38F6.0020.0002] # BALINESE LETTER TA MURDA MAHAPRANA
+1B1F ; [.38F7.0020.0002] # BALINESE LETTER DA MURDA ALPAPRANA
+1B20 ; [.38F8.0020.0002] # BALINESE LETTER DA MURDA MAHAPRANA
+1B21 ; [.38F9.0020.0002] # BALINESE LETTER NA RAMBAT
+1B22 ; [.38FA.0020.0002] # BALINESE LETTER TA
+1B47 ; [.38FB.0020.0002] # BALINESE LETTER TZIR SASAK
+1B23 ; [.38FC.0020.0002] # BALINESE LETTER TA TAWA
+1B24 ; [.38FD.0020.0002] # BALINESE LETTER DA
+1B25 ; [.38FE.0020.0002] # BALINESE LETTER DA MADU
+1B26 ; [.38FF.0020.0002] # BALINESE LETTER NA
+1B27 ; [.3900.0020.0002] # BALINESE LETTER PA
+1B48 ; [.3901.0020.0002] # BALINESE LETTER EF SASAK
+1B28 ; [.3902.0020.0002] # BALINESE LETTER PA KAPAL
+1B29 ; [.3903.0020.0002] # BALINESE LETTER BA
+1B2A ; [.3904.0020.0002] # BALINESE LETTER BA KEMBANG
+1B2B ; [.3905.0020.0002] # BALINESE LETTER MA
+1B2C ; [.3906.0020.0002] # BALINESE LETTER YA
+1B2D ; [.3907.0020.0002] # BALINESE LETTER RA
+1B2E ; [.3908.0020.0002] # BALINESE LETTER LA
+1B2F ; [.3909.0020.0002] # BALINESE LETTER WA
+1B49 ; [.390A.0020.0002] # BALINESE LETTER VE SASAK
+1B30 ; [.390B.0020.0002] # BALINESE LETTER SA SAGA
+1B31 ; [.390C.0020.0002] # BALINESE LETTER SA SAPA
+1B32 ; [.390D.0020.0002] # BALINESE LETTER SA
+1B4A ; [.390E.0020.0002] # BALINESE LETTER ZAL SASAK
+1B4B ; [.390F.0020.0002] # BALINESE LETTER ASYURA SASAK
+1B33 ; [.3910.0020.0002] # BALINESE LETTER HA
+1B35 ; [.3911.0020.0002] # BALINESE VOWEL SIGN TEDUNG
+1B36 ; [.3912.0020.0002] # BALINESE VOWEL SIGN ULU
+1B37 ; [.3913.0020.0002] # BALINESE VOWEL SIGN ULU SARI
+1B38 ; [.3914.0020.0002] # BALINESE VOWEL SIGN SUKU
+1B39 ; [.3915.0020.0002] # BALINESE VOWEL SIGN SUKU ILUT
+1B3A ; [.3916.0020.0002] # BALINESE VOWEL SIGN RA REPA
+1B3B ; [.3917.0020.0002] # BALINESE VOWEL SIGN RA REPA TEDUNG
+1B3A 1B35 ; [.3917.0020.0002] # BALINESE VOWEL SIGN RA REPA TEDUNG
+1B3C ; [.3918.0020.0002] # BALINESE VOWEL SIGN LA LENGA
+1B3D ; [.3919.0020.0002] # BALINESE VOWEL SIGN LA LENGA TEDUNG
+1B3C 1B35 ; [.3919.0020.0002] # BALINESE VOWEL SIGN LA LENGA TEDUNG
+1B3E ; [.391A.0020.0002] # BALINESE VOWEL SIGN TALING
+1B3F ; [.391B.0020.0002] # BALINESE VOWEL SIGN TALING REPA
+1B40 ; [.391C.0020.0002] # BALINESE VOWEL SIGN TALING TEDUNG
+1B3E 1B35 ; [.391C.0020.0002] # BALINESE VOWEL SIGN TALING TEDUNG
+1B41 ; [.391D.0020.0002] # BALINESE VOWEL SIGN TALING REPA TEDUNG
+1B3F 1B35 ; [.391D.0020.0002] # BALINESE VOWEL SIGN TALING REPA TEDUNG
+1B42 ; [.391E.0020.0002] # BALINESE VOWEL SIGN PEPET
+1B43 ; [.391F.0020.0002] # BALINESE VOWEL SIGN PEPET TEDUNG
+1B42 1B35 ; [.391F.0020.0002] # BALINESE VOWEL SIGN PEPET TEDUNG
+1B44 ; [.3920.0020.0002] # BALINESE ADEG ADEG
+A984 ; [.3921.0020.0002] # JAVANESE LETTER A
+A985 ; [.3922.0020.0002] # JAVANESE LETTER I KAWI
+A986 ; [.3923.0020.0002] # JAVANESE LETTER I
+A987 ; [.3924.0020.0002] # JAVANESE LETTER II
+A988 ; [.3925.0020.0002] # JAVANESE LETTER U
+A989 ; [.3926.0020.0002] # JAVANESE LETTER PA CEREK
+A98A ; [.3927.0020.0002] # JAVANESE LETTER NGA LELET
+A98B ; [.3928.0020.0002] # JAVANESE LETTER NGA LELET RASWADI
+A98C ; [.3929.0020.0002] # JAVANESE LETTER E
+A98D ; [.392A.0020.0002] # JAVANESE LETTER AI
+A98E ; [.392B.0020.0002] # JAVANESE LETTER O
+A98F ; [.392C.0020.0002] # JAVANESE LETTER KA
+A990 ; [.392D.0020.0002] # JAVANESE LETTER KA SASAK
+A991 ; [.392E.0020.0002] # JAVANESE LETTER KA MURDA
+A992 ; [.392F.0020.0002] # JAVANESE LETTER GA
+A993 ; [.3930.0020.0002] # JAVANESE LETTER GA MURDA
+A994 ; [.3931.0020.0002] # JAVANESE LETTER NGA
+A995 ; [.3932.0020.0002] # JAVANESE LETTER CA
+A996 ; [.3933.0020.0002] # JAVANESE LETTER CA MURDA
+A997 ; [.3934.0020.0002] # JAVANESE LETTER JA
+A998 ; [.3935.0020.0002] # JAVANESE LETTER NYA MURDA
+A999 ; [.3936.0020.0002] # JAVANESE LETTER JA MAHAPRANA
+A99A ; [.3937.0020.0002] # JAVANESE LETTER NYA
+A99B ; [.3938.0020.0002] # JAVANESE LETTER TTA
+A99C ; [.3939.0020.0002] # JAVANESE LETTER TTA MAHAPRANA
+A99D ; [.393A.0020.0002] # JAVANESE LETTER DDA
+A99E ; [.393B.0020.0002] # JAVANESE LETTER DDA MAHAPRANA
+A99F ; [.393C.0020.0002] # JAVANESE LETTER NA MURDA
+A9A0 ; [.393D.0020.0002] # JAVANESE LETTER TA
+A9A1 ; [.393E.0020.0002] # JAVANESE LETTER TA MURDA
+A9A2 ; [.393F.0020.0002] # JAVANESE LETTER DA
+A9A3 ; [.3940.0020.0002] # JAVANESE LETTER DA MAHAPRANA
+A9A4 ; [.3941.0020.0002] # JAVANESE LETTER NA
+A9A5 ; [.3942.0020.0002] # JAVANESE LETTER PA
+A9A6 ; [.3943.0020.0002] # JAVANESE LETTER PA MURDA
+A9A7 ; [.3944.0020.0002] # JAVANESE LETTER BA
+A9A8 ; [.3945.0020.0002] # JAVANESE LETTER BA MURDA
+A9A9 ; [.3946.0020.0002] # JAVANESE LETTER MA
+A9AA ; [.3947.0020.0002] # JAVANESE LETTER YA
+A9BE ; [.3948.0020.0002] # JAVANESE CONSONANT SIGN PENGKAL
+A9AB ; [.3949.0020.0002] # JAVANESE LETTER RA
+A9AC ; [.3949.0020.0004] # JAVANESE LETTER RA AGUNG
+A9BF ; [.394A.0020.0002] # JAVANESE CONSONANT SIGN CAKRA
+A9AD ; [.394B.0020.0002] # JAVANESE LETTER LA
+A9AE ; [.394C.0020.0002] # JAVANESE LETTER WA
+A9AF ; [.394D.0020.0002] # JAVANESE LETTER SA MURDA
+A9B0 ; [.394E.0020.0002] # JAVANESE LETTER SA MAHAPRANA
+A9B1 ; [.394F.0020.0002] # JAVANESE LETTER SA
+A9B2 ; [.3950.0020.0002] # JAVANESE LETTER HA
+A9B4 ; [.3951.0020.0002] # JAVANESE VOWEL SIGN TARUNG
+A9B5 ; [.3951.0020.0004] # JAVANESE VOWEL SIGN TOLONG
+A9BC ; [.3952.0020.0002] # JAVANESE VOWEL SIGN PEPET
+A9B6 ; [.3953.0020.0002] # JAVANESE VOWEL SIGN WULU
+A9B7 ; [.3954.0020.0002] # JAVANESE VOWEL SIGN WULU MELIK
+A9B8 ; [.3955.0020.0002] # JAVANESE VOWEL SIGN SUKU
+A9B9 ; [.3956.0020.0002] # JAVANESE VOWEL SIGN SUKU MENDUT
+A9BD ; [.3957.0020.0002] # JAVANESE CONSONANT SIGN KERET
+A9BA ; [.3958.0020.0002] # JAVANESE VOWEL SIGN TALING
+A9BB ; [.3959.0020.0002] # JAVANESE VOWEL SIGN DIRGA MURE
+A9C0 ; [.395A.0020.0002] # JAVANESE PANGKON
+1880 ; [.395B.0020.0002] # MONGOLIAN LETTER ALI GALI ANUSVARA ONE
+1881 ; [.395C.0020.0002] # MONGOLIAN LETTER ALI GALI VISARGA ONE
+1882 ; [.395D.0020.0002] # MONGOLIAN LETTER ALI GALI DAMARU
+1883 ; [.395E.0020.0002] # MONGOLIAN LETTER ALI GALI UBADAMA
+1884 ; [.395F.0020.0002] # MONGOLIAN LETTER ALI GALI INVERTED UBADAMA
+1885 ; [.3960.0020.0002] # MONGOLIAN LETTER ALI GALI BALUDA
+1886 ; [.3961.0020.0002] # MONGOLIAN LETTER ALI GALI THREE BALUDA
+1843 ; [.3962.0020.0002] # MONGOLIAN LETTER TODO LONG VOWEL SIGN
+1820 ; [.3963.0020.0002] # MONGOLIAN LETTER A
+1887 ; [.3964.0020.0002] # MONGOLIAN LETTER ALI GALI A
+1821 ; [.3965.0020.0002] # MONGOLIAN LETTER E
+1844 ; [.3966.0020.0002] # MONGOLIAN LETTER TODO E
+185D ; [.3967.0020.0002] # MONGOLIAN LETTER SIBE E
+1822 ; [.3968.0020.0002] # MONGOLIAN LETTER I
+1845 ; [.3969.0020.0002] # MONGOLIAN LETTER TODO I
+185E ; [.396A.0020.0002] # MONGOLIAN LETTER SIBE I
+1873 ; [.396B.0020.0002] # MONGOLIAN LETTER MANCHU I
+1888 ; [.396C.0020.0002] # MONGOLIAN LETTER ALI GALI I
+185F ; [.396D.0020.0002] # MONGOLIAN LETTER SIBE IY
+1823 ; [.396E.0020.0002] # MONGOLIAN LETTER O
+1846 ; [.396F.0020.0002] # MONGOLIAN LETTER TODO O
+1824 ; [.3970.0020.0002] # MONGOLIAN LETTER U
+1847 ; [.3971.0020.0002] # MONGOLIAN LETTER TODO U
+1861 ; [.3972.0020.0002] # MONGOLIAN LETTER SIBE U
+1825 ; [.3973.0020.0002] # MONGOLIAN LETTER OE
+1848 ; [.3974.0020.0002] # MONGOLIAN LETTER TODO OE
+1826 ; [.3975.0020.0002] # MONGOLIAN LETTER UE
+1849 ; [.3976.0020.0002] # MONGOLIAN LETTER TODO UE
+1860 ; [.3977.0020.0002] # MONGOLIAN LETTER SIBE UE
+1827 ; [.3978.0020.0002] # MONGOLIAN LETTER EE
+1828 ; [.3979.0020.0002] # MONGOLIAN LETTER NA
+1829 ; [.397A.0020.0002] # MONGOLIAN LETTER ANG
+184A ; [.397B.0020.0002] # MONGOLIAN LETTER TODO ANG
+1862 ; [.397C.0020.0002] # MONGOLIAN LETTER SIBE ANG
+188A ; [.397D.0020.0002] # MONGOLIAN LETTER ALI GALI NGA
+189B ; [.397E.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI NGA
+182A ; [.397F.0020.0002] # MONGOLIAN LETTER BA
+184B ; [.3980.0020.0002] # MONGOLIAN LETTER TODO BA
+182B ; [.3981.0020.0002] # MONGOLIAN LETTER PA
+184C ; [.3982.0020.0002] # MONGOLIAN LETTER TODO PA
+1866 ; [.3983.0020.0002] # MONGOLIAN LETTER SIBE PA
+182C ; [.3984.0020.0002] # MONGOLIAN LETTER QA
+184D ; [.3985.0020.0002] # MONGOLIAN LETTER TODO QA
+182D ; [.3986.0020.0002] # MONGOLIAN LETTER GA
+184E ; [.3987.0020.0002] # MONGOLIAN LETTER TODO GA
+1864 ; [.3988.0020.0002] # MONGOLIAN LETTER SIBE GA
+189A ; [.3989.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI GHA
+1865 ; [.398A.0020.0002] # MONGOLIAN LETTER SIBE HA
+182E ; [.398B.0020.0002] # MONGOLIAN LETTER MA
+184F ; [.398C.0020.0002] # MONGOLIAN LETTER TODO MA
+182F ; [.398D.0020.0002] # MONGOLIAN LETTER LA
+1830 ; [.398E.0020.0002] # MONGOLIAN LETTER SA
+1831 ; [.398F.0020.0002] # MONGOLIAN LETTER SHA
+1867 ; [.3990.0020.0002] # MONGOLIAN LETTER SIBE SHA
+189C ; [.3991.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI CA
+189D ; [.3992.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI JHA
+18A2 ; [.3993.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI SSA
+18A4 ; [.3994.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI ZHA
+18A5 ; [.3995.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI ZA
+1832 ; [.3996.0020.0002] # MONGOLIAN LETTER TA
+1850 ; [.3997.0020.0002] # MONGOLIAN LETTER TODO TA
+1868 ; [.3998.0020.0002] # MONGOLIAN LETTER SIBE TA
+1833 ; [.3999.0020.0002] # MONGOLIAN LETTER DA
+1851 ; [.399A.0020.0002] # MONGOLIAN LETTER TODO DA
+1869 ; [.399B.0020.0002] # MONGOLIAN LETTER SIBE DA
+1834 ; [.399C.0020.0002] # MONGOLIAN LETTER CHA
+1852 ; [.399D.0020.0002] # MONGOLIAN LETTER TODO CHA
+1871 ; [.399E.0020.0002] # MONGOLIAN LETTER SIBE CHA
+1878 ; [.399F.0020.0002] # MONGOLIAN LETTER CHA WITH TWO DOTS
+185C ; [.39A0.0020.0002] # MONGOLIAN LETTER TODO DZA
+188B ; [.39A1.0020.0002] # MONGOLIAN LETTER ALI GALI CA
+1835 ; [.39A2.0020.0002] # MONGOLIAN LETTER JA
+1853 ; [.39A3.0020.0002] # MONGOLIAN LETTER TODO JA
+186A ; [.39A4.0020.0002] # MONGOLIAN LETTER SIBE JA
+1877 ; [.39A5.0020.0002] # MONGOLIAN LETTER MANCHU ZHA
+1836 ; [.39A6.0020.0002] # MONGOLIAN LETTER YA
+1855 ; [.39A7.0020.0002] # MONGOLIAN LETTER TODO YA
+1872 ; [.39A8.0020.0002] # MONGOLIAN LETTER SIBE ZHA
+1837 ; [.39A9.0020.0002] # MONGOLIAN LETTER RA
+1875 ; [.39AA.0020.0002] # MONGOLIAN LETTER MANCHU RA
+1838 ; [.39AB.0020.0002] # MONGOLIAN LETTER WA
+1856 ; [.39AC.0020.0002] # MONGOLIAN LETTER TODO WA
+1839 ; [.39AD.0020.0002] # MONGOLIAN LETTER FA
+186B ; [.39AE.0020.0002] # MONGOLIAN LETTER SIBE FA
+1876 ; [.39AF.0020.0002] # MONGOLIAN LETTER MANCHU FA
+183A ; [.39B0.0020.0002] # MONGOLIAN LETTER KA
+1857 ; [.39B1.0020.0002] # MONGOLIAN LETTER TODO KA
+1863 ; [.39B2.0020.0002] # MONGOLIAN LETTER SIBE KA
+1874 ; [.39B3.0020.0002] # MONGOLIAN LETTER MANCHU KA
+1889 ; [.39B4.0020.0002] # MONGOLIAN LETTER ALI GALI KA
+183B ; [.39B5.0020.0002] # MONGOLIAN LETTER KHA
+183C ; [.39B6.0020.0002] # MONGOLIAN LETTER TSA
+1854 ; [.39B7.0020.0002] # MONGOLIAN LETTER TODO TSA
+186E ; [.39B8.0020.0002] # MONGOLIAN LETTER SIBE TSA
+183D ; [.39B9.0020.0002] # MONGOLIAN LETTER ZA
+186F ; [.39BA.0020.0002] # MONGOLIAN LETTER SIBE ZA
+1858 ; [.39BB.0020.0002] # MONGOLIAN LETTER TODO GAA
+186C ; [.39BC.0020.0002] # MONGOLIAN LETTER SIBE GAA
+183E ; [.39BD.0020.0002] # MONGOLIAN LETTER HAA
+1859 ; [.39BE.0020.0002] # MONGOLIAN LETTER TODO HAA
+186D ; [.39BF.0020.0002] # MONGOLIAN LETTER SIBE HAA
+183F ; [.39C0.0020.0002] # MONGOLIAN LETTER ZRA
+1840 ; [.39C1.0020.0002] # MONGOLIAN LETTER LHA
+1841 ; [.39C2.0020.0002] # MONGOLIAN LETTER ZHI
+1842 ; [.39C3.0020.0002] # MONGOLIAN LETTER CHI
+185A ; [.39C4.0020.0002] # MONGOLIAN LETTER TODO JIA
+185B ; [.39C5.0020.0002] # MONGOLIAN LETTER TODO NIA
+1870 ; [.39C6.0020.0002] # MONGOLIAN LETTER SIBE RAA
+188C ; [.39C7.0020.0002] # MONGOLIAN LETTER ALI GALI TTA
+189E ; [.39C8.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI TTA
+188D ; [.39C9.0020.0002] # MONGOLIAN LETTER ALI GALI TTHA
+188E ; [.39CA.0020.0002] # MONGOLIAN LETTER ALI GALI DDA
+189F ; [.39CB.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI DDHA
+188F ; [.39CC.0020.0002] # MONGOLIAN LETTER ALI GALI NNA
+1890 ; [.39CD.0020.0002] # MONGOLIAN LETTER ALI GALI TA
+1898 ; [.39CE.0020.0002] # MONGOLIAN LETTER TODO ALI GALI TA
+18A0 ; [.39CF.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI TA
+1891 ; [.39D0.0020.0002] # MONGOLIAN LETTER ALI GALI DA
+18A1 ; [.39D1.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI DHA
+1892 ; [.39D2.0020.0002] # MONGOLIAN LETTER ALI GALI PA
+1893 ; [.39D3.0020.0002] # MONGOLIAN LETTER ALI GALI PHA
+18A8 ; [.39D4.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI BHA
+1894 ; [.39D5.0020.0002] # MONGOLIAN LETTER ALI GALI SSA
+18A3 ; [.39D6.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI CYA
+1895 ; [.39D7.0020.0002] # MONGOLIAN LETTER ALI GALI ZHA
+1899 ; [.39D8.0020.0002] # MONGOLIAN LETTER TODO ALI GALI ZHA
+1896 ; [.39D9.0020.0002] # MONGOLIAN LETTER ALI GALI ZA
+1897 ; [.39DA.0020.0002] # MONGOLIAN LETTER ALI GALI AH
+18A6 ; [.39DB.0020.0002] # MONGOLIAN LETTER ALI GALI HALF U
+18A7 ; [.39DC.0020.0002] # MONGOLIAN LETTER ALI GALI HALF YA
+18AA ; [.39DD.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI LHA
+18A9 ; [.39DE.0020.0002] # MONGOLIAN LETTER ALI GALI DAGALGA
+1C5A ; [.39DF.0020.0002] # OL CHIKI LETTER LA
+1C5B ; [.39E0.0020.0002] # OL CHIKI LETTER AT
+1C5C ; [.39E1.0020.0002] # OL CHIKI LETTER AG
+1C5D ; [.39E2.0020.0002] # OL CHIKI LETTER ANG
+1C5E ; [.39E3.0020.0002] # OL CHIKI LETTER AL
+1C5F ; [.39E4.0020.0002] # OL CHIKI LETTER LAA
+1C60 ; [.39E5.0020.0002] # OL CHIKI LETTER AAK
+1C61 ; [.39E6.0020.0002] # OL CHIKI LETTER AAJ
+1C62 ; [.39E7.0020.0002] # OL CHIKI LETTER AAM
+1C63 ; [.39E8.0020.0002] # OL CHIKI LETTER AAW
+1C64 ; [.39E9.0020.0002] # OL CHIKI LETTER LI
+1C65 ; [.39EA.0020.0002] # OL CHIKI LETTER IS
+1C66 ; [.39EB.0020.0002] # OL CHIKI LETTER IH
+1C67 ; [.39EC.0020.0002] # OL CHIKI LETTER INY
+1C68 ; [.39ED.0020.0002] # OL CHIKI LETTER IR
+1C69 ; [.39EE.0020.0002] # OL CHIKI LETTER LU
+1C6A ; [.39EF.0020.0002] # OL CHIKI LETTER UC
+1C6B ; [.39F0.0020.0002] # OL CHIKI LETTER UD
+1C6C ; [.39F1.0020.0002] # OL CHIKI LETTER UNN
+1C6D ; [.39F2.0020.0002] # OL CHIKI LETTER UY
+1C6E ; [.39F3.0020.0002] # OL CHIKI LETTER LE
+1C6F ; [.39F4.0020.0002] # OL CHIKI LETTER EP
+1C70 ; [.39F5.0020.0002] # OL CHIKI LETTER EDD
+1C71 ; [.39F6.0020.0002] # OL CHIKI LETTER EN
+1C72 ; [.39F7.0020.0002] # OL CHIKI LETTER ERR
+1C73 ; [.39F8.0020.0002] # OL CHIKI LETTER LO
+1C74 ; [.39F9.0020.0002] # OL CHIKI LETTER OTT
+1C75 ; [.39FA.0020.0002] # OL CHIKI LETTER OB
+1C76 ; [.39FB.0020.0002] # OL CHIKI LETTER OV
+1C77 ; [.39FC.0020.0002] # OL CHIKI LETTER OH
+1C78 ; [.39FD.0020.0002] # OL CHIKI MU TTUDDAG
+1C79 ; [.39FE.0020.0002] # OL CHIKI GAAHLAA TTUDDAAG
+1C7A ; [.39FF.0020.0002] # OL CHIKI MU-GAAHLAA TTUDDAAG
+1C7B ; [.3A00.0020.0002] # OL CHIKI RELAA
+1C7C ; [.3A01.0020.0002] # OL CHIKI PHAARKAA
+1C7D ; [.3A02.0020.0002] # OL CHIKI AHAD
+AB70 ; [.3A03.0020.0002] # CHEROKEE SMALL LETTER A
+13A0 ; [.3A03.0020.0008] # CHEROKEE LETTER A
+AB71 ; [.3A04.0020.0002] # CHEROKEE SMALL LETTER E
+13A1 ; [.3A04.0020.0008] # CHEROKEE LETTER E
+AB72 ; [.3A05.0020.0002] # CHEROKEE SMALL LETTER I
+13A2 ; [.3A05.0020.0008] # CHEROKEE LETTER I
+AB73 ; [.3A06.0020.0002] # CHEROKEE SMALL LETTER O
+13A3 ; [.3A06.0020.0008] # CHEROKEE LETTER O
+AB74 ; [.3A07.0020.0002] # CHEROKEE SMALL LETTER U
+13A4 ; [.3A07.0020.0008] # CHEROKEE LETTER U
+AB75 ; [.3A08.0020.0002] # CHEROKEE SMALL LETTER V
+13A5 ; [.3A08.0020.0008] # CHEROKEE LETTER V
+AB76 ; [.3A09.0020.0002] # CHEROKEE SMALL LETTER GA
+13A6 ; [.3A09.0020.0008] # CHEROKEE LETTER GA
+AB77 ; [.3A0A.0020.0002] # CHEROKEE SMALL LETTER KA
+13A7 ; [.3A0A.0020.0008] # CHEROKEE LETTER KA
+AB78 ; [.3A0B.0020.0002] # CHEROKEE SMALL LETTER GE
+13A8 ; [.3A0B.0020.0008] # CHEROKEE LETTER GE
+AB79 ; [.3A0C.0020.0002] # CHEROKEE SMALL LETTER GI
+13A9 ; [.3A0C.0020.0008] # CHEROKEE LETTER GI
+AB7A ; [.3A0D.0020.0002] # CHEROKEE SMALL LETTER GO
+13AA ; [.3A0D.0020.0008] # CHEROKEE LETTER GO
+AB7B ; [.3A0E.0020.0002] # CHEROKEE SMALL LETTER GU
+13AB ; [.3A0E.0020.0008] # CHEROKEE LETTER GU
+AB7C ; [.3A0F.0020.0002] # CHEROKEE SMALL LETTER GV
+13AC ; [.3A0F.0020.0008] # CHEROKEE LETTER GV
+AB7D ; [.3A10.0020.0002] # CHEROKEE SMALL LETTER HA
+13AD ; [.3A10.0020.0008] # CHEROKEE LETTER HA
+AB7E ; [.3A11.0020.0002] # CHEROKEE SMALL LETTER HE
+13AE ; [.3A11.0020.0008] # CHEROKEE LETTER HE
+AB7F ; [.3A12.0020.0002] # CHEROKEE SMALL LETTER HI
+13AF ; [.3A12.0020.0008] # CHEROKEE LETTER HI
+AB80 ; [.3A13.0020.0002] # CHEROKEE SMALL LETTER HO
+13B0 ; [.3A13.0020.0008] # CHEROKEE LETTER HO
+AB81 ; [.3A14.0020.0002] # CHEROKEE SMALL LETTER HU
+13B1 ; [.3A14.0020.0008] # CHEROKEE LETTER HU
+AB82 ; [.3A15.0020.0002] # CHEROKEE SMALL LETTER HV
+13B2 ; [.3A15.0020.0008] # CHEROKEE LETTER HV
+AB83 ; [.3A16.0020.0002] # CHEROKEE SMALL LETTER LA
+13B3 ; [.3A16.0020.0008] # CHEROKEE LETTER LA
+AB84 ; [.3A17.0020.0002] # CHEROKEE SMALL LETTER LE
+13B4 ; [.3A17.0020.0008] # CHEROKEE LETTER LE
+AB85 ; [.3A18.0020.0002] # CHEROKEE SMALL LETTER LI
+13B5 ; [.3A18.0020.0008] # CHEROKEE LETTER LI
+AB86 ; [.3A19.0020.0002] # CHEROKEE SMALL LETTER LO
+13B6 ; [.3A19.0020.0008] # CHEROKEE LETTER LO
+AB87 ; [.3A1A.0020.0002] # CHEROKEE SMALL LETTER LU
+13B7 ; [.3A1A.0020.0008] # CHEROKEE LETTER LU
+AB88 ; [.3A1B.0020.0002] # CHEROKEE SMALL LETTER LV
+13B8 ; [.3A1B.0020.0008] # CHEROKEE LETTER LV
+AB89 ; [.3A1C.0020.0002] # CHEROKEE SMALL LETTER MA
+13B9 ; [.3A1C.0020.0008] # CHEROKEE LETTER MA
+AB8A ; [.3A1D.0020.0002] # CHEROKEE SMALL LETTER ME
+13BA ; [.3A1D.0020.0008] # CHEROKEE LETTER ME
+AB8B ; [.3A1E.0020.0002] # CHEROKEE SMALL LETTER MI
+13BB ; [.3A1E.0020.0008] # CHEROKEE LETTER MI
+AB8C ; [.3A1F.0020.0002] # CHEROKEE SMALL LETTER MO
+13BC ; [.3A1F.0020.0008] # CHEROKEE LETTER MO
+AB8D ; [.3A20.0020.0002] # CHEROKEE SMALL LETTER MU
+13BD ; [.3A20.0020.0008] # CHEROKEE LETTER MU
+AB8E ; [.3A21.0020.0002] # CHEROKEE SMALL LETTER NA
+13BE ; [.3A21.0020.0008] # CHEROKEE LETTER NA
+AB8F ; [.3A22.0020.0002] # CHEROKEE SMALL LETTER HNA
+13BF ; [.3A22.0020.0008] # CHEROKEE LETTER HNA
+AB90 ; [.3A23.0020.0002] # CHEROKEE SMALL LETTER NAH
+13C0 ; [.3A23.0020.0008] # CHEROKEE LETTER NAH
+AB91 ; [.3A24.0020.0002] # CHEROKEE SMALL LETTER NE
+13C1 ; [.3A24.0020.0008] # CHEROKEE LETTER NE
+AB92 ; [.3A25.0020.0002] # CHEROKEE SMALL LETTER NI
+13C2 ; [.3A25.0020.0008] # CHEROKEE LETTER NI
+AB93 ; [.3A26.0020.0002] # CHEROKEE SMALL LETTER NO
+13C3 ; [.3A26.0020.0008] # CHEROKEE LETTER NO
+AB94 ; [.3A27.0020.0002] # CHEROKEE SMALL LETTER NU
+13C4 ; [.3A27.0020.0008] # CHEROKEE LETTER NU
+AB95 ; [.3A28.0020.0002] # CHEROKEE SMALL LETTER NV
+13C5 ; [.3A28.0020.0008] # CHEROKEE LETTER NV
+AB96 ; [.3A29.0020.0002] # CHEROKEE SMALL LETTER QUA
+13C6 ; [.3A29.0020.0008] # CHEROKEE LETTER QUA
+AB97 ; [.3A2A.0020.0002] # CHEROKEE SMALL LETTER QUE
+13C7 ; [.3A2A.0020.0008] # CHEROKEE LETTER QUE
+AB98 ; [.3A2B.0020.0002] # CHEROKEE SMALL LETTER QUI
+13C8 ; [.3A2B.0020.0008] # CHEROKEE LETTER QUI
+AB99 ; [.3A2C.0020.0002] # CHEROKEE SMALL LETTER QUO
+13C9 ; [.3A2C.0020.0008] # CHEROKEE LETTER QUO
+AB9A ; [.3A2D.0020.0002] # CHEROKEE SMALL LETTER QUU
+13CA ; [.3A2D.0020.0008] # CHEROKEE LETTER QUU
+AB9B ; [.3A2E.0020.0002] # CHEROKEE SMALL LETTER QUV
+13CB ; [.3A2E.0020.0008] # CHEROKEE LETTER QUV
+AB9C ; [.3A2F.0020.0002] # CHEROKEE SMALL LETTER SA
+13CC ; [.3A2F.0020.0008] # CHEROKEE LETTER SA
+AB9D ; [.3A30.0020.0002] # CHEROKEE SMALL LETTER S
+13CD ; [.3A30.0020.0008] # CHEROKEE LETTER S
+AB9E ; [.3A31.0020.0002] # CHEROKEE SMALL LETTER SE
+13CE ; [.3A31.0020.0008] # CHEROKEE LETTER SE
+AB9F ; [.3A32.0020.0002] # CHEROKEE SMALL LETTER SI
+13CF ; [.3A32.0020.0008] # CHEROKEE LETTER SI
+ABA0 ; [.3A33.0020.0002] # CHEROKEE SMALL LETTER SO
+13D0 ; [.3A33.0020.0008] # CHEROKEE LETTER SO
+ABA1 ; [.3A34.0020.0002] # CHEROKEE SMALL LETTER SU
+13D1 ; [.3A34.0020.0008] # CHEROKEE LETTER SU
+ABA2 ; [.3A35.0020.0002] # CHEROKEE SMALL LETTER SV
+13D2 ; [.3A35.0020.0008] # CHEROKEE LETTER SV
+ABA3 ; [.3A36.0020.0002] # CHEROKEE SMALL LETTER DA
+13D3 ; [.3A36.0020.0008] # CHEROKEE LETTER DA
+ABA4 ; [.3A37.0020.0002] # CHEROKEE SMALL LETTER TA
+13D4 ; [.3A37.0020.0008] # CHEROKEE LETTER TA
+ABA5 ; [.3A38.0020.0002] # CHEROKEE SMALL LETTER DE
+13D5 ; [.3A38.0020.0008] # CHEROKEE LETTER DE
+ABA6 ; [.3A39.0020.0002] # CHEROKEE SMALL LETTER TE
+13D6 ; [.3A39.0020.0008] # CHEROKEE LETTER TE
+ABA7 ; [.3A3A.0020.0002] # CHEROKEE SMALL LETTER DI
+13D7 ; [.3A3A.0020.0008] # CHEROKEE LETTER DI
+ABA8 ; [.3A3B.0020.0002] # CHEROKEE SMALL LETTER TI
+13D8 ; [.3A3B.0020.0008] # CHEROKEE LETTER TI
+ABA9 ; [.3A3C.0020.0002] # CHEROKEE SMALL LETTER DO
+13D9 ; [.3A3C.0020.0008] # CHEROKEE LETTER DO
+ABAA ; [.3A3D.0020.0002] # CHEROKEE SMALL LETTER DU
+13DA ; [.3A3D.0020.0008] # CHEROKEE LETTER DU
+ABAB ; [.3A3E.0020.0002] # CHEROKEE SMALL LETTER DV
+13DB ; [.3A3E.0020.0008] # CHEROKEE LETTER DV
+ABAC ; [.3A3F.0020.0002] # CHEROKEE SMALL LETTER DLA
+13DC ; [.3A3F.0020.0008] # CHEROKEE LETTER DLA
+ABAD ; [.3A40.0020.0002] # CHEROKEE SMALL LETTER TLA
+13DD ; [.3A40.0020.0008] # CHEROKEE LETTER TLA
+ABAE ; [.3A41.0020.0002] # CHEROKEE SMALL LETTER TLE
+13DE ; [.3A41.0020.0008] # CHEROKEE LETTER TLE
+ABAF ; [.3A42.0020.0002] # CHEROKEE SMALL LETTER TLI
+13DF ; [.3A42.0020.0008] # CHEROKEE LETTER TLI
+ABB0 ; [.3A43.0020.0002] # CHEROKEE SMALL LETTER TLO
+13E0 ; [.3A43.0020.0008] # CHEROKEE LETTER TLO
+ABB1 ; [.3A44.0020.0002] # CHEROKEE SMALL LETTER TLU
+13E1 ; [.3A44.0020.0008] # CHEROKEE LETTER TLU
+ABB2 ; [.3A45.0020.0002] # CHEROKEE SMALL LETTER TLV
+13E2 ; [.3A45.0020.0008] # CHEROKEE LETTER TLV
+ABB3 ; [.3A46.0020.0002] # CHEROKEE SMALL LETTER TSA
+13E3 ; [.3A46.0020.0008] # CHEROKEE LETTER TSA
+ABB4 ; [.3A47.0020.0002] # CHEROKEE SMALL LETTER TSE
+13E4 ; [.3A47.0020.0008] # CHEROKEE LETTER TSE
+ABB5 ; [.3A48.0020.0002] # CHEROKEE SMALL LETTER TSI
+13E5 ; [.3A48.0020.0008] # CHEROKEE LETTER TSI
+ABB6 ; [.3A49.0020.0002] # CHEROKEE SMALL LETTER TSO
+13E6 ; [.3A49.0020.0008] # CHEROKEE LETTER TSO
+ABB7 ; [.3A4A.0020.0002] # CHEROKEE SMALL LETTER TSU
+13E7 ; [.3A4A.0020.0008] # CHEROKEE LETTER TSU
+ABB8 ; [.3A4B.0020.0002] # CHEROKEE SMALL LETTER TSV
+13E8 ; [.3A4B.0020.0008] # CHEROKEE LETTER TSV
+ABB9 ; [.3A4C.0020.0002] # CHEROKEE SMALL LETTER WA
+13E9 ; [.3A4C.0020.0008] # CHEROKEE LETTER WA
+ABBA ; [.3A4D.0020.0002] # CHEROKEE SMALL LETTER WE
+13EA ; [.3A4D.0020.0008] # CHEROKEE LETTER WE
+ABBB ; [.3A4E.0020.0002] # CHEROKEE SMALL LETTER WI
+13EB ; [.3A4E.0020.0008] # CHEROKEE LETTER WI
+ABBC ; [.3A4F.0020.0002] # CHEROKEE SMALL LETTER WO
+13EC ; [.3A4F.0020.0008] # CHEROKEE LETTER WO
+ABBD ; [.3A50.0020.0002] # CHEROKEE SMALL LETTER WU
+13ED ; [.3A50.0020.0008] # CHEROKEE LETTER WU
+ABBE ; [.3A51.0020.0002] # CHEROKEE SMALL LETTER WV
+13EE ; [.3A51.0020.0008] # CHEROKEE LETTER WV
+ABBF ; [.3A52.0020.0002] # CHEROKEE SMALL LETTER YA
+13EF ; [.3A52.0020.0008] # CHEROKEE LETTER YA
+13F8 ; [.3A53.0020.0002] # CHEROKEE SMALL LETTER YE
+13F0 ; [.3A53.0020.0008] # CHEROKEE LETTER YE
+13F9 ; [.3A54.0020.0002] # CHEROKEE SMALL LETTER YI
+13F1 ; [.3A54.0020.0008] # CHEROKEE LETTER YI
+13FA ; [.3A55.0020.0002] # CHEROKEE SMALL LETTER YO
+13F2 ; [.3A55.0020.0008] # CHEROKEE LETTER YO
+13FB ; [.3A56.0020.0002] # CHEROKEE SMALL LETTER YU
+13F3 ; [.3A56.0020.0008] # CHEROKEE LETTER YU
+13FC ; [.3A57.0020.0002] # CHEROKEE SMALL LETTER YV
+13F4 ; [.3A57.0020.0008] # CHEROKEE LETTER YV
+13FD ; [.3A58.0020.0002] # CHEROKEE SMALL LETTER MV
+13F5 ; [.3A58.0020.0008] # CHEROKEE LETTER MV
+104D8 ; [.3A59.0020.0002] # OSAGE SMALL LETTER A
+104B0 ; [.3A59.0020.0008] # OSAGE CAPITAL LETTER A
+104D9 ; [.3A5A.0020.0002] # OSAGE SMALL LETTER AI
+104B1 ; [.3A5A.0020.0008] # OSAGE CAPITAL LETTER AI
+104DA ; [.3A5B.0020.0002] # OSAGE SMALL LETTER AIN
+104B2 ; [.3A5B.0020.0008] # OSAGE CAPITAL LETTER AIN
+104DB ; [.3A5C.0020.0002] # OSAGE SMALL LETTER AH
+104B3 ; [.3A5C.0020.0008] # OSAGE CAPITAL LETTER AH
+104DC ; [.3A5D.0020.0002] # OSAGE SMALL LETTER BRA
+104B4 ; [.3A5D.0020.0008] # OSAGE CAPITAL LETTER BRA
+104DD ; [.3A5E.0020.0002] # OSAGE SMALL LETTER CHA
+104B5 ; [.3A5E.0020.0008] # OSAGE CAPITAL LETTER CHA
+104DE ; [.3A5F.0020.0002] # OSAGE SMALL LETTER EHCHA
+104B6 ; [.3A5F.0020.0008] # OSAGE CAPITAL LETTER EHCHA
+104DF ; [.3A60.0020.0002] # OSAGE SMALL LETTER E
+104B7 ; [.3A60.0020.0008] # OSAGE CAPITAL LETTER E
+104E0 ; [.3A61.0020.0002] # OSAGE SMALL LETTER EIN
+104B8 ; [.3A61.0020.0008] # OSAGE CAPITAL LETTER EIN
+104E1 ; [.3A62.0020.0002] # OSAGE SMALL LETTER HA
+104B9 ; [.3A62.0020.0008] # OSAGE CAPITAL LETTER HA
+104E2 ; [.3A63.0020.0002] # OSAGE SMALL LETTER HYA
+104BA ; [.3A63.0020.0008] # OSAGE CAPITAL LETTER HYA
+104E3 ; [.3A64.0020.0002] # OSAGE SMALL LETTER I
+104BB ; [.3A64.0020.0008] # OSAGE CAPITAL LETTER I
+104E4 ; [.3A65.0020.0002] # OSAGE SMALL LETTER KA
+104BC ; [.3A65.0020.0008] # OSAGE CAPITAL LETTER KA
+104E5 ; [.3A66.0020.0002] # OSAGE SMALL LETTER EHKA
+104BD ; [.3A66.0020.0008] # OSAGE CAPITAL LETTER EHKA
+104E6 ; [.3A67.0020.0002] # OSAGE SMALL LETTER KYA
+104BE ; [.3A67.0020.0008] # OSAGE CAPITAL LETTER KYA
+104E7 ; [.3A68.0020.0002] # OSAGE SMALL LETTER LA
+104BF ; [.3A68.0020.0008] # OSAGE CAPITAL LETTER LA
+104E8 ; [.3A69.0020.0002] # OSAGE SMALL LETTER MA
+104C0 ; [.3A69.0020.0008] # OSAGE CAPITAL LETTER MA
+104E9 ; [.3A6A.0020.0002] # OSAGE SMALL LETTER NA
+104C1 ; [.3A6A.0020.0008] # OSAGE CAPITAL LETTER NA
+104EA ; [.3A6B.0020.0002] # OSAGE SMALL LETTER O
+104C2 ; [.3A6B.0020.0008] # OSAGE CAPITAL LETTER O
+104EB ; [.3A6C.0020.0002] # OSAGE SMALL LETTER OIN
+104C3 ; [.3A6C.0020.0008] # OSAGE CAPITAL LETTER OIN
+104EC ; [.3A6D.0020.0002] # OSAGE SMALL LETTER PA
+104C4 ; [.3A6D.0020.0008] # OSAGE CAPITAL LETTER PA
+104ED ; [.3A6E.0020.0002] # OSAGE SMALL LETTER EHPA
+104C5 ; [.3A6E.0020.0008] # OSAGE CAPITAL LETTER EHPA
+104EE ; [.3A6F.0020.0002] # OSAGE SMALL LETTER SA
+104C6 ; [.3A6F.0020.0008] # OSAGE CAPITAL LETTER SA
+104EF ; [.3A70.0020.0002] # OSAGE SMALL LETTER SHA
+104C7 ; [.3A70.0020.0008] # OSAGE CAPITAL LETTER SHA
+104F0 ; [.3A71.0020.0002] # OSAGE SMALL LETTER TA
+104C8 ; [.3A71.0020.0008] # OSAGE CAPITAL LETTER TA
+104F1 ; [.3A72.0020.0002] # OSAGE SMALL LETTER EHTA
+104C9 ; [.3A72.0020.0008] # OSAGE CAPITAL LETTER EHTA
+104F2 ; [.3A73.0020.0002] # OSAGE SMALL LETTER TSA
+104CA ; [.3A73.0020.0008] # OSAGE CAPITAL LETTER TSA
+104F3 ; [.3A74.0020.0002] # OSAGE SMALL LETTER EHTSA
+104CB ; [.3A74.0020.0008] # OSAGE CAPITAL LETTER EHTSA
+104F4 ; [.3A75.0020.0002] # OSAGE SMALL LETTER TSHA
+104CC ; [.3A75.0020.0008] # OSAGE CAPITAL LETTER TSHA
+104F5 ; [.3A76.0020.0002] # OSAGE SMALL LETTER DHA
+104CD ; [.3A76.0020.0008] # OSAGE CAPITAL LETTER DHA
+104F6 ; [.3A77.0020.0002] # OSAGE SMALL LETTER U
+104CE ; [.3A77.0020.0008] # OSAGE CAPITAL LETTER U
+104F7 ; [.3A78.0020.0002] # OSAGE SMALL LETTER WA
+104CF ; [.3A78.0020.0008] # OSAGE CAPITAL LETTER WA
+104F8 ; [.3A79.0020.0002] # OSAGE SMALL LETTER KHA
+104D0 ; [.3A79.0020.0008] # OSAGE CAPITAL LETTER KHA
+104F9 ; [.3A7A.0020.0002] # OSAGE SMALL LETTER GHA
+104D1 ; [.3A7A.0020.0008] # OSAGE CAPITAL LETTER GHA
+104FA ; [.3A7B.0020.0002] # OSAGE SMALL LETTER ZA
+104D2 ; [.3A7B.0020.0008] # OSAGE CAPITAL LETTER ZA
+104FB ; [.3A7C.0020.0002] # OSAGE SMALL LETTER ZHA
+104D3 ; [.3A7C.0020.0008] # OSAGE CAPITAL LETTER ZHA
+1401 ; [.3A7D.0020.0002] # CANADIAN SYLLABICS E
+1402 ; [.3A7E.0020.0002] # CANADIAN SYLLABICS AAI
+1403 ; [.3A7F.0020.0002] # CANADIAN SYLLABICS I
+1404 ; [.3A80.0020.0002] # CANADIAN SYLLABICS II
+1405 ; [.3A81.0020.0002] # CANADIAN SYLLABICS O
+1406 ; [.3A82.0020.0002] # CANADIAN SYLLABICS OO
+1407 ; [.3A83.0020.0002] # CANADIAN SYLLABICS Y-CREE OO
+1408 ; [.3A84.0020.0002] # CANADIAN SYLLABICS CARRIER EE
+1409 ; [.3A85.0020.0002] # CANADIAN SYLLABICS CARRIER I
+140A ; [.3A86.0020.0002] # CANADIAN SYLLABICS A
+140B ; [.3A87.0020.0002] # CANADIAN SYLLABICS AA
+140C ; [.3A88.0020.0002] # CANADIAN SYLLABICS WE
+140D ; [.3A89.0020.0002] # CANADIAN SYLLABICS WEST-CREE WE
+140E ; [.3A8A.0020.0002] # CANADIAN SYLLABICS WI
+140F ; [.3A8B.0020.0002] # CANADIAN SYLLABICS WEST-CREE WI
+1410 ; [.3A8C.0020.0002] # CANADIAN SYLLABICS WII
+1411 ; [.3A8D.0020.0002] # CANADIAN SYLLABICS WEST-CREE WII
+1412 ; [.3A8E.0020.0002] # CANADIAN SYLLABICS WO
+1413 ; [.3A8F.0020.0002] # CANADIAN SYLLABICS WEST-CREE WO
+1414 ; [.3A90.0020.0002] # CANADIAN SYLLABICS WOO
+1415 ; [.3A91.0020.0002] # CANADIAN SYLLABICS WEST-CREE WOO
+1416 ; [.3A92.0020.0002] # CANADIAN SYLLABICS NASKAPI WOO
+1417 ; [.3A93.0020.0002] # CANADIAN SYLLABICS WA
+1418 ; [.3A94.0020.0002] # CANADIAN SYLLABICS WEST-CREE WA
+1419 ; [.3A95.0020.0002] # CANADIAN SYLLABICS WAA
+141A ; [.3A96.0020.0002] # CANADIAN SYLLABICS WEST-CREE WAA
+141B ; [.3A97.0020.0002] # CANADIAN SYLLABICS NASKAPI WAA
+141C ; [.3A98.0020.0002] # CANADIAN SYLLABICS AI
+141D ; [.3A99.0020.0002] # CANADIAN SYLLABICS Y-CREE W
+141E ; [.3A9A.0020.0002] # CANADIAN SYLLABICS GLOTTAL STOP
+141F ; [.3A9B.0020.0002] # CANADIAN SYLLABICS FINAL ACUTE
+1420 ; [.3A9C.0020.0002] # CANADIAN SYLLABICS FINAL GRAVE
+1421 ; [.3A9D.0020.0002] # CANADIAN SYLLABICS FINAL BOTTOM HALF RING
+1422 ; [.3A9E.0020.0002] # CANADIAN SYLLABICS FINAL TOP HALF RING
+1423 ; [.3A9F.0020.0002] # CANADIAN SYLLABICS FINAL RIGHT HALF RING
+1424 ; [.3AA0.0020.0002] # CANADIAN SYLLABICS FINAL RING
+1425 ; [.3AA1.0020.0002] # CANADIAN SYLLABICS FINAL DOUBLE ACUTE
+1426 ; [.3AA2.0020.0002] # CANADIAN SYLLABICS FINAL DOUBLE SHORT VERTICAL STROKES
+1427 ; [.3AA3.0020.0002] # CANADIAN SYLLABICS FINAL MIDDLE DOT
+1428 ; [.3AA4.0020.0002] # CANADIAN SYLLABICS FINAL SHORT HORIZONTAL STROKE
+1429 ; [.3AA5.0020.0002] # CANADIAN SYLLABICS FINAL PLUS
+142A ; [.3AA6.0020.0002] # CANADIAN SYLLABICS FINAL DOWN TACK
+142B ; [.3AA7.0020.0002] # CANADIAN SYLLABICS EN
+142C ; [.3AA8.0020.0002] # CANADIAN SYLLABICS IN
+142D ; [.3AA9.0020.0002] # CANADIAN SYLLABICS ON
+142E ; [.3AAA.0020.0002] # CANADIAN SYLLABICS AN
+142F ; [.3AAB.0020.0002] # CANADIAN SYLLABICS PE
+1430 ; [.3AAC.0020.0002] # CANADIAN SYLLABICS PAAI
+1431 ; [.3AAD.0020.0002] # CANADIAN SYLLABICS PI
+1432 ; [.3AAE.0020.0002] # CANADIAN SYLLABICS PII
+1433 ; [.3AAF.0020.0002] # CANADIAN SYLLABICS PO
+1434 ; [.3AB0.0020.0002] # CANADIAN SYLLABICS POO
+1435 ; [.3AB1.0020.0002] # CANADIAN SYLLABICS Y-CREE POO
+1436 ; [.3AB2.0020.0002] # CANADIAN SYLLABICS CARRIER HEE
+1437 ; [.3AB3.0020.0002] # CANADIAN SYLLABICS CARRIER HI
+1438 ; [.3AB4.0020.0002] # CANADIAN SYLLABICS PA
+1439 ; [.3AB5.0020.0002] # CANADIAN SYLLABICS PAA
+143A ; [.3AB6.0020.0002] # CANADIAN SYLLABICS PWE
+143B ; [.3AB7.0020.0002] # CANADIAN SYLLABICS WEST-CREE PWE
+143C ; [.3AB8.0020.0002] # CANADIAN SYLLABICS PWI
+143D ; [.3AB9.0020.0002] # CANADIAN SYLLABICS WEST-CREE PWI
+143E ; [.3ABA.0020.0002] # CANADIAN SYLLABICS PWII
+143F ; [.3ABB.0020.0002] # CANADIAN SYLLABICS WEST-CREE PWII
+1440 ; [.3ABC.0020.0002] # CANADIAN SYLLABICS PWO
+1441 ; [.3ABD.0020.0002] # CANADIAN SYLLABICS WEST-CREE PWO
+1442 ; [.3ABE.0020.0002] # CANADIAN SYLLABICS PWOO
+1443 ; [.3ABF.0020.0002] # CANADIAN SYLLABICS WEST-CREE PWOO
+1444 ; [.3AC0.0020.0002] # CANADIAN SYLLABICS PWA
+1445 ; [.3AC1.0020.0002] # CANADIAN SYLLABICS WEST-CREE PWA
+1446 ; [.3AC2.0020.0002] # CANADIAN SYLLABICS PWAA
+1447 ; [.3AC3.0020.0002] # CANADIAN SYLLABICS WEST-CREE PWAA
+1448 ; [.3AC4.0020.0002] # CANADIAN SYLLABICS Y-CREE PWAA
+1449 ; [.3AC5.0020.0002] # CANADIAN SYLLABICS P
+144A ; [.3AC6.0020.0002] # CANADIAN SYLLABICS WEST-CREE P
+144B ; [.3AC7.0020.0002] # CANADIAN SYLLABICS CARRIER H
+144C ; [.3AC8.0020.0002] # CANADIAN SYLLABICS TE
+144D ; [.3AC9.0020.0002] # CANADIAN SYLLABICS TAAI
+144E ; [.3ACA.0020.0002] # CANADIAN SYLLABICS TI
+144F ; [.3ACB.0020.0002] # CANADIAN SYLLABICS TII
+1450 ; [.3ACC.0020.0002] # CANADIAN SYLLABICS TO
+1451 ; [.3ACD.0020.0002] # CANADIAN SYLLABICS TOO
+1452 ; [.3ACE.0020.0002] # CANADIAN SYLLABICS Y-CREE TOO
+1453 ; [.3ACF.0020.0002] # CANADIAN SYLLABICS CARRIER DEE
+1454 ; [.3AD0.0020.0002] # CANADIAN SYLLABICS CARRIER DI
+1455 ; [.3AD1.0020.0002] # CANADIAN SYLLABICS TA
+1456 ; [.3AD2.0020.0002] # CANADIAN SYLLABICS TAA
+1457 ; [.3AD3.0020.0002] # CANADIAN SYLLABICS TWE
+1458 ; [.3AD4.0020.0002] # CANADIAN SYLLABICS WEST-CREE TWE
+1459 ; [.3AD5.0020.0002] # CANADIAN SYLLABICS TWI
+145A ; [.3AD6.0020.0002] # CANADIAN SYLLABICS WEST-CREE TWI
+145B ; [.3AD7.0020.0002] # CANADIAN SYLLABICS TWII
+145C ; [.3AD8.0020.0002] # CANADIAN SYLLABICS WEST-CREE TWII
+145D ; [.3AD9.0020.0002] # CANADIAN SYLLABICS TWO
+145E ; [.3ADA.0020.0002] # CANADIAN SYLLABICS WEST-CREE TWO
+145F ; [.3ADB.0020.0002] # CANADIAN SYLLABICS TWOO
+1460 ; [.3ADC.0020.0002] # CANADIAN SYLLABICS WEST-CREE TWOO
+1461 ; [.3ADD.0020.0002] # CANADIAN SYLLABICS TWA
+1462 ; [.3ADE.0020.0002] # CANADIAN SYLLABICS WEST-CREE TWA
+1463 ; [.3ADF.0020.0002] # CANADIAN SYLLABICS TWAA
+1464 ; [.3AE0.0020.0002] # CANADIAN SYLLABICS WEST-CREE TWAA
+1465 ; [.3AE1.0020.0002] # CANADIAN SYLLABICS NASKAPI TWAA
+1466 ; [.3AE2.0020.0002] # CANADIAN SYLLABICS T
+1467 ; [.3AE3.0020.0002] # CANADIAN SYLLABICS TTE
+1468 ; [.3AE4.0020.0002] # CANADIAN SYLLABICS TTI
+1469 ; [.3AE5.0020.0002] # CANADIAN SYLLABICS TTO
+146A ; [.3AE6.0020.0002] # CANADIAN SYLLABICS TTA
+146B ; [.3AE7.0020.0002] # CANADIAN SYLLABICS KE
+146C ; [.3AE8.0020.0002] # CANADIAN SYLLABICS KAAI
+146D ; [.3AE9.0020.0002] # CANADIAN SYLLABICS KI
+146E ; [.3AEA.0020.0002] # CANADIAN SYLLABICS KII
+146F ; [.3AEB.0020.0002] # CANADIAN SYLLABICS KO
+1470 ; [.3AEC.0020.0002] # CANADIAN SYLLABICS KOO
+1471 ; [.3AED.0020.0002] # CANADIAN SYLLABICS Y-CREE KOO
+1472 ; [.3AEE.0020.0002] # CANADIAN SYLLABICS KA
+1473 ; [.3AEF.0020.0002] # CANADIAN SYLLABICS KAA
+1474 ; [.3AF0.0020.0002] # CANADIAN SYLLABICS KWE
+1475 ; [.3AF1.0020.0002] # CANADIAN SYLLABICS WEST-CREE KWE
+1476 ; [.3AF2.0020.0002] # CANADIAN SYLLABICS KWI
+1477 ; [.3AF3.0020.0002] # CANADIAN SYLLABICS WEST-CREE KWI
+1478 ; [.3AF4.0020.0002] # CANADIAN SYLLABICS KWII
+1479 ; [.3AF5.0020.0002] # CANADIAN SYLLABICS WEST-CREE KWII
+147A ; [.3AF6.0020.0002] # CANADIAN SYLLABICS KWO
+147B ; [.3AF7.0020.0002] # CANADIAN SYLLABICS WEST-CREE KWO
+147C ; [.3AF8.0020.0002] # CANADIAN SYLLABICS KWOO
+147D ; [.3AF9.0020.0002] # CANADIAN SYLLABICS WEST-CREE KWOO
+147E ; [.3AFA.0020.0002] # CANADIAN SYLLABICS KWA
+147F ; [.3AFB.0020.0002] # CANADIAN SYLLABICS WEST-CREE KWA
+1480 ; [.3AFC.0020.0002] # CANADIAN SYLLABICS KWAA
+1481 ; [.3AFD.0020.0002] # CANADIAN SYLLABICS WEST-CREE KWAA
+1482 ; [.3AFE.0020.0002] # CANADIAN SYLLABICS NASKAPI KWAA
+1483 ; [.3AFF.0020.0002] # CANADIAN SYLLABICS K
+1484 ; [.3B00.0020.0002] # CANADIAN SYLLABICS KW
+1485 ; [.3B01.0020.0002] # CANADIAN SYLLABICS SOUTH-SLAVEY KEH
+1486 ; [.3B02.0020.0002] # CANADIAN SYLLABICS SOUTH-SLAVEY KIH
+1487 ; [.3B03.0020.0002] # CANADIAN SYLLABICS SOUTH-SLAVEY KOH
+1488 ; [.3B04.0020.0002] # CANADIAN SYLLABICS SOUTH-SLAVEY KAH
+1489 ; [.3B05.0020.0002] # CANADIAN SYLLABICS CE
+148A ; [.3B06.0020.0002] # CANADIAN SYLLABICS CAAI
+148B ; [.3B07.0020.0002] # CANADIAN SYLLABICS CI
+148C ; [.3B08.0020.0002] # CANADIAN SYLLABICS CII
+148D ; [.3B09.0020.0002] # CANADIAN SYLLABICS CO
+148E ; [.3B0A.0020.0002] # CANADIAN SYLLABICS COO
+148F ; [.3B0B.0020.0002] # CANADIAN SYLLABICS Y-CREE COO
+1490 ; [.3B0C.0020.0002] # CANADIAN SYLLABICS CA
+1491 ; [.3B0D.0020.0002] # CANADIAN SYLLABICS CAA
+1492 ; [.3B0E.0020.0002] # CANADIAN SYLLABICS CWE
+1493 ; [.3B0F.0020.0002] # CANADIAN SYLLABICS WEST-CREE CWE
+1494 ; [.3B10.0020.0002] # CANADIAN SYLLABICS CWI
+1495 ; [.3B11.0020.0002] # CANADIAN SYLLABICS WEST-CREE CWI
+1496 ; [.3B12.0020.0002] # CANADIAN SYLLABICS CWII
+1497 ; [.3B13.0020.0002] # CANADIAN SYLLABICS WEST-CREE CWII
+1498 ; [.3B14.0020.0002] # CANADIAN SYLLABICS CWO
+1499 ; [.3B15.0020.0002] # CANADIAN SYLLABICS WEST-CREE CWO
+149A ; [.3B16.0020.0002] # CANADIAN SYLLABICS CWOO
+149B ; [.3B17.0020.0002] # CANADIAN SYLLABICS WEST-CREE CWOO
+149C ; [.3B18.0020.0002] # CANADIAN SYLLABICS CWA
+149D ; [.3B19.0020.0002] # CANADIAN SYLLABICS WEST-CREE CWA
+149E ; [.3B1A.0020.0002] # CANADIAN SYLLABICS CWAA
+149F ; [.3B1B.0020.0002] # CANADIAN SYLLABICS WEST-CREE CWAA
+14A0 ; [.3B1C.0020.0002] # CANADIAN SYLLABICS NASKAPI CWAA
+14A1 ; [.3B1D.0020.0002] # CANADIAN SYLLABICS C
+14A2 ; [.3B1E.0020.0002] # CANADIAN SYLLABICS SAYISI TH
+14A3 ; [.3B1F.0020.0002] # CANADIAN SYLLABICS ME
+14A4 ; [.3B20.0020.0002] # CANADIAN SYLLABICS MAAI
+14A5 ; [.3B21.0020.0002] # CANADIAN SYLLABICS MI
+14A6 ; [.3B22.0020.0002] # CANADIAN SYLLABICS MII
+14A7 ; [.3B23.0020.0002] # CANADIAN SYLLABICS MO
+14A8 ; [.3B24.0020.0002] # CANADIAN SYLLABICS MOO
+14A9 ; [.3B25.0020.0002] # CANADIAN SYLLABICS Y-CREE MOO
+14AA ; [.3B26.0020.0002] # CANADIAN SYLLABICS MA
+14AB ; [.3B27.0020.0002] # CANADIAN SYLLABICS MAA
+14AC ; [.3B28.0020.0002] # CANADIAN SYLLABICS MWE
+14AD ; [.3B29.0020.0002] # CANADIAN SYLLABICS WEST-CREE MWE
+14AE ; [.3B2A.0020.0002] # CANADIAN SYLLABICS MWI
+14AF ; [.3B2B.0020.0002] # CANADIAN SYLLABICS WEST-CREE MWI
+14B0 ; [.3B2C.0020.0002] # CANADIAN SYLLABICS MWII
+14B1 ; [.3B2D.0020.0002] # CANADIAN SYLLABICS WEST-CREE MWII
+14B2 ; [.3B2E.0020.0002] # CANADIAN SYLLABICS MWO
+14B3 ; [.3B2F.0020.0002] # CANADIAN SYLLABICS WEST-CREE MWO
+14B4 ; [.3B30.0020.0002] # CANADIAN SYLLABICS MWOO
+14B5 ; [.3B31.0020.0002] # CANADIAN SYLLABICS WEST-CREE MWOO
+14B6 ; [.3B32.0020.0002] # CANADIAN SYLLABICS MWA
+14B7 ; [.3B33.0020.0002] # CANADIAN SYLLABICS WEST-CREE MWA
+14B8 ; [.3B34.0020.0002] # CANADIAN SYLLABICS MWAA
+14B9 ; [.3B35.0020.0002] # CANADIAN SYLLABICS WEST-CREE MWAA
+14BA ; [.3B36.0020.0002] # CANADIAN SYLLABICS NASKAPI MWAA
+14BB ; [.3B37.0020.0002] # CANADIAN SYLLABICS M
+14BC ; [.3B38.0020.0002] # CANADIAN SYLLABICS WEST-CREE M
+14BD ; [.3B39.0020.0002] # CANADIAN SYLLABICS MH
+14BE ; [.3B3A.0020.0002] # CANADIAN SYLLABICS ATHAPASCAN M
+14BF ; [.3B3B.0020.0002] # CANADIAN SYLLABICS SAYISI M
+14C0 ; [.3B3C.0020.0002] # CANADIAN SYLLABICS NE
+14C1 ; [.3B3D.0020.0002] # CANADIAN SYLLABICS NAAI
+14C2 ; [.3B3E.0020.0002] # CANADIAN SYLLABICS NI
+14C3 ; [.3B3F.0020.0002] # CANADIAN SYLLABICS NII
+14C4 ; [.3B40.0020.0002] # CANADIAN SYLLABICS NO
+14C5 ; [.3B41.0020.0002] # CANADIAN SYLLABICS NOO
+14C6 ; [.3B42.0020.0002] # CANADIAN SYLLABICS Y-CREE NOO
+14C7 ; [.3B43.0020.0002] # CANADIAN SYLLABICS NA
+14C8 ; [.3B44.0020.0002] # CANADIAN SYLLABICS NAA
+14C9 ; [.3B45.0020.0002] # CANADIAN SYLLABICS NWE
+14CA ; [.3B46.0020.0002] # CANADIAN SYLLABICS WEST-CREE NWE
+14CB ; [.3B47.0020.0002] # CANADIAN SYLLABICS NWA
+14CC ; [.3B48.0020.0002] # CANADIAN SYLLABICS WEST-CREE NWA
+14CD ; [.3B49.0020.0002] # CANADIAN SYLLABICS NWAA
+14CE ; [.3B4A.0020.0002] # CANADIAN SYLLABICS WEST-CREE NWAA
+14CF ; [.3B4B.0020.0002] # CANADIAN SYLLABICS NASKAPI NWAA
+14D0 ; [.3B4C.0020.0002] # CANADIAN SYLLABICS N
+14D1 ; [.3B4D.0020.0002] # CANADIAN SYLLABICS CARRIER NG
+14D2 ; [.3B4E.0020.0002] # CANADIAN SYLLABICS NH
+14D3 ; [.3B4F.0020.0002] # CANADIAN SYLLABICS LE
+14D4 ; [.3B50.0020.0002] # CANADIAN SYLLABICS LAAI
+14D5 ; [.3B51.0020.0002] # CANADIAN SYLLABICS LI
+14D6 ; [.3B52.0020.0002] # CANADIAN SYLLABICS LII
+14D7 ; [.3B53.0020.0002] # CANADIAN SYLLABICS LO
+14D8 ; [.3B54.0020.0002] # CANADIAN SYLLABICS LOO
+14D9 ; [.3B55.0020.0002] # CANADIAN SYLLABICS Y-CREE LOO
+14DA ; [.3B56.0020.0002] # CANADIAN SYLLABICS LA
+14DB ; [.3B57.0020.0002] # CANADIAN SYLLABICS LAA
+14DC ; [.3B58.0020.0002] # CANADIAN SYLLABICS LWE
+14DD ; [.3B59.0020.0002] # CANADIAN SYLLABICS WEST-CREE LWE
+14DE ; [.3B5A.0020.0002] # CANADIAN SYLLABICS LWI
+14DF ; [.3B5B.0020.0002] # CANADIAN SYLLABICS WEST-CREE LWI
+14E0 ; [.3B5C.0020.0002] # CANADIAN SYLLABICS LWII
+14E1 ; [.3B5D.0020.0002] # CANADIAN SYLLABICS WEST-CREE LWII
+14E2 ; [.3B5E.0020.0002] # CANADIAN SYLLABICS LWO
+14E3 ; [.3B5F.0020.0002] # CANADIAN SYLLABICS WEST-CREE LWO
+14E4 ; [.3B60.0020.0002] # CANADIAN SYLLABICS LWOO
+14E5 ; [.3B61.0020.0002] # CANADIAN SYLLABICS WEST-CREE LWOO
+14E6 ; [.3B62.0020.0002] # CANADIAN SYLLABICS LWA
+14E7 ; [.3B63.0020.0002] # CANADIAN SYLLABICS WEST-CREE LWA
+14E8 ; [.3B64.0020.0002] # CANADIAN SYLLABICS LWAA
+14E9 ; [.3B65.0020.0002] # CANADIAN SYLLABICS WEST-CREE LWAA
+14EA ; [.3B66.0020.0002] # CANADIAN SYLLABICS L
+14EB ; [.3B67.0020.0002] # CANADIAN SYLLABICS WEST-CREE L
+14EC ; [.3B68.0020.0002] # CANADIAN SYLLABICS MEDIAL L
+14ED ; [.3B69.0020.0002] # CANADIAN SYLLABICS SE
+14EE ; [.3B6A.0020.0002] # CANADIAN SYLLABICS SAAI
+14EF ; [.3B6B.0020.0002] # CANADIAN SYLLABICS SI
+14F0 ; [.3B6C.0020.0002] # CANADIAN SYLLABICS SII
+14F1 ; [.3B6D.0020.0002] # CANADIAN SYLLABICS SO
+14F2 ; [.3B6E.0020.0002] # CANADIAN SYLLABICS SOO
+14F3 ; [.3B6F.0020.0002] # CANADIAN SYLLABICS Y-CREE SOO
+14F4 ; [.3B70.0020.0002] # CANADIAN SYLLABICS SA
+14F5 ; [.3B71.0020.0002] # CANADIAN SYLLABICS SAA
+14F6 ; [.3B72.0020.0002] # CANADIAN SYLLABICS SWE
+14F7 ; [.3B73.0020.0002] # CANADIAN SYLLABICS WEST-CREE SWE
+14F8 ; [.3B74.0020.0002] # CANADIAN SYLLABICS SWI
+14F9 ; [.3B75.0020.0002] # CANADIAN SYLLABICS WEST-CREE SWI
+14FA ; [.3B76.0020.0002] # CANADIAN SYLLABICS SWII
+14FB ; [.3B77.0020.0002] # CANADIAN SYLLABICS WEST-CREE SWII
+14FC ; [.3B78.0020.0002] # CANADIAN SYLLABICS SWO
+14FD ; [.3B79.0020.0002] # CANADIAN SYLLABICS WEST-CREE SWO
+14FE ; [.3B7A.0020.0002] # CANADIAN SYLLABICS SWOO
+14FF ; [.3B7B.0020.0002] # CANADIAN SYLLABICS WEST-CREE SWOO
+1500 ; [.3B7C.0020.0002] # CANADIAN SYLLABICS SWA
+1501 ; [.3B7D.0020.0002] # CANADIAN SYLLABICS WEST-CREE SWA
+1502 ; [.3B7E.0020.0002] # CANADIAN SYLLABICS SWAA
+1503 ; [.3B7F.0020.0002] # CANADIAN SYLLABICS WEST-CREE SWAA
+1504 ; [.3B80.0020.0002] # CANADIAN SYLLABICS NASKAPI SWAA
+1505 ; [.3B81.0020.0002] # CANADIAN SYLLABICS S
+1506 ; [.3B82.0020.0002] # CANADIAN SYLLABICS ATHAPASCAN S
+1507 ; [.3B83.0020.0002] # CANADIAN SYLLABICS SW
+1508 ; [.3B84.0020.0002] # CANADIAN SYLLABICS BLACKFOOT S
+1509 ; [.3B85.0020.0002] # CANADIAN SYLLABICS MOOSE-CREE SK
+150A ; [.3B86.0020.0002] # CANADIAN SYLLABICS NASKAPI SKW
+150B ; [.3B87.0020.0002] # CANADIAN SYLLABICS NASKAPI S-W
+150C ; [.3B88.0020.0002] # CANADIAN SYLLABICS NASKAPI SPWA
+150D ; [.3B89.0020.0002] # CANADIAN SYLLABICS NASKAPI STWA
+150E ; [.3B8A.0020.0002] # CANADIAN SYLLABICS NASKAPI SKWA
+150F ; [.3B8B.0020.0002] # CANADIAN SYLLABICS NASKAPI SCWA
+1510 ; [.3B8C.0020.0002] # CANADIAN SYLLABICS SHE
+1511 ; [.3B8D.0020.0002] # CANADIAN SYLLABICS SHI
+1512 ; [.3B8E.0020.0002] # CANADIAN SYLLABICS SHII
+1513 ; [.3B8F.0020.0002] # CANADIAN SYLLABICS SHO
+1514 ; [.3B90.0020.0002] # CANADIAN SYLLABICS SHOO
+1515 ; [.3B91.0020.0002] # CANADIAN SYLLABICS SHA
+1516 ; [.3B92.0020.0002] # CANADIAN SYLLABICS SHAA
+1517 ; [.3B93.0020.0002] # CANADIAN SYLLABICS SHWE
+1518 ; [.3B94.0020.0002] # CANADIAN SYLLABICS WEST-CREE SHWE
+1519 ; [.3B95.0020.0002] # CANADIAN SYLLABICS SHWI
+151A ; [.3B96.0020.0002] # CANADIAN SYLLABICS WEST-CREE SHWI
+151B ; [.3B97.0020.0002] # CANADIAN SYLLABICS SHWII
+151C ; [.3B98.0020.0002] # CANADIAN SYLLABICS WEST-CREE SHWII
+151D ; [.3B99.0020.0002] # CANADIAN SYLLABICS SHWO
+151E ; [.3B9A.0020.0002] # CANADIAN SYLLABICS WEST-CREE SHWO
+151F ; [.3B9B.0020.0002] # CANADIAN SYLLABICS SHWOO
+1520 ; [.3B9C.0020.0002] # CANADIAN SYLLABICS WEST-CREE SHWOO
+1521 ; [.3B9D.0020.0002] # CANADIAN SYLLABICS SHWA
+1522 ; [.3B9E.0020.0002] # CANADIAN SYLLABICS WEST-CREE SHWA
+1523 ; [.3B9F.0020.0002] # CANADIAN SYLLABICS SHWAA
+1524 ; [.3BA0.0020.0002] # CANADIAN SYLLABICS WEST-CREE SHWAA
+1525 ; [.3BA1.0020.0002] # CANADIAN SYLLABICS SH
+1526 ; [.3BA2.0020.0002] # CANADIAN SYLLABICS YE
+1527 ; [.3BA3.0020.0002] # CANADIAN SYLLABICS YAAI
+1528 ; [.3BA4.0020.0002] # CANADIAN SYLLABICS YI
+1529 ; [.3BA5.0020.0002] # CANADIAN SYLLABICS YII
+152A ; [.3BA6.0020.0002] # CANADIAN SYLLABICS YO
+152B ; [.3BA7.0020.0002] # CANADIAN SYLLABICS YOO
+152C ; [.3BA8.0020.0002] # CANADIAN SYLLABICS Y-CREE YOO
+152D ; [.3BA9.0020.0002] # CANADIAN SYLLABICS YA
+152E ; [.3BAA.0020.0002] # CANADIAN SYLLABICS YAA
+152F ; [.3BAB.0020.0002] # CANADIAN SYLLABICS YWE
+1530 ; [.3BAC.0020.0002] # CANADIAN SYLLABICS WEST-CREE YWE
+1531 ; [.3BAD.0020.0002] # CANADIAN SYLLABICS YWI
+1532 ; [.3BAE.0020.0002] # CANADIAN SYLLABICS WEST-CREE YWI
+1533 ; [.3BAF.0020.0002] # CANADIAN SYLLABICS YWII
+1534 ; [.3BB0.0020.0002] # CANADIAN SYLLABICS WEST-CREE YWII
+1535 ; [.3BB1.0020.0002] # CANADIAN SYLLABICS YWO
+1536 ; [.3BB2.0020.0002] # CANADIAN SYLLABICS WEST-CREE YWO
+1537 ; [.3BB3.0020.0002] # CANADIAN SYLLABICS YWOO
+1538 ; [.3BB4.0020.0002] # CANADIAN SYLLABICS WEST-CREE YWOO
+1539 ; [.3BB5.0020.0002] # CANADIAN SYLLABICS YWA
+153A ; [.3BB6.0020.0002] # CANADIAN SYLLABICS WEST-CREE YWA
+153B ; [.3BB7.0020.0002] # CANADIAN SYLLABICS YWAA
+153C ; [.3BB8.0020.0002] # CANADIAN SYLLABICS WEST-CREE YWAA
+153D ; [.3BB9.0020.0002] # CANADIAN SYLLABICS NASKAPI YWAA
+153E ; [.3BBA.0020.0002] # CANADIAN SYLLABICS Y
+153F ; [.3BBB.0020.0002] # CANADIAN SYLLABICS BIBLE-CREE Y
+1540 ; [.3BBC.0020.0002] # CANADIAN SYLLABICS WEST-CREE Y
+1541 ; [.3BBD.0020.0002] # CANADIAN SYLLABICS SAYISI YI
+1542 ; [.3BBE.0020.0002] # CANADIAN SYLLABICS RE
+1543 ; [.3BBF.0020.0002] # CANADIAN SYLLABICS R-CREE RE
+1544 ; [.3BC0.0020.0002] # CANADIAN SYLLABICS WEST-CREE LE
+1545 ; [.3BC1.0020.0002] # CANADIAN SYLLABICS RAAI
+1546 ; [.3BC2.0020.0002] # CANADIAN SYLLABICS RI
+1547 ; [.3BC3.0020.0002] # CANADIAN SYLLABICS RII
+1548 ; [.3BC4.0020.0002] # CANADIAN SYLLABICS RO
+1549 ; [.3BC5.0020.0002] # CANADIAN SYLLABICS ROO
+154A ; [.3BC6.0020.0002] # CANADIAN SYLLABICS WEST-CREE LO
+154B ; [.3BC7.0020.0002] # CANADIAN SYLLABICS RA
+154C ; [.3BC8.0020.0002] # CANADIAN SYLLABICS RAA
+154D ; [.3BC9.0020.0002] # CANADIAN SYLLABICS WEST-CREE LA
+154E ; [.3BCA.0020.0002] # CANADIAN SYLLABICS RWAA
+154F ; [.3BCB.0020.0002] # CANADIAN SYLLABICS WEST-CREE RWAA
+1550 ; [.3BCC.0020.0002] # CANADIAN SYLLABICS R
+1551 ; [.3BCD.0020.0002] # CANADIAN SYLLABICS WEST-CREE R
+1552 ; [.3BCE.0020.0002] # CANADIAN SYLLABICS MEDIAL R
+1553 ; [.3BCF.0020.0002] # CANADIAN SYLLABICS FE
+1554 ; [.3BD0.0020.0002] # CANADIAN SYLLABICS FAAI
+1555 ; [.3BD1.0020.0002] # CANADIAN SYLLABICS FI
+1556 ; [.3BD2.0020.0002] # CANADIAN SYLLABICS FII
+1557 ; [.3BD3.0020.0002] # CANADIAN SYLLABICS FO
+1558 ; [.3BD4.0020.0002] # CANADIAN SYLLABICS FOO
+1559 ; [.3BD5.0020.0002] # CANADIAN SYLLABICS FA
+155A ; [.3BD6.0020.0002] # CANADIAN SYLLABICS FAA
+155B ; [.3BD7.0020.0002] # CANADIAN SYLLABICS FWAA
+155C ; [.3BD8.0020.0002] # CANADIAN SYLLABICS WEST-CREE FWAA
+155D ; [.3BD9.0020.0002] # CANADIAN SYLLABICS F
+155E ; [.3BDA.0020.0002] # CANADIAN SYLLABICS THE
+155F ; [.3BDB.0020.0002] # CANADIAN SYLLABICS N-CREE THE
+1560 ; [.3BDC.0020.0002] # CANADIAN SYLLABICS THI
+1561 ; [.3BDD.0020.0002] # CANADIAN SYLLABICS N-CREE THI
+1562 ; [.3BDE.0020.0002] # CANADIAN SYLLABICS THII
+1563 ; [.3BDF.0020.0002] # CANADIAN SYLLABICS N-CREE THII
+1564 ; [.3BE0.0020.0002] # CANADIAN SYLLABICS THO
+1565 ; [.3BE1.0020.0002] # CANADIAN SYLLABICS THOO
+1566 ; [.3BE2.0020.0002] # CANADIAN SYLLABICS THA
+1567 ; [.3BE3.0020.0002] # CANADIAN SYLLABICS THAA
+1568 ; [.3BE4.0020.0002] # CANADIAN SYLLABICS THWAA
+1569 ; [.3BE5.0020.0002] # CANADIAN SYLLABICS WEST-CREE THWAA
+156A ; [.3BE6.0020.0002] # CANADIAN SYLLABICS TH
+156B ; [.3BE7.0020.0002] # CANADIAN SYLLABICS TTHE
+156C ; [.3BE8.0020.0002] # CANADIAN SYLLABICS TTHI
+156D ; [.3BE9.0020.0002] # CANADIAN SYLLABICS TTHO
+156E ; [.3BEA.0020.0002] # CANADIAN SYLLABICS TTHA
+156F ; [.3BEB.0020.0002] # CANADIAN SYLLABICS TTH
+1570 ; [.3BEC.0020.0002] # CANADIAN SYLLABICS TYE
+1571 ; [.3BED.0020.0002] # CANADIAN SYLLABICS TYI
+1572 ; [.3BEE.0020.0002] # CANADIAN SYLLABICS TYO
+1573 ; [.3BEF.0020.0002] # CANADIAN SYLLABICS TYA
+1574 ; [.3BF0.0020.0002] # CANADIAN SYLLABICS NUNAVIK HE
+1575 ; [.3BF1.0020.0002] # CANADIAN SYLLABICS NUNAVIK HI
+1576 ; [.3BF2.0020.0002] # CANADIAN SYLLABICS NUNAVIK HII
+1577 ; [.3BF3.0020.0002] # CANADIAN SYLLABICS NUNAVIK HO
+1578 ; [.3BF4.0020.0002] # CANADIAN SYLLABICS NUNAVIK HOO
+1579 ; [.3BF5.0020.0002] # CANADIAN SYLLABICS NUNAVIK HA
+157A ; [.3BF6.0020.0002] # CANADIAN SYLLABICS NUNAVIK HAA
+157B ; [.3BF7.0020.0002] # CANADIAN SYLLABICS NUNAVIK H
+157D ; [.3BF8.0020.0002] # CANADIAN SYLLABICS HK
+166F ; [.3BF9.0020.0002] # CANADIAN SYLLABICS QAI
+157E ; [.3BFA.0020.0002] # CANADIAN SYLLABICS QAAI
+157F ; [.3BFB.0020.0002] # CANADIAN SYLLABICS QI
+1580 ; [.3BFC.0020.0002] # CANADIAN SYLLABICS QII
+1581 ; [.3BFD.0020.0002] # CANADIAN SYLLABICS QO
+1582 ; [.3BFE.0020.0002] # CANADIAN SYLLABICS QOO
+1583 ; [.3BFF.0020.0002] # CANADIAN SYLLABICS QA
+1584 ; [.3C00.0020.0002] # CANADIAN SYLLABICS QAA
+1585 ; [.3C01.0020.0002] # CANADIAN SYLLABICS Q
+1586 ; [.3C02.0020.0002] # CANADIAN SYLLABICS TLHE
+1587 ; [.3C03.0020.0002] # CANADIAN SYLLABICS TLHI
+1588 ; [.3C04.0020.0002] # CANADIAN SYLLABICS TLHO
+1589 ; [.3C05.0020.0002] # CANADIAN SYLLABICS TLHA
+158A ; [.3C06.0020.0002] # CANADIAN SYLLABICS WEST-CREE RE
+158B ; [.3C07.0020.0002] # CANADIAN SYLLABICS WEST-CREE RI
+158C ; [.3C08.0020.0002] # CANADIAN SYLLABICS WEST-CREE RO
+158D ; [.3C09.0020.0002] # CANADIAN SYLLABICS WEST-CREE RA
+1670 ; [.3C0A.0020.0002] # CANADIAN SYLLABICS NGAI
+158E ; [.3C0B.0020.0002] # CANADIAN SYLLABICS NGAAI
+158F ; [.3C0C.0020.0002] # CANADIAN SYLLABICS NGI
+1590 ; [.3C0D.0020.0002] # CANADIAN SYLLABICS NGII
+1591 ; [.3C0E.0020.0002] # CANADIAN SYLLABICS NGO
+1592 ; [.3C0F.0020.0002] # CANADIAN SYLLABICS NGOO
+1593 ; [.3C10.0020.0002] # CANADIAN SYLLABICS NGA
+1594 ; [.3C11.0020.0002] # CANADIAN SYLLABICS NGAA
+1595 ; [.3C12.0020.0002] # CANADIAN SYLLABICS NG
+1671 ; [.3C13.0020.0002] # CANADIAN SYLLABICS NNGI
+1672 ; [.3C14.0020.0002] # CANADIAN SYLLABICS NNGII
+1673 ; [.3C15.0020.0002] # CANADIAN SYLLABICS NNGO
+1674 ; [.3C16.0020.0002] # CANADIAN SYLLABICS NNGOO
+1675 ; [.3C17.0020.0002] # CANADIAN SYLLABICS NNGA
+1676 ; [.3C18.0020.0002] # CANADIAN SYLLABICS NNGAA
+1596 ; [.3C19.0020.0002] # CANADIAN SYLLABICS NNG
+1597 ; [.3C1A.0020.0002] # CANADIAN SYLLABICS SAYISI SHE
+1598 ; [.3C1B.0020.0002] # CANADIAN SYLLABICS SAYISI SHI
+1599 ; [.3C1C.0020.0002] # CANADIAN SYLLABICS SAYISI SHO
+159A ; [.3C1D.0020.0002] # CANADIAN SYLLABICS SAYISI SHA
+159B ; [.3C1E.0020.0002] # CANADIAN SYLLABICS WOODS-CREE THE
+159C ; [.3C1F.0020.0002] # CANADIAN SYLLABICS WOODS-CREE THI
+159D ; [.3C20.0020.0002] # CANADIAN SYLLABICS WOODS-CREE THO
+159E ; [.3C21.0020.0002] # CANADIAN SYLLABICS WOODS-CREE THA
+159F ; [.3C22.0020.0002] # CANADIAN SYLLABICS WOODS-CREE TH
+15A0 ; [.3C23.0020.0002] # CANADIAN SYLLABICS LHI
+15A1 ; [.3C24.0020.0002] # CANADIAN SYLLABICS LHII
+15A2 ; [.3C25.0020.0002] # CANADIAN SYLLABICS LHO
+15A3 ; [.3C26.0020.0002] # CANADIAN SYLLABICS LHOO
+15A4 ; [.3C27.0020.0002] # CANADIAN SYLLABICS LHA
+15A5 ; [.3C28.0020.0002] # CANADIAN SYLLABICS LHAA
+15A6 ; [.3C29.0020.0002] # CANADIAN SYLLABICS LH
+157C ; [.3C2A.0020.0002] # CANADIAN SYLLABICS NUNAVUT H
+15A7 ; [.3C2B.0020.0002] # CANADIAN SYLLABICS TH-CREE THE
+15A8 ; [.3C2C.0020.0002] # CANADIAN SYLLABICS TH-CREE THI
+15A9 ; [.3C2D.0020.0002] # CANADIAN SYLLABICS TH-CREE THII
+15AA ; [.3C2E.0020.0002] # CANADIAN SYLLABICS TH-CREE THO
+15AB ; [.3C2F.0020.0002] # CANADIAN SYLLABICS TH-CREE THOO
+15AC ; [.3C30.0020.0002] # CANADIAN SYLLABICS TH-CREE THA
+15AD ; [.3C31.0020.0002] # CANADIAN SYLLABICS TH-CREE THAA
+15AE ; [.3C32.0020.0002] # CANADIAN SYLLABICS TH-CREE TH
+15AF ; [.3C33.0020.0002] # CANADIAN SYLLABICS AIVILIK B
+15B0 ; [.3C34.0020.0002] # CANADIAN SYLLABICS BLACKFOOT E
+15B1 ; [.3C35.0020.0002] # CANADIAN SYLLABICS BLACKFOOT I
+15B2 ; [.3C36.0020.0002] # CANADIAN SYLLABICS BLACKFOOT O
+15B3 ; [.3C37.0020.0002] # CANADIAN SYLLABICS BLACKFOOT A
+15B4 ; [.3C38.0020.0002] # CANADIAN SYLLABICS BLACKFOOT WE
+15B5 ; [.3C39.0020.0002] # CANADIAN SYLLABICS BLACKFOOT WI
+15B6 ; [.3C3A.0020.0002] # CANADIAN SYLLABICS BLACKFOOT WO
+15B7 ; [.3C3B.0020.0002] # CANADIAN SYLLABICS BLACKFOOT WA
+15B8 ; [.3C3C.0020.0002] # CANADIAN SYLLABICS BLACKFOOT NE
+15B9 ; [.3C3D.0020.0002] # CANADIAN SYLLABICS BLACKFOOT NI
+15BA ; [.3C3E.0020.0002] # CANADIAN SYLLABICS BLACKFOOT NO
+15BB ; [.3C3F.0020.0002] # CANADIAN SYLLABICS BLACKFOOT NA
+15BC ; [.3C40.0020.0002] # CANADIAN SYLLABICS BLACKFOOT KE
+15BD ; [.3C41.0020.0002] # CANADIAN SYLLABICS BLACKFOOT KI
+15BE ; [.3C42.0020.0002] # CANADIAN SYLLABICS BLACKFOOT KO
+15BF ; [.3C43.0020.0002] # CANADIAN SYLLABICS BLACKFOOT KA
+15C0 ; [.3C44.0020.0002] # CANADIAN SYLLABICS SAYISI HE
+15C1 ; [.3C45.0020.0002] # CANADIAN SYLLABICS SAYISI HI
+15C2 ; [.3C46.0020.0002] # CANADIAN SYLLABICS SAYISI HO
+15C3 ; [.3C47.0020.0002] # CANADIAN SYLLABICS SAYISI HA
+15C4 ; [.3C48.0020.0002] # CANADIAN SYLLABICS CARRIER GHU
+15C5 ; [.3C49.0020.0002] # CANADIAN SYLLABICS CARRIER GHO
+15C6 ; [.3C4A.0020.0002] # CANADIAN SYLLABICS CARRIER GHE
+15C7 ; [.3C4B.0020.0002] # CANADIAN SYLLABICS CARRIER GHEE
+15C8 ; [.3C4C.0020.0002] # CANADIAN SYLLABICS CARRIER GHI
+15C9 ; [.3C4D.0020.0002] # CANADIAN SYLLABICS CARRIER GHA
+15CA ; [.3C4E.0020.0002] # CANADIAN SYLLABICS CARRIER RU
+15CB ; [.3C4F.0020.0002] # CANADIAN SYLLABICS CARRIER RO
+15CC ; [.3C50.0020.0002] # CANADIAN SYLLABICS CARRIER RE
+15CD ; [.3C51.0020.0002] # CANADIAN SYLLABICS CARRIER REE
+15CE ; [.3C52.0020.0002] # CANADIAN SYLLABICS CARRIER RI
+15CF ; [.3C53.0020.0002] # CANADIAN SYLLABICS CARRIER RA
+15D0 ; [.3C54.0020.0002] # CANADIAN SYLLABICS CARRIER WU
+15D1 ; [.3C55.0020.0002] # CANADIAN SYLLABICS CARRIER WO
+15D2 ; [.3C56.0020.0002] # CANADIAN SYLLABICS CARRIER WE
+15D3 ; [.3C57.0020.0002] # CANADIAN SYLLABICS CARRIER WEE
+15D4 ; [.3C58.0020.0002] # CANADIAN SYLLABICS CARRIER WI
+15D5 ; [.3C59.0020.0002] # CANADIAN SYLLABICS CARRIER WA
+15D6 ; [.3C5A.0020.0002] # CANADIAN SYLLABICS CARRIER HWU
+15D7 ; [.3C5B.0020.0002] # CANADIAN SYLLABICS CARRIER HWO
+15D8 ; [.3C5C.0020.0002] # CANADIAN SYLLABICS CARRIER HWE
+15D9 ; [.3C5D.0020.0002] # CANADIAN SYLLABICS CARRIER HWEE
+15DA ; [.3C5E.0020.0002] # CANADIAN SYLLABICS CARRIER HWI
+15DB ; [.3C5F.0020.0002] # CANADIAN SYLLABICS CARRIER HWA
+15DC ; [.3C60.0020.0002] # CANADIAN SYLLABICS CARRIER THU
+15DD ; [.3C61.0020.0002] # CANADIAN SYLLABICS CARRIER THO
+15DE ; [.3C62.0020.0002] # CANADIAN SYLLABICS CARRIER THE
+15DF ; [.3C63.0020.0002] # CANADIAN SYLLABICS CARRIER THEE
+15E0 ; [.3C64.0020.0002] # CANADIAN SYLLABICS CARRIER THI
+15E1 ; [.3C65.0020.0002] # CANADIAN SYLLABICS CARRIER THA
+15E2 ; [.3C66.0020.0002] # CANADIAN SYLLABICS CARRIER TTU
+15E3 ; [.3C67.0020.0002] # CANADIAN SYLLABICS CARRIER TTO
+15E4 ; [.3C68.0020.0002] # CANADIAN SYLLABICS CARRIER TTE
+15E5 ; [.3C69.0020.0002] # CANADIAN SYLLABICS CARRIER TTEE
+15E6 ; [.3C6A.0020.0002] # CANADIAN SYLLABICS CARRIER TTI
+15E7 ; [.3C6B.0020.0002] # CANADIAN SYLLABICS CARRIER TTA
+15E8 ; [.3C6C.0020.0002] # CANADIAN SYLLABICS CARRIER PU
+15E9 ; [.3C6D.0020.0002] # CANADIAN SYLLABICS CARRIER PO
+15EA ; [.3C6E.0020.0002] # CANADIAN SYLLABICS CARRIER PE
+15EB ; [.3C6F.0020.0002] # CANADIAN SYLLABICS CARRIER PEE
+15EC ; [.3C70.0020.0002] # CANADIAN SYLLABICS CARRIER PI
+15ED ; [.3C71.0020.0002] # CANADIAN SYLLABICS CARRIER PA
+15EE ; [.3C72.0020.0002] # CANADIAN SYLLABICS CARRIER P
+15EF ; [.3C73.0020.0002] # CANADIAN SYLLABICS CARRIER GU
+15F0 ; [.3C74.0020.0002] # CANADIAN SYLLABICS CARRIER GO
+15F1 ; [.3C75.0020.0002] # CANADIAN SYLLABICS CARRIER GE
+15F2 ; [.3C76.0020.0002] # CANADIAN SYLLABICS CARRIER GEE
+15F3 ; [.3C77.0020.0002] # CANADIAN SYLLABICS CARRIER GI
+15F4 ; [.3C78.0020.0002] # CANADIAN SYLLABICS CARRIER GA
+15F5 ; [.3C79.0020.0002] # CANADIAN SYLLABICS CARRIER KHU
+15F6 ; [.3C7A.0020.0002] # CANADIAN SYLLABICS CARRIER KHO
+15F7 ; [.3C7B.0020.0002] # CANADIAN SYLLABICS CARRIER KHE
+15F8 ; [.3C7C.0020.0002] # CANADIAN SYLLABICS CARRIER KHEE
+15F9 ; [.3C7D.0020.0002] # CANADIAN SYLLABICS CARRIER KHI
+15FA ; [.3C7E.0020.0002] # CANADIAN SYLLABICS CARRIER KHA
+15FB ; [.3C7F.0020.0002] # CANADIAN SYLLABICS CARRIER KKU
+15FC ; [.3C80.0020.0002] # CANADIAN SYLLABICS CARRIER KKO
+15FD ; [.3C81.0020.0002] # CANADIAN SYLLABICS CARRIER KKE
+15FE ; [.3C82.0020.0002] # CANADIAN SYLLABICS CARRIER KKEE
+15FF ; [.3C83.0020.0002] # CANADIAN SYLLABICS CARRIER KKI
+1600 ; [.3C84.0020.0002] # CANADIAN SYLLABICS CARRIER KKA
+1601 ; [.3C85.0020.0002] # CANADIAN SYLLABICS CARRIER KK
+1602 ; [.3C86.0020.0002] # CANADIAN SYLLABICS CARRIER NU
+1603 ; [.3C87.0020.0002] # CANADIAN SYLLABICS CARRIER NO
+1604 ; [.3C88.0020.0002] # CANADIAN SYLLABICS CARRIER NE
+1605 ; [.3C89.0020.0002] # CANADIAN SYLLABICS CARRIER NEE
+1606 ; [.3C8A.0020.0002] # CANADIAN SYLLABICS CARRIER NI
+1607 ; [.3C8B.0020.0002] # CANADIAN SYLLABICS CARRIER NA
+1608 ; [.3C8C.0020.0002] # CANADIAN SYLLABICS CARRIER MU
+1609 ; [.3C8D.0020.0002] # CANADIAN SYLLABICS CARRIER MO
+160A ; [.3C8E.0020.0002] # CANADIAN SYLLABICS CARRIER ME
+160B ; [.3C8F.0020.0002] # CANADIAN SYLLABICS CARRIER MEE
+160C ; [.3C90.0020.0002] # CANADIAN SYLLABICS CARRIER MI
+160D ; [.3C91.0020.0002] # CANADIAN SYLLABICS CARRIER MA
+160E ; [.3C92.0020.0002] # CANADIAN SYLLABICS CARRIER YU
+160F ; [.3C93.0020.0002] # CANADIAN SYLLABICS CARRIER YO
+1610 ; [.3C94.0020.0002] # CANADIAN SYLLABICS CARRIER YE
+1611 ; [.3C95.0020.0002] # CANADIAN SYLLABICS CARRIER YEE
+1612 ; [.3C96.0020.0002] # CANADIAN SYLLABICS CARRIER YI
+1613 ; [.3C97.0020.0002] # CANADIAN SYLLABICS CARRIER YA
+1614 ; [.3C98.0020.0002] # CANADIAN SYLLABICS CARRIER JU
+1615 ; [.3C99.0020.0002] # CANADIAN SYLLABICS SAYISI JU
+1616 ; [.3C9A.0020.0002] # CANADIAN SYLLABICS CARRIER JO
+1617 ; [.3C9B.0020.0002] # CANADIAN SYLLABICS CARRIER JE
+1618 ; [.3C9C.0020.0002] # CANADIAN SYLLABICS CARRIER JEE
+1619 ; [.3C9D.0020.0002] # CANADIAN SYLLABICS CARRIER JI
+161A ; [.3C9E.0020.0002] # CANADIAN SYLLABICS SAYISI JI
+161B ; [.3C9F.0020.0002] # CANADIAN SYLLABICS CARRIER JA
+161C ; [.3CA0.0020.0002] # CANADIAN SYLLABICS CARRIER JJU
+161D ; [.3CA1.0020.0002] # CANADIAN SYLLABICS CARRIER JJO
+161E ; [.3CA2.0020.0002] # CANADIAN SYLLABICS CARRIER JJE
+161F ; [.3CA3.0020.0002] # CANADIAN SYLLABICS CARRIER JJEE
+1620 ; [.3CA4.0020.0002] # CANADIAN SYLLABICS CARRIER JJI
+1621 ; [.3CA5.0020.0002] # CANADIAN SYLLABICS CARRIER JJA
+1622 ; [.3CA6.0020.0002] # CANADIAN SYLLABICS CARRIER LU
+1623 ; [.3CA7.0020.0002] # CANADIAN SYLLABICS CARRIER LO
+1624 ; [.3CA8.0020.0002] # CANADIAN SYLLABICS CARRIER LE
+1625 ; [.3CA9.0020.0002] # CANADIAN SYLLABICS CARRIER LEE
+1626 ; [.3CAA.0020.0002] # CANADIAN SYLLABICS CARRIER LI
+1627 ; [.3CAB.0020.0002] # CANADIAN SYLLABICS CARRIER LA
+1628 ; [.3CAC.0020.0002] # CANADIAN SYLLABICS CARRIER DLU
+1629 ; [.3CAD.0020.0002] # CANADIAN SYLLABICS CARRIER DLO
+162A ; [.3CAE.0020.0002] # CANADIAN SYLLABICS CARRIER DLE
+162B ; [.3CAF.0020.0002] # CANADIAN SYLLABICS CARRIER DLEE
+162C ; [.3CB0.0020.0002] # CANADIAN SYLLABICS CARRIER DLI
+162D ; [.3CB1.0020.0002] # CANADIAN SYLLABICS CARRIER DLA
+162E ; [.3CB2.0020.0002] # CANADIAN SYLLABICS CARRIER LHU
+162F ; [.3CB3.0020.0002] # CANADIAN SYLLABICS CARRIER LHO
+1630 ; [.3CB4.0020.0002] # CANADIAN SYLLABICS CARRIER LHE
+1631 ; [.3CB5.0020.0002] # CANADIAN SYLLABICS CARRIER LHEE
+1632 ; [.3CB6.0020.0002] # CANADIAN SYLLABICS CARRIER LHI
+1633 ; [.3CB7.0020.0002] # CANADIAN SYLLABICS CARRIER LHA
+1634 ; [.3CB8.0020.0002] # CANADIAN SYLLABICS CARRIER TLHU
+1635 ; [.3CB9.0020.0002] # CANADIAN SYLLABICS CARRIER TLHO
+1636 ; [.3CBA.0020.0002] # CANADIAN SYLLABICS CARRIER TLHE
+1637 ; [.3CBB.0020.0002] # CANADIAN SYLLABICS CARRIER TLHEE
+1638 ; [.3CBC.0020.0002] # CANADIAN SYLLABICS CARRIER TLHI
+1639 ; [.3CBD.0020.0002] # CANADIAN SYLLABICS CARRIER TLHA
+163A ; [.3CBE.0020.0002] # CANADIAN SYLLABICS CARRIER TLU
+163B ; [.3CBF.0020.0002] # CANADIAN SYLLABICS CARRIER TLO
+163C ; [.3CC0.0020.0002] # CANADIAN SYLLABICS CARRIER TLE
+163D ; [.3CC1.0020.0002] # CANADIAN SYLLABICS CARRIER TLEE
+163E ; [.3CC2.0020.0002] # CANADIAN SYLLABICS CARRIER TLI
+163F ; [.3CC3.0020.0002] # CANADIAN SYLLABICS CARRIER TLA
+1640 ; [.3CC4.0020.0002] # CANADIAN SYLLABICS CARRIER ZU
+1641 ; [.3CC5.0020.0002] # CANADIAN SYLLABICS CARRIER ZO
+1642 ; [.3CC6.0020.0002] # CANADIAN SYLLABICS CARRIER ZE
+1643 ; [.3CC7.0020.0002] # CANADIAN SYLLABICS CARRIER ZEE
+1644 ; [.3CC8.0020.0002] # CANADIAN SYLLABICS CARRIER ZI
+1645 ; [.3CC9.0020.0002] # CANADIAN SYLLABICS CARRIER ZA
+1646 ; [.3CCA.0020.0002] # CANADIAN SYLLABICS CARRIER Z
+1647 ; [.3CCB.0020.0002] # CANADIAN SYLLABICS CARRIER INITIAL Z
+1648 ; [.3CCC.0020.0002] # CANADIAN SYLLABICS CARRIER DZU
+1649 ; [.3CCD.0020.0002] # CANADIAN SYLLABICS CARRIER DZO
+164A ; [.3CCE.0020.0002] # CANADIAN SYLLABICS CARRIER DZE
+164B ; [.3CCF.0020.0002] # CANADIAN SYLLABICS CARRIER DZEE
+164C ; [.3CD0.0020.0002] # CANADIAN SYLLABICS CARRIER DZI
+164D ; [.3CD1.0020.0002] # CANADIAN SYLLABICS CARRIER DZA
+164E ; [.3CD2.0020.0002] # CANADIAN SYLLABICS CARRIER SU
+164F ; [.3CD3.0020.0002] # CANADIAN SYLLABICS CARRIER SO
+1650 ; [.3CD4.0020.0002] # CANADIAN SYLLABICS CARRIER SE
+1651 ; [.3CD5.0020.0002] # CANADIAN SYLLABICS CARRIER SEE
+1652 ; [.3CD6.0020.0002] # CANADIAN SYLLABICS CARRIER SI
+1653 ; [.3CD7.0020.0002] # CANADIAN SYLLABICS CARRIER SA
+1654 ; [.3CD8.0020.0002] # CANADIAN SYLLABICS CARRIER SHU
+1655 ; [.3CD9.0020.0002] # CANADIAN SYLLABICS CARRIER SHO
+1656 ; [.3CDA.0020.0002] # CANADIAN SYLLABICS CARRIER SHE
+1657 ; [.3CDB.0020.0002] # CANADIAN SYLLABICS CARRIER SHEE
+1658 ; [.3CDC.0020.0002] # CANADIAN SYLLABICS CARRIER SHI
+1659 ; [.3CDD.0020.0002] # CANADIAN SYLLABICS CARRIER SHA
+165A ; [.3CDE.0020.0002] # CANADIAN SYLLABICS CARRIER SH
+165B ; [.3CDF.0020.0002] # CANADIAN SYLLABICS CARRIER TSU
+165C ; [.3CE0.0020.0002] # CANADIAN SYLLABICS CARRIER TSO
+165D ; [.3CE1.0020.0002] # CANADIAN SYLLABICS CARRIER TSE
+165E ; [.3CE2.0020.0002] # CANADIAN SYLLABICS CARRIER TSEE
+165F ; [.3CE3.0020.0002] # CANADIAN SYLLABICS CARRIER TSI
+1660 ; [.3CE4.0020.0002] # CANADIAN SYLLABICS CARRIER TSA
+1661 ; [.3CE5.0020.0002] # CANADIAN SYLLABICS CARRIER CHU
+1662 ; [.3CE6.0020.0002] # CANADIAN SYLLABICS CARRIER CHO
+1663 ; [.3CE7.0020.0002] # CANADIAN SYLLABICS CARRIER CHE
+1664 ; [.3CE8.0020.0002] # CANADIAN SYLLABICS CARRIER CHEE
+1665 ; [.3CE9.0020.0002] # CANADIAN SYLLABICS CARRIER CHI
+1666 ; [.3CEA.0020.0002] # CANADIAN SYLLABICS CARRIER CHA
+1667 ; [.3CEB.0020.0002] # CANADIAN SYLLABICS CARRIER TTSU
+1668 ; [.3CEC.0020.0002] # CANADIAN SYLLABICS CARRIER TTSO
+1669 ; [.3CED.0020.0002] # CANADIAN SYLLABICS CARRIER TTSE
+166A ; [.3CEE.0020.0002] # CANADIAN SYLLABICS CARRIER TTSEE
+166B ; [.3CEF.0020.0002] # CANADIAN SYLLABICS CARRIER TTSI
+166C ; [.3CF0.0020.0002] # CANADIAN SYLLABICS CARRIER TTSA
+1677 ; [.3CF1.0020.0002] # CANADIAN SYLLABICS WOODS-CREE THWEE
+1678 ; [.3CF2.0020.0002] # CANADIAN SYLLABICS WOODS-CREE THWI
+1679 ; [.3CF3.0020.0002] # CANADIAN SYLLABICS WOODS-CREE THWII
+167A ; [.3CF4.0020.0002] # CANADIAN SYLLABICS WOODS-CREE THWO
+167B ; [.3CF5.0020.0002] # CANADIAN SYLLABICS WOODS-CREE THWOO
+167C ; [.3CF6.0020.0002] # CANADIAN SYLLABICS WOODS-CREE THWA
+167D ; [.3CF7.0020.0002] # CANADIAN SYLLABICS WOODS-CREE THWAA
+167E ; [.3CF8.0020.0002] # CANADIAN SYLLABICS WOODS-CREE FINAL TH
+167F ; [.3CF9.0020.0002] # CANADIAN SYLLABICS BLACKFOOT W
+18B0 ; [.3CFA.0020.0002] # CANADIAN SYLLABICS OY
+18B1 ; [.3CFB.0020.0002] # CANADIAN SYLLABICS AY
+18B2 ; [.3CFC.0020.0002] # CANADIAN SYLLABICS AAY
+18B3 ; [.3CFD.0020.0002] # CANADIAN SYLLABICS WAY
+18B4 ; [.3CFE.0020.0002] # CANADIAN SYLLABICS POY
+18B5 ; [.3CFF.0020.0002] # CANADIAN SYLLABICS PAY
+18B6 ; [.3D00.0020.0002] # CANADIAN SYLLABICS PWOY
+18B7 ; [.3D01.0020.0002] # CANADIAN SYLLABICS TAY
+18B8 ; [.3D02.0020.0002] # CANADIAN SYLLABICS KAY
+18B9 ; [.3D03.0020.0002] # CANADIAN SYLLABICS KWAY
+18BA ; [.3D04.0020.0002] # CANADIAN SYLLABICS MAY
+18BB ; [.3D05.0020.0002] # CANADIAN SYLLABICS NOY
+18BC ; [.3D06.0020.0002] # CANADIAN SYLLABICS NAY
+18BD ; [.3D07.0020.0002] # CANADIAN SYLLABICS LAY
+18BE ; [.3D08.0020.0002] # CANADIAN SYLLABICS SOY
+18BF ; [.3D09.0020.0002] # CANADIAN SYLLABICS SAY
+18C0 ; [.3D0A.0020.0002] # CANADIAN SYLLABICS SHOY
+18C1 ; [.3D0B.0020.0002] # CANADIAN SYLLABICS SHAY
+18C2 ; [.3D0C.0020.0002] # CANADIAN SYLLABICS SHWOY
+18C3 ; [.3D0D.0020.0002] # CANADIAN SYLLABICS YOY
+18C4 ; [.3D0E.0020.0002] # CANADIAN SYLLABICS YAY
+18C5 ; [.3D0F.0020.0002] # CANADIAN SYLLABICS RAY
+18C6 ; [.3D10.0020.0002] # CANADIAN SYLLABICS NWI
+18C7 ; [.3D11.0020.0002] # CANADIAN SYLLABICS OJIBWAY NWI
+18C8 ; [.3D12.0020.0002] # CANADIAN SYLLABICS NWII
+18C9 ; [.3D13.0020.0002] # CANADIAN SYLLABICS OJIBWAY NWII
+18CA ; [.3D14.0020.0002] # CANADIAN SYLLABICS NWO
+18CB ; [.3D15.0020.0002] # CANADIAN SYLLABICS OJIBWAY NWO
+18CC ; [.3D16.0020.0002] # CANADIAN SYLLABICS NWOO
+18CD ; [.3D17.0020.0002] # CANADIAN SYLLABICS OJIBWAY NWOO
+18CE ; [.3D18.0020.0002] # CANADIAN SYLLABICS RWEE
+18CF ; [.3D19.0020.0002] # CANADIAN SYLLABICS RWI
+18D0 ; [.3D1A.0020.0002] # CANADIAN SYLLABICS RWII
+18D1 ; [.3D1B.0020.0002] # CANADIAN SYLLABICS RWO
+18D2 ; [.3D1C.0020.0002] # CANADIAN SYLLABICS RWOO
+18D3 ; [.3D1D.0020.0002] # CANADIAN SYLLABICS RWA
+18D4 ; [.3D1E.0020.0002] # CANADIAN SYLLABICS OJIBWAY P
+18D5 ; [.3D1F.0020.0002] # CANADIAN SYLLABICS OJIBWAY T
+18D6 ; [.3D20.0020.0002] # CANADIAN SYLLABICS OJIBWAY K
+18D7 ; [.3D21.0020.0002] # CANADIAN SYLLABICS OJIBWAY C
+18D8 ; [.3D22.0020.0002] # CANADIAN SYLLABICS OJIBWAY M
+18D9 ; [.3D23.0020.0002] # CANADIAN SYLLABICS OJIBWAY N
+18DA ; [.3D24.0020.0002] # CANADIAN SYLLABICS OJIBWAY S
+18DB ; [.3D25.0020.0002] # CANADIAN SYLLABICS OJIBWAY SH
+18DC ; [.3D26.0020.0002] # CANADIAN SYLLABICS EASTERN W
+18DD ; [.3D27.0020.0002] # CANADIAN SYLLABICS WESTERN W
+18DE ; [.3D28.0020.0002] # CANADIAN SYLLABICS FINAL SMALL RING
+18DF ; [.3D29.0020.0002] # CANADIAN SYLLABICS FINAL RAISED DOT
+18E0 ; [.3D2A.0020.0002] # CANADIAN SYLLABICS R-CREE RWE
+18E1 ; [.3D2B.0020.0002] # CANADIAN SYLLABICS WEST-CREE LOO
+18E2 ; [.3D2C.0020.0002] # CANADIAN SYLLABICS WEST-CREE LAA
+18E3 ; [.3D2D.0020.0002] # CANADIAN SYLLABICS THWE
+18E4 ; [.3D2E.0020.0002] # CANADIAN SYLLABICS THWA
+18E5 ; [.3D2F.0020.0002] # CANADIAN SYLLABICS TTHWE
+18E6 ; [.3D30.0020.0002] # CANADIAN SYLLABICS TTHOO
+18E7 ; [.3D31.0020.0002] # CANADIAN SYLLABICS TTHAA
+18E8 ; [.3D32.0020.0002] # CANADIAN SYLLABICS TLHWE
+18E9 ; [.3D33.0020.0002] # CANADIAN SYLLABICS TLHOO
+18EA ; [.3D34.0020.0002] # CANADIAN SYLLABICS SAYISI SHWE
+18EB ; [.3D35.0020.0002] # CANADIAN SYLLABICS SAYISI SHOO
+18EC ; [.3D36.0020.0002] # CANADIAN SYLLABICS SAYISI HOO
+18ED ; [.3D37.0020.0002] # CANADIAN SYLLABICS CARRIER GWU
+18EE ; [.3D38.0020.0002] # CANADIAN SYLLABICS CARRIER DENE GEE
+18EF ; [.3D39.0020.0002] # CANADIAN SYLLABICS CARRIER GAA
+18F0 ; [.3D3A.0020.0002] # CANADIAN SYLLABICS CARRIER GWA
+18F1 ; [.3D3B.0020.0002] # CANADIAN SYLLABICS SAYISI JUU
+18F2 ; [.3D3C.0020.0002] # CANADIAN SYLLABICS CARRIER JWA
+18F3 ; [.3D3D.0020.0002] # CANADIAN SYLLABICS BEAVER DENE L
+18F4 ; [.3D3E.0020.0002] # CANADIAN SYLLABICS BEAVER DENE R
+18F5 ; [.3D3F.0020.0002] # CANADIAN SYLLABICS CARRIER DENTAL S
+11AB0 ; [.3D40.0020.0002] # CANADIAN SYLLABICS NATTILIK HI
+11AB1 ; [.3D41.0020.0002] # CANADIAN SYLLABICS NATTILIK HII
+11AB2 ; [.3D42.0020.0002] # CANADIAN SYLLABICS NATTILIK HO
+11AB3 ; [.3D43.0020.0002] # CANADIAN SYLLABICS NATTILIK HOO
+11AB4 ; [.3D44.0020.0002] # CANADIAN SYLLABICS NATTILIK HA
+11AB5 ; [.3D45.0020.0002] # CANADIAN SYLLABICS NATTILIK HAA
+11AB6 ; [.3D46.0020.0002] # CANADIAN SYLLABICS NATTILIK SHRI
+11AB7 ; [.3D47.0020.0002] # CANADIAN SYLLABICS NATTILIK SHRII
+11AB8 ; [.3D48.0020.0002] # CANADIAN SYLLABICS NATTILIK SHRO
+11AB9 ; [.3D49.0020.0002] # CANADIAN SYLLABICS NATTILIK SHROO
+11ABA ; [.3D4A.0020.0002] # CANADIAN SYLLABICS NATTILIK SHRA
+11ABB ; [.3D4B.0020.0002] # CANADIAN SYLLABICS NATTILIK SHRAA
+11ABC ; [.3D4C.0020.0002] # CANADIAN SYLLABICS SPE
+11ABD ; [.3D4D.0020.0002] # CANADIAN SYLLABICS SPI
+11ABE ; [.3D4E.0020.0002] # CANADIAN SYLLABICS SPO
+11ABF ; [.3D4F.0020.0002] # CANADIAN SYLLABICS SPA
+1681 ; [.3D50.0020.0002] # OGHAM LETTER BEITH
+1682 ; [.3D51.0020.0002] # OGHAM LETTER LUIS
+1683 ; [.3D52.0020.0002] # OGHAM LETTER FEARN
+1684 ; [.3D53.0020.0002] # OGHAM LETTER SAIL
+1685 ; [.3D54.0020.0002] # OGHAM LETTER NION
+1686 ; [.3D55.0020.0002] # OGHAM LETTER UATH
+1687 ; [.3D56.0020.0002] # OGHAM LETTER DAIR
+1688 ; [.3D57.0020.0002] # OGHAM LETTER TINNE
+1689 ; [.3D58.0020.0002] # OGHAM LETTER COLL
+168A ; [.3D59.0020.0002] # OGHAM LETTER CEIRT
+168B ; [.3D5A.0020.0002] # OGHAM LETTER MUIN
+168C ; [.3D5B.0020.0002] # OGHAM LETTER GORT
+168D ; [.3D5C.0020.0002] # OGHAM LETTER NGEADAL
+168E ; [.3D5D.0020.0002] # OGHAM LETTER STRAIF
+168F ; [.3D5E.0020.0002] # OGHAM LETTER RUIS
+1690 ; [.3D5F.0020.0002] # OGHAM LETTER AILM
+1691 ; [.3D60.0020.0002] # OGHAM LETTER ONN
+1692 ; [.3D61.0020.0002] # OGHAM LETTER UR
+1693 ; [.3D62.0020.0002] # OGHAM LETTER EADHADH
+1694 ; [.3D63.0020.0002] # OGHAM LETTER IODHADH
+1695 ; [.3D64.0020.0002] # OGHAM LETTER EABHADH
+1696 ; [.3D65.0020.0002] # OGHAM LETTER OR
+1697 ; [.3D66.0020.0002] # OGHAM LETTER UILLEANN
+1698 ; [.3D67.0020.0002] # OGHAM LETTER IFIN
+1699 ; [.3D68.0020.0002] # OGHAM LETTER EAMHANCHOLL
+169A ; [.3D69.0020.0002] # OGHAM LETTER PEITH
+16A0 ; [.3D6A.0020.0002] # RUNIC LETTER FEHU FEOH FE F
+16A1 ; [.3D6A.0020.0004][.0000.0118.0004] # RUNIC LETTER V
+16A2 ; [.3D6B.0020.0002] # RUNIC LETTER URUZ UR U
+16A4 ; [.3D6B.0020.0004][.0000.0118.0004] # RUNIC LETTER Y
+16A5 ; [.3D6B.0020.0004][.0000.0119.0004] # RUNIC LETTER W
+16A6 ; [.3D6C.0020.0002] # RUNIC LETTER THURISAZ THURS THORN
+16A7 ; [.3D6C.0020.0004][.0000.0118.0004] # RUNIC LETTER ETH
+16F0 ; [.3D6C.0020.0004][.3D6C.0020.0004] # RUNIC BELGTHOR SYMBOL
+16A8 ; [.3D6D.0020.0002] # RUNIC LETTER ANSUZ A
+16A9 ; [.3D6D.0020.0004][.0000.0118.0004] # RUNIC LETTER OS O
+16AC ; [.3D6D.0020.0004][.0000.0119.0004] # RUNIC LETTER LONG-BRANCH-OSS O
+16AD ; [.3D6D.0020.0004][.0000.011A.0004] # RUNIC LETTER SHORT-TWIG-OSS O
+16AE ; [.3D6D.0020.0004][.0000.011B.0004] # RUNIC LETTER O
+16F4 ; [.3D6E.0020.0002] # RUNIC LETTER FRANKS CASKET OS
+16AF ; [.3D6F.0020.0002] # RUNIC LETTER OE
+16B0 ; [.3D70.0020.0002] # RUNIC LETTER ON
+16B1 ; [.3D71.0020.0002] # RUNIC LETTER RAIDO RAD REID R
+16B2 ; [.3D72.0020.0002] # RUNIC LETTER KAUNA
+16B3 ; [.3D72.0020.0004][.0000.0118.0004] # RUNIC LETTER CEN
+16B4 ; [.3D72.0020.0004][.0000.0119.0004] # RUNIC LETTER KAUN K
+16B5 ; [.3D72.0020.0004][.0000.011A.0004] # RUNIC LETTER G
+16B6 ; [.3D72.0020.0004][.0000.011B.0004] # RUNIC LETTER ENG
+16F1 ; [.3D73.0020.0002] # RUNIC LETTER K
+16B7 ; [.3D74.0020.0002] # RUNIC LETTER GEBO GYFU G
+16B9 ; [.3D75.0020.0002] # RUNIC LETTER WUNJO WYNN W
+16E9 ; [.3D75.0020.0004][.0000.0118.0004] # RUNIC LETTER Q
+16BA ; [.3D76.0020.0002] # RUNIC LETTER HAGLAZ H
+16BB ; [.3D76.0020.0004][.0000.0118.0004] # RUNIC LETTER HAEGL H
+16BC ; [.3D76.0020.0004][.0000.0119.0004] # RUNIC LETTER LONG-BRANCH-HAGALL H
+16BD ; [.3D76.0020.0004][.0000.011A.0004] # RUNIC LETTER SHORT-TWIG-HAGALL H
+16BE ; [.3D77.0020.0002] # RUNIC LETTER NAUDIZ NYD NAUD N
+16BF ; [.3D77.0020.0004][.0000.0118.0004] # RUNIC LETTER SHORT-TWIG-NAUD N
+16C0 ; [.3D77.0020.0004][.0000.0119.0004] # RUNIC LETTER DOTTED-N
+16C1 ; [.3D78.0020.0002] # RUNIC LETTER ISAZ IS ISS I
+16C2 ; [.3D78.0020.0004][.0000.0118.0004] # RUNIC LETTER E
+16F5 ; [.3D79.0020.0002] # RUNIC LETTER FRANKS CASKET IS
+16C3 ; [.3D7A.0020.0002] # RUNIC LETTER JERAN J
+16C4 ; [.3D7A.0020.0004][.0000.0118.0004] # RUNIC LETTER GER
+16C5 ; [.3D7B.0020.0002] # RUNIC LETTER LONG-BRANCH-AR AE
+16C6 ; [.3D7B.0020.0004][.0000.0118.0004] # RUNIC LETTER SHORT-TWIG-AR A
+16EE ; [.3D7B.0020.0004][.3D86.0020.0004] # RUNIC ARLAUG SYMBOL
+16C7 ; [.3D7C.0020.0002] # RUNIC LETTER IWAZ EOH
+16C8 ; [.3D7D.0020.0002] # RUNIC LETTER PERTHO PEORTH P
+16D5 ; [.3D7D.0020.0004][.0000.0118.0004] # RUNIC LETTER OPEN-P
+16C9 ; [.3D7E.0020.0002] # RUNIC LETTER ALGIZ EOLHX
+16CA ; [.3D7F.0020.0002] # RUNIC LETTER SOWILO S
+16CB ; [.3D7F.0020.0004][.0000.0118.0004] # RUNIC LETTER SIGEL LONG-BRANCH-SOL S
+16EA ; [.3D7F.0020.0004][.0000.0119.0004] # RUNIC LETTER X
+16CC ; [.3D7F.0020.0004][.0000.011A.0004] # RUNIC LETTER SHORT-TWIG-SOL S
+16CD ; [.3D7F.0020.0004][.0000.011B.0004] # RUNIC LETTER C
+16CE ; [.3D7F.0020.0004][.0000.011C.0004] # RUNIC LETTER Z
+16F2 ; [.3D80.0020.0002] # RUNIC LETTER SH
+16CF ; [.3D81.0020.0002] # RUNIC LETTER TIWAZ TIR TYR T
+16D0 ; [.3D81.0020.0004][.0000.0118.0004] # RUNIC LETTER SHORT-TWIG-TYR T
+16D1 ; [.3D81.0020.0004][.0000.0119.0004] # RUNIC LETTER D
+16D2 ; [.3D82.0020.0002] # RUNIC LETTER BERKANAN BEORC BJARKAN B
+16D3 ; [.3D82.0020.0004][.0000.0118.0004] # RUNIC LETTER SHORT-TWIG-BJARKAN B
+16D4 ; [.3D82.0020.0004][.0000.0119.0004] # RUNIC LETTER DOTTED-P
+16D6 ; [.3D83.0020.0002] # RUNIC LETTER EHWAZ EH E
+16F6 ; [.3D84.0020.0002] # RUNIC LETTER FRANKS CASKET EH
+16D7 ; [.3D85.0020.0002] # RUNIC LETTER MANNAZ MAN M
+16D8 ; [.3D85.0020.0004][.0000.0118.0004] # RUNIC LETTER LONG-BRANCH-MADR M
+16D9 ; [.3D85.0020.0004][.0000.0119.0004] # RUNIC LETTER SHORT-TWIG-MADR M
+16EF ; [.3D85.0020.0004][.0000.0118.0004][.3D85.0020.0004][.0000.0118.0004] # RUNIC TVIMADUR SYMBOL
+16DA ; [.3D86.0020.0002] # RUNIC LETTER LAUKAZ LAGU LOGR L
+16DB ; [.3D86.0020.0004][.0000.0118.0004] # RUNIC LETTER DOTTED-L
+16DC ; [.3D87.0020.0002] # RUNIC LETTER INGWAZ
+16DD ; [.3D87.0020.0004][.0000.0118.0004] # RUNIC LETTER ING
+16DE ; [.3D88.0020.0002] # RUNIC LETTER DAGAZ DAEG D
+16DF ; [.3D89.0020.0002] # RUNIC LETTER OTHALAN ETHEL O
+16F3 ; [.3D8A.0020.0002] # RUNIC LETTER OO
+16AA ; [.3D8B.0020.0002] # RUNIC LETTER AC A
+16F7 ; [.3D8C.0020.0002] # RUNIC LETTER FRANKS CASKET AC
+16AB ; [.3D8D.0020.0002] # RUNIC LETTER AESC
+16F8 ; [.3D8E.0020.0002] # RUNIC LETTER FRANKS CASKET AESC
+16A3 ; [.3D8F.0020.0002] # RUNIC LETTER YR
+16E0 ; [.3D90.0020.0002] # RUNIC LETTER EAR
+16E3 ; [.3D91.0020.0002] # RUNIC LETTER CALC
+16B8 ; [.3D92.0020.0002] # RUNIC LETTER GAR
+16E4 ; [.3D93.0020.0002] # RUNIC LETTER CEALC
+16E1 ; [.3D94.0020.0002] # RUNIC LETTER IOR
+16E2 ; [.3D95.0020.0002] # RUNIC LETTER CWEORTH
+16E5 ; [.3D96.0020.0002] # RUNIC LETTER STAN
+16E6 ; [.3D97.0020.0002] # RUNIC LETTER LONG-BRANCH-YR
+16E7 ; [.3D97.0020.0004][.0000.0118.0004] # RUNIC LETTER SHORT-TWIG-YR
+16E8 ; [.3D97.0020.0004][.0000.0119.0004] # RUNIC LETTER ICELANDIC-YR
+10CC0 ; [.3D98.0020.0002] # OLD HUNGARIAN SMALL LETTER A
+10C80 ; [.3D98.0020.0008] # OLD HUNGARIAN CAPITAL LETTER A
+10CC1 ; [.3D98.0020.0004][.0000.0118.0004] # OLD HUNGARIAN SMALL LETTER AA
+10C81 ; [.3D98.0020.000A][.0000.0118.0004] # OLD HUNGARIAN CAPITAL LETTER AA
+10CC2 ; [.3D99.0020.0002] # OLD HUNGARIAN SMALL LETTER EB
+10C82 ; [.3D99.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EB
+10CC3 ; [.3D9A.0020.0002] # OLD HUNGARIAN SMALL LETTER AMB
+10C83 ; [.3D9A.0020.0008] # OLD HUNGARIAN CAPITAL LETTER AMB
+10CC4 ; [.3D9B.0020.0002] # OLD HUNGARIAN SMALL LETTER EC
+10C84 ; [.3D9B.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EC
+10CC5 ; [.3D9C.0020.0002] # OLD HUNGARIAN SMALL LETTER ENC
+10C85 ; [.3D9C.0020.0008] # OLD HUNGARIAN CAPITAL LETTER ENC
+10CC6 ; [.3D9D.0020.0002] # OLD HUNGARIAN SMALL LETTER ECS
+10C86 ; [.3D9D.0020.0008] # OLD HUNGARIAN CAPITAL LETTER ECS
+10CC7 ; [.3D9E.0020.0002] # OLD HUNGARIAN SMALL LETTER ED
+10C87 ; [.3D9E.0020.0008] # OLD HUNGARIAN CAPITAL LETTER ED
+10CC8 ; [.3D9F.0020.0002] # OLD HUNGARIAN SMALL LETTER AND
+10C88 ; [.3D9F.0020.0008] # OLD HUNGARIAN CAPITAL LETTER AND
+10CC9 ; [.3DA0.0020.0002] # OLD HUNGARIAN SMALL LETTER E
+10C89 ; [.3DA0.0020.0008] # OLD HUNGARIAN CAPITAL LETTER E
+10CCA ; [.3DA0.0020.0004][.0000.0118.0004] # OLD HUNGARIAN SMALL LETTER CLOSE E
+10C8A ; [.3DA0.0020.000A][.0000.0118.0004] # OLD HUNGARIAN CAPITAL LETTER CLOSE E
+10CCB ; [.3DA0.0020.0004][.0000.0119.0004] # OLD HUNGARIAN SMALL LETTER EE
+10C8B ; [.3DA0.0020.000A][.0000.0119.0004] # OLD HUNGARIAN CAPITAL LETTER EE
+10CCC ; [.3DA1.0020.0002] # OLD HUNGARIAN SMALL LETTER EF
+10C8C ; [.3DA1.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EF
+10CCD ; [.3DA2.0020.0002] # OLD HUNGARIAN SMALL LETTER EG
+10C8D ; [.3DA2.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EG
+10CCE ; [.3DA3.0020.0002] # OLD HUNGARIAN SMALL LETTER EGY
+10C8E ; [.3DA3.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EGY
+10CCF ; [.3DA4.0020.0002] # OLD HUNGARIAN SMALL LETTER EH
+10C8F ; [.3DA4.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EH
+10CD0 ; [.3DA5.0020.0002] # OLD HUNGARIAN SMALL LETTER I
+10C90 ; [.3DA5.0020.0008] # OLD HUNGARIAN CAPITAL LETTER I
+10CD1 ; [.3DA5.0020.0004][.0000.0118.0004] # OLD HUNGARIAN SMALL LETTER II
+10C91 ; [.3DA5.0020.000A][.0000.0118.0004] # OLD HUNGARIAN CAPITAL LETTER II
+10CD2 ; [.3DA6.0020.0002] # OLD HUNGARIAN SMALL LETTER EJ
+10C92 ; [.3DA6.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EJ
+10CD3 ; [.3DA7.0020.0002] # OLD HUNGARIAN SMALL LETTER EK
+10C93 ; [.3DA7.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EK
+10CD4 ; [.3DA8.0020.0002] # OLD HUNGARIAN SMALL LETTER AK
+10C94 ; [.3DA8.0020.0008] # OLD HUNGARIAN CAPITAL LETTER AK
+10CD5 ; [.3DA9.0020.0002] # OLD HUNGARIAN SMALL LETTER UNK
+10C95 ; [.3DA9.0020.0008] # OLD HUNGARIAN CAPITAL LETTER UNK
+10CD6 ; [.3DAA.0020.0002] # OLD HUNGARIAN SMALL LETTER EL
+10C96 ; [.3DAA.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EL
+10CD7 ; [.3DAB.0020.0002] # OLD HUNGARIAN SMALL LETTER ELY
+10C97 ; [.3DAB.0020.0008] # OLD HUNGARIAN CAPITAL LETTER ELY
+10CD8 ; [.3DAC.0020.0002] # OLD HUNGARIAN SMALL LETTER EM
+10C98 ; [.3DAC.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EM
+10CD9 ; [.3DAD.0020.0002] # OLD HUNGARIAN SMALL LETTER EN
+10C99 ; [.3DAD.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EN
+10CDA ; [.3DAE.0020.0002] # OLD HUNGARIAN SMALL LETTER ENY
+10C9A ; [.3DAE.0020.0008] # OLD HUNGARIAN CAPITAL LETTER ENY
+10CDB ; [.3DAF.0020.0002] # OLD HUNGARIAN SMALL LETTER O
+10C9B ; [.3DAF.0020.0008] # OLD HUNGARIAN CAPITAL LETTER O
+10CDC ; [.3DAF.0020.0004][.0000.0118.0004] # OLD HUNGARIAN SMALL LETTER OO
+10C9C ; [.3DAF.0020.000A][.0000.0118.0004] # OLD HUNGARIAN CAPITAL LETTER OO
+10CDD ; [.3DB0.0020.0002] # OLD HUNGARIAN SMALL LETTER NIKOLSBURG OE
+10C9D ; [.3DB0.0020.0008] # OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG OE
+10CDE ; [.3DB0.0020.0004][.0000.0118.0004] # OLD HUNGARIAN SMALL LETTER RUDIMENTA OE
+10C9E ; [.3DB0.0020.000A][.0000.0118.0004] # OLD HUNGARIAN CAPITAL LETTER RUDIMENTA OE
+10CDF ; [.3DB0.0020.0004][.0000.0119.0004] # OLD HUNGARIAN SMALL LETTER OEE
+10C9F ; [.3DB0.0020.000A][.0000.0119.0004] # OLD HUNGARIAN CAPITAL LETTER OEE
+10CE0 ; [.3DB1.0020.0002] # OLD HUNGARIAN SMALL LETTER EP
+10CA0 ; [.3DB1.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EP
+10CE1 ; [.3DB2.0020.0002] # OLD HUNGARIAN SMALL LETTER EMP
+10CA1 ; [.3DB2.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EMP
+10CE2 ; [.3DB3.0020.0002] # OLD HUNGARIAN SMALL LETTER ER
+10CA2 ; [.3DB3.0020.0008] # OLD HUNGARIAN CAPITAL LETTER ER
+10CE3 ; [.3DB3.0020.0004][.0000.0118.0004] # OLD HUNGARIAN SMALL LETTER SHORT ER
+10CA3 ; [.3DB3.0020.000A][.0000.0118.0004] # OLD HUNGARIAN CAPITAL LETTER SHORT ER
+10CE4 ; [.3DB4.0020.0002] # OLD HUNGARIAN SMALL LETTER ES
+10CA4 ; [.3DB4.0020.0008] # OLD HUNGARIAN CAPITAL LETTER ES
+10CE5 ; [.3DB5.0020.0002] # OLD HUNGARIAN SMALL LETTER ESZ
+10CA5 ; [.3DB5.0020.0008] # OLD HUNGARIAN CAPITAL LETTER ESZ
+10CE6 ; [.3DB6.0020.0002] # OLD HUNGARIAN SMALL LETTER ET
+10CA6 ; [.3DB6.0020.0008] # OLD HUNGARIAN CAPITAL LETTER ET
+10CE7 ; [.3DB7.0020.0002] # OLD HUNGARIAN SMALL LETTER ENT
+10CA7 ; [.3DB7.0020.0008] # OLD HUNGARIAN CAPITAL LETTER ENT
+10CE8 ; [.3DB8.0020.0002] # OLD HUNGARIAN SMALL LETTER ETY
+10CA8 ; [.3DB8.0020.0008] # OLD HUNGARIAN CAPITAL LETTER ETY
+10CE9 ; [.3DB9.0020.0002] # OLD HUNGARIAN SMALL LETTER ECH
+10CA9 ; [.3DB9.0020.0008] # OLD HUNGARIAN CAPITAL LETTER ECH
+10CEA ; [.3DBA.0020.0002] # OLD HUNGARIAN SMALL LETTER U
+10CAA ; [.3DBA.0020.0008] # OLD HUNGARIAN CAPITAL LETTER U
+10CEB ; [.3DBA.0020.0004][.0000.0118.0004] # OLD HUNGARIAN SMALL LETTER UU
+10CAB ; [.3DBA.0020.000A][.0000.0118.0004] # OLD HUNGARIAN CAPITAL LETTER UU
+10CEC ; [.3DBB.0020.0002] # OLD HUNGARIAN SMALL LETTER NIKOLSBURG UE
+10CAC ; [.3DBB.0020.0008] # OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG UE
+10CED ; [.3DBB.0020.0004][.0000.0118.0004] # OLD HUNGARIAN SMALL LETTER RUDIMENTA UE
+10CAD ; [.3DBB.0020.000A][.0000.0118.0004] # OLD HUNGARIAN CAPITAL LETTER RUDIMENTA UE
+10CEE ; [.3DBC.0020.0002] # OLD HUNGARIAN SMALL LETTER EV
+10CAE ; [.3DBC.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EV
+10CEF ; [.3DBD.0020.0002] # OLD HUNGARIAN SMALL LETTER EZ
+10CAF ; [.3DBD.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EZ
+10CF0 ; [.3DBE.0020.0002] # OLD HUNGARIAN SMALL LETTER EZS
+10CB0 ; [.3DBE.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EZS
+10CF1 ; [.3DBF.0020.0002] # OLD HUNGARIAN SMALL LETTER ENT-SHAPED SIGN
+10CB1 ; [.3DBF.0020.0008] # OLD HUNGARIAN CAPITAL LETTER ENT-SHAPED SIGN
+10CF2 ; [.3DC0.0020.0002] # OLD HUNGARIAN SMALL LETTER US
+10CB2 ; [.3DC0.0020.0008] # OLD HUNGARIAN CAPITAL LETTER US
+10C00 ; [.3DC1.0020.0002] # OLD TURKIC LETTER ORKHON A
+10C01 ; [.3DC1.0020.0004][.0000.0118.0004] # OLD TURKIC LETTER YENISEI A
+10C02 ; [.3DC2.0020.0002] # OLD TURKIC LETTER YENISEI AE
+10C03 ; [.3DC3.0020.0002] # OLD TURKIC LETTER ORKHON I
+10C04 ; [.3DC3.0020.0004][.0000.0118.0004] # OLD TURKIC LETTER YENISEI I
+10C05 ; [.3DC4.0020.0002] # OLD TURKIC LETTER YENISEI E
+10C06 ; [.3DC5.0020.0002] # OLD TURKIC LETTER ORKHON O
+10C07 ; [.3DC6.0020.0002] # OLD TURKIC LETTER ORKHON OE
+10C08 ; [.3DC6.0020.0004][.0000.0118.0004] # OLD TURKIC LETTER YENISEI OE
+10C09 ; [.3DC7.0020.0002] # OLD TURKIC LETTER ORKHON AB
+10C0A ; [.3DC7.0020.0004][.0000.0118.0004] # OLD TURKIC LETTER YENISEI AB
+10C0B ; [.3DC8.0020.0002] # OLD TURKIC LETTER ORKHON AEB
+10C0C ; [.3DC8.0020.0004][.0000.0118.0004] # OLD TURKIC LETTER YENISEI AEB
+10C0D ; [.3DC9.0020.0002] # OLD TURKIC LETTER ORKHON AG
+10C0E ; [.3DC9.0020.0004][.0000.0118.0004] # OLD TURKIC LETTER YENISEI AG
+10C0F ; [.3DCA.0020.0002] # OLD TURKIC LETTER ORKHON AEG
+10C10 ; [.3DCA.0020.0004][.0000.0118.0004] # OLD TURKIC LETTER YENISEI AEG
+10C11 ; [.3DCB.0020.0002] # OLD TURKIC LETTER ORKHON AD
+10C12 ; [.3DCB.0020.0004][.0000.0118.0004] # OLD TURKIC LETTER YENISEI AD
+10C13 ; [.3DCC.0020.0002] # OLD TURKIC LETTER ORKHON AED
+10C14 ; [.3DCD.0020.0002] # OLD TURKIC LETTER ORKHON EZ
+10C15 ; [.3DCD.0020.0004][.0000.0118.0004] # OLD TURKIC LETTER YENISEI EZ
+10C16 ; [.3DCE.0020.0002] # OLD TURKIC LETTER ORKHON AY
+10C17 ; [.3DCE.0020.0004][.0000.0118.0004] # OLD TURKIC LETTER YENISEI AY
+10C18 ; [.3DCF.0020.0002] # OLD TURKIC LETTER ORKHON AEY
+10C19 ; [.3DCF.0020.0004][.0000.0118.0004] # OLD TURKIC LETTER YENISEI AEY
+10C1A ; [.3DD0.0020.0002] # OLD TURKIC LETTER ORKHON AEK
+10C1B ; [.3DD0.0020.0004][.0000.0118.0004] # OLD TURKIC LETTER YENISEI AEK
+10C1C ; [.3DD1.0020.0002] # OLD TURKIC LETTER ORKHON OEK
+10C1D ; [.3DD1.0020.0004][.0000.0118.0004] # OLD TURKIC LETTER YENISEI OEK
+10C1E ; [.3DD2.0020.0002] # OLD TURKIC LETTER ORKHON AL
+10C1F ; [.3DD2.0020.0004][.0000.0118.0004] # OLD TURKIC LETTER YENISEI AL
+10C20 ; [.3DD3.0020.0002] # OLD TURKIC LETTER ORKHON AEL
+10C21 ; [.3DD4.0020.0002] # OLD TURKIC LETTER ORKHON ELT
+10C22 ; [.3DD5.0020.0002] # OLD TURKIC LETTER ORKHON EM
+10C23 ; [.3DD6.0020.0002] # OLD TURKIC LETTER ORKHON AN
+10C24 ; [.3DD7.0020.0002] # OLD TURKIC LETTER ORKHON AEN
+10C25 ; [.3DD7.0020.0004][.0000.0118.0004] # OLD TURKIC LETTER YENISEI AEN
+10C26 ; [.3DD8.0020.0002] # OLD TURKIC LETTER ORKHON ENT
+10C27 ; [.3DD8.0020.0004][.0000.0118.0004] # OLD TURKIC LETTER YENISEI ENT
+10C28 ; [.3DD9.0020.0002] # OLD TURKIC LETTER ORKHON ENC
+10C29 ; [.3DD9.0020.0004][.0000.0118.0004] # OLD TURKIC LETTER YENISEI ENC
+10C2A ; [.3DDA.0020.0002] # OLD TURKIC LETTER ORKHON ENY
+10C2B ; [.3DDA.0020.0004][.0000.0118.0004] # OLD TURKIC LETTER YENISEI ENY
+10C2C ; [.3DDB.0020.0002] # OLD TURKIC LETTER YENISEI ANG
+10C2D ; [.3DDC.0020.0002] # OLD TURKIC LETTER ORKHON ENG
+10C2E ; [.3DDC.0020.0004][.0000.0118.0004] # OLD TURKIC LETTER YENISEI AENG
+10C2F ; [.3DDD.0020.0002] # OLD TURKIC LETTER ORKHON EP
+10C30 ; [.3DDE.0020.0002] # OLD TURKIC LETTER ORKHON OP
+10C31 ; [.3DDF.0020.0002] # OLD TURKIC LETTER ORKHON IC
+10C32 ; [.3DE0.0020.0002] # OLD TURKIC LETTER ORKHON EC
+10C33 ; [.3DE0.0020.0004][.0000.0118.0004] # OLD TURKIC LETTER YENISEI EC
+10C34 ; [.3DE1.0020.0002] # OLD TURKIC LETTER ORKHON AQ
+10C35 ; [.3DE1.0020.0004][.0000.0118.0004] # OLD TURKIC LETTER YENISEI AQ
+10C36 ; [.3DE2.0020.0002] # OLD TURKIC LETTER ORKHON IQ
+10C37 ; [.3DE2.0020.0004][.0000.0118.0004] # OLD TURKIC LETTER YENISEI IQ
+10C38 ; [.3DE3.0020.0002] # OLD TURKIC LETTER ORKHON OQ
+10C39 ; [.3DE3.0020.0004][.0000.0118.0004] # OLD TURKIC LETTER YENISEI OQ
+10C3A ; [.3DE4.0020.0002] # OLD TURKIC LETTER ORKHON AR
+10C3B ; [.3DE4.0020.0004][.0000.0118.0004] # OLD TURKIC LETTER YENISEI AR
+10C3C ; [.3DE5.0020.0002] # OLD TURKIC LETTER ORKHON AER
+10C3D ; [.3DE6.0020.0002] # OLD TURKIC LETTER ORKHON AS
+10C3E ; [.3DE7.0020.0002] # OLD TURKIC LETTER ORKHON AES
+10C3F ; [.3DE8.0020.0002] # OLD TURKIC LETTER ORKHON ASH
+10C40 ; [.3DE8.0020.0004][.0000.0118.0004] # OLD TURKIC LETTER YENISEI ASH
+10C41 ; [.3DE9.0020.0002] # OLD TURKIC LETTER ORKHON ESH
+10C42 ; [.3DE9.0020.0004][.0000.0118.0004] # OLD TURKIC LETTER YENISEI ESH
+10C43 ; [.3DEA.0020.0002] # OLD TURKIC LETTER ORKHON AT
+10C44 ; [.3DEA.0020.0004][.0000.0118.0004] # OLD TURKIC LETTER YENISEI AT
+10C45 ; [.3DEB.0020.0002] # OLD TURKIC LETTER ORKHON AET
+10C46 ; [.3DEB.0020.0004][.0000.0118.0004] # OLD TURKIC LETTER YENISEI AET
+10C47 ; [.3DEC.0020.0002] # OLD TURKIC LETTER ORKHON OT
+10C48 ; [.3DED.0020.0002] # OLD TURKIC LETTER ORKHON BASH
+A500 ; [.3DEE.0020.0002] # VAI SYLLABLE EE
+A501 ; [.3DEF.0020.0002] # VAI SYLLABLE EEN
+A502 ; [.3DF0.0020.0002] # VAI SYLLABLE HEE
+A503 ; [.3DF1.0020.0002] # VAI SYLLABLE WEE
+A504 ; [.3DF2.0020.0002] # VAI SYLLABLE WEEN
+A505 ; [.3DF3.0020.0002] # VAI SYLLABLE PEE
+A506 ; [.3DF4.0020.0002] # VAI SYLLABLE BHEE
+A507 ; [.3DF5.0020.0002] # VAI SYLLABLE BEE
+A508 ; [.3DF6.0020.0002] # VAI SYLLABLE MBEE
+A509 ; [.3DF7.0020.0002] # VAI SYLLABLE KPEE
+A50A ; [.3DF8.0020.0002] # VAI SYLLABLE MGBEE
+A50B ; [.3DF9.0020.0002] # VAI SYLLABLE GBEE
+A50C ; [.3DFA.0020.0002] # VAI SYLLABLE FEE
+A613 ; [.3DFA.0020.0004][.3EF9.0020.0004] # VAI SYMBOL FEENG
+A50D ; [.3DFB.0020.0002] # VAI SYLLABLE VEE
+A50E ; [.3DFC.0020.0002] # VAI SYLLABLE TEE
+A50F ; [.3DFD.0020.0002] # VAI SYLLABLE THEE
+A510 ; [.3DFE.0020.0002] # VAI SYLLABLE DHEE
+A511 ; [.3DFF.0020.0002] # VAI SYLLABLE DHHEE
+A512 ; [.3E00.0020.0002] # VAI SYLLABLE LEE
+A513 ; [.3E01.0020.0002] # VAI SYLLABLE REE
+A514 ; [.3E02.0020.0002] # VAI SYLLABLE DEE
+A515 ; [.3E03.0020.0002] # VAI SYLLABLE NDEE
+A516 ; [.3E04.0020.0002] # VAI SYLLABLE SEE
+A517 ; [.3E05.0020.0002] # VAI SYLLABLE SHEE
+A518 ; [.3E06.0020.0002] # VAI SYLLABLE ZEE
+A519 ; [.3E07.0020.0002] # VAI SYLLABLE ZHEE
+A51A ; [.3E08.0020.0002] # VAI SYLLABLE CEE
+A51B ; [.3E09.0020.0002] # VAI SYLLABLE JEE
+A51C ; [.3E0A.0020.0002] # VAI SYLLABLE NJEE
+A51D ; [.3E0B.0020.0002] # VAI SYLLABLE YEE
+A51E ; [.3E0C.0020.0002] # VAI SYLLABLE KEE
+A614 ; [.3E0C.0020.0004][.3EF9.0020.0004] # VAI SYMBOL KEENG
+A51F ; [.3E0D.0020.0002] # VAI SYLLABLE NGGEE
+A520 ; [.3E0E.0020.0002] # VAI SYLLABLE GEE
+A521 ; [.3E0F.0020.0002] # VAI SYLLABLE MEE
+A522 ; [.3E10.0020.0002] # VAI SYLLABLE NEE
+A523 ; [.3E11.0020.0002] # VAI SYLLABLE NYEE
+A524 ; [.3E12.0020.0002] # VAI SYLLABLE I
+A525 ; [.3E13.0020.0002] # VAI SYLLABLE IN
+A526 ; [.3E14.0020.0002] # VAI SYLLABLE HI
+A527 ; [.3E15.0020.0002] # VAI SYLLABLE HIN
+A528 ; [.3E16.0020.0002] # VAI SYLLABLE WI
+A529 ; [.3E17.0020.0002] # VAI SYLLABLE WIN
+A52A ; [.3E18.0020.0002] # VAI SYLLABLE PI
+A52B ; [.3E19.0020.0002] # VAI SYLLABLE BHI
+A52C ; [.3E1A.0020.0002] # VAI SYLLABLE BI
+A52D ; [.3E1B.0020.0002] # VAI SYLLABLE MBI
+A52E ; [.3E1C.0020.0002] # VAI SYLLABLE KPI
+A52F ; [.3E1D.0020.0002] # VAI SYLLABLE MGBI
+A530 ; [.3E1E.0020.0002] # VAI SYLLABLE GBI
+A531 ; [.3E1F.0020.0002] # VAI SYLLABLE FI
+A532 ; [.3E20.0020.0002] # VAI SYLLABLE VI
+A533 ; [.3E21.0020.0002] # VAI SYLLABLE TI
+A615 ; [.3E21.0020.0004][.3EF9.0020.0004] # VAI SYMBOL TING
+A534 ; [.3E22.0020.0002] # VAI SYLLABLE THI
+A535 ; [.3E23.0020.0002] # VAI SYLLABLE DHI
+A536 ; [.3E24.0020.0002] # VAI SYLLABLE DHHI
+A537 ; [.3E25.0020.0002] # VAI SYLLABLE LI
+A538 ; [.3E26.0020.0002] # VAI SYLLABLE RI
+A539 ; [.3E27.0020.0002] # VAI SYLLABLE DI
+A53A ; [.3E28.0020.0002] # VAI SYLLABLE NDI
+A53B ; [.3E29.0020.0002] # VAI SYLLABLE SI
+A53C ; [.3E2A.0020.0002] # VAI SYLLABLE SHI
+A53D ; [.3E2B.0020.0002] # VAI SYLLABLE ZI
+A53E ; [.3E2C.0020.0002] # VAI SYLLABLE ZHI
+A53F ; [.3E2D.0020.0002] # VAI SYLLABLE CI
+A540 ; [.3E2E.0020.0002] # VAI SYLLABLE JI
+A541 ; [.3E2F.0020.0002] # VAI SYLLABLE NJI
+A542 ; [.3E30.0020.0002] # VAI SYLLABLE YI
+A543 ; [.3E31.0020.0002] # VAI SYLLABLE KI
+A544 ; [.3E32.0020.0002] # VAI SYLLABLE NGGI
+A545 ; [.3E33.0020.0002] # VAI SYLLABLE GI
+A546 ; [.3E34.0020.0002] # VAI SYLLABLE MI
+A547 ; [.3E35.0020.0002] # VAI SYLLABLE NI
+A616 ; [.3E35.0020.0004][.3EFA.0020.0004] # VAI SYMBOL NII
+A548 ; [.3E36.0020.0002] # VAI SYLLABLE NYI
+A549 ; [.3E37.0020.0002] # VAI SYLLABLE A
+A54A ; [.3E38.0020.0002] # VAI SYLLABLE AN
+A54B ; [.3E39.0020.0002] # VAI SYLLABLE NGAN
+A54C ; [.3E3A.0020.0002] # VAI SYLLABLE HA
+A54D ; [.3E3B.0020.0002] # VAI SYLLABLE HAN
+A54E ; [.3E3C.0020.0002] # VAI SYLLABLE WA
+A54F ; [.3E3D.0020.0002] # VAI SYLLABLE WAN
+A550 ; [.3E3E.0020.0002] # VAI SYLLABLE PA
+A551 ; [.3E3F.0020.0002] # VAI SYLLABLE BHA
+A552 ; [.3E40.0020.0002] # VAI SYLLABLE BA
+A617 ; [.3E40.0020.0004][.3EF9.0020.0004] # VAI SYMBOL BANG
+A553 ; [.3E41.0020.0002] # VAI SYLLABLE MBA
+A554 ; [.3E42.0020.0002] # VAI SYLLABLE KPA
+A555 ; [.3E43.0020.0002] # VAI SYLLABLE KPAN
+A556 ; [.3E44.0020.0002] # VAI SYLLABLE MGBA
+A557 ; [.3E45.0020.0002] # VAI SYLLABLE GBA
+A558 ; [.3E46.0020.0002] # VAI SYLLABLE FA
+A610 ; [.3E46.0020.0004] # VAI SYLLABLE NDOLE FA
+A618 ; [.3E46.0020.0004][.3EFA.0020.0004] # VAI SYMBOL FAA
+A559 ; [.3E47.0020.0002] # VAI SYLLABLE VA
+A55A ; [.3E48.0020.0002] # VAI SYLLABLE TA
+A619 ; [.3E48.0020.0004][.3EFA.0020.0004] # VAI SYMBOL TAA
+A55B ; [.3E49.0020.0002] # VAI SYLLABLE THA
+A55C ; [.3E4A.0020.0002] # VAI SYLLABLE DHA
+A55D ; [.3E4B.0020.0002] # VAI SYLLABLE DHHA
+A55E ; [.3E4C.0020.0002] # VAI SYLLABLE LA
+A55F ; [.3E4D.0020.0002] # VAI SYLLABLE RA
+A560 ; [.3E4E.0020.0002] # VAI SYLLABLE DA
+A61A ; [.3E4E.0020.0004][.3EF9.0020.0004] # VAI SYMBOL DANG
+A561 ; [.3E4F.0020.0002] # VAI SYLLABLE NDA
+A562 ; [.3E50.0020.0002] # VAI SYLLABLE SA
+A563 ; [.3E51.0020.0002] # VAI SYLLABLE SHA
+A564 ; [.3E52.0020.0002] # VAI SYLLABLE ZA
+A565 ; [.3E53.0020.0002] # VAI SYLLABLE ZHA
+A566 ; [.3E54.0020.0002] # VAI SYLLABLE CA
+A567 ; [.3E55.0020.0002] # VAI SYLLABLE JA
+A568 ; [.3E56.0020.0002] # VAI SYLLABLE NJA
+A569 ; [.3E57.0020.0002] # VAI SYLLABLE YA
+A56A ; [.3E58.0020.0002] # VAI SYLLABLE KA
+A611 ; [.3E58.0020.0004] # VAI SYLLABLE NDOLE KA
+A56B ; [.3E59.0020.0002] # VAI SYLLABLE KAN
+A56C ; [.3E5A.0020.0002] # VAI SYLLABLE NGGA
+A56D ; [.3E5B.0020.0002] # VAI SYLLABLE GA
+A56E ; [.3E5C.0020.0002] # VAI SYLLABLE MA
+A62A ; [.3E5C.0020.0004] # VAI SYLLABLE NDOLE MA
+A56F ; [.3E5D.0020.0002] # VAI SYLLABLE NA
+A570 ; [.3E5E.0020.0002] # VAI SYLLABLE NYA
+A571 ; [.3E5F.0020.0002] # VAI SYLLABLE OO
+A572 ; [.3E60.0020.0002] # VAI SYLLABLE OON
+A573 ; [.3E61.0020.0002] # VAI SYLLABLE HOO
+A574 ; [.3E62.0020.0002] # VAI SYLLABLE WOO
+A575 ; [.3E63.0020.0002] # VAI SYLLABLE WOON
+A576 ; [.3E64.0020.0002] # VAI SYLLABLE POO
+A577 ; [.3E65.0020.0002] # VAI SYLLABLE BHOO
+A578 ; [.3E66.0020.0002] # VAI SYLLABLE BOO
+A579 ; [.3E67.0020.0002] # VAI SYLLABLE MBOO
+A57A ; [.3E68.0020.0002] # VAI SYLLABLE KPOO
+A57B ; [.3E69.0020.0002] # VAI SYLLABLE MGBOO
+A57C ; [.3E6A.0020.0002] # VAI SYLLABLE GBOO
+A57D ; [.3E6B.0020.0002] # VAI SYLLABLE FOO
+A57E ; [.3E6C.0020.0002] # VAI SYLLABLE VOO
+A57F ; [.3E6D.0020.0002] # VAI SYLLABLE TOO
+A580 ; [.3E6E.0020.0002] # VAI SYLLABLE THOO
+A581 ; [.3E6F.0020.0002] # VAI SYLLABLE DHOO
+A582 ; [.3E70.0020.0002] # VAI SYLLABLE DHHOO
+A583 ; [.3E71.0020.0002] # VAI SYLLABLE LOO
+A584 ; [.3E72.0020.0002] # VAI SYLLABLE ROO
+A585 ; [.3E73.0020.0002] # VAI SYLLABLE DOO
+A61B ; [.3E73.0020.0004][.3EF9.0020.0004] # VAI SYMBOL DOONG
+A586 ; [.3E74.0020.0002] # VAI SYLLABLE NDOO
+A587 ; [.3E75.0020.0002] # VAI SYLLABLE SOO
+A612 ; [.3E75.0020.0004] # VAI SYLLABLE NDOLE SOO
+A588 ; [.3E76.0020.0002] # VAI SYLLABLE SHOO
+A589 ; [.3E77.0020.0002] # VAI SYLLABLE ZOO
+A58A ; [.3E78.0020.0002] # VAI SYLLABLE ZHOO
+A58B ; [.3E79.0020.0002] # VAI SYLLABLE COO
+A58C ; [.3E7A.0020.0002] # VAI SYLLABLE JOO
+A58D ; [.3E7B.0020.0002] # VAI SYLLABLE NJOO
+A58E ; [.3E7C.0020.0002] # VAI SYLLABLE YOO
+A58F ; [.3E7D.0020.0002] # VAI SYLLABLE KOO
+A590 ; [.3E7E.0020.0002] # VAI SYLLABLE NGGOO
+A591 ; [.3E7F.0020.0002] # VAI SYLLABLE GOO
+A592 ; [.3E80.0020.0002] # VAI SYLLABLE MOO
+A593 ; [.3E81.0020.0002] # VAI SYLLABLE NOO
+A594 ; [.3E82.0020.0002] # VAI SYLLABLE NYOO
+A595 ; [.3E83.0020.0002] # VAI SYLLABLE U
+A596 ; [.3E84.0020.0002] # VAI SYLLABLE UN
+A597 ; [.3E85.0020.0002] # VAI SYLLABLE HU
+A598 ; [.3E86.0020.0002] # VAI SYLLABLE HUN
+A599 ; [.3E87.0020.0002] # VAI SYLLABLE WU
+A59A ; [.3E88.0020.0002] # VAI SYLLABLE WUN
+A59B ; [.3E89.0020.0002] # VAI SYLLABLE PU
+A59C ; [.3E8A.0020.0002] # VAI SYLLABLE BHU
+A59D ; [.3E8B.0020.0002] # VAI SYLLABLE BU
+A59E ; [.3E8C.0020.0002] # VAI SYLLABLE MBU
+A59F ; [.3E8D.0020.0002] # VAI SYLLABLE KPU
+A5A0 ; [.3E8E.0020.0002] # VAI SYLLABLE MGBU
+A5A1 ; [.3E8F.0020.0002] # VAI SYLLABLE GBU
+A5A2 ; [.3E90.0020.0002] # VAI SYLLABLE FU
+A5A3 ; [.3E91.0020.0002] # VAI SYLLABLE VU
+A5A4 ; [.3E92.0020.0002] # VAI SYLLABLE TU
+A5A5 ; [.3E93.0020.0002] # VAI SYLLABLE THU
+A5A6 ; [.3E94.0020.0002] # VAI SYLLABLE DHU
+A5A7 ; [.3E95.0020.0002] # VAI SYLLABLE DHHU
+A5A8 ; [.3E96.0020.0002] # VAI SYLLABLE LU
+A5A9 ; [.3E97.0020.0002] # VAI SYLLABLE RU
+A5AA ; [.3E98.0020.0002] # VAI SYLLABLE DU
+A5AB ; [.3E99.0020.0002] # VAI SYLLABLE NDU
+A5AC ; [.3E9A.0020.0002] # VAI SYLLABLE SU
+A5AD ; [.3E9B.0020.0002] # VAI SYLLABLE SHU
+A5AE ; [.3E9C.0020.0002] # VAI SYLLABLE ZU
+A5AF ; [.3E9D.0020.0002] # VAI SYLLABLE ZHU
+A5B0 ; [.3E9E.0020.0002] # VAI SYLLABLE CU
+A5B1 ; [.3E9F.0020.0002] # VAI SYLLABLE JU
+A5B2 ; [.3EA0.0020.0002] # VAI SYLLABLE NJU
+A5B3 ; [.3EA1.0020.0002] # VAI SYLLABLE YU
+A5B4 ; [.3EA2.0020.0002] # VAI SYLLABLE KU
+A61C ; [.3EA2.0020.0004][.3EF9.0020.0004] # VAI SYMBOL KUNG
+A5B5 ; [.3EA3.0020.0002] # VAI SYLLABLE NGGU
+A5B6 ; [.3EA4.0020.0002] # VAI SYLLABLE GU
+A5B7 ; [.3EA5.0020.0002] # VAI SYLLABLE MU
+A5B8 ; [.3EA6.0020.0002] # VAI SYLLABLE NU
+A5B9 ; [.3EA7.0020.0002] # VAI SYLLABLE NYU
+A5BA ; [.3EA8.0020.0002] # VAI SYLLABLE O
+A5BB ; [.3EA9.0020.0002] # VAI SYLLABLE ON
+A5BC ; [.3EAA.0020.0002] # VAI SYLLABLE NGON
+A5BD ; [.3EAB.0020.0002] # VAI SYLLABLE HO
+A5BE ; [.3EAC.0020.0002] # VAI SYLLABLE HON
+A5BF ; [.3EAD.0020.0002] # VAI SYLLABLE WO
+A5C0 ; [.3EAE.0020.0002] # VAI SYLLABLE WON
+A5C1 ; [.3EAF.0020.0002] # VAI SYLLABLE PO
+A5C2 ; [.3EB0.0020.0002] # VAI SYLLABLE BHO
+A5C3 ; [.3EB1.0020.0002] # VAI SYLLABLE BO
+A5C4 ; [.3EB2.0020.0002] # VAI SYLLABLE MBO
+A5C5 ; [.3EB3.0020.0002] # VAI SYLLABLE KPO
+A5C6 ; [.3EB4.0020.0002] # VAI SYLLABLE MGBO
+A5C7 ; [.3EB5.0020.0002] # VAI SYLLABLE GBO
+A5C8 ; [.3EB6.0020.0002] # VAI SYLLABLE GBON
+A5C9 ; [.3EB7.0020.0002] # VAI SYLLABLE FO
+A5CA ; [.3EB8.0020.0002] # VAI SYLLABLE VO
+A5CB ; [.3EB9.0020.0002] # VAI SYLLABLE TO
+A61D ; [.3EB9.0020.0004][.3EF9.0020.0004] # VAI SYMBOL TONG
+A5CC ; [.3EBA.0020.0002] # VAI SYLLABLE THO
+A5CD ; [.3EBB.0020.0002] # VAI SYLLABLE DHO
+A5CE ; [.3EBC.0020.0002] # VAI SYLLABLE DHHO
+A5CF ; [.3EBD.0020.0002] # VAI SYLLABLE LO
+A5D0 ; [.3EBE.0020.0002] # VAI SYLLABLE RO
+A5D1 ; [.3EBF.0020.0002] # VAI SYLLABLE DO
+A62B ; [.3EBF.0020.0004] # VAI SYLLABLE NDOLE DO
+A61E ; [.3EBF.0020.0004][.3EFA.0020.0004] # VAI SYMBOL DO-O
+A5D2 ; [.3EC0.0020.0002] # VAI SYLLABLE NDO
+A5D3 ; [.3EC1.0020.0002] # VAI SYLLABLE SO
+A5D4 ; [.3EC2.0020.0002] # VAI SYLLABLE SHO
+A5D5 ; [.3EC3.0020.0002] # VAI SYLLABLE ZO
+A5D6 ; [.3EC4.0020.0002] # VAI SYLLABLE ZHO
+A5D7 ; [.3EC5.0020.0002] # VAI SYLLABLE CO
+A5D8 ; [.3EC6.0020.0002] # VAI SYLLABLE JO
+A61F ; [.3EC6.0020.0004][.3EF9.0020.0004] # VAI SYMBOL JONG
+A5D9 ; [.3EC7.0020.0002] # VAI SYLLABLE NJO
+A5DA ; [.3EC8.0020.0002] # VAI SYLLABLE YO
+A5DB ; [.3EC9.0020.0002] # VAI SYLLABLE KO
+A5DC ; [.3ECA.0020.0002] # VAI SYLLABLE NGGO
+A5DD ; [.3ECB.0020.0002] # VAI SYLLABLE GO
+A5DE ; [.3ECC.0020.0002] # VAI SYLLABLE MO
+A5DF ; [.3ECD.0020.0002] # VAI SYLLABLE NO
+A5E0 ; [.3ECE.0020.0002] # VAI SYLLABLE NYO
+A5E1 ; [.3ECF.0020.0002] # VAI SYLLABLE E
+A5E2 ; [.3ED0.0020.0002] # VAI SYLLABLE EN
+A5E3 ; [.3ED1.0020.0002] # VAI SYLLABLE NGEN
+A5E4 ; [.3ED2.0020.0002] # VAI SYLLABLE HE
+A5E5 ; [.3ED3.0020.0002] # VAI SYLLABLE HEN
+A5E6 ; [.3ED4.0020.0002] # VAI SYLLABLE WE
+A5E7 ; [.3ED5.0020.0002] # VAI SYLLABLE WEN
+A5E8 ; [.3ED6.0020.0002] # VAI SYLLABLE PE
+A5E9 ; [.3ED7.0020.0002] # VAI SYLLABLE BHE
+A5EA ; [.3ED8.0020.0002] # VAI SYLLABLE BE
+A5EB ; [.3ED9.0020.0002] # VAI SYLLABLE MBE
+A5EC ; [.3EDA.0020.0002] # VAI SYLLABLE KPE
+A5ED ; [.3EDB.0020.0002] # VAI SYLLABLE KPEN
+A5EE ; [.3EDC.0020.0002] # VAI SYLLABLE MGBE
+A5EF ; [.3EDD.0020.0002] # VAI SYLLABLE GBE
+A5F0 ; [.3EDE.0020.0002] # VAI SYLLABLE GBEN
+A5F1 ; [.3EDF.0020.0002] # VAI SYLLABLE FE
+A5F2 ; [.3EE0.0020.0002] # VAI SYLLABLE VE
+A5F3 ; [.3EE1.0020.0002] # VAI SYLLABLE TE
+A5F4 ; [.3EE2.0020.0002] # VAI SYLLABLE THE
+A5F5 ; [.3EE3.0020.0002] # VAI SYLLABLE DHE
+A5F6 ; [.3EE4.0020.0002] # VAI SYLLABLE DHHE
+A5F7 ; [.3EE5.0020.0002] # VAI SYLLABLE LE
+A5F8 ; [.3EE6.0020.0002] # VAI SYLLABLE RE
+A5F9 ; [.3EE7.0020.0002] # VAI SYLLABLE DE
+A5FA ; [.3EE8.0020.0002] # VAI SYLLABLE NDE
+A5FB ; [.3EE9.0020.0002] # VAI SYLLABLE SE
+A5FC ; [.3EEA.0020.0002] # VAI SYLLABLE SHE
+A5FD ; [.3EEB.0020.0002] # VAI SYLLABLE ZE
+A5FE ; [.3EEC.0020.0002] # VAI SYLLABLE ZHE
+A5FF ; [.3EED.0020.0002] # VAI SYLLABLE CE
+A600 ; [.3EEE.0020.0002] # VAI SYLLABLE JE
+A601 ; [.3EEF.0020.0002] # VAI SYLLABLE NJE
+A602 ; [.3EF0.0020.0002] # VAI SYLLABLE YE
+A603 ; [.3EF1.0020.0002] # VAI SYLLABLE KE
+A604 ; [.3EF2.0020.0002] # VAI SYLLABLE NGGE
+A605 ; [.3EF3.0020.0002] # VAI SYLLABLE NGGEN
+A606 ; [.3EF4.0020.0002] # VAI SYLLABLE GE
+A607 ; [.3EF5.0020.0002] # VAI SYLLABLE GEN
+A608 ; [.3EF6.0020.0002] # VAI SYLLABLE ME
+A609 ; [.3EF7.0020.0002] # VAI SYLLABLE NE
+A60A ; [.3EF8.0020.0002] # VAI SYLLABLE NYE
+A60B ; [.3EF9.0020.0002] # VAI SYLLABLE NG
+A60C ; [.3EFA.0020.0002] # VAI SYLLABLE LENGTHENER
+A6A0 ; [.3EFB.0020.0002] # BAMUM LETTER A
+A6A1 ; [.3EFC.0020.0002] # BAMUM LETTER KA
+A6A2 ; [.3EFD.0020.0002] # BAMUM LETTER U
+A6A3 ; [.3EFE.0020.0002] # BAMUM LETTER KU
+A6A4 ; [.3EFF.0020.0002] # BAMUM LETTER EE
+A6A5 ; [.3F00.0020.0002] # BAMUM LETTER REE
+A6A6 ; [.3F01.0020.0002] # BAMUM LETTER TAE
+A6A7 ; [.3F02.0020.0002] # BAMUM LETTER O
+A6A8 ; [.3F03.0020.0002] # BAMUM LETTER NYI
+A6A9 ; [.3F04.0020.0002] # BAMUM LETTER I
+A6AA ; [.3F05.0020.0002] # BAMUM LETTER LA
+A6AB ; [.3F06.0020.0002] # BAMUM LETTER PA
+A6AC ; [.3F07.0020.0002] # BAMUM LETTER RII
+A6AD ; [.3F08.0020.0002] # BAMUM LETTER RIEE
+A6AE ; [.3F09.0020.0002] # BAMUM LETTER LEEEE
+A6AF ; [.3F0A.0020.0002] # BAMUM LETTER MEEEE
+A6B0 ; [.3F0B.0020.0002] # BAMUM LETTER TAA
+A6B1 ; [.3F0C.0020.0002] # BAMUM LETTER NDAA
+A6B2 ; [.3F0D.0020.0002] # BAMUM LETTER NJAEM
+A6B3 ; [.3F0E.0020.0002] # BAMUM LETTER M
+A6B4 ; [.3F0F.0020.0002] # BAMUM LETTER SUU
+A6B5 ; [.3F10.0020.0002] # BAMUM LETTER MU
+A6B6 ; [.3F11.0020.0002] # BAMUM LETTER SHII
+A6B7 ; [.3F12.0020.0002] # BAMUM LETTER SI
+A6B8 ; [.3F13.0020.0002] # BAMUM LETTER SHEUX
+A6B9 ; [.3F14.0020.0002] # BAMUM LETTER SEUX
+A6BA ; [.3F15.0020.0002] # BAMUM LETTER KYEE
+A6BB ; [.3F16.0020.0002] # BAMUM LETTER KET
+A6BC ; [.3F17.0020.0002] # BAMUM LETTER NUAE
+A6BD ; [.3F18.0020.0002] # BAMUM LETTER NU
+A6BE ; [.3F19.0020.0002] # BAMUM LETTER NJUAE
+A6BF ; [.3F1A.0020.0002] # BAMUM LETTER YOQ
+A6C0 ; [.3F1B.0020.0002] # BAMUM LETTER SHU
+A6C1 ; [.3F1C.0020.0002] # BAMUM LETTER YUQ
+A6C2 ; [.3F1D.0020.0002] # BAMUM LETTER YA
+A6C3 ; [.3F1E.0020.0002] # BAMUM LETTER NSHA
+A6C4 ; [.3F1F.0020.0002] # BAMUM LETTER KEUX
+A6C5 ; [.3F20.0020.0002] # BAMUM LETTER PEUX
+A6C6 ; [.3F21.0020.0002] # BAMUM LETTER NJEE
+A6C7 ; [.3F22.0020.0002] # BAMUM LETTER NTEE
+A6C8 ; [.3F23.0020.0002] # BAMUM LETTER PUE
+A6C9 ; [.3F24.0020.0002] # BAMUM LETTER WUE
+A6CA ; [.3F25.0020.0002] # BAMUM LETTER PEE
+A6CB ; [.3F26.0020.0002] # BAMUM LETTER FEE
+A6CC ; [.3F27.0020.0002] # BAMUM LETTER RU
+A6CD ; [.3F28.0020.0002] # BAMUM LETTER LU
+A6CE ; [.3F29.0020.0002] # BAMUM LETTER MI
+A6CF ; [.3F2A.0020.0002] # BAMUM LETTER NI
+A6D0 ; [.3F2B.0020.0002] # BAMUM LETTER REUX
+A6D1 ; [.3F2C.0020.0002] # BAMUM LETTER RAE
+A6D2 ; [.3F2D.0020.0002] # BAMUM LETTER KEN
+A6D3 ; [.3F2E.0020.0002] # BAMUM LETTER NGKWAEN
+A6D4 ; [.3F2F.0020.0002] # BAMUM LETTER NGGA
+A6D5 ; [.3F30.0020.0002] # BAMUM LETTER NGA
+A6D6 ; [.3F31.0020.0002] # BAMUM LETTER SHO
+A6D7 ; [.3F32.0020.0002] # BAMUM LETTER PUAE
+A6D8 ; [.3F33.0020.0002] # BAMUM LETTER FU
+A6D9 ; [.3F34.0020.0002] # BAMUM LETTER FOM
+A6DA ; [.3F35.0020.0002] # BAMUM LETTER WA
+A6DB ; [.3F36.0020.0002] # BAMUM LETTER NA
+A6DC ; [.3F37.0020.0002] # BAMUM LETTER LI
+A6DD ; [.3F38.0020.0002] # BAMUM LETTER PI
+A6DE ; [.3F39.0020.0002] # BAMUM LETTER LOQ
+A6DF ; [.3F3A.0020.0002] # BAMUM LETTER KO
+A6E0 ; [.3F3B.0020.0002] # BAMUM LETTER MBEN
+A6E1 ; [.3F3C.0020.0002] # BAMUM LETTER REN
+A6E2 ; [.3F3D.0020.0002] # BAMUM LETTER MEN
+A6E3 ; [.3F3E.0020.0002] # BAMUM LETTER MA
+A6E4 ; [.3F3F.0020.0002] # BAMUM LETTER TI
+A6E5 ; [.3F40.0020.0002] # BAMUM LETTER KI
+A6E6 ; [.3F41.0020.0002] # BAMUM LETTER MO
+A6E7 ; [.3F42.0020.0002] # BAMUM LETTER MBAA
+A6E8 ; [.3F43.0020.0002] # BAMUM LETTER TET
+A6E9 ; [.3F44.0020.0002] # BAMUM LETTER KPA
+A6EA ; [.3F45.0020.0002] # BAMUM LETTER TEN
+A6EB ; [.3F46.0020.0002] # BAMUM LETTER NTUU
+A6EC ; [.3F47.0020.0002] # BAMUM LETTER SAMBA
+A6ED ; [.3F48.0020.0002] # BAMUM LETTER FAAMAE
+A6EE ; [.3F49.0020.0002] # BAMUM LETTER KOVUU
+A6EF ; [.3F4A.0020.0002] # BAMUM LETTER KOGHOM
+16800 ; [.3F4B.0020.0002] # BAMUM LETTER PHASE-A NGKUE MFON
+16801 ; [.3F4C.0020.0002] # BAMUM LETTER PHASE-A GBIEE FON
+16802 ; [.3F4D.0020.0002] # BAMUM LETTER PHASE-A PON MFON PIPAEMGBIEE
+16803 ; [.3F4E.0020.0002] # BAMUM LETTER PHASE-A PON MFON PIPAEMBA
+16804 ; [.3F4F.0020.0002] # BAMUM LETTER PHASE-A NAA MFON
+16805 ; [.3F50.0020.0002] # BAMUM LETTER PHASE-A SHUENSHUET
+16806 ; [.3F51.0020.0002] # BAMUM LETTER PHASE-A TITA MFON
+16807 ; [.3F52.0020.0002] # BAMUM LETTER PHASE-A NZA MFON
+16808 ; [.3F53.0020.0002] # BAMUM LETTER PHASE-A SHINDA PA NJI
+16809 ; [.3F54.0020.0002] # BAMUM LETTER PHASE-A PON PA NJI PIPAEMGBIEE
+1680A ; [.3F55.0020.0002] # BAMUM LETTER PHASE-A PON PA NJI PIPAEMBA
+1680B ; [.3F56.0020.0002] # BAMUM LETTER PHASE-A MAEMBGBIEE
+1680C ; [.3F57.0020.0002] # BAMUM LETTER PHASE-A TU MAEMBA
+1680D ; [.3F58.0020.0002] # BAMUM LETTER PHASE-A NGANGU
+1680E ; [.3F59.0020.0002] # BAMUM LETTER PHASE-A MAEMVEUX
+1680F ; [.3F5A.0020.0002] # BAMUM LETTER PHASE-A MANSUAE
+16810 ; [.3F5B.0020.0002] # BAMUM LETTER PHASE-A MVEUAENGAM
+16811 ; [.3F5C.0020.0002] # BAMUM LETTER PHASE-A SEUNYAM
+16812 ; [.3F5D.0020.0002] # BAMUM LETTER PHASE-A NTOQPEN
+16813 ; [.3F5E.0020.0002] # BAMUM LETTER PHASE-A KEUKEUTNDA
+16814 ; [.3F5F.0020.0002] # BAMUM LETTER PHASE-A NKINDI
+16815 ; [.3F60.0020.0002] # BAMUM LETTER PHASE-A SUU
+16816 ; [.3F61.0020.0002] # BAMUM LETTER PHASE-A NGKUENZEUM
+16817 ; [.3F62.0020.0002] # BAMUM LETTER PHASE-A LAPAQ
+16818 ; [.3F63.0020.0002] # BAMUM LETTER PHASE-A LET KUT
+16819 ; [.3F64.0020.0002] # BAMUM LETTER PHASE-A NTAP MFAA
+1681A ; [.3F65.0020.0002] # BAMUM LETTER PHASE-A MAEKEUP
+1681B ; [.3F66.0020.0002] # BAMUM LETTER PHASE-A PASHAE
+1681C ; [.3F67.0020.0002] # BAMUM LETTER PHASE-A GHEUAERAE
+1681D ; [.3F68.0020.0002] # BAMUM LETTER PHASE-A PAMSHAE
+1681E ; [.3F69.0020.0002] # BAMUM LETTER PHASE-A MON NGGEUAET
+1681F ; [.3F6A.0020.0002] # BAMUM LETTER PHASE-A NZUN MEUT
+16820 ; [.3F6B.0020.0002] # BAMUM LETTER PHASE-A U YUQ NAE
+16821 ; [.3F6C.0020.0002] # BAMUM LETTER PHASE-A GHEUAEGHEUAE
+16822 ; [.3F6D.0020.0002] # BAMUM LETTER PHASE-A NTAP NTAA
+16823 ; [.3F6E.0020.0002] # BAMUM LETTER PHASE-A SISA
+16824 ; [.3F6F.0020.0002] # BAMUM LETTER PHASE-A MGBASA
+16825 ; [.3F70.0020.0002] # BAMUM LETTER PHASE-A MEUNJOMNDEUQ
+16826 ; [.3F71.0020.0002] # BAMUM LETTER PHASE-A MOOMPUQ
+16827 ; [.3F72.0020.0002] # BAMUM LETTER PHASE-A KAFA
+16828 ; [.3F73.0020.0002] # BAMUM LETTER PHASE-A PA LEERAEWA
+16829 ; [.3F74.0020.0002] # BAMUM LETTER PHASE-A NDA LEERAEWA
+1682A ; [.3F75.0020.0002] # BAMUM LETTER PHASE-A PET
+1682B ; [.3F76.0020.0002] # BAMUM LETTER PHASE-A MAEMKPEN
+1682C ; [.3F77.0020.0002] # BAMUM LETTER PHASE-A NIKA
+1682D ; [.3F78.0020.0002] # BAMUM LETTER PHASE-A PUP
+1682E ; [.3F79.0020.0002] # BAMUM LETTER PHASE-A TUAEP
+1682F ; [.3F7A.0020.0002] # BAMUM LETTER PHASE-A LUAEP
+16830 ; [.3F7B.0020.0002] # BAMUM LETTER PHASE-A SONJAM
+16831 ; [.3F7C.0020.0002] # BAMUM LETTER PHASE-A TEUTEUWEN
+16832 ; [.3F7D.0020.0002] # BAMUM LETTER PHASE-A MAENYI
+16833 ; [.3F7E.0020.0002] # BAMUM LETTER PHASE-A KET
+16834 ; [.3F7F.0020.0002] # BAMUM LETTER PHASE-A NDAANGGEUAET
+16835 ; [.3F80.0020.0002] # BAMUM LETTER PHASE-A KUOQ
+16836 ; [.3F81.0020.0002] # BAMUM LETTER PHASE-A MOOMEUT
+16837 ; [.3F82.0020.0002] # BAMUM LETTER PHASE-A SHUM
+16838 ; [.3F83.0020.0002] # BAMUM LETTER PHASE-A LOMMAE
+16839 ; [.3F84.0020.0002] # BAMUM LETTER PHASE-A FIRI
+1683A ; [.3F85.0020.0002] # BAMUM LETTER PHASE-A ROM
+1683B ; [.3F86.0020.0002] # BAMUM LETTER PHASE-A KPOQ
+1683C ; [.3F87.0020.0002] # BAMUM LETTER PHASE-A SOQ
+1683D ; [.3F88.0020.0002] # BAMUM LETTER PHASE-A MAP PIEET
+1683E ; [.3F89.0020.0002] # BAMUM LETTER PHASE-A SHIRAE
+1683F ; [.3F8A.0020.0002] # BAMUM LETTER PHASE-A NTAP
+16840 ; [.3F8B.0020.0002] # BAMUM LETTER PHASE-A SHOQ NSHUT YUM
+16841 ; [.3F8C.0020.0002] # BAMUM LETTER PHASE-A NYIT MONGKEUAEQ
+16842 ; [.3F8D.0020.0002] # BAMUM LETTER PHASE-A PAARAE
+16843 ; [.3F8E.0020.0002] # BAMUM LETTER PHASE-A NKAARAE
+16844 ; [.3F8F.0020.0002] # BAMUM LETTER PHASE-A UNKNOWN
+16845 ; [.3F90.0020.0002] # BAMUM LETTER PHASE-A NGGEN
+16846 ; [.3F91.0020.0002] # BAMUM LETTER PHASE-A MAESI
+16847 ; [.3F92.0020.0002] # BAMUM LETTER PHASE-A NJAM
+16848 ; [.3F93.0020.0002] # BAMUM LETTER PHASE-A MBANYI
+16849 ; [.3F94.0020.0002] # BAMUM LETTER PHASE-A NYET
+1684A ; [.3F95.0020.0002] # BAMUM LETTER PHASE-A TEUAEN
+1684B ; [.3F96.0020.0002] # BAMUM LETTER PHASE-A SOT
+1684C ; [.3F97.0020.0002] # BAMUM LETTER PHASE-A PAAM
+1684D ; [.3F98.0020.0002] # BAMUM LETTER PHASE-A NSHIEE
+1684E ; [.3F99.0020.0002] # BAMUM LETTER PHASE-A MAEM
+1684F ; [.3F9A.0020.0002] # BAMUM LETTER PHASE-A NYI
+16850 ; [.3F9B.0020.0002] # BAMUM LETTER PHASE-A KAQ
+16851 ; [.3F9C.0020.0002] # BAMUM LETTER PHASE-A NSHA
+16852 ; [.3F9D.0020.0002] # BAMUM LETTER PHASE-A VEE
+16853 ; [.3F9E.0020.0002] # BAMUM LETTER PHASE-A LU
+16854 ; [.3F9F.0020.0002] # BAMUM LETTER PHASE-A NEN
+16855 ; [.3FA0.0020.0002] # BAMUM LETTER PHASE-A NAQ
+16856 ; [.3FA1.0020.0002] # BAMUM LETTER PHASE-A MBAQ
+16857 ; [.3FA2.0020.0002] # BAMUM LETTER PHASE-B NSHUET
+16858 ; [.3FA3.0020.0002] # BAMUM LETTER PHASE-B TU MAEMGBIEE
+16859 ; [.3FA4.0020.0002] # BAMUM LETTER PHASE-B SIEE
+1685A ; [.3FA5.0020.0002] # BAMUM LETTER PHASE-B SET TU
+1685B ; [.3FA6.0020.0002] # BAMUM LETTER PHASE-B LOM NTEUM
+1685C ; [.3FA7.0020.0002] # BAMUM LETTER PHASE-B MBA MAELEE
+1685D ; [.3FA8.0020.0002] # BAMUM LETTER PHASE-B KIEEM
+1685E ; [.3FA9.0020.0002] # BAMUM LETTER PHASE-B YEURAE
+1685F ; [.3FAA.0020.0002] # BAMUM LETTER PHASE-B MBAARAE
+16860 ; [.3FAB.0020.0002] # BAMUM LETTER PHASE-B KAM
+16861 ; [.3FAC.0020.0002] # BAMUM LETTER PHASE-B PEESHI
+16862 ; [.3FAD.0020.0002] # BAMUM LETTER PHASE-B YAFU LEERAEWA
+16863 ; [.3FAE.0020.0002] # BAMUM LETTER PHASE-B LAM NSHUT NYAM
+16864 ; [.3FAF.0020.0002] # BAMUM LETTER PHASE-B NTIEE SHEUOQ
+16865 ; [.3FB0.0020.0002] # BAMUM LETTER PHASE-B NDU NJAA
+16866 ; [.3FB1.0020.0002] # BAMUM LETTER PHASE-B GHEUGHEUAEM
+16867 ; [.3FB2.0020.0002] # BAMUM LETTER PHASE-B PIT
+16868 ; [.3FB3.0020.0002] # BAMUM LETTER PHASE-B TU NSIEE
+16869 ; [.3FB4.0020.0002] # BAMUM LETTER PHASE-B SHET NJAQ
+1686A ; [.3FB5.0020.0002] # BAMUM LETTER PHASE-B SHEUAEQTU
+1686B ; [.3FB6.0020.0002] # BAMUM LETTER PHASE-B MFON TEUAEQ
+1686C ; [.3FB7.0020.0002] # BAMUM LETTER PHASE-B MBIT MBAAKET
+1686D ; [.3FB8.0020.0002] # BAMUM LETTER PHASE-B NYI NTEUM
+1686E ; [.3FB9.0020.0002] # BAMUM LETTER PHASE-B KEUPUQ
+1686F ; [.3FBA.0020.0002] # BAMUM LETTER PHASE-B GHEUGHEN
+16870 ; [.3FBB.0020.0002] # BAMUM LETTER PHASE-B KEUYEUX
+16871 ; [.3FBC.0020.0002] # BAMUM LETTER PHASE-B LAANAE
+16872 ; [.3FBD.0020.0002] # BAMUM LETTER PHASE-B PARUM
+16873 ; [.3FBE.0020.0002] # BAMUM LETTER PHASE-B VEUM
+16874 ; [.3FBF.0020.0002] # BAMUM LETTER PHASE-B NGKINDI MVOP
+16875 ; [.3FC0.0020.0002] # BAMUM LETTER PHASE-B NGGEU MBU
+16876 ; [.3FC1.0020.0002] # BAMUM LETTER PHASE-B WUAET
+16877 ; [.3FC2.0020.0002] # BAMUM LETTER PHASE-B SAKEUAE
+16878 ; [.3FC3.0020.0002] # BAMUM LETTER PHASE-B TAAM
+16879 ; [.3FC4.0020.0002] # BAMUM LETTER PHASE-B MEUQ
+1687A ; [.3FC5.0020.0002] # BAMUM LETTER PHASE-B NGGUOQ
+1687B ; [.3FC6.0020.0002] # BAMUM LETTER PHASE-B NGGUOQ LARGE
+1687C ; [.3FC7.0020.0002] # BAMUM LETTER PHASE-B MFIYAQ
+1687D ; [.3FC8.0020.0002] # BAMUM LETTER PHASE-B SUE
+1687E ; [.3FC9.0020.0002] # BAMUM LETTER PHASE-B MBEURI
+1687F ; [.3FCA.0020.0002] # BAMUM LETTER PHASE-B MONTIEEN
+16880 ; [.3FCB.0020.0002] # BAMUM LETTER PHASE-B NYAEMAE
+16881 ; [.3FCC.0020.0002] # BAMUM LETTER PHASE-B PUNGAAM
+16882 ; [.3FCD.0020.0002] # BAMUM LETTER PHASE-B MEUT NGGEET
+16883 ; [.3FCE.0020.0002] # BAMUM LETTER PHASE-B FEUX
+16884 ; [.3FCF.0020.0002] # BAMUM LETTER PHASE-B MBUOQ
+16885 ; [.3FD0.0020.0002] # BAMUM LETTER PHASE-B FEE
+16886 ; [.3FD1.0020.0002] # BAMUM LETTER PHASE-B KEUAEM
+16887 ; [.3FD2.0020.0002] # BAMUM LETTER PHASE-B MA NJEUAENA
+16888 ; [.3FD3.0020.0002] # BAMUM LETTER PHASE-B MA NJUQA
+16889 ; [.3FD4.0020.0002] # BAMUM LETTER PHASE-B LET
+1688A ; [.3FD5.0020.0002] # BAMUM LETTER PHASE-B NGGAAM
+1688B ; [.3FD6.0020.0002] # BAMUM LETTER PHASE-B NSEN
+1688C ; [.3FD7.0020.0002] # BAMUM LETTER PHASE-B MA
+1688D ; [.3FD8.0020.0002] # BAMUM LETTER PHASE-B KIQ
+1688E ; [.3FD9.0020.0002] # BAMUM LETTER PHASE-B NGOM
+1688F ; [.3FDA.0020.0002] # BAMUM LETTER PHASE-C NGKUE MAEMBA
+16890 ; [.3FDB.0020.0002] # BAMUM LETTER PHASE-C NZA
+16891 ; [.3FDC.0020.0002] # BAMUM LETTER PHASE-C YUM
+16892 ; [.3FDD.0020.0002] # BAMUM LETTER PHASE-C WANGKUOQ
+16893 ; [.3FDE.0020.0002] # BAMUM LETTER PHASE-C NGGEN
+16894 ; [.3FDF.0020.0002] # BAMUM LETTER PHASE-C NDEUAEREE
+16895 ; [.3FE0.0020.0002] # BAMUM LETTER PHASE-C NGKAQ
+16896 ; [.3FE1.0020.0002] # BAMUM LETTER PHASE-C GHARAE
+16897 ; [.3FE2.0020.0002] # BAMUM LETTER PHASE-C MBEEKEET
+16898 ; [.3FE3.0020.0002] # BAMUM LETTER PHASE-C GBAYI
+16899 ; [.3FE4.0020.0002] # BAMUM LETTER PHASE-C NYIR MKPARAQ MEUN
+1689A ; [.3FE5.0020.0002] # BAMUM LETTER PHASE-C NTU MBIT
+1689B ; [.3FE6.0020.0002] # BAMUM LETTER PHASE-C MBEUM
+1689C ; [.3FE7.0020.0002] # BAMUM LETTER PHASE-C PIRIEEN
+1689D ; [.3FE8.0020.0002] # BAMUM LETTER PHASE-C NDOMBU
+1689E ; [.3FE9.0020.0002] # BAMUM LETTER PHASE-C MBAA CABBAGE-TREE
+1689F ; [.3FEA.0020.0002] # BAMUM LETTER PHASE-C KEUSHEUAEP
+168A0 ; [.3FEB.0020.0002] # BAMUM LETTER PHASE-C GHAP
+168A1 ; [.3FEC.0020.0002] # BAMUM LETTER PHASE-C KEUKAQ
+168A2 ; [.3FED.0020.0002] # BAMUM LETTER PHASE-C YU MUOMAE
+168A3 ; [.3FEE.0020.0002] # BAMUM LETTER PHASE-C NZEUM
+168A4 ; [.3FEF.0020.0002] # BAMUM LETTER PHASE-C MBUE
+168A5 ; [.3FF0.0020.0002] # BAMUM LETTER PHASE-C NSEUAEN
+168A6 ; [.3FF1.0020.0002] # BAMUM LETTER PHASE-C MBIT
+168A7 ; [.3FF2.0020.0002] # BAMUM LETTER PHASE-C YEUQ
+168A8 ; [.3FF3.0020.0002] # BAMUM LETTER PHASE-C KPARAQ
+168A9 ; [.3FF4.0020.0002] # BAMUM LETTER PHASE-C KAA
+168AA ; [.3FF5.0020.0002] # BAMUM LETTER PHASE-C SEUX
+168AB ; [.3FF6.0020.0002] # BAMUM LETTER PHASE-C NDIDA
+168AC ; [.3FF7.0020.0002] # BAMUM LETTER PHASE-C TAASHAE
+168AD ; [.3FF8.0020.0002] # BAMUM LETTER PHASE-C NJUEQ
+168AE ; [.3FF9.0020.0002] # BAMUM LETTER PHASE-C TITA YUE
+168AF ; [.3FFA.0020.0002] # BAMUM LETTER PHASE-C SUAET
+168B0 ; [.3FFB.0020.0002] # BAMUM LETTER PHASE-C NGGUAEN NYAM
+168B1 ; [.3FFC.0020.0002] # BAMUM LETTER PHASE-C VEUX
+168B2 ; [.3FFD.0020.0002] # BAMUM LETTER PHASE-C NANSANAQ
+168B3 ; [.3FFE.0020.0002] # BAMUM LETTER PHASE-C MA KEUAERI
+168B4 ; [.3FFF.0020.0002] # BAMUM LETTER PHASE-C NTAA
+168B5 ; [.4000.0020.0002] # BAMUM LETTER PHASE-C NGGUON
+168B6 ; [.4001.0020.0002] # BAMUM LETTER PHASE-C LAP
+168B7 ; [.4002.0020.0002] # BAMUM LETTER PHASE-C MBIRIEEN
+168B8 ; [.4003.0020.0002] # BAMUM LETTER PHASE-C MGBASAQ
+168B9 ; [.4004.0020.0002] # BAMUM LETTER PHASE-C NTEUNGBA
+168BA ; [.4005.0020.0002] # BAMUM LETTER PHASE-C TEUTEUX
+168BB ; [.4006.0020.0002] # BAMUM LETTER PHASE-C NGGUM
+168BC ; [.4007.0020.0002] # BAMUM LETTER PHASE-C FUE
+168BD ; [.4008.0020.0002] # BAMUM LETTER PHASE-C NDEUT
+168BE ; [.4009.0020.0002] # BAMUM LETTER PHASE-C NSA
+168BF ; [.400A.0020.0002] # BAMUM LETTER PHASE-C NSHAQ
+168C0 ; [.400B.0020.0002] # BAMUM LETTER PHASE-C BUNG
+168C1 ; [.400C.0020.0002] # BAMUM LETTER PHASE-C VEUAEPEN
+168C2 ; [.400D.0020.0002] # BAMUM LETTER PHASE-C MBERAE
+168C3 ; [.400E.0020.0002] # BAMUM LETTER PHASE-C RU
+168C4 ; [.400F.0020.0002] # BAMUM LETTER PHASE-C NJAEM
+168C5 ; [.4010.0020.0002] # BAMUM LETTER PHASE-C LAM
+168C6 ; [.4011.0020.0002] # BAMUM LETTER PHASE-C TITUAEP
+168C7 ; [.4012.0020.0002] # BAMUM LETTER PHASE-C NSUOT NGOM
+168C8 ; [.4013.0020.0002] # BAMUM LETTER PHASE-C NJEEEE
+168C9 ; [.4014.0020.0002] # BAMUM LETTER PHASE-C KET
+168CA ; [.4015.0020.0002] # BAMUM LETTER PHASE-C NGGU
+168CB ; [.4016.0020.0002] # BAMUM LETTER PHASE-C MAESI
+168CC ; [.4017.0020.0002] # BAMUM LETTER PHASE-C MBUAEM
+168CD ; [.4018.0020.0002] # BAMUM LETTER PHASE-C LU
+168CE ; [.4019.0020.0002] # BAMUM LETTER PHASE-C KUT
+168CF ; [.401A.0020.0002] # BAMUM LETTER PHASE-C NJAM
+168D0 ; [.401B.0020.0002] # BAMUM LETTER PHASE-C NGOM
+168D1 ; [.401C.0020.0002] # BAMUM LETTER PHASE-C WUP
+168D2 ; [.401D.0020.0002] # BAMUM LETTER PHASE-C NGGUEET
+168D3 ; [.401E.0020.0002] # BAMUM LETTER PHASE-C NSOM
+168D4 ; [.401F.0020.0002] # BAMUM LETTER PHASE-C NTEN
+168D5 ; [.4020.0020.0002] # BAMUM LETTER PHASE-C KUOP NKAARAE
+168D6 ; [.4021.0020.0002] # BAMUM LETTER PHASE-C NSUN
+168D7 ; [.4022.0020.0002] # BAMUM LETTER PHASE-C NDAM
+168D8 ; [.4023.0020.0002] # BAMUM LETTER PHASE-C MA NSIEE
+168D9 ; [.4024.0020.0002] # BAMUM LETTER PHASE-C YAA
+168DA ; [.4025.0020.0002] # BAMUM LETTER PHASE-C NDAP
+168DB ; [.4026.0020.0002] # BAMUM LETTER PHASE-C SHUEQ
+168DC ; [.4027.0020.0002] # BAMUM LETTER PHASE-C SETFON
+168DD ; [.4028.0020.0002] # BAMUM LETTER PHASE-C MBI
+168DE ; [.4029.0020.0002] # BAMUM LETTER PHASE-C MAEMBA
+168DF ; [.402A.0020.0002] # BAMUM LETTER PHASE-C MBANYI
+168E0 ; [.402B.0020.0002] # BAMUM LETTER PHASE-C KEUSEUX
+168E1 ; [.402C.0020.0002] # BAMUM LETTER PHASE-C MBEUX
+168E2 ; [.402D.0020.0002] # BAMUM LETTER PHASE-C KEUM
+168E3 ; [.402E.0020.0002] # BAMUM LETTER PHASE-C MBAA PICKET
+168E4 ; [.402F.0020.0002] # BAMUM LETTER PHASE-C YUWOQ
+168E5 ; [.4030.0020.0002] # BAMUM LETTER PHASE-C NJEUX
+168E6 ; [.4031.0020.0002] # BAMUM LETTER PHASE-C MIEE
+168E7 ; [.4032.0020.0002] # BAMUM LETTER PHASE-C MUAE
+168E8 ; [.4033.0020.0002] # BAMUM LETTER PHASE-C SHIQ
+168E9 ; [.4034.0020.0002] # BAMUM LETTER PHASE-C KEN LAW
+168EA ; [.4035.0020.0002] # BAMUM LETTER PHASE-C KEN FATIGUE
+168EB ; [.4036.0020.0002] # BAMUM LETTER PHASE-C NGAQ
+168EC ; [.4037.0020.0002] # BAMUM LETTER PHASE-C NAQ
+168ED ; [.4038.0020.0002] # BAMUM LETTER PHASE-C LIQ
+168EE ; [.4039.0020.0002] # BAMUM LETTER PHASE-C PIN
+168EF ; [.403A.0020.0002] # BAMUM LETTER PHASE-C PEN
+168F0 ; [.403B.0020.0002] # BAMUM LETTER PHASE-C TET
+168F1 ; [.403C.0020.0002] # BAMUM LETTER PHASE-D MBUO
+168F2 ; [.403D.0020.0002] # BAMUM LETTER PHASE-D WAP
+168F3 ; [.403E.0020.0002] # BAMUM LETTER PHASE-D NJI
+168F4 ; [.403F.0020.0002] # BAMUM LETTER PHASE-D MFON
+168F5 ; [.4040.0020.0002] # BAMUM LETTER PHASE-D NJIEE
+168F6 ; [.4041.0020.0002] # BAMUM LETTER PHASE-D LIEE
+168F7 ; [.4042.0020.0002] # BAMUM LETTER PHASE-D NJEUT
+168F8 ; [.4043.0020.0002] # BAMUM LETTER PHASE-D NSHEE
+168F9 ; [.4044.0020.0002] # BAMUM LETTER PHASE-D NGGAAMAE
+168FA ; [.4045.0020.0002] # BAMUM LETTER PHASE-D NYAM
+168FB ; [.4046.0020.0002] # BAMUM LETTER PHASE-D WUAEN
+168FC ; [.4047.0020.0002] # BAMUM LETTER PHASE-D NGKUN
+168FD ; [.4048.0020.0002] # BAMUM LETTER PHASE-D SHEE
+168FE ; [.4049.0020.0002] # BAMUM LETTER PHASE-D NGKAP
+168FF ; [.404A.0020.0002] # BAMUM LETTER PHASE-D KEUAETMEUN
+16900 ; [.404B.0020.0002] # BAMUM LETTER PHASE-D TEUT
+16901 ; [.404C.0020.0002] # BAMUM LETTER PHASE-D SHEUAE
+16902 ; [.404D.0020.0002] # BAMUM LETTER PHASE-D NJAP
+16903 ; [.404E.0020.0002] # BAMUM LETTER PHASE-D SUE
+16904 ; [.404F.0020.0002] # BAMUM LETTER PHASE-D KET
+16905 ; [.4050.0020.0002] # BAMUM LETTER PHASE-D YAEMMAE
+16906 ; [.4051.0020.0002] # BAMUM LETTER PHASE-D KUOM
+16907 ; [.4052.0020.0002] # BAMUM LETTER PHASE-D SAP
+16908 ; [.4053.0020.0002] # BAMUM LETTER PHASE-D MFEUT
+16909 ; [.4054.0020.0002] # BAMUM LETTER PHASE-D NDEUX
+1690A ; [.4055.0020.0002] # BAMUM LETTER PHASE-D MALEERI
+1690B ; [.4056.0020.0002] # BAMUM LETTER PHASE-D MEUT
+1690C ; [.4057.0020.0002] # BAMUM LETTER PHASE-D SEUAEQ
+1690D ; [.4058.0020.0002] # BAMUM LETTER PHASE-D YEN
+1690E ; [.4059.0020.0002] # BAMUM LETTER PHASE-D NJEUAEM
+1690F ; [.405A.0020.0002] # BAMUM LETTER PHASE-D KEUOT MBUAE
+16910 ; [.405B.0020.0002] # BAMUM LETTER PHASE-D NGKEURI
+16911 ; [.405C.0020.0002] # BAMUM LETTER PHASE-D TU
+16912 ; [.405D.0020.0002] # BAMUM LETTER PHASE-D GHAA
+16913 ; [.405E.0020.0002] # BAMUM LETTER PHASE-D NGKYEE
+16914 ; [.405F.0020.0002] # BAMUM LETTER PHASE-D FEUFEUAET
+16915 ; [.4060.0020.0002] # BAMUM LETTER PHASE-D NDEE
+16916 ; [.4061.0020.0002] # BAMUM LETTER PHASE-D MGBOFUM
+16917 ; [.4062.0020.0002] # BAMUM LETTER PHASE-D LEUAEP
+16918 ; [.4063.0020.0002] # BAMUM LETTER PHASE-D NDON
+16919 ; [.4064.0020.0002] # BAMUM LETTER PHASE-D MONI
+1691A ; [.4065.0020.0002] # BAMUM LETTER PHASE-D MGBEUN
+1691B ; [.4066.0020.0002] # BAMUM LETTER PHASE-D PUUT
+1691C ; [.4067.0020.0002] # BAMUM LETTER PHASE-D MGBIEE
+1691D ; [.4068.0020.0002] # BAMUM LETTER PHASE-D MFO
+1691E ; [.4069.0020.0002] # BAMUM LETTER PHASE-D LUM
+1691F ; [.406A.0020.0002] # BAMUM LETTER PHASE-D NSIEEP
+16920 ; [.406B.0020.0002] # BAMUM LETTER PHASE-D MBAA
+16921 ; [.406C.0020.0002] # BAMUM LETTER PHASE-D KWAET
+16922 ; [.406D.0020.0002] # BAMUM LETTER PHASE-D NYET
+16923 ; [.406E.0020.0002] # BAMUM LETTER PHASE-D TEUAEN
+16924 ; [.406F.0020.0002] # BAMUM LETTER PHASE-D SOT
+16925 ; [.4070.0020.0002] # BAMUM LETTER PHASE-D YUWOQ
+16926 ; [.4071.0020.0002] # BAMUM LETTER PHASE-D KEUM
+16927 ; [.4072.0020.0002] # BAMUM LETTER PHASE-D RAEM
+16928 ; [.4073.0020.0002] # BAMUM LETTER PHASE-D TEEEE
+16929 ; [.4074.0020.0002] # BAMUM LETTER PHASE-D NGKEUAEQ
+1692A ; [.4075.0020.0002] # BAMUM LETTER PHASE-D MFEUAE
+1692B ; [.4076.0020.0002] # BAMUM LETTER PHASE-D NSIEET
+1692C ; [.4077.0020.0002] # BAMUM LETTER PHASE-D KEUP
+1692D ; [.4078.0020.0002] # BAMUM LETTER PHASE-D PIP
+1692E ; [.4079.0020.0002] # BAMUM LETTER PHASE-D PEUTAE
+1692F ; [.407A.0020.0002] # BAMUM LETTER PHASE-D NYUE
+16930 ; [.407B.0020.0002] # BAMUM LETTER PHASE-D LET
+16931 ; [.407C.0020.0002] # BAMUM LETTER PHASE-D NGGAAM
+16932 ; [.407D.0020.0002] # BAMUM LETTER PHASE-D MFIEE
+16933 ; [.407E.0020.0002] # BAMUM LETTER PHASE-D NGGWAEN
+16934 ; [.407F.0020.0002] # BAMUM LETTER PHASE-D YUOM
+16935 ; [.4080.0020.0002] # BAMUM LETTER PHASE-D PAP
+16936 ; [.4081.0020.0002] # BAMUM LETTER PHASE-D YUOP
+16937 ; [.4082.0020.0002] # BAMUM LETTER PHASE-D NDAM
+16938 ; [.4083.0020.0002] # BAMUM LETTER PHASE-D NTEUM
+16939 ; [.4084.0020.0002] # BAMUM LETTER PHASE-D SUAE
+1693A ; [.4085.0020.0002] # BAMUM LETTER PHASE-D KUN
+1693B ; [.4086.0020.0002] # BAMUM LETTER PHASE-D NGGEUX
+1693C ; [.4087.0020.0002] # BAMUM LETTER PHASE-D NGKIEE
+1693D ; [.4088.0020.0002] # BAMUM LETTER PHASE-D TUOT
+1693E ; [.4089.0020.0002] # BAMUM LETTER PHASE-D MEUN
+1693F ; [.408A.0020.0002] # BAMUM LETTER PHASE-D KUQ
+16940 ; [.408B.0020.0002] # BAMUM LETTER PHASE-D NSUM
+16941 ; [.408C.0020.0002] # BAMUM LETTER PHASE-D TEUN
+16942 ; [.408D.0020.0002] # BAMUM LETTER PHASE-D MAENJET
+16943 ; [.408E.0020.0002] # BAMUM LETTER PHASE-D NGGAP
+16944 ; [.408F.0020.0002] # BAMUM LETTER PHASE-D LEUM
+16945 ; [.4090.0020.0002] # BAMUM LETTER PHASE-D NGGUOM
+16946 ; [.4091.0020.0002] # BAMUM LETTER PHASE-D NSHUT
+16947 ; [.4092.0020.0002] # BAMUM LETTER PHASE-D NJUEQ
+16948 ; [.4093.0020.0002] # BAMUM LETTER PHASE-D GHEUAE
+16949 ; [.4094.0020.0002] # BAMUM LETTER PHASE-D KU
+1694A ; [.4095.0020.0002] # BAMUM LETTER PHASE-D REN OLD
+1694B ; [.4096.0020.0002] # BAMUM LETTER PHASE-D TAE
+1694C ; [.4097.0020.0002] # BAMUM LETTER PHASE-D TOQ
+1694D ; [.4098.0020.0002] # BAMUM LETTER PHASE-D NYI
+1694E ; [.4099.0020.0002] # BAMUM LETTER PHASE-D RII
+1694F ; [.409A.0020.0002] # BAMUM LETTER PHASE-D LEEEE
+16950 ; [.409B.0020.0002] # BAMUM LETTER PHASE-D MEEEE
+16951 ; [.409C.0020.0002] # BAMUM LETTER PHASE-D M
+16952 ; [.409D.0020.0002] # BAMUM LETTER PHASE-D SUU
+16953 ; [.409E.0020.0002] # BAMUM LETTER PHASE-D MU
+16954 ; [.409F.0020.0002] # BAMUM LETTER PHASE-D SHII
+16955 ; [.40A0.0020.0002] # BAMUM LETTER PHASE-D SHEUX
+16956 ; [.40A1.0020.0002] # BAMUM LETTER PHASE-D KYEE
+16957 ; [.40A2.0020.0002] # BAMUM LETTER PHASE-D NU
+16958 ; [.40A3.0020.0002] # BAMUM LETTER PHASE-D SHU
+16959 ; [.40A4.0020.0002] # BAMUM LETTER PHASE-D NTEE
+1695A ; [.40A5.0020.0002] # BAMUM LETTER PHASE-D PEE
+1695B ; [.40A6.0020.0002] # BAMUM LETTER PHASE-D NI
+1695C ; [.40A7.0020.0002] # BAMUM LETTER PHASE-D SHOQ
+1695D ; [.40A8.0020.0002] # BAMUM LETTER PHASE-D PUQ
+1695E ; [.40A9.0020.0002] # BAMUM LETTER PHASE-D MVOP
+1695F ; [.40AA.0020.0002] # BAMUM LETTER PHASE-D LOQ
+16960 ; [.40AB.0020.0002] # BAMUM LETTER PHASE-D REN MUCH
+16961 ; [.40AC.0020.0002] # BAMUM LETTER PHASE-D TI
+16962 ; [.40AD.0020.0002] # BAMUM LETTER PHASE-D NTUU
+16963 ; [.40AE.0020.0002] # BAMUM LETTER PHASE-D MBAA SEVEN
+16964 ; [.40AF.0020.0002] # BAMUM LETTER PHASE-D SAQ
+16965 ; [.40B0.0020.0002] # BAMUM LETTER PHASE-D FAA
+16966 ; [.40B1.0020.0002] # BAMUM LETTER PHASE-E NDAP
+16967 ; [.40B2.0020.0002] # BAMUM LETTER PHASE-E TOON
+16968 ; [.40B3.0020.0002] # BAMUM LETTER PHASE-E MBEUM
+16969 ; [.40B4.0020.0002] # BAMUM LETTER PHASE-E LAP
+1696A ; [.40B5.0020.0002] # BAMUM LETTER PHASE-E VOM
+1696B ; [.40B6.0020.0002] # BAMUM LETTER PHASE-E LOON
+1696C ; [.40B7.0020.0002] # BAMUM LETTER PHASE-E PAA
+1696D ; [.40B8.0020.0002] # BAMUM LETTER PHASE-E SOM
+1696E ; [.40B9.0020.0002] # BAMUM LETTER PHASE-E RAQ
+1696F ; [.40BA.0020.0002] # BAMUM LETTER PHASE-E NSHUOP
+16970 ; [.40BB.0020.0002] # BAMUM LETTER PHASE-E NDUN
+16971 ; [.40BC.0020.0002] # BAMUM LETTER PHASE-E PUAE
+16972 ; [.40BD.0020.0002] # BAMUM LETTER PHASE-E TAM
+16973 ; [.40BE.0020.0002] # BAMUM LETTER PHASE-E NGKA
+16974 ; [.40BF.0020.0002] # BAMUM LETTER PHASE-E KPEUX
+16975 ; [.40C0.0020.0002] # BAMUM LETTER PHASE-E WUO
+16976 ; [.40C1.0020.0002] # BAMUM LETTER PHASE-E SEE
+16977 ; [.40C2.0020.0002] # BAMUM LETTER PHASE-E NGGEUAET
+16978 ; [.40C3.0020.0002] # BAMUM LETTER PHASE-E PAAM
+16979 ; [.40C4.0020.0002] # BAMUM LETTER PHASE-E TOO
+1697A ; [.40C5.0020.0002] # BAMUM LETTER PHASE-E KUOP
+1697B ; [.40C6.0020.0002] # BAMUM LETTER PHASE-E LOM
+1697C ; [.40C7.0020.0002] # BAMUM LETTER PHASE-E NSHIEE
+1697D ; [.40C8.0020.0002] # BAMUM LETTER PHASE-E NGOP
+1697E ; [.40C9.0020.0002] # BAMUM LETTER PHASE-E MAEM
+1697F ; [.40CA.0020.0002] # BAMUM LETTER PHASE-E NGKEUX
+16980 ; [.40CB.0020.0002] # BAMUM LETTER PHASE-E NGOQ
+16981 ; [.40CC.0020.0002] # BAMUM LETTER PHASE-E NSHUE
+16982 ; [.40CD.0020.0002] # BAMUM LETTER PHASE-E RIMGBA
+16983 ; [.40CE.0020.0002] # BAMUM LETTER PHASE-E NJEUX
+16984 ; [.40CF.0020.0002] # BAMUM LETTER PHASE-E PEEM
+16985 ; [.40D0.0020.0002] # BAMUM LETTER PHASE-E SAA
+16986 ; [.40D1.0020.0002] # BAMUM LETTER PHASE-E NGGURAE
+16987 ; [.40D2.0020.0002] # BAMUM LETTER PHASE-E MGBA
+16988 ; [.40D3.0020.0002] # BAMUM LETTER PHASE-E GHEUX
+16989 ; [.40D4.0020.0002] # BAMUM LETTER PHASE-E NGKEUAEM
+1698A ; [.40D5.0020.0002] # BAMUM LETTER PHASE-E NJAEMLI
+1698B ; [.40D6.0020.0002] # BAMUM LETTER PHASE-E MAP
+1698C ; [.40D7.0020.0002] # BAMUM LETTER PHASE-E LOOT
+1698D ; [.40D8.0020.0002] # BAMUM LETTER PHASE-E NGGEEEE
+1698E ; [.40D9.0020.0002] # BAMUM LETTER PHASE-E NDIQ
+1698F ; [.40DA.0020.0002] # BAMUM LETTER PHASE-E TAEN NTEUM
+16990 ; [.40DB.0020.0002] # BAMUM LETTER PHASE-E SET
+16991 ; [.40DC.0020.0002] # BAMUM LETTER PHASE-E PUM
+16992 ; [.40DD.0020.0002] # BAMUM LETTER PHASE-E NDAA SOFTNESS
+16993 ; [.40DE.0020.0002] # BAMUM LETTER PHASE-E NGGUAESHAE NYAM
+16994 ; [.40DF.0020.0002] # BAMUM LETTER PHASE-E YIEE
+16995 ; [.40E0.0020.0002] # BAMUM LETTER PHASE-E GHEUN
+16996 ; [.40E1.0020.0002] # BAMUM LETTER PHASE-E TUAE
+16997 ; [.40E2.0020.0002] # BAMUM LETTER PHASE-E YEUAE
+16998 ; [.40E3.0020.0002] # BAMUM LETTER PHASE-E PO
+16999 ; [.40E4.0020.0002] # BAMUM LETTER PHASE-E TUMAE
+1699A ; [.40E5.0020.0002] # BAMUM LETTER PHASE-E KEUAE
+1699B ; [.40E6.0020.0002] # BAMUM LETTER PHASE-E SUAEN
+1699C ; [.40E7.0020.0002] # BAMUM LETTER PHASE-E TEUAEQ
+1699D ; [.40E8.0020.0002] # BAMUM LETTER PHASE-E VEUAE
+1699E ; [.40E9.0020.0002] # BAMUM LETTER PHASE-E WEUX
+1699F ; [.40EA.0020.0002] # BAMUM LETTER PHASE-E LAAM
+169A0 ; [.40EB.0020.0002] # BAMUM LETTER PHASE-E PU
+169A1 ; [.40EC.0020.0002] # BAMUM LETTER PHASE-E TAAQ
+169A2 ; [.40ED.0020.0002] # BAMUM LETTER PHASE-E GHAAMAE
+169A3 ; [.40EE.0020.0002] # BAMUM LETTER PHASE-E NGEUREUT
+169A4 ; [.40EF.0020.0002] # BAMUM LETTER PHASE-E SHEUAEQ
+169A5 ; [.40F0.0020.0002] # BAMUM LETTER PHASE-E MGBEN
+169A6 ; [.40F1.0020.0002] # BAMUM LETTER PHASE-E MBEE
+169A7 ; [.40F2.0020.0002] # BAMUM LETTER PHASE-E NZAQ
+169A8 ; [.40F3.0020.0002] # BAMUM LETTER PHASE-E NKOM
+169A9 ; [.40F4.0020.0002] # BAMUM LETTER PHASE-E GBET
+169AA ; [.40F5.0020.0002] # BAMUM LETTER PHASE-E TUM
+169AB ; [.40F6.0020.0002] # BAMUM LETTER PHASE-E KUET
+169AC ; [.40F7.0020.0002] # BAMUM LETTER PHASE-E YAP
+169AD ; [.40F8.0020.0002] # BAMUM LETTER PHASE-E NYI CLEAVER
+169AE ; [.40F9.0020.0002] # BAMUM LETTER PHASE-E YIT
+169AF ; [.40FA.0020.0002] # BAMUM LETTER PHASE-E MFEUQ
+169B0 ; [.40FB.0020.0002] # BAMUM LETTER PHASE-E NDIAQ
+169B1 ; [.40FC.0020.0002] # BAMUM LETTER PHASE-E PIEEQ
+169B2 ; [.40FD.0020.0002] # BAMUM LETTER PHASE-E YUEQ
+169B3 ; [.40FE.0020.0002] # BAMUM LETTER PHASE-E LEUAEM
+169B4 ; [.40FF.0020.0002] # BAMUM LETTER PHASE-E FUE
+169B5 ; [.4100.0020.0002] # BAMUM LETTER PHASE-E GBEUX
+169B6 ; [.4101.0020.0002] # BAMUM LETTER PHASE-E NGKUP
+169B7 ; [.4102.0020.0002] # BAMUM LETTER PHASE-E KET
+169B8 ; [.4103.0020.0002] # BAMUM LETTER PHASE-E MAE
+169B9 ; [.4104.0020.0002] # BAMUM LETTER PHASE-E NGKAAMI
+169BA ; [.4105.0020.0002] # BAMUM LETTER PHASE-E GHET
+169BB ; [.4106.0020.0002] # BAMUM LETTER PHASE-E FA
+169BC ; [.4107.0020.0002] # BAMUM LETTER PHASE-E NTUM
+169BD ; [.4108.0020.0002] # BAMUM LETTER PHASE-E PEUT
+169BE ; [.4109.0020.0002] # BAMUM LETTER PHASE-E YEUM
+169BF ; [.410A.0020.0002] # BAMUM LETTER PHASE-E NGGEUAE
+169C0 ; [.410B.0020.0002] # BAMUM LETTER PHASE-E NYI BETWEEN
+169C1 ; [.410C.0020.0002] # BAMUM LETTER PHASE-E NZUQ
+169C2 ; [.410D.0020.0002] # BAMUM LETTER PHASE-E POON
+169C3 ; [.410E.0020.0002] # BAMUM LETTER PHASE-E MIEE
+169C4 ; [.410F.0020.0002] # BAMUM LETTER PHASE-E FUET
+169C5 ; [.4110.0020.0002] # BAMUM LETTER PHASE-E NAE
+169C6 ; [.4111.0020.0002] # BAMUM LETTER PHASE-E MUAE
+169C7 ; [.4112.0020.0002] # BAMUM LETTER PHASE-E GHEUAE
+169C8 ; [.4113.0020.0002] # BAMUM LETTER PHASE-E FU I
+169C9 ; [.4114.0020.0002] # BAMUM LETTER PHASE-E MVI
+169CA ; [.4115.0020.0002] # BAMUM LETTER PHASE-E PUAQ
+169CB ; [.4116.0020.0002] # BAMUM LETTER PHASE-E NGKUM
+169CC ; [.4117.0020.0002] # BAMUM LETTER PHASE-E KUT
+169CD ; [.4118.0020.0002] # BAMUM LETTER PHASE-E PIET
+169CE ; [.4119.0020.0002] # BAMUM LETTER PHASE-E NTAP
+169CF ; [.411A.0020.0002] # BAMUM LETTER PHASE-E YEUAET
+169D0 ; [.411B.0020.0002] # BAMUM LETTER PHASE-E NGGUP
+169D1 ; [.411C.0020.0002] # BAMUM LETTER PHASE-E PA PEOPLE
+169D2 ; [.411D.0020.0002] # BAMUM LETTER PHASE-E FU CALL
+169D3 ; [.411E.0020.0002] # BAMUM LETTER PHASE-E FOM
+169D4 ; [.411F.0020.0002] # BAMUM LETTER PHASE-E NJEE
+169D5 ; [.4120.0020.0002] # BAMUM LETTER PHASE-E A
+169D6 ; [.4121.0020.0002] # BAMUM LETTER PHASE-E TOQ
+169D7 ; [.4122.0020.0002] # BAMUM LETTER PHASE-E O
+169D8 ; [.4123.0020.0002] # BAMUM LETTER PHASE-E I
+169D9 ; [.4124.0020.0002] # BAMUM LETTER PHASE-E LAQ
+169DA ; [.4125.0020.0002] # BAMUM LETTER PHASE-E PA PLURAL
+169DB ; [.4126.0020.0002] # BAMUM LETTER PHASE-E TAA
+169DC ; [.4127.0020.0002] # BAMUM LETTER PHASE-E TAQ
+169DD ; [.4128.0020.0002] # BAMUM LETTER PHASE-E NDAA MY HOUSE
+169DE ; [.4129.0020.0002] # BAMUM LETTER PHASE-E SHIQ
+169DF ; [.412A.0020.0002] # BAMUM LETTER PHASE-E YEUX
+169E0 ; [.412B.0020.0002] # BAMUM LETTER PHASE-E NGUAE
+169E1 ; [.412C.0020.0002] # BAMUM LETTER PHASE-E YUAEN
+169E2 ; [.412D.0020.0002] # BAMUM LETTER PHASE-E YOQ SWIMMING
+169E3 ; [.412E.0020.0002] # BAMUM LETTER PHASE-E YOQ COVER
+169E4 ; [.412F.0020.0002] # BAMUM LETTER PHASE-E YUQ
+169E5 ; [.4130.0020.0002] # BAMUM LETTER PHASE-E YUN
+169E6 ; [.4131.0020.0002] # BAMUM LETTER PHASE-E KEUX
+169E7 ; [.4132.0020.0002] # BAMUM LETTER PHASE-E PEUX
+169E8 ; [.4133.0020.0002] # BAMUM LETTER PHASE-E NJEE EPOCH
+169E9 ; [.4134.0020.0002] # BAMUM LETTER PHASE-E PUE
+169EA ; [.4135.0020.0002] # BAMUM LETTER PHASE-E WUE
+169EB ; [.4136.0020.0002] # BAMUM LETTER PHASE-E FEE
+169EC ; [.4137.0020.0002] # BAMUM LETTER PHASE-E VEE
+169ED ; [.4138.0020.0002] # BAMUM LETTER PHASE-E LU
+169EE ; [.4139.0020.0002] # BAMUM LETTER PHASE-E MI
+169EF ; [.413A.0020.0002] # BAMUM LETTER PHASE-E REUX
+169F0 ; [.413B.0020.0002] # BAMUM LETTER PHASE-E RAE
+169F1 ; [.413C.0020.0002] # BAMUM LETTER PHASE-E NGUAET
+169F2 ; [.413D.0020.0002] # BAMUM LETTER PHASE-E NGA
+169F3 ; [.413E.0020.0002] # BAMUM LETTER PHASE-E SHO
+169F4 ; [.413F.0020.0002] # BAMUM LETTER PHASE-E SHOQ
+169F5 ; [.4140.0020.0002] # BAMUM LETTER PHASE-E FU REMEDY
+169F6 ; [.4141.0020.0002] # BAMUM LETTER PHASE-E NA
+169F7 ; [.4142.0020.0002] # BAMUM LETTER PHASE-E PI
+169F8 ; [.4143.0020.0002] # BAMUM LETTER PHASE-E LOQ
+169F9 ; [.4144.0020.0002] # BAMUM LETTER PHASE-E KO
+169FA ; [.4145.0020.0002] # BAMUM LETTER PHASE-E MEN
+169FB ; [.4146.0020.0002] # BAMUM LETTER PHASE-E MA
+169FC ; [.4147.0020.0002] # BAMUM LETTER PHASE-E MAQ
+169FD ; [.4148.0020.0002] # BAMUM LETTER PHASE-E TEU
+169FE ; [.4149.0020.0002] # BAMUM LETTER PHASE-E KI
+169FF ; [.414A.0020.0002] # BAMUM LETTER PHASE-E MON
+16A00 ; [.414B.0020.0002] # BAMUM LETTER PHASE-E TEN
+16A01 ; [.414C.0020.0002] # BAMUM LETTER PHASE-E FAQ
+16A02 ; [.414D.0020.0002] # BAMUM LETTER PHASE-E GHOM
+16A03 ; [.414E.0020.0002] # BAMUM LETTER PHASE-F KA
+16A04 ; [.414F.0020.0002] # BAMUM LETTER PHASE-F U
+16A05 ; [.4150.0020.0002] # BAMUM LETTER PHASE-F KU
+16A06 ; [.4151.0020.0002] # BAMUM LETTER PHASE-F EE
+16A07 ; [.4152.0020.0002] # BAMUM LETTER PHASE-F REE
+16A08 ; [.4153.0020.0002] # BAMUM LETTER PHASE-F TAE
+16A09 ; [.4154.0020.0002] # BAMUM LETTER PHASE-F NYI
+16A0A ; [.4155.0020.0002] # BAMUM LETTER PHASE-F LA
+16A0B ; [.4156.0020.0002] # BAMUM LETTER PHASE-F RII
+16A0C ; [.4157.0020.0002] # BAMUM LETTER PHASE-F RIEE
+16A0D ; [.4158.0020.0002] # BAMUM LETTER PHASE-F MEEEE
+16A0E ; [.4159.0020.0002] # BAMUM LETTER PHASE-F TAA
+16A0F ; [.415A.0020.0002] # BAMUM LETTER PHASE-F NDAA
+16A10 ; [.415B.0020.0002] # BAMUM LETTER PHASE-F NJAEM
+16A11 ; [.415C.0020.0002] # BAMUM LETTER PHASE-F M
+16A12 ; [.415D.0020.0002] # BAMUM LETTER PHASE-F SUU
+16A13 ; [.415E.0020.0002] # BAMUM LETTER PHASE-F SHII
+16A14 ; [.415F.0020.0002] # BAMUM LETTER PHASE-F SI
+16A15 ; [.4160.0020.0002] # BAMUM LETTER PHASE-F SEUX
+16A16 ; [.4161.0020.0002] # BAMUM LETTER PHASE-F KYEE
+16A17 ; [.4162.0020.0002] # BAMUM LETTER PHASE-F KET
+16A18 ; [.4163.0020.0002] # BAMUM LETTER PHASE-F NUAE
+16A19 ; [.4164.0020.0002] # BAMUM LETTER PHASE-F NU
+16A1A ; [.4165.0020.0002] # BAMUM LETTER PHASE-F NJUAE
+16A1B ; [.4166.0020.0002] # BAMUM LETTER PHASE-F YOQ
+16A1C ; [.4167.0020.0002] # BAMUM LETTER PHASE-F SHU
+16A1D ; [.4168.0020.0002] # BAMUM LETTER PHASE-F YA
+16A1E ; [.4169.0020.0002] # BAMUM LETTER PHASE-F NSHA
+16A1F ; [.416A.0020.0002] # BAMUM LETTER PHASE-F PEUX
+16A20 ; [.416B.0020.0002] # BAMUM LETTER PHASE-F NTEE
+16A21 ; [.416C.0020.0002] # BAMUM LETTER PHASE-F WUE
+16A22 ; [.416D.0020.0002] # BAMUM LETTER PHASE-F PEE
+16A23 ; [.416E.0020.0002] # BAMUM LETTER PHASE-F RU
+16A24 ; [.416F.0020.0002] # BAMUM LETTER PHASE-F NI
+16A25 ; [.4170.0020.0002] # BAMUM LETTER PHASE-F REUX
+16A26 ; [.4171.0020.0002] # BAMUM LETTER PHASE-F KEN
+16A27 ; [.4172.0020.0002] # BAMUM LETTER PHASE-F NGKWAEN
+16A28 ; [.4173.0020.0002] # BAMUM LETTER PHASE-F NGGA
+16A29 ; [.4174.0020.0002] # BAMUM LETTER PHASE-F SHO
+16A2A ; [.4175.0020.0002] # BAMUM LETTER PHASE-F PUAE
+16A2B ; [.4176.0020.0002] # BAMUM LETTER PHASE-F FOM
+16A2C ; [.4177.0020.0002] # BAMUM LETTER PHASE-F WA
+16A2D ; [.4178.0020.0002] # BAMUM LETTER PHASE-F LI
+16A2E ; [.4179.0020.0002] # BAMUM LETTER PHASE-F LOQ
+16A2F ; [.417A.0020.0002] # BAMUM LETTER PHASE-F KO
+16A30 ; [.417B.0020.0002] # BAMUM LETTER PHASE-F MBEN
+16A31 ; [.417C.0020.0002] # BAMUM LETTER PHASE-F REN
+16A32 ; [.417D.0020.0002] # BAMUM LETTER PHASE-F MA
+16A33 ; [.417E.0020.0002] # BAMUM LETTER PHASE-F MO
+16A34 ; [.417F.0020.0002] # BAMUM LETTER PHASE-F MBAA
+16A35 ; [.4180.0020.0002] # BAMUM LETTER PHASE-F TET
+16A36 ; [.4181.0020.0002] # BAMUM LETTER PHASE-F KPA
+16A37 ; [.4182.0020.0002] # BAMUM LETTER PHASE-F SAMBA
+16A38 ; [.4183.0020.0002] # BAMUM LETTER PHASE-F VUEQ
+16AD0 ; [.4184.0020.0002] # BASSA VAH LETTER ENNI
+16AD1 ; [.4185.0020.0002] # BASSA VAH LETTER KA
+16AD2 ; [.4186.0020.0002] # BASSA VAH LETTER SE
+16AD3 ; [.4187.0020.0002] # BASSA VAH LETTER FA
+16AD4 ; [.4188.0020.0002] # BASSA VAH LETTER MBE
+16AD5 ; [.4189.0020.0002] # BASSA VAH LETTER YIE
+16AD6 ; [.418A.0020.0002] # BASSA VAH LETTER GAH
+16AD7 ; [.418B.0020.0002] # BASSA VAH LETTER DHII
+16AD8 ; [.418C.0020.0002] # BASSA VAH LETTER KPAH
+16AD9 ; [.418D.0020.0002] # BASSA VAH LETTER JO
+16ADA ; [.418E.0020.0002] # BASSA VAH LETTER HWAH
+16ADB ; [.418F.0020.0002] # BASSA VAH LETTER WA
+16ADC ; [.4190.0020.0002] # BASSA VAH LETTER ZO
+16ADD ; [.4191.0020.0002] # BASSA VAH LETTER GBU
+16ADE ; [.4192.0020.0002] # BASSA VAH LETTER DO
+16ADF ; [.4193.0020.0002] # BASSA VAH LETTER CE
+16AE0 ; [.4194.0020.0002] # BASSA VAH LETTER UWU
+16AE1 ; [.4195.0020.0002] # BASSA VAH LETTER TO
+16AE2 ; [.4196.0020.0002] # BASSA VAH LETTER BA
+16AE3 ; [.4197.0020.0002] # BASSA VAH LETTER VU
+16AE4 ; [.4198.0020.0002] # BASSA VAH LETTER YEIN
+16AE5 ; [.4199.0020.0002] # BASSA VAH LETTER PA
+16AE6 ; [.419A.0020.0002] # BASSA VAH LETTER WADDA
+16AE7 ; [.419B.0020.0002] # BASSA VAH LETTER A
+16AE8 ; [.419C.0020.0002] # BASSA VAH LETTER O
+16AE9 ; [.419D.0020.0002] # BASSA VAH LETTER OO
+16AEA ; [.419E.0020.0002] # BASSA VAH LETTER U
+16AEB ; [.419F.0020.0002] # BASSA VAH LETTER EE
+16AEC ; [.41A0.0020.0002] # BASSA VAH LETTER E
+16AED ; [.41A1.0020.0002] # BASSA VAH LETTER I
+1E800 ; [.41A2.0020.0002] # MENDE KIKAKUI SYLLABLE M001 KI
+1E801 ; [.41A3.0020.0002] # MENDE KIKAKUI SYLLABLE M002 KA
+1E802 ; [.41A4.0020.0002] # MENDE KIKAKUI SYLLABLE M003 KU
+1E803 ; [.41A5.0020.0002] # MENDE KIKAKUI SYLLABLE M065 KEE
+1E804 ; [.41A6.0020.0002] # MENDE KIKAKUI SYLLABLE M095 KE
+1E805 ; [.41A7.0020.0002] # MENDE KIKAKUI SYLLABLE M076 KOO
+1E806 ; [.41A8.0020.0002] # MENDE KIKAKUI SYLLABLE M048 KO
+1E807 ; [.41A9.0020.0002] # MENDE KIKAKUI SYLLABLE M179 KUA
+1E808 ; [.41AA.0020.0002] # MENDE KIKAKUI SYLLABLE M004 WI
+1E809 ; [.41AB.0020.0002] # MENDE KIKAKUI SYLLABLE M005 WA
+1E80A ; [.41AC.0020.0002] # MENDE KIKAKUI SYLLABLE M006 WU
+1E80B ; [.41AD.0020.0002] # MENDE KIKAKUI SYLLABLE M126 WEE
+1E80C ; [.41AE.0020.0002] # MENDE KIKAKUI SYLLABLE M118 WE
+1E80D ; [.41AF.0020.0002] # MENDE KIKAKUI SYLLABLE M114 WOO
+1E80E ; [.41B0.0020.0002] # MENDE KIKAKUI SYLLABLE M045 WO
+1E80F ; [.41B1.0020.0002] # MENDE KIKAKUI SYLLABLE M194 WUI
+1E810 ; [.41B2.0020.0002] # MENDE KIKAKUI SYLLABLE M143 WEI
+1E811 ; [.41B3.0020.0002] # MENDE KIKAKUI SYLLABLE M061 WVI
+1E812 ; [.41B4.0020.0002] # MENDE KIKAKUI SYLLABLE M049 WVA
+1E813 ; [.41B5.0020.0002] # MENDE KIKAKUI SYLLABLE M139 WVE
+1E814 ; [.41B6.0020.0002] # MENDE KIKAKUI SYLLABLE M007 MIN
+1E815 ; [.41B7.0020.0002] # MENDE KIKAKUI SYLLABLE M008 MAN
+1E816 ; [.41B8.0020.0002] # MENDE KIKAKUI SYLLABLE M009 MUN
+1E817 ; [.41B9.0020.0002] # MENDE KIKAKUI SYLLABLE M059 MEN
+1E818 ; [.41BA.0020.0002] # MENDE KIKAKUI SYLLABLE M094 MON
+1E819 ; [.41BB.0020.0002] # MENDE KIKAKUI SYLLABLE M154 MUAN
+1E81A ; [.41BC.0020.0002] # MENDE KIKAKUI SYLLABLE M189 MUEN
+1E81B ; [.41BD.0020.0002] # MENDE KIKAKUI SYLLABLE M010 BI
+1E81C ; [.41BE.0020.0002] # MENDE KIKAKUI SYLLABLE M011 BA
+1E81D ; [.41BF.0020.0002] # MENDE KIKAKUI SYLLABLE M012 BU
+1E81E ; [.41C0.0020.0002] # MENDE KIKAKUI SYLLABLE M150 BEE
+1E81F ; [.41C1.0020.0002] # MENDE KIKAKUI SYLLABLE M097 BE
+1E820 ; [.41C2.0020.0002] # MENDE KIKAKUI SYLLABLE M103 BOO
+1E821 ; [.41C3.0020.0002] # MENDE KIKAKUI SYLLABLE M138 BO
+1E822 ; [.41C4.0020.0002] # MENDE KIKAKUI SYLLABLE M013 I
+1E823 ; [.41C5.0020.0002] # MENDE KIKAKUI SYLLABLE M014 A
+1E824 ; [.41C6.0020.0002] # MENDE KIKAKUI SYLLABLE M015 U
+1E825 ; [.41C7.0020.0002] # MENDE KIKAKUI SYLLABLE M163 EE
+1E826 ; [.41C8.0020.0002] # MENDE KIKAKUI SYLLABLE M100 E
+1E827 ; [.41C9.0020.0002] # MENDE KIKAKUI SYLLABLE M165 OO
+1E828 ; [.41CA.0020.0002] # MENDE KIKAKUI SYLLABLE M147 O
+1E829 ; [.41CB.0020.0002] # MENDE KIKAKUI SYLLABLE M137 EI
+1E82A ; [.41CC.0020.0002] # MENDE KIKAKUI SYLLABLE M131 IN
+1E82B ; [.41CD.0020.0002] # MENDE KIKAKUI SYLLABLE M135 IN
+1E82C ; [.41CE.0020.0002] # MENDE KIKAKUI SYLLABLE M195 AN
+1E82D ; [.41CF.0020.0002] # MENDE KIKAKUI SYLLABLE M178 EN
+1E82E ; [.41D0.0020.0002] # MENDE KIKAKUI SYLLABLE M019 SI
+1E82F ; [.41D1.0020.0002] # MENDE KIKAKUI SYLLABLE M020 SA
+1E830 ; [.41D2.0020.0002] # MENDE KIKAKUI SYLLABLE M021 SU
+1E831 ; [.41D3.0020.0002] # MENDE KIKAKUI SYLLABLE M162 SEE
+1E832 ; [.41D4.0020.0002] # MENDE KIKAKUI SYLLABLE M116 SE
+1E833 ; [.41D5.0020.0002] # MENDE KIKAKUI SYLLABLE M136 SOO
+1E834 ; [.41D6.0020.0002] # MENDE KIKAKUI SYLLABLE M079 SO
+1E835 ; [.41D7.0020.0002] # MENDE KIKAKUI SYLLABLE M196 SIA
+1E836 ; [.41D8.0020.0002] # MENDE KIKAKUI SYLLABLE M025 LI
+1E837 ; [.41D9.0020.0002] # MENDE KIKAKUI SYLLABLE M026 LA
+1E838 ; [.41DA.0020.0002] # MENDE KIKAKUI SYLLABLE M027 LU
+1E839 ; [.41DB.0020.0002] # MENDE KIKAKUI SYLLABLE M084 LEE
+1E83A ; [.41DC.0020.0002] # MENDE KIKAKUI SYLLABLE M073 LE
+1E83B ; [.41DD.0020.0002] # MENDE KIKAKUI SYLLABLE M054 LOO
+1E83C ; [.41DE.0020.0002] # MENDE KIKAKUI SYLLABLE M153 LO
+1E83D ; [.41DF.0020.0002] # MENDE KIKAKUI SYLLABLE M110 LONG LE
+1E83E ; [.41E0.0020.0002] # MENDE KIKAKUI SYLLABLE M016 DI
+1E83F ; [.41E1.0020.0002] # MENDE KIKAKUI SYLLABLE M017 DA
+1E840 ; [.41E2.0020.0002] # MENDE KIKAKUI SYLLABLE M018 DU
+1E841 ; [.41E3.0020.0002] # MENDE KIKAKUI SYLLABLE M089 DEE
+1E842 ; [.41E4.0020.0002] # MENDE KIKAKUI SYLLABLE M180 DOO
+1E843 ; [.41E5.0020.0002] # MENDE KIKAKUI SYLLABLE M181 DO
+1E844 ; [.41E6.0020.0002] # MENDE KIKAKUI SYLLABLE M022 TI
+1E845 ; [.41E7.0020.0002] # MENDE KIKAKUI SYLLABLE M023 TA
+1E846 ; [.41E8.0020.0002] # MENDE KIKAKUI SYLLABLE M024 TU
+1E847 ; [.41E9.0020.0002] # MENDE KIKAKUI SYLLABLE M091 TEE
+1E848 ; [.41EA.0020.0002] # MENDE KIKAKUI SYLLABLE M055 TE
+1E849 ; [.41EB.0020.0002] # MENDE KIKAKUI SYLLABLE M104 TOO
+1E84A ; [.41EC.0020.0002] # MENDE KIKAKUI SYLLABLE M069 TO
+1E84B ; [.41ED.0020.0002] # MENDE KIKAKUI SYLLABLE M028 JI
+1E84C ; [.41EE.0020.0002] # MENDE KIKAKUI SYLLABLE M029 JA
+1E84D ; [.41EF.0020.0002] # MENDE KIKAKUI SYLLABLE M030 JU
+1E84E ; [.41F0.0020.0002] # MENDE KIKAKUI SYLLABLE M157 JEE
+1E84F ; [.41F1.0020.0002] # MENDE KIKAKUI SYLLABLE M113 JE
+1E850 ; [.41F2.0020.0002] # MENDE KIKAKUI SYLLABLE M160 JOO
+1E851 ; [.41F3.0020.0002] # MENDE KIKAKUI SYLLABLE M063 JO
+1E852 ; [.41F4.0020.0002] # MENDE KIKAKUI SYLLABLE M175 LONG JO
+1E853 ; [.41F5.0020.0002] # MENDE KIKAKUI SYLLABLE M031 YI
+1E854 ; [.41F6.0020.0002] # MENDE KIKAKUI SYLLABLE M032 YA
+1E855 ; [.41F7.0020.0002] # MENDE KIKAKUI SYLLABLE M033 YU
+1E856 ; [.41F8.0020.0002] # MENDE KIKAKUI SYLLABLE M109 YEE
+1E857 ; [.41F9.0020.0002] # MENDE KIKAKUI SYLLABLE M080 YE
+1E858 ; [.41FA.0020.0002] # MENDE KIKAKUI SYLLABLE M141 YOO
+1E859 ; [.41FB.0020.0002] # MENDE KIKAKUI SYLLABLE M121 YO
+1E85A ; [.41FC.0020.0002] # MENDE KIKAKUI SYLLABLE M034 FI
+1E85B ; [.41FD.0020.0002] # MENDE KIKAKUI SYLLABLE M035 FA
+1E85C ; [.41FE.0020.0002] # MENDE KIKAKUI SYLLABLE M036 FU
+1E85D ; [.41FF.0020.0002] # MENDE KIKAKUI SYLLABLE M078 FEE
+1E85E ; [.4200.0020.0002] # MENDE KIKAKUI SYLLABLE M075 FE
+1E85F ; [.4201.0020.0002] # MENDE KIKAKUI SYLLABLE M133 FOO
+1E860 ; [.4202.0020.0002] # MENDE KIKAKUI SYLLABLE M088 FO
+1E861 ; [.4203.0020.0002] # MENDE KIKAKUI SYLLABLE M197 FUA
+1E862 ; [.4204.0020.0002] # MENDE KIKAKUI SYLLABLE M101 FAN
+1E863 ; [.4205.0020.0002] # MENDE KIKAKUI SYLLABLE M037 NIN
+1E864 ; [.4206.0020.0002] # MENDE KIKAKUI SYLLABLE M038 NAN
+1E865 ; [.4207.0020.0002] # MENDE KIKAKUI SYLLABLE M039 NUN
+1E866 ; [.4208.0020.0002] # MENDE KIKAKUI SYLLABLE M117 NEN
+1E867 ; [.4209.0020.0002] # MENDE KIKAKUI SYLLABLE M169 NON
+1E868 ; [.420A.0020.0002] # MENDE KIKAKUI SYLLABLE M176 HI
+1E869 ; [.420B.0020.0002] # MENDE KIKAKUI SYLLABLE M041 HA
+1E86A ; [.420C.0020.0002] # MENDE KIKAKUI SYLLABLE M186 HU
+1E86B ; [.420D.0020.0002] # MENDE KIKAKUI SYLLABLE M040 HEE
+1E86C ; [.420E.0020.0002] # MENDE KIKAKUI SYLLABLE M096 HE
+1E86D ; [.420F.0020.0002] # MENDE KIKAKUI SYLLABLE M042 HOO
+1E86E ; [.4210.0020.0002] # MENDE KIKAKUI SYLLABLE M140 HO
+1E86F ; [.4211.0020.0002] # MENDE KIKAKUI SYLLABLE M083 HEEI
+1E870 ; [.4212.0020.0002] # MENDE KIKAKUI SYLLABLE M128 HOOU
+1E871 ; [.4213.0020.0002] # MENDE KIKAKUI SYLLABLE M053 HIN
+1E872 ; [.4214.0020.0002] # MENDE KIKAKUI SYLLABLE M130 HAN
+1E873 ; [.4215.0020.0002] # MENDE KIKAKUI SYLLABLE M087 HUN
+1E874 ; [.4216.0020.0002] # MENDE KIKAKUI SYLLABLE M052 HEN
+1E875 ; [.4217.0020.0002] # MENDE KIKAKUI SYLLABLE M193 HON
+1E876 ; [.4218.0020.0002] # MENDE KIKAKUI SYLLABLE M046 HUAN
+1E877 ; [.4219.0020.0002] # MENDE KIKAKUI SYLLABLE M090 NGGI
+1E878 ; [.421A.0020.0002] # MENDE KIKAKUI SYLLABLE M043 NGGA
+1E879 ; [.421B.0020.0002] # MENDE KIKAKUI SYLLABLE M082 NGGU
+1E87A ; [.421C.0020.0002] # MENDE KIKAKUI SYLLABLE M115 NGGEE
+1E87B ; [.421D.0020.0002] # MENDE KIKAKUI SYLLABLE M146 NGGE
+1E87C ; [.421E.0020.0002] # MENDE KIKAKUI SYLLABLE M156 NGGOO
+1E87D ; [.421F.0020.0002] # MENDE KIKAKUI SYLLABLE M120 NGGO
+1E87E ; [.4220.0020.0002] # MENDE KIKAKUI SYLLABLE M159 NGGAA
+1E87F ; [.4221.0020.0002] # MENDE KIKAKUI SYLLABLE M127 NGGUA
+1E880 ; [.4222.0020.0002] # MENDE KIKAKUI SYLLABLE M086 LONG NGGE
+1E881 ; [.4223.0020.0002] # MENDE KIKAKUI SYLLABLE M106 LONG NGGOO
+1E882 ; [.4224.0020.0002] # MENDE KIKAKUI SYLLABLE M183 LONG NGGO
+1E883 ; [.4225.0020.0002] # MENDE KIKAKUI SYLLABLE M155 GI
+1E884 ; [.4226.0020.0002] # MENDE KIKAKUI SYLLABLE M111 GA
+1E885 ; [.4227.0020.0002] # MENDE KIKAKUI SYLLABLE M168 GU
+1E886 ; [.4228.0020.0002] # MENDE KIKAKUI SYLLABLE M190 GEE
+1E887 ; [.4229.0020.0002] # MENDE KIKAKUI SYLLABLE M166 GUEI
+1E888 ; [.422A.0020.0002] # MENDE KIKAKUI SYLLABLE M167 GUAN
+1E889 ; [.422B.0020.0002] # MENDE KIKAKUI SYLLABLE M184 NGEN
+1E88A ; [.422C.0020.0002] # MENDE KIKAKUI SYLLABLE M057 NGON
+1E88B ; [.422D.0020.0002] # MENDE KIKAKUI SYLLABLE M177 NGUAN
+1E88C ; [.422E.0020.0002] # MENDE KIKAKUI SYLLABLE M068 PI
+1E88D ; [.422F.0020.0002] # MENDE KIKAKUI SYLLABLE M099 PA
+1E88E ; [.4230.0020.0002] # MENDE KIKAKUI SYLLABLE M050 PU
+1E88F ; [.4231.0020.0002] # MENDE KIKAKUI SYLLABLE M081 PEE
+1E890 ; [.4232.0020.0002] # MENDE KIKAKUI SYLLABLE M051 PE
+1E891 ; [.4233.0020.0002] # MENDE KIKAKUI SYLLABLE M102 POO
+1E892 ; [.4234.0020.0002] # MENDE KIKAKUI SYLLABLE M066 PO
+1E893 ; [.4235.0020.0002] # MENDE KIKAKUI SYLLABLE M145 MBI
+1E894 ; [.4236.0020.0002] # MENDE KIKAKUI SYLLABLE M062 MBA
+1E895 ; [.4237.0020.0002] # MENDE KIKAKUI SYLLABLE M122 MBU
+1E896 ; [.4238.0020.0002] # MENDE KIKAKUI SYLLABLE M047 MBEE
+1E897 ; [.4239.0020.0002] # MENDE KIKAKUI SYLLABLE M188 MBEE
+1E898 ; [.423A.0020.0002] # MENDE KIKAKUI SYLLABLE M072 MBE
+1E899 ; [.423B.0020.0002] # MENDE KIKAKUI SYLLABLE M172 MBOO
+1E89A ; [.423C.0020.0002] # MENDE KIKAKUI SYLLABLE M174 MBO
+1E89B ; [.423D.0020.0002] # MENDE KIKAKUI SYLLABLE M187 MBUU
+1E89C ; [.423E.0020.0002] # MENDE KIKAKUI SYLLABLE M161 LONG MBE
+1E89D ; [.423F.0020.0002] # MENDE KIKAKUI SYLLABLE M105 LONG MBOO
+1E89E ; [.4240.0020.0002] # MENDE KIKAKUI SYLLABLE M142 LONG MBO
+1E89F ; [.4241.0020.0002] # MENDE KIKAKUI SYLLABLE M132 KPI
+1E8A0 ; [.4242.0020.0002] # MENDE KIKAKUI SYLLABLE M092 KPA
+1E8A1 ; [.4243.0020.0002] # MENDE KIKAKUI SYLLABLE M074 KPU
+1E8A2 ; [.4244.0020.0002] # MENDE KIKAKUI SYLLABLE M044 KPEE
+1E8A3 ; [.4245.0020.0002] # MENDE KIKAKUI SYLLABLE M108 KPE
+1E8A4 ; [.4246.0020.0002] # MENDE KIKAKUI SYLLABLE M112 KPOO
+1E8A5 ; [.4247.0020.0002] # MENDE KIKAKUI SYLLABLE M158 KPO
+1E8A6 ; [.4248.0020.0002] # MENDE KIKAKUI SYLLABLE M124 GBI
+1E8A7 ; [.4249.0020.0002] # MENDE KIKAKUI SYLLABLE M056 GBA
+1E8A8 ; [.424A.0020.0002] # MENDE KIKAKUI SYLLABLE M148 GBU
+1E8A9 ; [.424B.0020.0002] # MENDE KIKAKUI SYLLABLE M093 GBEE
+1E8AA ; [.424C.0020.0002] # MENDE KIKAKUI SYLLABLE M107 GBE
+1E8AB ; [.424D.0020.0002] # MENDE KIKAKUI SYLLABLE M071 GBOO
+1E8AC ; [.424E.0020.0002] # MENDE KIKAKUI SYLLABLE M070 GBO
+1E8AD ; [.424F.0020.0002] # MENDE KIKAKUI SYLLABLE M171 RA
+1E8AE ; [.4250.0020.0002] # MENDE KIKAKUI SYLLABLE M123 NDI
+1E8AF ; [.4251.0020.0002] # MENDE KIKAKUI SYLLABLE M129 NDA
+1E8B0 ; [.4252.0020.0002] # MENDE KIKAKUI SYLLABLE M125 NDU
+1E8B1 ; [.4253.0020.0002] # MENDE KIKAKUI SYLLABLE M191 NDEE
+1E8B2 ; [.4254.0020.0002] # MENDE KIKAKUI SYLLABLE M119 NDE
+1E8B3 ; [.4255.0020.0002] # MENDE KIKAKUI SYLLABLE M067 NDOO
+1E8B4 ; [.4256.0020.0002] # MENDE KIKAKUI SYLLABLE M064 NDO
+1E8B5 ; [.4257.0020.0002] # MENDE KIKAKUI SYLLABLE M152 NJA
+1E8B6 ; [.4258.0020.0002] # MENDE KIKAKUI SYLLABLE M192 NJU
+1E8B7 ; [.4259.0020.0002] # MENDE KIKAKUI SYLLABLE M149 NJEE
+1E8B8 ; [.425A.0020.0002] # MENDE KIKAKUI SYLLABLE M134 NJOO
+1E8B9 ; [.425B.0020.0002] # MENDE KIKAKUI SYLLABLE M182 VI
+1E8BA ; [.425C.0020.0002] # MENDE KIKAKUI SYLLABLE M185 VA
+1E8BB ; [.425D.0020.0002] # MENDE KIKAKUI SYLLABLE M151 VU
+1E8BC ; [.425E.0020.0002] # MENDE KIKAKUI SYLLABLE M173 VEE
+1E8BD ; [.425F.0020.0002] # MENDE KIKAKUI SYLLABLE M085 VE
+1E8BE ; [.4260.0020.0002] # MENDE KIKAKUI SYLLABLE M144 VOO
+1E8BF ; [.4261.0020.0002] # MENDE KIKAKUI SYLLABLE M077 VO
+1E8C0 ; [.4262.0020.0002] # MENDE KIKAKUI SYLLABLE M164 NYIN
+1E8C1 ; [.4263.0020.0002] # MENDE KIKAKUI SYLLABLE M058 NYAN
+1E8C2 ; [.4264.0020.0002] # MENDE KIKAKUI SYLLABLE M170 NYUN
+1E8C3 ; [.4265.0020.0002] # MENDE KIKAKUI SYLLABLE M098 NYEN
+1E8C4 ; [.4266.0020.0002] # MENDE KIKAKUI SYLLABLE M060 NYON
+16E60 ; [.4267.0020.0002] # MEDEFAIDRIN SMALL LETTER M
+16E40 ; [.4267.0020.0008] # MEDEFAIDRIN CAPITAL LETTER M
+16E61 ; [.4268.0020.0002] # MEDEFAIDRIN SMALL LETTER S
+16E41 ; [.4268.0020.0008] # MEDEFAIDRIN CAPITAL LETTER S
+16E62 ; [.4269.0020.0002] # MEDEFAIDRIN SMALL LETTER V
+16E42 ; [.4269.0020.0008] # MEDEFAIDRIN CAPITAL LETTER V
+16E63 ; [.426A.0020.0002] # MEDEFAIDRIN SMALL LETTER W
+16E43 ; [.426A.0020.0008] # MEDEFAIDRIN CAPITAL LETTER W
+16E64 ; [.426B.0020.0002] # MEDEFAIDRIN SMALL LETTER ATIU
+16E44 ; [.426B.0020.0008] # MEDEFAIDRIN CAPITAL LETTER ATIU
+16E65 ; [.426C.0020.0002] # MEDEFAIDRIN SMALL LETTER Z
+16E45 ; [.426C.0020.0008] # MEDEFAIDRIN CAPITAL LETTER Z
+16E66 ; [.426D.0020.0002] # MEDEFAIDRIN SMALL LETTER KP
+16E46 ; [.426D.0020.0008] # MEDEFAIDRIN CAPITAL LETTER KP
+16E67 ; [.426E.0020.0002] # MEDEFAIDRIN SMALL LETTER P
+16E47 ; [.426E.0020.0008] # MEDEFAIDRIN CAPITAL LETTER P
+16E68 ; [.426F.0020.0002] # MEDEFAIDRIN SMALL LETTER T
+16E48 ; [.426F.0020.0008] # MEDEFAIDRIN CAPITAL LETTER T
+16E69 ; [.4270.0020.0002] # MEDEFAIDRIN SMALL LETTER G
+16E49 ; [.4270.0020.0008] # MEDEFAIDRIN CAPITAL LETTER G
+16E6A ; [.4271.0020.0002] # MEDEFAIDRIN SMALL LETTER F
+16E4A ; [.4271.0020.0008] # MEDEFAIDRIN CAPITAL LETTER F
+16E6B ; [.4272.0020.0002] # MEDEFAIDRIN SMALL LETTER I
+16E4B ; [.4272.0020.0008] # MEDEFAIDRIN CAPITAL LETTER I
+16E6C ; [.4273.0020.0002] # MEDEFAIDRIN SMALL LETTER K
+16E4C ; [.4273.0020.0008] # MEDEFAIDRIN CAPITAL LETTER K
+16E6D ; [.4274.0020.0002] # MEDEFAIDRIN SMALL LETTER A
+16E4D ; [.4274.0020.0008] # MEDEFAIDRIN CAPITAL LETTER A
+16E6E ; [.4275.0020.0002] # MEDEFAIDRIN SMALL LETTER J
+16E4E ; [.4275.0020.0008] # MEDEFAIDRIN CAPITAL LETTER J
+16E6F ; [.4276.0020.0002] # MEDEFAIDRIN SMALL LETTER E
+16E4F ; [.4276.0020.0008] # MEDEFAIDRIN CAPITAL LETTER E
+16E70 ; [.4277.0020.0002] # MEDEFAIDRIN SMALL LETTER B
+16E50 ; [.4277.0020.0008] # MEDEFAIDRIN CAPITAL LETTER B
+16E71 ; [.4278.0020.0002] # MEDEFAIDRIN SMALL LETTER C
+16E51 ; [.4278.0020.0008] # MEDEFAIDRIN CAPITAL LETTER C
+16E72 ; [.4279.0020.0002] # MEDEFAIDRIN SMALL LETTER U
+16E52 ; [.4279.0020.0008] # MEDEFAIDRIN CAPITAL LETTER U
+16E73 ; [.427A.0020.0002] # MEDEFAIDRIN SMALL LETTER YU
+16E53 ; [.427A.0020.0008] # MEDEFAIDRIN CAPITAL LETTER YU
+16E74 ; [.427B.0020.0002] # MEDEFAIDRIN SMALL LETTER L
+16E54 ; [.427B.0020.0008] # MEDEFAIDRIN CAPITAL LETTER L
+16E75 ; [.427C.0020.0002] # MEDEFAIDRIN SMALL LETTER Q
+16E55 ; [.427C.0020.0008] # MEDEFAIDRIN CAPITAL LETTER Q
+16E76 ; [.427D.0020.0002] # MEDEFAIDRIN SMALL LETTER HP
+16E56 ; [.427D.0020.0008] # MEDEFAIDRIN CAPITAL LETTER HP
+16E77 ; [.427E.0020.0002] # MEDEFAIDRIN SMALL LETTER NY
+16E57 ; [.427E.0020.0008] # MEDEFAIDRIN CAPITAL LETTER NY
+16E78 ; [.427F.0020.0002] # MEDEFAIDRIN SMALL LETTER X
+16E58 ; [.427F.0020.0008] # MEDEFAIDRIN CAPITAL LETTER X
+16E79 ; [.4280.0020.0002] # MEDEFAIDRIN SMALL LETTER D
+16E59 ; [.4280.0020.0008] # MEDEFAIDRIN CAPITAL LETTER D
+16E7A ; [.4281.0020.0002] # MEDEFAIDRIN SMALL LETTER OE
+16E5A ; [.4281.0020.0008] # MEDEFAIDRIN CAPITAL LETTER OE
+16E7B ; [.4282.0020.0002] # MEDEFAIDRIN SMALL LETTER N
+16E5B ; [.4282.0020.0008] # MEDEFAIDRIN CAPITAL LETTER N
+16E7C ; [.4283.0020.0002] # MEDEFAIDRIN SMALL LETTER R
+16E5C ; [.4283.0020.0008] # MEDEFAIDRIN CAPITAL LETTER R
+16E7D ; [.4284.0020.0002] # MEDEFAIDRIN SMALL LETTER O
+16E5D ; [.4284.0020.0008] # MEDEFAIDRIN CAPITAL LETTER O
+16E7E ; [.4285.0020.0002] # MEDEFAIDRIN SMALL LETTER AI
+16E5E ; [.4285.0020.0008] # MEDEFAIDRIN CAPITAL LETTER AI
+16E7F ; [.4286.0020.0002] # MEDEFAIDRIN SMALL LETTER Y
+16E5F ; [.4286.0020.0008] # MEDEFAIDRIN CAPITAL LETTER Y
+1E922 ; [.4287.0020.0002] # ADLAM SMALL LETTER ALIF
+1E900 ; [.4287.0020.0008] # ADLAM CAPITAL LETTER ALIF
+1E923 ; [.4288.0020.0002] # ADLAM SMALL LETTER DAALI
+1E901 ; [.4288.0020.0008] # ADLAM CAPITAL LETTER DAALI
+1E924 ; [.4289.0020.0002] # ADLAM SMALL LETTER LAAM
+1E902 ; [.4289.0020.0008] # ADLAM CAPITAL LETTER LAAM
+1E925 ; [.428A.0020.0002] # ADLAM SMALL LETTER MIIM
+1E903 ; [.428A.0020.0008] # ADLAM CAPITAL LETTER MIIM
+1E926 ; [.428B.0020.0002] # ADLAM SMALL LETTER BA
+1E904 ; [.428B.0020.0008] # ADLAM CAPITAL LETTER BA
+1E927 ; [.428C.0020.0002] # ADLAM SMALL LETTER SINNYIIYHE
+1E905 ; [.428C.0020.0008] # ADLAM CAPITAL LETTER SINNYIIYHE
+1E928 ; [.428D.0020.0002] # ADLAM SMALL LETTER PE
+1E906 ; [.428D.0020.0008] # ADLAM CAPITAL LETTER PE
+1E929 ; [.428E.0020.0002] # ADLAM SMALL LETTER BHE
+1E907 ; [.428E.0020.0008] # ADLAM CAPITAL LETTER BHE
+1E92A ; [.428F.0020.0002] # ADLAM SMALL LETTER RA
+1E908 ; [.428F.0020.0008] # ADLAM CAPITAL LETTER RA
+1E92B ; [.4290.0020.0002] # ADLAM SMALL LETTER E
+1E909 ; [.4290.0020.0008] # ADLAM CAPITAL LETTER E
+1E92C ; [.4291.0020.0002] # ADLAM SMALL LETTER FA
+1E90A ; [.4291.0020.0008] # ADLAM CAPITAL LETTER FA
+1E92D ; [.4292.0020.0002] # ADLAM SMALL LETTER I
+1E90B ; [.4292.0020.0008] # ADLAM CAPITAL LETTER I
+1E92E ; [.4293.0020.0002] # ADLAM SMALL LETTER O
+1E90C ; [.4293.0020.0008] # ADLAM CAPITAL LETTER O
+1E92F ; [.4294.0020.0002] # ADLAM SMALL LETTER DHA
+1E90D ; [.4294.0020.0008] # ADLAM CAPITAL LETTER DHA
+1E930 ; [.4295.0020.0002] # ADLAM SMALL LETTER YHE
+1E90E ; [.4295.0020.0008] # ADLAM CAPITAL LETTER YHE
+1E931 ; [.4296.0020.0002] # ADLAM SMALL LETTER WAW
+1E90F ; [.4296.0020.0008] # ADLAM CAPITAL LETTER WAW
+1E932 ; [.4297.0020.0002] # ADLAM SMALL LETTER NUN
+1E910 ; [.4297.0020.0008] # ADLAM CAPITAL LETTER NUN
+1E933 ; [.4298.0020.0002] # ADLAM SMALL LETTER KAF
+1E911 ; [.4298.0020.0008] # ADLAM CAPITAL LETTER KAF
+1E934 ; [.4299.0020.0002] # ADLAM SMALL LETTER YA
+1E912 ; [.4299.0020.0008] # ADLAM CAPITAL LETTER YA
+1E935 ; [.429A.0020.0002] # ADLAM SMALL LETTER U
+1E913 ; [.429A.0020.0008] # ADLAM CAPITAL LETTER U
+1E936 ; [.429B.0020.0002] # ADLAM SMALL LETTER JIIM
+1E914 ; [.429B.0020.0008] # ADLAM CAPITAL LETTER JIIM
+1E937 ; [.429C.0020.0002] # ADLAM SMALL LETTER CHI
+1E915 ; [.429C.0020.0008] # ADLAM CAPITAL LETTER CHI
+1E938 ; [.429D.0020.0002] # ADLAM SMALL LETTER HA
+1E916 ; [.429D.0020.0008] # ADLAM CAPITAL LETTER HA
+1E939 ; [.429E.0020.0002] # ADLAM SMALL LETTER QAAF
+1E917 ; [.429E.0020.0008] # ADLAM CAPITAL LETTER QAAF
+1E93A ; [.429F.0020.0002] # ADLAM SMALL LETTER GA
+1E918 ; [.429F.0020.0008] # ADLAM CAPITAL LETTER GA
+1E93B ; [.42A0.0020.0002] # ADLAM SMALL LETTER NYA
+1E919 ; [.42A0.0020.0008] # ADLAM CAPITAL LETTER NYA
+1E93C ; [.42A1.0020.0002] # ADLAM SMALL LETTER TU
+1E91A ; [.42A1.0020.0008] # ADLAM CAPITAL LETTER TU
+1E93D ; [.42A2.0020.0002] # ADLAM SMALL LETTER NHA
+1E91B ; [.42A2.0020.0008] # ADLAM CAPITAL LETTER NHA
+1E93E ; [.42A3.0020.0002] # ADLAM SMALL LETTER VA
+1E91C ; [.42A3.0020.0008] # ADLAM CAPITAL LETTER VA
+1E93F ; [.42A4.0020.0002] # ADLAM SMALL LETTER KHA
+1E91D ; [.42A4.0020.0008] # ADLAM CAPITAL LETTER KHA
+1E940 ; [.42A5.0020.0002] # ADLAM SMALL LETTER GBE
+1E91E ; [.42A5.0020.0008] # ADLAM CAPITAL LETTER GBE
+1E941 ; [.42A6.0020.0002] # ADLAM SMALL LETTER ZAL
+1E91F ; [.42A6.0020.0008] # ADLAM CAPITAL LETTER ZAL
+1E942 ; [.42A7.0020.0002] # ADLAM SMALL LETTER KPO
+1E920 ; [.42A7.0020.0008] # ADLAM CAPITAL LETTER KPO
+1E943 ; [.42A8.0020.0002] # ADLAM SMALL LETTER SHA
+1E921 ; [.42A8.0020.0008] # ADLAM CAPITAL LETTER SHA
+1E94B ; [.42A9.0020.0002] # ADLAM NASALIZATION MARK
+1100 ; [.42AA.0020.0002] # HANGUL CHOSEONG KIYEOK
+3131 ; [.42AA.0020.0004] # HANGUL LETTER KIYEOK
+3200 ; [*0334.0020.0004][.42AA.0020.0004][*0335.0020.0004] # PARENTHESIZED HANGUL KIYEOK
+3260 ; [.42AA.0020.0006] # CIRCLED HANGUL KIYEOK
+FFA1 ; [.42AA.0020.0012] # HALFWIDTH HANGUL LETTER KIYEOK
+320E ; [*0334.0020.0004][.42AA.0020.0004][.4328.0020.0004][*0335.0020.0004] # PARENTHESIZED HANGUL KIYEOK A
+326E ; [.42AA.0020.0006][.4328.0020.0006] # CIRCLED HANGUL KIYEOK A
+1101 ; [.42AB.0020.0002] # HANGUL CHOSEONG SSANGKIYEOK
+3132 ; [.42AB.0020.0004] # HANGUL LETTER SSANGKIYEOK
+FFA2 ; [.42AB.0020.0012] # HALFWIDTH HANGUL LETTER SSANGKIYEOK
+1102 ; [.42AC.0020.0002] # HANGUL CHOSEONG NIEUN
+3134 ; [.42AC.0020.0004] # HANGUL LETTER NIEUN
+3201 ; [*0334.0020.0004][.42AC.0020.0004][*0335.0020.0004] # PARENTHESIZED HANGUL NIEUN
+3261 ; [.42AC.0020.0006] # CIRCLED HANGUL NIEUN
+FFA4 ; [.42AC.0020.0012] # HALFWIDTH HANGUL LETTER NIEUN
+320F ; [*0334.0020.0004][.42AC.0020.0004][.4328.0020.0004][*0335.0020.0004] # PARENTHESIZED HANGUL NIEUN A
+326F ; [.42AC.0020.0006][.4328.0020.0006] # CIRCLED HANGUL NIEUN A
+1103 ; [.42AD.0020.0002] # HANGUL CHOSEONG TIKEUT
+3137 ; [.42AD.0020.0004] # HANGUL LETTER TIKEUT
+3202 ; [*0334.0020.0004][.42AD.0020.0004][*0335.0020.0004] # PARENTHESIZED HANGUL TIKEUT
+3262 ; [.42AD.0020.0006] # CIRCLED HANGUL TIKEUT
+FFA7 ; [.42AD.0020.0012] # HALFWIDTH HANGUL LETTER TIKEUT
+3210 ; [*0334.0020.0004][.42AD.0020.0004][.4328.0020.0004][*0335.0020.0004] # PARENTHESIZED HANGUL TIKEUT A
+3270 ; [.42AD.0020.0006][.4328.0020.0006] # CIRCLED HANGUL TIKEUT A
+1104 ; [.42AE.0020.0002] # HANGUL CHOSEONG SSANGTIKEUT
+3138 ; [.42AE.0020.0004] # HANGUL LETTER SSANGTIKEUT
+FFA8 ; [.42AE.0020.0012] # HALFWIDTH HANGUL LETTER SSANGTIKEUT
+1105 ; [.42AF.0020.0002] # HANGUL CHOSEONG RIEUL
+3139 ; [.42AF.0020.0004] # HANGUL LETTER RIEUL
+3203 ; [*0334.0020.0004][.42AF.0020.0004][*0335.0020.0004] # PARENTHESIZED HANGUL RIEUL
+3263 ; [.42AF.0020.0006] # CIRCLED HANGUL RIEUL
+FFA9 ; [.42AF.0020.0012] # HALFWIDTH HANGUL LETTER RIEUL
+3211 ; [*0334.0020.0004][.42AF.0020.0004][.4328.0020.0004][*0335.0020.0004] # PARENTHESIZED HANGUL RIEUL A
+3271 ; [.42AF.0020.0006][.4328.0020.0006] # CIRCLED HANGUL RIEUL A
+1106 ; [.42B0.0020.0002] # HANGUL CHOSEONG MIEUM
+3141 ; [.42B0.0020.0004] # HANGUL LETTER MIEUM
+3204 ; [*0334.0020.0004][.42B0.0020.0004][*0335.0020.0004] # PARENTHESIZED HANGUL MIEUM
+3264 ; [.42B0.0020.0006] # CIRCLED HANGUL MIEUM
+FFB1 ; [.42B0.0020.0012] # HALFWIDTH HANGUL LETTER MIEUM
+3212 ; [*0334.0020.0004][.42B0.0020.0004][.4328.0020.0004][*0335.0020.0004] # PARENTHESIZED HANGUL MIEUM A
+3272 ; [.42B0.0020.0006][.4328.0020.0006] # CIRCLED HANGUL MIEUM A
+1107 ; [.42B1.0020.0002] # HANGUL CHOSEONG PIEUP
+3142 ; [.42B1.0020.0004] # HANGUL LETTER PIEUP
+3205 ; [*0334.0020.0004][.42B1.0020.0004][*0335.0020.0004] # PARENTHESIZED HANGUL PIEUP
+3265 ; [.42B1.0020.0006] # CIRCLED HANGUL PIEUP
+FFB2 ; [.42B1.0020.0012] # HALFWIDTH HANGUL LETTER PIEUP
+3213 ; [*0334.0020.0004][.42B1.0020.0004][.4328.0020.0004][*0335.0020.0004] # PARENTHESIZED HANGUL PIEUP A
+3273 ; [.42B1.0020.0006][.4328.0020.0006] # CIRCLED HANGUL PIEUP A
+1108 ; [.42B2.0020.0002] # HANGUL CHOSEONG SSANGPIEUP
+3143 ; [.42B2.0020.0004] # HANGUL LETTER SSANGPIEUP
+FFB3 ; [.42B2.0020.0012] # HALFWIDTH HANGUL LETTER SSANGPIEUP
+1109 ; [.42B3.0020.0002] # HANGUL CHOSEONG SIOS
+3145 ; [.42B3.0020.0004] # HANGUL LETTER SIOS
+3206 ; [*0334.0020.0004][.42B3.0020.0004][*0335.0020.0004] # PARENTHESIZED HANGUL SIOS
+3266 ; [.42B3.0020.0006] # CIRCLED HANGUL SIOS
+FFB5 ; [.42B3.0020.0012] # HALFWIDTH HANGUL LETTER SIOS
+3214 ; [*0334.0020.0004][.42B3.0020.0004][.4328.0020.0004][*0335.0020.0004] # PARENTHESIZED HANGUL SIOS A
+3274 ; [.42B3.0020.0006][.4328.0020.0006] # CIRCLED HANGUL SIOS A
+110A ; [.42B4.0020.0002] # HANGUL CHOSEONG SSANGSIOS
+3146 ; [.42B4.0020.0004] # HANGUL LETTER SSANGSIOS
+FFB6 ; [.42B4.0020.0012] # HALFWIDTH HANGUL LETTER SSANGSIOS
+110B ; [.42B5.0020.0002] # HANGUL CHOSEONG IEUNG
+3147 ; [.42B5.0020.0004] # HANGUL LETTER IEUNG
+3207 ; [*0334.0020.0004][.42B5.0020.0004][*0335.0020.0004] # PARENTHESIZED HANGUL IEUNG
+3267 ; [.42B5.0020.0006] # CIRCLED HANGUL IEUNG
+FFB7 ; [.42B5.0020.0012] # HALFWIDTH HANGUL LETTER IEUNG
+3215 ; [*0334.0020.0004][.42B5.0020.0004][.4328.0020.0004][*0335.0020.0004] # PARENTHESIZED HANGUL IEUNG A
+3275 ; [.42B5.0020.0006][.4328.0020.0006] # CIRCLED HANGUL IEUNG A
+321D ; [*0334.0020.0004][.42B5.0020.0004][.4330.0020.0004][.42B6.0020.0004][.432C.0020.0004][.4389.0020.0004][*0335.0020.0004] # PARENTHESIZED KOREAN CHARACTER OJEON
+321E ; [*0334.0020.0004][.42B5.0020.0004][.4330.0020.0004][.42BC.0020.0004][.4335.0020.0004][*0335.0020.0004] # PARENTHESIZED KOREAN CHARACTER O HU
+327E ; [.42B5.0020.0006][.4335.0020.0006] # CIRCLED HANGUL IEUNG U
+110C ; [.42B6.0020.0002] # HANGUL CHOSEONG CIEUC
+3148 ; [.42B6.0020.0004] # HANGUL LETTER CIEUC
+3208 ; [*0334.0020.0004][.42B6.0020.0004][*0335.0020.0004] # PARENTHESIZED HANGUL CIEUC
+3268 ; [.42B6.0020.0006] # CIRCLED HANGUL CIEUC
+FFB8 ; [.42B6.0020.0012] # HALFWIDTH HANGUL LETTER CIEUC
+3216 ; [*0334.0020.0004][.42B6.0020.0004][.4328.0020.0004][*0335.0020.0004] # PARENTHESIZED HANGUL CIEUC A
+3276 ; [.42B6.0020.0006][.4328.0020.0006] # CIRCLED HANGUL CIEUC A
+321C ; [*0334.0020.0004][.42B6.0020.0004][.4335.0020.0004][*0335.0020.0004] # PARENTHESIZED HANGUL CIEUC U
+327D ; [.42B6.0020.0006][.4335.0020.0006][.42B5.0020.0006][.433B.0020.0006] # CIRCLED KOREAN CHARACTER JUEUI
+110D ; [.42B7.0020.0002] # HANGUL CHOSEONG SSANGCIEUC
+3149 ; [.42B7.0020.0004] # HANGUL LETTER SSANGCIEUC
+FFB9 ; [.42B7.0020.0012] # HALFWIDTH HANGUL LETTER SSANGCIEUC
+110E ; [.42B8.0020.0002] # HANGUL CHOSEONG CHIEUCH
+314A ; [.42B8.0020.0004] # HANGUL LETTER CHIEUCH
+3209 ; [*0334.0020.0004][.42B8.0020.0004][*0335.0020.0004] # PARENTHESIZED HANGUL CHIEUCH
+3269 ; [.42B8.0020.0006] # CIRCLED HANGUL CHIEUCH
+FFBA ; [.42B8.0020.0012] # HALFWIDTH HANGUL LETTER CHIEUCH
+3217 ; [*0334.0020.0004][.42B8.0020.0004][.4328.0020.0004][*0335.0020.0004] # PARENTHESIZED HANGUL CHIEUCH A
+3277 ; [.42B8.0020.0006][.4328.0020.0006] # CIRCLED HANGUL CHIEUCH A
+327C ; [.42B8.0020.0006][.4328.0020.0006][.4395.0020.0006][.42AA.0020.0006][.4330.0020.0006] # CIRCLED KOREAN CHARACTER CHAMKO
+110F ; [.42B9.0020.0002] # HANGUL CHOSEONG KHIEUKH
+314B ; [.42B9.0020.0004] # HANGUL LETTER KHIEUKH
+320A ; [*0334.0020.0004][.42B9.0020.0004][*0335.0020.0004] # PARENTHESIZED HANGUL KHIEUKH
+326A ; [.42B9.0020.0006] # CIRCLED HANGUL KHIEUKH
+FFBB ; [.42B9.0020.0012] # HALFWIDTH HANGUL LETTER KHIEUKH
+3218 ; [*0334.0020.0004][.42B9.0020.0004][.4328.0020.0004][*0335.0020.0004] # PARENTHESIZED HANGUL KHIEUKH A
+3278 ; [.42B9.0020.0006][.4328.0020.0006] # CIRCLED HANGUL KHIEUKH A
+1110 ; [.42BA.0020.0002] # HANGUL CHOSEONG THIEUTH
+314C ; [.42BA.0020.0004] # HANGUL LETTER THIEUTH
+320B ; [*0334.0020.0004][.42BA.0020.0004][*0335.0020.0004] # PARENTHESIZED HANGUL THIEUTH
+326B ; [.42BA.0020.0006] # CIRCLED HANGUL THIEUTH
+FFBC ; [.42BA.0020.0012] # HALFWIDTH HANGUL LETTER THIEUTH
+3219 ; [*0334.0020.0004][.42BA.0020.0004][.4328.0020.0004][*0335.0020.0004] # PARENTHESIZED HANGUL THIEUTH A
+3279 ; [.42BA.0020.0006][.4328.0020.0006] # CIRCLED HANGUL THIEUTH A
+1111 ; [.42BB.0020.0002] # HANGUL CHOSEONG PHIEUPH
+314D ; [.42BB.0020.0004] # HANGUL LETTER PHIEUPH
+320C ; [*0334.0020.0004][.42BB.0020.0004][*0335.0020.0004] # PARENTHESIZED HANGUL PHIEUPH
+326C ; [.42BB.0020.0006] # CIRCLED HANGUL PHIEUPH
+FFBD ; [.42BB.0020.0012] # HALFWIDTH HANGUL LETTER PHIEUPH
+321A ; [*0334.0020.0004][.42BB.0020.0004][.4328.0020.0004][*0335.0020.0004] # PARENTHESIZED HANGUL PHIEUPH A
+327A ; [.42BB.0020.0006][.4328.0020.0006] # CIRCLED HANGUL PHIEUPH A
+1112 ; [.42BC.0020.0002] # HANGUL CHOSEONG HIEUH
+314E ; [.42BC.0020.0004] # HANGUL LETTER HIEUH
+320D ; [*0334.0020.0004][.42BC.0020.0004][*0335.0020.0004] # PARENTHESIZED HANGUL HIEUH
+326D ; [.42BC.0020.0006] # CIRCLED HANGUL HIEUH
+FFBE ; [.42BC.0020.0012] # HALFWIDTH HANGUL LETTER HIEUH
+321B ; [*0334.0020.0004][.42BC.0020.0004][.4328.0020.0004][*0335.0020.0004] # PARENTHESIZED HANGUL HIEUH A
+327B ; [.42BC.0020.0006][.4328.0020.0006] # CIRCLED HANGUL HIEUH A
+1113 ; [.42BD.0020.0002] # HANGUL CHOSEONG NIEUN-KIYEOK
+1114 ; [.42BE.0020.0002] # HANGUL CHOSEONG SSANGNIEUN
+3165 ; [.42BE.0020.0004] # HANGUL LETTER SSANGNIEUN
+1115 ; [.42BF.0020.0002] # HANGUL CHOSEONG NIEUN-TIKEUT
+3166 ; [.42BF.0020.0004] # HANGUL LETTER NIEUN-TIKEUT
+1116 ; [.42C0.0020.0002] # HANGUL CHOSEONG NIEUN-PIEUP
+1117 ; [.42C1.0020.0002] # HANGUL CHOSEONG TIKEUT-KIYEOK
+1118 ; [.42C2.0020.0002] # HANGUL CHOSEONG RIEUL-NIEUN
+1119 ; [.42C3.0020.0002] # HANGUL CHOSEONG SSANGRIEUL
+111A ; [.42C4.0020.0002] # HANGUL CHOSEONG RIEUL-HIEUH
+3140 ; [.42C4.0020.0004] # HANGUL LETTER RIEUL-HIEUH
+FFB0 ; [.42C4.0020.0012] # HALFWIDTH HANGUL LETTER RIEUL-HIEUH
+111B ; [.42C5.0020.0002] # HANGUL CHOSEONG KAPYEOUNRIEUL
+111C ; [.42C6.0020.0002] # HANGUL CHOSEONG MIEUM-PIEUP
+316E ; [.42C6.0020.0004] # HANGUL LETTER MIEUM-PIEUP
+111D ; [.42C7.0020.0002] # HANGUL CHOSEONG KAPYEOUNMIEUM
+3171 ; [.42C7.0020.0004] # HANGUL LETTER KAPYEOUNMIEUM
+111E ; [.42C8.0020.0002] # HANGUL CHOSEONG PIEUP-KIYEOK
+3172 ; [.42C8.0020.0004] # HANGUL LETTER PIEUP-KIYEOK
+111F ; [.42C9.0020.0002] # HANGUL CHOSEONG PIEUP-NIEUN
+1120 ; [.42CA.0020.0002] # HANGUL CHOSEONG PIEUP-TIKEUT
+3173 ; [.42CA.0020.0004] # HANGUL LETTER PIEUP-TIKEUT
+1121 ; [.42CB.0020.0002] # HANGUL CHOSEONG PIEUP-SIOS
+3144 ; [.42CB.0020.0004] # HANGUL LETTER PIEUP-SIOS
+FFB4 ; [.42CB.0020.0012] # HALFWIDTH HANGUL LETTER PIEUP-SIOS
+1122 ; [.42CC.0020.0002] # HANGUL CHOSEONG PIEUP-SIOS-KIYEOK
+3174 ; [.42CC.0020.0004] # HANGUL LETTER PIEUP-SIOS-KIYEOK
+1123 ; [.42CD.0020.0002] # HANGUL CHOSEONG PIEUP-SIOS-TIKEUT
+3175 ; [.42CD.0020.0004] # HANGUL LETTER PIEUP-SIOS-TIKEUT
+1124 ; [.42CE.0020.0002] # HANGUL CHOSEONG PIEUP-SIOS-PIEUP
+1125 ; [.42CF.0020.0002] # HANGUL CHOSEONG PIEUP-SSANGSIOS
+1126 ; [.42D0.0020.0002] # HANGUL CHOSEONG PIEUP-SIOS-CIEUC
+1127 ; [.42D1.0020.0002] # HANGUL CHOSEONG PIEUP-CIEUC
+3176 ; [.42D1.0020.0004] # HANGUL LETTER PIEUP-CIEUC
+1128 ; [.42D2.0020.0002] # HANGUL CHOSEONG PIEUP-CHIEUCH
+1129 ; [.42D3.0020.0002] # HANGUL CHOSEONG PIEUP-THIEUTH
+3177 ; [.42D3.0020.0004] # HANGUL LETTER PIEUP-THIEUTH
+112A ; [.42D4.0020.0002] # HANGUL CHOSEONG PIEUP-PHIEUPH
+112B ; [.42D5.0020.0002] # HANGUL CHOSEONG KAPYEOUNPIEUP
+3178 ; [.42D5.0020.0004] # HANGUL LETTER KAPYEOUNPIEUP
+112C ; [.42D6.0020.0002] # HANGUL CHOSEONG KAPYEOUNSSANGPIEUP
+3179 ; [.42D6.0020.0004] # HANGUL LETTER KAPYEOUNSSANGPIEUP
+112D ; [.42D7.0020.0002] # HANGUL CHOSEONG SIOS-KIYEOK
+317A ; [.42D7.0020.0004] # HANGUL LETTER SIOS-KIYEOK
+112E ; [.42D8.0020.0002] # HANGUL CHOSEONG SIOS-NIEUN
+317B ; [.42D8.0020.0004] # HANGUL LETTER SIOS-NIEUN
+112F ; [.42D9.0020.0002] # HANGUL CHOSEONG SIOS-TIKEUT
+317C ; [.42D9.0020.0004] # HANGUL LETTER SIOS-TIKEUT
+1130 ; [.42DA.0020.0002] # HANGUL CHOSEONG SIOS-RIEUL
+1131 ; [.42DB.0020.0002] # HANGUL CHOSEONG SIOS-MIEUM
+1132 ; [.42DC.0020.0002] # HANGUL CHOSEONG SIOS-PIEUP
+317D ; [.42DC.0020.0004] # HANGUL LETTER SIOS-PIEUP
+1133 ; [.42DD.0020.0002] # HANGUL CHOSEONG SIOS-PIEUP-KIYEOK
+1134 ; [.42DE.0020.0002] # HANGUL CHOSEONG SIOS-SSANGSIOS
+1135 ; [.42DF.0020.0002] # HANGUL CHOSEONG SIOS-IEUNG
+1136 ; [.42E0.0020.0002] # HANGUL CHOSEONG SIOS-CIEUC
+317E ; [.42E0.0020.0004] # HANGUL LETTER SIOS-CIEUC
+1137 ; [.42E1.0020.0002] # HANGUL CHOSEONG SIOS-CHIEUCH
+1138 ; [.42E2.0020.0002] # HANGUL CHOSEONG SIOS-KHIEUKH
+1139 ; [.42E3.0020.0002] # HANGUL CHOSEONG SIOS-THIEUTH
+113A ; [.42E4.0020.0002] # HANGUL CHOSEONG SIOS-PHIEUPH
+113B ; [.42E5.0020.0002] # HANGUL CHOSEONG SIOS-HIEUH
+113C ; [.42E6.0020.0002] # HANGUL CHOSEONG CHITUEUMSIOS
+113D ; [.42E7.0020.0002] # HANGUL CHOSEONG CHITUEUMSSANGSIOS
+113E ; [.42E8.0020.0002] # HANGUL CHOSEONG CEONGCHIEUMSIOS
+113F ; [.42E9.0020.0002] # HANGUL CHOSEONG CEONGCHIEUMSSANGSIOS
+1140 ; [.42EA.0020.0002] # HANGUL CHOSEONG PANSIOS
+317F ; [.42EA.0020.0004] # HANGUL LETTER PANSIOS
+1141 ; [.42EB.0020.0002] # HANGUL CHOSEONG IEUNG-KIYEOK
+1142 ; [.42EC.0020.0002] # HANGUL CHOSEONG IEUNG-TIKEUT
+1143 ; [.42ED.0020.0002] # HANGUL CHOSEONG IEUNG-MIEUM
+1144 ; [.42EE.0020.0002] # HANGUL CHOSEONG IEUNG-PIEUP
+1145 ; [.42EF.0020.0002] # HANGUL CHOSEONG IEUNG-SIOS
+1146 ; [.42F0.0020.0002] # HANGUL CHOSEONG IEUNG-PANSIOS
+1147 ; [.42F1.0020.0002] # HANGUL CHOSEONG SSANGIEUNG
+3180 ; [.42F1.0020.0004] # HANGUL LETTER SSANGIEUNG
+1148 ; [.42F2.0020.0002] # HANGUL CHOSEONG IEUNG-CIEUC
+1149 ; [.42F3.0020.0002] # HANGUL CHOSEONG IEUNG-CHIEUCH
+114A ; [.42F4.0020.0002] # HANGUL CHOSEONG IEUNG-THIEUTH
+114B ; [.42F5.0020.0002] # HANGUL CHOSEONG IEUNG-PHIEUPH
+114C ; [.42F6.0020.0002] # HANGUL CHOSEONG YESIEUNG
+3181 ; [.42F6.0020.0004] # HANGUL LETTER YESIEUNG
+114D ; [.42F7.0020.0002] # HANGUL CHOSEONG CIEUC-IEUNG
+114E ; [.42F8.0020.0002] # HANGUL CHOSEONG CHITUEUMCIEUC
+114F ; [.42F9.0020.0002] # HANGUL CHOSEONG CHITUEUMSSANGCIEUC
+1150 ; [.42FA.0020.0002] # HANGUL CHOSEONG CEONGCHIEUMCIEUC
+1151 ; [.42FB.0020.0002] # HANGUL CHOSEONG CEONGCHIEUMSSANGCIEUC
+1152 ; [.42FC.0020.0002] # HANGUL CHOSEONG CHIEUCH-KHIEUKH
+1153 ; [.42FD.0020.0002] # HANGUL CHOSEONG CHIEUCH-HIEUH
+1154 ; [.42FE.0020.0002] # HANGUL CHOSEONG CHITUEUMCHIEUCH
+1155 ; [.42FF.0020.0002] # HANGUL CHOSEONG CEONGCHIEUMCHIEUCH
+1156 ; [.4300.0020.0002] # HANGUL CHOSEONG PHIEUPH-PIEUP
+1157 ; [.4301.0020.0002] # HANGUL CHOSEONG KAPYEOUNPHIEUPH
+3184 ; [.4301.0020.0004] # HANGUL LETTER KAPYEOUNPHIEUPH
+1158 ; [.4302.0020.0002] # HANGUL CHOSEONG SSANGHIEUH
+3185 ; [.4302.0020.0004] # HANGUL LETTER SSANGHIEUH
+1159 ; [.4303.0020.0002] # HANGUL CHOSEONG YEORINHIEUH
+3186 ; [.4303.0020.0004] # HANGUL LETTER YEORINHIEUH
+115A ; [.4304.0020.0002] # HANGUL CHOSEONG KIYEOK-TIKEUT
+115B ; [.4305.0020.0002] # HANGUL CHOSEONG NIEUN-SIOS
+115C ; [.4306.0020.0002] # HANGUL CHOSEONG NIEUN-CIEUC
+115D ; [.4307.0020.0002] # HANGUL CHOSEONG NIEUN-HIEUH
+115E ; [.4308.0020.0002] # HANGUL CHOSEONG TIKEUT-RIEUL
+A960 ; [.4309.0020.0002] # HANGUL CHOSEONG TIKEUT-MIEUM
+A961 ; [.430A.0020.0002] # HANGUL CHOSEONG TIKEUT-PIEUP
+A962 ; [.430B.0020.0002] # HANGUL CHOSEONG TIKEUT-SIOS
+A963 ; [.430C.0020.0002] # HANGUL CHOSEONG TIKEUT-CIEUC
+A964 ; [.430D.0020.0002] # HANGUL CHOSEONG RIEUL-KIYEOK
+A965 ; [.430E.0020.0002] # HANGUL CHOSEONG RIEUL-SSANGKIYEOK
+A966 ; [.430F.0020.0002] # HANGUL CHOSEONG RIEUL-TIKEUT
+A967 ; [.4310.0020.0002] # HANGUL CHOSEONG RIEUL-SSANGTIKEUT
+A968 ; [.4311.0020.0002] # HANGUL CHOSEONG RIEUL-MIEUM
+A969 ; [.4312.0020.0002] # HANGUL CHOSEONG RIEUL-PIEUP
+A96A ; [.4313.0020.0002] # HANGUL CHOSEONG RIEUL-SSANGPIEUP
+A96B ; [.4314.0020.0002] # HANGUL CHOSEONG RIEUL-KAPYEOUNPIEUP
+A96C ; [.4315.0020.0002] # HANGUL CHOSEONG RIEUL-SIOS
+A96D ; [.4316.0020.0002] # HANGUL CHOSEONG RIEUL-CIEUC
+A96E ; [.4317.0020.0002] # HANGUL CHOSEONG RIEUL-KHIEUKH
+A96F ; [.4318.0020.0002] # HANGUL CHOSEONG MIEUM-KIYEOK
+A970 ; [.4319.0020.0002] # HANGUL CHOSEONG MIEUM-TIKEUT
+A971 ; [.431A.0020.0002] # HANGUL CHOSEONG MIEUM-SIOS
+A972 ; [.431B.0020.0002] # HANGUL CHOSEONG PIEUP-SIOS-THIEUTH
+A973 ; [.431C.0020.0002] # HANGUL CHOSEONG PIEUP-KHIEUKH
+A974 ; [.431D.0020.0002] # HANGUL CHOSEONG PIEUP-HIEUH
+A975 ; [.431E.0020.0002] # HANGUL CHOSEONG SSANGSIOS-PIEUP
+A976 ; [.431F.0020.0002] # HANGUL CHOSEONG IEUNG-RIEUL
+A977 ; [.4320.0020.0002] # HANGUL CHOSEONG IEUNG-HIEUH
+A978 ; [.4321.0020.0002] # HANGUL CHOSEONG SSANGCIEUC-HIEUH
+A979 ; [.4322.0020.0002] # HANGUL CHOSEONG SSANGTHIEUTH
+A97A ; [.4323.0020.0002] # HANGUL CHOSEONG PHIEUPH-HIEUH
+A97B ; [.4324.0020.0002] # HANGUL CHOSEONG HIEUH-SIOS
+A97C ; [.4325.0020.0002] # HANGUL CHOSEONG SSANGYEORINHIEUH
+115F ; [.4326.0020.0002] # HANGUL CHOSEONG FILLER
+1160 ; [.4327.0020.0002] # HANGUL JUNGSEONG FILLER
+3164 ; [.4327.0020.0004] # HANGUL FILLER
+FFA0 ; [.4327.0020.0012] # HALFWIDTH HANGUL FILLER
+1161 ; [.4328.0020.0002] # HANGUL JUNGSEONG A
+314F ; [.4328.0020.0004] # HANGUL LETTER A
+FFC2 ; [.4328.0020.0012] # HALFWIDTH HANGUL LETTER A
+1162 ; [.4329.0020.0002] # HANGUL JUNGSEONG AE
+3150 ; [.4329.0020.0004] # HANGUL LETTER AE
+FFC3 ; [.4329.0020.0012] # HALFWIDTH HANGUL LETTER AE
+1163 ; [.432A.0020.0002] # HANGUL JUNGSEONG YA
+3151 ; [.432A.0020.0004] # HANGUL LETTER YA
+FFC4 ; [.432A.0020.0012] # HALFWIDTH HANGUL LETTER YA
+1164 ; [.432B.0020.0002] # HANGUL JUNGSEONG YAE
+3152 ; [.432B.0020.0004] # HANGUL LETTER YAE
+FFC5 ; [.432B.0020.0012] # HALFWIDTH HANGUL LETTER YAE
+1165 ; [.432C.0020.0002] # HANGUL JUNGSEONG EO
+3153 ; [.432C.0020.0004] # HANGUL LETTER EO
+FFC6 ; [.432C.0020.0012] # HALFWIDTH HANGUL LETTER EO
+1166 ; [.432D.0020.0002] # HANGUL JUNGSEONG E
+3154 ; [.432D.0020.0004] # HANGUL LETTER E
+FFC7 ; [.432D.0020.0012] # HALFWIDTH HANGUL LETTER E
+1167 ; [.432E.0020.0002] # HANGUL JUNGSEONG YEO
+3155 ; [.432E.0020.0004] # HANGUL LETTER YEO
+FFCA ; [.432E.0020.0012] # HALFWIDTH HANGUL LETTER YEO
+1168 ; [.432F.0020.0002] # HANGUL JUNGSEONG YE
+3156 ; [.432F.0020.0004] # HANGUL LETTER YE
+FFCB ; [.432F.0020.0012] # HALFWIDTH HANGUL LETTER YE
+1169 ; [.4330.0020.0002] # HANGUL JUNGSEONG O
+3157 ; [.4330.0020.0004] # HANGUL LETTER O
+FFCC ; [.4330.0020.0012] # HALFWIDTH HANGUL LETTER O
+116A ; [.4331.0020.0002] # HANGUL JUNGSEONG WA
+3158 ; [.4331.0020.0004] # HANGUL LETTER WA
+FFCD ; [.4331.0020.0012] # HALFWIDTH HANGUL LETTER WA
+116B ; [.4332.0020.0002] # HANGUL JUNGSEONG WAE
+3159 ; [.4332.0020.0004] # HANGUL LETTER WAE
+FFCE ; [.4332.0020.0012] # HALFWIDTH HANGUL LETTER WAE
+116C ; [.4333.0020.0002] # HANGUL JUNGSEONG OE
+315A ; [.4333.0020.0004] # HANGUL LETTER OE
+FFCF ; [.4333.0020.0012] # HALFWIDTH HANGUL LETTER OE
+116D ; [.4334.0020.0002] # HANGUL JUNGSEONG YO
+315B ; [.4334.0020.0004] # HANGUL LETTER YO
+FFD2 ; [.4334.0020.0012] # HALFWIDTH HANGUL LETTER YO
+116E ; [.4335.0020.0002] # HANGUL JUNGSEONG U
+315C ; [.4335.0020.0004] # HANGUL LETTER U
+FFD3 ; [.4335.0020.0012] # HALFWIDTH HANGUL LETTER U
+116F ; [.4336.0020.0002] # HANGUL JUNGSEONG WEO
+315D ; [.4336.0020.0004] # HANGUL LETTER WEO
+FFD4 ; [.4336.0020.0012] # HALFWIDTH HANGUL LETTER WEO
+1170 ; [.4337.0020.0002] # HANGUL JUNGSEONG WE
+315E ; [.4337.0020.0004] # HANGUL LETTER WE
+FFD5 ; [.4337.0020.0012] # HALFWIDTH HANGUL LETTER WE
+1171 ; [.4338.0020.0002] # HANGUL JUNGSEONG WI
+315F ; [.4338.0020.0004] # HANGUL LETTER WI
+FFD6 ; [.4338.0020.0012] # HALFWIDTH HANGUL LETTER WI
+1172 ; [.4339.0020.0002] # HANGUL JUNGSEONG YU
+3160 ; [.4339.0020.0004] # HANGUL LETTER YU
+FFD7 ; [.4339.0020.0012] # HALFWIDTH HANGUL LETTER YU
+1173 ; [.433A.0020.0002] # HANGUL JUNGSEONG EU
+3161 ; [.433A.0020.0004] # HANGUL LETTER EU
+FFDA ; [.433A.0020.0012] # HALFWIDTH HANGUL LETTER EU
+1174 ; [.433B.0020.0002] # HANGUL JUNGSEONG YI
+3162 ; [.433B.0020.0004] # HANGUL LETTER YI
+FFDB ; [.433B.0020.0012] # HALFWIDTH HANGUL LETTER YI
+1175 ; [.433C.0020.0002] # HANGUL JUNGSEONG I
+3163 ; [.433C.0020.0004] # HANGUL LETTER I
+FFDC ; [.433C.0020.0012] # HALFWIDTH HANGUL LETTER I
+1176 ; [.433D.0020.0002] # HANGUL JUNGSEONG A-O
+1177 ; [.433E.0020.0002] # HANGUL JUNGSEONG A-U
+1178 ; [.433F.0020.0002] # HANGUL JUNGSEONG YA-O
+1179 ; [.4340.0020.0002] # HANGUL JUNGSEONG YA-YO
+117A ; [.4341.0020.0002] # HANGUL JUNGSEONG EO-O
+117B ; [.4342.0020.0002] # HANGUL JUNGSEONG EO-U
+117C ; [.4343.0020.0002] # HANGUL JUNGSEONG EO-EU
+117D ; [.4344.0020.0002] # HANGUL JUNGSEONG YEO-O
+117E ; [.4345.0020.0002] # HANGUL JUNGSEONG YEO-U
+117F ; [.4346.0020.0002] # HANGUL JUNGSEONG O-EO
+1180 ; [.4347.0020.0002] # HANGUL JUNGSEONG O-E
+1181 ; [.4348.0020.0002] # HANGUL JUNGSEONG O-YE
+1182 ; [.4349.0020.0002] # HANGUL JUNGSEONG O-O
+1183 ; [.434A.0020.0002] # HANGUL JUNGSEONG O-U
+1184 ; [.434B.0020.0002] # HANGUL JUNGSEONG YO-YA
+3187 ; [.434B.0020.0004] # HANGUL LETTER YO-YA
+1185 ; [.434C.0020.0002] # HANGUL JUNGSEONG YO-YAE
+3188 ; [.434C.0020.0004] # HANGUL LETTER YO-YAE
+1186 ; [.434D.0020.0002] # HANGUL JUNGSEONG YO-YEO
+1187 ; [.434E.0020.0002] # HANGUL JUNGSEONG YO-O
+1188 ; [.434F.0020.0002] # HANGUL JUNGSEONG YO-I
+3189 ; [.434F.0020.0004] # HANGUL LETTER YO-I
+1189 ; [.4350.0020.0002] # HANGUL JUNGSEONG U-A
+118A ; [.4351.0020.0002] # HANGUL JUNGSEONG U-AE
+118B ; [.4352.0020.0002] # HANGUL JUNGSEONG U-EO-EU
+118C ; [.4353.0020.0002] # HANGUL JUNGSEONG U-YE
+118D ; [.4354.0020.0002] # HANGUL JUNGSEONG U-U
+118E ; [.4355.0020.0002] # HANGUL JUNGSEONG YU-A
+118F ; [.4356.0020.0002] # HANGUL JUNGSEONG YU-EO
+1190 ; [.4357.0020.0002] # HANGUL JUNGSEONG YU-E
+1191 ; [.4358.0020.0002] # HANGUL JUNGSEONG YU-YEO
+318A ; [.4358.0020.0004] # HANGUL LETTER YU-YEO
+1192 ; [.4359.0020.0002] # HANGUL JUNGSEONG YU-YE
+318B ; [.4359.0020.0004] # HANGUL LETTER YU-YE
+1193 ; [.435A.0020.0002] # HANGUL JUNGSEONG YU-U
+1194 ; [.435B.0020.0002] # HANGUL JUNGSEONG YU-I
+318C ; [.435B.0020.0004] # HANGUL LETTER YU-I
+1195 ; [.435C.0020.0002] # HANGUL JUNGSEONG EU-U
+1196 ; [.435D.0020.0002] # HANGUL JUNGSEONG EU-EU
+1197 ; [.435E.0020.0002] # HANGUL JUNGSEONG YI-U
+1198 ; [.435F.0020.0002] # HANGUL JUNGSEONG I-A
+1199 ; [.4360.0020.0002] # HANGUL JUNGSEONG I-YA
+119A ; [.4361.0020.0002] # HANGUL JUNGSEONG I-O
+119B ; [.4362.0020.0002] # HANGUL JUNGSEONG I-U
+119C ; [.4363.0020.0002] # HANGUL JUNGSEONG I-EU
+119D ; [.4364.0020.0002] # HANGUL JUNGSEONG I-ARAEA
+119E ; [.4365.0020.0002] # HANGUL JUNGSEONG ARAEA
+318D ; [.4365.0020.0004] # HANGUL LETTER ARAEA
+119F ; [.4366.0020.0002] # HANGUL JUNGSEONG ARAEA-EO
+11A0 ; [.4367.0020.0002] # HANGUL JUNGSEONG ARAEA-U
+11A1 ; [.4368.0020.0002] # HANGUL JUNGSEONG ARAEA-I
+318E ; [.4368.0020.0004] # HANGUL LETTER ARAEAE
+11A2 ; [.4369.0020.0002] # HANGUL JUNGSEONG SSANGARAEA
+11A3 ; [.436A.0020.0002] # HANGUL JUNGSEONG A-EU
+11A4 ; [.436B.0020.0002] # HANGUL JUNGSEONG YA-U
+11A5 ; [.436C.0020.0002] # HANGUL JUNGSEONG YEO-YA
+11A6 ; [.436D.0020.0002] # HANGUL JUNGSEONG O-YA
+11A7 ; [.436E.0020.0002] # HANGUL JUNGSEONG O-YAE
+D7B0 ; [.436F.0020.0002] # HANGUL JUNGSEONG O-YEO
+D7B1 ; [.4370.0020.0002] # HANGUL JUNGSEONG O-O-I
+D7B2 ; [.4371.0020.0002] # HANGUL JUNGSEONG YO-A
+D7B3 ; [.4372.0020.0002] # HANGUL JUNGSEONG YO-AE
+D7B4 ; [.4373.0020.0002] # HANGUL JUNGSEONG YO-EO
+D7B5 ; [.4374.0020.0002] # HANGUL JUNGSEONG U-YEO
+D7B6 ; [.4375.0020.0002] # HANGUL JUNGSEONG U-I-I
+D7B7 ; [.4376.0020.0002] # HANGUL JUNGSEONG YU-AE
+D7B8 ; [.4377.0020.0002] # HANGUL JUNGSEONG YU-O
+D7B9 ; [.4378.0020.0002] # HANGUL JUNGSEONG EU-A
+D7BA ; [.4379.0020.0002] # HANGUL JUNGSEONG EU-EO
+D7BB ; [.437A.0020.0002] # HANGUL JUNGSEONG EU-E
+D7BC ; [.437B.0020.0002] # HANGUL JUNGSEONG EU-O
+D7BD ; [.437C.0020.0002] # HANGUL JUNGSEONG I-YA-O
+D7BE ; [.437D.0020.0002] # HANGUL JUNGSEONG I-YAE
+D7BF ; [.437E.0020.0002] # HANGUL JUNGSEONG I-YEO
+D7C0 ; [.437F.0020.0002] # HANGUL JUNGSEONG I-YE
+D7C1 ; [.4380.0020.0002] # HANGUL JUNGSEONG I-O-I
+D7C2 ; [.4381.0020.0002] # HANGUL JUNGSEONG I-YO
+D7C3 ; [.4382.0020.0002] # HANGUL JUNGSEONG I-YU
+D7C4 ; [.4383.0020.0002] # HANGUL JUNGSEONG I-I
+D7C5 ; [.4384.0020.0002] # HANGUL JUNGSEONG ARAEA-A
+D7C6 ; [.4385.0020.0002] # HANGUL JUNGSEONG ARAEA-E
+11A8 ; [.4386.0020.0002] # HANGUL JONGSEONG KIYEOK
+11A9 ; [.4387.0020.0002] # HANGUL JONGSEONG SSANGKIYEOK
+11AA ; [.4388.0020.0002] # HANGUL JONGSEONG KIYEOK-SIOS
+3133 ; [.4388.0020.0004] # HANGUL LETTER KIYEOK-SIOS
+FFA3 ; [.4388.0020.0012] # HALFWIDTH HANGUL LETTER KIYEOK-SIOS
+11AB ; [.4389.0020.0002] # HANGUL JONGSEONG NIEUN
+11AC ; [.438A.0020.0002] # HANGUL JONGSEONG NIEUN-CIEUC
+3135 ; [.438A.0020.0004] # HANGUL LETTER NIEUN-CIEUC
+FFA5 ; [.438A.0020.0012] # HALFWIDTH HANGUL LETTER NIEUN-CIEUC
+11AD ; [.438B.0020.0002] # HANGUL JONGSEONG NIEUN-HIEUH
+3136 ; [.438B.0020.0004] # HANGUL LETTER NIEUN-HIEUH
+FFA6 ; [.438B.0020.0012] # HALFWIDTH HANGUL LETTER NIEUN-HIEUH
+11AE ; [.438C.0020.0002] # HANGUL JONGSEONG TIKEUT
+11AF ; [.438D.0020.0002] # HANGUL JONGSEONG RIEUL
+11B0 ; [.438E.0020.0002] # HANGUL JONGSEONG RIEUL-KIYEOK
+313A ; [.438E.0020.0004] # HANGUL LETTER RIEUL-KIYEOK
+FFAA ; [.438E.0020.0012] # HALFWIDTH HANGUL LETTER RIEUL-KIYEOK
+11B1 ; [.438F.0020.0002] # HANGUL JONGSEONG RIEUL-MIEUM
+313B ; [.438F.0020.0004] # HANGUL LETTER RIEUL-MIEUM
+FFAB ; [.438F.0020.0012] # HALFWIDTH HANGUL LETTER RIEUL-MIEUM
+11B2 ; [.4390.0020.0002] # HANGUL JONGSEONG RIEUL-PIEUP
+313C ; [.4390.0020.0004] # HANGUL LETTER RIEUL-PIEUP
+FFAC ; [.4390.0020.0012] # HALFWIDTH HANGUL LETTER RIEUL-PIEUP
+11B3 ; [.4391.0020.0002] # HANGUL JONGSEONG RIEUL-SIOS
+313D ; [.4391.0020.0004] # HANGUL LETTER RIEUL-SIOS
+FFAD ; [.4391.0020.0012] # HALFWIDTH HANGUL LETTER RIEUL-SIOS
+11B4 ; [.4392.0020.0002] # HANGUL JONGSEONG RIEUL-THIEUTH
+313E ; [.4392.0020.0004] # HANGUL LETTER RIEUL-THIEUTH
+FFAE ; [.4392.0020.0012] # HALFWIDTH HANGUL LETTER RIEUL-THIEUTH
+11B5 ; [.4393.0020.0002] # HANGUL JONGSEONG RIEUL-PHIEUPH
+313F ; [.4393.0020.0004] # HANGUL LETTER RIEUL-PHIEUPH
+FFAF ; [.4393.0020.0012] # HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH
+11B6 ; [.4394.0020.0002] # HANGUL JONGSEONG RIEUL-HIEUH
+11B7 ; [.4395.0020.0002] # HANGUL JONGSEONG MIEUM
+11B8 ; [.4396.0020.0002] # HANGUL JONGSEONG PIEUP
+11B9 ; [.4397.0020.0002] # HANGUL JONGSEONG PIEUP-SIOS
+11BA ; [.4398.0020.0002] # HANGUL JONGSEONG SIOS
+11BB ; [.4399.0020.0002] # HANGUL JONGSEONG SSANGSIOS
+11BC ; [.439A.0020.0002] # HANGUL JONGSEONG IEUNG
+11BD ; [.439B.0020.0002] # HANGUL JONGSEONG CIEUC
+11BE ; [.439C.0020.0002] # HANGUL JONGSEONG CHIEUCH
+11BF ; [.439D.0020.0002] # HANGUL JONGSEONG KHIEUKH
+11C0 ; [.439E.0020.0002] # HANGUL JONGSEONG THIEUTH
+11C1 ; [.439F.0020.0002] # HANGUL JONGSEONG PHIEUPH
+11C2 ; [.43A0.0020.0002] # HANGUL JONGSEONG HIEUH
+11C3 ; [.43A1.0020.0002] # HANGUL JONGSEONG KIYEOK-RIEUL
+11C4 ; [.43A2.0020.0002] # HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK
+11C5 ; [.43A3.0020.0002] # HANGUL JONGSEONG NIEUN-KIYEOK
+11C6 ; [.43A4.0020.0002] # HANGUL JONGSEONG NIEUN-TIKEUT
+11C7 ; [.43A5.0020.0002] # HANGUL JONGSEONG NIEUN-SIOS
+3167 ; [.43A5.0020.0004] # HANGUL LETTER NIEUN-SIOS
+11C8 ; [.43A6.0020.0002] # HANGUL JONGSEONG NIEUN-PANSIOS
+3168 ; [.43A6.0020.0004] # HANGUL LETTER NIEUN-PANSIOS
+11C9 ; [.43A7.0020.0002] # HANGUL JONGSEONG NIEUN-THIEUTH
+11CA ; [.43A8.0020.0002] # HANGUL JONGSEONG TIKEUT-KIYEOK
+11CB ; [.43A9.0020.0002] # HANGUL JONGSEONG TIKEUT-RIEUL
+11CC ; [.43AA.0020.0002] # HANGUL JONGSEONG RIEUL-KIYEOK-SIOS
+3169 ; [.43AA.0020.0004] # HANGUL LETTER RIEUL-KIYEOK-SIOS
+11CD ; [.43AB.0020.0002] # HANGUL JONGSEONG RIEUL-NIEUN
+11CE ; [.43AC.0020.0002] # HANGUL JONGSEONG RIEUL-TIKEUT
+316A ; [.43AC.0020.0004] # HANGUL LETTER RIEUL-TIKEUT
+11CF ; [.43AD.0020.0002] # HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH
+11D0 ; [.43AE.0020.0002] # HANGUL JONGSEONG SSANGRIEUL
+11D1 ; [.43AF.0020.0002] # HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK
+11D2 ; [.43B0.0020.0002] # HANGUL JONGSEONG RIEUL-MIEUM-SIOS
+11D3 ; [.43B1.0020.0002] # HANGUL JONGSEONG RIEUL-PIEUP-SIOS
+316B ; [.43B1.0020.0004] # HANGUL LETTER RIEUL-PIEUP-SIOS
+11D4 ; [.43B2.0020.0002] # HANGUL JONGSEONG RIEUL-PIEUP-HIEUH
+11D5 ; [.43B3.0020.0002] # HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP
+11D6 ; [.43B4.0020.0002] # HANGUL JONGSEONG RIEUL-SSANGSIOS
+11D7 ; [.43B5.0020.0002] # HANGUL JONGSEONG RIEUL-PANSIOS
+316C ; [.43B5.0020.0004] # HANGUL LETTER RIEUL-PANSIOS
+11D8 ; [.43B6.0020.0002] # HANGUL JONGSEONG RIEUL-KHIEUKH
+11D9 ; [.43B7.0020.0002] # HANGUL JONGSEONG RIEUL-YEORINHIEUH
+316D ; [.43B7.0020.0004] # HANGUL LETTER RIEUL-YEORINHIEUH
+11DA ; [.43B8.0020.0002] # HANGUL JONGSEONG MIEUM-KIYEOK
+11DB ; [.43B9.0020.0002] # HANGUL JONGSEONG MIEUM-RIEUL
+11DC ; [.43BA.0020.0002] # HANGUL JONGSEONG MIEUM-PIEUP
+11DD ; [.43BB.0020.0002] # HANGUL JONGSEONG MIEUM-SIOS
+316F ; [.43BB.0020.0004] # HANGUL LETTER MIEUM-SIOS
+11DE ; [.43BC.0020.0002] # HANGUL JONGSEONG MIEUM-SSANGSIOS
+11DF ; [.43BD.0020.0002] # HANGUL JONGSEONG MIEUM-PANSIOS
+3170 ; [.43BD.0020.0004] # HANGUL LETTER MIEUM-PANSIOS
+11E0 ; [.43BE.0020.0002] # HANGUL JONGSEONG MIEUM-CHIEUCH
+11E1 ; [.43BF.0020.0002] # HANGUL JONGSEONG MIEUM-HIEUH
+11E2 ; [.43C0.0020.0002] # HANGUL JONGSEONG KAPYEOUNMIEUM
+11E3 ; [.43C1.0020.0002] # HANGUL JONGSEONG PIEUP-RIEUL
+11E4 ; [.43C2.0020.0002] # HANGUL JONGSEONG PIEUP-PHIEUPH
+11E5 ; [.43C3.0020.0002] # HANGUL JONGSEONG PIEUP-HIEUH
+11E6 ; [.43C4.0020.0002] # HANGUL JONGSEONG KAPYEOUNPIEUP
+11E7 ; [.43C5.0020.0002] # HANGUL JONGSEONG SIOS-KIYEOK
+11E8 ; [.43C6.0020.0002] # HANGUL JONGSEONG SIOS-TIKEUT
+11E9 ; [.43C7.0020.0002] # HANGUL JONGSEONG SIOS-RIEUL
+11EA ; [.43C8.0020.0002] # HANGUL JONGSEONG SIOS-PIEUP
+11EB ; [.43C9.0020.0002] # HANGUL JONGSEONG PANSIOS
+11EC ; [.43CA.0020.0002] # HANGUL JONGSEONG IEUNG-KIYEOK
+11ED ; [.43CB.0020.0002] # HANGUL JONGSEONG IEUNG-SSANGKIYEOK
+11EE ; [.43CC.0020.0002] # HANGUL JONGSEONG SSANGIEUNG
+11EF ; [.43CD.0020.0002] # HANGUL JONGSEONG IEUNG-KHIEUKH
+11F0 ; [.43CE.0020.0002] # HANGUL JONGSEONG YESIEUNG
+11F1 ; [.43CF.0020.0002] # HANGUL JONGSEONG YESIEUNG-SIOS
+3182 ; [.43CF.0020.0004] # HANGUL LETTER YESIEUNG-SIOS
+11F2 ; [.43D0.0020.0002] # HANGUL JONGSEONG YESIEUNG-PANSIOS
+3183 ; [.43D0.0020.0004] # HANGUL LETTER YESIEUNG-PANSIOS
+11F3 ; [.43D1.0020.0002] # HANGUL JONGSEONG PHIEUPH-PIEUP
+11F4 ; [.43D2.0020.0002] # HANGUL JONGSEONG KAPYEOUNPHIEUPH
+11F5 ; [.43D3.0020.0002] # HANGUL JONGSEONG HIEUH-NIEUN
+11F6 ; [.43D4.0020.0002] # HANGUL JONGSEONG HIEUH-RIEUL
+11F7 ; [.43D5.0020.0002] # HANGUL JONGSEONG HIEUH-MIEUM
+11F8 ; [.43D6.0020.0002] # HANGUL JONGSEONG HIEUH-PIEUP
+11F9 ; [.43D7.0020.0002] # HANGUL JONGSEONG YEORINHIEUH
+11FA ; [.43D8.0020.0002] # HANGUL JONGSEONG KIYEOK-NIEUN
+11FB ; [.43D9.0020.0002] # HANGUL JONGSEONG KIYEOK-PIEUP
+11FC ; [.43DA.0020.0002] # HANGUL JONGSEONG KIYEOK-CHIEUCH
+11FD ; [.43DB.0020.0002] # HANGUL JONGSEONG KIYEOK-KHIEUKH
+11FE ; [.43DC.0020.0002] # HANGUL JONGSEONG KIYEOK-HIEUH
+11FF ; [.43DD.0020.0002] # HANGUL JONGSEONG SSANGNIEUN
+D7CB ; [.43DE.0020.0002] # HANGUL JONGSEONG NIEUN-RIEUL
+D7CC ; [.43DF.0020.0002] # HANGUL JONGSEONG NIEUN-CHIEUCH
+D7CD ; [.43E0.0020.0002] # HANGUL JONGSEONG SSANGTIKEUT
+D7CE ; [.43E1.0020.0002] # HANGUL JONGSEONG SSANGTIKEUT-PIEUP
+D7CF ; [.43E2.0020.0002] # HANGUL JONGSEONG TIKEUT-PIEUP
+D7D0 ; [.43E3.0020.0002] # HANGUL JONGSEONG TIKEUT-SIOS
+D7D1 ; [.43E4.0020.0002] # HANGUL JONGSEONG TIKEUT-SIOS-KIYEOK
+D7D2 ; [.43E5.0020.0002] # HANGUL JONGSEONG TIKEUT-CIEUC
+D7D3 ; [.43E6.0020.0002] # HANGUL JONGSEONG TIKEUT-CHIEUCH
+D7D4 ; [.43E7.0020.0002] # HANGUL JONGSEONG TIKEUT-THIEUTH
+D7D5 ; [.43E8.0020.0002] # HANGUL JONGSEONG RIEUL-SSANGKIYEOK
+D7D6 ; [.43E9.0020.0002] # HANGUL JONGSEONG RIEUL-KIYEOK-HIEUH
+D7D7 ; [.43EA.0020.0002] # HANGUL JONGSEONG SSANGRIEUL-KHIEUKH
+D7D8 ; [.43EB.0020.0002] # HANGUL JONGSEONG RIEUL-MIEUM-HIEUH
+D7D9 ; [.43EC.0020.0002] # HANGUL JONGSEONG RIEUL-PIEUP-TIKEUT
+D7DA ; [.43ED.0020.0002] # HANGUL JONGSEONG RIEUL-PIEUP-PHIEUPH
+D7DB ; [.43EE.0020.0002] # HANGUL JONGSEONG RIEUL-YESIEUNG
+D7DC ; [.43EF.0020.0002] # HANGUL JONGSEONG RIEUL-YEORINHIEUH-HIEUH
+D7DD ; [.43F0.0020.0002] # HANGUL JONGSEONG KAPYEOUNRIEUL
+D7DE ; [.43F1.0020.0002] # HANGUL JONGSEONG MIEUM-NIEUN
+D7DF ; [.43F2.0020.0002] # HANGUL JONGSEONG MIEUM-SSANGNIEUN
+D7E0 ; [.43F3.0020.0002] # HANGUL JONGSEONG SSANGMIEUM
+D7E1 ; [.43F4.0020.0002] # HANGUL JONGSEONG MIEUM-PIEUP-SIOS
+D7E2 ; [.43F5.0020.0002] # HANGUL JONGSEONG MIEUM-CIEUC
+D7E3 ; [.43F6.0020.0002] # HANGUL JONGSEONG PIEUP-TIKEUT
+D7E4 ; [.43F7.0020.0002] # HANGUL JONGSEONG PIEUP-RIEUL-PHIEUPH
+D7E5 ; [.43F8.0020.0002] # HANGUL JONGSEONG PIEUP-MIEUM
+D7E6 ; [.43F9.0020.0002] # HANGUL JONGSEONG SSANGPIEUP
+D7E7 ; [.43FA.0020.0002] # HANGUL JONGSEONG PIEUP-SIOS-TIKEUT
+D7E8 ; [.43FB.0020.0002] # HANGUL JONGSEONG PIEUP-CIEUC
+D7E9 ; [.43FC.0020.0002] # HANGUL JONGSEONG PIEUP-CHIEUCH
+D7EA ; [.43FD.0020.0002] # HANGUL JONGSEONG SIOS-MIEUM
+D7EB ; [.43FE.0020.0002] # HANGUL JONGSEONG SIOS-KAPYEOUNPIEUP
+D7EC ; [.43FF.0020.0002] # HANGUL JONGSEONG SSANGSIOS-KIYEOK
+D7ED ; [.4400.0020.0002] # HANGUL JONGSEONG SSANGSIOS-TIKEUT
+D7EE ; [.4401.0020.0002] # HANGUL JONGSEONG SIOS-PANSIOS
+D7EF ; [.4402.0020.0002] # HANGUL JONGSEONG SIOS-CIEUC
+D7F0 ; [.4403.0020.0002] # HANGUL JONGSEONG SIOS-CHIEUCH
+D7F1 ; [.4404.0020.0002] # HANGUL JONGSEONG SIOS-THIEUTH
+D7F2 ; [.4405.0020.0002] # HANGUL JONGSEONG SIOS-HIEUH
+D7F3 ; [.4406.0020.0002] # HANGUL JONGSEONG PANSIOS-PIEUP
+D7F4 ; [.4407.0020.0002] # HANGUL JONGSEONG PANSIOS-KAPYEOUNPIEUP
+D7F5 ; [.4408.0020.0002] # HANGUL JONGSEONG YESIEUNG-MIEUM
+D7F6 ; [.4409.0020.0002] # HANGUL JONGSEONG YESIEUNG-HIEUH
+D7F7 ; [.440A.0020.0002] # HANGUL JONGSEONG CIEUC-PIEUP
+D7F8 ; [.440B.0020.0002] # HANGUL JONGSEONG CIEUC-SSANGPIEUP
+D7F9 ; [.440C.0020.0002] # HANGUL JONGSEONG SSANGCIEUC
+D7FA ; [.440D.0020.0002] # HANGUL JONGSEONG PHIEUPH-SIOS
+D7FB ; [.440E.0020.0002] # HANGUL JONGSEONG PHIEUPH-THIEUTH
+3041 ; [.440F.0020.000D] # HIRAGANA LETTER SMALL A
+3042 ; [.440F.0020.000E] # HIRAGANA LETTER A
+30A1 ; [.440F.0020.000F] # KATAKANA LETTER SMALL A
+FF67 ; [.440F.0020.0010] # HALFWIDTH KATAKANA LETTER SMALL A
+30A2 ; [.440F.0020.0011] # KATAKANA LETTER A
+FF71 ; [.440F.0020.0012] # HALFWIDTH KATAKANA LETTER A
+32D0 ; [.440F.0020.0013] # CIRCLED KATAKANA A
+3303 ; [.440F.0020.001C][.2032.0020.001C][.443A.0020.001C] # SQUARE AARU
+3300 ; [.440F.0020.001C][.4429.0020.001C][.0000.0038.001C][.2032.0020.001C][.4423.0020.001C] # SQUARE APAATO
+3301 ; [.440F.0020.001C][.443A.0020.001C][.442B.0020.001C][.440F.0020.001C] # SQUARE ARUHUA
+3302 ; [.440F.0020.001C][.4442.0020.001C][.442C.0020.001C][.0000.0038.001C][.440F.0020.001C] # SQUARE ANPEA
+3043 ; [.4410.0020.000D] # HIRAGANA LETTER SMALL I
+3044 ; [.4410.0020.000E] # HIRAGANA LETTER I
+30A3 ; [.4410.0020.000F] # KATAKANA LETTER SMALL I
+FF68 ; [.4410.0020.0010] # HALFWIDTH KATAKANA LETTER SMALL I
+30A4 ; [.4410.0020.0011] # KATAKANA LETTER I
+FF72 ; [.4410.0020.0012] # HALFWIDTH KATAKANA LETTER I
+32D1 ; [.4410.0020.0013] # CIRCLED KATAKANA I
+3304 ; [.4410.0020.001C][.4425.0020.001C][.4442.0020.001C][.4417.0020.001C][.0000.0037.001C] # SQUARE ININGU
+3305 ; [.4410.0020.001C][.4442.0020.001C][.4420.0020.001C] # SQUARE INTI
+3045 ; [.4411.0020.000D] # HIRAGANA LETTER SMALL U
+3046 ; [.4411.0020.000E] # HIRAGANA LETTER U
+30A5 ; [.4411.0020.000F] # KATAKANA LETTER SMALL U
+FF69 ; [.4411.0020.0010] # HALFWIDTH KATAKANA LETTER SMALL U
+30A6 ; [.4411.0020.0011] # KATAKANA LETTER U
+FF73 ; [.4411.0020.0012] # HALFWIDTH KATAKANA LETTER U
+32D2 ; [.4411.0020.0013] # CIRCLED KATAKANA U
+3094 ; [.4411.0020.000E][.0000.0037.0002] # HIRAGANA LETTER VU
+30F4 ; [.4411.0020.0011][.0000.0037.0002] # KATAKANA LETTER VU
+3306 ; [.4411.0020.001C][.4414.0020.001C][.4442.0020.001C] # SQUARE UON
+1B000 ; [.4412.0020.0011] # KATAKANA LETTER ARCHAIC E
+3047 ; [.4413.0020.000D] # HIRAGANA LETTER SMALL E
+3048 ; [.4413.0020.000E] # HIRAGANA LETTER E
+30A7 ; [.4413.0020.000F] # KATAKANA LETTER SMALL E
+FF6A ; [.4413.0020.0010] # HALFWIDTH KATAKANA LETTER SMALL E
+30A8 ; [.4413.0020.0011] # KATAKANA LETTER E
+FF74 ; [.4413.0020.0012] # HALFWIDTH KATAKANA LETTER E
+32D3 ; [.4413.0020.0013] # CIRCLED KATAKANA E
+3308 ; [.4413.0020.001C][.2032.0020.001C][.4415.0020.001C][.2032.0020.001C] # SQUARE EEKAA
+3307 ; [.4413.0020.001C][.441C.0020.001C][.4417.0020.001C][.2032.0020.001C][.4423.0020.001C][.0000.0037.001C] # SQUARE ESUKUUDO
+3049 ; [.4414.0020.000D] # HIRAGANA LETTER SMALL O
+304A ; [.4414.0020.000E] # HIRAGANA LETTER O
+30A9 ; [.4414.0020.000F] # KATAKANA LETTER SMALL O
+FF6B ; [.4414.0020.0010] # HALFWIDTH KATAKANA LETTER SMALL O
+30AA ; [.4414.0020.0011] # KATAKANA LETTER O
+FF75 ; [.4414.0020.0012] # HALFWIDTH KATAKANA LETTER O
+32D4 ; [.4414.0020.0013] # CIRCLED KATAKANA O
+330A ; [.4414.0020.001C][.2032.0020.001C][.4430.0020.001C] # SQUARE OOMU
+3309 ; [.4414.0020.001C][.4442.0020.001C][.441C.0020.001C] # SQUARE ONSU
+3095 ; [.4415.0020.000D] # HIRAGANA LETTER SMALL KA
+304B ; [.4415.0020.000E] # HIRAGANA LETTER KA
+30F5 ; [.4415.0020.000F] # KATAKANA LETTER SMALL KA
+30AB ; [.4415.0020.0011] # KATAKANA LETTER KA
+FF76 ; [.4415.0020.0012] # HALFWIDTH KATAKANA LETTER KA
+32D5 ; [.4415.0020.0013] # CIRCLED KATAKANA KA
+304C ; [.4415.0020.000E][.0000.0037.0002] # HIRAGANA LETTER GA
+30AC ; [.4415.0020.0011][.0000.0037.0002] # KATAKANA LETTER GA
+330B ; [.4415.0020.001C][.4410.0020.001C][.4439.0020.001C] # SQUARE KAIRI
+330C ; [.4415.0020.001C][.4438.0020.001C][.4421.0020.001C][.4423.0020.001C] # SQUARE KARATTO
+330D ; [.4415.0020.001C][.443C.0020.001C][.4439.0020.001C][.2032.0020.001C] # SQUARE KARORII
+330E ; [.4415.0020.001C][.0000.0037.001C][.443C.0020.001C][.4442.0020.001C] # SQUARE GARON
+330F ; [.4415.0020.001C][.0000.0037.001C][.4442.0020.001C][.442E.0020.001C] # SQUARE GANMA
+304D ; [.4416.0020.000E] # HIRAGANA LETTER KI
+30AD ; [.4416.0020.0011] # KATAKANA LETTER KI
+FF77 ; [.4416.0020.0012] # HALFWIDTH KATAKANA LETTER KI
+32D6 ; [.4416.0020.0013] # CIRCLED KATAKANA KI
+304E ; [.4416.0020.000E][.0000.0037.0002] # HIRAGANA LETTER GI
+30AE ; [.4416.0020.0011][.0000.0037.0002] # KATAKANA LETTER GI
+3310 ; [.4416.0020.001C][.0000.0037.001C][.4415.0020.001C][.0000.0037.001C] # SQUARE GIGA
+3311 ; [.4416.0020.001C][.0000.0037.001C][.4425.0020.001C][.2032.0020.001C] # SQUARE GINII
+3312 ; [.4416.0020.001C][.4435.0020.001C][.4439.0020.001C][.2032.0020.001C] # SQUARE KYURII
+3313 ; [.4416.0020.001C][.0000.0037.001C][.443A.0020.001C][.441F.0020.001C][.0000.0037.001C][.2032.0020.001C] # SQUARE GIRUDAA
+3314 ; [.4416.0020.001C][.443C.0020.001C] # SQUARE KIRO
+3315 ; [.4416.0020.001C][.443C.0020.001C][.4417.0020.001C][.0000.0037.001C][.4438.0020.001C][.4430.0020.001C] # SQUARE KIROGURAMU
+3316 ; [.4416.0020.001C][.443C.0020.001C][.4431.0020.001C][.2032.0020.001C][.4423.0020.001C][.443A.0020.001C] # SQUARE KIROMEETORU
+3317 ; [.4416.0020.001C][.443C.0020.001C][.443D.0020.001C][.4421.0020.001C][.4423.0020.001C] # SQUARE KIROWATTO
+304F ; [.4417.0020.000E] # HIRAGANA LETTER KU
+31F0 ; [.4417.0020.000F] # KATAKANA LETTER SMALL KU
+30AF ; [.4417.0020.0011] # KATAKANA LETTER KU
+FF78 ; [.4417.0020.0012] # HALFWIDTH KATAKANA LETTER KU
+32D7 ; [.4417.0020.0013] # CIRCLED KATAKANA KU
+3050 ; [.4417.0020.000E][.0000.0037.0002] # HIRAGANA LETTER GU
+30B0 ; [.4417.0020.0011][.0000.0037.0002] # KATAKANA LETTER GU
+3318 ; [.4417.0020.001C][.0000.0037.001C][.4438.0020.001C][.4430.0020.001C] # SQUARE GURAMU
+3319 ; [.4417.0020.001C][.0000.0037.001C][.4438.0020.001C][.4430.0020.001C][.4423.0020.001C][.4442.0020.001C] # SQUARE GURAMUTON
+331A ; [.4417.0020.001C][.443A.0020.001C][.441D.0020.001C][.0000.0037.001C][.4410.0020.001C][.443C.0020.001C] # SQUARE KURUZEIRO
+331B ; [.4417.0020.001C][.443C.0020.001C][.2032.0020.001C][.4427.0020.001C] # SQUARE KUROONE
+3096 ; [.4418.0020.000D] # HIRAGANA LETTER SMALL KE
+3051 ; [.4418.0020.000E] # HIRAGANA LETTER KE
+30F6 ; [.4418.0020.000F] # KATAKANA LETTER SMALL KE
+30B1 ; [.4418.0020.0011] # KATAKANA LETTER KE
+FF79 ; [.4418.0020.0012] # HALFWIDTH KATAKANA LETTER KE
+32D8 ; [.4418.0020.0013] # CIRCLED KATAKANA KE
+3052 ; [.4418.0020.000E][.0000.0037.0002] # HIRAGANA LETTER GE
+30B2 ; [.4418.0020.0011][.0000.0037.0002] # KATAKANA LETTER GE
+331C ; [.4418.0020.001C][.2032.0020.001C][.441C.0020.001C] # SQUARE KEESU
+3053 ; [.4419.0020.000E] # HIRAGANA LETTER KO
+30B3 ; [.4419.0020.0011] # KATAKANA LETTER KO
+FF7A ; [.4419.0020.0012] # HALFWIDTH KATAKANA LETTER KO
+32D9 ; [.4419.0020.0013] # CIRCLED KATAKANA KO
+3054 ; [.4419.0020.000E][.0000.0037.0002] # HIRAGANA LETTER GO
+30B4 ; [.4419.0020.0011][.0000.0037.0002] # KATAKANA LETTER GO
+331E ; [.4419.0020.001C][.2032.0020.001C][.442D.0020.001C][.0000.0038.001C] # SQUARE KOOPO
+1F201 ; [.4419.0020.001C][.4419.0020.001C] # SQUARED KATAKANA KOKO
+30FF ; [.4419.0020.0016][.4423.0020.0016] # KATAKANA DIGRAPH KOTO
+331D ; [.4419.0020.001C][.443A.0020.001C][.4424.0020.001C] # SQUARE KORUNA
+3055 ; [.441A.0020.000E] # HIRAGANA LETTER SA
+30B5 ; [.441A.0020.0011] # KATAKANA LETTER SA
+FF7B ; [.441A.0020.0012] # HALFWIDTH KATAKANA LETTER SA
+32DA ; [.441A.0020.0013] # CIRCLED KATAKANA SA
+1F202 ; [.441A.0020.001C] # SQUARED KATAKANA SA
+3056 ; [.441A.0020.000E][.0000.0037.0002] # HIRAGANA LETTER ZA
+30B6 ; [.441A.0020.0011][.0000.0037.0002] # KATAKANA LETTER ZA
+331F ; [.441A.0020.001C][.4410.0020.001C][.4417.0020.001C][.443A.0020.001C] # SQUARE SAIKURU
+3320 ; [.441A.0020.001C][.4442.0020.001C][.4420.0020.001C][.2032.0020.001C][.4430.0020.001C] # SQUARE SANTIIMU
+3057 ; [.441B.0020.000E] # HIRAGANA LETTER SI
+31F1 ; [.441B.0020.000F] # KATAKANA LETTER SMALL SI
+30B7 ; [.441B.0020.0011] # KATAKANA LETTER SI
+FF7C ; [.441B.0020.0012] # HALFWIDTH KATAKANA LETTER SI
+32DB ; [.441B.0020.0013] # CIRCLED KATAKANA SI
+3058 ; [.441B.0020.000E][.0000.0037.0002] # HIRAGANA LETTER ZI
+30B8 ; [.441B.0020.0011][.0000.0037.0002] # KATAKANA LETTER ZI
+3006 ; [.441B.0020.0004][.4431.0020.0004] # IDEOGRAPHIC CLOSING MARK
+3321 ; [.441B.0020.001C][.4439.0020.001C][.4442.0020.001C][.4417.0020.001C][.0000.0037.001C] # SQUARE SIRINGU
+3059 ; [.441C.0020.000E] # HIRAGANA LETTER SU
+31F2 ; [.441C.0020.000F] # KATAKANA LETTER SMALL SU
+30B9 ; [.441C.0020.0011] # KATAKANA LETTER SU
+FF7D ; [.441C.0020.0012] # HALFWIDTH KATAKANA LETTER SU
+32DC ; [.441C.0020.0013] # CIRCLED KATAKANA SU
+305A ; [.441C.0020.000E][.0000.0037.0002] # HIRAGANA LETTER ZU
+30BA ; [.441C.0020.0011][.0000.0037.0002] # KATAKANA LETTER ZU
+305B ; [.441D.0020.000E] # HIRAGANA LETTER SE
+30BB ; [.441D.0020.0011] # KATAKANA LETTER SE
+FF7E ; [.441D.0020.0012] # HALFWIDTH KATAKANA LETTER SE
+32DD ; [.441D.0020.0013] # CIRCLED KATAKANA SE
+305C ; [.441D.0020.000E][.0000.0037.0002] # HIRAGANA LETTER ZE
+30BC ; [.441D.0020.0011][.0000.0037.0002] # KATAKANA LETTER ZE
+3322 ; [.441D.0020.001C][.4442.0020.001C][.4420.0020.001C] # SQUARE SENTI
+3323 ; [.441D.0020.001C][.4442.0020.001C][.4423.0020.001C] # SQUARE SENTO
+305D ; [.441E.0020.000E] # HIRAGANA LETTER SO
+30BD ; [.441E.0020.0011] # KATAKANA LETTER SO
+FF7F ; [.441E.0020.0012] # HALFWIDTH KATAKANA LETTER SO
+32DE ; [.441E.0020.0013] # CIRCLED KATAKANA SO
+305E ; [.441E.0020.000E][.0000.0037.0002] # HIRAGANA LETTER ZO
+30BE ; [.441E.0020.0011][.0000.0037.0002] # KATAKANA LETTER ZO
+305F ; [.441F.0020.000E] # HIRAGANA LETTER TA
+30BF ; [.441F.0020.0011] # KATAKANA LETTER TA
+FF80 ; [.441F.0020.0012] # HALFWIDTH KATAKANA LETTER TA
+32DF ; [.441F.0020.0013] # CIRCLED KATAKANA TA
+3060 ; [.441F.0020.000E][.0000.0037.0002] # HIRAGANA LETTER DA
+30C0 ; [.441F.0020.0011][.0000.0037.0002] # KATAKANA LETTER DA
+3324 ; [.441F.0020.001C][.0000.0037.001C][.2032.0020.001C][.441C.0020.001C] # SQUARE DAASU
+3061 ; [.4420.0020.000E] # HIRAGANA LETTER TI
+30C1 ; [.4420.0020.0011] # KATAKANA LETTER TI
+FF81 ; [.4420.0020.0012] # HALFWIDTH KATAKANA LETTER TI
+32E0 ; [.4420.0020.0013] # CIRCLED KATAKANA TI
+3062 ; [.4420.0020.000E][.0000.0037.0002] # HIRAGANA LETTER DI
+30C2 ; [.4420.0020.0011][.0000.0037.0002] # KATAKANA LETTER DI
+3063 ; [.4421.0020.000D] # HIRAGANA LETTER SMALL TU
+3064 ; [.4421.0020.000E] # HIRAGANA LETTER TU
+30C3 ; [.4421.0020.000F] # KATAKANA LETTER SMALL TU
+FF6F ; [.4421.0020.0010] # HALFWIDTH KATAKANA LETTER SMALL TU
+30C4 ; [.4421.0020.0011] # KATAKANA LETTER TU
+FF82 ; [.4421.0020.0012] # HALFWIDTH KATAKANA LETTER TU
+32E1 ; [.4421.0020.0013] # CIRCLED KATAKANA TU
+3065 ; [.4421.0020.000E][.0000.0037.0002] # HIRAGANA LETTER DU
+30C5 ; [.4421.0020.0011][.0000.0037.0002] # KATAKANA LETTER DU
+3066 ; [.4422.0020.000E] # HIRAGANA LETTER TE
+30C6 ; [.4422.0020.0011] # KATAKANA LETTER TE
+FF83 ; [.4422.0020.0012] # HALFWIDTH KATAKANA LETTER TE
+32E2 ; [.4422.0020.0013] # CIRCLED KATAKANA TE
+3067 ; [.4422.0020.000E][.0000.0037.0002] # HIRAGANA LETTER DE
+30C7 ; [.4422.0020.0011][.0000.0037.0002] # KATAKANA LETTER DE
+1F213 ; [.4422.0020.001C][.0000.0037.001C] # SQUARED KATAKANA DE
+3325 ; [.4422.0020.001C][.0000.0037.001C][.441B.0020.001C] # SQUARE DESI
+3068 ; [.4423.0020.000E] # HIRAGANA LETTER TO
+31F3 ; [.4423.0020.000F] # KATAKANA LETTER SMALL TO
+30C8 ; [.4423.0020.0011] # KATAKANA LETTER TO
+FF84 ; [.4423.0020.0012] # HALFWIDTH KATAKANA LETTER TO
+32E3 ; [.4423.0020.0013] # CIRCLED KATAKANA TO
+3069 ; [.4423.0020.000E][.0000.0037.0002] # HIRAGANA LETTER DO
+30C9 ; [.4423.0020.0011][.0000.0037.0002] # KATAKANA LETTER DO
+3326 ; [.4423.0020.001C][.0000.0037.001C][.443A.0020.001C] # SQUARE DORU
+3327 ; [.4423.0020.001C][.4442.0020.001C] # SQUARE TON
+306A ; [.4424.0020.000E] # HIRAGANA LETTER NA
+30CA ; [.4424.0020.0011] # KATAKANA LETTER NA
+FF85 ; [.4424.0020.0012] # HALFWIDTH KATAKANA LETTER NA
+32E4 ; [.4424.0020.0013] # CIRCLED KATAKANA NA
+3328 ; [.4424.0020.001C][.4428.0020.001C] # SQUARE NANO
+306B ; [.4425.0020.000E] # HIRAGANA LETTER NI
+30CB ; [.4425.0020.0011] # KATAKANA LETTER NI
+FF86 ; [.4425.0020.0012] # HALFWIDTH KATAKANA LETTER NI
+32E5 ; [.4425.0020.0013] # CIRCLED KATAKANA NI
+306C ; [.4426.0020.000E] # HIRAGANA LETTER NU
+31F4 ; [.4426.0020.000F] # KATAKANA LETTER SMALL NU
+30CC ; [.4426.0020.0011] # KATAKANA LETTER NU
+FF87 ; [.4426.0020.0012] # HALFWIDTH KATAKANA LETTER NU
+32E6 ; [.4426.0020.0013] # CIRCLED KATAKANA NU
+306D ; [.4427.0020.000E] # HIRAGANA LETTER NE
+30CD ; [.4427.0020.0011] # KATAKANA LETTER NE
+FF88 ; [.4427.0020.0012] # HALFWIDTH KATAKANA LETTER NE
+32E7 ; [.4427.0020.0013] # CIRCLED KATAKANA NE
+306E ; [.4428.0020.000E] # HIRAGANA LETTER NO
+30CE ; [.4428.0020.0011] # KATAKANA LETTER NO
+FF89 ; [.4428.0020.0012] # HALFWIDTH KATAKANA LETTER NO
+32E8 ; [.4428.0020.0013] # CIRCLED KATAKANA NO
+3329 ; [.4428.0020.001C][.4421.0020.001C][.4423.0020.001C] # SQUARE NOTTO
+306F ; [.4429.0020.000E] # HIRAGANA LETTER HA
+31F5 ; [.4429.0020.000F] # KATAKANA LETTER SMALL HA
+30CF ; [.4429.0020.0011] # KATAKANA LETTER HA
+FF8A ; [.4429.0020.0012] # HALFWIDTH KATAKANA LETTER HA
+32E9 ; [.4429.0020.0013] # CIRCLED KATAKANA HA
+3070 ; [.4429.0020.000E][.0000.0037.0002] # HIRAGANA LETTER BA
+30D0 ; [.4429.0020.0011][.0000.0037.0002] # KATAKANA LETTER BA
+3071 ; [.4429.0020.000E][.0000.0038.0002] # HIRAGANA LETTER PA
+30D1 ; [.4429.0020.0011][.0000.0038.0002] # KATAKANA LETTER PA
+332B ; [.4429.0020.001C][.0000.0038.001C][.2032.0020.001C][.441D.0020.001C][.4442.0020.001C][.4423.0020.001C] # SQUARE PAASENTO
+332C ; [.4429.0020.001C][.0000.0038.001C][.2032.0020.001C][.4421.0020.001C] # SQUARE PAATU
+332D ; [.4429.0020.001C][.0000.0037.001C][.2032.0020.001C][.443B.0020.001C][.443A.0020.001C] # SQUARE BAARERU
+332A ; [.4429.0020.001C][.4410.0020.001C][.4421.0020.001C] # SQUARE HAITU
+3072 ; [.442A.0020.000E] # HIRAGANA LETTER HI
+31F6 ; [.442A.0020.000F] # KATAKANA LETTER SMALL HI
+30D2 ; [.442A.0020.0011] # KATAKANA LETTER HI
+FF8B ; [.442A.0020.0012] # HALFWIDTH KATAKANA LETTER HI
+32EA ; [.442A.0020.0013] # CIRCLED KATAKANA HI
+3073 ; [.442A.0020.000E][.0000.0037.0002] # HIRAGANA LETTER BI
+30D3 ; [.442A.0020.0011][.0000.0037.0002] # KATAKANA LETTER BI
+3074 ; [.442A.0020.000E][.0000.0038.0002] # HIRAGANA LETTER PI
+30D4 ; [.442A.0020.0011][.0000.0038.0002] # KATAKANA LETTER PI
+332E ; [.442A.0020.001C][.0000.0038.001C][.440F.0020.001C][.441C.0020.001C][.4423.0020.001C][.443A.0020.001C] # SQUARE PIASUTORU
+332F ; [.442A.0020.001C][.0000.0038.001C][.4417.0020.001C][.443A.0020.001C] # SQUARE PIKURU
+3330 ; [.442A.0020.001C][.0000.0038.001C][.4419.0020.001C] # SQUARE PIKO
+3331 ; [.442A.0020.001C][.0000.0037.001C][.443A.0020.001C] # SQUARE BIRU
+3075 ; [.442B.0020.000E] # HIRAGANA LETTER HU
+31F7 ; [.442B.0020.000F] # KATAKANA LETTER SMALL HU
+30D5 ; [.442B.0020.0011] # KATAKANA LETTER HU
+FF8C ; [.442B.0020.0012] # HALFWIDTH KATAKANA LETTER HU
+32EB ; [.442B.0020.0013] # CIRCLED KATAKANA HU
+3076 ; [.442B.0020.000E][.0000.0037.0002] # HIRAGANA LETTER BU
+30D6 ; [.442B.0020.0011][.0000.0037.0002] # KATAKANA LETTER BU
+3077 ; [.442B.0020.000E][.0000.0038.0002] # HIRAGANA LETTER PU
+30D7 ; [.442B.0020.0011][.0000.0038.0002] # KATAKANA LETTER PU
+3332 ; [.442B.0020.001C][.440F.0020.001C][.4438.0020.001C][.4421.0020.001C][.4423.0020.001C][.0000.0037.001C] # SQUARE HUARADDO
+3333 ; [.442B.0020.001C][.4410.0020.001C][.2032.0020.001C][.4423.0020.001C] # SQUARE HUIITO
+3334 ; [.442B.0020.001C][.0000.0037.001C][.4421.0020.001C][.441B.0020.001C][.4413.0020.001C][.443A.0020.001C] # SQUARE BUSSYERU
+3335 ; [.442B.0020.001C][.4438.0020.001C][.4442.0020.001C] # SQUARE HURAN
+3078 ; [.442C.0020.000E] # HIRAGANA LETTER HE
+31F8 ; [.442C.0020.000F] # KATAKANA LETTER SMALL HE
+30D8 ; [.442C.0020.0011] # KATAKANA LETTER HE
+FF8D ; [.442C.0020.0012] # HALFWIDTH KATAKANA LETTER HE
+32EC ; [.442C.0020.0013] # CIRCLED KATAKANA HE
+3079 ; [.442C.0020.000E][.0000.0037.0002] # HIRAGANA LETTER BE
+30D9 ; [.442C.0020.0011][.0000.0037.0002] # KATAKANA LETTER BE
+307A ; [.442C.0020.000E][.0000.0038.0002] # HIRAGANA LETTER PE
+30DA ; [.442C.0020.0011][.0000.0038.0002] # KATAKANA LETTER PE
+333B ; [.442C.0020.001C][.0000.0038.001C][.2032.0020.001C][.441B.0020.001C][.0000.0037.001C] # SQUARE PEEZI
+333C ; [.442C.0020.001C][.0000.0037.001C][.2032.0020.001C][.441F.0020.001C] # SQUARE BEETA
+3336 ; [.442C.0020.001C][.4417.0020.001C][.441F.0020.001C][.2032.0020.001C][.443A.0020.001C] # SQUARE HEKUTAARU
+3337 ; [.442C.0020.001C][.0000.0038.001C][.441E.0020.001C] # SQUARE PESO
+3338 ; [.442C.0020.001C][.0000.0038.001C][.4425.0020.001C][.442A.0020.001C] # SQUARE PENIHI
+3339 ; [.442C.0020.001C][.443A.0020.001C][.4421.0020.001C] # SQUARE HERUTU
+333A ; [.442C.0020.001C][.0000.0038.001C][.4442.0020.001C][.441C.0020.001C] # SQUARE PENSU
+307B ; [.442D.0020.000E] # HIRAGANA LETTER HO
+31F9 ; [.442D.0020.000F] # KATAKANA LETTER SMALL HO
+30DB ; [.442D.0020.0011] # KATAKANA LETTER HO
+FF8E ; [.442D.0020.0012] # HALFWIDTH KATAKANA LETTER HO
+32ED ; [.442D.0020.0013] # CIRCLED KATAKANA HO
+307C ; [.442D.0020.000E][.0000.0037.0002] # HIRAGANA LETTER BO
+30DC ; [.442D.0020.0011][.0000.0037.0002] # KATAKANA LETTER BO
+307D ; [.442D.0020.000E][.0000.0038.0002] # HIRAGANA LETTER PO
+30DD ; [.442D.0020.0011][.0000.0038.0002] # KATAKANA LETTER PO
+3341 ; [.442D.0020.001C][.2032.0020.001C][.443A.0020.001C] # SQUARE HOORU
+3342 ; [.442D.0020.001C][.2032.0020.001C][.4442.0020.001C] # SQUARE HOON
+333D ; [.442D.0020.001C][.0000.0038.001C][.4410.0020.001C][.4442.0020.001C][.4423.0020.001C] # SQUARE POINTO
+1F200 ; [.442D.0020.001C][.4415.0020.001C] # SQUARE HIRAGANA HOKA
+333E ; [.442D.0020.001C][.0000.0037.001C][.443A.0020.001C][.4423.0020.001C] # SQUARE BORUTO
+333F ; [.442D.0020.001C][.4442.0020.001C] # SQUARE HON
+3340 ; [.442D.0020.001C][.0000.0038.001C][.4442.0020.001C][.4423.0020.001C][.0000.0037.001C] # SQUARE PONDO
+307E ; [.442E.0020.000E] # HIRAGANA LETTER MA
+30DE ; [.442E.0020.0011] # KATAKANA LETTER MA
+FF8F ; [.442E.0020.0012] # HALFWIDTH KATAKANA LETTER MA
+32EE ; [.442E.0020.0013] # CIRCLED KATAKANA MA
+3343 ; [.442E.0020.001C][.4410.0020.001C][.4417.0020.001C][.443C.0020.001C] # SQUARE MAIKURO
+3344 ; [.442E.0020.001C][.4410.0020.001C][.443A.0020.001C] # SQUARE MAIRU
+303C ; [.442E.0020.0004][.441C.0020.0004] # MASU MARK
+3345 ; [.442E.0020.001C][.4421.0020.001C][.4429.0020.001C] # SQUARE MAHHA
+3346 ; [.442E.0020.001C][.443A.0020.001C][.4417.0020.001C] # SQUARE MARUKU
+3347 ; [.442E.0020.001C][.4442.0020.001C][.441B.0020.001C][.4437.0020.001C][.4442.0020.001C] # SQUARE MANSYON
+307F ; [.442F.0020.000E] # HIRAGANA LETTER MI
+30DF ; [.442F.0020.0011] # KATAKANA LETTER MI
+FF90 ; [.442F.0020.0012] # HALFWIDTH KATAKANA LETTER MI
+32EF ; [.442F.0020.0013] # CIRCLED KATAKANA MI
+3348 ; [.442F.0020.001C][.4417.0020.001C][.443C.0020.001C][.4442.0020.001C] # SQUARE MIKURON
+3349 ; [.442F.0020.001C][.4439.0020.001C] # SQUARE MIRI
+334A ; [.442F.0020.001C][.4439.0020.001C][.4429.0020.001C][.0000.0037.001C][.2032.0020.001C][.443A.0020.001C] # SQUARE MIRIBAARU
+3080 ; [.4430.0020.000E] # HIRAGANA LETTER MU
+31FA ; [.4430.0020.000F] # KATAKANA LETTER SMALL MU
+30E0 ; [.4430.0020.0011] # KATAKANA LETTER MU
+FF91 ; [.4430.0020.0012] # HALFWIDTH KATAKANA LETTER MU
+32F0 ; [.4430.0020.0013] # CIRCLED KATAKANA MU
+3081 ; [.4431.0020.000E] # HIRAGANA LETTER ME
+30E1 ; [.4431.0020.0011] # KATAKANA LETTER ME
+FF92 ; [.4431.0020.0012] # HALFWIDTH KATAKANA LETTER ME
+32F1 ; [.4431.0020.0013] # CIRCLED KATAKANA ME
+334D ; [.4431.0020.001C][.2032.0020.001C][.4423.0020.001C][.443A.0020.001C] # SQUARE MEETORU
+334B ; [.4431.0020.001C][.4415.0020.001C][.0000.0037.001C] # SQUARE MEGA
+334C ; [.4431.0020.001C][.4415.0020.001C][.0000.0037.001C][.4423.0020.001C][.4442.0020.001C] # SQUARE MEGATON
+3082 ; [.4432.0020.000E] # HIRAGANA LETTER MO
+30E2 ; [.4432.0020.0011] # KATAKANA LETTER MO
+FF93 ; [.4432.0020.0012] # HALFWIDTH KATAKANA LETTER MO
+32F2 ; [.4432.0020.0013] # CIRCLED KATAKANA MO
+3083 ; [.4433.0020.000D] # HIRAGANA LETTER SMALL YA
+3084 ; [.4433.0020.000E] # HIRAGANA LETTER YA
+30E3 ; [.4433.0020.000F] # KATAKANA LETTER SMALL YA
+FF6C ; [.4433.0020.0010] # HALFWIDTH KATAKANA LETTER SMALL YA
+30E4 ; [.4433.0020.0011] # KATAKANA LETTER YA
+FF94 ; [.4433.0020.0012] # HALFWIDTH KATAKANA LETTER YA
+32F3 ; [.4433.0020.0013] # CIRCLED KATAKANA YA
+334E ; [.4433.0020.001C][.2032.0020.001C][.4423.0020.001C][.0000.0037.001C] # SQUARE YAADO
+334F ; [.4433.0020.001C][.2032.0020.001C][.443A.0020.001C] # SQUARE YAARU
+1B120 ; [.4434.0020.0011] # KATAKANA LETTER ARCHAIC YI
+3085 ; [.4435.0020.000D] # HIRAGANA LETTER SMALL YU
+3086 ; [.4435.0020.000E] # HIRAGANA LETTER YU
+30E5 ; [.4435.0020.000F] # KATAKANA LETTER SMALL YU
+FF6D ; [.4435.0020.0010] # HALFWIDTH KATAKANA LETTER SMALL YU
+30E6 ; [.4435.0020.0011] # KATAKANA LETTER YU
+FF95 ; [.4435.0020.0012] # HALFWIDTH KATAKANA LETTER YU
+32F4 ; [.4435.0020.0013] # CIRCLED KATAKANA YU
+3350 ; [.4435.0020.001C][.440F.0020.001C][.4442.0020.001C] # SQUARE YUAN
+1B121 ; [.4436.0020.0011] # KATAKANA LETTER ARCHAIC YE
+3087 ; [.4437.0020.000D] # HIRAGANA LETTER SMALL YO
+3088 ; [.4437.0020.000E] # HIRAGANA LETTER YO
+30E7 ; [.4437.0020.000F] # KATAKANA LETTER SMALL YO
+FF6E ; [.4437.0020.0010] # HALFWIDTH KATAKANA LETTER SMALL YO
+30E8 ; [.4437.0020.0011] # KATAKANA LETTER YO
+FF96 ; [.4437.0020.0012] # HALFWIDTH KATAKANA LETTER YO
+32F5 ; [.4437.0020.0013] # CIRCLED KATAKANA YO
+309F ; [.4437.0020.0016][.4439.0020.0016] # HIRAGANA DIGRAPH YORI
+3089 ; [.4438.0020.000E] # HIRAGANA LETTER RA
+31FB ; [.4438.0020.000F] # KATAKANA LETTER SMALL RA
+30E9 ; [.4438.0020.0011] # KATAKANA LETTER RA
+FF97 ; [.4438.0020.0012] # HALFWIDTH KATAKANA LETTER RA
+32F6 ; [.4438.0020.0013] # CIRCLED KATAKANA RA
+308A ; [.4439.0020.000E] # HIRAGANA LETTER RI
+31FC ; [.4439.0020.000F] # KATAKANA LETTER SMALL RI
+30EA ; [.4439.0020.0011] # KATAKANA LETTER RI
+FF98 ; [.4439.0020.0012] # HALFWIDTH KATAKANA LETTER RI
+32F7 ; [.4439.0020.0013] # CIRCLED KATAKANA RI
+3351 ; [.4439.0020.001C][.4421.0020.001C][.4423.0020.001C][.443A.0020.001C] # SQUARE RITTORU
+3352 ; [.4439.0020.001C][.4438.0020.001C] # SQUARE RIRA
+308B ; [.443A.0020.000E] # HIRAGANA LETTER RU
+31FD ; [.443A.0020.000F] # KATAKANA LETTER SMALL RU
+30EB ; [.443A.0020.0011] # KATAKANA LETTER RU
+FF99 ; [.443A.0020.0012] # HALFWIDTH KATAKANA LETTER RU
+32F8 ; [.443A.0020.0013] # CIRCLED KATAKANA RU
+3354 ; [.443A.0020.001C][.2032.0020.001C][.442B.0020.001C][.0000.0037.001C][.443A.0020.001C] # SQUARE RUUBURU
+3353 ; [.443A.0020.001C][.442A.0020.001C][.0000.0038.001C][.2032.0020.001C] # SQUARE RUPII
+308C ; [.443B.0020.000E] # HIRAGANA LETTER RE
+31FE ; [.443B.0020.000F] # KATAKANA LETTER SMALL RE
+30EC ; [.443B.0020.0011] # KATAKANA LETTER RE
+FF9A ; [.443B.0020.0012] # HALFWIDTH KATAKANA LETTER RE
+32F9 ; [.443B.0020.0013] # CIRCLED KATAKANA RE
+3355 ; [.443B.0020.001C][.4430.0020.001C] # SQUARE REMU
+3356 ; [.443B.0020.001C][.4442.0020.001C][.4423.0020.001C][.4418.0020.001C][.0000.0037.001C][.4442.0020.001C] # SQUARE RENTOGEN
+308D ; [.443C.0020.000E] # HIRAGANA LETTER RO
+31FF ; [.443C.0020.000F] # KATAKANA LETTER SMALL RO
+30ED ; [.443C.0020.0011] # KATAKANA LETTER RO
+FF9B ; [.443C.0020.0012] # HALFWIDTH KATAKANA LETTER RO
+32FA ; [.443C.0020.0013] # CIRCLED KATAKANA RO
+308E ; [.443D.0020.000D] # HIRAGANA LETTER SMALL WA
+308F ; [.443D.0020.000E] # HIRAGANA LETTER WA
+30EE ; [.443D.0020.000F] # KATAKANA LETTER SMALL WA
+30EF ; [.443D.0020.0011] # KATAKANA LETTER WA
+FF9C ; [.443D.0020.0012] # HALFWIDTH KATAKANA LETTER WA
+32FB ; [.443D.0020.0013] # CIRCLED KATAKANA WA
+30F7 ; [.443D.0020.0011][.0000.0037.0002] # KATAKANA LETTER VA
+3357 ; [.443D.0020.001C][.4421.0020.001C][.4423.0020.001C] # SQUARE WATTO
+1B150 ; [.443E.0020.000D] # HIRAGANA LETTER SMALL WI
+3090 ; [.443E.0020.000E] # HIRAGANA LETTER WI
+1B164 ; [.443E.0020.000F] # KATAKANA LETTER SMALL WI
+30F0 ; [.443E.0020.0011] # KATAKANA LETTER WI
+32FC ; [.443E.0020.0013] # CIRCLED KATAKANA WI
+30F8 ; [.443E.0020.0011][.0000.0037.0002] # KATAKANA LETTER VI
+1B11F ; [.443F.0020.000E] # HIRAGANA LETTER ARCHAIC WU
+1B122 ; [.443F.0020.0011] # KATAKANA LETTER ARCHAIC WU
+1B151 ; [.4440.0020.000D] # HIRAGANA LETTER SMALL WE
+3091 ; [.4440.0020.000E] # HIRAGANA LETTER WE
+1B165 ; [.4440.0020.000F] # KATAKANA LETTER SMALL WE
+30F1 ; [.4440.0020.0011] # KATAKANA LETTER WE
+32FD ; [.4440.0020.0013] # CIRCLED KATAKANA WE
+30F9 ; [.4440.0020.0011][.0000.0037.0002] # KATAKANA LETTER VE
+1B152 ; [.4441.0020.000D] # HIRAGANA LETTER SMALL WO
+3092 ; [.4441.0020.000E] # HIRAGANA LETTER WO
+1B166 ; [.4441.0020.000F] # KATAKANA LETTER SMALL WO
+30F2 ; [.4441.0020.0011] # KATAKANA LETTER WO
+FF66 ; [.4441.0020.0012] # HALFWIDTH KATAKANA LETTER WO
+32FE ; [.4441.0020.0013] # CIRCLED KATAKANA WO
+30FA ; [.4441.0020.0011][.0000.0037.0002] # KATAKANA LETTER VO
+3093 ; [.4442.0020.000E] # HIRAGANA LETTER N
+1B167 ; [.4442.0020.000F] # KATAKANA LETTER SMALL N
+30F3 ; [.4442.0020.0011] # KATAKANA LETTER N
+FF9D ; [.4442.0020.0012] # HALFWIDTH KATAKANA LETTER N
+1B002 ; [.4443.0020.0002] # HENTAIGANA LETTER A-1
+1B003 ; [.4444.0020.0002] # HENTAIGANA LETTER A-2
+1B004 ; [.4445.0020.0002] # HENTAIGANA LETTER A-3
+1B005 ; [.4446.0020.0002] # HENTAIGANA LETTER A-WO
+1B006 ; [.4447.0020.0002] # HENTAIGANA LETTER I-1
+1B007 ; [.4448.0020.0002] # HENTAIGANA LETTER I-2
+1B008 ; [.4449.0020.0002] # HENTAIGANA LETTER I-3
+1B009 ; [.444A.0020.0002] # HENTAIGANA LETTER I-4
+1B00A ; [.444B.0020.0002] # HENTAIGANA LETTER U-1
+1B00B ; [.444C.0020.0002] # HENTAIGANA LETTER U-2
+1B00C ; [.444D.0020.0002] # HENTAIGANA LETTER U-3
+1B00D ; [.444E.0020.0002] # HENTAIGANA LETTER U-4
+1B00E ; [.444F.0020.0002] # HENTAIGANA LETTER U-5
+1B001 ; [.4450.0020.0002] # HIRAGANA LETTER ARCHAIC YE
+1B00F ; [.4451.0020.0002] # HENTAIGANA LETTER E-2
+1B010 ; [.4452.0020.0002] # HENTAIGANA LETTER E-3
+1B011 ; [.4453.0020.0002] # HENTAIGANA LETTER E-4
+1B012 ; [.4454.0020.0002] # HENTAIGANA LETTER E-5
+1B013 ; [.4455.0020.0002] # HENTAIGANA LETTER E-6
+1B014 ; [.4456.0020.0002] # HENTAIGANA LETTER O-1
+1B015 ; [.4457.0020.0002] # HENTAIGANA LETTER O-2
+1B016 ; [.4458.0020.0002] # HENTAIGANA LETTER O-3
+1B017 ; [.4459.0020.0002] # HENTAIGANA LETTER KA-1
+1B018 ; [.445A.0020.0002] # HENTAIGANA LETTER KA-2
+1B019 ; [.445B.0020.0002] # HENTAIGANA LETTER KA-3
+1B01A ; [.445C.0020.0002] # HENTAIGANA LETTER KA-4
+1B01B ; [.445D.0020.0002] # HENTAIGANA LETTER KA-5
+1B01C ; [.445E.0020.0002] # HENTAIGANA LETTER KA-6
+1B01D ; [.445F.0020.0002] # HENTAIGANA LETTER KA-7
+1B01E ; [.4460.0020.0002] # HENTAIGANA LETTER KA-8
+1B01F ; [.4461.0020.0002] # HENTAIGANA LETTER KA-9
+1B020 ; [.4462.0020.0002] # HENTAIGANA LETTER KA-10
+1B021 ; [.4463.0020.0002] # HENTAIGANA LETTER KA-11
+1B022 ; [.4464.0020.0002] # HENTAIGANA LETTER KA-KE
+1B023 ; [.4465.0020.0002] # HENTAIGANA LETTER KI-1
+1B024 ; [.4466.0020.0002] # HENTAIGANA LETTER KI-2
+1B025 ; [.4467.0020.0002] # HENTAIGANA LETTER KI-3
+1B026 ; [.4468.0020.0002] # HENTAIGANA LETTER KI-4
+1B027 ; [.4469.0020.0002] # HENTAIGANA LETTER KI-5
+1B028 ; [.446A.0020.0002] # HENTAIGANA LETTER KI-6
+1B029 ; [.446B.0020.0002] # HENTAIGANA LETTER KI-7
+1B02A ; [.446C.0020.0002] # HENTAIGANA LETTER KI-8
+1B02B ; [.446D.0020.0002] # HENTAIGANA LETTER KU-1
+1B02C ; [.446E.0020.0002] # HENTAIGANA LETTER KU-2
+1B02D ; [.446F.0020.0002] # HENTAIGANA LETTER KU-3
+1B02E ; [.4470.0020.0002] # HENTAIGANA LETTER KU-4
+1B02F ; [.4471.0020.0002] # HENTAIGANA LETTER KU-5
+1B030 ; [.4472.0020.0002] # HENTAIGANA LETTER KU-6
+1B031 ; [.4473.0020.0002] # HENTAIGANA LETTER KU-7
+1B032 ; [.4474.0020.0002] # HENTAIGANA LETTER KE-1
+1B033 ; [.4475.0020.0002] # HENTAIGANA LETTER KE-2
+1B034 ; [.4476.0020.0002] # HENTAIGANA LETTER KE-3
+1B035 ; [.4477.0020.0002] # HENTAIGANA LETTER KE-4
+1B036 ; [.4478.0020.0002] # HENTAIGANA LETTER KE-5
+1B037 ; [.4479.0020.0002] # HENTAIGANA LETTER KE-6
+1B038 ; [.447A.0020.0002] # HENTAIGANA LETTER KO-1
+1B039 ; [.447B.0020.0002] # HENTAIGANA LETTER KO-2
+1B03A ; [.447C.0020.0002] # HENTAIGANA LETTER KO-3
+1B03B ; [.447D.0020.0002] # HENTAIGANA LETTER KO-KI
+1B03C ; [.447E.0020.0002] # HENTAIGANA LETTER SA-1
+1B03D ; [.447F.0020.0002] # HENTAIGANA LETTER SA-2
+1B03E ; [.4480.0020.0002] # HENTAIGANA LETTER SA-3
+1B03F ; [.4481.0020.0002] # HENTAIGANA LETTER SA-4
+1B040 ; [.4482.0020.0002] # HENTAIGANA LETTER SA-5
+1B041 ; [.4483.0020.0002] # HENTAIGANA LETTER SA-6
+1B042 ; [.4484.0020.0002] # HENTAIGANA LETTER SA-7
+1B043 ; [.4485.0020.0002] # HENTAIGANA LETTER SA-8
+1B044 ; [.4486.0020.0002] # HENTAIGANA LETTER SI-1
+1B045 ; [.4487.0020.0002] # HENTAIGANA LETTER SI-2
+1B046 ; [.4488.0020.0002] # HENTAIGANA LETTER SI-3
+1B047 ; [.4489.0020.0002] # HENTAIGANA LETTER SI-4
+1B048 ; [.448A.0020.0002] # HENTAIGANA LETTER SI-5
+1B049 ; [.448B.0020.0002] # HENTAIGANA LETTER SI-6
+1B04A ; [.448C.0020.0002] # HENTAIGANA LETTER SU-1
+1B04B ; [.448D.0020.0002] # HENTAIGANA LETTER SU-2
+1B04C ; [.448E.0020.0002] # HENTAIGANA LETTER SU-3
+1B04D ; [.448F.0020.0002] # HENTAIGANA LETTER SU-4
+1B04E ; [.4490.0020.0002] # HENTAIGANA LETTER SU-5
+1B04F ; [.4491.0020.0002] # HENTAIGANA LETTER SU-6
+1B050 ; [.4492.0020.0002] # HENTAIGANA LETTER SU-7
+1B051 ; [.4493.0020.0002] # HENTAIGANA LETTER SU-8
+1B052 ; [.4494.0020.0002] # HENTAIGANA LETTER SE-1
+1B053 ; [.4495.0020.0002] # HENTAIGANA LETTER SE-2
+1B054 ; [.4496.0020.0002] # HENTAIGANA LETTER SE-3
+1B055 ; [.4497.0020.0002] # HENTAIGANA LETTER SE-4
+1B056 ; [.4498.0020.0002] # HENTAIGANA LETTER SE-5
+1B057 ; [.4499.0020.0002] # HENTAIGANA LETTER SO-1
+1B058 ; [.449A.0020.0002] # HENTAIGANA LETTER SO-2
+1B059 ; [.449B.0020.0002] # HENTAIGANA LETTER SO-3
+1B05A ; [.449C.0020.0002] # HENTAIGANA LETTER SO-4
+1B05B ; [.449D.0020.0002] # HENTAIGANA LETTER SO-5
+1B05C ; [.449E.0020.0002] # HENTAIGANA LETTER SO-6
+1B05D ; [.449F.0020.0002] # HENTAIGANA LETTER SO-7
+1B05E ; [.44A0.0020.0002] # HENTAIGANA LETTER TA-1
+1B05F ; [.44A1.0020.0002] # HENTAIGANA LETTER TA-2
+1B060 ; [.44A2.0020.0002] # HENTAIGANA LETTER TA-3
+1B061 ; [.44A3.0020.0002] # HENTAIGANA LETTER TA-4
+1B062 ; [.44A4.0020.0002] # HENTAIGANA LETTER TI-1
+1B063 ; [.44A5.0020.0002] # HENTAIGANA LETTER TI-2
+1B064 ; [.44A6.0020.0002] # HENTAIGANA LETTER TI-3
+1B065 ; [.44A7.0020.0002] # HENTAIGANA LETTER TI-4
+1B066 ; [.44A8.0020.0002] # HENTAIGANA LETTER TI-5
+1B067 ; [.44A9.0020.0002] # HENTAIGANA LETTER TI-6
+1B068 ; [.44AA.0020.0002] # HENTAIGANA LETTER TI-7
+1B069 ; [.44AB.0020.0002] # HENTAIGANA LETTER TU-1
+1B06A ; [.44AC.0020.0002] # HENTAIGANA LETTER TU-2
+1B06B ; [.44AD.0020.0002] # HENTAIGANA LETTER TU-3
+1B06C ; [.44AE.0020.0002] # HENTAIGANA LETTER TU-4
+1B06D ; [.44AF.0020.0002] # HENTAIGANA LETTER TU-TO
+1B06E ; [.44B0.0020.0002] # HENTAIGANA LETTER TE-1
+1B06F ; [.44B1.0020.0002] # HENTAIGANA LETTER TE-2
+1B070 ; [.44B2.0020.0002] # HENTAIGANA LETTER TE-3
+1B071 ; [.44B3.0020.0002] # HENTAIGANA LETTER TE-4
+1B072 ; [.44B4.0020.0002] # HENTAIGANA LETTER TE-5
+1B073 ; [.44B5.0020.0002] # HENTAIGANA LETTER TE-6
+1B074 ; [.44B6.0020.0002] # HENTAIGANA LETTER TE-7
+1B075 ; [.44B7.0020.0002] # HENTAIGANA LETTER TE-8
+1B076 ; [.44B8.0020.0002] # HENTAIGANA LETTER TE-9
+1B077 ; [.44B9.0020.0002] # HENTAIGANA LETTER TO-1
+1B078 ; [.44BA.0020.0002] # HENTAIGANA LETTER TO-2
+1B079 ; [.44BB.0020.0002] # HENTAIGANA LETTER TO-3
+1B07A ; [.44BC.0020.0002] # HENTAIGANA LETTER TO-4
+1B07B ; [.44BD.0020.0002] # HENTAIGANA LETTER TO-5
+1B07C ; [.44BE.0020.0002] # HENTAIGANA LETTER TO-6
+1B07D ; [.44BF.0020.0002] # HENTAIGANA LETTER TO-RA
+1B07E ; [.44C0.0020.0002] # HENTAIGANA LETTER NA-1
+1B07F ; [.44C1.0020.0002] # HENTAIGANA LETTER NA-2
+1B080 ; [.44C2.0020.0002] # HENTAIGANA LETTER NA-3
+1B081 ; [.44C3.0020.0002] # HENTAIGANA LETTER NA-4
+1B082 ; [.44C4.0020.0002] # HENTAIGANA LETTER NA-5
+1B083 ; [.44C5.0020.0002] # HENTAIGANA LETTER NA-6
+1B084 ; [.44C6.0020.0002] # HENTAIGANA LETTER NA-7
+1B085 ; [.44C7.0020.0002] # HENTAIGANA LETTER NA-8
+1B086 ; [.44C8.0020.0002] # HENTAIGANA LETTER NA-9
+1B087 ; [.44C9.0020.0002] # HENTAIGANA LETTER NI-1
+1B088 ; [.44CA.0020.0002] # HENTAIGANA LETTER NI-2
+1B089 ; [.44CB.0020.0002] # HENTAIGANA LETTER NI-3
+1B08A ; [.44CC.0020.0002] # HENTAIGANA LETTER NI-4
+1B08B ; [.44CD.0020.0002] # HENTAIGANA LETTER NI-5
+1B08C ; [.44CE.0020.0002] # HENTAIGANA LETTER NI-6
+1B08D ; [.44CF.0020.0002] # HENTAIGANA LETTER NI-7
+1B08E ; [.44D0.0020.0002] # HENTAIGANA LETTER NI-TE
+1B08F ; [.44D1.0020.0002] # HENTAIGANA LETTER NU-1
+1B090 ; [.44D2.0020.0002] # HENTAIGANA LETTER NU-2
+1B091 ; [.44D3.0020.0002] # HENTAIGANA LETTER NU-3
+1B092 ; [.44D4.0020.0002] # HENTAIGANA LETTER NE-1
+1B093 ; [.44D5.0020.0002] # HENTAIGANA LETTER NE-2
+1B094 ; [.44D6.0020.0002] # HENTAIGANA LETTER NE-3
+1B095 ; [.44D7.0020.0002] # HENTAIGANA LETTER NE-4
+1B096 ; [.44D8.0020.0002] # HENTAIGANA LETTER NE-5
+1B097 ; [.44D9.0020.0002] # HENTAIGANA LETTER NE-6
+1B098 ; [.44DA.0020.0002] # HENTAIGANA LETTER NE-KO
+1B099 ; [.44DB.0020.0002] # HENTAIGANA LETTER NO-1
+1B09A ; [.44DC.0020.0002] # HENTAIGANA LETTER NO-2
+1B09B ; [.44DD.0020.0002] # HENTAIGANA LETTER NO-3
+1B09C ; [.44DE.0020.0002] # HENTAIGANA LETTER NO-4
+1B09D ; [.44DF.0020.0002] # HENTAIGANA LETTER NO-5
+1B09E ; [.44E0.0020.0002] # HENTAIGANA LETTER HA-1
+1B09F ; [.44E1.0020.0002] # HENTAIGANA LETTER HA-2
+1B0A0 ; [.44E2.0020.0002] # HENTAIGANA LETTER HA-3
+1B0A1 ; [.44E3.0020.0002] # HENTAIGANA LETTER HA-4
+1B0A2 ; [.44E4.0020.0002] # HENTAIGANA LETTER HA-5
+1B0A3 ; [.44E5.0020.0002] # HENTAIGANA LETTER HA-6
+1B0A4 ; [.44E6.0020.0002] # HENTAIGANA LETTER HA-7
+1B0A5 ; [.44E7.0020.0002] # HENTAIGANA LETTER HA-8
+1B0A6 ; [.44E8.0020.0002] # HENTAIGANA LETTER HA-9
+1B0A7 ; [.44E9.0020.0002] # HENTAIGANA LETTER HA-10
+1B0A8 ; [.44EA.0020.0002] # HENTAIGANA LETTER HA-11
+1B0A9 ; [.44EB.0020.0002] # HENTAIGANA LETTER HI-1
+1B0AA ; [.44EC.0020.0002] # HENTAIGANA LETTER HI-2
+1B0AB ; [.44ED.0020.0002] # HENTAIGANA LETTER HI-3
+1B0AC ; [.44EE.0020.0002] # HENTAIGANA LETTER HI-4
+1B0AD ; [.44EF.0020.0002] # HENTAIGANA LETTER HI-5
+1B0AE ; [.44F0.0020.0002] # HENTAIGANA LETTER HI-6
+1B0AF ; [.44F1.0020.0002] # HENTAIGANA LETTER HI-7
+1B0B0 ; [.44F2.0020.0002] # HENTAIGANA LETTER HU-1
+1B0B1 ; [.44F3.0020.0002] # HENTAIGANA LETTER HU-2
+1B0B2 ; [.44F4.0020.0002] # HENTAIGANA LETTER HU-3
+1B0B3 ; [.44F5.0020.0002] # HENTAIGANA LETTER HE-1
+1B0B4 ; [.44F6.0020.0002] # HENTAIGANA LETTER HE-2
+1B0B5 ; [.44F7.0020.0002] # HENTAIGANA LETTER HE-3
+1B0B6 ; [.44F8.0020.0002] # HENTAIGANA LETTER HE-4
+1B0B7 ; [.44F9.0020.0002] # HENTAIGANA LETTER HE-5
+1B0B8 ; [.44FA.0020.0002] # HENTAIGANA LETTER HE-6
+1B0B9 ; [.44FB.0020.0002] # HENTAIGANA LETTER HE-7
+1B0BA ; [.44FC.0020.0002] # HENTAIGANA LETTER HO-1
+1B0BB ; [.44FD.0020.0002] # HENTAIGANA LETTER HO-2
+1B0BC ; [.44FE.0020.0002] # HENTAIGANA LETTER HO-3
+1B0BD ; [.44FF.0020.0002] # HENTAIGANA LETTER HO-4
+1B0BE ; [.4500.0020.0002] # HENTAIGANA LETTER HO-5
+1B0BF ; [.4501.0020.0002] # HENTAIGANA LETTER HO-6
+1B0C0 ; [.4502.0020.0002] # HENTAIGANA LETTER HO-7
+1B0C1 ; [.4503.0020.0002] # HENTAIGANA LETTER HO-8
+1B0C2 ; [.4504.0020.0002] # HENTAIGANA LETTER MA-1
+1B0C3 ; [.4505.0020.0002] # HENTAIGANA LETTER MA-2
+1B0C4 ; [.4506.0020.0002] # HENTAIGANA LETTER MA-3
+1B0C5 ; [.4507.0020.0002] # HENTAIGANA LETTER MA-4
+1B0C6 ; [.4508.0020.0002] # HENTAIGANA LETTER MA-5
+1B0C7 ; [.4509.0020.0002] # HENTAIGANA LETTER MA-6
+1B0C8 ; [.450A.0020.0002] # HENTAIGANA LETTER MA-7
+1B0C9 ; [.450B.0020.0002] # HENTAIGANA LETTER MI-1
+1B0CA ; [.450C.0020.0002] # HENTAIGANA LETTER MI-2
+1B0CB ; [.450D.0020.0002] # HENTAIGANA LETTER MI-3
+1B0CC ; [.450E.0020.0002] # HENTAIGANA LETTER MI-4
+1B0CD ; [.450F.0020.0002] # HENTAIGANA LETTER MI-5
+1B0CE ; [.4510.0020.0002] # HENTAIGANA LETTER MI-6
+1B0CF ; [.4511.0020.0002] # HENTAIGANA LETTER MI-7
+1B0D0 ; [.4512.0020.0002] # HENTAIGANA LETTER MU-1
+1B0D1 ; [.4513.0020.0002] # HENTAIGANA LETTER MU-2
+1B0D2 ; [.4514.0020.0002] # HENTAIGANA LETTER MU-3
+1B0D3 ; [.4515.0020.0002] # HENTAIGANA LETTER MU-4
+1B0D4 ; [.4516.0020.0002] # HENTAIGANA LETTER ME-1
+1B0D5 ; [.4517.0020.0002] # HENTAIGANA LETTER ME-2
+1B0D6 ; [.4518.0020.0002] # HENTAIGANA LETTER ME-MA
+1B0D7 ; [.4519.0020.0002] # HENTAIGANA LETTER MO-1
+1B0D8 ; [.451A.0020.0002] # HENTAIGANA LETTER MO-2
+1B0D9 ; [.451B.0020.0002] # HENTAIGANA LETTER MO-3
+1B0DA ; [.451C.0020.0002] # HENTAIGANA LETTER MO-4
+1B0DB ; [.451D.0020.0002] # HENTAIGANA LETTER MO-5
+1B0DC ; [.451E.0020.0002] # HENTAIGANA LETTER MO-6
+1B0DD ; [.451F.0020.0002] # HENTAIGANA LETTER YA-1
+1B0DE ; [.4520.0020.0002] # HENTAIGANA LETTER YA-2
+1B0DF ; [.4521.0020.0002] # HENTAIGANA LETTER YA-3
+1B0E0 ; [.4522.0020.0002] # HENTAIGANA LETTER YA-4
+1B0E1 ; [.4523.0020.0002] # HENTAIGANA LETTER YA-5
+1B0E2 ; [.4524.0020.0002] # HENTAIGANA LETTER YA-YO
+1B0E3 ; [.4525.0020.0002] # HENTAIGANA LETTER YU-1
+1B0E4 ; [.4526.0020.0002] # HENTAIGANA LETTER YU-2
+1B0E5 ; [.4527.0020.0002] # HENTAIGANA LETTER YU-3
+1B0E6 ; [.4528.0020.0002] # HENTAIGANA LETTER YU-4
+1B0E7 ; [.4529.0020.0002] # HENTAIGANA LETTER YO-1
+1B0E8 ; [.452A.0020.0002] # HENTAIGANA LETTER YO-2
+1B0E9 ; [.452B.0020.0002] # HENTAIGANA LETTER YO-3
+1B0EA ; [.452C.0020.0002] # HENTAIGANA LETTER YO-4
+1B0EB ; [.452D.0020.0002] # HENTAIGANA LETTER YO-5
+1B0EC ; [.452E.0020.0002] # HENTAIGANA LETTER YO-6
+1B0ED ; [.452F.0020.0002] # HENTAIGANA LETTER RA-1
+1B0EE ; [.4530.0020.0002] # HENTAIGANA LETTER RA-2
+1B0EF ; [.4531.0020.0002] # HENTAIGANA LETTER RA-3
+1B0F0 ; [.4532.0020.0002] # HENTAIGANA LETTER RA-4
+1B0F1 ; [.4533.0020.0002] # HENTAIGANA LETTER RI-1
+1B0F2 ; [.4534.0020.0002] # HENTAIGANA LETTER RI-2
+1B0F3 ; [.4535.0020.0002] # HENTAIGANA LETTER RI-3
+1B0F4 ; [.4536.0020.0002] # HENTAIGANA LETTER RI-4
+1B0F5 ; [.4537.0020.0002] # HENTAIGANA LETTER RI-5
+1B0F6 ; [.4538.0020.0002] # HENTAIGANA LETTER RI-6
+1B0F7 ; [.4539.0020.0002] # HENTAIGANA LETTER RI-7
+1B0F8 ; [.453A.0020.0002] # HENTAIGANA LETTER RU-1
+1B0F9 ; [.453B.0020.0002] # HENTAIGANA LETTER RU-2
+1B0FA ; [.453C.0020.0002] # HENTAIGANA LETTER RU-3
+1B0FB ; [.453D.0020.0002] # HENTAIGANA LETTER RU-4
+1B0FC ; [.453E.0020.0002] # HENTAIGANA LETTER RU-5
+1B0FD ; [.453F.0020.0002] # HENTAIGANA LETTER RU-6
+1B0FE ; [.4540.0020.0002] # HENTAIGANA LETTER RE-1
+1B0FF ; [.4541.0020.0002] # HENTAIGANA LETTER RE-2
+1B100 ; [.4542.0020.0002] # HENTAIGANA LETTER RE-3
+1B101 ; [.4543.0020.0002] # HENTAIGANA LETTER RE-4
+1B102 ; [.4544.0020.0002] # HENTAIGANA LETTER RO-1
+1B103 ; [.4545.0020.0002] # HENTAIGANA LETTER RO-2
+1B104 ; [.4546.0020.0002] # HENTAIGANA LETTER RO-3
+1B105 ; [.4547.0020.0002] # HENTAIGANA LETTER RO-4
+1B106 ; [.4548.0020.0002] # HENTAIGANA LETTER RO-5
+1B107 ; [.4549.0020.0002] # HENTAIGANA LETTER RO-6
+1B108 ; [.454A.0020.0002] # HENTAIGANA LETTER WA-1
+1B109 ; [.454B.0020.0002] # HENTAIGANA LETTER WA-2
+1B10A ; [.454C.0020.0002] # HENTAIGANA LETTER WA-3
+1B10B ; [.454D.0020.0002] # HENTAIGANA LETTER WA-4
+1B10C ; [.454E.0020.0002] # HENTAIGANA LETTER WA-5
+1B10D ; [.454F.0020.0002] # HENTAIGANA LETTER WI-1
+1B10E ; [.4550.0020.0002] # HENTAIGANA LETTER WI-2
+1B10F ; [.4551.0020.0002] # HENTAIGANA LETTER WI-3
+1B110 ; [.4552.0020.0002] # HENTAIGANA LETTER WI-4
+1B111 ; [.4553.0020.0002] # HENTAIGANA LETTER WI-5
+1B112 ; [.4554.0020.0002] # HENTAIGANA LETTER WE-1
+1B113 ; [.4555.0020.0002] # HENTAIGANA LETTER WE-2
+1B114 ; [.4556.0020.0002] # HENTAIGANA LETTER WE-3
+1B115 ; [.4557.0020.0002] # HENTAIGANA LETTER WE-4
+1B116 ; [.4558.0020.0002] # HENTAIGANA LETTER WO-1
+1B117 ; [.4559.0020.0002] # HENTAIGANA LETTER WO-2
+1B118 ; [.455A.0020.0002] # HENTAIGANA LETTER WO-3
+1B119 ; [.455B.0020.0002] # HENTAIGANA LETTER WO-4
+1B11A ; [.455C.0020.0002] # HENTAIGANA LETTER WO-5
+1B11B ; [.455D.0020.0002] # HENTAIGANA LETTER WO-6
+1B11C ; [.455E.0020.0002] # HENTAIGANA LETTER WO-7
+1B11D ; [.455F.0020.0002] # HENTAIGANA LETTER N-MU-MO-1
+1B11E ; [.4560.0020.0002] # HENTAIGANA LETTER N-MU-MO-2
+3105 ; [.4561.0020.0002] # BOPOMOFO LETTER B
+31A0 ; [.4561.0020.0004][.0000.0119.0004] # BOPOMOFO LETTER BU
+3106 ; [.4562.0020.0002] # BOPOMOFO LETTER P
+31B4 ; [.4562.0020.0019] # BOPOMOFO FINAL LETTER P
+3107 ; [.4563.0020.0002] # BOPOMOFO LETTER M
+31AC ; [.4564.0020.0002] # BOPOMOFO LETTER IM
+3108 ; [.4565.0020.0002] # BOPOMOFO LETTER F
+312A ; [.4566.0020.0002] # BOPOMOFO LETTER V
+3109 ; [.4567.0020.0002] # BOPOMOFO LETTER D
+310A ; [.4568.0020.0002] # BOPOMOFO LETTER T
+31B5 ; [.4568.0020.0019] # BOPOMOFO FINAL LETTER T
+310B ; [.4569.0020.0002] # BOPOMOFO LETTER N
+312F ; [.456A.0020.0002] # BOPOMOFO LETTER NN
+310C ; [.456B.0020.0002] # BOPOMOFO LETTER L
+310D ; [.456C.0020.0002] # BOPOMOFO LETTER G
+31BB ; [.456C.0020.0019] # BOPOMOFO FINAL LETTER G
+31A3 ; [.456C.0020.0004][.0000.0119.0004] # BOPOMOFO LETTER GU
+310E ; [.456D.0020.0002] # BOPOMOFO LETTER K
+31B6 ; [.456D.0020.0019] # BOPOMOFO FINAL LETTER K
+312B ; [.456E.0020.0002] # BOPOMOFO LETTER NG
+31AD ; [.456F.0020.0002] # BOPOMOFO LETTER NGG
+310F ; [.4570.0020.0002] # BOPOMOFO LETTER H
+31B7 ; [.4570.0020.0019] # BOPOMOFO FINAL LETTER H
+3110 ; [.4571.0020.0002] # BOPOMOFO LETTER J
+31A2 ; [.4571.0020.0004][.0000.0119.0004] # BOPOMOFO LETTER JI
+3111 ; [.4572.0020.0002] # BOPOMOFO LETTER Q
+3112 ; [.4573.0020.0002] # BOPOMOFO LETTER X
+312C ; [.4574.0020.0002] # BOPOMOFO LETTER GN
+31BC ; [.4575.0020.0002] # BOPOMOFO LETTER GW
+31BD ; [.4576.0020.0002] # BOPOMOFO LETTER KW
+3113 ; [.4577.0020.0002] # BOPOMOFO LETTER ZH
+3114 ; [.4578.0020.0002] # BOPOMOFO LETTER CH
+3115 ; [.4579.0020.0002] # BOPOMOFO LETTER SH
+3116 ; [.457A.0020.0002] # BOPOMOFO LETTER R
+3117 ; [.457B.0020.0002] # BOPOMOFO LETTER Z
+31A1 ; [.457B.0020.0004][.0000.0119.0004] # BOPOMOFO LETTER ZI
+3118 ; [.457C.0020.0002] # BOPOMOFO LETTER C
+3119 ; [.457D.0020.0002] # BOPOMOFO LETTER S
+31B8 ; [.457E.0020.0002] # BOPOMOFO LETTER GH
+31B9 ; [.457F.0020.0002] # BOPOMOFO LETTER LH
+31BA ; [.4580.0020.0002] # BOPOMOFO LETTER ZY
+311A ; [.4581.0020.0002] # BOPOMOFO LETTER A
+31A9 ; [.4581.0020.0004][.0000.0119.0004] # BOPOMOFO LETTER ANN
+311B ; [.4582.0020.0002] # BOPOMOFO LETTER O
+31A7 ; [.4582.0020.0004][.0000.0119.0004] # BOPOMOFO LETTER ONN
+31A6 ; [.4583.0020.0002] # BOPOMOFO LETTER OO
+311C ; [.4584.0020.0002] # BOPOMOFO LETTER E
+312E ; [.4584.0020.0004] # BOPOMOFO LETTER O WITH DOT ABOVE
+311D ; [.4585.0020.0002] # BOPOMOFO LETTER EH
+31A4 ; [.4586.0020.0002] # BOPOMOFO LETTER EE
+31A5 ; [.4586.0020.0004][.0000.0119.0004] # BOPOMOFO LETTER ENN
+311E ; [.4587.0020.0002] # BOPOMOFO LETTER AI
+31AE ; [.4587.0020.0004][.0000.0119.0004] # BOPOMOFO LETTER AINN
+311F ; [.4588.0020.0002] # BOPOMOFO LETTER EI
+3120 ; [.4589.0020.0002] # BOPOMOFO LETTER AU
+31AF ; [.4589.0020.0004][.0000.0119.0004] # BOPOMOFO LETTER AUNN
+3121 ; [.458A.0020.0002] # BOPOMOFO LETTER OU
+3122 ; [.458B.0020.0002] # BOPOMOFO LETTER AN
+3123 ; [.458C.0020.0002] # BOPOMOFO LETTER EN
+3124 ; [.458D.0020.0002] # BOPOMOFO LETTER ANG
+31B2 ; [.458E.0020.0002] # BOPOMOFO LETTER ONG
+3125 ; [.458F.0020.0002] # BOPOMOFO LETTER ENG
+31B0 ; [.4590.0020.0002] # BOPOMOFO LETTER AM
+31B1 ; [.4591.0020.0002] # BOPOMOFO LETTER OM
+3126 ; [.4592.0020.0002] # BOPOMOFO LETTER ER
+3127 ; [.4593.0020.0002] # BOPOMOFO LETTER I
+31AA ; [.4593.0020.0004][.0000.0119.0004] # BOPOMOFO LETTER INN
+31B3 ; [.4593.0020.0016][.0000.0119.0016] # BOPOMOFO LETTER INNN
+3128 ; [.4594.0020.0002] # BOPOMOFO LETTER U
+31AB ; [.4594.0020.0004][.0000.0119.0004] # BOPOMOFO LETTER UNN
+31A8 ; [.4594.0020.0004][.0000.011A.0004] # BOPOMOFO LETTER IR
+3129 ; [.4595.0020.0002] # BOPOMOFO LETTER IU
+312D ; [.4596.0020.0002] # BOPOMOFO LETTER IH
+31BE ; [.4597.0020.0002] # BOPOMOFO LETTER OE
+31BF ; [.4598.0020.0002] # BOPOMOFO LETTER AH
+A000 ; [.4599.0020.0002] # YI SYLLABLE IT
+A001 ; [.459A.0020.0002] # YI SYLLABLE IX
+A002 ; [.459B.0020.0002] # YI SYLLABLE I
+A003 ; [.459C.0020.0002] # YI SYLLABLE IP
+A004 ; [.459D.0020.0002] # YI SYLLABLE IET
+A005 ; [.459E.0020.0002] # YI SYLLABLE IEX
+A006 ; [.459F.0020.0002] # YI SYLLABLE IE
+A007 ; [.45A0.0020.0002] # YI SYLLABLE IEP
+A008 ; [.45A1.0020.0002] # YI SYLLABLE AT
+A009 ; [.45A2.0020.0002] # YI SYLLABLE AX
+A00A ; [.45A3.0020.0002] # YI SYLLABLE A
+A00B ; [.45A4.0020.0002] # YI SYLLABLE AP
+A00C ; [.45A5.0020.0002] # YI SYLLABLE UOX
+A00D ; [.45A6.0020.0002] # YI SYLLABLE UO
+A00E ; [.45A7.0020.0002] # YI SYLLABLE UOP
+A00F ; [.45A8.0020.0002] # YI SYLLABLE OT
+A010 ; [.45A9.0020.0002] # YI SYLLABLE OX
+A011 ; [.45AA.0020.0002] # YI SYLLABLE O
+A012 ; [.45AB.0020.0002] # YI SYLLABLE OP
+A013 ; [.45AC.0020.0002] # YI SYLLABLE EX
+A014 ; [.45AD.0020.0002] # YI SYLLABLE E
+A015 ; [.45AE.0020.0002] # YI SYLLABLE WU
+A016 ; [.45AF.0020.0002] # YI SYLLABLE BIT
+A017 ; [.45B0.0020.0002] # YI SYLLABLE BIX
+A018 ; [.45B1.0020.0002] # YI SYLLABLE BI
+A019 ; [.45B2.0020.0002] # YI SYLLABLE BIP
+A01A ; [.45B3.0020.0002] # YI SYLLABLE BIET
+A01B ; [.45B4.0020.0002] # YI SYLLABLE BIEX
+A01C ; [.45B5.0020.0002] # YI SYLLABLE BIE
+A01D ; [.45B6.0020.0002] # YI SYLLABLE BIEP
+A01E ; [.45B7.0020.0002] # YI SYLLABLE BAT
+A01F ; [.45B8.0020.0002] # YI SYLLABLE BAX
+A020 ; [.45B9.0020.0002] # YI SYLLABLE BA
+A021 ; [.45BA.0020.0002] # YI SYLLABLE BAP
+A022 ; [.45BB.0020.0002] # YI SYLLABLE BUOX
+A023 ; [.45BC.0020.0002] # YI SYLLABLE BUO
+A024 ; [.45BD.0020.0002] # YI SYLLABLE BUOP
+A025 ; [.45BE.0020.0002] # YI SYLLABLE BOT
+A026 ; [.45BF.0020.0002] # YI SYLLABLE BOX
+A027 ; [.45C0.0020.0002] # YI SYLLABLE BO
+A028 ; [.45C1.0020.0002] # YI SYLLABLE BOP
+A029 ; [.45C2.0020.0002] # YI SYLLABLE BEX
+A02A ; [.45C3.0020.0002] # YI SYLLABLE BE
+A02B ; [.45C4.0020.0002] # YI SYLLABLE BEP
+A02C ; [.45C5.0020.0002] # YI SYLLABLE BUT
+A02D ; [.45C6.0020.0002] # YI SYLLABLE BUX
+A02E ; [.45C7.0020.0002] # YI SYLLABLE BU
+A02F ; [.45C8.0020.0002] # YI SYLLABLE BUP
+A030 ; [.45C9.0020.0002] # YI SYLLABLE BURX
+A031 ; [.45CA.0020.0002] # YI SYLLABLE BUR
+A032 ; [.45CB.0020.0002] # YI SYLLABLE BYT
+A033 ; [.45CC.0020.0002] # YI SYLLABLE BYX
+A034 ; [.45CD.0020.0002] # YI SYLLABLE BY
+A035 ; [.45CE.0020.0002] # YI SYLLABLE BYP
+A036 ; [.45CF.0020.0002] # YI SYLLABLE BYRX
+A037 ; [.45D0.0020.0002] # YI SYLLABLE BYR
+A038 ; [.45D1.0020.0002] # YI SYLLABLE PIT
+A039 ; [.45D2.0020.0002] # YI SYLLABLE PIX
+A03A ; [.45D3.0020.0002] # YI SYLLABLE PI
+A03B ; [.45D4.0020.0002] # YI SYLLABLE PIP
+A03C ; [.45D5.0020.0002] # YI SYLLABLE PIEX
+A03D ; [.45D6.0020.0002] # YI SYLLABLE PIE
+A03E ; [.45D7.0020.0002] # YI SYLLABLE PIEP
+A03F ; [.45D8.0020.0002] # YI SYLLABLE PAT
+A040 ; [.45D9.0020.0002] # YI SYLLABLE PAX
+A041 ; [.45DA.0020.0002] # YI SYLLABLE PA
+A042 ; [.45DB.0020.0002] # YI SYLLABLE PAP
+A043 ; [.45DC.0020.0002] # YI SYLLABLE PUOX
+A044 ; [.45DD.0020.0002] # YI SYLLABLE PUO
+A045 ; [.45DE.0020.0002] # YI SYLLABLE PUOP
+A046 ; [.45DF.0020.0002] # YI SYLLABLE POT
+A047 ; [.45E0.0020.0002] # YI SYLLABLE POX
+A048 ; [.45E1.0020.0002] # YI SYLLABLE PO
+A049 ; [.45E2.0020.0002] # YI SYLLABLE POP
+A04A ; [.45E3.0020.0002] # YI SYLLABLE PUT
+A04B ; [.45E4.0020.0002] # YI SYLLABLE PUX
+A04C ; [.45E5.0020.0002] # YI SYLLABLE PU
+A04D ; [.45E6.0020.0002] # YI SYLLABLE PUP
+A04E ; [.45E7.0020.0002] # YI SYLLABLE PURX
+A04F ; [.45E8.0020.0002] # YI SYLLABLE PUR
+A050 ; [.45E9.0020.0002] # YI SYLLABLE PYT
+A051 ; [.45EA.0020.0002] # YI SYLLABLE PYX
+A052 ; [.45EB.0020.0002] # YI SYLLABLE PY
+A053 ; [.45EC.0020.0002] # YI SYLLABLE PYP
+A054 ; [.45ED.0020.0002] # YI SYLLABLE PYRX
+A055 ; [.45EE.0020.0002] # YI SYLLABLE PYR
+A056 ; [.45EF.0020.0002] # YI SYLLABLE BBIT
+A057 ; [.45F0.0020.0002] # YI SYLLABLE BBIX
+A058 ; [.45F1.0020.0002] # YI SYLLABLE BBI
+A059 ; [.45F2.0020.0002] # YI SYLLABLE BBIP
+A05A ; [.45F3.0020.0002] # YI SYLLABLE BBIET
+A05B ; [.45F4.0020.0002] # YI SYLLABLE BBIEX
+A05C ; [.45F5.0020.0002] # YI SYLLABLE BBIE
+A05D ; [.45F6.0020.0002] # YI SYLLABLE BBIEP
+A05E ; [.45F7.0020.0002] # YI SYLLABLE BBAT
+A05F ; [.45F8.0020.0002] # YI SYLLABLE BBAX
+A060 ; [.45F9.0020.0002] # YI SYLLABLE BBA
+A061 ; [.45FA.0020.0002] # YI SYLLABLE BBAP
+A062 ; [.45FB.0020.0002] # YI SYLLABLE BBUOX
+A063 ; [.45FC.0020.0002] # YI SYLLABLE BBUO
+A064 ; [.45FD.0020.0002] # YI SYLLABLE BBUOP
+A065 ; [.45FE.0020.0002] # YI SYLLABLE BBOT
+A066 ; [.45FF.0020.0002] # YI SYLLABLE BBOX
+A067 ; [.4600.0020.0002] # YI SYLLABLE BBO
+A068 ; [.4601.0020.0002] # YI SYLLABLE BBOP
+A069 ; [.4602.0020.0002] # YI SYLLABLE BBEX
+A06A ; [.4603.0020.0002] # YI SYLLABLE BBE
+A06B ; [.4604.0020.0002] # YI SYLLABLE BBEP
+A06C ; [.4605.0020.0002] # YI SYLLABLE BBUT
+A06D ; [.4606.0020.0002] # YI SYLLABLE BBUX
+A06E ; [.4607.0020.0002] # YI SYLLABLE BBU
+A06F ; [.4608.0020.0002] # YI SYLLABLE BBUP
+A070 ; [.4609.0020.0002] # YI SYLLABLE BBURX
+A071 ; [.460A.0020.0002] # YI SYLLABLE BBUR
+A072 ; [.460B.0020.0002] # YI SYLLABLE BBYT
+A073 ; [.460C.0020.0002] # YI SYLLABLE BBYX
+A074 ; [.460D.0020.0002] # YI SYLLABLE BBY
+A075 ; [.460E.0020.0002] # YI SYLLABLE BBYP
+A076 ; [.460F.0020.0002] # YI SYLLABLE NBIT
+A077 ; [.4610.0020.0002] # YI SYLLABLE NBIX
+A078 ; [.4611.0020.0002] # YI SYLLABLE NBI
+A079 ; [.4612.0020.0002] # YI SYLLABLE NBIP
+A07A ; [.4613.0020.0002] # YI SYLLABLE NBIEX
+A07B ; [.4614.0020.0002] # YI SYLLABLE NBIE
+A07C ; [.4615.0020.0002] # YI SYLLABLE NBIEP
+A07D ; [.4616.0020.0002] # YI SYLLABLE NBAT
+A07E ; [.4617.0020.0002] # YI SYLLABLE NBAX
+A07F ; [.4618.0020.0002] # YI SYLLABLE NBA
+A080 ; [.4619.0020.0002] # YI SYLLABLE NBAP
+A081 ; [.461A.0020.0002] # YI SYLLABLE NBOT
+A082 ; [.461B.0020.0002] # YI SYLLABLE NBOX
+A083 ; [.461C.0020.0002] # YI SYLLABLE NBO
+A084 ; [.461D.0020.0002] # YI SYLLABLE NBOP
+A085 ; [.461E.0020.0002] # YI SYLLABLE NBUT
+A086 ; [.461F.0020.0002] # YI SYLLABLE NBUX
+A087 ; [.4620.0020.0002] # YI SYLLABLE NBU
+A088 ; [.4621.0020.0002] # YI SYLLABLE NBUP
+A089 ; [.4622.0020.0002] # YI SYLLABLE NBURX
+A08A ; [.4623.0020.0002] # YI SYLLABLE NBUR
+A08B ; [.4624.0020.0002] # YI SYLLABLE NBYT
+A08C ; [.4625.0020.0002] # YI SYLLABLE NBYX
+A08D ; [.4626.0020.0002] # YI SYLLABLE NBY
+A08E ; [.4627.0020.0002] # YI SYLLABLE NBYP
+A08F ; [.4628.0020.0002] # YI SYLLABLE NBYRX
+A090 ; [.4629.0020.0002] # YI SYLLABLE NBYR
+A091 ; [.462A.0020.0002] # YI SYLLABLE HMIT
+A092 ; [.462B.0020.0002] # YI SYLLABLE HMIX
+A093 ; [.462C.0020.0002] # YI SYLLABLE HMI
+A094 ; [.462D.0020.0002] # YI SYLLABLE HMIP
+A095 ; [.462E.0020.0002] # YI SYLLABLE HMIEX
+A096 ; [.462F.0020.0002] # YI SYLLABLE HMIE
+A097 ; [.4630.0020.0002] # YI SYLLABLE HMIEP
+A098 ; [.4631.0020.0002] # YI SYLLABLE HMAT
+A099 ; [.4632.0020.0002] # YI SYLLABLE HMAX
+A09A ; [.4633.0020.0002] # YI SYLLABLE HMA
+A09B ; [.4634.0020.0002] # YI SYLLABLE HMAP
+A09C ; [.4635.0020.0002] # YI SYLLABLE HMUOX
+A09D ; [.4636.0020.0002] # YI SYLLABLE HMUO
+A09E ; [.4637.0020.0002] # YI SYLLABLE HMUOP
+A09F ; [.4638.0020.0002] # YI SYLLABLE HMOT
+A0A0 ; [.4639.0020.0002] # YI SYLLABLE HMOX
+A0A1 ; [.463A.0020.0002] # YI SYLLABLE HMO
+A0A2 ; [.463B.0020.0002] # YI SYLLABLE HMOP
+A0A3 ; [.463C.0020.0002] # YI SYLLABLE HMUT
+A0A4 ; [.463D.0020.0002] # YI SYLLABLE HMUX
+A0A5 ; [.463E.0020.0002] # YI SYLLABLE HMU
+A0A6 ; [.463F.0020.0002] # YI SYLLABLE HMUP
+A0A7 ; [.4640.0020.0002] # YI SYLLABLE HMURX
+A0A8 ; [.4641.0020.0002] # YI SYLLABLE HMUR
+A0A9 ; [.4642.0020.0002] # YI SYLLABLE HMYX
+A0AA ; [.4643.0020.0002] # YI SYLLABLE HMY
+A0AB ; [.4644.0020.0002] # YI SYLLABLE HMYP
+A0AC ; [.4645.0020.0002] # YI SYLLABLE HMYRX
+A0AD ; [.4646.0020.0002] # YI SYLLABLE HMYR
+A0AE ; [.4647.0020.0002] # YI SYLLABLE MIT
+A0AF ; [.4648.0020.0002] # YI SYLLABLE MIX
+A0B0 ; [.4649.0020.0002] # YI SYLLABLE MI
+A0B1 ; [.464A.0020.0002] # YI SYLLABLE MIP
+A0B2 ; [.464B.0020.0002] # YI SYLLABLE MIEX
+A0B3 ; [.464C.0020.0002] # YI SYLLABLE MIE
+A0B4 ; [.464D.0020.0002] # YI SYLLABLE MIEP
+A0B5 ; [.464E.0020.0002] # YI SYLLABLE MAT
+A0B6 ; [.464F.0020.0002] # YI SYLLABLE MAX
+A0B7 ; [.4650.0020.0002] # YI SYLLABLE MA
+A0B8 ; [.4651.0020.0002] # YI SYLLABLE MAP
+A0B9 ; [.4652.0020.0002] # YI SYLLABLE MUOT
+A0BA ; [.4653.0020.0002] # YI SYLLABLE MUOX
+A0BB ; [.4654.0020.0002] # YI SYLLABLE MUO
+A0BC ; [.4655.0020.0002] # YI SYLLABLE MUOP
+A0BD ; [.4656.0020.0002] # YI SYLLABLE MOT
+A0BE ; [.4657.0020.0002] # YI SYLLABLE MOX
+A0BF ; [.4658.0020.0002] # YI SYLLABLE MO
+A0C0 ; [.4659.0020.0002] # YI SYLLABLE MOP
+A0C1 ; [.465A.0020.0002] # YI SYLLABLE MEX
+A0C2 ; [.465B.0020.0002] # YI SYLLABLE ME
+A0C3 ; [.465C.0020.0002] # YI SYLLABLE MUT
+A0C4 ; [.465D.0020.0002] # YI SYLLABLE MUX
+A0C5 ; [.465E.0020.0002] # YI SYLLABLE MU
+A0C6 ; [.465F.0020.0002] # YI SYLLABLE MUP
+A0C7 ; [.4660.0020.0002] # YI SYLLABLE MURX
+A0C8 ; [.4661.0020.0002] # YI SYLLABLE MUR
+A0C9 ; [.4662.0020.0002] # YI SYLLABLE MYT
+A0CA ; [.4663.0020.0002] # YI SYLLABLE MYX
+A0CB ; [.4664.0020.0002] # YI SYLLABLE MY
+A0CC ; [.4665.0020.0002] # YI SYLLABLE MYP
+A0CD ; [.4666.0020.0002] # YI SYLLABLE FIT
+A0CE ; [.4667.0020.0002] # YI SYLLABLE FIX
+A0CF ; [.4668.0020.0002] # YI SYLLABLE FI
+A0D0 ; [.4669.0020.0002] # YI SYLLABLE FIP
+A0D1 ; [.466A.0020.0002] # YI SYLLABLE FAT
+A0D2 ; [.466B.0020.0002] # YI SYLLABLE FAX
+A0D3 ; [.466C.0020.0002] # YI SYLLABLE FA
+A0D4 ; [.466D.0020.0002] # YI SYLLABLE FAP
+A0D5 ; [.466E.0020.0002] # YI SYLLABLE FOX
+A0D6 ; [.466F.0020.0002] # YI SYLLABLE FO
+A0D7 ; [.4670.0020.0002] # YI SYLLABLE FOP
+A0D8 ; [.4671.0020.0002] # YI SYLLABLE FUT
+A0D9 ; [.4672.0020.0002] # YI SYLLABLE FUX
+A0DA ; [.4673.0020.0002] # YI SYLLABLE FU
+A0DB ; [.4674.0020.0002] # YI SYLLABLE FUP
+A0DC ; [.4675.0020.0002] # YI SYLLABLE FURX
+A0DD ; [.4676.0020.0002] # YI SYLLABLE FUR
+A0DE ; [.4677.0020.0002] # YI SYLLABLE FYT
+A0DF ; [.4678.0020.0002] # YI SYLLABLE FYX
+A0E0 ; [.4679.0020.0002] # YI SYLLABLE FY
+A0E1 ; [.467A.0020.0002] # YI SYLLABLE FYP
+A0E2 ; [.467B.0020.0002] # YI SYLLABLE VIT
+A0E3 ; [.467C.0020.0002] # YI SYLLABLE VIX
+A0E4 ; [.467D.0020.0002] # YI SYLLABLE VI
+A0E5 ; [.467E.0020.0002] # YI SYLLABLE VIP
+A0E6 ; [.467F.0020.0002] # YI SYLLABLE VIET
+A0E7 ; [.4680.0020.0002] # YI SYLLABLE VIEX
+A0E8 ; [.4681.0020.0002] # YI SYLLABLE VIE
+A0E9 ; [.4682.0020.0002] # YI SYLLABLE VIEP
+A0EA ; [.4683.0020.0002] # YI SYLLABLE VAT
+A0EB ; [.4684.0020.0002] # YI SYLLABLE VAX
+A0EC ; [.4685.0020.0002] # YI SYLLABLE VA
+A0ED ; [.4686.0020.0002] # YI SYLLABLE VAP
+A0EE ; [.4687.0020.0002] # YI SYLLABLE VOT
+A0EF ; [.4688.0020.0002] # YI SYLLABLE VOX
+A0F0 ; [.4689.0020.0002] # YI SYLLABLE VO
+A0F1 ; [.468A.0020.0002] # YI SYLLABLE VOP
+A0F2 ; [.468B.0020.0002] # YI SYLLABLE VEX
+A0F3 ; [.468C.0020.0002] # YI SYLLABLE VEP
+A0F4 ; [.468D.0020.0002] # YI SYLLABLE VUT
+A0F5 ; [.468E.0020.0002] # YI SYLLABLE VUX
+A0F6 ; [.468F.0020.0002] # YI SYLLABLE VU
+A0F7 ; [.4690.0020.0002] # YI SYLLABLE VUP
+A0F8 ; [.4691.0020.0002] # YI SYLLABLE VURX
+A0F9 ; [.4692.0020.0002] # YI SYLLABLE VUR
+A0FA ; [.4693.0020.0002] # YI SYLLABLE VYT
+A0FB ; [.4694.0020.0002] # YI SYLLABLE VYX
+A0FC ; [.4695.0020.0002] # YI SYLLABLE VY
+A0FD ; [.4696.0020.0002] # YI SYLLABLE VYP
+A0FE ; [.4697.0020.0002] # YI SYLLABLE VYRX
+A0FF ; [.4698.0020.0002] # YI SYLLABLE VYR
+A100 ; [.4699.0020.0002] # YI SYLLABLE DIT
+A101 ; [.469A.0020.0002] # YI SYLLABLE DIX
+A102 ; [.469B.0020.0002] # YI SYLLABLE DI
+A103 ; [.469C.0020.0002] # YI SYLLABLE DIP
+A104 ; [.469D.0020.0002] # YI SYLLABLE DIEX
+A105 ; [.469E.0020.0002] # YI SYLLABLE DIE
+A106 ; [.469F.0020.0002] # YI SYLLABLE DIEP
+A107 ; [.46A0.0020.0002] # YI SYLLABLE DAT
+A108 ; [.46A1.0020.0002] # YI SYLLABLE DAX
+A109 ; [.46A2.0020.0002] # YI SYLLABLE DA
+A10A ; [.46A3.0020.0002] # YI SYLLABLE DAP
+A10B ; [.46A4.0020.0002] # YI SYLLABLE DUOX
+A10C ; [.46A5.0020.0002] # YI SYLLABLE DUO
+A10D ; [.46A6.0020.0002] # YI SYLLABLE DOT
+A10E ; [.46A7.0020.0002] # YI SYLLABLE DOX
+A10F ; [.46A8.0020.0002] # YI SYLLABLE DO
+A110 ; [.46A9.0020.0002] # YI SYLLABLE DOP
+A111 ; [.46AA.0020.0002] # YI SYLLABLE DEX
+A112 ; [.46AB.0020.0002] # YI SYLLABLE DE
+A113 ; [.46AC.0020.0002] # YI SYLLABLE DEP
+A114 ; [.46AD.0020.0002] # YI SYLLABLE DUT
+A115 ; [.46AE.0020.0002] # YI SYLLABLE DUX
+A116 ; [.46AF.0020.0002] # YI SYLLABLE DU
+A117 ; [.46B0.0020.0002] # YI SYLLABLE DUP
+A118 ; [.46B1.0020.0002] # YI SYLLABLE DURX
+A119 ; [.46B2.0020.0002] # YI SYLLABLE DUR
+A11A ; [.46B3.0020.0002] # YI SYLLABLE TIT
+A11B ; [.46B4.0020.0002] # YI SYLLABLE TIX
+A11C ; [.46B5.0020.0002] # YI SYLLABLE TI
+A11D ; [.46B6.0020.0002] # YI SYLLABLE TIP
+A11E ; [.46B7.0020.0002] # YI SYLLABLE TIEX
+A11F ; [.46B8.0020.0002] # YI SYLLABLE TIE
+A120 ; [.46B9.0020.0002] # YI SYLLABLE TIEP
+A121 ; [.46BA.0020.0002] # YI SYLLABLE TAT
+A122 ; [.46BB.0020.0002] # YI SYLLABLE TAX
+A123 ; [.46BC.0020.0002] # YI SYLLABLE TA
+A124 ; [.46BD.0020.0002] # YI SYLLABLE TAP
+A125 ; [.46BE.0020.0002] # YI SYLLABLE TUOT
+A126 ; [.46BF.0020.0002] # YI SYLLABLE TUOX
+A127 ; [.46C0.0020.0002] # YI SYLLABLE TUO
+A128 ; [.46C1.0020.0002] # YI SYLLABLE TUOP
+A129 ; [.46C2.0020.0002] # YI SYLLABLE TOT
+A12A ; [.46C3.0020.0002] # YI SYLLABLE TOX
+A12B ; [.46C4.0020.0002] # YI SYLLABLE TO
+A12C ; [.46C5.0020.0002] # YI SYLLABLE TOP
+A12D ; [.46C6.0020.0002] # YI SYLLABLE TEX
+A12E ; [.46C7.0020.0002] # YI SYLLABLE TE
+A12F ; [.46C8.0020.0002] # YI SYLLABLE TEP
+A130 ; [.46C9.0020.0002] # YI SYLLABLE TUT
+A131 ; [.46CA.0020.0002] # YI SYLLABLE TUX
+A132 ; [.46CB.0020.0002] # YI SYLLABLE TU
+A133 ; [.46CC.0020.0002] # YI SYLLABLE TUP
+A134 ; [.46CD.0020.0002] # YI SYLLABLE TURX
+A135 ; [.46CE.0020.0002] # YI SYLLABLE TUR
+A136 ; [.46CF.0020.0002] # YI SYLLABLE DDIT
+A137 ; [.46D0.0020.0002] # YI SYLLABLE DDIX
+A138 ; [.46D1.0020.0002] # YI SYLLABLE DDI
+A139 ; [.46D2.0020.0002] # YI SYLLABLE DDIP
+A13A ; [.46D3.0020.0002] # YI SYLLABLE DDIEX
+A13B ; [.46D4.0020.0002] # YI SYLLABLE DDIE
+A13C ; [.46D5.0020.0002] # YI SYLLABLE DDIEP
+A13D ; [.46D6.0020.0002] # YI SYLLABLE DDAT
+A13E ; [.46D7.0020.0002] # YI SYLLABLE DDAX
+A13F ; [.46D8.0020.0002] # YI SYLLABLE DDA
+A140 ; [.46D9.0020.0002] # YI SYLLABLE DDAP
+A141 ; [.46DA.0020.0002] # YI SYLLABLE DDUOX
+A142 ; [.46DB.0020.0002] # YI SYLLABLE DDUO
+A143 ; [.46DC.0020.0002] # YI SYLLABLE DDUOP
+A144 ; [.46DD.0020.0002] # YI SYLLABLE DDOT
+A145 ; [.46DE.0020.0002] # YI SYLLABLE DDOX
+A146 ; [.46DF.0020.0002] # YI SYLLABLE DDO
+A147 ; [.46E0.0020.0002] # YI SYLLABLE DDOP
+A148 ; [.46E1.0020.0002] # YI SYLLABLE DDEX
+A149 ; [.46E2.0020.0002] # YI SYLLABLE DDE
+A14A ; [.46E3.0020.0002] # YI SYLLABLE DDEP
+A14B ; [.46E4.0020.0002] # YI SYLLABLE DDUT
+A14C ; [.46E5.0020.0002] # YI SYLLABLE DDUX
+A14D ; [.46E6.0020.0002] # YI SYLLABLE DDU
+A14E ; [.46E7.0020.0002] # YI SYLLABLE DDUP
+A14F ; [.46E8.0020.0002] # YI SYLLABLE DDURX
+A150 ; [.46E9.0020.0002] # YI SYLLABLE DDUR
+A151 ; [.46EA.0020.0002] # YI SYLLABLE NDIT
+A152 ; [.46EB.0020.0002] # YI SYLLABLE NDIX
+A153 ; [.46EC.0020.0002] # YI SYLLABLE NDI
+A154 ; [.46ED.0020.0002] # YI SYLLABLE NDIP
+A155 ; [.46EE.0020.0002] # YI SYLLABLE NDIEX
+A156 ; [.46EF.0020.0002] # YI SYLLABLE NDIE
+A157 ; [.46F0.0020.0002] # YI SYLLABLE NDAT
+A158 ; [.46F1.0020.0002] # YI SYLLABLE NDAX
+A159 ; [.46F2.0020.0002] # YI SYLLABLE NDA
+A15A ; [.46F3.0020.0002] # YI SYLLABLE NDAP
+A15B ; [.46F4.0020.0002] # YI SYLLABLE NDOT
+A15C ; [.46F5.0020.0002] # YI SYLLABLE NDOX
+A15D ; [.46F6.0020.0002] # YI SYLLABLE NDO
+A15E ; [.46F7.0020.0002] # YI SYLLABLE NDOP
+A15F ; [.46F8.0020.0002] # YI SYLLABLE NDEX
+A160 ; [.46F9.0020.0002] # YI SYLLABLE NDE
+A161 ; [.46FA.0020.0002] # YI SYLLABLE NDEP
+A162 ; [.46FB.0020.0002] # YI SYLLABLE NDUT
+A163 ; [.46FC.0020.0002] # YI SYLLABLE NDUX
+A164 ; [.46FD.0020.0002] # YI SYLLABLE NDU
+A165 ; [.46FE.0020.0002] # YI SYLLABLE NDUP
+A166 ; [.46FF.0020.0002] # YI SYLLABLE NDURX
+A167 ; [.4700.0020.0002] # YI SYLLABLE NDUR
+A168 ; [.4701.0020.0002] # YI SYLLABLE HNIT
+A169 ; [.4702.0020.0002] # YI SYLLABLE HNIX
+A16A ; [.4703.0020.0002] # YI SYLLABLE HNI
+A16B ; [.4704.0020.0002] # YI SYLLABLE HNIP
+A16C ; [.4705.0020.0002] # YI SYLLABLE HNIET
+A16D ; [.4706.0020.0002] # YI SYLLABLE HNIEX
+A16E ; [.4707.0020.0002] # YI SYLLABLE HNIE
+A16F ; [.4708.0020.0002] # YI SYLLABLE HNIEP
+A170 ; [.4709.0020.0002] # YI SYLLABLE HNAT
+A171 ; [.470A.0020.0002] # YI SYLLABLE HNAX
+A172 ; [.470B.0020.0002] # YI SYLLABLE HNA
+A173 ; [.470C.0020.0002] # YI SYLLABLE HNAP
+A174 ; [.470D.0020.0002] # YI SYLLABLE HNUOX
+A175 ; [.470E.0020.0002] # YI SYLLABLE HNUO
+A176 ; [.470F.0020.0002] # YI SYLLABLE HNOT
+A177 ; [.4710.0020.0002] # YI SYLLABLE HNOX
+A178 ; [.4711.0020.0002] # YI SYLLABLE HNOP
+A179 ; [.4712.0020.0002] # YI SYLLABLE HNEX
+A17A ; [.4713.0020.0002] # YI SYLLABLE HNE
+A17B ; [.4714.0020.0002] # YI SYLLABLE HNEP
+A17C ; [.4715.0020.0002] # YI SYLLABLE HNUT
+A17D ; [.4716.0020.0002] # YI SYLLABLE NIT
+A17E ; [.4717.0020.0002] # YI SYLLABLE NIX
+A17F ; [.4718.0020.0002] # YI SYLLABLE NI
+A180 ; [.4719.0020.0002] # YI SYLLABLE NIP
+A181 ; [.471A.0020.0002] # YI SYLLABLE NIEX
+A182 ; [.471B.0020.0002] # YI SYLLABLE NIE
+A183 ; [.471C.0020.0002] # YI SYLLABLE NIEP
+A184 ; [.471D.0020.0002] # YI SYLLABLE NAX
+A185 ; [.471E.0020.0002] # YI SYLLABLE NA
+A186 ; [.471F.0020.0002] # YI SYLLABLE NAP
+A187 ; [.4720.0020.0002] # YI SYLLABLE NUOX
+A188 ; [.4721.0020.0002] # YI SYLLABLE NUO
+A189 ; [.4722.0020.0002] # YI SYLLABLE NUOP
+A18A ; [.4723.0020.0002] # YI SYLLABLE NOT
+A18B ; [.4724.0020.0002] # YI SYLLABLE NOX
+A18C ; [.4725.0020.0002] # YI SYLLABLE NO
+A18D ; [.4726.0020.0002] # YI SYLLABLE NOP
+A18E ; [.4727.0020.0002] # YI SYLLABLE NEX
+A18F ; [.4728.0020.0002] # YI SYLLABLE NE
+A190 ; [.4729.0020.0002] # YI SYLLABLE NEP
+A191 ; [.472A.0020.0002] # YI SYLLABLE NUT
+A192 ; [.472B.0020.0002] # YI SYLLABLE NUX
+A193 ; [.472C.0020.0002] # YI SYLLABLE NU
+A194 ; [.472D.0020.0002] # YI SYLLABLE NUP
+A195 ; [.472E.0020.0002] # YI SYLLABLE NURX
+A196 ; [.472F.0020.0002] # YI SYLLABLE NUR
+A197 ; [.4730.0020.0002] # YI SYLLABLE HLIT
+A198 ; [.4731.0020.0002] # YI SYLLABLE HLIX
+A199 ; [.4732.0020.0002] # YI SYLLABLE HLI
+A19A ; [.4733.0020.0002] # YI SYLLABLE HLIP
+A19B ; [.4734.0020.0002] # YI SYLLABLE HLIEX
+A19C ; [.4735.0020.0002] # YI SYLLABLE HLIE
+A19D ; [.4736.0020.0002] # YI SYLLABLE HLIEP
+A19E ; [.4737.0020.0002] # YI SYLLABLE HLAT
+A19F ; [.4738.0020.0002] # YI SYLLABLE HLAX
+A1A0 ; [.4739.0020.0002] # YI SYLLABLE HLA
+A1A1 ; [.473A.0020.0002] # YI SYLLABLE HLAP
+A1A2 ; [.473B.0020.0002] # YI SYLLABLE HLUOX
+A1A3 ; [.473C.0020.0002] # YI SYLLABLE HLUO
+A1A4 ; [.473D.0020.0002] # YI SYLLABLE HLUOP
+A1A5 ; [.473E.0020.0002] # YI SYLLABLE HLOX
+A1A6 ; [.473F.0020.0002] # YI SYLLABLE HLO
+A1A7 ; [.4740.0020.0002] # YI SYLLABLE HLOP
+A1A8 ; [.4741.0020.0002] # YI SYLLABLE HLEX
+A1A9 ; [.4742.0020.0002] # YI SYLLABLE HLE
+A1AA ; [.4743.0020.0002] # YI SYLLABLE HLEP
+A1AB ; [.4744.0020.0002] # YI SYLLABLE HLUT
+A1AC ; [.4745.0020.0002] # YI SYLLABLE HLUX
+A1AD ; [.4746.0020.0002] # YI SYLLABLE HLU
+A1AE ; [.4747.0020.0002] # YI SYLLABLE HLUP
+A1AF ; [.4748.0020.0002] # YI SYLLABLE HLURX
+A1B0 ; [.4749.0020.0002] # YI SYLLABLE HLUR
+A1B1 ; [.474A.0020.0002] # YI SYLLABLE HLYT
+A1B2 ; [.474B.0020.0002] # YI SYLLABLE HLYX
+A1B3 ; [.474C.0020.0002] # YI SYLLABLE HLY
+A1B4 ; [.474D.0020.0002] # YI SYLLABLE HLYP
+A1B5 ; [.474E.0020.0002] # YI SYLLABLE HLYRX
+A1B6 ; [.474F.0020.0002] # YI SYLLABLE HLYR
+A1B7 ; [.4750.0020.0002] # YI SYLLABLE LIT
+A1B8 ; [.4751.0020.0002] # YI SYLLABLE LIX
+A1B9 ; [.4752.0020.0002] # YI SYLLABLE LI
+A1BA ; [.4753.0020.0002] # YI SYLLABLE LIP
+A1BB ; [.4754.0020.0002] # YI SYLLABLE LIET
+A1BC ; [.4755.0020.0002] # YI SYLLABLE LIEX
+A1BD ; [.4756.0020.0002] # YI SYLLABLE LIE
+A1BE ; [.4757.0020.0002] # YI SYLLABLE LIEP
+A1BF ; [.4758.0020.0002] # YI SYLLABLE LAT
+A1C0 ; [.4759.0020.0002] # YI SYLLABLE LAX
+A1C1 ; [.475A.0020.0002] # YI SYLLABLE LA
+A1C2 ; [.475B.0020.0002] # YI SYLLABLE LAP
+A1C3 ; [.475C.0020.0002] # YI SYLLABLE LUOT
+A1C4 ; [.475D.0020.0002] # YI SYLLABLE LUOX
+A1C5 ; [.475E.0020.0002] # YI SYLLABLE LUO
+A1C6 ; [.475F.0020.0002] # YI SYLLABLE LUOP
+A1C7 ; [.4760.0020.0002] # YI SYLLABLE LOT
+A1C8 ; [.4761.0020.0002] # YI SYLLABLE LOX
+A1C9 ; [.4762.0020.0002] # YI SYLLABLE LO
+A1CA ; [.4763.0020.0002] # YI SYLLABLE LOP
+A1CB ; [.4764.0020.0002] # YI SYLLABLE LEX
+A1CC ; [.4765.0020.0002] # YI SYLLABLE LE
+A1CD ; [.4766.0020.0002] # YI SYLLABLE LEP
+A1CE ; [.4767.0020.0002] # YI SYLLABLE LUT
+A1CF ; [.4768.0020.0002] # YI SYLLABLE LUX
+A1D0 ; [.4769.0020.0002] # YI SYLLABLE LU
+A1D1 ; [.476A.0020.0002] # YI SYLLABLE LUP
+A1D2 ; [.476B.0020.0002] # YI SYLLABLE LURX
+A1D3 ; [.476C.0020.0002] # YI SYLLABLE LUR
+A1D4 ; [.476D.0020.0002] # YI SYLLABLE LYT
+A1D5 ; [.476E.0020.0002] # YI SYLLABLE LYX
+A1D6 ; [.476F.0020.0002] # YI SYLLABLE LY
+A1D7 ; [.4770.0020.0002] # YI SYLLABLE LYP
+A1D8 ; [.4771.0020.0002] # YI SYLLABLE LYRX
+A1D9 ; [.4772.0020.0002] # YI SYLLABLE LYR
+A1DA ; [.4773.0020.0002] # YI SYLLABLE GIT
+A1DB ; [.4774.0020.0002] # YI SYLLABLE GIX
+A1DC ; [.4775.0020.0002] # YI SYLLABLE GI
+A1DD ; [.4776.0020.0002] # YI SYLLABLE GIP
+A1DE ; [.4777.0020.0002] # YI SYLLABLE GIET
+A1DF ; [.4778.0020.0002] # YI SYLLABLE GIEX
+A1E0 ; [.4779.0020.0002] # YI SYLLABLE GIE
+A1E1 ; [.477A.0020.0002] # YI SYLLABLE GIEP
+A1E2 ; [.477B.0020.0002] # YI SYLLABLE GAT
+A1E3 ; [.477C.0020.0002] # YI SYLLABLE GAX
+A1E4 ; [.477D.0020.0002] # YI SYLLABLE GA
+A1E5 ; [.477E.0020.0002] # YI SYLLABLE GAP
+A1E6 ; [.477F.0020.0002] # YI SYLLABLE GUOT
+A1E7 ; [.4780.0020.0002] # YI SYLLABLE GUOX
+A1E8 ; [.4781.0020.0002] # YI SYLLABLE GUO
+A1E9 ; [.4782.0020.0002] # YI SYLLABLE GUOP
+A1EA ; [.4783.0020.0002] # YI SYLLABLE GOT
+A1EB ; [.4784.0020.0002] # YI SYLLABLE GOX
+A1EC ; [.4785.0020.0002] # YI SYLLABLE GO
+A1ED ; [.4786.0020.0002] # YI SYLLABLE GOP
+A1EE ; [.4787.0020.0002] # YI SYLLABLE GET
+A1EF ; [.4788.0020.0002] # YI SYLLABLE GEX
+A1F0 ; [.4789.0020.0002] # YI SYLLABLE GE
+A1F1 ; [.478A.0020.0002] # YI SYLLABLE GEP
+A1F2 ; [.478B.0020.0002] # YI SYLLABLE GUT
+A1F3 ; [.478C.0020.0002] # YI SYLLABLE GUX
+A1F4 ; [.478D.0020.0002] # YI SYLLABLE GU
+A1F5 ; [.478E.0020.0002] # YI SYLLABLE GUP
+A1F6 ; [.478F.0020.0002] # YI SYLLABLE GURX
+A1F7 ; [.4790.0020.0002] # YI SYLLABLE GUR
+A1F8 ; [.4791.0020.0002] # YI SYLLABLE KIT
+A1F9 ; [.4792.0020.0002] # YI SYLLABLE KIX
+A1FA ; [.4793.0020.0002] # YI SYLLABLE KI
+A1FB ; [.4794.0020.0002] # YI SYLLABLE KIP
+A1FC ; [.4795.0020.0002] # YI SYLLABLE KIEX
+A1FD ; [.4796.0020.0002] # YI SYLLABLE KIE
+A1FE ; [.4797.0020.0002] # YI SYLLABLE KIEP
+A1FF ; [.4798.0020.0002] # YI SYLLABLE KAT
+A200 ; [.4799.0020.0002] # YI SYLLABLE KAX
+A201 ; [.479A.0020.0002] # YI SYLLABLE KA
+A202 ; [.479B.0020.0002] # YI SYLLABLE KAP
+A203 ; [.479C.0020.0002] # YI SYLLABLE KUOX
+A204 ; [.479D.0020.0002] # YI SYLLABLE KUO
+A205 ; [.479E.0020.0002] # YI SYLLABLE KUOP
+A206 ; [.479F.0020.0002] # YI SYLLABLE KOT
+A207 ; [.47A0.0020.0002] # YI SYLLABLE KOX
+A208 ; [.47A1.0020.0002] # YI SYLLABLE KO
+A209 ; [.47A2.0020.0002] # YI SYLLABLE KOP
+A20A ; [.47A3.0020.0002] # YI SYLLABLE KET
+A20B ; [.47A4.0020.0002] # YI SYLLABLE KEX
+A20C ; [.47A5.0020.0002] # YI SYLLABLE KE
+A20D ; [.47A6.0020.0002] # YI SYLLABLE KEP
+A20E ; [.47A7.0020.0002] # YI SYLLABLE KUT
+A20F ; [.47A8.0020.0002] # YI SYLLABLE KUX
+A210 ; [.47A9.0020.0002] # YI SYLLABLE KU
+A211 ; [.47AA.0020.0002] # YI SYLLABLE KUP
+A212 ; [.47AB.0020.0002] # YI SYLLABLE KURX
+A213 ; [.47AC.0020.0002] # YI SYLLABLE KUR
+A214 ; [.47AD.0020.0002] # YI SYLLABLE GGIT
+A215 ; [.47AE.0020.0002] # YI SYLLABLE GGIX
+A216 ; [.47AF.0020.0002] # YI SYLLABLE GGI
+A217 ; [.47B0.0020.0002] # YI SYLLABLE GGIEX
+A218 ; [.47B1.0020.0002] # YI SYLLABLE GGIE
+A219 ; [.47B2.0020.0002] # YI SYLLABLE GGIEP
+A21A ; [.47B3.0020.0002] # YI SYLLABLE GGAT
+A21B ; [.47B4.0020.0002] # YI SYLLABLE GGAX
+A21C ; [.47B5.0020.0002] # YI SYLLABLE GGA
+A21D ; [.47B6.0020.0002] # YI SYLLABLE GGAP
+A21E ; [.47B7.0020.0002] # YI SYLLABLE GGUOT
+A21F ; [.47B8.0020.0002] # YI SYLLABLE GGUOX
+A220 ; [.47B9.0020.0002] # YI SYLLABLE GGUO
+A221 ; [.47BA.0020.0002] # YI SYLLABLE GGUOP
+A222 ; [.47BB.0020.0002] # YI SYLLABLE GGOT
+A223 ; [.47BC.0020.0002] # YI SYLLABLE GGOX
+A224 ; [.47BD.0020.0002] # YI SYLLABLE GGO
+A225 ; [.47BE.0020.0002] # YI SYLLABLE GGOP
+A226 ; [.47BF.0020.0002] # YI SYLLABLE GGET
+A227 ; [.47C0.0020.0002] # YI SYLLABLE GGEX
+A228 ; [.47C1.0020.0002] # YI SYLLABLE GGE
+A229 ; [.47C2.0020.0002] # YI SYLLABLE GGEP
+A22A ; [.47C3.0020.0002] # YI SYLLABLE GGUT
+A22B ; [.47C4.0020.0002] # YI SYLLABLE GGUX
+A22C ; [.47C5.0020.0002] # YI SYLLABLE GGU
+A22D ; [.47C6.0020.0002] # YI SYLLABLE GGUP
+A22E ; [.47C7.0020.0002] # YI SYLLABLE GGURX
+A22F ; [.47C8.0020.0002] # YI SYLLABLE GGUR
+A230 ; [.47C9.0020.0002] # YI SYLLABLE MGIEX
+A231 ; [.47CA.0020.0002] # YI SYLLABLE MGIE
+A232 ; [.47CB.0020.0002] # YI SYLLABLE MGAT
+A233 ; [.47CC.0020.0002] # YI SYLLABLE MGAX
+A234 ; [.47CD.0020.0002] # YI SYLLABLE MGA
+A235 ; [.47CE.0020.0002] # YI SYLLABLE MGAP
+A236 ; [.47CF.0020.0002] # YI SYLLABLE MGUOX
+A237 ; [.47D0.0020.0002] # YI SYLLABLE MGUO
+A238 ; [.47D1.0020.0002] # YI SYLLABLE MGUOP
+A239 ; [.47D2.0020.0002] # YI SYLLABLE MGOT
+A23A ; [.47D3.0020.0002] # YI SYLLABLE MGOX
+A23B ; [.47D4.0020.0002] # YI SYLLABLE MGO
+A23C ; [.47D5.0020.0002] # YI SYLLABLE MGOP
+A23D ; [.47D6.0020.0002] # YI SYLLABLE MGEX
+A23E ; [.47D7.0020.0002] # YI SYLLABLE MGE
+A23F ; [.47D8.0020.0002] # YI SYLLABLE MGEP
+A240 ; [.47D9.0020.0002] # YI SYLLABLE MGUT
+A241 ; [.47DA.0020.0002] # YI SYLLABLE MGUX
+A242 ; [.47DB.0020.0002] # YI SYLLABLE MGU
+A243 ; [.47DC.0020.0002] # YI SYLLABLE MGUP
+A244 ; [.47DD.0020.0002] # YI SYLLABLE MGURX
+A245 ; [.47DE.0020.0002] # YI SYLLABLE MGUR
+A246 ; [.47DF.0020.0002] # YI SYLLABLE HXIT
+A247 ; [.47E0.0020.0002] # YI SYLLABLE HXIX
+A248 ; [.47E1.0020.0002] # YI SYLLABLE HXI
+A249 ; [.47E2.0020.0002] # YI SYLLABLE HXIP
+A24A ; [.47E3.0020.0002] # YI SYLLABLE HXIET
+A24B ; [.47E4.0020.0002] # YI SYLLABLE HXIEX
+A24C ; [.47E5.0020.0002] # YI SYLLABLE HXIE
+A24D ; [.47E6.0020.0002] # YI SYLLABLE HXIEP
+A24E ; [.47E7.0020.0002] # YI SYLLABLE HXAT
+A24F ; [.47E8.0020.0002] # YI SYLLABLE HXAX
+A250 ; [.47E9.0020.0002] # YI SYLLABLE HXA
+A251 ; [.47EA.0020.0002] # YI SYLLABLE HXAP
+A252 ; [.47EB.0020.0002] # YI SYLLABLE HXUOT
+A253 ; [.47EC.0020.0002] # YI SYLLABLE HXUOX
+A254 ; [.47ED.0020.0002] # YI SYLLABLE HXUO
+A255 ; [.47EE.0020.0002] # YI SYLLABLE HXUOP
+A256 ; [.47EF.0020.0002] # YI SYLLABLE HXOT
+A257 ; [.47F0.0020.0002] # YI SYLLABLE HXOX
+A258 ; [.47F1.0020.0002] # YI SYLLABLE HXO
+A259 ; [.47F2.0020.0002] # YI SYLLABLE HXOP
+A25A ; [.47F3.0020.0002] # YI SYLLABLE HXEX
+A25B ; [.47F4.0020.0002] # YI SYLLABLE HXE
+A25C ; [.47F5.0020.0002] # YI SYLLABLE HXEP
+A25D ; [.47F6.0020.0002] # YI SYLLABLE NGIEX
+A25E ; [.47F7.0020.0002] # YI SYLLABLE NGIE
+A25F ; [.47F8.0020.0002] # YI SYLLABLE NGIEP
+A260 ; [.47F9.0020.0002] # YI SYLLABLE NGAT
+A261 ; [.47FA.0020.0002] # YI SYLLABLE NGAX
+A262 ; [.47FB.0020.0002] # YI SYLLABLE NGA
+A263 ; [.47FC.0020.0002] # YI SYLLABLE NGAP
+A264 ; [.47FD.0020.0002] # YI SYLLABLE NGUOT
+A265 ; [.47FE.0020.0002] # YI SYLLABLE NGUOX
+A266 ; [.47FF.0020.0002] # YI SYLLABLE NGUO
+A267 ; [.4800.0020.0002] # YI SYLLABLE NGOT
+A268 ; [.4801.0020.0002] # YI SYLLABLE NGOX
+A269 ; [.4802.0020.0002] # YI SYLLABLE NGO
+A26A ; [.4803.0020.0002] # YI SYLLABLE NGOP
+A26B ; [.4804.0020.0002] # YI SYLLABLE NGEX
+A26C ; [.4805.0020.0002] # YI SYLLABLE NGE
+A26D ; [.4806.0020.0002] # YI SYLLABLE NGEP
+A26E ; [.4807.0020.0002] # YI SYLLABLE HIT
+A26F ; [.4808.0020.0002] # YI SYLLABLE HIEX
+A270 ; [.4809.0020.0002] # YI SYLLABLE HIE
+A271 ; [.480A.0020.0002] # YI SYLLABLE HAT
+A272 ; [.480B.0020.0002] # YI SYLLABLE HAX
+A273 ; [.480C.0020.0002] # YI SYLLABLE HA
+A274 ; [.480D.0020.0002] # YI SYLLABLE HAP
+A275 ; [.480E.0020.0002] # YI SYLLABLE HUOT
+A276 ; [.480F.0020.0002] # YI SYLLABLE HUOX
+A277 ; [.4810.0020.0002] # YI SYLLABLE HUO
+A278 ; [.4811.0020.0002] # YI SYLLABLE HUOP
+A279 ; [.4812.0020.0002] # YI SYLLABLE HOT
+A27A ; [.4813.0020.0002] # YI SYLLABLE HOX
+A27B ; [.4814.0020.0002] # YI SYLLABLE HO
+A27C ; [.4815.0020.0002] # YI SYLLABLE HOP
+A27D ; [.4816.0020.0002] # YI SYLLABLE HEX
+A27E ; [.4817.0020.0002] # YI SYLLABLE HE
+A27F ; [.4818.0020.0002] # YI SYLLABLE HEP
+A280 ; [.4819.0020.0002] # YI SYLLABLE WAT
+A281 ; [.481A.0020.0002] # YI SYLLABLE WAX
+A282 ; [.481B.0020.0002] # YI SYLLABLE WA
+A283 ; [.481C.0020.0002] # YI SYLLABLE WAP
+A284 ; [.481D.0020.0002] # YI SYLLABLE WUOX
+A285 ; [.481E.0020.0002] # YI SYLLABLE WUO
+A286 ; [.481F.0020.0002] # YI SYLLABLE WUOP
+A287 ; [.4820.0020.0002] # YI SYLLABLE WOX
+A288 ; [.4821.0020.0002] # YI SYLLABLE WO
+A289 ; [.4822.0020.0002] # YI SYLLABLE WOP
+A28A ; [.4823.0020.0002] # YI SYLLABLE WEX
+A28B ; [.4824.0020.0002] # YI SYLLABLE WE
+A28C ; [.4825.0020.0002] # YI SYLLABLE WEP
+A28D ; [.4826.0020.0002] # YI SYLLABLE ZIT
+A28E ; [.4827.0020.0002] # YI SYLLABLE ZIX
+A28F ; [.4828.0020.0002] # YI SYLLABLE ZI
+A290 ; [.4829.0020.0002] # YI SYLLABLE ZIP
+A291 ; [.482A.0020.0002] # YI SYLLABLE ZIEX
+A292 ; [.482B.0020.0002] # YI SYLLABLE ZIE
+A293 ; [.482C.0020.0002] # YI SYLLABLE ZIEP
+A294 ; [.482D.0020.0002] # YI SYLLABLE ZAT
+A295 ; [.482E.0020.0002] # YI SYLLABLE ZAX
+A296 ; [.482F.0020.0002] # YI SYLLABLE ZA
+A297 ; [.4830.0020.0002] # YI SYLLABLE ZAP
+A298 ; [.4831.0020.0002] # YI SYLLABLE ZUOX
+A299 ; [.4832.0020.0002] # YI SYLLABLE ZUO
+A29A ; [.4833.0020.0002] # YI SYLLABLE ZUOP
+A29B ; [.4834.0020.0002] # YI SYLLABLE ZOT
+A29C ; [.4835.0020.0002] # YI SYLLABLE ZOX
+A29D ; [.4836.0020.0002] # YI SYLLABLE ZO
+A29E ; [.4837.0020.0002] # YI SYLLABLE ZOP
+A29F ; [.4838.0020.0002] # YI SYLLABLE ZEX
+A2A0 ; [.4839.0020.0002] # YI SYLLABLE ZE
+A2A1 ; [.483A.0020.0002] # YI SYLLABLE ZEP
+A2A2 ; [.483B.0020.0002] # YI SYLLABLE ZUT
+A2A3 ; [.483C.0020.0002] # YI SYLLABLE ZUX
+A2A4 ; [.483D.0020.0002] # YI SYLLABLE ZU
+A2A5 ; [.483E.0020.0002] # YI SYLLABLE ZUP
+A2A6 ; [.483F.0020.0002] # YI SYLLABLE ZURX
+A2A7 ; [.4840.0020.0002] # YI SYLLABLE ZUR
+A2A8 ; [.4841.0020.0002] # YI SYLLABLE ZYT
+A2A9 ; [.4842.0020.0002] # YI SYLLABLE ZYX
+A2AA ; [.4843.0020.0002] # YI SYLLABLE ZY
+A2AB ; [.4844.0020.0002] # YI SYLLABLE ZYP
+A2AC ; [.4845.0020.0002] # YI SYLLABLE ZYRX
+A2AD ; [.4846.0020.0002] # YI SYLLABLE ZYR
+A2AE ; [.4847.0020.0002] # YI SYLLABLE CIT
+A2AF ; [.4848.0020.0002] # YI SYLLABLE CIX
+A2B0 ; [.4849.0020.0002] # YI SYLLABLE CI
+A2B1 ; [.484A.0020.0002] # YI SYLLABLE CIP
+A2B2 ; [.484B.0020.0002] # YI SYLLABLE CIET
+A2B3 ; [.484C.0020.0002] # YI SYLLABLE CIEX
+A2B4 ; [.484D.0020.0002] # YI SYLLABLE CIE
+A2B5 ; [.484E.0020.0002] # YI SYLLABLE CIEP
+A2B6 ; [.484F.0020.0002] # YI SYLLABLE CAT
+A2B7 ; [.4850.0020.0002] # YI SYLLABLE CAX
+A2B8 ; [.4851.0020.0002] # YI SYLLABLE CA
+A2B9 ; [.4852.0020.0002] # YI SYLLABLE CAP
+A2BA ; [.4853.0020.0002] # YI SYLLABLE CUOX
+A2BB ; [.4854.0020.0002] # YI SYLLABLE CUO
+A2BC ; [.4855.0020.0002] # YI SYLLABLE CUOP
+A2BD ; [.4856.0020.0002] # YI SYLLABLE COT
+A2BE ; [.4857.0020.0002] # YI SYLLABLE COX
+A2BF ; [.4858.0020.0002] # YI SYLLABLE CO
+A2C0 ; [.4859.0020.0002] # YI SYLLABLE COP
+A2C1 ; [.485A.0020.0002] # YI SYLLABLE CEX
+A2C2 ; [.485B.0020.0002] # YI SYLLABLE CE
+A2C3 ; [.485C.0020.0002] # YI SYLLABLE CEP
+A2C4 ; [.485D.0020.0002] # YI SYLLABLE CUT
+A2C5 ; [.485E.0020.0002] # YI SYLLABLE CUX
+A2C6 ; [.485F.0020.0002] # YI SYLLABLE CU
+A2C7 ; [.4860.0020.0002] # YI SYLLABLE CUP
+A2C8 ; [.4861.0020.0002] # YI SYLLABLE CURX
+A2C9 ; [.4862.0020.0002] # YI SYLLABLE CUR
+A2CA ; [.4863.0020.0002] # YI SYLLABLE CYT
+A2CB ; [.4864.0020.0002] # YI SYLLABLE CYX
+A2CC ; [.4865.0020.0002] # YI SYLLABLE CY
+A2CD ; [.4866.0020.0002] # YI SYLLABLE CYP
+A2CE ; [.4867.0020.0002] # YI SYLLABLE CYRX
+A2CF ; [.4868.0020.0002] # YI SYLLABLE CYR
+A2D0 ; [.4869.0020.0002] # YI SYLLABLE ZZIT
+A2D1 ; [.486A.0020.0002] # YI SYLLABLE ZZIX
+A2D2 ; [.486B.0020.0002] # YI SYLLABLE ZZI
+A2D3 ; [.486C.0020.0002] # YI SYLLABLE ZZIP
+A2D4 ; [.486D.0020.0002] # YI SYLLABLE ZZIET
+A2D5 ; [.486E.0020.0002] # YI SYLLABLE ZZIEX
+A2D6 ; [.486F.0020.0002] # YI SYLLABLE ZZIE
+A2D7 ; [.4870.0020.0002] # YI SYLLABLE ZZIEP
+A2D8 ; [.4871.0020.0002] # YI SYLLABLE ZZAT
+A2D9 ; [.4872.0020.0002] # YI SYLLABLE ZZAX
+A2DA ; [.4873.0020.0002] # YI SYLLABLE ZZA
+A2DB ; [.4874.0020.0002] # YI SYLLABLE ZZAP
+A2DC ; [.4875.0020.0002] # YI SYLLABLE ZZOX
+A2DD ; [.4876.0020.0002] # YI SYLLABLE ZZO
+A2DE ; [.4877.0020.0002] # YI SYLLABLE ZZOP
+A2DF ; [.4878.0020.0002] # YI SYLLABLE ZZEX
+A2E0 ; [.4879.0020.0002] # YI SYLLABLE ZZE
+A2E1 ; [.487A.0020.0002] # YI SYLLABLE ZZEP
+A2E2 ; [.487B.0020.0002] # YI SYLLABLE ZZUX
+A2E3 ; [.487C.0020.0002] # YI SYLLABLE ZZU
+A2E4 ; [.487D.0020.0002] # YI SYLLABLE ZZUP
+A2E5 ; [.487E.0020.0002] # YI SYLLABLE ZZURX
+A2E6 ; [.487F.0020.0002] # YI SYLLABLE ZZUR
+A2E7 ; [.4880.0020.0002] # YI SYLLABLE ZZYT
+A2E8 ; [.4881.0020.0002] # YI SYLLABLE ZZYX
+A2E9 ; [.4882.0020.0002] # YI SYLLABLE ZZY
+A2EA ; [.4883.0020.0002] # YI SYLLABLE ZZYP
+A2EB ; [.4884.0020.0002] # YI SYLLABLE ZZYRX
+A2EC ; [.4885.0020.0002] # YI SYLLABLE ZZYR
+A2ED ; [.4886.0020.0002] # YI SYLLABLE NZIT
+A2EE ; [.4887.0020.0002] # YI SYLLABLE NZIX
+A2EF ; [.4888.0020.0002] # YI SYLLABLE NZI
+A2F0 ; [.4889.0020.0002] # YI SYLLABLE NZIP
+A2F1 ; [.488A.0020.0002] # YI SYLLABLE NZIEX
+A2F2 ; [.488B.0020.0002] # YI SYLLABLE NZIE
+A2F3 ; [.488C.0020.0002] # YI SYLLABLE NZIEP
+A2F4 ; [.488D.0020.0002] # YI SYLLABLE NZAT
+A2F5 ; [.488E.0020.0002] # YI SYLLABLE NZAX
+A2F6 ; [.488F.0020.0002] # YI SYLLABLE NZA
+A2F7 ; [.4890.0020.0002] # YI SYLLABLE NZAP
+A2F8 ; [.4891.0020.0002] # YI SYLLABLE NZUOX
+A2F9 ; [.4892.0020.0002] # YI SYLLABLE NZUO
+A2FA ; [.4893.0020.0002] # YI SYLLABLE NZOX
+A2FB ; [.4894.0020.0002] # YI SYLLABLE NZOP
+A2FC ; [.4895.0020.0002] # YI SYLLABLE NZEX
+A2FD ; [.4896.0020.0002] # YI SYLLABLE NZE
+A2FE ; [.4897.0020.0002] # YI SYLLABLE NZUX
+A2FF ; [.4898.0020.0002] # YI SYLLABLE NZU
+A300 ; [.4899.0020.0002] # YI SYLLABLE NZUP
+A301 ; [.489A.0020.0002] # YI SYLLABLE NZURX
+A302 ; [.489B.0020.0002] # YI SYLLABLE NZUR
+A303 ; [.489C.0020.0002] # YI SYLLABLE NZYT
+A304 ; [.489D.0020.0002] # YI SYLLABLE NZYX
+A305 ; [.489E.0020.0002] # YI SYLLABLE NZY
+A306 ; [.489F.0020.0002] # YI SYLLABLE NZYP
+A307 ; [.48A0.0020.0002] # YI SYLLABLE NZYRX
+A308 ; [.48A1.0020.0002] # YI SYLLABLE NZYR
+A309 ; [.48A2.0020.0002] # YI SYLLABLE SIT
+A30A ; [.48A3.0020.0002] # YI SYLLABLE SIX
+A30B ; [.48A4.0020.0002] # YI SYLLABLE SI
+A30C ; [.48A5.0020.0002] # YI SYLLABLE SIP
+A30D ; [.48A6.0020.0002] # YI SYLLABLE SIEX
+A30E ; [.48A7.0020.0002] # YI SYLLABLE SIE
+A30F ; [.48A8.0020.0002] # YI SYLLABLE SIEP
+A310 ; [.48A9.0020.0002] # YI SYLLABLE SAT
+A311 ; [.48AA.0020.0002] # YI SYLLABLE SAX
+A312 ; [.48AB.0020.0002] # YI SYLLABLE SA
+A313 ; [.48AC.0020.0002] # YI SYLLABLE SAP
+A314 ; [.48AD.0020.0002] # YI SYLLABLE SUOX
+A315 ; [.48AE.0020.0002] # YI SYLLABLE SUO
+A316 ; [.48AF.0020.0002] # YI SYLLABLE SUOP
+A317 ; [.48B0.0020.0002] # YI SYLLABLE SOT
+A318 ; [.48B1.0020.0002] # YI SYLLABLE SOX
+A319 ; [.48B2.0020.0002] # YI SYLLABLE SO
+A31A ; [.48B3.0020.0002] # YI SYLLABLE SOP
+A31B ; [.48B4.0020.0002] # YI SYLLABLE SEX
+A31C ; [.48B5.0020.0002] # YI SYLLABLE SE
+A31D ; [.48B6.0020.0002] # YI SYLLABLE SEP
+A31E ; [.48B7.0020.0002] # YI SYLLABLE SUT
+A31F ; [.48B8.0020.0002] # YI SYLLABLE SUX
+A320 ; [.48B9.0020.0002] # YI SYLLABLE SU
+A321 ; [.48BA.0020.0002] # YI SYLLABLE SUP
+A322 ; [.48BB.0020.0002] # YI SYLLABLE SURX
+A323 ; [.48BC.0020.0002] # YI SYLLABLE SUR
+A324 ; [.48BD.0020.0002] # YI SYLLABLE SYT
+A325 ; [.48BE.0020.0002] # YI SYLLABLE SYX
+A326 ; [.48BF.0020.0002] # YI SYLLABLE SY
+A327 ; [.48C0.0020.0002] # YI SYLLABLE SYP
+A328 ; [.48C1.0020.0002] # YI SYLLABLE SYRX
+A329 ; [.48C2.0020.0002] # YI SYLLABLE SYR
+A32A ; [.48C3.0020.0002] # YI SYLLABLE SSIT
+A32B ; [.48C4.0020.0002] # YI SYLLABLE SSIX
+A32C ; [.48C5.0020.0002] # YI SYLLABLE SSI
+A32D ; [.48C6.0020.0002] # YI SYLLABLE SSIP
+A32E ; [.48C7.0020.0002] # YI SYLLABLE SSIEX
+A32F ; [.48C8.0020.0002] # YI SYLLABLE SSIE
+A330 ; [.48C9.0020.0002] # YI SYLLABLE SSIEP
+A331 ; [.48CA.0020.0002] # YI SYLLABLE SSAT
+A332 ; [.48CB.0020.0002] # YI SYLLABLE SSAX
+A333 ; [.48CC.0020.0002] # YI SYLLABLE SSA
+A334 ; [.48CD.0020.0002] # YI SYLLABLE SSAP
+A335 ; [.48CE.0020.0002] # YI SYLLABLE SSOT
+A336 ; [.48CF.0020.0002] # YI SYLLABLE SSOX
+A337 ; [.48D0.0020.0002] # YI SYLLABLE SSO
+A338 ; [.48D1.0020.0002] # YI SYLLABLE SSOP
+A339 ; [.48D2.0020.0002] # YI SYLLABLE SSEX
+A33A ; [.48D3.0020.0002] # YI SYLLABLE SSE
+A33B ; [.48D4.0020.0002] # YI SYLLABLE SSEP
+A33C ; [.48D5.0020.0002] # YI SYLLABLE SSUT
+A33D ; [.48D6.0020.0002] # YI SYLLABLE SSUX
+A33E ; [.48D7.0020.0002] # YI SYLLABLE SSU
+A33F ; [.48D8.0020.0002] # YI SYLLABLE SSUP
+A340 ; [.48D9.0020.0002] # YI SYLLABLE SSYT
+A341 ; [.48DA.0020.0002] # YI SYLLABLE SSYX
+A342 ; [.48DB.0020.0002] # YI SYLLABLE SSY
+A343 ; [.48DC.0020.0002] # YI SYLLABLE SSYP
+A344 ; [.48DD.0020.0002] # YI SYLLABLE SSYRX
+A345 ; [.48DE.0020.0002] # YI SYLLABLE SSYR
+A346 ; [.48DF.0020.0002] # YI SYLLABLE ZHAT
+A347 ; [.48E0.0020.0002] # YI SYLLABLE ZHAX
+A348 ; [.48E1.0020.0002] # YI SYLLABLE ZHA
+A349 ; [.48E2.0020.0002] # YI SYLLABLE ZHAP
+A34A ; [.48E3.0020.0002] # YI SYLLABLE ZHUOX
+A34B ; [.48E4.0020.0002] # YI SYLLABLE ZHUO
+A34C ; [.48E5.0020.0002] # YI SYLLABLE ZHUOP
+A34D ; [.48E6.0020.0002] # YI SYLLABLE ZHOT
+A34E ; [.48E7.0020.0002] # YI SYLLABLE ZHOX
+A34F ; [.48E8.0020.0002] # YI SYLLABLE ZHO
+A350 ; [.48E9.0020.0002] # YI SYLLABLE ZHOP
+A351 ; [.48EA.0020.0002] # YI SYLLABLE ZHET
+A352 ; [.48EB.0020.0002] # YI SYLLABLE ZHEX
+A353 ; [.48EC.0020.0002] # YI SYLLABLE ZHE
+A354 ; [.48ED.0020.0002] # YI SYLLABLE ZHEP
+A355 ; [.48EE.0020.0002] # YI SYLLABLE ZHUT
+A356 ; [.48EF.0020.0002] # YI SYLLABLE ZHUX
+A357 ; [.48F0.0020.0002] # YI SYLLABLE ZHU
+A358 ; [.48F1.0020.0002] # YI SYLLABLE ZHUP
+A359 ; [.48F2.0020.0002] # YI SYLLABLE ZHURX
+A35A ; [.48F3.0020.0002] # YI SYLLABLE ZHUR
+A35B ; [.48F4.0020.0002] # YI SYLLABLE ZHYT
+A35C ; [.48F5.0020.0002] # YI SYLLABLE ZHYX
+A35D ; [.48F6.0020.0002] # YI SYLLABLE ZHY
+A35E ; [.48F7.0020.0002] # YI SYLLABLE ZHYP
+A35F ; [.48F8.0020.0002] # YI SYLLABLE ZHYRX
+A360 ; [.48F9.0020.0002] # YI SYLLABLE ZHYR
+A361 ; [.48FA.0020.0002] # YI SYLLABLE CHAT
+A362 ; [.48FB.0020.0002] # YI SYLLABLE CHAX
+A363 ; [.48FC.0020.0002] # YI SYLLABLE CHA
+A364 ; [.48FD.0020.0002] # YI SYLLABLE CHAP
+A365 ; [.48FE.0020.0002] # YI SYLLABLE CHUOT
+A366 ; [.48FF.0020.0002] # YI SYLLABLE CHUOX
+A367 ; [.4900.0020.0002] # YI SYLLABLE CHUO
+A368 ; [.4901.0020.0002] # YI SYLLABLE CHUOP
+A369 ; [.4902.0020.0002] # YI SYLLABLE CHOT
+A36A ; [.4903.0020.0002] # YI SYLLABLE CHOX
+A36B ; [.4904.0020.0002] # YI SYLLABLE CHO
+A36C ; [.4905.0020.0002] # YI SYLLABLE CHOP
+A36D ; [.4906.0020.0002] # YI SYLLABLE CHET
+A36E ; [.4907.0020.0002] # YI SYLLABLE CHEX
+A36F ; [.4908.0020.0002] # YI SYLLABLE CHE
+A370 ; [.4909.0020.0002] # YI SYLLABLE CHEP
+A371 ; [.490A.0020.0002] # YI SYLLABLE CHUX
+A372 ; [.490B.0020.0002] # YI SYLLABLE CHU
+A373 ; [.490C.0020.0002] # YI SYLLABLE CHUP
+A374 ; [.490D.0020.0002] # YI SYLLABLE CHURX
+A375 ; [.490E.0020.0002] # YI SYLLABLE CHUR
+A376 ; [.490F.0020.0002] # YI SYLLABLE CHYT
+A377 ; [.4910.0020.0002] # YI SYLLABLE CHYX
+A378 ; [.4911.0020.0002] # YI SYLLABLE CHY
+A379 ; [.4912.0020.0002] # YI SYLLABLE CHYP
+A37A ; [.4913.0020.0002] # YI SYLLABLE CHYRX
+A37B ; [.4914.0020.0002] # YI SYLLABLE CHYR
+A37C ; [.4915.0020.0002] # YI SYLLABLE RRAX
+A37D ; [.4916.0020.0002] # YI SYLLABLE RRA
+A37E ; [.4917.0020.0002] # YI SYLLABLE RRUOX
+A37F ; [.4918.0020.0002] # YI SYLLABLE RRUO
+A380 ; [.4919.0020.0002] # YI SYLLABLE RROT
+A381 ; [.491A.0020.0002] # YI SYLLABLE RROX
+A382 ; [.491B.0020.0002] # YI SYLLABLE RRO
+A383 ; [.491C.0020.0002] # YI SYLLABLE RROP
+A384 ; [.491D.0020.0002] # YI SYLLABLE RRET
+A385 ; [.491E.0020.0002] # YI SYLLABLE RREX
+A386 ; [.491F.0020.0002] # YI SYLLABLE RRE
+A387 ; [.4920.0020.0002] # YI SYLLABLE RREP
+A388 ; [.4921.0020.0002] # YI SYLLABLE RRUT
+A389 ; [.4922.0020.0002] # YI SYLLABLE RRUX
+A38A ; [.4923.0020.0002] # YI SYLLABLE RRU
+A38B ; [.4924.0020.0002] # YI SYLLABLE RRUP
+A38C ; [.4925.0020.0002] # YI SYLLABLE RRURX
+A38D ; [.4926.0020.0002] # YI SYLLABLE RRUR
+A38E ; [.4927.0020.0002] # YI SYLLABLE RRYT
+A38F ; [.4928.0020.0002] # YI SYLLABLE RRYX
+A390 ; [.4929.0020.0002] # YI SYLLABLE RRY
+A391 ; [.492A.0020.0002] # YI SYLLABLE RRYP
+A392 ; [.492B.0020.0002] # YI SYLLABLE RRYRX
+A393 ; [.492C.0020.0002] # YI SYLLABLE RRYR
+A394 ; [.492D.0020.0002] # YI SYLLABLE NRAT
+A395 ; [.492E.0020.0002] # YI SYLLABLE NRAX
+A396 ; [.492F.0020.0002] # YI SYLLABLE NRA
+A397 ; [.4930.0020.0002] # YI SYLLABLE NRAP
+A398 ; [.4931.0020.0002] # YI SYLLABLE NROX
+A399 ; [.4932.0020.0002] # YI SYLLABLE NRO
+A39A ; [.4933.0020.0002] # YI SYLLABLE NROP
+A39B ; [.4934.0020.0002] # YI SYLLABLE NRET
+A39C ; [.4935.0020.0002] # YI SYLLABLE NREX
+A39D ; [.4936.0020.0002] # YI SYLLABLE NRE
+A39E ; [.4937.0020.0002] # YI SYLLABLE NREP
+A39F ; [.4938.0020.0002] # YI SYLLABLE NRUT
+A3A0 ; [.4939.0020.0002] # YI SYLLABLE NRUX
+A3A1 ; [.493A.0020.0002] # YI SYLLABLE NRU
+A3A2 ; [.493B.0020.0002] # YI SYLLABLE NRUP
+A3A3 ; [.493C.0020.0002] # YI SYLLABLE NRURX
+A3A4 ; [.493D.0020.0002] # YI SYLLABLE NRUR
+A3A5 ; [.493E.0020.0002] # YI SYLLABLE NRYT
+A3A6 ; [.493F.0020.0002] # YI SYLLABLE NRYX
+A3A7 ; [.4940.0020.0002] # YI SYLLABLE NRY
+A3A8 ; [.4941.0020.0002] # YI SYLLABLE NRYP
+A3A9 ; [.4942.0020.0002] # YI SYLLABLE NRYRX
+A3AA ; [.4943.0020.0002] # YI SYLLABLE NRYR
+A3AB ; [.4944.0020.0002] # YI SYLLABLE SHAT
+A3AC ; [.4945.0020.0002] # YI SYLLABLE SHAX
+A3AD ; [.4946.0020.0002] # YI SYLLABLE SHA
+A3AE ; [.4947.0020.0002] # YI SYLLABLE SHAP
+A3AF ; [.4948.0020.0002] # YI SYLLABLE SHUOX
+A3B0 ; [.4949.0020.0002] # YI SYLLABLE SHUO
+A3B1 ; [.494A.0020.0002] # YI SYLLABLE SHUOP
+A3B2 ; [.494B.0020.0002] # YI SYLLABLE SHOT
+A3B3 ; [.494C.0020.0002] # YI SYLLABLE SHOX
+A3B4 ; [.494D.0020.0002] # YI SYLLABLE SHO
+A3B5 ; [.494E.0020.0002] # YI SYLLABLE SHOP
+A3B6 ; [.494F.0020.0002] # YI SYLLABLE SHET
+A3B7 ; [.4950.0020.0002] # YI SYLLABLE SHEX
+A3B8 ; [.4951.0020.0002] # YI SYLLABLE SHE
+A3B9 ; [.4952.0020.0002] # YI SYLLABLE SHEP
+A3BA ; [.4953.0020.0002] # YI SYLLABLE SHUT
+A3BB ; [.4954.0020.0002] # YI SYLLABLE SHUX
+A3BC ; [.4955.0020.0002] # YI SYLLABLE SHU
+A3BD ; [.4956.0020.0002] # YI SYLLABLE SHUP
+A3BE ; [.4957.0020.0002] # YI SYLLABLE SHURX
+A3BF ; [.4958.0020.0002] # YI SYLLABLE SHUR
+A3C0 ; [.4959.0020.0002] # YI SYLLABLE SHYT
+A3C1 ; [.495A.0020.0002] # YI SYLLABLE SHYX
+A3C2 ; [.495B.0020.0002] # YI SYLLABLE SHY
+A3C3 ; [.495C.0020.0002] # YI SYLLABLE SHYP
+A3C4 ; [.495D.0020.0002] # YI SYLLABLE SHYRX
+A3C5 ; [.495E.0020.0002] # YI SYLLABLE SHYR
+A3C6 ; [.495F.0020.0002] # YI SYLLABLE RAT
+A3C7 ; [.4960.0020.0002] # YI SYLLABLE RAX
+A3C8 ; [.4961.0020.0002] # YI SYLLABLE RA
+A3C9 ; [.4962.0020.0002] # YI SYLLABLE RAP
+A3CA ; [.4963.0020.0002] # YI SYLLABLE RUOX
+A3CB ; [.4964.0020.0002] # YI SYLLABLE RUO
+A3CC ; [.4965.0020.0002] # YI SYLLABLE RUOP
+A3CD ; [.4966.0020.0002] # YI SYLLABLE ROT
+A3CE ; [.4967.0020.0002] # YI SYLLABLE ROX
+A3CF ; [.4968.0020.0002] # YI SYLLABLE RO
+A3D0 ; [.4969.0020.0002] # YI SYLLABLE ROP
+A3D1 ; [.496A.0020.0002] # YI SYLLABLE REX
+A3D2 ; [.496B.0020.0002] # YI SYLLABLE RE
+A3D3 ; [.496C.0020.0002] # YI SYLLABLE REP
+A3D4 ; [.496D.0020.0002] # YI SYLLABLE RUT
+A3D5 ; [.496E.0020.0002] # YI SYLLABLE RUX
+A3D6 ; [.496F.0020.0002] # YI SYLLABLE RU
+A3D7 ; [.4970.0020.0002] # YI SYLLABLE RUP
+A3D8 ; [.4971.0020.0002] # YI SYLLABLE RURX
+A3D9 ; [.4972.0020.0002] # YI SYLLABLE RUR
+A3DA ; [.4973.0020.0002] # YI SYLLABLE RYT
+A3DB ; [.4974.0020.0002] # YI SYLLABLE RYX
+A3DC ; [.4975.0020.0002] # YI SYLLABLE RY
+A3DD ; [.4976.0020.0002] # YI SYLLABLE RYP
+A3DE ; [.4977.0020.0002] # YI SYLLABLE RYRX
+A3DF ; [.4978.0020.0002] # YI SYLLABLE RYR
+A3E0 ; [.4979.0020.0002] # YI SYLLABLE JIT
+A3E1 ; [.497A.0020.0002] # YI SYLLABLE JIX
+A3E2 ; [.497B.0020.0002] # YI SYLLABLE JI
+A3E3 ; [.497C.0020.0002] # YI SYLLABLE JIP
+A3E4 ; [.497D.0020.0002] # YI SYLLABLE JIET
+A3E5 ; [.497E.0020.0002] # YI SYLLABLE JIEX
+A3E6 ; [.497F.0020.0002] # YI SYLLABLE JIE
+A3E7 ; [.4980.0020.0002] # YI SYLLABLE JIEP
+A3E8 ; [.4981.0020.0002] # YI SYLLABLE JUOT
+A3E9 ; [.4982.0020.0002] # YI SYLLABLE JUOX
+A3EA ; [.4983.0020.0002] # YI SYLLABLE JUO
+A3EB ; [.4984.0020.0002] # YI SYLLABLE JUOP
+A3EC ; [.4985.0020.0002] # YI SYLLABLE JOT
+A3ED ; [.4986.0020.0002] # YI SYLLABLE JOX
+A3EE ; [.4987.0020.0002] # YI SYLLABLE JO
+A3EF ; [.4988.0020.0002] # YI SYLLABLE JOP
+A3F0 ; [.4989.0020.0002] # YI SYLLABLE JUT
+A3F1 ; [.498A.0020.0002] # YI SYLLABLE JUX
+A3F2 ; [.498B.0020.0002] # YI SYLLABLE JU
+A3F3 ; [.498C.0020.0002] # YI SYLLABLE JUP
+A3F4 ; [.498D.0020.0002] # YI SYLLABLE JURX
+A3F5 ; [.498E.0020.0002] # YI SYLLABLE JUR
+A3F6 ; [.498F.0020.0002] # YI SYLLABLE JYT
+A3F7 ; [.4990.0020.0002] # YI SYLLABLE JYX
+A3F8 ; [.4991.0020.0002] # YI SYLLABLE JY
+A3F9 ; [.4992.0020.0002] # YI SYLLABLE JYP
+A3FA ; [.4993.0020.0002] # YI SYLLABLE JYRX
+A3FB ; [.4994.0020.0002] # YI SYLLABLE JYR
+A3FC ; [.4995.0020.0002] # YI SYLLABLE QIT
+A3FD ; [.4996.0020.0002] # YI SYLLABLE QIX
+A3FE ; [.4997.0020.0002] # YI SYLLABLE QI
+A3FF ; [.4998.0020.0002] # YI SYLLABLE QIP
+A400 ; [.4999.0020.0002] # YI SYLLABLE QIET
+A401 ; [.499A.0020.0002] # YI SYLLABLE QIEX
+A402 ; [.499B.0020.0002] # YI SYLLABLE QIE
+A403 ; [.499C.0020.0002] # YI SYLLABLE QIEP
+A404 ; [.499D.0020.0002] # YI SYLLABLE QUOT
+A405 ; [.499E.0020.0002] # YI SYLLABLE QUOX
+A406 ; [.499F.0020.0002] # YI SYLLABLE QUO
+A407 ; [.49A0.0020.0002] # YI SYLLABLE QUOP
+A408 ; [.49A1.0020.0002] # YI SYLLABLE QOT
+A409 ; [.49A2.0020.0002] # YI SYLLABLE QOX
+A40A ; [.49A3.0020.0002] # YI SYLLABLE QO
+A40B ; [.49A4.0020.0002] # YI SYLLABLE QOP
+A40C ; [.49A5.0020.0002] # YI SYLLABLE QUT
+A40D ; [.49A6.0020.0002] # YI SYLLABLE QUX
+A40E ; [.49A7.0020.0002] # YI SYLLABLE QU
+A40F ; [.49A8.0020.0002] # YI SYLLABLE QUP
+A410 ; [.49A9.0020.0002] # YI SYLLABLE QURX
+A411 ; [.49AA.0020.0002] # YI SYLLABLE QUR
+A412 ; [.49AB.0020.0002] # YI SYLLABLE QYT
+A413 ; [.49AC.0020.0002] # YI SYLLABLE QYX
+A414 ; [.49AD.0020.0002] # YI SYLLABLE QY
+A415 ; [.49AE.0020.0002] # YI SYLLABLE QYP
+A416 ; [.49AF.0020.0002] # YI SYLLABLE QYRX
+A417 ; [.49B0.0020.0002] # YI SYLLABLE QYR
+A418 ; [.49B1.0020.0002] # YI SYLLABLE JJIT
+A419 ; [.49B2.0020.0002] # YI SYLLABLE JJIX
+A41A ; [.49B3.0020.0002] # YI SYLLABLE JJI
+A41B ; [.49B4.0020.0002] # YI SYLLABLE JJIP
+A41C ; [.49B5.0020.0002] # YI SYLLABLE JJIET
+A41D ; [.49B6.0020.0002] # YI SYLLABLE JJIEX
+A41E ; [.49B7.0020.0002] # YI SYLLABLE JJIE
+A41F ; [.49B8.0020.0002] # YI SYLLABLE JJIEP
+A420 ; [.49B9.0020.0002] # YI SYLLABLE JJUOX
+A421 ; [.49BA.0020.0002] # YI SYLLABLE JJUO
+A422 ; [.49BB.0020.0002] # YI SYLLABLE JJUOP
+A423 ; [.49BC.0020.0002] # YI SYLLABLE JJOT
+A424 ; [.49BD.0020.0002] # YI SYLLABLE JJOX
+A425 ; [.49BE.0020.0002] # YI SYLLABLE JJO
+A426 ; [.49BF.0020.0002] # YI SYLLABLE JJOP
+A427 ; [.49C0.0020.0002] # YI SYLLABLE JJUT
+A428 ; [.49C1.0020.0002] # YI SYLLABLE JJUX
+A429 ; [.49C2.0020.0002] # YI SYLLABLE JJU
+A42A ; [.49C3.0020.0002] # YI SYLLABLE JJUP
+A42B ; [.49C4.0020.0002] # YI SYLLABLE JJURX
+A42C ; [.49C5.0020.0002] # YI SYLLABLE JJUR
+A42D ; [.49C6.0020.0002] # YI SYLLABLE JJYT
+A42E ; [.49C7.0020.0002] # YI SYLLABLE JJYX
+A42F ; [.49C8.0020.0002] # YI SYLLABLE JJY
+A430 ; [.49C9.0020.0002] # YI SYLLABLE JJYP
+A431 ; [.49CA.0020.0002] # YI SYLLABLE NJIT
+A432 ; [.49CB.0020.0002] # YI SYLLABLE NJIX
+A433 ; [.49CC.0020.0002] # YI SYLLABLE NJI
+A434 ; [.49CD.0020.0002] # YI SYLLABLE NJIP
+A435 ; [.49CE.0020.0002] # YI SYLLABLE NJIET
+A436 ; [.49CF.0020.0002] # YI SYLLABLE NJIEX
+A437 ; [.49D0.0020.0002] # YI SYLLABLE NJIE
+A438 ; [.49D1.0020.0002] # YI SYLLABLE NJIEP
+A439 ; [.49D2.0020.0002] # YI SYLLABLE NJUOX
+A43A ; [.49D3.0020.0002] # YI SYLLABLE NJUO
+A43B ; [.49D4.0020.0002] # YI SYLLABLE NJOT
+A43C ; [.49D5.0020.0002] # YI SYLLABLE NJOX
+A43D ; [.49D6.0020.0002] # YI SYLLABLE NJO
+A43E ; [.49D7.0020.0002] # YI SYLLABLE NJOP
+A43F ; [.49D8.0020.0002] # YI SYLLABLE NJUX
+A440 ; [.49D9.0020.0002] # YI SYLLABLE NJU
+A441 ; [.49DA.0020.0002] # YI SYLLABLE NJUP
+A442 ; [.49DB.0020.0002] # YI SYLLABLE NJURX
+A443 ; [.49DC.0020.0002] # YI SYLLABLE NJUR
+A444 ; [.49DD.0020.0002] # YI SYLLABLE NJYT
+A445 ; [.49DE.0020.0002] # YI SYLLABLE NJYX
+A446 ; [.49DF.0020.0002] # YI SYLLABLE NJY
+A447 ; [.49E0.0020.0002] # YI SYLLABLE NJYP
+A448 ; [.49E1.0020.0002] # YI SYLLABLE NJYRX
+A449 ; [.49E2.0020.0002] # YI SYLLABLE NJYR
+A44A ; [.49E3.0020.0002] # YI SYLLABLE NYIT
+A44B ; [.49E4.0020.0002] # YI SYLLABLE NYIX
+A44C ; [.49E5.0020.0002] # YI SYLLABLE NYI
+A44D ; [.49E6.0020.0002] # YI SYLLABLE NYIP
+A44E ; [.49E7.0020.0002] # YI SYLLABLE NYIET
+A44F ; [.49E8.0020.0002] # YI SYLLABLE NYIEX
+A450 ; [.49E9.0020.0002] # YI SYLLABLE NYIE
+A451 ; [.49EA.0020.0002] # YI SYLLABLE NYIEP
+A452 ; [.49EB.0020.0002] # YI SYLLABLE NYUOX
+A453 ; [.49EC.0020.0002] # YI SYLLABLE NYUO
+A454 ; [.49ED.0020.0002] # YI SYLLABLE NYUOP
+A455 ; [.49EE.0020.0002] # YI SYLLABLE NYOT
+A456 ; [.49EF.0020.0002] # YI SYLLABLE NYOX
+A457 ; [.49F0.0020.0002] # YI SYLLABLE NYO
+A458 ; [.49F1.0020.0002] # YI SYLLABLE NYOP
+A459 ; [.49F2.0020.0002] # YI SYLLABLE NYUT
+A45A ; [.49F3.0020.0002] # YI SYLLABLE NYUX
+A45B ; [.49F4.0020.0002] # YI SYLLABLE NYU
+A45C ; [.49F5.0020.0002] # YI SYLLABLE NYUP
+A45D ; [.49F6.0020.0002] # YI SYLLABLE XIT
+A45E ; [.49F7.0020.0002] # YI SYLLABLE XIX
+A45F ; [.49F8.0020.0002] # YI SYLLABLE XI
+A460 ; [.49F9.0020.0002] # YI SYLLABLE XIP
+A461 ; [.49FA.0020.0002] # YI SYLLABLE XIET
+A462 ; [.49FB.0020.0002] # YI SYLLABLE XIEX
+A463 ; [.49FC.0020.0002] # YI SYLLABLE XIE
+A464 ; [.49FD.0020.0002] # YI SYLLABLE XIEP
+A465 ; [.49FE.0020.0002] # YI SYLLABLE XUOX
+A466 ; [.49FF.0020.0002] # YI SYLLABLE XUO
+A467 ; [.4A00.0020.0002] # YI SYLLABLE XOT
+A468 ; [.4A01.0020.0002] # YI SYLLABLE XOX
+A469 ; [.4A02.0020.0002] # YI SYLLABLE XO
+A46A ; [.4A03.0020.0002] # YI SYLLABLE XOP
+A46B ; [.4A04.0020.0002] # YI SYLLABLE XYT
+A46C ; [.4A05.0020.0002] # YI SYLLABLE XYX
+A46D ; [.4A06.0020.0002] # YI SYLLABLE XY
+A46E ; [.4A07.0020.0002] # YI SYLLABLE XYP
+A46F ; [.4A08.0020.0002] # YI SYLLABLE XYRX
+A470 ; [.4A09.0020.0002] # YI SYLLABLE XYR
+A471 ; [.4A0A.0020.0002] # YI SYLLABLE YIT
+A472 ; [.4A0B.0020.0002] # YI SYLLABLE YIX
+A473 ; [.4A0C.0020.0002] # YI SYLLABLE YI
+A474 ; [.4A0D.0020.0002] # YI SYLLABLE YIP
+A475 ; [.4A0E.0020.0002] # YI SYLLABLE YIET
+A476 ; [.4A0F.0020.0002] # YI SYLLABLE YIEX
+A477 ; [.4A10.0020.0002] # YI SYLLABLE YIE
+A478 ; [.4A11.0020.0002] # YI SYLLABLE YIEP
+A479 ; [.4A12.0020.0002] # YI SYLLABLE YUOT
+A47A ; [.4A13.0020.0002] # YI SYLLABLE YUOX
+A47B ; [.4A14.0020.0002] # YI SYLLABLE YUO
+A47C ; [.4A15.0020.0002] # YI SYLLABLE YUOP
+A47D ; [.4A16.0020.0002] # YI SYLLABLE YOT
+A47E ; [.4A17.0020.0002] # YI SYLLABLE YOX
+A47F ; [.4A18.0020.0002] # YI SYLLABLE YO
+A480 ; [.4A19.0020.0002] # YI SYLLABLE YOP
+A481 ; [.4A1A.0020.0002] # YI SYLLABLE YUT
+A482 ; [.4A1B.0020.0002] # YI SYLLABLE YUX
+A483 ; [.4A1C.0020.0002] # YI SYLLABLE YU
+A484 ; [.4A1D.0020.0002] # YI SYLLABLE YUP
+A485 ; [.4A1E.0020.0002] # YI SYLLABLE YURX
+A486 ; [.4A1F.0020.0002] # YI SYLLABLE YUR
+A487 ; [.4A20.0020.0002] # YI SYLLABLE YYT
+A488 ; [.4A21.0020.0002] # YI SYLLABLE YYX
+A489 ; [.4A22.0020.0002] # YI SYLLABLE YY
+A48A ; [.4A23.0020.0002] # YI SYLLABLE YYP
+A48B ; [.4A24.0020.0002] # YI SYLLABLE YYRX
+A48C ; [.4A25.0020.0002] # YI SYLLABLE YYR
+A4F8 ; [.4A26.0020.0002] # LISU LETTER TONE MYA TI
+A4F9 ; [.4A27.0020.0002] # LISU LETTER TONE NA PO
+A4FA ; [.4A28.0020.0002] # LISU LETTER TONE MYA CYA
+A4FB ; [.4A29.0020.0002] # LISU LETTER TONE MYA BO
+A4FD ; [.4A2A.0020.0002] # LISU LETTER TONE MYA JEU
+A4FC ; [.4A2B.0020.0002] # LISU LETTER TONE MYA NA
+A4D0 ; [.4A2C.0020.0002] # LISU LETTER BA
+A4D1 ; [.4A2D.0020.0002] # LISU LETTER PA
+A4D2 ; [.4A2E.0020.0002] # LISU LETTER PHA
+A4D3 ; [.4A2F.0020.0002] # LISU LETTER DA
+A4D4 ; [.4A30.0020.0002] # LISU LETTER TA
+A4D5 ; [.4A31.0020.0002] # LISU LETTER THA
+A4D6 ; [.4A32.0020.0002] # LISU LETTER GA
+A4D7 ; [.4A33.0020.0002] # LISU LETTER KA
+A4D8 ; [.4A34.0020.0002] # LISU LETTER KHA
+A4D9 ; [.4A35.0020.0002] # LISU LETTER JA
+A4DA ; [.4A36.0020.0002] # LISU LETTER CA
+A4DB ; [.4A37.0020.0002] # LISU LETTER CHA
+A4DC ; [.4A38.0020.0002] # LISU LETTER DZA
+A4DD ; [.4A39.0020.0002] # LISU LETTER TSA
+A4DE ; [.4A3A.0020.0002] # LISU LETTER TSHA
+A4DF ; [.4A3B.0020.0002] # LISU LETTER MA
+A4E0 ; [.4A3C.0020.0002] # LISU LETTER NA
+A4E1 ; [.4A3D.0020.0002] # LISU LETTER LA
+A4E2 ; [.4A3E.0020.0002] # LISU LETTER SA
+A4E3 ; [.4A3F.0020.0002] # LISU LETTER ZHA
+A4E4 ; [.4A40.0020.0002] # LISU LETTER ZA
+A4E5 ; [.4A41.0020.0002] # LISU LETTER NGA
+A4E6 ; [.4A42.0020.0002] # LISU LETTER HA
+A4E7 ; [.4A43.0020.0002] # LISU LETTER XA
+A4E8 ; [.4A44.0020.0002] # LISU LETTER HHA
+A4E9 ; [.4A45.0020.0002] # LISU LETTER FA
+A4EB ; [.4A46.0020.0002] # LISU LETTER SHA
+A4ED ; [.4A47.0020.0002] # LISU LETTER GHA
+A4EA ; [.4A48.0020.0002] # LISU LETTER WA
+A4EC ; [.4A49.0020.0002] # LISU LETTER YA
+11FB0 ; [.4A4A.0020.0002] # LISU LETTER YHA
+A4EE ; [.4A4B.0020.0002] # LISU LETTER A
+A4EF ; [.4A4C.0020.0002] # LISU LETTER AE
+A4F0 ; [.4A4D.0020.0002] # LISU LETTER E
+A4F1 ; [.4A4E.0020.0002] # LISU LETTER EU
+A4F2 ; [.4A4F.0020.0002] # LISU LETTER I
+A4F3 ; [.4A50.0020.0002] # LISU LETTER O
+A4F4 ; [.4A51.0020.0002] # LISU LETTER U
+A4F5 ; [.4A52.0020.0002] # LISU LETTER UE
+A4F6 ; [.4A53.0020.0002] # LISU LETTER UH
+A4F7 ; [.4A54.0020.0002] # LISU LETTER OE
+16F00 ; [.4A55.0020.0002] # MIAO LETTER PA
+16F01 ; [.4A56.0020.0002] # MIAO LETTER BA
+16F02 ; [.4A57.0020.0002] # MIAO LETTER YI PA
+16F03 ; [.4A58.0020.0002] # MIAO LETTER PLA
+16F45 ; [.4A59.0020.0002] # MIAO LETTER BRI
+16F04 ; [.4A5A.0020.0002] # MIAO LETTER MA
+16F06 ; [.4A5A.0020.0004] # MIAO LETTER ARCHAIC MA
+16F05 ; [.4A5B.0020.0002] # MIAO LETTER MHA
+16F07 ; [.4A5C.0020.0002] # MIAO LETTER FA
+16F08 ; [.4A5D.0020.0002] # MIAO LETTER VA
+16F09 ; [.4A5E.0020.0002] # MIAO LETTER VFA
+16F0A ; [.4A5F.0020.0002] # MIAO LETTER TA
+16F0B ; [.4A60.0020.0002] # MIAO LETTER DA
+16F0C ; [.4A61.0020.0002] # MIAO LETTER YI TTA
+16F0D ; [.4A62.0020.0002] # MIAO LETTER YI TA
+16F48 ; [.4A63.0020.0002] # MIAO LETTER TE
+16F0E ; [.4A64.0020.0002] # MIAO LETTER TTA
+16F0F ; [.4A65.0020.0002] # MIAO LETTER DDA
+16F4A ; [.4A66.0020.0002] # MIAO LETTER RTE
+16F10 ; [.4A67.0020.0002] # MIAO LETTER NA
+16F13 ; [.4A67.0020.0004] # MIAO LETTER ARCHAIC NA
+16F11 ; [.4A68.0020.0002] # MIAO LETTER NHA
+16F12 ; [.4A69.0020.0002] # MIAO LETTER YI NNA
+16F14 ; [.4A6A.0020.0002] # MIAO LETTER NNA
+16F15 ; [.4A6B.0020.0002] # MIAO LETTER NNHA
+16F16 ; [.4A6C.0020.0002] # MIAO LETTER LA
+16F17 ; [.4A6D.0020.0002] # MIAO LETTER LYA
+16F18 ; [.4A6E.0020.0002] # MIAO LETTER LHA
+16F19 ; [.4A6F.0020.0002] # MIAO LETTER LHYA
+16F1A ; [.4A70.0020.0002] # MIAO LETTER TLHA
+16F1B ; [.4A71.0020.0002] # MIAO LETTER DLHA
+16F1C ; [.4A72.0020.0002] # MIAO LETTER TLHYA
+16F1D ; [.4A73.0020.0002] # MIAO LETTER DLHYA
+16F1E ; [.4A74.0020.0002] # MIAO LETTER KA
+16F1F ; [.4A75.0020.0002] # MIAO LETTER GA
+16F20 ; [.4A76.0020.0002] # MIAO LETTER YI KA
+16F21 ; [.4A77.0020.0002] # MIAO LETTER QA
+16F22 ; [.4A78.0020.0002] # MIAO LETTER QGA
+16F23 ; [.4A79.0020.0002] # MIAO LETTER NGA
+16F25 ; [.4A79.0020.0004] # MIAO LETTER ARCHAIC NGA
+16F24 ; [.4A7A.0020.0002] # MIAO LETTER NGHA
+16F26 ; [.4A7B.0020.0002] # MIAO LETTER HA
+16F27 ; [.4A7C.0020.0002] # MIAO LETTER XA
+16F28 ; [.4A7D.0020.0002] # MIAO LETTER GHA
+16F29 ; [.4A7E.0020.0002] # MIAO LETTER GHHA
+16F2A ; [.4A7F.0020.0002] # MIAO LETTER TSSA
+16F2B ; [.4A80.0020.0002] # MIAO LETTER DZZA
+16F2C ; [.4A81.0020.0002] # MIAO LETTER NYA
+16F2D ; [.4A82.0020.0002] # MIAO LETTER NYHA
+16F2E ; [.4A83.0020.0002] # MIAO LETTER TSHA
+16F2F ; [.4A84.0020.0002] # MIAO LETTER DZHA
+16F30 ; [.4A85.0020.0002] # MIAO LETTER YI TSHA
+16F31 ; [.4A86.0020.0002] # MIAO LETTER YI DZHA
+16F32 ; [.4A87.0020.0002] # MIAO LETTER REFORMED TSHA
+16F47 ; [.4A88.0020.0002] # MIAO LETTER DZYI
+16F33 ; [.4A89.0020.0002] # MIAO LETTER SHA
+16F46 ; [.4A8A.0020.0002] # MIAO LETTER SYI
+16F34 ; [.4A8B.0020.0002] # MIAO LETTER SSA
+16F35 ; [.4A8C.0020.0002] # MIAO LETTER ZHA
+16F36 ; [.4A8D.0020.0002] # MIAO LETTER ZSHA
+16F37 ; [.4A8E.0020.0002] # MIAO LETTER TSA
+16F38 ; [.4A8F.0020.0002] # MIAO LETTER DZA
+16F39 ; [.4A90.0020.0002] # MIAO LETTER YI TSA
+16F49 ; [.4A91.0020.0002] # MIAO LETTER TSE
+16F3A ; [.4A92.0020.0002] # MIAO LETTER SA
+16F3B ; [.4A93.0020.0002] # MIAO LETTER ZA
+16F3C ; [.4A94.0020.0002] # MIAO LETTER ZSA
+16F3D ; [.4A95.0020.0002] # MIAO LETTER ZZA
+16F3F ; [.4A95.0020.0004] # MIAO LETTER ARCHAIC ZZA
+16F3E ; [.4A96.0020.0002] # MIAO LETTER ZZSA
+16F40 ; [.4A97.0020.0002] # MIAO LETTER ZZYA
+16F41 ; [.4A98.0020.0002] # MIAO LETTER ZZSYA
+16F42 ; [.4A99.0020.0002] # MIAO LETTER WA
+16F43 ; [.4A9A.0020.0002] # MIAO LETTER AH
+16F44 ; [.4A9B.0020.0002] # MIAO LETTER HHA
+16F50 ; [.4A9C.0020.0002] # MIAO LETTER NASALIZATION
+16F51 ; [.4A9D.0020.0002] # MIAO SIGN ASPIRATION
+16F52 ; [.4A9E.0020.0002] # MIAO SIGN REFORMED VOICING
+16F53 ; [.4A9F.0020.0002] # MIAO SIGN REFORMED ASPIRATION
+16F4F ; [.4AA0.0020.0002] # MIAO SIGN CONSONANT MODIFIER BAR
+16F54 ; [.4AA1.0020.0002] # MIAO VOWEL SIGN A
+16F55 ; [.4AA2.0020.0002] # MIAO VOWEL SIGN AA
+16F56 ; [.4AA3.0020.0002] # MIAO VOWEL SIGN AHH
+16F57 ; [.4AA4.0020.0002] # MIAO VOWEL SIGN AN
+16F58 ; [.4AA5.0020.0002] # MIAO VOWEL SIGN ANG
+16F81 ; [.4AA6.0020.0002] # MIAO VOWEL SIGN OG
+16F59 ; [.4AA7.0020.0002] # MIAO VOWEL SIGN O
+16F5A ; [.4AA8.0020.0002] # MIAO VOWEL SIGN OO
+16F5B ; [.4AA9.0020.0002] # MIAO VOWEL SIGN WO
+16F5C ; [.4AAA.0020.0002] # MIAO VOWEL SIGN W
+16F83 ; [.4AAB.0020.0002] # MIAO VOWEL SIGN VW
+16F5D ; [.4AAC.0020.0002] # MIAO VOWEL SIGN E
+16F5E ; [.4AAD.0020.0002] # MIAO VOWEL SIGN EN
+16F5F ; [.4AAE.0020.0002] # MIAO VOWEL SIGN ENG
+16F60 ; [.4AAF.0020.0002] # MIAO VOWEL SIGN OEY
+16F84 ; [.4AB0.0020.0002] # MIAO VOWEL SIGN IG
+16F61 ; [.4AB1.0020.0002] # MIAO VOWEL SIGN I
+16F62 ; [.4AB2.0020.0002] # MIAO VOWEL SIGN IA
+16F63 ; [.4AB3.0020.0002] # MIAO VOWEL SIGN IAN
+16F64 ; [.4AB4.0020.0002] # MIAO VOWEL SIGN IANG
+16F65 ; [.4AB5.0020.0002] # MIAO VOWEL SIGN IO
+16F86 ; [.4AB6.0020.0002] # MIAO VOWEL SIGN IONG
+16F66 ; [.4AB7.0020.0002] # MIAO VOWEL SIGN IE
+16F67 ; [.4AB8.0020.0002] # MIAO VOWEL SIGN II
+16F68 ; [.4AB9.0020.0002] # MIAO VOWEL SIGN IU
+16F69 ; [.4ABA.0020.0002] # MIAO VOWEL SIGN ING
+16F6A ; [.4ABB.0020.0002] # MIAO VOWEL SIGN U
+16F6B ; [.4ABC.0020.0002] # MIAO VOWEL SIGN UA
+16F6C ; [.4ABD.0020.0002] # MIAO VOWEL SIGN UAN
+16F6D ; [.4ABE.0020.0002] # MIAO VOWEL SIGN UANG
+16F7F ; [.4ABF.0020.0002] # MIAO VOWEL SIGN UOG
+16F87 ; [.4AC0.0020.0002] # MIAO VOWEL SIGN UI
+16F6E ; [.4AC1.0020.0002] # MIAO VOWEL SIGN UU
+16F6F ; [.4AC2.0020.0002] # MIAO VOWEL SIGN UEI
+16F70 ; [.4AC3.0020.0002] # MIAO VOWEL SIGN UNG
+16F71 ; [.4AC4.0020.0002] # MIAO VOWEL SIGN Y
+16F72 ; [.4AC5.0020.0002] # MIAO VOWEL SIGN YI
+16F80 ; [.4AC6.0020.0002] # MIAO VOWEL SIGN YUI
+16F73 ; [.4AC7.0020.0002] # MIAO VOWEL SIGN AE
+16F74 ; [.4AC8.0020.0002] # MIAO VOWEL SIGN AEE
+16F85 ; [.4AC9.0020.0002] # MIAO VOWEL SIGN EA
+16F82 ; [.4ACA.0020.0002] # MIAO VOWEL SIGN OER
+16F75 ; [.4ACB.0020.0002] # MIAO VOWEL SIGN ERR
+16F76 ; [.4ACC.0020.0002] # MIAO VOWEL SIGN ROUNDED ERR
+16F77 ; [.4ACD.0020.0002] # MIAO VOWEL SIGN ER
+16F78 ; [.4ACE.0020.0002] # MIAO VOWEL SIGN ROUNDED ER
+16F79 ; [.4ACF.0020.0002] # MIAO VOWEL SIGN AI
+16F7A ; [.4AD0.0020.0002] # MIAO VOWEL SIGN EI
+16F7B ; [.4AD1.0020.0002] # MIAO VOWEL SIGN AU
+16F7C ; [.4AD2.0020.0002] # MIAO VOWEL SIGN OU
+16F7D ; [.4AD3.0020.0002] # MIAO VOWEL SIGN N
+16F7E ; [.4AD4.0020.0002] # MIAO VOWEL SIGN NG
+16F8F ; [.4AD5.0020.0002] # MIAO TONE RIGHT
+16F90 ; [.4AD6.0020.0002] # MIAO TONE TOP RIGHT
+16F91 ; [.4AD7.0020.0002] # MIAO TONE ABOVE
+16F92 ; [.4AD8.0020.0002] # MIAO TONE BELOW
+16F93 ; [.4AD9.0020.0002] # MIAO LETTER TONE-2
+16F94 ; [.4ADA.0020.0002] # MIAO LETTER TONE-3
+16F95 ; [.4ADB.0020.0002] # MIAO LETTER TONE-4
+16F96 ; [.4ADC.0020.0002] # MIAO LETTER TONE-5
+16F97 ; [.4ADD.0020.0002] # MIAO LETTER TONE-6
+16F98 ; [.4ADE.0020.0002] # MIAO LETTER TONE-7
+16F99 ; [.4ADF.0020.0002] # MIAO LETTER TONE-8
+16F9A ; [.4AE0.0020.0002] # MIAO LETTER REFORMED TONE-1
+16F9B ; [.4AE1.0020.0002] # MIAO LETTER REFORMED TONE-2
+16F9C ; [.4AE2.0020.0002] # MIAO LETTER REFORMED TONE-4
+16F9D ; [.4AE3.0020.0002] # MIAO LETTER REFORMED TONE-5
+16F9E ; [.4AE4.0020.0002] # MIAO LETTER REFORMED TONE-6
+16F9F ; [.4AE5.0020.0002] # MIAO LETTER REFORMED TONE-8
+118FF ; [.4AE6.0020.0002] # WARANG CITI OM
+118C0 ; [.4AE7.0020.0002] # WARANG CITI SMALL LETTER NGAA
+118A0 ; [.4AE7.0020.0008] # WARANG CITI CAPITAL LETTER NGAA
+118C1 ; [.4AE8.0020.0002] # WARANG CITI SMALL LETTER A
+118A1 ; [.4AE8.0020.0008] # WARANG CITI CAPITAL LETTER A
+118C2 ; [.4AE9.0020.0002] # WARANG CITI SMALL LETTER WI
+118A2 ; [.4AE9.0020.0008] # WARANG CITI CAPITAL LETTER WI
+118C3 ; [.4AEA.0020.0002] # WARANG CITI SMALL LETTER YU
+118A3 ; [.4AEA.0020.0008] # WARANG CITI CAPITAL LETTER YU
+118C4 ; [.4AEB.0020.0002] # WARANG CITI SMALL LETTER YA
+118A4 ; [.4AEB.0020.0008] # WARANG CITI CAPITAL LETTER YA
+118C5 ; [.4AEC.0020.0002] # WARANG CITI SMALL LETTER YO
+118A5 ; [.4AEC.0020.0008] # WARANG CITI CAPITAL LETTER YO
+118C6 ; [.4AED.0020.0002] # WARANG CITI SMALL LETTER II
+118A6 ; [.4AED.0020.0008] # WARANG CITI CAPITAL LETTER II
+118C7 ; [.4AEE.0020.0002] # WARANG CITI SMALL LETTER UU
+118A7 ; [.4AEE.0020.0008] # WARANG CITI CAPITAL LETTER UU
+118C8 ; [.4AEF.0020.0002] # WARANG CITI SMALL LETTER E
+118A8 ; [.4AEF.0020.0008] # WARANG CITI CAPITAL LETTER E
+118C9 ; [.4AF0.0020.0002] # WARANG CITI SMALL LETTER O
+118A9 ; [.4AF0.0020.0008] # WARANG CITI CAPITAL LETTER O
+118CA ; [.4AF1.0020.0002] # WARANG CITI SMALL LETTER ANG
+118AA ; [.4AF1.0020.0008] # WARANG CITI CAPITAL LETTER ANG
+118CB ; [.4AF2.0020.0002] # WARANG CITI SMALL LETTER GA
+118AB ; [.4AF2.0020.0008] # WARANG CITI CAPITAL LETTER GA
+118CC ; [.4AF3.0020.0002] # WARANG CITI SMALL LETTER KO
+118AC ; [.4AF3.0020.0008] # WARANG CITI CAPITAL LETTER KO
+118CD ; [.4AF4.0020.0002] # WARANG CITI SMALL LETTER ENY
+118AD ; [.4AF4.0020.0008] # WARANG CITI CAPITAL LETTER ENY
+118CE ; [.4AF5.0020.0002] # WARANG CITI SMALL LETTER YUJ
+118AE ; [.4AF5.0020.0008] # WARANG CITI CAPITAL LETTER YUJ
+118CF ; [.4AF6.0020.0002] # WARANG CITI SMALL LETTER UC
+118AF ; [.4AF6.0020.0008] # WARANG CITI CAPITAL LETTER UC
+118D0 ; [.4AF7.0020.0002] # WARANG CITI SMALL LETTER ENN
+118B0 ; [.4AF7.0020.0008] # WARANG CITI CAPITAL LETTER ENN
+118D1 ; [.4AF8.0020.0002] # WARANG CITI SMALL LETTER ODD
+118B1 ; [.4AF8.0020.0008] # WARANG CITI CAPITAL LETTER ODD
+118D2 ; [.4AF9.0020.0002] # WARANG CITI SMALL LETTER TTE
+118B2 ; [.4AF9.0020.0008] # WARANG CITI CAPITAL LETTER TTE
+118D3 ; [.4AFA.0020.0002] # WARANG CITI SMALL LETTER NUNG
+118B3 ; [.4AFA.0020.0008] # WARANG CITI CAPITAL LETTER NUNG
+118D4 ; [.4AFB.0020.0002] # WARANG CITI SMALL LETTER DA
+118B4 ; [.4AFB.0020.0008] # WARANG CITI CAPITAL LETTER DA
+118D5 ; [.4AFC.0020.0002] # WARANG CITI SMALL LETTER AT
+118B5 ; [.4AFC.0020.0008] # WARANG CITI CAPITAL LETTER AT
+118D6 ; [.4AFD.0020.0002] # WARANG CITI SMALL LETTER AM
+118B6 ; [.4AFD.0020.0008] # WARANG CITI CAPITAL LETTER AM
+118D7 ; [.4AFE.0020.0002] # WARANG CITI SMALL LETTER BU
+118B7 ; [.4AFE.0020.0008] # WARANG CITI CAPITAL LETTER BU
+118D8 ; [.4AFF.0020.0002] # WARANG CITI SMALL LETTER PU
+118B8 ; [.4AFF.0020.0008] # WARANG CITI CAPITAL LETTER PU
+118D9 ; [.4B00.0020.0002] # WARANG CITI SMALL LETTER HIYO
+118B9 ; [.4B00.0020.0008] # WARANG CITI CAPITAL LETTER HIYO
+118DA ; [.4B01.0020.0002] # WARANG CITI SMALL LETTER HOLO
+118BA ; [.4B01.0020.0008] # WARANG CITI CAPITAL LETTER HOLO
+118DB ; [.4B02.0020.0002] # WARANG CITI SMALL LETTER HORR
+118BB ; [.4B02.0020.0008] # WARANG CITI CAPITAL LETTER HORR
+118DC ; [.4B03.0020.0002] # WARANG CITI SMALL LETTER HAR
+118BC ; [.4B03.0020.0008] # WARANG CITI CAPITAL LETTER HAR
+118DD ; [.4B04.0020.0002] # WARANG CITI SMALL LETTER SSUU
+118BD ; [.4B04.0020.0008] # WARANG CITI CAPITAL LETTER SSUU
+118DE ; [.4B05.0020.0002] # WARANG CITI SMALL LETTER SII
+118BE ; [.4B05.0020.0008] # WARANG CITI CAPITAL LETTER SII
+118DF ; [.4B06.0020.0002] # WARANG CITI SMALL LETTER VIYO
+118BF ; [.4B06.0020.0008] # WARANG CITI CAPITAL LETTER VIYO
+11AD5 ; [.4B07.0020.0002] # PAU CIN HAU LETTER A
+11AD6 ; [.4B08.0020.0002] # PAU CIN HAU LETTER E
+11AD7 ; [.4B09.0020.0002] # PAU CIN HAU LETTER I
+11AD8 ; [.4B0A.0020.0002] # PAU CIN HAU LETTER O
+11AD9 ; [.4B0B.0020.0002] # PAU CIN HAU LETTER U
+11ADA ; [.4B0C.0020.0002] # PAU CIN HAU LETTER UA
+11ADB ; [.4B0D.0020.0002] # PAU CIN HAU LETTER IA
+11AC0 ; [.4B0E.0020.0002] # PAU CIN HAU LETTER PA
+11AC1 ; [.4B0F.0020.0002] # PAU CIN HAU LETTER KA
+11AC2 ; [.4B10.0020.0002] # PAU CIN HAU LETTER LA
+11AC3 ; [.4B11.0020.0002] # PAU CIN HAU LETTER MA
+11AC4 ; [.4B12.0020.0002] # PAU CIN HAU LETTER DA
+11AC5 ; [.4B13.0020.0002] # PAU CIN HAU LETTER ZA
+11AC6 ; [.4B14.0020.0002] # PAU CIN HAU LETTER VA
+11AC7 ; [.4B15.0020.0002] # PAU CIN HAU LETTER NGA
+11AC8 ; [.4B16.0020.0002] # PAU CIN HAU LETTER HA
+11AC9 ; [.4B17.0020.0002] # PAU CIN HAU LETTER GA
+11ACA ; [.4B18.0020.0002] # PAU CIN HAU LETTER KHA
+11ACB ; [.4B19.0020.0002] # PAU CIN HAU LETTER SA
+11ACC ; [.4B1A.0020.0002] # PAU CIN HAU LETTER BA
+11ACD ; [.4B1B.0020.0002] # PAU CIN HAU LETTER CA
+11ACE ; [.4B1C.0020.0002] # PAU CIN HAU LETTER TA
+11ACF ; [.4B1D.0020.0002] # PAU CIN HAU LETTER THA
+11AD0 ; [.4B1E.0020.0002] # PAU CIN HAU LETTER NA
+11AD1 ; [.4B1F.0020.0002] # PAU CIN HAU LETTER PHA
+11AD2 ; [.4B20.0020.0002] # PAU CIN HAU LETTER RA
+11AD3 ; [.4B21.0020.0002] # PAU CIN HAU LETTER FA
+11AD4 ; [.4B22.0020.0002] # PAU CIN HAU LETTER CHA
+11ADC ; [.4B23.0020.0002] # PAU CIN HAU LETTER FINAL P
+11ADD ; [.4B24.0020.0002] # PAU CIN HAU LETTER FINAL K
+11ADF ; [.4B25.0020.0002] # PAU CIN HAU LETTER FINAL M
+11AE0 ; [.4B26.0020.0002] # PAU CIN HAU LETTER FINAL N
+11AE1 ; [.4B27.0020.0002] # PAU CIN HAU LETTER FINAL L
+11AE2 ; [.4B28.0020.0002] # PAU CIN HAU LETTER FINAL W
+11AE3 ; [.4B29.0020.0002] # PAU CIN HAU LETTER FINAL NG
+11ADE ; [.4B2A.0020.0002] # PAU CIN HAU LETTER FINAL T
+11AE4 ; [.4B2B.0020.0002] # PAU CIN HAU LETTER FINAL Y
+11AEF ; [.4B2C.0020.0002] # PAU CIN HAU MID-LEVEL TONE
+11AF2 ; [.4B2D.0020.0002] # PAU CIN HAU MID-LEVEL TONE FINAL
+11AF1 ; [.4B2E.0020.0002] # PAU CIN HAU MID-LEVEL TONE LONG FINAL
+11AE6 ; [.4B2F.0020.0002] # PAU CIN HAU RISING TONE
+11AE9 ; [.4B30.0020.0002] # PAU CIN HAU RISING TONE FINAL
+11AE5 ; [.4B31.0020.0002] # PAU CIN HAU RISING TONE LONG
+11AE8 ; [.4B32.0020.0002] # PAU CIN HAU RISING TONE LONG FINAL
+11AF4 ; [.4B33.0020.0002] # PAU CIN HAU LOW-FALLING TONE
+11AF7 ; [.4B34.0020.0002] # PAU CIN HAU LOW-FALLING TONE FINAL
+11AF3 ; [.4B35.0020.0002] # PAU CIN HAU LOW-FALLING TONE LONG
+11AF6 ; [.4B36.0020.0002] # PAU CIN HAU LOW-FALLING TONE LONG FINAL
+11AEC ; [.4B37.0020.0002] # PAU CIN HAU SANDHI TONE
+11AEE ; [.4B38.0020.0002] # PAU CIN HAU SANDHI TONE FINAL
+11AEB ; [.4B39.0020.0002] # PAU CIN HAU SANDHI TONE LONG
+11AED ; [.4B3A.0020.0002] # PAU CIN HAU SANDHI TONE LONG FINAL
+11AF5 ; [.4B3B.0020.0002] # PAU CIN HAU GLOTTAL STOP
+11AF8 ; [.4B3C.0020.0002] # PAU CIN HAU GLOTTAL STOP FINAL
+11AE7 ; [.4B3D.0020.0002] # PAU CIN HAU SANDHI GLOTTAL STOP
+11AEA ; [.4B3E.0020.0002] # PAU CIN HAU SANDHI GLOTTAL STOP FINAL
+11AF0 ; [.4B3F.0020.0002] # PAU CIN HAU GLOTTAL STOP VARIANT
+16B00 ; [.4B40.0020.0002] # PAHAWH HMONG VOWEL KEEB
+16B01 ; [.4B41.0020.0002] # PAHAWH HMONG VOWEL KEEV
+16B02 ; [.4B42.0020.0002] # PAHAWH HMONG VOWEL KIB
+16B03 ; [.4B43.0020.0002] # PAHAWH HMONG VOWEL KIV
+16B04 ; [.4B44.0020.0002] # PAHAWH HMONG VOWEL KAUB
+16B05 ; [.4B45.0020.0002] # PAHAWH HMONG VOWEL KAUV
+16B06 ; [.4B46.0020.0002] # PAHAWH HMONG VOWEL KUB
+16B07 ; [.4B47.0020.0002] # PAHAWH HMONG VOWEL KUV
+16B08 ; [.4B48.0020.0002] # PAHAWH HMONG VOWEL KEB
+16B09 ; [.4B49.0020.0002] # PAHAWH HMONG VOWEL KEV
+16B0A ; [.4B4A.0020.0002] # PAHAWH HMONG VOWEL KAIB
+16B0B ; [.4B4B.0020.0002] # PAHAWH HMONG VOWEL KAIV
+16B0C ; [.4B4C.0020.0002] # PAHAWH HMONG VOWEL KOOB
+16B0D ; [.4B4D.0020.0002] # PAHAWH HMONG VOWEL KOOV
+16B0E ; [.4B4E.0020.0002] # PAHAWH HMONG VOWEL KAWB
+16B0F ; [.4B4F.0020.0002] # PAHAWH HMONG VOWEL KAWV
+16B10 ; [.4B50.0020.0002] # PAHAWH HMONG VOWEL KUAB
+16B11 ; [.4B51.0020.0002] # PAHAWH HMONG VOWEL KUAV
+16B12 ; [.4B52.0020.0002] # PAHAWH HMONG VOWEL KOB
+16B13 ; [.4B53.0020.0002] # PAHAWH HMONG VOWEL KOV
+16B14 ; [.4B54.0020.0002] # PAHAWH HMONG VOWEL KIAB
+16B15 ; [.4B55.0020.0002] # PAHAWH HMONG VOWEL KIAV
+16B16 ; [.4B56.0020.0002] # PAHAWH HMONG VOWEL KAB
+16B17 ; [.4B57.0020.0002] # PAHAWH HMONG VOWEL KAV
+16B18 ; [.4B58.0020.0002] # PAHAWH HMONG VOWEL KWB
+16B19 ; [.4B59.0020.0002] # PAHAWH HMONG VOWEL KWV
+16B1A ; [.4B5A.0020.0002] # PAHAWH HMONG VOWEL KAAB
+16B1B ; [.4B5B.0020.0002] # PAHAWH HMONG VOWEL KAAV
+16B1C ; [.4B5C.0020.0002] # PAHAWH HMONG CONSONANT VAU
+16B1D ; [.4B5D.0020.0002] # PAHAWH HMONG CONSONANT NTSAU
+16B1E ; [.4B5E.0020.0002] # PAHAWH HMONG CONSONANT LAU
+16B1F ; [.4B5F.0020.0002] # PAHAWH HMONG CONSONANT HAU
+16B20 ; [.4B60.0020.0002] # PAHAWH HMONG CONSONANT NLAU
+16B21 ; [.4B61.0020.0002] # PAHAWH HMONG CONSONANT RAU
+16B22 ; [.4B62.0020.0002] # PAHAWH HMONG CONSONANT NKAU
+16B23 ; [.4B63.0020.0002] # PAHAWH HMONG CONSONANT QHAU
+16B24 ; [.4B64.0020.0002] # PAHAWH HMONG CONSONANT YAU
+16B25 ; [.4B65.0020.0002] # PAHAWH HMONG CONSONANT HLAU
+16B26 ; [.4B66.0020.0002] # PAHAWH HMONG CONSONANT MAU
+16B27 ; [.4B67.0020.0002] # PAHAWH HMONG CONSONANT CHAU
+16B28 ; [.4B68.0020.0002] # PAHAWH HMONG CONSONANT NCHAU
+16B29 ; [.4B69.0020.0002] # PAHAWH HMONG CONSONANT HNAU
+16B2A ; [.4B6A.0020.0002] # PAHAWH HMONG CONSONANT PLHAU
+16B2B ; [.4B6B.0020.0002] # PAHAWH HMONG CONSONANT NTHAU
+16B2C ; [.4B6C.0020.0002] # PAHAWH HMONG CONSONANT NAU
+16B2D ; [.4B6D.0020.0002] # PAHAWH HMONG CONSONANT AU
+16B2E ; [.4B6E.0020.0002] # PAHAWH HMONG CONSONANT XAU
+16B2F ; [.4B6F.0020.0002] # PAHAWH HMONG CONSONANT CAU
+16B40 ; [.4B70.0020.0002] # PAHAWH HMONG SIGN VOS SEEV
+16B41 ; [.4B71.0020.0002] # PAHAWH HMONG SIGN MEEJ SUAB
+16B63 ; [.4B72.0020.0002] # PAHAWH HMONG SIGN VOS LUB
+16B64 ; [.4B73.0020.0002] # PAHAWH HMONG SIGN XYOO
+16B65 ; [.4B74.0020.0002] # PAHAWH HMONG SIGN HLI
+16B66 ; [.4B75.0020.0002] # PAHAWH HMONG SIGN THIRD-STAGE HLI
+16B67 ; [.4B76.0020.0002] # PAHAWH HMONG SIGN ZWJ THAJ
+16B68 ; [.4B77.0020.0002] # PAHAWH HMONG SIGN HNUB
+16B69 ; [.4B78.0020.0002] # PAHAWH HMONG SIGN NQIG
+16B6A ; [.4B79.0020.0002] # PAHAWH HMONG SIGN XIAB
+16B6B ; [.4B7A.0020.0002] # PAHAWH HMONG SIGN NTUJ
+16B6C ; [.4B7B.0020.0002] # PAHAWH HMONG SIGN AV
+16B6D ; [.4B7C.0020.0002] # PAHAWH HMONG SIGN TXHEEJ CEEV
+16B6E ; [.4B7D.0020.0002] # PAHAWH HMONG SIGN MEEJ TSEEB
+16B6F ; [.4B7E.0020.0002] # PAHAWH HMONG SIGN TAU
+16B70 ; [.4B7F.0020.0002] # PAHAWH HMONG SIGN LOS
+16B71 ; [.4B80.0020.0002] # PAHAWH HMONG SIGN MUS
+16B72 ; [.4B81.0020.0002] # PAHAWH HMONG SIGN CIM HAIS LUS NTOG NTOG
+16B73 ; [.4B82.0020.0002] # PAHAWH HMONG SIGN CIM CUAM TSHOOJ
+16B74 ; [.4B83.0020.0002] # PAHAWH HMONG SIGN CIM TXWV
+16B75 ; [.4B84.0020.0002] # PAHAWH HMONG SIGN CIM TXWV CHWV
+16B76 ; [.4B85.0020.0002] # PAHAWH HMONG SIGN CIM PUB DAWB
+16B77 ; [.4B86.0020.0002] # PAHAWH HMONG SIGN CIM NRES TOS
+16B7D ; [.4B87.0020.0002] # PAHAWH HMONG CLAN SIGN TSHEEJ
+16B7E ; [.4B88.0020.0002] # PAHAWH HMONG CLAN SIGN YEEG
+16B7F ; [.4B89.0020.0002] # PAHAWH HMONG CLAN SIGN LIS
+16B80 ; [.4B8A.0020.0002] # PAHAWH HMONG CLAN SIGN LAUJ
+16B81 ; [.4B8B.0020.0002] # PAHAWH HMONG CLAN SIGN XYOOJ
+16B82 ; [.4B8C.0020.0002] # PAHAWH HMONG CLAN SIGN KOO
+16B83 ; [.4B8D.0020.0002] # PAHAWH HMONG CLAN SIGN HAWJ
+16B84 ; [.4B8E.0020.0002] # PAHAWH HMONG CLAN SIGN MUAS
+16B85 ; [.4B8F.0020.0002] # PAHAWH HMONG CLAN SIGN THOJ
+16B86 ; [.4B90.0020.0002] # PAHAWH HMONG CLAN SIGN TSAB
+16B87 ; [.4B91.0020.0002] # PAHAWH HMONG CLAN SIGN PHAB
+16B88 ; [.4B92.0020.0002] # PAHAWH HMONG CLAN SIGN KHAB
+16B89 ; [.4B93.0020.0002] # PAHAWH HMONG CLAN SIGN HAM
+16B8A ; [.4B94.0020.0002] # PAHAWH HMONG CLAN SIGN VAJ
+16B8B ; [.4B95.0020.0002] # PAHAWH HMONG CLAN SIGN FAJ
+16B8C ; [.4B96.0020.0002] # PAHAWH HMONG CLAN SIGN YAJ
+16B8D ; [.4B97.0020.0002] # PAHAWH HMONG CLAN SIGN TSWB
+16B8E ; [.4B98.0020.0002] # PAHAWH HMONG CLAN SIGN KWM
+16B8F ; [.4B99.0020.0002] # PAHAWH HMONG CLAN SIGN VWJ
+1E100 ; [.4B9A.0020.0002] # NYIAKENG PUACHUE HMONG LETTER MA
+1E101 ; [.4B9B.0020.0002] # NYIAKENG PUACHUE HMONG LETTER TSA
+1E102 ; [.4B9C.0020.0002] # NYIAKENG PUACHUE HMONG LETTER NTA
+1E103 ; [.4B9D.0020.0002] # NYIAKENG PUACHUE HMONG LETTER TA
+1E104 ; [.4B9E.0020.0002] # NYIAKENG PUACHUE HMONG LETTER HA
+1E105 ; [.4B9F.0020.0002] # NYIAKENG PUACHUE HMONG LETTER NA
+1E106 ; [.4BA0.0020.0002] # NYIAKENG PUACHUE HMONG LETTER XA
+1E107 ; [.4BA1.0020.0002] # NYIAKENG PUACHUE HMONG LETTER NKA
+1E108 ; [.4BA2.0020.0002] # NYIAKENG PUACHUE HMONG LETTER CA
+1E109 ; [.4BA3.0020.0002] # NYIAKENG PUACHUE HMONG LETTER LA
+1E10A ; [.4BA4.0020.0002] # NYIAKENG PUACHUE HMONG LETTER SA
+1E10B ; [.4BA5.0020.0002] # NYIAKENG PUACHUE HMONG LETTER ZA
+1E10C ; [.4BA6.0020.0002] # NYIAKENG PUACHUE HMONG LETTER NCA
+1E10D ; [.4BA7.0020.0002] # NYIAKENG PUACHUE HMONG LETTER NTSA
+1E10E ; [.4BA8.0020.0002] # NYIAKENG PUACHUE HMONG LETTER KA
+1E10F ; [.4BA9.0020.0002] # NYIAKENG PUACHUE HMONG LETTER DA
+1E110 ; [.4BAA.0020.0002] # NYIAKENG PUACHUE HMONG LETTER NYA
+1E111 ; [.4BAB.0020.0002] # NYIAKENG PUACHUE HMONG LETTER NRA
+1E112 ; [.4BAC.0020.0002] # NYIAKENG PUACHUE HMONG LETTER VA
+1E113 ; [.4BAD.0020.0002] # NYIAKENG PUACHUE HMONG LETTER NTXA
+1E114 ; [.4BAE.0020.0002] # NYIAKENG PUACHUE HMONG LETTER TXA
+1E115 ; [.4BAF.0020.0002] # NYIAKENG PUACHUE HMONG LETTER FA
+1E116 ; [.4BB0.0020.0002] # NYIAKENG PUACHUE HMONG LETTER RA
+1E117 ; [.4BB1.0020.0002] # NYIAKENG PUACHUE HMONG LETTER QA
+1E118 ; [.4BB2.0020.0002] # NYIAKENG PUACHUE HMONG LETTER YA
+1E119 ; [.4BB3.0020.0002] # NYIAKENG PUACHUE HMONG LETTER NQA
+1E11A ; [.4BB4.0020.0002] # NYIAKENG PUACHUE HMONG LETTER PA
+1E11B ; [.4BB5.0020.0002] # NYIAKENG PUACHUE HMONG LETTER XYA
+1E11C ; [.4BB6.0020.0002] # NYIAKENG PUACHUE HMONG LETTER NPA
+1E11D ; [.4BB7.0020.0002] # NYIAKENG PUACHUE HMONG LETTER DLA
+1E11E ; [.4BB8.0020.0002] # NYIAKENG PUACHUE HMONG LETTER NPLA
+1E11F ; [.4BB9.0020.0002] # NYIAKENG PUACHUE HMONG LETTER HAH
+1E120 ; [.4BBA.0020.0002] # NYIAKENG PUACHUE HMONG LETTER MLA
+1E121 ; [.4BBB.0020.0002] # NYIAKENG PUACHUE HMONG LETTER PLA
+1E122 ; [.4BBC.0020.0002] # NYIAKENG PUACHUE HMONG LETTER GA
+1E123 ; [.4BBD.0020.0002] # NYIAKENG PUACHUE HMONG LETTER RRA
+1E124 ; [.4BBE.0020.0002] # NYIAKENG PUACHUE HMONG LETTER A
+1E125 ; [.4BBF.0020.0002] # NYIAKENG PUACHUE HMONG LETTER AA
+1E126 ; [.4BC0.0020.0002] # NYIAKENG PUACHUE HMONG LETTER I
+1E127 ; [.4BC1.0020.0002] # NYIAKENG PUACHUE HMONG LETTER U
+1E128 ; [.4BC2.0020.0002] # NYIAKENG PUACHUE HMONG LETTER O
+1E129 ; [.4BC3.0020.0002] # NYIAKENG PUACHUE HMONG LETTER OO
+1E12A ; [.4BC4.0020.0002] # NYIAKENG PUACHUE HMONG LETTER E
+1E12B ; [.4BC5.0020.0002] # NYIAKENG PUACHUE HMONG LETTER EE
+1E12C ; [.4BC6.0020.0002] # NYIAKENG PUACHUE HMONG LETTER W
+1E137 ; [.4BC7.0020.0002] # NYIAKENG PUACHUE HMONG SIGN FOR PERSON
+1E138 ; [.4BC8.0020.0002] # NYIAKENG PUACHUE HMONG SIGN FOR THING
+1E139 ; [.4BC9.0020.0002] # NYIAKENG PUACHUE HMONG SIGN FOR LOCATION
+1E13A ; [.4BCA.0020.0002] # NYIAKENG PUACHUE HMONG SIGN FOR ANIMAL
+1E13B ; [.4BCB.0020.0002] # NYIAKENG PUACHUE HMONG SIGN FOR INVERTEBRATE
+1E14E ; [.4BCC.0020.0002] # NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ
+1E290 ; [.4BCD.0020.0002] # TOTO LETTER PA
+1E291 ; [.4BCE.0020.0002] # TOTO LETTER BA
+1E292 ; [.4BCF.0020.0002] # TOTO LETTER TA
+1E293 ; [.4BD0.0020.0002] # TOTO LETTER DA
+1E294 ; [.4BD1.0020.0002] # TOTO LETTER KA
+1E295 ; [.4BD2.0020.0002] # TOTO LETTER GA
+1E296 ; [.4BD3.0020.0002] # TOTO LETTER MA
+1E297 ; [.4BD4.0020.0002] # TOTO LETTER NA
+1E298 ; [.4BD5.0020.0002] # TOTO LETTER NGA
+1E299 ; [.4BD6.0020.0002] # TOTO LETTER SA
+1E29A ; [.4BD7.0020.0002] # TOTO LETTER CHA
+1E29B ; [.4BD8.0020.0002] # TOTO LETTER YA
+1E29C ; [.4BD9.0020.0002] # TOTO LETTER WA
+1E29D ; [.4BDA.0020.0002] # TOTO LETTER JA
+1E29E ; [.4BDB.0020.0002] # TOTO LETTER HA
+1E29F ; [.4BDC.0020.0002] # TOTO LETTER RA
+1E2A0 ; [.4BDD.0020.0002] # TOTO LETTER LA
+1E2A1 ; [.4BDE.0020.0002] # TOTO LETTER I
+1E2A2 ; [.4BDF.0020.0002] # TOTO LETTER BREATHY I
+1E2A3 ; [.4BE0.0020.0002] # TOTO LETTER IU
+1E2A4 ; [.4BE1.0020.0002] # TOTO LETTER BREATHY IU
+1E2A5 ; [.4BE2.0020.0002] # TOTO LETTER U
+1E2A6 ; [.4BE3.0020.0002] # TOTO LETTER E
+1E2A7 ; [.4BE4.0020.0002] # TOTO LETTER BREATHY E
+1E2A8 ; [.4BE5.0020.0002] # TOTO LETTER EO
+1E2A9 ; [.4BE6.0020.0002] # TOTO LETTER BREATHY EO
+1E2AA ; [.4BE7.0020.0002] # TOTO LETTER O
+1E2AB ; [.4BE8.0020.0002] # TOTO LETTER AE
+1E2AC ; [.4BE9.0020.0002] # TOTO LETTER BREATHY AE
+1E2AD ; [.4BEA.0020.0002] # TOTO LETTER A
+1E2C0 ; [.4BEB.0020.0002] # WANCHO LETTER AA
+1E2C1 ; [.4BEC.0020.0002] # WANCHO LETTER A
+1E2C2 ; [.4BED.0020.0002] # WANCHO LETTER BA
+1E2C3 ; [.4BEE.0020.0002] # WANCHO LETTER CA
+1E2C4 ; [.4BEF.0020.0002] # WANCHO LETTER DA
+1E2C5 ; [.4BF0.0020.0002] # WANCHO LETTER GA
+1E2C6 ; [.4BF1.0020.0002] # WANCHO LETTER YA
+1E2C7 ; [.4BF2.0020.0002] # WANCHO LETTER PHA
+1E2C8 ; [.4BF3.0020.0002] # WANCHO LETTER LA
+1E2C9 ; [.4BF4.0020.0002] # WANCHO LETTER NA
+1E2CA ; [.4BF5.0020.0002] # WANCHO LETTER PA
+1E2CB ; [.4BF6.0020.0002] # WANCHO LETTER TA
+1E2CC ; [.4BF7.0020.0002] # WANCHO LETTER THA
+1E2CD ; [.4BF8.0020.0002] # WANCHO LETTER FA
+1E2CE ; [.4BF9.0020.0002] # WANCHO LETTER SA
+1E2CF ; [.4BFA.0020.0002] # WANCHO LETTER SHA
+1E2D0 ; [.4BFB.0020.0002] # WANCHO LETTER JA
+1E2D1 ; [.4BFC.0020.0002] # WANCHO LETTER ZA
+1E2D2 ; [.4BFD.0020.0002] # WANCHO LETTER WA
+1E2D3 ; [.4BFE.0020.0002] # WANCHO LETTER VA
+1E2D4 ; [.4BFF.0020.0002] # WANCHO LETTER KA
+1E2D5 ; [.4C00.0020.0002] # WANCHO LETTER O
+1E2D6 ; [.4C01.0020.0002] # WANCHO LETTER AU
+1E2D7 ; [.4C02.0020.0002] # WANCHO LETTER RA
+1E2D8 ; [.4C03.0020.0002] # WANCHO LETTER MA
+1E2D9 ; [.4C04.0020.0002] # WANCHO LETTER KHA
+1E2DA ; [.4C05.0020.0002] # WANCHO LETTER HA
+1E2DB ; [.4C06.0020.0002] # WANCHO LETTER E
+1E2DC ; [.4C07.0020.0002] # WANCHO LETTER I
+1E2DD ; [.4C08.0020.0002] # WANCHO LETTER NGA
+1E2DE ; [.4C09.0020.0002] # WANCHO LETTER U
+1E2DF ; [.4C0A.0020.0002] # WANCHO LETTER LLHA
+1E2E0 ; [.4C0B.0020.0002] # WANCHO LETTER TSA
+1E2E1 ; [.4C0C.0020.0002] # WANCHO LETTER TRA
+1E2E2 ; [.4C0D.0020.0002] # WANCHO LETTER ONG
+1E2E3 ; [.4C0E.0020.0002] # WANCHO LETTER AANG
+1E2E4 ; [.4C0F.0020.0002] # WANCHO LETTER ANG
+1E2E5 ; [.4C10.0020.0002] # WANCHO LETTER ING
+1E2E6 ; [.4C11.0020.0002] # WANCHO LETTER ON
+1E2E7 ; [.4C12.0020.0002] # WANCHO LETTER EN
+1E2E8 ; [.4C13.0020.0002] # WANCHO LETTER AAN
+1E2E9 ; [.4C14.0020.0002] # WANCHO LETTER NYA
+1E2EA ; [.4C15.0020.0002] # WANCHO LETTER UEN
+1E2EB ; [.4C16.0020.0002] # WANCHO LETTER YIH
+10280 ; [.4C17.0020.0002] # LYCIAN LETTER A
+10281 ; [.4C18.0020.0002] # LYCIAN LETTER E
+10282 ; [.4C19.0020.0002] # LYCIAN LETTER B
+10283 ; [.4C1A.0020.0002] # LYCIAN LETTER BH
+10284 ; [.4C1B.0020.0002] # LYCIAN LETTER G
+10285 ; [.4C1C.0020.0002] # LYCIAN LETTER D
+10286 ; [.4C1D.0020.0002] # LYCIAN LETTER I
+10287 ; [.4C1E.0020.0002] # LYCIAN LETTER W
+10288 ; [.4C1F.0020.0002] # LYCIAN LETTER Z
+10289 ; [.4C20.0020.0002] # LYCIAN LETTER TH
+1028A ; [.4C21.0020.0002] # LYCIAN LETTER J
+1028B ; [.4C22.0020.0002] # LYCIAN LETTER K
+1028C ; [.4C23.0020.0002] # LYCIAN LETTER Q
+1028D ; [.4C24.0020.0002] # LYCIAN LETTER L
+1028E ; [.4C25.0020.0002] # LYCIAN LETTER M
+1028F ; [.4C26.0020.0002] # LYCIAN LETTER N
+10290 ; [.4C27.0020.0002] # LYCIAN LETTER MM
+10291 ; [.4C28.0020.0002] # LYCIAN LETTER NN
+10292 ; [.4C29.0020.0002] # LYCIAN LETTER U
+10293 ; [.4C2A.0020.0002] # LYCIAN LETTER P
+10294 ; [.4C2B.0020.0002] # LYCIAN LETTER KK
+10295 ; [.4C2C.0020.0002] # LYCIAN LETTER R
+10296 ; [.4C2D.0020.0002] # LYCIAN LETTER S
+10297 ; [.4C2E.0020.0002] # LYCIAN LETTER T
+10298 ; [.4C2F.0020.0002] # LYCIAN LETTER TT
+10299 ; [.4C30.0020.0002] # LYCIAN LETTER AN
+1029A ; [.4C31.0020.0002] # LYCIAN LETTER EN
+1029B ; [.4C32.0020.0002] # LYCIAN LETTER H
+1029C ; [.4C33.0020.0002] # LYCIAN LETTER X
+102A0 ; [.4C34.0020.0002] # CARIAN LETTER A
+102A1 ; [.4C35.0020.0002] # CARIAN LETTER P2
+102A2 ; [.4C36.0020.0002] # CARIAN LETTER D
+102A3 ; [.4C37.0020.0002] # CARIAN LETTER L
+102A4 ; [.4C38.0020.0002] # CARIAN LETTER UUU
+102A5 ; [.4C39.0020.0002] # CARIAN LETTER R
+102A6 ; [.4C3A.0020.0002] # CARIAN LETTER LD
+102A7 ; [.4C3B.0020.0002] # CARIAN LETTER A2
+102A8 ; [.4C3C.0020.0002] # CARIAN LETTER Q
+102A9 ; [.4C3D.0020.0002] # CARIAN LETTER B
+102AA ; [.4C3E.0020.0002] # CARIAN LETTER M
+102AB ; [.4C3F.0020.0002] # CARIAN LETTER O
+102AC ; [.4C40.0020.0002] # CARIAN LETTER D2
+102AD ; [.4C41.0020.0002] # CARIAN LETTER T
+102AE ; [.4C42.0020.0002] # CARIAN LETTER SH
+102AF ; [.4C43.0020.0002] # CARIAN LETTER SH2
+102B0 ; [.4C44.0020.0002] # CARIAN LETTER S
+102B1 ; [.4C45.0020.0002] # CARIAN LETTER C-18
+102B2 ; [.4C46.0020.0002] # CARIAN LETTER U
+102B3 ; [.4C47.0020.0002] # CARIAN LETTER NN
+102B4 ; [.4C48.0020.0002] # CARIAN LETTER X
+102B5 ; [.4C49.0020.0002] # CARIAN LETTER N
+102B6 ; [.4C4A.0020.0002] # CARIAN LETTER TT2
+102B7 ; [.4C4B.0020.0002] # CARIAN LETTER P
+102B8 ; [.4C4C.0020.0002] # CARIAN LETTER SS
+102B9 ; [.4C4D.0020.0002] # CARIAN LETTER I
+102BA ; [.4C4E.0020.0002] # CARIAN LETTER E
+102BB ; [.4C4F.0020.0002] # CARIAN LETTER UUUU
+102BC ; [.4C50.0020.0002] # CARIAN LETTER K
+102BD ; [.4C51.0020.0002] # CARIAN LETTER K2
+102BE ; [.4C52.0020.0002] # CARIAN LETTER ND
+102BF ; [.4C53.0020.0002] # CARIAN LETTER UU
+102C0 ; [.4C54.0020.0002] # CARIAN LETTER G
+102C1 ; [.4C55.0020.0002] # CARIAN LETTER G2
+102C2 ; [.4C56.0020.0002] # CARIAN LETTER ST
+102C3 ; [.4C57.0020.0002] # CARIAN LETTER ST2
+102C4 ; [.4C58.0020.0002] # CARIAN LETTER NG
+102C5 ; [.4C59.0020.0002] # CARIAN LETTER II
+102C6 ; [.4C5A.0020.0002] # CARIAN LETTER C-39
+102C7 ; [.4C5B.0020.0002] # CARIAN LETTER TT
+102C8 ; [.4C5C.0020.0002] # CARIAN LETTER UUU2
+102C9 ; [.4C5D.0020.0002] # CARIAN LETTER RR
+102CA ; [.4C5E.0020.0002] # CARIAN LETTER MB
+102CB ; [.4C5F.0020.0002] # CARIAN LETTER MB2
+102CC ; [.4C60.0020.0002] # CARIAN LETTER MB3
+102CD ; [.4C61.0020.0002] # CARIAN LETTER MB4
+102CE ; [.4C62.0020.0002] # CARIAN LETTER LD2
+102CF ; [.4C63.0020.0002] # CARIAN LETTER E2
+102D0 ; [.4C64.0020.0002] # CARIAN LETTER UUU3
+10920 ; [.4C65.0020.0002] # LYDIAN LETTER A
+10921 ; [.4C66.0020.0002] # LYDIAN LETTER B
+10922 ; [.4C67.0020.0002] # LYDIAN LETTER G
+10923 ; [.4C68.0020.0002] # LYDIAN LETTER D
+10924 ; [.4C69.0020.0002] # LYDIAN LETTER E
+10925 ; [.4C6A.0020.0002] # LYDIAN LETTER V
+10926 ; [.4C6B.0020.0002] # LYDIAN LETTER I
+10927 ; [.4C6C.0020.0002] # LYDIAN LETTER Y
+10928 ; [.4C6D.0020.0002] # LYDIAN LETTER K
+10929 ; [.4C6E.0020.0002] # LYDIAN LETTER L
+1092A ; [.4C6F.0020.0002] # LYDIAN LETTER M
+1092B ; [.4C70.0020.0002] # LYDIAN LETTER N
+1092C ; [.4C71.0020.0002] # LYDIAN LETTER O
+1092D ; [.4C72.0020.0002] # LYDIAN LETTER R
+1092E ; [.4C73.0020.0002] # LYDIAN LETTER SS
+1092F ; [.4C74.0020.0002] # LYDIAN LETTER T
+10930 ; [.4C75.0020.0002] # LYDIAN LETTER U
+10931 ; [.4C76.0020.0002] # LYDIAN LETTER F
+10932 ; [.4C77.0020.0002] # LYDIAN LETTER Q
+10933 ; [.4C78.0020.0002] # LYDIAN LETTER S
+10934 ; [.4C79.0020.0002] # LYDIAN LETTER TT
+10935 ; [.4C7A.0020.0002] # LYDIAN LETTER AN
+10936 ; [.4C7B.0020.0002] # LYDIAN LETTER EN
+10937 ; [.4C7C.0020.0002] # LYDIAN LETTER LY
+10938 ; [.4C7D.0020.0002] # LYDIAN LETTER NN
+10939 ; [.4C7E.0020.0002] # LYDIAN LETTER C
+10300 ; [.4C7F.0020.0002] # OLD ITALIC LETTER A
+10301 ; [.4C80.0020.0002] # OLD ITALIC LETTER BE
+10302 ; [.4C81.0020.0002] # OLD ITALIC LETTER KE
+10303 ; [.4C82.0020.0002] # OLD ITALIC LETTER DE
+10304 ; [.4C83.0020.0002] # OLD ITALIC LETTER E
+10305 ; [.4C84.0020.0002] # OLD ITALIC LETTER VE
+10306 ; [.4C85.0020.0002] # OLD ITALIC LETTER ZE
+10307 ; [.4C86.0020.0002] # OLD ITALIC LETTER HE
+10308 ; [.4C87.0020.0002] # OLD ITALIC LETTER THE
+10309 ; [.4C88.0020.0002] # OLD ITALIC LETTER I
+1030A ; [.4C89.0020.0002] # OLD ITALIC LETTER KA
+1030B ; [.4C8A.0020.0002] # OLD ITALIC LETTER EL
+1030C ; [.4C8B.0020.0002] # OLD ITALIC LETTER EM
+1030D ; [.4C8C.0020.0002] # OLD ITALIC LETTER EN
+1030E ; [.4C8D.0020.0002] # OLD ITALIC LETTER ESH
+1031F ; [.4C8E.0020.0002] # OLD ITALIC LETTER ESS
+1030F ; [.4C8F.0020.0002] # OLD ITALIC LETTER O
+10310 ; [.4C90.0020.0002] # OLD ITALIC LETTER PE
+10311 ; [.4C91.0020.0002] # OLD ITALIC LETTER SHE
+10312 ; [.4C92.0020.0002] # OLD ITALIC LETTER KU
+10313 ; [.4C93.0020.0002] # OLD ITALIC LETTER ER
+10314 ; [.4C94.0020.0002] # OLD ITALIC LETTER ES
+10315 ; [.4C95.0020.0002] # OLD ITALIC LETTER TE
+10316 ; [.4C96.0020.0002] # OLD ITALIC LETTER U
+10317 ; [.4C97.0020.0002] # OLD ITALIC LETTER EKS
+10318 ; [.4C98.0020.0002] # OLD ITALIC LETTER PHE
+10319 ; [.4C99.0020.0002] # OLD ITALIC LETTER KHE
+1031A ; [.4C9A.0020.0002] # OLD ITALIC LETTER EF
+1031B ; [.4C9B.0020.0002] # OLD ITALIC LETTER ERS
+1031C ; [.4C9C.0020.0002] # OLD ITALIC LETTER CHE
+1031D ; [.4C9D.0020.0002] # OLD ITALIC LETTER II
+1031E ; [.4C9E.0020.0002] # OLD ITALIC LETTER UU
+1032D ; [.4C9F.0020.0002] # OLD ITALIC LETTER YE
+1032E ; [.4CA0.0020.0002] # OLD ITALIC LETTER NORTHERN TSE
+1032F ; [.4CA1.0020.0002] # OLD ITALIC LETTER SOUTHERN TSE
+10330 ; [.4CA2.0020.0002] # GOTHIC LETTER AHSA
+10331 ; [.4CA3.0020.0002] # GOTHIC LETTER BAIRKAN
+10332 ; [.4CA4.0020.0002] # GOTHIC LETTER GIBA
+10333 ; [.4CA5.0020.0002] # GOTHIC LETTER DAGS
+10334 ; [.4CA6.0020.0002] # GOTHIC LETTER AIHVUS
+10335 ; [.4CA7.0020.0002] # GOTHIC LETTER QAIRTHRA
+10336 ; [.4CA8.0020.0002] # GOTHIC LETTER IUJA
+10337 ; [.4CA9.0020.0002] # GOTHIC LETTER HAGL
+10338 ; [.4CAA.0020.0002] # GOTHIC LETTER THIUTH
+10339 ; [.4CAB.0020.0002] # GOTHIC LETTER EIS
+1033A ; [.4CAC.0020.0002] # GOTHIC LETTER KUSMA
+1033B ; [.4CAD.0020.0002] # GOTHIC LETTER LAGUS
+1033C ; [.4CAE.0020.0002] # GOTHIC LETTER MANNA
+1033D ; [.4CAF.0020.0002] # GOTHIC LETTER NAUTHS
+1033E ; [.4CB0.0020.0002] # GOTHIC LETTER JER
+1033F ; [.4CB1.0020.0002] # GOTHIC LETTER URUS
+10340 ; [.4CB2.0020.0002] # GOTHIC LETTER PAIRTHRA
+10341 ; [.4CB3.0020.0002] # GOTHIC LETTER NINETY
+10342 ; [.4CB4.0020.0002] # GOTHIC LETTER RAIDA
+10343 ; [.4CB5.0020.0002] # GOTHIC LETTER SAUIL
+10344 ; [.4CB6.0020.0002] # GOTHIC LETTER TEIWS
+10345 ; [.4CB7.0020.0002] # GOTHIC LETTER WINJA
+10346 ; [.4CB8.0020.0002] # GOTHIC LETTER FAIHU
+10347 ; [.4CB9.0020.0002] # GOTHIC LETTER IGGWS
+10348 ; [.4CBA.0020.0002] # GOTHIC LETTER HWAIR
+10349 ; [.4CBB.0020.0002] # GOTHIC LETTER OTHAL
+1034A ; [.4CBC.0020.0002] # GOTHIC LETTER NINE HUNDRED
+10428 ; [.4CBD.0020.0002] # DESERET SMALL LETTER LONG I
+10400 ; [.4CBD.0020.0008] # DESERET CAPITAL LETTER LONG I
+10429 ; [.4CBE.0020.0002] # DESERET SMALL LETTER LONG E
+10401 ; [.4CBE.0020.0008] # DESERET CAPITAL LETTER LONG E
+1042A ; [.4CBF.0020.0002] # DESERET SMALL LETTER LONG A
+10402 ; [.4CBF.0020.0008] # DESERET CAPITAL LETTER LONG A
+1042B ; [.4CC0.0020.0002] # DESERET SMALL LETTER LONG AH
+10403 ; [.4CC0.0020.0008] # DESERET CAPITAL LETTER LONG AH
+1042C ; [.4CC1.0020.0002] # DESERET SMALL LETTER LONG O
+10404 ; [.4CC1.0020.0008] # DESERET CAPITAL LETTER LONG O
+1042D ; [.4CC2.0020.0002] # DESERET SMALL LETTER LONG OO
+10405 ; [.4CC2.0020.0008] # DESERET CAPITAL LETTER LONG OO
+1042E ; [.4CC3.0020.0002] # DESERET SMALL LETTER SHORT I
+10406 ; [.4CC3.0020.0008] # DESERET CAPITAL LETTER SHORT I
+1042F ; [.4CC4.0020.0002] # DESERET SMALL LETTER SHORT E
+10407 ; [.4CC4.0020.0008] # DESERET CAPITAL LETTER SHORT E
+10430 ; [.4CC5.0020.0002] # DESERET SMALL LETTER SHORT A
+10408 ; [.4CC5.0020.0008] # DESERET CAPITAL LETTER SHORT A
+10431 ; [.4CC6.0020.0002] # DESERET SMALL LETTER SHORT AH
+10409 ; [.4CC6.0020.0008] # DESERET CAPITAL LETTER SHORT AH
+10432 ; [.4CC7.0020.0002] # DESERET SMALL LETTER SHORT O
+1040A ; [.4CC7.0020.0008] # DESERET CAPITAL LETTER SHORT O
+10433 ; [.4CC8.0020.0002] # DESERET SMALL LETTER SHORT OO
+1040B ; [.4CC8.0020.0008] # DESERET CAPITAL LETTER SHORT OO
+10434 ; [.4CC9.0020.0002] # DESERET SMALL LETTER AY
+1040C ; [.4CC9.0020.0008] # DESERET CAPITAL LETTER AY
+10435 ; [.4CCA.0020.0002] # DESERET SMALL LETTER OW
+1040D ; [.4CCA.0020.0008] # DESERET CAPITAL LETTER OW
+10436 ; [.4CCB.0020.0002] # DESERET SMALL LETTER WU
+1040E ; [.4CCB.0020.0008] # DESERET CAPITAL LETTER WU
+10437 ; [.4CCC.0020.0002] # DESERET SMALL LETTER YEE
+1040F ; [.4CCC.0020.0008] # DESERET CAPITAL LETTER YEE
+10438 ; [.4CCD.0020.0002] # DESERET SMALL LETTER H
+10410 ; [.4CCD.0020.0008] # DESERET CAPITAL LETTER H
+10439 ; [.4CCE.0020.0002] # DESERET SMALL LETTER PEE
+10411 ; [.4CCE.0020.0008] # DESERET CAPITAL LETTER PEE
+1043A ; [.4CCF.0020.0002] # DESERET SMALL LETTER BEE
+10412 ; [.4CCF.0020.0008] # DESERET CAPITAL LETTER BEE
+1043B ; [.4CD0.0020.0002] # DESERET SMALL LETTER TEE
+10413 ; [.4CD0.0020.0008] # DESERET CAPITAL LETTER TEE
+1043C ; [.4CD1.0020.0002] # DESERET SMALL LETTER DEE
+10414 ; [.4CD1.0020.0008] # DESERET CAPITAL LETTER DEE
+1043D ; [.4CD2.0020.0002] # DESERET SMALL LETTER CHEE
+10415 ; [.4CD2.0020.0008] # DESERET CAPITAL LETTER CHEE
+1043E ; [.4CD3.0020.0002] # DESERET SMALL LETTER JEE
+10416 ; [.4CD3.0020.0008] # DESERET CAPITAL LETTER JEE
+1043F ; [.4CD4.0020.0002] # DESERET SMALL LETTER KAY
+10417 ; [.4CD4.0020.0008] # DESERET CAPITAL LETTER KAY
+10440 ; [.4CD5.0020.0002] # DESERET SMALL LETTER GAY
+10418 ; [.4CD5.0020.0008] # DESERET CAPITAL LETTER GAY
+10441 ; [.4CD6.0020.0002] # DESERET SMALL LETTER EF
+10419 ; [.4CD6.0020.0008] # DESERET CAPITAL LETTER EF
+10442 ; [.4CD7.0020.0002] # DESERET SMALL LETTER VEE
+1041A ; [.4CD7.0020.0008] # DESERET CAPITAL LETTER VEE
+10443 ; [.4CD8.0020.0002] # DESERET SMALL LETTER ETH
+1041B ; [.4CD8.0020.0008] # DESERET CAPITAL LETTER ETH
+10444 ; [.4CD9.0020.0002] # DESERET SMALL LETTER THEE
+1041C ; [.4CD9.0020.0008] # DESERET CAPITAL LETTER THEE
+10445 ; [.4CDA.0020.0002] # DESERET SMALL LETTER ES
+1041D ; [.4CDA.0020.0008] # DESERET CAPITAL LETTER ES
+10446 ; [.4CDB.0020.0002] # DESERET SMALL LETTER ZEE
+1041E ; [.4CDB.0020.0008] # DESERET CAPITAL LETTER ZEE
+10447 ; [.4CDC.0020.0002] # DESERET SMALL LETTER ESH
+1041F ; [.4CDC.0020.0008] # DESERET CAPITAL LETTER ESH
+10448 ; [.4CDD.0020.0002] # DESERET SMALL LETTER ZHEE
+10420 ; [.4CDD.0020.0008] # DESERET CAPITAL LETTER ZHEE
+10449 ; [.4CDE.0020.0002] # DESERET SMALL LETTER ER
+10421 ; [.4CDE.0020.0008] # DESERET CAPITAL LETTER ER
+1044A ; [.4CDF.0020.0002] # DESERET SMALL LETTER EL
+10422 ; [.4CDF.0020.0008] # DESERET CAPITAL LETTER EL
+1044B ; [.4CE0.0020.0002] # DESERET SMALL LETTER EM
+10423 ; [.4CE0.0020.0008] # DESERET CAPITAL LETTER EM
+1044C ; [.4CE1.0020.0002] # DESERET SMALL LETTER EN
+10424 ; [.4CE1.0020.0008] # DESERET CAPITAL LETTER EN
+1044D ; [.4CE2.0020.0002] # DESERET SMALL LETTER ENG
+10425 ; [.4CE2.0020.0008] # DESERET CAPITAL LETTER ENG
+1044E ; [.4CE3.0020.0002] # DESERET SMALL LETTER OI
+10426 ; [.4CE3.0020.0008] # DESERET CAPITAL LETTER OI
+1044F ; [.4CE4.0020.0002] # DESERET SMALL LETTER EW
+10427 ; [.4CE4.0020.0008] # DESERET CAPITAL LETTER EW
+10450 ; [.4CE5.0020.0002] # SHAVIAN LETTER PEEP
+10451 ; [.4CE6.0020.0002] # SHAVIAN LETTER TOT
+10452 ; [.4CE7.0020.0002] # SHAVIAN LETTER KICK
+10453 ; [.4CE8.0020.0002] # SHAVIAN LETTER FEE
+10454 ; [.4CE9.0020.0002] # SHAVIAN LETTER THIGH
+10455 ; [.4CEA.0020.0002] # SHAVIAN LETTER SO
+10456 ; [.4CEB.0020.0002] # SHAVIAN LETTER SURE
+10457 ; [.4CEC.0020.0002] # SHAVIAN LETTER CHURCH
+10458 ; [.4CED.0020.0002] # SHAVIAN LETTER YEA
+10459 ; [.4CEE.0020.0002] # SHAVIAN LETTER HUNG
+1045A ; [.4CEF.0020.0002] # SHAVIAN LETTER BIB
+1045B ; [.4CF0.0020.0002] # SHAVIAN LETTER DEAD
+1045C ; [.4CF1.0020.0002] # SHAVIAN LETTER GAG
+1045D ; [.4CF2.0020.0002] # SHAVIAN LETTER VOW
+1045E ; [.4CF3.0020.0002] # SHAVIAN LETTER THEY
+1045F ; [.4CF4.0020.0002] # SHAVIAN LETTER ZOO
+10460 ; [.4CF5.0020.0002] # SHAVIAN LETTER MEASURE
+10461 ; [.4CF6.0020.0002] # SHAVIAN LETTER JUDGE
+10462 ; [.4CF7.0020.0002] # SHAVIAN LETTER WOE
+10463 ; [.4CF8.0020.0002] # SHAVIAN LETTER HA-HA
+10464 ; [.4CF9.0020.0002] # SHAVIAN LETTER LOLL
+10465 ; [.4CFA.0020.0002] # SHAVIAN LETTER MIME
+10466 ; [.4CFB.0020.0002] # SHAVIAN LETTER IF
+10467 ; [.4CFC.0020.0002] # SHAVIAN LETTER EGG
+10468 ; [.4CFD.0020.0002] # SHAVIAN LETTER ASH
+10469 ; [.4CFE.0020.0002] # SHAVIAN LETTER ADO
+1046A ; [.4CFF.0020.0002] # SHAVIAN LETTER ON
+1046B ; [.4D00.0020.0002] # SHAVIAN LETTER WOOL
+1046C ; [.4D01.0020.0002] # SHAVIAN LETTER OUT
+1046D ; [.4D02.0020.0002] # SHAVIAN LETTER AH
+1046E ; [.4D03.0020.0002] # SHAVIAN LETTER ROAR
+1046F ; [.4D04.0020.0002] # SHAVIAN LETTER NUN
+10470 ; [.4D05.0020.0002] # SHAVIAN LETTER EAT
+10471 ; [.4D06.0020.0002] # SHAVIAN LETTER AGE
+10472 ; [.4D07.0020.0002] # SHAVIAN LETTER ICE
+10473 ; [.4D08.0020.0002] # SHAVIAN LETTER UP
+10474 ; [.4D09.0020.0002] # SHAVIAN LETTER OAK
+10475 ; [.4D0A.0020.0002] # SHAVIAN LETTER OOZE
+10476 ; [.4D0B.0020.0002] # SHAVIAN LETTER OIL
+10477 ; [.4D0C.0020.0002] # SHAVIAN LETTER AWE
+10478 ; [.4D0D.0020.0002] # SHAVIAN LETTER ARE
+10479 ; [.4D0E.0020.0002] # SHAVIAN LETTER OR
+1047A ; [.4D0F.0020.0002] # SHAVIAN LETTER AIR
+1047B ; [.4D10.0020.0002] # SHAVIAN LETTER ERR
+1047C ; [.4D11.0020.0002] # SHAVIAN LETTER ARRAY
+1047D ; [.4D12.0020.0002] # SHAVIAN LETTER EAR
+1047E ; [.4D13.0020.0002] # SHAVIAN LETTER IAN
+1047F ; [.4D14.0020.0002] # SHAVIAN LETTER YEW
+1BC00 ; [.4D15.0020.0002] # DUPLOYAN LETTER H
+1BC01 ; [.4D16.0020.0002] # DUPLOYAN LETTER X
+1BC02 ; [.4D17.0020.0002] # DUPLOYAN LETTER P
+1BC03 ; [.4D18.0020.0002] # DUPLOYAN LETTER T
+1BC04 ; [.4D19.0020.0002] # DUPLOYAN LETTER F
+1BC05 ; [.4D1A.0020.0002] # DUPLOYAN LETTER K
+1BC06 ; [.4D1B.0020.0002] # DUPLOYAN LETTER L
+1BC07 ; [.4D1C.0020.0002] # DUPLOYAN LETTER B
+1BC08 ; [.4D1D.0020.0002] # DUPLOYAN LETTER D
+1BC09 ; [.4D1E.0020.0002] # DUPLOYAN LETTER V
+1BC0A ; [.4D1F.0020.0002] # DUPLOYAN LETTER G
+1BC0B ; [.4D20.0020.0002] # DUPLOYAN LETTER R
+1BC0C ; [.4D21.0020.0002] # DUPLOYAN LETTER P N
+1BC0D ; [.4D22.0020.0002] # DUPLOYAN LETTER D S
+1BC0E ; [.4D23.0020.0002] # DUPLOYAN LETTER F N
+1BC0F ; [.4D24.0020.0002] # DUPLOYAN LETTER K M
+1BC10 ; [.4D25.0020.0002] # DUPLOYAN LETTER R S
+1BC11 ; [.4D26.0020.0002] # DUPLOYAN LETTER TH
+1BC12 ; [.4D27.0020.0002] # DUPLOYAN LETTER SLOAN DH
+1BC13 ; [.4D28.0020.0002] # DUPLOYAN LETTER DH
+1BC14 ; [.4D29.0020.0002] # DUPLOYAN LETTER KK
+1BC15 ; [.4D2A.0020.0002] # DUPLOYAN LETTER SLOAN J
+1BC16 ; [.4D2B.0020.0002] # DUPLOYAN LETTER HL
+1BC17 ; [.4D2C.0020.0002] # DUPLOYAN LETTER LH
+1BC18 ; [.4D2D.0020.0002] # DUPLOYAN LETTER RH
+1BC19 ; [.4D2E.0020.0002] # DUPLOYAN LETTER M
+1BC1A ; [.4D2F.0020.0002] # DUPLOYAN LETTER N
+1BC1B ; [.4D30.0020.0002] # DUPLOYAN LETTER J
+1BC1C ; [.4D31.0020.0002] # DUPLOYAN LETTER S
+1BC1D ; [.4D32.0020.0002] # DUPLOYAN LETTER M N
+1BC1E ; [.4D33.0020.0002] # DUPLOYAN LETTER N M
+1BC1F ; [.4D34.0020.0002] # DUPLOYAN LETTER J M
+1BC20 ; [.4D35.0020.0002] # DUPLOYAN LETTER S J
+1BC21 ; [.4D36.0020.0002] # DUPLOYAN LETTER M WITH DOT
+1BC22 ; [.4D37.0020.0002] # DUPLOYAN LETTER N WITH DOT
+1BC23 ; [.4D38.0020.0002] # DUPLOYAN LETTER J WITH DOT
+1BC24 ; [.4D39.0020.0002] # DUPLOYAN LETTER J WITH DOTS INSIDE AND ABOVE
+1BC25 ; [.4D3A.0020.0002] # DUPLOYAN LETTER S WITH DOT
+1BC26 ; [.4D3B.0020.0002] # DUPLOYAN LETTER S WITH DOT BELOW
+1BC27 ; [.4D3C.0020.0002] # DUPLOYAN LETTER M S
+1BC28 ; [.4D3D.0020.0002] # DUPLOYAN LETTER N S
+1BC29 ; [.4D3E.0020.0002] # DUPLOYAN LETTER J S
+1BC2A ; [.4D3F.0020.0002] # DUPLOYAN LETTER S S
+1BC2B ; [.4D40.0020.0002] # DUPLOYAN LETTER M N S
+1BC2C ; [.4D41.0020.0002] # DUPLOYAN LETTER N M S
+1BC2D ; [.4D42.0020.0002] # DUPLOYAN LETTER J M S
+1BC2E ; [.4D43.0020.0002] # DUPLOYAN LETTER S J S
+1BC2F ; [.4D44.0020.0002] # DUPLOYAN LETTER J S WITH DOT
+1BC30 ; [.4D45.0020.0002] # DUPLOYAN LETTER J N
+1BC31 ; [.4D46.0020.0002] # DUPLOYAN LETTER J N S
+1BC32 ; [.4D47.0020.0002] # DUPLOYAN LETTER S T
+1BC33 ; [.4D48.0020.0002] # DUPLOYAN LETTER S T R
+1BC34 ; [.4D49.0020.0002] # DUPLOYAN LETTER S P
+1BC35 ; [.4D4A.0020.0002] # DUPLOYAN LETTER S P R
+1BC36 ; [.4D4B.0020.0002] # DUPLOYAN LETTER T S
+1BC37 ; [.4D4C.0020.0002] # DUPLOYAN LETTER T R S
+1BC38 ; [.4D4D.0020.0002] # DUPLOYAN LETTER W
+1BC39 ; [.4D4E.0020.0002] # DUPLOYAN LETTER WH
+1BC3A ; [.4D4F.0020.0002] # DUPLOYAN LETTER W R
+1BC3B ; [.4D50.0020.0002] # DUPLOYAN LETTER S N
+1BC3C ; [.4D51.0020.0002] # DUPLOYAN LETTER S M
+1BC3D ; [.4D52.0020.0002] # DUPLOYAN LETTER K R S
+1BC3E ; [.4D53.0020.0002] # DUPLOYAN LETTER G R S
+1BC3F ; [.4D54.0020.0002] # DUPLOYAN LETTER S K
+1BC40 ; [.4D55.0020.0002] # DUPLOYAN LETTER S K R
+1BC41 ; [.4D56.0020.0002] # DUPLOYAN LETTER A
+1BC42 ; [.4D57.0020.0002] # DUPLOYAN LETTER SLOAN OW
+1BC43 ; [.4D58.0020.0002] # DUPLOYAN LETTER OA
+1BC44 ; [.4D59.0020.0002] # DUPLOYAN LETTER O
+1BC45 ; [.4D5A.0020.0002] # DUPLOYAN LETTER AOU
+1BC46 ; [.4D5B.0020.0002] # DUPLOYAN LETTER I
+1BC47 ; [.4D5C.0020.0002] # DUPLOYAN LETTER E
+1BC48 ; [.4D5D.0020.0002] # DUPLOYAN LETTER IE
+1BC49 ; [.4D5E.0020.0002] # DUPLOYAN LETTER SHORT I
+1BC4A ; [.4D5F.0020.0002] # DUPLOYAN LETTER UI
+1BC4B ; [.4D60.0020.0002] # DUPLOYAN LETTER EE
+1BC4C ; [.4D61.0020.0002] # DUPLOYAN LETTER SLOAN EH
+1BC4D ; [.4D62.0020.0002] # DUPLOYAN LETTER ROMANIAN I
+1BC4E ; [.4D63.0020.0002] # DUPLOYAN LETTER SLOAN EE
+1BC4F ; [.4D64.0020.0002] # DUPLOYAN LETTER LONG I
+1BC50 ; [.4D65.0020.0002] # DUPLOYAN LETTER YE
+1BC51 ; [.4D66.0020.0002] # DUPLOYAN LETTER U
+1BC52 ; [.4D67.0020.0002] # DUPLOYAN LETTER EU
+1BC53 ; [.4D68.0020.0002] # DUPLOYAN LETTER XW
+1BC54 ; [.4D69.0020.0002] # DUPLOYAN LETTER U N
+1BC55 ; [.4D6A.0020.0002] # DUPLOYAN LETTER LONG U
+1BC56 ; [.4D6B.0020.0002] # DUPLOYAN LETTER ROMANIAN U
+1BC57 ; [.4D6C.0020.0002] # DUPLOYAN LETTER UH
+1BC58 ; [.4D6D.0020.0002] # DUPLOYAN LETTER SLOAN U
+1BC59 ; [.4D6E.0020.0002] # DUPLOYAN LETTER OOH
+1BC5A ; [.4D6F.0020.0002] # DUPLOYAN LETTER OW
+1BC5B ; [.4D70.0020.0002] # DUPLOYAN LETTER OU
+1BC5C ; [.4D71.0020.0002] # DUPLOYAN LETTER WA
+1BC5D ; [.4D72.0020.0002] # DUPLOYAN LETTER WO
+1BC5E ; [.4D73.0020.0002] # DUPLOYAN LETTER WI
+1BC5F ; [.4D74.0020.0002] # DUPLOYAN LETTER WEI
+1BC60 ; [.4D75.0020.0002] # DUPLOYAN LETTER WOW
+1BC61 ; [.4D76.0020.0002] # DUPLOYAN LETTER NASAL U
+1BC62 ; [.4D77.0020.0002] # DUPLOYAN LETTER NASAL O
+1BC63 ; [.4D78.0020.0002] # DUPLOYAN LETTER NASAL I
+1BC64 ; [.4D79.0020.0002] # DUPLOYAN LETTER NASAL A
+1BC65 ; [.4D7A.0020.0002] # DUPLOYAN LETTER PERNIN AN
+1BC66 ; [.4D7B.0020.0002] # DUPLOYAN LETTER PERNIN AM
+1BC67 ; [.4D7C.0020.0002] # DUPLOYAN LETTER SLOAN EN
+1BC68 ; [.4D7D.0020.0002] # DUPLOYAN LETTER SLOAN AN
+1BC69 ; [.4D7E.0020.0002] # DUPLOYAN LETTER SLOAN ON
+1BC6A ; [.4D7F.0020.0002] # DUPLOYAN LETTER VOCALIC M
+1BC70 ; [.4D80.0020.0002] # DUPLOYAN AFFIX LEFT HORIZONTAL SECANT
+1BC71 ; [.4D81.0020.0002] # DUPLOYAN AFFIX MID HORIZONTAL SECANT
+1BC72 ; [.4D82.0020.0002] # DUPLOYAN AFFIX RIGHT HORIZONTAL SECANT
+1BC73 ; [.4D83.0020.0002] # DUPLOYAN AFFIX LOW VERTICAL SECANT
+1BC74 ; [.4D84.0020.0002] # DUPLOYAN AFFIX MID VERTICAL SECANT
+1BC75 ; [.4D85.0020.0002] # DUPLOYAN AFFIX HIGH VERTICAL SECANT
+1BC76 ; [.4D86.0020.0002] # DUPLOYAN AFFIX ATTACHED SECANT
+1BC77 ; [.4D87.0020.0002] # DUPLOYAN AFFIX ATTACHED LEFT-TO-RIGHT SECANT
+1BC78 ; [.4D88.0020.0002] # DUPLOYAN AFFIX ATTACHED TANGENT
+1BC79 ; [.4D89.0020.0002] # DUPLOYAN AFFIX ATTACHED TAIL
+1BC7A ; [.4D8A.0020.0002] # DUPLOYAN AFFIX ATTACHED E HOOK
+1BC7B ; [.4D8B.0020.0002] # DUPLOYAN AFFIX ATTACHED I HOOK
+1BC7C ; [.4D8C.0020.0002] # DUPLOYAN AFFIX ATTACHED TANGENT HOOK
+1BC80 ; [.4D8D.0020.0002] # DUPLOYAN AFFIX HIGH ACUTE
+1BC81 ; [.4D8E.0020.0002] # DUPLOYAN AFFIX HIGH TIGHT ACUTE
+1BC82 ; [.4D8F.0020.0002] # DUPLOYAN AFFIX HIGH GRAVE
+1BC83 ; [.4D90.0020.0002] # DUPLOYAN AFFIX HIGH LONG GRAVE
+1BC84 ; [.4D91.0020.0002] # DUPLOYAN AFFIX HIGH DOT
+1BC85 ; [.4D92.0020.0002] # DUPLOYAN AFFIX HIGH CIRCLE
+1BC86 ; [.4D93.0020.0002] # DUPLOYAN AFFIX HIGH LINE
+1BC87 ; [.4D94.0020.0002] # DUPLOYAN AFFIX HIGH WAVE
+1BC88 ; [.4D95.0020.0002] # DUPLOYAN AFFIX HIGH VERTICAL
+1BC90 ; [.4D96.0020.0002] # DUPLOYAN AFFIX LOW ACUTE
+1BC91 ; [.4D97.0020.0002] # DUPLOYAN AFFIX LOW TIGHT ACUTE
+1BC92 ; [.4D98.0020.0002] # DUPLOYAN AFFIX LOW GRAVE
+1BC93 ; [.4D99.0020.0002] # DUPLOYAN AFFIX LOW LONG GRAVE
+1BC94 ; [.4D9A.0020.0002] # DUPLOYAN AFFIX LOW DOT
+1BC95 ; [.4D9B.0020.0002] # DUPLOYAN AFFIX LOW CIRCLE
+1BC96 ; [.4D9C.0020.0002] # DUPLOYAN AFFIX LOW LINE
+1BC97 ; [.4D9D.0020.0002] # DUPLOYAN AFFIX LOW WAVE
+1BC98 ; [.4D9E.0020.0002] # DUPLOYAN AFFIX LOW VERTICAL
+1BC99 ; [.4D9F.0020.0002] # DUPLOYAN AFFIX LOW ARROW
+10480 ; [.4DA0.0020.0002] # OSMANYA LETTER ALEF
+10481 ; [.4DA1.0020.0002] # OSMANYA LETTER BA
+10482 ; [.4DA2.0020.0002] # OSMANYA LETTER TA
+10483 ; [.4DA3.0020.0002] # OSMANYA LETTER JA
+10484 ; [.4DA4.0020.0002] # OSMANYA LETTER XA
+10485 ; [.4DA5.0020.0002] # OSMANYA LETTER KHA
+10486 ; [.4DA6.0020.0002] # OSMANYA LETTER DEEL
+10487 ; [.4DA7.0020.0002] # OSMANYA LETTER RA
+10488 ; [.4DA8.0020.0002] # OSMANYA LETTER SA
+10489 ; [.4DA9.0020.0002] # OSMANYA LETTER SHIIN
+1048A ; [.4DAA.0020.0002] # OSMANYA LETTER DHA
+1048B ; [.4DAB.0020.0002] # OSMANYA LETTER CAYN
+1048C ; [.4DAC.0020.0002] # OSMANYA LETTER GA
+1048D ; [.4DAD.0020.0002] # OSMANYA LETTER FA
+1048E ; [.4DAE.0020.0002] # OSMANYA LETTER QAAF
+1048F ; [.4DAF.0020.0002] # OSMANYA LETTER KAAF
+10490 ; [.4DB0.0020.0002] # OSMANYA LETTER LAAN
+10491 ; [.4DB1.0020.0002] # OSMANYA LETTER MIIN
+10492 ; [.4DB2.0020.0002] # OSMANYA LETTER NUUN
+10493 ; [.4DB3.0020.0002] # OSMANYA LETTER WAW
+10494 ; [.4DB4.0020.0002] # OSMANYA LETTER HA
+10495 ; [.4DB5.0020.0002] # OSMANYA LETTER YA
+10496 ; [.4DB6.0020.0002] # OSMANYA LETTER A
+10497 ; [.4DB7.0020.0002] # OSMANYA LETTER E
+10498 ; [.4DB8.0020.0002] # OSMANYA LETTER I
+10499 ; [.4DB9.0020.0002] # OSMANYA LETTER O
+1049A ; [.4DBA.0020.0002] # OSMANYA LETTER U
+1049B ; [.4DBB.0020.0002] # OSMANYA LETTER AA
+1049C ; [.4DBC.0020.0002] # OSMANYA LETTER EE
+1049D ; [.4DBD.0020.0002] # OSMANYA LETTER OO
+10500 ; [.4DBE.0020.0002] # ELBASAN LETTER A
+10501 ; [.4DBF.0020.0002] # ELBASAN LETTER BE
+10502 ; [.4DC0.0020.0002] # ELBASAN LETTER CE
+10503 ; [.4DC1.0020.0002] # ELBASAN LETTER CHE
+10504 ; [.4DC2.0020.0002] # ELBASAN LETTER DE
+10505 ; [.4DC3.0020.0002] # ELBASAN LETTER NDE
+10506 ; [.4DC4.0020.0002] # ELBASAN LETTER DHE
+10507 ; [.4DC5.0020.0002] # ELBASAN LETTER EI
+10508 ; [.4DC6.0020.0002] # ELBASAN LETTER E
+10509 ; [.4DC7.0020.0002] # ELBASAN LETTER FE
+1050A ; [.4DC8.0020.0002] # ELBASAN LETTER GE
+1050B ; [.4DC9.0020.0002] # ELBASAN LETTER GJE
+1050C ; [.4DCA.0020.0002] # ELBASAN LETTER HE
+1050D ; [.4DCB.0020.0002] # ELBASAN LETTER I
+1050E ; [.4DCC.0020.0002] # ELBASAN LETTER JE
+1050F ; [.4DCD.0020.0002] # ELBASAN LETTER KE
+10510 ; [.4DCE.0020.0002] # ELBASAN LETTER LE
+10511 ; [.4DCF.0020.0002] # ELBASAN LETTER LLE
+10512 ; [.4DD0.0020.0002] # ELBASAN LETTER ME
+10513 ; [.4DD1.0020.0002] # ELBASAN LETTER NE
+10514 ; [.4DD2.0020.0002] # ELBASAN LETTER NA
+10515 ; [.4DD3.0020.0002] # ELBASAN LETTER NJE
+10516 ; [.4DD4.0020.0002] # ELBASAN LETTER O
+10517 ; [.4DD5.0020.0002] # ELBASAN LETTER PE
+10518 ; [.4DD6.0020.0002] # ELBASAN LETTER QE
+10519 ; [.4DD7.0020.0002] # ELBASAN LETTER RE
+1051A ; [.4DD8.0020.0002] # ELBASAN LETTER RRE
+1051B ; [.4DD9.0020.0002] # ELBASAN LETTER SE
+1051C ; [.4DDA.0020.0002] # ELBASAN LETTER SHE
+1051D ; [.4DDB.0020.0002] # ELBASAN LETTER TE
+1051E ; [.4DDC.0020.0002] # ELBASAN LETTER THE
+1051F ; [.4DDD.0020.0002] # ELBASAN LETTER U
+10520 ; [.4DDE.0020.0002] # ELBASAN LETTER VE
+10521 ; [.4DDF.0020.0002] # ELBASAN LETTER XE
+10522 ; [.4DE0.0020.0002] # ELBASAN LETTER Y
+10523 ; [.4DE1.0020.0002] # ELBASAN LETTER ZE
+10524 ; [.4DE2.0020.0002] # ELBASAN LETTER ZHE
+10525 ; [.4DE3.0020.0002] # ELBASAN LETTER GHE
+10526 ; [.4DE4.0020.0002] # ELBASAN LETTER GHAMMA
+10527 ; [.4DE5.0020.0002] # ELBASAN LETTER KHE
+10530 ; [.4DE6.0020.0002] # CAUCASIAN ALBANIAN LETTER ALT
+10531 ; [.4DE7.0020.0002] # CAUCASIAN ALBANIAN LETTER BET
+10532 ; [.4DE8.0020.0002] # CAUCASIAN ALBANIAN LETTER GIM
+10533 ; [.4DE9.0020.0002] # CAUCASIAN ALBANIAN LETTER DAT
+10534 ; [.4DEA.0020.0002] # CAUCASIAN ALBANIAN LETTER EB
+10535 ; [.4DEB.0020.0002] # CAUCASIAN ALBANIAN LETTER ZARL
+10536 ; [.4DEC.0020.0002] # CAUCASIAN ALBANIAN LETTER EYN
+10537 ; [.4DED.0020.0002] # CAUCASIAN ALBANIAN LETTER ZHIL
+10538 ; [.4DEE.0020.0002] # CAUCASIAN ALBANIAN LETTER TAS
+10539 ; [.4DEF.0020.0002] # CAUCASIAN ALBANIAN LETTER CHA
+1053A ; [.4DF0.0020.0002] # CAUCASIAN ALBANIAN LETTER YOWD
+1053B ; [.4DF1.0020.0002] # CAUCASIAN ALBANIAN LETTER ZHA
+1053C ; [.4DF2.0020.0002] # CAUCASIAN ALBANIAN LETTER IRB
+1053D ; [.4DF3.0020.0002] # CAUCASIAN ALBANIAN LETTER SHA
+1053E ; [.4DF4.0020.0002] # CAUCASIAN ALBANIAN LETTER LAN
+1053F ; [.4DF5.0020.0002] # CAUCASIAN ALBANIAN LETTER INYA
+10540 ; [.4DF6.0020.0002] # CAUCASIAN ALBANIAN LETTER XEYN
+10541 ; [.4DF7.0020.0002] # CAUCASIAN ALBANIAN LETTER DYAN
+10542 ; [.4DF8.0020.0002] # CAUCASIAN ALBANIAN LETTER CAR
+10543 ; [.4DF9.0020.0002] # CAUCASIAN ALBANIAN LETTER JHOX
+10544 ; [.4DFA.0020.0002] # CAUCASIAN ALBANIAN LETTER KAR
+10545 ; [.4DFB.0020.0002] # CAUCASIAN ALBANIAN LETTER LYIT
+10546 ; [.4DFC.0020.0002] # CAUCASIAN ALBANIAN LETTER HEYT
+10547 ; [.4DFD.0020.0002] # CAUCASIAN ALBANIAN LETTER QAY
+10548 ; [.4DFE.0020.0002] # CAUCASIAN ALBANIAN LETTER AOR
+10549 ; [.4DFF.0020.0002] # CAUCASIAN ALBANIAN LETTER CHOY
+1054A ; [.4E00.0020.0002] # CAUCASIAN ALBANIAN LETTER CHI
+1054B ; [.4E01.0020.0002] # CAUCASIAN ALBANIAN LETTER CYAY
+1054C ; [.4E02.0020.0002] # CAUCASIAN ALBANIAN LETTER MAQ
+1054D ; [.4E03.0020.0002] # CAUCASIAN ALBANIAN LETTER QAR
+1054E ; [.4E04.0020.0002] # CAUCASIAN ALBANIAN LETTER NOWC
+1054F ; [.4E05.0020.0002] # CAUCASIAN ALBANIAN LETTER DZYAY
+10550 ; [.4E06.0020.0002] # CAUCASIAN ALBANIAN LETTER SHAK
+10551 ; [.4E07.0020.0002] # CAUCASIAN ALBANIAN LETTER JAYN
+10552 ; [.4E08.0020.0002] # CAUCASIAN ALBANIAN LETTER ON
+10553 ; [.4E09.0020.0002] # CAUCASIAN ALBANIAN LETTER TYAY
+10554 ; [.4E0A.0020.0002] # CAUCASIAN ALBANIAN LETTER FAM
+10555 ; [.4E0B.0020.0002] # CAUCASIAN ALBANIAN LETTER DZAY
+10556 ; [.4E0C.0020.0002] # CAUCASIAN ALBANIAN LETTER CHAT
+10557 ; [.4E0D.0020.0002] # CAUCASIAN ALBANIAN LETTER PEN
+10558 ; [.4E0E.0020.0002] # CAUCASIAN ALBANIAN LETTER GHEYS
+10559 ; [.4E0F.0020.0002] # CAUCASIAN ALBANIAN LETTER RAT
+1055A ; [.4E10.0020.0002] # CAUCASIAN ALBANIAN LETTER SEYK
+1055B ; [.4E11.0020.0002] # CAUCASIAN ALBANIAN LETTER VEYZ
+1055C ; [.4E12.0020.0002] # CAUCASIAN ALBANIAN LETTER TIWR
+1055D ; [.4E13.0020.0002] # CAUCASIAN ALBANIAN LETTER SHOY
+1055E ; [.4E14.0020.0002] # CAUCASIAN ALBANIAN LETTER IWN
+1055F ; [.4E15.0020.0002] # CAUCASIAN ALBANIAN LETTER CYAW
+10560 ; [.4E16.0020.0002] # CAUCASIAN ALBANIAN LETTER CAYN
+10561 ; [.4E17.0020.0002] # CAUCASIAN ALBANIAN LETTER YAYD
+10562 ; [.4E18.0020.0002] # CAUCASIAN ALBANIAN LETTER PIWR
+10563 ; [.4E19.0020.0002] # CAUCASIAN ALBANIAN LETTER KIW
+10597 ; [.4E1A.0020.0002] # VITHKUQI SMALL LETTER A
+10570 ; [.4E1A.0020.0008] # VITHKUQI CAPITAL LETTER A
+10598 ; [.4E1B.0020.0002] # VITHKUQI SMALL LETTER BBE
+10571 ; [.4E1B.0020.0008] # VITHKUQI CAPITAL LETTER BBE
+10599 ; [.4E1C.0020.0002] # VITHKUQI SMALL LETTER BE
+10572 ; [.4E1C.0020.0008] # VITHKUQI CAPITAL LETTER BE
+1059A ; [.4E1D.0020.0002] # VITHKUQI SMALL LETTER CE
+10573 ; [.4E1D.0020.0008] # VITHKUQI CAPITAL LETTER CE
+1059B ; [.4E1E.0020.0002] # VITHKUQI SMALL LETTER CHE
+10574 ; [.4E1E.0020.0008] # VITHKUQI CAPITAL LETTER CHE
+1059C ; [.4E1F.0020.0002] # VITHKUQI SMALL LETTER DE
+10575 ; [.4E1F.0020.0008] # VITHKUQI CAPITAL LETTER DE
+1059D ; [.4E20.0020.0002] # VITHKUQI SMALL LETTER DHE
+10576 ; [.4E20.0020.0008] # VITHKUQI CAPITAL LETTER DHE
+1059E ; [.4E21.0020.0002] # VITHKUQI SMALL LETTER EI
+10577 ; [.4E21.0020.0008] # VITHKUQI CAPITAL LETTER EI
+1059F ; [.4E22.0020.0002] # VITHKUQI SMALL LETTER E
+10578 ; [.4E22.0020.0008] # VITHKUQI CAPITAL LETTER E
+105A0 ; [.4E23.0020.0002] # VITHKUQI SMALL LETTER FE
+10579 ; [.4E23.0020.0008] # VITHKUQI CAPITAL LETTER FE
+105A1 ; [.4E24.0020.0002] # VITHKUQI SMALL LETTER GA
+1057A ; [.4E24.0020.0008] # VITHKUQI CAPITAL LETTER GA
+105A3 ; [.4E25.0020.0002] # VITHKUQI SMALL LETTER HA
+1057C ; [.4E25.0020.0008] # VITHKUQI CAPITAL LETTER HA
+105A4 ; [.4E26.0020.0002] # VITHKUQI SMALL LETTER HHA
+1057D ; [.4E26.0020.0008] # VITHKUQI CAPITAL LETTER HHA
+105A5 ; [.4E27.0020.0002] # VITHKUQI SMALL LETTER I
+1057E ; [.4E27.0020.0008] # VITHKUQI CAPITAL LETTER I
+105A6 ; [.4E28.0020.0002] # VITHKUQI SMALL LETTER IJE
+1057F ; [.4E28.0020.0008] # VITHKUQI CAPITAL LETTER IJE
+105A7 ; [.4E29.0020.0002] # VITHKUQI SMALL LETTER JE
+10580 ; [.4E29.0020.0008] # VITHKUQI CAPITAL LETTER JE
+105A8 ; [.4E2A.0020.0002] # VITHKUQI SMALL LETTER KA
+10581 ; [.4E2A.0020.0008] # VITHKUQI CAPITAL LETTER KA
+105A9 ; [.4E2B.0020.0002] # VITHKUQI SMALL LETTER LA
+10582 ; [.4E2B.0020.0008] # VITHKUQI CAPITAL LETTER LA
+105AA ; [.4E2C.0020.0002] # VITHKUQI SMALL LETTER LLA
+10583 ; [.4E2C.0020.0008] # VITHKUQI CAPITAL LETTER LLA
+105AB ; [.4E2D.0020.0002] # VITHKUQI SMALL LETTER ME
+10584 ; [.4E2D.0020.0008] # VITHKUQI CAPITAL LETTER ME
+105AC ; [.4E2E.0020.0002] # VITHKUQI SMALL LETTER NE
+10585 ; [.4E2E.0020.0008] # VITHKUQI CAPITAL LETTER NE
+105AD ; [.4E2F.0020.0002] # VITHKUQI SMALL LETTER NJE
+10586 ; [.4E2F.0020.0008] # VITHKUQI CAPITAL LETTER NJE
+105AE ; [.4E30.0020.0002] # VITHKUQI SMALL LETTER O
+10587 ; [.4E30.0020.0008] # VITHKUQI CAPITAL LETTER O
+105AF ; [.4E31.0020.0002] # VITHKUQI SMALL LETTER PE
+10588 ; [.4E31.0020.0008] # VITHKUQI CAPITAL LETTER PE
+105B0 ; [.4E32.0020.0002] # VITHKUQI SMALL LETTER QA
+10589 ; [.4E32.0020.0008] # VITHKUQI CAPITAL LETTER QA
+105B1 ; [.4E33.0020.0002] # VITHKUQI SMALL LETTER RE
+1058A ; [.4E33.0020.0008] # VITHKUQI CAPITAL LETTER RE
+105B3 ; [.4E34.0020.0002] # VITHKUQI SMALL LETTER SE
+1058C ; [.4E34.0020.0008] # VITHKUQI CAPITAL LETTER SE
+105B4 ; [.4E35.0020.0002] # VITHKUQI SMALL LETTER SHE
+1058D ; [.4E35.0020.0008] # VITHKUQI CAPITAL LETTER SHE
+105B5 ; [.4E36.0020.0002] # VITHKUQI SMALL LETTER TE
+1058E ; [.4E36.0020.0008] # VITHKUQI CAPITAL LETTER TE
+105B6 ; [.4E37.0020.0002] # VITHKUQI SMALL LETTER THE
+1058F ; [.4E37.0020.0008] # VITHKUQI CAPITAL LETTER THE
+105B7 ; [.4E38.0020.0002] # VITHKUQI SMALL LETTER U
+10590 ; [.4E38.0020.0008] # VITHKUQI CAPITAL LETTER U
+105B8 ; [.4E39.0020.0002] # VITHKUQI SMALL LETTER VE
+10591 ; [.4E39.0020.0008] # VITHKUQI CAPITAL LETTER VE
+105B9 ; [.4E3A.0020.0002] # VITHKUQI SMALL LETTER XE
+10592 ; [.4E3A.0020.0008] # VITHKUQI CAPITAL LETTER XE
+105BB ; [.4E3B.0020.0002] # VITHKUQI SMALL LETTER Y
+10594 ; [.4E3B.0020.0008] # VITHKUQI CAPITAL LETTER Y
+105BC ; [.4E3C.0020.0002] # VITHKUQI SMALL LETTER ZE
+10595 ; [.4E3C.0020.0008] # VITHKUQI CAPITAL LETTER ZE
+110D0 ; [.4E3D.0020.0002] # SORA SOMPENG LETTER SAH
+110D1 ; [.4E3E.0020.0002] # SORA SOMPENG LETTER TAH
+110D2 ; [.4E3F.0020.0002] # SORA SOMPENG LETTER BAH
+110D3 ; [.4E40.0020.0002] # SORA SOMPENG LETTER CAH
+110D4 ; [.4E41.0020.0002] # SORA SOMPENG LETTER DAH
+110D5 ; [.4E42.0020.0002] # SORA SOMPENG LETTER GAH
+110D6 ; [.4E43.0020.0002] # SORA SOMPENG LETTER MAH
+110D7 ; [.4E44.0020.0002] # SORA SOMPENG LETTER NGAH
+110D8 ; [.4E45.0020.0002] # SORA SOMPENG LETTER LAH
+110D9 ; [.4E46.0020.0002] # SORA SOMPENG LETTER NAH
+110DA ; [.4E47.0020.0002] # SORA SOMPENG LETTER VAH
+110DB ; [.4E48.0020.0002] # SORA SOMPENG LETTER PAH
+110DC ; [.4E49.0020.0002] # SORA SOMPENG LETTER YAH
+110DD ; [.4E4A.0020.0002] # SORA SOMPENG LETTER RAH
+110DE ; [.4E4B.0020.0002] # SORA SOMPENG LETTER HAH
+110DF ; [.4E4C.0020.0002] # SORA SOMPENG LETTER KAH
+110E0 ; [.4E4D.0020.0002] # SORA SOMPENG LETTER JAH
+110E1 ; [.4E4E.0020.0002] # SORA SOMPENG LETTER NYAH
+110E2 ; [.4E4F.0020.0002] # SORA SOMPENG LETTER AH
+110E3 ; [.4E50.0020.0002] # SORA SOMPENG LETTER EEH
+110E4 ; [.4E51.0020.0002] # SORA SOMPENG LETTER IH
+110E5 ; [.4E52.0020.0002] # SORA SOMPENG LETTER UH
+110E6 ; [.4E53.0020.0002] # SORA SOMPENG LETTER OH
+110E7 ; [.4E54.0020.0002] # SORA SOMPENG LETTER EH
+110E8 ; [.4E55.0020.0002] # SORA SOMPENG LETTER MAE
+16A40 ; [.4E56.0020.0002] # MRO LETTER TA
+16A41 ; [.4E57.0020.0002] # MRO LETTER NGI
+16A42 ; [.4E58.0020.0002] # MRO LETTER YO
+16A43 ; [.4E59.0020.0002] # MRO LETTER MIM
+16A44 ; [.4E5A.0020.0002] # MRO LETTER BA
+16A45 ; [.4E5B.0020.0002] # MRO LETTER DA
+16A46 ; [.4E5C.0020.0002] # MRO LETTER A
+16A47 ; [.4E5D.0020.0002] # MRO LETTER PHI
+16A48 ; [.4E5E.0020.0002] # MRO LETTER KHAI
+16A49 ; [.4E5F.0020.0002] # MRO LETTER HAO
+16A4A ; [.4E60.0020.0002] # MRO LETTER DAI
+16A4B ; [.4E61.0020.0002] # MRO LETTER CHU
+16A4C ; [.4E62.0020.0002] # MRO LETTER KEAAE
+16A4D ; [.4E63.0020.0002] # MRO LETTER OL
+16A4E ; [.4E64.0020.0002] # MRO LETTER MAEM
+16A4F ; [.4E65.0020.0002] # MRO LETTER NIN
+16A50 ; [.4E66.0020.0002] # MRO LETTER PA
+16A51 ; [.4E67.0020.0002] # MRO LETTER OO
+16A52 ; [.4E68.0020.0002] # MRO LETTER O
+16A53 ; [.4E69.0020.0002] # MRO LETTER RO
+16A54 ; [.4E6A.0020.0002] # MRO LETTER SHI
+16A55 ; [.4E6B.0020.0002] # MRO LETTER THEA
+16A56 ; [.4E6C.0020.0002] # MRO LETTER EA
+16A57 ; [.4E6D.0020.0002] # MRO LETTER WA
+16A58 ; [.4E6E.0020.0002] # MRO LETTER E
+16A59 ; [.4E6F.0020.0002] # MRO LETTER KO
+16A5A ; [.4E70.0020.0002] # MRO LETTER LAN
+16A5B ; [.4E71.0020.0002] # MRO LETTER LA
+16A5C ; [.4E72.0020.0002] # MRO LETTER HAI
+16A5D ; [.4E73.0020.0002] # MRO LETTER RI
+16A5E ; [.4E74.0020.0002] # MRO LETTER TEK
+16A70 ; [.4E75.0020.0002] # TANGSA LETTER OZ
+16A71 ; [.4E76.0020.0002] # TANGSA LETTER OC
+16A72 ; [.4E77.0020.0002] # TANGSA LETTER OQ
+16A73 ; [.4E78.0020.0002] # TANGSA LETTER OX
+16A74 ; [.4E79.0020.0002] # TANGSA LETTER AZ
+16A75 ; [.4E7A.0020.0002] # TANGSA LETTER AC
+16A76 ; [.4E7B.0020.0002] # TANGSA LETTER AQ
+16A77 ; [.4E7C.0020.0002] # TANGSA LETTER AX
+16A78 ; [.4E7D.0020.0002] # TANGSA LETTER VZ
+16A79 ; [.4E7E.0020.0002] # TANGSA LETTER VC
+16A7A ; [.4E7F.0020.0002] # TANGSA LETTER VQ
+16A7B ; [.4E80.0020.0002] # TANGSA LETTER VX
+16A7C ; [.4E81.0020.0002] # TANGSA LETTER EZ
+16A7D ; [.4E82.0020.0002] # TANGSA LETTER EC
+16A7E ; [.4E83.0020.0002] # TANGSA LETTER EQ
+16A7F ; [.4E84.0020.0002] # TANGSA LETTER EX
+16A80 ; [.4E85.0020.0002] # TANGSA LETTER IZ
+16A81 ; [.4E86.0020.0002] # TANGSA LETTER IC
+16A82 ; [.4E87.0020.0002] # TANGSA LETTER IQ
+16A83 ; [.4E88.0020.0002] # TANGSA LETTER IX
+16A84 ; [.4E89.0020.0002] # TANGSA LETTER UZ
+16A85 ; [.4E8A.0020.0002] # TANGSA LETTER UC
+16A86 ; [.4E8B.0020.0002] # TANGSA LETTER UQ
+16A87 ; [.4E8C.0020.0002] # TANGSA LETTER UX
+16A88 ; [.4E8D.0020.0002] # TANGSA LETTER AWZ
+16A89 ; [.4E8E.0020.0002] # TANGSA LETTER AWC
+16A8A ; [.4E8F.0020.0002] # TANGSA LETTER AWQ
+16A8B ; [.4E90.0020.0002] # TANGSA LETTER AWX
+16A8C ; [.4E91.0020.0002] # TANGSA LETTER UIZ
+16A8D ; [.4E92.0020.0002] # TANGSA LETTER UIC
+16A8E ; [.4E93.0020.0002] # TANGSA LETTER UIQ
+16A8F ; [.4E94.0020.0002] # TANGSA LETTER UIX
+16A90 ; [.4E95.0020.0002] # TANGSA LETTER FINAL NG
+16A91 ; [.4E96.0020.0002] # TANGSA LETTER LONG UEX
+16A92 ; [.4E97.0020.0002] # TANGSA LETTER SHORT UEZ
+16A93 ; [.4E98.0020.0002] # TANGSA LETTER SHORT AWX
+16A94 ; [.4E99.0020.0002] # TANGSA LETTER UEC
+16A95 ; [.4E9A.0020.0002] # TANGSA LETTER UEZ
+16A96 ; [.4E9B.0020.0002] # TANGSA LETTER UEQ
+16A97 ; [.4E9C.0020.0002] # TANGSA LETTER UEX
+16A98 ; [.4E9D.0020.0002] # TANGSA LETTER UIUZ
+16A99 ; [.4E9E.0020.0002] # TANGSA LETTER UIUC
+16A9A ; [.4E9F.0020.0002] # TANGSA LETTER UIUQ
+16A9B ; [.4EA0.0020.0002] # TANGSA LETTER UIUX
+16A9C ; [.4EA1.0020.0002] # TANGSA LETTER MZ
+16A9D ; [.4EA2.0020.0002] # TANGSA LETTER MC
+16A9E ; [.4EA3.0020.0002] # TANGSA LETTER MQ
+16A9F ; [.4EA4.0020.0002] # TANGSA LETTER MX
+16AA0 ; [.4EA5.0020.0002] # TANGSA LETTER KA
+16AA1 ; [.4EA6.0020.0002] # TANGSA LETTER KHA
+16AA2 ; [.4EA7.0020.0002] # TANGSA LETTER GA
+16AA3 ; [.4EA8.0020.0002] # TANGSA LETTER NGA
+16AA4 ; [.4EA9.0020.0002] # TANGSA LETTER SA
+16AA5 ; [.4EAA.0020.0002] # TANGSA LETTER YA
+16AA6 ; [.4EAB.0020.0002] # TANGSA LETTER WA
+16AA7 ; [.4EAC.0020.0002] # TANGSA LETTER PA
+16AA8 ; [.4EAD.0020.0002] # TANGSA LETTER NYA
+16AA9 ; [.4EAE.0020.0002] # TANGSA LETTER PHA
+16AAA ; [.4EAF.0020.0002] # TANGSA LETTER BA
+16AAB ; [.4EB0.0020.0002] # TANGSA LETTER MA
+16AAC ; [.4EB1.0020.0002] # TANGSA LETTER NA
+16AAD ; [.4EB2.0020.0002] # TANGSA LETTER HA
+16AAE ; [.4EB3.0020.0002] # TANGSA LETTER LA
+16AAF ; [.4EB4.0020.0002] # TANGSA LETTER HTA
+16AB0 ; [.4EB5.0020.0002] # TANGSA LETTER TA
+16AB1 ; [.4EB6.0020.0002] # TANGSA LETTER DA
+16AB2 ; [.4EB7.0020.0002] # TANGSA LETTER RA
+16AB3 ; [.4EB8.0020.0002] # TANGSA LETTER NHA
+16AB4 ; [.4EB9.0020.0002] # TANGSA LETTER SHA
+16AB5 ; [.4EBA.0020.0002] # TANGSA LETTER CA
+16AB6 ; [.4EBB.0020.0002] # TANGSA LETTER TSA
+16AB7 ; [.4EBC.0020.0002] # TANGSA LETTER GHA
+16AB8 ; [.4EBD.0020.0002] # TANGSA LETTER HTTA
+16AB9 ; [.4EBE.0020.0002] # TANGSA LETTER THA
+16ABA ; [.4EBF.0020.0002] # TANGSA LETTER XA
+16ABB ; [.4EC0.0020.0002] # TANGSA LETTER FA
+16ABC ; [.4EC1.0020.0002] # TANGSA LETTER DHA
+16ABD ; [.4EC2.0020.0002] # TANGSA LETTER CHA
+16ABE ; [.4EC3.0020.0002] # TANGSA LETTER ZA
+10000 ; [.4EC4.0020.0002] # LINEAR B SYLLABLE B008 A
+10001 ; [.4EC5.0020.0002] # LINEAR B SYLLABLE B038 E
+10002 ; [.4EC6.0020.0002] # LINEAR B SYLLABLE B028 I
+10003 ; [.4EC7.0020.0002] # LINEAR B SYLLABLE B061 O
+10004 ; [.4EC8.0020.0002] # LINEAR B SYLLABLE B010 U
+10005 ; [.4EC9.0020.0002] # LINEAR B SYLLABLE B001 DA
+10006 ; [.4ECA.0020.0002] # LINEAR B SYLLABLE B045 DE
+10007 ; [.4ECB.0020.0002] # LINEAR B SYLLABLE B007 DI
+10008 ; [.4ECC.0020.0002] # LINEAR B SYLLABLE B014 DO
+10009 ; [.4ECD.0020.0002] # LINEAR B SYLLABLE B051 DU
+1000A ; [.4ECE.0020.0002] # LINEAR B SYLLABLE B057 JA
+1000B ; [.4ECF.0020.0002] # LINEAR B SYLLABLE B046 JE
+1000D ; [.4ED0.0020.0002] # LINEAR B SYLLABLE B036 JO
+1000E ; [.4ED1.0020.0002] # LINEAR B SYLLABLE B065 JU
+1000F ; [.4ED2.0020.0002] # LINEAR B SYLLABLE B077 KA
+10010 ; [.4ED3.0020.0002] # LINEAR B SYLLABLE B044 KE
+10011 ; [.4ED4.0020.0002] # LINEAR B SYLLABLE B067 KI
+10012 ; [.4ED5.0020.0002] # LINEAR B SYLLABLE B070 KO
+10013 ; [.4ED6.0020.0002] # LINEAR B SYLLABLE B081 KU
+10014 ; [.4ED7.0020.0002] # LINEAR B SYLLABLE B080 MA
+10015 ; [.4ED8.0020.0002] # LINEAR B SYLLABLE B013 ME
+10016 ; [.4ED9.0020.0002] # LINEAR B SYLLABLE B073 MI
+10017 ; [.4EDA.0020.0002] # LINEAR B SYLLABLE B015 MO
+10018 ; [.4EDB.0020.0002] # LINEAR B SYLLABLE B023 MU
+10019 ; [.4EDC.0020.0002] # LINEAR B SYLLABLE B006 NA
+1001A ; [.4EDD.0020.0002] # LINEAR B SYLLABLE B024 NE
+1001B ; [.4EDE.0020.0002] # LINEAR B SYLLABLE B030 NI
+1001C ; [.4EDF.0020.0002] # LINEAR B SYLLABLE B052 NO
+1001D ; [.4EE0.0020.0002] # LINEAR B SYLLABLE B055 NU
+1001E ; [.4EE1.0020.0002] # LINEAR B SYLLABLE B003 PA
+1001F ; [.4EE2.0020.0002] # LINEAR B SYLLABLE B072 PE
+10020 ; [.4EE3.0020.0002] # LINEAR B SYLLABLE B039 PI
+10021 ; [.4EE4.0020.0002] # LINEAR B SYLLABLE B011 PO
+10022 ; [.4EE5.0020.0002] # LINEAR B SYLLABLE B050 PU
+10023 ; [.4EE6.0020.0002] # LINEAR B SYLLABLE B016 QA
+10024 ; [.4EE7.0020.0002] # LINEAR B SYLLABLE B078 QE
+10025 ; [.4EE8.0020.0002] # LINEAR B SYLLABLE B021 QI
+10026 ; [.4EE9.0020.0002] # LINEAR B SYLLABLE B032 QO
+10028 ; [.4EEA.0020.0002] # LINEAR B SYLLABLE B060 RA
+10029 ; [.4EEB.0020.0002] # LINEAR B SYLLABLE B027 RE
+1002A ; [.4EEC.0020.0002] # LINEAR B SYLLABLE B053 RI
+1002B ; [.4EED.0020.0002] # LINEAR B SYLLABLE B002 RO
+1002C ; [.4EEE.0020.0002] # LINEAR B SYLLABLE B026 RU
+1002D ; [.4EEF.0020.0002] # LINEAR B SYLLABLE B031 SA
+1002E ; [.4EF0.0020.0002] # LINEAR B SYLLABLE B009 SE
+1002F ; [.4EF1.0020.0002] # LINEAR B SYLLABLE B041 SI
+10030 ; [.4EF2.0020.0002] # LINEAR B SYLLABLE B012 SO
+10031 ; [.4EF3.0020.0002] # LINEAR B SYLLABLE B058 SU
+10032 ; [.4EF4.0020.0002] # LINEAR B SYLLABLE B059 TA
+10033 ; [.4EF5.0020.0002] # LINEAR B SYLLABLE B004 TE
+10034 ; [.4EF6.0020.0002] # LINEAR B SYLLABLE B037 TI
+10035 ; [.4EF7.0020.0002] # LINEAR B SYLLABLE B005 TO
+10036 ; [.4EF8.0020.0002] # LINEAR B SYLLABLE B069 TU
+10037 ; [.4EF9.0020.0002] # LINEAR B SYLLABLE B054 WA
+10038 ; [.4EFA.0020.0002] # LINEAR B SYLLABLE B075 WE
+10039 ; [.4EFB.0020.0002] # LINEAR B SYLLABLE B040 WI
+1003A ; [.4EFC.0020.0002] # LINEAR B SYLLABLE B042 WO
+1003C ; [.4EFD.0020.0002] # LINEAR B SYLLABLE B017 ZA
+1003D ; [.4EFE.0020.0002] # LINEAR B SYLLABLE B074 ZE
+1003F ; [.4EFF.0020.0002] # LINEAR B SYLLABLE B020 ZO
+10040 ; [.4F00.0020.0002] # LINEAR B SYLLABLE B025 A2
+10041 ; [.4F01.0020.0002] # LINEAR B SYLLABLE B043 A3
+10042 ; [.4F02.0020.0002] # LINEAR B SYLLABLE B085 AU
+10043 ; [.4F03.0020.0002] # LINEAR B SYLLABLE B071 DWE
+10044 ; [.4F04.0020.0002] # LINEAR B SYLLABLE B090 DWO
+10045 ; [.4F05.0020.0002] # LINEAR B SYLLABLE B048 NWA
+10046 ; [.4F06.0020.0002] # LINEAR B SYLLABLE B029 PU2
+10047 ; [.4F07.0020.0002] # LINEAR B SYLLABLE B062 PTE
+10048 ; [.4F08.0020.0002] # LINEAR B SYLLABLE B076 RA2
+10049 ; [.4F09.0020.0002] # LINEAR B SYLLABLE B033 RA3
+1004A ; [.4F0A.0020.0002] # LINEAR B SYLLABLE B068 RO2
+1004B ; [.4F0B.0020.0002] # LINEAR B SYLLABLE B066 TA2
+1004C ; [.4F0C.0020.0002] # LINEAR B SYLLABLE B087 TWE
+1004D ; [.4F0D.0020.0002] # LINEAR B SYLLABLE B091 TWO
+10050 ; [.4F0E.0020.0002] # LINEAR B SYMBOL B018
+10051 ; [.4F0F.0020.0002] # LINEAR B SYMBOL B019
+10052 ; [.4F10.0020.0002] # LINEAR B SYMBOL B022
+10053 ; [.4F11.0020.0002] # LINEAR B SYMBOL B034
+10054 ; [.4F12.0020.0002] # LINEAR B SYMBOL B047
+10055 ; [.4F13.0020.0002] # LINEAR B SYMBOL B049
+10056 ; [.4F14.0020.0002] # LINEAR B SYMBOL B056
+10057 ; [.4F15.0020.0002] # LINEAR B SYMBOL B063
+10058 ; [.4F16.0020.0002] # LINEAR B SYMBOL B064
+10059 ; [.4F17.0020.0002] # LINEAR B SYMBOL B079
+1005A ; [.4F18.0020.0002] # LINEAR B SYMBOL B082
+1005B ; [.4F19.0020.0002] # LINEAR B SYMBOL B083
+1005C ; [.4F1A.0020.0002] # LINEAR B SYMBOL B086
+1005D ; [.4F1B.0020.0002] # LINEAR B SYMBOL B089
+10080 ; [.4F1C.0020.0002] # LINEAR B IDEOGRAM B100 MAN
+10081 ; [.4F1D.0020.0002] # LINEAR B IDEOGRAM B102 WOMAN
+10082 ; [.4F1E.0020.0002] # LINEAR B IDEOGRAM B104 DEER
+10083 ; [.4F1F.0020.0002] # LINEAR B IDEOGRAM B105 EQUID
+10084 ; [.4F20.0020.0002] # LINEAR B IDEOGRAM B105F MARE
+10085 ; [.4F21.0020.0002] # LINEAR B IDEOGRAM B105M STALLION
+10086 ; [.4F22.0020.0002] # LINEAR B IDEOGRAM B106F EWE
+10087 ; [.4F23.0020.0002] # LINEAR B IDEOGRAM B106M RAM
+10088 ; [.4F24.0020.0002] # LINEAR B IDEOGRAM B107F SHE-GOAT
+10089 ; [.4F25.0020.0002] # LINEAR B IDEOGRAM B107M HE-GOAT
+1008A ; [.4F26.0020.0002] # LINEAR B IDEOGRAM B108F SOW
+1008B ; [.4F27.0020.0002] # LINEAR B IDEOGRAM B108M BOAR
+1008C ; [.4F28.0020.0002] # LINEAR B IDEOGRAM B109F COW
+1008D ; [.4F29.0020.0002] # LINEAR B IDEOGRAM B109M BULL
+1008E ; [.4F2A.0020.0002] # LINEAR B IDEOGRAM B120 WHEAT
+1008F ; [.4F2B.0020.0002] # LINEAR B IDEOGRAM B121 BARLEY
+10090 ; [.4F2C.0020.0002] # LINEAR B IDEOGRAM B122 OLIVE
+10091 ; [.4F2D.0020.0002] # LINEAR B IDEOGRAM B123 SPICE
+10092 ; [.4F2E.0020.0002] # LINEAR B IDEOGRAM B125 CYPERUS
+10093 ; [.4F2F.0020.0002] # LINEAR B MONOGRAM B127 KAPO
+10094 ; [.4F30.0020.0002] # LINEAR B MONOGRAM B128 KANAKO
+10095 ; [.4F31.0020.0002] # LINEAR B IDEOGRAM B130 OIL
+10096 ; [.4F32.0020.0002] # LINEAR B IDEOGRAM B131 WINE
+10097 ; [.4F33.0020.0002] # LINEAR B IDEOGRAM B132
+10098 ; [.4F34.0020.0002] # LINEAR B MONOGRAM B133 AREPA
+10099 ; [.4F35.0020.0002] # LINEAR B MONOGRAM B135 MERI
+1009A ; [.4F36.0020.0002] # LINEAR B IDEOGRAM B140 BRONZE
+1009B ; [.4F37.0020.0002] # LINEAR B IDEOGRAM B141 GOLD
+1009C ; [.4F38.0020.0002] # LINEAR B IDEOGRAM B142
+1009D ; [.4F39.0020.0002] # LINEAR B IDEOGRAM B145 WOOL
+1009E ; [.4F3A.0020.0002] # LINEAR B IDEOGRAM B146
+1009F ; [.4F3B.0020.0002] # LINEAR B IDEOGRAM B150
+100A0 ; [.4F3C.0020.0002] # LINEAR B IDEOGRAM B151 HORN
+100A1 ; [.4F3D.0020.0002] # LINEAR B IDEOGRAM B152
+100A2 ; [.4F3E.0020.0002] # LINEAR B IDEOGRAM B153
+100A3 ; [.4F3F.0020.0002] # LINEAR B IDEOGRAM B154
+100A4 ; [.4F40.0020.0002] # LINEAR B MONOGRAM B156 TURO2
+100A5 ; [.4F41.0020.0002] # LINEAR B IDEOGRAM B157
+100A6 ; [.4F42.0020.0002] # LINEAR B IDEOGRAM B158
+100A7 ; [.4F43.0020.0002] # LINEAR B IDEOGRAM B159 CLOTH
+100A8 ; [.4F44.0020.0002] # LINEAR B IDEOGRAM B160
+100A9 ; [.4F45.0020.0002] # LINEAR B IDEOGRAM B161
+100AA ; [.4F46.0020.0002] # LINEAR B IDEOGRAM B162 GARMENT
+100AB ; [.4F47.0020.0002] # LINEAR B IDEOGRAM B163 ARMOUR
+100AC ; [.4F48.0020.0002] # LINEAR B IDEOGRAM B164
+100AD ; [.4F49.0020.0002] # LINEAR B IDEOGRAM B165
+100AE ; [.4F4A.0020.0002] # LINEAR B IDEOGRAM B166
+100AF ; [.4F4B.0020.0002] # LINEAR B IDEOGRAM B167
+100B0 ; [.4F4C.0020.0002] # LINEAR B IDEOGRAM B168
+100B1 ; [.4F4D.0020.0002] # LINEAR B IDEOGRAM B169
+100B2 ; [.4F4E.0020.0002] # LINEAR B IDEOGRAM B170
+100B3 ; [.4F4F.0020.0002] # LINEAR B IDEOGRAM B171
+100B4 ; [.4F50.0020.0002] # LINEAR B IDEOGRAM B172
+100B5 ; [.4F51.0020.0002] # LINEAR B IDEOGRAM B173 MONTH
+100B6 ; [.4F52.0020.0002] # LINEAR B IDEOGRAM B174
+100B7 ; [.4F53.0020.0002] # LINEAR B IDEOGRAM B176 TREE
+100B8 ; [.4F54.0020.0002] # LINEAR B IDEOGRAM B177
+100B9 ; [.4F55.0020.0002] # LINEAR B IDEOGRAM B178
+100BA ; [.4F56.0020.0002] # LINEAR B IDEOGRAM B179
+100BB ; [.4F57.0020.0002] # LINEAR B IDEOGRAM B180
+100BC ; [.4F58.0020.0002] # LINEAR B IDEOGRAM B181
+100BD ; [.4F59.0020.0002] # LINEAR B IDEOGRAM B182
+100BE ; [.4F5A.0020.0002] # LINEAR B IDEOGRAM B183
+100BF ; [.4F5B.0020.0002] # LINEAR B IDEOGRAM B184
+100C0 ; [.4F5C.0020.0002] # LINEAR B IDEOGRAM B185
+100C1 ; [.4F5D.0020.0002] # LINEAR B IDEOGRAM B189
+100C2 ; [.4F5E.0020.0002] # LINEAR B IDEOGRAM B190
+100C3 ; [.4F5F.0020.0002] # LINEAR B IDEOGRAM B191 HELMET
+100C4 ; [.4F60.0020.0002] # LINEAR B IDEOGRAM B220 FOOTSTOOL
+100C5 ; [.4F61.0020.0002] # LINEAR B IDEOGRAM B225 BATHTUB
+100C6 ; [.4F62.0020.0002] # LINEAR B IDEOGRAM B230 SPEAR
+100C7 ; [.4F63.0020.0002] # LINEAR B IDEOGRAM B231 ARROW
+100C8 ; [.4F64.0020.0002] # LINEAR B IDEOGRAM B232
+100C9 ; [.4F65.0020.0002] # LINEAR B IDEOGRAM B233 SWORD
+100CA ; [.4F66.0020.0002] # LINEAR B IDEOGRAM B234
+100CB ; [.4F67.0020.0002] # LINEAR B IDEOGRAM B236
+100CC ; [.4F68.0020.0002] # LINEAR B IDEOGRAM B240 WHEELED CHARIOT
+100CD ; [.4F69.0020.0002] # LINEAR B IDEOGRAM B241 CHARIOT
+100CE ; [.4F6A.0020.0002] # LINEAR B IDEOGRAM B242 CHARIOT FRAME
+100CF ; [.4F6B.0020.0002] # LINEAR B IDEOGRAM B243 WHEEL
+100D0 ; [.4F6C.0020.0002] # LINEAR B IDEOGRAM B245
+100D1 ; [.4F6D.0020.0002] # LINEAR B IDEOGRAM B246
+100D2 ; [.4F6E.0020.0002] # LINEAR B MONOGRAM B247 DIPTE
+100D3 ; [.4F6F.0020.0002] # LINEAR B IDEOGRAM B248
+100D4 ; [.4F70.0020.0002] # LINEAR B IDEOGRAM B249
+100D5 ; [.4F71.0020.0002] # LINEAR B IDEOGRAM B251
+100D6 ; [.4F72.0020.0002] # LINEAR B IDEOGRAM B252
+100D7 ; [.4F73.0020.0002] # LINEAR B IDEOGRAM B253
+100D8 ; [.4F74.0020.0002] # LINEAR B IDEOGRAM B254 DART
+100D9 ; [.4F75.0020.0002] # LINEAR B IDEOGRAM B255
+100DA ; [.4F76.0020.0002] # LINEAR B IDEOGRAM B256
+100DB ; [.4F77.0020.0002] # LINEAR B IDEOGRAM B257
+100DC ; [.4F78.0020.0002] # LINEAR B IDEOGRAM B258
+100DD ; [.4F79.0020.0002] # LINEAR B IDEOGRAM B259
+100DE ; [.4F7A.0020.0002] # LINEAR B IDEOGRAM VESSEL B155
+100DF ; [.4F7B.0020.0002] # LINEAR B IDEOGRAM VESSEL B200
+100E0 ; [.4F7C.0020.0002] # LINEAR B IDEOGRAM VESSEL B201
+100E1 ; [.4F7D.0020.0002] # LINEAR B IDEOGRAM VESSEL B202
+100E2 ; [.4F7E.0020.0002] # LINEAR B IDEOGRAM VESSEL B203
+100E3 ; [.4F7F.0020.0002] # LINEAR B IDEOGRAM VESSEL B204
+100E4 ; [.4F80.0020.0002] # LINEAR B IDEOGRAM VESSEL B205
+100E5 ; [.4F81.0020.0002] # LINEAR B IDEOGRAM VESSEL B206
+100E6 ; [.4F82.0020.0002] # LINEAR B IDEOGRAM VESSEL B207
+100E7 ; [.4F83.0020.0002] # LINEAR B IDEOGRAM VESSEL B208
+100E8 ; [.4F84.0020.0002] # LINEAR B IDEOGRAM VESSEL B209
+100E9 ; [.4F85.0020.0002] # LINEAR B IDEOGRAM VESSEL B210
+100EA ; [.4F86.0020.0002] # LINEAR B IDEOGRAM VESSEL B211
+100EB ; [.4F87.0020.0002] # LINEAR B IDEOGRAM VESSEL B212
+100EC ; [.4F88.0020.0002] # LINEAR B IDEOGRAM VESSEL B213
+100ED ; [.4F89.0020.0002] # LINEAR B IDEOGRAM VESSEL B214
+100EE ; [.4F8A.0020.0002] # LINEAR B IDEOGRAM VESSEL B215
+100EF ; [.4F8B.0020.0002] # LINEAR B IDEOGRAM VESSEL B216
+100F0 ; [.4F8C.0020.0002] # LINEAR B IDEOGRAM VESSEL B217
+100F1 ; [.4F8D.0020.0002] # LINEAR B IDEOGRAM VESSEL B218
+100F2 ; [.4F8E.0020.0002] # LINEAR B IDEOGRAM VESSEL B219
+100F3 ; [.4F8F.0020.0002] # LINEAR B IDEOGRAM VESSEL B221
+100F4 ; [.4F90.0020.0002] # LINEAR B IDEOGRAM VESSEL B222
+100F5 ; [.4F91.0020.0002] # LINEAR B IDEOGRAM VESSEL B226
+100F6 ; [.4F92.0020.0002] # LINEAR B IDEOGRAM VESSEL B227
+100F7 ; [.4F93.0020.0002] # LINEAR B IDEOGRAM VESSEL B228
+100F8 ; [.4F94.0020.0002] # LINEAR B IDEOGRAM VESSEL B229
+100F9 ; [.4F95.0020.0002] # LINEAR B IDEOGRAM VESSEL B250
+100FA ; [.4F96.0020.0002] # LINEAR B IDEOGRAM VESSEL B305
+10600 ; [.4F97.0020.0002] # LINEAR A SIGN AB001
+10601 ; [.4F98.0020.0002] # LINEAR A SIGN AB002
+10602 ; [.4F99.0020.0002] # LINEAR A SIGN AB003
+10603 ; [.4F9A.0020.0002] # LINEAR A SIGN AB004
+10604 ; [.4F9B.0020.0002] # LINEAR A SIGN AB005
+10605 ; [.4F9C.0020.0002] # LINEAR A SIGN AB006
+10606 ; [.4F9D.0020.0002] # LINEAR A SIGN AB007
+10607 ; [.4F9E.0020.0002] # LINEAR A SIGN AB008
+10608 ; [.4F9F.0020.0002] # LINEAR A SIGN AB009
+10609 ; [.4FA0.0020.0002] # LINEAR A SIGN AB010
+1060A ; [.4FA1.0020.0002] # LINEAR A SIGN AB011
+1060B ; [.4FA2.0020.0002] # LINEAR A SIGN AB013
+1060C ; [.4FA3.0020.0002] # LINEAR A SIGN AB016
+1060D ; [.4FA4.0020.0002] # LINEAR A SIGN AB017
+1060E ; [.4FA5.0020.0002] # LINEAR A SIGN AB020
+1060F ; [.4FA6.0020.0002] # LINEAR A SIGN AB021
+10610 ; [.4FA7.0020.0002] # LINEAR A SIGN AB021F
+10611 ; [.4FA8.0020.0002] # LINEAR A SIGN AB021M
+10612 ; [.4FA9.0020.0002] # LINEAR A SIGN AB022
+10613 ; [.4FAA.0020.0002] # LINEAR A SIGN AB022F
+10614 ; [.4FAB.0020.0002] # LINEAR A SIGN AB022M
+10615 ; [.4FAC.0020.0002] # LINEAR A SIGN AB023
+10616 ; [.4FAD.0020.0002] # LINEAR A SIGN AB023M
+10617 ; [.4FAE.0020.0002] # LINEAR A SIGN AB024
+10618 ; [.4FAF.0020.0002] # LINEAR A SIGN AB026
+10619 ; [.4FB0.0020.0002] # LINEAR A SIGN AB027
+1061A ; [.4FB1.0020.0002] # LINEAR A SIGN AB028
+1061B ; [.4FB2.0020.0002] # LINEAR A SIGN A028B
+1061C ; [.4FB3.0020.0002] # LINEAR A SIGN AB029
+1061D ; [.4FB4.0020.0002] # LINEAR A SIGN AB030
+1061E ; [.4FB5.0020.0002] # LINEAR A SIGN AB031
+1061F ; [.4FB6.0020.0002] # LINEAR A SIGN AB034
+10620 ; [.4FB7.0020.0002] # LINEAR A SIGN AB037
+10621 ; [.4FB8.0020.0002] # LINEAR A SIGN AB038
+10622 ; [.4FB9.0020.0002] # LINEAR A SIGN AB039
+10623 ; [.4FBA.0020.0002] # LINEAR A SIGN AB040
+10624 ; [.4FBB.0020.0002] # LINEAR A SIGN AB041
+10625 ; [.4FBC.0020.0002] # LINEAR A SIGN AB044
+10626 ; [.4FBD.0020.0002] # LINEAR A SIGN AB045
+10627 ; [.4FBE.0020.0002] # LINEAR A SIGN AB046
+10628 ; [.4FBF.0020.0002] # LINEAR A SIGN AB047
+10629 ; [.4FC0.0020.0002] # LINEAR A SIGN AB048
+1062A ; [.4FC1.0020.0002] # LINEAR A SIGN AB049
+1062B ; [.4FC2.0020.0002] # LINEAR A SIGN AB050
+1062C ; [.4FC3.0020.0002] # LINEAR A SIGN AB051
+1062D ; [.4FC4.0020.0002] # LINEAR A SIGN AB053
+1062E ; [.4FC5.0020.0002] # LINEAR A SIGN AB054
+1062F ; [.4FC6.0020.0002] # LINEAR A SIGN AB055
+10630 ; [.4FC7.0020.0002] # LINEAR A SIGN AB056
+10631 ; [.4FC8.0020.0002] # LINEAR A SIGN AB057
+10632 ; [.4FC9.0020.0002] # LINEAR A SIGN AB058
+10633 ; [.4FCA.0020.0002] # LINEAR A SIGN AB059
+10634 ; [.4FCB.0020.0002] # LINEAR A SIGN AB060
+10635 ; [.4FCC.0020.0002] # LINEAR A SIGN AB061
+10636 ; [.4FCD.0020.0002] # LINEAR A SIGN AB065
+10637 ; [.4FCE.0020.0002] # LINEAR A SIGN AB066
+10638 ; [.4FCF.0020.0002] # LINEAR A SIGN AB067
+10639 ; [.4FD0.0020.0002] # LINEAR A SIGN AB069
+1063A ; [.4FD1.0020.0002] # LINEAR A SIGN AB070
+1063B ; [.4FD2.0020.0002] # LINEAR A SIGN AB073
+1063C ; [.4FD3.0020.0002] # LINEAR A SIGN AB074
+1063D ; [.4FD4.0020.0002] # LINEAR A SIGN AB076
+1063E ; [.4FD5.0020.0002] # LINEAR A SIGN AB077
+1063F ; [.4FD6.0020.0002] # LINEAR A SIGN AB078
+10640 ; [.4FD7.0020.0002] # LINEAR A SIGN AB079
+10641 ; [.4FD8.0020.0002] # LINEAR A SIGN AB080
+10642 ; [.4FD9.0020.0002] # LINEAR A SIGN AB081
+10643 ; [.4FDA.0020.0002] # LINEAR A SIGN AB082
+10644 ; [.4FDB.0020.0002] # LINEAR A SIGN AB085
+10645 ; [.4FDC.0020.0002] # LINEAR A SIGN AB086
+10646 ; [.4FDD.0020.0002] # LINEAR A SIGN AB087
+10647 ; [.4FDE.0020.0002] # LINEAR A SIGN A100-102
+10648 ; [.4FDF.0020.0002] # LINEAR A SIGN AB118
+10649 ; [.4FE0.0020.0002] # LINEAR A SIGN AB120
+1064A ; [.4FE1.0020.0002] # LINEAR A SIGN A120B
+1064B ; [.4FE2.0020.0002] # LINEAR A SIGN AB122
+1064C ; [.4FE3.0020.0002] # LINEAR A SIGN AB123
+1064D ; [.4FE4.0020.0002] # LINEAR A SIGN AB131A
+1064E ; [.4FE5.0020.0002] # LINEAR A SIGN AB131B
+1064F ; [.4FE6.0020.0002] # LINEAR A SIGN A131C
+10650 ; [.4FE7.0020.0002] # LINEAR A SIGN AB164
+10651 ; [.4FE8.0020.0002] # LINEAR A SIGN AB171
+10652 ; [.4FE9.0020.0002] # LINEAR A SIGN AB180
+10653 ; [.4FEA.0020.0002] # LINEAR A SIGN AB188
+10654 ; [.4FEB.0020.0002] # LINEAR A SIGN AB191
+10655 ; [.4FEC.0020.0002] # LINEAR A SIGN A301
+10656 ; [.4FED.0020.0002] # LINEAR A SIGN A302
+10657 ; [.4FEE.0020.0002] # LINEAR A SIGN A303
+10658 ; [.4FEF.0020.0002] # LINEAR A SIGN A304
+10659 ; [.4FF0.0020.0002] # LINEAR A SIGN A305
+1065A ; [.4FF1.0020.0002] # LINEAR A SIGN A306
+1065B ; [.4FF2.0020.0002] # LINEAR A SIGN A307
+1065C ; [.4FF3.0020.0002] # LINEAR A SIGN A308
+1065D ; [.4FF4.0020.0002] # LINEAR A SIGN A309A
+1065E ; [.4FF5.0020.0002] # LINEAR A SIGN A309B
+1065F ; [.4FF6.0020.0002] # LINEAR A SIGN A309C
+10660 ; [.4FF7.0020.0002] # LINEAR A SIGN A310
+10661 ; [.4FF8.0020.0002] # LINEAR A SIGN A311
+10662 ; [.4FF9.0020.0002] # LINEAR A SIGN A312
+10663 ; [.4FFA.0020.0002] # LINEAR A SIGN A313A
+10664 ; [.4FFB.0020.0002] # LINEAR A SIGN A313B
+10665 ; [.4FFC.0020.0002] # LINEAR A SIGN A313C
+10666 ; [.4FFD.0020.0002] # LINEAR A SIGN A314
+10667 ; [.4FFE.0020.0002] # LINEAR A SIGN A315
+10668 ; [.4FFF.0020.0002] # LINEAR A SIGN A316
+10669 ; [.5000.0020.0002] # LINEAR A SIGN A317
+1066A ; [.5001.0020.0002] # LINEAR A SIGN A318
+1066B ; [.5002.0020.0002] # LINEAR A SIGN A319
+1066C ; [.5003.0020.0002] # LINEAR A SIGN A320
+1066D ; [.5004.0020.0002] # LINEAR A SIGN A321
+1066E ; [.5005.0020.0002] # LINEAR A SIGN A322
+1066F ; [.5006.0020.0002] # LINEAR A SIGN A323
+10670 ; [.5007.0020.0002] # LINEAR A SIGN A324
+10671 ; [.5008.0020.0002] # LINEAR A SIGN A325
+10672 ; [.5009.0020.0002] # LINEAR A SIGN A326
+10673 ; [.500A.0020.0002] # LINEAR A SIGN A327
+10674 ; [.500B.0020.0002] # LINEAR A SIGN A328
+10675 ; [.500C.0020.0002] # LINEAR A SIGN A329
+10676 ; [.500D.0020.0002] # LINEAR A SIGN A330
+10677 ; [.500E.0020.0002] # LINEAR A SIGN A331
+10678 ; [.500F.0020.0002] # LINEAR A SIGN A332
+10679 ; [.5010.0020.0002] # LINEAR A SIGN A333
+1067A ; [.5011.0020.0002] # LINEAR A SIGN A334
+1067B ; [.5012.0020.0002] # LINEAR A SIGN A335
+1067C ; [.5013.0020.0002] # LINEAR A SIGN A336
+1067D ; [.5014.0020.0002] # LINEAR A SIGN A337
+1067E ; [.5015.0020.0002] # LINEAR A SIGN A338
+1067F ; [.5016.0020.0002] # LINEAR A SIGN A339
+10680 ; [.5017.0020.0002] # LINEAR A SIGN A340
+10681 ; [.5018.0020.0002] # LINEAR A SIGN A341
+10682 ; [.5019.0020.0002] # LINEAR A SIGN A342
+10683 ; [.501A.0020.0002] # LINEAR A SIGN A343
+10684 ; [.501B.0020.0002] # LINEAR A SIGN A344
+10685 ; [.501C.0020.0002] # LINEAR A SIGN A345
+10686 ; [.501D.0020.0002] # LINEAR A SIGN A346
+10687 ; [.501E.0020.0002] # LINEAR A SIGN A347
+10688 ; [.501F.0020.0002] # LINEAR A SIGN A348
+10689 ; [.5020.0020.0002] # LINEAR A SIGN A349
+1068A ; [.5021.0020.0002] # LINEAR A SIGN A350
+1068B ; [.5022.0020.0002] # LINEAR A SIGN A351
+1068C ; [.5023.0020.0002] # LINEAR A SIGN A352
+1068D ; [.5024.0020.0002] # LINEAR A SIGN A353
+1068E ; [.5025.0020.0002] # LINEAR A SIGN A354
+1068F ; [.5026.0020.0002] # LINEAR A SIGN A355
+10690 ; [.5027.0020.0002] # LINEAR A SIGN A356
+10691 ; [.5028.0020.0002] # LINEAR A SIGN A357
+10692 ; [.5029.0020.0002] # LINEAR A SIGN A358
+10693 ; [.502A.0020.0002] # LINEAR A SIGN A359
+10694 ; [.502B.0020.0002] # LINEAR A SIGN A360
+10695 ; [.502C.0020.0002] # LINEAR A SIGN A361
+10696 ; [.502D.0020.0002] # LINEAR A SIGN A362
+10697 ; [.502E.0020.0002] # LINEAR A SIGN A363
+10698 ; [.502F.0020.0002] # LINEAR A SIGN A364
+10699 ; [.5030.0020.0002] # LINEAR A SIGN A365
+1069A ; [.5031.0020.0002] # LINEAR A SIGN A366
+1069B ; [.5032.0020.0002] # LINEAR A SIGN A367
+1069C ; [.5033.0020.0002] # LINEAR A SIGN A368
+1069D ; [.5034.0020.0002] # LINEAR A SIGN A369
+1069E ; [.5035.0020.0002] # LINEAR A SIGN A370
+1069F ; [.5036.0020.0002] # LINEAR A SIGN A371
+106A0 ; [.5037.0020.0002] # LINEAR A SIGN A400-VAS
+106A1 ; [.5038.0020.0002] # LINEAR A SIGN A401-VAS
+106A2 ; [.5039.0020.0002] # LINEAR A SIGN A402-VAS
+106A3 ; [.503A.0020.0002] # LINEAR A SIGN A403-VAS
+106A4 ; [.503B.0020.0002] # LINEAR A SIGN A404-VAS
+106A5 ; [.503C.0020.0002] # LINEAR A SIGN A405-VAS
+106A6 ; [.503D.0020.0002] # LINEAR A SIGN A406-VAS
+106A7 ; [.503E.0020.0002] # LINEAR A SIGN A407-VAS
+106A8 ; [.503F.0020.0002] # LINEAR A SIGN A408-VAS
+106A9 ; [.5040.0020.0002] # LINEAR A SIGN A409-VAS
+106AA ; [.5041.0020.0002] # LINEAR A SIGN A410-VAS
+106AB ; [.5042.0020.0002] # LINEAR A SIGN A411-VAS
+106AC ; [.5043.0020.0002] # LINEAR A SIGN A412-VAS
+106AD ; [.5044.0020.0002] # LINEAR A SIGN A413-VAS
+106AE ; [.5045.0020.0002] # LINEAR A SIGN A414-VAS
+106AF ; [.5046.0020.0002] # LINEAR A SIGN A415-VAS
+106B0 ; [.5047.0020.0002] # LINEAR A SIGN A416-VAS
+106B1 ; [.5048.0020.0002] # LINEAR A SIGN A417-VAS
+106B2 ; [.5049.0020.0002] # LINEAR A SIGN A418-VAS
+106B3 ; [.504A.0020.0002] # LINEAR A SIGN A501
+106B4 ; [.504B.0020.0002] # LINEAR A SIGN A502
+106B5 ; [.504C.0020.0002] # LINEAR A SIGN A503
+106B6 ; [.504D.0020.0002] # LINEAR A SIGN A504
+106B7 ; [.504E.0020.0002] # LINEAR A SIGN A505
+106B8 ; [.504F.0020.0002] # LINEAR A SIGN A506
+106B9 ; [.5050.0020.0002] # LINEAR A SIGN A508
+106BA ; [.5051.0020.0002] # LINEAR A SIGN A509
+106BB ; [.5052.0020.0002] # LINEAR A SIGN A510
+106BC ; [.5053.0020.0002] # LINEAR A SIGN A511
+106BD ; [.5054.0020.0002] # LINEAR A SIGN A512
+106BE ; [.5055.0020.0002] # LINEAR A SIGN A513
+106BF ; [.5056.0020.0002] # LINEAR A SIGN A515
+106C0 ; [.5057.0020.0002] # LINEAR A SIGN A516
+106C1 ; [.5058.0020.0002] # LINEAR A SIGN A520
+106C2 ; [.5059.0020.0002] # LINEAR A SIGN A521
+106C3 ; [.505A.0020.0002] # LINEAR A SIGN A523
+106C4 ; [.505B.0020.0002] # LINEAR A SIGN A524
+106C5 ; [.505C.0020.0002] # LINEAR A SIGN A525
+106C6 ; [.505D.0020.0002] # LINEAR A SIGN A526
+106C7 ; [.505E.0020.0002] # LINEAR A SIGN A527
+106C8 ; [.505F.0020.0002] # LINEAR A SIGN A528
+106C9 ; [.5060.0020.0002] # LINEAR A SIGN A529
+106CA ; [.5061.0020.0002] # LINEAR A SIGN A530
+106CB ; [.5062.0020.0002] # LINEAR A SIGN A531
+106CC ; [.5063.0020.0002] # LINEAR A SIGN A532
+106CD ; [.5064.0020.0002] # LINEAR A SIGN A534
+106CE ; [.5065.0020.0002] # LINEAR A SIGN A535
+106CF ; [.5066.0020.0002] # LINEAR A SIGN A536
+106D0 ; [.5067.0020.0002] # LINEAR A SIGN A537
+106D1 ; [.5068.0020.0002] # LINEAR A SIGN A538
+106D2 ; [.5069.0020.0002] # LINEAR A SIGN A539
+106D3 ; [.506A.0020.0002] # LINEAR A SIGN A540
+106D4 ; [.506B.0020.0002] # LINEAR A SIGN A541
+106D5 ; [.506C.0020.0002] # LINEAR A SIGN A542
+106D6 ; [.506D.0020.0002] # LINEAR A SIGN A545
+106D7 ; [.506E.0020.0002] # LINEAR A SIGN A547
+106D8 ; [.506F.0020.0002] # LINEAR A SIGN A548
+106D9 ; [.5070.0020.0002] # LINEAR A SIGN A549
+106DA ; [.5071.0020.0002] # LINEAR A SIGN A550
+106DB ; [.5072.0020.0002] # LINEAR A SIGN A551
+106DC ; [.5073.0020.0002] # LINEAR A SIGN A552
+106DD ; [.5074.0020.0002] # LINEAR A SIGN A553
+106DE ; [.5075.0020.0002] # LINEAR A SIGN A554
+106DF ; [.5076.0020.0002] # LINEAR A SIGN A555
+106E0 ; [.5077.0020.0002] # LINEAR A SIGN A556
+106E1 ; [.5078.0020.0002] # LINEAR A SIGN A557
+106E2 ; [.5079.0020.0002] # LINEAR A SIGN A559
+106E3 ; [.507A.0020.0002] # LINEAR A SIGN A563
+106E4 ; [.507B.0020.0002] # LINEAR A SIGN A564
+106E5 ; [.507C.0020.0002] # LINEAR A SIGN A565
+106E6 ; [.507D.0020.0002] # LINEAR A SIGN A566
+106E7 ; [.507E.0020.0002] # LINEAR A SIGN A568
+106E8 ; [.507F.0020.0002] # LINEAR A SIGN A569
+106E9 ; [.5080.0020.0002] # LINEAR A SIGN A570
+106EA ; [.5081.0020.0002] # LINEAR A SIGN A571
+106EB ; [.5082.0020.0002] # LINEAR A SIGN A572
+106EC ; [.5083.0020.0002] # LINEAR A SIGN A573
+106ED ; [.5084.0020.0002] # LINEAR A SIGN A574
+106EE ; [.5085.0020.0002] # LINEAR A SIGN A575
+106EF ; [.5086.0020.0002] # LINEAR A SIGN A576
+106F0 ; [.5087.0020.0002] # LINEAR A SIGN A577
+106F1 ; [.5088.0020.0002] # LINEAR A SIGN A578
+106F2 ; [.5089.0020.0002] # LINEAR A SIGN A579
+106F3 ; [.508A.0020.0002] # LINEAR A SIGN A580
+106F4 ; [.508B.0020.0002] # LINEAR A SIGN A581
+106F5 ; [.508C.0020.0002] # LINEAR A SIGN A582
+106F6 ; [.508D.0020.0002] # LINEAR A SIGN A583
+106F7 ; [.508E.0020.0002] # LINEAR A SIGN A584
+106F8 ; [.508F.0020.0002] # LINEAR A SIGN A585
+106F9 ; [.5090.0020.0002] # LINEAR A SIGN A586
+106FA ; [.5091.0020.0002] # LINEAR A SIGN A587
+106FB ; [.5092.0020.0002] # LINEAR A SIGN A588
+106FC ; [.5093.0020.0002] # LINEAR A SIGN A589
+106FD ; [.5094.0020.0002] # LINEAR A SIGN A591
+106FE ; [.5095.0020.0002] # LINEAR A SIGN A592
+106FF ; [.5096.0020.0002] # LINEAR A SIGN A594
+10700 ; [.5097.0020.0002] # LINEAR A SIGN A595
+10701 ; [.5098.0020.0002] # LINEAR A SIGN A596
+10702 ; [.5099.0020.0002] # LINEAR A SIGN A598
+10703 ; [.509A.0020.0002] # LINEAR A SIGN A600
+10704 ; [.509B.0020.0002] # LINEAR A SIGN A601
+10705 ; [.509C.0020.0002] # LINEAR A SIGN A602
+10706 ; [.509D.0020.0002] # LINEAR A SIGN A603
+10707 ; [.509E.0020.0002] # LINEAR A SIGN A604
+10708 ; [.509F.0020.0002] # LINEAR A SIGN A606
+10709 ; [.50A0.0020.0002] # LINEAR A SIGN A608
+1070A ; [.50A1.0020.0002] # LINEAR A SIGN A609
+1070B ; [.50A2.0020.0002] # LINEAR A SIGN A610
+1070C ; [.50A3.0020.0002] # LINEAR A SIGN A611
+1070D ; [.50A4.0020.0002] # LINEAR A SIGN A612
+1070E ; [.50A5.0020.0002] # LINEAR A SIGN A613
+1070F ; [.50A6.0020.0002] # LINEAR A SIGN A614
+10710 ; [.50A7.0020.0002] # LINEAR A SIGN A615
+10711 ; [.50A8.0020.0002] # LINEAR A SIGN A616
+10712 ; [.50A9.0020.0002] # LINEAR A SIGN A617
+10713 ; [.50AA.0020.0002] # LINEAR A SIGN A618
+10714 ; [.50AB.0020.0002] # LINEAR A SIGN A619
+10715 ; [.50AC.0020.0002] # LINEAR A SIGN A620
+10716 ; [.50AD.0020.0002] # LINEAR A SIGN A621
+10717 ; [.50AE.0020.0002] # LINEAR A SIGN A622
+10718 ; [.50AF.0020.0002] # LINEAR A SIGN A623
+10719 ; [.50B0.0020.0002] # LINEAR A SIGN A624
+1071A ; [.50B1.0020.0002] # LINEAR A SIGN A626
+1071B ; [.50B2.0020.0002] # LINEAR A SIGN A627
+1071C ; [.50B3.0020.0002] # LINEAR A SIGN A628
+1071D ; [.50B4.0020.0002] # LINEAR A SIGN A629
+1071E ; [.50B5.0020.0002] # LINEAR A SIGN A634
+1071F ; [.50B6.0020.0002] # LINEAR A SIGN A637
+10720 ; [.50B7.0020.0002] # LINEAR A SIGN A638
+10721 ; [.50B8.0020.0002] # LINEAR A SIGN A640
+10722 ; [.50B9.0020.0002] # LINEAR A SIGN A642
+10723 ; [.50BA.0020.0002] # LINEAR A SIGN A643
+10724 ; [.50BB.0020.0002] # LINEAR A SIGN A644
+10725 ; [.50BC.0020.0002] # LINEAR A SIGN A645
+10726 ; [.50BD.0020.0002] # LINEAR A SIGN A646
+10727 ; [.50BE.0020.0002] # LINEAR A SIGN A648
+10728 ; [.50BF.0020.0002] # LINEAR A SIGN A649
+10729 ; [.50C0.0020.0002] # LINEAR A SIGN A651
+1072A ; [.50C1.0020.0002] # LINEAR A SIGN A652
+1072B ; [.50C2.0020.0002] # LINEAR A SIGN A653
+1072C ; [.50C3.0020.0002] # LINEAR A SIGN A654
+1072D ; [.50C4.0020.0002] # LINEAR A SIGN A655
+1072E ; [.50C5.0020.0002] # LINEAR A SIGN A656
+1072F ; [.50C6.0020.0002] # LINEAR A SIGN A657
+10730 ; [.50C7.0020.0002] # LINEAR A SIGN A658
+10731 ; [.50C8.0020.0002] # LINEAR A SIGN A659
+10732 ; [.50C9.0020.0002] # LINEAR A SIGN A660
+10733 ; [.50CA.0020.0002] # LINEAR A SIGN A661
+10734 ; [.50CB.0020.0002] # LINEAR A SIGN A662
+10735 ; [.50CC.0020.0002] # LINEAR A SIGN A663
+10736 ; [.50CD.0020.0002] # LINEAR A SIGN A664
+10740 ; [.50CE.0020.0002] # LINEAR A SIGN A701 A
+10741 ; [.50CF.0020.0002] # LINEAR A SIGN A702 B
+10742 ; [.50D0.0020.0002] # LINEAR A SIGN A703 D
+10743 ; [.50D1.0020.0002] # LINEAR A SIGN A704 E
+10744 ; [.50D2.0020.0002] # LINEAR A SIGN A705 F
+10745 ; [.50D3.0020.0002] # LINEAR A SIGN A706 H
+10746 ; [.50D4.0020.0002] # LINEAR A SIGN A707 J
+10747 ; [.50D5.0020.0002] # LINEAR A SIGN A708 K
+10748 ; [.50D6.0020.0002] # LINEAR A SIGN A709 L
+10749 ; [.50D7.0020.0002] # LINEAR A SIGN A709-2 L2
+1074A ; [.50D8.0020.0002] # LINEAR A SIGN A709-3 L3
+1074B ; [.50D9.0020.0002] # LINEAR A SIGN A709-4 L4
+1074C ; [.50DA.0020.0002] # LINEAR A SIGN A709-6 L6
+1074D ; [.50DB.0020.0002] # LINEAR A SIGN A710 W
+1074E ; [.50DC.0020.0002] # LINEAR A SIGN A711 X
+1074F ; [.50DD.0020.0002] # LINEAR A SIGN A712 Y
+10750 ; [.50DE.0020.0002] # LINEAR A SIGN A713 OMEGA
+10751 ; [.50DF.0020.0002] # LINEAR A SIGN A714 ABB
+10752 ; [.50E0.0020.0002] # LINEAR A SIGN A715 BB
+10753 ; [.50E1.0020.0002] # LINEAR A SIGN A717 DD
+10754 ; [.50E2.0020.0002] # LINEAR A SIGN A726 EYYY
+10755 ; [.50E3.0020.0002] # LINEAR A SIGN A732 JE
+10760 ; [.50E4.0020.0002] # LINEAR A SIGN A800
+10761 ; [.50E5.0020.0002] # LINEAR A SIGN A801
+10762 ; [.50E6.0020.0002] # LINEAR A SIGN A802
+10763 ; [.50E7.0020.0002] # LINEAR A SIGN A803
+10764 ; [.50E8.0020.0002] # LINEAR A SIGN A804
+10765 ; [.50E9.0020.0002] # LINEAR A SIGN A805
+10766 ; [.50EA.0020.0002] # LINEAR A SIGN A806
+10767 ; [.50EB.0020.0002] # LINEAR A SIGN A807
+10800 ; [.50EC.0020.0002] # CYPRIOT SYLLABLE A
+10801 ; [.50ED.0020.0002] # CYPRIOT SYLLABLE E
+10802 ; [.50EE.0020.0002] # CYPRIOT SYLLABLE I
+10803 ; [.50EF.0020.0002] # CYPRIOT SYLLABLE O
+10804 ; [.50F0.0020.0002] # CYPRIOT SYLLABLE U
+10805 ; [.50F1.0020.0002] # CYPRIOT SYLLABLE JA
+10808 ; [.50F2.0020.0002] # CYPRIOT SYLLABLE JO
+1080A ; [.50F3.0020.0002] # CYPRIOT SYLLABLE KA
+1080B ; [.50F4.0020.0002] # CYPRIOT SYLLABLE KE
+1080C ; [.50F5.0020.0002] # CYPRIOT SYLLABLE KI
+1080D ; [.50F6.0020.0002] # CYPRIOT SYLLABLE KO
+1080E ; [.50F7.0020.0002] # CYPRIOT SYLLABLE KU
+1080F ; [.50F8.0020.0002] # CYPRIOT SYLLABLE LA
+10810 ; [.50F9.0020.0002] # CYPRIOT SYLLABLE LE
+10811 ; [.50FA.0020.0002] # CYPRIOT SYLLABLE LI
+10812 ; [.50FB.0020.0002] # CYPRIOT SYLLABLE LO
+10813 ; [.50FC.0020.0002] # CYPRIOT SYLLABLE LU
+10814 ; [.50FD.0020.0002] # CYPRIOT SYLLABLE MA
+10815 ; [.50FE.0020.0002] # CYPRIOT SYLLABLE ME
+10816 ; [.50FF.0020.0002] # CYPRIOT SYLLABLE MI
+10817 ; [.5100.0020.0002] # CYPRIOT SYLLABLE MO
+10818 ; [.5101.0020.0002] # CYPRIOT SYLLABLE MU
+10819 ; [.5102.0020.0002] # CYPRIOT SYLLABLE NA
+1081A ; [.5103.0020.0002] # CYPRIOT SYLLABLE NE
+1081B ; [.5104.0020.0002] # CYPRIOT SYLLABLE NI
+1081C ; [.5105.0020.0002] # CYPRIOT SYLLABLE NO
+1081D ; [.5106.0020.0002] # CYPRIOT SYLLABLE NU
+1081E ; [.5107.0020.0002] # CYPRIOT SYLLABLE PA
+1081F ; [.5108.0020.0002] # CYPRIOT SYLLABLE PE
+10820 ; [.5109.0020.0002] # CYPRIOT SYLLABLE PI
+10821 ; [.510A.0020.0002] # CYPRIOT SYLLABLE PO
+10822 ; [.510B.0020.0002] # CYPRIOT SYLLABLE PU
+10823 ; [.510C.0020.0002] # CYPRIOT SYLLABLE RA
+10824 ; [.510D.0020.0002] # CYPRIOT SYLLABLE RE
+10825 ; [.510E.0020.0002] # CYPRIOT SYLLABLE RI
+10826 ; [.510F.0020.0002] # CYPRIOT SYLLABLE RO
+10827 ; [.5110.0020.0002] # CYPRIOT SYLLABLE RU
+10828 ; [.5111.0020.0002] # CYPRIOT SYLLABLE SA
+10829 ; [.5112.0020.0002] # CYPRIOT SYLLABLE SE
+1082A ; [.5113.0020.0002] # CYPRIOT SYLLABLE SI
+1082B ; [.5114.0020.0002] # CYPRIOT SYLLABLE SO
+1082C ; [.5115.0020.0002] # CYPRIOT SYLLABLE SU
+1082D ; [.5116.0020.0002] # CYPRIOT SYLLABLE TA
+1082E ; [.5117.0020.0002] # CYPRIOT SYLLABLE TE
+1082F ; [.5118.0020.0002] # CYPRIOT SYLLABLE TI
+10830 ; [.5119.0020.0002] # CYPRIOT SYLLABLE TO
+10831 ; [.511A.0020.0002] # CYPRIOT SYLLABLE TU
+10832 ; [.511B.0020.0002] # CYPRIOT SYLLABLE WA
+10833 ; [.511C.0020.0002] # CYPRIOT SYLLABLE WE
+10834 ; [.511D.0020.0002] # CYPRIOT SYLLABLE WI
+10835 ; [.511E.0020.0002] # CYPRIOT SYLLABLE WO
+10837 ; [.511F.0020.0002] # CYPRIOT SYLLABLE XA
+10838 ; [.5120.0020.0002] # CYPRIOT SYLLABLE XE
+1083C ; [.5121.0020.0002] # CYPRIOT SYLLABLE ZA
+1083F ; [.5122.0020.0002] # CYPRIOT SYLLABLE ZO
+12F90 ; [.5123.0020.0002] # CYPRO-MINOAN SIGN CM001
+12F91 ; [.5124.0020.0002] # CYPRO-MINOAN SIGN CM002
+12F92 ; [.5125.0020.0002] # CYPRO-MINOAN SIGN CM004
+12F93 ; [.5126.0020.0002] # CYPRO-MINOAN SIGN CM005
+12F94 ; [.5127.0020.0002] # CYPRO-MINOAN SIGN CM006
+12F95 ; [.5128.0020.0002] # CYPRO-MINOAN SIGN CM007
+12F96 ; [.5129.0020.0002] # CYPRO-MINOAN SIGN CM008
+12F97 ; [.512A.0020.0002] # CYPRO-MINOAN SIGN CM009
+12F98 ; [.512B.0020.0002] # CYPRO-MINOAN SIGN CM010
+12F99 ; [.512C.0020.0002] # CYPRO-MINOAN SIGN CM011
+12F9A ; [.512D.0020.0002] # CYPRO-MINOAN SIGN CM012
+12F9B ; [.512E.0020.0002] # CYPRO-MINOAN SIGN CM012B
+12F9C ; [.512F.0020.0002] # CYPRO-MINOAN SIGN CM013
+12F9D ; [.5130.0020.0002] # CYPRO-MINOAN SIGN CM015
+12F9E ; [.5131.0020.0002] # CYPRO-MINOAN SIGN CM017
+12F9F ; [.5132.0020.0002] # CYPRO-MINOAN SIGN CM019
+12FA0 ; [.5133.0020.0002] # CYPRO-MINOAN SIGN CM021
+12FA1 ; [.5134.0020.0002] # CYPRO-MINOAN SIGN CM023
+12FA2 ; [.5135.0020.0002] # CYPRO-MINOAN SIGN CM024
+12FA3 ; [.5136.0020.0002] # CYPRO-MINOAN SIGN CM025
+12FA4 ; [.5137.0020.0002] # CYPRO-MINOAN SIGN CM026
+12FA5 ; [.5138.0020.0002] # CYPRO-MINOAN SIGN CM027
+12FA6 ; [.5139.0020.0002] # CYPRO-MINOAN SIGN CM028
+12FA7 ; [.513A.0020.0002] # CYPRO-MINOAN SIGN CM029
+12FA8 ; [.513B.0020.0002] # CYPRO-MINOAN SIGN CM030
+12FA9 ; [.513C.0020.0002] # CYPRO-MINOAN SIGN CM033
+12FAA ; [.513D.0020.0002] # CYPRO-MINOAN SIGN CM034
+12FAB ; [.513E.0020.0002] # CYPRO-MINOAN SIGN CM035
+12FAC ; [.513F.0020.0002] # CYPRO-MINOAN SIGN CM036
+12FAD ; [.5140.0020.0002] # CYPRO-MINOAN SIGN CM037
+12FAE ; [.5141.0020.0002] # CYPRO-MINOAN SIGN CM038
+12FAF ; [.5142.0020.0002] # CYPRO-MINOAN SIGN CM039
+12FB0 ; [.5143.0020.0002] # CYPRO-MINOAN SIGN CM040
+12FB1 ; [.5144.0020.0002] # CYPRO-MINOAN SIGN CM041
+12FB2 ; [.5145.0020.0002] # CYPRO-MINOAN SIGN CM044
+12FB3 ; [.5146.0020.0002] # CYPRO-MINOAN SIGN CM046
+12FB4 ; [.5147.0020.0002] # CYPRO-MINOAN SIGN CM047
+12FB5 ; [.5148.0020.0002] # CYPRO-MINOAN SIGN CM049
+12FB6 ; [.5149.0020.0002] # CYPRO-MINOAN SIGN CM050
+12FB7 ; [.514A.0020.0002] # CYPRO-MINOAN SIGN CM051
+12FB8 ; [.514B.0020.0002] # CYPRO-MINOAN SIGN CM052
+12FB9 ; [.514C.0020.0002] # CYPRO-MINOAN SIGN CM053
+12FBA ; [.514D.0020.0002] # CYPRO-MINOAN SIGN CM054
+12FBB ; [.514E.0020.0002] # CYPRO-MINOAN SIGN CM055
+12FBC ; [.514F.0020.0002] # CYPRO-MINOAN SIGN CM056
+12FBD ; [.5150.0020.0002] # CYPRO-MINOAN SIGN CM058
+12FBE ; [.5151.0020.0002] # CYPRO-MINOAN SIGN CM059
+12FBF ; [.5152.0020.0002] # CYPRO-MINOAN SIGN CM060
+12FC0 ; [.5153.0020.0002] # CYPRO-MINOAN SIGN CM061
+12FC1 ; [.5154.0020.0002] # CYPRO-MINOAN SIGN CM062
+12FC2 ; [.5155.0020.0002] # CYPRO-MINOAN SIGN CM063
+12FC3 ; [.5156.0020.0002] # CYPRO-MINOAN SIGN CM064
+12FC4 ; [.5157.0020.0002] # CYPRO-MINOAN SIGN CM066
+12FC5 ; [.5158.0020.0002] # CYPRO-MINOAN SIGN CM067
+12FC6 ; [.5159.0020.0002] # CYPRO-MINOAN SIGN CM068
+12FC7 ; [.515A.0020.0002] # CYPRO-MINOAN SIGN CM069
+12FC8 ; [.515B.0020.0002] # CYPRO-MINOAN SIGN CM070
+12FC9 ; [.515C.0020.0002] # CYPRO-MINOAN SIGN CM071
+12FCA ; [.515D.0020.0002] # CYPRO-MINOAN SIGN CM072
+12FCB ; [.515E.0020.0002] # CYPRO-MINOAN SIGN CM073
+12FCC ; [.515F.0020.0002] # CYPRO-MINOAN SIGN CM074
+12FCD ; [.5160.0020.0002] # CYPRO-MINOAN SIGN CM075
+12FCE ; [.5161.0020.0002] # CYPRO-MINOAN SIGN CM075B
+12FCF ; [.5162.0020.0002] # CYPRO-MINOAN SIGN CM076
+12FD0 ; [.5163.0020.0002] # CYPRO-MINOAN SIGN CM078
+12FD1 ; [.5164.0020.0002] # CYPRO-MINOAN SIGN CM079
+12FD2 ; [.5165.0020.0002] # CYPRO-MINOAN SIGN CM080
+12FD3 ; [.5166.0020.0002] # CYPRO-MINOAN SIGN CM081
+12FD4 ; [.5167.0020.0002] # CYPRO-MINOAN SIGN CM082
+12FD5 ; [.5168.0020.0002] # CYPRO-MINOAN SIGN CM083
+12FD6 ; [.5169.0020.0002] # CYPRO-MINOAN SIGN CM084
+12FD7 ; [.516A.0020.0002] # CYPRO-MINOAN SIGN CM085
+12FD8 ; [.516B.0020.0002] # CYPRO-MINOAN SIGN CM086
+12FD9 ; [.516C.0020.0002] # CYPRO-MINOAN SIGN CM087
+12FDA ; [.516D.0020.0002] # CYPRO-MINOAN SIGN CM088
+12FDB ; [.516E.0020.0002] # CYPRO-MINOAN SIGN CM089
+12FDC ; [.516F.0020.0002] # CYPRO-MINOAN SIGN CM090
+12FDD ; [.5170.0020.0002] # CYPRO-MINOAN SIGN CM091
+12FDE ; [.5171.0020.0002] # CYPRO-MINOAN SIGN CM092
+12FDF ; [.5172.0020.0002] # CYPRO-MINOAN SIGN CM094
+12FE0 ; [.5173.0020.0002] # CYPRO-MINOAN SIGN CM095
+12FE1 ; [.5174.0020.0002] # CYPRO-MINOAN SIGN CM096
+12FE2 ; [.5175.0020.0002] # CYPRO-MINOAN SIGN CM097
+12FE3 ; [.5176.0020.0002] # CYPRO-MINOAN SIGN CM098
+12FE4 ; [.5177.0020.0002] # CYPRO-MINOAN SIGN CM099
+12FE5 ; [.5178.0020.0002] # CYPRO-MINOAN SIGN CM100
+12FE6 ; [.5179.0020.0002] # CYPRO-MINOAN SIGN CM101
+12FE7 ; [.517A.0020.0002] # CYPRO-MINOAN SIGN CM102
+12FE8 ; [.517B.0020.0002] # CYPRO-MINOAN SIGN CM103
+12FE9 ; [.517C.0020.0002] # CYPRO-MINOAN SIGN CM104
+12FEA ; [.517D.0020.0002] # CYPRO-MINOAN SIGN CM105
+12FEB ; [.517E.0020.0002] # CYPRO-MINOAN SIGN CM107
+12FEC ; [.517F.0020.0002] # CYPRO-MINOAN SIGN CM108
+12FED ; [.5180.0020.0002] # CYPRO-MINOAN SIGN CM109
+12FEE ; [.5181.0020.0002] # CYPRO-MINOAN SIGN CM110
+12FEF ; [.5182.0020.0002] # CYPRO-MINOAN SIGN CM112
+12FF0 ; [.5183.0020.0002] # CYPRO-MINOAN SIGN CM114
+10A60 ; [.5184.0020.0002] # OLD SOUTH ARABIAN LETTER HE
+10A61 ; [.5185.0020.0002] # OLD SOUTH ARABIAN LETTER LAMEDH
+10A62 ; [.5186.0020.0002] # OLD SOUTH ARABIAN LETTER HETH
+10A63 ; [.5187.0020.0002] # OLD SOUTH ARABIAN LETTER MEM
+10A64 ; [.5188.0020.0002] # OLD SOUTH ARABIAN LETTER QOPH
+10A65 ; [.5189.0020.0002] # OLD SOUTH ARABIAN LETTER WAW
+10A66 ; [.518A.0020.0002] # OLD SOUTH ARABIAN LETTER SHIN
+10A67 ; [.518B.0020.0002] # OLD SOUTH ARABIAN LETTER RESH
+10A68 ; [.518C.0020.0002] # OLD SOUTH ARABIAN LETTER BETH
+10A69 ; [.518D.0020.0002] # OLD SOUTH ARABIAN LETTER TAW
+10A6A ; [.518E.0020.0002] # OLD SOUTH ARABIAN LETTER SAT
+10A6B ; [.518F.0020.0002] # OLD SOUTH ARABIAN LETTER KAPH
+10A6C ; [.5190.0020.0002] # OLD SOUTH ARABIAN LETTER NUN
+10A6D ; [.5191.0020.0002] # OLD SOUTH ARABIAN LETTER KHETH
+10A6E ; [.5192.0020.0002] # OLD SOUTH ARABIAN LETTER SADHE
+10A6F ; [.5193.0020.0002] # OLD SOUTH ARABIAN LETTER SAMEKH
+10A70 ; [.5194.0020.0002] # OLD SOUTH ARABIAN LETTER FE
+10A71 ; [.5195.0020.0002] # OLD SOUTH ARABIAN LETTER ALEF
+10A72 ; [.5196.0020.0002] # OLD SOUTH ARABIAN LETTER AYN
+10A73 ; [.5197.0020.0002] # OLD SOUTH ARABIAN LETTER DHADHE
+10A74 ; [.5198.0020.0002] # OLD SOUTH ARABIAN LETTER GIMEL
+10A75 ; [.5199.0020.0002] # OLD SOUTH ARABIAN LETTER DALETH
+10A76 ; [.519A.0020.0002] # OLD SOUTH ARABIAN LETTER GHAYN
+10A77 ; [.519B.0020.0002] # OLD SOUTH ARABIAN LETTER TETH
+10A78 ; [.519C.0020.0002] # OLD SOUTH ARABIAN LETTER ZAYN
+10A79 ; [.519D.0020.0002] # OLD SOUTH ARABIAN LETTER DHALETH
+10A7A ; [.519E.0020.0002] # OLD SOUTH ARABIAN LETTER YODH
+10A7B ; [.519F.0020.0002] # OLD SOUTH ARABIAN LETTER THAW
+10A7C ; [.51A0.0020.0002] # OLD SOUTH ARABIAN LETTER THETH
+10A80 ; [.51A1.0020.0002] # OLD NORTH ARABIAN LETTER HEH
+10A81 ; [.51A2.0020.0002] # OLD NORTH ARABIAN LETTER LAM
+10A82 ; [.51A3.0020.0002] # OLD NORTH ARABIAN LETTER HAH
+10A83 ; [.51A4.0020.0002] # OLD NORTH ARABIAN LETTER MEEM
+10A84 ; [.51A5.0020.0002] # OLD NORTH ARABIAN LETTER QAF
+10A85 ; [.51A6.0020.0002] # OLD NORTH ARABIAN LETTER WAW
+10A86 ; [.51A7.0020.0002] # OLD NORTH ARABIAN LETTER ES-2
+10A87 ; [.51A8.0020.0002] # OLD NORTH ARABIAN LETTER REH
+10A88 ; [.51A9.0020.0002] # OLD NORTH ARABIAN LETTER BEH
+10A89 ; [.51AA.0020.0002] # OLD NORTH ARABIAN LETTER TEH
+10A8A ; [.51AB.0020.0002] # OLD NORTH ARABIAN LETTER ES-1
+10A8B ; [.51AC.0020.0002] # OLD NORTH ARABIAN LETTER KAF
+10A8C ; [.51AD.0020.0002] # OLD NORTH ARABIAN LETTER NOON
+10A8D ; [.51AE.0020.0002] # OLD NORTH ARABIAN LETTER KHAH
+10A8E ; [.51AF.0020.0002] # OLD NORTH ARABIAN LETTER SAD
+10A8F ; [.51B0.0020.0002] # OLD NORTH ARABIAN LETTER ES-3
+10A90 ; [.51B1.0020.0002] # OLD NORTH ARABIAN LETTER FEH
+10A91 ; [.51B2.0020.0002] # OLD NORTH ARABIAN LETTER ALEF
+10A92 ; [.51B3.0020.0002] # OLD NORTH ARABIAN LETTER AIN
+10A93 ; [.51B4.0020.0002] # OLD NORTH ARABIAN LETTER DAD
+10A94 ; [.51B5.0020.0002] # OLD NORTH ARABIAN LETTER GEEM
+10A95 ; [.51B6.0020.0002] # OLD NORTH ARABIAN LETTER DAL
+10A96 ; [.51B7.0020.0002] # OLD NORTH ARABIAN LETTER GHAIN
+10A97 ; [.51B8.0020.0002] # OLD NORTH ARABIAN LETTER TAH
+10A98 ; [.51B9.0020.0002] # OLD NORTH ARABIAN LETTER ZAIN
+10A99 ; [.51BA.0020.0002] # OLD NORTH ARABIAN LETTER THAL
+10A9A ; [.51BB.0020.0002] # OLD NORTH ARABIAN LETTER YEH
+10A9B ; [.51BC.0020.0002] # OLD NORTH ARABIAN LETTER THEH
+10A9C ; [.51BD.0020.0002] # OLD NORTH ARABIAN LETTER ZAH
+10B00 ; [.51BE.0020.0002] # AVESTAN LETTER A
+10B01 ; [.51BF.0020.0002] # AVESTAN LETTER AA
+10B02 ; [.51C0.0020.0002] # AVESTAN LETTER AO
+10B03 ; [.51C1.0020.0002] # AVESTAN LETTER AAO
+10B04 ; [.51C2.0020.0002] # AVESTAN LETTER AN
+10B05 ; [.51C3.0020.0002] # AVESTAN LETTER AAN
+10B06 ; [.51C4.0020.0002] # AVESTAN LETTER AE
+10B07 ; [.51C5.0020.0002] # AVESTAN LETTER AEE
+10B08 ; [.51C6.0020.0002] # AVESTAN LETTER E
+10B09 ; [.51C7.0020.0002] # AVESTAN LETTER EE
+10B0A ; [.51C8.0020.0002] # AVESTAN LETTER O
+10B0B ; [.51C9.0020.0002] # AVESTAN LETTER OO
+10B0C ; [.51CA.0020.0002] # AVESTAN LETTER I
+10B0D ; [.51CB.0020.0002] # AVESTAN LETTER II
+10B0E ; [.51CC.0020.0002] # AVESTAN LETTER U
+10B0F ; [.51CD.0020.0002] # AVESTAN LETTER UU
+10B10 ; [.51CE.0020.0002] # AVESTAN LETTER KE
+10B11 ; [.51CF.0020.0002] # AVESTAN LETTER XE
+10B12 ; [.51D0.0020.0002] # AVESTAN LETTER XYE
+10B13 ; [.51D1.0020.0002] # AVESTAN LETTER XVE
+10B14 ; [.51D2.0020.0002] # AVESTAN LETTER GE
+10B15 ; [.51D3.0020.0002] # AVESTAN LETTER GGE
+10B16 ; [.51D4.0020.0002] # AVESTAN LETTER GHE
+10B17 ; [.51D5.0020.0002] # AVESTAN LETTER CE
+10B18 ; [.51D6.0020.0002] # AVESTAN LETTER JE
+10B19 ; [.51D7.0020.0002] # AVESTAN LETTER TE
+10B1A ; [.51D8.0020.0002] # AVESTAN LETTER THE
+10B1B ; [.51D9.0020.0002] # AVESTAN LETTER DE
+10B1C ; [.51DA.0020.0002] # AVESTAN LETTER DHE
+10B1D ; [.51DB.0020.0002] # AVESTAN LETTER TTE
+10B1E ; [.51DC.0020.0002] # AVESTAN LETTER PE
+10B1F ; [.51DD.0020.0002] # AVESTAN LETTER FE
+10B20 ; [.51DE.0020.0002] # AVESTAN LETTER BE
+10B21 ; [.51DF.0020.0002] # AVESTAN LETTER BHE
+10B22 ; [.51E0.0020.0002] # AVESTAN LETTER NGE
+10B23 ; [.51E1.0020.0002] # AVESTAN LETTER NGYE
+10B24 ; [.51E2.0020.0002] # AVESTAN LETTER NGVE
+10B25 ; [.51E3.0020.0002] # AVESTAN LETTER NE
+10B26 ; [.51E4.0020.0002] # AVESTAN LETTER NYE
+10B27 ; [.51E5.0020.0002] # AVESTAN LETTER NNE
+10B28 ; [.51E6.0020.0002] # AVESTAN LETTER ME
+10B29 ; [.51E7.0020.0002] # AVESTAN LETTER HME
+10B2A ; [.51E8.0020.0002] # AVESTAN LETTER YYE
+10B2B ; [.51E9.0020.0002] # AVESTAN LETTER YE
+10B2C ; [.51EA.0020.0002] # AVESTAN LETTER VE
+10B2D ; [.51EB.0020.0002] # AVESTAN LETTER RE
+10B2E ; [.51EB.0020.0004][.0000.0118.0004] # AVESTAN LETTER LE
+10B2F ; [.51EC.0020.0002] # AVESTAN LETTER SE
+10B30 ; [.51ED.0020.0002] # AVESTAN LETTER ZE
+10B31 ; [.51EE.0020.0002] # AVESTAN LETTER SHE
+10B32 ; [.51EF.0020.0002] # AVESTAN LETTER ZHE
+10B33 ; [.51F0.0020.0002] # AVESTAN LETTER SHYE
+10B34 ; [.51F1.0020.0002] # AVESTAN LETTER SSHE
+10B35 ; [.51F2.0020.0002] # AVESTAN LETTER HE
+10860 ; [.51F3.0020.0002] # PALMYRENE LETTER ALEPH
+10861 ; [.51F4.0020.0002] # PALMYRENE LETTER BETH
+10862 ; [.51F5.0020.0002] # PALMYRENE LETTER GIMEL
+10863 ; [.51F6.0020.0002] # PALMYRENE LETTER DALETH
+10864 ; [.51F7.0020.0002] # PALMYRENE LETTER HE
+10865 ; [.51F8.0020.0002] # PALMYRENE LETTER WAW
+10866 ; [.51F9.0020.0002] # PALMYRENE LETTER ZAYIN
+10867 ; [.51FA.0020.0002] # PALMYRENE LETTER HETH
+10868 ; [.51FB.0020.0002] # PALMYRENE LETTER TETH
+10869 ; [.51FC.0020.0002] # PALMYRENE LETTER YODH
+1086A ; [.51FD.0020.0002] # PALMYRENE LETTER KAPH
+1086B ; [.51FE.0020.0002] # PALMYRENE LETTER LAMEDH
+1086C ; [.51FF.0020.0002] # PALMYRENE LETTER MEM
+1086E ; [.5200.0020.0002] # PALMYRENE LETTER NUN
+1086D ; [.5200.0020.0019] # PALMYRENE LETTER FINAL NUN
+1086F ; [.5201.0020.0002] # PALMYRENE LETTER SAMEKH
+10870 ; [.5202.0020.0002] # PALMYRENE LETTER AYIN
+10871 ; [.5203.0020.0002] # PALMYRENE LETTER PE
+10872 ; [.5204.0020.0002] # PALMYRENE LETTER SADHE
+10873 ; [.5205.0020.0002] # PALMYRENE LETTER QOPH
+10874 ; [.5206.0020.0002] # PALMYRENE LETTER RESH
+10875 ; [.5207.0020.0002] # PALMYRENE LETTER SHIN
+10876 ; [.5208.0020.0002] # PALMYRENE LETTER TAW
+10881 ; [.5209.0020.0002] # NABATAEAN LETTER ALEPH
+10880 ; [.5209.0020.0019] # NABATAEAN LETTER FINAL ALEPH
+10883 ; [.520A.0020.0002] # NABATAEAN LETTER BETH
+10882 ; [.520A.0020.0019] # NABATAEAN LETTER FINAL BETH
+10884 ; [.520B.0020.0002] # NABATAEAN LETTER GIMEL
+10885 ; [.520C.0020.0002] # NABATAEAN LETTER DALETH
+10887 ; [.520D.0020.0002] # NABATAEAN LETTER HE
+10886 ; [.520D.0020.0019] # NABATAEAN LETTER FINAL HE
+10888 ; [.520E.0020.0002] # NABATAEAN LETTER WAW
+10889 ; [.520F.0020.0002] # NABATAEAN LETTER ZAYIN
+1088A ; [.5210.0020.0002] # NABATAEAN LETTER HETH
+1088B ; [.5211.0020.0002] # NABATAEAN LETTER TETH
+1088D ; [.5212.0020.0002] # NABATAEAN LETTER YODH
+1088C ; [.5212.0020.0019] # NABATAEAN LETTER FINAL YODH
+1088F ; [.5213.0020.0002] # NABATAEAN LETTER KAPH
+1088E ; [.5213.0020.0019] # NABATAEAN LETTER FINAL KAPH
+10891 ; [.5214.0020.0002] # NABATAEAN LETTER LAMEDH
+10890 ; [.5214.0020.0019] # NABATAEAN LETTER FINAL LAMEDH
+10893 ; [.5215.0020.0002] # NABATAEAN LETTER MEM
+10892 ; [.5215.0020.0019] # NABATAEAN LETTER FINAL MEM
+10895 ; [.5216.0020.0002] # NABATAEAN LETTER NUN
+10894 ; [.5216.0020.0019] # NABATAEAN LETTER FINAL NUN
+10896 ; [.5217.0020.0002] # NABATAEAN LETTER SAMEKH
+10897 ; [.5218.0020.0002] # NABATAEAN LETTER AYIN
+10898 ; [.5219.0020.0002] # NABATAEAN LETTER PE
+10899 ; [.521A.0020.0002] # NABATAEAN LETTER SADHE
+1089A ; [.521B.0020.0002] # NABATAEAN LETTER QOPH
+1089B ; [.521C.0020.0002] # NABATAEAN LETTER RESH
+1089D ; [.521D.0020.0002] # NABATAEAN LETTER SHIN
+1089C ; [.521D.0020.0019] # NABATAEAN LETTER FINAL SHIN
+1089E ; [.521E.0020.0002] # NABATAEAN LETTER TAW
+108E0 ; [.521F.0020.0002] # HATRAN LETTER ALEPH
+108E1 ; [.5220.0020.0002] # HATRAN LETTER BETH
+108E2 ; [.5221.0020.0002] # HATRAN LETTER GIMEL
+108E3 ; [.5222.0020.0002] # HATRAN LETTER DALETH-RESH
+108E4 ; [.5223.0020.0002] # HATRAN LETTER HE
+108E5 ; [.5224.0020.0002] # HATRAN LETTER WAW
+108E6 ; [.5225.0020.0002] # HATRAN LETTER ZAYN
+108E7 ; [.5226.0020.0002] # HATRAN LETTER HETH
+108E8 ; [.5227.0020.0002] # HATRAN LETTER TETH
+108E9 ; [.5228.0020.0002] # HATRAN LETTER YODH
+108EA ; [.5229.0020.0002] # HATRAN LETTER KAPH
+108EB ; [.522A.0020.0002] # HATRAN LETTER LAMEDH
+108EC ; [.522B.0020.0002] # HATRAN LETTER MEM
+108ED ; [.522C.0020.0002] # HATRAN LETTER NUN
+108EE ; [.522D.0020.0002] # HATRAN LETTER SAMEKH
+108EF ; [.522E.0020.0002] # HATRAN LETTER AYN
+108F0 ; [.522F.0020.0002] # HATRAN LETTER PE
+108F1 ; [.5230.0020.0002] # HATRAN LETTER SADHE
+108F2 ; [.5231.0020.0002] # HATRAN LETTER QOPH
+108F4 ; [.5232.0020.0002] # HATRAN LETTER SHIN
+108F5 ; [.5233.0020.0002] # HATRAN LETTER TAW
+10840 ; [.5234.0020.0002] # IMPERIAL ARAMAIC LETTER ALEPH
+10841 ; [.5235.0020.0002] # IMPERIAL ARAMAIC LETTER BETH
+10842 ; [.5236.0020.0002] # IMPERIAL ARAMAIC LETTER GIMEL
+10843 ; [.5237.0020.0002] # IMPERIAL ARAMAIC LETTER DALETH
+10844 ; [.5238.0020.0002] # IMPERIAL ARAMAIC LETTER HE
+10845 ; [.5239.0020.0002] # IMPERIAL ARAMAIC LETTER WAW
+10846 ; [.523A.0020.0002] # IMPERIAL ARAMAIC LETTER ZAYIN
+10847 ; [.523B.0020.0002] # IMPERIAL ARAMAIC LETTER HETH
+10848 ; [.523C.0020.0002] # IMPERIAL ARAMAIC LETTER TETH
+10849 ; [.523D.0020.0002] # IMPERIAL ARAMAIC LETTER YODH
+1084A ; [.523E.0020.0002] # IMPERIAL ARAMAIC LETTER KAPH
+1084B ; [.523F.0020.0002] # IMPERIAL ARAMAIC LETTER LAMEDH
+1084C ; [.5240.0020.0002] # IMPERIAL ARAMAIC LETTER MEM
+1084D ; [.5241.0020.0002] # IMPERIAL ARAMAIC LETTER NUN
+1084E ; [.5242.0020.0002] # IMPERIAL ARAMAIC LETTER SAMEKH
+1084F ; [.5243.0020.0002] # IMPERIAL ARAMAIC LETTER AYIN
+10850 ; [.5244.0020.0002] # IMPERIAL ARAMAIC LETTER PE
+10851 ; [.5245.0020.0002] # IMPERIAL ARAMAIC LETTER SADHE
+10852 ; [.5246.0020.0002] # IMPERIAL ARAMAIC LETTER QOPH
+10853 ; [.5247.0020.0002] # IMPERIAL ARAMAIC LETTER RESH
+10854 ; [.5248.0020.0002] # IMPERIAL ARAMAIC LETTER SHIN
+10855 ; [.5249.0020.0002] # IMPERIAL ARAMAIC LETTER TAW
+10B40 ; [.524A.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER ALEPH
+10B41 ; [.524B.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER BETH
+10B42 ; [.524C.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER GIMEL
+10B43 ; [.524D.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER DALETH
+10B44 ; [.524E.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER HE
+10B45 ; [.524F.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER WAW
+10B46 ; [.5250.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER ZAYIN
+10B47 ; [.5251.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER HETH
+10B48 ; [.5252.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER TETH
+10B49 ; [.5253.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER YODH
+10B4A ; [.5254.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER KAPH
+10B4B ; [.5255.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER LAMEDH
+10B4C ; [.5256.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER MEM
+10B4D ; [.5257.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER NUN
+10B4E ; [.5258.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER SAMEKH
+10B4F ; [.5259.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER AYIN
+10B50 ; [.525A.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER PE
+10B51 ; [.525B.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER SADHE
+10B52 ; [.525C.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER QOPH
+10B53 ; [.525D.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER RESH
+10B54 ; [.525E.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER SHIN
+10B55 ; [.525F.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER TAW
+10B60 ; [.5260.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER ALEPH
+10B61 ; [.5261.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER BETH
+10B62 ; [.5262.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER GIMEL
+10B63 ; [.5263.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER DALETH
+10B64 ; [.5264.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER HE
+10B65 ; [.5265.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER WAW-AYIN-RESH
+10B66 ; [.5266.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER ZAYIN
+10B67 ; [.5267.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER HETH
+10B68 ; [.5268.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER TETH
+10B69 ; [.5269.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER YODH
+10B6A ; [.526A.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER KAPH
+10B6B ; [.526B.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER LAMEDH
+10B6C ; [.526C.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER MEM-QOPH
+10B6D ; [.526D.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER NUN
+10B6E ; [.526E.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER SAMEKH
+10B6F ; [.526F.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER PE
+10B70 ; [.5270.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER SADHE
+10B71 ; [.5271.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER SHIN
+10B72 ; [.5272.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER TAW
+10B80 ; [.5273.0020.0002] # PSALTER PAHLAVI LETTER ALEPH
+10B81 ; [.5274.0020.0002] # PSALTER PAHLAVI LETTER BETH
+10B82 ; [.5275.0020.0002] # PSALTER PAHLAVI LETTER GIMEL
+10B83 ; [.5276.0020.0002] # PSALTER PAHLAVI LETTER DALETH
+10B84 ; [.5277.0020.0002] # PSALTER PAHLAVI LETTER HE
+10B85 ; [.5278.0020.0002] # PSALTER PAHLAVI LETTER WAW-AYIN-RESH
+10B86 ; [.5279.0020.0002] # PSALTER PAHLAVI LETTER ZAYIN
+10B87 ; [.527A.0020.0002] # PSALTER PAHLAVI LETTER HETH
+10B88 ; [.527B.0020.0002] # PSALTER PAHLAVI LETTER YODH
+10B89 ; [.527C.0020.0002] # PSALTER PAHLAVI LETTER KAPH
+10B8A ; [.527D.0020.0002] # PSALTER PAHLAVI LETTER LAMEDH
+10B8B ; [.527E.0020.0002] # PSALTER PAHLAVI LETTER MEM-QOPH
+10B8C ; [.527F.0020.0002] # PSALTER PAHLAVI LETTER NUN
+10B8D ; [.5280.0020.0002] # PSALTER PAHLAVI LETTER SAMEKH
+10B8E ; [.5281.0020.0002] # PSALTER PAHLAVI LETTER PE
+10B8F ; [.5282.0020.0002] # PSALTER PAHLAVI LETTER SADHE
+10B90 ; [.5283.0020.0002] # PSALTER PAHLAVI LETTER SHIN
+10B91 ; [.5284.0020.0002] # PSALTER PAHLAVI LETTER TAW
+10FE0 ; [.5285.0020.0002] # ELYMAIC LETTER ALEPH
+10FE1 ; [.5286.0020.0002] # ELYMAIC LETTER BETH
+10FE2 ; [.5287.0020.0002] # ELYMAIC LETTER GIMEL
+10FE3 ; [.5288.0020.0002] # ELYMAIC LETTER DALETH
+10FE4 ; [.5289.0020.0002] # ELYMAIC LETTER HE
+10FE5 ; [.528A.0020.0002] # ELYMAIC LETTER WAW
+10FE6 ; [.528B.0020.0002] # ELYMAIC LETTER ZAYIN
+10FF6 ; [.528B.0020.0004][.528E.0020.0004] # ELYMAIC LIGATURE ZAYIN-YODH
+10FE7 ; [.528C.0020.0002] # ELYMAIC LETTER HETH
+10FE8 ; [.528D.0020.0002] # ELYMAIC LETTER TETH
+10FE9 ; [.528E.0020.0002] # ELYMAIC LETTER YODH
+10FEA ; [.528F.0020.0002] # ELYMAIC LETTER KAPH
+10FEB ; [.5290.0020.0002] # ELYMAIC LETTER LAMEDH
+10FEC ; [.5291.0020.0002] # ELYMAIC LETTER MEM
+10FED ; [.5292.0020.0002] # ELYMAIC LETTER NUN
+10FEE ; [.5293.0020.0002] # ELYMAIC LETTER SAMEKH
+10FEF ; [.5294.0020.0002] # ELYMAIC LETTER AYIN
+10FF0 ; [.5295.0020.0002] # ELYMAIC LETTER PE
+10FF1 ; [.5296.0020.0002] # ELYMAIC LETTER SADHE
+10FF2 ; [.5297.0020.0002] # ELYMAIC LETTER QOPH
+10FF3 ; [.5298.0020.0002] # ELYMAIC LETTER RESH
+10FF4 ; [.5299.0020.0002] # ELYMAIC LETTER SHIN
+10FF5 ; [.529A.0020.0002] # ELYMAIC LETTER TAW
+10AC0 ; [.529B.0020.0002] # MANICHAEAN LETTER ALEPH
+10AC1 ; [.529C.0020.0002] # MANICHAEAN LETTER BETH
+10AC2 ; [.529D.0020.0002] # MANICHAEAN LETTER BHETH
+10AC3 ; [.529E.0020.0002] # MANICHAEAN LETTER GIMEL
+10AC4 ; [.529F.0020.0002] # MANICHAEAN LETTER GHIMEL
+10AC5 ; [.52A0.0020.0002] # MANICHAEAN LETTER DALETH
+10AC6 ; [.52A1.0020.0002] # MANICHAEAN LETTER HE
+10AC7 ; [.52A2.0020.0002] # MANICHAEAN LETTER WAW
+10AC8 ; [.52A2.0020.0004][.0000.0119.0004] # MANICHAEAN SIGN UD
+10AC9 ; [.52A3.0020.0002] # MANICHAEAN LETTER ZAYIN
+10ACA ; [.52A4.0020.0002] # MANICHAEAN LETTER ZHAYIN
+10ACB ; [.52A5.0020.0002] # MANICHAEAN LETTER JAYIN
+10ACC ; [.52A6.0020.0002] # MANICHAEAN LETTER JHAYIN
+10ACD ; [.52A7.0020.0002] # MANICHAEAN LETTER HETH
+10ACE ; [.52A8.0020.0002] # MANICHAEAN LETTER TETH
+10ACF ; [.52A9.0020.0002] # MANICHAEAN LETTER YODH
+10AD0 ; [.52AA.0020.0002] # MANICHAEAN LETTER KAPH
+10AD1 ; [.52AB.0020.0002] # MANICHAEAN LETTER XAPH
+10AD2 ; [.52AC.0020.0002] # MANICHAEAN LETTER KHAPH
+10AD3 ; [.52AD.0020.0002] # MANICHAEAN LETTER LAMEDH
+10AD4 ; [.52AE.0020.0002] # MANICHAEAN LETTER DHAMEDH
+10AD5 ; [.52AF.0020.0002] # MANICHAEAN LETTER THAMEDH
+10AD6 ; [.52B0.0020.0002] # MANICHAEAN LETTER MEM
+10AD7 ; [.52B1.0020.0002] # MANICHAEAN LETTER NUN
+10AD8 ; [.52B2.0020.0002] # MANICHAEAN LETTER SAMEKH
+10AD9 ; [.52B3.0020.0002] # MANICHAEAN LETTER AYIN
+10ADA ; [.52B4.0020.0002] # MANICHAEAN LETTER AAYIN
+10ADB ; [.52B5.0020.0002] # MANICHAEAN LETTER PE
+10ADC ; [.52B6.0020.0002] # MANICHAEAN LETTER FE
+10ADD ; [.52B7.0020.0002] # MANICHAEAN LETTER SADHE
+10ADE ; [.52B8.0020.0002] # MANICHAEAN LETTER QOPH
+10ADF ; [.52B9.0020.0002] # MANICHAEAN LETTER XOPH
+10AE0 ; [.52BA.0020.0002] # MANICHAEAN LETTER QHOPH
+10AE1 ; [.52BB.0020.0002] # MANICHAEAN LETTER RESH
+10AE2 ; [.52BC.0020.0002] # MANICHAEAN LETTER SHIN
+10AE3 ; [.52BD.0020.0002] # MANICHAEAN LETTER SSHIN
+10AE4 ; [.52BE.0020.0002] # MANICHAEAN LETTER TAW
+10F00 ; [.52BF.0020.0002] # OLD SOGDIAN LETTER ALEPH
+10F01 ; [.52BF.0020.0019] # OLD SOGDIAN LETTER FINAL ALEPH
+10F02 ; [.52C0.0020.0002] # OLD SOGDIAN LETTER BETH
+10F03 ; [.52C0.0020.0019] # OLD SOGDIAN LETTER FINAL BETH
+10F04 ; [.52C1.0020.0002] # OLD SOGDIAN LETTER GIMEL
+10F05 ; [.52C2.0020.0002] # OLD SOGDIAN LETTER HE
+10F06 ; [.52C2.0020.0019] # OLD SOGDIAN LETTER FINAL HE
+10F07 ; [.52C3.0020.0002] # OLD SOGDIAN LETTER WAW
+10F08 ; [.52C4.0020.0002] # OLD SOGDIAN LETTER ZAYIN
+10F09 ; [.52C5.0020.0002] # OLD SOGDIAN LETTER HETH
+10F0A ; [.52C6.0020.0002] # OLD SOGDIAN LETTER YODH
+10F0B ; [.52C7.0020.0002] # OLD SOGDIAN LETTER KAPH
+10F0C ; [.52C8.0020.0002] # OLD SOGDIAN LETTER LAMEDH
+10F0D ; [.52C9.0020.0002] # OLD SOGDIAN LETTER MEM
+10F0E ; [.52CA.0020.0002] # OLD SOGDIAN LETTER NUN
+10F0F ; [.52CA.0020.0019] # OLD SOGDIAN LETTER FINAL NUN
+10F10 ; [.52CA.0020.0004][.0000.0119.0004] # OLD SOGDIAN LETTER FINAL NUN WITH VERTICAL TAIL
+10F11 ; [.52CB.0020.0002] # OLD SOGDIAN LETTER SAMEKH
+10F12 ; [.52CC.0020.0002] # OLD SOGDIAN LETTER AYIN
+10F13 ; [.52CC.0020.0004][.0000.0119.0004] # OLD SOGDIAN LETTER ALTERNATE AYIN
+10F27 ; [.52CC.0020.0004][.52CF.0020.0004] # OLD SOGDIAN LIGATURE AYIN-DALETH
+10F14 ; [.52CD.0020.0002] # OLD SOGDIAN LETTER PE
+10F15 ; [.52CE.0020.0002] # OLD SOGDIAN LETTER SADHE
+10F16 ; [.52CE.0020.0019] # OLD SOGDIAN LETTER FINAL SADHE
+10F17 ; [.52CE.0020.0004][.0000.0119.0004] # OLD SOGDIAN LETTER FINAL SADHE WITH VERTICAL TAIL
+10F18 ; [.52CF.0020.0002] # OLD SOGDIAN LETTER RESH-AYIN-DALETH
+10F19 ; [.52D0.0020.0002] # OLD SOGDIAN LETTER SHIN
+10F1A ; [.52D1.0020.0002] # OLD SOGDIAN LETTER TAW
+10F1B ; [.52D1.0020.0019] # OLD SOGDIAN LETTER FINAL TAW
+10F1C ; [.52D1.0020.0004][.0000.0119.0004] # OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL
+10F30 ; [.52D2.0020.0002] # SOGDIAN LETTER ALEPH
+10F31 ; [.52D3.0020.0002] # SOGDIAN LETTER BETH
+10F32 ; [.52D4.0020.0002] # SOGDIAN LETTER GIMEL
+10F33 ; [.52D5.0020.0002] # SOGDIAN LETTER HE
+10F34 ; [.52D6.0020.0002] # SOGDIAN LETTER WAW
+10F35 ; [.52D7.0020.0002] # SOGDIAN LETTER ZAYIN
+10F36 ; [.52D8.0020.0002] # SOGDIAN LETTER HETH
+10F37 ; [.52D9.0020.0002] # SOGDIAN LETTER YODH
+10F38 ; [.52DA.0020.0002] # SOGDIAN LETTER KAPH
+10F39 ; [.52DB.0020.0002] # SOGDIAN LETTER LAMEDH
+10F3A ; [.52DC.0020.0002] # SOGDIAN LETTER MEM
+10F3B ; [.52DD.0020.0002] # SOGDIAN LETTER NUN
+10F3C ; [.52DE.0020.0002] # SOGDIAN LETTER SAMEKH
+10F3D ; [.52DF.0020.0002] # SOGDIAN LETTER AYIN
+10F3E ; [.52E0.0020.0002] # SOGDIAN LETTER PE
+10F3F ; [.52E1.0020.0002] # SOGDIAN LETTER SADHE
+10F40 ; [.52E2.0020.0002] # SOGDIAN LETTER RESH-AYIN
+10F41 ; [.52E3.0020.0002] # SOGDIAN LETTER SHIN
+10F45 ; [.52E3.0020.0004][.0000.0119.0004] # SOGDIAN INDEPENDENT SHIN
+10F42 ; [.52E4.0020.0002] # SOGDIAN LETTER TAW
+10F43 ; [.52E5.0020.0002] # SOGDIAN LETTER FETH
+10F44 ; [.52E6.0020.0002] # SOGDIAN LETTER LESH
+10F70 ; [.52E7.0020.0002] # OLD UYGHUR LETTER ALEPH
+10F71 ; [.52E8.0020.0002] # OLD UYGHUR LETTER BETH
+10F72 ; [.52E9.0020.0002] # OLD UYGHUR LETTER GIMEL-HETH
+10F73 ; [.52EA.0020.0002] # OLD UYGHUR LETTER WAW
+10F74 ; [.52EB.0020.0002] # OLD UYGHUR LETTER ZAYIN
+10F75 ; [.52EC.0020.0002] # OLD UYGHUR LETTER FINAL HETH
+10F76 ; [.52ED.0020.0002] # OLD UYGHUR LETTER YODH
+10F77 ; [.52EE.0020.0002] # OLD UYGHUR LETTER KAPH
+10F78 ; [.52EF.0020.0002] # OLD UYGHUR LETTER LAMEDH
+10F79 ; [.52F0.0020.0002] # OLD UYGHUR LETTER MEM
+10F7A ; [.52F1.0020.0002] # OLD UYGHUR LETTER NUN
+10F7B ; [.52F2.0020.0002] # OLD UYGHUR LETTER SAMEKH
+10F7C ; [.52F3.0020.0002] # OLD UYGHUR LETTER PE
+10F7D ; [.52F4.0020.0002] # OLD UYGHUR LETTER SADHE
+10F7E ; [.52F5.0020.0002] # OLD UYGHUR LETTER RESH
+10F7F ; [.52F6.0020.0002] # OLD UYGHUR LETTER SHIN
+10F80 ; [.52F7.0020.0002] # OLD UYGHUR LETTER TAW
+10F81 ; [.52F8.0020.0002] # OLD UYGHUR LETTER LESH
+10E80 ; [.52F9.0020.0002] # YEZIDI LETTER ELIF
+10E81 ; [.52FA.0020.0002] # YEZIDI LETTER BE
+10E82 ; [.52FB.0020.0002] # YEZIDI LETTER PE
+10E83 ; [.52FC.0020.0002] # YEZIDI LETTER PHE
+10E84 ; [.52FD.0020.0002] # YEZIDI LETTER THE
+10E85 ; [.52FE.0020.0002] # YEZIDI LETTER SE
+10E86 ; [.52FF.0020.0002] # YEZIDI LETTER CIM
+10E87 ; [.5300.0020.0002] # YEZIDI LETTER CHIM
+10E88 ; [.5301.0020.0002] # YEZIDI LETTER CHHIM
+10E89 ; [.5302.0020.0002] # YEZIDI LETTER HHA
+10E8A ; [.5303.0020.0002] # YEZIDI LETTER XA
+10E8B ; [.5304.0020.0002] # YEZIDI LETTER DAL
+10E8C ; [.5305.0020.0002] # YEZIDI LETTER ZAL
+10E8D ; [.5306.0020.0002] # YEZIDI LETTER RA
+10E8E ; [.5307.0020.0002] # YEZIDI LETTER RHA
+10E8F ; [.5308.0020.0002] # YEZIDI LETTER ZA
+10E90 ; [.5309.0020.0002] # YEZIDI LETTER JA
+10E91 ; [.530A.0020.0002] # YEZIDI LETTER SIN
+10E92 ; [.530B.0020.0002] # YEZIDI LETTER SHIN
+10E93 ; [.530C.0020.0002] # YEZIDI LETTER SAD
+10E94 ; [.530D.0020.0002] # YEZIDI LETTER DAD
+10E95 ; [.530E.0020.0002] # YEZIDI LETTER TA
+10E96 ; [.530F.0020.0002] # YEZIDI LETTER ZE
+10E97 ; [.5310.0020.0002] # YEZIDI LETTER EYN
+10E98 ; [.5311.0020.0002] # YEZIDI LETTER XHEYN
+10E99 ; [.5312.0020.0002] # YEZIDI LETTER FA
+10E9A ; [.5313.0020.0002] # YEZIDI LETTER VA
+10E9B ; [.5314.0020.0002] # YEZIDI LETTER VA ALTERNATE FORM
+10E9C ; [.5315.0020.0002] # YEZIDI LETTER QAF
+10E9D ; [.5316.0020.0002] # YEZIDI LETTER KAF
+10E9E ; [.5317.0020.0002] # YEZIDI LETTER KHAF
+10E9F ; [.5318.0020.0002] # YEZIDI LETTER GAF
+10EA0 ; [.5319.0020.0002] # YEZIDI LETTER LAM
+10EB0 ; [.531A.0020.0002] # YEZIDI LETTER LAM WITH DOT ABOVE
+10EA1 ; [.531B.0020.0002] # YEZIDI LETTER MIM
+10EA2 ; [.531C.0020.0002] # YEZIDI LETTER NUN
+10EA3 ; [.531D.0020.0002] # YEZIDI LETTER UM
+10EA4 ; [.531E.0020.0002] # YEZIDI LETTER WAW
+10EA5 ; [.531F.0020.0002] # YEZIDI LETTER OW
+10EA6 ; [.5320.0020.0002] # YEZIDI LETTER EW
+10EA7 ; [.5321.0020.0002] # YEZIDI LETTER HAY
+10EA8 ; [.5322.0020.0002] # YEZIDI LETTER YOT
+10EB1 ; [.5323.0020.0002] # YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE
+10EA9 ; [.5324.0020.0002] # YEZIDI LETTER ET
+10FB0 ; [.5325.0020.0002] # CHORASMIAN LETTER ALEPH
+10FB1 ; [.5326.0020.0002] # CHORASMIAN LETTER SMALL ALEPH
+10FB2 ; [.5327.0020.0002] # CHORASMIAN LETTER BETH
+10FB3 ; [.5328.0020.0002] # CHORASMIAN LETTER GIMEL
+10FB4 ; [.5329.0020.0002] # CHORASMIAN LETTER DALETH
+10FB5 ; [.532A.0020.0002] # CHORASMIAN LETTER HE
+10FB6 ; [.532B.0020.0002] # CHORASMIAN LETTER WAW
+10FB7 ; [.532C.0020.0002] # CHORASMIAN LETTER CURLED WAW
+10FB8 ; [.532D.0020.0002] # CHORASMIAN LETTER ZAYIN
+10FB9 ; [.532E.0020.0002] # CHORASMIAN LETTER HETH
+10FBA ; [.532F.0020.0002] # CHORASMIAN LETTER YODH
+10FBB ; [.5330.0020.0002] # CHORASMIAN LETTER KAPH
+10FBC ; [.5331.0020.0002] # CHORASMIAN LETTER LAMEDH
+10FBD ; [.5332.0020.0002] # CHORASMIAN LETTER MEM
+10FBE ; [.5333.0020.0002] # CHORASMIAN LETTER NUN
+10FBF ; [.5334.0020.0002] # CHORASMIAN LETTER SAMEKH
+10FC0 ; [.5335.0020.0002] # CHORASMIAN LETTER AYIN
+10FC1 ; [.5336.0020.0002] # CHORASMIAN LETTER PE
+10FC2 ; [.5337.0020.0002] # CHORASMIAN LETTER RESH
+10FC3 ; [.5338.0020.0002] # CHORASMIAN LETTER SHIN
+10FC4 ; [.5339.0020.0002] # CHORASMIAN LETTER TAW
+10380 ; [.533A.0020.0002] # UGARITIC LETTER ALPA
+10381 ; [.533B.0020.0002] # UGARITIC LETTER BETA
+10382 ; [.533C.0020.0002] # UGARITIC LETTER GAMLA
+10383 ; [.533D.0020.0002] # UGARITIC LETTER KHA
+10384 ; [.533E.0020.0002] # UGARITIC LETTER DELTA
+10385 ; [.533F.0020.0002] # UGARITIC LETTER HO
+10386 ; [.5340.0020.0002] # UGARITIC LETTER WO
+10387 ; [.5341.0020.0002] # UGARITIC LETTER ZETA
+10388 ; [.5342.0020.0002] # UGARITIC LETTER HOTA
+10389 ; [.5343.0020.0002] # UGARITIC LETTER TET
+1038A ; [.5344.0020.0002] # UGARITIC LETTER YOD
+1038B ; [.5345.0020.0002] # UGARITIC LETTER KAF
+1038C ; [.5346.0020.0002] # UGARITIC LETTER SHIN
+1038D ; [.5347.0020.0002] # UGARITIC LETTER LAMDA
+1038E ; [.5348.0020.0002] # UGARITIC LETTER MEM
+1038F ; [.5349.0020.0002] # UGARITIC LETTER DHAL
+10390 ; [.534A.0020.0002] # UGARITIC LETTER NUN
+10391 ; [.534B.0020.0002] # UGARITIC LETTER ZU
+10392 ; [.534C.0020.0002] # UGARITIC LETTER SAMKA
+10393 ; [.534D.0020.0002] # UGARITIC LETTER AIN
+10394 ; [.534E.0020.0002] # UGARITIC LETTER PU
+10395 ; [.534F.0020.0002] # UGARITIC LETTER SADE
+10396 ; [.5350.0020.0002] # UGARITIC LETTER QOPA
+10397 ; [.5351.0020.0002] # UGARITIC LETTER RASHA
+10398 ; [.5352.0020.0002] # UGARITIC LETTER THANNA
+10399 ; [.5353.0020.0002] # UGARITIC LETTER GHAIN
+1039A ; [.5354.0020.0002] # UGARITIC LETTER TO
+1039B ; [.5355.0020.0002] # UGARITIC LETTER I
+1039C ; [.5356.0020.0002] # UGARITIC LETTER U
+1039D ; [.5357.0020.0002] # UGARITIC LETTER SSU
+103A0 ; [.5358.0020.0002] # OLD PERSIAN SIGN A
+103A1 ; [.5359.0020.0002] # OLD PERSIAN SIGN I
+103A2 ; [.535A.0020.0002] # OLD PERSIAN SIGN U
+103A3 ; [.535B.0020.0002] # OLD PERSIAN SIGN KA
+103A4 ; [.535C.0020.0002] # OLD PERSIAN SIGN KU
+103A5 ; [.535D.0020.0002] # OLD PERSIAN SIGN GA
+103A6 ; [.535E.0020.0002] # OLD PERSIAN SIGN GU
+103A7 ; [.535F.0020.0002] # OLD PERSIAN SIGN XA
+103A8 ; [.5360.0020.0002] # OLD PERSIAN SIGN CA
+103A9 ; [.5361.0020.0002] # OLD PERSIAN SIGN JA
+103AA ; [.5362.0020.0002] # OLD PERSIAN SIGN JI
+103AB ; [.5363.0020.0002] # OLD PERSIAN SIGN TA
+103AC ; [.5364.0020.0002] # OLD PERSIAN SIGN TU
+103AD ; [.5365.0020.0002] # OLD PERSIAN SIGN DA
+103AE ; [.5366.0020.0002] # OLD PERSIAN SIGN DI
+103AF ; [.5367.0020.0002] # OLD PERSIAN SIGN DU
+103B0 ; [.5368.0020.0002] # OLD PERSIAN SIGN THA
+103B1 ; [.5369.0020.0002] # OLD PERSIAN SIGN PA
+103B2 ; [.536A.0020.0002] # OLD PERSIAN SIGN BA
+103B3 ; [.536B.0020.0002] # OLD PERSIAN SIGN FA
+103B4 ; [.536C.0020.0002] # OLD PERSIAN SIGN NA
+103B5 ; [.536D.0020.0002] # OLD PERSIAN SIGN NU
+103B6 ; [.536E.0020.0002] # OLD PERSIAN SIGN MA
+103B7 ; [.536F.0020.0002] # OLD PERSIAN SIGN MI
+103B8 ; [.5370.0020.0002] # OLD PERSIAN SIGN MU
+103B9 ; [.5371.0020.0002] # OLD PERSIAN SIGN YA
+103BA ; [.5372.0020.0002] # OLD PERSIAN SIGN VA
+103BB ; [.5373.0020.0002] # OLD PERSIAN SIGN VI
+103BC ; [.5374.0020.0002] # OLD PERSIAN SIGN RA
+103BD ; [.5375.0020.0002] # OLD PERSIAN SIGN RU
+103BE ; [.5376.0020.0002] # OLD PERSIAN SIGN LA
+103BF ; [.5377.0020.0002] # OLD PERSIAN SIGN SA
+103C0 ; [.5378.0020.0002] # OLD PERSIAN SIGN ZA
+103C1 ; [.5379.0020.0002] # OLD PERSIAN SIGN SHA
+103C2 ; [.537A.0020.0002] # OLD PERSIAN SIGN SSA
+103C3 ; [.537B.0020.0002] # OLD PERSIAN SIGN HA
+103C8 ; [.537C.0020.0002] # OLD PERSIAN SIGN AURAMAZDAA
+103C9 ; [.537D.0020.0002] # OLD PERSIAN SIGN AURAMAZDAA-2
+103CA ; [.537E.0020.0002] # OLD PERSIAN SIGN AURAMAZDAAHA
+103CB ; [.537F.0020.0002] # OLD PERSIAN SIGN XSHAAYATHIYA
+103CC ; [.5380.0020.0002] # OLD PERSIAN SIGN DAHYAAUSH
+103CD ; [.5381.0020.0002] # OLD PERSIAN SIGN DAHYAAUSH-2
+103CE ; [.5382.0020.0002] # OLD PERSIAN SIGN BAGA
+103CF ; [.5383.0020.0002] # OLD PERSIAN SIGN BUUMISH
+12000 ; [.5384.0020.0002] # CUNEIFORM SIGN A
+12001 ; [.5385.0020.0002] # CUNEIFORM SIGN A TIMES A
+12002 ; [.5386.0020.0002] # CUNEIFORM SIGN A TIMES BAD
+12003 ; [.5387.0020.0002] # CUNEIFORM SIGN A TIMES GAN2 TENU
+12004 ; [.5388.0020.0002] # CUNEIFORM SIGN A TIMES HA
+12005 ; [.5389.0020.0002] # CUNEIFORM SIGN A TIMES IGI
+12006 ; [.538A.0020.0002] # CUNEIFORM SIGN A TIMES LAGAR GUNU
+12007 ; [.538B.0020.0002] # CUNEIFORM SIGN A TIMES MUSH
+12008 ; [.538C.0020.0002] # CUNEIFORM SIGN A TIMES SAG
+12009 ; [.538D.0020.0002] # CUNEIFORM SIGN A2
+1200A ; [.538E.0020.0002] # CUNEIFORM SIGN AB
+1200B ; [.538F.0020.0002] # CUNEIFORM SIGN AB TIMES ASH2
+1200C ; [.5390.0020.0002] # CUNEIFORM SIGN AB TIMES DUN3 GUNU
+1200D ; [.5391.0020.0002] # CUNEIFORM SIGN AB TIMES GAL
+1200E ; [.5392.0020.0002] # CUNEIFORM SIGN AB TIMES GAN2 TENU
+1200F ; [.5393.0020.0002] # CUNEIFORM SIGN AB TIMES HA
+12010 ; [.5394.0020.0002] # CUNEIFORM SIGN AB TIMES IGI GUNU
+12011 ; [.5395.0020.0002] # CUNEIFORM SIGN AB TIMES IMIN
+12012 ; [.5396.0020.0002] # CUNEIFORM SIGN AB TIMES LAGAB
+12013 ; [.5397.0020.0002] # CUNEIFORM SIGN AB TIMES SHESH
+12014 ; [.5398.0020.0002] # CUNEIFORM SIGN AB TIMES U PLUS U PLUS U
+12015 ; [.5399.0020.0002] # CUNEIFORM SIGN AB GUNU
+12016 ; [.539A.0020.0002] # CUNEIFORM SIGN AB2
+12017 ; [.539B.0020.0002] # CUNEIFORM SIGN AB2 TIMES BALAG
+12018 ; [.539C.0020.0002] # CUNEIFORM SIGN AB2 TIMES GAN2 TENU
+12019 ; [.539D.0020.0002] # CUNEIFORM SIGN AB2 TIMES ME PLUS EN
+1201A ; [.539E.0020.0002] # CUNEIFORM SIGN AB2 TIMES SHA3
+1201B ; [.539F.0020.0002] # CUNEIFORM SIGN AB2 TIMES TAK4
+1201C ; [.53A0.0020.0002] # CUNEIFORM SIGN AD
+1201D ; [.53A1.0020.0002] # CUNEIFORM SIGN AK
+1201E ; [.53A2.0020.0002] # CUNEIFORM SIGN AK TIMES ERIN2
+1201F ; [.53A3.0020.0002] # CUNEIFORM SIGN AK TIMES SHITA PLUS GISH
+12020 ; [.53A4.0020.0002] # CUNEIFORM SIGN AL
+12021 ; [.53A5.0020.0002] # CUNEIFORM SIGN AL TIMES AL
+12022 ; [.53A6.0020.0002] # CUNEIFORM SIGN AL TIMES DIM2
+12023 ; [.53A7.0020.0002] # CUNEIFORM SIGN AL TIMES GISH
+12024 ; [.53A8.0020.0002] # CUNEIFORM SIGN AL TIMES HA
+12025 ; [.53A9.0020.0002] # CUNEIFORM SIGN AL TIMES KAD3
+12026 ; [.53AA.0020.0002] # CUNEIFORM SIGN AL TIMES KI
+12027 ; [.53AB.0020.0002] # CUNEIFORM SIGN AL TIMES SHE
+12028 ; [.53AC.0020.0002] # CUNEIFORM SIGN AL TIMES USH
+12029 ; [.53AD.0020.0002] # CUNEIFORM SIGN ALAN
+1202A ; [.53AE.0020.0002] # CUNEIFORM SIGN ALEPH
+1202B ; [.53AF.0020.0002] # CUNEIFORM SIGN AMAR
+1202C ; [.53B0.0020.0002] # CUNEIFORM SIGN AMAR TIMES SHE
+1202D ; [.53B1.0020.0002] # CUNEIFORM SIGN AN
+1202E ; [.53B2.0020.0002] # CUNEIFORM SIGN AN OVER AN
+1202F ; [.53B3.0020.0002] # CUNEIFORM SIGN AN THREE TIMES
+12030 ; [.53B4.0020.0002] # CUNEIFORM SIGN AN PLUS NAGA OPPOSING AN PLUS NAGA
+12031 ; [.53B5.0020.0002] # CUNEIFORM SIGN AN PLUS NAGA SQUARED
+12032 ; [.53B6.0020.0002] # CUNEIFORM SIGN ANSHE
+12033 ; [.53B7.0020.0002] # CUNEIFORM SIGN APIN
+12034 ; [.53B8.0020.0002] # CUNEIFORM SIGN ARAD
+12035 ; [.53B9.0020.0002] # CUNEIFORM SIGN ARAD TIMES KUR
+12036 ; [.53BA.0020.0002] # CUNEIFORM SIGN ARKAB
+12037 ; [.53BB.0020.0002] # CUNEIFORM SIGN ASAL2
+12038 ; [.53BC.0020.0002] # CUNEIFORM SIGN ASH
+12039 ; [.53BD.0020.0002] # CUNEIFORM SIGN ASH ZIDA TENU
+1203A ; [.53BE.0020.0002] # CUNEIFORM SIGN ASH KABA TENU
+1203B ; [.53BF.0020.0002] # CUNEIFORM SIGN ASH OVER ASH TUG2 OVER TUG2 TUG2 OVER TUG2 PAP
+1203C ; [.53C0.0020.0002] # CUNEIFORM SIGN ASH OVER ASH OVER ASH
+1203D ; [.53C1.0020.0002] # CUNEIFORM SIGN ASH OVER ASH OVER ASH CROSSING ASH OVER ASH OVER ASH
+1203E ; [.53C2.0020.0002] # CUNEIFORM SIGN ASH2
+1203F ; [.53C3.0020.0002] # CUNEIFORM SIGN ASHGAB
+12040 ; [.53C4.0020.0002] # CUNEIFORM SIGN BA
+12041 ; [.53C5.0020.0002] # CUNEIFORM SIGN BAD
+12042 ; [.53C6.0020.0002] # CUNEIFORM SIGN BAG3
+12043 ; [.53C7.0020.0002] # CUNEIFORM SIGN BAHAR2
+12044 ; [.53C8.0020.0002] # CUNEIFORM SIGN BAL
+12045 ; [.53C9.0020.0002] # CUNEIFORM SIGN BAL OVER BAL
+12046 ; [.53CA.0020.0002] # CUNEIFORM SIGN BALAG
+12047 ; [.53CB.0020.0002] # CUNEIFORM SIGN BAR
+12048 ; [.53CC.0020.0002] # CUNEIFORM SIGN BARA2
+12049 ; [.53CD.0020.0002] # CUNEIFORM SIGN BI
+1204A ; [.53CE.0020.0002] # CUNEIFORM SIGN BI TIMES A
+1204B ; [.53CF.0020.0002] # CUNEIFORM SIGN BI TIMES GAR
+1204C ; [.53D0.0020.0002] # CUNEIFORM SIGN BI TIMES IGI GUNU
+1204D ; [.53D1.0020.0002] # CUNEIFORM SIGN BU
+1204E ; [.53D2.0020.0002] # CUNEIFORM SIGN BU OVER BU AB
+1204F ; [.53D3.0020.0002] # CUNEIFORM SIGN BU OVER BU UN
+12050 ; [.53D4.0020.0002] # CUNEIFORM SIGN BU CROSSING BU
+12051 ; [.53D5.0020.0002] # CUNEIFORM SIGN BULUG
+12052 ; [.53D6.0020.0002] # CUNEIFORM SIGN BULUG OVER BULUG
+12053 ; [.53D7.0020.0002] # CUNEIFORM SIGN BUR
+12054 ; [.53D8.0020.0002] # CUNEIFORM SIGN BUR2
+12055 ; [.53D9.0020.0002] # CUNEIFORM SIGN DA
+12056 ; [.53DA.0020.0002] # CUNEIFORM SIGN DAG
+12057 ; [.53DB.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES A PLUS MASH
+12058 ; [.53DC.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES AMAR
+12059 ; [.53DD.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES BALAG
+1205A ; [.53DE.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES BI
+1205B ; [.53DF.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES GA
+1205C ; [.53E0.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES GA PLUS MASH
+1205D ; [.53E1.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES GI
+1205E ; [.53E2.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES GIR2
+1205F ; [.53E3.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES GUD
+12060 ; [.53E4.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES HA
+12061 ; [.53E5.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES IR
+12062 ; [.53E6.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES IR PLUS LU
+12063 ; [.53E7.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES KAK
+12064 ; [.53E8.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES LA
+12065 ; [.53E9.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES LU
+12066 ; [.53EA.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES LU PLUS MASH2
+12067 ; [.53EB.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES LUM
+12068 ; [.53EC.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES NE
+12069 ; [.53ED.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES PAP PLUS PAP
+1206A ; [.53EE.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES SI
+1206B ; [.53EF.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES TAK4
+1206C ; [.53F0.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES U2 PLUS GIR2
+1206D ; [.53F1.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES USH
+1206E ; [.53F2.0020.0002] # CUNEIFORM SIGN DAM
+1206F ; [.53F3.0020.0002] # CUNEIFORM SIGN DAR
+12070 ; [.53F4.0020.0002] # CUNEIFORM SIGN DARA3
+12071 ; [.53F5.0020.0002] # CUNEIFORM SIGN DARA4
+12072 ; [.53F6.0020.0002] # CUNEIFORM SIGN DI
+12073 ; [.53F7.0020.0002] # CUNEIFORM SIGN DIB
+12074 ; [.53F8.0020.0002] # CUNEIFORM SIGN DIM
+12075 ; [.53F9.0020.0002] # CUNEIFORM SIGN DIM TIMES SHE
+12076 ; [.53FA.0020.0002] # CUNEIFORM SIGN DIM2
+12077 ; [.53FB.0020.0002] # CUNEIFORM SIGN DIN
+12078 ; [.53FC.0020.0002] # CUNEIFORM SIGN DIN KASKAL U GUNU DISH
+12079 ; [.53FD.0020.0002] # CUNEIFORM SIGN DISH
+1207A ; [.53FE.0020.0002] # CUNEIFORM SIGN DU
+1207B ; [.53FF.0020.0002] # CUNEIFORM SIGN DU OVER DU
+1207C ; [.5400.0020.0002] # CUNEIFORM SIGN DU GUNU
+1207D ; [.5401.0020.0002] # CUNEIFORM SIGN DU SHESHIG
+1207E ; [.5402.0020.0002] # CUNEIFORM SIGN DUB
+1207F ; [.5403.0020.0002] # CUNEIFORM SIGN DUB TIMES ESH2
+12080 ; [.5404.0020.0002] # CUNEIFORM SIGN DUB2
+12081 ; [.5405.0020.0002] # CUNEIFORM SIGN DUG
+12082 ; [.5406.0020.0002] # CUNEIFORM SIGN DUGUD
+12083 ; [.5407.0020.0002] # CUNEIFORM SIGN DUH
+12084 ; [.5408.0020.0002] # CUNEIFORM SIGN DUN
+12085 ; [.5409.0020.0002] # CUNEIFORM SIGN DUN3
+12086 ; [.540A.0020.0002] # CUNEIFORM SIGN DUN3 GUNU
+12087 ; [.540B.0020.0002] # CUNEIFORM SIGN DUN3 GUNU GUNU
+12088 ; [.540C.0020.0002] # CUNEIFORM SIGN DUN4
+12089 ; [.540D.0020.0002] # CUNEIFORM SIGN DUR2
+1208A ; [.540E.0020.0002] # CUNEIFORM SIGN E
+1208B ; [.540F.0020.0002] # CUNEIFORM SIGN E TIMES PAP
+1208C ; [.5410.0020.0002] # CUNEIFORM SIGN E OVER E NUN OVER NUN
+1208D ; [.5411.0020.0002] # CUNEIFORM SIGN E2
+1208E ; [.5412.0020.0002] # CUNEIFORM SIGN E2 TIMES A PLUS HA PLUS DA
+1208F ; [.5413.0020.0002] # CUNEIFORM SIGN E2 TIMES GAR
+12090 ; [.5414.0020.0002] # CUNEIFORM SIGN E2 TIMES MI
+12091 ; [.5415.0020.0002] # CUNEIFORM SIGN E2 TIMES SAL
+12092 ; [.5416.0020.0002] # CUNEIFORM SIGN E2 TIMES SHE
+12093 ; [.5417.0020.0002] # CUNEIFORM SIGN E2 TIMES U
+12094 ; [.5418.0020.0002] # CUNEIFORM SIGN EDIN
+12095 ; [.5419.0020.0002] # CUNEIFORM SIGN EGIR
+12096 ; [.541A.0020.0002] # CUNEIFORM SIGN EL
+12097 ; [.541B.0020.0002] # CUNEIFORM SIGN EN
+12098 ; [.541C.0020.0002] # CUNEIFORM SIGN EN TIMES GAN2
+12099 ; [.541D.0020.0002] # CUNEIFORM SIGN EN TIMES GAN2 TENU
+1209A ; [.541E.0020.0002] # CUNEIFORM SIGN EN TIMES ME
+1209B ; [.541F.0020.0002] # CUNEIFORM SIGN EN CROSSING EN
+1209C ; [.5420.0020.0002] # CUNEIFORM SIGN EN OPPOSING EN
+1209D ; [.5421.0020.0002] # CUNEIFORM SIGN EN SQUARED
+1209E ; [.5422.0020.0002] # CUNEIFORM SIGN EREN
+1209F ; [.5423.0020.0002] # CUNEIFORM SIGN ERIN2
+120A0 ; [.5424.0020.0002] # CUNEIFORM SIGN ESH2
+120A1 ; [.5425.0020.0002] # CUNEIFORM SIGN EZEN
+120A2 ; [.5426.0020.0002] # CUNEIFORM SIGN EZEN TIMES A
+120A3 ; [.5427.0020.0002] # CUNEIFORM SIGN EZEN TIMES A PLUS LAL
+120A4 ; [.5428.0020.0002] # CUNEIFORM SIGN EZEN TIMES A PLUS LAL TIMES LAL
+120A5 ; [.5429.0020.0002] # CUNEIFORM SIGN EZEN TIMES AN
+120A6 ; [.542A.0020.0002] # CUNEIFORM SIGN EZEN TIMES BAD
+120A7 ; [.542B.0020.0002] # CUNEIFORM SIGN EZEN TIMES DUN3 GUNU
+120A8 ; [.542C.0020.0002] # CUNEIFORM SIGN EZEN TIMES DUN3 GUNU GUNU
+120A9 ; [.542D.0020.0002] # CUNEIFORM SIGN EZEN TIMES HA
+120AA ; [.542E.0020.0002] # CUNEIFORM SIGN EZEN TIMES HA GUNU
+120AB ; [.542F.0020.0002] # CUNEIFORM SIGN EZEN TIMES IGI GUNU
+120AC ; [.5430.0020.0002] # CUNEIFORM SIGN EZEN TIMES KASKAL
+120AD ; [.5431.0020.0002] # CUNEIFORM SIGN EZEN TIMES KASKAL SQUARED
+120AE ; [.5432.0020.0002] # CUNEIFORM SIGN EZEN TIMES KU3
+120AF ; [.5433.0020.0002] # CUNEIFORM SIGN EZEN TIMES LA
+120B0 ; [.5434.0020.0002] # CUNEIFORM SIGN EZEN TIMES LAL TIMES LAL
+120B1 ; [.5435.0020.0002] # CUNEIFORM SIGN EZEN TIMES LI
+120B2 ; [.5436.0020.0002] # CUNEIFORM SIGN EZEN TIMES LU
+120B3 ; [.5437.0020.0002] # CUNEIFORM SIGN EZEN TIMES U2
+120B4 ; [.5438.0020.0002] # CUNEIFORM SIGN EZEN TIMES UD
+120B5 ; [.5439.0020.0002] # CUNEIFORM SIGN GA
+120B6 ; [.543A.0020.0002] # CUNEIFORM SIGN GA GUNU
+120B7 ; [.543B.0020.0002] # CUNEIFORM SIGN GA2
+120B8 ; [.543C.0020.0002] # CUNEIFORM SIGN GA2 TIMES A PLUS DA PLUS HA
+120B9 ; [.543D.0020.0002] # CUNEIFORM SIGN GA2 TIMES A PLUS HA
+120BA ; [.543E.0020.0002] # CUNEIFORM SIGN GA2 TIMES A PLUS IGI
+120BB ; [.543F.0020.0002] # CUNEIFORM SIGN GA2 TIMES AB2 TENU PLUS TAB
+120BC ; [.5440.0020.0002] # CUNEIFORM SIGN GA2 TIMES AN
+120BD ; [.5441.0020.0002] # CUNEIFORM SIGN GA2 TIMES ASH
+120BE ; [.5442.0020.0002] # CUNEIFORM SIGN GA2 TIMES ASH2 PLUS GAL
+120BF ; [.5443.0020.0002] # CUNEIFORM SIGN GA2 TIMES BAD
+120C0 ; [.5444.0020.0002] # CUNEIFORM SIGN GA2 TIMES BAR PLUS RA
+120C1 ; [.5445.0020.0002] # CUNEIFORM SIGN GA2 TIMES BUR
+120C2 ; [.5446.0020.0002] # CUNEIFORM SIGN GA2 TIMES BUR PLUS RA
+120C3 ; [.5447.0020.0002] # CUNEIFORM SIGN GA2 TIMES DA
+120C4 ; [.5448.0020.0002] # CUNEIFORM SIGN GA2 TIMES DI
+120C5 ; [.5449.0020.0002] # CUNEIFORM SIGN GA2 TIMES DIM TIMES SHE
+120C6 ; [.544A.0020.0002] # CUNEIFORM SIGN GA2 TIMES DUB
+120C7 ; [.544B.0020.0002] # CUNEIFORM SIGN GA2 TIMES EL
+120C8 ; [.544C.0020.0002] # CUNEIFORM SIGN GA2 TIMES EL PLUS LA
+120C9 ; [.544D.0020.0002] # CUNEIFORM SIGN GA2 TIMES EN
+120CA ; [.544E.0020.0002] # CUNEIFORM SIGN GA2 TIMES EN TIMES GAN2 TENU
+120CB ; [.544F.0020.0002] # CUNEIFORM SIGN GA2 TIMES GAN2 TENU
+120CC ; [.5450.0020.0002] # CUNEIFORM SIGN GA2 TIMES GAR
+120CD ; [.5451.0020.0002] # CUNEIFORM SIGN GA2 TIMES GI
+120CE ; [.5452.0020.0002] # CUNEIFORM SIGN GA2 TIMES GI4
+120CF ; [.5453.0020.0002] # CUNEIFORM SIGN GA2 TIMES GI4 PLUS A
+120D0 ; [.5454.0020.0002] # CUNEIFORM SIGN GA2 TIMES GIR2 PLUS SU
+120D1 ; [.5455.0020.0002] # CUNEIFORM SIGN GA2 TIMES HA PLUS LU PLUS ESH2
+120D2 ; [.5456.0020.0002] # CUNEIFORM SIGN GA2 TIMES HAL
+120D3 ; [.5457.0020.0002] # CUNEIFORM SIGN GA2 TIMES HAL PLUS LA
+120D4 ; [.5458.0020.0002] # CUNEIFORM SIGN GA2 TIMES HI PLUS LI
+120D5 ; [.5459.0020.0002] # CUNEIFORM SIGN GA2 TIMES HUB2
+120D6 ; [.545A.0020.0002] # CUNEIFORM SIGN GA2 TIMES IGI GUNU
+120D7 ; [.545B.0020.0002] # CUNEIFORM SIGN GA2 TIMES ISH PLUS HU PLUS ASH
+120D8 ; [.545C.0020.0002] # CUNEIFORM SIGN GA2 TIMES KAK
+120D9 ; [.545D.0020.0002] # CUNEIFORM SIGN GA2 TIMES KASKAL
+120DA ; [.545E.0020.0002] # CUNEIFORM SIGN GA2 TIMES KID
+120DB ; [.545F.0020.0002] # CUNEIFORM SIGN GA2 TIMES KID PLUS LAL
+120DC ; [.5460.0020.0002] # CUNEIFORM SIGN GA2 TIMES KU3 PLUS AN
+120DD ; [.5461.0020.0002] # CUNEIFORM SIGN GA2 TIMES LA
+120DE ; [.5462.0020.0002] # CUNEIFORM SIGN GA2 TIMES ME PLUS EN
+120DF ; [.5463.0020.0002] # CUNEIFORM SIGN GA2 TIMES MI
+120E0 ; [.5464.0020.0002] # CUNEIFORM SIGN GA2 TIMES NUN
+120E1 ; [.5465.0020.0002] # CUNEIFORM SIGN GA2 TIMES NUN OVER NUN
+120E2 ; [.5466.0020.0002] # CUNEIFORM SIGN GA2 TIMES PA
+120E3 ; [.5467.0020.0002] # CUNEIFORM SIGN GA2 TIMES SAL
+120E4 ; [.5468.0020.0002] # CUNEIFORM SIGN GA2 TIMES SAR
+120E5 ; [.5469.0020.0002] # CUNEIFORM SIGN GA2 TIMES SHE
+120E6 ; [.546A.0020.0002] # CUNEIFORM SIGN GA2 TIMES SHE PLUS TUR
+120E7 ; [.546B.0020.0002] # CUNEIFORM SIGN GA2 TIMES SHID
+120E8 ; [.546C.0020.0002] # CUNEIFORM SIGN GA2 TIMES SUM
+120E9 ; [.546D.0020.0002] # CUNEIFORM SIGN GA2 TIMES TAK4
+120EA ; [.546E.0020.0002] # CUNEIFORM SIGN GA2 TIMES U
+120EB ; [.546F.0020.0002] # CUNEIFORM SIGN GA2 TIMES UD
+120EC ; [.5470.0020.0002] # CUNEIFORM SIGN GA2 TIMES UD PLUS DU
+120ED ; [.5471.0020.0002] # CUNEIFORM SIGN GA2 OVER GA2
+120EE ; [.5472.0020.0002] # CUNEIFORM SIGN GABA
+120EF ; [.5473.0020.0002] # CUNEIFORM SIGN GABA CROSSING GABA
+120F0 ; [.5474.0020.0002] # CUNEIFORM SIGN GAD
+120F1 ; [.5475.0020.0002] # CUNEIFORM SIGN GAD OVER GAD GAR OVER GAR
+120F2 ; [.5476.0020.0002] # CUNEIFORM SIGN GAL
+120F3 ; [.5477.0020.0002] # CUNEIFORM SIGN GAL GAD OVER GAD GAR OVER GAR
+120F4 ; [.5478.0020.0002] # CUNEIFORM SIGN GALAM
+120F5 ; [.5479.0020.0002] # CUNEIFORM SIGN GAM
+120F6 ; [.547A.0020.0002] # CUNEIFORM SIGN GAN
+120F7 ; [.547B.0020.0002] # CUNEIFORM SIGN GAN2
+120F8 ; [.547C.0020.0002] # CUNEIFORM SIGN GAN2 TENU
+120F9 ; [.547D.0020.0002] # CUNEIFORM SIGN GAN2 OVER GAN2
+120FA ; [.547E.0020.0002] # CUNEIFORM SIGN GAN2 CROSSING GAN2
+120FB ; [.547F.0020.0002] # CUNEIFORM SIGN GAR
+120FC ; [.5480.0020.0002] # CUNEIFORM SIGN GAR3
+120FD ; [.5481.0020.0002] # CUNEIFORM SIGN GASHAN
+120FE ; [.5482.0020.0002] # CUNEIFORM SIGN GESHTIN
+120FF ; [.5483.0020.0002] # CUNEIFORM SIGN GESHTIN TIMES KUR
+12100 ; [.5484.0020.0002] # CUNEIFORM SIGN GI
+12101 ; [.5485.0020.0002] # CUNEIFORM SIGN GI TIMES E
+12102 ; [.5486.0020.0002] # CUNEIFORM SIGN GI TIMES U
+12103 ; [.5487.0020.0002] # CUNEIFORM SIGN GI CROSSING GI
+12104 ; [.5488.0020.0002] # CUNEIFORM SIGN GI4
+12105 ; [.5489.0020.0002] # CUNEIFORM SIGN GI4 OVER GI4
+12106 ; [.548A.0020.0002] # CUNEIFORM SIGN GI4 CROSSING GI4
+12107 ; [.548B.0020.0002] # CUNEIFORM SIGN GIDIM
+12108 ; [.548C.0020.0002] # CUNEIFORM SIGN GIR2
+12109 ; [.548D.0020.0002] # CUNEIFORM SIGN GIR2 GUNU
+1210A ; [.548E.0020.0002] # CUNEIFORM SIGN GIR3
+1210B ; [.548F.0020.0002] # CUNEIFORM SIGN GIR3 TIMES A PLUS IGI
+1210C ; [.5490.0020.0002] # CUNEIFORM SIGN GIR3 TIMES GAN2 TENU
+1210D ; [.5491.0020.0002] # CUNEIFORM SIGN GIR3 TIMES IGI
+1210E ; [.5492.0020.0002] # CUNEIFORM SIGN GIR3 TIMES LU PLUS IGI
+1210F ; [.5493.0020.0002] # CUNEIFORM SIGN GIR3 TIMES PA
+12110 ; [.5494.0020.0002] # CUNEIFORM SIGN GISAL
+12111 ; [.5495.0020.0002] # CUNEIFORM SIGN GISH
+12112 ; [.5496.0020.0002] # CUNEIFORM SIGN GISH CROSSING GISH
+12113 ; [.5497.0020.0002] # CUNEIFORM SIGN GISH TIMES BAD
+12114 ; [.5498.0020.0002] # CUNEIFORM SIGN GISH TIMES TAK4
+12115 ; [.5499.0020.0002] # CUNEIFORM SIGN GISH TENU
+12116 ; [.549A.0020.0002] # CUNEIFORM SIGN GU
+12117 ; [.549B.0020.0002] # CUNEIFORM SIGN GU CROSSING GU
+12118 ; [.549C.0020.0002] # CUNEIFORM SIGN GU2
+12119 ; [.549D.0020.0002] # CUNEIFORM SIGN GU2 TIMES KAK
+1211A ; [.549E.0020.0002] # CUNEIFORM SIGN GU2 TIMES KAK TIMES IGI GUNU
+1211B ; [.549F.0020.0002] # CUNEIFORM SIGN GU2 TIMES NUN
+1211C ; [.54A0.0020.0002] # CUNEIFORM SIGN GU2 TIMES SAL PLUS TUG2
+1211D ; [.54A1.0020.0002] # CUNEIFORM SIGN GU2 GUNU
+1211E ; [.54A2.0020.0002] # CUNEIFORM SIGN GUD
+1211F ; [.54A3.0020.0002] # CUNEIFORM SIGN GUD TIMES A PLUS KUR
+12120 ; [.54A4.0020.0002] # CUNEIFORM SIGN GUD TIMES KUR
+12121 ; [.54A5.0020.0002] # CUNEIFORM SIGN GUD OVER GUD LUGAL
+12122 ; [.54A6.0020.0002] # CUNEIFORM SIGN GUL
+12123 ; [.54A7.0020.0002] # CUNEIFORM SIGN GUM
+12124 ; [.54A8.0020.0002] # CUNEIFORM SIGN GUM TIMES SHE
+12125 ; [.54A9.0020.0002] # CUNEIFORM SIGN GUR
+12126 ; [.54AA.0020.0002] # CUNEIFORM SIGN GUR7
+12127 ; [.54AB.0020.0002] # CUNEIFORM SIGN GURUN
+12128 ; [.54AC.0020.0002] # CUNEIFORM SIGN GURUSH
+12129 ; [.54AD.0020.0002] # CUNEIFORM SIGN HA
+1212A ; [.54AE.0020.0002] # CUNEIFORM SIGN HA TENU
+1212B ; [.54AF.0020.0002] # CUNEIFORM SIGN HA GUNU
+1212C ; [.54B0.0020.0002] # CUNEIFORM SIGN HAL
+1212D ; [.54B1.0020.0002] # CUNEIFORM SIGN HI
+1212E ; [.54B2.0020.0002] # CUNEIFORM SIGN HI TIMES ASH
+1212F ; [.54B3.0020.0002] # CUNEIFORM SIGN HI TIMES ASH2
+12130 ; [.54B4.0020.0002] # CUNEIFORM SIGN HI TIMES BAD
+12131 ; [.54B5.0020.0002] # CUNEIFORM SIGN HI TIMES DISH
+12132 ; [.54B6.0020.0002] # CUNEIFORM SIGN HI TIMES GAD
+12133 ; [.54B7.0020.0002] # CUNEIFORM SIGN HI TIMES KIN
+12134 ; [.54B8.0020.0002] # CUNEIFORM SIGN HI TIMES NUN
+12135 ; [.54B9.0020.0002] # CUNEIFORM SIGN HI TIMES SHE
+12136 ; [.54BA.0020.0002] # CUNEIFORM SIGN HI TIMES U
+12137 ; [.54BB.0020.0002] # CUNEIFORM SIGN HU
+12138 ; [.54BC.0020.0002] # CUNEIFORM SIGN HUB2
+12139 ; [.54BD.0020.0002] # CUNEIFORM SIGN HUB2 TIMES AN
+1213A ; [.54BE.0020.0002] # CUNEIFORM SIGN HUB2 TIMES HAL
+1213B ; [.54BF.0020.0002] # CUNEIFORM SIGN HUB2 TIMES KASKAL
+1213C ; [.54C0.0020.0002] # CUNEIFORM SIGN HUB2 TIMES LISH
+1213D ; [.54C1.0020.0002] # CUNEIFORM SIGN HUB2 TIMES UD
+1213E ; [.54C2.0020.0002] # CUNEIFORM SIGN HUL2
+1213F ; [.54C3.0020.0002] # CUNEIFORM SIGN I
+12140 ; [.54C4.0020.0002] # CUNEIFORM SIGN I A
+12141 ; [.54C5.0020.0002] # CUNEIFORM SIGN IB
+12142 ; [.54C6.0020.0002] # CUNEIFORM SIGN IDIM
+12143 ; [.54C7.0020.0002] # CUNEIFORM SIGN IDIM OVER IDIM BUR
+12144 ; [.54C8.0020.0002] # CUNEIFORM SIGN IDIM OVER IDIM SQUARED
+12145 ; [.54C9.0020.0002] # CUNEIFORM SIGN IG
+12146 ; [.54CA.0020.0002] # CUNEIFORM SIGN IGI
+12147 ; [.54CB.0020.0002] # CUNEIFORM SIGN IGI DIB
+12148 ; [.54CC.0020.0002] # CUNEIFORM SIGN IGI RI
+12149 ; [.54CD.0020.0002] # CUNEIFORM SIGN IGI OVER IGI SHIR OVER SHIR UD OVER UD
+1214A ; [.54CE.0020.0002] # CUNEIFORM SIGN IGI GUNU
+1214B ; [.54CF.0020.0002] # CUNEIFORM SIGN IL
+1214C ; [.54D0.0020.0002] # CUNEIFORM SIGN IL TIMES GAN2 TENU
+1214D ; [.54D1.0020.0002] # CUNEIFORM SIGN IL2
+1214E ; [.54D2.0020.0002] # CUNEIFORM SIGN IM
+1214F ; [.54D3.0020.0002] # CUNEIFORM SIGN IM TIMES TAK4
+12150 ; [.54D4.0020.0002] # CUNEIFORM SIGN IM CROSSING IM
+12151 ; [.54D5.0020.0002] # CUNEIFORM SIGN IM OPPOSING IM
+12152 ; [.54D6.0020.0002] # CUNEIFORM SIGN IM SQUARED
+12153 ; [.54D7.0020.0002] # CUNEIFORM SIGN IMIN
+12154 ; [.54D8.0020.0002] # CUNEIFORM SIGN IN
+12155 ; [.54D9.0020.0002] # CUNEIFORM SIGN IR
+12156 ; [.54DA.0020.0002] # CUNEIFORM SIGN ISH
+12157 ; [.54DB.0020.0002] # CUNEIFORM SIGN KA
+12158 ; [.54DC.0020.0002] # CUNEIFORM SIGN KA TIMES A
+12159 ; [.54DD.0020.0002] # CUNEIFORM SIGN KA TIMES AD
+1215A ; [.54DE.0020.0002] # CUNEIFORM SIGN KA TIMES AD PLUS KU3
+1215B ; [.54DF.0020.0002] # CUNEIFORM SIGN KA TIMES ASH2
+1215C ; [.54E0.0020.0002] # CUNEIFORM SIGN KA TIMES BAD
+1215D ; [.54E1.0020.0002] # CUNEIFORM SIGN KA TIMES BALAG
+1215E ; [.54E2.0020.0002] # CUNEIFORM SIGN KA TIMES BAR
+1215F ; [.54E3.0020.0002] # CUNEIFORM SIGN KA TIMES BI
+12160 ; [.54E4.0020.0002] # CUNEIFORM SIGN KA TIMES ERIN2
+12161 ; [.54E5.0020.0002] # CUNEIFORM SIGN KA TIMES ESH2
+12162 ; [.54E6.0020.0002] # CUNEIFORM SIGN KA TIMES GA
+12163 ; [.54E7.0020.0002] # CUNEIFORM SIGN KA TIMES GAL
+12164 ; [.54E8.0020.0002] # CUNEIFORM SIGN KA TIMES GAN2 TENU
+12165 ; [.54E9.0020.0002] # CUNEIFORM SIGN KA TIMES GAR
+12166 ; [.54EA.0020.0002] # CUNEIFORM SIGN KA TIMES GAR PLUS SHA3 PLUS A
+12167 ; [.54EB.0020.0002] # CUNEIFORM SIGN KA TIMES GI
+12168 ; [.54EC.0020.0002] # CUNEIFORM SIGN KA TIMES GIR2
+12169 ; [.54ED.0020.0002] # CUNEIFORM SIGN KA TIMES GISH PLUS SAR
+1216A ; [.54EE.0020.0002] # CUNEIFORM SIGN KA TIMES GISH CROSSING GISH
+1216B ; [.54EF.0020.0002] # CUNEIFORM SIGN KA TIMES GU
+1216C ; [.54F0.0020.0002] # CUNEIFORM SIGN KA TIMES GUR7
+1216D ; [.54F1.0020.0002] # CUNEIFORM SIGN KA TIMES IGI
+1216E ; [.54F2.0020.0002] # CUNEIFORM SIGN KA TIMES IM
+1216F ; [.54F3.0020.0002] # CUNEIFORM SIGN KA TIMES KAK
+12170 ; [.54F4.0020.0002] # CUNEIFORM SIGN KA TIMES KI
+12171 ; [.54F5.0020.0002] # CUNEIFORM SIGN KA TIMES KID
+12172 ; [.54F6.0020.0002] # CUNEIFORM SIGN KA TIMES LI
+12173 ; [.54F7.0020.0002] # CUNEIFORM SIGN KA TIMES LU
+12174 ; [.54F8.0020.0002] # CUNEIFORM SIGN KA TIMES ME
+12175 ; [.54F9.0020.0002] # CUNEIFORM SIGN KA TIMES ME PLUS DU
+12176 ; [.54FA.0020.0002] # CUNEIFORM SIGN KA TIMES ME PLUS GI
+12177 ; [.54FB.0020.0002] # CUNEIFORM SIGN KA TIMES ME PLUS TE
+12178 ; [.54FC.0020.0002] # CUNEIFORM SIGN KA TIMES MI
+12179 ; [.54FD.0020.0002] # CUNEIFORM SIGN KA TIMES MI PLUS NUNUZ
+1217A ; [.54FE.0020.0002] # CUNEIFORM SIGN KA TIMES NE
+1217B ; [.54FF.0020.0002] # CUNEIFORM SIGN KA TIMES NUN
+1217C ; [.5500.0020.0002] # CUNEIFORM SIGN KA TIMES PI
+1217D ; [.5501.0020.0002] # CUNEIFORM SIGN KA TIMES RU
+1217E ; [.5502.0020.0002] # CUNEIFORM SIGN KA TIMES SA
+1217F ; [.5503.0020.0002] # CUNEIFORM SIGN KA TIMES SAR
+12180 ; [.5504.0020.0002] # CUNEIFORM SIGN KA TIMES SHA
+12181 ; [.5505.0020.0002] # CUNEIFORM SIGN KA TIMES SHE
+12182 ; [.5506.0020.0002] # CUNEIFORM SIGN KA TIMES SHID
+12183 ; [.5507.0020.0002] # CUNEIFORM SIGN KA TIMES SHU
+12184 ; [.5508.0020.0002] # CUNEIFORM SIGN KA TIMES SIG
+12185 ; [.5509.0020.0002] # CUNEIFORM SIGN KA TIMES SUHUR
+12186 ; [.550A.0020.0002] # CUNEIFORM SIGN KA TIMES TAR
+12187 ; [.550B.0020.0002] # CUNEIFORM SIGN KA TIMES U
+12188 ; [.550C.0020.0002] # CUNEIFORM SIGN KA TIMES U2
+12189 ; [.550D.0020.0002] # CUNEIFORM SIGN KA TIMES UD
+1218A ; [.550E.0020.0002] # CUNEIFORM SIGN KA TIMES UMUM TIMES PA
+1218B ; [.550F.0020.0002] # CUNEIFORM SIGN KA TIMES USH
+1218C ; [.5510.0020.0002] # CUNEIFORM SIGN KA TIMES ZI
+1218D ; [.5511.0020.0002] # CUNEIFORM SIGN KA2
+1218E ; [.5512.0020.0002] # CUNEIFORM SIGN KA2 CROSSING KA2
+1218F ; [.5513.0020.0002] # CUNEIFORM SIGN KAB
+12190 ; [.5514.0020.0002] # CUNEIFORM SIGN KAD2
+12191 ; [.5515.0020.0002] # CUNEIFORM SIGN KAD3
+12192 ; [.5516.0020.0002] # CUNEIFORM SIGN KAD4
+12193 ; [.5517.0020.0002] # CUNEIFORM SIGN KAD5
+12194 ; [.5518.0020.0002] # CUNEIFORM SIGN KAD5 OVER KAD5
+12195 ; [.5519.0020.0002] # CUNEIFORM SIGN KAK
+12196 ; [.551A.0020.0002] # CUNEIFORM SIGN KAK TIMES IGI GUNU
+12197 ; [.551B.0020.0002] # CUNEIFORM SIGN KAL
+12198 ; [.551C.0020.0002] # CUNEIFORM SIGN KAL TIMES BAD
+12199 ; [.551D.0020.0002] # CUNEIFORM SIGN KAL CROSSING KAL
+1219A ; [.551E.0020.0002] # CUNEIFORM SIGN KAM2
+1219B ; [.551F.0020.0002] # CUNEIFORM SIGN KAM4
+1219C ; [.5520.0020.0002] # CUNEIFORM SIGN KASKAL
+1219D ; [.5521.0020.0002] # CUNEIFORM SIGN KASKAL LAGAB TIMES U OVER LAGAB TIMES U
+1219E ; [.5522.0020.0002] # CUNEIFORM SIGN KASKAL OVER KASKAL LAGAB TIMES U OVER LAGAB TIMES U
+1219F ; [.5523.0020.0002] # CUNEIFORM SIGN KESH2
+121A0 ; [.5524.0020.0002] # CUNEIFORM SIGN KI
+121A1 ; [.5525.0020.0002] # CUNEIFORM SIGN KI TIMES BAD
+121A2 ; [.5526.0020.0002] # CUNEIFORM SIGN KI TIMES U
+121A3 ; [.5527.0020.0002] # CUNEIFORM SIGN KI TIMES UD
+121A4 ; [.5528.0020.0002] # CUNEIFORM SIGN KID
+121A5 ; [.5529.0020.0002] # CUNEIFORM SIGN KIN
+121A6 ; [.552A.0020.0002] # CUNEIFORM SIGN KISAL
+121A7 ; [.552B.0020.0002] # CUNEIFORM SIGN KISH
+121A8 ; [.552C.0020.0002] # CUNEIFORM SIGN KISIM5
+121A9 ; [.552D.0020.0002] # CUNEIFORM SIGN KISIM5 OVER KISIM5
+121AA ; [.552E.0020.0002] # CUNEIFORM SIGN KU
+121AB ; [.552F.0020.0002] # CUNEIFORM SIGN KU OVER HI TIMES ASH2 KU OVER HI TIMES ASH2
+121AC ; [.5530.0020.0002] # CUNEIFORM SIGN KU3
+121AD ; [.5531.0020.0002] # CUNEIFORM SIGN KU4
+121AE ; [.5532.0020.0002] # CUNEIFORM SIGN KU4 VARIANT FORM
+121AF ; [.5533.0020.0002] # CUNEIFORM SIGN KU7
+121B0 ; [.5534.0020.0002] # CUNEIFORM SIGN KUL
+121B1 ; [.5535.0020.0002] # CUNEIFORM SIGN KUL GUNU
+121B2 ; [.5536.0020.0002] # CUNEIFORM SIGN KUN
+121B3 ; [.5537.0020.0002] # CUNEIFORM SIGN KUR
+121B4 ; [.5538.0020.0002] # CUNEIFORM SIGN KUR OPPOSING KUR
+121B5 ; [.5539.0020.0002] # CUNEIFORM SIGN KUSHU2
+121B6 ; [.553A.0020.0002] # CUNEIFORM SIGN KWU318
+121B7 ; [.553B.0020.0002] # CUNEIFORM SIGN LA
+121B8 ; [.553C.0020.0002] # CUNEIFORM SIGN LAGAB
+121B9 ; [.553D.0020.0002] # CUNEIFORM SIGN LAGAB TIMES A
+121BA ; [.553E.0020.0002] # CUNEIFORM SIGN LAGAB TIMES A PLUS DA PLUS HA
+121BB ; [.553F.0020.0002] # CUNEIFORM SIGN LAGAB TIMES A PLUS GAR
+121BC ; [.5540.0020.0002] # CUNEIFORM SIGN LAGAB TIMES A PLUS LAL
+121BD ; [.5541.0020.0002] # CUNEIFORM SIGN LAGAB TIMES AL
+121BE ; [.5542.0020.0002] # CUNEIFORM SIGN LAGAB TIMES AN
+121BF ; [.5543.0020.0002] # CUNEIFORM SIGN LAGAB TIMES ASH ZIDA TENU
+121C0 ; [.5544.0020.0002] # CUNEIFORM SIGN LAGAB TIMES BAD
+121C1 ; [.5545.0020.0002] # CUNEIFORM SIGN LAGAB TIMES BI
+121C2 ; [.5546.0020.0002] # CUNEIFORM SIGN LAGAB TIMES DAR
+121C3 ; [.5547.0020.0002] # CUNEIFORM SIGN LAGAB TIMES EN
+121C4 ; [.5548.0020.0002] # CUNEIFORM SIGN LAGAB TIMES GA
+121C5 ; [.5549.0020.0002] # CUNEIFORM SIGN LAGAB TIMES GAR
+121C6 ; [.554A.0020.0002] # CUNEIFORM SIGN LAGAB TIMES GUD
+121C7 ; [.554B.0020.0002] # CUNEIFORM SIGN LAGAB TIMES GUD PLUS GUD
+121C8 ; [.554C.0020.0002] # CUNEIFORM SIGN LAGAB TIMES HA
+121C9 ; [.554D.0020.0002] # CUNEIFORM SIGN LAGAB TIMES HAL
+121CA ; [.554E.0020.0002] # CUNEIFORM SIGN LAGAB TIMES HI TIMES NUN
+121CB ; [.554F.0020.0002] # CUNEIFORM SIGN LAGAB TIMES IGI GUNU
+121CC ; [.5550.0020.0002] # CUNEIFORM SIGN LAGAB TIMES IM
+121CD ; [.5551.0020.0002] # CUNEIFORM SIGN LAGAB TIMES IM PLUS HA
+121CE ; [.5552.0020.0002] # CUNEIFORM SIGN LAGAB TIMES IM PLUS LU
+121CF ; [.5553.0020.0002] # CUNEIFORM SIGN LAGAB TIMES KI
+121D0 ; [.5554.0020.0002] # CUNEIFORM SIGN LAGAB TIMES KIN
+121D1 ; [.5555.0020.0002] # CUNEIFORM SIGN LAGAB TIMES KU3
+121D2 ; [.5556.0020.0002] # CUNEIFORM SIGN LAGAB TIMES KUL
+121D3 ; [.5557.0020.0002] # CUNEIFORM SIGN LAGAB TIMES KUL PLUS HI PLUS A
+121D4 ; [.5558.0020.0002] # CUNEIFORM SIGN LAGAB TIMES LAGAB
+121D5 ; [.5559.0020.0002] # CUNEIFORM SIGN LAGAB TIMES LISH
+121D6 ; [.555A.0020.0002] # CUNEIFORM SIGN LAGAB TIMES LU
+121D7 ; [.555B.0020.0002] # CUNEIFORM SIGN LAGAB TIMES LUL
+121D8 ; [.555C.0020.0002] # CUNEIFORM SIGN LAGAB TIMES ME
+121D9 ; [.555D.0020.0002] # CUNEIFORM SIGN LAGAB TIMES ME PLUS EN
+121DA ; [.555E.0020.0002] # CUNEIFORM SIGN LAGAB TIMES MUSH
+121DB ; [.555F.0020.0002] # CUNEIFORM SIGN LAGAB TIMES NE
+121DC ; [.5560.0020.0002] # CUNEIFORM SIGN LAGAB TIMES SHE PLUS SUM
+121DD ; [.5561.0020.0002] # CUNEIFORM SIGN LAGAB TIMES SHITA PLUS GISH PLUS ERIN2
+121DE ; [.5562.0020.0002] # CUNEIFORM SIGN LAGAB TIMES SHITA PLUS GISH TENU
+121DF ; [.5563.0020.0002] # CUNEIFORM SIGN LAGAB TIMES SHU2
+121E0 ; [.5564.0020.0002] # CUNEIFORM SIGN LAGAB TIMES SHU2 PLUS SHU2
+121E1 ; [.5565.0020.0002] # CUNEIFORM SIGN LAGAB TIMES SUM
+121E2 ; [.5566.0020.0002] # CUNEIFORM SIGN LAGAB TIMES TAG
+121E3 ; [.5567.0020.0002] # CUNEIFORM SIGN LAGAB TIMES TAK4
+121E4 ; [.5568.0020.0002] # CUNEIFORM SIGN LAGAB TIMES TE PLUS A PLUS SU PLUS NA
+121E5 ; [.5569.0020.0002] # CUNEIFORM SIGN LAGAB TIMES U
+121E6 ; [.556A.0020.0002] # CUNEIFORM SIGN LAGAB TIMES U PLUS A
+121E7 ; [.556B.0020.0002] # CUNEIFORM SIGN LAGAB TIMES U PLUS U PLUS U
+121E8 ; [.556C.0020.0002] # CUNEIFORM SIGN LAGAB TIMES U2 PLUS ASH
+121E9 ; [.556D.0020.0002] # CUNEIFORM SIGN LAGAB TIMES UD
+121EA ; [.556E.0020.0002] # CUNEIFORM SIGN LAGAB TIMES USH
+121EB ; [.556F.0020.0002] # CUNEIFORM SIGN LAGAB SQUARED
+121EC ; [.5570.0020.0002] # CUNEIFORM SIGN LAGAR
+121ED ; [.5571.0020.0002] # CUNEIFORM SIGN LAGAR TIMES SHE
+121EE ; [.5572.0020.0002] # CUNEIFORM SIGN LAGAR TIMES SHE PLUS SUM
+121EF ; [.5573.0020.0002] # CUNEIFORM SIGN LAGAR GUNU
+121F0 ; [.5574.0020.0002] # CUNEIFORM SIGN LAGAR GUNU OVER LAGAR GUNU SHE
+121F1 ; [.5575.0020.0002] # CUNEIFORM SIGN LAHSHU
+121F2 ; [.5576.0020.0002] # CUNEIFORM SIGN LAL
+121F3 ; [.5577.0020.0002] # CUNEIFORM SIGN LAL TIMES LAL
+121F4 ; [.5578.0020.0002] # CUNEIFORM SIGN LAM
+121F5 ; [.5579.0020.0002] # CUNEIFORM SIGN LAM TIMES KUR
+121F6 ; [.557A.0020.0002] # CUNEIFORM SIGN LAM TIMES KUR PLUS RU
+121F7 ; [.557B.0020.0002] # CUNEIFORM SIGN LI
+121F8 ; [.557C.0020.0002] # CUNEIFORM SIGN LIL
+121F9 ; [.557D.0020.0002] # CUNEIFORM SIGN LIMMU2
+121FA ; [.557E.0020.0002] # CUNEIFORM SIGN LISH
+121FB ; [.557F.0020.0002] # CUNEIFORM SIGN LU
+121FC ; [.5580.0020.0002] # CUNEIFORM SIGN LU TIMES BAD
+121FD ; [.5581.0020.0002] # CUNEIFORM SIGN LU2
+121FE ; [.5582.0020.0002] # CUNEIFORM SIGN LU2 TIMES AL
+121FF ; [.5583.0020.0002] # CUNEIFORM SIGN LU2 TIMES BAD
+12200 ; [.5584.0020.0002] # CUNEIFORM SIGN LU2 TIMES ESH2
+12201 ; [.5585.0020.0002] # CUNEIFORM SIGN LU2 TIMES ESH2 TENU
+12202 ; [.5586.0020.0002] # CUNEIFORM SIGN LU2 TIMES GAN2 TENU
+12203 ; [.5587.0020.0002] # CUNEIFORM SIGN LU2 TIMES HI TIMES BAD
+12204 ; [.5588.0020.0002] # CUNEIFORM SIGN LU2 TIMES IM
+12205 ; [.5589.0020.0002] # CUNEIFORM SIGN LU2 TIMES KAD2
+12206 ; [.558A.0020.0002] # CUNEIFORM SIGN LU2 TIMES KAD3
+12207 ; [.558B.0020.0002] # CUNEIFORM SIGN LU2 TIMES KAD3 PLUS ASH
+12208 ; [.558C.0020.0002] # CUNEIFORM SIGN LU2 TIMES KI
+12209 ; [.558D.0020.0002] # CUNEIFORM SIGN LU2 TIMES LA PLUS ASH
+1220A ; [.558E.0020.0002] # CUNEIFORM SIGN LU2 TIMES LAGAB
+1220B ; [.558F.0020.0002] # CUNEIFORM SIGN LU2 TIMES ME PLUS EN
+1220C ; [.5590.0020.0002] # CUNEIFORM SIGN LU2 TIMES NE
+1220D ; [.5591.0020.0002] # CUNEIFORM SIGN LU2 TIMES NU
+1220E ; [.5592.0020.0002] # CUNEIFORM SIGN LU2 TIMES SI PLUS ASH
+1220F ; [.5593.0020.0002] # CUNEIFORM SIGN LU2 TIMES SIK2 PLUS BU
+12210 ; [.5594.0020.0002] # CUNEIFORM SIGN LU2 TIMES TUG2
+12211 ; [.5595.0020.0002] # CUNEIFORM SIGN LU2 TENU
+12212 ; [.5596.0020.0002] # CUNEIFORM SIGN LU2 CROSSING LU2
+12213 ; [.5597.0020.0002] # CUNEIFORM SIGN LU2 OPPOSING LU2
+12214 ; [.5598.0020.0002] # CUNEIFORM SIGN LU2 SQUARED
+12215 ; [.5599.0020.0002] # CUNEIFORM SIGN LU2 SHESHIG
+12216 ; [.559A.0020.0002] # CUNEIFORM SIGN LU3
+12217 ; [.559B.0020.0002] # CUNEIFORM SIGN LUGAL
+12218 ; [.559C.0020.0002] # CUNEIFORM SIGN LUGAL OVER LUGAL
+12219 ; [.559D.0020.0002] # CUNEIFORM SIGN LUGAL OPPOSING LUGAL
+1221A ; [.559E.0020.0002] # CUNEIFORM SIGN LUGAL SHESHIG
+1221B ; [.559F.0020.0002] # CUNEIFORM SIGN LUH
+1221C ; [.55A0.0020.0002] # CUNEIFORM SIGN LUL
+1221D ; [.55A1.0020.0002] # CUNEIFORM SIGN LUM
+1221E ; [.55A2.0020.0002] # CUNEIFORM SIGN LUM OVER LUM
+1221F ; [.55A3.0020.0002] # CUNEIFORM SIGN LUM OVER LUM GAR OVER GAR
+12220 ; [.55A4.0020.0002] # CUNEIFORM SIGN MA
+12221 ; [.55A5.0020.0002] # CUNEIFORM SIGN MA TIMES TAK4
+12222 ; [.55A6.0020.0002] # CUNEIFORM SIGN MA GUNU
+12223 ; [.55A7.0020.0002] # CUNEIFORM SIGN MA2
+12224 ; [.55A8.0020.0002] # CUNEIFORM SIGN MAH
+12225 ; [.55A9.0020.0002] # CUNEIFORM SIGN MAR
+12226 ; [.55AA.0020.0002] # CUNEIFORM SIGN MASH
+12227 ; [.55AB.0020.0002] # CUNEIFORM SIGN MASH2
+12228 ; [.55AC.0020.0002] # CUNEIFORM SIGN ME
+12229 ; [.55AD.0020.0002] # CUNEIFORM SIGN MES
+1222A ; [.55AE.0020.0002] # CUNEIFORM SIGN MI
+1222B ; [.55AF.0020.0002] # CUNEIFORM SIGN MIN
+1222C ; [.55B0.0020.0002] # CUNEIFORM SIGN MU
+1222D ; [.55B1.0020.0002] # CUNEIFORM SIGN MU OVER MU
+1222E ; [.55B2.0020.0002] # CUNEIFORM SIGN MUG
+1222F ; [.55B3.0020.0002] # CUNEIFORM SIGN MUG GUNU
+12230 ; [.55B4.0020.0002] # CUNEIFORM SIGN MUNSUB
+12231 ; [.55B5.0020.0002] # CUNEIFORM SIGN MURGU2
+12232 ; [.55B6.0020.0002] # CUNEIFORM SIGN MUSH
+12233 ; [.55B7.0020.0002] # CUNEIFORM SIGN MUSH TIMES A
+12234 ; [.55B8.0020.0002] # CUNEIFORM SIGN MUSH TIMES KUR
+12235 ; [.55B9.0020.0002] # CUNEIFORM SIGN MUSH TIMES ZA
+12236 ; [.55BA.0020.0002] # CUNEIFORM SIGN MUSH OVER MUSH
+12237 ; [.55BB.0020.0002] # CUNEIFORM SIGN MUSH OVER MUSH TIMES A PLUS NA
+12238 ; [.55BC.0020.0002] # CUNEIFORM SIGN MUSH CROSSING MUSH
+12239 ; [.55BD.0020.0002] # CUNEIFORM SIGN MUSH3
+1223A ; [.55BE.0020.0002] # CUNEIFORM SIGN MUSH3 TIMES A
+1223B ; [.55BF.0020.0002] # CUNEIFORM SIGN MUSH3 TIMES A PLUS DI
+1223C ; [.55C0.0020.0002] # CUNEIFORM SIGN MUSH3 TIMES DI
+1223D ; [.55C1.0020.0002] # CUNEIFORM SIGN MUSH3 GUNU
+1223E ; [.55C2.0020.0002] # CUNEIFORM SIGN NA
+1223F ; [.55C3.0020.0002] # CUNEIFORM SIGN NA2
+12240 ; [.55C4.0020.0002] # CUNEIFORM SIGN NAGA
+12241 ; [.55C5.0020.0002] # CUNEIFORM SIGN NAGA INVERTED
+12242 ; [.55C6.0020.0002] # CUNEIFORM SIGN NAGA TIMES SHU TENU
+12243 ; [.55C7.0020.0002] # CUNEIFORM SIGN NAGA OPPOSING NAGA
+12244 ; [.55C8.0020.0002] # CUNEIFORM SIGN NAGAR
+12245 ; [.55C9.0020.0002] # CUNEIFORM SIGN NAM NUTILLU
+12246 ; [.55CA.0020.0002] # CUNEIFORM SIGN NAM
+12247 ; [.55CB.0020.0002] # CUNEIFORM SIGN NAM2
+12248 ; [.55CC.0020.0002] # CUNEIFORM SIGN NE
+12249 ; [.55CD.0020.0002] # CUNEIFORM SIGN NE TIMES A
+1224A ; [.55CE.0020.0002] # CUNEIFORM SIGN NE TIMES UD
+1224B ; [.55CF.0020.0002] # CUNEIFORM SIGN NE SHESHIG
+1224C ; [.55D0.0020.0002] # CUNEIFORM SIGN NI
+1224D ; [.55D1.0020.0002] # CUNEIFORM SIGN NI TIMES E
+1224E ; [.55D2.0020.0002] # CUNEIFORM SIGN NI2
+1224F ; [.55D3.0020.0002] # CUNEIFORM SIGN NIM
+12250 ; [.55D4.0020.0002] # CUNEIFORM SIGN NIM TIMES GAN2 TENU
+12251 ; [.55D5.0020.0002] # CUNEIFORM SIGN NIM TIMES GAR PLUS GAN2 TENU
+12252 ; [.55D6.0020.0002] # CUNEIFORM SIGN NINDA2
+12253 ; [.55D7.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES AN
+12254 ; [.55D8.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES ASH
+12255 ; [.55D9.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES ASH PLUS ASH
+12256 ; [.55DA.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES GUD
+12257 ; [.55DB.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES ME PLUS GAN2 TENU
+12258 ; [.55DC.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES NE
+12259 ; [.55DD.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES NUN
+1225A ; [.55DE.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES SHE
+1225B ; [.55DF.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES SHE PLUS A AN
+1225C ; [.55E0.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES SHE PLUS ASH
+1225D ; [.55E1.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES SHE PLUS ASH PLUS ASH
+1225E ; [.55E2.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES U2 PLUS ASH
+1225F ; [.55E3.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES USH
+12260 ; [.55E4.0020.0002] # CUNEIFORM SIGN NISAG
+12261 ; [.55E5.0020.0002] # CUNEIFORM SIGN NU
+12262 ; [.55E6.0020.0002] # CUNEIFORM SIGN NU11
+122D4 ; [.55E7.0020.0002] # CUNEIFORM SIGN SHIR TENU
+122D5 ; [.55E8.0020.0002] # CUNEIFORM SIGN SHIR OVER SHIR BUR OVER BUR
+12263 ; [.55E9.0020.0002] # CUNEIFORM SIGN NUN
+12264 ; [.55EA.0020.0002] # CUNEIFORM SIGN NUN LAGAR TIMES GAR
+12265 ; [.55EB.0020.0002] # CUNEIFORM SIGN NUN LAGAR TIMES MASH
+12266 ; [.55EC.0020.0002] # CUNEIFORM SIGN NUN LAGAR TIMES SAL
+12267 ; [.55ED.0020.0002] # CUNEIFORM SIGN NUN LAGAR TIMES SAL OVER NUN LAGAR TIMES SAL
+12268 ; [.55EE.0020.0002] # CUNEIFORM SIGN NUN LAGAR TIMES USH
+12269 ; [.55EF.0020.0002] # CUNEIFORM SIGN NUN TENU
+1226A ; [.55F0.0020.0002] # CUNEIFORM SIGN NUN OVER NUN
+1226B ; [.55F1.0020.0002] # CUNEIFORM SIGN NUN CROSSING NUN
+1226C ; [.55F2.0020.0002] # CUNEIFORM SIGN NUN CROSSING NUN LAGAR OVER LAGAR
+1226D ; [.55F3.0020.0002] # CUNEIFORM SIGN NUNUZ
+1226E ; [.55F4.0020.0002] # CUNEIFORM SIGN NUNUZ AB2 TIMES ASHGAB
+1226F ; [.55F5.0020.0002] # CUNEIFORM SIGN NUNUZ AB2 TIMES BI
+12270 ; [.55F6.0020.0002] # CUNEIFORM SIGN NUNUZ AB2 TIMES DUG
+12271 ; [.55F7.0020.0002] # CUNEIFORM SIGN NUNUZ AB2 TIMES GUD
+12272 ; [.55F8.0020.0002] # CUNEIFORM SIGN NUNUZ AB2 TIMES IGI GUNU
+12273 ; [.55F9.0020.0002] # CUNEIFORM SIGN NUNUZ AB2 TIMES KAD3
+12274 ; [.55FA.0020.0002] # CUNEIFORM SIGN NUNUZ AB2 TIMES LA
+12275 ; [.55FB.0020.0002] # CUNEIFORM SIGN NUNUZ AB2 TIMES NE
+12276 ; [.55FC.0020.0002] # CUNEIFORM SIGN NUNUZ AB2 TIMES SILA3
+12277 ; [.55FD.0020.0002] # CUNEIFORM SIGN NUNUZ AB2 TIMES U2
+12278 ; [.55FE.0020.0002] # CUNEIFORM SIGN NUNUZ KISIM5 TIMES BI
+12279 ; [.55FF.0020.0002] # CUNEIFORM SIGN NUNUZ KISIM5 TIMES BI U
+1227A ; [.5600.0020.0002] # CUNEIFORM SIGN PA
+1227B ; [.5601.0020.0002] # CUNEIFORM SIGN PAD
+1227C ; [.5602.0020.0002] # CUNEIFORM SIGN PAN
+1227D ; [.5603.0020.0002] # CUNEIFORM SIGN PAP
+1227E ; [.5604.0020.0002] # CUNEIFORM SIGN PESH2
+1227F ; [.5605.0020.0002] # CUNEIFORM SIGN PI
+12280 ; [.5606.0020.0002] # CUNEIFORM SIGN PI TIMES A
+12281 ; [.5607.0020.0002] # CUNEIFORM SIGN PI TIMES AB
+12282 ; [.5608.0020.0002] # CUNEIFORM SIGN PI TIMES BI
+12283 ; [.5609.0020.0002] # CUNEIFORM SIGN PI TIMES BU
+12284 ; [.560A.0020.0002] # CUNEIFORM SIGN PI TIMES E
+12285 ; [.560B.0020.0002] # CUNEIFORM SIGN PI TIMES I
+12286 ; [.560C.0020.0002] # CUNEIFORM SIGN PI TIMES IB
+12287 ; [.560D.0020.0002] # CUNEIFORM SIGN PI TIMES U
+12288 ; [.560E.0020.0002] # CUNEIFORM SIGN PI TIMES U2
+12289 ; [.560F.0020.0002] # CUNEIFORM SIGN PI CROSSING PI
+1228A ; [.5610.0020.0002] # CUNEIFORM SIGN PIRIG
+1228B ; [.5611.0020.0002] # CUNEIFORM SIGN PIRIG TIMES KAL
+1228C ; [.5612.0020.0002] # CUNEIFORM SIGN PIRIG TIMES UD
+1228D ; [.5613.0020.0002] # CUNEIFORM SIGN PIRIG TIMES ZA
+1228E ; [.5614.0020.0002] # CUNEIFORM SIGN PIRIG OPPOSING PIRIG
+1228F ; [.5615.0020.0002] # CUNEIFORM SIGN RA
+12290 ; [.5616.0020.0002] # CUNEIFORM SIGN RAB
+12291 ; [.5617.0020.0002] # CUNEIFORM SIGN RI
+12292 ; [.5618.0020.0002] # CUNEIFORM SIGN RU
+12293 ; [.5619.0020.0002] # CUNEIFORM SIGN SA
+12294 ; [.561A.0020.0002] # CUNEIFORM SIGN SAG NUTILLU
+12295 ; [.561B.0020.0002] # CUNEIFORM SIGN SAG
+12296 ; [.561C.0020.0002] # CUNEIFORM SIGN SAG TIMES A
+12297 ; [.561D.0020.0002] # CUNEIFORM SIGN SAG TIMES DU
+12298 ; [.561E.0020.0002] # CUNEIFORM SIGN SAG TIMES DUB
+12299 ; [.561F.0020.0002] # CUNEIFORM SIGN SAG TIMES HA
+1229A ; [.5620.0020.0002] # CUNEIFORM SIGN SAG TIMES KAK
+1229B ; [.5621.0020.0002] # CUNEIFORM SIGN SAG TIMES KUR
+1229C ; [.5622.0020.0002] # CUNEIFORM SIGN SAG TIMES LUM
+1229D ; [.5623.0020.0002] # CUNEIFORM SIGN SAG TIMES MI
+1229E ; [.5624.0020.0002] # CUNEIFORM SIGN SAG TIMES NUN
+1229F ; [.5625.0020.0002] # CUNEIFORM SIGN SAG TIMES SAL
+122A0 ; [.5626.0020.0002] # CUNEIFORM SIGN SAG TIMES SHID
+122A1 ; [.5627.0020.0002] # CUNEIFORM SIGN SAG TIMES TAB
+122A2 ; [.5628.0020.0002] # CUNEIFORM SIGN SAG TIMES U2
+122A3 ; [.5629.0020.0002] # CUNEIFORM SIGN SAG TIMES UB
+122A4 ; [.562A.0020.0002] # CUNEIFORM SIGN SAG TIMES UM
+122A5 ; [.562B.0020.0002] # CUNEIFORM SIGN SAG TIMES UR
+122A6 ; [.562C.0020.0002] # CUNEIFORM SIGN SAG TIMES USH
+122A7 ; [.562D.0020.0002] # CUNEIFORM SIGN SAG OVER SAG
+122A8 ; [.562E.0020.0002] # CUNEIFORM SIGN SAG GUNU
+122A9 ; [.562F.0020.0002] # CUNEIFORM SIGN SAL
+122AA ; [.5630.0020.0002] # CUNEIFORM SIGN SAL LAGAB TIMES ASH2
+122AB ; [.5631.0020.0002] # CUNEIFORM SIGN SANGA2
+122AC ; [.5632.0020.0002] # CUNEIFORM SIGN SAR
+122AD ; [.5633.0020.0002] # CUNEIFORM SIGN SHA
+122AE ; [.5634.0020.0002] # CUNEIFORM SIGN SHA3
+122AF ; [.5635.0020.0002] # CUNEIFORM SIGN SHA3 TIMES A
+122B0 ; [.5636.0020.0002] # CUNEIFORM SIGN SHA3 TIMES BAD
+122B1 ; [.5637.0020.0002] # CUNEIFORM SIGN SHA3 TIMES GISH
+122B2 ; [.5638.0020.0002] # CUNEIFORM SIGN SHA3 TIMES NE
+122B3 ; [.5639.0020.0002] # CUNEIFORM SIGN SHA3 TIMES SHU2
+122B4 ; [.563A.0020.0002] # CUNEIFORM SIGN SHA3 TIMES TUR
+122B5 ; [.563B.0020.0002] # CUNEIFORM SIGN SHA3 TIMES U
+122B6 ; [.563C.0020.0002] # CUNEIFORM SIGN SHA3 TIMES U PLUS A
+122B7 ; [.563D.0020.0002] # CUNEIFORM SIGN SHA6
+122B8 ; [.563E.0020.0002] # CUNEIFORM SIGN SHAB6
+122B9 ; [.563F.0020.0002] # CUNEIFORM SIGN SHAR2
+122BA ; [.5640.0020.0002] # CUNEIFORM SIGN SHE
+122BB ; [.5641.0020.0002] # CUNEIFORM SIGN SHE HU
+122BC ; [.5642.0020.0002] # CUNEIFORM SIGN SHE OVER SHE GAD OVER GAD GAR OVER GAR
+122BD ; [.5643.0020.0002] # CUNEIFORM SIGN SHE OVER SHE TAB OVER TAB GAR OVER GAR
+122BE ; [.5644.0020.0002] # CUNEIFORM SIGN SHEG9
+122BF ; [.5645.0020.0002] # CUNEIFORM SIGN SHEN
+122C0 ; [.5646.0020.0002] # CUNEIFORM SIGN SHESH
+122C1 ; [.5647.0020.0002] # CUNEIFORM SIGN SHESH2
+122C2 ; [.5648.0020.0002] # CUNEIFORM SIGN SHESHLAM
+122C3 ; [.5649.0020.0002] # CUNEIFORM SIGN SHID
+122C4 ; [.564A.0020.0002] # CUNEIFORM SIGN SHID TIMES A
+122C5 ; [.564B.0020.0002] # CUNEIFORM SIGN SHID TIMES IM
+122C6 ; [.564C.0020.0002] # CUNEIFORM SIGN SHIM
+122C7 ; [.564D.0020.0002] # CUNEIFORM SIGN SHIM TIMES A
+122C8 ; [.564E.0020.0002] # CUNEIFORM SIGN SHIM TIMES BAL
+122C9 ; [.564F.0020.0002] # CUNEIFORM SIGN SHIM TIMES BULUG
+122CA ; [.5650.0020.0002] # CUNEIFORM SIGN SHIM TIMES DIN
+122CB ; [.5651.0020.0002] # CUNEIFORM SIGN SHIM TIMES GAR
+122CC ; [.5652.0020.0002] # CUNEIFORM SIGN SHIM TIMES IGI
+122CD ; [.5653.0020.0002] # CUNEIFORM SIGN SHIM TIMES IGI GUNU
+122CE ; [.5654.0020.0002] # CUNEIFORM SIGN SHIM TIMES KUSHU2
+122CF ; [.5655.0020.0002] # CUNEIFORM SIGN SHIM TIMES LUL
+122D0 ; [.5656.0020.0002] # CUNEIFORM SIGN SHIM TIMES MUG
+122D1 ; [.5657.0020.0002] # CUNEIFORM SIGN SHIM TIMES SAL
+122D2 ; [.5658.0020.0002] # CUNEIFORM SIGN SHINIG
+122D3 ; [.5659.0020.0002] # CUNEIFORM SIGN SHIR
+122D6 ; [.565A.0020.0002] # CUNEIFORM SIGN SHITA
+122D7 ; [.565B.0020.0002] # CUNEIFORM SIGN SHU
+122D8 ; [.565C.0020.0002] # CUNEIFORM SIGN SHU OVER INVERTED SHU
+122D9 ; [.565D.0020.0002] # CUNEIFORM SIGN SHU2
+122DA ; [.565E.0020.0002] # CUNEIFORM SIGN SHUBUR
+122DB ; [.565F.0020.0002] # CUNEIFORM SIGN SI
+122DC ; [.5660.0020.0002] # CUNEIFORM SIGN SI GUNU
+122DD ; [.5661.0020.0002] # CUNEIFORM SIGN SIG
+122DE ; [.5662.0020.0002] # CUNEIFORM SIGN SIG4
+122DF ; [.5663.0020.0002] # CUNEIFORM SIGN SIG4 OVER SIG4 SHU2
+122E0 ; [.5664.0020.0002] # CUNEIFORM SIGN SIK2
+122E1 ; [.5665.0020.0002] # CUNEIFORM SIGN SILA3
+122E2 ; [.5666.0020.0002] # CUNEIFORM SIGN SU
+122E3 ; [.5667.0020.0002] # CUNEIFORM SIGN SU OVER SU
+122E4 ; [.5668.0020.0002] # CUNEIFORM SIGN SUD
+122E5 ; [.5669.0020.0002] # CUNEIFORM SIGN SUD2
+122E6 ; [.566A.0020.0002] # CUNEIFORM SIGN SUHUR
+122E7 ; [.566B.0020.0002] # CUNEIFORM SIGN SUM
+122E8 ; [.566C.0020.0002] # CUNEIFORM SIGN SUMASH
+122E9 ; [.566D.0020.0002] # CUNEIFORM SIGN SUR
+122EA ; [.566E.0020.0002] # CUNEIFORM SIGN SUR9
+122EB ; [.566F.0020.0002] # CUNEIFORM SIGN TA
+122EC ; [.5670.0020.0002] # CUNEIFORM SIGN TA ASTERISK
+122ED ; [.5671.0020.0002] # CUNEIFORM SIGN TA TIMES HI
+122EE ; [.5672.0020.0002] # CUNEIFORM SIGN TA TIMES MI
+122EF ; [.5673.0020.0002] # CUNEIFORM SIGN TA GUNU
+122F0 ; [.5674.0020.0002] # CUNEIFORM SIGN TAB
+122F1 ; [.5675.0020.0002] # CUNEIFORM SIGN TAB OVER TAB NI OVER NI DISH OVER DISH
+122F2 ; [.5676.0020.0002] # CUNEIFORM SIGN TAB SQUARED
+122F3 ; [.5677.0020.0002] # CUNEIFORM SIGN TAG
+122F4 ; [.5678.0020.0002] # CUNEIFORM SIGN TAG TIMES BI
+122F5 ; [.5679.0020.0002] # CUNEIFORM SIGN TAG TIMES GUD
+122F6 ; [.567A.0020.0002] # CUNEIFORM SIGN TAG TIMES SHE
+122F7 ; [.567B.0020.0002] # CUNEIFORM SIGN TAG TIMES SHU
+122F8 ; [.567C.0020.0002] # CUNEIFORM SIGN TAG TIMES TUG2
+122F9 ; [.567D.0020.0002] # CUNEIFORM SIGN TAG TIMES UD
+122FA ; [.567E.0020.0002] # CUNEIFORM SIGN TAK4
+122FB ; [.567F.0020.0002] # CUNEIFORM SIGN TAR
+122FC ; [.5680.0020.0002] # CUNEIFORM SIGN TE
+122FD ; [.5681.0020.0002] # CUNEIFORM SIGN TE GUNU
+122FE ; [.5682.0020.0002] # CUNEIFORM SIGN TI
+122FF ; [.5683.0020.0002] # CUNEIFORM SIGN TI TENU
+12300 ; [.5684.0020.0002] # CUNEIFORM SIGN TIL
+12301 ; [.5685.0020.0002] # CUNEIFORM SIGN TIR
+12302 ; [.5686.0020.0002] # CUNEIFORM SIGN TIR TIMES TAK4
+12303 ; [.5687.0020.0002] # CUNEIFORM SIGN TIR OVER TIR
+12304 ; [.5688.0020.0002] # CUNEIFORM SIGN TIR OVER TIR GAD OVER GAD GAR OVER GAR
+12305 ; [.5689.0020.0002] # CUNEIFORM SIGN TU
+12306 ; [.568A.0020.0002] # CUNEIFORM SIGN TUG2
+12307 ; [.568B.0020.0002] # CUNEIFORM SIGN TUK
+12308 ; [.568C.0020.0002] # CUNEIFORM SIGN TUM
+12309 ; [.568D.0020.0002] # CUNEIFORM SIGN TUR
+1230A ; [.568E.0020.0002] # CUNEIFORM SIGN TUR OVER TUR ZA OVER ZA
+1230B ; [.568F.0020.0002] # CUNEIFORM SIGN U
+1230C ; [.5690.0020.0002] # CUNEIFORM SIGN U GUD
+1230D ; [.5691.0020.0002] # CUNEIFORM SIGN U U U
+1230E ; [.5692.0020.0002] # CUNEIFORM SIGN U OVER U PA OVER PA GAR OVER GAR
+1230F ; [.5693.0020.0002] # CUNEIFORM SIGN U OVER U SUR OVER SUR
+12310 ; [.5694.0020.0002] # CUNEIFORM SIGN U OVER U U REVERSED OVER U REVERSED
+12311 ; [.5695.0020.0002] # CUNEIFORM SIGN U2
+12312 ; [.5696.0020.0002] # CUNEIFORM SIGN UB
+12313 ; [.5697.0020.0002] # CUNEIFORM SIGN UD
+12314 ; [.5698.0020.0002] # CUNEIFORM SIGN UD KUSHU2
+12315 ; [.5699.0020.0002] # CUNEIFORM SIGN UD TIMES BAD
+12316 ; [.569A.0020.0002] # CUNEIFORM SIGN UD TIMES MI
+12317 ; [.569B.0020.0002] # CUNEIFORM SIGN UD TIMES U PLUS U PLUS U
+12318 ; [.569C.0020.0002] # CUNEIFORM SIGN UD TIMES U PLUS U PLUS U GUNU
+12319 ; [.569D.0020.0002] # CUNEIFORM SIGN UD GUNU
+1231A ; [.569E.0020.0002] # CUNEIFORM SIGN UD SHESHIG
+1231B ; [.569F.0020.0002] # CUNEIFORM SIGN UD SHESHIG TIMES BAD
+1231C ; [.56A0.0020.0002] # CUNEIFORM SIGN UDUG
+1231D ; [.56A1.0020.0002] # CUNEIFORM SIGN UM
+1231E ; [.56A2.0020.0002] # CUNEIFORM SIGN UM TIMES LAGAB
+1231F ; [.56A3.0020.0002] # CUNEIFORM SIGN UM TIMES ME PLUS DA
+12320 ; [.56A4.0020.0002] # CUNEIFORM SIGN UM TIMES SHA3
+12321 ; [.56A5.0020.0002] # CUNEIFORM SIGN UM TIMES U
+12322 ; [.56A6.0020.0002] # CUNEIFORM SIGN UMBIN
+12323 ; [.56A7.0020.0002] # CUNEIFORM SIGN UMUM
+12324 ; [.56A8.0020.0002] # CUNEIFORM SIGN UMUM TIMES KASKAL
+12325 ; [.56A9.0020.0002] # CUNEIFORM SIGN UMUM TIMES PA
+12326 ; [.56AA.0020.0002] # CUNEIFORM SIGN UN
+12327 ; [.56AB.0020.0002] # CUNEIFORM SIGN UN GUNU
+12328 ; [.56AC.0020.0002] # CUNEIFORM SIGN UR
+12329 ; [.56AD.0020.0002] # CUNEIFORM SIGN UR CROSSING UR
+1232A ; [.56AE.0020.0002] # CUNEIFORM SIGN UR SHESHIG
+1232B ; [.56AF.0020.0002] # CUNEIFORM SIGN UR2
+1232C ; [.56B0.0020.0002] # CUNEIFORM SIGN UR2 TIMES A PLUS HA
+1232D ; [.56B1.0020.0002] # CUNEIFORM SIGN UR2 TIMES A PLUS NA
+1232E ; [.56B2.0020.0002] # CUNEIFORM SIGN UR2 TIMES AL
+1232F ; [.56B3.0020.0002] # CUNEIFORM SIGN UR2 TIMES HA
+12330 ; [.56B4.0020.0002] # CUNEIFORM SIGN UR2 TIMES NUN
+12331 ; [.56B5.0020.0002] # CUNEIFORM SIGN UR2 TIMES U2
+12332 ; [.56B6.0020.0002] # CUNEIFORM SIGN UR2 TIMES U2 PLUS ASH
+12333 ; [.56B7.0020.0002] # CUNEIFORM SIGN UR2 TIMES U2 PLUS BI
+12334 ; [.56B8.0020.0002] # CUNEIFORM SIGN UR4
+12335 ; [.56B9.0020.0002] # CUNEIFORM SIGN URI
+12336 ; [.56BA.0020.0002] # CUNEIFORM SIGN URI3
+12337 ; [.56BB.0020.0002] # CUNEIFORM SIGN URU
+12338 ; [.56BC.0020.0002] # CUNEIFORM SIGN URU TIMES A
+12339 ; [.56BD.0020.0002] # CUNEIFORM SIGN URU TIMES ASHGAB
+1233A ; [.56BE.0020.0002] # CUNEIFORM SIGN URU TIMES BAR
+1233B ; [.56BF.0020.0002] # CUNEIFORM SIGN URU TIMES DUN
+1233C ; [.56C0.0020.0002] # CUNEIFORM SIGN URU TIMES GA
+1233D ; [.56C1.0020.0002] # CUNEIFORM SIGN URU TIMES GAL
+1233E ; [.56C2.0020.0002] # CUNEIFORM SIGN URU TIMES GAN2 TENU
+1233F ; [.56C3.0020.0002] # CUNEIFORM SIGN URU TIMES GAR
+12340 ; [.56C4.0020.0002] # CUNEIFORM SIGN URU TIMES GU
+12341 ; [.56C5.0020.0002] # CUNEIFORM SIGN URU TIMES HA
+12342 ; [.56C6.0020.0002] # CUNEIFORM SIGN URU TIMES IGI
+12343 ; [.56C7.0020.0002] # CUNEIFORM SIGN URU TIMES IM
+12344 ; [.56C8.0020.0002] # CUNEIFORM SIGN URU TIMES ISH
+12345 ; [.56C9.0020.0002] # CUNEIFORM SIGN URU TIMES KI
+12346 ; [.56CA.0020.0002] # CUNEIFORM SIGN URU TIMES LUM
+12347 ; [.56CB.0020.0002] # CUNEIFORM SIGN URU TIMES MIN
+12348 ; [.56CC.0020.0002] # CUNEIFORM SIGN URU TIMES PA
+12349 ; [.56CD.0020.0002] # CUNEIFORM SIGN URU TIMES SHE
+1234A ; [.56CE.0020.0002] # CUNEIFORM SIGN URU TIMES SIG4
+1234B ; [.56CF.0020.0002] # CUNEIFORM SIGN URU TIMES TU
+1234C ; [.56D0.0020.0002] # CUNEIFORM SIGN URU TIMES U PLUS GUD
+1234D ; [.56D1.0020.0002] # CUNEIFORM SIGN URU TIMES UD
+1234E ; [.56D2.0020.0002] # CUNEIFORM SIGN URU TIMES URUDA
+1234F ; [.56D3.0020.0002] # CUNEIFORM SIGN URUDA
+12350 ; [.56D4.0020.0002] # CUNEIFORM SIGN URUDA TIMES U
+12351 ; [.56D5.0020.0002] # CUNEIFORM SIGN USH
+12352 ; [.56D6.0020.0002] # CUNEIFORM SIGN USH TIMES A
+12353 ; [.56D7.0020.0002] # CUNEIFORM SIGN USH TIMES KU
+12354 ; [.56D8.0020.0002] # CUNEIFORM SIGN USH TIMES KUR
+12355 ; [.56D9.0020.0002] # CUNEIFORM SIGN USH TIMES TAK4
+12356 ; [.56DA.0020.0002] # CUNEIFORM SIGN USHX
+12357 ; [.56DB.0020.0002] # CUNEIFORM SIGN USH2
+12358 ; [.56DC.0020.0002] # CUNEIFORM SIGN USHUMX
+12359 ; [.56DD.0020.0002] # CUNEIFORM SIGN UTUKI
+1235A ; [.56DE.0020.0002] # CUNEIFORM SIGN UZ3
+1235B ; [.56DF.0020.0002] # CUNEIFORM SIGN UZ3 TIMES KASKAL
+1235C ; [.56E0.0020.0002] # CUNEIFORM SIGN UZU
+1235D ; [.56E1.0020.0002] # CUNEIFORM SIGN ZA
+1235E ; [.56E2.0020.0002] # CUNEIFORM SIGN ZA TENU
+1235F ; [.56E3.0020.0002] # CUNEIFORM SIGN ZA SQUARED TIMES KUR
+12360 ; [.56E4.0020.0002] # CUNEIFORM SIGN ZAG
+12361 ; [.56E5.0020.0002] # CUNEIFORM SIGN ZAMX
+12362 ; [.56E6.0020.0002] # CUNEIFORM SIGN ZE2
+12363 ; [.56E7.0020.0002] # CUNEIFORM SIGN ZI
+12364 ; [.56E8.0020.0002] # CUNEIFORM SIGN ZI OVER ZI
+12365 ; [.56E9.0020.0002] # CUNEIFORM SIGN ZI3
+12366 ; [.56EA.0020.0002] # CUNEIFORM SIGN ZIB
+12367 ; [.56EB.0020.0002] # CUNEIFORM SIGN ZIB KABA TENU
+12368 ; [.56EC.0020.0002] # CUNEIFORM SIGN ZIG
+12369 ; [.56ED.0020.0002] # CUNEIFORM SIGN ZIZ2
+1236A ; [.56EE.0020.0002] # CUNEIFORM SIGN ZU
+1236B ; [.56EF.0020.0002] # CUNEIFORM SIGN ZU5
+1236C ; [.56F0.0020.0002] # CUNEIFORM SIGN ZU5 TIMES A
+1236D ; [.56F1.0020.0002] # CUNEIFORM SIGN ZUBUR
+1236E ; [.56F2.0020.0002] # CUNEIFORM SIGN ZUM
+1236F ; [.56F3.0020.0002] # CUNEIFORM SIGN KAP ELAMITE
+12370 ; [.56F4.0020.0002] # CUNEIFORM SIGN AB TIMES NUN
+12371 ; [.56F5.0020.0002] # CUNEIFORM SIGN AB2 TIMES A
+12372 ; [.56F6.0020.0002] # CUNEIFORM SIGN AMAR TIMES KUG
+12373 ; [.56F7.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES U2 PLUS MASH
+12374 ; [.56F8.0020.0002] # CUNEIFORM SIGN DAG3
+12375 ; [.56F9.0020.0002] # CUNEIFORM SIGN DISH PLUS SHU
+12376 ; [.56FA.0020.0002] # CUNEIFORM SIGN DUB TIMES SHE
+12377 ; [.56FB.0020.0002] # CUNEIFORM SIGN EZEN TIMES GUD
+12378 ; [.56FC.0020.0002] # CUNEIFORM SIGN EZEN TIMES SHE
+12379 ; [.56FD.0020.0002] # CUNEIFORM SIGN GA2 TIMES AN PLUS KAK PLUS A
+1237A ; [.56FE.0020.0002] # CUNEIFORM SIGN GA2 TIMES ASH2
+1237B ; [.56FF.0020.0002] # CUNEIFORM SIGN GE22
+1237C ; [.5700.0020.0002] # CUNEIFORM SIGN GIG
+1237D ; [.5701.0020.0002] # CUNEIFORM SIGN HUSH
+1237E ; [.5702.0020.0002] # CUNEIFORM SIGN KA TIMES ANSHE
+1237F ; [.5703.0020.0002] # CUNEIFORM SIGN KA TIMES ASH3
+12380 ; [.5704.0020.0002] # CUNEIFORM SIGN KA TIMES GISH
+12381 ; [.5705.0020.0002] # CUNEIFORM SIGN KA TIMES GUD
+12382 ; [.5706.0020.0002] # CUNEIFORM SIGN KA TIMES HI TIMES ASH2
+12383 ; [.5707.0020.0002] # CUNEIFORM SIGN KA TIMES LUM
+12384 ; [.5708.0020.0002] # CUNEIFORM SIGN KA TIMES PA
+12385 ; [.5709.0020.0002] # CUNEIFORM SIGN KA TIMES SHUL
+12386 ; [.570A.0020.0002] # CUNEIFORM SIGN KA TIMES TU
+12387 ; [.570B.0020.0002] # CUNEIFORM SIGN KA TIMES UR2
+12388 ; [.570C.0020.0002] # CUNEIFORM SIGN LAGAB TIMES GI
+12389 ; [.570D.0020.0002] # CUNEIFORM SIGN LU2 SHESHIG TIMES BAD
+1238A ; [.570E.0020.0002] # CUNEIFORM SIGN LU2 TIMES ESH2 PLUS LAL
+1238B ; [.570F.0020.0002] # CUNEIFORM SIGN LU2 TIMES SHU
+1238C ; [.5710.0020.0002] # CUNEIFORM SIGN MESH
+1238D ; [.5711.0020.0002] # CUNEIFORM SIGN MUSH3 TIMES ZA
+1238E ; [.5712.0020.0002] # CUNEIFORM SIGN NA4
+1238F ; [.5713.0020.0002] # CUNEIFORM SIGN NIN
+12390 ; [.5714.0020.0002] # CUNEIFORM SIGN NIN9
+12391 ; [.5715.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES BAL
+12392 ; [.5716.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES GI
+12393 ; [.5717.0020.0002] # CUNEIFORM SIGN NU11 ROTATED NINETY DEGREES
+12394 ; [.5718.0020.0002] # CUNEIFORM SIGN PESH2 ASTERISK
+12395 ; [.5719.0020.0002] # CUNEIFORM SIGN PIR2
+12396 ; [.571A.0020.0002] # CUNEIFORM SIGN SAG TIMES IGI GUNU
+12397 ; [.571B.0020.0002] # CUNEIFORM SIGN TI2
+12398 ; [.571C.0020.0002] # CUNEIFORM SIGN UM TIMES ME
+12399 ; [.571D.0020.0002] # CUNEIFORM SIGN U U
+12480 ; [.571E.0020.0002] # CUNEIFORM SIGN AB TIMES NUN TENU
+12481 ; [.571F.0020.0002] # CUNEIFORM SIGN AB TIMES SHU2
+12482 ; [.5720.0020.0002] # CUNEIFORM SIGN AD TIMES ESH2
+12483 ; [.5721.0020.0002] # CUNEIFORM SIGN BAD TIMES DISH TENU
+12484 ; [.5722.0020.0002] # CUNEIFORM SIGN BAHAR2 TIMES AB2
+12485 ; [.5723.0020.0002] # CUNEIFORM SIGN BAHAR2 TIMES NI
+12486 ; [.5724.0020.0002] # CUNEIFORM SIGN BAHAR2 TIMES ZA
+12487 ; [.5725.0020.0002] # CUNEIFORM SIGN BU OVER BU TIMES NA2
+12488 ; [.5726.0020.0002] # CUNEIFORM SIGN DA TIMES TAK4
+12489 ; [.5727.0020.0002] # CUNEIFORM SIGN DAG TIMES KUR
+1248A ; [.5728.0020.0002] # CUNEIFORM SIGN DIM TIMES IGI
+1248B ; [.5729.0020.0002] # CUNEIFORM SIGN DIM TIMES U U U
+1248C ; [.572A.0020.0002] # CUNEIFORM SIGN DIM2 TIMES UD
+1248D ; [.572B.0020.0002] # CUNEIFORM SIGN DUG TIMES ANSHE
+1248E ; [.572C.0020.0002] # CUNEIFORM SIGN DUG TIMES ASH
+1248F ; [.572D.0020.0002] # CUNEIFORM SIGN DUG TIMES ASH AT LEFT
+12490 ; [.572E.0020.0002] # CUNEIFORM SIGN DUG TIMES DIN
+12491 ; [.572F.0020.0002] # CUNEIFORM SIGN DUG TIMES DUN
+12492 ; [.5730.0020.0002] # CUNEIFORM SIGN DUG TIMES ERIN2
+12493 ; [.5731.0020.0002] # CUNEIFORM SIGN DUG TIMES GA
+12494 ; [.5732.0020.0002] # CUNEIFORM SIGN DUG TIMES GI
+12495 ; [.5733.0020.0002] # CUNEIFORM SIGN DUG TIMES GIR2 GUNU
+12496 ; [.5734.0020.0002] # CUNEIFORM SIGN DUG TIMES GISH
+12497 ; [.5735.0020.0002] # CUNEIFORM SIGN DUG TIMES HA
+12498 ; [.5736.0020.0002] # CUNEIFORM SIGN DUG TIMES HI
+12499 ; [.5737.0020.0002] # CUNEIFORM SIGN DUG TIMES IGI GUNU
+1249A ; [.5738.0020.0002] # CUNEIFORM SIGN DUG TIMES KASKAL
+1249B ; [.5739.0020.0002] # CUNEIFORM SIGN DUG TIMES KUR
+1249C ; [.573A.0020.0002] # CUNEIFORM SIGN DUG TIMES KUSHU2
+1249D ; [.573B.0020.0002] # CUNEIFORM SIGN DUG TIMES KUSHU2 PLUS KASKAL
+1249E ; [.573C.0020.0002] # CUNEIFORM SIGN DUG TIMES LAK-020
+1249F ; [.573D.0020.0002] # CUNEIFORM SIGN DUG TIMES LAM
+124A0 ; [.573E.0020.0002] # CUNEIFORM SIGN DUG TIMES LAM TIMES KUR
+124A1 ; [.573F.0020.0002] # CUNEIFORM SIGN DUG TIMES LUH PLUS GISH
+124A2 ; [.5740.0020.0002] # CUNEIFORM SIGN DUG TIMES MASH
+124A3 ; [.5741.0020.0002] # CUNEIFORM SIGN DUG TIMES MES
+124A4 ; [.5742.0020.0002] # CUNEIFORM SIGN DUG TIMES MI
+124A5 ; [.5743.0020.0002] # CUNEIFORM SIGN DUG TIMES NI
+124A6 ; [.5744.0020.0002] # CUNEIFORM SIGN DUG TIMES PI
+124A7 ; [.5745.0020.0002] # CUNEIFORM SIGN DUG TIMES SHE
+124A8 ; [.5746.0020.0002] # CUNEIFORM SIGN DUG TIMES SI GUNU
+124A9 ; [.5747.0020.0002] # CUNEIFORM SIGN E2 TIMES KUR
+124AA ; [.5748.0020.0002] # CUNEIFORM SIGN E2 TIMES PAP
+124AB ; [.5749.0020.0002] # CUNEIFORM SIGN ERIN2 X
+124AC ; [.574A.0020.0002] # CUNEIFORM SIGN ESH2 CROSSING ESH2
+124AD ; [.574B.0020.0002] # CUNEIFORM SIGN EZEN SHESHIG TIMES ASH
+124AE ; [.574C.0020.0002] # CUNEIFORM SIGN EZEN SHESHIG TIMES HI
+124AF ; [.574D.0020.0002] # CUNEIFORM SIGN EZEN SHESHIG TIMES IGI GUNU
+124B0 ; [.574E.0020.0002] # CUNEIFORM SIGN EZEN SHESHIG TIMES LA
+124B1 ; [.574F.0020.0002] # CUNEIFORM SIGN EZEN SHESHIG TIMES LAL
+124B2 ; [.5750.0020.0002] # CUNEIFORM SIGN EZEN SHESHIG TIMES ME
+124B3 ; [.5751.0020.0002] # CUNEIFORM SIGN EZEN SHESHIG TIMES MES
+124B4 ; [.5752.0020.0002] # CUNEIFORM SIGN EZEN SHESHIG TIMES SU
+124B5 ; [.5753.0020.0002] # CUNEIFORM SIGN EZEN TIMES SU
+124B6 ; [.5754.0020.0002] # CUNEIFORM SIGN GA2 TIMES BAHAR2
+124B7 ; [.5755.0020.0002] # CUNEIFORM SIGN GA2 TIMES DIM GUNU
+124B8 ; [.5756.0020.0002] # CUNEIFORM SIGN GA2 TIMES DUG TIMES IGI GUNU
+124B9 ; [.5757.0020.0002] # CUNEIFORM SIGN GA2 TIMES DUG TIMES KASKAL
+124BA ; [.5758.0020.0002] # CUNEIFORM SIGN GA2 TIMES EREN
+124BB ; [.5759.0020.0002] # CUNEIFORM SIGN GA2 TIMES GA
+124BC ; [.575A.0020.0002] # CUNEIFORM SIGN GA2 TIMES GAR PLUS DI
+124BD ; [.575B.0020.0002] # CUNEIFORM SIGN GA2 TIMES GAR PLUS NE
+124BE ; [.575C.0020.0002] # CUNEIFORM SIGN GA2 TIMES HA PLUS A
+124BF ; [.575D.0020.0002] # CUNEIFORM SIGN GA2 TIMES KUSHU2 PLUS KASKAL
+124C0 ; [.575E.0020.0002] # CUNEIFORM SIGN GA2 TIMES LAM
+124C1 ; [.575F.0020.0002] # CUNEIFORM SIGN GA2 TIMES LAM TIMES KUR
+124C2 ; [.5760.0020.0002] # CUNEIFORM SIGN GA2 TIMES LUH
+124C3 ; [.5761.0020.0002] # CUNEIFORM SIGN GA2 TIMES MUSH
+124C4 ; [.5762.0020.0002] # CUNEIFORM SIGN GA2 TIMES NE
+124C5 ; [.5763.0020.0002] # CUNEIFORM SIGN GA2 TIMES NE PLUS E2
+124C6 ; [.5764.0020.0002] # CUNEIFORM SIGN GA2 TIMES NE PLUS GI
+124C7 ; [.5765.0020.0002] # CUNEIFORM SIGN GA2 TIMES SHIM
+124C8 ; [.5766.0020.0002] # CUNEIFORM SIGN GA2 TIMES ZIZ2
+124C9 ; [.5767.0020.0002] # CUNEIFORM SIGN GABA ROTATED NINETY DEGREES
+124CA ; [.5768.0020.0002] # CUNEIFORM SIGN GESHTIN TIMES U
+124CB ; [.5769.0020.0002] # CUNEIFORM SIGN GISH TIMES GISH CROSSING GISH
+124CC ; [.576A.0020.0002] # CUNEIFORM SIGN GU2 TIMES IGI GUNU
+124CD ; [.576B.0020.0002] # CUNEIFORM SIGN GUD PLUS GISH TIMES TAK4
+124CE ; [.576C.0020.0002] # CUNEIFORM SIGN HA TENU GUNU
+124CF ; [.576D.0020.0002] # CUNEIFORM SIGN HI TIMES ASH OVER HI TIMES ASH
+124D0 ; [.576E.0020.0002] # CUNEIFORM SIGN KA TIMES BU
+124D1 ; [.576F.0020.0002] # CUNEIFORM SIGN KA TIMES KA
+124D2 ; [.5770.0020.0002] # CUNEIFORM SIGN KA TIMES U U U
+124D3 ; [.5771.0020.0002] # CUNEIFORM SIGN KA TIMES UR
+124D4 ; [.5772.0020.0002] # CUNEIFORM SIGN LAGAB TIMES ZU OVER ZU
+124D5 ; [.5773.0020.0002] # CUNEIFORM SIGN LAK-003
+124D6 ; [.5774.0020.0002] # CUNEIFORM SIGN LAK-021
+124D7 ; [.5775.0020.0002] # CUNEIFORM SIGN LAK-025
+124D8 ; [.5776.0020.0002] # CUNEIFORM SIGN LAK-030
+124D9 ; [.5777.0020.0002] # CUNEIFORM SIGN LAK-050
+124DA ; [.5778.0020.0002] # CUNEIFORM SIGN LAK-051
+124DB ; [.5779.0020.0002] # CUNEIFORM SIGN LAK-062
+124DC ; [.577A.0020.0002] # CUNEIFORM SIGN LAK-079 OVER LAK-079 GUNU
+124DD ; [.577B.0020.0002] # CUNEIFORM SIGN LAK-080
+124DE ; [.577C.0020.0002] # CUNEIFORM SIGN LAK-081 OVER LAK-081
+124DF ; [.577D.0020.0002] # CUNEIFORM SIGN LAK-092
+124E0 ; [.577E.0020.0002] # CUNEIFORM SIGN LAK-130
+124E1 ; [.577F.0020.0002] # CUNEIFORM SIGN LAK-142
+124E2 ; [.5780.0020.0002] # CUNEIFORM SIGN LAK-210
+124E3 ; [.5781.0020.0002] # CUNEIFORM SIGN LAK-219
+124E4 ; [.5782.0020.0002] # CUNEIFORM SIGN LAK-220
+124E5 ; [.5783.0020.0002] # CUNEIFORM SIGN LAK-225
+124E6 ; [.5784.0020.0002] # CUNEIFORM SIGN LAK-228
+124E7 ; [.5785.0020.0002] # CUNEIFORM SIGN LAK-238
+124E8 ; [.5786.0020.0002] # CUNEIFORM SIGN LAK-265
+124E9 ; [.5787.0020.0002] # CUNEIFORM SIGN LAK-266
+124EA ; [.5788.0020.0002] # CUNEIFORM SIGN LAK-343
+124EB ; [.5789.0020.0002] # CUNEIFORM SIGN LAK-347
+124EC ; [.578A.0020.0002] # CUNEIFORM SIGN LAK-348
+124ED ; [.578B.0020.0002] # CUNEIFORM SIGN LAK-383
+124EE ; [.578C.0020.0002] # CUNEIFORM SIGN LAK-384
+124EF ; [.578D.0020.0002] # CUNEIFORM SIGN LAK-390
+124F0 ; [.578E.0020.0002] # CUNEIFORM SIGN LAK-441
+124F1 ; [.578F.0020.0002] # CUNEIFORM SIGN LAK-449
+124F2 ; [.5790.0020.0002] # CUNEIFORM SIGN LAK-449 TIMES GU
+124F3 ; [.5791.0020.0002] # CUNEIFORM SIGN LAK-449 TIMES IGI
+124F4 ; [.5792.0020.0002] # CUNEIFORM SIGN LAK-449 TIMES PAP PLUS LU3
+124F5 ; [.5793.0020.0002] # CUNEIFORM SIGN LAK-449 TIMES PAP PLUS PAP PLUS LU3
+124F6 ; [.5794.0020.0002] # CUNEIFORM SIGN LAK-449 TIMES U2 PLUS BA
+124F7 ; [.5795.0020.0002] # CUNEIFORM SIGN LAK-450
+124F8 ; [.5796.0020.0002] # CUNEIFORM SIGN LAK-457
+124F9 ; [.5797.0020.0002] # CUNEIFORM SIGN LAK-470
+124FA ; [.5798.0020.0002] # CUNEIFORM SIGN LAK-483
+124FB ; [.5799.0020.0002] # CUNEIFORM SIGN LAK-490
+124FC ; [.579A.0020.0002] # CUNEIFORM SIGN LAK-492
+124FD ; [.579B.0020.0002] # CUNEIFORM SIGN LAK-493
+124FE ; [.579C.0020.0002] # CUNEIFORM SIGN LAK-495
+124FF ; [.579D.0020.0002] # CUNEIFORM SIGN LAK-550
+12500 ; [.579E.0020.0002] # CUNEIFORM SIGN LAK-608
+12501 ; [.579F.0020.0002] # CUNEIFORM SIGN LAK-617
+12502 ; [.57A0.0020.0002] # CUNEIFORM SIGN LAK-617 TIMES ASH
+12503 ; [.57A1.0020.0002] # CUNEIFORM SIGN LAK-617 TIMES BAD
+12504 ; [.57A2.0020.0002] # CUNEIFORM SIGN LAK-617 TIMES DUN3 GUNU GUNU
+12505 ; [.57A3.0020.0002] # CUNEIFORM SIGN LAK-617 TIMES KU3
+12506 ; [.57A4.0020.0002] # CUNEIFORM SIGN LAK-617 TIMES LA
+12507 ; [.57A5.0020.0002] # CUNEIFORM SIGN LAK-617 TIMES TAR
+12508 ; [.57A6.0020.0002] # CUNEIFORM SIGN LAK-617 TIMES TE
+12509 ; [.57A7.0020.0002] # CUNEIFORM SIGN LAK-617 TIMES U2
+1250A ; [.57A8.0020.0002] # CUNEIFORM SIGN LAK-617 TIMES UD
+1250B ; [.57A9.0020.0002] # CUNEIFORM SIGN LAK-617 TIMES URUDA
+1250C ; [.57AA.0020.0002] # CUNEIFORM SIGN LAK-636
+1250D ; [.57AB.0020.0002] # CUNEIFORM SIGN LAK-648
+1250E ; [.57AC.0020.0002] # CUNEIFORM SIGN LAK-648 TIMES DUB
+1250F ; [.57AD.0020.0002] # CUNEIFORM SIGN LAK-648 TIMES GA
+12510 ; [.57AE.0020.0002] # CUNEIFORM SIGN LAK-648 TIMES IGI
+12511 ; [.57AF.0020.0002] # CUNEIFORM SIGN LAK-648 TIMES IGI GUNU
+12512 ; [.57B0.0020.0002] # CUNEIFORM SIGN LAK-648 TIMES NI
+12513 ; [.57B1.0020.0002] # CUNEIFORM SIGN LAK-648 TIMES PAP PLUS PAP PLUS LU3
+12514 ; [.57B2.0020.0002] # CUNEIFORM SIGN LAK-648 TIMES SHESH PLUS KI
+12515 ; [.57B3.0020.0002] # CUNEIFORM SIGN LAK-648 TIMES UD
+12516 ; [.57B4.0020.0002] # CUNEIFORM SIGN LAK-648 TIMES URUDA
+12517 ; [.57B5.0020.0002] # CUNEIFORM SIGN LAK-724
+12518 ; [.57B6.0020.0002] # CUNEIFORM SIGN LAK-749
+12519 ; [.57B7.0020.0002] # CUNEIFORM SIGN LU2 GUNU TIMES ASH
+1251A ; [.57B8.0020.0002] # CUNEIFORM SIGN LU2 TIMES DISH
+1251B ; [.57B9.0020.0002] # CUNEIFORM SIGN LU2 TIMES HAL
+1251C ; [.57BA.0020.0002] # CUNEIFORM SIGN LU2 TIMES PAP
+1251D ; [.57BB.0020.0002] # CUNEIFORM SIGN LU2 TIMES PAP PLUS PAP PLUS LU3
+1251E ; [.57BC.0020.0002] # CUNEIFORM SIGN LU2 TIMES TAK4
+1251F ; [.57BD.0020.0002] # CUNEIFORM SIGN MI PLUS ZA7
+12520 ; [.57BE.0020.0002] # CUNEIFORM SIGN MUSH OVER MUSH TIMES GA
+12521 ; [.57BF.0020.0002] # CUNEIFORM SIGN MUSH OVER MUSH TIMES KAK
+12522 ; [.57C0.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES DIM GUNU
+12523 ; [.57C1.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES GISH
+12524 ; [.57C2.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES GUL
+12525 ; [.57C3.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES HI
+12526 ; [.57C4.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES KESH2
+12527 ; [.57C5.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES LAK-050
+12528 ; [.57C6.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES MASH
+12529 ; [.57C7.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES PAP PLUS PAP
+1252A ; [.57C8.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES U
+1252B ; [.57C9.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES U PLUS U
+1252C ; [.57CA.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES URUDA
+1252D ; [.57CB.0020.0002] # CUNEIFORM SIGN SAG GUNU TIMES HA
+1252E ; [.57CC.0020.0002] # CUNEIFORM SIGN SAG TIMES EN
+1252F ; [.57CD.0020.0002] # CUNEIFORM SIGN SAG TIMES SHE AT LEFT
+12530 ; [.57CE.0020.0002] # CUNEIFORM SIGN SAG TIMES TAK4
+12531 ; [.57CF.0020.0002] # CUNEIFORM SIGN SHA6 TENU
+12532 ; [.57D0.0020.0002] # CUNEIFORM SIGN SHE OVER SHE
+12533 ; [.57D1.0020.0002] # CUNEIFORM SIGN SHE PLUS HUB2
+12534 ; [.57D2.0020.0002] # CUNEIFORM SIGN SHE PLUS NAM2
+12535 ; [.57D3.0020.0002] # CUNEIFORM SIGN SHE PLUS SAR
+12536 ; [.57D4.0020.0002] # CUNEIFORM SIGN SHU2 PLUS DUG TIMES NI
+12537 ; [.57D5.0020.0002] # CUNEIFORM SIGN SHU2 PLUS E2 TIMES AN
+12538 ; [.57D6.0020.0002] # CUNEIFORM SIGN SI TIMES TAK4
+12539 ; [.57D7.0020.0002] # CUNEIFORM SIGN TAK4 PLUS SAG
+1253A ; [.57D8.0020.0002] # CUNEIFORM SIGN TUM TIMES GAN2 TENU
+1253B ; [.57D9.0020.0002] # CUNEIFORM SIGN TUM TIMES THREE DISH
+1253C ; [.57DA.0020.0002] # CUNEIFORM SIGN UR2 INVERTED
+1253D ; [.57DB.0020.0002] # CUNEIFORM SIGN UR2 TIMES UD
+1253E ; [.57DC.0020.0002] # CUNEIFORM SIGN URU TIMES DARA3
+1253F ; [.57DD.0020.0002] # CUNEIFORM SIGN URU TIMES LAK-668
+12540 ; [.57DE.0020.0002] # CUNEIFORM SIGN URU TIMES LU3
+12541 ; [.57DF.0020.0002] # CUNEIFORM SIGN ZA7
+12542 ; [.57E0.0020.0002] # CUNEIFORM SIGN ZU OVER ZU PLUS SAR
+12543 ; [.57E1.0020.0002] # CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU
+13000 ; [.57E2.0020.0002] # EGYPTIAN HIEROGLYPH A001
+13001 ; [.57E3.0020.0002] # EGYPTIAN HIEROGLYPH A002
+13002 ; [.57E4.0020.0002] # EGYPTIAN HIEROGLYPH A003
+13003 ; [.57E5.0020.0002] # EGYPTIAN HIEROGLYPH A004
+13004 ; [.57E6.0020.0002] # EGYPTIAN HIEROGLYPH A005
+13005 ; [.57E7.0020.0002] # EGYPTIAN HIEROGLYPH A005A
+13006 ; [.57E8.0020.0002] # EGYPTIAN HIEROGLYPH A006
+13007 ; [.57E9.0020.0002] # EGYPTIAN HIEROGLYPH A006A
+13008 ; [.57EA.0020.0002] # EGYPTIAN HIEROGLYPH A006B
+13009 ; [.57EB.0020.0002] # EGYPTIAN HIEROGLYPH A007
+1300A ; [.57EC.0020.0002] # EGYPTIAN HIEROGLYPH A008
+1300B ; [.57ED.0020.0002] # EGYPTIAN HIEROGLYPH A009
+1300C ; [.57EE.0020.0002] # EGYPTIAN HIEROGLYPH A010
+1300D ; [.57EF.0020.0002] # EGYPTIAN HIEROGLYPH A011
+1300E ; [.57F0.0020.0002] # EGYPTIAN HIEROGLYPH A012
+1300F ; [.57F1.0020.0002] # EGYPTIAN HIEROGLYPH A013
+13010 ; [.57F2.0020.0002] # EGYPTIAN HIEROGLYPH A014
+13011 ; [.57F3.0020.0002] # EGYPTIAN HIEROGLYPH A014A
+13012 ; [.57F4.0020.0002] # EGYPTIAN HIEROGLYPH A015
+13013 ; [.57F5.0020.0002] # EGYPTIAN HIEROGLYPH A016
+13014 ; [.57F6.0020.0002] # EGYPTIAN HIEROGLYPH A017
+13015 ; [.57F7.0020.0002] # EGYPTIAN HIEROGLYPH A017A
+13016 ; [.57F8.0020.0002] # EGYPTIAN HIEROGLYPH A018
+13017 ; [.57F9.0020.0002] # EGYPTIAN HIEROGLYPH A019
+13018 ; [.57FA.0020.0002] # EGYPTIAN HIEROGLYPH A020
+13019 ; [.57FB.0020.0002] # EGYPTIAN HIEROGLYPH A021
+1301A ; [.57FC.0020.0002] # EGYPTIAN HIEROGLYPH A022
+1301B ; [.57FD.0020.0002] # EGYPTIAN HIEROGLYPH A023
+1301C ; [.57FE.0020.0002] # EGYPTIAN HIEROGLYPH A024
+1301D ; [.57FF.0020.0002] # EGYPTIAN HIEROGLYPH A025
+1301E ; [.5800.0020.0002] # EGYPTIAN HIEROGLYPH A026
+1301F ; [.5801.0020.0002] # EGYPTIAN HIEROGLYPH A027
+13020 ; [.5802.0020.0002] # EGYPTIAN HIEROGLYPH A028
+13021 ; [.5803.0020.0002] # EGYPTIAN HIEROGLYPH A029
+13022 ; [.5804.0020.0002] # EGYPTIAN HIEROGLYPH A030
+13023 ; [.5805.0020.0002] # EGYPTIAN HIEROGLYPH A031
+13024 ; [.5806.0020.0002] # EGYPTIAN HIEROGLYPH A032
+13025 ; [.5807.0020.0002] # EGYPTIAN HIEROGLYPH A032A
+13026 ; [.5808.0020.0002] # EGYPTIAN HIEROGLYPH A033
+13027 ; [.5809.0020.0002] # EGYPTIAN HIEROGLYPH A034
+13028 ; [.580A.0020.0002] # EGYPTIAN HIEROGLYPH A035
+13029 ; [.580B.0020.0002] # EGYPTIAN HIEROGLYPH A036
+1302A ; [.580C.0020.0002] # EGYPTIAN HIEROGLYPH A037
+1302B ; [.580D.0020.0002] # EGYPTIAN HIEROGLYPH A038
+1302C ; [.580E.0020.0002] # EGYPTIAN HIEROGLYPH A039
+1302D ; [.580F.0020.0002] # EGYPTIAN HIEROGLYPH A040
+1302E ; [.5810.0020.0002] # EGYPTIAN HIEROGLYPH A040A
+1302F ; [.5811.0020.0002] # EGYPTIAN HIEROGLYPH A041
+13030 ; [.5812.0020.0002] # EGYPTIAN HIEROGLYPH A042
+13031 ; [.5813.0020.0002] # EGYPTIAN HIEROGLYPH A042A
+13032 ; [.5814.0020.0002] # EGYPTIAN HIEROGLYPH A043
+13033 ; [.5815.0020.0002] # EGYPTIAN HIEROGLYPH A043A
+13034 ; [.5816.0020.0002] # EGYPTIAN HIEROGLYPH A044
+13035 ; [.5817.0020.0002] # EGYPTIAN HIEROGLYPH A045
+13036 ; [.5818.0020.0002] # EGYPTIAN HIEROGLYPH A045A
+13037 ; [.5819.0020.0002] # EGYPTIAN HIEROGLYPH A046
+13038 ; [.581A.0020.0002] # EGYPTIAN HIEROGLYPH A047
+13039 ; [.581B.0020.0002] # EGYPTIAN HIEROGLYPH A048
+1303A ; [.581C.0020.0002] # EGYPTIAN HIEROGLYPH A049
+1303B ; [.581D.0020.0002] # EGYPTIAN HIEROGLYPH A050
+1303C ; [.581E.0020.0002] # EGYPTIAN HIEROGLYPH A051
+1303D ; [.581F.0020.0002] # EGYPTIAN HIEROGLYPH A052
+1303E ; [.5820.0020.0002] # EGYPTIAN HIEROGLYPH A053
+1303F ; [.5821.0020.0002] # EGYPTIAN HIEROGLYPH A054
+13040 ; [.5822.0020.0002] # EGYPTIAN HIEROGLYPH A055
+13041 ; [.5823.0020.0002] # EGYPTIAN HIEROGLYPH A056
+13042 ; [.5824.0020.0002] # EGYPTIAN HIEROGLYPH A057
+13043 ; [.5825.0020.0002] # EGYPTIAN HIEROGLYPH A058
+13044 ; [.5826.0020.0002] # EGYPTIAN HIEROGLYPH A059
+13045 ; [.5827.0020.0002] # EGYPTIAN HIEROGLYPH A060
+13046 ; [.5828.0020.0002] # EGYPTIAN HIEROGLYPH A061
+13047 ; [.5829.0020.0002] # EGYPTIAN HIEROGLYPH A062
+13048 ; [.582A.0020.0002] # EGYPTIAN HIEROGLYPH A063
+13049 ; [.582B.0020.0002] # EGYPTIAN HIEROGLYPH A064
+1304A ; [.582C.0020.0002] # EGYPTIAN HIEROGLYPH A065
+1304B ; [.582D.0020.0002] # EGYPTIAN HIEROGLYPH A066
+1304C ; [.582E.0020.0002] # EGYPTIAN HIEROGLYPH A067
+1304D ; [.582F.0020.0002] # EGYPTIAN HIEROGLYPH A068
+1304E ; [.5830.0020.0002] # EGYPTIAN HIEROGLYPH A069
+1304F ; [.5831.0020.0002] # EGYPTIAN HIEROGLYPH A070
+13050 ; [.5832.0020.0002] # EGYPTIAN HIEROGLYPH B001
+13051 ; [.5833.0020.0002] # EGYPTIAN HIEROGLYPH B002
+13052 ; [.5834.0020.0002] # EGYPTIAN HIEROGLYPH B003
+13053 ; [.5835.0020.0002] # EGYPTIAN HIEROGLYPH B004
+13054 ; [.5836.0020.0002] # EGYPTIAN HIEROGLYPH B005
+13055 ; [.5837.0020.0002] # EGYPTIAN HIEROGLYPH B005A
+13056 ; [.5838.0020.0002] # EGYPTIAN HIEROGLYPH B006
+13057 ; [.5839.0020.0002] # EGYPTIAN HIEROGLYPH B007
+13058 ; [.583A.0020.0002] # EGYPTIAN HIEROGLYPH B008
+13059 ; [.583B.0020.0002] # EGYPTIAN HIEROGLYPH B009
+1305A ; [.583C.0020.0002] # EGYPTIAN HIEROGLYPH C001
+1305B ; [.583D.0020.0002] # EGYPTIAN HIEROGLYPH C002
+1305C ; [.583E.0020.0002] # EGYPTIAN HIEROGLYPH C002A
+1305D ; [.583F.0020.0002] # EGYPTIAN HIEROGLYPH C002B
+1305E ; [.5840.0020.0002] # EGYPTIAN HIEROGLYPH C002C
+1305F ; [.5841.0020.0002] # EGYPTIAN HIEROGLYPH C003
+13060 ; [.5842.0020.0002] # EGYPTIAN HIEROGLYPH C004
+13061 ; [.5843.0020.0002] # EGYPTIAN HIEROGLYPH C005
+13062 ; [.5844.0020.0002] # EGYPTIAN HIEROGLYPH C006
+13063 ; [.5845.0020.0002] # EGYPTIAN HIEROGLYPH C007
+13064 ; [.5846.0020.0002] # EGYPTIAN HIEROGLYPH C008
+13065 ; [.5847.0020.0002] # EGYPTIAN HIEROGLYPH C009
+13066 ; [.5848.0020.0002] # EGYPTIAN HIEROGLYPH C010
+13067 ; [.5849.0020.0002] # EGYPTIAN HIEROGLYPH C010A
+13068 ; [.584A.0020.0002] # EGYPTIAN HIEROGLYPH C011
+13069 ; [.584B.0020.0002] # EGYPTIAN HIEROGLYPH C012
+1306A ; [.584C.0020.0002] # EGYPTIAN HIEROGLYPH C013
+1306B ; [.584D.0020.0002] # EGYPTIAN HIEROGLYPH C014
+1306C ; [.584E.0020.0002] # EGYPTIAN HIEROGLYPH C015
+1306D ; [.584F.0020.0002] # EGYPTIAN HIEROGLYPH C016
+1306E ; [.5850.0020.0002] # EGYPTIAN HIEROGLYPH C017
+1306F ; [.5851.0020.0002] # EGYPTIAN HIEROGLYPH C018
+13070 ; [.5852.0020.0002] # EGYPTIAN HIEROGLYPH C019
+13071 ; [.5853.0020.0002] # EGYPTIAN HIEROGLYPH C020
+13072 ; [.5854.0020.0002] # EGYPTIAN HIEROGLYPH C021
+13073 ; [.5855.0020.0002] # EGYPTIAN HIEROGLYPH C022
+13074 ; [.5856.0020.0002] # EGYPTIAN HIEROGLYPH C023
+13075 ; [.5857.0020.0002] # EGYPTIAN HIEROGLYPH C024
+13076 ; [.5858.0020.0002] # EGYPTIAN HIEROGLYPH D001
+13077 ; [.5859.0020.0002] # EGYPTIAN HIEROGLYPH D002
+13078 ; [.585A.0020.0002] # EGYPTIAN HIEROGLYPH D003
+13079 ; [.585B.0020.0002] # EGYPTIAN HIEROGLYPH D004
+1307A ; [.585C.0020.0002] # EGYPTIAN HIEROGLYPH D005
+1307B ; [.585D.0020.0002] # EGYPTIAN HIEROGLYPH D006
+1307C ; [.585E.0020.0002] # EGYPTIAN HIEROGLYPH D007
+1307D ; [.585F.0020.0002] # EGYPTIAN HIEROGLYPH D008
+1307E ; [.5860.0020.0002] # EGYPTIAN HIEROGLYPH D008A
+1307F ; [.5861.0020.0002] # EGYPTIAN HIEROGLYPH D009
+13080 ; [.5862.0020.0002] # EGYPTIAN HIEROGLYPH D010
+13081 ; [.5863.0020.0002] # EGYPTIAN HIEROGLYPH D011
+13082 ; [.5864.0020.0002] # EGYPTIAN HIEROGLYPH D012
+13083 ; [.5865.0020.0002] # EGYPTIAN HIEROGLYPH D013
+13084 ; [.5866.0020.0002] # EGYPTIAN HIEROGLYPH D014
+13085 ; [.5867.0020.0002] # EGYPTIAN HIEROGLYPH D015
+13086 ; [.5868.0020.0002] # EGYPTIAN HIEROGLYPH D016
+13087 ; [.5869.0020.0002] # EGYPTIAN HIEROGLYPH D017
+13088 ; [.586A.0020.0002] # EGYPTIAN HIEROGLYPH D018
+13089 ; [.586B.0020.0002] # EGYPTIAN HIEROGLYPH D019
+1308A ; [.586C.0020.0002] # EGYPTIAN HIEROGLYPH D020
+1308B ; [.586D.0020.0002] # EGYPTIAN HIEROGLYPH D021
+1308C ; [.586E.0020.0002] # EGYPTIAN HIEROGLYPH D022
+1308D ; [.586F.0020.0002] # EGYPTIAN HIEROGLYPH D023
+1308E ; [.5870.0020.0002] # EGYPTIAN HIEROGLYPH D024
+1308F ; [.5871.0020.0002] # EGYPTIAN HIEROGLYPH D025
+13090 ; [.5872.0020.0002] # EGYPTIAN HIEROGLYPH D026
+13091 ; [.5873.0020.0002] # EGYPTIAN HIEROGLYPH D027
+13092 ; [.5874.0020.0002] # EGYPTIAN HIEROGLYPH D027A
+13093 ; [.5875.0020.0002] # EGYPTIAN HIEROGLYPH D028
+13094 ; [.5876.0020.0002] # EGYPTIAN HIEROGLYPH D029
+13095 ; [.5877.0020.0002] # EGYPTIAN HIEROGLYPH D030
+13096 ; [.5878.0020.0002] # EGYPTIAN HIEROGLYPH D031
+13097 ; [.5879.0020.0002] # EGYPTIAN HIEROGLYPH D031A
+13098 ; [.587A.0020.0002] # EGYPTIAN HIEROGLYPH D032
+13099 ; [.587B.0020.0002] # EGYPTIAN HIEROGLYPH D033
+1309A ; [.587C.0020.0002] # EGYPTIAN HIEROGLYPH D034
+1309B ; [.587D.0020.0002] # EGYPTIAN HIEROGLYPH D034A
+1309C ; [.587E.0020.0002] # EGYPTIAN HIEROGLYPH D035
+1309D ; [.587F.0020.0002] # EGYPTIAN HIEROGLYPH D036
+1309E ; [.5880.0020.0002] # EGYPTIAN HIEROGLYPH D037
+1309F ; [.5881.0020.0002] # EGYPTIAN HIEROGLYPH D038
+130A0 ; [.5882.0020.0002] # EGYPTIAN HIEROGLYPH D039
+130A1 ; [.5883.0020.0002] # EGYPTIAN HIEROGLYPH D040
+130A2 ; [.5884.0020.0002] # EGYPTIAN HIEROGLYPH D041
+130A3 ; [.5885.0020.0002] # EGYPTIAN HIEROGLYPH D042
+130A4 ; [.5886.0020.0002] # EGYPTIAN HIEROGLYPH D043
+130A5 ; [.5887.0020.0002] # EGYPTIAN HIEROGLYPH D044
+130A6 ; [.5888.0020.0002] # EGYPTIAN HIEROGLYPH D045
+130A7 ; [.5889.0020.0002] # EGYPTIAN HIEROGLYPH D046
+130A8 ; [.588A.0020.0002] # EGYPTIAN HIEROGLYPH D046A
+130A9 ; [.588B.0020.0002] # EGYPTIAN HIEROGLYPH D047
+130AA ; [.588C.0020.0002] # EGYPTIAN HIEROGLYPH D048
+130AB ; [.588D.0020.0002] # EGYPTIAN HIEROGLYPH D048A
+130AC ; [.588E.0020.0002] # EGYPTIAN HIEROGLYPH D049
+130AD ; [.588F.0020.0002] # EGYPTIAN HIEROGLYPH D050
+130AE ; [.5890.0020.0002] # EGYPTIAN HIEROGLYPH D050A
+130AF ; [.5891.0020.0002] # EGYPTIAN HIEROGLYPH D050B
+130B0 ; [.5892.0020.0002] # EGYPTIAN HIEROGLYPH D050C
+130B1 ; [.5893.0020.0002] # EGYPTIAN HIEROGLYPH D050D
+130B2 ; [.5894.0020.0002] # EGYPTIAN HIEROGLYPH D050E
+130B3 ; [.5895.0020.0002] # EGYPTIAN HIEROGLYPH D050F
+130B4 ; [.5896.0020.0002] # EGYPTIAN HIEROGLYPH D050G
+130B5 ; [.5897.0020.0002] # EGYPTIAN HIEROGLYPH D050H
+130B6 ; [.5898.0020.0002] # EGYPTIAN HIEROGLYPH D050I
+130B7 ; [.5899.0020.0002] # EGYPTIAN HIEROGLYPH D051
+130B8 ; [.589A.0020.0002] # EGYPTIAN HIEROGLYPH D052
+130B9 ; [.589B.0020.0002] # EGYPTIAN HIEROGLYPH D052A
+130BA ; [.589C.0020.0002] # EGYPTIAN HIEROGLYPH D053
+130BB ; [.589D.0020.0002] # EGYPTIAN HIEROGLYPH D054
+130BC ; [.589E.0020.0002] # EGYPTIAN HIEROGLYPH D054A
+130BD ; [.589F.0020.0002] # EGYPTIAN HIEROGLYPH D055
+130BE ; [.58A0.0020.0002] # EGYPTIAN HIEROGLYPH D056
+130BF ; [.58A1.0020.0002] # EGYPTIAN HIEROGLYPH D057
+130C0 ; [.58A2.0020.0002] # EGYPTIAN HIEROGLYPH D058
+130C1 ; [.58A3.0020.0002] # EGYPTIAN HIEROGLYPH D059
+130C2 ; [.58A4.0020.0002] # EGYPTIAN HIEROGLYPH D060
+130C3 ; [.58A5.0020.0002] # EGYPTIAN HIEROGLYPH D061
+130C4 ; [.58A6.0020.0002] # EGYPTIAN HIEROGLYPH D062
+130C5 ; [.58A7.0020.0002] # EGYPTIAN HIEROGLYPH D063
+130C6 ; [.58A8.0020.0002] # EGYPTIAN HIEROGLYPH D064
+130C7 ; [.58A9.0020.0002] # EGYPTIAN HIEROGLYPH D065
+130C8 ; [.58AA.0020.0002] # EGYPTIAN HIEROGLYPH D066
+130C9 ; [.58AB.0020.0002] # EGYPTIAN HIEROGLYPH D067
+130CA ; [.58AC.0020.0002] # EGYPTIAN HIEROGLYPH D067A
+130CB ; [.58AD.0020.0002] # EGYPTIAN HIEROGLYPH D067B
+130CC ; [.58AE.0020.0002] # EGYPTIAN HIEROGLYPH D067C
+130CD ; [.58AF.0020.0002] # EGYPTIAN HIEROGLYPH D067D
+130CE ; [.58B0.0020.0002] # EGYPTIAN HIEROGLYPH D067E
+130CF ; [.58B1.0020.0002] # EGYPTIAN HIEROGLYPH D067F
+130D0 ; [.58B2.0020.0002] # EGYPTIAN HIEROGLYPH D067G
+130D1 ; [.58B3.0020.0002] # EGYPTIAN HIEROGLYPH D067H
+130D2 ; [.58B4.0020.0002] # EGYPTIAN HIEROGLYPH E001
+130D3 ; [.58B5.0020.0002] # EGYPTIAN HIEROGLYPH E002
+130D4 ; [.58B6.0020.0002] # EGYPTIAN HIEROGLYPH E003
+130D5 ; [.58B7.0020.0002] # EGYPTIAN HIEROGLYPH E004
+130D6 ; [.58B8.0020.0002] # EGYPTIAN HIEROGLYPH E005
+130D7 ; [.58B9.0020.0002] # EGYPTIAN HIEROGLYPH E006
+130D8 ; [.58BA.0020.0002] # EGYPTIAN HIEROGLYPH E007
+130D9 ; [.58BB.0020.0002] # EGYPTIAN HIEROGLYPH E008
+130DA ; [.58BC.0020.0002] # EGYPTIAN HIEROGLYPH E008A
+130DB ; [.58BD.0020.0002] # EGYPTIAN HIEROGLYPH E009
+130DC ; [.58BE.0020.0002] # EGYPTIAN HIEROGLYPH E009A
+130DD ; [.58BF.0020.0002] # EGYPTIAN HIEROGLYPH E010
+130DE ; [.58C0.0020.0002] # EGYPTIAN HIEROGLYPH E011
+130DF ; [.58C1.0020.0002] # EGYPTIAN HIEROGLYPH E012
+130E0 ; [.58C2.0020.0002] # EGYPTIAN HIEROGLYPH E013
+130E1 ; [.58C3.0020.0002] # EGYPTIAN HIEROGLYPH E014
+130E2 ; [.58C4.0020.0002] # EGYPTIAN HIEROGLYPH E015
+130E3 ; [.58C5.0020.0002] # EGYPTIAN HIEROGLYPH E016
+130E4 ; [.58C6.0020.0002] # EGYPTIAN HIEROGLYPH E016A
+130E5 ; [.58C7.0020.0002] # EGYPTIAN HIEROGLYPH E017
+130E6 ; [.58C8.0020.0002] # EGYPTIAN HIEROGLYPH E017A
+130E7 ; [.58C9.0020.0002] # EGYPTIAN HIEROGLYPH E018
+130E8 ; [.58CA.0020.0002] # EGYPTIAN HIEROGLYPH E019
+130E9 ; [.58CB.0020.0002] # EGYPTIAN HIEROGLYPH E020
+130EA ; [.58CC.0020.0002] # EGYPTIAN HIEROGLYPH E020A
+130EB ; [.58CD.0020.0002] # EGYPTIAN HIEROGLYPH E021
+130EC ; [.58CE.0020.0002] # EGYPTIAN HIEROGLYPH E022
+130ED ; [.58CF.0020.0002] # EGYPTIAN HIEROGLYPH E023
+130EE ; [.58D0.0020.0002] # EGYPTIAN HIEROGLYPH E024
+130EF ; [.58D1.0020.0002] # EGYPTIAN HIEROGLYPH E025
+130F0 ; [.58D2.0020.0002] # EGYPTIAN HIEROGLYPH E026
+130F1 ; [.58D3.0020.0002] # EGYPTIAN HIEROGLYPH E027
+130F2 ; [.58D4.0020.0002] # EGYPTIAN HIEROGLYPH E028
+130F3 ; [.58D5.0020.0002] # EGYPTIAN HIEROGLYPH E028A
+130F4 ; [.58D6.0020.0002] # EGYPTIAN HIEROGLYPH E029
+130F5 ; [.58D7.0020.0002] # EGYPTIAN HIEROGLYPH E030
+130F6 ; [.58D8.0020.0002] # EGYPTIAN HIEROGLYPH E031
+130F7 ; [.58D9.0020.0002] # EGYPTIAN HIEROGLYPH E032
+130F8 ; [.58DA.0020.0002] # EGYPTIAN HIEROGLYPH E033
+130F9 ; [.58DB.0020.0002] # EGYPTIAN HIEROGLYPH E034
+130FA ; [.58DC.0020.0002] # EGYPTIAN HIEROGLYPH E034A
+130FB ; [.58DD.0020.0002] # EGYPTIAN HIEROGLYPH E036
+130FC ; [.58DE.0020.0002] # EGYPTIAN HIEROGLYPH E037
+130FD ; [.58DF.0020.0002] # EGYPTIAN HIEROGLYPH E038
+130FE ; [.58E0.0020.0002] # EGYPTIAN HIEROGLYPH F001
+130FF ; [.58E1.0020.0002] # EGYPTIAN HIEROGLYPH F001A
+13100 ; [.58E2.0020.0002] # EGYPTIAN HIEROGLYPH F002
+13101 ; [.58E3.0020.0002] # EGYPTIAN HIEROGLYPH F003
+13102 ; [.58E4.0020.0002] # EGYPTIAN HIEROGLYPH F004
+13103 ; [.58E5.0020.0002] # EGYPTIAN HIEROGLYPH F005
+13104 ; [.58E6.0020.0002] # EGYPTIAN HIEROGLYPH F006
+13105 ; [.58E7.0020.0002] # EGYPTIAN HIEROGLYPH F007
+13106 ; [.58E8.0020.0002] # EGYPTIAN HIEROGLYPH F008
+13107 ; [.58E9.0020.0002] # EGYPTIAN HIEROGLYPH F009
+13108 ; [.58EA.0020.0002] # EGYPTIAN HIEROGLYPH F010
+13109 ; [.58EB.0020.0002] # EGYPTIAN HIEROGLYPH F011
+1310A ; [.58EC.0020.0002] # EGYPTIAN HIEROGLYPH F012
+1310B ; [.58ED.0020.0002] # EGYPTIAN HIEROGLYPH F013
+1310C ; [.58EE.0020.0002] # EGYPTIAN HIEROGLYPH F013A
+1310D ; [.58EF.0020.0002] # EGYPTIAN HIEROGLYPH F014
+1310E ; [.58F0.0020.0002] # EGYPTIAN HIEROGLYPH F015
+1310F ; [.58F1.0020.0002] # EGYPTIAN HIEROGLYPH F016
+13110 ; [.58F2.0020.0002] # EGYPTIAN HIEROGLYPH F017
+13111 ; [.58F3.0020.0002] # EGYPTIAN HIEROGLYPH F018
+13112 ; [.58F4.0020.0002] # EGYPTIAN HIEROGLYPH F019
+13113 ; [.58F5.0020.0002] # EGYPTIAN HIEROGLYPH F020
+13114 ; [.58F6.0020.0002] # EGYPTIAN HIEROGLYPH F021
+13115 ; [.58F7.0020.0002] # EGYPTIAN HIEROGLYPH F021A
+13116 ; [.58F8.0020.0002] # EGYPTIAN HIEROGLYPH F022
+13117 ; [.58F9.0020.0002] # EGYPTIAN HIEROGLYPH F023
+13118 ; [.58FA.0020.0002] # EGYPTIAN HIEROGLYPH F024
+13119 ; [.58FB.0020.0002] # EGYPTIAN HIEROGLYPH F025
+1311A ; [.58FC.0020.0002] # EGYPTIAN HIEROGLYPH F026
+1311B ; [.58FD.0020.0002] # EGYPTIAN HIEROGLYPH F027
+1311C ; [.58FE.0020.0002] # EGYPTIAN HIEROGLYPH F028
+1311D ; [.58FF.0020.0002] # EGYPTIAN HIEROGLYPH F029
+1311E ; [.5900.0020.0002] # EGYPTIAN HIEROGLYPH F030
+1311F ; [.5901.0020.0002] # EGYPTIAN HIEROGLYPH F031
+13120 ; [.5902.0020.0002] # EGYPTIAN HIEROGLYPH F031A
+13121 ; [.5903.0020.0002] # EGYPTIAN HIEROGLYPH F032
+13122 ; [.5904.0020.0002] # EGYPTIAN HIEROGLYPH F033
+13123 ; [.5905.0020.0002] # EGYPTIAN HIEROGLYPH F034
+13124 ; [.5906.0020.0002] # EGYPTIAN HIEROGLYPH F035
+13125 ; [.5907.0020.0002] # EGYPTIAN HIEROGLYPH F036
+13126 ; [.5908.0020.0002] # EGYPTIAN HIEROGLYPH F037
+13127 ; [.5909.0020.0002] # EGYPTIAN HIEROGLYPH F037A
+13128 ; [.590A.0020.0002] # EGYPTIAN HIEROGLYPH F038
+13129 ; [.590B.0020.0002] # EGYPTIAN HIEROGLYPH F038A
+1312A ; [.590C.0020.0002] # EGYPTIAN HIEROGLYPH F039
+1312B ; [.590D.0020.0002] # EGYPTIAN HIEROGLYPH F040
+1312C ; [.590E.0020.0002] # EGYPTIAN HIEROGLYPH F041
+1312D ; [.590F.0020.0002] # EGYPTIAN HIEROGLYPH F042
+1312E ; [.5910.0020.0002] # EGYPTIAN HIEROGLYPH F043
+1312F ; [.5911.0020.0002] # EGYPTIAN HIEROGLYPH F044
+13130 ; [.5912.0020.0002] # EGYPTIAN HIEROGLYPH F045
+13131 ; [.5913.0020.0002] # EGYPTIAN HIEROGLYPH F045A
+13132 ; [.5914.0020.0002] # EGYPTIAN HIEROGLYPH F046
+13133 ; [.5915.0020.0002] # EGYPTIAN HIEROGLYPH F046A
+13134 ; [.5916.0020.0002] # EGYPTIAN HIEROGLYPH F047
+13135 ; [.5917.0020.0002] # EGYPTIAN HIEROGLYPH F047A
+13136 ; [.5918.0020.0002] # EGYPTIAN HIEROGLYPH F048
+13137 ; [.5919.0020.0002] # EGYPTIAN HIEROGLYPH F049
+13138 ; [.591A.0020.0002] # EGYPTIAN HIEROGLYPH F050
+13139 ; [.591B.0020.0002] # EGYPTIAN HIEROGLYPH F051
+1313A ; [.591C.0020.0002] # EGYPTIAN HIEROGLYPH F051A
+1313B ; [.591D.0020.0002] # EGYPTIAN HIEROGLYPH F051B
+1313C ; [.591E.0020.0002] # EGYPTIAN HIEROGLYPH F051C
+1313D ; [.591F.0020.0002] # EGYPTIAN HIEROGLYPH F052
+1313E ; [.5920.0020.0002] # EGYPTIAN HIEROGLYPH F053
+1313F ; [.5921.0020.0002] # EGYPTIAN HIEROGLYPH G001
+13140 ; [.5922.0020.0002] # EGYPTIAN HIEROGLYPH G002
+13141 ; [.5923.0020.0002] # EGYPTIAN HIEROGLYPH G003
+13142 ; [.5924.0020.0002] # EGYPTIAN HIEROGLYPH G004
+13143 ; [.5925.0020.0002] # EGYPTIAN HIEROGLYPH G005
+13144 ; [.5926.0020.0002] # EGYPTIAN HIEROGLYPH G006
+13145 ; [.5927.0020.0002] # EGYPTIAN HIEROGLYPH G006A
+13146 ; [.5928.0020.0002] # EGYPTIAN HIEROGLYPH G007
+13147 ; [.5929.0020.0002] # EGYPTIAN HIEROGLYPH G007A
+13148 ; [.592A.0020.0002] # EGYPTIAN HIEROGLYPH G007B
+13149 ; [.592B.0020.0002] # EGYPTIAN HIEROGLYPH G008
+1314A ; [.592C.0020.0002] # EGYPTIAN HIEROGLYPH G009
+1314B ; [.592D.0020.0002] # EGYPTIAN HIEROGLYPH G010
+1314C ; [.592E.0020.0002] # EGYPTIAN HIEROGLYPH G011
+1314D ; [.592F.0020.0002] # EGYPTIAN HIEROGLYPH G011A
+1314E ; [.5930.0020.0002] # EGYPTIAN HIEROGLYPH G012
+1314F ; [.5931.0020.0002] # EGYPTIAN HIEROGLYPH G013
+13150 ; [.5932.0020.0002] # EGYPTIAN HIEROGLYPH G014
+13151 ; [.5933.0020.0002] # EGYPTIAN HIEROGLYPH G015
+13152 ; [.5934.0020.0002] # EGYPTIAN HIEROGLYPH G016
+13153 ; [.5935.0020.0002] # EGYPTIAN HIEROGLYPH G017
+13154 ; [.5936.0020.0002] # EGYPTIAN HIEROGLYPH G018
+13155 ; [.5937.0020.0002] # EGYPTIAN HIEROGLYPH G019
+13156 ; [.5938.0020.0002] # EGYPTIAN HIEROGLYPH G020
+13157 ; [.5939.0020.0002] # EGYPTIAN HIEROGLYPH G020A
+13158 ; [.593A.0020.0002] # EGYPTIAN HIEROGLYPH G021
+13159 ; [.593B.0020.0002] # EGYPTIAN HIEROGLYPH G022
+1315A ; [.593C.0020.0002] # EGYPTIAN HIEROGLYPH G023
+1315B ; [.593D.0020.0002] # EGYPTIAN HIEROGLYPH G024
+1315C ; [.593E.0020.0002] # EGYPTIAN HIEROGLYPH G025
+1315D ; [.593F.0020.0002] # EGYPTIAN HIEROGLYPH G026
+1315E ; [.5940.0020.0002] # EGYPTIAN HIEROGLYPH G026A
+1315F ; [.5941.0020.0002] # EGYPTIAN HIEROGLYPH G027
+13160 ; [.5942.0020.0002] # EGYPTIAN HIEROGLYPH G028
+13161 ; [.5943.0020.0002] # EGYPTIAN HIEROGLYPH G029
+13162 ; [.5944.0020.0002] # EGYPTIAN HIEROGLYPH G030
+13163 ; [.5945.0020.0002] # EGYPTIAN HIEROGLYPH G031
+13164 ; [.5946.0020.0002] # EGYPTIAN HIEROGLYPH G032
+13165 ; [.5947.0020.0002] # EGYPTIAN HIEROGLYPH G033
+13166 ; [.5948.0020.0002] # EGYPTIAN HIEROGLYPH G034
+13167 ; [.5949.0020.0002] # EGYPTIAN HIEROGLYPH G035
+13168 ; [.594A.0020.0002] # EGYPTIAN HIEROGLYPH G036
+13169 ; [.594B.0020.0002] # EGYPTIAN HIEROGLYPH G036A
+1316A ; [.594C.0020.0002] # EGYPTIAN HIEROGLYPH G037
+1316B ; [.594D.0020.0002] # EGYPTIAN HIEROGLYPH G037A
+1316C ; [.594E.0020.0002] # EGYPTIAN HIEROGLYPH G038
+1316D ; [.594F.0020.0002] # EGYPTIAN HIEROGLYPH G039
+1316E ; [.5950.0020.0002] # EGYPTIAN HIEROGLYPH G040
+1316F ; [.5951.0020.0002] # EGYPTIAN HIEROGLYPH G041
+13170 ; [.5952.0020.0002] # EGYPTIAN HIEROGLYPH G042
+13171 ; [.5953.0020.0002] # EGYPTIAN HIEROGLYPH G043
+13172 ; [.5954.0020.0002] # EGYPTIAN HIEROGLYPH G043A
+13173 ; [.5955.0020.0002] # EGYPTIAN HIEROGLYPH G044
+13174 ; [.5956.0020.0002] # EGYPTIAN HIEROGLYPH G045
+13175 ; [.5957.0020.0002] # EGYPTIAN HIEROGLYPH G045A
+13176 ; [.5958.0020.0002] # EGYPTIAN HIEROGLYPH G046
+13177 ; [.5959.0020.0002] # EGYPTIAN HIEROGLYPH G047
+13178 ; [.595A.0020.0002] # EGYPTIAN HIEROGLYPH G048
+13179 ; [.595B.0020.0002] # EGYPTIAN HIEROGLYPH G049
+1317A ; [.595C.0020.0002] # EGYPTIAN HIEROGLYPH G050
+1317B ; [.595D.0020.0002] # EGYPTIAN HIEROGLYPH G051
+1317C ; [.595E.0020.0002] # EGYPTIAN HIEROGLYPH G052
+1317D ; [.595F.0020.0002] # EGYPTIAN HIEROGLYPH G053
+1317E ; [.5960.0020.0002] # EGYPTIAN HIEROGLYPH G054
+1317F ; [.5961.0020.0002] # EGYPTIAN HIEROGLYPH H001
+13180 ; [.5962.0020.0002] # EGYPTIAN HIEROGLYPH H002
+13181 ; [.5963.0020.0002] # EGYPTIAN HIEROGLYPH H003
+13182 ; [.5964.0020.0002] # EGYPTIAN HIEROGLYPH H004
+13183 ; [.5965.0020.0002] # EGYPTIAN HIEROGLYPH H005
+13184 ; [.5966.0020.0002] # EGYPTIAN HIEROGLYPH H006
+13185 ; [.5967.0020.0002] # EGYPTIAN HIEROGLYPH H006A
+13186 ; [.5968.0020.0002] # EGYPTIAN HIEROGLYPH H007
+13187 ; [.5969.0020.0002] # EGYPTIAN HIEROGLYPH H008
+13188 ; [.596A.0020.0002] # EGYPTIAN HIEROGLYPH I001
+13189 ; [.596B.0020.0002] # EGYPTIAN HIEROGLYPH I002
+1318A ; [.596C.0020.0002] # EGYPTIAN HIEROGLYPH I003
+1318B ; [.596D.0020.0002] # EGYPTIAN HIEROGLYPH I004
+1318C ; [.596E.0020.0002] # EGYPTIAN HIEROGLYPH I005
+1318D ; [.596F.0020.0002] # EGYPTIAN HIEROGLYPH I005A
+1318E ; [.5970.0020.0002] # EGYPTIAN HIEROGLYPH I006
+1318F ; [.5971.0020.0002] # EGYPTIAN HIEROGLYPH I007
+13190 ; [.5972.0020.0002] # EGYPTIAN HIEROGLYPH I008
+13191 ; [.5973.0020.0002] # EGYPTIAN HIEROGLYPH I009
+13192 ; [.5974.0020.0002] # EGYPTIAN HIEROGLYPH I009A
+13193 ; [.5975.0020.0002] # EGYPTIAN HIEROGLYPH I010
+13194 ; [.5976.0020.0002] # EGYPTIAN HIEROGLYPH I010A
+13195 ; [.5977.0020.0002] # EGYPTIAN HIEROGLYPH I011
+13196 ; [.5978.0020.0002] # EGYPTIAN HIEROGLYPH I011A
+13197 ; [.5979.0020.0002] # EGYPTIAN HIEROGLYPH I012
+13198 ; [.597A.0020.0002] # EGYPTIAN HIEROGLYPH I013
+13199 ; [.597B.0020.0002] # EGYPTIAN HIEROGLYPH I014
+1319A ; [.597C.0020.0002] # EGYPTIAN HIEROGLYPH I015
+1319B ; [.597D.0020.0002] # EGYPTIAN HIEROGLYPH K001
+1319C ; [.597E.0020.0002] # EGYPTIAN HIEROGLYPH K002
+1319D ; [.597F.0020.0002] # EGYPTIAN HIEROGLYPH K003
+1319E ; [.5980.0020.0002] # EGYPTIAN HIEROGLYPH K004
+1319F ; [.5981.0020.0002] # EGYPTIAN HIEROGLYPH K005
+131A0 ; [.5982.0020.0002] # EGYPTIAN HIEROGLYPH K006
+131A1 ; [.5983.0020.0002] # EGYPTIAN HIEROGLYPH K007
+131A2 ; [.5984.0020.0002] # EGYPTIAN HIEROGLYPH K008
+131A3 ; [.5985.0020.0002] # EGYPTIAN HIEROGLYPH L001
+131A4 ; [.5986.0020.0002] # EGYPTIAN HIEROGLYPH L002
+131A5 ; [.5987.0020.0002] # EGYPTIAN HIEROGLYPH L002A
+131A6 ; [.5988.0020.0002] # EGYPTIAN HIEROGLYPH L003
+131A7 ; [.5989.0020.0002] # EGYPTIAN HIEROGLYPH L004
+131A8 ; [.598A.0020.0002] # EGYPTIAN HIEROGLYPH L005
+131A9 ; [.598B.0020.0002] # EGYPTIAN HIEROGLYPH L006
+131AA ; [.598C.0020.0002] # EGYPTIAN HIEROGLYPH L006A
+131AB ; [.598D.0020.0002] # EGYPTIAN HIEROGLYPH L007
+131AC ; [.598E.0020.0002] # EGYPTIAN HIEROGLYPH L008
+131AD ; [.598F.0020.0002] # EGYPTIAN HIEROGLYPH M001
+131AE ; [.5990.0020.0002] # EGYPTIAN HIEROGLYPH M001A
+131AF ; [.5991.0020.0002] # EGYPTIAN HIEROGLYPH M001B
+131B0 ; [.5992.0020.0002] # EGYPTIAN HIEROGLYPH M002
+131B1 ; [.5993.0020.0002] # EGYPTIAN HIEROGLYPH M003
+131B2 ; [.5994.0020.0002] # EGYPTIAN HIEROGLYPH M003A
+131B3 ; [.5995.0020.0002] # EGYPTIAN HIEROGLYPH M004
+131B4 ; [.5996.0020.0002] # EGYPTIAN HIEROGLYPH M005
+131B5 ; [.5997.0020.0002] # EGYPTIAN HIEROGLYPH M006
+131B6 ; [.5998.0020.0002] # EGYPTIAN HIEROGLYPH M007
+131B7 ; [.5999.0020.0002] # EGYPTIAN HIEROGLYPH M008
+131B8 ; [.599A.0020.0002] # EGYPTIAN HIEROGLYPH M009
+131B9 ; [.599B.0020.0002] # EGYPTIAN HIEROGLYPH M010
+131BA ; [.599C.0020.0002] # EGYPTIAN HIEROGLYPH M010A
+131BB ; [.599D.0020.0002] # EGYPTIAN HIEROGLYPH M011
+131BC ; [.599E.0020.0002] # EGYPTIAN HIEROGLYPH M012
+131BD ; [.599F.0020.0002] # EGYPTIAN HIEROGLYPH M012A
+131BE ; [.59A0.0020.0002] # EGYPTIAN HIEROGLYPH M012B
+131BF ; [.59A1.0020.0002] # EGYPTIAN HIEROGLYPH M012C
+131C0 ; [.59A2.0020.0002] # EGYPTIAN HIEROGLYPH M012D
+131C1 ; [.59A3.0020.0002] # EGYPTIAN HIEROGLYPH M012E
+131C2 ; [.59A4.0020.0002] # EGYPTIAN HIEROGLYPH M012F
+131C3 ; [.59A5.0020.0002] # EGYPTIAN HIEROGLYPH M012G
+131C4 ; [.59A6.0020.0002] # EGYPTIAN HIEROGLYPH M012H
+131C5 ; [.59A7.0020.0002] # EGYPTIAN HIEROGLYPH M013
+131C6 ; [.59A8.0020.0002] # EGYPTIAN HIEROGLYPH M014
+131C7 ; [.59A9.0020.0002] # EGYPTIAN HIEROGLYPH M015
+131C8 ; [.59AA.0020.0002] # EGYPTIAN HIEROGLYPH M015A
+131C9 ; [.59AB.0020.0002] # EGYPTIAN HIEROGLYPH M016
+131CA ; [.59AC.0020.0002] # EGYPTIAN HIEROGLYPH M016A
+131CB ; [.59AD.0020.0002] # EGYPTIAN HIEROGLYPH M017
+131CC ; [.59AE.0020.0002] # EGYPTIAN HIEROGLYPH M017A
+131CD ; [.59AF.0020.0002] # EGYPTIAN HIEROGLYPH M018
+131CE ; [.59B0.0020.0002] # EGYPTIAN HIEROGLYPH M019
+131CF ; [.59B1.0020.0002] # EGYPTIAN HIEROGLYPH M020
+131D0 ; [.59B2.0020.0002] # EGYPTIAN HIEROGLYPH M021
+131D1 ; [.59B3.0020.0002] # EGYPTIAN HIEROGLYPH M022
+131D2 ; [.59B4.0020.0002] # EGYPTIAN HIEROGLYPH M022A
+131D3 ; [.59B5.0020.0002] # EGYPTIAN HIEROGLYPH M023
+131D4 ; [.59B6.0020.0002] # EGYPTIAN HIEROGLYPH M024
+131D5 ; [.59B7.0020.0002] # EGYPTIAN HIEROGLYPH M024A
+131D6 ; [.59B8.0020.0002] # EGYPTIAN HIEROGLYPH M025
+131D7 ; [.59B9.0020.0002] # EGYPTIAN HIEROGLYPH M026
+131D8 ; [.59BA.0020.0002] # EGYPTIAN HIEROGLYPH M027
+131D9 ; [.59BB.0020.0002] # EGYPTIAN HIEROGLYPH M028
+131DA ; [.59BC.0020.0002] # EGYPTIAN HIEROGLYPH M028A
+131DB ; [.59BD.0020.0002] # EGYPTIAN HIEROGLYPH M029
+131DC ; [.59BE.0020.0002] # EGYPTIAN HIEROGLYPH M030
+131DD ; [.59BF.0020.0002] # EGYPTIAN HIEROGLYPH M031
+131DE ; [.59C0.0020.0002] # EGYPTIAN HIEROGLYPH M031A
+131DF ; [.59C1.0020.0002] # EGYPTIAN HIEROGLYPH M032
+131E0 ; [.59C2.0020.0002] # EGYPTIAN HIEROGLYPH M033
+131E1 ; [.59C3.0020.0002] # EGYPTIAN HIEROGLYPH M033A
+131E2 ; [.59C4.0020.0002] # EGYPTIAN HIEROGLYPH M033B
+131E3 ; [.59C5.0020.0002] # EGYPTIAN HIEROGLYPH M034
+131E4 ; [.59C6.0020.0002] # EGYPTIAN HIEROGLYPH M035
+131E5 ; [.59C7.0020.0002] # EGYPTIAN HIEROGLYPH M036
+131E6 ; [.59C8.0020.0002] # EGYPTIAN HIEROGLYPH M037
+131E7 ; [.59C9.0020.0002] # EGYPTIAN HIEROGLYPH M038
+131E8 ; [.59CA.0020.0002] # EGYPTIAN HIEROGLYPH M039
+131E9 ; [.59CB.0020.0002] # EGYPTIAN HIEROGLYPH M040
+131EA ; [.59CC.0020.0002] # EGYPTIAN HIEROGLYPH M040A
+131EB ; [.59CD.0020.0002] # EGYPTIAN HIEROGLYPH M041
+131EC ; [.59CE.0020.0002] # EGYPTIAN HIEROGLYPH M042
+131ED ; [.59CF.0020.0002] # EGYPTIAN HIEROGLYPH M043
+131EE ; [.59D0.0020.0002] # EGYPTIAN HIEROGLYPH M044
+131EF ; [.59D1.0020.0002] # EGYPTIAN HIEROGLYPH N001
+131F0 ; [.59D2.0020.0002] # EGYPTIAN HIEROGLYPH N002
+131F1 ; [.59D3.0020.0002] # EGYPTIAN HIEROGLYPH N003
+131F2 ; [.59D4.0020.0002] # EGYPTIAN HIEROGLYPH N004
+131F3 ; [.59D5.0020.0002] # EGYPTIAN HIEROGLYPH N005
+131F4 ; [.59D6.0020.0002] # EGYPTIAN HIEROGLYPH N006
+131F5 ; [.59D7.0020.0002] # EGYPTIAN HIEROGLYPH N007
+131F6 ; [.59D8.0020.0002] # EGYPTIAN HIEROGLYPH N008
+131F7 ; [.59D9.0020.0002] # EGYPTIAN HIEROGLYPH N009
+131F8 ; [.59DA.0020.0002] # EGYPTIAN HIEROGLYPH N010
+131F9 ; [.59DB.0020.0002] # EGYPTIAN HIEROGLYPH N011
+131FA ; [.59DC.0020.0002] # EGYPTIAN HIEROGLYPH N012
+131FB ; [.59DD.0020.0002] # EGYPTIAN HIEROGLYPH N013
+131FC ; [.59DE.0020.0002] # EGYPTIAN HIEROGLYPH N014
+131FD ; [.59DF.0020.0002] # EGYPTIAN HIEROGLYPH N015
+131FE ; [.59E0.0020.0002] # EGYPTIAN HIEROGLYPH N016
+131FF ; [.59E1.0020.0002] # EGYPTIAN HIEROGLYPH N017
+13200 ; [.59E2.0020.0002] # EGYPTIAN HIEROGLYPH N018
+13201 ; [.59E3.0020.0002] # EGYPTIAN HIEROGLYPH N018A
+13202 ; [.59E4.0020.0002] # EGYPTIAN HIEROGLYPH N018B
+13203 ; [.59E5.0020.0002] # EGYPTIAN HIEROGLYPH N019
+13204 ; [.59E6.0020.0002] # EGYPTIAN HIEROGLYPH N020
+13205 ; [.59E7.0020.0002] # EGYPTIAN HIEROGLYPH N021
+13206 ; [.59E8.0020.0002] # EGYPTIAN HIEROGLYPH N022
+13207 ; [.59E9.0020.0002] # EGYPTIAN HIEROGLYPH N023
+13208 ; [.59EA.0020.0002] # EGYPTIAN HIEROGLYPH N024
+13209 ; [.59EB.0020.0002] # EGYPTIAN HIEROGLYPH N025
+1320A ; [.59EC.0020.0002] # EGYPTIAN HIEROGLYPH N025A
+1320B ; [.59ED.0020.0002] # EGYPTIAN HIEROGLYPH N026
+1320C ; [.59EE.0020.0002] # EGYPTIAN HIEROGLYPH N027
+1320D ; [.59EF.0020.0002] # EGYPTIAN HIEROGLYPH N028
+1320E ; [.59F0.0020.0002] # EGYPTIAN HIEROGLYPH N029
+1320F ; [.59F1.0020.0002] # EGYPTIAN HIEROGLYPH N030
+13210 ; [.59F2.0020.0002] # EGYPTIAN HIEROGLYPH N031
+13211 ; [.59F3.0020.0002] # EGYPTIAN HIEROGLYPH N032
+13212 ; [.59F4.0020.0002] # EGYPTIAN HIEROGLYPH N033
+13213 ; [.59F5.0020.0002] # EGYPTIAN HIEROGLYPH N033A
+13214 ; [.59F6.0020.0002] # EGYPTIAN HIEROGLYPH N034
+13215 ; [.59F7.0020.0002] # EGYPTIAN HIEROGLYPH N034A
+13216 ; [.59F8.0020.0002] # EGYPTIAN HIEROGLYPH N035
+13217 ; [.59F9.0020.0002] # EGYPTIAN HIEROGLYPH N035A
+13218 ; [.59FA.0020.0002] # EGYPTIAN HIEROGLYPH N036
+13219 ; [.59FB.0020.0002] # EGYPTIAN HIEROGLYPH N037
+1321A ; [.59FC.0020.0002] # EGYPTIAN HIEROGLYPH N037A
+1321B ; [.59FD.0020.0002] # EGYPTIAN HIEROGLYPH N038
+1321C ; [.59FE.0020.0002] # EGYPTIAN HIEROGLYPH N039
+1321D ; [.59FF.0020.0002] # EGYPTIAN HIEROGLYPH N040
+1321E ; [.5A00.0020.0002] # EGYPTIAN HIEROGLYPH N041
+1321F ; [.5A01.0020.0002] # EGYPTIAN HIEROGLYPH N042
+13220 ; [.5A02.0020.0002] # EGYPTIAN HIEROGLYPH NL001
+13221 ; [.5A03.0020.0002] # EGYPTIAN HIEROGLYPH NL002
+13222 ; [.5A04.0020.0002] # EGYPTIAN HIEROGLYPH NL003
+13223 ; [.5A05.0020.0002] # EGYPTIAN HIEROGLYPH NL004
+13224 ; [.5A06.0020.0002] # EGYPTIAN HIEROGLYPH NL005
+13225 ; [.5A07.0020.0002] # EGYPTIAN HIEROGLYPH NL005A
+13226 ; [.5A08.0020.0002] # EGYPTIAN HIEROGLYPH NL006
+13227 ; [.5A09.0020.0002] # EGYPTIAN HIEROGLYPH NL007
+13228 ; [.5A0A.0020.0002] # EGYPTIAN HIEROGLYPH NL008
+13229 ; [.5A0B.0020.0002] # EGYPTIAN HIEROGLYPH NL009
+1322A ; [.5A0C.0020.0002] # EGYPTIAN HIEROGLYPH NL010
+1322B ; [.5A0D.0020.0002] # EGYPTIAN HIEROGLYPH NL011
+1322C ; [.5A0E.0020.0002] # EGYPTIAN HIEROGLYPH NL012
+1322D ; [.5A0F.0020.0002] # EGYPTIAN HIEROGLYPH NL013
+1322E ; [.5A10.0020.0002] # EGYPTIAN HIEROGLYPH NL014
+1322F ; [.5A11.0020.0002] # EGYPTIAN HIEROGLYPH NL015
+13230 ; [.5A12.0020.0002] # EGYPTIAN HIEROGLYPH NL016
+13231 ; [.5A13.0020.0002] # EGYPTIAN HIEROGLYPH NL017
+13232 ; [.5A14.0020.0002] # EGYPTIAN HIEROGLYPH NL017A
+13233 ; [.5A15.0020.0002] # EGYPTIAN HIEROGLYPH NL018
+13234 ; [.5A16.0020.0002] # EGYPTIAN HIEROGLYPH NL019
+13235 ; [.5A17.0020.0002] # EGYPTIAN HIEROGLYPH NL020
+13236 ; [.5A18.0020.0002] # EGYPTIAN HIEROGLYPH NU001
+13237 ; [.5A19.0020.0002] # EGYPTIAN HIEROGLYPH NU002
+13238 ; [.5A1A.0020.0002] # EGYPTIAN HIEROGLYPH NU003
+13239 ; [.5A1B.0020.0002] # EGYPTIAN HIEROGLYPH NU004
+1323A ; [.5A1C.0020.0002] # EGYPTIAN HIEROGLYPH NU005
+1323B ; [.5A1D.0020.0002] # EGYPTIAN HIEROGLYPH NU006
+1323C ; [.5A1E.0020.0002] # EGYPTIAN HIEROGLYPH NU007
+1323D ; [.5A1F.0020.0002] # EGYPTIAN HIEROGLYPH NU008
+1323E ; [.5A20.0020.0002] # EGYPTIAN HIEROGLYPH NU009
+1323F ; [.5A21.0020.0002] # EGYPTIAN HIEROGLYPH NU010
+13240 ; [.5A22.0020.0002] # EGYPTIAN HIEROGLYPH NU010A
+13241 ; [.5A23.0020.0002] # EGYPTIAN HIEROGLYPH NU011
+13242 ; [.5A24.0020.0002] # EGYPTIAN HIEROGLYPH NU011A
+13243 ; [.5A25.0020.0002] # EGYPTIAN HIEROGLYPH NU012
+13244 ; [.5A26.0020.0002] # EGYPTIAN HIEROGLYPH NU013
+13245 ; [.5A27.0020.0002] # EGYPTIAN HIEROGLYPH NU014
+13246 ; [.5A28.0020.0002] # EGYPTIAN HIEROGLYPH NU015
+13247 ; [.5A29.0020.0002] # EGYPTIAN HIEROGLYPH NU016
+13248 ; [.5A2A.0020.0002] # EGYPTIAN HIEROGLYPH NU017
+13249 ; [.5A2B.0020.0002] # EGYPTIAN HIEROGLYPH NU018
+1324A ; [.5A2C.0020.0002] # EGYPTIAN HIEROGLYPH NU018A
+1324B ; [.5A2D.0020.0002] # EGYPTIAN HIEROGLYPH NU019
+1324C ; [.5A2E.0020.0002] # EGYPTIAN HIEROGLYPH NU020
+1324D ; [.5A2F.0020.0002] # EGYPTIAN HIEROGLYPH NU021
+1324E ; [.5A30.0020.0002] # EGYPTIAN HIEROGLYPH NU022
+1324F ; [.5A31.0020.0002] # EGYPTIAN HIEROGLYPH NU022A
+13250 ; [.5A32.0020.0002] # EGYPTIAN HIEROGLYPH O001
+13251 ; [.5A33.0020.0002] # EGYPTIAN HIEROGLYPH O001A
+13252 ; [.5A34.0020.0002] # EGYPTIAN HIEROGLYPH O002
+13253 ; [.5A35.0020.0002] # EGYPTIAN HIEROGLYPH O003
+13254 ; [.5A36.0020.0002] # EGYPTIAN HIEROGLYPH O004
+13255 ; [.5A37.0020.0002] # EGYPTIAN HIEROGLYPH O005
+13256 ; [.5A38.0020.0002] # EGYPTIAN HIEROGLYPH O005A
+13257 ; [.5A39.0020.0002] # EGYPTIAN HIEROGLYPH O006
+13258 ; [.5A3A.0020.0002] # EGYPTIAN HIEROGLYPH O006A
+13259 ; [.5A3B.0020.0002] # EGYPTIAN HIEROGLYPH O006B
+1325A ; [.5A3C.0020.0002] # EGYPTIAN HIEROGLYPH O006C
+1325B ; [.5A3D.0020.0002] # EGYPTIAN HIEROGLYPH O006D
+1325C ; [.5A3E.0020.0002] # EGYPTIAN HIEROGLYPH O006E
+1325D ; [.5A3F.0020.0002] # EGYPTIAN HIEROGLYPH O006F
+1325E ; [.5A40.0020.0002] # EGYPTIAN HIEROGLYPH O007
+1325F ; [.5A41.0020.0002] # EGYPTIAN HIEROGLYPH O008
+13260 ; [.5A42.0020.0002] # EGYPTIAN HIEROGLYPH O009
+13261 ; [.5A43.0020.0002] # EGYPTIAN HIEROGLYPH O010
+13262 ; [.5A44.0020.0002] # EGYPTIAN HIEROGLYPH O010A
+13263 ; [.5A45.0020.0002] # EGYPTIAN HIEROGLYPH O010B
+13264 ; [.5A46.0020.0002] # EGYPTIAN HIEROGLYPH O010C
+13265 ; [.5A47.0020.0002] # EGYPTIAN HIEROGLYPH O011
+13266 ; [.5A48.0020.0002] # EGYPTIAN HIEROGLYPH O012
+13267 ; [.5A49.0020.0002] # EGYPTIAN HIEROGLYPH O013
+13268 ; [.5A4A.0020.0002] # EGYPTIAN HIEROGLYPH O014
+13269 ; [.5A4B.0020.0002] # EGYPTIAN HIEROGLYPH O015
+1326A ; [.5A4C.0020.0002] # EGYPTIAN HIEROGLYPH O016
+1326B ; [.5A4D.0020.0002] # EGYPTIAN HIEROGLYPH O017
+1326C ; [.5A4E.0020.0002] # EGYPTIAN HIEROGLYPH O018
+1326D ; [.5A4F.0020.0002] # EGYPTIAN HIEROGLYPH O019
+1326E ; [.5A50.0020.0002] # EGYPTIAN HIEROGLYPH O019A
+1326F ; [.5A51.0020.0002] # EGYPTIAN HIEROGLYPH O020
+13270 ; [.5A52.0020.0002] # EGYPTIAN HIEROGLYPH O020A
+13271 ; [.5A53.0020.0002] # EGYPTIAN HIEROGLYPH O021
+13272 ; [.5A54.0020.0002] # EGYPTIAN HIEROGLYPH O022
+13273 ; [.5A55.0020.0002] # EGYPTIAN HIEROGLYPH O023
+13274 ; [.5A56.0020.0002] # EGYPTIAN HIEROGLYPH O024
+13275 ; [.5A57.0020.0002] # EGYPTIAN HIEROGLYPH O024A
+13276 ; [.5A58.0020.0002] # EGYPTIAN HIEROGLYPH O025
+13277 ; [.5A59.0020.0002] # EGYPTIAN HIEROGLYPH O025A
+13278 ; [.5A5A.0020.0002] # EGYPTIAN HIEROGLYPH O026
+13279 ; [.5A5B.0020.0002] # EGYPTIAN HIEROGLYPH O027
+1327A ; [.5A5C.0020.0002] # EGYPTIAN HIEROGLYPH O028
+1327B ; [.5A5D.0020.0002] # EGYPTIAN HIEROGLYPH O029
+1327C ; [.5A5E.0020.0002] # EGYPTIAN HIEROGLYPH O029A
+1327D ; [.5A5F.0020.0002] # EGYPTIAN HIEROGLYPH O030
+1327E ; [.5A60.0020.0002] # EGYPTIAN HIEROGLYPH O030A
+1327F ; [.5A61.0020.0002] # EGYPTIAN HIEROGLYPH O031
+13280 ; [.5A62.0020.0002] # EGYPTIAN HIEROGLYPH O032
+13281 ; [.5A63.0020.0002] # EGYPTIAN HIEROGLYPH O033
+13282 ; [.5A64.0020.0002] # EGYPTIAN HIEROGLYPH O033A
+13283 ; [.5A65.0020.0002] # EGYPTIAN HIEROGLYPH O034
+13284 ; [.5A66.0020.0002] # EGYPTIAN HIEROGLYPH O035
+13285 ; [.5A67.0020.0002] # EGYPTIAN HIEROGLYPH O036
+13286 ; [.5A68.0020.0002] # EGYPTIAN HIEROGLYPH O036A
+13287 ; [.5A69.0020.0002] # EGYPTIAN HIEROGLYPH O036B
+13288 ; [.5A6A.0020.0002] # EGYPTIAN HIEROGLYPH O036C
+13289 ; [.5A6B.0020.0002] # EGYPTIAN HIEROGLYPH O036D
+1328A ; [.5A6C.0020.0002] # EGYPTIAN HIEROGLYPH O037
+1328B ; [.5A6D.0020.0002] # EGYPTIAN HIEROGLYPH O038
+1328C ; [.5A6E.0020.0002] # EGYPTIAN HIEROGLYPH O039
+1328D ; [.5A6F.0020.0002] # EGYPTIAN HIEROGLYPH O040
+1328E ; [.5A70.0020.0002] # EGYPTIAN HIEROGLYPH O041
+1328F ; [.5A71.0020.0002] # EGYPTIAN HIEROGLYPH O042
+13290 ; [.5A72.0020.0002] # EGYPTIAN HIEROGLYPH O043
+13291 ; [.5A73.0020.0002] # EGYPTIAN HIEROGLYPH O044
+13292 ; [.5A74.0020.0002] # EGYPTIAN HIEROGLYPH O045
+13293 ; [.5A75.0020.0002] # EGYPTIAN HIEROGLYPH O046
+13294 ; [.5A76.0020.0002] # EGYPTIAN HIEROGLYPH O047
+13295 ; [.5A77.0020.0002] # EGYPTIAN HIEROGLYPH O048
+13296 ; [.5A78.0020.0002] # EGYPTIAN HIEROGLYPH O049
+13297 ; [.5A79.0020.0002] # EGYPTIAN HIEROGLYPH O050
+13298 ; [.5A7A.0020.0002] # EGYPTIAN HIEROGLYPH O050A
+13299 ; [.5A7B.0020.0002] # EGYPTIAN HIEROGLYPH O050B
+1329A ; [.5A7C.0020.0002] # EGYPTIAN HIEROGLYPH O051
+1329B ; [.5A7D.0020.0002] # EGYPTIAN HIEROGLYPH P001
+1329C ; [.5A7E.0020.0002] # EGYPTIAN HIEROGLYPH P001A
+1329D ; [.5A7F.0020.0002] # EGYPTIAN HIEROGLYPH P002
+1329E ; [.5A80.0020.0002] # EGYPTIAN HIEROGLYPH P003
+1329F ; [.5A81.0020.0002] # EGYPTIAN HIEROGLYPH P003A
+132A0 ; [.5A82.0020.0002] # EGYPTIAN HIEROGLYPH P004
+132A1 ; [.5A83.0020.0002] # EGYPTIAN HIEROGLYPH P005
+132A2 ; [.5A84.0020.0002] # EGYPTIAN HIEROGLYPH P006
+132A3 ; [.5A85.0020.0002] # EGYPTIAN HIEROGLYPH P007
+132A4 ; [.5A86.0020.0002] # EGYPTIAN HIEROGLYPH P008
+132A5 ; [.5A87.0020.0002] # EGYPTIAN HIEROGLYPH P009
+132A6 ; [.5A88.0020.0002] # EGYPTIAN HIEROGLYPH P010
+132A7 ; [.5A89.0020.0002] # EGYPTIAN HIEROGLYPH P011
+132A8 ; [.5A8A.0020.0002] # EGYPTIAN HIEROGLYPH Q001
+132A9 ; [.5A8B.0020.0002] # EGYPTIAN HIEROGLYPH Q002
+132AA ; [.5A8C.0020.0002] # EGYPTIAN HIEROGLYPH Q003
+132AB ; [.5A8D.0020.0002] # EGYPTIAN HIEROGLYPH Q004
+132AC ; [.5A8E.0020.0002] # EGYPTIAN HIEROGLYPH Q005
+132AD ; [.5A8F.0020.0002] # EGYPTIAN HIEROGLYPH Q006
+132AE ; [.5A90.0020.0002] # EGYPTIAN HIEROGLYPH Q007
+132AF ; [.5A91.0020.0002] # EGYPTIAN HIEROGLYPH R001
+132B0 ; [.5A92.0020.0002] # EGYPTIAN HIEROGLYPH R002
+132B1 ; [.5A93.0020.0002] # EGYPTIAN HIEROGLYPH R002A
+132B2 ; [.5A94.0020.0002] # EGYPTIAN HIEROGLYPH R003
+132B3 ; [.5A95.0020.0002] # EGYPTIAN HIEROGLYPH R003A
+132B4 ; [.5A96.0020.0002] # EGYPTIAN HIEROGLYPH R003B
+132B5 ; [.5A97.0020.0002] # EGYPTIAN HIEROGLYPH R004
+132B6 ; [.5A98.0020.0002] # EGYPTIAN HIEROGLYPH R005
+132B7 ; [.5A99.0020.0002] # EGYPTIAN HIEROGLYPH R006
+132B8 ; [.5A9A.0020.0002] # EGYPTIAN HIEROGLYPH R007
+132B9 ; [.5A9B.0020.0002] # EGYPTIAN HIEROGLYPH R008
+132BA ; [.5A9C.0020.0002] # EGYPTIAN HIEROGLYPH R009
+132BB ; [.5A9D.0020.0002] # EGYPTIAN HIEROGLYPH R010
+132BC ; [.5A9E.0020.0002] # EGYPTIAN HIEROGLYPH R010A
+132BD ; [.5A9F.0020.0002] # EGYPTIAN HIEROGLYPH R011
+132BE ; [.5AA0.0020.0002] # EGYPTIAN HIEROGLYPH R012
+132BF ; [.5AA1.0020.0002] # EGYPTIAN HIEROGLYPH R013
+132C0 ; [.5AA2.0020.0002] # EGYPTIAN HIEROGLYPH R014
+132C1 ; [.5AA3.0020.0002] # EGYPTIAN HIEROGLYPH R015
+132C2 ; [.5AA4.0020.0002] # EGYPTIAN HIEROGLYPH R016
+132C3 ; [.5AA5.0020.0002] # EGYPTIAN HIEROGLYPH R016A
+132C4 ; [.5AA6.0020.0002] # EGYPTIAN HIEROGLYPH R017
+132C5 ; [.5AA7.0020.0002] # EGYPTIAN HIEROGLYPH R018
+132C6 ; [.5AA8.0020.0002] # EGYPTIAN HIEROGLYPH R019
+132C7 ; [.5AA9.0020.0002] # EGYPTIAN HIEROGLYPH R020
+132C8 ; [.5AAA.0020.0002] # EGYPTIAN HIEROGLYPH R021
+132C9 ; [.5AAB.0020.0002] # EGYPTIAN HIEROGLYPH R022
+132CA ; [.5AAC.0020.0002] # EGYPTIAN HIEROGLYPH R023
+132CB ; [.5AAD.0020.0002] # EGYPTIAN HIEROGLYPH R024
+132CC ; [.5AAE.0020.0002] # EGYPTIAN HIEROGLYPH R025
+132CD ; [.5AAF.0020.0002] # EGYPTIAN HIEROGLYPH R026
+132CE ; [.5AB0.0020.0002] # EGYPTIAN HIEROGLYPH R027
+132CF ; [.5AB1.0020.0002] # EGYPTIAN HIEROGLYPH R028
+132D0 ; [.5AB2.0020.0002] # EGYPTIAN HIEROGLYPH R029
+132D1 ; [.5AB3.0020.0002] # EGYPTIAN HIEROGLYPH S001
+132D2 ; [.5AB4.0020.0002] # EGYPTIAN HIEROGLYPH S002
+132D3 ; [.5AB5.0020.0002] # EGYPTIAN HIEROGLYPH S002A
+132D4 ; [.5AB6.0020.0002] # EGYPTIAN HIEROGLYPH S003
+132D5 ; [.5AB7.0020.0002] # EGYPTIAN HIEROGLYPH S004
+132D6 ; [.5AB8.0020.0002] # EGYPTIAN HIEROGLYPH S005
+132D7 ; [.5AB9.0020.0002] # EGYPTIAN HIEROGLYPH S006
+132D8 ; [.5ABA.0020.0002] # EGYPTIAN HIEROGLYPH S006A
+132D9 ; [.5ABB.0020.0002] # EGYPTIAN HIEROGLYPH S007
+132DA ; [.5ABC.0020.0002] # EGYPTIAN HIEROGLYPH S008
+132DB ; [.5ABD.0020.0002] # EGYPTIAN HIEROGLYPH S009
+132DC ; [.5ABE.0020.0002] # EGYPTIAN HIEROGLYPH S010
+132DD ; [.5ABF.0020.0002] # EGYPTIAN HIEROGLYPH S011
+132DE ; [.5AC0.0020.0002] # EGYPTIAN HIEROGLYPH S012
+132DF ; [.5AC1.0020.0002] # EGYPTIAN HIEROGLYPH S013
+132E0 ; [.5AC2.0020.0002] # EGYPTIAN HIEROGLYPH S014
+132E1 ; [.5AC3.0020.0002] # EGYPTIAN HIEROGLYPH S014A
+132E2 ; [.5AC4.0020.0002] # EGYPTIAN HIEROGLYPH S014B
+132E3 ; [.5AC5.0020.0002] # EGYPTIAN HIEROGLYPH S015
+132E4 ; [.5AC6.0020.0002] # EGYPTIAN HIEROGLYPH S016
+132E5 ; [.5AC7.0020.0002] # EGYPTIAN HIEROGLYPH S017
+132E6 ; [.5AC8.0020.0002] # EGYPTIAN HIEROGLYPH S017A
+132E7 ; [.5AC9.0020.0002] # EGYPTIAN HIEROGLYPH S018
+132E8 ; [.5ACA.0020.0002] # EGYPTIAN HIEROGLYPH S019
+132E9 ; [.5ACB.0020.0002] # EGYPTIAN HIEROGLYPH S020
+132EA ; [.5ACC.0020.0002] # EGYPTIAN HIEROGLYPH S021
+132EB ; [.5ACD.0020.0002] # EGYPTIAN HIEROGLYPH S022
+132EC ; [.5ACE.0020.0002] # EGYPTIAN HIEROGLYPH S023
+132ED ; [.5ACF.0020.0002] # EGYPTIAN HIEROGLYPH S024
+132EE ; [.5AD0.0020.0002] # EGYPTIAN HIEROGLYPH S025
+132EF ; [.5AD1.0020.0002] # EGYPTIAN HIEROGLYPH S026
+132F0 ; [.5AD2.0020.0002] # EGYPTIAN HIEROGLYPH S026A
+132F1 ; [.5AD3.0020.0002] # EGYPTIAN HIEROGLYPH S026B
+132F2 ; [.5AD4.0020.0002] # EGYPTIAN HIEROGLYPH S027
+132F3 ; [.5AD5.0020.0002] # EGYPTIAN HIEROGLYPH S028
+132F4 ; [.5AD6.0020.0002] # EGYPTIAN HIEROGLYPH S029
+132F5 ; [.5AD7.0020.0002] # EGYPTIAN HIEROGLYPH S030
+132F6 ; [.5AD8.0020.0002] # EGYPTIAN HIEROGLYPH S031
+132F7 ; [.5AD9.0020.0002] # EGYPTIAN HIEROGLYPH S032
+132F8 ; [.5ADA.0020.0002] # EGYPTIAN HIEROGLYPH S033
+132F9 ; [.5ADB.0020.0002] # EGYPTIAN HIEROGLYPH S034
+132FA ; [.5ADC.0020.0002] # EGYPTIAN HIEROGLYPH S035
+132FB ; [.5ADD.0020.0002] # EGYPTIAN HIEROGLYPH S035A
+132FC ; [.5ADE.0020.0002] # EGYPTIAN HIEROGLYPH S036
+132FD ; [.5ADF.0020.0002] # EGYPTIAN HIEROGLYPH S037
+132FE ; [.5AE0.0020.0002] # EGYPTIAN HIEROGLYPH S038
+132FF ; [.5AE1.0020.0002] # EGYPTIAN HIEROGLYPH S039
+13300 ; [.5AE2.0020.0002] # EGYPTIAN HIEROGLYPH S040
+13301 ; [.5AE3.0020.0002] # EGYPTIAN HIEROGLYPH S041
+13302 ; [.5AE4.0020.0002] # EGYPTIAN HIEROGLYPH S042
+13303 ; [.5AE5.0020.0002] # EGYPTIAN HIEROGLYPH S043
+13304 ; [.5AE6.0020.0002] # EGYPTIAN HIEROGLYPH S044
+13305 ; [.5AE7.0020.0002] # EGYPTIAN HIEROGLYPH S045
+13306 ; [.5AE8.0020.0002] # EGYPTIAN HIEROGLYPH S046
+13307 ; [.5AE9.0020.0002] # EGYPTIAN HIEROGLYPH T001
+13308 ; [.5AEA.0020.0002] # EGYPTIAN HIEROGLYPH T002
+13309 ; [.5AEB.0020.0002] # EGYPTIAN HIEROGLYPH T003
+1330A ; [.5AEC.0020.0002] # EGYPTIAN HIEROGLYPH T003A
+1330B ; [.5AED.0020.0002] # EGYPTIAN HIEROGLYPH T004
+1330C ; [.5AEE.0020.0002] # EGYPTIAN HIEROGLYPH T005
+1330D ; [.5AEF.0020.0002] # EGYPTIAN HIEROGLYPH T006
+1330E ; [.5AF0.0020.0002] # EGYPTIAN HIEROGLYPH T007
+1330F ; [.5AF1.0020.0002] # EGYPTIAN HIEROGLYPH T007A
+13310 ; [.5AF2.0020.0002] # EGYPTIAN HIEROGLYPH T008
+13311 ; [.5AF3.0020.0002] # EGYPTIAN HIEROGLYPH T008A
+13312 ; [.5AF4.0020.0002] # EGYPTIAN HIEROGLYPH T009
+13313 ; [.5AF5.0020.0002] # EGYPTIAN HIEROGLYPH T009A
+13314 ; [.5AF6.0020.0002] # EGYPTIAN HIEROGLYPH T010
+13315 ; [.5AF7.0020.0002] # EGYPTIAN HIEROGLYPH T011
+13316 ; [.5AF8.0020.0002] # EGYPTIAN HIEROGLYPH T011A
+13317 ; [.5AF9.0020.0002] # EGYPTIAN HIEROGLYPH T012
+13318 ; [.5AFA.0020.0002] # EGYPTIAN HIEROGLYPH T013
+13319 ; [.5AFB.0020.0002] # EGYPTIAN HIEROGLYPH T014
+1331A ; [.5AFC.0020.0002] # EGYPTIAN HIEROGLYPH T015
+1331B ; [.5AFD.0020.0002] # EGYPTIAN HIEROGLYPH T016
+1331C ; [.5AFE.0020.0002] # EGYPTIAN HIEROGLYPH T016A
+1331D ; [.5AFF.0020.0002] # EGYPTIAN HIEROGLYPH T017
+1331E ; [.5B00.0020.0002] # EGYPTIAN HIEROGLYPH T018
+1331F ; [.5B01.0020.0002] # EGYPTIAN HIEROGLYPH T019
+13320 ; [.5B02.0020.0002] # EGYPTIAN HIEROGLYPH T020
+13321 ; [.5B03.0020.0002] # EGYPTIAN HIEROGLYPH T021
+13322 ; [.5B04.0020.0002] # EGYPTIAN HIEROGLYPH T022
+13323 ; [.5B05.0020.0002] # EGYPTIAN HIEROGLYPH T023
+13324 ; [.5B06.0020.0002] # EGYPTIAN HIEROGLYPH T024
+13325 ; [.5B07.0020.0002] # EGYPTIAN HIEROGLYPH T025
+13326 ; [.5B08.0020.0002] # EGYPTIAN HIEROGLYPH T026
+13327 ; [.5B09.0020.0002] # EGYPTIAN HIEROGLYPH T027
+13328 ; [.5B0A.0020.0002] # EGYPTIAN HIEROGLYPH T028
+13329 ; [.5B0B.0020.0002] # EGYPTIAN HIEROGLYPH T029
+1332A ; [.5B0C.0020.0002] # EGYPTIAN HIEROGLYPH T030
+1332B ; [.5B0D.0020.0002] # EGYPTIAN HIEROGLYPH T031
+1332C ; [.5B0E.0020.0002] # EGYPTIAN HIEROGLYPH T032
+1332D ; [.5B0F.0020.0002] # EGYPTIAN HIEROGLYPH T032A
+1332E ; [.5B10.0020.0002] # EGYPTIAN HIEROGLYPH T033
+1332F ; [.5B11.0020.0002] # EGYPTIAN HIEROGLYPH T033A
+13330 ; [.5B12.0020.0002] # EGYPTIAN HIEROGLYPH T034
+13331 ; [.5B13.0020.0002] # EGYPTIAN HIEROGLYPH T035
+13332 ; [.5B14.0020.0002] # EGYPTIAN HIEROGLYPH T036
+13333 ; [.5B15.0020.0002] # EGYPTIAN HIEROGLYPH U001
+13334 ; [.5B16.0020.0002] # EGYPTIAN HIEROGLYPH U002
+13335 ; [.5B17.0020.0002] # EGYPTIAN HIEROGLYPH U003
+13336 ; [.5B18.0020.0002] # EGYPTIAN HIEROGLYPH U004
+13337 ; [.5B19.0020.0002] # EGYPTIAN HIEROGLYPH U005
+13338 ; [.5B1A.0020.0002] # EGYPTIAN HIEROGLYPH U006
+13339 ; [.5B1B.0020.0002] # EGYPTIAN HIEROGLYPH U006A
+1333A ; [.5B1C.0020.0002] # EGYPTIAN HIEROGLYPH U006B
+1333B ; [.5B1D.0020.0002] # EGYPTIAN HIEROGLYPH U007
+1333C ; [.5B1E.0020.0002] # EGYPTIAN HIEROGLYPH U008
+1333D ; [.5B1F.0020.0002] # EGYPTIAN HIEROGLYPH U009
+1333E ; [.5B20.0020.0002] # EGYPTIAN HIEROGLYPH U010
+1333F ; [.5B21.0020.0002] # EGYPTIAN HIEROGLYPH U011
+13340 ; [.5B22.0020.0002] # EGYPTIAN HIEROGLYPH U012
+13341 ; [.5B23.0020.0002] # EGYPTIAN HIEROGLYPH U013
+13342 ; [.5B24.0020.0002] # EGYPTIAN HIEROGLYPH U014
+13343 ; [.5B25.0020.0002] # EGYPTIAN HIEROGLYPH U015
+13344 ; [.5B26.0020.0002] # EGYPTIAN HIEROGLYPH U016
+13345 ; [.5B27.0020.0002] # EGYPTIAN HIEROGLYPH U017
+13346 ; [.5B28.0020.0002] # EGYPTIAN HIEROGLYPH U018
+13347 ; [.5B29.0020.0002] # EGYPTIAN HIEROGLYPH U019
+13348 ; [.5B2A.0020.0002] # EGYPTIAN HIEROGLYPH U020
+13349 ; [.5B2B.0020.0002] # EGYPTIAN HIEROGLYPH U021
+1334A ; [.5B2C.0020.0002] # EGYPTIAN HIEROGLYPH U022
+1334B ; [.5B2D.0020.0002] # EGYPTIAN HIEROGLYPH U023
+1334C ; [.5B2E.0020.0002] # EGYPTIAN HIEROGLYPH U023A
+1334D ; [.5B2F.0020.0002] # EGYPTIAN HIEROGLYPH U024
+1334E ; [.5B30.0020.0002] # EGYPTIAN HIEROGLYPH U025
+1334F ; [.5B31.0020.0002] # EGYPTIAN HIEROGLYPH U026
+13350 ; [.5B32.0020.0002] # EGYPTIAN HIEROGLYPH U027
+13351 ; [.5B33.0020.0002] # EGYPTIAN HIEROGLYPH U028
+13352 ; [.5B34.0020.0002] # EGYPTIAN HIEROGLYPH U029
+13353 ; [.5B35.0020.0002] # EGYPTIAN HIEROGLYPH U029A
+13354 ; [.5B36.0020.0002] # EGYPTIAN HIEROGLYPH U030
+13355 ; [.5B37.0020.0002] # EGYPTIAN HIEROGLYPH U031
+13356 ; [.5B38.0020.0002] # EGYPTIAN HIEROGLYPH U032
+13357 ; [.5B39.0020.0002] # EGYPTIAN HIEROGLYPH U032A
+13358 ; [.5B3A.0020.0002] # EGYPTIAN HIEROGLYPH U033
+13359 ; [.5B3B.0020.0002] # EGYPTIAN HIEROGLYPH U034
+1335A ; [.5B3C.0020.0002] # EGYPTIAN HIEROGLYPH U035
+1335B ; [.5B3D.0020.0002] # EGYPTIAN HIEROGLYPH U036
+1335C ; [.5B3E.0020.0002] # EGYPTIAN HIEROGLYPH U037
+1335D ; [.5B3F.0020.0002] # EGYPTIAN HIEROGLYPH U038
+1335E ; [.5B40.0020.0002] # EGYPTIAN HIEROGLYPH U039
+1335F ; [.5B41.0020.0002] # EGYPTIAN HIEROGLYPH U040
+13360 ; [.5B42.0020.0002] # EGYPTIAN HIEROGLYPH U041
+13361 ; [.5B43.0020.0002] # EGYPTIAN HIEROGLYPH U042
+13362 ; [.5B44.0020.0002] # EGYPTIAN HIEROGLYPH V001
+13363 ; [.5B45.0020.0002] # EGYPTIAN HIEROGLYPH V001A
+13364 ; [.5B46.0020.0002] # EGYPTIAN HIEROGLYPH V001B
+13365 ; [.5B47.0020.0002] # EGYPTIAN HIEROGLYPH V001C
+13366 ; [.5B48.0020.0002] # EGYPTIAN HIEROGLYPH V001D
+13367 ; [.5B49.0020.0002] # EGYPTIAN HIEROGLYPH V001E
+13368 ; [.5B4A.0020.0002] # EGYPTIAN HIEROGLYPH V001F
+13369 ; [.5B4B.0020.0002] # EGYPTIAN HIEROGLYPH V001G
+1336A ; [.5B4C.0020.0002] # EGYPTIAN HIEROGLYPH V001H
+1336B ; [.5B4D.0020.0002] # EGYPTIAN HIEROGLYPH V001I
+1336C ; [.5B4E.0020.0002] # EGYPTIAN HIEROGLYPH V002
+1336D ; [.5B4F.0020.0002] # EGYPTIAN HIEROGLYPH V002A
+1336E ; [.5B50.0020.0002] # EGYPTIAN HIEROGLYPH V003
+1336F ; [.5B51.0020.0002] # EGYPTIAN HIEROGLYPH V004
+13370 ; [.5B52.0020.0002] # EGYPTIAN HIEROGLYPH V005
+13371 ; [.5B53.0020.0002] # EGYPTIAN HIEROGLYPH V006
+13372 ; [.5B54.0020.0002] # EGYPTIAN HIEROGLYPH V007
+13373 ; [.5B55.0020.0002] # EGYPTIAN HIEROGLYPH V007A
+13374 ; [.5B56.0020.0002] # EGYPTIAN HIEROGLYPH V007B
+13375 ; [.5B57.0020.0002] # EGYPTIAN HIEROGLYPH V008
+13376 ; [.5B58.0020.0002] # EGYPTIAN HIEROGLYPH V009
+13377 ; [.5B59.0020.0002] # EGYPTIAN HIEROGLYPH V010
+13378 ; [.5B5A.0020.0002] # EGYPTIAN HIEROGLYPH V011
+13379 ; [.5B5B.0020.0002] # EGYPTIAN HIEROGLYPH V011A
+1337A ; [.5B5C.0020.0002] # EGYPTIAN HIEROGLYPH V011B
+1337B ; [.5B5D.0020.0002] # EGYPTIAN HIEROGLYPH V011C
+1337C ; [.5B5E.0020.0002] # EGYPTIAN HIEROGLYPH V012
+1337D ; [.5B5F.0020.0002] # EGYPTIAN HIEROGLYPH V012A
+1337E ; [.5B60.0020.0002] # EGYPTIAN HIEROGLYPH V012B
+1337F ; [.5B61.0020.0002] # EGYPTIAN HIEROGLYPH V013
+13380 ; [.5B62.0020.0002] # EGYPTIAN HIEROGLYPH V014
+13381 ; [.5B63.0020.0002] # EGYPTIAN HIEROGLYPH V015
+13382 ; [.5B64.0020.0002] # EGYPTIAN HIEROGLYPH V016
+13383 ; [.5B65.0020.0002] # EGYPTIAN HIEROGLYPH V017
+13384 ; [.5B66.0020.0002] # EGYPTIAN HIEROGLYPH V018
+13385 ; [.5B67.0020.0002] # EGYPTIAN HIEROGLYPH V019
+13386 ; [.5B68.0020.0002] # EGYPTIAN HIEROGLYPH V020
+13387 ; [.5B69.0020.0002] # EGYPTIAN HIEROGLYPH V020A
+13388 ; [.5B6A.0020.0002] # EGYPTIAN HIEROGLYPH V020B
+13389 ; [.5B6B.0020.0002] # EGYPTIAN HIEROGLYPH V020C
+1338A ; [.5B6C.0020.0002] # EGYPTIAN HIEROGLYPH V020D
+1338B ; [.5B6D.0020.0002] # EGYPTIAN HIEROGLYPH V020E
+1338C ; [.5B6E.0020.0002] # EGYPTIAN HIEROGLYPH V020F
+1338D ; [.5B6F.0020.0002] # EGYPTIAN HIEROGLYPH V020G
+1338E ; [.5B70.0020.0002] # EGYPTIAN HIEROGLYPH V020H
+1338F ; [.5B71.0020.0002] # EGYPTIAN HIEROGLYPH V020I
+13390 ; [.5B72.0020.0002] # EGYPTIAN HIEROGLYPH V020J
+13391 ; [.5B73.0020.0002] # EGYPTIAN HIEROGLYPH V020K
+13392 ; [.5B74.0020.0002] # EGYPTIAN HIEROGLYPH V020L
+13393 ; [.5B75.0020.0002] # EGYPTIAN HIEROGLYPH V021
+13394 ; [.5B76.0020.0002] # EGYPTIAN HIEROGLYPH V022
+13395 ; [.5B77.0020.0002] # EGYPTIAN HIEROGLYPH V023
+13396 ; [.5B78.0020.0002] # EGYPTIAN HIEROGLYPH V023A
+13397 ; [.5B79.0020.0002] # EGYPTIAN HIEROGLYPH V024
+13398 ; [.5B7A.0020.0002] # EGYPTIAN HIEROGLYPH V025
+13399 ; [.5B7B.0020.0002] # EGYPTIAN HIEROGLYPH V026
+1339A ; [.5B7C.0020.0002] # EGYPTIAN HIEROGLYPH V027
+1339B ; [.5B7D.0020.0002] # EGYPTIAN HIEROGLYPH V028
+1339C ; [.5B7E.0020.0002] # EGYPTIAN HIEROGLYPH V028A
+1339D ; [.5B7F.0020.0002] # EGYPTIAN HIEROGLYPH V029
+1339E ; [.5B80.0020.0002] # EGYPTIAN HIEROGLYPH V029A
+1339F ; [.5B81.0020.0002] # EGYPTIAN HIEROGLYPH V030
+133A0 ; [.5B82.0020.0002] # EGYPTIAN HIEROGLYPH V030A
+133A1 ; [.5B83.0020.0002] # EGYPTIAN HIEROGLYPH V031
+133A2 ; [.5B84.0020.0002] # EGYPTIAN HIEROGLYPH V031A
+133A3 ; [.5B85.0020.0002] # EGYPTIAN HIEROGLYPH V032
+133A4 ; [.5B86.0020.0002] # EGYPTIAN HIEROGLYPH V033
+133A5 ; [.5B87.0020.0002] # EGYPTIAN HIEROGLYPH V033A
+133A6 ; [.5B88.0020.0002] # EGYPTIAN HIEROGLYPH V034
+133A7 ; [.5B89.0020.0002] # EGYPTIAN HIEROGLYPH V035
+133A8 ; [.5B8A.0020.0002] # EGYPTIAN HIEROGLYPH V036
+133A9 ; [.5B8B.0020.0002] # EGYPTIAN HIEROGLYPH V037
+133AA ; [.5B8C.0020.0002] # EGYPTIAN HIEROGLYPH V037A
+133AB ; [.5B8D.0020.0002] # EGYPTIAN HIEROGLYPH V038
+133AC ; [.5B8E.0020.0002] # EGYPTIAN HIEROGLYPH V039
+133AD ; [.5B8F.0020.0002] # EGYPTIAN HIEROGLYPH V040
+133AE ; [.5B90.0020.0002] # EGYPTIAN HIEROGLYPH V040A
+133AF ; [.5B91.0020.0002] # EGYPTIAN HIEROGLYPH W001
+133B0 ; [.5B92.0020.0002] # EGYPTIAN HIEROGLYPH W002
+133B1 ; [.5B93.0020.0002] # EGYPTIAN HIEROGLYPH W003
+133B2 ; [.5B94.0020.0002] # EGYPTIAN HIEROGLYPH W003A
+133B3 ; [.5B95.0020.0002] # EGYPTIAN HIEROGLYPH W004
+133B4 ; [.5B96.0020.0002] # EGYPTIAN HIEROGLYPH W005
+133B5 ; [.5B97.0020.0002] # EGYPTIAN HIEROGLYPH W006
+133B6 ; [.5B98.0020.0002] # EGYPTIAN HIEROGLYPH W007
+133B7 ; [.5B99.0020.0002] # EGYPTIAN HIEROGLYPH W008
+133B8 ; [.5B9A.0020.0002] # EGYPTIAN HIEROGLYPH W009
+133B9 ; [.5B9B.0020.0002] # EGYPTIAN HIEROGLYPH W009A
+133BA ; [.5B9C.0020.0002] # EGYPTIAN HIEROGLYPH W010
+133BB ; [.5B9D.0020.0002] # EGYPTIAN HIEROGLYPH W010A
+133BC ; [.5B9E.0020.0002] # EGYPTIAN HIEROGLYPH W011
+133BD ; [.5B9F.0020.0002] # EGYPTIAN HIEROGLYPH W012
+133BE ; [.5BA0.0020.0002] # EGYPTIAN HIEROGLYPH W013
+133BF ; [.5BA1.0020.0002] # EGYPTIAN HIEROGLYPH W014
+133C0 ; [.5BA2.0020.0002] # EGYPTIAN HIEROGLYPH W014A
+133C1 ; [.5BA3.0020.0002] # EGYPTIAN HIEROGLYPH W015
+133C2 ; [.5BA4.0020.0002] # EGYPTIAN HIEROGLYPH W016
+133C3 ; [.5BA5.0020.0002] # EGYPTIAN HIEROGLYPH W017
+133C4 ; [.5BA6.0020.0002] # EGYPTIAN HIEROGLYPH W017A
+133C5 ; [.5BA7.0020.0002] # EGYPTIAN HIEROGLYPH W018
+133C6 ; [.5BA8.0020.0002] # EGYPTIAN HIEROGLYPH W018A
+133C7 ; [.5BA9.0020.0002] # EGYPTIAN HIEROGLYPH W019
+133C8 ; [.5BAA.0020.0002] # EGYPTIAN HIEROGLYPH W020
+133C9 ; [.5BAB.0020.0002] # EGYPTIAN HIEROGLYPH W021
+133CA ; [.5BAC.0020.0002] # EGYPTIAN HIEROGLYPH W022
+133CB ; [.5BAD.0020.0002] # EGYPTIAN HIEROGLYPH W023
+133CC ; [.5BAE.0020.0002] # EGYPTIAN HIEROGLYPH W024
+133CD ; [.5BAF.0020.0002] # EGYPTIAN HIEROGLYPH W024A
+133CE ; [.5BB0.0020.0002] # EGYPTIAN HIEROGLYPH W025
+133CF ; [.5BB1.0020.0002] # EGYPTIAN HIEROGLYPH X001
+133D0 ; [.5BB2.0020.0002] # EGYPTIAN HIEROGLYPH X002
+133D1 ; [.5BB3.0020.0002] # EGYPTIAN HIEROGLYPH X003
+133D2 ; [.5BB4.0020.0002] # EGYPTIAN HIEROGLYPH X004
+133D3 ; [.5BB5.0020.0002] # EGYPTIAN HIEROGLYPH X004A
+133D4 ; [.5BB6.0020.0002] # EGYPTIAN HIEROGLYPH X004B
+133D5 ; [.5BB7.0020.0002] # EGYPTIAN HIEROGLYPH X005
+133D6 ; [.5BB8.0020.0002] # EGYPTIAN HIEROGLYPH X006
+133D7 ; [.5BB9.0020.0002] # EGYPTIAN HIEROGLYPH X006A
+133D8 ; [.5BBA.0020.0002] # EGYPTIAN HIEROGLYPH X007
+133D9 ; [.5BBB.0020.0002] # EGYPTIAN HIEROGLYPH X008
+133DA ; [.5BBC.0020.0002] # EGYPTIAN HIEROGLYPH X008A
+133DB ; [.5BBD.0020.0002] # EGYPTIAN HIEROGLYPH Y001
+133DC ; [.5BBE.0020.0002] # EGYPTIAN HIEROGLYPH Y001A
+133DD ; [.5BBF.0020.0002] # EGYPTIAN HIEROGLYPH Y002
+133DE ; [.5BC0.0020.0002] # EGYPTIAN HIEROGLYPH Y003
+133DF ; [.5BC1.0020.0002] # EGYPTIAN HIEROGLYPH Y004
+133E0 ; [.5BC2.0020.0002] # EGYPTIAN HIEROGLYPH Y005
+133E1 ; [.5BC3.0020.0002] # EGYPTIAN HIEROGLYPH Y006
+133E2 ; [.5BC4.0020.0002] # EGYPTIAN HIEROGLYPH Y007
+133E3 ; [.5BC5.0020.0002] # EGYPTIAN HIEROGLYPH Y008
+133E4 ; [.5BC6.0020.0002] # EGYPTIAN HIEROGLYPH Z001
+133E5 ; [.5BC7.0020.0002] # EGYPTIAN HIEROGLYPH Z002
+133E6 ; [.5BC8.0020.0002] # EGYPTIAN HIEROGLYPH Z002A
+133E7 ; [.5BC9.0020.0002] # EGYPTIAN HIEROGLYPH Z002B
+133E8 ; [.5BCA.0020.0002] # EGYPTIAN HIEROGLYPH Z002C
+133E9 ; [.5BCB.0020.0002] # EGYPTIAN HIEROGLYPH Z002D
+133EA ; [.5BCC.0020.0002] # EGYPTIAN HIEROGLYPH Z003
+133EB ; [.5BCD.0020.0002] # EGYPTIAN HIEROGLYPH Z003A
+133EC ; [.5BCE.0020.0002] # EGYPTIAN HIEROGLYPH Z003B
+133ED ; [.5BCF.0020.0002] # EGYPTIAN HIEROGLYPH Z004
+133EE ; [.5BD0.0020.0002] # EGYPTIAN HIEROGLYPH Z004A
+133EF ; [.5BD1.0020.0002] # EGYPTIAN HIEROGLYPH Z005
+133F0 ; [.5BD2.0020.0002] # EGYPTIAN HIEROGLYPH Z005A
+133F1 ; [.5BD3.0020.0002] # EGYPTIAN HIEROGLYPH Z006
+133F2 ; [.5BD4.0020.0002] # EGYPTIAN HIEROGLYPH Z007
+133F3 ; [.5BD5.0020.0002] # EGYPTIAN HIEROGLYPH Z008
+133F4 ; [.5BD6.0020.0002] # EGYPTIAN HIEROGLYPH Z009
+133F5 ; [.5BD7.0020.0002] # EGYPTIAN HIEROGLYPH Z010
+133F6 ; [.5BD8.0020.0002] # EGYPTIAN HIEROGLYPH Z011
+133F7 ; [.5BD9.0020.0002] # EGYPTIAN HIEROGLYPH Z012
+133F8 ; [.5BDA.0020.0002] # EGYPTIAN HIEROGLYPH Z013
+133F9 ; [.5BDB.0020.0002] # EGYPTIAN HIEROGLYPH Z014
+133FA ; [.5BDC.0020.0002] # EGYPTIAN HIEROGLYPH Z015
+133FB ; [.5BDD.0020.0002] # EGYPTIAN HIEROGLYPH Z015A
+133FC ; [.5BDE.0020.0002] # EGYPTIAN HIEROGLYPH Z015B
+133FD ; [.5BDF.0020.0002] # EGYPTIAN HIEROGLYPH Z015C
+133FE ; [.5BE0.0020.0002] # EGYPTIAN HIEROGLYPH Z015D
+133FF ; [.5BE1.0020.0002] # EGYPTIAN HIEROGLYPH Z015E
+13400 ; [.5BE2.0020.0002] # EGYPTIAN HIEROGLYPH Z015F
+13401 ; [.5BE3.0020.0002] # EGYPTIAN HIEROGLYPH Z015G
+13402 ; [.5BE4.0020.0002] # EGYPTIAN HIEROGLYPH Z015H
+13403 ; [.5BE5.0020.0002] # EGYPTIAN HIEROGLYPH Z015I
+13404 ; [.5BE6.0020.0002] # EGYPTIAN HIEROGLYPH Z016
+13405 ; [.5BE7.0020.0002] # EGYPTIAN HIEROGLYPH Z016A
+13406 ; [.5BE8.0020.0002] # EGYPTIAN HIEROGLYPH Z016B
+13407 ; [.5BE9.0020.0002] # EGYPTIAN HIEROGLYPH Z016C
+13408 ; [.5BEA.0020.0002] # EGYPTIAN HIEROGLYPH Z016D
+13409 ; [.5BEB.0020.0002] # EGYPTIAN HIEROGLYPH Z016E
+1340A ; [.5BEC.0020.0002] # EGYPTIAN HIEROGLYPH Z016F
+1340B ; [.5BED.0020.0002] # EGYPTIAN HIEROGLYPH Z016G
+1340C ; [.5BEE.0020.0002] # EGYPTIAN HIEROGLYPH Z016H
+1340D ; [.5BEF.0020.0002] # EGYPTIAN HIEROGLYPH AA001
+1340E ; [.5BF0.0020.0002] # EGYPTIAN HIEROGLYPH AA002
+1340F ; [.5BF1.0020.0002] # EGYPTIAN HIEROGLYPH AA003
+13410 ; [.5BF2.0020.0002] # EGYPTIAN HIEROGLYPH AA004
+13411 ; [.5BF3.0020.0002] # EGYPTIAN HIEROGLYPH AA005
+13412 ; [.5BF4.0020.0002] # EGYPTIAN HIEROGLYPH AA006
+13413 ; [.5BF5.0020.0002] # EGYPTIAN HIEROGLYPH AA007
+13414 ; [.5BF6.0020.0002] # EGYPTIAN HIEROGLYPH AA007A
+13415 ; [.5BF7.0020.0002] # EGYPTIAN HIEROGLYPH AA007B
+13416 ; [.5BF8.0020.0002] # EGYPTIAN HIEROGLYPH AA008
+13417 ; [.5BF9.0020.0002] # EGYPTIAN HIEROGLYPH AA009
+13418 ; [.5BFA.0020.0002] # EGYPTIAN HIEROGLYPH AA010
+13419 ; [.5BFB.0020.0002] # EGYPTIAN HIEROGLYPH AA011
+1341A ; [.5BFC.0020.0002] # EGYPTIAN HIEROGLYPH AA012
+1341B ; [.5BFD.0020.0002] # EGYPTIAN HIEROGLYPH AA013
+1341C ; [.5BFE.0020.0002] # EGYPTIAN HIEROGLYPH AA014
+1341D ; [.5BFF.0020.0002] # EGYPTIAN HIEROGLYPH AA015
+1341E ; [.5C00.0020.0002] # EGYPTIAN HIEROGLYPH AA016
+1341F ; [.5C01.0020.0002] # EGYPTIAN HIEROGLYPH AA017
+13420 ; [.5C02.0020.0002] # EGYPTIAN HIEROGLYPH AA018
+13421 ; [.5C03.0020.0002] # EGYPTIAN HIEROGLYPH AA019
+13422 ; [.5C04.0020.0002] # EGYPTIAN HIEROGLYPH AA020
+13423 ; [.5C05.0020.0002] # EGYPTIAN HIEROGLYPH AA021
+13424 ; [.5C06.0020.0002] # EGYPTIAN HIEROGLYPH AA022
+13425 ; [.5C07.0020.0002] # EGYPTIAN HIEROGLYPH AA023
+13426 ; [.5C08.0020.0002] # EGYPTIAN HIEROGLYPH AA024
+13427 ; [.5C09.0020.0002] # EGYPTIAN HIEROGLYPH AA025
+13428 ; [.5C0A.0020.0002] # EGYPTIAN HIEROGLYPH AA026
+13429 ; [.5C0B.0020.0002] # EGYPTIAN HIEROGLYPH AA027
+1342A ; [.5C0C.0020.0002] # EGYPTIAN HIEROGLYPH AA028
+1342B ; [.5C0D.0020.0002] # EGYPTIAN HIEROGLYPH AA029
+1342C ; [.5C0E.0020.0002] # EGYPTIAN HIEROGLYPH AA030
+1342D ; [.5C0F.0020.0002] # EGYPTIAN HIEROGLYPH AA031
+1342E ; [.5C10.0020.0002] # EGYPTIAN HIEROGLYPH AA032
+109A0 ; [.5C11.0020.0002] # MEROITIC CURSIVE LETTER A
+10980 ; [.5C11.0020.0004][.0000.0118.0004] # MEROITIC HIEROGLYPHIC LETTER A
+109A1 ; [.5C12.0020.0002] # MEROITIC CURSIVE LETTER E
+10981 ; [.5C12.0020.0004][.0000.0118.0004] # MEROITIC HIEROGLYPHIC LETTER E
+109A2 ; [.5C13.0020.0002] # MEROITIC CURSIVE LETTER I
+10982 ; [.5C13.0020.0004][.0000.0118.0004] # MEROITIC HIEROGLYPHIC LETTER I
+109A3 ; [.5C14.0020.0002] # MEROITIC CURSIVE LETTER O
+10983 ; [.5C14.0020.0004][.0000.0118.0004] # MEROITIC HIEROGLYPHIC LETTER O
+109A4 ; [.5C15.0020.0002] # MEROITIC CURSIVE LETTER YA
+10984 ; [.5C15.0020.0004][.0000.0118.0004] # MEROITIC HIEROGLYPHIC LETTER YA
+109A5 ; [.5C16.0020.0002] # MEROITIC CURSIVE LETTER WA
+10985 ; [.5C16.0020.0004][.0000.0118.0004] # MEROITIC HIEROGLYPHIC LETTER WA
+109A6 ; [.5C17.0020.0002] # MEROITIC CURSIVE LETTER BA
+10986 ; [.5C17.0020.0004][.0000.0118.0004] # MEROITIC HIEROGLYPHIC LETTER BA
+10987 ; [.5C17.0020.0004][.0000.0119.0004] # MEROITIC HIEROGLYPHIC LETTER BA-2
+109A7 ; [.5C18.0020.0002] # MEROITIC CURSIVE LETTER PA
+10988 ; [.5C18.0020.0004][.0000.0118.0004] # MEROITIC HIEROGLYPHIC LETTER PA
+109A8 ; [.5C19.0020.0002] # MEROITIC CURSIVE LETTER MA
+10989 ; [.5C19.0020.0004][.0000.0118.0004] # MEROITIC HIEROGLYPHIC LETTER MA
+109A9 ; [.5C1A.0020.0002] # MEROITIC CURSIVE LETTER NA
+1098A ; [.5C1A.0020.0004][.0000.0118.0004] # MEROITIC HIEROGLYPHIC LETTER NA
+1098B ; [.5C1A.0020.0004][.0000.0119.0004] # MEROITIC HIEROGLYPHIC LETTER NA-2
+109AA ; [.5C1B.0020.0002] # MEROITIC CURSIVE LETTER NE
+1098C ; [.5C1B.0020.0004][.0000.0118.0004] # MEROITIC HIEROGLYPHIC LETTER NE
+1098D ; [.5C1B.0020.0004][.0000.0119.0004] # MEROITIC HIEROGLYPHIC LETTER NE-2
+109AB ; [.5C1C.0020.0002] # MEROITIC CURSIVE LETTER RA
+1098E ; [.5C1C.0020.0004][.0000.0118.0004] # MEROITIC HIEROGLYPHIC LETTER RA
+1098F ; [.5C1C.0020.0004][.0000.0119.0004] # MEROITIC HIEROGLYPHIC LETTER RA-2
+109AC ; [.5C1D.0020.0002] # MEROITIC CURSIVE LETTER LA
+10990 ; [.5C1D.0020.0004][.0000.0118.0004] # MEROITIC HIEROGLYPHIC LETTER LA
+109AD ; [.5C1E.0020.0002] # MEROITIC CURSIVE LETTER KHA
+10991 ; [.5C1E.0020.0004][.0000.0118.0004] # MEROITIC HIEROGLYPHIC LETTER KHA
+109AE ; [.5C1F.0020.0002] # MEROITIC CURSIVE LETTER HHA
+10992 ; [.5C1F.0020.0004][.0000.0118.0004] # MEROITIC HIEROGLYPHIC LETTER HHA
+109AF ; [.5C20.0020.0002] # MEROITIC CURSIVE LETTER SA
+109B0 ; [.5C20.0020.0004][.0000.0118.0004] # MEROITIC CURSIVE LETTER ARCHAIC SA
+10993 ; [.5C20.0020.0004][.0000.0119.0004] # MEROITIC HIEROGLYPHIC LETTER SA
+10994 ; [.5C20.0020.0004][.0000.011A.0004] # MEROITIC HIEROGLYPHIC LETTER SA-2
+109B1 ; [.5C21.0020.0002] # MEROITIC CURSIVE LETTER SE
+10995 ; [.5C21.0020.0004][.0000.0118.0004] # MEROITIC HIEROGLYPHIC LETTER SE
+109B2 ; [.5C22.0020.0002] # MEROITIC CURSIVE LETTER KA
+10996 ; [.5C22.0020.0004][.0000.0118.0004] # MEROITIC HIEROGLYPHIC LETTER KA
+109B3 ; [.5C23.0020.0002] # MEROITIC CURSIVE LETTER QA
+10997 ; [.5C23.0020.0004][.0000.0118.0004] # MEROITIC HIEROGLYPHIC LETTER QA
+109B4 ; [.5C24.0020.0002] # MEROITIC CURSIVE LETTER TA
+10998 ; [.5C24.0020.0004][.0000.0118.0004] # MEROITIC HIEROGLYPHIC LETTER TA
+10999 ; [.5C24.0020.0004][.0000.0119.0004] # MEROITIC HIEROGLYPHIC LETTER TA-2
+109B5 ; [.5C25.0020.0002] # MEROITIC CURSIVE LETTER TE
+1099A ; [.5C25.0020.0004][.0000.0118.0004] # MEROITIC HIEROGLYPHIC LETTER TE
+1099B ; [.5C25.0020.0004][.0000.0119.0004] # MEROITIC HIEROGLYPHIC LETTER TE-2
+109B6 ; [.5C26.0020.0002] # MEROITIC CURSIVE LETTER TO
+1099C ; [.5C26.0020.0004][.0000.0118.0004] # MEROITIC HIEROGLYPHIC LETTER TO
+109B7 ; [.5C27.0020.0002] # MEROITIC CURSIVE LETTER DA
+1099D ; [.5C27.0020.0004][.0000.0118.0004] # MEROITIC HIEROGLYPHIC LETTER DA
+109BE ; [.5C28.0020.0002] # MEROITIC CURSIVE LOGOGRAM RMT
+109BF ; [.5C29.0020.0002] # MEROITIC CURSIVE LOGOGRAM IMN
+1099E ; [.5C2A.0020.0002] # MEROITIC HIEROGLYPHIC SYMBOL VIDJ
+1099F ; [.5C2B.0020.0002] # MEROITIC HIEROGLYPHIC SYMBOL VIDJ-2
+14400 ; [.5C2C.0020.0002] # ANATOLIAN HIEROGLYPH A001
+14401 ; [.5C2D.0020.0002] # ANATOLIAN HIEROGLYPH A002
+14402 ; [.5C2E.0020.0002] # ANATOLIAN HIEROGLYPH A003
+14403 ; [.5C2F.0020.0002] # ANATOLIAN HIEROGLYPH A004
+14404 ; [.5C30.0020.0002] # ANATOLIAN HIEROGLYPH A005
+14405 ; [.5C31.0020.0002] # ANATOLIAN HIEROGLYPH A006
+14406 ; [.5C32.0020.0002] # ANATOLIAN HIEROGLYPH A007
+14407 ; [.5C33.0020.0002] # ANATOLIAN HIEROGLYPH A008
+14408 ; [.5C34.0020.0002] # ANATOLIAN HIEROGLYPH A009
+14409 ; [.5C35.0020.0002] # ANATOLIAN HIEROGLYPH A010
+1440A ; [.5C36.0020.0002] # ANATOLIAN HIEROGLYPH A010A
+1440B ; [.5C37.0020.0002] # ANATOLIAN HIEROGLYPH A011
+1440C ; [.5C38.0020.0002] # ANATOLIAN HIEROGLYPH A012
+1440D ; [.5C39.0020.0002] # ANATOLIAN HIEROGLYPH A013
+1440E ; [.5C3A.0020.0002] # ANATOLIAN HIEROGLYPH A014
+1440F ; [.5C3B.0020.0002] # ANATOLIAN HIEROGLYPH A015
+14410 ; [.5C3C.0020.0002] # ANATOLIAN HIEROGLYPH A016
+14411 ; [.5C3D.0020.0002] # ANATOLIAN HIEROGLYPH A017
+14412 ; [.5C3E.0020.0002] # ANATOLIAN HIEROGLYPH A018
+14413 ; [.5C3F.0020.0002] # ANATOLIAN HIEROGLYPH A019
+14414 ; [.5C40.0020.0002] # ANATOLIAN HIEROGLYPH A020
+14415 ; [.5C41.0020.0002] # ANATOLIAN HIEROGLYPH A021
+14416 ; [.5C42.0020.0002] # ANATOLIAN HIEROGLYPH A022
+14417 ; [.5C43.0020.0002] # ANATOLIAN HIEROGLYPH A023
+14418 ; [.5C44.0020.0002] # ANATOLIAN HIEROGLYPH A024
+14419 ; [.5C45.0020.0002] # ANATOLIAN HIEROGLYPH A025
+1441A ; [.5C46.0020.0002] # ANATOLIAN HIEROGLYPH A026
+1441B ; [.5C47.0020.0002] # ANATOLIAN HIEROGLYPH A026A
+1441C ; [.5C48.0020.0002] # ANATOLIAN HIEROGLYPH A027
+1441D ; [.5C49.0020.0002] # ANATOLIAN HIEROGLYPH A028
+1441E ; [.5C4A.0020.0002] # ANATOLIAN HIEROGLYPH A029
+1441F ; [.5C4B.0020.0002] # ANATOLIAN HIEROGLYPH A030
+14420 ; [.5C4C.0020.0002] # ANATOLIAN HIEROGLYPH A031
+14421 ; [.5C4D.0020.0002] # ANATOLIAN HIEROGLYPH A032
+14422 ; [.5C4E.0020.0002] # ANATOLIAN HIEROGLYPH A033
+14423 ; [.5C4F.0020.0002] # ANATOLIAN HIEROGLYPH A034
+14424 ; [.5C50.0020.0002] # ANATOLIAN HIEROGLYPH A035
+14425 ; [.5C51.0020.0002] # ANATOLIAN HIEROGLYPH A036
+14426 ; [.5C52.0020.0002] # ANATOLIAN HIEROGLYPH A037
+14427 ; [.5C53.0020.0002] # ANATOLIAN HIEROGLYPH A038
+14428 ; [.5C54.0020.0002] # ANATOLIAN HIEROGLYPH A039
+14429 ; [.5C55.0020.0002] # ANATOLIAN HIEROGLYPH A039A
+1442A ; [.5C56.0020.0002] # ANATOLIAN HIEROGLYPH A040
+1442B ; [.5C57.0020.0002] # ANATOLIAN HIEROGLYPH A041
+1442C ; [.5C58.0020.0002] # ANATOLIAN HIEROGLYPH A041A
+1442D ; [.5C59.0020.0002] # ANATOLIAN HIEROGLYPH A042
+1442E ; [.5C5A.0020.0002] # ANATOLIAN HIEROGLYPH A043
+1442F ; [.5C5B.0020.0002] # ANATOLIAN HIEROGLYPH A044
+14430 ; [.5C5C.0020.0002] # ANATOLIAN HIEROGLYPH A045
+14431 ; [.5C5D.0020.0002] # ANATOLIAN HIEROGLYPH A045A
+14432 ; [.5C5E.0020.0002] # ANATOLIAN HIEROGLYPH A046
+14433 ; [.5C5F.0020.0002] # ANATOLIAN HIEROGLYPH A046A
+14434 ; [.5C60.0020.0002] # ANATOLIAN HIEROGLYPH A046B
+14435 ; [.5C61.0020.0002] # ANATOLIAN HIEROGLYPH A047
+14436 ; [.5C62.0020.0002] # ANATOLIAN HIEROGLYPH A048
+14437 ; [.5C63.0020.0002] # ANATOLIAN HIEROGLYPH A049
+14438 ; [.5C64.0020.0002] # ANATOLIAN HIEROGLYPH A050
+14439 ; [.5C65.0020.0002] # ANATOLIAN HIEROGLYPH A051
+1443A ; [.5C66.0020.0002] # ANATOLIAN HIEROGLYPH A052
+1443B ; [.5C67.0020.0002] # ANATOLIAN HIEROGLYPH A053
+1443C ; [.5C68.0020.0002] # ANATOLIAN HIEROGLYPH A054
+1443D ; [.5C69.0020.0002] # ANATOLIAN HIEROGLYPH A055
+1443E ; [.5C6A.0020.0002] # ANATOLIAN HIEROGLYPH A056
+1443F ; [.5C6B.0020.0002] # ANATOLIAN HIEROGLYPH A057
+14440 ; [.5C6C.0020.0002] # ANATOLIAN HIEROGLYPH A058
+14441 ; [.5C6D.0020.0002] # ANATOLIAN HIEROGLYPH A059
+14442 ; [.5C6E.0020.0002] # ANATOLIAN HIEROGLYPH A060
+14443 ; [.5C6F.0020.0002] # ANATOLIAN HIEROGLYPH A061
+14444 ; [.5C70.0020.0002] # ANATOLIAN HIEROGLYPH A062
+14445 ; [.5C71.0020.0002] # ANATOLIAN HIEROGLYPH A063
+14446 ; [.5C72.0020.0002] # ANATOLIAN HIEROGLYPH A064
+14447 ; [.5C73.0020.0002] # ANATOLIAN HIEROGLYPH A065
+14448 ; [.5C74.0020.0002] # ANATOLIAN HIEROGLYPH A066
+14449 ; [.5C75.0020.0002] # ANATOLIAN HIEROGLYPH A066A
+1444A ; [.5C76.0020.0002] # ANATOLIAN HIEROGLYPH A066B
+1444B ; [.5C77.0020.0002] # ANATOLIAN HIEROGLYPH A066C
+1444C ; [.5C78.0020.0002] # ANATOLIAN HIEROGLYPH A067
+1444D ; [.5C79.0020.0002] # ANATOLIAN HIEROGLYPH A068
+1444E ; [.5C7A.0020.0002] # ANATOLIAN HIEROGLYPH A069
+1444F ; [.5C7B.0020.0002] # ANATOLIAN HIEROGLYPH A070
+14450 ; [.5C7C.0020.0002] # ANATOLIAN HIEROGLYPH A071
+14451 ; [.5C7D.0020.0002] # ANATOLIAN HIEROGLYPH A072
+14452 ; [.5C7E.0020.0002] # ANATOLIAN HIEROGLYPH A073
+14453 ; [.5C7F.0020.0002] # ANATOLIAN HIEROGLYPH A074
+14454 ; [.5C80.0020.0002] # ANATOLIAN HIEROGLYPH A075
+14455 ; [.5C81.0020.0002] # ANATOLIAN HIEROGLYPH A076
+14456 ; [.5C82.0020.0002] # ANATOLIAN HIEROGLYPH A077
+14457 ; [.5C83.0020.0002] # ANATOLIAN HIEROGLYPH A078
+14458 ; [.5C84.0020.0002] # ANATOLIAN HIEROGLYPH A079
+14459 ; [.5C85.0020.0002] # ANATOLIAN HIEROGLYPH A080
+1445A ; [.5C86.0020.0002] # ANATOLIAN HIEROGLYPH A081
+1445B ; [.5C87.0020.0002] # ANATOLIAN HIEROGLYPH A082
+1445C ; [.5C88.0020.0002] # ANATOLIAN HIEROGLYPH A083
+1445D ; [.5C89.0020.0002] # ANATOLIAN HIEROGLYPH A084
+1445E ; [.5C8A.0020.0002] # ANATOLIAN HIEROGLYPH A085
+1445F ; [.5C8B.0020.0002] # ANATOLIAN HIEROGLYPH A086
+14460 ; [.5C8C.0020.0002] # ANATOLIAN HIEROGLYPH A087
+14461 ; [.5C8D.0020.0002] # ANATOLIAN HIEROGLYPH A088
+14462 ; [.5C8E.0020.0002] # ANATOLIAN HIEROGLYPH A089
+14463 ; [.5C8F.0020.0002] # ANATOLIAN HIEROGLYPH A090
+14464 ; [.5C90.0020.0002] # ANATOLIAN HIEROGLYPH A091
+14465 ; [.5C91.0020.0002] # ANATOLIAN HIEROGLYPH A092
+14466 ; [.5C92.0020.0002] # ANATOLIAN HIEROGLYPH A093
+14467 ; [.5C93.0020.0002] # ANATOLIAN HIEROGLYPH A094
+14468 ; [.5C94.0020.0002] # ANATOLIAN HIEROGLYPH A095
+14469 ; [.5C95.0020.0002] # ANATOLIAN HIEROGLYPH A096
+1446A ; [.5C96.0020.0002] # ANATOLIAN HIEROGLYPH A097
+1446B ; [.5C97.0020.0002] # ANATOLIAN HIEROGLYPH A097A
+1446C ; [.5C98.0020.0002] # ANATOLIAN HIEROGLYPH A098
+1446D ; [.5C99.0020.0002] # ANATOLIAN HIEROGLYPH A098A
+1446E ; [.5C9A.0020.0002] # ANATOLIAN HIEROGLYPH A099
+1446F ; [.5C9B.0020.0002] # ANATOLIAN HIEROGLYPH A100
+14470 ; [.5C9C.0020.0002] # ANATOLIAN HIEROGLYPH A100A
+14471 ; [.5C9D.0020.0002] # ANATOLIAN HIEROGLYPH A101
+14472 ; [.5C9E.0020.0002] # ANATOLIAN HIEROGLYPH A101A
+14473 ; [.5C9F.0020.0002] # ANATOLIAN HIEROGLYPH A102
+14474 ; [.5CA0.0020.0002] # ANATOLIAN HIEROGLYPH A102A
+14475 ; [.5CA1.0020.0002] # ANATOLIAN HIEROGLYPH A103
+14476 ; [.5CA2.0020.0002] # ANATOLIAN HIEROGLYPH A104
+14477 ; [.5CA3.0020.0002] # ANATOLIAN HIEROGLYPH A104A
+14478 ; [.5CA4.0020.0002] # ANATOLIAN HIEROGLYPH A104B
+14479 ; [.5CA5.0020.0002] # ANATOLIAN HIEROGLYPH A104C
+1447A ; [.5CA6.0020.0002] # ANATOLIAN HIEROGLYPH A105
+1447B ; [.5CA7.0020.0002] # ANATOLIAN HIEROGLYPH A105A
+1447C ; [.5CA8.0020.0002] # ANATOLIAN HIEROGLYPH A105B
+1447D ; [.5CA9.0020.0002] # ANATOLIAN HIEROGLYPH A106
+1447E ; [.5CAA.0020.0002] # ANATOLIAN HIEROGLYPH A107
+1447F ; [.5CAB.0020.0002] # ANATOLIAN HIEROGLYPH A107A
+14480 ; [.5CAC.0020.0002] # ANATOLIAN HIEROGLYPH A107B
+14481 ; [.5CAD.0020.0002] # ANATOLIAN HIEROGLYPH A107C
+14482 ; [.5CAE.0020.0002] # ANATOLIAN HIEROGLYPH A108
+14483 ; [.5CAF.0020.0002] # ANATOLIAN HIEROGLYPH A109
+14484 ; [.5CB0.0020.0002] # ANATOLIAN HIEROGLYPH A110
+14485 ; [.5CB1.0020.0002] # ANATOLIAN HIEROGLYPH A110A
+14486 ; [.5CB2.0020.0002] # ANATOLIAN HIEROGLYPH A110B
+14487 ; [.5CB3.0020.0002] # ANATOLIAN HIEROGLYPH A111
+14488 ; [.5CB4.0020.0002] # ANATOLIAN HIEROGLYPH A112
+14489 ; [.5CB5.0020.0002] # ANATOLIAN HIEROGLYPH A113
+1448A ; [.5CB6.0020.0002] # ANATOLIAN HIEROGLYPH A114
+1448B ; [.5CB7.0020.0002] # ANATOLIAN HIEROGLYPH A115
+1448C ; [.5CB8.0020.0002] # ANATOLIAN HIEROGLYPH A115A
+1448D ; [.5CB9.0020.0002] # ANATOLIAN HIEROGLYPH A116
+1448E ; [.5CBA.0020.0002] # ANATOLIAN HIEROGLYPH A117
+1448F ; [.5CBB.0020.0002] # ANATOLIAN HIEROGLYPH A118
+14490 ; [.5CBC.0020.0002] # ANATOLIAN HIEROGLYPH A119
+14491 ; [.5CBD.0020.0002] # ANATOLIAN HIEROGLYPH A120
+14492 ; [.5CBE.0020.0002] # ANATOLIAN HIEROGLYPH A121
+14493 ; [.5CBF.0020.0002] # ANATOLIAN HIEROGLYPH A122
+14494 ; [.5CC0.0020.0002] # ANATOLIAN HIEROGLYPH A123
+14495 ; [.5CC1.0020.0002] # ANATOLIAN HIEROGLYPH A124
+14496 ; [.5CC2.0020.0002] # ANATOLIAN HIEROGLYPH A125
+14497 ; [.5CC3.0020.0002] # ANATOLIAN HIEROGLYPH A125A
+14498 ; [.5CC4.0020.0002] # ANATOLIAN HIEROGLYPH A126
+14499 ; [.5CC5.0020.0002] # ANATOLIAN HIEROGLYPH A127
+1449A ; [.5CC6.0020.0002] # ANATOLIAN HIEROGLYPH A128
+1449B ; [.5CC7.0020.0002] # ANATOLIAN HIEROGLYPH A129
+1449C ; [.5CC8.0020.0002] # ANATOLIAN HIEROGLYPH A130
+1449D ; [.5CC9.0020.0002] # ANATOLIAN HIEROGLYPH A131
+1449E ; [.5CCA.0020.0002] # ANATOLIAN HIEROGLYPH A132
+1449F ; [.5CCB.0020.0002] # ANATOLIAN HIEROGLYPH A133
+144A0 ; [.5CCC.0020.0002] # ANATOLIAN HIEROGLYPH A134
+144A1 ; [.5CCD.0020.0002] # ANATOLIAN HIEROGLYPH A135
+144A2 ; [.5CCE.0020.0002] # ANATOLIAN HIEROGLYPH A135A
+144A3 ; [.5CCF.0020.0002] # ANATOLIAN HIEROGLYPH A136
+144A4 ; [.5CD0.0020.0002] # ANATOLIAN HIEROGLYPH A137
+144A5 ; [.5CD1.0020.0002] # ANATOLIAN HIEROGLYPH A138
+144A6 ; [.5CD2.0020.0002] # ANATOLIAN HIEROGLYPH A139
+144A7 ; [.5CD3.0020.0002] # ANATOLIAN HIEROGLYPH A140
+144A8 ; [.5CD4.0020.0002] # ANATOLIAN HIEROGLYPH A141
+144A9 ; [.5CD5.0020.0002] # ANATOLIAN HIEROGLYPH A142
+144AA ; [.5CD6.0020.0002] # ANATOLIAN HIEROGLYPH A143
+144AB ; [.5CD7.0020.0002] # ANATOLIAN HIEROGLYPH A144
+144AC ; [.5CD8.0020.0002] # ANATOLIAN HIEROGLYPH A145
+144AD ; [.5CD9.0020.0002] # ANATOLIAN HIEROGLYPH A146
+144AE ; [.5CDA.0020.0002] # ANATOLIAN HIEROGLYPH A147
+144AF ; [.5CDB.0020.0002] # ANATOLIAN HIEROGLYPH A148
+144B0 ; [.5CDC.0020.0002] # ANATOLIAN HIEROGLYPH A149
+144B1 ; [.5CDD.0020.0002] # ANATOLIAN HIEROGLYPH A150
+144B2 ; [.5CDE.0020.0002] # ANATOLIAN HIEROGLYPH A151
+144B3 ; [.5CDF.0020.0002] # ANATOLIAN HIEROGLYPH A152
+144B4 ; [.5CE0.0020.0002] # ANATOLIAN HIEROGLYPH A153
+144B5 ; [.5CE1.0020.0002] # ANATOLIAN HIEROGLYPH A154
+144B6 ; [.5CE2.0020.0002] # ANATOLIAN HIEROGLYPH A155
+144B7 ; [.5CE3.0020.0002] # ANATOLIAN HIEROGLYPH A156
+144B8 ; [.5CE4.0020.0002] # ANATOLIAN HIEROGLYPH A157
+144B9 ; [.5CE5.0020.0002] # ANATOLIAN HIEROGLYPH A158
+144BA ; [.5CE6.0020.0002] # ANATOLIAN HIEROGLYPH A159
+144BB ; [.5CE7.0020.0002] # ANATOLIAN HIEROGLYPH A160
+144BC ; [.5CE8.0020.0002] # ANATOLIAN HIEROGLYPH A161
+144BD ; [.5CE9.0020.0002] # ANATOLIAN HIEROGLYPH A162
+144BE ; [.5CEA.0020.0002] # ANATOLIAN HIEROGLYPH A163
+144BF ; [.5CEB.0020.0002] # ANATOLIAN HIEROGLYPH A164
+144C0 ; [.5CEC.0020.0002] # ANATOLIAN HIEROGLYPH A165
+144C1 ; [.5CED.0020.0002] # ANATOLIAN HIEROGLYPH A166
+144C2 ; [.5CEE.0020.0002] # ANATOLIAN HIEROGLYPH A167
+144C3 ; [.5CEF.0020.0002] # ANATOLIAN HIEROGLYPH A168
+144C4 ; [.5CF0.0020.0002] # ANATOLIAN HIEROGLYPH A169
+144C5 ; [.5CF1.0020.0002] # ANATOLIAN HIEROGLYPH A170
+144C6 ; [.5CF2.0020.0002] # ANATOLIAN HIEROGLYPH A171
+144C7 ; [.5CF3.0020.0002] # ANATOLIAN HIEROGLYPH A172
+144C8 ; [.5CF4.0020.0002] # ANATOLIAN HIEROGLYPH A173
+144C9 ; [.5CF5.0020.0002] # ANATOLIAN HIEROGLYPH A174
+144CA ; [.5CF6.0020.0002] # ANATOLIAN HIEROGLYPH A175
+144CB ; [.5CF7.0020.0002] # ANATOLIAN HIEROGLYPH A176
+144CC ; [.5CF8.0020.0002] # ANATOLIAN HIEROGLYPH A177
+144CD ; [.5CF9.0020.0002] # ANATOLIAN HIEROGLYPH A178
+144CE ; [.5CFA.0020.0002] # ANATOLIAN HIEROGLYPH A179
+144CF ; [.5CFB.0020.0002] # ANATOLIAN HIEROGLYPH A180
+144D0 ; [.5CFC.0020.0002] # ANATOLIAN HIEROGLYPH A181
+144D1 ; [.5CFD.0020.0002] # ANATOLIAN HIEROGLYPH A182
+144D2 ; [.5CFE.0020.0002] # ANATOLIAN HIEROGLYPH A183
+144D3 ; [.5CFF.0020.0002] # ANATOLIAN HIEROGLYPH A184
+144D4 ; [.5D00.0020.0002] # ANATOLIAN HIEROGLYPH A185
+144D5 ; [.5D01.0020.0002] # ANATOLIAN HIEROGLYPH A186
+144D6 ; [.5D02.0020.0002] # ANATOLIAN HIEROGLYPH A187
+144D7 ; [.5D03.0020.0002] # ANATOLIAN HIEROGLYPH A188
+144D8 ; [.5D04.0020.0002] # ANATOLIAN HIEROGLYPH A189
+144D9 ; [.5D05.0020.0002] # ANATOLIAN HIEROGLYPH A190
+144DA ; [.5D06.0020.0002] # ANATOLIAN HIEROGLYPH A191
+144DB ; [.5D07.0020.0002] # ANATOLIAN HIEROGLYPH A192
+144DC ; [.5D08.0020.0002] # ANATOLIAN HIEROGLYPH A193
+144DD ; [.5D09.0020.0002] # ANATOLIAN HIEROGLYPH A194
+144DE ; [.5D0A.0020.0002] # ANATOLIAN HIEROGLYPH A195
+144DF ; [.5D0B.0020.0002] # ANATOLIAN HIEROGLYPH A196
+144E0 ; [.5D0C.0020.0002] # ANATOLIAN HIEROGLYPH A197
+144E1 ; [.5D0D.0020.0002] # ANATOLIAN HIEROGLYPH A198
+144E2 ; [.5D0E.0020.0002] # ANATOLIAN HIEROGLYPH A199
+144E3 ; [.5D0F.0020.0002] # ANATOLIAN HIEROGLYPH A200
+144E4 ; [.5D10.0020.0002] # ANATOLIAN HIEROGLYPH A201
+144E5 ; [.5D11.0020.0002] # ANATOLIAN HIEROGLYPH A202
+144E6 ; [.5D12.0020.0002] # ANATOLIAN HIEROGLYPH A202A
+144E7 ; [.5D13.0020.0002] # ANATOLIAN HIEROGLYPH A202B
+144E8 ; [.5D14.0020.0002] # ANATOLIAN HIEROGLYPH A203
+144E9 ; [.5D15.0020.0002] # ANATOLIAN HIEROGLYPH A204
+144EA ; [.5D16.0020.0002] # ANATOLIAN HIEROGLYPH A205
+144EB ; [.5D17.0020.0002] # ANATOLIAN HIEROGLYPH A206
+144EC ; [.5D18.0020.0002] # ANATOLIAN HIEROGLYPH A207
+144ED ; [.5D19.0020.0002] # ANATOLIAN HIEROGLYPH A207A
+144EE ; [.5D1A.0020.0002] # ANATOLIAN HIEROGLYPH A208
+144EF ; [.5D1B.0020.0002] # ANATOLIAN HIEROGLYPH A209
+144F0 ; [.5D1C.0020.0002] # ANATOLIAN HIEROGLYPH A209A
+144F1 ; [.5D1D.0020.0002] # ANATOLIAN HIEROGLYPH A210
+144F2 ; [.5D1E.0020.0002] # ANATOLIAN HIEROGLYPH A211
+144F3 ; [.5D1F.0020.0002] # ANATOLIAN HIEROGLYPH A212
+144F4 ; [.5D20.0020.0002] # ANATOLIAN HIEROGLYPH A213
+144F5 ; [.5D21.0020.0002] # ANATOLIAN HIEROGLYPH A214
+144F6 ; [.5D22.0020.0002] # ANATOLIAN HIEROGLYPH A215
+144F7 ; [.5D23.0020.0002] # ANATOLIAN HIEROGLYPH A215A
+144F8 ; [.5D24.0020.0002] # ANATOLIAN HIEROGLYPH A216
+144F9 ; [.5D25.0020.0002] # ANATOLIAN HIEROGLYPH A216A
+144FA ; [.5D26.0020.0002] # ANATOLIAN HIEROGLYPH A217
+144FB ; [.5D27.0020.0002] # ANATOLIAN HIEROGLYPH A218
+144FC ; [.5D28.0020.0002] # ANATOLIAN HIEROGLYPH A219
+144FD ; [.5D29.0020.0002] # ANATOLIAN HIEROGLYPH A220
+144FE ; [.5D2A.0020.0002] # ANATOLIAN HIEROGLYPH A221
+144FF ; [.5D2B.0020.0002] # ANATOLIAN HIEROGLYPH A222
+14500 ; [.5D2C.0020.0002] # ANATOLIAN HIEROGLYPH A223
+14501 ; [.5D2D.0020.0002] # ANATOLIAN HIEROGLYPH A224
+14502 ; [.5D2E.0020.0002] # ANATOLIAN HIEROGLYPH A225
+14503 ; [.5D2F.0020.0002] # ANATOLIAN HIEROGLYPH A226
+14504 ; [.5D30.0020.0002] # ANATOLIAN HIEROGLYPH A227
+14505 ; [.5D31.0020.0002] # ANATOLIAN HIEROGLYPH A227A
+14506 ; [.5D32.0020.0002] # ANATOLIAN HIEROGLYPH A228
+14507 ; [.5D33.0020.0002] # ANATOLIAN HIEROGLYPH A229
+14508 ; [.5D34.0020.0002] # ANATOLIAN HIEROGLYPH A230
+14509 ; [.5D35.0020.0002] # ANATOLIAN HIEROGLYPH A231
+1450A ; [.5D36.0020.0002] # ANATOLIAN HIEROGLYPH A232
+1450B ; [.5D37.0020.0002] # ANATOLIAN HIEROGLYPH A233
+1450C ; [.5D38.0020.0002] # ANATOLIAN HIEROGLYPH A234
+1450D ; [.5D39.0020.0002] # ANATOLIAN HIEROGLYPH A235
+1450E ; [.5D3A.0020.0002] # ANATOLIAN HIEROGLYPH A236
+1450F ; [.5D3B.0020.0002] # ANATOLIAN HIEROGLYPH A237
+14510 ; [.5D3C.0020.0002] # ANATOLIAN HIEROGLYPH A238
+14511 ; [.5D3D.0020.0002] # ANATOLIAN HIEROGLYPH A239
+14512 ; [.5D3E.0020.0002] # ANATOLIAN HIEROGLYPH A240
+14513 ; [.5D3F.0020.0002] # ANATOLIAN HIEROGLYPH A241
+14514 ; [.5D40.0020.0002] # ANATOLIAN HIEROGLYPH A242
+14515 ; [.5D41.0020.0002] # ANATOLIAN HIEROGLYPH A243
+14516 ; [.5D42.0020.0002] # ANATOLIAN HIEROGLYPH A244
+14517 ; [.5D43.0020.0002] # ANATOLIAN HIEROGLYPH A245
+14518 ; [.5D44.0020.0002] # ANATOLIAN HIEROGLYPH A246
+14519 ; [.5D45.0020.0002] # ANATOLIAN HIEROGLYPH A247
+1451A ; [.5D46.0020.0002] # ANATOLIAN HIEROGLYPH A248
+1451B ; [.5D47.0020.0002] # ANATOLIAN HIEROGLYPH A249
+1451C ; [.5D48.0020.0002] # ANATOLIAN HIEROGLYPH A250
+1451D ; [.5D49.0020.0002] # ANATOLIAN HIEROGLYPH A251
+1451E ; [.5D4A.0020.0002] # ANATOLIAN HIEROGLYPH A252
+1451F ; [.5D4B.0020.0002] # ANATOLIAN HIEROGLYPH A253
+14520 ; [.5D4C.0020.0002] # ANATOLIAN HIEROGLYPH A254
+14521 ; [.5D4D.0020.0002] # ANATOLIAN HIEROGLYPH A255
+14522 ; [.5D4E.0020.0002] # ANATOLIAN HIEROGLYPH A256
+14523 ; [.5D4F.0020.0002] # ANATOLIAN HIEROGLYPH A257
+14524 ; [.5D50.0020.0002] # ANATOLIAN HIEROGLYPH A258
+14525 ; [.5D51.0020.0002] # ANATOLIAN HIEROGLYPH A259
+14526 ; [.5D52.0020.0002] # ANATOLIAN HIEROGLYPH A260
+14527 ; [.5D53.0020.0002] # ANATOLIAN HIEROGLYPH A261
+14528 ; [.5D54.0020.0002] # ANATOLIAN HIEROGLYPH A262
+14529 ; [.5D55.0020.0002] # ANATOLIAN HIEROGLYPH A263
+1452A ; [.5D56.0020.0002] # ANATOLIAN HIEROGLYPH A264
+1452B ; [.5D57.0020.0002] # ANATOLIAN HIEROGLYPH A265
+1452C ; [.5D58.0020.0002] # ANATOLIAN HIEROGLYPH A266
+1452D ; [.5D59.0020.0002] # ANATOLIAN HIEROGLYPH A267
+1452E ; [.5D5A.0020.0002] # ANATOLIAN HIEROGLYPH A267A
+1452F ; [.5D5B.0020.0002] # ANATOLIAN HIEROGLYPH A268
+14530 ; [.5D5C.0020.0002] # ANATOLIAN HIEROGLYPH A269
+14531 ; [.5D5D.0020.0002] # ANATOLIAN HIEROGLYPH A270
+14532 ; [.5D5E.0020.0002] # ANATOLIAN HIEROGLYPH A271
+14533 ; [.5D5F.0020.0002] # ANATOLIAN HIEROGLYPH A272
+14534 ; [.5D60.0020.0002] # ANATOLIAN HIEROGLYPH A273
+14535 ; [.5D61.0020.0002] # ANATOLIAN HIEROGLYPH A274
+14536 ; [.5D62.0020.0002] # ANATOLIAN HIEROGLYPH A275
+14537 ; [.5D63.0020.0002] # ANATOLIAN HIEROGLYPH A276
+14538 ; [.5D64.0020.0002] # ANATOLIAN HIEROGLYPH A277
+14539 ; [.5D65.0020.0002] # ANATOLIAN HIEROGLYPH A278
+1453A ; [.5D66.0020.0002] # ANATOLIAN HIEROGLYPH A279
+1453B ; [.5D67.0020.0002] # ANATOLIAN HIEROGLYPH A280
+1453C ; [.5D68.0020.0002] # ANATOLIAN HIEROGLYPH A281
+1453D ; [.5D69.0020.0002] # ANATOLIAN HIEROGLYPH A282
+1453E ; [.5D6A.0020.0002] # ANATOLIAN HIEROGLYPH A283
+1453F ; [.5D6B.0020.0002] # ANATOLIAN HIEROGLYPH A284
+14540 ; [.5D6C.0020.0002] # ANATOLIAN HIEROGLYPH A285
+14541 ; [.5D6D.0020.0002] # ANATOLIAN HIEROGLYPH A286
+14542 ; [.5D6E.0020.0002] # ANATOLIAN HIEROGLYPH A287
+14543 ; [.5D6F.0020.0002] # ANATOLIAN HIEROGLYPH A288
+14544 ; [.5D70.0020.0002] # ANATOLIAN HIEROGLYPH A289
+14545 ; [.5D71.0020.0002] # ANATOLIAN HIEROGLYPH A289A
+14546 ; [.5D72.0020.0002] # ANATOLIAN HIEROGLYPH A290
+14547 ; [.5D73.0020.0002] # ANATOLIAN HIEROGLYPH A291
+14548 ; [.5D74.0020.0002] # ANATOLIAN HIEROGLYPH A292
+14549 ; [.5D75.0020.0002] # ANATOLIAN HIEROGLYPH A293
+1454A ; [.5D76.0020.0002] # ANATOLIAN HIEROGLYPH A294
+1454B ; [.5D77.0020.0002] # ANATOLIAN HIEROGLYPH A294A
+1454C ; [.5D78.0020.0002] # ANATOLIAN HIEROGLYPH A295
+1454D ; [.5D79.0020.0002] # ANATOLIAN HIEROGLYPH A296
+1454E ; [.5D7A.0020.0002] # ANATOLIAN HIEROGLYPH A297
+1454F ; [.5D7B.0020.0002] # ANATOLIAN HIEROGLYPH A298
+14550 ; [.5D7C.0020.0002] # ANATOLIAN HIEROGLYPH A299
+14551 ; [.5D7D.0020.0002] # ANATOLIAN HIEROGLYPH A299A
+14552 ; [.5D7E.0020.0002] # ANATOLIAN HIEROGLYPH A300
+14553 ; [.5D7F.0020.0002] # ANATOLIAN HIEROGLYPH A301
+14554 ; [.5D80.0020.0002] # ANATOLIAN HIEROGLYPH A302
+14555 ; [.5D81.0020.0002] # ANATOLIAN HIEROGLYPH A303
+14556 ; [.5D82.0020.0002] # ANATOLIAN HIEROGLYPH A304
+14557 ; [.5D83.0020.0002] # ANATOLIAN HIEROGLYPH A305
+14558 ; [.5D84.0020.0002] # ANATOLIAN HIEROGLYPH A306
+14559 ; [.5D85.0020.0002] # ANATOLIAN HIEROGLYPH A307
+1455A ; [.5D86.0020.0002] # ANATOLIAN HIEROGLYPH A308
+1455B ; [.5D87.0020.0002] # ANATOLIAN HIEROGLYPH A309
+1455C ; [.5D88.0020.0002] # ANATOLIAN HIEROGLYPH A309A
+1455D ; [.5D89.0020.0002] # ANATOLIAN HIEROGLYPH A310
+1455E ; [.5D8A.0020.0002] # ANATOLIAN HIEROGLYPH A311
+1455F ; [.5D8B.0020.0002] # ANATOLIAN HIEROGLYPH A312
+14560 ; [.5D8C.0020.0002] # ANATOLIAN HIEROGLYPH A313
+14561 ; [.5D8D.0020.0002] # ANATOLIAN HIEROGLYPH A314
+14562 ; [.5D8E.0020.0002] # ANATOLIAN HIEROGLYPH A315
+14563 ; [.5D8F.0020.0002] # ANATOLIAN HIEROGLYPH A316
+14564 ; [.5D90.0020.0002] # ANATOLIAN HIEROGLYPH A317
+14565 ; [.5D91.0020.0002] # ANATOLIAN HIEROGLYPH A318
+14566 ; [.5D92.0020.0002] # ANATOLIAN HIEROGLYPH A319
+14567 ; [.5D93.0020.0002] # ANATOLIAN HIEROGLYPH A320
+14568 ; [.5D94.0020.0002] # ANATOLIAN HIEROGLYPH A321
+14569 ; [.5D95.0020.0002] # ANATOLIAN HIEROGLYPH A322
+1456A ; [.5D96.0020.0002] # ANATOLIAN HIEROGLYPH A323
+1456B ; [.5D97.0020.0002] # ANATOLIAN HIEROGLYPH A324
+1456C ; [.5D98.0020.0002] # ANATOLIAN HIEROGLYPH A325
+1456D ; [.5D99.0020.0002] # ANATOLIAN HIEROGLYPH A326
+1456E ; [.5D9A.0020.0002] # ANATOLIAN HIEROGLYPH A327
+1456F ; [.5D9B.0020.0002] # ANATOLIAN HIEROGLYPH A328
+14570 ; [.5D9C.0020.0002] # ANATOLIAN HIEROGLYPH A329
+14571 ; [.5D9D.0020.0002] # ANATOLIAN HIEROGLYPH A329A
+14572 ; [.5D9E.0020.0002] # ANATOLIAN HIEROGLYPH A330
+14573 ; [.5D9F.0020.0002] # ANATOLIAN HIEROGLYPH A331
+14574 ; [.5DA0.0020.0002] # ANATOLIAN HIEROGLYPH A332A
+14575 ; [.5DA1.0020.0002] # ANATOLIAN HIEROGLYPH A332B
+14576 ; [.5DA2.0020.0002] # ANATOLIAN HIEROGLYPH A332C
+14577 ; [.5DA3.0020.0002] # ANATOLIAN HIEROGLYPH A333
+14578 ; [.5DA4.0020.0002] # ANATOLIAN HIEROGLYPH A334
+14579 ; [.5DA5.0020.0002] # ANATOLIAN HIEROGLYPH A335
+1457A ; [.5DA6.0020.0002] # ANATOLIAN HIEROGLYPH A336
+1457B ; [.5DA7.0020.0002] # ANATOLIAN HIEROGLYPH A336A
+1457C ; [.5DA8.0020.0002] # ANATOLIAN HIEROGLYPH A336B
+1457D ; [.5DA9.0020.0002] # ANATOLIAN HIEROGLYPH A336C
+1457E ; [.5DAA.0020.0002] # ANATOLIAN HIEROGLYPH A337
+1457F ; [.5DAB.0020.0002] # ANATOLIAN HIEROGLYPH A338
+14580 ; [.5DAC.0020.0002] # ANATOLIAN HIEROGLYPH A339
+14581 ; [.5DAD.0020.0002] # ANATOLIAN HIEROGLYPH A340
+14582 ; [.5DAE.0020.0002] # ANATOLIAN HIEROGLYPH A341
+14583 ; [.5DAF.0020.0002] # ANATOLIAN HIEROGLYPH A342
+14584 ; [.5DB0.0020.0002] # ANATOLIAN HIEROGLYPH A343
+14585 ; [.5DB1.0020.0002] # ANATOLIAN HIEROGLYPH A344
+14586 ; [.5DB2.0020.0002] # ANATOLIAN HIEROGLYPH A345
+14587 ; [.5DB3.0020.0002] # ANATOLIAN HIEROGLYPH A346
+14588 ; [.5DB4.0020.0002] # ANATOLIAN HIEROGLYPH A347
+14589 ; [.5DB5.0020.0002] # ANATOLIAN HIEROGLYPH A348
+1458A ; [.5DB6.0020.0002] # ANATOLIAN HIEROGLYPH A349
+1458B ; [.5DB7.0020.0002] # ANATOLIAN HIEROGLYPH A350
+1458C ; [.5DB8.0020.0002] # ANATOLIAN HIEROGLYPH A351
+1458D ; [.5DB9.0020.0002] # ANATOLIAN HIEROGLYPH A352
+1458E ; [.5DBA.0020.0002] # ANATOLIAN HIEROGLYPH A353
+1458F ; [.5DBB.0020.0002] # ANATOLIAN HIEROGLYPH A354
+14590 ; [.5DBC.0020.0002] # ANATOLIAN HIEROGLYPH A355
+14591 ; [.5DBD.0020.0002] # ANATOLIAN HIEROGLYPH A356
+14592 ; [.5DBE.0020.0002] # ANATOLIAN HIEROGLYPH A357
+14593 ; [.5DBF.0020.0002] # ANATOLIAN HIEROGLYPH A358
+14594 ; [.5DC0.0020.0002] # ANATOLIAN HIEROGLYPH A359
+14595 ; [.5DC1.0020.0002] # ANATOLIAN HIEROGLYPH A359A
+14596 ; [.5DC2.0020.0002] # ANATOLIAN HIEROGLYPH A360
+14597 ; [.5DC3.0020.0002] # ANATOLIAN HIEROGLYPH A361
+14598 ; [.5DC4.0020.0002] # ANATOLIAN HIEROGLYPH A362
+14599 ; [.5DC5.0020.0002] # ANATOLIAN HIEROGLYPH A363
+1459A ; [.5DC6.0020.0002] # ANATOLIAN HIEROGLYPH A364
+1459B ; [.5DC7.0020.0002] # ANATOLIAN HIEROGLYPH A364A
+1459C ; [.5DC8.0020.0002] # ANATOLIAN HIEROGLYPH A365
+1459D ; [.5DC9.0020.0002] # ANATOLIAN HIEROGLYPH A366
+1459E ; [.5DCA.0020.0002] # ANATOLIAN HIEROGLYPH A367
+1459F ; [.5DCB.0020.0002] # ANATOLIAN HIEROGLYPH A368
+145A0 ; [.5DCC.0020.0002] # ANATOLIAN HIEROGLYPH A368A
+145A1 ; [.5DCD.0020.0002] # ANATOLIAN HIEROGLYPH A369
+145A2 ; [.5DCE.0020.0002] # ANATOLIAN HIEROGLYPH A370
+145A3 ; [.5DCF.0020.0002] # ANATOLIAN HIEROGLYPH A371
+145A4 ; [.5DD0.0020.0002] # ANATOLIAN HIEROGLYPH A371A
+145A5 ; [.5DD1.0020.0002] # ANATOLIAN HIEROGLYPH A372
+145A6 ; [.5DD2.0020.0002] # ANATOLIAN HIEROGLYPH A373
+145A7 ; [.5DD3.0020.0002] # ANATOLIAN HIEROGLYPH A374
+145A8 ; [.5DD4.0020.0002] # ANATOLIAN HIEROGLYPH A375
+145A9 ; [.5DD5.0020.0002] # ANATOLIAN HIEROGLYPH A376
+145AA ; [.5DD6.0020.0002] # ANATOLIAN HIEROGLYPH A377
+145AB ; [.5DD7.0020.0002] # ANATOLIAN HIEROGLYPH A378
+145AC ; [.5DD8.0020.0002] # ANATOLIAN HIEROGLYPH A379
+145AD ; [.5DD9.0020.0002] # ANATOLIAN HIEROGLYPH A380
+145AE ; [.5DDA.0020.0002] # ANATOLIAN HIEROGLYPH A381
+145AF ; [.5DDB.0020.0002] # ANATOLIAN HIEROGLYPH A381A
+145B0 ; [.5DDC.0020.0002] # ANATOLIAN HIEROGLYPH A382
+145B1 ; [.5DDD.0020.0002] # ANATOLIAN HIEROGLYPH A383 RA OR RI
+145B2 ; [.5DDE.0020.0002] # ANATOLIAN HIEROGLYPH A383A
+145B3 ; [.5DDF.0020.0002] # ANATOLIAN HIEROGLYPH A384
+145B4 ; [.5DE0.0020.0002] # ANATOLIAN HIEROGLYPH A385
+145B5 ; [.5DE1.0020.0002] # ANATOLIAN HIEROGLYPH A386
+145B6 ; [.5DE2.0020.0002] # ANATOLIAN HIEROGLYPH A386A
+145B7 ; [.5DE3.0020.0002] # ANATOLIAN HIEROGLYPH A387
+145B8 ; [.5DE4.0020.0002] # ANATOLIAN HIEROGLYPH A388
+145B9 ; [.5DE5.0020.0002] # ANATOLIAN HIEROGLYPH A389
+145BA ; [.5DE6.0020.0002] # ANATOLIAN HIEROGLYPH A390
+145BB ; [.5DE7.0020.0002] # ANATOLIAN HIEROGLYPH A391
+145BC ; [.5DE8.0020.0002] # ANATOLIAN HIEROGLYPH A392
+145BD ; [.5DE9.0020.0002] # ANATOLIAN HIEROGLYPH A393 EIGHT
+145BE ; [.5DEA.0020.0002] # ANATOLIAN HIEROGLYPH A394
+145BF ; [.5DEB.0020.0002] # ANATOLIAN HIEROGLYPH A395
+145C0 ; [.5DEC.0020.0002] # ANATOLIAN HIEROGLYPH A396
+145C1 ; [.5DED.0020.0002] # ANATOLIAN HIEROGLYPH A397
+145C2 ; [.5DEE.0020.0002] # ANATOLIAN HIEROGLYPH A398
+145C3 ; [.5DEF.0020.0002] # ANATOLIAN HIEROGLYPH A399
+145C4 ; [.5DF0.0020.0002] # ANATOLIAN HIEROGLYPH A400
+145C5 ; [.5DF1.0020.0002] # ANATOLIAN HIEROGLYPH A401
+145C6 ; [.5DF2.0020.0002] # ANATOLIAN HIEROGLYPH A402
+145C7 ; [.5DF3.0020.0002] # ANATOLIAN HIEROGLYPH A403
+145C8 ; [.5DF4.0020.0002] # ANATOLIAN HIEROGLYPH A404
+145C9 ; [.5DF5.0020.0002] # ANATOLIAN HIEROGLYPH A405
+145CA ; [.5DF6.0020.0002] # ANATOLIAN HIEROGLYPH A406
+145CB ; [.5DF7.0020.0002] # ANATOLIAN HIEROGLYPH A407
+145CC ; [.5DF8.0020.0002] # ANATOLIAN HIEROGLYPH A408
+145CD ; [.5DF9.0020.0002] # ANATOLIAN HIEROGLYPH A409
+145CE ; [.5DFA.0020.0002] # ANATOLIAN HIEROGLYPH A410 BEGIN LOGOGRAM MARK
+145CF ; [.5DFB.0020.0002] # ANATOLIAN HIEROGLYPH A410A END LOGOGRAM MARK
+145D0 ; [.5DFC.0020.0002] # ANATOLIAN HIEROGLYPH A411
+145D1 ; [.5DFD.0020.0002] # ANATOLIAN HIEROGLYPH A412
+145D2 ; [.5DFE.0020.0002] # ANATOLIAN HIEROGLYPH A413
+145D3 ; [.5DFF.0020.0002] # ANATOLIAN HIEROGLYPH A414
+145D4 ; [.5E00.0020.0002] # ANATOLIAN HIEROGLYPH A415
+145D5 ; [.5E01.0020.0002] # ANATOLIAN HIEROGLYPH A416
+145D6 ; [.5E02.0020.0002] # ANATOLIAN HIEROGLYPH A417
+145D7 ; [.5E03.0020.0002] # ANATOLIAN HIEROGLYPH A418
+145D8 ; [.5E04.0020.0002] # ANATOLIAN HIEROGLYPH A419
+145D9 ; [.5E05.0020.0002] # ANATOLIAN HIEROGLYPH A420
+145DA ; [.5E06.0020.0002] # ANATOLIAN HIEROGLYPH A421
+145DB ; [.5E07.0020.0002] # ANATOLIAN HIEROGLYPH A422
+145DC ; [.5E08.0020.0002] # ANATOLIAN HIEROGLYPH A423
+145DD ; [.5E09.0020.0002] # ANATOLIAN HIEROGLYPH A424
+145DE ; [.5E0A.0020.0002] # ANATOLIAN HIEROGLYPH A425
+145DF ; [.5E0B.0020.0002] # ANATOLIAN HIEROGLYPH A426
+145E0 ; [.5E0C.0020.0002] # ANATOLIAN HIEROGLYPH A427
+145E1 ; [.5E0D.0020.0002] # ANATOLIAN HIEROGLYPH A428
+145E2 ; [.5E0E.0020.0002] # ANATOLIAN HIEROGLYPH A429
+145E3 ; [.5E0F.0020.0002] # ANATOLIAN HIEROGLYPH A430
+145E4 ; [.5E10.0020.0002] # ANATOLIAN HIEROGLYPH A431
+145E5 ; [.5E11.0020.0002] # ANATOLIAN HIEROGLYPH A432
+145E6 ; [.5E12.0020.0002] # ANATOLIAN HIEROGLYPH A433
+145E7 ; [.5E13.0020.0002] # ANATOLIAN HIEROGLYPH A434
+145E8 ; [.5E14.0020.0002] # ANATOLIAN HIEROGLYPH A435
+145E9 ; [.5E15.0020.0002] # ANATOLIAN HIEROGLYPH A436
+145EA ; [.5E16.0020.0002] # ANATOLIAN HIEROGLYPH A437
+145EB ; [.5E17.0020.0002] # ANATOLIAN HIEROGLYPH A438
+145EC ; [.5E18.0020.0002] # ANATOLIAN HIEROGLYPH A439
+145ED ; [.5E19.0020.0002] # ANATOLIAN HIEROGLYPH A440
+145EE ; [.5E1A.0020.0002] # ANATOLIAN HIEROGLYPH A441
+145EF ; [.5E1B.0020.0002] # ANATOLIAN HIEROGLYPH A442
+145F0 ; [.5E1C.0020.0002] # ANATOLIAN HIEROGLYPH A443
+145F1 ; [.5E1D.0020.0002] # ANATOLIAN HIEROGLYPH A444
+145F2 ; [.5E1E.0020.0002] # ANATOLIAN HIEROGLYPH A445
+145F3 ; [.5E1F.0020.0002] # ANATOLIAN HIEROGLYPH A446
+145F4 ; [.5E20.0020.0002] # ANATOLIAN HIEROGLYPH A447
+145F5 ; [.5E21.0020.0002] # ANATOLIAN HIEROGLYPH A448
+145F6 ; [.5E22.0020.0002] # ANATOLIAN HIEROGLYPH A449
+145F7 ; [.5E23.0020.0002] # ANATOLIAN HIEROGLYPH A450
+145F8 ; [.5E24.0020.0002] # ANATOLIAN HIEROGLYPH A450A
+145F9 ; [.5E25.0020.0002] # ANATOLIAN HIEROGLYPH A451
+145FA ; [.5E26.0020.0002] # ANATOLIAN HIEROGLYPH A452
+145FB ; [.5E27.0020.0002] # ANATOLIAN HIEROGLYPH A453
+145FC ; [.5E28.0020.0002] # ANATOLIAN HIEROGLYPH A454
+145FD ; [.5E29.0020.0002] # ANATOLIAN HIEROGLYPH A455
+145FE ; [.5E2A.0020.0002] # ANATOLIAN HIEROGLYPH A456
+145FF ; [.5E2B.0020.0002] # ANATOLIAN HIEROGLYPH A457
+14600 ; [.5E2C.0020.0002] # ANATOLIAN HIEROGLYPH A457A
+14601 ; [.5E2D.0020.0002] # ANATOLIAN HIEROGLYPH A458
+14602 ; [.5E2E.0020.0002] # ANATOLIAN HIEROGLYPH A459
+14603 ; [.5E2F.0020.0002] # ANATOLIAN HIEROGLYPH A460
+14604 ; [.5E30.0020.0002] # ANATOLIAN HIEROGLYPH A461
+14605 ; [.5E31.0020.0002] # ANATOLIAN HIEROGLYPH A462
+14606 ; [.5E32.0020.0002] # ANATOLIAN HIEROGLYPH A463
+14607 ; [.5E33.0020.0002] # ANATOLIAN HIEROGLYPH A464
+14608 ; [.5E34.0020.0002] # ANATOLIAN HIEROGLYPH A465
+14609 ; [.5E35.0020.0002] # ANATOLIAN HIEROGLYPH A466
+1460A ; [.5E36.0020.0002] # ANATOLIAN HIEROGLYPH A467
+1460B ; [.5E37.0020.0002] # ANATOLIAN HIEROGLYPH A468
+1460C ; [.5E38.0020.0002] # ANATOLIAN HIEROGLYPH A469
+1460D ; [.5E39.0020.0002] # ANATOLIAN HIEROGLYPH A470
+1460E ; [.5E3A.0020.0002] # ANATOLIAN HIEROGLYPH A471
+1460F ; [.5E3B.0020.0002] # ANATOLIAN HIEROGLYPH A472
+14610 ; [.5E3C.0020.0002] # ANATOLIAN HIEROGLYPH A473
+14611 ; [.5E3D.0020.0002] # ANATOLIAN HIEROGLYPH A474
+14612 ; [.5E3E.0020.0002] # ANATOLIAN HIEROGLYPH A475
+14613 ; [.5E3F.0020.0002] # ANATOLIAN HIEROGLYPH A476
+14614 ; [.5E40.0020.0002] # ANATOLIAN HIEROGLYPH A477
+14615 ; [.5E41.0020.0002] # ANATOLIAN HIEROGLYPH A478
+14616 ; [.5E42.0020.0002] # ANATOLIAN HIEROGLYPH A479
+14617 ; [.5E43.0020.0002] # ANATOLIAN HIEROGLYPH A480
+14618 ; [.5E44.0020.0002] # ANATOLIAN HIEROGLYPH A481
+14619 ; [.5E45.0020.0002] # ANATOLIAN HIEROGLYPH A482
+1461A ; [.5E46.0020.0002] # ANATOLIAN HIEROGLYPH A483
+1461B ; [.5E47.0020.0002] # ANATOLIAN HIEROGLYPH A484
+1461C ; [.5E48.0020.0002] # ANATOLIAN HIEROGLYPH A485
+1461D ; [.5E49.0020.0002] # ANATOLIAN HIEROGLYPH A486
+1461E ; [.5E4A.0020.0002] # ANATOLIAN HIEROGLYPH A487
+1461F ; [.5E4B.0020.0002] # ANATOLIAN HIEROGLYPH A488
+14620 ; [.5E4C.0020.0002] # ANATOLIAN HIEROGLYPH A489
+14621 ; [.5E4D.0020.0002] # ANATOLIAN HIEROGLYPH A490
+14622 ; [.5E4E.0020.0002] # ANATOLIAN HIEROGLYPH A491
+14623 ; [.5E4F.0020.0002] # ANATOLIAN HIEROGLYPH A492
+14624 ; [.5E50.0020.0002] # ANATOLIAN HIEROGLYPH A493
+14625 ; [.5E51.0020.0002] # ANATOLIAN HIEROGLYPH A494
+14626 ; [.5E52.0020.0002] # ANATOLIAN HIEROGLYPH A495
+14627 ; [.5E53.0020.0002] # ANATOLIAN HIEROGLYPH A496
+14628 ; [.5E54.0020.0002] # ANATOLIAN HIEROGLYPH A497
+14629 ; [.5E55.0020.0002] # ANATOLIAN HIEROGLYPH A501
+1462A ; [.5E56.0020.0002] # ANATOLIAN HIEROGLYPH A502
+1462B ; [.5E57.0020.0002] # ANATOLIAN HIEROGLYPH A503
+1462C ; [.5E58.0020.0002] # ANATOLIAN HIEROGLYPH A504
+1462D ; [.5E59.0020.0002] # ANATOLIAN HIEROGLYPH A505
+1462E ; [.5E5A.0020.0002] # ANATOLIAN HIEROGLYPH A506
+1462F ; [.5E5B.0020.0002] # ANATOLIAN HIEROGLYPH A507
+14630 ; [.5E5C.0020.0002] # ANATOLIAN HIEROGLYPH A508
+14631 ; [.5E5D.0020.0002] # ANATOLIAN HIEROGLYPH A509
+14632 ; [.5E5E.0020.0002] # ANATOLIAN HIEROGLYPH A510
+14633 ; [.5E5F.0020.0002] # ANATOLIAN HIEROGLYPH A511
+14634 ; [.5E60.0020.0002] # ANATOLIAN HIEROGLYPH A512
+14635 ; [.5E61.0020.0002] # ANATOLIAN HIEROGLYPH A513
+14636 ; [.5E62.0020.0002] # ANATOLIAN HIEROGLYPH A514
+14637 ; [.5E63.0020.0002] # ANATOLIAN HIEROGLYPH A515
+14638 ; [.5E64.0020.0002] # ANATOLIAN HIEROGLYPH A516
+14639 ; [.5E65.0020.0002] # ANATOLIAN HIEROGLYPH A517
+1463A ; [.5E66.0020.0002] # ANATOLIAN HIEROGLYPH A518
+1463B ; [.5E67.0020.0002] # ANATOLIAN HIEROGLYPH A519
+1463C ; [.5E68.0020.0002] # ANATOLIAN HIEROGLYPH A520
+1463D ; [.5E69.0020.0002] # ANATOLIAN HIEROGLYPH A521
+1463E ; [.5E6A.0020.0002] # ANATOLIAN HIEROGLYPH A522
+1463F ; [.5E6B.0020.0002] # ANATOLIAN HIEROGLYPH A523
+14640 ; [.5E6C.0020.0002] # ANATOLIAN HIEROGLYPH A524
+14641 ; [.5E6D.0020.0002] # ANATOLIAN HIEROGLYPH A525
+14642 ; [.5E6E.0020.0002] # ANATOLIAN HIEROGLYPH A526
+14643 ; [.5E6F.0020.0002] # ANATOLIAN HIEROGLYPH A527
+14644 ; [.5E70.0020.0002] # ANATOLIAN HIEROGLYPH A528
+14645 ; [.5E71.0020.0002] # ANATOLIAN HIEROGLYPH A529
+14646 ; [.5E72.0020.0002] # ANATOLIAN HIEROGLYPH A530
+2F00 ; [.FB40.0020.0004][.CE00.0000.0000] # KANGXI RADICAL ONE
+3220 ; [*0334.0020.0004][.FB40.0020.0004][.CE00.0000.0000][*0335.0020.0004] # PARENTHESIZED IDEOGRAPH ONE
+3280 ; [.FB40.0020.0006][.CE00.0000.0000] # CIRCLED IDEOGRAPH ONE
+3192 ; [.FB40.0020.0014][.CE00.0000.0000] # IDEOGRAPHIC ANNOTATION ONE MARK
+1F229 ; [.FB40.0020.001C][.CE00.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-4E00
+319C ; [.FB40.0020.0014][.CE01.0000.0000] # IDEOGRAPHIC ANNOTATION FOURTH MARK
+3226 ; [*0334.0020.0004][.FB40.0020.0004][.CE03.0000.0000][*0335.0020.0004] # PARENTHESIZED IDEOGRAPH SEVEN
+3286 ; [.FB40.0020.0006][.CE03.0000.0000] # CIRCLED IDEOGRAPH SEVEN
+3222 ; [*0334.0020.0004][.FB40.0020.0004][.CE09.0000.0000][*0335.0020.0004] # PARENTHESIZED IDEOGRAPH THREE
+1F241 ; [*039E.0020.0004][.FB40.0020.0004][.CE09.0000.0000][*039F.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E09
+3282 ; [.FB40.0020.0006][.CE09.0000.0000] # CIRCLED IDEOGRAPH THREE
+3194 ; [.FB40.0020.0014][.CE09.0000.0000] # IDEOGRAPHIC ANNOTATION THREE MARK
+1F22A ; [.FB40.0020.001C][.CE09.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-4E09
+32A4 ; [.FB40.0020.0006][.CE0A.0000.0000] # CIRCLED IDEOGRAPH HIGH
+3196 ; [.FB40.0020.0014][.CE0A.0000.0000] # IDEOGRAPHIC ANNOTATION TOP MARK
+32A6 ; [.FB40.0020.0006][.CE0B.0000.0000] # CIRCLED IDEOGRAPH LOW
+3198 ; [.FB40.0020.0014][.CE0B.0000.0000] # IDEOGRAPHIC ANNOTATION BOTTOM MARK
+F967 ; [.FB40.0020.0002][.CE0D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F967
+319B ; [.FB40.0020.0014][.CE19.0000.0000] # IDEOGRAPHIC ANNOTATION THIRD MARK
+FA70 ; [.FB40.0020.0002][.CE26.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA70
+2F01 ; [.FB40.0020.0004][.CE28.0000.0000] # KANGXI RADICAL LINE
+2EA6 ; [.FB40.0020.0004][.CE2C.0000.0000] # CJK RADICAL SIMPLIFIED HALF TREE TRUNK
+32A5 ; [.FB40.0020.0006][.CE2D.0000.0000] # CIRCLED IDEOGRAPH CENTRE
+3197 ; [.FB40.0020.0014][.CE2D.0000.0000] # IDEOGRAPHIC ANNOTATION MIDDLE MARK
+1F22D ; [.FB40.0020.001C][.CE2D.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-4E2D
+F905 ; [.FB40.0020.0002][.CE32.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F905
+2F02 ; [.FB40.0020.0004][.CE36.0000.0000] # KANGXI RADICAL DOT
+2E80 ; [.FB40.0020.0004][.CE36.0000.0000][.0000.0118.0004] # CJK RADICAL REPEAT
+2F801 ; [.FB40.0020.0002][.CE38.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F801
+F95E ; [.FB40.0020.0002][.CE39.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F95E
+2F800 ; [.FB40.0020.0002][.CE3D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F800
+2F03 ; [.FB40.0020.0004][.CE3F.0000.0000] # KANGXI RADICAL SLASH
+2F802 ; [.FB40.0020.0002][.CE41.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F802
+2F04 ; [.FB40.0020.0004][.CE59.0000.0000] # KANGXI RADICAL SECOND
+319A ; [.FB40.0020.0014][.CE59.0000.0000] # IDEOGRAPHIC ANNOTATION SECOND MARK
+2E84 ; [.FB40.0020.0004][.CE59.0000.0000][.0000.0118.0004] # CJK RADICAL SECOND THREE
+2E83 ; [.FB40.0020.0004][.CE5A.0000.0000] # CJK RADICAL SECOND TWO
+2E82 ; [.FB40.0020.0004][.CE5B.0000.0000] # CJK RADICAL SECOND ONE
+3228 ; [*0334.0020.0004][.FB40.0020.0004][.CE5D.0000.0000][*0335.0020.0004] # PARENTHESIZED IDEOGRAPH NINE
+3288 ; [.FB40.0020.0006][.CE5D.0000.0000] # CIRCLED IDEOGRAPH NINE
+F91B ; [.FB40.0020.0002][.CE82.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F91B
+2F05 ; [.FB40.0020.0004][.CE85.0000.0000] # KANGXI RADICAL HOOK
+F9BA ; [.FB40.0020.0002][.CE86.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9BA
+2F06 ; [.FB40.0020.0004][.CE8C.0000.0000] # KANGXI RADICAL TWO
+3221 ; [*0334.0020.0004][.FB40.0020.0004][.CE8C.0000.0000][*0335.0020.0004] # PARENTHESIZED IDEOGRAPH TWO
+1F242 ; [*039E.0020.0004][.FB40.0020.0004][.CE8C.0000.0000][*039F.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E8C
+3281 ; [.FB40.0020.0006][.CE8C.0000.0000] # CIRCLED IDEOGRAPH TWO
+3193 ; [.FB40.0020.0014][.CE8C.0000.0000] # IDEOGRAPHIC ANNOTATION TWO MARK
+1F214 ; [.FB40.0020.001C][.CE8C.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-4E8C
+3224 ; [*0334.0020.0004][.FB40.0020.0004][.CE94.0000.0000][*0335.0020.0004] # PARENTHESIZED IDEOGRAPH FIVE
+3284 ; [.FB40.0020.0006][.CE94.0000.0000] # CIRCLED IDEOGRAPH FIVE
+2F07 ; [.FB40.0020.0004][.CEA0.0000.0000] # KANGXI RADICAL LID
+1F218 ; [.FB40.0020.001C][.CEA4.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-4EA4
+F977 ; [.FB40.0020.0002][.CEAE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F977
+2F08 ; [.FB40.0020.0004][.CEBA.0000.0000] # KANGXI RADICAL MAN
+319F ; [.FB40.0020.0014][.CEBA.0000.0000] # IDEOGRAPHIC ANNOTATION MAN MARK
+2E85 ; [.FB40.0020.0004][.CEBB.0000.0000] # CJK RADICAL PERSON
+F9FD ; [.FB40.0020.0002][.CEC0.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9FD
+2F819 ; [.FB40.0020.0002][.CECC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F819
+3239 ; [*0334.0020.0004][.FB40.0020.0004][.CEE3.0000.0000][*0335.0020.0004] # PARENTHESIZED IDEOGRAPH REPRESENT
+F9A8 ; [.FB40.0020.0002][.CEE4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9A8
+32FF ; [.FB40.0020.001C][.CEE4.0000.0000][.FB40.0020.001C][.D48C.0000.0000] # SQUARE ERA NAME REIWA
+323D ; [*0334.0020.0004][.FB40.0020.0004][.CF01.0000.0000][*0335.0020.0004] # PARENTHESIZED IDEOGRAPH ENTERPRISE
+32AD ; [.FB40.0020.0006][.CF01.0000.0000] # CIRCLED IDEOGRAPH ENTERPRISE
+3241 ; [*0334.0020.0004][.FB40.0020.0004][.CF11.0000.0000][*0335.0020.0004] # PARENTHESIZED IDEOGRAPH REST
+32A1 ; [.FB40.0020.0006][.CF11.0000.0000] # CIRCLED IDEOGRAPH REST
+2F804 ; [.FB40.0020.0002][.CF60.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F804
+FA73 ; [.FB40.0020.0002][.CF80.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA73
+F92D ; [.FB40.0020.0002][.CF86.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F92D
+F9B5 ; [.FB40.0020.0002][.CF8B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9B5
+FA30 ; [.FB40.0020.0002][.CFAE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA30
+2F805 ; [.FB40.0020.0002][.CFAE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F805
+2F806 ; [.FB40.0020.0002][.CFBB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F806
+F965 ; [.FB40.0020.0002][.CFBF.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F965
+2F807 ; [.FB40.0020.0002][.D002.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F807
+F9D4 ; [.FB40.0020.0002][.D02B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9D4
+2F808 ; [.FB40.0020.0002][.D07A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F808
+2F809 ; [.FB40.0020.0002][.D099.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F809
+2F80B ; [.FB40.0020.0002][.D0CF.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F80B
+F9BB ; [.FB40.0020.0002][.D0DA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9BB
+FA31 ; [.FB40.0020.0002][.D0E7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA31
+2F80A ; [.FB40.0020.0002][.D0E7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F80A
+329D ; [.FB40.0020.0006][.D12A.0000.0000] # CIRCLED IDEOGRAPH EXCELLENT
+2F09 ; [.FB40.0020.0004][.D13F.0000.0000] # KANGXI RADICAL LEGS
+FA0C ; [.FB40.0020.0002][.D140.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA0C
+FA74 ; [.FB40.0020.0002][.D145.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA74
+FA32 ; [.FB40.0020.0002][.D14D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA32
+2F80E ; [.FB40.0020.0002][.D14D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F80E
+2F80F ; [.FB40.0020.0002][.D154.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F80F
+2F810 ; [.FB40.0020.0002][.D164.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F810
+2F0A ; [.FB40.0020.0004][.D165.0000.0000] # KANGXI RADICAL ENTER
+2F814 ; [.FB40.0020.0002][.D167.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F814
+FA72 ; [.FB40.0020.0002][.D168.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA72
+F978 ; [.FB40.0020.0002][.D169.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F978
+2F0B ; [.FB40.0020.0004][.D16B.0000.0000] # KANGXI RADICAL EIGHT
+3227 ; [*0334.0020.0004][.FB40.0020.0004][.D16B.0000.0000][*0335.0020.0004] # PARENTHESIZED IDEOGRAPH EIGHT
+3287 ; [.FB40.0020.0006][.D16B.0000.0000] # CIRCLED IDEOGRAPH EIGHT
+F9D1 ; [.FB40.0020.0002][.D16D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9D1
+3225 ; [*0334.0020.0004][.FB40.0020.0004][.D16D.0000.0000][*0335.0020.0004] # PARENTHESIZED IDEOGRAPH SIX
+3285 ; [.FB40.0020.0006][.D16D.0000.0000] # CIRCLED IDEOGRAPH SIX
+2F811 ; [.FB40.0020.0002][.D177.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F811
+FA75 ; [.FB40.0020.0002][.D180.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA75
+2F0C ; [.FB40.0020.0004][.D182.0000.0000] # KANGXI RADICAL DOWN BOX
+2E86 ; [.FB40.0020.0004][.D182.0000.0000][.0000.0118.0004] # CJK RADICAL BOX
+2F815 ; [.FB40.0020.0002][.D18D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F815
+1F21E ; [.FB40.0020.001C][.D18D.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-518D
+2F8D2 ; [.FB40.0020.0002][.D192.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8D2
+2F8D3 ; [.FB40.0020.0002][.D195.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8D3
+2F0D ; [.FB40.0020.0004][.D196.0000.0000] # KANGXI RADICAL COVER
+2F817 ; [.FB40.0020.0002][.D197.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F817
+32A2 ; [.FB40.0020.0006][.D199.0000.0000] # CIRCLED IDEOGRAPH COPY
+2F818 ; [.FB40.0020.0002][.D1A4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F818
+2F0E ; [.FB40.0020.0004][.D1AB.0000.0000] # KANGXI RADICAL ICE
+2F81A ; [.FB40.0020.0002][.D1AC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F81A
+FA71 ; [.FB40.0020.0002][.D1B5.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA71
+2F81B ; [.FB40.0020.0002][.D1B5.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F81B
+F92E ; [.FB40.0020.0002][.D1B7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F92E
+F979 ; [.FB40.0020.0002][.D1C9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F979
+F955 ; [.FB40.0020.0002][.D1CC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F955
+F954 ; [.FB40.0020.0002][.D1DC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F954
+FA15 ; [.FB40.0020.0002][.D1DE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA15
+2F0F ; [.FB40.0020.0004][.D1E0.0000.0000] # KANGXI RADICAL TABLE
+2E87 ; [.FB40.0020.0004][.D1E0.0000.0000][.0000.0118.0004] # CJK RADICAL TABLE
+2F81D ; [.FB40.0020.0002][.D1F5.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F81D
+2F10 ; [.FB40.0020.0004][.D1F5.0000.0000] # KANGXI RADICAL OPEN BOX
+2F11 ; [.FB40.0020.0004][.D200.0000.0000] # KANGXI RADICAL KNIFE
+2E88 ; [.FB40.0020.0004][.D200.0000.0000][.0000.0118.0004] # CJK RADICAL KNIFE ONE
+2E89 ; [.FB40.0020.0004][.D202.0000.0000] # CJK RADICAL KNIFE TWO
+2F81E ; [.FB40.0020.0002][.D203.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F81E
+FA00 ; [.FB40.0020.0002][.D207.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA00
+2F850 ; [.FB40.0020.0002][.D207.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F850
+F99C ; [.FB40.0020.0002][.D217.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F99C
+1F220 ; [.FB40.0020.001C][.D21D.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-521D
+F9DD ; [.FB40.0020.0002][.D229.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9DD
+F9FF ; [.FB40.0020.0002][.D23A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9FF
+2F820 ; [.FB40.0020.0002][.D23B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F820
+2F821 ; [.FB40.0020.0002][.D246.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F821
+1F21C ; [.FB40.0020.001C][.D24D.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-524D
+2F822 ; [.FB40.0020.0002][.D272.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F822
+1F239 ; [.FB40.0020.001C][.D272.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-5272
+2F823 ; [.FB40.0020.0002][.D277.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F823
+F9C7 ; [.FB40.0020.0002][.D289.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9C7
+F98A ; [.FB40.0020.0002][.D29B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F98A
+2F12 ; [.FB40.0020.0004][.D29B.0000.0000] # KANGXI RADICAL POWER
+F99D ; [.FB40.0020.0002][.D2A3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F99D
+2F992 ; [.FB40.0020.0002][.D2B3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F992
+3238 ; [*0334.0020.0004][.FB40.0020.0004][.D2B4.0000.0000][*0335.0020.0004] # PARENTHESIZED IDEOGRAPH LABOR
+3298 ; [.FB40.0020.0006][.D2B4.0000.0000] # CIRCLED IDEOGRAPH LABOR
+FA76 ; [.FB40.0020.0002][.D2C7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA76
+2F825 ; [.FB40.0020.0002][.D2C7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F825
+FA33 ; [.FB40.0020.0002][.D2C9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA33
+2F826 ; [.FB40.0020.0002][.D2C9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F826
+F952 ; [.FB40.0020.0002][.D2D2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F952
+1F247 ; [*039E.0020.0004][.FB40.0020.0004][.D2DD.0000.0000][*039F.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-52DD
+F92F ; [.FB40.0020.0002][.D2DE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F92F
+FA34 ; [.FB40.0020.0002][.D2E4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA34
+2F827 ; [.FB40.0020.0002][.D2E4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F827
+F97F ; [.FB40.0020.0002][.D2F5.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F97F
+2F13 ; [.FB40.0020.0004][.D2F9.0000.0000] # KANGXI RADICAL WRAP
+FA77 ; [.FB40.0020.0002][.D2FA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA77
+2F828 ; [.FB40.0020.0002][.D2FA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F828
+2F829 ; [.FB40.0020.0002][.D305.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F829
+2F82A ; [.FB40.0020.0002][.D306.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F82A
+2F14 ; [.FB40.0020.0004][.D315.0000.0000] # KANGXI RADICAL SPOON
+F963 ; [.FB40.0020.0002][.D317.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F963
+2F82B ; [.FB40.0020.0002][.D317.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F82B
+2F15 ; [.FB40.0020.0004][.D31A.0000.0000] # KANGXI RADICAL RIGHT OPEN BOX
+2F16 ; [.FB40.0020.0004][.D338.0000.0000] # KANGXI RADICAL HIDING ENCLOSURE
+32A9 ; [.FB40.0020.0006][.D33B.0000.0000] # CIRCLED IDEOGRAPH MEDICINE
+F9EB ; [.FB40.0020.0002][.D33F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9EB
+2F17 ; [.FB40.0020.0004][.D341.0000.0000] # KANGXI RADICAL TEN
+3038 ; [.FB40.0020.0004][.D341.0000.0000] # HANGZHOU NUMERAL TEN
+3229 ; [*0334.0020.0004][.FB40.0020.0004][.D341.0000.0000][*0335.0020.0004] # PARENTHESIZED IDEOGRAPH TEN
+3289 ; [.FB40.0020.0006][.D341.0000.0000] # CIRCLED IDEOGRAPH TEN
+3039 ; [.FB40.0020.0004][.D344.0000.0000] # HANGZHOU NUMERAL TWENTY
+303A ; [.FB40.0020.0004][.D345.0000.0000] # HANGZHOU NUMERAL THIRTY
+2F82C ; [.FB40.0020.0002][.D349.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F82C
+FA35 ; [.FB40.0020.0002][.D351.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA35
+2F82D ; [.FB40.0020.0002][.D351.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F82D
+323F ; [*0334.0020.0004][.FB40.0020.0004][.D354.0000.0000][*0335.0020.0004] # PARENTHESIZED IDEOGRAPH ALLIANCE
+32AF ; [.FB40.0020.0006][.D354.0000.0000] # CIRCLED IDEOGRAPH ALLIANCE
+2F82E ; [.FB40.0020.0002][.D35A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F82E
+2F18 ; [.FB40.0020.0004][.D35C.0000.0000] # KANGXI RADICAL DIVINATION
+2E8A ; [.FB40.0020.0004][.D35C.0000.0000][.0000.0118.0004] # CJK RADICAL DIVINATION
+2F19 ; [.FB40.0020.0004][.D369.0000.0000] # KANGXI RADICAL SEAL
+2E8B ; [.FB40.0020.0004][.D369.0000.0000][.0000.0118.0004] # CJK RADICAL SEAL
+329E ; [.FB40.0020.0006][.D370.0000.0000] # CIRCLED IDEOGRAPH PRINT
+2F82F ; [.FB40.0020.0002][.D373.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F82F
+F91C ; [.FB40.0020.0002][.D375.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F91C
+2F830 ; [.FB40.0020.0002][.D37D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F830
+2F831 ; [.FB40.0020.0002][.D37F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F831
+2F832 ; [.FB40.0020.0002][.D37F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F832
+2F833 ; [.FB40.0020.0002][.D37F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F833
+2F1A ; [.FB40.0020.0004][.D382.0000.0000] # KANGXI RADICAL CLIFF
+2E81 ; [.FB40.0020.0004][.D382.0000.0000][.0000.0118.0004] # CJK RADICAL CLIFF
+2F1B ; [.FB40.0020.0004][.D3B6.0000.0000] # KANGXI RADICAL PRIVATE
+F96B ; [.FB40.0020.0002][.D3C3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F96B
+2F1C ; [.FB40.0020.0004][.D3C8.0000.0000] # KANGXI RADICAL AGAIN
+2F836 ; [.FB40.0020.0002][.D3CA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F836
+1F212 ; [.FB40.0020.001C][.D3CC.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-53CC
+2F837 ; [.FB40.0020.0002][.D3DF.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F837
+2F1D ; [.FB40.0020.0004][.D3E3.0000.0000] # KANGXI RADICAL MOUTH
+F906 ; [.FB40.0020.0002][.D3E5.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F906
+2F839 ; [.FB40.0020.0002][.D3EB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F839
+1F251 ; [.FB40.0020.0006][.D3EF.0000.0000] # CIRCLED IDEOGRAPH ACCEPT
+2F83A ; [.FB40.0020.0002][.D3F1.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F83A
+32A8 ; [.FB40.0020.0006][.D3F3.0000.0000] # CIRCLED IDEOGRAPH RIGHT
+1F22E ; [.FB40.0020.001C][.D3F3.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-53F3
+2F83B ; [.FB40.0020.0002][.D406.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F83B
+1F234 ; [.FB40.0020.001C][.D408.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-5408
+3234 ; [*0334.0020.0004][.FB40.0020.0004][.D40D.0000.0000][*0335.0020.0004] # PARENTHESIZED IDEOGRAPH NAME
+3294 ; [.FB40.0020.0006][.D40D.0000.0000] # CIRCLED IDEOGRAPH NAME
+F9DE ; [.FB40.0020.0002][.D40F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9DE
+F9ED ; [.FB40.0020.0002][.D41D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9ED
+2F83D ; [.FB40.0020.0002][.D438.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F83D
+1F225 ; [.FB40.0020.001C][.D439.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-5439
+F980 ; [.FB40.0020.0002][.D442.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F980
+2F83E ; [.FB40.0020.0002][.D448.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F83E
+2F83F ; [.FB40.0020.0002][.D468.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F83F
+323A ; [*0334.0020.0004][.FB40.0020.0004][.D47C.0000.0000][*0335.0020.0004] # PARENTHESIZED IDEOGRAPH CALL
+2F83C ; [.FB40.0020.0002][.D49E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F83C
+2F840 ; [.FB40.0020.0002][.D4A2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F840
+F99E ; [.FB40.0020.0002][.D4BD.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F99E
+2F841 ; [.FB40.0020.0002][.D4F6.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F841
+2F842 ; [.FB40.0020.0002][.D510.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F842
+3244 ; [.FB40.0020.0006][.D54F.0000.0000] # CIRCLED IDEOGRAPH QUESTION
+2F843 ; [.FB40.0020.0002][.D553.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F843
+FA79 ; [.FB40.0020.0002][.D555.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA79
+2F844 ; [.FB40.0020.0002][.D563.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F844
+2F845 ; [.FB40.0020.0002][.D584.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F845
+2F846 ; [.FB40.0020.0002][.D584.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F846
+F90B ; [.FB40.0020.0002][.D587.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F90B
+FA7A ; [.FB40.0020.0002][.D599.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA7A
+2F847 ; [.FB40.0020.0002][.D599.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F847
+FA36 ; [.FB40.0020.0002][.D59D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA36
+FA78 ; [.FB40.0020.0002][.D59D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA78
+2F848 ; [.FB40.0020.0002][.D5AB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F848
+2F849 ; [.FB40.0020.0002][.D5B3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F849
+1F23A ; [.FB40.0020.001C][.D5B6.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-55B6
+FA0D ; [.FB40.0020.0002][.D5C0.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA0D
+2F84A ; [.FB40.0020.0002][.D5C2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F84A
+FA7B ; [.FB40.0020.0002][.D5E2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA7B
+FA37 ; [.FB40.0020.0002][.D606.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA37
+2F84C ; [.FB40.0020.0002][.D606.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F84C
+2F84E ; [.FB40.0020.0002][.D651.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F84E
+FA38 ; [.FB40.0020.0002][.D668.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA38
+2F84F ; [.FB40.0020.0002][.D674.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F84F
+2F1E ; [.FB40.0020.0004][.D6D7.0000.0000] # KANGXI RADICAL ENCLOSURE
+3223 ; [*0334.0020.0004][.FB40.0020.0004][.D6DB.0000.0000][*0335.0020.0004] # PARENTHESIZED IDEOGRAPH FOUR
+3283 ; [.FB40.0020.0006][.D6DB.0000.0000] # CIRCLED IDEOGRAPH FOUR
+3195 ; [.FB40.0020.0014][.D6DB.0000.0000] # IDEOGRAPHIC ANNOTATION FOUR MARK
+F9A9 ; [.FB40.0020.0002][.D6F9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9A9
+2F84B ; [.FB40.0020.0002][.D716.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F84B
+2F84D ; [.FB40.0020.0002][.D717.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F84D
+2F1F ; [.FB40.0020.0004][.D71F.0000.0000] # KANGXI RADICAL EARTH
+322F ; [*0334.0020.0004][.FB40.0020.0004][.D71F.0000.0000][*0335.0020.0004] # PARENTHESIZED IDEOGRAPH EARTH
+328F ; [.FB40.0020.0006][.D71F.0000.0000] # CIRCLED IDEOGRAPH EARTH
+319E ; [.FB40.0020.0014][.D730.0000.0000] # IDEOGRAPHIC ANNOTATION EARTH MARK
+2F855 ; [.FB40.0020.0002][.D78B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F855
+2F852 ; [.FB40.0020.0002][.D7CE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F852
+2F853 ; [.FB40.0020.0002][.D7F4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F853
+2F854 ; [.FB40.0020.0002][.D80D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F854
+2F857 ; [.FB40.0020.0002][.D831.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F857
+2F856 ; [.FB40.0020.0002][.D832.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F856
+FA39 ; [.FB40.0020.0002][.D840.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA39
+FA10 ; [.FB40.0020.0002][.D85A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA10
+FA7C ; [.FB40.0020.0002][.D85A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA7C
+F96C ; [.FB40.0020.0002][.D85E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F96C
+FA3A ; [.FB40.0020.0002][.D8A8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA3A
+2F858 ; [.FB40.0020.0002][.D8AC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F858
+FA7D ; [.FB40.0020.0002][.D8B3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA7D
+F94A ; [.FB40.0020.0002][.D8D8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F94A
+F942 ; [.FB40.0020.0002][.D8DF.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F942
+2F20 ; [.FB40.0020.0004][.D8EB.0000.0000] # KANGXI RADICAL SCHOLAR
+2F851 ; [.FB40.0020.0002][.D8EE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F851
+1F224 ; [.FB40.0020.001C][.D8F0.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-58F0
+2F85A ; [.FB40.0020.0002][.D8F2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F85A
+2F85B ; [.FB40.0020.0002][.D8F7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F85B
+2F21 ; [.FB40.0020.0004][.D902.0000.0000] # KANGXI RADICAL GO
+2F85C ; [.FB40.0020.0002][.D906.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F85C
+2F22 ; [.FB40.0020.0004][.D90A.0000.0000] # KANGXI RADICAL GO SLOWLY
+2F23 ; [.FB40.0020.0004][.D915.0000.0000] # KANGXI RADICAL EVENING
+2F85D ; [.FB40.0020.0002][.D91A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F85D
+1F215 ; [.FB40.0020.001C][.D91A.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-591A
+32B0 ; [.FB40.0020.0006][.D91C.0000.0000] # CIRCLED IDEOGRAPH NIGHT
+2F85E ; [.FB40.0020.0002][.D922.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F85E
+2F24 ; [.FB40.0020.0004][.D927.0000.0000] # KANGXI RADICAL BIG
+337D ; [.FB40.0020.001C][.D927.0000.0000][.FB40.0020.001C][.EB63.0000.0000] # SQUARE ERA NAME TAISYOU
+319D ; [.FB40.0020.0014][.D929.0000.0000] # IDEOGRAPHIC ANNOTATION HEAVEN MARK
+1F217 ; [.FB40.0020.001C][.D929.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-5929
+FA7E ; [.FB40.0020.0002][.D944.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA7E
+F90C ; [.FB40.0020.0002][.D948.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F90C
+F909 ; [.FB40.0020.0002][.D951.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F909
+FA7F ; [.FB40.0020.0002][.D954.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA7F
+2F85F ; [.FB40.0020.0002][.D962.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F85F
+F981 ; [.FB40.0020.0002][.D973.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F981
+2F25 ; [.FB40.0020.0004][.D973.0000.0000] # KANGXI RADICAL WOMAN
+329B ; [.FB40.0020.0006][.D973.0000.0000] # CIRCLED IDEOGRAPH FEMALE
+2F865 ; [.FB40.0020.0002][.D9D8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F865
+2F862 ; [.FB40.0020.0002][.D9EC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F862
+2F863 ; [.FB40.0020.0002][.DA1B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F863
+2F864 ; [.FB40.0020.0002][.DA27.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F864
+FA80 ; [.FB40.0020.0002][.DA62.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA80
+2F866 ; [.FB40.0020.0002][.DA66.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F866
+2F986 ; [.FB40.0020.0002][.DAB5.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F986
+2F869 ; [.FB40.0020.0002][.DB08.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F869
+FA81 ; [.FB40.0020.0002][.DB28.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA81
+2F86A ; [.FB40.0020.0002][.DB3E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F86A
+2F86B ; [.FB40.0020.0002][.DB3E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F86B
+2F26 ; [.FB40.0020.0004][.DB50.0000.0000] # KANGXI RADICAL CHILD
+1F211 ; [.FB40.0020.001C][.DB57.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-5B57
+323B ; [*0334.0020.0004][.FB40.0020.0004][.DB66.0000.0000][*0335.0020.0004] # PARENTHESIZED IDEOGRAPH STUDY
+32AB ; [.FB40.0020.0006][.DB66.0000.0000] # CIRCLED IDEOGRAPH STUDY
+2F27 ; [.FB40.0020.0004][.DB80.0000.0000] # KANGXI RADICAL ROOF
+FA04 ; [.FB40.0020.0002][.DB85.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA04
+1F243 ; [*039E.0020.0004][.FB40.0020.0004][.DB89.0000.0000][*039F.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-5B89
+32AA ; [.FB40.0020.0006][.DB97.0000.0000] # CIRCLED IDEOGRAPH RELIGION
+2F86D ; [.FB40.0020.0002][.DBC3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F86D
+2F86E ; [.FB40.0020.0002][.DBD8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F86E
+F95F ; [.FB40.0020.0002][.DBE7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F95F
+F9AA ; [.FB40.0020.0002][.DBE7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9AA
+2F86F ; [.FB40.0020.0002][.DBE7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F86F
+F9BC ; [.FB40.0020.0002][.DBEE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9BC
+2F870 ; [.FB40.0020.0002][.DBF3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F870
+2F28 ; [.FB40.0020.0004][.DBF8.0000.0000] # KANGXI RADICAL INCH
+2F872 ; [.FB40.0020.0002][.DBFF.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F872
+2F873 ; [.FB40.0020.0002][.DC06.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F873
+2F29 ; [.FB40.0020.0004][.DC0F.0000.0000] # KANGXI RADICAL SMALL
+2E8C ; [.FB40.0020.0004][.DC0F.0000.0000][.0000.0118.0004] # CJK RADICAL SMALL ONE
+2E8D ; [.FB40.0020.0004][.DC0F.0000.0000][.0000.0119.0004] # CJK RADICAL SMALL TWO
+2F875 ; [.FB40.0020.0002][.DC22.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F875
+2E90 ; [.FB40.0020.0004][.DC22.0000.0000] # CJK RADICAL LAME THREE
+2F2A ; [.FB40.0020.0004][.DC22.0000.0000] # KANGXI RADICAL LAME
+2E8E ; [.FB40.0020.0004][.DC22.0000.0000][.0000.0118.0004] # CJK RADICAL LAME ONE
+2E8F ; [.FB40.0020.0004][.DC23.0000.0000] # CJK RADICAL LAME TWO
+2E91 ; [.FB40.0020.0004][.DC23.0000.0000][.0000.0118.0004] # CJK RADICAL LAME FOUR
+2F2B ; [.FB40.0020.0004][.DC38.0000.0000] # KANGXI RADICAL CORPSE
+F9BD ; [.FB40.0020.0002][.DC3F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9BD
+2F877 ; [.FB40.0020.0002][.DC60.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F877
+F94B ; [.FB40.0020.0002][.DC62.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F94B
+FA3B ; [.FB40.0020.0002][.DC64.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA3B
+F9DF ; [.FB40.0020.0002][.DC65.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9DF
+FA3C ; [.FB40.0020.0002][.DC6E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA3C
+2F878 ; [.FB40.0020.0002][.DC6E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F878
+2F2C ; [.FB40.0020.0004][.DC6E.0000.0000] # KANGXI RADICAL SPROUT
+2F2D ; [.FB40.0020.0004][.DC71.0000.0000] # KANGXI RADICAL MOUNTAIN
+2F87A ; [.FB40.0020.0002][.DC8D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F87A
+2F879 ; [.FB40.0020.0002][.DCC0.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F879
+F9D5 ; [.FB40.0020.0002][.DD19.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9D5
+2F87C ; [.FB40.0020.0002][.DD43.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F87C
+F921 ; [.FB40.0020.0002][.DD50.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F921
+2F87F ; [.FB40.0020.0002][.DD6B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F87F
+2F87E ; [.FB40.0020.0002][.DD6E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F87E
+2F880 ; [.FB40.0020.0002][.DD7C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F880
+2F9F4 ; [.FB40.0020.0002][.DDB2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9F4
+F9AB ; [.FB40.0020.0002][.DDBA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9AB
+2F2E ; [.FB40.0020.0004][.DDDB.0000.0000] # KANGXI RADICAL RIVER
+2F881 ; [.FB40.0020.0002][.DDE1.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F881
+2F882 ; [.FB40.0020.0002][.DDE2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F882
+2F2F ; [.FB40.0020.0004][.DDE5.0000.0000] # KANGXI RADICAL WORK
+32A7 ; [.FB40.0020.0006][.DDE6.0000.0000] # CIRCLED IDEOGRAPH LEFT
+1F22C ; [.FB40.0020.001C][.DDE6.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-5DE6
+2F30 ; [.FB40.0020.0004][.DDF1.0000.0000] # KANGXI RADICAL ONESELF
+2E92 ; [.FB40.0020.0004][.DDF3.0000.0000] # CJK RADICAL SNAKE
+2F884 ; [.FB40.0020.0002][.DDFD.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F884
+2F31 ; [.FB40.0020.0004][.DDFE.0000.0000] # KANGXI RADICAL TURBAN
+2F885 ; [.FB40.0020.0002][.DE28.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F885
+2F886 ; [.FB40.0020.0002][.DE3D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F886
+2F887 ; [.FB40.0020.0002][.DE69.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F887
+2F32 ; [.FB40.0020.0004][.DE72.0000.0000] # KANGXI RADICAL DRY
+337B ; [.FB40.0020.001C][.DE73.0000.0000][.FB40.0020.001C][.E210.0000.0000] # SQUARE ERA NAME HEISEI
+F98E ; [.FB40.0020.0002][.DE74.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F98E
+2E93 ; [.FB40.0020.0004][.DE7A.0000.0000] # CJK RADICAL THREAD
+2F33 ; [.FB40.0020.0004][.DE7A.0000.0000] # KANGXI RADICAL SHORT THREAD
+3245 ; [.FB40.0020.0006][.DE7C.0000.0000] # CIRCLED IDEOGRAPH KINDERGARTEN
+2F34 ; [.FB40.0020.0004][.DE7F.0000.0000] # KANGXI RADICAL DOTTED CLIFF
+FA01 ; [.FB40.0020.0002][.DEA6.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA01
+2F88B ; [.FB40.0020.0002][.DEB0.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F88B
+2F88C ; [.FB40.0020.0002][.DEB3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F88C
+2F88D ; [.FB40.0020.0002][.DEB6.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F88D
+F9A2 ; [.FB40.0020.0002][.DEC9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9A2
+F928 ; [.FB40.0020.0002][.DECA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F928
+2F88E ; [.FB40.0020.0002][.DECA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F88E
+FA82 ; [.FB40.0020.0002][.DED2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA82
+FA0B ; [.FB40.0020.0002][.DED3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA0B
+FA83 ; [.FB40.0020.0002][.DED9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA83
+F982 ; [.FB40.0020.0002][.DEEC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F982
+2F35 ; [.FB40.0020.0004][.DEF4.0000.0000] # KANGXI RADICAL LONG STRIDE
+2F890 ; [.FB40.0020.0002][.DEFE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F890
+2F36 ; [.FB40.0020.0004][.DEFE.0000.0000] # KANGXI RADICAL TWO HANDS
+F943 ; [.FB40.0020.0002][.DF04.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F943
+2F37 ; [.FB40.0020.0004][.DF0B.0000.0000] # KANGXI RADICAL SHOOT
+2F38 ; [.FB40.0020.0004][.DF13.0000.0000] # KANGXI RADICAL BOW
+2F894 ; [.FB40.0020.0002][.DF22.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F894
+2F895 ; [.FB40.0020.0002][.DF22.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F895
+2F39 ; [.FB40.0020.0004][.DF50.0000.0000] # KANGXI RADICAL SNOUT
+2E95 ; [.FB40.0020.0004][.DF50.0000.0000][.0000.0118.0004] # CJK RADICAL SNOUT TWO
+2E94 ; [.FB40.0020.0004][.DF51.0000.0000] # CJK RADICAL SNOUT ONE
+2F874 ; [.FB40.0020.0002][.DF53.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F874
+2F3A ; [.FB40.0020.0004][.DF61.0000.0000] # KANGXI RADICAL BRISTLE
+2F899 ; [.FB40.0020.0002][.DF62.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F899
+FA84 ; [.FB40.0020.0002][.DF69.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA84
+2F89A ; [.FB40.0020.0002][.DF6B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F89A
+2F3B ; [.FB40.0020.0004][.DF73.0000.0000] # KANGXI RADICAL STEP
+F9D8 ; [.FB40.0020.0002][.DF8B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9D8
+1F21D ; [.FB40.0020.001C][.DF8C.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-5F8C
+1F250 ; [.FB40.0020.0006][.DF97.0000.0000] # CIRCLED IDEOGRAPH ADVANTAGE
+2F89C ; [.FB40.0020.0002][.DF9A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F89C
+F966 ; [.FB40.0020.0002][.DFA9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F966
+FA85 ; [.FB40.0020.0002][.DFAD.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA85
+2F3C ; [.FB40.0020.0004][.DFC3.0000.0000] # KANGXI RADICAL HEART
+2E97 ; [.FB40.0020.0004][.DFC3.0000.0000][.0000.0118.0004] # CJK RADICAL HEART TWO
+2E96 ; [.FB40.0020.0004][.DFC4.0000.0000] # CJK RADICAL HEART ONE
+2F89D ; [.FB40.0020.0002][.DFCD.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F89D
+2F89E ; [.FB40.0020.0002][.DFD7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F89E
+F9A3 ; [.FB40.0020.0002][.DFF5.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9A3
+2F89F ; [.FB40.0020.0002][.DFF9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F89F
+F960 ; [.FB40.0020.0002][.E012.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F960
+F9AC ; [.FB40.0020.0002][.E01C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9AC
+FA6B ; [.FB40.0020.0002][.E075.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA6B
+2F8A0 ; [.FB40.0020.0002][.E081.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8A0
+FA3D ; [.FB40.0020.0002][.E094.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA3D
+2F8A3 ; [.FB40.0020.0002][.E094.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8A3
+2F8A5 ; [.FB40.0020.0002][.E0C7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8A5
+FA86 ; [.FB40.0020.0002][.E0D8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA86
+F9B9 ; [.FB40.0020.0002][.E0E1.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9B9
+FA88 ; [.FB40.0020.0002][.E108.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA88
+F9D9 ; [.FB40.0020.0002][.E144.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9D9
+2F8A6 ; [.FB40.0020.0002][.E148.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8A6
+2F8A7 ; [.FB40.0020.0002][.E14C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8A7
+2F8A9 ; [.FB40.0020.0002][.E14C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8A9
+FA87 ; [.FB40.0020.0002][.E14E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA87
+2F8A8 ; [.FB40.0020.0002][.E14E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8A8
+FA8A ; [.FB40.0020.0002][.E160.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA8A
+FA3E ; [.FB40.0020.0002][.E168.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA3E
+2F8AA ; [.FB40.0020.0002][.E17A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8AA
+FA3F ; [.FB40.0020.0002][.E18E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA3F
+FA89 ; [.FB40.0020.0002][.E18E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA89
+2F8AB ; [.FB40.0020.0002][.E18E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8AB
+F98F ; [.FB40.0020.0002][.E190.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F98F
+2F8AD ; [.FB40.0020.0002][.E1A4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8AD
+2F8AE ; [.FB40.0020.0002][.E1AF.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8AE
+2F8AC ; [.FB40.0020.0002][.E1B2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8AC
+2F8AF ; [.FB40.0020.0002][.E1DE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8AF
+FA40 ; [.FB40.0020.0002][.E1F2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA40
+FA8B ; [.FB40.0020.0002][.E1F2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA8B
+2F8B0 ; [.FB40.0020.0002][.E1F2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8B0
+F90D ; [.FB40.0020.0002][.E1F6.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F90D
+2F8B1 ; [.FB40.0020.0002][.E1F6.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8B1
+F990 ; [.FB40.0020.0002][.E200.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F990
+2F3D ; [.FB40.0020.0004][.E208.0000.0000] # KANGXI RADICAL HALBERD
+2F8B2 ; [.FB40.0020.0002][.E210.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8B2
+2F8B3 ; [.FB40.0020.0002][.E21B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8B3
+F9D2 ; [.FB40.0020.0002][.E22E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9D2
+FA8C ; [.FB40.0020.0002][.E234.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA8C
+2F3E ; [.FB40.0020.0004][.E236.0000.0000] # KANGXI RADICAL DOOR
+2F3F ; [.FB40.0020.0004][.E24B.0000.0000] # KANGXI RADICAL HAND
+1F210 ; [.FB40.0020.001C][.E24B.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-624B
+2E98 ; [.FB40.0020.0004][.E24C.0000.0000] # CJK RADICAL HAND
+1F245 ; [*039E.0020.0004][.FB40.0020.0004][.E253.0000.0000][*039F.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6253
+1F231 ; [.FB40.0020.001C][.E253.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-6253
+2F8B4 ; [.FB40.0020.0002][.E25D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8B4
+1F227 ; [.FB40.0020.001C][.E295.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-6295
+2F8B5 ; [.FB40.0020.0002][.E2B1.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8B5
+F925 ; [.FB40.0020.0002][.E2C9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F925
+F95B ; [.FB40.0020.0002][.E2CF.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F95B
+FA02 ; [.FB40.0020.0002][.E2D3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA02
+2F8B6 ; [.FB40.0020.0002][.E2D4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8B6
+2F8BA ; [.FB40.0020.0002][.E2FC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8BA
+F973 ; [.FB40.0020.0002][.E2FE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F973
+1F22F ; [.FB40.0020.001C][.E307.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-6307
+2F8B9 ; [.FB40.0020.0002][.E33D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8B9
+2F8B7 ; [.FB40.0020.0002][.E350.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8B7
+1F228 ; [.FB40.0020.001C][.E355.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-6355
+2F8BB ; [.FB40.0020.0002][.E368.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8BB
+F9A4 ; [.FB40.0020.0002][.E37B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9A4
+2F8BC ; [.FB40.0020.0002][.E383.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8BC
+F975 ; [.FB40.0020.0002][.E3A0.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F975
+2F8C1 ; [.FB40.0020.0002][.E3A9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8C1
+FA8D ; [.FB40.0020.0002][.E3C4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA8D
+2F8C0 ; [.FB40.0020.0002][.E3C5.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8C0
+2F8BD ; [.FB40.0020.0002][.E3E4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8BD
+FA8E ; [.FB40.0020.0002][.E41C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA8E
+2F8BF ; [.FB40.0020.0002][.E422.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8BF
+FA8F ; [.FB40.0020.0002][.E452.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA8F
+2F8C3 ; [.FB40.0020.0002][.E469.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8C3
+2F8C6 ; [.FB40.0020.0002][.E477.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8C6
+2F8C4 ; [.FB40.0020.0002][.E47E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8C4
+F991 ; [.FB40.0020.0002][.E49A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F991
+2F8C5 ; [.FB40.0020.0002][.E49D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8C5
+F930 ; [.FB40.0020.0002][.E4C4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F930
+2F40 ; [.FB40.0020.0004][.E52F.0000.0000] # KANGXI RADICAL BRANCH
+2F41 ; [.FB40.0020.0004][.E534.0000.0000] # KANGXI RADICAL RAP
+2E99 ; [.FB40.0020.0004][.E535.0000.0000] # CJK RADICAL RAP
+FA41 ; [.FB40.0020.0002][.E54F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA41
+2F8C8 ; [.FB40.0020.0002][.E54F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8C8
+FA90 ; [.FB40.0020.0002][.E556.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA90
+1F248 ; [*039E.0020.0004][.FB40.0020.0004][.E557.0000.0000][*039F.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557
+2F8C9 ; [.FB40.0020.0002][.E56C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8C9
+F969 ; [.FB40.0020.0002][.E578.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F969
+2F42 ; [.FB40.0020.0004][.E587.0000.0000] # KANGXI RADICAL SCRIPT
+3246 ; [.FB40.0020.0006][.E587.0000.0000] # CIRCLED IDEOGRAPH SCHOOL
+2F43 ; [.FB40.0020.0004][.E597.0000.0000] # KANGXI RADICAL DIPPER
+F9BE ; [.FB40.0020.0002][.E599.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9BE
+1F21B ; [.FB40.0020.001C][.E599.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-6599
+2F44 ; [.FB40.0020.0004][.E5A4.0000.0000] # KANGXI RADICAL AXE
+1F21F ; [.FB40.0020.001C][.E5B0.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-65B0
+2F45 ; [.FB40.0020.0004][.E5B9.0000.0000] # KANGXI RADICAL SQUARE
+F983 ; [.FB40.0020.0002][.E5C5.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F983
+2F46 ; [.FB40.0020.0004][.E5E0.0000.0000] # KANGXI RADICAL NOT
+2E9B ; [.FB40.0020.0004][.E5E1.0000.0000] # CJK RADICAL CHOKE
+FA42 ; [.FB40.0020.0002][.E5E2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA42
+2F8CB ; [.FB40.0020.0002][.E5E3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8CB
+2F47 ; [.FB40.0020.0004][.E5E5.0000.0000] # KANGXI RADICAL SUN
+3230 ; [*0334.0020.0004][.FB40.0020.0004][.E5E5.0000.0000][*0335.0020.0004] # PARENTHESIZED IDEOGRAPH SUN
+3290 ; [.FB40.0020.0006][.E5E5.0000.0000] # CIRCLED IDEOGRAPH SUN
+2E9C ; [.FB40.0020.0004][.E5E5.0000.0000][.0000.0118.0004] # CJK RADICAL SUN
+337E ; [.FB40.0020.001C][.E60E.0000.0000][.FB40.0020.001C][.ECBB.0000.0000] # SQUARE ERA NAME MEIZI
+F9E0 ; [.FB40.0020.0002][.E613.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9E0
+1F219 ; [.FB40.0020.001C][.E620.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-6620
+337C ; [.FB40.0020.001C][.E62D.0000.0000][.FB40.0020.001C][.D48C.0000.0000] # SQUARE ERA NAME SYOUWA
+2F8CD ; [.FB40.0020.0002][.E649.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8CD
+FA12 ; [.FB40.0020.0002][.E674.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA12
+FA91 ; [.FB40.0020.0002][.E674.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA91
+F9C5 ; [.FB40.0020.0002][.E688.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9C5
+FA43 ; [.FB40.0020.0002][.E691.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA43
+2F8CF ; [.FB40.0020.0002][.E691.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8CF
+2F8D5 ; [.FB40.0020.0002][.E69C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8D5
+FA06 ; [.FB40.0020.0002][.E6B4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA06
+F98B ; [.FB40.0020.0002][.E6C6.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F98B
+2F48 ; [.FB40.0020.0004][.E6F0.0000.0000] # KANGXI RADICAL SAY
+F901 ; [.FB40.0020.0002][.E6F4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F901
+2F8CC ; [.FB40.0020.0002][.E6F8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8CC
+2F8D4 ; [.FB40.0020.0002][.E700.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8D4
+2F49 ; [.FB40.0020.0004][.E708.0000.0000] # KANGXI RADICAL MOON
+322A ; [*0334.0020.0004][.FB40.0020.0004][.E708.0000.0000][*0335.0020.0004] # PARENTHESIZED IDEOGRAPH MOON
+328A ; [.FB40.0020.0006][.E708.0000.0000] # CIRCLED IDEOGRAPH MOON
+1F237 ; [.FB40.0020.001C][.E708.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-6708
+2E9D ; [.FB40.0020.0004][.E708.0000.0000][.0000.0118.0004] # CJK RADICAL MOON
+3232 ; [*0334.0020.0004][.FB40.0020.0004][.E709.0000.0000][*0335.0020.0004] # PARENTHESIZED IDEOGRAPH HAVE
+3292 ; [.FB40.0020.0006][.E709.0000.0000] # CIRCLED IDEOGRAPH HAVE
+1F236 ; [.FB40.0020.001C][.E709.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-6709
+F929 ; [.FB40.0020.0002][.E717.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F929
+FA92 ; [.FB40.0020.0002][.E717.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA92
+2F8D8 ; [.FB40.0020.0002][.E717.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8D8
+FA93 ; [.FB40.0020.0002][.E71B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA93
+2F8D9 ; [.FB40.0020.0002][.E71B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8D9
+2F8DA ; [.FB40.0020.0002][.E721.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8DA
+2F4A ; [.FB40.0020.0004][.E728.0000.0000] # KANGXI RADICAL TREE
+322D ; [*0334.0020.0004][.FB40.0020.0004][.E728.0000.0000][*0335.0020.0004] # PARENTHESIZED IDEOGRAPH WOOD
+328D ; [.FB40.0020.0006][.E728.0000.0000] # CIRCLED IDEOGRAPH WOOD
+1F240 ; [*039E.0020.0004][.FB40.0020.0004][.E72C.0000.0000][*039F.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C
+F9E1 ; [.FB40.0020.0002][.E74E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9E1
+2F8DC ; [.FB40.0020.0002][.E753.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8DC
+FA94 ; [.FB40.0020.0002][.E756.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA94
+2F8DB ; [.FB40.0020.0002][.E75E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8DB
+F9C8 ; [.FB40.0020.0002][.E77B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9C8
+2F8E0 ; [.FB40.0020.0002][.E785.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8E0
+F9F4 ; [.FB40.0020.0002][.E797.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9F4
+F9C9 ; [.FB40.0020.0002][.E7F3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9C9
+2F8DF ; [.FB40.0020.0002][.E7FA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8DF
+F9DA ; [.FB40.0020.0002][.E817.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9DA
+2F8E5 ; [.FB40.0020.0002][.E81F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8E5
+3231 ; [*0334.0020.0004][.FB40.0020.0004][.E82A.0000.0000][*0335.0020.0004] # PARENTHESIZED IDEOGRAPH STOCK
+3291 ; [.FB40.0020.0006][.E82A.0000.0000] # CIRCLED IDEOGRAPH STOCK
+337F ; [.FB40.0020.001C][.E82A.0000.0000][.FB40.0020.001C][.DF0F.0000.0000][.FB40.0020.001C][.CF1A.0000.0000][.FB40.0020.001C][.F93E.0000.0000] # SQUARE CORPORATION
+2F8E1 ; [.FB40.0020.0002][.E852.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8E1
+F97A ; [.FB40.0020.0002][.E881.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F97A
+FA44 ; [.FB40.0020.0002][.E885.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA44
+2F8E2 ; [.FB40.0020.0002][.E885.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8E2
+2F8E4 ; [.FB40.0020.0002][.E88E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8E4
+F9E2 ; [.FB40.0020.0002][.E8A8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9E2
+2F8E6 ; [.FB40.0020.0002][.E914.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8E6
+2F8E8 ; [.FB40.0020.0002][.E942.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8E8
+2F8E9 ; [.FB40.0020.0002][.E9A3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8E9
+2F8EA ; [.FB40.0020.0002][.E9EA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8EA
+F914 ; [.FB40.0020.0002][.EA02.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F914
+F95C ; [.FB40.0020.0002][.EA02.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F95C
+F9BF ; [.FB40.0020.0002][.EA02.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9BF
+F94C ; [.FB40.0020.0002][.EA13.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F94C
+2F8EB ; [.FB40.0020.0002][.EAA8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8EB
+F931 ; [.FB40.0020.0002][.EAD3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F931
+2F8ED ; [.FB40.0020.0002][.EADB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8ED
+F91D ; [.FB40.0020.0002][.EB04.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F91D
+2F4B ; [.FB40.0020.0004][.EB20.0000.0000] # KANGXI RADICAL LACK
+2F8EF ; [.FB40.0020.0002][.EB21.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8EF
+2F8F1 ; [.FB40.0020.0002][.EB54.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8F1
+2F4C ; [.FB40.0020.0004][.EB62.0000.0000] # KANGXI RADICAL STOP
+32A3 ; [.FB40.0020.0006][.EB63.0000.0000] # CIRCLED IDEOGRAPH CORRECT
+2F8F3 ; [.FB40.0020.0002][.EB72.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8F3
+F98C ; [.FB40.0020.0002][.EB77.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F98C
+FA95 ; [.FB40.0020.0002][.EB79.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA95
+2F4D ; [.FB40.0020.0004][.EB79.0000.0000] # KANGXI RADICAL DEATH
+2E9E ; [.FB40.0020.0004][.EB7A.0000.0000][.0000.0118.0004] # CJK RADICAL DEATH
+2F8F4 ; [.FB40.0020.0002][.EB9F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8F4
+F9A5 ; [.FB40.0020.0002][.EBAE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9A5
+2F4E ; [.FB40.0020.0004][.EBB3.0000.0000] # KANGXI RADICAL WEAPON
+F970 ; [.FB40.0020.0002][.EBBA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F970
+FA96 ; [.FB40.0020.0002][.EBBA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA96
+2F8F5 ; [.FB40.0020.0002][.EBBA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8F5
+2F8F6 ; [.FB40.0020.0002][.EBBB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8F6
+2F4F ; [.FB40.0020.0004][.EBCB.0000.0000] # KANGXI RADICAL DO NOT
+2E9F ; [.FB40.0020.0004][.EBCD.0000.0000] # CJK RADICAL MOTHER
+2F50 ; [.FB40.0020.0004][.EBD4.0000.0000] # KANGXI RADICAL COMPARE
+2F51 ; [.FB40.0020.0004][.EBDB.0000.0000] # KANGXI RADICAL FUR
+2F52 ; [.FB40.0020.0004][.EC0F.0000.0000] # KANGXI RADICAL CLAN
+2EA0 ; [.FB40.0020.0004][.EC11.0000.0000] # CJK RADICAL CIVILIAN
+2F53 ; [.FB40.0020.0004][.EC14.0000.0000] # KANGXI RADICAL STEAM
+2F54 ; [.FB40.0020.0004][.EC34.0000.0000] # KANGXI RADICAL WATER
+322C ; [*0334.0020.0004][.FB40.0020.0004][.EC34.0000.0000][*0335.0020.0004] # PARENTHESIZED IDEOGRAPH WATER
+328C ; [.FB40.0020.0006][.EC34.0000.0000] # CIRCLED IDEOGRAPH WATER
+2EA1 ; [.FB40.0020.0004][.EC35.0000.0000] # CJK RADICAL WATER ONE
+2EA2 ; [.FB40.0020.0004][.EC3A.0000.0000] # CJK RADICAL WATER TWO
+2F8FA ; [.FB40.0020.0002][.EC4E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8FA
+2F8FE ; [.FB40.0020.0002][.EC67.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8FE
+F972 ; [.FB40.0020.0002][.EC88.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F972
+2F8FC ; [.FB40.0020.0002][.ECBF.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8FC
+F968 ; [.FB40.0020.0002][.ECCC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F968
+2F8FD ; [.FB40.0020.0002][.ECCD.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8FD
+F9E3 ; [.FB40.0020.0002][.ECE5.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9E3
+329F ; [.FB40.0020.0006][.ECE8.0000.0000] # CIRCLED IDEOGRAPH ATTENTION
+2F8FF ; [.FB40.0020.0002][.ED16.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8FF
+F915 ; [.FB40.0020.0002][.ED1B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F915
+FA05 ; [.FB40.0020.0002][.ED1E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA05
+2F907 ; [.FB40.0020.0002][.ED34.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F907
+2F900 ; [.FB40.0020.0002][.ED3E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F900
+F9CA ; [.FB40.0020.0002][.ED41.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9CA
+FA97 ; [.FB40.0020.0002][.ED41.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA97
+2F902 ; [.FB40.0020.0002][.ED41.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F902
+2F903 ; [.FB40.0020.0002][.ED69.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F903
+F92A ; [.FB40.0020.0002][.ED6A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F92A
+FA45 ; [.FB40.0020.0002][.ED77.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA45
+2F901 ; [.FB40.0020.0002][.ED77.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F901
+2F904 ; [.FB40.0020.0002][.ED78.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F904
+2F905 ; [.FB40.0020.0002][.ED85.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F905
+F9F5 ; [.FB40.0020.0002][.EDCB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9F5
+F94D ; [.FB40.0020.0002][.EDDA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F94D
+F9D6 ; [.FB40.0020.0002][.EDEA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9D6
+2F90E ; [.FB40.0020.0002][.EDF9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F90E
+FA46 ; [.FB40.0020.0002][.EE1A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA46
+2F908 ; [.FB40.0020.0002][.EE2F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F908
+2F909 ; [.FB40.0020.0002][.EE6E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F909
+1F235 ; [.FB40.0020.001C][.EE80.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-6E80
+F9CB ; [.FB40.0020.0002][.EE9C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9CB
+F9EC ; [.FB40.0020.0002][.EEBA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9EC
+2F90C ; [.FB40.0020.0002][.EEC7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F90C
+FA99 ; [.FB40.0020.0002][.EECB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA99
+2F90B ; [.FB40.0020.0002][.EECB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F90B
+F904 ; [.FB40.0020.0002][.EED1.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F904
+FA98 ; [.FB40.0020.0002][.EEDB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA98
+F94E ; [.FB40.0020.0002][.EF0F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F94E
+1F226 ; [.FB40.0020.001C][.EF14.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-6F14
+FA47 ; [.FB40.0020.0002][.EF22.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA47
+FA9A ; [.FB40.0020.0002][.EF22.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA9A
+F992 ; [.FB40.0020.0002][.EF23.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F992
+2F90F ; [.FB40.0020.0002][.EF6E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F90F
+2F912 ; [.FB40.0020.0002][.EFC6.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F912
+F922 ; [.FB40.0020.0002][.EFEB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F922
+F984 ; [.FB40.0020.0002][.EFFE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F984
+2F915 ; [.FB40.0020.0002][.F01B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F915
+FA9B ; [.FB40.0020.0002][.F01E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA9B
+2F914 ; [.FB40.0020.0002][.F01E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F914
+2F913 ; [.FB40.0020.0002][.F039.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F913
+2F917 ; [.FB40.0020.0002][.F04A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F917
+2F55 ; [.FB40.0020.0004][.F06B.0000.0000] # KANGXI RADICAL FIRE
+322B ; [*0334.0020.0004][.FB40.0020.0004][.F06B.0000.0000][*0335.0020.0004] # PARENTHESIZED IDEOGRAPH FIRE
+328B ; [.FB40.0020.0006][.F06B.0000.0000] # CIRCLED IDEOGRAPH FIRE
+2EA3 ; [.FB40.0020.0004][.F06C.0000.0000] # CJK RADICAL FIRE
+2F835 ; [.FB40.0020.0002][.F070.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F835
+2F919 ; [.FB40.0020.0002][.F077.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F919
+2F918 ; [.FB40.0020.0002][.F07D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F918
+F9FB ; [.FB40.0020.0002][.F099.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9FB
+2F91A ; [.FB40.0020.0002][.F0AD.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F91A
+1F244 ; [*039E.0020.0004][.FB40.0020.0004][.F0B9.0000.0000][*039F.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-70B9
+F99F ; [.FB40.0020.0002][.F0C8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F99F
+F916 ; [.FB40.0020.0002][.F0D9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F916
+1F21A ; [.FB40.0020.001C][.F121.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-7121
+2F91C ; [.FB40.0020.0002][.F145.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F91C
+F993 ; [.FB40.0020.0002][.F149.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F993
+FA48 ; [.FB40.0020.0002][.F16E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA48
+FA9C ; [.FB40.0020.0002][.F16E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA9C
+2F91E ; [.FB40.0020.0002][.F19C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F91E
+F9C0 ; [.FB40.0020.0002][.F1CE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9C0
+F9EE ; [.FB40.0020.0002][.F1D0.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9EE
+F932 ; [.FB40.0020.0002][.F210.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F932
+F91E ; [.FB40.0020.0002][.F21B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F91E
+2F920 ; [.FB40.0020.0002][.F228.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F920
+2F56 ; [.FB40.0020.0004][.F22A.0000.0000] # KANGXI RADICAL CLAW
+FA49 ; [.FB40.0020.0002][.F22B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA49
+2EA4 ; [.FB40.0020.0004][.F22B.0000.0000] # CJK RADICAL PAW ONE
+2EA5 ; [.FB40.0020.0004][.F22B.0000.0000][.0000.0118.0004] # CJK RADICAL PAW TWO
+FA9E ; [.FB40.0020.0002][.F235.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA9E
+2F921 ; [.FB40.0020.0002][.F235.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F921
+2F57 ; [.FB40.0020.0004][.F236.0000.0000] # KANGXI RADICAL FATHER
+2F58 ; [.FB40.0020.0004][.F23B.0000.0000] # KANGXI RADICAL DOUBLE X
+2F59 ; [.FB40.0020.0004][.F23F.0000.0000] # KANGXI RADICAL HALF TREE TRUNK
+2F5A ; [.FB40.0020.0004][.F247.0000.0000] # KANGXI RADICAL SLICE
+2F922 ; [.FB40.0020.0002][.F250.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F922
+2F5B ; [.FB40.0020.0004][.F259.0000.0000] # KANGXI RADICAL FANG
+2F5C ; [.FB40.0020.0004][.F25B.0000.0000] # KANGXI RADICAL COW
+2EA7 ; [.FB40.0020.0004][.F25B.0000.0000][.0000.0118.0004] # CJK RADICAL COW
+F946 ; [.FB40.0020.0002][.F262.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F946
+3235 ; [*0334.0020.0004][.FB40.0020.0004][.F279.0000.0000][*0335.0020.0004] # PARENTHESIZED IDEOGRAPH SPECIAL
+3295 ; [.FB40.0020.0006][.F279.0000.0000] # CIRCLED IDEOGRAPH SPECIAL
+2F924 ; [.FB40.0020.0002][.F280.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F924
+2F925 ; [.FB40.0020.0002][.F295.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F925
+2F5D ; [.FB40.0020.0004][.F2AC.0000.0000] # KANGXI RADICAL DOG
+2EA8 ; [.FB40.0020.0004][.F2AD.0000.0000] # CJK RADICAL DOG
+FA9F ; [.FB40.0020.0002][.F2AF.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA9F
+F9FA ; [.FB40.0020.0002][.F2C0.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9FA
+F92B ; [.FB40.0020.0002][.F2FC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F92B
+FA16 ; [.FB40.0020.0002][.F32A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA16
+FAA0 ; [.FB40.0020.0002][.F32A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAA0
+F9A7 ; [.FB40.0020.0002][.F375.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9A7
+2F928 ; [.FB40.0020.0002][.F37A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F928
+2F5E ; [.FB40.0020.0004][.F384.0000.0000] # KANGXI RADICAL PROFOUND
+F961 ; [.FB40.0020.0002][.F387.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F961
+F9DB ; [.FB40.0020.0002][.F387.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9DB
+2F5F ; [.FB40.0020.0004][.F389.0000.0000] # KANGXI RADICAL JADE
+2F929 ; [.FB40.0020.0002][.F38B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F929
+2EA9 ; [.FB40.0020.0004][.F38B.0000.0000][.0000.0118.0004] # CJK RADICAL JADE
+2F92B ; [.FB40.0020.0002][.F3A5.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F92B
+F9AD ; [.FB40.0020.0002][.F3B2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9AD
+F917 ; [.FB40.0020.0002][.F3DE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F917
+F9E4 ; [.FB40.0020.0002][.F406.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9E4
+F9CC ; [.FB40.0020.0002][.F409.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9CC
+FA4A ; [.FB40.0020.0002][.F422.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA4A
+2F92E ; [.FB40.0020.0002][.F447.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F92E
+2F92F ; [.FB40.0020.0002][.F45C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F92F
+F9AE ; [.FB40.0020.0002][.F469.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9AE
+FAA1 ; [.FB40.0020.0002][.F471.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAA1
+2F930 ; [.FB40.0020.0002][.F471.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F930
+2F931 ; [.FB40.0020.0002][.F485.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F931
+F994 ; [.FB40.0020.0002][.F489.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F994
+F9EF ; [.FB40.0020.0002][.F498.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9EF
+2F932 ; [.FB40.0020.0002][.F4CA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F932
+2F60 ; [.FB40.0020.0004][.F4DC.0000.0000] # KANGXI RADICAL MELON
+2F61 ; [.FB40.0020.0004][.F4E6.0000.0000] # KANGXI RADICAL TILE
+FAA2 ; [.FB40.0020.0002][.F506.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAA2
+2F62 ; [.FB40.0020.0004][.F518.0000.0000] # KANGXI RADICAL SWEET
+2F63 ; [.FB40.0020.0004][.F51F.0000.0000] # KANGXI RADICAL LIFE
+1F222 ; [.FB40.0020.001C][.F51F.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-751F
+2F934 ; [.FB40.0020.0002][.F524.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F934
+2F64 ; [.FB40.0020.0004][.F528.0000.0000] # KANGXI RADICAL USE
+2F65 ; [.FB40.0020.0004][.F530.0000.0000] # KANGXI RADICAL FIELD
+3199 ; [.FB40.0020.0014][.F532.0000.0000] # IDEOGRAPHIC ANNOTATION FIRST MARK
+1F238 ; [.FB40.0020.001C][.F533.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-7533
+329A ; [.FB40.0020.0006][.F537.0000.0000] # CIRCLED IDEOGRAPH MALE
+FAA3 ; [.FB40.0020.0002][.F53B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAA3
+2F936 ; [.FB40.0020.0002][.F53E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F936
+F9CD ; [.FB40.0020.0002][.F559.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9CD
+F976 ; [.FB40.0020.0002][.F565.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F976
+F962 ; [.FB40.0020.0002][.F570.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F962
+2F938 ; [.FB40.0020.0002][.F570.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F938
+2F66 ; [.FB40.0020.0004][.F58B.0000.0000] # KANGXI RADICAL BOLT OF CLOTH
+2EAA ; [.FB40.0020.0004][.F58B.0000.0000][.0000.0118.0004] # CJK RADICAL BOLT OF CLOTH
+2F67 ; [.FB40.0020.0004][.F592.0000.0000] # KANGXI RADICAL SICKNESS
+F9E5 ; [.FB40.0020.0002][.F5E2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9E5
+2F93A ; [.FB40.0020.0002][.F610.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F93A
+FAA4 ; [.FB40.0020.0002][.F61D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAA4
+FAA5 ; [.FB40.0020.0002][.F61F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAA5
+F9C1 ; [.FB40.0020.0002][.F642.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9C1
+F90E ; [.FB40.0020.0002][.F669.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F90E
+2F68 ; [.FB40.0020.0004][.F676.0000.0000] # KANGXI RADICAL DOTTED TENT
+2F69 ; [.FB40.0020.0004][.F67D.0000.0000] # KANGXI RADICAL WHITE
+2F6A ; [.FB40.0020.0004][.F6AE.0000.0000] # KANGXI RADICAL SKIN
+2F6B ; [.FB40.0020.0004][.F6BF.0000.0000] # KANGXI RADICAL DISH
+FA17 ; [.FB40.0020.0002][.F6CA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA17
+FAA6 ; [.FB40.0020.0002][.F6CA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAA6
+1F246 ; [*039E.0020.0004][.FB40.0020.0004][.F6D7.0000.0000][*039F.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-76D7
+FAA7 ; [.FB40.0020.0002][.F6DB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAA7
+323C ; [*0334.0020.0004][.FB40.0020.0004][.F6E3.0000.0000][*0335.0020.0004] # PARENTHESIZED IDEOGRAPH SUPERVISE
+32AC ; [.FB40.0020.0006][.F6E3.0000.0000] # CIRCLED IDEOGRAPH SUPERVISE
+F933 ; [.FB40.0020.0002][.F6E7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F933
+2F6C ; [.FB40.0020.0004][.F6EE.0000.0000] # KANGXI RADICAL EYE
+2EAB ; [.FB40.0020.0004][.F6EE.0000.0000][.0000.0118.0004] # CJK RADICAL EYE
+FAA8 ; [.FB40.0020.0002][.F6F4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAA8
+2F940 ; [.FB40.0020.0002][.F6F4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F940
+F96D ; [.FB40.0020.0002][.F701.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F96D
+2F945 ; [.FB40.0020.0002][.F71E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F945
+2F946 ; [.FB40.0020.0002][.F71F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F946
+2F947 ; [.FB40.0020.0002][.F71F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F947
+FAAA ; [.FB40.0020.0002][.F740.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAAA
+FAA9 ; [.FB40.0020.0002][.F74A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAA9
+2F948 ; [.FB40.0020.0002][.F74A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F948
+2F94A ; [.FB40.0020.0002][.F78B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F94A
+FA9D ; [.FB40.0020.0002][.F7A7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA9D
+2F6D ; [.FB40.0020.0004][.F7DB.0000.0000] # KANGXI RADICAL SPEAR
+2F6E ; [.FB40.0020.0004][.F7E2.0000.0000] # KANGXI RADICAL ARROW
+2F6F ; [.FB40.0020.0004][.F7F3.0000.0000] # KANGXI RADICAL STONE
+2F94E ; [.FB40.0020.0002][.F84E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F94E
+F9CE ; [.FB40.0020.0002][.F86B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9CE
+F93B ; [.FB40.0020.0002][.F88C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F93B
+2F94F ; [.FB40.0020.0002][.F88C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F94F
+FA4B ; [.FB40.0020.0002][.F891.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA4B
+F947 ; [.FB40.0020.0002][.F8CA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F947
+FAAB ; [.FB40.0020.0002][.F8CC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAAB
+2F950 ; [.FB40.0020.0002][.F8CC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F950
+F964 ; [.FB40.0020.0002][.F8FB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F964
+F985 ; [.FB40.0020.0002][.F92A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F985
+2F70 ; [.FB40.0020.0004][.F93A.0000.0000] # KANGXI RADICAL SPIRIT
+2EAC ; [.FB40.0020.0004][.F93A.0000.0000][.0000.0118.0004] # CJK RADICAL SPIRIT ONE
+2EAD ; [.FB40.0020.0004][.F93B.0000.0000] # CJK RADICAL SPIRIT TWO
+FA18 ; [.FB40.0020.0002][.F93C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA18
+FA4C ; [.FB40.0020.0002][.F93E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA4C
+3233 ; [*0334.0020.0004][.FB40.0020.0004][.F93E.0000.0000][*0335.0020.0004] # PARENTHESIZED IDEOGRAPH SOCIETY
+3293 ; [.FB40.0020.0006][.F93E.0000.0000] # CIRCLED IDEOGRAPH SOCIETY
+FA4E ; [.FB40.0020.0002][.F948.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA4E
+FA4D ; [.FB40.0020.0002][.F949.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA4D
+FA4F ; [.FB40.0020.0002][.F950.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA4F
+FA50 ; [.FB40.0020.0002][.F956.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA50
+2F953 ; [.FB40.0020.0002][.F956.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F953
+FA51 ; [.FB40.0020.0002][.F95D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA51
+3237 ; [*0334.0020.0004][.FB40.0020.0004][.F95D.0000.0000][*0335.0020.0004] # PARENTHESIZED IDEOGRAPH CONGRATULATION
+3297 ; [.FB40.0020.0006][.F95D.0000.0000] # CIRCLED IDEOGRAPH CONGRATULATION
+FA19 ; [.FB40.0020.0002][.F95E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA19
+FA1A ; [.FB40.0020.0002][.F965.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA1A
+3240 ; [*0334.0020.0004][.FB40.0020.0004][.F96D.0000.0000][*0335.0020.0004] # PARENTHESIZED IDEOGRAPH FESTIVAL
+F93C ; [.FB40.0020.0002][.F97F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F93C
+1F232 ; [.FB40.0020.001C][.F981.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-7981
+FA52 ; [.FB40.0020.0002][.F98D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA52
+FA53 ; [.FB40.0020.0002][.F98E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA53
+FA1B ; [.FB40.0020.0002][.F98F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA1B
+2F956 ; [.FB40.0020.0002][.F98F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F956
+F9B6 ; [.FB40.0020.0002][.F9AE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9B6
+2F71 ; [.FB40.0020.0004][.F9B8.0000.0000] # KANGXI RADICAL TRACK
+2F72 ; [.FB40.0020.0004][.F9BE.0000.0000] # KANGXI RADICAL GRAIN
+F995 ; [.FB40.0020.0002][.F9CA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F995
+3299 ; [.FB40.0020.0006][.F9D8.0000.0000] # CIRCLED IDEOGRAPH SECRET
+2F957 ; [.FB40.0020.0002][.F9EB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F957
+F956 ; [.FB40.0020.0002][.FA1C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F956
+FA54 ; [.FB40.0020.0002][.FA40.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA54
+2F959 ; [.FB40.0020.0002][.FA40.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F959
+2F95A ; [.FB40.0020.0002][.FA4A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F95A
+2F95B ; [.FB40.0020.0002][.FA4F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F95B
+2F73 ; [.FB40.0020.0004][.FA74.0000.0000] # KANGXI RADICAL CAVE
+1F233 ; [.FB40.0020.001C][.FA7A.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-7A7A
+FA55 ; [.FB40.0020.0002][.FA81.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA55
+FAAC ; [.FB40.0020.0002][.FAB1.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAAC
+F9F7 ; [.FB40.0020.0002][.FACB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9F7
+2F74 ; [.FB40.0020.0004][.FACB.0000.0000] # KANGXI RADICAL STAND
+2F95F ; [.FB40.0020.0002][.FAEE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F95F
+2F75 ; [.FB40.0020.0004][.FAF9.0000.0000] # KANGXI RADICAL BAMBOO
+2EAE ; [.FB40.0020.0004][.FAF9.0000.0000][.0000.0118.0004] # CJK RADICAL BAMBOO
+F9F8 ; [.FB40.0020.0002][.FB20.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9F8
+3247 ; [.FB40.0020.0006][.FB8F.0000.0000] # CIRCLED IDEOGRAPH KOTO
+FA56 ; [.FB40.0020.0002][.FBC0.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA56
+FAAD ; [.FB40.0020.0002][.FBC0.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAAD
+2F962 ; [.FB40.0020.0002][.FBC6.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F962
+2F963 ; [.FB40.0020.0002][.FBC9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F963
+F9A6 ; [.FB40.0020.0002][.FC3E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9A6
+F944 ; [.FB40.0020.0002][.FC60.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F944
+2F76 ; [.FB40.0020.0004][.FC73.0000.0000] # KANGXI RADICAL RICE
+FAAE ; [.FB40.0020.0002][.FC7B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAAE
+F9F9 ; [.FB40.0020.0002][.FC92.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9F9
+FA1D ; [.FB40.0020.0002][.FCBE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA1D
+2F966 ; [.FB40.0020.0002][.FCD2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F966
+FA03 ; [.FB40.0020.0002][.FCD6.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA03
+2F969 ; [.FB40.0020.0002][.FCE3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F969
+F97B ; [.FB40.0020.0002][.FCE7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F97B
+2F968 ; [.FB40.0020.0002][.FCE8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F968
+2F77 ; [.FB40.0020.0004][.FCF8.0000.0000] # KANGXI RADICAL SILK
+2EAF ; [.FB40.0020.0004][.FCF9.0000.0000] # CJK RADICAL SILK
+2F96A ; [.FB40.0020.0002][.FD00.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F96A
+F9CF ; [.FB40.0020.0002][.FD10.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9CF
+F96A ; [.FB40.0020.0002][.FD22.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F96A
+F94F ; [.FB40.0020.0002][.FD2F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F94F
+1F221 ; [.FB40.0020.001C][.FD42.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-7D42
+FAAF ; [.FB40.0020.0002][.FD5B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAAF
+2F96C ; [.FB40.0020.0002][.FD63.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F96C
+F93D ; [.FB40.0020.0002][.FDA0.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F93D
+F957 ; [.FB40.0020.0002][.FDBE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F957
+2F96E ; [.FB40.0020.0002][.FDC7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F96E
+F996 ; [.FB40.0020.0002][.FDF4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F996
+FA57 ; [.FB40.0020.0002][.FDF4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA57
+FAB0 ; [.FB40.0020.0002][.FDF4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAB0
+2F96F ; [.FB40.0020.0002][.FE02.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F96F
+FA58 ; [.FB40.0020.0002][.FE09.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA58
+F950 ; [.FB40.0020.0002][.FE37.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F950
+FA59 ; [.FB40.0020.0002][.FE41.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA59
+2F970 ; [.FB40.0020.0002][.FE45.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F970
+2EB0 ; [.FB40.0020.0004][.FE9F.0000.0000] # CJK RADICAL C-SIMPLIFIED SILK
+2F78 ; [.FB40.0020.0004][.FF36.0000.0000] # KANGXI RADICAL JAR
+FAB1 ; [.FB40.0020.0002][.FF3E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAB1
+2F79 ; [.FB40.0020.0004][.FF51.0000.0000] # KANGXI RADICAL NET
+2EB2 ; [.FB40.0020.0004][.FF52.0000.0000] # CJK RADICAL NET TWO
+2EB5 ; [.FB40.0020.0004][.FF52.0000.0000][.0000.0118.0004] # CJK RADICAL MESH
+2EB1 ; [.FB40.0020.0004][.FF53.0000.0000] # CJK RADICAL NET ONE
+2EB3 ; [.FB40.0020.0004][.FF53.0000.0000][.0000.0118.0004] # CJK RADICAL NET THREE
+2EB4 ; [.FB40.0020.0004][.FF53.0000.0000][.0000.0119.0004] # CJK RADICAL NET FOUR
+FA5A ; [.FB40.0020.0002][.FF72.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA5A
+F9E6 ; [.FB40.0020.0002][.FF79.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9E6
+2F976 ; [.FB40.0020.0002][.FF7A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F976
+F90F ; [.FB40.0020.0002][.FF85.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F90F
+2F7A ; [.FB40.0020.0004][.FF8A.0000.0000] # KANGXI RADICAL SHEEP
+2EB6 ; [.FB40.0020.0004][.FF8A.0000.0000][.0000.0118.0004] # CJK RADICAL SHEEP
+2EB7 ; [.FB40.0020.0004][.FF8A.0000.0000][.0000.0119.0004] # CJK RADICAL RAM
+2EB8 ; [.FB40.0020.0004][.FF8B.0000.0000] # CJK RADICAL EWE
+2F978 ; [.FB40.0020.0002][.FF95.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F978
+F9AF ; [.FB40.0020.0002][.FF9A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9AF
+FA1E ; [.FB40.0020.0002][.FFBD.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA1E
+2F7B ; [.FB40.0020.0004][.FFBD.0000.0000] # KANGXI RADICAL FEATHER
+2F979 ; [.FB40.0020.0002][.FFFA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F979
+F934 ; [.FB41.0020.0002][.8001.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F934
+2F7C ; [.FB41.0020.0004][.8001.0000.0000] # KANGXI RADICAL OLD
+2EB9 ; [.FB41.0020.0004][.8002.0000.0000] # CJK RADICAL OLD
+FA5B ; [.FB41.0020.0002][.8005.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA5B
+FAB2 ; [.FB41.0020.0002][.8005.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAB2
+2F97A ; [.FB41.0020.0002][.8005.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F97A
+2F7D ; [.FB41.0020.0004][.800C.0000.0000] # KANGXI RADICAL AND
+2F7E ; [.FB41.0020.0004][.8012.0000.0000] # KANGXI RADICAL PLOW
+2F7F ; [.FB41.0020.0004][.8033.0000.0000] # KANGXI RADICAL EAR
+F9B0 ; [.FB41.0020.0002][.8046.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9B0
+2F97D ; [.FB41.0020.0002][.8060.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F97D
+F997 ; [.FB41.0020.0002][.806F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F997
+2F97F ; [.FB41.0020.0002][.8070.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F97F
+F945 ; [.FB41.0020.0002][.807E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F945
+2F80 ; [.FB41.0020.0004][.807F.0000.0000] # KANGXI RADICAL BRUSH
+2EBB ; [.FB41.0020.0004][.807F.0000.0000][.0000.0118.0004] # CJK RADICAL BRUSH TWO
+2EBA ; [.FB41.0020.0004][.8080.0000.0000] # CJK RADICAL BRUSH ONE
+2F81 ; [.FB41.0020.0004][.8089.0000.0000] # KANGXI RADICAL MEAT
+2EBC ; [.FB41.0020.0004][.8089.0000.0000][.0000.0118.0004] # CJK RADICAL MEAT
+F953 ; [.FB41.0020.0002][.808B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F953
+2F8D6 ; [.FB41.0020.0002][.80AD.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8D6
+2F982 ; [.FB41.0020.0002][.80B2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F982
+2F983 ; [.FB41.0020.0002][.8103.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F983
+2F985 ; [.FB41.0020.0002][.813E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F985
+F926 ; [.FB41.0020.0002][.81D8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F926
+2F82 ; [.FB41.0020.0004][.81E3.0000.0000] # KANGXI RADICAL MINISTER
+F9F6 ; [.FB41.0020.0002][.81E8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9F6
+2F83 ; [.FB41.0020.0004][.81EA.0000.0000] # KANGXI RADICAL SELF
+3242 ; [*0334.0020.0004][.FB41.0020.0004][.81EA.0000.0000][*0335.0020.0004] # PARENTHESIZED IDEOGRAPH SELF
+FA5C ; [.FB41.0020.0002][.81ED.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA5C
+2F84 ; [.FB41.0020.0004][.81F3.0000.0000] # KANGXI RADICAL ARRIVE
+3243 ; [*0334.0020.0004][.FB41.0020.0004][.81F3.0000.0000][*0335.0020.0004] # PARENTHESIZED IDEOGRAPH REACH
+2F85 ; [.FB41.0020.0004][.81FC.0000.0000] # KANGXI RADICAL MORTAR
+2EBD ; [.FB41.0020.0004][.81FC.0000.0000][.0000.0118.0004] # CJK RADICAL MORTAR
+2F893 ; [.FB41.0020.0002][.8201.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F893
+2F98B ; [.FB41.0020.0002][.8201.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F98B
+2F98C ; [.FB41.0020.0002][.8204.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F98C
+2F86 ; [.FB41.0020.0004][.820C.0000.0000] # KANGXI RADICAL TONGUE
+FA6D ; [.FB41.0020.0002][.8218.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA6D
+2F87 ; [.FB41.0020.0004][.821B.0000.0000] # KANGXI RADICAL OPPOSE
+2F88 ; [.FB41.0020.0004][.821F.0000.0000] # KANGXI RADICAL BOAT
+2F89 ; [.FB41.0020.0004][.826E.0000.0000] # KANGXI RADICAL STOPPING
+F97C ; [.FB41.0020.0002][.826F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F97C
+2F8A ; [.FB41.0020.0004][.8272.0000.0000] # KANGXI RADICAL COLOR
+2F8B ; [.FB41.0020.0004][.8278.0000.0000] # KANGXI RADICAL GRASS
+FA5D ; [.FB41.0020.0002][.8279.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA5D
+FA5E ; [.FB41.0020.0002][.8279.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA5E
+2EBE ; [.FB41.0020.0004][.8279.0000.0000] # CJK RADICAL GRASS ONE
+2EBF ; [.FB41.0020.0004][.8279.0000.0000][.0000.0118.0004] # CJK RADICAL GRASS TWO
+2EC0 ; [.FB41.0020.0004][.8279.0000.0000][.0000.0119.0004] # CJK RADICAL GRASS THREE
+2F990 ; [.FB41.0020.0002][.828B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F990
+2F98F ; [.FB41.0020.0002][.8291.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F98F
+2F991 ; [.FB41.0020.0002][.829D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F991
+2F993 ; [.FB41.0020.0002][.82B1.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F993
+2F994 ; [.FB41.0020.0002][.82B3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F994
+2F995 ; [.FB41.0020.0002][.82BD.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F995
+F974 ; [.FB41.0020.0002][.82E5.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F974
+2F998 ; [.FB41.0020.0002][.82E5.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F998
+2F996 ; [.FB41.0020.0002][.82E6.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F996
+2F999 ; [.FB41.0020.0002][.831D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F999
+2F99C ; [.FB41.0020.0002][.8323.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F99C
+F9FE ; [.FB41.0020.0002][.8336.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9FE
+FAB3 ; [.FB41.0020.0002][.8352.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAB3
+2F9A0 ; [.FB41.0020.0002][.8353.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9A0
+2F99A ; [.FB41.0020.0002][.8363.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F99A
+2F99B ; [.FB41.0020.0002][.83AD.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F99B
+2F99D ; [.FB41.0020.0002][.83BD.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F99D
+F93E ; [.FB41.0020.0002][.83C9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F93E
+2F9A1 ; [.FB41.0020.0002][.83CA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9A1
+2F9A2 ; [.FB41.0020.0002][.83CC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9A2
+2F9A3 ; [.FB41.0020.0002][.83DC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9A3
+2F99E ; [.FB41.0020.0002][.83E7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F99E
+FAB4 ; [.FB41.0020.0002][.83EF.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAB4
+F958 ; [.FB41.0020.0002][.83F1.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F958
+F918 ; [.FB41.0020.0002][.843D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F918
+F96E ; [.FB41.0020.0002][.8449.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F96E
+FA5F ; [.FB41.0020.0002][.8457.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA5F
+2F99F ; [.FB41.0020.0002][.8457.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F99F
+F999 ; [.FB41.0020.0002][.84EE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F999
+2F9A8 ; [.FB41.0020.0002][.84F1.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9A8
+2F9A9 ; [.FB41.0020.0002][.84F3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9A9
+F9C2 ; [.FB41.0020.0002][.84FC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9C2
+2F9AA ; [.FB41.0020.0002][.8516.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9AA
+2F9AC ; [.FB41.0020.0002][.8564.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9AC
+F923 ; [.FB41.0020.0002][.85CD.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F923
+F9F0 ; [.FB41.0020.0002][.85FA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9F0
+F935 ; [.FB41.0020.0002][.8606.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F935
+FA20 ; [.FB41.0020.0002][.8612.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA20
+F91F ; [.FB41.0020.0002][.862D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F91F
+F910 ; [.FB41.0020.0002][.863F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F910
+2F8C ; [.FB41.0020.0004][.864D.0000.0000] # KANGXI RADICAL TIGER
+2EC1 ; [.FB41.0020.0004][.864E.0000.0000] # CJK RADICAL TIGER
+2F9B3 ; [.FB41.0020.0002][.8650.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9B3
+F936 ; [.FB41.0020.0002][.865C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F936
+2F9B4 ; [.FB41.0020.0002][.865C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9B4
+2F9B5 ; [.FB41.0020.0002][.8667.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9B5
+2F9B6 ; [.FB41.0020.0002][.8669.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9B6
+2F8D ; [.FB41.0020.0004][.866B.0000.0000] # KANGXI RADICAL INSECT
+2F9B8 ; [.FB41.0020.0002][.8688.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9B8
+2F9B7 ; [.FB41.0020.0002][.86A9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9B7
+2F9BA ; [.FB41.0020.0002][.86E2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9BA
+2F9B9 ; [.FB41.0020.0002][.870E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9B9
+2F9BC ; [.FB41.0020.0002][.8728.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9BC
+2F9BD ; [.FB41.0020.0002][.876B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9BD
+FAB5 ; [.FB41.0020.0002][.8779.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAB5
+2F9BB ; [.FB41.0020.0002][.8779.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9BB
+2F9BE ; [.FB41.0020.0002][.8786.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9BE
+F911 ; [.FB41.0020.0002][.87BA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F911
+2F9C0 ; [.FB41.0020.0002][.87E1.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9C0
+2F9C1 ; [.FB41.0020.0002][.8801.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9C1
+F927 ; [.FB41.0020.0002][.881F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F927
+2F8E ; [.FB41.0020.0004][.8840.0000.0000] # KANGXI RADICAL BLOOD
+FA08 ; [.FB41.0020.0002][.884C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA08
+2F8F ; [.FB41.0020.0004][.884C.0000.0000] # KANGXI RADICAL WALK ENCLOSURE
+2F9C3 ; [.FB41.0020.0002][.8860.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9C3
+2F9C4 ; [.FB41.0020.0002][.8863.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9C4
+2F90 ; [.FB41.0020.0004][.8863.0000.0000] # KANGXI RADICAL CLOTHES
+2EC2 ; [.FB41.0020.0004][.8864.0000.0000] # CJK RADICAL CLOTHES
+F9A0 ; [.FB41.0020.0002][.88C2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9A0
+F9E7 ; [.FB41.0020.0002][.88CF.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9E7
+2F9C6 ; [.FB41.0020.0002][.88D7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9C6
+2F9C7 ; [.FB41.0020.0002][.88DE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9C7
+F9E8 ; [.FB41.0020.0002][.88E1.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9E8
+F912 ; [.FB41.0020.0002][.88F8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F912
+2F9C9 ; [.FB41.0020.0002][.88FA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9C9
+FA60 ; [.FB41.0020.0002][.8910.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA60
+FAB6 ; [.FB41.0020.0002][.8941.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAB6
+F924 ; [.FB41.0020.0002][.8964.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F924
+2F91 ; [.FB41.0020.0004][.897E.0000.0000] # KANGXI RADICAL WEST
+2EC4 ; [.FB41.0020.0004][.897F.0000.0000] # CJK RADICAL WEST TWO
+2EC3 ; [.FB41.0020.0004][.8980.0000.0000] # CJK RADICAL WEST ONE
+FAB7 ; [.FB41.0020.0002][.8986.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAB7
+FA0A ; [.FB41.0020.0002][.898B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA0A
+2F92 ; [.FB41.0020.0004][.898B.0000.0000] # KANGXI RADICAL SEE
+FA61 ; [.FB41.0020.0002][.8996.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA61
+FAB8 ; [.FB41.0020.0002][.8996.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAB8
+2EC5 ; [.FB41.0020.0004][.89C1.0000.0000] # CJK RADICAL C-SIMPLIFIED SEE
+2EC6 ; [.FB41.0020.0004][.89D2.0000.0000] # CJK RADICAL SIMPLIFIED HORN
+2F93 ; [.FB41.0020.0004][.89D2.0000.0000] # KANGXI RADICAL HORN
+2EC7 ; [.FB41.0020.0004][.89D2.0000.0000][.0000.0118.0004] # CJK RADICAL HORN
+1F216 ; [.FB41.0020.001C][.89E3.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-89E3
+2F94 ; [.FB41.0020.0004][.8A00.0000.0000] # KANGXI RADICAL SPEECH
+2F9CF ; [.FB41.0020.0002][.8AA0.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9CF
+F96F ; [.FB41.0020.0002][.8AAA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F96F
+F9A1 ; [.FB41.0020.0002][.8AAA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9A1
+FAB9 ; [.FB41.0020.0002][.8ABF.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAB9
+FABB ; [.FB41.0020.0002][.8ACB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FABB
+F97D ; [.FB41.0020.0002][.8AD2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F97D
+F941 ; [.FB41.0020.0002][.8AD6.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F941
+FABE ; [.FB41.0020.0002][.8AED.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FABE
+2F9D0 ; [.FB41.0020.0002][.8AED.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9D0
+FA22 ; [.FB41.0020.0002][.8AF8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA22
+FABA ; [.FB41.0020.0002][.8AF8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FABA
+F95D ; [.FB41.0020.0002][.8AFE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F95D
+FABD ; [.FB41.0020.0002][.8AFE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FABD
+FA62 ; [.FB41.0020.0002][.8B01.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA62
+FABC ; [.FB41.0020.0002][.8B01.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FABC
+FA63 ; [.FB41.0020.0002][.8B39.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA63
+FABF ; [.FB41.0020.0002][.8B39.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FABF
+F9FC ; [.FB41.0020.0002][.8B58.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9FC
+F95A ; [.FB41.0020.0002][.8B80.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F95A
+FAC0 ; [.FB41.0020.0002][.8B8A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAC0
+2F9D1 ; [.FB41.0020.0002][.8B8A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9D1
+2EC8 ; [.FB41.0020.0004][.8BA0.0000.0000] # CJK RADICAL C-SIMPLIFIED SPEECH
+2F95 ; [.FB41.0020.0004][.8C37.0000.0000] # KANGXI RADICAL VALLEY
+2F96 ; [.FB41.0020.0004][.8C46.0000.0000] # KANGXI RADICAL BEAN
+F900 ; [.FB41.0020.0002][.8C48.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F900
+2F9D2 ; [.FB41.0020.0002][.8C55.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9D2
+2F97 ; [.FB41.0020.0004][.8C55.0000.0000] # KANGXI RADICAL PIG
+2F98 ; [.FB41.0020.0004][.8C78.0000.0000] # KANGXI RADICAL BADGER
+2F99 ; [.FB41.0020.0004][.8C9D.0000.0000] # KANGXI RADICAL SHELL
+3236 ; [*0334.0020.0004][.FB41.0020.0004][.8CA1.0000.0000][*0335.0020.0004] # PARENTHESIZED IDEOGRAPH FINANCIAL
+3296 ; [.FB41.0020.0006][.8CA1.0000.0000] # CIRCLED IDEOGRAPH FINANCIAL
+1F223 ; [.FB41.0020.001C][.8CA9.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-8CA9
+2F9D4 ; [.FB41.0020.0002][.8CAB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9D4
+2F9D5 ; [.FB41.0020.0002][.8CC1.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9D5
+F948 ; [.FB41.0020.0002][.8CC2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F948
+323E ; [*0334.0020.0004][.FB41.0020.0004][.8CC7.0000.0000][*0335.0020.0004] # PARENTHESIZED IDEOGRAPH RESOURCE
+32AE ; [.FB41.0020.0006][.8CC7.0000.0000] # CIRCLED IDEOGRAPH RESOURCE
+F903 ; [.FB41.0020.0002][.8CC8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F903
+FA64 ; [.FB41.0020.0002][.8CD3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA64
+FA65 ; [.FB41.0020.0002][.8D08.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA65
+FAC1 ; [.FB41.0020.0002][.8D08.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAC1
+2F9D6 ; [.FB41.0020.0002][.8D1B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9D6
+2EC9 ; [.FB41.0020.0004][.8D1D.0000.0000] # CJK RADICAL C-SIMPLIFIED SHELL
+2F9A ; [.FB41.0020.0004][.8D64.0000.0000] # KANGXI RADICAL RED
+2F9B ; [.FB41.0020.0004][.8D70.0000.0000] # KANGXI RADICAL RUN
+1F230 ; [.FB41.0020.001C][.8D70.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-8D70
+2F9D7 ; [.FB41.0020.0002][.8D77.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9D7
+2F9C ; [.FB41.0020.0004][.8DB3.0000.0000] # KANGXI RADICAL FOOT
+2ECA ; [.FB41.0020.0004][.8DB3.0000.0000][.0000.0118.0004] # CJK RADICAL FOOT
+2F9DB ; [.FB41.0020.0002][.8DBC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9DB
+2F9DA ; [.FB41.0020.0002][.8DCB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9DA
+F937 ; [.FB41.0020.0002][.8DEF.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F937
+2F9DC ; [.FB41.0020.0002][.8DF0.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9DC
+2F9D ; [.FB41.0020.0004][.8EAB.0000.0000] # KANGXI RADICAL BODY
+F902 ; [.FB41.0020.0002][.8ECA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F902
+2F9E ; [.FB41.0020.0004][.8ECA.0000.0000] # KANGXI RADICAL CART
+2F9DE ; [.FB41.0020.0002][.8ED4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9DE
+F998 ; [.FB41.0020.0002][.8F26.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F998
+F9D7 ; [.FB41.0020.0002][.8F2A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9D7
+FAC2 ; [.FB41.0020.0002][.8F38.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAC2
+2F9DF ; [.FB41.0020.0002][.8F38.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9DF
+FA07 ; [.FB41.0020.0002][.8F3B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA07
+F98D ; [.FB41.0020.0002][.8F62.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F98D
+2ECB ; [.FB41.0020.0004][.8F66.0000.0000] # CJK RADICAL C-SIMPLIFIED CART
+2F9F ; [.FB41.0020.0004][.8F9B.0000.0000] # KANGXI RADICAL BITTER
+2F98D ; [.FB41.0020.0002][.8F9E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F98D
+F971 ; [.FB41.0020.0002][.8FB0.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F971
+2FA0 ; [.FB41.0020.0004][.8FB0.0000.0000] # KANGXI RADICAL MORNING
+2FA1 ; [.FB41.0020.0004][.8FB5.0000.0000] # KANGXI RADICAL WALK
+FA66 ; [.FB41.0020.0002][.8FB6.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA66
+2ECC ; [.FB41.0020.0004][.8FB6.0000.0000] # CJK RADICAL SIMPLIFIED WALK
+2ECD ; [.FB41.0020.0004][.8FB6.0000.0000][.0000.0118.0004] # CJK RADICAL WALK ONE
+2ECE ; [.FB41.0020.0004][.8FB6.0000.0000][.0000.0119.0004] # CJK RADICAL WALK TWO
+F99A ; [.FB41.0020.0002][.9023.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F99A
+FA25 ; [.FB41.0020.0002][.9038.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA25
+FA67 ; [.FB41.0020.0002][.9038.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA67
+1F22B ; [.FB41.0020.001C][.904A.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-904A
+329C ; [.FB41.0020.0006][.9069.0000.0000] # CIRCLED IDEOGRAPH SUITABLE
+FAC3 ; [.FB41.0020.0002][.9072.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAC3
+F9C3 ; [.FB41.0020.0002][.907C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9C3
+F913 ; [.FB41.0020.0002][.908F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F913
+2FA2 ; [.FB41.0020.0004][.9091.0000.0000] # KANGXI RADICAL CITY
+2ECF ; [.FB41.0020.0004][.9091.0000.0000][.0000.0118.0004] # CJK RADICAL CITY
+2F9E2 ; [.FB41.0020.0002][.9094.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9E2
+F92C ; [.FB41.0020.0002][.90CE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F92C
+FA2E ; [.FB41.0020.0002][.90DE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA2E
+2F9E3 ; [.FB41.0020.0002][.90F1.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9E3
+FA26 ; [.FB41.0020.0002][.90FD.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA26
+2F9E4 ; [.FB41.0020.0002][.9111.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9E4
+2F9E6 ; [.FB41.0020.0002][.911B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9E6
+2FA3 ; [.FB41.0020.0004][.9149.0000.0000] # KANGXI RADICAL WINE
+1F23B ; [.FB41.0020.001C][.914D.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-914D
+F919 ; [.FB41.0020.0002][.916A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F919
+FAC4 ; [.FB41.0020.0002][.9199.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAC4
+F9B7 ; [.FB41.0020.0002][.91B4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9B7
+2FA4 ; [.FB41.0020.0004][.91C6.0000.0000] # KANGXI RADICAL DISTINGUISH
+F9E9 ; [.FB41.0020.0002][.91CC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9E9
+2FA5 ; [.FB41.0020.0004][.91CC.0000.0000] # KANGXI RADICAL VILLAGE
+F97E ; [.FB41.0020.0002][.91CF.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F97E
+F90A ; [.FB41.0020.0002][.91D1.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F90A
+2FA6 ; [.FB41.0020.0004][.91D1.0000.0000] # KANGXI RADICAL GOLD
+322E ; [*0334.0020.0004][.FB41.0020.0004][.91D1.0000.0000][*0335.0020.0004] # PARENTHESIZED IDEOGRAPH METAL
+328E ; [.FB41.0020.0006][.91D1.0000.0000] # CIRCLED IDEOGRAPH METAL
+F9B1 ; [.FB41.0020.0002][.9234.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9B1
+2F9E7 ; [.FB41.0020.0002][.9238.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9E7
+FAC5 ; [.FB41.0020.0002][.9276.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAC5
+2F9EA ; [.FB41.0020.0002][.927C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9EA
+2F9E8 ; [.FB41.0020.0002][.92D7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9E8
+2F9E9 ; [.FB41.0020.0002][.92D8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9E9
+F93F ; [.FB41.0020.0002][.9304.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F93F
+F99B ; [.FB41.0020.0002][.934A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F99B
+2F9EB ; [.FB41.0020.0002][.93F9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9EB
+2F9EC ; [.FB41.0020.0002][.9415.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9EC
+2ED0 ; [.FB41.0020.0004][.9485.0000.0000] # CJK RADICAL C-SIMPLIFIED GOLD
+2ED1 ; [.FB41.0020.0004][.9577.0000.0000] # CJK RADICAL LONG ONE
+2FA7 ; [.FB41.0020.0004][.9577.0000.0000] # KANGXI RADICAL LONG
+2ED2 ; [.FB41.0020.0004][.9578.0000.0000] # CJK RADICAL LONG TWO
+2ED3 ; [.FB41.0020.0004][.957F.0000.0000] # CJK RADICAL C-SIMPLIFIED LONG
+2FA8 ; [.FB41.0020.0004][.9580.0000.0000] # KANGXI RADICAL GATE
+2F9EE ; [.FB41.0020.0002][.958B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9EE
+F986 ; [.FB41.0020.0002][.95AD.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F986
+2F9F0 ; [.FB41.0020.0002][.95B7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9F0
+2ED4 ; [.FB41.0020.0004][.95E8.0000.0000] # CJK RADICAL C-SIMPLIFIED GATE
+2FA9 ; [.FB41.0020.0004][.961C.0000.0000] # KANGXI RADICAL MOUND
+2ED5 ; [.FB41.0020.0004][.961C.0000.0000][.0000.0118.0004] # CJK RADICAL MOUND ONE
+2ED6 ; [.FB41.0020.0004][.961D.0000.0000] # CJK RADICAL MOUND TWO
+F9C6 ; [.FB41.0020.0002][.962E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9C6
+F951 ; [.FB41.0020.0002][.964B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F951
+FA09 ; [.FB41.0020.0002][.964D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA09
+F959 ; [.FB41.0020.0002][.9675.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F959
+F9D3 ; [.FB41.0020.0002][.9678.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9D3
+FAC6 ; [.FB41.0020.0002][.967C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAC6
+F9DC ; [.FB41.0020.0002][.9686.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9DC
+F9F1 ; [.FB41.0020.0002][.96A3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9F1
+2FAA ; [.FB41.0020.0004][.96B6.0000.0000] # KANGXI RADICAL SLAVE
+FA2F ; [.FB41.0020.0002][.96B7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA2F
+F9B8 ; [.FB41.0020.0002][.96B8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9B8
+2FAB ; [.FB41.0020.0004][.96B9.0000.0000] # KANGXI RADICAL SHORT TAILED BIRD
+2F9F3 ; [.FB41.0020.0002][.96C3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9F3
+F9EA ; [.FB41.0020.0002][.96E2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9EA
+FA68 ; [.FB41.0020.0002][.96E3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA68
+FAC7 ; [.FB41.0020.0002][.96E3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAC7
+2FAC ; [.FB41.0020.0004][.96E8.0000.0000] # KANGXI RADICAL RAIN
+2ED7 ; [.FB41.0020.0004][.96E8.0000.0000][.0000.0118.0004] # CJK RADICAL RAIN
+F9B2 ; [.FB41.0020.0002][.96F6.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9B2
+F949 ; [.FB41.0020.0002][.96F7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F949
+2F9F5 ; [.FB41.0020.0002][.9723.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9F5
+F938 ; [.FB41.0020.0002][.9732.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F938
+F9B3 ; [.FB41.0020.0002][.9748.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9B3
+2FAD ; [.FB41.0020.0004][.9751.0000.0000] # KANGXI RADICAL BLUE
+2ED8 ; [.FB41.0020.0004][.9752.0000.0000] # CJK RADICAL BLUE
+FA1C ; [.FB41.0020.0002][.9756.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA1C
+FAC8 ; [.FB41.0020.0002][.9756.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAC8
+2FAE ; [.FB41.0020.0004][.975E.0000.0000] # KANGXI RADICAL WRONG
+2FAF ; [.FB41.0020.0004][.9762.0000.0000] # KANGXI RADICAL FACE
+2FB0 ; [.FB41.0020.0004][.9769.0000.0000] # KANGXI RADICAL LEATHER
+2FB1 ; [.FB41.0020.0004][.97CB.0000.0000] # KANGXI RADICAL TANNED LEATHER
+FAC9 ; [.FB41.0020.0002][.97DB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAC9
+2F9FA ; [.FB41.0020.0002][.97E0.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9FA
+2ED9 ; [.FB41.0020.0004][.97E6.0000.0000] # CJK RADICAL C-SIMPLIFIED TANNED LEATHER
+2FB2 ; [.FB41.0020.0004][.97ED.0000.0000] # KANGXI RADICAL LEEK
+2FB3 ; [.FB41.0020.0004][.97F3.0000.0000] # KANGXI RADICAL SOUND
+FA69 ; [.FB41.0020.0002][.97FF.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA69
+FACA ; [.FB41.0020.0002][.97FF.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FACA
+2FB4 ; [.FB41.0020.0004][.9801.0000.0000] # KANGXI RADICAL LEAF
+32A0 ; [.FB41.0020.0006][.9805.0000.0000] # CIRCLED IDEOGRAPH ITEM
+FACB ; [.FB41.0020.0002][.980B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FACB
+2F9FE ; [.FB41.0020.0002][.980B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9FE
+2F9FF ; [.FB41.0020.0002][.980B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9FF
+F9B4 ; [.FB41.0020.0002][.9818.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9B4
+2FA00 ; [.FB41.0020.0002][.9829.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA00
+FA6A ; [.FB41.0020.0002][.983B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA6A
+FACC ; [.FB41.0020.0002][.983B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FACC
+F9D0 ; [.FB41.0020.0002][.985E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9D0
+2EDA ; [.FB41.0020.0004][.9875.0000.0000] # CJK RADICAL C-SIMPLIFIED LEAF
+2FB5 ; [.FB41.0020.0004][.98A8.0000.0000] # KANGXI RADICAL WIND
+2EDB ; [.FB41.0020.0004][.98CE.0000.0000] # CJK RADICAL C-SIMPLIFIED WIND
+2FB6 ; [.FB41.0020.0004][.98DB.0000.0000] # KANGXI RADICAL FLY
+2EDC ; [.FB41.0020.0004][.98DE.0000.0000] # CJK RADICAL C-SIMPLIFIED FLY
+2EDD ; [.FB41.0020.0004][.98DF.0000.0000] # CJK RADICAL EAT ONE
+2FB7 ; [.FB41.0020.0004][.98DF.0000.0000] # KANGXI RADICAL EAT
+2EDF ; [.FB41.0020.0004][.98E0.0000.0000] # CJK RADICAL EAT THREE
+2EDE ; [.FB41.0020.0004][.98E0.0000.0000][.0000.0118.0004] # CJK RADICAL EAT TWO
+2FA02 ; [.FB41.0020.0002][.98E2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA02
+FA2A ; [.FB41.0020.0002][.98EF.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA2A
+FA2B ; [.FB41.0020.0002][.98FC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA2B
+FA2C ; [.FB41.0020.0002][.9928.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA2C
+2FA04 ; [.FB41.0020.0002][.9929.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA04
+2EE0 ; [.FB41.0020.0004][.9963.0000.0000] # CJK RADICAL C-SIMPLIFIED EAT
+2FB8 ; [.FB41.0020.0004][.9996.0000.0000] # KANGXI RADICAL HEAD
+2EE1 ; [.FB41.0020.0004][.9996.0000.0000][.0000.0118.0004] # CJK RADICAL HEAD
+2FB9 ; [.FB41.0020.0004][.9999.0000.0000] # KANGXI RADICAL FRAGRANT
+2FA05 ; [.FB41.0020.0002][.99A7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA05
+2FBA ; [.FB41.0020.0004][.99AC.0000.0000] # KANGXI RADICAL HORSE
+2FA06 ; [.FB41.0020.0002][.99C2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA06
+F91A ; [.FB41.0020.0002][.99F1.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F91A
+2FA07 ; [.FB41.0020.0002][.99FE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA07
+F987 ; [.FB41.0020.0002][.9A6A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F987
+2EE2 ; [.FB41.0020.0004][.9A6C.0000.0000] # CJK RADICAL C-SIMPLIFIED HORSE
+2FBB ; [.FB41.0020.0004][.9AA8.0000.0000] # KANGXI RADICAL BONE
+2EE3 ; [.FB41.0020.0004][.9AA8.0000.0000][.0000.0118.0004] # CJK RADICAL BONE
+2FBC ; [.FB41.0020.0004][.9AD8.0000.0000] # KANGXI RADICAL TALL
+2FBD ; [.FB41.0020.0004][.9ADF.0000.0000] # KANGXI RADICAL HAIR
+FACD ; [.FB41.0020.0002][.9B12.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FACD
+2FA0A ; [.FB41.0020.0002][.9B12.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA0A
+2FBE ; [.FB41.0020.0004][.9B25.0000.0000] # KANGXI RADICAL FIGHT
+2FBF ; [.FB41.0020.0004][.9B2F.0000.0000] # KANGXI RADICAL SACRIFICIAL WINE
+2FC0 ; [.FB41.0020.0004][.9B32.0000.0000] # KANGXI RADICAL CAULDRON
+2FC1 ; [.FB41.0020.0004][.9B3C.0000.0000] # KANGXI RADICAL GHOST
+2EE4 ; [.FB41.0020.0004][.9B3C.0000.0000][.0000.0118.0004] # CJK RADICAL GHOST
+2FC2 ; [.FB41.0020.0004][.9B5A.0000.0000] # KANGXI RADICAL FISH
+F939 ; [.FB41.0020.0002][.9B6F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F939
+2FA0B ; [.FB41.0020.0002][.9C40.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA0B
+F9F2 ; [.FB41.0020.0002][.9C57.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9F2
+2EE5 ; [.FB41.0020.0004][.9C7C.0000.0000] # CJK RADICAL C-SIMPLIFIED FISH
+2FC3 ; [.FB41.0020.0004][.9CE5.0000.0000] # KANGXI RADICAL BIRD
+2FA0C ; [.FB41.0020.0002][.9CFD.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA0C
+2FA0F ; [.FB41.0020.0002][.9D67.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA0F
+FA2D ; [.FB41.0020.0002][.9DB4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA2D
+F93A ; [.FB41.0020.0002][.9DFA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F93A
+F920 ; [.FB41.0020.0002][.9E1E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F920
+2EE6 ; [.FB41.0020.0004][.9E1F.0000.0000] # CJK RADICAL C-SIMPLIFIED BIRD
+2FC4 ; [.FB41.0020.0004][.9E75.0000.0000] # KANGXI RADICAL SALT
+2EE7 ; [.FB41.0020.0004][.9E75.0000.0000][.0000.0118.0004] # CJK RADICAL C-SIMPLIFIED SALT
+F940 ; [.FB41.0020.0002][.9E7F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F940
+2FC5 ; [.FB41.0020.0004][.9E7F.0000.0000] # KANGXI RADICAL DEER
+F988 ; [.FB41.0020.0002][.9E97.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F988
+F9F3 ; [.FB41.0020.0002][.9E9F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9F3
+2FC6 ; [.FB41.0020.0004][.9EA5.0000.0000] # KANGXI RADICAL WHEAT
+2EE8 ; [.FB41.0020.0004][.9EA6.0000.0000] # CJK RADICAL SIMPLIFIED WHEAT
+2FA15 ; [.FB41.0020.0002][.9EBB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA15
+2FC7 ; [.FB41.0020.0004][.9EBB.0000.0000] # KANGXI RADICAL HEMP
+2FC8 ; [.FB41.0020.0004][.9EC3.0000.0000] # KANGXI RADICAL YELLOW
+2EE9 ; [.FB41.0020.0004][.9EC4.0000.0000] # CJK RADICAL SIMPLIFIED YELLOW
+2FC9 ; [.FB41.0020.0004][.9ECD.0000.0000] # KANGXI RADICAL MILLET
+F989 ; [.FB41.0020.0002][.9ECE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F989
+2FCA ; [.FB41.0020.0004][.9ED1.0000.0000] # KANGXI RADICAL BLACK
+2FA17 ; [.FB41.0020.0002][.9EF9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA17
+2FCB ; [.FB41.0020.0004][.9EF9.0000.0000] # KANGXI RADICAL EMBROIDERY
+2FCC ; [.FB41.0020.0004][.9EFD.0000.0000] # KANGXI RADICAL FROG
+2FA18 ; [.FB41.0020.0002][.9EFE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA18
+2EEA ; [.FB41.0020.0004][.9EFE.0000.0000] # CJK RADICAL C-SIMPLIFIED FROG
+2FA19 ; [.FB41.0020.0002][.9F05.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA19
+2FCD ; [.FB41.0020.0004][.9F0E.0000.0000] # KANGXI RADICAL TRIPOD
+2FA1A ; [.FB41.0020.0002][.9F0F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA1A
+2FCE ; [.FB41.0020.0004][.9F13.0000.0000] # KANGXI RADICAL DRUM
+2FA1B ; [.FB41.0020.0002][.9F16.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA1B
+2FCF ; [.FB41.0020.0004][.9F20.0000.0000] # KANGXI RADICAL RAT
+2FA1C ; [.FB41.0020.0002][.9F3B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA1C
+2FD0 ; [.FB41.0020.0004][.9F3B.0000.0000] # KANGXI RADICAL NOSE
+FAD8 ; [.FB41.0020.0002][.9F43.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAD8
+2FD1 ; [.FB41.0020.0004][.9F4A.0000.0000] # KANGXI RADICAL EVEN
+2EEB ; [.FB41.0020.0004][.9F4A.0000.0000][.0000.0118.0004] # CJK RADICAL J-SIMPLIFIED EVEN
+2EEC ; [.FB41.0020.0004][.9F50.0000.0000] # CJK RADICAL C-SIMPLIFIED EVEN
+2FD2 ; [.FB41.0020.0004][.9F52.0000.0000] # KANGXI RADICAL TOOTH
+2EED ; [.FB41.0020.0004][.9F52.0000.0000][.0000.0118.0004] # CJK RADICAL J-SIMPLIFIED TOOTH
+2EEE ; [.FB41.0020.0004][.9F7F.0000.0000] # CJK RADICAL C-SIMPLIFIED TOOTH
+F9C4 ; [.FB41.0020.0002][.9F8D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9C4
+2FD3 ; [.FB41.0020.0004][.9F8D.0000.0000] # KANGXI RADICAL DRAGON
+2EEF ; [.FB41.0020.0004][.9F8D.0000.0000][.0000.0118.0004] # CJK RADICAL J-SIMPLIFIED DRAGON
+FAD9 ; [.FB41.0020.0002][.9F8E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAD9
+2EF0 ; [.FB41.0020.0004][.9F99.0000.0000] # CJK RADICAL C-SIMPLIFIED DRAGON
+F907 ; [.FB41.0020.0002][.9F9C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F907
+F908 ; [.FB41.0020.0002][.9F9C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F908
+FACE ; [.FB41.0020.0002][.9F9C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FACE
+2FD4 ; [.FB41.0020.0004][.9F9C.0000.0000] # KANGXI RADICAL TURTLE
+2EF1 ; [.FB41.0020.0004][.9F9C.0000.0000][.0000.0118.0004] # CJK RADICAL TURTLE
+2EF2 ; [.FB41.0020.0004][.9F9C.0000.0000][.0000.0119.0004] # CJK RADICAL J-SIMPLIFIED TURTLE
+2EF3 ; [.FB41.0020.0004][.9F9F.0000.0000] # CJK RADICAL C-SIMPLIFIED TURTLE
+2FD5 ; [.FB41.0020.0004][.9FA0.0000.0000] # KANGXI RADICAL FLUTE
+FA0E ; [.FB41.0020.0002][.FA0E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA0E
+FA0F ; [.FB41.0020.0002][.FA0F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA0F
+FA11 ; [.FB41.0020.0002][.FA11.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA11
+FA13 ; [.FB41.0020.0002][.FA13.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA13
+FA14 ; [.FB41.0020.0002][.FA14.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA14
+FA1F ; [.FB41.0020.0002][.FA1F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA1F
+FA21 ; [.FB41.0020.0002][.FA21.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA21
+FA23 ; [.FB41.0020.0002][.FA23.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA23
+FA24 ; [.FB41.0020.0002][.FA24.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA24
+FA27 ; [.FB41.0020.0002][.FA27.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA27
+FA28 ; [.FB41.0020.0002][.FA28.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA28
+FA29 ; [.FB41.0020.0002][.FA29.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA29
+2F80C ; [.FB80.0020.0002][.B49E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F80C
+2F813 ; [.FB80.0020.0002][.B4B9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F813
+2F9CA ; [.FB80.0020.0002][.B4BB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9CA
+2F81F ; [.FB80.0020.0002][.B4DF.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F81F
+2F824 ; [.FB80.0020.0002][.B515.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F824
+2F867 ; [.FB80.0020.0002][.B6EE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F867
+2F868 ; [.FB80.0020.0002][.B6FC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F868
+2F876 ; [.FB80.0020.0002][.B781.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F876
+2F883 ; [.FB80.0020.0002][.B82F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F883
+2F888 ; [.FB80.0020.0002][.B862.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F888
+2F88A ; [.FB80.0020.0002][.B87C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F88A
+2F896 ; [.FB80.0020.0002][.B8C7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F896
+2F89B ; [.FB80.0020.0002][.B8E3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F89B
+2F8A2 ; [.FB80.0020.0002][.B91C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8A2
+2F8A1 ; [.FB80.0020.0002][.B93A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8A1
+2F8C2 ; [.FB80.0020.0002][.BA2E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8C2
+2F8C7 ; [.FB80.0020.0002][.BA6C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8C7
+2F8D1 ; [.FB80.0020.0002][.BAE4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8D1
+2F8D0 ; [.FB80.0020.0002][.BB08.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8D0
+2F8CE ; [.FB80.0020.0002][.BB19.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8CE
+2F8DE ; [.FB80.0020.0002][.BB49.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8DE
+FAD2 ; [.FB80.0020.0002][.BB9D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAD2
+2F8E7 ; [.FB80.0020.0002][.BB9D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8E7
+2F8EE ; [.FB80.0020.0002][.BC18.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8EE
+2F8F2 ; [.FB80.0020.0002][.BC4E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8F2
+2F90A ; [.FB80.0020.0002][.BD33.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F90A
+2F916 ; [.FB80.0020.0002][.BD96.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F916
+2F92A ; [.FB80.0020.0002][.BEAC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F92A
+2F92C ; [.FB80.0020.0002][.BEB8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F92C
+2F92D ; [.FB80.0020.0002][.BEB8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F92D
+2F933 ; [.FB80.0020.0002][.BF1B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F933
+2F93E ; [.FB80.0020.0002][.BFFC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F93E
+2F93F ; [.FB80.0020.0002][.C008.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F93F
+FAD3 ; [.FB80.0020.0002][.C018.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAD3
+FAD4 ; [.FB80.0020.0002][.C039.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAD4
+2F949 ; [.FB80.0020.0002][.C039.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F949
+2F94B ; [.FB80.0020.0002][.C046.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F94B
+2F94C ; [.FB80.0020.0002][.C096.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F94C
+2F951 ; [.FB80.0020.0002][.C0E3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F951
+2F958 ; [.FB80.0020.0002][.C12F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F958
+2F960 ; [.FB80.0020.0002][.C202.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F960
+2F964 ; [.FB80.0020.0002][.C227.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F964
+2F967 ; [.FB80.0020.0002][.C2A0.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F967
+2F96D ; [.FB80.0020.0002][.C301.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F96D
+2F971 ; [.FB80.0020.0002][.C334.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F971
+2F974 ; [.FB80.0020.0002][.C359.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F974
+2F981 ; [.FB80.0020.0002][.C3D5.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F981
+2F8D7 ; [.FB80.0020.0002][.C3D9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8D7
+2F984 ; [.FB80.0020.0002][.C40B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F984
+2F98E ; [.FB80.0020.0002][.C46B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F98E
+2F9A7 ; [.FB80.0020.0002][.C52B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9A7
+2F9AE ; [.FB80.0020.0002][.C55D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9AE
+2F9AF ; [.FB80.0020.0002][.C561.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9AF
+2F9B2 ; [.FB80.0020.0002][.C56B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9B2
+2F9BF ; [.FB80.0020.0002][.C5D7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9BF
+2F9C2 ; [.FB80.0020.0002][.C5F9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9C2
+2F9C8 ; [.FB80.0020.0002][.C635.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9C8
+2F9CD ; [.FB80.0020.0002][.C6BE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9CD
+2F9CE ; [.FB80.0020.0002][.C6C7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9CE
+2F9EF ; [.FB80.0020.0002][.C995.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9EF
+2F9F2 ; [.FB80.0020.0002][.C9E6.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9F2
+2F9F8 ; [.FB80.0020.0002][.CA6E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9F8
+2F9F9 ; [.FB80.0020.0002][.CA76.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9F9
+2F9FC ; [.FB80.0020.0002][.CAB2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9FC
+2FA03 ; [.FB80.0020.0002][.CB33.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA03
+2FA08 ; [.FB80.0020.0002][.CBCE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA08
+2FA0D ; [.FB80.0020.0002][.CCCE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA0D
+2FA0E ; [.FB80.0020.0002][.CCED.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA0E
+2FA11 ; [.FB80.0020.0002][.CCF8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA11
+2FA16 ; [.FB80.0020.0002][.CD56.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA16
+2F803 ; [.FB84.0020.0002][.8122.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F803
+2F812 ; [.FB84.0020.0002][.851C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F812
+2F91B ; [.FB84.0020.0002][.8525.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F91B
+2F816 ; [.FB84.0020.0002][.854B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F816
+2F80D ; [.FB84.0020.0002][.863A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F80D
+2F9D9 ; [.FB84.0020.0002][.8804.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9D9
+2F9DD ; [.FB84.0020.0002][.88DE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9DD
+2F834 ; [.FB84.0020.0002][.8A2C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F834
+2F838 ; [.FB84.0020.0002][.8B63.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F838
+2F859 ; [.FB84.0020.0002][.94E4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F859
+2F860 ; [.FB84.0020.0002][.96A8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F860
+2F861 ; [.FB84.0020.0002][.96EA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F861
+2F86C ; [.FB84.0020.0002][.99C8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F86C
+2F871 ; [.FB84.0020.0002][.9B18.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F871
+2F8F8 ; [.FB84.0020.0002][.9D0B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8F8
+2F87B ; [.FB84.0020.0002][.9DE4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F87B
+2F87D ; [.FB84.0020.0002][.9DE6.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F87D
+2F889 ; [.FB84.0020.0002][.A183.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F889
+2F939 ; [.FB84.0020.0002][.A19F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F939
+2F891 ; [.FB84.0020.0002][.A331.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F891
+2F892 ; [.FB84.0020.0002][.A331.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F892
+2F8A4 ; [.FB84.0020.0002][.A6D4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8A4
+FAD0 ; [.FB84.0020.0002][.A844.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAD0
+FACF ; [.FB84.0020.0002][.A84A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FACF
+2F8B8 ; [.FB84.0020.0002][.AB0C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8B8
+2F8BE ; [.FB84.0020.0002][.ABF1.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8BE
+2F8CA ; [.FB84.0020.0002][.B00A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8CA
+2F897 ; [.FB84.0020.0002][.B2B8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F897
+2F980 ; [.FB84.0020.0002][.B35F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F980
+2F989 ; [.FB84.0020.0002][.B393.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F989
+2F98A ; [.FB84.0020.0002][.B39C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F98A
+2F8DD ; [.FB84.0020.0002][.B3C3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8DD
+FAD1 ; [.FB84.0020.0002][.B3D5.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAD1
+2F8E3 ; [.FB84.0020.0002][.B46D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8E3
+2F8EC ; [.FB84.0020.0002][.B6A3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8EC
+2F8F0 ; [.FB84.0020.0002][.B8A7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8F0
+2F8F7 ; [.FB84.0020.0002][.BA8D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8F7
+2F8F9 ; [.FB84.0020.0002][.BAFA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8F9
+2F8FB ; [.FB84.0020.0002][.BCBC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8FB
+2F906 ; [.FB84.0020.0002][.BD1E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F906
+2F90D ; [.FB84.0020.0002][.BED1.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F90D
+2F910 ; [.FB84.0020.0002][.BF5E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F910
+2F911 ; [.FB84.0020.0002][.BF8E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F911
+2F91D ; [.FB84.0020.0002][.C263.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F91D
+FA6C ; [.FB84.0020.0002][.C2EE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA6C
+2F91F ; [.FB84.0020.0002][.C3AB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F91F
+2F923 ; [.FB84.0020.0002][.C608.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F923
+2F926 ; [.FB84.0020.0002][.C735.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F926
+2F927 ; [.FB84.0020.0002][.C814.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F927
+2F935 ; [.FB84.0020.0002][.CC36.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F935
+2F937 ; [.FB84.0020.0002][.CC92.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F937
+2F93B ; [.FB84.0020.0002][.CFA1.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F93B
+2F93C ; [.FB84.0020.0002][.CFB8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F93C
+2F93D ; [.FB84.0020.0002][.D044.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F93D
+2F942 ; [.FB84.0020.0002][.D0F2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F942
+2F941 ; [.FB84.0020.0002][.D0F3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F941
+2F943 ; [.FB84.0020.0002][.D119.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F943
+2F944 ; [.FB84.0020.0002][.D133.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F944
+FAD5 ; [.FB84.0020.0002][.D249.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAD5
+2F94D ; [.FB84.0020.0002][.D41D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F94D
+2F952 ; [.FB84.0020.0002][.D626.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F952
+2F954 ; [.FB84.0020.0002][.D69A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F954
+2F955 ; [.FB84.0020.0002][.D6C5.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F955
+2F95C ; [.FB84.0020.0002][.D97C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F95C
+2F95D ; [.FB84.0020.0002][.DAA7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F95D
+2F95E ; [.FB84.0020.0002][.DAA7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F95E
+2F961 ; [.FB84.0020.0002][.DBAB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F961
+2F965 ; [.FB84.0020.0002][.DC80.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F965
+FAD6 ; [.FB84.0020.0002][.DCD0.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAD6
+2F96B ; [.FB84.0020.0002][.DF86.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F96B
+2F898 ; [.FB84.0020.0002][.E1DA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F898
+2F972 ; [.FB84.0020.0002][.E228.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F972
+2F973 ; [.FB84.0020.0002][.E247.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F973
+2F975 ; [.FB84.0020.0002][.E2D9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F975
+2F977 ; [.FB84.0020.0002][.E33E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F977
+2F97B ; [.FB84.0020.0002][.E4DA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F97B
+2F97C ; [.FB84.0020.0002][.E523.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F97C
+2F97E ; [.FB84.0020.0002][.E5A8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F97E
+2F987 ; [.FB84.0020.0002][.E7A7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F987
+2F988 ; [.FB84.0020.0002][.E7B5.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F988
+2F997 ; [.FB84.0020.0002][.EB3C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F997
+2F9A4 ; [.FB84.0020.0002][.EC36.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9A4
+2F9A6 ; [.FB84.0020.0002][.ECD5.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9A6
+2F9A5 ; [.FB84.0020.0002][.ED6B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9A5
+2F9AD ; [.FB84.0020.0002][.EF2C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9AD
+2F9B0 ; [.FB84.0020.0002][.EFB1.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9B0
+2F9B1 ; [.FB84.0020.0002][.F0D2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9B1
+2F9AB ; [.FB84.0020.0002][.F3CA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9AB
+2F9C5 ; [.FB84.0020.0002][.F667.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9C5
+2F9CB ; [.FB84.0020.0002][.F8AE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9CB
+2F9CC ; [.FB84.0020.0002][.F966.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9CC
+2F9D3 ; [.FB84.0020.0002][.FCA8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9D3
+FAD7 ; [.FB84.0020.0002][.FED3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAD7
+2F9D8 ; [.FB84.0020.0002][.FF2F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9D8
+2F9E0 ; [.FB85.0020.0002][.85D2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9E0
+2F9E1 ; [.FB85.0020.0002][.85ED.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9E1
+2F9E5 ; [.FB85.0020.0002][.872E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9E5
+2F9ED ; [.FB85.0020.0002][.8BFA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9ED
+2F9F1 ; [.FB85.0020.0002][.8D77.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9F1
+2F9F6 ; [.FB85.0020.0002][.9145.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9F6
+2F81C ; [.FB85.0020.0002][.91DF.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F81C
+2F9F7 ; [.FB85.0020.0002][.921A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9F7
+2F9FB ; [.FB85.0020.0002][.940A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9FB
+2F9FD ; [.FB85.0020.0002][.9496.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9FD
+2FA01 ; [.FB85.0020.0002][.95B6.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA01
+2FA09 ; [.FB85.0020.0002][.9B30.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA09
+2FA10 ; [.FB85.0020.0002][.A0CE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA10
+2FA12 ; [.FB85.0020.0002][.A105.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA12
+2FA13 ; [.FB85.0020.0002][.A20E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA13
+2FA14 ; [.FB85.0020.0002][.A291.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA14
+2F88F ; [.FB85.0020.0002][.A392.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F88F
+2FA1D ; [.FB85.0020.0002][.A600.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA1D
+FFFD ; [.FFFD.0020.0002] # REPLACEMENT CHARACTER
+
+# EOF
diff --git a/mysql-test/suite/atomic/disabled.def b/mysql-test/suite/atomic/disabled.def
new file mode 100644
index 00000000000..3e1f2d6a2c3
--- /dev/null
+++ b/mysql-test/suite/atomic/disabled.def
@@ -0,0 +1,12 @@
+##############################################################################
+#
+# List the test cases that are to be disabled temporarily.
+#
+# Separate the test case name and the comment with ':'.
+#
+# <testcasename> : BUG#<xxxx> <date disabled> <disabler> <comment>
+#
+# Do not use any TAB characters for whitespace.
+#
+##############################################################################
+rename_trigger : MDEV-29282 2022:-08-16 Igor Babaev
diff --git a/mysql-test/suite/binlog/r/binlog_mysqlbinlog2.result b/mysql-test/suite/binlog/r/binlog_mysqlbinlog2.result
index d2e904508dc..11abd6e8973 100644
--- a/mysql-test/suite/binlog/r/binlog_mysqlbinlog2.result
+++ b/mysql-test/suite/binlog/r/binlog_mysqlbinlog2.result
@@ -25,7 +25,7 @@ ROLLBACK/*!*/;
use `test`/*!*/;
SET TIMESTAMP=1773142/*!*/;
SET @@session.pseudo_thread_id=999999999/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
@@ -97,7 +97,7 @@ SET INSERT_ID=1/*!*/;
use `test`/*!*/;
SET TIMESTAMP=1773142/*!*/;
SET @@session.pseudo_thread_id=999999999/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
@@ -163,7 +163,7 @@ SET INSERT_ID=3/*!*/;
use `test`/*!*/;
SET TIMESTAMP=1773144/*!*/;
SET @@session.pseudo_thread_id=999999999/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
@@ -208,7 +208,7 @@ ROLLBACK/*!*/;
use `test`/*!*/;
SET TIMESTAMP=1773142/*!*/;
SET @@session.pseudo_thread_id=999999999/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
@@ -253,7 +253,7 @@ SET INSERT_ID=3/*!*/;
use `test`/*!*/;
SET TIMESTAMP=1773144/*!*/;
SET @@session.pseudo_thread_id=999999999/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
@@ -280,7 +280,7 @@ SET INSERT_ID=3/*!*/;
use `test`/*!*/;
SET TIMESTAMP=1773144/*!*/;
SET @@session.pseudo_thread_id=999999999/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
@@ -325,7 +325,7 @@ ROLLBACK/*!*/;
use `test`/*!*/;
SET TIMESTAMP=1773142/*!*/;
SET @@session.pseudo_thread_id=999999999/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
@@ -368,7 +368,7 @@ ROLLBACK/*!*/;
use `test`/*!*/;
SET TIMESTAMP=1773142/*!*/;
SET @@session.pseudo_thread_id=999999999/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
@@ -430,7 +430,7 @@ SET INSERT_ID=6/*!*/;
use `test`/*!*/;
SET TIMESTAMP=1773143/*!*/;
SET @@session.pseudo_thread_id=999999999/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
@@ -460,7 +460,7 @@ SET INSERT_ID=1/*!*/;
use `test`/*!*/;
SET TIMESTAMP=1773142/*!*/;
SET @@session.pseudo_thread_id=999999999/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
@@ -516,7 +516,7 @@ SET INSERT_ID=6/*!*/;
use `test`/*!*/;
SET TIMESTAMP=1773143/*!*/;
SET @@session.pseudo_thread_id=999999999/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
@@ -546,7 +546,7 @@ SET INSERT_ID=3/*!*/;
use `test`/*!*/;
SET TIMESTAMP=1773144/*!*/;
SET @@session.pseudo_thread_id=999999999/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
@@ -584,7 +584,7 @@ SET INSERT_ID=6/*!*/;
use `test`/*!*/;
SET TIMESTAMP=1773143/*!*/;
SET @@session.pseudo_thread_id=999999999/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
@@ -611,7 +611,7 @@ ROLLBACK/*!*/;
use `test`/*!*/;
SET TIMESTAMP=1773142/*!*/;
SET @@session.pseudo_thread_id=999999999/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
@@ -687,7 +687,7 @@ SET INSERT_ID=3/*!*/;
use `test`/*!*/;
SET TIMESTAMP=1773144/*!*/;
SET @@session.pseudo_thread_id=999999999/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
@@ -725,7 +725,7 @@ SET INSERT_ID=6/*!*/;
use `test`/*!*/;
SET TIMESTAMP=1773143/*!*/;
SET @@session.pseudo_thread_id=999999999/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
@@ -752,7 +752,7 @@ ROLLBACK/*!*/;
use `test`/*!*/;
SET TIMESTAMP=1773142/*!*/;
SET @@session.pseudo_thread_id=999999999/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
@@ -794,7 +794,7 @@ ROLLBACK/*!*/;
use `test`/*!*/;
SET TIMESTAMP=1773142/*!*/;
SET @@session.pseudo_thread_id=999999999/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
@@ -866,7 +866,7 @@ SET INSERT_ID=1/*!*/;
use `test`/*!*/;
SET TIMESTAMP=1773142/*!*/;
SET @@session.pseudo_thread_id=999999999/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
@@ -931,7 +931,7 @@ SET INSERT_ID=3/*!*/;
use `test`/*!*/;
SET TIMESTAMP=1773144/*!*/;
SET @@session.pseudo_thread_id=999999999/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
@@ -976,7 +976,7 @@ ROLLBACK/*!*/;
use `test`/*!*/;
SET TIMESTAMP=1773142/*!*/;
SET @@session.pseudo_thread_id=999999999/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
@@ -1020,7 +1020,7 @@ SET INSERT_ID=3/*!*/;
use `test`/*!*/;
SET TIMESTAMP=1773144/*!*/;
SET @@session.pseudo_thread_id=999999999/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
@@ -1047,7 +1047,7 @@ SET INSERT_ID=3/*!*/;
use `test`/*!*/;
SET TIMESTAMP=1773144/*!*/;
SET @@session.pseudo_thread_id=999999999/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
@@ -1092,7 +1092,7 @@ ROLLBACK/*!*/;
use `test`/*!*/;
SET TIMESTAMP=1773142/*!*/;
SET @@session.pseudo_thread_id=999999999/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
@@ -1134,7 +1134,7 @@ ROLLBACK/*!*/;
use `test`/*!*/;
SET TIMESTAMP=1773142/*!*/;
SET @@session.pseudo_thread_id=999999999/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
@@ -1196,7 +1196,7 @@ SET INSERT_ID=6/*!*/;
use `test`/*!*/;
SET TIMESTAMP=1773143/*!*/;
SET @@session.pseudo_thread_id=999999999/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
@@ -1226,7 +1226,7 @@ SET INSERT_ID=1/*!*/;
use `test`/*!*/;
SET TIMESTAMP=1773142/*!*/;
SET @@session.pseudo_thread_id=999999999/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
@@ -1282,7 +1282,7 @@ SET INSERT_ID=6/*!*/;
use `test`/*!*/;
SET TIMESTAMP=1773143/*!*/;
SET @@session.pseudo_thread_id=999999999/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
@@ -1311,7 +1311,7 @@ SET INSERT_ID=3/*!*/;
use `test`/*!*/;
SET TIMESTAMP=1773144/*!*/;
SET @@session.pseudo_thread_id=999999999/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
@@ -1349,7 +1349,7 @@ SET INSERT_ID=6/*!*/;
use `test`/*!*/;
SET TIMESTAMP=1773143/*!*/;
SET @@session.pseudo_thread_id=999999999/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
@@ -1376,7 +1376,7 @@ ROLLBACK/*!*/;
use `test`/*!*/;
SET TIMESTAMP=1773142/*!*/;
SET @@session.pseudo_thread_id=999999999/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
@@ -1450,7 +1450,7 @@ SET INSERT_ID=3/*!*/;
use `test`/*!*/;
SET TIMESTAMP=1773144/*!*/;
SET @@session.pseudo_thread_id=999999999/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
@@ -1488,7 +1488,7 @@ SET INSERT_ID=6/*!*/;
use `test`/*!*/;
SET TIMESTAMP=1773143/*!*/;
SET @@session.pseudo_thread_id=999999999/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
@@ -1515,7 +1515,7 @@ ROLLBACK/*!*/;
use `test`/*!*/;
SET TIMESTAMP=1773142/*!*/;
SET @@session.pseudo_thread_id=999999999/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
@@ -1557,7 +1557,7 @@ ROLLBACK/*!*/;
use `test`/*!*/;
SET TIMESTAMP=1773142/*!*/;
SET @@session.pseudo_thread_id=999999999/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
diff --git a/mysql-test/suite/binlog/r/binlog_mysqlbinlog_row.result b/mysql-test/suite/binlog/r/binlog_mysqlbinlog_row.result
index 9195f9fd3ad..816084d7464 100644
--- a/mysql-test/suite/binlog/r/binlog_mysqlbinlog_row.result
+++ b/mysql-test/suite/binlog/r/binlog_mysqlbinlog_row.result
@@ -376,7 +376,7 @@ ROLLBACK/*!*/;
use `test`/*!*/;
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=#/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=1411383296/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
@@ -5386,7 +5386,7 @@ DELIMITER /*!*/;
use `test`/*!*/;
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=#/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=1411383296/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
diff --git a/mysql-test/suite/binlog/r/binlog_mysqlbinlog_row_innodb.result b/mysql-test/suite/binlog/r/binlog_mysqlbinlog_row_innodb.result
index d8a79c2033b..61de502c156 100644
--- a/mysql-test/suite/binlog/r/binlog_mysqlbinlog_row_innodb.result
+++ b/mysql-test/suite/binlog/r/binlog_mysqlbinlog_row_innodb.result
@@ -2270,7 +2270,7 @@ ROLLBACK/*!*/;
use `test`/*!*/;
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=#/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C utf8mb3 *//*!*/;
@@ -5279,7 +5279,7 @@ ROLLBACK/*!*/;
use `test`/*!*/;
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=#/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C utf8mb3 *//*!*/;
@@ -5679,7 +5679,7 @@ ROLLBACK/*!*/;
use `test`/*!*/;
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=#/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C utf8mb3 *//*!*/;
@@ -6317,7 +6317,7 @@ ROLLBACK/*!*/;
use `test`/*!*/;
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=#/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C utf8mb3 *//*!*/;
diff --git a/mysql-test/suite/binlog/r/binlog_mysqlbinlog_row_myisam.result b/mysql-test/suite/binlog/r/binlog_mysqlbinlog_row_myisam.result
index 60495f2b534..e509df39bce 100644
--- a/mysql-test/suite/binlog/r/binlog_mysqlbinlog_row_myisam.result
+++ b/mysql-test/suite/binlog/r/binlog_mysqlbinlog_row_myisam.result
@@ -2268,7 +2268,7 @@ ROLLBACK/*!*/;
use `test`/*!*/;
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=#/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C utf8mb3 *//*!*/;
@@ -5300,7 +5300,7 @@ ROLLBACK/*!*/;
use `test`/*!*/;
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=#/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C utf8mb3 *//*!*/;
@@ -5706,7 +5706,7 @@ ROLLBACK/*!*/;
use `test`/*!*/;
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=#/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C utf8mb3 *//*!*/;
@@ -6354,7 +6354,7 @@ ROLLBACK/*!*/;
use `test`/*!*/;
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=#/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C utf8mb3 *//*!*/;
diff --git a/mysql-test/suite/binlog/r/binlog_mysqlbinlog_row_trans.result b/mysql-test/suite/binlog/r/binlog_mysqlbinlog_row_trans.result
index 748b92df1a8..5a27afaae71 100644
--- a/mysql-test/suite/binlog/r/binlog_mysqlbinlog_row_trans.result
+++ b/mysql-test/suite/binlog/r/binlog_mysqlbinlog_row_trans.result
@@ -146,7 +146,7 @@ ROLLBACK/*!*/;
use `test`/*!*/;
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=#/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=1411383296/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
diff --git a/mysql-test/suite/binlog/r/binlog_row_annotate.result b/mysql-test/suite/binlog/r/binlog_row_annotate.result
index ffdb31cdbeb..bf114d8cfa9 100644
--- a/mysql-test/suite/binlog/r/binlog_row_annotate.result
+++ b/mysql-test/suite/binlog/r/binlog_row_annotate.result
@@ -116,7 +116,7 @@ ROLLBACK/*!*/;
#010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=#/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
@@ -354,7 +354,7 @@ ROLLBACK/*!*/;
#010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=#/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
@@ -513,7 +513,7 @@ ROLLBACK/*!*/;
#010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=#/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
@@ -739,7 +739,7 @@ ROLLBACK/*!*/;
#010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=#/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
@@ -977,7 +977,7 @@ ROLLBACK/*!*/;
#010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=#/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
@@ -1136,7 +1136,7 @@ ROLLBACK/*!*/;
#010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=#/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
diff --git a/mysql-test/suite/binlog/r/binlog_row_ctype_ucs.result b/mysql-test/suite/binlog/r/binlog_row_ctype_ucs.result
index 74aef814785..6d10d5420e4 100644
--- a/mysql-test/suite/binlog/r/binlog_row_ctype_ucs.result
+++ b/mysql-test/suite/binlog/r/binlog_row_ctype_ucs.result
@@ -22,7 +22,7 @@ START TRANSACTION
#Q> insert into t2 values (@v)
SET TIMESTAMP=10000/*!*/;
SET @@session.pseudo_thread_id=999999999/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=1411383296/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
@@ -92,7 +92,7 @@ DELIMITER /*!*/;
use `test`/*!*/;
SET TIMESTAMP=XXX/*!*/;
SET @@session.pseudo_thread_id=#/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=1411383296/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C utf8mb3 *//*!*/;
diff --git a/mysql-test/suite/binlog/r/binlog_row_mysqlbinlog_options.result b/mysql-test/suite/binlog/r/binlog_row_mysqlbinlog_options.result
index dc7750b975e..fe08f6e9fe9 100644
--- a/mysql-test/suite/binlog/r/binlog_row_mysqlbinlog_options.result
+++ b/mysql-test/suite/binlog/r/binlog_row_mysqlbinlog_options.result
@@ -50,7 +50,7 @@ use `new_test1`/*!*/;
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=#/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=1411383296/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
@@ -291,7 +291,7 @@ use `new_test1`/*!*/;
#010909 4:46:40 server id # end_log_pos # CRC32 XXX Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=#/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=1411383296/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
diff --git a/mysql-test/suite/binlog/r/binlog_stm_ctype_ucs.result b/mysql-test/suite/binlog/r/binlog_stm_ctype_ucs.result
index e449025eee9..c78365a847e 100644
--- a/mysql-test/suite/binlog/r/binlog_stm_ctype_ucs.result
+++ b/mysql-test/suite/binlog/r/binlog_stm_ctype_ucs.result
@@ -21,7 +21,7 @@ SET @`v`:=_ucs2 X'006100620063' COLLATE `ucs2_general_ci`/*!*/;
use `test`/*!*/;
SET TIMESTAMP=10000/*!*/;
SET @@session.pseudo_thread_id=999999999/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=1411383296/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
@@ -94,7 +94,7 @@ DELIMITER /*!*/;
use `test`/*!*/;
SET TIMESTAMP=XXX/*!*/;
SET @@session.pseudo_thread_id=#/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=1411383296/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C utf8mb3 *//*!*/;
diff --git a/mysql-test/suite/binlog/r/binlog_table_map_optional_metadata.result b/mysql-test/suite/binlog/r/binlog_table_map_optional_metadata.result
index 5e85a72f693..21275409f36 100644
--- a/mysql-test/suite/binlog/r/binlog_table_map_optional_metadata.result
+++ b/mysql-test/suite/binlog/r/binlog_table_map_optional_metadata.result
@@ -5,7 +5,8 @@ SET GLOBAL binlog_row_metadata = MINIMAL;
#
CREATE TABLE t1(c_year YEAR, c_date DATE, c_time TIME, c_time_f TIME(3),
c_datetime DATETIME, c_datetime_f DATETIME(3),
-c_timestamp TIMESTAMP, c_timestamp_f TIMESTAMP(3) DEFAULT "2017-1-1 10:10:10");
+c_timestamp TIMESTAMP NOT NULL DEFAULT NOW(),
+c_timestamp_f TIMESTAMP(3) DEFAULT "2017-1-1 10:10:10");
INSERT INTO t1(c_year) VALUES(2017);
# Columns(YEAR,
# DATE,
@@ -14,7 +15,7 @@ INSERT INTO t1(c_year) VALUES(2017);
# DATETIME,
# DATETIME(3),
# TIMESTAMP NOT NULL,
-# TIMESTAMP(3) NOT NULL)
+# TIMESTAMP(3))
DROP TABLE t1;
RESET MASTER;
#
diff --git a/mysql-test/suite/binlog/r/binlog_unsafe.result b/mysql-test/suite/binlog/r/binlog_unsafe.result
index a8143ef086e..0c0b0e77915 100644
--- a/mysql-test/suite/binlog/r/binlog_unsafe.result
+++ b/mysql-test/suite/binlog/r/binlog_unsafe.result
@@ -2609,6 +2609,9 @@ INSERT INTO t1 VALUES (VERSION());
Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a system function that may return a different value on the slave
INSERT INTO t1 VALUES (RAND());
+INSERT INTO t1 VALUES (RANDOM_BYTES(1000));
+Warnings:
+Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a system function that may return a different value on the slave
DELETE FROM t1;
SET TIME_ZONE= '+03:00';
SET TIMESTAMP=1000000;
diff --git a/mysql-test/suite/binlog/r/flashback.result b/mysql-test/suite/binlog/r/flashback.result
index 77845920146..68f15a7cc25 100644
--- a/mysql-test/suite/binlog/r/flashback.result
+++ b/mysql-test/suite/binlog/r/flashback.result
@@ -60,7 +60,7 @@ ROLLBACK/*!*/;
use `test`/*!*/;
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=#/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=1411383296/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
@@ -422,7 +422,7 @@ COMMIT
use `test`/*!*/;
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=#/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=1411383296/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
diff --git a/mysql-test/suite/binlog/t/binlog_table_map_optional_metadata.test b/mysql-test/suite/binlog/t/binlog_table_map_optional_metadata.test
index 9fd201e0cb9..4577c6c1de1 100644
--- a/mysql-test/suite/binlog/t/binlog_table_map_optional_metadata.test
+++ b/mysql-test/suite/binlog/t/binlog_table_map_optional_metadata.test
@@ -29,7 +29,8 @@ SET GLOBAL binlog_row_metadata = MINIMAL;
--echo #
CREATE TABLE t1(c_year YEAR, c_date DATE, c_time TIME, c_time_f TIME(3),
c_datetime DATETIME, c_datetime_f DATETIME(3),
- c_timestamp TIMESTAMP, c_timestamp_f TIMESTAMP(3) DEFAULT "2017-1-1 10:10:10");
+ c_timestamp TIMESTAMP NOT NULL DEFAULT NOW(),
+ c_timestamp_f TIMESTAMP(3) DEFAULT "2017-1-1 10:10:10");
INSERT INTO t1(c_year) VALUES(2017);
--source include/print_optional_metadata.inc
diff --git a/mysql-test/suite/binlog/t/binlog_unsafe.test b/mysql-test/suite/binlog/t/binlog_unsafe.test
index 673712ff209..8b2a00e174c 100644
--- a/mysql-test/suite/binlog/t/binlog_unsafe.test
+++ b/mysql-test/suite/binlog/t/binlog_unsafe.test
@@ -651,7 +651,7 @@ DROP TABLE t1,t2,t3;
#
# BUG#47995: Mark user functions as unsafe
-# BUG#49222: Mare RAND() unsafe
+# BUG#49222: Mark RAND() unsafe
#
# Test that the system functions that are supposed to be marked unsafe
# generate a warning. Each INSERT statement below should generate a
@@ -678,6 +678,7 @@ INSERT INTO t1 VALUES (UUID()); #marked unsafe before BUG#47995
INSERT INTO t1 VALUES (UUID_SHORT()); #marked unsafe before BUG#47995
INSERT INTO t1 VALUES (VERSION()); #marked unsafe in BUG#47995
INSERT INTO t1 VALUES (RAND()); #marked unsafe in BUG#49222
+INSERT INTO t1 VALUES (RANDOM_BYTES(1000)); #marked unsafe in MDEV-25704
DELETE FROM t1;
# Since we replicate the TIMESTAMP variable, functions affected by the
diff --git a/mysql-test/suite/binlog_encryption/binlog_mdev_20574_old_binlog.result b/mysql-test/suite/binlog_encryption/binlog_mdev_20574_old_binlog.result
index cf660297640..a8d96642bd1 100644
--- a/mysql-test/suite/binlog_encryption/binlog_mdev_20574_old_binlog.result
+++ b/mysql-test/suite/binlog_encryption/binlog_mdev_20574_old_binlog.result
@@ -12,7 +12,7 @@ include/rpl_start_server.inc [server_number=1]
connection slave;
RESET SLAVE;
RESET MASTER;
-CHANGE MASTER TO master_host='127.0.0.1', master_port=SERVER_MYPORT_1, master_user='root', master_log_file='master-bin.000001', master_log_pos=4;
+CHANGE MASTER TO master_host='127.0.0.1', master_port=SERVER_MYPORT_1, master_user='root', master_log_file='master-bin.000001', master_log_pos=4, master_use_gtid=no;
include/start_slave.inc
DESC t1;
Field Type Null Key Default Extra
diff --git a/mysql-test/suite/binlog_encryption/binlog_mdev_20574_old_binlog.test b/mysql-test/suite/binlog_encryption/binlog_mdev_20574_old_binlog.test
index 417df631878..3f8220630ba 100644
--- a/mysql-test/suite/binlog_encryption/binlog_mdev_20574_old_binlog.test
+++ b/mysql-test/suite/binlog_encryption/binlog_mdev_20574_old_binlog.test
@@ -36,7 +36,7 @@
RESET SLAVE;
RESET MASTER;
--replace_result $SERVER_MYPORT_1 SERVER_MYPORT_1
-eval CHANGE MASTER TO master_host='127.0.0.1', master_port=$SERVER_MYPORT_1, master_user='root', master_log_file='master-bin.000001', master_log_pos=4;
+eval CHANGE MASTER TO master_host='127.0.0.1', master_port=$SERVER_MYPORT_1, master_user='root', master_log_file='master-bin.000001', master_log_pos=4, master_use_gtid=no;
--source include/start_slave.inc
--sync_with_master
DESC t1;
diff --git a/mysql-test/suite/binlog_encryption/binlog_row_annotate.result b/mysql-test/suite/binlog_encryption/binlog_row_annotate.result
index 80b9c5d476c..2614020b7a9 100644
--- a/mysql-test/suite/binlog_encryption/binlog_row_annotate.result
+++ b/mysql-test/suite/binlog_encryption/binlog_row_annotate.result
@@ -120,7 +120,7 @@ ROLLBACK/*!*/;
#010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=#/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
@@ -361,7 +361,7 @@ ROLLBACK/*!*/;
#010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=#/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
@@ -523,7 +523,7 @@ ROLLBACK/*!*/;
#010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0 xid=<xid>
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=#/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
diff --git a/mysql-test/suite/binlog_encryption/encrypted_master_switch_to_unencrypted_coords.result b/mysql-test/suite/binlog_encryption/encrypted_master_switch_to_unencrypted_coords.result
index 33c1f1413b4..35b44be02cf 100644
--- a/mysql-test/suite/binlog_encryption/encrypted_master_switch_to_unencrypted_coords.result
+++ b/mysql-test/suite/binlog_encryption/encrypted_master_switch_to_unencrypted_coords.result
@@ -5,6 +5,11 @@ include/rpl_init.inc [topology=1->2]
connection server_2;
include/stop_slave.inc
CHANGE MASTER TO MASTER_USE_GTID=NO;
+include/start_slave.inc
+connection server_1;
+connection server_2;
+include/stop_slave.inc
+CHANGE MASTER TO MASTER_USE_GTID=NO;
#####################################################
# Part 1: unencrypted master
#####################################################
@@ -64,7 +69,9 @@ SHOW TABLES;
Tables_in_test
table1_no_encryption
include/stop_slave.inc
-reset slave;
+include/reset_slave.inc
+Warnings:
+Note 4190 RESET SLAVE is implicitly changing the value of 'Using_Gtid' from 'No' to 'Slave_Pos'
##########
# Cleanup
##########
diff --git a/mysql-test/suite/binlog_encryption/encrypted_master_switch_to_unencrypted_coords.test b/mysql-test/suite/binlog_encryption/encrypted_master_switch_to_unencrypted_coords.test
index a34c9715239..e05994f1943 100644
--- a/mysql-test/suite/binlog_encryption/encrypted_master_switch_to_unencrypted_coords.test
+++ b/mysql-test/suite/binlog_encryption/encrypted_master_switch_to_unencrypted_coords.test
@@ -25,6 +25,13 @@
--let $rpl_topology= 1->2
--source include/rpl_init.inc
+--connection server_2
+--source include/stop_slave.inc
+CHANGE MASTER TO MASTER_USE_GTID=NO;
+--source include/start_slave.inc
+
+--connection server_1
+
--enable_connect_log
# We stop replication because we want it to happen after the switch
@@ -138,7 +145,8 @@ SHOW TABLES;
--disable_connect_log
--source include/stop_slave.inc
--enable_connect_log
-reset slave;
+--let $master_use_gtid_option= No
+--source include/reset_slave.inc
--echo ##########
--echo # Cleanup
diff --git a/mysql-test/suite/binlog_encryption/multisource.result b/mysql-test/suite/binlog_encryption/multisource.result
index ad1f2e24f9e..4b53b4653cd 100644
--- a/mysql-test/suite/binlog_encryption/multisource.result
+++ b/mysql-test/suite/binlog_encryption/multisource.result
@@ -99,7 +99,8 @@ set default_master_connection = '';
change master to
master_port=MYPORT_2,
master_host='127.0.0.1',
-master_user='root';
+master_user='root',
+master_use_gtid=no;
start slave;
include/wait_for_slave_to_start.inc
#
diff --git a/mysql-test/suite/binlog_encryption/rpl_binlog_errors.result b/mysql-test/suite/binlog_encryption/rpl_binlog_errors.result
index 4c667bd7f5a..0c79b079bd6 100644
--- a/mysql-test/suite/binlog_encryption/rpl_binlog_errors.result
+++ b/mysql-test/suite/binlog_encryption/rpl_binlog_errors.result
@@ -232,6 +232,9 @@ connection master;
#######################################################################
include/rpl_reset.inc
connection slave;
+include/stop_slave.inc
+CHANGE MASTER TO MASTER_USE_GTID=NO;
+include/start_slave.inc
call mtr.add_suppression("Slave I/O: Relay log write failure: could not queue event from master.*");
call mtr.add_suppression("Error writing file .*");
call mtr.add_suppression("Could not use .*");
@@ -277,5 +280,7 @@ include/stop_slave_sql.inc
Warnings:
Note 1255 Slave already has been stopped
RESET SLAVE;
+Warnings:
+Note 4190 RESET SLAVE is implicitly changing the value of 'Using_Gtid' from 'No' to 'Slave_Pos'
RESET MASTER;
include/rpl_end.inc
diff --git a/mysql-test/suite/binlog_encryption/rpl_cant_read_event_incident.result b/mysql-test/suite/binlog_encryption/rpl_cant_read_event_incident.result
index 5aff978538f..86659816f6c 100644
--- a/mysql-test/suite/binlog_encryption/rpl_cant_read_event_incident.result
+++ b/mysql-test/suite/binlog_encryption/rpl_cant_read_event_incident.result
@@ -2,6 +2,9 @@ include/master-slave.inc
[connection master]
connection slave;
include/stop_slave.inc
+CHANGE MASTER TO MASTER_USE_GTID=NO;
+include/start_slave.inc
+include/stop_slave.inc
connection master;
call mtr.add_suppression("Error in Log_event::read_log_event()");
include/rpl_stop_server.inc [server_number=1]
@@ -10,7 +13,9 @@ show binlog events;
ERROR HY000: Error when executing command SHOW BINLOG EVENTS: Wrong offset or I/O error
connection slave;
call mtr.add_suppression("Slave I/O: Got fatal error 1236 from master when reading data from binary log");
-reset slave;
+include/reset_slave.inc
+Warnings:
+Note 4190 RESET SLAVE is implicitly changing the value of 'Using_Gtid' from 'No' to 'Slave_Pos'
start slave;
include/wait_for_slave_param.inc [Last_IO_Errno]
Last_IO_Errno = '1236'
@@ -20,6 +25,8 @@ reset master;
connection slave;
stop slave;
reset slave;
+Warnings:
+Note 4190 RESET SLAVE is implicitly changing the value of 'Using_Gtid' from 'No' to 'Slave_Pos'
drop table if exists t;
reset master;
End of the tests
diff --git a/mysql-test/suite/binlog_encryption/rpl_checksum.result b/mysql-test/suite/binlog_encryption/rpl_checksum.result
index 22220b8e9fb..0b894e05a46 100644
--- a/mysql-test/suite/binlog_encryption/rpl_checksum.result
+++ b/mysql-test/suite/binlog_encryption/rpl_checksum.result
@@ -1,5 +1,10 @@
include/master-slave.inc
[connection master]
+connection slave;
+include/stop_slave.inc
+CHANGE MASTER TO MASTER_USE_GTID=NO;
+include/start_slave.inc
+connection master;
call mtr.add_suppression('Slave can not handle replication events with the checksum that master is configured to log');
call mtr.add_suppression('Replication event checksum verification failed');
call mtr.add_suppression('Relay log write failure: could not queue event from master');
@@ -122,7 +127,9 @@ must be zero
0
connection slave;
stop slave;
-reset slave;
+include/reset_slave.inc
+Warnings:
+Note 4190 RESET SLAVE is implicitly changing the value of 'Using_Gtid' from 'No' to 'Slave_Pos'
set @@global.binlog_checksum= IF(floor((rand()*1000)%2), "CRC32", "NONE");
flush logs;
connection master;
diff --git a/mysql-test/suite/binlog_encryption/rpl_corruption.result b/mysql-test/suite/binlog_encryption/rpl_corruption.result
index 73bb373d6be..7c60e15a567 100644
--- a/mysql-test/suite/binlog_encryption/rpl_corruption.result
+++ b/mysql-test/suite/binlog_encryption/rpl_corruption.result
@@ -1,5 +1,10 @@
include/master-slave.inc
[connection master]
+connection slave;
+include/stop_slave.inc
+CHANGE MASTER TO MASTER_USE_GTID=NO;
+include/start_slave.inc
+connection master;
call mtr.add_suppression('Found invalid event in binary log');
call mtr.add_suppression('Slave I/O: Relay log write failure: could not queue event from master');
call mtr.add_suppression('event read from binlog did not pass crc check');
diff --git a/mysql-test/suite/binlog_encryption/rpl_gtid_basic.result b/mysql-test/suite/binlog_encryption/rpl_gtid_basic.result
index 0e066fc0418..07ef909d8a6 100644
--- a/mysql-test/suite/binlog_encryption/rpl_gtid_basic.result
+++ b/mysql-test/suite/binlog_encryption/rpl_gtid_basic.result
@@ -69,6 +69,8 @@ INSERT INTO t2 VALUES (5, "i1a");
connection server_4;
CHANGE MASTER TO master_host = '127.0.0.1', master_port = MASTER_PORT,
MASTER_USE_GTID=CURRENT_POS;
+Warnings:
+Warning 1681 'master_use_gtid=current_pos' is deprecated and will be removed in a future release. Please use master_demote_to_slave=1 instead
include/start_slave.inc
SELECT * FROM t1 ORDER BY a;
a b
@@ -89,6 +91,8 @@ connection server_2;
include/stop_slave.inc
CHANGE MASTER TO master_host = '127.0.0.1', master_port = SERVER_MYPORT_4,
MASTER_USE_GTID=CURRENT_POS;
+Warnings:
+Warning 1681 'master_use_gtid=current_pos' is deprecated and will be removed in a future release. Please use master_demote_to_slave=1 instead
include/start_slave.inc
connection server_4;
UPDATE t2 SET b="j1a" WHERE a=5;
@@ -117,6 +121,8 @@ include/save_master_gtid.inc
connection server_3;
CHANGE MASTER TO master_host = '127.0.0.1', master_port = SERVER_MYPORT_4,
MASTER_USE_GTID=CURRENT_POS;
+Warnings:
+Warning 1681 'master_use_gtid=current_pos' is deprecated and will be removed in a future release. Please use master_demote_to_slave=1 instead
include/start_slave.inc
include/sync_with_master_gtid.inc
SELECT * FROM t2 ORDER BY a;
diff --git a/mysql-test/suite/binlog_encryption/rpl_mixed_binlog_max_cache_size.result b/mysql-test/suite/binlog_encryption/rpl_mixed_binlog_max_cache_size.result
index 944ad9331ad..e94e097f41f 100644
--- a/mysql-test/suite/binlog_encryption/rpl_mixed_binlog_max_cache_size.result
+++ b/mysql-test/suite/binlog_encryption/rpl_mixed_binlog_max_cache_size.result
@@ -1,5 +1,10 @@
include/master-slave.inc
[connection master]
+connection slave;
+include/stop_slave.inc
+CHANGE MASTER TO MASTER_USE_GTID=NO;
+include/start_slave.inc
+connection master;
call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT");
call mtr.add_suppression("Write to binary log failed: Multi-row statements required more than .max_binlog_stmt_cache_size");
call mtr.add_suppression("Write to binary log failed: Multi-statement transaction required more than .max_binlog_cache_size");
diff --git a/mysql-test/suite/binlog_encryption/rpl_semi_sync.result b/mysql-test/suite/binlog_encryption/rpl_semi_sync.result
index d18bd1efda7..edd5e7748e0 100644
--- a/mysql-test/suite/binlog_encryption/rpl_semi_sync.result
+++ b/mysql-test/suite/binlog_encryption/rpl_semi_sync.result
@@ -6,16 +6,18 @@ call mtr.add_suppression("Read semi-sync reply");
call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT.");
call mtr.add_suppression("mysqld: Got an error reading communication packets");
connection slave;
+set sql_log_bin=0;
call mtr.add_suppression("Master server does not support semi-sync");
call mtr.add_suppression("Semi-sync slave .* reply");
call mtr.add_suppression("Slave SQL.*Request to stop slave SQL Thread received while applying a group that has non-transactional changes; waiting for completion of the group");
+set sql_log_bin=1;
connection master;
#
# Uninstall semi-sync plugins on master and slave
#
connection slave;
include/stop_slave.inc
-reset slave;
+include/reset_slave.inc
set global rpl_semi_sync_master_enabled= 0;
set global rpl_semi_sync_slave_enabled= 0;
connection master;
@@ -310,7 +312,7 @@ Variable_name Value
Rpl_semi_sync_master_yes_tx 0
connection slave;
include/stop_slave.inc
-reset slave;
+include/reset_slave.inc
include/kill_binlog_dump_threads.inc
connection slave;
include/start_slave.inc
@@ -340,7 +342,7 @@ Rpl_semi_sync_master_yes_tx 3
#
connection slave;
include/stop_slave.inc
-reset slave;
+include/reset_slave.inc
connection master;
reset master;
include/kill_binlog_dump_threads.inc
diff --git a/mysql-test/suite/binlog_encryption/rpl_skip_replication.result b/mysql-test/suite/binlog_encryption/rpl_skip_replication.result
index 59d5b50e5cc..96e0a30331d 100644
--- a/mysql-test/suite/binlog_encryption/rpl_skip_replication.result
+++ b/mysql-test/suite/binlog_encryption/rpl_skip_replication.result
@@ -1,6 +1,11 @@
include/master-slave.inc
[connection master]
connection slave;
+include/stop_slave.inc
+CHANGE MASTER TO MASTER_USE_GTID=NO;
+include/start_slave.inc
+connection master;
+connection slave;
CREATE USER 'nonsuperuser'@'127.0.0.1';
GRANT ALTER,CREATE,DELETE,DROP,EVENT,INSERT,PROCESS,REPLICATION SLAVE,
SELECT,UPDATE ON *.* TO 'nonsuperuser'@'127.0.0.1';
diff --git a/mysql-test/suite/compat/maxdb/rpl_mariadb_timestamp.result b/mysql-test/suite/compat/maxdb/rpl_mariadb_timestamp.result
index df3bbca0fa2..727c79492ed 100644
--- a/mysql-test/suite/compat/maxdb/rpl_mariadb_timestamp.result
+++ b/mysql-test/suite/compat/maxdb/rpl_mariadb_timestamp.result
@@ -5,7 +5,7 @@ include/master-slave.inc
#
SET timestamp=UNIX_TIMESTAMP('2001-01-01 10:00:00');
SET sql_mode=DEFAULT;
-CREATE TABLE t1 (a TIMESTAMP);
+CREATE TABLE t1 (a TIMESTAMP NOT NULL DEFAULT NOW());
INSERT INTO t1 VALUES (NULL);
INSERT INTO t1 VALUES ('2001-01-01 10:20:30');
SET sql_mode=MAXDB;
@@ -14,7 +14,7 @@ SET timestamp=DEFAULT;
include/show_binlog_events.inc
Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000001 # Gtid # # GTID #-#-#
-master-bin.000001 # Query # # use `test`; CREATE TABLE t1 (a TIMESTAMP)
+master-bin.000001 # Query # # use `test`; CREATE TABLE t1 (a TIMESTAMP NOT NULL DEFAULT NOW())
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
master-bin.000001 # Annotate_rows # # INSERT INTO t1 VALUES (NULL)
master-bin.000001 # Table_map # # table_id: # (test.t1)
@@ -42,7 +42,7 @@ SET sql_mode=DEFAULT;
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `a` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `a` timestamp NOT NULL DEFAULT current_timestamp()
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
SHOW CREATE TABLE t2;
Table Create Table
diff --git a/mysql-test/suite/compat/maxdb/rpl_mariadb_timestamp.test b/mysql-test/suite/compat/maxdb/rpl_mariadb_timestamp.test
index 50663229937..f4a826615eb 100644
--- a/mysql-test/suite/compat/maxdb/rpl_mariadb_timestamp.test
+++ b/mysql-test/suite/compat/maxdb/rpl_mariadb_timestamp.test
@@ -7,7 +7,7 @@
SET timestamp=UNIX_TIMESTAMP('2001-01-01 10:00:00');
SET sql_mode=DEFAULT;
-CREATE TABLE t1 (a TIMESTAMP);
+CREATE TABLE t1 (a TIMESTAMP NOT NULL DEFAULT NOW());
INSERT INTO t1 VALUES (NULL);
INSERT INTO t1 VALUES ('2001-01-01 10:20:30');
SET sql_mode=MAXDB;
@@ -17,7 +17,6 @@ SET timestamp=DEFAULT;
--let $binlog_file = LAST
source include/show_binlog_events.inc;
-
--sync_slave_with_master
SELECT * FROM t1;
SET sql_mode=DEFAULT;
diff --git a/mysql-test/suite/compat/maxdb/type_timestamp.result b/mysql-test/suite/compat/maxdb/type_timestamp.result
index 7bc0613bc56..f6612ab18da 100644
--- a/mysql-test/suite/compat/maxdb/type_timestamp.result
+++ b/mysql-test/suite/compat/maxdb/type_timestamp.result
@@ -11,18 +11,18 @@ max_timestamp maxdb_schema.TIMESTAMP
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `def_timestamp` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
- `mdb_timestamp` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
- `ora_timestamp` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `def_timestamp` timestamp NULL DEFAULT NULL,
+ `mdb_timestamp` timestamp NULL DEFAULT NULL,
+ `ora_timestamp` timestamp NULL DEFAULT NULL,
`max_timestamp` datetime DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
SET sql_mode=MAXDB;
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE "t1" (
- "def_timestamp" mariadb_schema.timestamp NOT NULL DEFAULT current_timestamp(),
- "mdb_timestamp" mariadb_schema.timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
- "ora_timestamp" mariadb_schema.timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ "def_timestamp" mariadb_schema.timestamp NULL DEFAULT NULL,
+ "mdb_timestamp" mariadb_schema.timestamp NULL DEFAULT NULL,
+ "ora_timestamp" mariadb_schema.timestamp NULL DEFAULT NULL,
"max_timestamp" datetime DEFAULT NULL
)
DROP TABLE t1;
@@ -37,8 +37,8 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE "t1" (
"def_timestamp" datetime DEFAULT NULL,
- "mdb_timestamp" mariadb_schema.timestamp NOT NULL DEFAULT current_timestamp(),
- "ora_timestamp" mariadb_schema.timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ "mdb_timestamp" mariadb_schema.timestamp NULL DEFAULT NULL,
+ "ora_timestamp" mariadb_schema.timestamp NULL DEFAULT NULL,
"max_timestamp" datetime DEFAULT NULL
)
SET sql_mode=DEFAULT;
@@ -46,8 +46,8 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`def_timestamp` datetime DEFAULT NULL,
- `mdb_timestamp` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
- `ora_timestamp` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `mdb_timestamp` timestamp NULL DEFAULT NULL,
+ `ora_timestamp` timestamp NULL DEFAULT NULL,
`max_timestamp` datetime DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
diff --git a/mysql-test/suite/compat/oracle/r/sp.result b/mysql-test/suite/compat/oracle/r/sp.result
index 2e212530ae5..409ea3b8e3f 100644
--- a/mysql-test/suite/compat/oracle/r/sp.result
+++ b/mysql-test/suite/compat/oracle/r/sp.result
@@ -1796,7 +1796,7 @@ def tm6 tm6 11 17 15 Y 128 6 63
def dt0 dt0 12 19 19 Y 128 0 63
def dt3 dt3 12 23 23 Y 128 3 63
def dt6 dt6 12 26 26 Y 128 6 63
-def ts0 ts0 7 19 19 Y 9376 0 63
+def ts0 ts0 7 19 19 Y 160 0 63
def ts3 ts3 7 23 23 Y 160 3 63
def ts6 ts6 7 26 26 Y 160 6 63
bit6 0
diff --git a/mysql-test/suite/engines/funcs/r/db_alter_collate_ascii.result b/mysql-test/suite/engines/funcs/r/db_alter_collate_ascii.result
index b86c28e7344..ea092d1211f 100644
--- a/mysql-test/suite/engines/funcs/r/db_alter_collate_ascii.result
+++ b/mysql-test/suite/engines/funcs/r/db_alter_collate_ascii.result
@@ -224,6 +224,190 @@ utf8mb4_general_nopad_ci utf8mb4 1069 # #
utf8mb4_nopad_bin utf8mb4 1070 # #
utf8mb4_unicode_nopad_ci utf8mb4 1248 # #
utf8mb4_unicode_520_nopad_ci utf8mb4 1270 # #
+uca1400_ai_ci NULL NULL NULL # #
+uca1400_ai_cs NULL NULL NULL # #
+uca1400_as_ci NULL NULL NULL # #
+uca1400_as_cs NULL NULL NULL # #
+uca1400_nopad_ai_ci NULL NULL NULL # #
+uca1400_nopad_ai_cs NULL NULL NULL # #
+uca1400_nopad_as_ci NULL NULL NULL # #
+uca1400_nopad_as_cs NULL NULL NULL # #
+uca1400_icelandic_ai_ci NULL NULL NULL # #
+uca1400_icelandic_ai_cs NULL NULL NULL # #
+uca1400_icelandic_as_ci NULL NULL NULL # #
+uca1400_icelandic_as_cs NULL NULL NULL # #
+uca1400_icelandic_nopad_ai_ci NULL NULL NULL # #
+uca1400_icelandic_nopad_ai_cs NULL NULL NULL # #
+uca1400_icelandic_nopad_as_ci NULL NULL NULL # #
+uca1400_icelandic_nopad_as_cs NULL NULL NULL # #
+uca1400_latvian_ai_ci NULL NULL NULL # #
+uca1400_latvian_ai_cs NULL NULL NULL # #
+uca1400_latvian_as_ci NULL NULL NULL # #
+uca1400_latvian_as_cs NULL NULL NULL # #
+uca1400_latvian_nopad_ai_ci NULL NULL NULL # #
+uca1400_latvian_nopad_ai_cs NULL NULL NULL # #
+uca1400_latvian_nopad_as_ci NULL NULL NULL # #
+uca1400_latvian_nopad_as_cs NULL NULL NULL # #
+uca1400_romanian_ai_ci NULL NULL NULL # #
+uca1400_romanian_ai_cs NULL NULL NULL # #
+uca1400_romanian_as_ci NULL NULL NULL # #
+uca1400_romanian_as_cs NULL NULL NULL # #
+uca1400_romanian_nopad_ai_ci NULL NULL NULL # #
+uca1400_romanian_nopad_ai_cs NULL NULL NULL # #
+uca1400_romanian_nopad_as_ci NULL NULL NULL # #
+uca1400_romanian_nopad_as_cs NULL NULL NULL # #
+uca1400_slovenian_ai_ci NULL NULL NULL # #
+uca1400_slovenian_ai_cs NULL NULL NULL # #
+uca1400_slovenian_as_ci NULL NULL NULL # #
+uca1400_slovenian_as_cs NULL NULL NULL # #
+uca1400_slovenian_nopad_ai_ci NULL NULL NULL # #
+uca1400_slovenian_nopad_ai_cs NULL NULL NULL # #
+uca1400_slovenian_nopad_as_ci NULL NULL NULL # #
+uca1400_slovenian_nopad_as_cs NULL NULL NULL # #
+uca1400_polish_ai_ci NULL NULL NULL # #
+uca1400_polish_ai_cs NULL NULL NULL # #
+uca1400_polish_as_ci NULL NULL NULL # #
+uca1400_polish_as_cs NULL NULL NULL # #
+uca1400_polish_nopad_ai_ci NULL NULL NULL # #
+uca1400_polish_nopad_ai_cs NULL NULL NULL # #
+uca1400_polish_nopad_as_ci NULL NULL NULL # #
+uca1400_polish_nopad_as_cs NULL NULL NULL # #
+uca1400_estonian_ai_ci NULL NULL NULL # #
+uca1400_estonian_ai_cs NULL NULL NULL # #
+uca1400_estonian_as_ci NULL NULL NULL # #
+uca1400_estonian_as_cs NULL NULL NULL # #
+uca1400_estonian_nopad_ai_ci NULL NULL NULL # #
+uca1400_estonian_nopad_ai_cs NULL NULL NULL # #
+uca1400_estonian_nopad_as_ci NULL NULL NULL # #
+uca1400_estonian_nopad_as_cs NULL NULL NULL # #
+uca1400_spanish_ai_ci NULL NULL NULL # #
+uca1400_spanish_ai_cs NULL NULL NULL # #
+uca1400_spanish_as_ci NULL NULL NULL # #
+uca1400_spanish_as_cs NULL NULL NULL # #
+uca1400_spanish_nopad_ai_ci NULL NULL NULL # #
+uca1400_spanish_nopad_ai_cs NULL NULL NULL # #
+uca1400_spanish_nopad_as_ci NULL NULL NULL # #
+uca1400_spanish_nopad_as_cs NULL NULL NULL # #
+uca1400_swedish_ai_ci NULL NULL NULL # #
+uca1400_swedish_ai_cs NULL NULL NULL # #
+uca1400_swedish_as_ci NULL NULL NULL # #
+uca1400_swedish_as_cs NULL NULL NULL # #
+uca1400_swedish_nopad_ai_ci NULL NULL NULL # #
+uca1400_swedish_nopad_ai_cs NULL NULL NULL # #
+uca1400_swedish_nopad_as_ci NULL NULL NULL # #
+uca1400_swedish_nopad_as_cs NULL NULL NULL # #
+uca1400_turkish_ai_ci NULL NULL NULL # #
+uca1400_turkish_ai_cs NULL NULL NULL # #
+uca1400_turkish_as_ci NULL NULL NULL # #
+uca1400_turkish_as_cs NULL NULL NULL # #
+uca1400_turkish_nopad_ai_ci NULL NULL NULL # #
+uca1400_turkish_nopad_ai_cs NULL NULL NULL # #
+uca1400_turkish_nopad_as_ci NULL NULL NULL # #
+uca1400_turkish_nopad_as_cs NULL NULL NULL # #
+uca1400_czech_ai_ci NULL NULL NULL # #
+uca1400_czech_ai_cs NULL NULL NULL # #
+uca1400_czech_as_ci NULL NULL NULL # #
+uca1400_czech_as_cs NULL NULL NULL # #
+uca1400_czech_nopad_ai_ci NULL NULL NULL # #
+uca1400_czech_nopad_ai_cs NULL NULL NULL # #
+uca1400_czech_nopad_as_ci NULL NULL NULL # #
+uca1400_czech_nopad_as_cs NULL NULL NULL # #
+uca1400_danish_ai_ci NULL NULL NULL # #
+uca1400_danish_ai_cs NULL NULL NULL # #
+uca1400_danish_as_ci NULL NULL NULL # #
+uca1400_danish_as_cs NULL NULL NULL # #
+uca1400_danish_nopad_ai_ci NULL NULL NULL # #
+uca1400_danish_nopad_ai_cs NULL NULL NULL # #
+uca1400_danish_nopad_as_ci NULL NULL NULL # #
+uca1400_danish_nopad_as_cs NULL NULL NULL # #
+uca1400_lithuanian_ai_ci NULL NULL NULL # #
+uca1400_lithuanian_ai_cs NULL NULL NULL # #
+uca1400_lithuanian_as_ci NULL NULL NULL # #
+uca1400_lithuanian_as_cs NULL NULL NULL # #
+uca1400_lithuanian_nopad_ai_ci NULL NULL NULL # #
+uca1400_lithuanian_nopad_ai_cs NULL NULL NULL # #
+uca1400_lithuanian_nopad_as_ci NULL NULL NULL # #
+uca1400_lithuanian_nopad_as_cs NULL NULL NULL # #
+uca1400_slovak_ai_ci NULL NULL NULL # #
+uca1400_slovak_ai_cs NULL NULL NULL # #
+uca1400_slovak_as_ci NULL NULL NULL # #
+uca1400_slovak_as_cs NULL NULL NULL # #
+uca1400_slovak_nopad_ai_ci NULL NULL NULL # #
+uca1400_slovak_nopad_ai_cs NULL NULL NULL # #
+uca1400_slovak_nopad_as_ci NULL NULL NULL # #
+uca1400_slovak_nopad_as_cs NULL NULL NULL # #
+uca1400_spanish2_ai_ci NULL NULL NULL # #
+uca1400_spanish2_ai_cs NULL NULL NULL # #
+uca1400_spanish2_as_ci NULL NULL NULL # #
+uca1400_spanish2_as_cs NULL NULL NULL # #
+uca1400_spanish2_nopad_ai_ci NULL NULL NULL # #
+uca1400_spanish2_nopad_ai_cs NULL NULL NULL # #
+uca1400_spanish2_nopad_as_ci NULL NULL NULL # #
+uca1400_spanish2_nopad_as_cs NULL NULL NULL # #
+uca1400_roman_ai_ci NULL NULL NULL # #
+uca1400_roman_ai_cs NULL NULL NULL # #
+uca1400_roman_as_ci NULL NULL NULL # #
+uca1400_roman_as_cs NULL NULL NULL # #
+uca1400_roman_nopad_ai_ci NULL NULL NULL # #
+uca1400_roman_nopad_ai_cs NULL NULL NULL # #
+uca1400_roman_nopad_as_ci NULL NULL NULL # #
+uca1400_roman_nopad_as_cs NULL NULL NULL # #
+uca1400_persian_ai_ci NULL NULL NULL # #
+uca1400_persian_ai_cs NULL NULL NULL # #
+uca1400_persian_as_ci NULL NULL NULL # #
+uca1400_persian_as_cs NULL NULL NULL # #
+uca1400_persian_nopad_ai_ci NULL NULL NULL # #
+uca1400_persian_nopad_ai_cs NULL NULL NULL # #
+uca1400_persian_nopad_as_ci NULL NULL NULL # #
+uca1400_persian_nopad_as_cs NULL NULL NULL # #
+uca1400_esperanto_ai_ci NULL NULL NULL # #
+uca1400_esperanto_ai_cs NULL NULL NULL # #
+uca1400_esperanto_as_ci NULL NULL NULL # #
+uca1400_esperanto_as_cs NULL NULL NULL # #
+uca1400_esperanto_nopad_ai_ci NULL NULL NULL # #
+uca1400_esperanto_nopad_ai_cs NULL NULL NULL # #
+uca1400_esperanto_nopad_as_ci NULL NULL NULL # #
+uca1400_esperanto_nopad_as_cs NULL NULL NULL # #
+uca1400_hungarian_ai_ci NULL NULL NULL # #
+uca1400_hungarian_ai_cs NULL NULL NULL # #
+uca1400_hungarian_as_ci NULL NULL NULL # #
+uca1400_hungarian_as_cs NULL NULL NULL # #
+uca1400_hungarian_nopad_ai_ci NULL NULL NULL # #
+uca1400_hungarian_nopad_ai_cs NULL NULL NULL # #
+uca1400_hungarian_nopad_as_ci NULL NULL NULL # #
+uca1400_hungarian_nopad_as_cs NULL NULL NULL # #
+uca1400_sinhala_ai_ci NULL NULL NULL # #
+uca1400_sinhala_ai_cs NULL NULL NULL # #
+uca1400_sinhala_as_ci NULL NULL NULL # #
+uca1400_sinhala_as_cs NULL NULL NULL # #
+uca1400_sinhala_nopad_ai_ci NULL NULL NULL # #
+uca1400_sinhala_nopad_ai_cs NULL NULL NULL # #
+uca1400_sinhala_nopad_as_ci NULL NULL NULL # #
+uca1400_sinhala_nopad_as_cs NULL NULL NULL # #
+uca1400_german2_ai_ci NULL NULL NULL # #
+uca1400_german2_ai_cs NULL NULL NULL # #
+uca1400_german2_as_ci NULL NULL NULL # #
+uca1400_german2_as_cs NULL NULL NULL # #
+uca1400_german2_nopad_ai_ci NULL NULL NULL # #
+uca1400_german2_nopad_ai_cs NULL NULL NULL # #
+uca1400_german2_nopad_as_ci NULL NULL NULL # #
+uca1400_german2_nopad_as_cs NULL NULL NULL # #
+uca1400_vietnamese_ai_ci NULL NULL NULL # #
+uca1400_vietnamese_ai_cs NULL NULL NULL # #
+uca1400_vietnamese_as_ci NULL NULL NULL # #
+uca1400_vietnamese_as_cs NULL NULL NULL # #
+uca1400_vietnamese_nopad_ai_ci NULL NULL NULL # #
+uca1400_vietnamese_nopad_ai_cs NULL NULL NULL # #
+uca1400_vietnamese_nopad_as_ci NULL NULL NULL # #
+uca1400_vietnamese_nopad_as_cs NULL NULL NULL # #
+uca1400_croatian_ai_ci NULL NULL NULL # #
+uca1400_croatian_ai_cs NULL NULL NULL # #
+uca1400_croatian_as_ci NULL NULL NULL # #
+uca1400_croatian_as_cs NULL NULL NULL # #
+uca1400_croatian_nopad_ai_ci NULL NULL NULL # #
+uca1400_croatian_nopad_ai_cs NULL NULL NULL # #
+uca1400_croatian_nopad_as_ci NULL NULL NULL # #
+uca1400_croatian_nopad_as_cs NULL NULL NULL # #
cp1251_bulgarian_ci cp1251 14 # #
cp1251_ukrainian_ci cp1251 23 # #
cp1251_bin cp1251 50 # #
diff --git a/mysql-test/suite/engines/funcs/r/db_alter_collate_utf8.result b/mysql-test/suite/engines/funcs/r/db_alter_collate_utf8.result
index 6aa05538a32..0bc617071ca 100644
--- a/mysql-test/suite/engines/funcs/r/db_alter_collate_utf8.result
+++ b/mysql-test/suite/engines/funcs/r/db_alter_collate_utf8.result
@@ -224,6 +224,190 @@ utf8mb4_general_nopad_ci utf8mb4 1069 # #
utf8mb4_nopad_bin utf8mb4 1070 # #
utf8mb4_unicode_nopad_ci utf8mb4 1248 # #
utf8mb4_unicode_520_nopad_ci utf8mb4 1270 # #
+uca1400_ai_ci NULL NULL NULL # #
+uca1400_ai_cs NULL NULL NULL # #
+uca1400_as_ci NULL NULL NULL # #
+uca1400_as_cs NULL NULL NULL # #
+uca1400_nopad_ai_ci NULL NULL NULL # #
+uca1400_nopad_ai_cs NULL NULL NULL # #
+uca1400_nopad_as_ci NULL NULL NULL # #
+uca1400_nopad_as_cs NULL NULL NULL # #
+uca1400_icelandic_ai_ci NULL NULL NULL # #
+uca1400_icelandic_ai_cs NULL NULL NULL # #
+uca1400_icelandic_as_ci NULL NULL NULL # #
+uca1400_icelandic_as_cs NULL NULL NULL # #
+uca1400_icelandic_nopad_ai_ci NULL NULL NULL # #
+uca1400_icelandic_nopad_ai_cs NULL NULL NULL # #
+uca1400_icelandic_nopad_as_ci NULL NULL NULL # #
+uca1400_icelandic_nopad_as_cs NULL NULL NULL # #
+uca1400_latvian_ai_ci NULL NULL NULL # #
+uca1400_latvian_ai_cs NULL NULL NULL # #
+uca1400_latvian_as_ci NULL NULL NULL # #
+uca1400_latvian_as_cs NULL NULL NULL # #
+uca1400_latvian_nopad_ai_ci NULL NULL NULL # #
+uca1400_latvian_nopad_ai_cs NULL NULL NULL # #
+uca1400_latvian_nopad_as_ci NULL NULL NULL # #
+uca1400_latvian_nopad_as_cs NULL NULL NULL # #
+uca1400_romanian_ai_ci NULL NULL NULL # #
+uca1400_romanian_ai_cs NULL NULL NULL # #
+uca1400_romanian_as_ci NULL NULL NULL # #
+uca1400_romanian_as_cs NULL NULL NULL # #
+uca1400_romanian_nopad_ai_ci NULL NULL NULL # #
+uca1400_romanian_nopad_ai_cs NULL NULL NULL # #
+uca1400_romanian_nopad_as_ci NULL NULL NULL # #
+uca1400_romanian_nopad_as_cs NULL NULL NULL # #
+uca1400_slovenian_ai_ci NULL NULL NULL # #
+uca1400_slovenian_ai_cs NULL NULL NULL # #
+uca1400_slovenian_as_ci NULL NULL NULL # #
+uca1400_slovenian_as_cs NULL NULL NULL # #
+uca1400_slovenian_nopad_ai_ci NULL NULL NULL # #
+uca1400_slovenian_nopad_ai_cs NULL NULL NULL # #
+uca1400_slovenian_nopad_as_ci NULL NULL NULL # #
+uca1400_slovenian_nopad_as_cs NULL NULL NULL # #
+uca1400_polish_ai_ci NULL NULL NULL # #
+uca1400_polish_ai_cs NULL NULL NULL # #
+uca1400_polish_as_ci NULL NULL NULL # #
+uca1400_polish_as_cs NULL NULL NULL # #
+uca1400_polish_nopad_ai_ci NULL NULL NULL # #
+uca1400_polish_nopad_ai_cs NULL NULL NULL # #
+uca1400_polish_nopad_as_ci NULL NULL NULL # #
+uca1400_polish_nopad_as_cs NULL NULL NULL # #
+uca1400_estonian_ai_ci NULL NULL NULL # #
+uca1400_estonian_ai_cs NULL NULL NULL # #
+uca1400_estonian_as_ci NULL NULL NULL # #
+uca1400_estonian_as_cs NULL NULL NULL # #
+uca1400_estonian_nopad_ai_ci NULL NULL NULL # #
+uca1400_estonian_nopad_ai_cs NULL NULL NULL # #
+uca1400_estonian_nopad_as_ci NULL NULL NULL # #
+uca1400_estonian_nopad_as_cs NULL NULL NULL # #
+uca1400_spanish_ai_ci NULL NULL NULL # #
+uca1400_spanish_ai_cs NULL NULL NULL # #
+uca1400_spanish_as_ci NULL NULL NULL # #
+uca1400_spanish_as_cs NULL NULL NULL # #
+uca1400_spanish_nopad_ai_ci NULL NULL NULL # #
+uca1400_spanish_nopad_ai_cs NULL NULL NULL # #
+uca1400_spanish_nopad_as_ci NULL NULL NULL # #
+uca1400_spanish_nopad_as_cs NULL NULL NULL # #
+uca1400_swedish_ai_ci NULL NULL NULL # #
+uca1400_swedish_ai_cs NULL NULL NULL # #
+uca1400_swedish_as_ci NULL NULL NULL # #
+uca1400_swedish_as_cs NULL NULL NULL # #
+uca1400_swedish_nopad_ai_ci NULL NULL NULL # #
+uca1400_swedish_nopad_ai_cs NULL NULL NULL # #
+uca1400_swedish_nopad_as_ci NULL NULL NULL # #
+uca1400_swedish_nopad_as_cs NULL NULL NULL # #
+uca1400_turkish_ai_ci NULL NULL NULL # #
+uca1400_turkish_ai_cs NULL NULL NULL # #
+uca1400_turkish_as_ci NULL NULL NULL # #
+uca1400_turkish_as_cs NULL NULL NULL # #
+uca1400_turkish_nopad_ai_ci NULL NULL NULL # #
+uca1400_turkish_nopad_ai_cs NULL NULL NULL # #
+uca1400_turkish_nopad_as_ci NULL NULL NULL # #
+uca1400_turkish_nopad_as_cs NULL NULL NULL # #
+uca1400_czech_ai_ci NULL NULL NULL # #
+uca1400_czech_ai_cs NULL NULL NULL # #
+uca1400_czech_as_ci NULL NULL NULL # #
+uca1400_czech_as_cs NULL NULL NULL # #
+uca1400_czech_nopad_ai_ci NULL NULL NULL # #
+uca1400_czech_nopad_ai_cs NULL NULL NULL # #
+uca1400_czech_nopad_as_ci NULL NULL NULL # #
+uca1400_czech_nopad_as_cs NULL NULL NULL # #
+uca1400_danish_ai_ci NULL NULL NULL # #
+uca1400_danish_ai_cs NULL NULL NULL # #
+uca1400_danish_as_ci NULL NULL NULL # #
+uca1400_danish_as_cs NULL NULL NULL # #
+uca1400_danish_nopad_ai_ci NULL NULL NULL # #
+uca1400_danish_nopad_ai_cs NULL NULL NULL # #
+uca1400_danish_nopad_as_ci NULL NULL NULL # #
+uca1400_danish_nopad_as_cs NULL NULL NULL # #
+uca1400_lithuanian_ai_ci NULL NULL NULL # #
+uca1400_lithuanian_ai_cs NULL NULL NULL # #
+uca1400_lithuanian_as_ci NULL NULL NULL # #
+uca1400_lithuanian_as_cs NULL NULL NULL # #
+uca1400_lithuanian_nopad_ai_ci NULL NULL NULL # #
+uca1400_lithuanian_nopad_ai_cs NULL NULL NULL # #
+uca1400_lithuanian_nopad_as_ci NULL NULL NULL # #
+uca1400_lithuanian_nopad_as_cs NULL NULL NULL # #
+uca1400_slovak_ai_ci NULL NULL NULL # #
+uca1400_slovak_ai_cs NULL NULL NULL # #
+uca1400_slovak_as_ci NULL NULL NULL # #
+uca1400_slovak_as_cs NULL NULL NULL # #
+uca1400_slovak_nopad_ai_ci NULL NULL NULL # #
+uca1400_slovak_nopad_ai_cs NULL NULL NULL # #
+uca1400_slovak_nopad_as_ci NULL NULL NULL # #
+uca1400_slovak_nopad_as_cs NULL NULL NULL # #
+uca1400_spanish2_ai_ci NULL NULL NULL # #
+uca1400_spanish2_ai_cs NULL NULL NULL # #
+uca1400_spanish2_as_ci NULL NULL NULL # #
+uca1400_spanish2_as_cs NULL NULL NULL # #
+uca1400_spanish2_nopad_ai_ci NULL NULL NULL # #
+uca1400_spanish2_nopad_ai_cs NULL NULL NULL # #
+uca1400_spanish2_nopad_as_ci NULL NULL NULL # #
+uca1400_spanish2_nopad_as_cs NULL NULL NULL # #
+uca1400_roman_ai_ci NULL NULL NULL # #
+uca1400_roman_ai_cs NULL NULL NULL # #
+uca1400_roman_as_ci NULL NULL NULL # #
+uca1400_roman_as_cs NULL NULL NULL # #
+uca1400_roman_nopad_ai_ci NULL NULL NULL # #
+uca1400_roman_nopad_ai_cs NULL NULL NULL # #
+uca1400_roman_nopad_as_ci NULL NULL NULL # #
+uca1400_roman_nopad_as_cs NULL NULL NULL # #
+uca1400_persian_ai_ci NULL NULL NULL # #
+uca1400_persian_ai_cs NULL NULL NULL # #
+uca1400_persian_as_ci NULL NULL NULL # #
+uca1400_persian_as_cs NULL NULL NULL # #
+uca1400_persian_nopad_ai_ci NULL NULL NULL # #
+uca1400_persian_nopad_ai_cs NULL NULL NULL # #
+uca1400_persian_nopad_as_ci NULL NULL NULL # #
+uca1400_persian_nopad_as_cs NULL NULL NULL # #
+uca1400_esperanto_ai_ci NULL NULL NULL # #
+uca1400_esperanto_ai_cs NULL NULL NULL # #
+uca1400_esperanto_as_ci NULL NULL NULL # #
+uca1400_esperanto_as_cs NULL NULL NULL # #
+uca1400_esperanto_nopad_ai_ci NULL NULL NULL # #
+uca1400_esperanto_nopad_ai_cs NULL NULL NULL # #
+uca1400_esperanto_nopad_as_ci NULL NULL NULL # #
+uca1400_esperanto_nopad_as_cs NULL NULL NULL # #
+uca1400_hungarian_ai_ci NULL NULL NULL # #
+uca1400_hungarian_ai_cs NULL NULL NULL # #
+uca1400_hungarian_as_ci NULL NULL NULL # #
+uca1400_hungarian_as_cs NULL NULL NULL # #
+uca1400_hungarian_nopad_ai_ci NULL NULL NULL # #
+uca1400_hungarian_nopad_ai_cs NULL NULL NULL # #
+uca1400_hungarian_nopad_as_ci NULL NULL NULL # #
+uca1400_hungarian_nopad_as_cs NULL NULL NULL # #
+uca1400_sinhala_ai_ci NULL NULL NULL # #
+uca1400_sinhala_ai_cs NULL NULL NULL # #
+uca1400_sinhala_as_ci NULL NULL NULL # #
+uca1400_sinhala_as_cs NULL NULL NULL # #
+uca1400_sinhala_nopad_ai_ci NULL NULL NULL # #
+uca1400_sinhala_nopad_ai_cs NULL NULL NULL # #
+uca1400_sinhala_nopad_as_ci NULL NULL NULL # #
+uca1400_sinhala_nopad_as_cs NULL NULL NULL # #
+uca1400_german2_ai_ci NULL NULL NULL # #
+uca1400_german2_ai_cs NULL NULL NULL # #
+uca1400_german2_as_ci NULL NULL NULL # #
+uca1400_german2_as_cs NULL NULL NULL # #
+uca1400_german2_nopad_ai_ci NULL NULL NULL # #
+uca1400_german2_nopad_ai_cs NULL NULL NULL # #
+uca1400_german2_nopad_as_ci NULL NULL NULL # #
+uca1400_german2_nopad_as_cs NULL NULL NULL # #
+uca1400_vietnamese_ai_ci NULL NULL NULL # #
+uca1400_vietnamese_ai_cs NULL NULL NULL # #
+uca1400_vietnamese_as_ci NULL NULL NULL # #
+uca1400_vietnamese_as_cs NULL NULL NULL # #
+uca1400_vietnamese_nopad_ai_ci NULL NULL NULL # #
+uca1400_vietnamese_nopad_ai_cs NULL NULL NULL # #
+uca1400_vietnamese_nopad_as_ci NULL NULL NULL # #
+uca1400_vietnamese_nopad_as_cs NULL NULL NULL # #
+uca1400_croatian_ai_ci NULL NULL NULL # #
+uca1400_croatian_ai_cs NULL NULL NULL # #
+uca1400_croatian_as_ci NULL NULL NULL # #
+uca1400_croatian_as_cs NULL NULL NULL # #
+uca1400_croatian_nopad_ai_ci NULL NULL NULL # #
+uca1400_croatian_nopad_ai_cs NULL NULL NULL # #
+uca1400_croatian_nopad_as_ci NULL NULL NULL # #
+uca1400_croatian_nopad_as_cs NULL NULL NULL # #
cp1251_bulgarian_ci cp1251 14 # #
cp1251_ukrainian_ci cp1251 23 # #
cp1251_bin cp1251 50 # #
diff --git a/mysql-test/suite/engines/funcs/r/ix_index_non_string.result b/mysql-test/suite/engines/funcs/r/ix_index_non_string.result
index 84777236ddb..f56fe4f83f4 100644
--- a/mysql-test/suite/engines/funcs/r/ix_index_non_string.result
+++ b/mysql-test/suite/engines/funcs/r/ix_index_non_string.result
@@ -427,7 +427,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
KEY `i1` (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
diff --git a/mysql-test/suite/engines/funcs/r/ix_unique_non_string.result b/mysql-test/suite/engines/funcs/r/ix_unique_non_string.result
index b99751d9f6c..9f10a9bfb13 100644
--- a/mysql-test/suite/engines/funcs/r/ix_unique_non_string.result
+++ b/mysql-test/suite/engines/funcs/r/ix_unique_non_string.result
@@ -427,7 +427,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
UNIQUE KEY `i1` (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
diff --git a/mysql-test/suite/engines/funcs/r/rpl_000010.result b/mysql-test/suite/engines/funcs/r/rpl_000010.result
index ae989f25e1b..a86d71bd33f 100644
--- a/mysql-test/suite/engines/funcs/r/rpl_000010.result
+++ b/mysql-test/suite/engines/funcs/r/rpl_000010.result
@@ -1,5 +1,10 @@
include/master-slave.inc
[connection master]
+connection slave;
+include/stop_slave.inc
+CHANGE MASTER TO MASTER_USE_GTID=NO;
+include/start_slave.inc
+connection master;
create table t1 (n int not null auto_increment primary key);
insert into t1 values(NULL);
insert into t1 values(2);
diff --git a/mysql-test/suite/engines/funcs/r/rpl_change_master.result b/mysql-test/suite/engines/funcs/r/rpl_change_master.result
index 48cec72d917..88801b07bba 100644
--- a/mysql-test/suite/engines/funcs/r/rpl_change_master.result
+++ b/mysql-test/suite/engines/funcs/r/rpl_change_master.result
@@ -26,4 +26,9 @@ connection master;
CHANGE MASTER TO MASTER_USER='root', MASTER_SSL=0, MASTER_SSL_CA='', MASTER_SSL_CERT='',
MASTER_SSL_KEY='', MASTER_SSL_CRL='', MASTER_SSL_CRLPATH='';
CHANGE MASTER TO MASTER_USER='root', MASTER_PASSWORD='', MASTER_SSL=0;
+"Usage of CURRENT_POS in CHANGE MASTER MASTER_USE_GTID is dreprecated.
+CHANGE MASTER TO MASTER_USE_GTID=CURRENT_POS;
+Warnings:
+Warning 1681 'master_use_gtid=current_pos' is deprecated and will be removed in a future release. Please use master_demote_to_slave=1 instead
+CHANGE MASTER TO MASTER_USE_GTID=SLAVE_POS;
include/rpl_end.inc
diff --git a/mysql-test/suite/engines/funcs/r/rpl_log_pos.result b/mysql-test/suite/engines/funcs/r/rpl_log_pos.result
index 7f5f34bf831..74080b3936f 100644
--- a/mysql-test/suite/engines/funcs/r/rpl_log_pos.result
+++ b/mysql-test/suite/engines/funcs/r/rpl_log_pos.result
@@ -9,7 +9,7 @@ File Position Binlog_Do_DB Binlog_Ignore_DB
master-bin.000001 # <Binlog_Do_DB> <Binlog_Ignore_DB>
connection slave;
include/stop_slave.inc
-change master to master_log_pos=MASTER_LOG_POS;
+change master to master_log_pos=MASTER_LOG_POS, master_use_gtid=no;
start slave;
include/wait_for_slave_io_error.inc [errno=1236]
Last_IO_Error = 'Got fatal error 1236 from master when reading data from binary log: 'binlog truncated in the middle of event; consider out of disk space on master; the first event 'master-bin.000001' at XXX, the last event read from 'master-bin.000001' at XXX, the last byte read from 'master-bin.000001' at XXX.''
@@ -23,7 +23,7 @@ drop table if exists t1;
create table t1 (n int);
insert into t1 values (1),(2),(3);
connection slave;
-change master to master_log_pos=MASTER_LOG_POS;
+change master to master_log_pos=MASTER_LOG_POS, master_use_gtid=no;
start slave;
select * from t1 ORDER BY n;
n
diff --git a/mysql-test/suite/engines/funcs/r/rpl_row_reset_slave.result b/mysql-test/suite/engines/funcs/r/rpl_row_reset_slave.result
index b9e98d5a97d..5e595447e50 100644
--- a/mysql-test/suite/engines/funcs/r/rpl_row_reset_slave.result
+++ b/mysql-test/suite/engines/funcs/r/rpl_row_reset_slave.result
@@ -7,7 +7,7 @@ include/stop_slave.inc
change master to master_user='test';
Master_User = 'test'
Master_Host = '127.0.0.1'
-reset slave;
+include/reset_slave.inc
Master_User = 'test'
Master_Host = '127.0.0.1'
change master to master_user='root';
@@ -15,13 +15,13 @@ include/start_slave.inc
Master_User = 'root'
Master_Host = '127.0.0.1'
include/stop_slave.inc
-reset slave;
+include/reset_slave.inc
include/start_slave.inc
connection master;
create temporary table t1 (a int);
connection slave;
include/stop_slave.inc
-reset slave;
+include/reset_slave.inc
include/start_slave.inc
show status like 'slave_open_temp_tables';
Variable_name Value
@@ -30,7 +30,7 @@ connection master;
drop temporary table if exists t1;
connection slave;
include/stop_slave.inc
-reset slave;
+include/reset_slave.inc
include/check_slave_no_error.inc
change master to master_user='impossible_user_name';
start slave;
@@ -44,13 +44,14 @@ change master to master_user='impossible_user_name';
start slave;
include/wait_for_slave_io_error.inc [errno=1045]
include/stop_slave_sql.inc
-reset slave;
+include/reset_slave.inc
include/check_slave_no_error.inc
change master to master_user='root';
-reset slave;
+include/reset_slave.inc
include/start_slave.inc
include/stop_slave.inc
reset slave all;
+set @@global.gtid_slave_pos= "";
start slave;
ERROR HY000: Misconfigured slave: MASTER_HOST was not set; Fix in config file or with CHANGE MASTER TO
CHANGE MASTER TO MASTER_HOST= 'MASTER_HOST', MASTER_USER= 'MASTER_USER', MASTER_PORT= MASTER_PORT;
diff --git a/mysql-test/suite/engines/funcs/r/rpl_row_until.result b/mysql-test/suite/engines/funcs/r/rpl_row_until.result
index 82268ce72eb..8ef10bf47b5 100644
--- a/mysql-test/suite/engines/funcs/r/rpl_row_until.result
+++ b/mysql-test/suite/engines/funcs/r/rpl_row_until.result
@@ -10,7 +10,7 @@ INSERT INTO t2 VALUES (3),(4);
DROP TABLE t2;
connection slave;
include/stop_slave.inc
-RESET SLAVE;
+include/reset_slave.inc
CHANGE MASTER TO MASTER_USER='root', MASTER_CONNECT_RETRY=1, MASTER_HOST='127.0.0.1', MASTER_PORT=MASTER_MYPORT;
connection slave;
START SLAVE UNTIL MASTER_LOG_FILE='master-bin.000001', MASTER_LOG_POS=master_pos_drop_t1;
@@ -52,7 +52,7 @@ START SLAVE UNTIL RELAY_LOG_FILE='slave-relay-bin.000002', MASTER_LOG_POS=MASTER
ERROR HY000: Incorrect parameter or combination of parameters for START SLAVE UNTIL
START SLAVE UNTIL MASTER_LOG_FILE='master-bin.000001', MASTER_LOG_POS=MASTER_LOG_POS;
include/stop_slave.inc
-RESET SLAVE;
+include/reset_slave.inc
include/start_slave.inc
include/rpl_reset.inc
connection master;
diff --git a/mysql-test/suite/engines/funcs/r/rpl_server_id2.result b/mysql-test/suite/engines/funcs/r/rpl_server_id2.result
index 74145645920..3d8eeb02ca6 100644
--- a/mysql-test/suite/engines/funcs/r/rpl_server_id2.result
+++ b/mysql-test/suite/engines/funcs/r/rpl_server_id2.result
@@ -1,6 +1,9 @@
include/master-slave.inc
[connection master]
connection slave;
+include/stop_slave.inc
+CHANGE MASTER TO MASTER_USE_GTID=NO;
+include/start_slave.inc
create table t1 (n int);
reset master;
stop slave;
diff --git a/mysql-test/suite/engines/funcs/r/rpl_sp.result b/mysql-test/suite/engines/funcs/r/rpl_sp.result
index 7240e5b269a..3905c7b56dd 100644
--- a/mysql-test/suite/engines/funcs/r/rpl_sp.result
+++ b/mysql-test/suite/engines/funcs/r/rpl_sp.result
@@ -771,7 +771,7 @@ DELIMITER /*!*/;
ROLLBACK/*!*/;
SET TIMESTAMP=t/*!*/;
SET @@session.pseudo_thread_id=999999999/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
diff --git a/mysql-test/suite/engines/funcs/r/rpl_stm_reset_slave.result b/mysql-test/suite/engines/funcs/r/rpl_stm_reset_slave.result
index 1ba2d1b624b..0a365b30b38 100644
--- a/mysql-test/suite/engines/funcs/r/rpl_stm_reset_slave.result
+++ b/mysql-test/suite/engines/funcs/r/rpl_stm_reset_slave.result
@@ -7,7 +7,7 @@ include/stop_slave.inc
change master to master_user='test';
Master_User = 'test'
Master_Host = '127.0.0.1'
-reset slave;
+include/reset_slave.inc
Master_User = 'test'
Master_Host = '127.0.0.1'
change master to master_user='root';
@@ -15,13 +15,13 @@ include/start_slave.inc
Master_User = 'root'
Master_Host = '127.0.0.1'
include/stop_slave.inc
-reset slave;
+include/reset_slave.inc
include/start_slave.inc
connection master;
create temporary table t1 (a int);
connection slave;
include/stop_slave.inc
-reset slave;
+include/reset_slave.inc
include/start_slave.inc
show status like 'slave_open_temp_tables';
Variable_name Value
@@ -30,7 +30,7 @@ connection master;
drop temporary table if exists t1;
connection slave;
include/stop_slave.inc
-reset slave;
+include/reset_slave.inc
include/check_slave_no_error.inc
change master to master_user='impossible_user_name';
start slave;
@@ -44,13 +44,14 @@ change master to master_user='impossible_user_name';
start slave;
include/wait_for_slave_io_error.inc [errno=1045]
include/stop_slave_sql.inc
-reset slave;
+include/reset_slave.inc
include/check_slave_no_error.inc
change master to master_user='root';
-reset slave;
+include/reset_slave.inc
include/start_slave.inc
include/stop_slave.inc
reset slave all;
+set @@global.gtid_slave_pos= "";
start slave;
ERROR HY000: Misconfigured slave: MASTER_HOST was not set; Fix in config file or with CHANGE MASTER TO
CHANGE MASTER TO MASTER_HOST= 'MASTER_HOST', MASTER_USER= 'MASTER_USER', MASTER_PORT= MASTER_PORT;
diff --git a/mysql-test/suite/engines/funcs/r/rpl_trigger.result b/mysql-test/suite/engines/funcs/r/rpl_trigger.result
index b5b88670fc6..3913508d032 100644
--- a/mysql-test/suite/engines/funcs/r/rpl_trigger.result
+++ b/mysql-test/suite/engines/funcs/r/rpl_trigger.result
@@ -1,5 +1,10 @@
include/master-slave.inc
[connection master]
+connection slave;
+include/stop_slave.inc
+CHANGE MASTER TO MASTER_USE_GTID=NO;
+include/start_slave.inc
+connection master;
call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT");
create table t1 (a int auto_increment, primary key (a), b int, rand_value double not null);
create table t2 (a int auto_increment, primary key (a), b int);
@@ -960,7 +965,9 @@ include/rpl_stop_server.inc [server_number=1]
include/rpl_start_server.inc [server_number=1]
--> Master binlog: Server ver: 5.0.16-debug-log, Binlog ver: 4
connection slave;
-RESET SLAVE;
+include/reset_slave.inc
+Warnings:
+Note 4190 RESET SLAVE is implicitly changing the value of 'Using_Gtid' from 'No' to 'Slave_Pos'
include/start_slave.inc
SELECT MASTER_POS_WAIT('master-bin.000001', 513) >= 0;
MASTER_POS_WAIT('master-bin.000001', 513) >= 0
@@ -991,7 +998,9 @@ DROP TRIGGER trg1;
DROP TABLE t1;
DROP TABLE t2;
include/stop_slave.inc
-RESET SLAVE;
+include/reset_slave.inc
+Warnings:
+Note 4190 RESET SLAVE is implicitly changing the value of 'Using_Gtid' from 'No' to 'Slave_Pos'
connection master;
SHOW TABLES LIKE 't_';
Tables_in_test (t_)
diff --git a/mysql-test/suite/engines/funcs/r/ta_2part_column_to_pk.result b/mysql-test/suite/engines/funcs/r/ta_2part_column_to_pk.result
index 626c5a6de45..43178243129 100644
--- a/mysql-test/suite/engines/funcs/r/ta_2part_column_to_pk.result
+++ b/mysql-test/suite/engines/funcs/r/ta_2part_column_to_pk.result
@@ -342,8 +342,8 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
- `c2` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00'
+ `c1` timestamp NOT NULL,
+ `c2` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD PRIMARY KEY (c1,c2);
SHOW TABLES;
@@ -352,8 +352,8 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
- `c2` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c1` timestamp NOT NULL,
+ `c2` timestamp NOT NULL,
PRIMARY KEY (`c1`,`c2`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
diff --git a/mysql-test/suite/engines/funcs/r/ta_2part_diff_to_pk.result b/mysql-test/suite/engines/funcs/r/ta_2part_diff_to_pk.result
index 54f83cfad51..ec163b21e57 100644
--- a/mysql-test/suite/engines/funcs/r/ta_2part_diff_to_pk.result
+++ b/mysql-test/suite/engines/funcs/r/ta_2part_diff_to_pk.result
@@ -398,7 +398,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` bit(1) NOT NULL,
`c3` int(11) DEFAULT NULL,
`c4` varchar(10) NOT NULL
@@ -410,7 +410,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` bit(1) NOT NULL,
`c3` int(11) DEFAULT NULL,
`c4` varchar(10) NOT NULL,
@@ -846,7 +846,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` tinyint(4) NOT NULL,
`c3` int(11) DEFAULT NULL,
`c4` varchar(10) NOT NULL
@@ -858,7 +858,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` tinyint(4) NOT NULL,
`c3` int(11) DEFAULT NULL,
`c4` varchar(10) NOT NULL,
@@ -1294,7 +1294,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` smallint(6) NOT NULL,
`c3` int(11) DEFAULT NULL,
`c4` varchar(10) NOT NULL
@@ -1306,7 +1306,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` smallint(6) NOT NULL,
`c3` int(11) DEFAULT NULL,
`c4` varchar(10) NOT NULL,
@@ -1742,7 +1742,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` mediumint(9) NOT NULL,
`c3` int(11) DEFAULT NULL,
`c4` varchar(10) NOT NULL
@@ -1754,7 +1754,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` mediumint(9) NOT NULL,
`c3` int(11) DEFAULT NULL,
`c4` varchar(10) NOT NULL,
@@ -2190,7 +2190,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` int(11) NOT NULL,
`c3` int(11) DEFAULT NULL,
`c4` varchar(10) NOT NULL
@@ -2202,7 +2202,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` int(11) NOT NULL,
`c3` int(11) DEFAULT NULL,
`c4` varchar(10) NOT NULL,
@@ -2638,7 +2638,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` int(11) NOT NULL,
`c3` int(11) DEFAULT NULL,
`c4` varchar(10) NOT NULL
@@ -2650,7 +2650,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` int(11) NOT NULL,
`c3` int(11) DEFAULT NULL,
`c4` varchar(10) NOT NULL,
@@ -3086,7 +3086,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` bigint(20) NOT NULL,
`c3` int(11) DEFAULT NULL,
`c4` varchar(10) NOT NULL
@@ -3098,7 +3098,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` bigint(20) NOT NULL,
`c3` int(11) DEFAULT NULL,
`c4` varchar(10) NOT NULL,
@@ -3534,7 +3534,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` double NOT NULL,
`c3` int(11) DEFAULT NULL,
`c4` varchar(10) NOT NULL
@@ -3546,7 +3546,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` double NOT NULL,
`c3` int(11) DEFAULT NULL,
`c4` varchar(10) NOT NULL,
@@ -3982,7 +3982,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` double NOT NULL,
`c3` int(11) DEFAULT NULL,
`c4` varchar(10) NOT NULL
@@ -3994,7 +3994,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` double NOT NULL,
`c3` int(11) DEFAULT NULL,
`c4` varchar(10) NOT NULL,
@@ -4430,7 +4430,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` float NOT NULL,
`c3` int(11) DEFAULT NULL,
`c4` varchar(10) NOT NULL
@@ -4442,7 +4442,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` float NOT NULL,
`c3` int(11) DEFAULT NULL,
`c4` varchar(10) NOT NULL,
@@ -4878,7 +4878,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` decimal(10,0) NOT NULL,
`c3` int(11) DEFAULT NULL,
`c4` varchar(10) NOT NULL
@@ -4890,7 +4890,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` decimal(10,0) NOT NULL,
`c3` int(11) DEFAULT NULL,
`c4` varchar(10) NOT NULL,
@@ -5326,7 +5326,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` decimal(10,0) NOT NULL,
`c3` int(11) DEFAULT NULL,
`c4` varchar(10) NOT NULL
@@ -5338,7 +5338,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` decimal(10,0) NOT NULL,
`c3` int(11) DEFAULT NULL,
`c4` varchar(10) NOT NULL,
@@ -5774,7 +5774,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` date NOT NULL,
`c3` int(11) DEFAULT NULL,
`c4` varchar(10) NOT NULL
@@ -5786,7 +5786,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` date NOT NULL,
`c3` int(11) DEFAULT NULL,
`c4` varchar(10) NOT NULL,
@@ -6222,7 +6222,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` time NOT NULL,
`c3` int(11) DEFAULT NULL,
`c4` varchar(10) NOT NULL
@@ -6234,7 +6234,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` time NOT NULL,
`c3` int(11) DEFAULT NULL,
`c4` varchar(10) NOT NULL,
@@ -6279,7 +6279,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` bit(1) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c2` timestamp NOT NULL,
`c3` int(11) DEFAULT NULL,
`c4` varchar(10) NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
@@ -6291,7 +6291,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` bit(1) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c2` timestamp NOT NULL,
`c3` int(11) DEFAULT NULL,
`c4` varchar(10) NOT NULL,
PRIMARY KEY (`c1`,`c2`)
@@ -6307,7 +6307,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` tinyint(4) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c2` timestamp NOT NULL,
`c3` int(11) DEFAULT NULL,
`c4` varchar(10) NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
@@ -6319,7 +6319,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` tinyint(4) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c2` timestamp NOT NULL,
`c3` int(11) DEFAULT NULL,
`c4` varchar(10) NOT NULL,
PRIMARY KEY (`c1`,`c2`)
@@ -6335,7 +6335,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` smallint(6) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c2` timestamp NOT NULL,
`c3` int(11) DEFAULT NULL,
`c4` varchar(10) NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
@@ -6347,7 +6347,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` smallint(6) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c2` timestamp NOT NULL,
`c3` int(11) DEFAULT NULL,
`c4` varchar(10) NOT NULL,
PRIMARY KEY (`c1`,`c2`)
@@ -6363,7 +6363,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` mediumint(9) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c2` timestamp NOT NULL,
`c3` int(11) DEFAULT NULL,
`c4` varchar(10) NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
@@ -6375,7 +6375,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` mediumint(9) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c2` timestamp NOT NULL,
`c3` int(11) DEFAULT NULL,
`c4` varchar(10) NOT NULL,
PRIMARY KEY (`c1`,`c2`)
@@ -6391,7 +6391,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c2` timestamp NOT NULL,
`c3` int(11) DEFAULT NULL,
`c4` varchar(10) NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
@@ -6403,7 +6403,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c2` timestamp NOT NULL,
`c3` int(11) DEFAULT NULL,
`c4` varchar(10) NOT NULL,
PRIMARY KEY (`c1`,`c2`)
@@ -6419,7 +6419,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c2` timestamp NOT NULL,
`c3` int(11) DEFAULT NULL,
`c4` varchar(10) NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
@@ -6431,7 +6431,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c2` timestamp NOT NULL,
`c3` int(11) DEFAULT NULL,
`c4` varchar(10) NOT NULL,
PRIMARY KEY (`c1`,`c2`)
@@ -6447,7 +6447,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` bigint(20) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c2` timestamp NOT NULL,
`c3` int(11) DEFAULT NULL,
`c4` varchar(10) NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
@@ -6459,7 +6459,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` bigint(20) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c2` timestamp NOT NULL,
`c3` int(11) DEFAULT NULL,
`c4` varchar(10) NOT NULL,
PRIMARY KEY (`c1`,`c2`)
@@ -6475,7 +6475,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` double NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c2` timestamp NOT NULL,
`c3` int(11) DEFAULT NULL,
`c4` varchar(10) NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
@@ -6487,7 +6487,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` double NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c2` timestamp NOT NULL,
`c3` int(11) DEFAULT NULL,
`c4` varchar(10) NOT NULL,
PRIMARY KEY (`c1`,`c2`)
@@ -6503,7 +6503,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` double NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c2` timestamp NOT NULL,
`c3` int(11) DEFAULT NULL,
`c4` varchar(10) NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
@@ -6515,7 +6515,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` double NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c2` timestamp NOT NULL,
`c3` int(11) DEFAULT NULL,
`c4` varchar(10) NOT NULL,
PRIMARY KEY (`c1`,`c2`)
@@ -6531,7 +6531,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` float NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c2` timestamp NOT NULL,
`c3` int(11) DEFAULT NULL,
`c4` varchar(10) NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
@@ -6543,7 +6543,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` float NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c2` timestamp NOT NULL,
`c3` int(11) DEFAULT NULL,
`c4` varchar(10) NOT NULL,
PRIMARY KEY (`c1`,`c2`)
@@ -6559,7 +6559,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` decimal(10,0) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c2` timestamp NOT NULL,
`c3` int(11) DEFAULT NULL,
`c4` varchar(10) NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
@@ -6571,7 +6571,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` decimal(10,0) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c2` timestamp NOT NULL,
`c3` int(11) DEFAULT NULL,
`c4` varchar(10) NOT NULL,
PRIMARY KEY (`c1`,`c2`)
@@ -6587,7 +6587,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` decimal(10,0) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c2` timestamp NOT NULL,
`c3` int(11) DEFAULT NULL,
`c4` varchar(10) NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
@@ -6599,7 +6599,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` decimal(10,0) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c2` timestamp NOT NULL,
`c3` int(11) DEFAULT NULL,
`c4` varchar(10) NOT NULL,
PRIMARY KEY (`c1`,`c2`)
@@ -6615,7 +6615,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` date NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c2` timestamp NOT NULL,
`c3` int(11) DEFAULT NULL,
`c4` varchar(10) NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
@@ -6627,7 +6627,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` date NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c2` timestamp NOT NULL,
`c3` int(11) DEFAULT NULL,
`c4` varchar(10) NOT NULL,
PRIMARY KEY (`c1`,`c2`)
@@ -6643,7 +6643,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` time NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c2` timestamp NOT NULL,
`c3` int(11) DEFAULT NULL,
`c4` varchar(10) NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
@@ -6655,7 +6655,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` time NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c2` timestamp NOT NULL,
`c3` int(11) DEFAULT NULL,
`c4` varchar(10) NOT NULL,
PRIMARY KEY (`c1`,`c2`)
@@ -6670,8 +6670,8 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
- `c2` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c1` timestamp NOT NULL,
+ `c2` timestamp NOT NULL,
`c3` int(11) DEFAULT NULL,
`c4` varchar(10) NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
@@ -6682,8 +6682,8 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
- `c2` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c1` timestamp NOT NULL,
+ `c2` timestamp NOT NULL,
`c3` int(11) DEFAULT NULL,
`c4` varchar(10) NOT NULL,
PRIMARY KEY (`c1`,`c2`)
@@ -6699,7 +6699,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` year(4) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c2` timestamp NOT NULL,
`c3` int(11) DEFAULT NULL,
`c4` varchar(10) NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
@@ -6711,7 +6711,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` year(4) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c2` timestamp NOT NULL,
`c3` int(11) DEFAULT NULL,
`c4` varchar(10) NOT NULL,
PRIMARY KEY (`c1`,`c2`)
@@ -7118,7 +7118,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` year(4) NOT NULL,
`c3` int(11) DEFAULT NULL,
`c4` varchar(10) NOT NULL
@@ -7130,7 +7130,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` year(4) NOT NULL,
`c3` int(11) DEFAULT NULL,
`c4` varchar(10) NOT NULL,
diff --git a/mysql-test/suite/engines/funcs/r/ta_3part_column_to_pk.result b/mysql-test/suite/engines/funcs/r/ta_3part_column_to_pk.result
index b0eab6dc214..dda36fa2fb0 100644
--- a/mysql-test/suite/engines/funcs/r/ta_3part_column_to_pk.result
+++ b/mysql-test/suite/engines/funcs/r/ta_3part_column_to_pk.result
@@ -370,9 +370,9 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
- `c2` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
- `c3` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00'
+ `c1` timestamp NOT NULL,
+ `c2` timestamp NOT NULL,
+ `c3` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD PRIMARY KEY (c1,c2,c3);
SHOW TABLES;
@@ -381,9 +381,9 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
- `c2` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
- `c3` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c1` timestamp NOT NULL,
+ `c2` timestamp NOT NULL,
+ `c3` timestamp NOT NULL,
PRIMARY KEY (`c1`,`c2`,`c3`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
diff --git a/mysql-test/suite/engines/funcs/r/ta_add_column.result b/mysql-test/suite/engines/funcs/r/ta_add_column.result
index 063f41c62e6..43212cec556 100644
--- a/mysql-test/suite/engines/funcs/r/ta_add_column.result
+++ b/mysql-test/suite/engines/funcs/r/ta_add_column.result
@@ -842,7 +842,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c2 BIT NOT NULL;
SHOW TABLES;
@@ -851,7 +851,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` bit(1) NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -1898,7 +1898,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c2 TINYINT NOT NULL;
SHOW TABLES;
@@ -1907,7 +1907,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` tinyint(4) NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -2954,7 +2954,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c2 SMALLINT NOT NULL;
SHOW TABLES;
@@ -2963,7 +2963,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` smallint(6) NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -4010,7 +4010,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c2 MEDIUMINT NOT NULL;
SHOW TABLES;
@@ -4019,7 +4019,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` mediumint(9) NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -5066,7 +5066,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c2 INT NOT NULL;
SHOW TABLES;
@@ -5075,7 +5075,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` int(11) NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -6122,7 +6122,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c2 INTEGER NOT NULL;
SHOW TABLES;
@@ -6131,7 +6131,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` int(11) NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -7178,7 +7178,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c2 BIGINT NOT NULL;
SHOW TABLES;
@@ -7187,7 +7187,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` bigint(20) NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -8234,7 +8234,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c2 REAL NOT NULL;
SHOW TABLES;
@@ -8243,7 +8243,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` double NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -9290,7 +9290,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c2 DOUBLE NOT NULL;
SHOW TABLES;
@@ -9299,7 +9299,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` double NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -10346,7 +10346,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c2 FLOAT NOT NULL;
SHOW TABLES;
@@ -10355,7 +10355,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` float NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -11402,7 +11402,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c2 DECIMAL NOT NULL;
SHOW TABLES;
@@ -11411,7 +11411,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` decimal(10,0) NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -12458,7 +12458,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c2 NUMERIC NOT NULL;
SHOW TABLES;
@@ -12467,7 +12467,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` decimal(10,0) NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -13514,7 +13514,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c2 DATE NOT NULL;
SHOW TABLES;
@@ -13523,7 +13523,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` date NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -14570,7 +14570,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c2 TIME NOT NULL;
SHOW TABLES;
@@ -14579,7 +14579,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` time NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -15328,7 +15328,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` bit(1) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c2` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
SHOW TABLES;
@@ -15350,7 +15350,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` tinyint(4) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c2` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
SHOW TABLES;
@@ -15372,7 +15372,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` smallint(6) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c2` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
SHOW TABLES;
@@ -15394,7 +15394,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` mediumint(9) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c2` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
SHOW TABLES;
@@ -15416,7 +15416,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c2` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
SHOW TABLES;
@@ -15438,7 +15438,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c2` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
SHOW TABLES;
@@ -15460,7 +15460,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` bigint(20) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c2` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
SHOW TABLES;
@@ -15482,7 +15482,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` double NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c2` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
SHOW TABLES;
@@ -15504,7 +15504,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` double NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c2` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
SHOW TABLES;
@@ -15526,7 +15526,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` float NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c2` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
SHOW TABLES;
@@ -15548,7 +15548,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` decimal(10,0) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c2` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
SHOW TABLES;
@@ -15570,7 +15570,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` decimal(10,0) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c2` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
SHOW TABLES;
@@ -15592,7 +15592,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` date NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c2` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
SHOW TABLES;
@@ -15614,7 +15614,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` time NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c2` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
SHOW TABLES;
@@ -15626,7 +15626,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c2 TIMESTAMP NOT NULL;
SHOW TABLES;
@@ -15635,8 +15635,8 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
- `c2` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00'
+ `c1` timestamp NOT NULL,
+ `c2` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
SHOW TABLES;
@@ -15658,7 +15658,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` year(4) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c2` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
SHOW TABLES;
@@ -15680,7 +15680,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` tinyblob NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c2` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
SHOW TABLES;
@@ -15702,7 +15702,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` blob NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c2` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
SHOW TABLES;
@@ -15724,7 +15724,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` mediumblob NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c2` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
SHOW TABLES;
@@ -15746,7 +15746,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` longblob NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c2` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
SHOW TABLES;
@@ -15768,7 +15768,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` tinytext NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c2` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
SHOW TABLES;
@@ -15790,7 +15790,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` text NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c2` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
SHOW TABLES;
@@ -15812,7 +15812,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` mediumtext NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c2` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
SHOW TABLES;
@@ -15834,7 +15834,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` longtext NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c2` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
SHOW TABLES;
@@ -16682,7 +16682,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c2 YEAR NOT NULL;
SHOW TABLES;
@@ -16691,7 +16691,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` year(4) NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -17738,7 +17738,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c2 TINYBLOB NOT NULL;
SHOW TABLES;
@@ -17747,7 +17747,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` tinyblob NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -18794,7 +18794,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c2 BLOB NOT NULL;
SHOW TABLES;
@@ -18803,7 +18803,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` blob NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -19850,7 +19850,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c2 MEDIUMBLOB NOT NULL;
SHOW TABLES;
@@ -19859,7 +19859,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` mediumblob NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -20906,7 +20906,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c2 LONGBLOB NOT NULL;
SHOW TABLES;
@@ -20915,7 +20915,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` longblob NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -21962,7 +21962,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c2 TINYTEXT NOT NULL;
SHOW TABLES;
@@ -21971,7 +21971,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` tinytext NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -23018,7 +23018,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c2 TEXT NOT NULL;
SHOW TABLES;
@@ -23027,7 +23027,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` text NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -24074,7 +24074,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c2 MEDIUMTEXT NOT NULL;
SHOW TABLES;
@@ -24083,7 +24083,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` mediumtext NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -25130,7 +25130,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c2 LONGTEXT NOT NULL;
SHOW TABLES;
@@ -25139,7 +25139,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` longtext NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
diff --git a/mysql-test/suite/engines/funcs/r/ta_add_column2.result b/mysql-test/suite/engines/funcs/r/ta_add_column2.result
index 79afc094045..9ff6012049d 100644
--- a/mysql-test/suite/engines/funcs/r/ta_add_column2.result
+++ b/mysql-test/suite/engines/funcs/r/ta_add_column2.result
@@ -2568,7 +2568,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` char(15) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c2` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
SHOW TABLES;
@@ -2590,7 +2590,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` varchar(15) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c2` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
SHOW TABLES;
@@ -2612,7 +2612,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` binary(15) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c2` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
SHOW TABLES;
@@ -2634,7 +2634,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` varbinary(15) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c2` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
SHOW TABLES;
diff --git a/mysql-test/suite/engines/funcs/r/ta_add_column_first.result b/mysql-test/suite/engines/funcs/r/ta_add_column_first.result
index d0657802547..a968cf4d034 100644
--- a/mysql-test/suite/engines/funcs/r/ta_add_column_first.result
+++ b/mysql-test/suite/engines/funcs/r/ta_add_column_first.result
@@ -842,7 +842,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c2 BIT NOT NULL FIRST;
SHOW TABLES;
@@ -852,7 +852,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c2` bit(1) NOT NULL,
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
SHOW TABLES;
@@ -1898,7 +1898,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c2 TINYINT NOT NULL FIRST;
SHOW TABLES;
@@ -1908,7 +1908,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c2` tinyint(4) NOT NULL,
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
SHOW TABLES;
@@ -2954,7 +2954,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c2 SMALLINT NOT NULL FIRST;
SHOW TABLES;
@@ -2964,7 +2964,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c2` smallint(6) NOT NULL,
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
SHOW TABLES;
@@ -4010,7 +4010,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c2 MEDIUMINT NOT NULL FIRST;
SHOW TABLES;
@@ -4020,7 +4020,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c2` mediumint(9) NOT NULL,
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
SHOW TABLES;
@@ -5066,7 +5066,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c2 INT NOT NULL FIRST;
SHOW TABLES;
@@ -5076,7 +5076,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c2` int(11) NOT NULL,
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
SHOW TABLES;
@@ -6122,7 +6122,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c2 INTEGER NOT NULL FIRST;
SHOW TABLES;
@@ -6132,7 +6132,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c2` int(11) NOT NULL,
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
SHOW TABLES;
@@ -7178,7 +7178,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c2 BIGINT NOT NULL FIRST;
SHOW TABLES;
@@ -7188,7 +7188,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c2` bigint(20) NOT NULL,
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
SHOW TABLES;
@@ -8234,7 +8234,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c2 REAL NOT NULL FIRST;
SHOW TABLES;
@@ -8244,7 +8244,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c2` double NOT NULL,
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
SHOW TABLES;
@@ -9290,7 +9290,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c2 DOUBLE NOT NULL FIRST;
SHOW TABLES;
@@ -9300,7 +9300,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c2` double NOT NULL,
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
SHOW TABLES;
@@ -10346,7 +10346,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c2 FLOAT NOT NULL FIRST;
SHOW TABLES;
@@ -10356,7 +10356,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c2` float NOT NULL,
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
SHOW TABLES;
@@ -11402,7 +11402,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c2 DECIMAL NOT NULL FIRST;
SHOW TABLES;
@@ -11412,7 +11412,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c2` decimal(10,0) NOT NULL,
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
SHOW TABLES;
@@ -12458,7 +12458,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c2 NUMERIC NOT NULL FIRST;
SHOW TABLES;
@@ -12468,7 +12468,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c2` decimal(10,0) NOT NULL,
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
SHOW TABLES;
@@ -13514,7 +13514,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c2 DATE NOT NULL FIRST;
SHOW TABLES;
@@ -13524,7 +13524,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c2` date NOT NULL,
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
SHOW TABLES;
@@ -14570,7 +14570,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c2 TIME NOT NULL FIRST;
SHOW TABLES;
@@ -14580,7 +14580,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c2` time NOT NULL,
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
SHOW TABLES;
@@ -15626,7 +15626,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c2 YEAR NOT NULL FIRST;
SHOW TABLES;
@@ -15636,7 +15636,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c2` year(4) NOT NULL,
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
SHOW TABLES;
@@ -16682,7 +16682,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c2 TINYBLOB NOT NULL FIRST;
SHOW TABLES;
@@ -16692,7 +16692,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c2` tinyblob NOT NULL,
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
SHOW TABLES;
@@ -17738,7 +17738,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c2 BLOB NOT NULL FIRST;
SHOW TABLES;
@@ -17748,7 +17748,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c2` blob NOT NULL,
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
SHOW TABLES;
@@ -18794,7 +18794,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c2 MEDIUMBLOB NOT NULL FIRST;
SHOW TABLES;
@@ -18804,7 +18804,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c2` mediumblob NOT NULL,
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
SHOW TABLES;
@@ -19850,7 +19850,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c2 LONGBLOB NOT NULL FIRST;
SHOW TABLES;
@@ -19860,7 +19860,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c2` longblob NOT NULL,
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
SHOW TABLES;
@@ -20906,7 +20906,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c2 TINYTEXT NOT NULL FIRST;
SHOW TABLES;
@@ -20916,7 +20916,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c2` tinytext NOT NULL,
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
SHOW TABLES;
@@ -21962,7 +21962,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c2 TEXT NOT NULL FIRST;
SHOW TABLES;
@@ -21972,7 +21972,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c2` text NOT NULL,
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
SHOW TABLES;
@@ -23018,7 +23018,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c2 MEDIUMTEXT NOT NULL FIRST;
SHOW TABLES;
@@ -23028,7 +23028,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c2` mediumtext NOT NULL,
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
SHOW TABLES;
@@ -24074,7 +24074,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c2 LONGTEXT NOT NULL FIRST;
SHOW TABLES;
@@ -24084,7 +24084,7 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c2` longtext NOT NULL,
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
SHOW TABLES;
diff --git a/mysql-test/suite/engines/funcs/r/ta_add_column_first2.result b/mysql-test/suite/engines/funcs/r/ta_add_column_first2.result
index 406729e93dd..0810d21c259 100644
--- a/mysql-test/suite/engines/funcs/r/ta_add_column_first2.result
+++ b/mysql-test/suite/engines/funcs/r/ta_add_column_first2.result
@@ -2567,7 +2567,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c2` timestamp NOT NULL,
`c1` char(15) NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -2589,7 +2589,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c2` timestamp NOT NULL,
`c1` varchar(15) NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -2611,7 +2611,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c2` timestamp NOT NULL,
`c1` binary(15) NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -2633,7 +2633,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c2` timestamp NOT NULL,
`c1` varbinary(15) NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
diff --git a/mysql-test/suite/engines/funcs/r/ta_add_column_middle.result b/mysql-test/suite/engines/funcs/r/ta_add_column_middle.result
index 014c7ae6486..5473812d7d5 100644
--- a/mysql-test/suite/engines/funcs/r/ta_add_column_middle.result
+++ b/mysql-test/suite/engines/funcs/r/ta_add_column_middle.result
@@ -1071,8 +1071,8 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
- `c3` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c2` timestamp NOT NULL,
+ `c3` timestamp NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c4 BIT NOT NULL AFTER c2;
@@ -1083,9 +1083,9 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c2` timestamp NOT NULL,
`c4` bit(1) NOT NULL,
- `c3` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c3` timestamp NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -2415,8 +2415,8 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
- `c3` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c2` timestamp NOT NULL,
+ `c3` timestamp NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c4 TINYINT NOT NULL AFTER c2;
@@ -2427,9 +2427,9 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c2` timestamp NOT NULL,
`c4` tinyint(4) NOT NULL,
- `c3` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c3` timestamp NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -3759,8 +3759,8 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
- `c3` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c2` timestamp NOT NULL,
+ `c3` timestamp NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c4 SMALLINT NOT NULL AFTER c2;
@@ -3771,9 +3771,9 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c2` timestamp NOT NULL,
`c4` smallint(6) NOT NULL,
- `c3` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c3` timestamp NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -5103,8 +5103,8 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
- `c3` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c2` timestamp NOT NULL,
+ `c3` timestamp NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c4 MEDIUMINT NOT NULL AFTER c2;
@@ -5115,9 +5115,9 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c2` timestamp NOT NULL,
`c4` mediumint(9) NOT NULL,
- `c3` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c3` timestamp NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -6447,8 +6447,8 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
- `c3` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c2` timestamp NOT NULL,
+ `c3` timestamp NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c4 INT NOT NULL AFTER c2;
@@ -6459,9 +6459,9 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c2` timestamp NOT NULL,
`c4` int(11) NOT NULL,
- `c3` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c3` timestamp NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -7791,8 +7791,8 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
- `c3` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c2` timestamp NOT NULL,
+ `c3` timestamp NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c4 INTEGER NOT NULL AFTER c2;
@@ -7803,9 +7803,9 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c2` timestamp NOT NULL,
`c4` int(11) NOT NULL,
- `c3` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c3` timestamp NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -9135,8 +9135,8 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
- `c3` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c2` timestamp NOT NULL,
+ `c3` timestamp NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c4 BIGINT NOT NULL AFTER c2;
@@ -9147,9 +9147,9 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c2` timestamp NOT NULL,
`c4` bigint(20) NOT NULL,
- `c3` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c3` timestamp NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -10479,8 +10479,8 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
- `c3` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c2` timestamp NOT NULL,
+ `c3` timestamp NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c4 REAL NOT NULL AFTER c2;
@@ -10491,9 +10491,9 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c2` timestamp NOT NULL,
`c4` double NOT NULL,
- `c3` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c3` timestamp NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -11823,8 +11823,8 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
- `c3` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c2` timestamp NOT NULL,
+ `c3` timestamp NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c4 DOUBLE NOT NULL AFTER c2;
@@ -11835,9 +11835,9 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c2` timestamp NOT NULL,
`c4` double NOT NULL,
- `c3` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c3` timestamp NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -13167,8 +13167,8 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
- `c3` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c2` timestamp NOT NULL,
+ `c3` timestamp NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c4 FLOAT NOT NULL AFTER c2;
@@ -13179,9 +13179,9 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c2` timestamp NOT NULL,
`c4` float NOT NULL,
- `c3` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c3` timestamp NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -14511,8 +14511,8 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
- `c3` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c2` timestamp NOT NULL,
+ `c3` timestamp NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c4 DECIMAL NOT NULL AFTER c2;
@@ -14523,9 +14523,9 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c2` timestamp NOT NULL,
`c4` decimal(10,0) NOT NULL,
- `c3` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c3` timestamp NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -15855,8 +15855,8 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
- `c3` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c2` timestamp NOT NULL,
+ `c3` timestamp NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c4 NUMERIC NOT NULL AFTER c2;
@@ -15867,9 +15867,9 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c2` timestamp NOT NULL,
`c4` decimal(10,0) NOT NULL,
- `c3` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c3` timestamp NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -17199,8 +17199,8 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
- `c3` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c2` timestamp NOT NULL,
+ `c3` timestamp NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c4 DATE NOT NULL AFTER c2;
@@ -17211,9 +17211,9 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c2` timestamp NOT NULL,
`c4` date NOT NULL,
- `c3` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c3` timestamp NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -18543,8 +18543,8 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
- `c3` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c2` timestamp NOT NULL,
+ `c3` timestamp NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c4 TIME NOT NULL AFTER c2;
@@ -18555,9 +18555,9 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c2` timestamp NOT NULL,
`c4` time NOT NULL,
- `c3` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c3` timestamp NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -19508,7 +19508,7 @@ Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
`c2` bit(1) NOT NULL,
- `c4` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c4` timestamp NOT NULL,
`c3` bit(1) NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
@@ -19536,7 +19536,7 @@ Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
`c2` tinyint(4) NOT NULL,
- `c4` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c4` timestamp NOT NULL,
`c3` tinyint(4) NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
@@ -19564,7 +19564,7 @@ Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
`c2` smallint(6) NOT NULL,
- `c4` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c4` timestamp NOT NULL,
`c3` smallint(6) NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
@@ -19592,7 +19592,7 @@ Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
`c2` mediumint(9) NOT NULL,
- `c4` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c4` timestamp NOT NULL,
`c3` mediumint(9) NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
@@ -19620,7 +19620,7 @@ Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
`c2` int(11) NOT NULL,
- `c4` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c4` timestamp NOT NULL,
`c3` int(11) NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
@@ -19648,7 +19648,7 @@ Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
`c2` int(11) NOT NULL,
- `c4` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c4` timestamp NOT NULL,
`c3` int(11) NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
@@ -19676,7 +19676,7 @@ Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
`c2` bigint(20) NOT NULL,
- `c4` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c4` timestamp NOT NULL,
`c3` bigint(20) NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
@@ -19704,7 +19704,7 @@ Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
`c2` double NOT NULL,
- `c4` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c4` timestamp NOT NULL,
`c3` double NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
@@ -19732,7 +19732,7 @@ Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
`c2` double NOT NULL,
- `c4` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c4` timestamp NOT NULL,
`c3` double NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
@@ -19760,7 +19760,7 @@ Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
`c2` float NOT NULL,
- `c4` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c4` timestamp NOT NULL,
`c3` float NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
@@ -19788,7 +19788,7 @@ Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
`c2` decimal(10,0) NOT NULL,
- `c4` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c4` timestamp NOT NULL,
`c3` decimal(10,0) NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
@@ -19816,7 +19816,7 @@ Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
`c2` decimal(10,0) NOT NULL,
- `c4` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c4` timestamp NOT NULL,
`c3` decimal(10,0) NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
@@ -19844,7 +19844,7 @@ Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
`c2` date NOT NULL,
- `c4` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c4` timestamp NOT NULL,
`c3` date NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
@@ -19872,7 +19872,7 @@ Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
`c2` time NOT NULL,
- `c4` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c4` timestamp NOT NULL,
`c3` time NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
@@ -19887,8 +19887,8 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
- `c3` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c2` timestamp NOT NULL,
+ `c3` timestamp NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c4 TIMESTAMP NOT NULL AFTER c2;
@@ -19899,9 +19899,9 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
- `c4` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
- `c3` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c2` timestamp NOT NULL,
+ `c4` timestamp NOT NULL,
+ `c3` timestamp NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -19928,7 +19928,7 @@ Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
`c2` year(4) NOT NULL,
- `c4` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c4` timestamp NOT NULL,
`c3` year(4) NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
@@ -19956,7 +19956,7 @@ Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
`c2` tinyblob NOT NULL,
- `c4` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c4` timestamp NOT NULL,
`c3` tinyblob NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
@@ -19984,7 +19984,7 @@ Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
`c2` blob NOT NULL,
- `c4` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c4` timestamp NOT NULL,
`c3` blob NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
@@ -20012,7 +20012,7 @@ Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
`c2` mediumblob NOT NULL,
- `c4` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c4` timestamp NOT NULL,
`c3` mediumblob NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
@@ -20040,7 +20040,7 @@ Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
`c2` longblob NOT NULL,
- `c4` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c4` timestamp NOT NULL,
`c3` longblob NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
@@ -20068,7 +20068,7 @@ Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
`c2` tinytext NOT NULL,
- `c4` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c4` timestamp NOT NULL,
`c3` tinytext NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
@@ -20096,7 +20096,7 @@ Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
`c2` text NOT NULL,
- `c4` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c4` timestamp NOT NULL,
`c3` text NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
@@ -20124,7 +20124,7 @@ Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
`c2` mediumtext NOT NULL,
- `c4` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c4` timestamp NOT NULL,
`c3` mediumtext NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
@@ -20152,7 +20152,7 @@ Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
`c2` longtext NOT NULL,
- `c4` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c4` timestamp NOT NULL,
`c3` longtext NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
@@ -21231,8 +21231,8 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
- `c3` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c2` timestamp NOT NULL,
+ `c3` timestamp NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c4 YEAR NOT NULL AFTER c2;
@@ -21243,9 +21243,9 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c2` timestamp NOT NULL,
`c4` year(4) NOT NULL,
- `c3` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c3` timestamp NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -22575,8 +22575,8 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
- `c3` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c2` timestamp NOT NULL,
+ `c3` timestamp NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c4 TINYBLOB NOT NULL AFTER c2;
@@ -22587,9 +22587,9 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c2` timestamp NOT NULL,
`c4` tinyblob NOT NULL,
- `c3` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c3` timestamp NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -23919,8 +23919,8 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
- `c3` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c2` timestamp NOT NULL,
+ `c3` timestamp NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c4 BLOB NOT NULL AFTER c2;
@@ -23931,9 +23931,9 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c2` timestamp NOT NULL,
`c4` blob NOT NULL,
- `c3` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c3` timestamp NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -25263,8 +25263,8 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
- `c3` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c2` timestamp NOT NULL,
+ `c3` timestamp NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c4 MEDIUMBLOB NOT NULL AFTER c2;
@@ -25275,9 +25275,9 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c2` timestamp NOT NULL,
`c4` mediumblob NOT NULL,
- `c3` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c3` timestamp NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -26607,8 +26607,8 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
- `c3` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c2` timestamp NOT NULL,
+ `c3` timestamp NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c4 LONGBLOB NOT NULL AFTER c2;
@@ -26619,9 +26619,9 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c2` timestamp NOT NULL,
`c4` longblob NOT NULL,
- `c3` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c3` timestamp NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -27951,8 +27951,8 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
- `c3` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c2` timestamp NOT NULL,
+ `c3` timestamp NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c4 TINYTEXT NOT NULL AFTER c2;
@@ -27963,9 +27963,9 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c2` timestamp NOT NULL,
`c4` tinytext NOT NULL,
- `c3` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c3` timestamp NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -29295,8 +29295,8 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
- `c3` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c2` timestamp NOT NULL,
+ `c3` timestamp NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c4 TEXT NOT NULL AFTER c2;
@@ -29307,9 +29307,9 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c2` timestamp NOT NULL,
`c4` text NOT NULL,
- `c3` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c3` timestamp NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -30639,8 +30639,8 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
- `c3` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c2` timestamp NOT NULL,
+ `c3` timestamp NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c4 MEDIUMTEXT NOT NULL AFTER c2;
@@ -30651,9 +30651,9 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c2` timestamp NOT NULL,
`c4` mediumtext NOT NULL,
- `c3` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c3` timestamp NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -31983,8 +31983,8 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
- `c3` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c2` timestamp NOT NULL,
+ `c3` timestamp NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD c4 LONGTEXT NOT NULL AFTER c2;
@@ -31995,9 +31995,9 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL,
- `c2` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c2` timestamp NOT NULL,
`c4` longtext NOT NULL,
- `c3` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c3` timestamp NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
diff --git a/mysql-test/suite/engines/funcs/r/ta_add_column_middle2.result b/mysql-test/suite/engines/funcs/r/ta_add_column_middle2.result
index e7eefc269be..c8ed71f99f3 100644
--- a/mysql-test/suite/engines/funcs/r/ta_add_column_middle2.result
+++ b/mysql-test/suite/engines/funcs/r/ta_add_column_middle2.result
@@ -3268,7 +3268,7 @@ Table Create Table
t1 CREATE TABLE `t1` (
`c1` char(15) NOT NULL,
`c2` int(11) NOT NULL,
- `c4` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c4` timestamp NOT NULL,
`c3` char(20) NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
@@ -3296,7 +3296,7 @@ Table Create Table
t1 CREATE TABLE `t1` (
`c1` varchar(15) NOT NULL,
`c2` int(11) NOT NULL,
- `c4` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c4` timestamp NOT NULL,
`c3` varchar(20) NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
@@ -3324,7 +3324,7 @@ Table Create Table
t1 CREATE TABLE `t1` (
`c1` binary(15) NOT NULL,
`c2` int(11) NOT NULL,
- `c4` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c4` timestamp NOT NULL,
`c3` binary(20) NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
@@ -3352,7 +3352,7 @@ Table Create Table
t1 CREATE TABLE `t1` (
`c1` varbinary(15) NOT NULL,
`c2` int(11) NOT NULL,
- `c4` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c4` timestamp NOT NULL,
`c3` varbinary(20) NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
diff --git a/mysql-test/suite/engines/funcs/r/ta_add_string2.result b/mysql-test/suite/engines/funcs/r/ta_add_string2.result
index 7d50fa3b61d..9f829dd3b2f 100644
--- a/mysql-test/suite/engines/funcs/r/ta_add_string2.result
+++ b/mysql-test/suite/engines/funcs/r/ta_add_string2.result
@@ -842,7 +842,7 @@ t5
SHOW CREATE TABLE t5;
Table Create Table
t5 CREATE TABLE `t5` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t5 ADD c2 CHAR(5) NOT NULL;
SHOW TABLES;
@@ -851,7 +851,7 @@ t5
SHOW CREATE TABLE t5;
Table Create Table
t5 CREATE TABLE `t5` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` char(5) NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t5;
@@ -1898,7 +1898,7 @@ t5
SHOW CREATE TABLE t5;
Table Create Table
t5 CREATE TABLE `t5` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t5 ADD c2 VARCHAR(5) NOT NULL;
SHOW TABLES;
@@ -1907,7 +1907,7 @@ t5
SHOW CREATE TABLE t5;
Table Create Table
t5 CREATE TABLE `t5` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` varchar(5) NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t5;
@@ -2954,7 +2954,7 @@ t5
SHOW CREATE TABLE t5;
Table Create Table
t5 CREATE TABLE `t5` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t5 ADD c2 BINARY(5) NOT NULL;
SHOW TABLES;
@@ -2963,7 +2963,7 @@ t5
SHOW CREATE TABLE t5;
Table Create Table
t5 CREATE TABLE `t5` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` binary(5) NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t5;
@@ -4010,7 +4010,7 @@ t5
SHOW CREATE TABLE t5;
Table Create Table
t5 CREATE TABLE `t5` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t5 ADD c2 VARBINARY(5) NOT NULL;
SHOW TABLES;
@@ -4019,7 +4019,7 @@ t5
SHOW CREATE TABLE t5;
Table Create Table
t5 CREATE TABLE `t5` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` varbinary(5) NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t5;
diff --git a/mysql-test/suite/engines/funcs/r/ta_add_string_first2.result b/mysql-test/suite/engines/funcs/r/ta_add_string_first2.result
index a656f1d48e1..f5c61673a21 100644
--- a/mysql-test/suite/engines/funcs/r/ta_add_string_first2.result
+++ b/mysql-test/suite/engines/funcs/r/ta_add_string_first2.result
@@ -842,7 +842,7 @@ t5
SHOW CREATE TABLE t5;
Table Create Table
t5 CREATE TABLE `t5` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t5 ADD c2 CHAR(5) NOT NULL FIRST;
SHOW TABLES;
@@ -852,7 +852,7 @@ SHOW CREATE TABLE t5;
Table Create Table
t5 CREATE TABLE `t5` (
`c2` char(5) NOT NULL,
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t5;
SHOW TABLES;
@@ -1898,7 +1898,7 @@ t5
SHOW CREATE TABLE t5;
Table Create Table
t5 CREATE TABLE `t5` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t5 ADD c2 VARCHAR(5) NOT NULL FIRST;
SHOW TABLES;
@@ -1908,7 +1908,7 @@ SHOW CREATE TABLE t5;
Table Create Table
t5 CREATE TABLE `t5` (
`c2` varchar(5) NOT NULL,
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t5;
SHOW TABLES;
@@ -2954,7 +2954,7 @@ t5
SHOW CREATE TABLE t5;
Table Create Table
t5 CREATE TABLE `t5` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t5 ADD c2 BINARY(5) NOT NULL FIRST;
SHOW TABLES;
@@ -2964,7 +2964,7 @@ SHOW CREATE TABLE t5;
Table Create Table
t5 CREATE TABLE `t5` (
`c2` binary(5) NOT NULL,
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t5;
SHOW TABLES;
@@ -4010,7 +4010,7 @@ t5
SHOW CREATE TABLE t5;
Table Create Table
t5 CREATE TABLE `t5` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t5 ADD c2 VARBINARY(5) NOT NULL FIRST;
SHOW TABLES;
@@ -4020,7 +4020,7 @@ SHOW CREATE TABLE t5;
Table Create Table
t5 CREATE TABLE `t5` (
`c2` varbinary(5) NOT NULL,
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t5;
SHOW TABLES;
diff --git a/mysql-test/suite/engines/funcs/r/ta_add_string_middle2.result b/mysql-test/suite/engines/funcs/r/ta_add_string_middle2.result
index 4829892354f..56fbf597cdc 100644
--- a/mysql-test/suite/engines/funcs/r/ta_add_string_middle2.result
+++ b/mysql-test/suite/engines/funcs/r/ta_add_string_middle2.result
@@ -398,7 +398,7 @@ t5
SHOW CREATE TABLE t5;
Table Create Table
t5 CREATE TABLE `t5` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` int(11) NOT NULL,
`c3` char(10) DEFAULT NULL,
PRIMARY KEY (`c1`)
@@ -410,7 +410,7 @@ t5
SHOW CREATE TABLE t5;
Table Create Table
t5 CREATE TABLE `t5` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` int(11) NOT NULL,
`c4` char(5) DEFAULT NULL,
`c3` char(10) DEFAULT NULL,
@@ -846,7 +846,7 @@ t5
SHOW CREATE TABLE t5;
Table Create Table
t5 CREATE TABLE `t5` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` int(11) NOT NULL,
`c3` char(10) NOT NULL,
PRIMARY KEY (`c1`)
@@ -858,7 +858,7 @@ t5
SHOW CREATE TABLE t5;
Table Create Table
t5 CREATE TABLE `t5` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` int(11) NOT NULL,
`c4` char(5) NOT NULL,
`c3` char(10) NOT NULL,
@@ -1294,7 +1294,7 @@ t5
SHOW CREATE TABLE t5;
Table Create Table
t5 CREATE TABLE `t5` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` int(11) NOT NULL,
`c3` varchar(10) DEFAULT NULL,
PRIMARY KEY (`c1`)
@@ -1306,7 +1306,7 @@ t5
SHOW CREATE TABLE t5;
Table Create Table
t5 CREATE TABLE `t5` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` int(11) NOT NULL,
`c4` varchar(5) DEFAULT NULL,
`c3` varchar(10) DEFAULT NULL,
@@ -1742,7 +1742,7 @@ t5
SHOW CREATE TABLE t5;
Table Create Table
t5 CREATE TABLE `t5` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` int(11) NOT NULL,
`c3` varchar(10) NOT NULL,
PRIMARY KEY (`c1`)
@@ -1754,7 +1754,7 @@ t5
SHOW CREATE TABLE t5;
Table Create Table
t5 CREATE TABLE `t5` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` int(11) NOT NULL,
`c4` varchar(5) NOT NULL,
`c3` varchar(10) NOT NULL,
@@ -2190,7 +2190,7 @@ t5
SHOW CREATE TABLE t5;
Table Create Table
t5 CREATE TABLE `t5` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` int(11) NOT NULL,
`c3` binary(10) DEFAULT NULL,
PRIMARY KEY (`c1`)
@@ -2202,7 +2202,7 @@ t5
SHOW CREATE TABLE t5;
Table Create Table
t5 CREATE TABLE `t5` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` int(11) NOT NULL,
`c4` binary(5) DEFAULT NULL,
`c3` binary(10) DEFAULT NULL,
@@ -2638,7 +2638,7 @@ t5
SHOW CREATE TABLE t5;
Table Create Table
t5 CREATE TABLE `t5` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` int(11) NOT NULL,
`c3` binary(10) NOT NULL,
PRIMARY KEY (`c1`)
@@ -2650,7 +2650,7 @@ t5
SHOW CREATE TABLE t5;
Table Create Table
t5 CREATE TABLE `t5` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` int(11) NOT NULL,
`c4` binary(5) NOT NULL,
`c3` binary(10) NOT NULL,
@@ -3086,7 +3086,7 @@ t5
SHOW CREATE TABLE t5;
Table Create Table
t5 CREATE TABLE `t5` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` int(11) NOT NULL,
`c3` varbinary(10) DEFAULT NULL,
PRIMARY KEY (`c1`)
@@ -3098,7 +3098,7 @@ t5
SHOW CREATE TABLE t5;
Table Create Table
t5 CREATE TABLE `t5` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` int(11) NOT NULL,
`c4` varbinary(5) DEFAULT NULL,
`c3` varbinary(10) DEFAULT NULL,
@@ -3534,7 +3534,7 @@ t5
SHOW CREATE TABLE t5;
Table Create Table
t5 CREATE TABLE `t5` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` int(11) NOT NULL,
`c3` varbinary(10) NOT NULL,
PRIMARY KEY (`c1`)
@@ -3546,7 +3546,7 @@ t5
SHOW CREATE TABLE t5;
Table Create Table
t5 CREATE TABLE `t5` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
`c2` int(11) NOT NULL,
`c4` varbinary(5) NOT NULL,
`c3` varbinary(10) NOT NULL,
diff --git a/mysql-test/suite/engines/funcs/r/ta_add_unique_index.result b/mysql-test/suite/engines/funcs/r/ta_add_unique_index.result
index 1ec7f876355..5394c24bf5d 100644
--- a/mysql-test/suite/engines/funcs/r/ta_add_unique_index.result
+++ b/mysql-test/suite/engines/funcs/r/ta_add_unique_index.result
@@ -314,7 +314,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD UNIQUE (c1);
SHOW TABLES;
@@ -323,7 +323,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
UNIQUE KEY `c1` (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -666,7 +666,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD UNIQUE KEY (c1);
SHOW TABLES;
@@ -675,7 +675,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
UNIQUE KEY `c1` (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -1018,7 +1018,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD UNIQUE INDEX (c1);
SHOW TABLES;
@@ -1027,7 +1027,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
UNIQUE KEY `c1` (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -1370,7 +1370,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD CONSTRAINT UNIQUE (c1);
SHOW TABLES;
@@ -1379,7 +1379,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
UNIQUE KEY `c1` (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -1722,7 +1722,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD CONSTRAINT UNIQUE KEY (c1);
SHOW TABLES;
@@ -1731,7 +1731,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
UNIQUE KEY `c1` (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -2074,7 +2074,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD CONSTRAINT UNIQUE INDEX (c1);
SHOW TABLES;
@@ -2083,7 +2083,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
UNIQUE KEY `c1` (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -2426,7 +2426,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD CONSTRAINT cst1 UNIQUE (c1);
SHOW TABLES;
@@ -2435,7 +2435,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
UNIQUE KEY `cst1` (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -2778,7 +2778,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD CONSTRAINT cst1 UNIQUE KEY (c1);
SHOW TABLES;
@@ -2787,7 +2787,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
UNIQUE KEY `cst1` (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -3130,7 +3130,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD CONSTRAINT cst1 UNIQUE INDEX (c1);
SHOW TABLES;
@@ -3139,7 +3139,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
UNIQUE KEY `cst1` (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -3482,7 +3482,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD UNIQUE i1 (c1);
SHOW TABLES;
@@ -3491,7 +3491,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
UNIQUE KEY `i1` (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -3834,7 +3834,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD UNIQUE KEY i1 (c1);
SHOW TABLES;
@@ -3843,7 +3843,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
UNIQUE KEY `i1` (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -4186,7 +4186,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD UNIQUE INDEX i1 (c1);
SHOW TABLES;
@@ -4195,7 +4195,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
UNIQUE KEY `i1` (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -4538,7 +4538,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD CONSTRAINT UNIQUE i1 (c1);
SHOW TABLES;
@@ -4547,7 +4547,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
UNIQUE KEY `i1` (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -4890,7 +4890,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD CONSTRAINT UNIQUE KEY i1 (c1);
SHOW TABLES;
@@ -4899,7 +4899,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
UNIQUE KEY `i1` (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -5242,7 +5242,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD CONSTRAINT UNIQUE INDEX i1 (c1);
SHOW TABLES;
@@ -5251,7 +5251,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
UNIQUE KEY `i1` (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -5594,7 +5594,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD CONSTRAINT cst1 UNIQUE i1 (c1);
SHOW TABLES;
@@ -5603,7 +5603,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
UNIQUE KEY `i1` (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -5946,7 +5946,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD CONSTRAINT cst1 UNIQUE KEY i1 (c1);
SHOW TABLES;
@@ -5955,7 +5955,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
UNIQUE KEY `i1` (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -6298,7 +6298,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD CONSTRAINT cst1 UNIQUE INDEX i1 (c1);
SHOW TABLES;
@@ -6307,7 +6307,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
UNIQUE KEY `i1` (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
diff --git a/mysql-test/suite/engines/funcs/r/ta_column_to_index.result b/mysql-test/suite/engines/funcs/r/ta_column_to_index.result
index 42906329967..b5e0a265674 100644
--- a/mysql-test/suite/engines/funcs/r/ta_column_to_index.result
+++ b/mysql-test/suite/engines/funcs/r/ta_column_to_index.result
@@ -314,7 +314,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD KEY (c1);
SHOW TABLES;
@@ -323,7 +323,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
KEY `c1` (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -666,7 +666,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD KEY USING BTREE (c1);
SHOW TABLES;
@@ -675,7 +675,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
KEY `c1` (`c1`) USING BTREE
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -1018,7 +1018,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD KEY USING HASH (c1);
SHOW TABLES;
@@ -1027,7 +1027,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
KEY `c1` (`c1`) USING HASH
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -1370,7 +1370,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD INDEX (c1);
SHOW TABLES;
@@ -1379,7 +1379,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
KEY `c1` (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -1722,7 +1722,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD INDEX USING BTREE (c1);
SHOW TABLES;
@@ -1731,7 +1731,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
KEY `c1` (`c1`) USING BTREE
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -2074,7 +2074,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD INDEX USING HASH (c1);
SHOW TABLES;
@@ -2083,7 +2083,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
KEY `c1` (`c1`) USING HASH
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -2426,7 +2426,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD KEY i1 (c1);
SHOW TABLES;
@@ -2435,7 +2435,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
KEY `i1` (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -2778,7 +2778,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD KEY i1 USING BTREE (c1);
SHOW TABLES;
@@ -2787,7 +2787,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
KEY `i1` (`c1`) USING BTREE
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -3130,7 +3130,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD KEY i1 USING HASH (c1);
SHOW TABLES;
@@ -3139,7 +3139,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
KEY `i1` (`c1`) USING HASH
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -3482,7 +3482,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD INDEX i1 (c1);
SHOW TABLES;
@@ -3491,7 +3491,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
KEY `i1` (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -3834,7 +3834,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD INDEX i1 USING BTREE (c1);
SHOW TABLES;
@@ -3843,7 +3843,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
KEY `i1` (`c1`) USING BTREE
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
@@ -4186,7 +4186,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD INDEX i1 USING HASH (c1);
SHOW TABLES;
@@ -4195,7 +4195,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
KEY `i1` (`c1`) USING HASH
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
diff --git a/mysql-test/suite/engines/funcs/r/ta_column_to_not_null.result b/mysql-test/suite/engines/funcs/r/ta_column_to_not_null.result
index fe2ee35aa22..5fdec6d8c80 100644
--- a/mysql-test/suite/engines/funcs/r/ta_column_to_not_null.result
+++ b/mysql-test/suite/engines/funcs/r/ta_column_to_not_null.result
@@ -309,7 +309,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
SHOW TABLES;
@@ -813,7 +813,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
SHOW TABLES;
diff --git a/mysql-test/suite/engines/funcs/r/ta_column_to_null.result b/mysql-test/suite/engines/funcs/r/ta_column_to_null.result
index 239e8016d58..96e2236e063 100644
--- a/mysql-test/suite/engines/funcs/r/ta_column_to_null.result
+++ b/mysql-test/suite/engines/funcs/r/ta_column_to_null.result
@@ -300,7 +300,7 @@ t2
SHOW CREATE TABLE t2;
Table Create Table
t2 CREATE TABLE `t2` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t2 MODIFY c1 TIMESTAMP NULL;
SHOW TABLES;
@@ -804,7 +804,7 @@ t2
SHOW CREATE TABLE t2;
Table Create Table
t2 CREATE TABLE `t2` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t2 CHANGE c1 c1 TIMESTAMP NULL;
SHOW TABLES;
diff --git a/mysql-test/suite/engines/funcs/r/ta_column_to_pk.result b/mysql-test/suite/engines/funcs/r/ta_column_to_pk.result
index b012a6c2446..3624e905cb2 100644
--- a/mysql-test/suite/engines/funcs/r/ta_column_to_pk.result
+++ b/mysql-test/suite/engines/funcs/r/ta_column_to_pk.result
@@ -314,7 +314,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD PRIMARY KEY (c1);
SHOW TABLES;
@@ -323,7 +323,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
diff --git a/mysql-test/suite/engines/funcs/r/ta_drop_column.result b/mysql-test/suite/engines/funcs/r/ta_drop_column.result
index 207b847c403..840e4c78325 100644
--- a/mysql-test/suite/engines/funcs/r/ta_drop_column.result
+++ b/mysql-test/suite/engines/funcs/r/ta_drop_column.result
@@ -300,8 +300,8 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
- `c2` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00'
+ `c1` timestamp NOT NULL,
+ `c2` timestamp NULL DEFAULT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 DROP c2;
ALTER TABLE t1 DROP c1;
@@ -309,7 +309,7 @@ ERROR 42000: You can't delete all columns with ALTER TABLE; use DROP TABLE inste
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
SHOW TABLES;
@@ -636,8 +636,8 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
- `c2` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00'
+ `c1` timestamp NOT NULL,
+ `c2` timestamp NULL DEFAULT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 DROP COLUMN c2;
ALTER TABLE t1 DROP COLUMN c1;
@@ -645,7 +645,7 @@ ERROR 42000: You can't delete all columns with ALTER TABLE; use DROP TABLE inste
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
SHOW TABLES;
diff --git a/mysql-test/suite/engines/funcs/r/ta_drop_index.result b/mysql-test/suite/engines/funcs/r/ta_drop_index.result
index 75e366bfa0f..bada7f1dc71 100644
--- a/mysql-test/suite/engines/funcs/r/ta_drop_index.result
+++ b/mysql-test/suite/engines/funcs/r/ta_drop_index.result
@@ -314,7 +314,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
KEY `i1` (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 DROP KEY i1;
@@ -324,7 +324,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
SHOW TABLES;
@@ -666,7 +666,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
KEY `i1` (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 DROP KEY i1;
@@ -676,7 +676,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
SHOW TABLES;
@@ -1018,7 +1018,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
KEY `i1` (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 DROP KEY i1;
@@ -1028,7 +1028,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
SHOW TABLES;
@@ -1370,7 +1370,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
KEY `i1` (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 DROP INDEX i1;
@@ -1380,7 +1380,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
SHOW TABLES;
@@ -1722,7 +1722,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
KEY `i1` (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 DROP INDEX i1;
@@ -1732,7 +1732,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
SHOW TABLES;
@@ -2074,7 +2074,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
KEY `i1` (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 DROP INDEX i1;
@@ -2084,7 +2084,7 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
SHOW TABLES;
diff --git a/mysql-test/suite/engines/funcs/r/ta_drop_pk_number.result b/mysql-test/suite/engines/funcs/r/ta_drop_pk_number.result
index 79858857742..9af57069422 100644
--- a/mysql-test/suite/engines/funcs/r/ta_drop_pk_number.result
+++ b/mysql-test/suite/engines/funcs/r/ta_drop_pk_number.result
@@ -314,7 +314,7 @@ t9
SHOW CREATE TABLE t9;
Table Create Table
t9 CREATE TABLE `t9` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t9 DROP PRIMARY KEY;
@@ -324,7 +324,7 @@ t9
SHOW CREATE TABLE t9;
Table Create Table
t9 CREATE TABLE `t9` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t9;
SHOW TABLES;
diff --git a/mysql-test/suite/engines/funcs/r/ta_rename.result b/mysql-test/suite/engines/funcs/r/ta_rename.result
index 7a1490e4f79..1528e6fe7eb 100644
--- a/mysql-test/suite/engines/funcs/r/ta_rename.result
+++ b/mysql-test/suite/engines/funcs/r/ta_rename.result
@@ -356,8 +356,8 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
- `c2` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00'
+ `c1` timestamp NOT NULL,
+ `c2` timestamp NULL DEFAULT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 RENAME t2;
SHOW TABLES;
@@ -368,8 +368,8 @@ ERROR 42S02: Unknown table 'test.t1'
SHOW CREATE TABLE t2;
Table Create Table
t2 CREATE TABLE `t2` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
- `c2` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00'
+ `c1` timestamp NOT NULL,
+ `c2` timestamp NULL DEFAULT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t2;
SHOW TABLES;
@@ -756,8 +756,8 @@ t1
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
- `c2` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00'
+ `c1` timestamp NOT NULL,
+ `c2` timestamp NULL DEFAULT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 RENAME TO t2;
SHOW TABLES;
@@ -768,8 +768,8 @@ ERROR 42S02: Unknown table 'test.t1'
SHOW CREATE TABLE t2;
Table Create Table
t2 CREATE TABLE `t2` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
- `c2` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00'
+ `c1` timestamp NOT NULL,
+ `c2` timestamp NULL DEFAULT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t2;
SHOW TABLES;
diff --git a/mysql-test/suite/engines/funcs/r/tc_column_key.result b/mysql-test/suite/engines/funcs/r/tc_column_key.result
index 54772842bea..2b3fa1c0918 100644
--- a/mysql-test/suite/engines/funcs/r/tc_column_key.result
+++ b/mysql-test/suite/engines/funcs/r/tc_column_key.result
@@ -227,7 +227,7 @@ t9
SHOW CREATE TABLE t9;
Table Create Table
t9 CREATE TABLE `t9` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t9;
diff --git a/mysql-test/suite/engines/funcs/r/tc_column_not_null.result b/mysql-test/suite/engines/funcs/r/tc_column_not_null.result
index 9add115123d..eca7439adfa 100644
--- a/mysql-test/suite/engines/funcs/r/tc_column_not_null.result
+++ b/mysql-test/suite/engines/funcs/r/tc_column_not_null.result
@@ -210,7 +210,7 @@ t2
SHOW CREATE TABLE t2;
Table Create Table
t2 CREATE TABLE `t2` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t2;
SHOW TABLES;
diff --git a/mysql-test/suite/engines/funcs/r/tc_column_primary_key_number.result b/mysql-test/suite/engines/funcs/r/tc_column_primary_key_number.result
index f01e18283f6..42be2e20f22 100644
--- a/mysql-test/suite/engines/funcs/r/tc_column_primary_key_number.result
+++ b/mysql-test/suite/engines/funcs/r/tc_column_primary_key_number.result
@@ -227,7 +227,7 @@ t9
SHOW CREATE TABLE t9;
Table Create Table
t9 CREATE TABLE `t9` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t9;
diff --git a/mysql-test/suite/engines/funcs/r/tc_column_unique_key.result b/mysql-test/suite/engines/funcs/r/tc_column_unique_key.result
index ef6033e73f4..5fb8cd5be6c 100644
--- a/mysql-test/suite/engines/funcs/r/tc_column_unique_key.result
+++ b/mysql-test/suite/engines/funcs/r/tc_column_unique_key.result
@@ -227,7 +227,7 @@ t9
SHOW CREATE TABLE t9;
Table Create Table
t9 CREATE TABLE `t9` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NOT NULL,
UNIQUE KEY `c1` (`c1`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t9;
diff --git a/mysql-test/suite/engines/funcs/r/tc_multicolumn_different.result b/mysql-test/suite/engines/funcs/r/tc_multicolumn_different.result
index 1baef8e3266..4b5cf0b7a0b 100644
--- a/mysql-test/suite/engines/funcs/r/tc_multicolumn_different.result
+++ b/mysql-test/suite/engines/funcs/r/tc_multicolumn_different.result
@@ -333,7 +333,7 @@ m3 CREATE TABLE `m3` (
`c2` char(25) NOT NULL,
`c3` tinyint(4) DEFAULT NULL,
`c4` char(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -713,7 +713,7 @@ m3 CREATE TABLE `m3` (
`c2` char(25) NOT NULL,
`c3` smallint(4) DEFAULT NULL,
`c4` char(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -1093,7 +1093,7 @@ m3 CREATE TABLE `m3` (
`c2` char(25) NOT NULL,
`c3` mediumint(4) DEFAULT NULL,
`c4` char(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -1473,7 +1473,7 @@ m3 CREATE TABLE `m3` (
`c2` char(25) NOT NULL,
`c3` int(4) DEFAULT NULL,
`c4` char(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -1853,7 +1853,7 @@ m3 CREATE TABLE `m3` (
`c2` char(25) NOT NULL,
`c3` int(4) DEFAULT NULL,
`c4` char(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -2233,7 +2233,7 @@ m3 CREATE TABLE `m3` (
`c2` char(25) NOT NULL,
`c3` bigint(4) DEFAULT NULL,
`c4` char(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -2613,7 +2613,7 @@ m3 CREATE TABLE `m3` (
`c2` varchar(25) NOT NULL,
`c3` tinyint(4) DEFAULT NULL,
`c4` varchar(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -2993,7 +2993,7 @@ m3 CREATE TABLE `m3` (
`c2` varchar(25) NOT NULL,
`c3` smallint(4) DEFAULT NULL,
`c4` varchar(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -3373,7 +3373,7 @@ m3 CREATE TABLE `m3` (
`c2` varchar(25) NOT NULL,
`c3` mediumint(4) DEFAULT NULL,
`c4` varchar(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -3753,7 +3753,7 @@ m3 CREATE TABLE `m3` (
`c2` varchar(25) NOT NULL,
`c3` int(4) DEFAULT NULL,
`c4` varchar(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -4133,7 +4133,7 @@ m3 CREATE TABLE `m3` (
`c2` varchar(25) NOT NULL,
`c3` int(4) DEFAULT NULL,
`c4` varchar(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -4513,7 +4513,7 @@ m3 CREATE TABLE `m3` (
`c2` varchar(25) NOT NULL,
`c3` bigint(4) DEFAULT NULL,
`c4` varchar(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -4893,7 +4893,7 @@ m3 CREATE TABLE `m3` (
`c2` binary(25) NOT NULL,
`c3` tinyint(4) DEFAULT NULL,
`c4` binary(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -5273,7 +5273,7 @@ m3 CREATE TABLE `m3` (
`c2` binary(25) NOT NULL,
`c3` smallint(4) DEFAULT NULL,
`c4` binary(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -5653,7 +5653,7 @@ m3 CREATE TABLE `m3` (
`c2` binary(25) NOT NULL,
`c3` mediumint(4) DEFAULT NULL,
`c4` binary(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -6033,7 +6033,7 @@ m3 CREATE TABLE `m3` (
`c2` binary(25) NOT NULL,
`c3` int(4) DEFAULT NULL,
`c4` binary(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -6413,7 +6413,7 @@ m3 CREATE TABLE `m3` (
`c2` binary(25) NOT NULL,
`c3` int(4) DEFAULT NULL,
`c4` binary(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -6793,7 +6793,7 @@ m3 CREATE TABLE `m3` (
`c2` binary(25) NOT NULL,
`c3` bigint(4) DEFAULT NULL,
`c4` binary(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -7173,7 +7173,7 @@ m3 CREATE TABLE `m3` (
`c2` varbinary(25) NOT NULL,
`c3` tinyint(4) DEFAULT NULL,
`c4` varbinary(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -7553,7 +7553,7 @@ m3 CREATE TABLE `m3` (
`c2` varbinary(25) NOT NULL,
`c3` smallint(4) DEFAULT NULL,
`c4` varbinary(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -7933,7 +7933,7 @@ m3 CREATE TABLE `m3` (
`c2` varbinary(25) NOT NULL,
`c3` mediumint(4) DEFAULT NULL,
`c4` varbinary(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -8313,7 +8313,7 @@ m3 CREATE TABLE `m3` (
`c2` varbinary(25) NOT NULL,
`c3` int(4) DEFAULT NULL,
`c4` varbinary(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -8693,7 +8693,7 @@ m3 CREATE TABLE `m3` (
`c2` varbinary(25) NOT NULL,
`c3` int(4) DEFAULT NULL,
`c4` varbinary(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -9073,7 +9073,7 @@ m3 CREATE TABLE `m3` (
`c2` varbinary(25) NOT NULL,
`c3` bigint(4) DEFAULT NULL,
`c4` varbinary(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -9453,7 +9453,7 @@ m3 CREATE TABLE `m3` (
`c2` char(25) NOT NULL,
`c3` tinyint(4) DEFAULT NULL,
`c4` char(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -9833,7 +9833,7 @@ m3 CREATE TABLE `m3` (
`c2` char(25) NOT NULL,
`c3` smallint(4) DEFAULT NULL,
`c4` char(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -10213,7 +10213,7 @@ m3 CREATE TABLE `m3` (
`c2` char(25) NOT NULL,
`c3` mediumint(4) DEFAULT NULL,
`c4` char(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -10593,7 +10593,7 @@ m3 CREATE TABLE `m3` (
`c2` char(25) NOT NULL,
`c3` int(4) DEFAULT NULL,
`c4` char(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -10973,7 +10973,7 @@ m3 CREATE TABLE `m3` (
`c2` char(25) NOT NULL,
`c3` int(4) DEFAULT NULL,
`c4` char(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -11353,7 +11353,7 @@ m3 CREATE TABLE `m3` (
`c2` char(25) NOT NULL,
`c3` bigint(4) DEFAULT NULL,
`c4` char(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -11733,7 +11733,7 @@ m3 CREATE TABLE `m3` (
`c2` varchar(25) NOT NULL,
`c3` tinyint(4) DEFAULT NULL,
`c4` varchar(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -12113,7 +12113,7 @@ m3 CREATE TABLE `m3` (
`c2` varchar(25) NOT NULL,
`c3` smallint(4) DEFAULT NULL,
`c4` varchar(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -12493,7 +12493,7 @@ m3 CREATE TABLE `m3` (
`c2` varchar(25) NOT NULL,
`c3` mediumint(4) DEFAULT NULL,
`c4` varchar(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -12873,7 +12873,7 @@ m3 CREATE TABLE `m3` (
`c2` varchar(25) NOT NULL,
`c3` int(4) DEFAULT NULL,
`c4` varchar(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -13253,7 +13253,7 @@ m3 CREATE TABLE `m3` (
`c2` varchar(25) NOT NULL,
`c3` int(4) DEFAULT NULL,
`c4` varchar(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -13633,7 +13633,7 @@ m3 CREATE TABLE `m3` (
`c2` varchar(25) NOT NULL,
`c3` bigint(4) DEFAULT NULL,
`c4` varchar(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -14013,7 +14013,7 @@ m3 CREATE TABLE `m3` (
`c2` binary(25) NOT NULL,
`c3` tinyint(4) DEFAULT NULL,
`c4` binary(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -14393,7 +14393,7 @@ m3 CREATE TABLE `m3` (
`c2` binary(25) NOT NULL,
`c3` smallint(4) DEFAULT NULL,
`c4` binary(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -14773,7 +14773,7 @@ m3 CREATE TABLE `m3` (
`c2` binary(25) NOT NULL,
`c3` mediumint(4) DEFAULT NULL,
`c4` binary(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -15153,7 +15153,7 @@ m3 CREATE TABLE `m3` (
`c2` binary(25) NOT NULL,
`c3` int(4) DEFAULT NULL,
`c4` binary(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -15533,7 +15533,7 @@ m3 CREATE TABLE `m3` (
`c2` binary(25) NOT NULL,
`c3` int(4) DEFAULT NULL,
`c4` binary(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -15913,7 +15913,7 @@ m3 CREATE TABLE `m3` (
`c2` binary(25) NOT NULL,
`c3` bigint(4) DEFAULT NULL,
`c4` binary(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -16293,7 +16293,7 @@ m3 CREATE TABLE `m3` (
`c2` varbinary(25) NOT NULL,
`c3` tinyint(4) DEFAULT NULL,
`c4` varbinary(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -16673,7 +16673,7 @@ m3 CREATE TABLE `m3` (
`c2` varbinary(25) NOT NULL,
`c3` smallint(4) DEFAULT NULL,
`c4` varbinary(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -17053,7 +17053,7 @@ m3 CREATE TABLE `m3` (
`c2` varbinary(25) NOT NULL,
`c3` mediumint(4) DEFAULT NULL,
`c4` varbinary(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -17433,7 +17433,7 @@ m3 CREATE TABLE `m3` (
`c2` varbinary(25) NOT NULL,
`c3` int(4) DEFAULT NULL,
`c4` varbinary(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -17813,7 +17813,7 @@ m3 CREATE TABLE `m3` (
`c2` varbinary(25) NOT NULL,
`c3` int(4) DEFAULT NULL,
`c4` varbinary(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -18193,7 +18193,7 @@ m3 CREATE TABLE `m3` (
`c2` varbinary(25) NOT NULL,
`c3` bigint(4) DEFAULT NULL,
`c4` varbinary(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -18573,7 +18573,7 @@ m3 CREATE TABLE `m3` (
`c2` char(25) NOT NULL,
`c3` tinyint(4) DEFAULT NULL,
`c4` char(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -18953,7 +18953,7 @@ m3 CREATE TABLE `m3` (
`c2` char(25) NOT NULL,
`c3` smallint(4) DEFAULT NULL,
`c4` char(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -19333,7 +19333,7 @@ m3 CREATE TABLE `m3` (
`c2` char(25) NOT NULL,
`c3` mediumint(4) DEFAULT NULL,
`c4` char(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -19713,7 +19713,7 @@ m3 CREATE TABLE `m3` (
`c2` char(25) NOT NULL,
`c3` int(4) DEFAULT NULL,
`c4` char(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -20093,7 +20093,7 @@ m3 CREATE TABLE `m3` (
`c2` char(25) NOT NULL,
`c3` int(4) DEFAULT NULL,
`c4` char(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -20473,7 +20473,7 @@ m3 CREATE TABLE `m3` (
`c2` char(25) NOT NULL,
`c3` bigint(4) DEFAULT NULL,
`c4` char(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -20853,7 +20853,7 @@ m3 CREATE TABLE `m3` (
`c2` varchar(25) NOT NULL,
`c3` tinyint(4) DEFAULT NULL,
`c4` varchar(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -21233,7 +21233,7 @@ m3 CREATE TABLE `m3` (
`c2` varchar(25) NOT NULL,
`c3` smallint(4) DEFAULT NULL,
`c4` varchar(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -21613,7 +21613,7 @@ m3 CREATE TABLE `m3` (
`c2` varchar(25) NOT NULL,
`c3` mediumint(4) DEFAULT NULL,
`c4` varchar(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -21993,7 +21993,7 @@ m3 CREATE TABLE `m3` (
`c2` varchar(25) NOT NULL,
`c3` int(4) DEFAULT NULL,
`c4` varchar(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -22373,7 +22373,7 @@ m3 CREATE TABLE `m3` (
`c2` varchar(25) NOT NULL,
`c3` int(4) DEFAULT NULL,
`c4` varchar(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -22753,7 +22753,7 @@ m3 CREATE TABLE `m3` (
`c2` varchar(25) NOT NULL,
`c3` bigint(4) DEFAULT NULL,
`c4` varchar(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -23133,7 +23133,7 @@ m3 CREATE TABLE `m3` (
`c2` binary(25) NOT NULL,
`c3` tinyint(4) DEFAULT NULL,
`c4` binary(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -23513,7 +23513,7 @@ m3 CREATE TABLE `m3` (
`c2` binary(25) NOT NULL,
`c3` smallint(4) DEFAULT NULL,
`c4` binary(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -23893,7 +23893,7 @@ m3 CREATE TABLE `m3` (
`c2` binary(25) NOT NULL,
`c3` mediumint(4) DEFAULT NULL,
`c4` binary(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -24273,7 +24273,7 @@ m3 CREATE TABLE `m3` (
`c2` binary(25) NOT NULL,
`c3` int(4) DEFAULT NULL,
`c4` binary(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -24653,7 +24653,7 @@ m3 CREATE TABLE `m3` (
`c2` binary(25) NOT NULL,
`c3` int(4) DEFAULT NULL,
`c4` binary(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -25033,7 +25033,7 @@ m3 CREATE TABLE `m3` (
`c2` binary(25) NOT NULL,
`c3` bigint(4) DEFAULT NULL,
`c4` binary(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -25413,7 +25413,7 @@ m3 CREATE TABLE `m3` (
`c2` varbinary(25) NOT NULL,
`c3` tinyint(4) DEFAULT NULL,
`c4` varbinary(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -25793,7 +25793,7 @@ m3 CREATE TABLE `m3` (
`c2` varbinary(25) NOT NULL,
`c3` smallint(4) DEFAULT NULL,
`c4` varbinary(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -26173,7 +26173,7 @@ m3 CREATE TABLE `m3` (
`c2` varbinary(25) NOT NULL,
`c3` mediumint(4) DEFAULT NULL,
`c4` varbinary(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -26553,7 +26553,7 @@ m3 CREATE TABLE `m3` (
`c2` varbinary(25) NOT NULL,
`c3` int(4) DEFAULT NULL,
`c4` varbinary(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -26933,7 +26933,7 @@ m3 CREATE TABLE `m3` (
`c2` varbinary(25) NOT NULL,
`c3` int(4) DEFAULT NULL,
`c4` varbinary(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -27313,7 +27313,7 @@ m3 CREATE TABLE `m3` (
`c2` varbinary(25) NOT NULL,
`c3` bigint(4) DEFAULT NULL,
`c4` varbinary(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -27693,7 +27693,7 @@ m3 CREATE TABLE `m3` (
`c2` char(25) NOT NULL,
`c3` tinyint(4) DEFAULT NULL,
`c4` char(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -28073,7 +28073,7 @@ m3 CREATE TABLE `m3` (
`c2` char(25) NOT NULL,
`c3` smallint(4) DEFAULT NULL,
`c4` char(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -28453,7 +28453,7 @@ m3 CREATE TABLE `m3` (
`c2` char(25) NOT NULL,
`c3` mediumint(4) DEFAULT NULL,
`c4` char(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -28833,7 +28833,7 @@ m3 CREATE TABLE `m3` (
`c2` char(25) NOT NULL,
`c3` int(4) DEFAULT NULL,
`c4` char(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -29213,7 +29213,7 @@ m3 CREATE TABLE `m3` (
`c2` char(25) NOT NULL,
`c3` int(4) DEFAULT NULL,
`c4` char(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -29593,7 +29593,7 @@ m3 CREATE TABLE `m3` (
`c2` char(25) NOT NULL,
`c3` bigint(4) DEFAULT NULL,
`c4` char(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -29973,7 +29973,7 @@ m3 CREATE TABLE `m3` (
`c2` varchar(25) NOT NULL,
`c3` tinyint(4) DEFAULT NULL,
`c4` varchar(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -30353,7 +30353,7 @@ m3 CREATE TABLE `m3` (
`c2` varchar(25) NOT NULL,
`c3` smallint(4) DEFAULT NULL,
`c4` varchar(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -30733,7 +30733,7 @@ m3 CREATE TABLE `m3` (
`c2` varchar(25) NOT NULL,
`c3` mediumint(4) DEFAULT NULL,
`c4` varchar(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -31113,7 +31113,7 @@ m3 CREATE TABLE `m3` (
`c2` varchar(25) NOT NULL,
`c3` int(4) DEFAULT NULL,
`c4` varchar(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -31493,7 +31493,7 @@ m3 CREATE TABLE `m3` (
`c2` varchar(25) NOT NULL,
`c3` int(4) DEFAULT NULL,
`c4` varchar(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -31873,7 +31873,7 @@ m3 CREATE TABLE `m3` (
`c2` varchar(25) NOT NULL,
`c3` bigint(4) DEFAULT NULL,
`c4` varchar(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -32253,7 +32253,7 @@ m3 CREATE TABLE `m3` (
`c2` binary(25) NOT NULL,
`c3` tinyint(4) DEFAULT NULL,
`c4` binary(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -32633,7 +32633,7 @@ m3 CREATE TABLE `m3` (
`c2` binary(25) NOT NULL,
`c3` smallint(4) DEFAULT NULL,
`c4` binary(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -33013,7 +33013,7 @@ m3 CREATE TABLE `m3` (
`c2` binary(25) NOT NULL,
`c3` mediumint(4) DEFAULT NULL,
`c4` binary(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -33393,7 +33393,7 @@ m3 CREATE TABLE `m3` (
`c2` binary(25) NOT NULL,
`c3` int(4) DEFAULT NULL,
`c4` binary(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -33773,7 +33773,7 @@ m3 CREATE TABLE `m3` (
`c2` binary(25) NOT NULL,
`c3` int(4) DEFAULT NULL,
`c4` binary(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -34153,7 +34153,7 @@ m3 CREATE TABLE `m3` (
`c2` binary(25) NOT NULL,
`c3` bigint(4) DEFAULT NULL,
`c4` binary(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -34533,7 +34533,7 @@ m3 CREATE TABLE `m3` (
`c2` varbinary(25) NOT NULL,
`c3` tinyint(4) DEFAULT NULL,
`c4` varbinary(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -34913,7 +34913,7 @@ m3 CREATE TABLE `m3` (
`c2` varbinary(25) NOT NULL,
`c3` smallint(4) DEFAULT NULL,
`c4` varbinary(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -35293,7 +35293,7 @@ m3 CREATE TABLE `m3` (
`c2` varbinary(25) NOT NULL,
`c3` mediumint(4) DEFAULT NULL,
`c4` varbinary(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -35673,7 +35673,7 @@ m3 CREATE TABLE `m3` (
`c2` varbinary(25) NOT NULL,
`c3` int(4) DEFAULT NULL,
`c4` varbinary(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -36053,7 +36053,7 @@ m3 CREATE TABLE `m3` (
`c2` varbinary(25) NOT NULL,
`c3` int(4) DEFAULT NULL,
`c4` varbinary(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
@@ -36433,7 +36433,7 @@ m3 CREATE TABLE `m3` (
`c2` varbinary(25) NOT NULL,
`c3` bigint(4) DEFAULT NULL,
`c4` varbinary(15) NOT NULL,
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c5` timestamp NOT NULL,
`c6` decimal(10,8) NOT NULL DEFAULT 3.14159200,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
diff --git a/mysql-test/suite/engines/funcs/r/tc_multicolumn_same.result b/mysql-test/suite/engines/funcs/r/tc_multicolumn_same.result
index 81bd62e94d1..bcece36b0d4 100644
--- a/mysql-test/suite/engines/funcs/r/tc_multicolumn_same.result
+++ b/mysql-test/suite/engines/funcs/r/tc_multicolumn_same.result
@@ -313,10 +313,10 @@ SHOW CREATE TABLE m1;
Table Create Table
m1 CREATE TABLE `m1` (
`c1` timestamp NULL DEFAULT NULL,
- `c2` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c2` timestamp NOT NULL,
`c3` timestamp NULL DEFAULT NULL,
- `c4` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
- `c5` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c4` timestamp NOT NULL,
+ `c5` timestamp NOT NULL,
PRIMARY KEY (`c4`),
UNIQUE KEY `c5` (`c5`)
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
diff --git a/mysql-test/suite/engines/funcs/r/tc_temporary_column.result b/mysql-test/suite/engines/funcs/r/tc_temporary_column.result
index 4f5c0b01b8e..03627817a35 100644
--- a/mysql-test/suite/engines/funcs/r/tc_temporary_column.result
+++ b/mysql-test/suite/engines/funcs/r/tc_temporary_column.result
@@ -500,7 +500,7 @@ Tables_in_test
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TEMPORARY TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `c1` timestamp NOT NULL
) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
SHOW TABLES;
diff --git a/mysql-test/suite/engines/funcs/t/rpl_trigger.test b/mysql-test/suite/engines/funcs/t/rpl_trigger.test
index 4f61e738200..12eef32ef83 100644
--- a/mysql-test/suite/engines/funcs/t/rpl_trigger.test
+++ b/mysql-test/suite/engines/funcs/t/rpl_trigger.test
@@ -5,6 +5,12 @@
--source include/have_binlog_format_mixed_or_statement.inc
--source include/master-slave.inc
+connection slave;
+--source include/stop_slave.inc
+CHANGE MASTER TO MASTER_USE_GTID=NO;
+--source include/start_slave.inc
+--connection master
+
call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT");
#
@@ -315,7 +321,8 @@ let $binlog_version= query_get_value(SHOW BINLOG EVENTS, Info, 1);
# Make the slave to replay the new binlog.
connection slave;
-RESET SLAVE;
+--let $master_use_gtid_option= No
+--source include/reset_slave.inc
--source include/start_slave.inc
SELECT MASTER_POS_WAIT('master-bin.000001', 513) >= 0;
@@ -342,7 +349,7 @@ DROP TABLE t1;
DROP TABLE t2;
--source include/stop_slave.inc
-RESET SLAVE;
+--source include/reset_slave.inc
# The master should be clean.
diff --git a/mysql-test/suite/federated/federatedx_versioning.test b/mysql-test/suite/federated/federatedx_versioning.test
index 6c3247cea55..4d2f2d35139 100644
--- a/mysql-test/suite/federated/federatedx_versioning.test
+++ b/mysql-test/suite/federated/federatedx_versioning.test
@@ -12,7 +12,7 @@ eval create or replace table t1 (
with system versioning;
--replace_result $MASTER_MYPORT MASTER_MYPORT
eval create or replace table tf engine=FEDERATED connection='mysql://root@127.0.0.1:$MASTER_MYPORT/test/t1';
---replace_result $MASTER_MYPORT MASTER_MYPORT $sys_datatype_expl SYS_TYPE 19710101000000 "'1971-01-01 00:00:00.000000'" " NOT NULL" ""
+--replace_result $MASTER_MYPORT MASTER_MYPORT $sys_datatype_expl SYS_TYPE 19710101000000 "'1971-01-01 00:00:00.000000'" "NOT NULL " ""
show create table tf;
--echo # INSERT
insert into t1 values (1);
diff --git a/mysql-test/suite/funcs_1/r/charset_collation.result b/mysql-test/suite/funcs_1/r/charset_collation.result
index 002fcf55365..c0c36d9e729 100644
--- a/mysql-test/suite/funcs_1/r/charset_collation.result
+++ b/mysql-test/suite/funcs_1/r/charset_collation.result
@@ -31,11 +31,11 @@ AND (collation_name LIKE CONCAT(character_set_name,'_general_ci')
OR
collation_name LIKE CONCAT(character_set_name,'_bin'))
ORDER BY collation_name, character_set_name;
-COLLATION_NAME CHARACTER_SET_NAME
-latin1_bin latin1
-latin1_general_ci latin1
-utf8mb3_bin utf8mb3
-utf8mb3_general_ci utf8mb3
+COLLATION_NAME CHARACTER_SET_NAME FULL_COLLATION_NAME ID IS_DEFAULT
+latin1_bin latin1 latin1_bin 47
+latin1_general_ci latin1 latin1_general_ci 48
+utf8mb3_bin utf8mb3 utf8mb3_bin 83
+utf8mb3_general_ci utf8mb3 utf8mb3_general_ci 33 Yes
connection default;
disconnect con;
DROP USER dbdict_test@localhost;
diff --git a/mysql-test/suite/funcs_1/r/is_character_sets.result b/mysql-test/suite/funcs_1/r/is_character_sets.result
index 6a1671a473c..57215693979 100644
--- a/mysql-test/suite/funcs_1/r/is_character_sets.result
+++ b/mysql-test/suite/funcs_1/r/is_character_sets.result
@@ -29,21 +29,21 @@ DROP FUNCTION test.f1;
DESCRIBE information_schema.CHARACTER_SETS;
Field Type Null Key Default Extra
CHARACTER_SET_NAME varchar(32) NO NULL
-DEFAULT_COLLATE_NAME varchar(32) NO NULL
+DEFAULT_COLLATE_NAME varchar(64) NO NULL
DESCRIPTION varchar(60) NO NULL
MAXLEN bigint(3) NO NULL
SHOW CREATE TABLE information_schema.CHARACTER_SETS;
Table Create Table
CHARACTER_SETS CREATE TEMPORARY TABLE `CHARACTER_SETS` (
`CHARACTER_SET_NAME` varchar(32) NOT NULL,
- `DEFAULT_COLLATE_NAME` varchar(32) NOT NULL,
+ `DEFAULT_COLLATE_NAME` varchar(64) NOT NULL,
`DESCRIPTION` varchar(60) NOT NULL,
`MAXLEN` bigint(3) NOT NULL
) ENGINE=MEMORY DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci
SHOW COLUMNS FROM information_schema.CHARACTER_SETS;
Field Type Null Key Default Extra
CHARACTER_SET_NAME varchar(32) NO NULL
-DEFAULT_COLLATE_NAME varchar(32) NO NULL
+DEFAULT_COLLATE_NAME varchar(64) NO NULL
DESCRIPTION varchar(60) NO NULL
MAXLEN bigint(3) NO NULL
# Testcases 3.2.2.2 and 3.2.2.3 are checked in suite/funcs_1/t/charset_collation*.test
diff --git a/mysql-test/suite/funcs_1/r/is_coll_char_set_appl.result b/mysql-test/suite/funcs_1/r/is_coll_char_set_appl.result
index d1663dfcde4..fbd7654984e 100644
--- a/mysql-test/suite/funcs_1/r/is_coll_char_set_appl.result
+++ b/mysql-test/suite/funcs_1/r/is_coll_char_set_appl.result
@@ -28,18 +28,27 @@ DROP FUNCTION test.f1;
#########################################################################
DESCRIBE information_schema.COLLATION_CHARACTER_SET_APPLICABILITY;
Field Type Null Key Default Extra
-COLLATION_NAME varchar(32) NO NULL
+COLLATION_NAME varchar(64) NO NULL
CHARACTER_SET_NAME varchar(32) NO NULL
+FULL_COLLATION_NAME varchar(64) NO NULL
+ID bigint(11) NO NULL
+IS_DEFAULT varchar(3) NO NULL
SHOW CREATE TABLE information_schema.COLLATION_CHARACTER_SET_APPLICABILITY;
Table Create Table
COLLATION_CHARACTER_SET_APPLICABILITY CREATE TEMPORARY TABLE `COLLATION_CHARACTER_SET_APPLICABILITY` (
- `COLLATION_NAME` varchar(32) NOT NULL,
- `CHARACTER_SET_NAME` varchar(32) NOT NULL
+ `COLLATION_NAME` varchar(64) NOT NULL,
+ `CHARACTER_SET_NAME` varchar(32) NOT NULL,
+ `FULL_COLLATION_NAME` varchar(64) NOT NULL,
+ `ID` bigint(11) NOT NULL,
+ `IS_DEFAULT` varchar(3) NOT NULL
) ENGINE=MEMORY DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci
SHOW COLUMNS FROM information_schema.COLLATION_CHARACTER_SET_APPLICABILITY;
Field Type Null Key Default Extra
-COLLATION_NAME varchar(32) NO NULL
+COLLATION_NAME varchar(64) NO NULL
CHARACTER_SET_NAME varchar(32) NO NULL
+FULL_COLLATION_NAME varchar(64) NO NULL
+ID bigint(11) NO NULL
+IS_DEFAULT varchar(3) NO NULL
# Testcases 3.2.4.2 and 3.2.4.3 are checked in suite/funcs_1/t/charset_collation*.test
########################################################################
# Testcases 3.2.1.3-3.2.1.5 + 3.2.1.8-3.2.1.12: INSERT/UPDATE/DELETE and
diff --git a/mysql-test/suite/funcs_1/r/is_collations.result b/mysql-test/suite/funcs_1/r/is_collations.result
index 1e840d50717..979b477b8bc 100644
--- a/mysql-test/suite/funcs_1/r/is_collations.result
+++ b/mysql-test/suite/funcs_1/r/is_collations.result
@@ -28,28 +28,28 @@ DROP FUNCTION test.f1;
#########################################################################
DESCRIBE information_schema.COLLATIONS;
Field Type Null Key Default Extra
-COLLATION_NAME varchar(32) NO NULL
-CHARACTER_SET_NAME varchar(32) NO NULL
-ID bigint(11) NO NULL
-IS_DEFAULT varchar(3) NO NULL
+COLLATION_NAME varchar(64) NO NULL
+CHARACTER_SET_NAME varchar(32) YES NULL
+ID bigint(11) YES NULL
+IS_DEFAULT varchar(3) YES NULL
IS_COMPILED varchar(3) NO NULL
SORTLEN bigint(3) NO NULL
SHOW CREATE TABLE information_schema.COLLATIONS;
Table Create Table
COLLATIONS CREATE TEMPORARY TABLE `COLLATIONS` (
- `COLLATION_NAME` varchar(32) NOT NULL,
- `CHARACTER_SET_NAME` varchar(32) NOT NULL,
- `ID` bigint(11) NOT NULL,
- `IS_DEFAULT` varchar(3) NOT NULL,
+ `COLLATION_NAME` varchar(64) NOT NULL,
+ `CHARACTER_SET_NAME` varchar(32),
+ `ID` bigint(11),
+ `IS_DEFAULT` varchar(3),
`IS_COMPILED` varchar(3) NOT NULL,
`SORTLEN` bigint(3) NOT NULL
) ENGINE=MEMORY DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci
SHOW COLUMNS FROM information_schema.COLLATIONS;
Field Type Null Key Default Extra
-COLLATION_NAME varchar(32) NO NULL
-CHARACTER_SET_NAME varchar(32) NO NULL
-ID bigint(11) NO NULL
-IS_DEFAULT varchar(3) NO NULL
+COLLATION_NAME varchar(64) NO NULL
+CHARACTER_SET_NAME varchar(32) YES NULL
+ID bigint(11) YES NULL
+IS_DEFAULT varchar(3) YES NULL
IS_COMPILED varchar(3) NO NULL
SORTLEN bigint(3) NO NULL
# Testcases 3.2.3.2 and 3.2.3.3 are checked in suite/funcs_1/t/charset_collation*.test
diff --git a/mysql-test/suite/funcs_1/r/is_columns.result b/mysql-test/suite/funcs_1/r/is_columns.result
index 7cd949c36aa..3d03a1d288a 100644
--- a/mysql-test/suite/funcs_1/r/is_columns.result
+++ b/mysql-test/suite/funcs_1/r/is_columns.result
@@ -42,7 +42,7 @@ NUMERIC_PRECISION bigint(21) unsigned YES NULL
NUMERIC_SCALE bigint(21) unsigned YES NULL
DATETIME_PRECISION bigint(21) unsigned YES NULL
CHARACTER_SET_NAME varchar(32) YES NULL
-COLLATION_NAME varchar(32) YES NULL
+COLLATION_NAME varchar(64) YES NULL
COLUMN_TYPE longtext NO NULL
COLUMN_KEY varchar(3) NO NULL
EXTRA varchar(80) NO NULL
@@ -67,7 +67,7 @@ COLUMNS CREATE TEMPORARY TABLE `COLUMNS` (
`NUMERIC_SCALE` bigint(21) unsigned,
`DATETIME_PRECISION` bigint(21) unsigned,
`CHARACTER_SET_NAME` varchar(32),
- `COLLATION_NAME` varchar(32),
+ `COLLATION_NAME` varchar(64),
`COLUMN_TYPE` longtext NOT NULL,
`COLUMN_KEY` varchar(3) NOT NULL,
`EXTRA` varchar(80) NOT NULL,
@@ -92,7 +92,7 @@ NUMERIC_PRECISION bigint(21) unsigned YES NULL
NUMERIC_SCALE bigint(21) unsigned YES NULL
DATETIME_PRECISION bigint(21) unsigned YES NULL
CHARACTER_SET_NAME varchar(32) YES NULL
-COLLATION_NAME varchar(32) YES NULL
+COLLATION_NAME varchar(64) YES NULL
COLUMN_TYPE longtext NO NULL
COLUMN_KEY varchar(3) NO NULL
EXTRA varchar(80) NO NULL
diff --git a/mysql-test/suite/funcs_1/r/is_columns_is.result b/mysql-test/suite/funcs_1/r/is_columns_is.result
index 3664f6861af..c88a3a9ac8d 100644
--- a/mysql-test/suite/funcs_1/r/is_columns_is.result
+++ b/mysql-test/suite/funcs_1/r/is_columns_is.result
@@ -21,7 +21,7 @@ def information_schema APPLICABLE_ROLES IS_DEFAULT 4 NULL YES varchar 3 9 NULL N
def information_schema APPLICABLE_ROLES IS_GRANTABLE 3 NULL NO varchar 3 9 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(3) select NEVER NULL
def information_schema APPLICABLE_ROLES ROLE_NAME 2 NULL NO varchar 128 384 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(128) select NEVER NULL
def information_schema CHARACTER_SETS CHARACTER_SET_NAME 1 NULL NO varchar 32 96 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(32) select NEVER NULL
-def information_schema CHARACTER_SETS DEFAULT_COLLATE_NAME 2 NULL NO varchar 32 96 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(32) select NEVER NULL
+def information_schema CHARACTER_SETS DEFAULT_COLLATE_NAME 2 NULL NO varchar 64 192 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(64) select NEVER NULL
def information_schema CHARACTER_SETS DESCRIPTION 3 NULL NO varchar 60 180 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(60) select NEVER NULL
def information_schema CHARACTER_SETS MAXLEN 4 NULL NO bigint NULL NULL 19 0 NULL NULL NULL bigint(3) select NEVER NULL
def information_schema CHECK_CONSTRAINTS CHECK_CLAUSE 6 NULL NO longtext 4294967295 4294967295 NULL NULL NULL utf8mb3 utf8mb3_general_ci longtext select NEVER NULL
@@ -55,18 +55,21 @@ def information_schema CLIENT_STATISTICS SELECT_COMMANDS 15 NULL NO bigint NULL
def information_schema CLIENT_STATISTICS TOTAL_CONNECTIONS 2 NULL NO bigint NULL NULL 19 0 NULL NULL NULL bigint(21) select NEVER NULL
def information_schema CLIENT_STATISTICS TOTAL_SSL_CONNECTIONS 24 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(21) unsigned select NEVER NULL
def information_schema CLIENT_STATISTICS UPDATE_COMMANDS 16 NULL NO bigint NULL NULL 19 0 NULL NULL NULL bigint(21) select NEVER NULL
-def information_schema COLLATIONS CHARACTER_SET_NAME 2 NULL NO varchar 32 96 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(32) select NEVER NULL
-def information_schema COLLATIONS COLLATION_NAME 1 NULL NO varchar 32 96 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(32) select NEVER NULL
-def information_schema COLLATIONS ID 3 NULL NO bigint NULL NULL 19 0 NULL NULL NULL bigint(11) select NEVER NULL
+def information_schema COLLATIONS CHARACTER_SET_NAME 2 NULL YES varchar 32 96 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(32) select NEVER NULL
+def information_schema COLLATIONS COLLATION_NAME 1 NULL NO varchar 64 192 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(64) select NEVER NULL
+def information_schema COLLATIONS ID 3 NULL YES bigint NULL NULL 19 0 NULL NULL NULL bigint(11) select NEVER NULL
def information_schema COLLATIONS IS_COMPILED 5 NULL NO varchar 3 9 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(3) select NEVER NULL
-def information_schema COLLATIONS IS_DEFAULT 4 NULL NO varchar 3 9 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(3) select NEVER NULL
+def information_schema COLLATIONS IS_DEFAULT 4 NULL YES varchar 3 9 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(3) select NEVER NULL
def information_schema COLLATIONS SORTLEN 6 NULL NO bigint NULL NULL 19 0 NULL NULL NULL bigint(3) select NEVER NULL
def information_schema COLLATION_CHARACTER_SET_APPLICABILITY CHARACTER_SET_NAME 2 NULL NO varchar 32 96 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(32) select NEVER NULL
-def information_schema COLLATION_CHARACTER_SET_APPLICABILITY COLLATION_NAME 1 NULL NO varchar 32 96 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(32) select NEVER NULL
+def information_schema COLLATION_CHARACTER_SET_APPLICABILITY COLLATION_NAME 1 NULL NO varchar 64 192 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(64) select NEVER NULL
+def information_schema COLLATION_CHARACTER_SET_APPLICABILITY FULL_COLLATION_NAME 3 NULL NO varchar 64 192 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(64) select NEVER NULL
+def information_schema COLLATION_CHARACTER_SET_APPLICABILITY ID 4 NULL NO bigint NULL NULL 19 0 NULL NULL NULL bigint(11) select NEVER NULL
+def information_schema COLLATION_CHARACTER_SET_APPLICABILITY IS_DEFAULT 5 NULL NO varchar 3 9 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(3) select NEVER NULL
def information_schema COLUMNS CHARACTER_MAXIMUM_LENGTH 9 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(21) unsigned select NEVER NULL
def information_schema COLUMNS CHARACTER_OCTET_LENGTH 10 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(21) unsigned select NEVER NULL
def information_schema COLUMNS CHARACTER_SET_NAME 14 NULL YES varchar 32 96 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(32) select NEVER NULL
-def information_schema COLUMNS COLLATION_NAME 15 NULL YES varchar 32 96 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(32) select NEVER NULL
+def information_schema COLUMNS COLLATION_NAME 15 NULL YES varchar 64 192 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(64) select NEVER NULL
def information_schema COLUMNS COLUMN_COMMENT 20 NULL NO varchar 1024 3072 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(1024) select NEVER NULL
def information_schema COLUMNS COLUMN_DEFAULT 6 NULL YES longtext 4294967295 4294967295 NULL NULL NULL utf8mb3 utf8mb3_general_ci longtext select NEVER NULL
def information_schema COLUMNS COLUMN_KEY 17 NULL NO varchar 3 9 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(3) select NEVER NULL
@@ -100,9 +103,9 @@ def information_schema ENGINES SUPPORT 2 NULL NO varchar 8 24 NULL NULL NULL utf
def information_schema ENGINES TRANSACTIONS 4 NULL YES varchar 3 9 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(3) select NEVER NULL
def information_schema ENGINES XA 5 NULL YES varchar 3 9 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(3) select NEVER NULL
def information_schema EVENTS CHARACTER_SET_CLIENT 22 NULL NO varchar 32 96 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(32) select NEVER NULL
-def information_schema EVENTS COLLATION_CONNECTION 23 NULL NO varchar 32 96 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(32) select NEVER NULL
+def information_schema EVENTS COLLATION_CONNECTION 23 NULL NO varchar 64 192 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(64) select NEVER NULL
def information_schema EVENTS CREATED 17 NULL NO datetime NULL NULL NULL NULL 0 NULL NULL datetime select NEVER NULL
-def information_schema EVENTS DATABASE_COLLATION 24 NULL NO varchar 32 96 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(32) select NEVER NULL
+def information_schema EVENTS DATABASE_COLLATION 24 NULL NO varchar 64 192 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(64) select NEVER NULL
def information_schema EVENTS DEFINER 4 NULL NO varchar 384 1152 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(384) select NEVER NULL
def information_schema EVENTS ENDS 14 NULL YES datetime NULL NULL NULL NULL 0 NULL NULL datetime select NEVER NULL
def information_schema EVENTS EVENT_BODY 6 NULL NO varchar 8 24 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(8) select NEVER NULL
@@ -298,10 +301,10 @@ def information_schema ROUTINES CHARACTER_MAXIMUM_LENGTH 7 NULL YES int NULL NUL
def information_schema ROUTINES CHARACTER_OCTET_LENGTH 8 NULL YES int NULL NULL 10 0 NULL NULL NULL int(21) select NEVER NULL
def information_schema ROUTINES CHARACTER_SET_CLIENT 29 NULL NO varchar 32 96 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(32) select NEVER NULL
def information_schema ROUTINES CHARACTER_SET_NAME 12 NULL YES varchar 64 192 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(64) select NEVER NULL
-def information_schema ROUTINES COLLATION_CONNECTION 30 NULL NO varchar 32 96 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(32) select NEVER NULL
+def information_schema ROUTINES COLLATION_CONNECTION 30 NULL NO varchar 64 192 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(64) select NEVER NULL
def information_schema ROUTINES COLLATION_NAME 13 NULL YES varchar 64 192 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(64) select NEVER NULL
def information_schema ROUTINES CREATED 24 NULL NO datetime NULL NULL NULL NULL 0 NULL NULL datetime select NEVER NULL
-def information_schema ROUTINES DATABASE_COLLATION 31 NULL NO varchar 32 96 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(32) select NEVER NULL
+def information_schema ROUTINES DATABASE_COLLATION 31 NULL NO varchar 64 192 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(64) select NEVER NULL
def information_schema ROUTINES DATA_TYPE 6 NULL NO varchar 64 192 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(64) select NEVER NULL
def information_schema ROUTINES DATETIME_PRECISION 11 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(21) unsigned select NEVER NULL
def information_schema ROUTINES DEFINER 28 NULL NO varchar 384 1152 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(384) select NEVER NULL
@@ -327,7 +330,7 @@ def information_schema ROUTINES SQL_MODE 26 NULL NO varchar 8192 24576 NULL NULL
def information_schema ROUTINES SQL_PATH 22 NULL YES varchar 64 192 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(64) select NEVER NULL
def information_schema SCHEMATA CATALOG_NAME 1 NULL NO varchar 512 1536 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(512) select NEVER NULL
def information_schema SCHEMATA DEFAULT_CHARACTER_SET_NAME 3 NULL NO varchar 32 96 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(32) select NEVER NULL
-def information_schema SCHEMATA DEFAULT_COLLATION_NAME 4 NULL NO varchar 32 96 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(32) select NEVER NULL
+def information_schema SCHEMATA DEFAULT_COLLATION_NAME 4 NULL NO varchar 64 192 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(64) select NEVER NULL
def information_schema SCHEMATA SCHEMA_COMMENT 6 NULL NO varchar 1024 3072 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(1024) select NEVER NULL
def information_schema SCHEMATA SCHEMA_NAME 2 NULL NO varchar 64 192 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(64) select NEVER NULL
def information_schema SCHEMATA SQL_PATH 5 NULL YES varchar 512 1536 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(512) select NEVER NULL
@@ -391,7 +394,7 @@ def information_schema TABLES MAX_DATA_LENGTH 11 NULL YES bigint NULL NULL 20 0
def information_schema TABLES MAX_INDEX_LENGTH 22 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(21) unsigned select NEVER NULL
def information_schema TABLES ROW_FORMAT 7 NULL YES varchar 10 30 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(10) select NEVER NULL
def information_schema TABLES TABLE_CATALOG 1 NULL NO varchar 512 1536 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(512) select NEVER NULL
-def information_schema TABLES TABLE_COLLATION 18 NULL YES varchar 32 96 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(32) select NEVER NULL
+def information_schema TABLES TABLE_COLLATION 18 NULL YES varchar 64 192 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(64) select NEVER NULL
def information_schema TABLES TABLE_COMMENT 21 NULL NO varchar 2048 6144 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(2048) select NEVER NULL
def information_schema TABLES TABLE_NAME 3 NULL NO varchar 64 192 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(64) select NEVER NULL
def information_schema TABLES TABLE_ROWS 8 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(21) unsigned select NEVER NULL
@@ -436,9 +439,9 @@ def information_schema TRIGGERS ACTION_REFERENCE_OLD_TABLE 13 NULL YES varchar 6
def information_schema TRIGGERS ACTION_STATEMENT 10 NULL NO longtext 4294967295 4294967295 NULL NULL NULL utf8mb3 utf8mb3_general_ci longtext select NEVER NULL
def information_schema TRIGGERS ACTION_TIMING 12 NULL NO varchar 6 18 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(6) select NEVER NULL
def information_schema TRIGGERS CHARACTER_SET_CLIENT 20 NULL NO varchar 32 96 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(32) select NEVER NULL
-def information_schema TRIGGERS COLLATION_CONNECTION 21 NULL NO varchar 32 96 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(32) select NEVER NULL
+def information_schema TRIGGERS COLLATION_CONNECTION 21 NULL NO varchar 64 192 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(64) select NEVER NULL
def information_schema TRIGGERS CREATED 17 NULL YES datetime NULL NULL NULL NULL 2 NULL NULL datetime(2) select NEVER NULL
-def information_schema TRIGGERS DATABASE_COLLATION 22 NULL NO varchar 32 96 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(32) select NEVER NULL
+def information_schema TRIGGERS DATABASE_COLLATION 22 NULL NO varchar 64 192 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(64) select NEVER NULL
def information_schema TRIGGERS DEFINER 19 NULL NO varchar 384 1152 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(384) select NEVER NULL
def information_schema TRIGGERS EVENT_MANIPULATION 4 NULL NO varchar 6 18 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(6) select NEVER NULL
def information_schema TRIGGERS EVENT_OBJECT_CATALOG 5 NULL NO varchar 512 1536 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(512) select NEVER NULL
@@ -480,7 +483,7 @@ def information_schema USER_STATISTICS USER 1 NULL NO varchar 128 384 NULL NULL
def information_schema VIEWS ALGORITHM 11 NULL NO varchar 10 30 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(10) select NEVER NULL
def information_schema VIEWS CHARACTER_SET_CLIENT 9 NULL NO varchar 32 96 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(32) select NEVER NULL
def information_schema VIEWS CHECK_OPTION 5 NULL NO varchar 8 24 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(8) select NEVER NULL
-def information_schema VIEWS COLLATION_CONNECTION 10 NULL NO varchar 32 96 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(32) select NEVER NULL
+def information_schema VIEWS COLLATION_CONNECTION 10 NULL NO varchar 64 192 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(64) select NEVER NULL
def information_schema VIEWS DEFINER 7 NULL NO varchar 384 1152 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(384) select NEVER NULL
def information_schema VIEWS IS_UPDATABLE 6 NULL NO varchar 3 9 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(3) select NEVER NULL
def information_schema VIEWS SECURITY_TYPE 8 NULL NO varchar 7 21 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(7) select NEVER NULL
@@ -569,7 +572,7 @@ COL_CML TABLE_SCHEMA TABLE_NAME COLUMN_NAME DATA_TYPE CHARACTER_MAXIMUM_LENGTH C
3.0000 information_schema APPLICABLE_ROLES IS_GRANTABLE varchar 3 9 utf8mb3 utf8mb3_general_ci varchar(3)
3.0000 information_schema APPLICABLE_ROLES IS_DEFAULT varchar 3 9 utf8mb3 utf8mb3_general_ci varchar(3)
3.0000 information_schema CHARACTER_SETS CHARACTER_SET_NAME varchar 32 96 utf8mb3 utf8mb3_general_ci varchar(32)
-3.0000 information_schema CHARACTER_SETS DEFAULT_COLLATE_NAME varchar 32 96 utf8mb3 utf8mb3_general_ci varchar(32)
+3.0000 information_schema CHARACTER_SETS DEFAULT_COLLATE_NAME varchar 64 192 utf8mb3 utf8mb3_general_ci varchar(64)
3.0000 information_schema CHARACTER_SETS DESCRIPTION varchar 60 180 utf8mb3 utf8mb3_general_ci varchar(60)
NULL information_schema CHARACTER_SETS MAXLEN bigint NULL NULL NULL NULL bigint(3)
3.0000 information_schema CHECK_CONSTRAINTS CONSTRAINT_CATALOG varchar 512 1536 utf8mb3 utf8mb3_general_ci varchar(512)
@@ -603,14 +606,17 @@ NULL information_schema CLIENT_STATISTICS ACCESS_DENIED bigint NULL NULL NULL NU
NULL information_schema CLIENT_STATISTICS EMPTY_QUERIES bigint NULL NULL NULL NULL bigint(21)
NULL information_schema CLIENT_STATISTICS TOTAL_SSL_CONNECTIONS bigint NULL NULL NULL NULL bigint(21) unsigned
NULL information_schema CLIENT_STATISTICS MAX_STATEMENT_TIME_EXCEEDED bigint NULL NULL NULL NULL bigint(21)
-3.0000 information_schema COLLATIONS COLLATION_NAME varchar 32 96 utf8mb3 utf8mb3_general_ci varchar(32)
+3.0000 information_schema COLLATIONS COLLATION_NAME varchar 64 192 utf8mb3 utf8mb3_general_ci varchar(64)
3.0000 information_schema COLLATIONS CHARACTER_SET_NAME varchar 32 96 utf8mb3 utf8mb3_general_ci varchar(32)
NULL information_schema COLLATIONS ID bigint NULL NULL NULL NULL bigint(11)
3.0000 information_schema COLLATIONS IS_DEFAULT varchar 3 9 utf8mb3 utf8mb3_general_ci varchar(3)
3.0000 information_schema COLLATIONS IS_COMPILED varchar 3 9 utf8mb3 utf8mb3_general_ci varchar(3)
NULL information_schema COLLATIONS SORTLEN bigint NULL NULL NULL NULL bigint(3)
-3.0000 information_schema COLLATION_CHARACTER_SET_APPLICABILITY COLLATION_NAME varchar 32 96 utf8mb3 utf8mb3_general_ci varchar(32)
+3.0000 information_schema COLLATION_CHARACTER_SET_APPLICABILITY COLLATION_NAME varchar 64 192 utf8mb3 utf8mb3_general_ci varchar(64)
3.0000 information_schema COLLATION_CHARACTER_SET_APPLICABILITY CHARACTER_SET_NAME varchar 32 96 utf8mb3 utf8mb3_general_ci varchar(32)
+3.0000 information_schema COLLATION_CHARACTER_SET_APPLICABILITY FULL_COLLATION_NAME varchar 64 192 utf8mb3 utf8mb3_general_ci varchar(64)
+NULL information_schema COLLATION_CHARACTER_SET_APPLICABILITY ID bigint NULL NULL NULL NULL bigint(11)
+3.0000 information_schema COLLATION_CHARACTER_SET_APPLICABILITY IS_DEFAULT varchar 3 9 utf8mb3 utf8mb3_general_ci varchar(3)
3.0000 information_schema COLUMNS TABLE_CATALOG varchar 512 1536 utf8mb3 utf8mb3_general_ci varchar(512)
3.0000 information_schema COLUMNS TABLE_SCHEMA varchar 64 192 utf8mb3 utf8mb3_general_ci varchar(64)
3.0000 information_schema COLUMNS TABLE_NAME varchar 64 192 utf8mb3 utf8mb3_general_ci varchar(64)
@@ -625,7 +631,7 @@ NULL information_schema COLUMNS NUMERIC_PRECISION bigint NULL NULL NULL NULL big
NULL information_schema COLUMNS NUMERIC_SCALE bigint NULL NULL NULL NULL bigint(21) unsigned
NULL information_schema COLUMNS DATETIME_PRECISION bigint NULL NULL NULL NULL bigint(21) unsigned
3.0000 information_schema COLUMNS CHARACTER_SET_NAME varchar 32 96 utf8mb3 utf8mb3_general_ci varchar(32)
-3.0000 information_schema COLUMNS COLLATION_NAME varchar 32 96 utf8mb3 utf8mb3_general_ci varchar(32)
+3.0000 information_schema COLUMNS COLLATION_NAME varchar 64 192 utf8mb3 utf8mb3_general_ci varchar(64)
1.0000 information_schema COLUMNS COLUMN_TYPE longtext 4294967295 4294967295 utf8mb3 utf8mb3_general_ci longtext
3.0000 information_schema COLUMNS COLUMN_KEY varchar 3 9 utf8mb3 utf8mb3_general_ci varchar(3)
3.0000 information_schema COLUMNS EXTRA varchar 80 240 utf8mb3 utf8mb3_general_ci varchar(80)
@@ -669,8 +675,8 @@ NULL information_schema EVENTS LAST_EXECUTED datetime NULL NULL NULL NULL dateti
3.0000 information_schema EVENTS EVENT_COMMENT varchar 64 192 utf8mb3 utf8mb3_general_ci varchar(64)
NULL information_schema EVENTS ORIGINATOR bigint NULL NULL NULL NULL bigint(10)
3.0000 information_schema EVENTS CHARACTER_SET_CLIENT varchar 32 96 utf8mb3 utf8mb3_general_ci varchar(32)
-3.0000 information_schema EVENTS COLLATION_CONNECTION varchar 32 96 utf8mb3 utf8mb3_general_ci varchar(32)
-3.0000 information_schema EVENTS DATABASE_COLLATION varchar 32 96 utf8mb3 utf8mb3_general_ci varchar(32)
+3.0000 information_schema EVENTS COLLATION_CONNECTION varchar 64 192 utf8mb3 utf8mb3_general_ci varchar(64)
+3.0000 information_schema EVENTS DATABASE_COLLATION varchar 64 192 utf8mb3 utf8mb3_general_ci varchar(64)
NULL information_schema FILES FILE_ID bigint NULL NULL NULL NULL bigint(4)
3.0000 information_schema FILES FILE_NAME varchar 512 1536 utf8mb3 utf8mb3_general_ci varchar(512)
3.0000 information_schema FILES FILE_TYPE varchar 20 60 utf8mb3 utf8mb3_general_ci varchar(20)
@@ -871,12 +877,12 @@ NULL information_schema ROUTINES LAST_ALTERED datetime NULL NULL NULL NULL datet
1.0000 information_schema ROUTINES ROUTINE_COMMENT longtext 4294967295 4294967295 utf8mb3 utf8mb3_general_ci longtext
3.0000 information_schema ROUTINES DEFINER varchar 384 1152 utf8mb3 utf8mb3_general_ci varchar(384)
3.0000 information_schema ROUTINES CHARACTER_SET_CLIENT varchar 32 96 utf8mb3 utf8mb3_general_ci varchar(32)
-3.0000 information_schema ROUTINES COLLATION_CONNECTION varchar 32 96 utf8mb3 utf8mb3_general_ci varchar(32)
-3.0000 information_schema ROUTINES DATABASE_COLLATION varchar 32 96 utf8mb3 utf8mb3_general_ci varchar(32)
+3.0000 information_schema ROUTINES COLLATION_CONNECTION varchar 64 192 utf8mb3 utf8mb3_general_ci varchar(64)
+3.0000 information_schema ROUTINES DATABASE_COLLATION varchar 64 192 utf8mb3 utf8mb3_general_ci varchar(64)
3.0000 information_schema SCHEMATA CATALOG_NAME varchar 512 1536 utf8mb3 utf8mb3_general_ci varchar(512)
3.0000 information_schema SCHEMATA SCHEMA_NAME varchar 64 192 utf8mb3 utf8mb3_general_ci varchar(64)
3.0000 information_schema SCHEMATA DEFAULT_CHARACTER_SET_NAME varchar 32 96 utf8mb3 utf8mb3_general_ci varchar(32)
-3.0000 information_schema SCHEMATA DEFAULT_COLLATION_NAME varchar 32 96 utf8mb3 utf8mb3_general_ci varchar(32)
+3.0000 information_schema SCHEMATA DEFAULT_COLLATION_NAME varchar 64 192 utf8mb3 utf8mb3_general_ci varchar(64)
3.0000 information_schema SCHEMATA SQL_PATH varchar 512 1536 utf8mb3 utf8mb3_general_ci varchar(512)
3.0000 information_schema SCHEMATA SCHEMA_COMMENT varchar 1024 3072 utf8mb3 utf8mb3_general_ci varchar(1024)
3.0000 information_schema SCHEMA_PRIVILEGES GRANTEE varchar 385 1155 utf8mb3 utf8mb3_general_ci varchar(385)
@@ -942,7 +948,7 @@ NULL information_schema TABLES AUTO_INCREMENT bigint NULL NULL NULL NULL bigint(
NULL information_schema TABLES CREATE_TIME datetime NULL NULL NULL NULL datetime
NULL information_schema TABLES UPDATE_TIME datetime NULL NULL NULL NULL datetime
NULL information_schema TABLES CHECK_TIME datetime NULL NULL NULL NULL datetime
-3.0000 information_schema TABLES TABLE_COLLATION varchar 32 96 utf8mb3 utf8mb3_general_ci varchar(32)
+3.0000 information_schema TABLES TABLE_COLLATION varchar 64 192 utf8mb3 utf8mb3_general_ci varchar(64)
NULL information_schema TABLES CHECKSUM bigint NULL NULL NULL NULL bigint(21) unsigned
3.0000 information_schema TABLES CREATE_OPTIONS varchar 2048 6144 utf8mb3 utf8mb3_general_ci varchar(2048)
3.0000 information_schema TABLES TABLE_COMMENT varchar 2048 6144 utf8mb3 utf8mb3_general_ci varchar(2048)
@@ -994,8 +1000,8 @@ NULL information_schema TRIGGERS CREATED datetime NULL NULL NULL NULL datetime(2
3.0000 information_schema TRIGGERS SQL_MODE varchar 8192 24576 utf8mb3 utf8mb3_general_ci varchar(8192)
3.0000 information_schema TRIGGERS DEFINER varchar 384 1152 utf8mb3 utf8mb3_general_ci varchar(384)
3.0000 information_schema TRIGGERS CHARACTER_SET_CLIENT varchar 32 96 utf8mb3 utf8mb3_general_ci varchar(32)
-3.0000 information_schema TRIGGERS COLLATION_CONNECTION varchar 32 96 utf8mb3 utf8mb3_general_ci varchar(32)
-3.0000 information_schema TRIGGERS DATABASE_COLLATION varchar 32 96 utf8mb3 utf8mb3_general_ci varchar(32)
+3.0000 information_schema TRIGGERS COLLATION_CONNECTION varchar 64 192 utf8mb3 utf8mb3_general_ci varchar(64)
+3.0000 information_schema TRIGGERS DATABASE_COLLATION varchar 64 192 utf8mb3 utf8mb3_general_ci varchar(64)
3.0000 information_schema USER_PRIVILEGES GRANTEE varchar 385 1155 utf8mb3 utf8mb3_general_ci varchar(385)
3.0000 information_schema USER_PRIVILEGES TABLE_CATALOG varchar 512 1536 utf8mb3 utf8mb3_general_ci varchar(512)
3.0000 information_schema USER_PRIVILEGES PRIVILEGE_TYPE varchar 64 192 utf8mb3 utf8mb3_general_ci varchar(64)
@@ -1034,5 +1040,5 @@ NULL information_schema USER_STATISTICS MAX_STATEMENT_TIME_EXCEEDED bigint NULL
3.0000 information_schema VIEWS DEFINER varchar 384 1152 utf8mb3 utf8mb3_general_ci varchar(384)
3.0000 information_schema VIEWS SECURITY_TYPE varchar 7 21 utf8mb3 utf8mb3_general_ci varchar(7)
3.0000 information_schema VIEWS CHARACTER_SET_CLIENT varchar 32 96 utf8mb3 utf8mb3_general_ci varchar(32)
-3.0000 information_schema VIEWS COLLATION_CONNECTION varchar 32 96 utf8mb3 utf8mb3_general_ci varchar(32)
+3.0000 information_schema VIEWS COLLATION_CONNECTION varchar 64 192 utf8mb3 utf8mb3_general_ci varchar(64)
3.0000 information_schema VIEWS ALGORITHM varchar 10 30 utf8mb3 utf8mb3_general_ci varchar(10)
diff --git a/mysql-test/suite/funcs_1/r/is_columns_is_embedded.result b/mysql-test/suite/funcs_1/r/is_columns_is_embedded.result
index 622f839901f..bb12a0c38df 100644
--- a/mysql-test/suite/funcs_1/r/is_columns_is_embedded.result
+++ b/mysql-test/suite/funcs_1/r/is_columns_is_embedded.result
@@ -21,7 +21,7 @@ def information_schema APPLICABLE_ROLES IS_DEFAULT 4 NULL YES varchar 3 9 NULL N
def information_schema APPLICABLE_ROLES IS_GRANTABLE 3 NULL NO varchar 3 9 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(3) NEVER NULL
def information_schema APPLICABLE_ROLES ROLE_NAME 2 NULL NO varchar 128 384 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(128) NEVER NULL
def information_schema CHARACTER_SETS CHARACTER_SET_NAME 1 NULL NO varchar 32 96 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(32) NEVER NULL
-def information_schema CHARACTER_SETS DEFAULT_COLLATE_NAME 2 NULL NO varchar 32 96 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(32) NEVER NULL
+def information_schema CHARACTER_SETS DEFAULT_COLLATE_NAME 2 NULL NO varchar 64 192 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(64) NEVER NULL
def information_schema CHARACTER_SETS DESCRIPTION 3 NULL NO varchar 60 180 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(60) NEVER NULL
def information_schema CHARACTER_SETS MAXLEN 4 NULL NO bigint NULL NULL 19 0 NULL NULL NULL bigint(3) NEVER NULL
def information_schema CHECK_CONSTRAINTS CHECK_CLAUSE 6 NULL NO longtext 4294967295 4294967295 NULL NULL NULL utf8mb3 utf8mb3_general_ci longtext NEVER NULL
@@ -55,18 +55,21 @@ def information_schema CLIENT_STATISTICS SELECT_COMMANDS 15 NULL NO bigint NULL
def information_schema CLIENT_STATISTICS TOTAL_CONNECTIONS 2 NULL NO bigint NULL NULL 19 0 NULL NULL NULL bigint(21) NEVER NULL
def information_schema CLIENT_STATISTICS TOTAL_SSL_CONNECTIONS 24 NULL NO bigint NULL NULL 20 0 NULL NULL NULL bigint(21) unsigned NEVER NULL
def information_schema CLIENT_STATISTICS UPDATE_COMMANDS 16 NULL NO bigint NULL NULL 19 0 NULL NULL NULL bigint(21) NEVER NULL
-def information_schema COLLATIONS CHARACTER_SET_NAME 2 NULL NO varchar 32 96 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(32) NEVER NULL
-def information_schema COLLATIONS COLLATION_NAME 1 NULL NO varchar 32 96 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(32) NEVER NULL
-def information_schema COLLATIONS ID 3 NULL NO bigint NULL NULL 19 0 NULL NULL NULL bigint(11) NEVER NULL
+def information_schema COLLATIONS CHARACTER_SET_NAME 2 NULL YES varchar 32 96 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(32) NEVER NULL
+def information_schema COLLATIONS COLLATION_NAME 1 NULL NO varchar 64 192 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(64) NEVER NULL
+def information_schema COLLATIONS ID 3 NULL YES bigint NULL NULL 19 0 NULL NULL NULL bigint(11) NEVER NULL
def information_schema COLLATIONS IS_COMPILED 5 NULL NO varchar 3 9 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(3) NEVER NULL
-def information_schema COLLATIONS IS_DEFAULT 4 NULL NO varchar 3 9 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(3) NEVER NULL
+def information_schema COLLATIONS IS_DEFAULT 4 NULL YES varchar 3 9 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(3) NEVER NULL
def information_schema COLLATIONS SORTLEN 6 NULL NO bigint NULL NULL 19 0 NULL NULL NULL bigint(3) NEVER NULL
def information_schema COLLATION_CHARACTER_SET_APPLICABILITY CHARACTER_SET_NAME 2 NULL NO varchar 32 96 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(32) NEVER NULL
-def information_schema COLLATION_CHARACTER_SET_APPLICABILITY COLLATION_NAME 1 NULL NO varchar 32 96 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(32) NEVER NULL
+def information_schema COLLATION_CHARACTER_SET_APPLICABILITY COLLATION_NAME 1 NULL NO varchar 64 192 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(64) NEVER NULL
+def information_schema COLLATION_CHARACTER_SET_APPLICABILITY FULL_COLLATION_NAME 3 NULL NO varchar 64 192 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(64) NEVER NULL
+def information_schema COLLATION_CHARACTER_SET_APPLICABILITY ID 4 NULL NO bigint NULL NULL 19 0 NULL NULL NULL bigint(11) NEVER NULL
+def information_schema COLLATION_CHARACTER_SET_APPLICABILITY IS_DEFAULT 5 NULL NO varchar 3 9 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(3) NEVER NULL
def information_schema COLUMNS CHARACTER_MAXIMUM_LENGTH 9 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(21) unsigned NEVER NULL
def information_schema COLUMNS CHARACTER_OCTET_LENGTH 10 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(21) unsigned NEVER NULL
def information_schema COLUMNS CHARACTER_SET_NAME 14 NULL YES varchar 32 96 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(32) NEVER NULL
-def information_schema COLUMNS COLLATION_NAME 15 NULL YES varchar 32 96 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(32) NEVER NULL
+def information_schema COLUMNS COLLATION_NAME 15 NULL YES varchar 64 192 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(64) NEVER NULL
def information_schema COLUMNS COLUMN_COMMENT 20 NULL NO varchar 1024 3072 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(1024) NEVER NULL
def information_schema COLUMNS COLUMN_DEFAULT 6 NULL YES longtext 4294967295 4294967295 NULL NULL NULL utf8mb3 utf8mb3_general_ci longtext NEVER NULL
def information_schema COLUMNS COLUMN_KEY 17 NULL NO varchar 3 9 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(3) NEVER NULL
@@ -100,9 +103,9 @@ def information_schema ENGINES SUPPORT 2 NULL NO varchar 8 24 NULL NULL NULL utf
def information_schema ENGINES TRANSACTIONS 4 NULL YES varchar 3 9 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(3) NEVER NULL
def information_schema ENGINES XA 5 NULL YES varchar 3 9 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(3) NEVER NULL
def information_schema EVENTS CHARACTER_SET_CLIENT 22 NULL NO varchar 32 96 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(32) NEVER NULL
-def information_schema EVENTS COLLATION_CONNECTION 23 NULL NO varchar 32 96 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(32) NEVER NULL
+def information_schema EVENTS COLLATION_CONNECTION 23 NULL NO varchar 64 192 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(64) NEVER NULL
def information_schema EVENTS CREATED 17 NULL NO datetime NULL NULL NULL NULL 0 NULL NULL datetime NEVER NULL
-def information_schema EVENTS DATABASE_COLLATION 24 NULL NO varchar 32 96 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(32) NEVER NULL
+def information_schema EVENTS DATABASE_COLLATION 24 NULL NO varchar 64 192 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(64) NEVER NULL
def information_schema EVENTS DEFINER 4 NULL NO varchar 384 1152 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(384) NEVER NULL
def information_schema EVENTS ENDS 14 NULL YES datetime NULL NULL NULL NULL 0 NULL NULL datetime NEVER NULL
def information_schema EVENTS EVENT_BODY 6 NULL NO varchar 8 24 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(8) NEVER NULL
@@ -298,10 +301,10 @@ def information_schema ROUTINES CHARACTER_MAXIMUM_LENGTH 7 NULL YES int NULL NUL
def information_schema ROUTINES CHARACTER_OCTET_LENGTH 8 NULL YES int NULL NULL 10 0 NULL NULL NULL int(21) NEVER NULL
def information_schema ROUTINES CHARACTER_SET_CLIENT 29 NULL NO varchar 32 96 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(32) NEVER NULL
def information_schema ROUTINES CHARACTER_SET_NAME 12 NULL YES varchar 64 192 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(64) NEVER NULL
-def information_schema ROUTINES COLLATION_CONNECTION 30 NULL NO varchar 32 96 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(32) NEVER NULL
+def information_schema ROUTINES COLLATION_CONNECTION 30 NULL NO varchar 64 192 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(64) NEVER NULL
def information_schema ROUTINES COLLATION_NAME 13 NULL YES varchar 64 192 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(64) NEVER NULL
def information_schema ROUTINES CREATED 24 NULL NO datetime NULL NULL NULL NULL 0 NULL NULL datetime NEVER NULL
-def information_schema ROUTINES DATABASE_COLLATION 31 NULL NO varchar 32 96 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(32) NEVER NULL
+def information_schema ROUTINES DATABASE_COLLATION 31 NULL NO varchar 64 192 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(64) NEVER NULL
def information_schema ROUTINES DATA_TYPE 6 NULL NO varchar 64 192 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(64) NEVER NULL
def information_schema ROUTINES DATETIME_PRECISION 11 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(21) unsigned NEVER NULL
def information_schema ROUTINES DEFINER 28 NULL NO varchar 384 1152 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(384) NEVER NULL
@@ -327,7 +330,7 @@ def information_schema ROUTINES SQL_MODE 26 NULL NO varchar 8192 24576 NULL NULL
def information_schema ROUTINES SQL_PATH 22 NULL YES varchar 64 192 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(64) NEVER NULL
def information_schema SCHEMATA CATALOG_NAME 1 NULL NO varchar 512 1536 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(512) NEVER NULL
def information_schema SCHEMATA DEFAULT_CHARACTER_SET_NAME 3 NULL NO varchar 32 96 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(32) NEVER NULL
-def information_schema SCHEMATA DEFAULT_COLLATION_NAME 4 NULL NO varchar 32 96 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(32) NEVER NULL
+def information_schema SCHEMATA DEFAULT_COLLATION_NAME 4 NULL NO varchar 64 192 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(64) NEVER NULL
def information_schema SCHEMATA SCHEMA_COMMENT 6 NULL NO varchar 1024 3072 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(1024) NEVER NULL
def information_schema SCHEMATA SCHEMA_NAME 2 NULL NO varchar 64 192 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(64) NEVER NULL
def information_schema SCHEMATA SQL_PATH 5 NULL YES varchar 512 1536 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(512) NEVER NULL
@@ -391,7 +394,7 @@ def information_schema TABLES MAX_DATA_LENGTH 11 NULL YES bigint NULL NULL 20 0
def information_schema TABLES MAX_INDEX_LENGTH 22 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(21) unsigned NEVER NULL
def information_schema TABLES ROW_FORMAT 7 NULL YES varchar 10 30 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(10) NEVER NULL
def information_schema TABLES TABLE_CATALOG 1 NULL NO varchar 512 1536 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(512) NEVER NULL
-def information_schema TABLES TABLE_COLLATION 18 NULL YES varchar 32 96 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(32) NEVER NULL
+def information_schema TABLES TABLE_COLLATION 18 NULL YES varchar 64 192 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(64) NEVER NULL
def information_schema TABLES TABLE_COMMENT 21 NULL NO varchar 2048 6144 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(2048) NEVER NULL
def information_schema TABLES TABLE_NAME 3 NULL NO varchar 64 192 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(64) NEVER NULL
def information_schema TABLES TABLE_ROWS 8 NULL YES bigint NULL NULL 20 0 NULL NULL NULL bigint(21) unsigned NEVER NULL
@@ -436,9 +439,9 @@ def information_schema TRIGGERS ACTION_REFERENCE_OLD_TABLE 13 NULL YES varchar 6
def information_schema TRIGGERS ACTION_STATEMENT 10 NULL NO longtext 4294967295 4294967295 NULL NULL NULL utf8mb3 utf8mb3_general_ci longtext NEVER NULL
def information_schema TRIGGERS ACTION_TIMING 12 NULL NO varchar 6 18 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(6) NEVER NULL
def information_schema TRIGGERS CHARACTER_SET_CLIENT 20 NULL NO varchar 32 96 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(32) NEVER NULL
-def information_schema TRIGGERS COLLATION_CONNECTION 21 NULL NO varchar 32 96 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(32) NEVER NULL
+def information_schema TRIGGERS COLLATION_CONNECTION 21 NULL NO varchar 64 192 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(64) NEVER NULL
def information_schema TRIGGERS CREATED 17 NULL YES datetime NULL NULL NULL NULL 2 NULL NULL datetime(2) NEVER NULL
-def information_schema TRIGGERS DATABASE_COLLATION 22 NULL NO varchar 32 96 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(32) NEVER NULL
+def information_schema TRIGGERS DATABASE_COLLATION 22 NULL NO varchar 64 192 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(64) NEVER NULL
def information_schema TRIGGERS DEFINER 19 NULL NO varchar 384 1152 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(384) NEVER NULL
def information_schema TRIGGERS EVENT_MANIPULATION 4 NULL NO varchar 6 18 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(6) NEVER NULL
def information_schema TRIGGERS EVENT_OBJECT_CATALOG 5 NULL NO varchar 512 1536 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(512) NEVER NULL
@@ -480,7 +483,7 @@ def information_schema USER_STATISTICS USER 1 NULL NO varchar 128 384 NULL NULL
def information_schema VIEWS ALGORITHM 11 NULL NO varchar 10 30 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(10) NEVER NULL
def information_schema VIEWS CHARACTER_SET_CLIENT 9 NULL NO varchar 32 96 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(32) NEVER NULL
def information_schema VIEWS CHECK_OPTION 5 NULL NO varchar 8 24 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(8) NEVER NULL
-def information_schema VIEWS COLLATION_CONNECTION 10 NULL NO varchar 32 96 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(32) NEVER NULL
+def information_schema VIEWS COLLATION_CONNECTION 10 NULL NO varchar 64 192 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(64) NEVER NULL
def information_schema VIEWS DEFINER 7 NULL NO varchar 384 1152 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(384) NEVER NULL
def information_schema VIEWS IS_UPDATABLE 6 NULL NO varchar 3 9 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(3) NEVER NULL
def information_schema VIEWS SECURITY_TYPE 8 NULL NO varchar 7 21 NULL NULL NULL utf8mb3 utf8mb3_general_ci varchar(7) NEVER NULL
@@ -569,7 +572,7 @@ COL_CML TABLE_SCHEMA TABLE_NAME COLUMN_NAME DATA_TYPE CHARACTER_MAXIMUM_LENGTH C
3.0000 information_schema APPLICABLE_ROLES IS_GRANTABLE varchar 3 9 utf8mb3 utf8mb3_general_ci varchar(3)
3.0000 information_schema APPLICABLE_ROLES IS_DEFAULT varchar 3 9 utf8mb3 utf8mb3_general_ci varchar(3)
3.0000 information_schema CHARACTER_SETS CHARACTER_SET_NAME varchar 32 96 utf8mb3 utf8mb3_general_ci varchar(32)
-3.0000 information_schema CHARACTER_SETS DEFAULT_COLLATE_NAME varchar 32 96 utf8mb3 utf8mb3_general_ci varchar(32)
+3.0000 information_schema CHARACTER_SETS DEFAULT_COLLATE_NAME varchar 64 192 utf8mb3 utf8mb3_general_ci varchar(64)
3.0000 information_schema CHARACTER_SETS DESCRIPTION varchar 60 180 utf8mb3 utf8mb3_general_ci varchar(60)
NULL information_schema CHARACTER_SETS MAXLEN bigint NULL NULL NULL NULL bigint(3)
3.0000 information_schema CHECK_CONSTRAINTS CONSTRAINT_CATALOG varchar 512 1536 utf8mb3 utf8mb3_general_ci varchar(512)
@@ -603,14 +606,17 @@ NULL information_schema CLIENT_STATISTICS ACCESS_DENIED bigint NULL NULL NULL NU
NULL information_schema CLIENT_STATISTICS EMPTY_QUERIES bigint NULL NULL NULL NULL bigint(21)
NULL information_schema CLIENT_STATISTICS TOTAL_SSL_CONNECTIONS bigint NULL NULL NULL NULL bigint(21) unsigned
NULL information_schema CLIENT_STATISTICS MAX_STATEMENT_TIME_EXCEEDED bigint NULL NULL NULL NULL bigint(21)
-3.0000 information_schema COLLATIONS COLLATION_NAME varchar 32 96 utf8mb3 utf8mb3_general_ci varchar(32)
+3.0000 information_schema COLLATIONS COLLATION_NAME varchar 64 192 utf8mb3 utf8mb3_general_ci varchar(64)
3.0000 information_schema COLLATIONS CHARACTER_SET_NAME varchar 32 96 utf8mb3 utf8mb3_general_ci varchar(32)
NULL information_schema COLLATIONS ID bigint NULL NULL NULL NULL bigint(11)
3.0000 information_schema COLLATIONS IS_DEFAULT varchar 3 9 utf8mb3 utf8mb3_general_ci varchar(3)
3.0000 information_schema COLLATIONS IS_COMPILED varchar 3 9 utf8mb3 utf8mb3_general_ci varchar(3)
NULL information_schema COLLATIONS SORTLEN bigint NULL NULL NULL NULL bigint(3)
-3.0000 information_schema COLLATION_CHARACTER_SET_APPLICABILITY COLLATION_NAME varchar 32 96 utf8mb3 utf8mb3_general_ci varchar(32)
+3.0000 information_schema COLLATION_CHARACTER_SET_APPLICABILITY COLLATION_NAME varchar 64 192 utf8mb3 utf8mb3_general_ci varchar(64)
3.0000 information_schema COLLATION_CHARACTER_SET_APPLICABILITY CHARACTER_SET_NAME varchar 32 96 utf8mb3 utf8mb3_general_ci varchar(32)
+3.0000 information_schema COLLATION_CHARACTER_SET_APPLICABILITY FULL_COLLATION_NAME varchar 64 192 utf8mb3 utf8mb3_general_ci varchar(64)
+NULL information_schema COLLATION_CHARACTER_SET_APPLICABILITY ID bigint NULL NULL NULL NULL bigint(11)
+3.0000 information_schema COLLATION_CHARACTER_SET_APPLICABILITY IS_DEFAULT varchar 3 9 utf8mb3 utf8mb3_general_ci varchar(3)
3.0000 information_schema COLUMNS TABLE_CATALOG varchar 512 1536 utf8mb3 utf8mb3_general_ci varchar(512)
3.0000 information_schema COLUMNS TABLE_SCHEMA varchar 64 192 utf8mb3 utf8mb3_general_ci varchar(64)
3.0000 information_schema COLUMNS TABLE_NAME varchar 64 192 utf8mb3 utf8mb3_general_ci varchar(64)
@@ -625,7 +631,7 @@ NULL information_schema COLUMNS NUMERIC_PRECISION bigint NULL NULL NULL NULL big
NULL information_schema COLUMNS NUMERIC_SCALE bigint NULL NULL NULL NULL bigint(21) unsigned
NULL information_schema COLUMNS DATETIME_PRECISION bigint NULL NULL NULL NULL bigint(21) unsigned
3.0000 information_schema COLUMNS CHARACTER_SET_NAME varchar 32 96 utf8mb3 utf8mb3_general_ci varchar(32)
-3.0000 information_schema COLUMNS COLLATION_NAME varchar 32 96 utf8mb3 utf8mb3_general_ci varchar(32)
+3.0000 information_schema COLUMNS COLLATION_NAME varchar 64 192 utf8mb3 utf8mb3_general_ci varchar(64)
1.0000 information_schema COLUMNS COLUMN_TYPE longtext 4294967295 4294967295 utf8mb3 utf8mb3_general_ci longtext
3.0000 information_schema COLUMNS COLUMN_KEY varchar 3 9 utf8mb3 utf8mb3_general_ci varchar(3)
3.0000 information_schema COLUMNS EXTRA varchar 80 240 utf8mb3 utf8mb3_general_ci varchar(80)
@@ -669,8 +675,8 @@ NULL information_schema EVENTS LAST_EXECUTED datetime NULL NULL NULL NULL dateti
3.0000 information_schema EVENTS EVENT_COMMENT varchar 64 192 utf8mb3 utf8mb3_general_ci varchar(64)
NULL information_schema EVENTS ORIGINATOR bigint NULL NULL NULL NULL bigint(10)
3.0000 information_schema EVENTS CHARACTER_SET_CLIENT varchar 32 96 utf8mb3 utf8mb3_general_ci varchar(32)
-3.0000 information_schema EVENTS COLLATION_CONNECTION varchar 32 96 utf8mb3 utf8mb3_general_ci varchar(32)
-3.0000 information_schema EVENTS DATABASE_COLLATION varchar 32 96 utf8mb3 utf8mb3_general_ci varchar(32)
+3.0000 information_schema EVENTS COLLATION_CONNECTION varchar 64 192 utf8mb3 utf8mb3_general_ci varchar(64)
+3.0000 information_schema EVENTS DATABASE_COLLATION varchar 64 192 utf8mb3 utf8mb3_general_ci varchar(64)
NULL information_schema FILES FILE_ID bigint NULL NULL NULL NULL bigint(4)
3.0000 information_schema FILES FILE_NAME varchar 512 1536 utf8mb3 utf8mb3_general_ci varchar(512)
3.0000 information_schema FILES FILE_TYPE varchar 20 60 utf8mb3 utf8mb3_general_ci varchar(20)
@@ -871,12 +877,12 @@ NULL information_schema ROUTINES LAST_ALTERED datetime NULL NULL NULL NULL datet
1.0000 information_schema ROUTINES ROUTINE_COMMENT longtext 4294967295 4294967295 utf8mb3 utf8mb3_general_ci longtext
3.0000 information_schema ROUTINES DEFINER varchar 384 1152 utf8mb3 utf8mb3_general_ci varchar(384)
3.0000 information_schema ROUTINES CHARACTER_SET_CLIENT varchar 32 96 utf8mb3 utf8mb3_general_ci varchar(32)
-3.0000 information_schema ROUTINES COLLATION_CONNECTION varchar 32 96 utf8mb3 utf8mb3_general_ci varchar(32)
-3.0000 information_schema ROUTINES DATABASE_COLLATION varchar 32 96 utf8mb3 utf8mb3_general_ci varchar(32)
+3.0000 information_schema ROUTINES COLLATION_CONNECTION varchar 64 192 utf8mb3 utf8mb3_general_ci varchar(64)
+3.0000 information_schema ROUTINES DATABASE_COLLATION varchar 64 192 utf8mb3 utf8mb3_general_ci varchar(64)
3.0000 information_schema SCHEMATA CATALOG_NAME varchar 512 1536 utf8mb3 utf8mb3_general_ci varchar(512)
3.0000 information_schema SCHEMATA SCHEMA_NAME varchar 64 192 utf8mb3 utf8mb3_general_ci varchar(64)
3.0000 information_schema SCHEMATA DEFAULT_CHARACTER_SET_NAME varchar 32 96 utf8mb3 utf8mb3_general_ci varchar(32)
-3.0000 information_schema SCHEMATA DEFAULT_COLLATION_NAME varchar 32 96 utf8mb3 utf8mb3_general_ci varchar(32)
+3.0000 information_schema SCHEMATA DEFAULT_COLLATION_NAME varchar 64 192 utf8mb3 utf8mb3_general_ci varchar(64)
3.0000 information_schema SCHEMATA SQL_PATH varchar 512 1536 utf8mb3 utf8mb3_general_ci varchar(512)
3.0000 information_schema SCHEMATA SCHEMA_COMMENT varchar 1024 3072 utf8mb3 utf8mb3_general_ci varchar(1024)
3.0000 information_schema SCHEMA_PRIVILEGES GRANTEE varchar 385 1155 utf8mb3 utf8mb3_general_ci varchar(385)
@@ -942,7 +948,7 @@ NULL information_schema TABLES AUTO_INCREMENT bigint NULL NULL NULL NULL bigint(
NULL information_schema TABLES CREATE_TIME datetime NULL NULL NULL NULL datetime
NULL information_schema TABLES UPDATE_TIME datetime NULL NULL NULL NULL datetime
NULL information_schema TABLES CHECK_TIME datetime NULL NULL NULL NULL datetime
-3.0000 information_schema TABLES TABLE_COLLATION varchar 32 96 utf8mb3 utf8mb3_general_ci varchar(32)
+3.0000 information_schema TABLES TABLE_COLLATION varchar 64 192 utf8mb3 utf8mb3_general_ci varchar(64)
NULL information_schema TABLES CHECKSUM bigint NULL NULL NULL NULL bigint(21) unsigned
3.0000 information_schema TABLES CREATE_OPTIONS varchar 2048 6144 utf8mb3 utf8mb3_general_ci varchar(2048)
3.0000 information_schema TABLES TABLE_COMMENT varchar 2048 6144 utf8mb3 utf8mb3_general_ci varchar(2048)
@@ -994,8 +1000,8 @@ NULL information_schema TRIGGERS CREATED datetime NULL NULL NULL NULL datetime(2
3.0000 information_schema TRIGGERS SQL_MODE varchar 8192 24576 utf8mb3 utf8mb3_general_ci varchar(8192)
3.0000 information_schema TRIGGERS DEFINER varchar 384 1152 utf8mb3 utf8mb3_general_ci varchar(384)
3.0000 information_schema TRIGGERS CHARACTER_SET_CLIENT varchar 32 96 utf8mb3 utf8mb3_general_ci varchar(32)
-3.0000 information_schema TRIGGERS COLLATION_CONNECTION varchar 32 96 utf8mb3 utf8mb3_general_ci varchar(32)
-3.0000 information_schema TRIGGERS DATABASE_COLLATION varchar 32 96 utf8mb3 utf8mb3_general_ci varchar(32)
+3.0000 information_schema TRIGGERS COLLATION_CONNECTION varchar 64 192 utf8mb3 utf8mb3_general_ci varchar(64)
+3.0000 information_schema TRIGGERS DATABASE_COLLATION varchar 64 192 utf8mb3 utf8mb3_general_ci varchar(64)
3.0000 information_schema USER_PRIVILEGES GRANTEE varchar 385 1155 utf8mb3 utf8mb3_general_ci varchar(385)
3.0000 information_schema USER_PRIVILEGES TABLE_CATALOG varchar 512 1536 utf8mb3 utf8mb3_general_ci varchar(512)
3.0000 information_schema USER_PRIVILEGES PRIVILEGE_TYPE varchar 64 192 utf8mb3 utf8mb3_general_ci varchar(64)
@@ -1034,5 +1040,5 @@ NULL information_schema USER_STATISTICS MAX_STATEMENT_TIME_EXCEEDED bigint NULL
3.0000 information_schema VIEWS DEFINER varchar 384 1152 utf8mb3 utf8mb3_general_ci varchar(384)
3.0000 information_schema VIEWS SECURITY_TYPE varchar 7 21 utf8mb3 utf8mb3_general_ci varchar(7)
3.0000 information_schema VIEWS CHARACTER_SET_CLIENT varchar 32 96 utf8mb3 utf8mb3_general_ci varchar(32)
-3.0000 information_schema VIEWS COLLATION_CONNECTION varchar 32 96 utf8mb3 utf8mb3_general_ci varchar(32)
+3.0000 information_schema VIEWS COLLATION_CONNECTION varchar 64 192 utf8mb3 utf8mb3_general_ci varchar(64)
3.0000 information_schema VIEWS ALGORITHM varchar 10 30 utf8mb3 utf8mb3_general_ci varchar(10)
diff --git a/mysql-test/suite/funcs_1/r/is_columns_mysql.result b/mysql-test/suite/funcs_1/r/is_columns_mysql.result
index b50ae58df28..dbcead827ee 100644
--- a/mysql-test/suite/funcs_1/r/is_columns_mysql.result
+++ b/mysql-test/suite/funcs_1/r/is_columns_mysql.result
@@ -46,11 +46,11 @@ def mysql db User 3 '' NO char 128 384 NULL NULL NULL utf8mb3 utf8mb3_bin char(1
def mysql event body 3 NULL NO longblob 4294967295 4294967295 NULL NULL NULL NULL NULL longblob select,insert,update,references NEVER NULL
def mysql event body_utf8 22 NULL YES longblob 4294967295 4294967295 NULL NULL NULL NULL NULL longblob select,insert,update,references NEVER NULL
def mysql event character_set_client 19 NULL YES char 32 96 NULL NULL NULL utf8mb3 utf8mb3_bin char(32) select,insert,update,references NEVER NULL
-def mysql event collation_connection 20 NULL YES char 32 96 NULL NULL NULL utf8mb3 utf8mb3_bin char(32) select,insert,update,references NEVER NULL
+def mysql event collation_connection 20 NULL YES char 64 192 NULL NULL NULL utf8mb3 utf8mb3_bin char(64) select,insert,update,references NEVER NULL
def mysql event comment 16 '' NO char 64 192 NULL NULL NULL utf8mb3 utf8mb3_bin char(64) select,insert,update,references NEVER NULL
def mysql event created 8 current_timestamp() NO timestamp NULL NULL NULL NULL 0 NULL NULL timestamp on update current_timestamp() select,insert,update,references NEVER NULL
def mysql event db 1 '' NO char 64 192 NULL NULL NULL utf8mb3 utf8mb3_bin char(64) PRI select,insert,update,references NEVER NULL
-def mysql event db_collation 21 NULL YES char 32 96 NULL NULL NULL utf8mb3 utf8mb3_bin char(32) select,insert,update,references NEVER NULL
+def mysql event db_collation 21 NULL YES char 64 192 NULL NULL NULL utf8mb3 utf8mb3_bin char(64) select,insert,update,references NEVER NULL
def mysql event definer 4 '' NO varchar 384 1152 NULL NULL NULL utf8mb3 utf8mb3_bin varchar(384) select,insert,update,references NEVER NULL
def mysql event ends 12 NULL YES datetime NULL NULL NULL NULL 0 NULL NULL datetime select,insert,update,references NEVER NULL
def mysql event execute_at 5 NULL YES datetime NULL NULL NULL NULL 0 NULL NULL datetime select,insert,update,references NEVER NULL
@@ -121,11 +121,11 @@ def mysql proc aggregate 21 'NONE' NO enum 5 15 NULL NULL NULL utf8mb3 utf8mb3_g
def mysql proc body 11 NULL NO longblob 4294967295 4294967295 NULL NULL NULL NULL NULL longblob select,insert,update,references NEVER NULL
def mysql proc body_utf8 20 NULL YES longblob 4294967295 4294967295 NULL NULL NULL NULL NULL longblob select,insert,update,references NEVER NULL
def mysql proc character_set_client 17 NULL YES char 32 96 NULL NULL NULL utf8mb3 utf8mb3_bin char(32) select,insert,update,references NEVER NULL
-def mysql proc collation_connection 18 NULL YES char 32 96 NULL NULL NULL utf8mb3 utf8mb3_bin char(32) select,insert,update,references NEVER NULL
+def mysql proc collation_connection 18 NULL YES char 64 192 NULL NULL NULL utf8mb3 utf8mb3_bin char(64) select,insert,update,references NEVER NULL
def mysql proc comment 16 NULL NO text 65535 65535 NULL NULL NULL utf8mb3 utf8mb3_bin text select,insert,update,references NEVER NULL
def mysql proc created 13 current_timestamp() NO timestamp NULL NULL NULL NULL 0 NULL NULL timestamp on update current_timestamp() select,insert,update,references NEVER NULL
def mysql proc db 1 '' NO char 64 192 NULL NULL NULL utf8mb3 utf8mb3_bin char(64) PRI select,insert,update,references NEVER NULL
-def mysql proc db_collation 19 NULL YES char 32 96 NULL NULL NULL utf8mb3 utf8mb3_bin char(32) select,insert,update,references NEVER NULL
+def mysql proc db_collation 19 NULL YES char 64 192 NULL NULL NULL utf8mb3 utf8mb3_bin char(64) select,insert,update,references NEVER NULL
def mysql proc definer 12 '' NO varchar 384 1152 NULL NULL NULL utf8mb3 utf8mb3_bin varchar(384) select,insert,update,references NEVER NULL
def mysql proc is_deterministic 7 'NO' NO enum 3 9 NULL NULL NULL utf8mb3 utf8mb3_general_ci enum('YES','NO') select,insert,update,references NEVER NULL
def mysql proc language 5 'SQL' NO enum 3 9 NULL NULL NULL utf8mb3 utf8mb3_general_ci enum('SQL') select,insert,update,references NEVER NULL
@@ -389,8 +389,8 @@ NULL mysql event ends datetime NULL NULL NULL NULL datetime
NULL mysql event originator int NULL NULL NULL NULL int(10) unsigned
1.0000 mysql event time_zone char 64 64 latin1 latin1_swedish_ci char(64)
3.0000 mysql event character_set_client char 32 96 utf8mb3 utf8mb3_bin char(32)
-3.0000 mysql event collation_connection char 32 96 utf8mb3 utf8mb3_bin char(32)
-3.0000 mysql event db_collation char 32 96 utf8mb3 utf8mb3_bin char(32)
+3.0000 mysql event collation_connection char 64 192 utf8mb3 utf8mb3_bin char(64)
+3.0000 mysql event db_collation char 64 192 utf8mb3 utf8mb3_bin char(64)
1.0000 mysql event body_utf8 longblob 4294967295 4294967295 NULL NULL longblob
3.0000 mysql func name char 64 192 utf8mb3 utf8mb3_bin char(64)
NULL mysql func ret tinyint NULL NULL NULL NULL tinyint(1)
@@ -461,8 +461,8 @@ NULL mysql proc modified timestamp NULL NULL NULL NULL timestamp
3.0000 mysql proc sql_mode set 561 1683 utf8mb3 utf8mb3_general_ci set('REAL_AS_FLOAT','PIPES_AS_CONCAT','ANSI_QUOTES','IGNORE_SPACE','IGNORE_BAD_TABLE_OPTIONS','ONLY_FULL_GROUP_BY','NO_UNSIGNED_SUBTRACTION','NO_DIR_IN_CREATE','POSTGRESQL','ORACLE','MSSQL','DB2','MAXDB','NO_KEY_OPTIONS','NO_TABLE_OPTIONS','NO_FIELD_OPTIONS','MYSQL323','MYSQL40','ANSI','NO_AUTO_VALUE_ON_ZERO','NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLES','STRICT_ALL_TABLES','NO_ZERO_IN_DATE','NO_ZERO_DATE','INVALID_DATES','ERROR_FOR_DIVISION_BY_ZERO','TRADITIONAL','NO_AUTO_CREATE_USER','HIGH_NOT_PRECEDENCE','NO_ENGINE_SUBSTITUTION','PAD_CHAR_TO_FULL_LENGTH','EMPTY_STRING_IS_NULL','SIMULTANEOUS_ASSIGNMENT','TIME_ROUND_FRACTIONAL')
1.0000 mysql proc comment text 65535 65535 utf8mb3 utf8mb3_bin text
3.0000 mysql proc character_set_client char 32 96 utf8mb3 utf8mb3_bin char(32)
-3.0000 mysql proc collation_connection char 32 96 utf8mb3 utf8mb3_bin char(32)
-3.0000 mysql proc db_collation char 32 96 utf8mb3 utf8mb3_bin char(32)
+3.0000 mysql proc collation_connection char 64 192 utf8mb3 utf8mb3_bin char(64)
+3.0000 mysql proc db_collation char 64 192 utf8mb3 utf8mb3_bin char(64)
1.0000 mysql proc body_utf8 longblob 4294967295 4294967295 NULL NULL longblob
3.0000 mysql proc aggregate enum 5 15 utf8mb3 utf8mb3_general_ci enum('NONE','GROUP')
3.0000 mysql procs_priv Host char 255 765 utf8mb3 utf8mb3_bin char(255)
diff --git a/mysql-test/suite/funcs_1/r/is_columns_mysql_embedded.result b/mysql-test/suite/funcs_1/r/is_columns_mysql_embedded.result
index 96751dfd176..d609a2f4b73 100644
--- a/mysql-test/suite/funcs_1/r/is_columns_mysql_embedded.result
+++ b/mysql-test/suite/funcs_1/r/is_columns_mysql_embedded.result
@@ -46,11 +46,11 @@ def mysql db User 3 '' NO char 128 384 NULL NULL NULL utf8mb3 utf8mb3_bin char(1
def mysql event body 3 NULL NO longblob 4294967295 4294967295 NULL NULL NULL NULL NULL longblob NEVER NULL
def mysql event body_utf8 22 NULL YES longblob 4294967295 4294967295 NULL NULL NULL NULL NULL longblob NEVER NULL
def mysql event character_set_client 19 NULL YES char 32 96 NULL NULL NULL utf8mb3 utf8mb3_bin char(32) NEVER NULL
-def mysql event collation_connection 20 NULL YES char 32 96 NULL NULL NULL utf8mb3 utf8mb3_bin char(32) NEVER NULL
+def mysql event collation_connection 20 NULL YES char 64 192 NULL NULL NULL utf8mb3 utf8mb3_bin char(64) NEVER NULL
def mysql event comment 16 '' NO char 64 192 NULL NULL NULL utf8mb3 utf8mb3_bin char(64) NEVER NULL
def mysql event created 8 current_timestamp() NO timestamp NULL NULL NULL NULL 0 NULL NULL timestamp on update current_timestamp() NEVER NULL
def mysql event db 1 '' NO char 64 192 NULL NULL NULL utf8mb3 utf8mb3_bin char(64) PRI NEVER NULL
-def mysql event db_collation 21 NULL YES char 32 96 NULL NULL NULL utf8mb3 utf8mb3_bin char(32) NEVER NULL
+def mysql event db_collation 21 NULL YES char 64 192 NULL NULL NULL utf8mb3 utf8mb3_bin char(64) NEVER NULL
def mysql event definer 4 '' NO varchar 384 1152 NULL NULL NULL utf8mb3 utf8mb3_bin varchar(384) NEVER NULL
def mysql event ends 12 NULL YES datetime NULL NULL NULL NULL 0 NULL NULL datetime NEVER NULL
def mysql event execute_at 5 NULL YES datetime NULL NULL NULL NULL 0 NULL NULL datetime NEVER NULL
@@ -107,11 +107,11 @@ def mysql proc aggregate 21 'NONE' NO enum 5 15 NULL NULL NULL utf8mb3 utf8mb3_g
def mysql proc body 11 NULL NO longblob 4294967295 4294967295 NULL NULL NULL NULL NULL longblob NEVER NULL
def mysql proc body_utf8 20 NULL YES longblob 4294967295 4294967295 NULL NULL NULL NULL NULL longblob NEVER NULL
def mysql proc character_set_client 17 NULL YES char 32 96 NULL NULL NULL utf8mb3 utf8mb3_bin char(32) NEVER NULL
-def mysql proc collation_connection 18 NULL YES char 32 96 NULL NULL NULL utf8mb3 utf8mb3_bin char(32) NEVER NULL
+def mysql proc collation_connection 18 NULL YES char 64 192 NULL NULL NULL utf8mb3 utf8mb3_bin char(64) NEVER NULL
def mysql proc comment 16 NULL NO text 65535 65535 NULL NULL NULL utf8mb3 utf8mb3_bin text NEVER NULL
def mysql proc created 13 current_timestamp() NO timestamp NULL NULL NULL NULL 0 NULL NULL timestamp on update current_timestamp() NEVER NULL
def mysql proc db 1 '' NO char 64 192 NULL NULL NULL utf8mb3 utf8mb3_bin char(64) PRI NEVER NULL
-def mysql proc db_collation 19 NULL YES char 32 96 NULL NULL NULL utf8mb3 utf8mb3_bin char(32) NEVER NULL
+def mysql proc db_collation 19 NULL YES char 64 192 NULL NULL NULL utf8mb3 utf8mb3_bin char(64) NEVER NULL
def mysql proc definer 12 '' NO varchar 384 1152 NULL NULL NULL utf8mb3 utf8mb3_bin varchar(384) NEVER NULL
def mysql proc is_deterministic 7 'NO' NO enum 3 9 NULL NULL NULL utf8mb3 utf8mb3_general_ci enum('YES','NO') NEVER NULL
def mysql proc language 5 'SQL' NO enum 3 9 NULL NULL NULL utf8mb3 utf8mb3_general_ci enum('SQL') NEVER NULL
@@ -386,8 +386,8 @@ NULL mysql event ends datetime NULL NULL NULL NULL datetime
NULL mysql event originator int NULL NULL NULL NULL int(10) unsigned
1.0000 mysql event time_zone char 64 64 latin1 latin1_swedish_ci char(64)
3.0000 mysql event character_set_client char 32 96 utf8mb3 utf8mb3_bin char(32)
-3.0000 mysql event collation_connection char 32 96 utf8mb3 utf8mb3_bin char(32)
-3.0000 mysql event db_collation char 32 96 utf8mb3 utf8mb3_bin char(32)
+3.0000 mysql event collation_connection char 64 192 utf8mb3 utf8mb3_bin char(64)
+3.0000 mysql event db_collation char 64 192 utf8mb3 utf8mb3_bin char(64)
1.0000 mysql event body_utf8 longblob 4294967295 4294967295 NULL NULL longblob
3.0000 mysql func name char 64 192 utf8mb3 utf8mb3_bin char(64)
NULL mysql func ret tinyint NULL NULL NULL NULL tinyint(1)
@@ -444,8 +444,8 @@ NULL mysql proc modified timestamp NULL NULL NULL NULL timestamp
3.0000 mysql proc sql_mode set 561 1683 utf8mb3 utf8mb3_general_ci set('REAL_AS_FLOAT','PIPES_AS_CONCAT','ANSI_QUOTES','IGNORE_SPACE','IGNORE_BAD_TABLE_OPTIONS','ONLY_FULL_GROUP_BY','NO_UNSIGNED_SUBTRACTION','NO_DIR_IN_CREATE','POSTGRESQL','ORACLE','MSSQL','DB2','MAXDB','NO_KEY_OPTIONS','NO_TABLE_OPTIONS','NO_FIELD_OPTIONS','MYSQL323','MYSQL40','ANSI','NO_AUTO_VALUE_ON_ZERO','NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLES','STRICT_ALL_TABLES','NO_ZERO_IN_DATE','NO_ZERO_DATE','INVALID_DATES','ERROR_FOR_DIVISION_BY_ZERO','TRADITIONAL','NO_AUTO_CREATE_USER','HIGH_NOT_PRECEDENCE','NO_ENGINE_SUBSTITUTION','PAD_CHAR_TO_FULL_LENGTH','EMPTY_STRING_IS_NULL','SIMULTANEOUS_ASSIGNMENT','TIME_ROUND_FRACTIONAL')
1.0000 mysql proc comment text 65535 65535 utf8mb3 utf8mb3_bin text
3.0000 mysql proc character_set_client char 32 96 utf8mb3 utf8mb3_bin char(32)
-3.0000 mysql proc collation_connection char 32 96 utf8mb3 utf8mb3_bin char(32)
-3.0000 mysql proc db_collation char 32 96 utf8mb3 utf8mb3_bin char(32)
+3.0000 mysql proc collation_connection char 64 192 utf8mb3 utf8mb3_bin char(64)
+3.0000 mysql proc db_collation char 64 192 utf8mb3 utf8mb3_bin char(64)
1.0000 mysql proc body_utf8 longblob 4294967295 4294967295 NULL NULL longblob
3.0000 mysql proc aggregate enum 5 15 utf8mb3 utf8mb3_general_ci enum('NONE','GROUP')
3.0000 mysql procs_priv Host char 255 765 utf8mb3 utf8mb3_bin char(255)
diff --git a/mysql-test/suite/funcs_1/r/is_events.result b/mysql-test/suite/funcs_1/r/is_events.result
index a597d43f0ea..7df12ee2771 100644
--- a/mysql-test/suite/funcs_1/r/is_events.result
+++ b/mysql-test/suite/funcs_1/r/is_events.result
@@ -50,8 +50,8 @@ LAST_EXECUTED datetime YES NULL
EVENT_COMMENT varchar(64) NO NULL
ORIGINATOR bigint(10) NO NULL
CHARACTER_SET_CLIENT varchar(32) NO NULL
-COLLATION_CONNECTION varchar(32) NO NULL
-DATABASE_COLLATION varchar(32) NO NULL
+COLLATION_CONNECTION varchar(64) NO NULL
+DATABASE_COLLATION varchar(64) NO NULL
SHOW CREATE TABLE information_schema.EVENTS;
Table Create Table
EVENTS CREATE TEMPORARY TABLE `EVENTS` (
@@ -77,8 +77,8 @@ EVENTS CREATE TEMPORARY TABLE `EVENTS` (
`EVENT_COMMENT` varchar(64) NOT NULL,
`ORIGINATOR` bigint(10) NOT NULL,
`CHARACTER_SET_CLIENT` varchar(32) NOT NULL,
- `COLLATION_CONNECTION` varchar(32) NOT NULL,
- `DATABASE_COLLATION` varchar(32) NOT NULL
+ `COLLATION_CONNECTION` varchar(64) NOT NULL,
+ `DATABASE_COLLATION` varchar(64) NOT NULL
) DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci
SHOW COLUMNS FROM information_schema.EVENTS;
Field Type Null Key Default Extra
@@ -104,8 +104,8 @@ LAST_EXECUTED datetime YES NULL
EVENT_COMMENT varchar(64) NO NULL
ORIGINATOR bigint(10) NO NULL
CHARACTER_SET_CLIENT varchar(32) NO NULL
-COLLATION_CONNECTION varchar(32) NO NULL
-DATABASE_COLLATION varchar(32) NO NULL
+COLLATION_CONNECTION varchar(64) NO NULL
+DATABASE_COLLATION varchar(64) NO NULL
SELECT event_catalog, event_name, event_body, event_type, event_type,
status, on_completion
FROM information_schema.events
diff --git a/mysql-test/suite/funcs_1/r/is_routines.result b/mysql-test/suite/funcs_1/r/is_routines.result
index a1931a964ce..1b293444b27 100644
--- a/mysql-test/suite/funcs_1/r/is_routines.result
+++ b/mysql-test/suite/funcs_1/r/is_routines.result
@@ -58,8 +58,8 @@ SQL_MODE varchar(8192) NO NULL
ROUTINE_COMMENT longtext NO NULL
DEFINER varchar(384) NO NULL
CHARACTER_SET_CLIENT varchar(32) NO NULL
-COLLATION_CONNECTION varchar(32) NO NULL
-DATABASE_COLLATION varchar(32) NO NULL
+COLLATION_CONNECTION varchar(64) NO NULL
+DATABASE_COLLATION varchar(64) NO NULL
SHOW CREATE TABLE information_schema.ROUTINES;
Table Create Table
ROUTINES CREATE TEMPORARY TABLE `ROUTINES` (
@@ -92,8 +92,8 @@ ROUTINES CREATE TEMPORARY TABLE `ROUTINES` (
`ROUTINE_COMMENT` longtext NOT NULL,
`DEFINER` varchar(384) NOT NULL,
`CHARACTER_SET_CLIENT` varchar(32) NOT NULL,
- `COLLATION_CONNECTION` varchar(32) NOT NULL,
- `DATABASE_COLLATION` varchar(32) NOT NULL
+ `COLLATION_CONNECTION` varchar(64) NOT NULL,
+ `DATABASE_COLLATION` varchar(64) NOT NULL
) DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci
SHOW COLUMNS FROM information_schema.ROUTINES;
Field Type Null Key Default Extra
@@ -126,8 +126,8 @@ SQL_MODE varchar(8192) NO NULL
ROUTINE_COMMENT longtext NO NULL
DEFINER varchar(384) NO NULL
CHARACTER_SET_CLIENT varchar(32) NO NULL
-COLLATION_CONNECTION varchar(32) NO NULL
-DATABASE_COLLATION varchar(32) NO NULL
+COLLATION_CONNECTION varchar(64) NO NULL
+DATABASE_COLLATION varchar(64) NO NULL
USE test;
DROP PROCEDURE IF EXISTS sp_for_routines;
DROP FUNCTION IF EXISTS function_for_routines;
diff --git a/mysql-test/suite/funcs_1/r/is_routines_embedded.result b/mysql-test/suite/funcs_1/r/is_routines_embedded.result
index dba5e7f330e..dfd663a6a96 100644
--- a/mysql-test/suite/funcs_1/r/is_routines_embedded.result
+++ b/mysql-test/suite/funcs_1/r/is_routines_embedded.result
@@ -58,8 +58,8 @@ SQL_MODE varchar(8192) NO NULL
ROUTINE_COMMENT longtext NO NULL
DEFINER varchar(384) NO NULL
CHARACTER_SET_CLIENT varchar(32) NO NULL
-COLLATION_CONNECTION varchar(32) NO NULL
-DATABASE_COLLATION varchar(32) NO NULL
+COLLATION_CONNECTION varchar(64) NO NULL
+DATABASE_COLLATION varchar(64) NO NULL
SHOW CREATE TABLE information_schema.ROUTINES;
Table Create Table
ROUTINES CREATE TEMPORARY TABLE `ROUTINES` (
@@ -92,8 +92,8 @@ ROUTINES CREATE TEMPORARY TABLE `ROUTINES` (
`ROUTINE_COMMENT` longtext NOT NULL,
`DEFINER` varchar(384) NOT NULL,
`CHARACTER_SET_CLIENT` varchar(32) NOT NULL,
- `COLLATION_CONNECTION` varchar(32) NOT NULL,
- `DATABASE_COLLATION` varchar(32) NOT NULL
+ `COLLATION_CONNECTION` varchar(64) NOT NULL,
+ `DATABASE_COLLATION` varchar(64) NOT NULL
) DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci
SHOW COLUMNS FROM information_schema.ROUTINES;
Field Type Null Key Default Extra
@@ -126,8 +126,8 @@ SQL_MODE varchar(8192) NO NULL
ROUTINE_COMMENT longtext NO NULL
DEFINER varchar(384) NO NULL
CHARACTER_SET_CLIENT varchar(32) NO NULL
-COLLATION_CONNECTION varchar(32) NO NULL
-DATABASE_COLLATION varchar(32) NO NULL
+COLLATION_CONNECTION varchar(64) NO NULL
+DATABASE_COLLATION varchar(64) NO NULL
USE test;
DROP PROCEDURE IF EXISTS sp_for_routines;
DROP FUNCTION IF EXISTS function_for_routines;
diff --git a/mysql-test/suite/funcs_1/r/is_schemata.result b/mysql-test/suite/funcs_1/r/is_schemata.result
index 5a12c63fe25..ff33306b8f9 100644
--- a/mysql-test/suite/funcs_1/r/is_schemata.result
+++ b/mysql-test/suite/funcs_1/r/is_schemata.result
@@ -31,7 +31,7 @@ Field Type Null Key Default Extra
CATALOG_NAME varchar(512) NO NULL
SCHEMA_NAME varchar(64) NO NULL
DEFAULT_CHARACTER_SET_NAME varchar(32) NO NULL
-DEFAULT_COLLATION_NAME varchar(32) NO NULL
+DEFAULT_COLLATION_NAME varchar(64) NO NULL
SQL_PATH varchar(512) YES NULL
SCHEMA_COMMENT varchar(1024) NO NULL
SHOW CREATE TABLE information_schema.SCHEMATA;
@@ -40,7 +40,7 @@ SCHEMATA CREATE TEMPORARY TABLE `SCHEMATA` (
`CATALOG_NAME` varchar(512) NOT NULL,
`SCHEMA_NAME` varchar(64) NOT NULL,
`DEFAULT_CHARACTER_SET_NAME` varchar(32) NOT NULL,
- `DEFAULT_COLLATION_NAME` varchar(32) NOT NULL,
+ `DEFAULT_COLLATION_NAME` varchar(64) NOT NULL,
`SQL_PATH` varchar(512),
`SCHEMA_COMMENT` varchar(1024) NOT NULL
) ENGINE=MEMORY DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci
@@ -49,7 +49,7 @@ Field Type Null Key Default Extra
CATALOG_NAME varchar(512) NO NULL
SCHEMA_NAME varchar(64) NO NULL
DEFAULT_CHARACTER_SET_NAME varchar(32) NO NULL
-DEFAULT_COLLATION_NAME varchar(32) NO NULL
+DEFAULT_COLLATION_NAME varchar(64) NO NULL
SQL_PATH varchar(512) YES NULL
SCHEMA_COMMENT varchar(1024) NO NULL
SELECT catalog_name, schema_name, sql_path
diff --git a/mysql-test/suite/funcs_1/r/is_schemata_embedded.result b/mysql-test/suite/funcs_1/r/is_schemata_embedded.result
index 0156d6117bd..9f129caa5bf 100644
--- a/mysql-test/suite/funcs_1/r/is_schemata_embedded.result
+++ b/mysql-test/suite/funcs_1/r/is_schemata_embedded.result
@@ -31,7 +31,7 @@ Field Type Null Key Default Extra
CATALOG_NAME varchar(512) NO NULL
SCHEMA_NAME varchar(64) NO NULL
DEFAULT_CHARACTER_SET_NAME varchar(32) NO NULL
-DEFAULT_COLLATION_NAME varchar(32) NO NULL
+DEFAULT_COLLATION_NAME varchar(64) NO NULL
SQL_PATH varchar(512) YES NULL
SCHEMA_COMMENT varchar(1024) NO NULL
SHOW CREATE TABLE information_schema.SCHEMATA;
@@ -40,7 +40,7 @@ SCHEMATA CREATE TEMPORARY TABLE `SCHEMATA` (
`CATALOG_NAME` varchar(512) NOT NULL,
`SCHEMA_NAME` varchar(64) NOT NULL,
`DEFAULT_CHARACTER_SET_NAME` varchar(32) NOT NULL,
- `DEFAULT_COLLATION_NAME` varchar(32) NOT NULL,
+ `DEFAULT_COLLATION_NAME` varchar(64) NOT NULL,
`SQL_PATH` varchar(512),
`SCHEMA_COMMENT` varchar(1024) NOT NULL
) ENGINE=MEMORY DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci
@@ -49,7 +49,7 @@ Field Type Null Key Default Extra
CATALOG_NAME varchar(512) NO NULL
SCHEMA_NAME varchar(64) NO NULL
DEFAULT_CHARACTER_SET_NAME varchar(32) NO NULL
-DEFAULT_COLLATION_NAME varchar(32) NO NULL
+DEFAULT_COLLATION_NAME varchar(64) NO NULL
SQL_PATH varchar(512) YES NULL
SCHEMA_COMMENT varchar(1024) NO NULL
SELECT catalog_name, schema_name, sql_path
diff --git a/mysql-test/suite/funcs_1/r/is_tables.result b/mysql-test/suite/funcs_1/r/is_tables.result
index 35daab13c35..35f7d43d437 100644
--- a/mysql-test/suite/funcs_1/r/is_tables.result
+++ b/mysql-test/suite/funcs_1/r/is_tables.result
@@ -45,7 +45,7 @@ AUTO_INCREMENT bigint(21) unsigned YES NULL
CREATE_TIME datetime YES NULL
UPDATE_TIME datetime YES NULL
CHECK_TIME datetime YES NULL
-TABLE_COLLATION varchar(32) YES NULL
+TABLE_COLLATION varchar(64) YES NULL
CHECKSUM bigint(21) unsigned YES NULL
CREATE_OPTIONS varchar(2048) YES NULL
TABLE_COMMENT varchar(2048) NO NULL
@@ -71,7 +71,7 @@ TABLES CREATE TEMPORARY TABLE `TABLES` (
`CREATE_TIME` datetime,
`UPDATE_TIME` datetime,
`CHECK_TIME` datetime,
- `TABLE_COLLATION` varchar(32),
+ `TABLE_COLLATION` varchar(64),
`CHECKSUM` bigint(21) unsigned,
`CREATE_OPTIONS` varchar(2048),
`TABLE_COMMENT` varchar(2048) NOT NULL,
@@ -97,7 +97,7 @@ AUTO_INCREMENT bigint(21) unsigned YES NULL
CREATE_TIME datetime YES NULL
UPDATE_TIME datetime YES NULL
CHECK_TIME datetime YES NULL
-TABLE_COLLATION varchar(32) YES NULL
+TABLE_COLLATION varchar(64) YES NULL
CHECKSUM bigint(21) unsigned YES NULL
CREATE_OPTIONS varchar(2048) YES NULL
TABLE_COMMENT varchar(2048) NO NULL
diff --git a/mysql-test/suite/funcs_1/r/is_tables_embedded.result b/mysql-test/suite/funcs_1/r/is_tables_embedded.result
index ab42aed82bd..de0c2fb4804 100644
--- a/mysql-test/suite/funcs_1/r/is_tables_embedded.result
+++ b/mysql-test/suite/funcs_1/r/is_tables_embedded.result
@@ -45,7 +45,7 @@ AUTO_INCREMENT bigint(21) unsigned YES NULL
CREATE_TIME datetime YES NULL
UPDATE_TIME datetime YES NULL
CHECK_TIME datetime YES NULL
-TABLE_COLLATION varchar(32) YES NULL
+TABLE_COLLATION varchar(64) YES NULL
CHECKSUM bigint(21) unsigned YES NULL
CREATE_OPTIONS varchar(2048) YES NULL
TABLE_COMMENT varchar(2048) NO NULL
@@ -71,7 +71,7 @@ TABLES CREATE TEMPORARY TABLE `TABLES` (
`CREATE_TIME` datetime,
`UPDATE_TIME` datetime,
`CHECK_TIME` datetime,
- `TABLE_COLLATION` varchar(32),
+ `TABLE_COLLATION` varchar(64),
`CHECKSUM` bigint(21) unsigned,
`CREATE_OPTIONS` varchar(2048),
`TABLE_COMMENT` varchar(2048) NOT NULL,
@@ -97,7 +97,7 @@ AUTO_INCREMENT bigint(21) unsigned YES NULL
CREATE_TIME datetime YES NULL
UPDATE_TIME datetime YES NULL
CHECK_TIME datetime YES NULL
-TABLE_COLLATION varchar(32) YES NULL
+TABLE_COLLATION varchar(64) YES NULL
CHECKSUM bigint(21) unsigned YES NULL
CREATE_OPTIONS varchar(2048) YES NULL
TABLE_COMMENT varchar(2048) NO NULL
diff --git a/mysql-test/suite/funcs_1/r/is_triggers.result b/mysql-test/suite/funcs_1/r/is_triggers.result
index 6a1aed781da..99e514cfed9 100644
--- a/mysql-test/suite/funcs_1/r/is_triggers.result
+++ b/mysql-test/suite/funcs_1/r/is_triggers.result
@@ -50,8 +50,8 @@ CREATED datetime(2) YES NULL
SQL_MODE varchar(8192) NO NULL
DEFINER varchar(384) NO NULL
CHARACTER_SET_CLIENT varchar(32) NO NULL
-COLLATION_CONNECTION varchar(32) NO NULL
-DATABASE_COLLATION varchar(32) NO NULL
+COLLATION_CONNECTION varchar(64) NO NULL
+DATABASE_COLLATION varchar(64) NO NULL
SHOW CREATE TABLE information_schema.TRIGGERS;
Table Create Table
TRIGGERS CREATE TEMPORARY TABLE `TRIGGERS` (
@@ -75,8 +75,8 @@ TRIGGERS CREATE TEMPORARY TABLE `TRIGGERS` (
`SQL_MODE` varchar(8192) NOT NULL,
`DEFINER` varchar(384) NOT NULL,
`CHARACTER_SET_CLIENT` varchar(32) NOT NULL,
- `COLLATION_CONNECTION` varchar(32) NOT NULL,
- `DATABASE_COLLATION` varchar(32) NOT NULL
+ `COLLATION_CONNECTION` varchar(64) NOT NULL,
+ `DATABASE_COLLATION` varchar(64) NOT NULL
) DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci
SHOW COLUMNS FROM information_schema.TRIGGERS;
Field Type Null Key Default Extra
@@ -100,8 +100,8 @@ CREATED datetime(2) YES NULL
SQL_MODE varchar(8192) NO NULL
DEFINER varchar(384) NO NULL
CHARACTER_SET_CLIENT varchar(32) NO NULL
-COLLATION_CONNECTION varchar(32) NO NULL
-DATABASE_COLLATION varchar(32) NO NULL
+COLLATION_CONNECTION varchar(64) NO NULL
+DATABASE_COLLATION varchar(64) NO NULL
SELECT * FROM information_schema.triggers
WHERE trigger_catalog IS NOT NULL OR event_object_catalog IS NOT NULL
OR action_condition IS NOT NULL OR action_reference_old_table IS NOT NULL
diff --git a/mysql-test/suite/funcs_1/r/is_triggers_embedded.result b/mysql-test/suite/funcs_1/r/is_triggers_embedded.result
index a35297899aa..a16493912ad 100644
--- a/mysql-test/suite/funcs_1/r/is_triggers_embedded.result
+++ b/mysql-test/suite/funcs_1/r/is_triggers_embedded.result
@@ -50,8 +50,8 @@ CREATED datetime(2) YES NULL
SQL_MODE varchar(8192) NO NULL
DEFINER varchar(384) NO NULL
CHARACTER_SET_CLIENT varchar(32) NO NULL
-COLLATION_CONNECTION varchar(32) NO NULL
-DATABASE_COLLATION varchar(32) NO NULL
+COLLATION_CONNECTION varchar(64) NO NULL
+DATABASE_COLLATION varchar(64) NO NULL
SHOW CREATE TABLE information_schema.TRIGGERS;
Table Create Table
TRIGGERS CREATE TEMPORARY TABLE `TRIGGERS` (
@@ -75,8 +75,8 @@ TRIGGERS CREATE TEMPORARY TABLE `TRIGGERS` (
`SQL_MODE` varchar(8192) NOT NULL,
`DEFINER` varchar(384) NOT NULL,
`CHARACTER_SET_CLIENT` varchar(32) NOT NULL,
- `COLLATION_CONNECTION` varchar(32) NOT NULL,
- `DATABASE_COLLATION` varchar(32) NOT NULL
+ `COLLATION_CONNECTION` varchar(64) NOT NULL,
+ `DATABASE_COLLATION` varchar(64) NOT NULL
) DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci
SHOW COLUMNS FROM information_schema.TRIGGERS;
Field Type Null Key Default Extra
@@ -100,8 +100,8 @@ CREATED datetime(2) YES NULL
SQL_MODE varchar(8192) NO NULL
DEFINER varchar(384) NO NULL
CHARACTER_SET_CLIENT varchar(32) NO NULL
-COLLATION_CONNECTION varchar(32) NO NULL
-DATABASE_COLLATION varchar(32) NO NULL
+COLLATION_CONNECTION varchar(64) NO NULL
+DATABASE_COLLATION varchar(64) NO NULL
SELECT * FROM information_schema.triggers
WHERE trigger_catalog IS NOT NULL OR event_object_catalog IS NOT NULL
OR action_condition IS NOT NULL OR action_reference_old_table IS NOT NULL
diff --git a/mysql-test/suite/funcs_1/r/is_views.result b/mysql-test/suite/funcs_1/r/is_views.result
index c42e4867d75..97ce2d915d8 100644
--- a/mysql-test/suite/funcs_1/r/is_views.result
+++ b/mysql-test/suite/funcs_1/r/is_views.result
@@ -37,7 +37,7 @@ IS_UPDATABLE varchar(3) NO NULL
DEFINER varchar(384) NO NULL
SECURITY_TYPE varchar(7) NO NULL
CHARACTER_SET_CLIENT varchar(32) NO NULL
-COLLATION_CONNECTION varchar(32) NO NULL
+COLLATION_CONNECTION varchar(64) NO NULL
ALGORITHM varchar(10) NO NULL
SHOW CREATE TABLE information_schema.VIEWS;
Table Create Table
@@ -51,7 +51,7 @@ VIEWS CREATE TEMPORARY TABLE `VIEWS` (
`DEFINER` varchar(384) NOT NULL,
`SECURITY_TYPE` varchar(7) NOT NULL,
`CHARACTER_SET_CLIENT` varchar(32) NOT NULL,
- `COLLATION_CONNECTION` varchar(32) NOT NULL,
+ `COLLATION_CONNECTION` varchar(64) NOT NULL,
`ALGORITHM` varchar(10) NOT NULL
) DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci
SHOW COLUMNS FROM information_schema.VIEWS;
@@ -65,7 +65,7 @@ IS_UPDATABLE varchar(3) NO NULL
DEFINER varchar(384) NO NULL
SECURITY_TYPE varchar(7) NO NULL
CHARACTER_SET_CLIENT varchar(32) NO NULL
-COLLATION_CONNECTION varchar(32) NO NULL
+COLLATION_CONNECTION varchar(64) NO NULL
ALGORITHM varchar(10) NO NULL
SELECT table_catalog, table_schema, table_name
FROM information_schema.views WHERE table_catalog <> 'def';
diff --git a/mysql-test/suite/funcs_1/r/is_views_embedded.result b/mysql-test/suite/funcs_1/r/is_views_embedded.result
index 72fcead6bcd..136126d8ab5 100644
--- a/mysql-test/suite/funcs_1/r/is_views_embedded.result
+++ b/mysql-test/suite/funcs_1/r/is_views_embedded.result
@@ -37,7 +37,7 @@ IS_UPDATABLE varchar(3) NO NULL
DEFINER varchar(384) NO NULL
SECURITY_TYPE varchar(7) NO NULL
CHARACTER_SET_CLIENT varchar(32) NO NULL
-COLLATION_CONNECTION varchar(32) NO NULL
+COLLATION_CONNECTION varchar(64) NO NULL
ALGORITHM varchar(10) NO NULL
SHOW CREATE TABLE information_schema.VIEWS;
Table Create Table
@@ -51,7 +51,7 @@ VIEWS CREATE TEMPORARY TABLE `VIEWS` (
`DEFINER` varchar(384) NOT NULL,
`SECURITY_TYPE` varchar(7) NOT NULL,
`CHARACTER_SET_CLIENT` varchar(32) NOT NULL,
- `COLLATION_CONNECTION` varchar(32) NOT NULL,
+ `COLLATION_CONNECTION` varchar(64) NOT NULL,
`ALGORITHM` varchar(10) NOT NULL
) DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci
SHOW COLUMNS FROM information_schema.VIEWS;
@@ -65,7 +65,7 @@ IS_UPDATABLE varchar(3) NO NULL
DEFINER varchar(384) NO NULL
SECURITY_TYPE varchar(7) NO NULL
CHARACTER_SET_CLIENT varchar(32) NO NULL
-COLLATION_CONNECTION varchar(32) NO NULL
+COLLATION_CONNECTION varchar(64) NO NULL
ALGORITHM varchar(10) NO NULL
SELECT table_catalog, table_schema, table_name
FROM information_schema.views WHERE table_catalog <> 'def';
diff --git a/mysql-test/suite/galera/r/galera_defaults.result b/mysql-test/suite/galera/r/galera_defaults.result
index 04f45a7c770..84dd782999d 100644
--- a/mysql-test/suite/galera/r/galera_defaults.result
+++ b/mysql-test/suite/galera/r/galera_defaults.result
@@ -1,9 +1,6 @@
connection node_2;
connection node_1;
# Correct Galera library found
-SELECT COUNT(*) `expect 50` FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES WHERE VARIABLE_NAME LIKE 'wsrep_%';
-expect 50
-50
SELECT VARIABLE_NAME, VARIABLE_VALUE
FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES
WHERE VARIABLE_NAME LIKE 'wsrep_%'
@@ -20,6 +17,7 @@ AND VARIABLE_NAME NOT IN (
)
ORDER BY VARIABLE_NAME;
VARIABLE_NAME VARIABLE_VALUE
+WSREP_ALLOWLIST
WSREP_AUTO_INCREMENT_CONTROL ON
WSREP_CAUSAL_READS ON
WSREP_CERTIFICATION_RULES strict
diff --git a/mysql-test/suite/galera/r/galera_gra_log.result b/mysql-test/suite/galera/r/galera_gra_log.result
index 8c0286a4ef1..e3d02892047 100644
--- a/mysql-test/suite/galera/r/galera_gra_log.result
+++ b/mysql-test/suite/galera/r/galera_gra_log.result
@@ -18,7 +18,7 @@ ROLLBACK/*!*/;
use `test`/*!*/;
SET TIMESTAMP=<TIMESTAMP>/*!*/;
SET @@session.pseudo_thread_id=<PSEUDO_THREAD_ID>/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=1411383296/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
diff --git a/mysql-test/suite/galera/r/galera_ist_MDEV-28423,debug.rdiff b/mysql-test/suite/galera/r/galera_ist_MDEV-28423,debug.rdiff
index 96e5def88ff..4eda9d7d045 100644
--- a/mysql-test/suite/galera/r/galera_ist_MDEV-28423,debug.rdiff
+++ b/mysql-test/suite/galera/r/galera_ist_MDEV-28423,debug.rdiff
@@ -1,5 +1,5 @@
---- r/galera_ist_MDEV-28423.result
-+++ r/galera_ist_MDEV-28423.reject
+--- suite/galera/r/galera_ist_MDEV-28423.result 2022-06-13 09:40:33.073863796 +0300
++++ suite/galera/r/galera_ist_MDEV-28423.reject 2022-06-13 09:58:59.936874991 +0300
@@ -517,3 +517,187 @@
1
DROP TABLE t1;
diff --git a/mysql-test/suite/galera/r/galera_ist_MDEV-28583,debug.rdiff b/mysql-test/suite/galera/r/galera_ist_MDEV-28583,debug.rdiff
index 9e6530aa9f7..1c33916330a 100644
--- a/mysql-test/suite/galera/r/galera_ist_MDEV-28583,debug.rdiff
+++ b/mysql-test/suite/galera/r/galera_ist_MDEV-28583,debug.rdiff
@@ -1,5 +1,5 @@
---- r/galera_ist_MDEV-28583.result
-+++ r/galera_ist_MDEV-28583.reject
+--- suite/galera/r/galera_ist_MDEV-28583.result 2022-06-11 10:48:16.875034382 +0300
++++ suite/galera/r/galera_ist_MDEV-28583,debug.reject 2022-06-11 11:25:55.616481509 +0300
@@ -517,3 +517,187 @@
1
DROP TABLE t1;
diff --git a/mysql-test/suite/galera/t/MW-329.test b/mysql-test/suite/galera/t/MW-329.test
index 904fc2f95d8..16a65d9b7ae 100644
--- a/mysql-test/suite/galera/t/MW-329.test
+++ b/mysql-test/suite/galera/t/MW-329.test
@@ -89,7 +89,7 @@ while ($count)
--enable_query_log
--connection node_1b
---error 0,2013,1317
+--error 0,2013,1317,2026
--reap
--enable_query_log
--enable_result_log
diff --git a/mysql-test/suite/galera/t/galera_bf_kill_debug.test b/mysql-test/suite/galera/t/galera_bf_kill_debug.test
index c322f283757..6706734cc36 100644
--- a/mysql-test/suite/galera/t/galera_bf_kill_debug.test
+++ b/mysql-test/suite/galera/t/galera_bf_kill_debug.test
@@ -84,7 +84,7 @@ SET DEBUG_SYNC = "now SIGNAL continue_kill";
--reap
--connection node_2a
---error 0,1213,2013
+--error 0,1213,2013,2026
select * from t1;
--connection node_2
diff --git a/mysql-test/suite/galera/t/galera_defaults.test b/mysql-test/suite/galera/t/galera_defaults.test
index 6b76473d6a6..ff08151327a 100644
--- a/mysql-test/suite/galera/t/galera_defaults.test
+++ b/mysql-test/suite/galera/t/galera_defaults.test
@@ -13,13 +13,11 @@
--source include/force_restart.inc
# Make sure that the test is operating on the right version of galera library.
---let $galera_version=26.4.7
+--let $galera_version=26.4.11
source ../wsrep/include/check_galera_version.inc;
# Global Variables
-SELECT COUNT(*) `expect 50` FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES WHERE VARIABLE_NAME LIKE 'wsrep_%';
-
SELECT VARIABLE_NAME, VARIABLE_VALUE
FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES
WHERE VARIABLE_NAME LIKE 'wsrep_%'
diff --git a/mysql-test/suite/galera/t/galera_var_reject_queries.test b/mysql-test/suite/galera/t/galera_var_reject_queries.test
index 60aabe9bc17..fb86b69d95a 100644
--- a/mysql-test/suite/galera/t/galera_var_reject_queries.test
+++ b/mysql-test/suite/galera/t/galera_var_reject_queries.test
@@ -5,6 +5,10 @@
--source include/galera_cluster.inc
--source include/have_innodb.inc
+if (`select version() not like '10.10.3-%'`) {
+ skip disabled until new C/C;
+}
+
CREATE TABLE t1 (f1 INTEGER NOT NULL PRIMARY KEY) engine=innodb;
--connect node_1a, 127.0.0.1, root, , test, $NODE_MYPORT_1
@@ -26,7 +30,7 @@ SELECT * FROM t1;
SET GLOBAL wsrep_reject_queries = ALL_KILL;
--connection node_1a
---error ER_CONNECTION_KILLED,2013,2006
+--error ER_CONNECTION_KILLED,2013,2006,2026
SELECT * FROM t1;
--connect node_1b, 127.0.0.1, root, , test, $NODE_MYPORT_1
diff --git a/mysql-test/suite/galera_3nodes/r/galera_allowlist.result b/mysql-test/suite/galera_3nodes/r/galera_allowlist.result
new file mode 100644
index 00000000000..471444d8c08
--- /dev/null
+++ b/mysql-test/suite/galera_3nodes/r/galera_allowlist.result
@@ -0,0 +1,35 @@
+connection node_2;
+connection node_1;
+SELECT COUNT(*) = 3 FROM mysql.wsrep_allowlist;
+COUNT(*) = 3
+1
+connection node_2;
+SELECT COUNT(*) = 3 FROM mysql.wsrep_allowlist;
+COUNT(*) = 3
+1
+connection node_3;
+SET @@global.wsrep_desync = 1;
+SET SESSION wsrep_sync_wait = 0;
+SET GLOBAL wsrep_provider_options = 'gmcast.isolate=1';
+connection node_1;
+DELETE FROM mysql.wsrep_allowlist WHERE ip LIKE '127.0.0.3';
+SELECT COUNT(*) = 2 FROM mysql.wsrep_allowlist;
+COUNT(*) = 2
+1
+connection node_2;
+SELECT COUNT(*) = 2 FROM mysql.wsrep_allowlist;
+COUNT(*) = 2
+1
+connection node_3;
+SET GLOBAL wsrep_provider_options = 'gmcast.isolate=0';
+SET @@global.wsrep_desync = 0;
+connection node_1;
+INSERT INTO mysql.wsrep_allowlist(ip) VALUES ('127.0.0.3');
+connection node_3;
+# restart
+connection node_1;
+CALL mtr.add_suppression('WSREP: Connection not allowed');
+connection node_2;
+CALL mtr.add_suppression('WSREP: Connection not allowed');
+connection node_3;
+CALL mtr.add_suppression('WSREP: Ignoring lack of quorum');
diff --git a/mysql-test/suite/galera_3nodes/t/galera_allowlist.cnf b/mysql-test/suite/galera_3nodes/t/galera_allowlist.cnf
new file mode 100644
index 00000000000..62f24c172af
--- /dev/null
+++ b/mysql-test/suite/galera_3nodes/t/galera_allowlist.cnf
@@ -0,0 +1,26 @@
+!include ../galera_3nodes.cnf
+
+[mysqld]
+wsrep_sst_method=rsync
+
+[mysqld.1]
+wsrep_allowlist="127.0.0.1,127.0.0.2,127.0.0.3"
+
+[mysqld.2]
+wsrep_provider_options='repl.causal_read_timeout=PT90S;base_port=@mysqld.2.#galera_port;gmcast.listen_addr=127.0.0.2;evs.suspect_timeout=PT10S;evs.inactive_timeout=PT30S;evs.install_timeout=PT15S'
+
+# Variable is only used on bootstrap node, so this will be ignored
+wsrep_allowlist="127.0.0.1,127.0.0.2,127.0.0.3,127.0.0.4,127.0.0.5"
+
+wsrep_node_address=127.0.0.2
+wsrep_sst_receive_address=127.0.0.2:@mysqld.2.#sst_port
+wsrep_node_incoming_address=127.0.0.2:@mysqld.2.port
+wsrep_sst_receive_address='127.0.0.2:@mysqld.2.#sst_port'
+
+[mysqld.3]
+wsrep_provider_options='repl.causal_read_timeout=PT90S;base_port=@mysqld.3.#galera_port;gmcast.listen_addr=127.0.0.3;evs.suspect_timeout=PT10S;evs.inactive_timeout=PT30S;evs.install_timeout=PT15S;pc.ignore_quorum=TRUE;pc.wait_prim=FALSE'
+
+wsrep_node_address=127.0.0.3
+wsrep_sst_receive_address=127.0.0.3:@mysqld.3.#sst_port
+wsrep_node_incoming_address=127.0.0.3:@mysqld.3.port
+wsrep_sst_receive_address='127.0.0.3:@mysqld.3.#sst_port' \ No newline at end of file
diff --git a/mysql-test/suite/galera_3nodes/t/galera_allowlist.test b/mysql-test/suite/galera_3nodes/t/galera_allowlist.test
new file mode 100644
index 00000000000..74fff61c4f8
--- /dev/null
+++ b/mysql-test/suite/galera_3nodes/t/galera_allowlist.test
@@ -0,0 +1,66 @@
+--source include/galera_cluster.inc
+--source include/have_innodb.inc
+
+# Check that `wsrep_allowlist` variable is loaded
+SELECT COUNT(*) = 3 FROM mysql.wsrep_allowlist;
+
+--connection node_2
+# Check that non-bootstrap nodes doesn't populate `mysql.wsrep_allowlist`
+SELECT COUNT(*) = 3 FROM mysql.wsrep_allowlist;
+
+--let $galera_connection_name = node_3
+--let $galera_server_number = 3
+--source include/galera_connect.inc
+
+--connection node_3
+# Desync and disconnect node 3 from the PC:
+SET @@global.wsrep_desync = 1;
+SET SESSION wsrep_sync_wait = 0;
+SET GLOBAL wsrep_provider_options = 'gmcast.isolate=1';
+
+--connection node_1
+# Wait until node 3 disappears from the PC:
+--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
+--source include/wait_condition.inc
+
+# Delete node ip (127.0.0.3) from allowlist
+DELETE FROM mysql.wsrep_allowlist WHERE ip LIKE '127.0.0.3';
+
+SELECT COUNT(*) = 2 FROM mysql.wsrep_allowlist;
+
+--connection node_2
+SELECT COUNT(*) = 2 FROM mysql.wsrep_allowlist;
+
+--connection node_3
+# Reconnect node 2 to the PC:
+SET GLOBAL wsrep_provider_options = 'gmcast.isolate=0';
+
+# We should reach Primary with cluster size = 1 because of `pc.ignore_quorum=TRUE and pc.wait_prim=FALSE` used in configuration
+--let $wait_condition = SELECT VARIABLE_VALUE = 1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
+--source include/wait_condition.inc
+
+# Resync should pass:
+SET @@global.wsrep_desync = 0;
+
+# Shutdown node
+--source include/shutdown_mysqld.inc
+
+--connection node_1
+# Allow node 3 could be reconnected to cluster
+INSERT INTO mysql.wsrep_allowlist(ip) VALUES ('127.0.0.3');
+
+--connection node_3
+--source include/start_mysqld.inc
+--source include/wait_until_connected_again.inc
+
+--connection node_1
+--let $wait_condition = SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
+--source include/wait_condition.inc
+
+CALL mtr.add_suppression('WSREP: Connection not allowed');
+
+--connection node_2
+CALL mtr.add_suppression('WSREP: Connection not allowed');
+
+--connection node_3
+CALL mtr.add_suppression('WSREP: Ignoring lack of quorum');
diff --git a/mysql-test/suite/galera_sr/t/galera_sr_cc_master.test b/mysql-test/suite/galera_sr/t/galera_sr_cc_master.test
index da547c59626..6665a6e728d 100644
--- a/mysql-test/suite/galera_sr/t/galera_sr_cc_master.test
+++ b/mysql-test/suite/galera_sr/t/galera_sr_cc_master.test
@@ -1,6 +1,10 @@
--source include/galera_cluster.inc
--source include/have_innodb.inc
+if (`select version() not like '10.10.3-%'`) {
+ skip disabled until new C/C;
+}
+
#
# Test the effect of Cluster Configuration Change on a concurrently-running SR transaction
# We use SET GLOBAL wsrep_cluster_address = '' to cause the master (node_2) to temporarily
diff --git a/mysql-test/suite/gcol/inc/gcol_blocked_sql_funcs_main.inc b/mysql-test/suite/gcol/inc/gcol_blocked_sql_funcs_main.inc
index 879e2fe857d..4cc107306ba 100644
--- a/mysql-test/suite/gcol/inc/gcol_blocked_sql_funcs_main.inc
+++ b/mysql-test/suite/gcol/inc/gcol_blocked_sql_funcs_main.inc
@@ -251,3 +251,18 @@ drop table t1;
--echo #
--echo # End of 10.3 tests
--echo #
+
+--echo #
+--echo # MDEV-29029 Index corruption and/or assertion failure upon using RANDOM_BYTES for indexed virtual column
+--echo #
+
+create table t1 (a int);
+--error ER_GENERATED_COLUMN_FUNCTION_IS_NOT_ALLOWED
+alter table t1 add column b binary(32) generated always as (random_bytes(a));
+alter table t1 add column b binary(32) default (random_bytes(a));
+drop table t1;
+
+--echo #
+--echo #
+--echo # End of 10.10 tests
+--echo #
diff --git a/mysql-test/suite/gcol/r/gcol_blocked_sql_funcs_innodb.result b/mysql-test/suite/gcol/r/gcol_blocked_sql_funcs_innodb.result
index 6b7faa18da8..a79ed43c7f3 100644
--- a/mysql-test/suite/gcol/r/gcol_blocked_sql_funcs_innodb.result
+++ b/mysql-test/suite/gcol/r/gcol_blocked_sql_funcs_innodb.result
@@ -173,6 +173,18 @@ drop table t1;
#
# End of 10.3 tests
#
+#
+# MDEV-29029 Index corruption and/or assertion failure upon using RANDOM_BYTES for indexed virtual column
+#
+create table t1 (a int);
+alter table t1 add column b binary(32) generated always as (random_bytes(a));
+ERROR HY000: Function or expression 'random_bytes()' cannot be used in the GENERATED ALWAYS AS clause of `b`
+alter table t1 add column b binary(32) default (random_bytes(a));
+drop table t1;
+#
+#
+# End of 10.10 tests
+#
DROP VIEW IF EXISTS v1,v2;
DROP TABLE IF EXISTS t1,t2,t3;
DROP PROCEDURE IF EXISTS p1;
diff --git a/mysql-test/suite/gcol/r/gcol_blocked_sql_funcs_myisam.result b/mysql-test/suite/gcol/r/gcol_blocked_sql_funcs_myisam.result
index 99921c658b3..ac8bd0a3322 100644
--- a/mysql-test/suite/gcol/r/gcol_blocked_sql_funcs_myisam.result
+++ b/mysql-test/suite/gcol/r/gcol_blocked_sql_funcs_myisam.result
@@ -175,6 +175,18 @@ drop table t1;
#
# End of 10.3 tests
#
+#
+# MDEV-29029 Index corruption and/or assertion failure upon using RANDOM_BYTES for indexed virtual column
+#
+create table t1 (a int);
+alter table t1 add column b binary(32) generated always as (random_bytes(a));
+ERROR HY000: Function or expression 'random_bytes()' cannot be used in the GENERATED ALWAYS AS clause of `b`
+alter table t1 add column b binary(32) default (random_bytes(a));
+drop table t1;
+#
+#
+# End of 10.10 tests
+#
DROP VIEW IF EXISTS v1,v2;
DROP TABLE IF EXISTS t1,t2,t3;
DROP PROCEDURE IF EXISTS p1;
diff --git a/mysql-test/suite/gcol/r/gcol_supported_sql_funcs_innodb.result b/mysql-test/suite/gcol/r/gcol_supported_sql_funcs_innodb.result
index 9929f4d1eaa..1b12e0a9bc6 100644
--- a/mysql-test/suite/gcol/r/gcol_supported_sql_funcs_innodb.result
+++ b/mysql-test/suite/gcol/r/gcol_supported_sql_funcs_innodb.result
@@ -2599,7 +2599,7 @@ create table t1 (a timestamp, c bigint generated always as (timestampdiff(MONTH,
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `a` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `a` timestamp NULL DEFAULT NULL,
`c` bigint(20) GENERATED ALWAYS AS (timestampdiff(MONTH,`a`,`a`)) VIRTUAL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
insert into t1 values ('2003-02-01',default);
diff --git a/mysql-test/suite/gcol/r/gcol_supported_sql_funcs_myisam.result b/mysql-test/suite/gcol/r/gcol_supported_sql_funcs_myisam.result
index 802e830a587..8553f87dc58 100644
--- a/mysql-test/suite/gcol/r/gcol_supported_sql_funcs_myisam.result
+++ b/mysql-test/suite/gcol/r/gcol_supported_sql_funcs_myisam.result
@@ -2599,7 +2599,7 @@ create table t1 (a timestamp, c bigint generated always as (timestampdiff(MONTH,
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `a` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `a` timestamp NULL DEFAULT NULL,
`c` bigint(20) GENERATED ALWAYS AS (timestampdiff(MONTH,`a`,`a`)) VIRTUAL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
insert into t1 values ('2003-02-01',default);
diff --git a/mysql-test/suite/gcol/r/innodb_virtual_fk.result b/mysql-test/suite/gcol/r/innodb_virtual_fk.result
index faba10161fb..97058bc2c52 100644
--- a/mysql-test/suite/gcol/r/innodb_virtual_fk.result
+++ b/mysql-test/suite/gcol/r/innodb_virtual_fk.result
@@ -712,7 +712,7 @@ SET foreign_key_checks=1;
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NULL DEFAULT NULL,
`c2` year(4) DEFAULT NULL,
`c3` time DEFAULT NULL,
`c4` char(10) DEFAULT NULL,
@@ -729,7 +729,7 @@ ERROR HY000: Can't create table `test`.`t1` (errno: 150 "Foreign key constraint
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `c1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `c1` timestamp NULL DEFAULT NULL,
`c2` year(4) DEFAULT NULL,
`c3` time DEFAULT NULL,
`c4` char(10) DEFAULT NULL,
diff --git a/mysql-test/suite/innodb/r/innodb-alter-timestamp.result b/mysql-test/suite/innodb/r/innodb-alter-timestamp.result
index 1609812ed30..1a68c54095a 100644
--- a/mysql-test/suite/innodb/r/innodb-alter-timestamp.result
+++ b/mysql-test/suite/innodb/r/innodb-alter-timestamp.result
@@ -59,16 +59,11 @@ SELECT DISTINCT d1 FROM t1;
d1
NULL
ALTER TABLE t1 CHANGE d1 d1 TIMESTAMP DEFAULT '2017-05-08 16:32:54';
-affected rows: 5
-info: Records: 5 Duplicates: 0 Warnings: 0
-# Note: NULL was changed to CURRENT_TIMESTAMP(),
-# not the specified constant DEFAULT value!
+affected rows: 0
+info: Records: 0 Duplicates: 0 Warnings: 0
SELECT COUNT(DISTINCT d1),COUNT(d1),COUNT(*) FROM t1;
COUNT(DISTINCT d1) COUNT(d1) COUNT(*)
-1 5 5
-SELECT DISTINCT (CURRENT_TIMESTAMP()-d1) <= 60 FROM t1;
-(CURRENT_TIMESTAMP()-d1) <= 60
-1
+0 0 5
drop table t1;
CREATE TABLE t1 (
`i1` INT(10) UNSIGNED NOT NULL,
@@ -111,8 +106,8 @@ t1 CREATE TABLE `t1` (
`i1` int(10) unsigned NOT NULL,
`d1` timestamp NOT NULL DEFAULT current_timestamp(),
`u1` varchar(30) DEFAULT substr(user(),1),
- `d2` timestamp NOT NULL DEFAULT '2017-05-08 16:23:45',
- `d3` timestamp NOT NULL DEFAULT `d1`
+ `d2` timestamp NULL DEFAULT '2017-05-08 16:23:45',
+ `d3` timestamp NULL DEFAULT `d1`
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
ALTER TABLE t1 ADD COLUMN d4 TIMESTAMP DEFAULT CURRENT_TIMESTAMP;
affected rows: 0
diff --git a/mysql-test/suite/innodb/r/innodb.result b/mysql-test/suite/innodb/r/innodb.result
index 47e5f0f5c94..742a822baa0 100644
--- a/mysql-test/suite/innodb/r/innodb.result
+++ b/mysql-test/suite/innodb/r/innodb.result
@@ -1694,15 +1694,6 @@ OK
SELECT variable_value FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_page_size';
variable_value
16384
-SELECT variable_value - @innodb_rows_deleted_orig FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_rows_deleted';
-variable_value - @innodb_rows_deleted_orig
-71
-SELECT variable_value - @innodb_rows_inserted_orig FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_rows_inserted';
-variable_value - @innodb_rows_inserted_orig
-964
-SELECT variable_value - @innodb_rows_updated_orig FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_rows_updated';
-variable_value - @innodb_rows_updated_orig
-865
SELECT variable_value - @innodb_row_lock_waits_orig FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_row_lock_waits';
variable_value - @innodb_row_lock_waits_orig
0
diff --git a/mysql-test/suite/innodb/r/innodb_ctype_ldml.result b/mysql-test/suite/innodb/r/innodb_ctype_ldml.result
index 82679961d68..22841cca760 100644
--- a/mysql-test/suite/innodb/r/innodb_ctype_ldml.result
+++ b/mysql-test/suite/innodb/r/innodb_ctype_ldml.result
@@ -402,6 +402,7 @@ utf8mb4_test_ci utf8mb4 326 8
utf16_test_ci utf16 327 8
utf8mb4_test_400_ci utf8mb4 328 8
utf8mb4_test_520_nopad_ci utf8mb4 329 8
+utf8mb4_uca1400_test01_as_ci utf8mb4 330 4
latin1_test latin1 331 1
latin1_test2 latin1 332 1
latin1_test2_cs latin1 333 1
@@ -438,6 +439,7 @@ ucs2_test_ci ucs2 358 8
utf8mb4_test_ci utf8mb4 326 8
utf8mb4_test_400_ci utf8mb4 328 8
utf8mb4_test_520_nopad_ci utf8mb4 329 8
+utf8mb4_uca1400_test01_as_ci utf8mb4 330 4
utf16_test_ci utf16 327 8
utf32_test_ci utf32 391 8
show collation like 'ucs2_vn_ci';
diff --git a/mysql-test/suite/innodb/r/innodb_skip_innodb_is_tables.result b/mysql-test/suite/innodb/r/innodb_skip_innodb_is_tables.result
index 385034f7853..d948472e965 100644
--- a/mysql-test/suite/innodb/r/innodb_skip_innodb_is_tables.result
+++ b/mysql-test/suite/innodb/r/innodb_skip_innodb_is_tables.result
@@ -70,8 +70,6 @@ buffer_pool_pages_free buffer 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL N
buffer_pages_created buffer 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 status_counter Number of pages created (innodb_pages_created)
buffer_pages_written buffer 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 status_counter Number of pages written (innodb_pages_written)
buffer_pages_read buffer 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 status_counter Number of pages read (innodb_pages_read)
-buffer_index_sec_rec_cluster_reads buffer 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 status_counter Number of secondary record reads triggered cluster read
-buffer_index_sec_rec_cluster_reads_avoided buffer 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 status_counter Number of secondary record reads avoided triggering cluster read
buffer_data_reads buffer 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 status_counter Amount of data read in bytes (innodb_data_reads)
buffer_data_written buffer 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 status_counter Amount of data written in bytes (innodb_data_written)
buffer_flush_batch_scanned buffer 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 set_owner Total pages scanned as part of flush batch
@@ -226,14 +224,6 @@ innodb_dict_lru_count_idle server 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NU
innodb_dblwr_writes server 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 status_counter Number of doublewrite operations that have been performed (innodb_dblwr_writes)
innodb_dblwr_pages_written server 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 status_counter Number of pages that have been written for doublewrite operations (innodb_dblwr_pages_written)
innodb_page_size server 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 value InnoDB page size in bytes (innodb_page_size)
-dml_reads dml 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 status_counter Number of rows read
-dml_inserts dml 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 status_counter Number of rows inserted
-dml_deletes dml 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 status_counter Number of rows deleted
-dml_updates dml 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 status_counter Number of rows updated
-dml_system_reads dml 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 status_counter Number of system rows read
-dml_system_inserts dml 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 status_counter Number of system rows inserted
-dml_system_deletes dml 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 status_counter Number of system rows deleted
-dml_system_updates dml 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 status_counter Number of system rows updated
ddl_background_drop_indexes ddl 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 counter Number of indexes waiting to be dropped after failed index creation
ddl_online_create_index ddl 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 counter Number of indexes being created online
ddl_pending_alter_table ddl 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 counter Number of ALTER TABLE, CREATE INDEX, DROP INDEX in progress
diff --git a/mysql-test/suite/innodb/r/innodb_status_variables.result b/mysql-test/suite/innodb/r/innodb_status_variables.result
index dd3d3ca1dd2..3a86271c226 100644
--- a/mysql-test/suite/innodb/r/innodb_status_variables.result
+++ b/mysql-test/suite/innodb/r/innodb_status_variables.result
@@ -75,14 +75,6 @@ INNODB_ROW_LOCK_TIME
INNODB_ROW_LOCK_TIME_AVG
INNODB_ROW_LOCK_TIME_MAX
INNODB_ROW_LOCK_WAITS
-INNODB_ROWS_DELETED
-INNODB_ROWS_INSERTED
-INNODB_ROWS_READ
-INNODB_ROWS_UPDATED
-INNODB_SYSTEM_ROWS_DELETED
-INNODB_SYSTEM_ROWS_INSERTED
-INNODB_SYSTEM_ROWS_READ
-INNODB_SYSTEM_ROWS_UPDATED
INNODB_NUM_OPEN_FILES
INNODB_TRUNCATED_STATUS_WRITES
INNODB_AVAILABLE_UNDO_LOGS
@@ -107,8 +99,6 @@ INNODB_INSTANT_ALTER_COLUMN
INNODB_ONLINEDDL_ROWLOG_ROWS
INNODB_ONLINEDDL_ROWLOG_PCT_USED
INNODB_ONLINEDDL_PCT_PROGRESS
-INNODB_SECONDARY_INDEX_TRIGGERED_CLUSTER_READS
-INNODB_SECONDARY_INDEX_TRIGGERED_CLUSTER_READS_AVOIDED
INNODB_ENCRYPTION_ROTATION_PAGES_READ_FROM_CACHE
INNODB_ENCRYPTION_ROTATION_PAGES_READ_FROM_DISK
INNODB_ENCRYPTION_ROTATION_PAGES_MODIFIED
diff --git a/mysql-test/suite/innodb/r/instant_alter_debug.result b/mysql-test/suite/innodb/r/instant_alter_debug.result
index 5f74c234260..7205fc48b50 100644
--- a/mysql-test/suite/innodb/r/instant_alter_debug.result
+++ b/mysql-test/suite/innodb/r/instant_alter_debug.result
@@ -78,9 +78,7 @@ c7 VARCHAR(257) CHARACTER SET latin1,
c8 VARCHAR(257) CHARACTER SET binary
) ENGINE=InnoDB;
INSERT INTO t9 () VALUES ();
-ALTER TABLE t9 ADD COLUMN IF NOT EXISTS t TIMESTAMP NULL KEY;
-Warnings:
-Note 1061 Multiple primary key defined
+ALTER TABLE t9 ADD COLUMN IF NOT EXISTS t TIMESTAMP NULL;
SET DEBUG_SYNC='row_log_table_apply1_before SIGNAL rebuilt WAIT_FOR dml';
OPTIMIZE TABLE t9;
connection dml;
diff --git a/mysql-test/suite/innodb/r/monitor.result b/mysql-test/suite/innodb/r/monitor.result
index 221c92faaea..63f78752276 100644
--- a/mysql-test/suite/innodb/r/monitor.result
+++ b/mysql-test/suite/innodb/r/monitor.result
@@ -36,8 +36,6 @@ buffer_pool_pages_free disabled
buffer_pages_created disabled
buffer_pages_written disabled
buffer_pages_read disabled
-buffer_index_sec_rec_cluster_reads disabled
-buffer_index_sec_rec_cluster_reads_avoided disabled
buffer_data_reads disabled
buffer_data_written disabled
buffer_flush_batch_scanned disabled
@@ -192,14 +190,6 @@ innodb_dict_lru_count_idle disabled
innodb_dblwr_writes disabled
innodb_dblwr_pages_written disabled
innodb_page_size disabled
-dml_reads disabled
-dml_inserts disabled
-dml_deletes disabled
-dml_updates disabled
-dml_system_reads disabled
-dml_system_inserts disabled
-dml_system_deletes disabled
-dml_system_updates disabled
ddl_background_drop_indexes disabled
ddl_online_create_index disabled
ddl_pending_alter_table disabled
@@ -391,134 +381,6 @@ where name='trx_rollbacks';
name max_count min_count count max_count_reset min_count_reset count_reset status
trx_rollbacks 1 NULL 1 1 NULL 1 enabled
set global innodb_monitor_disable = module_trx;
-set global innodb_monitor_enable = module_dml;
-insert into monitor_test values(9);
-update monitor_test set col = 10 where col = 9;
-select name, max_count, min_count, count,
-max_count_reset, min_count_reset, count_reset,
-if(enabled,'enabled','disabled') status
-from information_schema.innodb_metrics
-where name like "dml%";
-name max_count min_count count max_count_reset min_count_reset count_reset status
-dml_reads 2 NULL 2 2 NULL 2 enabled
-dml_inserts 1 NULL 1 1 NULL 1 enabled
-dml_deletes 0 NULL 0 0 NULL 0 enabled
-dml_updates 2 NULL 2 2 NULL 2 enabled
-dml_system_reads 0 NULL 0 0 NULL 0 enabled
-dml_system_inserts 0 NULL 0 0 NULL 0 enabled
-dml_system_deletes 0 NULL 0 0 NULL 0 enabled
-dml_system_updates 0 NULL 0 0 NULL 0 enabled
-delete from monitor_test;
-select name, max_count, min_count, count,
-max_count_reset, min_count_reset, count_reset,
-if(enabled,'enabled','disabled') status
-from information_schema.innodb_metrics
-where name like "dml%";
-name max_count min_count count max_count_reset min_count_reset count_reset status
-dml_reads 4 NULL 4 4 NULL 4 enabled
-dml_inserts 1 NULL 1 1 NULL 1 enabled
-dml_deletes 2 NULL 2 2 NULL 2 enabled
-dml_updates 2 NULL 2 2 NULL 2 enabled
-dml_system_reads 0 NULL 0 0 NULL 0 enabled
-dml_system_inserts 0 NULL 0 0 NULL 0 enabled
-dml_system_deletes 0 NULL 0 0 NULL 0 enabled
-dml_system_updates 0 NULL 0 0 NULL 0 enabled
-set global innodb_monitor_reset = module_dml;
-select name, max_count, min_count, count,
-max_count_reset, min_count_reset, count_reset,
-if(enabled,'enabled','disabled') status
-from information_schema.innodb_metrics
-where name like "dml%";
-name max_count min_count count max_count_reset min_count_reset count_reset status
-dml_reads 4 NULL 4 0 NULL 0 enabled
-dml_inserts 1 NULL 1 0 NULL 0 enabled
-dml_deletes 2 NULL 2 0 NULL 0 enabled
-dml_updates 2 NULL 2 0 NULL 0 enabled
-dml_system_reads 0 NULL 0 0 NULL 0 enabled
-dml_system_inserts 0 NULL 0 0 NULL 0 enabled
-dml_system_deletes 0 NULL 0 0 NULL 0 enabled
-dml_system_updates 0 NULL 0 0 NULL 0 enabled
-insert into monitor_test values(9);
-insert into monitor_test values(1);
-delete from monitor_test;
-select name, max_count, min_count, count,
-max_count_reset, min_count_reset, count_reset,
-if(enabled,'enabled','disabled') status
-from information_schema.innodb_metrics
-where name like "dml%";
-name max_count min_count count max_count_reset min_count_reset count_reset status
-dml_reads 6 NULL 6 2 NULL 2 enabled
-dml_inserts 3 NULL 3 2 NULL 2 enabled
-dml_deletes 4 NULL 4 2 NULL 2 enabled
-dml_updates 2 NULL 2 0 NULL 0 enabled
-dml_system_reads 0 NULL 0 0 NULL 0 enabled
-dml_system_inserts 0 NULL 0 0 NULL 0 enabled
-dml_system_deletes 0 NULL 0 0 NULL 0 enabled
-dml_system_updates 0 NULL 0 0 NULL 0 enabled
-set global innodb_monitor_reset_all = module_dml;
-select name, max_count, min_count, count,
-max_count_reset, min_count_reset, count_reset,
-if(enabled,'enabled','disabled') status
-from information_schema.innodb_metrics
-where name like "dml%";
-name max_count min_count count max_count_reset min_count_reset count_reset status
-dml_reads 6 NULL 6 2 NULL 2 enabled
-dml_inserts 3 NULL 3 2 NULL 2 enabled
-dml_deletes 4 NULL 4 2 NULL 2 enabled
-dml_updates 2 NULL 2 0 NULL 0 enabled
-dml_system_reads 0 NULL 0 0 NULL 0 enabled
-dml_system_inserts 0 NULL 0 0 NULL 0 enabled
-dml_system_deletes 0 NULL 0 0 NULL 0 enabled
-dml_system_updates 0 NULL 0 0 NULL 0 enabled
-set global innodb_monitor_disable = module_dml;
-select name, max_count, min_count, count,
-max_count_reset, min_count_reset, count_reset,
-if(enabled,'enabled','disabled') status
-from information_schema.innodb_metrics
-where name like "dml%";
-name max_count min_count count max_count_reset min_count_reset count_reset status
-dml_reads 6 NULL 6 2 NULL 2 disabled
-dml_inserts 3 NULL 3 2 NULL 2 disabled
-dml_deletes 4 NULL 4 2 NULL 2 disabled
-dml_updates 2 NULL 2 0 NULL 0 disabled
-dml_system_reads 0 NULL 0 0 NULL 0 disabled
-dml_system_inserts 0 NULL 0 0 NULL 0 disabled
-dml_system_deletes 0 NULL 0 0 NULL 0 disabled
-dml_system_updates 0 NULL 0 0 NULL 0 disabled
-set global innodb_monitor_reset_all = module_dml;
-select name, max_count, min_count, count,
-max_count_reset, min_count_reset, count_reset,
-if(enabled,'enabled','disabled') status
-from information_schema.innodb_metrics
-where name like "dml%";
-name max_count min_count count max_count_reset min_count_reset count_reset status
-dml_reads NULL NULL 0 NULL NULL 0 disabled
-dml_inserts NULL NULL 0 NULL NULL 0 disabled
-dml_deletes NULL NULL 0 NULL NULL 0 disabled
-dml_updates NULL NULL 0 NULL NULL 0 disabled
-dml_system_reads NULL NULL 0 NULL NULL 0 disabled
-dml_system_inserts NULL NULL 0 NULL NULL 0 disabled
-dml_system_deletes NULL NULL 0 NULL NULL 0 disabled
-dml_system_updates NULL NULL 0 NULL NULL 0 disabled
-set global innodb_monitor_enable = dml_inserts;
-insert into monitor_test values(9);
-insert into monitor_test values(1);
-delete from monitor_test;
-select name, max_count, min_count, count,
-max_count_reset, min_count_reset, count_reset,
-if(enabled,'enabled','disabled') status
-from information_schema.innodb_metrics
-where name like "dml%";
-name max_count min_count count max_count_reset min_count_reset count_reset status
-dml_reads NULL NULL 0 NULL NULL 0 disabled
-dml_inserts 2 NULL 2 2 NULL 2 enabled
-dml_deletes NULL NULL 0 NULL NULL 0 disabled
-dml_updates NULL NULL 0 NULL NULL 0 disabled
-dml_system_reads NULL NULL 0 NULL NULL 0 disabled
-dml_system_inserts NULL NULL 0 NULL NULL 0 disabled
-dml_system_deletes NULL NULL 0 NULL NULL 0 disabled
-dml_system_updates NULL NULL 0 NULL NULL 0 disabled
-set global innodb_monitor_disable = module_dml;
drop table monitor_test;
set global innodb_monitor_enable = file_num_open_files;
select name, max_count, min_count, count,
diff --git a/mysql-test/suite/innodb/r/purge_thread_shutdown.result b/mysql-test/suite/innodb/r/purge_thread_shutdown.result
index 85ac77e6d49..747fe91c966 100644
--- a/mysql-test/suite/innodb/r/purge_thread_shutdown.result
+++ b/mysql-test/suite/innodb/r/purge_thread_shutdown.result
@@ -22,6 +22,6 @@ delete from t1 where a=3;
set global innodb_fast_shutdown=0;
ERROR 42000: Variable 'innodb_fast_shutdown' can't be set to the value of '0'
kill ID;
-ERROR 70100: Connection was killed
+Got one of the listed errors
# restart
drop table t1;
diff --git a/mysql-test/suite/innodb/t/innodb-alter-timestamp.test b/mysql-test/suite/innodb/t/innodb-alter-timestamp.test
index e1c263dc5d0..95df8d6b649 100644
--- a/mysql-test/suite/innodb/t/innodb-alter-timestamp.test
+++ b/mysql-test/suite/innodb/t/innodb-alter-timestamp.test
@@ -48,10 +48,7 @@ SELECT DISTINCT d1 FROM t1;
--enable_info
ALTER TABLE t1 CHANGE d1 d1 TIMESTAMP DEFAULT '2017-05-08 16:32:54';
--disable_info
---echo # Note: NULL was changed to CURRENT_TIMESTAMP(),
---echo # not the specified constant DEFAULT value!
SELECT COUNT(DISTINCT d1),COUNT(d1),COUNT(*) FROM t1;
-SELECT DISTINCT (CURRENT_TIMESTAMP()-d1) <= 60 FROM t1;
drop table t1;
CREATE TABLE t1 (
diff --git a/mysql-test/suite/innodb/t/innodb.test b/mysql-test/suite/innodb/t/innodb.test
index 3b3b2770df7..58e9899bd40 100644
--- a/mysql-test/suite/innodb/t/innodb.test
+++ b/mysql-test/suite/innodb/t/innodb.test
@@ -25,9 +25,6 @@ call mtr.add_suppression("\\[ERROR\\] InnoDB: in ALTER TABLE `test`.`t1`");
call mtr.add_suppression("\\[ERROR\\] InnoDB: in RENAME TABLE table `test`.`t1`");
--disable_warnings
-SET @innodb_rows_deleted_orig = (SELECT variable_value FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_rows_deleted');
-SET @innodb_rows_inserted_orig = (SELECT variable_value FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_rows_inserted');
-SET @innodb_rows_updated_orig = (SELECT variable_value FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_rows_updated');
SET @innodb_row_lock_waits_orig = (SELECT variable_value FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_row_lock_waits');
SET @innodb_row_lock_current_waits_orig = (SELECT variable_value FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_row_lock_current_waits');
SET @innodb_row_lock_time_orig = (SELECT variable_value FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_row_lock_time');
@@ -1319,9 +1316,6 @@ drop table t1;
# uses previous ones(pages_created, rows_deleted, ...).
SELECT IF(variable_value BETWEEN 488 AND 512, 'OK', variable_value) FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_buffer_pool_pages_total';
SELECT variable_value FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_page_size';
-SELECT variable_value - @innodb_rows_deleted_orig FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_rows_deleted';
-SELECT variable_value - @innodb_rows_inserted_orig FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_rows_inserted';
-SELECT variable_value - @innodb_rows_updated_orig FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_rows_updated';
# Test for row locks InnoDB status variables.
SELECT variable_value - @innodb_row_lock_waits_orig FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_row_lock_waits';
diff --git a/mysql-test/suite/innodb/t/innodb_bug51920.test b/mysql-test/suite/innodb/t/innodb_bug51920.test
index 0a9839b612a..84977925548 100644
--- a/mysql-test/suite/innodb/t/innodb_bug51920.test
+++ b/mysql-test/suite/innodb/t/innodb_bug51920.test
@@ -38,7 +38,7 @@ let $wait_condition =
# depending on platform.
#
connection con1;
--- error 1317, 2006, 2013, ER_CONNECTION_KILLED
+-- error 1317, 2006, 2013, ER_CONNECTION_KILLED, 2026
reap;
connection default;
DROP TABLE bug51920;
diff --git a/mysql-test/suite/innodb/t/instant_alter_debug.test b/mysql-test/suite/innodb/t/instant_alter_debug.test
index c6eca884907..64f94a78f2e 100644
--- a/mysql-test/suite/innodb/t/instant_alter_debug.test
+++ b/mysql-test/suite/innodb/t/instant_alter_debug.test
@@ -91,7 +91,7 @@ CREATE TABLE t9 (
c8 VARCHAR(257) CHARACTER SET binary
) ENGINE=InnoDB;
INSERT INTO t9 () VALUES ();
-ALTER TABLE t9 ADD COLUMN IF NOT EXISTS t TIMESTAMP NULL KEY;
+ALTER TABLE t9 ADD COLUMN IF NOT EXISTS t TIMESTAMP NULL;
SET DEBUG_SYNC='row_log_table_apply1_before SIGNAL rebuilt WAIT_FOR dml';
--send
OPTIMIZE TABLE t9;
diff --git a/mysql-test/suite/innodb/t/monitor.test b/mysql-test/suite/innodb/t/monitor.test
index d6fa3f2fbc9..9b093d41892 100644
--- a/mysql-test/suite/innodb/t/monitor.test
+++ b/mysql-test/suite/innodb/t/monitor.test
@@ -254,93 +254,6 @@ where name='trx_rollbacks';
set global innodb_monitor_disable = module_trx;
-# Test DML Module
-set global innodb_monitor_enable = module_dml;
-
-insert into monitor_test values(9);
-
-update monitor_test set col = 10 where col = 9;
-
-select name, max_count, min_count, count,
- max_count_reset, min_count_reset, count_reset,
- if(enabled,'enabled','disabled') status
-from information_schema.innodb_metrics
-where name like "dml%";
-
-delete from monitor_test;
-
-select name, max_count, min_count, count,
- max_count_reset, min_count_reset, count_reset,
- if(enabled,'enabled','disabled') status
- from information_schema.innodb_metrics
- where name like "dml%";
-
-# test reset counter while the counter is on
-set global innodb_monitor_reset = module_dml;
-
-select name, max_count, min_count, count,
- max_count_reset, min_count_reset, count_reset,
- if(enabled,'enabled','disabled') status
-from information_schema.innodb_metrics
-where name like "dml%";
-
-# insert/delete some rows after the reset
-insert into monitor_test values(9);
-insert into monitor_test values(1);
-
-delete from monitor_test;
-
-select name, max_count, min_count, count,
- max_count_reset, min_count_reset, count_reset,
- if(enabled,'enabled','disabled') status
-from information_schema.innodb_metrics
-where name like "dml%";
-
-# We do not allow reset_all while the counter is on, nothing
-# should be reset here
-set global innodb_monitor_reset_all = module_dml;
-
-select name, max_count, min_count, count,
- max_count_reset, min_count_reset, count_reset,
- if(enabled,'enabled','disabled') status
-from information_schema.innodb_metrics
-where name like "dml%";
-
-# Turn off the counter
-set global innodb_monitor_disable = module_dml;
-
-select name, max_count, min_count, count,
- max_count_reset, min_count_reset, count_reset,
- if(enabled,'enabled','disabled') status
-from information_schema.innodb_metrics
-where name like "dml%";
-
-# Reset all counter values
-set global innodb_monitor_reset_all = module_dml;
-
-select name, max_count, min_count, count,
- max_count_reset, min_count_reset, count_reset,
- if(enabled,'enabled','disabled') status
-from information_schema.innodb_metrics
-where name like "dml%";
-
-# Open individual counter "dml_inserts"
-set global innodb_monitor_enable = dml_inserts;
-
-insert into monitor_test values(9);
-insert into monitor_test values(1);
-
-delete from monitor_test;
-
-# Only counter "dml_inserts" should be updated
-select name, max_count, min_count, count,
- max_count_reset, min_count_reset, count_reset,
- if(enabled,'enabled','disabled') status
-from information_schema.innodb_metrics
-where name like "dml%";
-
-set global innodb_monitor_disable = module_dml;
-
drop table monitor_test;
set global innodb_monitor_enable = file_num_open_files;
diff --git a/mysql-test/suite/innodb/t/purge_thread_shutdown.test b/mysql-test/suite/innodb/t/purge_thread_shutdown.test
index 762336cf0d1..53b375b80fd 100644
--- a/mysql-test/suite/innodb/t/purge_thread_shutdown.test
+++ b/mysql-test/suite/innodb/t/purge_thread_shutdown.test
@@ -36,7 +36,7 @@ set global innodb_fast_shutdown=0;
# the error code
let $me=`select concat(' ', connection_id())`;
replace_result $me ID;
-error ER_CONNECTION_KILLED;
+error ER_CONNECTION_KILLED, 2026;
eval kill $me;
source include/start_mysqld.inc;
diff --git a/mysql-test/suite/innodb/t/temporary_table.test b/mysql-test/suite/innodb/t/temporary_table.test
index b0bc95dcd7e..b09ff7c7c30 100644
--- a/mysql-test/suite/innodb/t/temporary_table.test
+++ b/mysql-test/suite/innodb/t/temporary_table.test
@@ -143,7 +143,7 @@ let $counter= 5000;
let $mysql_errno= 9999;
while ($mysql_errno)
{
- --error 0,ER_SERVER_SHUTDOWN,ER_CONNECTION_KILLED,2002,2006,2013
+ --error 0,ER_SERVER_SHUTDOWN,ER_CONNECTION_KILLED,2002,2006,2013,2026
select 1;
dec $counter;
diff --git a/mysql-test/suite/mariabackup/slave_info_norpl.result b/mysql-test/suite/mariabackup/slave_info_norpl.result
index 9fcd67a8916..04ca2fb2242 100644
--- a/mysql-test/suite/mariabackup/slave_info_norpl.result
+++ b/mysql-test/suite/mariabackup/slave_info_norpl.result
@@ -31,28 +31,30 @@ CHANGE MASTER 'master4' TO MASTER_HOST='localhost', MASTER_PORT=10004, MASTER_US
CHANGE MASTER 'master5' TO MASTER_HOST='localhost', MASTER_PORT=10005, MASTER_USE_GTID=slave_pos;
lineno line
1 SET GLOBAL gtid_slave_pos = '<NUM-NUM-NUM>,<NUM-NUM-NUM>';
-2 CHANGE MASTER TO MASTER_LOG_FILE='', MASTER_LOG_POS=<NUM>;
-3 CHANGE MASTER 'master2' TO MASTER_LOG_FILE='', MASTER_LOG_POS=<NUM>;
+2 CHANGE MASTER TO master_use_gtid = slave_pos;
+3 CHANGE MASTER 'master2' TO master_use_gtid = slave_pos;
4 CHANGE MASTER 'master3' TO master_use_gtid = slave_pos;
5 CHANGE MASTER 'master4' TO MASTER_LOG_FILE='', MASTER_LOG_POS=<NUM>;
6 CHANGE MASTER 'master5' TO master_use_gtid = slave_pos;
line
-[00] YYYY-MM-DD hh:mm:ss MySQL slave binlog position: gtid_slave_pos '<NUM-NUM-NUM>,<NUM-NUM-NUM>'; master '' filename '' position '0'; master 'master2' filename '' position '0'; master 'master3' master_use_gtid = slave_pos; master 'master4' filename '' position '0'; master 'master5' master_use_gtid = slave_pos
+[00] YYYY-MM-DD hh:mm:ss MySQL slave binlog position: gtid_slave_pos '<NUM-NUM-NUM>,<NUM-NUM-NUM>'; master '' master_use_gtid = slave_pos; master 'master2' master_use_gtid = slave_pos; master 'master3' master_use_gtid = slave_pos; master 'master4' filename '' position '0'; master 'master5' master_use_gtid = slave_pos
CHANGE MASTER TO MASTER_HOST='localhost', MASTER_PORT=10000, MASTER_USE_GTID=slave_pos;
lineno line
1 SET GLOBAL gtid_slave_pos = '<NUM-NUM-NUM>,<NUM-NUM-NUM>';
2 CHANGE MASTER TO master_use_gtid = slave_pos;
-3 CHANGE MASTER 'master2' TO MASTER_LOG_FILE='', MASTER_LOG_POS=<NUM>;
+3 CHANGE MASTER 'master2' TO master_use_gtid = slave_pos;
4 CHANGE MASTER 'master3' TO master_use_gtid = slave_pos;
5 CHANGE MASTER 'master4' TO MASTER_LOG_FILE='', MASTER_LOG_POS=<NUM>;
6 CHANGE MASTER 'master5' TO master_use_gtid = slave_pos;
line
-[00] YYYY-MM-DD hh:mm:ss MySQL slave binlog position: gtid_slave_pos '<NUM-NUM-NUM>,<NUM-NUM-NUM>'; master '' master_use_gtid = slave_pos; master 'master2' filename '' position '0'; master 'master3' master_use_gtid = slave_pos; master 'master4' filename '' position '0'; master 'master5' master_use_gtid = slave_pos
+[00] YYYY-MM-DD hh:mm:ss MySQL slave binlog position: gtid_slave_pos '<NUM-NUM-NUM>,<NUM-NUM-NUM>'; master '' master_use_gtid = slave_pos; master 'master2' master_use_gtid = slave_pos; master 'master3' master_use_gtid = slave_pos; master 'master4' filename '' position '0'; master 'master5' master_use_gtid = slave_pos
RESET SLAVE ALL;
RESET SLAVE 'master2' ALL;
RESET SLAVE 'master3' ALL;
RESET SLAVE 'master4' ALL;
+Warnings:
+Note 4190 RESET SLAVE is implicitly changing the value of 'Using_Gtid' from 'No' to 'Slave_Pos'
RESET SLAVE 'master5' ALL;
#
# End of 10.2 tests
diff --git a/mysql-test/suite/multi_source/gtid.result b/mysql-test/suite/multi_source/gtid.result
index 0ed1062b70f..6530bb744ac 100644
--- a/mysql-test/suite/multi_source/gtid.result
+++ b/mysql-test/suite/multi_source/gtid.result
@@ -47,8 +47,8 @@ connection master2;
INSERT INTO t2 VALUES (2, "switch1");
INSERT INTO t3 VALUES (202, "switch1 b");
connection slave2;
-CHANGE MASTER 'slave1' TO master_port=MYPORT_1, master_host='127.0.0.1', master_user='root', master_use_gtid=current_pos;
-CHANGE MASTER 'slave2' TO master_port=MYPORT_2, master_host='127.0.0.1', master_user='root', master_use_gtid=current_pos;
+CHANGE MASTER 'slave1' TO master_port=MYPORT_1, master_host='127.0.0.1', master_user='root';
+CHANGE MASTER 'slave2' TO master_port=MYPORT_2, master_host='127.0.0.1', master_user='root';
SET default_master_connection = 'slave1';
START SLAVE;
include/wait_for_slave_to_start.inc
@@ -75,7 +75,7 @@ INSERT INTO t3 VALUES (204, "switch 3 b");
connection slave2;
include/sync_with_master_gtid.inc
connection slave1;
-CHANGE MASTER TO master_port=MYPORT_4, master_host='127.0.0.1', master_user='root', master_use_gtid=current_pos;
+CHANGE MASTER TO master_port=MYPORT_4, master_host='127.0.0.1', master_user='root';
START SLAVE;
SELECT * FROM t1 ORDER BY a;
a b
diff --git a/mysql-test/suite/multi_source/gtid.test b/mysql-test/suite/multi_source/gtid.test
index c81ca20a254..9fc7a66893c 100644
--- a/mysql-test/suite/multi_source/gtid.test
+++ b/mysql-test/suite/multi_source/gtid.test
@@ -73,9 +73,9 @@ INSERT INTO t3 VALUES (202, "switch1 b");
--connection slave2
--replace_result $SERVER_MYPORT_1 MYPORT_1
-eval CHANGE MASTER 'slave1' TO master_port=$SERVER_MYPORT_1, master_host='127.0.0.1', master_user='root', master_use_gtid=current_pos;
+eval CHANGE MASTER 'slave1' TO master_port=$SERVER_MYPORT_1, master_host='127.0.0.1', master_user='root';
--replace_result $SERVER_MYPORT_2 MYPORT_2
-eval CHANGE MASTER 'slave2' TO master_port=$SERVER_MYPORT_2, master_host='127.0.0.1', master_user='root', master_use_gtid=current_pos;
+eval CHANGE MASTER 'slave2' TO master_port=$SERVER_MYPORT_2, master_host='127.0.0.1', master_user='root';
SET default_master_connection = 'slave1';
START SLAVE;
--source include/wait_for_slave_to_start.inc
@@ -125,7 +125,7 @@ INSERT INTO t3 VALUES (204, "switch 3 b");
--connection slave1
--replace_result $SERVER_MYPORT_4 MYPORT_4
-eval CHANGE MASTER TO master_port=$SERVER_MYPORT_4, master_host='127.0.0.1', master_user='root', master_use_gtid=current_pos;
+eval CHANGE MASTER TO master_port=$SERVER_MYPORT_4, master_host='127.0.0.1', master_user='root';
START SLAVE;
--let $wait_condition= SELECT (SELECT COUNT(*) FROM t1)=3 AND (SELECT COUNT(*) FROM t2)=4 AND (SELECT COUNT(*) FROM t3)=7
--source include/wait_condition.inc
diff --git a/mysql-test/suite/multi_source/info_logs.result b/mysql-test/suite/multi_source/info_logs.result
index b0a112aaf3b..c19620b46cc 100644
--- a/mysql-test/suite/multi_source/info_logs.result
+++ b/mysql-test/suite/multi_source/info_logs.result
@@ -10,7 +10,8 @@ multi-master.info
change master 'master1' to
master_port=MYPORT_1,
master_host='127.0.0.1',
-master_user='root';
+master_user='root',
+master_use_gtid=no;
start slave 'master1';
set default_master_connection = 'master1';
include/wait_for_slave_to_start.inc
@@ -28,7 +29,8 @@ master1
change master 'MASTER 2.2' to
master_port=MYPORT_2,
master_host='127.0.0.1',
-master_user='root';
+master_user='root',
+master_use_gtid=no;
start slave 'MASTER 2.2';
set default_master_connection = 'MASTER 2.2';
include/wait_for_slave_to_start.inc
@@ -53,6 +55,8 @@ stop slave 'master1';
set default_master_connection = 'master1';
include/wait_for_slave_to_stop.inc
reset slave 'master1' all;
+Warnings:
+Note 4190 RESET SLAVE is implicitly changing the value of 'Using_Gtid' from 'No' to 'Slave_Pos'
#
# List of files matching '*info*' pattern
# after 'master1' was completely reset, 'MASTER 2.2' still running
@@ -69,7 +73,8 @@ set default_master_connection = '';
change master to
master_port=MYPORT_1,
master_host='127.0.0.1',
-master_user='root';
+master_user='root',
+master_use_gtid=no;
start slave;
include/wait_for_slave_to_start.inc
connect master1,127.0.0.1,root,,,$SERVER_MYPORT_1;
diff --git a/mysql-test/suite/multi_source/info_logs.test b/mysql-test/suite/multi_source/info_logs.test
index 234e317e5ce..f8352978645 100644
--- a/mysql-test/suite/multi_source/info_logs.test
+++ b/mysql-test/suite/multi_source/info_logs.test
@@ -30,7 +30,8 @@
eval change master 'master1' to
master_port=$SERVER_MYPORT_1,
master_host='127.0.0.1',
-master_user='root';
+master_user='root',
+master_use_gtid=no;
start slave 'master1';
set default_master_connection = 'master1';
@@ -54,7 +55,8 @@ set default_master_connection = 'master1';
eval change master 'MASTER 2.2' to
master_port=$SERVER_MYPORT_2,
master_host='127.0.0.1',
-master_user='root';
+master_user='root',
+master_use_gtid=no;
start slave 'MASTER 2.2';
set default_master_connection = 'MASTER 2.2';
@@ -107,7 +109,8 @@ set default_master_connection = '';
eval change master to
master_port=$SERVER_MYPORT_1,
master_host='127.0.0.1',
-master_user='root';
+master_user='root',
+master_use_gtid=no;
start slave;
--source include/wait_for_slave_to_start.inc
diff --git a/mysql-test/suite/multi_source/mdev-8874.result b/mysql-test/suite/multi_source/mdev-8874.result
index aa9cc39b403..12bc251f4e2 100644
--- a/mysql-test/suite/multi_source/mdev-8874.result
+++ b/mysql-test/suite/multi_source/mdev-8874.result
@@ -24,9 +24,9 @@ insert into t1 values(1);
create table t2(a int);
insert into t2 values(1);
connection server_4;
-change master 'm1' to master_port=MYPORT_1 , master_host='127.0.0.1', master_user='root';
-change master 'm2' to master_port=MYPORT_2 , master_host='127.0.0.1', master_user='root';
-change master to master_port=MYPORT_3 , master_host='127.0.0.1', master_user='root';
+change master 'm1' to master_port=MYPORT_1 , master_host='127.0.0.1', master_user='root', master_use_gtid=no;
+change master 'm2' to master_port=MYPORT_2 , master_host='127.0.0.1', master_user='root', master_use_gtid=no;
+change master to master_port=MYPORT_3 , master_host='127.0.0.1', master_user='root', master_use_gtid=no;
start all slaves;
set default_master_connection = 'm1';
include/wait_for_slave_to_start.inc
@@ -65,14 +65,20 @@ Note 1938 SLAVE 'm2' stopped
Note 1938 SLAVE '' stopped
Note 1938 SLAVE 'm1' stopped
RESET SLAVE 'm1' ALL ;
+Warnings:
+Note 4190 RESET SLAVE is implicitly changing the value of 'Using_Gtid' from 'No' to 'Slave_Pos'
RESET SLAVE 'm2' ALL ;
+Warnings:
+Note 4190 RESET SLAVE is implicitly changing the value of 'Using_Gtid' from 'No' to 'Slave_Pos'
RESET SLAVE ALL ;
+Warnings:
+Note 4190 RESET SLAVE is implicitly changing the value of 'Using_Gtid' from 'No' to 'Slave_Pos'
drop database a;
drop database b;
drop database c;
-change master 'm1' to master_port=MYPORT_1 , master_host='127.0.0.1', master_user='root';
-change master 'm2' to master_port=MYPORT_2 , master_host='127.0.0.1', master_user='root';
-change master to master_port=MYPORT_3 , master_host='127.0.0.1', master_user='root';
+change master 'm1' to master_port=MYPORT_1 , master_host='127.0.0.1', master_user='root', master_use_gtid=no;
+change master 'm2' to master_port=MYPORT_2 , master_host='127.0.0.1', master_user='root', master_use_gtid=no;
+change master to master_port=MYPORT_3 , master_host='127.0.0.1', master_user='root', master_use_gtid=no;
start all slaves;
Warnings:
Note 1937 SLAVE 'm2' started
@@ -124,3 +130,6 @@ SET default_master_connection = "m2";
include/wait_for_slave_to_stop.inc
SET default_master_connection = "";
include/wait_for_slave_to_stop.inc
+RESET SLAVE ALL;
+Warnings:
+Note 4190 RESET SLAVE is implicitly changing the value of 'Using_Gtid' from 'No' to 'Slave_Pos'
diff --git a/mysql-test/suite/multi_source/mdev-8874.test b/mysql-test/suite/multi_source/mdev-8874.test
index d03c255b911..1a99ae73d9b 100644
--- a/mysql-test/suite/multi_source/mdev-8874.test
+++ b/mysql-test/suite/multi_source/mdev-8874.test
@@ -40,11 +40,11 @@ insert into t2 values(1);
--connection server_4
--disable_warnings
--replace_result $SERVER_MYPORT_1 MYPORT_1
-eval change master 'm1' to master_port=$SERVER_MYPORT_1 , master_host='127.0.0.1', master_user='root';
+eval change master 'm1' to master_port=$SERVER_MYPORT_1 , master_host='127.0.0.1', master_user='root', master_use_gtid=no;
--replace_result $SERVER_MYPORT_2 MYPORT_2
-eval change master 'm2' to master_port=$SERVER_MYPORT_2 , master_host='127.0.0.1', master_user='root';
+eval change master 'm2' to master_port=$SERVER_MYPORT_2 , master_host='127.0.0.1', master_user='root', master_use_gtid=no;
--replace_result $SERVER_MYPORT_3 MYPORT_3
-eval change master to master_port=$SERVER_MYPORT_3 , master_host='127.0.0.1', master_user='root';
+eval change master to master_port=$SERVER_MYPORT_3 , master_host='127.0.0.1', master_user='root', master_use_gtid=no;
start all slaves;
set default_master_connection = 'm1';
--source include/wait_for_slave_to_start.inc
@@ -78,11 +78,11 @@ drop database a;
drop database b;
drop database c;
--replace_result $SERVER_MYPORT_1 MYPORT_1
-eval change master 'm1' to master_port=$SERVER_MYPORT_1 , master_host='127.0.0.1', master_user='root';
+eval change master 'm1' to master_port=$SERVER_MYPORT_1 , master_host='127.0.0.1', master_user='root', master_use_gtid=no;
--replace_result $SERVER_MYPORT_2 MYPORT_2
-eval change master 'm2' to master_port=$SERVER_MYPORT_2 , master_host='127.0.0.1', master_user='root';
+eval change master 'm2' to master_port=$SERVER_MYPORT_2 , master_host='127.0.0.1', master_user='root', master_use_gtid=no;
--replace_result $SERVER_MYPORT_3 MYPORT_3
-eval change master to master_port=$SERVER_MYPORT_3 , master_host='127.0.0.1', master_user='root';
+eval change master to master_port=$SERVER_MYPORT_3 , master_host='127.0.0.1', master_user='root', master_use_gtid=no;
start all slaves;
set default_master_connection = 'm1';
--source include/wait_for_slave_to_start.inc
@@ -139,3 +139,4 @@ SET default_master_connection = "m2";
--source include/wait_for_slave_to_stop.inc
SET default_master_connection = "";
--source include/wait_for_slave_to_stop.inc
+RESET SLAVE ALL;
diff --git a/mysql-test/suite/multi_source/mdev-9544.result b/mysql-test/suite/multi_source/mdev-9544.result
index 42e6b6a9f56..452964fd862 100644
--- a/mysql-test/suite/multi_source/mdev-9544.result
+++ b/mysql-test/suite/multi_source/mdev-9544.result
@@ -24,9 +24,9 @@ insert into t1 values(1);
create table t2(a int);
insert into t2 values(1);
connection server_4;
-change master 'm1' to master_port=MYPORT_1 , master_host='127.0.0.1', master_user='root';
-change master 'm2' to master_port=MYPORT_2 , master_host='127.0.0.1', master_user='root';
-change master to master_port=MYPORT_3 , master_host='127.0.0.1', master_user='root';
+change master 'm1' to master_port=MYPORT_1 , master_host='127.0.0.1', master_user='root', master_use_gtid=no;
+change master 'm2' to master_port=MYPORT_2 , master_host='127.0.0.1', master_user='root', master_use_gtid=no;
+change master to master_port=MYPORT_3 , master_host='127.0.0.1', master_user='root', master_use_gtid=no;
start all slaves;
set default_master_connection = 'm1';
include/wait_for_slave_to_start.inc
@@ -88,3 +88,6 @@ SET default_master_connection = "m2";
include/wait_for_slave_to_stop.inc
SET default_master_connection = "";
include/wait_for_slave_to_stop.inc
+change master to master_use_gtid=slave_pos;
+change master 'm1' to master_use_gtid=slave_pos;
+change master 'm2' to master_use_gtid=slave_pos;
diff --git a/mysql-test/suite/multi_source/mdev-9544.test b/mysql-test/suite/multi_source/mdev-9544.test
index f532a63a585..fd89bdfa744 100644
--- a/mysql-test/suite/multi_source/mdev-9544.test
+++ b/mysql-test/suite/multi_source/mdev-9544.test
@@ -37,11 +37,11 @@ insert into t2 values(1);
--connection server_4
--disable_warnings
--replace_result $SERVER_MYPORT_1 MYPORT_1
-eval change master 'm1' to master_port=$SERVER_MYPORT_1 , master_host='127.0.0.1', master_user='root';
+eval change master 'm1' to master_port=$SERVER_MYPORT_1 , master_host='127.0.0.1', master_user='root', master_use_gtid=no;
--replace_result $SERVER_MYPORT_2 MYPORT_2
-eval change master 'm2' to master_port=$SERVER_MYPORT_2 , master_host='127.0.0.1', master_user='root';
+eval change master 'm2' to master_port=$SERVER_MYPORT_2 , master_host='127.0.0.1', master_user='root', master_use_gtid=no;
--replace_result $SERVER_MYPORT_3 MYPORT_3
-eval change master to master_port=$SERVER_MYPORT_3 , master_host='127.0.0.1', master_user='root';
+eval change master to master_port=$SERVER_MYPORT_3 , master_host='127.0.0.1', master_user='root', master_use_gtid=no;
start all slaves;
set default_master_connection = 'm1';
--source include/wait_for_slave_to_start.inc
@@ -114,3 +114,7 @@ SET default_master_connection = "m2";
SET default_master_connection = "";
--source include/wait_for_slave_to_stop.inc
+# Reset for check-testcase
+change master to master_use_gtid=slave_pos;
+change master 'm1' to master_use_gtid=slave_pos;
+change master 'm2' to master_use_gtid=slave_pos;
diff --git a/mysql-test/suite/multi_source/multi_source_slave_alias_replica.result b/mysql-test/suite/multi_source/multi_source_slave_alias_replica.result
index b1aa31d059a..25cd85d7018 100644
--- a/mysql-test/suite/multi_source/multi_source_slave_alias_replica.result
+++ b/mysql-test/suite/multi_source/multi_source_slave_alias_replica.result
@@ -64,7 +64,7 @@ Replicate_Ignore_Server_Ids
Master_Server_Id 1
Master_SSL_Crl
Master_SSL_Crlpath
-Using_Gtid No
+Using_Gtid Slave_Pos
Gtid_IO_Pos
Replicate_Do_Domain_Ids
Replicate_Ignore_Domain_Ids
@@ -125,7 +125,7 @@ Replicate_Ignore_Server_Ids
Master_Server_Id 2
Master_SSL_Crl
Master_SSL_Crlpath
-Using_Gtid No
+Using_Gtid Slave_Pos
Gtid_IO_Pos
Replicate_Do_Domain_Ids
Replicate_Ignore_Domain_Ids
diff --git a/mysql-test/suite/multi_source/multisource.result b/mysql-test/suite/multi_source/multisource.result
index ad1f2e24f9e..4b53b4653cd 100644
--- a/mysql-test/suite/multi_source/multisource.result
+++ b/mysql-test/suite/multi_source/multisource.result
@@ -99,7 +99,8 @@ set default_master_connection = '';
change master to
master_port=MYPORT_2,
master_host='127.0.0.1',
-master_user='root';
+master_user='root',
+master_use_gtid=no;
start slave;
include/wait_for_slave_to_start.inc
#
diff --git a/mysql-test/suite/multi_source/multisource_for_channel.result b/mysql-test/suite/multi_source/multisource_for_channel.result
index cb1224b416f..9b4efae09b5 100644
--- a/mysql-test/suite/multi_source/multisource_for_channel.result
+++ b/mysql-test/suite/multi_source/multisource_for_channel.result
@@ -7,7 +7,8 @@ ERROR HY000: Incorrect arguments to MASTER_HOST
change master to
master_port=MYPORT_1,
master_host='127.0.0.1',
-master_user='root'
+master_user='root',
+master_use_gtid=no
for channel 'master1';
start slave for channel 'master1';
set default_master_connection = 'master1';
@@ -102,7 +103,8 @@ set default_master_connection = '';
change master to
master_port=MYPORT_2,
master_host='127.0.0.1',
-master_user='root';
+master_user='root',
+master_use_gtid=no;
start slave;
include/wait_for_slave_to_start.inc
#
@@ -322,6 +324,8 @@ Last_SQL_Errno = '0'
# reset slave
#
RESET SLAVE for channel 'master1';
+Warnings:
+Note 4190 RESET SLAVE is implicitly changing the value of 'Using_Gtid' from 'No' to 'Slave_Pos'
show slave status for channel 'master1'
Master_Port = 'MYPORT_1'
diff --git a/mysql-test/suite/multi_source/multisource_for_channel.test b/mysql-test/suite/multi_source/multisource_for_channel.test
index a95b272d5b1..b3feb4b9da6 100644
--- a/mysql-test/suite/multi_source/multisource_for_channel.test
+++ b/mysql-test/suite/multi_source/multisource_for_channel.test
@@ -29,7 +29,8 @@ change master to master_host='' for channel 'abc2';
eval change master to
master_port=$SERVER_MYPORT_1,
master_host='127.0.0.1',
-master_user='root'
+master_user='root',
+master_use_gtid=no
for channel 'master1';
start slave for channel 'master1';
@@ -154,7 +155,8 @@ set default_master_connection = '';
eval change master to
master_port=$SERVER_MYPORT_2,
master_host='127.0.0.1',
-master_user='root';
+master_user='root',
+master_use_gtid=no;
start slave;
--source include/wait_for_slave_to_start.inc
diff --git a/mysql-test/suite/multi_source/reset_slave.result b/mysql-test/suite/multi_source/reset_slave.result
index c048784e28d..a55a6ec235f 100644
--- a/mysql-test/suite/multi_source/reset_slave.result
+++ b/mysql-test/suite/multi_source/reset_slave.result
@@ -14,14 +14,14 @@ connection slave;
stop slave 'master1';
show slave 'master1' status;
Slave_IO_State Master_Host Master_User Master_Port Connect_Retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno Last_Error Skip_Counter Exec_Master_Log_Pos Relay_Log_Space Until_Condition Until_Log_File Until_Log_Pos Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master Master_SSL_Verify_Server_Cert Last_IO_Errno Last_IO_Error Last_SQL_Errno Last_SQL_Error Replicate_Ignore_Server_Ids Master_Server_Id Master_SSL_Crl Master_SSL_Crlpath Using_Gtid Gtid_IO_Pos Replicate_Do_Domain_Ids Replicate_Ignore_Domain_Ids Parallel_Mode SQL_Delay SQL_Remaining_Delay Slave_SQL_Running_State Slave_DDL_Groups Slave_Non_Transactional_Groups Slave_Transactional_Groups
- 127.0.0.1 root MYPORT_1 60 master-bin.000001 <read_master_log_pos> mysqld-relay-bin-master1.000002 <relay_log_pos> master-bin.000001 No No 0 0 <read_master_log_pos> <relay_log_space> None 0 No NULL No 0 0 1 No optimistic 0 NULL 2 1 0
+ 127.0.0.1 root MYPORT_1 60 master-bin.000001 <read_master_log_pos> mysqld-relay-bin-master1.000002 <relay_log_pos> master-bin.000001 No No 0 0 <read_master_log_pos> <relay_log_space> None 0 No NULL No 0 0 1 Slave_Pos 0-1-3 optimistic 0 NULL 2 1 0
mysqld-relay-bin-master1.000001
mysqld-relay-bin-master1.000002
mysqld-relay-bin-master1.index
reset slave 'master1';
show slave 'master1' status;
Slave_IO_State Master_Host Master_User Master_Port Connect_Retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno Last_Error Skip_Counter Exec_Master_Log_Pos Relay_Log_Space Until_Condition Until_Log_File Until_Log_Pos Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master Master_SSL_Verify_Server_Cert Last_IO_Errno Last_IO_Error Last_SQL_Errno Last_SQL_Error Replicate_Ignore_Server_Ids Master_Server_Id Master_SSL_Crl Master_SSL_Crlpath Using_Gtid Gtid_IO_Pos Replicate_Do_Domain_Ids Replicate_Ignore_Domain_Ids Parallel_Mode SQL_Delay SQL_Remaining_Delay Slave_SQL_Running_State Slave_DDL_Groups Slave_Non_Transactional_Groups Slave_Transactional_Groups
- 127.0.0.1 root MYPORT_1 60 4 <relay_log_pos> No No 0 0 0 <relay_log_space> None 0 No NULL No 0 0 1 No optimistic 0 NULL 2 1 0
+ 127.0.0.1 root MYPORT_1 60 4 <relay_log_pos> No No 0 0 0 <relay_log_space> None 0 No NULL No 0 0 1 Slave_Pos optimistic 0 NULL 2 1 0
reset slave 'master1' all;
show slave 'master1' status;
ERROR HY000: There is no master connection 'master1'
diff --git a/mysql-test/suite/multi_source/simple.result b/mysql-test/suite/multi_source/simple.result
index 191cd0a1a0f..5a167907b3b 100644
--- a/mysql-test/suite/multi_source/simple.result
+++ b/mysql-test/suite/multi_source/simple.result
@@ -62,7 +62,7 @@ Replicate_Ignore_Server_Ids
Master_Server_Id 1
Master_SSL_Crl
Master_SSL_Crlpath
-Using_Gtid No
+Using_Gtid Slave_Pos
Gtid_IO_Pos
Replicate_Do_Domain_Ids
Replicate_Ignore_Domain_Ids
@@ -123,7 +123,7 @@ Replicate_Ignore_Server_Ids
Master_Server_Id 2
Master_SSL_Crl
Master_SSL_Crlpath
-Using_Gtid No
+Using_Gtid Slave_Pos
Gtid_IO_Pos
Replicate_Do_Domain_Ids
Replicate_Ignore_Domain_Ids
@@ -148,7 +148,7 @@ CHANNEL_NAME slave2
HOST 127.0.0.1
PORT #
USER root
-USING_GTID NO
+USING_GTID SLAVE_POS
SSL_ALLOWED NO
SSL_CA_FILE
SSL_CA_PATH
@@ -168,7 +168,7 @@ CHANNEL_NAME slave1
HOST 127.0.0.1
PORT #
USER root
-USING_GTID NO
+USING_GTID SLAVE_POS
SSL_ALLOWED NO
SSL_CA_FILE
SSL_CA_PATH
@@ -249,7 +249,7 @@ Replicate_Ignore_Server_Ids
Master_Server_Id 1
Master_SSL_Crl
Master_SSL_Crlpath
-Using_Gtid No
+Using_Gtid Slave_Pos
Gtid_IO_Pos
Replicate_Do_Domain_Ids
Replicate_Ignore_Domain_Ids
@@ -306,7 +306,7 @@ Replicate_Ignore_Server_Ids
Master_Server_Id 1
Master_SSL_Crl
Master_SSL_Crlpath
-Using_Gtid No
+Using_Gtid Slave_Pos
Gtid_IO_Pos
Replicate_Do_Domain_Ids
Replicate_Ignore_Domain_Ids
@@ -367,7 +367,7 @@ Replicate_Ignore_Server_Ids
Master_Server_Id 2
Master_SSL_Crl
Master_SSL_Crlpath
-Using_Gtid No
+Using_Gtid Slave_Pos
Gtid_IO_Pos
Replicate_Do_Domain_Ids
Replicate_Ignore_Domain_Ids
@@ -430,7 +430,7 @@ Replicate_Ignore_Server_Ids
Master_Server_Id 2
Master_SSL_Crl
Master_SSL_Crlpath
-Using_Gtid No
+Using_Gtid Slave_Pos
Gtid_IO_Pos
Replicate_Do_Domain_Ids
Replicate_Ignore_Domain_Ids
@@ -495,7 +495,7 @@ Replicate_Ignore_Server_Ids
Master_Server_Id 2
Master_SSL_Crl
Master_SSL_Crlpath
-Using_Gtid No
+Using_Gtid Slave_Pos
Gtid_IO_Pos
Replicate_Do_Domain_Ids
Replicate_Ignore_Domain_Ids
diff --git a/mysql-test/suite/multi_source/skip_counter.result b/mysql-test/suite/multi_source/skip_counter.result
index 03103af21b9..4573d54ca38 100644
--- a/mysql-test/suite/multi_source/skip_counter.result
+++ b/mysql-test/suite/multi_source/skip_counter.result
@@ -12,7 +12,8 @@ connect slave,127.0.0.1,root,,,$SERVER_MYPORT_3;
change master 'master1' to
master_port=MYPORT_1,
master_host='127.0.0.1',
-master_user='root';
+master_user='root',
+master_use_gtid=no;
start slave 'master1';
set default_master_connection = 'master1';
include/wait_for_slave_to_start.inc
@@ -20,7 +21,8 @@ set default_master_connection = 'master2';
change master 'master2' to
master_port=MYPORT_2,
master_host='127.0.0.1',
-master_user='root';
+master_user='root',
+master_use_gtid=no;
set global sql_slave_skip_counter = 2;
select @@global.sql_slave_skip_counter;
@@global.sql_slave_skip_counter
diff --git a/mysql-test/suite/multi_source/skip_counter.test b/mysql-test/suite/multi_source/skip_counter.test
index e53d0276a91..e89480f55c5 100644
--- a/mysql-test/suite/multi_source/skip_counter.test
+++ b/mysql-test/suite/multi_source/skip_counter.test
@@ -38,7 +38,8 @@ create table db.t3 (i int) engine=MyISAM;
eval change master 'master1' to
master_port=$SERVER_MYPORT_1,
master_host='127.0.0.1',
-master_user='root';
+master_user='root',
+master_use_gtid=no;
start slave 'master1';
set default_master_connection = 'master1';
@@ -53,7 +54,8 @@ set default_master_connection = 'master2';
eval change master 'master2' to
master_port=$SERVER_MYPORT_2,
master_host='127.0.0.1',
-master_user='root';
+master_user='root',
+master_use_gtid=no;
# the schema creation will be replicated from the 1st master,
# so we want to skip it in the second replication connection
diff --git a/mysql-test/suite/parts/r/rpl_partition.result b/mysql-test/suite/parts/r/rpl_partition.result
index 0ec36a2c72a..6378e0ef834 100644
--- a/mysql-test/suite/parts/r/rpl_partition.result
+++ b/mysql-test/suite/parts/r/rpl_partition.result
@@ -128,7 +128,7 @@ show create table t3;
Table t3
Create Table CREATE TABLE `t3` (
`id` mediumint(9) NOT NULL AUTO_INCREMENT,
- `dt` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `dt` timestamp NULL DEFAULT NULL,
`user` char(255) DEFAULT NULL,
`uuidf` longblob DEFAULT NULL,
`fkid` mediumint(9) DEFAULT NULL,
diff --git a/mysql-test/suite/perfschema/r/digest_view.result b/mysql-test/suite/perfschema/r/digest_view.result
index 2981dfca6a3..9b9f31dcde9 100644
--- a/mysql-test/suite/perfschema/r/digest_view.result
+++ b/mysql-test/suite/perfschema/r/digest_view.result
@@ -191,17 +191,17 @@ SELECT SCHEMA_NAME, DIGEST, DIGEST_TEXT, COUNT_STAR
FROM performance_schema.events_statements_summary_by_digest
ORDER BY DIGEST_TEXT;
SCHEMA_NAME DIGEST DIGEST_TEXT COUNT_STAR
-test e0c034ab2f0273695ef8b19babc4bd32 EXPLAIN SELECT * FROM `test` . `v1` 1
-test 751b8637d21a37ff572c84fdf1574e51 EXPLAIN SELECT * FROM `test` . `v1` WHERE `a` = ? 1
-test 93ceaf1395bcc52bfc3ec4d6ec817616 EXPLAIN SELECT * FROM `test` . `v1` WHERE `b` > ? 1
-test 51a9abceb7c8cebe749a4a07f7f40169 EXPLAIN SELECT `a` , `b` FROM `test` . `v1` 1
-test 8df4eaa7c85bdd4fffa6920137c3072a EXPLAIN SELECT `b` , `a` FROM `test` . `v1` 1
-test 7ada999dc73fa2ec7f721e5c8e124e7f SELECT * FROM `test` . `v1` 1
-test 1efd67df2b28ac47a49938d56094c8c4 SELECT * FROM `test` . `v1` WHERE `a` = ? 1
-test 9107a99dc94a65bd4d1c92756c2b60a6 SELECT * FROM `test` . `v1` WHERE `b` > ? 1
-test c25e5077415cf620b64c739153ce015b SELECT `a` , `b` FROM `test` . `v1` 1
-test 9b06d26cce3a78277e5d3b7abbfa7f3e SELECT `b` , `a` FROM `test` . `v1` 1
-test e7f13e133e0bda19894df88606c37ec3 TRUNCATE TABLE `performance_schema` . `events_statements_summary_by_digest` 1
+test 78b80220002834f612d11b0663f64d59 EXPLAIN SELECT * FROM `test` . `v1` 1
+test 9649c572f7c7b927e314d31620294e34 EXPLAIN SELECT * FROM `test` . `v1` WHERE `a` = ? 1
+test 304c0393779f7b183065e7b577f1be26 EXPLAIN SELECT * FROM `test` . `v1` WHERE `b` > ? 1
+test 6e400ce1796d40cfefa45333d6e5895c EXPLAIN SELECT `a` , `b` FROM `test` . `v1` 1
+test 36c8726233a5c621742d35107d72e5e0 EXPLAIN SELECT `b` , `a` FROM `test` . `v1` 1
+test 0aeb23572eed79a9e05cafe0e9cd1909 SELECT * FROM `test` . `v1` 1
+test 28bd92caf5c189316fab14a67b622203 SELECT * FROM `test` . `v1` WHERE `a` = ? 1
+test 637dba52704594bc4275ba3f37b8f851 SELECT * FROM `test` . `v1` WHERE `b` > ? 1
+test fd8e83e523b0eec97a94eef612154591 SELECT `a` , `b` FROM `test` . `v1` 1
+test c58ed156113959965ebf619b6dd3a8b2 SELECT `b` , `a` FROM `test` . `v1` 1
+test 4d9d22440ce86533e3fac764ab259bbd TRUNCATE TABLE `performance_schema` . `events_statements_summary_by_digest` 1
DROP TABLE test.v1;
CREATE VIEW test.v1 AS SELECT * FROM test.t1;
EXPLAIN SELECT * from test.v1;
@@ -248,19 +248,19 @@ SELECT SCHEMA_NAME, DIGEST, DIGEST_TEXT, COUNT_STAR
FROM performance_schema.events_statements_summary_by_digest
ORDER BY DIGEST_TEXT;
SCHEMA_NAME DIGEST DIGEST_TEXT COUNT_STAR
-test f584090c72167285107217a72a0b3060 CREATE VIEW `test` . `v1` AS SELECT * FROM `test` . `t1` 1
-test 67a106b8a88c2880c3455f1c7fa0a4aa DROP TABLE `test` . `v1` 1
-test e0c034ab2f0273695ef8b19babc4bd32 EXPLAIN SELECT * FROM `test` . `v1` 2
-test 751b8637d21a37ff572c84fdf1574e51 EXPLAIN SELECT * FROM `test` . `v1` WHERE `a` = ? 2
-test 93ceaf1395bcc52bfc3ec4d6ec817616 EXPLAIN SELECT * FROM `test` . `v1` WHERE `b` > ? 2
-test 51a9abceb7c8cebe749a4a07f7f40169 EXPLAIN SELECT `a` , `b` FROM `test` . `v1` 2
-test 8df4eaa7c85bdd4fffa6920137c3072a EXPLAIN SELECT `b` , `a` FROM `test` . `v1` 2
-test 7ada999dc73fa2ec7f721e5c8e124e7f SELECT * FROM `test` . `v1` 2
-test 1efd67df2b28ac47a49938d56094c8c4 SELECT * FROM `test` . `v1` WHERE `a` = ? 2
-test 9107a99dc94a65bd4d1c92756c2b60a6 SELECT * FROM `test` . `v1` WHERE `b` > ? 2
-test 375cc5223952495534c4034549d813e2 SELECT SCHEMA_NAME , `DIGEST` , `DIGEST_TEXT` , `COUNT_STAR` FROM `performance_schema` . `events_statements_summary_by_digest` ORDER BY `DIGEST_TEXT` 1
-test c25e5077415cf620b64c739153ce015b SELECT `a` , `b` FROM `test` . `v1` 2
-test 9b06d26cce3a78277e5d3b7abbfa7f3e SELECT `b` , `a` FROM `test` . `v1` 2
-test e7f13e133e0bda19894df88606c37ec3 TRUNCATE TABLE `performance_schema` . `events_statements_summary_by_digest` 1
+test 4ccb56972e9c19941d4928d31502e796 CREATE VIEW `test` . `v1` AS SELECT * FROM `test` . `t1` 1
+test a087be31e6440102676ef0171b8b2734 DROP TABLE `test` . `v1` 1
+test 78b80220002834f612d11b0663f64d59 EXPLAIN SELECT * FROM `test` . `v1` 2
+test 9649c572f7c7b927e314d31620294e34 EXPLAIN SELECT * FROM `test` . `v1` WHERE `a` = ? 2
+test 304c0393779f7b183065e7b577f1be26 EXPLAIN SELECT * FROM `test` . `v1` WHERE `b` > ? 2
+test 6e400ce1796d40cfefa45333d6e5895c EXPLAIN SELECT `a` , `b` FROM `test` . `v1` 2
+test 36c8726233a5c621742d35107d72e5e0 EXPLAIN SELECT `b` , `a` FROM `test` . `v1` 2
+test 0aeb23572eed79a9e05cafe0e9cd1909 SELECT * FROM `test` . `v1` 2
+test 28bd92caf5c189316fab14a67b622203 SELECT * FROM `test` . `v1` WHERE `a` = ? 2
+test 637dba52704594bc4275ba3f37b8f851 SELECT * FROM `test` . `v1` WHERE `b` > ? 2
+test 765bf27a2d45249dcc6377bcc02e1c4b SELECT SCHEMA_NAME , `DIGEST` , `DIGEST_TEXT` , `COUNT_STAR` FROM `performance_schema` . `events_statements_summary_by_digest` ORDER BY `DIGEST_TEXT` 1
+test fd8e83e523b0eec97a94eef612154591 SELECT `a` , `b` FROM `test` . `v1` 2
+test c58ed156113959965ebf619b6dd3a8b2 SELECT `b` , `a` FROM `test` . `v1` 2
+test 4d9d22440ce86533e3fac764ab259bbd TRUNCATE TABLE `performance_schema` . `events_statements_summary_by_digest` 1
DROP VIEW test.v1;
DROP TABLE test.t1;
diff --git a/mysql-test/suite/perfschema/r/start_server_low_digest_sql_length.result b/mysql-test/suite/perfschema/r/start_server_low_digest_sql_length.result
index 739a652c66a..8772d7bf003 100644
--- a/mysql-test/suite/perfschema/r/start_server_low_digest_sql_length.result
+++ b/mysql-test/suite/perfschema/r/start_server_low_digest_sql_length.result
@@ -8,5 +8,5 @@ SELECT 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1
####################################
SELECT event_name, digest, digest_text, sql_text FROM events_statements_history_long;
event_name digest digest_text sql_text
-statement/sql/select dfe1e2b52a48f7294a6385d229770021 SELECT ? + ? + SELECT ...
-statement/sql/truncate f1b70d4cf1464d22965f02ab6d6b511b TRUNCATE TABLE truncat...
+statement/sql/select be5dd6a08f2e34c86168c154f61cbf8c SELECT ? + ? + SELECT ...
+statement/sql/truncate e2b84d4b47baf073fa24b65f724e9431 TRUNCATE TABLE truncat...
diff --git a/mysql-test/suite/perfschema/t/show_sanity.test b/mysql-test/suite/perfschema/t/show_sanity.test
index 171bbfa8bd6..3ca88b556f8 100644
--- a/mysql-test/suite/perfschema/t/show_sanity.test
+++ b/mysql-test/suite/perfschema/t/show_sanity.test
@@ -496,7 +496,6 @@ insert into test.sanity values
("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_UNDO_LOG_TRUNCATE"),
("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_UNDO_TABLESPACES"),
("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_USE_NATIVE_AIO"),
- ("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_VERSION"),
("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INNODB_WRITE_IO_THREADS"),
("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "INTERNAL_TMP_DISK_STORAGE_ENGINE"),
("JUNK: GLOBAL-ONLY", "I_S.SESSION_VARIABLES", "KEY_BUFFER_SIZE"),
diff --git a/mysql-test/suite/period/r/create.result b/mysql-test/suite/period/r/create.result
index e5fa2d1797d..ad9985d792e 100644
--- a/mysql-test/suite/period/r/create.result
+++ b/mysql-test/suite/period/r/create.result
@@ -16,8 +16,8 @@ show create table t;
Table Create Table
t CREATE TABLE `t` (
`id` int(11) NOT NULL,
- `s` timestamp(6) NOT NULL DEFAULT '0000-00-00 00:00:00.000000',
- `e` timestamp(6) NOT NULL DEFAULT '0000-00-00 00:00:00.000000',
+ `s` timestamp(6) NOT NULL,
+ `e` timestamp(6) NOT NULL,
PERIOD FOR `mytime` (`s`, `e`),
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
diff --git a/mysql-test/suite/plugins/r/test_sql_service.result b/mysql-test/suite/plugins/r/test_sql_service.result
index e5f09b67b6b..2983da28cc9 100644
--- a/mysql-test/suite/plugins/r/test_sql_service.result
+++ b/mysql-test/suite/plugins/r/test_sql_service.result
@@ -67,7 +67,7 @@ set global test_sql_service_execute_sql_global= 'drop table test.t1';
show status like 'test_sql_query_result';
Variable_name Value
Test_sql_query_result Error 1051 returned. Unknown table 'test.t1'
-create table t1 (id int, time timestamp);
+create table t1 (id int, time timestamp not null default now());
insert into t1 values (1, NULL), (2, NULL), (3, NULL), (4, NULL), (5, NULL);
set global test_sql_service_execute_sql_global= 'select * FROM test.t1 WHERE time < DATE_SUB(NOW(), interval 5 minute)';
show status like 'test_sql_query_result';
diff --git a/mysql-test/suite/plugins/t/test_sql_service.test b/mysql-test/suite/plugins/t/test_sql_service.test
index 0a45cb663f4..2f53c1d5b3e 100644
--- a/mysql-test/suite/plugins/t/test_sql_service.test
+++ b/mysql-test/suite/plugins/t/test_sql_service.test
@@ -61,7 +61,7 @@ show status like 'test_sql_query_result';
set global test_sql_service_execute_sql_global= 'drop table test.t1';
show status like 'test_sql_query_result';
-create table t1 (id int, time timestamp);
+create table t1 (id int, time timestamp not null default now());
insert into t1 values (1, NULL), (2, NULL), (3, NULL), (4, NULL), (5, NULL);
set global test_sql_service_execute_sql_global= 'select * FROM test.t1 WHERE time < DATE_SUB(NOW(), interval 5 minute)';
show status like 'test_sql_query_result';
diff --git a/mysql-test/suite/rpl/include/multisource.inc b/mysql-test/suite/rpl/include/multisource.inc
index 7a2d9ea79b2..96c4a9aa348 100644
--- a/mysql-test/suite/rpl/include/multisource.inc
+++ b/mysql-test/suite/rpl/include/multisource.inc
@@ -159,7 +159,8 @@ set default_master_connection = '';
eval change master to
master_port=$SERVER_MYPORT_2,
master_host='127.0.0.1',
-master_user='root';
+master_user='root',
+master_use_gtid=no;
start slave;
--source include/wait_for_slave_to_start.inc
diff --git a/mysql-test/suite/rpl/include/rpl_binlog_max_cache_size.test b/mysql-test/suite/rpl/include/rpl_binlog_max_cache_size.test
index d750554b4ec..2634a6027a3 100644
--- a/mysql-test/suite/rpl/include/rpl_binlog_max_cache_size.test
+++ b/mysql-test/suite/rpl/include/rpl_binlog_max_cache_size.test
@@ -21,6 +21,13 @@
# and slave are diverging.
#
########################################################################################
+
+--connection slave
+--source include/stop_slave.inc
+CHANGE MASTER TO MASTER_USE_GTID=NO;
+--source include/start_slave.inc
+--connection master
+
call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT");
call mtr.add_suppression("Write to binary log failed: Multi-row statements required more than .max_binlog_stmt_cache_size");
call mtr.add_suppression("Write to binary log failed: Multi-statement transaction required more than .max_binlog_cache_size");
diff --git a/mysql-test/suite/rpl/include/rpl_change_master_demote.inc b/mysql-test/suite/rpl/include/rpl_change_master_demote.inc
new file mode 100644
index 00000000000..4c563454a5b
--- /dev/null
+++ b/mysql-test/suite/rpl/include/rpl_change_master_demote.inc
@@ -0,0 +1,89 @@
+#
+# This file tests that a master can be demoted to a slave using
+# CHANGE MASTER TO MASTER_DEMOTE_TO_SLAVE=1 and replication will work correctly
+# afterwards.
+#
+# param $ignore_domain_ids : List of GTID domain ids to use for
+# CHANGE MASTER TO IGNORE_DOMAIN_IDS
+#
+
+--let $include_filename= rpl_change_master_demote.inc
+--source include/begin_include_file.inc
+
+--echo ##############################################
+--echo # Connection semantics change:
+--echo # * True primary is now connection 'slave'
+--echo # * True replica is now connection 'master'
+--echo ##############################################
+
+--connection master
+SELECT VARIABLE_NAME, GLOBAL_VALUE FROM INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE VARIABLE_NAME LIKE 'gtid_binlog_pos' OR VARIABLE_NAME LIKE 'gtid_slave_pos' OR VARIABLE_NAME LIKE 'gtid_current_pos' ORDER BY VARIABLE_NAME ASC;
+
+--let $extra_cm_args=
+if (`SELECT strcmp("$ignore_domain_ids","") != 0`)
+{
+ --let $extra_cm_args=, ignore_domain_ids=($ignore_domain_ids)
+}
+
+--echo # First ensure gtid_slave_pos after master_demote_to_slave matches
+--echo # gtid_current_pos calculation
+--let $current_pos= `SELECT @@gtid_current_pos`
+--replace_result $SLAVE_MYPORT SLAVE_PORT
+--eval CHANGE MASTER TO master_host='127.0.0.1', master_port=$SLAVE_MYPORT, master_user='root', master_use_gtid=slave_pos, master_demote_to_slave=1 $extra_cm_args
+SELECT VARIABLE_NAME, GLOBAL_VALUE FROM INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE VARIABLE_NAME LIKE 'gtid_binlog_pos' OR VARIABLE_NAME LIKE 'gtid_slave_pos' OR VARIABLE_NAME LIKE 'gtid_current_pos' ORDER BY VARIABLE_NAME ASC;
+--let $slave_pos= `SELECT @@gtid_slave_pos`
+--echo # Validating gtid_slave_pos == gtid_binlog_pos..
+if ($slave_pos != $current_pos)
+{
+ SELECT VARIABLE_NAME, GLOBAL_VALUE FROM INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE VARIABLE_NAME LIKE 'gtid_binlog_pos' OR VARIABLE_NAME LIKE 'gtid_slave_pos' OR VARIABLE_NAME LIKE 'gtid_current_pos' ORDER BY VARIABLE_NAME ASC;
+ die gtid_slave_pos calculation after master_demote_to_slave=1 differs from gtid_current_pos;
+}
+--echo # ..success
+
+--source include/start_slave.inc
+
+--connection slave
+--source include/stop_slave.inc
+
+--echo # Ensuring replication works correctly after role swap
+--connection slave
+set session gtid_domain_id= 0;
+CREATE TABLE repl_t (a int);
+INSERT INTO repl_t VALUES (1);
+--source include/save_master_gtid.inc
+
+--connection master
+--source include/sync_with_master_gtid.inc
+--echo # Validating that replication works..
+--let $n_replicated_rows= query_get_value(SELECT COUNT(*) FROM repl_t, COUNT(*), 1)
+if ($n_replicated_rows != 1)
+{
+ die "Replication is broken";
+}
+--echo # ..success
+
+--echo # Cleaning up replication check data
+--connection slave
+DROP TABLE repl_t;
+--source include/save_master_gtid.inc
+
+--connection master
+--source include/sync_with_master_gtid.inc
+SELECT VARIABLE_NAME, GLOBAL_VALUE FROM INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE VARIABLE_NAME LIKE 'gtid_binlog_pos' OR VARIABLE_NAME LIKE 'gtid_slave_pos' OR VARIABLE_NAME LIKE 'gtid_current_pos' ORDER BY VARIABLE_NAME ASC;
+
+--echo ##############################################
+--echo # Connection semantics change:
+--echo # * True primary is back to connection 'master'
+--echo # * True replica is back to connection 'slave'
+--echo ##############################################
+
+--connection master
+--source include/stop_slave.inc
+
+--connection slave
+--replace_result $MASTER_MYPORT MASTER_PORT
+--eval CHANGE MASTER TO master_host='127.0.0.1', master_port=$MASTER_MYPORT, master_user='root', master_use_gtid=slave_pos, master_demote_to_slave=1
+--source include/start_slave.inc
+
+--let $include_filename= rpl_change_master_demote.inc
+--source include/end_include_file.inc
diff --git a/mysql-test/suite/rpl/include/rpl_deadlock.test b/mysql-test/suite/rpl/include/rpl_deadlock.test
index 53002d255f3..7fcf5cbd22c 100644
--- a/mysql-test/suite/rpl/include/rpl_deadlock.test
+++ b/mysql-test/suite/rpl/include/rpl_deadlock.test
@@ -88,7 +88,7 @@ connection slave;
DELETE FROM t2;
# Set slave position to the BEGIN log event
--replace_result $master_pos_begin <master_pos_begin>
-eval CHANGE MASTER TO MASTER_LOG_POS=$master_pos_begin;
+eval CHANGE MASTER TO MASTER_LOG_POS=$master_pos_begin, MASTER_USE_GTID=NO;
BEGIN;
# Hold lock
SELECT * FROM t1 FOR UPDATE;
@@ -121,7 +121,7 @@ SET global max_relay_log_size=0;
DELETE FROM t2;
# Set slave position to the BEGIN log event
--replace_result $master_pos_begin <master_pos_begin>
-eval CHANGE MASTER TO MASTER_LOG_POS=$master_pos_begin;
+eval CHANGE MASTER TO MASTER_LOG_POS=$master_pos_begin, MASTER_USE_GTID=NO;
BEGIN;
# Hold lock
SELECT * FROM t1 FOR UPDATE;
diff --git a/mysql-test/suite/rpl/include/rpl_extra_col_master.test b/mysql-test/suite/rpl/include/rpl_extra_col_master.test
index 0d397b7e3ba..a7abe69db0a 100644
--- a/mysql-test/suite/rpl/include/rpl_extra_col_master.test
+++ b/mysql-test/suite/rpl/include/rpl_extra_col_master.test
@@ -450,7 +450,7 @@ connection master;
--echo ** Stop and Reset Slave **
--echo
STOP SLAVE;
-RESET SLAVE;
+--source include/reset_slave.inc
--echo
--echo ** create table slave side **
eval CREATE TABLE t10 (a INT PRIMARY KEY, b BLOB, c CHAR(5)
@@ -507,7 +507,7 @@ sync_slave_with_master;
--echo
--echo *** Create t11 on slave ***
STOP SLAVE;
-RESET SLAVE;
+--source include/reset_slave.inc
eval CREATE TABLE t11 (a INT PRIMARY KEY, b BLOB, c VARCHAR(254)
) ENGINE=$engine_type;
@@ -563,7 +563,7 @@ sync_slave_with_master;
--echo
--echo *** Create t12 on slave ***
STOP SLAVE;
-RESET SLAVE;
+--source include/reset_slave.inc
eval CREATE TABLE t12 (a INT PRIMARY KEY, b BLOB, c BLOB
) ENGINE=$engine_type;
@@ -614,7 +614,7 @@ sync_slave_with_master;
--echo
--echo *** Create t14 on slave ***
STOP SLAVE;
-RESET SLAVE;
+--source include/reset_slave.inc
eval CREATE TABLE t14 (c1 INT PRIMARY KEY, c4 BLOB, c5 CHAR(5)
) ENGINE=$engine_type;
@@ -689,7 +689,7 @@ connection slave;
#***************************
STOP SLAVE;
-RESET SLAVE;
+--source include/reset_slave.inc
--echo
--echo *** Drop t14 ***
@@ -711,7 +711,7 @@ START SLAVE;
--echo
--echo *** Create t15 on slave ***
STOP SLAVE;
-RESET SLAVE;
+--source include/reset_slave.inc
eval CREATE TABLE t15 (c1 INT PRIMARY KEY, c4 BLOB, c5 CHAR(5)
) ENGINE=$engine_type;
@@ -753,7 +753,7 @@ connection slave;
--let $show_slave_sql_error= 1
--source include/wait_for_slave_sql_error.inc
STOP SLAVE;
-RESET SLAVE;
+--source include/reset_slave.inc
--echo
--echo *** Drop t15 ***
@@ -775,7 +775,7 @@ START SLAVE;
--echo
--echo *** Create t16 on slave ***
STOP SLAVE;
-RESET SLAVE;
+--source include/reset_slave.inc
eval CREATE TABLE t16 (c1 INT PRIMARY KEY, c4 BLOB, c5 CHAR(5)
) ENGINE=$engine_type;
@@ -830,7 +830,7 @@ connection slave;
--let $show_slave_sql_error= 1
--source include/wait_for_slave_sql_error.inc
STOP SLAVE;
-RESET SLAVE;
+--source include/reset_slave.inc
--echo
--echo *** Drop t16 ***
@@ -853,7 +853,7 @@ START SLAVE;
--echo
--echo *** Create t17 on slave ***
STOP SLAVE;
-RESET SLAVE;
+--source include/reset_slave.inc
eval CREATE TABLE t17 (c1 INT PRIMARY KEY, c4 BLOB, c5 CHAR(5)
) ENGINE=$engine_type;
@@ -919,7 +919,7 @@ sync_slave_with_master;
--echo
STOP SLAVE;
-RESET SLAVE;
+--source include/reset_slave.inc
eval CREATE TABLE t18 (c1 INT PRIMARY KEY, c4 BLOB, c5 CHAR(5)
) ENGINE=$engine_type;
@@ -982,7 +982,7 @@ sync_slave_with_master;
--echo
--echo *** Create t5 on slave ***
STOP SLAVE;
-RESET SLAVE;
+--source include/reset_slave.inc
eval CREATE TABLE t5 (c1 INT PRIMARY KEY, c4 BLOB, c5 CHAR(5)
) ENGINE=$engine_type;
diff --git a/mysql-test/suite/rpl/include/rpl_extra_col_slave.test b/mysql-test/suite/rpl/include/rpl_extra_col_slave.test
index a58fa85a72d..680d5724bea 100644
--- a/mysql-test/suite/rpl/include/rpl_extra_col_slave.test
+++ b/mysql-test/suite/rpl/include/rpl_extra_col_slave.test
@@ -25,7 +25,7 @@ call mtr.add_suppression("Slave SQL.*Column [0-9] of table .test.t[0-9]*. cannot
sync_slave_with_master;
STOP SLAVE;
-RESET SLAVE;
+--source include/reset_slave.inc
SET @saved_slave_type_conversions = @@slave_type_conversions;
SET GLOBAL SLAVE_TYPE_CONVERSIONS = 'ALL_NON_LOSSY';
@@ -71,7 +71,7 @@ sync_slave_with_master;
## BUG22086
--echo *** Create t2 on slave ***
STOP SLAVE;
-RESET SLAVE;
+--source include/reset_slave.inc
eval CREATE TABLE t2 (a INT, b INT PRIMARY KEY, c CHAR(5),
d FLOAT DEFAULT '2.00',
e CHAR(5) DEFAULT 'TEST2')
@@ -96,7 +96,7 @@ START SLAVE;
--let $show_slave_sql_error= 1
--source include/wait_for_slave_sql_error.inc
STOP SLAVE;
-RESET SLAVE;
+--source include/reset_slave.inc
SELECT * FROM t2 ORDER BY a;
connection master;
@@ -116,7 +116,7 @@ sync_slave_with_master;
####################################
--echo *** Create t3 on slave ***
STOP SLAVE;
-RESET SLAVE;
+--source include/reset_slave.inc
eval CREATE TABLE t3 (a INT, b INT PRIMARY KEY, c CHAR(20),
d FLOAT DEFAULT '2.00',
e CHAR(5) DEFAULT 'TEST2')
@@ -161,7 +161,7 @@ sync_slave_with_master;
--echo *** Create t4 on slave ***
STOP SLAVE;
-RESET SLAVE;
+--source include/reset_slave.inc
eval CREATE TABLE t4 (a INT, b INT PRIMARY KEY, c CHAR(20),
d FLOAT DEFAULT '2.00',
e CHAR(5) DEFAULT 'TEST2')
@@ -204,7 +204,7 @@ sync_slave_with_master;
--echo *** Create t5 on slave ***
STOP SLAVE;
-RESET SLAVE;
+--source include/reset_slave.inc
eval CREATE TABLE t5 (a INT PRIMARY KEY, b CHAR(5),
c FLOAT, d INT, e DOUBLE,
f DECIMAL(8,2))ENGINE=$engine_type;
@@ -249,7 +249,7 @@ sync_slave_with_master;
--echo *** Create t6 on slave ***
STOP SLAVE;
-RESET SLAVE;
+--source include/reset_slave.inc
eval CREATE TABLE t6 (a INT PRIMARY KEY, b CHAR(5),
c FLOAT, d INT)ENGINE=$engine_type;
@@ -307,7 +307,7 @@ DROP TABLE t6;
--echo *** Create t7 on slave ***
STOP SLAVE;
-RESET SLAVE;
+--source include/reset_slave.inc
eval CREATE TABLE t7 (a INT KEY, b BLOB, c CHAR(5),
d TIMESTAMP NULL DEFAULT '0000-00-00 00:00:00',
e CHAR(20) DEFAULT 'Extra Column Testing')
@@ -349,7 +349,7 @@ sync_slave_with_master;
###########################################
--echo *** Create t8 on slave ***
STOP SLAVE;
-RESET SLAVE;
+--source include/reset_slave.inc
eval CREATE TABLE t8 (a INT KEY, b BLOB, c CHAR(5),
d TIMESTAMP NULL DEFAULT '0000-00-00 00:00:00',
e INT)ENGINE=$engine_type;
@@ -395,7 +395,7 @@ sync_slave_with_master;
# Error reaction is up to sql_mode of the slave sql (bug#38173)
#--echo *** Create t9 on slave ***
STOP SLAVE;
- RESET SLAVE;
+ --source include/reset_slave.inc
eval CREATE TABLE t9 (a INT KEY, b BLOB, c CHAR(5),
d TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP,
@@ -449,7 +449,7 @@ sync_slave_with_master;
############################################
--echo *** Create t10 on slave ***
STOP SLAVE;
-RESET SLAVE;
+--source include/reset_slave.inc
eval CREATE TABLE t10 (a INT KEY, b BLOB, f DOUBLE DEFAULT '233',
c CHAR(5), e INT DEFAULT '1')ENGINE=$engine_type;
@@ -491,7 +491,7 @@ sync_slave_with_master;
############################################
--echo *** Create t11 on slave ***
STOP SLAVE;
-RESET SLAVE;
+--source include/reset_slave.inc
eval CREATE TABLE t11 (a INT KEY, b BLOB, f INT,
c CHAR(5) DEFAULT 'test', e INT DEFAULT '1')ENGINE=$engine_type;
@@ -533,7 +533,7 @@ sync_slave_with_master;
############################################
--echo *** Create t12 on slave ***
STOP SLAVE;
-RESET SLAVE;
+--source include/reset_slave.inc
eval CREATE TABLE t12 (a INT KEY, b BLOB, f TEXT,
c CHAR(5) DEFAULT 'test', e INT DEFAULT '1')ENGINE=$engine_type;
@@ -572,7 +572,7 @@ sync_slave_with_master;
--echo *** BUG 22177 Start ***
--echo *** Create t13 on slave ***
STOP SLAVE;
-RESET SLAVE;
+--source include/reset_slave.inc
eval CREATE TABLE t13 (a INT KEY, b BLOB, c CHAR(5),
d INT DEFAULT '1',
e TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP
@@ -620,7 +620,7 @@ sync_slave_with_master;
--echo *** Create t14 on slave ***
STOP SLAVE;
-RESET SLAVE;
+--source include/reset_slave.inc
eval CREATE TABLE t14 (c1 INT KEY, c4 BLOB, c5 CHAR(5),
c6 INT DEFAULT '1',
c7 TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP
@@ -660,7 +660,7 @@ SELECT * FROM t14 ORDER BY c1;
--echo *** Create t14a on slave ***
STOP SLAVE;
-RESET SLAVE;
+--source include/reset_slave.inc
eval CREATE TABLE t14a (c1 INT KEY, c4 BLOB, c5 CHAR(5),
c6 INT DEFAULT '1',
c7 TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP
@@ -690,7 +690,7 @@ sync_slave_with_master;
--replace_column 5 CURRENT_TIMESTAMP
SELECT * FROM t14a ORDER BY c1;
STOP SLAVE;
-RESET SLAVE;
+--source include/reset_slave.inc
--echo *** Master Drop c5 ***
connection master;
@@ -749,7 +749,7 @@ sync_slave_with_master;
--echo *** Create t15 on slave ***
STOP SLAVE;
-RESET SLAVE;
+--source include/reset_slave.inc
eval CREATE TABLE t15 (c1 INT KEY, c2 DECIMAL(8,2), c3 TEXT,
c4 BLOB, c5 CHAR(5),
c6 INT DEFAULT '1',
@@ -822,7 +822,7 @@ sync_slave_with_master;
--echo *** Create t16 on slave ***
STOP SLAVE;
-RESET SLAVE;
+--source include/reset_slave.inc
eval CREATE TABLE t16 (c1 INT KEY, c2 DECIMAL(8,2), c3 TEXT,
c4 BLOB, c5 CHAR(5),
c6 INT DEFAULT '1',
@@ -877,7 +877,7 @@ sync_slave_with_master;
--echo *** Create t17 on slave ***
STOP SLAVE;
-RESET SLAVE;
+--source include/reset_slave.inc
eval CREATE TABLE t17 (a SMALLINT, b INT PRIMARY KEY, c CHAR(5),
d FLOAT DEFAULT '2.00',
e CHAR(5) DEFAULT 'TEST2')
diff --git a/mysql-test/suite/rpl/include/rpl_flsh_tbls.test b/mysql-test/suite/rpl/include/rpl_flsh_tbls.test
index a8cec3d2a1a..491897ae1e5 100644
--- a/mysql-test/suite/rpl/include/rpl_flsh_tbls.test
+++ b/mysql-test/suite/rpl/include/rpl_flsh_tbls.test
@@ -6,6 +6,12 @@
source include/master-slave.inc;
+connection slave;
+source include/stop_slave.inc;
+change master to master_use_gtid=no;
+source include/start_slave.inc;
+connection master;
+
let $SERVER_VERSION=`select version()`;
create table t1 (a int) ENGINE=MyISAM;
diff --git a/mysql-test/suite/rpl/include/rpl_innodb_rows_counters.inc b/mysql-test/suite/rpl/include/rpl_innodb_rows_counters.inc
deleted file mode 100644
index cb51058f0ae..00000000000
--- a/mysql-test/suite/rpl/include/rpl_innodb_rows_counters.inc
+++ /dev/null
@@ -1,48 +0,0 @@
-#########################################
-# Author: Benjamin Renard benj@fb.com
-# Date: 11/15/2013
-# Purpose: Showing the difference between current innodb rows stats and the ones recorded at the beginning of the test
-# Requirements: Having @[master|slave]_[system_]rows_[read|inserted|deleted|updated] counters already created
-#########################################
-
---connection master
-
-select variable_value into @rows_read from information_schema.global_status where variable_name = 'innodb_rows_read';
-select @rows_read - @master_rows_read;
-select variable_value into @rows_updated from information_schema.global_status where variable_name = 'innodb_rows_updated';
-select @rows_updated - @master_rows_updated;
-select variable_value into @rows_deleted from information_schema.global_status where variable_name = 'innodb_rows_deleted';
-select @rows_deleted - @master_rows_deleted;
-select variable_value into @rows_inserted from information_schema.global_status where variable_name = 'innodb_rows_inserted';
-select @rows_inserted - @master_rows_inserted;
-
-select variable_value into @system_rows_read from information_schema.global_status where variable_name = 'innodb_system_rows_read';
-select @system_rows_read - @master_system_rows_read;
-select variable_value into @system_rows_updated from information_schema.global_status where variable_name = 'innodb_system_rows_updated';
-select @system_rows_updated - @master_system_rows_updated;
-select variable_value into @system_rows_deleted from information_schema.global_status where variable_name = 'innodb_system_rows_deleted';
-select @system_rows_deleted - @master_system_rows_deleted;
-select variable_value into @system_rows_inserted from information_schema.global_status where variable_name = 'innodb_system_rows_inserted';
-select @system_rows_inserted - @master_system_rows_inserted;
-
---sync_slave_with_master
-
-select variable_value into @rows_read from information_schema.global_status where variable_name = 'innodb_rows_read';
-select @rows_read - @slave_rows_read;
-select variable_value into @rows_updated from information_schema.global_status where variable_name = 'innodb_rows_updated';
-select @rows_updated - @slave_rows_updated;
-select variable_value into @rows_deleted from information_schema.global_status where variable_name = 'innodb_rows_deleted';
-select @rows_deleted - @slave_rows_deleted;
-select variable_value into @rows_inserted from information_schema.global_status where variable_name = 'innodb_rows_inserted';
-select @rows_inserted - @slave_rows_inserted;
-
-select variable_value into @system_rows_read from information_schema.global_status where variable_name = 'innodb_system_rows_read';
-select @system_rows_read - @slave_system_rows_read;
-select variable_value into @system_rows_updated from information_schema.global_status where variable_name = 'innodb_system_rows_updated';
-select @system_rows_updated - @slave_system_rows_updated;
-select variable_value into @system_rows_deleted from information_schema.global_status where variable_name = 'innodb_system_rows_deleted';
-select @system_rows_deleted - @slave_system_rows_deleted;
-select variable_value into @system_rows_inserted from information_schema.global_status where variable_name = 'innodb_system_rows_inserted';
-select @system_rows_inserted - @slave_system_rows_inserted;
-
---connection master
diff --git a/mysql-test/suite/rpl/include/rpl_loaddata.test b/mysql-test/suite/rpl/include/rpl_loaddata.test
index f0933c1023f..0a6d03aa837 100644
--- a/mysql-test/suite/rpl/include/rpl_loaddata.test
+++ b/mysql-test/suite/rpl/include/rpl_loaddata.test
@@ -109,7 +109,7 @@ connection slave;
# RESET SLAVE and see if error is cleared in SHOW SLAVE STATUS.
stop slave;
-reset slave;
+--source include/reset_slave.inc
--source include/check_slave_no_error.inc
# Finally, see if logging is done ok on master for a failing LOAD DATA INFILE
diff --git a/mysql-test/suite/rpl/include/rpl_parallel_29322.inc b/mysql-test/suite/rpl/include/rpl_parallel_29322.inc
index 54eb13d7f09..96d75f33fb0 100644
--- a/mysql-test/suite/rpl/include/rpl_parallel_29322.inc
+++ b/mysql-test/suite/rpl/include/rpl_parallel_29322.inc
@@ -19,7 +19,8 @@
--connection slave
--source include/stop_slave.inc
-reset slave;
+--let $master_use_gtid_option=No
+--source include/reset_slave.inc
--connection master
--let $datadir= `SELECT @@datadir`
diff --git a/mysql-test/suite/rpl/include/rpl_reset_slave.test b/mysql-test/suite/rpl/include/rpl_reset_slave.test
index e7a78f36efc..d4c9d70169b 100644
--- a/mysql-test/suite/rpl/include/rpl_reset_slave.test
+++ b/mysql-test/suite/rpl/include/rpl_reset_slave.test
@@ -11,7 +11,9 @@
-- source include/master-slave.inc
sync_slave_with_master;
--disable_query_log
+set sql_log_bin=0;
call mtr.add_suppression('Slave I/O: Get master BINLOG_CHECKSUM failed with error');
+set sql_log_bin=1;
--enable_query_log
let $status_items= Master_User, Master_Host;
source include/show_slave_status.inc;
@@ -20,7 +22,7 @@ source include/stop_slave.inc;
change master to master_user='test';
source include/show_slave_status.inc;
-reset slave;
+--source include/reset_slave.inc
source include/show_slave_status.inc;
change master to master_user='root';
@@ -31,13 +33,13 @@ source include/show_slave_status.inc;
# test of crash with temp tables & RESET SLAVE
# (test to see if RESET SLAVE clears temp tables in memory and disk)
source include/stop_slave.inc;
-reset slave;
+--source include/reset_slave.inc
source include/start_slave.inc;
connection master;
create temporary table t1 (a int);
sync_slave_with_master;
source include/stop_slave.inc;
-reset slave;
+--source include/reset_slave.inc
source include/start_slave.inc;
sync_with_master;
show status like 'slave_open_temp_tables';
@@ -51,7 +53,7 @@ sync_slave_with_master;
# clearing the status
source include/stop_slave.inc;
-reset slave;
+--source include/reset_slave.inc
source include/check_slave_no_error.inc;
#
@@ -79,7 +81,7 @@ let $slave_io_errno= 1045;
--source include/wait_for_slave_io_error.inc
--source include/stop_slave_sql.inc
-reset slave;
+--source include/reset_slave.inc
source include/check_slave_no_error.inc;
change master to master_user='root';
@@ -88,7 +90,7 @@ change master to master_user='root';
# BUG#11809016 - NO WAY TO DISCOVER AN INSTANCE IS NO LONGER A SLAVE FOLLOWING MYSQL BUG#28796
#
-reset slave;
+--source include/reset_slave.inc
--source include/start_slave.inc
--source include/stop_slave.inc
@@ -97,6 +99,7 @@ reset slave;
--let $_slave_master_port= query_get_value(SHOW SLAVE STATUS, Master_Port, 1)
reset slave all;
+set @@global.gtid_slave_pos= "";
--error ER_BAD_SLAVE
start slave;
diff --git a/mysql-test/suite/rpl/include/rpl_slave_max_statement_time.inc b/mysql-test/suite/rpl/include/rpl_slave_max_statement_time.inc
new file mode 100644
index 00000000000..e064fb074dc
--- /dev/null
+++ b/mysql-test/suite/rpl/include/rpl_slave_max_statement_time.inc
@@ -0,0 +1,79 @@
+#
+# Helper test file to ensure that an event running on a slave which executes
+# for longer than @@slave_max_statement_time will time out. By default, it will
+# use the sleep function to imitate a long running function. This can be
+# changed to use locks using the parameter with_lock.
+#
+# Parameters:
+# with_lock (boolean, in) : Changes the long running command from using SLEEP
+# to using locks. In particular, the MTR test will take the table level
+# write lock on the slave side, while the slave concurrently tries to
+# execute an insert statement.
+#
+# use_load_data (boolean, in) : If in row logging format, uses LOAD DATA
+# INFILLE command to create Load_log_events to create the events which
+# should time out
+#
+
+--connection master
+create table t1(a int not null auto_increment, b int, primary key(a)) engine=InnoDB;
+--source include/save_master_gtid.inc
+
+--connection slave
+--source include/sync_with_master_gtid.inc
+--source include/stop_slave.inc
+SET @old_slave_max_statement_time=@@GLOBAL.slave_max_statement_time;
+SET GLOBAL slave_max_statement_time=0.75;
+
+--connection master
+--echo # Long running command due to a lock conflict
+if (!$use_load_data)
+{
+ INSERT INTO t1(b) VALUES (1);
+}
+if ($use_load_data)
+{
+ load data infile '../../std_data/rpl_loaddata.dat' into table t1;
+}
+--source include/save_master_gtid.inc
+
+--connection slave1
+ BEGIN; INSERT INTO t1(b) VALUES (1);
+
+--connection slave
+
+--echo # Starting slave to receive event which will take longer to execute
+--echo # than slave_max_statement_time
+START SLAVE;
+
+# ER_SLAVE_STATEMENT_TIMEOUT
+--let $slave_sql_errno= 4192
+--source include/wait_for_slave_sql_error.inc
+
+--echo # Ensuring event was not processed..
+--let $t1_count= `select count(*) from t1`
+if ($t1_count != 0)
+{
+ --die Event should have timed out on the slave and not been executed
+}
+--echo # ..success
+
+--echo # Remove slave timeout and catch up to master
+SET GLOBAL slave_max_statement_time=0;
+
+--connection slave1
+ ROLLBACK;
+
+--source include/start_slave.inc
+--source include/sync_with_master_gtid.inc
+
+--echo # Test case cleanup
+--connection master
+DROP TABLE t1;
+--source include/save_master_gtid.inc
+
+--connection slave
+--source include/sync_with_master_gtid.inc
+--source include/stop_slave.inc
+SET GLOBAL slave_max_statement_time=@old_slave_max_statement_time;
+--source include/start_slave.inc
diff --git a/mysql-test/suite/rpl/include/rpl_start_stop_slave.test b/mysql-test/suite/rpl/include/rpl_start_stop_slave.test
index 32f33b2a31d..ae5f83613fe 100644
--- a/mysql-test/suite/rpl/include/rpl_start_stop_slave.test
+++ b/mysql-test/suite/rpl/include/rpl_start_stop_slave.test
@@ -195,7 +195,7 @@ let $master_pos= `SELECT $master_pos + 1`;
--connection slave
--source include/stop_slave.inc
--replace_regex /[0-9]+/MASTER_POS/
-eval CHANGE MASTER TO master_log_pos=$master_pos;
+eval CHANGE MASTER TO master_log_pos=$master_pos, master_use_gtid=no;
START SLAVE;
# ER_MASTER_FATAL_ERROR_READING_BINLOG 1236
diff --git a/mysql-test/suite/rpl/r/rpl_000010.result b/mysql-test/suite/rpl/r/rpl_000010.result
index ae989f25e1b..a86d71bd33f 100644
--- a/mysql-test/suite/rpl/r/rpl_000010.result
+++ b/mysql-test/suite/rpl/r/rpl_000010.result
@@ -1,5 +1,10 @@
include/master-slave.inc
[connection master]
+connection slave;
+include/stop_slave.inc
+CHANGE MASTER TO MASTER_USE_GTID=NO;
+include/start_slave.inc
+connection master;
create table t1 (n int not null auto_increment primary key);
insert into t1 values(NULL);
insert into t1 values(2);
diff --git a/mysql-test/suite/rpl/r/rpl_auto_increment_bug33029.result b/mysql-test/suite/rpl/r/rpl_auto_increment_bug33029.result
index c75e65ebb6f..49f3ac455f1 100644
--- a/mysql-test/suite/rpl/r/rpl_auto_increment_bug33029.result
+++ b/mysql-test/suite/rpl/r/rpl_auto_increment_bug33029.result
@@ -38,6 +38,8 @@ id
==== Clean up ====
stop slave sql_thread;
include/cleanup_fake_relay_log.inc
+Warnings:
+Note 4190 RESET SLAVE is implicitly changing the value of 'Using_Gtid' from 'No' to 'Slave_Pos'
DROP TABLE t1, t2;
DROP PROCEDURE p1;
DROP PROCEDURE p2;
diff --git a/mysql-test/suite/rpl/r/rpl_binlog_corruption.result b/mysql-test/suite/rpl/r/rpl_binlog_corruption.result
index 5c141eed596..730fb67ebc9 100644
--- a/mysql-test/suite/rpl/r/rpl_binlog_corruption.result
+++ b/mysql-test/suite/rpl/r/rpl_binlog_corruption.result
@@ -14,4 +14,6 @@ include/wait_for_slave_sql_error.inc [errno=1594]
Last_SQL_Error = Relay log read failure: Could not parse relay log event entry. The possible reasons are: the master's binary log is corrupted (you can check this by running 'mysqlbinlog' on the binary log), the slave's relay log is corrupted (you can check this by running 'mysqlbinlog' on the relay log), a network problem, or a bug in the master's or slave's MariaDB code. If you want to check the master's binary log or slave's relay log, you will be able to know their names by issuing 'SHOW SLAVE STATUS' on this slave.
==== Clean up ====
include/cleanup_fake_relay_log.inc
+Warnings:
+Note 4190 RESET SLAVE is implicitly changing the value of 'Using_Gtid' from 'No' to 'Slave_Pos'
include/rpl_end.inc
diff --git a/mysql-test/suite/rpl/r/rpl_binlog_dump_slave_gtid_state_info.result b/mysql-test/suite/rpl/r/rpl_binlog_dump_slave_gtid_state_info.result
index 98688df7273..b913a49b509 100644
--- a/mysql-test/suite/rpl/r/rpl_binlog_dump_slave_gtid_state_info.result
+++ b/mysql-test/suite/rpl/r/rpl_binlog_dump_slave_gtid_state_info.result
@@ -4,7 +4,7 @@ connection master;
SET GLOBAL LOG_WARNINGS=2;
connection slave;
include/stop_slave.inc
-CHANGE MASTER TO MASTER_USE_GTID=current_pos;
+CHANGE MASTER TO MASTER_USE_GTID=slave_pos;
include/start_slave.inc
connection master;
"Test Case 1: Start binlog_dump to slave_server(#), pos(master-bin.000001, ###), using_gtid(1), gtid('')"
diff --git a/mysql-test/suite/rpl/r/rpl_binlog_errors.result b/mysql-test/suite/rpl/r/rpl_binlog_errors.result
index 4c667bd7f5a..0c79b079bd6 100644
--- a/mysql-test/suite/rpl/r/rpl_binlog_errors.result
+++ b/mysql-test/suite/rpl/r/rpl_binlog_errors.result
@@ -232,6 +232,9 @@ connection master;
#######################################################################
include/rpl_reset.inc
connection slave;
+include/stop_slave.inc
+CHANGE MASTER TO MASTER_USE_GTID=NO;
+include/start_slave.inc
call mtr.add_suppression("Slave I/O: Relay log write failure: could not queue event from master.*");
call mtr.add_suppression("Error writing file .*");
call mtr.add_suppression("Could not use .*");
@@ -277,5 +280,7 @@ include/stop_slave_sql.inc
Warnings:
Note 1255 Slave already has been stopped
RESET SLAVE;
+Warnings:
+Note 4190 RESET SLAVE is implicitly changing the value of 'Using_Gtid' from 'No' to 'Slave_Pos'
RESET MASTER;
include/rpl_end.inc
diff --git a/mysql-test/suite/rpl/r/rpl_blackhole_row_annotate.result b/mysql-test/suite/rpl/r/rpl_blackhole_row_annotate.result
index b125b6b5c6c..26ea84dd3e9 100644
--- a/mysql-test/suite/rpl/r/rpl_blackhole_row_annotate.result
+++ b/mysql-test/suite/rpl/r/rpl_blackhole_row_annotate.result
@@ -200,7 +200,7 @@ ROLLBACK/*!*/;
use `test`/*!*/;
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=#/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=1411383296/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
diff --git a/mysql-test/suite/rpl/r/rpl_cant_read_event_incident.result b/mysql-test/suite/rpl/r/rpl_cant_read_event_incident.result
index 5aff978538f..86659816f6c 100644
--- a/mysql-test/suite/rpl/r/rpl_cant_read_event_incident.result
+++ b/mysql-test/suite/rpl/r/rpl_cant_read_event_incident.result
@@ -2,6 +2,9 @@ include/master-slave.inc
[connection master]
connection slave;
include/stop_slave.inc
+CHANGE MASTER TO MASTER_USE_GTID=NO;
+include/start_slave.inc
+include/stop_slave.inc
connection master;
call mtr.add_suppression("Error in Log_event::read_log_event()");
include/rpl_stop_server.inc [server_number=1]
@@ -10,7 +13,9 @@ show binlog events;
ERROR HY000: Error when executing command SHOW BINLOG EVENTS: Wrong offset or I/O error
connection slave;
call mtr.add_suppression("Slave I/O: Got fatal error 1236 from master when reading data from binary log");
-reset slave;
+include/reset_slave.inc
+Warnings:
+Note 4190 RESET SLAVE is implicitly changing the value of 'Using_Gtid' from 'No' to 'Slave_Pos'
start slave;
include/wait_for_slave_param.inc [Last_IO_Errno]
Last_IO_Errno = '1236'
@@ -20,6 +25,8 @@ reset master;
connection slave;
stop slave;
reset slave;
+Warnings:
+Note 4190 RESET SLAVE is implicitly changing the value of 'Using_Gtid' from 'No' to 'Slave_Pos'
drop table if exists t;
reset master;
End of the tests
diff --git a/mysql-test/suite/rpl/r/rpl_change_master.result b/mysql-test/suite/rpl/r/rpl_change_master.result
index 48cec72d917..88801b07bba 100644
--- a/mysql-test/suite/rpl/r/rpl_change_master.result
+++ b/mysql-test/suite/rpl/r/rpl_change_master.result
@@ -26,4 +26,9 @@ connection master;
CHANGE MASTER TO MASTER_USER='root', MASTER_SSL=0, MASTER_SSL_CA='', MASTER_SSL_CERT='',
MASTER_SSL_KEY='', MASTER_SSL_CRL='', MASTER_SSL_CRLPATH='';
CHANGE MASTER TO MASTER_USER='root', MASTER_PASSWORD='', MASTER_SSL=0;
+"Usage of CURRENT_POS in CHANGE MASTER MASTER_USE_GTID is dreprecated.
+CHANGE MASTER TO MASTER_USE_GTID=CURRENT_POS;
+Warnings:
+Warning 1681 'master_use_gtid=current_pos' is deprecated and will be removed in a future release. Please use master_demote_to_slave=1 instead
+CHANGE MASTER TO MASTER_USE_GTID=SLAVE_POS;
include/rpl_end.inc
diff --git a/mysql-test/suite/rpl/r/rpl_change_master_demote.result b/mysql-test/suite/rpl/r/rpl_change_master_demote.result
new file mode 100644
index 00000000000..38cff83829e
--- /dev/null
+++ b/mysql-test/suite/rpl/r/rpl_change_master_demote.result
@@ -0,0 +1,687 @@
+include/master-slave.inc
+[connection master]
+connection slave;
+include/stop_slave.inc
+change master to master_use_gtid=slave_pos;
+include/start_slave.inc
+include/sync_with_master_gtid.inc
+#
+# Test Case 1: When both gtid_binlog_pos and gtid_slave_pos are
+# empty, MASTER_DEMOTE_TO_SLAVE=1 results in no change to replication
+# state.
+#
+include/rpl_change_master_demote.inc
+##############################################
+# Connection semantics change:
+# * True primary is now connection 'slave'
+# * True replica is now connection 'master'
+##############################################
+connection master;
+SELECT VARIABLE_NAME, GLOBAL_VALUE FROM INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE VARIABLE_NAME LIKE 'gtid_binlog_pos' OR VARIABLE_NAME LIKE 'gtid_slave_pos' OR VARIABLE_NAME LIKE 'gtid_current_pos' ORDER BY VARIABLE_NAME ASC;
+VARIABLE_NAME GLOBAL_VALUE
+GTID_BINLOG_POS
+GTID_CURRENT_POS
+GTID_SLAVE_POS
+# First ensure gtid_slave_pos after master_demote_to_slave matches
+# gtid_current_pos calculation
+CHANGE MASTER TO master_host='127.0.0.1', master_port=SLAVE_PORT, master_user='root', master_use_gtid=slave_pos, master_demote_to_slave=1 ;
+SELECT VARIABLE_NAME, GLOBAL_VALUE FROM INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE VARIABLE_NAME LIKE 'gtid_binlog_pos' OR VARIABLE_NAME LIKE 'gtid_slave_pos' OR VARIABLE_NAME LIKE 'gtid_current_pos' ORDER BY VARIABLE_NAME ASC;
+VARIABLE_NAME GLOBAL_VALUE
+GTID_BINLOG_POS
+GTID_CURRENT_POS
+GTID_SLAVE_POS
+# Validating gtid_slave_pos == gtid_binlog_pos..
+# ..success
+connection slave;
+# Ensuring replication works correctly after role swap
+connection slave;
+set session gtid_domain_id= 0;
+CREATE TABLE repl_t (a int);
+INSERT INTO repl_t VALUES (1);
+connection master;
+# Validating that replication works..
+# ..success
+# Cleaning up replication check data
+connection slave;
+DROP TABLE repl_t;
+connection master;
+SELECT VARIABLE_NAME, GLOBAL_VALUE FROM INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE VARIABLE_NAME LIKE 'gtid_binlog_pos' OR VARIABLE_NAME LIKE 'gtid_slave_pos' OR VARIABLE_NAME LIKE 'gtid_current_pos' ORDER BY VARIABLE_NAME ASC;
+VARIABLE_NAME GLOBAL_VALUE
+GTID_BINLOG_POS
+GTID_CURRENT_POS 0-2-3
+GTID_SLAVE_POS 0-2-3
+##############################################
+# Connection semantics change:
+# * True primary is back to connection 'master'
+# * True replica is back to connection 'slave'
+##############################################
+connection master;
+connection slave;
+CHANGE MASTER TO master_host='127.0.0.1', master_port=MASTER_PORT, master_user='root', master_use_gtid=slave_pos, master_demote_to_slave=1;
+#
+# Test Case 2: If gtid_slave_pos is empty, gtid_binlog_pos will
+# completely overwrite it with MASTER_DEMOTE_TO_SLAVE=1.
+#
+connection slave;
+include/stop_slave.inc
+RESET MASTER;
+set @@global.gtid_slave_pos="";
+include/start_slave.inc
+connection master;
+RESET MASTER;
+set @@global.gtid_slave_pos="";
+set session gtid_domain_id= 0;
+CREATE TABLE t1 (a int);
+INSERT INTO t1 VALUES (1);
+include/save_master_gtid.inc
+connection slave;
+include/sync_with_master_gtid.inc
+include/rpl_change_master_demote.inc
+##############################################
+# Connection semantics change:
+# * True primary is now connection 'slave'
+# * True replica is now connection 'master'
+##############################################
+connection master;
+SELECT VARIABLE_NAME, GLOBAL_VALUE FROM INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE VARIABLE_NAME LIKE 'gtid_binlog_pos' OR VARIABLE_NAME LIKE 'gtid_slave_pos' OR VARIABLE_NAME LIKE 'gtid_current_pos' ORDER BY VARIABLE_NAME ASC;
+VARIABLE_NAME GLOBAL_VALUE
+GTID_BINLOG_POS 0-1-2
+GTID_CURRENT_POS 0-1-2
+GTID_SLAVE_POS
+# First ensure gtid_slave_pos after master_demote_to_slave matches
+# gtid_current_pos calculation
+CHANGE MASTER TO master_host='127.0.0.1', master_port=SLAVE_PORT, master_user='root', master_use_gtid=slave_pos, master_demote_to_slave=1 ;
+SELECT VARIABLE_NAME, GLOBAL_VALUE FROM INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE VARIABLE_NAME LIKE 'gtid_binlog_pos' OR VARIABLE_NAME LIKE 'gtid_slave_pos' OR VARIABLE_NAME LIKE 'gtid_current_pos' ORDER BY VARIABLE_NAME ASC;
+VARIABLE_NAME GLOBAL_VALUE
+GTID_BINLOG_POS 0-1-2
+GTID_CURRENT_POS 0-1-2
+GTID_SLAVE_POS 0-1-2
+# Validating gtid_slave_pos == gtid_binlog_pos..
+# ..success
+connection slave;
+# Ensuring replication works correctly after role swap
+connection slave;
+set session gtid_domain_id= 0;
+CREATE TABLE repl_t (a int);
+INSERT INTO repl_t VALUES (1);
+connection master;
+# Validating that replication works..
+# ..success
+# Cleaning up replication check data
+connection slave;
+DROP TABLE repl_t;
+connection master;
+SELECT VARIABLE_NAME, GLOBAL_VALUE FROM INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE VARIABLE_NAME LIKE 'gtid_binlog_pos' OR VARIABLE_NAME LIKE 'gtid_slave_pos' OR VARIABLE_NAME LIKE 'gtid_current_pos' ORDER BY VARIABLE_NAME ASC;
+VARIABLE_NAME GLOBAL_VALUE
+GTID_BINLOG_POS 0-1-2
+GTID_CURRENT_POS 0-2-5
+GTID_SLAVE_POS 0-2-5
+##############################################
+# Connection semantics change:
+# * True primary is back to connection 'master'
+# * True replica is back to connection 'slave'
+##############################################
+connection master;
+connection slave;
+CHANGE MASTER TO master_host='127.0.0.1', master_port=MASTER_PORT, master_user='root', master_use_gtid=slave_pos, master_demote_to_slave=1;
+#
+# Test Case 3: Using a single domain id, if neither gtid_slave_pos nor
+# gtid_binlog_pos are empty, and gtid_binlog_pos is more recent, then
+# gtid_binlog_pos will overwrite gtid_slave_pos when
+# MASTER_DEMOTE_TO_SLAVE=1.
+#
+connection master;
+INSERT INTO t1 VALUES (2);
+include/save_master_gtid.inc
+connection slave;
+include/sync_with_master_gtid.inc
+include/rpl_change_master_demote.inc
+##############################################
+# Connection semantics change:
+# * True primary is now connection 'slave'
+# * True replica is now connection 'master'
+##############################################
+connection master;
+SELECT VARIABLE_NAME, GLOBAL_VALUE FROM INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE VARIABLE_NAME LIKE 'gtid_binlog_pos' OR VARIABLE_NAME LIKE 'gtid_slave_pos' OR VARIABLE_NAME LIKE 'gtid_current_pos' ORDER BY VARIABLE_NAME ASC;
+VARIABLE_NAME GLOBAL_VALUE
+GTID_BINLOG_POS 0-1-6
+GTID_CURRENT_POS 0-1-6
+GTID_SLAVE_POS 0-2-5
+# First ensure gtid_slave_pos after master_demote_to_slave matches
+# gtid_current_pos calculation
+CHANGE MASTER TO master_host='127.0.0.1', master_port=SLAVE_PORT, master_user='root', master_use_gtid=slave_pos, master_demote_to_slave=1 ;
+SELECT VARIABLE_NAME, GLOBAL_VALUE FROM INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE VARIABLE_NAME LIKE 'gtid_binlog_pos' OR VARIABLE_NAME LIKE 'gtid_slave_pos' OR VARIABLE_NAME LIKE 'gtid_current_pos' ORDER BY VARIABLE_NAME ASC;
+VARIABLE_NAME GLOBAL_VALUE
+GTID_BINLOG_POS 0-1-6
+GTID_CURRENT_POS 0-1-6
+GTID_SLAVE_POS 0-1-6
+# Validating gtid_slave_pos == gtid_binlog_pos..
+# ..success
+connection slave;
+# Ensuring replication works correctly after role swap
+connection slave;
+set session gtid_domain_id= 0;
+CREATE TABLE repl_t (a int);
+INSERT INTO repl_t VALUES (1);
+connection master;
+# Validating that replication works..
+# ..success
+# Cleaning up replication check data
+connection slave;
+DROP TABLE repl_t;
+connection master;
+SELECT VARIABLE_NAME, GLOBAL_VALUE FROM INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE VARIABLE_NAME LIKE 'gtid_binlog_pos' OR VARIABLE_NAME LIKE 'gtid_slave_pos' OR VARIABLE_NAME LIKE 'gtid_current_pos' ORDER BY VARIABLE_NAME ASC;
+VARIABLE_NAME GLOBAL_VALUE
+GTID_BINLOG_POS 0-1-6
+GTID_CURRENT_POS 0-2-9
+GTID_SLAVE_POS 0-2-9
+##############################################
+# Connection semantics change:
+# * True primary is back to connection 'master'
+# * True replica is back to connection 'slave'
+##############################################
+connection master;
+connection slave;
+CHANGE MASTER TO master_host='127.0.0.1', master_port=MASTER_PORT, master_user='root', master_use_gtid=slave_pos, master_demote_to_slave=1;
+#
+# Test Case 4: If gtid_slave_pos and gtid_binlog_pos are equivalent,
+# MASTER_DEMOTE_TO_SLAVE=1 will not change gtid_slave_pos.
+#
+connection master;
+# update gtid_binlog_pos and demote it (we have proven this works)
+INSERT INTO t1 VALUES (3);
+# Update to account for statements to verify replication in include file
+CHANGE MASTER TO master_host='127.0.0.1', master_port=SLAVE_PORT, master_user='root', master_use_gtid=slave_pos, master_demote_to_slave=1;
+RESET SLAVE ALL;
+include/save_master_gtid.inc
+connection slave;
+include/sync_with_master_gtid.inc
+include/rpl_change_master_demote.inc
+##############################################
+# Connection semantics change:
+# * True primary is now connection 'slave'
+# * True replica is now connection 'master'
+##############################################
+connection master;
+SELECT VARIABLE_NAME, GLOBAL_VALUE FROM INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE VARIABLE_NAME LIKE 'gtid_binlog_pos' OR VARIABLE_NAME LIKE 'gtid_slave_pos' OR VARIABLE_NAME LIKE 'gtid_current_pos' ORDER BY VARIABLE_NAME ASC;
+VARIABLE_NAME GLOBAL_VALUE
+GTID_BINLOG_POS 0-1-10
+GTID_CURRENT_POS 0-1-10
+GTID_SLAVE_POS 0-1-10
+# First ensure gtid_slave_pos after master_demote_to_slave matches
+# gtid_current_pos calculation
+CHANGE MASTER TO master_host='127.0.0.1', master_port=SLAVE_PORT, master_user='root', master_use_gtid=slave_pos, master_demote_to_slave=1 ;
+SELECT VARIABLE_NAME, GLOBAL_VALUE FROM INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE VARIABLE_NAME LIKE 'gtid_binlog_pos' OR VARIABLE_NAME LIKE 'gtid_slave_pos' OR VARIABLE_NAME LIKE 'gtid_current_pos' ORDER BY VARIABLE_NAME ASC;
+VARIABLE_NAME GLOBAL_VALUE
+GTID_BINLOG_POS 0-1-10
+GTID_CURRENT_POS 0-1-10
+GTID_SLAVE_POS 0-1-10
+# Validating gtid_slave_pos == gtid_binlog_pos..
+# ..success
+connection slave;
+# Ensuring replication works correctly after role swap
+connection slave;
+set session gtid_domain_id= 0;
+CREATE TABLE repl_t (a int);
+INSERT INTO repl_t VALUES (1);
+connection master;
+# Validating that replication works..
+# ..success
+# Cleaning up replication check data
+connection slave;
+DROP TABLE repl_t;
+connection master;
+SELECT VARIABLE_NAME, GLOBAL_VALUE FROM INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE VARIABLE_NAME LIKE 'gtid_binlog_pos' OR VARIABLE_NAME LIKE 'gtid_slave_pos' OR VARIABLE_NAME LIKE 'gtid_current_pos' ORDER BY VARIABLE_NAME ASC;
+VARIABLE_NAME GLOBAL_VALUE
+GTID_BINLOG_POS 0-1-10
+GTID_CURRENT_POS 0-2-13
+GTID_SLAVE_POS 0-2-13
+##############################################
+# Connection semantics change:
+# * True primary is back to connection 'master'
+# * True replica is back to connection 'slave'
+##############################################
+connection master;
+connection slave;
+CHANGE MASTER TO master_host='127.0.0.1', master_port=MASTER_PORT, master_user='root', master_use_gtid=slave_pos, master_demote_to_slave=1;
+#
+# Test Case 5: If a new domain id is added into gtid_binlog_pos while
+# gtid_slave_pos already has a state, MASTER_DEMOTE_TO_SLAVE=1 will
+# append a new GTID to gtid_slave_pos with the latest seq_no from that
+# domain.
+#
+connection master;
+# Domain_id
+set session gtid_domain_id= 0;
+INSERT INTO t1 VALUES (4);
+set session gtid_domain_id= 1;
+CREATE TABLE t2 (a int);
+INSERT INTO t2 VALUES (1);
+include/save_master_gtid.inc
+connection slave;
+include/sync_with_master_gtid.inc
+include/rpl_change_master_demote.inc
+##############################################
+# Connection semantics change:
+# * True primary is now connection 'slave'
+# * True replica is now connection 'master'
+##############################################
+connection master;
+SELECT VARIABLE_NAME, GLOBAL_VALUE FROM INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE VARIABLE_NAME LIKE 'gtid_binlog_pos' OR VARIABLE_NAME LIKE 'gtid_slave_pos' OR VARIABLE_NAME LIKE 'gtid_current_pos' ORDER BY VARIABLE_NAME ASC;
+VARIABLE_NAME GLOBAL_VALUE
+GTID_BINLOG_POS 0-1-14,1-1-2
+GTID_CURRENT_POS 0-1-14,1-1-2
+GTID_SLAVE_POS 0-2-13
+# First ensure gtid_slave_pos after master_demote_to_slave matches
+# gtid_current_pos calculation
+CHANGE MASTER TO master_host='127.0.0.1', master_port=SLAVE_PORT, master_user='root', master_use_gtid=slave_pos, master_demote_to_slave=1 ;
+SELECT VARIABLE_NAME, GLOBAL_VALUE FROM INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE VARIABLE_NAME LIKE 'gtid_binlog_pos' OR VARIABLE_NAME LIKE 'gtid_slave_pos' OR VARIABLE_NAME LIKE 'gtid_current_pos' ORDER BY VARIABLE_NAME ASC;
+VARIABLE_NAME GLOBAL_VALUE
+GTID_BINLOG_POS 0-1-14,1-1-2
+GTID_CURRENT_POS 0-1-14,1-1-2
+GTID_SLAVE_POS 0-1-14,1-1-2
+# Validating gtid_slave_pos == gtid_binlog_pos..
+# ..success
+connection slave;
+# Ensuring replication works correctly after role swap
+connection slave;
+set session gtid_domain_id= 0;
+CREATE TABLE repl_t (a int);
+INSERT INTO repl_t VALUES (1);
+connection master;
+# Validating that replication works..
+# ..success
+# Cleaning up replication check data
+connection slave;
+DROP TABLE repl_t;
+connection master;
+SELECT VARIABLE_NAME, GLOBAL_VALUE FROM INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE VARIABLE_NAME LIKE 'gtid_binlog_pos' OR VARIABLE_NAME LIKE 'gtid_slave_pos' OR VARIABLE_NAME LIKE 'gtid_current_pos' ORDER BY VARIABLE_NAME ASC;
+VARIABLE_NAME GLOBAL_VALUE
+GTID_BINLOG_POS 0-1-14,1-1-2
+GTID_CURRENT_POS 0-2-17,1-1-2
+GTID_SLAVE_POS 0-2-17,1-1-2
+##############################################
+# Connection semantics change:
+# * True primary is back to connection 'master'
+# * True replica is back to connection 'slave'
+##############################################
+connection master;
+connection slave;
+CHANGE MASTER TO master_host='127.0.0.1', master_port=MASTER_PORT, master_user='root', master_use_gtid=slave_pos, master_demote_to_slave=1;
+#
+# Test Case 6: If gtid_slave_pos has multiple GTID positions and
+# gtid_binlog_pos contains updates on existing domain ids, new
+# domains, and differing server_ids, MASTER_DEMOTE_TO_SLAVE=1 will
+# update gtid_slave_pos such that it will have the seq_nos only from
+# the GTIDs last applied by this server. In other words, any GTIDs
+# with server ids that don't match that of the demoting server will be
+# ignored in the update.
+#
+connection master;
+# Update to account for statements to verify replication in include file
+set session gtid_domain_id= 0;
+INSERT INTO t1 VALUES (5);
+CHANGE MASTER TO master_host='127.0.0.1', master_port=SLAVE_PORT, master_user='root', master_use_gtid=slave_pos, master_demote_to_slave=1;
+RESET SLAVE ALL;
+set session gtid_domain_id= 1;
+INSERT INTO t2 VALUES (2);
+set session gtid_domain_id= 2;
+CREATE TABLE t3 (a int);
+INSERT INTO t3 VALUES (1);
+# The following events have a different server_id and should not go into
+# gtid_slave_pos
+set @old_server_id = @@server_id;
+set session gtid_domain_id= 1;
+set session server_id= 3;
+INSERT INTO t2 VALUES (3);
+set session gtid_domain_id= 4;
+set session server_id= 3;
+CREATE TABLE t5 (a int);
+INSERT INTO t5 VALUES (1);
+set session server_id= @old_server_id;
+include/save_master_gtid.inc
+connection slave;
+include/sync_with_master_gtid.inc
+include/rpl_change_master_demote.inc
+##############################################
+# Connection semantics change:
+# * True primary is now connection 'slave'
+# * True replica is now connection 'master'
+##############################################
+connection master;
+SELECT VARIABLE_NAME, GLOBAL_VALUE FROM INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE VARIABLE_NAME LIKE 'gtid_binlog_pos' OR VARIABLE_NAME LIKE 'gtid_slave_pos' OR VARIABLE_NAME LIKE 'gtid_current_pos' ORDER BY VARIABLE_NAME ASC;
+VARIABLE_NAME GLOBAL_VALUE
+GTID_BINLOG_POS 0-1-18,1-3-4,2-1-2,4-3-2
+GTID_CURRENT_POS 0-1-18,1-1-2,2-1-2
+GTID_SLAVE_POS 0-1-18,1-1-2
+# First ensure gtid_slave_pos after master_demote_to_slave matches
+# gtid_current_pos calculation
+CHANGE MASTER TO master_host='127.0.0.1', master_port=SLAVE_PORT, master_user='root', master_use_gtid=slave_pos, master_demote_to_slave=1 ;
+SELECT VARIABLE_NAME, GLOBAL_VALUE FROM INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE VARIABLE_NAME LIKE 'gtid_binlog_pos' OR VARIABLE_NAME LIKE 'gtid_slave_pos' OR VARIABLE_NAME LIKE 'gtid_current_pos' ORDER BY VARIABLE_NAME ASC;
+VARIABLE_NAME GLOBAL_VALUE
+GTID_BINLOG_POS 0-1-18,1-3-4,2-1-2,4-3-2
+GTID_CURRENT_POS 0-1-18,1-1-2,2-1-2
+GTID_SLAVE_POS 0-1-18,1-1-2,2-1-2
+# Validating gtid_slave_pos == gtid_binlog_pos..
+# ..success
+connection slave;
+# Ensuring replication works correctly after role swap
+connection slave;
+set session gtid_domain_id= 0;
+CREATE TABLE repl_t (a int);
+INSERT INTO repl_t VALUES (1);
+connection master;
+# Validating that replication works..
+# ..success
+# Cleaning up replication check data
+connection slave;
+DROP TABLE repl_t;
+connection master;
+SELECT VARIABLE_NAME, GLOBAL_VALUE FROM INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE VARIABLE_NAME LIKE 'gtid_binlog_pos' OR VARIABLE_NAME LIKE 'gtid_slave_pos' OR VARIABLE_NAME LIKE 'gtid_current_pos' ORDER BY VARIABLE_NAME ASC;
+VARIABLE_NAME GLOBAL_VALUE
+GTID_BINLOG_POS 0-1-18,1-3-4,2-1-2,4-3-2
+GTID_CURRENT_POS 0-2-21,1-3-4,2-1-2,4-3-2
+GTID_SLAVE_POS 0-2-21,1-3-4,2-1-2,4-3-2
+##############################################
+# Connection semantics change:
+# * True primary is back to connection 'master'
+# * True replica is back to connection 'slave'
+##############################################
+connection master;
+connection slave;
+CHANGE MASTER TO master_host='127.0.0.1', master_port=MASTER_PORT, master_user='root', master_use_gtid=slave_pos, master_demote_to_slave=1;
+#
+# Test Case 7: If MASTER_DEMOTE_TO_SLAVE=1 is combined with
+# IGNORE_DOMAIN_IDS such that gtid_binlog_pos has more recent GTIDs
+# than gtid_slave_pos in ignored domains, the CHANGE MASTER TO command
+# will still update gtid_slave_pos with the most recent transactions
+# from gtid_binlog_pos, despite being ignored by CHANGE MASTER TO
+# because they were already applied on the server.
+#
+connection master;
+set session gtid_domain_id= 2;
+INSERT INTO t3 VALUES (2);
+set session gtid_domain_id= 3;
+CREATE TABLE t4 (a int);
+INSERT INTO t4 VALUES (1);
+include/save_master_gtid.inc
+connection slave;
+include/sync_with_master_gtid.inc
+include/rpl_change_master_demote.inc
+##############################################
+# Connection semantics change:
+# * True primary is now connection 'slave'
+# * True replica is now connection 'master'
+##############################################
+connection master;
+SELECT VARIABLE_NAME, GLOBAL_VALUE FROM INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE VARIABLE_NAME LIKE 'gtid_binlog_pos' OR VARIABLE_NAME LIKE 'gtid_slave_pos' OR VARIABLE_NAME LIKE 'gtid_current_pos' ORDER BY VARIABLE_NAME ASC;
+VARIABLE_NAME GLOBAL_VALUE
+GTID_BINLOG_POS 0-1-18,1-3-4,2-1-3,3-1-2,4-3-2
+GTID_CURRENT_POS 0-2-21,1-3-4,2-1-3,3-1-2,4-3-2
+GTID_SLAVE_POS 0-2-21,1-3-4,2-1-2,4-3-2
+# First ensure gtid_slave_pos after master_demote_to_slave matches
+# gtid_current_pos calculation
+CHANGE MASTER TO master_host='127.0.0.1', master_port=SLAVE_PORT, master_user='root', master_use_gtid=slave_pos, master_demote_to_slave=1 , ignore_domain_ids=(2,3);
+SELECT VARIABLE_NAME, GLOBAL_VALUE FROM INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE VARIABLE_NAME LIKE 'gtid_binlog_pos' OR VARIABLE_NAME LIKE 'gtid_slave_pos' OR VARIABLE_NAME LIKE 'gtid_current_pos' ORDER BY VARIABLE_NAME ASC;
+VARIABLE_NAME GLOBAL_VALUE
+GTID_BINLOG_POS 0-1-18,1-3-4,2-1-3,3-1-2,4-3-2
+GTID_CURRENT_POS 0-2-21,1-3-4,2-1-3,3-1-2,4-3-2
+GTID_SLAVE_POS 0-2-21,1-3-4,2-1-3,3-1-2,4-3-2
+# Validating gtid_slave_pos == gtid_binlog_pos..
+# ..success
+connection slave;
+# Ensuring replication works correctly after role swap
+connection slave;
+set session gtid_domain_id= 0;
+CREATE TABLE repl_t (a int);
+INSERT INTO repl_t VALUES (1);
+connection master;
+# Validating that replication works..
+# ..success
+# Cleaning up replication check data
+connection slave;
+DROP TABLE repl_t;
+connection master;
+SELECT VARIABLE_NAME, GLOBAL_VALUE FROM INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE VARIABLE_NAME LIKE 'gtid_binlog_pos' OR VARIABLE_NAME LIKE 'gtid_slave_pos' OR VARIABLE_NAME LIKE 'gtid_current_pos' ORDER BY VARIABLE_NAME ASC;
+VARIABLE_NAME GLOBAL_VALUE
+GTID_BINLOG_POS 0-1-18,1-3-4,2-1-3,3-1-2,4-3-2
+GTID_CURRENT_POS 0-2-24,1-3-4,2-1-3,3-1-2,4-3-2
+GTID_SLAVE_POS 0-2-24,1-3-4,2-1-3,3-1-2,4-3-2
+##############################################
+# Connection semantics change:
+# * True primary is back to connection 'master'
+# * True replica is back to connection 'slave'
+##############################################
+connection master;
+connection slave;
+CHANGE MASTER TO master_host='127.0.0.1', master_port=MASTER_PORT, master_user='root', master_use_gtid=slave_pos, master_demote_to_slave=1;
+#
+# Test Case 8: If gtid_binlog_pos is more recent than gtid_slave_pos,
+# and MASTER_DEMOTE_TO_SLAVE=1 is combined with a later call to
+# START SLAVE UNTIL master_gtid_pos=<G> such that
+# gtid_slave_pos < G < gtid_binlog_pos, then the slave should stop
+# immediately after SSU because gtid_slave_pos should be updated to be
+# after G.
+#
+connection master;
+set session gtid_domain_id= 0;
+INSERT INTO t1 VALUES (6);
+# Tagging ssu_middle_binlog_pos here to be used for START SLAVE UNTIL
+INSERT INTO t1 VALUES (7);
+include/save_master_gtid.inc
+# Ensure slave is up-to-date with master and then disable slave status
+connection slave;
+include/sync_with_master_gtid.inc
+include/stop_slave.inc
+connection master;
+SELECT VARIABLE_NAME, GLOBAL_VALUE FROM INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE VARIABLE_NAME LIKE 'gtid_binlog_pos' OR VARIABLE_NAME LIKE 'gtid_slave_pos' ORDER BY VARIABLE_NAME ASC;
+VARIABLE_NAME GLOBAL_VALUE
+GTID_BINLOG_POS 0-1-26,1-3-4,2-1-3,3-1-2,4-3-2
+GTID_SLAVE_POS 0-2-24,1-3-4,2-1-3,3-1-2,4-3-2
+CHANGE MASTER TO master_host='127.0.0.1', master_port=SLAVE_PORT, master_user='root', master_use_gtid=Slave_Pos, master_demote_to_slave=1;
+SELECT VARIABLE_NAME, GLOBAL_VALUE FROM INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE VARIABLE_NAME LIKE 'gtid_binlog_pos' OR VARIABLE_NAME LIKE 'gtid_slave_pos' ORDER BY VARIABLE_NAME ASC;
+VARIABLE_NAME GLOBAL_VALUE
+GTID_BINLOG_POS 0-1-26,1-3-4,2-1-3,3-1-2,4-3-2
+GTID_SLAVE_POS 0-1-26,1-3-4,2-1-3,3-1-2,4-3-2
+# GTID ssu_middle_binlog_pos should be considered in the past because
+# gtid_slave_pos should be updated using the latest binlog gtids.
+# The following call to sync_with_master_gtid.inc uses the latest
+# binlog position and should still succeed despite the SSU stop
+# position pointing to a previous event (because
+# master_demote_to_slave=1 merges gtid_binlog_pos into gtid_slave_pos).
+START SLAVE UNTIL master_gtid_pos="ssu_middle_binlog_pos";
+Warnings:
+Note 1278 It is recommended to use --skip-slave-start when doing step-by-step replication with START SLAVE UNTIL; otherwise, you will get problems if you get an unexpected slave's mariadbd restart
+# Slave needs time to start and stop automatically
+# Validating neither SQL nor IO threads are running..
+# ..success
+# Clean slave state of master
+RESET SLAVE ALL;
+#
+# Test Case 9: If gtid_slave_pos is more recent than gtid_binlog_pos
+# when demoting the master to become a slave, the replication state
+# should be preserved.
+#
+# rpl_change_master_demote.inc should force
+# gtid_slave_pos > gtid_binlog_pos in domain 0 (due to the step which
+# validates replication works)
+connection master;
+include/rpl_change_master_demote.inc
+##############################################
+# Connection semantics change:
+# * True primary is now connection 'slave'
+# * True replica is now connection 'master'
+##############################################
+connection master;
+SELECT VARIABLE_NAME, GLOBAL_VALUE FROM INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE VARIABLE_NAME LIKE 'gtid_binlog_pos' OR VARIABLE_NAME LIKE 'gtid_slave_pos' OR VARIABLE_NAME LIKE 'gtid_current_pos' ORDER BY VARIABLE_NAME ASC;
+VARIABLE_NAME GLOBAL_VALUE
+GTID_BINLOG_POS 0-1-26,1-3-4,2-1-3,3-1-2,4-3-2
+GTID_CURRENT_POS 0-1-26,1-3-4,2-1-3,3-1-2,4-3-2
+GTID_SLAVE_POS 0-1-26,1-3-4,2-1-3,3-1-2,4-3-2
+# First ensure gtid_slave_pos after master_demote_to_slave matches
+# gtid_current_pos calculation
+CHANGE MASTER TO master_host='127.0.0.1', master_port=SLAVE_PORT, master_user='root', master_use_gtid=slave_pos, master_demote_to_slave=1 , ignore_domain_ids=(2,3);
+SELECT VARIABLE_NAME, GLOBAL_VALUE FROM INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE VARIABLE_NAME LIKE 'gtid_binlog_pos' OR VARIABLE_NAME LIKE 'gtid_slave_pos' OR VARIABLE_NAME LIKE 'gtid_current_pos' ORDER BY VARIABLE_NAME ASC;
+VARIABLE_NAME GLOBAL_VALUE
+GTID_BINLOG_POS 0-1-26,1-3-4,2-1-3,3-1-2,4-3-2
+GTID_CURRENT_POS 0-1-26,1-3-4,2-1-3,3-1-2,4-3-2
+GTID_SLAVE_POS 0-1-26,1-3-4,2-1-3,3-1-2,4-3-2
+# Validating gtid_slave_pos == gtid_binlog_pos..
+# ..success
+connection slave;
+Warnings:
+Note 1255 Slave already has been stopped
+# Ensuring replication works correctly after role swap
+connection slave;
+set session gtid_domain_id= 0;
+CREATE TABLE repl_t (a int);
+INSERT INTO repl_t VALUES (1);
+connection master;
+# Validating that replication works..
+# ..success
+# Cleaning up replication check data
+connection slave;
+DROP TABLE repl_t;
+connection master;
+SELECT VARIABLE_NAME, GLOBAL_VALUE FROM INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE VARIABLE_NAME LIKE 'gtid_binlog_pos' OR VARIABLE_NAME LIKE 'gtid_slave_pos' OR VARIABLE_NAME LIKE 'gtid_current_pos' ORDER BY VARIABLE_NAME ASC;
+VARIABLE_NAME GLOBAL_VALUE
+GTID_BINLOG_POS 0-1-26,1-3-4,2-1-3,3-1-2,4-3-2
+GTID_CURRENT_POS 0-2-29,1-3-4,2-1-3,3-1-2,4-3-2
+GTID_SLAVE_POS 0-2-29,1-3-4,2-1-3,3-1-2,4-3-2
+##############################################
+# Connection semantics change:
+# * True primary is back to connection 'master'
+# * True replica is back to connection 'slave'
+##############################################
+connection master;
+connection slave;
+CHANGE MASTER TO master_host='127.0.0.1', master_port=MASTER_PORT, master_user='root', master_use_gtid=slave_pos, master_demote_to_slave=1;
+# Demote master to slave with the more recent gtid_slave_pos
+connection master;
+CHANGE MASTER TO master_host='127.0.0.1', master_port=SLAVE_PORT, master_user='root', master_use_gtid=slave_pos, master_demote_to_slave=1;
+# Validating gtid_slave_pos is unchanged..
+# ..success
+# Validating gtid_slave_pos == gtid_binlog_pos..
+# ..success
+# Clean slave state of master
+RESET SLAVE ALL;
+#
+# Test Case 10: MASTER_DEMOTE_TO_SLAVE=0 should not change replication
+# state, regardless of gtid_slave_pos in comparison to gtid_binlog_pos.
+#
+# In domain 0, make gtid_slave_pos > gtid_binlog_pos
+connection master;
+include/rpl_change_master_demote.inc
+##############################################
+# Connection semantics change:
+# * True primary is now connection 'slave'
+# * True replica is now connection 'master'
+##############################################
+connection master;
+SELECT VARIABLE_NAME, GLOBAL_VALUE FROM INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE VARIABLE_NAME LIKE 'gtid_binlog_pos' OR VARIABLE_NAME LIKE 'gtid_slave_pos' OR VARIABLE_NAME LIKE 'gtid_current_pos' ORDER BY VARIABLE_NAME ASC;
+VARIABLE_NAME GLOBAL_VALUE
+GTID_BINLOG_POS 0-1-26,1-3-4,2-1-3,3-1-2,4-3-2
+GTID_CURRENT_POS 0-2-29,1-3-4,2-1-3,3-1-2,4-3-2
+GTID_SLAVE_POS 0-2-29,1-3-4,2-1-3,3-1-2,4-3-2
+# First ensure gtid_slave_pos after master_demote_to_slave matches
+# gtid_current_pos calculation
+CHANGE MASTER TO master_host='127.0.0.1', master_port=SLAVE_PORT, master_user='root', master_use_gtid=slave_pos, master_demote_to_slave=1 , ignore_domain_ids=(2,3);
+SELECT VARIABLE_NAME, GLOBAL_VALUE FROM INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE VARIABLE_NAME LIKE 'gtid_binlog_pos' OR VARIABLE_NAME LIKE 'gtid_slave_pos' OR VARIABLE_NAME LIKE 'gtid_current_pos' ORDER BY VARIABLE_NAME ASC;
+VARIABLE_NAME GLOBAL_VALUE
+GTID_BINLOG_POS 0-1-26,1-3-4,2-1-3,3-1-2,4-3-2
+GTID_CURRENT_POS 0-2-29,1-3-4,2-1-3,3-1-2,4-3-2
+GTID_SLAVE_POS 0-2-29,1-3-4,2-1-3,3-1-2,4-3-2
+# Validating gtid_slave_pos == gtid_binlog_pos..
+# ..success
+connection slave;
+# Ensuring replication works correctly after role swap
+connection slave;
+set session gtid_domain_id= 0;
+CREATE TABLE repl_t (a int);
+INSERT INTO repl_t VALUES (1);
+connection master;
+# Validating that replication works..
+# ..success
+# Cleaning up replication check data
+connection slave;
+DROP TABLE repl_t;
+connection master;
+SELECT VARIABLE_NAME, GLOBAL_VALUE FROM INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE VARIABLE_NAME LIKE 'gtid_binlog_pos' OR VARIABLE_NAME LIKE 'gtid_slave_pos' OR VARIABLE_NAME LIKE 'gtid_current_pos' ORDER BY VARIABLE_NAME ASC;
+VARIABLE_NAME GLOBAL_VALUE
+GTID_BINLOG_POS 0-1-26,1-3-4,2-1-3,3-1-2,4-3-2
+GTID_CURRENT_POS 0-2-32,1-3-4,2-1-3,3-1-2,4-3-2
+GTID_SLAVE_POS 0-2-32,1-3-4,2-1-3,3-1-2,4-3-2
+##############################################
+# Connection semantics change:
+# * True primary is back to connection 'master'
+# * True replica is back to connection 'slave'
+##############################################
+connection master;
+connection slave;
+CHANGE MASTER TO master_host='127.0.0.1', master_port=MASTER_PORT, master_user='root', master_use_gtid=slave_pos, master_demote_to_slave=1;
+# Tag gtid_slave_pos now (before binlog updates) for later comparison
+connection master;
+# In domain 1, make gtid_slave_pos < gtid_binlog_pos
+set session gtid_domain_id= 1;
+INSERT INTO t2 VALUES (4);
+# In domains 2, 3 and 4, gtid_slave_pos == gtid_binlog_pos
+# Include a new domain id (5)
+set session gtid_domain_id= 5;
+CREATE TABLE t6 (a int);
+INSERT INTO t6 VALUES (1);
+SELECT VARIABLE_NAME, GLOBAL_VALUE FROM INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE VARIABLE_NAME LIKE 'gtid_binlog_pos' OR VARIABLE_NAME LIKE 'gtid_slave_pos' ORDER BY VARIABLE_NAME ASC;
+VARIABLE_NAME GLOBAL_VALUE
+GTID_BINLOG_POS 0-1-26,1-1-5,2-1-3,3-1-2,4-3-2,5-1-2
+GTID_SLAVE_POS 0-2-32,1-3-4,2-1-3,3-1-2,4-3-2
+CHANGE MASTER TO master_host='127.0.0.1', master_port=SLAVE_PORT, master_user='root', master_use_gtid=slave_pos, master_demote_to_slave=0;
+# Validating gtid_slave_pos is unchanged..
+# ..success
+# Clean slave state of master
+CHANGE MASTER TO master_host='127.0.0.1', master_port=SLAVE_PORT, master_user='root', master_use_gtid=slave_pos, master_demote_to_slave=1;
+RESET SLAVE ALL;
+SELECT VARIABLE_NAME, GLOBAL_VALUE FROM INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE VARIABLE_NAME LIKE 'gtid_binlog_pos' OR VARIABLE_NAME LIKE 'gtid_slave_pos' ORDER BY VARIABLE_NAME ASC;
+VARIABLE_NAME GLOBAL_VALUE
+GTID_BINLOG_POS 0-1-26,1-1-5,2-1-3,3-1-2,4-3-2,5-1-2
+GTID_SLAVE_POS 0-2-32,1-1-5,2-1-3,3-1-2,4-3-2,5-1-2
+#
+#
+# Stop slave for error test cases
+connection slave;
+include/stop_slave.inc
+#
+# Error Case 1: MASTER_DEMOTE_TO_SLAVE=1 combined with
+# MASTER_USE_GTID=NO should result in an error.
+#
+connection master;
+CHANGE MASTER TO master_host='127.0.0.1', master_port=SLAVE_PORT, master_user='root', master_use_gtid=no, master_demote_to_slave=1;
+ERROR HY000: CHANGE MASTER TO option 'MASTER_DEMOTE_TO_SLAVE=TRUE' is missing requirement Using_Gtid=Slave_Pos
+#
+# Error Case 2: Error when MASTER_DEMOTE_TO_SLAVE=1 is used without
+# binary logging enabled.
+#
+connection master;
+# Restarting master without binary log
+CHANGE MASTER TO master_host='127.0.0.1', master_port=SLAVE_PORT, master_user='root', master_use_gtid=Slave_Pos, master_demote_to_slave=1;
+ERROR HY000: You are not using binary logging
+# Restarting master to re-enable binary log
+connection server_1;
+connection default;
+#
+# Error Case 3: Error when MASTER_DEMOTE_TO_SLAVE is provided a
+# non-boolean value.
+#
+connection master;
+CHANGE MASTER TO master_host='127.0.0.1', master_port=SLAVE_PORT, master_user='root', master_use_gtid=Slave_Pos, master_demote_to_slave=invalid;
+ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'invalid' at line 1
+#
+# Cleanup
+#
+connection master;
+DROP TABLE t1, t2, t3, t4, t5, t6;
+include/save_master_gtid.inc
+connection slave;
+include/start_slave.inc
+include/sync_with_master_gtid.inc
+include/rpl_end.inc
+#
+### End rpl_change_master_demote.test
diff --git a/mysql-test/suite/rpl/r/rpl_checksum.result b/mysql-test/suite/rpl/r/rpl_checksum.result
index 21d8ca22feb..7ade3067eae 100644
--- a/mysql-test/suite/rpl/r/rpl_checksum.result
+++ b/mysql-test/suite/rpl/r/rpl_checksum.result
@@ -1,5 +1,10 @@
include/master-slave.inc
[connection master]
+connection slave;
+include/stop_slave.inc
+CHANGE MASTER TO MASTER_USE_GTID=NO;
+include/start_slave.inc
+connection master;
call mtr.add_suppression('Slave can not handle replication events with the checksum that master is configured to log');
call mtr.add_suppression('Replication event checksum verification failed');
call mtr.add_suppression('Relay log write failure: could not queue event from master');
@@ -122,7 +127,9 @@ must be zero
0
connection slave;
stop slave;
-reset slave;
+include/reset_slave.inc
+Warnings:
+Note 4190 RESET SLAVE is implicitly changing the value of 'Using_Gtid' from 'No' to 'Slave_Pos'
set @@global.binlog_checksum= IF(floor((rand()*1000)%2), "CRC32", "NONE");
flush logs;
connection master;
diff --git a/mysql-test/suite/rpl/r/rpl_circular_for_4_hosts.result b/mysql-test/suite/rpl/r/rpl_circular_for_4_hosts.result
index 4ec1e2512d2..85cc0cc7ebc 100644
--- a/mysql-test/suite/rpl/r/rpl_circular_for_4_hosts.result
+++ b/mysql-test/suite/rpl/r/rpl_circular_for_4_hosts.result
@@ -184,6 +184,8 @@ connection server_3;
RESET MASTER;
connection server_4;
RESET SLAVE;
+Warnings:
+Note 4190 RESET SLAVE is implicitly changing the value of 'Using_Gtid' from 'No' to 'Slave_Pos'
include/rpl_change_topology.inc [new topology=1->2->3->4->1]
include/start_slave.inc
connection server_3;
diff --git a/mysql-test/suite/rpl/r/rpl_colSize.result b/mysql-test/suite/rpl/r/rpl_colSize.result
index 5d72ddcec09..95a30c6ee4d 100644
--- a/mysql-test/suite/rpl/r/rpl_colSize.result
+++ b/mysql-test/suite/rpl/r/rpl_colSize.result
@@ -6,7 +6,7 @@ DROP TABLE IF EXISTS t1;
connection slave;
STOP SLAVE;
include/wait_for_slave_to_stop.inc
-RESET SLAVE;
+include/reset_slave.inc
SET @saved_slave_type_conversions = @@slave_type_conversions;
SET GLOBAL SLAVE_TYPE_CONVERSIONS = 'ALL_NON_LOSSY';
CREATE TABLE t1 (
diff --git a/mysql-test/suite/rpl/r/rpl_corruption.result b/mysql-test/suite/rpl/r/rpl_corruption.result
index 73bb373d6be..7c60e15a567 100644
--- a/mysql-test/suite/rpl/r/rpl_corruption.result
+++ b/mysql-test/suite/rpl/r/rpl_corruption.result
@@ -1,5 +1,10 @@
include/master-slave.inc
[connection master]
+connection slave;
+include/stop_slave.inc
+CHANGE MASTER TO MASTER_USE_GTID=NO;
+include/start_slave.inc
+connection master;
call mtr.add_suppression('Found invalid event in binary log');
call mtr.add_suppression('Slave I/O: Relay log write failure: could not queue event from master');
call mtr.add_suppression('event read from binlog did not pass crc check');
diff --git a/mysql-test/suite/rpl/r/rpl_cross_version.result b/mysql-test/suite/rpl/r/rpl_cross_version.result
index b94b02a24ff..1b67542c106 100644
--- a/mysql-test/suite/rpl/r/rpl_cross_version.result
+++ b/mysql-test/suite/rpl/r/rpl_cross_version.result
@@ -16,5 +16,7 @@ zero
==== Clean up ====
include/stop_slave_sql.inc
include/cleanup_fake_relay_log.inc
+Warnings:
+Note 4190 RESET SLAVE is implicitly changing the value of 'Using_Gtid' from 'No' to 'Slave_Pos'
drop table t1, t3;
include/rpl_end.inc
diff --git a/mysql-test/suite/rpl/r/rpl_deadlock_innodb.result b/mysql-test/suite/rpl/r/rpl_deadlock_innodb.result
index 491b27252b4..16b00cee123 100644
--- a/mysql-test/suite/rpl/r/rpl_deadlock_innodb.result
+++ b/mysql-test/suite/rpl/r/rpl_deadlock_innodb.result
@@ -63,7 +63,7 @@ include/check_slave_is_running.inc
connection slave;
include/stop_slave.inc
DELETE FROM t2;
-CHANGE MASTER TO MASTER_LOG_POS=<master_pos_begin>;
+CHANGE MASTER TO MASTER_LOG_POS=<master_pos_begin>, MASTER_USE_GTID=NO;
BEGIN;
SELECT * FROM t1 FOR UPDATE;
a
@@ -95,7 +95,7 @@ Warnings:
Warning 1292 Truncated incorrect max_relay_log_size value: '0'
include/stop_slave.inc
DELETE FROM t2;
-CHANGE MASTER TO MASTER_LOG_POS=<master_pos_begin>;
+CHANGE MASTER TO MASTER_LOG_POS=<master_pos_begin>, MASTER_USE_GTID=NO;
BEGIN;
SELECT * FROM t1 FOR UPDATE;
a
diff --git a/mysql-test/suite/rpl/r/rpl_delayed_slave.result b/mysql-test/suite/rpl/r/rpl_delayed_slave.result
index e7daa3328ce..c8c3bc36485 100644
--- a/mysql-test/suite/rpl/r/rpl_delayed_slave.result
+++ b/mysql-test/suite/rpl/r/rpl_delayed_slave.result
@@ -3,6 +3,9 @@ include/master-slave.inc
call mtr.add_suppression("Unsafe statement written to the binary log using statement format");
connection slave;
call mtr.add_suppression("Unsafe statement written to the binary log using statement format");
+include/stop_slave.inc
+CHANGE MASTER TO MASTER_USE_GTID=NO;
+include/start_slave.inc
connection master;
[on master]
CREATE TABLE t1 (a VARCHAR(100), b INT);
@@ -153,7 +156,9 @@ CHANGE MASTER TO MASTER_DELAY = 71;
include/start_slave.inc
# Asserted this: Delay should be 71 when we set it to 71
include/stop_slave.inc
-RESET SLAVE;
+include/reset_slave.inc
+Warnings:
+Note 4190 RESET SLAVE is implicitly changing the value of 'Using_Gtid' from 'No' to 'Slave_Pos'
[on master]
connection master;
RESET MASTER;
diff --git a/mysql-test/suite/rpl/r/rpl_extra_col_master_innodb.result b/mysql-test/suite/rpl/r/rpl_extra_col_master_innodb.result
index 5865b75550f..be98b7e3dcd 100644
--- a/mysql-test/suite/rpl/r/rpl_extra_col_master_innodb.result
+++ b/mysql-test/suite/rpl/r/rpl_extra_col_master_innodb.result
@@ -437,7 +437,7 @@ connection master;
** Stop and Reset Slave **
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
** create table slave side **
CREATE TABLE t10 (a INT PRIMARY KEY, b BLOB, c CHAR(5)
@@ -482,7 +482,7 @@ connection slave;
*** Create t11 on slave ***
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
CREATE TABLE t11 (a INT PRIMARY KEY, b BLOB, c VARCHAR(254)
) ENGINE='InnoDB';
@@ -524,7 +524,7 @@ connection slave;
*** Create t12 on slave ***
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
CREATE TABLE t12 (a INT PRIMARY KEY, b BLOB, c BLOB
) ENGINE='InnoDB';
@@ -573,7 +573,7 @@ connection slave;
*** Create t14 on slave ***
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
CREATE TABLE t14 (c1 INT PRIMARY KEY, c4 BLOB, c5 CHAR(5)
) ENGINE='InnoDB';
@@ -638,7 +638,7 @@ connection slave;
include/wait_for_slave_sql_error.inc [errno=1091]
Last_SQL_Error = 'Error 'Can't DROP COLUMN `c7`; check that it exists' on query. Default database: 'test'. Query: 'ALTER TABLE t14 DROP COLUMN c7''
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
*** Drop t14 ***
DROP TABLE t14;
@@ -655,7 +655,9 @@ START SLAVE;
*** Create t15 on slave ***
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
+Warnings:
+Warning 1948 Specified value for @@gtid_slave_pos contains no value for replication domain 0. This conflicts with the binary log which contains GTID 0-2-103. If MASTER_GTID_POS=CURRENT_POS is used, the binlog position will override the new value of @@gtid_slave_pos
CREATE TABLE t15 (c1 INT PRIMARY KEY, c4 BLOB, c5 CHAR(5)
) ENGINE='InnoDB';
@@ -693,7 +695,9 @@ connection slave;
include/wait_for_slave_sql_error.inc [errno=1054]
Last_SQL_Error = 'Error 'Unknown column 'c7' in 't15'' on query. Default database: 'test'. Query: 'ALTER TABLE t15 ADD COLUMN c2 DECIMAL(8,2) AFTER c7''
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
+Warnings:
+Warning 1948 Specified value for @@gtid_slave_pos contains no value for replication domain 0. This conflicts with the binary log which contains GTID 0-2-104. If MASTER_GTID_POS=CURRENT_POS is used, the binlog position will override the new value of @@gtid_slave_pos
*** Drop t15 ***
DROP TABLE t15;
@@ -710,7 +714,9 @@ START SLAVE;
*** Create t16 on slave ***
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
+Warnings:
+Warning 1948 Specified value for @@gtid_slave_pos contains no value for replication domain 0. This conflicts with the binary log which contains GTID 0-2-105. If MASTER_GTID_POS=CURRENT_POS is used, the binlog position will override the new value of @@gtid_slave_pos
CREATE TABLE t16 (c1 INT PRIMARY KEY, c4 BLOB, c5 CHAR(5)
) ENGINE='InnoDB';
@@ -748,7 +754,9 @@ connection slave;
include/wait_for_slave_sql_error.inc [errno=1072]
Last_SQL_Error = 'Error 'Key column 'c6' doesn't exist in table' on query. Default database: 'test'. Query: 'CREATE INDEX part_of_c6 ON t16 (c6)''
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
+Warnings:
+Warning 1948 Specified value for @@gtid_slave_pos contains no value for replication domain 0. This conflicts with the binary log which contains GTID 0-2-106. If MASTER_GTID_POS=CURRENT_POS is used, the binlog position will override the new value of @@gtid_slave_pos
*** Drop t16 ***
DROP TABLE t16;
@@ -765,7 +773,9 @@ START SLAVE;
*** Create t17 on slave ***
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
+Warnings:
+Warning 1948 Specified value for @@gtid_slave_pos contains no value for replication domain 0. This conflicts with the binary log which contains GTID 0-2-107. If MASTER_GTID_POS=CURRENT_POS is used, the binlog position will override the new value of @@gtid_slave_pos
CREATE TABLE t17 (c1 INT PRIMARY KEY, c4 BLOB, c5 CHAR(5)
) ENGINE='InnoDB';
@@ -831,7 +841,7 @@ connection slave;
*** Create t18 on slave ***
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
CREATE TABLE t18 (c1 INT PRIMARY KEY, c4 BLOB, c5 CHAR(5)
) ENGINE='InnoDB';
@@ -896,7 +906,7 @@ connection slave;
*** Create t5 on slave ***
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
CREATE TABLE t5 (c1 INT PRIMARY KEY, c4 BLOB, c5 CHAR(5)
) ENGINE='InnoDB';
diff --git a/mysql-test/suite/rpl/r/rpl_extra_col_master_myisam.result b/mysql-test/suite/rpl/r/rpl_extra_col_master_myisam.result
index f47d79b5b86..53b20b188ba 100644
--- a/mysql-test/suite/rpl/r/rpl_extra_col_master_myisam.result
+++ b/mysql-test/suite/rpl/r/rpl_extra_col_master_myisam.result
@@ -437,7 +437,7 @@ connection master;
** Stop and Reset Slave **
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
** create table slave side **
CREATE TABLE t10 (a INT PRIMARY KEY, b BLOB, c CHAR(5)
@@ -482,7 +482,7 @@ connection slave;
*** Create t11 on slave ***
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
CREATE TABLE t11 (a INT PRIMARY KEY, b BLOB, c VARCHAR(254)
) ENGINE='MyISAM';
@@ -524,7 +524,7 @@ connection slave;
*** Create t12 on slave ***
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
CREATE TABLE t12 (a INT PRIMARY KEY, b BLOB, c BLOB
) ENGINE='MyISAM';
@@ -573,7 +573,7 @@ connection slave;
*** Create t14 on slave ***
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
CREATE TABLE t14 (c1 INT PRIMARY KEY, c4 BLOB, c5 CHAR(5)
) ENGINE='MyISAM';
@@ -638,7 +638,7 @@ connection slave;
include/wait_for_slave_sql_error.inc [errno=1091]
Last_SQL_Error = 'Error 'Can't DROP COLUMN `c7`; check that it exists' on query. Default database: 'test'. Query: 'ALTER TABLE t14 DROP COLUMN c7''
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
*** Drop t14 ***
DROP TABLE t14;
@@ -655,7 +655,9 @@ START SLAVE;
*** Create t15 on slave ***
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
+Warnings:
+Warning 1948 Specified value for @@gtid_slave_pos contains no value for replication domain 0. This conflicts with the binary log which contains GTID 0-2-103. If MASTER_GTID_POS=CURRENT_POS is used, the binlog position will override the new value of @@gtid_slave_pos
CREATE TABLE t15 (c1 INT PRIMARY KEY, c4 BLOB, c5 CHAR(5)
) ENGINE='MyISAM';
@@ -693,7 +695,9 @@ connection slave;
include/wait_for_slave_sql_error.inc [errno=1054]
Last_SQL_Error = 'Error 'Unknown column 'c7' in 't15'' on query. Default database: 'test'. Query: 'ALTER TABLE t15 ADD COLUMN c2 DECIMAL(8,2) AFTER c7''
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
+Warnings:
+Warning 1948 Specified value for @@gtid_slave_pos contains no value for replication domain 0. This conflicts with the binary log which contains GTID 0-2-104. If MASTER_GTID_POS=CURRENT_POS is used, the binlog position will override the new value of @@gtid_slave_pos
*** Drop t15 ***
DROP TABLE t15;
@@ -710,7 +714,9 @@ START SLAVE;
*** Create t16 on slave ***
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
+Warnings:
+Warning 1948 Specified value for @@gtid_slave_pos contains no value for replication domain 0. This conflicts with the binary log which contains GTID 0-2-105. If MASTER_GTID_POS=CURRENT_POS is used, the binlog position will override the new value of @@gtid_slave_pos
CREATE TABLE t16 (c1 INT PRIMARY KEY, c4 BLOB, c5 CHAR(5)
) ENGINE='MyISAM';
@@ -748,7 +754,9 @@ connection slave;
include/wait_for_slave_sql_error.inc [errno=1072]
Last_SQL_Error = 'Error 'Key column 'c6' doesn't exist in table' on query. Default database: 'test'. Query: 'CREATE INDEX part_of_c6 ON t16 (c6)''
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
+Warnings:
+Warning 1948 Specified value for @@gtid_slave_pos contains no value for replication domain 0. This conflicts with the binary log which contains GTID 0-2-106. If MASTER_GTID_POS=CURRENT_POS is used, the binlog position will override the new value of @@gtid_slave_pos
*** Drop t16 ***
DROP TABLE t16;
@@ -765,7 +773,9 @@ START SLAVE;
*** Create t17 on slave ***
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
+Warnings:
+Warning 1948 Specified value for @@gtid_slave_pos contains no value for replication domain 0. This conflicts with the binary log which contains GTID 0-2-107. If MASTER_GTID_POS=CURRENT_POS is used, the binlog position will override the new value of @@gtid_slave_pos
CREATE TABLE t17 (c1 INT PRIMARY KEY, c4 BLOB, c5 CHAR(5)
) ENGINE='MyISAM';
@@ -831,7 +841,7 @@ connection slave;
*** Create t18 on slave ***
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
CREATE TABLE t18 (c1 INT PRIMARY KEY, c4 BLOB, c5 CHAR(5)
) ENGINE='MyISAM';
@@ -896,7 +906,7 @@ connection slave;
*** Create t5 on slave ***
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
CREATE TABLE t5 (c1 INT PRIMARY KEY, c4 BLOB, c5 CHAR(5)
) ENGINE='MyISAM';
diff --git a/mysql-test/suite/rpl/r/rpl_extra_col_slave_innodb.result b/mysql-test/suite/rpl/r/rpl_extra_col_slave_innodb.result
index 13077c08e89..ea784e7fc21 100644
--- a/mysql-test/suite/rpl/r/rpl_extra_col_slave_innodb.result
+++ b/mysql-test/suite/rpl/r/rpl_extra_col_slave_innodb.result
@@ -5,7 +5,7 @@ call mtr.add_suppression("Slave SQL.*Column [0-9] of table .test.t[0-9]*. cannot
**** Diff Table Def Start ****
connection slave;
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
SET @saved_slave_type_conversions = @@slave_type_conversions;
SET GLOBAL SLAVE_TYPE_CONVERSIONS = 'ALL_NON_LOSSY';
CREATE TABLE t1 (a INT, b INT PRIMARY KEY, c CHAR(20),
@@ -42,7 +42,7 @@ DROP TABLE t1;
connection slave;
*** Create t2 on slave ***
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
CREATE TABLE t2 (a INT, b INT PRIMARY KEY, c CHAR(5),
d FLOAT DEFAULT '2.00',
e CHAR(5) DEFAULT 'TEST2')
@@ -66,7 +66,9 @@ START SLAVE;
include/wait_for_slave_sql_error.inc [errno=1677]
Last_SQL_Error = 'Column 2 of table 'test.t2' cannot be converted from type 'char(10 octets)' to type 'char(5 octets) character set latin1''
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
+Warnings:
+Warning 1948 Specified value for @@gtid_slave_pos contains no value for replication domain 0. This conflicts with the binary log which contains GTID 0-2-4. If MASTER_GTID_POS=CURRENT_POS is used, the binlog position will override the new value of @@gtid_slave_pos
SELECT * FROM t2 ORDER BY a;
a b c d e
connection master;
@@ -79,7 +81,7 @@ DROP TABLE t2;
connection slave;
*** Create t3 on slave ***
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
CREATE TABLE t3 (a INT, b INT PRIMARY KEY, c CHAR(20),
d FLOAT DEFAULT '2.00',
e CHAR(5) DEFAULT 'TEST2')
@@ -109,7 +111,7 @@ DROP TABLE t3;
connection slave;
*** Create t4 on slave ***
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
CREATE TABLE t4 (a INT, b INT PRIMARY KEY, c CHAR(20),
d FLOAT DEFAULT '2.00',
e CHAR(5) DEFAULT 'TEST2')
@@ -138,7 +140,7 @@ DROP TABLE t4;
connection slave;
*** Create t5 on slave ***
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
CREATE TABLE t5 (a INT PRIMARY KEY, b CHAR(5),
c FLOAT, d INT, e DOUBLE,
f DECIMAL(8,2))ENGINE='InnoDB';
@@ -167,7 +169,7 @@ DROP TABLE t5;
connection slave;
*** Create t6 on slave ***
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
CREATE TABLE t6 (a INT PRIMARY KEY, b CHAR(5),
c FLOAT, d INT)ENGINE='InnoDB';
*** Create t6 on Master ***
@@ -198,7 +200,7 @@ connection slave;
**** Extra Colums Start ****
*** Create t7 on slave ***
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
CREATE TABLE t7 (a INT KEY, b BLOB, c CHAR(5),
d TIMESTAMP NULL DEFAULT '0000-00-00 00:00:00',
e CHAR(20) DEFAULT 'Extra Column Testing')
@@ -234,7 +236,7 @@ DROP TABLE t7;
connection slave;
*** Create t8 on slave ***
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
CREATE TABLE t8 (a INT KEY, b BLOB, c CHAR(5),
d TIMESTAMP NULL DEFAULT '0000-00-00 00:00:00',
e INT)ENGINE='InnoDB';
@@ -256,7 +258,7 @@ connection master;
DROP TABLE t8;
connection slave;
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
CREATE TABLE t9 (a INT KEY, b BLOB, c CHAR(5),
d TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP,
@@ -289,7 +291,7 @@ DROP TABLE t9;
connection slave;
*** Create t10 on slave ***
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
CREATE TABLE t10 (a INT KEY, b BLOB, f DOUBLE DEFAULT '233',
c CHAR(5), e INT DEFAULT '1')ENGINE='InnoDB';
*** Create t10 on Master ***
@@ -317,7 +319,7 @@ DROP TABLE t10;
connection slave;
*** Create t11 on slave ***
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
CREATE TABLE t11 (a INT KEY, b BLOB, f INT,
c CHAR(5) DEFAULT 'test', e INT DEFAULT '1')ENGINE='InnoDB';
*** Create t11 on Master ***
@@ -345,7 +347,7 @@ DROP TABLE t11;
connection slave;
*** Create t12 on slave ***
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
CREATE TABLE t12 (a INT KEY, b BLOB, f TEXT,
c CHAR(5) DEFAULT 'test', e INT DEFAULT '1')ENGINE='InnoDB';
*** Create t12 on Master ***
@@ -381,7 +383,7 @@ connection slave;
*** BUG 22177 Start ***
*** Create t13 on slave ***
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
CREATE TABLE t13 (a INT KEY, b BLOB, c CHAR(5),
d INT DEFAULT '1',
e TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP
@@ -419,7 +421,7 @@ connection slave;
*** Alter Master Table Testing Start ***
*** Create t14 on slave ***
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
CREATE TABLE t14 (c1 INT KEY, c4 BLOB, c5 CHAR(5),
c6 INT DEFAULT '1',
c7 TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP
@@ -455,7 +457,7 @@ c1 c2 c3 c4 c5 c6 c7
3 3.00 If is does not, I will open a bug b1b1b1b1b1b1b1b1 QA 1 CURRENT_TIMESTAMP
*** Create t14a on slave ***
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
CREATE TABLE t14a (c1 INT KEY, c4 BLOB, c5 CHAR(5),
c6 INT DEFAULT '1',
c7 TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP
@@ -488,7 +490,7 @@ c1 c4 c5 c6 c7
2 b1b1b1b1b1b1b1b1 JOE 1 CURRENT_TIMESTAMP
3 b1b1b1b1b1b1b1b1 QA 1 CURRENT_TIMESTAMP
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
*** Master Drop c5 ***
connection master;
ALTER TABLE t14a DROP COLUMN c5;
@@ -547,7 +549,7 @@ DROP TABLE t14;
connection slave;
*** Create t15 on slave ***
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
CREATE TABLE t15 (c1 INT KEY, c2 DECIMAL(8,2), c3 TEXT,
c4 BLOB, c5 CHAR(5),
c6 INT DEFAULT '1',
@@ -615,7 +617,7 @@ DROP TABLE t15;
connection slave;
*** Create t16 on slave ***
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
CREATE TABLE t16 (c1 INT KEY, c2 DECIMAL(8,2), c3 TEXT,
c4 BLOB, c5 CHAR(5),
c6 INT DEFAULT '1',
@@ -687,7 +689,7 @@ connection slave;
*** Alter Master End ***
*** Create t17 on slave ***
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
CREATE TABLE t17 (a SMALLINT, b INT PRIMARY KEY, c CHAR(5),
d FLOAT DEFAULT '2.00',
e CHAR(5) DEFAULT 'TEST2')
diff --git a/mysql-test/suite/rpl/r/rpl_extra_col_slave_myisam.result b/mysql-test/suite/rpl/r/rpl_extra_col_slave_myisam.result
index 897a87db66f..8ad7e98798a 100644
--- a/mysql-test/suite/rpl/r/rpl_extra_col_slave_myisam.result
+++ b/mysql-test/suite/rpl/r/rpl_extra_col_slave_myisam.result
@@ -5,7 +5,7 @@ call mtr.add_suppression("Slave SQL.*Column [0-9] of table .test.t[0-9]*. cannot
**** Diff Table Def Start ****
connection slave;
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
SET @saved_slave_type_conversions = @@slave_type_conversions;
SET GLOBAL SLAVE_TYPE_CONVERSIONS = 'ALL_NON_LOSSY';
CREATE TABLE t1 (a INT, b INT PRIMARY KEY, c CHAR(20),
@@ -42,7 +42,7 @@ DROP TABLE t1;
connection slave;
*** Create t2 on slave ***
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
CREATE TABLE t2 (a INT, b INT PRIMARY KEY, c CHAR(5),
d FLOAT DEFAULT '2.00',
e CHAR(5) DEFAULT 'TEST2')
@@ -66,7 +66,9 @@ START SLAVE;
include/wait_for_slave_sql_error.inc [errno=1677]
Last_SQL_Error = 'Column 2 of table 'test.t2' cannot be converted from type 'char(10 octets)' to type 'char(5 octets) character set latin1''
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
+Warnings:
+Warning 1948 Specified value for @@gtid_slave_pos contains no value for replication domain 0. This conflicts with the binary log which contains GTID 0-2-4. If MASTER_GTID_POS=CURRENT_POS is used, the binlog position will override the new value of @@gtid_slave_pos
SELECT * FROM t2 ORDER BY a;
a b c d e
connection master;
@@ -79,7 +81,7 @@ DROP TABLE t2;
connection slave;
*** Create t3 on slave ***
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
CREATE TABLE t3 (a INT, b INT PRIMARY KEY, c CHAR(20),
d FLOAT DEFAULT '2.00',
e CHAR(5) DEFAULT 'TEST2')
@@ -109,7 +111,7 @@ DROP TABLE t3;
connection slave;
*** Create t4 on slave ***
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
CREATE TABLE t4 (a INT, b INT PRIMARY KEY, c CHAR(20),
d FLOAT DEFAULT '2.00',
e CHAR(5) DEFAULT 'TEST2')
@@ -138,7 +140,7 @@ DROP TABLE t4;
connection slave;
*** Create t5 on slave ***
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
CREATE TABLE t5 (a INT PRIMARY KEY, b CHAR(5),
c FLOAT, d INT, e DOUBLE,
f DECIMAL(8,2))ENGINE='MyISAM';
@@ -167,7 +169,7 @@ DROP TABLE t5;
connection slave;
*** Create t6 on slave ***
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
CREATE TABLE t6 (a INT PRIMARY KEY, b CHAR(5),
c FLOAT, d INT)ENGINE='MyISAM';
*** Create t6 on Master ***
@@ -198,7 +200,7 @@ connection slave;
**** Extra Colums Start ****
*** Create t7 on slave ***
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
CREATE TABLE t7 (a INT KEY, b BLOB, c CHAR(5),
d TIMESTAMP NULL DEFAULT '0000-00-00 00:00:00',
e CHAR(20) DEFAULT 'Extra Column Testing')
@@ -234,7 +236,7 @@ DROP TABLE t7;
connection slave;
*** Create t8 on slave ***
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
CREATE TABLE t8 (a INT KEY, b BLOB, c CHAR(5),
d TIMESTAMP NULL DEFAULT '0000-00-00 00:00:00',
e INT)ENGINE='MyISAM';
@@ -256,7 +258,7 @@ connection master;
DROP TABLE t8;
connection slave;
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
CREATE TABLE t9 (a INT KEY, b BLOB, c CHAR(5),
d TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP,
@@ -289,7 +291,7 @@ DROP TABLE t9;
connection slave;
*** Create t10 on slave ***
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
CREATE TABLE t10 (a INT KEY, b BLOB, f DOUBLE DEFAULT '233',
c CHAR(5), e INT DEFAULT '1')ENGINE='MyISAM';
*** Create t10 on Master ***
@@ -317,7 +319,7 @@ DROP TABLE t10;
connection slave;
*** Create t11 on slave ***
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
CREATE TABLE t11 (a INT KEY, b BLOB, f INT,
c CHAR(5) DEFAULT 'test', e INT DEFAULT '1')ENGINE='MyISAM';
*** Create t11 on Master ***
@@ -345,7 +347,7 @@ DROP TABLE t11;
connection slave;
*** Create t12 on slave ***
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
CREATE TABLE t12 (a INT KEY, b BLOB, f TEXT,
c CHAR(5) DEFAULT 'test', e INT DEFAULT '1')ENGINE='MyISAM';
*** Create t12 on Master ***
@@ -381,7 +383,7 @@ connection slave;
*** BUG 22177 Start ***
*** Create t13 on slave ***
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
CREATE TABLE t13 (a INT KEY, b BLOB, c CHAR(5),
d INT DEFAULT '1',
e TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP
@@ -419,7 +421,7 @@ connection slave;
*** Alter Master Table Testing Start ***
*** Create t14 on slave ***
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
CREATE TABLE t14 (c1 INT KEY, c4 BLOB, c5 CHAR(5),
c6 INT DEFAULT '1',
c7 TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP
@@ -455,7 +457,7 @@ c1 c2 c3 c4 c5 c6 c7
3 3.00 If is does not, I will open a bug b1b1b1b1b1b1b1b1 QA 1 CURRENT_TIMESTAMP
*** Create t14a on slave ***
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
CREATE TABLE t14a (c1 INT KEY, c4 BLOB, c5 CHAR(5),
c6 INT DEFAULT '1',
c7 TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP
@@ -488,7 +490,7 @@ c1 c4 c5 c6 c7
2 b1b1b1b1b1b1b1b1 JOE 1 CURRENT_TIMESTAMP
3 b1b1b1b1b1b1b1b1 QA 1 CURRENT_TIMESTAMP
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
*** Master Drop c5 ***
connection master;
ALTER TABLE t14a DROP COLUMN c5;
@@ -547,7 +549,7 @@ DROP TABLE t14;
connection slave;
*** Create t15 on slave ***
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
CREATE TABLE t15 (c1 INT KEY, c2 DECIMAL(8,2), c3 TEXT,
c4 BLOB, c5 CHAR(5),
c6 INT DEFAULT '1',
@@ -615,7 +617,7 @@ DROP TABLE t15;
connection slave;
*** Create t16 on slave ***
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
CREATE TABLE t16 (c1 INT KEY, c2 DECIMAL(8,2), c3 TEXT,
c4 BLOB, c5 CHAR(5),
c6 INT DEFAULT '1',
@@ -687,7 +689,7 @@ connection slave;
*** Alter Master End ***
*** Create t17 on slave ***
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
CREATE TABLE t17 (a SMALLINT, b INT PRIMARY KEY, c CHAR(5),
d FLOAT DEFAULT '2.00',
e CHAR(5) DEFAULT 'TEST2')
diff --git a/mysql-test/suite/rpl/r/rpl_gtid_basic.result b/mysql-test/suite/rpl/r/rpl_gtid_basic.result
index 32df09789cc..fc7505e144f 100644
--- a/mysql-test/suite/rpl/r/rpl_gtid_basic.result
+++ b/mysql-test/suite/rpl/r/rpl_gtid_basic.result
@@ -69,6 +69,8 @@ INSERT INTO t2 VALUES (5, "i1a");
connection server_4;
CHANGE MASTER TO master_host = '127.0.0.1', master_port = MASTER_PORT,
MASTER_USE_GTID=CURRENT_POS;
+Warnings:
+Warning 1681 'master_use_gtid=current_pos' is deprecated and will be removed in a future release. Please use master_demote_to_slave=1 instead
include/start_slave.inc
SELECT * FROM t1 ORDER BY a;
a b
@@ -89,6 +91,8 @@ connection server_2;
include/stop_slave.inc
CHANGE MASTER TO master_host = '127.0.0.1', master_port = SERVER_MYPORT_4,
MASTER_USE_GTID=CURRENT_POS;
+Warnings:
+Warning 1681 'master_use_gtid=current_pos' is deprecated and will be removed in a future release. Please use master_demote_to_slave=1 instead
include/start_slave.inc
connection server_4;
UPDATE t2 SET b="j1a" WHERE a=5;
@@ -117,6 +121,8 @@ include/save_master_gtid.inc
connection server_3;
CHANGE MASTER TO master_host = '127.0.0.1', master_port = SERVER_MYPORT_4,
MASTER_USE_GTID=CURRENT_POS;
+Warnings:
+Warning 1681 'master_use_gtid=current_pos' is deprecated and will be removed in a future release. Please use master_demote_to_slave=1 instead
include/start_slave.inc
include/sync_with_master_gtid.inc
SELECT * FROM t2 ORDER BY a;
diff --git a/mysql-test/suite/rpl/r/rpl_gtid_crash.result b/mysql-test/suite/rpl/r/rpl_gtid_crash.result
index 153081d9ca5..2f764fe4a0d 100644
--- a/mysql-test/suite/rpl/r/rpl_gtid_crash.result
+++ b/mysql-test/suite/rpl/r/rpl_gtid_crash.result
@@ -14,7 +14,7 @@ call mtr.add_suppression('Master command COM_REGISTER_SLAVE failed: failed regis
SET sql_log_bin=1;
include/stop_slave.inc
CHANGE MASTER TO master_host = '127.0.0.1', master_port = MASTER_PORT,
-MASTER_USE_GTID=CURRENT_POS;
+MASTER_USE_GTID=SLAVE_POS;
connection server_1;
INSERT INTO t1 VALUES (2,1);
INSERT INTO t1 VALUES (3,1);
diff --git a/mysql-test/suite/rpl/r/rpl_gtid_errorhandling.result b/mysql-test/suite/rpl/r/rpl_gtid_errorhandling.result
index 4c35d42d90a..a7cb710cc07 100644
--- a/mysql-test/suite/rpl/r/rpl_gtid_errorhandling.result
+++ b/mysql-test/suite/rpl/r/rpl_gtid_errorhandling.result
@@ -75,6 +75,8 @@ INSERT INTO t1 VALUES (2);
SET sql_log_bin = 1;
INSERT INTO t1 VALUES (3);
CHANGE MASTER TO master_use_gtid=current_pos;
+Warnings:
+Warning 1681 'master_use_gtid=current_pos' is deprecated and will be removed in a future release. Please use master_demote_to_slave=1 instead
BEGIN;
SET GLOBAL gtid_slave_pos = "100-100-100";
ERROR 25000: You are not allowed to execute this command in a transaction
diff --git a/mysql-test/suite/rpl/r/rpl_gtid_excess_initial_delay.result b/mysql-test/suite/rpl/r/rpl_gtid_excess_initial_delay.result
index 641d186ab78..4b2652ece8f 100644
--- a/mysql-test/suite/rpl/r/rpl_gtid_excess_initial_delay.result
+++ b/mysql-test/suite/rpl/r/rpl_gtid_excess_initial_delay.result
@@ -3,7 +3,7 @@ include/master-slave.inc
CREATE TABLE t1 (i INT);
connection slave;
include/stop_slave.inc
-CHANGE MASTER TO MASTER_USE_GTID= current_pos, MASTER_DELAY= 10;
+CHANGE MASTER TO MASTER_DELAY= 10;
include/start_slave.inc
connection master;
INSERT INTO t1 VALUES (1);
@@ -14,7 +14,7 @@ connection slave;
# Asserted this: One row shoule be found in table t1.
"======= Clean up ========"
STOP SLAVE;
-CHANGE MASTER TO MASTER_USE_GTID=no, MASTER_DELAY=0;
+CHANGE MASTER TO MASTER_DELAY=0;
START SLAVE;
connection master;
DROP TABLE t1;
diff --git a/mysql-test/suite/rpl/r/rpl_gtid_master_promote.result b/mysql-test/suite/rpl/r/rpl_gtid_master_promote.result
index 15bcb6621ff..92430be199a 100644
--- a/mysql-test/suite/rpl/r/rpl_gtid_master_promote.result
+++ b/mysql-test/suite/rpl/r/rpl_gtid_master_promote.result
@@ -12,16 +12,12 @@ RETURN s;
END|
connection server_2;
include/stop_slave.inc
-CHANGE MASTER TO master_use_gtid=current_pos;
connection server_3;
include/stop_slave.inc
-CHANGE MASTER TO master_use_gtid=current_pos;
connection server_4;
include/stop_slave.inc
-CHANGE MASTER TO master_use_gtid=current_pos;
connection server_5;
include/stop_slave.inc
-CHANGE MASTER TO master_use_gtid=current_pos;
connection server_1;
SET gtid_domain_id= 1;
CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=InnoDB;
@@ -339,7 +335,7 @@ a b
*** Now let the old master join up as slave. ***
connection server_1;
CHANGE MASTER TO master_host = '127.0.0.1', master_port = SERVER_MYPORT_2,
-master_user = "root", master_use_gtid = current_pos;
+master_user = "root", master_use_gtid = slave_pos, master_demote_to_slave=1;
include/start_slave.inc
SELECT * FROM t1 ORDER BY a;
a
diff --git a/mysql-test/suite/rpl/r/rpl_gtid_mdev4473.result b/mysql-test/suite/rpl/r/rpl_gtid_mdev4473.result
index 5c80e64dc9b..9524dafb524 100644
--- a/mysql-test/suite/rpl/r/rpl_gtid_mdev4473.result
+++ b/mysql-test/suite/rpl/r/rpl_gtid_mdev4473.result
@@ -12,7 +12,7 @@ include/wait_for_slave_to_stop.inc
reset slave all;
connection server_1;
CHANGE MASTER TO master_host = '127.0.0.1', master_port = SERVER_MYPORT_2,
-master_user='root', MASTER_USE_GTID=CURRENT_POS;
+master_user='root', MASTER_USE_GTID=SLAVE_POS, master_demote_to_slave=1;
include/start_slave.inc
include/wait_for_slave_to_start.inc
connection server_2;
@@ -22,7 +22,7 @@ insert into t1 values (4);
flush logs;
connection server_3;
CHANGE MASTER TO master_host = '127.0.0.1', master_port = SERVER_MYPORT_2,
-MASTER_USE_GTID=CURRENT_POS;
+MASTER_USE_GTID=SLAVE_POS;
include/start_slave.inc
select * from t1 order by n;
n
@@ -55,12 +55,12 @@ include/wait_for_slave_to_stop.inc
reset slave all;
connection server_2;
CHANGE MASTER TO master_host = '127.0.0.1', master_port = SERVER_MYPORT_1,
-master_user = 'root', MASTER_USE_GTID=CURRENT_POS;
+master_user = 'root', MASTER_USE_GTID=SLAVE_POS, master_demote_to_slave=1;
include/start_slave.inc
connection server_3;
include/stop_slave.inc
CHANGE MASTER TO master_host = '127.0.0.1', master_port = SERVER_MYPORT_1,
-MASTER_USE_GTID=CURRENT_POS;
+MASTER_USE_GTID=SLAVE_POS;
include/start_slave.inc
connection server_1;
drop table t1;
diff --git a/mysql-test/suite/rpl/r/rpl_gtid_mdev4820.result b/mysql-test/suite/rpl/r/rpl_gtid_mdev4820.result
index 606207c1d99..cea5aaaeacd 100644
--- a/mysql-test/suite/rpl/r/rpl_gtid_mdev4820.result
+++ b/mysql-test/suite/rpl/r/rpl_gtid_mdev4820.result
@@ -45,6 +45,8 @@ SET GLOBAL gtid_slave_pos= '0-2-10';
connection server_1;
CHANGE MASTER TO master_host = '127.0.0.1', master_port = SERVER_MYPORT_2,
master_user= 'root', master_use_gtid=CURRENT_POS;
+Warnings:
+Warning 1681 'master_use_gtid=current_pos' is deprecated and will be removed in a future release. Please use master_demote_to_slave=1 instead
START SLAVE;
connection server_2;
INSERT INTO t1 VALUES (11);
@@ -67,11 +69,15 @@ a
11
include/stop_slave.inc
RESET SLAVE ALL;
+Warnings:
+Note 4190 RESET SLAVE is implicitly changing the value of 'Using_Gtid' from 'Current_Pos' to 'Slave_Pos'
INSERT INTO t1 VALUES (12);
connection server_2;
INSERT INTO t1 VALUES (22);
CHANGE MASTER TO master_host = '127.0.0.1', master_port = SERVER_MYPORT_1,
master_user= 'root', master_use_gtid=CURRENT_POS;
+Warnings:
+Warning 1681 'master_use_gtid=current_pos' is deprecated and will be removed in a future release. Please use master_demote_to_slave=1 instead
START SLAVE;
SET sql_log_bin= 0;
CALL mtr.add_suppression("which is not in the master's binlog. Since the master's binlog contains GTIDs with higher sequence numbers, it probably means that the slave has diverged");
diff --git a/mysql-test/suite/rpl/r/rpl_gtid_mdev9033.result b/mysql-test/suite/rpl/r/rpl_gtid_mdev9033.result
index 9f0ad66bb83..2471f26bc04 100644
--- a/mysql-test/suite/rpl/r/rpl_gtid_mdev9033.result
+++ b/mysql-test/suite/rpl/r/rpl_gtid_mdev9033.result
@@ -58,8 +58,8 @@ connection server_3;
include/sync_with_master_gtid.inc
connection server_2;
STOP SLAVE;
-CHANGE MASTER TO MASTER_USE_GTID = NO, IGNORE_DOMAIN_IDS = ();
+CHANGE MASTER TO IGNORE_DOMAIN_IDS = ();
connection server_3;
STOP SLAVE;
-CHANGE MASTER TO MASTER_USE_GTID = NO, IGNORE_DOMAIN_IDS = ();
+CHANGE MASTER TO IGNORE_DOMAIN_IDS = ();
# End of test.
diff --git a/mysql-test/suite/rpl/r/rpl_gtid_misc.result b/mysql-test/suite/rpl/r/rpl_gtid_misc.result
index a5c61759ed6..c4a64a13753 100644
--- a/mysql-test/suite/rpl/r/rpl_gtid_misc.result
+++ b/mysql-test/suite/rpl/r/rpl_gtid_misc.result
@@ -9,7 +9,6 @@ include/stop_slave.inc
SET sql_log_bin= 0;
INSERT INTO t1 VALUES (1);
SET sql_log_bin= 1;
-CHANGE MASTER TO master_use_gtid= current_pos;
connection master;
CREATE TEMPORARY TABLE t2 LIKE t1;
INSERT INTO t2 VALUE (1);
diff --git a/mysql-test/suite/rpl/r/rpl_gtid_nobinlog.result b/mysql-test/suite/rpl/r/rpl_gtid_nobinlog.result
index c42348d40ee..8b896560d39 100644
--- a/mysql-test/suite/rpl/r/rpl_gtid_nobinlog.result
+++ b/mysql-test/suite/rpl/r/rpl_gtid_nobinlog.result
@@ -21,7 +21,7 @@ a b
include/stop_slave.inc
connection server_1;
CHANGE MASTER TO master_host = '127.0.0.1', master_port = SLAVE_PORT,
-master_user = 'root', master_use_gtid = current_pos;
+master_user = 'root';
START SLAVE;
include/wait_for_slave_to_start.inc
connection server_2;
@@ -50,8 +50,7 @@ INSERT INTO t1 VALUES (5, 1);
INSERT INTO t1 VALUES (6, 1);
include/save_master_gtid.inc
connection server_2;
-CHANGE MASTER TO master_host = '127.0.0.1', master_port = MASTER_PORT,
-master_use_gtid = current_pos;
+CHANGE MASTER TO master_host = '127.0.0.1', master_port = MASTER_PORT;
START SLAVE;
include/sync_with_master_gtid.inc
SELECT * FROM t1 ORDER BY a;
diff --git a/mysql-test/suite/rpl/r/rpl_gtid_reconnect.result b/mysql-test/suite/rpl/r/rpl_gtid_reconnect.result
index 4f50d7c6d85..f9d6cd3b743 100644
--- a/mysql-test/suite/rpl/r/rpl_gtid_reconnect.result
+++ b/mysql-test/suite/rpl/r/rpl_gtid_reconnect.result
@@ -1,8 +1,4 @@
include/rpl_init.inc [topology=1->2]
-connection server_2;
-include/stop_slave.inc
-CHANGE MASTER TO master_use_gtid= current_pos;
-include/start_slave.inc
connection server_1;
CREATE TABLE t1 (a INT);
FLUSH LOGS;
diff --git a/mysql-test/suite/rpl/r/rpl_gtid_sort.result b/mysql-test/suite/rpl/r/rpl_gtid_sort.result
index 34c0fd32766..46a65e7d865 100644
--- a/mysql-test/suite/rpl/r/rpl_gtid_sort.result
+++ b/mysql-test/suite/rpl/r/rpl_gtid_sort.result
@@ -58,7 +58,7 @@ SHOW VARIABLES LIKE 'gtid_binlog_state';
Variable_name Value
gtid_binlog_state
CHANGE MASTER TO master_host = '127.0.0.1', master_port = MASTER_PORT,
-MASTER_USE_GTID=CURRENT_POS;
+MASTER_USE_GTID=SLAVE_POS;
include/start_slave.inc
SHOW VARIABLES LIKE 'gtid_binlog_pos';
Variable_name Value
diff --git a/mysql-test/suite/rpl/r/rpl_gtid_startpos.result b/mysql-test/suite/rpl/r/rpl_gtid_startpos.result
index 3c363004170..e38eddcc97a 100644
--- a/mysql-test/suite/rpl/r/rpl_gtid_startpos.result
+++ b/mysql-test/suite/rpl/r/rpl_gtid_startpos.result
@@ -11,7 +11,7 @@ CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=InnoDB;
connection server_2;
SET GLOBAL gtid_slave_pos="";
CHANGE MASTER TO master_host = '127.0.0.1', master_port = MASTER_PORT,
-MASTER_USE_GTID=CURRENT_POS;
+MASTER_USE_GTID=SLAVE_POS;
include/start_slave.inc
SELECT * FROM t1;
a
@@ -33,12 +33,12 @@ master-bin.000003 #
connection server_2;
SET GLOBAL gtid_slave_pos="";
CHANGE MASTER TO master_host = '127.0.0.1', master_port = MASTER_PORT,
-MASTER_USE_GTID=CURRENT_POS;
+MASTER_USE_GTID=SLAVE_POS;
START SLAVE;
include/wait_for_slave_io_error.inc [errno=1236]
include/stop_slave.inc
CHANGE MASTER TO master_host = '127.0.0.1', master_port = MASTER_PORT,
-MASTER_LOG_FILE="master-bin.000003", MASTER_LOG_POS=4;
+MASTER_LOG_FILE="master-bin.000003", MASTER_LOG_POS=4, MASTER_USE_GTID=NO;
include/start_slave.inc
SELECT * FROM t1 ORDER BY a;
a
@@ -55,7 +55,7 @@ include/save_master_gtid.inc
connection server_2;
SET GLOBAL gtid_slave_pos='0-1-3';
CHANGE MASTER TO master_host = '127.0.0.1', master_port = MASTER_PORT,
-MASTER_USE_GTID=CURRENT_POS;
+MASTER_USE_GTID=SLAVE_POS;
include/start_slave.inc
include/sync_with_master_gtid.inc
SELECT * FROM t1 ORDER by a;
@@ -95,7 +95,7 @@ connection server_1;
RESET MASTER;
connection server_2;
SET GLOBAL gtid_slave_pos='';
-CHANGE MASTER TO master_host='127.0.0.1', master_port=MASTER_PORT, master_user='root', master_use_gtid=current_pos;
+CHANGE MASTER TO master_host='127.0.0.1', master_port=MASTER_PORT, master_user='root', master_use_gtid=slave_pos;
include/start_slave.inc
connection server_1;
CREATE TABLE t1 (a INT PRIMARY KEY);
@@ -145,12 +145,12 @@ a
2
*** Test that RESET SLAVE clears the Using_Gtid flag. ***
include/stop_slave.inc
-RESET SLAVE;
+include/reset_slave.inc
Using_Gtid = 'No'
START SLAVE;
include/wait_for_slave_sql_error.inc [errno=1050]
STOP SLAVE IO_THREAD;
-CHANGE MASTER TO MASTER_USE_GTID=CURRENT_POS;
+CHANGE MASTER TO MASTER_USE_GTID=SLAVE_POS;
include/start_slave.inc
connection server_1;
INSERT INTO t1 VALUES(3);
@@ -209,9 +209,9 @@ include/sync_with_master_gtid.inc
SELECT * FROM t1;
a
10
-SELECT 'Current_Pos' AS Using_Gtid;
+SELECT 'Slave_Pos' AS Using_Gtid;
Using_Gtid
-Current_Pos
+Slave_Pos
SELECT '0-1-2' AS Gtid_Slave_Pos;
Gtid_Slave_Pos
0-1-2
@@ -238,6 +238,7 @@ connection server_2;
include/stop_slave.inc
DROP TABLE t1;
RESET SLAVE ALL;
+CHANGE MASTER TO MASTER_USE_GTID=NO;
RESET MASTER;
SET GLOBAL gtid_slave_pos= "";
CHANGE MASTER TO master_host='127.0.0.1', master_port=MASTER_PORT, master_user='root', master_use_gtid=no, master_log_file="", master_log_pos= 4;
diff --git a/mysql-test/suite/rpl/r/rpl_gtid_stop_start.result b/mysql-test/suite/rpl/r/rpl_gtid_stop_start.result
index 50f24d56e9a..ae0050c353a 100644
--- a/mysql-test/suite/rpl/r/rpl_gtid_stop_start.result
+++ b/mysql-test/suite/rpl/r/rpl_gtid_stop_start.result
@@ -6,8 +6,7 @@ INSERT INTO t1 VALUES (1);
connection server_2;
include/stop_slave.inc
Master_Log_File = 'master-bin.000001'
-Using_Gtid = 'No'
-CHANGE MASTER TO master_use_gtid=current_pos;
+Using_Gtid = 'Slave_Pos'
FLUSH LOGS;
connection server_1;
FLUSH LOGS;
diff --git a/mysql-test/suite/rpl/r/rpl_gtid_until.result b/mysql-test/suite/rpl/r/rpl_gtid_until.result
index 1032b8ddd5c..029d2367e50 100644
--- a/mysql-test/suite/rpl/r/rpl_gtid_until.result
+++ b/mysql-test/suite/rpl/r/rpl_gtid_until.result
@@ -1,4 +1,8 @@
include/rpl_init.inc [topology=1->2]
+connection server_2;
+include/stop_slave.inc
+CHANGE MASTER TO MASTER_USE_GTID=NO;
+include/start_slave.inc
connection server_1;
ALTER TABLE mysql.gtid_slave_pos ENGINE=InnoDB;
CREATE FUNCTION extract_gtid(d VARCHAR(100), s VARCHAR(100))
@@ -25,7 +29,7 @@ ERROR HY000: Slave is already running
include/stop_slave_io.inc
START SLAVE UNTIL master_gtid_pos = "";
ERROR HY000: START SLAVE UNTIL master_gtid_pos requires that slave is using GTID
-CHANGE MASTER TO master_use_gtid=current_pos;
+CHANGE MASTER TO master_use_gtid=slave_pos;
connection server_1;
CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=InnoDB;
INSERT INTO t1 VALUES(1);
@@ -54,7 +58,7 @@ a
include/stop_slave.inc
START SLAVE UNTIL master_gtid_pos = "1-10-100,2-20-200,0-1-300";
include/wait_for_slave_to_start.inc
-Using_Gtid = 'Current_Pos'
+Using_Gtid = 'Slave_Pos'
Until_Condition = 'Gtid'
connection server_1;
INSERT INTO t1 VALUES (3);
@@ -211,7 +215,7 @@ RESET MASTER;
INSERT INTO t1 VALUES (10);
connection server_2;
CHANGE MASTER TO master_host = '127.0.0.1', master_port = SERVER_MYPORT_1,
-master_user = "root", master_use_gtid = current_pos;
+master_user = "root", master_use_gtid = slave_pos;
START SLAVE UNTIL master_gtid_pos = '0-1-2';
include/wait_for_slave_to_start.inc
connection server_1;
diff --git a/mysql-test/suite/rpl/r/rpl_heartbeat_basic.result b/mysql-test/suite/rpl/r/rpl_heartbeat_basic.result
index 1db69ea4b83..88e0214150b 100644
--- a/mysql-test/suite/rpl/r/rpl_heartbeat_basic.result
+++ b/mysql-test/suite/rpl/r/rpl_heartbeat_basic.result
@@ -14,12 +14,12 @@ connection slave;
*** Default value ***
CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=MASTER_PORT, MASTER_USER='root';
slave_net_timeout/slave_heartbeat_timeout=2.0000
-RESET SLAVE;
+include/reset_slave.inc
*** Reset slave affect ***
SET @@global.slave_net_timeout=30;
CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=MASTER_PORT, MASTER_USER='root', MASTER_CONNECT_RETRY=20, MASTER_HEARTBEAT_PERIOD=5;
-RESET SLAVE;
+include/reset_slave.inc
SHOW GLOBAL STATUS LIKE 'slave_heartbeat_period';
Variable_name Value
Slave_heartbeat_period 15.000
@@ -31,7 +31,7 @@ SHOW GLOBAL STATUS LIKE 'slave_heartbeat_period';
Variable_name Value
Slave_heartbeat_period 25.000
SET @@global.slave_net_timeout=@restore_slave_net_timeout;
-RESET SLAVE;
+include/reset_slave.inc
*** Warning if updated slave_net_timeout < slave_heartbeat_timeout ***
SET @@global.slave_net_timeout=FLOOR(SLAVE_HEARTBEAT_TIMEOUT)-1;
@@ -223,11 +223,15 @@ INSERT INTO t1 VALUES (1, 'on slave', NULL);
connection master;
INSERT INTO t1 VALUES (1, 'on master', NULL);
connection slave;
+set sql_log_bin= 0;
call mtr.add_suppression("Slave SQL.*Duplicate entry .1. for key .PRIMARY.. on query.* error.* 1062");
call mtr.add_suppression("Slave SQL.*Request to stop slave SQL Thread received while applying a group that has non-transactional changes; waiting for completion of the group");
+set sql_log_bin= 1;
Heartbeat events are received while sql thread stopped (1 means 'yes'): 1
include/stop_slave.inc
+set sql_log_bin= 0;
DROP TABLE t1;
+set sql_log_bin= 1;
*** Master send to slave ***
connection master;
@@ -240,7 +244,9 @@ END|
Warnings:
Warning 1105 Event scheduler is switched off, use SET GLOBAL event_scheduler=ON to enable it.
connection slave;
-RESET SLAVE;
+include/reset_slave.inc
+Warnings:
+Warning 1948 Specified value for @@gtid_slave_pos contains no value for replication domain 0. This conflicts with the binary log which contains GTID 0-2-2. If MASTER_GTID_POS=CURRENT_POS is used, the binlog position will override the new value of @@gtid_slave_pos
CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=MASTER_PORT, MASTER_USER='root', MASTER_CONNECT_RETRY=20, MASTER_HEARTBEAT_PERIOD=5;
include/start_slave.inc
connection master;
@@ -256,8 +262,10 @@ connection slave;
*** Flush logs on slave ***
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
+set sql_log_bin= 0;
DROP TABLE t1;
+set sql_log_bin= 1;
connection master;
DROP TABLE t1;
RESET MASTER;
@@ -271,7 +279,7 @@ connection master;
SET @@global.slave_compressed_protocol=1;
connection slave;
include/stop_slave.inc
-RESET SLAVE;
+include/reset_slave.inc
SET @@global.slave_compressed_protocol=1;
CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=MASTER_PORT, MASTER_USER='root', MASTER_CONNECT_RETRY=20, MASTER_HEARTBEAT_PERIOD=0.1;
include/start_slave.inc
@@ -283,7 +291,7 @@ SET @@global.slave_compressed_protocol=0;
*** Reset master ***
connection slave;
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=MASTER_PORT, MASTER_USER='root', MASTER_CONNECT_RETRY=20, MASTER_HEARTBEAT_PERIOD=0.1;
include/start_slave.inc
connection master;
@@ -294,7 +302,7 @@ Heartbeat events are received after reset of master (1 means 'yes'): 1
*** Reload master ***
connection slave;
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=MASTER_PORT, MASTER_USER='root', MASTER_CONNECT_RETRY=20, MASTER_HEARTBEAT_PERIOD=0.1;
include/start_slave.inc
Heartbeat event received
diff --git a/mysql-test/suite/rpl/r/rpl_heartbeat_ssl.result b/mysql-test/suite/rpl/r/rpl_heartbeat_ssl.result
index ff7178ae700..533290d25ca 100644
--- a/mysql-test/suite/rpl/r/rpl_heartbeat_ssl.result
+++ b/mysql-test/suite/rpl/r/rpl_heartbeat_ssl.result
@@ -15,7 +15,8 @@ MASTER_LOG_FILE='MASTER_BINLOG',
MASTER_SSL=1,
MASTER_SSL_CA='MYSQL_TEST_DIR/std_data/cacert.pem',
MASTER_SSL_CERT='MYSQL_TEST_DIR/std_data/client-cert.pem',
-MASTER_SSL_KEY='MYSQL_TEST_DIR/std_data/client-key.pem';
+MASTER_SSL_KEY='MYSQL_TEST_DIR/std_data/client-key.pem',
+MASTER_USE_GTID=NO;
include/start_slave.inc
Master_SSL_Allowed: Yes
Heartbeat event has received
diff --git a/mysql-test/suite/rpl/r/rpl_hrtime.result b/mysql-test/suite/rpl/r/rpl_hrtime.result
index 03732198e73..a9cd02df262 100644
--- a/mysql-test/suite/rpl/r/rpl_hrtime.result
+++ b/mysql-test/suite/rpl/r/rpl_hrtime.result
@@ -37,7 +37,7 @@ ROLLBACK/*!*/;
use `test`/*!*/;
SET TIMESTAMP=1293832861/*!*/;
SET @@session.pseudo_thread_id=999999999/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=1411383296/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
diff --git a/mysql-test/suite/rpl/r/rpl_innodb_bug68220.result b/mysql-test/suite/rpl/r/rpl_innodb_bug68220.result
deleted file mode 100644
index a9c8c6d612f..00000000000
--- a/mysql-test/suite/rpl/r/rpl_innodb_bug68220.result
+++ /dev/null
@@ -1,233 +0,0 @@
-include/master-slave.inc
-[connection master]
-connection master;
-select variable_value into @master_rows_read from information_schema.global_status where variable_name = 'innodb_rows_read';
-select variable_value into @master_rows_updated from information_schema.global_status where variable_name = 'innodb_rows_updated';
-select variable_value into @master_rows_deleted from information_schema.global_status where variable_name = 'innodb_rows_deleted';
-select variable_value into @master_rows_inserted from information_schema.global_status where variable_name = 'innodb_rows_inserted';
-select variable_value into @master_system_rows_read from information_schema.global_status where variable_name = 'innodb_system_rows_read';
-select variable_value into @master_system_rows_updated from information_schema.global_status where variable_name = 'innodb_system_rows_updated';
-select variable_value into @master_system_rows_deleted from information_schema.global_status where variable_name = 'innodb_system_rows_deleted';
-select variable_value into @master_system_rows_inserted from information_schema.global_status where variable_name = 'innodb_system_rows_inserted';
-connection slave;
-select variable_value into @slave_rows_read from information_schema.global_status where variable_name = 'innodb_rows_read';
-select variable_value into @slave_rows_updated from information_schema.global_status where variable_name = 'innodb_rows_updated';
-select variable_value into @slave_rows_deleted from information_schema.global_status where variable_name = 'innodb_rows_deleted';
-select variable_value into @slave_rows_inserted from information_schema.global_status where variable_name = 'innodb_rows_inserted';
-select variable_value into @slave_system_rows_read from information_schema.global_status where variable_name = 'innodb_system_rows_read';
-select variable_value into @slave_system_rows_updated from information_schema.global_status where variable_name = 'innodb_system_rows_updated';
-select variable_value into @slave_system_rows_deleted from information_schema.global_status where variable_name = 'innodb_system_rows_deleted';
-select variable_value into @slave_system_rows_inserted from information_schema.global_status where variable_name = 'innodb_system_rows_inserted';
-connection master;
-CREATE DATABASE testdb;
-USE testdb;
-CREATE TABLE testdb.t1 (i int NOT NULL PRIMARY KEY) ENGINE=InnoDB;
-INSERT INTO testdb.t1 VALUES (1);
-connection master;
-select variable_value into @rows_read from information_schema.global_status where variable_name = 'innodb_rows_read';
-select @rows_read - @master_rows_read;
-@rows_read - @master_rows_read
-0
-select variable_value into @rows_updated from information_schema.global_status where variable_name = 'innodb_rows_updated';
-select @rows_updated - @master_rows_updated;
-@rows_updated - @master_rows_updated
-0
-select variable_value into @rows_deleted from information_schema.global_status where variable_name = 'innodb_rows_deleted';
-select @rows_deleted - @master_rows_deleted;
-@rows_deleted - @master_rows_deleted
-0
-select variable_value into @rows_inserted from information_schema.global_status where variable_name = 'innodb_rows_inserted';
-select @rows_inserted - @master_rows_inserted;
-@rows_inserted - @master_rows_inserted
-1
-select variable_value into @system_rows_read from information_schema.global_status where variable_name = 'innodb_system_rows_read';
-select @system_rows_read - @master_system_rows_read;
-@system_rows_read - @master_system_rows_read
-0
-select variable_value into @system_rows_updated from information_schema.global_status where variable_name = 'innodb_system_rows_updated';
-select @system_rows_updated - @master_system_rows_updated;
-@system_rows_updated - @master_system_rows_updated
-0
-select variable_value into @system_rows_deleted from information_schema.global_status where variable_name = 'innodb_system_rows_deleted';
-select @system_rows_deleted - @master_system_rows_deleted;
-@system_rows_deleted - @master_system_rows_deleted
-0
-select variable_value into @system_rows_inserted from information_schema.global_status where variable_name = 'innodb_system_rows_inserted';
-select @system_rows_inserted - @master_system_rows_inserted;
-@system_rows_inserted - @master_system_rows_inserted
-0
-connection slave;
-select variable_value into @rows_read from information_schema.global_status where variable_name = 'innodb_rows_read';
-select @rows_read - @slave_rows_read;
-@rows_read - @slave_rows_read
-0
-select variable_value into @rows_updated from information_schema.global_status where variable_name = 'innodb_rows_updated';
-select @rows_updated - @slave_rows_updated;
-@rows_updated - @slave_rows_updated
-0
-select variable_value into @rows_deleted from information_schema.global_status where variable_name = 'innodb_rows_deleted';
-select @rows_deleted - @slave_rows_deleted;
-@rows_deleted - @slave_rows_deleted
-0
-select variable_value into @rows_inserted from information_schema.global_status where variable_name = 'innodb_rows_inserted';
-select @rows_inserted - @slave_rows_inserted;
-@rows_inserted - @slave_rows_inserted
-1
-select variable_value into @system_rows_read from information_schema.global_status where variable_name = 'innodb_system_rows_read';
-select @system_rows_read - @slave_system_rows_read;
-@system_rows_read - @slave_system_rows_read
-0
-select variable_value into @system_rows_updated from information_schema.global_status where variable_name = 'innodb_system_rows_updated';
-select @system_rows_updated - @slave_system_rows_updated;
-@system_rows_updated - @slave_system_rows_updated
-0
-select variable_value into @system_rows_deleted from information_schema.global_status where variable_name = 'innodb_system_rows_deleted';
-select @system_rows_deleted - @slave_system_rows_deleted;
-@system_rows_deleted - @slave_system_rows_deleted
-0
-select variable_value into @system_rows_inserted from information_schema.global_status where variable_name = 'innodb_system_rows_inserted';
-select @system_rows_inserted - @slave_system_rows_inserted;
-@system_rows_inserted - @slave_system_rows_inserted
-0
-connection master;
-UPDATE t1 SET i=2 WHERE i=1;
-connection slave;
-connection master;
-select variable_value into @rows_read from information_schema.global_status where variable_name = 'innodb_rows_read';
-select @rows_read - @master_rows_read;
-@rows_read - @master_rows_read
-1
-select variable_value into @rows_updated from information_schema.global_status where variable_name = 'innodb_rows_updated';
-select @rows_updated - @master_rows_updated;
-@rows_updated - @master_rows_updated
-1
-select variable_value into @rows_deleted from information_schema.global_status where variable_name = 'innodb_rows_deleted';
-select @rows_deleted - @master_rows_deleted;
-@rows_deleted - @master_rows_deleted
-0
-select variable_value into @rows_inserted from information_schema.global_status where variable_name = 'innodb_rows_inserted';
-select @rows_inserted - @master_rows_inserted;
-@rows_inserted - @master_rows_inserted
-1
-select variable_value into @system_rows_read from information_schema.global_status where variable_name = 'innodb_system_rows_read';
-select @system_rows_read - @master_system_rows_read;
-@system_rows_read - @master_system_rows_read
-0
-select variable_value into @system_rows_updated from information_schema.global_status where variable_name = 'innodb_system_rows_updated';
-select @system_rows_updated - @master_system_rows_updated;
-@system_rows_updated - @master_system_rows_updated
-0
-select variable_value into @system_rows_deleted from information_schema.global_status where variable_name = 'innodb_system_rows_deleted';
-select @system_rows_deleted - @master_system_rows_deleted;
-@system_rows_deleted - @master_system_rows_deleted
-0
-select variable_value into @system_rows_inserted from information_schema.global_status where variable_name = 'innodb_system_rows_inserted';
-select @system_rows_inserted - @master_system_rows_inserted;
-@system_rows_inserted - @master_system_rows_inserted
-0
-connection slave;
-select variable_value into @rows_read from information_schema.global_status where variable_name = 'innodb_rows_read';
-select @rows_read - @slave_rows_read;
-@rows_read - @slave_rows_read
-1
-select variable_value into @rows_updated from information_schema.global_status where variable_name = 'innodb_rows_updated';
-select @rows_updated - @slave_rows_updated;
-@rows_updated - @slave_rows_updated
-1
-select variable_value into @rows_deleted from information_schema.global_status where variable_name = 'innodb_rows_deleted';
-select @rows_deleted - @slave_rows_deleted;
-@rows_deleted - @slave_rows_deleted
-0
-select variable_value into @rows_inserted from information_schema.global_status where variable_name = 'innodb_rows_inserted';
-select @rows_inserted - @slave_rows_inserted;
-@rows_inserted - @slave_rows_inserted
-1
-select variable_value into @system_rows_read from information_schema.global_status where variable_name = 'innodb_system_rows_read';
-select @system_rows_read - @slave_system_rows_read;
-@system_rows_read - @slave_system_rows_read
-0
-select variable_value into @system_rows_updated from information_schema.global_status where variable_name = 'innodb_system_rows_updated';
-select @system_rows_updated - @slave_system_rows_updated;
-@system_rows_updated - @slave_system_rows_updated
-0
-select variable_value into @system_rows_deleted from information_schema.global_status where variable_name = 'innodb_system_rows_deleted';
-select @system_rows_deleted - @slave_system_rows_deleted;
-@system_rows_deleted - @slave_system_rows_deleted
-0
-select variable_value into @system_rows_inserted from information_schema.global_status where variable_name = 'innodb_system_rows_inserted';
-select @system_rows_inserted - @slave_system_rows_inserted;
-@system_rows_inserted - @slave_system_rows_inserted
-0
-connection master;
-DELETE FROM t1 WHERE i=2;
-connection master;
-select variable_value into @rows_read from information_schema.global_status where variable_name = 'innodb_rows_read';
-select @rows_read - @master_rows_read;
-@rows_read - @master_rows_read
-2
-select variable_value into @rows_updated from information_schema.global_status where variable_name = 'innodb_rows_updated';
-select @rows_updated - @master_rows_updated;
-@rows_updated - @master_rows_updated
-1
-select variable_value into @rows_deleted from information_schema.global_status where variable_name = 'innodb_rows_deleted';
-select @rows_deleted - @master_rows_deleted;
-@rows_deleted - @master_rows_deleted
-1
-select variable_value into @rows_inserted from information_schema.global_status where variable_name = 'innodb_rows_inserted';
-select @rows_inserted - @master_rows_inserted;
-@rows_inserted - @master_rows_inserted
-1
-select variable_value into @system_rows_read from information_schema.global_status where variable_name = 'innodb_system_rows_read';
-select @system_rows_read - @master_system_rows_read;
-@system_rows_read - @master_system_rows_read
-0
-select variable_value into @system_rows_updated from information_schema.global_status where variable_name = 'innodb_system_rows_updated';
-select @system_rows_updated - @master_system_rows_updated;
-@system_rows_updated - @master_system_rows_updated
-0
-select variable_value into @system_rows_deleted from information_schema.global_status where variable_name = 'innodb_system_rows_deleted';
-select @system_rows_deleted - @master_system_rows_deleted;
-@system_rows_deleted - @master_system_rows_deleted
-0
-select variable_value into @system_rows_inserted from information_schema.global_status where variable_name = 'innodb_system_rows_inserted';
-select @system_rows_inserted - @master_system_rows_inserted;
-@system_rows_inserted - @master_system_rows_inserted
-0
-connection slave;
-select variable_value into @rows_read from information_schema.global_status where variable_name = 'innodb_rows_read';
-select @rows_read - @slave_rows_read;
-@rows_read - @slave_rows_read
-2
-select variable_value into @rows_updated from information_schema.global_status where variable_name = 'innodb_rows_updated';
-select @rows_updated - @slave_rows_updated;
-@rows_updated - @slave_rows_updated
-1
-select variable_value into @rows_deleted from information_schema.global_status where variable_name = 'innodb_rows_deleted';
-select @rows_deleted - @slave_rows_deleted;
-@rows_deleted - @slave_rows_deleted
-1
-select variable_value into @rows_inserted from information_schema.global_status where variable_name = 'innodb_rows_inserted';
-select @rows_inserted - @slave_rows_inserted;
-@rows_inserted - @slave_rows_inserted
-1
-select variable_value into @system_rows_read from information_schema.global_status where variable_name = 'innodb_system_rows_read';
-select @system_rows_read - @slave_system_rows_read;
-@system_rows_read - @slave_system_rows_read
-0
-select variable_value into @system_rows_updated from information_schema.global_status where variable_name = 'innodb_system_rows_updated';
-select @system_rows_updated - @slave_system_rows_updated;
-@system_rows_updated - @slave_system_rows_updated
-0
-select variable_value into @system_rows_deleted from information_schema.global_status where variable_name = 'innodb_system_rows_deleted';
-select @system_rows_deleted - @slave_system_rows_deleted;
-@system_rows_deleted - @slave_system_rows_deleted
-0
-select variable_value into @system_rows_inserted from information_schema.global_status where variable_name = 'innodb_system_rows_inserted';
-select @system_rows_inserted - @slave_system_rows_inserted;
-@system_rows_inserted - @slave_system_rows_inserted
-0
-connection master;
-DROP TABLE t1;
-DROP DATABASE testdb;
-connection slave;
-include/rpl_end.inc
diff --git a/mysql-test/suite/rpl/r/rpl_loaddata.result b/mysql-test/suite/rpl/r/rpl_loaddata.result
index e759f34bb9d..0be197642e9 100644
--- a/mysql-test/suite/rpl/r/rpl_loaddata.result
+++ b/mysql-test/suite/rpl/r/rpl_loaddata.result
@@ -57,7 +57,9 @@ load data infile '../../std_data/rpl_loaddata.dat' into table t1;
connection slave;
include/wait_for_slave_sql_error.inc [errno=1062]
stop slave;
-reset slave;
+include/reset_slave.inc
+Warnings:
+Warning 1948 Specified value for @@gtid_slave_pos contains no value for replication domain 0. This conflicts with the binary log which contains GTID 0-2-14. If MASTER_GTID_POS=CURRENT_POS is used, the binlog position will override the new value of @@gtid_slave_pos
include/check_slave_no_error.inc
connection master;
reset master;
diff --git a/mysql-test/suite/rpl/r/rpl_log_pos.result b/mysql-test/suite/rpl/r/rpl_log_pos.result
index 7f5f34bf831..74080b3936f 100644
--- a/mysql-test/suite/rpl/r/rpl_log_pos.result
+++ b/mysql-test/suite/rpl/r/rpl_log_pos.result
@@ -9,7 +9,7 @@ File Position Binlog_Do_DB Binlog_Ignore_DB
master-bin.000001 # <Binlog_Do_DB> <Binlog_Ignore_DB>
connection slave;
include/stop_slave.inc
-change master to master_log_pos=MASTER_LOG_POS;
+change master to master_log_pos=MASTER_LOG_POS, master_use_gtid=no;
start slave;
include/wait_for_slave_io_error.inc [errno=1236]
Last_IO_Error = 'Got fatal error 1236 from master when reading data from binary log: 'binlog truncated in the middle of event; consider out of disk space on master; the first event 'master-bin.000001' at XXX, the last event read from 'master-bin.000001' at XXX, the last byte read from 'master-bin.000001' at XXX.''
@@ -23,7 +23,7 @@ drop table if exists t1;
create table t1 (n int);
insert into t1 values (1),(2),(3);
connection slave;
-change master to master_log_pos=MASTER_LOG_POS;
+change master to master_log_pos=MASTER_LOG_POS, master_use_gtid=no;
start slave;
select * from t1 ORDER BY n;
n
diff --git a/mysql-test/suite/rpl/r/rpl_manual_change_index_file.result b/mysql-test/suite/rpl/r/rpl_manual_change_index_file.result
index 78a86437867..9de66d179a6 100644
--- a/mysql-test/suite/rpl/r/rpl_manual_change_index_file.result
+++ b/mysql-test/suite/rpl/r/rpl_manual_change_index_file.result
@@ -1,5 +1,10 @@
include/master-slave.inc
[connection master]
+connection slave;
+include/stop_slave.inc
+CHANGE MASTER TO MASTER_USE_GTID=NO;
+include/start_slave.inc
+connection master;
FLUSH LOGS;
CREATE TABLE t1(c1 INT);
connection slave;
diff --git a/mysql-test/suite/rpl/r/rpl_mariadb_slave_capability.result b/mysql-test/suite/rpl/r/rpl_mariadb_slave_capability.result
index ac846ac6c00..68e8b22dd02 100644
--- a/mysql-test/suite/rpl/r/rpl_mariadb_slave_capability.result
+++ b/mysql-test/suite/rpl/r/rpl_mariadb_slave_capability.result
@@ -4,6 +4,9 @@ connection master;
set @old_master_binlog_checksum= @@global.binlog_checksum;
connection slave;
include/stop_slave.inc
+CHANGE MASTER TO MASTER_USE_GTID=NO;
+include/start_slave.inc
+include/stop_slave.inc
# Test slave with no capability gets dummy event, which is ignored.
set @old_dbug= @@global.debug_dbug;
SET @@global.debug_dbug='+d,simulate_slave_capability_none';
diff --git a/mysql-test/suite/rpl/r/rpl_mdev382.result b/mysql-test/suite/rpl/r/rpl_mdev382.result
index d5947343967..466b7e90f99 100644
--- a/mysql-test/suite/rpl/r/rpl_mdev382.result
+++ b/mysql-test/suite/rpl/r/rpl_mdev382.result
@@ -179,7 +179,7 @@ ROLLBACK/*!*/;
use `db1``; select 'oops!'`/*!*/;
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=999999999/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
@@ -279,7 +279,7 @@ ROLLBACK/*!*/;
use `db1``; select 'oops!'`/*!*/;
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=999999999/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
@@ -388,7 +388,7 @@ START TRANSACTION
use `ts``et`/*!*/;
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=999999999/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=1411383296/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
diff --git a/mysql-test/suite/rpl/r/rpl_mdev6020.result b/mysql-test/suite/rpl/r/rpl_mdev6020.result
index b0cb392b04c..fbea6ac38d2 100644
--- a/mysql-test/suite/rpl/r/rpl_mdev6020.result
+++ b/mysql-test/suite/rpl/r/rpl_mdev6020.result
@@ -13,7 +13,7 @@ SET @old_engine= @@GLOBAL.default_storage_engine;
SET GLOBAL default_storage_engine=InnoDB;
SET @old_parallel= @@GLOBAL.slave_parallel_threads;
SET GLOBAL slave_parallel_threads=12;
-CHANGE MASTER TO master_host='127.0.0.1', master_port=SERVER_MYPORT_1, master_user='root', master_log_file='master-bin.000001', master_log_pos=4;
+CHANGE MASTER TO master_host='127.0.0.1', master_port=SERVER_MYPORT_1, master_user='root', master_log_file='master-bin.000001', master_log_pos=4, master_use_gtid=no;
include/start_slave.inc
connection master;
SET SQL_LOG_BIN=0;
diff --git a/mysql-test/suite/rpl/r/rpl_mdev6386.result b/mysql-test/suite/rpl/r/rpl_mdev6386.result
index d0e5144857a..63ce594a604 100644
--- a/mysql-test/suite/rpl/r/rpl_mdev6386.result
+++ b/mysql-test/suite/rpl/r/rpl_mdev6386.result
@@ -10,7 +10,6 @@ SET sql_log_bin= 0;
CALL mtr.add_suppression("Commit failed due to failure of an earlier commit on which this one depends");
INSERT INTO t1 VALUES (1, 2);
SET sql_log_bin= 1;
-CHANGE MASTER TO master_use_gtid= current_pos;
Contents on slave before:
SELECT * FROM t1 ORDER BY a;
a b
diff --git a/mysql-test/suite/rpl/r/rpl_mdev_17614.result b/mysql-test/suite/rpl/r/rpl_mdev_17614.result
index ba077111522..0cc924749c8 100644
--- a/mysql-test/suite/rpl/r/rpl_mdev_17614.result
+++ b/mysql-test/suite/rpl/r/rpl_mdev_17614.result
@@ -31,7 +31,7 @@ a b c
2 2 3
stop slave;
include/wait_for_slave_to_stop.inc
-reset slave;
+include/reset_slave.inc
connection master;
reset master;
drop table t1;
@@ -191,7 +191,7 @@ a b c
2 2 3
stop slave;
include/wait_for_slave_to_stop.inc
-reset slave;
+include/reset_slave.inc
connection master;
reset master;
drop table t1;
diff --git a/mysql-test/suite/rpl/r/rpl_mixed_binlog_max_cache_size.result b/mysql-test/suite/rpl/r/rpl_mixed_binlog_max_cache_size.result
index 944ad9331ad..e94e097f41f 100644
--- a/mysql-test/suite/rpl/r/rpl_mixed_binlog_max_cache_size.result
+++ b/mysql-test/suite/rpl/r/rpl_mixed_binlog_max_cache_size.result
@@ -1,5 +1,10 @@
include/master-slave.inc
[connection master]
+connection slave;
+include/stop_slave.inc
+CHANGE MASTER TO MASTER_USE_GTID=NO;
+include/start_slave.inc
+connection master;
call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT");
call mtr.add_suppression("Write to binary log failed: Multi-row statements required more than .max_binlog_stmt_cache_size");
call mtr.add_suppression("Write to binary log failed: Multi-statement transaction required more than .max_binlog_cache_size");
diff --git a/mysql-test/suite/rpl/r/rpl_mysql57_stm_temporal_round.result b/mysql-test/suite/rpl/r/rpl_mysql57_stm_temporal_round.result
index bedd103c2a0..7a5cf257458 100644
--- a/mysql-test/suite/rpl/r/rpl_mysql57_stm_temporal_round.result
+++ b/mysql-test/suite/rpl/r/rpl_mysql57_stm_temporal_round.result
@@ -10,7 +10,7 @@ connection master;
include/rpl_stop_server.inc [server_number=1]
include/rpl_start_server.inc [server_number=1]
connection slave;
-CHANGE MASTER TO master_host='127.0.0.1', master_port=SERVER_MYPORT_1, master_user='root', master_log_file='master-bin.000001', master_log_pos=4;
+CHANGE MASTER TO master_host='127.0.0.1', master_port=SERVER_MYPORT_1, master_user='root', master_log_file='master-bin.000001', master_log_pos=4, master_use_gtid=no;
include/start_slave.inc
connection master;
connection slave;
diff --git a/mysql-test/suite/rpl/r/rpl_mysql80_stm_temporal_round.result b/mysql-test/suite/rpl/r/rpl_mysql80_stm_temporal_round.result
index 23b3217895a..8e1d3d03952 100644
--- a/mysql-test/suite/rpl/r/rpl_mysql80_stm_temporal_round.result
+++ b/mysql-test/suite/rpl/r/rpl_mysql80_stm_temporal_round.result
@@ -10,7 +10,7 @@ connection master;
include/rpl_stop_server.inc [server_number=1]
include/rpl_start_server.inc [server_number=1]
connection slave;
-CHANGE MASTER TO master_host='127.0.0.1', master_port=SERVER_MYPORT_1, master_user='root', master_log_file='master-bin.000001', master_log_pos=4;
+CHANGE MASTER TO master_host='127.0.0.1', master_port=SERVER_MYPORT_1, master_user='root', master_log_file='master-bin.000001', master_log_pos=4, master_use_gtid=no;
include/start_slave.inc
connection master;
connection slave;
diff --git a/mysql-test/suite/rpl/r/rpl_old_master.result b/mysql-test/suite/rpl/r/rpl_old_master.result
index f985bee6832..5e9d8a88a20 100644
--- a/mysql-test/suite/rpl/r/rpl_old_master.result
+++ b/mysql-test/suite/rpl/r/rpl_old_master.result
@@ -8,7 +8,7 @@ include/rpl_start_server.inc [server_number=1]
connection slave;
SET @old_parallel= @@GLOBAL.slave_parallel_threads;
SET GLOBAL slave_parallel_threads=10;
-CHANGE MASTER TO master_host='127.0.0.1', master_port=SERVER_MYPORT_1, master_user='root', master_log_file='master-bin.000001', master_log_pos=4;
+CHANGE MASTER TO master_host='127.0.0.1', master_port=SERVER_MYPORT_1, master_user='root', master_log_file='master-bin.000001', master_log_pos=4, master_use_gtid=no;
FLUSH TABLES WITH READ LOCK;
include/start_slave.inc
include/wait_for_slave_param.inc [Seconds_Behind_Master]
diff --git a/mysql-test/suite/rpl/r/rpl_old_master_29078.result b/mysql-test/suite/rpl/r/rpl_old_master_29078.result
index 731585b2c41..cb096e67a52 100644
--- a/mysql-test/suite/rpl/r/rpl_old_master_29078.result
+++ b/mysql-test/suite/rpl/r/rpl_old_master_29078.result
@@ -47,45 +47,47 @@ ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
connection slave;
-set global explicit_defaults_for_timestamp=1;
-reset slave;
+set global explicit_defaults_for_timestamp=0;
+include/reset_slave.inc
include/start_slave.inc
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `f1` timestamp NULL DEFAULT NULL,
- `f2` timestamp NULL DEFAULT NULL
+ `f1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `f2` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00'
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
show create table t2;
Table Create Table
t2 CREATE TABLE `t2` (
- `a` timestamp NULL DEFAULT NULL
+ `a` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
set time_zone='+2:00';
select * from t1;
f1 f2
-NULL NULL
-NULL NULL
+2022-07-23 16:24:48 2022-07-23 16:24:48
+2022-07-23 16:25:35 0000-00-00 00:00:00
drop table t1;
include/stop_slave.inc
-set global explicit_defaults_for_timestamp=0;
-reset slave;
+set global explicit_defaults_for_timestamp=1;
+include/reset_slave.inc
+Warnings:
+Note 4190 RESET SLAVE is implicitly changing the value of 'Using_Gtid' from 'No' to 'Slave_Pos'
include/start_slave.inc
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `f1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
- `f2` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00'
+ `f1` timestamp NULL DEFAULT NULL,
+ `f2` timestamp NULL DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
show create table t2;
Table Create Table
t2 CREATE TABLE `t2` (
- `a` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
+ `a` timestamp NULL DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
select * from t1;
f1 f2
-2022-07-23 16:24:48 2022-07-23 16:24:48
-2022-07-23 16:25:35 0000-00-00 00:00:00
+NULL NULL
+NULL NULL
drop table t1;
connection master;
drop table t2;
diff --git a/mysql-test/suite/rpl/r/rpl_parallel_29322.result b/mysql-test/suite/rpl/r/rpl_parallel_29322.result
index 43d4a717346..a5fdd43ffb0 100644
--- a/mysql-test/suite/rpl/r/rpl_parallel_29322.result
+++ b/mysql-test/suite/rpl/r/rpl_parallel_29322.result
@@ -16,7 +16,7 @@ set @@global.slave_parallel_workers = 1;
include/start_slave.inc
connection slave;
include/stop_slave.inc
-reset slave;
+include/reset_slave.inc
connection master;
reset master;
create table t2 (a timestamp, b int);
@@ -109,7 +109,9 @@ connection slave;
set @@global.explicit_defaults_for_timestamp = 1;
connection slave;
include/stop_slave.inc
-reset slave;
+include/reset_slave.inc
+Warnings:
+Note 4190 RESET SLAVE is implicitly changing the value of 'Using_Gtid' from 'No' to 'Slave_Pos'
connection master;
reset master;
create table t2 (a timestamp, b int);
@@ -201,7 +203,9 @@ set @@global.slave_parallel_workers = 4;
include/start_slave.inc
connection slave;
include/stop_slave.inc
-reset slave;
+include/reset_slave.inc
+Warnings:
+Note 4190 RESET SLAVE is implicitly changing the value of 'Using_Gtid' from 'No' to 'Slave_Pos'
connection master;
reset master;
create table t2 (a timestamp, b int);
diff --git a/mysql-test/suite/rpl/r/rpl_parallel_mdev6589.result b/mysql-test/suite/rpl/r/rpl_parallel_mdev6589.result
index 47cdb3496da..2e5ac97bf4d 100644
--- a/mysql-test/suite/rpl/r/rpl_parallel_mdev6589.result
+++ b/mysql-test/suite/rpl/r/rpl_parallel_mdev6589.result
@@ -4,7 +4,6 @@ connection server_2;
SET @old_parallel_threads=@@GLOBAL.slave_parallel_threads;
include/stop_slave.inc
SET GLOBAL slave_parallel_threads=10;
-CHANGE MASTER TO master_use_gtid=current_pos;
include/start_slave.inc
*** MDEV-6589: Incorrect relay log start position when restarting SQL thread after error in parallel replication ***
connection server_1;
diff --git a/mysql-test/suite/rpl/r/rpl_parallel_multilevel2.result b/mysql-test/suite/rpl/r/rpl_parallel_multilevel2.result
index 674cd7a32b4..ba59650983b 100644
--- a/mysql-test/suite/rpl/r/rpl_parallel_multilevel2.result
+++ b/mysql-test/suite/rpl/r/rpl_parallel_multilevel2.result
@@ -17,12 +17,10 @@ SET GLOBAL binlog_commit_wait_usec=2000000;
SET @old_updates= @@GLOBAL.binlog_direct_non_transactional_updates;
SET GLOBAL binlog_direct_non_transactional_updates=OFF;
SET SESSION binlog_direct_non_transactional_updates=OFF;
-CHANGE MASTER TO master_use_gtid=current_pos;
connection server_3;
SET @old_parallel_threads=@@GLOBAL.slave_parallel_threads;
include/stop_slave.inc
SET GLOBAL slave_parallel_threads=10;
-CHANGE MASTER TO master_use_gtid=current_pos;
connection server_1;
BEGIN;
CREATE TEMPORARY TABLE t2 (a INT PRIMARY KEY) ENGINE=MEMORY;
diff --git a/mysql-test/suite/rpl/r/rpl_parallel_temptable.result b/mysql-test/suite/rpl/r/rpl_parallel_temptable.result
index 1a1c12f836d..e9bff03bd41 100644
--- a/mysql-test/suite/rpl/r/rpl_parallel_temptable.result
+++ b/mysql-test/suite/rpl/r/rpl_parallel_temptable.result
@@ -4,7 +4,6 @@ connection server_2;
SET @old_parallel_threads=@@GLOBAL.slave_parallel_threads;
include/stop_slave.inc
SET GLOBAL slave_parallel_threads=5;
-CHANGE MASTER TO master_use_gtid= current_pos;
include/start_slave.inc
connection server_1;
CREATE TABLE t1 (a INT PRIMARY KEY, b VARCHAR(100) CHARACTER SET utf8);
diff --git a/mysql-test/suite/rpl/r/rpl_perfschema_applier_status_by_coordinator.result b/mysql-test/suite/rpl/r/rpl_perfschema_applier_status_by_coordinator.result
index 88e1848d46e..ffffb580518 100644
--- a/mysql-test/suite/rpl/r/rpl_perfschema_applier_status_by_coordinator.result
+++ b/mysql-test/suite/rpl/r/rpl_perfschema_applier_status_by_coordinator.result
@@ -55,6 +55,7 @@ connection slave;
include/stop_slave.inc
reset slave;
reset master;
+set @@global.gtid_slave_pos= "";
set @saved_slave_trans_retry_interval= @@GLOBAL.slave_transaction_retry_interval;
set global slave_transaction_retry_interval=1;
include/start_slave.inc
diff --git a/mysql-test/suite/rpl/r/rpl_perfschema_connect_config.result b/mysql-test/suite/rpl/r/rpl_perfschema_connect_config.result
index 4ace84ffac4..27cb29d3968 100644
--- a/mysql-test/suite/rpl/r/rpl_perfschema_connect_config.result
+++ b/mysql-test/suite/rpl/r/rpl_perfschema_connect_config.result
@@ -87,6 +87,8 @@ include/assert.inc [Value returned by SSS and PS table for Using_Gtid should be
change master to
master_user = 'root',
master_use_gtid= CURRENT_POS;
+Warnings:
+Warning #### 'master_use_gtid=current_pos' is deprecated and will be removed in a future release. Please use master_demote_to_slave=1 instead
include/assert.inc [Value returned by SSS and PS table for Using_Gtid should be same.]
# 3) Test for Auto_position= SLAVE_POS
diff --git a/mysql-test/suite/rpl/r/rpl_read_new_relay_log_info.result b/mysql-test/suite/rpl/r/rpl_read_new_relay_log_info.result
index 5c0002a911a..e193a7e1126 100644
--- a/mysql-test/suite/rpl/r/rpl_read_new_relay_log_info.result
+++ b/mysql-test/suite/rpl/r/rpl_read_new_relay_log_info.result
@@ -6,7 +6,7 @@ DROP TABLE t1;
connection slave;
==== Check that we can understand the new format of relay-log.info ====
include/stop_slave.inc
-RESET SLAVE;
+include/reset_slave.inc
# Read relay-log.info
START SLAVE IO_THREAD;
include/wait_for_slave_io_to_start.inc
diff --git a/mysql-test/suite/rpl/r/rpl_read_old_relay_log_info.result b/mysql-test/suite/rpl/r/rpl_read_old_relay_log_info.result
index 217bc726e0e..151a00a514b 100644
--- a/mysql-test/suite/rpl/r/rpl_read_old_relay_log_info.result
+++ b/mysql-test/suite/rpl/r/rpl_read_old_relay_log_info.result
@@ -6,7 +6,7 @@ DROP TABLE t1;
connection slave;
==== Check that we still understand the old format of relay-log.info ====
include/stop_slave.inc
-RESET SLAVE;
+include/reset_slave.inc
# Read relay-log.info
START SLAVE IO_THREAD;
include/wait_for_slave_io_to_start.inc
diff --git a/mysql-test/suite/rpl/r/rpl_reset_slave_fail.result b/mysql-test/suite/rpl/r/rpl_reset_slave_fail.result
index 34ce68cb079..ff2da0a900a 100644
--- a/mysql-test/suite/rpl/r/rpl_reset_slave_fail.result
+++ b/mysql-test/suite/rpl/r/rpl_reset_slave_fail.result
@@ -22,7 +22,7 @@ START SLAVE;
ERROR HY000: Could not initialize master info structure for ''; more error messages can be found in the MariaDB error log
START SLAVE;
ERROR HY000: Could not initialize master info structure for ''; more error messages can be found in the MariaDB error log
-RESET SLAVE;
+include/reset_slave.inc
DROP TABLE t1;
START SLAVE UNTIL MASTER_LOG_FILE= 'MASTER_LOG_FILE', MASTER_LOG_POS= MASTER_LOG_POS;;
include/wait_for_slave_sql_to_stop.inc
diff --git a/mysql-test/suite/rpl/r/rpl_row_001.result b/mysql-test/suite/rpl/r/rpl_row_001.result
index 976ac0996bf..926404d29be 100644
--- a/mysql-test/suite/rpl/r/rpl_row_001.result
+++ b/mysql-test/suite/rpl/r/rpl_row_001.result
@@ -6,7 +6,7 @@ connection master;
RESET MASTER;
connection slave;
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
connection master;
SELECT COUNT(*) FROM t1;
COUNT(*)
diff --git a/mysql-test/suite/rpl/r/rpl_row_colSize.result b/mysql-test/suite/rpl/r/rpl_row_colSize.result
index 748d83a7f8e..dbfb9325f9c 100644
--- a/mysql-test/suite/rpl/r/rpl_row_colSize.result
+++ b/mysql-test/suite/rpl/r/rpl_row_colSize.result
@@ -11,7 +11,7 @@ Warnings:
Note 1051 Unknown table 'test.t1'
connection slave;
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
CREATE TABLE t1 (a DECIMAL(5,2));
connection master;
CREATE TABLE t1 (a DECIMAL(20, 10));
@@ -25,7 +25,9 @@ SELECT COUNT(*) FROM t1;
COUNT(*)
0
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
+Warnings:
+Note 4190 RESET SLAVE is implicitly changing the value of 'Using_Gtid' from 'No' to 'Slave_Pos'
connection master;
RESET MASTER;
connection slave;
@@ -34,7 +36,9 @@ connection master;
DROP TABLE IF EXISTS t1;
connection slave;
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
+Warnings:
+Note 4190 RESET SLAVE is implicitly changing the value of 'Using_Gtid' from 'No' to 'Slave_Pos'
CREATE TABLE t1 (a DECIMAL(27, 9));
connection master;
CREATE TABLE t1 (a DECIMAL(27, 18));
@@ -48,7 +52,9 @@ SELECT COUNT(*) FROM t1;
COUNT(*)
0
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
+Warnings:
+Note 4190 RESET SLAVE is implicitly changing the value of 'Using_Gtid' from 'No' to 'Slave_Pos'
connection master;
RESET MASTER;
connection slave;
@@ -57,7 +63,9 @@ connection master;
DROP TABLE IF EXISTS t1;
connection slave;
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
+Warnings:
+Note 4190 RESET SLAVE is implicitly changing the value of 'Using_Gtid' from 'No' to 'Slave_Pos'
CREATE TABLE t1 (a NUMERIC(5,2));
connection master;
CREATE TABLE t1 (a NUMERIC(20, 10));
@@ -71,7 +79,9 @@ SELECT COUNT(*) FROM t1;
COUNT(*)
0
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
+Warnings:
+Note 4190 RESET SLAVE is implicitly changing the value of 'Using_Gtid' from 'No' to 'Slave_Pos'
connection master;
RESET MASTER;
connection slave;
@@ -81,7 +91,9 @@ connection master;
DROP TABLE IF EXISTS t1;
connection slave;
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
+Warnings:
+Note 4190 RESET SLAVE is implicitly changing the value of 'Using_Gtid' from 'No' to 'Slave_Pos'
CREATE TABLE t1 (a FLOAT(20));
connection master;
CREATE TABLE t1 (a FLOAT(47));
@@ -95,7 +107,9 @@ SELECT COUNT(*) FROM t1;
COUNT(*)
0
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
+Warnings:
+Note 4190 RESET SLAVE is implicitly changing the value of 'Using_Gtid' from 'No' to 'Slave_Pos'
connection master;
RESET MASTER;
connection slave;
@@ -105,7 +119,9 @@ connection master;
DROP TABLE IF EXISTS t1;
connection slave;
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
+Warnings:
+Note 4190 RESET SLAVE is implicitly changing the value of 'Using_Gtid' from 'No' to 'Slave_Pos'
CREATE TABLE t1 (a BIT(5));
connection master;
CREATE TABLE t1 (a BIT(64));
@@ -119,7 +135,9 @@ SELECT COUNT(*) FROM t1;
COUNT(*)
0
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
+Warnings:
+Note 4190 RESET SLAVE is implicitly changing the value of 'Using_Gtid' from 'No' to 'Slave_Pos'
connection master;
RESET MASTER;
connection slave;
@@ -128,7 +146,9 @@ connection master;
DROP TABLE IF EXISTS t1;
connection slave;
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
+Warnings:
+Note 4190 RESET SLAVE is implicitly changing the value of 'Using_Gtid' from 'No' to 'Slave_Pos'
CREATE TABLE t1 (a BIT(11));
connection master;
CREATE TABLE t1 (a BIT(12));
@@ -142,7 +162,9 @@ SELECT COUNT(*) FROM t1;
COUNT(*)
0
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
+Warnings:
+Note 4190 RESET SLAVE is implicitly changing the value of 'Using_Gtid' from 'No' to 'Slave_Pos'
connection master;
RESET MASTER;
connection slave;
@@ -152,7 +174,9 @@ connection master;
DROP TABLE IF EXISTS t1;
connection slave;
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
+Warnings:
+Note 4190 RESET SLAVE is implicitly changing the value of 'Using_Gtid' from 'No' to 'Slave_Pos'
CREATE TABLE t1 (a SET('4'));
connection master;
CREATE TABLE t1 (a SET('1','2','3','4','5','6','7','8','9'));
@@ -166,7 +190,9 @@ SELECT COUNT(*) FROM t1;
COUNT(*)
0
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
+Warnings:
+Note 4190 RESET SLAVE is implicitly changing the value of 'Using_Gtid' from 'No' to 'Slave_Pos'
connection master;
RESET MASTER;
connection slave;
@@ -176,7 +202,9 @@ connection master;
DROP TABLE IF EXISTS t1;
connection slave;
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
+Warnings:
+Note 4190 RESET SLAVE is implicitly changing the value of 'Using_Gtid' from 'No' to 'Slave_Pos'
CREATE TABLE t1 (a CHAR(10));
connection master;
CREATE TABLE t1 (a CHAR(20));
@@ -190,7 +218,9 @@ SELECT COUNT(*) FROM t1;
COUNT(*)
0
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
+Warnings:
+Note 4190 RESET SLAVE is implicitly changing the value of 'Using_Gtid' from 'No' to 'Slave_Pos'
connection master;
RESET MASTER;
connection slave;
@@ -200,7 +230,9 @@ connection master;
DROP TABLE IF EXISTS t1;
connection slave;
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
+Warnings:
+Note 4190 RESET SLAVE is implicitly changing the value of 'Using_Gtid' from 'No' to 'Slave_Pos'
CREATE TABLE t1 (a ENUM('44','54'));
connection master;
CREATE TABLE t1 (a ENUM(
@@ -245,7 +277,9 @@ SELECT COUNT(*) FROM t1;
COUNT(*)
0
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
+Warnings:
+Note 4190 RESET SLAVE is implicitly changing the value of 'Using_Gtid' from 'No' to 'Slave_Pos'
connection master;
RESET MASTER;
connection slave;
@@ -255,7 +289,9 @@ connection master;
DROP TABLE IF EXISTS t1;
connection slave;
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
+Warnings:
+Note 4190 RESET SLAVE is implicitly changing the value of 'Using_Gtid' from 'No' to 'Slave_Pos'
CREATE TABLE t1 (a VARCHAR(100));
connection master;
CREATE TABLE t1 (a VARCHAR(2000));
@@ -269,7 +305,9 @@ SELECT COUNT(*) FROM t1;
COUNT(*)
0
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
+Warnings:
+Note 4190 RESET SLAVE is implicitly changing the value of 'Using_Gtid' from 'No' to 'Slave_Pos'
connection master;
RESET MASTER;
connection slave;
@@ -278,7 +316,9 @@ connection master;
DROP TABLE IF EXISTS t1;
connection slave;
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
+Warnings:
+Note 4190 RESET SLAVE is implicitly changing the value of 'Using_Gtid' from 'No' to 'Slave_Pos'
CREATE TABLE t1 (a VARCHAR(10));
connection master;
CREATE TABLE t1 (a VARCHAR(200));
@@ -292,7 +332,9 @@ SELECT COUNT(*) FROM t1;
COUNT(*)
0
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
+Warnings:
+Note 4190 RESET SLAVE is implicitly changing the value of 'Using_Gtid' from 'No' to 'Slave_Pos'
connection master;
RESET MASTER;
connection slave;
@@ -301,7 +343,9 @@ connection master;
DROP TABLE IF EXISTS t1;
connection slave;
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
+Warnings:
+Note 4190 RESET SLAVE is implicitly changing the value of 'Using_Gtid' from 'No' to 'Slave_Pos'
CREATE TABLE t1 (a VARCHAR(1000));
connection master;
CREATE TABLE t1 (a VARCHAR(2000));
@@ -315,7 +359,9 @@ SELECT COUNT(*) FROM t1;
COUNT(*)
0
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
+Warnings:
+Note 4190 RESET SLAVE is implicitly changing the value of 'Using_Gtid' from 'No' to 'Slave_Pos'
connection master;
RESET MASTER;
connection slave;
@@ -325,7 +371,9 @@ connection master;
DROP TABLE IF EXISTS t1;
connection slave;
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
+Warnings:
+Note 4190 RESET SLAVE is implicitly changing the value of 'Using_Gtid' from 'No' to 'Slave_Pos'
CREATE TABLE t1 (a TINYBLOB);
connection master;
CREATE TABLE t1 (a LONGBLOB);
@@ -339,7 +387,9 @@ SELECT COUNT(*) FROM t1;
COUNT(*)
0
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
+Warnings:
+Note 4190 RESET SLAVE is implicitly changing the value of 'Using_Gtid' from 'No' to 'Slave_Pos'
connection master;
RESET MASTER;
connection slave;
diff --git a/mysql-test/suite/rpl/r/rpl_row_flsh_tbls.result b/mysql-test/suite/rpl/r/rpl_row_flsh_tbls.result
index 660c736795b..8ce08e9d550 100644
--- a/mysql-test/suite/rpl/r/rpl_row_flsh_tbls.result
+++ b/mysql-test/suite/rpl/r/rpl_row_flsh_tbls.result
@@ -1,5 +1,10 @@
include/master-slave.inc
[connection master]
+connection slave;
+include/stop_slave.inc
+change master to master_use_gtid=no;
+include/start_slave.inc
+connection master;
create table t1 (a int) ENGINE=MyISAM;
insert into t1 values (10);
create table t2 (a int) ENGINE=MyISAM;
diff --git a/mysql-test/suite/rpl/r/rpl_row_loaddata_concurrent.result b/mysql-test/suite/rpl/r/rpl_row_loaddata_concurrent.result
index 0704f5c69a1..bf63dc57c4b 100644
--- a/mysql-test/suite/rpl/r/rpl_row_loaddata_concurrent.result
+++ b/mysql-test/suite/rpl/r/rpl_row_loaddata_concurrent.result
@@ -75,7 +75,9 @@ load data CONCURRENT infile '../../std_data/rpl_loaddata.dat' into table t1;
connection slave;
include/wait_for_slave_sql_error.inc [errno=1062]
stop slave;
-reset slave;
+include/reset_slave.inc
+Warnings:
+Warning 1948 Specified value for @@gtid_slave_pos contains no value for replication domain 0. This conflicts with the binary log which contains GTID 0-2-11. If MASTER_GTID_POS=CURRENT_POS is used, the binlog position will override the new value of @@gtid_slave_pos
include/check_slave_no_error.inc
connection master;
reset master;
diff --git a/mysql-test/suite/rpl/r/rpl_row_mysqlbinlog.result b/mysql-test/suite/rpl/r/rpl_row_mysqlbinlog.result
index 8ba705a76ee..7e8359cebc6 100644
--- a/mysql-test/suite/rpl/r/rpl_row_mysqlbinlog.result
+++ b/mysql-test/suite/rpl/r/rpl_row_mysqlbinlog.result
@@ -91,7 +91,7 @@ include/wait_for_slave_to_stop.inc
connection master;
reset master;
connection slave;
-reset slave;
+include/reset_slave.inc
start slave;
include/wait_for_slave_to_start.inc
connection master;
@@ -168,7 +168,7 @@ ROLLBACK/*!*/;
use `test`/*!*/;
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=999999999/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=1411383296/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
@@ -191,7 +191,7 @@ ROLLBACK/*!*/;
use `test`/*!*/;
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=999999999/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=1411383296/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
@@ -221,7 +221,7 @@ include/wait_for_slave_to_stop.inc
connection master;
reset master;
connection slave;
-reset slave;
+include/reset_slave.inc
start slave;
include/wait_for_slave_to_start.inc
connection master;
@@ -306,7 +306,7 @@ ROLLBACK/*!*/;
use `test`/*!*/;
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=999999999/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=1411383296/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
@@ -335,7 +335,7 @@ ROLLBACK/*!*/;
use `test`/*!*/;
SET TIMESTAMP=1000000000/*!*/;
SET @@session.pseudo_thread_id=999999999/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=1411383296/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
@@ -356,7 +356,7 @@ include/wait_for_slave_to_stop.inc
connection master;
reset master;
connection slave;
-reset slave;
+include/reset_slave.inc
start slave;
include/wait_for_slave_to_start.inc
connection master;
diff --git a/mysql-test/suite/rpl/r/rpl_row_reset_slave.result b/mysql-test/suite/rpl/r/rpl_row_reset_slave.result
index b9e98d5a97d..5e595447e50 100644
--- a/mysql-test/suite/rpl/r/rpl_row_reset_slave.result
+++ b/mysql-test/suite/rpl/r/rpl_row_reset_slave.result
@@ -7,7 +7,7 @@ include/stop_slave.inc
change master to master_user='test';
Master_User = 'test'
Master_Host = '127.0.0.1'
-reset slave;
+include/reset_slave.inc
Master_User = 'test'
Master_Host = '127.0.0.1'
change master to master_user='root';
@@ -15,13 +15,13 @@ include/start_slave.inc
Master_User = 'root'
Master_Host = '127.0.0.1'
include/stop_slave.inc
-reset slave;
+include/reset_slave.inc
include/start_slave.inc
connection master;
create temporary table t1 (a int);
connection slave;
include/stop_slave.inc
-reset slave;
+include/reset_slave.inc
include/start_slave.inc
show status like 'slave_open_temp_tables';
Variable_name Value
@@ -30,7 +30,7 @@ connection master;
drop temporary table if exists t1;
connection slave;
include/stop_slave.inc
-reset slave;
+include/reset_slave.inc
include/check_slave_no_error.inc
change master to master_user='impossible_user_name';
start slave;
@@ -44,13 +44,14 @@ change master to master_user='impossible_user_name';
start slave;
include/wait_for_slave_io_error.inc [errno=1045]
include/stop_slave_sql.inc
-reset slave;
+include/reset_slave.inc
include/check_slave_no_error.inc
change master to master_user='root';
-reset slave;
+include/reset_slave.inc
include/start_slave.inc
include/stop_slave.inc
reset slave all;
+set @@global.gtid_slave_pos= "";
start slave;
ERROR HY000: Misconfigured slave: MASTER_HOST was not set; Fix in config file or with CHANGE MASTER TO
CHANGE MASTER TO MASTER_HOST= 'MASTER_HOST', MASTER_USER= 'MASTER_USER', MASTER_PORT= MASTER_PORT;
diff --git a/mysql-test/suite/rpl/r/rpl_row_until.result b/mysql-test/suite/rpl/r/rpl_row_until.result
index 82268ce72eb..8ef10bf47b5 100644
--- a/mysql-test/suite/rpl/r/rpl_row_until.result
+++ b/mysql-test/suite/rpl/r/rpl_row_until.result
@@ -10,7 +10,7 @@ INSERT INTO t2 VALUES (3),(4);
DROP TABLE t2;
connection slave;
include/stop_slave.inc
-RESET SLAVE;
+include/reset_slave.inc
CHANGE MASTER TO MASTER_USER='root', MASTER_CONNECT_RETRY=1, MASTER_HOST='127.0.0.1', MASTER_PORT=MASTER_MYPORT;
connection slave;
START SLAVE UNTIL MASTER_LOG_FILE='master-bin.000001', MASTER_LOG_POS=master_pos_drop_t1;
@@ -52,7 +52,7 @@ START SLAVE UNTIL RELAY_LOG_FILE='slave-relay-bin.000002', MASTER_LOG_POS=MASTER
ERROR HY000: Incorrect parameter or combination of parameters for START SLAVE UNTIL
START SLAVE UNTIL MASTER_LOG_FILE='master-bin.000001', MASTER_LOG_POS=MASTER_LOG_POS;
include/stop_slave.inc
-RESET SLAVE;
+include/reset_slave.inc
include/start_slave.inc
include/rpl_reset.inc
connection master;
diff --git a/mysql-test/suite/rpl/r/rpl_seconds_behind_master_spike.result b/mysql-test/suite/rpl/r/rpl_seconds_behind_master_spike.result
index 4eeb863bb40..eeafd679187 100644
--- a/mysql-test/suite/rpl/r/rpl_seconds_behind_master_spike.result
+++ b/mysql-test/suite/rpl/r/rpl_seconds_behind_master_spike.result
@@ -2,6 +2,9 @@ include/master-slave.inc
[connection master]
connection slave;
include/stop_slave.inc
+CHANGE MASTER TO MASTER_USE_GTID=NO;
+include/start_slave.inc
+include/stop_slave.inc
SET @save_dbug= @@GLOBAL.debug_dbug;
SET @@global.debug_dbug="+d,pause_sql_thread_on_fde";
include/start_slave.inc
diff --git a/mysql-test/suite/rpl/r/rpl_semi_sync.result b/mysql-test/suite/rpl/r/rpl_semi_sync.result
index d18bd1efda7..edd5e7748e0 100644
--- a/mysql-test/suite/rpl/r/rpl_semi_sync.result
+++ b/mysql-test/suite/rpl/r/rpl_semi_sync.result
@@ -6,16 +6,18 @@ call mtr.add_suppression("Read semi-sync reply");
call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT.");
call mtr.add_suppression("mysqld: Got an error reading communication packets");
connection slave;
+set sql_log_bin=0;
call mtr.add_suppression("Master server does not support semi-sync");
call mtr.add_suppression("Semi-sync slave .* reply");
call mtr.add_suppression("Slave SQL.*Request to stop slave SQL Thread received while applying a group that has non-transactional changes; waiting for completion of the group");
+set sql_log_bin=1;
connection master;
#
# Uninstall semi-sync plugins on master and slave
#
connection slave;
include/stop_slave.inc
-reset slave;
+include/reset_slave.inc
set global rpl_semi_sync_master_enabled= 0;
set global rpl_semi_sync_slave_enabled= 0;
connection master;
@@ -310,7 +312,7 @@ Variable_name Value
Rpl_semi_sync_master_yes_tx 0
connection slave;
include/stop_slave.inc
-reset slave;
+include/reset_slave.inc
include/kill_binlog_dump_threads.inc
connection slave;
include/start_slave.inc
@@ -340,7 +342,7 @@ Rpl_semi_sync_master_yes_tx 3
#
connection slave;
include/stop_slave.inc
-reset slave;
+include/reset_slave.inc
connection master;
reset master;
include/kill_binlog_dump_threads.inc
diff --git a/mysql-test/suite/rpl/r/rpl_semi_sync_after_sync.result b/mysql-test/suite/rpl/r/rpl_semi_sync_after_sync.result
index f2240817489..7341eb547f3 100644
--- a/mysql-test/suite/rpl/r/rpl_semi_sync_after_sync.result
+++ b/mysql-test/suite/rpl/r/rpl_semi_sync_after_sync.result
@@ -7,16 +7,18 @@ call mtr.add_suppression("Read semi-sync reply");
call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT.");
call mtr.add_suppression("mysqld: Got an error reading communication packets");
connection slave;
+set sql_log_bin=0;
call mtr.add_suppression("Master server does not support semi-sync");
call mtr.add_suppression("Semi-sync slave .* reply");
call mtr.add_suppression("Slave SQL.*Request to stop slave SQL Thread received while applying a group that has non-transactional changes; waiting for completion of the group");
+set sql_log_bin=1;
connection master;
#
# Uninstall semi-sync plugins on master and slave
#
connection slave;
include/stop_slave.inc
-reset slave;
+include/reset_slave.inc
set global rpl_semi_sync_master_enabled= 0;
set global rpl_semi_sync_slave_enabled= 0;
connection master;
@@ -311,7 +313,7 @@ Variable_name Value
Rpl_semi_sync_master_yes_tx 0
connection slave;
include/stop_slave.inc
-reset slave;
+include/reset_slave.inc
include/kill_binlog_dump_threads.inc
connection slave;
include/start_slave.inc
@@ -341,7 +343,7 @@ Rpl_semi_sync_master_yes_tx 3
#
connection slave;
include/stop_slave.inc
-reset slave;
+include/reset_slave.inc
connection master;
reset master;
include/kill_binlog_dump_threads.inc
diff --git a/mysql-test/suite/rpl/r/rpl_semi_sync_after_sync_row.result b/mysql-test/suite/rpl/r/rpl_semi_sync_after_sync_row.result
index fcced801d65..d75a3a2c9b7 100644
--- a/mysql-test/suite/rpl/r/rpl_semi_sync_after_sync_row.result
+++ b/mysql-test/suite/rpl/r/rpl_semi_sync_after_sync_row.result
@@ -7,16 +7,18 @@ call mtr.add_suppression("Read semi-sync reply");
call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT.");
call mtr.add_suppression("mysqld: Got an error reading communication packets");
connection slave;
+set sql_log_bin=0;
call mtr.add_suppression("Master server does not support semi-sync");
call mtr.add_suppression("Semi-sync slave .* reply");
call mtr.add_suppression("Slave SQL.*Request to stop slave SQL Thread received while applying a group that has non-transactional changes; waiting for completion of the group");
+set sql_log_bin=1;
connection master;
#
# Uninstall semi-sync plugins on master and slave
#
connection slave;
include/stop_slave.inc
-reset slave;
+include/reset_slave.inc
set global rpl_semi_sync_master_enabled= 0;
set global rpl_semi_sync_slave_enabled= 0;
connection master;
@@ -311,7 +313,7 @@ Variable_name Value
Rpl_semi_sync_master_yes_tx 0
connection slave;
include/stop_slave.inc
-reset slave;
+include/reset_slave.inc
include/kill_binlog_dump_threads.inc
connection slave;
include/start_slave.inc
@@ -341,7 +343,7 @@ Rpl_semi_sync_master_yes_tx 3
#
connection slave;
include/stop_slave.inc
-reset slave;
+include/reset_slave.inc
connection master;
reset master;
include/kill_binlog_dump_threads.inc
diff --git a/mysql-test/suite/rpl/r/rpl_server_id2.result b/mysql-test/suite/rpl/r/rpl_server_id2.result
index 74145645920..3d8eeb02ca6 100644
--- a/mysql-test/suite/rpl/r/rpl_server_id2.result
+++ b/mysql-test/suite/rpl/r/rpl_server_id2.result
@@ -1,6 +1,9 @@
include/master-slave.inc
[connection master]
connection slave;
+include/stop_slave.inc
+CHANGE MASTER TO MASTER_USE_GTID=NO;
+include/start_slave.inc
create table t1 (n int);
reset master;
stop slave;
diff --git a/mysql-test/suite/rpl/r/rpl_server_id_ignore.result b/mysql-test/suite/rpl/r/rpl_server_id_ignore.result
index 22f739d1ec0..3c7f2950d16 100644
--- a/mysql-test/suite/rpl/r/rpl_server_id_ignore.result
+++ b/mysql-test/suite/rpl/r/rpl_server_id_ignore.result
@@ -11,7 +11,7 @@ ignore server id list:
change master to IGNORE_SERVER_IDS= (10, 100);
*** must be 10, 100 ***
ignore server id list: 10, 100
-reset slave;
+include/reset_slave.inc
*** must be empty due to reset slave ***
ignore server id list: 10, 100
change master to IGNORE_SERVER_IDS= (10, 100);
@@ -33,7 +33,7 @@ Tables_in_test
*** allowing events from master ***
stop slave;
include/wait_for_slave_to_stop.inc
-reset slave;
+include/reset_slave.inc
change master to IGNORE_SERVER_IDS= (10, 100);
*** the list must remain (10, 100) after reset slave ***
change master to IGNORE_SERVER_IDS= ();
diff --git a/mysql-test/suite/rpl/r/rpl_skip_replication.result b/mysql-test/suite/rpl/r/rpl_skip_replication.result
index 59d5b50e5cc..96e0a30331d 100644
--- a/mysql-test/suite/rpl/r/rpl_skip_replication.result
+++ b/mysql-test/suite/rpl/r/rpl_skip_replication.result
@@ -1,6 +1,11 @@
include/master-slave.inc
[connection master]
connection slave;
+include/stop_slave.inc
+CHANGE MASTER TO MASTER_USE_GTID=NO;
+include/start_slave.inc
+connection master;
+connection slave;
CREATE USER 'nonsuperuser'@'127.0.0.1';
GRANT ALTER,CREATE,DELETE,DROP,EVENT,INSERT,PROCESS,REPLICATION SLAVE,
SELECT,UPDATE ON *.* TO 'nonsuperuser'@'127.0.0.1';
diff --git a/mysql-test/suite/rpl/r/rpl_slave_alias_replica.result b/mysql-test/suite/rpl/r/rpl_slave_alias_replica.result
index 2a49e80075f..0ede17132df 100644
--- a/mysql-test/suite/rpl/r/rpl_slave_alias_replica.result
+++ b/mysql-test/suite/rpl/r/rpl_slave_alias_replica.result
@@ -30,6 +30,7 @@ include/wait_for_slave_io_to_stop.inc
include/wait_for_slave_sql_to_stop.inc
"Command: RESET SLAVE ALL --> RESET REPLICA ALL"
RESET REPLICA ALL;
+set @@global.gtid_slave_pos= "";
connection master;
RESET MASTER;
CREATE TABLE t(f INT) ENGINE=INNODB;
diff --git a/mysql-test/suite/rpl/r/rpl_slave_max_statement_time.result b/mysql-test/suite/rpl/r/rpl_slave_max_statement_time.result
new file mode 100644
index 00000000000..0314797f6be
--- /dev/null
+++ b/mysql-test/suite/rpl/r/rpl_slave_max_statement_time.result
@@ -0,0 +1,170 @@
+include/master-slave.inc
+[connection master]
+#
+# Set up
+#
+connection master;
+SET STATEMENT sql_log_bin=0 FOR CALL mtr.add_suppression("Unsafe statement written to the binary log using statement format");
+SET STATEMENT sql_log_bin=0 FOR CALL mtr.add_suppression("Unsafe statement written to the binary log using statement format");
+connection slave;
+SET STATEMENT sql_log_bin=0 FOR CALL mtr.add_suppression("Slave log event execution was interrupted");
+SET STATEMENT sql_log_bin=0 FOR CALL mtr.add_suppression("Unsafe statement written to the binary log using statement format");
+SET @save_slave_max_statement_time=@@GLOBAL.slave_max_statement_time;
+#
+# Test Case 1) Using a serial slave, the SQL thread should time out when
+# its underlying event executes for longer than @@slave_max_statement_time.
+#
+connection master;
+create table t1(a int not null auto_increment, b int, primary key(a)) engine=InnoDB;
+include/save_master_gtid.inc
+connection slave;
+include/sync_with_master_gtid.inc
+include/stop_slave.inc
+SET @old_slave_max_statement_time=@@GLOBAL.slave_max_statement_time;
+SET GLOBAL slave_max_statement_time=0.75;
+connection master;
+# Long running command due to a lock conflict
+INSERT INTO t1(b) VALUES (1);
+include/save_master_gtid.inc
+connection slave1;
+BEGIN;
+INSERT INTO t1(b) VALUES (1);
+connection slave;
+# Starting slave to receive event which will take longer to execute
+# than slave_max_statement_time
+START SLAVE;
+include/wait_for_slave_sql_error.inc [errno=4192]
+# Ensuring event was not processed..
+# ..success
+# Remove slave timeout and catch up to master
+SET GLOBAL slave_max_statement_time=0;
+connection slave1;
+ROLLBACK;
+include/start_slave.inc
+include/sync_with_master_gtid.inc
+# Test case cleanup
+connection master;
+DROP TABLE t1;
+include/save_master_gtid.inc
+connection slave;
+include/sync_with_master_gtid.inc
+include/stop_slave.inc
+SET GLOBAL slave_max_statement_time=@old_slave_max_statement_time;
+include/start_slave.inc
+#
+# Test Case 2) Using a parallel slave, a worker thread should time out
+# when its underlying event executes for longer than
+# @@slave_max_statement_time
+#
+include/stop_slave.inc
+SET @old_parallel_threads=@@GLOBAL.slave_parallel_threads;
+SET @old_parallel_mode=@@GLOBAL.slave_parallel_mode;
+SET GLOBAL slave_parallel_threads=2;
+SET GLOBAL slave_parallel_mode='optimistic';
+include/start_slave.inc
+connection master;
+create table t1(a int not null auto_increment, b int, primary key(a)) engine=InnoDB;
+include/save_master_gtid.inc
+connection slave;
+include/sync_with_master_gtid.inc
+include/stop_slave.inc
+SET @old_slave_max_statement_time=@@GLOBAL.slave_max_statement_time;
+SET GLOBAL slave_max_statement_time=0.75;
+connection master;
+# Long running command due to a lock conflict
+INSERT INTO t1(b) VALUES (1);
+include/save_master_gtid.inc
+connection slave1;
+BEGIN;
+INSERT INTO t1(b) VALUES (1);
+connection slave;
+# Starting slave to receive event which will take longer to execute
+# than slave_max_statement_time
+START SLAVE;
+include/wait_for_slave_sql_error.inc [errno=4192]
+# Ensuring event was not processed..
+# ..success
+# Remove slave timeout and catch up to master
+SET GLOBAL slave_max_statement_time=0;
+connection slave1;
+ROLLBACK;
+include/start_slave.inc
+include/sync_with_master_gtid.inc
+# Test case cleanup
+connection master;
+DROP TABLE t1;
+include/save_master_gtid.inc
+connection slave;
+include/sync_with_master_gtid.inc
+include/stop_slave.inc
+SET GLOBAL slave_max_statement_time=@old_slave_max_statement_time;
+include/start_slave.inc
+include/stop_slave.inc
+SET GLOBAL slave_parallel_mode=@old_parallel_mode;
+SET GLOBAL slave_parallel_threads=@old_parallel_threads;
+include/start_slave.inc
+#
+# Test Case 3) Load-based log events (from LOAD DATA INFILE) should time
+# out if their execution time exceeds @@slave_max_statement_time
+#
+connection master;
+create table t1(a int not null auto_increment, b int, primary key(a)) engine=InnoDB;
+include/save_master_gtid.inc
+connection slave;
+include/sync_with_master_gtid.inc
+include/stop_slave.inc
+SET @old_slave_max_statement_time=@@GLOBAL.slave_max_statement_time;
+SET GLOBAL slave_max_statement_time=0.75;
+connection master;
+# Long running command due to a lock conflict
+load data infile '../../std_data/rpl_loaddata.dat' into table t1;
+include/save_master_gtid.inc
+connection slave1;
+BEGIN;
+INSERT INTO t1(b) VALUES (1);
+connection slave;
+# Starting slave to receive event which will take longer to execute
+# than slave_max_statement_time
+START SLAVE;
+include/wait_for_slave_sql_error.inc [errno=4192]
+# Ensuring event was not processed..
+# ..success
+# Remove slave timeout and catch up to master
+SET GLOBAL slave_max_statement_time=0;
+connection slave1;
+ROLLBACK;
+include/start_slave.inc
+include/sync_with_master_gtid.inc
+# Test case cleanup
+connection master;
+DROP TABLE t1;
+include/save_master_gtid.inc
+connection slave;
+include/sync_with_master_gtid.inc
+include/stop_slave.inc
+SET GLOBAL slave_max_statement_time=@old_slave_max_statement_time;
+include/start_slave.inc
+#
+# Test Case 4) Locally executed long running statements should not time
+# out due to @@slave_max_statement_time
+#
+connection slave;
+include/stop_slave.inc
+SET @old_slave_max_statement_time=@@GLOBAL.slave_max_statement_time;
+SET @old_gtid_domain_id=@@GLOBAL.gtid_domain_id;
+SET @@GLOBAL.slave_max_statement_time=0.75;
+SET @@GLOBAL.gtid_domain_id=1;
+include/start_slave.inc
+CREATE TABLE t2 (a int);
+SET STATEMENT sql_log_bin=0 FOR INSERT INTO t2 SELECT SLEEP(1);
+DROP TABLE t2;
+include/stop_slave.inc
+SET GLOBAL gtid_domain_id=@old_gtid_domain_id;
+SET GLOBAL slave_max_statement_time=@old_slave_max_statement_time;
+include/start_slave.inc
+# Cleanup
+include/stop_slave.inc
+SET GLOBAL slave_max_statement_time=@save_slave_max_statement_time;
+include/start_slave.inc
+include/rpl_end.inc
+# End of rpl_slave_max_statement_time.test
diff --git a/mysql-test/suite/rpl/r/rpl_slave_skip.result b/mysql-test/suite/rpl/r/rpl_slave_skip.result
index b9fe6842a11..8896199f499 100644
--- a/mysql-test/suite/rpl/r/rpl_slave_skip.result
+++ b/mysql-test/suite/rpl/r/rpl_slave_skip.result
@@ -63,7 +63,7 @@ c d
3 27
STOP SLAVE;
include/wait_for_slave_to_stop.inc
-RESET SLAVE;
+include/reset_slave.inc
connection master;
RESET MASTER;
SET SESSION BINLOG_FORMAT=STATEMENT;
diff --git a/mysql-test/suite/rpl/r/rpl_sp.result b/mysql-test/suite/rpl/r/rpl_sp.result
index 2d869787c2b..e41691ddf49 100644
--- a/mysql-test/suite/rpl/r/rpl_sp.result
+++ b/mysql-test/suite/rpl/r/rpl_sp.result
@@ -784,7 +784,7 @@ DELIMITER /*!*/;
ROLLBACK/*!*/;
SET TIMESTAMP=t/*!*/;
SET @@session.pseudo_thread_id=999999999/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
diff --git a/mysql-test/suite/rpl/r/rpl_start_alter_mysqlbinlog_1.result b/mysql-test/suite/rpl/r/rpl_start_alter_mysqlbinlog_1.result
index e008bbc81a7..bf9d9be0ec6 100644
--- a/mysql-test/suite/rpl/r/rpl_start_alter_mysqlbinlog_1.result
+++ b/mysql-test/suite/rpl/r/rpl_start_alter_mysqlbinlog_1.result
@@ -4,7 +4,6 @@ connection master;
set global binlog_alter_two_phase=true;
connection slave;
include/stop_slave.inc
-change master to master_use_gtid= current_pos;
set global gtid_strict_mode=1;
# Legacy Master Slave
connect master_node,127.0.0.1,root,,$db_name, $M_port;
diff --git a/mysql-test/suite/rpl/r/rpl_start_alter_options.result b/mysql-test/suite/rpl/r/rpl_start_alter_options.result
index 30854b12be1..4c6135aaf5e 100644
--- a/mysql-test/suite/rpl/r/rpl_start_alter_options.result
+++ b/mysql-test/suite/rpl/r/rpl_start_alter_options.result
@@ -3,6 +3,8 @@ include/master-slave.inc
connection slave;
stop slave;
change master to master_use_gtid= current_pos;
+Warnings:
+Warning 1681 'master_use_gtid=current_pos' is deprecated and will be removed in a future release. Please use master_demote_to_slave=1 instead
SET GLOBAL slave_parallel_threads=4;
set global slave_parallel_mode=optimistic;
set global gtid_strict_mode=1;
@@ -94,6 +96,8 @@ include/start_slave.inc
connection slave;
stop slave;
change master to master_use_gtid= current_pos;
+Warnings:
+Warning 1681 'master_use_gtid=current_pos' is deprecated and will be removed in a future release. Please use master_demote_to_slave=1 instead
SET GLOBAL slave_parallel_threads=4;
set global slave_parallel_mode=optimistic;
set global gtid_strict_mode=1;
@@ -185,6 +189,8 @@ include/start_slave.inc
connection slave;
stop slave;
change master to master_use_gtid= current_pos;
+Warnings:
+Warning 1681 'master_use_gtid=current_pos' is deprecated and will be removed in a future release. Please use master_demote_to_slave=1 instead
SET GLOBAL slave_parallel_threads=4;
set global slave_parallel_mode=optimistic;
set global gtid_strict_mode=1;
@@ -315,6 +321,8 @@ include/start_slave.inc
connection slave;
stop slave;
change master to master_use_gtid= current_pos;
+Warnings:
+Warning 1681 'master_use_gtid=current_pos' is deprecated and will be removed in a future release. Please use master_demote_to_slave=1 instead
SET GLOBAL slave_parallel_threads=4;
set global slave_parallel_mode=optimistic;
set global gtid_strict_mode=1;
@@ -406,6 +414,8 @@ include/start_slave.inc
connection slave;
stop slave;
change master to master_use_gtid= current_pos;
+Warnings:
+Warning 1681 'master_use_gtid=current_pos' is deprecated and will be removed in a future release. Please use master_demote_to_slave=1 instead
SET GLOBAL slave_parallel_threads=4;
set global slave_parallel_mode=optimistic;
set global gtid_strict_mode=1;
diff --git a/mysql-test/suite/rpl/r/rpl_start_alter_restart_master.result b/mysql-test/suite/rpl/r/rpl_start_alter_restart_master.result
index a2aba33aee0..2b53fde52a7 100644
--- a/mysql-test/suite/rpl/r/rpl_start_alter_restart_master.result
+++ b/mysql-test/suite/rpl/r/rpl_start_alter_restart_master.result
@@ -1,6 +1,10 @@
include/master-slave.inc
[connection master]
connection slave;
+include/stop_slave.inc
+CHANGE MASTER TO MASTER_USE_GTID=NO;
+include/start_slave.inc
+connection slave;
SET @old_debug_slave= @@global.debug;
stop slave;
SET GLOBAL slave_parallel_threads=4;
diff --git a/mysql-test/suite/rpl/r/rpl_stm_000001.result b/mysql-test/suite/rpl/r/rpl_stm_000001.result
index 9ef2ca3bc53..5d6d61d175b 100644
--- a/mysql-test/suite/rpl/r/rpl_stm_000001.result
+++ b/mysql-test/suite/rpl/r/rpl_stm_000001.result
@@ -49,7 +49,7 @@ connection master;
reset master;
connection slave;
stop slave;
-reset slave;
+include/reset_slave.inc
connection master;
connection slave;
lock tables t1 read;
diff --git a/mysql-test/suite/rpl/r/rpl_stm_binlog_max_cache_size.result b/mysql-test/suite/rpl/r/rpl_stm_binlog_max_cache_size.result
index 944ad9331ad..e94e097f41f 100644
--- a/mysql-test/suite/rpl/r/rpl_stm_binlog_max_cache_size.result
+++ b/mysql-test/suite/rpl/r/rpl_stm_binlog_max_cache_size.result
@@ -1,5 +1,10 @@
include/master-slave.inc
[connection master]
+connection slave;
+include/stop_slave.inc
+CHANGE MASTER TO MASTER_USE_GTID=NO;
+include/start_slave.inc
+connection master;
call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT");
call mtr.add_suppression("Write to binary log failed: Multi-row statements required more than .max_binlog_stmt_cache_size");
call mtr.add_suppression("Write to binary log failed: Multi-statement transaction required more than .max_binlog_cache_size");
diff --git a/mysql-test/suite/rpl/r/rpl_stm_flsh_tbls.result b/mysql-test/suite/rpl/r/rpl_stm_flsh_tbls.result
index 660c736795b..8ce08e9d550 100644
--- a/mysql-test/suite/rpl/r/rpl_stm_flsh_tbls.result
+++ b/mysql-test/suite/rpl/r/rpl_stm_flsh_tbls.result
@@ -1,5 +1,10 @@
include/master-slave.inc
[connection master]
+connection slave;
+include/stop_slave.inc
+change master to master_use_gtid=no;
+include/start_slave.inc
+connection master;
create table t1 (a int) ENGINE=MyISAM;
insert into t1 values (10);
create table t2 (a int) ENGINE=MyISAM;
diff --git a/mysql-test/suite/rpl/r/rpl_stm_loaddata_concurrent.result b/mysql-test/suite/rpl/r/rpl_stm_loaddata_concurrent.result
index f510eae74f8..a437b66dd78 100644
--- a/mysql-test/suite/rpl/r/rpl_stm_loaddata_concurrent.result
+++ b/mysql-test/suite/rpl/r/rpl_stm_loaddata_concurrent.result
@@ -74,7 +74,9 @@ load data CONCURRENT infile '../../std_data/rpl_loaddata.dat' into table t1;
connection slave;
include/wait_for_slave_sql_error.inc [errno=1062]
stop slave;
-reset slave;
+include/reset_slave.inc
+Warnings:
+Warning 1948 Specified value for @@gtid_slave_pos contains no value for replication domain 0. This conflicts with the binary log which contains GTID 0-2-14. If MASTER_GTID_POS=CURRENT_POS is used, the binlog position will override the new value of @@gtid_slave_pos
include/check_slave_no_error.inc
connection master;
reset master;
diff --git a/mysql-test/suite/rpl/r/rpl_stm_reset_slave.result b/mysql-test/suite/rpl/r/rpl_stm_reset_slave.result
index 1ba2d1b624b..0a365b30b38 100644
--- a/mysql-test/suite/rpl/r/rpl_stm_reset_slave.result
+++ b/mysql-test/suite/rpl/r/rpl_stm_reset_slave.result
@@ -7,7 +7,7 @@ include/stop_slave.inc
change master to master_user='test';
Master_User = 'test'
Master_Host = '127.0.0.1'
-reset slave;
+include/reset_slave.inc
Master_User = 'test'
Master_Host = '127.0.0.1'
change master to master_user='root';
@@ -15,13 +15,13 @@ include/start_slave.inc
Master_User = 'root'
Master_Host = '127.0.0.1'
include/stop_slave.inc
-reset slave;
+include/reset_slave.inc
include/start_slave.inc
connection master;
create temporary table t1 (a int);
connection slave;
include/stop_slave.inc
-reset slave;
+include/reset_slave.inc
include/start_slave.inc
show status like 'slave_open_temp_tables';
Variable_name Value
@@ -30,7 +30,7 @@ connection master;
drop temporary table if exists t1;
connection slave;
include/stop_slave.inc
-reset slave;
+include/reset_slave.inc
include/check_slave_no_error.inc
change master to master_user='impossible_user_name';
start slave;
@@ -44,13 +44,14 @@ change master to master_user='impossible_user_name';
start slave;
include/wait_for_slave_io_error.inc [errno=1045]
include/stop_slave_sql.inc
-reset slave;
+include/reset_slave.inc
include/check_slave_no_error.inc
change master to master_user='root';
-reset slave;
+include/reset_slave.inc
include/start_slave.inc
include/stop_slave.inc
reset slave all;
+set @@global.gtid_slave_pos= "";
start slave;
ERROR HY000: Misconfigured slave: MASTER_HOST was not set; Fix in config file or with CHANGE MASTER TO
CHANGE MASTER TO MASTER_HOST= 'MASTER_HOST', MASTER_USER= 'MASTER_USER', MASTER_PORT= MASTER_PORT;
diff --git a/mysql-test/suite/rpl/r/rpl_stm_start_stop_slave.result b/mysql-test/suite/rpl/r/rpl_stm_start_stop_slave.result
index 992e6c2181b..40910b8c1f2 100644
--- a/mysql-test/suite/rpl/r/rpl_stm_start_stop_slave.result
+++ b/mysql-test/suite/rpl/r/rpl_stm_start_stop_slave.result
@@ -104,13 +104,15 @@ connection master;
RESET MASTER;
connection slave;
include/stop_slave.inc
-CHANGE MASTER TO master_log_pos=MASTER_POS;
+CHANGE MASTER TO master_log_pos=MASTER_POS, master_use_gtid=no;
START SLAVE;
include/wait_for_slave_param.inc [Last_IO_Errno]
Last_IO_Errno = '1236'
Last_IO_Error = 'Got fatal error 1236 from master when reading data from binary log: 'Client requested master to start replication from impossible position; the first event 'master-bin.000001' at XXX, the last event read from 'master-bin.000001' at XXX, the last byte read from 'master-bin.000001' at XXX.''
include/stop_slave.inc
RESET SLAVE;
+Warnings:
+Note 4190 RESET SLAVE is implicitly changing the value of 'Using_Gtid' from 'No' to 'Slave_Pos'
connection master;
RESET MASTER;
connection slave;
diff --git a/mysql-test/suite/rpl/r/rpl_stm_until.result b/mysql-test/suite/rpl/r/rpl_stm_until.result
index 65f188c11a0..b51e3d847e3 100644
--- a/mysql-test/suite/rpl/r/rpl_stm_until.result
+++ b/mysql-test/suite/rpl/r/rpl_stm_until.result
@@ -69,7 +69,9 @@ Note 1254 Slave is already running
connection slave;
include/stop_slave.inc
drop table if exists t1;
-reset slave;
+include/reset_slave.inc
+Warnings:
+Note 4190 RESET SLAVE is implicitly changing the value of 'Using_Gtid' from 'No' to 'Slave_Pos'
change master to master_host='127.0.0.1',master_port=MASTER_PORT, master_user='root';
connection master;
drop table if exists t1;
diff --git a/mysql-test/suite/rpl/r/rpl_stop_slave.result b/mysql-test/suite/rpl/r/rpl_stop_slave.result
index a4dbf13290a..50a52d4d4b3 100644
--- a/mysql-test/suite/rpl/r/rpl_stop_slave.result
+++ b/mysql-test/suite/rpl/r/rpl_stop_slave.result
@@ -1,5 +1,10 @@
include/master-slave.inc
[connection master]
+connection slave;
+include/stop_slave.inc
+CHANGE MASTER TO MASTER_USE_GTID=NO;
+include/start_slave.inc
+connection master;
# BUG#56118 STOP SLAVE does not wait till trx with CREATE TMP TABLE ends
#
diff --git a/mysql-test/suite/rpl/r/rpl_timestamp.result b/mysql-test/suite/rpl/r/rpl_timestamp.result
index 3ced32aa72f..286e0faa6a2 100644
--- a/mysql-test/suite/rpl/r/rpl_timestamp.result
+++ b/mysql-test/suite/rpl/r/rpl_timestamp.result
@@ -7,15 +7,15 @@ create table t1 (f1 timestamp, f2 timestamp);
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `f1` timestamp NULL DEFAULT NULL,
- `f2` timestamp NULL DEFAULT NULL
+ `f1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `f2` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00'
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
connection slave;
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `f1` timestamp NULL DEFAULT NULL,
- `f2` timestamp NULL DEFAULT NULL
+ `f1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
+ `f2` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00'
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
connection master;
drop table t1;
@@ -28,7 +28,7 @@ ROLLBACK/*!*/;
use `test`/*!*/;
SET TIMESTAMP=1656940000/*!*/;
SET @@session.pseudo_thread_id=999999999/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=0/*!*/;
SET @@session.sql_mode=1411383296/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
diff --git a/mysql-test/suite/rpl/r/rpl_trigger.result b/mysql-test/suite/rpl/r/rpl_trigger.result
index 06d5a3c895f..f4f700ac477 100644
--- a/mysql-test/suite/rpl/r/rpl_trigger.result
+++ b/mysql-test/suite/rpl/r/rpl_trigger.result
@@ -1,5 +1,9 @@
include/master-slave.inc
[connection master]
+connection slave;
+include/stop_slave.inc
+CHANGE MASTER TO MASTER_USE_GTID=NO;
+include/start_slave.inc
connection master;
DROP TABLE IF EXISTS t1;
DROP TABLE IF EXISTS t2;
@@ -961,7 +965,9 @@ include/rpl_stop_server.inc [server_number=1]
include/rpl_start_server.inc [server_number=1]
--> Master binlog: Server ver: 5.0.16-debug-log, Binlog ver: 4
connection slave;
-RESET SLAVE;
+include/reset_slave.inc
+Warnings:
+Note 4190 RESET SLAVE is implicitly changing the value of 'Using_Gtid' from 'No' to 'Slave_Pos'
START SLAVE;
SELECT MASTER_POS_WAIT('master-bin.000001', 513) >= 0;
MASTER_POS_WAIT('master-bin.000001', 513) >= 0
@@ -992,7 +998,9 @@ DROP TRIGGER trg1;
DROP TABLE t1;
DROP TABLE t2;
STOP SLAVE;
-RESET SLAVE;
+include/reset_slave.inc
+Warnings:
+Note 4190 RESET SLAVE is implicitly changing the value of 'Using_Gtid' from 'No' to 'Slave_Pos'
connection master;
SHOW TABLES LIKE 't_';
Tables_in_test (t_)
@@ -1083,7 +1091,12 @@ drop table t1;
connection slave;
connection master;
include/rpl_reset.inc
+Warnings:
+Note 4190 RESET SLAVE is implicitly changing the value of 'Using_Gtid' from 'No' to 'Slave_Pos'
connection slave;
+include/stop_slave.inc
+CHANGE MASTER TO MASTER_USE_GTID=NO;
+include/start_slave.inc
connection master;
create table t1 ( f int ) engine = innodb;
create table log ( r int ) engine = myisam;
diff --git a/mysql-test/suite/rpl/r/rpl_upgrade_master_info.result b/mysql-test/suite/rpl/r/rpl_upgrade_master_info.result
index ffa041efd27..1babddf9a6e 100644
--- a/mysql-test/suite/rpl/r/rpl_upgrade_master_info.result
+++ b/mysql-test/suite/rpl/r/rpl_upgrade_master_info.result
@@ -3,7 +3,6 @@ include/master-slave.inc
*** MDEV-9383: Server fails to read master.info after upgrade 10.0 -> 10.1 ***
connection slave;
include/stop_slave.inc
-CHANGE MASTER TO master_use_gtid=CURRENT_POS;
include/rpl_stop_server.inc [server_number=2]
include/rpl_start_server.inc [server_number=2]
connection master;
diff --git a/mysql-test/suite/rpl/r/rpl_using_gtid_default.result b/mysql-test/suite/rpl/r/rpl_using_gtid_default.result
new file mode 100644
index 00000000000..e077bcd91a4
--- /dev/null
+++ b/mysql-test/suite/rpl/r/rpl_using_gtid_default.result
@@ -0,0 +1,144 @@
+include/master-slave.inc
+[connection master]
+#
+# Slave default configuration should be Slave_Pos
+connection slave;
+#
+# Ensure that a slave configured with Using_Gtid=Slave_Pos will remain
+# as Slave_Pos after RESET SLAVE
+include/stop_slave.inc
+RESET SLAVE;
+# No warning should be given because Slave_Pos never changed
+SHOW WARNINGS;
+Level Code Message
+include/start_slave.inc
+#
+# Ensure that a slave configured with Using_Gtid=No will revert to its
+# default of Slave_Pos after RESET SLAVE for a master which supports
+# GTIDs
+include/stop_slave.inc
+CHANGE MASTER TO MASTER_USE_GTID=NO;
+include/start_slave.inc
+include/stop_slave.inc
+RESET SLAVE;
+Warnings:
+Note 4190 RESET SLAVE is implicitly changing the value of 'Using_Gtid' from 'No' to 'Slave_Pos'
+# A notification that Using_Gtid was reverted should exist
+SHOW WARNINGS;
+Level Code Message
+Note 4190 RESET SLAVE is implicitly changing the value of 'Using_Gtid' from 'No' to 'Slave_Pos'
+include/start_slave.inc
+# Clear SHOW WARNINGS
+#
+# If the primary does not support GTIDs (version < 10), the replica
+# should fall back to Using_Gtid=No on slave start, and should not
+# revert Using_Gtid to Slave_Pos after RESET SLAVE
+include/stop_slave.inc
+RESET SLAVE ALL;
+CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=MASTER_MYPORT, MASTER_USER='root', MASTER_CONNECT_RETRY=1;
+SET @saved_dbug= @@GLOBAL.debug_dbug;
+set @@global.debug_dbug= "d,mock_mariadb_primary_v5_in_get_master_version";
+include/start_slave.inc
+# Replica should detect at start that the primary does not support GTIDs
+# and fall-back to Using_Gtid=No
+# Replica should have an informational message stating it is falling
+# back to Using_Gtid=No
+FOUND 1 /Falling back to Using_Gtid=No because master does not support GTIDs/ in mysqld.2.err
+include/stop_slave.inc
+RESET SLAVE;
+# Replica should know that the primary does not support GTIDs and
+# preserve Using_Gtid=No
+# 'No' was not reverted and therefore no note should be added
+SHOW WARNINGS;
+Level Code Message
+set @@global.debug_dbug= @saved_dbug;
+include/start_slave.inc
+#
+# Ensure that a slave configured with Using_Gtid=Current_Pos will revert
+# to its default of Slave_Pos after RESET SLAVE.
+include/stop_slave.inc
+CHANGE MASTER TO MASTER_USE_GTID=Current_Pos;
+Warnings:
+Warning 1681 'master_use_gtid=current_pos' is deprecated and will be removed in a future release. Please use master_demote_to_slave=1 instead
+include/start_slave.inc
+include/stop_slave.inc
+RESET SLAVE;
+Warnings:
+Note 4190 RESET SLAVE is implicitly changing the value of 'Using_Gtid' from 'Current_Pos' to 'Slave_Pos'
+# A notification that Using_Gtid was reverted should exist
+SHOW WARNINGS;
+Level Code Message
+Note 4190 RESET SLAVE is implicitly changing the value of 'Using_Gtid' from 'Current_Pos' to 'Slave_Pos'
+include/start_slave.inc
+# Clear SHOW WARNINGS
+# The MTR include file rpl_change_topology.inc should implicitly set
+# MASTER_USE_GTID=NO when provided with $rpl_master_log_file. Note that
+# this will switch master and slave roles.
+connection slave;
+include/stop_slave.inc
+include/rpl_change_topology.inc [new topology=2->1]
+# connection 'master' is the slave in this comparison
+connection master;
+# Validating Using_Gtid=No..
+# ..success
+include/rpl_change_topology.inc [new topology=1->2]
+# connection 'slave' is back to slave role
+connection slave;
+# Validating Using_Gtid=Slave_Pos..
+# ..success
+include/start_slave.inc
+#
+# The MTR include file reset_slave.inc should keep/delete GTID state
+# when reset_slave_keep_gtid_state is set, respectively.
+#
+connection master;
+CREATE TABLE t1 (a INT);
+INSERT INTO t1 VALUES (1);
+DROP TABLE t1;
+include/save_master_gtid.inc
+connection slave;
+include/sync_with_master_gtid.inc
+include/stop_slave.inc
+# Tagging gtid_slave_pos before reset_slave.inc as old_slave_pos
+# Using reset_slave_keep_gtid_state=1 should preserve GTID state
+include/reset_slave.inc
+# Tagging gtid_slave_pos after reset_slave.inc as new_slave_pos
+# Validating old_slave_pos == new_slave_pos..
+# ..success
+# Using reset_slave_keep_gtid_state=0 should empty GTID state
+include/reset_slave.inc
+# Tagging gtid_slave_pos as new_slave_pos
+# Validating new_slave_pos is empty..
+# ..success
+set global gtid_slave_pos="old_slave_pos";
+include/start_slave.inc
+#
+# A replica issued CHANGE MASTER TO specified with log coordinates but
+# not master_use_gtid=no should warn the user that Using_Gtid is being
+# changed to No.
+#
+connection slave;
+include/stop_slave.inc
+CHANGE MASTER TO master_log_pos=io_log_pos, master_log_file='io_log_file';
+Warnings:
+Note 4190 CHANGE MASTER TO is implicitly changing the value of 'Using_Gtid' from 'Slave_Pos' to 'No'
+include/start_slave.inc
+#
+# A replica issued CHANGE MASTER TO specified with log coordinates and
+# master_use_gtid=Slave_Pos should warn the user that the log
+# coordinates will be ignored.
+#
+connection slave;
+include/stop_slave.inc
+CHANGE MASTER TO master_log_pos=io_log_pos, master_log_file='io_log_file', master_use_gtid=Slave_Pos;
+Warnings:
+Note 1618 <MASTER_LOG_FILE> option ignored
+Note 1618 <MASTER_LOG_POS> option ignored
+CHANGE MASTER TO relay_log_pos=relay_log_pos, relay_log_file='relay_log_file', master_use_gtid=Slave_Pos;
+Warnings:
+Note 1618 <RELAY_LOG_FILE> option ignored
+Note 1618 <RELAY_LOG_POS> option ignored
+include/start_slave.inc
+include/rpl_end.inc
+#
+# End of rpl_using_gtid_default.test
diff --git a/mysql-test/suite/rpl/r/rpl_xa_gap_lock.result b/mysql-test/suite/rpl/r/rpl_xa_gap_lock.result
index cb760abe2d2..97e8f2105c4 100644
--- a/mysql-test/suite/rpl/r/rpl_xa_gap_lock.result
+++ b/mysql-test/suite/rpl/r/rpl_xa_gap_lock.result
@@ -38,7 +38,7 @@ include/diff_tables.inc [master:test.t1, slave:test.t1]
include/diff_tables.inc [master:test.t2, slave:test.t2]
DROP TABLE t2, t1;
connection slave;
-CHANGE MASTER TO MASTER_LOG_FILE='LOG_FILE', MASTER_LOG_POS=LOG_POS;
+CHANGE MASTER TO MASTER_LOG_FILE='LOG_FILE', MASTER_LOG_POS=LOG_POS, MASTER_USE_GTID=NO;
SET @@GLOBAL.innodb_limit_optimistic_insert_debug = @saved_innodb_limit_optimistic_insert_debug;
include/start_slave.inc
include/rpl_end.inc
diff --git a/mysql-test/suite/rpl/r/semisync_future-7591.result b/mysql-test/suite/rpl/r/semisync_future-7591.result
index 9dc0ee51e53..80414ac1f8d 100644
--- a/mysql-test/suite/rpl/r/semisync_future-7591.result
+++ b/mysql-test/suite/rpl/r/semisync_future-7591.result
@@ -6,7 +6,7 @@ set global rpl_semi_sync_master_enabled = ON;
connection slave;
include/stop_slave.inc
set global rpl_semi_sync_slave_enabled = ON;
-change master to master_log_file='master-bin.000002', master_log_pos = 320;
+change master to master_log_file='master-bin.000002', master_log_pos = 320, master_use_gtid=no;
start slave;
include/wait_for_slave_io_error.inc [errno=1236]
connection master;
@@ -14,7 +14,9 @@ insert into t1 values (1);
reset master;
connection slave;
include/stop_slave.inc
-reset slave;
+include/reset_slave.inc
+Warnings:
+Note 4190 RESET SLAVE is implicitly changing the value of 'Using_Gtid' from 'No' to 'Slave_Pos'
include/start_slave.inc
set global rpl_semi_sync_slave_enabled = OFF;
connection master;
diff --git a/mysql-test/suite/rpl/t/rpl_000010.test b/mysql-test/suite/rpl/t/rpl_000010.test
index de6337dd723..9ff2d6c562d 100644
--- a/mysql-test/suite/rpl/t/rpl_000010.test
+++ b/mysql-test/suite/rpl/t/rpl_000010.test
@@ -3,6 +3,12 @@
source include/master-slave.inc;
+--connection slave
+--source include/stop_slave.inc
+CHANGE MASTER TO MASTER_USE_GTID=NO;
+--source include/start_slave.inc
+--connection master
+
create table t1 (n int not null auto_increment primary key);
insert into t1 values(NULL);
insert into t1 values(2);
diff --git a/mysql-test/suite/rpl/t/rpl_binlog_dump_slave_gtid_state_info.test b/mysql-test/suite/rpl/t/rpl_binlog_dump_slave_gtid_state_info.test
index f26e9565671..bba41295d16 100644
--- a/mysql-test/suite/rpl/t/rpl_binlog_dump_slave_gtid_state_info.test
+++ b/mysql-test/suite/rpl/t/rpl_binlog_dump_slave_gtid_state_info.test
@@ -8,7 +8,7 @@
# Steps:
# 0 - Have LOG_WARNINGS=2
# 1 - On a fresh slave server which has not replicated any GTIDs execute
-# "CHANGE MASTER TO MASTER_USE_GTID=current_pos;" command. Start the
+# "CHANGE MASTER TO MASTER_USE_GTID=slave_pos;" command. Start the
# slave.
# 2 - In Master error log verify that pattern "using_gtid(1), gtid('')" is
# present.
@@ -43,7 +43,7 @@ SET GLOBAL LOG_WARNINGS=2;
--connection slave
--source include/stop_slave.inc
-CHANGE MASTER TO MASTER_USE_GTID=current_pos;
+CHANGE MASTER TO MASTER_USE_GTID=slave_pos;
--source include/start_slave.inc
--connection master
diff --git a/mysql-test/suite/rpl/t/rpl_binlog_errors.test b/mysql-test/suite/rpl/t/rpl_binlog_errors.test
index bf92736a2af..ab95c9b4ee3 100644
--- a/mysql-test/suite/rpl/t/rpl_binlog_errors.test
+++ b/mysql-test/suite/rpl/t/rpl_binlog_errors.test
@@ -389,6 +389,11 @@ RESET MASTER;
--source include/rpl_reset.inc
-- connection slave
+# Slave tests rely on logic of non-gtid mode
+--source include/stop_slave.inc
+CHANGE MASTER TO MASTER_USE_GTID=NO;
+--source include/start_slave.inc
+
# slave suppressions
call mtr.add_suppression("Slave I/O: Relay log write failure: could not queue event from master.*");
diff --git a/mysql-test/suite/rpl/t/rpl_cant_read_event_incident.test b/mysql-test/suite/rpl/t/rpl_cant_read_event_incident.test
index 7dfef023947..7c1d0ea25e2 100644
--- a/mysql-test/suite/rpl/t/rpl_cant_read_event_incident.test
+++ b/mysql-test/suite/rpl/t/rpl_cant_read_event_incident.test
@@ -22,6 +22,10 @@
--source include/master-slave.inc
--connection slave
+--source include/stop_slave.inc
+CHANGE MASTER TO MASTER_USE_GTID=NO;
+--source include/start_slave.inc
+
# Make sure the slave is stopped while we are messing with master.
# Otherwise we get occasional failures as the slave manages to re-connect
# to the newly started master and we get extra events applied, causing
@@ -49,7 +53,8 @@ show binlog events;
--connection slave
call mtr.add_suppression("Slave I/O: Got fatal error 1236 from master when reading data from binary log");
-reset slave;
+--let $master_use_gtid_option= No
+--source include/reset_slave.inc
start slave;
# ER_MASTER_FATAL_ERROR_READING_BINLOG 1236
diff --git a/mysql-test/suite/rpl/t/rpl_change_master.test b/mysql-test/suite/rpl/t/rpl_change_master.test
index 9ab49a585e6..2758f9d6e27 100644
--- a/mysql-test/suite/rpl/t/rpl_change_master.test
+++ b/mysql-test/suite/rpl/t/rpl_change_master.test
@@ -108,4 +108,10 @@ CHANGE MASTER TO MASTER_USER='root', MASTER_SSL=0, MASTER_SSL_CA='', MASTER_SSL_
MASTER_SSL_KEY='', MASTER_SSL_CRL='', MASTER_SSL_CRLPATH='';
CHANGE MASTER TO MASTER_USER='root', MASTER_PASSWORD='', MASTER_SSL=0;
+
+# MDEV-20122: Deprecate MASTER_USE_GTID=Current_Pos to favor new MASTER_DEMOTE_TO_SLAVE option
+--echo "Usage of CURRENT_POS in CHANGE MASTER MASTER_USE_GTID is dreprecated.
+CHANGE MASTER TO MASTER_USE_GTID=CURRENT_POS;
+CHANGE MASTER TO MASTER_USE_GTID=SLAVE_POS;
+
--source include/rpl_end.inc
diff --git a/mysql-test/suite/rpl/t/rpl_change_master_demote.test b/mysql-test/suite/rpl/t/rpl_change_master_demote.test
new file mode 100644
index 00000000000..15b55014975
--- /dev/null
+++ b/mysql-test/suite/rpl/t/rpl_change_master_demote.test
@@ -0,0 +1,470 @@
+#
+# Purpose:
+#
+# This test suite ensures that the MASTER_DEMOTE_TO_SLAVE option of
+# CHANGE MASTER TO will merge the binlog GTID position (gtid_binlog_pos) into
+# the replication state (gtid_slave_pos).
+#
+#
+# Methodology:
+#
+# A series of test cases validate that MASTER_DEMOTE_TO_SLAVE correctly
+# merges the binlog GTID state into the replication state. Each test case
+# sets up the context in which it will demote the master to a slave, and then
+# calls into an include file to perform the actual demotion and validation.
+# Specifically, the include file will demote the master to be the slave,
+# promote the slave to be the master, ensure that gtid_slave_pos matches
+# gtid_current_pos, ensure replication works correctly in this new
+# configuration, and return the master and slave to their previous roles.
+#
+# The test cases are as follows:
+# 1) When both gtid_binlog_pos and gtid_slave_pos are empty,
+# MASTER_DEMOTE_TO_SLAVE=1 results in no change to replication state.
+#
+# 2) If gtid_slave_pos is empty, gtid_binlog_pos will completely
+# overwrite it with MASTER_DEMOTE_TO_SLAVE=1.
+#
+# 3) Using a single domain id, if neither gtid_slave_pos nor
+# gtid_binlog_pos are empty, and gtid_binlog_pos is more recent, then
+# gtid_binlog_pos will overwrite gtid_slave_pos when MASTER_DEMOTE_TO_SLAVE=1.
+#
+# 4) If gtid_slave_pos and gtid_binlog_pos are equivalent,
+# MASTER_DEMOTE_TO_SLAVE=1 will not change gtid_slave_pos.
+#
+# 5) If multiple new domain ids are added into gtid_binlog_pos while
+# gtid_slave_pos already has a state, MASTER_DEMOTE_TO_SLAVE=1 will append
+# new GTIDs to gtid_slave_pos with the latest seq_no from each domain.
+#
+# 6) If gtid_slave_pos has multiple GTID positions and gtid_binlog_pos
+# contains updates on existing domain ids, new domains, and differing
+# server_ids, MASTER_DEMOTE_TO_SLAVE=1 will update gtid_slave_pos such that
+# it will have the seq_nos only from the GTIDs last applied by this server.
+# In other words, any GTIDs with server ids that don't match that of the
+# demoting server will be ignored in the update.
+#
+# 7) If MASTER_DEMOTE_TO_SLAVE=1 is combined with IGNORE_DOMAIN_IDS such
+# that gtid_binlog_pos has more recent GTIDs than gtid_slave_pos in ignored
+# domains, the CHANGE MASTER TO command will still update gtid_slave_pos with
+# the most recent transactions from gtid_binlog_pos, despite being ignored by
+# CHANGE MASTER TO because they were already applied on the server.
+#
+# 8) If gtid_binlog_pos is more recent than gtid_slave_pos, and
+# MASTER_DEMOTE_TO_SLAVE=1 is combined with a later call to
+# START SLAVE UNTIL master_gtid_pos=<G> such that
+# gtid_slave_pos < G < gtid_binlog_pos, then the slave should stop
+# immediately after SSU because gtid_slave_pos should already be after the
+# UNTIL GTID.
+#
+# 9) If gtid_slave_pos is more recent than gtid_binlog_pos when demoting
+# the master to become a slave, the replication state should be preserved.
+#
+# 10) MASTER_DEMOTE_TO_SLAVE=0 should not change replication state,
+# regardless of gtid_slave_pos in comparison to gtid_binlog_pos.
+#
+#
+# Error cases:
+# Error Case 1) MASTER_DEMOTE_TO_SLAVE=1 combined with
+# MASTER_USE_GTID=NO should result in an error.
+#
+# Error Case 2) Error when MASTER_DEMOTE_TO_SLAVE=1 is used without
+# binary logging enabled.
+#
+# Error Case 3) Error when MASTER_DEMOTE_TO_SLAVE is provided a
+# non-boolean value.
+#
+#
+# References:
+# MDEV-19801: Change defaults for CHANGE MASTER TO so that GTID-based
+# replication is used by default if master supports it
+#
+--source include/master-slave.inc
+--source include/have_log_bin.inc
+--source include/have_binlog_format_mixed.inc
+
+--connection slave
+--source include/stop_slave.inc
+change master to master_use_gtid=slave_pos;
+--source include/start_slave.inc
+--source include/sync_with_master_gtid.inc
+
+--echo #
+--echo # Test Case 1: When both gtid_binlog_pos and gtid_slave_pos are
+--echo # empty, MASTER_DEMOTE_TO_SLAVE=1 results in no change to replication
+--echo # state.
+--echo #
+--source include/rpl_change_master_demote.inc
+
+
+--echo #
+--echo # Test Case 2: If gtid_slave_pos is empty, gtid_binlog_pos will
+--echo # completely overwrite it with MASTER_DEMOTE_TO_SLAVE=1.
+--echo #
+--connection slave
+--source include/stop_slave.inc
+RESET MASTER;
+set @@global.gtid_slave_pos="";
+--source include/start_slave.inc
+--connection master
+RESET MASTER;
+set @@global.gtid_slave_pos="";
+set session gtid_domain_id= 0;
+CREATE TABLE t1 (a int);
+INSERT INTO t1 VALUES (1);
+--source include/save_master_gtid.inc
+--connection slave
+--source include/sync_with_master_gtid.inc
+--source include/rpl_change_master_demote.inc
+
+
+--echo #
+--echo # Test Case 3: Using a single domain id, if neither gtid_slave_pos nor
+--echo # gtid_binlog_pos are empty, and gtid_binlog_pos is more recent, then
+--echo # gtid_binlog_pos will overwrite gtid_slave_pos when
+--echo # MASTER_DEMOTE_TO_SLAVE=1.
+--echo #
+--connection master
+INSERT INTO t1 VALUES (2);
+--source include/save_master_gtid.inc
+--connection slave
+--source include/sync_with_master_gtid.inc
+--source include/rpl_change_master_demote.inc
+
+
+--echo #
+--echo # Test Case 4: If gtid_slave_pos and gtid_binlog_pos are equivalent,
+--echo # MASTER_DEMOTE_TO_SLAVE=1 will not change gtid_slave_pos.
+--echo #
+--connection master
+
+--echo # update gtid_binlog_pos and demote it (we have proven this works)
+INSERT INTO t1 VALUES (3);
+--echo # Update to account for statements to verify replication in include file
+--replace_result $SLAVE_MYPORT SLAVE_PORT
+--eval CHANGE MASTER TO master_host='127.0.0.1', master_port=$SLAVE_MYPORT, master_user='root', master_use_gtid=slave_pos, master_demote_to_slave=1
+RESET SLAVE ALL;
+
+--source include/save_master_gtid.inc
+--connection slave
+--source include/sync_with_master_gtid.inc
+--source include/rpl_change_master_demote.inc
+
+
+--echo #
+--echo # Test Case 5: If a new domain id is added into gtid_binlog_pos while
+--echo # gtid_slave_pos already has a state, MASTER_DEMOTE_TO_SLAVE=1 will
+--echo # append a new GTID to gtid_slave_pos with the latest seq_no from that
+--echo # domain.
+--echo #
+--connection master
+
+--echo # Domain_id
+set session gtid_domain_id= 0;
+INSERT INTO t1 VALUES (4);
+
+set session gtid_domain_id= 1;
+CREATE TABLE t2 (a int);
+INSERT INTO t2 VALUES (1);
+
+--source include/save_master_gtid.inc
+--connection slave
+--source include/sync_with_master_gtid.inc
+--source include/rpl_change_master_demote.inc
+
+
+--echo #
+--echo # Test Case 6: If gtid_slave_pos has multiple GTID positions and
+--echo # gtid_binlog_pos contains updates on existing domain ids, new
+--echo # domains, and differing server_ids, MASTER_DEMOTE_TO_SLAVE=1 will
+--echo # update gtid_slave_pos such that it will have the seq_nos only from
+--echo # the GTIDs last applied by this server. In other words, any GTIDs
+--echo # with server ids that don't match that of the demoting server will be
+--echo # ignored in the update.
+--echo #
+
+--connection master
+--echo # Update to account for statements to verify replication in include file
+set session gtid_domain_id= 0;
+INSERT INTO t1 VALUES (5);
+--replace_result $SLAVE_MYPORT SLAVE_PORT
+--eval CHANGE MASTER TO master_host='127.0.0.1', master_port=$SLAVE_MYPORT, master_user='root', master_use_gtid=slave_pos, master_demote_to_slave=1
+RESET SLAVE ALL;
+
+set session gtid_domain_id= 1;
+INSERT INTO t2 VALUES (2);
+
+set session gtid_domain_id= 2;
+CREATE TABLE t3 (a int);
+INSERT INTO t3 VALUES (1);
+
+--echo # The following events have a different server_id and should not go into
+--echo # gtid_slave_pos
+set @old_server_id = @@server_id;
+set session gtid_domain_id= 1;
+set session server_id= 3;
+INSERT INTO t2 VALUES (3);
+
+set session gtid_domain_id= 4;
+set session server_id= 3;
+CREATE TABLE t5 (a int);
+INSERT INTO t5 VALUES (1);
+set session server_id= @old_server_id;
+
+--source include/save_master_gtid.inc
+--connection slave
+--source include/sync_with_master_gtid.inc
+--source include/rpl_change_master_demote.inc
+
+
+--echo #
+--echo # Test Case 7: If MASTER_DEMOTE_TO_SLAVE=1 is combined with
+--echo # IGNORE_DOMAIN_IDS such that gtid_binlog_pos has more recent GTIDs
+--echo # than gtid_slave_pos in ignored domains, the CHANGE MASTER TO command
+--echo # will still update gtid_slave_pos with the most recent transactions
+--echo # from gtid_binlog_pos, despite being ignored by CHANGE MASTER TO
+--echo # because they were already applied on the server.
+--echo #
+--connection master
+
+set session gtid_domain_id= 2;
+INSERT INTO t3 VALUES (2);
+
+set session gtid_domain_id= 3;
+CREATE TABLE t4 (a int);
+INSERT INTO t4 VALUES (1);
+
+--source include/save_master_gtid.inc
+--connection slave
+--source include/sync_with_master_gtid.inc
+--let $ignore_domain_ids=2,3
+--source include/rpl_change_master_demote.inc
+
+
+--echo #
+--echo # Test Case 8: If gtid_binlog_pos is more recent than gtid_slave_pos,
+--echo # and MASTER_DEMOTE_TO_SLAVE=1 is combined with a later call to
+--echo # START SLAVE UNTIL master_gtid_pos=<G> such that
+--echo # gtid_slave_pos < G < gtid_binlog_pos, then the slave should stop
+--echo # immediately after SSU because gtid_slave_pos should be updated to be
+--echo # after G.
+--echo #
+
+--connection master
+set session gtid_domain_id= 0;
+INSERT INTO t1 VALUES (6);
+--let $ssu_middle_binlog_pos= `SELECT @@GLOBAL.gtid_binlog_pos`
+--echo # Tagging ssu_middle_binlog_pos here to be used for START SLAVE UNTIL
+INSERT INTO t1 VALUES (7);
+--source include/save_master_gtid.inc
+
+--echo # Ensure slave is up-to-date with master and then disable slave status
+--connection slave
+--source include/sync_with_master_gtid.inc
+--source include/stop_slave.inc
+
+--connection master
+SELECT VARIABLE_NAME, GLOBAL_VALUE FROM INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE VARIABLE_NAME LIKE 'gtid_binlog_pos' OR VARIABLE_NAME LIKE 'gtid_slave_pos' ORDER BY VARIABLE_NAME ASC;
+--replace_result $SLAVE_MYPORT SLAVE_PORT
+--eval CHANGE MASTER TO master_host='127.0.0.1', master_port=$SLAVE_MYPORT, master_user='root', master_use_gtid=Slave_Pos, master_demote_to_slave=1
+SELECT VARIABLE_NAME, GLOBAL_VALUE FROM INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE VARIABLE_NAME LIKE 'gtid_binlog_pos' OR VARIABLE_NAME LIKE 'gtid_slave_pos' ORDER BY VARIABLE_NAME ASC;
+
+--echo # GTID ssu_middle_binlog_pos should be considered in the past because
+--echo # gtid_slave_pos should be updated using the latest binlog gtids.
+--echo # The following call to sync_with_master_gtid.inc uses the latest
+--echo # binlog position and should still succeed despite the SSU stop
+--echo # position pointing to a previous event (because
+--echo # master_demote_to_slave=1 merges gtid_binlog_pos into gtid_slave_pos).
+--replace_result $ssu_middle_binlog_pos ssu_middle_binlog_pos
+eval START SLAVE UNTIL master_gtid_pos="$ssu_middle_binlog_pos";
+
+--echo # Slave needs time to start and stop automatically
+# Note sync_with_master_gtid.inc, wait_for_slave_to_start.inc, and
+# wait_for_slave_to_stop.inc won't work due to replication state and race
+# conditions
+--sleep 1
+
+--echo # Validating neither SQL nor IO threads are running..
+--let $io_state= query_get_value("SHOW SLAVE STATUS", Slave_IO_State, 1)
+if (`SELECT strcmp("$io_state","") != 0`)
+{
+ die "IO thread should not be running after START SLAVE UNTIL master_gtid_pos using a pre-existing GTID";
+}
+--let $sql_state= query_get_value("SHOW SLAVE STATUS", Slave_SQL_Running_State, 1)
+if (`SELECT strcmp("$sql_state","") != 0`)
+{
+ die "SQL thread should not be running after START SLAVE UNTIL master_gtid_pos using a pre-existing GTID";
+}
+--echo # ..success
+
+--echo # Clean slave state of master
+RESET SLAVE ALL;
+
+
+--echo #
+--echo # Test Case 9: If gtid_slave_pos is more recent than gtid_binlog_pos
+--echo # when demoting the master to become a slave, the replication state
+--echo # should be preserved.
+--echo #
+
+--echo # rpl_change_master_demote.inc should force
+--echo # gtid_slave_pos > gtid_binlog_pos in domain 0 (due to the step which
+--echo # validates replication works)
+--connection master
+--source include/rpl_change_master_demote.inc
+
+--let $current_pos= `SELECT @@gtid_current_pos`
+
+--echo # Demote master to slave with the more recent gtid_slave_pos
+--connection master
+--let $old_slave_pos= `SELECT @@gtid_slave_pos`
+--replace_result $SLAVE_MYPORT SLAVE_PORT
+--eval CHANGE MASTER TO master_host='127.0.0.1', master_port=$SLAVE_MYPORT, master_user='root', master_use_gtid=slave_pos, master_demote_to_slave=1
+--let $new_slave_pos= `SELECT @@gtid_slave_pos`
+
+--echo # Validating gtid_slave_pos is unchanged..
+if ($old_slave_pos != $new_slave_pos)
+{
+ SELECT VARIABLE_NAME, GLOBAL_VALUE FROM INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE VARIABLE_NAME LIKE 'gtid_binlog_pos' OR VARIABLE_NAME LIKE 'gtid_slave_pos' OR VARIABLE_NAME LIKE 'gtid_current_pos' ORDER BY VARIABLE_NAME ASC;
+ die "gtid_slave_pos should not change when MASTER_DEMOTE_TO_SLAVE=0";
+}
+--echo # ..success
+
+--echo # Validating gtid_slave_pos == gtid_binlog_pos..
+if ($new_slave_pos != $current_pos)
+{
+ SELECT VARIABLE_NAME, GLOBAL_VALUE FROM INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE VARIABLE_NAME LIKE 'gtid_binlog_pos' OR VARIABLE_NAME LIKE 'gtid_slave_pos' OR VARIABLE_NAME LIKE 'gtid_current_pos' ORDER BY VARIABLE_NAME ASC;
+ die gtid_slave_pos calculation after master_demote_to_slave=1 differs from gtid_current_pos;
+}
+--echo # ..success
+
+--echo # Clean slave state of master
+RESET SLAVE ALL;
+
+
+--echo #
+--echo # Test Case 10: MASTER_DEMOTE_TO_SLAVE=0 should not change replication
+--echo # state, regardless of gtid_slave_pos in comparison to gtid_binlog_pos.
+--echo #
+
+--echo # In domain 0, make gtid_slave_pos > gtid_binlog_pos
+--connection master
+--source include/rpl_change_master_demote.inc
+
+--echo # Tag gtid_slave_pos now (before binlog updates) for later comparison
+--let $old_slave_pos= `SELECT @@gtid_slave_pos`
+
+--connection master
+--echo # In domain 1, make gtid_slave_pos < gtid_binlog_pos
+set session gtid_domain_id= 1;
+INSERT INTO t2 VALUES (4);
+
+--echo # In domains 2, 3 and 4, gtid_slave_pos == gtid_binlog_pos
+
+--echo # Include a new domain id (5)
+set session gtid_domain_id= 5;
+CREATE TABLE t6 (a int);
+INSERT INTO t6 VALUES (1);
+
+SELECT VARIABLE_NAME, GLOBAL_VALUE FROM INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE VARIABLE_NAME LIKE 'gtid_binlog_pos' OR VARIABLE_NAME LIKE 'gtid_slave_pos' ORDER BY VARIABLE_NAME ASC;
+--replace_result $SLAVE_MYPORT SLAVE_PORT
+--eval CHANGE MASTER TO master_host='127.0.0.1', master_port=$SLAVE_MYPORT, master_user='root', master_use_gtid=slave_pos, master_demote_to_slave=0
+
+--echo # Validating gtid_slave_pos is unchanged..
+--let $new_slave_pos= `SELECT @@gtid_slave_pos`
+if ($old_slave_pos != $new_slave_pos)
+{
+ SELECT VARIABLE_NAME, GLOBAL_VALUE FROM INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE VARIABLE_NAME LIKE 'gtid_binlog_pos' OR VARIABLE_NAME LIKE 'gtid_slave_pos' ORDER BY VARIABLE_NAME ASC;
+ die gtid_slave_pos should not change when MASTER_DEMOTE_TO_SLAVE=0;
+}
+--echo # ..success
+
+--echo # Clean slave state of master
+--replace_result $SLAVE_MYPORT SLAVE_PORT
+--eval CHANGE MASTER TO master_host='127.0.0.1', master_port=$SLAVE_MYPORT, master_user='root', master_use_gtid=slave_pos, master_demote_to_slave=1
+RESET SLAVE ALL;
+SELECT VARIABLE_NAME, GLOBAL_VALUE FROM INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE VARIABLE_NAME LIKE 'gtid_binlog_pos' OR VARIABLE_NAME LIKE 'gtid_slave_pos' ORDER BY VARIABLE_NAME ASC;
+
+
+--echo #
+--echo #
+--echo # Stop slave for error test cases
+--connection slave
+--source include/stop_slave.inc
+
+--echo #
+--echo # Error Case 1: MASTER_DEMOTE_TO_SLAVE=1 combined with
+--echo # MASTER_USE_GTID=NO should result in an error.
+--echo #
+--connection master
+--replace_result $SLAVE_MYPORT SLAVE_PORT
+--error 4191
+--eval CHANGE MASTER TO master_host='127.0.0.1', master_port=$SLAVE_MYPORT, master_user='root', master_use_gtid=no, master_demote_to_slave=1
+
+
+--echo #
+--echo # Error Case 2: Error when MASTER_DEMOTE_TO_SLAVE=1 is used without
+--echo # binary logging enabled.
+--echo #
+--connection master
+
+--echo # Restarting master without binary log
+--write_file $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
+wait
+EOF
+--shutdown_server
+--source include/wait_until_disconnected.inc
+--append_file $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
+restart: --skip-slave-start=1 --skip-log-bin
+EOF
+--enable_reconnect
+--source include/wait_until_connected_again.inc
+
+--replace_result $SLAVE_MYPORT SLAVE_PORT
+--error 1381
+--eval CHANGE MASTER TO master_host='127.0.0.1', master_port=$SLAVE_MYPORT, master_user='root', master_use_gtid=Slave_Pos, master_demote_to_slave=1
+
+--echo # Restarting master to re-enable binary log
+--write_file $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
+wait
+EOF
+--shutdown_server
+--source include/wait_until_disconnected.inc
+--append_file $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
+restart: --skip-slave-start=1
+EOF
+--enable_reconnect
+--source include/wait_until_connected_again.inc
+
+--connection server_1
+--enable_reconnect
+--source include/wait_until_connected_again.inc
+
+--connection default
+--enable_reconnect
+--source include/wait_until_connected_again.inc
+
+
+--echo #
+--echo # Error Case 3: Error when MASTER_DEMOTE_TO_SLAVE is provided a
+--echo # non-boolean value.
+--echo #
+
+--connection master
+--replace_result $SLAVE_MYPORT SLAVE_PORT
+--error 1064
+--eval CHANGE MASTER TO master_host='127.0.0.1', master_port=$SLAVE_MYPORT, master_user='root', master_use_gtid=Slave_Pos, master_demote_to_slave=invalid
+
+
+--echo #
+--echo # Cleanup
+--echo #
+--connection master
+DROP TABLE t1, t2, t3, t4, t5, t6;
+--source include/save_master_gtid.inc
+
+--connection slave
+--source include/start_slave.inc
+--source include/sync_with_master_gtid.inc
+
+--source include/rpl_end.inc
+--echo #
+--echo ### End rpl_change_master_demote.test
diff --git a/mysql-test/suite/rpl/t/rpl_checksum.test b/mysql-test/suite/rpl/t/rpl_checksum.test
index 17a986dc308..fc765744b3f 100644
--- a/mysql-test/suite/rpl/t/rpl_checksum.test
+++ b/mysql-test/suite/rpl/t/rpl_checksum.test
@@ -11,6 +11,12 @@
--source include/have_binlog_format_mixed.inc
--source include/master-slave.inc
+--connection slave
+--source include/stop_slave.inc
+CHANGE MASTER TO MASTER_USE_GTID=NO;
+--source include/start_slave.inc
+
+--connection master
call mtr.add_suppression('Slave can not handle replication events with the checksum that master is configured to log');
call mtr.add_suppression('Replication event checksum verification failed');
# due to C failure simulation
@@ -196,7 +202,8 @@ select count(*) as 'must be zero' from t2;
#
connection slave;
stop slave;
-reset slave;
+--let $master_use_gtid_option= No
+--source include/reset_slave.inc
# randomize slave server's own checksum policy
set @@global.binlog_checksum= IF(floor((rand()*1000)%2), "CRC32", "NONE");
diff --git a/mysql-test/suite/rpl/t/rpl_colSize.test b/mysql-test/suite/rpl/t/rpl_colSize.test
index d6f817af189..23c8bdc3e2d 100644
--- a/mysql-test/suite/rpl/t/rpl_colSize.test
+++ b/mysql-test/suite/rpl/t/rpl_colSize.test
@@ -17,7 +17,7 @@ DROP TABLE IF EXISTS t1;
sync_slave_with_master;
STOP SLAVE;
--source include/wait_for_slave_to_stop.inc
-RESET SLAVE;
+--source include/reset_slave.inc
SET @saved_slave_type_conversions = @@slave_type_conversions;
SET GLOBAL SLAVE_TYPE_CONVERSIONS = 'ALL_NON_LOSSY';
diff --git a/mysql-test/suite/rpl/t/rpl_corruption.test b/mysql-test/suite/rpl/t/rpl_corruption.test
index c7a913af9d7..cd2a1cc7ef2 100644
--- a/mysql-test/suite/rpl/t/rpl_corruption.test
+++ b/mysql-test/suite/rpl/t/rpl_corruption.test
@@ -24,6 +24,12 @@
--source include/have_debug.inc
--source include/master-slave.inc
+--connection slave
+--source include/stop_slave.inc
+CHANGE MASTER TO MASTER_USE_GTID=NO;
+--source include/start_slave.inc
+--connection master
+
# Block legal errors for MTR
call mtr.add_suppression('Found invalid event in binary log');
call mtr.add_suppression('Slave I/O: Relay log write failure: could not queue event from master');
diff --git a/mysql-test/suite/rpl/t/rpl_delayed_slave.test b/mysql-test/suite/rpl/t/rpl_delayed_slave.test
index 7dd7b9cf6d9..d00e796b66f 100644
--- a/mysql-test/suite/rpl/t/rpl_delayed_slave.test
+++ b/mysql-test/suite/rpl/t/rpl_delayed_slave.test
@@ -63,6 +63,9 @@
call mtr.add_suppression("Unsafe statement written to the binary log using statement format");
--connection slave
call mtr.add_suppression("Unsafe statement written to the binary log using statement format");
+--source include/stop_slave.inc
+CHANGE MASTER TO MASTER_USE_GTID=NO;
+--source include/start_slave.inc
--connection master
@@ -371,7 +374,8 @@ CHANGE MASTER TO MASTER_DELAY = 71;
--source include/rpl_assert.inc
--source include/stop_slave.inc
-RESET SLAVE;
+--let $master_use_gtid_option= No
+--source include/reset_slave.inc
--echo [on master]
--connection master
RESET MASTER;
diff --git a/mysql-test/suite/rpl/t/rpl_gtid_crash.test b/mysql-test/suite/rpl/t/rpl_gtid_crash.test
index d0af69a65ed..1249a0f619e 100644
--- a/mysql-test/suite/rpl/t/rpl_gtid_crash.test
+++ b/mysql-test/suite/rpl/t/rpl_gtid_crash.test
@@ -27,7 +27,7 @@ SET sql_log_bin=1;
--source include/stop_slave.inc
--replace_result $MASTER_MYPORT MASTER_PORT
eval CHANGE MASTER TO master_host = '127.0.0.1', master_port = $MASTER_MYPORT,
- MASTER_USE_GTID=CURRENT_POS;
+ MASTER_USE_GTID=SLAVE_POS;
--connection server_1
INSERT INTO t1 VALUES (2,1);
diff --git a/mysql-test/suite/rpl/t/rpl_gtid_excess_initial_delay.test b/mysql-test/suite/rpl/t/rpl_gtid_excess_initial_delay.test
index d840b67e9e8..6b1eec1984b 100644
--- a/mysql-test/suite/rpl/t/rpl_gtid_excess_initial_delay.test
+++ b/mysql-test/suite/rpl/t/rpl_gtid_excess_initial_delay.test
@@ -7,7 +7,7 @@
#
# Steps:
# 0 - Stop the slave and execute CHANGE MASTER command with
-# master_use_gtid= curren_pos and master_delay= 10
+# master_delay= 10
# 1 - On slave introduce a sleep of 15 seconds and check that the
# Seconds_Behind_Master is within specified master_delay limit. It should
# not be more that "10" seconds.
@@ -23,7 +23,7 @@ CREATE TABLE t1 (i INT);
--sync_slave_with_master
--source include/stop_slave.inc
-CHANGE MASTER TO MASTER_USE_GTID= current_pos, MASTER_DELAY= 10;
+CHANGE MASTER TO MASTER_DELAY= 10;
--source include/start_slave.inc
--connection master
@@ -47,7 +47,7 @@ INSERT INTO t1 VALUES (1);
--echo "======= Clean up ========"
STOP SLAVE;
-CHANGE MASTER TO MASTER_USE_GTID=no, MASTER_DELAY=0;
+CHANGE MASTER TO MASTER_DELAY=0;
START SLAVE;
--connection master
diff --git a/mysql-test/suite/rpl/t/rpl_gtid_master_promote.test b/mysql-test/suite/rpl/t/rpl_gtid_master_promote.test
index bd5343d7558..064c70b123d 100644
--- a/mysql-test/suite/rpl/t/rpl_gtid_master_promote.test
+++ b/mysql-test/suite/rpl/t/rpl_gtid_master_promote.test
@@ -31,22 +31,18 @@ delimiter ;|
--connection server_2
--sync_with_master
--source include/stop_slave.inc
-CHANGE MASTER TO master_use_gtid=current_pos;
--connection server_3
--sync_with_master
--source include/stop_slave.inc
-CHANGE MASTER TO master_use_gtid=current_pos;
--connection server_4
--sync_with_master
--source include/stop_slave.inc
-CHANGE MASTER TO master_use_gtid=current_pos;
--connection server_5
--sync_with_master
--source include/stop_slave.inc
-CHANGE MASTER TO master_use_gtid=current_pos;
# Create three separate replication streams on master server_1.
@@ -225,7 +221,7 @@ SELECT * FROM t4 ORDER BY a,b;
--connection server_1
--replace_result $SERVER_MYPORT_2 SERVER_MYPORT_2
eval CHANGE MASTER TO master_host = '127.0.0.1', master_port = $SERVER_MYPORT_2,
- master_user = "root", master_use_gtid = current_pos;
+ master_user = "root", master_use_gtid = slave_pos, master_demote_to_slave=1;
--source include/start_slave.inc
--sync_with_master
SELECT * FROM t1 ORDER BY a;
diff --git a/mysql-test/suite/rpl/t/rpl_gtid_mdev4473.test b/mysql-test/suite/rpl/t/rpl_gtid_mdev4473.test
index 01259eb5765..f52e51c2413 100644
--- a/mysql-test/suite/rpl/t/rpl_gtid_mdev4473.test
+++ b/mysql-test/suite/rpl/t/rpl_gtid_mdev4473.test
@@ -24,7 +24,7 @@ reset slave all;
connection server_1;
--replace_result $SERVER_MYPORT_2 SERVER_MYPORT_2
eval CHANGE MASTER TO master_host = '127.0.0.1', master_port = $SERVER_MYPORT_2,
- master_user='root', MASTER_USE_GTID=CURRENT_POS;
+ master_user='root', MASTER_USE_GTID=SLAVE_POS, master_demote_to_slave=1;
source include/start_slave.inc;
source include/wait_for_slave_to_start.inc;
@@ -38,7 +38,7 @@ save_master_pos;
connection server_3;
--replace_result $SERVER_MYPORT_2 SERVER_MYPORT_2
eval CHANGE MASTER TO master_host = '127.0.0.1', master_port = $SERVER_MYPORT_2,
- MASTER_USE_GTID=CURRENT_POS;
+ MASTER_USE_GTID=SLAVE_POS;
source include/start_slave.inc;
sync_with_master;
@@ -56,14 +56,14 @@ reset slave all;
connection server_2;
--replace_result $SERVER_MYPORT_1 SERVER_MYPORT_1
eval CHANGE MASTER TO master_host = '127.0.0.1', master_port = $SERVER_MYPORT_1,
- master_user = 'root', MASTER_USE_GTID=CURRENT_POS;
+ master_user = 'root', MASTER_USE_GTID=SLAVE_POS, master_demote_to_slave=1;
source include/start_slave.inc;
connection server_3;
source include/stop_slave.inc;
--replace_result $SERVER_MYPORT_1 SERVER_MYPORT_1
eval CHANGE MASTER TO master_host = '127.0.0.1', master_port = $SERVER_MYPORT_1,
- MASTER_USE_GTID=CURRENT_POS;
+ MASTER_USE_GTID=SLAVE_POS;
source include/start_slave.inc;
connection server_1;
diff --git a/mysql-test/suite/rpl/t/rpl_gtid_mdev9033.test b/mysql-test/suite/rpl/t/rpl_gtid_mdev9033.test
index f8e8642af28..76723e1d265 100644
--- a/mysql-test/suite/rpl/t/rpl_gtid_mdev9033.test
+++ b/mysql-test/suite/rpl/t/rpl_gtid_mdev9033.test
@@ -63,10 +63,10 @@ DROP TABLE t2;
--connection server_2
STOP SLAVE;
-CHANGE MASTER TO MASTER_USE_GTID = NO, IGNORE_DOMAIN_IDS = ();
+CHANGE MASTER TO IGNORE_DOMAIN_IDS = ();
--connection server_3
STOP SLAVE;
-CHANGE MASTER TO MASTER_USE_GTID = NO, IGNORE_DOMAIN_IDS = ();
+CHANGE MASTER TO IGNORE_DOMAIN_IDS = ();
--echo # End of test.
diff --git a/mysql-test/suite/rpl/t/rpl_gtid_misc.test b/mysql-test/suite/rpl/t/rpl_gtid_misc.test
index 66d98ec8025..a78b74714a5 100644
--- a/mysql-test/suite/rpl/t/rpl_gtid_misc.test
+++ b/mysql-test/suite/rpl/t/rpl_gtid_misc.test
@@ -13,7 +13,6 @@ CREATE TABLE t1 (a INT PRIMARY KEY);
SET sql_log_bin= 0;
INSERT INTO t1 VALUES (1);
SET sql_log_bin= 1;
-CHANGE MASTER TO master_use_gtid= current_pos;
--connection master
diff --git a/mysql-test/suite/rpl/t/rpl_gtid_nobinlog.test b/mysql-test/suite/rpl/t/rpl_gtid_nobinlog.test
index a5caebf0276..e140f335963 100644
--- a/mysql-test/suite/rpl/t/rpl_gtid_nobinlog.test
+++ b/mysql-test/suite/rpl/t/rpl_gtid_nobinlog.test
@@ -25,7 +25,7 @@ SELECT * FROM t1 ORDER BY a;
--connection server_1
--replace_result $SLAVE_MYPORT SLAVE_PORT
eval CHANGE MASTER TO master_host = '127.0.0.1', master_port = $SLAVE_MYPORT,
- master_user = 'root', master_use_gtid = current_pos;
+ master_user = 'root';
START SLAVE;
--source include/wait_for_slave_to_start.inc
@@ -49,8 +49,7 @@ INSERT INTO t1 VALUES (6, 1);
--connection server_2
--replace_result $MASTER_MYPORT MASTER_PORT
-eval CHANGE MASTER TO master_host = '127.0.0.1', master_port = $MASTER_MYPORT,
- master_use_gtid = current_pos;
+eval CHANGE MASTER TO master_host = '127.0.0.1', master_port = $MASTER_MYPORT;
START SLAVE;
--source include/sync_with_master_gtid.inc
diff --git a/mysql-test/suite/rpl/t/rpl_gtid_reconnect.test b/mysql-test/suite/rpl/t/rpl_gtid_reconnect.test
index bc28ebddf5e..1452d6b01f0 100644
--- a/mysql-test/suite/rpl/t/rpl_gtid_reconnect.test
+++ b/mysql-test/suite/rpl/t/rpl_gtid_reconnect.test
@@ -4,11 +4,6 @@
--source include/have_debug.inc
---connection server_2
---source include/stop_slave.inc
-CHANGE MASTER TO master_use_gtid= current_pos;
---source include/start_slave.inc
-
--connection server_1
CREATE TABLE t1 (a INT);
FLUSH LOGS;
diff --git a/mysql-test/suite/rpl/t/rpl_gtid_sort.test b/mysql-test/suite/rpl/t/rpl_gtid_sort.test
index dc3b18aa897..c31ba877bbf 100644
--- a/mysql-test/suite/rpl/t/rpl_gtid_sort.test
+++ b/mysql-test/suite/rpl/t/rpl_gtid_sort.test
@@ -47,7 +47,7 @@ SHOW VARIABLES LIKE 'gtid_slave_pos';
SHOW VARIABLES LIKE 'gtid_binlog_state';
--replace_result $MASTER_MYPORT MASTER_PORT
eval CHANGE MASTER TO master_host = '127.0.0.1', master_port = $MASTER_MYPORT,
- MASTER_USE_GTID=CURRENT_POS;
+ MASTER_USE_GTID=SLAVE_POS;
--source include/start_slave.inc
--sync_with_master
SHOW VARIABLES LIKE 'gtid_binlog_pos';
diff --git a/mysql-test/suite/rpl/t/rpl_gtid_startpos.test b/mysql-test/suite/rpl/t/rpl_gtid_startpos.test
index 100d75a8cdc..c7bcc1bb97e 100644
--- a/mysql-test/suite/rpl/t/rpl_gtid_startpos.test
+++ b/mysql-test/suite/rpl/t/rpl_gtid_startpos.test
@@ -19,7 +19,7 @@ CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=InnoDB;
SET GLOBAL gtid_slave_pos="";
--replace_result $MASTER_MYPORT MASTER_PORT
eval CHANGE MASTER TO master_host = '127.0.0.1', master_port = $MASTER_MYPORT,
- MASTER_USE_GTID=CURRENT_POS;
+ MASTER_USE_GTID=SLAVE_POS;
--source include/start_slave.inc
--sync_with_master
SELECT * FROM t1;
@@ -46,7 +46,7 @@ INSERT INTO t1 VALUES (2);
SET GLOBAL gtid_slave_pos="";
--replace_result $MASTER_MYPORT MASTER_PORT
eval CHANGE MASTER TO master_host = '127.0.0.1', master_port = $MASTER_MYPORT,
- MASTER_USE_GTID=CURRENT_POS;
+ MASTER_USE_GTID=SLAVE_POS;
START SLAVE;
--let $slave_io_errno= 1236
--source include/wait_for_slave_io_error.inc
@@ -54,7 +54,7 @@ START SLAVE;
--replace_result $MASTER_MYPORT MASTER_PORT
eval CHANGE MASTER TO master_host = '127.0.0.1', master_port = $MASTER_MYPORT,
- MASTER_LOG_FILE="master-bin.000003", MASTER_LOG_POS=4;
+ MASTER_LOG_FILE="master-bin.000003", MASTER_LOG_POS=4, MASTER_USE_GTID=NO;
--source include/start_slave.inc
--sync_with_master
SELECT * FROM t1 ORDER BY a;
@@ -73,7 +73,7 @@ INSERT INTO t1 VALUES(3);
SET GLOBAL gtid_slave_pos='0-1-3';
--replace_result $MASTER_MYPORT MASTER_PORT
eval CHANGE MASTER TO master_host = '127.0.0.1', master_port = $MASTER_MYPORT,
- MASTER_USE_GTID=CURRENT_POS;
+ MASTER_USE_GTID=SLAVE_POS;
--source include/start_slave.inc
--source include/sync_with_master_gtid.inc
SELECT * FROM t1 ORDER by a;
@@ -118,7 +118,7 @@ RESET MASTER;
--connection server_2
SET GLOBAL gtid_slave_pos='';
--replace_result $MASTER_MYPORT MASTER_PORT
-eval CHANGE MASTER TO master_host='127.0.0.1', master_port=$MASTER_MYPORT, master_user='root', master_use_gtid=current_pos;
+eval CHANGE MASTER TO master_host='127.0.0.1', master_port=$MASTER_MYPORT, master_user='root', master_use_gtid=slave_pos;
--source include/start_slave.inc
--connection server_1
@@ -185,7 +185,8 @@ SELECT * FROM t1 ORDER BY a;
--echo *** Test that RESET SLAVE clears the Using_Gtid flag. ***
--source include/stop_slave.inc
-RESET SLAVE;
+--let $master_use_gtid_option= No
+--source include/reset_slave.inc
--let $status_items= Using_Gtid
--source include/show_slave_status.inc
@@ -198,7 +199,7 @@ START SLAVE;
# Going back to using GTID should fix things.
STOP SLAVE IO_THREAD;
-CHANGE MASTER TO MASTER_USE_GTID=CURRENT_POS;
+CHANGE MASTER TO MASTER_USE_GTID=SLAVE_POS;
--source include/start_slave.inc
--connection server_1
@@ -286,6 +287,7 @@ eval SELECT '$value' AS Gtid_Slave_Pos;
--source include/stop_slave.inc
DROP TABLE t1;
RESET SLAVE ALL;
+CHANGE MASTER TO MASTER_USE_GTID=NO;
RESET MASTER;
SET GLOBAL gtid_slave_pos= "";
diff --git a/mysql-test/suite/rpl/t/rpl_gtid_stop_start.test b/mysql-test/suite/rpl/t/rpl_gtid_stop_start.test
index 38537810906..9760d4df00c 100644
--- a/mysql-test/suite/rpl/t/rpl_gtid_stop_start.test
+++ b/mysql-test/suite/rpl/t/rpl_gtid_stop_start.test
@@ -21,7 +21,6 @@ INSERT INTO t1 VALUES (1);
--let $status_items= Master_Log_File,Using_Gtid
--source include/show_slave_status.inc
-CHANGE MASTER TO master_use_gtid=current_pos;
# Now try to restart the slave mysqld server without starting the slave first
# threads after the CHANGE MASTER.
diff --git a/mysql-test/suite/rpl/t/rpl_gtid_until.test b/mysql-test/suite/rpl/t/rpl_gtid_until.test
index aa05ecf79ab..c89cea23e93 100644
--- a/mysql-test/suite/rpl/t/rpl_gtid_until.test
+++ b/mysql-test/suite/rpl/t/rpl_gtid_until.test
@@ -2,6 +2,11 @@
--let $rpl_topology=1->2
--source include/rpl_init.inc
+--connection server_2
+--source include/stop_slave.inc
+CHANGE MASTER TO MASTER_USE_GTID=NO;
+--source include/start_slave.inc
+
--connection server_1
ALTER TABLE mysql.gtid_slave_pos ENGINE=InnoDB;
# Function to extract one GTID from a list.
@@ -40,7 +45,7 @@ START SLAVE UNTIL master_gtid_pos = "";
--error ER_UNTIL_REQUIRES_USING_GTID
START SLAVE UNTIL master_gtid_pos = "";
-CHANGE MASTER TO master_use_gtid=current_pos;
+CHANGE MASTER TO master_use_gtid=slave_pos;
--connection server_1
CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=InnoDB;
@@ -219,7 +224,7 @@ INSERT INTO t1 VALUES (10);
--connection server_2
--replace_result $SERVER_MYPORT_1 SERVER_MYPORT_1
eval CHANGE MASTER TO master_host = '127.0.0.1', master_port = $SERVER_MYPORT_1,
- master_user = "root", master_use_gtid = current_pos;
+ master_user = "root", master_use_gtid = slave_pos;
eval START SLAVE UNTIL master_gtid_pos = '$until_condition';
--source include/wait_for_slave_to_start.inc
diff --git a/mysql-test/suite/rpl/t/rpl_heartbeat_basic.test b/mysql-test/suite/rpl/t/rpl_heartbeat_basic.test
index 45b5d48c13b..d6d14e0278d 100644
--- a/mysql-test/suite/rpl/t/rpl_heartbeat_basic.test
+++ b/mysql-test/suite/rpl/t/rpl_heartbeat_basic.test
@@ -52,7 +52,7 @@ let $slave_net_timeout= query_get_value(SHOW VARIABLES LIKE 'slave_net_timeout',
let $slave_heartbeat_timeout= query_get_value(SHOW GLOBAL STATUS LIKE 'slave_heartbeat_period', Value, 1);
let $result= query_get_value(SELECT $slave_net_timeout/$slave_heartbeat_timeout AS Result, Result, 1);
--echo slave_net_timeout/slave_heartbeat_timeout=$result
-RESET SLAVE;
+--source include/reset_slave.inc
--echo
# Reset slave set slave_heartbeat_timeout = slave_net_timeout/2
@@ -62,7 +62,7 @@ SET @@global.slave_net_timeout=30;
--enable_warnings
--replace_result $MASTER_MYPORT MASTER_PORT
eval CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=$MASTER_MYPORT, MASTER_USER='root', MASTER_CONNECT_RETRY=$connect_retry, MASTER_HEARTBEAT_PERIOD=5;
-RESET SLAVE;
+--source include/reset_slave.inc
SHOW GLOBAL STATUS LIKE 'slave_heartbeat_period';
--echo
@@ -75,7 +75,7 @@ SET @@global.slave_net_timeout=50;
eval CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=$MASTER_MYPORT, MASTER_USER='root', MASTER_CONNECT_RETRY=$connect_retry;
SHOW GLOBAL STATUS LIKE 'slave_heartbeat_period';
SET @@global.slave_net_timeout=@restore_slave_net_timeout;
-RESET SLAVE;
+--source include/reset_slave.inc
--echo
# Set slave_net_timeout less than current value of slave_heartbeat_period
@@ -320,8 +320,10 @@ INSERT INTO t1 VALUES (1, 'on slave', NULL);
--connection master
INSERT INTO t1 VALUES (1, 'on master', NULL);
--connection slave
+set sql_log_bin= 0;
call mtr.add_suppression("Slave SQL.*Duplicate entry .1. for key .PRIMARY.. on query.* error.* 1062");
call mtr.add_suppression("Slave SQL.*Request to stop slave SQL Thread received while applying a group that has non-transactional changes; waiting for completion of the group");
+set sql_log_bin= 1;
let $slave_errno= ER_DUP_ENTRY
--source include/wait_for_slave_sql_error.inc
let $rcvd_heartbeats_before= query_get_value(SHOW STATUS LIKE 'slave_received_heartbeats', Value, 1);
@@ -330,7 +332,9 @@ let $rcvd_heartbeats_after= query_get_value(SHOW STATUS LIKE 'slave_received_hea
let $result= query_get_value(SELECT ($rcvd_heartbeats_after - $rcvd_heartbeats_before) > 0 AS Result, Result, 1);
--echo Heartbeat events are received while sql thread stopped (1 means 'yes'): $result
--source include/stop_slave.inc
+set sql_log_bin= 0;
DROP TABLE t1;
+set sql_log_bin= 1;
--echo
# Check received heartbeat events while master send events to slave
@@ -346,7 +350,7 @@ CREATE EVENT e1
END|
DELIMITER ;|
--connection slave
-RESET SLAVE;
+--source include/reset_slave.inc
--replace_result $MASTER_MYPORT MASTER_PORT
eval CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=$MASTER_MYPORT, MASTER_USER='root', MASTER_CONNECT_RETRY=$connect_retry, MASTER_HEARTBEAT_PERIOD=5;
--source include/start_slave.inc
@@ -404,8 +408,10 @@ DROP EVENT e1;
# Check received heartbeat events while logs flushed on slave
--echo *** Flush logs on slave ***
STOP SLAVE;
-RESET SLAVE;
+--source include/reset_slave.inc
+set sql_log_bin= 0;
DROP TABLE t1;
+set sql_log_bin= 1;
--connection master
DROP TABLE t1;
RESET MASTER;
@@ -435,7 +441,7 @@ let $result= query_get_value(SELECT ($rcvd_heartbeats_after - $rcvd_heartbeats_b
SET @@global.slave_compressed_protocol=1;
--connection slave
--source include/stop_slave.inc
-RESET SLAVE;
+--source include/reset_slave.inc
SET @@global.slave_compressed_protocol=1;
--replace_result $MASTER_MYPORT MASTER_PORT
eval CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=$MASTER_MYPORT, MASTER_USER='root', MASTER_CONNECT_RETRY=$connect_retry, MASTER_HEARTBEAT_PERIOD=0.1;
@@ -455,7 +461,7 @@ SET @@global.slave_compressed_protocol=0;
--echo *** Reset master ***
--connection slave
STOP SLAVE;
-RESET SLAVE;
+--source include/reset_slave.inc
--replace_result $MASTER_MYPORT MASTER_PORT
eval CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=$MASTER_MYPORT, MASTER_USER='root', MASTER_CONNECT_RETRY=$connect_retry, MASTER_HEARTBEAT_PERIOD=0.1;
--source include/start_slave.inc
@@ -474,7 +480,7 @@ let $result= query_get_value(SELECT ($rcvd_heartbeats_after - $rcvd_heartbeats_b
--echo *** Reload master ***
--connection slave
STOP SLAVE;
-RESET SLAVE;
+--source include/reset_slave.inc
--replace_result $MASTER_MYPORT MASTER_PORT
eval CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=$MASTER_MYPORT, MASTER_USER='root', MASTER_CONNECT_RETRY=$connect_retry, MASTER_HEARTBEAT_PERIOD=0.1;
--source include/start_slave.inc
diff --git a/mysql-test/suite/rpl/t/rpl_heartbeat_ssl.test b/mysql-test/suite/rpl/t/rpl_heartbeat_ssl.test
index 810db4cc6f7..2c41fdeeca8 100644
--- a/mysql-test/suite/rpl/t/rpl_heartbeat_ssl.test
+++ b/mysql-test/suite/rpl/t/rpl_heartbeat_ssl.test
@@ -29,7 +29,8 @@ eval CHANGE MASTER TO
MASTER_SSL=1,
MASTER_SSL_CA='$MYSQL_TEST_DIR/std_data/cacert.pem',
MASTER_SSL_CERT='$MYSQL_TEST_DIR/std_data/client-cert.pem',
- MASTER_SSL_KEY='$MYSQL_TEST_DIR/std_data/client-key.pem';
+ MASTER_SSL_KEY='$MYSQL_TEST_DIR/std_data/client-key.pem',
+ MASTER_USE_GTID=NO;
--source include/start_slave.inc
# Check SSL state of slave
let $slave_ssl_status= query_get_value(SHOW SLAVE STATUS, Master_SSL_Allowed, 1);
diff --git a/mysql-test/suite/rpl/t/rpl_innodb_bug68220.test b/mysql-test/suite/rpl/t/rpl_innodb_bug68220.test
deleted file mode 100644
index 1e4f40a0019..00000000000
--- a/mysql-test/suite/rpl/t/rpl_innodb_bug68220.test
+++ /dev/null
@@ -1,53 +0,0 @@
---source include/have_innodb.inc
---source include/have_binlog_format_row.inc
---source include/master-slave.inc
-
-#
-# Bug#68220: innodb_rows_updated is misleading on slave when *info_repository=TABLE
-#
-
-# created all the base variables at the beginning at the test
---connection master
-select variable_value into @master_rows_read from information_schema.global_status where variable_name = 'innodb_rows_read';
-select variable_value into @master_rows_updated from information_schema.global_status where variable_name = 'innodb_rows_updated';
-select variable_value into @master_rows_deleted from information_schema.global_status where variable_name = 'innodb_rows_deleted';
-select variable_value into @master_rows_inserted from information_schema.global_status where variable_name = 'innodb_rows_inserted';
-select variable_value into @master_system_rows_read from information_schema.global_status where variable_name = 'innodb_system_rows_read';
-select variable_value into @master_system_rows_updated from information_schema.global_status where variable_name = 'innodb_system_rows_updated';
-select variable_value into @master_system_rows_deleted from information_schema.global_status where variable_name = 'innodb_system_rows_deleted';
-select variable_value into @master_system_rows_inserted from information_schema.global_status where variable_name = 'innodb_system_rows_inserted';
-
---connection slave
-select variable_value into @slave_rows_read from information_schema.global_status where variable_name = 'innodb_rows_read';
-select variable_value into @slave_rows_updated from information_schema.global_status where variable_name = 'innodb_rows_updated';
-select variable_value into @slave_rows_deleted from information_schema.global_status where variable_name = 'innodb_rows_deleted';
-select variable_value into @slave_rows_inserted from information_schema.global_status where variable_name = 'innodb_rows_inserted';
-select variable_value into @slave_system_rows_read from information_schema.global_status where variable_name = 'innodb_system_rows_read';
-select variable_value into @slave_system_rows_updated from information_schema.global_status where variable_name = 'innodb_system_rows_updated';
-select variable_value into @slave_system_rows_deleted from information_schema.global_status where variable_name = 'innodb_system_rows_deleted';
-select variable_value into @slave_system_rows_inserted from information_schema.global_status where variable_name = 'innodb_system_rows_inserted';
-
---connection master
-CREATE DATABASE testdb;
-USE testdb;
-CREATE TABLE testdb.t1 (i int NOT NULL PRIMARY KEY) ENGINE=InnoDB;
-
-# insert a row and show counters on master and slave
-INSERT INTO testdb.t1 VALUES (1);
---source suite/rpl/include/rpl_innodb_rows_counters.inc
-
-# update the row and show counters on master and slave
-UPDATE t1 SET i=2 WHERE i=1;
---sync_slave_with_master
---source suite/rpl/include/rpl_innodb_rows_counters.inc
-
-# delete the row and show counters on master and slave
-DELETE FROM t1 WHERE i=2;
---source suite/rpl/include/rpl_innodb_rows_counters.inc
-
-# clean the test
-DROP TABLE t1;
-DROP DATABASE testdb;
---sync_slave_with_master
-
---source include/rpl_end.inc
diff --git a/mysql-test/suite/rpl/t/rpl_log_pos.test b/mysql-test/suite/rpl/t/rpl_log_pos.test
index 4f63cd32916..1504cba0774 100644
--- a/mysql-test/suite/rpl/t/rpl_log_pos.test
+++ b/mysql-test/suite/rpl/t/rpl_log_pos.test
@@ -26,7 +26,7 @@ source include/stop_slave.inc;
let $wrong_log_pos= `SELECT $read_pos+2`;
--replace_result $wrong_log_pos MASTER_LOG_POS
-eval change master to master_log_pos=$wrong_log_pos;
+eval change master to master_log_pos=$wrong_log_pos, master_use_gtid=no;
start slave;
let $slave_io_errno= 1236;
--let $show_slave_io_error= 1
@@ -45,7 +45,7 @@ insert into t1 values (1),(2),(3);
save_master_pos;
connection slave;
--replace_result 4 MASTER_LOG_POS
-change master to master_log_pos=4;
+change master to master_log_pos=4, master_use_gtid=no;
start slave;
sync_with_master;
select * from t1 ORDER BY n;
diff --git a/mysql-test/suite/rpl/t/rpl_manual_change_index_file.test b/mysql-test/suite/rpl/t/rpl_manual_change_index_file.test
index 1c087c550d0..cd472f6eab6 100644
--- a/mysql-test/suite/rpl/t/rpl_manual_change_index_file.test
+++ b/mysql-test/suite/rpl/t/rpl_manual_change_index_file.test
@@ -1,5 +1,11 @@
source include/master-slave.inc;
+connection slave;
+source include/stop_slave.inc;
+CHANGE MASTER TO MASTER_USE_GTID=NO;
+source include/start_slave.inc;
+connection master;
+
#
# BUG#28421 Infinite loop on slave relay logs
#
diff --git a/mysql-test/suite/rpl/t/rpl_mariadb_slave_capability.test b/mysql-test/suite/rpl/t/rpl_mariadb_slave_capability.test
index 19f2db32cb7..d49851cc8ce 100644
--- a/mysql-test/suite/rpl/t/rpl_mariadb_slave_capability.test
+++ b/mysql-test/suite/rpl/t/rpl_mariadb_slave_capability.test
@@ -12,6 +12,12 @@ set @old_master_binlog_checksum= @@global.binlog_checksum;
#
# Test this by binlog rotation before we log any GTIDs.
connection slave;
+
+# Need to stop/start the master without GTID before setting debug_dbug
+--source include/stop_slave.inc
+CHANGE MASTER TO MASTER_USE_GTID=NO;
+--source include/start_slave.inc
+
--source include/stop_slave.inc
--echo # Test slave with no capability gets dummy event, which is ignored.
set @old_dbug= @@global.debug_dbug;
diff --git a/mysql-test/suite/rpl/t/rpl_mdev6020.test b/mysql-test/suite/rpl/t/rpl_mdev6020.test
index ec3fd92f817..06f03be1430 100644
--- a/mysql-test/suite/rpl/t/rpl_mdev6020.test
+++ b/mysql-test/suite/rpl/t/rpl_mdev6020.test
@@ -29,7 +29,7 @@ SET GLOBAL default_storage_engine=InnoDB;
SET @old_parallel= @@GLOBAL.slave_parallel_threads;
SET GLOBAL slave_parallel_threads=12;
--replace_result $SERVER_MYPORT_1 SERVER_MYPORT_1
-eval CHANGE MASTER TO master_host='127.0.0.1', master_port=$SERVER_MYPORT_1, master_user='root', master_log_file='master-bin.000001', master_log_pos=4;
+eval CHANGE MASTER TO master_host='127.0.0.1', master_port=$SERVER_MYPORT_1, master_user='root', master_log_file='master-bin.000001', master_log_pos=4, master_use_gtid=no;
--source include/start_slave.inc
--connection master
diff --git a/mysql-test/suite/rpl/t/rpl_mdev6386.test b/mysql-test/suite/rpl/t/rpl_mdev6386.test
index e6fb72dc788..f969d656ffb 100644
--- a/mysql-test/suite/rpl/t/rpl_mdev6386.test
+++ b/mysql-test/suite/rpl/t/rpl_mdev6386.test
@@ -13,7 +13,6 @@ SET sql_log_bin= 0;
CALL mtr.add_suppression("Commit failed due to failure of an earlier commit on which this one depends");
INSERT INTO t1 VALUES (1, 2);
SET sql_log_bin= 1;
-CHANGE MASTER TO master_use_gtid= current_pos;
--echo Contents on slave before:
SELECT * FROM t1 ORDER BY a;
diff --git a/mysql-test/suite/rpl/t/rpl_mdev_17614.test b/mysql-test/suite/rpl/t/rpl_mdev_17614.test
index c11aad3305e..8d91944a8eb 100644
--- a/mysql-test/suite/rpl/t/rpl_mdev_17614.test
+++ b/mysql-test/suite/rpl/t/rpl_mdev_17614.test
@@ -42,7 +42,7 @@ SELECT * FROM t1;
# restart replication for the next testcase
stop slave;
--source include/wait_for_slave_to_stop.inc
-reset slave;
+--source include/reset_slave.inc
connection master;
reset master;
drop table t1;
@@ -161,7 +161,7 @@ SELECT * FROM t1;
# restart replication for the next testcase
stop slave;
--source include/wait_for_slave_to_stop.inc
-reset slave;
+--source include/reset_slave.inc
connection master;
reset master;
drop table t1;
diff --git a/mysql-test/suite/rpl/t/rpl_mysql57_stm_temporal_round.test b/mysql-test/suite/rpl/t/rpl_mysql57_stm_temporal_round.test
index 675b7db0603..34001382c93 100644
--- a/mysql-test/suite/rpl/t/rpl_mysql57_stm_temporal_round.test
+++ b/mysql-test/suite/rpl/t/rpl_mysql57_stm_temporal_round.test
@@ -43,7 +43,7 @@ CREATE TABLE t1 (id SERIAL, a DATETIME(3));
--connection slave
--replace_result $SERVER_MYPORT_1 SERVER_MYPORT_1
-eval CHANGE MASTER TO master_host='127.0.0.1', master_port=$SERVER_MYPORT_1, master_user='root', master_log_file='master-bin.000001', master_log_pos=4;
+eval CHANGE MASTER TO master_host='127.0.0.1', master_port=$SERVER_MYPORT_1, master_user='root', master_log_file='master-bin.000001', master_log_pos=4, master_use_gtid=no;
--source include/start_slave.inc
diff --git a/mysql-test/suite/rpl/t/rpl_mysql80_stm_temporal_round.test b/mysql-test/suite/rpl/t/rpl_mysql80_stm_temporal_round.test
index ad6df9d9993..551764ac220 100644
--- a/mysql-test/suite/rpl/t/rpl_mysql80_stm_temporal_round.test
+++ b/mysql-test/suite/rpl/t/rpl_mysql80_stm_temporal_round.test
@@ -47,7 +47,7 @@ CREATE TABLE t1 (id SERIAL, a DATETIME(3));
--connection slave
--replace_result $SERVER_MYPORT_1 SERVER_MYPORT_1
-eval CHANGE MASTER TO master_host='127.0.0.1', master_port=$SERVER_MYPORT_1, master_user='root', master_log_file='master-bin.000001', master_log_pos=4;
+eval CHANGE MASTER TO master_host='127.0.0.1', master_port=$SERVER_MYPORT_1, master_user='root', master_log_file='master-bin.000001', master_log_pos=4, master_use_gtid=no;
--source include/start_slave.inc
diff --git a/mysql-test/suite/rpl/t/rpl_old_master.test b/mysql-test/suite/rpl/t/rpl_old_master.test
index 6ddc227fc14..6faa8212d66 100644
--- a/mysql-test/suite/rpl/t/rpl_old_master.test
+++ b/mysql-test/suite/rpl/t/rpl_old_master.test
@@ -26,7 +26,7 @@
SET @old_parallel= @@GLOBAL.slave_parallel_threads;
SET GLOBAL slave_parallel_threads=10;
--replace_result $SERVER_MYPORT_1 SERVER_MYPORT_1
-eval CHANGE MASTER TO master_host='127.0.0.1', master_port=$SERVER_MYPORT_1, master_user='root', master_log_file='master-bin.000001', master_log_pos=4;
+eval CHANGE MASTER TO master_host='127.0.0.1', master_port=$SERVER_MYPORT_1, master_user='root', master_log_file='master-bin.000001', master_log_pos=4, master_use_gtid=no;
# Block execution yet when the blocked query timestamp has been already accounted
FLUSH TABLES WITH READ LOCK;
diff --git a/mysql-test/suite/rpl/t/rpl_old_master_29078.test b/mysql-test/suite/rpl/t/rpl_old_master_29078.test
index b19fd6466e5..98db6188e96 100644
--- a/mysql-test/suite/rpl/t/rpl_old_master_29078.test
+++ b/mysql-test/suite/rpl/t/rpl_old_master_29078.test
@@ -23,8 +23,10 @@ create table t2 (a timestamp);
--connection slave
-set global explicit_defaults_for_timestamp=1;
-reset slave;
+set global explicit_defaults_for_timestamp=0;
+--let $master_use_gtid_option= No
+--source include/reset_slave.inc
+
--source include/start_slave.inc
--sync_with_master
show create table t1;
@@ -34,8 +36,10 @@ select * from t1;
drop table t1;
--source include/stop_slave.inc
-set global explicit_defaults_for_timestamp=0;
-reset slave;
+set global explicit_defaults_for_timestamp=1;
+--let $master_use_gtid_option= No
+--source include/reset_slave.inc
+
--source include/start_slave.inc
--sync_with_master
show create table t1;
diff --git a/mysql-test/suite/rpl/t/rpl_parallel_mdev6589.test b/mysql-test/suite/rpl/t/rpl_parallel_mdev6589.test
index 981c6216376..3a5af7bd4a9 100644
--- a/mysql-test/suite/rpl/t/rpl_parallel_mdev6589.test
+++ b/mysql-test/suite/rpl/t/rpl_parallel_mdev6589.test
@@ -7,7 +7,6 @@
SET @old_parallel_threads=@@GLOBAL.slave_parallel_threads;
--source include/stop_slave.inc
SET GLOBAL slave_parallel_threads=10;
-CHANGE MASTER TO master_use_gtid=current_pos;
--source include/start_slave.inc
diff --git a/mysql-test/suite/rpl/t/rpl_parallel_multilevel2.test b/mysql-test/suite/rpl/t/rpl_parallel_multilevel2.test
index 4125394ef80..da8a996f570 100644
--- a/mysql-test/suite/rpl/t/rpl_parallel_multilevel2.test
+++ b/mysql-test/suite/rpl/t/rpl_parallel_multilevel2.test
@@ -25,7 +25,6 @@ SET GLOBAL binlog_commit_wait_usec=2000000;
SET @old_updates= @@GLOBAL.binlog_direct_non_transactional_updates;
SET GLOBAL binlog_direct_non_transactional_updates=OFF;
SET SESSION binlog_direct_non_transactional_updates=OFF;
-CHANGE MASTER TO master_use_gtid=current_pos;
--connection server_3
--sync_with_master
@@ -33,7 +32,6 @@ CHANGE MASTER TO master_use_gtid=current_pos;
SET @old_parallel_threads=@@GLOBAL.slave_parallel_threads;
--source include/stop_slave.inc
SET GLOBAL slave_parallel_threads=10;
-CHANGE MASTER TO master_use_gtid=current_pos;
--connection server_1
diff --git a/mysql-test/suite/rpl/t/rpl_parallel_temptable.test b/mysql-test/suite/rpl/t/rpl_parallel_temptable.test
index edb854842e1..3684763dad7 100644
--- a/mysql-test/suite/rpl/t/rpl_parallel_temptable.test
+++ b/mysql-test/suite/rpl/t/rpl_parallel_temptable.test
@@ -12,7 +12,6 @@
SET @old_parallel_threads=@@GLOBAL.slave_parallel_threads;
--source include/stop_slave.inc
SET GLOBAL slave_parallel_threads=5;
-CHANGE MASTER TO master_use_gtid= current_pos;
--source include/start_slave.inc
--connection server_1
diff --git a/mysql-test/suite/rpl/t/rpl_perfschema_applier_status_by_coordinator.test b/mysql-test/suite/rpl/t/rpl_perfschema_applier_status_by_coordinator.test
index d4f185812e0..44df3ca4ea7 100644
--- a/mysql-test/suite/rpl/t/rpl_perfschema_applier_status_by_coordinator.test
+++ b/mysql-test/suite/rpl/t/rpl_perfschema_applier_status_by_coordinator.test
@@ -212,6 +212,7 @@ reset master;
--source include/stop_slave.inc
reset slave;
reset master;
+set @@global.gtid_slave_pos= "";
set @saved_slave_trans_retry_interval= @@GLOBAL.slave_transaction_retry_interval;
set global slave_transaction_retry_interval=1;
--source include/start_slave.inc
diff --git a/mysql-test/suite/rpl/t/rpl_read_new_relay_log_info.test b/mysql-test/suite/rpl/t/rpl_read_new_relay_log_info.test
index 1e2c8ce2d9f..350071bf3dc 100644
--- a/mysql-test/suite/rpl/t/rpl_read_new_relay_log_info.test
+++ b/mysql-test/suite/rpl/t/rpl_read_new_relay_log_info.test
@@ -12,7 +12,8 @@ DROP TABLE t1;
--echo ==== Check that we can understand the new format of relay-log.info ====
--source include/stop_slave.inc
-RESET SLAVE;
+--let $master_use_gtid_option= No
+--source include/reset_slave.inc
--let $MYSQLD_DATADIR= `select @@datadir`
# the new version of relay_log.info comes in two versions: with path
@@ -20,6 +21,10 @@ RESET SLAVE;
if ($SYSTEM_PATH_SEPARATOR != /) {
--let $file_suffix= -win
}
+
+# MDEV-19801 changed the default Using_Gtid to Slave_Pos which doesn't
+# automatically purge relay-log.info
+--remove_file $MYSQLD_DATADIR/relay-log.info
--copy_file $MYSQL_TEST_DIR/std_data/new-format-relay-log$file_suffix.info $MYSQLD_DATADIR/relay-log.info
--echo # Read relay-log.info
diff --git a/mysql-test/suite/rpl/t/rpl_read_old_relay_log_info.test b/mysql-test/suite/rpl/t/rpl_read_old_relay_log_info.test
index ce345445c08..d2206b5bef7 100644
--- a/mysql-test/suite/rpl/t/rpl_read_old_relay_log_info.test
+++ b/mysql-test/suite/rpl/t/rpl_read_old_relay_log_info.test
@@ -13,7 +13,8 @@ DROP TABLE t1;
--echo ==== Check that we still understand the old format of relay-log.info ====
--source include/stop_slave.inc
-RESET SLAVE;
+--let $master_use_gtid_option= No
+--source include/reset_slave.inc
--let $MYSQLD_DATADIR= `select @@datadir`
# the old version of relay_log.info comes in two versions: with path
@@ -21,6 +22,9 @@ RESET SLAVE;
if ($SYSTEM_PATH_SEPARATOR != /) {
--let $file_suffix= -win
}
+# MDEV-19801 changed the default Using_Gtid to Slave_Pos which doesn't
+# automatically purge relay-log.info
+--remove_file $MYSQLD_DATADIR/relay-log.info
--copy_file $MYSQL_TEST_DIR/std_data/old-format-relay-log$file_suffix.info $MYSQLD_DATADIR/relay-log.info
--echo # Read relay-log.info
diff --git a/mysql-test/suite/rpl/t/rpl_reset_slave_fail.test b/mysql-test/suite/rpl/t/rpl_reset_slave_fail.test
index 021dc76d50c..5c7e667695c 100644
--- a/mysql-test/suite/rpl/t/rpl_reset_slave_fail.test
+++ b/mysql-test/suite/rpl/t/rpl_reset_slave_fail.test
@@ -67,7 +67,7 @@ START SLAVE;
# Disable "Warning 1612 Being purged log ./slave-relay-bin.0* was not found"
# because it is different on Unix and Windows systems.
--disable_warnings
-RESET SLAVE;
+--source include/reset_slave.inc
--enable_warnings
DROP TABLE t1;
--replace_result $master_exec_file MASTER_LOG_FILE $master_exec_pos MASTER_LOG_POS
diff --git a/mysql-test/suite/rpl/t/rpl_row_001.test b/mysql-test/suite/rpl/t/rpl_row_001.test
index f66c61ffb6e..887c0961a63 100644
--- a/mysql-test/suite/rpl/t/rpl_row_001.test
+++ b/mysql-test/suite/rpl/t/rpl_row_001.test
@@ -14,7 +14,7 @@ connection master;
RESET MASTER;
connection slave;
STOP SLAVE;
-RESET SLAVE;
+--source include/reset_slave.inc
connection master;
let $1=5000;
diff --git a/mysql-test/suite/rpl/t/rpl_row_mysqlbinlog.test b/mysql-test/suite/rpl/t/rpl_row_mysqlbinlog.test
index a249043fa19..9e10aaa6216 100644
--- a/mysql-test/suite/rpl/t/rpl_row_mysqlbinlog.test
+++ b/mysql-test/suite/rpl/t/rpl_row_mysqlbinlog.test
@@ -100,7 +100,7 @@ stop slave;
connection master;
reset master;
connection slave;
-reset slave;
+--source include/reset_slave.inc
start slave;
--source include/wait_for_slave_to_start.inc
connection master;
@@ -167,7 +167,7 @@ stop slave;
connection master;
reset master;
connection slave;
-reset slave;
+--source include/reset_slave.inc
start slave;
--source include/wait_for_slave_to_start.inc
connection master;
@@ -230,7 +230,7 @@ stop slave;
connection master;
reset master;
connection slave;
-reset slave;
+--source include/reset_slave.inc
start slave;
--source include/wait_for_slave_to_start.inc
connection master;
diff --git a/mysql-test/suite/rpl/t/rpl_row_until.test b/mysql-test/suite/rpl/t/rpl_row_until.test
index 478c2206a5a..d318e0d7d26 100644
--- a/mysql-test/suite/rpl/t/rpl_row_until.test
+++ b/mysql-test/suite/rpl/t/rpl_row_until.test
@@ -38,7 +38,7 @@ sync_slave_with_master;
--source include/stop_slave.inc
# Reset slave.
-RESET SLAVE;
+--source include/reset_slave.inc
--replace_result $MASTER_MYPORT MASTER_MYPORT
eval CHANGE MASTER TO MASTER_USER='root', MASTER_CONNECT_RETRY=1, MASTER_HOST='127.0.0.1', MASTER_PORT=$MASTER_MYPORT;
@@ -102,7 +102,7 @@ START SLAVE UNTIL RELAY_LOG_FILE='slave-relay-bin.000002', MASTER_LOG_POS=561;
START SLAVE UNTIL MASTER_LOG_FILE='master-bin.000001', MASTER_LOG_POS=740;
--source include/stop_slave.inc
-RESET SLAVE;
+--source include/reset_slave.inc
--source include/start_slave.inc
##############################################################################
diff --git a/mysql-test/suite/rpl/t/rpl_seconds_behind_master_spike.test b/mysql-test/suite/rpl/t/rpl_seconds_behind_master_spike.test
index d1bfbf25bae..600ba9b18d7 100644
--- a/mysql-test/suite/rpl/t/rpl_seconds_behind_master_spike.test
+++ b/mysql-test/suite/rpl/t/rpl_seconds_behind_master_spike.test
@@ -25,6 +25,12 @@
--source include/master-slave.inc
--connection slave
+
+# Using_Gtid needs to start as NO before updating debug_dbug
+--source include/stop_slave.inc
+CHANGE MASTER TO MASTER_USE_GTID=NO;
+--source include/start_slave.inc
+
--source include/stop_slave.inc
SET @save_dbug= @@GLOBAL.debug_dbug;
SET @@global.debug_dbug="+d,pause_sql_thread_on_fde";
diff --git a/mysql-test/suite/rpl/t/rpl_semi_sync.test b/mysql-test/suite/rpl/t/rpl_semi_sync.test
index c3cd918b5fc..720ec059350 100644
--- a/mysql-test/suite/rpl/t/rpl_semi_sync.test
+++ b/mysql-test/suite/rpl/t/rpl_semi_sync.test
@@ -17,9 +17,16 @@ call mtr.add_suppression("Read semi-sync reply");
call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT.");
call mtr.add_suppression("mysqld: Got an error reading communication packets");
connection slave;
+# While 'Current_Pos' exists as an option for Using_Gtd, keeping these
+# events in the binlog will update gtid_binlog_pos, and the later calls to
+# set `@@global.gtid_slave_pos= ""` will provide warning messages with
+# inconsistent GTID values because the seq_nos are non-deterministic with
+# the masters events coming in concurrently
+set sql_log_bin=0;
call mtr.add_suppression("Master server does not support semi-sync");
call mtr.add_suppression("Semi-sync slave .* reply");
call mtr.add_suppression("Slave SQL.*Request to stop slave SQL Thread received while applying a group that has non-transactional changes; waiting for completion of the group");
+set sql_log_bin=1;
connection master;
# wait for dying connections (if any) to disappear
@@ -36,7 +43,7 @@ let $_connections_normal_slave= query_get_value(SHOW STATUS LIKE 'Threads_connec
--echo #
connection slave;
source include/stop_slave.inc;
-reset slave;
+--source include/reset_slave.inc
set global rpl_semi_sync_master_enabled= 0;
set global rpl_semi_sync_slave_enabled= 0;
@@ -351,7 +358,7 @@ show status like 'Rpl_semi_sync_master_yes_tx';
connection slave;
source include/stop_slave.inc;
-reset slave;
+--source include/reset_slave.inc
# Kill the dump thread on master for previous slave connection and
--source include/kill_binlog_dump_threads.inc
@@ -388,7 +395,7 @@ show status like 'Rpl_semi_sync_master_yes_tx';
--echo #
connection slave;
source include/stop_slave.inc;
-reset slave;
+--source include/reset_slave.inc
connection master;
reset master;
diff --git a/mysql-test/suite/rpl/t/rpl_server_id2.test b/mysql-test/suite/rpl/t/rpl_server_id2.test
index 6a8493ca278..6dc2f791954 100644
--- a/mysql-test/suite/rpl/t/rpl_server_id2.test
+++ b/mysql-test/suite/rpl/t/rpl_server_id2.test
@@ -2,7 +2,12 @@
# from itself, if running with --replicate-same-server-id.
source include/master-slave.inc;
+
connection slave;
+--source include/stop_slave.inc
+CHANGE MASTER TO MASTER_USE_GTID=NO;
+--source include/start_slave.inc
+
create table t1 (n int);
reset master;
# replicate ourselves
diff --git a/mysql-test/suite/rpl/t/rpl_server_id_ignore.test b/mysql-test/suite/rpl/t/rpl_server_id_ignore.test
index 537978f1701..dbe7544bbb1 100644
--- a/mysql-test/suite/rpl/t/rpl_server_id_ignore.test
+++ b/mysql-test/suite/rpl/t/rpl_server_id_ignore.test
@@ -38,7 +38,7 @@ change master to IGNORE_SERVER_IDS= (10, 100);
--echo *** must be 10, 100 ***
let $ignore_list= query_get_value(SHOW SLAVE STATUS, Replicate_Ignore_Server_Ids, 1);
echo ignore server id list: $ignore_list;
-reset slave;
+--source include/reset_slave.inc
--echo *** must be empty due to reset slave ***
let $ignore_list= query_get_value(SHOW SLAVE STATUS, Replicate_Ignore_Server_Ids, 1);
echo ignore server id list: $ignore_list;
@@ -80,7 +80,7 @@ if (`select $slave_relay_pos1 - $slave_relay_pos0`)
stop slave;
source include/wait_for_slave_to_stop.inc;
-reset slave;
+--source include/reset_slave.inc
change master to IGNORE_SERVER_IDS= (10, 100);
--echo *** the list must remain (10, 100) after reset slave ***
let $ignore_list= query_get_value(SHOW SLAVE STATUS, Replicate_Ignore_Server_Ids, 1);
diff --git a/mysql-test/suite/rpl/t/rpl_skip_replication.test b/mysql-test/suite/rpl/t/rpl_skip_replication.test
index 97fc961d438..d1044c4bf51 100644
--- a/mysql-test/suite/rpl/t/rpl_skip_replication.test
+++ b/mysql-test/suite/rpl/t/rpl_skip_replication.test
@@ -19,6 +19,12 @@
--source include/have_innodb.inc
--source include/master-slave.inc
+--connection slave
+--source include/stop_slave.inc
+CHANGE MASTER TO MASTER_USE_GTID=NO;
+--source include/start_slave.inc
+--connection master
+
connection slave;
# Test that SUPER is required to change @@replicate_events_marked_for_skip.
CREATE USER 'nonsuperuser'@'127.0.0.1';
diff --git a/mysql-test/suite/rpl/t/rpl_slave_alias_replica.test b/mysql-test/suite/rpl/t/rpl_slave_alias_replica.test
index 324821a325f..06cf12ab7a9 100644
--- a/mysql-test/suite/rpl/t/rpl_slave_alias_replica.test
+++ b/mysql-test/suite/rpl/t/rpl_slave_alias_replica.test
@@ -65,6 +65,7 @@ STOP REPLICA SQL_THREAD;
--source include/wait_for_slave_sql_to_stop.inc
--echo "Command: RESET SLAVE ALL --> RESET REPLICA ALL"
RESET REPLICA ALL;
+set @@global.gtid_slave_pos= "";
--connection master
RESET MASTER;
diff --git a/mysql-test/suite/rpl/t/rpl_slave_max_statement_time.test b/mysql-test/suite/rpl/t/rpl_slave_max_statement_time.test
new file mode 100644
index 00000000000..b600c8434d5
--- /dev/null
+++ b/mysql-test/suite/rpl/t/rpl_slave_max_statement_time.test
@@ -0,0 +1,110 @@
+#
+# Purpose:
+# This test ensures that the slave can limit the execution time of its
+# events via the global system variable @@slave_max_statement_time.
+#
+# Methodology:
+# This test uses the following test cases to ensure that a slave will
+# correctly limit the execution time of its events:
+# 1) Using a serial slave, the SQL thread should time out when its underlying
+# event executes for longer than @@slave_max_statement_time.
+# 2) Using a parallel slave, a worker thread should time out when its
+# underlying event executes for longer than @@slave_max_statement_time.
+# 3) Load-based log events (from LOAD DATA INFILE) should time out if their
+# execution time exceeds @@slave_max_statement_time
+# 4) Locally executed long running statements should not time out due to
+# @@slave_max_statement_time.
+#
+# References:
+# MDEV-27161: Add option for SQL thread to limit maximum execution time per
+# query replicated
+#
+--source include/have_innodb.inc
+--source include/master-slave.inc
+
+--echo #
+--echo # Set up
+--echo #
+--connection master
+SET STATEMENT sql_log_bin=0 FOR CALL mtr.add_suppression("Unsafe statement written to the binary log using statement format");
+SET STATEMENT sql_log_bin=0 FOR CALL mtr.add_suppression("Unsafe statement written to the binary log using statement format");
+--connection slave
+SET STATEMENT sql_log_bin=0 FOR CALL mtr.add_suppression("Slave log event execution was interrupted");
+SET STATEMENT sql_log_bin=0 FOR CALL mtr.add_suppression("Unsafe statement written to the binary log using statement format");
+SET @save_slave_max_statement_time=@@GLOBAL.slave_max_statement_time;
+
+--let $with_lock= 1
+
+--echo #
+--echo # Test Case 1) Using a serial slave, the SQL thread should time out when
+--echo # its underlying event executes for longer than @@slave_max_statement_time.
+--echo #
+--source include/rpl_slave_max_statement_time.inc
+
+
+--echo #
+--echo # Test Case 2) Using a parallel slave, a worker thread should time out
+--echo # when its underlying event executes for longer than
+--echo # @@slave_max_statement_time
+--echo #
+
+--source include/stop_slave.inc
+SET @old_parallel_threads=@@GLOBAL.slave_parallel_threads;
+SET @old_parallel_mode=@@GLOBAL.slave_parallel_mode;
+SET GLOBAL slave_parallel_threads=2;
+SET GLOBAL slave_parallel_mode='optimistic';
+--source include/start_slave.inc
+
+--source include/rpl_slave_max_statement_time.inc
+
+--source include/stop_slave.inc
+SET GLOBAL slave_parallel_mode=@old_parallel_mode;
+SET GLOBAL slave_parallel_threads=@old_parallel_threads;
+--source include/start_slave.inc
+
+
+--echo #
+--echo # Test Case 3) Load-based log events (from LOAD DATA INFILE) should time
+--echo # out if their execution time exceeds @@slave_max_statement_time
+--echo #
+--let $use_load_data= 1
+--source include/rpl_slave_max_statement_time.inc
+--let $use_load_data=
+
+
+--echo #
+--echo # Test Case 4) Locally executed long running statements should not time
+--echo # out due to @@slave_max_statement_time
+--echo #
+
+--connection slave
+--source include/stop_slave.inc
+SET @old_slave_max_statement_time=@@GLOBAL.slave_max_statement_time;
+SET @old_gtid_domain_id=@@GLOBAL.gtid_domain_id;
+SET @@GLOBAL.slave_max_statement_time=0.75;
+SET @@GLOBAL.gtid_domain_id=1;
+--source include/start_slave.inc
+
+CREATE TABLE t2 (a int);
+SET STATEMENT sql_log_bin=0 FOR INSERT INTO t2 SELECT SLEEP(1);
+--let $t2_count= `SELECT COUNT(*) FROM t2`
+if ($t2_count != 1)
+{
+ --die Local long running insert statement should have completed
+}
+DROP TABLE t2;
+
+--source include/stop_slave.inc
+SET GLOBAL gtid_domain_id=@old_gtid_domain_id;
+SET GLOBAL slave_max_statement_time=@old_slave_max_statement_time;
+--source include/start_slave.inc
+
+
+--echo # Cleanup
+--source include/stop_slave.inc
+SET GLOBAL slave_max_statement_time=@save_slave_max_statement_time;
+--source include/start_slave.inc
+
+--source include/rpl_end.inc
+
+--echo # End of rpl_slave_max_statement_time.test
diff --git a/mysql-test/suite/rpl/t/rpl_slave_skip.test b/mysql-test/suite/rpl/t/rpl_slave_skip.test
index 2ec80758486..933e7d14f9b 100644
--- a/mysql-test/suite/rpl/t/rpl_slave_skip.test
+++ b/mysql-test/suite/rpl/t/rpl_slave_skip.test
@@ -55,7 +55,7 @@ SELECT * FROM t2;
STOP SLAVE;
--source include/wait_for_slave_to_stop.inc
-RESET SLAVE;
+--source include/reset_slave.inc
connection master;
RESET MASTER;
diff --git a/mysql-test/suite/rpl/t/rpl_start_alter_mysqlbinlog_1.test b/mysql-test/suite/rpl/t/rpl_start_alter_mysqlbinlog_1.test
index 5c78eb290c8..f655d3c10ba 100644
--- a/mysql-test/suite/rpl/t/rpl_start_alter_mysqlbinlog_1.test
+++ b/mysql-test/suite/rpl/t/rpl_start_alter_mysqlbinlog_1.test
@@ -1,6 +1,6 @@
#
# Start Alter with binlog applied using mysqlbinlog
-# single maser with only one domain id
+# single master with only one domain id
#
--source include/have_innodb.inc
--source include/have_debug.inc
@@ -10,7 +10,6 @@
set global binlog_alter_two_phase=true;
--connection slave
--source include/stop_slave.inc
-change master to master_use_gtid= current_pos;
set global gtid_strict_mode=1;
--echo # Legacy Master Slave
diff --git a/mysql-test/suite/rpl/t/rpl_start_alter_restart_master.test b/mysql-test/suite/rpl/t/rpl_start_alter_restart_master.test
index eaddaa4db67..aac3af6fc14 100644
--- a/mysql-test/suite/rpl/t/rpl_start_alter_restart_master.test
+++ b/mysql-test/suite/rpl/t/rpl_start_alter_restart_master.test
@@ -10,6 +10,11 @@
--source include/no_valgrind_without_big.inc
--connection slave
+--source include/stop_slave.inc
+CHANGE MASTER TO MASTER_USE_GTID=NO;
+--source include/start_slave.inc
+
+--connection slave
SET @old_debug_slave= @@global.debug;
stop slave;
--let $gtid_strict_mode= `select @@gtid_strict_mode`
diff --git a/mysql-test/suite/rpl/t/rpl_stm_000001.test b/mysql-test/suite/rpl/t/rpl_stm_000001.test
index 62b5c5b1cd0..3851e61868b 100644
--- a/mysql-test/suite/rpl/t/rpl_stm_000001.test
+++ b/mysql-test/suite/rpl/t/rpl_stm_000001.test
@@ -53,7 +53,7 @@ connection master;
reset master;
connection slave;
stop slave;
-reset slave;
+--source include/reset_slave.inc
connection master;
let $1=5000;
diff --git a/mysql-test/suite/rpl/t/rpl_stm_until.test b/mysql-test/suite/rpl/t/rpl_stm_until.test
index c9a922e44fa..ebfd355b299 100644
--- a/mysql-test/suite/rpl/t/rpl_stm_until.test
+++ b/mysql-test/suite/rpl/t/rpl_stm_until.test
@@ -19,6 +19,7 @@
-- source include/have_binlog_format_mixed_or_statement.inc
-- source include/master-slave.inc
+--let $master_use_gtid_option= No
-- source include/rpl_reset.inc
# Test is dependent on binlog positions
@@ -127,7 +128,7 @@ source include/stop_slave.inc;
--disable_warnings
drop table if exists t1;
--enable_warnings
-reset slave;
+--source include/reset_slave.inc
--replace_result $MASTER_MYPORT MASTER_PORT
eval change master to master_host='127.0.0.1',master_port=$MASTER_MYPORT, master_user='root';
diff --git a/mysql-test/suite/rpl/t/rpl_stop_slave.test b/mysql-test/suite/rpl/t/rpl_stop_slave.test
index 17efa7ade3b..14c6641f120 100644
--- a/mysql-test/suite/rpl/t/rpl_stop_slave.test
+++ b/mysql-test/suite/rpl/t/rpl_stop_slave.test
@@ -4,6 +4,12 @@ source include/have_debug_sync.inc;
source include/have_binlog_format_mixed_or_statement.inc;
source include/master-slave.inc;
+--connection slave
+--source include/stop_slave.inc
+CHANGE MASTER TO MASTER_USE_GTID=NO;
+--source include/start_slave.inc
+--connection master
+
--echo
--echo # BUG#56118 STOP SLAVE does not wait till trx with CREATE TMP TABLE ends
--echo #
diff --git a/mysql-test/suite/rpl/t/rpl_trigger.test b/mysql-test/suite/rpl/t/rpl_trigger.test
index f692816bf82..e442ed94d5a 100644
--- a/mysql-test/suite/rpl/t/rpl_trigger.test
+++ b/mysql-test/suite/rpl/t/rpl_trigger.test
@@ -5,6 +5,12 @@
--source include/have_binlog_format_mixed_or_statement.inc
--source include/have_innodb.inc
--source include/master-slave.inc
+
+connection slave;
+--source include/stop_slave.inc
+CHANGE MASTER TO MASTER_USE_GTID=NO;
+--source include/start_slave.inc
+
connection master;
disable_query_log;
@@ -329,7 +335,8 @@ let $binlog_version= query_get_value(SHOW BINLOG EVENTS, Info, 1);
# Make the slave to replay the new binlog.
connection slave;
-RESET SLAVE;
+--let $master_use_gtid_option= No
+--source include/reset_slave.inc
START SLAVE;
SELECT MASTER_POS_WAIT('master-bin.000001', 513) >= 0;
@@ -362,7 +369,7 @@ DROP TABLE t1;
DROP TABLE t2;
STOP SLAVE;
-RESET SLAVE;
+--source include/reset_slave.inc
# The master should be clean.
@@ -498,6 +505,10 @@ connection master;
--source include/rpl_reset.inc
connection slave;
+--source include/stop_slave.inc
+CHANGE MASTER TO MASTER_USE_GTID=NO;
+--source include/start_slave.inc
+
connection master;
create table t1 ( f int ) engine = innodb;
diff --git a/mysql-test/suite/rpl/t/rpl_upgrade_master_info.test b/mysql-test/suite/rpl/t/rpl_upgrade_master_info.test
index 42b375c4579..fb0e3cf48f7 100644
--- a/mysql-test/suite/rpl/t/rpl_upgrade_master_info.test
+++ b/mysql-test/suite/rpl/t/rpl_upgrade_master_info.test
@@ -4,7 +4,6 @@
--connection slave
--source include/stop_slave.inc
-CHANGE MASTER TO master_use_gtid=CURRENT_POS;
--let $datadir= `SELECT @@datadir`
--let $rpl_server_number= 2
diff --git a/mysql-test/suite/rpl/t/rpl_using_gtid_default.test b/mysql-test/suite/rpl/t/rpl_using_gtid_default.test
new file mode 100644
index 00000000000..eab5b4dd504
--- /dev/null
+++ b/mysql-test/suite/rpl/t/rpl_using_gtid_default.test
@@ -0,0 +1,303 @@
+#
+# Purpose:
+# This test ensures that a replica's default value for Using_Gtid is set
+# correctly. Specifically, it should default to 'Slave_Pos' unless the primary
+# server does not support GTIDs (if its version is less than 10), in which case
+# the replica should fall back to 'No'.
+#
+# Methodology:
+# Validate the value of Using_Gtid on replica initialization and after
+# RESET SLAVE commands. Specifically, we validate the following use cases:
+#
+# Case 1) A replica will initialize with Slave_Pos if the primary supports
+# GTIDs
+# Case 2) A replica configured with the Using_Gtid=Slave_Pos issued
+# RESET SLAVE will preserve Using_Gtid without any informational
+# messages.
+# Case 3) A replica configured with Using_Gtid=No against a master which
+# supports GTIDs will revert to Using_Gtid=Slave_Pos after issued
+# RESET SLAVE and provide an informational note
+# Case 4) A fresh replica targeting a primary which does not support GTIDs
+# will fall back to Using_Gtid=No when starting. An informational
+# message should be logged.
+# Case 5) A replica connected to a primary which does not support GTIDs
+# should preserve Using_Gtid=No when issued RESET SLAVE. No message
+# should be provided to the user.
+# Case 6) A replica configured with Using_Gtid=Current_Pos should revert
+# to Slave_Pos when issued RESET SLAVE. An informational message
+# should be provided to the user.
+# Case 7) The MTR include file rpl_change_topology.inc should implicitly
+# set MASTER_USE_GTID=NO when provided with $rpl_master_log_file
+# Case 8) The MTR include file reset_slave.inc should keep/delete GTID state
+# when reset_slave_keep_gtid_state is set, respectively.
+# Case 9) A replica issued CHANGE MASTER TO specified with log coordinates
+# but not master_use_gtid=No should warn the user that Using_Gtid is
+# being changed to No.
+# Case 10) A replica issued CHANGE MASTER TO specified with log coordinates
+# and master_use_gtid=Slave_Pos should warn the user that the log
+# coordinates will be ignored.
+#
+# References:
+# MDEV-19801: Change defaults for CHANGE MASTER TO so that GTID-based
+# replication is used by default if master supports it
+#
+--source include/have_debug.inc
+--source include/master-slave.inc
+
+# Format independent test so just use one
+--source include/have_binlog_format_mixed.inc
+
+--echo #
+--echo # Slave default configuration should be Slave_Pos
+--let $expected_default_using_gtid= Slave_Pos
+--connection slave
+--let $using_gtid= query_get_value(SHOW SLAVE STATUS, Using_Gtid, 1)
+if ($using_gtid != $expected_default_using_gtid)
+{
+ --die Using_Gtid had wrong default value of '$using_gtid' when it should have been '$expected_default_using_gtid'
+}
+
+--echo #
+--echo # Ensure that a slave configured with Using_Gtid=Slave_Pos will remain
+--echo # as Slave_Pos after RESET SLAVE
+--source include/stop_slave.inc
+RESET SLAVE;
+--echo # No warning should be given because Slave_Pos never changed
+SHOW WARNINGS;
+--source include/start_slave.inc
+--let $using_gtid= query_get_value(SHOW SLAVE STATUS, Using_Gtid, 1)
+if ($using_gtid != $expected_default_using_gtid)
+{
+ --die Using_Gtid has wrong value of '$using_gtid' when it should be '$expected_default_using_gtid'
+}
+
+
+--echo #
+--echo # Ensure that a slave configured with Using_Gtid=No will revert to its
+--echo # default of Slave_Pos after RESET SLAVE for a master which supports
+--echo # GTIDs
+
+--source include/stop_slave.inc
+CHANGE MASTER TO MASTER_USE_GTID=NO;
+--source include/start_slave.inc
+--source include/stop_slave.inc
+RESET SLAVE;
+--echo # A notification that Using_Gtid was reverted should exist
+SHOW WARNINGS;
+--source include/start_slave.inc
+--let $using_gtid= query_get_value(SHOW SLAVE STATUS, Using_Gtid, 1)
+if ($using_gtid != $expected_default_using_gtid)
+{
+ --die Using_Gtid has wrong value of '$using_gtid' when it should be '$expected_default_using_gtid'
+}
+
+--echo # Clear SHOW WARNINGS
+--disable_query_log
+set SQL_LOG_BIN=0;
+CREATE TABLE t1 (a int);
+DROP TABLE t1;
+set SQL_LOG_BIN=1;
+--enable_query_log
+
+
+--echo #
+--echo # If the primary does not support GTIDs (version < 10), the replica
+--echo # should fall back to Using_Gtid=No on slave start, and should not
+--echo # revert Using_Gtid to Slave_Pos after RESET SLAVE
+
+--source include/stop_slave.inc
+RESET SLAVE ALL;
+
+--replace_result $MASTER_MYPORT MASTER_MYPORT
+--eval CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=$MASTER_MYPORT, MASTER_USER='root', MASTER_CONNECT_RETRY=1
+SET @saved_dbug= @@GLOBAL.debug_dbug;
+set @@global.debug_dbug= "d,mock_mariadb_primary_v5_in_get_master_version";
+--source include/start_slave.inc
+
+--echo # Replica should detect at start that the primary does not support GTIDs
+--echo # and fall-back to Using_Gtid=No
+--let $using_gtid= query_get_value(SHOW SLAVE STATUS, Using_Gtid, 1)
+if ($using_gtid != 'No')
+{
+ --die Using_Gtid has wrong value of '$using_gtid' when it should be 'No'
+}
+
+--echo # Replica should have an informational message stating it is falling
+--echo # back to Using_Gtid=No
+let $log_error_= `SELECT @@GLOBAL.log_error`;
+if(!$log_error_)
+{
+ # MySQL Server on windows is started with --console and thus
+ # does not know the location of its .err log, use default location
+ let $log_error_ = $MYSQLTEST_VARDIR/log/mysqld.2.err;
+}
+--let SEARCH_FILE=$log_error_
+--let SEARCH_PATTERN=Falling back to Using_Gtid=No because master does not support GTIDs
+--source include/search_pattern_in_file.inc
+
+--source include/stop_slave.inc
+RESET SLAVE;
+
+--echo # Replica should know that the primary does not support GTIDs and
+--echo # preserve Using_Gtid=No
+--let $using_gtid= query_get_value(SHOW SLAVE STATUS, Using_Gtid, 1)
+if ($using_gtid != 'No')
+{
+ --die Using_Gtid has wrong value of '$using_gtid' when it should be 'No'
+}
+--echo # 'No' was not reverted and therefore no note should be added
+SHOW WARNINGS;
+set @@global.debug_dbug= @saved_dbug;
+--source include/start_slave.inc
+
+
+--echo #
+--echo # Ensure that a slave configured with Using_Gtid=Current_Pos will revert
+--echo # to its default of Slave_Pos after RESET SLAVE.
+
+--source include/stop_slave.inc
+CHANGE MASTER TO MASTER_USE_GTID=Current_Pos;
+--source include/start_slave.inc
+--source include/stop_slave.inc
+RESET SLAVE;
+--echo # A notification that Using_Gtid was reverted should exist
+SHOW WARNINGS;
+--source include/start_slave.inc
+--let $using_gtid= query_get_value(SHOW SLAVE STATUS, Using_Gtid, 1)
+if ($using_gtid != $expected_default_using_gtid)
+{
+ --die Using_Gtid has wrong value of '$using_gtid' when it should be '$expected_default_using_gtid'
+}
+
+--echo # Clear SHOW WARNINGS
+--disable_query_log
+set SQL_LOG_BIN=0;
+CREATE TABLE t1 (a int);
+DROP TABLE t1;
+set SQL_LOG_BIN=1;
+--enable_query_log
+
+--echo # The MTR include file rpl_change_topology.inc should implicitly set
+--echo # MASTER_USE_GTID=NO when provided with \$rpl_master_log_file. Note that
+--echo # this will switch master and slave roles.
+--connection slave
+--source include/stop_slave.inc
+--let $pos_c= query_get_value(SHOW SLAVE STATUS, Exec_Master_Log_Pos, 1)
+--let $file_c= query_get_value(SHOW SLAVE STATUS, Master_Log_File, 1)
+--let $rpl_master_log_file= 2:$file_c
+--let $rpl_master_log_pos= 2:$pos_c
+--let $rpl_topology= 2->1
+--source include/rpl_change_topology.inc
+
+--echo # connection 'master' is the slave in this comparison
+--connection master
+--let $using_gtid= query_get_value(SHOW SLAVE STATUS, Using_Gtid, 1)
+--echo # Validating Using_Gtid=No..
+if (`SELECT strcmp("$using_gtid","No") != 0`)
+{
+ --die Using_Gtid should be No when calling rpl_change_topology with \$rpl_master_log_file set
+}
+--echo # ..success
+
+--let $rpl_master_log_file=
+--let $rpl_topology= 1->2
+--source include/rpl_change_topology.inc
+
+--echo # connection 'slave' is back to slave role
+--connection slave
+--let $using_gtid= query_get_value(SHOW SLAVE STATUS, Using_Gtid, 1)
+--echo # Validating Using_Gtid=$expected_default_using_gtid..
+if (`SELECT strcmp("$using_gtid","$expected_default_using_gtid")!= 0`)
+{
+ --die Using_Gtid should be back to $expected_default_using_gtid with empty \$rpl_master_log_file
+}
+--echo # ..success
+--source include/start_slave.inc
+
+--echo #
+--echo # The MTR include file reset_slave.inc should keep/delete GTID state
+--echo # when reset_slave_keep_gtid_state is set, respectively.
+--echo #
+--connection master
+CREATE TABLE t1 (a INT);
+INSERT INTO t1 VALUES (1);
+DROP TABLE t1;
+--source include/save_master_gtid.inc
+
+--connection slave
+--source include/sync_with_master_gtid.inc
+--source include/stop_slave.inc
+
+--echo # Tagging gtid_slave_pos before reset_slave.inc as old_slave_pos
+--let $old_slave_pos= `SELECT @@gtid_slave_pos`
+if (`SELECT strcmp("$old_slave_pos","") = 0`)
+{
+ die gtid_slave_pos is empty but should not be;
+}
+
+--echo # Using reset_slave_keep_gtid_state=1 should preserve GTID state
+--let $master_use_gtid_option=Slave_Pos
+--let $reset_slave_keep_gtid_state=1
+--source include/reset_slave.inc
+
+--echo # Tagging gtid_slave_pos after reset_slave.inc as new_slave_pos
+--let $new_slave_pos= `SELECT @@gtid_slave_pos`
+--echo # Validating old_slave_pos == new_slave_pos..
+if ($old_slave_pos != $new_slave_pos)
+{
+ die gtid_slave_pos unexpectedly changed after running reset_slave.inc;
+}
+--echo # ..success
+
+--echo # Using reset_slave_keep_gtid_state=0 should empty GTID state
+--let $master_use_gtid_option=Slave_Pos
+--let $reset_slave_keep_gtid_state=0
+--source include/reset_slave.inc
+
+--echo # Tagging gtid_slave_pos as new_slave_pos
+--let $new_slave_pos= `SELECT @@gtid_slave_pos`
+--echo # Validating new_slave_pos is empty..
+if (`SELECT strcmp("$new_slave_pos","") != 0`)
+{
+ die gtid_slave_pos should be empty after reset_slave.inc without keeping gtid state;
+}
+--echo # ..success
+--replace_result $old_slave_pos old_slave_pos
+eval set global gtid_slave_pos="$old_slave_pos";
+--source include/start_slave.inc
+
+--echo #
+--echo # A replica issued CHANGE MASTER TO specified with log coordinates but
+--echo # not master_use_gtid=no should warn the user that Using_Gtid is being
+--echo # changed to No.
+--echo #
+--connection slave
+--let $io_log_pos= query_get_value('SHOW SLAVE STATUS', Read_Master_Log_Pos, 1)
+--let $io_log_file= query_get_value('SHOW SLAVE STATUS', Master_Log_File, 1)
+--source include/stop_slave.inc
+--replace_result $io_log_file io_log_file $io_log_pos io_log_pos
+--eval CHANGE MASTER TO master_log_pos=$io_log_pos, master_log_file='$io_log_file'
+--source include/start_slave.inc
+
+
+--echo #
+--echo # A replica issued CHANGE MASTER TO specified with log coordinates and
+--echo # master_use_gtid=Slave_Pos should warn the user that the log
+--echo # coordinates will be ignored.
+--echo #
+--connection slave
+--let $io_log_pos= query_get_value('SHOW SLAVE STATUS', Read_Master_Log_Pos, 1)
+--let $io_log_file= query_get_value('SHOW SLAVE STATUS', Master_Log_File, 1)
+--let $relay_log_pos= 4
+--let $relay_log_file= slave-relay-bin.000001
+--source include/stop_slave.inc
+--replace_result $io_log_file io_log_file $io_log_pos io_log_pos
+--eval CHANGE MASTER TO master_log_pos=$io_log_pos, master_log_file='$io_log_file', master_use_gtid=Slave_Pos
+--replace_result $relay_log_file relay_log_file $relay_log_pos relay_log_pos
+--eval CHANGE MASTER TO relay_log_pos=$relay_log_pos, relay_log_file='$relay_log_file', master_use_gtid=Slave_Pos
+--source include/start_slave.inc
+
+--source include/rpl_end.inc
+
+--echo #
+--echo # End of rpl_using_gtid_default.test
diff --git a/mysql-test/suite/rpl/t/rpl_xa_gap_lock.test b/mysql-test/suite/rpl/t/rpl_xa_gap_lock.test
index 9c48891b889..29e883a19d6 100644
--- a/mysql-test/suite/rpl/t/rpl_xa_gap_lock.test
+++ b/mysql-test/suite/rpl/t/rpl_xa_gap_lock.test
@@ -129,7 +129,7 @@ DROP TABLE t2, t1;
# --enable_query_log
#}
--replace_result $master_file LOG_FILE $master_pos LOG_POS
---eval CHANGE MASTER TO MASTER_LOG_FILE='$master_file', MASTER_LOG_POS=$master_pos
+--eval CHANGE MASTER TO MASTER_LOG_FILE='$master_file', MASTER_LOG_POS=$master_pos, MASTER_USE_GTID=NO
SET @@GLOBAL.innodb_limit_optimistic_insert_debug = @saved_innodb_limit_optimistic_insert_debug;
--source include/start_slave.inc
diff --git a/mysql-test/suite/rpl/t/semisync_future-7591.test b/mysql-test/suite/rpl/t/semisync_future-7591.test
index 866041d2579..793d8bccc18 100644
--- a/mysql-test/suite/rpl/t/semisync_future-7591.test
+++ b/mysql-test/suite/rpl/t/semisync_future-7591.test
@@ -8,7 +8,7 @@ set global rpl_semi_sync_master_enabled = ON;
--connection slave
--source include/stop_slave.inc
set global rpl_semi_sync_slave_enabled = ON;
-change master to master_log_file='master-bin.000002', master_log_pos = 320;
+change master to master_log_file='master-bin.000002', master_log_pos = 320, master_use_gtid=no;
start slave;
--let $slave_io_errno=1236
@@ -20,7 +20,8 @@ reset master;
--connection slave
--source include/stop_slave.inc
-reset slave;
+--let $master_use_gtid_option= No
+--source include/reset_slave.inc
--source include/start_slave.inc
set global rpl_semi_sync_slave_enabled = OFF;
diff --git a/mysql-test/suite/sql_sequence/gtid.result b/mysql-test/suite/sql_sequence/gtid.result
index 5c0003d4ea3..f23ebc56688 100644
--- a/mysql-test/suite/sql_sequence/gtid.result
+++ b/mysql-test/suite/sql_sequence/gtid.result
@@ -68,7 +68,7 @@ connection master;
create sequence s2;
alter table s2 add id int;
ERROR HY000: Sequence 's_db.s2' table structure is invalid (Wrong number of columns)
-alter table s2 add index ind_x(start);
+alter table s2 add index ind_x(start_value);
ERROR HY000: Sequence 's_db.s2' table structure is invalid (Sequence tables cannot have any keys)
drop sequence s2;
###########################################
diff --git a/mysql-test/suite/sql_sequence/gtid.test b/mysql-test/suite/sql_sequence/gtid.test
index 63ed7ec5264..4a096246108 100644
--- a/mysql-test/suite/sql_sequence/gtid.test
+++ b/mysql-test/suite/sql_sequence/gtid.test
@@ -70,7 +70,7 @@ create sequence s2;
alter table s2 add id int;
--error ER_SEQUENCE_INVALID_TABLE_STRUCTURE
-alter table s2 add index ind_x(start);
+alter table s2 add index ind_x(start_value);
drop sequence s2;
--echo ###########################################
diff --git a/mysql-test/suite/sql_sequence/replication.result b/mysql-test/suite/sql_sequence/replication.result
index 762c332dbd6..94b1c72b9e0 100644
--- a/mysql-test/suite/sql_sequence/replication.result
+++ b/mysql-test/suite/sql_sequence/replication.result
@@ -64,7 +64,7 @@ connection master;
create sequence s2;
alter table s2 add id int;
ERROR HY000: Sequence 's_db.s2' table structure is invalid (Wrong number of columns)
-alter table s2 add index ind_x(start);
+alter table s2 add index ind_x(start_value);
ERROR HY000: Sequence 's_db.s2' table structure is invalid (Sequence tables cannot have any keys)
drop sequence s2;
###########################################
diff --git a/mysql-test/suite/sql_sequence/replication.test b/mysql-test/suite/sql_sequence/replication.test
index e26fde8a329..0354737788f 100644
--- a/mysql-test/suite/sql_sequence/replication.test
+++ b/mysql-test/suite/sql_sequence/replication.test
@@ -70,7 +70,7 @@ create sequence s2;
alter table s2 add id int;
--error ER_SEQUENCE_INVALID_TABLE_STRUCTURE
-alter table s2 add index ind_x(start);
+alter table s2 add index ind_x(start_value);
drop sequence s2;
--echo ###########################################
diff --git a/mysql-test/suite/sys_vars/r/allow_suspicious_udfs.result b/mysql-test/suite/sys_vars/r/allow_suspicious_udfs.result
new file mode 100644
index 00000000000..db0b4749e69
--- /dev/null
+++ b/mysql-test/suite/sys_vars/r/allow_suspicious_udfs.result
@@ -0,0 +1,11 @@
+#
+# MDEV-24815 Show "--allow-suspicious-udfs" state in SYSTEM VARIABLES
+#
+SELECT @@allow_suspicious_udfs AS EXPECT_0;
+EXPECT_0
+0
+# restart: --allow-suspicious-udfs
+SELECT @@allow_suspicious_udfs AS EXPECT_1;
+EXPECT_1
+1
+# restart: --skip-allow-suspicious-udfs
diff --git a/mysql-test/suite/sys_vars/r/innodb_prefix_index_cluster_optimization_basic.result b/mysql-test/suite/sys_vars/r/innodb_prefix_index_cluster_optimization_basic.result
deleted file mode 100644
index 57b653bcf5e..00000000000
--- a/mysql-test/suite/sys_vars/r/innodb_prefix_index_cluster_optimization_basic.result
+++ /dev/null
@@ -1,122 +0,0 @@
-SET @start_global_value = @@global.innodb_prefix_index_cluster_optimization;
-SELECT @start_global_value;
-@start_global_value
-0
-#
-# exists as global only
-#
-Valid values are 'ON' and 'OFF'
-select @@global.innodb_prefix_index_cluster_optimization in (0, 1);
-@@global.innodb_prefix_index_cluster_optimization in (0, 1)
-1
-select @@global.innodb_prefix_index_cluster_optimization;
-@@global.innodb_prefix_index_cluster_optimization
-0
-select @@session.innodb_prefix_index_cluster_optimization;
-ERROR HY000: Variable 'innodb_prefix_index_cluster_optimization' is a GLOBAL variable
-show global variables like 'innodb_prefix_index_cluster_optimization';
-Variable_name Value
-innodb_prefix_index_cluster_optimization OFF
-show session variables like 'innodb_prefix_index_cluster_optimization';
-Variable_name Value
-innodb_prefix_index_cluster_optimization OFF
-select * from information_schema.global_variables where variable_name = 'innodb_prefix_index_cluster_optimization';
-VARIABLE_NAME VARIABLE_VALUE
-INNODB_PREFIX_INDEX_CLUSTER_OPTIMIZATION OFF
-select * from information_schema.session_variables where variable_name = 'innodb_prefix_index_cluster_optimization';
-VARIABLE_NAME VARIABLE_VALUE
-INNODB_PREFIX_INDEX_CLUSTER_OPTIMIZATION OFF
-#
-# show that it's writable
-#
-set global innodb_prefix_index_cluster_optimization = 'OFF';
-select @@global.innodb_prefix_index_cluster_optimization;
-@@global.innodb_prefix_index_cluster_optimization
-0
-select * from information_schema.global_variables where variable_name = 'innodb_prefix_index_cluster_optimization';
-VARIABLE_NAME VARIABLE_VALUE
-INNODB_PREFIX_INDEX_CLUSTER_OPTIMIZATION OFF
-select * from information_schema.session_variables where variable_name = 'innodb_prefix_index_cluster_optimization';
-VARIABLE_NAME VARIABLE_VALUE
-INNODB_PREFIX_INDEX_CLUSTER_OPTIMIZATION OFF
-set @@global.innodb_prefix_index_cluster_optimization = 'ON';
-select @@global.innodb_prefix_index_cluster_optimization;
-@@global.innodb_prefix_index_cluster_optimization
-1
-select * from information_schema.global_variables where variable_name = 'innodb_prefix_index_cluster_optimization';
-VARIABLE_NAME VARIABLE_VALUE
-INNODB_PREFIX_INDEX_CLUSTER_OPTIMIZATION ON
-select * from information_schema.session_variables where variable_name = 'innodb_prefix_index_cluster_optimization';
-VARIABLE_NAME VARIABLE_VALUE
-INNODB_PREFIX_INDEX_CLUSTER_OPTIMIZATION ON
-set global innodb_prefix_index_cluster_optimization = 0;
-select @@global.innodb_prefix_index_cluster_optimization;
-@@global.innodb_prefix_index_cluster_optimization
-0
-select * from information_schema.global_variables where variable_name = 'innodb_prefix_index_cluster_optimization';
-VARIABLE_NAME VARIABLE_VALUE
-INNODB_PREFIX_INDEX_CLUSTER_OPTIMIZATION OFF
-select * from information_schema.session_variables where variable_name = 'innodb_prefix_index_cluster_optimization';
-VARIABLE_NAME VARIABLE_VALUE
-INNODB_PREFIX_INDEX_CLUSTER_OPTIMIZATION OFF
-set @@global.innodb_prefix_index_cluster_optimization = 1;
-select @@global.innodb_prefix_index_cluster_optimization;
-@@global.innodb_prefix_index_cluster_optimization
-1
-select * from information_schema.global_variables where variable_name = 'innodb_prefix_index_cluster_optimization';
-VARIABLE_NAME VARIABLE_VALUE
-INNODB_PREFIX_INDEX_CLUSTER_OPTIMIZATION ON
-select * from information_schema.session_variables where variable_name = 'innodb_prefix_index_cluster_optimization';
-VARIABLE_NAME VARIABLE_VALUE
-INNODB_PREFIX_INDEX_CLUSTER_OPTIMIZATION ON
-set session innodb_prefix_index_cluster_optimization = 'OFF';
-ERROR HY000: Variable 'innodb_prefix_index_cluster_optimization' is a GLOBAL variable and should be set with SET GLOBAL
-select @@global.innodb_prefix_index_cluster_optimization;
-@@global.innodb_prefix_index_cluster_optimization
-1
-select * from information_schema.global_variables where variable_name = 'innodb_prefix_index_cluster_optimization';
-VARIABLE_NAME VARIABLE_VALUE
-INNODB_PREFIX_INDEX_CLUSTER_OPTIMIZATION ON
-select * from information_schema.session_variables where variable_name = 'innodb_prefix_index_cluster_optimization';
-VARIABLE_NAME VARIABLE_VALUE
-INNODB_PREFIX_INDEX_CLUSTER_OPTIMIZATION ON
-set @@session.innodb_prefix_index_cluster_optimization = 'ON';
-ERROR HY000: Variable 'innodb_prefix_index_cluster_optimization' is a GLOBAL variable and should be set with SET GLOBAL
-select @@global.innodb_prefix_index_cluster_optimization;
-@@global.innodb_prefix_index_cluster_optimization
-1
-select * from information_schema.global_variables where variable_name = 'innodb_prefix_index_cluster_optimization';
-VARIABLE_NAME VARIABLE_VALUE
-INNODB_PREFIX_INDEX_CLUSTER_OPTIMIZATION ON
-select * from information_schema.session_variables where variable_name = 'innodb_prefix_index_cluster_optimization';
-VARIABLE_NAME VARIABLE_VALUE
-INNODB_PREFIX_INDEX_CLUSTER_OPTIMIZATION ON
-#
-# incorrect types
-#
-set global innodb_prefix_index_cluster_optimization = 1.1;
-ERROR 42000: Incorrect argument type to variable 'innodb_prefix_index_cluster_optimization'
-set global innodb_prefix_index_cluster_optimization = 1e1;
-ERROR 42000: Incorrect argument type to variable 'innodb_prefix_index_cluster_optimization'
-set global innodb_prefix_index_cluster_optimization = 2;
-ERROR 42000: Variable 'innodb_prefix_index_cluster_optimization' can't be set to the value of '2'
-set global innodb_prefix_index_cluster_optimization = -3;
-ERROR 42000: Variable 'innodb_prefix_index_cluster_optimization' can't be set to the value of '-3'
-select @@global.innodb_prefix_index_cluster_optimization;
-@@global.innodb_prefix_index_cluster_optimization
-1
-select * from information_schema.global_variables where variable_name = 'innodb_prefix_index_cluster_optimization';
-VARIABLE_NAME VARIABLE_VALUE
-INNODB_PREFIX_INDEX_CLUSTER_OPTIMIZATION ON
-select * from information_schema.session_variables where variable_name = 'innodb_prefix_index_cluster_optimization';
-VARIABLE_NAME VARIABLE_VALUE
-INNODB_PREFIX_INDEX_CLUSTER_OPTIMIZATION ON
-set global innodb_prefix_index_cluster_optimization = 'AUTO';
-ERROR 42000: Variable 'innodb_prefix_index_cluster_optimization' can't be set to the value of 'AUTO'
-#
-# Cleanup
-#
-SET @@global.innodb_prefix_index_cluster_optimization = @start_global_value;
-SELECT @@global.innodb_prefix_index_cluster_optimization;
-@@global.innodb_prefix_index_cluster_optimization
-0
diff --git a/mysql-test/suite/sys_vars/r/innodb_version_basic.result b/mysql-test/suite/sys_vars/r/innodb_version_basic.result
deleted file mode 100644
index 759b5048512..00000000000
--- a/mysql-test/suite/sys_vars/r/innodb_version_basic.result
+++ /dev/null
@@ -1,17 +0,0 @@
-select @@global.innodb_version;
-@@global.innodb_version
-x.y.z
-select @@session.innodb_version;
-ERROR HY000: Variable 'innodb_version' is a GLOBAL variable
-show global variables like 'innodb_version' disabled so to not change with every version;
-show session variables like 'innodb_version' disabled so to not change with every version;
-select VARIABLE_VALUE=@@global.innodb_version from information_schema.global_variables where variable_name='innodb_version';
-VARIABLE_VALUE=@@global.innodb_version
-1
-select VARIABLE_VALUE=@@global.innodb_version from information_schema.session_variables where variable_name='innodb_version';
-VARIABLE_VALUE=@@global.innodb_version
-1
-set global innodb_version=1;
-ERROR HY000: Variable 'innodb_version' is a read only variable
-set session innodb_version=1;
-ERROR HY000: Variable 'innodb_version' is a read only variable
diff --git a/mysql-test/suite/sys_vars/r/optimizer_prune_level_basic.result b/mysql-test/suite/sys_vars/r/optimizer_prune_level_basic.result
index 99843f0b93f..b4763ae0aa4 100644
--- a/mysql-test/suite/sys_vars/r/optimizer_prune_level_basic.result
+++ b/mysql-test/suite/sys_vars/r/optimizer_prune_level_basic.result
@@ -1,35 +1,35 @@
SET @start_global_value = @@global.optimizer_prune_level;
SELECT @start_global_value;
@start_global_value
-1
+2
SET @start_session_value = @@session.optimizer_prune_level;
SELECT @start_session_value;
@start_session_value
-1
+2
'#--------------------FN_DYNVARS_115_01-------------------------#'
SET @@global.optimizer_prune_level = 0;
SET @@global.optimizer_prune_level = DEFAULT;
SELECT @@global.optimizer_prune_level;
@@global.optimizer_prune_level
-1
+2
SET @@session.optimizer_prune_level = 0;
SET @@session.optimizer_prune_level = DEFAULT;
SELECT @@session.optimizer_prune_level;
@@session.optimizer_prune_level
-1
+2
'#--------------------FN_DYNVARS_115_02-------------------------#'
SET @@global.optimizer_prune_level = DEFAULT;
-SELECT @@global.optimizer_prune_level = 1;
-@@global.optimizer_prune_level = 1
+SELECT @@global.optimizer_prune_level = 2;
+@@global.optimizer_prune_level = 2
1
SET @@session.optimizer_prune_level = DEFAULT;
-SELECT @@session.optimizer_prune_level = 1;
-@@session.optimizer_prune_level = 1
+SELECT @@session.optimizer_prune_level = 2;
+@@session.optimizer_prune_level = 2
1
'#--------------------FN_DYNVARS_115_03-------------------------#'
SELECT @@global.optimizer_prune_level;
@@global.optimizer_prune_level
-1
+2
SET @@global.optimizer_prune_level = 0;
SELECT @@global.optimizer_prune_level;
@@global.optimizer_prune_level
@@ -38,6 +38,10 @@ SET @@global.optimizer_prune_level = 1;
SELECT @@global.optimizer_prune_level;
@@global.optimizer_prune_level
1
+SET @@global.optimizer_prune_level = 2;
+SELECT @@global.optimizer_prune_level;
+@@global.optimizer_prune_level
+2
SET @@global.optimizer_prune_level = TRUE;
SELECT @@global.optimizer_prune_level;
@@global.optimizer_prune_level
@@ -49,7 +53,7 @@ SELECT @@global.optimizer_prune_level;
'#--------------------FN_DYNVARS_115_04-------------------------#'
SELECT @@session.optimizer_prune_level;
@@session.optimizer_prune_level
-1
+2
SET @@session.optimizer_prune_level = 0;
SELECT @@session.optimizer_prune_level;
@@session.optimizer_prune_level
@@ -58,6 +62,10 @@ SET @@session.optimizer_prune_level = 1;
SELECT @@session.optimizer_prune_level;
@@session.optimizer_prune_level
1
+SET @@session.optimizer_prune_level = 2;
+SELECT @@session.optimizer_prune_level;
+@@session.optimizer_prune_level
+2
SET @@session.optimizer_prune_level = TRUE;
SELECT @@session.optimizer_prune_level;
@@session.optimizer_prune_level
@@ -69,7 +77,7 @@ SELECT @@session.optimizer_prune_level;
'#------------------FN_DYNVARS_115_05-----------------------#'
SET @@global.optimizer_prune_level = ON;
ERROR 42000: Incorrect argument type to variable 'optimizer_prune_level'
-'Bug# 34840: Since it is a boolean variable, it should not give errors on 'ON' & 'OFF' values';
+'Bug# 34840: Since it is not a boolean variable, it should give errors on 'ON' & 'OFF' values';
SET @@global.optimizer_prune_level = OFF;
ERROR 42000: Incorrect argument type to variable 'optimizer_prune_level'
SET @@global.optimizer_prune_level = 'ONN';
@@ -86,10 +94,16 @@ Warning 1292 Truncated incorrect optimizer_prune_level value: '-1024'
SELECT @@global.optimizer_prune_level;
@@global.optimizer_prune_level
0
-'Bug# 34840: Since it is a boolean variable, it should give errors on numeric values';
+'Bug# 34840: Since it is not a boolean variable, it should no give errors on numeric values';
SET @@global.optimizer_prune_level = 65536;
Warnings:
Warning 1292 Truncated incorrect optimizer_prune_level value: '65536'
+SET @@global.optimizer_prune_level = 3;
+Warnings:
+Warning 1292 Truncated incorrect optimizer_prune_level value: '3'
+select @@global.optimizer_prune_level;
+@@global.optimizer_prune_level
+2
SET @@global.optimizer_prune_level = 65530.34;
ERROR 42000: Incorrect argument type to variable 'optimizer_prune_level'
SET @@global.optimizer_prune_level = test;
@@ -121,7 +135,7 @@ Warnings:
Warning 1292 Truncated incorrect optimizer_prune_level value: '65550'
SELECT @@session.optimizer_prune_level;
@@session.optimizer_prune_level
-1
+2
SET @@session.optimizer_prune_level = test;
ERROR 42000: Incorrect argument type to variable 'optimizer_prune_level'
'#------------------FN_DYNVARS_115_06-----------------------#'
@@ -164,8 +178,8 @@ ERROR 42S22: Unknown column 'optimizer_prune_level' in 'field list'
SET @@global.optimizer_prune_level = @start_global_value;
SELECT @@global.optimizer_prune_level;
@@global.optimizer_prune_level
-1
+2
SET @@session.optimizer_prune_level = @start_session_value;
SELECT @@session.optimizer_prune_level;
@@session.optimizer_prune_level
-1
+2
diff --git a/mysql-test/suite/sys_vars/r/sysvars_innodb.result b/mysql-test/suite/sys_vars/r/sysvars_innodb.result
index 047085339b7..c4a26e58cb4 100644
--- a/mysql-test/suite/sys_vars/r/sysvars_innodb.result
+++ b/mysql-test/suite/sys_vars/r/sysvars_innodb.result
@@ -1,7 +1,6 @@
select VARIABLE_NAME, SESSION_VALUE, DEFAULT_VALUE, VARIABLE_SCOPE, VARIABLE_TYPE, VARIABLE_COMMENT, NUMERIC_MIN_VALUE, NUMERIC_MAX_VALUE, NUMERIC_BLOCK_SIZE, ENUM_VALUE_LIST, READ_ONLY, COMMAND_LINE_ARGUMENT from information_schema.system_variables
where variable_name like 'innodb%' and
variable_name not in (
-'innodb_version', # always the same as the server version
'innodb_numa_interleave', # only available WITH_NUMA
'innodb_evict_tables_on_commit_debug', # one may want to override this
'innodb_use_native_aio', # default value depends on OS
@@ -1258,10 +1257,10 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME INNODB_PREFIX_INDEX_CLUSTER_OPTIMIZATION
SESSION_VALUE NULL
-DEFAULT_VALUE OFF
+DEFAULT_VALUE ON
VARIABLE_SCOPE GLOBAL
VARIABLE_TYPE BOOLEAN
-VARIABLE_COMMENT Enable prefix optimization to sometimes avoid cluster index lookups.
+VARIABLE_COMMENT Deprecated parameter with no effect
NUMERIC_MIN_VALUE NULL
NUMERIC_MAX_VALUE NULL
NUMERIC_BLOCK_SIZE NULL
diff --git a/mysql-test/suite/sys_vars/r/sysvars_server_embedded,32bit.rdiff b/mysql-test/suite/sys_vars/r/sysvars_server_embedded,32bit.rdiff
index a6bf0fb606a..e018489446b 100644
--- a/mysql-test/suite/sys_vars/r/sysvars_server_embedded,32bit.rdiff
+++ b/mysql-test/suite/sys_vars/r/sysvars_server_embedded,32bit.rdiff
@@ -1,4 +1,4 @@
-@@ -34,7 +34,7 @@
+@@ -44,7 +44,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME ARIA_BLOCK_SIZE
VARIABLE_SCOPE GLOBAL
@@ -7,7 +7,7 @@
VARIABLE_COMMENT Block size to be used for Aria index pages.
NUMERIC_MIN_VALUE 4096
NUMERIC_MAX_VALUE 32768
-@@ -44,7 +44,7 @@
+@@ -54,7 +54,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME ARIA_CHECKPOINT_INTERVAL
VARIABLE_SCOPE GLOBAL
@@ -16,7 +16,7 @@
VARIABLE_COMMENT Interval between tries to do an automatic checkpoints. In seconds; 0 means 'no automatic checkpoints' which makes sense only for testing.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 4294967295
-@@ -54,7 +54,7 @@
+@@ -64,7 +64,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME ARIA_CHECKPOINT_LOG_ACTIVITY
VARIABLE_SCOPE GLOBAL
@@ -25,7 +25,7 @@
VARIABLE_COMMENT Number of bytes that the transaction log has to grow between checkpoints before a new checkpoint is written to the log.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 4294967295
-@@ -74,7 +74,7 @@
+@@ -84,7 +84,7 @@
COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME ARIA_FORCE_START_AFTER_RECOVERY_FAILURES
VARIABLE_SCOPE GLOBAL
@@ -34,7 +34,7 @@
VARIABLE_COMMENT Number of consecutive log recovery failures after which logs will be automatically deleted to cure the problem; 0 (the default) disables the feature.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 255
-@@ -94,7 +94,7 @@
+@@ -104,7 +104,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME ARIA_GROUP_COMMIT_INTERVAL
VARIABLE_SCOPE GLOBAL
@@ -43,7 +43,7 @@
VARIABLE_COMMENT Interval between commits in microseconds (1/1000000 sec). 0 stands for no waiting for other threads to come and do a commit in "hard" mode and no sync()/commit at all in "soft" mode. Option has only an effect if aria_group_commit is used
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 4294967295
-@@ -104,7 +104,7 @@
+@@ -114,7 +114,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME ARIA_LOG_FILE_SIZE
VARIABLE_SCOPE GLOBAL
@@ -52,7 +52,7 @@
VARIABLE_COMMENT Limit for transaction log size
NUMERIC_MIN_VALUE 8388608
NUMERIC_MAX_VALUE 4294967295
-@@ -134,10 +134,10 @@
+@@ -144,10 +144,10 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME ARIA_PAGECACHE_AGE_THRESHOLD
VARIABLE_SCOPE GLOBAL
@@ -65,7 +65,7 @@
NUMERIC_BLOCK_SIZE 100
ENUM_VALUE_LIST NULL
READ_ONLY NO
-@@ -154,7 +154,7 @@
+@@ -164,7 +164,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME ARIA_PAGECACHE_DIVISION_LIMIT
VARIABLE_SCOPE GLOBAL
@@ -74,7 +74,7 @@
VARIABLE_COMMENT The minimum percentage of warm blocks in key cache
NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 100
-@@ -164,7 +164,7 @@
+@@ -174,7 +174,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME ARIA_PAGECACHE_FILE_HASH_SIZE
VARIABLE_SCOPE GLOBAL
@@ -83,7 +83,7 @@
VARIABLE_COMMENT Number of hash buckets for open and changed files. If you have a lot of Aria files open you should increase this for faster flush of changes. A good value is probably 1/10 of number of possible open Aria files.
NUMERIC_MIN_VALUE 128
NUMERIC_MAX_VALUE 16384
-@@ -194,7 +194,7 @@
+@@ -204,7 +204,7 @@
COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME ARIA_REPAIR_THREADS
VARIABLE_SCOPE SESSION
@@ -92,7 +92,7 @@
VARIABLE_COMMENT Number of threads to use when repairing Aria tables. The value of 1 disables parallel repair.
NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 128
-@@ -207,7 +207,7 @@
+@@ -217,7 +217,7 @@
VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT The buffer that is allocated when sorting the index when doing a REPAIR or when creating indexes with CREATE INDEX or ALTER TABLE.
NUMERIC_MIN_VALUE 4096
@@ -101,7 +101,7 @@
NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL
READ_ONLY NO
-@@ -264,7 +264,7 @@
+@@ -274,7 +274,7 @@
COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME AUTO_INCREMENT_INCREMENT
VARIABLE_SCOPE SESSION
@@ -110,7 +110,7 @@
VARIABLE_COMMENT Auto-increment columns are incremented by this
NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 65535
-@@ -274,7 +274,7 @@
+@@ -284,7 +284,7 @@
COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME AUTO_INCREMENT_OFFSET
VARIABLE_SCOPE SESSION
@@ -119,7 +119,7 @@
VARIABLE_COMMENT Offset added to Auto-increment columns. Used when auto-increment-increment != 1
NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 65535
-@@ -284,7 +284,7 @@
+@@ -294,7 +294,7 @@
COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME BACK_LOG
VARIABLE_SCOPE GLOBAL
@@ -128,7 +128,7 @@
VARIABLE_COMMENT The number of outstanding connection requests MariaDB can have. This comes into play when the main MariaDB thread gets very many connection requests in a very short time
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 65535
-@@ -337,7 +337,7 @@
+@@ -347,7 +347,7 @@
VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT The size of the transactional cache for updates to transactional engines for the binary log. If you often use transactions containing many statements, you can increase this to get more performance
NUMERIC_MIN_VALUE 4096
@@ -137,7 +137,7 @@
NUMERIC_BLOCK_SIZE 4096
ENUM_VALUE_LIST NULL
READ_ONLY NO
-@@ -354,20 +354,20 @@
+@@ -364,20 +364,20 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME BINLOG_COMMIT_WAIT_COUNT
VARIABLE_SCOPE GLOBAL
@@ -162,7 +162,7 @@
NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL
READ_ONLY NO
-@@ -384,7 +384,7 @@
+@@ -394,7 +394,7 @@
COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME BINLOG_EXPIRE_LOGS_SECONDS
VARIABLE_SCOPE GLOBAL
@@ -171,7 +171,7 @@
VARIABLE_COMMENT If non-zero, binary logs will be purged after binlog_expire_logs_seconds seconds; It and expire_logs_days are linked, such that changes in one are converted into the other. Possible purges happen at startup and at binary log rotation.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 8553600
-@@ -397,7 +397,7 @@
+@@ -407,7 +407,7 @@
VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT The size of file cache for the binary log
NUMERIC_MIN_VALUE 8192
@@ -180,7 +180,7 @@
NUMERIC_BLOCK_SIZE 4096
ENUM_VALUE_LIST NULL
READ_ONLY NO
-@@ -447,7 +447,7 @@
+@@ -457,7 +457,7 @@
VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT The size of the statement cache for updates to non-transactional engines for the binary log. If you often use statements updating a great number of rows, you can increase this to get more performance.
NUMERIC_MIN_VALUE 4096
@@ -189,7 +189,7 @@
NUMERIC_BLOCK_SIZE 4096
ENUM_VALUE_LIST NULL
READ_ONLY NO
-@@ -457,7 +457,7 @@
+@@ -467,7 +467,7 @@
VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT Size of tree cache used in bulk insert optimisation. Note that this is a limit per thread!
NUMERIC_MIN_VALUE 0
@@ -198,7 +198,7 @@
NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL
READ_ONLY NO
-@@ -644,7 +644,7 @@
+@@ -654,7 +654,7 @@
COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME CONNECT_TIMEOUT
VARIABLE_SCOPE GLOBAL
@@ -207,7 +207,7 @@
VARIABLE_COMMENT The number of seconds the mysqld server is waiting for a connect packet before responding with 'Bad handshake'
NUMERIC_MIN_VALUE 2
NUMERIC_MAX_VALUE 31536000
-@@ -694,7 +694,7 @@
+@@ -704,7 +704,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME DEADLOCK_SEARCH_DEPTH_LONG
VARIABLE_SCOPE SESSION
@@ -216,7 +216,7 @@
VARIABLE_COMMENT Long search depth for the two-step deadlock detection
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 33
-@@ -704,7 +704,7 @@
+@@ -714,7 +714,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME DEADLOCK_SEARCH_DEPTH_SHORT
VARIABLE_SCOPE SESSION
@@ -225,7 +225,7 @@
VARIABLE_COMMENT Short search depth for the two-step deadlock detection
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 32
-@@ -714,7 +714,7 @@
+@@ -724,7 +724,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME DEADLOCK_TIMEOUT_LONG
VARIABLE_SCOPE SESSION
@@ -234,7 +234,7 @@
VARIABLE_COMMENT Long timeout for the two-step deadlock detection (in microseconds)
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 4294967295
-@@ -724,7 +724,7 @@
+@@ -734,7 +734,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME DEADLOCK_TIMEOUT_SHORT
VARIABLE_SCOPE SESSION
@@ -243,7 +243,7 @@
VARIABLE_COMMENT Short timeout for the two-step deadlock detection (in microseconds)
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 4294967295
-@@ -774,7 +774,7 @@
+@@ -784,7 +784,7 @@
COMMAND_LINE_ARGUMENT NULL
VARIABLE_NAME DEFAULT_WEEK_FORMAT
VARIABLE_SCOPE SESSION
@@ -252,7 +252,7 @@
VARIABLE_COMMENT The default week format used by WEEK() functions
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 7
-@@ -784,7 +784,7 @@
+@@ -794,7 +794,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME DELAYED_INSERT_LIMIT
VARIABLE_SCOPE GLOBAL
@@ -261,7 +261,7 @@
VARIABLE_COMMENT After inserting delayed_insert_limit rows, the INSERT DELAYED handler will check if there are any SELECT statements pending. If so, it allows these to execute before continuing.
NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 4294967295
-@@ -794,7 +794,7 @@
+@@ -804,7 +804,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME DELAYED_INSERT_TIMEOUT
VARIABLE_SCOPE GLOBAL
@@ -270,7 +270,7 @@
VARIABLE_COMMENT How long a INSERT DELAYED thread should wait for INSERT statements before terminating
NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 31536000
-@@ -804,7 +804,7 @@
+@@ -814,7 +814,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME DELAYED_QUEUE_SIZE
VARIABLE_SCOPE GLOBAL
@@ -279,7 +279,7 @@
VARIABLE_COMMENT What size queue (in rows) should be allocated for handling INSERT DELAYED. If the queue becomes full, any client that does INSERT DELAYED will wait until there is room in the queue again
NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 4294967295
-@@ -834,7 +834,7 @@
+@@ -844,7 +844,7 @@
COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME DIV_PRECISION_INCREMENT
VARIABLE_SCOPE SESSION
@@ -288,7 +288,7 @@
VARIABLE_COMMENT Precision of the result of '/' operator will be increased on that value
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 38
-@@ -944,7 +944,7 @@
+@@ -954,7 +954,7 @@
COMMAND_LINE_ARGUMENT NULL
VARIABLE_NAME EXTRA_MAX_CONNECTIONS
VARIABLE_SCOPE GLOBAL
@@ -297,7 +297,7 @@
VARIABLE_COMMENT The number of connections on extra-port
NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 100000
-@@ -974,7 +974,7 @@
+@@ -984,7 +984,7 @@
COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME FLUSH_TIME
VARIABLE_SCOPE GLOBAL
@@ -306,7 +306,7 @@
VARIABLE_COMMENT A dedicated thread is created to flush all tables at the given interval
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 31536000
-@@ -1004,7 +1004,7 @@
+@@ -1014,7 +1014,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME FT_MAX_WORD_LEN
VARIABLE_SCOPE GLOBAL
@@ -315,7 +315,7 @@
VARIABLE_COMMENT The maximum length of the word to be included in a FULLTEXT index. Note: FULLTEXT indexes must be rebuilt after changing this variable
NUMERIC_MIN_VALUE 10
NUMERIC_MAX_VALUE 84
-@@ -1014,7 +1014,7 @@
+@@ -1024,7 +1024,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME FT_MIN_WORD_LEN
VARIABLE_SCOPE GLOBAL
@@ -324,7 +324,7 @@
VARIABLE_COMMENT The minimum length of the word to be included in a FULLTEXT index. Note: FULLTEXT indexes must be rebuilt after changing this variable
NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 84
-@@ -1024,7 +1024,7 @@
+@@ -1034,7 +1034,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME FT_QUERY_EXPANSION_LIMIT
VARIABLE_SCOPE GLOBAL
@@ -333,7 +333,7 @@
VARIABLE_COMMENT Number of best matches to use for query expansion
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 1000
-@@ -1194,7 +1194,7 @@
+@@ -1204,7 +1204,7 @@
COMMAND_LINE_ARGUMENT NULL
VARIABLE_NAME HISTOGRAM_SIZE
VARIABLE_SCOPE SESSION
@@ -342,7 +342,7 @@
VARIABLE_COMMENT Number of bytes used for a histogram. If set to 0, no histograms are created by ANALYZE.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 255
-@@ -1224,7 +1224,7 @@
+@@ -1234,7 +1234,7 @@
COMMAND_LINE_ARGUMENT NULL
VARIABLE_NAME HOST_CACHE_SIZE
VARIABLE_SCOPE GLOBAL
@@ -351,7 +351,7 @@
VARIABLE_COMMENT How many host names should be cached to avoid resolving.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 65536
-@@ -1334,7 +1334,7 @@
+@@ -1344,7 +1344,7 @@
COMMAND_LINE_ARGUMENT NULL
VARIABLE_NAME INTERACTIVE_TIMEOUT
VARIABLE_SCOPE SESSION
@@ -360,7 +360,7 @@
VARIABLE_COMMENT The number of seconds the server waits for activity on an interactive connection before closing it
NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 31536000
-@@ -1367,7 +1367,7 @@
+@@ -1377,7 +1377,7 @@
VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT The size of the buffer that is used for joins
NUMERIC_MIN_VALUE 128
@@ -369,7 +369,7 @@
NUMERIC_BLOCK_SIZE 128
ENUM_VALUE_LIST NULL
READ_ONLY NO
-@@ -1384,7 +1384,7 @@
+@@ -1394,7 +1394,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME JOIN_CACHE_LEVEL
VARIABLE_SCOPE SESSION
@@ -378,7 +378,7 @@
VARIABLE_COMMENT Controls what join operations can be executed with join buffers. Odd numbers are used for plain join buffers while even numbers are used for linked buffers
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 8
-@@ -1407,7 +1407,7 @@
+@@ -1417,7 +1417,7 @@
VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT The size of the buffer used for index blocks for MyISAM tables. Increase this to get better index handling (for all reads and multiple writes) to as much as you can afford
NUMERIC_MIN_VALUE 0
@@ -387,7 +387,7 @@
NUMERIC_BLOCK_SIZE 4096
ENUM_VALUE_LIST NULL
READ_ONLY NO
-@@ -1564,7 +1564,7 @@
+@@ -1574,7 +1574,7 @@
COMMAND_LINE_ARGUMENT NULL
VARIABLE_NAME LOCK_WAIT_TIMEOUT
VARIABLE_SCOPE SESSION
@@ -396,7 +396,7 @@
VARIABLE_COMMENT Timeout in seconds to wait for a lock before returning an error.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 31536000
-@@ -1684,7 +1684,7 @@
+@@ -1694,7 +1694,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME LOG_SLOW_RATE_LIMIT
VARIABLE_SCOPE SESSION
@@ -405,7 +405,7 @@
VARIABLE_COMMENT Write to slow log every #th slow query. Set to 1 to log everything. Increase it to reduce the size of the slow or the performance impact of slow logging
NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 4294967295
-@@ -1714,7 +1714,7 @@
+@@ -1724,7 +1724,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME LOG_WARNINGS
VARIABLE_SCOPE SESSION
@@ -414,7 +414,7 @@
VARIABLE_COMMENT Log some not critical warnings to the general log file.Value can be between 0 and 11. Higher values mean more verbosity
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 4294967295
-@@ -1764,7 +1764,7 @@
+@@ -1774,7 +1774,7 @@
COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME MAX_ALLOWED_PACKET
VARIABLE_SCOPE SESSION
@@ -423,7 +423,7 @@
VARIABLE_COMMENT Max packet length to send to or receive from the server
NUMERIC_MIN_VALUE 1024
NUMERIC_MAX_VALUE 1073741824
-@@ -1777,14 +1777,14 @@
+@@ -1787,14 +1787,14 @@
VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT Sets the total size of the transactional cache
NUMERIC_MIN_VALUE 4096
@@ -440,7 +440,7 @@
VARIABLE_COMMENT Binary log will be rotated automatically when the size exceeds this value.
NUMERIC_MIN_VALUE 4096
NUMERIC_MAX_VALUE 1073741824
-@@ -1797,14 +1797,14 @@
+@@ -1807,14 +1807,14 @@
VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT Sets the total size of the statement cache
NUMERIC_MIN_VALUE 4096
@@ -457,7 +457,7 @@
VARIABLE_COMMENT The number of simultaneous clients allowed
NUMERIC_MIN_VALUE 10
NUMERIC_MAX_VALUE 100000
-@@ -1814,7 +1814,7 @@
+@@ -1824,7 +1824,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME MAX_CONNECT_ERRORS
VARIABLE_SCOPE GLOBAL
@@ -466,7 +466,7 @@
VARIABLE_COMMENT If there is more than this number of interrupted connections from a host this host will be blocked from further connections
NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 4294967295
-@@ -1824,7 +1824,7 @@
+@@ -1834,7 +1834,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME MAX_DELAYED_THREADS
VARIABLE_SCOPE SESSION
@@ -475,7 +475,7 @@
VARIABLE_COMMENT Don't start more than this number of threads to handle INSERT DELAYED statements. If set to zero INSERT DELAYED will be not used
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 16384
-@@ -1844,7 +1844,7 @@
+@@ -1854,7 +1854,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME MAX_ERROR_COUNT
VARIABLE_SCOPE SESSION
@@ -484,7 +484,7 @@
VARIABLE_COMMENT Max number of errors/warnings to store for a statement
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 65535
-@@ -1857,14 +1857,14 @@
+@@ -1867,14 +1867,14 @@
VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT Don't allow creation of heap tables bigger than this
NUMERIC_MIN_VALUE 16384
@@ -501,7 +501,7 @@
VARIABLE_COMMENT Don't start more than this number of threads to handle INSERT DELAYED statements. If set to zero INSERT DELAYED will be not used
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 16384
-@@ -1884,7 +1884,7 @@
+@@ -1894,7 +1894,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME MAX_LENGTH_FOR_SORT_DATA
VARIABLE_SCOPE SESSION
@@ -510,7 +510,7 @@
VARIABLE_COMMENT Max number of bytes in sorted records
NUMERIC_MIN_VALUE 4
NUMERIC_MAX_VALUE 8388608
-@@ -1914,7 +1914,7 @@
+@@ -1924,7 +1924,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME MAX_RECURSIVE_ITERATIONS
VARIABLE_SCOPE SESSION
@@ -519,7 +519,7 @@
VARIABLE_COMMENT Maximum number of iterations when executing recursive queries
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 4294967295
-@@ -1927,14 +1927,14 @@
+@@ -1937,14 +1937,14 @@
VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT The maximum size of the container of a rowid filter
NUMERIC_MIN_VALUE 1024
@@ -536,7 +536,7 @@
VARIABLE_COMMENT Limit assumed max number of seeks when looking up rows based on a key
NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 4294967295
-@@ -1954,7 +1954,7 @@
+@@ -1964,7 +1964,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME MAX_SORT_LENGTH
VARIABLE_SCOPE SESSION
@@ -545,7 +545,7 @@
VARIABLE_COMMENT The number of bytes to use when sorting BLOB or TEXT values (only the first max_sort_length bytes of each value are used; the rest are ignored)
NUMERIC_MIN_VALUE 64
NUMERIC_MAX_VALUE 8388608
-@@ -1964,7 +1964,7 @@
+@@ -1974,7 +1974,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME MAX_SP_RECURSION_DEPTH
VARIABLE_SCOPE SESSION
@@ -554,7 +554,7 @@
VARIABLE_COMMENT Maximum stored procedure recursion depth
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 255
-@@ -1984,7 +1984,7 @@
+@@ -1994,7 +1994,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME MAX_TMP_TABLES
VARIABLE_SCOPE SESSION
@@ -563,7 +563,7 @@
VARIABLE_COMMENT Unused, will be removed.
NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 4294967295
-@@ -2004,7 +2004,7 @@
+@@ -2014,7 +2014,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME MAX_WRITE_LOCK_COUNT
VARIABLE_SCOPE GLOBAL
@@ -572,7 +572,7 @@
VARIABLE_COMMENT After this many write locks, allow some read locks to run in between
NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 4294967295
-@@ -2014,7 +2014,7 @@
+@@ -2024,7 +2024,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME METADATA_LOCKS_CACHE_SIZE
VARIABLE_SCOPE GLOBAL
@@ -581,7 +581,7 @@
VARIABLE_COMMENT Unused
NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 1048576
-@@ -2024,7 +2024,7 @@
+@@ -2034,7 +2034,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME METADATA_LOCKS_HASH_INSTANCES
VARIABLE_SCOPE GLOBAL
@@ -590,7 +590,7 @@
VARIABLE_COMMENT Unused
NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 1024
-@@ -2034,7 +2034,7 @@
+@@ -2044,7 +2044,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME MIN_EXAMINED_ROW_LIMIT
VARIABLE_SCOPE SESSION
@@ -599,7 +599,7 @@
VARIABLE_COMMENT Don't write queries to slow log that examine fewer rows than that
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 4294967295
-@@ -2044,7 +2044,7 @@
+@@ -2054,7 +2054,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME MRR_BUFFER_SIZE
VARIABLE_SCOPE SESSION
@@ -608,7 +608,7 @@
VARIABLE_COMMENT Size of buffer to use when using MRR with range access
NUMERIC_MIN_VALUE 8192
NUMERIC_MAX_VALUE 2147483647
-@@ -2054,7 +2054,7 @@
+@@ -2064,7 +2064,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME MYISAM_BLOCK_SIZE
VARIABLE_SCOPE GLOBAL
@@ -617,7 +617,7 @@
VARIABLE_COMMENT Block size to be used for MyISAM index pages
NUMERIC_MIN_VALUE 1024
NUMERIC_MAX_VALUE 16384
-@@ -2064,7 +2064,7 @@
+@@ -2074,7 +2074,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME MYISAM_DATA_POINTER_SIZE
VARIABLE_SCOPE GLOBAL
@@ -626,7 +626,7 @@
VARIABLE_COMMENT Default pointer size to be used for MyISAM tables
NUMERIC_MIN_VALUE 2
NUMERIC_MAX_VALUE 7
-@@ -2087,7 +2087,7 @@
+@@ -2097,7 +2097,7 @@
VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT Restricts the total memory used for memory mapping of MySQL tables
NUMERIC_MIN_VALUE 7
@@ -635,7 +635,7 @@
NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL
READ_ONLY YES
-@@ -2104,10 +2104,10 @@
+@@ -2114,10 +2114,10 @@
COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME MYISAM_REPAIR_THREADS
VARIABLE_SCOPE SESSION
@@ -648,7 +648,7 @@
NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL
READ_ONLY NO
-@@ -2117,7 +2117,7 @@
+@@ -2127,7 +2127,7 @@
VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT The buffer that is allocated when sorting the index when doing a REPAIR or when creating indexes with CREATE INDEX or ALTER TABLE
NUMERIC_MIN_VALUE 4096
@@ -657,7 +657,7 @@
NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL
READ_ONLY NO
-@@ -2154,7 +2154,7 @@
+@@ -2164,7 +2164,7 @@
COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME NET_BUFFER_LENGTH
VARIABLE_SCOPE SESSION
@@ -666,7 +666,7 @@
VARIABLE_COMMENT Buffer length for TCP/IP and socket communication
NUMERIC_MIN_VALUE 1024
NUMERIC_MAX_VALUE 1048576
-@@ -2164,7 +2164,7 @@
+@@ -2174,7 +2174,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME NET_READ_TIMEOUT
VARIABLE_SCOPE SESSION
@@ -675,7 +675,7 @@
VARIABLE_COMMENT Number of seconds to wait for more data from a connection before aborting the read
NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 31536000
-@@ -2174,7 +2174,7 @@
+@@ -2184,7 +2184,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME NET_RETRY_COUNT
VARIABLE_SCOPE SESSION
@@ -684,7 +684,7 @@
VARIABLE_COMMENT If a read on a communication port is interrupted, retry this many times before giving up
NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 4294967295
-@@ -2184,7 +2184,7 @@
+@@ -2194,7 +2194,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME NET_WRITE_TIMEOUT
VARIABLE_SCOPE SESSION
@@ -693,7 +693,7 @@
VARIABLE_COMMENT Number of seconds to wait for a block to be written to a connection before aborting the write
NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 31536000
-@@ -2234,7 +2234,7 @@
+@@ -2244,7 +2244,7 @@
COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME OPEN_FILES_LIMIT
VARIABLE_SCOPE GLOBAL
@@ -702,7 +702,16 @@
VARIABLE_COMMENT If this is not 0, then mysqld will use this value to reserve file descriptors to use with setrlimit(). If this value is 0 or autoset then mysqld will reserve max_connections*5 or max_connections + table_cache*2 (whichever is larger) number of file descriptors
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 4294967295
-@@ -2244,17 +2244,17 @@
+@@ -2254,7 +2254,7 @@
+ COMMAND_LINE_ARGUMENT REQUIRED
+ VARIABLE_NAME OPTIMIZER_EXTRA_PRUNING_DEPTH
+ VARIABLE_SCOPE SESSION
+-VARIABLE_TYPE BIGINT UNSIGNED
++VARIABLE_TYPE INT UNSIGNED
+ VARIABLE_COMMENT If the optimizer needs to enumerate join prefix of this size or larger, then it will try agressively prune away the search space.
+ NUMERIC_MIN_VALUE 0
+ NUMERIC_MAX_VALUE 62
+@@ -2264,17 +2264,17 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME OPTIMIZER_MAX_SEL_ARG_WEIGHT
VARIABLE_SCOPE SESSION
@@ -720,10 +729,10 @@
VARIABLE_SCOPE SESSION
-VARIABLE_TYPE BIGINT UNSIGNED
+VARIABLE_TYPE INT UNSIGNED
- VARIABLE_COMMENT Controls the heuristic(s) applied during query optimization to prune less-promising partial plans from the optimizer search space. Meaning: 0 - do not apply any heuristic, thus perform exhaustive search; 1 - prune plans based on number of retrieved rows
+ VARIABLE_COMMENT Controls the heuristic(s) applied during query optimization to prune less-promising partial plans from the optimizer search space. Meaning: 0 - do not apply any heuristic, thus perform exhaustive search: 1 - prune plans based on cost and number of retrieved rows eq_ref: 2 - prune also if we find an eq_ref chain
NUMERIC_MIN_VALUE 0
- NUMERIC_MAX_VALUE 1
-@@ -2264,7 +2264,7 @@
+ NUMERIC_MAX_VALUE 2
+@@ -2284,7 +2284,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME OPTIMIZER_SEARCH_DEPTH
VARIABLE_SCOPE SESSION
@@ -732,7 +741,7 @@
VARIABLE_COMMENT Maximum depth of search performed by the query optimizer. Values larger than the number of relations in a query result in better query plans, but take longer to compile a query. Values smaller than the number of tables in a relation result in faster optimization, but may produce very bad query plans. If set to 0, the system will automatically pick a reasonable value.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 62
-@@ -2274,7 +2274,7 @@
+@@ -2294,7 +2294,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME OPTIMIZER_SELECTIVITY_SAMPLING_LIMIT
VARIABLE_SCOPE SESSION
@@ -741,7 +750,7 @@
VARIABLE_COMMENT Controls number of record samples to check condition selectivity
NUMERIC_MIN_VALUE 10
NUMERIC_MAX_VALUE 4294967295
-@@ -2304,17 +2304,17 @@
+@@ -2324,17 +2324,17 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME OPTIMIZER_TRACE_MAX_MEM_SIZE
VARIABLE_SCOPE SESSION
@@ -762,7 +771,7 @@
VARIABLE_COMMENT Controls selectivity of which conditions the optimizer takes into account to calculate cardinality of a partial join when it searches for the best execution plan Meaning: 1 - use selectivity of index backed range conditions to calculate the cardinality of a partial join if the last joined table is accessed by full table scan or an index scan, 2 - use selectivity of index backed range conditions to calculate the cardinality of a partial join in any case, 3 - additionally always use selectivity of range conditions that are not backed by any index to calculate the cardinality of a partial join, 4 - use histograms to calculate selectivity of range conditions that are not backed by any index to calculate the cardinality of a partial join.5 - additionally use selectivity of certain non-range predicates calculated on record samples
NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 5
-@@ -2334,7 +2334,7 @@
+@@ -2354,7 +2354,7 @@
COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME PERFORMANCE_SCHEMA_ACCOUNTS_SIZE
VARIABLE_SCOPE GLOBAL
@@ -771,7 +780,7 @@
VARIABLE_COMMENT Maximum number of instrumented user@host accounts. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576
-@@ -2344,7 +2344,7 @@
+@@ -2364,7 +2364,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_DIGESTS_SIZE
VARIABLE_SCOPE GLOBAL
@@ -780,7 +789,7 @@
VARIABLE_COMMENT Size of the statement digest. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576
-@@ -2354,7 +2354,7 @@
+@@ -2374,7 +2374,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_STAGES_HISTORY_LONG_SIZE
VARIABLE_SCOPE GLOBAL
@@ -789,7 +798,7 @@
VARIABLE_COMMENT Number of rows in EVENTS_STAGES_HISTORY_LONG. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576
-@@ -2364,7 +2364,7 @@
+@@ -2384,7 +2384,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_STAGES_HISTORY_SIZE
VARIABLE_SCOPE GLOBAL
@@ -798,7 +807,7 @@
VARIABLE_COMMENT Number of rows per thread in EVENTS_STAGES_HISTORY. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1024
-@@ -2374,7 +2374,7 @@
+@@ -2394,7 +2394,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_STATEMENTS_HISTORY_LONG_SIZE
VARIABLE_SCOPE GLOBAL
@@ -807,7 +816,7 @@
VARIABLE_COMMENT Number of rows in EVENTS_STATEMENTS_HISTORY_LONG. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576
-@@ -2384,7 +2384,7 @@
+@@ -2404,7 +2404,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_STATEMENTS_HISTORY_SIZE
VARIABLE_SCOPE GLOBAL
@@ -816,7 +825,7 @@
VARIABLE_COMMENT Number of rows per thread in EVENTS_STATEMENTS_HISTORY. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1024
-@@ -2394,7 +2394,7 @@
+@@ -2414,7 +2414,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_TRANSACTIONS_HISTORY_LONG_SIZE
VARIABLE_SCOPE GLOBAL
@@ -825,7 +834,7 @@
VARIABLE_COMMENT Number of rows in EVENTS_TRANSACTIONS_HISTORY_LONG. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576
-@@ -2404,7 +2404,7 @@
+@@ -2424,7 +2424,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_TRANSACTIONS_HISTORY_SIZE
VARIABLE_SCOPE GLOBAL
@@ -834,7 +843,7 @@
VARIABLE_COMMENT Number of rows per thread in EVENTS_TRANSACTIONS_HISTORY. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1024
-@@ -2414,7 +2414,7 @@
+@@ -2434,7 +2434,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_WAITS_HISTORY_LONG_SIZE
VARIABLE_SCOPE GLOBAL
@@ -843,7 +852,7 @@
VARIABLE_COMMENT Number of rows in EVENTS_WAITS_HISTORY_LONG. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576
-@@ -2424,7 +2424,7 @@
+@@ -2444,7 +2444,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_WAITS_HISTORY_SIZE
VARIABLE_SCOPE GLOBAL
@@ -852,7 +861,7 @@
VARIABLE_COMMENT Number of rows per thread in EVENTS_WAITS_HISTORY. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1024
-@@ -2434,7 +2434,7 @@
+@@ -2454,7 +2454,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_HOSTS_SIZE
VARIABLE_SCOPE GLOBAL
@@ -861,7 +870,7 @@
VARIABLE_COMMENT Maximum number of instrumented hosts. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576
-@@ -2444,7 +2444,7 @@
+@@ -2464,7 +2464,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_COND_CLASSES
VARIABLE_SCOPE GLOBAL
@@ -870,7 +879,7 @@
VARIABLE_COMMENT Maximum number of condition instruments.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 256
-@@ -2454,7 +2454,7 @@
+@@ -2474,7 +2474,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_COND_INSTANCES
VARIABLE_SCOPE GLOBAL
@@ -879,7 +888,7 @@
VARIABLE_COMMENT Maximum number of instrumented condition objects. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576
-@@ -2464,7 +2464,7 @@
+@@ -2484,7 +2484,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_DIGEST_LENGTH
VARIABLE_SCOPE GLOBAL
@@ -888,7 +897,7 @@
VARIABLE_COMMENT Maximum length considered for digest text, when stored in performance_schema tables.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 1048576
-@@ -2474,7 +2474,7 @@
+@@ -2494,7 +2494,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_FILE_CLASSES
VARIABLE_SCOPE GLOBAL
@@ -897,7 +906,7 @@
VARIABLE_COMMENT Maximum number of file instruments.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 256
-@@ -2484,7 +2484,7 @@
+@@ -2504,7 +2504,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_FILE_HANDLES
VARIABLE_SCOPE GLOBAL
@@ -906,7 +915,7 @@
VARIABLE_COMMENT Maximum number of opened instrumented files.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 1048576
-@@ -2494,7 +2494,7 @@
+@@ -2514,7 +2514,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_FILE_INSTANCES
VARIABLE_SCOPE GLOBAL
@@ -915,7 +924,7 @@
VARIABLE_COMMENT Maximum number of instrumented files. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576
-@@ -2504,7 +2504,7 @@
+@@ -2524,7 +2524,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_INDEX_STAT
VARIABLE_SCOPE GLOBAL
@@ -924,7 +933,7 @@
VARIABLE_COMMENT Maximum number of index statistics for instrumented tables. Use 0 to disable, -1 for automated scaling.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576
-@@ -2514,7 +2514,7 @@
+@@ -2534,7 +2534,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_MEMORY_CLASSES
VARIABLE_SCOPE GLOBAL
@@ -933,7 +942,7 @@
VARIABLE_COMMENT Maximum number of memory pool instruments.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 1024
-@@ -2524,7 +2524,7 @@
+@@ -2544,7 +2544,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_METADATA_LOCKS
VARIABLE_SCOPE GLOBAL
@@ -942,7 +951,7 @@
VARIABLE_COMMENT Maximum number of metadata locks. Use 0 to disable, -1 for automated scaling.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 104857600
-@@ -2534,7 +2534,7 @@
+@@ -2554,7 +2554,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_MUTEX_CLASSES
VARIABLE_SCOPE GLOBAL
@@ -951,7 +960,7 @@
VARIABLE_COMMENT Maximum number of mutex instruments.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 256
-@@ -2544,7 +2544,7 @@
+@@ -2564,7 +2564,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_MUTEX_INSTANCES
VARIABLE_SCOPE GLOBAL
@@ -960,7 +969,7 @@
VARIABLE_COMMENT Maximum number of instrumented MUTEX objects. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 104857600
-@@ -2554,7 +2554,7 @@
+@@ -2574,7 +2574,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_PREPARED_STATEMENTS_INSTANCES
VARIABLE_SCOPE GLOBAL
@@ -969,7 +978,7 @@
VARIABLE_COMMENT Maximum number of instrumented prepared statements. Use 0 to disable, -1 for automated scaling.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576
-@@ -2564,7 +2564,7 @@
+@@ -2584,7 +2584,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_PROGRAM_INSTANCES
VARIABLE_SCOPE GLOBAL
@@ -978,7 +987,7 @@
VARIABLE_COMMENT Maximum number of instrumented programs. Use 0 to disable, -1 for automated scaling.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576
-@@ -2574,7 +2574,7 @@
+@@ -2594,7 +2594,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_RWLOCK_CLASSES
VARIABLE_SCOPE GLOBAL
@@ -987,7 +996,7 @@
VARIABLE_COMMENT Maximum number of rwlock instruments.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 256
-@@ -2584,7 +2584,7 @@
+@@ -2604,7 +2604,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_RWLOCK_INSTANCES
VARIABLE_SCOPE GLOBAL
@@ -996,7 +1005,7 @@
VARIABLE_COMMENT Maximum number of instrumented RWLOCK objects. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 104857600
-@@ -2594,7 +2594,7 @@
+@@ -2614,7 +2614,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_SOCKET_CLASSES
VARIABLE_SCOPE GLOBAL
@@ -1005,7 +1014,7 @@
VARIABLE_COMMENT Maximum number of socket instruments.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 256
-@@ -2604,7 +2604,7 @@
+@@ -2624,7 +2624,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_SOCKET_INSTANCES
VARIABLE_SCOPE GLOBAL
@@ -1014,7 +1023,7 @@
VARIABLE_COMMENT Maximum number of opened instrumented sockets. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576
-@@ -2614,7 +2614,7 @@
+@@ -2634,7 +2634,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_SQL_TEXT_LENGTH
VARIABLE_SCOPE GLOBAL
@@ -1023,7 +1032,7 @@
VARIABLE_COMMENT Maximum length of displayed sql text.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 1048576
-@@ -2624,7 +2624,7 @@
+@@ -2644,7 +2644,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_STAGE_CLASSES
VARIABLE_SCOPE GLOBAL
@@ -1032,7 +1041,7 @@
VARIABLE_COMMENT Maximum number of stage instruments.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 256
-@@ -2634,7 +2634,7 @@
+@@ -2654,7 +2654,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_STATEMENT_CLASSES
VARIABLE_SCOPE GLOBAL
@@ -1041,7 +1050,7 @@
VARIABLE_COMMENT Maximum number of statement instruments.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 256
-@@ -2644,7 +2644,7 @@
+@@ -2664,7 +2664,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_STATEMENT_STACK
VARIABLE_SCOPE GLOBAL
@@ -1050,7 +1059,7 @@
VARIABLE_COMMENT Number of rows per thread in EVENTS_STATEMENTS_CURRENT.
NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 256
-@@ -2654,7 +2654,7 @@
+@@ -2674,7 +2674,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_TABLE_HANDLES
VARIABLE_SCOPE GLOBAL
@@ -1059,7 +1068,7 @@
VARIABLE_COMMENT Maximum number of opened instrumented tables. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576
-@@ -2664,7 +2664,7 @@
+@@ -2684,7 +2684,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_TABLE_INSTANCES
VARIABLE_SCOPE GLOBAL
@@ -1068,7 +1077,7 @@
VARIABLE_COMMENT Maximum number of instrumented tables. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576
-@@ -2674,7 +2674,7 @@
+@@ -2694,7 +2694,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_TABLE_LOCK_STAT
VARIABLE_SCOPE GLOBAL
@@ -1077,7 +1086,7 @@
VARIABLE_COMMENT Maximum number of lock statistics for instrumented tables. Use 0 to disable, -1 for automated scaling.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576
-@@ -2684,7 +2684,7 @@
+@@ -2704,7 +2704,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_THREAD_CLASSES
VARIABLE_SCOPE GLOBAL
@@ -1086,7 +1095,7 @@
VARIABLE_COMMENT Maximum number of thread instruments.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 256
-@@ -2694,7 +2694,7 @@
+@@ -2714,7 +2714,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_THREAD_INSTANCES
VARIABLE_SCOPE GLOBAL
@@ -1095,7 +1104,7 @@
VARIABLE_COMMENT Maximum number of instrumented threads. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576
-@@ -2704,7 +2704,7 @@
+@@ -2724,7 +2724,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_SESSION_CONNECT_ATTRS_SIZE
VARIABLE_SCOPE GLOBAL
@@ -1104,7 +1113,7 @@
VARIABLE_COMMENT Size of session attribute string buffer per thread. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576
-@@ -2714,7 +2714,7 @@
+@@ -2734,7 +2734,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_SETUP_ACTORS_SIZE
VARIABLE_SCOPE GLOBAL
@@ -1113,7 +1122,7 @@
VARIABLE_COMMENT Maximum number of rows in SETUP_ACTORS.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1024
-@@ -2724,7 +2724,7 @@
+@@ -2744,7 +2744,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_SETUP_OBJECTS_SIZE
VARIABLE_SCOPE GLOBAL
@@ -1122,7 +1131,7 @@
VARIABLE_COMMENT Maximum number of rows in SETUP_OBJECTS.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576
-@@ -2734,7 +2734,7 @@
+@@ -2754,7 +2754,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_USERS_SIZE
VARIABLE_SCOPE GLOBAL
@@ -1131,7 +1140,7 @@
VARIABLE_COMMENT Maximum number of instrumented users. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576
-@@ -2784,7 +2784,7 @@
+@@ -2804,7 +2804,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PRELOAD_BUFFER_SIZE
VARIABLE_SCOPE SESSION
@@ -1140,7 +1149,7 @@
VARIABLE_COMMENT The size of the buffer that is allocated when preloading indexes
NUMERIC_MIN_VALUE 1024
NUMERIC_MAX_VALUE 1073741824
-@@ -2804,7 +2804,7 @@
+@@ -2824,7 +2824,7 @@
COMMAND_LINE_ARGUMENT NULL
VARIABLE_NAME PROFILING_HISTORY_SIZE
VARIABLE_SCOPE SESSION
@@ -1149,7 +1158,7 @@
VARIABLE_COMMENT Number of statements about which profiling information is maintained. If set to 0, no profiles are stored. See SHOW PROFILES.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 100
-@@ -2814,7 +2814,7 @@
+@@ -2834,7 +2834,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PROGRESS_REPORT_TIME
VARIABLE_SCOPE SESSION
@@ -1158,7 +1167,7 @@
VARIABLE_COMMENT Seconds between sending progress reports to the client for time-consuming statements. Set to 0 to disable progress reporting.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 4294967295
-@@ -2874,7 +2874,7 @@
+@@ -2894,7 +2894,7 @@
COMMAND_LINE_ARGUMENT NULL
VARIABLE_NAME QUERY_ALLOC_BLOCK_SIZE
VARIABLE_SCOPE SESSION
@@ -1167,7 +1176,7 @@
VARIABLE_COMMENT Allocation block size for query parsing and execution
NUMERIC_MIN_VALUE 1024
NUMERIC_MAX_VALUE 4294967295
-@@ -2884,7 +2884,7 @@
+@@ -2904,7 +2904,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME QUERY_CACHE_LIMIT
VARIABLE_SCOPE GLOBAL
@@ -1176,7 +1185,7 @@
VARIABLE_COMMENT Don't cache results that are bigger than this
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 4294967295
-@@ -2894,7 +2894,7 @@
+@@ -2914,7 +2914,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME QUERY_CACHE_MIN_RES_UNIT
VARIABLE_SCOPE GLOBAL
@@ -1185,7 +1194,7 @@
VARIABLE_COMMENT The minimum size for blocks allocated by the query cache
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 4294967295
-@@ -2907,7 +2907,7 @@
+@@ -2927,7 +2927,7 @@
VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT The memory allocated to store results from old queries
NUMERIC_MIN_VALUE 0
@@ -1194,7 +1203,7 @@
NUMERIC_BLOCK_SIZE 1024
ENUM_VALUE_LIST NULL
READ_ONLY NO
-@@ -2944,7 +2944,7 @@
+@@ -2964,7 +2964,7 @@
COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME QUERY_PREALLOC_SIZE
VARIABLE_SCOPE SESSION
@@ -1203,7 +1212,7 @@
VARIABLE_COMMENT Persistent buffer for query parsing and execution
NUMERIC_MIN_VALUE 1024
NUMERIC_MAX_VALUE 4294967295
-@@ -2957,7 +2957,7 @@
+@@ -2977,7 +2977,7 @@
VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT Sets the internal state of the RAND() generator for replication purposes
NUMERIC_MIN_VALUE 0
@@ -1212,7 +1221,7 @@
NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL
READ_ONLY NO
-@@ -2967,14 +2967,14 @@
+@@ -2987,14 +2987,14 @@
VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT Sets the internal state of the RAND() generator for replication purposes
NUMERIC_MIN_VALUE 0
@@ -1229,7 +1238,7 @@
VARIABLE_COMMENT Allocation block size for storing ranges during optimization
NUMERIC_MIN_VALUE 4096
NUMERIC_MAX_VALUE 4294967295
-@@ -2984,7 +2984,7 @@
+@@ -3004,7 +3004,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME READ_BUFFER_SIZE
VARIABLE_SCOPE SESSION
@@ -1238,7 +1247,7 @@
VARIABLE_COMMENT Each thread that does a sequential scan allocates a buffer of this size for each table it scans. If you do many sequential scans, you may want to increase this value
NUMERIC_MIN_VALUE 8192
NUMERIC_MAX_VALUE 2147483647
-@@ -3004,7 +3004,7 @@
+@@ -3024,7 +3024,7 @@
COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME READ_RND_BUFFER_SIZE
VARIABLE_SCOPE SESSION
@@ -1247,7 +1256,7 @@
VARIABLE_COMMENT When reading rows in sorted order after a sort, the rows are read through this buffer to avoid a disk seeks
NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 2147483647
-@@ -3024,10 +3024,10 @@
+@@ -3044,10 +3044,10 @@
COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME ROWID_MERGE_BUFF_SIZE
VARIABLE_SCOPE SESSION
@@ -1260,7 +1269,7 @@
NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL
READ_ONLY NO
-@@ -3064,7 +3064,7 @@
+@@ -3084,7 +3084,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME SERVER_ID
VARIABLE_SCOPE SESSION
@@ -1269,7 +1278,7 @@
VARIABLE_COMMENT Uniquely identifies the server instance in the community of replication partners
NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 4294967295
-@@ -3134,7 +3134,7 @@
+@@ -3164,7 +3164,7 @@
COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME SLAVE_MAX_ALLOWED_PACKET
VARIABLE_SCOPE GLOBAL
@@ -1278,7 +1287,7 @@
VARIABLE_COMMENT The maximum packet length to sent successfully from the master to slave.
NUMERIC_MIN_VALUE 1024
NUMERIC_MAX_VALUE 1073741824
-@@ -3144,7 +3144,7 @@
+@@ -3174,7 +3174,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME SLOW_LAUNCH_TIME
VARIABLE_SCOPE GLOBAL
@@ -1287,7 +1296,7 @@
VARIABLE_COMMENT If creating the thread takes longer than this value (in seconds), the Slow_launch_threads counter will be incremented
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 31536000
-@@ -3187,7 +3187,7 @@
+@@ -3217,7 +3217,7 @@
VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT Each thread that needs to do a sort allocates a buffer of this size
NUMERIC_MIN_VALUE 1024
@@ -1296,7 +1305,7 @@
NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL
READ_ONLY NO
-@@ -3404,7 +3404,7 @@
+@@ -3434,7 +3434,7 @@
COMMAND_LINE_ARGUMENT NULL
VARIABLE_NAME STORED_PROGRAM_CACHE
VARIABLE_SCOPE GLOBAL
@@ -1305,7 +1314,7 @@
VARIABLE_COMMENT The soft upper limit for number of cached stored routines for one connection.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 524288
-@@ -3484,7 +3484,7 @@
+@@ -3514,7 +3514,7 @@
COMMAND_LINE_ARGUMENT NULL
VARIABLE_NAME TABLE_DEFINITION_CACHE
VARIABLE_SCOPE GLOBAL
@@ -1314,7 +1323,7 @@
VARIABLE_COMMENT The number of cached table definitions
NUMERIC_MIN_VALUE 400
NUMERIC_MAX_VALUE 2097152
-@@ -3494,7 +3494,7 @@
+@@ -3524,7 +3524,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME TABLE_OPEN_CACHE
VARIABLE_SCOPE GLOBAL
@@ -1323,7 +1332,7 @@
VARIABLE_COMMENT The number of cached open tables
NUMERIC_MIN_VALUE 10
NUMERIC_MAX_VALUE 1048576
-@@ -3554,7 +3554,7 @@
+@@ -3584,7 +3584,7 @@
COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME THREAD_CACHE_SIZE
VARIABLE_SCOPE GLOBAL
@@ -1332,7 +1341,7 @@
VARIABLE_COMMENT How many threads we should keep in a cache for reuse. These are freed after 5 minutes of idle time
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 16384
-@@ -3637,7 +3637,7 @@
+@@ -3667,7 +3667,7 @@
VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT Max size for data for an internal temporary on-disk MyISAM or Aria table.
NUMERIC_MIN_VALUE 1024
@@ -1341,7 +1350,7 @@
NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL
READ_ONLY NO
-@@ -3647,7 +3647,7 @@
+@@ -3677,7 +3677,7 @@
VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT If an internal in-memory temporary table exceeds this size, MariaDB will automatically convert it to an on-disk MyISAM or Aria table. Same as tmp_table_size.
NUMERIC_MIN_VALUE 0
@@ -1350,7 +1359,7 @@
NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL
READ_ONLY NO
-@@ -3657,14 +3657,14 @@
+@@ -3687,14 +3687,14 @@
VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT Alias for tmp_memory_table_size. If an internal in-memory temporary table exceeds this size, MariaDB will automatically convert it to an on-disk MyISAM or Aria table.
NUMERIC_MIN_VALUE 0
@@ -1367,7 +1376,7 @@
VARIABLE_COMMENT Allocation block size for transactions to be stored in binary log
NUMERIC_MIN_VALUE 1024
NUMERIC_MAX_VALUE 134217728
-@@ -3674,7 +3674,7 @@
+@@ -3704,7 +3704,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME TRANSACTION_PREALLOC_SIZE
VARIABLE_SCOPE SESSION
@@ -1376,7 +1385,7 @@
VARIABLE_COMMENT Persistent buffer for transactions to be stored in binary log
NUMERIC_MIN_VALUE 1024
NUMERIC_MAX_VALUE 134217728
-@@ -3814,7 +3814,7 @@
+@@ -3844,7 +3844,7 @@
COMMAND_LINE_ARGUMENT NULL
VARIABLE_NAME WAIT_TIMEOUT
VARIABLE_SCOPE SESSION
@@ -1385,7 +1394,7 @@
VARIABLE_COMMENT The number of seconds the server waits for activity on a connection before closing it
NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 31536000
-@@ -3841,7 +3841,7 @@
+@@ -3871,7 +3871,7 @@
VARIABLE_NAME LOG_TC_SIZE
GLOBAL_VALUE_ORIGIN AUTO
VARIABLE_SCOPE GLOBAL
diff --git a/mysql-test/suite/sys_vars/r/sysvars_server_embedded.result b/mysql-test/suite/sys_vars/r/sysvars_server_embedded.result
index 6d854065538..786e4b3b32d 100644
--- a/mysql-test/suite/sys_vars/r/sysvars_server_embedded.result
+++ b/mysql-test/suite/sys_vars/r/sysvars_server_embedded.result
@@ -12,6 +12,16 @@ variable_name not in (
'log_tc_size','have_sanitizer'
)
order by variable_name;
+VARIABLE_NAME ALLOW_SUSPICIOUS_UDFS
+VARIABLE_SCOPE GLOBAL
+VARIABLE_TYPE BOOLEAN
+VARIABLE_COMMENT Allows use of user-defined functions (UDFs) consisting of only one symbol xxx() without corresponding xxx_init() or xxx_deinit(). That also means that one can load any function from any library, for example exit() from libc.so
+NUMERIC_MIN_VALUE NULL
+NUMERIC_MAX_VALUE NULL
+NUMERIC_BLOCK_SIZE NULL
+ENUM_VALUE_LIST OFF,ON
+READ_ONLY YES
+COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME ALTER_ALGORITHM
VARIABLE_SCOPE SESSION
VARIABLE_TYPE ENUM
@@ -2252,6 +2262,16 @@ NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL
READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED
+VARIABLE_NAME OPTIMIZER_EXTRA_PRUNING_DEPTH
+VARIABLE_SCOPE SESSION
+VARIABLE_TYPE BIGINT UNSIGNED
+VARIABLE_COMMENT If the optimizer needs to enumerate join prefix of this size or larger, then it will try agressively prune away the search space.
+NUMERIC_MIN_VALUE 0
+NUMERIC_MAX_VALUE 62
+NUMERIC_BLOCK_SIZE 1
+ENUM_VALUE_LIST NULL
+READ_ONLY NO
+COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME OPTIMIZER_MAX_SEL_ARG_WEIGHT
VARIABLE_SCOPE SESSION
VARIABLE_TYPE BIGINT UNSIGNED
@@ -2265,9 +2285,9 @@ COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME OPTIMIZER_PRUNE_LEVEL
VARIABLE_SCOPE SESSION
VARIABLE_TYPE BIGINT UNSIGNED
-VARIABLE_COMMENT Controls the heuristic(s) applied during query optimization to prune less-promising partial plans from the optimizer search space. Meaning: 0 - do not apply any heuristic, thus perform exhaustive search; 1 - prune plans based on number of retrieved rows
+VARIABLE_COMMENT Controls the heuristic(s) applied during query optimization to prune less-promising partial plans from the optimizer search space. Meaning: 0 - do not apply any heuristic, thus perform exhaustive search: 1 - prune plans based on cost and number of retrieved rows eq_ref: 2 - prune also if we find an eq_ref chain
NUMERIC_MIN_VALUE 0
-NUMERIC_MAX_VALUE 1
+NUMERIC_MAX_VALUE 2
NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL
READ_ONLY NO
@@ -3092,6 +3112,16 @@ NUMERIC_BLOCK_SIZE NULL
ENUM_VALUE_LIST OFF,ON
READ_ONLY YES
COMMAND_LINE_ARGUMENT NULL
+VARIABLE_NAME SKIP_GRANT_TABLES
+VARIABLE_SCOPE GLOBAL
+VARIABLE_TYPE BOOLEAN
+VARIABLE_COMMENT Start without grant tables. This gives all users FULL ACCESS to all tables.
+NUMERIC_MIN_VALUE NULL
+NUMERIC_MAX_VALUE NULL
+NUMERIC_BLOCK_SIZE NULL
+ENUM_VALUE_LIST OFF,ON
+READ_ONLY YES
+COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME SKIP_NAME_RESOLVE
VARIABLE_SCOPE GLOBAL
VARIABLE_TYPE BOOLEAN
diff --git a/mysql-test/suite/sys_vars/r/sysvars_server_notembedded,32bit.rdiff b/mysql-test/suite/sys_vars/r/sysvars_server_notembedded,32bit.rdiff
index d4852f1aef9..8ba94d3ba77 100644
--- a/mysql-test/suite/sys_vars/r/sysvars_server_notembedded,32bit.rdiff
+++ b/mysql-test/suite/sys_vars/r/sysvars_server_notembedded,32bit.rdiff
@@ -1,6 +1,4 @@
---- ../../mysql-test/suite/sys_vars/r/sysvars_server_notembedded.result 2021-05-12 15:30:19.783373551 +0530
-+++ ../../mysql-test/suite/sys_vars/r/sysvars_server_notembedded,32bit.reject 2021-05-12 15:32:40.170343130 +0530
-@@ -34,7 +34,7 @@
+@@ -44,7 +44,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME ARIA_BLOCK_SIZE
VARIABLE_SCOPE GLOBAL
@@ -9,7 +7,7 @@
VARIABLE_COMMENT Block size to be used for Aria index pages.
NUMERIC_MIN_VALUE 4096
NUMERIC_MAX_VALUE 32768
-@@ -44,7 +44,7 @@
+@@ -54,7 +54,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME ARIA_CHECKPOINT_INTERVAL
VARIABLE_SCOPE GLOBAL
@@ -18,7 +16,7 @@
VARIABLE_COMMENT Interval between tries to do an automatic checkpoints. In seconds; 0 means 'no automatic checkpoints' which makes sense only for testing.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 4294967295
-@@ -54,7 +54,7 @@
+@@ -64,7 +64,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME ARIA_CHECKPOINT_LOG_ACTIVITY
VARIABLE_SCOPE GLOBAL
@@ -27,7 +25,7 @@
VARIABLE_COMMENT Number of bytes that the transaction log has to grow between checkpoints before a new checkpoint is written to the log.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 4294967295
-@@ -74,7 +74,7 @@
+@@ -84,7 +84,7 @@
COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME ARIA_FORCE_START_AFTER_RECOVERY_FAILURES
VARIABLE_SCOPE GLOBAL
@@ -36,7 +34,7 @@
VARIABLE_COMMENT Number of consecutive log recovery failures after which logs will be automatically deleted to cure the problem; 0 (the default) disables the feature.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 255
-@@ -94,7 +94,7 @@
+@@ -104,7 +104,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME ARIA_GROUP_COMMIT_INTERVAL
VARIABLE_SCOPE GLOBAL
@@ -45,7 +43,7 @@
VARIABLE_COMMENT Interval between commits in microseconds (1/1000000 sec). 0 stands for no waiting for other threads to come and do a commit in "hard" mode and no sync()/commit at all in "soft" mode. Option has only an effect if aria_group_commit is used
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 4294967295
-@@ -104,7 +104,7 @@
+@@ -114,7 +114,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME ARIA_LOG_FILE_SIZE
VARIABLE_SCOPE GLOBAL
@@ -54,7 +52,7 @@
VARIABLE_COMMENT Limit for transaction log size
NUMERIC_MIN_VALUE 8388608
NUMERIC_MAX_VALUE 4294967295
-@@ -134,10 +134,10 @@
+@@ -144,10 +144,10 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME ARIA_PAGECACHE_AGE_THRESHOLD
VARIABLE_SCOPE GLOBAL
@@ -67,7 +65,7 @@
NUMERIC_BLOCK_SIZE 100
ENUM_VALUE_LIST NULL
READ_ONLY NO
-@@ -154,7 +154,7 @@
+@@ -164,7 +164,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME ARIA_PAGECACHE_DIVISION_LIMIT
VARIABLE_SCOPE GLOBAL
@@ -76,7 +74,7 @@
VARIABLE_COMMENT The minimum percentage of warm blocks in key cache
NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 100
-@@ -164,7 +164,7 @@
+@@ -174,7 +174,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME ARIA_PAGECACHE_FILE_HASH_SIZE
VARIABLE_SCOPE GLOBAL
@@ -85,7 +83,7 @@
VARIABLE_COMMENT Number of hash buckets for open and changed files. If you have a lot of Aria files open you should increase this for faster flush of changes. A good value is probably 1/10 of number of possible open Aria files.
NUMERIC_MIN_VALUE 128
NUMERIC_MAX_VALUE 16384
-@@ -194,7 +194,7 @@
+@@ -204,7 +204,7 @@
COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME ARIA_REPAIR_THREADS
VARIABLE_SCOPE SESSION
@@ -94,7 +92,7 @@
VARIABLE_COMMENT Number of threads to use when repairing Aria tables. The value of 1 disables parallel repair.
NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 128
-@@ -207,7 +207,7 @@
+@@ -217,7 +217,7 @@
VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT The buffer that is allocated when sorting the index when doing a REPAIR or when creating indexes with CREATE INDEX or ALTER TABLE.
NUMERIC_MIN_VALUE 4096
@@ -103,7 +101,7 @@
NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL
READ_ONLY NO
-@@ -264,7 +264,7 @@
+@@ -274,7 +274,7 @@
COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME AUTO_INCREMENT_INCREMENT
VARIABLE_SCOPE SESSION
@@ -112,7 +110,7 @@
VARIABLE_COMMENT Auto-increment columns are incremented by this
NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 65535
-@@ -274,7 +274,7 @@
+@@ -284,7 +284,7 @@
COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME AUTO_INCREMENT_OFFSET
VARIABLE_SCOPE SESSION
@@ -121,7 +119,7 @@
VARIABLE_COMMENT Offset added to Auto-increment columns. Used when auto-increment-increment != 1
NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 65535
-@@ -284,7 +284,7 @@
+@@ -294,7 +294,7 @@
COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME BACK_LOG
VARIABLE_SCOPE GLOBAL
@@ -130,7 +128,7 @@
VARIABLE_COMMENT The number of outstanding connection requests MariaDB can have. This comes into play when the main MariaDB thread gets very many connection requests in a very short time
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 65535
-@@ -337,7 +337,7 @@
+@@ -357,7 +357,7 @@
VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT The size of the transactional cache for updates to transactional engines for the binary log. If you often use transactions containing many statements, you can increase this to get more performance
NUMERIC_MIN_VALUE 4096
@@ -139,7 +137,7 @@
NUMERIC_BLOCK_SIZE 4096
ENUM_VALUE_LIST NULL
READ_ONLY NO
-@@ -354,20 +354,20 @@
+@@ -374,20 +374,20 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME BINLOG_COMMIT_WAIT_COUNT
VARIABLE_SCOPE GLOBAL
@@ -164,7 +162,7 @@
NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL
READ_ONLY NO
-@@ -384,7 +384,7 @@
+@@ -404,7 +404,7 @@
COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME BINLOG_EXPIRE_LOGS_SECONDS
VARIABLE_SCOPE GLOBAL
@@ -173,7 +171,7 @@
VARIABLE_COMMENT If non-zero, binary logs will be purged after binlog_expire_logs_seconds seconds; It and expire_logs_days are linked, such that changes in one are converted into the other. Possible purges happen at startup and at binary log rotation.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 8553600
-@@ -397,7 +397,7 @@
+@@ -417,7 +417,7 @@
VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT The size of file cache for the binary log
NUMERIC_MIN_VALUE 8192
@@ -182,7 +180,7 @@
NUMERIC_BLOCK_SIZE 4096
ENUM_VALUE_LIST NULL
READ_ONLY NO
-@@ -447,7 +447,7 @@
+@@ -467,7 +467,7 @@
VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT The size of the statement cache for updates to non-transactional engines for the binary log. If you often use statements updating a great number of rows, you can increase this to get more performance.
NUMERIC_MIN_VALUE 4096
@@ -191,7 +189,7 @@
NUMERIC_BLOCK_SIZE 4096
ENUM_VALUE_LIST NULL
READ_ONLY NO
-@@ -457,7 +457,7 @@
+@@ -477,7 +477,7 @@
VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT Size of tree cache used in bulk insert optimisation. Note that this is a limit per thread!
NUMERIC_MIN_VALUE 0
@@ -200,7 +198,7 @@
NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL
READ_ONLY NO
-@@ -644,7 +644,7 @@
+@@ -664,7 +664,7 @@
COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME CONNECT_TIMEOUT
VARIABLE_SCOPE GLOBAL
@@ -209,7 +207,7 @@
VARIABLE_COMMENT The number of seconds the mysqld server is waiting for a connect packet before responding with 'Bad handshake'
NUMERIC_MIN_VALUE 2
NUMERIC_MAX_VALUE 31536000
-@@ -694,7 +694,7 @@
+@@ -714,7 +714,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME DEADLOCK_SEARCH_DEPTH_LONG
VARIABLE_SCOPE SESSION
@@ -218,7 +216,7 @@
VARIABLE_COMMENT Long search depth for the two-step deadlock detection
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 33
-@@ -704,7 +704,7 @@
+@@ -724,7 +724,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME DEADLOCK_SEARCH_DEPTH_SHORT
VARIABLE_SCOPE SESSION
@@ -227,7 +225,7 @@
VARIABLE_COMMENT Short search depth for the two-step deadlock detection
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 32
-@@ -714,7 +714,7 @@
+@@ -734,7 +734,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME DEADLOCK_TIMEOUT_LONG
VARIABLE_SCOPE SESSION
@@ -236,7 +234,7 @@
VARIABLE_COMMENT Long timeout for the two-step deadlock detection (in microseconds)
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 4294967295
-@@ -724,7 +724,7 @@
+@@ -744,7 +744,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME DEADLOCK_TIMEOUT_SHORT
VARIABLE_SCOPE SESSION
@@ -245,7 +243,7 @@
VARIABLE_COMMENT Short timeout for the two-step deadlock detection (in microseconds)
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 4294967295
-@@ -784,7 +784,7 @@
+@@ -804,7 +804,7 @@
COMMAND_LINE_ARGUMENT NULL
VARIABLE_NAME DEFAULT_WEEK_FORMAT
VARIABLE_SCOPE SESSION
@@ -254,7 +252,7 @@
VARIABLE_COMMENT The default week format used by WEEK() functions
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 7
-@@ -794,7 +794,7 @@
+@@ -814,7 +814,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME DELAYED_INSERT_LIMIT
VARIABLE_SCOPE GLOBAL
@@ -263,7 +261,7 @@
VARIABLE_COMMENT After inserting delayed_insert_limit rows, the INSERT DELAYED handler will check if there are any SELECT statements pending. If so, it allows these to execute before continuing.
NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 4294967295
-@@ -804,7 +804,7 @@
+@@ -824,7 +824,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME DELAYED_INSERT_TIMEOUT
VARIABLE_SCOPE GLOBAL
@@ -272,7 +270,7 @@
VARIABLE_COMMENT How long a INSERT DELAYED thread should wait for INSERT statements before terminating
NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 31536000
-@@ -814,7 +814,7 @@
+@@ -834,7 +834,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME DELAYED_QUEUE_SIZE
VARIABLE_SCOPE GLOBAL
@@ -281,7 +279,7 @@
VARIABLE_COMMENT What size queue (in rows) should be allocated for handling INSERT DELAYED. If the queue becomes full, any client that does INSERT DELAYED will wait until there is room in the queue again
NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 4294967295
-@@ -844,7 +844,7 @@
+@@ -864,7 +864,7 @@
COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME DIV_PRECISION_INCREMENT
VARIABLE_SCOPE SESSION
@@ -290,7 +288,7 @@
VARIABLE_COMMENT Precision of the result of '/' operator will be increased on that value
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 38
-@@ -964,7 +964,7 @@
+@@ -984,7 +984,7 @@
COMMAND_LINE_ARGUMENT NULL
VARIABLE_NAME EXTRA_MAX_CONNECTIONS
VARIABLE_SCOPE GLOBAL
@@ -299,7 +297,7 @@
VARIABLE_COMMENT The number of connections on extra-port
NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 100000
-@@ -994,7 +994,7 @@
+@@ -1014,7 +1014,7 @@
COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME FLUSH_TIME
VARIABLE_SCOPE GLOBAL
@@ -308,7 +306,7 @@
VARIABLE_COMMENT A dedicated thread is created to flush all tables at the given interval
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 31536000
-@@ -1024,7 +1024,7 @@
+@@ -1044,7 +1044,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME FT_MAX_WORD_LEN
VARIABLE_SCOPE GLOBAL
@@ -317,7 +315,7 @@
VARIABLE_COMMENT The maximum length of the word to be included in a FULLTEXT index. Note: FULLTEXT indexes must be rebuilt after changing this variable
NUMERIC_MIN_VALUE 10
NUMERIC_MAX_VALUE 84
-@@ -1034,7 +1034,7 @@
+@@ -1054,7 +1054,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME FT_MIN_WORD_LEN
VARIABLE_SCOPE GLOBAL
@@ -326,7 +324,7 @@
VARIABLE_COMMENT The minimum length of the word to be included in a FULLTEXT index. Note: FULLTEXT indexes must be rebuilt after changing this variable
NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 84
-@@ -1044,7 +1044,7 @@
+@@ -1064,7 +1064,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME FT_QUERY_EXPANSION_LIMIT
VARIABLE_SCOPE GLOBAL
@@ -335,7 +333,7 @@
VARIABLE_COMMENT Number of best matches to use for query expansion
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 1000
-@@ -1294,7 +1294,7 @@
+@@ -1314,7 +1314,7 @@
COMMAND_LINE_ARGUMENT NULL
VARIABLE_NAME HISTOGRAM_SIZE
VARIABLE_SCOPE SESSION
@@ -344,7 +342,7 @@
VARIABLE_COMMENT Number of bytes used for a histogram. If set to 0, no histograms are created by ANALYZE.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 255
-@@ -1324,7 +1324,7 @@
+@@ -1344,7 +1344,7 @@
COMMAND_LINE_ARGUMENT NULL
VARIABLE_NAME HOST_CACHE_SIZE
VARIABLE_SCOPE GLOBAL
@@ -353,7 +351,7 @@
VARIABLE_COMMENT How many host names should be cached to avoid resolving.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 65536
-@@ -1434,7 +1434,7 @@
+@@ -1454,7 +1454,7 @@
COMMAND_LINE_ARGUMENT NULL
VARIABLE_NAME INTERACTIVE_TIMEOUT
VARIABLE_SCOPE SESSION
@@ -362,7 +360,7 @@
VARIABLE_COMMENT The number of seconds the server waits for activity on an interactive connection before closing it
NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 31536000
-@@ -1467,7 +1467,7 @@
+@@ -1487,7 +1487,7 @@
VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT The size of the buffer that is used for joins
NUMERIC_MIN_VALUE 128
@@ -371,7 +369,7 @@
NUMERIC_BLOCK_SIZE 128
ENUM_VALUE_LIST NULL
READ_ONLY NO
-@@ -1484,7 +1484,7 @@
+@@ -1504,7 +1504,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME JOIN_CACHE_LEVEL
VARIABLE_SCOPE SESSION
@@ -380,7 +378,7 @@
VARIABLE_COMMENT Controls what join operations can be executed with join buffers. Odd numbers are used for plain join buffers while even numbers are used for linked buffers
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 8
-@@ -1507,7 +1507,7 @@
+@@ -1527,7 +1527,7 @@
VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT The size of the buffer used for index blocks for MyISAM tables. Increase this to get better index handling (for all reads and multiple writes) to as much as you can afford
NUMERIC_MIN_VALUE 0
@@ -389,7 +387,7 @@
NUMERIC_BLOCK_SIZE 4096
ENUM_VALUE_LIST NULL
READ_ONLY NO
-@@ -1674,7 +1674,7 @@
+@@ -1694,7 +1694,7 @@
COMMAND_LINE_ARGUMENT NULL
VARIABLE_NAME LOCK_WAIT_TIMEOUT
VARIABLE_SCOPE SESSION
@@ -398,7 +396,7 @@
VARIABLE_COMMENT Timeout in seconds to wait for a lock before returning an error.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 31536000
-@@ -1824,7 +1824,7 @@
+@@ -1844,7 +1844,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME LOG_SLOW_RATE_LIMIT
VARIABLE_SCOPE SESSION
@@ -407,7 +405,7 @@
VARIABLE_COMMENT Write to slow log every #th slow query. Set to 1 to log everything. Increase it to reduce the size of the slow or the performance impact of slow logging
NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 4294967295
-@@ -1854,7 +1854,7 @@
+@@ -1874,7 +1874,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME LOG_WARNINGS
VARIABLE_SCOPE SESSION
@@ -416,7 +414,7 @@
VARIABLE_COMMENT Log some not critical warnings to the general log file.Value can be between 0 and 11. Higher values mean more verbosity
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 4294967295
-@@ -1914,7 +1914,7 @@
+@@ -1934,7 +1934,7 @@
COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME MAX_ALLOWED_PACKET
VARIABLE_SCOPE SESSION
@@ -425,7 +423,7 @@
VARIABLE_COMMENT Max packet length to send to or receive from the server
NUMERIC_MIN_VALUE 1024
NUMERIC_MAX_VALUE 1073741824
-@@ -1927,14 +1927,14 @@
+@@ -1947,14 +1947,14 @@
VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT Sets the total size of the transactional cache
NUMERIC_MIN_VALUE 4096
@@ -442,7 +440,7 @@
VARIABLE_COMMENT Binary log will be rotated automatically when the size exceeds this value.
NUMERIC_MIN_VALUE 4096
NUMERIC_MAX_VALUE 1073741824
-@@ -1947,14 +1947,14 @@
+@@ -1967,14 +1967,14 @@
VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT Sets the total size of the statement cache
NUMERIC_MIN_VALUE 4096
@@ -459,7 +457,7 @@
VARIABLE_COMMENT The number of simultaneous clients allowed
NUMERIC_MIN_VALUE 10
NUMERIC_MAX_VALUE 100000
-@@ -1964,7 +1964,7 @@
+@@ -1984,7 +1984,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME MAX_CONNECT_ERRORS
VARIABLE_SCOPE GLOBAL
@@ -468,7 +466,7 @@
VARIABLE_COMMENT If there is more than this number of interrupted connections from a host this host will be blocked from further connections
NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 4294967295
-@@ -1974,7 +1974,7 @@
+@@ -1994,7 +1994,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME MAX_DELAYED_THREADS
VARIABLE_SCOPE SESSION
@@ -477,7 +475,7 @@
VARIABLE_COMMENT Don't start more than this number of threads to handle INSERT DELAYED statements. If set to zero INSERT DELAYED will be not used
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 16384
-@@ -1994,7 +1994,7 @@
+@@ -2014,7 +2014,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME MAX_ERROR_COUNT
VARIABLE_SCOPE SESSION
@@ -486,7 +484,7 @@
VARIABLE_COMMENT Max number of errors/warnings to store for a statement
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 65535
-@@ -2007,14 +2007,14 @@
+@@ -2027,14 +2027,14 @@
VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT Don't allow creation of heap tables bigger than this
NUMERIC_MIN_VALUE 16384
@@ -503,7 +501,7 @@
VARIABLE_COMMENT Don't start more than this number of threads to handle INSERT DELAYED statements. If set to zero INSERT DELAYED will be not used
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 16384
-@@ -2034,7 +2034,7 @@
+@@ -2054,7 +2054,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME MAX_LENGTH_FOR_SORT_DATA
VARIABLE_SCOPE SESSION
@@ -512,7 +510,7 @@
VARIABLE_COMMENT Max number of bytes in sorted records
NUMERIC_MIN_VALUE 4
NUMERIC_MAX_VALUE 8388608
-@@ -2064,7 +2064,7 @@
+@@ -2084,7 +2084,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME MAX_RECURSIVE_ITERATIONS
VARIABLE_SCOPE SESSION
@@ -521,7 +519,7 @@
VARIABLE_COMMENT Maximum number of iterations when executing recursive queries
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 4294967295
-@@ -2087,14 +2087,14 @@
+@@ -2107,14 +2107,14 @@
VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT The maximum size of the container of a rowid filter
NUMERIC_MIN_VALUE 1024
@@ -538,7 +536,7 @@
VARIABLE_COMMENT Limit assumed max number of seeks when looking up rows based on a key
NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 4294967295
-@@ -2114,7 +2114,7 @@
+@@ -2134,7 +2134,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME MAX_SORT_LENGTH
VARIABLE_SCOPE SESSION
@@ -547,7 +545,7 @@
VARIABLE_COMMENT The number of bytes to use when sorting BLOB or TEXT values (only the first max_sort_length bytes of each value are used; the rest are ignored)
NUMERIC_MIN_VALUE 64
NUMERIC_MAX_VALUE 8388608
-@@ -2124,7 +2124,7 @@
+@@ -2144,7 +2144,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME MAX_SP_RECURSION_DEPTH
VARIABLE_SCOPE SESSION
@@ -556,7 +554,7 @@
VARIABLE_COMMENT Maximum stored procedure recursion depth
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 255
-@@ -2144,7 +2144,7 @@
+@@ -2164,7 +2164,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME MAX_TMP_TABLES
VARIABLE_SCOPE SESSION
@@ -565,7 +563,7 @@
VARIABLE_COMMENT Unused, will be removed.
NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 4294967295
-@@ -2164,7 +2164,7 @@
+@@ -2184,7 +2184,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME MAX_WRITE_LOCK_COUNT
VARIABLE_SCOPE GLOBAL
@@ -574,7 +572,7 @@
VARIABLE_COMMENT After this many write locks, allow some read locks to run in between
NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 4294967295
-@@ -2174,7 +2174,7 @@
+@@ -2194,7 +2194,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME METADATA_LOCKS_CACHE_SIZE
VARIABLE_SCOPE GLOBAL
@@ -583,7 +581,7 @@
VARIABLE_COMMENT Unused
NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 1048576
-@@ -2184,7 +2184,7 @@
+@@ -2204,7 +2204,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME METADATA_LOCKS_HASH_INSTANCES
VARIABLE_SCOPE GLOBAL
@@ -592,7 +590,7 @@
VARIABLE_COMMENT Unused
NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 1024
-@@ -2194,7 +2194,7 @@
+@@ -2214,7 +2214,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME MIN_EXAMINED_ROW_LIMIT
VARIABLE_SCOPE SESSION
@@ -601,7 +599,7 @@
VARIABLE_COMMENT Don't write queries to slow log that examine fewer rows than that
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 4294967295
-@@ -2204,7 +2204,7 @@
+@@ -2224,7 +2224,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME MRR_BUFFER_SIZE
VARIABLE_SCOPE SESSION
@@ -610,7 +608,7 @@
VARIABLE_COMMENT Size of buffer to use when using MRR with range access
NUMERIC_MIN_VALUE 8192
NUMERIC_MAX_VALUE 2147483647
-@@ -2214,7 +2214,7 @@
+@@ -2234,7 +2234,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME MYISAM_BLOCK_SIZE
VARIABLE_SCOPE GLOBAL
@@ -619,7 +617,7 @@
VARIABLE_COMMENT Block size to be used for MyISAM index pages
NUMERIC_MIN_VALUE 1024
NUMERIC_MAX_VALUE 16384
-@@ -2224,7 +2224,7 @@
+@@ -2244,7 +2244,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME MYISAM_DATA_POINTER_SIZE
VARIABLE_SCOPE GLOBAL
@@ -628,7 +626,7 @@
VARIABLE_COMMENT Default pointer size to be used for MyISAM tables
NUMERIC_MIN_VALUE 2
NUMERIC_MAX_VALUE 7
-@@ -2247,7 +2247,7 @@
+@@ -2267,7 +2267,7 @@
VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT Restricts the total memory used for memory mapping of MySQL tables
NUMERIC_MIN_VALUE 7
@@ -637,7 +635,7 @@
NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL
READ_ONLY YES
-@@ -2264,10 +2264,10 @@
+@@ -2284,10 +2284,10 @@
COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME MYISAM_REPAIR_THREADS
VARIABLE_SCOPE SESSION
@@ -650,7 +648,7 @@
NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL
READ_ONLY NO
-@@ -2277,7 +2277,7 @@
+@@ -2297,7 +2297,7 @@
VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT The buffer that is allocated when sorting the index when doing a REPAIR or when creating indexes with CREATE INDEX or ALTER TABLE
NUMERIC_MIN_VALUE 4096
@@ -659,7 +657,7 @@
NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL
READ_ONLY NO
-@@ -2314,7 +2314,7 @@
+@@ -2334,7 +2334,7 @@
COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME NET_BUFFER_LENGTH
VARIABLE_SCOPE SESSION
@@ -668,7 +666,7 @@
VARIABLE_COMMENT Buffer length for TCP/IP and socket communication
NUMERIC_MIN_VALUE 1024
NUMERIC_MAX_VALUE 1048576
-@@ -2324,7 +2324,7 @@
+@@ -2344,7 +2344,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME NET_READ_TIMEOUT
VARIABLE_SCOPE SESSION
@@ -677,7 +675,7 @@
VARIABLE_COMMENT Number of seconds to wait for more data from a connection before aborting the read
NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 31536000
-@@ -2334,7 +2334,7 @@
+@@ -2354,7 +2354,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME NET_RETRY_COUNT
VARIABLE_SCOPE SESSION
@@ -686,7 +684,7 @@
VARIABLE_COMMENT If a read on a communication port is interrupted, retry this many times before giving up
NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 4294967295
-@@ -2344,7 +2344,7 @@
+@@ -2364,7 +2364,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME NET_WRITE_TIMEOUT
VARIABLE_SCOPE SESSION
@@ -695,7 +693,7 @@
VARIABLE_COMMENT Number of seconds to wait for a block to be written to a connection before aborting the write
NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 31536000
-@@ -2394,7 +2394,7 @@
+@@ -2414,7 +2414,7 @@
COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME OPEN_FILES_LIMIT
VARIABLE_SCOPE GLOBAL
@@ -704,7 +702,16 @@
VARIABLE_COMMENT If this is not 0, then mysqld will use this value to reserve file descriptors to use with setrlimit(). If this value is 0 or autoset then mysqld will reserve max_connections*5 or max_connections + table_cache*2 (whichever is larger) number of file descriptors
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 4294967295
-@@ -2404,17 +2404,17 @@
+@@ -2424,7 +2424,7 @@
+ COMMAND_LINE_ARGUMENT REQUIRED
+ VARIABLE_NAME OPTIMIZER_EXTRA_PRUNING_DEPTH
+ VARIABLE_SCOPE SESSION
+-VARIABLE_TYPE BIGINT UNSIGNED
++VARIABLE_TYPE INT UNSIGNED
+ VARIABLE_COMMENT If the optimizer needs to enumerate join prefix of this size or larger, then it will try agressively prune away the search space.
+ NUMERIC_MIN_VALUE 0
+ NUMERIC_MAX_VALUE 62
+@@ -2434,17 +2434,17 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME OPTIMIZER_MAX_SEL_ARG_WEIGHT
VARIABLE_SCOPE SESSION
@@ -722,10 +729,10 @@
VARIABLE_SCOPE SESSION
-VARIABLE_TYPE BIGINT UNSIGNED
+VARIABLE_TYPE INT UNSIGNED
- VARIABLE_COMMENT Controls the heuristic(s) applied during query optimization to prune less-promising partial plans from the optimizer search space. Meaning: 0 - do not apply any heuristic, thus perform exhaustive search; 1 - prune plans based on number of retrieved rows
+ VARIABLE_COMMENT Controls the heuristic(s) applied during query optimization to prune less-promising partial plans from the optimizer search space. Meaning: 0 - do not apply any heuristic, thus perform exhaustive search: 1 - prune plans based on cost and number of retrieved rows eq_ref: 2 - prune also if we find an eq_ref chain
NUMERIC_MIN_VALUE 0
- NUMERIC_MAX_VALUE 1
-@@ -2424,7 +2424,7 @@
+ NUMERIC_MAX_VALUE 2
+@@ -2454,7 +2454,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME OPTIMIZER_SEARCH_DEPTH
VARIABLE_SCOPE SESSION
@@ -734,7 +741,7 @@
VARIABLE_COMMENT Maximum depth of search performed by the query optimizer. Values larger than the number of relations in a query result in better query plans, but take longer to compile a query. Values smaller than the number of tables in a relation result in faster optimization, but may produce very bad query plans. If set to 0, the system will automatically pick a reasonable value.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 62
-@@ -2434,7 +2434,7 @@
+@@ -2464,7 +2464,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME OPTIMIZER_SELECTIVITY_SAMPLING_LIMIT
VARIABLE_SCOPE SESSION
@@ -743,7 +750,7 @@
VARIABLE_COMMENT Controls number of record samples to check condition selectivity
NUMERIC_MIN_VALUE 10
NUMERIC_MAX_VALUE 4294967295
-@@ -2464,17 +2464,17 @@
+@@ -2494,17 +2494,17 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME OPTIMIZER_TRACE_MAX_MEM_SIZE
VARIABLE_SCOPE SESSION
@@ -764,7 +771,7 @@
VARIABLE_COMMENT Controls selectivity of which conditions the optimizer takes into account to calculate cardinality of a partial join when it searches for the best execution plan Meaning: 1 - use selectivity of index backed range conditions to calculate the cardinality of a partial join if the last joined table is accessed by full table scan or an index scan, 2 - use selectivity of index backed range conditions to calculate the cardinality of a partial join in any case, 3 - additionally always use selectivity of range conditions that are not backed by any index to calculate the cardinality of a partial join, 4 - use histograms to calculate selectivity of range conditions that are not backed by any index to calculate the cardinality of a partial join.5 - additionally use selectivity of certain non-range predicates calculated on record samples
NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 5
-@@ -2494,7 +2494,7 @@
+@@ -2524,7 +2524,7 @@
COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME PERFORMANCE_SCHEMA_ACCOUNTS_SIZE
VARIABLE_SCOPE GLOBAL
@@ -773,7 +780,7 @@
VARIABLE_COMMENT Maximum number of instrumented user@host accounts. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576
-@@ -2504,7 +2504,7 @@
+@@ -2534,7 +2534,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_DIGESTS_SIZE
VARIABLE_SCOPE GLOBAL
@@ -782,7 +789,7 @@
VARIABLE_COMMENT Size of the statement digest. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576
-@@ -2514,7 +2514,7 @@
+@@ -2544,7 +2544,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_STAGES_HISTORY_LONG_SIZE
VARIABLE_SCOPE GLOBAL
@@ -791,7 +798,7 @@
VARIABLE_COMMENT Number of rows in EVENTS_STAGES_HISTORY_LONG. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576
-@@ -2524,7 +2524,7 @@
+@@ -2554,7 +2554,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_STAGES_HISTORY_SIZE
VARIABLE_SCOPE GLOBAL
@@ -800,7 +807,7 @@
VARIABLE_COMMENT Number of rows per thread in EVENTS_STAGES_HISTORY. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1024
-@@ -2534,7 +2534,7 @@
+@@ -2564,7 +2564,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_STATEMENTS_HISTORY_LONG_SIZE
VARIABLE_SCOPE GLOBAL
@@ -809,7 +816,7 @@
VARIABLE_COMMENT Number of rows in EVENTS_STATEMENTS_HISTORY_LONG. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576
-@@ -2544,7 +2544,7 @@
+@@ -2574,7 +2574,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_STATEMENTS_HISTORY_SIZE
VARIABLE_SCOPE GLOBAL
@@ -818,7 +825,7 @@
VARIABLE_COMMENT Number of rows per thread in EVENTS_STATEMENTS_HISTORY. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1024
-@@ -2554,7 +2554,7 @@
+@@ -2584,7 +2584,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_TRANSACTIONS_HISTORY_LONG_SIZE
VARIABLE_SCOPE GLOBAL
@@ -827,7 +834,7 @@
VARIABLE_COMMENT Number of rows in EVENTS_TRANSACTIONS_HISTORY_LONG. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576
-@@ -2564,7 +2564,7 @@
+@@ -2594,7 +2594,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_TRANSACTIONS_HISTORY_SIZE
VARIABLE_SCOPE GLOBAL
@@ -836,7 +843,7 @@
VARIABLE_COMMENT Number of rows per thread in EVENTS_TRANSACTIONS_HISTORY. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1024
-@@ -2574,7 +2574,7 @@
+@@ -2604,7 +2604,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_WAITS_HISTORY_LONG_SIZE
VARIABLE_SCOPE GLOBAL
@@ -845,7 +852,7 @@
VARIABLE_COMMENT Number of rows in EVENTS_WAITS_HISTORY_LONG. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576
-@@ -2584,7 +2584,7 @@
+@@ -2614,7 +2614,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_WAITS_HISTORY_SIZE
VARIABLE_SCOPE GLOBAL
@@ -854,7 +861,7 @@
VARIABLE_COMMENT Number of rows per thread in EVENTS_WAITS_HISTORY. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1024
-@@ -2594,7 +2594,7 @@
+@@ -2624,7 +2624,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_HOSTS_SIZE
VARIABLE_SCOPE GLOBAL
@@ -863,7 +870,7 @@
VARIABLE_COMMENT Maximum number of instrumented hosts. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576
-@@ -2604,7 +2604,7 @@
+@@ -2634,7 +2634,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_COND_CLASSES
VARIABLE_SCOPE GLOBAL
@@ -872,7 +879,7 @@
VARIABLE_COMMENT Maximum number of condition instruments.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 256
-@@ -2614,7 +2614,7 @@
+@@ -2644,7 +2644,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_COND_INSTANCES
VARIABLE_SCOPE GLOBAL
@@ -881,7 +888,7 @@
VARIABLE_COMMENT Maximum number of instrumented condition objects. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576
-@@ -2624,7 +2624,7 @@
+@@ -2654,7 +2654,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_DIGEST_LENGTH
VARIABLE_SCOPE GLOBAL
@@ -890,7 +897,7 @@
VARIABLE_COMMENT Maximum length considered for digest text, when stored in performance_schema tables.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 1048576
-@@ -2634,7 +2634,7 @@
+@@ -2664,7 +2664,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_FILE_CLASSES
VARIABLE_SCOPE GLOBAL
@@ -899,7 +906,7 @@
VARIABLE_COMMENT Maximum number of file instruments.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 256
-@@ -2644,7 +2644,7 @@
+@@ -2674,7 +2674,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_FILE_HANDLES
VARIABLE_SCOPE GLOBAL
@@ -908,7 +915,7 @@
VARIABLE_COMMENT Maximum number of opened instrumented files.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 1048576
-@@ -2654,7 +2654,7 @@
+@@ -2684,7 +2684,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_FILE_INSTANCES
VARIABLE_SCOPE GLOBAL
@@ -917,7 +924,7 @@
VARIABLE_COMMENT Maximum number of instrumented files. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576
-@@ -2664,7 +2664,7 @@
+@@ -2694,7 +2694,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_INDEX_STAT
VARIABLE_SCOPE GLOBAL
@@ -926,7 +933,7 @@
VARIABLE_COMMENT Maximum number of index statistics for instrumented tables. Use 0 to disable, -1 for automated scaling.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576
-@@ -2674,7 +2674,7 @@
+@@ -2704,7 +2704,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_MEMORY_CLASSES
VARIABLE_SCOPE GLOBAL
@@ -935,7 +942,7 @@
VARIABLE_COMMENT Maximum number of memory pool instruments.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 1024
-@@ -2684,7 +2684,7 @@
+@@ -2714,7 +2714,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_METADATA_LOCKS
VARIABLE_SCOPE GLOBAL
@@ -944,7 +951,7 @@
VARIABLE_COMMENT Maximum number of metadata locks. Use 0 to disable, -1 for automated scaling.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 104857600
-@@ -2694,7 +2694,7 @@
+@@ -2724,7 +2724,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_MUTEX_CLASSES
VARIABLE_SCOPE GLOBAL
@@ -953,7 +960,7 @@
VARIABLE_COMMENT Maximum number of mutex instruments.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 256
-@@ -2704,7 +2704,7 @@
+@@ -2734,7 +2734,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_MUTEX_INSTANCES
VARIABLE_SCOPE GLOBAL
@@ -962,7 +969,7 @@
VARIABLE_COMMENT Maximum number of instrumented MUTEX objects. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 104857600
-@@ -2714,7 +2714,7 @@
+@@ -2744,7 +2744,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_PREPARED_STATEMENTS_INSTANCES
VARIABLE_SCOPE GLOBAL
@@ -971,7 +978,7 @@
VARIABLE_COMMENT Maximum number of instrumented prepared statements. Use 0 to disable, -1 for automated scaling.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576
-@@ -2724,7 +2724,7 @@
+@@ -2754,7 +2754,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_PROGRAM_INSTANCES
VARIABLE_SCOPE GLOBAL
@@ -980,7 +987,7 @@
VARIABLE_COMMENT Maximum number of instrumented programs. Use 0 to disable, -1 for automated scaling.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576
-@@ -2734,7 +2734,7 @@
+@@ -2764,7 +2764,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_RWLOCK_CLASSES
VARIABLE_SCOPE GLOBAL
@@ -989,7 +996,7 @@
VARIABLE_COMMENT Maximum number of rwlock instruments.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 256
-@@ -2744,7 +2744,7 @@
+@@ -2774,7 +2774,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_RWLOCK_INSTANCES
VARIABLE_SCOPE GLOBAL
@@ -998,7 +1005,7 @@
VARIABLE_COMMENT Maximum number of instrumented RWLOCK objects. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 104857600
-@@ -2754,7 +2754,7 @@
+@@ -2784,7 +2784,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_SOCKET_CLASSES
VARIABLE_SCOPE GLOBAL
@@ -1007,7 +1014,7 @@
VARIABLE_COMMENT Maximum number of socket instruments.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 256
-@@ -2764,7 +2764,7 @@
+@@ -2794,7 +2794,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_SOCKET_INSTANCES
VARIABLE_SCOPE GLOBAL
@@ -1016,7 +1023,7 @@
VARIABLE_COMMENT Maximum number of opened instrumented sockets. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576
-@@ -2774,7 +2774,7 @@
+@@ -2804,7 +2804,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_SQL_TEXT_LENGTH
VARIABLE_SCOPE GLOBAL
@@ -1025,7 +1032,7 @@
VARIABLE_COMMENT Maximum length of displayed sql text.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 1048576
-@@ -2784,7 +2784,7 @@
+@@ -2814,7 +2814,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_STAGE_CLASSES
VARIABLE_SCOPE GLOBAL
@@ -1034,7 +1041,7 @@
VARIABLE_COMMENT Maximum number of stage instruments.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 256
-@@ -2794,7 +2794,7 @@
+@@ -2824,7 +2824,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_STATEMENT_CLASSES
VARIABLE_SCOPE GLOBAL
@@ -1043,7 +1050,7 @@
VARIABLE_COMMENT Maximum number of statement instruments.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 256
-@@ -2804,7 +2804,7 @@
+@@ -2834,7 +2834,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_STATEMENT_STACK
VARIABLE_SCOPE GLOBAL
@@ -1052,7 +1059,7 @@
VARIABLE_COMMENT Number of rows per thread in EVENTS_STATEMENTS_CURRENT.
NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 256
-@@ -2814,7 +2814,7 @@
+@@ -2844,7 +2844,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_TABLE_HANDLES
VARIABLE_SCOPE GLOBAL
@@ -1061,7 +1068,7 @@
VARIABLE_COMMENT Maximum number of opened instrumented tables. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576
-@@ -2824,7 +2824,7 @@
+@@ -2854,7 +2854,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_TABLE_INSTANCES
VARIABLE_SCOPE GLOBAL
@@ -1070,7 +1077,7 @@
VARIABLE_COMMENT Maximum number of instrumented tables. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576
-@@ -2834,7 +2834,7 @@
+@@ -2864,7 +2864,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_TABLE_LOCK_STAT
VARIABLE_SCOPE GLOBAL
@@ -1079,7 +1086,7 @@
VARIABLE_COMMENT Maximum number of lock statistics for instrumented tables. Use 0 to disable, -1 for automated scaling.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576
-@@ -2844,7 +2844,7 @@
+@@ -2874,7 +2874,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_THREAD_CLASSES
VARIABLE_SCOPE GLOBAL
@@ -1088,7 +1095,7 @@
VARIABLE_COMMENT Maximum number of thread instruments.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 256
-@@ -2854,7 +2854,7 @@
+@@ -2884,7 +2884,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_THREAD_INSTANCES
VARIABLE_SCOPE GLOBAL
@@ -1097,7 +1104,7 @@
VARIABLE_COMMENT Maximum number of instrumented threads. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576
-@@ -2864,7 +2864,7 @@
+@@ -2894,7 +2894,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_SESSION_CONNECT_ATTRS_SIZE
VARIABLE_SCOPE GLOBAL
@@ -1106,7 +1113,7 @@
VARIABLE_COMMENT Size of session attribute string buffer per thread. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576
-@@ -2874,7 +2874,7 @@
+@@ -2904,7 +2904,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_SETUP_ACTORS_SIZE
VARIABLE_SCOPE GLOBAL
@@ -1115,7 +1122,7 @@
VARIABLE_COMMENT Maximum number of rows in SETUP_ACTORS.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1024
-@@ -2884,7 +2884,7 @@
+@@ -2914,7 +2914,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_SETUP_OBJECTS_SIZE
VARIABLE_SCOPE GLOBAL
@@ -1124,7 +1131,7 @@
VARIABLE_COMMENT Maximum number of rows in SETUP_OBJECTS.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576
-@@ -2894,7 +2894,7 @@
+@@ -2924,7 +2924,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_USERS_SIZE
VARIABLE_SCOPE GLOBAL
@@ -1133,7 +1140,7 @@
VARIABLE_COMMENT Maximum number of instrumented users. Use 0 to disable, -1 for automated sizing.
NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576
-@@ -2944,7 +2944,7 @@
+@@ -2974,7 +2974,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PRELOAD_BUFFER_SIZE
VARIABLE_SCOPE SESSION
@@ -1142,7 +1149,7 @@
VARIABLE_COMMENT The size of the buffer that is allocated when preloading indexes
NUMERIC_MIN_VALUE 1024
NUMERIC_MAX_VALUE 1073741824
-@@ -2964,7 +2964,7 @@
+@@ -2994,7 +2994,7 @@
COMMAND_LINE_ARGUMENT NULL
VARIABLE_NAME PROFILING_HISTORY_SIZE
VARIABLE_SCOPE SESSION
@@ -1151,7 +1158,7 @@
VARIABLE_COMMENT Number of statements about which profiling information is maintained. If set to 0, no profiles are stored. See SHOW PROFILES.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 100
-@@ -2974,7 +2974,7 @@
+@@ -3004,7 +3004,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PROGRESS_REPORT_TIME
VARIABLE_SCOPE SESSION
@@ -1160,7 +1167,7 @@
VARIABLE_COMMENT Seconds between sending progress reports to the client for time-consuming statements. Set to 0 to disable progress reporting.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 4294967295
-@@ -3034,7 +3034,7 @@
+@@ -3064,7 +3064,7 @@
COMMAND_LINE_ARGUMENT NULL
VARIABLE_NAME QUERY_ALLOC_BLOCK_SIZE
VARIABLE_SCOPE SESSION
@@ -1169,7 +1176,7 @@
VARIABLE_COMMENT Allocation block size for query parsing and execution
NUMERIC_MIN_VALUE 1024
NUMERIC_MAX_VALUE 4294967295
-@@ -3044,7 +3044,7 @@
+@@ -3074,7 +3074,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME QUERY_CACHE_LIMIT
VARIABLE_SCOPE GLOBAL
@@ -1178,7 +1185,7 @@
VARIABLE_COMMENT Don't cache results that are bigger than this
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 4294967295
-@@ -3054,7 +3054,7 @@
+@@ -3084,7 +3084,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME QUERY_CACHE_MIN_RES_UNIT
VARIABLE_SCOPE GLOBAL
@@ -1187,7 +1194,7 @@
VARIABLE_COMMENT The minimum size for blocks allocated by the query cache
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 4294967295
-@@ -3067,7 +3067,7 @@
+@@ -3097,7 +3097,7 @@
VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT The memory allocated to store results from old queries
NUMERIC_MIN_VALUE 0
@@ -1196,7 +1203,7 @@
NUMERIC_BLOCK_SIZE 1024
ENUM_VALUE_LIST NULL
READ_ONLY NO
-@@ -3104,7 +3104,7 @@
+@@ -3134,7 +3134,7 @@
COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME QUERY_PREALLOC_SIZE
VARIABLE_SCOPE SESSION
@@ -1205,7 +1212,7 @@
VARIABLE_COMMENT Persistent buffer for query parsing and execution
NUMERIC_MIN_VALUE 1024
NUMERIC_MAX_VALUE 4294967295
-@@ -3117,7 +3117,7 @@
+@@ -3147,7 +3147,7 @@
VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT Sets the internal state of the RAND() generator for replication purposes
NUMERIC_MIN_VALUE 0
@@ -1214,7 +1221,7 @@
NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL
READ_ONLY NO
-@@ -3127,14 +3127,14 @@
+@@ -3157,14 +3157,14 @@
VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT Sets the internal state of the RAND() generator for replication purposes
NUMERIC_MIN_VALUE 0
@@ -1231,7 +1238,7 @@
VARIABLE_COMMENT Allocation block size for storing ranges during optimization
NUMERIC_MIN_VALUE 4096
NUMERIC_MAX_VALUE 4294967295
-@@ -3147,14 +3147,14 @@
+@@ -3177,14 +3177,14 @@
VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT Maximum speed(KB/s) to read binlog from master (0 = no limit)
NUMERIC_MIN_VALUE 0
@@ -1248,7 +1255,7 @@
VARIABLE_COMMENT Each thread that does a sequential scan allocates a buffer of this size for each table it scans. If you do many sequential scans, you may want to increase this value
NUMERIC_MIN_VALUE 8192
NUMERIC_MAX_VALUE 2147483647
-@@ -3174,7 +3174,7 @@
+@@ -3204,7 +3204,7 @@
COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME READ_RND_BUFFER_SIZE
VARIABLE_SCOPE SESSION
@@ -1257,7 +1264,7 @@
VARIABLE_COMMENT When reading rows in sorted order after a sort, the rows are read through this buffer to avoid a disk seeks
NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 2147483647
-@@ -3384,10 +3384,10 @@
+@@ -3414,10 +3414,10 @@
COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME ROWID_MERGE_BUFF_SIZE
VARIABLE_SCOPE SESSION
@@ -1270,7 +1277,7 @@
NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL
READ_ONLY NO
-@@ -3404,20 +3404,20 @@
+@@ -3434,20 +3434,20 @@
COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME RPL_SEMI_SYNC_MASTER_TIMEOUT
VARIABLE_SCOPE GLOBAL
@@ -1295,7 +1302,7 @@
NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL
READ_ONLY NO
-@@ -3474,10 +3474,10 @@
+@@ -3504,10 +3504,10 @@
COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME RPL_SEMI_SYNC_SLAVE_TRACE_LEVEL
VARIABLE_SCOPE GLOBAL
@@ -1308,7 +1315,7 @@
NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL
READ_ONLY NO
-@@ -3514,7 +3514,7 @@
+@@ -3544,7 +3544,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME SERVER_ID
VARIABLE_SCOPE SESSION
@@ -1317,7 +1324,7 @@
VARIABLE_COMMENT Uniquely identifies the server instance in the community of replication partners
NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 4294967295
-@@ -3644,7 +3644,7 @@
+@@ -3684,7 +3684,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME SLAVE_DOMAIN_PARALLEL_THREADS
VARIABLE_SCOPE GLOBAL
@@ -1326,7 +1333,7 @@
VARIABLE_COMMENT Maximum number of parallel threads to use on slave for events in a single replication domain. When using multiple domains, this can be used to limit a single domain from grabbing all threads and thus stalling other domains. The default of 0 means to allow a domain to grab as many threads as it wants, up to the value of slave_parallel_threads.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 16383
-@@ -3674,7 +3674,7 @@
+@@ -3714,7 +3714,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME SLAVE_MAX_ALLOWED_PACKET
VARIABLE_SCOPE GLOBAL
@@ -1335,7 +1342,7 @@
VARIABLE_COMMENT The maximum packet length to sent successfully from the master to slave.
NUMERIC_MIN_VALUE 1024
NUMERIC_MAX_VALUE 1073741824
-@@ -3694,7 +3694,7 @@
+@@ -3734,7 +3734,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME SLAVE_PARALLEL_MAX_QUEUED
VARIABLE_SCOPE GLOBAL
@@ -1344,7 +1351,7 @@
VARIABLE_COMMENT Limit on how much memory SQL threads should use per parallel replication thread when reading ahead in the relay log looking for opportunities for parallel replication. Only used when --slave-parallel-threads > 0.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 2147483647
-@@ -3714,7 +3714,7 @@
+@@ -3754,7 +3754,7 @@
COMMAND_LINE_ARGUMENT NULL
VARIABLE_NAME SLAVE_PARALLEL_THREADS
VARIABLE_SCOPE GLOBAL
@@ -1353,7 +1360,7 @@
VARIABLE_COMMENT If non-zero, number of threads to spawn to apply in parallel events on the slave that were group-committed on the master or were logged with GTID in different replication domains. Note that these threads are in addition to the IO and SQL threads, which are always created by a replication slave
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 16383
-@@ -3724,7 +3724,7 @@
+@@ -3764,7 +3764,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME SLAVE_PARALLEL_WORKERS
VARIABLE_SCOPE GLOBAL
@@ -1362,7 +1369,7 @@
VARIABLE_COMMENT Alias for slave_parallel_threads
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 16383
-@@ -3764,7 +3764,7 @@
+@@ -3804,7 +3804,7 @@
COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME SLAVE_TRANSACTION_RETRIES
VARIABLE_SCOPE GLOBAL
@@ -1371,7 +1378,7 @@
VARIABLE_COMMENT Number of times the slave SQL thread will retry a transaction in case it failed with a deadlock, elapsed lock wait timeout or listed in slave_transaction_retry_errors, before giving up and stopping
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 4294967295
-@@ -3784,7 +3784,7 @@
+@@ -3824,7 +3824,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME SLAVE_TRANSACTION_RETRY_INTERVAL
VARIABLE_SCOPE GLOBAL
@@ -1380,7 +1387,7 @@
VARIABLE_COMMENT Interval of the slave SQL thread will retry a transaction in case it failed with a deadlock or elapsed lock wait timeout or listed in slave_transaction_retry_errors
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 3600
-@@ -3804,7 +3804,7 @@
+@@ -3844,7 +3844,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME SLOW_LAUNCH_TIME
VARIABLE_SCOPE GLOBAL
@@ -1389,7 +1396,7 @@
VARIABLE_COMMENT If creating the thread takes longer than this value (in seconds), the Slow_launch_threads counter will be incremented
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 31536000
-@@ -3847,7 +3847,7 @@
+@@ -3887,7 +3887,7 @@
VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT Each thread that needs to do a sort allocates a buffer of this size
NUMERIC_MIN_VALUE 1024
@@ -1398,7 +1405,7 @@
NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL
READ_ONLY NO
-@@ -4074,7 +4074,7 @@
+@@ -4114,7 +4114,7 @@
COMMAND_LINE_ARGUMENT NULL
VARIABLE_NAME STORED_PROGRAM_CACHE
VARIABLE_SCOPE GLOBAL
@@ -1407,7 +1414,7 @@
VARIABLE_COMMENT The soft upper limit for number of cached stored routines for one connection.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 524288
-@@ -4174,7 +4174,7 @@
+@@ -4214,7 +4214,7 @@
COMMAND_LINE_ARGUMENT NULL
VARIABLE_NAME TABLE_DEFINITION_CACHE
VARIABLE_SCOPE GLOBAL
@@ -1416,7 +1423,7 @@
VARIABLE_COMMENT The number of cached table definitions
NUMERIC_MIN_VALUE 400
NUMERIC_MAX_VALUE 2097152
-@@ -4184,7 +4184,7 @@
+@@ -4224,7 +4224,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME TABLE_OPEN_CACHE
VARIABLE_SCOPE GLOBAL
@@ -1425,7 +1432,7 @@
VARIABLE_COMMENT The number of cached open tables
NUMERIC_MIN_VALUE 10
NUMERIC_MAX_VALUE 1048576
-@@ -4244,7 +4244,7 @@
+@@ -4284,7 +4284,7 @@
COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME THREAD_CACHE_SIZE
VARIABLE_SCOPE GLOBAL
@@ -1434,7 +1441,7 @@
VARIABLE_COMMENT How many threads we should keep in a cache for reuse. These are freed after 5 minutes of idle time
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 16384
-@@ -4417,7 +4417,7 @@
+@@ -4457,7 +4457,7 @@
VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT Max size for data for an internal temporary on-disk MyISAM or Aria table.
NUMERIC_MIN_VALUE 1024
@@ -1443,7 +1450,7 @@
NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL
READ_ONLY NO
-@@ -4427,7 +4427,7 @@
+@@ -4467,7 +4467,7 @@
VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT If an internal in-memory temporary table exceeds this size, MariaDB will automatically convert it to an on-disk MyISAM or Aria table. Same as tmp_table_size.
NUMERIC_MIN_VALUE 0
@@ -1452,7 +1459,7 @@
NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL
READ_ONLY NO
-@@ -4437,14 +4437,14 @@
+@@ -4477,14 +4477,14 @@
VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT Alias for tmp_memory_table_size. If an internal in-memory temporary table exceeds this size, MariaDB will automatically convert it to an on-disk MyISAM or Aria table.
NUMERIC_MIN_VALUE 0
@@ -1469,7 +1476,7 @@
VARIABLE_COMMENT Allocation block size for transactions to be stored in binary log
NUMERIC_MIN_VALUE 1024
NUMERIC_MAX_VALUE 134217728
-@@ -4454,7 +4454,7 @@
+@@ -4494,7 +4494,7 @@
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME TRANSACTION_PREALLOC_SIZE
VARIABLE_SCOPE SESSION
@@ -1478,7 +1485,7 @@
VARIABLE_COMMENT Persistent buffer for transactions to be stored in binary log
NUMERIC_MIN_VALUE 1024
NUMERIC_MAX_VALUE 134217728
-@@ -4594,7 +4594,7 @@
+@@ -4634,7 +4634,7 @@
COMMAND_LINE_ARGUMENT NULL
VARIABLE_NAME WAIT_TIMEOUT
VARIABLE_SCOPE SESSION
@@ -1487,7 +1494,7 @@
VARIABLE_COMMENT The number of seconds the server waits for activity on a connection before closing it
NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 31536000
-@@ -4621,7 +4621,7 @@
+@@ -4661,7 +4661,7 @@
VARIABLE_NAME LOG_TC_SIZE
GLOBAL_VALUE_ORIGIN AUTO
VARIABLE_SCOPE GLOBAL
diff --git a/mysql-test/suite/sys_vars/r/sysvars_server_notembedded.result b/mysql-test/suite/sys_vars/r/sysvars_server_notembedded.result
index c180518210a..b6ff7e694b8 100644
--- a/mysql-test/suite/sys_vars/r/sysvars_server_notembedded.result
+++ b/mysql-test/suite/sys_vars/r/sysvars_server_notembedded.result
@@ -12,6 +12,16 @@ variable_name not in (
'log_tc_size','have_sanitizer'
)
order by variable_name;
+VARIABLE_NAME ALLOW_SUSPICIOUS_UDFS
+VARIABLE_SCOPE GLOBAL
+VARIABLE_TYPE BOOLEAN
+VARIABLE_COMMENT Allows use of user-defined functions (UDFs) consisting of only one symbol xxx() without corresponding xxx_init() or xxx_deinit(). That also means that one can load any function from any library, for example exit() from libc.so
+NUMERIC_MIN_VALUE NULL
+NUMERIC_MAX_VALUE NULL
+NUMERIC_BLOCK_SIZE NULL
+ENUM_VALUE_LIST OFF,ON
+READ_ONLY YES
+COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME ALTER_ALGORITHM
VARIABLE_SCOPE SESSION
VARIABLE_TYPE ENUM
@@ -2422,6 +2432,16 @@ NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL
READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED
+VARIABLE_NAME OPTIMIZER_EXTRA_PRUNING_DEPTH
+VARIABLE_SCOPE SESSION
+VARIABLE_TYPE BIGINT UNSIGNED
+VARIABLE_COMMENT If the optimizer needs to enumerate join prefix of this size or larger, then it will try agressively prune away the search space.
+NUMERIC_MIN_VALUE 0
+NUMERIC_MAX_VALUE 62
+NUMERIC_BLOCK_SIZE 1
+ENUM_VALUE_LIST NULL
+READ_ONLY NO
+COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME OPTIMIZER_MAX_SEL_ARG_WEIGHT
VARIABLE_SCOPE SESSION
VARIABLE_TYPE BIGINT UNSIGNED
@@ -2435,9 +2455,9 @@ COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME OPTIMIZER_PRUNE_LEVEL
VARIABLE_SCOPE SESSION
VARIABLE_TYPE BIGINT UNSIGNED
-VARIABLE_COMMENT Controls the heuristic(s) applied during query optimization to prune less-promising partial plans from the optimizer search space. Meaning: 0 - do not apply any heuristic, thus perform exhaustive search; 1 - prune plans based on number of retrieved rows
+VARIABLE_COMMENT Controls the heuristic(s) applied during query optimization to prune less-promising partial plans from the optimizer search space. Meaning: 0 - do not apply any heuristic, thus perform exhaustive search: 1 - prune plans based on cost and number of retrieved rows eq_ref: 2 - prune also if we find an eq_ref chain
NUMERIC_MIN_VALUE 0
-NUMERIC_MAX_VALUE 1
+NUMERIC_MAX_VALUE 2
NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL
READ_ONLY NO
@@ -3592,6 +3612,16 @@ NUMERIC_BLOCK_SIZE NULL
ENUM_VALUE_LIST OFF,ON
READ_ONLY YES
COMMAND_LINE_ARGUMENT NULL
+VARIABLE_NAME SKIP_GRANT_TABLES
+VARIABLE_SCOPE GLOBAL
+VARIABLE_TYPE BOOLEAN
+VARIABLE_COMMENT Start without grant tables. This gives all users FULL ACCESS to all tables.
+NUMERIC_MIN_VALUE NULL
+NUMERIC_MAX_VALUE NULL
+NUMERIC_BLOCK_SIZE NULL
+ENUM_VALUE_LIST OFF,ON
+READ_ONLY YES
+COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME SKIP_NAME_RESOLVE
VARIABLE_SCOPE GLOBAL
VARIABLE_TYPE BOOLEAN
@@ -3702,6 +3732,16 @@ NUMERIC_BLOCK_SIZE 1024
ENUM_VALUE_LIST NULL
READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED
+VARIABLE_NAME SLAVE_MAX_STATEMENT_TIME
+VARIABLE_SCOPE GLOBAL
+VARIABLE_TYPE DOUBLE
+VARIABLE_COMMENT A query that has taken more than slave_max_statement_time seconds to run on the slave will be aborted. The argument will be treated as a decimal value with microsecond precision. A value of 0 (default) means no timeout
+NUMERIC_MIN_VALUE 0
+NUMERIC_MAX_VALUE 31536000
+NUMERIC_BLOCK_SIZE NULL
+ENUM_VALUE_LIST NULL
+READ_ONLY NO
+COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME SLAVE_NET_TIMEOUT
VARIABLE_SCOPE GLOBAL
VARIABLE_TYPE INT UNSIGNED
diff --git a/mysql-test/suite/sys_vars/r/sysvars_wsrep.result b/mysql-test/suite/sys_vars/r/sysvars_wsrep.result
index df8b7c73f9d..4ca95338e56 100644
--- a/mysql-test/suite/sys_vars/r/sysvars_wsrep.result
+++ b/mysql-test/suite/sys_vars/r/sysvars_wsrep.result
@@ -1,6 +1,21 @@
select * from information_schema.system_variables
where variable_name like 'wsrep%'
order by variable_name;
+VARIABLE_NAME WSREP_ALLOWLIST
+SESSION_VALUE NULL
+GLOBAL_VALUE
+GLOBAL_VALUE_ORIGIN COMPILE-TIME
+DEFAULT_VALUE
+VARIABLE_SCOPE GLOBAL
+VARIABLE_TYPE VARCHAR
+VARIABLE_COMMENT Allowed IP addresses split by comma delimiter
+NUMERIC_MIN_VALUE NULL
+NUMERIC_MAX_VALUE NULL
+NUMERIC_BLOCK_SIZE NULL
+ENUM_VALUE_LIST NULL
+READ_ONLY YES
+COMMAND_LINE_ARGUMENT REQUIRED
+GLOBAL_VALUE_PATH NULL
VARIABLE_NAME WSREP_AUTO_INCREMENT_CONTROL
SESSION_VALUE NULL
GLOBAL_VALUE ON
diff --git a/mysql-test/suite/sys_vars/t/allow_suspicious_udfs.test b/mysql-test/suite/sys_vars/t/allow_suspicious_udfs.test
new file mode 100644
index 00000000000..9179cfbef4d
--- /dev/null
+++ b/mysql-test/suite/sys_vars/t/allow_suspicious_udfs.test
@@ -0,0 +1,14 @@
+--echo #
+--echo # MDEV-24815 Show "--allow-suspicious-udfs" state in SYSTEM VARIABLES
+--echo #
+
+SELECT @@allow_suspicious_udfs AS EXPECT_0;
+
+# Restart the server the server with "--allow-suspicious-udfs" option
+--let $restart_parameters = "--allow-suspicious-udfs"
+--source include/restart_mysqld.inc
+SELECT @@allow_suspicious_udfs AS EXPECT_1;
+
+# Disable "--allow-suspicious-udfs" to restore the original state
+--let $restart_parameters = "--skip-allow-suspicious-udfs"
+--source include/restart_mysqld.inc
diff --git a/mysql-test/suite/sys_vars/t/completion_type_func.test b/mysql-test/suite/sys_vars/t/completion_type_func.test
index 5c343cee9ab..1de4ae88cfb 100644
--- a/mysql-test/suite/sys_vars/t/completion_type_func.test
+++ b/mysql-test/suite/sys_vars/t/completion_type_func.test
@@ -146,7 +146,7 @@ COMMIT;
--echo ## Inserting rows should give error here because connection should ##
--echo ## disconnect after using COMMIT ##
---Error 2006,2013,ER_QUERY_INTERRUPTED,ER_CONNECTION_KILLED,5014
+--Error 2006,2013,ER_QUERY_INTERRUPTED,ER_CONNECTION_KILLED,5014,2026
INSERT INTO t1 VALUES(4,'Record_4');
connection test_con2;
@@ -160,7 +160,7 @@ INSERT INTO t1 VALUES(12,'Record_12');
ROLLBACK;
--echo ## Expect a failure due to COMMIT/ROLLBACK AND RELEASE behavior ##
---Error 2006,2013,ER_QUERY_INTERRUPTED,ER_CONNECTION_KILLED,5014
+--Error 2006,2013,ER_QUERY_INTERRUPTED,ER_CONNECTION_KILLED,5014,2026
INSERT INTO t1 VALUES(4,'Record_4');
connection default;
diff --git a/mysql-test/suite/sys_vars/t/innodb_fatal_semaphore_wait_threshold.test b/mysql-test/suite/sys_vars/t/innodb_fatal_semaphore_wait_threshold.test
index b1b2f9fdda9..cce150aec02 100644
--- a/mysql-test/suite/sys_vars/t/innodb_fatal_semaphore_wait_threshold.test
+++ b/mysql-test/suite/sys_vars/t/innodb_fatal_semaphore_wait_threshold.test
@@ -43,7 +43,7 @@ let $counter= 80;
let $mysql_errno= 0;
while (!$mysql_errno)
{
- --error 0,ER_SERVER_SHUTDOWN,ER_CONNECTION_KILLED,2002,2006,2013,5014
+ --error 0,ER_SERVER_SHUTDOWN,ER_CONNECTION_KILLED,2002,2006,2013,5014,2026
show status;
dec $counter;
diff --git a/mysql-test/suite/sys_vars/t/innodb_prefix_index_cluster_optimization_basic.test b/mysql-test/suite/sys_vars/t/innodb_prefix_index_cluster_optimization_basic.test
deleted file mode 100644
index 4e272fbd9c5..00000000000
--- a/mysql-test/suite/sys_vars/t/innodb_prefix_index_cluster_optimization_basic.test
+++ /dev/null
@@ -1,76 +0,0 @@
---source include/have_innodb.inc
-
-SET @start_global_value = @@global.innodb_prefix_index_cluster_optimization;
-SELECT @start_global_value;
-
---echo #
---echo # exists as global only
---echo #
-
---echo Valid values are 'ON' and 'OFF'
-select @@global.innodb_prefix_index_cluster_optimization in (0, 1);
-select @@global.innodb_prefix_index_cluster_optimization;
---error ER_INCORRECT_GLOBAL_LOCAL_VAR
-select @@session.innodb_prefix_index_cluster_optimization;
-show global variables like 'innodb_prefix_index_cluster_optimization';
-show session variables like 'innodb_prefix_index_cluster_optimization';
-select * from information_schema.global_variables where variable_name = 'innodb_prefix_index_cluster_optimization';
-select * from information_schema.session_variables where variable_name = 'innodb_prefix_index_cluster_optimization';
-
---echo #
---echo # show that it's writable
---echo #
-
-set global innodb_prefix_index_cluster_optimization = 'OFF';
-select @@global.innodb_prefix_index_cluster_optimization;
-select * from information_schema.global_variables where variable_name = 'innodb_prefix_index_cluster_optimization';
-select * from information_schema.session_variables where variable_name = 'innodb_prefix_index_cluster_optimization';
-set @@global.innodb_prefix_index_cluster_optimization = 'ON';
-select @@global.innodb_prefix_index_cluster_optimization;
-select * from information_schema.global_variables where variable_name = 'innodb_prefix_index_cluster_optimization';
-select * from information_schema.session_variables where variable_name = 'innodb_prefix_index_cluster_optimization';
-set global innodb_prefix_index_cluster_optimization = 0;
-select @@global.innodb_prefix_index_cluster_optimization;
-select * from information_schema.global_variables where variable_name = 'innodb_prefix_index_cluster_optimization';
-select * from information_schema.session_variables where variable_name = 'innodb_prefix_index_cluster_optimization';
-set @@global.innodb_prefix_index_cluster_optimization = 1;
-select @@global.innodb_prefix_index_cluster_optimization;
-select * from information_schema.global_variables where variable_name = 'innodb_prefix_index_cluster_optimization';
-select * from information_schema.session_variables where variable_name = 'innodb_prefix_index_cluster_optimization';
-
---error ER_GLOBAL_VARIABLE
-set session innodb_prefix_index_cluster_optimization = 'OFF';
-select @@global.innodb_prefix_index_cluster_optimization;
-select * from information_schema.global_variables where variable_name = 'innodb_prefix_index_cluster_optimization';
-select * from information_schema.session_variables where variable_name = 'innodb_prefix_index_cluster_optimization';
-
---error ER_GLOBAL_VARIABLE
-set @@session.innodb_prefix_index_cluster_optimization = 'ON';
-select @@global.innodb_prefix_index_cluster_optimization;
-select * from information_schema.global_variables where variable_name = 'innodb_prefix_index_cluster_optimization';
-select * from information_schema.session_variables where variable_name = 'innodb_prefix_index_cluster_optimization';
-
---echo #
---echo # incorrect types
---echo #
-
---error ER_WRONG_TYPE_FOR_VAR
-set global innodb_prefix_index_cluster_optimization = 1.1;
---error ER_WRONG_TYPE_FOR_VAR
-set global innodb_prefix_index_cluster_optimization = 1e1;
---error ER_WRONG_VALUE_FOR_VAR
-set global innodb_prefix_index_cluster_optimization = 2;
---error ER_WRONG_VALUE_FOR_VAR
-set global innodb_prefix_index_cluster_optimization = -3;
-select @@global.innodb_prefix_index_cluster_optimization;
-select * from information_schema.global_variables where variable_name = 'innodb_prefix_index_cluster_optimization';
-select * from information_schema.session_variables where variable_name = 'innodb_prefix_index_cluster_optimization';
---error ER_WRONG_VALUE_FOR_VAR
-set global innodb_prefix_index_cluster_optimization = 'AUTO';
-
---echo #
---echo # Cleanup
---echo #
-
-SET @@global.innodb_prefix_index_cluster_optimization = @start_global_value;
-SELECT @@global.innodb_prefix_index_cluster_optimization;
diff --git a/mysql-test/suite/sys_vars/t/innodb_version_basic.test b/mysql-test/suite/sys_vars/t/innodb_version_basic.test
deleted file mode 100644
index 182841048f7..00000000000
--- a/mysql-test/suite/sys_vars/t/innodb_version_basic.test
+++ /dev/null
@@ -1,30 +0,0 @@
-
-#
-# 2010-01-27 OBN - Added
-#
-
---source include/have_innodb.inc
-
-#
-# show the global and session values;
-#
---let $inno_ver= `select @@global.innodb_version`
---replace_result $inno_ver x.y.z
-select @@global.innodb_version;
---error ER_INCORRECT_GLOBAL_LOCAL_VAR
-select @@session.innodb_version;
---echo show global variables like 'innodb_version' disabled so to not change with every version;
---echo show session variables like 'innodb_version' disabled so to not change with every version;
---disable_warnings
-select VARIABLE_VALUE=@@global.innodb_version from information_schema.global_variables where variable_name='innodb_version';
-select VARIABLE_VALUE=@@global.innodb_version from information_schema.session_variables where variable_name='innodb_version';
---enable_warnings
-
-#
-# show that it's read-only
-#
---error ER_INCORRECT_GLOBAL_LOCAL_VAR
-set global innodb_version=1;
---error ER_INCORRECT_GLOBAL_LOCAL_VAR
-set session innodb_version=1;
-
diff --git a/mysql-test/suite/sys_vars/t/optimizer_prune_level_basic.test b/mysql-test/suite/sys_vars/t/optimizer_prune_level_basic.test
index 1e3a8bc3d7f..c857653bc31 100644
--- a/mysql-test/suite/sys_vars/t/optimizer_prune_level_basic.test
+++ b/mysql-test/suite/sys_vars/t/optimizer_prune_level_basic.test
@@ -60,10 +60,10 @@ SELECT @@session.optimizer_prune_level;
###########################################################
SET @@global.optimizer_prune_level = DEFAULT;
-SELECT @@global.optimizer_prune_level = 1;
+SELECT @@global.optimizer_prune_level = 2;
SET @@session.optimizer_prune_level = DEFAULT;
-SELECT @@session.optimizer_prune_level = 1;
+SELECT @@session.optimizer_prune_level = 2;
--echo '#--------------------FN_DYNVARS_115_03-------------------------#'
@@ -77,6 +77,8 @@ SET @@global.optimizer_prune_level = 0;
SELECT @@global.optimizer_prune_level;
SET @@global.optimizer_prune_level = 1;
SELECT @@global.optimizer_prune_level;
+SET @@global.optimizer_prune_level = 2;
+SELECT @@global.optimizer_prune_level;
SET @@global.optimizer_prune_level = TRUE;
SELECT @@global.optimizer_prune_level;
SET @@global.optimizer_prune_level = FALSE;
@@ -94,6 +96,8 @@ SET @@session.optimizer_prune_level = 0;
SELECT @@session.optimizer_prune_level;
SET @@session.optimizer_prune_level = 1;
SELECT @@session.optimizer_prune_level;
+SET @@session.optimizer_prune_level = 2;
+SELECT @@session.optimizer_prune_level;
SET @@session.optimizer_prune_level = TRUE;
SELECT @@session.optimizer_prune_level;
SET @@session.optimizer_prune_level = FALSE;
@@ -107,7 +111,7 @@ SELECT @@session.optimizer_prune_level;
--Error ER_WRONG_TYPE_FOR_VAR
SET @@global.optimizer_prune_level = ON;
---echo 'Bug# 34840: Since it is a boolean variable, it should not give errors on 'ON' & 'OFF' values';
+--echo 'Bug# 34840: Since it is not a boolean variable, it should give errors on 'ON' & 'OFF' values';
--Error ER_WRONG_TYPE_FOR_VAR
SET @@global.optimizer_prune_level = OFF;
--Error ER_WRONG_TYPE_FOR_VAR
@@ -122,9 +126,11 @@ SET @@global.optimizer_prune_level = FELSE;
SET @@global.optimizer_prune_level = -1024;
SELECT @@global.optimizer_prune_level;
---echo 'Bug# 34840: Since it is a boolean variable, it should give errors on numeric values';
+--echo 'Bug# 34840: Since it is not a boolean variable, it should no give errors on numeric values';
SET @@global.optimizer_prune_level = 65536;
+SET @@global.optimizer_prune_level = 3;
+select @@global.optimizer_prune_level;
--Error ER_WRONG_TYPE_FOR_VAR
SET @@global.optimizer_prune_level = 65530.34;
--Error ER_WRONG_TYPE_FOR_VAR
diff --git a/mysql-test/suite/sys_vars/t/sysvars_innodb.test b/mysql-test/suite/sys_vars/t/sysvars_innodb.test
index 6d46c22683f..2680e442da4 100644
--- a/mysql-test/suite/sys_vars/t/sysvars_innodb.test
+++ b/mysql-test/suite/sys_vars/t/sysvars_innodb.test
@@ -8,7 +8,6 @@
select VARIABLE_NAME, SESSION_VALUE, DEFAULT_VALUE, VARIABLE_SCOPE, VARIABLE_TYPE, VARIABLE_COMMENT, NUMERIC_MIN_VALUE, NUMERIC_MAX_VALUE, NUMERIC_BLOCK_SIZE, ENUM_VALUE_LIST, READ_ONLY, COMMAND_LINE_ARGUMENT from information_schema.system_variables
where variable_name like 'innodb%' and
variable_name not in (
- 'innodb_version', # always the same as the server version
'innodb_numa_interleave', # only available WITH_NUMA
'innodb_evict_tables_on_commit_debug', # one may want to override this
'innodb_use_native_aio', # default value depends on OS
diff --git a/mysql-test/suite/vcol/r/vcol_misc.result b/mysql-test/suite/vcol/r/vcol_misc.result
index 17b2f2af00d..eb22e4bfdc5 100644
--- a/mysql-test/suite/vcol/r/vcol_misc.result
+++ b/mysql-test/suite/vcol/r/vcol_misc.result
@@ -403,7 +403,7 @@ Table Create Table
t1 CREATE TABLE `t1` (
`a` datetime DEFAULT NULL,
`b` timestamp GENERATED ALWAYS AS (cast(`a` as datetime)) VIRTUAL,
- `c` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00'
+ `c` timestamp NULL DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
DROP TABLE t1;
#
diff --git a/mysql-test/suite/vcol/r/vcol_supported_sql_funcs.result b/mysql-test/suite/vcol/r/vcol_supported_sql_funcs.result
index 832047a8d6c..99d8dea36dc 100644
--- a/mysql-test/suite/vcol/r/vcol_supported_sql_funcs.result
+++ b/mysql-test/suite/vcol/r/vcol_supported_sql_funcs.result
@@ -2513,8 +2513,8 @@ create table t1 (a timestamp, b timestamp, c long as (timestampdiff(MONTH, a,b))
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
- `a` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
- `b` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `a` timestamp NULL DEFAULT NULL,
+ `b` timestamp NULL DEFAULT NULL,
`c` mediumtext GENERATED ALWAYS AS (timestampdiff(MONTH,`a`,`b`)) VIRTUAL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
insert into t1 values ('2003-02-01','2003-05-01',default);
diff --git a/mysql-test/suite/versioning/r/partition,heap.rdiff b/mysql-test/suite/versioning/r/partition,heap.rdiff
index 387a3cee754..d6c8363fc70 100644
--- a/mysql-test/suite/versioning/r/partition,heap.rdiff
+++ b/mysql-test/suite/versioning/r/partition,heap.rdiff
@@ -31,7 +31,7 @@
-Table Create Table
-tp1 CREATE TABLE `tp1` (
- `x` int(11) NOT NULL AUTO_INCREMENT,
-- `t` timestamp(6) NOT NULL DEFAULT '2001-11-11 11:11:11.000000',
+- `t` timestamp(6) NULL DEFAULT '2001-11-11 11:11:11.000000',
- `b` blob /*!100301 COMPRESSED*/ DEFAULT NULL,
- `c` varchar(1033) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL,
- `u` int(11) DEFAULT NULL,
@@ -56,7 +56,7 @@
-Table Create Table
-t1 CREATE TABLE `t1` (
- `x` int(11) NOT NULL AUTO_INCREMENT,
-- `t` timestamp(6) NOT NULL DEFAULT '2001-11-11 11:11:11.000000',
+- `t` timestamp(6) NULL DEFAULT '2001-11-11 11:11:11.000000',
- `b` blob /*!100301 COMPRESSED*/ DEFAULT NULL,
- `c` varchar(1033) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL,
- `u` int(11) DEFAULT NULL,
@@ -117,7 +117,7 @@
-Table Create Table
-t1 CREATE TABLE `t1` (
- `x` int(11) NOT NULL AUTO_INCREMENT,
-- `t` timestamp(6) NOT NULL DEFAULT '2001-11-11 11:11:11.000000',
+- `t` timestamp(6) NULL DEFAULT '2001-11-11 11:11:11.000000',
- `b` blob /*!100301 COMPRESSED*/ DEFAULT NULL,
- `c` varchar(1033) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL,
- `u` int(11) DEFAULT NULL,
@@ -154,7 +154,7 @@
-Table Create Table
-t1 CREATE TABLE `t1` (
- `x` int(11) NOT NULL AUTO_INCREMENT,
-- `t` timestamp(6) NOT NULL DEFAULT '2001-11-11 11:11:11.000000',
+- `t` timestamp(6) NULL DEFAULT '2001-11-11 11:11:11.000000',
- `b` blob /*!100301 COMPRESSED*/ DEFAULT NULL,
- `c` varchar(1033) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL,
- `u` int(11) DEFAULT NULL,
@@ -189,7 +189,7 @@
-Table Create Table
-t1 CREATE TABLE `t1` (
- `x` int(11) NOT NULL AUTO_INCREMENT,
-- `t` timestamp(6) NOT NULL DEFAULT '2001-11-11 11:11:11.000000',
+- `t` timestamp(6) NULL DEFAULT '2001-11-11 11:11:11.000000',
- `b` blob /*!100301 COMPRESSED*/ DEFAULT NULL,
- `c` varchar(1033) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL,
- `u` int(11) DEFAULT NULL,
diff --git a/mysql-test/suite/versioning/r/partition.result b/mysql-test/suite/versioning/r/partition.result
index 0266464c5d6..4a3f846ae49 100644
--- a/mysql-test/suite/versioning/r/partition.result
+++ b/mysql-test/suite/versioning/r/partition.result
@@ -2273,7 +2273,7 @@ show create table tp1;
Table Create Table
tp1 CREATE TABLE `tp1` (
`x` int(11) NOT NULL AUTO_INCREMENT,
- `t` timestamp(6) NOT NULL DEFAULT '2001-11-11 11:11:11.000000',
+ `t` timestamp(6) NULL DEFAULT '2001-11-11 11:11:11.000000',
`b` blob /*!100301 COMPRESSED*/ DEFAULT NULL,
`c` varchar(1033) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL,
`u` int(11) DEFAULT NULL,
@@ -2298,7 +2298,7 @@ show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`x` int(11) NOT NULL AUTO_INCREMENT,
- `t` timestamp(6) NOT NULL DEFAULT '2001-11-11 11:11:11.000000',
+ `t` timestamp(6) NULL DEFAULT '2001-11-11 11:11:11.000000',
`b` blob /*!100301 COMPRESSED*/ DEFAULT NULL,
`c` varchar(1033) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL,
`u` int(11) DEFAULT NULL,
@@ -2915,7 +2915,7 @@ show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`x` int(11) NOT NULL AUTO_INCREMENT,
- `t` timestamp(6) NOT NULL DEFAULT '2001-11-11 11:11:11.000000',
+ `t` timestamp(6) NULL DEFAULT '2001-11-11 11:11:11.000000',
`b` blob /*!100301 COMPRESSED*/ DEFAULT NULL,
`c` varchar(1033) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL,
`u` int(11) DEFAULT NULL,
@@ -2952,7 +2952,7 @@ show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`x` int(11) NOT NULL AUTO_INCREMENT,
- `t` timestamp(6) NOT NULL DEFAULT '2001-11-11 11:11:11.000000',
+ `t` timestamp(6) NULL DEFAULT '2001-11-11 11:11:11.000000',
`b` blob /*!100301 COMPRESSED*/ DEFAULT NULL,
`c` varchar(1033) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL,
`u` int(11) DEFAULT NULL,
@@ -2987,7 +2987,7 @@ show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`x` int(11) NOT NULL AUTO_INCREMENT,
- `t` timestamp(6) NOT NULL DEFAULT '2001-11-11 11:11:11.000000',
+ `t` timestamp(6) NULL DEFAULT '2001-11-11 11:11:11.000000',
`b` blob /*!100301 COMPRESSED*/ DEFAULT NULL,
`c` varchar(1033) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL,
`u` int(11) DEFAULT NULL,
diff --git a/mysql-test/suite/versioning/r/simple.result b/mysql-test/suite/versioning/r/simple.result
index df47f80c9e9..39ced386a71 100644
--- a/mysql-test/suite/versioning/r/simple.result
+++ b/mysql-test/suite/versioning/r/simple.result
@@ -81,7 +81,7 @@ period for system_time(d,e)
) with system versioning;
show columns from t1;
Field Type Null Key Default Extra
-a timestamp(6) NO current_timestamp(6) on update current_timestamp(6)
+a timestamp(6) YES NULL
b timestamp(6) YES NULL VIRTUAL GENERATED
c timestamp(6) YES NULL STORED GENERATED
d timestamp(6) NO NULL STORED GENERATED
@@ -92,8 +92,8 @@ table_schema test
table_name t1
column_name a
ordinal_position 1
-column_default current_timestamp(6)
-is_nullable NO
+column_default NULL
+is_nullable YES
data_type timestamp
character_maximum_length NULL
character_octet_length NULL
@@ -104,7 +104,7 @@ character_set_name NULL
collation_name NULL
column_type timestamp(6)
column_key
-extra on update current_timestamp(6)
+extra
column_comment
is_generated NEVER
generation_expression NULL
diff --git a/mysql-test/suite/wsrep/r/variables.result b/mysql-test/suite/wsrep/r/variables.result
index 8df0210b2d1..2d5d5a66232 100644
--- a/mysql-test/suite/wsrep/r/variables.result
+++ b/mysql-test/suite/wsrep/r/variables.result
@@ -88,6 +88,7 @@ wsrep_thread_count 2
# variables
SELECT VARIABLE_NAME FROM INFORMATION_SCHEMA.SESSION_VARIABLES WHERE VARIABLE_NAME LIKE "wsrep%" ORDER BY VARIABLE_NAME;
VARIABLE_NAME
+WSREP_ALLOWLIST
WSREP_AUTO_INCREMENT_CONTROL
WSREP_CAUSAL_READS
WSREP_CERTIFICATION_RULES
diff --git a/mysql-test/suite/wsrep/r/variables_debug.result b/mysql-test/suite/wsrep/r/variables_debug.result
index 109b25cd898..2ce69827911 100644
--- a/mysql-test/suite/wsrep/r/variables_debug.result
+++ b/mysql-test/suite/wsrep/r/variables_debug.result
@@ -89,6 +89,7 @@ wsrep_thread_count 2
# variables
SELECT VARIABLE_NAME FROM INFORMATION_SCHEMA.SESSION_VARIABLES WHERE VARIABLE_NAME LIKE "wsrep%" ORDER BY VARIABLE_NAME;
VARIABLE_NAME
+WSREP_ALLOWLIST
WSREP_AUTO_INCREMENT_CONTROL
WSREP_CAUSAL_READS
WSREP_CERTIFICATION_RULES
diff --git a/mysql-test/suite/wsrep/t/variables.test b/mysql-test/suite/wsrep/t/variables.test
index e40ac7b8772..c28638e78f1 100644
--- a/mysql-test/suite/wsrep/t/variables.test
+++ b/mysql-test/suite/wsrep/t/variables.test
@@ -3,7 +3,7 @@
--source include/have_innodb.inc
--source include/galera_no_debug_sync.inc
---let $galera_version=26.4.9
+--let $galera_version=26.4.11
source include/check_galera_version.inc;
source include/galera_variables_ok.inc;
diff --git a/mysql-test/suite/wsrep/t/variables_debug.test b/mysql-test/suite/wsrep/t/variables_debug.test
index 29747e48f18..5e90d61c84e 100644
--- a/mysql-test/suite/wsrep/t/variables_debug.test
+++ b/mysql-test/suite/wsrep/t/variables_debug.test
@@ -5,7 +5,7 @@
--source include/have_debug_sync.inc
--source include/galera_have_debug_sync.inc
---let $galera_version=26.4.9
+--let $galera_version=26.4.11
source include/check_galera_version.inc;
source include/galera_variables_ok.inc;
diff --git a/mysys/charset-def.c b/mysys/charset-def.c
index 2e23adc5147..b884fa5c78c 100644
--- a/mysys/charset-def.c
+++ b/mysys/charset-def.c
@@ -15,6 +15,8 @@
#include "mysys_priv.h"
+#include "../strings/ctype-uca.h"
+
/*
Include all compiled character sets into the client
If a client don't want to use all of them, he can define his own
@@ -181,6 +183,74 @@ extern struct charset_info_st my_charset_utf8mb4_unicode_520_nopad_ci;
#endif /* HAVE_UCA_COLLATIONS */
+
+static my_bool
+my_uca1400_collation_definition_add(MY_CHARSET_LOADER *loader,
+ my_cs_encoding_t charset_id,
+ uint tailoring_id,
+ my_bool nopad,
+ my_bool secondary_level,
+ my_bool tertiary_level)
+{
+ struct charset_info_st *tmp;
+ uint collation_id= my_uca1400_make_builtin_collation_id(charset_id,
+ tailoring_id,
+ nopad,
+ secondary_level,
+ tertiary_level);
+ if (!collation_id)
+ return FALSE;
+ if (!(tmp= (struct charset_info_st*)
+ my_once_alloc(sizeof(CHARSET_INFO),MYF(0))))
+ return TRUE;
+ if (my_uca1400_collation_definition_init(loader, tmp, collation_id))
+ return TRUE;
+ add_compiled_collation(tmp);
+ return FALSE;
+}
+
+
+static my_bool
+my_uca1400_collation_definitions_add()
+{
+ my_cs_encoding_t charset_id;
+ MY_CHARSET_LOADER loader;
+ my_charset_loader_init_mysys(&loader);
+ for (charset_id= (my_cs_encoding_t) 0;
+ charset_id <= (my_cs_encoding_t) MY_CS_ENCODING_LAST;
+ charset_id++)
+ {
+ uint tailoring_id;
+ for (tailoring_id= 0 ;
+ tailoring_id < MY_UCA1400_COLLATION_DEFINITION_COUNT;
+ tailoring_id++)
+ {
+ uint nopad;
+ for (nopad= 0; nopad < 2; nopad++)
+ {
+ uint secondary_level;
+ for (secondary_level= 0; secondary_level < 2; secondary_level++)
+ {
+ if (my_uca1400_collation_definition_add(&loader,
+ charset_id, tailoring_id,
+ (my_bool) nopad,
+ (my_bool) secondary_level,
+ FALSE))
+ return TRUE;
+ if (my_uca1400_collation_definition_add(&loader,
+ charset_id, tailoring_id,
+ (my_bool) nopad,
+ (my_bool) secondary_level,
+ TRUE))
+ return TRUE;
+ }
+ }
+ }
+ }
+ return FALSE;
+}
+
+
my_bool init_compiled_charsets(myf flags __attribute__((unused)))
{
CHARSET_INFO *cs;
@@ -470,6 +540,9 @@ my_bool init_compiled_charsets(myf flags __attribute__((unused)))
/* Copy compiled charsets */
for (cs=compiled_charsets; cs->coll_name.str; cs++)
add_compiled_extra_collation((struct charset_info_st *) cs);
+
+ if (my_uca1400_collation_definitions_add())
+ return TRUE;
return FALSE;
}
diff --git a/mysys/charset.c b/mysys/charset.c
index 560c713a361..67abfe628a2 100644
--- a/mysys/charset.c
+++ b/mysys/charset.c
@@ -308,8 +308,6 @@ copy_uca_collation(struct charset_info_st *to, CHARSET_INFO *from,
to->max_sort_char= from->max_sort_char;
to->mbminlen= from->mbminlen;
to->mbmaxlen= from->mbmaxlen;
- to->caseup_multiply= from->caseup_multiply;
- to->casedn_multiply= from->casedn_multiply;
to->state|= MY_CS_AVAILABLE | MY_CS_LOADED |
MY_CS_STRNXFRM | MY_CS_UNICODE;
}
@@ -359,7 +357,6 @@ static int add_collation(struct charset_info_st *cs)
if (cs_copy_data(newcs,cs))
return MY_XML_ERROR;
- newcs->caseup_multiply= newcs->casedn_multiply= 1;
newcs->levels_for_order= 1;
if (!strcmp(cs->cs_name.str,"ucs2") )
@@ -836,9 +833,9 @@ static CHARSET_INFO *find_collation_data_inheritance_source(CHARSET_INFO *cs, my
if (cs->tailoring &&
!strncmp(cs->tailoring, "[import ", 8) &&
(end= strchr(cs->tailoring + 8, ']')) &&
- (beg= cs->tailoring + 8) + MY_CS_NAME_SIZE > end)
+ (beg= cs->tailoring + 8) + MY_CS_COLLATION_NAME_SIZE > end)
{
- char name[MY_CS_NAME_SIZE + 1];
+ char name[MY_CS_COLLATION_NAME_SIZE + 1];
memcpy(name, beg, end - beg);
name[end - beg]= '\0';
return inheritance_source_by_id(cs, get_collation_number(name,MYF(flags)));
diff --git a/mysys/my_rnd.c b/mysys/my_rnd.c
index 0af251b4ade..b1dd8b1f36f 100644
--- a/mysys/my_rnd.c
+++ b/mysys/my_rnd.c
@@ -64,25 +64,3 @@ double my_rnd(struct my_rnd_struct *rand_st)
return (((double) seed1)/rand_st->max_value_dbl);
}
-
-/**
- Generate a random number using the OpenSSL/yaSSL supplied
- random number generator if available.
-
- @param rand_st [INOUT] Structure used for number generation
- only if none of the SSL libraries are
- available.
-
- @retval Generated random number.
-*/
-
-double my_rnd_ssl(struct my_rnd_struct *rand_st)
-{
-#if defined(HAVE_OPENSSL)
- rc= RAND_bytes((unsigned char *) &res, sizeof (unsigned int));
- if (rc)
- return (double)res / (double)UINT_MAX;
-#endif /* defined(HAVE_OPENSSL) */
-
- return my_rnd(rand_st);
-}
diff --git a/plugin/feedback/utils.cc b/plugin/feedback/utils.cc
index bbbd5850089..c31422cc7ec 100644
--- a/plugin/feedback/utils.cc
+++ b/plugin/feedback/utils.cc
@@ -403,7 +403,7 @@ int fill_collation_statistics(THD *thd, TABLE_LIST *tables)
if (my_collation_is_known_id(id) &&
(count= my_collation_statistics_get_use_count(id)))
{
- char name[MY_CS_NAME_SIZE + 32];
+ char name[MY_CS_COLLATION_NAME_SIZE + 32];
size_t namelen= my_snprintf(name, sizeof(name),
"Collation used %s",
get_charset_name(id));
diff --git a/plugin/password_reuse_check/password_reuse_check.c b/plugin/password_reuse_check/password_reuse_check.c
index 8f5973721d8..47c9b4531a8 100644
--- a/plugin/password_reuse_check/password_reuse_check.c
+++ b/plugin/password_reuse_check/password_reuse_check.c
@@ -95,7 +95,7 @@ static int create_table(MYSQL *mysql)
// 512/8 = 64
STRING_WITH_LEN("CREATE TABLE mysql." HISTORY_DB_NAME
" ( hash binary(64),"
- " time timestamp default current_timestamp,"
+ " time timestamp not null default current_timestamp,"
" primary key (hash), index tm (time) )"
" ENGINE=Aria")))
{
diff --git a/plugin/qc_info/qc_info.cc b/plugin/qc_info/qc_info.cc
index a46e2d9fbf2..a73bc8ea9ec 100644
--- a/plugin/qc_info/qc_info.cc
+++ b/plugin/qc_info/qc_info.cc
@@ -96,7 +96,7 @@ static ST_FIELD_INFO qc_info_fields[]=
Column("GROUP_CONCAT_MAX_LENGTH",SLonglong(MY_INT32_NUM_DECIMAL_DIGITS), NOT_NULL),
Column("CHARACTER_SET_CLIENT", CSName(), NOT_NULL),
Column("CHARACTER_SET_RESULT", CSName(), NOT_NULL),
- Column("COLLATION", CSName(), NOT_NULL),
+ Column("COLLATION", CLName(), NOT_NULL),
Column("TIMEZONE", Varchar(50), NOT_NULL),
Column("DEFAULT_WEEK_FORMAT", SLong(), NOT_NULL),
Column("DIV_PRECISION_INCREMENT",SLong(), NOT_NULL),
diff --git a/plugin/type_inet/item_inetfunc.cc b/plugin/type_inet/item_inetfunc.cc
index b23ae04a861..514a3760cd5 100644
--- a/plugin/type_inet/item_inetfunc.cc
+++ b/plugin/type_inet/item_inetfunc.cc
@@ -151,7 +151,7 @@ String *Item_func_inet6_aton::val_str(String *buffer)
if ((null_value= tmp.is_null()))
return NULL;
- Inet4_null ipv4(*tmp.string());
+ Inet4Bundle::Fbt_null ipv4(*tmp.string());
if (!ipv4.is_null())
{
ipv4.to_binary(buffer);
@@ -190,7 +190,7 @@ String *Item_func_inet6_ntoa::val_str_ascii(String *buffer)
if ((null_value= tmp.is_null()))
return NULL;
- Inet4_null ipv4(static_cast<const Binary_string&>(*tmp.string()));
+ Inet4Bundle::Fbt_null ipv4(static_cast<const Binary_string&>(*tmp.string()));
if (!ipv4.is_null())
{
ipv4.to_string(buffer);
@@ -218,7 +218,7 @@ longlong Item_func_is_ipv4::val_int()
{
DBUG_ASSERT(fixed());
String_ptr_and_buffer<STRING_BUFFER_USUAL_SIZE> tmp(args[0]);
- return !tmp.is_null() && !Inet4_null(*tmp.string()).is_null();
+ return !tmp.is_null() && !Inet4Bundle::Fbt_null(*tmp.string()).is_null();
}
class IP6 : public Inet6Bundle::Fbt_null
diff --git a/plugin/type_inet/mysql-test/type_inet/binlog_stm_type_inet4.result b/plugin/type_inet/mysql-test/type_inet/binlog_stm_type_inet4.result
new file mode 100644
index 00000000000..81500ee78f4
--- /dev/null
+++ b/plugin/type_inet/mysql-test/type_inet/binlog_stm_type_inet4.result
@@ -0,0 +1,43 @@
+#
+# Start of 10.10 tests
+#
+#
+# MDEV-23287 The INET4 data type
+#
+CREATE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES ('0.0.0.0');
+INSERT INTO t1 VALUES ('255.255.255.255');
+PREPARE stmt FROM 'INSERT INTO t1 VALUES (?)';
+EXECUTE stmt USING CAST('0.0.0.1' AS INET4);
+EXECUTE stmt USING CAST(CONCAT(REPEAT(0x00,3), 0x02) AS INET4);
+DEALLOCATE PREPARE stmt;
+BEGIN NOT ATOMIC
+DECLARE a INET4 DEFAULT '0.0.0.3';
+INSERT INTO t1 VALUES (a);
+END;
+$$
+DROP TABLE t1;
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # GTID #-#-#
+master-bin.000001 # Query # # use `test`; CREATE TABLE t1 (a INET4)
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES ('0.0.0.0')
+master-bin.000001 # Query # # COMMIT
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES ('255.255.255.255')
+master-bin.000001 # Query # # COMMIT
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES ('0.0.0.1')
+master-bin.000001 # Query # # COMMIT
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES ('0.0.0.2')
+master-bin.000001 # Query # # COMMIT
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES ( NAME_CONST('a','0.0.0.3'))
+master-bin.000001 # Query # # COMMIT
+master-bin.000001 # Gtid # # GTID #-#-#
+master-bin.000001 # Query # # use `test`; DROP TABLE `t1` /* generated by server */
+#
+# End of 10.10 tests
+#
diff --git a/plugin/type_inet/mysql-test/type_inet/binlog_stm_type_inet4.test b/plugin/type_inet/mysql-test/type_inet/binlog_stm_type_inet4.test
new file mode 100644
index 00000000000..87e8bbe2f46
--- /dev/null
+++ b/plugin/type_inet/mysql-test/type_inet/binlog_stm_type_inet4.test
@@ -0,0 +1,40 @@
+--source include/not_embedded.inc
+--source include/have_binlog_format_statement.inc
+
+--echo #
+--echo # Start of 10.10 tests
+--echo #
+
+--echo #
+--echo # MDEV-23287 The INET4 data type
+--echo #
+
+--disable_query_log
+reset master; # get rid of previous tests binlog
+--enable_query_log
+
+CREATE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES ('0.0.0.0');
+INSERT INTO t1 VALUES ('255.255.255.255');
+
+PREPARE stmt FROM 'INSERT INTO t1 VALUES (?)';
+EXECUTE stmt USING CAST('0.0.0.1' AS INET4);
+EXECUTE stmt USING CAST(CONCAT(REPEAT(0x00,3), 0x02) AS INET4);
+DEALLOCATE PREPARE stmt;
+
+DELIMITER $$;
+BEGIN NOT ATOMIC
+ DECLARE a INET4 DEFAULT '0.0.0.3';
+ INSERT INTO t1 VALUES (a);
+END;
+$$
+DELIMITER ;$$
+
+DROP TABLE t1;
+
+--let $binlog_file = LAST
+source include/show_binlog_events.inc;
+
+--echo #
+--echo # End of 10.10 tests
+--echo #
diff --git a/plugin/type_inet/mysql-test/type_inet/binlog_table_map_optional_metadata_type_inet4.result b/plugin/type_inet/mysql-test/type_inet/binlog_table_map_optional_metadata_type_inet4.result
new file mode 100644
index 00000000000..f3694903793
--- /dev/null
+++ b/plugin/type_inet/mysql-test/type_inet/binlog_table_map_optional_metadata_type_inet4.result
@@ -0,0 +1,61 @@
+#
+# Start of 10.10 tests
+#
+#
+# MDEV-23287 The INET4 data type
+# MDEV-20822 INET6 crashes in combination with RBR extended metadata
+#
+# Using DEFAULT_CHARSET format
+RESET MASTER;
+SET GLOBAL binlog_row_metadata = NO_LOG;
+CREATE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES('0.0.0.0');
+# Columns(BINARY(4))
+DROP TABLE t1;
+RESET MASTER;
+RESET MASTER;
+SET GLOBAL binlog_row_metadata = MINIMAL;
+CREATE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES('0.0.0.0');
+# Columns(BINARY(4))
+DROP TABLE t1;
+RESET MASTER;
+RESET MASTER;
+SET GLOBAL binlog_row_metadata = FULL;
+CREATE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES('0.0.0.0');
+# Columns(`a` BINARY(4))
+DROP TABLE t1;
+RESET MASTER;
+# Using COLUMN_CHARSET format
+RESET MASTER;
+SET GLOBAL binlog_row_metadata = NO_LOG;
+CREATE TABLE t1 (a INET4, b CHAR(16) CHARACTER SET latin1, c CHAR(16) CHARACTER SET utf8);
+INSERT INTO t1 VALUES('0.0.0.0','','');
+# Columns(BINARY(4),
+# BINARY(16),
+# BINARY(48))
+DROP TABLE t1;
+RESET MASTER;
+RESET MASTER;
+SET GLOBAL binlog_row_metadata = MINIMAL;
+CREATE TABLE t1 (a INET4, b CHAR(16) CHARACTER SET latin1, c CHAR(16) CHARACTER SET utf8);
+INSERT INTO t1 VALUES('0.0.0.0','','');
+# Columns(BINARY(4),
+# CHAR(16) CHARSET latin1 COLLATE latin1_swedish_ci,
+# CHAR(16) CHARSET utf8mb3 COLLATE utf8mb3_general_ci)
+DROP TABLE t1;
+RESET MASTER;
+RESET MASTER;
+SET GLOBAL binlog_row_metadata = FULL;
+CREATE TABLE t1 (a INET4, b CHAR(16) CHARACTER SET latin1, c CHAR(16) CHARACTER SET utf8);
+INSERT INTO t1 VALUES('0.0.0.0','','');
+# Columns(`a` BINARY(4),
+# `b` CHAR(16) CHARSET latin1 COLLATE latin1_swedish_ci,
+# `c` CHAR(16) CHARSET utf8mb3 COLLATE utf8mb3_general_ci)
+DROP TABLE t1;
+RESET MASTER;
+SET GLOBAL binlog_row_metadata = DEFAULT;
+#
+# End of 10.10 tests
+#
diff --git a/plugin/type_inet/mysql-test/type_inet/binlog_table_map_optional_metadata_type_inet4.test b/plugin/type_inet/mysql-test/type_inet/binlog_table_map_optional_metadata_type_inet4.test
new file mode 100644
index 00000000000..82e76401053
--- /dev/null
+++ b/plugin/type_inet/mysql-test/type_inet/binlog_table_map_optional_metadata_type_inet4.test
@@ -0,0 +1,73 @@
+--source include/have_debug.inc
+--source include/have_binlog_format_row.inc
+
+--let $MYSQLD_DATADIR= `select @@datadir`
+--let $binlog_file= $MYSQLD_DATADIR/master-bin.000001
+
+
+--echo #
+--echo # Start of 10.10 tests
+--echo #
+
+--echo #
+--echo # MDEV-23287 The INET4 data type
+--echo # MDEV-20822 INET6 crashes in combination with RBR extended metadata
+--echo #
+
+--echo # Using DEFAULT_CHARSET format
+
+RESET MASTER;
+SET GLOBAL binlog_row_metadata = NO_LOG;
+CREATE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES('0.0.0.0');
+--source suite/binlog/include/print_optional_metadata.inc
+DROP TABLE t1;
+RESET MASTER;
+
+RESET MASTER;
+SET GLOBAL binlog_row_metadata = MINIMAL;
+CREATE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES('0.0.0.0');
+--source suite/binlog/include/print_optional_metadata.inc
+DROP TABLE t1;
+RESET MASTER;
+
+RESET MASTER;
+SET GLOBAL binlog_row_metadata = FULL;
+CREATE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES('0.0.0.0');
+--source suite/binlog/include/print_optional_metadata.inc
+DROP TABLE t1;
+RESET MASTER;
+
+--echo # Using COLUMN_CHARSET format
+
+RESET MASTER;
+SET GLOBAL binlog_row_metadata = NO_LOG;
+CREATE TABLE t1 (a INET4, b CHAR(16) CHARACTER SET latin1, c CHAR(16) CHARACTER SET utf8);
+INSERT INTO t1 VALUES('0.0.0.0','','');
+--source suite/binlog/include/print_optional_metadata.inc
+DROP TABLE t1;
+RESET MASTER;
+
+RESET MASTER;
+SET GLOBAL binlog_row_metadata = MINIMAL;
+CREATE TABLE t1 (a INET4, b CHAR(16) CHARACTER SET latin1, c CHAR(16) CHARACTER SET utf8);
+INSERT INTO t1 VALUES('0.0.0.0','','');
+--source suite/binlog/include/print_optional_metadata.inc
+DROP TABLE t1;
+RESET MASTER;
+
+RESET MASTER;
+SET GLOBAL binlog_row_metadata = FULL;
+CREATE TABLE t1 (a INET4, b CHAR(16) CHARACTER SET latin1, c CHAR(16) CHARACTER SET utf8);
+INSERT INTO t1 VALUES('0.0.0.0','','');
+--source suite/binlog/include/print_optional_metadata.inc
+DROP TABLE t1;
+RESET MASTER;
+
+SET GLOBAL binlog_row_metadata = DEFAULT;
+
+--echo #
+--echo # End of 10.10 tests
+--echo #
diff --git a/plugin/type_inet/mysql-test/type_inet/rpl_row_binary_to_inet4.result b/plugin/type_inet/mysql-test/type_inet/rpl_row_binary_to_inet4.result
new file mode 100644
index 00000000000..5921ab25974
--- /dev/null
+++ b/plugin/type_inet/mysql-test/type_inet/rpl_row_binary_to_inet4.result
@@ -0,0 +1,36 @@
+include/master-slave.inc
+[connection master]
+#
+# Start of 10.10 tests
+#
+#
+# MDEV-23287 The INET4 data type
+# MDEV-20844 RBR from binary(16) to inet6 fails with error 171: The event was corrupt, leading to illegal data being read
+#
+CREATE TABLE t1 (a BINARY(4));
+connection slave;
+ALTER TABLE t1 MODIFY a INET4;
+connection master;
+INSERT INTO t1 VALUES (0x00000000);
+INSERT INTO t1 VALUES (0xa0000001);
+INSERT INTO t1 VALUES (0xf0000000);
+INSERT INTO t1 VALUES (0xff000001);
+SELECT CAST(a AS INET4) FROM t1 ORDER BY a;
+CAST(a AS INET4)
+0.0.0.0
+160.0.0.1
+240.0.0.0
+255.0.0.1
+connection slave;
+SELECT * FROM t1 ORDER BY a;
+a
+0.0.0.0
+160.0.0.1
+240.0.0.0
+255.0.0.1
+connection master;
+DROP TABLE t1;
+#
+# End of 10.10 tests
+#
+include/rpl_end.inc
diff --git a/plugin/type_inet/mysql-test/type_inet/rpl_row_binary_to_inet4.test b/plugin/type_inet/mysql-test/type_inet/rpl_row_binary_to_inet4.test
new file mode 100644
index 00000000000..0b96293dc8b
--- /dev/null
+++ b/plugin/type_inet/mysql-test/type_inet/rpl_row_binary_to_inet4.test
@@ -0,0 +1,34 @@
+--source include/have_binlog_format_row.inc
+--source include/master-slave.inc
+
+--echo #
+--echo # Start of 10.10 tests
+--echo #
+
+--echo #
+--echo # MDEV-23287 The INET4 data type
+--echo # MDEV-20844 RBR from binary(16) to inet6 fails with error 171: The event was corrupt, leading to illegal data being read
+--echo #
+
+CREATE TABLE t1 (a BINARY(4));
+
+--sync_slave_with_master
+ALTER TABLE t1 MODIFY a INET4;
+
+--connection master
+INSERT INTO t1 VALUES (0x00000000);
+INSERT INTO t1 VALUES (0xa0000001);
+INSERT INTO t1 VALUES (0xf0000000);
+INSERT INTO t1 VALUES (0xff000001);
+SELECT CAST(a AS INET4) FROM t1 ORDER BY a;
+--sync_slave_with_master
+SELECT * FROM t1 ORDER BY a;
+
+--connection master
+DROP TABLE t1;
+
+--echo #
+--echo # End of 10.10 tests
+--echo #
+
+--source include/rpl_end.inc
diff --git a/plugin/type_inet/mysql-test/type_inet/rpl_row_inet4_to_binary.result b/plugin/type_inet/mysql-test/type_inet/rpl_row_inet4_to_binary.result
new file mode 100644
index 00000000000..169300563f9
--- /dev/null
+++ b/plugin/type_inet/mysql-test/type_inet/rpl_row_inet4_to_binary.result
@@ -0,0 +1,36 @@
+include/master-slave.inc
+[connection master]
+#
+# Start of 10.10 tests
+#
+#
+# MDEV-23287 The INET4 data type
+# MDEV-20844 RBR from binary(16) to inet6 fails with error 171: The event was corrupt, leading to illegal data being read
+#
+CREATE TABLE t1 (a INET4);
+connection slave;
+ALTER TABLE t1 MODIFY a BINARY(4);
+connection master;
+INSERT INTO t1 VALUES ('0.0.0.0');
+INSERT INTO t1 VALUES ('192.168.0.1');
+INSERT INTO t1 VALUES ('255.0.0.0');
+INSERT INTO t1 VALUES ('255.0.0.1');
+SELECT a FROM t1 ORDER BY a;
+a
+0.0.0.0
+192.168.0.1
+255.0.0.0
+255.0.0.1
+connection slave;
+SELECT CAST(a AS INET4) FROM t1 ORDER BY a;
+CAST(a AS INET4)
+0.0.0.0
+192.168.0.1
+255.0.0.0
+255.0.0.1
+connection master;
+DROP TABLE t1;
+#
+# End of 10.10 tests
+#
+include/rpl_end.inc
diff --git a/plugin/type_inet/mysql-test/type_inet/rpl_row_inet4_to_binary.test b/plugin/type_inet/mysql-test/type_inet/rpl_row_inet4_to_binary.test
new file mode 100644
index 00000000000..6200760e1fb
--- /dev/null
+++ b/plugin/type_inet/mysql-test/type_inet/rpl_row_inet4_to_binary.test
@@ -0,0 +1,34 @@
+--source include/have_binlog_format_row.inc
+--source include/master-slave.inc
+
+--echo #
+--echo # Start of 10.10 tests
+--echo #
+
+--echo #
+--echo # MDEV-23287 The INET4 data type
+--echo # MDEV-20844 RBR from binary(16) to inet6 fails with error 171: The event was corrupt, leading to illegal data being read
+--echo #
+
+CREATE TABLE t1 (a INET4);
+
+--sync_slave_with_master
+ALTER TABLE t1 MODIFY a BINARY(4);
+
+--connection master
+INSERT INTO t1 VALUES ('0.0.0.0');
+INSERT INTO t1 VALUES ('192.168.0.1');
+INSERT INTO t1 VALUES ('255.0.0.0');
+INSERT INTO t1 VALUES ('255.0.0.1');
+SELECT a FROM t1 ORDER BY a;
+--sync_slave_with_master
+SELECT CAST(a AS INET4) FROM t1 ORDER BY a;
+
+--connection master
+DROP TABLE t1;
+
+--echo #
+--echo # End of 10.10 tests
+--echo #
+
+--source include/rpl_end.inc
diff --git a/plugin/type_inet/mysql-test/type_inet/rpl_type_inet4.result b/plugin/type_inet/mysql-test/type_inet/rpl_type_inet4.result
new file mode 100644
index 00000000000..bd1c3dac5c1
--- /dev/null
+++ b/plugin/type_inet/mysql-test/type_inet/rpl_type_inet4.result
@@ -0,0 +1,23 @@
+include/master-slave.inc
+[connection master]
+#
+# Start of 10.10 tests
+#
+#
+# MDEV-23287 The INET4 data type
+#
+connection master;
+CREATE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES ('0.0.0.0'),('255.255.255.255');
+connection slave;
+SELECT HEX(a), a FROM t1;
+HEX(a) a
+00000000 0.0.0.0
+FFFFFFFF 255.255.255.255
+connection master;
+DROP TABLE t1;
+connection slave;
+#
+# Start of 10.10 tests
+#
+include/rpl_end.inc
diff --git a/plugin/type_inet/mysql-test/type_inet/rpl_type_inet4.test b/plugin/type_inet/mysql-test/type_inet/rpl_type_inet4.test
new file mode 100644
index 00000000000..af9f6eee54f
--- /dev/null
+++ b/plugin/type_inet/mysql-test/type_inet/rpl_type_inet4.test
@@ -0,0 +1,24 @@
+--source include/master-slave.inc
+
+--echo #
+--echo # Start of 10.10 tests
+--echo #
+
+--echo #
+--echo # MDEV-23287 The INET4 data type
+--echo #
+
+connection master;
+CREATE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES ('0.0.0.0'),('255.255.255.255');
+sync_slave_with_master;
+SELECT HEX(a), a FROM t1;
+connection master;
+DROP TABLE t1;
+sync_slave_with_master;
+
+--echo #
+--echo # Start of 10.10 tests
+--echo #
+
+--source include/rpl_end.inc
diff --git a/plugin/type_inet/mysql-test/type_inet/type_inet4-debug.result b/plugin/type_inet/mysql-test/type_inet/type_inet4-debug.result
new file mode 100644
index 00000000000..db0eb4332e9
--- /dev/null
+++ b/plugin/type_inet/mysql-test/type_inet/type_inet4-debug.result
@@ -0,0 +1,24 @@
+#
+# Start of 10.10 tests
+#
+#
+# MDEV-23287 The INET4 data type
+#
+SET @old_debug_dbug=@@debug_dbug;
+SET debug_dbug="+d,frm_data_type_info";
+CREATE TABLE t1 (c01 INET4, c02 INET4);
+Warnings:
+Note 1105 build_frm_image: Field data type info length: 14
+Note 1105 DBUG: [0] name='c01' type_info='inet4'
+Note 1105 DBUG: [1] name='c02' type_info='inet4'
+SET debug_dbug=@old_debug_dbug;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c01` inet4 DEFAULT NULL,
+ `c02` inet4 DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+DROP TABLE t1;
+#
+# End of 10.10 tests
+#
diff --git a/plugin/type_inet/mysql-test/type_inet/type_inet4-debug.test b/plugin/type_inet/mysql-test/type_inet/type_inet4-debug.test
new file mode 100644
index 00000000000..8910c6c3c57
--- /dev/null
+++ b/plugin/type_inet/mysql-test/type_inet/type_inet4-debug.test
@@ -0,0 +1,22 @@
+--source include/have_debug.inc
+
+--echo #
+--echo # Start of 10.10 tests
+--echo #
+
+--echo #
+--echo # MDEV-23287 The INET4 data type
+--echo #
+
+SET @old_debug_dbug=@@debug_dbug;
+
+SET debug_dbug="+d,frm_data_type_info";
+CREATE TABLE t1 (c01 INET4, c02 INET4);
+SET debug_dbug=@old_debug_dbug;
+
+SHOW CREATE TABLE t1;
+DROP TABLE t1;
+
+--echo #
+--echo # End of 10.10 tests
+--echo #
diff --git a/plugin/type_inet/mysql-test/type_inet/type_inet4.result b/plugin/type_inet/mysql-test/type_inet/type_inet4.result
new file mode 100644
index 00000000000..7763b28e1fb
--- /dev/null
+++ b/plugin/type_inet/mysql-test/type_inet/type_inet4.result
@@ -0,0 +1,2019 @@
+#
+# Start of 10.10 tests
+#
+#
+# MDEV-23287 The INET4 data type
+#
+#
+# Basic CREATE functionality, defaults, metadata
+#
+CREATE TABLE t1 (a INET4 AUTO_INCREMENT);
+ERROR 42000: Incorrect column specifier for column 'a'
+CREATE TABLE t1 (a INET4);
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` inet4 DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+DESCRIBE t1;
+Field Type Null Key Default Extra
+a inet4 YES NULL
+SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE table_schema='test' AND table_name='t1';
+TABLE_CATALOG def
+TABLE_SCHEMA test
+TABLE_NAME t1
+COLUMN_NAME a
+ORDINAL_POSITION 1
+COLUMN_DEFAULT NULL
+IS_NULLABLE YES
+DATA_TYPE inet4
+CHARACTER_MAXIMUM_LENGTH NULL
+CHARACTER_OCTET_LENGTH NULL
+NUMERIC_PRECISION NULL
+NUMERIC_SCALE NULL
+DATETIME_PRECISION NULL
+CHARACTER_SET_NAME NULL
+COLLATION_NAME NULL
+COLUMN_TYPE inet4
+COLUMN_KEY
+EXTRA
+PRIVILEGES #
+COLUMN_COMMENT
+IS_GENERATED NEVER
+GENERATION_EXPRESSION NULL
+DROP TABLE t1;
+CREATE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES ('0.0.0.1');
+SELECT * FROM t1;
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def test t1 t1 a a 254 (type=inet4) 15 7 Y 160 0 8
+a
+0.0.0.1
+SELECT CAST('0.0.0.1' AS INET4) AS a;
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def a 254 (type=inet4) 15 7 N 33 0 8
+a
+0.0.0.1
+DROP TABLE t1;
+CREATE TABLE t1 (
+c1 INET4 DEFAULT 0x00000000,
+c2 INET4 DEFAULT 0xFFFFFFFF,
+c3 INET4 DEFAULT '0.0.0.255',
+c4 INET4 DEFAULT '255.0.0.255',
+c5 INET4 DEFAULT CAST(X'FFFF00FF' AS INET4)
+);
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c1` inet4 DEFAULT '0.0.0.0',
+ `c2` inet4 DEFAULT '255.255.255.255',
+ `c3` inet4 DEFAULT '0.0.0.255',
+ `c4` inet4 DEFAULT '255.0.0.255',
+ `c5` inet4 DEFAULT cast(X'ffff00ff' as inet4)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+DESCRIBE t1;
+Field Type Null Key Default Extra
+c1 inet4 YES 0.0.0.0
+c2 inet4 YES 255.255.255.255
+c3 inet4 YES 0.0.0.255
+c4 inet4 YES 255.0.0.255
+c5 inet4 YES cast(X'ffff00ff' as inet4)
+SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE table_schema='test' AND table_name='t1';
+TABLE_CATALOG def
+TABLE_SCHEMA test
+TABLE_NAME t1
+COLUMN_NAME c1
+ORDINAL_POSITION 1
+COLUMN_DEFAULT '0.0.0.0'
+IS_NULLABLE YES
+DATA_TYPE inet4
+CHARACTER_MAXIMUM_LENGTH NULL
+CHARACTER_OCTET_LENGTH NULL
+NUMERIC_PRECISION NULL
+NUMERIC_SCALE NULL
+DATETIME_PRECISION NULL
+CHARACTER_SET_NAME NULL
+COLLATION_NAME NULL
+COLUMN_TYPE inet4
+COLUMN_KEY
+EXTRA
+PRIVILEGES #
+COLUMN_COMMENT
+IS_GENERATED NEVER
+GENERATION_EXPRESSION NULL
+TABLE_CATALOG def
+TABLE_SCHEMA test
+TABLE_NAME t1
+COLUMN_NAME c2
+ORDINAL_POSITION 2
+COLUMN_DEFAULT '255.255.255.255'
+IS_NULLABLE YES
+DATA_TYPE inet4
+CHARACTER_MAXIMUM_LENGTH NULL
+CHARACTER_OCTET_LENGTH NULL
+NUMERIC_PRECISION NULL
+NUMERIC_SCALE NULL
+DATETIME_PRECISION NULL
+CHARACTER_SET_NAME NULL
+COLLATION_NAME NULL
+COLUMN_TYPE inet4
+COLUMN_KEY
+EXTRA
+PRIVILEGES #
+COLUMN_COMMENT
+IS_GENERATED NEVER
+GENERATION_EXPRESSION NULL
+TABLE_CATALOG def
+TABLE_SCHEMA test
+TABLE_NAME t1
+COLUMN_NAME c3
+ORDINAL_POSITION 3
+COLUMN_DEFAULT '0.0.0.255'
+IS_NULLABLE YES
+DATA_TYPE inet4
+CHARACTER_MAXIMUM_LENGTH NULL
+CHARACTER_OCTET_LENGTH NULL
+NUMERIC_PRECISION NULL
+NUMERIC_SCALE NULL
+DATETIME_PRECISION NULL
+CHARACTER_SET_NAME NULL
+COLLATION_NAME NULL
+COLUMN_TYPE inet4
+COLUMN_KEY
+EXTRA
+PRIVILEGES #
+COLUMN_COMMENT
+IS_GENERATED NEVER
+GENERATION_EXPRESSION NULL
+TABLE_CATALOG def
+TABLE_SCHEMA test
+TABLE_NAME t1
+COLUMN_NAME c4
+ORDINAL_POSITION 4
+COLUMN_DEFAULT '255.0.0.255'
+IS_NULLABLE YES
+DATA_TYPE inet4
+CHARACTER_MAXIMUM_LENGTH NULL
+CHARACTER_OCTET_LENGTH NULL
+NUMERIC_PRECISION NULL
+NUMERIC_SCALE NULL
+DATETIME_PRECISION NULL
+CHARACTER_SET_NAME NULL
+COLLATION_NAME NULL
+COLUMN_TYPE inet4
+COLUMN_KEY
+EXTRA
+PRIVILEGES #
+COLUMN_COMMENT
+IS_GENERATED NEVER
+GENERATION_EXPRESSION NULL
+TABLE_CATALOG def
+TABLE_SCHEMA test
+TABLE_NAME t1
+COLUMN_NAME c5
+ORDINAL_POSITION 5
+COLUMN_DEFAULT cast(X'ffff00ff' as inet4)
+IS_NULLABLE YES
+DATA_TYPE inet4
+CHARACTER_MAXIMUM_LENGTH NULL
+CHARACTER_OCTET_LENGTH NULL
+NUMERIC_PRECISION NULL
+NUMERIC_SCALE NULL
+DATETIME_PRECISION NULL
+CHARACTER_SET_NAME NULL
+COLLATION_NAME NULL
+COLUMN_TYPE inet4
+COLUMN_KEY
+EXTRA
+PRIVILEGES #
+COLUMN_COMMENT
+IS_GENERATED NEVER
+GENERATION_EXPRESSION NULL
+DROP TABLE t1;
+CREATE TABLE t1 (c1 INET4 DEFAULT 0x00);
+ERROR 42000: Invalid default value for 'c1'
+CREATE TABLE t1 (c1 INET4 DEFAULT '');
+ERROR 42000: Invalid default value for 'c1'
+CREATE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES ('x');
+ERROR 22007: Incorrect inet4 value: 'x' for column `test`.`t1`.`a` at row 1
+INSERT INTO t1 VALUES (1);
+ERROR HY000: Cannot cast 'int' as 'inet4' in assignment of `test`.`t1`.`a`
+INSERT INTO t1 VALUES (TIME'10:20:30');
+ERROR HY000: Cannot cast 'time' as 'inet4' in assignment of `test`.`t1`.`a`
+INSERT INTO t1 VALUES (0x00);
+ERROR 22007: Incorrect inet4 value: '\x00' for column `test`.`t1`.`a` at row 1
+DROP TABLE t1;
+#
+# CAST
+#
+SELECT CAST('garbage' AS INET4);
+CAST('garbage' AS INET4)
+NULL
+Warnings:
+Warning 1292 Incorrect inet4 value: 'garbage'
+SELECT CAST(0x01 AS INET4);
+CAST(0x01 AS INET4)
+NULL
+Warnings:
+Warning 1292 Incorrect inet4 value: '\x01'
+SELECT CAST(REPEAT(0x00,16) AS INET4);
+CAST(REPEAT(0x00,16) AS INET4)
+NULL
+Warnings:
+Warning 1292 Incorrect inet4 value: '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
+SELECT CAST(REPEAT(0x11,16) AS INET4);
+CAST(REPEAT(0x11,16) AS INET4)
+NULL
+Warnings:
+Warning 1292 Incorrect inet4 value: '\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11'
+CREATE TABLE t1 AS SELECT CAST('0.0.0.0' AS INET4);
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `CAST('0.0.0.0' AS INET4)` inet4 NOT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+DROP TABLE t1;
+#
+# Text and binary formats, comparison operators
+#
+CREATE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES (0x00000000);
+INSERT INTO t1 VALUES (0x00000001);
+INSERT INTO t1 VALUES (0xFF000001);
+INSERT INTO t1 VALUES (0xFF000002);
+SELECT * FROM t1 ORDER BY a;
+a
+0.0.0.0
+0.0.0.1
+255.0.0.1
+255.0.0.2
+SELECT * FROM t1 ORDER BY a DESC;
+a
+255.0.0.2
+255.0.0.1
+0.0.0.1
+0.0.0.0
+SELECT HEX(a),a FROM t1 ORDER BY a;
+HEX(a) a
+00000000 0.0.0.0
+00000001 0.0.0.1
+FF000001 255.0.0.1
+FF000002 255.0.0.2
+SELECT * FROM t1 WHERE a='0.0.0.0';
+a
+0.0.0.0
+SELECT * FROM t1 WHERE a='0.0.0.1';
+a
+0.0.0.1
+SELECT * FROM t1 WHERE a='255.0.0.1';
+a
+255.0.0.1
+SELECT * FROM t1 WHERE a='255.0.0.2';
+a
+255.0.0.2
+SELECT * FROM t1 WHERE a='255.000.000.002';
+a
+255.0.0.2
+SELECT * FROM t1 WHERE a=0x00000000;
+a
+0.0.0.0
+SELECT * FROM t1 WHERE a=0x00000001;
+a
+0.0.0.1
+SELECT * FROM t1 WHERE a=0xff000001;
+a
+255.0.0.1
+SELECT * FROM t1 WHERE a=0xff000002;
+a
+255.0.0.2
+SELECT * FROM t1 WHERE a<'0.0.0.0';
+a
+SELECT * FROM t1 WHERE a<='0.0.0.0';
+a
+0.0.0.0
+SELECT * FROM t1 WHERE a>='255.0.0.2';
+a
+255.0.0.2
+SELECT * FROM t1 WHERE a>'255.0.0.2';
+a
+SELECT * FROM t1 WHERE a IN ('0.0.0.0', '255.0.0.1') ORDER BY a;
+a
+0.0.0.0
+255.0.0.1
+SELECT * FROM t1 WHERE a IN ('0.0.0.0', 0xff000002) ORDER BY a;
+a
+0.0.0.0
+255.0.0.2
+SELECT * FROM t1 WHERE a<'garbage';
+a
+Warnings:
+Warning 1292 Incorrect inet4 value: 'garbage'
+SELECT * FROM t1 WHERE a<='garbage';
+a
+Warnings:
+Warning 1292 Incorrect inet4 value: 'garbage'
+SELECT * FROM t1 WHERE a='garbage';
+a
+Warnings:
+Warning 1292 Incorrect inet4 value: 'garbage'
+Warning 1292 Incorrect inet4 value: 'garbage'
+SELECT * FROM t1 WHERE a>='garbage';
+a
+Warnings:
+Warning 1292 Incorrect inet4 value: 'garbage'
+SELECT * FROM t1 WHERE a>'garbage';
+a
+Warnings:
+Warning 1292 Incorrect inet4 value: 'garbage'
+SELECT * FROM t1 WHERE a<0x01;
+a
+Warnings:
+Warning 1292 Incorrect inet4 value: '\x01'
+SELECT * FROM t1 WHERE a<=0x01;
+a
+Warnings:
+Warning 1292 Incorrect inet4 value: '\x01'
+SELECT * FROM t1 WHERE a=0x01;
+a
+Warnings:
+Warning 1292 Incorrect inet4 value: '\x01'
+Warning 1292 Incorrect inet4 value: '\x01'
+SELECT * FROM t1 WHERE a>=0x01;
+a
+Warnings:
+Warning 1292 Incorrect inet4 value: '\x01'
+SELECT * FROM t1 WHERE a>0x01;
+a
+Warnings:
+Warning 1292 Incorrect inet4 value: '\x01'
+SELECT * FROM t1 WHERE a='0.0.0.00';
+a
+0.0.0.0
+SELECT * FROM t1 WHERE a='0.0.0.000';
+a
+0.0.0.0
+SELECT * FROM t1 WHERE a='0.0.00.000';
+a
+0.0.0.0
+SELECT * FROM t1 WHERE a='0.0.0.01';
+a
+0.0.0.1
+SELECT * FROM t1 WHERE a='0.0.0.001';
+a
+0.0.0.1
+SELECT * FROM t1 WHERE a='0.0.00.001';
+a
+0.0.0.1
+SELECT * FROM t1 WHERE a='0.0.0.0000';
+a
+Warnings:
+Warning 1292 Incorrect inet4 value: '0.0.0.0000'
+Warning 1292 Incorrect inet4 value: '0.0.0.0000'
+SELECT * FROM t1 WHERE a=0;
+ERROR HY000: Illegal parameter data types inet4 and int for operation '='
+SELECT * FROM t1 WHERE a=0.0;
+ERROR HY000: Illegal parameter data types inet4 and decimal for operation '='
+SELECT * FROM t1 WHERE a=0e0;
+ERROR HY000: Illegal parameter data types inet4 and double for operation '='
+SELECT * FROM t1 WHERE a=TIME'10:20:30';
+ERROR HY000: Illegal parameter data types inet4 and time for operation '='
+SELECT * FROM t1 WHERE a IN ('0.0.0.0', 10);
+ERROR HY000: Illegal parameter data types inet4 and int for operation 'in'
+DROP TABLE t1;
+#
+# cmp_item_fbt: IN for non-constants
+#
+CREATE TABLE t1 (a INET4, b INET4);
+INSERT INTO t1 VALUES ('0.0.0.1', '0.0.0.2');
+SELECT * FROM t1 WHERE '0.0.0.0' IN (a, b);
+a b
+SELECT * FROM t1 WHERE '0.0.0.1' IN (a, b);
+a b
+0.0.0.1 0.0.0.2
+SELECT * FROM t1 WHERE '0.0.0.1' IN (a, b);
+a b
+0.0.0.1 0.0.0.2
+SELECT * FROM t1 WHERE '0.0.0.01' IN (a, b);
+a b
+0.0.0.1 0.0.0.2
+SELECT * FROM t1 WHERE '0.0.0.001' IN (a, b);
+a b
+0.0.0.1 0.0.0.2
+SELECT * FROM t1 WHERE '0.0.0.0001' IN (a, b);
+a b
+Warnings:
+Warning 1292 Incorrect inet4 value: '0.0.0.0001'
+DROP TABLE t1;
+#
+# CASE abbreviations
+#
+CREATE TABLE t1 (
+c INET4,
+c_char CHAR(32),
+c_varchar VARCHAR(32),
+c_tinytext TINYTEXT,
+c_text TEXT,
+c_mediumtext TEXT,
+c_longtext LONGTEXT
+);
+CREATE TABLE t2 AS SELECT
+COALESCE(c, c_char),
+COALESCE(c, c_varchar),
+COALESCE(c, c_tinytext),
+COALESCE(c, c_text),
+COALESCE(c, c_mediumtext),
+COALESCE(c, c_longtext)
+FROM t1;
+SHOW CREATE TABLE t2;
+Table Create Table
+t2 CREATE TABLE `t2` (
+ `COALESCE(c, c_char)` inet4 DEFAULT NULL,
+ `COALESCE(c, c_varchar)` inet4 DEFAULT NULL,
+ `COALESCE(c, c_tinytext)` inet4 DEFAULT NULL,
+ `COALESCE(c, c_text)` inet4 DEFAULT NULL,
+ `COALESCE(c, c_mediumtext)` inet4 DEFAULT NULL,
+ `COALESCE(c, c_longtext)` inet4 DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT
+LEAST(c, c_char),
+LEAST(c, c_varchar),
+LEAST(c, c_tinytext),
+LEAST(c, c_text),
+LEAST(c, c_mediumtext),
+LEAST(c, c_longtext)
+FROM t1;
+SHOW CREATE TABLE t2;
+Table Create Table
+t2 CREATE TABLE `t2` (
+ `LEAST(c, c_char)` inet4 DEFAULT NULL,
+ `LEAST(c, c_varchar)` inet4 DEFAULT NULL,
+ `LEAST(c, c_tinytext)` inet4 DEFAULT NULL,
+ `LEAST(c, c_text)` inet4 DEFAULT NULL,
+ `LEAST(c, c_mediumtext)` inet4 DEFAULT NULL,
+ `LEAST(c, c_longtext)` inet4 DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+DROP TABLE t2;
+DROP TABLE t1;
+CREATE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES (NULL),('0.0.0.1'),('0.0.0.2');
+SELECT COALESCE(a, '0.0.0.0') FROM t1 ORDER BY a;
+COALESCE(a, '0.0.0.0')
+0.0.0.0
+0.0.0.1
+0.0.0.2
+SELECT a, LEAST(a,'0.0.0.0'), LEAST(a,'0.0.0.255') FROM t1 ORDER BY a;
+a LEAST(a,'0.0.0.0') LEAST(a,'0.0.0.255')
+NULL NULL NULL
+0.0.0.1 0.0.0.0 0.0.0.1
+0.0.0.2 0.0.0.0 0.0.0.2
+SELECT a, GREATEST(a,'0.0.0.0'), GREATEST(a,'0.0.0.255') FROM t1 ORDER BY a;
+a GREATEST(a,'0.0.0.0') GREATEST(a,'0.0.0.255')
+NULL NULL NULL
+0.0.0.1 0.0.0.1 0.0.0.255
+0.0.0.2 0.0.0.2 0.0.0.255
+CREATE TABLE t2 AS SELECT
+COALESCE(a, '0.0.0.0'),
+LEAST(a,'0.0.0.0'),
+GREATEST(a,'0.0.0.0')
+FROM t1;
+SHOW CREATE TABLE t2;
+Table Create Table
+t2 CREATE TABLE `t2` (
+ `COALESCE(a, '0.0.0.0')` inet4 DEFAULT NULL,
+ `LEAST(a,'0.0.0.0')` inet4 DEFAULT NULL,
+ `GREATEST(a,'0.0.0.0')` inet4 DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+DROP TABLE t2;
+SELECT COALESCE(a, 0x00000000) FROM t1 ORDER BY a;
+COALESCE(a, 0x00000000)
+0.0.0.0
+0.0.0.1
+0.0.0.2
+SELECT a,
+LEAST(a, 0x00000000),
+LEAST(a, 0x0000000f)
+FROM t1 ORDER BY a;
+a LEAST(a, 0x00000000) LEAST(a, 0x0000000f)
+NULL NULL NULL
+0.0.0.1 0.0.0.0 0.0.0.1
+0.0.0.2 0.0.0.0 0.0.0.2
+SELECT a,
+GREATEST(a, 0x00000000),
+GREATEST(a, 0x0000000f)
+FROM t1 ORDER BY a;
+a GREATEST(a, 0x00000000) GREATEST(a, 0x0000000f)
+NULL NULL NULL
+0.0.0.1 0.0.0.1 0.0.0.15
+0.0.0.2 0.0.0.2 0.0.0.15
+CREATE TABLE t2 AS SELECT
+COALESCE(a, 0x00000000),
+LEAST(a,0x00000000),
+GREATEST(a,0x00000000)
+FROM t1;
+SHOW CREATE TABLE t2;
+Table Create Table
+t2 CREATE TABLE `t2` (
+ `COALESCE(a, 0x00000000)` inet4 DEFAULT NULL,
+ `LEAST(a,0x00000000)` inet4 DEFAULT NULL,
+ `GREATEST(a,0x00000000)` inet4 DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+DROP TABLE t2;
+SELECT COALESCE(a, 10) FROM t1;
+ERROR HY000: Illegal parameter data types inet4 and int for operation 'coalesce'
+SELECT LEAST(a, 10) FROM t1;
+ERROR HY000: Illegal parameter data types inet4 and int for operation 'least'
+SELECT GREATEST(a, 10) FROM t1;
+ERROR HY000: Illegal parameter data types inet4 and int for operation 'greatest'
+DROP TABLE t1;
+SELECT COALESCE('garbage', CAST('0.0.0.1' AS INET4));
+COALESCE('garbage', CAST('0.0.0.1' AS INET4))
+0.0.0.1
+Warnings:
+Warning 1292 Incorrect inet4 value: 'garbage'
+SELECT COALESCE(0x01, CAST('0.0.0.1' AS INET4));
+COALESCE(0x01, CAST('0.0.0.1' AS INET4))
+0.0.0.1
+Warnings:
+Warning 1292 Incorrect inet4 value: '\x01'
+#
+# Uniqueness
+#
+CREATE TABLE t1 (a INET4 NOT NULL PRIMARY KEY);
+INSERT INTO t1 VALUES ('65.0.0.1'),('97.0.0.1');
+INSERT INTO t1 VALUES ('97.0.0.1');
+ERROR 23000: Duplicate entry '97.0.0.1' for key 'PRIMARY'
+SELECT * FROM t1;
+a
+65.0.0.1
+97.0.0.1
+DROP TABLE t1;
+#
+# Indexes
+#
+CREATE TABLE t1 (a INET4, KEY(a(1)));
+ERROR HY000: Incorrect prefix key; the used key part isn't a string, the used length is longer than the key part, or the storage engine doesn't support unique prefix keys
+#
+# Explicit CAST on INSERT
+#
+CREATE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES (CAST('1.0.0.1' AS INET4));
+INSERT INTO t1 VALUES (CAST('1.0.0.2' AS INET4));
+INSERT INTO t1 VALUES (CAST('1.0.0.3' AS INET4));
+INSERT INTO t1 VALUES (CAST(CONCAT('2','0.0.0.1') AS INET4));
+INSERT INTO t1 VALUES (CAST(CONCAT('2','0.0.0.2') AS INET4));
+INSERT INTO t1 VALUES (CAST(CONCAT('2','0.0.0.3') AS INET4));
+SELECT * FROM t1 ORDER BY a;
+a
+1.0.0.1
+1.0.0.2
+1.0.0.3
+20.0.0.1
+20.0.0.2
+20.0.0.3
+DROP TABLE t1;
+#
+# Explicit CAST and implicit CAST on ALTER
+#
+CREATE TABLE t1 (a VARCHAR(64));
+INSERT INTO t1 VALUES ('garbage'),('0.0.0.0'),('0.0.0.1'),('255.0.0.1'),('255.0.0.2');
+SELECT a, CAST(a AS INET4) FROM t1 ORDER BY a;
+a CAST(a AS INET4)
+0.0.0.0 0.0.0.0
+0.0.0.1 0.0.0.1
+255.0.0.1 255.0.0.1
+255.0.0.2 255.0.0.2
+garbage NULL
+Warnings:
+Warning 1292 Incorrect inet4 value: 'garbage'
+SELECT a, CAST(a AS INET4) FROM t1 ORDER BY CAST(a AS INET4);
+a CAST(a AS INET4)
+garbage NULL
+0.0.0.0 0.0.0.0
+0.0.0.1 0.0.0.1
+255.0.0.1 255.0.0.1
+255.0.0.2 255.0.0.2
+Warnings:
+Warning 1292 Incorrect inet4 value: 'garbage'
+Warning 1292 Incorrect inet4 value: 'garbage'
+ALTER TABLE t1 MODIFY a INET4;
+ERROR 22007: Incorrect inet4 value: 'garbage' for column `test`.`t1`.`a` at row 1
+SET sql_mode='';
+ALTER TABLE t1 MODIFY a INET4;
+Warnings:
+Warning 1292 Incorrect inet4 value: 'garbage' for column `test`.`t1`.`a` at row 1
+SET sql_mode=DEFAULT;
+SELECT * FROM t1 ORDER BY a;
+a
+NULL
+0.0.0.0
+0.0.0.1
+255.0.0.1
+255.0.0.2
+DROP TABLE t1;
+CREATE TABLE t1 (a BINARY(4));
+INSERT INTO t1 VALUES (0x00000000);
+INSERT INTO t1 VALUES (0x00000001);
+INSERT INTO t1 VALUES (0xff000001);
+INSERT INTO t1 VALUES (0xff000002);
+SELECT HEX(a), CAST(a AS INET4) FROM t1 ORDER BY a;
+HEX(a) CAST(a AS INET4)
+00000000 0.0.0.0
+00000001 0.0.0.1
+FF000001 255.0.0.1
+FF000002 255.0.0.2
+ALTER TABLE t1 MODIFY a INET4;
+SELECT * FROM t1 ORDER BY a;
+a
+0.0.0.0
+0.0.0.1
+255.0.0.1
+255.0.0.2
+DROP TABLE t1;
+#
+# INSERT..SELECT, same data types
+#
+CREATE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES ('0.0.0.0'),('0.0.0.1'),('0.0.0.2');
+CREATE TABLE t2 (a INET4);
+INSERT INTO t2 SELECT a FROM t1;
+SELECT * FROM t2;
+a
+0.0.0.0
+0.0.0.1
+0.0.0.2
+DROP TABLE t1,t2;
+#
+# Implicit CAST on INSERT..SELECT, text format
+#
+CREATE TABLE t1 (a VARCHAR(64));
+INSERT INTO t1 VALUES ('garbage'),('0.0.0.0'),('0.0.0.1'),('255.0.0.1'),('255.0.0.2');
+CREATE TABLE t2 (a INET4);
+INSERT INTO t2 SELECT a FROM t1;
+ERROR 22007: Incorrect inet4 value: 'garbage' for column `test`.`t2`.`a` at row 1
+SET sql_mode='';
+INSERT INTO t2 SELECT a FROM t1;
+Warnings:
+Warning 1292 Incorrect inet4 value: 'garbage' for column `test`.`t2`.`a` at row 1
+SELECT * FROM t2 ORDER BY a;
+a
+NULL
+0.0.0.0
+0.0.0.1
+255.0.0.1
+255.0.0.2
+SET sql_mode=DEFAULT;
+DROP TABLE t2;
+CREATE TABLE t2 (a INET4 NOT NULL);
+INSERT INTO t2 SELECT a FROM t1;
+ERROR 22007: Incorrect inet4 value: 'garbage' for column `test`.`t2`.`a` at row 1
+SET sql_mode='';
+INSERT INTO t2 SELECT a FROM t1;
+Warnings:
+Warning 1292 Incorrect inet4 value: 'garbage' for column `test`.`t2`.`a` at row 1
+SELECT * FROM t2 ORDER BY a;
+a
+0.0.0.0
+0.0.0.0
+0.0.0.1
+255.0.0.1
+255.0.0.2
+SET sql_mode=DEFAULT;
+DROP TABLE t2;
+DROP TABLE t1;
+#
+# Implicit CAST on INSERT..SELECT, binary format
+#
+CREATE TABLE t1 (a BINARY(4));
+INSERT INTO t1 VALUES (0x00000000);
+INSERT INTO t1 VALUES (0x00000001);
+INSERT INTO t1 VALUES (0xff000001);
+INSERT INTO t1 VALUES (0xff000002);
+CREATE TABLE t2 (a INET4);
+INSERT INTO t2 SELECT a FROM t1;
+SELECT a FROM t2 ORDER BY a;
+a
+0.0.0.0
+0.0.0.1
+255.0.0.1
+255.0.0.2
+DROP TABLE t1,t2;
+#
+# CAST to other data types
+#
+SELECT CAST(CAST('0.0.0.0' AS INET4) AS DOUBLE);
+ERROR HY000: Illegal parameter data type inet4 for operation 'double_typecast'
+SELECT CAST(CAST('0.0.0.0' AS INET4) AS FLOAT);
+ERROR HY000: Illegal parameter data type inet4 for operation 'float_typecast'
+SELECT CAST(CAST('0.0.0.0' AS INET4) AS DECIMAL);
+ERROR HY000: Illegal parameter data type inet4 for operation 'decimal_typecast'
+SELECT CAST(CAST('0.0.0.0' AS INET4) AS SIGNED);
+ERROR HY000: Illegal parameter data type inet4 for operation 'cast_as_signed'
+SELECT CAST(CAST('0.0.0.0' AS INET4) AS UNSIGNED);
+ERROR HY000: Illegal parameter data type inet4 for operation 'cast_as_unsigned'
+SELECT CAST(CAST('0.0.0.0' AS INET4) AS TIME);
+ERROR HY000: Illegal parameter data type inet4 for operation 'cast_as_time'
+SELECT CAST(CAST('0.0.0.0' AS INET4) AS DATE);
+ERROR HY000: Illegal parameter data type inet4 for operation 'cast_as_date'
+SELECT CAST(CAST('0.0.0.0' AS INET4) AS DATETIME);
+ERROR HY000: Illegal parameter data type inet4 for operation 'cast_as_datetime'
+SELECT CAST(CAST('0.0.0.0' AS INET4) AS CHAR);
+CAST(CAST('0.0.0.0' AS INET4) AS CHAR)
+0.0.0.0
+CREATE TABLE t1 AS SELECT CAST(CAST('0.0.0.0' AS INET4) AS CHAR) AS a;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` varchar(15) DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+DROP TABLE t1;
+CREATE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES ('255.0.0.255');
+CREATE TABLE t2 AS SELECT
+CAST(a AS CHAR),
+CAST(a AS CHAR(15)),
+CAST(a AS CHAR(530)),
+CAST(a AS CHAR(65535)),
+CAST(a AS CHAR(66000)),
+CAST(a AS CHAR(16777215)),
+CAST(a AS CHAR(16777216))
+FROM t1;
+SHOW CREATE TABLE t2;
+Table Create Table
+t2 CREATE TABLE `t2` (
+ `CAST(a AS CHAR)` varchar(15) DEFAULT NULL,
+ `CAST(a AS CHAR(15))` varchar(15) DEFAULT NULL,
+ `CAST(a AS CHAR(530))` text DEFAULT NULL,
+ `CAST(a AS CHAR(65535))` text DEFAULT NULL,
+ `CAST(a AS CHAR(66000))` mediumtext DEFAULT NULL,
+ `CAST(a AS CHAR(16777215))` mediumtext DEFAULT NULL,
+ `CAST(a AS CHAR(16777216))` longtext DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+SELECT * FROM t2;
+CAST(a AS CHAR) 255.0.0.255
+CAST(a AS CHAR(15)) 255.0.0.255
+CAST(a AS CHAR(530)) 255.0.0.255
+CAST(a AS CHAR(65535)) 255.0.0.255
+CAST(a AS CHAR(66000)) 255.0.0.255
+CAST(a AS CHAR(16777215)) 255.0.0.255
+CAST(a AS CHAR(16777216)) 255.0.0.255
+DROP TABLE t2;
+DROP TABLE t1;
+CREATE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES ('255.0.0.255');
+CREATE TABLE t2 AS SELECT
+CAST(a AS BINARY(4)) AS cb4,
+CAST(a AS BINARY) AS cb,
+CAST(a AS BINARY(16)) AS cb16,
+CAST(a AS BINARY(32)) AS cb32,
+CAST(a AS BINARY(530)) AS cb530,
+CAST(a AS BINARY(65535)) AS cb65535,
+CAST(a AS BINARY(66000)) AS cb66000,
+CAST(a AS BINARY(16777215)) AS cb16777215,
+CAST(a AS BINARY(16777216)) AS cb16777216
+FROM t1 LIMIT 0;
+SHOW CREATE TABLE t2;
+Table Create Table
+t2 CREATE TABLE `t2` (
+ `cb4` binary(4) DEFAULT NULL,
+ `cb` binary(4) DEFAULT NULL,
+ `cb16` binary(16) DEFAULT NULL,
+ `cb32` binary(32) DEFAULT NULL,
+ `cb530` varbinary(530) DEFAULT NULL,
+ `cb65535` blob DEFAULT NULL,
+ `cb66000` mediumblob DEFAULT NULL,
+ `cb16777215` mediumblob DEFAULT NULL,
+ `cb16777216` longblob DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT
+CAST(a AS BINARY(4)) AS cb4,
+CAST(a AS BINARY) AS cb,
+CAST(a AS BINARY(16)) AS cb16,
+CAST(a AS BINARY(32)) AS cb32,
+CAST(a AS BINARY(530)) AS cb530,
+CAST(a AS BINARY(65535)) AS cb65535
+FROM t1;
+SHOW CREATE TABLE t2;
+Table Create Table
+t2 CREATE TABLE `t2` (
+ `cb4` binary(4) DEFAULT NULL,
+ `cb` binary(4) DEFAULT NULL,
+ `cb16` binary(16) DEFAULT NULL,
+ `cb32` binary(32) DEFAULT NULL,
+ `cb530` varbinary(530) DEFAULT NULL,
+ `cb65535` blob DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+SELECT
+HEX(cb4),
+HEX(cb),
+HEX(cb16),
+HEX(cb32),
+LENGTH(cb530),
+LENGTH(cb65535)
+FROM t2;
+HEX(cb4) FF0000FF
+HEX(cb) FF0000FF
+HEX(cb16) FF0000FF000000000000000000000000
+HEX(cb32) FF0000FF00000000000000000000000000000000000000000000000000000000
+LENGTH(cb530) 530
+LENGTH(cb65535) 65535
+DROP TABLE t2;
+DROP TABLE t1;
+#
+# Implicit conversion to other types in INSERT
+#
+CREATE TABLE t1 (a INT);
+INSERT INTO t1 VALUES (CAST('0.0.0.0' AS INET4));
+ERROR HY000: Cannot cast 'inet4' as 'int' in assignment of `test`.`t1`.`a`
+DROP TABLE t1;
+CREATE TABLE t1 (a DOUBLE);
+INSERT INTO t1 VALUES (CAST('0.0.0.0' AS INET4));
+ERROR HY000: Cannot cast 'inet4' as 'double' in assignment of `test`.`t1`.`a`
+DROP TABLE t1;
+CREATE TABLE t1 (a DECIMAL(32,0));
+INSERT INTO t1 VALUES (CAST('0.0.0.0' AS INET4));
+ERROR HY000: Cannot cast 'inet4' as 'decimal' in assignment of `test`.`t1`.`a`
+DROP TABLE t1;
+CREATE TABLE t1 (a VARCHAR(64));
+INSERT INTO t1 VALUES (CAST('0.0.0.0' AS INET4));
+SELECT * FROM t1;
+a
+0.0.0.0
+DROP TABLE t1;
+CREATE TABLE t1 (a TEXT);
+INSERT INTO t1 VALUES (CAST('0.0.0.0' AS INET4));
+SELECT * FROM t1;
+a
+0.0.0.0
+DROP TABLE t1;
+#
+# Boolean context
+#
+SELECT
+CAST('0.0.0.0' AS INET4) IS TRUE,
+CAST('0.0.0.0' AS INET4) IS FALSE,
+CAST('0.0.0.1' AS INET4) IS TRUE,
+CAST('0.0.0.1' AS INET4) IS FALSE;
+CAST('0.0.0.0' AS INET4) IS TRUE CAST('0.0.0.0' AS INET4) IS FALSE CAST('0.0.0.1' AS INET4) IS TRUE CAST('0.0.0.1' AS INET4) IS FALSE
+0 1 1 0
+CREATE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES ('0.0.0.0'),('0.0.0.1');
+SELECT a, a IS TRUE, a IS FALSE FROM t1 ORDER BY a;
+a a IS TRUE a IS FALSE
+0.0.0.0 0 1
+0.0.0.1 1 0
+DROP TABLE t1;
+#
+# GROUP BY
+#
+CREATE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES ('0.0.0.0'),('0.0.0.0');
+INSERT INTO t1 VALUES ('0.0.0.1'),('0.0.0.01'),('0.0.0.001');
+INSERT INTO t1 VALUES ('0.0.0.2'),('0.0.0.2'),('0.0.0.2'),('0.0.0.2');
+SELECT a, COUNT(*) FROM t1 GROUP BY a;
+a COUNT(*)
+0.0.0.0 2
+0.0.0.1 3
+0.0.0.2 4
+DROP TABLE t1;
+#
+# Aggregate functions
+#
+CREATE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES ('0.0.0.0'),('0.0.0.0');
+INSERT INTO t1 VALUES ('0.0.0.1'),('0.0.0.01'),('0.0.0.001');
+INSERT INTO t1 VALUES ('0.0.0.2'),('0.0.0.2'),('0.0.0.2'),('0.0.0.2');
+SELECT MIN(a),MAX(a) FROM t1;
+MIN(a) MAX(a)
+0.0.0.0 0.0.0.2
+CREATE TABLE t2 AS SELECT MIN(a), MAX(a) FROM t1;
+SHOW CREATE TABLE t2;
+Table Create Table
+t2 CREATE TABLE `t2` (
+ `MIN(a)` inet4 DEFAULT NULL,
+ `MAX(a)` inet4 DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+DROP TABLE t2;
+SELECT AVG(a) FROM t1;
+ERROR HY000: Illegal parameter data type inet4 for operation 'avg('
+SELECT AVG(DISTINCT a) FROM t1;
+ERROR HY000: Illegal parameter data type inet4 for operation 'avg(distinct '
+SELECT SUM(a) FROM t1;
+ERROR HY000: Illegal parameter data type inet4 for operation 'sum('
+SELECT SUM(DISTINCT a) FROM t1;
+ERROR HY000: Illegal parameter data type inet4 for operation 'sum(distinct '
+SELECT STDDEV(a) FROM t1;
+ERROR HY000: Illegal parameter data type inet4 for operation 'std('
+SELECT GROUP_CONCAT(a ORDER BY a) FROM t1;
+GROUP_CONCAT(a ORDER BY a)
+0.0.0.0,0.0.0.0,0.0.0.1,0.0.0.1,0.0.0.1,0.0.0.2,0.0.0.2,0.0.0.2,0.0.0.2
+SELECT a, GROUP_CONCAT(a ORDER BY a) FROM t1 GROUP BY a;
+a GROUP_CONCAT(a ORDER BY a)
+0.0.0.0 0.0.0.0,0.0.0.0
+0.0.0.1 0.0.0.1,0.0.0.1,0.0.0.1
+0.0.0.2 0.0.0.2,0.0.0.2,0.0.0.2,0.0.0.2
+DROP TABLE t1;
+#
+# MDEV-21765 Possibly inconsistent behavior of BIT_xx functions with INET4 field
+#
+CREATE TABLE t1 (a INET4);
+SELECT BIT_AND(a) FROM t1;
+ERROR HY000: Illegal parameter data type inet4 for operation 'bit_and('
+SELECT BIT_OR(a) FROM t1;
+ERROR HY000: Illegal parameter data type inet4 for operation 'bit_or('
+SELECT BIT_XOR(a) FROM t1;
+ERROR HY000: Illegal parameter data type inet4 for operation 'bit_xor('
+DROP TABLE t1;
+#
+# Window functions
+#
+CREATE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES ('0.0.0.1'),('0.0.0.2'),('0.0.0.3'),('0.0.0.004');
+SELECT
+a,
+LAG(a) OVER (ORDER BY a),
+LEAD(a) OVER (ORDER BY a)
+FROM t1 ORDER BY a;
+a LAG(a) OVER (ORDER BY a) LEAD(a) OVER (ORDER BY a)
+0.0.0.1 NULL 0.0.0.2
+0.0.0.2 0.0.0.1 0.0.0.3
+0.0.0.3 0.0.0.2 0.0.0.4
+0.0.0.4 0.0.0.3 NULL
+SELECT
+a,
+FIRST_VALUE(a) OVER (ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING),
+LAST_VALUE(a) OVER (ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING)
+FROM t1 ORDER BY a;
+a FIRST_VALUE(a) OVER (ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) LAST_VALUE(a) OVER (ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING)
+0.0.0.1 0.0.0.1 0.0.0.2
+0.0.0.2 0.0.0.1 0.0.0.3
+0.0.0.3 0.0.0.2 0.0.0.4
+0.0.0.4 0.0.0.3 0.0.0.4
+DROP TABLE t1;
+#
+# Prepared statements
+#
+EXECUTE IMMEDIATE 'CREATE TABLE t1 AS SELECT ? AS a' USING CAST('0.0.0.0' AS INET4);
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` inet4 NOT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+EXECUTE IMMEDIATE 'INSERT INTO t1 VALUES (?)' USING '0.0.0.1';
+EXECUTE IMMEDIATE 'INSERT INTO t1 VALUES (?)' USING CAST('0.0.0.2' AS INET4);
+EXECUTE IMMEDIATE 'INSERT INTO t1 VALUES (?)' USING 0x00000003;
+EXECUTE IMMEDIATE 'INSERT INTO t1 VALUES (?)' USING CAST(0x00000004 AS INET4);
+SELECT a FROM t1 ORDER BY a;
+a
+0.0.0.0
+0.0.0.1
+0.0.0.2
+0.0.0.3
+0.0.0.4
+EXECUTE IMMEDIATE 'SELECT * FROM t1 WHERE a=?' USING '0.0.0.1';
+a
+0.0.0.1
+EXECUTE IMMEDIATE 'SELECT * FROM t1 WHERE a=?' USING CAST('0.0.0.2' AS INET4);
+a
+0.0.0.2
+EXECUTE IMMEDIATE 'SELECT * FROM t1 WHERE a=?' USING 0x00000003;
+a
+0.0.0.3
+EXECUTE IMMEDIATE 'SELECT * FROM t1 WHERE a=?' USING CAST(0x00000004 AS INET4);
+a
+0.0.0.4
+DROP TABLE t1;
+#
+# Character set and collation aggregation
+#
+CREATE TABLE t1 (a INET4);
+CREATE TABLE t2 AS SELECT
+CONCAT(a) AS c1,
+CONCAT(CAST('0.0.0.0' AS INET4)) AS c2
+FROM t1;
+SHOW CREATE TABLE t2;
+Table Create Table
+t2 CREATE TABLE `t2` (
+ `c1` varchar(15) DEFAULT NULL,
+ `c2` varchar(15) DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT
+CONCAT(_utf8'1', a) AS c1,
+CONCAT(_utf8'1', CAST('0.0.0.1' AS INET4)) AS c2,
+CONCAT(_utf8'1', COALESCE(a)) AS c3
+FROM t1;
+SHOW CREATE TABLE t2;
+Table Create Table
+t2 CREATE TABLE `t2` (
+ `c1` varchar(16) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL,
+ `c2` varchar(16) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL,
+ `c3` varchar(16) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT
+CONCAT(_latin1'1', a) AS c1,
+CONCAT(_latin1'1', CAST('0.0.0.1' AS INET4)) AS c2,
+CONCAT(_latin1'1', COALESCE(a)) AS c3
+FROM t1;
+SHOW CREATE TABLE t2;
+Table Create Table
+t2 CREATE TABLE `t2` (
+ `c1` varchar(16) DEFAULT NULL,
+ `c2` varchar(16) DEFAULT NULL,
+ `c3` varchar(16) DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+DROP TABLE t2;
+DROP TABLE t1;
+#
+# UNION
+#
+CREATE TABLE t1 AS SELECT CAST('0.0.0.0' AS INET4) AS c UNION SELECT CAST('0.0.0.1' AS INET4);
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c` inet4 NOT NULL DEFAULT '0.0.0.0'
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+DROP TABLE t1;
+CREATE TABLE t1 AS SELECT CAST('0.0.0.0' AS INET4) AS c UNION SELECT '0.0.0.1';
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c` inet4 NOT NULL DEFAULT '0.0.0.0'
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+DROP TABLE t1;
+CREATE TABLE t1 AS SELECT '0.0.0.0' AS c UNION SELECT CAST('0.0.0.1' AS INET4);
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c` inet4 NOT NULL DEFAULT '0.0.0.0'
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+DROP TABLE t1;
+CREATE TABLE t1 AS SELECT CAST('0.0.0.0' AS INET4) AS c UNION SELECT 0x00000001;
+SELECT * FROM t1;
+c
+0.0.0.0
+0.0.0.1
+DROP TABLE t1;
+CREATE TABLE t1 AS SELECT CAST('0.0.0.0' AS INET4) AS c UNION SELECT 1;
+ERROR HY000: Illegal parameter data types inet4 and int for operation 'UNION'
+#
+# Unary operators
+#
+SELECT -CAST('0.0.0.0' AS INET4);
+ERROR HY000: Illegal parameter data type inet4 for operation '-'
+SELECT ABS(CAST('0.0.0.0' AS INET4));
+ERROR HY000: Illegal parameter data type inet4 for operation 'abs'
+SELECT ROUND(CAST('0.0.0.0' AS INET4));
+ERROR HY000: Illegal parameter data type inet4 for operation 'round'
+SELECT CEILING(CAST('0.0.0.0' AS INET4));
+ERROR HY000: Illegal parameter data type inet4 for operation 'ceiling'
+SELECT FLOOR(CAST('0.0.0.0' AS INET4));
+ERROR HY000: Illegal parameter data type inet4 for operation 'floor'
+#
+# Arithmetic operators
+#
+SELECT CAST('0.0.0.0' AS INET4) + 1;
+ERROR HY000: Illegal parameter data types inet4 and int for operation '+'
+SELECT CAST('0.0.0.0' AS INET4) - 1;
+ERROR HY000: Illegal parameter data types inet4 and int for operation '-'
+SELECT CAST('0.0.0.0' AS INET4) * 1;
+ERROR HY000: Illegal parameter data types inet4 and int for operation '*'
+SELECT CAST('0.0.0.0' AS INET4) / 1;
+ERROR HY000: Illegal parameter data types inet4 and int for operation '/'
+SELECT CAST('0.0.0.0' AS INET4) MOD 1;
+ERROR HY000: Illegal parameter data types inet4 and int for operation 'MOD'
+#
+# Misc
+#
+SELECT RAND(CAST('0.0.0.0' AS INET4));
+ERROR HY000: Illegal parameter data type inet4 for operation 'rand'
+SELECT FROM_UNIXTIME(CAST('0.0.0.0' AS INET4));
+ERROR HY000: Illegal parameter data type inet4 for operation 'from_unixtime'
+SELECT HOUR(CAST('0.0.0.0' AS INET4));
+ERROR HY000: Illegal parameter data type inet4 for operation 'hour'
+SELECT YEAR(CAST('0.0.0.0' AS INET4));
+ERROR HY000: Illegal parameter data type inet4 for operation 'year'
+SELECT RELEASE_LOCK(CAST('0.0.0.0' AS INET4));
+ERROR HY000: Illegal parameter data type inet4 for operation 'release_lock'
+#
+# Virtual columns
+#
+CREATE TABLE t1 (
+a INT,
+b INET4 GENERATED ALWAYS AS (CAST(CONCAT(RAND(),a) AS INET4)), INDEX(b)
+);
+ERROR HY000: Function or expression 'rand()' cannot be used in the GENERATED ALWAYS AS clause of `b`
+CREATE TABLE t1 (
+a INT,
+b INET4 GENERATED ALWAYS AS (CAST(CONCAT('0.0.0.',a) AS INET4)), INDEX(b)
+);
+INSERT INTO t1 (a) VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12),(13),(14),(15);
+SELECT * FROM t1;
+a b
+0 0.0.0.0
+1 0.0.0.1
+2 0.0.0.2
+3 0.0.0.3
+4 0.0.0.4
+5 0.0.0.5
+6 0.0.0.6
+7 0.0.0.7
+8 0.0.0.8
+9 0.0.0.9
+10 0.0.0.10
+11 0.0.0.11
+12 0.0.0.12
+13 0.0.0.13
+14 0.0.0.14
+15 0.0.0.15
+DROP TABLE t1;
+#
+# VIEW
+#
+CREATE TABLE t1 (a INT DEFAULT 0);
+INSERT INTO t1 (a) VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12),(13),(14),(15);
+SELECT * FROM t1 ORDER BY a;
+a
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+CREATE VIEW v1 AS SELECT (CAST(CONCAT('0.0.0.',a) AS INET4)) AS c FROM t1;
+SELECT * FROM v1 ORDER BY c;
+c
+0.0.0.0
+0.0.0.1
+0.0.0.2
+0.0.0.3
+0.0.0.4
+0.0.0.5
+0.0.0.6
+0.0.0.7
+0.0.0.8
+0.0.0.9
+0.0.0.10
+0.0.0.11
+0.0.0.12
+0.0.0.13
+0.0.0.14
+0.0.0.15
+DROP VIEW v1;
+DROP TABLE t1;
+CREATE TABLE t1 (a INET4 DEFAULT '0.0.0.0');
+CREATE VIEW v1 AS SELECT * FROM t1;
+SHOW CREATE VIEW v1;
+View Create View character_set_client collation_connection
+v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `a` from `t1` latin1 latin1_swedish_ci
+DESCRIBE v1;
+Field Type Null Key Default Extra
+a inet4 YES 0.0.0.0
+INSERT INTO v1 VALUES ('0.0.0.0'),('0.0.0.1'),('0.0.0.2');
+SELECT * FROM t1;
+a
+0.0.0.0
+0.0.0.1
+0.0.0.2
+DROP VIEW v1;
+DROP TABLE t1;
+CREATE TABLE t1 (a INET4 DEFAULT CAST('0.0.0.0' AS INET4));
+CREATE VIEW v1 AS SELECT * FROM t1;
+SHOW CREATE VIEW v1;
+View Create View character_set_client collation_connection
+v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `a` from `t1` latin1 latin1_swedish_ci
+DESCRIBE v1;
+Field Type Null Key Default Extra
+a inet4 YES cast('0.0.0.0' as inet4)
+INSERT INTO v1 VALUES ('0.0.0.0'),('0.0.0.1'),('0.0.0.2');
+SELECT * FROM t1;
+a
+0.0.0.0
+0.0.0.1
+0.0.0.2
+DROP VIEW v1;
+DROP TABLE t1;
+#
+# Subqueries
+#
+CREATE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES ('0.0.0.0'),('0.0.0.1'),('0.0.0.2');
+SELECT * FROM t1 WHERE a=(SELECT MIN(a) FROM t1) ORDER BY a;
+a
+0.0.0.0
+SELECT * FROM t1 WHERE a=(SELECT MAX(a) FROM t1) ORDER BY a;
+a
+0.0.0.2
+SELECT * FROM t1 WHERE a IN (SELECT a FROM t1 WHERE a>'0.0.0.0') ORDER BY a;
+a
+0.0.0.1
+0.0.0.2
+DROP TABLE t1;
+#
+# Stored routines
+#
+CREATE PROCEDURE p1(a INET4)
+BEGIN
+DECLARE b INET4 DEFAULT CONCAT('1', a);
+SELECT a, b;
+END;
+$$
+CALL p1('0.0.0.1');
+a b
+0.0.0.1 10.0.0.1
+CALL p1(CAST('0.0.0.2' AS INET4));
+a b
+0.0.0.2 10.0.0.2
+DROP PROCEDURE p1;
+CREATE FUNCTION f1(a INET4) RETURNS INET4
+BEGIN
+RETURN CONCAT('1',a);
+END;
+$$
+SELECT f1('0.0.0.1');
+f1('0.0.0.1')
+10.0.0.1
+SELECT f1(CAST('0.0.0.1' AS INET4));
+f1(CAST('0.0.0.1' AS INET4))
+10.0.0.1
+DROP FUNCTION f1;
+#
+# Anchored data types in SP variables
+#
+CREATE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES ('0.0.0.1');
+CREATE PROCEDURE p1()
+BEGIN
+DECLARE va TYPE OF t1.a;
+SELECT MAX(a) INTO va FROM t1;
+SELECT va;
+END;
+$$
+CALL p1;
+va
+0.0.0.1
+DROP PROCEDURE p1;
+DROP TABLE t1;
+CREATE TABLE t1 (a INET4, b INET4);
+INSERT INTO t1 VALUES ('0.0.0.12', '0.0.0.111');
+CREATE PROCEDURE p1()
+BEGIN
+DECLARE va ROW TYPE OF t1;
+SELECT MAX(a), MAX(b) INTO va FROM t1;
+SELECT va.a, va.b;
+END;
+$$
+CALL p1;
+va.a va.b
+0.0.0.12 0.0.0.111
+DROP PROCEDURE p1;
+DROP TABLE t1;
+#
+# Optimizer: make_const_item_for_comparison
+#
+CREATE TABLE t1 (id INT, a INET4);
+INSERT INTO t1 VALUES (1,'0.0.0.1'),(2,'0.0.0.2');
+EXPLAIN EXTENDED SELECT * FROM t1 WHERE a=COALESCE(CAST('0.0.0.1' AS INET4)) AND id>0;
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
+Warnings:
+Note 1003 select `test`.`t1`.`id` AS `id`,`test`.`t1`.`a` AS `a` from `test`.`t1` where `test`.`t1`.`a` = INET4'0.0.0.1' and `test`.`t1`.`id` > 0
+DROP TABLE t1;
+#
+# Optimizer: equal field propagation
+#
+CREATE TABLE t1 (id INT, a INET4);
+INSERT INTO t1 VALUES (1,'0.0.0.1'),(2,'0.0.0.2');
+EXPLAIN EXTENDED SELECT * FROM t1
+WHERE a=COALESCE(CAST('0.0.0.1' AS INET4))
+AND LENGTH(CONCAT(a,RAND()))>1;
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
+Warnings:
+Note 1003 select `test`.`t1`.`id` AS `id`,`test`.`t1`.`a` AS `a` from `test`.`t1` where `test`.`t1`.`a` = INET4'0.0.0.1' and octet_length(concat(INET4'0.0.0.1',rand())) > 1
+EXPLAIN EXTENDED SELECT * FROM t1
+WHERE a=COALESCE(CAST('0.0.0.1' AS INET4))
+AND LENGTH(a)>1;
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
+Warnings:
+Note 1003 select `test`.`t1`.`id` AS `id`,`test`.`t1`.`a` AS `a` from `test`.`t1` where `test`.`t1`.`a` = INET4'0.0.0.1'
+DROP TABLE t1;
+#
+# Optimizer: equal expression propagation
+#
+CREATE TABLE t1 (id INT, a INET4);
+INSERT INTO t1 VALUES (1,'0.0.0.1'),(2,'0.0.0.2');
+EXPLAIN EXTENDED SELECT * FROM t1
+WHERE COALESCE(a)='0.0.0.1' AND COALESCE(a)=CONCAT(a);
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
+Warnings:
+Note 1003 select `test`.`t1`.`id` AS `id`,`test`.`t1`.`a` AS `a` from `test`.`t1` where coalesce(`test`.`t1`.`a`) = '0.0.0.1' and concat(`test`.`t1`.`a`) = '0.0.0.1'
+DROP TABLE t1;
+#
+# Subquery materialization
+#
+CREATE TABLE t1 (a INET4, b VARCHAR(32), KEY (a), KEY(b)) ;
+INSERT INTO t1 VALUES ('0.0.0.10','0.0.0.11'),('0.0.0.10','0.0.0.11');
+SET @@optimizer_switch='semijoin=off,materialization=on,in_to_exists=off,subquery_cache=off';
+EXPLAIN SELECT * FROM t1 WHERE a IN (SELECT a AS a_inner FROM t1 GROUP BY a_inner);
+id select_type table type possible_keys key key_len ref rows Extra
+1 PRIMARY t1 ALL NULL NULL NULL NULL 2 Using where
+2 MATERIALIZED t1 index NULL a 5 NULL 2 Using index
+EXPLAIN SELECT * FROM t1 WHERE b IN (SELECT a AS a_inner FROM t1 GROUP BY a_inner);
+id select_type table type possible_keys key key_len ref rows Extra
+1 PRIMARY t1 ALL NULL NULL NULL NULL 2 Using where
+2 DEPENDENT SUBQUERY t1 index_subquery a a 5 func 2 Using index; Using where
+SET @@optimizer_switch=DEFAULT;
+DROP TABLE t1;
+#
+# ALTER from INET4 to INET4
+#
+CREATE TABLE t1 (a INET4, b INT);
+INSERT INTO t1 VALUES ('10.11.12.13', 1);
+ALTER TABLE t1 MODIFY b DECIMAL(10,2);
+SELECT * FROM t1;
+a b
+10.11.12.13 1.00
+DROP TABLE t1;
+#
+# ALTER to character string data types
+#
+CREATE OR REPLACE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES ('10.11.12.13');
+SELECT CAST(a AS CHAR(15)) FROM t1;
+CAST(a AS CHAR(15))
+10.11.12.13
+ALTER TABLE t1 MODIFY a CHAR(15);
+SELECT * FROM t1;
+a
+10.11.12.13
+DROP TABLE t1;
+CREATE OR REPLACE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES ('10.11.12.13');
+ALTER TABLE t1 MODIFY a VARCHAR(15);
+SELECT * FROM t1;
+a
+10.11.12.13
+DROP TABLE t1;
+CREATE OR REPLACE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES ('10.11.12.13');
+ALTER TABLE t1 MODIFY a TINYTEXT;
+SELECT * FROM t1;
+a
+10.11.12.13
+DROP TABLE t1;
+CREATE OR REPLACE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES ('10.11.12.13');
+ALTER TABLE t1 MODIFY a TEXT;
+SELECT * FROM t1;
+a
+10.11.12.13
+DROP TABLE t1;
+CREATE OR REPLACE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES ('10.11.12.13');
+ALTER TABLE t1 MODIFY a MEDIUMTEXT;
+SELECT * FROM t1;
+a
+10.11.12.13
+DROP TABLE t1;
+CREATE OR REPLACE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES ('10.11.12.13');
+ALTER TABLE t1 MODIFY a LONGTEXT;
+SELECT * FROM t1;
+a
+10.11.12.13
+DROP TABLE t1;
+#
+# ALTER from character string data types
+#
+CREATE OR REPLACE TABLE t1 (a CHAR(64));
+INSERT INTO t1 VALUES ('10.11.12.13');
+SELECT CAST(a AS INET4) FROM t1;
+CAST(a AS INET4)
+10.11.12.13
+ALTER TABLE t1 MODIFY a INET4;
+SELECT * FROM t1;
+a
+10.11.12.13
+DROP TABLE t1;
+CREATE OR REPLACE TABLE t1 (a VARCHAR(64));
+INSERT INTO t1 VALUES ('10.11.12.13');
+SELECT CAST(a AS INET4) FROM t1;
+CAST(a AS INET4)
+10.11.12.13
+ALTER TABLE t1 MODIFY a INET4;
+SELECT * FROM t1;
+a
+10.11.12.13
+DROP TABLE t1;
+CREATE OR REPLACE TABLE t1 (a TINYTEXT);
+INSERT INTO t1 VALUES ('10.11.12.13');
+SELECT CAST(a AS INET4) FROM t1;
+CAST(a AS INET4)
+10.11.12.13
+ALTER TABLE t1 MODIFY a INET4;
+SELECT * FROM t1;
+a
+10.11.12.13
+DROP TABLE t1;
+CREATE OR REPLACE TABLE t1 (a TEXT);
+INSERT INTO t1 VALUES ('10.11.12.13');
+SELECT CAST(a AS INET4) FROM t1;
+CAST(a AS INET4)
+10.11.12.13
+ALTER TABLE t1 MODIFY a INET4;
+SELECT * FROM t1;
+a
+10.11.12.13
+DROP TABLE t1;
+CREATE OR REPLACE TABLE t1 (a MEDIUMTEXT);
+INSERT INTO t1 VALUES ('10.11.12.13');
+SELECT CAST(a AS INET4) FROM t1;
+CAST(a AS INET4)
+10.11.12.13
+ALTER TABLE t1 MODIFY a INET4;
+SELECT * FROM t1;
+a
+10.11.12.13
+DROP TABLE t1;
+CREATE OR REPLACE TABLE t1 (a LONGTEXT);
+INSERT INTO t1 VALUES ('10.11.12.13');
+SELECT CAST(a AS INET4) FROM t1;
+CAST(a AS INET4)
+10.11.12.13
+ALTER TABLE t1 MODIFY a INET4;
+SELECT * FROM t1;
+a
+10.11.12.13
+DROP TABLE t1;
+#
+# ALTER to binary string data types
+#
+CREATE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES ('10.11.12.13');
+ALTER TABLE t1 MODIFY a BINARY(4);
+SELECT HEX(a) FROM t1;
+HEX(a)
+0A0B0C0D
+DROP TABLE t1;
+CREATE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES ('10.11.12.13');
+ALTER TABLE t1 MODIFY a BINARY(5);
+SELECT HEX(a) FROM t1;
+HEX(a)
+0A0B0C0D00
+DROP TABLE t1;
+CREATE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES ('10.11.12.13');
+ALTER TABLE t1 MODIFY a BINARY(3);
+ERROR 22001: Data too long for column 'a' at row 1
+DROP TABLE t1;
+CREATE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES ('10.11.12.13');
+ALTER TABLE t1 MODIFY a TINYBLOB;
+SELECT HEX(a) FROM t1;
+HEX(a)
+0A0B0C0D
+DROP TABLE t1;
+CREATE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES ('10.11.12.13');
+ALTER TABLE t1 MODIFY a BLOB;
+SELECT HEX(a) FROM t1;
+HEX(a)
+0A0B0C0D
+DROP TABLE t1;
+CREATE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES ('10.11.12.13');
+ALTER TABLE t1 MODIFY a MEDIUMBLOB;
+SELECT HEX(a) FROM t1;
+HEX(a)
+0A0B0C0D
+DROP TABLE t1;
+CREATE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES ('10.11.12.13');
+ALTER TABLE t1 MODIFY a LONGBLOB;
+SELECT HEX(a) FROM t1;
+HEX(a)
+0A0B0C0D
+DROP TABLE t1;
+#
+# ALTER from binary string data types
+#
+CREATE TABLE t1 (a BINARY(4));
+INSERT INTO t1 VALUES (X'11121314');
+ALTER TABLE t1 MODIFY a INET4;
+SELECT a FROM t1;
+a
+17.18.19.20
+DROP TABLE t1;
+CREATE TABLE t1 (a BINARY(17));
+INSERT INTO t1 VALUES (X'1112131400');
+ALTER TABLE t1 MODIFY a INET4;
+ERROR 22007: Incorrect inet4 value: '\x11\x12\x13\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' for column `test`.`t1`.`a` at row 1
+DROP TABLE t1;
+CREATE TABLE t1 (a BINARY(3));
+INSERT INTO t1 VALUES (X'111213');
+ALTER TABLE t1 MODIFY a INET4;
+ERROR 22007: Incorrect inet4 value: '\x11\x12\x13' for column `test`.`t1`.`a` at row 1
+DROP TABLE t1;
+CREATE TABLE t1 (a TINYBLOB);
+INSERT INTO t1 VALUES (X'11121314');
+ALTER TABLE t1 MODIFY a INET4;
+SELECT a FROM t1;
+a
+17.18.19.20
+DROP TABLE t1;
+CREATE TABLE t1 (a BLOB);
+INSERT INTO t1 VALUES (X'11121314');
+ALTER TABLE t1 MODIFY a INET4;
+SELECT a FROM t1;
+a
+17.18.19.20
+DROP TABLE t1;
+CREATE TABLE t1 (a MEDIUMBLOB);
+INSERT INTO t1 VALUES (X'11121314');
+ALTER TABLE t1 MODIFY a INET4;
+SELECT a FROM t1;
+a
+17.18.19.20
+DROP TABLE t1;
+CREATE TABLE t1 (a BLOB);
+INSERT INTO t1 VALUES (X'11121314');
+ALTER TABLE t1 MODIFY a INET4;
+SELECT a FROM t1;
+a
+17.18.19.20
+DROP TABLE t1;
+#
+# SET from INET4 to INET4
+#
+CREATE TABLE t1 (a INET4, b INET4);
+INSERT INTO t1 VALUES ('255.0.0.255', NULL);
+UPDATE t1 SET b=a;
+SELECT b FROM t1;
+b
+255.0.0.255
+DROP TABLE t1;
+#
+# SET from INET4 to character string
+#
+CREATE TABLE t1 (a INET4, b CHAR(15));
+INSERT INTO t1 VALUES ('255.0.0.255', NULL);
+UPDATE t1 SET b=a;
+SELECT b FROM t1;
+b
+255.0.0.255
+DROP TABLE t1;
+CREATE TABLE t1 (a INET4, b VARCHAR(15));
+INSERT INTO t1 VALUES ('255.0.0.255', NULL);
+UPDATE t1 SET b=a;
+SELECT b FROM t1;
+b
+255.0.0.255
+DROP TABLE t1;
+CREATE TABLE t1 (a INET4, b TEXT);
+INSERT INTO t1 VALUES ('255.0.0.255', NULL);
+UPDATE t1 SET b=a;
+SELECT b FROM t1;
+b
+255.0.0.255
+DROP TABLE t1;
+CREATE TABLE t1 (a INET4, b ENUM('255.0.0.255'));
+INSERT INTO t1 VALUES ('255.0.0.255', NULL);
+UPDATE t1 SET b=a;
+SELECT b FROM t1;
+b
+255.0.0.255
+DROP TABLE t1;
+CREATE TABLE t1 (a INET4, b SET('255.0.0.255'));
+INSERT INTO t1 VALUES ('255.0.0.255', NULL);
+UPDATE t1 SET b=a;
+SELECT b FROM t1;
+b
+255.0.0.255
+DROP TABLE t1;
+#
+# SET from character string to INET4
+#
+CREATE TABLE t1 (a CHAR(15), b INET4);
+INSERT INTO t1 VALUES ('255.0.0.255', NULL);
+UPDATE t1 SET b=a;
+SELECT b FROM t1;
+b
+255.0.0.255
+DROP TABLE t1;
+CREATE TABLE t1 (a VARCHAR(15), b INET4);
+INSERT INTO t1 VALUES ('255.0.0.255', NULL);
+UPDATE t1 SET b=a;
+SELECT b FROM t1;
+b
+255.0.0.255
+DROP TABLE t1;
+CREATE TABLE t1 (a TEXT, b INET4);
+INSERT INTO t1 VALUES ('255.0.0.255', NULL);
+UPDATE t1 SET b=a;
+SELECT b FROM t1;
+b
+255.0.0.255
+DROP TABLE t1;
+CREATE TABLE t1 (a ENUM('255.0.0.255'), b INET4);
+INSERT INTO t1 VALUES ('255.0.0.255', NULL);
+UPDATE t1 SET b=a;
+SELECT b FROM t1;
+b
+255.0.0.255
+DROP TABLE t1;
+CREATE TABLE t1 (a SET('255.0.0.255'), b INET4);
+INSERT INTO t1 VALUES ('255.0.0.255', NULL);
+UPDATE t1 SET b=a;
+SELECT b FROM t1;
+b
+255.0.0.255
+DROP TABLE t1;
+#
+# SET from INET4 to binary
+#
+CREATE TABLE t1 (a INET4, b BINARY(4));
+INSERT INTO t1 VALUES ('255.0.0.255', NULL);
+UPDATE t1 SET b=a;
+SELECT HEX(b) FROM t1;
+HEX(b)
+FF0000FF
+DROP TABLE t1;
+CREATE TABLE t1 (a INET4, b VARBINARY(4));
+INSERT INTO t1 VALUES ('255.0.0.255', NULL);
+UPDATE t1 SET b=a;
+SELECT HEX(b) FROM t1;
+HEX(b)
+FF0000FF
+DROP TABLE t1;
+CREATE TABLE t1 (a INET4, b BLOB);
+INSERT INTO t1 VALUES ('255.0.0.255', NULL);
+UPDATE t1 SET b=a;
+SELECT HEX(b) FROM t1;
+HEX(b)
+FF0000FF
+DROP TABLE t1;
+#
+# SET from binary to INET4
+#
+CREATE TABLE t1 (a BINARY(4), b INET4);
+INSERT INTO t1 VALUES (CONCAT(0xFF,REPEAT(0x00,2),0xFF), NULL);
+UPDATE t1 SET b=a;
+SELECT b FROM t1;
+b
+255.0.0.255
+DROP TABLE t1;
+CREATE TABLE t1 (a VARBINARY(4), b INET4);
+INSERT INTO t1 VALUES (CONCAT(0xFF,REPEAT(0x00,2),0xFF), NULL);
+UPDATE t1 SET b=a;
+SELECT b FROM t1;
+b
+255.0.0.255
+DROP TABLE t1;
+CREATE TABLE t1 (a BLOB, b INET4);
+INSERT INTO t1 VALUES (CONCAT(0xFF,REPEAT(0x00,2),0xFF), NULL);
+UPDATE t1 SET b=a;
+SELECT b FROM t1;
+b
+255.0.0.255
+DROP TABLE t1;
+#
+# MDEV-20785 Converting INET6 to CHAR(39) produces garbage without a warning
+#
+CREATE OR REPLACE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES ('10.11.12.13');
+SELECT CAST(a AS CHAR(15)) FROM t1;
+CAST(a AS CHAR(15))
+10.11.12.13
+ALTER TABLE t1 MODIFY a CHAR(15);
+SELECT * FROM t1;
+a
+10.11.12.13
+DROP TABLE t1;
+#
+# MDEV-20783 INET6 cannot be converted to BINARY(16) (requires clarification in documentation)
+#
+CREATE OR REPLACE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES ('10.11.12.13');
+ALTER TABLE t1 MODIFY a BINARY(4);
+SELECT HEX(a) FROM t1;
+HEX(a)
+0A0B0C0D
+DROP TABLE t1;
+#
+# MDEV-20795 CAST(inet6 AS BINARY) returns wrong result
+#
+CREATE OR REPLACE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES ('10.11.12.13');
+SELECT HEX(CAST(a AS BINARY)) FROM t1;
+HEX(CAST(a AS BINARY))
+0A0B0C0D
+SELECT HEX(CAST(a AS BINARY(4))) FROM t1;
+HEX(CAST(a AS BINARY(4)))
+0A0B0C0D
+DROP TABLE t1;
+#
+# MDEV-20808 CAST from INET6 to FLOAT does not produce an error
+#
+CREATE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES ('0.0.0.0');
+SELECT CAST(a AS FLOAT) FROM t1;
+ERROR HY000: Illegal parameter data type inet4 for operation 'float_typecast'
+DROP TABLE t1;
+#
+# MDEV-20798 Conversion from INET6 to other types performed without errors or warnings
+#
+CREATE TABLE t1 (a INET4, b INT);
+INSERT INTO t1 (a) VALUES ('0.0.0.0');
+UPDATE t1 SET b=a;
+ERROR HY000: Cannot cast 'inet4' as 'int' in assignment of `test`.`t1`.`b`
+SELECT * FROM t1;
+a b
+0.0.0.0 NULL
+DROP TABLE t1;
+SET timestamp=UNIX_TIMESTAMP('2001-01-01 10:20:30');
+CREATE TABLE t1 (a INET4, b TIMESTAMP);
+INSERT INTO t1 (a) VALUES ('0.0.0.0');
+UPDATE t1 SET b=a;
+ERROR HY000: Cannot cast 'inet4' as 'timestamp' in assignment of `test`.`t1`.`b`
+SELECT * FROM t1;
+a b
+0.0.0.0 NULL
+DROP TABLE t1;
+SET timestamp=DEFAULT;
+CREATE OR REPLACE TABLE t1 (a INET4);
+INSERT INTO t1 (a) VALUES ('0.0.0.0');
+ALTER TABLE t1 MODIFY a DATE;
+ERROR HY000: Cannot cast 'inet4' as 'date' in assignment of `test`.`t1`.`a`
+DROP TABLE t1;
+#
+# MDEV-20818 ER_CRASHED_ON_USAGE or Assertion `length <= column->length' failed in write_block_record on temporary table
+#
+CREATE TABLE t1 (a INET4);
+SELECT
+CAST(a AS BINARY(0)),
+CAST(a AS BINARY(1)),
+CAST(a AS BINARY(16)),
+CAST(a AS BINARY(255)),
+CAST(a AS BINARY(256)),
+CAST(a AS BINARY(512)),
+CAST(a AS BINARY(513)),
+CAST(a AS BINARY(65532)),
+CAST(a AS BINARY(65533)),
+CAST(a AS BINARY(65534)),
+CAST(a AS BINARY(65535)),
+CAST(a AS BINARY(65536)),
+CAST(a AS BINARY(16777215)),
+CAST(a AS BINARY(16777216))
+FROM t1;
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def CAST(a AS BINARY(0)) 254 0 0 Y 128 0 63
+def CAST(a AS BINARY(1)) 254 1 0 Y 128 0 63
+def CAST(a AS BINARY(16)) 254 16 0 Y 128 0 63
+def CAST(a AS BINARY(255)) 254 255 0 Y 128 0 63
+def CAST(a AS BINARY(256)) 253 256 0 Y 128 0 63
+def CAST(a AS BINARY(512)) 253 512 0 Y 128 0 63
+def CAST(a AS BINARY(513)) 253 513 0 Y 128 0 63
+def CAST(a AS BINARY(65532)) 253 65532 0 Y 128 0 63
+def CAST(a AS BINARY(65533)) 252 65533 0 Y 128 0 63
+def CAST(a AS BINARY(65534)) 252 65534 0 Y 128 0 63
+def CAST(a AS BINARY(65535)) 252 65535 0 Y 128 0 63
+def CAST(a AS BINARY(65536)) 250 65536 0 Y 128 0 63
+def CAST(a AS BINARY(16777215)) 250 16777215 0 Y 128 0 63
+def CAST(a AS BINARY(16777216)) 251 16777216 0 Y 128 0 63
+CAST(a AS BINARY(0)) CAST(a AS BINARY(1)) CAST(a AS BINARY(16)) CAST(a AS BINARY(255)) CAST(a AS BINARY(256)) CAST(a AS BINARY(512)) CAST(a AS BINARY(513)) CAST(a AS BINARY(65532)) CAST(a AS BINARY(65533)) CAST(a AS BINARY(65534)) CAST(a AS BINARY(65535)) CAST(a AS BINARY(65536)) CAST(a AS BINARY(16777215)) CAST(a AS BINARY(16777216))
+DROP TABLE t1;
+#
+# MDEV-20826 Wrong result of MIN(inet6) with GROUP BY
+#
+CREATE TABLE t1 (id INT, a INET4) ENGINE=MyISAM;
+INSERT INTO t1 VALUES (1, '255.0.0.0'),(1, '128.0.0.0');
+SELECT MIN(a), MAX(a) FROM t1 GROUP BY id;
+MIN(a) MAX(a)
+128.0.0.0 255.0.0.0
+DROP TABLE t1;
+#
+# MDEV-20809 EXTRACT from INET4 value does not produce any warnings
+#
+CREATE TABLE t1 (a INET4);
+SELECT EXTRACT(DAY FROM a) FROM t1;
+ERROR HY000: Illegal parameter data type inet4 for operation 'extract(day)'
+DROP TABLE t1;
+SELECT EXTRACT(DAY FROM CAST('0.0.0.0' AS INET4));
+ERROR HY000: Illegal parameter data type inet4 for operation 'extract(day)'
+#
+# MDEV-22764 Crash with a stored aggregate function returning INET4
+#
+CREATE OR REPLACE AGGREGATE FUNCTION aggregate_min_inet4(x INET4) RETURNS INET4
+BEGIN
+DECLARE res INET4 DEFAULT NULL;
+DECLARE CONTINUE HANDLER FOR NOT FOUND
+RETURN res;
+LOOP
+FETCH GROUP NEXT ROW;
+IF (res IS NULL) OR (res > x) THEN
+SET res= x;
+END IF;
+END LOOP;
+END;
+$$
+CREATE OR REPLACE TABLE t1 (name CHAR(30), val INET4);
+INSERT INTO t1 VALUES ('a', '0.0.0.5');
+INSERT INTO t1 VALUES ('a', '0.0.0.3');
+INSERT INTO t1 VALUES ('b', '0.0.0.1');
+INSERT INTO t1 VALUES ('b', '0.0.0.2');
+INSERT INTO t1 VALUES ('b', '0.0.0.5');
+SELECT name, aggregate_min_inet4(val) pc FROM t1 GROUP BY name;
+name pc
+a 0.0.0.3
+b 0.0.0.1
+CREATE OR REPLACE TABLE t2 (name CHAR(30), val INET4);
+INSERT INTO t2 SELECT name, aggregate_min_inet4(val) pc FROM t1 GROUP BY name;
+SELECT * FROM t2;
+name val
+a 0.0.0.3
+b 0.0.0.1
+DROP TABLE t2;
+DROP TABLE t1;
+DROP FUNCTION aggregate_min_inet4;
+#
+# MDEV-20280 PERCENTILE_DISC() rejects temporal and string input
+#
+CREATE TABLE t1 (name CHAR(30), star_rating INET4);
+INSERT INTO t1 VALUES ('Lord of the Ladybirds', '0.0.0.5');
+INSERT INTO t1 VALUES ('Lord of the Ladybirds', '0.0.0.3');
+INSERT INTO t1 VALUES ('Lady of the Flies', '0.0.0.1');
+INSERT INTO t1 VALUES ('Lady of the Flies', '0.0.0.2');
+INSERT INTO t1 VALUES ('Lady of the Flies', '0.0.0.5');
+SELECT name, PERCENTILE_DISC(0.5)
+WITHIN GROUP (ORDER BY star_rating)
+OVER (PARTITION BY name) AS pc FROM t1;
+name pc
+Lady of the Flies 0.0.0.2
+Lady of the Flies 0.0.0.2
+Lady of the Flies 0.0.0.2
+Lord of the Ladybirds 0.0.0.3
+Lord of the Ladybirds 0.0.0.3
+SELECT name, PERCENTILE_DISC(0)
+WITHIN GROUP (ORDER BY star_rating)
+OVER (PARTITION BY name) AS pc FROM t1;
+name pc
+Lady of the Flies 0.0.0.1
+Lady of the Flies 0.0.0.1
+Lady of the Flies 0.0.0.1
+Lord of the Ladybirds 0.0.0.3
+Lord of the Ladybirds 0.0.0.3
+SELECT name, PERCENTILE_DISC(1)
+WITHIN GROUP (ORDER BY star_rating)
+OVER (PARTITION BY name) AS pc FROM t1;
+name pc
+Lady of the Flies 0.0.0.5
+Lady of the Flies 0.0.0.5
+Lady of the Flies 0.0.0.5
+Lord of the Ladybirds 0.0.0.5
+Lord of the Ladybirds 0.0.0.5
+DROP TABLE t1;
+#
+# MDEV-22758 Assertion `!item->null_value' failed in Type_handler_inet6::make_sort_key_part
+#
+CREATE TABLE t1 (a VARCHAR(8) NOT NULL, b INET4 NOT NULL);
+INSERT INTO t1 VALUES ('foo','0.0.0.0'),('bar','1.0.0.1');
+SELECT * FROM t1 ORDER BY CASE WHEN a THEN b ELSE a END;
+a b
+foo 0.0.0.0
+bar 1.0.0.1
+Warnings:
+Warning 1292 Truncated incorrect DOUBLE value: 'foo'
+Warning 1292 Incorrect inet4 value: 'foo'
+Warning 1292 Truncated incorrect DOUBLE value: 'bar'
+Warning 1292 Incorrect inet4 value: 'bar'
+DROP TABLE t1;
+CREATE OR REPLACE TABLE t1 (a VARCHAR(8) NOT NULL);
+INSERT INTO t1 VALUES ('foo'),('bar');
+SELECT * FROM t1 ORDER BY CAST(a AS INET4);
+a
+foo
+bar
+Warnings:
+Warning 1292 Incorrect inet4 value: 'foo'
+Warning 1292 Incorrect inet4 value: 'bar'
+DROP TABLE t1;
+CREATE TABLE t1 (a INET4 NOT NULL, b VARCHAR(32) NOT NULL);
+CREATE TABLE t2 AS SELECT CAST(a AS INET4) AS ca, CAST(b AS INET4) AS cb FROM t1;
+SHOW CREATE TABLE t2;
+Table Create Table
+t2 CREATE TABLE `t2` (
+ `ca` inet4 NOT NULL,
+ `cb` inet4 DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT COALESCE(a,a), COALESCE(a,b) FROM t1;
+SHOW CREATE TABLE t2;
+Table Create Table
+t2 CREATE TABLE `t2` (
+ `COALESCE(a,a)` inet4 NOT NULL,
+ `COALESCE(a,b)` inet4 DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT a AS ca,a AS cb FROM t1 UNION SELECT a,b FROM t1;
+SHOW CREATE TABLE t2;
+Table Create Table
+t2 CREATE TABLE `t2` (
+ `ca` inet4 NOT NULL DEFAULT '0.0.0.0',
+ `cb` inet4 DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+DROP TABLE t2;
+DROP TABLE t1;
+#
+# MDEV-22758 Assertion `!item->null_value' failed in Type_handler_inet6::make_sort_key_part
+#
+CREATE TABLE t1 (c INET4);
+INSERT INTO t1 VALUES ('0.0.0.0'),(NULL);
+SELECT * FROM t1 ORDER BY IFNULL(c, 'foo');
+c
+NULL
+0.0.0.0
+Warnings:
+Warning 1292 Incorrect inet4 value: 'foo'
+DROP TABLE t1;
+CREATE TABLE t1 (c INET4);
+INSERT INTO t1 VALUES ('0.0.0.0'),(NULL);
+CREATE TABLE t2 AS SELECT IFNULL(c, 'foo') FROM t1;
+Warnings:
+Warning 1292 Incorrect inet4 value: 'foo'
+SHOW CREATE TABLE t2;
+Table Create Table
+t2 CREATE TABLE `t2` (
+ `IFNULL(c, 'foo')` inet4 DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+SELECT * FROM t2;
+IFNULL(c, 'foo')
+0.0.0.0
+NULL
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT IFNULL(c, '0.0.0.1') FROM t1;
+SHOW CREATE TABLE t2;
+Table Create Table
+t2 CREATE TABLE `t2` (
+ `IFNULL(c, '0.0.0.1')` inet4 NOT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+SELECT * FROM t2;
+IFNULL(c, '0.0.0.1')
+0.0.0.0
+0.0.0.1
+DROP TABLE t2;
+DROP TABLE t1;
+#
+# MDEV-26732 Assertion `0' failed in Item::val_native
+#
+SELECT CAST(CONCAT('0.0.0.0', REPEAT('',RAND())) AS INET4) AS f, var_pop('x') FROM dual HAVING f > '';
+f var_pop('x')
+Warnings:
+Warning 1292 Truncated incorrect DOUBLE value: 'x'
+Warning 1292 Incorrect inet4 value: ''
+SELECT CAST(CONCAT('0.0.0.0', REPEAT('',RAND())) AS INET4) AS f, var_pop(1) FROM dual HAVING f >= '0.0.0.0';
+f var_pop(1)
+0.0.0.0 0.0000
+CREATE TABLE t1(id INET4 NOT NULL PRIMARY KEY, dsc INET4);
+INSERT INTO t1 VALUES ('0.0.0.1', '1.0.0.1'),('0.0.0.3', '1.0.0.3'),('1.0.0.4', NULL);
+CREATE TABLE t2 SELECT COALESCE(t1.dsc), COUNT(*) FROM t1 GROUP BY t1.id;
+SELECT * FROM t2 ORDER BY 1,2;
+COALESCE(t1.dsc) COUNT(*)
+NULL 1
+1.0.0.1 1
+1.0.0.3 1
+DROP TABLE t1, t2;
+#
+# MDEV-24619 Wrong result or Assertion `0' in Item::val_native / Type_handler_inet6::Item_val_native_with_conversion
+#
+CREATE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES ('0.0.0.0'),('0.0.0.0');
+SELECT IF(1, '0.0.0.0', a) AS f FROM t1 GROUP BY 'foo' HAVING f != '';
+f
+Warnings:
+Warning 1292 Incorrect inet4 value: ''
+SELECT IF(1, '0.0.0.0', a) AS f FROM t1 GROUP BY 'foo' HAVING f != '0.0.0.0';
+f
+SELECT IF(1, '0.0.0.0', a) AS f FROM t1 GROUP BY 'foo' HAVING f != '0.0.0.1';
+f
+0.0.0.0
+DROP TABLE t1;
+#
+# End of 10.10 tests
+#
diff --git a/plugin/type_inet/mysql-test/type_inet/type_inet4.test b/plugin/type_inet/mysql-test/type_inet/type_inet4.test
new file mode 100644
index 00000000000..b6b6300da47
--- /dev/null
+++ b/plugin/type_inet/mysql-test/type_inet/type_inet4.test
@@ -0,0 +1,1477 @@
+--echo #
+--echo # Start of 10.10 tests
+--echo #
+
+--echo #
+--echo # MDEV-23287 The INET4 data type
+--echo #
+
+--echo #
+--echo # Basic CREATE functionality, defaults, metadata
+--echo #
+
+--error ER_WRONG_FIELD_SPEC
+CREATE TABLE t1 (a INET4 AUTO_INCREMENT);
+
+CREATE TABLE t1 (a INET4);
+SHOW CREATE TABLE t1;
+DESCRIBE t1;
+--vertical_results
+--replace_column 19 #
+SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE table_schema='test' AND table_name='t1';
+--horizontal_results
+DROP TABLE t1;
+
+CREATE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES ('0.0.0.1');
+--enable_metadata
+SELECT * FROM t1;
+SELECT CAST('0.0.0.1' AS INET4) AS a;
+--disable_metadata
+DROP TABLE t1;
+
+
+CREATE TABLE t1 (
+ c1 INET4 DEFAULT 0x00000000,
+ c2 INET4 DEFAULT 0xFFFFFFFF,
+ c3 INET4 DEFAULT '0.0.0.255',
+ c4 INET4 DEFAULT '255.0.0.255',
+ c5 INET4 DEFAULT CAST(X'FFFF00FF' AS INET4)
+);
+SHOW CREATE TABLE t1;
+DESCRIBE t1;
+--vertical_results
+--replace_column 19 #
+SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE table_schema='test' AND table_name='t1';
+--horizontal_results
+DROP TABLE t1;
+
+--error ER_INVALID_DEFAULT
+CREATE TABLE t1 (c1 INET4 DEFAULT 0x00);
+--error ER_INVALID_DEFAULT
+CREATE TABLE t1 (c1 INET4 DEFAULT '');
+
+
+CREATE TABLE t1 (a INET4);
+--error ER_TRUNCATED_WRONG_VALUE
+INSERT INTO t1 VALUES ('x');
+--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
+INSERT INTO t1 VALUES (1);
+--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
+INSERT INTO t1 VALUES (TIME'10:20:30');
+--error ER_TRUNCATED_WRONG_VALUE
+INSERT INTO t1 VALUES (0x00);
+DROP TABLE t1;
+
+--echo #
+--echo # CAST
+--echo #
+
+SELECT CAST('garbage' AS INET4);
+SELECT CAST(0x01 AS INET4);
+SELECT CAST(REPEAT(0x00,16) AS INET4);
+SELECT CAST(REPEAT(0x11,16) AS INET4);
+
+CREATE TABLE t1 AS SELECT CAST('0.0.0.0' AS INET4);
+SHOW CREATE TABLE t1;
+DROP TABLE t1;
+
+
+--echo #
+--echo # Text and binary formats, comparison operators
+--echo #
+
+CREATE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES (0x00000000);
+INSERT INTO t1 VALUES (0x00000001);
+INSERT INTO t1 VALUES (0xFF000001);
+INSERT INTO t1 VALUES (0xFF000002);
+SELECT * FROM t1 ORDER BY a;
+SELECT * FROM t1 ORDER BY a DESC;
+SELECT HEX(a),a FROM t1 ORDER BY a;
+SELECT * FROM t1 WHERE a='0.0.0.0';
+SELECT * FROM t1 WHERE a='0.0.0.1';
+SELECT * FROM t1 WHERE a='255.0.0.1';
+SELECT * FROM t1 WHERE a='255.0.0.2';
+SELECT * FROM t1 WHERE a='255.000.000.002';
+SELECT * FROM t1 WHERE a=0x00000000;
+SELECT * FROM t1 WHERE a=0x00000001;
+SELECT * FROM t1 WHERE a=0xff000001;
+SELECT * FROM t1 WHERE a=0xff000002;
+SELECT * FROM t1 WHERE a<'0.0.0.0';
+SELECT * FROM t1 WHERE a<='0.0.0.0';
+SELECT * FROM t1 WHERE a>='255.0.0.2';
+SELECT * FROM t1 WHERE a>'255.0.0.2';
+SELECT * FROM t1 WHERE a IN ('0.0.0.0', '255.0.0.1') ORDER BY a;
+SELECT * FROM t1 WHERE a IN ('0.0.0.0', 0xff000002) ORDER BY a;
+
+SELECT * FROM t1 WHERE a<'garbage';
+SELECT * FROM t1 WHERE a<='garbage';
+SELECT * FROM t1 WHERE a='garbage';
+SELECT * FROM t1 WHERE a>='garbage';
+SELECT * FROM t1 WHERE a>'garbage';
+
+SELECT * FROM t1 WHERE a<0x01;
+SELECT * FROM t1 WHERE a<=0x01;
+SELECT * FROM t1 WHERE a=0x01;
+SELECT * FROM t1 WHERE a>=0x01;
+SELECT * FROM t1 WHERE a>0x01;
+
+SELECT * FROM t1 WHERE a='0.0.0.00';
+SELECT * FROM t1 WHERE a='0.0.0.000';
+SELECT * FROM t1 WHERE a='0.0.00.000';
+
+SELECT * FROM t1 WHERE a='0.0.0.01';
+SELECT * FROM t1 WHERE a='0.0.0.001';
+SELECT * FROM t1 WHERE a='0.0.00.001';
+
+SELECT * FROM t1 WHERE a='0.0.0.0000';
+
+--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
+SELECT * FROM t1 WHERE a=0;
+--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
+SELECT * FROM t1 WHERE a=0.0;
+--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
+SELECT * FROM t1 WHERE a=0e0;
+--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
+SELECT * FROM t1 WHERE a=TIME'10:20:30';
+--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
+SELECT * FROM t1 WHERE a IN ('0.0.0.0', 10);
+
+DROP TABLE t1;
+
+--echo #
+--echo # cmp_item_fbt: IN for non-constants
+--echo #
+
+CREATE TABLE t1 (a INET4, b INET4);
+INSERT INTO t1 VALUES ('0.0.0.1', '0.0.0.2');
+SELECT * FROM t1 WHERE '0.0.0.0' IN (a, b);
+SELECT * FROM t1 WHERE '0.0.0.1' IN (a, b);
+SELECT * FROM t1 WHERE '0.0.0.1' IN (a, b);
+SELECT * FROM t1 WHERE '0.0.0.01' IN (a, b);
+SELECT * FROM t1 WHERE '0.0.0.001' IN (a, b);
+SELECT * FROM t1 WHERE '0.0.0.0001' IN (a, b);
+DROP TABLE t1;
+
+
+--echo #
+--echo # CASE abbreviations
+--echo #
+
+CREATE TABLE t1 (
+ c INET4,
+ c_char CHAR(32),
+ c_varchar VARCHAR(32),
+ c_tinytext TINYTEXT,
+ c_text TEXT,
+ c_mediumtext TEXT,
+ c_longtext LONGTEXT
+);
+CREATE TABLE t2 AS SELECT
+ COALESCE(c, c_char),
+ COALESCE(c, c_varchar),
+ COALESCE(c, c_tinytext),
+ COALESCE(c, c_text),
+ COALESCE(c, c_mediumtext),
+ COALESCE(c, c_longtext)
+FROM t1;
+SHOW CREATE TABLE t2;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT
+ LEAST(c, c_char),
+ LEAST(c, c_varchar),
+ LEAST(c, c_tinytext),
+ LEAST(c, c_text),
+ LEAST(c, c_mediumtext),
+ LEAST(c, c_longtext)
+FROM t1;
+SHOW CREATE TABLE t2;
+DROP TABLE t2;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES (NULL),('0.0.0.1'),('0.0.0.2');
+SELECT COALESCE(a, '0.0.0.0') FROM t1 ORDER BY a;
+SELECT a, LEAST(a,'0.0.0.0'), LEAST(a,'0.0.0.255') FROM t1 ORDER BY a;
+SELECT a, GREATEST(a,'0.0.0.0'), GREATEST(a,'0.0.0.255') FROM t1 ORDER BY a;
+
+CREATE TABLE t2 AS SELECT
+ COALESCE(a, '0.0.0.0'),
+ LEAST(a,'0.0.0.0'),
+ GREATEST(a,'0.0.0.0')
+FROM t1;
+SHOW CREATE TABLE t2;
+DROP TABLE t2;
+
+SELECT COALESCE(a, 0x00000000) FROM t1 ORDER BY a;
+
+SELECT a,
+ LEAST(a, 0x00000000),
+ LEAST(a, 0x0000000f)
+FROM t1 ORDER BY a;
+SELECT a,
+ GREATEST(a, 0x00000000),
+ GREATEST(a, 0x0000000f)
+FROM t1 ORDER BY a;
+
+CREATE TABLE t2 AS SELECT
+ COALESCE(a, 0x00000000),
+ LEAST(a,0x00000000),
+ GREATEST(a,0x00000000)
+FROM t1;
+SHOW CREATE TABLE t2;
+DROP TABLE t2;
+
+--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
+SELECT COALESCE(a, 10) FROM t1;
+--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
+SELECT LEAST(a, 10) FROM t1;
+--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
+SELECT GREATEST(a, 10) FROM t1;
+DROP TABLE t1;
+
+SELECT COALESCE('garbage', CAST('0.0.0.1' AS INET4));
+SELECT COALESCE(0x01, CAST('0.0.0.1' AS INET4));
+
+
+--echo #
+--echo # Uniqueness
+--echo #
+
+CREATE TABLE t1 (a INET4 NOT NULL PRIMARY KEY);
+INSERT INTO t1 VALUES ('65.0.0.1'),('97.0.0.1');
+--error ER_DUP_ENTRY
+INSERT INTO t1 VALUES ('97.0.0.1');
+SELECT * FROM t1;
+DROP TABLE t1;
+
+
+--echo #
+--echo # Indexes
+--echo #
+
+--error ER_WRONG_SUB_KEY
+CREATE TABLE t1 (a INET4, KEY(a(1)));
+
+
+--echo #
+--echo # Explicit CAST on INSERT
+--echo #
+
+CREATE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES (CAST('1.0.0.1' AS INET4));
+INSERT INTO t1 VALUES (CAST('1.0.0.2' AS INET4));
+INSERT INTO t1 VALUES (CAST('1.0.0.3' AS INET4));
+INSERT INTO t1 VALUES (CAST(CONCAT('2','0.0.0.1') AS INET4));
+INSERT INTO t1 VALUES (CAST(CONCAT('2','0.0.0.2') AS INET4));
+INSERT INTO t1 VALUES (CAST(CONCAT('2','0.0.0.3') AS INET4));
+SELECT * FROM t1 ORDER BY a;
+DROP TABLE t1;
+
+
+--echo #
+--echo # Explicit CAST and implicit CAST on ALTER
+--echo #
+
+CREATE TABLE t1 (a VARCHAR(64));
+INSERT INTO t1 VALUES ('garbage'),('0.0.0.0'),('0.0.0.1'),('255.0.0.1'),('255.0.0.2');
+SELECT a, CAST(a AS INET4) FROM t1 ORDER BY a;
+SELECT a, CAST(a AS INET4) FROM t1 ORDER BY CAST(a AS INET4);
+--error ER_TRUNCATED_WRONG_VALUE
+ALTER TABLE t1 MODIFY a INET4;
+SET sql_mode='';
+ALTER TABLE t1 MODIFY a INET4;
+SET sql_mode=DEFAULT;
+SELECT * FROM t1 ORDER BY a;
+DROP TABLE t1;
+
+
+CREATE TABLE t1 (a BINARY(4));
+INSERT INTO t1 VALUES (0x00000000);
+INSERT INTO t1 VALUES (0x00000001);
+INSERT INTO t1 VALUES (0xff000001);
+INSERT INTO t1 VALUES (0xff000002);
+SELECT HEX(a), CAST(a AS INET4) FROM t1 ORDER BY a;
+ALTER TABLE t1 MODIFY a INET4;
+SELECT * FROM t1 ORDER BY a;
+DROP TABLE t1;
+
+
+--echo #
+--echo # INSERT..SELECT, same data types
+--echo #
+
+CREATE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES ('0.0.0.0'),('0.0.0.1'),('0.0.0.2');
+CREATE TABLE t2 (a INET4);
+INSERT INTO t2 SELECT a FROM t1;
+SELECT * FROM t2;
+DROP TABLE t1,t2;
+
+
+--echo #
+--echo # Implicit CAST on INSERT..SELECT, text format
+--echo #
+
+CREATE TABLE t1 (a VARCHAR(64));
+INSERT INTO t1 VALUES ('garbage'),('0.0.0.0'),('0.0.0.1'),('255.0.0.1'),('255.0.0.2');
+
+CREATE TABLE t2 (a INET4);
+--error ER_TRUNCATED_WRONG_VALUE
+INSERT INTO t2 SELECT a FROM t1;
+SET sql_mode='';
+INSERT INTO t2 SELECT a FROM t1;
+SELECT * FROM t2 ORDER BY a;
+SET sql_mode=DEFAULT;
+DROP TABLE t2;
+
+CREATE TABLE t2 (a INET4 NOT NULL);
+--error ER_TRUNCATED_WRONG_VALUE
+INSERT INTO t2 SELECT a FROM t1;
+SET sql_mode='';
+INSERT INTO t2 SELECT a FROM t1;
+SELECT * FROM t2 ORDER BY a;
+SET sql_mode=DEFAULT;
+DROP TABLE t2;
+
+DROP TABLE t1;
+
+
+--echo #
+--echo # Implicit CAST on INSERT..SELECT, binary format
+--echo #
+
+CREATE TABLE t1 (a BINARY(4));
+INSERT INTO t1 VALUES (0x00000000);
+INSERT INTO t1 VALUES (0x00000001);
+INSERT INTO t1 VALUES (0xff000001);
+INSERT INTO t1 VALUES (0xff000002);
+CREATE TABLE t2 (a INET4);
+INSERT INTO t2 SELECT a FROM t1;
+SELECT a FROM t2 ORDER BY a;
+DROP TABLE t1,t2;
+
+
+--echo #
+--echo # CAST to other data types
+--echo #
+
+--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
+SELECT CAST(CAST('0.0.0.0' AS INET4) AS DOUBLE);
+
+--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
+SELECT CAST(CAST('0.0.0.0' AS INET4) AS FLOAT);
+
+--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
+SELECT CAST(CAST('0.0.0.0' AS INET4) AS DECIMAL);
+
+--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
+SELECT CAST(CAST('0.0.0.0' AS INET4) AS SIGNED);
+
+--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
+SELECT CAST(CAST('0.0.0.0' AS INET4) AS UNSIGNED);
+
+--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
+SELECT CAST(CAST('0.0.0.0' AS INET4) AS TIME);
+
+--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
+SELECT CAST(CAST('0.0.0.0' AS INET4) AS DATE);
+
+--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
+SELECT CAST(CAST('0.0.0.0' AS INET4) AS DATETIME);
+
+SELECT CAST(CAST('0.0.0.0' AS INET4) AS CHAR);
+CREATE TABLE t1 AS SELECT CAST(CAST('0.0.0.0' AS INET4) AS CHAR) AS a;
+SHOW CREATE TABLE t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES ('255.0.0.255');
+CREATE TABLE t2 AS SELECT
+ CAST(a AS CHAR),
+ CAST(a AS CHAR(15)),
+ CAST(a AS CHAR(530)),
+ CAST(a AS CHAR(65535)),
+ CAST(a AS CHAR(66000)),
+ CAST(a AS CHAR(16777215)),
+ CAST(a AS CHAR(16777216))
+FROM t1;
+SHOW CREATE TABLE t2;
+--vertical_results
+SELECT * FROM t2;
+--horizontal_results
+DROP TABLE t2;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES ('255.0.0.255');
+CREATE TABLE t2 AS SELECT
+ CAST(a AS BINARY(4)) AS cb4,
+ CAST(a AS BINARY) AS cb,
+ CAST(a AS BINARY(16)) AS cb16,
+ CAST(a AS BINARY(32)) AS cb32,
+ CAST(a AS BINARY(530)) AS cb530,
+ CAST(a AS BINARY(65535)) AS cb65535,
+ CAST(a AS BINARY(66000)) AS cb66000,
+ CAST(a AS BINARY(16777215)) AS cb16777215,
+ CAST(a AS BINARY(16777216)) AS cb16777216
+FROM t1 LIMIT 0;
+SHOW CREATE TABLE t2;
+DROP TABLE t2;
+
+CREATE TABLE t2 AS SELECT
+ CAST(a AS BINARY(4)) AS cb4,
+ CAST(a AS BINARY) AS cb,
+ CAST(a AS BINARY(16)) AS cb16,
+ CAST(a AS BINARY(32)) AS cb32,
+ CAST(a AS BINARY(530)) AS cb530,
+ CAST(a AS BINARY(65535)) AS cb65535
+FROM t1;
+SHOW CREATE TABLE t2;
+--vertical_results
+SELECT
+ HEX(cb4),
+ HEX(cb),
+ HEX(cb16),
+ HEX(cb32),
+ LENGTH(cb530),
+ LENGTH(cb65535)
+FROM t2;
+--horizontal_results
+DROP TABLE t2;
+DROP TABLE t1;
+
+--echo #
+--echo # Implicit conversion to other types in INSERT
+--echo #
+
+CREATE TABLE t1 (a INT);
+--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
+INSERT INTO t1 VALUES (CAST('0.0.0.0' AS INET4));
+DROP TABLE t1;
+
+CREATE TABLE t1 (a DOUBLE);
+--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
+INSERT INTO t1 VALUES (CAST('0.0.0.0' AS INET4));
+DROP TABLE t1;
+
+CREATE TABLE t1 (a DECIMAL(32,0));
+--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
+INSERT INTO t1 VALUES (CAST('0.0.0.0' AS INET4));
+DROP TABLE t1;
+
+CREATE TABLE t1 (a VARCHAR(64));
+INSERT INTO t1 VALUES (CAST('0.0.0.0' AS INET4));
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a TEXT);
+INSERT INTO t1 VALUES (CAST('0.0.0.0' AS INET4));
+SELECT * FROM t1;
+DROP TABLE t1;
+
+
+
+--echo #
+--echo # Boolean context
+--echo #
+
+SELECT
+ CAST('0.0.0.0' AS INET4) IS TRUE,
+ CAST('0.0.0.0' AS INET4) IS FALSE,
+ CAST('0.0.0.1' AS INET4) IS TRUE,
+ CAST('0.0.0.1' AS INET4) IS FALSE;
+
+CREATE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES ('0.0.0.0'),('0.0.0.1');
+SELECT a, a IS TRUE, a IS FALSE FROM t1 ORDER BY a;
+DROP TABLE t1;
+
+##
+## TODO: Error looks like a bug. This should return rows where a<>'0.0.0.0'.
+## The same problem is repeatable with GEOMETRY.
+##
+#CREATE TABLE t1 (a INET4);
+#INSERT INTO t1 VALUES ('0.0.0.0'),('0.0.0.1'),('0.0.0.2');
+#--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
+#SELECT * FROM t1 WHERE a;
+#DROP TABLE t1;
+
+
+--echo #
+--echo # GROUP BY
+--echo #
+
+CREATE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES ('0.0.0.0'),('0.0.0.0');
+INSERT INTO t1 VALUES ('0.0.0.1'),('0.0.0.01'),('0.0.0.001');
+INSERT INTO t1 VALUES ('0.0.0.2'),('0.0.0.2'),('0.0.0.2'),('0.0.0.2');
+SELECT a, COUNT(*) FROM t1 GROUP BY a;
+DROP TABLE t1;
+
+--echo #
+--echo # Aggregate functions
+--echo #
+
+CREATE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES ('0.0.0.0'),('0.0.0.0');
+INSERT INTO t1 VALUES ('0.0.0.1'),('0.0.0.01'),('0.0.0.001');
+INSERT INTO t1 VALUES ('0.0.0.2'),('0.0.0.2'),('0.0.0.2'),('0.0.0.2');
+SELECT MIN(a),MAX(a) FROM t1;
+
+CREATE TABLE t2 AS SELECT MIN(a), MAX(a) FROM t1;
+SHOW CREATE TABLE t2;
+DROP TABLE t2;
+
+--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
+SELECT AVG(a) FROM t1;
+--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
+SELECT AVG(DISTINCT a) FROM t1;
+--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
+SELECT SUM(a) FROM t1;
+--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
+SELECT SUM(DISTINCT a) FROM t1;
+--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
+SELECT STDDEV(a) FROM t1;
+SELECT GROUP_CONCAT(a ORDER BY a) FROM t1;
+SELECT a, GROUP_CONCAT(a ORDER BY a) FROM t1 GROUP BY a;
+DROP TABLE t1;
+
+--echo #
+--echo # MDEV-21765 Possibly inconsistent behavior of BIT_xx functions with INET4 field
+--echo #
+
+CREATE TABLE t1 (a INET4);
+--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
+SELECT BIT_AND(a) FROM t1;
+--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
+SELECT BIT_OR(a) FROM t1;
+--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
+SELECT BIT_XOR(a) FROM t1;
+DROP TABLE t1;
+
+
+--echo #
+--echo # Window functions
+--echo #
+
+CREATE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES ('0.0.0.1'),('0.0.0.2'),('0.0.0.3'),('0.0.0.004');
+SELECT
+ a,
+ LAG(a) OVER (ORDER BY a),
+ LEAD(a) OVER (ORDER BY a)
+FROM t1 ORDER BY a;
+
+SELECT
+ a,
+ FIRST_VALUE(a) OVER (ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING),
+ LAST_VALUE(a) OVER (ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING)
+FROM t1 ORDER BY a;
+DROP TABLE t1;
+
+
+--echo #
+--echo # Prepared statements
+--echo #
+
+EXECUTE IMMEDIATE 'CREATE TABLE t1 AS SELECT ? AS a' USING CAST('0.0.0.0' AS INET4);
+SHOW CREATE TABLE t1;
+EXECUTE IMMEDIATE 'INSERT INTO t1 VALUES (?)' USING '0.0.0.1';
+EXECUTE IMMEDIATE 'INSERT INTO t1 VALUES (?)' USING CAST('0.0.0.2' AS INET4);
+EXECUTE IMMEDIATE 'INSERT INTO t1 VALUES (?)' USING 0x00000003;
+EXECUTE IMMEDIATE 'INSERT INTO t1 VALUES (?)' USING CAST(0x00000004 AS INET4);
+SELECT a FROM t1 ORDER BY a;
+EXECUTE IMMEDIATE 'SELECT * FROM t1 WHERE a=?' USING '0.0.0.1';
+EXECUTE IMMEDIATE 'SELECT * FROM t1 WHERE a=?' USING CAST('0.0.0.2' AS INET4);
+EXECUTE IMMEDIATE 'SELECT * FROM t1 WHERE a=?' USING 0x00000003;
+EXECUTE IMMEDIATE 'SELECT * FROM t1 WHERE a=?' USING CAST(0x00000004 AS INET4);
+DROP TABLE t1;
+
+
+--echo #
+--echo # Character set and collation aggregation
+--echo #
+
+CREATE TABLE t1 (a INET4);
+
+CREATE TABLE t2 AS SELECT
+ CONCAT(a) AS c1,
+ CONCAT(CAST('0.0.0.0' AS INET4)) AS c2
+FROM t1;
+SHOW CREATE TABLE t2;
+DROP TABLE t2;
+
+CREATE TABLE t2 AS SELECT
+ CONCAT(_utf8'1', a) AS c1,
+ CONCAT(_utf8'1', CAST('0.0.0.1' AS INET4)) AS c2,
+ CONCAT(_utf8'1', COALESCE(a)) AS c3
+FROM t1;
+SHOW CREATE TABLE t2;
+DROP TABLE t2;
+
+CREATE TABLE t2 AS SELECT
+ CONCAT(_latin1'1', a) AS c1,
+ CONCAT(_latin1'1', CAST('0.0.0.1' AS INET4)) AS c2,
+ CONCAT(_latin1'1', COALESCE(a)) AS c3
+FROM t1;
+SHOW CREATE TABLE t2;
+DROP TABLE t2;
+
+DROP TABLE t1;
+
+
+--echo #
+--echo # UNION
+--echo #
+
+CREATE TABLE t1 AS SELECT CAST('0.0.0.0' AS INET4) AS c UNION SELECT CAST('0.0.0.1' AS INET4);
+SHOW CREATE TABLE t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 AS SELECT CAST('0.0.0.0' AS INET4) AS c UNION SELECT '0.0.0.1';
+SHOW CREATE TABLE t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 AS SELECT '0.0.0.0' AS c UNION SELECT CAST('0.0.0.1' AS INET4);
+SHOW CREATE TABLE t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 AS SELECT CAST('0.0.0.0' AS INET4) AS c UNION SELECT 0x00000001;
+SELECT * FROM t1;
+DROP TABLE t1;
+
+--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
+CREATE TABLE t1 AS SELECT CAST('0.0.0.0' AS INET4) AS c UNION SELECT 1;
+
+
+--echo #
+--echo # Unary operators
+--echo #
+
+--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
+SELECT -CAST('0.0.0.0' AS INET4);
+
+--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
+SELECT ABS(CAST('0.0.0.0' AS INET4));
+
+--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
+SELECT ROUND(CAST('0.0.0.0' AS INET4));
+
+--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
+SELECT CEILING(CAST('0.0.0.0' AS INET4));
+
+--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
+SELECT FLOOR(CAST('0.0.0.0' AS INET4));
+
+
+--echo #
+--echo # Arithmetic operators
+--echo #
+
+--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
+SELECT CAST('0.0.0.0' AS INET4) + 1;
+--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
+SELECT CAST('0.0.0.0' AS INET4) - 1;
+
+--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
+SELECT CAST('0.0.0.0' AS INET4) * 1;
+--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
+SELECT CAST('0.0.0.0' AS INET4) / 1;
+
+--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
+SELECT CAST('0.0.0.0' AS INET4) MOD 1;
+
+
+--echo #
+--echo # Misc
+--echo #
+
+--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
+SELECT RAND(CAST('0.0.0.0' AS INET4));
+
+--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
+SELECT FROM_UNIXTIME(CAST('0.0.0.0' AS INET4));
+
+--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
+SELECT HOUR(CAST('0.0.0.0' AS INET4));
+
+--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
+SELECT YEAR(CAST('0.0.0.0' AS INET4));
+
+--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
+SELECT RELEASE_LOCK(CAST('0.0.0.0' AS INET4));
+
+# QQ
+#SELECT JSON_LENGTH(CAST('0.0.0.0' AS INET4));
+
+--echo #
+--echo # Virtual columns
+--echo #
+
+--error ER_GENERATED_COLUMN_FUNCTION_IS_NOT_ALLOWED
+CREATE TABLE t1 (
+ a INT,
+ b INET4 GENERATED ALWAYS AS (CAST(CONCAT(RAND(),a) AS INET4)), INDEX(b)
+);
+
+CREATE TABLE t1 (
+ a INT,
+ b INET4 GENERATED ALWAYS AS (CAST(CONCAT('0.0.0.',a) AS INET4)), INDEX(b)
+);
+INSERT INTO t1 (a) VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12),(13),(14),(15);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+--echo #
+--echo # VIEW
+--echo #
+
+CREATE TABLE t1 (a INT DEFAULT 0);
+INSERT INTO t1 (a) VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12),(13),(14),(15);
+SELECT * FROM t1 ORDER BY a;
+CREATE VIEW v1 AS SELECT (CAST(CONCAT('0.0.0.',a) AS INET4)) AS c FROM t1;
+SELECT * FROM v1 ORDER BY c;
+DROP VIEW v1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a INET4 DEFAULT '0.0.0.0');
+CREATE VIEW v1 AS SELECT * FROM t1;
+SHOW CREATE VIEW v1;
+DESCRIBE v1;
+INSERT INTO v1 VALUES ('0.0.0.0'),('0.0.0.1'),('0.0.0.2');
+SELECT * FROM t1;
+DROP VIEW v1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a INET4 DEFAULT CAST('0.0.0.0' AS INET4));
+CREATE VIEW v1 AS SELECT * FROM t1;
+SHOW CREATE VIEW v1;
+DESCRIBE v1;
+INSERT INTO v1 VALUES ('0.0.0.0'),('0.0.0.1'),('0.0.0.2');
+SELECT * FROM t1;
+DROP VIEW v1;
+DROP TABLE t1;
+
+
+--echo #
+--echo # Subqueries
+--echo #
+
+CREATE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES ('0.0.0.0'),('0.0.0.1'),('0.0.0.2');
+SELECT * FROM t1 WHERE a=(SELECT MIN(a) FROM t1) ORDER BY a;
+SELECT * FROM t1 WHERE a=(SELECT MAX(a) FROM t1) ORDER BY a;
+SELECT * FROM t1 WHERE a IN (SELECT a FROM t1 WHERE a>'0.0.0.0') ORDER BY a;
+DROP TABLE t1;
+
+--echo #
+--echo # Stored routines
+--echo #
+
+DELIMITER $$;
+CREATE PROCEDURE p1(a INET4)
+BEGIN
+ DECLARE b INET4 DEFAULT CONCAT('1', a);
+ SELECT a, b;
+END;
+$$
+DELIMITER ;$$
+CALL p1('0.0.0.1');
+CALL p1(CAST('0.0.0.2' AS INET4));
+DROP PROCEDURE p1;
+
+DELIMITER $$;
+CREATE FUNCTION f1(a INET4) RETURNS INET4
+BEGIN
+ RETURN CONCAT('1',a);
+END;
+$$
+DELIMITER ;$$
+SELECT f1('0.0.0.1');
+SELECT f1(CAST('0.0.0.1' AS INET4));
+DROP FUNCTION f1;
+
+--echo #
+--echo # Anchored data types in SP variables
+--echo #
+
+CREATE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES ('0.0.0.1');
+DELIMITER $$;
+CREATE PROCEDURE p1()
+BEGIN
+ DECLARE va TYPE OF t1.a;
+ SELECT MAX(a) INTO va FROM t1;
+ SELECT va;
+END;
+$$
+DELIMITER ;$$
+CALL p1;
+DROP PROCEDURE p1;
+DROP TABLE t1;
+
+
+CREATE TABLE t1 (a INET4, b INET4);
+INSERT INTO t1 VALUES ('0.0.0.12', '0.0.0.111');
+DELIMITER $$;
+CREATE PROCEDURE p1()
+BEGIN
+ DECLARE va ROW TYPE OF t1;
+ SELECT MAX(a), MAX(b) INTO va FROM t1;
+ SELECT va.a, va.b;
+END;
+$$
+DELIMITER ;$$
+CALL p1;
+DROP PROCEDURE p1;
+DROP TABLE t1;
+
+
+--echo #
+--echo # Optimizer: make_const_item_for_comparison
+--echo #
+
+CREATE TABLE t1 (id INT, a INET4);
+INSERT INTO t1 VALUES (1,'0.0.0.1'),(2,'0.0.0.2');
+EXPLAIN EXTENDED SELECT * FROM t1 WHERE a=COALESCE(CAST('0.0.0.1' AS INET4)) AND id>0;
+DROP TABLE t1;
+
+--echo #
+--echo # Optimizer: equal field propagation
+--echo #
+
+CREATE TABLE t1 (id INT, a INET4);
+INSERT INTO t1 VALUES (1,'0.0.0.1'),(2,'0.0.0.2');
+EXPLAIN EXTENDED SELECT * FROM t1
+WHERE a=COALESCE(CAST('0.0.0.1' AS INET4))
+ AND LENGTH(CONCAT(a,RAND()))>1;
+EXPLAIN EXTENDED SELECT * FROM t1
+WHERE a=COALESCE(CAST('0.0.0.1' AS INET4))
+ AND LENGTH(a)>1;
+DROP TABLE t1;
+
+
+--echo #
+--echo # Optimizer: equal expression propagation
+--echo #
+
+
+CREATE TABLE t1 (id INT, a INET4);
+INSERT INTO t1 VALUES (1,'0.0.0.1'),(2,'0.0.0.2');
+EXPLAIN EXTENDED SELECT * FROM t1
+WHERE COALESCE(a)='0.0.0.1' AND COALESCE(a)=CONCAT(a);
+DROP TABLE t1;
+
+--echo #
+--echo # Subquery materialization
+--echo #
+
+CREATE TABLE t1 (a INET4, b VARCHAR(32), KEY (a), KEY(b)) ;
+INSERT INTO t1 VALUES ('0.0.0.10','0.0.0.11'),('0.0.0.10','0.0.0.11');
+SET @@optimizer_switch='semijoin=off,materialization=on,in_to_exists=off,subquery_cache=off';
+EXPLAIN SELECT * FROM t1 WHERE a IN (SELECT a AS a_inner FROM t1 GROUP BY a_inner);
+EXPLAIN SELECT * FROM t1 WHERE b IN (SELECT a AS a_inner FROM t1 GROUP BY a_inner);
+SET @@optimizer_switch=DEFAULT;
+DROP TABLE t1;
+
+--echo #
+--echo # ALTER from INET4 to INET4
+--echo #
+
+CREATE TABLE t1 (a INET4, b INT);
+INSERT INTO t1 VALUES ('10.11.12.13', 1);
+ALTER TABLE t1 MODIFY b DECIMAL(10,2);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+--echo #
+--echo # ALTER to character string data types
+--echo #
+
+CREATE OR REPLACE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES ('10.11.12.13');
+SELECT CAST(a AS CHAR(15)) FROM t1;
+ALTER TABLE t1 MODIFY a CHAR(15);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE OR REPLACE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES ('10.11.12.13');
+ALTER TABLE t1 MODIFY a VARCHAR(15);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE OR REPLACE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES ('10.11.12.13');
+ALTER TABLE t1 MODIFY a TINYTEXT;
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE OR REPLACE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES ('10.11.12.13');
+ALTER TABLE t1 MODIFY a TEXT;
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE OR REPLACE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES ('10.11.12.13');
+ALTER TABLE t1 MODIFY a MEDIUMTEXT;
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE OR REPLACE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES ('10.11.12.13');
+ALTER TABLE t1 MODIFY a LONGTEXT;
+SELECT * FROM t1;
+DROP TABLE t1;
+
+
+--echo #
+--echo # ALTER from character string data types
+--echo #
+
+CREATE OR REPLACE TABLE t1 (a CHAR(64));
+INSERT INTO t1 VALUES ('10.11.12.13');
+SELECT CAST(a AS INET4) FROM t1;
+ALTER TABLE t1 MODIFY a INET4;
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE OR REPLACE TABLE t1 (a VARCHAR(64));
+INSERT INTO t1 VALUES ('10.11.12.13');
+SELECT CAST(a AS INET4) FROM t1;
+ALTER TABLE t1 MODIFY a INET4;
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE OR REPLACE TABLE t1 (a TINYTEXT);
+INSERT INTO t1 VALUES ('10.11.12.13');
+SELECT CAST(a AS INET4) FROM t1;
+ALTER TABLE t1 MODIFY a INET4;
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE OR REPLACE TABLE t1 (a TEXT);
+INSERT INTO t1 VALUES ('10.11.12.13');
+SELECT CAST(a AS INET4) FROM t1;
+ALTER TABLE t1 MODIFY a INET4;
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE OR REPLACE TABLE t1 (a MEDIUMTEXT);
+INSERT INTO t1 VALUES ('10.11.12.13');
+SELECT CAST(a AS INET4) FROM t1;
+ALTER TABLE t1 MODIFY a INET4;
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE OR REPLACE TABLE t1 (a LONGTEXT);
+INSERT INTO t1 VALUES ('10.11.12.13');
+SELECT CAST(a AS INET4) FROM t1;
+ALTER TABLE t1 MODIFY a INET4;
+SELECT * FROM t1;
+DROP TABLE t1;
+
+
+--echo #
+--echo # ALTER to binary string data types
+--echo #
+
+CREATE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES ('10.11.12.13');
+ALTER TABLE t1 MODIFY a BINARY(4);
+SELECT HEX(a) FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES ('10.11.12.13');
+ALTER TABLE t1 MODIFY a BINARY(5);
+SELECT HEX(a) FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES ('10.11.12.13');
+--error ER_DATA_TOO_LONG
+ALTER TABLE t1 MODIFY a BINARY(3);
+DROP TABLE t1;
+
+CREATE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES ('10.11.12.13');
+ALTER TABLE t1 MODIFY a TINYBLOB;
+SELECT HEX(a) FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES ('10.11.12.13');
+ALTER TABLE t1 MODIFY a BLOB;
+SELECT HEX(a) FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES ('10.11.12.13');
+ALTER TABLE t1 MODIFY a MEDIUMBLOB;
+SELECT HEX(a) FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES ('10.11.12.13');
+ALTER TABLE t1 MODIFY a LONGBLOB;
+SELECT HEX(a) FROM t1;
+DROP TABLE t1;
+
+
+--echo #
+--echo # ALTER from binary string data types
+--echo #
+
+CREATE TABLE t1 (a BINARY(4));
+INSERT INTO t1 VALUES (X'11121314');
+ALTER TABLE t1 MODIFY a INET4;
+SELECT a FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a BINARY(17));
+INSERT INTO t1 VALUES (X'1112131400');
+--error ER_TRUNCATED_WRONG_VALUE
+ALTER TABLE t1 MODIFY a INET4;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a BINARY(3));
+INSERT INTO t1 VALUES (X'111213');
+--error ER_TRUNCATED_WRONG_VALUE
+ALTER TABLE t1 MODIFY a INET4;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a TINYBLOB);
+INSERT INTO t1 VALUES (X'11121314');
+ALTER TABLE t1 MODIFY a INET4;
+SELECT a FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a BLOB);
+INSERT INTO t1 VALUES (X'11121314');
+ALTER TABLE t1 MODIFY a INET4;
+SELECT a FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a MEDIUMBLOB);
+INSERT INTO t1 VALUES (X'11121314');
+ALTER TABLE t1 MODIFY a INET4;
+SELECT a FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a BLOB);
+INSERT INTO t1 VALUES (X'11121314');
+ALTER TABLE t1 MODIFY a INET4;
+SELECT a FROM t1;
+DROP TABLE t1;
+
+
+--echo #
+--echo # SET from INET4 to INET4
+--echo #
+
+CREATE TABLE t1 (a INET4, b INET4);
+INSERT INTO t1 VALUES ('255.0.0.255', NULL);
+UPDATE t1 SET b=a;
+SELECT b FROM t1;
+DROP TABLE t1;
+
+--echo #
+--echo # SET from INET4 to character string
+--echo #
+
+CREATE TABLE t1 (a INET4, b CHAR(15));
+INSERT INTO t1 VALUES ('255.0.0.255', NULL);
+UPDATE t1 SET b=a;
+SELECT b FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a INET4, b VARCHAR(15));
+INSERT INTO t1 VALUES ('255.0.0.255', NULL);
+UPDATE t1 SET b=a;
+SELECT b FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a INET4, b TEXT);
+INSERT INTO t1 VALUES ('255.0.0.255', NULL);
+UPDATE t1 SET b=a;
+SELECT b FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a INET4, b ENUM('255.0.0.255'));
+INSERT INTO t1 VALUES ('255.0.0.255', NULL);
+UPDATE t1 SET b=a;
+SELECT b FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a INET4, b SET('255.0.0.255'));
+INSERT INTO t1 VALUES ('255.0.0.255', NULL);
+UPDATE t1 SET b=a;
+SELECT b FROM t1;
+DROP TABLE t1;
+
+
+--echo #
+--echo # SET from character string to INET4
+--echo #
+
+CREATE TABLE t1 (a CHAR(15), b INET4);
+INSERT INTO t1 VALUES ('255.0.0.255', NULL);
+UPDATE t1 SET b=a;
+SELECT b FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a VARCHAR(15), b INET4);
+INSERT INTO t1 VALUES ('255.0.0.255', NULL);
+UPDATE t1 SET b=a;
+SELECT b FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a TEXT, b INET4);
+INSERT INTO t1 VALUES ('255.0.0.255', NULL);
+UPDATE t1 SET b=a;
+SELECT b FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a ENUM('255.0.0.255'), b INET4);
+INSERT INTO t1 VALUES ('255.0.0.255', NULL);
+UPDATE t1 SET b=a;
+SELECT b FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a SET('255.0.0.255'), b INET4);
+INSERT INTO t1 VALUES ('255.0.0.255', NULL);
+UPDATE t1 SET b=a;
+SELECT b FROM t1;
+DROP TABLE t1;
+
+
+--echo #
+--echo # SET from INET4 to binary
+--echo #
+
+CREATE TABLE t1 (a INET4, b BINARY(4));
+INSERT INTO t1 VALUES ('255.0.0.255', NULL);
+UPDATE t1 SET b=a;
+SELECT HEX(b) FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a INET4, b VARBINARY(4));
+INSERT INTO t1 VALUES ('255.0.0.255', NULL);
+UPDATE t1 SET b=a;
+SELECT HEX(b) FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a INET4, b BLOB);
+INSERT INTO t1 VALUES ('255.0.0.255', NULL);
+UPDATE t1 SET b=a;
+SELECT HEX(b) FROM t1;
+DROP TABLE t1;
+
+
+--echo #
+--echo # SET from binary to INET4
+--echo #
+
+CREATE TABLE t1 (a BINARY(4), b INET4);
+INSERT INTO t1 VALUES (CONCAT(0xFF,REPEAT(0x00,2),0xFF), NULL);
+UPDATE t1 SET b=a;
+SELECT b FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a VARBINARY(4), b INET4);
+INSERT INTO t1 VALUES (CONCAT(0xFF,REPEAT(0x00,2),0xFF), NULL);
+UPDATE t1 SET b=a;
+SELECT b FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a BLOB, b INET4);
+INSERT INTO t1 VALUES (CONCAT(0xFF,REPEAT(0x00,2),0xFF), NULL);
+UPDATE t1 SET b=a;
+SELECT b FROM t1;
+DROP TABLE t1;
+
+
+# QQ
+#--echo #
+#--echo # Limit clause parameter
+#--echo # TODO: this should fail.
+#--echo # The test for a valid data type should be moved
+#--echo # from parse time to fix_fields() time, and performed
+#--echo # for both Item_splocal and Item_param.
+#--echo #
+#
+#EXECUTE IMMEDIATE 'SELECT 1 FROM DUAL LIMIT ?' USING CAST('0.0.0.0' AS INET4);
+
+# QQ
+### TODO:
+### - Add hooks to run mysql_client_test with pluggable data types
+###
+### - This should fail with the "illegal data type" error:
+###SELECT CAST('0.0.0.0' AS INET4) DIV 1;
+###
+### - This should fail with the "illegal data type" error:
+### EXTRACT(MINUTE...)
+###
+
+
+--echo #
+--echo # MDEV-20785 Converting INET6 to CHAR(39) produces garbage without a warning
+--echo #
+
+CREATE OR REPLACE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES ('10.11.12.13');
+SELECT CAST(a AS CHAR(15)) FROM t1;
+ALTER TABLE t1 MODIFY a CHAR(15);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+--echo #
+--echo # MDEV-20783 INET6 cannot be converted to BINARY(16) (requires clarification in documentation)
+--echo #
+
+CREATE OR REPLACE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES ('10.11.12.13');
+ALTER TABLE t1 MODIFY a BINARY(4);
+SELECT HEX(a) FROM t1;
+DROP TABLE t1;
+
+--echo #
+--echo # MDEV-20795 CAST(inet6 AS BINARY) returns wrong result
+--echo #
+
+CREATE OR REPLACE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES ('10.11.12.13');
+SELECT HEX(CAST(a AS BINARY)) FROM t1;
+SELECT HEX(CAST(a AS BINARY(4))) FROM t1;
+DROP TABLE t1;
+
+--echo #
+--echo # MDEV-20808 CAST from INET6 to FLOAT does not produce an error
+--echo #
+
+CREATE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES ('0.0.0.0');
+--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
+SELECT CAST(a AS FLOAT) FROM t1;
+DROP TABLE t1;
+
+--echo #
+--echo # MDEV-20798 Conversion from INET6 to other types performed without errors or warnings
+--echo #
+
+CREATE TABLE t1 (a INET4, b INT);
+INSERT INTO t1 (a) VALUES ('0.0.0.0');
+--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
+UPDATE t1 SET b=a;
+SELECT * FROM t1;
+DROP TABLE t1;
+
+SET timestamp=UNIX_TIMESTAMP('2001-01-01 10:20:30');
+CREATE TABLE t1 (a INET4, b TIMESTAMP);
+INSERT INTO t1 (a) VALUES ('0.0.0.0');
+--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
+UPDATE t1 SET b=a;
+SELECT * FROM t1;
+DROP TABLE t1;
+SET timestamp=DEFAULT;
+
+CREATE OR REPLACE TABLE t1 (a INET4);
+INSERT INTO t1 (a) VALUES ('0.0.0.0');
+--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
+ALTER TABLE t1 MODIFY a DATE;
+DROP TABLE t1;
+
+--echo #
+--echo # MDEV-20818 ER_CRASHED_ON_USAGE or Assertion `length <= column->length' failed in write_block_record on temporary table
+--echo #
+
+CREATE TABLE t1 (a INET4);
+--enable_metadata
+SELECT
+ CAST(a AS BINARY(0)),
+ CAST(a AS BINARY(1)),
+ CAST(a AS BINARY(16)),
+ CAST(a AS BINARY(255)),
+ CAST(a AS BINARY(256)),
+ CAST(a AS BINARY(512)),
+ CAST(a AS BINARY(513)),
+ CAST(a AS BINARY(65532)),
+ CAST(a AS BINARY(65533)),
+ CAST(a AS BINARY(65534)),
+ CAST(a AS BINARY(65535)),
+ CAST(a AS BINARY(65536)),
+ CAST(a AS BINARY(16777215)),
+ CAST(a AS BINARY(16777216))
+FROM t1;
+--disable_metadata
+DROP TABLE t1;
+
+--echo #
+--echo # MDEV-20826 Wrong result of MIN(inet6) with GROUP BY
+--echo #
+
+CREATE TABLE t1 (id INT, a INET4) ENGINE=MyISAM;
+INSERT INTO t1 VALUES (1, '255.0.0.0'),(1, '128.0.0.0');
+SELECT MIN(a), MAX(a) FROM t1 GROUP BY id;
+DROP TABLE t1;
+
+
+--echo #
+--echo # MDEV-20809 EXTRACT from INET4 value does not produce any warnings
+--echo #
+
+CREATE TABLE t1 (a INET4);
+--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
+SELECT EXTRACT(DAY FROM a) FROM t1;
+DROP TABLE t1;
+--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION
+SELECT EXTRACT(DAY FROM CAST('0.0.0.0' AS INET4));
+
+
+--echo #
+--echo # MDEV-22764 Crash with a stored aggregate function returning INET4
+--echo #
+
+DELIMITER $$;
+CREATE OR REPLACE AGGREGATE FUNCTION aggregate_min_inet4(x INET4) RETURNS INET4
+BEGIN
+ DECLARE res INET4 DEFAULT NULL;
+ DECLARE CONTINUE HANDLER FOR NOT FOUND
+ RETURN res;
+ LOOP
+ FETCH GROUP NEXT ROW;
+ IF (res IS NULL) OR (res > x) THEN
+ SET res= x;
+ END IF;
+ END LOOP;
+END;
+$$
+DELIMITER ;$$
+
+CREATE OR REPLACE TABLE t1 (name CHAR(30), val INET4);
+INSERT INTO t1 VALUES ('a', '0.0.0.5');
+INSERT INTO t1 VALUES ('a', '0.0.0.3');
+INSERT INTO t1 VALUES ('b', '0.0.0.1');
+INSERT INTO t1 VALUES ('b', '0.0.0.2');
+INSERT INTO t1 VALUES ('b', '0.0.0.5');
+SELECT name, aggregate_min_inet4(val) pc FROM t1 GROUP BY name;
+
+CREATE OR REPLACE TABLE t2 (name CHAR(30), val INET4);
+INSERT INTO t2 SELECT name, aggregate_min_inet4(val) pc FROM t1 GROUP BY name;
+SELECT * FROM t2;
+DROP TABLE t2;
+
+DROP TABLE t1;
+DROP FUNCTION aggregate_min_inet4;
+
+
+--echo #
+--echo # MDEV-20280 PERCENTILE_DISC() rejects temporal and string input
+--echo #
+
+CREATE TABLE t1 (name CHAR(30), star_rating INET4);
+INSERT INTO t1 VALUES ('Lord of the Ladybirds', '0.0.0.5');
+INSERT INTO t1 VALUES ('Lord of the Ladybirds', '0.0.0.3');
+INSERT INTO t1 VALUES ('Lady of the Flies', '0.0.0.1');
+INSERT INTO t1 VALUES ('Lady of the Flies', '0.0.0.2');
+INSERT INTO t1 VALUES ('Lady of the Flies', '0.0.0.5');
+SELECT name, PERCENTILE_DISC(0.5)
+ WITHIN GROUP (ORDER BY star_rating)
+ OVER (PARTITION BY name) AS pc FROM t1;
+SELECT name, PERCENTILE_DISC(0)
+ WITHIN GROUP (ORDER BY star_rating)
+ OVER (PARTITION BY name) AS pc FROM t1;
+SELECT name, PERCENTILE_DISC(1)
+ WITHIN GROUP (ORDER BY star_rating)
+ OVER (PARTITION BY name) AS pc FROM t1;
+DROP TABLE t1;
+
+
+--echo #
+--echo # MDEV-22758 Assertion `!item->null_value' failed in Type_handler_inet6::make_sort_key_part
+--echo #
+
+CREATE TABLE t1 (a VARCHAR(8) NOT NULL, b INET4 NOT NULL);
+INSERT INTO t1 VALUES ('foo','0.0.0.0'),('bar','1.0.0.1');
+SELECT * FROM t1 ORDER BY CASE WHEN a THEN b ELSE a END;
+DROP TABLE t1;
+
+CREATE OR REPLACE TABLE t1 (a VARCHAR(8) NOT NULL);
+INSERT INTO t1 VALUES ('foo'),('bar');
+SELECT * FROM t1 ORDER BY CAST(a AS INET4);
+DROP TABLE t1;
+
+CREATE TABLE t1 (a INET4 NOT NULL, b VARCHAR(32) NOT NULL);
+CREATE TABLE t2 AS SELECT CAST(a AS INET4) AS ca, CAST(b AS INET4) AS cb FROM t1;
+SHOW CREATE TABLE t2;
+DROP TABLE t2;
+
+CREATE TABLE t2 AS SELECT COALESCE(a,a), COALESCE(a,b) FROM t1;
+SHOW CREATE TABLE t2;
+DROP TABLE t2;
+
+CREATE TABLE t2 AS SELECT a AS ca,a AS cb FROM t1 UNION SELECT a,b FROM t1;
+SHOW CREATE TABLE t2;
+DROP TABLE t2;
+
+DROP TABLE t1;
+
+--echo #
+--echo # MDEV-22758 Assertion `!item->null_value' failed in Type_handler_inet6::make_sort_key_part
+--echo #
+
+CREATE TABLE t1 (c INET4);
+INSERT INTO t1 VALUES ('0.0.0.0'),(NULL);
+SELECT * FROM t1 ORDER BY IFNULL(c, 'foo');
+DROP TABLE t1;
+
+CREATE TABLE t1 (c INET4);
+INSERT INTO t1 VALUES ('0.0.0.0'),(NULL);
+
+# Expect a NULL column
+CREATE TABLE t2 AS SELECT IFNULL(c, 'foo') FROM t1;
+SHOW CREATE TABLE t2;
+SELECT * FROM t2;
+DROP TABLE t2;
+
+# Expect a NOT NULL column
+CREATE TABLE t2 AS SELECT IFNULL(c, '0.0.0.1') FROM t1;
+SHOW CREATE TABLE t2;
+SELECT * FROM t2;
+DROP TABLE t2;
+
+DROP TABLE t1;
+
+--echo #
+--echo # MDEV-26732 Assertion `0' failed in Item::val_native
+--echo #
+#
+# This tests Item_copy_fbt::val_native()
+SELECT CAST(CONCAT('0.0.0.0', REPEAT('',RAND())) AS INET4) AS f, var_pop('x') FROM dual HAVING f > '';
+SELECT CAST(CONCAT('0.0.0.0', REPEAT('',RAND())) AS INET4) AS f, var_pop(1) FROM dual HAVING f >= '0.0.0.0';
+
+# This tests Item_copy_fbt::save_in_field()
+CREATE TABLE t1(id INET4 NOT NULL PRIMARY KEY, dsc INET4);
+INSERT INTO t1 VALUES ('0.0.0.1', '1.0.0.1'),('0.0.0.3', '1.0.0.3'),('1.0.0.4', NULL);
+CREATE TABLE t2 SELECT COALESCE(t1.dsc), COUNT(*) FROM t1 GROUP BY t1.id;
+SELECT * FROM t2 ORDER BY 1,2;
+DROP TABLE t1, t2;
+
+--echo #
+--echo # MDEV-24619 Wrong result or Assertion `0' in Item::val_native / Type_handler_inet6::Item_val_native_with_conversion
+--echo #
+
+CREATE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES ('0.0.0.0'),('0.0.0.0');
+SELECT IF(1, '0.0.0.0', a) AS f FROM t1 GROUP BY 'foo' HAVING f != '';
+SELECT IF(1, '0.0.0.0', a) AS f FROM t1 GROUP BY 'foo' HAVING f != '0.0.0.0';
+SELECT IF(1, '0.0.0.0', a) AS f FROM t1 GROUP BY 'foo' HAVING f != '0.0.0.1';
+DROP TABLE t1;
+
+--echo #
+--echo # End of 10.10 tests
+--echo #
diff --git a/plugin/type_inet/mysql-test/type_inet/type_inet4_csv.result b/plugin/type_inet/mysql-test/type_inet/type_inet4_csv.result
new file mode 100644
index 00000000000..bfade2b6207
--- /dev/null
+++ b/plugin/type_inet/mysql-test/type_inet/type_inet4_csv.result
@@ -0,0 +1,54 @@
+#
+# Start of 10.10 tests
+#
+#
+# MDEV-23287 The INET4 data type
+#
+SET default_storage_engine=CSV;
+CREATE TABLE t1 (a INET4 NOT NULL);
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` inet4 NOT NULL
+) ENGINE=CSV DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+FOR i IN 0..255
+DO
+INSERT INTO t1 VALUES (CONCAT('0.0.0.', i));
+END FOR
+$$
+SELECT * FROM t1 WHERE a='0.0.0.255';
+a
+0.0.0.255
+SELECT * FROM t1 WHERE a>='0.0.0.254' ORDER BY a;
+a
+0.0.0.254
+0.0.0.255
+SELECT * FROM t1 WHERE a IN ('0.0.0.128','0.0.0.160','0.0.0.240') ORDER BY a;
+a
+0.0.0.128
+0.0.0.160
+0.0.0.240
+SELECT * FROM t1 WHERE a BETWEEN '0.0.0.128' AND '0.0.0.129' ORDER BY a;
+a
+0.0.0.128
+0.0.0.129
+SELECT * FROM t1 WHERE a=CAST('0.0.0.255' AS INET4);
+a
+0.0.0.255
+UPDATE t1 SET a=CONCAT('12', a) WHERE a LIKE '0.0.0.14_';
+SELECT * FROM t1 WHERE a LIKE '12%' ORDER BY a;
+a
+120.0.0.140
+120.0.0.141
+120.0.0.142
+120.0.0.143
+120.0.0.144
+120.0.0.145
+120.0.0.146
+120.0.0.147
+120.0.0.148
+120.0.0.149
+DROP TABLE t1;
+#
+# End of 10.10 tests
+#
diff --git a/plugin/type_inet/mysql-test/type_inet/type_inet4_csv.test b/plugin/type_inet/mysql-test/type_inet/type_inet4_csv.test
new file mode 100644
index 00000000000..2bccf1c1928
--- /dev/null
+++ b/plugin/type_inet/mysql-test/type_inet/type_inet4_csv.test
@@ -0,0 +1,41 @@
+--source include/have_csv.inc
+
+--echo #
+--echo # Start of 10.10 tests
+--echo #
+
+--echo #
+--echo # MDEV-23287 The INET4 data type
+--echo #
+
+SET default_storage_engine=CSV;
+
+CREATE TABLE t1 (a INET4 NOT NULL);
+SHOW CREATE TABLE t1;
+
+DELIMITER $$;
+FOR i IN 0..255
+DO
+ INSERT INTO t1 VALUES (CONCAT('0.0.0.', i));
+END FOR
+$$
+DELIMITER ;$$
+
+SELECT * FROM t1 WHERE a='0.0.0.255';
+
+SELECT * FROM t1 WHERE a>='0.0.0.254' ORDER BY a;
+
+SELECT * FROM t1 WHERE a IN ('0.0.0.128','0.0.0.160','0.0.0.240') ORDER BY a;
+
+SELECT * FROM t1 WHERE a BETWEEN '0.0.0.128' AND '0.0.0.129' ORDER BY a;
+
+SELECT * FROM t1 WHERE a=CAST('0.0.0.255' AS INET4);
+
+UPDATE t1 SET a=CONCAT('12', a) WHERE a LIKE '0.0.0.14_';
+SELECT * FROM t1 WHERE a LIKE '12%' ORDER BY a;
+
+DROP TABLE t1;
+
+--echo #
+--echo # End of 10.10 tests
+--echo #
diff --git a/plugin/type_inet/mysql-test/type_inet/type_inet4_engines.inc b/plugin/type_inet/mysql-test/type_inet/type_inet4_engines.inc
new file mode 100644
index 00000000000..62a5c80a920
--- /dev/null
+++ b/plugin/type_inet/mysql-test/type_inet/type_inet4_engines.inc
@@ -0,0 +1,38 @@
+--echo #
+--echo # Range optimizer
+--echo #
+
+CREATE TABLE t1 (a INET4, INDEX(a));
+SHOW CREATE TABLE t1;
+
+DELIMITER $$;
+FOR i IN 0..255
+DO
+ INSERT INTO t1 VALUES (CONCAT('0.0.0.', i));
+END FOR
+$$
+DELIMITER ;$$
+SELECT * FROM t1 WHERE a='0.0.0.255';
+EXPLAIN SELECT * FROM t1 WHERE a='0.0.0.255';
+SELECT * FROM t1 WHERE a='garbage';
+EXPLAIN SELECT * FROM t1 WHERE a='garbage';
+
+SELECT * FROM t1 WHERE a>='0.0.0.254';
+EXPLAIN SELECT * FROM t1 WHERE a>='0.0.0.254';
+SELECT * FROM t1 WHERE a>='garbage';
+EXPLAIN SELECT * FROM t1 WHERE a>='garbage';
+
+SELECT * FROM t1 WHERE a IN ('0.0.0.128','0.0.0.160','0.0.0.240');
+EXPLAIN SELECT * FROM t1 WHERE a IN ('0.0.0.128','0.0.0.160','0.0.0.240');
+SELECT * FROM t1 WHERE a IN ('0.0.0.128','0.0.0.160','garbage');
+EXPLAIN SELECT * FROM t1 WHERE a IN ('0.0.0.128','0.0.0.160','garbage');
+
+SELECT * FROM t1 WHERE a BETWEEN '0.0.0.128' AND '0.0.0.129';
+EXPLAIN SELECT * FROM t1 WHERE a BETWEEN '0.0.0.128' AND '0.0.0.129';
+SELECT * FROM t1 WHERE a BETWEEN '0.0.0.128' AND 'garbage';
+EXPLAIN SELECT * FROM t1 WHERE a BETWEEN '0.0.0.128' AND 'garbage';
+
+SELECT * FROM t1 WHERE a=CAST('0.0.0.255' AS INET4);
+EXPLAIN EXTENDED SELECT * FROM t1 WHERE a=CAST('0.0.0.255' AS INET4);
+
+DROP TABLE t1;
diff --git a/plugin/type_inet/mysql-test/type_inet/type_inet4_innodb.result b/plugin/type_inet/mysql-test/type_inet/type_inet4_innodb.result
new file mode 100644
index 00000000000..536ceda6d18
--- /dev/null
+++ b/plugin/type_inet/mysql-test/type_inet/type_inet4_innodb.result
@@ -0,0 +1,119 @@
+#
+# Start of 10.10 tests
+#
+#
+# MDEV-23287 The INET4 data type
+#
+SET default_storage_engine=InnoDB;
+#
+# Range optimizer
+#
+CREATE TABLE t1 (a INET4, INDEX(a));
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` inet4 DEFAULT NULL,
+ KEY `a` (`a`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+FOR i IN 0..255
+DO
+INSERT INTO t1 VALUES (CONCAT('0.0.0.', i));
+END FOR
+$$
+SELECT * FROM t1 WHERE a='0.0.0.255';
+a
+0.0.0.255
+EXPLAIN SELECT * FROM t1 WHERE a='0.0.0.255';
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 ref a a 5 const 1 Using where; Using index
+SELECT * FROM t1 WHERE a='garbage';
+a
+Warnings:
+Warning 1292 Incorrect inet4 value: 'garbage'
+EXPLAIN SELECT * FROM t1 WHERE a='garbage';
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables
+Warnings:
+Warning 1292 Incorrect inet4 value: 'garbage'
+SELECT * FROM t1 WHERE a>='0.0.0.254';
+a
+0.0.0.254
+0.0.0.255
+EXPLAIN SELECT * FROM t1 WHERE a>='0.0.0.254';
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 range a a 5 NULL 2 Using where; Using index
+SELECT * FROM t1 WHERE a>='garbage';
+a
+EXPLAIN SELECT * FROM t1 WHERE a>='garbage';
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables
+SELECT * FROM t1 WHERE a IN ('0.0.0.128','0.0.0.160','0.0.0.240');
+a
+0.0.0.128
+0.0.0.160
+0.0.0.240
+EXPLAIN SELECT * FROM t1 WHERE a IN ('0.0.0.128','0.0.0.160','0.0.0.240');
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 range a a 5 NULL 3 Using where; Using index
+SELECT * FROM t1 WHERE a IN ('0.0.0.128','0.0.0.160','garbage');
+a
+0.0.0.128
+0.0.0.160
+Warnings:
+Warning 1292 Incorrect inet4 value: 'garbage'
+EXPLAIN SELECT * FROM t1 WHERE a IN ('0.0.0.128','0.0.0.160','garbage');
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 range a a 5 NULL 2 Using where; Using index
+Warnings:
+Warning 1292 Incorrect inet4 value: 'garbage'
+SELECT * FROM t1 WHERE a BETWEEN '0.0.0.128' AND '0.0.0.129';
+a
+0.0.0.128
+0.0.0.129
+EXPLAIN SELECT * FROM t1 WHERE a BETWEEN '0.0.0.128' AND '0.0.0.129';
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 range a a 5 NULL 2 Using where; Using index
+SELECT * FROM t1 WHERE a BETWEEN '0.0.0.128' AND 'garbage';
+a
+EXPLAIN SELECT * FROM t1 WHERE a BETWEEN '0.0.0.128' AND 'garbage';
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables
+SELECT * FROM t1 WHERE a=CAST('0.0.0.255' AS INET4);
+a
+0.0.0.255
+EXPLAIN EXTENDED SELECT * FROM t1 WHERE a=CAST('0.0.0.255' AS INET4);
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE t1 ref a a 5 const 1 100.00 Using where; Using index
+Warnings:
+Note 1003 select `test`.`t1`.`a` AS `a` from `test`.`t1` where `test`.`t1`.`a` = INET4'0.0.0.255'
+DROP TABLE t1;
+#
+# MDEV-26742 Assertion `field->type_handler() == this' failed in FixedBinTypeBundle<NATIVE_LEN, MAX_CHAR_LEN>::Type_handler_fbt::stored_field_cmp_to_item
+#
+CREATE TABLE t1 (pk inet4, c text) engine=myisam;
+INSERT INTO t1 VALUES ('0.0.0.0',1);
+CREATE TABLE t2 (d text, KEY (d)) engine=innodb ;
+Warnings:
+Note 1071 Specified key was too long; max key length is 3072 bytes
+INSERT INTO t2 VALUES (2);
+SELECT * FROM t2 JOIN t1 ON ( t1.pk > t2.d);
+d pk c
+Warnings:
+Warning 1292 Incorrect inet4 value: '2'
+UPDATE t2 JOIN t1 ON ( t1.pk > t2.d) SET t1.c = 1;
+ERROR 22007: Incorrect inet4 value: '2'
+SET sql_mode='';
+UPDATE t2 JOIN t1 ON ( t1.pk > t2.d) SET t1.c = 1;
+Warnings:
+Warning 1292 Incorrect inet4 value: '2'
+SET sql_mode=DEFAULT;
+SELECT * FROM t1;
+pk c
+0.0.0.0 1
+SELECT * FROM t2;
+d
+2
+DROP TABLE t1, t2;
+#
+# End of 10.10 tests
+#
diff --git a/plugin/type_inet/mysql-test/type_inet/type_inet4_innodb.test b/plugin/type_inet/mysql-test/type_inet/type_inet4_innodb.test
new file mode 100644
index 00000000000..6e5a1640c83
--- /dev/null
+++ b/plugin/type_inet/mysql-test/type_inet/type_inet4_innodb.test
@@ -0,0 +1,36 @@
+--source include/have_innodb.inc
+
+--echo #
+--echo # Start of 10.10 tests
+--echo #
+
+--echo #
+--echo # MDEV-23287 The INET4 data type
+--echo #
+
+
+SET default_storage_engine=InnoDB;
+--source type_inet4_engines.inc
+
+--echo #
+--echo # MDEV-26742 Assertion `field->type_handler() == this' failed in FixedBinTypeBundle<NATIVE_LEN, MAX_CHAR_LEN>::Type_handler_fbt::stored_field_cmp_to_item
+--echo #
+
+CREATE TABLE t1 (pk inet4, c text) engine=myisam;
+INSERT INTO t1 VALUES ('0.0.0.0',1);
+CREATE TABLE t2 (d text, KEY (d)) engine=innodb ;
+INSERT INTO t2 VALUES (2);
+SELECT * FROM t2 JOIN t1 ON ( t1.pk > t2.d);
+--error ER_TRUNCATED_WRONG_VALUE
+UPDATE t2 JOIN t1 ON ( t1.pk > t2.d) SET t1.c = 1;
+SET sql_mode='';
+UPDATE t2 JOIN t1 ON ( t1.pk > t2.d) SET t1.c = 1;
+SET sql_mode=DEFAULT;
+SELECT * FROM t1;
+SELECT * FROM t2;
+DROP TABLE t1, t2;
+
+
+--echo #
+--echo # End of 10.10 tests
+--echo #
diff --git a/plugin/type_inet/mysql-test/type_inet/type_inet4_memory.result b/plugin/type_inet/mysql-test/type_inet/type_inet4_memory.result
new file mode 100644
index 00000000000..d48ab70cce8
--- /dev/null
+++ b/plugin/type_inet/mysql-test/type_inet/type_inet4_memory.result
@@ -0,0 +1,159 @@
+#
+# Start of 10.10 tests
+#
+#
+# MDEV-23287 The INET4 data type
+#
+SET default_storage_engine=MEMORY;
+#
+# Range optimizer
+#
+CREATE TABLE t1 (a INET4, INDEX(a));
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` inet4 DEFAULT NULL,
+ KEY `a` (`a`)
+) ENGINE=MEMORY DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+FOR i IN 0..255
+DO
+INSERT INTO t1 VALUES (CONCAT('0.0.0.', i));
+END FOR
+$$
+SELECT * FROM t1 WHERE a='0.0.0.255';
+a
+0.0.0.255
+EXPLAIN SELECT * FROM t1 WHERE a='0.0.0.255';
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 ref a a 5 const 2 Using where
+SELECT * FROM t1 WHERE a='garbage';
+a
+Warnings:
+Warning 1292 Incorrect inet4 value: 'garbage'
+EXPLAIN SELECT * FROM t1 WHERE a='garbage';
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables
+Warnings:
+Warning 1292 Incorrect inet4 value: 'garbage'
+SELECT * FROM t1 WHERE a>='0.0.0.254';
+a
+0.0.0.254
+0.0.0.255
+EXPLAIN SELECT * FROM t1 WHERE a>='0.0.0.254';
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 ALL a NULL NULL NULL 256 Using where
+SELECT * FROM t1 WHERE a>='garbage';
+a
+Warnings:
+Warning 1292 Incorrect inet4 value: 'garbage'
+EXPLAIN SELECT * FROM t1 WHERE a>='garbage';
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 ALL a NULL NULL NULL 256 Using where
+SELECT * FROM t1 WHERE a IN ('0.0.0.128','0.0.0.160','0.0.0.240');
+a
+0.0.0.128
+0.0.0.160
+0.0.0.240
+EXPLAIN SELECT * FROM t1 WHERE a IN ('0.0.0.128','0.0.0.160','0.0.0.240');
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 range a a 5 NULL 6 Using where
+SELECT * FROM t1 WHERE a IN ('0.0.0.128','0.0.0.160','garbage');
+a
+0.0.0.128
+0.0.0.160
+Warnings:
+Warning 1292 Incorrect inet4 value: 'garbage'
+EXPLAIN SELECT * FROM t1 WHERE a IN ('0.0.0.128','0.0.0.160','garbage');
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 range a a 5 NULL 4 Using where
+Warnings:
+Warning 1292 Incorrect inet4 value: 'garbage'
+SELECT * FROM t1 WHERE a BETWEEN '0.0.0.128' AND '0.0.0.129';
+a
+0.0.0.128
+0.0.0.129
+EXPLAIN SELECT * FROM t1 WHERE a BETWEEN '0.0.0.128' AND '0.0.0.129';
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 ALL a NULL NULL NULL 256 Using where
+SELECT * FROM t1 WHERE a BETWEEN '0.0.0.128' AND 'garbage';
+a
+Warnings:
+Warning 1292 Incorrect inet4 value: 'garbage'
+Warning 1292 Incorrect inet4 value: 'garbage'
+Warning 1292 Incorrect inet4 value: 'garbage'
+Warning 1292 Incorrect inet4 value: 'garbage'
+Warning 1292 Incorrect inet4 value: 'garbage'
+Warning 1292 Incorrect inet4 value: 'garbage'
+Warning 1292 Incorrect inet4 value: 'garbage'
+Warning 1292 Incorrect inet4 value: 'garbage'
+Warning 1292 Incorrect inet4 value: 'garbage'
+Warning 1292 Incorrect inet4 value: 'garbage'
+Warning 1292 Incorrect inet4 value: 'garbage'
+Warning 1292 Incorrect inet4 value: 'garbage'
+Warning 1292 Incorrect inet4 value: 'garbage'
+Warning 1292 Incorrect inet4 value: 'garbage'
+Warning 1292 Incorrect inet4 value: 'garbage'
+Warning 1292 Incorrect inet4 value: 'garbage'
+Warning 1292 Incorrect inet4 value: 'garbage'
+Warning 1292 Incorrect inet4 value: 'garbage'
+Warning 1292 Incorrect inet4 value: 'garbage'
+Warning 1292 Incorrect inet4 value: 'garbage'
+Warning 1292 Incorrect inet4 value: 'garbage'
+Warning 1292 Incorrect inet4 value: 'garbage'
+Warning 1292 Incorrect inet4 value: 'garbage'
+Warning 1292 Incorrect inet4 value: 'garbage'
+Warning 1292 Incorrect inet4 value: 'garbage'
+Warning 1292 Incorrect inet4 value: 'garbage'
+Warning 1292 Incorrect inet4 value: 'garbage'
+Warning 1292 Incorrect inet4 value: 'garbage'
+Warning 1292 Incorrect inet4 value: 'garbage'
+Warning 1292 Incorrect inet4 value: 'garbage'
+Warning 1292 Incorrect inet4 value: 'garbage'
+Warning 1292 Incorrect inet4 value: 'garbage'
+Warning 1292 Incorrect inet4 value: 'garbage'
+Warning 1292 Incorrect inet4 value: 'garbage'
+Warning 1292 Incorrect inet4 value: 'garbage'
+Warning 1292 Incorrect inet4 value: 'garbage'
+Warning 1292 Incorrect inet4 value: 'garbage'
+Warning 1292 Incorrect inet4 value: 'garbage'
+Warning 1292 Incorrect inet4 value: 'garbage'
+Warning 1292 Incorrect inet4 value: 'garbage'
+Warning 1292 Incorrect inet4 value: 'garbage'
+Warning 1292 Incorrect inet4 value: 'garbage'
+Warning 1292 Incorrect inet4 value: 'garbage'
+Warning 1292 Incorrect inet4 value: 'garbage'
+Warning 1292 Incorrect inet4 value: 'garbage'
+Warning 1292 Incorrect inet4 value: 'garbage'
+Warning 1292 Incorrect inet4 value: 'garbage'
+Warning 1292 Incorrect inet4 value: 'garbage'
+Warning 1292 Incorrect inet4 value: 'garbage'
+Warning 1292 Incorrect inet4 value: 'garbage'
+Warning 1292 Incorrect inet4 value: 'garbage'
+Warning 1292 Incorrect inet4 value: 'garbage'
+Warning 1292 Incorrect inet4 value: 'garbage'
+Warning 1292 Incorrect inet4 value: 'garbage'
+Warning 1292 Incorrect inet4 value: 'garbage'
+Warning 1292 Incorrect inet4 value: 'garbage'
+Warning 1292 Incorrect inet4 value: 'garbage'
+Warning 1292 Incorrect inet4 value: 'garbage'
+Warning 1292 Incorrect inet4 value: 'garbage'
+Warning 1292 Incorrect inet4 value: 'garbage'
+Warning 1292 Incorrect inet4 value: 'garbage'
+Warning 1292 Incorrect inet4 value: 'garbage'
+Warning 1292 Incorrect inet4 value: 'garbage'
+Warning 1292 Incorrect inet4 value: 'garbage'
+EXPLAIN SELECT * FROM t1 WHERE a BETWEEN '0.0.0.128' AND 'garbage';
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 ALL a NULL NULL NULL 256 Using where
+SELECT * FROM t1 WHERE a=CAST('0.0.0.255' AS INET4);
+a
+0.0.0.255
+EXPLAIN EXTENDED SELECT * FROM t1 WHERE a=CAST('0.0.0.255' AS INET4);
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE t1 ref a a 5 const 2 100.00 Using where
+Warnings:
+Note 1003 select `test`.`t1`.`a` AS `a` from `test`.`t1` where `test`.`t1`.`a` = INET4'0.0.0.255'
+DROP TABLE t1;
+#
+# End of 10.10 tests
+#
diff --git a/plugin/type_inet/mysql-test/type_inet/type_inet4_memory.test b/plugin/type_inet/mysql-test/type_inet/type_inet4_memory.test
new file mode 100644
index 00000000000..8b11f5d9f63
--- /dev/null
+++ b/plugin/type_inet/mysql-test/type_inet/type_inet4_memory.test
@@ -0,0 +1,16 @@
+--echo #
+--echo # Start of 10.10 tests
+--echo #
+
+--echo #
+--echo # MDEV-23287 The INET4 data type
+--echo #
+
+
+SET default_storage_engine=MEMORY;
+--source type_inet4_engines.inc
+
+
+--echo #
+--echo # End of 10.10 tests
+--echo #
diff --git a/plugin/type_inet/mysql-test/type_inet/type_inet4_mix_date.result b/plugin/type_inet/mysql-test/type_inet/type_inet4_mix_date.result
new file mode 100644
index 00000000000..13726b2d142
--- /dev/null
+++ b/plugin/type_inet/mysql-test/type_inet/type_inet4_mix_date.result
@@ -0,0 +1,353 @@
+#
+# Start of 10.10 tests
+#
+#
+# MDEV-23287 The INET4 data type
+#
+CREATE TABLE t1 (target INET4 DEFAULT '99.99.99.99', source DATE DEFAULT '2001-01-01');
+# Start of type_store_assignment_incompatible.inc
+SET @sql_mode_save= @@sql_mode;
+SET @source_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
+WHERE COLUMN_NAME='source'
+ AND TABLE_NAME='t1'
+ AND TABLE_SCHEMA='test');
+SET @target_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
+WHERE COLUMN_NAME='target'
+ AND TABLE_NAME='t1'
+ AND TABLE_SCHEMA='test');
+SET @ignore= CASE WHEN @ignore IS NULL OR @ignore = '' THEN ''
+ WHEN @ignore NOT LIKE ' %' THEN CONCAT(' ',@ignore)
+ELSE @ignore
+END;
+CREATE TABLE t2 LIKE t1;
+ALTER TABLE t2 ADD id INT NOT NULL PRIMARY KEY FIRST;
+INSERT INTO t2 VALUES (1,DEFAULT,DEFAULT);
+SHOW CREATE TABLE t2;
+Table Create Table
+t2 CREATE TABLE `t2` (
+ `id` int(11) NOT NULL,
+ `target` inet4 DEFAULT '99.99.99.99',
+ `source` date DEFAULT '2001-01-01',
+ PRIMARY KEY (`id`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+CREATE TABLE t3 LIKE t2;
+INSERT INTO t3 VALUES
+(1,
+(SELECT source FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1));
+ERROR HY000: Cannot cast 'date' as 'inet4' in assignment of `test`.`t3`.`target`
+DROP TABLE t3;
+SET sql_mode='';
+CREATE TABLE t3 LIKE t2;
+ALTER TABLE t3 ENGINE=MyISAM;
+EXECUTE IMMEDIATE
+CONCAT('CREATE VIEW v3 AS SELECT id,',
+IF(@target_type='geometry','AsText(target)','target'), ' AS target,',
+IF(@source_type='geometry','AsText(source)','source'), ' AS source ',
+' FROM t3');
+INSERT INTO t3 VALUES
+(1,
+(SELECT target FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1)),
+(2,
+(SELECT source FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1));
+Warnings:
+Warning 1292 Incorrect inet4 value: '2001-01-01' for column `test`.`t3`.`target` at row 2
+SELECT * FROM v3;
+id target source
+1 99.99.99.99 2001-01-01
+2 0.0.0.0 2001-01-01
+TRUNCATE TABLE t3;
+SET sql_mode=STRICT_ALL_TABLES;
+INSERT INTO t3 VALUES
+(1,
+(SELECT target FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1)),
+(2,
+(SELECT source FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1));
+ERROR 22007: Incorrect inet4 value: '2001-01-01' for column `test`.`t3`.`target` at row 2
+SELECT * FROM v3;
+id target source
+1 99.99.99.99 2001-01-01
+TRUNCATE TABLE t3;
+SET sql_mode=@sql_mode_save;
+DROP TABLE t3;
+DROP VIEW v3;
+CREATE TABLE t3 LIKE t2;
+INSERT INTO t3 SELECT id,source,source FROM t2;
+ERROR HY000: Cannot cast 'date' as 'inet4' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 (id,target,source) SELECT id,source,source FROM t2;
+ERROR HY000: Cannot cast 'date' as 'inet4' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
+ERROR HY000: Cannot cast 'date' as 'inet4' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 (id,target,source) VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
+ERROR HY000: Cannot cast 'date' as 'inet4' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
+ERROR HY000: Cannot cast 'date' as 'inet4' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 (id,target,source) SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
+ERROR HY000: Cannot cast 'date' as 'inet4' in assignment of `test`.`t3`.`target`
+UPDATE t3 SET target=source;
+ERROR HY000: Cannot cast 'date' as 'inet4' in assignment of `test`.`t3`.`target`
+UPDATE t2, t3 SET t3.target=t2.source WHERE t2.id=t3.id;
+ERROR HY000: Cannot cast 'date' as 'inet4' in assignment of `test`.`t3`.`target`
+SET @alter=CONCAT('ALTER', @ignore, ' TABLE t3 MODIFY target ', @source_type);
+SELECT @alter;
+@alter
+ALTER TABLE t3 MODIFY target date
+EXECUTE IMMEDIATE @alter;
+ERROR HY000: Cannot cast 'inet4' as 'date' in assignment of `test`.`t3`.`target`
+DROP TABLE t3;
+DROP TABLE t2;
+CREATE PROCEDURE p1()
+BEGIN
+DECLARE src date DEFAULT NULL;
+DECLARE dst inet4 DEFAULT NULL;
+SET dst=src;
+END;
+$$
+CALL p1;
+ERROR HY000: Cannot cast 'date' as 'inet4' in assignment of `dst`
+DROP PROCEDURE p1;
+CREATE FUNCTION f1(a inet4) RETURNS INT RETURN NULL;;
+SELECT f1((SELECT source FROM t1 ORDER BY source LIMIT 1));
+ERROR HY000: Cannot cast 'date' as 'inet4' in assignment of `a`
+DROP FUNCTION f1;
+CREATE PROCEDURE p1(a inet4) BEGIN END;;
+CALL p1((SELECT source FROM t1 ORDER BY source LIMIT 1));
+ERROR HY000: Cannot cast 'date' as 'inet4' in assignment of `a`
+DROP PROCEDURE p1;
+CREATE PROCEDURE p1(OUT dst inet4)
+BEGIN
+DECLARE src date DEFAULT NULL;
+SET dst=src;
+END;
+$$
+CREATE PROCEDURE p2()
+BEGIN
+DECLARE dst inet4 DEFAULT NULL;
+CALL p1(dst);
+END;
+$$
+CALL p2();
+ERROR HY000: Cannot cast 'date' as 'inet4' in assignment of `dst`
+SHOW WARNINGS;
+Level Code Message
+Error 4078 Cannot cast 'date' as 'inet4' in assignment of `dst`
+Note 4094 At line 4 in test.p1
+Note 4094 At line 4 in test.p2
+DROP PROCEDURE p2;
+DROP PROCEDURE p1;
+CREATE FUNCTION f1() RETURNS inet4
+BEGIN
+DECLARE rc date DEFAULT NULL;
+RETURN rc;
+END;
+$$
+SELECT f1();
+ERROR HY000: Cannot cast 'date' as 'inet4' in assignment of `f1()`
+DROP FUNCTION f1;
+CREATE PROCEDURE p1()
+BEGIN
+DECLARE src date DEFAULT NULL;
+DECLARE cur1 CURSOR(t inet4) FOR SELECT * FROM t1 WHERE target=t;
+OPEN cur1(src);
+CLOSE cur1;
+END;
+$$
+CALL p1();
+ERROR HY000: Cannot cast 'date' as 'inet4' in assignment of `t`
+DROP PROCEDURE p1;
+CREATE TABLE t2 LIKE t1;
+INSERT INTO t2 VALUES ();
+CREATE PROCEDURE p1()
+BEGIN
+DECLARE dst inet4 DEFAULT NULL;
+DECLARE cur2 CURSOR FOR SELECT source FROM t2 ORDER BY source LIMIT 1;
+OPEN cur2;
+FETCH cur2 INTO dst;
+CLOSE cur2;
+END;
+$$
+CALL p1();
+ERROR HY000: Cannot cast 'date' as 'inet4' in assignment of `dst`
+DROP PROCEDURE p1;
+DROP TABLE t2;
+# End of type_store_assignment_incompatible.inc
+DROP TABLE t1;
+CREATE TABLE t1 (target DATE DEFAULT '2001-01-01', source INET4 DEFAULT '99.99.99.99');
+# Start of type_store_assignment_incompatible.inc
+SET @sql_mode_save= @@sql_mode;
+SET @source_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
+WHERE COLUMN_NAME='source'
+ AND TABLE_NAME='t1'
+ AND TABLE_SCHEMA='test');
+SET @target_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
+WHERE COLUMN_NAME='target'
+ AND TABLE_NAME='t1'
+ AND TABLE_SCHEMA='test');
+SET @ignore= CASE WHEN @ignore IS NULL OR @ignore = '' THEN ''
+ WHEN @ignore NOT LIKE ' %' THEN CONCAT(' ',@ignore)
+ELSE @ignore
+END;
+CREATE TABLE t2 LIKE t1;
+ALTER TABLE t2 ADD id INT NOT NULL PRIMARY KEY FIRST;
+INSERT INTO t2 VALUES (1,DEFAULT,DEFAULT);
+SHOW CREATE TABLE t2;
+Table Create Table
+t2 CREATE TABLE `t2` (
+ `id` int(11) NOT NULL,
+ `target` date DEFAULT '2001-01-01',
+ `source` inet4 DEFAULT '99.99.99.99',
+ PRIMARY KEY (`id`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+CREATE TABLE t3 LIKE t2;
+INSERT INTO t3 VALUES
+(1,
+(SELECT source FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1));
+ERROR HY000: Cannot cast 'inet4' as 'date' in assignment of `test`.`t3`.`target`
+DROP TABLE t3;
+SET sql_mode='';
+CREATE TABLE t3 LIKE t2;
+ALTER TABLE t3 ENGINE=MyISAM;
+EXECUTE IMMEDIATE
+CONCAT('CREATE VIEW v3 AS SELECT id,',
+IF(@target_type='geometry','AsText(target)','target'), ' AS target,',
+IF(@source_type='geometry','AsText(source)','source'), ' AS source ',
+' FROM t3');
+INSERT INTO t3 VALUES
+(1,
+(SELECT target FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1)),
+(2,
+(SELECT source FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1));
+Warnings:
+Warning 1265 Data truncated for column 'target' at row 2
+SELECT * FROM v3;
+id target source
+1 2001-01-01 99.99.99.99
+2 0000-00-00 99.99.99.99
+TRUNCATE TABLE t3;
+SET sql_mode=STRICT_ALL_TABLES;
+INSERT INTO t3 VALUES
+(1,
+(SELECT target FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1)),
+(2,
+(SELECT source FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1));
+ERROR 22007: Incorrect date value: '99.99.99.99' for column `test`.`t3`.`target` at row 2
+SELECT * FROM v3;
+id target source
+1 2001-01-01 99.99.99.99
+TRUNCATE TABLE t3;
+SET sql_mode=@sql_mode_save;
+DROP TABLE t3;
+DROP VIEW v3;
+CREATE TABLE t3 LIKE t2;
+INSERT INTO t3 SELECT id,source,source FROM t2;
+ERROR HY000: Cannot cast 'inet4' as 'date' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 (id,target,source) SELECT id,source,source FROM t2;
+ERROR HY000: Cannot cast 'inet4' as 'date' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
+ERROR HY000: Cannot cast 'inet4' as 'date' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 (id,target,source) VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
+ERROR HY000: Cannot cast 'inet4' as 'date' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
+ERROR HY000: Cannot cast 'inet4' as 'date' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 (id,target,source) SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
+ERROR HY000: Cannot cast 'inet4' as 'date' in assignment of `test`.`t3`.`target`
+UPDATE t3 SET target=source;
+ERROR HY000: Cannot cast 'inet4' as 'date' in assignment of `test`.`t3`.`target`
+UPDATE t2, t3 SET t3.target=t2.source WHERE t2.id=t3.id;
+ERROR HY000: Cannot cast 'inet4' as 'date' in assignment of `test`.`t3`.`target`
+SET @alter=CONCAT('ALTER', @ignore, ' TABLE t3 MODIFY target ', @source_type);
+SELECT @alter;
+@alter
+ALTER TABLE t3 MODIFY target inet4
+EXECUTE IMMEDIATE @alter;
+ERROR HY000: Cannot cast 'date' as 'inet4' in assignment of `test`.`t3`.`target`
+DROP TABLE t3;
+DROP TABLE t2;
+CREATE PROCEDURE p1()
+BEGIN
+DECLARE src inet4 DEFAULT NULL;
+DECLARE dst date DEFAULT NULL;
+SET dst=src;
+END;
+$$
+CALL p1;
+ERROR HY000: Cannot cast 'inet4' as 'date' in assignment of `dst`
+DROP PROCEDURE p1;
+CREATE FUNCTION f1(a date) RETURNS INT RETURN NULL;;
+SELECT f1((SELECT source FROM t1 ORDER BY source LIMIT 1));
+ERROR HY000: Cannot cast 'inet4' as 'date' in assignment of `a`
+DROP FUNCTION f1;
+CREATE PROCEDURE p1(a date) BEGIN END;;
+CALL p1((SELECT source FROM t1 ORDER BY source LIMIT 1));
+ERROR HY000: Cannot cast 'inet4' as 'date' in assignment of `a`
+DROP PROCEDURE p1;
+CREATE PROCEDURE p1(OUT dst date)
+BEGIN
+DECLARE src inet4 DEFAULT NULL;
+SET dst=src;
+END;
+$$
+CREATE PROCEDURE p2()
+BEGIN
+DECLARE dst date DEFAULT NULL;
+CALL p1(dst);
+END;
+$$
+CALL p2();
+ERROR HY000: Cannot cast 'inet4' as 'date' in assignment of `dst`
+SHOW WARNINGS;
+Level Code Message
+Error 4078 Cannot cast 'inet4' as 'date' in assignment of `dst`
+Note 4094 At line 4 in test.p1
+Note 4094 At line 4 in test.p2
+DROP PROCEDURE p2;
+DROP PROCEDURE p1;
+CREATE FUNCTION f1() RETURNS date
+BEGIN
+DECLARE rc inet4 DEFAULT NULL;
+RETURN rc;
+END;
+$$
+SELECT f1();
+ERROR HY000: Cannot cast 'inet4' as 'date' in assignment of `f1()`
+DROP FUNCTION f1;
+CREATE PROCEDURE p1()
+BEGIN
+DECLARE src inet4 DEFAULT NULL;
+DECLARE cur1 CURSOR(t date) FOR SELECT * FROM t1 WHERE target=t;
+OPEN cur1(src);
+CLOSE cur1;
+END;
+$$
+CALL p1();
+ERROR HY000: Cannot cast 'inet4' as 'date' in assignment of `t`
+DROP PROCEDURE p1;
+CREATE TABLE t2 LIKE t1;
+INSERT INTO t2 VALUES ();
+CREATE PROCEDURE p1()
+BEGIN
+DECLARE dst date DEFAULT NULL;
+DECLARE cur2 CURSOR FOR SELECT source FROM t2 ORDER BY source LIMIT 1;
+OPEN cur2;
+FETCH cur2 INTO dst;
+CLOSE cur2;
+END;
+$$
+CALL p1();
+ERROR HY000: Cannot cast 'inet4' as 'date' in assignment of `dst`
+DROP PROCEDURE p1;
+DROP TABLE t2;
+# End of type_store_assignment_incompatible.inc
+DROP TABLE t1;
+#
+# End of 10.10 tests
+#
diff --git a/plugin/type_inet/mysql-test/type_inet/type_inet4_mix_date.test b/plugin/type_inet/mysql-test/type_inet/type_inet4_mix_date.test
new file mode 100644
index 00000000000..424c99f6c4d
--- /dev/null
+++ b/plugin/type_inet/mysql-test/type_inet/type_inet4_mix_date.test
@@ -0,0 +1,26 @@
+--echo #
+--echo # Start of 10.10 tests
+--echo #
+
+--echo #
+--echo # MDEV-23287 The INET4 data type
+--echo #
+
+#
+# The DATE data type has loose control on the incoming data,
+# so values like '0.0.0.0' do not fail when get inserted to a DATE field
+# even though there is an obvious redundant part - the fourth number.
+# Using '99.99.99.99' to make sure the month part is out of the range
+# to guarantee the failure.
+
+CREATE TABLE t1 (target INET4 DEFAULT '99.99.99.99', source DATE DEFAULT '2001-01-01');
+--source include/type_mix_incompatible.inc
+DROP TABLE t1;
+
+CREATE TABLE t1 (target DATE DEFAULT '2001-01-01', source INET4 DEFAULT '99.99.99.99');
+--source include/type_mix_incompatible.inc
+DROP TABLE t1;
+
+--echo #
+--echo # End of 10.10 tests
+--echo #
diff --git a/plugin/type_inet/mysql-test/type_inet/type_inet4_mix_datetime.result b/plugin/type_inet/mysql-test/type_inet/type_inet4_mix_datetime.result
new file mode 100644
index 00000000000..7c7194f6be7
--- /dev/null
+++ b/plugin/type_inet/mysql-test/type_inet/type_inet4_mix_datetime.result
@@ -0,0 +1,353 @@
+#
+# Start of 10.10 tests
+#
+#
+# MDEV-23287 The INET4 data type
+#
+CREATE TABLE t1 (target INET4 DEFAULT '99.99.99.99', source DATETIME DEFAULT '2001-01-01 10:20:30');
+# Start of type_store_assignment_incompatible.inc
+SET @sql_mode_save= @@sql_mode;
+SET @source_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
+WHERE COLUMN_NAME='source'
+ AND TABLE_NAME='t1'
+ AND TABLE_SCHEMA='test');
+SET @target_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
+WHERE COLUMN_NAME='target'
+ AND TABLE_NAME='t1'
+ AND TABLE_SCHEMA='test');
+SET @ignore= CASE WHEN @ignore IS NULL OR @ignore = '' THEN ''
+ WHEN @ignore NOT LIKE ' %' THEN CONCAT(' ',@ignore)
+ELSE @ignore
+END;
+CREATE TABLE t2 LIKE t1;
+ALTER TABLE t2 ADD id INT NOT NULL PRIMARY KEY FIRST;
+INSERT INTO t2 VALUES (1,DEFAULT,DEFAULT);
+SHOW CREATE TABLE t2;
+Table Create Table
+t2 CREATE TABLE `t2` (
+ `id` int(11) NOT NULL,
+ `target` inet4 DEFAULT '99.99.99.99',
+ `source` datetime DEFAULT '2001-01-01 10:20:30',
+ PRIMARY KEY (`id`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+CREATE TABLE t3 LIKE t2;
+INSERT INTO t3 VALUES
+(1,
+(SELECT source FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1));
+ERROR HY000: Cannot cast 'datetime' as 'inet4' in assignment of `test`.`t3`.`target`
+DROP TABLE t3;
+SET sql_mode='';
+CREATE TABLE t3 LIKE t2;
+ALTER TABLE t3 ENGINE=MyISAM;
+EXECUTE IMMEDIATE
+CONCAT('CREATE VIEW v3 AS SELECT id,',
+IF(@target_type='geometry','AsText(target)','target'), ' AS target,',
+IF(@source_type='geometry','AsText(source)','source'), ' AS source ',
+' FROM t3');
+INSERT INTO t3 VALUES
+(1,
+(SELECT target FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1)),
+(2,
+(SELECT source FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1));
+Warnings:
+Warning 1292 Incorrect inet4 value: '2001-01-01 10:20:30' for column `test`.`t3`.`target` at row 2
+SELECT * FROM v3;
+id target source
+1 99.99.99.99 2001-01-01 10:20:30
+2 0.0.0.0 2001-01-01 10:20:30
+TRUNCATE TABLE t3;
+SET sql_mode=STRICT_ALL_TABLES;
+INSERT INTO t3 VALUES
+(1,
+(SELECT target FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1)),
+(2,
+(SELECT source FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1));
+ERROR 22007: Incorrect inet4 value: '2001-01-01 10:20:30' for column `test`.`t3`.`target` at row 2
+SELECT * FROM v3;
+id target source
+1 99.99.99.99 2001-01-01 10:20:30
+TRUNCATE TABLE t3;
+SET sql_mode=@sql_mode_save;
+DROP TABLE t3;
+DROP VIEW v3;
+CREATE TABLE t3 LIKE t2;
+INSERT INTO t3 SELECT id,source,source FROM t2;
+ERROR HY000: Cannot cast 'datetime' as 'inet4' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 (id,target,source) SELECT id,source,source FROM t2;
+ERROR HY000: Cannot cast 'datetime' as 'inet4' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
+ERROR HY000: Cannot cast 'datetime' as 'inet4' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 (id,target,source) VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
+ERROR HY000: Cannot cast 'datetime' as 'inet4' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
+ERROR HY000: Cannot cast 'datetime' as 'inet4' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 (id,target,source) SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
+ERROR HY000: Cannot cast 'datetime' as 'inet4' in assignment of `test`.`t3`.`target`
+UPDATE t3 SET target=source;
+ERROR HY000: Cannot cast 'datetime' as 'inet4' in assignment of `test`.`t3`.`target`
+UPDATE t2, t3 SET t3.target=t2.source WHERE t2.id=t3.id;
+ERROR HY000: Cannot cast 'datetime' as 'inet4' in assignment of `test`.`t3`.`target`
+SET @alter=CONCAT('ALTER', @ignore, ' TABLE t3 MODIFY target ', @source_type);
+SELECT @alter;
+@alter
+ALTER TABLE t3 MODIFY target datetime
+EXECUTE IMMEDIATE @alter;
+ERROR HY000: Cannot cast 'inet4' as 'datetime' in assignment of `test`.`t3`.`target`
+DROP TABLE t3;
+DROP TABLE t2;
+CREATE PROCEDURE p1()
+BEGIN
+DECLARE src datetime DEFAULT NULL;
+DECLARE dst inet4 DEFAULT NULL;
+SET dst=src;
+END;
+$$
+CALL p1;
+ERROR HY000: Cannot cast 'datetime' as 'inet4' in assignment of `dst`
+DROP PROCEDURE p1;
+CREATE FUNCTION f1(a inet4) RETURNS INT RETURN NULL;;
+SELECT f1((SELECT source FROM t1 ORDER BY source LIMIT 1));
+ERROR HY000: Cannot cast 'datetime' as 'inet4' in assignment of `a`
+DROP FUNCTION f1;
+CREATE PROCEDURE p1(a inet4) BEGIN END;;
+CALL p1((SELECT source FROM t1 ORDER BY source LIMIT 1));
+ERROR HY000: Cannot cast 'datetime' as 'inet4' in assignment of `a`
+DROP PROCEDURE p1;
+CREATE PROCEDURE p1(OUT dst inet4)
+BEGIN
+DECLARE src datetime DEFAULT NULL;
+SET dst=src;
+END;
+$$
+CREATE PROCEDURE p2()
+BEGIN
+DECLARE dst inet4 DEFAULT NULL;
+CALL p1(dst);
+END;
+$$
+CALL p2();
+ERROR HY000: Cannot cast 'datetime' as 'inet4' in assignment of `dst`
+SHOW WARNINGS;
+Level Code Message
+Error 4078 Cannot cast 'datetime' as 'inet4' in assignment of `dst`
+Note 4094 At line 4 in test.p1
+Note 4094 At line 4 in test.p2
+DROP PROCEDURE p2;
+DROP PROCEDURE p1;
+CREATE FUNCTION f1() RETURNS inet4
+BEGIN
+DECLARE rc datetime DEFAULT NULL;
+RETURN rc;
+END;
+$$
+SELECT f1();
+ERROR HY000: Cannot cast 'datetime' as 'inet4' in assignment of `f1()`
+DROP FUNCTION f1;
+CREATE PROCEDURE p1()
+BEGIN
+DECLARE src datetime DEFAULT NULL;
+DECLARE cur1 CURSOR(t inet4) FOR SELECT * FROM t1 WHERE target=t;
+OPEN cur1(src);
+CLOSE cur1;
+END;
+$$
+CALL p1();
+ERROR HY000: Cannot cast 'datetime' as 'inet4' in assignment of `t`
+DROP PROCEDURE p1;
+CREATE TABLE t2 LIKE t1;
+INSERT INTO t2 VALUES ();
+CREATE PROCEDURE p1()
+BEGIN
+DECLARE dst inet4 DEFAULT NULL;
+DECLARE cur2 CURSOR FOR SELECT source FROM t2 ORDER BY source LIMIT 1;
+OPEN cur2;
+FETCH cur2 INTO dst;
+CLOSE cur2;
+END;
+$$
+CALL p1();
+ERROR HY000: Cannot cast 'datetime' as 'inet4' in assignment of `dst`
+DROP PROCEDURE p1;
+DROP TABLE t2;
+# End of type_store_assignment_incompatible.inc
+DROP TABLE t1;
+CREATE TABLE t1 (target DATETIME DEFAULT '2001-01-01 10:20:30', source INET4 DEFAULT '99.99.99.99');
+# Start of type_store_assignment_incompatible.inc
+SET @sql_mode_save= @@sql_mode;
+SET @source_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
+WHERE COLUMN_NAME='source'
+ AND TABLE_NAME='t1'
+ AND TABLE_SCHEMA='test');
+SET @target_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
+WHERE COLUMN_NAME='target'
+ AND TABLE_NAME='t1'
+ AND TABLE_SCHEMA='test');
+SET @ignore= CASE WHEN @ignore IS NULL OR @ignore = '' THEN ''
+ WHEN @ignore NOT LIKE ' %' THEN CONCAT(' ',@ignore)
+ELSE @ignore
+END;
+CREATE TABLE t2 LIKE t1;
+ALTER TABLE t2 ADD id INT NOT NULL PRIMARY KEY FIRST;
+INSERT INTO t2 VALUES (1,DEFAULT,DEFAULT);
+SHOW CREATE TABLE t2;
+Table Create Table
+t2 CREATE TABLE `t2` (
+ `id` int(11) NOT NULL,
+ `target` datetime DEFAULT '2001-01-01 10:20:30',
+ `source` inet4 DEFAULT '99.99.99.99',
+ PRIMARY KEY (`id`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+CREATE TABLE t3 LIKE t2;
+INSERT INTO t3 VALUES
+(1,
+(SELECT source FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1));
+ERROR HY000: Cannot cast 'inet4' as 'datetime' in assignment of `test`.`t3`.`target`
+DROP TABLE t3;
+SET sql_mode='';
+CREATE TABLE t3 LIKE t2;
+ALTER TABLE t3 ENGINE=MyISAM;
+EXECUTE IMMEDIATE
+CONCAT('CREATE VIEW v3 AS SELECT id,',
+IF(@target_type='geometry','AsText(target)','target'), ' AS target,',
+IF(@source_type='geometry','AsText(source)','source'), ' AS source ',
+' FROM t3');
+INSERT INTO t3 VALUES
+(1,
+(SELECT target FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1)),
+(2,
+(SELECT source FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1));
+Warnings:
+Warning 1265 Data truncated for column 'target' at row 2
+SELECT * FROM v3;
+id target source
+1 2001-01-01 10:20:30 99.99.99.99
+2 0000-00-00 00:00:00 99.99.99.99
+TRUNCATE TABLE t3;
+SET sql_mode=STRICT_ALL_TABLES;
+INSERT INTO t3 VALUES
+(1,
+(SELECT target FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1)),
+(2,
+(SELECT source FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1));
+ERROR 22007: Incorrect datetime value: '99.99.99.99' for column `test`.`t3`.`target` at row 2
+SELECT * FROM v3;
+id target source
+1 2001-01-01 10:20:30 99.99.99.99
+TRUNCATE TABLE t3;
+SET sql_mode=@sql_mode_save;
+DROP TABLE t3;
+DROP VIEW v3;
+CREATE TABLE t3 LIKE t2;
+INSERT INTO t3 SELECT id,source,source FROM t2;
+ERROR HY000: Cannot cast 'inet4' as 'datetime' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 (id,target,source) SELECT id,source,source FROM t2;
+ERROR HY000: Cannot cast 'inet4' as 'datetime' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
+ERROR HY000: Cannot cast 'inet4' as 'datetime' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 (id,target,source) VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
+ERROR HY000: Cannot cast 'inet4' as 'datetime' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
+ERROR HY000: Cannot cast 'inet4' as 'datetime' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 (id,target,source) SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
+ERROR HY000: Cannot cast 'inet4' as 'datetime' in assignment of `test`.`t3`.`target`
+UPDATE t3 SET target=source;
+ERROR HY000: Cannot cast 'inet4' as 'datetime' in assignment of `test`.`t3`.`target`
+UPDATE t2, t3 SET t3.target=t2.source WHERE t2.id=t3.id;
+ERROR HY000: Cannot cast 'inet4' as 'datetime' in assignment of `test`.`t3`.`target`
+SET @alter=CONCAT('ALTER', @ignore, ' TABLE t3 MODIFY target ', @source_type);
+SELECT @alter;
+@alter
+ALTER TABLE t3 MODIFY target inet4
+EXECUTE IMMEDIATE @alter;
+ERROR HY000: Cannot cast 'datetime' as 'inet4' in assignment of `test`.`t3`.`target`
+DROP TABLE t3;
+DROP TABLE t2;
+CREATE PROCEDURE p1()
+BEGIN
+DECLARE src inet4 DEFAULT NULL;
+DECLARE dst datetime DEFAULT NULL;
+SET dst=src;
+END;
+$$
+CALL p1;
+ERROR HY000: Cannot cast 'inet4' as 'datetime' in assignment of `dst`
+DROP PROCEDURE p1;
+CREATE FUNCTION f1(a datetime) RETURNS INT RETURN NULL;;
+SELECT f1((SELECT source FROM t1 ORDER BY source LIMIT 1));
+ERROR HY000: Cannot cast 'inet4' as 'datetime' in assignment of `a`
+DROP FUNCTION f1;
+CREATE PROCEDURE p1(a datetime) BEGIN END;;
+CALL p1((SELECT source FROM t1 ORDER BY source LIMIT 1));
+ERROR HY000: Cannot cast 'inet4' as 'datetime' in assignment of `a`
+DROP PROCEDURE p1;
+CREATE PROCEDURE p1(OUT dst datetime)
+BEGIN
+DECLARE src inet4 DEFAULT NULL;
+SET dst=src;
+END;
+$$
+CREATE PROCEDURE p2()
+BEGIN
+DECLARE dst datetime DEFAULT NULL;
+CALL p1(dst);
+END;
+$$
+CALL p2();
+ERROR HY000: Cannot cast 'inet4' as 'datetime' in assignment of `dst`
+SHOW WARNINGS;
+Level Code Message
+Error 4078 Cannot cast 'inet4' as 'datetime' in assignment of `dst`
+Note 4094 At line 4 in test.p1
+Note 4094 At line 4 in test.p2
+DROP PROCEDURE p2;
+DROP PROCEDURE p1;
+CREATE FUNCTION f1() RETURNS datetime
+BEGIN
+DECLARE rc inet4 DEFAULT NULL;
+RETURN rc;
+END;
+$$
+SELECT f1();
+ERROR HY000: Cannot cast 'inet4' as 'datetime' in assignment of `f1()`
+DROP FUNCTION f1;
+CREATE PROCEDURE p1()
+BEGIN
+DECLARE src inet4 DEFAULT NULL;
+DECLARE cur1 CURSOR(t datetime) FOR SELECT * FROM t1 WHERE target=t;
+OPEN cur1(src);
+CLOSE cur1;
+END;
+$$
+CALL p1();
+ERROR HY000: Cannot cast 'inet4' as 'datetime' in assignment of `t`
+DROP PROCEDURE p1;
+CREATE TABLE t2 LIKE t1;
+INSERT INTO t2 VALUES ();
+CREATE PROCEDURE p1()
+BEGIN
+DECLARE dst datetime DEFAULT NULL;
+DECLARE cur2 CURSOR FOR SELECT source FROM t2 ORDER BY source LIMIT 1;
+OPEN cur2;
+FETCH cur2 INTO dst;
+CLOSE cur2;
+END;
+$$
+CALL p1();
+ERROR HY000: Cannot cast 'inet4' as 'datetime' in assignment of `dst`
+DROP PROCEDURE p1;
+DROP TABLE t2;
+# End of type_store_assignment_incompatible.inc
+DROP TABLE t1;
+#
+# End of 10.10 tests
+#
diff --git a/plugin/type_inet/mysql-test/type_inet/type_inet4_mix_datetime.test b/plugin/type_inet/mysql-test/type_inet/type_inet4_mix_datetime.test
new file mode 100644
index 00000000000..06495e70fef
--- /dev/null
+++ b/plugin/type_inet/mysql-test/type_inet/type_inet4_mix_datetime.test
@@ -0,0 +1,25 @@
+--echo #
+--echo # Start of 10.10 tests
+--echo #
+
+--echo #
+--echo # MDEV-23287 The INET4 data type
+--echo #
+
+#
+# The DATETIME data type has loose control on the incoming data,
+# so values like '0.0.0.0' do not fail when get inserted to a DATETIME field.
+# Using '99.99.99.99' to make sure the month part is out of the range
+# to guarantee the failure.
+
+CREATE TABLE t1 (target INET4 DEFAULT '99.99.99.99', source DATETIME DEFAULT '2001-01-01 10:20:30');
+--source include/type_mix_incompatible.inc
+DROP TABLE t1;
+
+CREATE TABLE t1 (target DATETIME DEFAULT '2001-01-01 10:20:30', source INET4 DEFAULT '99.99.99.99');
+--source include/type_mix_incompatible.inc
+DROP TABLE t1;
+
+--echo #
+--echo # End of 10.10 tests
+--echo #
diff --git a/plugin/type_inet/mysql-test/type_inet/type_inet4_mix_decimal.result b/plugin/type_inet/mysql-test/type_inet/type_inet4_mix_decimal.result
new file mode 100644
index 00000000000..3b93c2fd9da
--- /dev/null
+++ b/plugin/type_inet/mysql-test/type_inet/type_inet4_mix_decimal.result
@@ -0,0 +1,353 @@
+#
+# Start of 10.10 tests
+#
+#
+# MDEV-23287 The INET4 data type
+#
+CREATE TABLE t1 (target INET4 DEFAULT '0.0.0.0', source DECIMAL(32,0) DEFAULT 0);
+# Start of type_store_assignment_incompatible.inc
+SET @sql_mode_save= @@sql_mode;
+SET @source_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
+WHERE COLUMN_NAME='source'
+ AND TABLE_NAME='t1'
+ AND TABLE_SCHEMA='test');
+SET @target_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
+WHERE COLUMN_NAME='target'
+ AND TABLE_NAME='t1'
+ AND TABLE_SCHEMA='test');
+SET @ignore= CASE WHEN @ignore IS NULL OR @ignore = '' THEN ''
+ WHEN @ignore NOT LIKE ' %' THEN CONCAT(' ',@ignore)
+ELSE @ignore
+END;
+CREATE TABLE t2 LIKE t1;
+ALTER TABLE t2 ADD id INT NOT NULL PRIMARY KEY FIRST;
+INSERT INTO t2 VALUES (1,DEFAULT,DEFAULT);
+SHOW CREATE TABLE t2;
+Table Create Table
+t2 CREATE TABLE `t2` (
+ `id` int(11) NOT NULL,
+ `target` inet4 DEFAULT '0.0.0.0',
+ `source` decimal(32,0) DEFAULT 0,
+ PRIMARY KEY (`id`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+CREATE TABLE t3 LIKE t2;
+INSERT INTO t3 VALUES
+(1,
+(SELECT source FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1));
+ERROR HY000: Cannot cast 'decimal' as 'inet4' in assignment of `test`.`t3`.`target`
+DROP TABLE t3;
+SET sql_mode='';
+CREATE TABLE t3 LIKE t2;
+ALTER TABLE t3 ENGINE=MyISAM;
+EXECUTE IMMEDIATE
+CONCAT('CREATE VIEW v3 AS SELECT id,',
+IF(@target_type='geometry','AsText(target)','target'), ' AS target,',
+IF(@source_type='geometry','AsText(source)','source'), ' AS source ',
+' FROM t3');
+INSERT INTO t3 VALUES
+(1,
+(SELECT target FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1)),
+(2,
+(SELECT source FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1));
+Warnings:
+Warning 1292 Incorrect inet4 value: '0' for column `test`.`t3`.`target` at row 2
+SELECT * FROM v3;
+id target source
+1 0.0.0.0 0
+2 0.0.0.0 0
+TRUNCATE TABLE t3;
+SET sql_mode=STRICT_ALL_TABLES;
+INSERT INTO t3 VALUES
+(1,
+(SELECT target FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1)),
+(2,
+(SELECT source FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1));
+ERROR 22007: Incorrect inet4 value: '0' for column `test`.`t3`.`target` at row 2
+SELECT * FROM v3;
+id target source
+1 0.0.0.0 0
+TRUNCATE TABLE t3;
+SET sql_mode=@sql_mode_save;
+DROP TABLE t3;
+DROP VIEW v3;
+CREATE TABLE t3 LIKE t2;
+INSERT INTO t3 SELECT id,source,source FROM t2;
+ERROR HY000: Cannot cast 'decimal' as 'inet4' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 (id,target,source) SELECT id,source,source FROM t2;
+ERROR HY000: Cannot cast 'decimal' as 'inet4' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
+ERROR HY000: Cannot cast 'decimal' as 'inet4' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 (id,target,source) VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
+ERROR HY000: Cannot cast 'decimal' as 'inet4' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
+ERROR HY000: Cannot cast 'decimal' as 'inet4' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 (id,target,source) SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
+ERROR HY000: Cannot cast 'decimal' as 'inet4' in assignment of `test`.`t3`.`target`
+UPDATE t3 SET target=source;
+ERROR HY000: Cannot cast 'decimal' as 'inet4' in assignment of `test`.`t3`.`target`
+UPDATE t2, t3 SET t3.target=t2.source WHERE t2.id=t3.id;
+ERROR HY000: Cannot cast 'decimal' as 'inet4' in assignment of `test`.`t3`.`target`
+SET @alter=CONCAT('ALTER', @ignore, ' TABLE t3 MODIFY target ', @source_type);
+SELECT @alter;
+@alter
+ALTER TABLE t3 MODIFY target decimal(32,0)
+EXECUTE IMMEDIATE @alter;
+ERROR HY000: Cannot cast 'inet4' as 'decimal' in assignment of `test`.`t3`.`target`
+DROP TABLE t3;
+DROP TABLE t2;
+CREATE PROCEDURE p1()
+BEGIN
+DECLARE src decimal(32,0) DEFAULT NULL;
+DECLARE dst inet4 DEFAULT NULL;
+SET dst=src;
+END;
+$$
+CALL p1;
+ERROR HY000: Cannot cast 'decimal' as 'inet4' in assignment of `dst`
+DROP PROCEDURE p1;
+CREATE FUNCTION f1(a inet4) RETURNS INT RETURN NULL;;
+SELECT f1((SELECT source FROM t1 ORDER BY source LIMIT 1));
+ERROR HY000: Cannot cast 'decimal' as 'inet4' in assignment of `a`
+DROP FUNCTION f1;
+CREATE PROCEDURE p1(a inet4) BEGIN END;;
+CALL p1((SELECT source FROM t1 ORDER BY source LIMIT 1));
+ERROR HY000: Cannot cast 'decimal' as 'inet4' in assignment of `a`
+DROP PROCEDURE p1;
+CREATE PROCEDURE p1(OUT dst inet4)
+BEGIN
+DECLARE src decimal(32,0) DEFAULT NULL;
+SET dst=src;
+END;
+$$
+CREATE PROCEDURE p2()
+BEGIN
+DECLARE dst inet4 DEFAULT NULL;
+CALL p1(dst);
+END;
+$$
+CALL p2();
+ERROR HY000: Cannot cast 'decimal' as 'inet4' in assignment of `dst`
+SHOW WARNINGS;
+Level Code Message
+Error 4078 Cannot cast 'decimal' as 'inet4' in assignment of `dst`
+Note 4094 At line 4 in test.p1
+Note 4094 At line 4 in test.p2
+DROP PROCEDURE p2;
+DROP PROCEDURE p1;
+CREATE FUNCTION f1() RETURNS inet4
+BEGIN
+DECLARE rc decimal(32,0) DEFAULT NULL;
+RETURN rc;
+END;
+$$
+SELECT f1();
+ERROR HY000: Cannot cast 'decimal' as 'inet4' in assignment of `f1()`
+DROP FUNCTION f1;
+CREATE PROCEDURE p1()
+BEGIN
+DECLARE src decimal(32,0) DEFAULT NULL;
+DECLARE cur1 CURSOR(t inet4) FOR SELECT * FROM t1 WHERE target=t;
+OPEN cur1(src);
+CLOSE cur1;
+END;
+$$
+CALL p1();
+ERROR HY000: Cannot cast 'decimal' as 'inet4' in assignment of `t`
+DROP PROCEDURE p1;
+CREATE TABLE t2 LIKE t1;
+INSERT INTO t2 VALUES ();
+CREATE PROCEDURE p1()
+BEGIN
+DECLARE dst inet4 DEFAULT NULL;
+DECLARE cur2 CURSOR FOR SELECT source FROM t2 ORDER BY source LIMIT 1;
+OPEN cur2;
+FETCH cur2 INTO dst;
+CLOSE cur2;
+END;
+$$
+CALL p1();
+ERROR HY000: Cannot cast 'decimal' as 'inet4' in assignment of `dst`
+DROP PROCEDURE p1;
+DROP TABLE t2;
+# End of type_store_assignment_incompatible.inc
+DROP TABLE t1;
+CREATE TABLE t1 (target DECIMAL(32,0) DEFAULT 0, source INET4 DEFAULT '0.0.0.0');
+# Start of type_store_assignment_incompatible.inc
+SET @sql_mode_save= @@sql_mode;
+SET @source_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
+WHERE COLUMN_NAME='source'
+ AND TABLE_NAME='t1'
+ AND TABLE_SCHEMA='test');
+SET @target_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
+WHERE COLUMN_NAME='target'
+ AND TABLE_NAME='t1'
+ AND TABLE_SCHEMA='test');
+SET @ignore= CASE WHEN @ignore IS NULL OR @ignore = '' THEN ''
+ WHEN @ignore NOT LIKE ' %' THEN CONCAT(' ',@ignore)
+ELSE @ignore
+END;
+CREATE TABLE t2 LIKE t1;
+ALTER TABLE t2 ADD id INT NOT NULL PRIMARY KEY FIRST;
+INSERT INTO t2 VALUES (1,DEFAULT,DEFAULT);
+SHOW CREATE TABLE t2;
+Table Create Table
+t2 CREATE TABLE `t2` (
+ `id` int(11) NOT NULL,
+ `target` decimal(32,0) DEFAULT 0,
+ `source` inet4 DEFAULT '0.0.0.0',
+ PRIMARY KEY (`id`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+CREATE TABLE t3 LIKE t2;
+INSERT INTO t3 VALUES
+(1,
+(SELECT source FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1));
+ERROR HY000: Cannot cast 'inet4' as 'decimal' in assignment of `test`.`t3`.`target`
+DROP TABLE t3;
+SET sql_mode='';
+CREATE TABLE t3 LIKE t2;
+ALTER TABLE t3 ENGINE=MyISAM;
+EXECUTE IMMEDIATE
+CONCAT('CREATE VIEW v3 AS SELECT id,',
+IF(@target_type='geometry','AsText(target)','target'), ' AS target,',
+IF(@source_type='geometry','AsText(source)','source'), ' AS source ',
+' FROM t3');
+INSERT INTO t3 VALUES
+(1,
+(SELECT target FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1)),
+(2,
+(SELECT source FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1));
+Warnings:
+Warning 1265 Data truncated for column 'target' at row 2
+SELECT * FROM v3;
+id target source
+1 0 0.0.0.0
+2 0 0.0.0.0
+TRUNCATE TABLE t3;
+SET sql_mode=STRICT_ALL_TABLES;
+INSERT INTO t3 VALUES
+(1,
+(SELECT target FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1)),
+(2,
+(SELECT source FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1));
+ERROR 01000: Data truncated for column 'target' at row 2
+SELECT * FROM v3;
+id target source
+1 0 0.0.0.0
+TRUNCATE TABLE t3;
+SET sql_mode=@sql_mode_save;
+DROP TABLE t3;
+DROP VIEW v3;
+CREATE TABLE t3 LIKE t2;
+INSERT INTO t3 SELECT id,source,source FROM t2;
+ERROR HY000: Cannot cast 'inet4' as 'decimal' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 (id,target,source) SELECT id,source,source FROM t2;
+ERROR HY000: Cannot cast 'inet4' as 'decimal' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
+ERROR HY000: Cannot cast 'inet4' as 'decimal' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 (id,target,source) VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
+ERROR HY000: Cannot cast 'inet4' as 'decimal' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
+ERROR HY000: Cannot cast 'inet4' as 'decimal' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 (id,target,source) SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
+ERROR HY000: Cannot cast 'inet4' as 'decimal' in assignment of `test`.`t3`.`target`
+UPDATE t3 SET target=source;
+ERROR HY000: Cannot cast 'inet4' as 'decimal' in assignment of `test`.`t3`.`target`
+UPDATE t2, t3 SET t3.target=t2.source WHERE t2.id=t3.id;
+ERROR HY000: Cannot cast 'inet4' as 'decimal' in assignment of `test`.`t3`.`target`
+SET @alter=CONCAT('ALTER', @ignore, ' TABLE t3 MODIFY target ', @source_type);
+SELECT @alter;
+@alter
+ALTER TABLE t3 MODIFY target inet4
+EXECUTE IMMEDIATE @alter;
+ERROR HY000: Cannot cast 'decimal' as 'inet4' in assignment of `test`.`t3`.`target`
+DROP TABLE t3;
+DROP TABLE t2;
+CREATE PROCEDURE p1()
+BEGIN
+DECLARE src inet4 DEFAULT NULL;
+DECLARE dst decimal(32,0) DEFAULT NULL;
+SET dst=src;
+END;
+$$
+CALL p1;
+ERROR HY000: Cannot cast 'inet4' as 'decimal' in assignment of `dst`
+DROP PROCEDURE p1;
+CREATE FUNCTION f1(a decimal(32,0)) RETURNS INT RETURN NULL;;
+SELECT f1((SELECT source FROM t1 ORDER BY source LIMIT 1));
+ERROR HY000: Cannot cast 'inet4' as 'decimal' in assignment of `a`
+DROP FUNCTION f1;
+CREATE PROCEDURE p1(a decimal(32,0)) BEGIN END;;
+CALL p1((SELECT source FROM t1 ORDER BY source LIMIT 1));
+ERROR HY000: Cannot cast 'inet4' as 'decimal' in assignment of `a`
+DROP PROCEDURE p1;
+CREATE PROCEDURE p1(OUT dst decimal(32,0))
+BEGIN
+DECLARE src inet4 DEFAULT NULL;
+SET dst=src;
+END;
+$$
+CREATE PROCEDURE p2()
+BEGIN
+DECLARE dst decimal(32,0) DEFAULT NULL;
+CALL p1(dst);
+END;
+$$
+CALL p2();
+ERROR HY000: Cannot cast 'inet4' as 'decimal' in assignment of `dst`
+SHOW WARNINGS;
+Level Code Message
+Error 4078 Cannot cast 'inet4' as 'decimal' in assignment of `dst`
+Note 4094 At line 4 in test.p1
+Note 4094 At line 4 in test.p2
+DROP PROCEDURE p2;
+DROP PROCEDURE p1;
+CREATE FUNCTION f1() RETURNS decimal(32,0)
+BEGIN
+DECLARE rc inet4 DEFAULT NULL;
+RETURN rc;
+END;
+$$
+SELECT f1();
+ERROR HY000: Cannot cast 'inet4' as 'decimal' in assignment of `f1()`
+DROP FUNCTION f1;
+CREATE PROCEDURE p1()
+BEGIN
+DECLARE src inet4 DEFAULT NULL;
+DECLARE cur1 CURSOR(t decimal(32,0)) FOR SELECT * FROM t1 WHERE target=t;
+OPEN cur1(src);
+CLOSE cur1;
+END;
+$$
+CALL p1();
+ERROR HY000: Cannot cast 'inet4' as 'decimal' in assignment of `t`
+DROP PROCEDURE p1;
+CREATE TABLE t2 LIKE t1;
+INSERT INTO t2 VALUES ();
+CREATE PROCEDURE p1()
+BEGIN
+DECLARE dst decimal(32,0) DEFAULT NULL;
+DECLARE cur2 CURSOR FOR SELECT source FROM t2 ORDER BY source LIMIT 1;
+OPEN cur2;
+FETCH cur2 INTO dst;
+CLOSE cur2;
+END;
+$$
+CALL p1();
+ERROR HY000: Cannot cast 'inet4' as 'decimal' in assignment of `dst`
+DROP PROCEDURE p1;
+DROP TABLE t2;
+# End of type_store_assignment_incompatible.inc
+DROP TABLE t1;
+#
+# End of 10.10 tests
+#
diff --git a/plugin/type_inet/mysql-test/type_inet/type_inet4_mix_decimal.test b/plugin/type_inet/mysql-test/type_inet/type_inet4_mix_decimal.test
new file mode 100644
index 00000000000..bf158b8fff7
--- /dev/null
+++ b/plugin/type_inet/mysql-test/type_inet/type_inet4_mix_decimal.test
@@ -0,0 +1,19 @@
+--echo #
+--echo # Start of 10.10 tests
+--echo #
+
+--echo #
+--echo # MDEV-23287 The INET4 data type
+--echo #
+
+CREATE TABLE t1 (target INET4 DEFAULT '0.0.0.0', source DECIMAL(32,0) DEFAULT 0);
+--source include/type_mix_incompatible.inc
+DROP TABLE t1;
+
+CREATE TABLE t1 (target DECIMAL(32,0) DEFAULT 0, source INET4 DEFAULT '0.0.0.0');
+--source include/type_mix_incompatible.inc
+DROP TABLE t1;
+
+--echo #
+--echo # End of 10.10 tests
+--echo #
diff --git a/plugin/type_inet/mysql-test/type_inet/type_inet4_mix_double.result b/plugin/type_inet/mysql-test/type_inet/type_inet4_mix_double.result
new file mode 100644
index 00000000000..0987bae1e12
--- /dev/null
+++ b/plugin/type_inet/mysql-test/type_inet/type_inet4_mix_double.result
@@ -0,0 +1,353 @@
+#
+# Start of 10.10 tests
+#
+#
+# MDEV-23287 The INET4 data type
+#
+CREATE TABLE t1 (target INET4 DEFAULT '0.0.0.0', source DOUBLE DEFAULT 0);
+# Start of type_store_assignment_incompatible.inc
+SET @sql_mode_save= @@sql_mode;
+SET @source_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
+WHERE COLUMN_NAME='source'
+ AND TABLE_NAME='t1'
+ AND TABLE_SCHEMA='test');
+SET @target_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
+WHERE COLUMN_NAME='target'
+ AND TABLE_NAME='t1'
+ AND TABLE_SCHEMA='test');
+SET @ignore= CASE WHEN @ignore IS NULL OR @ignore = '' THEN ''
+ WHEN @ignore NOT LIKE ' %' THEN CONCAT(' ',@ignore)
+ELSE @ignore
+END;
+CREATE TABLE t2 LIKE t1;
+ALTER TABLE t2 ADD id INT NOT NULL PRIMARY KEY FIRST;
+INSERT INTO t2 VALUES (1,DEFAULT,DEFAULT);
+SHOW CREATE TABLE t2;
+Table Create Table
+t2 CREATE TABLE `t2` (
+ `id` int(11) NOT NULL,
+ `target` inet4 DEFAULT '0.0.0.0',
+ `source` double DEFAULT 0,
+ PRIMARY KEY (`id`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+CREATE TABLE t3 LIKE t2;
+INSERT INTO t3 VALUES
+(1,
+(SELECT source FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1));
+ERROR HY000: Cannot cast 'double' as 'inet4' in assignment of `test`.`t3`.`target`
+DROP TABLE t3;
+SET sql_mode='';
+CREATE TABLE t3 LIKE t2;
+ALTER TABLE t3 ENGINE=MyISAM;
+EXECUTE IMMEDIATE
+CONCAT('CREATE VIEW v3 AS SELECT id,',
+IF(@target_type='geometry','AsText(target)','target'), ' AS target,',
+IF(@source_type='geometry','AsText(source)','source'), ' AS source ',
+' FROM t3');
+INSERT INTO t3 VALUES
+(1,
+(SELECT target FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1)),
+(2,
+(SELECT source FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1));
+Warnings:
+Warning 1292 Incorrect inet4 value: '0' for column `test`.`t3`.`target` at row 2
+SELECT * FROM v3;
+id target source
+1 0.0.0.0 0
+2 0.0.0.0 0
+TRUNCATE TABLE t3;
+SET sql_mode=STRICT_ALL_TABLES;
+INSERT INTO t3 VALUES
+(1,
+(SELECT target FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1)),
+(2,
+(SELECT source FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1));
+ERROR 22007: Incorrect inet4 value: '0' for column `test`.`t3`.`target` at row 2
+SELECT * FROM v3;
+id target source
+1 0.0.0.0 0
+TRUNCATE TABLE t3;
+SET sql_mode=@sql_mode_save;
+DROP TABLE t3;
+DROP VIEW v3;
+CREATE TABLE t3 LIKE t2;
+INSERT INTO t3 SELECT id,source,source FROM t2;
+ERROR HY000: Cannot cast 'double' as 'inet4' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 (id,target,source) SELECT id,source,source FROM t2;
+ERROR HY000: Cannot cast 'double' as 'inet4' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
+ERROR HY000: Cannot cast 'double' as 'inet4' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 (id,target,source) VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
+ERROR HY000: Cannot cast 'double' as 'inet4' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
+ERROR HY000: Cannot cast 'double' as 'inet4' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 (id,target,source) SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
+ERROR HY000: Cannot cast 'double' as 'inet4' in assignment of `test`.`t3`.`target`
+UPDATE t3 SET target=source;
+ERROR HY000: Cannot cast 'double' as 'inet4' in assignment of `test`.`t3`.`target`
+UPDATE t2, t3 SET t3.target=t2.source WHERE t2.id=t3.id;
+ERROR HY000: Cannot cast 'double' as 'inet4' in assignment of `test`.`t3`.`target`
+SET @alter=CONCAT('ALTER', @ignore, ' TABLE t3 MODIFY target ', @source_type);
+SELECT @alter;
+@alter
+ALTER TABLE t3 MODIFY target double
+EXECUTE IMMEDIATE @alter;
+ERROR HY000: Cannot cast 'inet4' as 'double' in assignment of `test`.`t3`.`target`
+DROP TABLE t3;
+DROP TABLE t2;
+CREATE PROCEDURE p1()
+BEGIN
+DECLARE src double DEFAULT NULL;
+DECLARE dst inet4 DEFAULT NULL;
+SET dst=src;
+END;
+$$
+CALL p1;
+ERROR HY000: Cannot cast 'double' as 'inet4' in assignment of `dst`
+DROP PROCEDURE p1;
+CREATE FUNCTION f1(a inet4) RETURNS INT RETURN NULL;;
+SELECT f1((SELECT source FROM t1 ORDER BY source LIMIT 1));
+ERROR HY000: Cannot cast 'double' as 'inet4' in assignment of `a`
+DROP FUNCTION f1;
+CREATE PROCEDURE p1(a inet4) BEGIN END;;
+CALL p1((SELECT source FROM t1 ORDER BY source LIMIT 1));
+ERROR HY000: Cannot cast 'double' as 'inet4' in assignment of `a`
+DROP PROCEDURE p1;
+CREATE PROCEDURE p1(OUT dst inet4)
+BEGIN
+DECLARE src double DEFAULT NULL;
+SET dst=src;
+END;
+$$
+CREATE PROCEDURE p2()
+BEGIN
+DECLARE dst inet4 DEFAULT NULL;
+CALL p1(dst);
+END;
+$$
+CALL p2();
+ERROR HY000: Cannot cast 'double' as 'inet4' in assignment of `dst`
+SHOW WARNINGS;
+Level Code Message
+Error 4078 Cannot cast 'double' as 'inet4' in assignment of `dst`
+Note 4094 At line 4 in test.p1
+Note 4094 At line 4 in test.p2
+DROP PROCEDURE p2;
+DROP PROCEDURE p1;
+CREATE FUNCTION f1() RETURNS inet4
+BEGIN
+DECLARE rc double DEFAULT NULL;
+RETURN rc;
+END;
+$$
+SELECT f1();
+ERROR HY000: Cannot cast 'double' as 'inet4' in assignment of `f1()`
+DROP FUNCTION f1;
+CREATE PROCEDURE p1()
+BEGIN
+DECLARE src double DEFAULT NULL;
+DECLARE cur1 CURSOR(t inet4) FOR SELECT * FROM t1 WHERE target=t;
+OPEN cur1(src);
+CLOSE cur1;
+END;
+$$
+CALL p1();
+ERROR HY000: Cannot cast 'double' as 'inet4' in assignment of `t`
+DROP PROCEDURE p1;
+CREATE TABLE t2 LIKE t1;
+INSERT INTO t2 VALUES ();
+CREATE PROCEDURE p1()
+BEGIN
+DECLARE dst inet4 DEFAULT NULL;
+DECLARE cur2 CURSOR FOR SELECT source FROM t2 ORDER BY source LIMIT 1;
+OPEN cur2;
+FETCH cur2 INTO dst;
+CLOSE cur2;
+END;
+$$
+CALL p1();
+ERROR HY000: Cannot cast 'double' as 'inet4' in assignment of `dst`
+DROP PROCEDURE p1;
+DROP TABLE t2;
+# End of type_store_assignment_incompatible.inc
+DROP TABLE t1;
+CREATE TABLE t1 (target DOUBLE DEFAULT 0, source INET4 DEFAULT '0.0.0.0');
+# Start of type_store_assignment_incompatible.inc
+SET @sql_mode_save= @@sql_mode;
+SET @source_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
+WHERE COLUMN_NAME='source'
+ AND TABLE_NAME='t1'
+ AND TABLE_SCHEMA='test');
+SET @target_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
+WHERE COLUMN_NAME='target'
+ AND TABLE_NAME='t1'
+ AND TABLE_SCHEMA='test');
+SET @ignore= CASE WHEN @ignore IS NULL OR @ignore = '' THEN ''
+ WHEN @ignore NOT LIKE ' %' THEN CONCAT(' ',@ignore)
+ELSE @ignore
+END;
+CREATE TABLE t2 LIKE t1;
+ALTER TABLE t2 ADD id INT NOT NULL PRIMARY KEY FIRST;
+INSERT INTO t2 VALUES (1,DEFAULT,DEFAULT);
+SHOW CREATE TABLE t2;
+Table Create Table
+t2 CREATE TABLE `t2` (
+ `id` int(11) NOT NULL,
+ `target` double DEFAULT 0,
+ `source` inet4 DEFAULT '0.0.0.0',
+ PRIMARY KEY (`id`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+CREATE TABLE t3 LIKE t2;
+INSERT INTO t3 VALUES
+(1,
+(SELECT source FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1));
+ERROR HY000: Cannot cast 'inet4' as 'double' in assignment of `test`.`t3`.`target`
+DROP TABLE t3;
+SET sql_mode='';
+CREATE TABLE t3 LIKE t2;
+ALTER TABLE t3 ENGINE=MyISAM;
+EXECUTE IMMEDIATE
+CONCAT('CREATE VIEW v3 AS SELECT id,',
+IF(@target_type='geometry','AsText(target)','target'), ' AS target,',
+IF(@source_type='geometry','AsText(source)','source'), ' AS source ',
+' FROM t3');
+INSERT INTO t3 VALUES
+(1,
+(SELECT target FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1)),
+(2,
+(SELECT source FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1));
+Warnings:
+Warning 1265 Data truncated for column 'target' at row 2
+SELECT * FROM v3;
+id target source
+1 0 0.0.0.0
+2 0 0.0.0.0
+TRUNCATE TABLE t3;
+SET sql_mode=STRICT_ALL_TABLES;
+INSERT INTO t3 VALUES
+(1,
+(SELECT target FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1)),
+(2,
+(SELECT source FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1));
+ERROR 01000: Data truncated for column 'target' at row 2
+SELECT * FROM v3;
+id target source
+1 0 0.0.0.0
+TRUNCATE TABLE t3;
+SET sql_mode=@sql_mode_save;
+DROP TABLE t3;
+DROP VIEW v3;
+CREATE TABLE t3 LIKE t2;
+INSERT INTO t3 SELECT id,source,source FROM t2;
+ERROR HY000: Cannot cast 'inet4' as 'double' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 (id,target,source) SELECT id,source,source FROM t2;
+ERROR HY000: Cannot cast 'inet4' as 'double' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
+ERROR HY000: Cannot cast 'inet4' as 'double' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 (id,target,source) VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
+ERROR HY000: Cannot cast 'inet4' as 'double' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
+ERROR HY000: Cannot cast 'inet4' as 'double' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 (id,target,source) SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
+ERROR HY000: Cannot cast 'inet4' as 'double' in assignment of `test`.`t3`.`target`
+UPDATE t3 SET target=source;
+ERROR HY000: Cannot cast 'inet4' as 'double' in assignment of `test`.`t3`.`target`
+UPDATE t2, t3 SET t3.target=t2.source WHERE t2.id=t3.id;
+ERROR HY000: Cannot cast 'inet4' as 'double' in assignment of `test`.`t3`.`target`
+SET @alter=CONCAT('ALTER', @ignore, ' TABLE t3 MODIFY target ', @source_type);
+SELECT @alter;
+@alter
+ALTER TABLE t3 MODIFY target inet4
+EXECUTE IMMEDIATE @alter;
+ERROR HY000: Cannot cast 'double' as 'inet4' in assignment of `test`.`t3`.`target`
+DROP TABLE t3;
+DROP TABLE t2;
+CREATE PROCEDURE p1()
+BEGIN
+DECLARE src inet4 DEFAULT NULL;
+DECLARE dst double DEFAULT NULL;
+SET dst=src;
+END;
+$$
+CALL p1;
+ERROR HY000: Cannot cast 'inet4' as 'double' in assignment of `dst`
+DROP PROCEDURE p1;
+CREATE FUNCTION f1(a double) RETURNS INT RETURN NULL;;
+SELECT f1((SELECT source FROM t1 ORDER BY source LIMIT 1));
+ERROR HY000: Cannot cast 'inet4' as 'double' in assignment of `a`
+DROP FUNCTION f1;
+CREATE PROCEDURE p1(a double) BEGIN END;;
+CALL p1((SELECT source FROM t1 ORDER BY source LIMIT 1));
+ERROR HY000: Cannot cast 'inet4' as 'double' in assignment of `a`
+DROP PROCEDURE p1;
+CREATE PROCEDURE p1(OUT dst double)
+BEGIN
+DECLARE src inet4 DEFAULT NULL;
+SET dst=src;
+END;
+$$
+CREATE PROCEDURE p2()
+BEGIN
+DECLARE dst double DEFAULT NULL;
+CALL p1(dst);
+END;
+$$
+CALL p2();
+ERROR HY000: Cannot cast 'inet4' as 'double' in assignment of `dst`
+SHOW WARNINGS;
+Level Code Message
+Error 4078 Cannot cast 'inet4' as 'double' in assignment of `dst`
+Note 4094 At line 4 in test.p1
+Note 4094 At line 4 in test.p2
+DROP PROCEDURE p2;
+DROP PROCEDURE p1;
+CREATE FUNCTION f1() RETURNS double
+BEGIN
+DECLARE rc inet4 DEFAULT NULL;
+RETURN rc;
+END;
+$$
+SELECT f1();
+ERROR HY000: Cannot cast 'inet4' as 'double' in assignment of `f1()`
+DROP FUNCTION f1;
+CREATE PROCEDURE p1()
+BEGIN
+DECLARE src inet4 DEFAULT NULL;
+DECLARE cur1 CURSOR(t double) FOR SELECT * FROM t1 WHERE target=t;
+OPEN cur1(src);
+CLOSE cur1;
+END;
+$$
+CALL p1();
+ERROR HY000: Cannot cast 'inet4' as 'double' in assignment of `t`
+DROP PROCEDURE p1;
+CREATE TABLE t2 LIKE t1;
+INSERT INTO t2 VALUES ();
+CREATE PROCEDURE p1()
+BEGIN
+DECLARE dst double DEFAULT NULL;
+DECLARE cur2 CURSOR FOR SELECT source FROM t2 ORDER BY source LIMIT 1;
+OPEN cur2;
+FETCH cur2 INTO dst;
+CLOSE cur2;
+END;
+$$
+CALL p1();
+ERROR HY000: Cannot cast 'inet4' as 'double' in assignment of `dst`
+DROP PROCEDURE p1;
+DROP TABLE t2;
+# End of type_store_assignment_incompatible.inc
+DROP TABLE t1;
+#
+# End of 10.10 tests
+#
diff --git a/plugin/type_inet/mysql-test/type_inet/type_inet4_mix_double.test b/plugin/type_inet/mysql-test/type_inet/type_inet4_mix_double.test
new file mode 100644
index 00000000000..087d09bfa7e
--- /dev/null
+++ b/plugin/type_inet/mysql-test/type_inet/type_inet4_mix_double.test
@@ -0,0 +1,19 @@
+--echo #
+--echo # Start of 10.10 tests
+--echo #
+
+--echo #
+--echo # MDEV-23287 The INET4 data type
+--echo #
+
+CREATE TABLE t1 (target INET4 DEFAULT '0.0.0.0', source DOUBLE DEFAULT 0);
+--source include/type_mix_incompatible.inc
+DROP TABLE t1;
+
+CREATE TABLE t1 (target DOUBLE DEFAULT 0, source INET4 DEFAULT '0.0.0.0');
+--source include/type_mix_incompatible.inc
+DROP TABLE t1;
+
+--echo #
+--echo # End of 10.10 tests
+--echo #
diff --git a/plugin/type_inet/mysql-test/type_inet/type_inet4_mix_int.result b/plugin/type_inet/mysql-test/type_inet/type_inet4_mix_int.result
new file mode 100644
index 00000000000..0a4fe99bdc6
--- /dev/null
+++ b/plugin/type_inet/mysql-test/type_inet/type_inet4_mix_int.result
@@ -0,0 +1,353 @@
+#
+# Start of 10.10 tests
+#
+#
+# MDEV-23287 The INET4 data type
+#
+CREATE TABLE t1 (target INET4 DEFAULT '0.0.0.0', source INT DEFAULT 0);
+# Start of type_store_assignment_incompatible.inc
+SET @sql_mode_save= @@sql_mode;
+SET @source_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
+WHERE COLUMN_NAME='source'
+ AND TABLE_NAME='t1'
+ AND TABLE_SCHEMA='test');
+SET @target_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
+WHERE COLUMN_NAME='target'
+ AND TABLE_NAME='t1'
+ AND TABLE_SCHEMA='test');
+SET @ignore= CASE WHEN @ignore IS NULL OR @ignore = '' THEN ''
+ WHEN @ignore NOT LIKE ' %' THEN CONCAT(' ',@ignore)
+ELSE @ignore
+END;
+CREATE TABLE t2 LIKE t1;
+ALTER TABLE t2 ADD id INT NOT NULL PRIMARY KEY FIRST;
+INSERT INTO t2 VALUES (1,DEFAULT,DEFAULT);
+SHOW CREATE TABLE t2;
+Table Create Table
+t2 CREATE TABLE `t2` (
+ `id` int(11) NOT NULL,
+ `target` inet4 DEFAULT '0.0.0.0',
+ `source` int(11) DEFAULT 0,
+ PRIMARY KEY (`id`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+CREATE TABLE t3 LIKE t2;
+INSERT INTO t3 VALUES
+(1,
+(SELECT source FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1));
+ERROR HY000: Cannot cast 'int' as 'inet4' in assignment of `test`.`t3`.`target`
+DROP TABLE t3;
+SET sql_mode='';
+CREATE TABLE t3 LIKE t2;
+ALTER TABLE t3 ENGINE=MyISAM;
+EXECUTE IMMEDIATE
+CONCAT('CREATE VIEW v3 AS SELECT id,',
+IF(@target_type='geometry','AsText(target)','target'), ' AS target,',
+IF(@source_type='geometry','AsText(source)','source'), ' AS source ',
+' FROM t3');
+INSERT INTO t3 VALUES
+(1,
+(SELECT target FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1)),
+(2,
+(SELECT source FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1));
+Warnings:
+Warning 1292 Incorrect inet4 value: '0' for column `test`.`t3`.`target` at row 2
+SELECT * FROM v3;
+id target source
+1 0.0.0.0 0
+2 0.0.0.0 0
+TRUNCATE TABLE t3;
+SET sql_mode=STRICT_ALL_TABLES;
+INSERT INTO t3 VALUES
+(1,
+(SELECT target FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1)),
+(2,
+(SELECT source FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1));
+ERROR 22007: Incorrect inet4 value: '0' for column `test`.`t3`.`target` at row 2
+SELECT * FROM v3;
+id target source
+1 0.0.0.0 0
+TRUNCATE TABLE t3;
+SET sql_mode=@sql_mode_save;
+DROP TABLE t3;
+DROP VIEW v3;
+CREATE TABLE t3 LIKE t2;
+INSERT INTO t3 SELECT id,source,source FROM t2;
+ERROR HY000: Cannot cast 'int' as 'inet4' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 (id,target,source) SELECT id,source,source FROM t2;
+ERROR HY000: Cannot cast 'int' as 'inet4' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
+ERROR HY000: Cannot cast 'int' as 'inet4' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 (id,target,source) VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
+ERROR HY000: Cannot cast 'int' as 'inet4' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
+ERROR HY000: Cannot cast 'int' as 'inet4' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 (id,target,source) SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
+ERROR HY000: Cannot cast 'int' as 'inet4' in assignment of `test`.`t3`.`target`
+UPDATE t3 SET target=source;
+ERROR HY000: Cannot cast 'int' as 'inet4' in assignment of `test`.`t3`.`target`
+UPDATE t2, t3 SET t3.target=t2.source WHERE t2.id=t3.id;
+ERROR HY000: Cannot cast 'int' as 'inet4' in assignment of `test`.`t3`.`target`
+SET @alter=CONCAT('ALTER', @ignore, ' TABLE t3 MODIFY target ', @source_type);
+SELECT @alter;
+@alter
+ALTER TABLE t3 MODIFY target int(11)
+EXECUTE IMMEDIATE @alter;
+ERROR HY000: Cannot cast 'inet4' as 'int' in assignment of `test`.`t3`.`target`
+DROP TABLE t3;
+DROP TABLE t2;
+CREATE PROCEDURE p1()
+BEGIN
+DECLARE src int(11) DEFAULT NULL;
+DECLARE dst inet4 DEFAULT NULL;
+SET dst=src;
+END;
+$$
+CALL p1;
+ERROR HY000: Cannot cast 'int' as 'inet4' in assignment of `dst`
+DROP PROCEDURE p1;
+CREATE FUNCTION f1(a inet4) RETURNS INT RETURN NULL;;
+SELECT f1((SELECT source FROM t1 ORDER BY source LIMIT 1));
+ERROR HY000: Cannot cast 'int' as 'inet4' in assignment of `a`
+DROP FUNCTION f1;
+CREATE PROCEDURE p1(a inet4) BEGIN END;;
+CALL p1((SELECT source FROM t1 ORDER BY source LIMIT 1));
+ERROR HY000: Cannot cast 'int' as 'inet4' in assignment of `a`
+DROP PROCEDURE p1;
+CREATE PROCEDURE p1(OUT dst inet4)
+BEGIN
+DECLARE src int(11) DEFAULT NULL;
+SET dst=src;
+END;
+$$
+CREATE PROCEDURE p2()
+BEGIN
+DECLARE dst inet4 DEFAULT NULL;
+CALL p1(dst);
+END;
+$$
+CALL p2();
+ERROR HY000: Cannot cast 'int' as 'inet4' in assignment of `dst`
+SHOW WARNINGS;
+Level Code Message
+Error 4078 Cannot cast 'int' as 'inet4' in assignment of `dst`
+Note 4094 At line 4 in test.p1
+Note 4094 At line 4 in test.p2
+DROP PROCEDURE p2;
+DROP PROCEDURE p1;
+CREATE FUNCTION f1() RETURNS inet4
+BEGIN
+DECLARE rc int(11) DEFAULT NULL;
+RETURN rc;
+END;
+$$
+SELECT f1();
+ERROR HY000: Cannot cast 'int' as 'inet4' in assignment of `f1()`
+DROP FUNCTION f1;
+CREATE PROCEDURE p1()
+BEGIN
+DECLARE src int(11) DEFAULT NULL;
+DECLARE cur1 CURSOR(t inet4) FOR SELECT * FROM t1 WHERE target=t;
+OPEN cur1(src);
+CLOSE cur1;
+END;
+$$
+CALL p1();
+ERROR HY000: Cannot cast 'int' as 'inet4' in assignment of `t`
+DROP PROCEDURE p1;
+CREATE TABLE t2 LIKE t1;
+INSERT INTO t2 VALUES ();
+CREATE PROCEDURE p1()
+BEGIN
+DECLARE dst inet4 DEFAULT NULL;
+DECLARE cur2 CURSOR FOR SELECT source FROM t2 ORDER BY source LIMIT 1;
+OPEN cur2;
+FETCH cur2 INTO dst;
+CLOSE cur2;
+END;
+$$
+CALL p1();
+ERROR HY000: Cannot cast 'int' as 'inet4' in assignment of `dst`
+DROP PROCEDURE p1;
+DROP TABLE t2;
+# End of type_store_assignment_incompatible.inc
+DROP TABLE t1;
+CREATE TABLE t1 (target INT DEFAULT 0, source INET4 DEFAULT '0.0.0.0');
+# Start of type_store_assignment_incompatible.inc
+SET @sql_mode_save= @@sql_mode;
+SET @source_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
+WHERE COLUMN_NAME='source'
+ AND TABLE_NAME='t1'
+ AND TABLE_SCHEMA='test');
+SET @target_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
+WHERE COLUMN_NAME='target'
+ AND TABLE_NAME='t1'
+ AND TABLE_SCHEMA='test');
+SET @ignore= CASE WHEN @ignore IS NULL OR @ignore = '' THEN ''
+ WHEN @ignore NOT LIKE ' %' THEN CONCAT(' ',@ignore)
+ELSE @ignore
+END;
+CREATE TABLE t2 LIKE t1;
+ALTER TABLE t2 ADD id INT NOT NULL PRIMARY KEY FIRST;
+INSERT INTO t2 VALUES (1,DEFAULT,DEFAULT);
+SHOW CREATE TABLE t2;
+Table Create Table
+t2 CREATE TABLE `t2` (
+ `id` int(11) NOT NULL,
+ `target` int(11) DEFAULT 0,
+ `source` inet4 DEFAULT '0.0.0.0',
+ PRIMARY KEY (`id`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+CREATE TABLE t3 LIKE t2;
+INSERT INTO t3 VALUES
+(1,
+(SELECT source FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1));
+ERROR HY000: Cannot cast 'inet4' as 'int' in assignment of `test`.`t3`.`target`
+DROP TABLE t3;
+SET sql_mode='';
+CREATE TABLE t3 LIKE t2;
+ALTER TABLE t3 ENGINE=MyISAM;
+EXECUTE IMMEDIATE
+CONCAT('CREATE VIEW v3 AS SELECT id,',
+IF(@target_type='geometry','AsText(target)','target'), ' AS target,',
+IF(@source_type='geometry','AsText(source)','source'), ' AS source ',
+' FROM t3');
+INSERT INTO t3 VALUES
+(1,
+(SELECT target FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1)),
+(2,
+(SELECT source FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1));
+Warnings:
+Warning 1265 Data truncated for column 'target' at row 2
+SELECT * FROM v3;
+id target source
+1 0 0.0.0.0
+2 0 0.0.0.0
+TRUNCATE TABLE t3;
+SET sql_mode=STRICT_ALL_TABLES;
+INSERT INTO t3 VALUES
+(1,
+(SELECT target FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1)),
+(2,
+(SELECT source FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1));
+ERROR 01000: Data truncated for column 'target' at row 2
+SELECT * FROM v3;
+id target source
+1 0 0.0.0.0
+TRUNCATE TABLE t3;
+SET sql_mode=@sql_mode_save;
+DROP TABLE t3;
+DROP VIEW v3;
+CREATE TABLE t3 LIKE t2;
+INSERT INTO t3 SELECT id,source,source FROM t2;
+ERROR HY000: Cannot cast 'inet4' as 'int' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 (id,target,source) SELECT id,source,source FROM t2;
+ERROR HY000: Cannot cast 'inet4' as 'int' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
+ERROR HY000: Cannot cast 'inet4' as 'int' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 (id,target,source) VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
+ERROR HY000: Cannot cast 'inet4' as 'int' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
+ERROR HY000: Cannot cast 'inet4' as 'int' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 (id,target,source) SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
+ERROR HY000: Cannot cast 'inet4' as 'int' in assignment of `test`.`t3`.`target`
+UPDATE t3 SET target=source;
+ERROR HY000: Cannot cast 'inet4' as 'int' in assignment of `test`.`t3`.`target`
+UPDATE t2, t3 SET t3.target=t2.source WHERE t2.id=t3.id;
+ERROR HY000: Cannot cast 'inet4' as 'int' in assignment of `test`.`t3`.`target`
+SET @alter=CONCAT('ALTER', @ignore, ' TABLE t3 MODIFY target ', @source_type);
+SELECT @alter;
+@alter
+ALTER TABLE t3 MODIFY target inet4
+EXECUTE IMMEDIATE @alter;
+ERROR HY000: Cannot cast 'int' as 'inet4' in assignment of `test`.`t3`.`target`
+DROP TABLE t3;
+DROP TABLE t2;
+CREATE PROCEDURE p1()
+BEGIN
+DECLARE src inet4 DEFAULT NULL;
+DECLARE dst int(11) DEFAULT NULL;
+SET dst=src;
+END;
+$$
+CALL p1;
+ERROR HY000: Cannot cast 'inet4' as 'int' in assignment of `dst`
+DROP PROCEDURE p1;
+CREATE FUNCTION f1(a int(11)) RETURNS INT RETURN NULL;;
+SELECT f1((SELECT source FROM t1 ORDER BY source LIMIT 1));
+ERROR HY000: Cannot cast 'inet4' as 'int' in assignment of `a`
+DROP FUNCTION f1;
+CREATE PROCEDURE p1(a int(11)) BEGIN END;;
+CALL p1((SELECT source FROM t1 ORDER BY source LIMIT 1));
+ERROR HY000: Cannot cast 'inet4' as 'int' in assignment of `a`
+DROP PROCEDURE p1;
+CREATE PROCEDURE p1(OUT dst int(11))
+BEGIN
+DECLARE src inet4 DEFAULT NULL;
+SET dst=src;
+END;
+$$
+CREATE PROCEDURE p2()
+BEGIN
+DECLARE dst int(11) DEFAULT NULL;
+CALL p1(dst);
+END;
+$$
+CALL p2();
+ERROR HY000: Cannot cast 'inet4' as 'int' in assignment of `dst`
+SHOW WARNINGS;
+Level Code Message
+Error 4078 Cannot cast 'inet4' as 'int' in assignment of `dst`
+Note 4094 At line 4 in test.p1
+Note 4094 At line 4 in test.p2
+DROP PROCEDURE p2;
+DROP PROCEDURE p1;
+CREATE FUNCTION f1() RETURNS int(11)
+BEGIN
+DECLARE rc inet4 DEFAULT NULL;
+RETURN rc;
+END;
+$$
+SELECT f1();
+ERROR HY000: Cannot cast 'inet4' as 'int' in assignment of `f1()`
+DROP FUNCTION f1;
+CREATE PROCEDURE p1()
+BEGIN
+DECLARE src inet4 DEFAULT NULL;
+DECLARE cur1 CURSOR(t int(11)) FOR SELECT * FROM t1 WHERE target=t;
+OPEN cur1(src);
+CLOSE cur1;
+END;
+$$
+CALL p1();
+ERROR HY000: Cannot cast 'inet4' as 'int' in assignment of `t`
+DROP PROCEDURE p1;
+CREATE TABLE t2 LIKE t1;
+INSERT INTO t2 VALUES ();
+CREATE PROCEDURE p1()
+BEGIN
+DECLARE dst int(11) DEFAULT NULL;
+DECLARE cur2 CURSOR FOR SELECT source FROM t2 ORDER BY source LIMIT 1;
+OPEN cur2;
+FETCH cur2 INTO dst;
+CLOSE cur2;
+END;
+$$
+CALL p1();
+ERROR HY000: Cannot cast 'inet4' as 'int' in assignment of `dst`
+DROP PROCEDURE p1;
+DROP TABLE t2;
+# End of type_store_assignment_incompatible.inc
+DROP TABLE t1;
+#
+# End of 10.10 tests
+#
diff --git a/plugin/type_inet/mysql-test/type_inet/type_inet4_mix_int.test b/plugin/type_inet/mysql-test/type_inet/type_inet4_mix_int.test
new file mode 100644
index 00000000000..fb65eb70b31
--- /dev/null
+++ b/plugin/type_inet/mysql-test/type_inet/type_inet4_mix_int.test
@@ -0,0 +1,19 @@
+--echo #
+--echo # Start of 10.10 tests
+--echo #
+
+--echo #
+--echo # MDEV-23287 The INET4 data type
+--echo #
+
+CREATE TABLE t1 (target INET4 DEFAULT '0.0.0.0', source INT DEFAULT 0);
+--source include/type_mix_incompatible.inc
+DROP TABLE t1;
+
+CREATE TABLE t1 (target INT DEFAULT 0, source INET4 DEFAULT '0.0.0.0');
+--source include/type_mix_incompatible.inc
+DROP TABLE t1;
+
+--echo #
+--echo # End of 10.10 tests
+--echo #
diff --git a/plugin/type_inet/mysql-test/type_inet/type_inet4_mix_time.result b/plugin/type_inet/mysql-test/type_inet/type_inet4_mix_time.result
new file mode 100644
index 00000000000..09aae4f0bd2
--- /dev/null
+++ b/plugin/type_inet/mysql-test/type_inet/type_inet4_mix_time.result
@@ -0,0 +1,353 @@
+#
+# Start of 10.10 tests
+#
+#
+# MDEV-23287 The INET4 data type
+#
+CREATE TABLE t1 (target INET4 DEFAULT '99.99.99.99', source TIME DEFAULT '10:20:30');
+# Start of type_store_assignment_incompatible.inc
+SET @sql_mode_save= @@sql_mode;
+SET @source_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
+WHERE COLUMN_NAME='source'
+ AND TABLE_NAME='t1'
+ AND TABLE_SCHEMA='test');
+SET @target_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
+WHERE COLUMN_NAME='target'
+ AND TABLE_NAME='t1'
+ AND TABLE_SCHEMA='test');
+SET @ignore= CASE WHEN @ignore IS NULL OR @ignore = '' THEN ''
+ WHEN @ignore NOT LIKE ' %' THEN CONCAT(' ',@ignore)
+ELSE @ignore
+END;
+CREATE TABLE t2 LIKE t1;
+ALTER TABLE t2 ADD id INT NOT NULL PRIMARY KEY FIRST;
+INSERT INTO t2 VALUES (1,DEFAULT,DEFAULT);
+SHOW CREATE TABLE t2;
+Table Create Table
+t2 CREATE TABLE `t2` (
+ `id` int(11) NOT NULL,
+ `target` inet4 DEFAULT '99.99.99.99',
+ `source` time DEFAULT '10:20:30',
+ PRIMARY KEY (`id`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+CREATE TABLE t3 LIKE t2;
+INSERT INTO t3 VALUES
+(1,
+(SELECT source FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1));
+ERROR HY000: Cannot cast 'time' as 'inet4' in assignment of `test`.`t3`.`target`
+DROP TABLE t3;
+SET sql_mode='';
+CREATE TABLE t3 LIKE t2;
+ALTER TABLE t3 ENGINE=MyISAM;
+EXECUTE IMMEDIATE
+CONCAT('CREATE VIEW v3 AS SELECT id,',
+IF(@target_type='geometry','AsText(target)','target'), ' AS target,',
+IF(@source_type='geometry','AsText(source)','source'), ' AS source ',
+' FROM t3');
+INSERT INTO t3 VALUES
+(1,
+(SELECT target FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1)),
+(2,
+(SELECT source FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1));
+Warnings:
+Warning 1292 Incorrect inet4 value: '10:20:30' for column `test`.`t3`.`target` at row 2
+SELECT * FROM v3;
+id target source
+1 99.99.99.99 10:20:30
+2 0.0.0.0 10:20:30
+TRUNCATE TABLE t3;
+SET sql_mode=STRICT_ALL_TABLES;
+INSERT INTO t3 VALUES
+(1,
+(SELECT target FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1)),
+(2,
+(SELECT source FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1));
+ERROR 22007: Incorrect inet4 value: '10:20:30' for column `test`.`t3`.`target` at row 2
+SELECT * FROM v3;
+id target source
+1 99.99.99.99 10:20:30
+TRUNCATE TABLE t3;
+SET sql_mode=@sql_mode_save;
+DROP TABLE t3;
+DROP VIEW v3;
+CREATE TABLE t3 LIKE t2;
+INSERT INTO t3 SELECT id,source,source FROM t2;
+ERROR HY000: Cannot cast 'time' as 'inet4' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 (id,target,source) SELECT id,source,source FROM t2;
+ERROR HY000: Cannot cast 'time' as 'inet4' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
+ERROR HY000: Cannot cast 'time' as 'inet4' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 (id,target,source) VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
+ERROR HY000: Cannot cast 'time' as 'inet4' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
+ERROR HY000: Cannot cast 'time' as 'inet4' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 (id,target,source) SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
+ERROR HY000: Cannot cast 'time' as 'inet4' in assignment of `test`.`t3`.`target`
+UPDATE t3 SET target=source;
+ERROR HY000: Cannot cast 'time' as 'inet4' in assignment of `test`.`t3`.`target`
+UPDATE t2, t3 SET t3.target=t2.source WHERE t2.id=t3.id;
+ERROR HY000: Cannot cast 'time' as 'inet4' in assignment of `test`.`t3`.`target`
+SET @alter=CONCAT('ALTER', @ignore, ' TABLE t3 MODIFY target ', @source_type);
+SELECT @alter;
+@alter
+ALTER TABLE t3 MODIFY target time
+EXECUTE IMMEDIATE @alter;
+ERROR HY000: Cannot cast 'inet4' as 'time' in assignment of `test`.`t3`.`target`
+DROP TABLE t3;
+DROP TABLE t2;
+CREATE PROCEDURE p1()
+BEGIN
+DECLARE src time DEFAULT NULL;
+DECLARE dst inet4 DEFAULT NULL;
+SET dst=src;
+END;
+$$
+CALL p1;
+ERROR HY000: Cannot cast 'time' as 'inet4' in assignment of `dst`
+DROP PROCEDURE p1;
+CREATE FUNCTION f1(a inet4) RETURNS INT RETURN NULL;;
+SELECT f1((SELECT source FROM t1 ORDER BY source LIMIT 1));
+ERROR HY000: Cannot cast 'time' as 'inet4' in assignment of `a`
+DROP FUNCTION f1;
+CREATE PROCEDURE p1(a inet4) BEGIN END;;
+CALL p1((SELECT source FROM t1 ORDER BY source LIMIT 1));
+ERROR HY000: Cannot cast 'time' as 'inet4' in assignment of `a`
+DROP PROCEDURE p1;
+CREATE PROCEDURE p1(OUT dst inet4)
+BEGIN
+DECLARE src time DEFAULT NULL;
+SET dst=src;
+END;
+$$
+CREATE PROCEDURE p2()
+BEGIN
+DECLARE dst inet4 DEFAULT NULL;
+CALL p1(dst);
+END;
+$$
+CALL p2();
+ERROR HY000: Cannot cast 'time' as 'inet4' in assignment of `dst`
+SHOW WARNINGS;
+Level Code Message
+Error 4078 Cannot cast 'time' as 'inet4' in assignment of `dst`
+Note 4094 At line 4 in test.p1
+Note 4094 At line 4 in test.p2
+DROP PROCEDURE p2;
+DROP PROCEDURE p1;
+CREATE FUNCTION f1() RETURNS inet4
+BEGIN
+DECLARE rc time DEFAULT NULL;
+RETURN rc;
+END;
+$$
+SELECT f1();
+ERROR HY000: Cannot cast 'time' as 'inet4' in assignment of `f1()`
+DROP FUNCTION f1;
+CREATE PROCEDURE p1()
+BEGIN
+DECLARE src time DEFAULT NULL;
+DECLARE cur1 CURSOR(t inet4) FOR SELECT * FROM t1 WHERE target=t;
+OPEN cur1(src);
+CLOSE cur1;
+END;
+$$
+CALL p1();
+ERROR HY000: Cannot cast 'time' as 'inet4' in assignment of `t`
+DROP PROCEDURE p1;
+CREATE TABLE t2 LIKE t1;
+INSERT INTO t2 VALUES ();
+CREATE PROCEDURE p1()
+BEGIN
+DECLARE dst inet4 DEFAULT NULL;
+DECLARE cur2 CURSOR FOR SELECT source FROM t2 ORDER BY source LIMIT 1;
+OPEN cur2;
+FETCH cur2 INTO dst;
+CLOSE cur2;
+END;
+$$
+CALL p1();
+ERROR HY000: Cannot cast 'time' as 'inet4' in assignment of `dst`
+DROP PROCEDURE p1;
+DROP TABLE t2;
+# End of type_store_assignment_incompatible.inc
+DROP TABLE t1;
+CREATE TABLE t1 (target TIME DEFAULT '10:20:30', source INET4 DEFAULT '99.99.99.99');
+# Start of type_store_assignment_incompatible.inc
+SET @sql_mode_save= @@sql_mode;
+SET @source_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
+WHERE COLUMN_NAME='source'
+ AND TABLE_NAME='t1'
+ AND TABLE_SCHEMA='test');
+SET @target_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
+WHERE COLUMN_NAME='target'
+ AND TABLE_NAME='t1'
+ AND TABLE_SCHEMA='test');
+SET @ignore= CASE WHEN @ignore IS NULL OR @ignore = '' THEN ''
+ WHEN @ignore NOT LIKE ' %' THEN CONCAT(' ',@ignore)
+ELSE @ignore
+END;
+CREATE TABLE t2 LIKE t1;
+ALTER TABLE t2 ADD id INT NOT NULL PRIMARY KEY FIRST;
+INSERT INTO t2 VALUES (1,DEFAULT,DEFAULT);
+SHOW CREATE TABLE t2;
+Table Create Table
+t2 CREATE TABLE `t2` (
+ `id` int(11) NOT NULL,
+ `target` time DEFAULT '10:20:30',
+ `source` inet4 DEFAULT '99.99.99.99',
+ PRIMARY KEY (`id`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+CREATE TABLE t3 LIKE t2;
+INSERT INTO t3 VALUES
+(1,
+(SELECT source FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1));
+ERROR HY000: Cannot cast 'inet4' as 'time' in assignment of `test`.`t3`.`target`
+DROP TABLE t3;
+SET sql_mode='';
+CREATE TABLE t3 LIKE t2;
+ALTER TABLE t3 ENGINE=MyISAM;
+EXECUTE IMMEDIATE
+CONCAT('CREATE VIEW v3 AS SELECT id,',
+IF(@target_type='geometry','AsText(target)','target'), ' AS target,',
+IF(@source_type='geometry','AsText(source)','source'), ' AS source ',
+' FROM t3');
+INSERT INTO t3 VALUES
+(1,
+(SELECT target FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1)),
+(2,
+(SELECT source FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1));
+Warnings:
+Warning 1265 Data truncated for column 'target' at row 2
+SELECT * FROM v3;
+id target source
+1 10:20:30 99.99.99.99
+2 00:00:00 99.99.99.99
+TRUNCATE TABLE t3;
+SET sql_mode=STRICT_ALL_TABLES;
+INSERT INTO t3 VALUES
+(1,
+(SELECT target FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1)),
+(2,
+(SELECT source FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1));
+ERROR 22007: Incorrect time value: '99.99.99.99' for column `test`.`t3`.`target` at row 2
+SELECT * FROM v3;
+id target source
+1 10:20:30 99.99.99.99
+TRUNCATE TABLE t3;
+SET sql_mode=@sql_mode_save;
+DROP TABLE t3;
+DROP VIEW v3;
+CREATE TABLE t3 LIKE t2;
+INSERT INTO t3 SELECT id,source,source FROM t2;
+ERROR HY000: Cannot cast 'inet4' as 'time' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 (id,target,source) SELECT id,source,source FROM t2;
+ERROR HY000: Cannot cast 'inet4' as 'time' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
+ERROR HY000: Cannot cast 'inet4' as 'time' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 (id,target,source) VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
+ERROR HY000: Cannot cast 'inet4' as 'time' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
+ERROR HY000: Cannot cast 'inet4' as 'time' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 (id,target,source) SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
+ERROR HY000: Cannot cast 'inet4' as 'time' in assignment of `test`.`t3`.`target`
+UPDATE t3 SET target=source;
+ERROR HY000: Cannot cast 'inet4' as 'time' in assignment of `test`.`t3`.`target`
+UPDATE t2, t3 SET t3.target=t2.source WHERE t2.id=t3.id;
+ERROR HY000: Cannot cast 'inet4' as 'time' in assignment of `test`.`t3`.`target`
+SET @alter=CONCAT('ALTER', @ignore, ' TABLE t3 MODIFY target ', @source_type);
+SELECT @alter;
+@alter
+ALTER TABLE t3 MODIFY target inet4
+EXECUTE IMMEDIATE @alter;
+ERROR HY000: Cannot cast 'time' as 'inet4' in assignment of `test`.`t3`.`target`
+DROP TABLE t3;
+DROP TABLE t2;
+CREATE PROCEDURE p1()
+BEGIN
+DECLARE src inet4 DEFAULT NULL;
+DECLARE dst time DEFAULT NULL;
+SET dst=src;
+END;
+$$
+CALL p1;
+ERROR HY000: Cannot cast 'inet4' as 'time' in assignment of `dst`
+DROP PROCEDURE p1;
+CREATE FUNCTION f1(a time) RETURNS INT RETURN NULL;;
+SELECT f1((SELECT source FROM t1 ORDER BY source LIMIT 1));
+ERROR HY000: Cannot cast 'inet4' as 'time' in assignment of `a`
+DROP FUNCTION f1;
+CREATE PROCEDURE p1(a time) BEGIN END;;
+CALL p1((SELECT source FROM t1 ORDER BY source LIMIT 1));
+ERROR HY000: Cannot cast 'inet4' as 'time' in assignment of `a`
+DROP PROCEDURE p1;
+CREATE PROCEDURE p1(OUT dst time)
+BEGIN
+DECLARE src inet4 DEFAULT NULL;
+SET dst=src;
+END;
+$$
+CREATE PROCEDURE p2()
+BEGIN
+DECLARE dst time DEFAULT NULL;
+CALL p1(dst);
+END;
+$$
+CALL p2();
+ERROR HY000: Cannot cast 'inet4' as 'time' in assignment of `dst`
+SHOW WARNINGS;
+Level Code Message
+Error 4078 Cannot cast 'inet4' as 'time' in assignment of `dst`
+Note 4094 At line 4 in test.p1
+Note 4094 At line 4 in test.p2
+DROP PROCEDURE p2;
+DROP PROCEDURE p1;
+CREATE FUNCTION f1() RETURNS time
+BEGIN
+DECLARE rc inet4 DEFAULT NULL;
+RETURN rc;
+END;
+$$
+SELECT f1();
+ERROR HY000: Cannot cast 'inet4' as 'time' in assignment of `f1()`
+DROP FUNCTION f1;
+CREATE PROCEDURE p1()
+BEGIN
+DECLARE src inet4 DEFAULT NULL;
+DECLARE cur1 CURSOR(t time) FOR SELECT * FROM t1 WHERE target=t;
+OPEN cur1(src);
+CLOSE cur1;
+END;
+$$
+CALL p1();
+ERROR HY000: Cannot cast 'inet4' as 'time' in assignment of `t`
+DROP PROCEDURE p1;
+CREATE TABLE t2 LIKE t1;
+INSERT INTO t2 VALUES ();
+CREATE PROCEDURE p1()
+BEGIN
+DECLARE dst time DEFAULT NULL;
+DECLARE cur2 CURSOR FOR SELECT source FROM t2 ORDER BY source LIMIT 1;
+OPEN cur2;
+FETCH cur2 INTO dst;
+CLOSE cur2;
+END;
+$$
+CALL p1();
+ERROR HY000: Cannot cast 'inet4' as 'time' in assignment of `dst`
+DROP PROCEDURE p1;
+DROP TABLE t2;
+# End of type_store_assignment_incompatible.inc
+DROP TABLE t1;
+#
+# End of 10.10 tests
+#
diff --git a/plugin/type_inet/mysql-test/type_inet/type_inet4_mix_time.test b/plugin/type_inet/mysql-test/type_inet/type_inet4_mix_time.test
new file mode 100644
index 00000000000..ae617550ec4
--- /dev/null
+++ b/plugin/type_inet/mysql-test/type_inet/type_inet4_mix_time.test
@@ -0,0 +1,26 @@
+--echo #
+--echo # Start of 10.10 tests
+--echo #
+
+--echo #
+--echo # MDEV-23287 The INET4 data type
+--echo #
+
+#
+# The DATE data type has loose control on the incoming data,
+# so values like '0.0.0.0' do not fail when get inserted to a DATE field
+# even though there is an obvious redundant part - the fourth number.
+# Using '99.99.99.99' to make sure the month part is out of the range
+# to guarantee the failure.
+
+CREATE TABLE t1 (target INET4 DEFAULT '99.99.99.99', source TIME DEFAULT '10:20:30');
+--source include/type_mix_incompatible.inc
+DROP TABLE t1;
+
+CREATE TABLE t1 (target TIME DEFAULT '10:20:30', source INET4 DEFAULT '99.99.99.99');
+--source include/type_mix_incompatible.inc
+DROP TABLE t1;
+
+--echo #
+--echo # End of 10.10 tests
+--echo #
diff --git a/plugin/type_inet/mysql-test/type_inet/type_inet4_mix_timestamp.result b/plugin/type_inet/mysql-test/type_inet/type_inet4_mix_timestamp.result
new file mode 100644
index 00000000000..56d2ced2c3f
--- /dev/null
+++ b/plugin/type_inet/mysql-test/type_inet/type_inet4_mix_timestamp.result
@@ -0,0 +1,353 @@
+#
+# Start of 10.10 tests
+#
+#
+# MDEV-23287 The INET4 data type
+#
+CREATE TABLE t1 (target INET4 DEFAULT '99.99.99.99', source TIMESTAMP DEFAULT '2001-01-01 10:20:30');
+# Start of type_store_assignment_incompatible.inc
+SET @sql_mode_save= @@sql_mode;
+SET @source_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
+WHERE COLUMN_NAME='source'
+ AND TABLE_NAME='t1'
+ AND TABLE_SCHEMA='test');
+SET @target_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
+WHERE COLUMN_NAME='target'
+ AND TABLE_NAME='t1'
+ AND TABLE_SCHEMA='test');
+SET @ignore= CASE WHEN @ignore IS NULL OR @ignore = '' THEN ''
+ WHEN @ignore NOT LIKE ' %' THEN CONCAT(' ',@ignore)
+ELSE @ignore
+END;
+CREATE TABLE t2 LIKE t1;
+ALTER TABLE t2 ADD id INT NOT NULL PRIMARY KEY FIRST;
+INSERT INTO t2 VALUES (1,DEFAULT,DEFAULT);
+SHOW CREATE TABLE t2;
+Table Create Table
+t2 CREATE TABLE `t2` (
+ `id` int(11) NOT NULL,
+ `target` inet4 DEFAULT '99.99.99.99',
+ `source` timestamp NULL DEFAULT '2001-01-01 10:20:30',
+ PRIMARY KEY (`id`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+CREATE TABLE t3 LIKE t2;
+INSERT INTO t3 VALUES
+(1,
+(SELECT source FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1));
+ERROR HY000: Cannot cast 'timestamp' as 'inet4' in assignment of `test`.`t3`.`target`
+DROP TABLE t3;
+SET sql_mode='';
+CREATE TABLE t3 LIKE t2;
+ALTER TABLE t3 ENGINE=MyISAM;
+EXECUTE IMMEDIATE
+CONCAT('CREATE VIEW v3 AS SELECT id,',
+IF(@target_type='geometry','AsText(target)','target'), ' AS target,',
+IF(@source_type='geometry','AsText(source)','source'), ' AS source ',
+' FROM t3');
+INSERT INTO t3 VALUES
+(1,
+(SELECT target FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1)),
+(2,
+(SELECT source FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1));
+Warnings:
+Warning 1292 Incorrect inet4 value: '2001-01-01 10:20:30' for column `test`.`t3`.`target` at row 2
+SELECT * FROM v3;
+id target source
+1 99.99.99.99 2001-01-01 10:20:30
+2 0.0.0.0 2001-01-01 10:20:30
+TRUNCATE TABLE t3;
+SET sql_mode=STRICT_ALL_TABLES;
+INSERT INTO t3 VALUES
+(1,
+(SELECT target FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1)),
+(2,
+(SELECT source FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1));
+ERROR 22007: Incorrect inet4 value: '2001-01-01 10:20:30' for column `test`.`t3`.`target` at row 2
+SELECT * FROM v3;
+id target source
+1 99.99.99.99 2001-01-01 10:20:30
+TRUNCATE TABLE t3;
+SET sql_mode=@sql_mode_save;
+DROP TABLE t3;
+DROP VIEW v3;
+CREATE TABLE t3 LIKE t2;
+INSERT INTO t3 SELECT id,source,source FROM t2;
+ERROR HY000: Cannot cast 'timestamp' as 'inet4' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 (id,target,source) SELECT id,source,source FROM t2;
+ERROR HY000: Cannot cast 'timestamp' as 'inet4' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
+ERROR HY000: Cannot cast 'timestamp' as 'inet4' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 (id,target,source) VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
+ERROR HY000: Cannot cast 'timestamp' as 'inet4' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
+ERROR HY000: Cannot cast 'timestamp' as 'inet4' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 (id,target,source) SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
+ERROR HY000: Cannot cast 'timestamp' as 'inet4' in assignment of `test`.`t3`.`target`
+UPDATE t3 SET target=source;
+ERROR HY000: Cannot cast 'timestamp' as 'inet4' in assignment of `test`.`t3`.`target`
+UPDATE t2, t3 SET t3.target=t2.source WHERE t2.id=t3.id;
+ERROR HY000: Cannot cast 'timestamp' as 'inet4' in assignment of `test`.`t3`.`target`
+SET @alter=CONCAT('ALTER', @ignore, ' TABLE t3 MODIFY target ', @source_type);
+SELECT @alter;
+@alter
+ALTER TABLE t3 MODIFY target timestamp
+EXECUTE IMMEDIATE @alter;
+ERROR HY000: Cannot cast 'inet4' as 'timestamp' in assignment of `test`.`t3`.`target`
+DROP TABLE t3;
+DROP TABLE t2;
+CREATE PROCEDURE p1()
+BEGIN
+DECLARE src timestamp DEFAULT NULL;
+DECLARE dst inet4 DEFAULT NULL;
+SET dst=src;
+END;
+$$
+CALL p1;
+ERROR HY000: Cannot cast 'timestamp' as 'inet4' in assignment of `dst`
+DROP PROCEDURE p1;
+CREATE FUNCTION f1(a inet4) RETURNS INT RETURN NULL;;
+SELECT f1((SELECT source FROM t1 ORDER BY source LIMIT 1));
+ERROR HY000: Cannot cast 'timestamp' as 'inet4' in assignment of `a`
+DROP FUNCTION f1;
+CREATE PROCEDURE p1(a inet4) BEGIN END;;
+CALL p1((SELECT source FROM t1 ORDER BY source LIMIT 1));
+ERROR HY000: Cannot cast 'timestamp' as 'inet4' in assignment of `a`
+DROP PROCEDURE p1;
+CREATE PROCEDURE p1(OUT dst inet4)
+BEGIN
+DECLARE src timestamp DEFAULT NULL;
+SET dst=src;
+END;
+$$
+CREATE PROCEDURE p2()
+BEGIN
+DECLARE dst inet4 DEFAULT NULL;
+CALL p1(dst);
+END;
+$$
+CALL p2();
+ERROR HY000: Cannot cast 'timestamp' as 'inet4' in assignment of `dst`
+SHOW WARNINGS;
+Level Code Message
+Error 4078 Cannot cast 'timestamp' as 'inet4' in assignment of `dst`
+Note 4094 At line 4 in test.p1
+Note 4094 At line 4 in test.p2
+DROP PROCEDURE p2;
+DROP PROCEDURE p1;
+CREATE FUNCTION f1() RETURNS inet4
+BEGIN
+DECLARE rc timestamp DEFAULT NULL;
+RETURN rc;
+END;
+$$
+SELECT f1();
+ERROR HY000: Cannot cast 'timestamp' as 'inet4' in assignment of `f1()`
+DROP FUNCTION f1;
+CREATE PROCEDURE p1()
+BEGIN
+DECLARE src timestamp DEFAULT NULL;
+DECLARE cur1 CURSOR(t inet4) FOR SELECT * FROM t1 WHERE target=t;
+OPEN cur1(src);
+CLOSE cur1;
+END;
+$$
+CALL p1();
+ERROR HY000: Cannot cast 'timestamp' as 'inet4' in assignment of `t`
+DROP PROCEDURE p1;
+CREATE TABLE t2 LIKE t1;
+INSERT INTO t2 VALUES ();
+CREATE PROCEDURE p1()
+BEGIN
+DECLARE dst inet4 DEFAULT NULL;
+DECLARE cur2 CURSOR FOR SELECT source FROM t2 ORDER BY source LIMIT 1;
+OPEN cur2;
+FETCH cur2 INTO dst;
+CLOSE cur2;
+END;
+$$
+CALL p1();
+ERROR HY000: Cannot cast 'timestamp' as 'inet4' in assignment of `dst`
+DROP PROCEDURE p1;
+DROP TABLE t2;
+# End of type_store_assignment_incompatible.inc
+DROP TABLE t1;
+CREATE TABLE t1 (target TIMESTAMP DEFAULT '2001-01-01 10:20:30', source INET4 DEFAULT '99.99.99.99');
+# Start of type_store_assignment_incompatible.inc
+SET @sql_mode_save= @@sql_mode;
+SET @source_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
+WHERE COLUMN_NAME='source'
+ AND TABLE_NAME='t1'
+ AND TABLE_SCHEMA='test');
+SET @target_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
+WHERE COLUMN_NAME='target'
+ AND TABLE_NAME='t1'
+ AND TABLE_SCHEMA='test');
+SET @ignore= CASE WHEN @ignore IS NULL OR @ignore = '' THEN ''
+ WHEN @ignore NOT LIKE ' %' THEN CONCAT(' ',@ignore)
+ELSE @ignore
+END;
+CREATE TABLE t2 LIKE t1;
+ALTER TABLE t2 ADD id INT NOT NULL PRIMARY KEY FIRST;
+INSERT INTO t2 VALUES (1,DEFAULT,DEFAULT);
+SHOW CREATE TABLE t2;
+Table Create Table
+t2 CREATE TABLE `t2` (
+ `id` int(11) NOT NULL,
+ `target` timestamp NULL DEFAULT '2001-01-01 10:20:30',
+ `source` inet4 DEFAULT '99.99.99.99',
+ PRIMARY KEY (`id`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+CREATE TABLE t3 LIKE t2;
+INSERT INTO t3 VALUES
+(1,
+(SELECT source FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1));
+ERROR HY000: Cannot cast 'inet4' as 'timestamp' in assignment of `test`.`t3`.`target`
+DROP TABLE t3;
+SET sql_mode='';
+CREATE TABLE t3 LIKE t2;
+ALTER TABLE t3 ENGINE=MyISAM;
+EXECUTE IMMEDIATE
+CONCAT('CREATE VIEW v3 AS SELECT id,',
+IF(@target_type='geometry','AsText(target)','target'), ' AS target,',
+IF(@source_type='geometry','AsText(source)','source'), ' AS source ',
+' FROM t3');
+INSERT INTO t3 VALUES
+(1,
+(SELECT target FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1)),
+(2,
+(SELECT source FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1));
+Warnings:
+Warning 1265 Data truncated for column 'target' at row 2
+SELECT * FROM v3;
+id target source
+1 2001-01-01 10:20:30 99.99.99.99
+2 0000-00-00 00:00:00 99.99.99.99
+TRUNCATE TABLE t3;
+SET sql_mode=STRICT_ALL_TABLES;
+INSERT INTO t3 VALUES
+(1,
+(SELECT target FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1)),
+(2,
+(SELECT source FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1));
+ERROR 22007: Incorrect datetime value: '99.99.99.99' for column `test`.`t3`.`target` at row 2
+SELECT * FROM v3;
+id target source
+1 2001-01-01 10:20:30 99.99.99.99
+TRUNCATE TABLE t3;
+SET sql_mode=@sql_mode_save;
+DROP TABLE t3;
+DROP VIEW v3;
+CREATE TABLE t3 LIKE t2;
+INSERT INTO t3 SELECT id,source,source FROM t2;
+ERROR HY000: Cannot cast 'inet4' as 'timestamp' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 (id,target,source) SELECT id,source,source FROM t2;
+ERROR HY000: Cannot cast 'inet4' as 'timestamp' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
+ERROR HY000: Cannot cast 'inet4' as 'timestamp' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 (id,target,source) VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
+ERROR HY000: Cannot cast 'inet4' as 'timestamp' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
+ERROR HY000: Cannot cast 'inet4' as 'timestamp' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 (id,target,source) SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
+ERROR HY000: Cannot cast 'inet4' as 'timestamp' in assignment of `test`.`t3`.`target`
+UPDATE t3 SET target=source;
+ERROR HY000: Cannot cast 'inet4' as 'timestamp' in assignment of `test`.`t3`.`target`
+UPDATE t2, t3 SET t3.target=t2.source WHERE t2.id=t3.id;
+ERROR HY000: Cannot cast 'inet4' as 'timestamp' in assignment of `test`.`t3`.`target`
+SET @alter=CONCAT('ALTER', @ignore, ' TABLE t3 MODIFY target ', @source_type);
+SELECT @alter;
+@alter
+ALTER TABLE t3 MODIFY target inet4
+EXECUTE IMMEDIATE @alter;
+ERROR HY000: Cannot cast 'timestamp' as 'inet4' in assignment of `test`.`t3`.`target`
+DROP TABLE t3;
+DROP TABLE t2;
+CREATE PROCEDURE p1()
+BEGIN
+DECLARE src inet4 DEFAULT NULL;
+DECLARE dst timestamp DEFAULT NULL;
+SET dst=src;
+END;
+$$
+CALL p1;
+ERROR HY000: Cannot cast 'inet4' as 'timestamp' in assignment of `dst`
+DROP PROCEDURE p1;
+CREATE FUNCTION f1(a timestamp) RETURNS INT RETURN NULL;;
+SELECT f1((SELECT source FROM t1 ORDER BY source LIMIT 1));
+ERROR HY000: Cannot cast 'inet4' as 'timestamp' in assignment of `a`
+DROP FUNCTION f1;
+CREATE PROCEDURE p1(a timestamp) BEGIN END;;
+CALL p1((SELECT source FROM t1 ORDER BY source LIMIT 1));
+ERROR HY000: Cannot cast 'inet4' as 'timestamp' in assignment of `a`
+DROP PROCEDURE p1;
+CREATE PROCEDURE p1(OUT dst timestamp)
+BEGIN
+DECLARE src inet4 DEFAULT NULL;
+SET dst=src;
+END;
+$$
+CREATE PROCEDURE p2()
+BEGIN
+DECLARE dst timestamp DEFAULT NULL;
+CALL p1(dst);
+END;
+$$
+CALL p2();
+ERROR HY000: Cannot cast 'inet4' as 'timestamp' in assignment of `dst`
+SHOW WARNINGS;
+Level Code Message
+Error 4078 Cannot cast 'inet4' as 'timestamp' in assignment of `dst`
+Note 4094 At line 4 in test.p1
+Note 4094 At line 4 in test.p2
+DROP PROCEDURE p2;
+DROP PROCEDURE p1;
+CREATE FUNCTION f1() RETURNS timestamp
+BEGIN
+DECLARE rc inet4 DEFAULT NULL;
+RETURN rc;
+END;
+$$
+SELECT f1();
+ERROR HY000: Cannot cast 'inet4' as 'timestamp' in assignment of `f1()`
+DROP FUNCTION f1;
+CREATE PROCEDURE p1()
+BEGIN
+DECLARE src inet4 DEFAULT NULL;
+DECLARE cur1 CURSOR(t timestamp) FOR SELECT * FROM t1 WHERE target=t;
+OPEN cur1(src);
+CLOSE cur1;
+END;
+$$
+CALL p1();
+ERROR HY000: Cannot cast 'inet4' as 'timestamp' in assignment of `t`
+DROP PROCEDURE p1;
+CREATE TABLE t2 LIKE t1;
+INSERT INTO t2 VALUES ();
+CREATE PROCEDURE p1()
+BEGIN
+DECLARE dst timestamp DEFAULT NULL;
+DECLARE cur2 CURSOR FOR SELECT source FROM t2 ORDER BY source LIMIT 1;
+OPEN cur2;
+FETCH cur2 INTO dst;
+CLOSE cur2;
+END;
+$$
+CALL p1();
+ERROR HY000: Cannot cast 'inet4' as 'timestamp' in assignment of `dst`
+DROP PROCEDURE p1;
+DROP TABLE t2;
+# End of type_store_assignment_incompatible.inc
+DROP TABLE t1;
+#
+# End of 10.10 tests
+#
diff --git a/plugin/type_inet/mysql-test/type_inet/type_inet4_mix_timestamp.test b/plugin/type_inet/mysql-test/type_inet/type_inet4_mix_timestamp.test
new file mode 100644
index 00000000000..a689d2facc5
--- /dev/null
+++ b/plugin/type_inet/mysql-test/type_inet/type_inet4_mix_timestamp.test
@@ -0,0 +1,25 @@
+--echo #
+--echo # Start of 10.10 tests
+--echo #
+
+--echo #
+--echo # MDEV-23287 The INET4 data type
+--echo #
+
+#
+# The DATETIME data type has loose control on the incoming data,
+# so values like '0.0.0.0' do not fail when get inserted to a DATETIME field.
+# Using '99.99.99.99' to make sure the month part is out of the range
+# to guarantee the failure.
+
+CREATE TABLE t1 (target INET4 DEFAULT '99.99.99.99', source TIMESTAMP DEFAULT '2001-01-01 10:20:30');
+--source include/type_mix_incompatible.inc
+DROP TABLE t1;
+
+CREATE TABLE t1 (target TIMESTAMP DEFAULT '2001-01-01 10:20:30', source INET4 DEFAULT '99.99.99.99');
+--source include/type_mix_incompatible.inc
+DROP TABLE t1;
+
+--echo #
+--echo # End of 10.10 tests
+--echo #
diff --git a/plugin/type_inet/mysql-test/type_inet/type_inet4_mix_year.result b/plugin/type_inet/mysql-test/type_inet/type_inet4_mix_year.result
new file mode 100644
index 00000000000..b47e7e2383a
--- /dev/null
+++ b/plugin/type_inet/mysql-test/type_inet/type_inet4_mix_year.result
@@ -0,0 +1,353 @@
+#
+# Start of 10.10 tests
+#
+#
+# MDEV-23287 The INET4 data type
+#
+CREATE TABLE t1 (target INET4 DEFAULT '0.0.0.0', source YEAR DEFAULT 0);
+# Start of type_store_assignment_incompatible.inc
+SET @sql_mode_save= @@sql_mode;
+SET @source_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
+WHERE COLUMN_NAME='source'
+ AND TABLE_NAME='t1'
+ AND TABLE_SCHEMA='test');
+SET @target_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
+WHERE COLUMN_NAME='target'
+ AND TABLE_NAME='t1'
+ AND TABLE_SCHEMA='test');
+SET @ignore= CASE WHEN @ignore IS NULL OR @ignore = '' THEN ''
+ WHEN @ignore NOT LIKE ' %' THEN CONCAT(' ',@ignore)
+ELSE @ignore
+END;
+CREATE TABLE t2 LIKE t1;
+ALTER TABLE t2 ADD id INT NOT NULL PRIMARY KEY FIRST;
+INSERT INTO t2 VALUES (1,DEFAULT,DEFAULT);
+SHOW CREATE TABLE t2;
+Table Create Table
+t2 CREATE TABLE `t2` (
+ `id` int(11) NOT NULL,
+ `target` inet4 DEFAULT '0.0.0.0',
+ `source` year(4) DEFAULT 0000,
+ PRIMARY KEY (`id`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+CREATE TABLE t3 LIKE t2;
+INSERT INTO t3 VALUES
+(1,
+(SELECT source FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1));
+ERROR HY000: Cannot cast 'year' as 'inet4' in assignment of `test`.`t3`.`target`
+DROP TABLE t3;
+SET sql_mode='';
+CREATE TABLE t3 LIKE t2;
+ALTER TABLE t3 ENGINE=MyISAM;
+EXECUTE IMMEDIATE
+CONCAT('CREATE VIEW v3 AS SELECT id,',
+IF(@target_type='geometry','AsText(target)','target'), ' AS target,',
+IF(@source_type='geometry','AsText(source)','source'), ' AS source ',
+' FROM t3');
+INSERT INTO t3 VALUES
+(1,
+(SELECT target FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1)),
+(2,
+(SELECT source FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1));
+Warnings:
+Warning 1292 Incorrect inet4 value: '0' for column `test`.`t3`.`target` at row 2
+SELECT * FROM v3;
+id target source
+1 0.0.0.0 0000
+2 0.0.0.0 0000
+TRUNCATE TABLE t3;
+SET sql_mode=STRICT_ALL_TABLES;
+INSERT INTO t3 VALUES
+(1,
+(SELECT target FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1)),
+(2,
+(SELECT source FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1));
+ERROR 22007: Incorrect inet4 value: '0' for column `test`.`t3`.`target` at row 2
+SELECT * FROM v3;
+id target source
+1 0.0.0.0 0000
+TRUNCATE TABLE t3;
+SET sql_mode=@sql_mode_save;
+DROP TABLE t3;
+DROP VIEW v3;
+CREATE TABLE t3 LIKE t2;
+INSERT INTO t3 SELECT id,source,source FROM t2;
+ERROR HY000: Cannot cast 'year' as 'inet4' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 (id,target,source) SELECT id,source,source FROM t2;
+ERROR HY000: Cannot cast 'year' as 'inet4' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
+ERROR HY000: Cannot cast 'year' as 'inet4' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 (id,target,source) VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
+ERROR HY000: Cannot cast 'year' as 'inet4' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
+ERROR HY000: Cannot cast 'year' as 'inet4' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 (id,target,source) SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
+ERROR HY000: Cannot cast 'year' as 'inet4' in assignment of `test`.`t3`.`target`
+UPDATE t3 SET target=source;
+ERROR HY000: Cannot cast 'year' as 'inet4' in assignment of `test`.`t3`.`target`
+UPDATE t2, t3 SET t3.target=t2.source WHERE t2.id=t3.id;
+ERROR HY000: Cannot cast 'year' as 'inet4' in assignment of `test`.`t3`.`target`
+SET @alter=CONCAT('ALTER', @ignore, ' TABLE t3 MODIFY target ', @source_type);
+SELECT @alter;
+@alter
+ALTER TABLE t3 MODIFY target year(4)
+EXECUTE IMMEDIATE @alter;
+ERROR HY000: Cannot cast 'inet4' as 'year' in assignment of `test`.`t3`.`target`
+DROP TABLE t3;
+DROP TABLE t2;
+CREATE PROCEDURE p1()
+BEGIN
+DECLARE src year(4) DEFAULT NULL;
+DECLARE dst inet4 DEFAULT NULL;
+SET dst=src;
+END;
+$$
+CALL p1;
+ERROR HY000: Cannot cast 'year' as 'inet4' in assignment of `dst`
+DROP PROCEDURE p1;
+CREATE FUNCTION f1(a inet4) RETURNS INT RETURN NULL;;
+SELECT f1((SELECT source FROM t1 ORDER BY source LIMIT 1));
+ERROR HY000: Cannot cast 'year' as 'inet4' in assignment of `a`
+DROP FUNCTION f1;
+CREATE PROCEDURE p1(a inet4) BEGIN END;;
+CALL p1((SELECT source FROM t1 ORDER BY source LIMIT 1));
+ERROR HY000: Cannot cast 'year' as 'inet4' in assignment of `a`
+DROP PROCEDURE p1;
+CREATE PROCEDURE p1(OUT dst inet4)
+BEGIN
+DECLARE src year(4) DEFAULT NULL;
+SET dst=src;
+END;
+$$
+CREATE PROCEDURE p2()
+BEGIN
+DECLARE dst inet4 DEFAULT NULL;
+CALL p1(dst);
+END;
+$$
+CALL p2();
+ERROR HY000: Cannot cast 'year' as 'inet4' in assignment of `dst`
+SHOW WARNINGS;
+Level Code Message
+Error 4078 Cannot cast 'year' as 'inet4' in assignment of `dst`
+Note 4094 At line 4 in test.p1
+Note 4094 At line 4 in test.p2
+DROP PROCEDURE p2;
+DROP PROCEDURE p1;
+CREATE FUNCTION f1() RETURNS inet4
+BEGIN
+DECLARE rc year(4) DEFAULT NULL;
+RETURN rc;
+END;
+$$
+SELECT f1();
+ERROR HY000: Cannot cast 'year' as 'inet4' in assignment of `f1()`
+DROP FUNCTION f1;
+CREATE PROCEDURE p1()
+BEGIN
+DECLARE src year(4) DEFAULT NULL;
+DECLARE cur1 CURSOR(t inet4) FOR SELECT * FROM t1 WHERE target=t;
+OPEN cur1(src);
+CLOSE cur1;
+END;
+$$
+CALL p1();
+ERROR HY000: Cannot cast 'year' as 'inet4' in assignment of `t`
+DROP PROCEDURE p1;
+CREATE TABLE t2 LIKE t1;
+INSERT INTO t2 VALUES ();
+CREATE PROCEDURE p1()
+BEGIN
+DECLARE dst inet4 DEFAULT NULL;
+DECLARE cur2 CURSOR FOR SELECT source FROM t2 ORDER BY source LIMIT 1;
+OPEN cur2;
+FETCH cur2 INTO dst;
+CLOSE cur2;
+END;
+$$
+CALL p1();
+ERROR HY000: Cannot cast 'year' as 'inet4' in assignment of `dst`
+DROP PROCEDURE p1;
+DROP TABLE t2;
+# End of type_store_assignment_incompatible.inc
+DROP TABLE t1;
+CREATE TABLE t1 (target YEAR DEFAULT 0, source INET4 DEFAULT '0.0.0.0');
+# Start of type_store_assignment_incompatible.inc
+SET @sql_mode_save= @@sql_mode;
+SET @source_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
+WHERE COLUMN_NAME='source'
+ AND TABLE_NAME='t1'
+ AND TABLE_SCHEMA='test');
+SET @target_type= (SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS
+WHERE COLUMN_NAME='target'
+ AND TABLE_NAME='t1'
+ AND TABLE_SCHEMA='test');
+SET @ignore= CASE WHEN @ignore IS NULL OR @ignore = '' THEN ''
+ WHEN @ignore NOT LIKE ' %' THEN CONCAT(' ',@ignore)
+ELSE @ignore
+END;
+CREATE TABLE t2 LIKE t1;
+ALTER TABLE t2 ADD id INT NOT NULL PRIMARY KEY FIRST;
+INSERT INTO t2 VALUES (1,DEFAULT,DEFAULT);
+SHOW CREATE TABLE t2;
+Table Create Table
+t2 CREATE TABLE `t2` (
+ `id` int(11) NOT NULL,
+ `target` year(4) DEFAULT 0000,
+ `source` inet4 DEFAULT '0.0.0.0',
+ PRIMARY KEY (`id`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+CREATE TABLE t3 LIKE t2;
+INSERT INTO t3 VALUES
+(1,
+(SELECT source FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1));
+ERROR HY000: Cannot cast 'inet4' as 'year' in assignment of `test`.`t3`.`target`
+DROP TABLE t3;
+SET sql_mode='';
+CREATE TABLE t3 LIKE t2;
+ALTER TABLE t3 ENGINE=MyISAM;
+EXECUTE IMMEDIATE
+CONCAT('CREATE VIEW v3 AS SELECT id,',
+IF(@target_type='geometry','AsText(target)','target'), ' AS target,',
+IF(@source_type='geometry','AsText(source)','source'), ' AS source ',
+' FROM t3');
+INSERT INTO t3 VALUES
+(1,
+(SELECT target FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1)),
+(2,
+(SELECT source FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1));
+Warnings:
+Warning 1265 Data truncated for column 'target' at row 2
+SELECT * FROM v3;
+id target source
+1 0000 0.0.0.0
+2 2000 0.0.0.0
+TRUNCATE TABLE t3;
+SET sql_mode=STRICT_ALL_TABLES;
+INSERT INTO t3 VALUES
+(1,
+(SELECT target FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1)),
+(2,
+(SELECT source FROM t2 ORDER BY id LIMIT 1),
+(SELECT source FROM t2 ORDER BY id LIMIT 1));
+ERROR 01000: Data truncated for column 'target' at row 2
+SELECT * FROM v3;
+id target source
+1 0000 0.0.0.0
+TRUNCATE TABLE t3;
+SET sql_mode=@sql_mode_save;
+DROP TABLE t3;
+DROP VIEW v3;
+CREATE TABLE t3 LIKE t2;
+INSERT INTO t3 SELECT id,source,source FROM t2;
+ERROR HY000: Cannot cast 'inet4' as 'year' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 (id,target,source) SELECT id,source,source FROM t2;
+ERROR HY000: Cannot cast 'inet4' as 'year' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
+ERROR HY000: Cannot cast 'inet4' as 'year' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 (id,target,source) VALUES (1,DEFAULT,DEFAULT) ON DUPLICATE KEY UPDATE target=source;
+ERROR HY000: Cannot cast 'inet4' as 'year' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
+ERROR HY000: Cannot cast 'inet4' as 'year' in assignment of `test`.`t3`.`target`
+INSERT INTO t3 (id,target,source) SELECT 1,DEFAULT(t2.target),DEFAULT(t2.source) FROM t2 ON DUPLICATE KEY UPDATE t3.target=t2.source;
+ERROR HY000: Cannot cast 'inet4' as 'year' in assignment of `test`.`t3`.`target`
+UPDATE t3 SET target=source;
+ERROR HY000: Cannot cast 'inet4' as 'year' in assignment of `test`.`t3`.`target`
+UPDATE t2, t3 SET t3.target=t2.source WHERE t2.id=t3.id;
+ERROR HY000: Cannot cast 'inet4' as 'year' in assignment of `test`.`t3`.`target`
+SET @alter=CONCAT('ALTER', @ignore, ' TABLE t3 MODIFY target ', @source_type);
+SELECT @alter;
+@alter
+ALTER TABLE t3 MODIFY target inet4
+EXECUTE IMMEDIATE @alter;
+ERROR HY000: Cannot cast 'year' as 'inet4' in assignment of `test`.`t3`.`target`
+DROP TABLE t3;
+DROP TABLE t2;
+CREATE PROCEDURE p1()
+BEGIN
+DECLARE src inet4 DEFAULT NULL;
+DECLARE dst year(4) DEFAULT NULL;
+SET dst=src;
+END;
+$$
+CALL p1;
+ERROR HY000: Cannot cast 'inet4' as 'year' in assignment of `dst`
+DROP PROCEDURE p1;
+CREATE FUNCTION f1(a year(4)) RETURNS INT RETURN NULL;;
+SELECT f1((SELECT source FROM t1 ORDER BY source LIMIT 1));
+ERROR HY000: Cannot cast 'inet4' as 'year' in assignment of `a`
+DROP FUNCTION f1;
+CREATE PROCEDURE p1(a year(4)) BEGIN END;;
+CALL p1((SELECT source FROM t1 ORDER BY source LIMIT 1));
+ERROR HY000: Cannot cast 'inet4' as 'year' in assignment of `a`
+DROP PROCEDURE p1;
+CREATE PROCEDURE p1(OUT dst year(4))
+BEGIN
+DECLARE src inet4 DEFAULT NULL;
+SET dst=src;
+END;
+$$
+CREATE PROCEDURE p2()
+BEGIN
+DECLARE dst year(4) DEFAULT NULL;
+CALL p1(dst);
+END;
+$$
+CALL p2();
+ERROR HY000: Cannot cast 'inet4' as 'year' in assignment of `dst`
+SHOW WARNINGS;
+Level Code Message
+Error 4078 Cannot cast 'inet4' as 'year' in assignment of `dst`
+Note 4094 At line 4 in test.p1
+Note 4094 At line 4 in test.p2
+DROP PROCEDURE p2;
+DROP PROCEDURE p1;
+CREATE FUNCTION f1() RETURNS year(4)
+BEGIN
+DECLARE rc inet4 DEFAULT NULL;
+RETURN rc;
+END;
+$$
+SELECT f1();
+ERROR HY000: Cannot cast 'inet4' as 'year' in assignment of `f1()`
+DROP FUNCTION f1;
+CREATE PROCEDURE p1()
+BEGIN
+DECLARE src inet4 DEFAULT NULL;
+DECLARE cur1 CURSOR(t year(4)) FOR SELECT * FROM t1 WHERE target=t;
+OPEN cur1(src);
+CLOSE cur1;
+END;
+$$
+CALL p1();
+ERROR HY000: Cannot cast 'inet4' as 'year' in assignment of `t`
+DROP PROCEDURE p1;
+CREATE TABLE t2 LIKE t1;
+INSERT INTO t2 VALUES ();
+CREATE PROCEDURE p1()
+BEGIN
+DECLARE dst year(4) DEFAULT NULL;
+DECLARE cur2 CURSOR FOR SELECT source FROM t2 ORDER BY source LIMIT 1;
+OPEN cur2;
+FETCH cur2 INTO dst;
+CLOSE cur2;
+END;
+$$
+CALL p1();
+ERROR HY000: Cannot cast 'inet4' as 'year' in assignment of `dst`
+DROP PROCEDURE p1;
+DROP TABLE t2;
+# End of type_store_assignment_incompatible.inc
+DROP TABLE t1;
+#
+# End of 10.10 tests
+#
diff --git a/plugin/type_inet/mysql-test/type_inet/type_inet4_mix_year.test b/plugin/type_inet/mysql-test/type_inet/type_inet4_mix_year.test
new file mode 100644
index 00000000000..34d6c1362ed
--- /dev/null
+++ b/plugin/type_inet/mysql-test/type_inet/type_inet4_mix_year.test
@@ -0,0 +1,19 @@
+--echo #
+--echo # Start of 10.10 tests
+--echo #
+
+--echo #
+--echo # MDEV-23287 The INET4 data type
+--echo #
+
+CREATE TABLE t1 (target INET4 DEFAULT '0.0.0.0', source YEAR DEFAULT 0);
+--source include/type_mix_incompatible.inc
+DROP TABLE t1;
+
+CREATE TABLE t1 (target YEAR DEFAULT 0, source INET4 DEFAULT '0.0.0.0');
+--source include/type_mix_incompatible.inc
+DROP TABLE t1;
+
+--echo #
+--echo # End of 10.10 tests
+--echo #
diff --git a/plugin/type_inet/mysql-test/type_inet/type_inet4_myisam.result b/plugin/type_inet/mysql-test/type_inet/type_inet4_myisam.result
new file mode 100644
index 00000000000..d4291e6f8f8
--- /dev/null
+++ b/plugin/type_inet/mysql-test/type_inet/type_inet4_myisam.result
@@ -0,0 +1,111 @@
+#
+# Start of 10.10 tests
+#
+#
+# MDEV-23287 The INET4 data type
+#
+SET default_storage_engine=MyISAM;
+#
+# Range optimizer
+#
+CREATE TABLE t1 (a INET4, INDEX(a));
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` inet4 DEFAULT NULL,
+ KEY `a` (`a`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+FOR i IN 0..255
+DO
+INSERT INTO t1 VALUES (CONCAT('0.0.0.', i));
+END FOR
+$$
+SELECT * FROM t1 WHERE a='0.0.0.255';
+a
+0.0.0.255
+EXPLAIN SELECT * FROM t1 WHERE a='0.0.0.255';
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 ref a a 5 const 1 Using where; Using index
+SELECT * FROM t1 WHERE a='garbage';
+a
+Warnings:
+Warning 1292 Incorrect inet4 value: 'garbage'
+EXPLAIN SELECT * FROM t1 WHERE a='garbage';
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables
+Warnings:
+Warning 1292 Incorrect inet4 value: 'garbage'
+SELECT * FROM t1 WHERE a>='0.0.0.254';
+a
+0.0.0.254
+0.0.0.255
+EXPLAIN SELECT * FROM t1 WHERE a>='0.0.0.254';
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 range a a 5 NULL 2 Using where; Using index
+SELECT * FROM t1 WHERE a>='garbage';
+a
+EXPLAIN SELECT * FROM t1 WHERE a>='garbage';
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables
+SELECT * FROM t1 WHERE a IN ('0.0.0.128','0.0.0.160','0.0.0.240');
+a
+0.0.0.128
+0.0.0.160
+0.0.0.240
+EXPLAIN SELECT * FROM t1 WHERE a IN ('0.0.0.128','0.0.0.160','0.0.0.240');
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 range a a 5 NULL 3 Using where; Using index
+SELECT * FROM t1 WHERE a IN ('0.0.0.128','0.0.0.160','garbage');
+a
+0.0.0.128
+0.0.0.160
+Warnings:
+Warning 1292 Incorrect inet4 value: 'garbage'
+EXPLAIN SELECT * FROM t1 WHERE a IN ('0.0.0.128','0.0.0.160','garbage');
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 range a a 5 NULL 2 Using where; Using index
+Warnings:
+Warning 1292 Incorrect inet4 value: 'garbage'
+SELECT * FROM t1 WHERE a BETWEEN '0.0.0.128' AND '0.0.0.129';
+a
+0.0.0.128
+0.0.0.129
+EXPLAIN SELECT * FROM t1 WHERE a BETWEEN '0.0.0.128' AND '0.0.0.129';
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 range a a 5 NULL 2 Using where; Using index
+SELECT * FROM t1 WHERE a BETWEEN '0.0.0.128' AND 'garbage';
+a
+EXPLAIN SELECT * FROM t1 WHERE a BETWEEN '0.0.0.128' AND 'garbage';
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables
+SELECT * FROM t1 WHERE a=CAST('0.0.0.255' AS INET4);
+a
+0.0.0.255
+EXPLAIN EXTENDED SELECT * FROM t1 WHERE a=CAST('0.0.0.255' AS INET4);
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE t1 ref a a 5 const 1 100.00 Using where; Using index
+Warnings:
+Note 1003 select `test`.`t1`.`a` AS `a` from `test`.`t1` where `test`.`t1`.`a` = INET4'0.0.0.255'
+DROP TABLE t1;
+#
+# MDEV-26742 Assertion `field->type_handler() == this' failed in FixedBinTypeBundle<NATIVE_LEN, MAX_CHAR_LEN>::Type_handler_fbt::stored_field_cmp_to_item
+#
+CREATE TABLE t1 (c varchar(64), key(c)) engine=myisam;
+INSERT INTO t1 VALUES ('0.0.0.1'),('0.0.0.1'),('0.0.0.2');
+SELECT * FROM t1 WHERE c>CAST('0.0.0.1' AS INET4);
+c
+0.0.0.2
+EXPLAIN SELECT * FROM t1 WHERE c>CAST('0.0.0.1' AS INET4);
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 index c c 67 NULL 3 Using where; Using index
+SELECT * FROM t1 WHERE c=CAST('0.0.0.1' AS INET4);
+c
+0.0.0.1
+0.0.0.1
+EXPLAIN SELECT * FROM t1 WHERE c=CAST('0.0.0.1' AS INET4);
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 index c c 67 NULL 3 Using where; Using index
+DROP TABLE t1;
+#
+# End of 10.10 tests
+#
diff --git a/plugin/type_inet/mysql-test/type_inet/type_inet4_myisam.test b/plugin/type_inet/mysql-test/type_inet/type_inet4_myisam.test
new file mode 100644
index 00000000000..a877d992646
--- /dev/null
+++ b/plugin/type_inet/mysql-test/type_inet/type_inet4_myisam.test
@@ -0,0 +1,28 @@
+--echo #
+--echo # Start of 10.10 tests
+--echo #
+
+--echo #
+--echo # MDEV-23287 The INET4 data type
+--echo #
+
+
+SET default_storage_engine=MyISAM;
+--source type_inet4_engines.inc
+
+--echo #
+--echo # MDEV-26742 Assertion `field->type_handler() == this' failed in FixedBinTypeBundle<NATIVE_LEN, MAX_CHAR_LEN>::Type_handler_fbt::stored_field_cmp_to_item
+--echo #
+
+CREATE TABLE t1 (c varchar(64), key(c)) engine=myisam;
+INSERT INTO t1 VALUES ('0.0.0.1'),('0.0.0.1'),('0.0.0.2');
+SELECT * FROM t1 WHERE c>CAST('0.0.0.1' AS INET4);
+EXPLAIN SELECT * FROM t1 WHERE c>CAST('0.0.0.1' AS INET4);
+SELECT * FROM t1 WHERE c=CAST('0.0.0.1' AS INET4);
+EXPLAIN SELECT * FROM t1 WHERE c=CAST('0.0.0.1' AS INET4);
+DROP TABLE t1;
+
+
+--echo #
+--echo # End of 10.10 tests
+--echo #
diff --git a/plugin/type_inet/mysql-test/type_inet/type_inet4_mysql.result b/plugin/type_inet/mysql-test/type_inet/type_inet4_mysql.result
new file mode 100644
index 00000000000..c7f586fef96
--- /dev/null
+++ b/plugin/type_inet/mysql-test/type_inet/type_inet4_mysql.result
@@ -0,0 +1,51 @@
+#
+# Start of 10.10 tests
+#
+#
+# MDEV-23287 The INET4 data type
+#
+CREATE TABLE t1 (a INET4);
+Field 1: `a`
+Org_field: `a`
+Catalog: `def`
+Database: `test`
+Table: `t1`
+Org_table: `t1`
+Type: STRING (type=inet4)
+Collation: latin1_swedish_ci (8)
+Length: 15
+Max_length: 0
+Decimals: 0
+Flags: UNSIGNED BINARY
+
+Field 2: `b`
+Org_field: ``
+Catalog: `def`
+Database: ``
+Table: ``
+Org_table: ``
+Type: STRING (type=inet4)
+Collation: latin1_swedish_ci (8)
+Length: 15
+Max_length: 0
+Decimals: 0
+Flags: NOT_NULL UNSIGNED
+
+Field 3: `c`
+Org_field: ``
+Catalog: `def`
+Database: ``
+Table: ``
+Org_table: ``
+Type: STRING (type=inet4)
+Collation: latin1_swedish_ci (8)
+Length: 15
+Max_length: 0
+Decimals: 0
+Flags: UNSIGNED
+
+
+DROP TABLE t1;
+#
+# End of 10.10 tests
+#
diff --git a/plugin/type_inet/mysql-test/type_inet/type_inet4_mysql.test b/plugin/type_inet/mysql-test/type_inet/type_inet4_mysql.test
new file mode 100644
index 00000000000..0e0d6f7dac9
--- /dev/null
+++ b/plugin/type_inet/mysql-test/type_inet/type_inet4_mysql.test
@@ -0,0 +1,18 @@
+-- source include/have_working_dns.inc
+-- source include/not_embedded.inc
+
+--echo #
+--echo # Start of 10.10 tests
+--echo #
+
+--echo #
+--echo # MDEV-23287 The INET4 data type
+--echo #
+
+CREATE TABLE t1 (a INET4);
+--exec $MYSQL -t test --column-type-info -e "SELECT a, CAST('0.0.0.0' AS INET4) AS b, COALESCE(a) AS c FROM t1" 2>&1
+DROP TABLE t1;
+
+--echo #
+--echo # End of 10.10 tests
+--echo #
diff --git a/plugin/type_inet/mysql-test/type_inet/type_inet4_oracle.result b/plugin/type_inet/mysql-test/type_inet/type_inet4_oracle.result
new file mode 100644
index 00000000000..7495a26755b
--- /dev/null
+++ b/plugin/type_inet/mysql-test/type_inet/type_inet4_oracle.result
@@ -0,0 +1,29 @@
+#
+# Start of 10.10 tests
+#
+#
+# MDEV-20913 sql_mode=ORACLE: INET6 does not work as a routine parameter type and return type
+#
+SET sql_mode=ORACLE;
+CREATE OR REPLACE FUNCTION f1() RETURN INET4 AS
+BEGIN
+RETURN '255.255.255.255';
+END;
+$$
+SELECT f1();
+f1()
+255.255.255.255
+DROP FUNCTION f1;
+SET sql_mode=ORACLE;
+CREATE OR REPLACE FUNCTION f1(a INET4) RETURN INT AS
+BEGIN
+RETURN LENGTH(a);
+END;
+$$
+SELECT f1('000.000.000.000');
+f1('000.000.000.000')
+7
+DROP FUNCTION f1;
+#
+# End of 10.10 tests
+#
diff --git a/plugin/type_inet/mysql-test/type_inet/type_inet4_oracle.test b/plugin/type_inet/mysql-test/type_inet/type_inet4_oracle.test
new file mode 100644
index 00000000000..3ff2fe0fcc6
--- /dev/null
+++ b/plugin/type_inet/mysql-test/type_inet/type_inet4_oracle.test
@@ -0,0 +1,35 @@
+--echo #
+--echo # Start of 10.10 tests
+--echo #
+
+--echo #
+--echo # MDEV-20913 sql_mode=ORACLE: INET6 does not work as a routine parameter type and return type
+--echo #
+
+SET sql_mode=ORACLE;
+DELIMITER $$;
+CREATE OR REPLACE FUNCTION f1() RETURN INET4 AS
+BEGIN
+ RETURN '255.255.255.255';
+END;
+$$
+DELIMITER ;$$
+SELECT f1();
+DROP FUNCTION f1;
+
+
+SET sql_mode=ORACLE;
+DELIMITER $$;
+CREATE OR REPLACE FUNCTION f1(a INET4) RETURN INT AS
+BEGIN
+ RETURN LENGTH(a);
+END;
+$$
+DELIMITER ;$$
+SELECT f1('000.000.000.000');
+DROP FUNCTION f1;
+
+
+--echo #
+--echo # End of 10.10 tests
+--echo #
diff --git a/plugin/type_inet/mysql-test/type_inet/type_inet4_partition.result b/plugin/type_inet/mysql-test/type_inet/type_inet4_partition.result
new file mode 100644
index 00000000000..5cb6c011c13
--- /dev/null
+++ b/plugin/type_inet/mysql-test/type_inet/type_inet4_partition.result
@@ -0,0 +1,36 @@
+#
+# Start of 10.10 tests
+#
+#
+# MDEV-23287 The INET4 data type
+# MDEV-20831 Table partitioned by LIST/RANGE COLUMNS(inet6) can be created, but not inserted into
+#
+SET NAMES utf8;
+CREATE TABLE t1 (a INET4)
+PARTITION BY LIST COLUMNS(a)
+(PARTITION p00 VALUES IN (10));
+ERROR HY000: Partition column values of incorrect type
+CREATE TABLE t1 (a INET4)
+PARTITION BY LIST COLUMNS(a)
+(PARTITION p00 VALUES IN (TIME'10:20:30'));
+ERROR HY000: Partition column values of incorrect type
+CREATE TABLE t1 (a INET4)
+PARTITION BY LIST COLUMNS(a)
+(PARTITION p00 VALUES IN ('€'));
+ERROR 22007: Incorrect inet4 value: '€'
+CREATE TABLE t1 (a INET4)
+PARTITION BY LIST COLUMNS(a)
+(PARTITION p00 VALUES IN ('0.0.0.0'),
+PARTITION pFF VALUES IN (0xFFFFFFFF));
+INSERT INTO t1 VALUES ('0.0.0.0');
+INSERT INTO t1 VALUES ('255.255.255.255');
+SELECT * FROM t1 PARTITION (p00);
+a
+0.0.0.0
+SELECT * FROM t1 PARTITION (pFF);
+a
+255.255.255.255
+DROP TABLE t1;
+#
+# End of 10.10 tests
+#
diff --git a/plugin/type_inet/mysql-test/type_inet/type_inet4_partition.test b/plugin/type_inet/mysql-test/type_inet/type_inet4_partition.test
new file mode 100644
index 00000000000..6ca97c4740f
--- /dev/null
+++ b/plugin/type_inet/mysql-test/type_inet/type_inet4_partition.test
@@ -0,0 +1,41 @@
+--source include/have_partition.inc
+
+--echo #
+--echo # Start of 10.10 tests
+--echo #
+
+--echo #
+--echo # MDEV-23287 The INET4 data type
+--echo # MDEV-20831 Table partitioned by LIST/RANGE COLUMNS(inet6) can be created, but not inserted into
+--echo #
+
+SET NAMES utf8;
+
+--error ER_WRONG_TYPE_COLUMN_VALUE_ERROR
+CREATE TABLE t1 (a INET4)
+ PARTITION BY LIST COLUMNS(a)
+ (PARTITION p00 VALUES IN (10));
+
+--error ER_WRONG_TYPE_COLUMN_VALUE_ERROR
+CREATE TABLE t1 (a INET4)
+ PARTITION BY LIST COLUMNS(a)
+ (PARTITION p00 VALUES IN (TIME'10:20:30'));
+
+--error ER_TRUNCATED_WRONG_VALUE
+CREATE TABLE t1 (a INET4)
+ PARTITION BY LIST COLUMNS(a)
+ (PARTITION p00 VALUES IN ('€'));
+
+CREATE TABLE t1 (a INET4)
+ PARTITION BY LIST COLUMNS(a)
+ (PARTITION p00 VALUES IN ('0.0.0.0'),
+ PARTITION pFF VALUES IN (0xFFFFFFFF));
+INSERT INTO t1 VALUES ('0.0.0.0');
+INSERT INTO t1 VALUES ('255.255.255.255');
+SELECT * FROM t1 PARTITION (p00);
+SELECT * FROM t1 PARTITION (pFF);
+DROP TABLE t1;
+
+--echo #
+--echo # End of 10.10 tests
+--echo #
diff --git a/plugin/type_inet/mysql-test/type_inet/type_inet4_plugin.result b/plugin/type_inet/mysql-test/type_inet/type_inet4_plugin.result
new file mode 100644
index 00000000000..291d4c2d05b
--- /dev/null
+++ b/plugin/type_inet/mysql-test/type_inet/type_inet4_plugin.result
@@ -0,0 +1,31 @@
+#
+# Start of 10.10 tests
+#
+#
+# MDEV-23287 The INET4 data type
+#
+SELECT
+PLUGIN_NAME,
+PLUGIN_VERSION,
+PLUGIN_STATUS,
+PLUGIN_TYPE,
+PLUGIN_AUTHOR,
+PLUGIN_DESCRIPTION,
+PLUGIN_LICENSE,
+PLUGIN_MATURITY,
+PLUGIN_AUTH_VERSION
+FROM INFORMATION_SCHEMA.PLUGINS
+WHERE PLUGIN_TYPE='DATA TYPE'
+ AND PLUGIN_NAME='inet4';
+PLUGIN_NAME inet4
+PLUGIN_VERSION 1.0
+PLUGIN_STATUS ACTIVE
+PLUGIN_TYPE DATA TYPE
+PLUGIN_AUTHOR MariaDB Corporation
+PLUGIN_DESCRIPTION Data type INET4
+PLUGIN_LICENSE GPL
+PLUGIN_MATURITY Gamma
+PLUGIN_AUTH_VERSION 1.0
+#
+# End of 10.10 tests
+#
diff --git a/plugin/type_inet/mysql-test/type_inet/type_inet4_plugin.test b/plugin/type_inet/mysql-test/type_inet/type_inet4_plugin.test
new file mode 100644
index 00000000000..20875fc916e
--- /dev/null
+++ b/plugin/type_inet/mysql-test/type_inet/type_inet4_plugin.test
@@ -0,0 +1,27 @@
+--echo #
+--echo # Start of 10.10 tests
+--echo #
+
+--echo #
+--echo # MDEV-23287 The INET4 data type
+--echo #
+
+--vertical_results
+SELECT
+ PLUGIN_NAME,
+ PLUGIN_VERSION,
+ PLUGIN_STATUS,
+ PLUGIN_TYPE,
+ PLUGIN_AUTHOR,
+ PLUGIN_DESCRIPTION,
+ PLUGIN_LICENSE,
+ PLUGIN_MATURITY,
+ PLUGIN_AUTH_VERSION
+FROM INFORMATION_SCHEMA.PLUGINS
+ WHERE PLUGIN_TYPE='DATA TYPE'
+ AND PLUGIN_NAME='inet4';
+--horizontal_results
+
+--echo #
+--echo # End of 10.10 tests
+--echo #
diff --git a/plugin/type_inet/mysql-test/type_inet/type_inet4_stat_tables.result b/plugin/type_inet/mysql-test/type_inet/type_inet4_stat_tables.result
new file mode 100644
index 00000000000..5a0afb686c1
--- /dev/null
+++ b/plugin/type_inet/mysql-test/type_inet/type_inet4_stat_tables.result
@@ -0,0 +1,66 @@
+#
+# Start of 10.10 tests
+#
+#
+# MDEV-23287 The INET4 data type
+# MDEV-20800 Server crashes in Field_inet6::store_warning upon updating table statistics
+#
+CREATE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES ('1.0.0.1'),('2.0.0.2');
+ANALYZE TABLE t1 PERSISTENT FOR ALL;
+Table Op Msg_type Msg_text
+test.t1 analyze status Engine-independent statistics collected
+test.t1 analyze status OK
+SELECT db_name, table_name, column_name,
+min_value, max_value,
+nulls_ratio, avg_frequency,
+hist_size, hist_type, decode_histogram(hist_type,histogram)
+FROM mysql.column_stats
+WHERE db_name='test' AND table_name='t1';
+db_name test
+table_name t1
+column_name a
+min_value 1.0.0.1
+max_value 2.0.0.2
+nulls_ratio 0.0000
+avg_frequency 1.0000
+hist_size 2
+hist_type JSON_HB
+decode_histogram(hist_type,histogram) {
+ "target_histogram_size": 254,
+ "collected_at": "REPLACED",
+ "collected_by": "REPLACED",
+ "histogram_hb": [
+ {
+ "start": "1.0.0.1",
+ "size": 0.5,
+ "ndv": 1
+ },
+ {
+ "start": "2.0.0.2",
+ "end": "2.0.0.2",
+ "size": 0.5,
+ "ndv": 1
+ }
+ ]
+}
+INSERT INTO t1 VALUES ('3.0.0.3');
+DROP TABLE t1;
+#
+# MDEV-23287 The INET4 data type
+# MDEV-22509: Server crashes in Field_inet6::store_inet6_null_with_warn / Field::maybe_null
+#
+CREATE TABLE t1 (a INT, b INET4 NOT NULL);
+INSERT INTO t1 VALUES (1,'0.0.0.0'),(2,'0.0.0.0');
+ANALYZE TABLE t1 PERSISTENT FOR ALL;
+Table Op Msg_type Msg_text
+test.t1 analyze status Engine-independent statistics collected
+test.t1 analyze status OK
+SELECT t1.a from t1;
+a
+1
+2
+DROP TABLE t1;
+#
+# End of 10.10 tests
+#
diff --git a/plugin/type_inet/mysql-test/type_inet/type_inet4_stat_tables.test b/plugin/type_inet/mysql-test/type_inet/type_inet4_stat_tables.test
new file mode 100644
index 00000000000..ea01a6f0735
--- /dev/null
+++ b/plugin/type_inet/mysql-test/type_inet/type_inet4_stat_tables.test
@@ -0,0 +1,40 @@
+--source include/have_stat_tables.inc
+
+--echo #
+--echo # Start of 10.10 tests
+--echo #
+
+--echo #
+--echo # MDEV-23287 The INET4 data type
+--echo # MDEV-20800 Server crashes in Field_inet6::store_warning upon updating table statistics
+--echo #
+
+CREATE TABLE t1 (a INET4);
+INSERT INTO t1 VALUES ('1.0.0.1'),('2.0.0.2');
+ANALYZE TABLE t1 PERSISTENT FOR ALL;
+--vertical_results
+--source include/histogram_replaces.inc
+SELECT db_name, table_name, column_name,
+ min_value, max_value,
+ nulls_ratio, avg_frequency,
+ hist_size, hist_type, decode_histogram(hist_type,histogram)
+FROM mysql.column_stats
+WHERE db_name='test' AND table_name='t1';
+--horizontal_results
+INSERT INTO t1 VALUES ('3.0.0.3');
+DROP TABLE t1;
+
+--echo #
+--echo # MDEV-23287 The INET4 data type
+--echo # MDEV-22509: Server crashes in Field_inet6::store_inet6_null_with_warn / Field::maybe_null
+--echo #
+
+CREATE TABLE t1 (a INT, b INET4 NOT NULL);
+INSERT INTO t1 VALUES (1,'0.0.0.0'),(2,'0.0.0.0');
+ANALYZE TABLE t1 PERSISTENT FOR ALL;
+SELECT t1.a from t1;
+DROP TABLE t1;
+
+--echo #
+--echo # End of 10.10 tests
+--echo #
diff --git a/plugin/type_inet/mysql-test/type_inet/type_inet6.result b/plugin/type_inet/mysql-test/type_inet/type_inet6.result
index 838a7ee49d3..8d52e85cb91 100644
--- a/plugin/type_inet/mysql-test/type_inet/type_inet6.result
+++ b/plugin/type_inet/mysql-test/type_inet/type_inet6.result
@@ -1928,7 +1928,7 @@ a b
:: NULL
DROP TABLE t1;
SET timestamp=UNIX_TIMESTAMP('2001-01-01 10:20:30');
-CREATE TABLE t1 (a INET6, b TIMESTAMP);
+CREATE TABLE t1 (a INET6, b TIMESTAMP NOT NULL DEFAULT NOW() ON UPDATE NOW());
INSERT INTO t1 (a) VALUES ('::');
UPDATE t1 SET b=a;
ERROR HY000: Cannot cast 'inet6' as 'timestamp' in assignment of `test`.`t1`.`b`
diff --git a/plugin/type_inet/mysql-test/type_inet/type_inet6.test b/plugin/type_inet/mysql-test/type_inet/type_inet6.test
index 857a08e7cd1..97370c37ea0 100644
--- a/plugin/type_inet/mysql-test/type_inet/type_inet6.test
+++ b/plugin/type_inet/mysql-test/type_inet/type_inet6.test
@@ -1411,7 +1411,7 @@ SELECT * FROM t1;
DROP TABLE t1;
SET timestamp=UNIX_TIMESTAMP('2001-01-01 10:20:30');
-CREATE TABLE t1 (a INET6, b TIMESTAMP);
+CREATE TABLE t1 (a INET6, b TIMESTAMP NOT NULL DEFAULT NOW() ON UPDATE NOW());
INSERT INTO t1 (a) VALUES ('::');
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
UPDATE t1 SET b=a;
diff --git a/plugin/type_inet/mysql-test/type_inet/type_inet6_mix_inet4.result b/plugin/type_inet/mysql-test/type_inet/type_inet6_mix_inet4.result
new file mode 100644
index 00000000000..0910f2d85e6
--- /dev/null
+++ b/plugin/type_inet/mysql-test/type_inet/type_inet6_mix_inet4.result
@@ -0,0 +1,19 @@
+#
+# Start of 10.10 tests
+#
+#
+# MDEV-23287 The INET4 data type
+#
+CREATE TABLE t1 (i4 INET4, i6 INET6);
+SELECT * FROM t1 WHERE i4=i6;
+ERROR HY000: Illegal parameter data types inet4 and inet6 for operation '='
+SELECT COALESCE(i4,i6) FROM t1 WHERE i4=i6;
+ERROR HY000: Illegal parameter data types inet4 and inet6 for operation 'coalesce'
+SELECT LEAST(i4,i6) FROM t1 WHERE i4=i6;
+ERROR HY000: Illegal parameter data types inet4 and inet6 for operation 'least'
+SELECT i4 FROM t1 UNION ALL SELECT i6 FROM t1;
+ERROR HY000: Illegal parameter data types inet4 and inet6 for operation 'UNION'
+DROP TABLE t1;
+#
+# End of 10.10 tests
+#
diff --git a/plugin/type_inet/mysql-test/type_inet/type_inet6_mix_inet4.test b/plugin/type_inet/mysql-test/type_inet/type_inet6_mix_inet4.test
new file mode 100644
index 00000000000..ac35b95befd
--- /dev/null
+++ b/plugin/type_inet/mysql-test/type_inet/type_inet6_mix_inet4.test
@@ -0,0 +1,26 @@
+--echo #
+--echo # Start of 10.10 tests
+--echo #
+
+--echo #
+--echo # MDEV-23287 The INET4 data type
+--echo #
+
+# Mixing INET6 and INET4 is not implemented yet
+
+CREATE TABLE t1 (i4 INET4, i6 INET6);
+--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
+SELECT * FROM t1 WHERE i4=i6;
+--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
+SELECT COALESCE(i4,i6) FROM t1 WHERE i4=i6;
+--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
+SELECT LEAST(i4,i6) FROM t1 WHERE i4=i6;
+--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
+SELECT i4 FROM t1 UNION ALL SELECT i6 FROM t1;
+
+DROP TABLE t1;
+
+
+--echo #
+--echo # End of 10.10 tests
+--echo #
diff --git a/plugin/type_inet/plugin.cc b/plugin/type_inet/plugin.cc
index 0b57e2bec1f..e2854314ac0 100644
--- a/plugin/type_inet/plugin.cc
+++ b/plugin/type_inet/plugin.cc
@@ -21,6 +21,13 @@
#include <mysql/plugin_data_type.h>
#include <mysql/plugin_function.h>
+static struct st_mariadb_data_type plugin_descriptor_type_inet4=
+{
+ MariaDB_DATA_TYPE_INTERFACE_VERSION,
+ Inet4Bundle::type_handler_fbt()
+};
+
+
static struct st_mariadb_data_type plugin_descriptor_type_inet6=
{
MariaDB_DATA_TYPE_INTERFACE_VERSION,
@@ -171,6 +178,21 @@ static Plugin_function
maria_declare_plugin(type_inet)
{
MariaDB_DATA_TYPE_PLUGIN, // the plugin type (see include/mysql/plugin.h)
+ &plugin_descriptor_type_inet4,// pointer to type-specific plugin descriptor
+ "inet4", // plugin name
+ "MariaDB Corporation", // plugin author
+ "Data type INET4", // the plugin description
+ PLUGIN_LICENSE_GPL, // the plugin license (see include/mysql/plugin.h)
+ 0, // Pointer to plugin initialization function
+ 0, // Pointer to plugin deinitialization function
+ 0x0100, // Numeric version 0xAABB means AA.BB version
+ NULL, // Status variables
+ NULL, // System variables
+ "1.0", // String version representation
+ MariaDB_PLUGIN_MATURITY_GAMMA // Maturity(see include/mysql/plugin.h)*/
+},
+{
+ MariaDB_DATA_TYPE_PLUGIN, // the plugin type (see include/mysql/plugin.h)
&plugin_descriptor_type_inet6,// pointer to type-specific plugin descriptor
"inet6", // plugin name
"MariaDB Corporation", // plugin author
diff --git a/plugin/type_inet/sql_type_inet.cc b/plugin/type_inet/sql_type_inet.cc
index b8d2ef706a9..3d499620780 100644
--- a/plugin/type_inet/sql_type_inet.cc
+++ b/plugin/type_inet/sql_type_inet.cc
@@ -44,7 +44,7 @@ static const char HEX_DIGITS[]= "0123456789abcdef";
IPv4-part differently on different platforms.
*/
-bool Inet4::ascii_to_ipv4(const char *str, size_t str_length)
+bool Inet4::ascii_to_fbt(const char *str, size_t str_length)
{
if (str_length < 7)
{
@@ -259,8 +259,9 @@ bool Inet6::ascii_to_fbt(const char *str, size_t str_length)
return true;
}
- Inet4_null tmp(group_start_ptr, (size_t) (str_end - group_start_ptr),
- &my_charset_latin1);
+ Inet4Bundle::Fbt_null tmp(group_start_ptr,
+ (size_t) (str_end - group_start_ptr),
+ &my_charset_latin1);
if (tmp.is_null())
{
DBUG_PRINT("error", ("ascii_to_ipv6(%.*s): invalid IPv6 address: "
@@ -268,7 +269,7 @@ bool Inet6::ascii_to_fbt(const char *str, size_t str_length)
return true;
}
- tmp.to_binary(dst, IN_ADDR_SIZE);
+ tmp.to_record(dst, IN_ADDR_SIZE);
dst += IN_ADDR_SIZE;
chars_in_group= 0;
@@ -483,7 +484,7 @@ size_t Inet6::to_string(char *dst, size_t dstsize) const
// the string (dst). Now it's time to dump IPv4-part.
return (size_t) (p - dst) +
- Inet4_null((const char *) (ipv6_bytes + 12), 4).
+ Inet4((const char *) (ipv6_bytes + 12), 4).
to_string(p, dstsize_available);
}
else
@@ -512,3 +513,9 @@ const Name &Inet6::default_value()
static Name def(STRING_WITH_LEN("::"));
return def;
}
+
+const Name &Inet4::default_value()
+{
+ static Name def(STRING_WITH_LEN("0.0.0.0"));
+ return def;
+}
diff --git a/plugin/type_inet/sql_type_inet.h b/plugin/type_inet/sql_type_inet.h
index 69836ca215b..3ea06f6600c 100644
--- a/plugin/type_inet/sql_type_inet.h
+++ b/plugin/type_inet/sql_type_inet.h
@@ -48,94 +48,16 @@ typedef FixedBinTypeBundle<Inet6> Inet6Bundle;
/***********************************************************************/
-class Inet4
+class Inet4: public FixedBinTypeStorage<IN_ADDR_SIZE, IN_ADDR_MAX_CHAR_LENGTH>
{
- char m_buffer[IN_ADDR_SIZE];
-protected:
- bool ascii_to_ipv4(const char *str, size_t length);
- bool character_string_to_ipv4(const char *str, size_t str_length,
- CHARSET_INFO *cs)
- {
- if (cs->state & MY_CS_NONASCII)
- {
- char tmp[IN_ADDR_MAX_CHAR_LENGTH];
- String_copier copier;
- uint length= copier.well_formed_copy(&my_charset_latin1, tmp, sizeof(tmp),
- cs, str, str_length);
- return ascii_to_ipv4(tmp, length);
- }
- return ascii_to_ipv4(str, str_length);
- }
- bool binary_to_ipv4(const char *str, size_t length)
- {
- if (length != sizeof(m_buffer))
- return true;
- memcpy(m_buffer, str, length);
- return false;
- }
-
- Inet4() = default;
public:
- void to_binary(char *dst, size_t dstsize) const
- {
- DBUG_ASSERT(dstsize >= sizeof(m_buffer));
- memcpy(dst, m_buffer, sizeof(m_buffer));
- }
- bool to_binary(String *to) const
- {
- return to->copy(m_buffer, sizeof(m_buffer), &my_charset_bin);
- }
+ using FixedBinTypeStorage::FixedBinTypeStorage;
+ bool ascii_to_fbt(const char *str, size_t str_length);
size_t to_string(char *dst, size_t dstsize) const;
- bool to_string(String *to) const
- {
- to->set_charset(&my_charset_latin1);
- if (to->alloc(INET_ADDRSTRLEN))
- return true;
- to->length((uint32) to_string((char*) to->ptr(), INET_ADDRSTRLEN));
- return false;
- }
+ static const Name &default_value();
};
+typedef FixedBinTypeBundle<Inet4> Inet4Bundle;
-class Inet4_null: public Inet4, public Null_flag
-{
-public:
- // Initialize from a text representation
- Inet4_null(const char *str, size_t length, CHARSET_INFO *cs)
- :Null_flag(character_string_to_ipv4(str, length, cs))
- { }
- Inet4_null(const String &str)
- :Inet4_null(str.ptr(), str.length(), str.charset())
- { }
- // Initialize from a binary representation
- Inet4_null(const char *str, size_t length)
- :Null_flag(binary_to_ipv4(str, length))
- { }
- Inet4_null(const Binary_string &str)
- :Inet4_null(str.ptr(), str.length())
- { }
-public:
- const Inet4& to_inet4() const
- {
- DBUG_ASSERT(!is_null());
- return *this;
- }
- void to_binary(char *dst, size_t dstsize) const
- {
- to_inet4().to_binary(dst, dstsize);
- }
- bool to_binary(String *to) const
- {
- return to_inet4().to_binary(to);
- }
- size_t to_string(char *dst, size_t dstsize) const
- {
- return to_inet4().to_string(dst, dstsize);
- }
- bool to_string(String *to) const
- {
- return to_inet4().to_string(to);
- }
-};
#endif /* SQL_TYPE_INET_H */
diff --git a/scripts/fill_help_tables.sql b/scripts/fill_help_tables.sql
index 48931ac6ea6..caedfa461e0 100644
--- a/scripts/fill_help_tables.sql
+++ b/scripts/fill_help_tables.sql
@@ -85,7 +85,7 @@ insert into help_category (help_category_id,name,parent_category_id,url) values
insert into help_category (help_category_id,name,parent_category_id,url) values (50,'Prepared Statements',1,'');
insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (1,9,'HELP_DATE','Help Contents generated from the MariaDB Knowledge Base on 23 January 2023.','','');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (2,9,'HELP_VERSION','Help Contents generated for MariaDB 10.9 from the MariaDB Knowledge Base on 23 January 2023.','','');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (2,9,'HELP_VERSION','Help Contents generated for MariaDB 10.10 from the MariaDB Knowledge Base on 23 January 2023.','','');
insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (3,2,'AREA','A synonym for ST_AREA.\n\nURL: https://mariadb.com/kb/en/polygon-properties-area/','','https://mariadb.com/kb/en/polygon-properties-area/');
insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (4,2,'CENTROID','A synonym for ST_CENTROID.\n\nURL: https://mariadb.com/kb/en/centroid/','','https://mariadb.com/kb/en/centroid/');
insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (5,2,'ExteriorRing','A synonym for ST_ExteriorRing.\n\nURL: https://mariadb.com/kb/en/polygon-properties-exteriorring/','','https://mariadb.com/kb/en/polygon-properties-exteriorring/');
@@ -226,723 +226,725 @@ insert into help_topic (help_topic_id,help_category_id,name,description,example,
insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (134,12,'MD5','Syntax\n------\n\nMD5(str)\n\nDescription\n-----------\n\nCalculates an MD5 128-bit checksum for the string.\n\nThe return value is a 32-hex digit string, and as of MariaDB 5.5, is a\nnonbinary string in the connection character set and collation, determined by\nthe values of the character_set_connection and collation_connection system\nvariables. Before 5.5, the return value was a binary string.\n\nNULL is returned if the argument was NULL.\n\nExamples\n--------\n\nSELECT MD5(\'testing\');\n+----------------------------------+\n| MD5(\'testing\') |\n+----------------------------------+\n| ae2b1fca515949e5d54fb22b8ed95575 |\n+----------------------------------+\n\nURL: https://mariadb.com/kb/en/md5/','','https://mariadb.com/kb/en/md5/');
insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (135,12,'OLD_PASSWORD','Syntax\n------\n\nOLD_PASSWORD(str)\n\nDescription\n-----------\n\nOLD_PASSWORD() was added to MySQL when the implementation of PASSWORD() was\nchanged to improve security. OLD_PASSWORD() returns the value of the old\n(pre-MySQL 4.1) implementation of PASSWORD() as a string, and is intended to\npermit you to reset passwords for any pre-4.1 clients that need to connect to\na more recent MySQL server version, or any version of MariaDB, without locking\nthem out.\n\nAs of MariaDB 5.5, the return value is a nonbinary string in the connection\ncharacter set and collation, determined by the values of the\ncharacter_set_connection and collation_connection system variables. Before\n5.5, the return value was a binary string.\n\nThe return value is 16 bytes in length, or NULL if the argument was NULL.\n\nURL: https://mariadb.com/kb/en/old_password/','','https://mariadb.com/kb/en/old_password/');
insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (136,12,'PASSWORD','Syntax\n------\n\nPASSWORD(str)\n\nDescription\n-----------\n\nThe PASSWORD() function is used for hashing passwords for use in\nauthentication by the MariaDB server. It is not intended for use in other\napplications.\n\nCalculates and returns a hashed password string from the plaintext password\nstr. Returns an empty string (>= MariaDB 10.0.4) if the argument was NULL.\n\nThe return value is a nonbinary string in the connection character set and\ncollation, determined by the values of the character_set_connection and\ncollation_connection system variables.\n\nThis is the function that is used for hashing MariaDB passwords for storage in\nthe Password column of the user table (see privileges), usually used with the\nSET PASSWORD statement. It is not intended for use in other applications.\n\nUntil MariaDB 10.3, the return value is 41-bytes in length, and the first\ncharacter is always \'*\'. From MariaDB 10.4, the function takes into account\nthe authentication plugin where applicable (A CREATE USER or SET PASSWORD\nstatement). For example, when used in conjunction with a user authenticated by\nthe ed25519 plugin, the statement will create a longer hash:\n\nCREATE USER edtest@localhost IDENTIFIED VIA ed25519 USING PASSWORD(\'secret\');\n\nCREATE USER edtest2@localhost IDENTIFIED BY \'secret\';\n\nSELECT CONCAT(user, \'@\', host, \' => \', JSON_DETAILED(priv)) FROM\nmysql.global_priv\n WHERE user LIKE \'edtest%\'\\G\n*************************** 1. row ***************************\nCONCAT(user, \'@\', host, \' => \', JSON_DETAILED(priv)): edtest@localhost => {\n...\n \"plugin\": \"ed25519\",\n \"authentication_string\": \"ZIgUREUg5PVgQ6LskhXmO+eZLS0nC8be6HPjYWR4YJY\",\n...\n}\n*************************** 2. row ***************************\nCONCAT(user, \'@\', host, \' => \', JSON_DETAILED(priv)): edtest2@localhost => {\n...\n \"plugin\": \"mysql_native_password\",\n \"authentication_string\": \"*14E65567ABDB5135D0CFD9A70B3032C179A49EE7\",\n...\n}\n\nThe behavior of this function is affected by the value of the old_passwords\nsystem variable. If this is set to 1 (0 is default), MariaDB reverts to using\nthe mysql_old_password authentication plugin by default for newly created\nusers and passwords.\n\nExamples\n--------\n\nSELECT PASSWORD(\'notagoodpwd\');\n+-------------------------------------------+\n| PASSWORD(\'notagoodpwd\') |\n+-------------------------------------------+\n| *3A70EE9FC6594F88CE9E959CD51C5A1C002DC937 |\n+-------------------------------------------+\n\nSET PASSWORD FOR \'bob\'@\'%.loc.gov\' = PASSWORD(\'newpass\');\n\nURL: https://mariadb.com/kb/en/password/','','https://mariadb.com/kb/en/password/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (137,12,'SHA1','Syntax\n------\n\nSHA1(str), SHA(str)\n\nDescription\n-----------\n\nCalculates an SHA-1 160-bit checksum for the string str, as described in RFC\n3174 (Secure Hash Algorithm).\n\nThe value is returned as a string of 40 hex digits, or NULL if the argument\nwas NULL. As of MariaDB 5.5, the return value is a nonbinary string in the\nconnection character set and collation, determined by the values of the\ncharacter_set_connection and collation_connection system variables. Before\n5.5, the return value was a binary string.\n\nExamples\n--------\n\nSELECT SHA1(\'some boring text\');\n+------------------------------------------+\n| SHA1(\'some boring text\') |\n+------------------------------------------+\n| af969fc2085b1bb6d31e517d5c456def5cdd7093 |\n+------------------------------------------+\n\nURL: https://mariadb.com/kb/en/sha1/','','https://mariadb.com/kb/en/sha1/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (138,12,'SHA2','Syntax\n------\n\nSHA2(str,hash_len)\n\nDescription\n-----------\n\nGiven a string str, calculates an SHA-2 checksum, which is considered more\ncryptographically secure than its SHA-1 equivalent. The SHA-2 family includes\nSHA-224, SHA-256, SHA-384, and SHA-512, and the hash_len must correspond to\none of these, i.e. 224, 256, 384 or 512. 0 is equivalent to 256.\n\nThe return value is a nonbinary string in the connection character set and\ncollation, determined by the values of the character_set_connection and\ncollation_connection system variables.\n\nNULL is returned if the hash length is not valid, or the string str is NULL.\n\nSHA2 will only work if MariaDB was has been configured with TLS support.\n\nExamples\n--------\n\nSELECT SHA2(\'Maria\',224);\n+----------------------------------------------------------+\n| SHA2(\'Maria\',224) |\n+----------------------------------------------------------+\n| 6cc67add32286412efcab9d0e1675a43a5c2ef3cec8879f81516ff83 |\n+----------------------------------------------------------+\n\nSELECT SHA2(\'Maria\',256);\n+------------------------------------------------------------------+\n| SHA2(\'Maria\',256) |\n+------------------------------------------------------------------+\n| 9ff18ebe7449349f358e3af0b57cf7a032c1c6b2272cb2656ff85eb112232f16 |\n+------------------------------------------------------------------+\n\nSELECT SHA2(\'Maria\',0);\n+------------------------------------------------------------------+\n| SHA2(\'Maria\',0) |\n+------------------------------------------------------------------+\n| 9ff18ebe7449349f358e3af0b57cf7a032c1c6b2272cb2656ff85eb112232f16 |\n+------------------------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/sha2/','','https://mariadb.com/kb/en/sha2/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (139,13,'ENDPOINT','A synonym for ST_ENDPOINT.\n\nURL: https://mariadb.com/kb/en/linestring-properties-endpoint/','','https://mariadb.com/kb/en/linestring-properties-endpoint/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (140,13,'GLENGTH','Syntax\n------\n\nGLength(ls)\n\nDescription\n-----------\n\nReturns as a double-precision number the length of the LineString value ls in\nits associated spatial reference.\n\nExamples\n--------\n\nSET @ls = \'LineString(1 1,2 2,3 3)\';\n\nSELECT GLength(GeomFromText(@ls));\n+----------------------------+\n| GLength(GeomFromText(@ls)) |\n+----------------------------+\n| 2.82842712474619 |\n+----------------------------+\n\nURL: https://mariadb.com/kb/en/glength/','','https://mariadb.com/kb/en/glength/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (141,13,'NumPoints','A synonym for ST_NumPoints.\n\nURL: https://mariadb.com/kb/en/linestring-properties-numpoints/','','https://mariadb.com/kb/en/linestring-properties-numpoints/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (142,13,'PointN','A synonym for ST_PointN.\n\nURL: https://mariadb.com/kb/en/linestring-properties-pointn/','','https://mariadb.com/kb/en/linestring-properties-pointn/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (143,13,'STARTPOINT','A synonym for ST_STARTPOINT.\n\nURL: https://mariadb.com/kb/en/linestring-properties-startpoint/','','https://mariadb.com/kb/en/linestring-properties-startpoint/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (144,13,'ST_ENDPOINT','Syntax\n------\n\nST_EndPoint(ls)\nEndPoint(ls)\n\nDescription\n-----------\n\nReturns the Point that is the endpoint of the LineString value ls.\n\nST_EndPoint() and EndPoint() are synonyms.\n\nExamples\n--------\n\nSET @ls = \'LineString(1 1,2 2,3 3)\';\n\nSELECT AsText(EndPoint(GeomFromText(@ls)));\n+-------------------------------------+\n| AsText(EndPoint(GeomFromText(@ls))) |\n+-------------------------------------+\n| POINT(3 3) |\n+-------------------------------------+\n\nURL: https://mariadb.com/kb/en/st_endpoint/','','https://mariadb.com/kb/en/st_endpoint/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (145,13,'ST_NUMPOINTS','Syntax\n------\n\nST_NumPoints(ls)\nNumPoints(ls)\n\nDescription\n-----------\n\nReturns the number of Point objects in the LineString value ls.\n\nST_NumPoints() and NumPoints() are synonyms.\n\nExamples\n--------\n\nSET @ls = \'LineString(1 1,2 2,3 3)\';\n\nSELECT NumPoints(GeomFromText(@ls));\n+------------------------------+\n| NumPoints(GeomFromText(@ls)) |\n+------------------------------+\n| 3 |\n+------------------------------+\n\nURL: https://mariadb.com/kb/en/st_numpoints/','','https://mariadb.com/kb/en/st_numpoints/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (146,13,'ST_POINTN','Syntax\n------\n\nST_PointN(ls,N)\nPointN(ls,N)\n\nDescription\n-----------\n\nReturns the N-th Point in the LineString value ls. Points are numbered\nbeginning with 1.\n\nST_PointN() and PointN() are synonyms.\n\nExamples\n--------\n\nSET @ls = \'LineString(1 1,2 2,3 3)\';\n\nSELECT AsText(PointN(GeomFromText(@ls),2));\n+-------------------------------------+\n| AsText(PointN(GeomFromText(@ls),2)) |\n+-------------------------------------+\n| POINT(2 2) |\n+-------------------------------------+\n\nURL: https://mariadb.com/kb/en/st_pointn/','','https://mariadb.com/kb/en/st_pointn/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (147,13,'ST_STARTPOINT','Syntax\n------\n\nST_StartPoint(ls)\nStartPoint(ls)\n\nDescription\n-----------\n\nReturns the Point that is the start point of the LineString value ls.\n\nST_StartPoint() and StartPoint() are synonyms.\n\nExamples\n--------\n\nSET @ls = \'LineString(1 1,2 2,3 3)\';\n\nSELECT AsText(StartPoint(GeomFromText(@ls)));\n+---------------------------------------+\n| AsText(StartPoint(GeomFromText(@ls))) |\n+---------------------------------------+\n| POINT(1 1) |\n+---------------------------------------+\n\nURL: https://mariadb.com/kb/en/st_startpoint/','','https://mariadb.com/kb/en/st_startpoint/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (148,14,'GET_LOCK','Syntax\n------\n\nGET_LOCK(str,timeout)\n\nDescription\n-----------\n\nTries to obtain a lock with a name given by the string str, using a timeout of\ntimeout seconds. Returns 1 if the lock was obtained successfully, 0 if the\nattempt timed out (for example, because another client has previously locked\nthe name), or NULL if an error occurred (such as running out of memory or the\nthread was killed with mysqladmin kill).\n\nA lock is released with RELEASE_LOCK(), when the connection terminates (either\nnormally or abnormally). A connection can hold multiple locks at the same\ntime, so a lock that is no longer needed needs to be explicitly released.\n\nThe IS_FREE_LOCK function returns whether a specified lock a free or not, and\nthe IS_USED_LOCK whether the function is in use or not.\n\nLocks obtained with GET_LOCK() do not interact with transactions. That is,\ncommitting a transaction does not release any such locks obtained during the\ntransaction.\n\nIt is also possible to recursively set the same lock. If a lock with the same\nname is set n times, it needs to be released n times as well.\n\nstr is case insensitive for GET_LOCK() and related functions. If str is an\nempty string or NULL, GET_LOCK() returns NULL and does nothing. From MariaDB\n10.2.2, timeout supports microseconds. Before then, it was rounded to the\nclosest integer.\n\nIf the metadata_lock_info plugin is installed, locks acquired with this\nfunction are visible in the Information Schema METADATA_LOCK_INFO table.\n\nThis function can be used to implement application locks or to simulate record\nlocks. Names are locked on a server-wide basis. If a name has been locked by\none client, GET_LOCK() blocks any request by another client for a lock with\nthe same name. This allows clients that agree on a given lock name to use the\nname to perform cooperative advisory locking. But be aware that it also allows\na client that is not among the set of cooperating clients to lock a name,\neither inadvertently or deliberately, and thus prevent any of the cooperating\nclients from locking that name. One way to reduce the likelihood of this is to\nuse lock names that are database-specific or application-specific. For\nexample, use lock names of the form db_name.str or app_name.str.\n\nStatements using the GET_LOCK function are not safe for statement-based\nreplication.\n\nThe patch to permit multiple locks was contributed by Konstantin \"Kostja\"\nOsipov (MDEV-3917).\n\nExamples\n--------\n\nSELECT GET_LOCK(\'lock1\',10);\n+----------------------+\n| GET_LOCK(\'lock1\',10) |\n+----------------------+\n| 1 |\n+----------------------+\n\nSELECT IS_FREE_LOCK(\'lock1\'), IS_USED_LOCK(\'lock1\');\n+-----------------------+-----------------------+\n| IS_FREE_LOCK(\'lock1\') | IS_USED_LOCK(\'lock1\') |\n+-----------------------+-----------------------+\n| 0 | 46 |\n+-----------------------+-----------------------+\n\nSELECT IS_FREE_LOCK(\'lock2\'), IS_USED_LOCK(\'lock2\');\n+-----------------------+-----------------------+\n| IS_FREE_LOCK(\'lock2\') | IS_USED_LOCK(\'lock2\') |\n+-----------------------+-----------------------+\n| 1 | NULL |\n+-----------------------+-----------------------+\n\nMultiple locks can be held:\n\nSELECT GET_LOCK(\'lock2\',10);\n+----------------------+\n| GET_LOCK(\'lock2\',10) |\n+----------------------+\n| 1 |\n+----------------------+\n\nSELECT IS_FREE_LOCK(\'lock1\'), IS_FREE_LOCK(\'lock2\');\n+-----------------------+-----------------------+\n| IS_FREE_LOCK(\'lock1\') | IS_FREE_LOCK(\'lock2\') |\n+-----------------------+-----------------------+\n| 0 | 0 |\n+-----------------------+-----------------------+\n\nSELECT RELEASE_LOCK(\'lock1\'), RELEASE_LOCK(\'lock2\');\n+-----------------------+-----------------------+\n| RELEASE_LOCK(\'lock1\') | RELEASE_LOCK(\'lock2\') |\n+-----------------------+-----------------------+\n| 1 | 1 |\n+-----------------------+-----------------------+\n\nIt is possible to hold the same lock recursively. This example is viewed using\nthe metadata_lock_info plugin:\n\nSELECT GET_LOCK(\'lock3\',10);\n+----------------------+\n| GET_LOCK(\'lock3\',10) |\n+----------------------+\n| 1 |\n+----------------------+\n\nSELECT GET_LOCK(\'lock3\',10);\n+----------------------+\n| GET_LOCK(\'lock3\',10) |\n+----------------------+\n| 1 |\n+----------------------+\n\nSELECT * FROM INFORMATION_SCHEMA.METADATA_LOCK_INFO;\n+-----------+---------------------+---------------+-----------+--------------+-\n----------+\n| THREAD_ID | LOCK_MODE | LOCK_DURATION | LOCK_TYPE | TABLE_SCHEMA |\nTABLE_NAME |\n+-----------+---------------------+---------------+-----------+--------------+-\n----------+\n| 46 | MDL_SHARED_NO_WRITE | NULL | User lock | lock3 |\n |\n+-----------+---------------------+---------------+-----------+--------------+-\n----------+\n\nSELECT RELEASE_LOCK(\'lock3\');\n+-----------------------+\n| RELEASE_LOCK(\'lock3\') |\n+-----------------------+\n| 1 |\n+-----------------------+\n\nSELECT * FROM INFORMATION_SCHEMA.METADATA_LOCK_INFO;\n+-----------+---------------------+---------------+-----------+--------------+-\n----------+\n| THREAD_ID | LOCK_MODE | LOCK_DURATION | LOCK_TYPE | TABLE_SCHEMA |\nTABLE_NAME |\n+-----------+---------------------+---------------+-----------+--------------+-\n----------+\n| 46 | MDL_SHARED_NO_WRITE | NULL | User lock | lock3 |\n |\n+-----------+---------------------+---------------+-----------+--------------+-\n----------+\n\nSELECT RELEASE_LOCK(\'lock3\');\n+-----------------------+\n| RELEASE_LOCK(\'lock3\') |\n+-----------------------+\n| 1 |\n+-----------------------+\n\nSELECT * FROM INFORMATION_SCHEMA.METADATA_LOCK_INFO;\nEmpty set (0.000 sec)\n\nTimeout example: Connection 1:\n\nSELECT GET_LOCK(\'lock4\',10);\n+----------------------+\n| GET_LOCK(\'lock4\',10) |\n+----------------------+\n| 1 |\n+----------------------+\n\nConnection 2:\n\nSELECT GET_LOCK(\'lock4\',10);\n\nAfter 10 seconds...\n\n+----------------------+\n| GET_LOCK(\'lock4\',10) |\n+----------------------+\n| 0 |\n+----------------------+\n\nDeadlocks are automatically detected and resolved. Connection 1:\n\nSELECT GET_LOCK(\'lock5\',10); \n+----------------------+\n| GET_LOCK(\'lock5\',10) |\n+----------------------+\n| 1 |\n+----------------------+\n\nConnection 2:\n\nSELECT GET_LOCK(\'lock6\',10);\n+----------------------+\n| GET_LOCK(\'lock6\',10) |\n+----------------------+\n| 1 |\n+----------------------+\n\nConnection 1:\n\nSELECT GET_LOCK(\'lock6\',10); \n+----------------------+\n| GET_LOCK(\'lock6\',10) |\n+----------------------+\n| 0 |\n+----------------------+\n\nConnection 2:\n\nSELECT GET_LOCK(\'lock5\',10);\nERROR 1213 (40001): Deadlock found when trying to get lock; try restarting\ntransaction\n\nURL: https://mariadb.com/kb/en/get_lock/','','https://mariadb.com/kb/en/get_lock/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (149,14,'INET6_ATON','Syntax\n------\n\nINET6_ATON(expr)\n\nDescription\n-----------\n\nGiven an IPv6 or IPv4 network address as a string, returns a binary string\nthat represents the numeric value of the address.\n\nNo trailing zone ID\'s or traling network masks are permitted. For IPv4\naddresses, or IPv6 addresses with IPv4 address parts, no classful addresses or\ntrailing port numbers are permitted and octal numbers are not supported.\n\nThe returned binary string will be VARBINARY(16) or VARBINARY(4) for IPv6 and\nIPv4 addresses respectively.\n\nReturns NULL if the argument is not understood.\n\nMariaDB starting with 10.5.0\n----------------------------\nFrom MariaDB 10.5.0, INET6_ATON can take INET6 as an argument.\n\nExamples\n--------\n\nSELECT HEX(INET6_ATON(\'10.0.1.1\'));\n+-----------------------------+\n| HEX(INET6_ATON(\'10.0.1.1\')) |\n+-----------------------------+\n| 0A000101 |\n+-----------------------------+\n\nSELECT HEX(INET6_ATON(\'48f3::d432:1431:ba23:846f\'));\n+----------------------------------------------+\n| HEX(INET6_ATON(\'48f3::d432:1431:ba23:846f\')) |\n+----------------------------------------------+\n| 48F3000000000000D4321431BA23846F |\n+----------------------------------------------+\n\nURL: https://mariadb.com/kb/en/inet6_aton/','','https://mariadb.com/kb/en/inet6_aton/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (150,14,'INET6_NTOA','Syntax\n------\n\nINET6_NTOA(expr)\n\nDescription\n-----------\n\nGiven an IPv6 or IPv4 network address as a numeric binary string, returns the\naddress as a nonbinary string in the connection character set.\n\nThe return string is lowercase, and is platform independent, since it does not\nuse functions specific to the operating system. It has a maximum length of 39\ncharacters.\n\nReturns NULL if the argument is not understood.\n\nExamples\n--------\n\nSELECT INET6_NTOA(UNHEX(\'0A000101\'));\n+-------------------------------+\n| INET6_NTOA(UNHEX(\'0A000101\')) |\n+-------------------------------+\n| 10.0.1.1 |\n+-------------------------------+\n\nSELECT INET6_NTOA(UNHEX(\'48F3000000000000D4321431BA23846F\'));\n+-------------------------------------------------------+\n| INET6_NTOA(UNHEX(\'48F3000000000000D4321431BA23846F\')) |\n+-------------------------------------------------------+\n| 48f3::d432:1431:ba23:846f |\n+-------------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/inet6_ntoa/','','https://mariadb.com/kb/en/inet6_ntoa/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (151,14,'INET_ATON','Syntax\n------\n\nINET_ATON(expr)\n\nDescription\n-----------\n\nGiven the dotted-quad representation of an IPv4 network address as a string,\nreturns an integer that represents the numeric value of the address. Addresses\nmay be 4- or 8-byte addresses.\n\nReturns NULL if the argument is not understood.\n\nExamples\n--------\n\nSELECT INET_ATON(\'192.168.1.1\');\n+--------------------------+\n| INET_ATON(\'192.168.1.1\') |\n+--------------------------+\n| 3232235777 |\n+--------------------------+\n\nThis is calculated as follows: 192 x 2563 + 168 x 256 2 + 1 x 256 + 1\n\nURL: https://mariadb.com/kb/en/inet_aton/','','https://mariadb.com/kb/en/inet_aton/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (152,14,'INET_NTOA','Syntax\n------\n\nINET_NTOA(expr)\n\nDescription\n-----------\n\nGiven a numeric IPv4 network address in network byte order (4 or 8 byte),\nreturns the dotted-quad representation of the address as a string.\n\nExamples\n--------\n\nSELECT INET_NTOA(3232235777);\n+-----------------------+\n| INET_NTOA(3232235777) |\n+-----------------------+\n| 192.168.1.1 |\n+-----------------------+\n\n192.168.1.1 corresponds to 3232235777 since 192 x 2563 + 168 x 256 2 + 1 x 256\n+ 1 = 3232235777\n\nURL: https://mariadb.com/kb/en/inet_ntoa/','','https://mariadb.com/kb/en/inet_ntoa/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (153,14,'IS_FREE_LOCK','Syntax\n------\n\nIS_FREE_LOCK(str)\n\nDescription\n-----------\n\nChecks whether the lock named str is free to use (that is, not locked).\nReturns 1 if the lock is free (no one is using the lock), 0 if the lock is in\nuse, and NULL if an error occurs (such as an incorrect argument, like an empty\nstring or NULL). str is case insensitive.\n\nIf the metadata_lock_info plugin is installed, the Information Schema\nmetadata_lock_info table contains information about locks of this kind (as\nwell as metadata locks).\n\nStatements using the IS_FREE_LOCK function are not safe for statement-based\nreplication.\n\nURL: https://mariadb.com/kb/en/is_free_lock/','','https://mariadb.com/kb/en/is_free_lock/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (154,14,'IS_IPV4','Syntax\n------\n\nIS_IPV4(expr)\n\nDescription\n-----------\n\nIf the expression is a valid IPv4 address, returns 1, otherwise returns 0.\n\nIS_IPV4() is stricter than INET_ATON(), but as strict as INET6_ATON(), in\ndetermining the validity of an IPv4 address. This implies that if IS_IPV4\nreturns 1, the same expression will always return a non-NULL result when\npassed to INET_ATON(), but that the reverse may not apply.\n\nExamples\n--------\n\nSELECT IS_IPV4(\'1110.0.1.1\');\n+-----------------------+\n| IS_IPV4(\'1110.0.1.1\') |\n+-----------------------+\n| 0 |\n+-----------------------+\n\nSELECT IS_IPV4(\'48f3::d432:1431:ba23:846f\');\n+--------------------------------------+\n| IS_IPV4(\'48f3::d432:1431:ba23:846f\') |\n+--------------------------------------+\n| 0 |\n+--------------------------------------+\n\nURL: https://mariadb.com/kb/en/is_ipv4/','','https://mariadb.com/kb/en/is_ipv4/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (155,14,'IS_IPV4_COMPAT','Syntax\n------\n\nIS_IPV4_COMPAT(expr)\n\nDescription\n-----------\n\nReturns 1 if a given numeric binary string IPv6 address, such as returned by\nINET6_ATON(), is IPv4-compatible, otherwise returns 0.\n\nMariaDB starting with 10.5.0\n----------------------------\nFrom MariaDB 10.5.0, when the argument is not INET6, automatic implicit CAST\nto INET6 is applied. As a consequence, IS_IPV4_COMPAT now understands\narguments in both text representation and binary(16) representation. Before\nMariaDB 10.5.0, the function understood only binary(16) representation.\n\nExamples\n--------\n\nSELECT IS_IPV4_COMPAT(INET6_ATON(\'::10.0.1.1\'));\n+------------------------------------------+\n| IS_IPV4_COMPAT(INET6_ATON(\'::10.0.1.1\')) |\n+------------------------------------------+\n| 1 |\n+------------------------------------------+\n\nSELECT IS_IPV4_COMPAT(INET6_ATON(\'::48f3::d432:1431:ba23:846f\'));\n+-----------------------------------------------------------+\n| IS_IPV4_COMPAT(INET6_ATON(\'::48f3::d432:1431:ba23:846f\')) |\n+-----------------------------------------------------------+\n| 0 |\n+-----------------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/is_ipv4_compat/','','https://mariadb.com/kb/en/is_ipv4_compat/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (156,14,'IS_IPV4_MAPPED','Syntax\n------\n\nIS_IPV4_MAPPED(expr)\n\nDescription\n-----------\n\nReturns 1 if a given a numeric binary string IPv6 address, such as returned by\nINET6_ATON(), is a valid IPv4-mapped address, otherwise returns 0.\n\nMariaDB starting with 10.5.0\n----------------------------\nFrom MariaDB 10.5.0, when the argument is not INET6, automatic implicit CAST\nto INET6 is applied. As a consequence, IS_IPV4_MAPPED now understands\narguments in both text representation and binary(16) representation. Before\nMariaDB 10.5.0, the function understood only binary(16) representation.\n\nExamples\n--------\n\nSELECT IS_IPV4_MAPPED(INET6_ATON(\'::10.0.1.1\'));\n+------------------------------------------+\n| IS_IPV4_MAPPED(INET6_ATON(\'::10.0.1.1\')) |\n+------------------------------------------+\n| 0 |\n+------------------------------------------+\n\nSELECT IS_IPV4_MAPPED(INET6_ATON(\'::ffff:10.0.1.1\'));\n+-----------------------------------------------+\n| IS_IPV4_MAPPED(INET6_ATON(\'::ffff:10.0.1.1\')) |\n+-----------------------------------------------+\n| 1 |\n+-----------------------------------------------+\n\nURL: https://mariadb.com/kb/en/is_ipv4_mapped/','','https://mariadb.com/kb/en/is_ipv4_mapped/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (157,14,'IS_IPV6','Syntax\n------\n\nIS_IPV6(expr)\n\nDescription\n-----------\n\nReturns 1 if the expression is a valid IPv6 address specified as a string,\notherwise returns 0. Does not consider IPv4 addresses to be valid IPv6\naddresses.\n\nExamples\n--------\n\nSELECT IS_IPV6(\'48f3::d432:1431:ba23:846f\');\n+--------------------------------------+\n| IS_IPV6(\'48f3::d432:1431:ba23:846f\') |\n+--------------------------------------+\n| 1 |\n+--------------------------------------+\n1 row in set (0.02 sec)\n\nSELECT IS_IPV6(\'10.0.1.1\');\n+---------------------+\n| IS_IPV6(\'10.0.1.1\') |\n+---------------------+\n| 0 |\n+---------------------+\n\nURL: https://mariadb.com/kb/en/is_ipv6/','','https://mariadb.com/kb/en/is_ipv6/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (158,14,'IS_USED_LOCK','Syntax\n------\n\nIS_USED_LOCK(str)\n\nDescription\n-----------\n\nChecks whether the lock named str is in use (that is, locked). If so, it\nreturns the connection identifier of the client that holds the lock.\nOtherwise, it returns NULL. str is case insensitive.\n\nIf the metadata_lock_info plugin is installed, the Information Schema\nmetadata_lock_info table contains information about locks of this kind (as\nwell as metadata locks).\n\nStatements using the IS_USED_LOCK function are not safe for statement-based\nreplication.\n\nURL: https://mariadb.com/kb/en/is_used_lock/','','https://mariadb.com/kb/en/is_used_lock/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (159,14,'MASTER_GTID_WAIT','Syntax\n------\n\nMASTER_GTID_WAIT(gtid-list[, timeout)\n\nDescription\n-----------\n\nThis function takes a string containing a comma-separated list of global\ntransaction id\'s (similar to the value of, for example, gtid_binlog_pos). It\nwaits until the value of gtid_slave_pos has the same or higher seq_no within\nall replication domains specified in the gtid-list; in other words, it waits\nuntil the slave has reached the specified GTID position.\n\nAn optional second argument gives a timeout in seconds. If the timeout expires\nbefore the specified GTID position is reached, then the function returns -1.\nPassing NULL or a negative number for the timeout means no timeout, and the\nfunction will wait indefinitely.\n\nIf the wait completes without a timeout, 0 is returned. Passing NULL for the\ngtid-list makes the function return NULL immediately, without waiting.\n\nThe gtid-list may be the empty string, in which case MASTER_GTID_WAIT()\nreturns immediately. If the gtid-list contains fewer domains than\ngtid_slave_pos, then only those domains are waited upon. If gtid-list contains\na domain that is not present in @@gtid_slave_pos, then MASTER_GTID_WAIT() will\nwait until an event containing such domain_id arrives on the slave (or until\ntimed out or killed).\n\nMASTER_GTID_WAIT() can be useful to ensure that a slave has caught up to a\nmaster. Simply take the value of gtid_binlog_pos on the master, and use it in\na MASTER_GTID_WAIT() call on the slave; when the call completes, the slave\nwill have caught up with that master position.\n\nMASTER_GTID_WAIT() can also be used in client applications together with the\nlast_gtid session variable. This is useful in a read-scaleout replication\nsetup, where the application writes to a single master but divides the reads\nout to a number of slaves to distribute the load. In such a setup, there is a\nrisk that an application could first do an update on the master, and then a\nbit later do a read on a slave, and if the slave is not fast enough, the data\nread from the slave might not include the update just made, possibly confusing\nthe application and/or the end-user. One way to avoid this is to request the\nvalue of last_gtid on the master just after the update. Then before doing the\nread on the slave, do a MASTER_GTID_WAIT() on the value obtained from the\nmaster; this will ensure that the read is not performed until the slave has\nreplicated sufficiently far for the update to have become visible.\n\nNote that MASTER_GTID_WAIT() can be used even if the slave is configured not\nto use GTID for connections (CHANGE MASTER TO master_use_gtid=no). This is\nbecause from MariaDB 10, GTIDs are always logged on the master server, and\nalways recorded on the slave servers.\n\nDifferences to MASTER_POS_WAIT()\n--------------------------------\n\n* MASTER_GTID_WAIT() is global; it waits for any master connection to reach\n the specified GTID position. MASTER_POS_WAIT() works only against a\n specific connection. This also means that while MASTER_POS_WAIT() aborts if\n its master connection is terminated with STOP SLAVE or due to an error,\n MASTER_GTID_WAIT() continues to wait while slaves are stopped.\n\n* MASTER_GTID_WAIT() can take its timeout as a floating-point value, so a\n timeout in fractional seconds is supported, eg. MASTER_GTID_WAIT(\"0-1-100\",\n 0.5). (The minimum wait is one microsecond, 0.000001 seconds).\n\n* MASTER_GTID_WAIT() allows one to specify a timeout of zero in order to do a\n non-blocking check to see if the slaves have progressed to a specific GTID\nposition\n (MASTER_POS_WAIT() takes a zero timeout as meaning an infinite wait). To do\n an infinite MASTER_GTID_WAIT(), specify a negative timeout, or omit the\n timeout argument.\n\n* MASTER_GTID_WAIT() does not return the number of events executed since the\n wait started, nor does it return NULL if a slave thread is stopped. It\n always returns either 0 for successful wait completed, or -1 for timeout\n reached (or NULL if the specified gtid-pos is NULL).\n\nSince MASTER_GTID_WAIT() looks only at the seq_no part of the GTIDs, not the\nserver_id, care is needed if a slave becomes diverged from another server so\nthat two different GTIDs with the same seq_no (in the same domain) arrive at\nthe same server. This situation is in any case best avoided; setting\ngtid_strict_mode is recommended, as this will prevent any such out-of-order\nsequence numbers from ever being replicated on a slave.\n\nURL: https://mariadb.com/kb/en/master_gtid_wait/','','https://mariadb.com/kb/en/master_gtid_wait/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (160,14,'MASTER_POS_WAIT','Syntax\n------\n\nMASTER_POS_WAIT(log_name,log_pos[,timeout,[\"connection_name\"]])\n\nDescription\n-----------\n\nThis function is useful in replication for controlling primary/replica\nsynchronization. It blocks until the replica has read and applied all updates\nup to the specified position (log_name,log_pos) in the primary log. The return\nvalue is the number of log events the replica had to wait for to advance to\nthe specified position. The function returns NULL if the replica SQL thread is\nnot started, the replica\'s primary information is not initialized, the\narguments are incorrect, or an error occurs. It returns -1 if the timeout has\nbeen exceeded. If the replica SQL thread stops while MASTER_POS_WAIT() is\nwaiting, the function returns NULL. If the replica is past the specified\nposition, the function returns immediately.\n\nIf a timeout value is specified, MASTER_POS_WAIT() stops waiting when timeout\nseconds have elapsed. timeout must be greater than 0; a zero or negative\ntimeout means no timeout.\n\nThe connection_name is used when you are using multi-source-replication. If\nyou don\'t specify it, it\'s set to the value of the default_master_connection\nsystem variable.\n\nStatements using the MASTER_POS_WAIT() function are not safe for replication.\n\nURL: https://mariadb.com/kb/en/master_pos_wait/','','https://mariadb.com/kb/en/master_pos_wait/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (161,14,'NAME_CONST','Syntax\n------\n\nNAME_CONST(name,value)\n\nDescription\n-----------\n\nReturns the given value. When used to produce a result set column,\nNAME_CONST() causes the column to have the given name. The arguments should be\nconstants.\n\nThis function is used internally when replicating stored procedures. It makes\nlittle sense to use it explicitly in SQL statements, and it was not supposed\nto be used like that.\n\nSELECT NAME_CONST(\'myname\', 14);\n+--------+\n| myname |\n+--------+\n| 14 |\n+--------+\n\nURL: https://mariadb.com/kb/en/name_const/','','https://mariadb.com/kb/en/name_const/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (162,14,'RELEASE_ALL_LOCKS','MariaDB until 10.5.2\n--------------------\nRELEASE_ALL_LOCKS was added in MariaDB 10.5.2.\n\nSyntax\n------\n\nRELEASE_ALL_LOCKS()\n\nDescription\n-----------\n\nReleases all named locks held by the current session. Returns the number of\nlocks released, or 0 if none were held.\n\nStatements using the RELEASE_ALL_LOCKS function are not safe for\nstatement-based replication.\n\nExamples\n--------\n\nSELECT RELEASE_ALL_LOCKS();\n+---------------------+\n| RELEASE_ALL_LOCKS() | \n+---------------------+\n| 0 |\n+---------------------+\n\nSELECT GET_LOCK(\'lock1\',10);\n+----------------------+\n| GET_LOCK(\'lock1\',10) |\n+----------------------+\n| 1 |\n+----------------------+\n\nSELECT RELEASE_ALL_LOCKS();\n+---------------------+\n| RELEASE_ALL_LOCKS() | \n+---------------------+\n| 1 |\n+---------------------+\n\nURL: https://mariadb.com/kb/en/release_all_locks/','','https://mariadb.com/kb/en/release_all_locks/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (163,14,'RELEASE_LOCK','Syntax\n------\n\nRELEASE_LOCK(str)\n\nDescription\n-----------\n\nReleases the lock named by the string str that was obtained with GET_LOCK().\nReturns 1 if the lock was released, 0 if the lock was not established by this\nthread (in which case the lock is not released), and NULL if the named lock\ndid not exist. The lock does not exist if it was never obtained by a call to\nGET_LOCK() or if it has previously been released.\n\nstr is case insensitive. If str is an empty string or NULL, RELEASE_LOCK()\nreturns NULL and does nothing.\n\nStatements using the RELEASE_LOCK() function are not safe for replication.\n\nThe DO statement is convenient to use with RELEASE_LOCK().\n\nExamples\n--------\n\nConnection1:\n\nSELECT GET_LOCK(\'lock1\',10);\n+----------------------+\n| GET_LOCK(\'lock1\',10) |\n+----------------------+\n| 1 |\n+----------------------+\n\nConnection 2:\n\nSELECT GET_LOCK(\'lock2\',10);\n+----------------------+\n| GET_LOCK(\'lock2\',10) |\n+----------------------+\n| 1 |\n+----------------------+\n\nConnection 1:\n\nSELECT RELEASE_LOCK(\'lock1\'), RELEASE_LOCK(\'lock2\'), RELEASE_LOCK(\'lock3\');\n+-----------------------+-----------------------+-----------------------+\n| RELEASE_LOCK(\'lock1\') | RELEASE_LOCK(\'lock2\') | RELEASE_LOCK(\'lock3\') |\n+-----------------------+-----------------------+-----------------------+\n| 1 | 0 | NULL |\n+-----------------------+-----------------------+-----------------------+\n\nFrom MariaDB 10.0.2, it is possible to hold the same lock recursively. This\nexample is viewed using the metadata_lock_info plugin:\n\nSELECT GET_LOCK(\'lock3\',10);\n+----------------------+\n| GET_LOCK(\'lock3\',10) |\n+----------------------+\n| 1 |\n+----------------------+\n\nSELECT GET_LOCK(\'lock3\',10);\n+----------------------+\n| GET_LOCK(\'lock3\',10) |\n+----------------------+\n| 1 |\n+----------------------+\n\nSELECT * FROM INFORMATION_SCHEMA.METADATA_LOCK_INFO;\n+-----------+---------------------+---------------+-----------+--------------+-\n----------+\n| THREAD_ID | LOCK_MODE | LOCK_DURATION | LOCK_TYPE | TABLE_SCHEMA |\nTABLE_NAME |\n+-----------+---------------------+---------------+-----------+--------------+-\n----------+\n| 46 | MDL_SHARED_NO_WRITE | NULL | User lock | lock3 |\n |\n+-----------+---------------------+---------------+-----------+--------------+-\n----------+\n\nSELECT RELEASE_LOCK(\'lock3\');\n+-----------------------+\n| RELEASE_LOCK(\'lock3\') |\n+-----------------------+\n| 1 |\n+-----------------------+\n\nSELECT * FROM INFORMATION_SCHEMA.METADATA_LOCK_INFO;\n+-----------+---------------------+---------------+-----------+--------------+-\n----------+\n| THREAD_ID | LOCK_MODE | LOCK_DURATION | LOCK_TYPE | TABLE_SCHEMA |\nTABLE_NAME |\n+-----------+---------------------+---------------+-----------+--------------+-\n----------+\n| 46 | MDL_SHARED_NO_WRITE | NULL | User lock | lock3 |\n |\n+-----------+---------------------+---------------+-----------+--------------+-\n----------+\n\nSELECT RELEASE_LOCK(\'lock3\');\n+-----------------------+\n| RELEASE_LOCK(\'lock3\') |\n+-----------------------+\n| 1 |\n+-----------------------+\n\nSELECT * FROM INFORMATION_SCHEMA.METADATA_LOCK_INFO;\nEmpty set (0.000 sec)\n\nURL: https://mariadb.com/kb/en/release_lock/','','https://mariadb.com/kb/en/release_lock/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (164,14,'SLEEP','Syntax\n------\n\nSLEEP(duration)\n\nDescription\n-----------\n\nSleeps (pauses) for the number of seconds given by the duration argument, then\nreturns 0. If SLEEP() is interrupted, it returns 1. The duration may have a\nfractional part given in microseconds.\n\nStatements using the SLEEP() function are not safe for replication.\n\nExample\n-------\n\nSELECT SLEEP(5.5);\n+------------+\n| SLEEP(5.5) |\n+------------+\n| 0 |\n+------------+\n1 row in set (5.50 sec)\n\nURL: https://mariadb.com/kb/en/sleep/','','https://mariadb.com/kb/en/sleep/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (165,14,'SYS_GUID','MariaDB starting with 10.6.1\n----------------------------\nThe SYS_GUID function was introduced in MariaDB 10.6.1 to enhance Oracle\ncompatibility. Similar functionality can be achieved with the UUID function.\n\nSyntax\n------\n\nSYS_GUID()\n\nDescription\n-----------\n\nReturns a 16-byte globally unique identifier (GUID), similar to the UUID\nfunction, but without the - character.\n\nExample\n-------\n\nSELECT SYS_GUID();\n+----------------------------------+\n| SYS_GUID() |\n+----------------------------------+\n| 2C574E45BA2811EBB265F859713E4BE4 |\n+----------------------------------+\n\nURL: https://mariadb.com/kb/en/sys_guid/','','https://mariadb.com/kb/en/sys_guid/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (166,14,'UUID','Syntax\n------\n\nUUID()\n\nDescription\n-----------\n\nReturns a Universally Unique Identifier (UUID).\n\nA UUID is designed as a number that is globally unique in space and time. Two\ncalls to UUID() are expected to generate two different values, even if these\ncalls are performed on two separate computers that are not connected to each\nother.\n\nUUID() results are intended to be unique, but cannot always be relied upon to\nunpredictable and unguessable, so should not be relied upon for these purposes.\n\nA UUID is a 128-bit number represented by a utf8 string of five hexadecimal\nnumbers in aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee format:\n\n* The first three numbers are generated from a timestamp.\n* The fourth number preserves temporal uniqueness in case the timestamp value\n loses monotonicity (for example, due to daylight saving time).\n* The fifth number is an IEEE 802 node number that provides spatial uniqueness.\n A random number is substituted if the latter is not available (for example,\n because the host computer has no Ethernet card, or we do not know how to find\n the hardware address of an interface on your operating system). In this case,\n spatial uniqueness cannot be guaranteed. Nevertheless, a collision should\n have very low probability.\n\nCurrently, the MAC address of an interface is taken into account only on\nFreeBSD and Linux. On other operating systems, MariaDB uses a randomly\ngenerated 48-bit number.\n\nStatements using the UUID() function are not safe for replication.\n\nThe results are generated according to the \"DCE 1.1:Remote Procedure Call\"\n(Appendix A) CAE (Common Applications Environment) Specifications published by\nThe Open Group in October 1997 (Document Number C706).\n\nExamples\n--------\n\nSELECT UUID();\n+--------------------------------------+\n| UUID() |\n+--------------------------------------+\n| cd41294a-afb0-11df-bc9b-00241dd75637 |\n+--------------------------------------+\n\nURL: https://mariadb.com/kb/en/uuid/','','https://mariadb.com/kb/en/uuid/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (167,14,'UUID_SHORT','Syntax\n------\n\nUUID_SHORT()\n\nDescription\n-----------\n\nReturns a \"short\" universally unique identifier as a 64-bit unsigned integer\n(rather than a string-form 128-bit identifier as returned by the UUID()\nfunction).\n\nThe value of UUID_SHORT() is guaranteed to be unique if the following\nconditions hold:\n\n* The server_id of the current host is unique among your set of master and\n slave servers\n* server_id is between 0 and 255\n* You don\'t set back your system time for your server between mysqld restarts\n* You do not invoke UUID_SHORT() on average more than 16\n million times per second between mysqld restarts\n\nThe UUID_SHORT() return value is constructed this way:\n\n(server_id & 255) << 56\n+ (server_startup_time_in_seconds << 24)\n+ incremented_variable++;\n\nStatements using the UUID_SHORT() function are not safe for statement-based\nreplication.\n\nExamples\n--------\n\nSELECT UUID_SHORT();\n+-------------------+\n| UUID_SHORT() |\n+-------------------+\n| 21517162376069120 |\n+-------------------+\n\ncreate table t1 (a bigint unsigned default(uuid_short()) primary key);\ninsert into t1 values(),();\nselect * from t1;\n+-------------------+\n| a |\n+-------------------+\n| 98113699159474176 |\n| 98113699159474177 |\n+-------------------+\n\nURL: https://mariadb.com/kb/en/uuid_short/','','https://mariadb.com/kb/en/uuid_short/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (168,14,'VALUES / VALUE','Syntax\n------\n\nMariaDB starting with 10.3.3\n----------------------------\n\nVALUE(col_name)\n\nMariaDB until 10.3.2\n--------------------\n\nVALUES(col_name)\n\nDescription\n-----------\n\nIn an INSERT ... ON DUPLICATE KEY UPDATE statement, you can use the\nVALUES(col_name) function in the UPDATE clause to refer to column values from\nthe INSERT portion of the statement. In other words, VALUES(col_name) in the\nUPDATE clause refers to the value of col_name that would be inserted, had no\nduplicate-key conflict occurred. This function is especially useful in\nmultiple-row inserts.\n\nThe VALUES() function is meaningful only in INSERT ... ON DUPLICATE KEY UPDATE\nstatements and returns NULL otherwise.\n\nIn MariaDB 10.3.3 this function was renamed to VALUE(), because it\'s\nincompatible with the standard Table Value Constructors syntax, implemented in\nMariaDB 10.3.3.\n\nThe VALUES() function can still be used even from MariaDB 10.3.3, but only in\nINSERT ... ON DUPLICATE KEY UPDATE statements; it\'s a syntax error otherwise.\n\nExamples\n--------\n\nMariaDB starting with 10.3.3\n----------------------------\n\nINSERT INTO t (a,b,c) VALUES (1,2,3),(4,5,6)\n ON DUPLICATE KEY UPDATE c=VALUE(a)+VALUE(b);\n\nMariaDB until 10.3.2\n--------------------\n\nINSERT INTO t (a,b,c) VALUES (1,2,3),(4,5,6)\n ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);\n\nURL: https://mariadb.com/kb/en/values-value/','','https://mariadb.com/kb/en/values-value/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (169,15,'!','Syntax\n------\n\nNOT, !\n\nDescription\n-----------\n\nLogical NOT. Evaluates to 1 if the operand is 0, to 0 if the operand is\nnon-zero, and NOT NULL returns NULL.\n\nBy default, the ! operator has a higher precedence. If the HIGH_NOT_PRECEDENCE\nSQL_MODE flag is set, NOT and ! have the same precedence.\n\nExamples\n--------\n\nSELECT NOT 10;\n+--------+\n| NOT 10 |\n+--------+\n| 0 |\n+--------+\n\nSELECT NOT 0;\n+-------+\n| NOT 0 |\n+-------+\n| 1 |\n+-------+\n\nSELECT NOT NULL;\n+----------+\n| NOT NULL |\n+----------+\n| NULL |\n+----------+\n\nSELECT ! (1+1);\n+---------+\n| ! (1+1) |\n+---------+\n| 0 |\n+---------+\n\nSELECT ! 1+1;\n+-------+\n| ! 1+1 |\n+-------+\n| 1 |\n+-------+\n\nURL: https://mariadb.com/kb/en/not/','','https://mariadb.com/kb/en/not/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (170,15,'&&','Syntax\n------\n\nAND, &&\n\nDescription\n-----------\n\nLogical AND. Evaluates to 1 if all operands are non-zero and not NULL, to 0 if\none or more operands are 0, otherwise NULL is returned.\n\nFor this operator, short-circuit evaluation can be used.\n\nExamples\n--------\n\nSELECT 1 && 1;\n+--------+\n| 1 && 1 |\n+--------+\n| 1 |\n+--------+\n\nSELECT 1 && 0;\n+--------+\n| 1 && 0 |\n+--------+\n| 0 |\n+--------+\n\nSELECT 1 && NULL;\n+-----------+\n| 1 && NULL |\n+-----------+\n| NULL |\n+-----------+\n\nSELECT 0 && NULL;\n+-----------+\n| 0 && NULL |\n+-----------+\n| 0 |\n+-----------+\n\nSELECT NULL && 0;\n+-----------+\n| NULL && 0 |\n+-----------+\n| 0 |\n+-----------+\n\nURL: https://mariadb.com/kb/en/and/','','https://mariadb.com/kb/en/and/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (171,15,'XOR','Syntax\n------\n\nXOR\n\nDescription\n-----------\n\nXOR stands for eXclusive OR. Returns NULL if either operand is NULL. For\nnon-NULL operands, evaluates to 1 if an odd number of operands is non-zero,\notherwise 0 is returned.\n\nExamples\n--------\n\nSELECT 1 XOR 1;\n+---------+\n| 1 XOR 1 |\n+---------+\n| 0 |\n+---------+\n\nSELECT 1 XOR 0;\n+---------+\n| 1 XOR 0 |\n+---------+\n| 1 |\n+---------+\n\nSELECT 1 XOR NULL;\n+------------+\n| 1 XOR NULL |\n+------------+\n| NULL |\n+------------+\n\nIn the following example, the right 1 XOR 1 is evaluated first, and returns 0.\nThen, 1 XOR 0 is evaluated, and 1 is returned.\n\nSELECT 1 XOR 1 XOR 1;\n+---------------+\n| 1 XOR 1 XOR 1 |\n+---------------+\n| 1 |\n+---------------+\n\nURL: https://mariadb.com/kb/en/xor/','','https://mariadb.com/kb/en/xor/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (172,15,'||','Syntax\n------\n\nOR, ||\n\nDescription\n-----------\n\nLogical OR. When both operands are non-NULL, the result is 1 if any operand is\nnon-zero, and 0 otherwise. With a NULL operand, the result is 1 if the other\noperand is non-zero, and NULL otherwise. If both operands are NULL, the result\nis NULL.\n\nFor this operator, short-circuit evaluation can be used.\n\nNote that, if the PIPES_AS_CONCAT SQL_MODE is set, || is used as a string\nconcatenation operator. This means that a || b is the same as CONCAT(a,b). See\nCONCAT() for details.\n\nOracle Mode\n-----------\n\nMariaDB starting with 10.3\n--------------------------\nIn Oracle mode from MariaDB 10.3, || ignores NULL.\n\nExamples\n--------\n\nSELECT 1 || 1;\n+--------+\n| 1 || 1 |\n+--------+\n| 1 |\n+--------+\n\nSELECT 1 || 0;\n+--------+\n| 1 || 0 |\n+--------+\n| 1 |\n+--------+\n\nSELECT 0 || 0;\n+--------+\n| 0 || 0 |\n+--------+\n| 0 |\n+--------+\n\nSELECT 0 || NULL;\n+-----------+\n| 0 || NULL |\n+-----------+\n| NULL |\n+-----------+\n\nSELECT 1 || NULL;\n+-----------+\n| 1 || NULL |\n+-----------+\n| 1 |\n+-----------+\n\nIn Oracle mode, from MariaDB 10.3:\n\nSELECT 0 || NULL;\n+-----------+\n| 0 || NULL |\n+-----------+\n| 0 |\n+-----------+\n\nURL: https://mariadb.com/kb/en/or/','','https://mariadb.com/kb/en/or/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (173,16,'Stored Aggregate Functions','MariaDB starting with 10.3.3\n----------------------------\nThe ability to create stored aggregate functions was added in MariaDB 10.3.3.\n\nAggregate functions are functions that are computed over a sequence of rows\nand return one result for the sequence of rows.\n\nCreating a custom aggregate function is done using the CREATE FUNCTION\nstatement with two main differences:\n\n* The addition of the AGGREGATE keyword, so CREATE AGGREGATE FUNCTION\n* The FETCH GROUP NEXT ROW instruction inside the loop\n* Oracle PL/SQL compatibility using SQL/PL is provided\n\nStandard Syntax\n---------------\n\nCREATE AGGREGATE FUNCTION function_name (parameters) RETURNS return_type\nBEGIN\n All types of declarations\n DECLARE CONTINUE HANDLER FOR NOT FOUND RETURN return_val;\n LOOP\n FETCH GROUP NEXT ROW; // fetches next row from table\n other instructions\n END LOOP;\nEND\n\nStored aggregate functions were a 2016 Google Summer of Code project by Varun\nGupta.\n\nUsing SQL/PL\n------------\n\nSET sql_mode=Oracle;\nDELIMITER //\n\nCREATE AGGREGATE FUNCTION function_name (parameters) RETURN return_type\n declarations\nBEGIN\n LOOP\n FETCH GROUP NEXT ROW; -- fetches next row from table\n -- other instructions\n\nEND LOOP;\nEXCEPTION\n WHEN NO_DATA_FOUND THEN\n RETURN return_val;\nEND //\n\nDELIMITER ;\n\nExamples\n--------\n\nFirst a simplified example:\n\nCREATE TABLE marks(stud_id INT, grade_count INT);\n\nINSERT INTO marks VALUES (1,6), (2,4), (3,7), (4,5), (5,8);\n\nSELECT * FROM marks;\n+---------+-------------+\n| stud_id | grade_count |\n+---------+-------------+\n| 1 | 6 |\n| 2 | 4 |\n| 3 | 7 |\n| 4 | 5 |\n| 5 | 8 |\n+---------+-------------+\n\nDELIMITER //\nCREATE AGGREGATE FUNCTION IF NOT EXISTS aggregate_count(x INT) RETURNS INT\nBEGIN\n DECLARE count_students INT DEFAULT 0;\n DECLARE CONTINUE HANDLER FOR NOT FOUND\n RETURN count_students;\n LOOP\n FETCH GROUP NEXT ROW;\n IF x THEN\n SET count_students = count_students+1;\n END IF;\n END LOOP;\nEND //\nDELIMITER ;\n\nA non-trivial example that cannot easily be rewritten using existing functions:\n\nDELIMITER //\nCREATE AGGREGATE FUNCTION medi_int(x INT) RETURNS DOUBLE\nBEGIN\n DECLARE CONTINUE HANDLER FOR NOT FOUND\n BEGIN\n DECLARE res DOUBLE;\n DECLARE cnt INT DEFAULT (SELECT COUNT(*) FROM tt);\n DECLARE lim INT DEFAULT (cnt-1) DIV 2;\n IF cnt % 2 = 0 THEN\n SET res = (SELECT AVG(a) FROM (SELECT a FROM tt ORDER BY a LIMIT\nlim,2) ttt);\n ELSE\n SET res = (SELECT a FROM tt ORDER BY a LIMIT lim,1);\n END IF;\n DROP TEMPORARY TABLE tt;\n RETURN res;\n END;\n CREATE TEMPORARY TABLE tt (a INT);\n LOOP\n FETCH GROUP NEXT ROW;\n INSERT INTO tt VALUES (x);\n END LOOP;\nEND //\nDELIMITER ;\n\nSQL/PL Example\n--------------\n\nThis uses the same marks table as created above.\n\nSET sql_mode=Oracle;\nDELIMITER //\n\nCREATE AGGREGATE FUNCTION aggregate_count(x INT) RETURN INT AS count_students\nINT DEFAULT 0;\nBEGIN\n LOOP\n FETCH GROUP NEXT ROW;\n IF x THEN\n SET count_students := count_students+1;\n END IF;\n END LOOP;\nEXCEPTION\n WHEN NO_DATA_FOUND THEN\n RETURN count_students;\nEND aggregate_count //\nDELIMITER ;\n\nSELECT aggregate_count(stud_id) FROM marks;\n\nURL: https://mariadb.com/kb/en/stored-aggregate-functions/','','https://mariadb.com/kb/en/stored-aggregate-functions/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (174,16,'AVG','Syntax\n------\n\nAVG([DISTINCT] expr)\n\nDescription\n-----------\n\nReturns the average value of expr. The DISTINCT option can be used to return\nthe average of the distinct values of expr. NULL values are ignored. It is an\naggregate function, and so can be used with the GROUP BY clause.\n\nAVG() returns NULL if there were no matching rows.\n\nAVG() can be used as a window function.\n\nExamples\n--------\n\nCREATE TABLE sales (sales_value INT);\n\nINSERT INTO sales VALUES(10),(20),(20),(40);\n\nSELECT AVG(sales_value) FROM sales;\n+------------------+\n| AVG(sales_value) |\n+------------------+\n| 22.5000 |\n+------------------+\n\nSELECT AVG(DISTINCT(sales_value)) FROM sales;\n+----------------------------+\n| AVG(DISTINCT(sales_value)) |\n+----------------------------+\n| 23.3333 |\n+----------------------------+\n\nCommonly, AVG() is used with a GROUP BY clause:\n\nCREATE TABLE student (name CHAR(10), test CHAR(10), score TINYINT);\n\nINSERT INTO student VALUES \n (\'Chun\', \'SQL\', 75), (\'Chun\', \'Tuning\', 73),\n (\'Esben\', \'SQL\', 43), (\'Esben\', \'Tuning\', 31),\n (\'Kaolin\', \'SQL\', 56), (\'Kaolin\', \'Tuning\', 88),\n (\'Tatiana\', \'SQL\', 87), (\'Tatiana\', \'Tuning\', 83);\n\nSELECT name, AVG(score) FROM student GROUP BY name;\n+---------+------------+\n| name | AVG(score) |\n+---------+------------+\n| Chun | 74.0000 |\n| Esben | 37.0000 |\n| Kaolin | 72.0000 |\n| Tatiana | 85.0000 |\n+---------+------------+\n\nBe careful to avoid this common mistake, not grouping correctly and returning\nmismatched data:\n\nSELECT name,test,AVG(score) FROM student;\n+------+------+------------+\n| name | test | MIN(score) |\n+------+------+------------+\n| Chun | SQL | 31 |\n+------+------+------------+\n\nAs a window function:\n\nCREATE TABLE student_test (name CHAR(10), test CHAR(10), score TINYINT);\n\nINSERT INTO student_test VALUES \n (\'Chun\', \'SQL\', 75), (\'Chun\', \'Tuning\', 73),\n (\'Esben\', \'SQL\', 43), (\'Esben\', \'Tuning\', 31),\n (\'Kaolin\', \'SQL\', 56), (\'Kaolin\', \'Tuning\', 88),\n (\'Tatiana\', \'SQL\', 87), (\'Tatiana\', \'Tuning\', 83);\n\nSELECT name, test, score, AVG(score) OVER (PARTITION BY test) \n AS average_by_test FROM student_test;\n+---------+--------+-------+-----------------+\n| name | test | score | average_by_test |\n+---------+--------+-------+-----------------+\n| Chun | SQL | 75 | 65.2500 |\n| Chun | Tuning | 73 | 68.7500 |\n| Esben | SQL | 43 | 65.2500 |\n| Esben | Tuning | 31 | 68.7500 |\n| Kaolin | SQL | 56 | 65.2500 |\n| Kaolin | Tuning | 88 | 68.7500 |\n| Tatiana | SQL | 87 | 65.2500 |\n| Tatiana | Tuning | 83 | 68.7500 |\n+---------+--------+-------+-----------------+\n\nURL: https://mariadb.com/kb/en/avg/','','https://mariadb.com/kb/en/avg/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (175,16,'BIT_AND','Syntax\n------\n\nBIT_AND(expr) [over_clause]\n\nDescription\n-----------\n\nReturns the bitwise AND of all bits in expr. The calculation is performed with\n64-bit (BIGINT) precision. It is an aggregate function, and so can be used\nwith the GROUP BY clause.\n\nIf no rows match, BIT_AND will return a value with all bits set to 1. NULL\nvalues have no effect on the result unless all results are NULL, which is\ntreated as no match.\n\nBIT_AND can be used as a window function with the addition of the over_clause.\n\nExamples\n--------\n\nCREATE TABLE vals (x INT);\n\nINSERT INTO vals VALUES(111),(110),(100);\n\nSELECT BIT_AND(x), BIT_OR(x), BIT_XOR(x) FROM vals;\n+------------+-----------+------------+\n| BIT_AND(x) | BIT_OR(x) | BIT_XOR(x) |\n+------------+-----------+------------+\n| 100 | 111 | 101 |\n+------------+-----------+------------+\n\nAs an aggregate function:\n\nCREATE TABLE vals2 (category VARCHAR(1), x INT);\n\nINSERT INTO vals2 VALUES\n (\'a\',111),(\'a\',110),(\'a\',100),\n (\'b\',\'000\'),(\'b\',001),(\'b\',011);\n\nSELECT category, BIT_AND(x), BIT_OR(x), BIT_XOR(x) \n FROM vals GROUP BY category;\n+----------+------------+-----------+------------+\n| category | BIT_AND(x) | BIT_OR(x) | BIT_XOR(x) |\n+----------+------------+-----------+------------+\n| a | 100 | 111 | 101 |\n| b | 0 | 11 | 10 |\n+----------+------------+-----------+------------+\n\nNo match:\n\nSELECT BIT_AND(NULL);\n+----------------------+\n| BIT_AND(NULL) |\n+----------------------+\n| 18446744073709551615 |\n+----------------------+\n\nURL: https://mariadb.com/kb/en/bit_and/','','https://mariadb.com/kb/en/bit_and/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (176,16,'BIT_OR','Syntax\n------\n\nBIT_OR(expr) [over_clause]\n\nDescription\n-----------\n\nReturns the bitwise OR of all bits in expr. The calculation is performed with\n64-bit (BIGINT) precision. It is an aggregate function, and so can be used\nwith the GROUP BY clause.\n\nIf no rows match, BIT_OR will return a value with all bits set to 0. NULL\nvalues have no effect on the result unless all results are NULL, which is\ntreated as no match.\n\nBIT_OR can be used as a window function with the addition of the over_clause.\n\nExamples\n--------\n\nCREATE TABLE vals (x INT);\n\nINSERT INTO vals VALUES(111),(110),(100);\n\nSELECT BIT_AND(x), BIT_OR(x), BIT_XOR(x) FROM vals;\n+------------+-----------+------------+\n| BIT_AND(x) | BIT_OR(x) | BIT_XOR(x) |\n+------------+-----------+------------+\n| 100 | 111 | 101 |\n+------------+-----------+------------+\n\nAs an aggregate function:\n\nCREATE TABLE vals2 (category VARCHAR(1), x INT);\n\nINSERT INTO vals2 VALUES\n (\'a\',111),(\'a\',110),(\'a\',100),\n (\'b\',\'000\'),(\'b\',001),(\'b\',011);\n\nSELECT category, BIT_AND(x), BIT_OR(x), BIT_XOR(x) \n FROM vals GROUP BY category;\n+----------+------------+-----------+------------+\n| category | BIT_AND(x) | BIT_OR(x) | BIT_XOR(x) |\n+----------+------------+-----------+------------+\n| a | 100 | 111 | 101 |\n| b | 0 | 11 | 10 |\n+----------+------------+-----------+------------+\n\nNo match:\n\nSELECT BIT_OR(NULL);\n+--------------+\n| BIT_OR(NULL) |\n+--------------+\n| 0 |\n+--------------+\n\nURL: https://mariadb.com/kb/en/bit_or/','','https://mariadb.com/kb/en/bit_or/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (177,16,'BIT_XOR','Syntax\n------\n\nBIT_XOR(expr) [over_clause]\n\nDescription\n-----------\n\nReturns the bitwise XOR of all bits in expr. The calculation is performed with\n64-bit (BIGINT) precision. It is an aggregate function, and so can be used\nwith the GROUP BY clause.\n\nIf no rows match, BIT_XOR will return a value with all bits set to 0. NULL\nvalues have no effect on the result unless all results are NULL, which is\ntreated as no match.\n\nBIT_XOR can be used as a window function with the addition of the over_clause.\n\nExamples\n--------\n\nCREATE TABLE vals (x INT);\n\nINSERT INTO vals VALUES(111),(110),(100);\n\nSELECT BIT_AND(x), BIT_OR(x), BIT_XOR(x) FROM vals;\n+------------+-----------+------------+\n| BIT_AND(x) | BIT_OR(x) | BIT_XOR(x) |\n+------------+-----------+------------+\n| 100 | 111 | 101 |\n+------------+-----------+------------+\n\nAs an aggregate function:\n\nCREATE TABLE vals2 (category VARCHAR(1), x INT);\n\nINSERT INTO vals2 VALUES\n (\'a\',111),(\'a\',110),(\'a\',100),\n (\'b\',\'000\'),(\'b\',001),(\'b\',011);\n\nSELECT category, BIT_AND(x), BIT_OR(x), BIT_XOR(x) \n FROM vals GROUP BY category;\n+----------+------------+-----------+------------+\n| category | BIT_AND(x) | BIT_OR(x) | BIT_XOR(x) |\n+----------+------------+-----------+------------+\n| a | 100 | 111 | 101 |\n| b | 0 | 11 | 10 |\n+----------+------------+-----------+------------+\n\nNo match:\n\nSELECT BIT_XOR(NULL);\n+---------------+\n| BIT_XOR(NULL) |\n+---------------+\n| 0 |\n+---------------+\n\nURL: https://mariadb.com/kb/en/bit_xor/','','https://mariadb.com/kb/en/bit_xor/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (178,16,'COUNT','Syntax\n------\n\nCOUNT(expr)\n\nDescription\n-----------\n\nReturns a count of the number of non-NULL values of expr in the rows retrieved\nby a SELECT statement. The result is a BIGINT value. It is an aggregate\nfunction, and so can be used with the GROUP BY clause.\n\nCOUNT(*) counts the total number of rows in a table.\n\nCOUNT() returns 0 if there were no matching rows.\n\nCOUNT() can be used as a window function.\n\nExamples\n--------\n\nCREATE TABLE student (name CHAR(10), test CHAR(10), score TINYINT);\n\nINSERT INTO student VALUES \n (\'Chun\', \'SQL\', 75), (\'Chun\', \'Tuning\', 73),\n (\'Esben\', \'SQL\', 43), (\'Esben\', \'Tuning\', 31),\n (\'Kaolin\', \'SQL\', 56), (\'Kaolin\', \'Tuning\', 88),\n (\'Tatiana\', \'SQL\', 87), (\'Tatiana\', \'Tuning\', 83);\n\nSELECT COUNT(*) FROM student;\n+----------+\n| COUNT(*) |\n+----------+\n| 8 |\n+----------+\n\nCOUNT(DISTINCT) example:\n\nSELECT COUNT(DISTINCT (name)) FROM student;\n+------------------------+\n| COUNT(DISTINCT (name)) |\n+------------------------+\n| 4 |\n+------------------------+\n\nAs a window function\n\nCREATE OR REPLACE TABLE student_test (name CHAR(10), test CHAR(10), score\nTINYINT);\n\nINSERT INTO student_test VALUES \n (\'Chun\', \'SQL\', 75), (\'Chun\', \'Tuning\', 73),\n (\'Esben\', \'SQL\', 43), (\'Esben\', \'Tuning\', 31),\n (\'Kaolin\', \'SQL\', 56), (\'Kaolin\', \'Tuning\', 88),\n (\'Tatiana\', \'SQL\', 87);\n\nSELECT name, test, score, COUNT(score) OVER (PARTITION BY name) \n AS tests_written FROM student_test;\n+---------+--------+-------+---------------+\n| name | test | score | tests_written |\n+---------+--------+-------+---------------+\n| Chun | SQL | 75 | 2 |\n| Chun | Tuning | 73 | 2 |\n| Esben | SQL | 43 | 2 |\n| Esben | Tuning | 31 | 2 |\n| Kaolin | SQL | 56 | 2 |\n| Kaolin | Tuning | 88 | 2 |\n| Tatiana | SQL | 87 | 1 |\n+---------+--------+-------+---------------+\n\nURL: https://mariadb.com/kb/en/count/','','https://mariadb.com/kb/en/count/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (179,16,'COUNT DISTINCT','Syntax\n------\n\nCOUNT(DISTINCT expr,[expr...])\n\nDescription\n-----------\n\nReturns a count of the number of different non-NULL values.\n\nCOUNT(DISTINCT) returns 0 if there were no matching rows.\n\nAlthough, from MariaDB 10.2.0, COUNT can be used as a window function, COUNT\nDISTINCT cannot be.\n\nExamples\n--------\n\nCREATE TABLE student (name CHAR(10), test CHAR(10), score TINYINT);\n\nINSERT INTO student VALUES \n (\'Chun\', \'SQL\', 75), (\'Chun\', \'Tuning\', 73),\n (\'Esben\', \'SQL\', 43), (\'Esben\', \'Tuning\', 31),\n (\'Kaolin\', \'SQL\', 56), (\'Kaolin\', \'Tuning\', 88),\n (\'Tatiana\', \'SQL\', 87), (\'Tatiana\', \'Tuning\', 83);\n\nSELECT COUNT(*) FROM student;\n+----------+\n| COUNT(*) |\n+----------+\n| 8 |\n+----------+\n\nSELECT COUNT(DISTINCT (name)) FROM student;\n+------------------------+\n| COUNT(DISTINCT (name)) |\n+------------------------+\n| 4 |\n+------------------------+\n\nURL: https://mariadb.com/kb/en/count-distinct/','','https://mariadb.com/kb/en/count-distinct/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (180,16,'GROUP_CONCAT','Syntax\n------\n\nGROUP_CONCAT(expr)\n\nDescription\n-----------\n\nThis function returns a string result with the concatenated non-NULL values\nfrom a group. It returns NULL if there are no non-NULL values.\n\nThe maximum returned length in bytes is determined by the group_concat_max_len\nserver system variable, which defaults to 1M (>= MariaDB 10.2.4) or 1K (<=\nMariaDB 10.2.3).\n\nIf group_concat_max_len <= 512, the return type is VARBINARY or VARCHAR;\notherwise, the return type is BLOB or TEXT. The choice between binary or\nnon-binary types depends from the input.\n\nThe full syntax is as follows:\n\nGROUP_CONCAT([DISTINCT] expr [,expr ...]\n [ORDER BY {unsigned_integer | col_name | expr}\n [ASC | DESC] [,col_name ...]]\n [SEPARATOR str_val]\n [LIMIT {[offset,] row_count | row_count OFFSET offset}])\n\nDISTINCT eliminates duplicate values from the output string.\n\nORDER BY determines the order of returned values.\n\nSEPARATOR specifies a separator between the values. The default separator is a\ncomma (,). It is possible to avoid using a separator by specifying an empty\nstring.\n\nLIMIT\n-----\n\nMariaDB starting with 10.3.3\n----------------------------\nUntil MariaDB 10.3.2, it was not possible to use the LIMIT clause with\nGROUP_CONCAT. This restriction was lifted in MariaDB 10.3.3.\n\nExamples\n--------\n\nSELECT student_name,\n GROUP_CONCAT(test_score)\n FROM student\n GROUP BY student_name;\n\nGet a readable list of MariaDB users from the mysql.user table:\n\nSELECT GROUP_CONCAT(DISTINCT User ORDER BY User SEPARATOR \'\\n\')\n FROM mysql.user;\n\nIn the former example, DISTINCT is used because the same user may occur more\nthan once. The new line (\\n) used as a SEPARATOR makes the results easier to\nread.\n\nGet a readable list of hosts from which each user can connect:\n\nSELECT User, GROUP_CONCAT(Host ORDER BY Host SEPARATOR \', \') \n FROM mysql.user GROUP BY User ORDER BY User;\n\nThe former example shows the difference between the GROUP_CONCAT\'s ORDER BY\n(which sorts the concatenated hosts), and the SELECT\'s ORDER BY (which sorts\nthe rows).\n\nFrom MariaDB 10.3.3, LIMIT can be used with GROUP_CONCAT, so, for example,\ngiven the following table:\n\nCREATE TABLE d (dd DATE, cc INT);\n\nINSERT INTO d VALUES (\'2017-01-01\',1);\nINSERT INTO d VALUES (\'2017-01-02\',2);\nINSERT INTO d VALUES (\'2017-01-04\',3);\n\nthe following query:\n\nSELECT SUBSTRING_INDEX(GROUP_CONCAT(CONCAT_WS(\":\",dd,cc) ORDER BY cc\nDESC),\",\",1) FROM d;\n+----------------------------------------------------------------------------+\n| SUBSTRING_INDEX(GROUP_CONCAT(CONCAT_WS(\":\",dd,cc) ORDER BY cc DESC),\",\",1) |\n+----------------------------------------------------------------------------+\n| 2017-01-04:3 |\n+----------------------------------------------------------------------------+\n\ncan be more simply rewritten as:\n\nSELECT GROUP_CONCAT(CONCAT_WS(\":\",dd,cc) ORDER BY cc DESC LIMIT 1) FROM d;\n+-------------------------------------------------------------+\n| GROUP_CONCAT(CONCAT_WS(\":\",dd,cc) ORDER BY cc DESC LIMIT 1) |\n+-------------------------------------------------------------+\n| 2017-01-04:3 |\n+-------------------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/group_concat/','','https://mariadb.com/kb/en/group_concat/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (181,16,'MAX','Syntax\n------\n\nMAX([DISTINCT] expr)\n\nDescription\n-----------\n\nReturns the largest, or maximum, value of expr. MAX() can also take a string\nargument in which case it returns the maximum string value. The DISTINCT\nkeyword can be used to find the maximum of the distinct values of expr,\nhowever, this produces the same result as omitting DISTINCT.\n\nNote that SET and ENUM fields are currently compared by their string value\nrather than their relative position in the set, so MAX() may produce a\ndifferent highest result than ORDER BY DESC.\n\nIt is an aggregate function, and so can be used with the GROUP BY clause.\n\nMAX() can be used as a window function.\n\nMAX() returns NULL if there were no matching rows.\n\nExamples\n--------\n\nCREATE TABLE student (name CHAR(10), test CHAR(10), score TINYINT);\n\nINSERT INTO student VALUES \n (\'Chun\', \'SQL\', 75), (\'Chun\', \'Tuning\', 73),\n (\'Esben\', \'SQL\', 43), (\'Esben\', \'Tuning\', 31),\n (\'Kaolin\', \'SQL\', 56), (\'Kaolin\', \'Tuning\', 88),\n (\'Tatiana\', \'SQL\', 87), (\'Tatiana\', \'Tuning\', 83);\n\nSELECT name, MAX(score) FROM student GROUP BY name;\n+---------+------------+\n| name | MAX(score) |\n+---------+------------+\n| Chun | 75 |\n| Esben | 43 |\n| Kaolin | 88 |\n| Tatiana | 87 |\n+---------+------------+\n\nMAX string:\n\nSELECT MAX(name) FROM student;\n+-----------+\n| MAX(name) |\n+-----------+\n| Tatiana |\n+-----------+\n\nBe careful to avoid this common mistake, not grouping correctly and returning\nmismatched data:\n\nSELECT name,test,MAX(SCORE) FROM student;\n+------+------+------------+\n| name | test | MAX(SCORE) |\n+------+------+------------+\n| Chun | SQL | 88 |\n+------+------+------------+\n\nDifference between ORDER BY DESC and MAX():\n\nCREATE TABLE student2(name CHAR(10),grade ENUM(\'b\',\'c\',\'a\'));\n\nINSERT INTO student2 VALUES(\'Chun\',\'b\'),(\'Esben\',\'c\'),(\'Kaolin\',\'a\');\n\nSELECT MAX(grade) FROM student2;\n+------------+\n| MAX(grade) |\n+------------+\n| c |\n+------------+\n\nSELECT grade FROM student2 ORDER BY grade DESC LIMIT 1;\n+-------+\n| grade |\n+-------+\n| a |\n+-------+\n\nAs a window function:\n\nCREATE OR REPLACE TABLE student_test (name CHAR(10), test CHAR(10), score\nTINYINT);\nINSERT INTO student_test VALUES \n (\'Chun\', \'SQL\', 75), (\'Chun\', \'Tuning\', 73),\n (\'Esben\', \'SQL\', 43), (\'Esben\', \'Tuning\', 31),\n (\'Kaolin\', \'SQL\', 56), (\'Kaolin\', \'Tuning\', 88),\n (\'Tatiana\', \'SQL\', 87);\n\nSELECT name, test, score, MAX(score) \n OVER (PARTITION BY name) AS highest_score FROM student_test;\n+---------+--------+-------+---------------+\n| name | test | score | highest_score |\n+---------+--------+-------+---------------+\n| Chun | SQL | 75 | 75 |\n| Chun | Tuning | 73 | 75 |\n| Esben | SQL | 43 | 43 |\n| Esben | Tuning | 31 | 43 |\n| Kaolin | SQL | 56 | 88 |\n| Kaolin | Tuning | 88 | 88 |\n| Tatiana | SQL | 87 | 87 |\n+---------+--------+-------+---------------+\n\nURL: https://mariadb.com/kb/en/max/','','https://mariadb.com/kb/en/max/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (182,16,'MIN','Syntax\n------\n\nMIN([DISTINCT] expr)\n\nDescription\n-----------\n\nReturns the minimum value of expr. MIN() may take a string argument, in which\ncase it returns the minimum string value. The DISTINCT keyword can be used to\nfind the minimum of the distinct values of expr, however, this produces the\nsame result as omitting DISTINCT.\n\nNote that SET and ENUM fields are currently compared by their string value\nrather than their relative position in the set, so MIN() may produce a\ndifferent lowest result than ORDER BY ASC.\n\nIt is an aggregate function, and so can be used with the GROUP BY clause.\n\nMIN() can be used as a window function.\n\nMIN() returns NULL if there were no matching rows.\n\nExamples\n--------\n\nCREATE TABLE student (name CHAR(10), test CHAR(10), score TINYINT);\n\nINSERT INTO student VALUES \n (\'Chun\', \'SQL\', 75), (\'Chun\', \'Tuning\', 73),\n (\'Esben\', \'SQL\', 43), (\'Esben\', \'Tuning\', 31),\n (\'Kaolin\', \'SQL\', 56), (\'Kaolin\', \'Tuning\', 88),\n (\'Tatiana\', \'SQL\', 87), (\'Tatiana\', \'Tuning\', 83);\n\nSELECT name, MIN(score) FROM student GROUP BY name;\n+---------+------------+\n| name | MIN(score) |\n+---------+------------+\n| Chun | 73 |\n| Esben | 31 |\n| Kaolin | 56 |\n| Tatiana | 83 |\n+---------+------------+\n\nMIN() with a string:\n\nSELECT MIN(name) FROM student;\n+-----------+\n| MIN(name) |\n+-----------+\n| Chun |\n+-----------+\n\nBe careful to avoid this common mistake, not grouping correctly and returning\nmismatched data:\n\nSELECT name,test,MIN(score) FROM student;\n+------+------+------------+\n| name | test | MIN(score) |\n+------+------+------------+\n| Chun | SQL | 31 |\n+------+------+------------+\n\nDifference between ORDER BY ASC and MIN():\n\nCREATE TABLE student2(name CHAR(10),grade ENUM(\'b\',\'c\',\'a\'));\n\nINSERT INTO student2 VALUES(\'Chun\',\'b\'),(\'Esben\',\'c\'),(\'Kaolin\',\'a\');\n\nSELECT MIN(grade) FROM student2;\n+------------+\n| MIN(grade) |\n+------------+\n| a |\n+------------+\n\nSELECT grade FROM student2 ORDER BY grade ASC LIMIT 1;\n+-------+\n| grade |\n+-------+\n| b |\n+-------+\n\nAs a window function:\n\nCREATE OR REPLACE TABLE student_test (name CHAR(10), test CHAR(10), score\nTINYINT);\nINSERT INTO student_test VALUES \n (\'Chun\', \'SQL\', 75), (\'Chun\', \'Tuning\', 73),\n (\'Esben\', \'SQL\', 43), (\'Esben\', \'Tuning\', 31),\n (\'Kaolin\', \'SQL\', 56), (\'Kaolin\', \'Tuning\', 88),\n (\'Tatiana\', \'SQL\', 87);\n\nSELECT name, test, score, MIN(score) \n OVER (PARTITION BY name) AS lowest_score FROM student_test;\n+---------+--------+-------+--------------+\n| name | test | score | lowest_score |\n+---------+--------+-------+--------------+\n| Chun | SQL | 75 | 73 |\n| Chun | Tuning | 73 | 73 |\n| Esben | SQL | 43 | 31 |\n| Esben | Tuning | 31 | 31 |\n| Kaolin | SQL | 56 | 56 |\n| Kaolin | Tuning | 88 | 56 |\n| Tatiana | SQL | 87 | 87 |\n+---------+--------+-------+--------------+\n\nURL: https://mariadb.com/kb/en/min/','','https://mariadb.com/kb/en/min/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (183,16,'STD','Syntax\n------\n\nSTD(expr)\n\nDescription\n-----------\n\nReturns the population standard deviation of expr. This is an extension to\nstandard SQL. The standard SQL function STDDEV_POP() can be used instead.\n\nIt is an aggregate function, and so can be used with the GROUP BY clause.\n\nSTD() can be used as a window function.\n\nThis function returns NULL if there were no matching rows.\n\nExamples\n--------\n\nAs an aggregate function:\n\nCREATE OR REPLACE TABLE stats (category VARCHAR(2), x INT);\n\nINSERT INTO stats VALUES \n (\'a\',1),(\'a\',2),(\'a\',3),\n (\'b\',11),(\'b\',12),(\'b\',20),(\'b\',30),(\'b\',60);\n\nSELECT category, STDDEV_POP(x), STDDEV_SAMP(x), VAR_POP(x) \n FROM stats GROUP BY category;\n+----------+---------------+----------------+------------+\n| category | STDDEV_POP(x) | STDDEV_SAMP(x) | VAR_POP(x) |\n+----------+---------------+----------------+------------+\n| a | 0.8165 | 1.0000 | 0.6667 |\n| b | 18.0400 | 20.1693 | 325.4400 |\n+----------+---------------+----------------+------------+\n\nAs a window function:\n\nCREATE OR REPLACE TABLE student_test (name CHAR(10), test CHAR(10), score\nTINYINT);\n\nINSERT INTO student_test VALUES \n (\'Chun\', \'SQL\', 75), (\'Chun\', \'Tuning\', 73),\n (\'Esben\', \'SQL\', 43), (\'Esben\', \'Tuning\', 31),\n (\'Kaolin\', \'SQL\', 56), (\'Kaolin\', \'Tuning\', 88),\n (\'Tatiana\', \'SQL\', 87);\n\nSELECT name, test, score, STDDEV_POP(score) \n OVER (PARTITION BY test) AS stddev_results FROM student_test;\n+---------+--------+-------+----------------+\n| name | test | score | stddev_results |\n+---------+--------+-------+----------------+\n| Chun | SQL | 75 | 16.9466 |\n| Chun | Tuning | 73 | 24.1247 |\n| Esben | SQL | 43 | 16.9466 |\n| Esben | Tuning | 31 | 24.1247 |\n| Kaolin | SQL | 56 | 16.9466 |\n| Kaolin | Tuning | 88 | 24.1247 |\n| Tatiana | SQL | 87 | 16.9466 |\n+---------+--------+-------+----------------+\n\nURL: https://mariadb.com/kb/en/std/','','https://mariadb.com/kb/en/std/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (184,16,'STDDEV','Syntax\n------\n\nSTDDEV(expr)\n\nDescription\n-----------\n\nReturns the population standard deviation of expr. This function is provided\nfor compatibility with Oracle. The standard SQL function STDDEV_POP() can be\nused instead.\n\nIt is an aggregate function, and so can be used with the GROUP BY clause.\n\nSTDDEV() can be used as a window function.\n\nThis function returns NULL if there were no matching rows.\n\nExamples\n--------\n\nAs an aggregate function:\n\nCREATE OR REPLACE TABLE stats (category VARCHAR(2), x INT);\n\nINSERT INTO stats VALUES \n (\'a\',1),(\'a\',2),(\'a\',3),\n (\'b\',11),(\'b\',12),(\'b\',20),(\'b\',30),(\'b\',60);\n\nSELECT category, STDDEV_POP(x), STDDEV_SAMP(x), VAR_POP(x) \n FROM stats GROUP BY category;\n+----------+---------------+----------------+------------+\n| category | STDDEV_POP(x) | STDDEV_SAMP(x) | VAR_POP(x) |\n+----------+---------------+----------------+------------+\n| a | 0.8165 | 1.0000 | 0.6667 |\n| b | 18.0400 | 20.1693 | 325.4400 |\n+----------+---------------+----------------+------------+\n\nAs a window function:\n\nCREATE OR REPLACE TABLE student_test (name CHAR(10), test CHAR(10), score\nTINYINT);\n\nINSERT INTO student_test VALUES \n (\'Chun\', \'SQL\', 75), (\'Chun\', \'Tuning\', 73),\n (\'Esben\', \'SQL\', 43), (\'Esben\', \'Tuning\', 31),\n (\'Kaolin\', \'SQL\', 56), (\'Kaolin\', \'Tuning\', 88),\n (\'Tatiana\', \'SQL\', 87);\n\nSELECT name, test, score, STDDEV_POP(score) \n OVER (PARTITION BY test) AS stddev_results FROM student_test;\n+---------+--------+-------+----------------+\n| name | test | score | stddev_results |\n+---------+--------+-------+----------------+\n| Chun | SQL | 75 | 16.9466 |\n| Chun | Tuning | 73 | 24.1247 |\n| Esben | SQL | 43 | 16.9466 |\n| Esben | Tuning | 31 | 24.1247 |\n| Kaolin | SQL | 56 | 16.9466 |\n| Kaolin | Tuning | 88 | 24.1247 |\n| Tatiana | SQL | 87 | 16.9466 |\n+---------+--------+-------+----------------+\n\nURL: https://mariadb.com/kb/en/stddev/','','https://mariadb.com/kb/en/stddev/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (185,16,'STDDEV_POP','Syntax\n------\n\nSTDDEV_POP(expr)\n\nDescription\n-----------\n\nReturns the population standard deviation of expr (the square root of\nVAR_POP()). You can also use STD() or STDDEV(), which are equivalent but not\nstandard SQL.\n\nIt is an aggregate function, and so can be used with the GROUP BY clause.\n\nSTDDEV_POP() can be used as a window function.\n\nSTDDEV_POP() returns NULL if there were no matching rows.\n\nExamples\n--------\n\nAs an aggregate function:\n\nCREATE OR REPLACE TABLE stats (category VARCHAR(2), x INT);\n\nINSERT INTO stats VALUES \n (\'a\',1),(\'a\',2),(\'a\',3),\n (\'b\',11),(\'b\',12),(\'b\',20),(\'b\',30),(\'b\',60);\n\nSELECT category, STDDEV_POP(x), STDDEV_SAMP(x), VAR_POP(x) \n FROM stats GROUP BY category;\n+----------+---------------+----------------+------------+\n| category | STDDEV_POP(x) | STDDEV_SAMP(x) | VAR_POP(x) |\n+----------+---------------+----------------+------------+\n| a | 0.8165 | 1.0000 | 0.6667 |\n| b | 18.0400 | 20.1693 | 325.4400 |\n+----------+---------------+----------------+------------+\n\nAs a window function:\n\nCREATE OR REPLACE TABLE student_test (name CHAR(10), test CHAR(10), score\nTINYINT);\n\nINSERT INTO student_test VALUES \n (\'Chun\', \'SQL\', 75), (\'Chun\', \'Tuning\', 73),\n (\'Esben\', \'SQL\', 43), (\'Esben\', \'Tuning\', 31),\n (\'Kaolin\', \'SQL\', 56), (\'Kaolin\', \'Tuning\', 88),\n (\'Tatiana\', \'SQL\', 87);\n\nSELECT name, test, score, STDDEV_POP(score) \n OVER (PARTITION BY test) AS stddev_results FROM student_test;\n+---------+--------+-------+----------------+\n| name | test | score | stddev_results |\n+---------+--------+-------+----------------+\n| Chun | SQL | 75 | 16.9466 |\n| Chun | Tuning | 73 | 24.1247 |\n| Esben | SQL | 43 | 16.9466 |\n| Esben | Tuning | 31 | 24.1247 |\n| Kaolin | SQL | 56 | 16.9466 |\n| Kaolin | Tuning | 88 | 24.1247 |\n| Tatiana | SQL | 87 | 16.9466 |\n+---------+--------+-------+----------------+\n\nURL: https://mariadb.com/kb/en/stddev_pop/','','https://mariadb.com/kb/en/stddev_pop/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (186,16,'STDDEV_SAMP','Syntax\n------\n\nSTDDEV_SAMP(expr)\n\nDescription\n-----------\n\nReturns the sample standard deviation of expr (the square root of VAR_SAMP()).\n\nIt is an aggregate function, and so can be used with the GROUP BY clause.\n\nSTDDEV_SAMP() can be used as a window function.\n\nSTDDEV_SAMP() returns NULL if there were no matching rows.\n\nURL: https://mariadb.com/kb/en/stddev_samp/','','https://mariadb.com/kb/en/stddev_samp/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (187,16,'SUM','Syntax\n------\n\nSUM([DISTINCT] expr)\n\nDescription\n-----------\n\nReturns the sum of expr. If the return set has no rows, SUM() returns NULL.\nThe DISTINCT keyword can be used to sum only the distinct values of expr.\n\nSUM() can be used as a window function, although not with the DISTINCT\nspecifier.\n\nExamples\n--------\n\nCREATE TABLE sales (sales_value INT);\nINSERT INTO sales VALUES(10),(20),(20),(40);\n\nSELECT SUM(sales_value) FROM sales;\n+------------------+\n| SUM(sales_value) |\n+------------------+\n| 90 |\n+------------------+\n\nSELECT SUM(DISTINCT(sales_value)) FROM sales;\n+----------------------------+\n| SUM(DISTINCT(sales_value)) |\n+----------------------------+\n| 70 |\n+----------------------------+\n\nCommonly, SUM is used with a GROUP BY clause:\n\nCREATE TABLE sales (name CHAR(10), month CHAR(10), units INT);\n\nINSERT INTO sales VALUES \n (\'Chun\', \'Jan\', 75), (\'Chun\', \'Feb\', 73),\n (\'Esben\', \'Jan\', 43), (\'Esben\', \'Feb\', 31),\n (\'Kaolin\', \'Jan\', 56), (\'Kaolin\', \'Feb\', 88),\n (\'Tatiana\', \'Jan\', 87), (\'Tatiana\', \'Feb\', 83);\n\nSELECT name, SUM(units) FROM sales GROUP BY name;\n+---------+------------+\n| name | SUM(units) |\n+---------+------------+\n| Chun | 148 |\n| Esben | 74 |\n| Kaolin | 144 |\n| Tatiana | 170 |\n+---------+------------+\n\nThe GROUP BY clause is required when using an aggregate function along with\nregular column data, otherwise the result will be a mismatch, as in the\nfollowing common type of mistake:\n\nSELECT name,SUM(units) FROM sales\n;+------+------------+\n| name | SUM(units) |\n+------+------------+\n| Chun | 536 |\n+------+------------+\n\nAs a window function:\n\nCREATE OR REPLACE TABLE student_test (name CHAR(10), test CHAR(10), score\nTINYINT);\nINSERT INTO student_test VALUES \n (\'Chun\', \'SQL\', 75), (\'Chun\', \'Tuning\', 73),\n (\'Esben\', \'SQL\', 43), (\'Esben\', \'Tuning\', 31),\n (\'Kaolin\', \'SQL\', 56), (\'Kaolin\', \'Tuning\', 88),\n (\'Tatiana\', \'SQL\', 87);\n\nSELECT name, test, score, SUM(score) OVER (PARTITION BY name) AS total_score\nFROM student_test;\n+---------+--------+-------+-------------+\n| name | test | score | total_score |\n+---------+--------+-------+-------------+\n| Chun | SQL | 75 | 148 |\n| Chun | Tuning | 73 | 148 |\n| Esben | SQL | 43 | 74 |\n| Esben | Tuning | 31 | 74 |\n| Kaolin | SQL | 56 | 144 |\n| Kaolin | Tuning | 88 | 144 |\n| Tatiana | SQL | 87 | 87 |\n+---------+--------+-------+-------------+\n\nURL: https://mariadb.com/kb/en/sum/','','https://mariadb.com/kb/en/sum/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (188,16,'VARIANCE','Syntax\n------\n\nVARIANCE(expr)\n\nDescription\n-----------\n\nReturns the population standard variance of expr. This is an extension to\nstandard SQL. The standard SQL function VAR_POP() can be used instead.\n\nVariance is calculated by\n\n* working out the mean for the set\n* for each number, subtracting the mean and squaring the result\n* calculate the average of the resulting differences\n\nIt is an aggregate function, and so can be used with the GROUP BY clause.\n\nVARIANCE() can be used as a window function.\n\nVARIANCE() returns NULL if there were no matching rows.\n\nExamples\n--------\n\nCREATE TABLE v(i tinyint);\n\nINSERT INTO v VALUES(101),(99);\n\nSELECT VARIANCE(i) FROM v;\n+-------------+\n| VARIANCE(i) |\n+-------------+\n| 1.0000 |\n+-------------+\n\nINSERT INTO v VALUES(120),(80);\n\nSELECT VARIANCE(i) FROM v;\n+-------------+\n| VARIANCE(i) |\n+-------------+\n| 200.5000 |\n+-------------+\n\nAs an aggregate function:\n\nCREATE OR REPLACE TABLE stats (category VARCHAR(2), x INT);\n\nINSERT INTO stats VALUES \n (\'a\',1),(\'a\',2),(\'a\',3),\n (\'b\',11),(\'b\',12),(\'b\',20),(\'b\',30),(\'b\',60);\n\nSELECT category, STDDEV_POP(x), STDDEV_SAMP(x), VAR_POP(x) \n FROM stats GROUP BY category;\n+----------+---------------+----------------+------------+\n| category | STDDEV_POP(x) | STDDEV_SAMP(x) | VAR_POP(x) |\n+----------+---------------+----------------+------------+\n| a | 0.8165 | 1.0000 | 0.6667 |\n| b | 18.0400 | 20.1693 | 325.4400 |\n+----------+---------------+----------------+------------+\n\nAs a window function:\n\nCREATE OR REPLACE TABLE student_test (name CHAR(10), test CHAR(10), score\nTINYINT);\n\nINSERT INTO student_test VALUES \n (\'Chun\', \'SQL\', 75), (\'Chun\', \'Tuning\', 73),\n (\'Esben\', \'SQL\', 43), (\'Esben\', \'Tuning\', 31),\n (\'Kaolin\', \'SQL\', 56), (\'Kaolin\', \'Tuning\', 88),\n (\'Tatiana\', \'SQL\', 87);\n\nSELECT name, test, score, VAR_POP(score) \n OVER (PARTITION BY test) AS variance_results FROM student_test;\n+---------+--------+-------+------------------+\n| name | test | score | variance_results |\n+---------+--------+-------+------------------+\n| Chun | SQL | 75 | 287.1875 |\n| Chun | Tuning | 73 | 582.0000 |\n| Esben | SQL | 43 | 287.1875 |\n| Esben | Tuning | 31 | 582.0000 |\n| Kaolin | SQL | 56 | 287.1875 |\n| Kaolin | Tuning | 88 | 582.0000 |\n| Tatiana | SQL | 87 | 287.1875 |\n+---------+--------+-------+------------------+\n\nURL: https://mariadb.com/kb/en/variance/','','https://mariadb.com/kb/en/variance/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (189,16,'VAR_POP','Syntax\n------\n\nVAR_POP(expr)\n\nDescription\n-----------\n\nReturns the population standard variance of expr. It considers rows as the\nwhole population, not as a sample, so it has the number of rows as the\ndenominator. You can also use VARIANCE(), which is equivalent but is not\nstandard SQL.\n\nVariance is calculated by\n\n* working out the mean for the set\n* for each number, subtracting the mean and squaring the result\n* calculate the average of the resulting differences\n\nIt is an aggregate function, and so can be used with the GROUP BY clause.\n\nVAR_POP() can be used as a window function.\n\nVAR_POP() returns NULL if there were no matching rows.\n\nExamples\n--------\n\nCREATE TABLE v(i tinyint);\n\nINSERT INTO v VALUES(101),(99);\n\nSELECT VAR_POP(i) FROM v;\n+------------+\n| VAR_POP(i) |\n+------------+\n| 1.0000 |\n+------------+\n\nINSERT INTO v VALUES(120),(80);\n\nSELECT VAR_POP(i) FROM v;\n+------------+\n| VAR_POP(i) |\n+------------+\n| 200.5000 |\n+------------+\n\nAs an aggregate function:\n\nCREATE OR REPLACE TABLE stats (category VARCHAR(2), x INT);\n\nINSERT INTO stats VALUES \n (\'a\',1),(\'a\',2),(\'a\',3),\n (\'b\',11),(\'b\',12),(\'b\',20),(\'b\',30),(\'b\',60);\n\nSELECT category, STDDEV_POP(x), STDDEV_SAMP(x), VAR_POP(x) \n FROM stats GROUP BY category;\n+----------+---------------+----------------+------------+\n| category | STDDEV_POP(x) | STDDEV_SAMP(x) | VAR_POP(x) |\n+----------+---------------+----------------+------------+\n| a | 0.8165 | 1.0000 | 0.6667 |\n| b | 18.0400 | 20.1693 | 325.4400 |\n+----------+---------------+----------------+------------+\n\nAs a window function:\n\nCREATE OR REPLACE TABLE student_test (name CHAR(10), test CHAR(10), score\nTINYINT);\n\nINSERT INTO student_test VALUES \n (\'Chun\', \'SQL\', 75), (\'Chun\', \'Tuning\', 73),\n (\'Esben\', \'SQL\', 43), (\'Esben\', \'Tuning\', 31),\n (\'Kaolin\', \'SQL\', 56), (\'Kaolin\', \'Tuning\', 88),\n (\'Tatiana\', \'SQL\', 87);\n\nSELECT name, test, score, VAR_POP(score) \n OVER (PARTITION BY test) AS variance_results FROM student_test;\n+---------+--------+-------+------------------+\n| name | test | score | variance_results |\n+---------+--------+-------+------------------+\n| Chun | SQL | 75 | 287.1875 |\n| Esben | SQL | 43 | 287.1875 |\n| Kaolin | SQL | 56 | 287.1875 |\n| Tatiana | SQL | 87 | 287.1875 |\n| Chun | Tuning | 73 | 582.0000 |\n| Esben | Tuning | 31 | 582.0000 |\n| Kaolin | Tuning | 88 | 582.0000 |\n+---------+--------+-------+------------------+\n\nURL: https://mariadb.com/kb/en/var_pop/','','https://mariadb.com/kb/en/var_pop/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (190,16,'VAR_SAMP','Syntax\n------\n\nVAR_SAMP(expr)\n\nDescription\n-----------\n\nReturns the sample variance of expr. That is, the denominator is the number of\nrows minus one.\n\nIt is an aggregate function, and so can be used with the GROUP BY clause.\n\nVAR_SAMP() can be used as a window function.\n\nVAR_SAMP() returns NULL if there were no matching rows.\n\nExamples\n--------\n\nAs an aggregate function:\n\nCREATE OR REPLACE TABLE stats (category VARCHAR(2), x INT);\n\nINSERT INTO stats VALUES \n (\'a\',1),(\'a\',2),(\'a\',3),\n (\'b\',11),(\'b\',12),(\'b\',20),(\'b\',30),(\'b\',60);\n\nSELECT category, STDDEV_POP(x), STDDEV_SAMP(x), VAR_POP(x) \n FROM stats GROUP BY category;\n+----------+---------------+----------------+------------+\n| category | STDDEV_POP(x) | STDDEV_SAMP(x) | VAR_POP(x) |\n+----------+---------------+----------------+------------+\n| a | 0.8165 | 1.0000 | 0.6667 |\n| b | 18.0400 | 20.1693 | 325.4400 |\n+----------+---------------+----------------+------------+\n\nAs a window function:\n\nCREATE OR REPLACE TABLE student_test (name CHAR(10), test CHAR(10), score\nTINYINT);\n\nINSERT INTO student_test VALUES \n (\'Chun\', \'SQL\', 75), (\'Chun\', \'Tuning\', 73),\n (\'Esben\', \'SQL\', 43), (\'Esben\', \'Tuning\', 31),\n (\'Kaolin\', \'SQL\', 56), (\'Kaolin\', \'Tuning\', 88),\n (\'Tatiana\', \'SQL\', 87);\n\nSELECT name, test, score, VAR_SAMP(score) \n OVER (PARTITION BY test) AS variance_results FROM student_test;\n+---------+--------+-------+------------------+\n| name | test | score | variance_results |\n+---------+--------+-------+------------------+\n| Chun | SQL | 75 | 382.9167 |\n| Chun | Tuning | 73 | 873.0000 |\n| Esben | SQL | 43 | 382.9167 |\n| Esben | Tuning | 31 | 873.0000 |\n| Kaolin | SQL | 56 | 382.9167 |\n| Kaolin | Tuning | 88 | 873.0000 |\n| Tatiana | SQL | 87 | 382.9167 |\n+---------+--------+-------+------------------+\n\nURL: https://mariadb.com/kb/en/var_samp/','','https://mariadb.com/kb/en/var_samp/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (191,17,'BENCHMARK','Syntax\n------\n\nBENCHMARK(count,expr)\n\nDescription\n-----------\n\nThe BENCHMARK() function executes the expression expr repeatedly count times.\nIt may be used to time how quickly MariaDB processes the expression. The\nresult value is always 0. The intended use is from within the mysql client,\nwhich reports query execution times.\n\nExamples\n--------\n\nSELECT BENCHMARK(1000000,ENCODE(\'hello\',\'goodbye\'));\n+----------------------------------------------+\n| BENCHMARK(1000000,ENCODE(\'hello\',\'goodbye\')) |\n+----------------------------------------------+\n| 0 |\n+----------------------------------------------+\n1 row in set (0.21 sec)\n\nURL: https://mariadb.com/kb/en/benchmark/','','https://mariadb.com/kb/en/benchmark/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (192,17,'BINLOG_GTID_POS','Syntax\n------\n\nBINLOG_GTID_POS(binlog_filename,binlog_offset)\n\nDescription\n-----------\n\nThe BINLOG_GTID_POS() function takes as input an old-style binary log position\nin the form of a file name and a file offset. It looks up the position in the\ncurrent binlog, and returns a string representation of the corresponding GTID\nposition. If the position is not found in the current binlog, NULL is returned.\n\nExamples\n--------\n\nSELECT BINLOG_GTID_POS(\"master-bin.000001\", 600);\n\nURL: https://mariadb.com/kb/en/binlog_gtid_pos/','','https://mariadb.com/kb/en/binlog_gtid_pos/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (193,17,'CHARSET','Syntax\n------\n\nCHARSET(str)\n\nDescription\n-----------\n\nReturns the character set of the string argument. If str is not a string, it\nis considered as a binary string (so the function returns \'binary\'). This\napplies to NULL, too. The return value is a string in the utf8 character set.\n\nExamples\n--------\n\nSELECT CHARSET(\'abc\');\n+----------------+\n| CHARSET(\'abc\') |\n+----------------+\n| latin1 |\n+----------------+\n\nSELECT CHARSET(CONVERT(\'abc\' USING utf8));\n+------------------------------------+\n| CHARSET(CONVERT(\'abc\' USING utf8)) |\n+------------------------------------+\n| utf8 |\n+------------------------------------+\n\nSELECT CHARSET(USER());\n+-----------------+\n| CHARSET(USER()) |\n+-----------------+\n| utf8 |\n+-----------------+\n\nURL: https://mariadb.com/kb/en/charset/','','https://mariadb.com/kb/en/charset/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (194,17,'COERCIBILITY','Syntax\n------\n\nCOERCIBILITY(str)\n\nDescription\n-----------\n\nReturns the collation coercibility value of the string argument. Coercibility\ndefines what will be converted to what in case of collation conflict, with an\nexpression with higher coercibility being converted to the collation of an\nexpression with lower coercibility.\n\n+-----------------------------+---------------------------+------------------+\n| Coercibility | Description | Example |\n+-----------------------------+---------------------------+------------------+\n| 0 | Explicit | Value using a |\n| | | COLLATE clause |\n+-----------------------------+---------------------------+------------------+\n| 1 | No collation | Concatenated |\n| | | strings using |\n| | | different |\n| | | collations |\n+-----------------------------+---------------------------+------------------+\n| 2 | Implicit | Column value |\n+-----------------------------+---------------------------+------------------+\n| 3 | Constant | USER() return |\n| | | value |\n+-----------------------------+---------------------------+------------------+\n| 4 | Coercible | Literal string |\n+-----------------------------+---------------------------+------------------+\n| 5 | Ignorable | NULL or derived |\n| | | from NULL |\n+-----------------------------+---------------------------+------------------+\n\nExamples\n--------\n\nSELECT COERCIBILITY(\'abc\' COLLATE latin1_swedish_ci);\n+-----------------------------------------------+\n| COERCIBILITY(\'abc\' COLLATE latin1_swedish_ci) |\n+-----------------------------------------------+\n| 0 |\n+-----------------------------------------------+\n\nSELECT COERCIBILITY(USER());\n+----------------------+\n| COERCIBILITY(USER()) |\n+----------------------+\n| 3 |\n+----------------------+\n\nSELECT COERCIBILITY(\'abc\');\n+---------------------+\n| COERCIBILITY(\'abc\') |\n+---------------------+\n| 4 |\n+---------------------+\n\nURL: https://mariadb.com/kb/en/coercibility/','','https://mariadb.com/kb/en/coercibility/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (195,17,'COLLATION','Syntax\n------\n\nCOLLATION(str)\n\nDescription\n-----------\n\nReturns the collation of the string argument. If str is not a string, it is\nconsidered as a binary string (so the function returns \'binary\'). This applies\nto NULL, too. The return value is a string in the utf8 character set.\n\nSee Character Sets and Collations.\n\nExamples\n--------\n\nSELECT COLLATION(\'abc\');\n+-------------------+\n| COLLATION(\'abc\') |\n+-------------------+\n| latin1_swedish_ci |\n+-------------------+\n\nSELECT COLLATION(_utf8\'abc\');\n+-----------------------+\n| COLLATION(_utf8\'abc\') |\n+-----------------------+\n| utf8_general_ci |\n+-----------------------+\n\nURL: https://mariadb.com/kb/en/collation/','','https://mariadb.com/kb/en/collation/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (196,17,'CONNECTION_ID','Syntax\n------\n\nCONNECTION_ID()\n\nDescription\n-----------\n\nReturns the connection ID for the connection. Every connection (including\nevents) has an ID that is unique among the set of currently connected clients.\n\nUntil MariaDB 10.3.1, returns MYSQL_TYPE_LONGLONG, or bigint(10), in all\ncases. From MariaDB 10.3.1, returns MYSQL_TYPE_LONG, or int(10), when the\nresult would fit within 32-bits.\n\nExamples\n--------\n\nSELECT CONNECTION_ID();\n+-----------------+\n| CONNECTION_ID() |\n+-----------------+\n| 3 |\n+-----------------+\n\nURL: https://mariadb.com/kb/en/connection_id/','','https://mariadb.com/kb/en/connection_id/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (197,17,'CURRENT_ROLE','Syntax\n------\n\nCURRENT_ROLE, CURRENT_ROLE()\n\nDescription\n-----------\n\nReturns the current role name. This determines your access privileges. The\nreturn value is a string in the utf8 character set.\n\nIf there is no current role, NULL is returned.\n\nThe output of SELECT CURRENT_ROLE is equivalent to the contents of the\nENABLED_ROLES Information Schema table.\n\nUSER() returns the combination of user and host used to login. CURRENT_USER()\nreturns the account used to determine current connection\'s privileges.\n\nExamples\n--------\n\nSELECT CURRENT_ROLE;\n+--------------+\n| CURRENT_ROLE |\n+--------------+\n| NULL |\n+--------------+\n\nSET ROLE staff;\n\nSELECT CURRENT_ROLE;\n+--------------+\n| CURRENT_ROLE |\n+--------------+\n| staff |\n+--------------+\n\nURL: https://mariadb.com/kb/en/current_role/','','https://mariadb.com/kb/en/current_role/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (198,17,'CURRENT_USER','Syntax\n------\n\nCURRENT_USER, CURRENT_USER()\n\nDescription\n-----------\n\nReturns the user name and host name combination for the MariaDB account that\nthe server used to authenticate the current client. This account determines\nyour access privileges. The return value is a string in the utf8 character set.\n\nThe value of CURRENT_USER() can differ from the value of USER().\nCURRENT_ROLE() returns the current active role.\n\nExamples\n--------\n\nshell> mysql --user=\"anonymous\"\n\nselect user(),current_user();\n+---------------------+----------------+\n| user() | current_user() |\n+---------------------+----------------+\n| anonymous@localhost | @localhost |\n+---------------------+----------------+\n\nWhen calling CURRENT_USER() in a stored procedure, it returns the owner of the\nstored procedure, as defined with DEFINER.\n\nURL: https://mariadb.com/kb/en/current_user/','','https://mariadb.com/kb/en/current_user/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (199,17,'DATABASE','Syntax\n------\n\nDATABASE()\n\nDescription\n-----------\n\nReturns the default (current) database name as a string in the utf8 character\nset. If there is no default database, DATABASE() returns NULL. Within a stored\nroutine, the default database is the database that the routine is associated\nwith, which is not necessarily the same as the database that is the default in\nthe calling context.\n\nSCHEMA() is a synonym for DATABASE().\n\nTo select a default database, the USE statement can be run. Another way to set\nthe default database is specifying its name at mysql command line client\nstartup.\n\nExamples\n--------\n\nSELECT DATABASE();\n+------------+\n| DATABASE() |\n+------------+\n| NULL |\n+------------+\n\nUSE test;\nDatabase changed\n\nSELECT DATABASE();\n+------------+\n| DATABASE() |\n+------------+\n| test |\n+------------+\n\nURL: https://mariadb.com/kb/en/database/','','https://mariadb.com/kb/en/database/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (200,17,'DECODE_HISTOGRAM','Syntax\n------\n\nDECODE_HISTOGRAM(hist_type,histogram)\n\nDescription\n-----------\n\nReturns a string of comma separated numeric values corresponding to a\nprobability distribution represented by the histogram of type hist_type\n(SINGLE_PREC_HB or DOUBLE_PREC_HB). The hist_type and histogram would be\ncommonly used from the mysql.column_stats table.\n\nSee Histogram Based Statistics for details.\n\nExamples\n--------\n\nCREATE TABLE origin (\n i INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,\n v INT UNSIGNED NOT NULL\n);\n\nINSERT INTO origin(v) VALUES \n (1),(2),(3),(4),(5),(10),(20),\n (30),(40),(50),(60),(70),(80),\n (90),(100),(200),(400),(800);\n\nSET histogram_size=10,histogram_type=SINGLE_PREC_HB;\n\nANALYZE TABLE origin PERSISTENT FOR ALL;\n+-------------+---------+----------+-----------------------------------------+\n| Table | Op | Msg_type | Msg_text |\n+-------------+---------+----------+-----------------------------------------+\n| test.origin | analyze | status | Engine-independent statistics collected |\n| test.origin | analyze | status | OK |\n+-------------+---------+----------+-----------------------------------------+\n\nSELECT db_name,table_name,column_name,hist_type,\n hex(histogram),decode_histogram(hist_type,histogram)\n FROM mysql.column_stats WHERE db_name=\'test\' and table_name=\'origin\';\n+---------+------------+-------------+----------------+----------------------+-\n-----------------------------------------------------------------+\n| db_name | table_name | column_name | hist_type | hex(histogram) |\ndecode_histogram(hist_type,histogram) |\n+---------+------------+-------------+----------------+----------------------+-\n-----------------------------------------------------------------+\n| test | origin | i | SINGLE_PREC_HB | 0F2D3C5A7887A5C3D2F0 |\n0.059,0.118,0.059,0.118,0.118,0.059,0.118,0.118,0.059,0.118,0.059 |\n| test | origin | v | SINGLE_PREC_HB | 000001060C0F161C1F7F |\n0.000,0.000,0.004,0.020,0.024,0.012,0.027,0.024,0.012,0.376,0.502 |\n+---------+------------+-------------+----------------+----------------------+-\n-----------------------------------------------------------------+\n\nSET histogram_size=20,histogram_type=DOUBLE_PREC_HB;\n\nANALYZE TABLE origin PERSISTENT FOR ALL;\n+-------------+---------+----------+-----------------------------------------+\n| Table | Op | Msg_type | Msg_text |\n+-------------+---------+----------+-----------------------------------------+\n| test.origin | analyze | status | Engine-independent statistics collected |\n| test.origin | analyze | status | OK |\n+-------------+---------+----------+-----------------------------------------+\n\nSELECT db_name,table_name,column_name,\n hist_type,hex(histogram),decode_histogram(hist_type,histogram)\n FROM mysql.column_stats WHERE db_name=\'test\' and table_name=\'origin\';\n+---------+------------+-------------+----------------+------------------------\n-----------------+-------------------------------------------------------------\n---------------------------+\n| db_name | table_name | column_name | hist_type | hex(histogram) \n | decode_histogram(hist_type,histogram)\n |\n+---------+------------+-------------+----------------+------------------------\n-----------------+-------------------------------------------------------------\n---------------------------+\n| test | origin | i | DOUBLE_PREC_HB |\n0F0F2D2D3C3C5A5A78788787A5A5C3C3D2D2F0F0 |\n0.05882,0.11765,0.05882,0.11765,0.11765,0.05882,0.11765,0.11765,0.05882,0.11765\n0.05882 |\n| test | origin | v | DOUBLE_PREC_HB |\n5200F600480116067E0CB30F1B16831CB81FD67F |\n0.00125,0.00250,0.00125,0.01877,0.02502,0.01253,0.02502,0.02502,0.01253,0.37546\n0.50063 |\n\nURL: https://mariadb.com/kb/en/decode_histogram/','','https://mariadb.com/kb/en/decode_histogram/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (201,17,'DEFAULT','Syntax\n------\n\nDEFAULT(col_name)\n\nDescription\n-----------\n\nReturns the default value for a table column. If the column has no default\nvalue (and is not NULLABLE - NULLABLE fields have a NULL default), an error is\nreturned.\n\nFor integer columns using AUTO_INCREMENT, 0 is returned.\n\nWhen using DEFAULT as a value to set in an INSERT or UPDATE statement, you can\nuse the bare keyword DEFAULT without the parentheses and argument to refer to\nthe column in context. You can only use DEFAULT as a bare keyword if you are\nusing it alone without a surrounding expression or function.\n\nExamples\n--------\n\nSelect only non-default values for a column:\n\nSELECT i FROM t WHERE i != DEFAULT(i);\n\nUpdate values to be one greater than the default value:\n\nUPDATE t SET i = DEFAULT(i)+1 WHERE i < 100;\n\nWhen referring to the default value exactly in UPDATE or INSERT, you can omit\nthe argument:\n\nINSERT INTO t (i) VALUES (DEFAULT);\nUPDATE t SET i = DEFAULT WHERE i < 100;\n\nCREATE OR REPLACE TABLE t (\n i INT NOT NULL AUTO_INCREMENT,\n j INT NOT NULL,\n k INT DEFAULT 3,\n l INT NOT NULL DEFAULT 4,\n m INT,\n PRIMARY KEY (i)\n);\n\nDESC t;\n+-------+---------+------+-----+---------+----------------+\n| Field | Type | Null | Key | Default | Extra |\n+-------+---------+------+-----+---------+----------------+\n| i | int(11) | NO | PRI | NULL | auto_increment |\n| j | int(11) | NO | | NULL | |\n| k | int(11) | YES | | 3 | |\n| l | int(11) | NO | | 4 | |\n| m | int(11) | YES | | NULL | |\n+-------+---------+------+-----+---------+----------------+\n\nINSERT INTO t (j) VALUES (1);\nINSERT INTO t (j,m) VALUES (2,2);\nINSERT INTO t (j,l,m) VALUES (3,3,3);\n\nSELECT * FROM t;\n+---+---+------+---+------+\n| i | j | k | l | m |\n+---+---+------+---+------+\n| 1 | 1 | 3 | 4 | NULL |\n| 2 | 2 | 3 | 4 | 2 |\n| 3 | 3 | 3 | 3 | 3 |\n+---+---+------+---+------+\n\nSELECT DEFAULT(i), DEFAULT(k), DEFAULT (l), DEFAULT(m) FROM t;\n+------------+------------+-------------+------------+\n| DEFAULT(i) | DEFAULT(k) | DEFAULT (l) | DEFAULT(m) |\n+------------+------------+-------------+------------+\n| 0 | 3 | 4 | NULL |\n| 0 | 3 | 4 | NULL |\n| 0 | 3 | 4 | NULL |\n+------------+------------+-------------+------------+\n\nSELECT DEFAULT(i), DEFAULT(k), DEFAULT (l), DEFAULT(m), DEFAULT(j) FROM t;\nERROR 1364 (HY000): Field \'j\' doesn\'t have a default value\n\nSELECT * FROM t WHERE i = DEFAULT(i);\nEmpty set (0.001 sec)\n\nSELECT * FROM t WHERE j = DEFAULT(j);\nERROR 1364 (HY000): Field \'j\' doesn\'t have a default value\n\nSELECT * FROM t WHERE k = DEFAULT(k);\n+---+---+------+---+------+\n| i | j | k | l | m |\n+---+---+------+---+------+\n| 1 | 1 | 3 | 4 | NULL |\n| 2 | 2 | 3 | 4 | 2 |\n| 3 | 3 | 3 | 3 | 3 |\n+---+---+------+---+------+\n\nSELECT * FROM t WHERE l = DEFAULT(l);\n+---+---+------+---+------+\n| i | j | k | l | m |\n+---+---+------+---+------+\n| 1 | 1 | 3 | 4 | NULL |\n| 2 | 2 | 3 | 4 | 2 |\n+---+---+------+---+------+\n\nSELECT * FROM t WHERE m = DEFAULT(m);\nEmpty set (0.001 sec)\n\nSELECT * FROM t WHERE m <=> DEFAULT(m);\n+---+---+------+---+------+\n| i | j | k | l | m |\n+---+---+------+---+------+\n| 1 | 1 | 3 | 4 | NULL |\n+---+---+------+---+------+\n\nURL: https://mariadb.com/kb/en/default/','','https://mariadb.com/kb/en/default/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (202,17,'FOUND_ROWS','Syntax\n------\n\nFOUND_ROWS()\n\nDescription\n-----------\n\nA SELECT statement may include a LIMIT clause to restrict the number of rows\nthe server returns to the client. In some cases, it is desirable to know how\nmany rows the statement would have returned without the LIMIT, but without\nrunning the statement again. To obtain this row count, include a\nSQL_CALC_FOUND_ROWS option in the SELECT statement, and then invoke\nFOUND_ROWS() afterwards.\n\nYou can also use FOUND_ROWS() to obtain the number of rows returned by a\nSELECT which does not contain a LIMIT clause. In this case you don\'t need to\nuse the SQL_CALC_FOUND_ROWS option. This can be useful for example in a stored\nprocedure.\n\nAlso, this function works with some other statements which return a resultset,\nincluding SHOW, DESC and HELP. For DELETE ... RETURNING you should use\nROW_COUNT(). It also works as a prepared statement, or after executing a\nprepared statement.\n\nStatements which don\'t return any results don\'t affect FOUND_ROWS() - the\nprevious value will still be returned.\n\nWarning: When used after a CALL statement, this function returns the number of\nrows selected by the last query in the procedure, not by the whole procedure.\n\nStatements using the FOUND_ROWS() function are not safe for replication.\n\nExamples\n--------\n\nSHOW ENGINES\\G\n*************************** 1. row ***************************\n Engine: CSV\n Support: YES\n Comment: Stores tables as CSV files\nTransactions: NO\n XA: NO\n Savepoints: NO\n*************************** 2. row ***************************\n Engine: MRG_MyISAM\n Support: YES\n Comment: Collection of identical MyISAM tables\nTransactions: NO\n XA: NO\n Savepoints: NO\n\n...\n\n*************************** 8. row ***************************\n Engine: PERFORMANCE_SCHEMA\n Support: YES\n Comment: Performance Schema\nTransactions: NO\n XA: NO\n Savepoints: NO\n8 rows in set (0.000 sec)\n\nSELECT FOUND_ROWS();\n+--------------+\n| FOUND_ROWS() |\n+--------------+\n| 8 |\n+--------------+\n\nSELECT SQL_CALC_FOUND_ROWS * FROM tbl_name WHERE id > 100 LIMIT 10;\n\nSELECT FOUND_ROWS();\n+--------------+\n| FOUND_ROWS() |\n+--------------+\n| 23 |\n+--------------+\n\nURL: https://mariadb.com/kb/en/found_rows/','','https://mariadb.com/kb/en/found_rows/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (203,17,'LAST_INSERT_ID','Syntax\n------\n\nLAST_INSERT_ID(), LAST_INSERT_ID(expr)\n\nDescription\n-----------\n\nLAST_INSERT_ID() (no arguments) returns the first automatically generated\nvalue successfully inserted for an AUTO_INCREMENT column as a result of the\nmost recently executed INSERT statement. The value of LAST_INSERT_ID() remains\nunchanged if no rows are successfully inserted.\n\nIf one gives an argument to LAST_INSERT_ID(), then it will return the value of\nthe expression and the next call to LAST_INSERT_ID() will return the same\nvalue. The value will also be sent to the client and can be accessed by the\nmysql_insert_id function.\n\nFor example, after inserting a row that generates an AUTO_INCREMENT value, you\ncan get the value like this:\n\nSELECT LAST_INSERT_ID();\n+------------------+\n| LAST_INSERT_ID() |\n+------------------+\n| 9 |\n+------------------+\n\nYou can also use LAST_INSERT_ID() to delete the last inserted row:\n\nDELETE FROM product WHERE id = LAST_INSERT_ID();\n\nIf no rows were successfully inserted, LAST_INSERT_ID() returns 0.\n\nThe value of LAST_INSERT_ID() will be consistent across all versions if all\nrows in the INSERT or UPDATE statement were successful.\n\nThe currently executing statement does not affect the value of\nLAST_INSERT_ID(). Suppose that you generate an AUTO_INCREMENT value with one\nstatement, and then refer to LAST_INSERT_ID() in a multiple-row INSERT\nstatement that inserts rows into a table with its own AUTO_INCREMENT column.\nThe value of LAST_INSERT_ID() will remain stable in the second statement; its\nvalue for the second and later rows is not affected by the earlier row\ninsertions. (However, if you mix references to LAST_INSERT_ID() and\nLAST_INSERT_ID(expr), the effect is undefined.)\n\nIf the previous statement returned an error, the value of LAST_INSERT_ID() is\nundefined. For transactional tables, if the statement is rolled back due to an\nerror, the value of LAST_INSERT_ID() is left undefined. For manual ROLLBACK,\nthe value of LAST_INSERT_ID() is not restored to that before the transaction;\nit remains as it was at the point of the ROLLBACK.\n\nWithin the body of a stored routine (procedure or function) or a trigger, the\nvalue of LAST_INSERT_ID() changes the same way as for statements executed\noutside the body of these kinds of objects. The effect of a stored routine or\ntrigger upon the value of LAST_INSERT_ID() that is seen by following\nstatements depends on the kind of routine:\n\n* If a stored procedure executes statements that change the value of\nLAST_INSERT_ID(), the new value will be seen by statements that follow the\nprocedure call.\n\n* For stored functions and triggers that change the value, the value is\nrestored when the function or trigger ends, so following statements will not\nsee a changed value.\n\nExamples\n--------\n\nCREATE TABLE t (\n id INTEGER UNSIGNED AUTO_INCREMENT PRIMARY KEY,\n f VARCHAR(1))\nENGINE = InnoDB;\n\nINSERT INTO t(f) VALUES(\'a\');\n\nSELECT LAST_INSERT_ID();\n+------------------+\n| LAST_INSERT_ID() |\n+------------------+\n| 1 |\n+------------------+\n\nINSERT INTO t(f) VALUES(\'b\');\n\nINSERT INTO t(f) VALUES(\'c\');\n\nSELECT LAST_INSERT_ID();\n+------------------+\n| LAST_INSERT_ID() |\n+------------------+\n| 3 |\n+------------------+\n\nINSERT INTO t(f) VALUES(\'d\'),(\'e\');\n\nSELECT LAST_INSERT_ID();\n+------------------+\n| LAST_INSERT_ID() |\n+------------------+\n| 4 |\n+------------------+\n\nSELECT * FROM t;\n+----+------+\n| id | f |\n+----+------+\n| 1 | a |\n| 2 | b |\n| 3 | c |\n| 4 | d |\n| 5 | e |\n+----+------+\n\nSELECT LAST_INSERT_ID(12);\n+--------------------+\n| LAST_INSERT_ID(12) |\n+--------------------+\n| 12 |\n+--------------------+\n\nSELECT LAST_INSERT_ID();\n+------------------+\n| LAST_INSERT_ID() |\n+------------------+\n| 12 |\n+------------------+\n\nINSERT INTO t(f) VALUES(\'f\');\n\nSELECT LAST_INSERT_ID();\n+------------------+\n| LAST_INSERT_ID() |\n+------------------+\n| 6 |\n+------------------+\n\nSELECT * FROM t;\n+----+------+\n| id | f |\n+----+------+\n| 1 | a |\n| 2 | b |\n| 3 | c |\n| 4 | d |\n| 5 | e |\n| 6 | f |\n+----+------+\n\nSELECT LAST_INSERT_ID(12);\n+--------------------+\n| LAST_INSERT_ID(12) |\n+--------------------+\n| 12 |\n+--------------------+\n\nINSERT INTO t(f) VALUES(\'g\');\n\nSELECT * FROM t;\n+----+------+\n| id | f |\n+----+------+\n| 1 | a |\n| 2 | b |\n| 3 | c |\n| 4 | d |\n| 5 | e |\n| 6 | f |\n| 7 | g |\n+----+------+\n\nURL: https://mariadb.com/kb/en/last_insert_id/','','https://mariadb.com/kb/en/last_insert_id/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (204,17,'LAST_VALUE','Syntax\n------\n\nLAST_VALUE(expr,[expr,...])\n\nLAST_VALUE(expr) OVER (\n [ PARTITION BY partition_expression ]\n [ ORDER BY order_list ]\n)\n\nDescription\n-----------\n\nLAST_VALUE() evaluates all expressions and returns the last.\n\nThis is useful together with setting user variables to a value with\n@var:=expr, for example when you want to get data of rows updated/deleted\nwithout having to do two queries against the table.\n\nLAST_VALUE can be used as a window function.\n\nReturns NULL if no last value exists.\n\nExamples\n--------\n\nCREATE TABLE t1 (a int, b int);\nINSERT INTO t1 VALUES(1,10),(2,20);\nDELETE FROM t1 WHERE a=1 AND last_value(@a:=a,@b:=b,1);\nSELECT @a,@b;\n+------+------+\n| @a | @b |\n+------+------+\n| 1 | 10 |\n+------+------+\n\nAs a window function:\n\nCREATE TABLE t1 (\n pk int primary key,\n a int,\n b int,\n c char(10),\n d decimal(10, 3),\n e real\n);\n\nINSERT INTO t1 VALUES\n( 1, 0, 1, \'one\', 0.1, 0.001),\n( 2, 0, 2, \'two\', 0.2, 0.002),\n( 3, 0, 3, \'three\', 0.3, 0.003),\n( 4, 1, 2, \'three\', 0.4, 0.004),\n( 5, 1, 1, \'two\', 0.5, 0.005),\n( 6, 1, 1, \'one\', 0.6, 0.006),\n( 7, 2, NULL, \'n_one\', 0.5, 0.007),\n( 8, 2, 1, \'n_two\', NULL, 0.008),\n( 9, 2, 2, NULL, 0.7, 0.009),\n(10, 2, 0, \'n_four\', 0.8, 0.010),\n(11, 2, 10, NULL, 0.9, NULL);\n\nSELECT pk, FIRST_VALUE(pk) OVER (ORDER BY pk) AS first_asc,\n LAST_VALUE(pk) OVER (ORDER BY pk) AS last_asc,\n FIRST_VALUE(pk) OVER (ORDER BY pk DESC) AS first_desc,\n LAST_VALUE(pk) OVER (ORDER BY pk DESC) AS last_desc\nFROM t1\nORDER BY pk DESC;\n\n+----+-----------+----------+------------+-----------+\n| pk | first_asc | last_asc | first_desc | last_desc |\n+----+-----------+----------+------------+-----------+\n| 11 | 1 | 11 | 11 | 11 |\n| 10 | 1 | 10 | 11 | 10 |\n| 9 | 1 | 9 | 11 | 9 |\n| 8 | 1 | 8 | 11 | 8 |\n| 7 | 1 | 7 | 11 | 7 |\n| 6 | 1 | 6 | 11 | 6 |\n| 5 | 1 | 5 | 11 | 5 |\n| 4 | 1 | 4 | 11 | 4 |\n| 3 | 1 | 3 | 11 | 3 |\n| 2 | 1 | 2 | 11 | 2 |\n| 1 | 1 | 1 | 11 | 1 |\n+----+-----------+----------+------------+-----------+\n\nCREATE OR REPLACE TABLE t1 (i int);\nINSERT INTO t1 VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10);\n\nSELECT i,\n FIRST_VALUE(i) OVER (ORDER BY i ROWS BETWEEN CURRENT ROW and 1 FOLLOWING) AS\nf_1f,\n LAST_VALUE(i) OVER (ORDER BY i ROWS BETWEEN CURRENT ROW and 1 FOLLOWING) AS\nl_1f,\n FIRST_VALUE(i) OVER (ORDER BY i ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) AS\nf_1p1f,\n LAST_VALUE(i) OVER (ORDER BY i ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) AS\nf_1p1f,\n FIRST_VALUE(i) OVER (ORDER BY i ROWS BETWEEN 2 PRECEDING AND 1 PRECEDING) AS\nf_2p1p,\n LAST_VALUE(i) OVER (ORDER BY i ROWS BETWEEN 2 PRECEDING AND 1 PRECEDING) AS\nf_2p1p,\n FIRST_VALUE(i) OVER (ORDER BY i ROWS BETWEEN 1 FOLLOWING AND 2 FOLLOWING) AS\nf_1f2f,\n LAST_VALUE(i) OVER (ORDER BY i ROWS BETWEEN 1 FOLLOWING AND 2 FOLLOWING) AS\nf_1f2f\nFROM t1;\n\n+------+------+------+--------+--------+--------+--------+--------+--------+\n| i | f_1f | l_1f | f_1p1f | f_1p1f | f_2p1p | f_2p1p | f_1f2f | f_1f2f |\n+------+------+------+--------+--------+--------+--------+--------+--------+\n| 1 | 1 | 2 | 1 | 2 | NULL | NULL | 2 | 3 |\n| 2 | 2 | 3 | 1 | 3 | 1 | 1 | 3 | 4 |\n| 3 | 3 | 4 | 2 | 4 | 1 | 2 | 4 | 5 |\n| 4 | 4 | 5 | 3 | 5 | 2 | 3 | 5 | 6 |\n| 5 | 5 | 6 | 4 | 6 | 3 | 4 | 6 | 7 |\n| 6 | 6 | 7 | 5 | 7 | 4 | 5 | 7 | 8 |\n| 7 | 7 | 8 | 6 | 8 | 5 | 6 | 8 | 9 |\n| 8 | 8 | 9 | 7 | 9 | 6 | 7 | 9 | 10 |\n| 9 | 9 | 10 | 8 | 10 | 7 | 8 | 10 | 10 |\n| 10 | 10 | 10 | 9 | 10 | 8 | 9 | NULL | NULL |\n+------+------+------+--------+--------+--------+--------+--------+--------+\n\nURL: https://mariadb.com/kb/en/last_value/','','https://mariadb.com/kb/en/last_value/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (205,17,'PROCEDURE ANALYSE','Syntax\n------\n\nanalyse([max_elements[,max_memory]])\n\nDescription\n-----------\n\nThis procedure is defined in the sql/sql_analyse.cc file. It examines the\nresult from a query and returns an analysis of the results that suggests\noptimal data types for each column. To obtain this analysis, append PROCEDURE\nANALYSE to the end of a SELECT statement:\n\nSELECT ... FROM ... WHERE ... PROCEDURE ANALYSE([max_elements,[max_memory]])\n\nFor example:\n\nSELECT col1, col2 FROM table1 PROCEDURE ANALYSE(10, 2000);\n\nThe results show some statistics for the values returned by the query, and\npropose an optimal data type for the columns. This can be helpful for checking\nyour existing tables, or after importing new data. You may need to try\ndifferent settings for the arguments so that PROCEDURE ANALYSE() does not\nsuggest the ENUM data type when it is not appropriate.\n\nThe arguments are optional and are used as follows:\n\n* max_elements (default 256) is the maximum number of distinct values that\nanalyse notices per column. This is used by analyse to check whether the\noptimal data type should be of type ENUM; if there are more than max_elements\ndistinct values, then ENUM is not a suggested type.\n* max_memory (default 8192) is the maximum amount of memory that analyse\nshould allocate per column while trying to find all distinct values.\n\nURL: https://mariadb.com/kb/en/procedure-analyse/','','https://mariadb.com/kb/en/procedure-analyse/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (206,17,'ROWNUM','MariaDB starting with 10.6.1\n----------------------------\nFrom MariaDB 10.6.1, the ROWNUM() function is supported.\n\nSyntax\n------\n\nROWNUM()\n\nIn Oracle mode one can just use ROWNUM, without the parentheses.\n\nDescription\n-----------\n\nROWNUM() returns the current number of accepted rows in the current context.\nIt main purpose is to emulate the ROWNUM pseudo column in Oracle. For MariaDB\nnative applications, we recommend the usage of LIMIT, as it is easier to use\nand gives more predictable results than the usage of ROWNUM().\n\nThe main difference between using LIMIT and ROWNUM() to limit the rows in the\nresult is that LIMIT works on the result set while ROWNUM works on the number\nof accepted rows (before any ORDER or GROUP BY clauses).\n\nThe following queries will return the same results:\n\nSELECT * from t1 LIMIT 10;\nSELECT * from t1 WHERE ROWNUM() <= 10;\n\nWhile the following may return different results based on in which orders the\nrows are found:\n\nSELECT * from t1 ORDER BY a LIMIT 10;\nSELECT * from t1 ORDER BY a WHERE ROWNUM() <= 10;\n\nThe recommended way to use ROWNUM to limit the number of returned rows and get\npredictable results is to have the query in a subquery and test for ROWNUM()\nin the outer query:\n\nSELECT * FROM (select * from t1 ORDER BY a) WHERE ROWNUM() <= 10;\n\nROWNUM() can be used in the following contexts:\n\n* SELECT\n* INSERT\n* UPDATE\n* DELETE\n* LOAD DATA INFILE\n\nUsed in other contexts, ROWNUM() will return 0.\n\nExamples\n--------\n\nINSERT INTO t1 VALUES (1,ROWNUM()),(2,ROWNUM()),(3,ROWNUM());\n\nINSERT INTO t1 VALUES (1),(2) returning a, ROWNUM();\n\nUPDATE t1 SET row_num_column=ROWNUM();\n\nDELETE FROM t1 WHERE a < 10 AND ROWNUM() < 2;\n\nLOAD DATA INFILE \'filename\' into table t1 fields terminated by \',\' \n lines terminated by \"\\r\\n\" (a,b) set c=ROWNUM();\n\nOptimizations\n-------------\n\nIn many cases where ROWNUM() is used, MariaDB will use the same optimizations\nit uses with LIMIT.\n\nLIMIT optimization is possible when using ROWNUM in the following manner:\n\n* When one is in a top level WHERE clause comparing ROWNUM() with a numerical\nconstant using any of the following expressions:\nROWNUM() < number\nROWNUM() <= number\nROWNUM() = 1\nROWNUM() can be also be the right argument to the comparison function.\n\nIn the above cases, LIMIT optimization can be done in the following cases:\n\n* For the current sub query when the ROWNUM comparison is done on the top\nlevel:\n\nSELECT * from t1 WHERE ROWNUM() <= 2 AND t1.a > 0\n\n* For an inner sub query, when the upper level has only a ROWNUM() comparison\nin the WHERE clause:\n\nSELECT * from (select * from t1) as t WHERE ROWNUM() <= 2\n\nOther Changes Related to ROWNUM\n-------------------------------\n\nWhen ROWNUM() is used anywhere in a query, the optimization to ignore ORDER BY\nin subqueries are disabled.\n\nThis was done to get the following common Oracle query to work as expected:\n\nselect * from (select * from t1 order by a desc) as t where rownum() <= 2;\n\nBy default MariaDB ignores any ORDER BY in subqueries both because the SQL\nstandard defines results sets in subqueries to be un-ordered and because of\nperformance reasons (especially when using views in subqueries). See MDEV-3926\n\"Wrong result with GROUP BY ... WITH ROLLUP\" for a discussion of this topic.\n\nOther Considerations\n--------------------\n\nWhile MariaDB tries to emulate Oracle\'s usage of ROWNUM() as closely as\npossible, there are cases where the result is different:\n\n* When the optimizer finds rows in a different order (because of different\nstorage methods or optimization). This may also happen in Oracle if one adds\nor deletes an index, in which case the rows may be found in a different order.\n\nNote that usage of ROWNUM() in functions or stored procedures will use their\nown context, not the caller\'s context.\n\nURL: https://mariadb.com/kb/en/rownum/','','https://mariadb.com/kb/en/rownum/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (207,17,'ROW_COUNT','Syntax\n------\n\nROW_COUNT()\n\nDescription\n-----------\n\nROW_COUNT() returns the number of rows updated, inserted or deleted by the\npreceding statement. This is the same as the row count that the mysql client\ndisplays and the value from the mysql_affected_rows() C API function.\n\nGenerally:\n\n* For statements which return a result set (such as SELECT, SHOW, DESC or\nHELP), returns -1, even when the result set is empty. This is also true for\nadministrative statements, such as OPTIMIZE.\n* For DML statements other than SELECT and for ALTER TABLE, returns the number\nof affected rows.\n* For DDL statements (including TRUNCATE) and for other statements which don\'t\nreturn any result set (such as USE, DO, SIGNAL or DEALLOCATE PREPARE), returns\n0.\n\nFor UPDATE, affected rows is by default the number of rows that were actually\nchanged. If the CLIENT_FOUND_ROWS flag to mysql_real_connect() is specified\nwhen connecting to mysqld, affected rows is instead the number of rows matched\nby the WHERE clause.\n\nFor REPLACE, deleted rows are also counted. So, if REPLACE deletes a row and\nadds a new row, ROW_COUNT() returns 2.\n\nFor INSERT ... ON DUPLICATE KEY, updated rows are counted twice. So, if INSERT\nadds a new rows and modifies another row, ROW_COUNT() returns 3.\n\nROW_COUNT() does not take into account rows that are not directly\ndeleted/updated by the last statement. This means that rows deleted by foreign\nkeys or triggers are not counted.\n\nWarning: You can use ROW_COUNT() with prepared statements, but you need to\ncall it after EXECUTE, not after DEALLOCATE PREPARE, because the row count for\nallocate prepare is always 0.\n\nWarning: When used after a CALL statement, this function returns the number of\nrows affected by the last statement in the procedure, not by the whole\nprocedure.\n\nWarning: After INSERT DELAYED, ROW_COUNT() returns the number of the rows you\ntried to insert, not the number of the successful writes.\n\nThis information can also be found in the diagnostics area.\n\nStatements using the ROW_COUNT() function are not safe for replication.\n\nExamples\n--------\n\nCREATE TABLE t (A INT);\n\nINSERT INTO t VALUES(1),(2),(3);\n\nSELECT ROW_COUNT();\n+-------------+\n| ROW_COUNT() |\n+-------------+\n| 3 |\n+-------------+\n\nDELETE FROM t WHERE A IN(1,2);\n\nSELECT ROW_COUNT(); \n+-------------+\n| ROW_COUNT() |\n+-------------+\n| 2 |\n+-------------+\n\nExample with prepared statements:\n\nSET @q = \'INSERT INTO t VALUES(1),(2),(3);\';\n\nPREPARE stmt FROM @q;\n\nEXECUTE stmt;\nQuery OK, 3 rows affected (0.39 sec)\nRecords: 3 Duplicates: 0 Warnings: 0\n\nSELECT ROW_COUNT();\n+-------------+\n| ROW_COUNT() |\n+-------------+\n| 3 |\n+-------------+\n\nURL: https://mariadb.com/kb/en/row_count/','','https://mariadb.com/kb/en/row_count/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (208,17,'SCHEMA','Syntax\n------\n\nSCHEMA()\n\nDescription\n-----------\n\nThis function is a synonym for DATABASE().\n\nURL: https://mariadb.com/kb/en/schema/','','https://mariadb.com/kb/en/schema/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (209,17,'SESSION_USER','Syntax\n------\n\nSESSION_USER()\n\nDescription\n-----------\n\nSESSION_USER() is a synonym for USER().\n\nURL: https://mariadb.com/kb/en/session_user/','','https://mariadb.com/kb/en/session_user/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (210,17,'SYSTEM_USER','Syntax\n------\n\nSYSTEM_USER()\n\nDescription\n-----------\n\nSYSTEM_USER() is a synonym for USER().\n\nURL: https://mariadb.com/kb/en/system_user/','','https://mariadb.com/kb/en/system_user/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (211,17,'USER','Syntax\n------\n\nUSER()\n\nDescription\n-----------\n\nReturns the current MariaDB user name and host name, given when authenticating\nto MariaDB, as a string in the utf8 character set.\n\nNote that the value of USER() may differ from the value of CURRENT_USER(),\nwhich is the user used to authenticate the current client. CURRENT_ROLE()\nreturns the current active role.\n\nSYSTEM_USER() and SESSION_USER are synonyms for USER().\n\nStatements using the USER() function or one of its synonyms are not safe for\nstatement level replication.\n\nExamples\n--------\n\nshell> mysql --user=\"anonymous\"\n\nSELECT USER(),CURRENT_USER();\n+---------------------+----------------+\n| USER() | CURRENT_USER() |\n+---------------------+----------------+\n| anonymous@localhost | @localhost |\n+---------------------+----------------+\n\nTo select only the IP address, use SUBSTRING_INDEX(),\n\nSELECT SUBSTRING_INDEX(USER(), \'@\', -1);\n+----------------------------------+\n| SUBSTRING_INDEX(USER(), \'@\', -1) |\n+----------------------------------+\n| 192.168.0.101 |\n+----------------------------------+\n\nURL: https://mariadb.com/kb/en/user/','','https://mariadb.com/kb/en/user/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (212,17,'VERSION','Syntax\n------\n\nVERSION()\n\nDescription\n-----------\n\nReturns a string that indicates the MariaDB server version. The string uses\nthe utf8 character set.\n\nExamples\n--------\n\nSELECT VERSION();\n+----------------+\n| VERSION() |\n+----------------+\n| 10.4.7-MariaDB |\n+----------------+\n\nThe VERSION() string may have one or more of the following suffixes:\n\n+---------------------------+------------------------------------------------+\n| Suffix | Description |\n+---------------------------+------------------------------------------------+\n| -embedded | The server is an embedded server (libmysqld). |\n+---------------------------+------------------------------------------------+\n| -log | General logging, slow logging or binary |\n| | (replication) logging is enabled. |\n+---------------------------+------------------------------------------------+\n| -debug | The server is compiled for debugging. |\n+---------------------------+------------------------------------------------+\n| -valgrind | The server is compiled to be instrumented |\n| | with valgrind. |\n+---------------------------+------------------------------------------------+\n\nChanging the Version String\n---------------------------\n\nSome old legacy code may break because they are parsing the VERSION string and\nexpecting a MySQL string or a simple version string like Joomla til API17, see\nMDEV-7780.\n\nFrom MariaDB 10.2, one can fool these applications by setting the version\nstring from the command line or the my.cnf files with --version=....\n\nURL: https://mariadb.com/kb/en/version/','','https://mariadb.com/kb/en/version/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (213,18,'Assignment Operator (:=)','Syntax\n------\n\nvar_name := expr\n\nDescription\n-----------\n\nAssignment operator for assigning a value. The value on the right is assigned\nto the variable on left.\n\nUnlike the = operator, := can always be used to assign a value to a variable.\n\nThis operator works with both user-defined variables and local variables.\n\nWhen assigning the same value to several variables, LAST_VALUE() can be useful.\n\nExamples\n--------\n\nSELECT @x := 10;\n+----------+\n| @x := 10 |\n+----------+\n| 10 |\n+----------+\n\nSELECT @x, @y := @x;\n+------+----------+\n| @x | @y := @x |\n+------+----------+\n| 10 | 10 |\n+------+----------+\n\nURL: https://mariadb.com/kb/en/assignment-operator/','','https://mariadb.com/kb/en/assignment-operator/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (214,18,'Assignment Operator (=)','Syntax\n------\n\nidentifier = expr\n\nDescription\n-----------\n\nThe equal sign is used as both an assignment operator in certain contexts, and\nas a comparison operator. When used as assignment operator, the value on the\nright is assigned to the variable (or column, in some contexts) on the left.\n\nSince its use can be ambiguous, unlike the := assignment operator, the =\nassignment operator cannot be used in all contexts, and is only valid as part\nof a SET statement, or the SET clause of an UPDATE statement\n\nThis operator works with both user-defined variables and local variables.\n\nExamples\n--------\n\nUPDATE table_name SET x = 2 WHERE x > 100;\n\nSET @x = 1, @y := 2;\n\nURL: https://mariadb.com/kb/en/assignment-operators-assignment-operator/','','https://mariadb.com/kb/en/assignment-operators-assignment-operator/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (215,19,'Not Equal Operator','Syntax\n------\n\n<>, !=\n\nDescription\n-----------\n\nNot equal operator. Evaluates both SQL expressions and returns 1 if they are\nnot equal and 0 if they are equal, or NULL if either expression is NULL. If\nthe expressions return different data types, (for instance, a number and a\nstring), performs type conversion.\n\nWhen used in row comparisons these two queries return the same results:\n\nSELECT (t1.a, t1.b) != (t2.x, t2.y) \nFROM t1 INNER JOIN t2;\n\nSELECT (t1.a != t2.x) OR (t1.b != t2.y)\nFROM t1 INNER JOIN t2;\n\nExamples\n--------\n\nSELECT \'.01\' <> \'0.01\';\n+-----------------+\n| \'.01\' <> \'0.01\' |\n+-----------------+\n| 1 |\n+-----------------+\n\nSELECT .01 <> \'0.01\';\n+---------------+\n| .01 <> \'0.01\' |\n+---------------+\n| 0 |\n+---------------+\n\nSELECT \'zapp\' <> \'zappp\';\n+-------------------+\n| \'zapp\' <> \'zappp\' |\n+-------------------+\n| 1 |\n+-------------------+\n\nURL: https://mariadb.com/kb/en/not-equal/','','https://mariadb.com/kb/en/not-equal/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (216,19,'<','Syntax\n------\n\n<\n\nDescription\n-----------\n\nLess than operator. Evaluates both SQL expressions and returns 1 if the left\nvalue is less than the right value and 0 if it is not, or NULL if either\nexpression is NULL. If the expressions return different data types, (for\ninstance, a number and a string), performs type conversion.\n\nWhen used in row comparisons these two queries return the same results:\n\nSELECT (t1.a, t1.b) < (t2.x, t2.y) \nFROM t1 INNER JOIN t2;\n\nSELECT (t1.a < t2.x) OR ((t1.a = t2.x) AND (t1.b < t2.y))\nFROM t1 INNER JOIN t2;\n\nExamples\n--------\n\nSELECT 2 < 2;\n+-------+\n| 2 < 2 |\n+-------+\n| 0 |\n+-------+\n\nType conversion:\n\nSELECT 3<\'4\';\n+-------+\n| 3<\'4\' |\n+-------+\n| 1 |\n+-------+\n\nCase insensitivity - see Character Sets and Collations:\n\nSELECT \'a\'<\'A\';\n+---------+\n| \'a\'<\'A\' |\n+---------+\n| 0 |\n+---------+\n\nURL: https://mariadb.com/kb/en/less-than/','','https://mariadb.com/kb/en/less-than/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (217,19,'<=','Syntax\n------\n\n<=\n\nDescription\n-----------\n\nLess than or equal operator. Evaluates both SQL expressions and returns 1 if\nthe left value is less than or equal to the right value and 0 if it is not, or\nNULL if either expression is NULL. If the expressions return different data\ntypes, (for instance, a number and a string), performs type conversion.\n\nWhen used in row comparisons these two queries return the same results:\n\nSELECT (t1.a, t1.b) <= (t2.x, t2.y) \nFROM t1 INNER JOIN t2;\n\nSELECT (t1.a < t2.x) OR ((t1.a = t2.x) AND (t1.b <= t2.y))\nFROM t1 INNER JOIN t2;\n\nExamples\n--------\n\nSELECT 0.1 <= 2;\n+----------+\n| 0.1 <= 2 |\n+----------+\n| 1 |\n+----------+\n\nSELECT \'a\'<=\'A\';\n+----------+\n| \'a\'<=\'A\' |\n+----------+\n| 1 |\n+----------+\n\nURL: https://mariadb.com/kb/en/less-than-or-equal/','','https://mariadb.com/kb/en/less-than-or-equal/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (218,19,'<=>','Syntax\n------\n\n<=>\n\nDescription\n-----------\n\nNULL-safe equal operator. It performs an equality comparison like the =\noperator, but returns 1 rather than NULL if both operands are NULL, and 0\nrather than NULL if one operand is NULL.\n\na <=> b is equivalent to a = b OR (a IS NULL AND b IS NULL).\n\nWhen used in row comparisons these two queries return the same results:\n\nSELECT (t1.a, t1.b) <=> (t2.x, t2.y) \nFROM t1 INNER JOIN t2;\n\nSELECT (t1.a <=> t2.x) AND (t1.b <=> t2.y)\nFROM t1 INNER JOIN t2;\n\nSee also NULL Values in MariaDB.\n\nExamples\n--------\n\nSELECT 1 <=> 1, NULL <=> NULL, 1 <=> NULL;\n+---------+---------------+------------+\n| 1 <=> 1 | NULL <=> NULL | 1 <=> NULL |\n+---------+---------------+------------+\n| 1 | 1 | 0 |\n+---------+---------------+------------+\n\nSELECT 1 = 1, NULL = NULL, 1 = NULL;\n+-------+-------------+----------+\n| 1 = 1 | NULL = NULL | 1 = NULL |\n+-------+-------------+----------+\n| 1 | NULL | NULL |\n+-------+-------------+----------+\n\nURL: https://mariadb.com/kb/en/null-safe-equal/','','https://mariadb.com/kb/en/null-safe-equal/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (219,19,'=','Syntax\n------\n\nleft_expr = right_expr\n\nDescription\n-----------\n\nEqual operator. Evaluates both SQL expressions and returns 1 if they are\nequal, 0 if they are not equal, or NULL if either expression is NULL. If the\nexpressions return different data types (for example, a number and a string),\na type conversion is performed.\n\nWhen used in row comparisons these two queries are synonymous and return the\nsame results:\n\nSELECT (t1.a, t1.b) = (t2.x, t2.y) FROM t1 INNER JOIN t2;\n\nSELECT (t1.a = t2.x) AND (t1.b = t2.y) FROM t1 INNER JOIN t2;\n\nTo perform a NULL-safe comparison, use the <=> operator.\n\n= can also be used as an assignment operator.\n\nExamples\n--------\n\nSELECT 1 = 0;\n+-------+\n| 1 = 0 |\n+-------+\n| 0 |\n+-------+\n\nSELECT \'0\' = 0;\n+---------+\n| \'0\' = 0 |\n+---------+\n| 1 |\n+---------+\n\nSELECT \'0.0\' = 0;\n+-----------+\n| \'0.0\' = 0 |\n+-----------+\n| 1 |\n+-----------+\n\nSELECT \'0.01\' = 0;\n+------------+\n| \'0.01\' = 0 |\n+------------+\n| 0 |\n+------------+\n\nSELECT \'.01\' = 0.01;\n+--------------+\n| \'.01\' = 0.01 |\n+--------------+\n| 1 |\n+--------------+\n\nSELECT (5 * 2) = CONCAT(\'1\', \'0\');\n+----------------------------+\n| (5 * 2) = CONCAT(\'1\', \'0\') |\n+----------------------------+\n| 1 |\n+----------------------------+\n\nSELECT 1 = NULL;\n+----------+\n| 1 = NULL |\n+----------+\n| NULL |\n+----------+\n\nSELECT NULL = NULL;\n+-------------+\n| NULL = NULL |\n+-------------+\n| NULL |\n+-------------+\n\nURL: https://mariadb.com/kb/en/equal/','','https://mariadb.com/kb/en/equal/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (220,19,'>','Syntax\n------\n\n>\n\nDescription\n-----------\n\nGreater than operator. Evaluates both SQL expressions and returns 1 if the\nleft value is greater than the right value and 0 if it is not, or NULL if\neither expression is NULL. If the expressions return different data types,\n(for instance, a number and a string), performs type conversion.\n\nWhen used in row comparisons these two queries return the same results:\n\nSELECT (t1.a, t1.b) > (t2.x, t2.y) \nFROM t1 INNER JOIN t2;\n\nSELECT (t1.a > t2.x) OR ((t1.a = t2.x) AND (t1.b > t2.y))\nFROM t1 INNER JOIN t2;\n\nExamples\n--------\n\nSELECT 2 > 2;\n+-------+\n| 2 > 2 |\n+-------+\n| 0 |\n+-------+\n\nSELECT \'b\' > \'a\';\n+-----------+\n| \'b\' > \'a\' |\n+-----------+\n| 1 |\n+-----------+\n\nURL: https://mariadb.com/kb/en/greater-than/','','https://mariadb.com/kb/en/greater-than/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (221,19,'>=','Syntax\n------\n\n>=\n\nDescription\n-----------\n\nGreater than or equal operator. Evaluates both SQL expressions and returns 1\nif the left value is greater than or equal to the right value and 0 if it is\nnot, or NULL if either expression is NULL. If the expressions return different\ndata types, (for instance, a number and a string), performs type conversion.\n\nWhen used in row comparisons these two queries return the same results:\n\nSELECT (t1.a, t1.b) >= (t2.x, t2.y) \nFROM t1 INNER JOIN t2;\n\nSELECT (t1.a > t2.x) OR ((t1.a = t2.x) AND (t1.b >= t2.y))\nFROM t1 INNER JOIN t2;\n\nExamples\n--------\n\nSELECT 2 >= 2;\n+--------+\n| 2 >= 2 |\n+--------+\n| 1 |\n+--------+\n\nSELECT \'A\' >= \'a\';\n+------------+\n| \'A\' >= \'a\' |\n+------------+\n| 1 |\n+------------+\n\nURL: https://mariadb.com/kb/en/greater-than-or-equal/','','https://mariadb.com/kb/en/greater-than-or-equal/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (222,19,'BETWEEN AND','Syntax\n------\n\nexpr BETWEEN min AND max\n\nDescription\n-----------\n\nIf expr is greater than or equal to min and expr is less than or equal to max,\nBETWEEN returns 1, otherwise it returns 0. This is equivalent to the\nexpression (min <= expr AND expr <= max) if all the arguments are of the same\ntype. Otherwise type conversion takes place according to the rules described\nat Type Conversion, but applied to all the three arguments.\n\nExamples\n--------\n\nSELECT 1 BETWEEN 2 AND 3;\n+-------------------+\n| 1 BETWEEN 2 AND 3 |\n+-------------------+\n| 0 |\n+-------------------+\n\nSELECT \'b\' BETWEEN \'a\' AND \'c\';\n+-------------------------+\n| \'b\' BETWEEN \'a\' AND \'c\' |\n+-------------------------+\n| 1 |\n+-------------------------+\n\nSELECT 2 BETWEEN 2 AND \'3\';\n+---------------------+\n| 2 BETWEEN 2 AND \'3\' |\n+---------------------+\n| 1 |\n+---------------------+\n\nSELECT 2 BETWEEN 2 AND \'x-3\';\n+-----------------------+\n| 2 BETWEEN 2 AND \'x-3\' |\n+-----------------------+\n| 0 |\n+-----------------------+\n1 row in set, 1 warning (0.00 sec)\n\nWarning (Code 1292): Truncated incorrect DOUBLE value: \'x-3\'\n\nNULL:\n\nSELECT 1 BETWEEN 1 AND NULL;\n+----------------------+\n| 1 BETWEEN 1 AND NULL |\n+----------------------+\n| NULL |\n+----------------------+\n\nDATE, DATETIME and TIMESTAMP examples. Omitting the time component compares\nagainst 00:00, so later times on the same date are not returned:\n\nCREATE TABLE `x` (\n a date ,\n b datetime,\n c timestamp\n)\n\nINSERT INTO x VALUES \n (\'2018-11-11\', \'2018-11-11 05:15\', \'2018-11-11 05:15\'), \n (\'2018-11-12\', \'2018-11-12 05:15\', \'2018-11-12 05:15\');\n\nSELECT * FROM x WHERE a BETWEEN \'2018-11-11\' AND \'2018-11-12\';\n+------------+---------------------+---------------------+\n| a | b | c |\n+------------+---------------------+---------------------+\n| 2018-11-11 | 2018-11-11 05:15:00 | 2018-11-11 05:15:00 |\n| 2018-11-12 | 2018-11-12 05:15:00 | 2018-11-12 05:15:00 |\n+------------+---------------------+---------------------+\n\nSELECT * FROM x WHERE b BETWEEN \'2018-11-11\' AND \'2018-11-12\';\n+------------+---------------------+---------------------+\n| a | b | c |\n+------------+---------------------+---------------------+\n| 2018-11-11 | 2018-11-11 05:15:00 | 2018-11-11 05:15:00 |\n+------------+---------------------+---------------------+\n\nSELECT * FROM x WHERE c BETWEEN \'2018-11-11\' AND \'2018-11-12\';\n+------------+---------------------+---------------------+\n| a | b | c |\n+------------+---------------------+---------------------+\n| 2018-11-11 | 2018-11-11 05:15:00 | 2018-11-11 05:15:00 |\n+------------+---------------------+---------------------+\n\nURL: https://mariadb.com/kb/en/between-and/','','https://mariadb.com/kb/en/between-and/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (223,19,'COALESCE','Syntax\n------\n\nCOALESCE(value,...)\n\nDescription\n-----------\n\nReturns the first non-NULL value in the list, or NULL if there are no non-NULL\nvalues. At least one parameter must be passed.\n\nThe function is useful when substituting a default value for null values when\ndisplaying data.\n\nSee also NULL Values in MariaDB.\n\nExamples\n--------\n\nSELECT COALESCE(NULL,1);\n+------------------+\n| COALESCE(NULL,1) |\n+------------------+\n| 1 |\n+------------------+\n\nSELECT COALESCE(NULL,NULL,NULL);\n+--------------------------+\n| COALESCE(NULL,NULL,NULL) |\n+--------------------------+\n| NULL |\n+--------------------------+\n\nWhen two arguments are given, COALESCE() is the same as IFNULL():\n\nSET @a=NULL, @b=1;\n\nSELECT COALESCE(@a, @b), IFNULL(@a, @b);\n+------------------+----------------+\n| COALESCE(@a, @b) | IFNULL(@a, @b) |\n+------------------+----------------+\n| 1 | 1 |\n+------------------+----------------+\n\nHex type confusion:\n\nCREATE TABLE t1 (a INT, b VARCHAR(10));\nINSERT INTO t1 VALUES (0x31, 0x61),(COALESCE(0x31), COALESCE(0x61));\n\nSELECT * FROM t1;\n+------+------+\n| a | b |\n+------+------+\n| 49 | a |\n| 1 | a |\n+------+------+\n\nThe reason for the differing results above is that when 0x31 is inserted\ndirectly to the column, it\'s treated as a number (see Hexadecimal Literals),\nwhile when 0x31 is passed to COALESCE(), it\'s treated as a string, because:\n\n* HEX values have a string data type by default.\n* COALESCE() has the same data type as the argument.\n\nSubstituting zero for NULL (in this case when the aggregate function returns\nNULL after finding no rows):\n\nSELECT SUM(score) FROM student;\n+------------+\n| SUM(score) |\n+------------+\n| NULL |\n+------------+\n\nSELECT COALESCE(SUM(score),0) FROM student;\n+------------------------+\n| COALESCE(SUM(score),0) |\n+------------------------+\n| 0 |\n+------------------------+\n\nURL: https://mariadb.com/kb/en/coalesce/','','https://mariadb.com/kb/en/coalesce/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (224,19,'GREATEST','Syntax\n------\n\nGREATEST(value1,value2,...)\n\nDescription\n-----------\n\nWith two or more arguments, returns the largest (maximum-valued) argument. The\narguments are compared using the same rules as for LEAST().\n\nExamples\n--------\n\nSELECT GREATEST(2,0);\n+---------------+\n| GREATEST(2,0) |\n+---------------+\n| 2 |\n+---------------+\n\nSELECT GREATEST(34.0,3.0,5.0,767.0);\n+------------------------------+\n| GREATEST(34.0,3.0,5.0,767.0) |\n+------------------------------+\n| 767.0 |\n+------------------------------+\n\nSELECT GREATEST(\'B\',\'A\',\'C\');\n+-----------------------+\n| GREATEST(\'B\',\'A\',\'C\') |\n+-----------------------+\n| C |\n+-----------------------+\n\nURL: https://mariadb.com/kb/en/greatest/','','https://mariadb.com/kb/en/greatest/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (225,19,'IN','Syntax\n------\n\nexpr IN (value,...)\n\nDescription\n-----------\n\nReturns 1 if expr is equal to any of the values in the IN list, else returns\n0. If all values are constants, they are evaluated according to the type of\nexpr and sorted. The search for the item then is done using a binary search.\nThis means IN is very quick if the IN value list consists entirely of\nconstants. Otherwise, type conversion takes place according to the rules\ndescribed at Type Conversion, but applied to all the arguments.\n\nIf expr is NULL, IN always returns NULL. If at least one of the values in the\nlist is NULL, and one of the comparisons is true, the result is 1. If at least\none of the values in the list is NULL and none of the comparisons is true, the\nresult is NULL.\n\nExamples\n--------\n\nSELECT 2 IN (0,3,5,7);\n+----------------+\n| 2 IN (0,3,5,7) |\n+----------------+\n| 0 |\n+----------------+\n\nSELECT \'wefwf\' IN (\'wee\',\'wefwf\',\'weg\');\n+----------------------------------+\n| \'wefwf\' IN (\'wee\',\'wefwf\',\'weg\') |\n+----------------------------------+\n| 1 |\n+----------------------------------+\n\nType conversion:\n\nSELECT 1 IN (\'1\', \'2\', \'3\');\n+----------------------+\n| 1 IN (\'1\', \'2\', \'3\') |\n+----------------------+\n| 1 |\n+----------------------+\n\nSELECT NULL IN (1, 2, 3);\n+-------------------+\n| NULL IN (1, 2, 3) |\n+-------------------+\n| NULL |\n+-------------------+\n\nSELECT 1 IN (1, 2, NULL);\n+-------------------+\n| 1 IN (1, 2, NULL) |\n+-------------------+\n| 1 |\n+-------------------+\n\nSELECT 5 IN (1, 2, NULL);\n+-------------------+\n| 5 IN (1, 2, NULL) |\n+-------------------+\n| NULL |\n+-------------------+\n\nURL: https://mariadb.com/kb/en/in/','','https://mariadb.com/kb/en/in/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (226,19,'INTERVAL','Syntax\n------\n\nINTERVAL(N,N1,N2,N3,...)\n\nDescription\n-----------\n\nReturns the index of the last argument that is less than the first argument or\nis NULL.\n\nReturns 0 if N < N1, 1 if N < N2, 2 if N < N3 and so on or -1 if N is NULL.\nAll arguments are treated as integers. It is required that N1 < N2 < N3 < ...\n< Nn for this function to work correctly. This is because a fast binary search\nis used.\n\nExamples\n--------\n\nSELECT INTERVAL(23, 1, 15, 17, 30, 44, 200);\n+--------------------------------------+\n| INTERVAL(23, 1, 15, 17, 30, 44, 200) |\n+--------------------------------------+\n| 3 |\n+--------------------------------------+\n\nSELECT INTERVAL(10, 1, 10, 100, 1000);\n+--------------------------------+\n| INTERVAL(10, 1, 10, 100, 1000) |\n+--------------------------------+\n| 2 |\n+--------------------------------+\n\nSELECT INTERVAL(22, 23, 30, 44, 200);\n+-------------------------------+\n| INTERVAL(22, 23, 30, 44, 200) |\n+-------------------------------+\n| 0 |\n+-------------------------------+\n\nSELECT INTERVAL(10, 2, NULL);\n+-----------------------+\n| INTERVAL(10, 2, NULL) |\n+-----------------------+\n| 2 |\n+-----------------------+\n\nURL: https://mariadb.com/kb/en/interval/','','https://mariadb.com/kb/en/interval/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (227,19,'IS','Syntax\n------\n\nIS boolean_value\n\nDescription\n-----------\n\nTests a value against a boolean value, where boolean_value can be TRUE, FALSE,\nor UNKNOWN.\n\nThere is an important difference between using IS TRUE or comparing a value\nwith TRUE using =. When using =, only 1 equals to TRUE. But when using IS\nTRUE, all values which are logically true (like a number > 1) return TRUE.\n\nExamples\n--------\n\nSELECT 1 IS TRUE, 0 IS FALSE, NULL IS UNKNOWN;\n+-----------+------------+-----------------+\n| 1 IS TRUE | 0 IS FALSE | NULL IS UNKNOWN |\n+-----------+------------+-----------------+\n| 1 | 1 | 1 |\n+-----------+------------+-----------------+\n\nDifference between = and IS TRUE:\n\nSELECT 2 = TRUE, 2 IS TRUE;\n+----------+-----------+\n| 2 = TRUE | 2 IS TRUE |\n+----------+-----------+\n| 0 | 1 |\n+----------+-----------+\n\nURL: https://mariadb.com/kb/en/is/','','https://mariadb.com/kb/en/is/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (228,19,'IS NOT','Syntax\n------\n\nIS NOT boolean_value\n\nDescription\n-----------\n\nTests a value against a boolean value, where boolean_value can be TRUE, FALSE,\nor UNKNOWN.\n\nExamples\n--------\n\nSELECT 1 IS NOT UNKNOWN, 0 IS NOT UNKNOWN, NULL IS NOT UNKNOWN;\n+------------------+------------------+---------------------+\n| 1 IS NOT UNKNOWN | 0 IS NOT UNKNOWN | NULL IS NOT UNKNOWN |\n+------------------+------------------+---------------------+\n| 1 | 1 | 0 |\n+------------------+------------------+---------------------+\n\nSELECT NULL IS NOT TRUE, NULL IS NOT FALSE;\n+------------------+-------------------+\n| NULL IS NOT TRUE | NULL IS NOT FALSE |\n+------------------+-------------------+\n| 1 | 1 |\n+------------------+-------------------+\n\nURL: https://mariadb.com/kb/en/is-not/','','https://mariadb.com/kb/en/is-not/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (229,19,'IS NOT NULL','Syntax\n------\n\nIS NOT NULL\n\nDescription\n-----------\n\nTests whether a value is not NULL. See also NULL Values in MariaDB.\n\nExamples\n--------\n\nSELECT 1 IS NOT NULL, 0 IS NOT NULL, NULL IS NOT NULL;\n+---------------+---------------+------------------+\n| 1 IS NOT NULL | 0 IS NOT NULL | NULL IS NOT NULL |\n+---------------+---------------+------------------+\n| 1 | 1 | 0 |\n+---------------+---------------+------------------+\n\nURL: https://mariadb.com/kb/en/is-not-null/','','https://mariadb.com/kb/en/is-not-null/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (230,19,'IS NULL','Syntax\n------\n\nIS NULL\n\nDescription\n-----------\n\nTests whether a value is NULL. See also NULL Values in MariaDB.\n\nExamples\n--------\n\nSELECT 1 IS NULL, 0 IS NULL, NULL IS NULL;\n+-----------+-----------+--------------+\n| 1 IS NULL | 0 IS NULL | NULL IS NULL |\n+-----------+-----------+--------------+\n| 0 | 0 | 1 |\n+-----------+-----------+--------------+\n\nCompatibility\n-------------\n\nSome ODBC applications use the syntax auto_increment_field IS NOT NULL to find\nthe latest row that was inserted with an autogenerated key value. If your\napplications need this, you can set the sql_auto_is_null variable to 1.\n\nSET @@sql_auto_is_null=1;\nCREATE TABLE t1 (auto_increment_column INT NOT NULL AUTO_INCREMENT PRIMARY\nKEY);\nINSERT INTO t1 VALUES (NULL);\nSELECT * FROM t1 WHERE auto_increment_column IS NULL;\n\n+-----------------------+\n| auto_increment_column |\n+-----------------------+\n| 1 |\n+-----------------------+\n\nURL: https://mariadb.com/kb/en/is-null/','','https://mariadb.com/kb/en/is-null/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (231,19,'ISNULL','Syntax\n------\n\nISNULL(expr)\n\nDescription\n-----------\n\nIf expr is NULL, ISNULL() returns 1, otherwise it returns 0.\n\nSee also NULL Values in MariaDB.\n\nExamples\n--------\n\nSELECT ISNULL(1+1);\n+-------------+\n| ISNULL(1+1) |\n+-------------+\n| 0 |\n+-------------+\n\nSELECT ISNULL(1/0);\n+-------------+\n| ISNULL(1/0) |\n+-------------+\n| 1 |\n+-------------+\n\nURL: https://mariadb.com/kb/en/isnull/','','https://mariadb.com/kb/en/isnull/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (232,19,'LEAST','Syntax\n------\n\nLEAST(value1,value2,...)\n\nDescription\n-----------\n\nWith two or more arguments, returns the smallest (minimum-valued) argument.\nThe arguments are compared using the following rules:\n\n* If the return value is used in an INTEGER context or all arguments are\ninteger-valued, they are compared as integers.\n* If the return value is used in a REAL context or all arguments are\nreal-valued, they are compared as reals.\n* If any argument is a case-sensitive string, the arguments are compared as\ncase-sensitive strings.\n* In all other cases, the arguments are compared as case-insensitive strings.\n\nLEAST() returns NULL if any argument is NULL.\n\nExamples\n--------\n\nSELECT LEAST(2,0);\n+------------+\n| LEAST(2,0) |\n+------------+\n| 0 |\n+------------+\n\nSELECT LEAST(34.0,3.0,5.0,767.0);\n+---------------------------+\n| LEAST(34.0,3.0,5.0,767.0) |\n+---------------------------+\n| 3.0 |\n+---------------------------+\n\nSELECT LEAST(\'B\',\'A\',\'C\');\n+--------------------+\n| LEAST(\'B\',\'A\',\'C\') |\n+--------------------+\n| A |\n+--------------------+\n\nURL: https://mariadb.com/kb/en/least/','','https://mariadb.com/kb/en/least/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (233,19,'NOT BETWEEN','Syntax\n------\n\nexpr NOT BETWEEN min AND max\n\nDescription\n-----------\n\nThis is the same as NOT (expr BETWEEN min AND max).\n\nNote that the meaning of the alternative form NOT expr BETWEEN min AND max is\naffected by the HIGH_NOT_PRECEDENCE SQL_MODE flag.\n\nExamples\n--------\n\nSELECT 1 NOT BETWEEN 2 AND 3;\n+-----------------------+\n| 1 NOT BETWEEN 2 AND 3 |\n+-----------------------+\n| 1 |\n+-----------------------+\n\nSELECT \'b\' NOT BETWEEN \'a\' AND \'c\';\n+-----------------------------+\n| \'b\' NOT BETWEEN \'a\' AND \'c\' |\n+-----------------------------+\n| 0 |\n+-----------------------------+\n\nNULL:\n\nSELECT 1 NOT BETWEEN 1 AND NULL;\n+--------------------------+\n| 1 NOT BETWEEN 1 AND NULL |\n+--------------------------+\n| NULL |\n+--------------------------+\n\nURL: https://mariadb.com/kb/en/not-between/','','https://mariadb.com/kb/en/not-between/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (234,19,'NOT IN','Syntax\n------\n\nexpr NOT IN (value,...)\n\nDescription\n-----------\n\nThis is the same as NOT (expr IN (value,...)).\n\nExamples\n--------\n\nSELECT 2 NOT IN (0,3,5,7);\n+--------------------+\n| 2 NOT IN (0,3,5,7) |\n+--------------------+\n| 1 |\n+--------------------+\n\nSELECT \'wefwf\' NOT IN (\'wee\',\'wefwf\',\'weg\');\n+--------------------------------------+\n| \'wefwf\' NOT IN (\'wee\',\'wefwf\',\'weg\') |\n+--------------------------------------+\n| 0 |\n+--------------------------------------+\n\nSELECT 1 NOT IN (\'1\', \'2\', \'3\');\n+--------------------------+\n| 1 NOT IN (\'1\', \'2\', \'3\') |\n+--------------------------+\n| 0 |\n+--------------------------+\n\nNULL:\n\nSELECT NULL NOT IN (1, 2, 3);\n+-----------------------+\n| NULL NOT IN (1, 2, 3) |\n+-----------------------+\n| NULL |\n+-----------------------+\n\nSELECT 1 NOT IN (1, 2, NULL);\n+-----------------------+\n| 1 NOT IN (1, 2, NULL) |\n+-----------------------+\n| 0 |\n+-----------------------+\n\nSELECT 5 NOT IN (1, 2, NULL);\n+-----------------------+\n| 5 NOT IN (1, 2, NULL) |\n+-----------------------+\n| NULL |\n+-----------------------+\n\nURL: https://mariadb.com/kb/en/not-in/','','https://mariadb.com/kb/en/not-in/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (235,20,'&','Syntax\n------\n\n&\n\nDescription\n-----------\n\nBitwise AND. Converts the values to binary and compares bits. Only if both the\ncorresponding bits are 1 is the resulting bit also 1.\n\nSee also bitwise OR.\n\nExamples\n--------\n\nSELECT 2&1;\n+-----+\n| 2&1 |\n+-----+\n| 0 |\n+-----+\n\nSELECT 3&1;\n+-----+\n| 3&1 |\n+-----+\n| 1 |\n+-----+\n\nSELECT 29 & 15;\n+---------+\n| 29 & 15 |\n+---------+\n| 13 |\n+---------+\n\nURL: https://mariadb.com/kb/en/bitwise_and/','','https://mariadb.com/kb/en/bitwise_and/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (236,20,'<<','Syntax\n------\n\nvalue1 << value2\n\nDescription\n-----------\n\nConverts a longlong (BIGINT) number (value1) to binary and shifts value2 units\nto the left.\n\nExamples\n--------\n\nSELECT 1 << 2;\n+--------+\n| 1 << 2 |\n+--------+\n| 4 |\n+--------+\n\nURL: https://mariadb.com/kb/en/shift-left/','','https://mariadb.com/kb/en/shift-left/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (237,20,'>>','Syntax\n------\n\nvalue1 >> value2\n\nDescription\n-----------\n\nConverts a longlong (BIGINT) number (value1) to binary and shifts value2 units\nto the right.\n\nExamples\n--------\n\nSELECT 4 >> 2;\n+--------+\n| 4 >> 2 |\n+--------+\n| 1 |\n+--------+\n\nURL: https://mariadb.com/kb/en/shift-right/','','https://mariadb.com/kb/en/shift-right/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (238,20,'BIT_COUNT','Syntax\n------\n\nBIT_COUNT(N)\n\nDescription\n-----------\n\nReturns the number of bits that are set in the argument N.\n\nExamples\n--------\n\nSELECT BIT_COUNT(29), BIT_COUNT(b\'101010\');\n+---------------+----------------------+\n| BIT_COUNT(29) | BIT_COUNT(b\'101010\') |\n+---------------+----------------------+\n| 4 | 3 |\n+---------------+----------------------+\n\nURL: https://mariadb.com/kb/en/bit_count/','','https://mariadb.com/kb/en/bit_count/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (239,20,'^','Syntax\n------\n\n^\n\nDescription\n-----------\n\nBitwise XOR. Converts the values to binary and compares bits. If one (and only\none) of the corresponding bits is 1 is the resulting bit also 1.\n\nExamples\n--------\n\nSELECT 1 ^ 1;\n+-------+\n| 1 ^ 1 |\n+-------+\n| 0 |\n+-------+\n\nSELECT 1 ^ 0;\n+-------+\n| 1 ^ 0 |\n+-------+\n| 1 |\n+-------+\n\nSELECT 11 ^ 3;\n+--------+\n| 11 ^ 3 |\n+--------+\n| 8 |\n+--------+\n\nURL: https://mariadb.com/kb/en/bitwise-xor/','','https://mariadb.com/kb/en/bitwise-xor/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (240,20,'|','Syntax\n------\n\n|\n\nDescription\n-----------\n\nBitwise OR. Converts the values to binary and compares bits. If either of the\ncorresponding bits has a value of 1, the resulting bit is also 1.\n\nSee also bitwise AND.\n\nExamples\n--------\n\nSELECT 2|1;\n+-----+\n| 2|1 |\n+-----+\n| 3 |\n+-----+\n\nSELECT 29 | 15;\n+---------+\n| 29 | 15 |\n+---------+\n| 31 |\n+---------+\n\nURL: https://mariadb.com/kb/en/bitwise-or/','','https://mariadb.com/kb/en/bitwise-or/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (241,20,'~','Syntax\n------\n\n~\n\nDescription\n-----------\n\nBitwise NOT. Converts the value to 4 bytes binary and inverts all bits.\n\nExamples\n--------\n\nSELECT 3 & ~1;\n+--------+\n| 3 & ~1 |\n+--------+\n| 2 |\n+--------+\n\nSELECT 5 & ~1;\n+--------+\n| 5 & ~1 |\n+--------+\n| 4 |\n+--------+\n\nURL: https://mariadb.com/kb/en/bitwise-not/','','https://mariadb.com/kb/en/bitwise-not/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (242,20,'Parentheses','Parentheses are sometimes called precedence operators - this means that they\ncan be used to change the other operator\'s precedence in an expression. The\nexpressions that are written between parentheses are computed before the\nexpressions that are written outside. Parentheses must always contain an\nexpression (that is, they cannot be empty), and can be nested.\n\nFor example, the following expressions could return different results:\n\n* NOT a OR b\n* NOT (a OR b)\n\nIn the first case, NOT applies to a, so if a is FALSE or b is TRUE, the\nexpression returns TRUE. In the second case, NOT applies to the result of a OR\nb, so if at least one of a or b is TRUE, the expression is TRUE.\n\nWhen the precedence of operators is not intuitive, you can use parentheses to\nmake it immediately clear for whoever reads the statement.\n\nThe precedence of the NOT operator can also be affected by the\nHIGH_NOT_PRECEDENCE SQL_MODE flag.\n\nOther uses\n----------\n\nParentheses must always be used to enclose subqueries.\n\nParentheses can also be used in a JOIN statement between multiple tables to\ndetermine which tables must be joined first.\n\nAlso, parentheses are used to enclose the list of parameters to be passed to\nbuilt-in functions, user-defined functions and stored routines. However, when\nno parameter is passed to a stored procedure, parentheses are optional. For\nbuiltin functions and user-defined functions, spaces are not allowed between\nthe function name and the open parenthesis, unless the IGNORE_SPACE SQL_MODE\nis set. For stored routines (and for functions if IGNORE_SPACE is set) spaces\nare allowed before the open parenthesis, including tab characters and new line\ncharacters.\n\nSyntax errors\n-------------\n\nIf there are more open parentheses than closed parentheses, the error usually\nlooks like this:\n\nERROR 1064 (42000): You have an error in your SQL syntax; check the manual that\ncorresponds to your MariaDB server version for the right syntax to use near \'\'\na\nt line 1\n\nNote the empty string.\n\nIf there are more closed parentheses than open parentheses, the error usually\nlooks like this:\n\nERROR 1064 (42000): You have an error in your SQL syntax; check the manual that\ncorresponds to your MariaDB server version for the right syntax to use near \')\'\nat line 1\n\nNote the quoted closed parenthesis.\n\nURL: https://mariadb.com/kb/en/parentheses/','','https://mariadb.com/kb/en/parentheses/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (243,20,'TRUE FALSE','Description\n-----------\n\nThe constants TRUE and FALSE evaluate to 1 and 0, respectively. The constant\nnames can be written in any lettercase.\n\nExamples\n--------\n\nSELECT TRUE, true, FALSE, false;\n+------+------+-------+-------+\n| TRUE | TRUE | FALSE | FALSE |\n+------+------+-------+-------+\n| 1 | 1 | 0 | 0 |\n+------+------+-------+-------+\n\nURL: https://mariadb.com/kb/en/true-false/','','https://mariadb.com/kb/en/true-false/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (244,21,'ANALYZE TABLE','Syntax\n------\n\nANALYZE [NO_WRITE_TO_BINLOG | LOCAL] TABLE tbl_name [,tbl_name ...] \n [PERSISTENT FOR [ALL|COLUMNS ([col_name [,col_name ...]])]\n [INDEXES ([index_name [,index_name ...]])]]\n\nDescription\n-----------\n\nANALYZE TABLE analyzes and stores the key distribution for a table (index\nstatistics). This statement works with MyISAM, Aria and InnoDB tables. During\nthe analysis, InnoDB will allow reads/writes, and MyISAM/Aria reads/inserts.\nFor MyISAM tables, this statement is equivalent to using myisamchk --analyze.\n\nFor more information on how the analysis works within InnoDB, see InnoDB\nLimitations.\n\nMariaDB uses the stored key distribution to decide the order in which tables\nshould be joined when you perform a join on something other than a constant.\nIn addition, key distributions can be used when deciding which indexes to use\nfor a specific table within a query.\n\nThis statement requires SELECT and INSERT privileges for the table.\n\nBy default, ANALYZE TABLE statements are written to the binary log and will be\nreplicated. The NO_WRITE_TO_BINLOG keyword (LOCAL is an alias) will ensure the\nstatement is not written to the binary log.\n\nFrom MariaDB 10.3.19, ANALYZE TABLE statements are not logged to the binary\nlog if read_only is set. See also Read-Only Replicas.\n\nANALYZE TABLE is also supported for partitioned tables. You can use ALTER\nTABLE ... ANALYZE PARTITION to analyze one or more partitions.\n\nThe Aria storage engine supports progress reporting for the ANALYZE TABLE\nstatement.\n\nEngine-Independent Statistics\n-----------------------------\n\nANALYZE TABLE supports engine-independent statistics. See Engine-Independent\nTable Statistics: Collecting Statistics with the ANALYZE TABLE Statement for\nmore information.\n\nUseful Variables\n----------------\n\nFor calculating the number of duplicates, ANALYZE TABLE uses a buffer of\nsort_buffer_size bytes per column. You can slightly increase the speed of\nANALYZE TABLE by increasing this variable.\n\nURL: https://mariadb.com/kb/en/analyze-table/','','https://mariadb.com/kb/en/analyze-table/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (245,21,'CHECK TABLE','Syntax\n------\n\nCHECK TABLE tbl_name [, tbl_name] ... [option] ...\n\noption = {FOR UPGRADE | QUICK | FAST | MEDIUM | EXTENDED | CHANGED}\n\nDescription\n-----------\n\nCHECK TABLE checks a table or tables for errors. CHECK TABLE works for\nArchive, Aria, CSV, InnoDB and MyISAM tables. For Aria and MyISAM tables, the\nkey statistics are updated as well. For CSV, see also Checking and Repairing\nCSV Tables.\n\nAs an alternative, myisamchk is a commandline tool for checking MyISAM tables\nwhen the tables are not being accessed. For Aria tables, there is a similar\ntool: aria_chk.\n\nFor checking dynamic columns integrity, COLUMN_CHECK() can be used.\n\nCHECK TABLE can also check views for problems, such as tables that are\nreferenced in the view definition that no longer exist.\n\nCHECK TABLE is also supported for partitioned tables. You can use ALTER TABLE\n... CHECK PARTITION to check one or more partitions.\n\nThe meaning of the different options are as follows - note that this can vary\na bit between storage engines:\n\n+-----+----------------------------------------------------------------------+\n| FOR | Do a very quick check if the storage format for the table has |\n| UPG | changed so that one needs to do a REPAIR. This is only needed when |\n| ADE | one upgrades between major versions of MariaDB or MySQL. This is |\n| | usually done by running mysql_upgrade. |\n+-----+----------------------------------------------------------------------+\n| FAS | Only check tables that has not been closed properly or are marked |\n| | as corrupt. Only supported by the MyISAM and Aria engines. For |\n| | other engines the table is checked normally |\n+-----+----------------------------------------------------------------------+\n| CHA | Check only tables that has changed since last REPAIR / CHECK. Only |\n| GED | supported by the MyISAM and Aria engines. For other engines the |\n| | table is checked normally. |\n+-----+----------------------------------------------------------------------+\n| QUI | Do a fast check. For MyISAM and Aria, this means skipping the check |\n| K | of the delete link chain, which may take some time. |\n+-----+----------------------------------------------------------------------+\n| MED | Scan also the data files. Checks integrity between data and index |\n| UM | files with checksums. In most cases this should find all possible |\n| | errors. |\n+-----+----------------------------------------------------------------------+\n| EXT | Does a full check to verify every possible error. For MyISAM and |\n| NDE | Aria, verify for each row that all it keys exists and points to the |\n| | row. This may take a long time on large tables. Ignored by InnoDB |\n| | before MariaDB 10.6.11, MariaDB 10.7.7, MariaDB 10.8.6 and MariaDB |\n| | 10.9.4. |\n+-----+----------------------------------------------------------------------+\n\nFor most cases running CHECK TABLE without options or MEDIUM should be good\nenough.\n\nThe Aria storage engine supports progress reporting for this statement.\n\nIf you want to know if two tables are identical, take a look at CHECKSUM TABLE.\n\nInnoDB\n------\n\nIf CHECK TABLE finds an error in an InnoDB table, MariaDB might shutdown to\nprevent the error propagation. In this case, the problem will be reported in\nthe error log. Otherwise the table or an index might be marked as corrupted,\nto prevent use. This does not happen with some minor problems, like a wrong\nnumber of entries in a secondary index. Those problems are reported in the\noutput of CHECK TABLE.\n\nEach tablespace contains a header with metadata. This header is not checked by\nthis statement.\n\nDuring the execution of CHECK TABLE, other threads may be blocked.\n\nURL: https://mariadb.com/kb/en/check-table/','','https://mariadb.com/kb/en/check-table/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (246,21,'CHECK VIEW','Syntax\n------\n\nCHECK VIEW view_name\n\nDescription\n-----------\n\nThe CHECK VIEW statement was introduced in MariaDB 10.0.18 to assist with\nfixing MDEV-6916, an issue introduced in MariaDB 5.2 where the view algorithms\nwere swapped. It checks whether the view algorithm is correct. It is run as\npart of mysql_upgrade, and should not normally be required in regular use.\n\nURL: https://mariadb.com/kb/en/check-view/','','https://mariadb.com/kb/en/check-view/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (247,21,'CHECKSUM TABLE','Syntax\n------\n\nCHECKSUM TABLE tbl_name [, tbl_name] ... [ QUICK | EXTENDED ]\n\nDescription\n-----------\n\nCHECKSUM TABLE reports a table checksum. This is very useful if you want to\nknow if two tables are the same (for example on a master and slave).\n\nWith QUICK, the live table checksum is reported if it is available, or NULL\notherwise. This is very fast. A live checksum is enabled by specifying the\nCHECKSUM=1 table option when you create the table; currently, this is\nsupported only for Aria and MyISAM tables.\n\nWith EXTENDED, the entire table is read row by row and the checksum is\ncalculated. This can be very slow for large tables.\n\nIf neither QUICK nor EXTENDED is specified, MariaDB returns a live checksum if\nthe table storage engine supports it and scans the table otherwise.\n\nCHECKSUM TABLE requires the SELECT privilege for the table.\n\nFor a nonexistent table, CHECKSUM TABLE returns NULL and generates a warning.\n\nThe table row format affects the checksum value. If the row format changes,\nthe checksum will change. This means that when a table created with a\nMariaDB/MySQL version is upgraded to another version, the checksum value will\nprobably change.\n\nTwo identical tables should always match to the same checksum value; however,\nalso for non-identical tables there is a very slight chance that they will\nreturn the same value as the hashing algorithm is not completely\ncollision-free.\n\nIdentical Tables\n----------------\n\nIdentical tables mean that the CREATE statement is identical and that the\nfollowing variable, which affects the storage formats, was the same when the\ntables were created:\n\n* mysql56-temporal-format\n\nDifferences Between MariaDB and MySQL\n-------------------------------------\n\nCHECKSUM TABLE may give a different result as MariaDB doesn\'t ignore NULLs in\nthe columns as MySQL 5.1 does (Later MySQL versions should calculate checksums\nthe same way as MariaDB). You can get the \'old style\' checksum in MariaDB by\nstarting mysqld with the --old option. Note however that that the MyISAM and\nAria storage engines in MariaDB are using the new checksum internally, so if\nyou are using --old, the CHECKSUM command will be slower as it needs to\ncalculate the checksum row by row. Starting from MariaDB Server 10.9, --old is\ndeprecated and will be removed in a future release. Set --old-mode or OLD_MODE\nto COMPAT_5_1_CHECKSUM to get \'old style\' checksum.\n\nURL: https://mariadb.com/kb/en/checksum-table/','','https://mariadb.com/kb/en/checksum-table/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (248,21,'OPTIMIZE TABLE','Syntax\n------\n\nOPTIMIZE [NO_WRITE_TO_BINLOG | LOCAL] TABLE\n tbl_name [, tbl_name] ...\n [WAIT n | NOWAIT]\n\nDescription\n-----------\n\nOPTIMIZE TABLE has two main functions. It can either be used to defragment\ntables, or to update the InnoDB fulltext index.\n\nMariaDB starting with 10.3.0\n----------------------------\n\nWAIT/NOWAIT\n-----------\n\nSet the lock wait timeout. See WAIT and NOWAIT.\n\nDefragmenting\n-------------\n\nOPTIMIZE TABLE works for InnoDB (before MariaDB 10.1.1, only if the\ninnodb_file_per_table server system variable is set), Aria, MyISAM and ARCHIVE\ntables, and should be used if you have deleted a large part of a table or if\nyou have made many changes to a table with variable-length rows (tables that\nhave VARCHAR, VARBINARY, BLOB, or TEXT columns). Deleted rows are maintained\nin a linked list and subsequent INSERT operations reuse old row positions.\n\nThis statement requires SELECT and INSERT privileges for the table.\n\nBy default, OPTIMIZE TABLE statements are written to the binary log and will\nbe replicated. The NO_WRITE_TO_BINLOG keyword (LOCAL is an alias) will ensure\nthe statement is not written to the binary log.\n\nFrom MariaDB 10.3.19, OPTIMIZE TABLE statements are not logged to the binary\nlog if read_only is set. See also Read-Only Replicas.\n\nOPTIMIZE TABLE is also supported for partitioned tables. You can use ALTER\nTABLE ... OPTIMIZE PARTITION to optimize one or more partitions.\n\nYou can use OPTIMIZE TABLE to reclaim the unused space and to defragment the\ndata file. With other storage engines, OPTIMIZE TABLE does nothing by default,\nand returns this message: \" The storage engine for the table doesn\'t support\noptimize\". However, if the server has been started with the --skip-new option,\nOPTIMIZE TABLE is linked to ALTER TABLE, and recreates the table. This\noperation frees the unused space and updates index statistics.\n\nThe Aria storage engine supports progress reporting for this statement.\n\nIf a MyISAM table is fragmented, concurrent inserts will not be performed\nuntil an OPTIMIZE TABLE statement is executed on that table, unless the\nconcurrent_insert server system variable is set to ALWAYS.\n\nUpdating an InnoDB fulltext index\n---------------------------------\n\nWhen rows are added or deleted to an InnoDB fulltext index, the index is not\nimmediately re-organized, as this can be an expensive operation. Change\nstatistics are stored in a separate location . The fulltext index is only\nfully re-organized when an OPTIMIZE TABLE statement is run.\n\nBy default, an OPTIMIZE TABLE will defragment a table. In order to use it to\nupdate fulltext index statistics, the innodb_optimize_fulltext_only system\nvariable must be set to 1. This is intended to be a temporary setting, and\nshould be reset to 0 once the fulltext index has been re-organized.\n\nSince fulltext re-organization can take a long time, the\ninnodb_ft_num_word_optimize variable limits the re-organization to a number of\nwords (2000 by default). You can run multiple OPTIMIZE statements to fully\nre-organize the index.\n\nDefragmenting InnoDB tablespaces\n--------------------------------\n\nMariaDB 10.1.1 merged the Facebook/Kakao defragmentation patch, allowing one\nto use OPTIMIZE TABLE to defragment InnoDB tablespaces. For this functionality\nto be enabled, the innodb_defragment system variable must be enabled. No new\ntables are created and there is no need to copy data from old tables to new\ntables. Instead, this feature loads n pages (determined by\ninnodb-defragment-n-pages) and tries to move records so that pages would be\nfull of records and then frees pages that are fully empty after the operation.\nNote that tablespace files (including ibdata1) will not shrink as the result\nof defragmentation, but one will get better memory utilization in the InnoDB\nbuffer pool as there are fewer data pages in use.\n\nSee Defragmenting InnoDB Tablespaces for more details.\n\nURL: https://mariadb.com/kb/en/optimize-table/','','https://mariadb.com/kb/en/optimize-table/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (249,21,'REPAIR TABLE','Syntax\n------\n\nREPAIR [NO_WRITE_TO_BINLOG | LOCAL] TABLE\n tbl_name [, tbl_name] ...\n [QUICK] [EXTENDED] [USE_FRM]\n\nDescription\n-----------\n\nREPAIR TABLE repairs a possibly corrupted table. By default, it has the same\neffect as\n\nmyisamchk --recover tbl_name\n\nor\n\naria_chk --recover tbl_name\n\nSee aria_chk and myisamchk for more.\n\nREPAIR TABLE works for Archive, Aria, CSV and MyISAM tables. For InnoDB, see\nrecovery modes. For CSV, see also Checking and Repairing CSV Tables. For\nArchive, this statement also improves compression. If the storage engine does\nnot support this statement, a warning is issued.\n\nThis statement requires SELECT and INSERT privileges for the table.\n\nBy default, REPAIR TABLE statements are written to the binary log and will be\nreplicated. The NO_WRITE_TO_BINLOG keyword (LOCAL is an alias) will ensure the\nstatement is not written to the binary log.\n\nFrom MariaDB 10.3.19, REPAIR TABLE statements are not logged to the binary log\nif read_only is set. See also Read-Only Replicas.\n\nWhen an index is recreated, the storage engine may use a configurable buffer\nin the process. Incrementing the buffer speeds up the index creation. Aria and\nMyISAM allocate a buffer whose size is defined by aria_sort_buffer_size or\nmyisam_sort_buffer_size, also used for ALTER TABLE.\n\nREPAIR TABLE is also supported for partitioned tables. However, the USE_FRM\noption cannot be used with this statement on a partitioned table.\n\nALTER TABLE ... REPAIR PARTITION can be used to repair one or more partitions.\n\nThe Aria storage engine supports progress reporting for this statement.\n\nURL: https://mariadb.com/kb/en/repair-table/','','https://mariadb.com/kb/en/repair-table/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (250,21,'REPAIR VIEW','Syntax\n------\n\nREPAIR [NO_WRITE_TO_BINLOG | LOCAL] VIEW view_name[, view_name] ... [FROM\nMYSQL]\n\nDescription\n-----------\n\nThe REPAIR VIEW statement was introduced to assist with fixing MDEV-6916, an\nissue introduced in MariaDB 5.2 where the view algorithms were swapped\ncompared to their MySQL on disk representation. It checks whether the view\nalgorithm is correct. It is run as part of mysql_upgrade, and should not\nnormally be required in regular use.\n\nBy default it corrects the checksum and if necessary adds the mariadb-version\nfield. If the optional FROM MYSQL clause is used, and no mariadb-version field\nis present, the MERGE and TEMPTABLE algorithms are toggled.\n\nBy default, REPAIR VIEW statements are written to the binary log and will be\nreplicated. The NO_WRITE_TO_BINLOG keyword (LOCAL is an alias) will ensure the\nstatement is not written to the binary log.\n\nURL: https://mariadb.com/kb/en/repair-view/','','https://mariadb.com/kb/en/repair-view/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (251,22,'mysql.func Table','The mysql.func table stores information about user-defined functions (UDFs)\ncreated with the CREATE FUNCTION UDF statement.\n\nMariaDB starting with 10.4\n--------------------------\nIn MariaDB 10.4 and later, this table uses the Aria storage engine.\n\nMariaDB until 10.3\n------------------\nIn MariaDB 10.3 and before, this table uses the MyISAM storage engine.\n\nThe mysql.func table contains the following fields:\n\n+----------+---------+---------+-------+--------------+---------------------+\n| Field | Type | Null | Key | Default | Description |\n+----------+---------+---------+-------+--------------+---------------------+\n| name | char(64 | NO | PRI | | UDF name |\n| | | | | | |\n+----------+---------+---------+-------+--------------+---------------------+\n| ret | tinyint | NO | | 0 | |\n| | 1) | | | | |\n+----------+---------+---------+-------+--------------+---------------------+\n| dl | char(12 | NO | | | Shared library name |\n| | ) | | | | |\n+----------+---------+---------+-------+--------------+---------------------+\n| type | enum(\'f | NO | | NULL | Type, either |\n| | nction\' | | | | function or |\n| | \'aggreg | | | | aggregate. |\n| | te\') | | | | Aggregate |\n| | | | | | functions are |\n| | | | | | summary functions |\n| | | | | | such as SUM() and |\n| | | | | | AVG(). |\n+----------+---------+---------+-------+--------------+---------------------+\n\nExample\n-------\n\nSELECT * FROM mysql.func;\n+------------------------------+-----+--------------+-----------+\n| name | ret | dl | type |\n+------------------------------+-----+--------------+-----------+\n| spider_direct_sql | 2 | ha_spider.so | function |\n| spider_bg_direct_sql | 2 | ha_spider.so | aggregate |\n| spider_ping_table | 2 | ha_spider.so | function |\n| spider_copy_tables | 2 | ha_spider.so | function |\n| spider_flush_table_mon_cache | 2 | ha_spider.so | function |\n+------------------------------+-----+--------------+-----------+\n\nURL: https://mariadb.com/kb/en/mysqlfunc-table/','','https://mariadb.com/kb/en/mysqlfunc-table/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (252,22,'CREATE FUNCTION UDF','Syntax\n------\n\nCREATE [OR REPLACE] [AGGREGATE] FUNCTION [IF NOT EXISTS] function_name\n RETURNS {STRING|INTEGER|REAL|DECIMAL}\n SONAME shared_library_name\n\nDescription\n-----------\n\nA user-defined function (UDF) is a way to extend MariaDB with a new function\nthat works like a native (built-in) MariaDB function such as ABS() or CONCAT().\n\nfunction_name is the name that should be used in SQL statements to invoke the\nfunction.\n\nTo create a function, you must have the INSERT privilege for the mysql\ndatabase. This is necessary becauseCREATE FUNCTION adds a row to the\nmysql.func system table that records the function\'s name, type, and shared\nlibrary name. If you do not have this table, you should run the mysql_upgrade\ncommand to create it.\n\nUDFs need to be written in C, C++ or another language that uses C calling\nconventions, MariaDB needs to have been dynamically compiled, and your\noperating system must support dynamic loading.\n\nFor an example, see sql/udf_example.cc in the source tree. For a collection of\nexisting UDFs see http://www.mysqludf.org/.\n\nStatements making use of user-defined functions are not safe for replication.\n\nFor creating a stored function as opposed to a user-defined function, see\nCREATE FUNCTION.\n\nFor valid identifiers to use as function names, see Identifier Names.\n\nRETURNS\n-------\n\nThe RETURNS clause indicates the type of the function\'s return value, and can\nbe one of STRING, INTEGER, REAL or DECIMAL. DECIMAL functions currently return\nstring values and should be written like STRING functions.\n\nshared_library_name\n-------------------\n\nshared_library_name is the basename of the shared object file that contains\nthe code that implements the function. The file must be located in the plugin\ndirectory. This directory is given by the value of the plugin_dir system\nvariable. Note that before MariaDB/MySQL 5.1, the shared object could be\nlocated in any directory that was searched by your system\'s dynamic linker.\n\nAGGREGATE\n---------\n\nAggregate functions are summary functions such as SUM() and AVG().\n\nMariaDB starting with 10.4\n--------------------------\nAggregate UDF functions can be used as window functions.\n\nOR REPLACE\n----------\n\nMariaDB starting with 10.1.3\n----------------------------\nThe OR REPLACE clause was added in MariaDB 10.1.3\n\nIf the optional OR REPLACE clause is used, it acts as a shortcut for:\n\nDROP FUNCTION IF EXISTS function_name;\nCREATE FUNCTION name ...;\n\nIF NOT EXISTS\n-------------\n\nMariaDB starting with 10.1.3\n----------------------------\nThe IF NOT EXISTS clause was added in MariaDB 10.1.3\n\nWhen the IF NOT EXISTS clause is used, MariaDB will return a warning instead\nof an error if the specified function already exists. Cannot be used together\nwith OR REPLACE.\n\nUpgrading a UDF\n---------------\n\nTo upgrade the UDF\'s shared library, first run a DROP FUNCTION statement, then\nupgrade the shared library and finally run the CREATE FUNCTION statement. If\nyou upgrade without following this process, you may crash the server.\n\nExamples\n--------\n\nCREATE FUNCTION jsoncontains_path RETURNS integer SONAME \'ha_connect.so\';\nQuery OK, 0 rows affected (0.00 sec)\n\nOR REPLACE and IF NOT EXISTS:\n\nCREATE FUNCTION jsoncontains_path RETURNS integer SONAME \'ha_connect.so\';\nERROR 1125 (HY000): Function \'jsoncontains_path\' already exists\n\nCREATE OR REPLACE FUNCTION jsoncontains_path RETURNS integer SONAME\n\'ha_connect.so\';\nQuery OK, 0 rows affected (0.00 sec)\n\nCREATE FUNCTION IF NOT EXISTS jsoncontains_path RETURNS integer SONAME\n\'ha_connect.so\';\nQuery OK, 0 rows affected, 1 warning (0.00 sec)\n\nSHOW WARNINGS;\n+-------+------+---------------------------------------------+\n| Level | Code | Message |\n+-------+------+---------------------------------------------+\n| Note | 1125 | Function \'jsoncontains_path\' already exists |\n+-------+------+---------------------------------------------+\n\nURL: https://mariadb.com/kb/en/create-function-udf/','','https://mariadb.com/kb/en/create-function-udf/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (253,22,'DROP FUNCTION UDF','Syntax\n------\n\nDROP FUNCTION [IF EXISTS] function_name\n\nDescription\n-----------\n\nThis statement drops the user-defined function (UDF) named function_name.\n\nTo drop a function, you must have the DELETE privilege for the mysql database.\nThis is because DROP FUNCTION removes the row from the mysql.func system table\nthat records the function\'s name, type and shared library name.\n\nFor dropping a stored function, see DROP FUNCTION.\n\nUpgrading a UDF\n---------------\n\nTo upgrade the UDF\'s shared library, first run a DROP FUNCTION statement, then\nupgrade the shared library and finally run the CREATE FUNCTION statement. If\nyou upgrade without following this process, you may crash the server.\n\nExamples\n--------\n\nDROP FUNCTION jsoncontains_path;\n\nIF EXISTS:\n\nDROP FUNCTION jsoncontains_path;\nERROR 1305 (42000): FUNCTION test.jsoncontains_path does not exist\n\nDROP FUNCTION IF EXISTS jsoncontains_path;\nQuery OK, 0 rows affected, 1 warning (0.00 sec)\n\nSHOW WARNINGS;\n+-------+------+------------------------------------------------+\n| Level | Code | Message |\n+-------+------+------------------------------------------------+\n| Note | 1305 | FUNCTION test.jsoncontains_path does not exist |\n+-------+------+------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/drop-function-udf/','','https://mariadb.com/kb/en/drop-function-udf/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (254,22,'Creating User-Defined Functions','User-defined functions allow MariaDB to be extended with a new function that\nworks like a native (built-in) MariaDB function such as ABS() or CONCAT().\nThere are alternative ways to add a new function: writing a native function\n(which requires modifying and compiling the server source code), or writing a\nstored function.\n\nStatements making use of user-defined functions are not safe for replication.\n\nFunctions are written in C or C++, and to make use of them, the operating\nsystem must support dynamic loading.\n\nEach new SQL function requires corresponding functions written in C/C++. In\nthe list below, at least the main function - x() - and one other, are\nrequired. x should be replaced by the name of the function you are creating.\n\nAll functions need to be thread-safe, so not global or static variables that\nchange can be allocated. Memory is allocated in x_init()/ and freed in\nx_deinit().\n\nSimple Functions\n----------------\n\nx()\n---\n\nRequired for all UDFs; this is where the results are calculated.\n\n+------------------------------------------+----------------------------------+\n| C/C++ type | SQL type |\n+------------------------------------------+----------------------------------+\n| char * | STRING |\n+------------------------------------------+----------------------------------+\n| long long | INTEGER |\n+------------------------------------------+----------------------------------+\n| double | REAL |\n+------------------------------------------+----------------------------------+\n\nDECIMAL functions return string values, and so should be written accordingly.\nIt is not possible to create ROW functions.\n\nx_init()\n--------\n\nInitialization function for x(). Can be used for the following:\n\n* Check the number of arguments to X() (the SQL equivalent).\n* Verify the argument types, or to force arguments to be of a particular type\nafter the function is called.\n* Specify whether the result can be NULL.\n* Specify the maximum result length.\n* For REAL functions, specify the maximum number of decimals for the result.\n* Allocate any required memory.\n\nx_deinit()\n----------\n\nDe-initialization function for x(). Used to de-allocate memory that was\nallocated in x_init().\n\nDescription\n-----------\n\nEach time the SQL function X() is called:\n\n* MariaDB will first call the C/C++ initialization function, x_init(),\nassuming it exists. All setup will be performed, and if it returns an error,\nthe SQL statement is aborted and no further functions are called.\n* If there is no x_init() function, or it has been called and did not return\nan error, x() is then called once per row.\n* After all rows have finished processing, x_deinit() is called, if present,\nto clean up by de-allocating any memory that was allocated in x_init().\n* See User-defined Functions Calling Sequences for more details on the\nfunctions.\n\nAggregate Functions\n-------------------\n\nThe following functions are required for aggregate functions, such as AVG()\nand SUM(). When using CREATE FUNCTION, the AGGREGATE keyword is required.\n\nx_clear()\n---------\n\nUsed to reset the current aggregate, but without inserting the argument as the\ninitial aggregate value for the new group.\n\nx_add()\n-------\n\nUsed to add the argument to the current aggregate.\n\nx_remove()\n----------\n\nStarting from MariaDB 10.4, improves the support of window functions (so it is\nnot obligatory to add it) and should remove the argument from the current\naggregate.\n\nDescription\n-----------\n\nEach time the aggregate SQL function X() is called:\n\n* MariaDB will first call the C/C++ initialization function, x_init(),\nassuming it exists. All setup will be performed, and if it returns an error,\nthe SQL statement is aborted and no further functions are called.\n* If there is no x_init() function, or it has been called and did not return\nan error, x() is then called once per row.\n* After all rows have finished processing, x_deinit() is called, if present,\nto clean up by de-allocating any memory that was allocated in x_init().\n\n* MariaDB will first call the C/C++ initialization function, x_init(),\nassuming it exists. All setup will be performed, and if it returns an error,\nthe SQL statement is aborted and no further functions are called.\n* The table is sorted according to the GROUP BY expression.\n* x_clear() is called for the first row of each new group.\n* x_add() is called once per row for each row in the same group.\n* x() is called when the group changes, or after the last row, to get the\naggregate result. \n* The latter three steps are repeated until all rows have been processed.\n* After all rows have finished processing, x_deinit() is called, if present,\nto clean up by de-allocating any memory that was allocated in x_init().\n\nExamples\n--------\n\nFor an example, see sql/udf_example.cc in the source tree. For a collection of\nexisting UDFs see https://github.com/mysqludf.\n\nURL: https://mariadb.com/kb/en/creating-user-defined-functions/','','https://mariadb.com/kb/en/creating-user-defined-functions/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (255,22,'User-Defined Functions Calling Sequences','The functions described in Creating User-defined Functions are expanded on\nthis page. They are declared as follows:\n\nSimple Functions\n----------------\n\nx()\n---\n\nIf x() returns an integer, it is declared as follows:\n\nlong long x(UDF_INIT *initid, UDF_ARGS *args,\n char *is_null, char *error);\n\nIf x() returns a string (DECIMAL functions also return string values), it is\ndeclared as follows:\n\nchar *x(UDF_INIT *initid, UDF_ARGS *args,\n char *result, unsigned long *length,\n char *is_null, char *error);\n\nIf x() returns a real, it is declared as follows:\n\ndouble x(UDF_INIT *initid, UDF_ARGS *args,\n char *is_null, char *error);\n\nx_init()\n--------\n\nmy_bool x_init(UDF_INIT *initid, UDF_ARGS *args, char *message);\n\nx_deinit()\n----------\n\nvoid x_deinit(UDF_INIT *initid);\n\nDescription\n-----------\n\ninitid is a parameter passed to all three functions that points to a UDF_INIT\nstructure, used for communicating information between the functions. Its\nstructure members are:\n\n* my_bool maybe_null\nmaybe_null should be set to 1 if x_init can return a NULL value, Defaults to 1\nif any arguments are declared maybe_null.\n\n* unsigned int decimals\nNumber of decimals after the decimal point. The default, if an explicit number\nof decimals is passed in the arguments to the main function, is the maximum\nnumber of decimals, so if 9.5, 9.55 and 9.555 are passed to the function, the\ndefault would be three (based on 9.555, the maximum). If there are no\nexplicit number of decimals, the default is set to 31, or one more than the\nmaximum for the DOUBLE, FLOAT and DECIMAL types. This default can be changed\nin the function to suit the actual calculation.\n\n* unsigned int max_length\nMaximum length of the result. For integers, the default is 21. For strings,\nthe length of the longest argument. For reals, the default is 13 plus the\nnumber of decimals indicated by initid->decimals. The length includes any\nsigns or decimal points. Can also be set to 65KB or 16MB in order to return a\nBLOB. The memory remains unallocated, but this is used to decide on the data\ntype to use if the data needs to be temporarily stored.\n\n* char *ptr\nA pointer for use as required by the function. Commonly, initid->ptr is used\nto communicate allocated memory, with x_init() allocating the memory and\nassigning it to this pointer, x() using it, and x_deinit() de-allocating it.\n\n* my_bool const_item\nShould be set to 1 in x_init() if x() always returns the same value, otherwise\n0.\n\nAggregate Functions\n-------------------\n\nx_clear()\n---------\n\nx_clear() is a required function for aggregate functions, and is declared as\nfollows:\n\nvoid x_clear(UDF_INIT *initid, char *is_null, char *error);\n\nIt is called when the summary results need to be reset, that is at the\nbeginning of each new group. but also to reset the values when there were no\nmatching rows.\n\nis_null is set to point to CHAR(0) before calling x_clear().\n\nIn the case of an error, you can store the value to which the error argument\npoints (a single-byte variable, not a string string buffer) in the variable.\n\nx_reset()\n---------\n\nx_reset() is declared as follows:\n\nvoid x_reset(UDF_INIT *initid, UDF_ARGS *args,\n char *is_null, char *error);\n\nIt is called on finding the first row in a new group. Should reset the summary\nvariables, and then use UDF_ARGS as the first value in the group\'s internal\nsummary value. The function is not required if the UDF interface uses\nx_clear().\n\nx_add()\n-------\n\nx_add() is declared as follows:\n\nvoid x_add(UDF_INIT *initid, UDF_ARGS *args,\n char *is_null, char *error);\n\nIt is called for all rows belonging to the same group, and should be used to\nadd the value in UDF_ARGS to the internal summary variable.\n\nx_remove()\n----------\n\nx_remove() was added in MariaDB 10.4 and is declared as follows (same as\nx_add()):\n\nvoid x_remove(UDF_INIT* initid, UDF_ARGS* args,\n char* is_null, char *error );\n\nIt adds more efficient support of aggregate UDFs as window functions.\nx_remove() should \"subtract\" the row (reverse x_add()). In MariaDB 10.4\naggregate UDFs will work as WINDOW functions without x_remove() but it will\nnot be so efficient.\n\nIf x_remove() supported (defined) detected automatically.\n\nURL: https://mariadb.com/kb/en/user-defined-functions-calling-sequences/','','https://mariadb.com/kb/en/user-defined-functions-calling-sequences/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (256,22,'User-Defined Functions Security','The MariaDB server imposes a number of limitations on user-defined functions\nfor security purposes.\n\n* The INSERT privilege for the mysql database is required to run CREATE\nFUNCTION, as a record will be added to the mysql.func-table.\n* The DELETE privilege for the mysql database is required to run DROP FUNCTION\nas the corresponding record will be removed from the mysql.func-table.\n* UDF object files can only be placed in the plugin directory, as specified by\nthe value of the plugin_dir system variable.\n* At least one symbol, beyond the required x() - corresponding to an SQL\nfunction X()) - is required. These can be x_init(), x_deinit(), xxx_reset(),\nx_clear() and x_add() functions (see Creating User-defined Functions). The\nallow-suspicious-udfs mysqld option (by default unset) provides a workaround,\npermitting only one symbol to be used. This is not recommended, as it opens\nthe possibility of loading shared objects that are not legitimate user-defined\nfunctions.\n\nURL: https://mariadb.com/kb/en/user-defined-functions-security/','','https://mariadb.com/kb/en/user-defined-functions-security/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (257,23,'Numeric Data Type Overview','There are a number of numeric data types:\n\n* TINYINT\n* BOOLEAN - Synonym for TINYINT(1)\n* INT1 - Synonym for TINYINT\n* SMALLINT\n* INT2 - Synonym for SMALLINT\n* MEDIUMINT\n* INT3 - Synonym for MEDIUMINT\n* INT, INTEGER\n* INT4 - Synonym for INT\n* BIGINT\n* INT8 - Synonym for BIGINT\n* DECIMAL, DEC, NUMERIC, FIXED\n* FLOAT\n* DOUBLE, DOUBLE PRECISION, REAL\n* BIT\n\nSee the specific articles for detailed information on each.\n\nSIGNED, UNSIGNED and ZEROFILL\n-----------------------------\n\nMost numeric types can be defined as SIGNED, UNSIGNED or ZEROFILL, for example:\n\nTINYINT[(M)] [SIGNED | UNSIGNED | ZEROFILL]\n\nIf SIGNED, or no attribute, is specified, a portion of the numeric type will\nbe reserved for the sign (plus or minus). For example, a TINYINT SIGNED can\nrange from -128 to 127.\n\nIf UNSIGNED is specified, no portion of the numeric type is reserved for the\nsign, so for integer types range can be larger. For example, a TINYINT\nUNSIGNED can range from 0 to 255. Floating point and fixed-point types also\ncan be UNSIGNED, but this only prevents negative values from being stored and\ndoesn\'t alter the range.\n\nIf ZEROFILL is specified, the column will be set to UNSIGNED and the spaces\nused by default to pad the field are replaced with zeros. ZEROFILL is ignored\nin expressions or as part of a UNION. ZEROFILL is a non-standard MySQL and\nMariaDB enhancement.\n\nNote that although the preferred syntax indicates that the attributes are\nexclusive, more than one attribute can be specified.\n\nUntil MariaDB 10.2.7 (MDEV-8659), any combination of the attributes could be\nused in any order, with duplicates. In this case:\n\n* the presence of ZEROFILL makes the column UNSIGNED ZEROFILL.\n* the presence of UNSIGNED makes the column UNSIGNED.\n\nFrom MariaDB 10.2.8, only the following combinations are supported:\n\n* SIGNED\n* UNSIGNED\n* ZEROFILL\n* UNSIGNED ZEROFILL\n* ZEROFILL UNSIGNED\n\nThe latter two should be replaced with simply ZEROFILL, but are still accepted\nby the parser.\n\nExamples\n--------\n\nCREATE TABLE zf (\n i1 TINYINT SIGNED,\n i2 TINYINT UNSIGNED,\n i3 TINYINT ZEROFILL\n);\n\nINSERT INTO zf VALUES (2,2,2);\n\nSELECT * FROM zf;\n+------+------+------+\n| i1 | i2 | i3 |\n+------+------+------+\n| 2 | 2 | 002 |\n+------+------+------+\n\nRange\n-----\n\nWhen attempting to add a value that is out of the valid range for the numeric\ntype, MariaDB will react depending on the strict SQL_MODE setting.\n\nIf strict_mode has been set (the default from MariaDB 10.2.4), MariaDB will\nreturn an error.\n\nIf strict_mode has not been set (the default until MariaDB 10.2.3), MariaDB\nwill adjust the number to fit in the field, returning a warning.\n\nExamples\n--------\n\nWith strict_mode set:\n\nSHOW VARIABLES LIKE \'sql_mode\';\n+---------------+--------------------------------------------------------------\n----------------------------+\n| Variable_name | Value \n |\n+---------------+--------------------------------------------------------------\n----------------------------+\n| sql_mode |\nSTRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SU\nSTITUTION |\n+---------------+--------------------------------------------------------------\n----------------------------+\n\nCREATE TABLE ranges (i1 TINYINT, i2 SMALLINT, i3 TINYINT UNSIGNED);\n\nINSERT INTO ranges VALUES (257,257,257);\nERROR 1264 (22003): Out of range value for column \'i1\' at row 1\n\nSELECT * FROM ranges;\nEmpty set (0.10 sec)\n\nWith strict_mode unset:\n\nSHOW VARIABLES LIKE \'sql_mode%\';\n+---------------+-------+\n| Variable_name | Value |\n+---------------+-------+\n| sql_mode | |\n+---------------+-------+\n\nCREATE TABLE ranges (i1 TINYINT, i2 SMALLINT, i3 TINYINT UNSIGNED);\n\nINSERT INTO ranges VALUES (257,257,257);\nQuery OK, 1 row affected, 2 warnings (0.00 sec)\n\nSHOW WARNINGS;\n+---------+------+---------------------------------------------+\n| Level | Code | Message |\n+---------+------+---------------------------------------------+\n| Warning | 1264 | Out of range value for column \'i1\' at row 1 |\n| Warning | 1264 | Out of range value for column \'i3\' at row 1 |\n+---------+------+---------------------------------------------+\n2 rows in set (0.00 sec)\n\nSELECT * FROM ranges;\n+------+------+------+\n| i1 | i2 | i3 |\n+------+------+------+\n| 127 | 257 | 255 |\n+------+------+------+\n\nAuto_increment\n--------------\n\nThe AUTO_INCREMENT attribute can be used to generate a unique identity for new\nrows. For more details, see auto_increment.\n\nURL: https://mariadb.com/kb/en/numeric-data-type-overview/','','https://mariadb.com/kb/en/numeric-data-type-overview/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (258,23,'TINYINT','Syntax\n------\n\nTINYINT[(M)] [SIGNED | UNSIGNED | ZEROFILL]\n\nDescription\n-----------\n\nA very small integer. The signed range is -128 to 127. The unsigned range is 0\nto 255. For details on the attributes, see Numeric Data Type Overview.\n\nINT1 is a synonym for TINYINT. BOOL and BOOLEAN are synonyms for TINYINT(1).\n\nExamples\n--------\n\nCREATE TABLE tinyints (a TINYINT,b TINYINT UNSIGNED,c TINYINT ZEROFILL);\n\nWith strict_mode set, the default from MariaDB 10.2.4:\n\nINSERT INTO tinyints VALUES (-10,-10,-10);\nERROR 1264 (22003): Out of range value for column \'b\' at row 1\n\nINSERT INTO tinyints VALUES (-10,10,-10);\nERROR 1264 (22003): Out of range value for column \'c\' at row 1\n\nINSERT INTO tinyints VALUES (-10,10,10);\n\nSELECT * FROM tinyints;\n+------+------+------+\n| a | b | c |\n+------+------+------+\n| -10 | 10 | 010 |\n+------+------+------+\n\nINSERT INTO tinyints VALUES (128,128,128);\nERROR 1264 (22003): Out of range value for column \'a\' at row 1\n\nINSERT INTO tinyints VALUES (127,128,128);\n\nSELECT * FROM tinyints;\n+------+------+------+\n| a | b | c |\n+------+------+------+\n| -10 | 10 | 010 |\n| 127 | 128 | 128 |\n+------+------+------+\n\nWith strict_mode unset, the default until MariaDB 10.2.3:\n\nINSERT INTO tinyints VALUES (-10,-10,-10);\nQuery OK, 1 row affected, 2 warnings (0.08 sec)\nWarning (Code 1264): Out of range value for column \'b\' at row 1\nWarning (Code 1264): Out of range value for column \'c\' at row 1\n\nINSERT INTO tinyints VALUES (-10,10,-10);\nQuery OK, 1 row affected, 1 warning (0.11 sec)\nWarning (Code 1264): Out of range value for column \'c\' at row 1\n\nINSERT INTO tinyints VALUES (-10,10,10);\n\nSELECT * FROM tinyints;\n+------+------+------+\n| a | b | c |\n+------+------+------+\n| -10 | 0 | 000 |\n| -10 | 10 | 000 |\n| -10 | 10 | 010 |\n+------+------+------+\n\nINSERT INTO tinyints VALUES (128,128,128);\nQuery OK, 1 row affected, 1 warning (0.19 sec)\nWarning (Code 1264): Out of range value for column \'a\' at row 1\n\nINSERT INTO tinyints VALUES (127,128,128);\n\nSELECT * FROM tinyints;\n+------+------+------+\n| a | b | c |\n+------+------+------+\n| -10 | 0 | 000 |\n| -10 | 10 | 000 |\n| -10 | 10 | 010 |\n| 127 | 128 | 128 |\n| 127 | 128 | 128 |\n+------+------+------+\n\nURL: https://mariadb.com/kb/en/tinyint/','','https://mariadb.com/kb/en/tinyint/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (259,23,'BOOLEAN','Syntax\n------\n\nBOOL, BOOLEAN\n\nDescription\n-----------\n\nThese types are synonyms for TINYINT(1). A value of zero is considered false.\nNon-zero values are considered true.\n\nHowever, the values TRUE and FALSE are merely aliases for 1 and 0. See Boolean\nLiterals, as well as the IS operator for testing values against a boolean.\n\nExamples\n--------\n\nCREATE TABLE boo (i BOOLEAN);\n\nDESC boo;\n+-------+------------+------+-----+---------+-------+\n| Field | Type | Null | Key | Default | Extra |\n+-------+------------+------+-----+---------+-------+\n| i | tinyint(1) | YES | | NULL | |\n+-------+------------+------+-----+---------+-------+\n\nSELECT IF(0, \'true\', \'false\');\n+------------------------+\n| IF(0, \'true\', \'false\') |\n+------------------------+\n| false |\n+------------------------+\n\nSELECT IF(1, \'true\', \'false\');\n+------------------------+\n| IF(1, \'true\', \'false\') |\n+------------------------+\n| true |\n+------------------------+\n\nSELECT IF(2, \'true\', \'false\');\n+------------------------+\n| IF(2, \'true\', \'false\') |\n+------------------------+\n| true |\n+------------------------+\n\nTRUE and FALSE as aliases for 1 and 0:\n\nSELECT IF(0 = FALSE, \'true\', \'false\');\n\n+--------------------------------+\n| IF(0 = FALSE, \'true\', \'false\') |\n+--------------------------------+\n| true |\n+--------------------------------+\n\nSELECT IF(1 = TRUE, \'true\', \'false\');\n+-------------------------------+\n| IF(1 = TRUE, \'true\', \'false\') |\n+-------------------------------+\n| true |\n+-------------------------------+\n\nSELECT IF(2 = TRUE, \'true\', \'false\');\n+-------------------------------+\n| IF(2 = TRUE, \'true\', \'false\') |\n+-------------------------------+\n| false |\n+-------------------------------+\n\nSELECT IF(2 = FALSE, \'true\', \'false\');\n+--------------------------------+\n| IF(2 = FALSE, \'true\', \'false\') |\n+--------------------------------+\n| false |\n+--------------------------------+\n\nThe last two statements display the results shown because 2 is equal to\nneither 1 nor 0.\n\nURL: https://mariadb.com/kb/en/boolean/','','https://mariadb.com/kb/en/boolean/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (260,23,'SMALLINT','Syntax\n------\n\nSMALLINT[(M)] [SIGNED | UNSIGNED | ZEROFILL]\n\nDescription\n-----------\n\nA small integer. The signed range is -32768 to 32767. The unsigned range is 0\nto 65535.\n\nIf a column has been set to ZEROFILL, all values will be prepended by zeros so\nthat the SMALLINT value contains a number of M digits.\n\nNote: If the ZEROFILL attribute has been specified, the column will\nautomatically become UNSIGNED.\n\nINT2 is a synonym for SMALLINT.\n\nFor more details on the attributes, see Numeric Data Type Overview.\n\nExamples\n--------\n\nCREATE TABLE smallints (a SMALLINT,b SMALLINT UNSIGNED,c SMALLINT ZEROFILL);\n\nWith strict_mode set, the default from MariaDB 10.2.4:\n\nINSERT INTO smallints VALUES (-10,-10,-10);\nERROR 1264 (22003): Out of range value for column \'b\' at row 1\n\nINSERT INTO smallints VALUES (-10,10,-10);\nERROR 1264 (22003): Out of range value for column \'c\' at row 1\n\nINSERT INTO smallints VALUES (-10,10,10);\n\nINSERT INTO smallints VALUES (32768,32768,32768);\nERROR 1264 (22003): Out of range value for column \'a\' at row 1\n\nINSERT INTO smallints VALUES (32767,32768,32768);\n\nSELECT * FROM smallints;\n+-------+-------+-------+\n| a | b | c |\n+-------+-------+-------+\n| -10 | 10 | 00010 |\n| 32767 | 32768 | 32768 |\n+-------+-------+-------+\n\nWith strict_mode unset, the default until MariaDB 10.2.3:\n\nINSERT INTO smallints VALUES (-10,-10,-10);\nQuery OK, 1 row affected, 2 warnings (0.09 sec)\nWarning (Code 1264): Out of range value for column \'b\' at row 1\nWarning (Code 1264): Out of range value for column \'c\' at row 1\n\nINSERT INTO smallints VALUES (-10,10,-10);\nQuery OK, 1 row affected, 1 warning (0.08 sec)\nWarning (Code 1264): Out of range value for column \'c\' at row 1\n\nINSERT INTO smallints VALUES (-10,10,10);\n\nINSERT INTO smallints VALUES (32768,32768,32768);\nQuery OK, 1 row affected, 1 warning (0.04 sec)\nWarning (Code 1264): Out of range value for column \'a\' at row 1\n\nINSERT INTO smallints VALUES (32767,32768,32768);\n\nSELECT * FROM smallints;\n+-------+-------+-------+\n| a | b | c |\n+-------+-------+-------+\n| -10 | 0 | 00000 |\n| -10 | 10 | 00000 |\n| -10 | 10 | 00010 |\n| 32767 | 32768 | 32768 |\n| 32767 | 32768 | 32768 |\n+-------+-------+-------+\n\nURL: https://mariadb.com/kb/en/smallint/','','https://mariadb.com/kb/en/smallint/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (261,23,'MEDIUMINT','Syntax\n------\n\nMEDIUMINT[(M)] [SIGNED | UNSIGNED | ZEROFILL]\n\nDescription\n-----------\n\nA medium-sized integer. The signed range is -8388608 to 8388607. The unsigned\nrange is 0 to 16777215.\n\nZEROFILL pads the integer with zeroes and assumes UNSIGNED (even if UNSIGNED\nis not specified).\n\nINT3 is a synonym for MEDIUMINT.\n\nFor details on the attributes, see Numeric Data Type Overview.\n\nExamples\n--------\n\nCREATE TABLE mediumints (a MEDIUMINT,b MEDIUMINT UNSIGNED,c MEDIUMINT\nZEROFILL);\n\nDESCRIBE mediumints;\n+-------+--------------------------------+------+-----+---------+-------+\n| Field | Type | Null | Key | Default | Extra |\n+-------+--------------------------------+------+-----+---------+-------+\n| a | mediumint(9) | YES | | NULL | |\n| b | mediumint(8) unsigned | YES | | NULL | |\n| c | mediumint(8) unsigned zerofill | YES | | NULL | |\n+-------+--------------------------------+------+-----+---------+-------+\n\nWith strict_mode set, the default from MariaDB 10.2.4:\n\nINSERT INTO mediumints VALUES (-10,-10,-10);\nERROR 1264 (22003): Out of range value for column \'b\' at row 1\n\nINSERT INTO mediumints VALUES (-10,10,-10);\nERROR 1264 (22003): Out of range value for column \'c\' at row 1\n\nINSERT INTO mediumints VALUES (-10,10,10);\n\nINSERT INTO mediumints VALUES (8388608,8388608,8388608);\nERROR 1264 (22003): Out of range value for column \'a\' at row 1\n\nINSERT INTO mediumints VALUES (8388607,8388608,8388608);\n\nSELECT * FROM mediumints;\n+---------+---------+----------+\n| a | b | c |\n+---------+---------+----------+\n| -10 | 10 | 00000010 |\n| 8388607 | 8388608 | 08388608 |\n+---------+---------+----------+\n\nWith strict_mode unset, the default until MariaDB 10.2.3:\n\nINSERT INTO mediumints VALUES (-10,-10,-10);\nQuery OK, 1 row affected, 2 warnings (0.05 sec)\nWarning (Code 1264): Out of range value for column \'b\' at row 1\nWarning (Code 1264): Out of range value for column \'c\' at row 1\n\nINSERT INTO mediumints VALUES (-10,10,-10);\nQuery OK, 1 row affected, 1 warning (0.08 sec)\nWarning (Code 1264): Out of range value for column \'c\' at row 1\n\nINSERT INTO mediumints VALUES (-10,10,10);\n\nINSERT INTO mediumints VALUES (8388608,8388608,8388608);\nQuery OK, 1 row affected, 1 warning (0.05 sec)\nWarning (Code 1264): Out of range value for column \'a\' at row 1\n\nINSERT INTO mediumints VALUES (8388607,8388608,8388608);\n\nSELECT * FROM mediumints;\n+---------+---------+----------+\n| a | b | c |\n+---------+---------+----------+\n| -10 | 0 | 00000000 |\n| -10 | 0 | 00000000 |\n| -10 | 10 | 00000000 |\n| -10 | 10 | 00000010 |\n| 8388607 | 8388608 | 08388608 |\n| 8388607 | 8388608 | 08388608 |\n+---------+---------+----------+\n\nURL: https://mariadb.com/kb/en/mediumint/','','https://mariadb.com/kb/en/mediumint/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (262,23,'INT','Syntax\n------\n\nINT[(M)] [SIGNED | UNSIGNED | ZEROFILL]\nINTEGER[(M)] [SIGNED | UNSIGNED | ZEROFILL]\n\nDescription\n-----------\n\nA normal-size integer. When marked UNSIGNED, it ranges from 0 to 4294967295,\notherwise its range is -2147483648 to 2147483647 (SIGNED is the default). If a\ncolumn has been set to ZEROFILL, all values will be prepended by zeros so that\nthe INT value contains a number of M digits. INTEGER is a synonym for INT.\n\nNote: If the ZEROFILL attribute has been specified, the column will\nautomatically become UNSIGNED.\n\nINT4 is a synonym for INT.\n\nFor details on the attributes, see Numeric Data Type Overview.\n\nExamples\n--------\n\nCREATE TABLE ints (a INT,b INT UNSIGNED,c INT ZEROFILL);\n\nWith strict_mode set, the default from MariaDB 10.2.4:\n\nINSERT INTO ints VALUES (-10,-10,-10);\nERROR 1264 (22003): Out of range value for column \'b\' at row 1\n\nINSERT INTO ints VALUES (-10,10,-10);\nERROR 1264 (22003): Out of range value for column \'c\' at row 1\n\nINSERT INTO ints VALUES (-10,10,10);\n\nINSERT INTO ints VALUES (2147483648,2147483648,2147483648);\nERROR 1264 (22003): Out of range value for column \'a\' at row 1\n\nINSERT INTO ints VALUES (2147483647,2147483648,2147483648);\n\nSELECT * FROM ints;\n+------------+------------+------------+\n| a | b | c |\n+------------+------------+------------+\n| -10 | 10 | 0000000010 |\n| 2147483647 | 2147483648 | 2147483648 |\n+------------+------------+------------+\n\nWith strict_mode unset, the default until MariaDB 10.2.3:\n\nINSERT INTO ints VALUES (-10,-10,-10);\nQuery OK, 1 row affected, 2 warnings (0.10 sec)\nWarning (Code 1264): Out of range value for column \'b\' at row 1\nWarning (Code 1264): Out of range value for column \'c\' at row 1\n\nINSERT INTO ints VALUES (-10,10,-10);\nQuery OK, 1 row affected, 1 warning (0.08 sec)\nWarning (Code 1264): Out of range value for column \'c\' at row 1\n\nINSERT INTO ints VALUES (-10,10,10);\n\nINSERT INTO ints VALUES (2147483648,2147483648,2147483648);\nQuery OK, 1 row affected, 1 warning (0.07 sec)\nWarning (Code 1264): Out of range value for column \'a\' at row 1\n\nINSERT INTO ints VALUES (2147483647,2147483648,2147483648);\n\nSELECT * FROM ints;\n+------------+------------+------------+\n| a | b | c |\n+------------+------------+------------+\n| -10 | 0 | 0000000000 |\n| -10 | 10 | 0000000000 |\n| -10 | 10 | 0000000010 |\n| 2147483647 | 2147483648 | 2147483648 |\n| 2147483647 | 2147483648 | 2147483648 |\n+------------+------------+------------+\n\nURL: https://mariadb.com/kb/en/int/','','https://mariadb.com/kb/en/int/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (263,23,'BIGINT','Syntax\n------\n\nBIGINT[(M)] [SIGNED | UNSIGNED | ZEROFILL]\n\nDescription\n-----------\n\nA large integer. The signed range is -9223372036854775808 to\n9223372036854775807. The unsigned range is 0 to 18446744073709551615.\n\nIf a column has been set to ZEROFILL, all values will be prepended by zeros so\nthat the BIGINT value contains a number of M digits.\n\nNote: If the ZEROFILL attribute has been specified, the column will\nautomatically become UNSIGNED.\n\nFor more details on the attributes, see Numeric Data Type Overview.\n\nSERIAL is an alias for:\n\nBIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE\n\nINT8 is a synonym for BIGINT.\n\nExamples\n--------\n\nCREATE TABLE bigints (a BIGINT,b BIGINT UNSIGNED,c BIGINT ZEROFILL);\n\nWith strict_mode set, the default from MariaDB 10.2.4:\n\nINSERT INTO bigints VALUES (-10,-10,-10);\nERROR 1264 (22003): Out of range value for column \'b\' at row 1\n\nINSERT INTO bigints VALUES (-10,10,-10);\nERROR 1264 (22003): Out of range value for column \'c\' at row 1\n\nINSERT INTO bigints VALUES (-10,10,10);\n\nINSERT INTO bigints VALUES\n(9223372036854775808,9223372036854775808,9223372036854775808);\nERROR 1264 (22003): Out of range value for column \'a\' at row 1\n\nINSERT INTO bigints VALUES\n(9223372036854775807,9223372036854775808,9223372036854775808);\n\nSELECT * FROM bigints;\n+---------------------+---------------------+----------------------+\n| a | b | c |\n+---------------------+---------------------+----------------------+\n| -10 | 10 | 00000000000000000010 |\n| 9223372036854775807 | 9223372036854775808 | 09223372036854775808 |\n+---------------------+---------------------+----------------------+\n\nWith strict_mode unset, the default until MariaDB 10.2.3:\n\nINSERT INTO bigints VALUES (-10,-10,-10);\nQuery OK, 1 row affected, 2 warnings (0.08 sec)\nWarning (Code 1264): Out of range value for column \'b\' at row 1\nWarning (Code 1264): Out of range value for column \'c\' at row 1\n\nINSERT INTO bigints VALUES (-10,10,-10);\nQuery OK, 1 row affected, 1 warning (0.08 sec)\nWarning (Code 1264): Out of range value for column \'c\' at row 1\n\nINSERT INTO bigints VALUES (-10,10,10);\n\nINSERT INTO bigints VALUES\n(9223372036854775808,9223372036854775808,9223372036854775808);\nQuery OK, 1 row affected, 1 warning (0.07 sec)\nWarning (Code 1264): Out of range value for column \'a\' at row 1\n\nINSERT INTO bigints VALUES\n(9223372036854775807,9223372036854775808,9223372036854775808);\n\nSELECT * FROM bigints;\n+---------------------+---------------------+----------------------+\n| a | b | c |\n+---------------------+---------------------+----------------------+\n| -10 | 0 | 00000000000000000000 |\n| -10 | 10 | 00000000000000000000 |\n| -10 | 10 | 00000000000000000010 |\n| 9223372036854775807 | 9223372036854775808 | 09223372036854775808 |\n| 9223372036854775807 | 9223372036854775808 | 09223372036854775808 |\n+---------------------+---------------------+----------------------+\n\nURL: https://mariadb.com/kb/en/bigint/','','https://mariadb.com/kb/en/bigint/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (264,23,'DECIMAL','Syntax\n------\n\nDECIMAL[(M[,D])] [SIGNED | UNSIGNED | ZEROFILL]\n\nDescription\n-----------\n\nA packed \"exact\" fixed-point number. M is the total number of digits (the\nprecision) and D is the number of digits after the decimal point (the scale).\n\n* The decimal point and (for negative numbers) the \"-\" sign are not\ncounted in M. \n* If D is 0, values have no decimal point or fractional\npart and on INSERT the value will be rounded to the nearest DECIMAL. \n* The maximum number of digits (M) for DECIMAL is 65. \n* The maximum number of supported decimals (D) is 30 before MariadB 10.2.1 and\n38 afterwards. \n* If D is omitted, the default is 0. If M is omitted, the default is 10.\n\nUNSIGNED, if specified, disallows negative values.\n\nZEROFILL, if specified, pads the number with zeros, up to the total number of\ndigits specified by M.\n\nAll basic calculations (+, -, *, /) with DECIMAL columns are done with a\nprecision of 65 digits.\n\nFor more details on the attributes, see Numeric Data Type Overview.\n\nDEC, NUMERIC and FIXED are synonyms, as well as NUMBER in Oracle mode from\nMariaDB 10.3.\n\nExamples\n--------\n\nCREATE TABLE t1 (d DECIMAL UNSIGNED ZEROFILL);\n\nINSERT INTO t1 VALUES (1),(2),(3),(4.0),(5.2),(5.7);\nQuery OK, 6 rows affected, 2 warnings (0.16 sec)\nRecords: 6 Duplicates: 0 Warnings: 2\n\nNote (Code 1265): Data truncated for column \'d\' at row 5\nNote (Code 1265): Data truncated for column \'d\' at row 6\n\nSELECT * FROM t1;\n+------------+\n| d |\n+------------+\n| 0000000001 |\n| 0000000002 |\n| 0000000003 |\n| 0000000004 |\n| 0000000005 |\n| 0000000006 |\n+------------+\n\nWith strict_mode set, the default from MariaDB 10.2.4:\n\nINSERT INTO t1 VALUES (-7);\nERROR 1264 (22003): Out of range value for column \'d\' at row 1\n\nWith strict_mode unset, the default until MariaDB 10.2.3:\n\nINSERT INTO t1 VALUES (-7);\nQuery OK, 1 row affected, 1 warning (0.02 sec)\nWarning (Code 1264): Out of range value for column \'d\' at row 1\n\nSELECT * FROM t1;\n+------------+\n| d |\n+------------+\n| 0000000001 |\n| 0000000002 |\n| 0000000003 |\n| 0000000004 |\n| 0000000005 |\n| 0000000006 |\n| 0000000000 |\n+------------+\n\nURL: https://mariadb.com/kb/en/decimal/','','https://mariadb.com/kb/en/decimal/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (265,23,'FLOAT','Syntax\n------\n\nFLOAT[(M,D)] [SIGNED | UNSIGNED | ZEROFILL]\n\nDescription\n-----------\n\nA small (single-precision) floating-point number (see DOUBLE for a\nregular-size floating point number). Allowable values are:\n\n* -3.402823466E+38 to -1.175494351E-38\n* 0\n* 1.175494351E-38 to 3.402823466E+38.\n\nThese are the theoretical limits, based on the IEEE standard. The actual range\nmight be slightly smaller depending on your hardware or operating system.\n\nM is the total number of digits and D is the number of digits following the\ndecimal point. If M and D are omitted, values are stored to the limits allowed\nby the hardware. A single-precision floating-point number is accurate to\napproximately 7 decimal places.\n\nUNSIGNED, if specified, disallows negative values.\n\nUsing FLOAT might give you some unexpected problems because all calculations\nin MariaDB are done with double precision. See Floating Point Accuracy.\n\nFor more details on the attributes, see Numeric Data Type Overview.\n\nURL: https://mariadb.com/kb/en/float/','','https://mariadb.com/kb/en/float/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (266,23,'DOUBLE','Syntax\n------\n\nDOUBLE[(M,D)] [SIGNED | UNSIGNED | ZEROFILL]\nDOUBLE PRECISION[(M,D)] [SIGNED | UNSIGNED | ZEROFILL]\nREAL[(M,D)] [SIGNED | UNSIGNED | ZEROFILL]\n\nDescription\n-----------\n\nA normal-size (double-precision) floating-point number (see FLOAT for a\nsingle-precision floating-point number).\n\nAllowable values are:\n\n* -1.7976931348623157E+308 to -2.2250738585072014E-308\n* 0\n* 2.2250738585072014E-308 to 1.7976931348623157E+308\n\nThese are the theoretical limits, based on the IEEE standard. The actual range\nmight be slightly smaller depending on your hardware or operating system.\n\nM is the total number of digits and D is the number of digits following the\ndecimal point. If M and D are omitted, values are stored to the limits allowed\nby the hardware. A double-precision floating-point number is accurate to\napproximately 15 decimal places.\n\nUNSIGNED, if specified, disallows negative values.\n\nZEROFILL, if specified, pads the number with zeros, up to the total number of\ndigits specified by M.\n\nREAL and DOUBLE PRECISION are synonyms, unless the REAL_AS_FLOAT SQL mode is\nenabled, in which case REAL is a synonym for FLOAT rather than DOUBLE.\n\nSee Floating Point Accuracy for issues when using floating-point numbers.\n\nFor more details on the attributes, see Numeric Data Type Overview.\n\nExamples\n--------\n\nCREATE TABLE t1 (d DOUBLE(5,0) zerofill);\n\nINSERT INTO t1 VALUES (1),(2),(3),(4);\n\nSELECT * FROM t1;\n+-------+\n| d |\n+-------+\n| 00001 |\n| 00002 |\n| 00003 |\n| 00004 |\n+-------+\n\nURL: https://mariadb.com/kb/en/double/','','https://mariadb.com/kb/en/double/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (267,23,'BIT','Syntax\n------\n\nBIT[(M)]\n\nDescription\n-----------\n\nA bit-field type. M indicates the number of bits per value, from 1 to 64. The\ndefault is 1 if M is omitted.\n\nBit values can be inserted with b\'value\' notation, where value is the bit\nvalue in 0\'s and 1\'s.\n\nBit fields are automatically zero-padded from the left to the full length of\nthe bit, so for example in a BIT(4) field, \'10\' is equivalent to \'0010\'.\n\nBits are returned as binary, so to display them, either add 0, or use a\nfunction such as HEX, OCT or BIN to convert them.\n\nExamples\n--------\n\nCREATE TABLE b ( b1 BIT(8) );\n\nWith strict_mode set, the default from MariaDB 10.2.4:\n\nINSERT INTO b VALUES (b\'11111111\');\n\nINSERT INTO b VALUES (b\'01010101\');\n\nINSERT INTO b VALUES (b\'1111111111111\');\nERROR 1406 (22001): Data too long for column \'b1\' at row 1\n\nSELECT b1+0, HEX(b1), OCT(b1), BIN(b1) FROM b;\n+------+---------+---------+----------+\n| b1+0 | HEX(b1) | OCT(b1) | BIN(b1) |\n+------+---------+---------+----------+\n| 255 | FF | 377 | 11111111 |\n| 85 | 55 | 125 | 1010101 |\n+------+---------+---------+----------+\n\nWith strict_mode unset, the default until MariaDB 10.2.3:\n\nINSERT INTO b VALUES (b\'11111111\'),(b\'01010101\'),(b\'1111111111111\');\nQuery OK, 3 rows affected, 1 warning (0.10 sec)\nRecords: 3 Duplicates: 0 Warnings: 1\n\nSHOW WARNINGS;\n+---------+------+---------------------------------------------+\n| Level | Code | Message |\n+---------+------+---------------------------------------------+\n| Warning | 1264 | Out of range value for column \'b1\' at row 3 |\n+---------+------+---------------------------------------------+\n\nSELECT b1+0, HEX(b1), OCT(b1), BIN(b1) FROM b;\n+------+---------+---------+----------+\n| b1+0 | HEX(b1) | OCT(b1) | BIN(b1) |\n+------+---------+---------+----------+\n| 255 | FF | 377 | 11111111 |\n| 85 | 55 | 125 | 1010101 |\n| 255 | FF | 377 | 11111111 |\n+------+---------+---------+----------+\n\nURL: https://mariadb.com/kb/en/bit/','','https://mariadb.com/kb/en/bit/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (268,23,'Floating-point Accuracy','Due to their nature, not all floating-point numbers can be stored with exact\nprecision. Hardware architecture, the CPU or even the compiler version and\noptimization level may affect the precision.\n\nIf you are comparing DOUBLEs or FLOATs with numeric decimals, it is not safe\nto use the equality operator.\n\nSometimes, changing a floating-point number from single-precision (FLOAT) to\ndouble-precision (DOUBLE) will fix the problem.\n\nExample\n-------\n\nf1, f2 and f3 have seemingly identical values across each row, but due to\nfloating point accuracy, the results may be unexpected.\n\nCREATE TABLE fpn (id INT, f1 FLOAT, f2 DOUBLE, f3 DECIMAL (10,3));\nINSERT INTO fpn VALUES (1,2,2,2),(2,0.1,0.1,0.1);\n\nSELECT * FROM fpn WHERE f1*f1 = f2*f2;\n+------+------+------+-------+\n| id | f1 | f2 | f3 |\n+------+------+------+-------+\n| 1 | 2 | 2 | 2.000 |\n+------+------+------+-------+\n\nThe reason why only one instead of two rows was returned becomes clear when we\nsee how the floating point squares were evaluated.\n\nSELECT f1*f1, f2*f2, f3*f3 FROM fpn;\n+----------------------+----------------------+----------+\n| f1*f1 | f2*f2 | f3*f3 |\n+----------------------+----------------------+----------+\n| 4 | 4 | 4.000000 |\n| 0.010000000298023226 | 0.010000000000000002 | 0.010000 |\n+----------------------+----------------------+----------+\n\nURL: https://mariadb.com/kb/en/floating-point-accuracy/','','https://mariadb.com/kb/en/floating-point-accuracy/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (269,23,'BINARY','This page describes the BINARY data type. For details about the operator, see\nBinary Operator.\n\nSyntax\n------\n\nBINARY(M)\n\nDescription\n-----------\n\nThe BINARY type is similar to the CHAR type, but stores binary byte strings\nrather than non-binary character strings. M represents the column length in\nbytes.\n\nIt contains no character set, and comparison and sorting are based on the\nnumeric value of the bytes.\n\nIf the maximum length is exceeded, and SQL strict mode is not enabled , the\nextra characters will be dropped with a warning. If strict mode is enabled, an\nerror will occur.\n\nBINARY values are right-padded with 0x00 (the zero byte) to the specified\nlength when inserted. The padding is not removed on select, so this needs to\nbe taken into account when sorting and comparing, where all bytes are\nsignificant. The zero byte, 0x00 is less than a space for comparison purposes.\n\nExamples\n--------\n\nInserting too many characters, first with strict mode off, then with it on:\n\nCREATE TABLE bins (a BINARY(10));\n\nINSERT INTO bins VALUES(\'12345678901\');\nQuery OK, 1 row affected, 1 warning (0.04 sec)\n\nSELECT * FROM bins;\n+------------+\n| a |\n+------------+\n| 1234567890 |\n+------------+\n\nSET sql_mode=\'STRICT_ALL_TABLES\';\n\nINSERT INTO bins VALUES(\'12345678901\');\nERROR 1406 (22001): Data too long for column \'a\' at row 1\n\nSorting is performed with the byte value:\n\nTRUNCATE bins;\n\nINSERT INTO bins VALUES(\'A\'),(\'B\'),(\'a\'),(\'b\');\n\nSELECT * FROM bins ORDER BY a;\n+------+\n| a |\n+------+\n| A |\n| B |\n| a |\n| b |\n+------+\n\nUsing CAST to sort as a CHAR instead:\n\nSELECT * FROM bins ORDER BY CAST(a AS CHAR);\n+------+\n| a |\n+------+\n| a |\n| A |\n| b |\n| B |\n+------+\n\nThe field is a BINARY(10), so padding of two \'\\0\'s are inserted, causing\ncomparisons that don\'t take this into account to fail:\n\nTRUNCATE bins;\n\nINSERT INTO bins VALUES(\'12345678\');\n\nSELECT a = \'12345678\', a = \'12345678\\0\\0\' from bins;\n+----------------+--------------------+\n| a = \'12345678\' | a = \'12345678\\0\\0\' |\n+----------------+--------------------+\n| 0 | 1 |\n+----------------+--------------------+\n\nURL: https://mariadb.com/kb/en/binary/','','https://mariadb.com/kb/en/binary/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (270,23,'BLOB','Syntax\n------\n\nBLOB[(M)]\n\nDescription\n-----------\n\nA BLOB column with a maximum length of 65,535 (216 - 1) bytes. Each BLOB value\nis stored using a two-byte length prefix that indicates the number of bytes in\nthe value.\n\nAn optional length M can be given for this type. If this is done, MariaDB\ncreates the column as the smallest BLOB type large enough to hold values M\nbytes long.\n\nBLOBS can also be used to store dynamic columns.\n\nBefore MariaDB 10.2.1, BLOB and TEXT columns could not be assigned a DEFAULT\nvalue. This restriction was lifted in MariaDB 10.2.1.\n\nIndexing\n--------\n\nMariaDB starting with 10.4\n--------------------------\nFrom MariaDB 10.4, it is possible to set a unique index on a column that uses\nthe BLOB data type. In previous releases this was not possible, as the index\nwould only guarantee the uniqueness of a fixed number of characters.\n\nOracle Mode\n-----------\n\nMariaDB starting with 10.3\n--------------------------\nIn Oracle mode from MariaDB 10.3, BLOB is a synonym for LONGBLOB.\n\nURL: https://mariadb.com/kb/en/blob/','','https://mariadb.com/kb/en/blob/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (271,23,'BLOB and TEXT Data Types','Description\n-----------\n\nA BLOB is a binary large object that can hold a variable amount of data. The\nfour BLOB types are\n\n* TINYBLOB,\n* BLOB, \n* MEDIUMBLOB, and\n* LONGBLOB.\n\nThese differ only in the maximum length of the values they can hold.\n\nThe TEXT types are\n\n* TINYTEXT,\n* TEXT,\n* MEDIUMTEXT, and\n* LONGTEXT.\n* JSON (alias for LONGTEXT)\n\nThese correspond to the four BLOB types and have the same maximum lengths and\nstorage requirements.\n\nMariaDB starting with 10.2.1\n----------------------------\nStarting from MariaDB 10.2.1, BLOB and TEXT columns can have a DEFAULT value.\n\nMariaDB starting with 10.4.3\n----------------------------\nFrom MariaDB 10.4, it is possible to set a unique index on columns that use\nthe BLOB or TEXT data types.\n\nURL: https://mariadb.com/kb/en/blob-and-text-data-types/','','https://mariadb.com/kb/en/blob-and-text-data-types/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (272,23,'CHAR','This article covers the CHAR data type. See CHAR Function for the function.\n\nSyntax\n------\n\n[NATIONAL] CHAR[(M)] [CHARACTER SET charset_name] [COLLATE collation_name]\n\nDescription\n-----------\n\nA fixed-length string that is always right-padded with spaces to the specified\nlength when stored. M represents the column length in characters. The range of\nM is 0 to 255. If M is omitted, the length is 1.\n\nCHAR(0) columns can contain 2 values: an empty string or NULL. Such columns\ncannot be part of an index. The CONNECT storage engine does not support\nCHAR(0).\n\nNote: Trailing spaces are removed when CHAR values are retrieved unless the\nPAD_CHAR_TO_FULL_LENGTH SQL mode is enabled.\n\nBefore MariaDB 10.2, all collations were of type PADSPACE, meaning that CHAR\n(as well as VARCHAR and TEXT) values are compared without regard for trailing\nspaces. This does not apply to the LIKE pattern-matching operator, which takes\ninto account trailing spaces.\n\nIf a unique index consists of a column where trailing pad characters are\nstripped or ignored, inserts into that column where values differ only by the\nnumber of trailing pad characters will result in a duplicate-key error.\n\nExamples\n--------\n\nTrailing spaces:\n\nCREATE TABLE strtest (c CHAR(10));\nINSERT INTO strtest VALUES(\'Maria \');\n\nSELECT c=\'Maria\',c=\'Maria \' FROM strtest;\n+-----------+--------------+\n| c=\'Maria\' | c=\'Maria \' |\n+-----------+--------------+\n| 1 | 1 |\n+-----------+--------------+\n\nSELECT c LIKE \'Maria\',c LIKE \'Maria \' FROM strtest;\n+----------------+-------------------+\n| c LIKE \'Maria\' | c LIKE \'Maria \' |\n+----------------+-------------------+\n| 1 | 0 |\n+----------------+-------------------+\n\nNO PAD Collations\n-----------------\n\nNO PAD collations regard trailing spaces as normal characters. You can get a\nlist of all NO PAD collations by querying the Information Schema Collations\ntable, for example:\n\nSELECT collation_name FROM information_schema.collations \n WHERE collation_name LIKE \"%nopad%\";\n+------------------------------+\n| collation_name |\n+------------------------------+\n| big5_chinese_nopad_ci |\n| big5_nopad_bin |\n...\n\nURL: https://mariadb.com/kb/en/char/','','https://mariadb.com/kb/en/char/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (273,23,'CHAR BYTE','Description\n-----------\n\nThe CHAR BYTE data type is an alias for the BINARY data type. This is a\ncompatibility feature.\n\nURL: https://mariadb.com/kb/en/char-byte/','','https://mariadb.com/kb/en/char-byte/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (274,23,'ENUM','Syntax\n------\n\nENUM(\'value1\',\'value2\',...) [CHARACTER SET charset_name] [COLLATE\ncollation_name]\n\nDescription\n-----------\n\nAn enumeration. A string object that can have only one value, chosen from the\nlist of values \'value1\', \'value2\', ..., NULL or the special \'\' error value. In\ntheory, an ENUM column can have a maximum of 65,535 distinct values; in\npractice, the real maximum depends on many factors. ENUM values are\nrepresented internally as integers.\n\nTrailing spaces are automatically stripped from ENUM values on table creation.\n\nENUMs require relatively little storage space compared to strings, either one\nor two bytes depending on the number of enumeration values.\n\nNULL and empty values\n---------------------\n\nAn ENUM can also contain NULL and empty values. If the ENUM column is declared\nto permit NULL values, NULL becomes a valid value, as well as the default\nvalue (see below). If strict SQL Mode is not enabled, and an invalid value is\ninserted into an ENUM, a special empty string, with an index value of zero\n(see Numeric index, below), is inserted, with a warning. This may be\nconfusing, because the empty string is also a possible value, and the only\ndifference if that is this case its index is not 0. Inserting will fail with\nan error if strict mode is active.\n\nIf a DEFAULT clause is missing, the default value will be:\n\n* NULL if the column is nullable;\n* otherwise, the first value in the enumeration.\n\nNumeric index\n-------------\n\nENUM values are indexed numerically in the order they are defined, and sorting\nwill be performed in this numeric order. We suggest not using ENUM to store\nnumerals, as there is little to no storage space benefit, and it is easy to\nconfuse the enum integer with the enum numeral value by leaving out the quotes.\n\nAn ENUM defined as ENUM(\'apple\',\'orange\',\'pear\') would have the following\nindex values:\n\n+--------------------------------------+--------------------------------------+\n| Index | Value |\n+--------------------------------------+--------------------------------------+\n| NULL | NULL |\n+--------------------------------------+--------------------------------------+\n| 0 | \'\' |\n+--------------------------------------+--------------------------------------+\n| 1 | \'apple\' |\n+--------------------------------------+--------------------------------------+\n| 2 | \'orange\' |\n+--------------------------------------+--------------------------------------+\n| 3 | \'pear\' |\n+--------------------------------------+--------------------------------------+\n\nExamples\n--------\n\nCREATE TABLE fruits (\n id INT NOT NULL auto_increment PRIMARY KEY,\n fruit ENUM(\'apple\',\'orange\',\'pear\'),\n bushels INT);\n\nDESCRIBE fruits;\n+---------+-------------------------------+------+-----+---------+-------------\n--+\n| Field | Type | Null | Key | Default | Extra \n |\n+---------+-------------------------------+------+-----+---------+-------------\n--+\n| id | int(11) | NO | PRI | NULL |\nauto_increment |\n| fruit | enum(\'apple\',\'orange\',\'pear\') | YES | | NULL | \n |\n| bushels | int(11) | YES | | NULL | \n |\n+---------+-------------------------------+------+-----+---------+-------------\n--+\n\nINSERT INTO fruits\n (fruit,bushels) VALUES\n (\'pear\',20),\n (\'apple\',100),\n (\'orange\',25);\n\nINSERT INTO fruits\n (fruit,bushels) VALUES\n (\'avocado\',10);\nERROR 1265 (01000): Data truncated for column \'fruit\' at row 1\n\nSELECT * FROM fruits;\n+----+--------+---------+\n| id | fruit | bushels |\n+----+--------+---------+\n| 1 | pear | 20 |\n| 2 | apple | 100 |\n| 3 | orange | 25 |\n+----+--------+---------+\n\nSelecting by numeric index:\n\nSELECT * FROM fruits WHERE fruit=2;\n+----+--------+---------+\n| id | fruit | bushels |\n+----+--------+---------+\n| 3 | orange | 25 |\n+----+--------+---------+\n\nSorting is according to the index value:\n\nCREATE TABLE enums (a ENUM(\'2\',\'1\'));\n\nINSERT INTO enums VALUES (\'1\'),(\'2\');\n\nSELECT * FROM enums ORDER BY a ASC;\n+------+\n| a |\n+------+\n| 2 |\n| 1 |\n+------+\n\nIt\'s easy to get confused between returning the enum integer with the stored\nvalue, so we don\'t suggest using ENUM to store numerals. The first example\nreturns the 1st indexed field (\'2\' has an index value of 1, as it\'s defined\nfirst), while the second example returns the string value \'1\'.\n\nSELECT * FROM enums WHERE a=1;\n+------+\n| a |\n+------+\n| 2 |\n+------+\n\nSELECT * FROM enums WHERE a=\'1\';\n+------+\n| a |\n+------+\n| 1 |\n+------+\n\nURL: https://mariadb.com/kb/en/enum/','','https://mariadb.com/kb/en/enum/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (275,23,'INET6','MariaDB starting with 10.5.0\n----------------------------\nThe INET6 data type was added in MariaDB 10.5.0\n\nSyntax\n------\n\nINET6\n\nDescription\n-----------\n\nThe INET6 data type is intended for storage of IPv6 addresses, as well as IPv4\naddresses assuming conventional mapping of IPv4 addresses into IPv6 addresses.\n\nBoth short and long IPv6 notation are permitted, according to RFC-5952.\n\n* Values are stored as a 16-byte fixed length binary string, with most\nsignificant byte first.\n* Storage engines see INET6 as BINARY(16).\n* Clients see INET6 as CHAR(39) and get text representation on retrieval.\n\nThe IPv4-compatible notation is considered as deprecated. It is supported for\ncompatibility with the INET6_ATON function, which also understands this\nformat. It\'s recommended to use the mapped format to store IPv4 addresses in\nINET6.\n\nWhen an IPv4 mapped (or compatible) value is stored in INET6, it still\noccupies 16 bytes:\n\nRetrieval\n---------\n\nOn retrieval, in the client-server text protocol, INET6 values are converted\nto the short text representation, according to RFC-5952, that is with all\nleading zeroes in each group removed and with consequent zero groups\ncompressed.\n\nBesides creating one\'s own stored function, there is no a way to retrieve an\nINET6 value using long text representation.\n\nCasting\n-------\n\n* CAST from a character string to INET6 understands addresses in short or long\ntext notation (including IPv4 mapped and compatible addresses). NULL is\nreturned if the format is not understood.\n* CAST from a binary string to INET6 requires a 16-byte string as an argument.\nNULL is returned if the argument length is not equal to 16.\n* CAST from other data types to INET6 first converts data to a character\nstring, then CAST from character string to INET6 is applied.\n* CAST from INET6 to CHAR returns short text address notation.\n* CAST from INET6 to BINARY returns its 16-byte binary string representation.\n* CAST from INET6 to data types other than CHAR (e.g. SIGNED, UNSIGNED, TIME,\netc) returns an error.\n\nComparisons\n-----------\n\nAn INET6 expression can be compared to:\n\n* another INET6 expression\n* a character string expression with a text (short or long) address\nrepresentation:\n* a 16-byte binary string expression:\n\nAttempting to compare INET6 to an expression of any other data type returns an\nerror.\n\nMixing INET6 Values for Result\n------------------------------\n\nAn INET6 expression can be mixed for result (i.e. UNION, CASE..THEN, COALESCE\netc) with:\n\n* another INET6 expression. The resulting data type is INET6.\n* a character string in text (short or long) address representation. The\nresult data type is INET6. The character string counterpart is automatically\nconverted to INET6. If the string format is not understood, it\'s converted\nwith a warning to either NULL or to \'::\', depending on the NULL-ability of the\nresult.\n* a 16-byte binary string. The resulting data type is INET6. The binary string\ncounterpart is automatically converted to INET6. If the length of the binary\nstring is not equal to 16, it\'s converted with a warning to NULL or to \'::\'\ndepending on the NULL-ability of the result.\n\nAttempts to mix INET6 for result with other data types will return an error.\n\nMixing INET6 with other data types for LEAST and GREATEST, when mixing for\ncomparison and mixing for result are involved at the same time, uses the same\nrules with mixing for result, described in the previous paragraphs.\n\nFunctions and Operators\n-----------------------\n\n* HEX() with an INET6 argument returns a hexadecimal representation of the\nunderlying 16-byte binary string\n* Arithmetic operators (+,-,*,/,MOD,DIV) are not supported for INET6. This may\nchange in the future.\n* The INET6_ATON function now understands INET6 values as an argument\n* The prototypes of the IS_IPV4_COMPAT and IS_IPV4_MAPPED functions have\nchanged from a BINARY(16) to a INET6,\n* When the argument for these two functions is not INET6, automatic implicit\nCAST to INET6 is applied. As a consequence, both functions now understand\narguments in both text representation and binary(16) representation. Before\nMariaDB 10.5.0, these functions understood only binary(16) representation.\n\nPrepared Statement Parameters\n-----------------------------\n\nINET6 understands both text and binary(16) address representation in prepared\nstatement parameters (PREPARE..EXECUTE and EXECUTE IMMEDIATE statements).\n\nMigration between BINARY(16) and INET6\n---------------------------------------\n\nBefore MariaDB 10.5.0, you may have used BINARY(16) as a storage for IPv6\ninternet addresses, in combination with INET6_ATON and INET6_NTOA to\nrespectively insert and retrieve data.\n\nFrom 10.5, you can ALTER BINARY(16) columns storing IPv6 addresses to INET6.\nAfter such an alter, there is no a need to use INET6_ATON() and INET6_NTOA().\nAddresses can be inserted and retrieved directly.\n\nIt is also possible to convert INET6 columns to BINARY(16) and continue using\nthe data in combination with INET6_NTOA() and INET6_ATON().\n\nExamples\n--------\n\nCREATE TABLE t1 (a INET6);\n\nInserting using short text address notation:\n\nINSERT INTO t1 VALUES (\'2001:db8::ff00:42:8329\');\n\nLong text address notation:\n\nINSERT INTO t1 VALUES (\'2001:0db8:0000:0000:0000:ff00:0042:8329\');\n\n16-byte binary string notation:\n\nINSERT INTO t1 VALUES (0x20010DB8000000000000FF0000428329);\nINSERT INTO t1 VALUES (UNHEX(\'20010DB8000000000000FF0000428329\'));\n\nIPv4 addresses, using IPv4-mapped and IPv4-compatible notations:\n\nINSERT INTO t1 VALUES (\'::ffff:192.0.2.128\'); -- mapped\nINSERT INTO t1 VALUES (\'::192.0.2.128\'); -- compatible\n\nSELECT * FROM t1;\n+------------------------+\n| a |\n+------------------------+\n| 2001:db8::ff00:42:8329 |\n| 2001:db8::ff00:42:8329 |\n| 2001:db8::ff00:42:8329 |\n| 2001:db8::ff00:42:8329 |\n| ::ffff:192.0.2.128 |\n| ::192.0.2.128 |\n+------------------------+\n\nIPv4 mapped (or compatible) values still occupy 16 bytes:\n\nCREATE OR REPLACE TABLE t1 (a INET6);\n\nINSERT INTO t1 VALUES (\'::ffff:192.0.2.128\');\n\nSELECT * FROM t1;\n+--------------------+\n| a |\n+--------------------+\n| ::ffff:192.0.2.128 |\n+--------------------+\n\nSELECT HEX(a) FROM t1;\n+----------------------------------+\n| HEX(a) |\n+----------------------------------+\n| 00000000000000000000FFFFC0000280 |\n+----------------------------------+\n\nCasting from INET6 to anything other than CHAR returns an error:\n\nSELECT CAST(a AS DECIMAL) FROM t1;\n\nERROR 4079 (HY000): Illegal parameter data type inet6 for operation\n\'decimal_typecast\'\n\nComparison Examples\n-------------------\n\nComparison with another INET6 expression:\n\nCREATE OR REPLACE TABLE t1 (a INET6);\n CREATE OR REPLACE TABLE t2 (a INET6);\n\nINSERT INTO t1 VALUES\n(\'2001:db8::ff00:42:8328\'),(\'2001:db8::ff00:42:8329\');\n INSERT INTO t2 VALUES\n(\'2001:db8::ff00:42:832a\'),(\'2001:db8::ff00:42:8329\');\n\nSELECT t1.* FROM t1,t2 WHERE t1.a=t2.a;\n +------------------------+\n | a |\n +------------------------+\n | 2001:db8::ff00:42:8329 |\n +------------------------+\n\nWith a character string expression with a text (short or long) address\nrepresentation:\n\nCREATE OR REPLACE TABLE t1 (a INET6);\n\nINSERT INTO t1 VALUES (\'2001:db8::ff00:42:8329\');\n\nSELECT * FROM t1 WHERE a=\'2001:db8::ff00:42:8329\';\n +------------------------+\n | a |\n +------------------------+\n | 2001:db8::ff00:42:8329 |\n +------------------------+\n\nWith a 16-byte binary string expression:\n\nCREATE OR REPLACE TABLE t1 (a INET6);\n\nINSERT INTO t1 VALUES (\'2001:db8::ff00:42:8329\');\n\nSELECT * FROM t1 WHERE a=X\'20010DB8000000000000FF0000428329\';\n +------------------------+\n | a |\n +------------------------+\n | 2001:db8::ff00:42:8329 |\n +------------------------+\n\nWith an expression of another data type:\n\nSELECT * FROM t1 WHERE a=1;\nERROR 4078 (HY000): Illegal parameter data types inet6 and int for operation\n\'=\'\n\nMixing for Result Examples\n--------------------------\n\nMixed with another INET6 expression, returning an INET6 data type:\n\nCREATE OR REPLACE TABLE t1 (a INET6, b INET6);\n\nINSERT INTO t1 VALUES (NULL,\'2001:db8::ff00:42:8329\');\n\nSELECT a FROM t1 UNION SELECT b FROM t1;\n +------------------------+\n | a |\n +------------------------+\n | NULL |\n | 2001:db8::ff00:42:8329 |\n +------------------------+\n\nSELECT COALESCE(a, b) FROM t1;\n +------------------------+\n | COALESCE(a, b) |\n +------------------------+\n | 2001:db8::ff00:42:8329 |\n +------------------------+\n\nMixed with a character string in text (short or long) address representation:\n\nCREATE OR REPLACE TABLE t1 (a INET6, b VARCHAR(64));\n\nINSERT INTO t1 VALUES (NULL,\'2001:db8::ff00:42:8328\');\n\nINSERT INTO t1 VALUES (NULL,\'2001:db8::ff00:42:832a garbage\');\n\nSELECT COALESCE(a,b) FROM t1;\n +------------------------+\n | COALESCE(a,b) |\n +------------------------+\n | 2001:db8::ff00:42:8328 |\n | NULL |\n +------------------------+\n 2 rows in set, 1 warning (0.001 sec)\n\nSHOW WARNINGS;\n\n+---------+------+---------------------------------------------------------+\n | Level | Code | Message\n|\n\n+---------+------+---------------------------------------------------------+\n | Warning | 1292 | Incorrect inet6 value: \'2001:db8::ff00:42:832a garbage\'\n|\n\n+---------+------+---------------------------------------------------------+\n\nMixed with a 16-byte binary string:\n\nCREATE OR REPLACE TABLE t1 (a INET6, b VARBINARY(16));\n\nINSERT INTO t1 VALUES (NULL,CONCAT(0xFFFF,REPEAT(0x0000,6),0xFFFF));\n\nINSERT INTO t1 VALUES (NULL,0x00/*garbage*/);\n\nSELECT COALESCE(a,b) FROM t1;\n +---------------+\n | COALESCE(a,b) |\n +---------------+\n | ffff::ffff |\n | NULL |\n +---------------+\n 2 rows in set, 1 warning (0.001 sec)\n\nSHOW WARNINGS;\n +---------+------+-------------------------------+\n | Level | Code | Message |\n +---------+------+-------------------------------+\n | Warning | 1292 | Incorrect inet6 value: \'\\x00\' |\n +---------+------+-------------------------------+\n\nMixing with other data types:\n\nSELECT CAST(\'ffff::ffff\' AS INET6) UNION SELECT 1;\nERROR 4078 (HY000): Illegal parameter data types inet6 and int for operation\n\'UNION\'\n\nFunctions and Operators Examples\n--------------------------------\n\nHEX with an INET6 argument returning a hexadecimal representation:\n\nSELECT HEX(CAST(\'2001:db8::ff00:42:8329\' AS INET6));\n +----------------------------------------------+\n | HEX(CAST(\'2001:db8::ff00:42:8329\' AS INET6)) |\n +----------------------------------------------+\n | 20010DB8000000000000FF0000428329 |\n +----------------------------------------------+\n\nINET6_ATON now understands INET6 values as an argument:\n\nCREATE OR REPLACE TABLE t1 (a INET6);\n\nINSERT INTO t1 VALUES (\'2001:db8::ff00:42:8329\');\n\nSELECT a, HEX(INET6_ATON(a)) FROM t1;\n +------------------------+----------------------------------+\n | a | HEX(INET6_ATON(a)) |\n +------------------------+----------------------------------+\n | 2001:db8::ff00:42:8329 | 20010DB8000000000000FF0000428329 |\n +------------------------+----------------------------------+\n\nIS_IPV4_COMPAT and IS_IPV4_MAPPED prototype now a BINARY(16)):\n\nCREATE OR REPLACE TABLE t1 (a INET6);\n\nINSERT INTO t1 VALUES (\'2001:db8::ff00:42:8329\');\n INSERT INTO t1 VALUES (\'::ffff:192.168.0.1\');\n INSERT INTO t1 VALUES (\'::192.168.0.1\');\n\nSELECT a, IS_IPV4_MAPPED(a), IS_IPV4_COMPAT(a) FROM t1;\n +------------------------+-------------------+-------------------+\n | a | IS_IPV4_MAPPED(a) | IS_IPV4_COMPAT(a) |\n +------------------------+-------------------+-------------------+\n | 2001:db8::ff00:42:8329 | 0 | 0 |\n | ::ffff:192.168.0.1 | 1 | 0 |\n | ::192.168.0.1 | 0 | 1 |\n +------------------------+-------------------+-------------------+\n\nAutomatic implicit CAST to INET6:\n\nCREATE OR REPLACE TABLE t1 (\n a INET6,\n b VARCHAR(39) DEFAULT a\n );\n\nINSERT INTO t1 (a) VALUES (\'ffff::ffff\'),(\'::ffff:192.168.0.1\');\n\nSELECT a, IS_IPV4_MAPPED(a), b, IS_IPV4_MAPPED(b) FROM t1;\n\n+--------------------+-------------------+--------------------+----------------\n--+\n | a | IS_IPV4_MAPPED(a) | b |\nIS_IPV4_MAPPED(b) |\n\n+--------------------+-------------------+--------------------+----------------\n--+\n | ffff::ffff | 0 | ffff::ffff |\n 0 |\n | ::ffff:192.168.0.1 | 1 | ::ffff:192.168.0.1 |\n 1 |\n\n+--------------------+-------------------+--------------------+----------------\n--+\n\nCREATE OR REPLACE TABLE t1 (\n a INET6,\n b BINARY(16) DEFAULT UNHEX(HEX(a))\n );\n\nINSERT INTO t1 (a) VALUES (\'ffff::ffff\'),(\'::ffff:192.168.0.1\');\n\nSELECT a, IS_IPV4_MAPPED(a), HEX(b), IS_IPV4_MAPPED(b) FROM t1;\n\n+--------------------+-------------------+----------------------------------+--\n----------------+\n | a | IS_IPV4_MAPPED(a) | HEX(b)\n | IS_IPV4_MAPPED(b) |\n\n+--------------------+-------------------+----------------------------------+--\n----------------+\n | ffff::ffff | 0 |\nFFFF000000000000000000000000FFFF | 0 |\n | ::ffff:192.168.0.1 | 1 |\n00000000000000000000FFFFC0A80001 | 1 |\n\n+--------------------+-------------------+----------------------------------+--\n----------------+\n\nPrepared Statement Parameters Examples\n--------------------------------------\n\nCREATE OR REPLACE TABLE t1 (a INET6);\n\nEXECUTE IMMEDIATE \'INSERT INTO t1 VALUES (?)\' USING \'ffff::fffe\';\nEXECUTE IMMEDIATE \'INSERT INTO t1 VALUES (?)\' USING\nX\'FFFF000000000000000000000000FFFF\';\n\nSELECT * FROM t1;\n+------------+\n| a |\n+------------+\n| ffff::fffe |\n| ffff::ffff |\n+------------+\n\nEXECUTE IMMEDIATE \'SELECT * FROM t1 WHERE a=?\' USING \'ffff::fffe\';\n+------------+\n| a |\n+------------+\n| ffff::fffe |\n+------------+\n\nEXECUTE IMMEDIATE \'SELECT * FROM t1 WHERE a=?\' USING','','https://mariadb.com/kb/en/inet6/');
-update help_topic set description = CONCAT(description, '\nX\'FFFF000000000000000000000000FFFF\';\n+------------+\n| a |\n+------------+\n| ffff::ffff |\n+------------+\n\nMigration between BINARY(16) and INET6 Examples\n-----------------------------------------------\n\nBefore MariaDB 10.5:\n\nCREATE OR REPLACE TABLE t1 (a BINARY(16));\n\nINSERT INTO t1 VALUES (INET6_ATON(\'ffff::ffff\'));\n\nSELECT INET6_NTOA(a) FROM t1;\n+---------------+\n| INET6_NTOA(a) |\n+---------------+\n| ffff::ffff |\n+---------------+\n\nMigrating to INET6, from MariaDB 10.5:\n\nALTER TABLE t1 MODIFY a INET6;\n\nINSERT INTO t1 VALUES (\'ffff::fffe\');\n\nSELECT * FROM t1;\n+------------+\n| a |\n+------------+\n| ffff::ffff |\n| ffff::fffe |\n+------------+\n\nMigration from INET6 to BINARY(16):\n\nCREATE OR REPLACE TABLE t1 (a INET6);\n\nINSERT INTO t1 VALUES (\'2001:db8::ff00:42:8329\');\nINSERT INTO t1 VALUES (\'::ffff:192.168.0.1\');\nINSERT INTO t1 VALUES (\'::192.168.0.1\');\n\nALTER TABLE t1 MODIFY a BINARY(16);\n\nSELECT INET6_NTOA(a) FROM t1;\n+------------------------+\n| INET6_NTOA(a) |\n+------------------------+\n| 2001:db8::ff00:42:8329 |\n| ::ffff:192.168.0.1 |\n| ::192.168.0.1 |\n+------------------------+\n\nURL: https://mariadb.com/kb/en/inet6/') WHERE help_topic_id = 275;
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (276,23,'JSON Data Type','MariaDB starting with 10.2.7\n----------------------------\nThe JSON alias was added in MariaDB 10.2.7. This was done to make it possible\nto use JSON columns in statement based replication from MySQL to MariaDB and\nto make it possible for MariaDB to read mysqldumps from MySQL.\n\nJSON is an alias for LONGTEXT introduced for compatibility reasons with\nMySQL\'s JSON data type. MariaDB implements this as a LONGTEXT rather, as the\nJSON data type contradicts the SQL standard, and MariaDB\'s benchmarks indicate\nthat performance is at least equivalent.\n\nIn order to ensure that a a valid json document is inserted, the JSON_VALID\nfunction can be used as a CHECK constraint. This constraint is automatically\nincluded for types using the JSON alias from MariaDB 10.4.3.\n\nExamples\n--------\n\nCREATE TABLE t (j JSON);\n\nDESC t;\n+-------+----------+------+-----+---------+-------+\n| Field | Type | Null | Key | Default | Extra |\n+-------+----------+------+-----+---------+-------+\n| j | longtext | YES | | NULL | |\n+-------+----------+------+-----+---------+-------+\n\nWith validation:\n\nCREATE TABLE t2 (\n j JSON\n CHECK (JSON_VALID(j))\n);\n\nINSERT INTO t2 VALUES (\'invalid\');\nERROR 4025 (23000): CONSTRAINT `j` failed for `test`.`t2`\n\nINSERT INTO t2 VALUES (\'{\"id\": 1, \"name\": \"Monty\"}\');\nQuery OK, 1 row affected (0.13 sec)\n\nReplicating JSON Data Between MySQL and MariaDB\n-----------------------------------------------\n\nThe JSON type in MySQL stores the JSON object in a compact form, not as\nLONGTEXT as in MariaDB. This means that row based replication will not work\nfor JSON types from MySQL to MariaDB.\n\nThere are a a few different ways to solve this:\n\n* Use statement based replication.\n* Change the JSON column to type TEXT in MySQL\n* If you must use row-based replication and cannot change the MySQL master\nfrom JSON to TEXT, you can try to introduce an intermediate MySQL slave and\nchange the column type from JSON to TEXT on it. Then you replicate from this\nintermediate slave to MariaDB.\n\nConverting a MySQL TABLE with JSON Fields to MariaDB\n----------------------------------------------------\n\nMariaDB can\'t directly access MySQL\'s JSON format.\n\nThere are a a few different ways to move the table to MariaDB:\n\n* From MariaDB 10.5.7, see the you can use the mysql_json plugin. See Making\nMariaDB understand MySQL JSON.\n* Change the JSON column to type TEXT in MySQL. After this, MariaDB can\ndirectly use the table without any need for a dump and restore.\n* Use mariadb-dump/mysqldump to copy the table.\n\nDifferences Between MySQL JSON Strings and MariaDB JSON Strings\n---------------------------------------------------------------\n\n* In MySQL, JSON is an object and is compared according to json values. In\nMariaDB JSON strings are normal strings and compared as strings. One exception\nis when using JSON_EXTRACT() in which case strings are unescaped before\ncomparison.\n\nURL: https://mariadb.com/kb/en/json-data-type/','','https://mariadb.com/kb/en/json-data-type/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (277,23,'MEDIUMBLOB','Syntax\n------\n\nMEDIUMBLOB\n\nDescription\n-----------\n\nA BLOB column with a maximum length of 16,777,215 (224 - 1) bytes. Each\nMEDIUMBLOB value is stored using a three-byte length prefix that indicates the\nnumber of bytes in the value.\n\nURL: https://mariadb.com/kb/en/mediumblob/','','https://mariadb.com/kb/en/mediumblob/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (278,23,'MEDIUMTEXT','Syntax\n------\n\nMEDIUMTEXT [CHARACTER SET charset_name] [COLLATE collation_name]\n\nDescription\n-----------\n\nA TEXT column with a maximum length of 16,777,215 (224 - 1) characters. The\neffective maximum length is less if the value contains multi-byte characters.\nEach MEDIUMTEXT value is stored using a three-byte length prefix that\nindicates the number of bytes in the value.\n\nURL: https://mariadb.com/kb/en/mediumtext/','','https://mariadb.com/kb/en/mediumtext/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (279,23,'LONGBLOB','Syntax\n------\n\nLONGBLOB\n\nDescription\n-----------\n\nA BLOB column with a maximum length of 4,294,967,295 bytes or 4GB (232 - 1).\nThe effective maximum length of LONGBLOB columns depends on the configured\nmaximum packet size in the client/server protocol and available memory. Each\nLONGBLOB value is stored using a four-byte length prefix that indicates the\nnumber of bytes in the value.\n\nOracle Mode\n-----------\n\nMariaDB starting with 10.3\n--------------------------\nIn Oracle mode from MariaDB 10.3, BLOB is a synonym for LONGBLOB.\n\nURL: https://mariadb.com/kb/en/longblob/','','https://mariadb.com/kb/en/longblob/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (280,23,'LONGTEXT','Syntax\n------\n\nLONGTEXT [CHARACTER SET charset_name] [COLLATE collation_name]\n\nDescription\n-----------\n\nA TEXT column with a maximum length of 4,294,967,295 or 4GB (232 - 1)\ncharacters. The effective maximum length is less if the value contains\nmulti-byte characters. The effective maximum length of LONGTEXT columns also\ndepends on the configured maximum packet size in the client/server protocol\nand available memory. Each LONGTEXT value is stored using a four-byte length\nprefix that indicates the number of bytes in the value.\n\nFrom MariaDB 10.2.7, JSON is an alias for LONGTEXT. See JSON Data Type for\ndetails.\n\nOracle Mode\n-----------\n\nMariaDB starting with 10.3\n--------------------------\nIn Oracle mode from MariaDB 10.3, CLOB is a synonym for LONGTEXT.\n\nURL: https://mariadb.com/kb/en/longtext/','','https://mariadb.com/kb/en/longtext/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (281,23,'ROW','MariaDB starting with 10.3.0\n----------------------------\nThe ROW data type was introduced in MariaDB 10.3.0.\n\nSyntax\n------\n\nROW (<field name> <data type> [{, <field name> <data type>}... ])\n\nDescription\n-----------\n\nROW is a data type for stored procedure variables.\n\nFeatures\n--------\n\nROW fields as normal variables\n------------------------------\n\nROW fields (members) act as normal variables, and are able to appear in all\nquery parts where a stored procedure variable is allowed:\n\n* Assignment is using the := operator and the SET command:\n\na.x:= 10;\na.x:= b.x;\nSET a.x= 10, a.y=20, a.z= b.z;\n\n* Passing to functions and operators:\n\nSELECT f1(rec.a), rec.a<10;\n\n* Clauses (select list, WHERE, HAVING, LIMIT, etc...,):\n\nSELECT var.a, t1.b FROM t1 WHERE t1.b=var.b LIMIT var.c;\n\n* INSERT values:\n\nINSERT INTO t1 VALUES (rec.a, rec.b, rec.c);\n\n* SELECT .. INTO targets\n\nSELECT a,b INTO rec.a, rec.b FROM t1 WHERE t1.id=10;\n\n* Dynamic SQL out parameters (EXECUTE and EXECUTE IMMEDIATE)\n\nEXECUTE IMMEDIATE \'CALL proc_with_out_param(?)\' USING rec.a;\n\nROW type variables as FETCH targets\n-----------------------------------\n\nROW type variables are allowed as FETCH targets:\n\nFETCH cur INTO rec;\n\nwhere cur is a CURSOR and rec is a ROW type stored procedure variable.\n\nNote, currently an attempt to use FETCH for a ROW type variable returns this\nerror:\n\nERROR 1328 (HY000): Incorrect number of FETCH variables\n\nFETCH from a cursor cur into a ROW variable rec works as follows:\n\n* The number of fields in cur must match the number of fields in rec.\n Otherwise, an error is reported.\n\n* Assignment is done from left to right. The first cursor field is assigned to\n the first variable field, the second cursor field is assigned to the second\n variable field, etc.\n\n* Field names in rec are not important and can differ from field names\n in cur.\n\nSee FETCH Examples (below) for examples of using this with sql_mode=ORACLE and\nsql_mode=DEFAULT.\n\nROW type variables as SELECT...INTO targets\n-------------------------------------------\n\nROW type variables are allowed as SELECT..INTO targets with some differences\ndepending on which sql_mode is in use.\n\n* When using sql_mode=ORACLE, table%ROWTYPE and cursor%ROWTYPE\n variables can be used as SELECT...INTO targets.\n\n* Using multiple ROW variables in the SELECT..INTO list will report an\n error.\n\n* Using ROW variables with a different column count than in\n the SELECT..INTO list will report an error.\n\nSee SELECT...INTO Examples (below) for examples of using this with\nsql_mode=ORACLE and sql_mode=DEFAULT.\n\nFeatures not implemented\n------------------------\n\nThe following features are planned, but not implemented yet:\n\n* Returning a ROW type expression from a stored function (see MDEV-12252).\nThis will need some grammar change to support field names after parentheses:\n\nSELECT f1().x FROM DUAL;\n\n* Returning a ROW type expression from a built-in hybrid type function, such\nas CASE, IF, etc. \n* ROW of ROWs\n\nExamples\n--------\n\nDeclaring a ROW in a stored procedure\n-------------------------------------\n\nDELIMITER $$\nCREATE PROCEDURE p1()\nBEGIN\n DECLARE r ROW (c1 INT, c2 VARCHAR(10));\n SET r.c1= 10;\n SET r.c2= \'test\';\n INSERT INTO t1 VALUES (r.c1, r.c2);\nEND;\n$$\nDELIMITER ;\nCALL p1();\n\nFETCH Examples\n--------------\n\nA complete FETCH example for sql_mode=ORACLE:\n\nDROP TABLE IF EXISTS t1;\nCREATE TABLE t1 (a INT, b VARCHAR(32));\nINSERT INTO t1 VALUES (10,\'b10\');\nINSERT INTO t1 VALUES (20,\'b20\');\nINSERT INTO t1 VALUES (30,\'b30\');\n\nSET sql_mode=oracle;\nDROP PROCEDURE IF EXISTS p1;\nDELIMITER $$\nCREATE PROCEDURE p1 AS\n rec ROW(a INT, b VARCHAR(32));\n CURSOR c IS SELECT a,b FROM t1;\nBEGIN\n OPEN c;\n LOOP\n FETCH c INTO rec;\n EXIT WHEN c%NOTFOUND;\n SELECT (\'rec=(\' || rec.a ||\',\'|| rec.b||\')\');\n END LOOP;\n CLOSE c;\nEND;\n$$\nDELIMITER ;\nCALL p1();\n\nA complete FETCH example for sql_mode=DEFAULT:\n\nDROP TABLE IF EXISTS t1;\nCREATE TABLE t1 (a INT, b VARCHAR(32));\nINSERT INTO t1 VALUES (10,\'b10\');\nINSERT INTO t1 VALUES (20,\'b20\');\nINSERT INTO t1 VALUES (30,\'b30\');\n\nSET sql_mode=DEFAULT;\nDROP PROCEDURE IF EXISTS p1;\nDELIMITER $$\nCREATE PROCEDURE p1()\nBEGIN\n DECLARE done INT DEFAULT FALSE;\n DECLARE rec ROW(a INT, b VARCHAR(32));\n DECLARE c CURSOR FOR SELECT a,b FROM t1;\n DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;\n OPEN c;\nread_loop:\n LOOP\n FETCH c INTO rec;\n IF done THEN\n LEAVE read_loop;\n END IF;\n SELECT CONCAT(\'rec=(\',rec.a,\',\',rec.b,\')\');\n END LOOP;\n CLOSE c;\nEND;\n$$\nDELIMITER ;\nCALL p1();\n\nSELECT...INTO Examples\n----------------------\n\nA SELECT...INTO example for sql_mode=DEFAULT:\n\nSET sql_mode=DEFAULT;\nDROP TABLE IF EXISTS t1;\nDROP PROCEDURE IF EXISTS p1;\nCREATE TABLE t1 (a INT, b VARCHAR(32));\nINSERT INTO t1 VALUES (10,\'b10\');\nDELIMITER $$\nCREATE PROCEDURE p1()\nBEGIN\n DECLARE rec1 ROW(a INT, b VARCHAR(32));\n SELECT * FROM t1 INTO rec1;\n SELECT rec1.a, rec1.b;\nEND;\n$$\nDELIMITER ;\nCALL p1();\n\nThe above example returns:\n\n+--------+--------+\n| rec1.a | rec1.b |\n+--------+--------+\n| 10 | b10 |\n+--------+--------+\n\nA SELECT...INTO example for sql_mode=ORACLE:\n\nSET sql_mode=ORACLE;\nDROP TABLE IF EXISTS t1;\nDROP PROCEDURE IF EXISTS p1;\nCREATE TABLE t1 (a INT, b VARCHAR(32));\nINSERT INTO t1 VALUES (10,\'b10\');\nDELIMITER $$\nCREATE PROCEDURE p1 AS\n rec1 ROW(a INT, b VARCHAR(32));\nBEGIN\n SELECT * FROM t1 INTO rec1;\n SELECT rec1.a, rec1.b;\nEND;\n$$\nDELIMITER ;\nCALL p1();\n\nThe above example returns:\n\n+--------+--------+\n| rec1.a | rec1.b |\n+--------+--------+\n| 10 | b10 |\n+--------+--------+\n\nAn example for sql_mode=ORACLE using table%ROWTYPE variables as SELECT..INTO\ntargets:\n\nSET sql_mode=ORACLE;\nDROP TABLE IF EXISTS t1;\nDROP PROCEDURE IF EXISTS p1;\nCREATE TABLE t1 (a INT, b VARCHAR(32));\nINSERT INTO t1 VALUES (10,\'b10\');\nDELIMITER $$\nCREATE PROCEDURE p1 AS\n rec1 t1%ROWTYPE;\nBEGIN\n SELECT * FROM t1 INTO rec1;\n SELECT rec1.a, rec1.b;\nEND;\n$$\nDELIMITER ;\nCALL p1();\n\nThe above example returns:\n\n+--------+--------+\n| rec1.a | rec1.b |\n+--------+--------+\n| 10 | b10 |\n+--------+--------+\n\nAn example for sql_mode=ORACLE using cursor%ROWTYPE variables as SELECT..INTO\ntargets:\n\nSET sql_mode=ORACLE;\nDROP TABLE IF EXISTS t1;\nDROP PROCEDURE IF EXISTS p1;\nCREATE TABLE t1 (a INT, b VARCHAR(32));\nINSERT INTO t1 VALUES (10,\'b10\');\nDELIMITER $$\nCREATE PROCEDURE p1 AS\n CURSOR cur1 IS SELECT * FROM t1;\n rec1 cur1%ROWTYPE;\nBEGIN\n SELECT * FROM t1 INTO rec1;\n SELECT rec1.a, rec1.b;\nEND;\n$$\nDELIMITER ;\nCALL p1();\n\nThe above example returns:\n\n+--------+--------+\n| rec1.a | rec1.b |\n+--------+--------+\n| 10 | b10 |\n+--------+--------+\n\nURL: https://mariadb.com/kb/en/row/','','https://mariadb.com/kb/en/row/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (282,23,'TEXT','Syntax\n------\n\nTEXT[(M)] [CHARACTER SET charset_name] [COLLATE collation_name]\n\nDescription\n-----------\n\nA TEXT column with a maximum length of 65,535 (216 - 1) characters. The\neffective maximum length is less if the value contains multi-byte characters.\nEach TEXT value is stored using a two-byte length prefix that indicates the\nnumber of bytes in the value. If you need a bigger storage, consider using\nMEDIUMTEXT instead.\n\nAn optional length M can be given for this type. If this is done, MariaDB\ncreates the column as the smallest TEXT type large enough to hold values M\ncharacters long.\n\nBefore MariaDB 10.2, all MariaDB collations were of type PADSPACE, meaning\nthat TEXT (as well as VARCHAR and CHAR values) are compared without regard for\ntrailing spaces. This does not apply to the LIKE pattern-matching operator,\nwhich takes into account trailing spaces.\n\nBefore MariaDB 10.2.1, BLOB and TEXT columns could not be assigned a DEFAULT\nvalue. This restriction was lifted in MariaDB 10.2.1.\n\nExamples\n--------\n\nTrailing spaces:\n\nCREATE TABLE strtest (d TEXT(10));\nINSERT INTO strtest VALUES(\'Maria \');\n\nSELECT d=\'Maria\',d=\'Maria \' FROM strtest;\n+-----------+--------------+\n| d=\'Maria\' | d=\'Maria \' |\n+-----------+--------------+\n| 1 | 1 |\n+-----------+--------------+\n\nSELECT d LIKE \'Maria\',d LIKE \'Maria \' FROM strtest;\n+----------------+-------------------+\n| d LIKE \'Maria\' | d LIKE \'Maria \' |\n+----------------+-------------------+\n| 0 | 1 |\n+----------------+-------------------+\n\nIndexing\n--------\n\nTEXT columns can only be indexed over a specified length. This means that they\ncannot be used as the primary key of a table norm until MariaDB 10.4, can a\nunique index be created on them.\n\nMariaDB starting with 10.4\n--------------------------\nStarting with MariaDB 10.4, a unique index can be created on a TEXT column.\n\nInternally, this uses hash indexing to quickly check the values and if a hash\ncollision is found, the actual stored values are compared in order to retain\nthe uniqueness.\n\nDifference between VARCHAR and TEXT\n-----------------------------------\n\n* VARCHAR columns can be fully indexed. TEXT columns can only be indexed over\na specified length.\n* Using TEXT or BLOB in a SELECT query that uses temporary tables for storing\nintermediate results will force the temporary table to be disk based (using\nthe Aria storage engine instead of the memory storage engine, which is a bit\nslower. This is not that bad as the Aria storage engine caches the rows in\nmemory. To get the benefit of this, one should ensure that the\naria_pagecache_buffer_size variable is big enough to hold most of the row and\nindex data for temporary tables.\n\nFor Storage Engine Developers\n-----------------------------\n\n* Internally the full length of the VARCHAR column is allocated inside each\nTABLE objects record[] structure. As there are three such buffers, each open\ntable will allocate 3 times max-length-to-store-varchar bytes of memory.\n* TEXT and BLOB columns are stored with a pointer (4 or 8 bytes) + a 1-4 bytes\nlength. The TEXT data is only stored once. This means that internally TEXT\nuses less memory for each open table but instead has the additional overhead\nthat each TEXT object needs to be allocated and freed for each row access\n(with some caching in between).\n\nURL: https://mariadb.com/kb/en/text/','','https://mariadb.com/kb/en/text/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (283,23,'TINYBLOB','Syntax\n------\n\nTINYBLOB\n\nDescription\n-----------\n\nA BLOB column with a maximum length of 255 (28 - 1) bytes. Each TINYBLOB value\nis stored using a one-byte length prefix that indicates the number of bytes in\nthe value.\n\nURL: https://mariadb.com/kb/en/tinyblob/','','https://mariadb.com/kb/en/tinyblob/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (284,23,'TINYTEXT','Syntax\n------\n\nTINYTEXT [CHARACTER SET charset_name] [COLLATE collation_name]\n\nDescription\n-----------\n\nA TEXT column with a maximum length of 255 (28 - 1) characters. The effective\nmaximum length is less if the value contains multi-byte characters. Each\nTINYTEXT value is stored using a one-byte length prefix that indicates the\nnumber of bytes in the value.\n\nURL: https://mariadb.com/kb/en/tinytext/','','https://mariadb.com/kb/en/tinytext/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (285,23,'VARBINARY','Syntax\n------\n\nVARBINARY(M)\n\nDescription\n-----------\n\nThe VARBINARY type is similar to the VARCHAR type, but stores binary byte\nstrings rather than non-binary character strings. M represents the maximum\ncolumn length in bytes.\n\nIt contains no character set, and comparison and sorting are based on the\nnumeric value of the bytes.\n\nIf the maximum length is exceeded, and SQL strict mode is not enabled , the\nextra characters will be dropped with a warning. If strict mode is enabled, an\nerror will occur.\n\nUnlike BINARY values, VARBINARYs are not right-padded when inserting.\n\nOracle Mode\n-----------\n\nMariaDB starting with 10.3\n--------------------------\nIn Oracle mode from MariaDB 10.3, RAW is a synonym for VARBINARY.\n\nExamples\n--------\n\nInserting too many characters, first with strict mode off, then with it on:\n\nCREATE TABLE varbins (a VARBINARY(10));\n\nINSERT INTO varbins VALUES(\'12345678901\');\nQuery OK, 1 row affected, 1 warning (0.04 sec)\n\nSELECT * FROM varbins;\n+------------+\n| a |\n+------------+\n| 1234567890 |\n+------------+\n\nSET sql_mode=\'STRICT_ALL_TABLES\';\n\nINSERT INTO varbins VALUES(\'12345678901\');\nERROR 1406 (22001): Data too long for column \'a\' at row 1\n\nSorting is performed with the byte value:\n\nTRUNCATE varbins;\n\nINSERT INTO varbins VALUES(\'A\'),(\'B\'),(\'a\'),(\'b\');\n\nSELECT * FROM varbins ORDER BY a;\n+------+\n| a |\n+------+\n| A |\n| B |\n| a |\n| b |\n+------+\n\nUsing CAST to sort as a CHAR instead:\n\nSELECT * FROM varbins ORDER BY CAST(a AS CHAR);\n+------+\n| a |\n+------+\n| a |\n| A |\n| b |\n| B |\n+------+\n\nURL: https://mariadb.com/kb/en/varbinary/','','https://mariadb.com/kb/en/varbinary/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (286,23,'VARCHAR','Syntax\n------\n\n[NATIONAL] VARCHAR(M) [CHARACTER SET charset_name] [COLLATE collation_name]\n\nDescription\n-----------\n\nA variable-length string. M represents the maximum column length in\ncharacters. The range of M is 0 to 65,532. The effective maximum length of a\nVARCHAR is subject to the maximum row size and the character set used. For\nexample, utf8 characters can require up to three bytes per character, so a\nVARCHAR column that uses the utf8 character set can be declared to be a\nmaximum of 21,844 characters.\n\nNote: For the ColumnStore engine, M represents the maximum column length in\nbytes.\n\nMariaDB stores VARCHAR values as a one-byte or two-byte length prefix plus\ndata. The length prefix indicates the number of bytes in the value. A VARCHAR\ncolumn uses one length byte if values require no more than 255 bytes, two\nlength bytes if values may require more than 255 bytes.\n\nMariaDB follows the standard SQL specification, and does not remove trailing\nspaces from VARCHAR values.\n\nVARCHAR(0) columns can contain 2 values: an empty string or NULL. Such columns\ncannot be part of an index. The CONNECT storage engine does not support\nVARCHAR(0).\n\nVARCHAR is shorthand for CHARACTER VARYING. NATIONAL VARCHAR is the standard\nSQL way to define that a VARCHAR column should use some predefined character\nset. MariaDB uses utf8 as this predefined character set, as does MySQL 4.1 and\nup. NVARCHAR is shorthand for NATIONAL VARCHAR.\n\nBefore MariaDB 10.2, all MariaDB collations were of type PADSPACE, meaning\nthat VARCHAR (as well as CHAR and TEXT values) are compared without regard for\ntrailing spaces. This does not apply to the LIKE pattern-matching operator,\nwhich takes into account trailing spaces. From MariaDB 10.2, a number of NO\nPAD collations are available.\n\nIf a unique index consists of a column where trailing pad characters are\nstripped or ignored, inserts into that column where values differ only by the\nnumber of trailing pad characters will result in a duplicate-key error.\n\nExamples\n--------\n\nThe following are equivalent:\n\nVARCHAR(30) CHARACTER SET utf8\nNATIONAL VARCHAR(30)\nNVARCHAR(30)\nNCHAR VARCHAR(30)\nNATIONAL CHARACTER VARYING(30)\nNATIONAL CHAR VARYING(30)\n\nTrailing spaces:\n\nCREATE TABLE strtest (v VARCHAR(10));\nINSERT INTO strtest VALUES(\'Maria \');\n\nSELECT v=\'Maria\',v=\'Maria \' FROM strtest;\n+-----------+--------------+\n| v=\'Maria\' | v=\'Maria \' |\n+-----------+--------------+\n| 1 | 1 |\n+-----------+--------------+\n\nSELECT v LIKE \'Maria\',v LIKE \'Maria \' FROM strtest;\n+----------------+-------------------+\n| v LIKE \'Maria\' | v LIKE \'Maria \' |\n+----------------+-------------------+\n| 0 | 1 |\n+----------------+-------------------+\n\nTruncation\n----------\n\n* Depending on whether or not strict sql mode is set, you will either get a\nwarning or an error if you try to insert a string that is too long into a\nVARCHAR column. If the extra characters are spaces, the spaces that can\'t fit\nwill be removed and you will always get a warning, regardless of the sql mode\nsetting.\n\nDifference Between VARCHAR and TEXT\n-----------------------------------\n\n* VARCHAR columns can be fully indexed. TEXT columns can only be indexed over\na specified length.\n* Using TEXT or BLOB in a SELECT query that uses temporary tables for storing\nintermediate results will force the temporary table to be disk based (using\nthe Aria storage engine instead of the memory storage engine, which is a bit\nslower. This is not that bad as the Aria storage engine caches the rows in\nmemory. To get the benefit of this, one should ensure that the\naria_pagecache_buffer_size variable is big enough to hold most of the row and\nindex data for temporary tables.\n\nOracle Mode\n-----------\n\nMariaDB starting with 10.3\n--------------------------\nIn Oracle mode from MariaDB 10.3, VARCHAR2 is a synonym.\n\nFor Storage Engine Developers\n-----------------------------\n\n* Internally the full length of the VARCHAR column is allocated inside each\nTABLE objects record[] structure. As there are three such buffers, each open\ntable will allocate 3 times max-length-to-store-varchar bytes of memory.\n* TEXT and BLOB columns are stored with a pointer (4 or 8 bytes) + a 1-4 bytes\nlength. The TEXT data is only stored once. This means that internally TEXT\nuses less memory for each open table but instead has the additional overhead\nthat each TEXT object needs to be allocated and freed for each row access\n(with some caching in between).\n\nURL: https://mariadb.com/kb/en/varchar/','','https://mariadb.com/kb/en/varchar/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (287,23,'SET Data Type','Syntax\n------\n\nSET(\'value1\',\'value2\',...) [CHARACTER SET charset_name] [COLLATE\ncollation_name]\n\nDescription\n-----------\n\nA set. A string object that can have zero or more values, each of which must\nbe chosen from the list of values \'value1\', \'value2\', ... A SET column can\nhave a maximum of 64 members. SET values are represented internally as\nintegers.\n\nSET values cannot contain commas.\n\nIf a SET contains duplicate values, an error will be returned if strict mode\nis enabled, or a warning if strict mode is not enabled.\n\nURL: https://mariadb.com/kb/en/set-data-type/','','https://mariadb.com/kb/en/set-data-type/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (288,23,'UUID Data Type','MariaDB starting with 10.7.0\n----------------------------\nThe UUID data type was added in a MariaDB 10.7.0 preview.\n\nSyntax\n------\n\nUUID\n\nDescription\n-----------\n\nThe UUID data type is intended for the storage of 128-bit UUID (Universally\nUnique Identifier) data. See the UUID function page for more details on UUIDs\nthemselves.\n\nRetrieval\n---------\n\nData retrieved by this data type is in the string representation defined in\nRFC4122.\n\nCasting\n-------\n\nString literals of hexadecimal characters and CHAR/VARCHAR/TEXT can be cast to\nthe UUID data type. Likewise hexadecimal literals, binary-literals, and\nBINARY/VARBINARY/BLOB types can also be cast to UUID.\n\nThe data type will not accept a short UUID generated with the UUID_SHORT\nfunction, but will accept a value without the - character generated by the\nSYS_GUID function (or inserted directly). Hyphens can be partially omitted as\nwell, or included after any group of two digits.\n\nThe type does not accept UUIDs in braces, permitted by some implementations.\n\nStorage\n-------\n\nUUID are stored in an index friendly manner, the order of a UUID of\nllllllll-mmmm-Vhhh-vsss-nnnnnnnnnnnn is stored as:\n\nnnnnnnnnnnnn-vsss-Vhhh-mmmm-llllllll\n\nThis provides a sorting order, if a UUIDv1 (node and timestamp) is used, of\nthe node, followed by the timestamp.\n\nExamples\n--------\n\nCREATE TABLE t1 (id UUID);\n\nDirectly Inserting via string literals:\n\nINSERT INTO t1 VALUES(\'123e4567-e89b-12d3-a456-426655440000\');\n\nDirectly Inserting via hexadecimal literals:\n\nINSERT INTO t1 VALUES (x\'fffffffffffffffffffffffffffffffe\');\n\nGenerating and inserting via the UUID function.\n\nINSERT INTO t1 VALUES (UUID());\n\nRetrieval:\n\nSELECT * FROM t1;\n+--------------------------------------+\n| id |\n+--------------------------------------+\n| 123e4567-e89b-12d3-a456-426655440000 |\n| ffffffff-ffff-ffff-ffff-fffffffffffe |\n| 93aac041-1a14-11ec-ab4e-f859713e4be4 |\n+--------------------------------------+\n\nThe UUID_SHORT function does not generate valid full-length UUID:\n\nINSERT INTO t1 VALUES (UUID_SHORT());\nERROR 1292 (22007): Incorrect uuid value: \'99440417627439104\' \n for column `test`.`t1`.`id` at row 1\n\nAccepting a value without the - character, either directly or generated by the\nSYS_GUID function:\n\nINSERT INTO t1 VALUES (SYS_GUID());\n\nSELECT * FROM t1;\n+--------------------------------------+\n| id |\n+--------------------------------------+\n| 123e4567-e89b-12d3-a456-426655440000 |\n| ffffffff-ffff-ffff-ffff-fffffffffffe |\n| 93aac041-1a14-11ec-ab4e-f859713e4be4 |\n| ea0368d3-1a14-11ec-ab4e-f859713e4be4 |\n+--------------------------------------+\n\nSELECT SYS_GUID();\n+----------------------------------+\n| SYS_GUID() |\n+----------------------------------+\n| ff5b6bcc1a1411ecab4ef859713e4be4 |\n+----------------------------------+\n\nINSERT INTO t1 VALUES (\'ff5b6bcc1a1411ecab4ef859713e4be4\');\n\nSELECT * FROM t1;\n+--------------------------------------+\n| id |\n+--------------------------------------+\n| 123e4567-e89b-12d3-a456-426655440000 |\n| ffffffff-ffff-ffff-ffff-fffffffffffe |\n| 93aac041-1a14-11ec-ab4e-f859713e4be4 |\n| ea0368d3-1a14-11ec-ab4e-f859713e4be4 |\n| ff5b6bcc-1a14-11ec-ab4e-f859713e4be4 |\n+--------------------------------------+\n\nValid and invalid hyphen and brace usage:\n\nTRUNCATE t1;\n\nINSERT INTO t1 VALUES (\'f8aa-ed66-1a1b-11ec-ab4e-f859-713e-4be4\');\n\nINSERT INTO t1 VALUES (\'1b80667f1a1c-11ecab4ef859713e4be4\');\n\nINSERT INTO t1 VALUES (\'2fd6c945-1a-1c-11ec-ab4e-f859713e4be4\');\n\nINSERT INTO t1 VALUES (\'49-c9-f9-59-1a-1c-11ec-ab4e-f859713e4be4\');\n\nINSERT INTO t1 VALUES (\'57-96-da-c1-1a-1c-11-ec-ab-4e-f8-59-71-3e-4b-e4\');\n\nINSERT INTO t1 VALUES (\'6-eb74f8f-1a1c-11ec-ab4e-f859713e4be4\');\n\nINSERT INTO t1 VALUES (\'{29bad136-1a1d-11ec-ab4e-f859713e4be4}\');\nERROR 1292 (22007): Incorrect uuid value:\n\'{29bad136-1a1d-11ec-ab4e-f859713e4be4}\' \n for column `test`.`t1`.`id` at row 1\n\nSELECT * FROM t1;\n+--------------------------------------+\n| id |\n+--------------------------------------+\n| f8aaed66-1a1b-11ec-ab4e-f859713e4be4 |\n| 1b80667f-1a1c-11ec-ab4e-f859713e4be4 |\n| 2fd6c945-1a1c-11ec-ab4e-f859713e4be4 |\n| 49c9f959-1a1c-11ec-ab4e-f859713e4be4 |\n| 5796dac1-1a1c-11ec-ab4e-f859713e4be4 |\n| 6eb74f8f-1a1c-11ec-ab4e-f859713e4be4 |\n+--------------------------------------+\n\nURL: https://mariadb.com/kb/en/uuid-data-type/','','https://mariadb.com/kb/en/uuid-data-type/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (289,23,'DATE','Syntax\n------\n\nDATE\n\nDescription\n-----------\n\nA date. The supported range is \'1000-01-01\' to \'9999-12-31\'. MariaDB displays\nDATE values in \'YYYY-MM-DD\' format, but can be assigned dates in looser\nformats, including strings or numbers, as long as they make sense. These\ninclude a short year, YY-MM-DD, no delimiters, YYMMDD, or any other acceptable\ndelimiter, for example YYYY/MM/DD. For details, see date and time literals.\n\n\'0000-00-00\' is a permitted special value (zero-date), unless the NO_ZERO_DATE\nSQL_MODE is used. Also, individual components of a date can be set to 0 (for\nexample: \'2015-00-12\'), unless the NO_ZERO_IN_DATE SQL_MODE is used. In many\ncases, the result of en expression involving a zero-date, or a date with\nzero-parts, is NULL. If the ALLOW_INVALID_DATES SQL_MODE is enabled, if the\nday part is in the range between 1 and 31, the date does not produce any\nerror, even for months that have less than 31 days.\n\nOracle Mode\n-----------\n\nMariaDB starting with 10.3\n--------------------------\nIn Oracle mode from MariaDB 10.3, DATE with a time portion is a synonym for\nDATETIME. See also mariadb_schema.\n\nExamples\n--------\n\nCREATE TABLE t1 (d DATE);\n\nINSERT INTO t1 VALUES (\"2010-01-12\"), (\"2011-2-28\"), (\'120314\'),(\'13*04*21\');\n\nSELECT * FROM t1;\n+------------+\n| d |\n+------------+\n| 2010-01-12 |\n| 2011-02-28 |\n| 2012-03-14 |\n| 2013-04-21 |\n+------------+\n\nURL: https://mariadb.com/kb/en/date/','','https://mariadb.com/kb/en/date/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (290,23,'TIME','Syntax\n------\n\nTIME [(<microsecond precision>)]\n\nDescription\n-----------\n\nA time. The range is \'-838:59:59.999999\' to \'838:59:59.999999\'. Microsecond\nprecision can be from 0-6; if not specified 0 is used. Microseconds have been\navailable since MariaDB 5.3.\n\nMariaDB displays TIME values in \'HH:MM:SS.ssssss\' format, but allows\nassignment of times in looser formats, including \'D HH:MM:SS\', \'HH:MM:SS\',\n\'HH:MM\', \'D HH:MM\', \'D HH\', \'SS\', or \'HHMMSS\', as well as permitting dropping\nof any leading zeros when a delimiter is provided, for example \'3:9:10\'. For\ndetails, see date and time literals.\n\nMariaDB starting with 10.1.2\n----------------------------\nMariaDB 10.1.2 introduced the --mysql56-temporal-format option, on by default,\nwhich allows MariaDB to store TIMEs using the same low-level format MySQL 5.6\nuses.\n\nInternal Format\n---------------\n\nIn MariaDB 10.1.2 a new temporal format was introduced from MySQL 5.6 that\nalters how the TIME, DATETIME and TIMESTAMP columns operate at lower levels.\nThese changes allow these temporal data types to have fractional parts and\nnegative values. You can disable this feature using the\nmysql56_temporal_format system variable.\n\nTables that include TIMESTAMP values that were created on an older version of\nMariaDB or that were created while the mysql56_temporal_format system variable\nwas disabled continue to store data using the older data type format.\n\nIn order to update table columns from the older format to the newer format,\nexecute an ALTER TABLE... MODIFY COLUMN statement that changes the column to\nthe *same* data type. This change may be needed if you want to export the\ntable\'s tablespace and import it onto a server that has\nmysql56_temporal_format=ON set (see MDEV-15225).\n\nFor instance, if you have a TIME column in your table:\n\nSHOW VARIABLES LIKE \'mysql56_temporal_format\';\n\n+-------------------------+-------+\n| Variable_name | Value |\n+-------------------------+-------+\n| mysql56_temporal_format | ON |\n+-------------------------+-------+\n\nALTER TABLE example_table MODIFY ts_col TIME;\n\nWhen MariaDB executes the ALTER TABLE statement, it converts the data from the\nolder temporal format to the newer one.\n\nIn the event that you have several tables and columns using temporal data\ntypes that you want to switch over to the new format, make sure the system\nvariable is enabled, then perform a dump and restore using mysqldump. The\ncolumns using relevant temporal data types are restored using the new temporal\nformat.\n\nStarting from MariaDB 10.5.1 columns with old temporal formats are marked with\na /* mariadb-5.3 */ comment in the output of SHOW CREATE TABLE, SHOW COLUMNS,\nDESCRIBE statements, as well as in the COLUMN_TYPE column of the\nINFORMATION_SCHEMA.COLUMNS Table.\n\nSHOW CREATE TABLE mariadb5312_time\\G\n*************************** 1. row ***************************\n Table: mariadb5312_time\nCreate Table: CREATE TABLE `mariadb5312_time` (\n `t0` time /* mariadb-5.3 */ DEFAULT NULL,\n `t6` time(6) /* mariadb-5.3 */ DEFAULT NULL\n) ENGINE=MyISAM DEFAULT CHARSET=latin1\n\nNote, columns with the current format are not marked with a comment.\n\nExamples\n--------\n\nINSERT INTO time VALUES (\'90:00:00\'), (\'800:00:00\'), (800), (22), (151413),\n(\'9:6:3\'), (\'12 09\');\n\nSELECT * FROM time;\n+-----------+\n| t |\n+-----------+\n| 90:00:00 |\n| 800:00:00 |\n| 00:08:00 |\n| 00:00:22 |\n| 15:14:13 |\n| 09:06:03 |\n| 297:00:00 |\n+-----------+\n\nURL: https://mariadb.com/kb/en/time/','','https://mariadb.com/kb/en/time/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (291,23,'DATETIME','Syntax\n------\n\nDATETIME [(microsecond precision)]\n\nDescription\n-----------\n\nA date and time combination.\n\nMariaDB displays DATETIME values in \'YYYY-MM-DD HH:MM:SS.ffffff\' format, but\nallows assignment of values to DATETIME columns using either strings or\nnumbers. For details, see date and time literals.\n\nDATETIME columns also accept CURRENT_TIMESTAMP as the default value.\n\nMariaDB 10.1.2 introduced the --mysql56-temporal-format option, on by default,\nwhich allows MariaDB to store DATETMEs using the same low-level format MySQL\n5.6 uses. For more information, see Internal Format, below.\n\nFor storage requirements, see Data Type Storage Requirements.\n\nSupported Values\n----------------\n\nMariaDB stores values that use the DATETIME data type in a format that\nsupports values between 1000-01-01 00:00:00.000000 and 9999-12-31\n23:59:59.999999.\n\nMariaDB can also store microseconds with a precision between 0 and 6. If no\nmicrosecond precision is specified, then 0 is used by default.\n\nMariaDB also supports \'0000-00-00\' as a special zero-date value, unless\nNO_ZERO_DATE is specified in the SQL_MODE. Similarly, individual components of\na date can be set to 0 (for example: \'2015-00-12\'), unless NO_ZERO_IN_DATE is\nspecified in the SQL_MODE. In many cases, the result of en expression\ninvolving a zero-date, or a date with zero-parts, is NULL. If the\nALLOW_INVALID_DATES SQL_MODE is enabled, if the day part is in the range\nbetween 1 and 31, the date does not produce any error, even for months that\nhave less than 31 days.\n\nTime Zones\n----------\n\nIf a column uses the DATETIME data type, then any inserted values are stored\nas-is, so no automatic time zone conversions are performed.\n\nMariaDB also does not currently support time zone literals that contain time\nzone identifiers. See MDEV-11829 for more information.\n\nMariaDB validates DATETIME literals against the session\'s time zone. For\nexample, if a specific time range never occurred in a specific time zone due\nto daylight savings time, then DATETIME values within that range would be\ninvalid for that time zone.\n\nFor example, daylight savings time started on March 10, 2019 in the US, so the\ntime range between 02:00:00 and 02:59:59 is invalid for that day in US time\nzones:\n\nSET time_zone = \'America/New_York\';\nQuery OK, 0 rows affected (0.000 sec)\n\nINSERT INTO timestamp_test VALUES (\'2019-03-10 02:55:05\');\nERROR 1292 (22007): Incorrect datetime value: \'2019-03-10 02:55:05\' for column\n`db1`.`timestamp_test`.`timestamp_test` at row 1\n\nBut that same time range is fine in other time zones, such as Coordinated\nUniversal Time (UTC). For example:\n\nSET time_zone = \'UTC\';\nQuery OK, 0 rows affected (0.000 sec)\n\nINSERT INTO timestamp_test VALUES (\'2019-03-10 02:55:05\');\nQuery OK, 1 row affected (0.002 sec)\n\nOracle Mode\n-----------\n\nMariaDB starting with 10.3\n--------------------------\nIn Oracle mode from MariaDB 10.3, DATE with a time portion is a synonym for\nDATETIME. See also mariadb_schema.\n\nInternal Format\n---------------\n\nIn MariaDB 10.1.2 a new temporal format was introduced from MySQL 5.6 that\nalters how the TIME, DATETIME and TIMESTAMP columns operate at lower levels.\nThese changes allow these temporal data types to have fractional parts and\nnegative values. You can disable this feature using the\nmysql56_temporal_format system variable.\n\nTables that include TIMESTAMP values that were created on an older version of\nMariaDB or that were created while the mysql56_temporal_format system variable\nwas disabled continue to store data using the older data type format.\n\nIn order to update table columns from the older format to the newer format,\nexecute an ALTER TABLE... MODIFY COLUMN statement that changes the column to\nthe *same* data type. This change may be needed if you want to export the\ntable\'s tablespace and import it onto a server that has\nmysql56_temporal_format=ON set (see MDEV-15225).\n\nFor instance, if you have a DATETIME column in your table:\n\nSHOW VARIABLES LIKE \'mysql56_temporal_format\';\n\n+-------------------------+-------+\n| Variable_name | Value |\n+-------------------------+-------+\n| mysql56_temporal_format | ON |\n+-------------------------+-------+\n\nALTER TABLE example_table MODIFY ts_col DATETIME;\n\nWhen MariaDB executes the ALTER TABLE statement, it converts the data from the\nolder temporal format to the newer one.\n\nIn the event that you have several tables and columns using temporal data\ntypes that you want to switch over to the new format, make sure the system\nvariable is enabled, then perform a dump and restore using mysqldump. The\ncolumns using relevant temporal data types are restored using the new temporal\nformat.\n\nStarting from MariaDB 10.5.1 columns with old temporal formats are marked with\na /* mariadb-5.3 */ comment in the output of SHOW CREATE TABLE, SHOW COLUMNS,\nDESCRIBE statements, as well as in the COLUMN_TYPE column of the\nINFORMATION_SCHEMA.COLUMNS Table.\n\nSHOW CREATE TABLE mariadb5312_datetime\\G\n*************************** 1. row ***************************\n Table: mariadb5312_datetime\nCreate Table: CREATE TABLE `mariadb5312_datetime` (\n `dt0` datetime /* mariadb-5.3 */ DEFAULT NULL,\n `dt6` datetime(6) /* mariadb-5.3 */ DEFAULT NULL\n) ENGINE=MyISAM DEFAULT CHARSET=latin1\n\nExamples\n--------\n\nCREATE TABLE t1 (d DATETIME);\n\nINSERT INTO t1 VALUES (\"2011-03-11\"), (\"2012-04-19 13:08:22\"),\n (\"2013-07-18 13:44:22.123456\");\n\nSELECT * FROM t1;\n+---------------------+\n| d |\n+---------------------+\n| 2011-03-11 00:00:00 |\n| 2012-04-19 13:08:22 |\n| 2013-07-18 13:44:22 |\n+---------------------+\n\nCREATE TABLE t2 (d DATETIME(6));\n\nINSERT INTO t2 VALUES (\"2011-03-11\"), (\"2012-04-19 13:08:22\"),\n (\"2013-07-18 13:44:22.123456\");\n\nSELECT * FROM t2;\n+----------------------------+\n| d |\n+----------------------------+\n| 2011-03-11 00:00:00.000000 |\n| 2012-04-19 13:08:22.000000 |\n| 2013-07-18 13:44:22.123456 |\n+----------------------------++\n\nStrings used in datetime context are automatically converted to datetime(6).\nIf you want to have a datetime without seconds, you should use\nCONVERT(..,datetime).\n\nSELECT CONVERT(\'2007-11-30 10:30:19\',datetime);\n+-----------------------------------------+\n| CONVERT(\'2007-11-30 10:30:19\',datetime) |\n+-----------------------------------------+\n| 2007-11-30 10:30:19 |\n+-----------------------------------------+\n\nSELECT CONVERT(\'2007-11-30 10:30:19\',datetime(6));\n+--------------------------------------------+\n| CONVERT(\'2007-11-30 10:30:19\',datetime(6)) |\n+--------------------------------------------+\n| 2007-11-30 10:30:19.000000 |\n+--------------------------------------------+\n\nURL: https://mariadb.com/kb/en/datetime/','','https://mariadb.com/kb/en/datetime/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (292,23,'TIMESTAMP','Syntax\n------\n\nTIMESTAMP [(<microsecond precision)]\n\nDescription\n-----------\n\nA timestamp in the format YYYY-MM-DD HH:MM:SS.ffffff.\n\nThe timestamp field is generally used to define at which moment in time a row\nwas added or updated and by default will automatically be assigned the current\ndatetime when a record is inserted or updated. The automatic properties only\napply to the first TIMESTAMP in the record; subsequent TIMESTAMP columns will\nnot be changed.\n\nMariaDB includes the --mysql56-temporal-format option, on by default, which\nallows MariaDB to store TIMESTAMPs using the same low-level format MySQL 5.6\nuses.\n\nFor more information, see Internal Format.\n\nSupported Values\n----------------\n\nMariaDB stores values that use the TIMESTAMP data type as the number of\nseconds since \'1970-01-01 00:00:00\' (UTC). This means that the TIMESTAMP data\ntype can hold values between \'1970-01-01 00:00:01\' (UTC) and \'2038-01-19\n03:14:07\' (UTC).\n\nMariaDB can also store microseconds with a precision between 0 and 6. If no\nmicrosecond precision is specified, then 0 is used by default.\n\nAutomatic Values\n----------------\n\nMariaDB has special behavior for the first column that uses the TIMESTAMP data\ntype in a specific table. For the first column that uses the TIMESTAMP data\ntype in a specific table, MariaDB automatically assigns the following\nproperties to the column:\n\n* DEFAULT CURRENT_TIMESTAMP\n* ON UPDATE CURRENT_TIMESTAMP\n\nThis means that if the column is not explicitly assigned a value in an INSERT\nor UPDATE query, then MariaDB will automatically initialize the column\'s value\nwith the current date and time.\n\nThis automatic initialization for INSERT and UPDATE queries can also be\nexplicitly enabled for a column that uses the TIMESTAMP data type by\nspecifying the DEFAULT CURRENT_TIMESTAMP and ON UPDATE CURRENT_TIMESTAMP\nclauses for the column. In these clauses, any synonym of CURRENT_TIMESTAMP is\naccepted, including CURRENT_TIMESTAMP(), NOW(), LOCALTIME, LOCALTIME(),\nLOCALTIMESTAMP, and LOCALTIMESTAMP().\n\nThis automatic initialization for INSERT queries can also be explicitly\ndisabled for a column that uses the TIMESTAMP data type by specifying a\nconstant DEFAULT value. For example, DEFAULT 0.\n\nThis automatic initialization for UPDATE queries can also be explicitly\ndisabled for a column that uses the TIMESTAMP data type by specifying a\nDEFAULT clause for the column, but no ON UPDATE clause. If a DEFAULT clause is\nexplicitly specified for a column that uses the TIMESTAMP data type, but an ON\nUPDATE clause is not specified for the column, then the timestamp value will\nnot automatically change when an UPDATE statement is executed.\n\nMariaDB also has special behavior if NULL is assigned to column that uses the\nTIMESTAMP data type. If the column is assigned the NULL value in an INSERT or\nUPDATE query, then MariaDB will automatically initialize the column\'s value\nwith the current date and time. For details, see NULL values in MariaDB.\n\nThis automatic initialization for NULL values can also be explicitly disabled\nfor a column that uses the TIMESTAMP data type by specifying the NULL\nattribute for the column. In this case, if the column\'s value is set to NULL,\nthen the column\'s value will actually be set to NULL.\n\nTime Zones\n----------\n\nIf a column uses the TIMESTAMP data type, then any inserted values are\nconverted from the session\'s time zone to Coordinated Universal Time (UTC)\nwhen stored, and converted back to the session\'s time zone when retrieved.\n\nMariaDB does not currently store any time zone identifier with the value of\nthe TIMESTAMP data type. See MDEV-10018 for more information.\n\nMariaDB does not currently support time zone literals that contain time zone\nidentifiers. See MDEV-11829 for more information.\n\nLimitations\n-----------\n\n* Because the TIMESTAMP value is stored as Epoch Seconds, the timestamp value\n\'1970-01-01 00:00:00\' (UTC) is reserved since the second #0 is used to\nrepresent \'0000-00-00 00:00:00\'.\n* In MariaDB 5.5 and before there could only be one TIMESTAMP column per table\nthat had CURRENT_TIMESTAMP defined as its default value. This limit has no\nlonger applied since MariaDB 10.0.\n\nSQL_MODE=MAXDB\n--------------\n\nIf the SQL_MODE is set to MAXDB, TIMESTAMP fields will be silently converted\nto DATETIME.\n\nInternal Format\n---------------\n\nIn MariaDB 10.1.2 a new temporal format was introduced from MySQL 5.6 that\nalters how the TIME, DATETIME and TIMESTAMP columns operate at lower levels.\nThese changes allow these temporal data types to have fractional parts and\nnegative values. You can disable this feature using the\nmysql56_temporal_format system variable.\n\nTables that include TIMESTAMP values that were created on an older version of\nMariaDB or that were created while the mysql56_temporal_format system variable\nwas disabled continue to store data using the older data type format.\n\nIn order to update table columns from the older format to the newer format,\nexecute an ALTER TABLE... MODIFY COLUMN statement that changes the column to\nthe *same* data type. This change may be needed if you want to export the\ntable\'s tablespace and import it onto a server that has\nmysql56_temporal_format=ON set (see MDEV-15225).\n\nFor instance, if you have a TIMESTAMP column in your table:\n\nSHOW VARIABLES LIKE \'mysql56_temporal_format\';\n\n+-------------------------+-------+\n| Variable_name | Value |\n+-------------------------+-------+\n| mysql56_temporal_format | ON |\n+-------------------------+-------+\n\nALTER TABLE example_table MODIFY ts_col TIMESTAMP;\n\nWhen MariaDB executes the ALTER TABLE statement, it converts the data from the\nolder temporal format to the newer one.\n\nIn the event that you have several tables and columns using temporal data\ntypes that you want to switch over to the new format, make sure the system\nvariable is enabled, then perform a dump and restore using mysqldump. The\ncolumns using relevant temporal data types are restored using the new temporal\nformat.\n\nStarting from MariaDB 10.5.1 columns with old temporal formats are marked with\na /* mariadb-5.3 */ comment in the output of SHOW CREATE TABLE, SHOW COLUMNS,\nDESCRIBE statements, as well as in the COLUMN_TYPE column of the\nINFORMATION_SCHEMA.COLUMNS Table.\n\nSHOW CREATE TABLE mariadb5312_timestamp\\G\n*************************** 1. row ***************************\n Table: mariadb5312_timestamp\nCreate Table: CREATE TABLE `mariadb5312_timestamp` (\n `ts0` timestamp /* mariadb-5.3 */ NOT NULL DEFAULT current_timestamp() ON\nUPDATE current_timestamp(),\n `ts6` timestamp(6) /* mariadb-5.3 */ NOT NULL DEFAULT \'0000-00-00\n00:00:00.000000\'\n) ENGINE=MyISAM DEFAULT CHARSET=latin1\n\nNote: Prior to MySQL 4.1 a different format for the TIMESTAMP datatype was\nused. This format is unsupported in MariaDB 5.1 and upwards.\n\nExamples\n--------\n\nCREATE TABLE t (id INT, ts TIMESTAMP);\n\nDESC t;\n+-------+-----------+------+-----+-------------------+-------------------------\n---+\n| Field | Type | Null | Key | Default | Extra \n |\n+-------+-----------+------+-----+-------------------+-------------------------\n---+\n| id | int(11) | YES | | NULL | \n |\n| ts | timestamp | NO | | CURRENT_TIMESTAMP | on update\nCURRENT_TIMESTAMP |\n+-------+-----------+------+-----+-------------------+-------------------------\n---+\n\nINSERT INTO t(id) VALUES (1),(2);\n\nSELECT * FROM t;\n+------+---------------------+\n| id | ts |\n+------+---------------------+\n| 1 | 2013-07-22 12:50:05 |\n| 2 | 2013-07-22 12:50:05 |\n+------+---------------------+\n\nINSERT INTO t VALUES (3,NULL),(4,\'2001-07-22 12:12:12\');\n\nSELECT * FROM t;\n+------+---------------------+\n| id | ts |\n+------+---------------------+\n| 1 | 2013-07-22 12:50:05 |\n| 2 | 2013-07-22 12:50:05 |\n| 3 | 2013-07-22 12:51:56 |\n| 4 | 2001-07-22 12:12:12 |\n+------+---------------------+\n\nConverting to Unix epoch:\n\nSELECT ts, UNIX_TIMESTAMP(ts) FROM t;\n+---------------------+--------------------+\n| ts | UNIX_TIMESTAMP(ts) |\n+---------------------+--------------------+\n| 2013-07-22 12:50:05 | 1374490205 |\n| 2013-07-22 12:50:05 | 1374490205 |\n| 2013-07-22 12:51:56 | 1374490316 |\n| 2001-07-22 12:12:12 | 995796732 |\n+---------------------+--------------------+\n\nUpdate also changes the timestamp:\n\nUPDATE t set id=5 WHERE id=1;\n\nSELECT * FROM t;\n+------+---------------------+\n| id | ts |\n+------+---------------------+\n| 5 | 2013-07-22 14:52:33 |\n| 2 | 2013-07-22 12:50:05 |\n| 3 | 2013-07-22 12:51:56 |\n| 4 | 2001-07-22 12:12:12 |\n+------+---------------------+\n\nDefault NULL:\n\nCREATE TABLE t2 (id INT, ts TIMESTAMP NULL ON UPDATE CURRENT_TIMESTAMP);\n\nINSERT INTO t(id) VALUES (1),(2);\n\nSELECT * FROM t2;\n\nINSERT INTO t2(id) VALUES (1),(2);\n\nSELECT * FROM t2;\n+------+------+\n| id | ts |\n+------+------+\n| 1 | NULL |\n| 2 | NULL |\n+------+------+\n\nUPDATE t2 SET id=3 WHERE id=1;\n\nSELECT * FROM t2;\n+------+---------------------+\n| id | ts |\n+------+---------------------+\n| 3 | 2013-07-22 15:32:22 |\n| 2 | NULL |\n+------+---------------------+\n\nOnly the first timestamp is automatically inserted and updated:\n\nCREATE TABLE t3 (id INT, ts1 TIMESTAMP, ts2 TIMESTAMP);\n\nINSERT INTO t3(id) VALUES (1),(2);\n\nSELECT * FROM t3;\n+------+---------------------+---------------------+\n| id | ts1 | ts2 |\n+------+---------------------+---------------------+\n| 1 | 2013-07-22 15:35:07 | 0000-00-00 00:00:00 |\n| 2 | 2013-07-22 15:35:07 | 0000-00-00 00:00:00 |\n+------+---------------------+---------------------+\n\nDESC t3;\n+-------+-----------+------+-----+---------------------+-----------------------\n-----+\n| Field | Type | Null | Key | Default | Extra \n |\n+-------+-----------+------+-----+---------------------+-----------------------\n-----+\n| id | int(11) | YES | | NULL | \n |\n| ts1 | timestamp | NO | | CURRENT_TIMESTAMP | on update\nCURRENT_TIMESTAMP |\n| ts2 | timestamp | NO | | 0000-00-00 00:00:00 | \n |\n+-------+-----------+------+-----+---------------------+-----------------------\n-----+\n\nExplicitly setting a timestamp with the CURRENT_TIMESTAMP function:\n\nINSERT INTO t3(id,ts2) VALUES (3,CURRENT_TIMESTAMP());\n\nSELECT * FROM t3;\n+------+---------------------+---------------------+\n| id | ts1 | ts2 |\n+------+---------------------+---------------------+\n| 1 | 2013-07-22 15:35:07 | 0000-00-00 00:00:00 |\n| 2 | 2013-07-22 15:35:07 | 0000-00-00 00:00:00 |\n| 3 | 2013-07-22 15:38:52 | 2013-07-22 15:38:52 |\n+------+---------------------+---------------------+\n\nSpecifying the timestamp as NOT NULL:\n\nCREATE TABLE t4 (id INT, ts TIMESTAMP NOT NULL);\n\nINSERT INTO t4(id) VALUES (1);\nSELECT SLEEP(1);\nINSERT INTO t4(id,ts) VALUES (2,NULL);\n\nSELECT * FROM t4;\n\nURL: https://mariadb.com/kb/en/timestamp/','','https://mariadb.com/kb/en/timestamp/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (293,23,'YEAR Data Type','Syntax\n------\n\nYEAR[(4)]\n\nDescription\n-----------\n\nA year in two-digit or four-digit format. The default is four-digit format.\nNote that the two-digit format has been deprecated since MariaDB 5.5.27.\n\nIn four-digit format, the allowable values are 1901 to 2155, and 0000. In\ntwo-digit format, the allowable values are 70 to 69, representing years from\n1970 to 2069. MariaDB displays YEAR values in YYYY format, but allows you to\nassign values to YEAR columns using either strings or numbers.\n\nInserting numeric zero has a different result for YEAR(4) and YEAR(2). For\nYEAR(2), the value 00 reflects the year 2000. For YEAR(4), the value 0000\nreflects the year zero. This only applies to numeric zero. String zero always\nreflects the year 2000.\n\nExamples\n--------\n\nAccepting a string or a number:\n\nCREATE TABLE y(y YEAR);\n\nINSERT INTO y VALUES (1990),(\'2012\');\n\nSELECT * FROM y;\n+------+\n| y |\n+------+\n| 1990 |\n| 2012 |\n+------+\n\nWith strict_mode set, the default from MariaDB 10.2.4:\n\nOut of range:\n\nINSERT INTO y VALUES (1005),(\'3080\');\nERROR 1264 (22003): Out of range value for column \'y\' at row 1\n\nINSERT INTO y VALUES (\'2013-12-12\');\nERROR 1265 (01000): Data truncated for column \'y\' at row 1\n\nSELECT * FROM y;\n+------+\n| y |\n+------+\n| 1990 |\n| 2012 |\n+------+\n\nWith strict_mode unset, the default until MariaDB 10.2.3:\n\nOut of range:\n\nINSERT INTO y VALUES (1005),(\'3080\');\nQuery OK, 2 rows affected, 2 warnings (0.05 sec)\nRecords: 2 Duplicates: 0 Warnings: 2\n\nSHOW WARNINGS;\n+---------+------+--------------------------------------------+\n| Level | Code | Message |\n+---------+------+--------------------------------------------+\n| Warning | 1264 | Out of range value for column \'y\' at row 1 |\n| Warning | 1264 | Out of range value for column \'y\' at row 2 |\n+---------+------+--------------------------------------------+\n\nSELECT * FROM y;\n+------+\n| y |\n+------+\n| 1990 |\n| 2012 |\n| 0000 |\n| 0000 |\n+------+\n\nTruncating:\n\nINSERT INTO y VALUES (\'2013-12-12\');\nQuery OK, 1 row affected, 1 warning (0.05 sec)\n\nSHOW WARNINGS;\n+---------+------+----------------------------------------+\n| Level | Code | Message |\n+---------+------+----------------------------------------+\n| Warning | 1265 | Data truncated for column \'y\' at row 1 |\n+---------+------+----------------------------------------+\n\nSELECT * FROM y;\n+------+\n| y |\n+------+\n| 1990 |\n| 2012 |\n| 0000 |\n| 0000 |\n| 2013 |\n+------+\n\nDifference between YEAR(2) and YEAR(4), and string and numeric zero:\n\nCREATE TABLE y2(y YEAR(4), y2 YEAR(2));\nQuery OK, 0 rows affected, 1 warning (0.40 sec)\n\nNote (Code 1287): \'YEAR(2)\' is deprecated and will be removed in a future\nrelease. \n Please use YEAR(4) instead\n\nINSERT INTO y2 VALUES(0,0),(\'0\',\'0\');\n\nSELECT YEAR(y),YEAR(y2) FROM y2;\n+---------+----------+\n| YEAR(y) | YEAR(y2) |\n+---------+----------+\n| 0 | 2000 |\n| 2000 | 2000 |\n+---------+----------+\n\nURL: https://mariadb.com/kb/en/year-data-type/','','https://mariadb.com/kb/en/year-data-type/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (294,23,'AUTO_INCREMENT','Description\n-----------\n\nThe AUTO_INCREMENT attribute can be used to generate a unique identity for new\nrows. When you insert a new record to the table (or upon adding an\nAUTO_INCREMENT attribute with the ALTER TABLE statement), and the\nauto_increment field is NULL or DEFAULT (in the case of an INSERT), the value\nwill automatically be incremented. This also applies to 0, unless the\nNO_AUTO_VALUE_ON_ZERO SQL_MODE is enabled.\n\nAUTO_INCREMENT columns start from 1 by default. The automatically generated\nvalue can never be lower than 0.\n\nEach table can have only one AUTO_INCREMENT column. It must defined as a key\n(not necessarily the PRIMARY KEY or UNIQUE key). In some storage engines\n(including the default InnoDB), if the key consists of multiple columns, the\nAUTO_INCREMENT column must be the first column. Storage engines that permit\nthe column to be placed elsewhere are Aria, MyISAM, MERGE, Spider, TokuDB,\nBLACKHOLE, FederatedX and Federated.\n\nCREATE TABLE animals (\n id MEDIUMINT NOT NULL AUTO_INCREMENT,\n name CHAR(30) NOT NULL,\n PRIMARY KEY (id)\n );\n\nINSERT INTO animals (name) VALUES\n (\'dog\'),(\'cat\'),(\'penguin\'),\n (\'fox\'),(\'whale\'),(\'ostrich\');\n\nSELECT * FROM animals;\n+----+---------+\n| id | name |\n+----+---------+\n| 1 | dog |\n| 2 | cat |\n| 3 | penguin |\n| 4 | fox |\n| 5 | whale |\n| 6 | ostrich |\n+----+---------+\n\nSERIAL is an alias for BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE.\n\nCREATE TABLE t (id SERIAL, c CHAR(1)) ENGINE=InnoDB;\n\nSHOW CREATE TABLE t \\G\n*************************** 1. row ***************************\n Table: t\nCreate Table: CREATE TABLE `t` (\n `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,\n `c` char(1) DEFAULT NULL,\n UNIQUE KEY `id` (`id`)\n) ENGINE=InnoDB DEFAULT CHARSET=latin1\n\nSetting or Changing the Auto_Increment Value\n--------------------------------------------\n\nYou can use an ALTER TABLE statement to assign a new value to the\nauto_increment table option, or set the insert_id server system variable to\nchange the next AUTO_INCREMENT value inserted by the current session.\n\nLAST_INSERT_ID() can be used to see the last AUTO_INCREMENT value inserted by\nthe current session.\n\nALTER TABLE animals AUTO_INCREMENT=8;\n\nINSERT INTO animals (name) VALUES (\'aardvark\');\n\nSELECT * FROM animals;\n+----+-----------+\n| id | name |\n+----+-----------+\n| 1 | dog |\n| 2 | cat |\n| 3 | penguin |\n| 4 | fox |\n| 5 | whale |\n| 6 | ostrich |\n| 8 | aardvark |\n+----+-----------+\n\nSET insert_id=12;\n\nINSERT INTO animals (name) VALUES (\'gorilla\');\n\nSELECT * FROM animals;\n+----+-----------+\n| id | name |\n+----+-----------+\n| 1 | dog |\n| 2 | cat |\n| 3 | penguin |\n| 4 | fox |\n| 5 | whale |\n| 6 | ostrich |\n| 8 | aardvark |\n| 12 | gorilla |\n+----+-----------+\n\nInnoDB\n------\n\nUntil MariaDB 10.2.3, InnoDB used an auto-increment counter that is stored in\nmemory. When the server restarts, the counter is re-initialized to the highest\nvalue used in the table, which cancels the effects of any AUTO_INCREMENT = N\noption in the table statements.\n\nFrom MariaDB 10.2.4, this restriction has been lifted and AUTO_INCREMENT is\npersistent.\n\nSee also AUTO_INCREMENT Handling in InnoDB.\n\nSetting Explicit Values\n-----------------------\n\nIt is possible to specify a value for an AUTO_INCREMENT column. If the key is\nprimary or unique, the value must not already exist in the key.\n\nIf the new value is higher than the current maximum value, the AUTO_INCREMENT\nvalue is updated, so the next value will be higher. If the new value is lower\nthan the current maximum value, the AUTO_INCREMENT value remains unchanged.\n\nThe following example demonstrates these behaviors:\n\nCREATE TABLE t (id INTEGER UNSIGNED AUTO_INCREMENT PRIMARY KEY) ENGINE =\nInnoDB;\n\nINSERT INTO t VALUES (NULL);\nSELECT id FROM t;\n+----+\n| id |\n+----+\n| 1 |\n+----+\n\nINSERT INTO t VALUES (10); -- higher value\nSELECT id FROM t;\n+----+\n| id |\n+----+\n| 1 |\n| 10 |\n+----+\n\nINSERT INTO t VALUES (2); -- lower value\nINSERT INTO t VALUES (NULL); -- auto value\nSELECT id FROM t;\n+----+\n| id |\n+----+\n| 1 |\n| 2 |\n| 10 |\n| 11 |\n+----+\n\nThe ARCHIVE storage engine does not allow to insert a value that is lower than\nthe current maximum.\n\nMissing Values\n--------------\n\nAn AUTO_INCREMENT column normally has missing values. This happens because if\na row is deleted, or an AUTO_INCREMENT value is explicitly updated, old values\nare never re-used. The REPLACE statement also deletes a row, and its value is\nwasted. With InnoDB, values can be reserved by a transaction; but if the\ntransaction fails (for example, because of a ROLLBACK) the reserved value will\nbe lost.\n\nThus AUTO_INCREMENT values can be used to sort results in a chronological\norder, but not to create a numeric sequence.\n\nReplication\n-----------\n\nTo make master-master or Galera safe to use AUTO_INCREMENT one should use the\nsystem variables auto_increment_increment and auto_increment_offset to\ngenerate unique values for each server.\n\nCHECK Constraints, DEFAULT Values and Virtual Columns\n-----------------------------------------------------\n\nMariaDB starting with 10.2.6\n----------------------------\nFrom MariaDB 10.2.6 auto_increment columns are no longer permitted in CHECK\nconstraints, DEFAULT value expressions and virtual columns. They were\npermitted in earlier versions, but did not work correctly. See MDEV-11117.\n\nGenerating Auto_Increment Values When Adding the Attribute\n----------------------------------------------------------\n\nCREATE OR REPLACE TABLE t1 (a INT);\nINSERT t1 VALUES (0),(0),(0);\nALTER TABLE t1 MODIFY a INT NOT NULL AUTO_INCREMENT PRIMARY KEY;\nSELECT * FROM t1;\n+---+\n| a |\n+---+\n| 1 |\n| 2 |\n| 3 |\n+---+\n\nCREATE OR REPLACE TABLE t1 (a INT);\nINSERT t1 VALUES (5),(0),(8),(0);\nALTER TABLE t1 MODIFY a INT NOT NULL AUTO_INCREMENT PRIMARY KEY;\nSELECT * FROM t1;\n+---+\n| a |\n+---+\n| 5 |\n| 6 |\n| 8 |\n| 9 |\n+---+\n\nIf the NO_AUTO_VALUE_ON_ZERO SQL_MODE is set, zero values will not be\nautomatically incremented:\n\nSET SQL_MODE=\'no_auto_value_on_zero\';\nCREATE OR REPLACE TABLE t1 (a INT);\nINSERT t1 VALUES (3), (0);\nALTER TABLE t1 MODIFY a INT NOT NULL AUTO_INCREMENT PRIMARY KEY;\nSELECT * FROM t1;\n+---+\n| a |\n+---+\n| 0 |\n| 3 |\n+---+\n\nURL: https://mariadb.com/kb/en/auto_increment/','','https://mariadb.com/kb/en/auto_increment/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (295,24,'Using Compound Statements Outside of Stored Programs','Compound statements can also be used outside of stored programs.\n\ndelimiter |\nIF @have_innodb THEN\n CREATE TABLE IF NOT EXISTS innodb_index_stats (\n database_name VARCHAR(64) NOT NULL,\n table_name VARCHAR(64) NOT NULL,\n index_name VARCHAR(64) NOT NULL,\n last_update TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE\nCURRENT_TIMESTAMP,\n stat_name VARCHAR(64) NOT NULL,\n stat_value BIGINT UNSIGNED NOT NULL,\n sample_size BIGINT UNSIGNED,\n stat_description VARCHAR(1024) NOT NULL,\n PRIMARY KEY (database_name, table_name, index_name, stat_name)\n ) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_bin STATS_PERSISTENT=0;\nEND IF|\nQuery OK, 0 rows affected, 2 warnings (0.00 sec)\n\nNote, that using compound statements this way is subject to following\nlimitations:\n\n* Only BEGIN, IF, CASE, LOOP, WHILE, REPEAT statements may start a compound\nstatement outside of stored programs.\n* BEGIN must use the BEGIN NOT ATOMIC syntax (otherwise it\'ll be confused with\nBEGIN that starts a transaction).\n* A compound statement might not start with a label.\n* A compound statement is parsed completely—note \"2 warnings\" in the above\nexample, even if the condition was false (InnoDB was, indeed, disabled), and\nthe CREATE TABLE statement was not executed, it was still parsed and the\nparser produced \"Unknown storage engine\" warning.\n\nInside a compound block first three limitations do not apply, one can use\nanything that can be used inside a stored program — including labels,\ncondition handlers, variables, and so on:\n\nBEGIN NOT ATOMIC\n DECLARE foo CONDITION FOR 1146;\n DECLARE x INT DEFAULT 0;\n DECLARE CONTINUE HANDLER FOR SET x=1;\n INSERT INTO test.t1 VALUES (\"hndlr1\", val, 2);\n END|\n\nExample how to use IF:\n\nIF (1>0) THEN BEGIN NOT ATOMIC SELECT 1; END ; END IF;;\n\nExample of how to use WHILE loop:\n\nDELIMITER |\nBEGIN NOT ATOMIC\n DECLARE x INT DEFAULT 0;\n WHILE x <= 10 DO\n SET x = x + 1;\n SELECT x;\n END WHILE;\nEND|\nDELIMITER ;\n\nURL:\nhttps://mariadb.com/kb/en/using-compound-statements-outside-of-stored-programs/','','https://mariadb.com/kb/en/using-compound-statements-outside-of-stored-programs/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (296,24,'BEGIN END','Syntax\n------\n\n[begin_label:] BEGIN [NOT ATOMIC]\n [statement_list]\nEND [end_label]\n\nNOT ATOMIC is required when used outside of a stored procedure. Inside stored\nprocedures or within an anonymous block, BEGIN alone starts a new anonymous\nblock.\n\nDescription\n-----------\n\nBEGIN ... END syntax is used for writing compound statements. A compound\nstatement can contain multiple statements, enclosed by the BEGIN and END\nkeywords. statement_list represents a list of one or more statements, each\nterminated by a semicolon (i.e., ;) statement delimiter. statement_list is\noptional, which means that the empty compound statement (BEGIN END) is legal.\n\nNote that END will perform a commit. If you are running in autocommit mode,\nevery statement will be committed separately. If you are not running in\nautocommit mode, you must execute a COMMIT or ROLLBACK after END to get the\ndatabase up to date.\n\nUse of multiple statements requires that a client is able to send statement\nstrings containing the ; statement delimiter. This is handled in the mysql\ncommand-line client with the DELIMITER command. Changing the ;\nend-of-statement delimiter (for example, to //) allows ; to be used in a\nprogram body.\n\nA compound statement within a stored program can be labeled. end_label cannot\nbe given unless begin_label also is present. If both are present, they must be\nthe same.\n\nBEGIN ... END constructs can be nested. Each block can define its own\nvariables, a CONDITION, a HANDLER and a CURSOR, which don\'t exist in the outer\nblocks. The most local declarations override the outer objects which use the\nsame name (see example below).\n\nThe declarations order is the following:\n\n* DECLARE local variables;\n* DECLARE CONDITIONs;\n* DECLARE CURSORs;\n* DECLARE HANDLERs;\n\nNote that DECLARE HANDLER contains another BEGIN ... END construct.\n\nHere is an example of a very simple, anonymous block:\n\nBEGIN NOT ATOMIC\nSET @a=1;\nCREATE TABLE test.t1(a INT);\nEND|\n\nBelow is an example of nested blocks in a stored procedure:\n\nCREATE PROCEDURE t( )\nBEGIN\n DECLARE x TINYINT UNSIGNED DEFAULT 1;\n BEGIN\n DECLARE x CHAR(2) DEFAULT \'02\';\n DECLARE y TINYINT UNSIGNED DEFAULT 10;\n SELECT x, y;\n END;\n SELECT x;\nEND;\n\nIn this example, a TINYINT variable, x is declared in the outter block. But in\nthe inner block x is re-declared as a CHAR and an y variable is declared. The\ninner SELECT shows the \"new\" value of x, and the value of y. But when x is\nselected in the outer block, the \"old\" value is returned. The final SELECT\ndoesn\'t try to read y, because it doesn\'t exist in that context.\n\nURL: https://mariadb.com/kb/en/begin-end/','','https://mariadb.com/kb/en/begin-end/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (297,24,'CASE Statement','Syntax\n------\n\nCASE case_value\n WHEN when_value THEN statement_list\n [WHEN when_value THEN statement_list] ...\n [ELSE statement_list]\nEND CASE\n\nOr:\n\nCASE\n WHEN search_condition THEN statement_list\n [WHEN search_condition THEN statement_list] ...\n [ELSE statement_list]\nEND CASE\n\nDescription\n-----------\n\nThe text on this page describes the CASE statement for stored programs. See\nthe CASE OPERATOR for details on the CASE operator outside of stored programs.\n\nThe CASE statement for stored programs implements a complex conditional\nconstruct. If a search_condition evaluates to true, the corresponding SQL\nstatement list is executed. If no search condition matches, the statement list\nin the ELSE clause is executed. Each statement_list consists of one or more\nstatements.\n\nThe CASE statement cannot have an ELSE NULL clause, and it is terminated with\nEND CASE instead of END. implements a complex conditional construct. If a\nsearch_condition evaluates to true, the corresponding SQL statement list is\nexecuted. If no search condition matches, the statement list in the ELSE\nclause is executed. Each statement_list consists of one or more statements.\n\nIf no when_value or search_condition matches the value tested and the CASE\nstatement contains no ELSE clause, a Case not found for CASE statement error\nresults.\n\nEach statement_list consists of one or more statements; an empty\nstatement_list is not allowed. To handle situations where no value is matched\nby any WHEN clause, use an ELSE containing an empty BEGIN ... END block, as\nshown in this example:\n\nDELIMITER |\nCREATE PROCEDURE p()\nBEGIN\n DECLARE v INT DEFAULT 1;\n CASE v\n WHEN 2 THEN SELECT v;\n WHEN 3 THEN SELECT 0;\n ELSE BEGIN END;\n END CASE;\nEND;\n|\n\nThe indentation used here in the ELSE clause is for purposes of clarity only,\nand is not otherwise significant. See Delimiters in the mysql client for more\non the use of the delimiter command.\n\nNote: The syntax of the CASE statement used inside stored programs differs\nslightly from that of the SQL CASE expression described in CASE OPERATOR. The\nCASE statement cannot have an ELSE NULL clause, and it is terminated with END\nCASE instead of END.\n\nURL: https://mariadb.com/kb/en/case-statement/','','https://mariadb.com/kb/en/case-statement/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (298,24,'DECLARE CONDITION','Syntax\n------\n\nDECLARE condition_name CONDITION FOR condition_value\n\ncondition_value:\n SQLSTATE [VALUE] sqlstate_value\n | mysql_error_code\n\nDescription\n-----------\n\nThe DECLARE ... CONDITION statement defines a named error condition. It\nspecifies a condition that needs specific handling and associates a name with\nthat condition. Later, the name can be used in a DECLARE ... HANDLER, SIGNAL\nor RESIGNAL statement (as long as the statement is located in the same BEGIN\n... END block).\n\nConditions must be declared after local variables, but before CURSORs and\nHANDLERs.\n\nA condition_value for DECLARE ... CONDITION can be an SQLSTATE value (a\n5-character string literal) or a MySQL error code (a number). You should not\nuse SQLSTATE value \'00000\' or MySQL error code 0, because those indicate\nsucess rather than an error condition. If you try, or if you specify an\ninvalid SQLSTATE value, an error like this is produced:\n\nERROR 1407 (42000): Bad SQLSTATE: \'00000\'\n\nFor a list of SQLSTATE values and MariaDB error codes, see MariaDB Error Codes.\n\nURL: https://mariadb.com/kb/en/declare-condition/','','https://mariadb.com/kb/en/declare-condition/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (299,24,'DECLARE HANDLER','Syntax\n------\n\nDECLARE handler_type HANDLER\n FOR condition_value [, condition_value] ...\n statement\n\nhandler_type:\n CONTINUE\n | EXIT\n | UNDO\n\ncondition_value:\n SQLSTATE [VALUE] sqlstate_value\n | condition_name\n | SQLWARNING\n | NOT FOUND\n | SQLEXCEPTION\n | mariadb_error_code\n\nDescription\n-----------\n\nThe DECLARE ... HANDLER statement specifies handlers that each may deal with\none or more conditions. If one of these conditions occurs, the specified\nstatement is executed. statement can be a simple statement (for example, SET\nvar_name = value), or it can be a compound statement written using BEGIN and\nEND.\n\nHandlers must be declared after local variables, a CONDITION and a CURSOR.\n\nFor a CONTINUE handler, execution of the current program continues after\nexecution of the handler statement. For an EXIT handler, execution terminates\nfor the BEGIN ... END compound statement in which the handler is declared.\n(This is true even if the condition occurs in an inner block.) The UNDO\nhandler type statement is not supported.\n\nIf a condition occurs for which no handler has been declared, the default\naction is EXIT.\n\nA condition_value for DECLARE ... HANDLER can be any of the following values:\n\n* An SQLSTATE value (a 5-character string literal) or a MariaDB error\ncode (a number). You should not use SQLSTATE value \'00000\' or MariaDB\nerror code 0, because those indicate sucess rather than an error\ncondition. For a list of SQLSTATE values and MariaDB error codes, see\nMariaDB Error Codes.\n* A condition name previously specified with DECLARE ... CONDITION. It must be\nin the same stored program. See DECLARE CONDITION.\n* SQLWARNING is shorthand for the class of SQLSTATE values that begin\nwith \'01\'.\n* NOT FOUND is shorthand for the class of SQLSTATE values that begin\nwith \'02\'. This is relevant only the context of cursors and is used to\ncontrol what happens when a cursor reaches the end of a data set. If\nno more rows are available, a No Data condition occurs with SQLSTATE\nvalue 02000. To detect this condition, you can set up a handler for it\n(or for a NOT FOUND condition). An example is shown in Cursor Overview. This\ncondition also occurs for SELECT ... INTO var_list statements that retrieve no\nrows.\n* SQLEXCEPTION is shorthand for the class of SQLSTATE values that do\nnot begin with \'00\', \'01\', or \'02\'.\n\nWhen an error raises, in some cases it could be handled by multiple HANDLERs.\nFor example, there may be an handler for 1050 error, a separate handler for\nthe 42S01 SQLSTATE, and another separate handler for the SQLEXCEPTION class:\nin theory all occurrences of HANDLER may catch the 1050 error, but MariaDB\nchooses the HANDLER with the highest precedence. Here are the precedence rules:\n\n* Handlers which refer to an error code have the highest precedence.\n* Handlers which refer to a SQLSTATE come next.\n* Handlers which refer to an error class have the lowest precedence.\n\nIn some cases, a statement could produce multiple errors. If this happens, in\nsome cases multiple handlers could have the highest precedence. In such cases,\nthe choice of the handler is indeterminate.\n\nNote that if an error occurs within a CONTINUE HANDLER block, it can be\nhandled by another HANDLER. However, a HANDLER which is already in the stack\n(that is, it has been called to handle an error and its execution didn\'t\nfinish yet) cannot handle new errors—this prevents endless loops. For example,\nsuppose that a stored procedure contains a CONTINUE HANDLER for SQLWARNING and\nanother CONTINUE HANDLER for NOT FOUND. At some point, a NOT FOUND error\noccurs, and the execution enters the NOT FOUND HANDLER. But within that\nhandler, a warning occurs, and the execution enters the SQLWARNING HANDLER. If\nanother NOT FOUND error occurs, it cannot be handled again by the NOT FOUND\nHANDLER, because its execution is not finished.\n\nWhen a DECLARE HANDLER block can handle more than one error condition, it may\nbe useful to know which errors occurred. To do so, you can use the GET\nDIAGNOSTICS statement.\n\nAn error that is handled by a DECLARE HANDLER construct can be issued again\nusing the RESIGNAL statement.\n\nBelow is an example using DECLARE HANDLER:\n\nCREATE TABLE test.t (s1 INT, PRIMARY KEY (s1));\n\nDELIMITER //\n\nCREATE PROCEDURE handlerdemo ( )\n BEGIN\n DECLARE CONTINUE HANDLER FOR SQLSTATE \'23000\' SET @x2 = 1;\n SET @x = 1;\n INSERT INTO test.t VALUES (1);\n SET @x = 2;\n INSERT INTO test.t VALUES (1);\n SET @x = 3;\n END;\n //\n\nDELIMITER ;\n\nCALL handlerdemo( );\n\nSELECT @x;\n+------+\n| @x |\n+------+\n| 3 |\n+------+\n\nURL: https://mariadb.com/kb/en/declare-handler/','','https://mariadb.com/kb/en/declare-handler/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (300,24,'DECLARE Variable','Syntax\n------\n\nDECLARE var_name [, var_name] ... [[ROW] TYPE OF]] type [DEFAULT value]\n\nDescription\n-----------\n\nThis statement is used to declare local variables within stored programs. To\nprovide a default value for the variable, include a DEFAULT clause. The value\ncan be specified as an expression (even subqueries are permitted); it need not\nbe a constant. If the DEFAULT clause is missing, the initial value is NULL.\n\nLocal variables are treated like stored routine parameters with respect to\ndata type and overflow checking. See CREATE PROCEDURE.\n\nLocal variables must be declared before CONDITIONs, CURSORs and HANDLERs.\n\nLocal variable names are not case sensitive.\n\nThe scope of a local variable is within the BEGIN ... END block where it is\ndeclared. The variable can be referred to in blocks nested within the\ndeclaring block, except those blocks that declare a variable with the same\nname.\n\nTYPE OF / ROW TYPE OF\n---------------------\n\nMariaDB starting with 10.3\n--------------------------\nTYPE OF and ROW TYPE OF anchored data types for stored routines were\nintroduced in MariaDB 10.3.\n\nAnchored data types allow a data type to be defined based on another object,\nsuch as a table row, rather than specifically set in the declaration. If the\nanchor object changes, so will the anchored data type. This can lead to\nroutines being easier to maintain, so that if the data type in the table is\nchanged, it will automatically be changed in the routine as well.\n\nVariables declared with ROW TYPE OF will have the same features as implicit\nROW variables. It is not possible to use ROW TYPE OF variables in a LIMIT\nclause.\n\nThe real data type of TYPE OF and ROW TYPE OF table_name will become known at\nthe very beginning of the stored routine call. ALTER TABLE or DROP TABLE\nstatements performed inside the current routine on the tables that appear in\nanchors won\'t affect the data type of the anchored variables, even if the\nvariable is declared after an ALTER TABLE or DROP TABLE statement.\n\nThe real data type of a ROW TYPE OF cursor_name variable will become known\nwhen execution enters into the block where the variable is declared. Data type\ninstantiation will happen only once. In a cursor ROW TYPE OF variable that is\ndeclared inside a loop, its data type will become known on the very first\niteration and won\'t change on further loop iterations.\n\nThe tables referenced in TYPE OF and ROW TYPE OF declarations will be checked\nfor existence at the beginning of the stored routine call. CREATE PROCEDURE or\nCREATE FUNCTION will not check the referenced tables for existence.\n\nExamples\n--------\n\nTYPE OF and ROW TYPE OF from MariaDB 10.3:\n\nDECLARE tmp TYPE OF t1.a; -- Get the data type from the column {{a}} in the\ntable {{t1}}\n\nDECLARE rec1 ROW TYPE OF t1; -- Get the row data type from the table {{t1}}\n\nDECLARE rec2 ROW TYPE OF cur1; -- Get the row data type from the cursor\n{{cur1}}\n\nURL: https://mariadb.com/kb/en/declare-variable/','','https://mariadb.com/kb/en/declare-variable/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (301,24,'FOR','MariaDB starting with 10.3\n--------------------------\nFOR loops were introduced in MariaDB 10.3.\n\nSyntax\n------\n\nInteger range FOR loop:\n\n[begin_label:]\nFOR var_name IN [ REVERSE ] lower_bound .. upper_bound\nDO statement_list\nEND FOR [ end_label ]\n\nExplicit cursor FOR loop\n\n[begin_label:]\nFOR record_name IN cursor_name [ ( cursor_actual_parameter_list)]\nDO statement_list\nEND FOR [ end_label ]\n\nExplicit cursor FOR loop (Oracle mode)\n\n[begin_label:]\nFOR record_name IN cursor_name [ ( cursor_actual_parameter_list)]\nLOOP\n statement_list\nEND LOOP [ end_label ]\n\nImplicit cursor FOR loop\n\n[begin_label:]\nFOR record_name IN ( select_statement )\nDO statement_list\nEND FOR [ end_label ]\n\nDescription\n-----------\n\nFOR loops allow code to be executed a fixed number of times.\n\nIn an integer range FOR loop, MariaDB will compare the lower bound and upper\nbound values, and assign the lower bound value to a counter. If REVERSE is not\nspecified, and the upper bound value is greater than or equal to the counter,\nthe counter will be incremented and the statement will continue, after which\nthe loop is entered again. If the upper bound value is greater than the\ncounter, the loop will be exited.\n\nIf REVERSE is specified, the counter is decremented, and the upper bound value\nneeds to be less than or equal for the loop to continue.\n\nExamples\n--------\n\nIntger range FOR loop:\n\nCREATE TABLE t1 (a INT);\n\nDELIMITER //\n\nFOR i IN 1..3\nDO\n INSERT INTO t1 VALUES (i);\nEND FOR;\n//\n\nDELIMITER ;\n\nSELECT * FROM t1;\n+------+\n| a |\n+------+\n| 1 |\n| 2 |\n| 3 |\n+------+\n\nREVERSE integer range FOR loop:\n\nCREATE OR REPLACE TABLE t1 (a INT);\n\nDELIMITER //\nFOR i IN REVERSE 4..12\n DO\n INSERT INTO t1 VALUES (i);\nEND FOR;\n//\nQuery OK, 9 rows affected (0.422 sec)\n\nDELIMITER ;\n\nSELECT * FROM t1;\n+------+\n| a |\n+------+\n| 12 |\n| 11 |\n| 10 |\n| 9 |\n| 8 |\n| 7 |\n| 6 |\n| 5 |\n| 4 |\n+------+\n\nExplicit cursor in Oracle mode:\n\nSET sql_mode=ORACLE;\n\nCREATE OR REPLACE TABLE t1 (a INT, b VARCHAR(32));\n\nINSERT INTO t1 VALUES (10,\'b0\');\nINSERT INTO t1 VALUES (11,\'b1\');\nINSERT INTO t1 VALUES (12,\'b2\');\n\nDELIMITER //\n\nCREATE OR REPLACE PROCEDURE p1(pa INT) AS \n CURSOR cur(va INT) IS\n SELECT a, b FROM t1 WHERE a=va;\nBEGIN\n FOR rec IN cur(pa)\n LOOP\n SELECT rec.a, rec.b;\n END LOOP;\nEND;\n//\n\nDELIMITER ;\n\nCALL p1(10);\n+-------+-------+\n| rec.a | rec.b |\n+-------+-------+\n| 10 | b0 |\n+-------+-------+\n\nCALL p1(11);\n+-------+-------+\n| rec.a | rec.b |\n+-------+-------+\n| 11 | b1 |\n+-------+-------+\n\nCALL p1(12);\n+-------+-------+\n| rec.a | rec.b |\n+-------+-------+\n| 12 | b2 |\n+-------+-------+\n\nCALL p1(13);\nQuery OK, 0 rows affected (0.000 sec)\n\nURL: https://mariadb.com/kb/en/for/','','https://mariadb.com/kb/en/for/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (302,24,'GOTO','MariaDB starting with 10.3\n--------------------------\nThe GOTO statement was introduced in MariaDB 10.3 for Oracle compatibility.\n\nSyntax\n------\n\nGOTO label\n\nDescription\n-----------\n\nThe GOTO statement causes the code to jump to the specified label, and\ncontinue operating from there. It is only accepted when in Oracle mode.\n\nExample\n-------\n\nSET sql_mode=ORACLE;\n\nDELIMITER //\n\nCREATE OR REPLACE PROCEDURE p1 AS\n\nBEGIN\n\nSELECT 1;\n GOTO label;\n SELECT 2;\n <<label>>\n SELECT 3;\n\nEND;\n\n//\n\nDELIMITER\n\ncall p1();\n+---+\n| 1 |\n+---+\n| 1 |\n+---+\n1 row in set (0.000 sec)\n\n+---+\n| 3 |\n+---+\n| 3 |\n+---+\n1 row in set (0.000 sec)\n\nURL: https://mariadb.com/kb/en/goto/','','https://mariadb.com/kb/en/goto/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (303,24,'IF','Syntax\n------\n\nIF search_condition THEN statement_list\n [ELSEIF search_condition THEN statement_list] ...\n [ELSE statement_list]\nEND IF;\n\nDescription\n-----------\n\nIF implements a basic conditional construct. If the search_condition evaluates\nto true, the corresponding SQL statement list is executed. If no\nsearch_condition matches, the statement list in the ELSE clause is executed.\nEach statement_list consists of one or more statements.\n\nURL: https://mariadb.com/kb/en/if/','','https://mariadb.com/kb/en/if/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (304,24,'ITERATE','Syntax\n------\n\nITERATE label\n\nITERATE can appear only within LOOP, REPEAT, and WHILE statements. ITERATE\nmeans \"do the loop again\", and uses the statement\'s label to determine which\nstatements to repeat. The label must be in the same stored program, not in a\ncaller procedure.\n\nIf you try to use ITERATE with a non-existing label, or if the label is\nassociated to a construct which is not a loop, the following error will be\nproduced:\n\nERROR 1308 (42000): ITERATE with no matching label: <label_name>\n\nBelow is an example of how ITERATE might be used:\n\nCREATE PROCEDURE doiterate(p1 INT)\nBEGIN\n label1: LOOP\n SET p1 = p1 + 1;\n IF p1 < 10 THEN ITERATE label1; END IF;\n LEAVE label1;\n END LOOP label1;\n SET @x = p1;\nEND\n\nURL: https://mariadb.com/kb/en/iterate/','','https://mariadb.com/kb/en/iterate/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (305,24,'Labels','Syntax\n------\n\nlabel: <construct>\n[label]\n\nLabels are MariaDB identifiers which can be used to identify a BEGIN ... END\nconstruct or a loop. They have a maximum length of 16 characters and can be\nquoted with backticks (i.e.., `).\n\nLabels have a start part and an end part. The start part must precede the\nportion of code it refers to, must be followed by a colon (:) and can be on\nthe same or different line. The end part is optional and adds nothing, but can\nmake the code more readable. If used, the end part must precede the\nconstruct\'s delimiter (;). Constructs identified by a label can be nested.\nEach construct can be identified by only one label.\n\nLabels need not be unique in the stored program they belong to. However, a\nlabel for an inner loop cannot be identical to a label for an outer loop. In\nthis case, the following error would be produced:\n\nERROR 1309 (42000): Redefining label <label_name>\n\nLEAVE and ITERATE statements can be used to exit or repeat a portion of code\nidentified by a label. They must be in the same Stored Routine, Trigger or\nEvent which contains the target label.\n\nBelow is an example using a simple label that is used to exit a LOOP:\n\nCREATE PROCEDURE `test_sp`()\nBEGIN\n `my_label`:\n LOOP\n SELECT \'looping\';\n LEAVE `my_label`;\n END LOOP;\n SELECT \'out of loop\';\nEND;\n\nThe following label is used to exit a procedure, and has an end part:\n\nCREATE PROCEDURE `test_sp`()\n`my_label`:\nBEGIN\n IF @var = 1 THEN\n LEAVE `my_label`;\n END IF;\n DO something();\nEND `my_label`;\n\nURL: https://mariadb.com/kb/en/labels/','','https://mariadb.com/kb/en/labels/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (306,24,'LEAVE','Syntax\n------\n\nLEAVE label\n\nThis statement is used to exit the flow control construct that has the given\nlabel. The label must be in the same stored program, not in a caller\nprocedure. LEAVE can be used within BEGIN ... END or loop constructs (LOOP,\nREPEAT, WHILE). In Stored Procedures, Triggers and Events, LEAVE can refer to\nthe outmost BEGIN ... END construct; in that case, the program exits the\nprocedure. In Stored Functions, RETURN can be used instead.\n\nNote that LEAVE cannot be used to exit a DECLARE HANDLER block.\n\nIf you try to LEAVE a non-existing label, or if you try to LEAVE a HANDLER\nblock, the following error will be produced:\n\nERROR 1308 (42000): LEAVE with no matching label: <label_name>\n\nThe following example uses LEAVE to exit the procedure if a condition is true:\n\nCREATE PROCEDURE proc(IN p TINYINT)\nCONTAINS SQL\n`whole_proc`:\nBEGIN\n SELECT 1;\n IF p < 1 THEN\n LEAVE `whole_proc`;\n END IF;\n SELECT 2;\nEND;\n\nCALL proc(0);\n+---+\n| 1 |\n+---+\n| 1 |\n+---+\n\nURL: https://mariadb.com/kb/en/leave/','','https://mariadb.com/kb/en/leave/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (307,24,'LOOP','Syntax\n------\n\n[begin_label:] LOOP\n statement_list\nEND LOOP [end_label]\n\nDescription\n-----------\n\nLOOP implements a simple loop construct, enabling repeated execution of the\nstatement list, which consists of one or more statements, each terminated by a\nsemicolon (i.e., ;) statement delimiter. The statements within the loop are\nrepeated until the loop is exited; usually this is accomplished with a LEAVE\nstatement.\n\nA LOOP statement can be labeled. end_label cannot be given unless begin_label\nalso is present. If both are present, they must be the same.\n\nSee Delimiters in the mysql client for more on delimiter usage in the client.\n\nURL: https://mariadb.com/kb/en/loop/','','https://mariadb.com/kb/en/loop/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (308,24,'REPEAT LOOP','Syntax\n------\n\n[begin_label:] REPEAT\n statement_list\nUNTIL search_condition\nEND REPEAT [end_label]\n\nThe statement list within a REPEAT statement is repeated until the\nsearch_condition is true. Thus, a REPEAT always enters the loop at least once.\nstatement_list consists of one or more statements, each terminated by a\nsemicolon (i.e., ;) statement delimiter.\n\nA REPEAT statement can be labeled. end_label cannot be given unless\nbegin_label also is present. If both are present, they must be the same.\n\nSee Delimiters in the mysql client for more on client delimiter usage.\n\nDELIMITER //\n\nCREATE PROCEDURE dorepeat(p1 INT)\n BEGIN\n SET @x = 0;\n REPEAT SET @x = @x + 1; UNTIL @x > p1 END REPEAT;\n END\n//\n\nCALL dorepeat(1000)//\n\nSELECT @x//\n+------+\n| @x |\n+------+\n| 1001 |\n+------+\n\nURL: https://mariadb.com/kb/en/repeat-loop/','','https://mariadb.com/kb/en/repeat-loop/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (309,24,'RESIGNAL','Syntax\n------\n\nRESIGNAL [error_condition]\n [SET error_property\n [, error_property] ...]\n\nerror_condition:\n SQLSTATE [VALUE] \'sqlstate_value\'\n | condition_name\n\nerror_property:\n error_property_name = <error_property_value>\n\nerror_property_name:\n CLASS_ORIGIN\n | SUBCLASS_ORIGIN\n | MESSAGE_TEXT\n | MYSQL_ERRNO\n | CONSTRAINT_CATALOG\n | CONSTRAINT_SCHEMA\n | CONSTRAINT_NAME\n | CATALOG_NAME\n | SCHEMA_NAME\n | TABLE_NAME\n | COLUMN_NAME\n | CURSOR_NAME\n\nDescription\n-----------\n\nThe syntax of RESIGNAL and its semantics are very similar to SIGNAL. This\nstatement can only be used within an error HANDLER. It produces an error, like\nSIGNAL. RESIGNAL clauses are the same as SIGNAL, except that they all are\noptional, even SQLSTATE. All the properties which are not specified in\nRESIGNAL, will be identical to the properties of the error that was received\nby the error HANDLER. For a description of the clauses, see diagnostics area.\n\nNote that RESIGNAL does not empty the diagnostics area: it just appends\nanother error condition.\n\nRESIGNAL, without any clauses, produces an error which is identical to the\nerror that was received by HANDLER.\n\nIf used out of a HANDLER construct, RESIGNAL produces the following error:\n\nERROR 1645 (0K000): RESIGNAL when handler not active\n\nIn MariaDB 5.5, if a HANDLER contained a CALL to another procedure, that\nprocedure could use RESIGNAL. Since MariaDB 10.0, trying to do this raises the\nabove error.\n\nFor a list of SQLSTATE values and MariaDB error codes, see MariaDB Error Codes.\n\nThe following procedure tries to query two tables which don\'t exist, producing\na 1146 error in both cases. Those errors will trigger the HANDLER. The first\ntime the error will be ignored and the client will not receive it, but the\nsecond time, the error is re-signaled, so the client will receive it.\n\nCREATE PROCEDURE test_error( )\nBEGIN\n DECLARE CONTINUE HANDLER\n FOR 1146\n BEGIN\n IF @hide_errors IS FALSE THEN\n RESIGNAL;\n END IF;\n END;\n SET @hide_errors = TRUE;\n SELECT \'Next error will be ignored\' AS msg;\n SELECT `c` FROM `temptab_one`;\n SELECT \'Next error won\'\'t be ignored\' AS msg;\n SET @hide_errors = FALSE;\n SELECT `c` FROM `temptab_two`;\nEND;\n\nCALL test_error( );\n\n+----------------------------+\n| msg |\n+----------------------------+\n| Next error will be ignored |\n+----------------------------+\n\n+-----------------------------+\n| msg |\n+-----------------------------+\n| Next error won\'t be ignored |\n+-----------------------------+\n\nERROR 1146 (42S02): Table \'test.temptab_two\' doesn\'t exist\n\nThe following procedure re-signals an error, modifying only the error message\nto clarify the cause of the problem.\n\nCREATE PROCEDURE test_error()\nBEGIN\n DECLARE CONTINUE HANDLER\n FOR 1146\n BEGIN\n RESIGNAL SET\n MESSAGE_TEXT = \'`temptab` does not exist\';\n END;\n SELECT `c` FROM `temptab`;\nEND;\n\nCALL test_error( );\nERROR 1146 (42S02): `temptab` does not exist\n\nAs explained above, this works on MariaDB 5.5, but produces a 1645 error since\n10.0.\n\nCREATE PROCEDURE handle_error()\nBEGIN\n RESIGNAL;\nEND;\nCREATE PROCEDURE p()\nBEGIN\n DECLARE EXIT HANDLER FOR SQLEXCEPTION CALL p();\n SIGNAL SQLSTATE \'45000\';\nEND;\n\nURL: https://mariadb.com/kb/en/resignal/','','https://mariadb.com/kb/en/resignal/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (310,24,'RETURN','Syntax\n------\n\nRETURN expr\n\nThe RETURN statement terminates execution of a stored function and returns the\nvalue expr to the function caller. There must be at least one RETURN statement\nin a stored function. If the function has multiple exit points, all exit\npoints must have a RETURN.\n\nThis statement is not used in stored procedures, triggers, or events. LEAVE\ncan be used instead.\n\nThe following example shows that RETURN can return the result of a scalar\nsubquery:\n\nCREATE FUNCTION users_count() RETURNS BOOL\n READS SQL DATA\nBEGIN\n RETURN (SELECT COUNT(DISTINCT User) FROM mysql.user);\nEND;\n\nURL: https://mariadb.com/kb/en/return/','','https://mariadb.com/kb/en/return/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (311,24,'SELECT INTO','Syntax\n------\n\nSELECT col_name [, col_name] ...\n INTO var_name [, var_name] ...\n table_expr\n\nDescription\n-----------\n\nSELECT ... INTO enables selected columns to be stored directly into variables.\nNo resultset is produced. The query should return a single row. If the query\nreturns no rows, a warning with error code 1329 occurs (No data), and the\nvariable values remain unchanged. If the query returns multiple rows, error\n1172 occurs (Result consisted of more than one row). If it is possible that\nthe statement may retrieve multiple rows, you can use LIMIT 1 to limit the\nresult set to a single row.\n\nThe INTO clause can also be specified at the end of the statement.\n\nIn the context of such statements that occur as part of events executed by the\nEvent Scheduler, diagnostics messages (not only errors, but also warnings) are\nwritten to the error log, and, on Windows, to the application event log.\n\nThis statement can be used with both local variables and user-defined\nvariables.\n\nFor the complete syntax, see SELECT.\n\nAnother way to set a variable\'s value is the SET statement.\n\nSELECT ... INTO results are not stored in the query cache even if SQL_CACHE is\nspecified.\n\nExamples\n--------\n\nSELECT id, data INTO @x,@y \nFROM test.t1 LIMIT 1;\nSELECT * from t1 where t1.a=@x and t1.b=@y\n\nIf you want to use this construct with UNION you have to use the syntax:\n\nSELECT * INTO @x FROM (SELECT t1.a FROM t1 UNION SELECT t2.a FROM t2);\n\nURL: https://mariadb.com/kb/en/selectinto/','','https://mariadb.com/kb/en/selectinto/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (312,24,'SIGNAL','Syntax\n------\n\nSIGNAL error_condition\n [SET error_property\n [, error_property] ...]\n\nerror_condition:\n SQLSTATE [VALUE] \'sqlstate_value\'\n | condition_name\n\nerror_property:\n error_property_name = <error_property_value>\n\nerror_property_name:\n CLASS_ORIGIN\n | SUBCLASS_ORIGIN\n | MESSAGE_TEXT\n | MYSQL_ERRNO\n | CONSTRAINT_CATALOG\n | CONSTRAINT_SCHEMA\n | CONSTRAINT_NAME\n | CATALOG_NAME\n | SCHEMA_NAME\n | TABLE_NAME\n | COLUMN_NAME\n | CURSOR_NAME\n\nSIGNAL empties the diagnostics area and produces a custom error. This\nstatement can be used anywhere, but is generally useful when used inside a\nstored program. When the error is produced, it can be caught by a HANDLER. If\nnot, the current stored program, or the current statement, will terminate with\nthe specified error.\n\nSometimes an error HANDLER just needs to SIGNAL the same error it received,\noptionally with some changes. Usually the RESIGNAL statement is the most\nconvenient way to do this.\n\nerror_condition can be an SQLSTATE value or a named error condition defined\nvia DECLARE CONDITION. SQLSTATE must be a constant string consisting of five\ncharacters. These codes are standard to ODBC and ANSI SQL. For customized\nerrors, the recommended SQLSTATE is \'45000\'. For a list of SQLSTATE values\nused by MariaDB, see the MariaDB Error Codes page. The SQLSTATE can be read\nvia the API method mysql_sqlstate( ).\n\nTo specify error properties user-defined variables and local variables can be\nused, as well as character set conversions (but you can\'t set a collation).\n\nThe error properties, their type and their default values are explained in the\ndiagnostics area page.\n\nErrors\n------\n\nIf the SQLSTATE is not valid, the following error like this will be produced:\n\nERROR 1407 (42000): Bad SQLSTATE: \'123456\'\n\nIf a property is specified more than once, an error like this will be produced:\n\nERROR 1641 (42000): Duplicate condition information item \'MESSAGE_TEXT\'\n\nIf you specify a condition name which is not declared, an error like this will\nbe produced:\n\nERROR 1319 (42000): Undefined CONDITION: cond_name\n\nIf MYSQL_ERRNO is out of range, you will get an error like this:\n\nERROR 1231 (42000): Variable \'MYSQL_ERRNO\' can\'t be set to the value of \'0\'\n\nExamples\n--------\n\nHere\'s what happens if SIGNAL is used in the client to generate errors:\n\nSIGNAL SQLSTATE \'01000\';\nQuery OK, 0 rows affected, 1 warning (0.00 sec)\n\nSHOW WARNINGS;\n\n+---------+------+------------------------------------------+\n| Level | Code | Message |\n+---------+------+------------------------------------------+\n| Warning | 1642 | Unhandled user-defined warning condition |\n+---------+------+------------------------------------------+\n1 row in set (0.06 sec)\n\nSIGNAL SQLSTATE \'02000\';\nERROR 1643 (02000): Unhandled user-defined not found condition\n\nHow to specify MYSQL_ERRNO and MESSAGE_TEXT properties:\n\nSIGNAL SQLSTATE \'45000\' SET MYSQL_ERRNO=30001, MESSAGE_TEXT=\'H\nello, world!\';\n\nERROR 30001 (45000): Hello, world!\n\nThe following code shows how to use user variables, local variables and\ncharacter set conversion with SIGNAL:\n\nCREATE PROCEDURE test_error(x INT)\nBEGIN\n DECLARE errno SMALLINT UNSIGNED DEFAULT 31001;\n SET @errmsg = \'Hello, world!\';\n IF x = 1 THEN\n SIGNAL SQLSTATE \'45000\' SET\n MYSQL_ERRNO = errno,\n MESSAGE_TEXT = @errmsg;\n ELSE\n SIGNAL SQLSTATE \'45000\' SET\n MYSQL_ERRNO = errno,\n MESSAGE_TEXT = _utf8\'Hello, world!\';\n END IF;\nEND;\n\nHow to use named error conditions:\n\nCREATE PROCEDURE test_error(n INT)\nBEGIN\n DECLARE `too_big` CONDITION FOR SQLSTATE \'45000\';\n IF n > 10 THEN\n SIGNAL `too_big`;\n END IF;\nEND;\n\nIn this example, we\'ll define a HANDLER for an error code. When the error\noccurs, we SIGNAL a more informative error which makes sense for our procedure:\n\nCREATE PROCEDURE test_error()\nBEGIN\n DECLARE EXIT HANDLER\n FOR 1146\n BEGIN\n SIGNAL SQLSTATE \'45000\' SET\n MESSAGE_TEXT = \'Temporary tables not found; did you call init()\nprocedure?\';\n END;\n -- this will produce a 1146 error\n SELECT `c` FROM `temptab`;\nEND;\n\nURL: https://mariadb.com/kb/en/signal/','','https://mariadb.com/kb/en/signal/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (313,24,'WHILE','Syntax\n------\n\n[begin_label:] WHILE search_condition DO\n statement_list\nEND WHILE [end_label]\n\nDescription\n-----------\n\nThe statement list within a WHILE statement is repeated as long as the\nsearch_condition is true. statement_list consists of one or more statements.\nIf the loop must be executed at least once, REPEAT ... LOOP can be used\ninstead.\n\nA WHILE statement can be labeled. end_label cannot be given unless begin_label\nalso is present. If both are present, they must be the same.\n\nExamples\n--------\n\nCREATE PROCEDURE dowhile()\nBEGIN\n DECLARE v1 INT DEFAULT 5;\n\nWHILE v1 > 0 DO\n ...\n SET v1 = v1 - 1;\n END WHILE;\nEND\n\nURL: https://mariadb.com/kb/en/while/','','https://mariadb.com/kb/en/while/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (314,24,'Cursor Overview','Description\n-----------\n\nA cursor is a structure that allows you to go over records sequentially, and\nperform processing based on the result.\n\nMariaDB permits cursors inside stored programs, and MariaDB cursors are\nnon-scrollable, read-only and asensitive.\n\n* Non-scrollable means that the rows can only be fetched in the order\nspecified by the SELECT statement. Rows cannot be skipped, you cannot jump to\na specific row, and you cannot fetch rows in reverse order.\n* Read-only means that data cannot be updated through the cursor.\n* Asensitive means that the cursor points to the actual underlying data. This\nkind of cursor is quicker than the alternative, an insensitive cursor, as no\ndata is copied to a temporary table. However, changes to the data being used\nby the cursor will affect the cursor data.\n\nCursors are created with a DECLARE CURSOR statement and opened with an OPEN\nstatement. Rows are read with a FETCH statement before the cursor is finally\nclosed with a CLOSE statement.\n\nWhen FETCH is issued and there are no more rows to extract, the following\nerror is produced:\n\nERROR 1329 (02000): No data - zero rows fetched, selected, or processed\n\nTo avoid problems, a DECLARE HANDLER statement is generally used. The HANDLER\nshould handler the 1329 error, or the \'02000\' SQLSTATE, or the NOT FOUND error\nclass.\n\nOnly SELECT statements are allowed for cursors, and they cannot be contained\nin a variable - so, they cannot be composed dynamically. However, it is\npossible to SELECT from a view. Since the CREATE VIEW statement can be\nexecuted as a prepared statement, it is possible to dynamically create the\nview that is queried by the cursor.\n\nFrom MariaDB 10.3.0, cursors can have parameters. Cursor parameters can appear\nin any part of the DECLARE CURSOR select_statement where a stored procedure\nvariable is allowed (select list, WHERE, HAVING, LIMIT etc). See DECLARE\nCURSOR and OPEN for syntax, and below for an example:\n\nExamples\n--------\n\nCREATE TABLE c1(i INT);\n\nCREATE TABLE c2(i INT);\n\nCREATE TABLE c3(i INT);\n\nDELIMITER //\n\nCREATE PROCEDURE p1()\nBEGIN\n DECLARE done INT DEFAULT FALSE;\n DECLARE x, y INT;\n DECLARE cur1 CURSOR FOR SELECT i FROM test.c1;\n DECLARE cur2 CURSOR FOR SELECT i FROM test.c2;\n DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;\n\nOPEN cur1;\n OPEN cur2;\n\nread_loop: LOOP\n FETCH cur1 INTO x;\n FETCH cur2 INTO y;\n IF done THEN\n LEAVE read_loop;\n END IF;\n IF x < y THEN\n INSERT INTO test.c3 VALUES (x);\n ELSE\n INSERT INTO test.c3 VALUES (y);\n END IF;\n END LOOP;\n\nCLOSE cur1;\n CLOSE cur2;\nEND; //\n\nDELIMITER ;\n\nINSERT INTO c1 VALUES(5),(50),(500);\n\nINSERT INTO c2 VALUES(10),(20),(30);\n\nCALL p1;\n\nSELECT * FROM c3;\n+------+\n| i |\n+------+\n| 5 |\n| 20 |\n| 30 |\n+------+\n\nFrom MariaDB 10.3.0\n\nDROP PROCEDURE IF EXISTS p1;\nDROP TABLE IF EXISTS t1;\nCREATE TABLE t1 (a INT, b VARCHAR(10));\n\nINSERT INTO t1 VALUES (1,\'old\'),(2,\'old\'),(3,\'old\'),(4,\'old\'),(5,\'old\');\n\nDELIMITER //\n\nCREATE PROCEDURE p1(min INT,max INT)\nBEGIN\n DECLARE done INT DEFAULT FALSE;\n DECLARE va INT;\n DECLARE cur CURSOR(pmin INT, pmax INT) FOR SELECT a FROM t1 WHERE a BETWEEN\npmin AND pmax;\n DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=TRUE;\n OPEN cur(min,max);\n read_loop: LOOP\n FETCH cur INTO va;\n IF done THEN\n LEAVE read_loop;\n END IF;\n INSERT INTO t1 VALUES (va,\'new\');\n END LOOP;\n CLOSE cur;\nEND;\n//\n\nDELIMITER ;\n\nCALL p1(2,4);\n\nSELECT * FROM t1;\n+------+------+\n| a | b |\n+------+------+\n| 1 | old |\n| 2 | old |\n| 3 | old |\n| 4 | old |\n| 5 | old |\n| 2 | new |\n| 3 | new |\n| 4 | new |\n+------+------+\n\nURL: https://mariadb.com/kb/en/cursor-overview/','','https://mariadb.com/kb/en/cursor-overview/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (315,24,'DECLARE CURSOR','Syntax\n------\n\n<= MariaDB 10.2\n\nDECLARE cursor_name CURSOR FOR select_statement\n\nFrom MariaDB 10.3\n\nDECLARE cursor_name CURSOR [(cursor_formal_parameter[,...])] FOR\nselect_statement\n\ncursor_formal_parameter:\n name type [collate clause]\n\nFrom MariaDB 10.8\n\nDECLARE cursor_name CURSOR [(cursor_formal_parameter[,...])] FOR\nselect_statement\n\ncursor_formal_parameter:\n [IN] name type [collate clause]\n\nDescription\n-----------\n\nThis statement declares a cursor. Multiple cursors may be declared in a stored\nprogram, but each cursor in a given block must have a unique name.\n\nselect_statement is not executed until the OPEN statement is executed. It is\nimportant to remember this if the query produces an error, or calls functions\nwhich have side effects.\n\nA SELECT associated to a cursor can use variables, but the query itself cannot\nbe a variable, and cannot be dynamically composed. The SELECT statement cannot\nhave an INTO clause.\n\nCursors must be declared before HANDLERs, but after local variables and\nCONDITIONs.\n\nParameters\n----------\n\nMariaDB starting with 10.3.0\n----------------------------\nFrom MariaDB 10.3.0, cursors can have parameters. This is a non-standard SQL\nextension. Cursor parameters can appear in any part of the DECLARE CURSOR\nselect_statement where a stored procedure variable is allowed (select list,\nWHERE, HAVING, LIMIT etc).\n\nIN\n--\n\nMariaDB starting with 10.8.0\n----------------------------\nFrom MariaDB 10.8.0 preview release, the IN qualifier is supported in the\ncursor_format_parameter part of the syntax.\n\nSee Cursor Overview for an example.\n\nURL: https://mariadb.com/kb/en/declare-cursor/','','https://mariadb.com/kb/en/declare-cursor/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (316,24,'OPEN','Syntax\n------\n\n<= MariaDB 10.2\n\nOPEN cursor_name\n\nFrom MariaDB 10.3\n\nOPEN cursor_name [expression[,...]];\n\nDescription\n-----------\n\nThis statement opens a cursor which was previously declared with DECLARE\nCURSOR.\n\nThe query associated to the DECLARE CURSOR is executed when OPEN is executed.\nIt is important to remember this if the query produces an error, or calls\nfunctions which have side effects.\n\nThis is necessary in order to FETCH rows from a cursor.\n\nSee Cursor Overview for an example.\n\nURL: https://mariadb.com/kb/en/open/','','https://mariadb.com/kb/en/open/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (317,24,'FETCH','Syntax\n------\n\nFETCH cursor_name INTO var_name [, var_name] ...\n\nDescription\n-----------\n\nThis statement fetches the next row (if a row exists) using the specified open\ncursor, and advances the cursor pointer.\n\nvar_name can be a local variable, but not a user-defined variable.\n\nIf no more rows are available, a No Data condition occurs with SQLSTATE value\n02000. To detect this condition, you can set up a handler for it (or for a NOT\nFOUND condition).\n\nSee Cursor Overview for an example.\n\nURL: https://mariadb.com/kb/en/fetch/','','https://mariadb.com/kb/en/fetch/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (318,24,'CLOSE','Syntax\n------\n\nCLOSE cursor_name\n\nDescription\n-----------\n\nThis statement closes a previously opened cursor. The cursor must have been\npreviously opened or else an error occurs.\n\nIf not closed explicitly, a cursor is closed at the end of the compound\nstatement in which it was declared.\n\nSee Cursor Overview for an example.\n\nURL: https://mariadb.com/kb/en/close/','','https://mariadb.com/kb/en/close/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (319,25,'BUFFER','A synonym for ST_BUFFER.\n\nURL: https://mariadb.com/kb/en/buffer/','','https://mariadb.com/kb/en/buffer/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (320,25,'CONVEXHULL','A synonym for ST_CONVEXHULL.\n\nURL: https://mariadb.com/kb/en/convexhull/','','https://mariadb.com/kb/en/convexhull/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (321,25,'GEOMETRYCOLLECTION','Syntax\n------\n\nGeometryCollection(g1,g2,...)\n\nDescription\n-----------\n\nConstructs a WKB GeometryCollection. If any argument is not a well-formed WKB\nrepresentation of a geometry, the return value is NULL.\n\nExamples\n--------\n\nCREATE TABLE gis_geometrycollection (g GEOMETRYCOLLECTION);\nSHOW FIELDS FROM gis_geometrycollection;\nINSERT INTO gis_geometrycollection VALUES\n (GeomCollFromText(\'GEOMETRYCOLLECTION(POINT(0 0), LINESTRING(0 0,10\n10))\')),\n (GeometryFromWKB(AsWKB(GeometryCollection(Point(44, 6),\nLineString(Point(3, 6), Point(7, 9)))))),\n (GeomFromText(\'GeometryCollection()\')),\n (GeomFromText(\'GeometryCollection EMPTY\'));\n\nURL: https://mariadb.com/kb/en/geometrycollection/','','https://mariadb.com/kb/en/geometrycollection/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (322,25,'LINESTRING','Syntax\n------\n\nLineString(pt1,pt2,...)\n\nDescription\n-----------\n\nConstructs a WKB LineString value from a number of WKB Point arguments. If any\nargument is not a WKB Point, the return value is NULL. If the number of Point\narguments is less than two, the return value is NULL.\n\nExamples\n--------\n\nSET @ls = \'LineString(1 1,2 2,3 3)\';\n\nSELECT AsText(EndPoint(GeomFromText(@ls)));\n+-------------------------------------+\n| AsText(EndPoint(GeomFromText(@ls))) |\n+-------------------------------------+\n| POINT(3 3) |\n+-------------------------------------+\n\nCREATE TABLE gis_line (g LINESTRING);\nINSERT INTO gis_line VALUES\n (LineFromText(\'LINESTRING(0 0,0 10,10 0)\')),\n (LineStringFromText(\'LINESTRING(10 10,20 10,20 20,10 20,10 10)\')),\n (LineStringFromWKB(AsWKB(LineString(Point(10, 10), Point(40, 10)))));\n\nURL: https://mariadb.com/kb/en/linestring/','','https://mariadb.com/kb/en/linestring/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (323,25,'MULTILINESTRING','Syntax\n------\n\nMultiLineString(ls1,ls2,...)\n\nDescription\n-----------\n\nConstructs a WKB MultiLineString value using WKB LineString arguments. If any\nargument is not a WKB LineString, the return value is NULL.\n\nExample\n-------\n\nCREATE TABLE gis_multi_line (g MULTILINESTRING);\nINSERT INTO gis_multi_line VALUES\n (MultiLineStringFromText(\'MULTILINESTRING((10 48,10 21,10 0),(16 0,16 23,16\n48))\')),\n (MLineFromText(\'MULTILINESTRING((10 48,10 21,10 0))\')),\n (MLineFromWKB(AsWKB(MultiLineString(LineString(Point(1, 2), \n Point(3, 5)), LineString(Point(2, 5),Point(5, 8),Point(21, 7))))));\n\nURL: https://mariadb.com/kb/en/multilinestring/','','https://mariadb.com/kb/en/multilinestring/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (324,25,'MULTIPOINT','Syntax\n------\n\nMultiPoint(pt1,pt2,...)\n\nDescription\n-----------\n\nConstructs a WKB MultiPoint value using WKB Point arguments. If any argument\nis not a WKB Point, the return value is NULL.\n\nExamples\n--------\n\nSET @g = ST_GEOMFROMTEXT(\'MultiPoint( 1 1, 2 2, 5 3, 7 2, 9 3, 8 4, 6 6, 6 9,\n4 9, 1 5 )\');\n\nCREATE TABLE gis_multi_point (g MULTIPOINT);\nINSERT INTO gis_multi_point VALUES\n (MultiPointFromText(\'MULTIPOINT(0 0,10 10,10 20,20 20)\')),\n (MPointFromText(\'MULTIPOINT(1 1,11 11,11 21,21 21)\')),\n (MPointFromWKB(AsWKB(MultiPoint(Point(3, 6), Point(4, 10)))));\n\nURL: https://mariadb.com/kb/en/multipoint/','','https://mariadb.com/kb/en/multipoint/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (325,25,'MULTIPOLYGON','Syntax\n------\n\nMultiPolygon(poly1,poly2,...)\n\nDescription\n-----------\n\nConstructs a WKB MultiPolygon value from a set of WKB Polygon arguments. If\nany argument is not a WKB Polygon, the return value is NULL.\n\nExample\n-------\n\nCREATE TABLE gis_multi_polygon (g MULTIPOLYGON);\nINSERT INTO gis_multi_polygon VALUES\n (MultiPolygonFromText(\'MULTIPOLYGON(((28 26,28 0,84 0,84 42,28 26),(52\n18,66 23,73 9,48 6,52 18)),\n ((59 18,67 18,67 13,59 13,59 18)))\')),\n (MPolyFromText(\'MULTIPOLYGON(((28 26,28 0,84 0,84 42,28 26),(52 18,66\n23,73 9,48 6,52 18)),\n ((59 18,67 18,67 13,59 13,59 18)))\')),\n (MPolyFromWKB(AsWKB(MultiPolygon(Polygon(LineString(\n Point(0, 3), Point(3, 3), Point(3, 0), Point(0, 3)))))));\n\nURL: https://mariadb.com/kb/en/multipolygon/','','https://mariadb.com/kb/en/multipolygon/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (326,25,'POINT','Syntax\n------\n\nPoint(x,y)\n\nDescription\n-----------\n\nConstructs a WKB Point using the given coordinates.\n\nExamples\n--------\n\nSET @g = ST_GEOMFROMTEXT(\'Point(1 1)\');\n\nCREATE TABLE gis_point (g POINT);\nINSERT INTO gis_point VALUES\n (PointFromText(\'POINT(10 10)\')),\n (PointFromText(\'POINT(20 10)\')),\n (PointFromText(\'POINT(20 20)\')),\n (PointFromWKB(AsWKB(PointFromText(\'POINT(10 20)\'))));\n\nURL: https://mariadb.com/kb/en/point/','','https://mariadb.com/kb/en/point/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (327,25,'PointOnSurface','A synonym for ST_PointOnSurface.\n\nURL: https://mariadb.com/kb/en/pointonsurface/','','https://mariadb.com/kb/en/pointonsurface/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (328,25,'POLYGON','Syntax\n------\n\nPolygon(ls1,ls2,...)\n\nDescription\n-----------\n\nConstructs a WKB Polygon value from a number of WKB LineString arguments. If\nany argument does not represent the WKB of a LinearRing (that is, not a closed\nand simple LineString) the return value is NULL.\n\nNote that according to the OpenGIS standard, a POLYGON should have exactly one\nExteriorRing and all other rings should lie within that ExteriorRing and thus\nbe the InteriorRings. Practically, however, some systems, including MariaDB\'s,\npermit polygons to have several \'ExteriorRings\'. In the case of there being\nmultiple, non-overlapping exterior rings ST_NUMINTERIORRINGS() will return 1.\n\nExamples\n--------\n\nSET @g = ST_GEOMFROMTEXT(\'POLYGON((1 1,1 5,4 9,6 9,9 3,7 2,1 1))\');\n\nCREATE TABLE gis_polygon (g POLYGON);\nINSERT INTO gis_polygon VALUES\n (PolygonFromText(\'POLYGON((10 10,20 10,20 20,10 20,10 10))\')),\n (PolyFromText(\'POLYGON((0 0,50 0,50 50,0 50,0 0), (10 10,20 10,20 20,10\n20,10 10))\')),\n (PolyFromWKB(AsWKB(Polygon(LineString(Point(0, 0), Point(30, 0), Point(30,\n30), Point(0, 0))))));\n\nNon-overlapping \'polygon\':\n\nSELECT ST_NumInteriorRings(ST_PolyFromText(\'POLYGON((0 0,10 0,10 10,0 10,0 0),\n (-1 -1,-5 -1,-5 -5,-1 -5,-1 -1))\')) AS NumInteriorRings;\n+------------------+\n| NumInteriorRings |\n+------------------+\n| 1 |\n+------------------+\n\nURL: https://mariadb.com/kb/en/polygon/','','https://mariadb.com/kb/en/polygon/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (329,25,'ST_BUFFER','Syntax\n------\n\nST_BUFFER(g1,r)\nBUFFER(g1,r)\n\nDescription\n-----------\n\nReturns a geometry that represents all points whose distance from geometry g1\nis less than or equal to distance, or radius, r.\n\nUses for this function could include creating for example a new geometry\nrepresenting a buffer zone around an island.\n\nBUFFER() is a synonym.\n\nExamples\n--------\n\nDetermining whether a point is within a buffer zone:\n\nSET @g1 = ST_GEOMFROMTEXT(\'POLYGON((10 10, 10 20, 20 20, 20 10, 10 10))\');\n\nSET @g2 = ST_GEOMFROMTEXT(\'POINT(8 8)\');\n\nSELECT ST_WITHIN(@g2,ST_BUFFER(@g1,5));\n+---------------------------------+\n| ST_WITHIN(@g2,ST_BUFFER(@g1,5)) |\n+---------------------------------+\n| 1 |\n+---------------------------------+\n\nSELECT ST_WITHIN(@g2,ST_BUFFER(@g1,1));\n+---------------------------------+\n| ST_WITHIN(@g2,ST_BUFFER(@g1,1)) |\n+---------------------------------+\n| 0 |\n+---------------------------------+\n\nURL: https://mariadb.com/kb/en/st_buffer/','','https://mariadb.com/kb/en/st_buffer/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (330,25,'ST_CONVEXHULL','MariaDB starting with 10.1.2\n----------------------------\nST_ConvexHull() was introduced in MariaDB 10.1.2\n\nSyntax\n------\n\nST_ConvexHull(g)\nConvexHull(g)\n\nDescription\n-----------\n\nGiven a geometry, returns a geometry that is the minimum convex geometry\nenclosing all geometries within the set. Returns NULL if the geometry value is\nNULL or an empty value.\n\nST_ConvexHull() and ConvexHull() are synonyms.\n\nExamples\n--------\n\nThe ConvexHull of a single point is simply the single point:\n\nSET @g = ST_GEOMFROMTEXT(\'Point(0 0)\');\n\nSELECT ST_ASTEXT(ST_CONVEXHULL(@g));\n+------------------------------+\n| ST_ASTEXT(ST_CONVEXHULL(@g)) |\n+------------------------------+\n| POINT(0 0) |\n+------------------------------+\n\nSET @g = ST_GEOMFROMTEXT(\'MultiPoint(0 0, 1 2, 2 3)\');\n\nSELECT ST_ASTEXT(ST_CONVEXHULL(@g));\n+------------------------------+\n| ST_ASTEXT(ST_CONVEXHULL(@g)) |\n+------------------------------+\n| POLYGON((0 0,1 2,2 3,0 0)) |\n+------------------------------+\n\nSET @g = ST_GEOMFROMTEXT(\'MultiPoint( 1 1, 2 2, 5 3, 7 2, 9 3, 8 4, 6 6, 6 9,\n4 9, 1 5 )\');\n\nSELECT ST_ASTEXT(ST_CONVEXHULL(@g));\n+----------------------------------------+\n| ST_ASTEXT(ST_CONVEXHULL(@g)) |\n+----------------------------------------+\n| POLYGON((1 1,1 5,4 9,6 9,9 3,7 2,1 1)) |\n+----------------------------------------+\n\nURL: https://mariadb.com/kb/en/st_convexhull/','','https://mariadb.com/kb/en/st_convexhull/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (331,25,'ST_INTERSECTION','Syntax\n------\n\nST_INTERSECTION(g1,g2)\n\nDescription\n-----------\n\nReturns a geometry that is the intersection, or shared portion, of geometry g1\nand geometry g2.\n\nExamples\n--------\n\nSET @g1 = ST_GEOMFROMTEXT(\'POINT(2 1)\');\n\nSET @g2 = ST_GEOMFROMTEXT(\'LINESTRING(2 1, 0 2)\');\n\nSELECT ASTEXT(ST_INTERSECTION(@g1,@g2));\n+----------------------------------+\n| ASTEXT(ST_INTERSECTION(@g1,@g2)) |\n+----------------------------------+\n| POINT(2 1) |\n+----------------------------------+\n\nURL: https://mariadb.com/kb/en/st_intersection/','','https://mariadb.com/kb/en/st_intersection/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (332,25,'ST_POINTONSURFACE','MariaDB starting with 10.1.2\n----------------------------\nST_POINTONSURFACE() was introduced in MariaDB 10.1.2\n\nSyntax\n------\n\nST_PointOnSurface(g)\nPointOnSurface(g)\n\nDescription\n-----------\n\nGiven a geometry, returns a POINT guaranteed to intersect a surface. However,\nsee MDEV-7514.\n\nST_PointOnSurface() and PointOnSurface() are synonyms.\n\nURL: https://mariadb.com/kb/en/st_pointonsurface/','','https://mariadb.com/kb/en/st_pointonsurface/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (333,25,'ST_SYMDIFFERENCE','Syntax\n------\n\nST_SYMDIFFERENCE(g1,g2)\n\nDescription\n-----------\n\nReturns a geometry that represents the portions of geometry g1 and geometry g2\nthat don\'t intersect.\n\nExamples\n--------\n\nSET @g1 = ST_GEOMFROMTEXT(\'LINESTRING(10 20, 10 40)\');\n\nSET @g2 = ST_GEOMFROMTEXT(\'LINESTRING(10 15, 10 25)\');\n\nSELECT ASTEXT(ST_SYMDIFFERENCE(@g1,@g2));\n+----------------------------------------------+\n| ASTEXT(ST_SYMDIFFERENCE(@g1,@g2)) |\n+----------------------------------------------+\n| MULTILINESTRING((10 15,10 20),(10 25,10 40)) |\n+----------------------------------------------+\n\nSET @g2 = ST_GeomFromText(\'LINESTRING(10 20, 10 41)\');\n\nSELECT ASTEXT(ST_SYMDIFFERENCE(@g1,@g2));\n+-----------------------------------+\n| ASTEXT(ST_SYMDIFFERENCE(@g1,@g2)) |\n+-----------------------------------+\n| LINESTRING(10 40,10 41) |\n+-----------------------------------+\n\nURL: https://mariadb.com/kb/en/st_symdifference/','','https://mariadb.com/kb/en/st_symdifference/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (334,25,'ST_UNION','Syntax\n------\n\nST_UNION(g1,g2)\n\nDescription\n-----------\n\nReturns a geometry that is the union of the geometry g1 and geometry g2.\n\nExamples\n--------\n\nSET @g1 = GEOMFROMTEXT(\'POINT (0 2)\');\n\nSET @g2 = GEOMFROMTEXT(\'POINT (2 0)\');\n\nSELECT ASTEXT(ST_UNION(@g1,@g2));\n+---------------------------+\n| ASTEXT(ST_UNION(@g1,@g2)) |\n+---------------------------+\n| MULTIPOINT(2 0,0 2) |\n+---------------------------+\n\nSET @g1 = GEOMFROMTEXT(\'POLYGON((0 0,0 3,3 3,3 0,0 0))\');\n\nSET @g2 = GEOMFROMTEXT(\'POLYGON((2 2,4 2,4 4,2 4,2 2))\');\n\nSELECT ASTEXT(ST_UNION(@g1,@g2));\n+------------------------------------------------+\n| ASTEXT(ST_UNION(@g1,@g2)) |\n+------------------------------------------------+\n| POLYGON((0 0,0 3,2 3,2 4,4 4,4 2,3 2,3 0,0 0)) |\n+------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/st_union/','','https://mariadb.com/kb/en/st_union/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (335,26,'SHOW GRANTS','Syntax\n------\n\nSHOW GRANTS [FOR user|role]\n\nDescription\n-----------\n\nThe SHOW GRANTS statement lists privileges granted to a particular user or\nrole.\n\nUsers\n-----\n\nThe statement lists the GRANT statement or statements that must be issued to\nduplicate the privileges that are granted to a MariaDB user account. The\naccount is named using the same format as for the GRANT statement; for\nexample, \'jeffrey\'@\'localhost\'. If you specify only the user name part of the\naccount name, a host name part of \'%\' is used. For additional information\nabout specifying account names, see GRANT.\n\nSHOW GRANTS FOR \'root\'@\'localhost\';\n+---------------------------------------------------------------------+\n| Grants for root@localhost |\n+---------------------------------------------------------------------+\n| GRANT ALL PRIVILEGES ON *.* TO \'root\'@\'localhost\' WITH GRANT OPTION |\n+---------------------------------------------------------------------+\n\nTo list the privileges granted to the account that you are using to connect to\nthe server, you can use any of the following statements:\n\nSHOW GRANTS;\nSHOW GRANTS FOR CURRENT_USER;\nSHOW GRANTS FOR CURRENT_USER();\n\nIf SHOW GRANTS FOR CURRENT_USER (or any of the equivalent syntaxes) is used in\nDEFINER context (such as within a stored procedure that is defined with SQL\nSECURITY DEFINER), the grants displayed are those of the definer and not the\ninvoker.\n\nNote that the DELETE HISTORY privilege, introduced in MariaDB 10.3.4, was\ndisplayed as DELETE VERSIONING ROWS when running SHOW GRANTS until MariaDB\n10.3.15 (MDEV-17655).\n\nRoles\n-----\n\nSHOW GRANTS can also be used to view the privileges granted to a role.\n\nExample\n-------\n\nSHOW GRANTS FOR journalist;\n+------------------------------------------+\n| Grants for journalist |\n+------------------------------------------+\n| GRANT USAGE ON *.* TO \'journalist\' |\n| GRANT DELETE ON `test`.* TO \'journalist\' |\n+------------------------------------------+\n\nFOR PUBLIC\n----------\n\nMariaDB starting with 10.11\n---------------------------\nGRANT ... TO PUBLIC was introduced in MariaDB 10.11 to grant privileges to all\nusers. SHOW GRANTS FOR PUBLIC shows all these grants.\n\nSHOW GRANTS FOR public;\n+------------------------------------------------+\n| Grants for PUBLIC |\n+------------------------------------------------+\n| GRANT ALL PRIVILEGES ON `dev_db`.* TO `PUBLIC` |\n+------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/show-grants/','','https://mariadb.com/kb/en/show-grants/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (336,26,'SHOW CREATE USER','Syntax\n------\n\nSHOW CREATE USER user_name\n\nDescription\n-----------\n\nShows the CREATE USER statement that created the given user. The statement\nrequires the SELECT privilege for the mysql database, except for the current\nuser.\n\nExamples\n--------\n\nCREATE USER foo4@test require cipher \'text\' \n issuer \'foo_issuer\' subject \'foo_subject\';\n\nSHOW CREATE USER foo4@test\\G\n*************************** 1. row ***************************\nCREATE USER \'foo4\'@\'test\' \n REQUIRE ISSUER \'foo_issuer\'\n SUBJECT \'foo_subject\'\n CIPHER \'text\'\n\nUser Password Expiry:\n\nCREATE USER \'monty\'@\'localhost\' PASSWORD EXPIRE INTERVAL 120 DAY;\n\nSHOW CREATE USER \'monty\'@\'localhost\';\n+------------------------------------------------------------------+\n| CREATE USER for monty@localhost |\n+------------------------------------------------------------------+\n| CREATE USER \'monty\'@\'localhost\' PASSWORD EXPIRE INTERVAL 120 DAY |\n+------------------------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/show-create-user/','','https://mariadb.com/kb/en/show-create-user/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (337,26,'SHOW COLUMNS','Syntax\n------\n\nSHOW [FULL] {COLUMNS | FIELDS} FROM tbl_name [FROM db_name]\n [LIKE \'pattern\' | WHERE expr]\n\nDescription\n-----------\n\nSHOW COLUMNS displays information about the columns in a given table. It also\nworks for views. The LIKE clause, if present on its own, indicates which\ncolumn names to match. The WHERE and LIKE clauses can be given to select rows\nusing more general conditions, as discussed in Extended SHOW.\n\nIf the data types differ from what you expect them to be based on a CREATE\nTABLE statement, note that MariaDB sometimes changes data types when you\ncreate or alter a table. The conditions under which this occurs are described\nin the Silent Column Changes article.\n\nThe FULL keyword causes the output to include the column collation and\ncomments, as well as the privileges you have for each column.\n\nYou can use db_name.tbl_name as an alternative to the tbl_name FROM db_name\nsyntax. In other words, these two statements are equivalent:\n\nSHOW COLUMNS FROM mytable FROM mydb;\nSHOW COLUMNS FROM mydb.mytable;\n\nSHOW COLUMNS displays the following values for each table column:\n\nField indicates the column name.\n\nType indicates the column data type.\n\nCollation indicates the collation for non-binary string columns, or NULL for\nother columns. This value is displayed only if you use the FULL keyword.\n\nThe Null field contains YES if NULL values can be stored in the column, NO if\nnot.\n\nThe Key field indicates whether the column is indexed:\n\n* If Key is empty, the column either is not indexed or is indexed only as a\n secondary column in a multiple-column, non-unique index.\n* If Key is PRI, the column is a PRIMARY KEY or\n is one of the columns in a multiple-column PRIMARY KEY.\n* If Key is UNI, the column is the first column of a unique-valued\n index that cannot contain NULL values.\n* If Key is MUL, multiple occurrences of a given value are allowed\n within the column. The column is the first column of a non-unique index or a\n unique-valued index that can contain NULL values.\n\nIf more than one of the Key values applies to a given column of a table, Key\ndisplays the one with the highest priority, in the order PRI, UNI, MUL.\n\nA UNIQUE index may be displayed as PRI if it cannot contain NULL values and\nthere is no PRIMARY KEY in the table. A UNIQUE index may display as MUL if\nseveral columns form a composite UNIQUE index; although the combination of the\ncolumns is unique, each column can still hold multiple occurrences of a given\nvalue.\n\nThe Default field indicates the default value that is assigned to the column.\n\nThe Extra field contains any additional information that is available about a\ngiven column.\n\n+------------------------+---------------------------------------------------+\n| Value | Description |\n+------------------------+---------------------------------------------------+\n| AUTO_INCREMENT | The column was created with the AUTO_INCREMENT |\n| | keyword. |\n+------------------------+---------------------------------------------------+\n| PERSISTENT | The column was created with the PERSISTENT |\n| | keyword. (New in 5.3) |\n+------------------------+---------------------------------------------------+\n| VIRTUAL | The column was created with the VIRTUAL keyword. |\n| | (New in 5.3) |\n+------------------------+---------------------------------------------------+\n| on update | The column is a TIMESTAMP column that is |\n| CURRENT_TIMESTAMP | automatically updated on INSERT and UPDATE. |\n+------------------------+---------------------------------------------------+\n\nPrivileges indicates the privileges you have for the column. This value is\ndisplayed only if you use the FULL keyword.\n\nComment indicates any comment the column has. This value is displayed only if\nyou use the FULL keyword.\n\nSHOW FIELDS is a synonym for SHOW COLUMNS. Also DESCRIBE and EXPLAIN can be\nused as shortcuts.\n\nYou can also list a table\'s columns with:\n\nmysqlshow db_name tbl_name\n\nSee the mysqlshow command for more details.\n\nThe DESCRIBE statement provides information similar to SHOW COLUMNS. The\ninformation_schema.COLUMNS table provides similar, but more complete,\ninformation.\n\nThe SHOW CREATE TABLE, SHOW TABLE STATUS, and SHOW INDEX statements also\nprovide information about tables.\n\nExamples\n--------\n\nSHOW COLUMNS FROM city;\n+------------+----------+------+-----+---------+----------------+\n| Field | Type | Null | Key | Default | Extra |\n+------------+----------+------+-----+---------+----------------+\n| Id | int(11) | NO | PRI | NULL | auto_increment |\n| Name | char(35) | NO | | | |\n| Country | char(3) | NO | UNI | | |\n| District | char(20) | YES | MUL | | |\n| Population | int(11) | NO | | 0 | |\n+------------+----------+------+-----+---------+----------------+\n\nSHOW COLUMNS FROM employees WHERE Type LIKE \'Varchar%\';\n+---------------+-------------+------+-----+---------+-------+\n| Field | Type | Null | Key | Default | Extra |\n+---------------+-------------+------+-----+---------+-------+\n| first_name | varchar(30) | NO | MUL | NULL | |\n| last_name | varchar(40) | NO | | NULL | |\n| position | varchar(25) | NO | | NULL | |\n| home_address | varchar(50) | NO | | NULL | |\n| home_phone | varchar(12) | NO | | NULL | |\n| employee_code | varchar(25) | NO | UNI | NULL | |\n+---------------+-------------+------+-----+---------+-------+\n\nURL: https://mariadb.com/kb/en/show-columns/','','https://mariadb.com/kb/en/show-columns/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (338,26,'SHOW CREATE TABLE','Syntax\n------\n\nSHOW CREATE TABLE tbl_name\n\nDescription\n-----------\n\nShows the CREATE TABLE statement that created the given table. The statement\nrequires the SELECT privilege for the table. This statement also works with\nviews and SEQUENCE.\n\nSHOW CREATE TABLE quotes table and column names according to the value of the\nsql_quote_show_create server system variable.\n\nCertain SQL_MODE values can result in parts of the original CREATE statement\nnot being included in the output. MariaDB-specific table options, column\noptions, and index options are not included in the output of this statement if\nthe NO_TABLE_OPTIONS, NO_FIELD_OPTIONS and NO_KEY_OPTIONS SQL_MODE flags are\nused. All MariaDB-specific table attributes are also not shown when a\nnon-MariaDB/MySQL emulation mode is used, which includes ANSI, DB2,\nPOSTGRESQL, MSSQL, MAXDB or ORACLE.\n\nInvalid table options, column options and index options are normally commented\nout (note, that it is possible to create a table with invalid options, by\naltering a table of a different engine, where these options were valid). To\nhave them uncommented, enable the IGNORE_BAD_TABLE_OPTIONS SQL_MODE. Remember\nthat replaying a CREATE TABLE statement with uncommented invalid options will\nfail with an error, unless the IGNORE_BAD_TABLE_OPTIONS SQL_MODE is in effect.\n\nNote that SHOW CREATE TABLE is not meant to provide metadata about a table. It\nprovides information about how the table was declared, but the real table\nstructure could differ a bit. For example, if an index has been declared as\nHASH, the CREATE TABLE statement returned by SHOW CREATE TABLE will declare\nthat index as HASH; however, it is possible that the index is in fact a BTREE,\nbecause the storage engine does not support HASH.\n\nMariaDB starting with 10.2.1\n----------------------------\nMariaDB 10.2.1 permits TEXT and BLOB data types to be assigned a DEFAULT\nvalue. As a result, from MariaDB 10.2.1, SHOW CREATE TABLE will append a\nDEFAULT NULL to nullable TEXT or BLOB fields if no specific default is\nprovided.\n\nMariaDB starting with 10.2.2\n----------------------------\nFrom MariaDB 10.2.2, numbers are no longer quoted in the DEFAULT clause in\nSHOW CREATE statement. Previously, MariaDB quoted numbers.\n\nIndex Order\n-----------\n\nIndexes are sorted and displayed in the following order, which may differ from\nthe order of the CREATE TABLE statement.\n\n* PRIMARY KEY\n* UNIQUE keys where all column are NOT NULL\n* UNIQUE keys that don\'t contain partial segments\n* Other UNIQUE keys\n* LONG UNIQUE keys\n* Normal keys\n* Fulltext keys\n\nSee sql/sql_table.cc for details.\n\nExamples\n--------\n\nSHOW CREATE TABLE t\\G\n*************************** 1. row ***************************\n Table: t\nCreate Table: CREATE TABLE `t` (\n `id` int(11) NOT NULL AUTO_INCREMENT,\n `s` char(60) DEFAULT NULL,\n PRIMARY KEY (`id`)\n) ENGINE=InnoDB DEFAULT CHARSET=latin1\n\nWith sql_quote_show_create off:\n\nSHOW CREATE TABLE t\\G\n*************************** 1. row ***************************\n Table: t\nCreate Table: CREATE TABLE t (\n id int(11) NOT NULL AUTO_INCREMENT,\n s char(60) DEFAULT NULL,\n PRIMARY KEY (id)\n) ENGINE=InnoDB DEFAULT CHARSET=latin1\n\nUnquoted numeric DEFAULTs, from MariaDB 10.2.2:\n\nCREATE TABLE td (link TINYINT DEFAULT 1);\n\nSHOW CREATE TABLE td\\G\n*************************** 1. row ***************************\n Table: td\nCreate Table: CREATE TABLE `td` (\n `link` tinyint(4) DEFAULT 1\n) ENGINE=InnoDB DEFAULT CHARSET=latin1\n\nQuoted numeric DEFAULTs, until MariaDB 10.2.1:\n\nCREATE TABLE td (link TINYINT DEFAULT 1);\n\nSHOW CREATE TABLE td\\G\n*************************** 1. row ***************************\n Table: td\nCreate Table: CREATE TABLE `td` (\n `link` tinyint(4) DEFAULT \'1\'\n) ENGINE=InnoDB DEFAULT CHARSET=latin1\n\nSQL_MODE impacting the output:\n\nSELECT @@sql_mode;\n+------------------------------------------------------------------------------\n------------+\n| @@sql_mode \n |\n+------------------------------------------------------------------------------\n------------+\n|\nSTRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SU\nSTITUTION |\n+------------------------------------------------------------------------------\n------------+\n\nCREATE TABLE `t1` (\n `id` int(11) NOT NULL AUTO_INCREMENT,\n `msg` varchar(100) DEFAULT NULL,\n PRIMARY KEY (`id`)\n ) ENGINE=InnoDB DEFAULT CHARSET=latin1\n;\n\nSHOW CREATE TABLE t1\\G\n*************************** 1. row ***************************\n Table: t1\nCreate Table: CREATE TABLE `t1` (\n `id` int(11) NOT NULL AUTO_INCREMENT,\n `msg` varchar(100) DEFAULT NULL,\n PRIMARY KEY (`id`)\n) ENGINE=InnoDB DEFAULT CHARSET=latin1\n\nSET SQL_MODE=ORACLE;\n\nSHOW CREATE TABLE t1\\G\n*************************** 1. row ***************************\n Table: t1\nCreate Table: CREATE TABLE \"t1\" (\n \"id\" int(11) NOT NULL,\n \"msg\" varchar(100) DEFAULT NULL,\n PRIMARY KEY (\"id\")\n\nURL: https://mariadb.com/kb/en/show-create-table/','','https://mariadb.com/kb/en/show-create-table/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (339,26,'SHOW INDEX','Syntax\n------\n\nSHOW {INDEX | INDEXES | KEYS} \n FROM tbl_name [FROM db_name]\n [WHERE expr]\n\nDescription\n-----------\n\nSHOW INDEX returns table index information. The format resembles that of the\nSQLStatistics call in ODBC.\n\nYou can use db_name.tbl_name as an alternative to the tbl_name FROM db_name\nsyntax. These two statements are equivalent:\n\nSHOW INDEX FROM mytable FROM mydb;\nSHOW INDEX FROM mydb.mytable;\n\nSHOW KEYS and SHOW INDEXES are synonyms for SHOW INDEX.\n\nYou can also list a table\'s indexes with the mariadb-show/mysqlshow command:\n\nmysqlshow -k db_name tbl_name\n\nThe information_schema.STATISTICS table stores similar information.\n\nThe following fields are returned by SHOW INDEX.\n\n+------------------------+---------------------------------------------------+\n| Field | Description |\n+------------------------+---------------------------------------------------+\n| Table | Table name |\n+------------------------+---------------------------------------------------+\n| Non_unique | 1 if the index permits duplicate values, 0 if |\n| | values must be unique. |\n+------------------------+---------------------------------------------------+\n| Key_name | Index name. The primary key is always named |\n| | PRIMARY. |\n+------------------------+---------------------------------------------------+\n| Seq_in_index | The column\'s sequence in the index, beginning |\n| | with 1. |\n+------------------------+---------------------------------------------------+\n| Column_name | Column name. |\n+------------------------+---------------------------------------------------+\n| Collation | Either A, if the column is sorted in ascending |\n| | order in the index, or NULL if it\'s not sorted. |\n+------------------------+---------------------------------------------------+\n| Cardinality | Estimated number of unique values in the index. |\n| | The cardinality statistics are calculated at |\n| | various times, and can help the optimizer make |\n| | improved decisions. |\n+------------------------+---------------------------------------------------+\n| Sub_part | NULL if the entire column is included in the |\n| | index, or the number of included characters if |\n| | not. |\n+------------------------+---------------------------------------------------+\n| Packed | NULL if the index is not packed, otherwise how |\n| | the index is packed. |\n+------------------------+---------------------------------------------------+\n| Null | NULL if NULL values are permitted in the column, |\n| | an empty string if NULLs are not permitted. |\n+------------------------+---------------------------------------------------+\n| Index_type | The index type, which can be BTREE, FULLTEXT, |\n| | HASH or RTREE. See Storage Engine Index Types. |\n+------------------------+---------------------------------------------------+\n| Comment | Other information, such as whether the index is |\n| | disabled. |\n+------------------------+---------------------------------------------------+\n| Index_comment | Contents of the COMMENT attribute when the index |\n| | was created. |\n+------------------------+---------------------------------------------------+\n| Ignored | Whether or not an index will be ignored by the |\n| | optimizer. See Ignored Indexes. From MariaDB |\n| | 10.6.0. |\n+------------------------+---------------------------------------------------+\n\nThe WHERE and LIKE clauses can be given to select rows using more general\nconditions, as discussed in Extended SHOW.\n\nExamples\n--------\n\nCREATE TABLE IF NOT EXISTS `employees_example` (\n `id` int(11) NOT NULL AUTO_INCREMENT,\n `first_name` varchar(30) NOT NULL,\n `last_name` varchar(40) NOT NULL,\n `position` varchar(25) NOT NULL,\n `home_address` varchar(50) NOT NULL,\n `home_phone` varchar(12) NOT NULL,\n `employee_code` varchar(25) NOT NULL,\n PRIMARY KEY (`id`),\n UNIQUE KEY `employee_code` (`employee_code`),\n KEY `first_name` (`first_name`,`last_name`)\n) ENGINE=Aria;\n\nINSERT INTO `employees_example` (`first_name`, `last_name`, `position`,\n`home_address`, `home_phone`, `employee_code`)\n VALUES\n (\'Mustapha\', \'Mond\', \'Chief Executive Officer\', \'692 Promiscuous Plaza\',\n\'326-555-3492\', \'MM1\'),\n (\'Henry\', \'Foster\', \'Store Manager\', \'314 Savage Circle\', \'326-555-3847\',\n\'HF1\'),\n (\'Bernard\', \'Marx\', \'Cashier\', \'1240 Ambient Avenue\', \'326-555-8456\', \'BM1\'),\n (\'Lenina\', \'Crowne\', \'Cashier\', \'281 Bumblepuppy Boulevard\', \'328-555-2349\',\n\'LC1\'),\n (\'Fanny\', \'Crowne\', \'Restocker\', \'1023 Bokanovsky Lane\', \'326-555-6329\',\n\'FC1\'),\n (\'Helmholtz\', \'Watson\', \'Janitor\', \'944 Soma Court\', \'329-555-2478\', \'HW1\');\n\nSHOW INDEXES FROM employees_example\\G\n*************************** 1. row ***************************\n Table: employees_example\n Non_unique: 0\n Key_name: PRIMARY\n Seq_in_index: 1\n Column_name: id\n Collation: A\n Cardinality: 6\n Sub_part: NULL\n Packed: NULL\n Null:\n Index_type: BTREE\n Comment:\nIndex_comment: \n Ignored: NO\n*************************** 2. row ***************************\n Table: employees_example\n Non_unique: 0\n Key_name: employee_code\n Seq_in_index: 1\n Column_name: employee_code\n Collation: A\n Cardinality: 6\n Sub_part: NULL\n Packed: NULL\n Null:\n Index_type: BTREE\n Comment:\nIndex_comment: \n Ignored: NO\n*************************** 3. row ***************************\n Table: employees_example\n Non_unique: 1\n Key_name: first_name\n Seq_in_index: 1\n Column_name: first_name\n Collation: A\n Cardinality: NULL\n Sub_part: NULL\n Packed: NULL\n Null:\n Index_type: BTREE\n Comment:\nIndex_comment: \n Ignored: NO\n*************************** 4. row ***************************\n Table: employees_example\n Non_unique: 1\n Key_name: first_name\n Seq_in_index: 2\n Column_name: last_name\n Collation: A\n Cardinality: NULL\n Sub_part: NULL\n Packed: NULL\n Null:\n Index_type: BTREE\n Comment:\nIndex_comment: \n Ignored: NO\n\nURL: https://mariadb.com/kb/en/show-index/','','https://mariadb.com/kb/en/show-index/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (340,26,'SHOW EXPLAIN','Syntax\n------\n\nSHOW EXPLAIN [FORMAT=JSON] FOR <connection_id>;\nEXPLAIN [FORMAT=JSON] FOR CONNECTION <connection_id>;\n\nDescription\n-----------\n\nThe SHOW EXPLAIN command allows one to get an EXPLAIN (that is, a description\nof a query plan) of a query running in a certain connection.\n\nSHOW EXPLAIN FOR <connection_id>;\n\nwill produce an EXPLAIN output for the query that connection number\nconnection_id is running. The connection id can be obtained with SHOW\nPROCESSLIST.\n\nSHOW EXPLAIN FOR 1;\n+------+-------------+-------+-------+---------------+------+---------+------+-\n-------+-------------+\n| id | select_type | table | type | possible_keys | key | key_len | ref |\nrows | Extra |\n+------+-------------+-------+-------+---------------+------+---------+------+-\n-------+-------------+\n| 1 | SIMPLE | tbl | index | NULL | a | 5 | NULL |\n1000107 | Using index |\n+------+-------------+-------+-------+---------------+------+---------+------+-\n-------+-------------+\n1 row in set, 1 warning (0.00 sec)\n\nThe output is always accompanied with a warning which shows the query the\ntarget connection is running (this shows what the EXPLAIN is for):\n\nSHOW WARNINGS;\n+-------+------+------------------------+\n| Level | Code | Message |\n+-------+------+------------------------+\n| Note | 1003 | select sum(a) from tbl |\n+-------+------+------------------------+\n1 row in set (0.00 sec)\n\nEXPLAIN FOR CONNECTION\n----------------------\n\nMariaDB starting with 10.9\n--------------------------\nThe EXPLAIN FOR CONNECTION syntax was added for MySQL compatibility.\n\nFORMAT=JSON\n-----------\n\nMariaDB starting with 10.9\n--------------------------\nSHOW EXPLAIN [FORMAT=JSON] FOR <connection_id> extends SHOW EXPLAIN to return\nmore detailed JSON output.\n\nPossible Errors\n---------------\n\nThe output can be only produced if the target connection is currently running\na query, which has a ready query plan. If this is not the case, the output\nwill be:\n\nSHOW EXPLAIN FOR 2;\nERROR 1932 (HY000): Target is not running an EXPLAINable command\n\nYou will get this error when:\n\n* the target connection is not running a command for which one can run EXPLAIN\n* the target connection is running a command for which one can run EXPLAIN, but\nthere is no query plan yet (for example, tables are open and locks are\n acquired before the query plan is produced)\n\nDifferences Between SHOW EXPLAIN and EXPLAIN Outputs\n----------------------------------------------------\n\nBackground\n----------\n\nIn MySQL, EXPLAIN execution takes a slightly different route from the way the\nreal query (typically the SELECT) is optimized. This is unfortunate, and has\ncaused a number of bugs in EXPLAIN. (For example, see MDEV-326, MDEV-410, and\nlp:1013343. lp:992942 is not directly about EXPLAIN, but it also would not\nhave existed if MySQL didn\'t try to delete parts of a query plan in the middle\nof the query)\n\nSHOW EXPLAIN examines a running SELECT, and hence its output may be slightly\ndifferent from what EXPLAIN SELECT would produce. We did our best to make sure\nthat either the difference is negligible, or SHOW EXPLAIN\'s output is closer\nto reality than EXPLAIN\'s output.\n\nList of Recorded Differences\n----------------------------\n\n* SHOW EXPLAIN may have Extra=\'no matching row in const table\', where EXPLAIN\nwould produce Extra=\'Impossible WHERE ...\'\n* For queries with subqueries, SHOW EXPLAIN may print select_type==PRIMARY\nwhere regular EXPLAIN used to print select_type==SIMPLE, or vice versa.\n\nRequired Permissions\n--------------------\n\nRunning SHOW EXPLAIN requires the same permissions as running SHOW PROCESSLIST\nwould.\n\nURL: https://mariadb.com/kb/en/show-explain/','','https://mariadb.com/kb/en/show-explain/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (341,26,'BACKUP STAGE','MariaDB starting with 10.4.1\n----------------------------\nThe BACKUP STAGE commands were introduced in MariaDB 10.4.1.\n\nThe BACKUP STAGE commands are a set of commands to make it possible to make an\nefficient external backup tool.\n\nSyntax\n------\n\nBACKUP STAGE [START | FLUSH | BLOCK_DDL | BLOCK_COMMIT | END ]\n\nIn the following text, a transactional table means InnoDB or \"InnoDB-like\nengine with redo log that can lock redo purges and can be copied without locks\nby an outside process\".\n\nGoals with BACKUP STAGE Commands\n--------------------------------\n\n* To be able to do a majority of the backup with the minimum possible server\nlocks. Especially for transactional tables (InnoDB, MyRocks etc) there is only\nneed for a very short block of new commits while copying statistics and log\ntables.\n* DDL are only needed to be blocked for a very short duration of the backup\nwhile mariabackup is copying the tables affected by DDL during the initial\npart of the backup.\n* Most non transactional tables (those that are not in use) will be copied\nduring BACKUP STAGE START. The exceptions are system statistic and log tables\nthat are not blocked during the backup until BLOCK_COMMIT.\n* Should work efficiently with backup tools that use disk snapshots.\n* Should work as efficiently as possible for all table types that store data\non the local disks.\n* As little copying as possible under higher level stages/locks. For example,\n.frm (dictionary) and .trn (trigger) files should be copying while copying the\ntable data.\n\nBACKUP STAGE Commands\n---------------------\n\nBACKUP STAGE START\n------------------\n\nThe START stage is designed for the following tasks:\n\n* Blocks purge of redo files for storage engines that needs this (Aria)\n* Start logging of DDL commands into \'datadir\'/ddl.log. This may take a short\ntime as the command has to wait until there are no active DDL commands.\n\nBACKUP STAGE FLUSH\n------------------\n\nThe FLUSH stage is designed for the following tasks:\n\n* FLUSH all changes for inactive non-transactional tables, except for\nstatistics and log tables.\n* Close all tables that are not in use, to ensure they are marked as closed\nfor the backup.\n* BLOCK all new write locks for all non transactional tables (except\nstatistics and log tables). The command will not wait for tables that are in\nuse by read-only transactions.\n\nDDLs don\'t have to be blocked at this stage as they can\'t cause the table to\nbe in an inconsistent state. This is true also for non-transactional tables.\n\nBACKUP STAGE BLOCK_DDL\n----------------------\n\nThe BLOCK_DDL stage is designed for the following tasks:\n\n* Wait for all statements using write locked non-transactional tables to end.\n* Blocks CREATE TABLE, DROP TABLE, TRUNCATE TABLE, and RENAME TABLE.\n* Blocks also start off a new ALTER TABLE and the final rename phase of ALTER\nTABLE. Running ALTER TABLES are not blocked.\n\nBACKUP STAGE BLOCK_COMMIT\n-------------------------\n\nThe BLOCK_COMMIT stage is designed for the following tasks:\n\n* Lock the binary log and commit/rollback to ensure that no changes are\ncommitted to any tables. If there are active commits or data to be copied to\nthe binary log this will be allowed to finish. Active transactions will not\naffect BLOCK_COMMIT.\n* This doesn\'t lock temporary tables that are not used by replication. However\nthese will be blocked when it\'s time to write to the binary log.\n* Lock system log tables and statistics tables, flush them and mark them\nclosed.\n\nWhen the BLOCK_COMMIT\'s stages return, this is the \'backup time\'. Everything\ncommitted will be in the backup and everything not committed will roll back.\n\nTransactional engines will continue to do changes to the redo log during the\nBLOCK COMMIT stage, but this is not important as all of these will roll back\nlater as the changes will not be committed.\n\nBACKUP STAGE END\n----------------\n\nThe END stage is designed for the following tasks:\n\n* End DDL logging\n* Free resources\n\nUsing BACKUP STAGE Commands with Backup Tools\n---------------------------------------------\n\nUsing BACKUP STAGE Commands with Mariabackup\n--------------------------------------------\n\nThe BACKUP STAGE commands are a set of commands to make it possible to make an\nefficient external backup tool. How Mariabackup uses these commands depends on\nwhether you are using the version that is bundled with MariaDB Community\nServer or the version that is bundled with MariaDB Enterprise Server. See\nMariabackup and BACKUP STAGE Commands for some examples on how Mariabackup\nuses these commands.\n\nIf you would like to use a version of Mariabackup that uses the BACKUP STAGE\ncommands in an efficient way, then one option is to use MariaDB Enterprise\nBackup that is bundled with MariaDB Enterprise Server.\n\nUsing BACKUP STAGE Commands with Storage Snapshots\n--------------------------------------------------\n\nThe BACKUP STAGE commands are a set of commands to make it possible to make an\nefficient external backup tool. These commands could even be used by tools\nthat perform backups by taking a snapshot of a file system, SAN, or some other\nkind of storage device. See Storage Snapshots and BACKUP STAGE Commands for\nsome examples on how to use each BACKUP STAGE command in an efficient way.\n\nPrivileges\n----------\n\nBACKUP STAGE requires the RELOAD privilege.\n\nNotes\n-----\n\n* Only one connection can run BACKUP STAGE START. If a second connection\ntries, it will wait until the first one has executed BACKUP STAGE END.\n* If the user skips a BACKUP STAGE, then all intermediate backup stages will\nautomatically be run. This will allow us to add new stages within the BACKUP\nSTAGE hierarchy in the future with even more precise locks without causing\nproblems for tools using an earlier version of the BACKUP STAGE implementation.\n* One can use the max_statement_time or lock_wait_timeout system variables to\nensure that a BACKUP STAGE command doesn\'t block the server too long.\n* DDL logging will only be available in MariaDB Enterprise Server 10.2 and\nlater.\n* A disconnect will automatically release backup stages.\n* There is no easy way to see which is the current stage.\n\nURL: https://mariadb.com/kb/en/backup-stage/','','https://mariadb.com/kb/en/backup-stage/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (342,26,'BACKUP LOCK','MariaDB starting with 10.4.2\n----------------------------\nThe BACKUP LOCK command was introduced in MariaDB 10.4.2.\n\nBACKUP LOCK blocks a table from DDL statements. This is mainly intended to be\nused by tools like mariabackup that need to ensure there are no DDLs on a\ntable while the table files are opened. For example, for an Aria table that\nstores data in 3 files with extensions .frm, .MAI and .MAD. Normal read/write\noperations can continue as normal.\n\nSyntax\n------\n\nTo lock a table:\n\nBACKUP LOCK table_name\n\nTo unlock a table:\n\nBACKUP UNLOCK\n\nUsage in a Backup Tool\n----------------------\n\nBACKUP LOCK [database.]table_name;\n - Open all files related to a table (for example, t.frm, t.MAI and t.MYD)\nBACKUP UNLOCK;\n- Copy data\n- Close files\n\nThis ensures that all files are from the same generation, that is created at\nthe same time by the MariaDB server. This works, because the open files will\npoint to the original table files which will not be affected if there is any\nALTER TABLE while copying the files.\n\nPrivileges\n----------\n\nBACKUP LOCK requires the RELOAD privilege.\n\nNotes\n-----\n\n* The idea is that the BACKUP LOCK should be held for as short a time as\npossible by the backup tool. The time to take an uncontested lock is very\nshort! One can easily do 50,000 locks/unlocks per second on low end hardware.\n* One should use different connections for BACKUP STAGE commands and BACKUP\nLOCK.\n\nImplementation\n--------------\n\n* Internally, BACKUP LOCK is implemented by taking an MDLSHARED_HIGH_PRIO MDL\nlock on the table object, which protects the table from any DDL operations.\n\nURL: https://mariadb.com/kb/en/backup-lock/','','https://mariadb.com/kb/en/backup-lock/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (343,26,'FLUSH','Syntax\n------\n\nFLUSH [NO_WRITE_TO_BINLOG | LOCAL]\n flush_option [, flush_option] ...\n\nor when flushing tables:\n\nFLUSH [NO_WRITE_TO_BINLOG | LOCAL] TABLES [table_list] [table_flush_option]\n\nwhere table_list is a list of tables separated by , (comma).\n\nDescription\n-----------\n\nThe FLUSH statement clears or reloads various internal caches used by MariaDB.\nTo execute FLUSH, you must have the RELOAD privilege. See GRANT.\n\nThe RESET statement is similar to FLUSH. See RESET.\n\nYou cannot issue a FLUSH statement from within a stored function or a trigger.\nDoing so within a stored procedure is permitted, as long as it is not called\nby a stored function or trigger. See Stored Routine Limitations, Stored\nFunction Limitations and Trigger Limitations.\n\nIf a listed table is a view, an error like the following will be produced:\n\nERROR 1347 (HY000): \'test.v\' is not BASE TABLE\n\nBy default, FLUSH statements are written to the binary log and will be\nreplicated. The NO_WRITE_TO_BINLOG keyword (LOCAL is an alias) will ensure the\nstatement is not written to the binary log.\n\nThe different flush options are:\n\n+---------------------------+------------------------------------------------+\n| Option | Description |\n+---------------------------+------------------------------------------------+\n| CHANGED_PAGE_BITMAPS | XtraDB only. Internal command used for backup |\n| | purposes. See the Information Schema |\n| | CHANGED_PAGE_BITMAPS Table. |\n+---------------------------+------------------------------------------------+\n| CLIENT_STATISTICS | Reset client statistics (see SHOW |\n| | CLIENT_STATISTICS). |\n+---------------------------+------------------------------------------------+\n| DES_KEY_FILE | Reloads the DES key file (Specified with the |\n| | --des-key-file startup option). |\n+---------------------------+------------------------------------------------+\n| HOSTS | Flush the hostname cache (used for converting |\n| | ip to host names and for unblocking blocked |\n| | hosts. See max_connect_errors and |\n| | performance_schema.host_cache |\n+---------------------------+------------------------------------------------+\n| INDEX_STATISTICS | Reset index statistics (see SHOW |\n| | INDEX_STATISTICS). |\n+---------------------------+------------------------------------------------+\n| [ERROR | ENGINE | | Close and reopen the specified log type, or |\n| GENERAL | SLOW | BINARY | all log types if none are specified. FLUSH |\n| | RELAY] LOGS | RELAY LOGS [connection-name] can be used to |\n| | flush the relay logs for a specific |\n| | connection. Only one connection can be |\n| | specified per FLUSH command. See Multi-source |\n| | replication. FLUSH ENGINE LOGS will delete |\n| | all unneeded Aria redo logs. Since MariaDB |\n| | 10.1.30 and MariaDB 10.2.11, FLUSH BINARY |\n| | LOGS DELETE_DOMAIN_ID=(list-of-domains) can |\n| | be used to discard obsolete GTID domains from |\n| | the server\'s binary log state. In order for |\n| | this to be successful, no event group from |\n| | the listed GTID domains can be present in |\n| | existing binary log files. If some still |\n| | exist, then they must be purged prior to |\n| | executing this command. If the command |\n| | completes successfully, then it also rotates |\n| | the binary log. |\n+---------------------------+------------------------------------------------+\n| MASTER | Deprecated option, use RESET MASTER instead. |\n+---------------------------+------------------------------------------------+\n| PRIVILEGES | Reload all privileges from the privilege |\n| | tables in the mysql database. If the server |\n| | is started with --skip-grant-table option, |\n| | this will activate the privilege tables again. |\n+---------------------------+------------------------------------------------+\n| QUERY CACHE | Defragment the query cache to better utilize |\n| | its memory. If you want to reset the query |\n| | cache, you can do it with RESET QUERY CACHE. |\n+---------------------------+------------------------------------------------+\n| QUERY_RESPONSE_TIME | See the QUERY_RESPONSE_TIME plugin. |\n+---------------------------+------------------------------------------------+\n| SLAVE | Deprecated option, use RESET REPLICA or RESET |\n| | SLAVE instead. |\n+---------------------------+------------------------------------------------+\n| SSL | Used to dynamically reinitialize the server\'s |\n| | TLS context by reloading the files defined by |\n| | several TLS system variables. See FLUSH SSL |\n| | for more information. This command was first |\n| | added in MariaDB 10.4.1. |\n+---------------------------+------------------------------------------------+\n| STATUS | Resets all server status variables that can |\n| | be reset to 0. Not all global status |\n| | variables support this, so not all global |\n| | values are reset. See FLUSH STATUS for more |\n| | information. |\n+---------------------------+------------------------------------------------+\n| TABLE | Close tables given as options or all open |\n| | tables if no table list was used. From |\n| | MariaDB 10.4.1, using without any table list |\n| | will only close tables not in use, and tables |\n| | not locked by the FLUSH TABLES connection. If |\n| | there are no locked tables, FLUSH TABLES will |\n| | be instant and will not cause any waits, as |\n| | it no longer waits for tables in use. When a |\n| | table list is provided, from MariaDB 10.4.1, |\n| | the server will wait for the end of any |\n| | transactions that are using the tables. |\n| | Previously, FLUSH TABLES only waited for the |\n| | statements to complete. |\n+---------------------------+------------------------------------------------+\n| TABLES | Same as FLUSH TABLE. |\n+---------------------------+------------------------------------------------+\n| TABLES ... FOR EXPORT | For InnoDB tables, flushes table changes to |\n| | disk to permit binary table copies while the |\n| | server is running. See FLUSH TABLES ... FOR |\n| | EXPORT for more. |\n+---------------------------+------------------------------------------------+\n| TABLES WITH READ LOCK | Closes all open tables. New tables are only |\n| | allowed to be opened with read locks until an |\n| | UNLOCK TABLES is given. |\n+---------------------------+------------------------------------------------+\n| TABLES WITH READ LOCK | As TABLES WITH READ LOCK but also disable all |\n| AND DISABLE CHECKPOINT | checkpoint writes by transactional table |\n| | engines. This is useful when doing a disk |\n| | snapshot of all tables. |\n+---------------------------+------------------------------------------------+\n| TABLE_STATISTICS | Reset table statistics (see SHOW |\n| | TABLE_STATISTICS). |\n+---------------------------+------------------------------------------------+\n| USER_RESOURCES | Resets all per hour user resources. This |\n| | enables clients that have exhausted their |\n| | resources to connect again. |\n+---------------------------+------------------------------------------------+\n| USER_STATISTICS | Reset user statistics (see SHOW |\n| | USER_STATISTICS). |\n+---------------------------+------------------------------------------------+\n| USER_VARIABLES | Reset user variables (see User-defined |\n| | variables). |\n+---------------------------+------------------------------------------------+\n\nYou can also use the mysqladmin client to flush things. Use mysqladmin --help\nto examine what flush commands it supports.\n\nFLUSH RELAY LOGS\n----------------\n\nFLUSH RELAY LOGS \'connection_name\';\n\nCompatibility with MySQL\n------------------------\n\nMariaDB starting with 10.7.0\n----------------------------\nThe FOR CHANNEL keyword was added for MySQL compatibility. This is identical\nas using the channel_name directly after the FLUSH command.\n\nFor example, one can now use:\n\nFLUSH RELAY LOGS FOR CHANNEL \'connection_name\';\n\nFLUSH STATUS\n------------\n\nServer status variables can be reset by executing the following:\n\nFLUSH STATUS;\n\nGlobal Status Variables that Support FLUSH STATUS\n-------------------------------------------------\n\nNot all global status variables support being reset by FLUSH STATUS.\nCurrently, the following status variables are reset by FLUSH STATUS:\n\n* Aborted_clients\n* Aborted_connects\n* Binlog_cache_disk_use\n* Binlog_cache_use\n* Binlog_stmt_cache_disk_use\n* Binlog_stmt_cache_use\n* Connection_errors_accept\n* Connection_errors_internal\n* Connection_errors_max_connections\n* Connection_errors_peer_address\n* Connection_errors_select\n* Connection_errors_tcpwrap\n* Created_tmp_files\n* Delayed_errors\n* Delayed_writes\n* Feature_check_constraint\n* Feature_delay_key_write\n* Max_used_connections\n* Opened_plugin_libraries\n* Performance_schema_accounts_lost\n* Performance_schema_cond_instances_lost\n* Performance_schema_digest_lost\n* Performance_schema_file_handles_lost\n* Performance_schema_file_instances_lost\n* Performance_schema_hosts_lost\n* Performance_schema_locker_lost\n* Performance_schema_mutex_instances_lost\n* Performance_schema_rwlock_instances_lost\n* Performance_schema_session_connect_attrs_lost\n* Performance_schema_socket_instances_lost\n* Performance_schema_stage_classes_lost\n* Performance_schema_statement_classes_lost\n* Performance_schema_table_handles_lost\n* Performance_schema_table_instances_lost\n* Performance_schema_thread_instances_lost\n* Performance_schema_users_lost\n* Qcache_hits\n* Qcache_inserts\n* Qcache_lowmem_prunes\n* Qcache_not_cached\n* Rpl_semi_sync_master_no_times\n* Rpl_semi_sync_master_no_tx\n* Rpl_semi_sync_master_timefunc_failures\n* Rpl_semi_sync_master_wait_pos_backtraverse\n* Rpl_semi_sync_master_yes_tx\n* Rpl_transactions_multi_engine\n* Server_audit_writes_failed\n* Slave_retried_transactions\n* Slow_launch_threads\n* Ssl_accept_renegotiates\n* Ssl_accepts\n* Ssl_callback_cache_hits\n* Ssl_client_connects\n* Ssl_connect_renegotiates\n* Ssl_ctx_verify_depth\n* Ssl_ctx_verify_mode\n* Ssl_finished_accepts\n* Ssl_finished_connects\n* Ssl_session_cache_hits\n* Ssl_session_cache_misses\n* Ssl_session_cache_overflows\n* Ssl_session_cache_size\n* Ssl_session_cache_timeouts\n* Ssl_sessions_reused\n* Ssl_used_session_cache_entries\n* Subquery_cache_hit\n* Subquery_cache_miss\n* Table_locks_immediate\n* Table_locks_waited\n* Tc_log_max_pages_used\n* Tc_log_page_waits\n* Transactions_gtid_foreign_engine\n* Transactions_multi_engine\n\nThe different usage of FLUSH TABLES\n-----------------------------------\n\nThe purpose of FLUSH TABLES\n---------------------------\n\nThe purpose of FLUSH TABLES is to clean up the open table cache and table\ndefinition cache from not in use tables. This frees up memory and file\ndescriptors. Normally this is not needed as the caches works on a FIFO bases,\nbut can be useful if the server seams to use up to much memory for some reason.\n\nThe purpose of FLUSH TABLES WITH READ LOCK \n-------------------------------------------\n\nFLUSH TABLES WITH READ LOCK is useful if you want to take a backup of some\ntables. When FLUSH TABLES WITH READ LOCK returns, all write access to tables\nare blocked and all tables are marked as \'properly closed\' on disk. The tables\ncan still be used for read operations.\n\nThe purpose of FLUSH TABLES table_list\n--------------------------------------\n\nFLUSH TABLES table_list is useful if you want to copy a table object/files to\nor from the server. This command puts a lock that stops new users of the table\nand will wait until everyone has stopped using the table. The table is then\nremoved from the table definition and table cache.\n\nNote that it\'s up to the user to ensure that no one is accessing the table\nbetween FLUSH TABLES and the table is copied to or from the server. This can\nbe secured by using LOCK TABLES.\n','','https://mariadb.com/kb/en/flush/');
-update help_topic set description = CONCAT(description, '\nIf there are any tables locked by the connection that is using FLUSH TABLES\nall the locked tables will be closed as part of the flush and reopened and\nrelocked before FLUSH TABLES returns. This allows one to copy the table after\nFLUSH TABLES returns without having any writes on the table. For now this\nworks works with most tables, except InnoDB as InnoDB may do background purges\non the table even while it\'s write locked.\n\nThe purpose of FLUSH TABLES table_list WITH READ LOCK\n-----------------------------------------------------\n\nFLUSH TABLES table_list WITH READ LOCK should work as FLUSH TABLES WITH READ\nLOCK, but only those tables that are listed will be properly closed. However\nin practice this works exactly like FLUSH TABLES WITH READ LOCK as the FLUSH\ncommand has anyway to wait for all WRITE operations to end because we are\ndepending on a global read lock for this code. In the future we should\nconsider fixing this to instead use meta data locks.\n\nImplementation of FLUSH TABLES commands in MariaDB 10.4.8 and above\n-------------------------------------------------------------------\n\nImplementation of FLUSH TABLES\n------------------------------\n\n* Free memory and file descriptors not in use\n\nImplementation of FLUSH TABLES WITH READ LOCK\n---------------------------------------------\n\n* Lock all tables read only for simple old style backup.\n* All background writes are suspended and tables are marked as closed.\n* No statement requiring table changes are allowed for any user until UNLOCK\nTABLES.\n\nInstead of using FLUSH TABLE WITH READ LOCK one should in most cases instead\nuse BACKUP STAGE BLOCK_COMMIT.\n\nImplementation of FLUSH TABLES table_list\n-----------------------------------------\n\n* Free memory and file descriptors for tables not in use from table list.\n* Lock given tables as read only.\n* Wait until all translations has ended that uses any of the given tables.\n* Wait until all background writes are suspended and tables are marked as\nclosed.\n\nImplementation of FLUSH TABLES table_list FOR EXPORT\n----------------------------------------------------\n\n* Free memory and file descriptors for tables not in use from table list\n* Lock given tables as read.\n* Wait until all background writes are suspended and tables are marked as\nclosed.\n* Check that all tables supports FOR EXPORT\n* No changes to these tables allowed until UNLOCK TABLES\n\nThis is basically the same behavior as in old MariaDB version if one first\nlock the tables, then do FLUSH TABLES. The tables will be copyable until\nUNLOCK TABLES.\n\nFLUSH SSL\n---------\n\nMariaDB starting with 10.4\n--------------------------\nThe FLUSH SSL command was first added in MariaDB 10.4.\n\nIn MariaDB 10.4 and later, the FLUSH SSL command can be used to dynamically\nreinitialize the server\'s TLS context. This is most useful if you need to\nreplace a certificate that is about to expire without restarting the server.\n\nThis operation is performed by reloading the files defined by the following\nTLS system variables:\n\n* ssl_cert\n* ssl_key\n* ssl_ca\n* ssl_capath\n* ssl_crl\n* ssl_crlpath\n\nThese TLS system variables are not dynamic, so their values can not be changed\nwithout restarting the server.\n\nIf you want to dynamically reinitialize the server\'s TLS context, then you\nneed to change the certificate and key files at the relevant paths defined by\nthese TLS system variables, without actually changing the values of the\nvariables. See MDEV-19341 for more information.\n\nReducing Memory Usage\n---------------------\n\nTo flush some of the global caches that take up memory, you could execute the\nfollowing command:\n\nFLUSH LOCAL HOSTS,\n QUERY CACHE,\n TABLE_STATISTICS,\n INDEX_STATISTICS,\n USER_STATISTICS;\n\nURL: https://mariadb.com/kb/en/flush/') WHERE help_topic_id = 343;
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (344,26,'FLUSH QUERY CACHE','Description\n-----------\n\nYou can defragment the query cache to better utilize its memory with the FLUSH\nQUERY CACHE statement. The statement does not remove any queries from the\ncache.\n\nThe RESET QUERY CACHE statement removes all query results from the query\ncache. The FLUSH TABLES statement also does this.\n\nURL: https://mariadb.com/kb/en/flush-query-cache/','','https://mariadb.com/kb/en/flush-query-cache/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (345,26,'FLUSH TABLES FOR EXPORT','Syntax\n------\n\nFLUSH TABLES table_name [, table_name] FOR EXPORT\n\nDescription\n-----------\n\nFLUSH TABLES ... FOR EXPORT flushes changes to the specified tables to disk so\nthat binary copies can be made while the server is still running. This works\nfor Archive, Aria, CSV, InnoDB, MyISAM, MERGE, and XtraDB tables.\n\nThe table is read locked until one has issued UNLOCK TABLES.\n\nIf a storage engine does not support FLUSH TABLES FOR EXPORT, a 1031 error\n(SQLSTATE \'HY000\') is produced.\n\nIf FLUSH TABLES ... FOR EXPORT is in effect in the session, the following\nstatements will produce an error if attempted:\n\n* FLUSH TABLES WITH READ LOCK\n* FLUSH TABLES ... WITH READ LOCK\n* FLUSH TABLES ... FOR EXPORT\n* Any statement trying to update any table\n\nIf any of the following statements is in effect in the session, attempting\nFLUSH TABLES ... FOR EXPORT will produce an error.\n\n* FLUSH TABLES ... WITH READ LOCK\n* FLUSH TABLES ... FOR EXPORT\n* LOCK TABLES ... READ\n* LOCK TABLES ... WRITE\n\nFLUSH FOR EXPORT is not written to the binary log.\n\nThis statement requires the RELOAD and the LOCK TABLES privileges.\n\nIf one of the specified tables cannot be locked, none of the tables will be\nlocked.\n\nIf a table does not exist, an error like the following will be produced:\n\nERROR 1146 (42S02): Table \'test.xxx\' doesn\'t exist\n\nIf a table is a view, an error like the following will be produced:\n\nERROR 1347 (HY000): \'test.v\' is not BASE TABLE\n\nExample\n-------\n\nFLUSH TABLES test.t1 FOR EXPORT;\n# Copy files related to the table (see below)\nUNLOCK TABLES;\n\nFor a full description, please see copying MariaDB tables.\n\nURL: https://mariadb.com/kb/en/flush-tables-for-export/','','https://mariadb.com/kb/en/flush-tables-for-export/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (346,26,'SHOW RELAYLOG EVENTS','The terms master and slave have historically been used in replication, but the\nterms terms primary and replica are now preferred. The old terms are used\nstill used in parts of the documentation, and in MariaDB commands, although\nMariaDB 10.5 has begun the process of renaming. The documentation process is\nongoing. See MDEV-18777 to follow progress on this effort.\n\nSyntax\n------\n\nSHOW RELAYLOG [\'connection_name\'] EVENTS\n [IN \'log_name\'] [FROM pos] [LIMIT [offset,] row_count]\n [ FOR CHANNEL \'channel_name\']\n\nDescription\n-----------\n\nOn replicas, this command shows the events in the relay log. If \'log_name\' is\nnot specified, the first relay log is shown.\n\nSyntax for the LIMIT clause is the same as for SELECT ... LIMIT.\n\nUsing the LIMIT clause is highly recommended because the SHOW RELAYLOG EVENTS\ncommand returns the complete contents of the relay log, which can be quite\nlarge.\n\nThis command does not return events related to setting user and system\nvariables. If you need those, use mariadb-binlog/mysqlbinlog.\n\nOn the primary, this command does nothing.\n\nRequires the REPLICA MONITOR privilege (>= MariaDB 10.5.9), the REPLICATION\nSLAVE ADMIN privilege (>= MariaDB 10.5.2) or the REPLICATION SLAVE privilege\n(<= MariaDB 10.5.1).\n\nconnection_name\n---------------\n\nIf there is only one nameless primary, or the default primary (as specified by\nthe default_master_connection system variable) is intended, connection_name\ncan be omitted. If provided, the SHOW RELAYLOG statement will apply to the\nspecified primary. connection_name is case-insensitive.\n\nMariaDB starting with 10.7.0\n----------------------------\nThe FOR CHANNEL keyword was added for MySQL compatibility. This is identical\nas using the channel_name directly after SHOW RELAYLOG.\n\nURL: https://mariadb.com/kb/en/show-relaylog-events/','','https://mariadb.com/kb/en/show-relaylog-events/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (347,26,'SHOW SLAVE STATUS','Syntax\n------\n\nSHOW SLAVE [\"connection_name\"] STATUS [FOR CHANNEL \"connection_name\"]\nSHOW REPLICA [\"connection_name\"] STATUS -- From MariaDB 10.5.1\n\nor\n\nSHOW ALL SLAVES STATUS\nSHOW ALL REPLICAS STATUS -- From MariaDB 10.5.1\n\nDescription\n-----------\n\nThis statement is to be run on a replica and provides status information on\nessential parameters of the replica threads.\n\nThis statement requires the SUPER privilege, the REPLICATION_CLIENT privilege,\nor, from MariaDB 10.5.2, the REPLICATION SLAVE ADMIN privilege, or, from\nMariaDB 10.5.9, the REPLICA MONITOR privilege.\n\nMulti-Source\n------------\n\nThe ALL and \"connection_name\" options allow you to connect to many primaries\nat the same time.\n\nALL SLAVES (or ALL REPLICAS from MariaDB 10.5.1) gives you a list of all\nconnections to the primary nodes.\n\nThe rows will be sorted according to Connection_name.\n\nIf you specify a connection_name, you only get the information about that\nconnection. If connection_name is not used, then the name set by\ndefault_master_connection is used. If the connection name doesn\'t exist you\nwill get an error: There is no master connection for \'xxx\'.\n\nMariaDB starting with 10.7.0\n----------------------------\nThe FOR CHANNEL keyword was added for MySQL compatibility. This is identical\nas using the channel_name directly after SHOW SLAVE.\n\nColumn Descriptions\n-------------------\n\n+---------------+---------------------------------------+-------------------+\n| Name | Description | Added |\n+---------------+---------------------------------------+-------------------+\n| Connection_na | Name of the primary connection. | |\n| e | Returned with SHOW ALL SLAVES STATUS | |\n| | (or SHOW ALL REPLICAS STATUS from | |\n| | MariaDB 10.5.1) only. | |\n+---------------+---------------------------------------+-------------------+\n| Slave_SQL_Sta | State of SQL thread. Returned with | |\n| e | SHOW ALL SLAVES STATUS (or SHOW ALL | |\n| | REPLICAS STATUS from MariaDB 10.5.1) | |\n| | only. See Slave SQL Thread States. | |\n+---------------+---------------------------------------+-------------------+\n| Slave_IO_Stat | State of I/O thread. See Slave I/O | |\n| | Thread States. | |\n+---------------+---------------------------------------+-------------------+\n| Master_host | Master host that the replica is | |\n| | connected to. | |\n+---------------+---------------------------------------+-------------------+\n| Master_user | Account user name being used to | |\n| | connect to the primary. | |\n+---------------+---------------------------------------+-------------------+\n| Master_port | The port being used to connect to | |\n| | the primary. | |\n+---------------+---------------------------------------+-------------------+\n| Connect_Retry | Time in seconds between retries to | |\n| | connect. The default is 60. The | |\n| | CHANGE MASTER TO statement can set | |\n| | this. The master-retry-count option | |\n| | determines the maximum number of | |\n| | reconnection attempts. | |\n+---------------+---------------------------------------+-------------------+\n| Master_Log_Fi | Name of the primary binary log file | |\n| e | that the I/O thread is currently | |\n| | reading from. | |\n+---------------+---------------------------------------+-------------------+\n| Read_Master_L | Position up to which the I/O thread | |\n| g_Pos | has read in the current primary | |\n| | binary log file. | |\n+---------------+---------------------------------------+-------------------+\n| Relay_Log_Fil | Name of the relay log file that the | |\n| | SQL thread is currently processing. | |\n+---------------+---------------------------------------+-------------------+\n| Relay_Log_Pos | Position up to which the SQL thread | |\n| | has finished processing in the | |\n| | current relay log file. | |\n+---------------+---------------------------------------+-------------------+\n| Relay_Master_ | Name of the primary binary log file | |\n| og_File | that contains the most recent event | |\n| | executed by the SQL thread. | |\n+---------------+---------------------------------------+-------------------+\n| Slave_IO_Runn | Whether the replica I/O thread is | |\n| ng | running and connected (Yes), running | |\n| | but not connected to a primary | |\n| | (Connecting) or not running (No). | |\n+---------------+---------------------------------------+-------------------+\n| Slave_SQL_Run | Whether or not the SQL thread is | |\n| ing | running. | |\n+---------------+---------------------------------------+-------------------+\n| Replicate_Do_ | Databases specified for replicating | |\n| B | with the replicate_do_db option. | |\n+---------------+---------------------------------------+-------------------+\n| Replicate_Ign | Databases specified for ignoring | |\n| re_DB | with the replicate_ignore_db option. | |\n+---------------+---------------------------------------+-------------------+\n| Replicate_Do_ | Tables specified for replicating | |\n| able | with the replicate_do_table option. | |\n+---------------+---------------------------------------+-------------------+\n| Replicate_Ign | Tables specified for ignoring with | |\n| re_Table | the replicate_ignore_table option. | |\n+---------------+---------------------------------------+-------------------+\n| Replicate_Wil | Tables specified for replicating | |\n| _Do_Table | with the replicate_wild_do_table | |\n| | option. | |\n+---------------+---------------------------------------+-------------------+\n| Replicate_Wil | Tables specified for ignoring with | |\n| _Ignore_Table | the replicate_wild_ignore_table | |\n| | option. | |\n+---------------+---------------------------------------+-------------------+\n| Last_Errno | Alias for Last_SQL_Errno (see below) | |\n+---------------+---------------------------------------+-------------------+\n| Last Error | Alias for Last_SQL_Error (see below) | |\n+---------------+---------------------------------------+-------------------+\n| Skip_Counter | Number of events that a replica | |\n| | skips from the master, as recorded | |\n| | in the sql_slave_skip_counter system | |\n| | variable. | |\n+---------------+---------------------------------------+-------------------+\n| Exec_Master_L | Position up to which the SQL thread | |\n| g_Pos | has processed in the current master | |\n| | binary log file. Can be used to | |\n| | start a new replica from a current | |\n| | replica with the CHANGE MASTER TO | |\n| | ... MASTER_LOG_POS option. | |\n+---------------+---------------------------------------+-------------------+\n| Relay_Log_Spa | Total size of all relay log files | |\n| e | combined. | |\n+---------------+---------------------------------------+-------------------+\n| Until_Conditi | | |\n| n | | |\n+---------------+---------------------------------------+-------------------+\n| Until_Log_Fil | The MASTER_LOG_FILE value of the | |\n| | START SLAVE UNTIL condition. | |\n+---------------+---------------------------------------+-------------------+\n| Until_Log_Pos | The MASTER_LOG_POS value of the | |\n| | START SLAVE UNTIL condition. | |\n+---------------+---------------------------------------+-------------------+\n| Master_SSL_Al | Whether an SSL connection is | |\n| owed | permitted (Yes), not permitted (No) | |\n| | or permitted but without the replica | |\n| | having SSL support enabled (Ignored) | |\n+---------------+---------------------------------------+-------------------+\n| Master_SSL_CA | The MASTER_SSL_CA option of the | |\n| File | CHANGE MASTER TO statement. | |\n+---------------+---------------------------------------+-------------------+\n| Master_SSL_CA | The MASTER_SSL_CAPATH option of the | |\n| Path | CHANGE MASTER TO statement. | |\n+---------------+---------------------------------------+-------------------+\n| Master_SSL_Ce | The MASTER_SSL_CERT option of the | |\n| t | CHANGE MASTER TO statement. | |\n+---------------+---------------------------------------+-------------------+\n| Master_SSL_Ci | The MASTER_SSL_CIPHER option of the | |\n| her | CHANGE MASTER TO statement. | |\n+---------------+---------------------------------------+-------------------+\n| Master_SSL_Ke | The MASTER_SSL_KEY option of the | |\n| | CHANGE MASTER TO statement. | |\n+---------------+---------------------------------------+-------------------+\n| Seconds_Behin | Difference between the timestamp | |\n| _Master | logged on the master for the event | |\n| | that the replica is currently | |\n| | processing, and the current | |\n| | timestamp on the replica. Zero if | |\n| | the replica is not currently | |\n| | processing an event. With parallel | |\n| | replication, seconds_behind_master | |\n| | is updated only after transactions | |\n| | commit. | |\n+---------------+---------------------------------------+-------------------+\n| Master_SSL_Ve | The MASTER_SSL_VERIFY_SERVER_CERT | |\n| ify_Server_Ce | option of the CHANGE MASTER TO | |\n| t | statement. | |\n+---------------+---------------------------------------+-------------------+\n| Last_IO_Errno | Error code of the most recent error | |\n| | that caused the I/O thread to stop | |\n| | (also recorded in the replica\'s | |\n| | error log). 0 means no error. RESET | |\n| | SLAVE or RESET MASTER will reset | |\n| | this value. | |\n+---------------+---------------------------------------+-------------------+\n| Last_IO_Error | Error message of the most recent | |\n| | error that caused the I/O thread to | |\n| | stop (also recorded in the replica\'s | |\n| | error log). An empty string means no | |\n| | error. RESET SLAVE or RESET MASTER | |\n| | will reset this value. | |\n+---------------+---------------------------------------+-------------------+\n| Last_SQL_Errn | Error code of the most recent error | |\n| | that caused the SQL thread to stop | |\n| | (also recorded in the replica\'s | |\n| | error log). 0 means no error. RESET | |\n| | SLAVE or RESET MASTER will reset | |\n| | this value. | |\n+---------------+---------------------------------------+-------------------+\n| Last_SQL_Erro | Error message of the most recent | |\n| | error that caused the SQL thread to | |\n| | stop (also recorded in the replica\'s | |','','https://mariadb.com/kb/en/show-replica-status/');
-update help_topic set description = CONCAT(description, '\n| | error log). An empty string means no | |\n| | error. RESET SLAVE or RESET MASTER | |\n| | will reset this value. | |\n+---------------+---------------------------------------+-------------------+\n| Replicate_Ign | List of server_ids that are | |\n| re_Server_Ids | currently being ignored for | |\n| | replication purposes, or an empty | |\n| | string for none, as specified in the | |\n| | IGNORE_SERVER_IDS option of the | |\n| | CHANGE MASTER TO statement. | |\n+---------------+---------------------------------------+-------------------+\n| Master_Server | The master\'s server_id value. | |\n| Id | | |\n+---------------+---------------------------------------+-------------------+\n| Master_SSL_Cr | The MASTER_SSL_CRL option of the | |\n| | CHANGE MASTER TO statement. | |\n+---------------+---------------------------------------+-------------------+\n| Master_SSL_Cr | The MASTER_SSL_CRLPATH option of the | |\n| path | CHANGE MASTER TO statement. | |\n+---------------+---------------------------------------+-------------------+\n| Using_Gtid | Whether or not global transaction | |\n| | ID\'s are being used for replication | |\n| | (can be No, Slave_Pos, or | |\n| | Current_Pos). | |\n+---------------+---------------------------------------+-------------------+\n| Gtid_IO_Pos | Current global transaction ID value. | |\n+---------------+---------------------------------------+-------------------+\n| Retried_trans | Number of retried transactions for | |\n| ctions | this connection. Returned with SHOW | |\n| | ALL SLAVES STATUS only. | |\n+---------------+---------------------------------------+-------------------+\n| Max_relay_log | Max relay log size for this | |\n| size | connection. Returned with SHOW ALL | |\n| | SLAVES STATUS only. | |\n+---------------+---------------------------------------+-------------------+\n| Executed_log_ | How many log entries the replica has | |\n| ntries | executed. Returned with SHOW ALL | |\n| | SLAVES STATUS only. | |\n+---------------+---------------------------------------+-------------------+\n| Slave_receive | How many heartbeats we have got from | |\n| _heartbeats | the master. Returned with SHOW ALL | |\n| | SLAVES STATUS only. | |\n+---------------+---------------------------------------+-------------------+\n| Slave_heartbe | How often to request a heartbeat | |\n| t_period | packet from the master (in seconds). | |\n| | Returned with SHOW ALL SLAVES STATUS | |\n| | only. | |\n+---------------+---------------------------------------+-------------------+\n| Gtid_Slave_Po | GTID of the last event group | |\n| | replicated on a replica server, for | |\n| | each replication domain, as stored | |\n| | in the gtid_slave_pos system | |\n| | variable. Returned with SHOW ALL | |\n| | SLAVES STATUS only. | |\n+---------------+---------------------------------------+-------------------+\n| SQL_Delay | Value specified by MASTER_DELAY in | MariaDB 10.2.3 |\n| | CHANGE MASTER (or 0 if none). | |\n+---------------+---------------------------------------+-------------------+\n| SQL_Remaining | When the replica is delaying the | MariaDB 10.2.3 |\n| Delay | execution of an event due to | |\n| | MASTER_DELAY, this is the number of | |\n| | seconds of delay remaining before | |\n| | the event will be applied. | |\n| | Otherwise, the value is NULL. | |\n+---------------+---------------------------------------+-------------------+\n| Slave_SQL_Run | The state of the SQL driver threads, | MariaDB 10.2.3 |\n| ing_State | same as in SHOW PROCESSLIST. When | |\n| | the replica is delaying the | |\n| | execution of an event due to | |\n| | MASTER_DELAY, this field displays: | |\n| | \"Waiting until MASTER_DELAY seconds | |\n| | after master executed event\". | |\n+---------------+---------------------------------------+-------------------+\n| Slave_DDL_Gro | This status variable counts the | MariaDB 10.3.7 |\n| ps | occurrence of DDL statements. This | |\n| | is a replica-side counter for | |\n| | optimistic parallel replication. | |\n+---------------+---------------------------------------+-------------------+\n| Slave_Non_Tra | This status variable counts the | MariaDB 10.3.7 |\n| sactional_Gro | occurrence of non-transactional | |\n| ps | event groups. This is a | |\n| | replica-side counter for optimistic | |\n| | parallel replication. | |\n+---------------+---------------------------------------+-------------------+\n| Slave_Transac | This status variable counts the | MariaDB 10.3.7 |\n| ional_Groups | occurrence of transactional event | |\n| | groups. This is a replica-side | |\n| | counter for optimistic parallel | |\n| | replication. | |\n+---------------+---------------------------------------+-------------------+\n\nSHOW REPLICA STATUS\n-------------------\n\nMariaDB starting with 10.5.1\n----------------------------\nSHOW REPLICA STATUS is an alias for SHOW SLAVE STATUS from MariaDB 10.5.1.\n\nExamples\n--------\n\nIf you issue this statement using the mysql client, you can use a \\G statement\nterminator rather than a semicolon to obtain a more readable vertical layout.\n\nSHOW SLAVE STATUS\\G\n*************************** 1. row ***************************\n Slave_IO_State: Waiting for master to send event\n Master_Host: db01.example.com\n Master_User: replicant\n Master_Port: 3306\n Connect_Retry: 60\n Master_Log_File: mariadb-bin.000010\n Read_Master_Log_Pos: 548\n Relay_Log_File: relay-bin.000004\n Relay_Log_Pos: 837\n Relay_Master_Log_File: mariadb-bin.000010\n Slave_IO_Running: Yes\n Slave_SQL_Running: Yes\n Replicate_Do_DB:\n Replicate_Ignore_DB:\n Replicate_Do_Table:\n Replicate_Ignore_Table:\n Replicate_Wild_Do_Table:\n Replicate_Wild_Ignore_Table:\n Last_Errno: 0\n Last_Error:\n Skip_Counter: 0\n Exec_Master_Log_Pos: 548\n Relay_Log_Space: 1497\n Until_Condition: None\n Until_Log_File:\n Until_Log_Pos: 0\n Master_SSL_Allowed: No\n Master_SSL_CA_File:\n Master_SSL_CA_Path:\n Master_SSL_Cert:\n Master_SSL_Cipher:\n Master_SSL_Key:\n Seconds_Behind_Master: 0\nMaster_SSL_Verify_Server_Cert: No\n Last_IO_Errno: 0\n Last_IO_Error:\n Last_SQL_Errno: 0\n Last_SQL_Error:\n Replicate_Ignore_Server_Ids:\n Master_Server_Id: 101\n Master_SSL_Crl:\n Master_SSL_Crlpath:\n Using_Gtid: No\n Gtid_IO_Pos:\n\nSHOW ALL SLAVES STATUS\\G\n*************************** 1. row ***************************\n Connection_name:\n Slave_SQL_State: Slave has read all relay log; waiting for the\nslave I/O thread to update it\n Slave_IO_State: Waiting for master to send event\n Master_Host: db01.example.com\n Master_User: replicant\n Master_Port: 3306\n Connect_Retry: 60\n Master_Log_File: mariadb-bin.000010\n Read_Master_Log_Pos: 3608\n Relay_Log_File: relay-bin.000004\n Relay_Log_Pos: 3897\n Relay_Master_Log_File: mariadb-bin.000010\n Slave_IO_Running: Yes\n Slave_SQL_Running: Yes\n Replicate_Do_DB:\n Replicate_Ignore_DB:\n Replicate_Do_Table:\n Replicate_Ignore_Table:\n Replicate_Wild_Do_Table:\n Replicate_Wild_Ignore_Table:\n Last_Errno: 0\n Last_Error:\n Skip_Counter: 0\n Exec_Master_Log_Pos: 3608\n Relay_Log_Space: 4557\n Until_Condition: None\n Until_Log_File:\n Until_Log_Pos: 0\n Master_SSL_Allowed: No\n Master_SSL_CA_File:\n Master_SSL_CA_Path:\n Master_SSL_Cert:\n Master_SSL_Cipher:\n Master_SSL_Key:\n Seconds_Behind_Master: 0\nMaster_SSL_Verify_Server_Cert: No\n Last_IO_Errno: 0\n Last_IO_Error:\n Last_SQL_Errno: 0\n Last_SQL_Error:\n Replicate_Ignore_Server_Ids:\n Master_Server_Id: 101\n Master_SSL_Crl:\n Master_SSL_Crlpath:\n Using_Gtid: No\n Gtid_IO_Pos:\n Retried_transactions: 0\n Max_relay_log_size: 104857600\n Executed_log_entries: 40\n Slave_received_heartbeats: 11\n Slave_heartbeat_period: 1800.000\n Gtid_Slave_Pos: 0-101-2320\n\nYou can also access some of the variables directly from status variables:\n\nSET @@default_master_connection=\"test\" ;\nshow status like \"%slave%\"\n\nVariable_name Value\nCom_show_slave_hosts 0\nCom_show_slave_status 0\nCom_start_all_slaves 0\nCom_start_slave 0\nCom_stop_all_slaves 0\nCom_stop_slave 0\nRpl_semi_sync_slave_status OFF\nSlave_connections 0\nSlave_heartbeat_period 1800.000\nSlave_open_temp_tables 0\nSlave_received_heartbeats 0\nSlave_retried_transactions 0\nSlave_running OFF\nSlaves_connected 0\nSlaves_running 1\n\nURL: https://mariadb.com/kb/en/show-replica-status/') WHERE help_topic_id = 347;
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (348,26,'SHOW MASTER STATUS','Syntax\n------\n\nSHOW MASTER STATUS\nSHOW BINLOG STATUS -- From MariaDB 10.5.2\n\nDescription\n-----------\n\nProvides status information about the binary log files of the primary.\n\nThis statement requires the SUPER privilege, the REPLICATION_CLIENT privilege,\nor, from MariaDB 10.5.2, the BINLOG MONITOR privilege.\n\nTo see information about the current GTIDs in the binary log, use the\ngtid_binlog_pos variable.\n\nSHOW MASTER STATUS was renamed to SHOW BINLOG STATUS in MariaDB 10.5.2, but\nthe old name remains an alias for compatibility purposes.\n\nExample\n-------\n\nSHOW MASTER STATUS;\n+--------------------+----------+--------------+------------------+\n| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |\n+--------------------+----------+--------------+------------------+\n| mariadb-bin.000016 | 475 | | |\n+--------------------+----------+--------------+------------------+\nSELECT @@global.gtid_binlog_pos;\n+--------------------------+\n| @@global.gtid_binlog_pos |\n+--------------------------+\n| 0-1-2 |\n+--------------------------+\n\nURL: https://mariadb.com/kb/en/show-binlog-status/','','https://mariadb.com/kb/en/show-binlog-status/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (349,26,'SHOW SLAVE HOSTS','Syntax\n------\n\nSHOW SLAVE HOSTS\nSHOW REPLICA HOSTS -- from MariaDB 10.5.1\n\nDescription\n-----------\n\nThis command is run on the primary and displays a list of replicas that are\ncurrently registered with it. Only replicas started with the\n--report-host=host_name option are visible in this list.\n\nThe output looks like this:\n\nSHOW SLAVE HOSTS;\n+------------+-----------+------+-----------+\n| Server_id | Host | Port | Master_id |\n+------------+-----------+------+-----------+\n| 192168010 | iconnect2 | 3306 | 192168011 |\n| 1921680101 | athena | 3306 | 192168011 |\n+------------+-----------+------+-----------+\n\n* Server_id: The unique server ID of the replica server, as configured in the\nserver\'s option file, or on the command line with --server-id=value.\n* Host: The host name of the replica server, as configured in the server\'s\noption file, or on the command line with --report-host=host_name. Note that\nthis can differ from the machine name as configured in the operating system.\n* Port: The port the replica server is listening on.\n* Master_id: The unique server ID of the primary server that the replica\nserver is replicating from.\n\nSome MariaDB and MySQL versions report another variable, rpl_recovery_rank.\nThis variable was never used, and was eventually removed in MariaDB 10.1.2 .\n\nRequires the REPLICATION MASTER ADMIN privilege (>= MariaDB 10.5.2) or the\nREPLICATION SLAVE privilege (<= MariaDB 10.5.1).\n\nSHOW REPLICA HOSTS\n------------------\n\nMariaDB starting with 10.5.1\n----------------------------\nSHOW REPLICA HOSTS is an alias for SHOW SLAVE HOSTS from MariaDB 10.5.1.\n\nURL: https://mariadb.com/kb/en/show-replica-hosts/','','https://mariadb.com/kb/en/show-replica-hosts/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (350,26,'SHOW PLUGINS','Syntax\n------\n\nSHOW PLUGINS;\n\nDescription\n-----------\n\nSHOW PLUGINS displays information about installed plugins. The Library column\nindicates the plugin library - if it is NULL, the plugin is built-in and\ncannot be uninstalled.\n\nThe PLUGINS table in the information_schema database contains more detailed\ninformation.\n\nFor specific information about storage engines (a particular type of plugin),\nsee the information_schema.ENGINES table and the SHOW ENGINES statement.\n\nExamples\n--------\n\nSHOW PLUGINS;\n+----------------------------+----------+--------------------+-------------+---\n-----+\n| Name | Status | Type | Library |\nLicense |\n+----------------------------+----------+--------------------+-------------+---\n-----+\n| binlog | ACTIVE | STORAGE ENGINE | NULL |\nGPL |\n| mysql_native_password | ACTIVE | AUTHENTICATION | NULL |\nGPL |\n| mysql_old_password | ACTIVE | AUTHENTICATION | NULL |\nGPL |\n| MRG_MyISAM | ACTIVE | STORAGE ENGINE | NULL |\nGPL |\n| MyISAM | ACTIVE | STORAGE ENGINE | NULL |\nGPL |\n| CSV | ACTIVE | STORAGE ENGINE | NULL |\nGPL |\n| MEMORY | ACTIVE | STORAGE ENGINE | NULL |\nGPL |\n| FEDERATED | ACTIVE | STORAGE ENGINE | NULL |\nGPL |\n| PERFORMANCE_SCHEMA | ACTIVE | STORAGE ENGINE | NULL |\nGPL |\n| Aria | ACTIVE | STORAGE ENGINE | NULL |\nGPL |\n| InnoDB | ACTIVE | STORAGE ENGINE | NULL |\nGPL |\n| INNODB_TRX | ACTIVE | INFORMATION SCHEMA | NULL |\nGPL |\n...\n| INNODB_SYS_FOREIGN | ACTIVE | INFORMATION SCHEMA | NULL |\nGPL |\n| INNODB_SYS_FOREIGN_COLS | ACTIVE | INFORMATION SCHEMA | NULL |\nGPL |\n| SPHINX | ACTIVE | STORAGE ENGINE | NULL |\nGPL |\n| ARCHIVE | ACTIVE | STORAGE ENGINE | NULL |\nGPL |\n| BLACKHOLE | ACTIVE | STORAGE ENGINE | NULL |\nGPL |\n| FEEDBACK | DISABLED | INFORMATION SCHEMA | NULL |\nGPL |\n| partition | ACTIVE | STORAGE ENGINE | NULL |\nGPL |\n| pam | ACTIVE | AUTHENTICATION | auth_pam.so |\nGPL |\n+----------------------------+----------+--------------------+-------------+---\n-----+\n\nURL: https://mariadb.com/kb/en/show-plugins/','','https://mariadb.com/kb/en/show-plugins/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (351,26,'SHOW PLUGINS SONAME','Syntax\n------\n\nSHOW PLUGINS SONAME { library | LIKE \'pattern\' | WHERE expr };\n\nDescription\n-----------\n\nSHOW PLUGINS SONAME displays information about compiled-in and all server\nplugins in the plugin_dir directory, including plugins that haven\'t been\ninstalled.\n\nExamples\n--------\n\nSHOW PLUGINS SONAME \'ha_example.so\';\n+----------+---------------+----------------+---------------+---------+\n| Name | Status | Type | Library | License |\n+----------+---------------+----------------+---------------+---------+\n| EXAMPLE | NOT INSTALLED | STORAGE ENGINE | ha_example.so | GPL |\n| UNUSABLE | NOT INSTALLED | DAEMON | ha_example.so | GPL |\n+----------+---------------+----------------+---------------+---------+\n\nThere is also a corresponding information_schema table, called ALL_PLUGINS,\nwhich contains more complete information.\n\nURL: https://mariadb.com/kb/en/show-plugins-soname/','','https://mariadb.com/kb/en/show-plugins-soname/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (352,26,'SET','Syntax\n------\n\nSET variable_assignment [, variable_assignment] ...\n\nvariable_assignment:\n user_var_name = expr\n | [GLOBAL | SESSION] system_var_name = expr\n | [@@global. | @@session. | @@]system_var_name = expr\n\nOne can also set a user variable in any expression with this syntax:\n\nuser_var_name:= expr\n\nDescription\n-----------\n\nThe SET statement assigns values to different types of variables that affect\nthe operation of the server or your client. Older versions of MySQL employed\nSET OPTION, but this syntax was deprecated in favor of SET without OPTION, and\nwas removed in MariaDB 10.0.\n\nChanging a system variable by using the SET statement does not make the change\npermanently. To do so, the change must be made in a configuration file.\n\nFor setting variables on a per-query basis, see SET STATEMENT.\n\nSee SHOW VARIABLES for documentation on viewing server system variables.\n\nSee Server System Variables for a list of all the system variables.\n\nGLOBAL / SESSION\n----------------\n\nWhen setting a system variable, the scope can be specified as either GLOBAL or\nSESSION.\n\nA global variable change affects all new sessions. It does not affect any\ncurrently open sessions, including the one that made the change.\n\nA session variable change affects the current session only.\n\nIf the variable has a session value, not specifying either GLOBAL or SESSION\nwill be the same as specifying SESSION. If the variable only has a global\nvalue, not specifying GLOBAL or SESSION will apply to the change to the global\nvalue.\n\nDEFAULT\n-------\n\nSetting a global variable to DEFAULT will restore it to the server default,\nand setting a session variable to DEFAULT will restore it to the current\nglobal value.\n\nExamples\n--------\n\n* innodb_sync_spin_loops is a global variable.\n* skip_parallel_replication is a session variable.\n* max_error_count is both global and session.\n\nSELECT VARIABLE_NAME, SESSION_VALUE, GLOBAL_VALUE FROM\n INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE \n VARIABLE_NAME IN (\'max_error_count\', \'skip_parallel_replication\',\n\'innodb_sync_spin_loops\');\n+---------------------------+---------------+--------------+\n| VARIABLE_NAME | SESSION_VALUE | GLOBAL_VALUE |\n+---------------------------+---------------+--------------+\n| MAX_ERROR_COUNT | 64 | 64 |\n| SKIP_PARALLEL_REPLICATION | OFF | NULL |\n| INNODB_SYNC_SPIN_LOOPS | NULL | 30 |\n+---------------------------+---------------+--------------+\n\nSetting the session values:\n\nSET max_error_count=128;Query OK, 0 rows affected (0.000 sec)\n\nSET skip_parallel_replication=ON;Query OK, 0 rows affected (0.000 sec)\n\nSET innodb_sync_spin_loops=60;\nERROR 1229 (HY000): Variable \'innodb_sync_spin_loops\' is a GLOBAL variable \n and should be set with SET GLOBAL\n\nSELECT VARIABLE_NAME, SESSION_VALUE, GLOBAL_VALUE FROM\n INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE \n VARIABLE_NAME IN (\'max_error_count\', \'skip_parallel_replication\',\n\'innodb_sync_spin_loops\');\n+---------------------------+---------------+--------------+\n| VARIABLE_NAME | SESSION_VALUE | GLOBAL_VALUE |\n+---------------------------+---------------+--------------+\n| MAX_ERROR_COUNT | 128 | 64 |\n| SKIP_PARALLEL_REPLICATION | ON | NULL |\n| INNODB_SYNC_SPIN_LOOPS | NULL | 30 |\n+---------------------------+---------------+--------------+\n\nSetting the global values:\n\nSET GLOBAL max_error_count=256;\n\nSET GLOBAL skip_parallel_replication=ON;\nERROR 1228 (HY000): Variable \'skip_parallel_replication\' is a SESSION variable \n and can\'t be used with SET GLOBAL\n\nSET GLOBAL innodb_sync_spin_loops=120;\n\nSELECT VARIABLE_NAME, SESSION_VALUE, GLOBAL_VALUE FROM\n INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE \n VARIABLE_NAME IN (\'max_error_count\', \'skip_parallel_replication\',\n\'innodb_sync_spin_loops\');\n+---------------------------+---------------+--------------+\n| VARIABLE_NAME | SESSION_VALUE | GLOBAL_VALUE |\n+---------------------------+---------------+--------------+\n| MAX_ERROR_COUNT | 128 | 256 |\n| SKIP_PARALLEL_REPLICATION | ON | NULL |\n| INNODB_SYNC_SPIN_LOOPS | NULL | 120 |\n+---------------------------+---------------+--------------+\n\nSHOW VARIABLES will by default return the session value unless the variable is\nglobal only.\n\nSHOW VARIABLES LIKE \'max_error_count\';\n+-----------------+-------+\n| Variable_name | Value |\n+-----------------+-------+\n| max_error_count | 128 |\n+-----------------+-------+\n\nSHOW VARIABLES LIKE \'skip_parallel_replication\';\n+---------------------------+-------+\n| Variable_name | Value |\n+---------------------------+-------+\n| skip_parallel_replication | ON |\n+---------------------------+-------+\n\nSHOW VARIABLES LIKE \'innodb_sync_spin_loops\';\n+------------------------+-------+\n| Variable_name | Value |\n+------------------------+-------+\n| innodb_sync_spin_loops | 120 |\n+------------------------+-------+\n\nUsing the inplace syntax:\n\nSELECT (@a:=1);\n+---------+\n| (@a:=1) |\n+---------+\n| 1 |\n+---------+\n\nSELECT @a;\n+------+\n| @a |\n+------+\n| 1 |\n+------+\n\nURL: https://mariadb.com/kb/en/set/','','https://mariadb.com/kb/en/set/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (353,26,'SET CHARACTER SET','Syntax\n------\n\nSET {CHARACTER SET | CHARSET}\n {charset_name | DEFAULT}\n\nDescription\n-----------\n\nSets the character_set_client and character_set_results session system\nvariables to the specified character set and collation_connection to the value\nof collation_database, which implicitly sets character_set_connection to the\nvalue of character_set_database.\n\nThis maps all strings sent between the current client and the server with the\ngiven mapping.\n\nExample\n-------\n\nSHOW VARIABLES LIKE \'character_set\\_%\';\n+--------------------------+--------+\n| Variable_name | Value |\n+--------------------------+--------+\n| character_set_client | utf8 |\n| character_set_connection | utf8 |\n| character_set_database | latin1 |\n| character_set_filesystem | binary |\n| character_set_results | utf8 |\n| character_set_server | latin1 |\n| character_set_system | utf8 |\n+--------------------------+--------+\n\nSHOW VARIABLES LIKE \'collation%\';\n+----------------------+-------------------+\n| Variable_name | Value |\n+----------------------+-------------------+\n| collation_connection | utf8_general_ci |\n| collation_database | latin1_swedish_ci |\n| collation_server | latin1_swedish_ci |\n+----------------------+-------------------+\n\nSET CHARACTER SET utf8mb4;\n\nSHOW VARIABLES LIKE \'character_set\\_%\';\n+--------------------------+---------+\n| Variable_name | Value |\n+--------------------------+---------+\n| character_set_client | utf8mb4 |\n| character_set_connection | latin1 |\n| character_set_database | latin1 |\n| character_set_filesystem | binary |\n| character_set_results | utf8mb4 |\n| character_set_server | latin1 |\n| character_set_system | utf8 |\n+--------------------------+---------+\n\nSHOW VARIABLES LIKE \'collation%\';\n+----------------------+-------------------+\n| Variable_name | Value |\n+----------------------+-------------------+\n| collation_connection | latin1_swedish_ci |\n| collation_database | latin1_swedish_ci |\n| collation_server | latin1_swedish_ci |\n+----------------------+-------------------+\n\nURL: https://mariadb.com/kb/en/set-character-set/','','https://mariadb.com/kb/en/set-character-set/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (354,26,'SET NAMES','Syntax\n------\n\nSET NAMES {\'charset_name\'\n [COLLATE \'collation_name\'] | DEFAULT}\n\nDescription\n-----------\n\nSets the character_set_client, character_set_connection, character_set_results\nand, implicitly, the collation_connection session system variables to the\nspecified character set and collation.\n\nThis determines which character set the client will use to send statements to\nthe server, and the server will use for sending results back to the client.\n\nucs2, utf16, utf16le and utf32 are not valid character sets for SET NAMES, as\nthey cannot be used as client character sets.\n\nThe collation clause is optional. If not defined (or if DEFAULT is specified),\nthe default collation for the character set will be used.\n\nQuotes are optional for the character set or collation clauses.\n\nExamples\n--------\n\nSELECT VARIABLE_NAME, SESSION_VALUE \n FROM INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE\n VARIABLE_NAME LIKE \'character_set_c%\' OR\n VARIABLE_NAME LIKE \'character_set_re%\' OR\n VARIABLE_NAME LIKE \'collation_c%\';\n+--------------------------+-----------------+\n| VARIABLE_NAME | SESSION_VALUE |\n+--------------------------+-----------------+\n| CHARACTER_SET_RESULTS | utf8 |\n| CHARACTER_SET_CONNECTION | utf8 |\n| CHARACTER_SET_CLIENT | utf8 |\n| COLLATION_CONNECTION | utf8_general_ci |\n+--------------------------+-----------------+\n\nSET NAMES big5;\n\nSELECT VARIABLE_NAME, SESSION_VALUE \n FROM INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE\n VARIABLE_NAME LIKE \'character_set_c%\' OR\n VARIABLE_NAME LIKE \'character_set_re%\' OR\n VARIABLE_NAME LIKE \'collation_c%\';\n+--------------------------+-----------------+\n| VARIABLE_NAME | SESSION_VALUE |\n+--------------------------+-----------------+\n| CHARACTER_SET_RESULTS | big5 |\n| CHARACTER_SET_CONNECTION | big5 |\n| CHARACTER_SET_CLIENT | big5 |\n| COLLATION_CONNECTION | big5_chinese_ci |\n+--------------------------+-----------------+\n\nSET NAMES \'latin1\' COLLATE \'latin1_bin\';\n\nSELECT VARIABLE_NAME, SESSION_VALUE \n FROM INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE\n VARIABLE_NAME LIKE \'character_set_c%\' OR\n VARIABLE_NAME LIKE \'character_set_re%\' OR\n VARIABLE_NAME LIKE \'collation_c%\';\n+--------------------------+---------------+\n| VARIABLE_NAME | SESSION_VALUE |\n+--------------------------+---------------+\n| CHARACTER_SET_RESULTS | latin1 |\n| CHARACTER_SET_CONNECTION | latin1 |\n| CHARACTER_SET_CLIENT | latin1 |\n| COLLATION_CONNECTION | latin1_bin |\n+--------------------------+---------------+\n\nSET NAMES DEFAULT;\n\nSELECT VARIABLE_NAME, SESSION_VALUE \n FROM INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE\n VARIABLE_NAME LIKE \'character_set_c%\' OR\n VARIABLE_NAME LIKE \'character_set_re%\' OR\n VARIABLE_NAME LIKE \'collation_c%\';\n+--------------------------+-------------------+\n| VARIABLE_NAME | SESSION_VALUE |\n+--------------------------+-------------------+\n| CHARACTER_SET_RESULTS | latin1 |\n| CHARACTER_SET_CONNECTION | latin1 |\n| CHARACTER_SET_CLIENT | latin1 |\n| COLLATION_CONNECTION | latin1_swedish_ci |\n+--------------------------+-------------------+\n\nURL: https://mariadb.com/kb/en/set-names/','','https://mariadb.com/kb/en/set-names/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (355,26,'SET SQL_LOG_BIN','Syntax\n------\n\nSET [SESSION] sql_log_bin = {0|1}\n\nDescription\n-----------\n\nSets the sql_log_bin system variable, which disables or enables binary logging\nfor the current connection, if the client has the SUPER privilege. The\nstatement is refused with an error if the client does not have that privilege.\n\nBefore MariaDB 5.5 and before MySQL 5.6 one could also set sql_log_bin as a\nglobal variable. This was disabled as this was too dangerous as it could\ndamage replication.\n\nURL: https://mariadb.com/kb/en/set-sql_log_bin/','','https://mariadb.com/kb/en/set-sql_log_bin/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (356,26,'SET STATEMENT','MariaDB starting with 10.1.2\n----------------------------\nPer-query variables were introduced in MariaDB 10.1.2\n\nSET STATEMENT can be used to set the value of a system variable for the\nduration of the statement. It is also possible to set multiple variables.\n\nSyntax\n------\n\nSET STATEMENT var1=value1 [, var2=value2, ...] \n FOR <statement>\n\nwhere varN is a system variable (list of allowed variables is provided below),\nand valueN is a constant literal.\n\nDescription\n-----------\n\nSET STATEMENT var1=value1 FOR stmt\n\nis roughly equivalent to\n\nSET @save_value=@@var1;\nSET SESSION var1=value1;\nstmt;\nSET SESSION var1=@save_value;\n\nThe server parses the whole statement before executing it, so any variables\nset in this fashion that affect the parser may not have the expected effect.\nExamples include the charset variables, sql_mode=ansi_quotes, etc.\n\nExamples\n--------\n\nOne can limit statement execution time max_statement_time:\n\nSET STATEMENT max_statement_time=1000 FOR SELECT ... ;\n\nOne can switch on/off individual optimizations:\n\nSET STATEMENT optimizer_switch=\'materialization=off\' FOR SELECT ....;\n\nIt is possible to enable MRR/BKA for a query:\n\nSET STATEMENT join_cache_level=6, optimizer_switch=\'mrr=on\' FOR SELECT ...\n\nNote that it makes no sense to try to set a session variable inside a SET\nSTATEMENT:\n\n#USELESS STATEMENT\nSET STATEMENT sort_buffer_size = 100000 for SET SESSION sort_buffer_size =\n200000;\n\nFor the above, after setting sort_buffer_size to 200000 it will be reset to\nits original state (the state before the SET STATEMENT started) after the\nstatement execution.\n\nLimitations\n-----------\n\nThere are a number of variables that cannot be set on per-query basis. These\ninclude:\n\n* autocommit\n* character_set_client\n* character_set_connection\n* character_set_filesystem\n* collation_connection\n* default_master_connection\n* debug_sync\n* interactive_timeout\n* gtid_domain_id\n* last_insert_id\n* log_slow_filter\n* log_slow_rate_limit\n* log_slow_verbosity\n* long_query_time\n* min_examined_row_limit\n* profiling\n* profiling_history_size\n* query_cache_type\n* rand_seed1\n* rand_seed2\n* skip_replication\n* slow_query_log\n* sql_log_off\n* tx_isolation\n* wait_timeout\n\nSource\n------\n\n* The feature was originally implemented as a Google Summer of Code 2009\nproject by Joseph Lukas. \n* Percona Server 5.6 included it as Per-query variable statement\n* MariaDB ported the patch and fixed many bugs. The task in MariaDB Jira is\nMDEV-5231.\n\nURL: https://mariadb.com/kb/en/set-statement/','','https://mariadb.com/kb/en/set-statement/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (357,26,'SET Variable','Syntax\n------\n\nSET var_name = expr [, var_name = expr] ...\n\nDescription\n-----------\n\nThe SET statement in stored programs is an extended version of the general SET\nstatement. Referenced variables may be ones declared inside a stored program,\nglobal system variables, or user-defined variables.\n\nThe SET statement in stored programs is implemented as part of the\npre-existing SET syntax. This allows an extended syntax of SET a=x, b=y, ...\nwhere different variable types (locally declared variables, global and session\nserver variables, user-defined variables) can be mixed. This also allows\ncombinations of local variables and some options that make sense only for\nsystem variables; in that case, the options are recognized but ignored.\n\nSET can be used with both local variables and user-defined variables.\n\nWhen setting several variables using the columns returned by a query, SELECT\nINTO should be preferred.\n\nTo set many variables to the same value, the LAST_VALUE( ) function can be\nused.\n\nBelow is an example of how a user-defined variable may be set:\n\nSET @x = 1;\n\nURL: https://mariadb.com/kb/en/set-variable/','','https://mariadb.com/kb/en/set-variable/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (358,26,'About SHOW','SHOW has many forms that provide information about databases, tables, columns,\nor status information about the server. These include:\n\n* SHOW AUTHORS\n* SHOW CHARACTER SET [like_or_where]\n* SHOW COLLATION [like_or_where]\n* SHOW [FULL] COLUMNS FROM tbl_name [FROM db_name] [like_or_where]\n* SHOW CONTRIBUTORS\n* SHOW CREATE DATABASE db_name\n* SHOW CREATE EVENT event_name\n* SHOW CREATE PACKAGE package_name\n* SHOW CREATE PACKAGE BODY package_name\n* SHOW CREATE PROCEDURE proc_name\n* SHOW CREATE TABLE tbl_name\n* SHOW CREATE TRIGGER trigger_name\n* SHOW CREATE VIEW view_name\n* SHOW DATABASES [like_or_where]\n* SHOW ENGINE engine_name {STATUS | MUTEX}\n* SHOW [STORAGE] ENGINES\n* SHOW ERRORS [LIMIT [offset,] row_count]\n* SHOW [FULL] EVENTS\n* SHOW FUNCTION CODE func_name\n* SHOW FUNCTION STATUS [like_or_where]\n* SHOW GRANTS FOR user\n* SHOW INDEX FROM tbl_name [FROM db_name]\n* SHOW INNODB STATUS\n* SHOW OPEN TABLES [FROM db_name] [like_or_where]\n* SHOW PLUGINS\n* SHOW PROCEDURE CODE proc_name\n* SHOW PROCEDURE STATUS [like_or_where]\n* SHOW PRIVILEGES\n* SHOW [FULL] PROCESSLIST\n* SHOW PROFILE [types] [FOR QUERY n] [OFFSET n] [LIMIT n]\n* SHOW PROFILES\n* SHOW [GLOBAL | SESSION] STATUS [like_or_where]\n* SHOW TABLE STATUS [FROM db_name] [like_or_where]\n* SHOW TABLES [FROM db_name] [like_or_where]\n* SHOW TRIGGERS [FROM db_name] [like_or_where]\n* SHOW [GLOBAL | SESSION] VARIABLES [like_or_where]\n* SHOW WARNINGS [LIMIT [offset,] row_count]\n\nlike_or_where:\n LIKE \'pattern\'\n | WHERE expr\n\nIf the syntax for a given SHOW statement includes a LIKE \'pattern\' part,\n\'pattern\' is a string that can contain the SQL \"%\" and \"_\" wildcard\ncharacters. The pattern is useful for restricting statement output to matching\nvalues.\n\nSeveral SHOW statements also accept a WHERE clause that provides more\nflexibility in specifying which rows to display. See Extended Show.\n\nURL: https://mariadb.com/kb/en/about-show/','','https://mariadb.com/kb/en/about-show/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (359,26,'Extended Show','The following SHOW statements can be extended by using a WHERE clause and a\nLIKE clause to refine the results:\n\n* SHOW CHARACTER SET\n* SHOW COLLATION\n* SHOW COLUMNS\n* SHOW DATABASES\n* SHOW FUNCTION STATUS\n* SHOW INDEX\n* SHOW OPEN TABLES\n* SHOW PACKAGE STATUS\n* SHOW PACKAGE BODY STATUS\n* SHOW INDEX\n* SHOW PROCEDURE STATUS\n* SHOW STATUS\n* SHOW TABLE STATUS\n* SHOW TABLES\n* SHOW TRIGGERS\n* SHOW VARIABLES\n\nAs with a regular SELECT, the WHERE clause can be used for the specific\ncolumns returned, and the LIKE clause with the regular wildcards.\n\nExamples\n--------\n\nSHOW TABLES;\n+----------------------+\n| Tables_in_test |\n+----------------------+\n| animal_count |\n| animals |\n| are_the_mooses_loose |\n| aria_test2 |\n| t1 |\n| view1 |\n+----------------------+\n\nShowing the tables beginning with a only.\n\nSHOW TABLES WHERE Tables_in_test LIKE \'a%\';\n+----------------------+\n| Tables_in_test |\n+----------------------+\n| animal_count |\n| animals |\n| are_the_mooses_loose |\n| aria_test2 |\n+----------------------+\n\nVariables whose name starts with aria and with a valued of greater than 8192:\n\nSHOW VARIABLES WHERE Variable_name LIKE \'aria%\' AND Value >8192;\n+------------------------------+---------------------+\n| Variable_name | Value |\n+------------------------------+---------------------+\n| aria_checkpoint_log_activity | 1048576 |\n| aria_log_file_size | 1073741824 |\n| aria_max_sort_file_size | 9223372036853727232 |\n| aria_pagecache_buffer_size | 134217728 |\n| aria_sort_buffer_size | 134217728 |\n+------------------------------+---------------------+\n\nShortcut, just returning variables whose name begins with aria.\n\nSHOW VARIABLES LIKE \'aria%\';\n+------------------------------------------+---------------------+\n| Variable_name | Value |\n+------------------------------------------+---------------------+\n| aria_block_size | 8192 |\n| aria_checkpoint_interval | 30 |\n| aria_checkpoint_log_activity | 1048576 |\n| aria_force_start_after_recovery_failures | 0 |\n| aria_group_commit | none |\n| aria_group_commit_interval | 0 |\n| aria_log_file_size | 1073741824 |\n| aria_log_purge_type | immediate |\n| aria_max_sort_file_size | 9223372036853727232 |\n| aria_page_checksum | ON |\n| aria_pagecache_age_threshold | 300 |\n| aria_pagecache_buffer_size | 134217728 |\n| aria_pagecache_division_limit | 100 |\n| aria_recover | NORMAL |\n| aria_repair_threads | 1 |\n| aria_sort_buffer_size | 134217728 |\n| aria_stats_method | nulls_unequal |\n| aria_sync_log_dir | NEWFILE |\n| aria_used_for_temp_tables | ON |\n+------------------------------------------+---------------------+\n\nURL: https://mariadb.com/kb/en/extended-show/','','https://mariadb.com/kb/en/extended-show/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (360,26,'SHOW AUTHORS','Syntax\n------\n\nSHOW AUTHORS\n\nDescription\n-----------\n\nThe SHOW AUTHORS statement displays information about the people who work on\nMariaDB. For each author, it displays Name, Location, and Comment values. All\ncolumns are encoded as latin1.\n\nThese include:\n\n* First the active people in MariaDB are listed.\n* Then the active people in MySQL.\n* Last the people that have contributed to MariaDB/MySQL in the past.\n\nThe order is somewhat related to importance of the contribution given to the\nMariaDB project, but this is not 100% accurate. There is still room for\nimprovement and debate...\n\nExample\n-------\n\nSHOW AUTHORS\\G\n*************************** 1. row ***************************\n Name: Michael (Monty) Widenius\nLocation: Tusby, Finland\n Comment: Lead developer and main author\n*************************** 2. row ***************************\n Name: Sergei Golubchik\nLocation: Kerpen, Germany\n Comment: Architect, Full-text search, precision math, plugin framework,\nmerges etc\n*************************** 3. row ***************************\n Name: Igor Babaev\nLocation: Bellevue, USA\n Comment: Optimizer, keycache, core work\n*************************** 4. row ***************************\n Name: Sergey Petrunia\nLocation: St. Petersburg, Russia\n Comment: Optimizer\n*************************** 5. row ***************************\n Name: Oleksandr Byelkin\nLocation: Lugansk, Ukraine\n Comment: Query Cache (4.0), Subqueries (4.1), Views (5.0)\n*************************** 6. row ***************************\n Name: Timour Katchaounov\nLocation: Sofia , Bulgaria\n Comment: Optimizer\n*************************** 7. row ***************************\n Name: Kristian Nielsen\nLocation: Copenhagen, Denmark\n Comment: Replication, Async client prototocol, General buildbot stuff\n*************************** 8. row ***************************\n Name: Alexander (Bar) Barkov\nLocation: Izhevsk, Russia\n Comment: Unicode and character sets\n*************************** 9. row ***************************\n Name: Alexey Botchkov (Holyfoot)\nLocation: Izhevsk, Russia\n Comment: GIS extensions, embedded server, precision math\n*************************** 10. row ***************************\n Name: Daniel Bartholomew\nLocation: Raleigh, USA\n Comment: MariaDB documentation, Buildbot, releases\n*************************** 11. row ***************************\n Name: Colin Charles\nLocation: Selangor, Malesia\n Comment: MariaDB documentation, talks at a LOT of conferences\n*************************** 12. row ***************************\n Name: Sergey Vojtovich\nLocation: Izhevsk, Russia\n Comment: initial implementation of plugin architecture, maintained native\nstorage engines (MyISAM, MEMORY, ARCHIVE, etc), rewrite of table cache\n*************************** 13. row ***************************\n Name: Vladislav Vaintroub\nLocation: Mannheim, Germany\n Comment: MariaDB Java connector, new thread pool, Windows optimizations\n*************************** 14. row ***************************\n Name: Elena Stepanova\nLocation: Sankt Petersburg, Russia\n Comment: QA, test cases\n*************************** 15. row ***************************\n Name: Georg Richter\nLocation: Heidelberg, Germany\n Comment: New LGPL C connector, PHP connector\n*************************** 16. row ***************************\n Name: Jan Lindström\nLocation: Ylämylly, Finland\n Comment: Working on InnoDB\n*************************** 17. row ***************************\n Name: Lixun Peng\nLocation: Hangzhou, China\n Comment: Multi Source replication\n*************************** 18. row ***************************\n Name: Olivier Bertrand\nLocation: Paris, France\n Comment: CONNECT storage engine\n*************************** 19. row ***************************\n Name: Kentoku Shiba\nLocation: Tokyo, Japan\n Comment: Spider storage engine, metadata_lock_info Information schema\n*************************** 20. row ***************************\n Name: Percona\nLocation: CA, USA\n Comment: XtraDB, microslow patches, extensions to slow log\n*************************** 21. row ***************************\n Name: Vicentiu Ciorbaru\nLocation: Bucharest, Romania\n Comment: Roles\n*************************** 22. row ***************************\n Name: Sudheera Palihakkara\nLocation: \n Comment: PCRE Regular Expressions\n*************************** 23. row ***************************\n Name: Pavel Ivanov\nLocation: USA\n Comment: Some patches and bug fixes\n*************************** 24. row ***************************\n Name: Konstantin Osipov\nLocation: Moscow, Russia\n Comment: Prepared statements (4.1), Cursors (5.0), GET_LOCK (10.0)\n*************************** 25. row ***************************\n Name: Ian Gilfillan\nLocation: South Africa\n Comment: MariaDB documentation\n*************************** 26. row ***************************\n Name: Federico Razolli\nLocation: Italy\n Comment: MariaDB documentation Italian translation\n*************************** 27. row ***************************\n Name: Guilhem Bichot\nLocation: Bordeaux, France\n Comment: Replication (since 4.0)\n*************************** 28. row ***************************\n Name: Andrei Elkin\nLocation: Espoo, Finland\n Comment: Replication\n*************************** 29. row ***************************\n Name: Dmitri Lenev\nLocation: Moscow, Russia\n Comment: Time zones support (4.1), Triggers (5.0)\n*************************** 30. row ***************************\n Name: Marc Alff\nLocation: Denver, CO, USA\n Comment: Signal, Resignal, Performance schema\n*************************** 31. row ***************************\n Name: Mikael Ronström\nLocation: Stockholm, Sweden\n Comment: NDB Cluster, Partitioning, online alter table\n*************************** 32. row ***************************\n Name: Ingo Strüwing\nLocation: Berlin, Germany\n Comment: Bug fixing in MyISAM, Merge tables etc\n*************************** 33. row ***************************\n Name: Marko Mäkelä\nLocation: Helsinki, Finland\n Comment: InnoDB core developer\n...\n\nURL: https://mariadb.com/kb/en/show-authors/','','https://mariadb.com/kb/en/show-authors/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (361,26,'SHOW BINARY LOGS','Syntax\n------\n\nSHOW BINARY LOGS\nSHOW MASTER LOGS\n\nDescription\n-----------\n\nLists the binary log files on the server. This statement is used as part of\nthe procedure described in PURGE BINARY LOGS, that shows how to determine\nwhich logs can be purged.\n\nThis statement requires the SUPER privilege, the REPLICATION_CLIENT privilege,\nor, from MariaDB 10.5.2, the BINLOG MONITOR privilege.\n\nExamples\n--------\n\nSHOW BINARY LOGS;\n+--------------------+-----------+\n| Log_name | File_size |\n+--------------------+-----------+\n| mariadb-bin.000001 | 19039 |\n| mariadb-bin.000002 | 717389 |\n| mariadb-bin.000003 | 300 |\n| mariadb-bin.000004 | 333 |\n| mariadb-bin.000005 | 899 |\n| mariadb-bin.000006 | 125 |\n| mariadb-bin.000007 | 18907 |\n| mariadb-bin.000008 | 19530 |\n| mariadb-bin.000009 | 151 |\n| mariadb-bin.000010 | 151 |\n| mariadb-bin.000011 | 125 |\n| mariadb-bin.000012 | 151 |\n| mariadb-bin.000013 | 151 |\n| mariadb-bin.000014 | 125 |\n| mariadb-bin.000015 | 151 |\n| mariadb-bin.000016 | 314 |\n+--------------------+-----------+\n\nURL: https://mariadb.com/kb/en/show-binary-logs/','','https://mariadb.com/kb/en/show-binary-logs/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (362,26,'SHOW BINLOG EVENTS','Syntax\n------\n\nSHOW BINLOG EVENTS\n [IN \'log_name\'] [FROM pos] [LIMIT [offset,] row_count]\n\nDescription\n-----------\n\nShows the events in the binary log. If you do not specify \'log_name\', the\nfirst binary log is displayed.\n\nRequires the BINLOG MONITOR privilege (>= MariaDB 10.5.2) or the REPLICATION\nSLAVE privilege (<= MariaDB 10.5.1).\n\nExample\n-------\n\nSHOW BINLOG EVENTS IN \'mysql_sandbox10019-bin.000002\';\n+-------------------------------+-----+-------------------+-----------+--------\n----+------------------------------------------------+\n| Log_name | Pos | Event_type | Server_id |\nEnd_log_pos | Info |\n+-------------------------------+-----+-------------------+-----------+--------\n----+------------------------------------------------+\n| mysql_sandbox10019-bin.000002 | 4 | Format_desc | 1 | \n 248 | Server ver: 10.0.19-MariaDB-log, Binlog ver: 4 |\n| mysql_sandbox10019-bin.000002 | 248 | Gtid_list | 1 | \n 273 | [] |\n| mysql_sandbox10019-bin.000002 | 273 | Binlog_checkpoint | 1 | \n 325 | mysql_sandbox10019-bin.000002 |\n| mysql_sandbox10019-bin.000002 | 325 | Gtid | 1 | \n 363 | GTID 0-1-1 |\n| mysql_sandbox10019-bin.000002 | 363 | Query | 1 | \n 446 | CREATE DATABASE blog |\n| mysql_sandbox10019-bin.000002 | 446 | Gtid | 1 | \n 484 | GTID 0-1-2 |\n| mysql_sandbox10019-bin.000002 | 484 | Query | 1 | \n 571 | use `blog`; CREATE TABLE bb (id INT) |\n+-------------------------------+-----+-------------------+-----------+--------\n----+------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/show-binlog-events/','','https://mariadb.com/kb/en/show-binlog-events/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (363,26,'SHOW CHARACTER SET','Syntax\n------\n\nSHOW CHARACTER SET\n [LIKE \'pattern\' | WHERE expr]\n\nDescription\n-----------\n\nThe SHOW CHARACTER SET statement shows all available character sets. The LIKE\nclause, if present on its own, indicates which character set names to match.\nThe WHERE and LIKE clauses can be given to select rows using more general\nconditions, as discussed in Extended SHOW.\n\nThe same information can be queried from the Information Schema CHARACTER_SETS\ntable.\n\nSee Setting Character Sets and Collations for details on specifying the\ncharacter set at the server, database, table and column levels.\n\nExamples\n--------\n\nSHOW CHARACTER SET LIKE \'latin%\';\n+---------+-----------------------------+-------------------+--------+\n| Charset | Description | Default collation | Maxlen |\n+---------+-----------------------------+-------------------+--------+\n| latin1 | cp1252 West European | latin1_swedish_ci | 1 |\n| latin2 | ISO 8859-2 Central European | latin2_general_ci | 1 |\n| latin5 | ISO 8859-9 Turkish | latin5_turkish_ci | 1 |\n| latin7 | ISO 8859-13 Baltic | latin7_general_ci | 1 |\n+---------+-----------------------------+-------------------+--------+\n\nSHOW CHARACTER SET WHERE Maxlen LIKE \'2\';\n+---------+---------------------------+-------------------+--------+\n| Charset | Description | Default collation | Maxlen |\n+---------+---------------------------+-------------------+--------+\n| big5 | Big5 Traditional Chinese | big5_chinese_ci | 2 |\n| sjis | Shift-JIS Japanese | sjis_japanese_ci | 2 |\n| euckr | EUC-KR Korean | euckr_korean_ci | 2 |\n| gb2312 | GB2312 Simplified Chinese | gb2312_chinese_ci | 2 |\n| gbk | GBK Simplified Chinese | gbk_chinese_ci | 2 |\n| ucs2 | UCS-2 Unicode | ucs2_general_ci | 2 |\n| cp932 | SJIS for Windows Japanese | cp932_japanese_ci | 2 |\n+---------+---------------------------+-------------------+--------+\n\nURL: https://mariadb.com/kb/en/show-character-set/','','https://mariadb.com/kb/en/show-character-set/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (364,26,'SHOW CLIENT_STATISTICS','Syntax\n------\n\nSHOW CLIENT_STATISTICS\n\nDescription\n-----------\n\nThe SHOW CLIENT_STATISTICS statement is part of the User Statistics feature.\nIt was removed as a separate statement in MariaDB 10.1.1, but effectively\nreplaced by the generic SHOW information_schema_table statement. The\ninformation_schema.CLIENT_STATISTICS table holds statistics about client\nconnections.\n\nThe userstat system variable must be set to 1 to activate this feature. See\nthe User Statistics and information_schema.CLIENT_STATISTICS articles for more\ninformation.\n\nExample\n-------\n\nSHOW CLIENT_STATISTICS\\G\n*************************** 1. row ***************************\n Client: localhost\n Total_connections: 35\nConcurrent_connections: 0\n Connected_time: 708\n Busy_time: 2.5557979999999985\n Cpu_time: 0.04123740000000002\n Bytes_received: 3883\n Bytes_sent: 21595\n Binlog_bytes_written: 0\n Rows_read: 18\n Rows_sent: 115\n Rows_deleted: 0\n Rows_inserted: 0\n Rows_updated: 0\n Select_commands: 70\n Update_commands: 0\n Other_commands: 0\n Commit_transactions: 1\n Rollback_transactions: 0\n Denied_connections: 0\n Lost_connections: 0\n Access_denied: 0\n Empty_queries: 35\n\nURL: https://mariadb.com/kb/en/show-client-statistics/','','https://mariadb.com/kb/en/show-client-statistics/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (365,26,'SHOW CONTRIBUTORS','Syntax\n------\n\nSHOW CONTRIBUTORS\n\nDescription\n-----------\n\nThe SHOW CONTRIBUTORS statement displays information about the companies and\npeople who financially contribute to MariaDB. For each contributor, it\ndisplays Name, Location, and Comment values. All columns are encoded as latin1.\n\nIt displays all members and sponsors of the MariaDB Foundation as well as\nother financial contributors.\n\nExample\n-------\n\nSHOW CONTRIBUTORS;\n+---------------------+-------------------------------+------------------------\n------------------------------------+\n| Name | Location | Comment \n |\n+---------------------+-------------------------------+------------------------\n------------------------------------+\n| Alibaba Cloud | https://www.alibabacloud.com/ | Platinum Sponsor of\nthe MariaDB Foundation |\n| Tencent Cloud | https://cloud.tencent.com | Platinum Sponsor of\nthe MariaDB Foundation |\n| Microsoft | https://microsoft.com/ | Platinum Sponsor of\nthe MariaDB Foundation |\n| MariaDB Corporation | https://mariadb.com | Founding member,\nPlatinum Sponsor of the MariaDB Foundation |\n| ServiceNow | https://servicenow.com | Platinum Sponsor of\nthe MariaDB Foundation |\n| Intel | https://www.intel.com | Platinum Sponsor of\nthe MariaDB Foundation |\n| SIT | https://sit.org | Platinum Sponsor of\nthe MariaDB Foundation |\n| Visma | https://visma.com | Gold Sponsor of the\nMariaDB Foundation |\n| DBS | https://dbs.com | Gold Sponsor of the\nMariaDB Foundation |\n| IBM | https://www.ibm.com | Gold Sponsor of the\nMariaDB Foundation |\n| Automattic | https://automattic.com | Silver Sponsor of the\nMariaDB Foundation |\n| Percona | https://www.percona.com/ | Sponsor of the MariaDB\nFoundation |\n| Galera Cluster | https://galeracluster.com | Sponsor of the MariaDB\nFoundation |\n| Google | USA | Sponsoring encryption,\nparallel replication and GTID |\n| Facebook | USA | Sponsoring\nnon-blocking API, LIMIT ROWS EXAMINED etc |\n| Ronald Bradford | Brisbane, Australia | EFF contribution for\nUC2006 Auction |\n| Sheeri Kritzer | Boston, Mass. USA | EFF contribution for\nUC2006 Auction |\n| Mark Shuttleworth | London, UK. | EFF contribution for\nUC2006 Auction |\n+---------------------+-------------------------------+------------------------\n------------------------------------+\n\nURL: https://mariadb.com/kb/en/show-contributors/','','https://mariadb.com/kb/en/show-contributors/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (366,26,'SHOW CREATE DATABASE','Syntax\n------\n\nSHOW CREATE {DATABASE | SCHEMA} db_name\n\nDescription\n-----------\n\nShows the CREATE DATABASE statement that creates the given database. SHOW\nCREATE SCHEMA is a synonym for SHOW CREATE DATABASE. SHOW CREATE DATABASE\nquotes database names according to the value of the sql_quote_show_create\nserver system variable.\n\nExamples\n--------\n\nSHOW CREATE DATABASE test;\n+----------+-----------------------------------------------------------------+\n| Database | Create Database |\n+----------+-----------------------------------------------------------------+\n| test | CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET latin1 */ |\n+----------+-----------------------------------------------------------------+\n\nSHOW CREATE SCHEMA test;\n+----------+-----------------------------------------------------------------+\n| Database | Create Database |\n+----------+-----------------------------------------------------------------+\n| test | CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET latin1 */ |\n+----------+-----------------------------------------------------------------+\n\nWith sql_quote_show_create off:\n\nSHOW CREATE DATABASE test;\n+----------+---------------------------------------------------------------+\n| Database | Create Database |\n+----------+---------------------------------------------------------------+\n| test | CREATE DATABASE test /*!40100 DEFAULT CHARACTER SET latin1 */ |\n+----------+---------------------------------------------------------------+\n\nWith a comment, from MariaDB 10.5:\n\nSHOW CREATE DATABASE p;\n+----------+-------------------------------------------------------------------\n------------------+\n| Database | Create Database \n |\n+----------+-------------------------------------------------------------------\n------------------+\n| p | CREATE DATABASE `p` /*!40100 DEFAULT CHARACTER SET latin1 */\nCOMMENT \'presentations\' |\n+----------+-------------------------------------------------------------------\n------------------+\n\nURL: https://mariadb.com/kb/en/show-create-database/','','https://mariadb.com/kb/en/show-create-database/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (367,26,'SHOW CREATE EVENT','Syntax\n------\n\nSHOW CREATE EVENT event_name\n\nDescription\n-----------\n\nThis statement displays the CREATE EVENT statement needed to re-create a given\nevent, as well as the SQL_MODE that was used when the trigger has been created\nand the character set used by the connection. To find out which events are\npresent, use SHOW EVENTS.\n\nThe output of this statement is unreliably affected by the\nsql_quote_show_create server system variable - see\nhttp://bugs.mysql.com/bug.php?id=12719\n\nThe information_schema.EVENTS table provides similar, but more complete,\ninformation.\n\nExamples\n--------\n\nSHOW CREATE EVENT test.e_daily\\G\n*************************** 1. row ***************************\n Event: e_daily\n sql_mode:\n time_zone: SYSTEM\n Create Event: CREATE EVENT `e_daily`\n ON SCHEDULE EVERY 1 DAY\n STARTS CURRENT_TIMESTAMP + INTERVAL 6 HOUR\n ON COMPLETION NOT PRESERVE\n ENABLE\n COMMENT \'Saves total number of sessions then\n clears the table each day\'\n DO BEGIN\n INSERT INTO site_activity.totals (time, total)\n SELECT CURRENT_TIMESTAMP, COUNT(*)\n FROM site_activity.sessions;\n DELETE FROM site_activity.sessions;\n END\ncharacter_set_client: latin1\ncollation_connection: latin1_swedish_ci\n Database Collation: latin1_swedish_ci\n\nURL: https://mariadb.com/kb/en/show-create-event/','','https://mariadb.com/kb/en/show-create-event/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (368,26,'SHOW CREATE FUNCTION','Syntax\n------\n\nSHOW CREATE FUNCTION func_name\n\nDescription\n-----------\n\nThis statement is similar to SHOW CREATE PROCEDURE but for stored functions.\n\nThe output of this statement is unreliably affected by the\nsql_quote_show_create server system variable - see\nhttp://bugs.mysql.com/bug.php?id=12719\n\nExample\n-------\n\nSHOW CREATE FUNCTION VatCents\\G\n*************************** 1. row ***************************\n Function: VatCents\n sql_mode:\n Create Function: CREATE DEFINER=`root`@`localhost` FUNCTION\n`VatCents`(price DECIMAL(10,2)) RETURNS int(11)\n DETERMINISTIC\nBEGIN\n DECLARE x INT;\n SET x = price * 114;\n RETURN x;\nEND\ncharacter_set_client: utf8\ncollation_connection: utf8_general_ci\n Database Collation: latin1_swedish_ci\n\nURL: https://mariadb.com/kb/en/show-create-function/','','https://mariadb.com/kb/en/show-create-function/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (369,26,'SHOW CREATE PACKAGE','MariaDB starting with 10.3.5\n----------------------------\nOracle-style packages were introduced in MariaDB 10.3.5.\n\nSyntax\n------\n\nSHOW CREATE PACKAGE [ db_name . ] package_name\n\nDescription\n-----------\n\nThe SHOW CREATE PACKAGE statement can be used when Oracle SQL_MODE is set.\n\nShows the CREATE statement that creates the given package specification.\n\nExamples\n--------\n\nSHOW CREATE PACKAGE employee_tools\\G\n*************************** 1. row ***************************\n Package: employee_tools\n sql_mode:\nPIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ORACLE,NO_KEY_OPTIONS,NO_TABLE_OPTIONS\nNO_FIELD_OPTIONS,NO_AUTO_CREATE_USER\n Create Package: CREATE DEFINER=\"root\"@\"localhost\" PACKAGE\n\"employee_tools\" AS\n FUNCTION getSalary(eid INT) RETURN DECIMAL(10,2);\n PROCEDURE raiseSalary(eid INT, amount DECIMAL(10,2));\n PROCEDURE raiseSalaryStd(eid INT);\n PROCEDURE hire(ename TEXT, esalary DECIMAL(10,2));\nEND\ncharacter_set_client: utf8\ncollation_connection: utf8_general_ci\n Database Collation: latin1_swedish_ci\n\nURL: https://mariadb.com/kb/en/show-create-package/','','https://mariadb.com/kb/en/show-create-package/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (370,26,'SHOW CREATE PACKAGE BODY','MariaDB starting with 10.3.5\n----------------------------\nOracle-style packages were introduced in MariaDB 10.3.5.\n\nSyntax\n------\n\nSHOW CREATE PACKAGE BODY [ db_name . ] package_name\n\nDescription\n-----------\n\nThe SHOW CREATE PACKAGE BODY statement can be used when Oracle SQL_MODE is set.\n\nShows the CREATE statement that creates the given package body (i.e. the\nimplementation).\n\nExamples\n--------\n\nSHOW CREATE PACKAGE BODY employee_tools\\G\n*************************** 1. row ***************************\n Package body: employee_tools\n sql_mode:\nPIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ORACLE,NO_KEY_OPTIONS,NO_TABLE_OPTIONS\nNO_FIELD_OPTIONS,NO_AUTO_CREATE_USER\n Create Package Body: CREATE DEFINER=\"root\"@\"localhost\" PACKAGE BODY\n\"employee_tools\" AS\n\nstdRaiseAmount DECIMAL(10,2):=500;\n\nPROCEDURE log (eid INT, ecmnt TEXT) AS\n BEGIN\n INSERT INTO employee_log (id, cmnt) VALUES (eid, ecmnt);\n END;\n\nPROCEDURE hire(ename TEXT, esalary DECIMAL(10,2)) AS\n eid INT;\n BEGIN\n INSERT INTO employee (name, salary) VALUES (ename, esalary);\n eid:= last_insert_id();\n log(eid, \'hire \' || ename);\n END;\n\nFUNCTION getSalary(eid INT) RETURN DECIMAL(10,2) AS\n nSalary DECIMAL(10,2);\n BEGIN\n SELECT salary INTO nSalary FROM employee WHERE id=eid;\n log(eid, \'getSalary id=\' || eid || \' salary=\' || nSalary);\n RETURN nSalary;\n END;\n\nPROCEDURE raiseSalary(eid INT, amount DECIMAL(10,2)) AS\n BEGIN\n UPDATE employee SET salary=salary+amount WHERE id=eid;\n log(eid, \'raiseSalary id=\' || eid || \' amount=\' || amount);\n END;\n\nPROCEDURE raiseSalaryStd(eid INT) AS\n BEGIN\n raiseSalary(eid, stdRaiseAmount);\n log(eid, \'raiseSalaryStd id=\' || eid);\n END;\n\nBEGIN \n log(0, \'Session \' || connection_id() || \' \' || current_user || \' started\');\nEND\ncharacter_set_client: utf8\ncollation_connection: utf8_general_ci\n Database Collation: latin1_swedish_ci\n\nURL: https://mariadb.com/kb/en/show-create-package-body/','','https://mariadb.com/kb/en/show-create-package-body/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (371,26,'SHOW CREATE PROCEDURE','Syntax\n------\n\nSHOW CREATE PROCEDURE proc_name\n\nDescription\n-----------\n\nThis statement is a MariaDB extension. It returns the exact string that can be\nused to re-create the named stored procedure, as well as the SQL_MODE that was\nused when the trigger has been created and the character set used by the\nconnection.. A similar statement, SHOW CREATE FUNCTION, displays information\nabout stored functions.\n\nBoth statements require that you are the owner of the routine or have the\nSELECT privilege on the mysql.proc table. When neither is true, the statements\ndisplay NULL for the Create Procedure or Create Function field.\n\nWarning Users with SELECT privileges on mysql.proc or USAGE privileges on *.*\ncan view the text of routines, even when they do not have privileges for the\nfunction or procedure itself.\n\nThe output of these statements is unreliably affected by the\nsql_quote_show_create server system variable - see\nhttp://bugs.mysql.com/bug.php?id=12719\n\nExamples\n--------\n\nHere\'s a comparison of the SHOW CREATE PROCEDURE and SHOW CREATE FUNCTION\nstatements.\n\nSHOW CREATE PROCEDURE test.simpleproc\\G\n*************************** 1. row ***************************\n Procedure: simpleproc\n sql_mode:\n Create Procedure: CREATE PROCEDURE `simpleproc`(OUT param1 INT)\n BEGIN\n SELECT COUNT(*) INTO param1 FROM t;\n END\ncharacter_set_client: latin1\ncollation_connection: latin1_swedish_ci\n Database Collation: latin1_swedish_ci\n\nSHOW CREATE FUNCTION test.hello\\G\n*************************** 1. row ***************************\n Function: hello\n sql_mode:\n Create Function: CREATE FUNCTION `hello`(s CHAR(20))\n RETURNS CHAR(50)\n RETURN CONCAT(\'Hello, \',s,\'!\')\ncharacter_set_client: latin1\ncollation_connection: latin1_swedish_ci\n Database Collation: latin1_swedish_ci\n\nWhen the user issuing the statement does not have privileges on the routine,\nattempting to CALL the procedure raises Error 1370.\n\nCALL test.prc1();\nError 1370 (42000): execute command denieed to user \'test_user\'@\'localhost\'\nfor routine \'test\'.\'prc1\'\n\nIf the user neither has privilege to the routine nor the SELECT privilege on\nmysql.proc table, it raises Error 1305, informing them that the procedure does\nnot exist.\n\nSHOW CREATE TABLES test.prc1\\G\nError 1305 (42000): PROCEDURE prc1 does not exist\n\nURL: https://mariadb.com/kb/en/show-create-procedure/','','https://mariadb.com/kb/en/show-create-procedure/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (372,26,'SHOW CREATE SEQUENCE','MariaDB starting with 10.3.1\n----------------------------\nSequences were introduced in MariaDB 10.3.\n\nSyntax\n------\n\nSHOW CREATE SEQUENCE sequence_name;\n\nDescription\n-----------\n\nShows the CREATE SEQUENCE statement that created the given sequence. The\nstatement requires the SELECT privilege for the table.\n\nExample\n-------\n\nCREATE SEQUENCE s1 START WITH 50;\nSHOW CREATE SEQUENCE s1\\G;\n*************************** 1. row ***************************\n Table: s1\nCreate Table: CREATE SEQUENCE `s1` start with 50 minvalue 1 maxvalue\n9223372036854775806 \n increment by 1 cache 1000 nocycle ENGINE=InnoDB\n\nNotes\n-----\n\nIf you want to see the underlying table structure used for the SEQUENCE you\ncan use SHOW CREATE TABLE on the SEQUENCE. You can also use SELECT to read the\ncurrent recorded state of the SEQUENCE:\n\nSHOW CREATE TABLE s1\\G\n*************************** 1. row ***************************\n Table: s1\nCreate Table: CREATE TABLE `s1` (\n `next_not_cached_value` bigint(21) NOT NULL,\n `minimum_value` bigint(21) NOT NULL,\n `maximum_value` bigint(21) NOT NULL,\n `start_value` bigint(21) NOT NULL COMMENT \'start value when sequences is\ncreated \n or value if RESTART is used\',\n `increment` bigint(21) NOT NULL COMMENT \'increment value\',\n `cache_size` bigint(21) unsigned NOT NULL,\n `cycle_option` tinyint(1) unsigned NOT NULL COMMENT \'0 if no cycles are\nallowed, \n 1 if the sequence should begin a new cycle when maximum_value is passed\',\n `cycle_count` bigint(21) NOT NULL COMMENT \'How many cycles have been done\'\n) ENGINE=InnoDB SEQUENCE=1\n\nSELECT * FROM s1\\G\n*************************** 1. row ***************************\nnext_not_cached_value: 50\n minimum_value: 1\n maximum_value: 9223372036854775806\n start_value: 50\n increment: 1\n cache_size: 1000\n cycle_option: 0\n cycle_count: 0\n\nURL: https://mariadb.com/kb/en/show-create-sequence/','','https://mariadb.com/kb/en/show-create-sequence/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (373,26,'SHOW CREATE TRIGGER','Syntax\n------\n\nSHOW CREATE TRIGGER trigger_name\n\nDescription\n-----------\n\nThis statement shows a CREATE TRIGGER statement that creates the given\ntrigger, as well as the SQL_MODE that was used when the trigger has been\ncreated and the character set used by the connection.\n\nThe output of this statement is unreliably affected by the\nsql_quote_show_create server system variable - see\nhttp://bugs.mysql.com/bug.php?id=12719\n\nExamples\n--------\n\nSHOW CREATE TRIGGER example\\G\n*************************** 1. row ***************************\n Trigger: example\n sql_mode:\nONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,STRICT_ALL_TABLES\n,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO\n\nENGINE_SUBSTITUTION\nSQL Original Statement: CREATE DEFINER=`root`@`localhost` TRIGGER example\nBEFORE\n INSERT ON t FOR EACH ROW\nBEGIN\n SET NEW.c = NEW.c * 2;\nEND\n character_set_client: cp850\n collation_connection: cp850_general_ci\n Database Collation: utf8_general_ci\n Created: 2016-09-29 13:53:34.35\n\nMariaDB starting with 10.2.3\n----------------------------\nThe Created column was added in MySQL 5.7 and MariaDB 10.2.3 as part of\nintroducing multiple trigger events per action.\n\nURL: https://mariadb.com/kb/en/show-create-trigger/','','https://mariadb.com/kb/en/show-create-trigger/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (374,26,'SHOW CREATE VIEW','Syntax\n------\n\nSHOW CREATE VIEW view_name\n\nDescription\n-----------\n\nThis statement shows a CREATE VIEW statement that creates the given view, as\nwell as the character set used by the connection when the view was created.\nThis statement also works with views.\n\nSHOW CREATE VIEW quotes table, column and stored function names according to\nthe value of the sql_quote_show_create server system variable.\n\nExamples\n--------\n\nSHOW CREATE VIEW example\\G\n*************************** 1. row ***************************\n View: example\n Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL\nSECURITY DEFINER VIEW `example` AS (select `t`.`id` AS `id`,`t`.`s` AS `s` from\n`t`)\ncharacter_set_client: cp850\ncollation_connection: cp850_general_ci\n\nWith sql_quote_show_create off:\n\nSHOW CREATE VIEW example\\G\n*************************** 1. row ***************************\n View: example\n Create View: CREATE ALGORITHM=UNDEFINED DEFINER=root@localhost SQL\nSECU\nRITY DEFINER VIEW example AS (select t.id AS id,t.s AS s from t)\ncharacter_set_client: cp850\ncollation_connection: cp850_general_ci\n\nGrants\n------\n\nTo be able to see a view, you need to have the SHOW VIEW and the SELECT\nprivilege on the view:\n\nGRANT SHOW VIEW,SELECT ON test_database.test_view TO \'test\'@\'localhost\';\n\nURL: https://mariadb.com/kb/en/show-create-view/','','https://mariadb.com/kb/en/show-create-view/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (375,26,'SHOW DATABASES','Syntax\n------\n\nSHOW {DATABASES | SCHEMAS}\n [LIKE \'pattern\' | WHERE expr]\n\nDescription\n-----------\n\nSHOW DATABASES lists the databases on the MariaDB server host. SHOW SCHEMAS is\na synonym for SHOW DATABASES. The LIKE clause, if present on its own,\nindicates which database names to match. The WHERE and LIKE clauses can be\ngiven to select rows using more general conditions, as discussed in Extended\nSHOW.\n\nYou see only those databases for which you have some kind of privilege, unless\nyou have the global SHOW DATABASES privilege. You can also get this list using\nthe mysqlshow command.\n\nIf the server was started with the --skip-show-database option, you cannot use\nthis statement at all unless you have the SHOW DATABASES privilege.\n\nThe list of results returned by SHOW DATABASES is based on directories in the\ndata directory, which is how MariaDB implements databases. It\'s possible that\noutput includes directories that do not correspond to actual databases.\n\nThe Information Schema SCHEMATA table also contains database information.\n\nExamples\n--------\n\nSHOW DATABASES;\n+--------------------+\n| Database |\n+--------------------+\n| information_schema |\n| mysql |\n| performance_schema |\n| test |\n+--------------------+\n\nSHOW DATABASES LIKE \'m%\';\n+---------------+\n| Database (m%) |\n+---------------+\n| mysql |\n+---------------+\n\nURL: https://mariadb.com/kb/en/show-databases/','','https://mariadb.com/kb/en/show-databases/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (376,26,'SHOW ENGINE','Syntax\n------\n\nSHOW ENGINE engine_name {STATUS | MUTEX}\n\nDescription\n-----------\n\nSHOW ENGINE displays operational information about a storage engine. The\nfollowing statements currently are supported:\n\nSHOW ENGINE INNODB STATUS\nSHOW ENGINE INNODB MUTEX\nSHOW ENGINE PERFORMANCE_SCHEMA STATUS\nSHOW ENGINE ROCKSDB STATUS\n\nIf the Sphinx Storage Engine is installed, the following is also supported:\n\nSHOW ENGINE SPHINX STATUS\n\nSee SHOW ENGINE SPHINX STATUS.\n\nOlder (and now removed) synonyms were SHOW INNODB STATUS for SHOW ENGINE\nINNODB STATUS and SHOW MUTEX STATUS for SHOW ENGINE INNODB MUTEX.\n\nSHOW ENGINE INNODB STATUS\n-------------------------\n\nSHOW ENGINE INNODB STATUS displays extensive information from the standard\nInnoDB Monitor about the state of the InnoDB storage engine. See SHOW ENGINE\nINNODB STATUS for more.\n\nSHOW ENGINE INNODB MUTEX\n------------------------\n\nSHOW ENGINE INNODB MUTEX displays InnoDB mutex statistics.\n\nThe statement displays the following output fields:\n\n* Type: Always InnoDB.\n* Name: The source file where the mutex is implemented, and the line number\n in the file where the mutex is created. The line number is dependent on the\nMariaDB version.\n* Status: This field displays the following values if UNIV_DEBUG was defined\nat compilation time (for example, in include/univ.h in the InnoDB part of the\nsource tree). Only the os_waits value is displayed if UNIV_DEBUG was not\ndefined. Without UNIV_DEBUG, the information on which the output is based is\ninsufficient to distinguish regular mutexes and mutexes that protect\n rw-locks (which allow multiple readers or a single writer). Consequently, the\n output may appear to contain multiple rows for the same mutex.\ncount indicates how many times the mutex was requested.\nspin_waits indicates how many times the spinlock had to run.\nspin_rounds indicates the number of spinlock rounds. (spin_rounds divided by\n spin_waits provides the average round count.)\nos_waits indicates the number of operating system waits. This occurs when\n the spinlock did not work (the mutex was not locked during the spinlock and\n it was necessary to yield to the operating system and wait).\nos_yields indicates the number of times a the thread trying to lock a mutex\n gave up its timeslice and yielded to the operating system (on the\n presumption that allowing other threads to run will free the mutex so that\n it can be locked).\nos_wait_times indicates the amount of time (in ms) spent in operating system\n waits, if the timed_mutexes system variable is 1 (ON). If timed_mutexes is 0\n (OFF), timing is disabled, so os_wait_times is 0. timed_mutexes is off by\n default.\n\nInformation from this statement can be used to diagnose system problems. For\nexample, large values of spin_waits and spin_rounds may indicate scalability\nproblems.\n\nThe information_schema.INNODB_MUTEXES table provides similar information.\n\nSHOW ENGINE PERFORMANCE_SCHEMA STATUS\n-------------------------------------\n\nThis statement shows how much memory is used for performance_schema tables and\ninternal buffers.\n\nThe output contains the following fields:\n\n* Type: Always performance_schema.\n* Name: The name of a table, the name of an internal buffer, or the\nperformance_schema word, followed by a dot and an attribute. Internal buffers\nnames are enclosed by parenthesis. performance_schema means that the attribute\nrefers to the whole database (it is a total). \n* Status: The value for the attribute.\n\nThe following attributes are shown, in this order, for all tables:\n\n* row_size: The memory used for an individual record. This value will never\nchange.\n* row_count: The number of rows in the table or buffer. For some tables, this\nvalue depends on a server system variable.\n* memory: For tables and performance_schema, this is the result of row_size *\nrow_count.\n\nFor internal buffers, the attributes are:\n\n* count\n* size\n\nSHOW ENGINE ROCKSDB STATUS\n--------------------------\n\nSee also MyRocks Performance Troubleshooting\n\nURL: https://mariadb.com/kb/en/show-engine/','','https://mariadb.com/kb/en/show-engine/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (377,26,'SHOW ENGINE INNODB STATUS','SHOW ENGINE INNODB STATUS is a specific form of the SHOW ENGINE statement that\ndisplays the InnoDB Monitor output, which is extensive InnoDB information\nwhich can be useful in diagnosing problems.\n\nThe following sections are displayed\n\n* Status: Shows the timestamp, monitor name and the number of seconds, or the\nelapsed time between the current time and the time the InnoDB Monitor output\nwas last displayed. The per-second averages are based upon this time.\n* BACKGROUND THREAD: srv_master_thread lines show work performed by the main\nbackground thread.\n* SEMAPHORES: Threads waiting for a semaphore and stats on how the number of\ntimes threads have needed a spin or a wait on a mutex or rw-lock semaphore. If\nthis number of threads is large, there may be I/O or contention issues.\nReducing the size of the innodb_thread_concurrency system variable may help if\ncontention is related to thread scheduling. Spin rounds per wait shows the\nnumber of spinlock rounds per OS wait for a mutex. \n* LATEST FOREIGN KEY ERROR: Only shown if there has been a foreign key\nconstraint error, it displays the failed statement and information about the\nconstraint and the related tables.\n* LATEST DETECTED DEADLOCK: Only shown if there has been a deadlock, it\ndisplays the transactions involved in the deadlock and the statements being\nexecuted, held and required locked and the transaction rolled back to.\n* TRANSACTIONS: The output of this section can help identify lock contention,\nas well as reasons for the deadlocks.\n* FILE I/O: InnoDB thread information as well as pending I/O operations and\nI/O performance statistics.\n* INSERT BUFFER AND ADAPTIVE HASH INDEX: InnoDB insert buffer (old name for\nthe change buffer) and adaptive hash index status information, including the\nnumber of each type of operation performed, and adaptive hash index\nperformance.\n* LOG: InnoDB log information, including current log sequence number, how far\nthe log has been flushed to disk, the position at which InnoDB last took a\ncheckpoint, pending writes and write performance statistics.\n* BUFFER POOL AND MEMORY: Information on buffer pool pages read and written,\nwhich allows you to see the number of data file I/O operations performed by\nyour queries. See InnoDB Buffer Pool for more. Similar information is also\navailable from the INFORMATION_SCHEMA.INNODB_BUFFER_POOL_STATS table.\n* ROW OPERATIONS:Information about the main thread, including the number and\nperformance rate for each type of row operation.\n\nIf the innodb_status_output_locks system variable is set to 1, extended lock\ninformation will be displayed.\n\nExample output:\n\n=====================================\n2019-09-06 12:44:13 0x7f93cc236700 INNODB MONITOR OUTPUT\n=====================================\nPer second averages calculated from the last 4 seconds\n-----------------\nBACKGROUND THREAD\n-----------------\nsrv_master_thread loops: 2 srv_active, 0 srv_shutdown, 83698 srv_idle\nsrv_master_thread log flush and writes: 83682\n----------\nSEMAPHORES\n----------\nOS WAIT ARRAY INFO: reservation count 15\nOS WAIT ARRAY INFO: signal count 8\nRW-shared spins 0, rounds 20, OS waits 7\nRW-excl spins 0, rounds 0, OS waits 0\nRW-sx spins 0, rounds 0, OS waits 0\nSpin rounds per wait: 20.00 RW-shared, 0.00 RW-excl, 0.00 RW-sx\n------------\nTRANSACTIONS\n------------\nTrx id counter 236\nPurge done for trx\'s n:o < 236 undo n:o < 0 state: running\nHistory list length 22\nLIST OF TRANSACTIONS FOR EACH SESSION:\n---TRANSACTION 421747401994584, not started\n0 lock struct(s), heap size 1136, 0 row lock(s)\n---TRANSACTION 421747401990328, not started\n0 lock struct(s), heap size 1136, 0 row lock(s)\n--------\nFILE I/O\n--------\nI/O thread 0 state: waiting for completed aio requests (insert buffer thread)\nI/O thread 1 state: waiting for completed aio requests (log thread)\nI/O thread 2 state: waiting for completed aio requests (read thread)\nI/O thread 3 state: waiting for completed aio requests (read thread)\nI/O thread 4 state: waiting for completed aio requests (read thread)\nI/O thread 5 state: waiting for completed aio requests (read thread)\nI/O thread 6 state: waiting for completed aio requests (write thread)\nI/O thread 7 state: waiting for completed aio requests (write thread)\nI/O thread 8 state: waiting for completed aio requests (write thread)\nI/O thread 9 state: waiting for completed aio requests (write thread)\nPending normal aio reads: [0, 0, 0, 0] , aio writes: [0, 0, 0, 0] ,\n ibuf aio reads:, log i/o\'s:, sync i/o\'s:\nPending flushes (fsync) log: 0; buffer pool: 0\n286 OS file reads, 171 OS file writes, 22 OS fsyncs\n0.00 reads/s, 0 avg bytes/read, 0.00 writes/s, 0.00 fsyncs/s\n-------------------------------------\nINSERT BUFFER AND ADAPTIVE HASH INDEX\n-------------------------------------\nIbuf: size 1, free list len 0, seg size 2, 0 merges\nmerged operations:\n insert 0, delete mark 0, delete 0\ndiscarded operations:\n insert 0, delete mark 0, delete 0\nHash table size 34679, node heap has 0 buffer(s)\nHash table size 34679, node heap has 0 buffer(s)\nHash table size 34679, node heap has 0 buffer(s)\nHash table size 34679, node heap has 0 buffer(s)\nHash table size 34679, node heap has 0 buffer(s)\nHash table size 34679, node heap has 0 buffer(s)\nHash table size 34679, node heap has 0 buffer(s)\nHash table size 34679, node heap has 0 buffer(s)\n0.00 hash searches/s, 0.00 non-hash searches/s\n---\nLOG\n---\nLog sequence number 445926\nLog flushed up to 445926\nPages flushed up to 445926\nLast checkpoint at 445917\n0 pending log flushes, 0 pending chkp writes\n18 log i/o\'s done, 0.00 log i/o\'s/second\n----------------------\nBUFFER POOL AND MEMORY\n----------------------\nTotal large memory allocated 167772160\nDictionary memory allocated 50768\nBuffer pool size 8012\nFree buffers 7611\nDatabase pages 401\nOld database pages 0\nModified db pages 0\nPercent of dirty pages(LRU & free pages): 0.000\nMax dirty pages percent: 75.000\nPending reads 0\nPending writes: LRU 0, flush list 0, single page 0\nPages made young 0, not young 0\n0.00 youngs/s, 0.00 non-youngs/s\nPages read 264, created 137, written 156\n0.00 reads/s, 0.00 creates/s, 0.00 writes/s\nNo buffer pool page gets since the last printout\nPages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead\n0.00/s\nLRU len: 401, unzip_LRU len: 0\nI/O sum[0]:cur[0], unzip sum[0]:cur[0]\n--------------\nROW OPERATIONS\n--------------\n0 queries inside InnoDB, 0 queries in queue\n0 read views open inside InnoDB\nProcess ID=4267, Main thread ID=140272021272320, state: sleeping\nNumber of rows inserted 1, updated 0, deleted 0, read 1\n0.00 inserts/s, 0.00 updates/s, 0.00 deletes/s, 0.00 reads/s\nNumber of system rows inserted 0, updated 0, deleted 0, read 0\n0.00 inserts/s, 0.00 updates/s, 0.00 deletes/s, 0.00 reads/s\n----------------------------\nEND OF INNODB MONITOR OUTPUT\n============================\n\nURL: https://mariadb.com/kb/en/show-engine-innodb-status/','','https://mariadb.com/kb/en/show-engine-innodb-status/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (378,26,'SHOW ENGINES','Syntax\n------\n\nSHOW [STORAGE] ENGINES\n\nDescription\n-----------\n\nSHOW ENGINES displays status information about the server\'s storage engines.\nThis is particularly useful for checking whether a storage engine is\nsupported, or to see what the default engine is. SHOW TABLE TYPES is a\ndeprecated synonym.\n\nThe information_schema.ENGINES table provides the same information.\n\nSince storage engines are plugins, different information about them is also\nshown in the information_schema.PLUGINS table and by the SHOW PLUGINS\nstatement.\n\nNote that both MySQL\'s InnoDB and Percona\'s XtraDB replacement are labeled as\nInnoDB. However, if XtraDB is in use, it will be specified in the COMMENT\nfield. See XtraDB and InnoDB. The same applies to FederatedX.\n\nThe output consists of the following columns:\n\n* Engine indicates the engine\'s name.\n* Support indicates whether the engine is installed, and whether it is the\ndefault engine for the current session.\n* Comment is a brief description.\n* Transactions, XA and Savepoints indicate whether transactions, XA\ntransactions and transaction savepoints are supported by the engine.\n\nExamples\n--------\n\nSHOW ENGINES\\G\n*************************** 1. row ***************************\n Engine: InnoDB\n Support: DEFAULT\n Comment: Supports transactions, row-level locking, and foreign keys\nTransactions: YES\n XA: YES\n Savepoints: YES\n*************************** 2. row ***************************\n Engine: CSV\n Support: YES\n Comment: CSV storage engine\nTransactions: NO\n XA: NO\n Savepoints: NO\n*************************** 3. row ***************************\n Engine: MyISAM\n Support: YES\n Comment: MyISAM storage engine\nTransactions: NO\n XA: NO\n Savepoints: NO\n*************************** 4. row ***************************\n Engine: BLACKHOLE\n Support: YES\n Comment: /dev/null storage engine (anything you write to it disappears)\nTransactions: NO\n XA: NO\n Savepoints: NO\n*************************** 5. row ***************************\n Engine: FEDERATED\n Support: YES\n Comment: FederatedX pluggable storage engine\nTransactions: YES\n XA: NO\n Savepoints: YES\n*************************** 6. row ***************************\n Engine: MRG_MyISAM\n Support: YES\n Comment: Collection of identical MyISAM tables\nTransactions: NO\n XA: NO\n Savepoints: NO\n*************************** 7. row ***************************\n Engine: ARCHIVE\n Support: YES\n Comment: Archive storage engine\nTransactions: NO\n XA: NO\n Savepoints: NO\n*************************** 8. row ***************************\n Engine: MEMORY\n Support: YES\n Comment: Hash based, stored in memory, useful for temporary tables\nTransactions: NO\n XA: NO\n Savepoints: NO\n*************************** 9. row ***************************\n Engine: PERFORMANCE_SCHEMA\n Support: YES\n Comment: Performance Schema\nTransactions: NO\n XA: NO\n Savepoints: NO\n*************************** 10. row ***************************\n Engine: Aria\n Support: YES\n Comment: Crash-safe tables with MyISAM heritage\nTransactions: NO\n XA: NO\n Savepoints: NO\n10 rows in set (0.00 sec)\n\nURL: https://mariadb.com/kb/en/show-engines/','','https://mariadb.com/kb/en/show-engines/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (379,26,'SHOW ERRORS','Syntax\n------\n\nSHOW ERRORS [LIMIT [offset,] row_count]\nSHOW ERRORS [LIMIT row_count OFFSET offset]\nSHOW COUNT(*) ERRORS\n\nDescription\n-----------\n\nThis statement is similar to SHOW WARNINGS, except that instead of displaying\nerrors, warnings, and notes, it displays only errors.\n\nThe LIMIT clause has the same syntax as for the SELECT statement.\n\nThe SHOW COUNT(*) ERRORS statement displays the number of errors. You can also\nretrieve this number from the error_count variable.\n\nSHOW COUNT(*) ERRORS;\nSELECT @@error_count;\n\nThe value of error_count might be greater than the number of messages\ndisplayed by SHOW WARNINGS if the max_error_count system variable is set so\nlow that not all messages are stored.\n\nFor a list of MariaDB error codes, see MariaDB Error Codes.\n\nExamples\n--------\n\nSELECT f();\nERROR 1305 (42000): FUNCTION f does not exist\n\nSHOW COUNT(*) ERRORS;\n+-----------------------+\n| @@session.error_count |\n+-----------------------+\n| 1 |\n+-----------------------+\n\nSHOW ERRORS;\n+-------+------+---------------------------+\n| Level | Code | Message |\n+-------+------+---------------------------+\n| Error | 1305 | FUNCTION f does not exist |\n+-------+------+---------------------------+\n\nURL: https://mariadb.com/kb/en/show-errors/','','https://mariadb.com/kb/en/show-errors/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (380,26,'SHOW EVENTS','Syntax\n------\n\nSHOW EVENTS [{FROM | IN} schema_name]\n [LIKE \'pattern\' | WHERE expr]\n\nDescription\n-----------\n\nShows information about Event Manager events (created with CREATE EVENT).\nRequires the EVENT privilege. Without any arguments, SHOW EVENTS lists all of\nthe events in the current schema:\n\nSELECT CURRENT_USER(), SCHEMA();\n+----------------+----------+\n| CURRENT_USER() | SCHEMA() |\n+----------------+----------+\n| jon@ghidora | myschema |\n+----------------+----------+\n\nSHOW EVENTS\\G\n*************************** 1. row ***************************\n Db: myschema\n Name: e_daily\n Definer: jon@ghidora\n Time zone: SYSTEM\n Type: RECURRING\n Execute at: NULL\n Interval value: 10\n Interval field: SECOND\n Starts: 2006-02-09 10:41:23\n Ends: NULL\n Status: ENABLED\n Originator: 0\ncharacter_set_client: latin1\ncollation_connection: latin1_swedish_ci\n Database Collation: latin1_swedish_ci\n\nTo see the event action, use SHOW CREATE EVENT instead, or look at the\ninformation_schema.EVENTS table.\n\nTo see events for a specific schema, use the FROM clause. For example, to see\nevents for the test schema, use the following statement:\n\nSHOW EVENTS FROM test;\n\nThe LIKE clause, if present, indicates which event names to match. The WHERE\nclause can be given to select rows using more general conditions, as discussed\nin Extended Show.\n\nURL: https://mariadb.com/kb/en/show-events/','','https://mariadb.com/kb/en/show-events/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (381,26,'SHOW FUNCTION STATUS','Syntax\n------\n\nSHOW FUNCTION STATUS\n [LIKE \'pattern\' | WHERE expr]\n\nDescription\n-----------\n\nThis statement is similar to SHOW PROCEDURE STATUS but for stored functions.\n\nThe LIKE clause, if present on its own, indicates which function names to\nmatch.\n\nThe WHERE and LIKE clauses can be given to select rows using more general\nconditions, as discussed in Extended SHOW.\n\nThe information_schema.ROUTINES table contains more detailed information.\n\nExamples\n--------\n\nShowing all stored functions:\n\nSHOW FUNCTION STATUS\\G\n*************************** 1. row ***************************\n Db: test\n Name: VatCents\n Type: FUNCTION\n Definer: root@localhost\n Modified: 2013-06-01 12:40:31\n Created: 2013-06-01 12:40:31\n Security_type: DEFINER\n Comment:\ncharacter_set_client: utf8\ncollation_connection: utf8_general_ci\n Database Collation: latin1_swedish_ci\n\nStored functions whose name starts with \'V\':\n\nSHOW FUNCTION STATUS LIKE \'V%\' \\G\n*************************** 1. row ***************************\n Db: test\n Name: VatCents\n Type: FUNCTION\n Definer: root@localhost\n Modified: 2013-06-01 12:40:31\n Created: 2013-06-01 12:40:31\n Security_type: DEFINER\n Comment:\ncharacter_set_client: utf8\ncollation_connection: utf8_general_ci\n Database Collation: latin1_swedish_ci\n\nStored functions with a security type of \'DEFINER\':\n\nSHOW FUNCTION STATUS WHERE Security_type LIKE \'DEFINER\' \\G\n*************************** 1. row ***************************\n Db: test\n Name: VatCents\n Type: FUNCTION\n Definer: root@localhost\n Modified: 2013-06-01 12:40:31\n Created: 2013-06-01 12:40:31\n Security_type: DEFINER\n Comment:\ncharacter_set_client: utf8\ncollation_connection: utf8_general_ci\n Database Collation: latin1_swedish_ci\n\nURL: https://mariadb.com/kb/en/show-function-status/','','https://mariadb.com/kb/en/show-function-status/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (382,26,'SHOW LOCALES','SHOW LOCALES was introduced as part of the Information Schema plugin extension.\n\nSHOW LOCALES is used to return locales information as part of the Locales\nplugin. While the information_schema.LOCALES table has 8 columns, the SHOW\nLOCALES statement will only display 4 of them:\n\nExample\n-------\n\nSHOW LOCALES;\n+-----+-------+-------------------------------------+------------------------+\n| Id | Name | Description | Error_Message_Language |\n+-----+-------+-------------------------------------+------------------------+\n| 0 | en_US | English - United States | english |\n| 1 | en_GB | English - United Kingdom | english |\n| 2 | ja_JP | Japanese - Japan | japanese |\n| 3 | sv_SE | Swedish - Sweden | swedish |\n...\n\nURL: https://mariadb.com/kb/en/show-locales/','','https://mariadb.com/kb/en/show-locales/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (383,26,'SHOW OPEN TABLES','Syntax\n------\n\nSHOW OPEN TABLES [FROM db_name]\n [LIKE \'pattern\' | WHERE expr]\n\nDescription\n-----------\n\nSHOW OPEN TABLES lists the non-TEMPORARY tables that are currently open in the\ntable cache. See http://dev.mysql.com/doc/refman/5.1/en/table-cache.html.\n\nThe FROM and LIKE clauses may be used.\n\nThe FROM clause, if present, restricts the tables shown to those present in\nthe db_name database.\n\nThe LIKE clause, if present on its own, indicates which table names to match.\nThe WHERE and LIKE clauses can be given to select rows using more general\nconditions, as discussed in Extended SHOW.\n\nThe following information is returned:\n\n+---------------------------+------------------------------------------------+\n| Column | Description |\n+---------------------------+------------------------------------------------+\n| Database | Database name. |\n+---------------------------+------------------------------------------------+\n| Name | Table name. |\n+---------------------------+------------------------------------------------+\n| In_use | Number of table instances being used. |\n+---------------------------+------------------------------------------------+\n| Name_locked | 1 if the table is name-locked, e.g. if it is |\n| | being dropped or renamed, otherwise 0. |\n+---------------------------+------------------------------------------------+\n\nBefore MariaDB 5.5, each use of, for example, LOCK TABLE ... WRITE would\nincrement In_use for that table. With the implementation of the metadata\nlocking improvements in MariaDB 5.5, LOCK TABLE... WRITE acquires a strong MDL\nlock, and concurrent connections will wait on this MDL lock, so any subsequent\nLOCK TABLE... WRITE will not increment In_use.\n\nExample\n-------\n\nSHOW OPEN TABLES;\n+----------+---------------------------+--------+-------------+\n| Database | Table | In_use | Name_locked |\n+----------+---------------------------+--------+-------------+\n...\n| test | xjson | 0 | 0 |\n| test | jauthor | 0 | 0 |\n| test | locks | 1 | 0 |\n...\n+----------+---------------------------+--------+-------------+\n\nURL: https://mariadb.com/kb/en/show-open-tables/','','https://mariadb.com/kb/en/show-open-tables/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (384,26,'SHOW PACKAGE BODY STATUS','MariaDB starting with 10.3.5\n----------------------------\nOracle-style packages were introduced in MariaDB 10.3.5.\n\nSyntax\n------\n\nSHOW PACKAGE BODY STATUS\n [LIKE \'pattern\' | WHERE expr]\n\nDescription\n-----------\n\nThe SHOW PACKAGE BODY STATUS statement returns characteristics of stored\npackage bodies (implementations), such as the database, name, type, creator,\ncreation and modification dates, and character set information. A similar\nstatement, SHOW PACKAGE STATUS, displays information about stored package\nspecifications.\n\nThe LIKE clause, if present, indicates which package names to match. The WHERE\nand LIKE clauses can be given to select rows using more general conditions, as\ndiscussed in Extended SHOW.\n\nThe ROUTINES table in the INFORMATION_SCHEMA database contains more detailed\ninformation.\n\nExamples\n--------\n\nSHOW PACKAGE BODY STATUS LIKE \'pkg1\'\\G\n*************************** 1. row ***************************\n Db: test\n Name: pkg1\n Type: PACKAGE BODY\n Definer: root@localhost\n Modified: 2018-02-27 14:44:14\n Created: 2018-02-27 14:44:14\n Security_type: DEFINER\n Comment: This is my first package body\ncharacter_set_client: utf8\ncollation_connection: utf8_general_ci\n Database Collation: latin1_swedish_ci\n\nURL: https://mariadb.com/kb/en/show-package-body-status/','','https://mariadb.com/kb/en/show-package-body-status/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (385,26,'SHOW PACKAGE STATUS','MariaDB starting with 10.3.5\n----------------------------\nOracle-style packages were introduced in MariaDB 10.3.5.\n\nSyntax\n------\n\nSHOW PACKAGE STATUS\n [LIKE \'pattern\' | WHERE expr]\n\nDescription\n-----------\n\nThe SHOW PACKAGE STATUS statement returns characteristics of stored package\nspecifications, such as the database, name, type, creator, creation and\nmodification dates, and character set information. A similar statement, SHOW\nPACKAGE BODY STATUS, displays information about stored package bodies (i.e.\nimplementations).\n\nThe LIKE clause, if present, indicates which package names to match. The WHERE\nand LIKE clauses can be given to select rows using more general conditions, as\ndiscussed in Extended SHOW.\n\nThe ROUTINES table in the INFORMATION_SCHEMA database contains more detailed\ninformation.\n\nExamples\n--------\n\nSHOW PACKAGE STATUS LIKE \'pkg1\'\\G\n*************************** 1. row ***************************\n Db: test\n Name: pkg1\n Type: PACKAGE\n Definer: root@localhost\n Modified: 2018-02-27 14:38:15\n Created: 2018-02-27 14:38:15\n Security_type: DEFINER\n Comment: This is my first package\ncharacter_set_client: utf8\ncollation_connection: utf8_general_ci\n Database Collation: latin1_swedish_ci\n\nURL: https://mariadb.com/kb/en/show-package-status/','','https://mariadb.com/kb/en/show-package-status/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (386,26,'SHOW PRIVILEGES','Syntax\n------\n\nSHOW PRIVILEGES\n\nDescription\n-----------\n\nSHOW PRIVILEGES shows the list of system privileges that the MariaDB server\nsupports. The exact list of privileges depends on the version of your server.\n\nNote that before MariaDB 10.3.23, MariaDB 10.4.13 and MariaDB 10.5.2 , the\nDelete history privilege displays as Delete versioning rows (MDEV-20382).\n\nExample\n-------\n\nFrom MariaDB 10.5.9\n\nSHOW PRIVILEGES;\n+--------------------------+---------------------------------------+-----------\n--------------------------------------------------------+\n| Privilege | Context | Comment \n |\n+--------------------------+---------------------------------------+-----------\n--------------------------------------------------------+\n| Alter | Tables | To alter\nthe table |\n| Alter routine | Functions,Procedures | To alter\nor drop stored functions/procedures |\n| Create | Databases,Tables,Indexes | To create\nnew databases and tables |\n| Create routine | Databases | To use\nCREATE FUNCTION/PROCEDURE |\n| Create temporary tables | Databases | To use\nCREATE TEMPORARY TABLE |\n| Create view | Tables | To create\nnew views |\n| Create user | Server Admin | To create\nnew users |\n| Delete | Tables | To delete\nexisting rows |\n| Delete history | Tables | To delete\nversioning table historical rows |\n| Drop | Databases,Tables | To drop\ndatabases, tables, and views |\n| Event | Server Admin | To\ncreate, alter, drop and execute events |\n| Execute | Functions,Procedures | To\nexecute stored routines |\n| File | File access on server | To read\nand write files on the server |\n| Grant option | Databases,Tables,Functions,Procedures | To give\nto other users those privileges you possess |\n| Index | Tables | To create\nor drop indexes |\n| Insert | Tables | To insert\ndata into tables |\n| Lock tables | Databases | To use\nLOCK TABLES (together with SELECT privilege) |\n| Process | Server Admin | To view\nthe plain text of currently executing queries |\n| Proxy | Server Admin | To make\nproxy user possible |\n| References | Databases,Tables | To have\nreferences on tables |\n| Reload | Server Admin | To reload\nor refresh tables, logs and privileges |\n| Binlog admin | Server | To purge\nbinary logs |\n| Binlog monitor | Server | To use\nSHOW BINLOG STATUS and SHOW BINARY LOG |\n| Binlog replay | Server | To use\nBINLOG (generated by mariadb-binlog) |\n| Replication master admin | Server | To\nmonitor connected slaves |\n| Replication slave admin | Server | To\nstart/stop slave and apply binlog events |\n| Slave monitor | Server | To use\nSHOW SLAVE STATUS and SHOW RELAYLOG EVENTS |\n| Replication slave | Server Admin | To read\nbinary log events from the master |\n| Select | Tables | To\nretrieve rows from table |\n| Show databases | Server Admin | To see\nall databases with SHOW DATABASES |\n| Show view | Tables | To see\nviews with SHOW CREATE VIEW |\n| Shutdown | Server Admin | To shut\ndown the server |\n| Super | Server Admin | To use\nKILL thread, SET GLOBAL, CHANGE MASTER, etc. |\n| Trigger | Tables | To use\ntriggers |\n| Create tablespace | Server Admin | To\ncreate/alter/drop tablespaces |\n| Update | Tables | To update\nexisting rows |\n| Set user | Server | To create\nviews and stored routines with a different definer |\n| Federated admin | Server | To\nexecute the CREATE SERVER, ALTER SERVER, DROP SERVER statements |\n| Connection admin | Server | To bypass\nconnection limits and kill other users\' connections |\n| Read_only admin | Server | To\nperform write operations even if @@read_only=ON |\n| Usage | Server Admin | No\nprivileges - allow connect only |\n+--------------------------+---------------------------------------+-----------\n--------------------------------------------------------+\n41 rows in set (0.000 sec)\n\nURL: https://mariadb.com/kb/en/show-privileges/','','https://mariadb.com/kb/en/show-privileges/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (387,26,'SHOW PROCEDURE CODE','Syntax\n------\n\nSHOW PROCEDURE CODE proc_name\n\nDescription\n-----------\n\nThis statement is a MariaDB extension that is available only for servers that\nhave been built with debugging support. It displays a representation of the\ninternal implementation of the named stored procedure. A similar statement,\nSHOW FUNCTION CODE, displays information about stored functions.\n\nBoth statements require that you be the owner of the routine or have SELECT\naccess to the mysql.proc table.\n\nIf the named routine is available, each statement produces a result set. Each\nrow in the result set corresponds to one \"instruction\" in the routine. The\nfirst column is Pos, which is an ordinal number beginning with 0. The second\ncolumn is Instruction, which contains an SQL statement (usually changed from\nthe original source), or a directive which has meaning only to the\nstored-routine handler.\n\nExamples\n--------\n\nDELIMITER //\n\nCREATE PROCEDURE p1 ()\n BEGIN\n DECLARE fanta INT DEFAULT 55;\n DROP TABLE t2;\n LOOP\n INSERT INTO t3 VALUES (fanta);\n END LOOP;\n END//\nQuery OK, 0 rows affected (0.00 sec)\n\nSHOW PROCEDURE CODE p1//\n+-----+----------------------------------------+\n| Pos | Instruction |\n+-----+----------------------------------------+\n| 0 | set fanta@0 55 |\n| 1 | stmt 9 \"DROP TABLE t2\" |\n| 2 | stmt 5 \"INSERT INTO t3 VALUES (fanta)\" |\n| 3 | jump 2 |\n+-----+----------------------------------------+\n\nURL: https://mariadb.com/kb/en/show-procedure-code/','','https://mariadb.com/kb/en/show-procedure-code/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (388,26,'SHOW PROCEDURE STATUS','Syntax\n------\n\nSHOW PROCEDURE STATUS\n [LIKE \'pattern\' | WHERE expr]\n\nDescription\n-----------\n\nThis statement is a MariaDB extension. It returns characteristics of a stored\nprocedure, such as the database, name, type, creator, creation and\nmodification dates, and character set information. A similar statement, SHOW\nFUNCTION STATUS, displays information about stored functions.\n\nThe LIKE clause, if present, indicates which procedure or function names to\nmatch. The WHERE and LIKE clauses can be given to select rows using more\ngeneral conditions, as discussed in Extended SHOW.\n\nThe ROUTINES table in the INFORMATION_SCHEMA database contains more detailed\ninformation.\n\nExamples\n--------\n\nSHOW PROCEDURE STATUS LIKE \'p1\'\\G\n*************************** 1. row ***************************\n Db: test\n Name: p1\n Type: PROCEDURE\n Definer: root@localhost\n Modified: 2010-08-23 13:23:03\n Created: 2010-08-23 13:23:03\n Security_type: DEFINER\n Comment:\ncharacter_set_client: latin1\ncollation_connection: latin1_swedish_ci\n Database Collation: latin1_swedish_ci\n\nURL: https://mariadb.com/kb/en/show-procedure-status/','','https://mariadb.com/kb/en/show-procedure-status/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (389,26,'SHOW PROCESSLIST','Syntax\n------\n\nSHOW [FULL] PROCESSLIST\n\nDescription\n-----------\n\nSHOW PROCESSLIST shows you which threads are running. You can also get this\ninformation from the information_schema.PROCESSLIST table or the mysqladmin\nprocesslist command. If you have the PROCESS privilege, you can see all\nthreads. Otherwise, you can see only your own threads (that is, threads\nassociated with the MariaDB account that you are using). If you do not use the\nFULL keyword, only the first 100 characters of each statement are shown in the\nInfo field.\n\nThe columns shown in SHOW PROCESSLIST are:\n\n+---------------------+------------------------------------------------------+\n| Name | Description |\n+---------------------+------------------------------------------------------+\n| ID | The client\'s process ID. |\n+---------------------+------------------------------------------------------+\n| USER | The username associated with the process. |\n+---------------------+------------------------------------------------------+\n| HOST | The host the client is connected to. |\n+---------------------+------------------------------------------------------+\n| DB | The default database of the process (NULL if no |\n| | default). |\n+---------------------+------------------------------------------------------+\n| COMMAND | The command type. See Thread Command Values. |\n+---------------------+------------------------------------------------------+\n| TIME | The amount of time, in seconds, the process has |\n| | been in its current state. For a replica SQL thread |\n| | before MariaDB 10.1, this is the time in seconds |\n| | between the last replicated event\'s timestamp and |\n| | the replica machine\'s real time. |\n+---------------------+------------------------------------------------------+\n| STATE | See Thread States. |\n+---------------------+------------------------------------------------------+\n| INFO | The statement being executed. |\n+---------------------+------------------------------------------------------+\n| PROGRESS | The total progress of the process (0-100%) (see |\n| | Progress Reporting). |\n+---------------------+------------------------------------------------------+\n\nSee TIME_MS column in information_schema.PROCESSLIST for differences in the\nTIME column between MariaDB and MySQL.\n\nThe information_schema.PROCESSLIST table contains the following additional\ncolumns:\n\n+---------------------+------------------------------------------------------+\n| Name | Description |\n+---------------------+------------------------------------------------------+\n| TIME_MS | The amount of time, in milliseconds, the process |\n| | has been in its current state. |\n+---------------------+------------------------------------------------------+\n| STAGE | The stage the process is currently in. |\n+---------------------+------------------------------------------------------+\n| MAX_STAGE | The maximum number of stages. |\n+---------------------+------------------------------------------------------+\n| PROGRESS | The progress of the process within the current |\n| | stage (0-100%). |\n+---------------------+------------------------------------------------------+\n| MEMORY_USED | The amount of memory used by the process. |\n+---------------------+------------------------------------------------------+\n| EXAMINED_ROWS | The number of rows the process has examined. |\n+---------------------+------------------------------------------------------+\n| QUERY_ID | Query ID. |\n+---------------------+------------------------------------------------------+\n\nNote that the PROGRESS field from the information schema, and the PROGRESS\nfield from SHOW PROCESSLIST display different results. SHOW PROCESSLIST shows\nthe total progress, while the information schema shows the progress for the\ncurrent stage only.\n\nThreads can be killed using their thread_id or their query_id, with the KILL\nstatement.\n\nSince queries on this table are locking, if the performance_schema is enabled,\nyou may want to query the THREADS table instead.\n\nExamples\n--------\n\nSHOW PROCESSLIST;\n+----+-----------------+-----------+------+---------+------+-------------------\n----+------------------+----------+\n| Id | User | Host | db | Command | Time | State \n | Info | Progress |\n+----+-----------------+-----------+------+---------+------+-------------------\n----+------------------+----------+\n| 2 | event_scheduler | localhost | NULL | Daemon | 2693 | Waiting on empty\nqueue | NULL | 0.000 |\n| 4 | root | localhost | NULL | Query | 0 | Table lock \n | SHOW PROCESSLIST | 0.000 |\n+----+-----------------+-----------+------+---------+------+-------------------\n----+------------------+----------+\n\nURL: https://mariadb.com/kb/en/show-processlist/','','https://mariadb.com/kb/en/show-processlist/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (390,26,'SHOW PROFILE','Syntax\n------\n\nSHOW PROFILE [type [, type] ... ]\n [FOR QUERY n]\n [LIMIT row_count [OFFSET offset]]\n\ntype:\n ALL\n | BLOCK IO\n | CONTEXT SWITCHES\n | CPU\n | IPC\n | MEMORY\n | PAGE FAULTS\n | SOURCE\n | SWAPS\n\nDescription\n-----------\n\nThe SHOW PROFILE and SHOW PROFILES statements display profiling information\nthat indicates resource usage for statements executed during the course of the\ncurrent session.\n\nProfiling is controlled by the profiling session variable, which has a default\nvalue of 0 (OFF). Profiling is enabled by setting profiling to 1 or ON:\n\nSET profiling = 1;\n\nSHOW PROFILES displays a list of the most recent statements sent to the\nmaster. The size of the list is controlled by the profiling_history_size\nsession variable, which has a default value of 15. The maximum value is 100.\nSetting the value to 0 has the practical effect of disabling profiling.\n\nAll statements are profiled except SHOW PROFILES and SHOW PROFILE, so you will\nfind neither of those statements in the profile list. Malformed statements are\nprofiled. For example, SHOW PROFILING is an illegal statement, and a syntax\nerror occurs if you try to execute it, but it will show up in the profiling\nlist.\n\nSHOW PROFILE displays detailed information about a single statement. Without\nthe FOR QUERY n clause, the output pertains to the most recently executed\nstatement. If FOR QUERY n is included, SHOW PROFILE displays information for\nstatement n. The values of n correspond to the Query_ID values displayed by\nSHOW PROFILES.\n\nThe LIMIT row_count clause may be given to limit the output to row_count rows.\nIf LIMIT is given, OFFSET offset may be added to begin the output offset rows\ninto the full set of rows.\n\nBy default, SHOW PROFILE displays Status and Duration columns. The Status\nvalues are like the State values displayed by SHOW PROCESSLIST, although there\nmight be some minor differences in interpretation for the two statements for\nsome status values (see\nhttp://dev.mysql.com/doc/refman/5.6/en/thread-information.html).\n\nOptional type values may be specified to display specific additional types of\ninformation:\n\n* ALL displays all information\n* BLOCK IO displays counts for block input and output operations\n* CONTEXT SWITCHES displays counts for voluntary and involuntary context\nswitches\n* CPU displays user and system CPU usage times\n* IPC displays counts for messages sent and received\n* MEMORY is not currently implemented\n* PAGE FAULTS displays counts for major and minor page faults\n* SOURCE displays the names of functions from the source code, together with\nthe name and line number of the file in which the function occurs\n* SWAPS displays swap counts\n\nProfiling is enabled per session. When a session ends, its profiling\ninformation is lost.\n\nThe information_schema.PROFILING table contains similar information.\n\nExamples\n--------\n\nSELECT @@profiling;\n+-------------+\n| @@profiling |\n+-------------+\n| 0 |\n+-------------+\n\nSET profiling = 1;\n\nUSE test;\n\nDROP TABLE IF EXISTS t1;\n\nCREATE TABLE T1 (id INT);\n\nSHOW PROFILES;\n+----------+------------+--------------------------+\n| Query_ID | Duration | Query |\n+----------+------------+--------------------------+\n| 1 | 0.00009200 | SELECT DATABASE() |\n| 2 | 0.00023800 | show databases |\n| 3 | 0.00018900 | show tables |\n| 4 | 0.00014700 | DROP TABLE IF EXISTS t1 |\n| 5 | 0.24476900 | CREATE TABLE T1 (id INT) |\n+----------+------------+--------------------------+\n\nSHOW PROFILE;\n+----------------------+----------+\n| Status | Duration |\n+----------------------+----------+\n| starting | 0.000042 |\n| checking permissions | 0.000044 |\n| creating table | 0.244645 |\n| After create | 0.000013 |\n| query end | 0.000003 |\n| freeing items | 0.000016 |\n| logging slow query | 0.000003 |\n| cleaning up | 0.000003 |\n+----------------------+----------+\n\nSHOW PROFILE FOR QUERY 4;\n+--------------------+----------+\n| Status | Duration |\n+--------------------+----------+\n| starting | 0.000126 |\n| query end | 0.000004 |\n| freeing items | 0.000012 |\n| logging slow query | 0.000003 |\n| cleaning up | 0.000002 |\n+--------------------+----------+\n\nSHOW PROFILE CPU FOR QUERY 5;\n+----------------------+----------+----------+------------+\n| Status | Duration | CPU_user | CPU_system |\n+----------------------+----------+----------+------------+\n| starting | 0.000042 | 0.000000 | 0.000000 |\n| checking permissions | 0.000044 | 0.000000 | 0.000000 |\n| creating table | 0.244645 | 0.000000 | 0.000000 |\n| After create | 0.000013 | 0.000000 | 0.000000 |\n| query end | 0.000003 | 0.000000 | 0.000000 |\n| freeing items | 0.000016 | 0.000000 | 0.000000 |\n| logging slow query | 0.000003 | 0.000000 | 0.000000 |\n| cleaning up | 0.000003 | 0.000000 | 0.000000 |\n+----------------------+----------+----------+------------+\n\nURL: https://mariadb.com/kb/en/show-profile/','','https://mariadb.com/kb/en/show-profile/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (391,26,'SHOW PROFILES','Syntax\n------\n\nSHOW PROFILES\n\nDescription\n-----------\n\nThe SHOW PROFILES statement displays profiling information that indicates\nresource usage for statements executed during the course of the current\nsession. It is used together with SHOW PROFILE.\n\nURL: https://mariadb.com/kb/en/show-profiles/','','https://mariadb.com/kb/en/show-profiles/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (392,26,'SHOW QUERY_RESPONSE_TIME','It is possible to use SHOW QUERY_RESPONSE_TIME as an alternative for\nretrieving information from the QUERY_RESPONSE_TIME plugin.\n\nThis was introduced as part of the Information Schema plugin extension.\n\nURL: https://mariadb.com/kb/en/show-query_response_time/','','https://mariadb.com/kb/en/show-query_response_time/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (393,26,'SHOW STATUS','Syntax\n------\n\nSHOW [GLOBAL | SESSION] STATUS\n [LIKE \'pattern\' | WHERE expr]\n\nDescription\n-----------\n\nSHOW STATUS provides server status information. This information also can be\nobtained using the mysqladmin extended-status command, or by querying the\nInformation Schema GLOBAL_STATUS and SESSION_STATUS tables. The LIKE clause,\nif present, indicates which variable names to match. The WHERE clause can be\ngiven to select rows using more general conditions.\n\nWith the GLOBAL modifier, SHOW STATUS displays the status values for all\nconnections to MariaDB. With SESSION, it displays the status values for the\ncurrent connection. If no modifier is present, the default is SESSION. LOCAL\nis a synonym for SESSION. If you see a lot of 0 values, the reason is probably\nthat you have used SHOW STATUS with a new connection instead of SHOW GLOBAL\nSTATUS.\n\nSome status variables have only a global value. For these, you get the same\nvalue for both GLOBAL and SESSION.\n\nSee Server Status Variables for a full list, scope and description of the\nvariables that can be viewed with SHOW STATUS.\n\nThe LIKE clause, if present on its own, indicates which variable name to match.\n\nThe WHERE and LIKE clauses can be given to select rows using more general\nconditions, as discussed in Extended SHOW.\n\nExamples\n--------\n\nFull output from MariaDB 10.1.17:\n\nSHOW GLOBAL STATUS;\n+--------------------------------------------------------------+---------------\n------------------------+\n| Variable_name | Value \n |\n+--------------------------------------------------------------+---------------\n------------------------+\n| Aborted_clients | 0 \n |\n| Aborted_connects | 0 \n |\n| Access_denied_errors | 0 \n |\n| Acl_column_grants | 0 \n |\n| Acl_database_grants | 2 \n |\n| Acl_function_grants | 0 \n |\n| Acl_procedure_grants | 0 \n |\n| Acl_proxy_users | 2 \n |\n| Acl_role_grants | 0 \n |\n| Acl_roles | 0 \n |\n| Acl_table_grants | 0 \n |\n| Acl_users | 6 \n |\n| Aria_pagecache_blocks_not_flushed | 0 \n |\n| Aria_pagecache_blocks_unused | 15706 \n |\n| Aria_pagecache_blocks_used | 0 \n |\n| Aria_pagecache_read_requests | 0 \n |\n| Aria_pagecache_reads | 0 \n |\n| Aria_pagecache_write_requests | 0 \n |\n| Aria_pagecache_writes | 0 \n |\n| Aria_transaction_log_syncs | 0 \n |\n| Binlog_commits | 0 \n |\n| Binlog_group_commits | 0 \n |\n| Binlog_group_commit_trigger_count | 0 \n |\n| Binlog_group_commit_trigger_lock_wait | 0 \n |\n| Binlog_group_commit_trigger_timeout | 0 \n |\n| Binlog_snapshot_file | \n |\n| Binlog_snapshot_position | 0 \n |\n| Binlog_bytes_written | 0 \n |\n| Binlog_cache_disk_use | 0 \n |\n| Binlog_cache_use | 0 \n |\n| Binlog_stmt_cache_disk_use | 0 \n |\n| Binlog_stmt_cache_use | 0 \n |\n| Busy_time | 0.000000 \n |\n| Bytes_received | 432 \n |\n| Bytes_sent | 15183 \n |\n| Com_admin_commands | 1 \n |\n| Com_alter_db | 0 \n |\n| Com_alter_db_upgrade | 0 \n |\n| Com_alter_event | 0 \n |\n| Com_alter_function | 0 \n |\n| Com_alter_procedure | 0 \n |\n| Com_alter_server | 0 \n |\n| Com_alter_table | 0 \n |\n| Com_alter_tablespace | 0 \n |\n| Com_analyze | 0 \n |\n| Com_assign_to_keycache | 0 \n |\n| Com_begin | 0 \n |\n| Com_binlog | 0 \n |\n| Com_call_procedure | 0 \n |\n| Com_change_db | 0 \n |\n| Com_change_master | 0 \n |\n| Com_check | 0 \n |\n| Com_checksum | 0 \n |\n| Com_commit | 0 \n |\n| Com_compound_sql | 0 \n |\n| Com_create_db | 0 \n |\n| Com_create_event | 0 \n |\n| Com_create_function | 0 \n |\n| Com_create_index | 0 \n |\n| Com_create_procedure | 0 \n |\n| Com_create_role | 0 \n |\n| Com_create_server | 0 \n |\n| Com_create_table | 0 \n |\n| Com_create_temporary_table | 0 \n |\n| Com_create_trigger | 0 \n |\n| Com_create_udf | 0 \n |\n| Com_create_user | 0 \n |\n| Com_create_view | 0 \n |\n| Com_dealloc_sql | 0 \n |\n| Com_delete | 0 \n |\n| Com_delete_multi | 0 \n |\n| Com_do | 0 \n |\n| Com_drop_db | 0 \n |\n| Com_drop_event | 0 \n |\n| Com_drop_function | 0 \n |\n| Com_drop_index | 0 \n |\n| Com_drop_procedure | 0 \n |\n| Com_drop_role | 0 \n |\n| Com_drop_server | 0 \n |\n| Com_drop_table | 0 \n |\n| Com_drop_temporary_table | 0 \n |\n| Com_drop_trigger | 0 \n |\n| Com_drop_user | 0 \n |\n| Com_drop_view | 0 \n |\n| Com_empty_query | 0 \n |\n| Com_execute_sql | 0 \n |\n| Com_flush | 0 \n |\n| Com_get_diagnostics | 0 \n |\n| Com_grant | 0 \n |\n| Com_grant_role | 0 \n |\n| Com_ha_close | 0 \n |\n| Com_ha_open | 0 \n |\n| Com_ha_read | 0 \n |\n| Com_help | 0 \n |\n| Com_insert | 0 \n |\n| Com_insert_select | 0 \n |\n| Com_install_plugin | 0 \n |\n| Com_kill | 0 \n |\n| Com_load | 0 \n |\n| Com_lock_tables | 0 \n |\n| Com_optimize | 0 \n |\n| Com_preload_keys | 0 \n |\n| Com_prepare_sql | 0 \n |\n| Com_purge | 0 \n |\n| Com_purge_before_date | 0 \n |\n| Com_release_savepoint | 0 \n |\n| Com_rename_table | 0 \n |\n| Com_rename_user | 0 \n |\n| Com_repair | 0 \n |\n| Com_replace | 0 \n |\n| Com_replace_select | 0 \n |\n| Com_reset | 0 \n |\n| Com_resignal | 0 \n |\n| Com_revoke | 0 \n |\n| Com_revoke_all | 0 \n |\n| Com_revoke_role | 0 \n |\n| Com_rollback | 0 \n |\n| Com_rollback_to_savepoint | 0 \n |\n| Com_savepoint | 0 \n |\n| Com_select | 1 \n |\n| Com_set_option | 0 \n |\n| Com_show_authors | 0 \n |\n| Com_show_binlog_events | 0 \n |\n| Com_show_binlogs | 0 \n |\n| Com_show_charsets | 0 \n |\n| Com_show_collations | 0 \n |\n| Com_show_contributors | 0 \n |\n| Com_show_create_db | 0 \n |\n| Com_show_create_event | 0 \n |\n| Com_show_create_func | 0 \n |\n| Com_show_create_proc | 0 \n |\n| Com_show_create_table | 0 \n |\n| Com_show_create_trigger | 0 \n |\n| Com_show_databases | 0 \n |\n| Com_show_engine_logs | 0 \n |','','https://mariadb.com/kb/en/show-status/');
-update help_topic set description = CONCAT(description, '\n| Com_show_engine_mutex | 0 \n |\n| Com_show_engine_status | 0 \n |\n| Com_show_errors | 0 \n |\n| Com_show_events | 0 \n |\n| Com_show_explain | 0 \n |\n| Com_show_fields | 0 \n |\n| Com_show_function_status | 0 \n |\n| Com_show_generic | 0 \n |\n| Com_show_grants | 0 \n |\n| Com_show_keys | 0 \n |\n| Com_show_master_status | 0 \n |\n| Com_show_open_tables | 0 \n |\n| Com_show_plugins | 0 \n |\n| Com_show_privileges | 0 \n |\n| Com_show_procedure_status | 0 \n |\n| Com_show_processlist | 0 \n |\n| Com_show_profile | 0 \n |\n| Com_show_profiles | 0 \n |\n| Com_show_relaylog_events | 0 \n |\n| Com_show_slave_hosts | 0 \n |\n| Com_show_slave_status | 0 \n |\n| Com_show_status | 2 \n |\n| Com_show_storage_engines | 0 \n |\n| Com_show_table_status | 0 \n |\n| Com_show_tables | 0 \n |\n| Com_show_triggers | 0 \n |\n| Com_show_variables | 0 \n |\n| Com_show_warnings | 0 \n |\n| Com_shutdown | 0 \n |\n| Com_signal | 0 \n |\n| Com_start_all_slaves | 0 \n |\n| Com_start_slave | 0 \n |\n| Com_stmt_close | 0 \n |\n| Com_stmt_execute | 0 \n |\n| Com_stmt_fetch | 0 \n |\n| Com_stmt_prepare | 0 \n |\n| Com_stmt_reprepare | 0 \n |\n| Com_stmt_reset | 0 \n |\n| Com_stmt_send_long_data | 0 \n |\n| Com_stop_all_slaves | 0 \n |\n| Com_stop_slave | 0 \n |\n| Com_truncate | 0 \n |\n| Com_uninstall_plugin | 0 \n |\n| Com_unlock_tables | 0 \n |\n| Com_update | 0 \n |\n| Com_update_multi | 0 \n |\n| Com_xa_commit | 0 \n |\n| Com_xa_end | 0 \n |\n| Com_xa_prepare | 0 \n |\n| Com_xa_recover | 0 \n |\n| Com_xa_rollback | 0 \n |\n| Com_xa_start | 0 \n |\n| Compression | OFF \n |\n| Connection_errors_accept | 0 \n |\n| Connection_errors_internal | 0 \n |\n| Connection_errors_max_connections | 0 \n |\n| Connection_errors_peer_address | 0 \n |\n| Connection_errors_select | 0 \n |\n| Connection_errors_tcpwrap | 0 \n |\n| Connections | 4 \n |\n| Cpu_time | 0.000000 \n |\n| Created_tmp_disk_tables | 0 \n |\n| Created_tmp_files | 6 \n |\n| Created_tmp_tables | 2 \n |\n| Delayed_errors | 0 \n |\n| Delayed_insert_threads | 0 \n |\n| Delayed_writes | 0 \n |\n| Delete_scan | 0 \n |\n| Empty_queries | 0 \n |\n| Executed_events | 0 \n |\n| Executed_triggers | 0 \n |\n| Feature_delay_key_write | 0 \n |\n| Feature_dynamic_columns | 0 \n |\n| Feature_fulltext | 0 \n |\n| Feature_gis | 0 \n |\n| Feature_locale | 0 \n |\n| Feature_subquery | 0 \n |\n| Feature_timezone | 0 \n |\n| Feature_trigger | 0 \n |\n| Feature_xml | 0 \n |\n| Flush_commands | 1 \n |\n| Handler_commit | 1 \n |\n| Handler_delete | 0 \n |\n| Handler_discover | 0 \n |\n| Handler_external_lock | 0 \n |\n| Handler_icp_attempts | 0 \n |\n| Handler_icp_match | 0 \n |\n| Handler_mrr_init | 0 \n |\n| Handler_mrr_key_refills | 0 \n |\n| Handler_mrr_rowid_refills | 0 \n |\n| Handler_prepare | 0 \n |\n| Handler_read_first | 3 \n |\n| Handler_read_key | 0 \n |\n| Handler_read_last | 0 \n |\n| Handler_read_next | 0 \n |\n| Handler_read_prev | 0 \n |\n| Handler_read_retry | 0 \n |\n| Handler_read_rnd | 0 \n |\n| Handler_read_rnd_deleted | 0 \n |\n| Handler_read_rnd_next | 537 \n |\n| Handler_rollback | 0 \n |\n| Handler_savepoint | 0 \n |\n| Handler_savepoint_rollback | 0 \n |\n| Handler_tmp_update | 0 \n |\n| Handler_tmp_write | 516 \n |\n| Handler_update | 0 \n |\n| Handler_write | 0 \n |\n| Innodb_available_undo_logs | 128 \n |\n| Innodb_background_log_sync | 222 \n |\n| Innodb_buffer_pool_bytes_data | 2523136 \n |\n| Innodb_buffer_pool_bytes_dirty | 0 \n |\n| Innodb_buffer_pool_dump_status | Dumping\nbuffer pool(s) not yet started |\n| Innodb_buffer_pool_load_status | Loading\nbuffer pool(s) not yet started |\n| Innodb_buffer_pool_pages_data | 154 \n |\n| Innodb_buffer_pool_pages_dirty | 0 \n |\n| Innodb_buffer_pool_pages_flushed | 1 \n |\n| Innodb_buffer_pool_pages_free | 8037 \n |\n| Innodb_buffer_pool_pages_lru_flushed | 0 \n |\n| Innodb_buffer_pool_pages_made_not_young | 0 \n |\n| Innodb_buffer_pool_pages_made_young | 0 \n |\n| Innodb_buffer_pool_pages_misc | 0 \n |\n| Innodb_buffer_pool_pages_old | 0 \n |\n| Innodb_buffer_pool_pages_total | 8191 \n |\n| Innodb_buffer_pool_read_ahead | 0 \n |\n| Innodb_buffer_pool_read_ahead_evicted | 0 \n |\n| Innodb_buffer_pool_read_ahead_rnd | 0 \n |\n| Innodb_buffer_pool_read_requests | 558 \n |\n| Innodb_buffer_pool_reads | 155 \n |\n| Innodb_buffer_pool_wait_free | 0 \n |\n| Innodb_buffer_pool_write_requests | 1 \n |\n| Innodb_checkpoint_age | 0 \n |\n| Innodb_checkpoint_max_age | 80826164 \n |\n| Innodb_data_fsyncs | 5 \n |\n| Innodb_data_pending_fsyncs | 0 \n |\n| Innodb_data_pending_reads | 0 \n |\n| Innodb_data_pending_writes | 0 \n |\n| Innodb_data_read | 2609664 \n |\n| Innodb_data_reads | 172 \n |\n| Innodb_data_writes | 5 \n |\n| Innodb_data_written | 34304 \n |\n| Innodb_dblwr_pages_written | 1 \n |\n| Innodb_dblwr_writes | 1 \n |\n| Innodb_deadlocks | 0 \n |\n| Innodb_have_atomic_builtins | ON \n |\n| Innodb_history_list_length | 0 \n |\n| Innodb_ibuf_discarded_delete_marks | 0 \n |\n| Innodb_ibuf_discarded_deletes | 0 \n |\n| Innodb_ibuf_discarded_inserts | 0 \n |\n| Innodb_ibuf_free_list | 0 \n |\n| Innodb_ibuf_merged_delete_marks | 0 \n |\n| Innodb_ibuf_merged_deletes | 0 \n |\n| Innodb_ibuf_merged_inserts | 0 \n |\n| Innodb_ibuf_merges | 0 \n |') WHERE help_topic_id = 393;
-update help_topic set description = CONCAT(description, '\n| Innodb_ibuf_segment_size | 2 \n |\n| Innodb_ibuf_size | 1 \n |\n| Innodb_log_waits | 0 \n |\n| Innodb_log_write_requests | 0 \n |\n| Innodb_log_writes | 1 \n |\n| Innodb_lsn_current | 1616829 \n |\n| Innodb_lsn_flushed | 1616829 \n |\n| Innodb_lsn_last_checkpoint | 1616829 \n |\n| Innodb_master_thread_active_loops | 0 \n |\n| Innodb_master_thread_idle_loops | 222 \n |\n| Innodb_max_trx_id | 2308 \n |\n| Innodb_mem_adaptive_hash | 2217568 \n |\n| Innodb_mem_dictionary | 630703 \n |\n| Innodb_mem_total | 140771328 \n |\n| Innodb_mutex_os_waits | 1 \n |\n| Innodb_mutex_spin_rounds | 30 \n |\n| Innodb_mutex_spin_waits | 1 \n |\n| Innodb_oldest_view_low_limit_trx_id | 0 \n |\n| Innodb_os_log_fsyncs | 3 \n |\n| Innodb_os_log_pending_fsyncs | 0 \n |\n| Innodb_os_log_pending_writes | 0 \n |\n| Innodb_os_log_written | 512 \n |\n| Innodb_page_size | 16384 \n |\n| Innodb_pages_created | 0 \n |\n| Innodb_pages_read | 154 \n |\n| Innodb_pages_written | 1 \n |\n| Innodb_purge_trx_id | 0 \n |\n| Innodb_purge_undo_no | 0 \n |\n| Innodb_read_views_memory | 88 \n |\n| Innodb_row_lock_current_waits | 0 \n |\n| Innodb_row_lock_time | 0 \n |\n| Innodb_row_lock_time_avg | 0 \n |\n| Innodb_row_lock_time_max | 0 \n |\n| Innodb_row_lock_waits | 0 \n |\n| Innodb_rows_deleted | 0 \n |\n| Innodb_rows_inserted | 0 \n |\n| Innodb_rows_read | 0 \n |\n| Innodb_rows_updated | 0 \n |\n| Innodb_system_rows_deleted | 0 \n |\n| Innodb_system_rows_inserted | 0 \n |\n| Innodb_system_rows_read | 0 \n |\n| Innodb_system_rows_updated | 0 \n |\n| Innodb_s_lock_os_waits | 2 \n |\n| Innodb_s_lock_spin_rounds | 60 \n |\n| Innodb_s_lock_spin_waits | 2 \n |\n| Innodb_truncated_status_writes | 0 \n |\n| Innodb_x_lock_os_waits | 0 \n |\n| Innodb_x_lock_spin_rounds | 0 \n |\n| Innodb_x_lock_spin_waits | 0 \n |\n| Innodb_page_compression_saved | 0 \n |\n| Innodb_page_compression_trim_sect512 | 0 \n |\n| Innodb_page_compression_trim_sect1024 | 0 \n |\n| Innodb_page_compression_trim_sect2048 | 0 \n |\n| Innodb_page_compression_trim_sect4096 | 0 \n |\n| Innodb_page_compression_trim_sect8192 | 0 \n |\n| Innodb_page_compression_trim_sect16384 | 0 \n |\n| Innodb_page_compression_trim_sect32768 | 0 \n |\n| Innodb_num_index_pages_written | 0 \n |\n| Innodb_num_non_index_pages_written | 5 \n |\n| Innodb_num_pages_page_compressed | 0 \n |\n| Innodb_num_page_compressed_trim_op | 0 \n |\n| Innodb_num_page_compressed_trim_op_saved | 0 \n |\n| Innodb_num_pages_page_decompressed | 0 \n |\n| Innodb_num_pages_page_compression_error | 0 \n |\n| Innodb_num_pages_encrypted | 0 \n |\n| Innodb_num_pages_decrypted | 0 \n |\n| Innodb_have_lz4 | OFF \n |\n| Innodb_have_lzo | OFF \n |\n| Innodb_have_lzma | OFF \n |\n| Innodb_have_bzip2 | OFF \n |\n| Innodb_have_snappy | OFF \n |\n| Innodb_defragment_compression_failures | 0 \n |\n| Innodb_defragment_failures | 0 \n |\n| Innodb_defragment_count | 0 \n |\n| Innodb_onlineddl_rowlog_rows | 0 \n |\n| Innodb_onlineddl_rowlog_pct_used | 0 \n |\n| Innodb_onlineddl_pct_progress | 0 \n |\n| Innodb_secondary_index_triggered_cluster_reads | 0 \n |\n| Innodb_secondary_index_triggered_cluster_reads_avoided | 0 \n |\n| Innodb_encryption_rotation_pages_read_from_cache | 0 \n |\n| Innodb_encryption_rotation_pages_read_from_disk | 0 \n |\n| Innodb_encryption_rotation_pages_modified | 0 \n |\n| Innodb_encryption_rotation_pages_flushed | 0 \n |\n| Innodb_encryption_rotation_estimated_iops | 0 \n |\n| Innodb_scrub_background_page_reorganizations | 0 \n |\n| Innodb_scrub_background_page_splits | 0 \n |\n| Innodb_scrub_background_page_split_failures_underflow | 0 \n |\n| Innodb_scrub_background_page_split_failures_out_of_filespace | 0 \n |\n| Innodb_scrub_background_page_split_failures_missing_index | 0 \n |\n| Innodb_scrub_background_page_split_failures_unknown | 0 \n |\n| Key_blocks_not_flushed | 0 \n |\n| Key_blocks_unused | 107163 \n |\n| Key_blocks_used | 0 \n |\n| Key_blocks_warm | 0 \n |\n| Key_read_requests | 0 \n |\n| Key_reads | 0 \n |\n| Key_write_requests | 0 \n |\n| Key_writes | 0 \n |\n| Last_query_cost | 0.000000 \n |\n| Master_gtid_wait_count | 0 \n |\n| Master_gtid_wait_time | 0 \n |\n| Master_gtid_wait_timeouts | 0 \n |\n| Max_statement_time_exceeded | 0 \n |\n| Max_used_connections | 1 \n |\n| Memory_used | 273614696 \n |\n| Not_flushed_delayed_rows | 0 \n |\n| Open_files | 25 \n |\n| Open_streams | 0 \n |\n| Open_table_definitions | 18 \n |\n| Open_tables | 11 \n |\n| Opened_files | 77 \n |\n| Opened_plugin_libraries | 0 \n |\n| Opened_table_definitions | 18 \n |\n| Opened_tables | 18 \n |\n| Opened_views | 0 \n |\n| Performance_schema_accounts_lost | 0 \n |\n| Performance_schema_cond_classes_lost | 0 \n |\n| Performance_schema_cond_instances_lost | 0 \n |\n| Performance_schema_digest_lost | 0 \n |\n| Performance_schema_file_classes_lost | 0 \n |\n| Performance_schema_file_handles_lost | 0 \n |\n| Performance_schema_file_instances_lost | 0 \n |\n| Performance_schema_hosts_lost | 0 \n |\n| Performance_schema_locker_lost | 0 \n |\n| Performance_schema_mutex_classes_lost | 0 \n |\n| Performance_schema_mutex_instances_lost | 0 \n |\n| Performance_schema_rwlock_classes_lost | 0 \n |\n| Performance_schema_rwlock_instances_lost | 0 \n |\n| Performance_schema_session_connect_attrs_lost | 0 \n |\n| Performance_schema_socket_classes_lost | 0 \n |\n| Performance_schema_socket_instances_lost | 0 \n |\n| Performance_schema_stage_classes_lost | 0 \n |\n| Performance_schema_statement_classes_lost | 0 \n |\n| Performance_schema_table_handles_lost | 0 \n |\n| Performance_schema_table_instances_lost | 0 \n |\n| Performance_schema_thread_classes_lost | 0 \n |\n| Performance_schema_thread_instances_lost | 0 \n |\n| Performance_schema_users_lost | 0 \n |\n| Prepared_stmt_count | 0 \n |\n| Qcache_free_blocks | 1 \n |\n| Qcache_free_memory | 1031336 \n |\n| Qcache_hits | 0 \n |\n| Qcache_inserts | 0 \n |\n| Qcache_lowmem_prunes | 0 \n |\n| Qcache_not_cached | 0 \n |\n| Qcache_queries_in_cache | 0 \n |\n| Qcache_total_blocks | 1 \n |\n| Queries | 4 \n |\n| Questions | 4 \n |\n| Rows_read | 10 \n |\n| Rows_sent | 517 \n |\n| Rows_tmp_read | 516 \n |\n| Rpl_status | AUTH_MASTER \n |') WHERE help_topic_id = 393;
-update help_topic set description = CONCAT(description, '\n| Select_full_join | 0 \n |\n| Select_full_range_join | 0 \n |\n| Select_range | 0 \n |\n| Select_range_check | 0 \n |\n| Select_scan | 2 \n |\n| Slave_connections | 0 \n |\n| Slave_heartbeat_period | 0.000 \n |\n| Slave_open_temp_tables | 0 \n |\n| Slave_received_heartbeats | 0 \n |\n| Slave_retried_transactions | 0 \n |\n| Slave_running | OFF \n |\n| Slave_skipped_errors | 0 \n |\n| Slaves_connected | 0 \n |\n| Slaves_running | 0 \n |\n| Slow_launch_threads | 0 \n |\n| Slow_queries | 0 \n |\n| Sort_merge_passes | 0 \n |\n| Sort_priority_queue_sorts | 0 \n |\n| Sort_range | 0 \n |\n| Sort_rows | 0 \n |\n| Sort_scan | 0 \n |\n| Ssl_accept_renegotiates | 0 \n |\n| Ssl_accepts | 0 \n |\n| Ssl_callback_cache_hits | 0 \n |\n| Ssl_cipher | \n |\n| Ssl_cipher_list | \n |\n| Ssl_client_connects | 0 \n |\n| Ssl_connect_renegotiates | 0 \n |\n| Ssl_ctx_verify_depth | 0 \n |\n| Ssl_ctx_verify_mode | 0 \n |\n| Ssl_default_timeout | 0 \n |\n| Ssl_finished_accepts | 0 \n |\n| Ssl_finished_connects | 0 \n |\n| Ssl_server_not_after | \n |\n| Ssl_server_not_before | \n |\n| Ssl_session_cache_hits | 0 \n |\n| Ssl_session_cache_misses | 0 \n |\n| Ssl_session_cache_mode | NONE \n |\n| Ssl_session_cache_overflows | 0 \n |\n| Ssl_session_cache_size | 0 \n |\n| Ssl_session_cache_timeouts | 0 \n |\n| Ssl_sessions_reused | 0 \n |\n| Ssl_used_session_cache_entries | 0 \n |\n| Ssl_verify_depth | 0 \n |\n| Ssl_verify_mode | 0 \n |\n| Ssl_version | \n |\n| Subquery_cache_hit | 0 \n |\n| Subquery_cache_miss | 0 \n |\n| Syncs | 2 \n |\n| Table_locks_immediate | 21 \n |\n| Table_locks_waited | 0 \n |\n| Tc_log_max_pages_used | 0 \n |\n| Tc_log_page_size | 4096 \n |\n| Tc_log_page_waits | 0 \n |\n| Threadpool_idle_threads | 0 \n |\n| Threadpool_threads | 0 \n |\n| Threads_cached | 0 \n |\n| Threads_connected | 1 \n |\n| Threads_created | 2 \n |\n| Threads_running | 1 \n |\n| Update_scan | 0 \n |\n| Uptime | 223 \n |\n| Uptime_since_flush_status | 223 \n |\n| wsrep_cluster_conf_id |\n18446744073709551615 |\n| wsrep_cluster_size | 0 \n |\n| wsrep_cluster_state_uuid | \n |\n| wsrep_cluster_status | Disconnected \n |\n| wsrep_connected | OFF \n |\n| wsrep_local_bf_aborts | 0 \n |\n| wsrep_local_index |\n18446744073709551615 |\n| wsrep_provider_name | \n |\n| wsrep_provider_vendor | \n |\n| wsrep_provider_version | \n |\n| wsrep_ready | OFF \n |\n| wsrep_thread_count | 0 \n |\n+--------------------------------------------------------------+---------------\n------------------------+\n516 rows in set (0.00 sec)\n\nExample of filtered output:\n\nSHOW STATUS LIKE \'Key%\';\n+------------------------+--------+\n| Variable_name | Value |\n+------------------------+--------+\n| Key_blocks_not_flushed | 0 |\n| Key_blocks_unused | 107163 |\n| Key_blocks_used | 0 |\n| Key_blocks_warm | 0 |\n| Key_read_requests | 0 |\n| Key_reads | 0 |\n| Key_write_requests | 0 |\n| Key_writes | 0 |\n+------------------------+--------+\n8 rows in set (0.00 sec)\n\nURL: https://mariadb.com/kb/en/show-status/') WHERE help_topic_id = 393;
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (394,26,'SHOW TABLE STATUS','Syntax\n------\n\nSHOW TABLE STATUS [{FROM | IN} db_name]\n [LIKE \'pattern\' | WHERE expr]\n\nDescription\n-----------\n\nSHOW TABLE STATUS works like SHOW TABLES, but provides more extensive\ninformation about each non-TEMPORARY table.\n\nThe LIKE clause, if present on its own, indicates which table names to match.\nThe WHERE and LIKE clauses can be given to select rows using more general\nconditions, as discussed in Extended SHOW.\n\nThe following information is returned:\n\n+---------------------------+------------------------------------------------+\n| Column | Description |\n+---------------------------+------------------------------------------------+\n| Name | Table name. |\n+---------------------------+------------------------------------------------+\n| Engine | Table storage engine. |\n+---------------------------+------------------------------------------------+\n| Version | Version number from the table\'s .frm file. |\n+---------------------------+------------------------------------------------+\n| Row_format | Row format (see InnoDB, Aria and MyISAM row |\n| | formats). |\n+---------------------------+------------------------------------------------+\n| Rows | Number of rows in the table. Some engines, |\n| | such as XtraDB and InnoDB may store an |\n| | estimate. |\n+---------------------------+------------------------------------------------+\n| Avg_row_length | Average row length in the table. |\n+---------------------------+------------------------------------------------+\n| Data_length | For InnoDB/XtraDB, the index size, in pages, |\n| | multiplied by the page size. For Aria and |\n| | MyISAM, length of the data file, in bytes. |\n| | For MEMORY, the approximate allocated memory. |\n+---------------------------+------------------------------------------------+\n| Max_data_length | Maximum length of the data file, ie the total |\n| | number of bytes that could be stored in the |\n| | table. Not used in XtraDB and InnoDB. |\n+---------------------------+------------------------------------------------+\n| Index_length | Length of the index file. |\n+---------------------------+------------------------------------------------+\n| Data_free | Bytes allocated but unused. For InnoDB tables |\n| | in a shared tablespace, the free space of the |\n| | shared tablespace with small safety margin. |\n| | An estimate in the case of partitioned tables |\n| | - see the PARTITIONS table. |\n+---------------------------+------------------------------------------------+\n| Auto_increment | Next AUTO_INCREMENT value. |\n+---------------------------+------------------------------------------------+\n| Create_time | Time the table was created. Some engines just |\n| | return the ctime information from the file |\n| | system layer here, in that case the value is |\n| | not necessarily the table creation time but |\n| | rather the time the file system metadata for |\n| | it had last changed. |\n+---------------------------+------------------------------------------------+\n| Update_time | Time the table was last updated. On Windows, |\n| | the timestamp is not updated on update, so |\n| | MyISAM values will be inaccurate. In InnoDB, |\n| | if shared tablespaces are used, will be NULL, |\n| | while buffering can also delay the update, so |\n| | the value will differ from the actual time of |\n| | the last UPDATE, INSERT or DELETE. |\n+---------------------------+------------------------------------------------+\n| Check_time | Time the table was last checked. Not kept by |\n| | all storage engines, in which case will be |\n| | NULL. |\n+---------------------------+------------------------------------------------+\n| Collation | Character set and collation. |\n+---------------------------+------------------------------------------------+\n| Checksum | Live checksum value, if any. |\n+---------------------------+------------------------------------------------+\n| Create_options | Extra CREATE TABLE options. |\n+---------------------------+------------------------------------------------+\n| Comment | Table comment provided when MariaDB created |\n| | the table. |\n+---------------------------+------------------------------------------------+\n| Max_index_length | Maximum index length (supported by MyISAM and |\n| | Aria tables). Added in MariaDB 10.3.5. |\n+---------------------------+------------------------------------------------+\n| Temporary | Placeholder to signal that a table is a |\n| | temporary table. Currently always \"N\", except |\n| | \"Y\" for generated information_schema tables |\n| | and NULL for views. Added in MariaDB 10.3.5. |\n+---------------------------+------------------------------------------------+\n\nSimilar information can be found in the information_schema.TABLES table as\nwell as by using mysqlshow:\n\nmysqlshow --status db_name\n\nViews\n-----\n\nFor views, all columns in SHOW TABLE STATUS are NULL except \'Name\' and\n\'Comment\'\n\nExample\n-------\n\nshow table status\\G\n*************************** 1. row ***************************\n Name: bus_routes\n Engine: InnoDB\n Version: 10\n Row_format: Dynamic\n Rows: 5\n Avg_row_length: 3276\n Data_length: 16384\nMax_data_length: 0\n Index_length: 0\n Data_free: 0\n Auto_increment: NULL\n Create_time: 2017-05-24 11:17:46\n Update_time: NULL\n Check_time: NULL\n Collation: latin1_swedish_ci\n Checksum: NULL\n Create_options: \n Comment:\n\nURL: https://mariadb.com/kb/en/show-table-status/','','https://mariadb.com/kb/en/show-table-status/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (395,26,'SHOW TABLES','Syntax\n------\n\nSHOW [FULL] TABLES [FROM db_name]\n [LIKE \'pattern\' | WHERE expr]\n\nDescription\n-----------\n\nSHOW TABLES lists the non-TEMPORARY tables, sequences and views in a given\ndatabase.\n\nThe LIKE clause, if present on its own, indicates which table names to match.\nThe WHERE and LIKE clauses can be given to select rows using more general\nconditions, as discussed in Extended SHOW. For example, when searching for\ntables in the test database, the column name for use in the WHERE and LIKE\nclauses will be Tables_in_test\n\nThe FULL modifier is supported such that SHOW FULL TABLES displays a second\noutput column. Values for the second column, Table_type, are BASE TABLE for a\ntable, VIEW for a view and SEQUENCE for a sequence.\n\nYou can also get this information using:\n\nmysqlshow db_name\n\nSee mysqlshow for more details.\n\nIf you have no privileges for a base table or view, it does not show up in the\noutput from SHOW TABLES or mysqlshow db_name.\n\nThe information_schema.TABLES table, as well as the SHOW TABLE STATUS\nstatement, provide extended information about tables.\n\nExamples\n--------\n\nSHOW TABLES;\n+----------------------+\n| Tables_in_test |\n+----------------------+\n| animal_count |\n| animals |\n| are_the_mooses_loose |\n| aria_test2 |\n| t1 |\n| view1 |\n+----------------------+\n\nShowing the tables beginning with a only.\n\nSHOW TABLES WHERE Tables_in_test LIKE \'a%\';\n+----------------------+\n| Tables_in_test |\n+----------------------+\n| animal_count |\n| animals |\n| are_the_mooses_loose |\n| aria_test2 |\n+----------------------+\n\nShowing tables and table types:\n\nSHOW FULL TABLES;\n+----------------+------------+\n| Tables_in_test | Table_type |\n+----------------+------------+\n| s1 | SEQUENCE |\n| student | BASE TABLE |\n| v1 | VIEW |\n+----------------+------------+\n\nURL: https://mariadb.com/kb/en/show-tables/','','https://mariadb.com/kb/en/show-tables/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (396,26,'SHOW TABLE_STATISTICS','Syntax\n------\n\nSHOW TABLE_STATISTICS\n\nDescription\n-----------\n\nThe SHOW TABLE_STATISTICS statementis part of the User Statistics feature. It\nwas removed as a separate statement in MariaDB 10.1.1, but effectively\nreplaced by the generic SHOW information_schema_table statement. The\ninformation_schema.TABLE_STATISTICS table shows statistics on table usage\n\nThe userstat system variable must be set to 1 to activate this feature. See\nthe User Statistics and information_schema.TABLE_STATISTICS articles for more\ninformation.\n\nExample\n-------\n\nSHOW TABLE_STATISTICS\\G\n*************************** 1. row ***************************\n Table_schema: mysql\n Table_name: proxies_priv\n Rows_read: 2\n Rows_changed: 0\nRows_changed_x_#indexes: 0\n*************************** 2. row ***************************\n Table_schema: test\n Table_name: employees_example\n Rows_read: 7\n Rows_changed: 0\nRows_changed_x_#indexes: 0\n*************************** 3. row ***************************\n Table_schema: mysql\n Table_name: user\n Rows_read: 16\n Rows_changed: 0\nRows_changed_x_#indexes: 0\n*************************** 4. row ***************************\n Table_schema: mysql\n Table_name: db\n Rows_read: 2\n Rows_changed: 0\nRows_changed_x_#indexes: 0\n\nURL: https://mariadb.com/kb/en/show-table-statistics/','','https://mariadb.com/kb/en/show-table-statistics/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (397,26,'SHOW TRIGGERS','Syntax\n------\n\nSHOW TRIGGERS [FROM db_name]\n [LIKE \'pattern\' | WHERE expr]\n\nDescription\n-----------\n\nSHOW TRIGGERS lists the triggers currently defined for tables in a database\n(the default database unless a FROM clause is given). This statement requires\nthe TRIGGER privilege (prior to MySQL 5.1.22, it required the SUPER privilege).\n\nThe LIKE clause, if present on its own, indicates which table names to match\nand causes the statement to display triggers for those tables. The WHERE and\nLIKE clauses can be given to select rows using more general conditions, as\ndiscussed in Extended SHOW.\n\nSimilar information is stored in the information_schema.TRIGGERS table.\n\nMariaDB starting with 10.2.3\n----------------------------\nIf there are multiple triggers for the same action, then the triggers are\nshown in action order.\n\nExamples\n--------\n\nFor the trigger defined at Trigger Overview:\n\nSHOW triggers Like \'animals\' \\G\n*************************** 1. row ***************************\n Trigger: the_mooses_are_loose\n Event: INSERT\n Table: animals\n Statement: BEGIN\n IF NEW.name = \'Moose\' THEN\n UPDATE animal_count SET animal_count.animals = animal_count.animals+100;\n ELSE \n UPDATE animal_count SET animal_count.animals = animal_count.animals+1;\n END IF;\nEND\n Timing: AFTER\n Created: 2016-09-29 13:53:34.35\n sql_mode:\n Definer: root@localhost\ncharacter_set_client: utf8\ncollation_connection: utf8_general_ci\n Database Collation: latin1_swedish_ci\n\nListing all triggers associated with a certain table:\n\nSHOW TRIGGERS FROM test WHERE `Table` = \'user\' \\G\n*************************** 1. row ***************************\n Trigger: user_ai\n Event: INSERT\n Table: user\n Statement: BEGIN END\n Timing: AFTER\n Created: 2016-09-29 13:53:34.35\n sql_mode:\n Definer: root@%\ncharacter_set_client: utf8\ncollation_connection: utf8_general_ci\n Database Collation: latin1_swedish_ci\n\nSHOW triggers WHERE Event Like \'Insert\' \\G\n*************************** 1. row ***************************\n Trigger: the_mooses_are_loose\n Event: INSERT\n Table: animals\n Statement: BEGIN\n IF NEW.name = \'Moose\' THEN\n UPDATE animal_count SET animal_count.animals = animal_count.animals+100;\n ELSE \n UPDATE animal_count SET animal_count.animals = animal_count.animals+1;\n END IF;\nEND\n Timing: AFTER\n Created: 2016-09-29 13:53:34.35\n sql_mode:\n Definer: root@localhost\ncharacter_set_client: utf8\ncollation_connection: utf8_general_ci\n Database Collation: latin1_swedish_ci\n\n* character_set_client is the session value of the character_set_client system\nvariable when the trigger was created. \n* collation_connection is the session value of the collation_connection system\nvariable when the trigger was\n created. \n* Database Collation is the collation of the database \n with which the trigger is associated.\n\nThese columns were added in MariaDB/MySQL 5.1.21.\n\nOld triggers created before MySQL 5.7 and MariaDB 10.2.3 has NULL in the\nCreated column.\n\nURL: https://mariadb.com/kb/en/show-triggers/','','https://mariadb.com/kb/en/show-triggers/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (398,26,'SHOW USER_STATISTICS','Syntax\n------\n\nSHOW USER_STATISTICS\n\nDescription\n-----------\n\nThe SHOW USER_STATISTICS statement is part of the User Statistics feature. It\nwas removed as a separate statement in MariaDB 10.1.1, but effectively\nreplaced by the generic SHOW information_schema_table statement. The\ninformation_schema.USER_STATISTICS table holds statistics about user activity.\nYou can use this table to find out such things as which user is causing the\nmost load and which users are being abusive. You can also use this table to\nmeasure how close to capacity the server may be.\n\nThe userstat system variable must be set to 1 to activate this feature. See\nthe User Statistics and information_schema.USER_STATISTICS table for more\ninformation.\n\nExample\n-------\n\nSHOW USER_STATISTICS\\G\n*************************** 1. row ***************************\n User: root\n Total_connections: 1\nConcurrent_connections: 0\n Connected_time: 3297\n Busy_time: 0.14113400000000006\n Cpu_time: 0.017637000000000003\n Bytes_received: 969\n Bytes_sent: 22355\n Binlog_bytes_written: 0\n Rows_read: 10\n Rows_sent: 67\n Rows_deleted: 0\n Rows_inserted: 0\n Rows_updated: 0\n Select_commands: 7\n Update_commands: 0\n Other_commands: 0\n Commit_transactions: 1\n Rollback_transactions: 0\n Denied_connections: 0\n Lost_connections: 0\n Access_denied: 0\n Empty_queries: 7\n\nURL: https://mariadb.com/kb/en/show-user-statistics/','','https://mariadb.com/kb/en/show-user-statistics/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (399,26,'SHOW VARIABLES','Syntax\n------\n\nSHOW [GLOBAL | SESSION] VARIABLES\n [LIKE \'pattern\' | WHERE expr]\n\nDescription\n-----------\n\nSHOW VARIABLES shows the values of MariaDB system variables. This information\nalso can be obtained using the mysqladmin variables command. The LIKE clause,\nif present, indicates which variable names to match. The WHERE clause can be\ngiven to select rows using more general conditions.\n\nWith the GLOBAL modifier, SHOW VARIABLES displays the values that are used for\nnew connections to MariaDB. With SESSION, it displays the values that are in\neffect for the current connection. If no modifier is present, the default is\nSESSION. LOCAL is a synonym for SESSION. With a LIKE clause, the statement\ndisplays only rows for those variables with names that match the pattern. To\nobtain the row for a specific variable, use a LIKE clause as shown:\n\nSHOW VARIABLES LIKE \'maria_group_commit\';\nSHOW SESSION VARIABLES LIKE \'maria_group_commit\';\n\nTo get a list of variables whose name match a pattern, use the \"%\" wildcard\ncharacter in a LIKE clause:\n\nSHOW VARIABLES LIKE \'%maria%\';\nSHOW GLOBAL VARIABLES LIKE \'%maria%\';\n\nWildcard characters can be used in any position within the pattern to be\nmatched. Strictly speaking, because \"_\" is a wildcard that matches any single\ncharacter, you should escape it as \"\\_\" to match it literally. In practice,\nthis is rarely necessary.\n\nThe WHERE and LIKE clauses can be given to select rows using more general\nconditions, as discussed in Extended SHOW.\n\nSee SET for information on setting server system variables.\n\nSee Server System Variables for a list of all the variables that can be set.\n\nYou can also see the server variables by querying the Information Schema\nGLOBAL_VARIABLES and SESSION_VARIABLES tables.\n\nExamples\n--------\n\nSHOW VARIABLES LIKE \'aria%\';\n+------------------------------------------+---------------------+\n| Variable_name | Value |\n+------------------------------------------+---------------------+\n| aria_block_size | 8192 |\n| aria_checkpoint_interval | 30 |\n| aria_checkpoint_log_activity | 1048576 |\n| aria_force_start_after_recovery_failures | 0 |\n| aria_group_commit | none |\n| aria_group_commit_interval | 0 |\n| aria_log_file_size | 1073741824 |\n| aria_log_purge_type | immediate |\n| aria_max_sort_file_size | 9223372036853727232 |\n| aria_page_checksum | ON |\n| aria_pagecache_age_threshold | 300 |\n| aria_pagecache_buffer_size | 134217728 |\n| aria_pagecache_division_limit | 100 |\n| aria_recover | NORMAL |\n| aria_repair_threads | 1 |\n| aria_sort_buffer_size | 134217728 |\n| aria_stats_method | nulls_unequal |\n| aria_sync_log_dir | NEWFILE |\n| aria_used_for_temp_tables | ON |\n+------------------------------------------+---------------------+\n\nSELECT VARIABLE_NAME, SESSION_VALUE, GLOBAL_VALUE FROM\n INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE\n VARIABLE_NAME LIKE \'max_error_count\' OR\n VARIABLE_NAME LIKE \'innodb_sync_spin_loops\';\n+---------------------------+---------------+--------------+\n| VARIABLE_NAME | SESSION_VALUE | GLOBAL_VALUE |\n+---------------------------+---------------+--------------+\n| MAX_ERROR_COUNT | 64 | 64 |\n| INNODB_SYNC_SPIN_LOOPS | NULL | 30 |\n+---------------------------+---------------+--------------+\n\nSET GLOBAL max_error_count=128;\n\nSELECT VARIABLE_NAME, SESSION_VALUE, GLOBAL_VALUE FROM\n INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE\n VARIABLE_NAME LIKE \'max_error_count\' OR\n VARIABLE_NAME LIKE \'innodb_sync_spin_loops\';\n+---------------------------+---------------+--------------+\n| VARIABLE_NAME | SESSION_VALUE | GLOBAL_VALUE |\n+---------------------------+---------------+--------------+\n| MAX_ERROR_COUNT | 64 | 128 |\n| INNODB_SYNC_SPIN_LOOPS | NULL | 30 |\n+---------------------------+---------------+--------------+\n\nSET GLOBAL max_error_count=128;\n\nSHOW VARIABLES LIKE \'max_error_count\';\n+-----------------+-------+\n| Variable_name | Value |\n+-----------------+-------+\n| max_error_count | 64 |\n+-----------------+-------+\n\nSHOW GLOBAL VARIABLES LIKE \'max_error_count\';\n+-----------------+-------+\n| Variable_name | Value |\n+-----------------+-------+\n| max_error_count | 128 |\n+-----------------+-------+\n\nBecause the following variable only has a global scope, the global value is\nreturned even when specifying SESSION (in this case by default):\n\nSHOW VARIABLES LIKE \'innodb_sync_spin_loops\';\n+------------------------+-------+\n| Variable_name | Value |\n+------------------------+-------+\n| innodb_sync_spin_loops | 30 |\n+------------------------+-------+\n\nURL: https://mariadb.com/kb/en/show-variables/','','https://mariadb.com/kb/en/show-variables/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (400,26,'SHOW WARNINGS','Syntax\n------\n\nSHOW WARNINGS [LIMIT [offset,] row_count]\nSHOW ERRORS [LIMIT row_count OFFSET offset]\nSHOW COUNT(*) WARNINGS\n\nDescription\n-----------\n\nSHOW WARNINGS shows the error, warning, and note messages that resulted from\nthe last statement that generated messages in the current session. It shows\nnothing if the last statement used a table and generated no messages. (That\nis, a statement that uses a table but generates no messages clears the message\nlist.) Statements that do not use tables and do not generate messages have no\neffect on the message list.\n\nA note is different to a warning in that it only appears if the sql_notes\nvariable is set to 1 (the default), and is not converted to an error if strict\nmode is enabled.\n\nA related statement, SHOW ERRORS, shows only the errors.\n\nThe SHOW COUNT(*) WARNINGS statement displays the total number of errors,\nwarnings, and notes. You can also retrieve this number from the warning_count\nvariable:\n\nSHOW COUNT(*) WARNINGS;\nSELECT @@warning_count;\n\nThe value of warning_count might be greater than the number of messages\ndisplayed by SHOW WARNINGS if the max_error_count system variable is set so\nlow that not all messages are stored.\n\nThe LIMIT clause has the same syntax as for the SELECT statement.\n\nSHOW WARNINGS can be used after EXPLAIN EXTENDED to see how a query is\ninternally rewritten by MariaDB.\n\nIf the sql_notes server variable is set to 1, Notes are included in the output\nof SHOW WARNINGS; if it is set to 0, this statement will not show (or count)\nNotes.\n\nThe results of SHOW WARNINGS and SHOW COUNT(*) WARNINGS are directly sent to\nthe client. If you need to access those information in a stored program, you\ncan use the GET DIAGNOSTICS statement instead.\n\nFor a list of MariaDB error codes, see MariaDB Error Codes.\n\nThe mysql client also has a number of options related to warnings. The \\W\ncommand will show warnings after every statement, while \\w will disable this.\nStarting the client with the --show-warnings option will show warnings after\nevery statement.\n\nMariaDB 10.3.1 implements a stored routine error stack trace. SHOW WARNINGS\ncan also be used to show more information. See the example below.\n\nExamples\n--------\n\nSELECT 1/0;\n+------+\n| 1/0 |\n+------+\n| NULL |\n+------+\n\nSHOW COUNT(*) WARNINGS;\n+-------------------------+\n| @@session.warning_count |\n+-------------------------+\n| 1 |\n+-------------------------+\n\nSHOW WARNINGS;\n+---------+------+---------------+\n| Level | Code | Message |\n+---------+------+---------------+\n| Warning | 1365 | Division by 0 |\n+---------+------+---------------+\n\nStack Trace\n-----------\n\nFrom MariaDB 10.3.1, displaying a stack trace:\n\nDELIMITER $$\nCREATE OR REPLACE PROCEDURE p1()\n BEGIN\n DECLARE c CURSOR FOR SELECT * FROM not_existing;\n OPEN c;\n CLOSE c;\n END;\n$$\nCREATE OR REPLACE PROCEDURE p2()\n BEGIN\n CALL p1;\n END;\n$$\nDELIMITER ;\nCALL p2;\nERROR 1146 (42S02): Table \'test.not_existing\' doesn\'t exist\n\nSHOW WARNINGS;\n+-------+------+-----------------------------------------+\n| Level | Code | Message |\n+-------+------+-----------------------------------------+\n| Error | 1146 | Table \'test.not_existing\' doesn\'t exist |\n| Note | 4091 | At line 6 in test.p1 |\n| Note | 4091 | At line 4 in test.p2 |\n+-------+------+-----------------------------------------+\n\nSHOW WARNINGS displays a stack trace, showing where the error actually\nhappened:\n\n* Line 4 in test.p1 is the OPEN command which actually raised the error\n* Line 3 in test.p2 is the CALL statement, calling p1 from p2.\n\nURL: https://mariadb.com/kb/en/show-warnings/','','https://mariadb.com/kb/en/show-warnings/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (401,26,'SHOW WSREP_MEMBERSHIP','SHOW WSREP_MEMBERSHIP is part of the WSREP_INFO plugin.\n\nSyntax\n------\n\nSHOW WSREP_MEMBERSHIP\n\nDescription\n-----------\n\nThe SHOW WSREP_MEMBERSHIP statement returns Galera node cluster membership\ninformation. It returns the same information as found in the\ninformation_schema.WSREP_MEMBERSHIP table. Only users with the SUPER privilege\ncan access this information.\n\nExamples\n--------\n\nSHOW WSREP_MEMBERSHIP;\n+-------+--------------------------------------+----------+-----------------+\n| Index | Uuid | Name | Address |\n+-------+--------------------------------------+----------+-----------------+\n| 0 | 19058073-8940-11e4-8570-16af7bf8fced | my_node1 | 10.0.2.15:16001 |\n| 1 | 19f2b0e0-8942-11e4-9cb8-b39e8ee0b5dd | my_node3 | 10.0.2.15:16003 |\n| 2 | d85e62db-8941-11e4-b1ef-4bc9980e476d | my_node2 | 10.0.2.15:16002 |\n+-------+--------------------------------------+----------+-----------------+\n\nURL: https://mariadb.com/kb/en/show-wsrep_membership/','','https://mariadb.com/kb/en/show-wsrep_membership/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (402,26,'SHOW WSREP_STATUS','SHOW WSREP_STATUS is part of the WSREP_INFO plugin.\n\nSyntax\n------\n\nSHOW WSREP_STATUS\n\nDescription\n-----------\n\nThe SHOW WSREP_STATUS statement returns Galera node and cluster status\ninformation. It returns the same information as found in the\ninformation_schema.WSREP_STATUS table. Only users with the SUPER privilege can\naccess this information.\n\nExamples\n--------\n\nSHOW WSREP_STATUS;\n+------------+-------------+----------------+--------------+\n| Node_Index | Node_Status | Cluster_Status | Cluster_Size |\n+------------+-------------+----------------+--------------+\n| 0 | Synced | Primary | 3 |\n+------------+-------------+----------------+--------------+\n\nURL: https://mariadb.com/kb/en/show-wsrep_status/','','https://mariadb.com/kb/en/show-wsrep_status/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (403,26,'BINLOG','Syntax\n------\n\nBINLOG \'str\'\n\nDescription\n-----------\n\nBINLOG is an internal-use statement. It is generated by the\nmariadb-binlog/mysqlbinlog program as the printable representation of certain\nevents in binary log files. The \'str\' value is a base 64-encoded string the\nthat server decodes to determine the data change indicated by the\ncorresponding event. This statement requires the SUPER privilege (<= MariaDB\n10.5.1) or theBINLOG REPLAY privilege (>= MariaDB 10.5.2).\n\nURL: https://mariadb.com/kb/en/binlog/','','https://mariadb.com/kb/en/binlog/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (404,26,'PURGE BINARY LOGS','Syntax\n------\n\nPURGE { BINARY | MASTER } LOGS\n { TO \'log_name\' | BEFORE datetime_expr }\n\nDescription\n-----------\n\nThe PURGE BINARY LOGS statement deletes all the binary log files listed in the\nlog index file prior to the specified log file name or date. BINARY and MASTER\nare synonyms. Deleted log files also are removed from the list recorded in the\nindex file, so that the given log file becomes the first in the list.\n\nThe datetime expression is in the format \'YYYY-MM-DD hh:mm:ss\'.\n\nIf a replica is active but has yet to read from a binary log file you attempt\nto delete, the statement will fail with an error. However, if the replica is\nnot connected and has yet to read from a log file you delete, the file will be\ndeleted, but the replica will be unable to continue replicating once it\nconnects again.\n\nThis statement has no effect if the server was not started with the --log-bin\noption to enable binary logging.\n\nTo list the binary log files on the server, use SHOW BINARY LOGS. To see which\nfiles they are reading, use SHOW SLAVE STATUS (or SHOW REPLICA STATUS from\nMariaDB 10.5.1). You can only delete the files that are older than the oldest\nfile that is used by the slaves.\n\nTo delete all binary log files, use RESET MASTER. To move to a new log file\n(for example if you want to remove the current log file), use FLUSH LOGS\nbefore you execute PURGE LOGS.\n\nIf the expire_logs_days server system variable is not set to 0, the server\nautomatically deletes binary log files after the given number of days. From\nMariaDB 10.6, the binlog_expire_logs_seconds variable allows more precise\ncontrol over binlog deletion, and takes precedence if both are non-zero.\n\nRequires the SUPER privilege or, from MariaDB 10.5.2, the BINLOG ADMIN\nprivilege, to run.\n\nExamples\n--------\n\nPURGE BINARY LOGS TO \'mariadb-bin.000063\';\n\nPURGE BINARY LOGS BEFORE \'2013-04-21\';\n\nPURGE BINARY LOGS BEFORE \'2013-04-22 09:55:22\';\n\nURL: https://mariadb.com/kb/en/purge-binary-logs/','','https://mariadb.com/kb/en/purge-binary-logs/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (405,26,'CACHE INDEX','Syntax\n------\n\nCACHE INDEX \n tbl_index_list [, tbl_index_list] ...\n IN key_cache_name\n\ntbl_index_list:\n tbl_name [[INDEX|KEY] (index_name[, index_name] ...)]\n\nDescription\n-----------\n\nThe CACHE INDEX statement assigns table indexes to a specific key cache. It is\nused only for MyISAM tables.\n\nA default key cache exists and cannot be destroyed. To create more key caches,\nthe key_buffer_size server system variable.\n\nThe associations between tables indexes and key caches are lost on server\nrestart. To recreate them automatically, it is necessary to configure caches\nin a configuration file and include some CACHE INDEX (and optionally LOAD\nINDEX) statements in the init file.\n\nExamples\n--------\n\nThe following statement assigns indexes from the tables t1, t2, and t3 to the\nkey cache named hot_cache:\n\nCACHE INDEX t1, t2, t3 IN hot_cache;\n+---------+--------------------+----------+----------+\n| Table | Op | Msg_type | Msg_text |\n+---------+--------------------+----------+----------+\n| test.t1 | assign_to_keycache | status | OK |\n| test.t2 | assign_to_keycache | status | OK |\n| test.t3 | assign_to_keycache | status | OK |\n+---------+--------------------+----------+----------+\n\nImplementation (for MyISAM)\n---------------------------\n\nNormally CACHE INDEX should not take a long time to execute. Internally it\'s\nimplemented the following way:\n\n* Find the right key cache (under LOCK_global_system_variables)\n* Open the table with a TL_READ_NO_INSERT lock.\n* Flush the original key cache for the given file (under key cache lock)\n* Flush the new key cache for the given file (safety)\n* Move the file to the new key cache (under file share lock)\n\nThe only possible long operations are getting the locks for the table and\nflushing the original key cache, if there were many key blocks for the file in\nit.\n\nWe plan to also add CACHE INDEX for Aria tables if there is a need for this.\n\nURL: https://mariadb.com/kb/en/cache-index/','','https://mariadb.com/kb/en/cache-index/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (406,26,'HELP Command','Syntax\n------\n\nHELP search_string\n\nDescription\n-----------\n\nThe HELP command can be used in any MariaDB client, such as the mysql\ncommand-line client, to get basic syntax help and a short description for most\ncommands and functions.\n\nIf you provide an argument to the HELP command, the mysql client uses it as a\nsearch string to access server-side help. The proper operation of this command\nrequires that the help tables in the mysql database be initialized with help\ntopic information.\n\nIf there is no match for the search string, the search fails. Use HELP\ncontents to see a list of the help categories:\n\nHELP contents\nYou asked for help about help category: \"Contents\"\nFor more information, type \'help <item>\', where <item> is one of the following\ncategories:\n Account Management\n Administration\n Compound Statements\n Data Definition\n Data Manipulation\n Data Types\n Functions\n Functions and Modifiers for Use with GROUP BY\n Geographic Features\n Help Metadata\n Language Structure\n Plugins\n Procedures\n Sequences\n Table Maintenance\n Transactions\n User-Defined Functions\n Utility\n\nIf a search string matches multiple items, MariaDB shows a list of matching\ntopics:\n\nHELP drop\nMany help items for your request exist.\nTo make a more specific request, please type \'help <item>\',\nwhere <item> is one of the following\ntopics:\n ALTER TABLE\n DROP DATABASE\n DROP EVENT\n DROP FUNCTION\n DROP FUNCTION UDF\n DROP INDEX\n DROP PACKAGE\n DROP PACKAGE BODY\n DROP PROCEDURE\n DROP ROLE\n DROP SEQUENCE\n DROP SERVER\n DROP TABLE\n DROP TRIGGER\n DROP USER\n DROP VIEW\n\nThen you can enter a topic as the search string to see the help entry for that\ntopic.\n\nThe help is provided with the MariaDB server and makes use of four help tables\nfound in the mysql database: help_relation, help_topic, help_category and\nhelp_keyword. These tables are populated by the mysql_install_db or\nfill_help_table.sql scripts which, until MariaDB 10.4.7, contain data\ngenerated from an old version of MySQL.\n\nURL: https://mariadb.com/kb/en/help-command/','','https://mariadb.com/kb/en/help-command/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (407,26,'KILL [CONNECTION | QUERY]','Syntax\n------\n\nKILL [HARD | SOFT] { {CONNECTION|QUERY} thread_id | QUERY ID query_id | USER\nuser_name }\n\nDescription\n-----------\n\nEach connection to mysqld runs in a separate thread. You can see which threads\nare running with the SHOW PROCESSLIST statement and kill a thread with the\nKILL thread_id statement. KILL allows the optional CONNECTION or QUERY\nmodifier:\n\n* KILL CONNECTION is the same as KILL with no\n modifier: It terminates the connection associated with the given thread or\nquery id.\n* KILL QUERY terminates the statement that the connection thread_id is\n currently executing, but leaves the connection itself intact.\n* KILL QUERY ID terminates the query by query_id, leaving the connection\nintact.\n\nIf a connection is terminated that has an active transaction, the transaction\nwill be rolled back. If only a query is killed, the current transaction will\nstay active. See also idle_transaction_timeout.\n\nIf you have the PROCESS privilege, you can see all threads. If you have the\nSUPER privilege, or, from MariaDB 10.5.2, the CONNECTION ADMIN privilege, you\ncan kill all threads and statements. Otherwise, you can see and kill only your\nown threads and statements.\n\nKilling queries that repair or create indexes on MyISAM and Aria tables may\nresult in corrupted tables. Use the SOFT option to avoid this!\n\nThe HARD option (default) kills a command as soon as possible. If you use\nSOFT, then critical operations that may leave a table in an inconsistent state\nwill not be interrupted. Such operations include REPAIR and INDEX creation for\nMyISAM and Aria tables (REPAIR TABLE, OPTIMIZE TABLE).\n\nKILL ... USER username will kill all connections/queries for a given user.\nUSER can be specified one of the following ways:\n\n* username (Kill without regard to hostname)\n* username@hostname\n* CURRENT_USER or CURRENT_USER()\n\nIf you specify a thread id and that thread does not exist, you get the\nfollowing error:\n\nERROR 1094 (HY000): Unknown thread id: <thread_id>\n\nIf you specify a query id that doesn\'t exist, you get the following error:\n\nERROR 1957 (HY000): Unknown query id: <query_id>\n\nHowever, if you specify a user name, no error is issued for non-connected (or\neven non-existing) users. To check if the connection/query has been killed,\nyou can use the ROW_COUNT() function.\n\nA client whose connection is killed receives the following error:\n\nERROR 1317 (70100): Query execution was interrupted\n\nTo obtain a list of existing sessions, use the SHOW PROCESSLIST statement or\nquery the Information Schema PROCESSLIST table.\n\nNote: You cannot use KILL with the Embedded MySQL Server library because the\nembedded server merely runs inside the threads of the host application. It\ndoes not create any connection threads of its own.\n\nNote: You can also use mysqladmin kill thread_id [,thread_id...] to kill\nconnections. To get a list of running queries, use mysqladmin processlist. See\nmysqladmin.\n\nPercona Toolkit contains a program, pt-kill that can be used to automatically\nkill connections that match certain criteria. For example, it can be used to\nterminate idle connections, or connections that have been busy for more than\n60 seconds.\n\nURL: https://mariadb.com/kb/en/kill/','','https://mariadb.com/kb/en/kill/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (408,26,'LOAD INDEX','Syntax\n------\n\nLOAD INDEX INTO CACHE\n tbl_index_list [, tbl_index_list] ...\n\ntbl_index_list:\n tbl_name\n [[INDEX|KEY] (index_name[, index_name] ...)]\n [IGNORE LEAVES]\n\nDescription\n-----------\n\nThe LOAD INDEX INTO CACHE statement preloads a table index into the key cache\nto which it has been assigned by an explicit CACHE INDEX statement, or into\nthe default key cache otherwise. LOAD INDEX INTO CACHE is used only for MyISAM\nor Aria tables.\n\nThe IGNORE LEAVES modifier causes only blocks for the nonleaf nodes of the\nindex to be preloaded.\n\nURL: https://mariadb.com/kb/en/load-index/','','https://mariadb.com/kb/en/load-index/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (409,26,'RESET','Syntax\n------\n\nRESET reset_option [, reset_option] ...\n\nDescription\n-----------\n\nThe RESET statement is used to clear the state of various server operations.\nYou must have the RELOAD privilege to execute RESET.\n\nRESET acts as a stronger version of the FLUSH statement.\n\nThe different RESET options are:\n\n+---------------------------+------------------------------------------------+\n| Option | Description |\n+---------------------------+------------------------------------------------+\n| SLAVE | Deletes all relay logs from the slave and |\n| [\"connection_name\"] [ALL] | reset the replication position in the master |\n| | binary log. |\n+---------------------------+------------------------------------------------+\n| MASTER | Deletes all old binary logs, makes the binary |\n| | index file (--log-bin-index) empty and |\n| | creates a new binary log file. This is |\n| | useful when you want to reset the master to |\n| | an initial state. If you want to just delete |\n| | old, not used binary logs, you should use the |\n| | PURGE BINARY LOGS command. |\n+---------------------------+------------------------------------------------+\n| QUERY CACHE | Removes all queries from the query cache. See |\n| | also FLUSH QUERY CACHE. |\n+---------------------------+------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/reset/','','https://mariadb.com/kb/en/reset/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (410,26,'SHUTDOWN','Syntax\n------\n\nSHUTDOWN [WAIT FOR ALL { SLAVES | REPLICAS } ]\n\nDescription\n-----------\n\nThe SHUTDOWN command shuts the server down.\n\nWAIT FOR ALL SLAVES\n-------------------\n\nMariaDB starting with 10.4.4\n----------------------------\nThe WAIT FOR ALL SLAVES option was first added in MariaDB 10.4.4. WAIT FOR ALL\nREPLICAS has been a synonym since MariaDB 10.5.1.\n\nWhen a master server is shutdown and it goes through the normal shutdown\nprocess, the master kills client threads in random order. By default, the\nmaster also considers its binary log dump threads to be regular client\nthreads. As a consequence, the binary log dump threads can be killed while\nclient threads still exist, and this means that data can be written on the\nmaster during a normal shutdown that won\'t be replicated. This is true even if\nsemi-synchronous replication is being used.\n\nIn MariaDB 10.4 and later, this problem can be solved by shutting down the\nserver with the SHUTDOWN command and by providing the WAIT FOR ALL SLAVES\noption to the command. For example:\n\nSHUTDOWN WAIT FOR ALL SLAVES;\n\nWhen the WAIT FOR ALL SLAVES option is provided, the server only kills its\nbinary log dump threads after all client threads have been killed, and it only\ncompletes the shutdown after the last binary log has been sent to all\nconnected replicas.\n\nSee Replication Threads: Binary Log Dump Threads and the Shutdown Process for\nmore information.\n\nRequired Permissions\n--------------------\n\nOne must have a SHUTDOWN privilege (see GRANT) to use this command. It is the\nsame privilege one needs to use the mariadb-admin/mysqladmin shutdown command.\n\nShutdown for Upgrades\n---------------------\n\nIf you are doing a shutdown to migrate to another major version of MariaDB,\nplease ensure that the innodb_fast_shutdown variable is not 2 (fast crash\nshutdown). The default of this variable is 1.\n\nExample\n-------\n\nThe following example shows how to create an event which turns off the server\nat a certain time:\n\nCREATE EVENT `test`.`shutd`\n ON SCHEDULE\n EVERY 1 DAY\n STARTS \'2014-01-01 20:00:00\'\n COMMENT \'Shutdown Maria when the office is closed\'\nDO BEGIN\n SHUTDOWN;\nEND;\n\nOther Ways to Stop mysqld\n-------------------------\n\nYou can use the mariadb-admin/mysqladmin shutdown command to take down mysqld\ncleanly.\n\nYou can also use the system kill command on Unix with signal SIGTERM (15)\n\nkill -SIGTERM pid-of-mysqld-process\n\nYou can find the process number of the server process in the file that ends\nwith .pid in your data directory.\n\nThe above is identical to mysqladmin shutdown.\n\nOn windows you should use:\n\nNET STOP MySQL\n\nURL: https://mariadb.com/kb/en/shutdown/','','https://mariadb.com/kb/en/shutdown/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (411,26,'USE','Syntax\n------\n\nUSE db_name\n\nDescription\n-----------\n\nThe \'USE db_name\' statement tells MariaDB to use the db_name database as the\ndefault (current) database for subsequent statements. The database remains the\ndefault until the end of the session or another USE statement is issued:\n\nUSE db1;\nSELECT COUNT(*) FROM mytable; # selects from db1.mytable\nUSE db2;\nSELECT COUNT(*) FROM mytable; # selects from db2.mytable\n\nThe DATABASE() function (SCHEMA() is a synonym) returns the default database.\n\nAnother way to set the default database is specifying its name at mysql\ncommand line client startup.\n\nURL: https://mariadb.com/kb/en/use/','','https://mariadb.com/kb/en/use/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (412,26,'SHOW FUNCTION CODE','Syntax\n------\n\nSHOW FUNCTION CODE func_name\n\nDescription\n-----------\n\nSHOW FUNCTION CODE shows a representation of the internal implementation of\nthe stored function.\n\nIt is similar to SHOW PROCEDURE CODE but for stored functions.\n\nURL: https://mariadb.com/kb/en/show-function-code/','','https://mariadb.com/kb/en/show-function-code/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (413,26,'SHOW COLLATION','Syntax\n------\n\nSHOW COLLATION\n [LIKE \'pattern\' | WHERE expr]\n\nDescription\n-----------\n\nThe output from SHOW COLLATION includes all available collations. The LIKE\nclause, if present on its own, indicates which collation names to match. The\nWHERE and LIKE clauses can be given to select rows using more general\nconditions, as discussed in Extended SHOW.\n\nThe same information can be queried from the Information Schema COLLATIONS\ntable.\n\nSee Setting Character Sets and Collations for details on specifying the\ncollation at the server, database, table and column levels.\n\nExamples\n--------\n\nSHOW COLLATION LIKE \'latin1%\';\n+-------------------+---------+----+---------+----------+---------+\n| Collation | Charset | Id | Default | Compiled | Sortlen |\n+-------------------+---------+----+---------+----------+---------+\n| latin1_german1_ci | latin1 | 5 | | Yes | 1 |\n| latin1_swedish_ci | latin1 | 8 | Yes | Yes | 1 |\n| latin1_danish_ci | latin1 | 15 | | Yes | 1 |\n| latin1_german2_ci | latin1 | 31 | | Yes | 2 |\n| latin1_bin | latin1 | 47 | | Yes | 1 |\n| latin1_general_ci | latin1 | 48 | | Yes | 1 |\n| latin1_general_cs | latin1 | 49 | | Yes | 1 |\n| latin1_spanish_ci | latin1 | 94 | | Yes | 1 |\n+-------------------+---------+----+---------+----------+---------+\n\nSHOW COLLATION WHERE Sortlen LIKE \'8\' AND Charset LIKE \'utf8\';\n+--------------------+---------+-----+---------+----------+---------+\n| Collation | Charset | Id | Default | Compiled | Sortlen |\n+--------------------+---------+-----+---------+----------+---------+\n| utf8_unicode_ci | utf8 | 192 | | Yes | 8 |\n| utf8_icelandic_ci | utf8 | 193 | | Yes | 8 |\n| utf8_latvian_ci | utf8 | 194 | | Yes | 8 |\n| utf8_romanian_ci | utf8 | 195 | | Yes | 8 |\n| utf8_slovenian_ci | utf8 | 196 | | Yes | 8 |\n| utf8_polish_ci | utf8 | 197 | | Yes | 8 |\n| utf8_estonian_ci | utf8 | 198 | | Yes | 8 |\n| utf8_spanish_ci | utf8 | 199 | | Yes | 8 |\n| utf8_swedish_ci | utf8 | 200 | | Yes | 8 |\n| utf8_turkish_ci | utf8 | 201 | | Yes | 8 |\n| utf8_czech_ci | utf8 | 202 | | Yes | 8 |\n| utf8_danish_ci | utf8 | 203 | | Yes | 8 |\n| utf8_lithuanian_ci | utf8 | 204 | | Yes | 8 |\n| utf8_slovak_ci | utf8 | 205 | | Yes | 8 |\n| utf8_spanish2_ci | utf8 | 206 | | Yes | 8 |\n| utf8_roman_ci | utf8 | 207 | | Yes | 8 |\n| utf8_persian_ci | utf8 | 208 | | Yes | 8 |\n| utf8_esperanto_ci | utf8 | 209 | | Yes | 8 |\n| utf8_hungarian_ci | utf8 | 210 | | Yes | 8 |\n| utf8_sinhala_ci | utf8 | 211 | | Yes | 8 |\n| utf8_croatian_ci | utf8 | 213 | | Yes | 8 |\n+--------------------+---------+-----+---------+----------+---------+\n\nURL: https://mariadb.com/kb/en/show-collation/','','https://mariadb.com/kb/en/show-collation/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (414,27,'DELETE','Syntax\n------\n\nSingle-table syntax:\n\nDELETE [LOW_PRIORITY] [QUICK] [IGNORE] \n FROM tbl_name [PARTITION (partition_list)]\n [FOR PORTION OF period FROM expr1 TO expr2]\n [WHERE where_condition]\n [ORDER BY ...]\n [LIMIT row_count]\n [RETURNING select_expr\n [, select_expr ...]]\n\nMultiple-table syntax:\n\nDELETE [LOW_PRIORITY] [QUICK] [IGNORE]\n tbl_name[.*] [, tbl_name[.*]] ...\n FROM table_references\n [WHERE where_condition]\n\nOr:\n\nDELETE [LOW_PRIORITY] [QUICK] [IGNORE]\n FROM tbl_name[.*] [, tbl_name[.*]] ...\n USING table_references\n [WHERE where_condition]\n\nTrimming history:\n\nDELETE HISTORY\n FROM tbl_name [PARTITION (partition_list)]\n [BEFORE SYSTEM_TIME [TIMESTAMP|TRANSACTION] expression]\n\nDescription\n-----------\n\n+---------------------------+------------------------------------------------+\n| Option | Description |\n+---------------------------+------------------------------------------------+\n| LOW_PRIORITY | Wait until all SELECT\'s are done before |\n| | starting the statement. Used with storage |\n| | engines that uses table locking (MyISAM, Aria |\n| | etc). See HIGH_PRIORITY and LOW_PRIORITY |\n| | clauses for details. |\n+---------------------------+------------------------------------------------+\n| QUICK | Signal the storage engine that it should |\n| | expect that a lot of rows are deleted. The |\n| | storage engine engine can do things to speed |\n| | up the DELETE like ignoring merging of data |\n| | blocks until all rows are deleted from the |\n| | block (instead of when a block is half full). |\n| | This speeds up things at the expanse of lost |\n| | space in data blocks. At least MyISAM and |\n| | Aria support this feature. |\n+---------------------------+------------------------------------------------+\n| IGNORE | Don\'t stop the query even if a not-critical |\n| | error occurs (like data overflow). See How |\n| | IGNORE works for a full description. |\n+---------------------------+------------------------------------------------+\n\nFor the single-table syntax, the DELETE statement deletes rows from tbl_name\nand returns a count of the number of deleted rows. This count can be obtained\nby calling the ROW_COUNT() function. The WHERE clause, if given, specifies the\nconditions that identify which rows to delete. With no WHERE clause, all rows\nare deleted. If the ORDER BY clause is specified, the rows are deleted in the\norder that is specified. The LIMIT clause places a limit on the number of rows\nthat can be deleted.\n\nFor the multiple-table syntax, DELETE deletes from each tbl_name the rows that\nsatisfy the conditions. In this case, ORDER BY and LIMIT> cannot be used. A\nDELETE can also reference tables which are located in different databases; see\nIdentifier Qualifiers for the syntax.\n\nwhere_condition is an expression that evaluates to true for each row to be\ndeleted. It is specified as described in SELECT.\n\nCurrently, you cannot delete from a table and select from the same table in a\nsubquery.\n\nYou need the DELETE privilege on a table to delete rows from it. You need only\nthe SELECT privilege for any columns that are only read, such as those named\nin the WHERE clause. See GRANT.\n\nAs stated, a DELETE statement with no WHERE clause deletes all rows. A faster\nway to do this, when you do not need to know the number of deleted rows, is to\nuse TRUNCATE TABLE. However, within a transaction or if you have a lock on the\ntable, TRUNCATE TABLE cannot be used whereas DELETE can. See TRUNCATE TABLE,\nand LOCK.\n\nPARTITION\n---------\n\nSee Partition Pruning and Selection for details.\n\nFOR PORTION OF\n--------------\n\nMariaDB starting with 10.4.3\n----------------------------\nSee Application Time Periods - Deletion by Portion.\n\nRETURNING\n---------\n\nIt is possible to return a resultset of the deleted rows for a single table to\nthe client by using the syntax DELETE ... RETURNING select_expr [,\nselect_expr2 ...]]\n\nAny of SQL expression that can be calculated from a single row fields is\nallowed. Subqueries are allowed. The AS keyword is allowed, so it is possible\nto use aliases.\n\nThe use of aggregate functions is not allowed. RETURNING cannot be used in\nmulti-table DELETEs.\n\nMariaDB starting with 10.3.1\n----------------------------\n\nSame Source and Target Table\n----------------------------\n\nUntil MariaDB 10.3.1, deleting from a table with the same source and target\nwas not possible. From MariaDB 10.3.1, this is now possible. For example:\n\nDELETE FROM t1 WHERE c1 IN (SELECT b.c1 FROM t1 b WHERE b.c2=0);\n\nMariaDB starting with 10.3.4\n----------------------------\n\nDELETE HISTORY\n--------------\n\nOne can use DELETE HISTORY to delete historical information from\nSystem-versioned tables.\n\nExamples\n--------\n\nHow to use the ORDER BY and LIMIT clauses:\n\nDELETE FROM page_hit ORDER BY timestamp LIMIT 1000000;\n\nHow to use the RETURNING clause:\n\nDELETE FROM t RETURNING f1;\n+------+\n| f1 |\n+------+\n| 5 |\n| 50 |\n| 500 |\n+------+\n\nThe following statement joins two tables: one is only used to satisfy a WHERE\ncondition, but no row is deleted from it; rows from the other table are\ndeleted, instead.\n\nDELETE post FROM blog INNER JOIN post WHERE blog.id = post.blog_id;\n\nDeleting from the Same Source and Target\n----------------------------------------\n\nCREATE TABLE t1 (c1 INT, c2 INT);\nDELETE FROM t1 WHERE c1 IN (SELECT b.c1 FROM t1 b WHERE b.c2=0);\n\nUntil MariaDB 10.3.1, this returned:\n\nERROR 1093 (HY000): Table \'t1\' is specified twice, both as a target for\n\'DELETE\' \n and as a separate source for\n\nFrom MariaDB 10.3.1:\n\nQuery OK, 0 rows affected (0.00 sec)\n\nURL: https://mariadb.com/kb/en/delete/','','https://mariadb.com/kb/en/delete/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (415,27,'REPLACE','Syntax\n------\n\nREPLACE [LOW_PRIORITY | DELAYED]\n [INTO] tbl_name [PARTITION (partition_list)] [(col,...)]\n {VALUES | VALUE} ({expr | DEFAULT},...),(...),...\n[RETURNING select_expr \n [, select_expr ...]]\n\nOr:\n\nREPLACE [LOW_PRIORITY | DELAYED]\n [INTO] tbl_name [PARTITION (partition_list)]\n SET col={expr | DEFAULT}, ...\n[RETURNING select_expr \n [, select_expr ...]]\n\nOr:\n\nREPLACE [LOW_PRIORITY | DELAYED]\n [INTO] tbl_name [PARTITION (partition_list)] [(col,...)]\n SELECT ...\n[RETURNING select_expr \n [, select_expr ...]]\n\nDescription\n-----------\n\nREPLACE works exactly like INSERT, except that if an old row in the table has\nthe same value as a new row for a PRIMARY KEY or a UNIQUE index, the old row\nis deleted before the new row is inserted. If the table has more than one\nUNIQUE keys, it is possible that the new row conflicts with more than one row.\nIn this case, all conflicting rows will be deleted.\n\nThe table name can be specified in the form db_name.tbl_name or, if a default\ndatabase is selected, in the form tbl_name (see Identifier Qualifiers). This\nallows to use REPLACE ... SELECT to copy rows between different databases.\n\nMariaDB starting with 10.5.0\n----------------------------\nThe RETURNING clause was introduced in MariaDB 10.5.0\n\nBasically it works like this:\n\nBEGIN;\nSELECT 1 FROM t1 WHERE key=# FOR UPDATE;\nIF found-row\n DELETE FROM t1 WHERE key=# ;\nENDIF\nINSERT INTO t1 VALUES (...);\nEND;\n\nThe above can be replaced with:\n\nREPLACE INTO t1 VALUES (...)\n\nREPLACE is a MariaDB/MySQL extension to the SQL standard. It either inserts,\nor deletes and inserts. For other MariaDB/MySQL extensions to standard SQL ---\nthat also handle duplicate values --- see IGNORE and INSERT ON DUPLICATE KEY\nUPDATE.\n\nNote that unless the table has a PRIMARY KEY or UNIQUE index, using a REPLACE\nstatement makes no sense. It becomes equivalent to INSERT, because there is no\nindex to be used to determine whether a new row duplicates another.\n\nValues for all columns are taken from the values sSee Partition Pruning and\nSelection for details.pecified in the REPLACE statement. Any missing columns\nare set to their default values, just as happens for INSERT. You cannot refer\nto values from the current row and use them in the new row. If you use an\nassignment such as \'SET col = col + 1\', the reference to the column name on\nthe right hand side is treated as DEFAULT(col), so the assignment is\nequivalent to \'SET col = DEFAULT(col) + 1\'.\n\nTo use REPLACE, you must have both the INSERT and DELETE privileges for the\ntable.\n\nThere are some gotchas you should be aware of, before using REPLACE:\n\n* If there is an AUTO_INCREMENT field, a new value will be generated.\n* If there are foreign keys, ON DELETE action will be activated by REPLACE.\n* Triggers on DELETE and INSERT will be activated by REPLACE.\n\nTo avoid some of these behaviors, you can use INSERT ... ON DUPLICATE KEY\nUPDATE.\n\nThis statement activates INSERT and DELETE triggers. See Trigger Overview for\ndetails.\n\nPARTITION\n---------\n\nSee Partition Pruning and Selection for details.\n\nREPLACE RETURNING\n-----------------\n\nREPLACE ... RETURNING returns a resultset of the replaced rows.\n\nThis returns the listed columns for all the rows that are replaced, or\nalternatively, the specified SELECT expression. Any SQL expressions which can\nbe calculated can be used in the select expression for the RETURNING clause,\nincluding virtual columns and aliases, expressions which use various operators\nsuch as bitwise, logical and arithmetic operators, string functions, date-time\nfunctions, numeric functions, control flow functions, secondary functions and\nstored functions. Along with this, statements which have subqueries and\nprepared statements can also be used.\n\nExamples\n--------\n\nSimple REPLACE statement\n\nREPLACE INTO t2 VALUES (1,\'Leopard\'),(2,\'Dog\') RETURNING id2, id2+id2 \nas Total ,id2|id2, id2&&id2;\n+-----+-------+---------+----------+\n| id2 | Total | id2|id2 | id2&&id2 |\n+-----+-------+---------+----------+\n| 1 | 2 | 1 | 1 |\n| 2 | 4 | 2 | 1 |\n+-----+-------+---------+----------+\n\nUsing stored functions in RETURNING\n\nDELIMITER |\nCREATE FUNCTION f(arg INT) RETURNS INT\n BEGIN\n RETURN (SELECT arg+arg);\n END|\n\nDELIMITER ;\nPREPARE stmt FROM \"REPLACE INTO t2 SET id2=3, animal2=\'Fox\' RETURNING f2(id2),\nUPPER(animal2)\";\n\nEXECUTE stmt;\n+---------+----------------+\n| f2(id2) | UPPER(animal2) |\n+---------+----------------+\n| 6 | FOX |\n+---------+----------------+\n\nSubqueries in the statement\n\nREPLACE INTO t1 SELECT * FROM t2 RETURNING (SELECT id2 FROM t2 WHERE \nid2 IN (SELECT id2 FROM t2 WHERE id2=1)) AS new_id;\n+--------+\n| new_id |\n+--------+\n| 1 |\n| 1 |\n| 1 |\n| 1 |\n+--------+\n\nSubqueries in the RETURNING clause that return more than one row or column\ncannot be used..\n\nAggregate functions cannot be used in the RETURNING clause. Since aggregate\nfunctions work on a set of values and if the purpose is to get the row count,\nROW_COUNT() with SELECT can be used, or it can be used in REPLACE...SEL==\nDescription\n\nREPLACE ... RETURNING returns a resultset of the replaced rows.\n\nThis returns the listed columns for all the rows that are replaced, or\nalternatively, the specified SELECT expression. Any SQL expressions which can\nbe calculated can be used in the select expression for the RETURNING clause,\nincluding virtual columns and aliases, expressions which use various operators\nsuch as bitwise, logical and arithmetic operators, string functions, date-time\nfunctions, numeric functions, control flow functions, secondary functions and\nstored functions. Along with this, statements which have subqueries and\nprepared statements can also be used.\n\nExamples\n--------\n\nSimple REPLACE statement\n\nREPLACE INTO t2 VALUES (1,\'Leopard\'),(2,\'Dog\') RETURNING id2, id2+id2 \nas Total ,id2|id2, id2&&id2;\n+-----+-------+---------+----------+\n| id2 | Total | id2|id2 | id2&&id2 |\n+-----+-------+---------+----------+\n| 1 | 2 | 1 | 1 |\n| 2 | 4 | 2 | 1 |\n+-----+-------+---------+----------+\n\nUsing stored functions in RETURNING\n\nDELIMITER |\nCREATE FUNCTION f(arg INT) RETURNS INT\n BEGIN\n RETURN (SELECT arg+arg);\n END|\n\nDELIMITER ;\nPREPARE stmt FROM \"REPLACE INTO t2 SET id2=3, animal2=\'Fox\' RETURNING f2(id2),\nUPPER(animal2)\";\n\nEXECUTE stmt;\n+---------+----------------+\n| f2(id2) | UPPER(animal2) |\n+---------+----------------+\n| 6 | FOX |\n+---------+----------------+\n\nSubqueries in the statement\n\nREPLACE INTO t1 SELECT * FROM t2 RETURNING (SELECT id2 FROM t2 WHERE \nid2 IN (SELECT id2 FROM t2 WHERE id2=1)) AS new_id;\n+--------+\n| new_id |\n+--------+\n| 1 |\n| 1 |\n| 1 |\n| 1 |\n+--------+\n\nSubqueries in the RETURNING clause that return more than one row or column\ncannot be used..\n\nAggregate functions cannot be used in the RETURNING clause. Since aggregate\nfunctions work on a set of values and if the purpose is to get the row count,\nROW_COUNT() with SELECT can be used, or it can be used in\nREPLACE...SELECT...RETURNING if the table in the RETURNING clause is not the\nsame as the REPLACE table. ECT...RETURNING if the table in the RETURNING\nclause is not the same as the REPLACE table.\n\nURL: https://mariadb.com/kb/en/replace/','','https://mariadb.com/kb/en/replace/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (416,27,'UPDATE','Syntax\n------\n\nSingle-table syntax:\n\nUPDATE [LOW_PRIORITY] [IGNORE] table_reference \n [PARTITION (partition_list)]\n [FOR PORTION OF period FROM expr1 TO expr2]\n SET col1={expr1|DEFAULT} [,col2={expr2|DEFAULT}] ...\n [WHERE where_condition]\n [ORDER BY ...]\n [LIMIT row_count]\n\nMultiple-table syntax:\n\nUPDATE [LOW_PRIORITY] [IGNORE] table_references\n SET col1={expr1|DEFAULT} [, col2={expr2|DEFAULT}] ...\n [WHERE where_condition]\n\nDescription\n-----------\n\nFor the single-table syntax, the UPDATE statement updates columns of existing\nrows in the named table with new values. The SET clause indicates which\ncolumns to modify and the values they should be given. Each value can be given\nas an expression, or the keyword DEFAULT to set a column explicitly to its\ndefault value. The WHERE clause, if given, specifies the conditions that\nidentify which rows to update. With no WHERE clause, all rows are updated. If\nthe ORDER BY clause is specified, the rows are updated in the order that is\nspecified. The LIMIT clause places a limit on the number of rows that can be\nupdated.\n\nUntil MariaDB 10.3.2, for the multiple-table syntax, UPDATE updates rows in\neach table named in table_references that satisfy the conditions. In this\ncase, ORDER BY and LIMIT cannot be used. This restriction was lifted in\nMariaDB 10.3.2 and both clauses can be used with multiple-table updates. An\nUPDATE can also reference tables which are located in different databases; see\nIdentifier Qualifiers for the syntax.\n\nwhere_condition is an expression that evaluates to true for each row to be\nupdated.\n\ntable_references and where_condition are as specified as described in SELECT.\n\nFor single-table updates, assignments are evaluated in left-to-right order,\nwhile for multi-table updates, there is no guarantee of a particular order. If\nthe SIMULTANEOUS_ASSIGNMENT sql_mode (available from MariaDB 10.3.5) is set,\nUPDATE statements evaluate all assignments simultaneously.\n\nYou need the UPDATE privilege only for columns referenced in an UPDATE that\nare actually updated. You need only the SELECT privilege for any columns that\nare read but not modified. See GRANT.\n\nThe UPDATE statement supports the following modifiers:\n\n* If you use the LOW_PRIORITY keyword, execution of\n the UPDATE is delayed until no other clients are reading from\n the table. This affects only storage engines that use only table-level\n locking (MyISAM, MEMORY, MERGE). See HIGH_PRIORITY and LOW_PRIORITY clauses\nfor details.\n* If you use the IGNORE keyword, the update statement does \n not abort even if errors occur during the update. Rows for which\n duplicate-key conflicts occur are not updated. Rows for which columns are\n updated to values that would cause data conversion errors are updated to the\n closest valid values instead.\n\nPARTITION\n---------\n\nSee Partition Pruning and Selection for details.\n\nFOR PORTION OF\n--------------\n\nMariaDB starting with 10.4.3\n----------------------------\nSee Application Time Periods - Updating by Portion.\n\nUPDATE Statements With the Same Source and Target\n-------------------------------------------------\n\nMariaDB starting with 10.3.2\n----------------------------\nFrom MariaDB 10.3.2, UPDATE statements may have the same source and target.\n\nFor example, given the following table:\n\nDROP TABLE t1;\nCREATE TABLE t1 (c1 INT, c2 INT);\nINSERT INTO t1 VALUES (10,10), (20,20);\n\nUntil MariaDB 10.3.1, the following UPDATE statement would not work:\n\nUPDATE t1 SET c1=c1+1 WHERE c2=(SELECT MAX(c2) FROM t1);\nERROR 1093 (HY000): Table \'t1\' is specified twice, \n both as a target for \'UPDATE\' and as a separate source for data\n\nFrom MariaDB 10.3.2, the statement executes successfully:\n\nUPDATE t1 SET c1=c1+1 WHERE c2=(SELECT MAX(c2) FROM t1);\n\nSELECT * FROM t1;\n+------+------+\n| c1 | c2 |\n+------+------+\n| 10 | 10 |\n| 21 | 20 |\n+------+------+\n\nExample\n-------\n\nSingle-table syntax:\n\nUPDATE table_name SET column1 = value1, column2 = value2 WHERE id=100;\n\nMultiple-table syntax:\n\nUPDATE tab1, tab2 SET tab1.column1 = value1, tab1.column2 = value2 WHERE\ntab1.id = tab2.id;\n\nURL: https://mariadb.com/kb/en/update/','','https://mariadb.com/kb/en/update/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (417,27,'IGNORE','The IGNORE option tells the server to ignore some common errors.\n\nIGNORE can be used with the following statements:\n\n* DELETE\n* INSERT (see also INSERT IGNORE)\n* LOAD DATA INFILE\n* UPDATE\n* ALTER TABLE\n* CREATE TABLE ... SELECT\n* INSERT ... SELECT\n\nThe logic used:\n\n* Variables out of ranges are replaced with the maximum/minimum value.\n\n* SQL_MODEs STRICT_TRANS_TABLES, STRICT_ALL_TABLES, NO_ZERO_IN_DATE,\nNO_ZERO_DATE are ignored.\n\n* Inserting NULL in a NOT NULL field will insert 0 ( in a numerical\n field), 0000-00-00 ( in a date field) or an empty string ( in a character\n field).\n\n* Rows that cause a duplicate key error or break a foreign key constraint are\n not inserted, updated, or deleted.\n\nThe following errors are ignored:\n\n+---------------------+---------------------------------+--------------------+\n| Error number | Symbolic error name | Description |\n+---------------------+---------------------------------+--------------------+\n| 1022 | ER_DUP_KEY | Can\'t write; |\n| | | duplicate key in |\n| | | table \'%s\' |\n+---------------------+---------------------------------+--------------------+\n| 1048 | ER_BAD_NULL_ERROR | Column \'%s\' |\n| | | cannot be null |\n+---------------------+---------------------------------+--------------------+\n| 1062 | ER_DUP_ENTRY | Duplicate entry |\n| | | \'%s\' for key %d |\n+---------------------+---------------------------------+--------------------+\n| 1242 | ER_SUBQUERY_NO_1_ROW | Subquery returns |\n| | | more than 1 row |\n+---------------------+---------------------------------+--------------------+\n| 1264 | ER_WARN_DATA_OUT_OF_RANGE | Out of range |\n| | | value for column |\n| | | \'%s\' at row %ld |\n+---------------------+---------------------------------+--------------------+\n| 1265 | WARN_DATA_TRUNCATED | Data truncated |\n| | | for column \'%s\' |\n| | | at row %ld |\n+---------------------+---------------------------------+--------------------+\n| 1292 | ER_TRUNCATED_WRONG_VALUE | Truncated |\n| | | incorrect %s |\n| | | value: \'%s\' |\n+---------------------+---------------------------------+--------------------+\n| 1366 | ER_TRUNCATED_WRONG_VALUE_FOR_FI | Incorrect integer |\n| | LD | value |\n+---------------------+---------------------------------+--------------------+\n| 1369 | ER_VIEW_CHECK_FAILED | CHECK OPTION |\n| | | failed \'%s.%s\' |\n+---------------------+---------------------------------+--------------------+\n| 1451 | ER_ROW_IS_REFERENCED_2 | Cannot delete or |\n| | | update a parent |\n| | | row |\n+---------------------+---------------------------------+--------------------+\n| 1452 | ER_NO_REFERENCED_ROW_2 | Cannot add or |\n| | | update a child |\n| | | row: a foreign |\n| | | key constraint |\n| | | fails (%s) |\n+---------------------+---------------------------------+--------------------+\n| 1526 | ER_NO_PARTITION_FOR_GIVEN_VALUE | Table has no |\n| | | partition for |\n| | | value %s |\n+---------------------+---------------------------------+--------------------+\n| 1586 | ER_DUP_ENTRY_WITH_KEY_NAME | Duplicate entry |\n| | | \'%s\' for key \'%s\' |\n+---------------------+---------------------------------+--------------------+\n| 1591 | ER_NO_PARTITION_FOR_GIVEN_VALUE | Table has no |\n| | SILENT | partition for |\n| | | some existing |\n| | | values |\n+---------------------+---------------------------------+--------------------+\n| 1748 | ER_ROW_DOES_NOT_MATCH_GIVEN_PAR | Found a row not |\n| | ITION_SET | matching the |\n| | | given partition |\n| | | set |\n+---------------------+---------------------------------+--------------------+\n\nIgnored errors normally generate a warning.\n\nA property of the IGNORE clause consists in causing transactional engines and\nnon-transactional engines (like XtraDB and Aria) to behave the same way. For\nexample, normally a multi-row insert which tries to violate a UNIQUE contraint\nis completely rolled back on XtraDB/InnoDB, but might be partially executed on\nAria. With the IGNORE clause, the statement will be partially executed in both\nengines.\n\nDuplicate key errors also generate warnings. The OLD_MODE server variable can\nbe used to prevent this.\n\nURL: https://mariadb.com/kb/en/ignore/','','https://mariadb.com/kb/en/ignore/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (418,27,'SELECT','Syntax\n------\n\nSELECT\n [ALL | DISTINCT | DISTINCTROW]\n [HIGH_PRIORITY]\n [STRAIGHT_JOIN]\n [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]\n [SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS]\n select_expr [, select_expr ...]\n [ FROM table_references\n [WHERE where_condition]\n [GROUP BY {col_name | expr | position} [ASC | DESC], ... [WITH ROLLUP]]\n [HAVING where_condition]\n [ORDER BY {col_name | expr | position} [ASC | DESC], ...]\n [LIMIT {[offset,] row_count | row_count OFFSET offset [ROWS EXAMINED\nrows_limit] } |\n [OFFSET start { ROW | ROWS }]\n [FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } { ONLY | WITH TIES }]\n]\n procedure|[PROCEDURE procedure_name(argument_list)]\n [INTO OUTFILE \'file_name\' [CHARACTER SET charset_name] [export_options] |\n INTO DUMPFILE \'file_name\' | INTO var_name [, var_name] ]\n [FOR UPDATE lock_option | LOCK IN SHARE MODE lock_option]\nexport_options:\n [{FIELDS | COLUMNS}\n [TERMINATED BY \'string\']\n [[OPTIONALLY] ENCLOSED BY \'char\']\n [ESCAPED BY \'char\']\n ]\n [LINES\n [STARTING BY \'string\']\n [TERMINATED BY \'string\']\n ]\nlock_option:\n [WAIT n | NOWAIT | SKIP LOCKED]\n\nDescription\n-----------\n\nSELECT is used to retrieve rows selected from one or more tables, and can\ninclude UNION statements and subqueries.\n\n* Each select_expr expression indicates a column or data that you want to\nretrieve. You\nmust have at least one select expression. See Select Expressions below.\n\n* The FROM clause indicates the table or tables from which to retrieve rows.\nUse either a single table name or a JOIN expression. See JOIN\nfor details. If no table is involved, FROM DUAL can be specified.\n\n* Each table can also be specified as db_name.tabl_name. Each column can also\nbe specified as tbl_name.col_name or even db_name.tbl_name.col_name. This\nallows one to write queries which involve multiple databases. See Identifier\nQualifiers for syntax details.\n\n* The WHERE clause, if given, indicates the condition or\n conditions that rows must satisfy to be selected.\n where_condition is an expression that evaluates to true for\n each row to be selected. The statement selects all rows if there is no WHERE\n clause.\nIn the WHERE clause, you can use any of the functions and\n operators that MariaDB supports, except for aggregate (summary) functions.\nSee Functions and Operators and Functions and Modifiers for use with GROUP BY\n(aggregate).\n\n* Use the ORDER BY clause to order the results.\n\n* Use the LIMIT clause allows you to restrict the results to only\na certain number of rows, optionally with an offset.\n\n* Use the GROUP BY and HAVING clauses to group\nrows together when they have columns or computed values in common.\n\nSELECT can also be used to retrieve rows computed without reference to any\ntable.\n\nSelect Expressions\n------------------\n\nA SELECT statement must contain one or more select expressions, separated by\ncommas. Each select expression can be one of the following:\n\n* The name of a column.\n* Any expression using functions and operators.\n* * to select all columns from all tables in the FROM clause.\n* tbl_name.* to select all columns from just the table tbl_name.\n\nWhen specifying a column, you can either use just the column name or qualify\nthe column name with the name of the table using tbl_name.col_name. The\nqualified form is useful if you are joining multiple tables in the FROM\nclause. If you do not qualify the column names when selecting from multiple\ntables, MariaDB will try to find the column in each table. It is an error if\nthat column name exists in multiple tables.\n\nYou can quote column names using backticks. If you are qualifying column names\nwith table names, quote each part separately as `tbl_name`.`col_name`.\n\nIf you use any grouping functions in any of the select expressions, all rows\nin your results will be implicitly grouped, as if you had used GROUP BY NULL.\n\nDISTINCT\n--------\n\nA query may produce some identical rows. By default, all rows are retrieved,\neven when their values are the same. To explicitly specify that you want to\nretrieve identical rows, use the ALL option. If you want duplicates to be\nremoved from the resultset, use the DISTINCT option. DISTINCTROW is a synonym\nfor DISTINCT. See also COUNT DISTINCT and SELECT UNIQUE in Oracle mode.\n\nINTO\n----\n\nThe INTO clause is used to specify that the query results should be written to\na file or variable.\n\n* SELECT INTO OUTFILE - formatting and writing the result to an external file.\n* SELECT INTO DUMPFILE - binary-safe writing of the unformatted results to an\nexternal file.\n* SELECT INTO Variable - selecting and setting variables.\n\nThe reverse of SELECT INTO OUTFILE is LOAD DATA.\n\nLIMIT\n-----\n\nRestricts the number of returned rows. See LIMIT and LIMIT ROWS EXAMINED for\ndetails.\n\nLOCK IN SHARE MODE/FOR UPDATE\n-----------------------------\n\nSee LOCK IN SHARE MODE and FOR UPDATE for details on the respective locking\nclauses.\n\nOFFSET ... FETCH\n----------------\n\nMariaDB starting with 10.6\n--------------------------\nSee SELECT ... OFFSET ... FETCH.\n\nORDER BY\n--------\n\nOrder a resultset. See ORDER BY for details.\n\nPARTITION\n---------\n\nSpecifies to the optimizer which partitions are relevant for the query. Other\npartitions will not be read. See Partition Pruning and Selection for details.\n\nPROCEDURE\n---------\n\nPasses the whole result set to a C Procedure. See PROCEDURE and PROCEDURE\nANALYSE (the only built-in procedure not requiring the server to be\nrecompiled).\n\nSKIP LOCKED\n-----------\n\nMariaDB starting with 10.6\n--------------------------\nThe SKIP LOCKED clause was introduced in MariaDB 10.6.0.\n\nThis causes those rows that couldn\'t be locked (LOCK IN SHARE MODE or FOR\nUPDATE) to be excluded from the result set. An explicit NOWAIT is implied\nhere. This is only implemented on InnoDB tables and ignored otherwise.\n\nSQL_CALC_FOUND_ROWS\n-------------------\n\nWhen SQL_CALC_FOUND_ROWS is used, then MariaDB will calculate how many rows\nwould have been in the result, if there would be no LIMIT clause. The result\ncan be found by calling the function FOUND_ROWS() in your next sql statement.\n\nmax_statement_time clause\n-------------------------\n\nBy using max_statement_time in conjunction with SET STATEMENT, it is possible\nto limit the execution time of individual queries. For example:\n\nSET STATEMENT max_statement_time=100 FOR \n SELECT field1 FROM table_name ORDER BY field1;\n\nWAIT/NOWAIT\n-----------\n\nSet the lock wait timeout. See WAIT and NOWAIT.\n\nExamples\n--------\n\nSELECT f1,f2 FROM t1 WHERE (f3<=10) AND (f4=\'y\');\n\nSee Getting Data from MariaDB (Beginner tutorial), or the various\nsub-articles, for more examples.\n\nURL: https://mariadb.com/kb/en/select/','','https://mariadb.com/kb/en/select/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (419,27,'JOIN Syntax','Description\n-----------\n\nMariaDB supports the following JOIN syntaxes for the table_references part of\nSELECT statements and multiple-table DELETE and UPDATE statements:\n\ntable_references:\n table_reference [, table_reference] ...\n\ntable_reference:\n table_factor\n | join_table\n\ntable_factor:\n tbl_name [PARTITION (partition_list)]\n [query_system_time_period_specification] [[AS] alias] [index_hint_list]\n | table_subquery [query_system_time_period_specification] [AS] alias\n | ( table_references )\n | { ON table_reference LEFT OUTER JOIN table_reference\n ON conditional_expr }\n\njoin_table:\n table_reference [INNER | CROSS] JOIN table_factor [join_condition]\n | table_reference STRAIGHT_JOIN table_factor\n | table_reference STRAIGHT_JOIN table_factor ON conditional_expr\n | table_reference {LEFT|RIGHT} [OUTER] JOIN table_reference join_condition\n | table_reference NATURAL [{LEFT|RIGHT} [OUTER]] JOIN table_factor\n\njoin_condition:\n ON conditional_expr\n | USING (column_list)\n\nquery_system_time_period_specification:\n FOR SYSTEM_TIME AS OF point_in_time\n | FOR SYSTEM_TIME BETWEEN point_in_time AND point_in_time\n | FOR SYSTEM_TIME FROM point_in_time TO point_in_time\n | FOR SYSTEM_TIME ALL\n\npoint_in_time:\n [TIMESTAMP] expression\n | TRANSACTION expression\n\nindex_hint_list:\n index_hint [, index_hint] ...\n\nindex_hint:\n USE {INDEX|KEY}\n [{FOR {JOIN|ORDER BY|GROUP BY}] ([index_list])\n | IGNORE {INDEX|KEY}\n [{FOR {JOIN|ORDER BY|GROUP BY}] (index_list)\n | FORCE {INDEX|KEY}\n [{FOR {JOIN|ORDER BY|GROUP BY}] (index_list)\n\nindex_list:\n index_name [, index_name] ...\n\nA table reference is also known as a join expression.\n\nEach table can also be specified as db_name.tabl_name. This allows to write\nqueries which involve multiple databases. See Identifier Qualifiers for syntax\ndetails.\n\nThe syntax of table_factor is extended in comparison with the SQL Standard.\nThe latter accepts only table_reference, not a list of them inside a pair of\nparentheses.\n\nThis is a conservative extension if we consider each comma in a list of\ntable_reference items as equivalent to an inner join. For example:\n\nSELECT * FROM t1 LEFT JOIN (t2, t3, t4)\n ON (t2.a=t1.a AND t3.b=t1.b AND t4.c=t1.c)\n\nis equivalent to:\n\nSELECT * FROM t1 LEFT JOIN (t2 CROSS JOIN t3 CROSS JOIN t4)\n ON (t2.a=t1.a AND t3.b=t1.b AND t4.c=t1.c)\n\nIn MariaDB, CROSS JOIN is a syntactic equivalent to INNER JOIN (they can\nreplace each other). In standard SQL, they are not equivalent. INNER JOIN is\nused with an ON clause, CROSS JOIN is used otherwise.\n\nIn general, parentheses can be ignored in join expressions containing only\ninner join operations. MariaDB also supports nested joins (see\nhttp://dev.mysql.com/doc/refman/5.1/en/nested-join-optimization.html).\n\nSee System-versioned tables for more information about FOR SYSTEM_TIME syntax.\n\nIndex hints can be specified to affect how the MariaDB optimizer makes use of\nindexes. For more information, see How to force query plans.\n\nExamples\n--------\n\nSELECT left_tbl.*\n FROM left_tbl LEFT JOIN right_tbl ON left_tbl.id = right_tbl.id\n WHERE right_tbl.id IS NULL;\n\nURL: https://mariadb.com/kb/en/join-syntax/','','https://mariadb.com/kb/en/join-syntax/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (420,27,'Scalar Subqueries','A scalar subquery is a subquery that returns a single value. This is the\nsimplest form of a subquery, and can be used in most places a literal or\nsingle column value is valid.\n\nThe data type, length and character set and collation are all taken from the\nresult returned by the subquery. The result of a subquery can always be NULL,\nthat is, no result returned. Even if the original value is defined as NOT\nNULL, this is disregarded.\n\nA subquery cannot be used where only a literal is expected, for example LOAD\nDATA INFILE expects a literal string containing the file name, and LIMIT\nrequires a literal integer.\n\nExamples\n--------\n\nCREATE TABLE sq1 (num TINYINT);\n\nCREATE TABLE sq2 (num TINYINT);\n\nINSERT INTO sq1 VALUES (1);\n\nINSERT INTO sq2 VALUES (10* (SELECT num FROM sq1));\n\nSELECT * FROM sq2;\n+------+\n| num |\n+------+\n| 10 |\n+------+\n\nInserting a second row means the subquery is no longer a scalar, and this\nparticular query is not valid:\n\nINSERT INTO sq1 VALUES (2);\n\nINSERT INTO sq2 VALUES (10* (SELECT num FROM sq1));\nERROR 1242 (21000): Subquery returns more than 1 row\n\nNo rows in the subquery, so the scalar is NULL:\n\nINSERT INTO sq2 VALUES (10* (SELECT num FROM sq3 WHERE num=\'3\'));\n\nSELECT * FROM sq2;\n+------+\n| num |\n+------+\n| 10 |\n| NULL |\n+------+\n\nA more traditional scalar subquery, as part of a WHERE clause:\n\nSELECT * FROM sq1 WHERE num = (SELECT MAX(num)/10 FROM sq2); \n+------+\n| num |\n+------+\n| 1 |\n+------+\n\nURL: https://mariadb.com/kb/en/subqueries-scalar-subqueries/','','https://mariadb.com/kb/en/subqueries-scalar-subqueries/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (421,27,'Row Subqueries','A row subquery is a subquery returning a single row, as opposed to a scalar\nsubquery, which returns a single column from a row, or a literal.\n\nExamples\n--------\n\nCREATE TABLE staff (name VARCHAR(10), age TINYINT);\n\nCREATE TABLE customer (name VARCHAR(10), age TINYINT);\n\nINSERT INTO staff VALUES (\'Bilhah\',37), (\'Valerius\',61), (\'Maia\',25);\n\nINSERT INTO customer VALUES (\'Thanasis\',48), (\'Valerius\',61), (\'Brion\',51);\n\nSELECT * FROM staff WHERE (name,age) = (SELECT name,age FROM customer WHERE\nname=\'Valerius\');\n+----------+------+\n| name | age |\n+----------+------+\n| Valerius | 61 |\n+----------+------+\n\nFinding all rows in one table also in another:\n\nSELECT name,age FROM staff WHERE (name,age) IN (SELECT name,age FROM customer);\n+----------+------+\n| name | age |\n+----------+------+\n| Valerius | 61 |\n+----------+------+\n\nURL: https://mariadb.com/kb/en/subqueries-row-subqueries/','','https://mariadb.com/kb/en/subqueries-row-subqueries/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (422,27,'Subqueries and ALL','Subqueries using the ALL keyword will return true if the comparison returns\ntrue for each row returned by the subquery, or the subquery returns no rows.\n\nSyntax\n------\n\nscalar_expression comparison_operator ALL <Table subquery>\n\n* scalar_expression may be any expression that evaluates to a single\nvalue\n* comparison_operator may be any one of: =, >, <, >=, <=, <> or !=\n\nALL returns:\n\n* NULL if the comparison operator returns NULL for at least one row returned\nby the Table subquery or scalar_expression returns NULL.\n* FALSE if the comparison operator returns FALSE for at least one row returned\nby the Table subquery.\n* TRUE if the comparison operator returns TRUE for all rows returned by the\nTable subquery, or if Table subquery returns no rows.\n\nNOT IN is an alias for <> ALL.\n\nExamples\n--------\n\nCREATE TABLE sq1 (num TINYINT);\n\nCREATE TABLE sq2 (num2 TINYINT);\n\nINSERT INTO sq1 VALUES(100);\n\nINSERT INTO sq2 VALUES(40),(50),(60);\n\nSELECT * FROM sq1 WHERE num > ALL (SELECT * FROM sq2);\n+------+\n| num |\n+------+\n| 100 |\n+------+\n\nSince 100 > all of 40,50 and 60, the evaluation is true and the row is returned\n\nAdding a second row to sq1, where the evaluation for that record is false:\n\nINSERT INTO sq1 VALUES(30);\n\nSELECT * FROM sq1 WHERE num > ALL (SELECT * FROM sq2);\n+------+\n| num |\n+------+\n| 100 |\n+------+\n\nAdding a new row to sq2, causing all evaluations to be false:\n\nINSERT INTO sq2 VALUES(120);\n\nSELECT * FROM sq1 WHERE num > ALL (SELECT * FROM sq2);\nEmpty set (0.00 sec)\n\nWhen the subquery returns no results, the evaluation is still true:\n\nSELECT * FROM sq1 WHERE num > ALL (SELECT * FROM sq2 WHERE num2 > 300);\n+------+\n| num |\n+------+\n| 100 |\n| 30 |\n+------+\n\nEvaluating against a NULL will cause the result to be unknown, or not true,\nand therefore return no rows:\n\nINSERT INTO sq2 VALUES (NULL);\n\nSELECT * FROM sq1 WHERE num > ALL (SELECT * FROM sq2);\n\nURL: https://mariadb.com/kb/en/subqueries-and-all/','','https://mariadb.com/kb/en/subqueries-and-all/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (423,27,'Subqueries and ANY','Subqueries using the ANY keyword will return true if the comparison returns\ntrue for at least one row returned by the subquery.\n\nSyntax\n------\n\nThe required syntax for an ANY or SOME quantified comparison is:\n\nscalar_expression comparison_operator ANY <Table subquery>\n\nOr:\n\nscalar_expression comparison_operator SOME <Table subquery>\n\n* scalar_expression may be any expression that evaluates to a\nsingle value.\n* comparison_operator may be any one of =, >, <, >=, <=, <> or !=.\n\nANY returns:\n\n* TRUE if the comparison operator returns TRUE for at least one row returned\nby the Table subquery.\n* FALSE if the comparison operator returns FALSE for all rows returned by the\nTable subquery, or Table subquery has zero rows.\n* NULL if the comparison operator returns NULL for at least one row returned\nby the Table subquery and doesn\'t returns TRUE for any of them, or if\nscalar_expression returns NULL.\n\nSOME is a synmonym for ANY, and IN is a synonym for = ANY\n\nExamples\n--------\n\nCREATE TABLE sq1 (num TINYINT);\n\nCREATE TABLE sq2 (num2 TINYINT);\n\nINSERT INTO sq1 VALUES(100);\n\nINSERT INTO sq2 VALUES(40),(50),(120);\n\nSELECT * FROM sq1 WHERE num > ANY (SELECT * FROM sq2);\n+------+\n| num |\n+------+\n| 100 |\n+------+\n\n100 is greater than two of the three values, and so the expression evaluates\nas true.\n\nSOME is a synonym for ANY:\n\nSELECT * FROM sq1 WHERE num < SOME (SELECT * FROM sq2);\n+------+\n| num |\n+------+\n| 100 |\n+------+\n\nIN is a synonym for = ANY, and here there are no matches, so no results are\nreturned:\n\nSELECT * FROM sq1 WHERE num IN (SELECT * FROM sq2);\nEmpty set (0.00 sec)\n\nINSERT INTO sq2 VALUES(100);\nQuery OK, 1 row affected (0.05 sec)\n\nSELECT * FROM sq1 WHERE num <> ANY (SELECT * FROM sq2);\n+------+\n| num |\n+------+\n| 100 |\n+------+\n\nReading this query, the results may be counter-intuitive. It may seem to read\nas \"SELECT * FROM sq1 WHERE num does not match any results in sq2. Since it\ndoes match 100, it could seem that the results are incorrect. However, the\nquery returns a result if the match does not match any of sq2. Since 100\nalready does not match 40, the expression evaluates to true immediately,\nregardless of the 100\'s matching. It may be more easily readable to use SOME\nin a case such as this:\n\nSELECT * FROM sq1 WHERE num <> SOME (SELECT * FROM sq2);\n+------+\n| num |\n+------+\n| 100 |\n+------+\n\nURL: https://mariadb.com/kb/en/subqueries-and-any/','','https://mariadb.com/kb/en/subqueries-and-any/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (424,27,'Subqueries and EXISTS','Syntax\n------\n\nSELECT ... WHERE EXISTS <Table subquery>\n\nDescription\n-----------\n\nSubqueries using the EXISTS keyword will return true if the subquery returns\nany rows. Conversely, subqueries using NOT EXISTS will return true only if the\nsubquery returns no rows from the table.\n\nEXISTS subqueries ignore the columns specified by the SELECT of the subquery,\nsince they\'re not relevant. For example,\n\nSELECT col1 FROM t1 WHERE EXISTS (SELECT * FROM t2);\n\nand\n\nSELECT col1 FROM t1 WHERE EXISTS (SELECT col2 FROM t2);\n\nproduce identical results.\n\nExamples\n--------\n\nCREATE TABLE sq1 (num TINYINT);\n\nCREATE TABLE sq2 (num2 TINYINT);\n\nINSERT INTO sq1 VALUES(100);\n\nINSERT INTO sq2 VALUES(40),(50),(60);\n\nSELECT * FROM sq1 WHERE EXISTS (SELECT * FROM sq2 WHERE num2>50);\n+------+\n| num |\n+------+\n| 100 |\n+------+\n\nSELECT * FROM sq1 WHERE NOT EXISTS (SELECT * FROM sq2 GROUP BY num2 HAVING\nMIN(num2)=40);\nEmpty set (0.00 sec)\n\nURL: https://mariadb.com/kb/en/subqueries-and-exists/','','https://mariadb.com/kb/en/subqueries-and-exists/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (425,27,'Subqueries in a FROM Clause','Although subqueries are more commonly placed in a WHERE clause, they can also\nform part of the FROM clause. Such subqueries are commonly called derived\ntables.\n\nIf a subquery is used in this way, you must also use an AS clause to name the\nresult of the subquery.\n\nORACLE mode\n-----------\n\nMariaDB starting with 10.6.0\n----------------------------\nFrom MariaDB 10.6.0, anonymous subqueries in a FROM clause (no AS clause) are\npermitted in ORACLE mode.\n\nExamples\n--------\n\nCREATE TABLE student (name CHAR(10), test CHAR(10), score TINYINT);\n\nINSERT INTO student VALUES \n (\'Chun\', \'SQL\', 75), (\'Chun\', \'Tuning\', 73),\n (\'Esben\', \'SQL\', 43), (\'Esben\', \'Tuning\', 31),\n (\'Kaolin\', \'SQL\', 56), (\'Kaolin\', \'Tuning\', 88),\n (\'Tatiana\', \'SQL\', 87), (\'Tatiana\', \'Tuning\', 83);\n\nAssume that, given the data above, you want to return the average total for\nall students. In other words, the average of Chun\'s 148 (75+73), Esben\'s 74\n(43+31), etc.\n\nYou cannot do the following:\n\nSELECT AVG(SUM(score)) FROM student GROUP BY name;\nERROR 1111 (HY000): Invalid use of group function\n\nA subquery in the FROM clause is however permitted:\n\nSELECT AVG(sq_sum) FROM (SELECT SUM(score) AS sq_sum FROM student GROUP BY\nname) AS t;\n+-------------+\n| AVG(sq_sum) |\n+-------------+\n| 134.0000 |\n+-------------+\n\nFrom MariaDB 10.6 in ORACLE mode, the following is permitted:\n\nSELECT * FROM (SELECT 1 FROM DUAL), (SELECT 2 FROM DUAL);\n\nURL: https://mariadb.com/kb/en/subqueries-in-a-from-clause/','','https://mariadb.com/kb/en/subqueries-in-a-from-clause/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (426,27,'Subqueries and JOINs','A subquery can quite often, but not in all cases, be rewritten as a JOIN.\n\nRewriting Subqueries as JOINS\n-----------------------------\n\nA subquery using IN can be rewritten with the DISTINCT keyword, for example:\n\nSELECT * FROM table1 WHERE col1 IN (SELECT col1 FROM table2);\n\ncan be rewritten as:\n\nSELECT DISTINCT table1.* FROM table1, table2 WHERE table1.col1=table2.col1;\n\nNOT IN or NOT EXISTS queries can also be rewritten. For example, these two\nqueries returns the same result:\n\nSELECT * FROM table1 WHERE col1 NOT IN (SELECT col1 FROM table2);\nSELECT * FROM table1 WHERE NOT EXISTS (SELECT col1 FROM table2 WHERE\ntable1.col1=table2.col1);\n\nand both can be rewritten as:\n\nSELECT table1.* FROM table1 LEFT JOIN table2 ON table1.id=table2.id WHERE\ntable2.id IS NULL;\n\nSubqueries that can be rewritten as a LEFT JOIN are sometimes more efficient.\n\nUsing Subqueries instead of JOINS\n---------------------------------\n\nThere are some scenarios, though, which call for subqueries rather than joins:\n\n* When you want duplicates, but not false duplicates. Suppose Table_1\n has three rows — {1,1,2}\n — and Table_2 has two rows\n — {1,2,2}. If you need to list the rows\n in Table_1 which are also in Table_2, only this\n subquery-based SELECT statement will give the right answer\n (1,1,2):\n\nSELECT Table_1.column_1 \nFROM Table_1 \nWHERE Table_1.column_1 IN \n (SELECT Table_2.column_1\n FROM Table_2);\n\n* This SQL statement won\'t work:\n\nSELECT Table_1.column_1 \nFROM Table_1,Table_2 \nWHERE Table_1.column_1 = Table_2.column_1;\n\n* because the result will be {1,1,2,2}\n — and the duplication of 2 is an error. This SQL\n statement won\'t work either:\n\nSELECT DISTINCT Table_1.column_1 \nFROM Table_1,Table_2 \nWHERE Table_1.column_1 = Table_2.column_1;\n\n* because the result will be {1,2} — and\n the removal of the duplicated 1 is an error too.\n\n* When the outermost statement is not a query. The SQL statement:\n\nUPDATE Table_1 SET column_1 = (SELECT column_1 FROM Table_2);\n\n* can\'t be expressed using a join unless some rare SQL3 features are used.\n\n* When the join is over an expression. The SQL statement:\n\nSELECT * FROM Table_1 \nWHERE column_1 + 5 =\n (SELECT MAX(column_1) FROM Table_2);\n\n* is hard to express with a join. In fact, the only way we can think of is\n this SQL statement:\n\nSELECT Table_1.*\nFROM Table_1, \n (SELECT MAX(column_1) AS max_column_1 FROM Table_2) AS Table_2\nWHERE Table_1.column_1 + 5 = Table_2.max_column_1;\n\n* which still involves a parenthesized query, so nothing is gained from the\n transformation.\n\n* When you want to see the exception. For example, suppose the question is:\n what books are longer than Das Kapital? These two queries are effectively\n almost the same:\n\nSELECT DISTINCT Bookcolumn_1.* \nFROM Books AS Bookcolumn_1 JOIN Books AS Bookcolumn_2 USING(page_count) \nWHERE title = \'Das Kapital\';\n\nSELECT DISTINCT Bookcolumn_1.* \nFROM Books AS Bookcolumn_1 \nWHERE Bookcolumn_1.page_count > \n (SELECT DISTINCT page_count\n FROM Books AS Bookcolumn_2\n WHERE title = \'Das Kapital\');\n\n* The difference is between these two SQL statements is, if there are two\n editions of Das Kapital (with different page counts), then the self-join\n example will return the books which are longer than the shortest edition\n of Das Kapital. That might be the wrong answer, since the original\n question didn\'t ask for \"... longer than ANY book named Das Kapital\"\n (it seems to contain a false assumption that there\'s only one edition).\n\nURL: https://mariadb.com/kb/en/subqueries-and-joins/','','https://mariadb.com/kb/en/subqueries-and-joins/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (427,27,'Subquery Limitations','There are a number of limitations regarding subqueries, which are discussed\nbelow. The following tables and data will be used in the examples that follow:\n\nCREATE TABLE staff(name VARCHAR(10),age TINYINT);\n\nCREATE TABLE customer(name VARCHAR(10),age TINYINT);\n\nINSERT INTO staff VALUES \n(\'Bilhah\',37), (\'Valerius\',61), (\'Maia\',25);\n\nINSERT INTO customer VALUES \n(\'Thanasis\',48), (\'Valerius\',61), (\'Brion\',51);\n\nORDER BY and LIMIT\n------------------\n\nTo use ORDER BY or limit LIMIT in subqueries both must be used.. For example:\n\nSELECT * FROM staff WHERE name IN (SELECT name FROM customer ORDER BY name);\n+----------+------+\n| name | age |\n+----------+------+\n| Valerius | 61 |\n+----------+------+\n\nis valid, but\n\nSELECT * FROM staff WHERE name IN (SELECT NAME FROM customer ORDER BY name\nLIMIT 1);\nERROR 1235 (42000): This version of MariaDB doesn\'t \n yet support \'LIMIT & IN/ALL/ANY/SOME subquery\'\n\nis not.\n\nModifying and Selecting from the Same Table\n-------------------------------------------\n\nIt\'s not possible to both modify and select from the same table in a subquery.\nFor example:\n\nDELETE FROM staff WHERE name = (SELECT name FROM staff WHERE age=61);\nERROR 1093 (HY000): Table \'staff\' is specified twice, both \n as a target for \'DELETE\' and as a separate source for data\n\nRow Comparison Operations\n-------------------------\n\nThere is only partial support for row comparison operations. The expression in\n\nexpr op {ALL|ANY|SOME} subquery,\n\nmust be scalar and the subquery can only return a single column.\n\nHowever, because of the way IN is implemented (it is rewritten as a sequence\nof = comparisons and AND), the expression in\n\nexpression [NOT] IN subquery\n\nis permitted to be an n-tuple and the subquery can return rows of n-tuples.\n\nFor example:\n\nSELECT * FROM staff WHERE (name,age) NOT IN (\n SELECT name,age FROM customer WHERE age >=51]\n);\n+--------+------+\n| name | age |\n+--------+------+\n| Bilhah | 37 |\n| Maia | 25 |\n+--------+------+\n\nis permitted, but\n\nSELECT * FROM staff WHERE (name,age) = ALL (\n SELECT name,age FROM customer WHERE age >=51\n);\nERROR 1241 (21000): Operand should contain 1 column(s)\n\nis not.\n\nCorrelated Subqueries\n---------------------\n\nSubqueries in the FROM clause cannot be correlated subqueries. They cannot be\nevaluated for each row of the outer query since they are evaluated to produce\na result set during when the query is executed.\n\nStored Functions\n----------------\n\nA subquery can refer to a stored function which modifies data. This is an\nextension to the SQL standard, but can result in indeterminate outcomes. For\nexample, take:\n\nSELECT ... WHERE x IN (SELECT f() ...);\n\nwhere f() inserts rows. The function f() could be executed a different number\nof times depending on how the optimizer chooses to handle the query.\n\nThis sort of construct is therefore not safe to use in replication that is not\nrow-based, as there could be different results on the master and the slave.\n\nURL: https://mariadb.com/kb/en/subquery-limitations/','','https://mariadb.com/kb/en/subquery-limitations/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (428,27,'UNION','UNION is used to combine the results from multiple SELECT statements into a\nsingle result set.\n\nSyntax\n------\n\nSELECT ...\nUNION [ALL | DISTINCT] SELECT ...\n[UNION [ALL | DISTINCT] SELECT ...]\n[ORDER BY [column [, column ...]]]\n[LIMIT {[offset,] row_count | row_count OFFSET offset}]\n\nDescription\n-----------\n\nUNION is used to combine the results from multiple SELECT statements into a\nsingle result set.\n\nThe column names from the first SELECT statement are used as the column names\nfor the results returned. Selected columns listed in corresponding positions\nof each SELECT statement should have the same data type. (For example, the\nfirst column selected by the first statement should have the same type as the\nfirst column selected by the other statements.)\n\nIf they don\'t, the type and length of the columns in the result take into\naccount the values returned by all of the SELECTs, so there is no need for\nexplicit casting. Note that currently this is not the case for recursive CTEs\n- see MDEV-12325.\n\nTable names can be specified as db_name.tbl_name. This permits writing UNIONs\nwhich involve multiple databases. See Identifier Qualifiers for syntax details.\n\nUNION queries cannot be used with aggregate functions.\n\nEXCEPT and UNION have the same operation precedence and INTERSECT has a higher\nprecedence, unless running in Oracle mode, in which case all three have the\nsame precedence.\n\nALL/DISTINCT\n------------\n\nThe ALL keyword causes duplicate rows to be preserved. The DISTINCT keyword\n(the default if the keyword is omitted) causes duplicate rows to be removed by\nthe results.\n\nUNION ALL and UNION DISTINCT can both be present in a query. In this case,\nUNION DISTINCT will override any UNION ALLs to its left.\n\nMariaDB starting with 10.1.1\n----------------------------\nUntil MariaDB 10.1.1, all UNION ALL statements required the server to create a\ntemporary table. Since MariaDB 10.1.1, the server can in most cases execute\nUNION ALL without creating a temporary table, improving performance (see\nMDEV-334).\n\nORDER BY and LIMIT\n------------------\n\nIndividual SELECTs can contain their own ORDER BY and LIMIT clauses. In this\ncase, the individual queries need to be wrapped between parentheses. However,\nthis does not affect the order of the UNION, so they only are useful to limit\nthe record read by one SELECT.\n\nThe UNION can have global ORDER BY and LIMIT clauses, which affect the whole\nresultset. If the columns retrieved by individual SELECT statements have an\nalias (AS), the ORDER BY must use that alias, not the real column names.\n\nHIGH_PRIORITY\n-------------\n\nSpecifying a query as HIGH_PRIORITY will not work inside a UNION. If applied\nto the first SELECT, it will be ignored. Applying to a later SELECT results in\na syntax error:\n\nERROR 1234 (42000): Incorrect usage/placement of \'HIGH_PRIORITY\'\n\nSELECT ... INTO ...\n-------------------\n\nIndividual SELECTs cannot be written INTO DUMPFILE or INTO OUTFILE. If the\nlast SELECT statement specifies INTO DUMPFILE or INTO OUTFILE, the entire\nresult of the UNION will be written. Placing the clause after any other SELECT\nwill result in a syntax error.\n\nIf the result is a single row, SELECT ... INTO @var_name can also be used.\n\nMariaDB starting with 10.4.0\n----------------------------\n\nParentheses\n-----------\n\nFrom MariaDB 10.4.0, parentheses can be used to specify precedence. Before\nthis, a syntax error would be returned.\n\nExamples\n--------\n\nUNION between tables having different column names:\n\n(SELECT e_name AS name, email FROM employees)\nUNION\n(SELECT c_name AS name, email FROM customers);\n\nSpecifying the UNION\'s global order and limiting total rows:\n\n(SELECT name, email FROM employees)\nUNION\n(SELECT name, email FROM customers)\nORDER BY name LIMIT 10;\n\nAdding a constant row:\n\n(SELECT \'John Doe\' AS name, \'john.doe@example.net\' AS email)\nUNION\n(SELECT name, email FROM customers);\n\nDiffering types:\n\nSELECT CAST(\'x\' AS CHAR(1)) UNION SELECT REPEAT(\'y\',4);\n+----------------------+\n| CAST(\'x\' AS CHAR(1)) |\n+----------------------+\n| x |\n| yyyy |\n+----------------------+\n\nReturning the results in order of each individual SELECT by use of a sort\ncolumn:\n\n(SELECT 1 AS sort_column, e_name AS name, email FROM employees)\nUNION\n(SELECT 2, c_name AS name, email FROM customers) ORDER BY sort_column;\n\nDifference between UNION, EXCEPT and INTERSECT. INTERSECT ALL and EXCEPT ALL\nare available from MariaDB 10.5.0.\n\nCREATE TABLE seqs (i INT);\nINSERT INTO seqs VALUES (1),(2),(2),(3),(3),(4),(5),(6);\n\nSELECT i FROM seqs WHERE i <= 3 UNION SELECT i FROM seqs WHERE i>=3;\n+------+\n| i |\n+------+\n| 1 |\n| 2 |\n| 3 |\n| 4 |\n| 5 |\n| 6 |\n+------+\n\nSELECT i FROM seqs WHERE i <= 3 UNION ALL SELECT i FROM seqs WHERE i>=3;\n+------+\n| i |\n+------+\n| 1 |\n| 2 |\n| 2 |\n| 3 |\n| 3 |\n| 3 |\n| 3 |\n| 4 |\n| 5 |\n| 6 |\n+------+\n\nSELECT i FROM seqs WHERE i <= 3 EXCEPT SELECT i FROM seqs WHERE i>=3;\n+------+\n| i |\n+------+\n| 1 |\n| 2 |\n+------+\n\nSELECT i FROM seqs WHERE i <= 3 EXCEPT ALL SELECT i FROM seqs WHERE i>=3;\n+------+\n| i |\n+------+\n| 1 |\n| 2 |\n| 2 |\n+------+\n\nSELECT i FROM seqs WHERE i <= 3 INTERSECT SELECT i FROM seqs WHERE i>=3;\n+------+\n| i |\n+------+\n| 3 |\n+------+\n\nSELECT i FROM seqs WHERE i <= 3 INTERSECT ALL SELECT i FROM seqs WHERE i>=3;\n+------+\n| i |\n+------+\n| 3 |\n| 3 |\n+------+\n\nParentheses for specifying precedence, from MariaDB 10.4.0\n\nCREATE OR REPLACE TABLE t1 (a INT);\nCREATE OR REPLACE TABLE t2 (b INT);\nCREATE OR REPLACE TABLE t3 (c INT);\n\nINSERT INTO t1 VALUES (1),(2),(3),(4);\nINSERT INTO t2 VALUES (5),(6);\nINSERT INTO t3 VALUES (1),(6);\n\n((SELECT a FROM t1) UNION (SELECT b FROM t2)) INTERSECT (SELECT c FROM t3);\n+------+\n| a |\n+------+\n| 1 |\n| 6 |\n+------+\n\n(SELECT a FROM t1) UNION ((SELECT b FROM t2) INTERSECT (SELECT c FROM t3));\n+------+\n| a |\n+------+\n| 1 |\n| 2 |\n| 3 |\n| 4 |\n| 6 |\n+------+\n\nURL: https://mariadb.com/kb/en/union/','','https://mariadb.com/kb/en/union/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (429,27,'EXCEPT','MariaDB starting with 10.3.0\n----------------------------\nEXCEPT was introduced in MariaDB 10.3.0.\n\nThe result of EXCEPT is all records of the left SELECT result set except\nrecords which are in right SELECT result set, i.e. it is subtraction of two\nresult sets. From MariaDB 10.6.1, MINUS is a synonym.\n\nSyntax\n------\n\nSELECT ...\n(INTERSECT [ALL | DISTINCT] | EXCEPT [ALL | DISTINCT] | UNION [ALL |\nDISTINCT]) SELECT ...\n[(INTERSECT [ALL | DISTINCT] | EXCEPT [ALL | DISTINCT] | UNION [ALL |\nDISTINCT]) SELECT ...]\n[ORDER BY [{col_name | expr | position} [ASC | DESC] [, {col_name | expr |\nposition} [ASC | DESC] ...]]]\n[LIMIT {[offset,] row_count | row_count OFFSET offset}\n| OFFSET start { ROW | ROWS }\n| FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } { ONLY | WITH TIES } ]\n\nPlease note:\n\n* Brackets for explicit operation precedence are not supported; use a subquery\nin the FROM clause as a workaround).\n\nDescription\n-----------\n\nMariaDB has supported EXCEPT and INTERSECT in addition to UNION since MariaDB\n10.3.\n\nThe queries before and after EXCEPT must be SELECT or VALUES statements.\n\nAll behavior for naming columns, ORDER BY and LIMIT is the same as for UNION.\nNote that the alternative SELECT ... OFFSET ... FETCH syntax is only\nsupported. This allows us to use the WITH TIES clause.\n\nEXCEPT implicitly supposes a DISTINCT operation.\n\nThe result of EXCEPT is all records of the left SELECT result except records\nwhich are in right SELECT result set, i.e. it is subtraction of two result\nsets.\n\nEXCEPT and UNION have the same operation precedence and INTERSECT has a higher\nprecedence, unless running in Oracle mode, in which case all three have the\nsame precedence.\n\nMariaDB starting with 10.4.0\n----------------------------\n\nParentheses\n-----------\n\nFrom MariaDB 10.4.0, parentheses can be used to specify precedence. Before\nthis, a syntax error would be returned.\n\nMariaDB starting with 10.5.0\n----------------------------\n\nALL/DISTINCT\n------------\n\nEXCEPT ALL and EXCEPT DISTINCT were introduced in MariaDB 10.5.0. The ALL\noperator leaves duplicates intact, while the DISTINCT operator removes\nduplicates. DISTINCT is the default behavior if neither operator is supplied,\nand the only behavior prior to MariaDB 10.5.\n\nExamples\n--------\n\nShow customers which are not employees:\n\n(SELECT e_name AS name, email FROM customers)\nEXCEPT\n(SELECT c_name AS name, email FROM employees);\n\nDifference between UNION, EXCEPT and INTERSECT. INTERSECT ALL and EXCEPT ALL\nare available from MariaDB 10.5.0.\n\nCREATE TABLE seqs (i INT);\nINSERT INTO seqs VALUES (1),(2),(2),(3),(3),(4),(5),(6);\n\nSELECT i FROM seqs WHERE i <= 3 UNION SELECT i FROM seqs WHERE i>=3;\n+------+\n| i |\n+------+\n| 1 |\n| 2 |\n| 3 |\n| 4 |\n| 5 |\n| 6 |\n+------+\n\nSELECT i FROM seqs WHERE i <= 3 UNION ALL SELECT i FROM seqs WHERE i>=3;\n+------+\n| i |\n+------+\n| 1 |\n| 2 |\n| 2 |\n| 3 |\n| 3 |\n| 3 |\n| 3 |\n| 4 |\n| 5 |\n| 6 |\n+------+\n\nSELECT i FROM seqs WHERE i <= 3 EXCEPT SELECT i FROM seqs WHERE i>=3;\n+------+\n| i |\n+------+\n| 1 |\n| 2 |\n+------+\n\nSELECT i FROM seqs WHERE i <= 3 EXCEPT ALL SELECT i FROM seqs WHERE i>=3;\n+------+\n| i |\n+------+\n| 1 |\n| 2 |\n| 2 |\n+------+\n\nSELECT i FROM seqs WHERE i <= 3 INTERSECT SELECT i FROM seqs WHERE i>=3;\n+------+\n| i |\n+------+\n| 3 |\n+------+\n\nSELECT i FROM seqs WHERE i <= 3 INTERSECT ALL SELECT i FROM seqs WHERE i>=3;\n+------+\n| i |\n+------+\n| 3 |\n| 3 |\n+------+\n\nParentheses for specifying precedence, from MariaDB 10.4.0\n\nCREATE OR REPLACE TABLE t1 (a INT);\nCREATE OR REPLACE TABLE t2 (b INT);\nCREATE OR REPLACE TABLE t3 (c INT);\n\nINSERT INTO t1 VALUES (1),(2),(3),(4);\nINSERT INTO t2 VALUES (5),(6);\nINSERT INTO t3 VALUES (1),(6);\n\n((SELECT a FROM t1) UNION (SELECT b FROM t2)) EXCEPT (SELECT c FROM t3);\n+------+\n| a |\n+------+\n| 2 |\n| 3 |\n| 4 |\n| 5 |\n+------+\n\n(SELECT a FROM t1) UNION ((SELECT b FROM t2) EXCEPT (SELECT c FROM t3));\n+------+\n| a |\n+------+\n| 1 |\n| 2 |\n| 3 |\n| 4 |\n| 5 |\n+------+\n\nHere is an example that makes use of the SEQUENCE storage engine and the\nVALUES statement, to generate a numeric sequence and remove some arbitrary\nnumbers from it:\n\n(SELECT seq FROM seq_1_to_10) EXCEPT VALUES (2), (3), (4);\n+-----+\n| seq |\n+-----+\n| 1 |\n| 5 |\n| 6 |\n| 7 |\n| 8 |\n| 9 |\n| 10 |\n+-----+\n\nURL: https://mariadb.com/kb/en/except/','','https://mariadb.com/kb/en/except/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (430,27,'INTERSECT','MariaDB starting with 10.3.0\n----------------------------\nINTERSECT was introduced in MariaDB 10.3.0.\n\nThe result of an intersect is the intersection of right and left SELECT\nresults, i.e. only records that are present in both result sets will be\nincluded in the result of the operation.\n\nSyntax\n------\n\nSELECT ...\n(INTERSECT [ALL | DISTINCT] | EXCEPT [ALL | DISTINCT] | UNION [ALL |\nDISTINCT]) SELECT ...\n[(INTERSECT [ALL | DISTINCT] | EXCEPT [ALL | DISTINCT] | UNION [ALL |\nDISTINCT]) SELECT ...]\n[ORDER BY [column [, column ...]]]\n[LIMIT {[offset,] row_count | row_count OFFSET offset}]\n\nDescription\n-----------\n\nMariaDB has supported INTERSECT (as well as EXCEPT) in addition to UNION since\nMariaDB 10.3.\n\nAll behavior for naming columns, ORDER BY and LIMIT is the same as for UNION.\n\nINTERSECT implicitly supposes a DISTINCT operation.\n\nThe result of an intersect is the intersection of right and left SELECT\nresults, i.e. only records that are present in both result sets will be\nincluded in the result of the operation.\n\nINTERSECT has higher precedence than UNION and EXCEPT (unless running running\nin Oracle mode, in which case all three have the same precedence). If possible\nit will be executed linearly but if not it will be translated to a subquery in\nthe FROM clause:\n\n(select a,b from t1)\nunion\n(select c,d from t2)\nintersect\n(select e,f from t3)\nunion\n(select 4,4);\n\nwill be translated to:\n\n(select a,b from t1)\nunion\nselect c,d from\n ((select c,d from t2)\n intersect\n (select e,f from t3)) dummy_subselect\nunion\n(select 4,4)\n\nMariaDB starting with 10.4.0\n----------------------------\n\nParentheses\n-----------\n\nFrom MariaDB 10.4.0, parentheses can be used to specify precedence. Before\nthis, a syntax error would be returned.\n\nMariaDB starting with 10.5.0\n----------------------------\n\nALL/DISTINCT\n------------\n\nINTERSECT ALL and INTERSECT DISTINCT were introduced in MariaDB 10.5.0. The\nALL operator leaves duplicates intact, while the DISTINCT operator removes\nduplicates. DISTINCT is the default behavior if neither operator is supplied,\nand the only behavior prior to MariaDB 10.5.\n\nExamples\n--------\n\nShow customers which are employees:\n\n(SELECT e_name AS name, email FROM employees)\nINTERSECT\n(SELECT c_name AS name, email FROM customers);\n\nDifference between UNION, EXCEPT and INTERSECT. INTERSECT ALL and EXCEPT ALL\nare available from MariaDB 10.5.0.\n\nCREATE TABLE seqs (i INT);\nINSERT INTO seqs VALUES (1),(2),(2),(3),(3),(4),(5),(6);\n\nSELECT i FROM seqs WHERE i <= 3 UNION SELECT i FROM seqs WHERE i>=3;\n+------+\n| i |\n+------+\n| 1 |\n| 2 |\n| 3 |\n| 4 |\n| 5 |\n| 6 |\n+------+\n\nSELECT i FROM seqs WHERE i <= 3 UNION ALL SELECT i FROM seqs WHERE i>=3;\n+------+\n| i |\n+------+\n| 1 |\n| 2 |\n| 2 |\n| 3 |\n| 3 |\n| 3 |\n| 3 |\n| 4 |\n| 5 |\n| 6 |\n+------+\n\nSELECT i FROM seqs WHERE i <= 3 EXCEPT SELECT i FROM seqs WHERE i>=3;\n+------+\n| i |\n+------+\n| 1 |\n| 2 |\n+------+\n\nSELECT i FROM seqs WHERE i <= 3 EXCEPT ALL SELECT i FROM seqs WHERE i>=3;\n+------+\n| i |\n+------+\n| 1 |\n| 2 |\n| 2 |\n+------+\n\nSELECT i FROM seqs WHERE i <= 3 INTERSECT SELECT i FROM seqs WHERE i>=3;\n+------+\n| i |\n+------+\n| 3 |\n+------+\n\nSELECT i FROM seqs WHERE i <= 3 INTERSECT ALL SELECT i FROM seqs WHERE i>=3;\n+------+\n| i |\n+------+\n| 3 |\n| 3 |\n+------+\n\nParentheses for specifying precedence, from MariaDB 10.4.0\n\nCREATE OR REPLACE TABLE t1 (a INT);\nCREATE OR REPLACE TABLE t2 (b INT);\nCREATE OR REPLACE TABLE t3 (c INT);\n\nINSERT INTO t1 VALUES (1),(2),(3),(4);\nINSERT INTO t2 VALUES (5),(6);\nINSERT INTO t3 VALUES (1),(6);\n\n((SELECT a FROM t1) UNION (SELECT b FROM t2)) INTERSECT (SELECT c FROM t3);\n+------+\n| a |\n+------+\n| 1 |\n| 6 |\n+------+\n\n(SELECT a FROM t1) UNION ((SELECT b FROM t2) INTERSECT (SELECT c FROM t3));\n+------+\n| a |\n+------+\n| 1 |\n| 2 |\n| 3 |\n| 4 |\n| 6 |\n+------+\n\nURL: https://mariadb.com/kb/en/intersect/','','https://mariadb.com/kb/en/intersect/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (431,27,'Precedence Control in Table Operations','MariaDB starting with 10.4.0\n----------------------------\nBeginning in MariaDB 10.4, you can control the ordering of execution on table\noperations using parentheses.\n\nSyntax\n------\n\n( expression )\n[ORDER BY [column[, column...]]]\n[LIMIT {[offset,] row_count | row_count OFFSET offset}]\n\nDescription\n-----------\n\nUsing parentheses in your SQL allows you to control the order of execution for\nSELECT statements and Table Value Constructor, including UNION, EXCEPT, and\nINTERSECT operations. MariaDB executes the parenthetical expression before the\nrest of the statement. You can then use ORDER BY and LIMIT clauses the further\norganize the result-set.\n\nNote: In practice, the Optimizer may rearrange the exact order in which\nMariaDB executes different parts of the statement. When it calculates the\nresult-set, however, it returns values as though the parenthetical expression\nwere executed first.\n\nExample\n-------\n\nCREATE TABLE test.t1 (num INT);\n\nINSERT INTO test.t1 VALUES (1),(2),(3);\n\n(SELECT * FROM test.t1 \n UNION \n VALUES (10)) \nINTERSECT \nVALUES (1),(3),(10),(11);\n+------+\n| num |\n+------+\n| 1 |\n| 3 |\n| 10 |\n+------+\n\n((SELECT * FROM test.t1 \n UNION\n VALUES (10))\n INTERSECT \n VALUES (1),(3),(10),(11)) \nORDER BY 1 DESC;\n+------+\n| num |\n+------+\n| 10 |\n| 3 |\n| 1 |\n+------+\n\nURL: https://mariadb.com/kb/en/precedence-control-in-table-operations/','','https://mariadb.com/kb/en/precedence-control-in-table-operations/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (432,27,'LIMIT','Description\n-----------\n\nUse the LIMIT clause to restrict the number of returned rows. When you use a\nsingle integer n with LIMIT, the first n rows will be returned. Use the ORDER\nBY clause to control which rows come first. You can also select a number of\nrows after an offset using either of the following:\n\nLIMIT offset, row_count\nLIMIT row_count OFFSET offset\n\nWhen you provide an offset m with a limit n, the first m rows will be ignored,\nand the following n rows will be returned.\n\nExecuting an UPDATE with the LIMIT clause is not safe for replication. LIMIT 0\nis an exception to this rule (see MDEV-6170).\n\nThere is a LIMIT ROWS EXAMINED optimization which provides the means to\nterminate the execution of SELECT statements which examine too many rows, and\nthus use too many resources. See LIMIT ROWS EXAMINED.\n\nMulti-Table Updates\n-------------------\n\nMariaDB starting with 10.3.2\n----------------------------\nUntil MariaDB 10.3.1, it was not possible to use LIMIT (or ORDER BY) in a\nmulti-table UPDATE statement. This restriction was lifted in MariaDB 10.3.2.\n\nGROUP_CONCAT\n------------\n\nMariaDB starting with 10.3.2\n----------------------------\nStarting from MariaDB 10.3.3, it is possible to use LIMIT with GROUP_CONCAT().\n\nExamples\n--------\n\nCREATE TABLE members (name VARCHAR(20));\nINSERT INTO members VALUES(\'Jagdish\'),(\'Kenny\'),(\'Rokurou\'),(\'Immaculada\');\n\nSELECT * FROM members;\n+------------+\n| name |\n+------------+\n| Jagdish |\n| Kenny |\n| Rokurou |\n| Immaculada |\n+------------+\n\nSelect the first two names (no ordering specified):\n\nSELECT * FROM members LIMIT 2;\n+---------+\n| name |\n+---------+\n| Jagdish |\n| Kenny |\n+---------+\n\nAll the names in alphabetical order:\n\nSELECT * FROM members ORDER BY name;\n+------------+\n| name |\n+------------+\n| Immaculada |\n| Jagdish |\n| Kenny |\n| Rokurou |\n+------------+\n\nThe first two names, ordered alphabetically:\n\nSELECT * FROM members ORDER BY name LIMIT 2;\n+------------+\n| name |\n+------------+\n| Immaculada |\n| Jagdish |\n+------------+\n\nThe third name, ordered alphabetically (the first name would be offset zero,\nso the third is offset two):\n\nSELECT * FROM members ORDER BY name LIMIT 2,1;\n+-------+\n| name |\n+-------+\n| Kenny |\n+-------+\n\nFrom MariaDB 10.3.2, LIMIT can be used in a multi-table update:\n\nCREATE TABLE warehouse (product_id INT, qty INT);\nINSERT INTO warehouse VALUES (1,100),(2,100),(3,100),(4,100);\n\nCREATE TABLE store (product_id INT, qty INT);\nINSERT INTO store VALUES (1,5),(2,5),(3,5),(4,5);\n\nUPDATE warehouse,store SET warehouse.qty = warehouse.qty-2, store.qty =\nstore.qty+2 \n WHERE (warehouse.product_id = store.product_id AND store.product_id >= 1)\n ORDER BY store.product_id DESC LIMIT 2;\n\nSELECT * FROM warehouse;\n+------------+------+\n| product_id | qty |\n+------------+------+\n| 1 | 100 |\n| 2 | 100 |\n| 3 | 98 |\n| 4 | 98 |\n+------------+------+\n\nSELECT * FROM store;\n+------------+------+\n| product_id | qty |\n+------------+------+\n| 1 | 5 |\n| 2 | 5 |\n| 3 | 7 |\n| 4 | 7 |\n+------------+------+\n\nFrom MariaDB 10.3.3, LIMIT can be used with GROUP_CONCAT, so, for example,\ngiven the following table:\n\nCREATE TABLE d (dd DATE, cc INT);\n\nINSERT INTO d VALUES (\'2017-01-01\',1);\nINSERT INTO d VALUES (\'2017-01-02\',2);\nINSERT INTO d VALUES (\'2017-01-04\',3);\n\nthe following query:\n\nSELECT SUBSTRING_INDEX(GROUP_CONCAT(CONCAT_WS(\":\",dd,cc) ORDER BY cc\nDESC),\",\",1) FROM d;\n+----------------------------------------------------------------------------+\n| SUBSTRING_INDEX(GROUP_CONCAT(CONCAT_WS(\":\",dd,cc) ORDER BY cc DESC),\",\",1) |\n+----------------------------------------------------------------------------+\n| 2017-01-04:3 |\n+----------------------------------------------------------------------------+\n\ncan be more simply rewritten as:\n\nSELECT GROUP_CONCAT(CONCAT_WS(\":\",dd,cc) ORDER BY cc DESC LIMIT 1) FROM d;\n+-------------------------------------------------------------+\n| GROUP_CONCAT(CONCAT_WS(\":\",dd,cc) ORDER BY cc DESC LIMIT 1) |\n+-------------------------------------------------------------+\n| 2017-01-04:3 |\n+-------------------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/limit/','','https://mariadb.com/kb/en/limit/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (433,27,'ORDER BY','Description\n-----------\n\nUse the ORDER BY clause to order a resultset, such as that are returned from a\nSELECT statement. You can specify just a column or use any expression with\nfunctions. If you are using the GROUP BY clause, you can use grouping\nfunctions in ORDER BY. Ordering is done after grouping.\n\nYou can use multiple ordering expressions, separated by commas. Rows will be\nsorted by the first expression, then by the second expression if they have the\nsame value for the first, and so on.\n\nYou can use the keywords ASC and DESC after each ordering expression to force\nthat ordering to be ascending or descending, respectively. Ordering is\nascending by default.\n\nYou can also use a single integer as the ordering expression. If you use an\ninteger n, the results will be ordered by the nth column in the select\nexpression.\n\nWhen string values are compared, they are compared as if by the STRCMP\nfunction. STRCMP ignores trailing whitespace and may normalize characters and\nignore case, depending on the collation in use.\n\nDuplicated entries in the ORDER BY clause are removed.\n\nORDER BY can also be used to order the activities of a DELETE or UPDATE\nstatement (usually with the LIMIT clause).\n\nMariaDB starting with 10.3.2\n----------------------------\nUntil MariaDB 10.3.1, it was not possible to use ORDER BY (or LIMIT) in a\nmulti-table UPDATE statement. This restriction was lifted in MariaDB 10.3.2.\n\nMariaDB starting with 10.5\n--------------------------\nFrom MariaDB 10.5, MariaDB allows packed sort keys and values of non-sorted\nfields in the sort buffer. This can make filesort temporary files much smaller\nwhen VARCHAR, CHAR or BLOBs are used, notably speeding up some ORDER BY sorts.\n\nExamples\n--------\n\nCREATE TABLE seq (i INT, x VARCHAR(1));\nINSERT INTO seq VALUES (1,\'a\'), (2,\'b\'), (3,\'b\'), (4,\'f\'), (5,\'e\');\n\nSELECT * FROM seq ORDER BY i;\n+------+------+\n| i | x |\n+------+------+\n| 1 | a |\n| 2 | b |\n| 3 | b |\n| 4 | f |\n| 5 | e |\n+------+------+\n\nSELECT * FROM seq ORDER BY i DESC;\n+------+------+\n| i | x |\n+------+------+\n| 5 | e |\n| 4 | f |\n| 3 | b |\n| 2 | b |\n| 1 | a |\n+------+------+\n\nSELECT * FROM seq ORDER BY x,i;\n+------+------+\n| i | x |\n+------+------+\n| 1 | a |\n| 2 | b |\n| 3 | b |\n| 5 | e |\n| 4 | f |\n+------+------+\n\nORDER BY in an UPDATE statement, in conjunction with LIMIT:\n\nUPDATE seq SET x=\'z\' WHERE x=\'b\' ORDER BY i DESC LIMIT 1;\n\nSELECT * FROM seq;\n+------+------+\n| i | x |\n+------+------+\n| 1 | a |\n| 2 | b |\n| 3 | z |\n| 4 | f |\n| 5 | e |\n+------+------+\n\nFrom MariaDB 10.3.2, ORDER BY can be used in a multi-table update:\n\nCREATE TABLE warehouse (product_id INT, qty INT);\nINSERT INTO warehouse VALUES (1,100),(2,100),(3,100),(4,100);\n\nCREATE TABLE store (product_id INT, qty INT);\nINSERT INTO store VALUES (1,5),(2,5),(3,5),(4,5);\n\nUPDATE warehouse,store SET warehouse.qty = warehouse.qty-2, store.qty =\nstore.qty+2 \n WHERE (warehouse.product_id = store.product_id AND store.product_id >= 1)\n ORDER BY store.product_id DESC LIMIT 2;\n\nSELECT * FROM warehouse;\n+------------+------+\n| product_id | qty |\n+------------+------+\n| 1 | 100 |\n| 2 | 100 |\n| 3 | 98 |\n| 4 | 98 |\n+------------+------+\n\nSELECT * FROM store;\n+------------+------+\n| product_id | qty |\n+------------+------+\n| 1 | 5 |\n| 2 | 5 |\n| 3 | 7 |\n| 4 | 7 |\n+------------+------+\n\nURL: https://mariadb.com/kb/en/order-by/','','https://mariadb.com/kb/en/order-by/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (434,27,'GROUP BY','Use the GROUP BY clause in a SELECT statement to group rows together that have\nthe same value in one or more column, or the same computed value using\nexpressions with any functions and operators except grouping functions. When\nyou use a GROUP BY clause, you will get a single result row for each group of\nrows that have the same value for the expression given in GROUP BY.\n\nWhen grouping rows, grouping values are compared as if by the = operator. For\nstring values, the = operator ignores trailing whitespace and may normalize\ncharacters and ignore case, depending on the collation in use.\n\nYou can use any of the grouping functions in your select expression. Their\nvalues will be calculated based on all the rows that have been grouped\ntogether for each result row. If you select a non-grouped column or a value\ncomputed from a non-grouped column, it is undefined which row the returned\nvalue is taken from. This is not permitted if the ONLY_FULL_GROUP_BY SQL_MODE\nis used.\n\nYou can use multiple expressions in the GROUP BY clause, separated by commas.\nRows are grouped together if they match on each of the expressions.\n\nYou can also use a single integer as the grouping expression. If you use an\ninteger n, the results will be grouped by the nth column in the select\nexpression.\n\nThe WHERE clause is applied before the GROUP BY clause. It filters\nnon-aggregated rows before the rows are grouped together. To filter grouped\nrows based on aggregate values, use the HAVING clause. The HAVING clause takes\nany expression and evaluates it as a boolean, just like the WHERE clause. You\ncan use grouping functions in the HAVING clause. As with the select\nexpression, if you reference non-grouped columns in the HAVING clause, the\nbehavior is undefined.\n\nBy default, if a GROUP BY clause is present, the rows in the output will be\nsorted by the expressions used in the GROUP BY. You can also specify ASC or\nDESC (ascending, descending) after those expressions, like in ORDER BY. The\ndefault is ASC.\n\nIf you want the rows to be sorted by another field, you can add an explicit\nORDER BY. If you don\'t want the result to be ordered, you can add ORDER BY\nNULL.\n\nWITH ROLLUP\n-----------\n\nThe WITH ROLLUP modifer adds extra rows to the resultset that represent\nsuper-aggregate summaries. For a full description with examples, see SELECT\nWITH ROLLUP.\n\nGROUP BY Examples\n-----------------\n\nConsider the following table that records how many times each user has played\nand won a game:\n\nCREATE TABLE plays (name VARCHAR(16), plays INT, wins INT);\nINSERT INTO plays VALUES \n (\"John\", 20, 5),\n (\"Robert\", 22, 8),\n (\"Wanda\", 32, 8),\n (\"Susan\", 17, 3);\n\nGet a list of win counts along with a count:\n\nSELECT wins, COUNT(*) FROM plays GROUP BY wins;\n+------+----------+\n| wins | COUNT(*) |\n+------+----------+\n| 3 | 1 |\n| 5 | 1 |\n| 8 | 2 |\n+------+----------+\n3 rows in set (0.00 sec)\n\nThe GROUP BY expression can be a computed value, and can refer back to an\nidentifer specified with AS. Get a list of win averages along with a count:\n\nSELECT (wins / plays) AS winavg, COUNT(*) FROM plays GROUP BY winavg;\n+--------+----------+\n| winavg | COUNT(*) |\n+--------+----------+\n| 0.1765 | 1 |\n| 0.2500 | 2 |\n| 0.3636 | 1 |\n+--------+----------+\n3 rows in set (0.00 sec)\n\nYou can use any grouping function in the select expression. For each win\naverage as above, get a list of the average play count taken to get that\naverage:\n\nSELECT (wins / plays) AS winavg, AVG(plays) FROM plays \n GROUP BY winavg;\n+--------+------------+\n| winavg | AVG(plays) |\n+--------+------------+\n| 0.1765 | 17.0000 |\n| 0.2500 | 26.0000 |\n| 0.3636 | 22.0000 |\n+--------+------------+\n3 rows in set (0.00 sec)\n\nYou can filter on aggregate information using the HAVING clause. The HAVING\nclause is applied after GROUP BY and allows you to filter on aggregate data\nthat is not available to the WHERE clause. Restrict the above example to\nresults that involve an average number of plays over 20:\n\nSELECT (wins / plays) AS winavg, AVG(plays) FROM plays \n GROUP BY winavg HAVING AVG(plays) > 20;\n+--------+------------+\n| winavg | AVG(plays) |\n+--------+------------+\n| 0.2500 | 26.0000 |\n| 0.3636 | 22.0000 |\n+--------+------------+\n2 rows in set (0.00 sec)\n\nURL: https://mariadb.com/kb/en/group-by/','','https://mariadb.com/kb/en/group-by/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (435,27,'WITH','MariaDB starting with 10.2.1\n----------------------------\nCommon Table Expressions were introduced in MariaDB 10.2.1.\n\nSyntax\n------\n\nWITH [RECURSIVE] table_reference [(columns_list)] AS (\n SELECT ...\n)\n[CYCLE cycle_column_list RESTRICT]\nSELECT ...\n\nDescription\n-----------\n\nThe WITH keyword signifies a Common Table Expression (CTE). It allows you to\nrefer to a subquery expression many times in a query, as if having a temporary\ntable that only exists for the duration of a query.\n\nThere are two kinds of CTEs:\n\n* Non-Recursive\n* Recursive (signified by the RECURSIVE keyword, supported since MariaDB\n10.2.2)\n\nYou can use table_reference as any normal table in the external SELECT part.\nYou can also use WITH in subqueries, as well as with EXPLAIN and SELECT.\n\nPoorly-formed recursive CTEs can in theory cause infinite loops. The\nmax_recursive_iterations system variable limits the number of recursions.\n\nCYCLE ... RESTRICT\n------------------\n\nMariaDB starting with 10.5.2\n----------------------------\nThe CYCLE clause enables CTE cycle detection, avoiding excessive or infinite\nloops, MariaDB supports a relaxed, non-standard grammar.\n\nThe SQL Standard permits a CYCLE clause, as follows:\n\nWITH RECURSIVE ... (\n ...\n)\nCYCLE <cycle column list>\nSET <cycle mark column> TO <cycle mark value> DEFAULT <non-cycle mark value>\nUSING <path column>\n\nwhere all clauses are mandatory.\n\nMariaDB does not support this, but from 10.5.2 permits a non-standard relaxed\ngrammar, as follows:\n\nWITH RECURSIVE ... (\n ...\n)\nCYCLE <cycle column list> RESTRICT\n\nWith the use of CYCLE ... RESTRICT it makes no difference whether the CTE uses\nUNION ALL or UNION DISTINCT anymore. UNION ALL means \"all rows, but without\ncycles\", which is exactly what the CYCLE clause enables. And UNION DISTINCT\nmeans all rows should be different, which, again, is what will happen — as\nuniqueness is enforced over a subset of columns, complete rows will\nautomatically all be different.\n\nExamples\n--------\n\nBelow is an example with the WITH at the top level:\n\nWITH t AS (SELECT a FROM t1 WHERE b >= \'c\') \n SELECT * FROM t2, t WHERE t2.c = t.a;\n\nThe example below uses WITH in a subquery:\n\nSELECT t1.a, t1.b FROM t1, t2\n WHERE t1.a > t2.c\n AND t2.c IN(WITH t AS (SELECT * FROM t1 WHERE t1.a < 5)\n SELECT t2.c FROM t2, t WHERE t2.c = t.a);\n\nBelow is an example of a Recursive CTE:\n\nWITH RECURSIVE ancestors AS \n ( SELECT * FROM folks\n WHERE name=\"Alex\"\n UNION\n SELECT f.*\n FROM folks AS f, ancestors AS a\n WHERE f.id = a.father OR f.id = a.mother )\nSELECT * FROM ancestors;\n\nTake the following structure, and data,\n\nCREATE TABLE t1 (from_ int, to_ int);\nINSERT INTO t1 VALUES (1,2), (1,100), (2,3), (3,4), (4,1);\nSELECT * FROM t1;\n+-------+------+\n| from_ | to_ |\n+-------+------+\n| 1 | 2 |\n| 1 | 100 |\n| 2 | 3 |\n| 3 | 4 |\n| 4 | 1 |\n+-------+------+\n\nGiven the above, the following query would theoretically result in an infinite\nloop due to the last record in t1 (note that max_recursive_iterations is set\nto 10 for the purposes of this example, to avoid the excessive number of\ncycles):\n\nSET max_recursive_iterations=10;\n\nWITH RECURSIVE cte (depth, from_, to_) AS ( \n SELECT 0,1,1 UNION DISTINCT SELECT depth+1, t1.from_, t1.to_\n FROM t1, cte WHERE t1.from_ = cte.to_\n) \nSELECT * FROM cte;\n+-------+-------+------+\n| depth | from_ | to_ |\n+-------+-------+------+\n| 0 | 1 | 1 |\n| 1 | 1 | 2 |\n| 1 | 1 | 100 |\n| 2 | 2 | 3 |\n| 3 | 3 | 4 |\n| 4 | 4 | 1 |\n| 5 | 1 | 2 |\n| 5 | 1 | 100 |\n| 6 | 2 | 3 |\n| 7 | 3 | 4 |\n| 8 | 4 | 1 |\n| 9 | 1 | 2 |\n| 9 | 1 | 100 |\n| 10 | 2 | 3 |\n+-------+-------+------+\n\nHowever, the CYCLE ... RESTRICT clause (from MariaDB 10.5.2) can overcome this:\n\nWITH RECURSIVE cte (depth, from_, to_) AS ( \n SELECT 0,1,1 UNION SELECT depth+1, t1.from_, t1.to_\n FROM t1, cte WHERE t1.from_ = cte.to_\n) \nCYCLE from_, to_ RESTRICT \nSELECT * FROM cte;\n+-------+-------+------+\n| depth | from_ | to_ |\n+-------+-------+------+\n| 0 | 1 | 1 |\n| 1 | 1 | 2 |\n| 1 | 1 | 100 |\n| 2 | 2 | 3 |\n| 3 | 3 | 4 |\n| 4 | 4 | 1 |\n+-------+-------+------+\n\nURL: https://mariadb.com/kb/en/with/','','https://mariadb.com/kb/en/with/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (436,27,'Non-Recursive Common Table Expressions Overview','Common Table Expressions (CTEs) are a standard SQL feature, and are\nessentially temporary named result sets. There are two kinds of CTEs:\nNon-Recursive, which this article covers; and Recursive.\n\nMariaDB starting with 10.2.1\n----------------------------\nCommon table expressions were introduced in MariaDB 10.2.1.\n\nNon-Recursive CTEs\n------------------\n\nThe WITH keyword signifies a CTE. It is given a name, followed by a body (the\nmain query) as follows:\n\nCTEs are similar to derived tables. For example\n\nWITH engineers AS \n ( SELECT * FROM employees\n WHERE dept = \'Engineering\' )\n\nSELECT * FROM engineers\nWHERE ...\n\nSELECT * FROM\n ( SELECT * FROM employees\n WHERE dept = \'Engineering\' ) AS engineers\nWHERE\n...\n\nA non-recursive CTE is basically a query-local VIEW. There are several\nadvantages and caveats to them. The syntax is more readable than nested FROM\n(SELECT ...). A CTE can refer to another and it can be referenced from\nmultiple places.\n\nA CTE referencing Another CTE\n-----------------------------\n\nUsing this format makes for a more readable SQL than a nested FROM(SELECT ...)\nclause. Below is an example of this:\n\nWITH engineers AS (\nSELECT * FROM employees\nWHERE dept IN(\'Development\',\'Support\') ),\neu_engineers AS ( SELECT * FROM engineers WHERE country IN(\'NL\',...) )\nSELECT\n...\nFROM eu_engineers;\n\nMultiple Uses of a CTE\n----------------------\n\nThis can be an \'anti-self join\', for example:\n\nWITH engineers AS (\nSELECT * FROM employees\nWHERE dept IN(\'Development\',\'Support\') )\n\nSELECT * FROM engineers E1\nWHERE NOT EXISTS\n (SELECT 1 FROM engineers E2\n WHERE E2.country=E1.country\n AND E2.name <> E1.name );\n\nOr, for year-over-year comparisons, for example:\n\nWITH sales_product_year AS (\nSELECT product, YEAR(ship_date) AS year,\nSUM(price) AS total_amt\nFROM item_sales\nGROUP BY product, year )\n\nSELECT *\nFROM sales_product_year CUR,\nsales_product_year PREV,\nWHERE CUR.product=PREV.product \nAND CUR.year=PREV.year + 1 \nAND CUR.total_amt > PREV.total_amt\n\nAnother use is to compare individuals against their group. Below is an example\nof how this might be executed:\n\nWITH sales_product_year AS (\nSELECT product,\nYEAR(ship_date) AS year,\nSUM(price) AS total_amt\nFROM item_sales\nGROUP BY product, year\n)\n\nSELECT * \nFROM sales_product_year S1\nWHERE\ntotal_amt > \n (SELECT 0.1 * SUM(total_amt)\n FROM sales_product_year S2\n WHERE S2.year = S1.year)\n\nURL: https://mariadb.com/kb/en/non-recursive-common-table-expressions-overview/','','https://mariadb.com/kb/en/non-recursive-common-table-expressions-overview/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (437,27,'Recursive Common Table Expressions Overview','MariaDB starting with 10.2.2\n----------------------------\nRecursive Common Table Expressions have been supported since MariaDB 10.2.2.\n\nCommon Table Expressions (CTEs) are a standard SQL feature, and are\nessentially temporary named result sets. CTEs first appeared in the SQL\nstandard in 1999, and the first implementations began appearing in 2007.\n\nThere are two kinds of CTEs:\n\n* Non-recursive\n* Recursive, which this article covers.\n\nSQL is generally poor at recursive structures.\n\nCTEs permit a query to reference itself. A recursive CTE will repeatedly\nexecute subsets of the data until it obtains the complete result set. This\nmakes it particularly useful for handing hierarchical or tree-structured data.\nmax_recursive_iterations avoids infinite loops.\n\nSyntax example\n--------------\n\nWITH RECURSIVE signifies a recursive CTE. It is given a name, followed by a\nbody (the main query) as follows:\n\nComputation\n-----------\n\nGiven the following structure:\n\nFirst execute the anchor part of the query:\n\nNext, execute the recursive part of the query:\n\nSummary so far\n--------------\n\nwith recursive R as (\n select anchor_data\n union [all]\n select recursive_part\n from R, ...\n)\nselect ...\n\n* Compute anchor_data\n* Compute recursive_part to get the new data\n* if (new data is non-empty) goto 2;\n\nCAST to avoid truncating data\n-----------------------------\n\nAs currently implemented by MariaDB and by the SQL Standard, data may be\ntruncated if not correctly cast. It is necessary to CAST the column to the\ncorrect width if the CTE\'s recursive part produces wider values for a column\nthan the CTE\'s nonrecursive part. Some other DBMS give an error in this\nsituation, and MariaDB\'s behavior may change in future - see MDEV-12325. See\nthe examples below.\n\nExamples\n--------\n\nTransitive closure - determining bus destinations\n-------------------------------------------------\n\nSample data:\n\nCREATE TABLE bus_routes (origin varchar(50), dst varchar(50));\nINSERT INTO bus_routes VALUES \n (\'New York\', \'Boston\'),\n (\'Boston\', \'New York\'),\n (\'New York\', \'Washington\'),\n (\'Washington\', \'Boston\'),\n (\'Washington\', \'Raleigh\');\n\nNow, we want to return the bus destinations with New York as the origin:\n\nWITH RECURSIVE bus_dst as ( \n SELECT origin as dst FROM bus_routes WHERE origin=\'New York\'\n UNION\n SELECT bus_routes.dst FROM bus_routes JOIN bus_dst ON bus_dst.dst=\nbus_routes.origin \n) \nSELECT * FROM bus_dst;\n+------------+\n| dst |\n+------------+\n| New York |\n| Boston |\n| Washington |\n| Raleigh |\n+------------+\n\nThe above example is computed as follows:\n\nFirst, the anchor data is calculated:\n\n* Starting from New York\n* Boston and Washington are added\n\nNext, the recursive part:\n\n* Starting from Boston and then Washington\n* Raleigh is added\n* UNION excludes nodes that are already present.\n\nComputing paths - determining bus routes\n----------------------------------------\n\nThis time, we are trying to get bus routes such as \"New York -> Washington ->\nRaleigh\".\n\nUsing the same sample data as the previous example:\n\nWITH RECURSIVE paths (cur_path, cur_dest) AS (\n SELECT origin, origin FROM bus_routes WHERE origin=\'New York\'\n UNION\n SELECT CONCAT(paths.cur_path, \',\', bus_routes.dst), bus_routes.dst\n FROM paths\n JOIN bus_routes\n ON paths.cur_dest = bus_routes.origin AND\n NOT FIND_IN_SET(bus_routes.dst, paths.cur_path)\n) \nSELECT * FROM paths;\n+-----------------------------+------------+\n| cur_path | cur_dest |\n+-----------------------------+------------+\n| New York | New York |\n| New York,Boston | Boston |\n| New York,Washington | Washington |\n| New York,Washington,Boston | Boston |\n| New York,Washington,Raleigh | Raleigh |\n+-----------------------------+------------+\n\nCAST to avoid data truncation\n-----------------------------\n\nIn the following example, data is truncated because the results are not\nspecifically cast to a wide enough type:\n\nWITH RECURSIVE tbl AS (\n SELECT NULL AS col\n UNION\n SELECT \"THIS NEVER SHOWS UP\" AS col FROM tbl\n)\nSELECT col FROM tbl\n+------+\n| col |\n+------+\n| NULL |\n| |\n+------+\n\nExplicitly use CAST to overcome this:\n\nWITH RECURSIVE tbl AS (\n SELECT CAST(NULL AS CHAR(50)) AS col\n UNION SELECT \"THIS NEVER SHOWS UP\" AS col FROM tbl\n) \nSELECT * FROM tbl;\n+---------------------+\n| col |\n+---------------------+\n| NULL |\n| THIS NEVER SHOWS UP |\n+---------------------+\n\nURL: https://mariadb.com/kb/en/recursive-common-table-expressions-overview/','','https://mariadb.com/kb/en/recursive-common-table-expressions-overview/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (438,27,'SELECT WITH ROLLUP','Syntax\n------\n\nSee SELECT for the full syntax.\n\nDescription\n-----------\n\nThe WITH ROLLUP modifier adds extra rows to the resultset that represent\nsuper-aggregate summaries. The super-aggregated column is represented by a\nNULL value. Multiple aggregates over different columns will be added if there\nare multiple GROUP BY columns.\n\nThe LIMIT clause can be used at the same time, and is applied after the WITH\nROLLUP rows have been added.\n\nWITH ROLLUP cannot be used with ORDER BY. Some sorting is still possible by\nusing ASC or DESC clauses with the GROUP BY column, although the\nsuper-aggregate rows will always be added last.\n\nExamples\n--------\n\nThese examples use the following sample table\n\nCREATE TABLE booksales ( \n country VARCHAR(35), genre ENUM(\'fiction\',\'non-fiction\'), year YEAR, sales\nINT);\n\nINSERT INTO booksales VALUES\n (\'Senegal\',\'fiction\',2014,12234), (\'Senegal\',\'fiction\',2015,15647),\n (\'Senegal\',\'non-fiction\',2014,64980), (\'Senegal\',\'non-fiction\',2015,78901),\n (\'Paraguay\',\'fiction\',2014,87970), (\'Paraguay\',\'fiction\',2015,76940),\n (\'Paraguay\',\'non-fiction\',2014,8760), (\'Paraguay\',\'non-fiction\',2015,9030);\n\nThe addition of the WITH ROLLUP modifier in this example adds an extra row\nthat aggregates both years:\n\nSELECT year, SUM(sales) FROM booksales GROUP BY year;\n+------+------------+\n| year | SUM(sales) |\n+------+------------+\n| 2014 | 173944 |\n| 2015 | 180518 |\n+------+------------+\n2 rows in set (0.08 sec)\n\nSELECT year, SUM(sales) FROM booksales GROUP BY year WITH ROLLUP;\n+------+------------+\n| year | SUM(sales) |\n+------+------------+\n| 2014 | 173944 |\n| 2015 | 180518 |\n| NULL | 354462 |\n+------+------------+\n\nIn the following example, each time the genre, the year or the country change,\nanother super-aggregate row is added:\n\nSELECT country, year, genre, SUM(sales) \n FROM booksales GROUP BY country, year, genre;\n+----------+------+-------------+------------+\n| country | year | genre | SUM(sales) |\n+----------+------+-------------+------------+\n| Paraguay | 2014 | fiction | 87970 |\n| Paraguay | 2014 | non-fiction | 8760 |\n| Paraguay | 2015 | fiction | 76940 |\n| Paraguay | 2015 | non-fiction | 9030 |\n| Senegal | 2014 | fiction | 12234 |\n| Senegal | 2014 | non-fiction | 64980 |\n| Senegal | 2015 | fiction | 15647 |\n| Senegal | 2015 | non-fiction | 78901 |\n+----------+------+-------------+------------+\n\nSELECT country, year, genre, SUM(sales) \n FROM booksales GROUP BY country, year, genre WITH ROLLUP;\n+----------+------+-------------+------------+\n| country | year | genre | SUM(sales) |\n+----------+------+-------------+------------+\n| Paraguay | 2014 | fiction | 87970 |\n| Paraguay | 2014 | non-fiction | 8760 |\n| Paraguay | 2014 | NULL | 96730 |\n| Paraguay | 2015 | fiction | 76940 |\n| Paraguay | 2015 | non-fiction | 9030 |\n| Paraguay | 2015 | NULL | 85970 |\n| Paraguay | NULL | NULL | 182700 |\n| Senegal | 2014 | fiction | 12234 |\n| Senegal | 2014 | non-fiction | 64980 |\n| Senegal | 2014 | NULL | 77214 |\n| Senegal | 2015 | fiction | 15647 |\n| Senegal | 2015 | non-fiction | 78901 |\n| Senegal | 2015 | NULL | 94548 |\n| Senegal | NULL | NULL | 171762 |\n| NULL | NULL | NULL | 354462 |\n+----------+------+-------------+------------+\n\nThe LIMIT clause, applied after WITH ROLLUP:\n\nSELECT country, year, genre, SUM(sales) \n FROM booksales GROUP BY country, year, genre WITH ROLLUP LIMIT 4;\n+----------+------+-------------+------------+\n| country | year | genre | SUM(sales) |\n+----------+------+-------------+------------+\n| Paraguay | 2014 | fiction | 87970 |\n| Paraguay | 2014 | non-fiction | 8760 |\n| Paraguay | 2014 | NULL | 96730 |\n| Paraguay | 2015 | fiction | 76940 |\n+----------+------+-------------+------------+\n\nSorting by year descending:\n\nSELECT country, year, genre, SUM(sales) \n FROM booksales GROUP BY country, year DESC, genre WITH ROLLUP;\n+----------+------+-------------+------------+\n| country | year | genre | SUM(sales) |\n+----------+------+-------------+------------+\n| Paraguay | 2015 | fiction | 76940 |\n| Paraguay | 2015 | non-fiction | 9030 |\n| Paraguay | 2015 | NULL | 85970 |\n| Paraguay | 2014 | fiction | 87970 |\n| Paraguay | 2014 | non-fiction | 8760 |\n| Paraguay | 2014 | NULL | 96730 |\n| Paraguay | NULL | NULL | 182700 |\n| Senegal | 2015 | fiction | 15647 |\n| Senegal | 2015 | non-fiction | 78901 |\n| Senegal | 2015 | NULL | 94548 |\n| Senegal | 2014 | fiction | 12234 |\n| Senegal | 2014 | non-fiction | 64980 |\n| Senegal | 2014 | NULL | 77214 |\n| Senegal | NULL | NULL | 171762 |\n| NULL | NULL | NULL | 354462 |\n+----------+------+-------------+------------+\n\nURL: https://mariadb.com/kb/en/select-with-rollup/','','https://mariadb.com/kb/en/select-with-rollup/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (439,27,'SELECT INTO OUTFILE','Syntax\n------\n\nSELECT ... INTO OUTFILE \'file_name\'\n [CHARACTER SET charset_name]\n [export_options]\n\nexport_options:\n [{FIELDS | COLUMNS}\n [TERMINATED BY \'string\']\n [[OPTIONALLY] ENCLOSED BY \'char\']\n [ESCAPED BY \'char\']\n ]\n [LINES\n [STARTING BY \'string\']\n [TERMINATED BY \'string\']\n ]\n\nDescription\n-----------\n\nSELECT INTO OUTFILE writes the resulting rows to a file, and allows the use of\ncolumn and row terminators to specify a particular output format. The default\nis to terminate fields with tabs (\\t) and lines with newlines (\\n).\n\nThe file must not exist. It cannot be overwritten. A user needs the FILE\nprivilege to run this statement. Also, MariaDB needs permission to write files\nin the specified location. If the secure_file_priv system variable is set to a\nnon-empty directory name, the file can only be written to that directory.\n\nThe LOAD DATA INFILE statement complements SELECT INTO OUTFILE.\n\nCharacter-sets\n--------------\n\nThe CHARACTER SET clause specifies the character set in which the results are\nto be written. Without the clause, no conversion takes place (the binary\ncharacter set). In this case, if there are multiple character sets, the output\nwill contain these too, and may not easily be able to be reloaded.\n\nIn cases where you have two servers using different character-sets, using\nSELECT INTO OUTFILE to transfer data from one to the other can have unexpected\nresults. To ensure that MariaDB correctly interprets the escape sequences, use\nthe CHARACTER SET clause on both the SELECT INTO OUTFILE statement and the\nsubsequent LOAD DATA INFILE statement.\n\nExample\n-------\n\nThe following example produces a file in the CSV format:\n\nSELECT customer_id, firstname, surname from customer\n INTO OUTFILE \'/exportdata/customers.txt\'\n FIELDS TERMINATED BY \',\' OPTIONALLY ENCLOSED BY \'\"\'\n LINES TERMINATED BY \'\\n\';\n\nThe following ANSI syntax is also supported for simple SELECT without UNION\n\nSELECT customer_id, firstname, surname INTO OUTFILE \'/exportdata/customers.txt\'\n FIELDS TERMINATED BY \',\' OPTIONALLY ENCLOSED BY \'\"\'\n LINES TERMINATED BY \'\\n\'\n FROM customers;\n\nIf you want to use the ANSI syntax with UNION or similar construct you have to\nuse the syntax:\n\nSELECT * INTO OUTFILE \"/tmp/skr3\" FROM (SELECT * FROM t1 UNION SELECT * FROM\nt1);\n\nURL: https://mariadb.com/kb/en/select-into-outfile/','','https://mariadb.com/kb/en/select-into-outfile/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (440,27,'SELECT INTO DUMPFILE','Syntax\n------\n\nSELECT ... INTO DUMPFILE \'file_path\'\n\nDescription\n-----------\n\nSELECT ... INTO DUMPFILE is a SELECT clause which writes the resultset into a\nsingle unformatted row, without any separators, in a file. The results will\nnot be returned to the client.\n\nfile_path can be an absolute path, or a relative path starting from the data\ndirectory. It can only be specified as a string literal, not as a variable.\nHowever, the statement can be dynamically composed and executed as a prepared\nstatement to work around this limitation.\n\nThis statement is binary-safe and so is particularly useful for writing BLOB\nvalues to file. It can be used, for example, to copy an image or an audio\ndocument from the database to a file. SELECT ... INTO FILE can be used to save\na text file.\n\nThe file must not exist. It cannot be overwritten. A user needs the FILE\nprivilege to run this statement. Also, MariaDB needs permission to write files\nin the specified location. If the secure_file_priv system variable is set to a\nnon-empty directory name, the file can only be written to that directory.\n\nSince MariaDB 5.1, the character_set_filesystem system variable has controlled\ninterpretation of file names that are given as literal strings.\n\nExample\n-------\n\nSELECT _utf8\'Hello world!\' INTO DUMPFILE \'/tmp/world\';\n\nSELECT LOAD_FILE(\'/tmp/world\') AS world;\n+--------------+\n| world |\n+--------------+\n| Hello world! |\n+--------------+\n\nURL: https://mariadb.com/kb/en/select-into-dumpfile/','','https://mariadb.com/kb/en/select-into-dumpfile/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (441,27,'FOR UPDATE','InnoDB supports row-level locking. Selected rows can be locked using LOCK IN\nSHARE MODE or FOR UPDATE. In both cases, a lock is acquired on the rows read\nby the query, and it will be released when the current transaction is\ncommitted.\n\nThe FOR UPDATE clause of SELECT applies only when autocommit is set to 0 or\nthe SELECT is enclosed in a transaction. A lock is acquired on the rows, and\nother transactions are prevented from writing the rows, acquire locks, and\nfrom reading them (unless their isolation level is READ UNCOMMITTED).\n\nIf autocommit is set to 1, the LOCK IN SHARE MODE and FOR UPDATE clauses have\nno effect.\n\nIf the isolation level is set to SERIALIZABLE, all plain SELECT statements are\nconverted to SELECT ... LOCK IN SHARE MODE.\n\nExample\n-------\n\nSELECT * FROM trans WHERE period=2001 FOR UPDATE;\n\nURL: https://mariadb.com/kb/en/for-update/','','https://mariadb.com/kb/en/for-update/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (442,27,'LOCK IN SHARE MODE','InnoDB supports row-level locking. Selected rows can be locked using LOCK IN\nSHARE MODE or FOR UPDATE. In both cases, a lock is acquired on the rows read\nby the query, and it will be released when the current transaction is\ncommitted.\n\nWhen LOCK IN SHARE MODE is specified in a SELECT statement, MariaDB will wait\nuntil all transactions that have modified the rows are committed. Then, a\nwrite lock is acquired. All transactions can read the rows, but if they want\nto modify them, they have to wait until your transaction is committed.\n\nIf autocommit is set to 1, the LOCK IN SHARE MODE and FOR UPDATE clauses have\nno effect.\n\nURL: https://mariadb.com/kb/en/lock-in-share-mode/','','https://mariadb.com/kb/en/lock-in-share-mode/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (443,27,'Optimizer Hints','Optimizer hints\n---------------\n\nThere are some options available in SELECT to affect the execution plan. These\nare known as optimizer hints.\n\nHIGH PRIORITY\n-------------\n\nHIGH_PRIORITY gives the statement a higher priority. If the table is locked,\nhigh priority SELECTs will be executed as soon as the lock is released, even\nif other statements are queued. HIGH_PRIORITY applies only if the storage\nengine only supports table-level locking (MyISAM, MEMORY, MERGE). See\nHIGH_PRIORITY and LOW_PRIORITY clauses for details.\n\nSQL_CACHE / SQL_NO_CACHE\n------------------------\n\nIf the query_cache_type system variable is set to 2 or DEMAND, and the current\nstatement is cacheable, SQL_CACHE causes the query to be cached and\nSQL_NO_CACHE causes the query not to be cached. For UNIONs, SQL_CACHE or\nSQL_NO_CACHE should be specified for the first query. See also The Query Cache\nfor more detail and a list of the types of statements that aren\'t cacheable.\n\nSQL_BUFFER_RESULT\n-----------------\n\nSQL_BUFFER_RESULT forces the optimizer to use a temporary table to process the\nresult. This is useful to free locks as soon as possible.\n\nSQL_SMALL_RESULT / SQL_BIG_RESULT\n---------------------------------\n\nSQL_SMALL_RESULT and SQL_BIG_RESULT tell the optimizer whether the result is\nvery big or not. Usually, GROUP BY and DISTINCT operations are performed using\na temporary table. Only if the result is very big, using a temporary table is\nnot convenient. The optimizer automatically knows if the result is too big,\nbut you can force the optimizer to use a temporary table with\nSQL_SMALL_RESULT, or avoid the temporary table using SQL_BIG_RESULT.\n\nSTRAIGHT_JOIN\n-------------\n\nSTRAIGHT_JOIN applies to the JOIN queries, and tells the optimizer that the\ntables must be read in the order they appear in the SELECT. For const and\nsystem table this options is sometimes ignored.\n\nSQL_CALC_FOUND_ROWS\n-------------------\n\nSQL_CALC_FOUND_ROWS is only applied when using the LIMIT clause. If this\noption is used, MariaDB will count how many rows would match the query,\nwithout the LIMIT clause. That number can be retrieved in the next query,\nusing FOUND_ROWS().\n\nUSE/FORCE/IGNORE INDEX\n----------------------\n\nUSE INDEX, FORCE INDEX and IGNORE INDEX constrain the query planning to a\nspecific index.\n\nFor further information about some of these options, see How to force query\nplans.\n\nURL: https://mariadb.com/kb/en/optimizer-hints/','','https://mariadb.com/kb/en/optimizer-hints/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (444,27,'PROCEDURE','The PROCEDURE clause of SELECT passes the whole result set to a Procedure\nwhich will process it. These Procedures are not Stored Procedures, and can\nonly be written in the C language, so it is necessary to recompile the server.\n\nCurrently, the only available procedure is ANALYSE, which examines the\nresultset and suggests the optimal datatypes for each column. It is defined in\nthe sql/sql_analyse.cc file, and can be used as an example to create more\nProcedures.\n\nThis clause cannot be used in a view\'s definition.\n\nURL: https://mariadb.com/kb/en/procedure/','','https://mariadb.com/kb/en/procedure/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (445,27,'DUAL','Description\n-----------\n\nYou are allowed to specify DUAL as a dummy table name in situations where no\ntables are referenced, such as the following SELECT statement:\n\nSELECT 1 + 1 FROM DUAL;\n+-------+\n| 1 + 1 |\n+-------+\n| 2 |\n+-------+\n\nDUAL is purely for the convenience of people who require that all SELECT\nstatements should have FROM and possibly other clauses. MariaDB ignores the\nclauses. MariaDB does not require FROM DUAL if no tables are referenced.\n\nFROM DUAL could be used when you only SELECT computed values, but require a\nWHERE clause, perhaps to test that a script correctly handles empty resultsets:\n\nSELECT 1 FROM DUAL WHERE FALSE;\nEmpty set (0.00 sec)\n\nURL: https://mariadb.com/kb/en/dual/','','https://mariadb.com/kb/en/dual/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (446,27,'SELECT ... OFFSET ... FETCH','MariaDB starting with 10.6.0\n----------------------------\nSELECT ... OFFSET ... FETCH was introduced in MariaDB 10.6.\n\nSyntax\n------\n\nOFFSET start { ROW | ROWS }\nFETCH { FIRST | NEXT } [ count ] { ROW | ROWS } { ONLY | WITH TIES }\n\nDescription\n-----------\n\nThe OFFSET clause allows one to return only those elements of a resultset that\ncome after a specified offset. The FETCH clause specifies the number of rows\nto return, while ONLY or WITH TIES specifies whether or not to also return any\nfurther results that tie for last place according to the ordered resultset.\n\nEither the singular ROW or the plural ROWS can be used after the OFFSET and\nFETCH clauses; the choice has no impact on the results.\n\nIn the case of WITH TIES, an ORDER BY clause is required, otherwise an ERROR\nwill be returned.\n\nSELECT i FROM t1 FETCH FIRST 2 ROWS WITH TIES;\nERROR 4180 (HY000): FETCH ... WITH TIES requires ORDER BY clause to be present\n\nExamples\n--------\n\nGiven a table with 6 rows:\n\nCREATE OR REPLACE TABLE t1 (i INT);\nINSERT INTO t1 VALUES (1),(2),(3),(4), (4), (5);\nSELECT i FROM t1 ORDER BY i ASC;\n+------+\n| i |\n+------+\n| 1 |\n| 2 |\n| 3 |\n| 4 |\n| 4 |\n| 5 |\n+------+\n\nOFFSET 2 allows one to skip the first two results.\n\nSELECT i FROM t1 ORDER BY i ASC OFFSET 2 ROWS;\n+------+\n| i |\n+------+\n| 3 |\n| 4 |\n| 4 |\n| 5 |\n+------+\n\nFETCH FIRST 3 ROWS ONLY limits the results to three rows only\n\nSELECT i FROM t1 ORDER BY i ASC OFFSET 1 ROWS FETCH FIRST 3 ROWS ONLY;\n+------+\n| i |\n+------+\n| 2 |\n| 3 |\n| 4 |\n+------+\n\nThe same outcome can also be achieved with the LIMIT clause:\n\nSELECT i FROM t1 ORDER BY i ASC LIMIT 3 OFFSET 1;\n+------+\n| i |\n+------+\n| 2 |\n| 3 |\n| 4 |\n+------+\n\nWITH TIES ensures the tied result 4 is also returned.\n\nSELECT i FROM t1 ORDER BY i ASC OFFSET 1 ROWS FETCH FIRST 3 ROWS WITH TIES;\n+------+\n| i |\n+------+\n| 2 |\n| 3 |\n| 4 |\n| 4 |\n+------+\n\nURL: https://mariadb.com/kb/en/select-offset-fetch/','','https://mariadb.com/kb/en/select-offset-fetch/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (447,27,'INSERT','Syntax\n------\n\nINSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]\n [INTO] tbl_name [PARTITION (partition_list)] [(col,...)]\n {VALUES | VALUE} ({expr | DEFAULT},...),(...),...\n [ ON DUPLICATE KEY UPDATE\n col=expr\n [, col=expr] ... ] [RETURNING select_expr\n [, select_expr ...]]\n\nOr:\n\nINSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]\n [INTO] tbl_name [PARTITION (partition_list)]\n SET col={expr | DEFAULT}, ...\n [ ON DUPLICATE KEY UPDATE\n col=expr\n [, col=expr] ... ] [RETURNING select_expr\n [, select_expr ...]]\n\nOr:\n\nINSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]\n [INTO] tbl_name [PARTITION (partition_list)] [(col,...)]\n SELECT ...\n [ ON DUPLICATE KEY UPDATE\n col=expr\n [, col=expr] ... ] [RETURNING select_expr\n [, select_expr ...]]\n\nThe INSERT statement is used to insert new rows into an existing table. The\nINSERT ... VALUES and INSERT ... SET forms of the statement insert rows based\non explicitly specified values. The INSERT ... SELECT form inserts rows\nselected from another table or tables. INSERT ... SELECT is discussed further\nin the INSERT ... SELECT article.\n\nThe table name can be specified in the form db_name.tbl_name or, if a default\ndatabase is selected, in the form tbl_name (see Identifier Qualifiers). This\nallows to use INSERT ... SELECT to copy rows between different databases.\n\nThe PARTITION clause can be used in both the INSERT and the SELECT part. See\nPartition Pruning and Selection for details.\n\nMariaDB starting with 10.5\n--------------------------\nThe RETURNING clause was introduced in MariaDB 10.5.\n\nThe columns list is optional. It specifies which values are explicitly\ninserted, and in which order. If this clause is not specified, all values must\nbe explicitly specified, in the same order they are listed in the table\ndefinition.\n\nThe list of value follow the VALUES or VALUE keyword (which are\ninterchangeable, regardless how much values you want to insert), and is\nwrapped by parenthesis. The values must be listed in the same order as the\ncolumns list. It is possible to specify more than one list to insert more than\none rows with a single statement. If many rows are inserted, this is a speed\noptimization.\n\nFor one-row statements, the SET clause may be more simple, because you don\'t\nneed to remember the columns order. All values are specified in the form col =\nexpr.\n\nValues can also be specified in the form of a SQL expression or subquery.\nHowever, the subquery cannot access the same table that is named in the INTO\nclause.\n\nIf you use the LOW_PRIORITY keyword, execution of the INSERT is delayed until\nno other clients are reading from the table. If you use the HIGH_PRIORITY\nkeyword, the statement has the same priority as SELECTs. This affects only\nstorage engines that use only table-level locking (MyISAM, MEMORY, MERGE).\nHowever, if one of these keywords is specified, concurrent inserts cannot be\nused. See HIGH_PRIORITY and LOW_PRIORITY clauses for details.\n\nINSERT DELAYED\n--------------\n\nFor more details on the DELAYED option, see INSERT DELAYED.\n\nHIGH PRIORITY and LOW PRIORITY\n------------------------------\n\nSee HIGH_PRIORITY and LOW_PRIORITY.\n\nDefaults and Duplicate Values\n-----------------------------\n\nSee INSERT - Default & Duplicate Values for details..\n\nINSERT IGNORE\n-------------\n\nSee INSERT IGNORE.\n\nINSERT ON DUPLICATE KEY UPDATE\n------------------------------\n\nSee INSERT ON DUPLICATE KEY UPDATE.\n\nExamples\n--------\n\nSpecifying the column names:\n\nINSERT INTO person (first_name, last_name) VALUES (\'John\', \'Doe\');\n\nInserting more than 1 row at a time:\n\nINSERT INTO tbl_name VALUES (1, \"row 1\"), (2, \"row 2\");\n\nUsing the SET clause:\n\nINSERT INTO person SET first_name = \'John\', last_name = \'Doe\';\n\nSELECTing from another table:\n\nINSERT INTO contractor SELECT * FROM person WHERE status = \'c\';\n\nSee INSERT ON DUPLICATE KEY UPDATE and INSERT IGNORE for further examples.\n\nINSERT ... RETURNING\n--------------------\n\nINSERT ... RETURNING returns a resultset of the inserted rows.\n\nThis returns the listed columns for all the rows that are inserted, or\nalternatively, the specified SELECT expression. Any SQL expressions which can\nbe calculated can be used in the select expression for the RETURNING clause,\nincluding virtual columns and aliases, expressions which use various operators\nsuch as bitwise, logical and arithmetic operators, string functions, date-time\nfunctions, numeric functions, control flow functions, secondary functions and\nstored functions. Along with this, statements which have subqueries and\nprepared statements can also be used.\n\nExamples\n--------\n\nSimple INSERT statement\n\nINSERT INTO t2 VALUES (1,\'Dog\'),(2,\'Lion\'),(3,\'Tiger\'),(4,\'Leopard\') \nRETURNING id2,id2+id2,id2&id2,id2||id2;\n+-----+---------+---------+----------+\n| id2 | id2+id2 | id2&id2 | id2||id2 |\n+-----+---------+---------+----------+\n| 1 | 2 | 1 | 1 |\n| 2 | 4 | 2 | 1 |\n| 3 | 6 | 3 | 1 |\n| 4 | 8 | 4 | 1 |\n+-----+---------+---------+----------+\n\nUsing stored functions in RETURNING\n\nDELIMITER |\nCREATE FUNCTION f(arg INT) RETURNS INT\n BEGIN\n RETURN (SELECT arg+arg);\n END|\n\nDELIMITER ;\n\nPREPARE stmt FROM \"INSERT INTO t1 SET id1=1, animal1=\'Bear\' RETURNING f(id1),\nUPPER(animal1)\";\n\nEXECUTE stmt;\n+---------+----------------+\n| f(id1) | UPPER(animal1) |\n+---------+----------------+\n| 2 | BEAR |\n+---------+----------------+\n\nSubqueries in the RETURNING clause that return more than one row or column\ncannot be used.\n\nAggregate functions cannot be used in the RETURNING clause. Since aggregate\nfunctions work on a set of values, and if the purpose is to get the row count,\nROW_COUNT() with SELECT can be used or it can be used in\nINSERT...SELECT...RETURNING if the table in the RETURNING clause is not the\nsame as the INSERT table.\n\nURL: https://mariadb.com/kb/en/insert/','','https://mariadb.com/kb/en/insert/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (448,27,'INSERT DELAYED','Syntax\n------\n\nINSERT DELAYED ...\n\nDescription\n-----------\n\nThe DELAYED option for the INSERT statement is a MariaDB/MySQL extension to\nstandard SQL that is very useful if you have clients that cannot or need not\nwait for the INSERT to complete. This is a common situation when you use\nMariaDB for logging and you also periodically run SELECT and UPDATE statements\nthat take a long time to complete.\n\nWhen a client uses INSERT DELAYED, it gets an okay from the server at once,\nand the row is queued to be inserted when the table is not in use by any other\nthread.\n\nAnother major benefit of using INSERT DELAYED is that inserts from many\nclients are bundled together and written in one block. This is much faster\nthan performing many separate inserts.\n\nNote that INSERT DELAYED is slower than a normal INSERT if the table is not\notherwise in use. There is also the additional overhead for the server to\nhandle a separate thread for each table for which there are delayed rows. This\nmeans that you should use INSERT DELAYED only when you are really sure that\nyou need it.\n\nThe queued rows are held only in memory until they are inserted into the\ntable. This means that if you terminate mysqld forcibly (for example, with\nkill -9) or if mysqld dies unexpectedly, any queued rows that have not been\nwritten to disk are lost.\n\nThe number of concurrent INSERT DELAYED threads is limited by the\nmax_delayed_threads server system variables. If it is set to 0, INSERT DELAYED\nis disabled. The session value can be equal to the global value, or 0 to\ndisable this statement for the current session. If this limit has been\nreached, the DELAYED clause will be silently ignore for subsequent statements\n(no error will be produced).\n\nLimitations\n-----------\n\nThere are some limitations on the use of DELAYED:\n\n* INSERT DELAYED works only with MyISAM, MEMORY, ARCHIVE,\n and BLACKHOLE tables. If you execute INSERT DELAYED with another storage\nengine, you will get an error like this: ERROR 1616 (HY000): DELAYED option\nnot supported for table \'tab_name\'\n* For MyISAM tables, if there are no free blocks in the middle of the data\n file, concurrent SELECT and INSERT statements are supported. Under these\n circumstances, you very seldom need to use INSERT DELAYED\n with MyISAM.\n* INSERT DELAYED should be used only for\n INSERT statements that specify value lists. The server\n ignores DELAYED for INSERT ... SELECT\n or INSERT ... ON DUPLICATE KEY UPDATE statements.\n* Because the INSERT DELAYED statement returns immediately,\n before the rows are inserted, you cannot use\n LAST_INSERT_ID() to get the\n AUTO_INCREMENT value that the statement might generate.\n* DELAYED rows are not visible to SELECT\n statements until they actually have been inserted.\n* After INSERT DELAYED, ROW_COUNT() returns the number of the rows you tried\nto insert, not the number of the successful writes.\n* DELAYED is ignored on slave replication servers, so that \n INSERT DELAYED is treated as a normal\n INSERT on slaves. This is because\n DELAYED could cause the slave to have different data than\n the master. INSERT DELAYED statements are not safe for replication.\n* Pending INSERT DELAYED statements are lost if a table is\n write locked and ALTER TABLE is used to modify the table structure.\n* INSERT DELAYED is not supported for views. If you try, you will get an error\nlike this: ERROR 1347 (HY000): \'view_name\' is not BASE TABLE\n* INSERT DELAYED is not supported for partitioned tables.\n* INSERT DELAYED is not supported within stored programs.\n* INSERT DELAYED does not work with triggers.\n* INSERT DELAYED does not work if there is a check constraint in place.\n* INSERT DELAYED does not work if skip-new mode is active.\n\nURL: https://mariadb.com/kb/en/insert-delayed/','','https://mariadb.com/kb/en/insert-delayed/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (449,27,'INSERT SELECT','Syntax\n------\n\nINSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]\n [INTO] tbl_name [(col_name,...)]\n SELECT ...\n [ ON DUPLICATE KEY UPDATE col_name=expr, ... ]\n\nDescription\n-----------\n\nWith INSERT ... SELECT, you can quickly insert many rows into a table from one\nor more other tables. For example:\n\nINSERT INTO tbl_temp2 (fld_id)\n SELECT tbl_temp1.fld_order_id\n FROM tbl_temp1 WHERE tbl_temp1.fld_order_id > 100;\n\ntbl_name can also be specified in the form db_name.tbl_name (see Identifier\nQualifiers). This allows to copy rows between different databases.\n\nIf the new table has a primary key or UNIQUE indexes, you can use IGNORE to\nhandle duplicate key errors during the query. The newer values will not be\ninserted if an identical value already exists.\n\nREPLACE can be used instead of INSERT to prevent duplicates on UNIQUE indexes\nby deleting old values. In that case, ON DUPLICATE KEY UPDATE cannot be used.\n\nINSERT ... SELECT works for tables which already exist. To create a table for\na given resultset, you can use CREATE TABLE ... SELECT.\n\nURL: https://mariadb.com/kb/en/insert-select/','','https://mariadb.com/kb/en/insert-select/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (450,27,'LOAD DATA INFILE','Syntax\n------\n\nLOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE \'file_name\'\n [REPLACE | IGNORE]\n INTO TABLE tbl_name\n [CHARACTER SET charset_name]\n [{FIELDS | COLUMNS}\n [TERMINATED BY \'string\']\n [[OPTIONALLY] ENCLOSED BY \'char\']\n [ESCAPED BY \'char\']\n ]\n [LINES\n [STARTING BY \'string\']\n [TERMINATED BY \'string\']\n ]\n [IGNORE number LINES]\n [(col_name_or_user_var,...)]\n [SET col_name = expr,...]\n\nDescription\n-----------\n\nLOAD DATA INFILE is unsafe for statement-based replication.\n\nReads rows from a text file into the designated table on the database at a\nvery high speed. The file name must be given as a literal string.\n\nFiles are written to disk using the SELECT INTO OUTFILE statement. You can\nthen read the files back into a table using the LOAD DATA INFILE statement.\nThe FIELDS and LINES clauses are the same in both statements. These clauses\nare optional, but if both are specified then the FIELDS clause must precede\nLINES.\n\nExecuting this statement activates INSERT triggers.\n\nOne must have the FILE privilege to be able to execute LOAD DATA INFILE. This\nis to ensure normal users cannot read system files. LOAD DATA LOCAL INFILE\ndoes not have this requirement.\n\nIf the secure_file_priv system variable is set (by default it is not), the\nloaded file must be present in the specified directory.\n\nNote that MariaDB\'s systemd unit file restricts access to /home, /root, and\n/run/user by default. See Configuring access to home directories.\n\nLOAD DATA LOCAL INFILE\n----------------------\n\nWhen you execute the LOAD DATA INFILE statement, MariaDB Server attempts to\nread the input file from its own file system. By contrast, when you execute\nthe LOAD DATA LOCAL INFILE statement, the client attempts to read the input\nfile from its file system, and it sends the contents of the input file to the\nMariaDB Server. This allows you to load files from the client\'s local file\nsystem into the database.\n\nIf you don\'t want to permit this operation (perhaps for security reasons), you\ncan disable the LOAD DATA LOCAL INFILE statement on either the server or the\nclient.\n\n* The LOAD DATA LOCAL INFILE statement can be disabled on the server by\nsetting the local_infile system variable to 0.\n* The LOAD DATA LOCAL INFILE statement can be disabled on the client. If you\nare using MariaDB Connector/C, this can be done by unsetting the\nCLIENT_LOCAL_FILES capability flag with the mysql_real_connect function or by\nunsetting the MYSQL_OPT_LOCAL_INFILE option with mysql_optionsv function. If\nyou are using a different client or client library, then see the documentation\nfor your specific client or client library to determine how it handles the\nLOAD DATA LOCAL INFILE statement.\n\nIf the LOAD DATA LOCAL INFILE statement is disabled by either the server or\nthe client and if the user attempts to execute it, then the server will cause\nthe statement to fail with the following error message:\n\nThe used command is not allowed with this MariaDB version\n\nNote that it is not entirely accurate to say that the MariaDB version does not\nsupport the command. It would be more accurate to say that the MariaDB\nconfiguration does not support the command. See MDEV-20500 for more\ninformation.\n\nFrom MariaDB 10.5.2, the error message is more accurate:\n\nThe used command is not allowed because the MariaDB server or client \n has disabled the local infile capability\n\nREPLACE and IGNORE\n------------------\n\nIf you load data from a file into a table that already contains data and has a\nprimary key, you may encounter issues where the statement attempts to insert a\nrow with a primary key that already exists. When this happens, the statement\nfails with Error 1064, protecting the data already on the table. If you want\nMariaDB to overwrite duplicates, use the REPLACE keyword.\n\nThe REPLACE keyword works like the REPLACE statement. Here, the statement\nattempts to load the data from the file. If the row does not exist, it adds it\nto the table. If the row contains an existing primary key, it replaces the\ntable data. That is, in the event of a conflict, it assumes the file contains\nthe desired row.\n\nThis operation can cause a degradation in load speed by a factor of 20 or more\nif the part that has already been loaded is larger than the capacity of the\nInnoDB Buffer Pool. This happens because it causes a lot of turnaround in the\nbuffer pool.\n\nUse the IGNORE keyword when you want to skip any rows that contain a\nconflicting primary key. Here, the statement attempts to load the data from\nthe file. If the row does not exist, it adds it to the table. If the row\ncontains an existing primary key, it ignores the addition request and moves on\nto the next. That is, in the event of a conflict, it assumes the table\ncontains the desired row.\n\nCharacter-sets\n--------------\n\nWhen the statement opens the file, it attempts to read the contents using the\ndefault character-set, as defined by the character_set_database system\nvariable.\n\nIn the cases where the file was written using a character-set other than the\ndefault, you can specify the character-set to use with the CHARACTER SET\nclause in the statement. It ignores character-sets specified by the SET NAMES\nstatement and by the character_set_client system variable. Setting the\nCHARACTER SET clause to a value of binary indicates \"no conversion.\"\n\nThe statement interprets all fields in the file as having the same\ncharacter-set, regardless of the column data type. To properly interpret file\ncontents, you must ensure that it was written with the correct character-set.\nIf you write a data file with mysqldump -T or with the SELECT INTO OUTFILE\nstatement with the mysql client, be sure to use the --default-character-set\noption, so that the output is written with the desired character-set.\n\nWhen using mixed character sets, use the CHARACTER SET clause in both SELECT\nINTO OUTFILE and LOAD DATA INFILE to ensure that MariaDB correctly interprets\nthe escape sequences.\n\nThe character_set_filesystem system variable controls the interpretation of\nthe filename.\n\nIt is currently not possible to load data files that use the ucs2 character\nset.\n\nPreprocessing Inputs\n--------------------\n\ncol_name_or_user_var can be a column name, or a user variable. In the case of\na variable, the SET statement can be used to preprocess the value before\nloading into the table.\n\nPriority and Concurrency\n------------------------\n\nIn storage engines that perform table-level locking (MyISAM, MEMORY and\nMERGE), using the LOW_PRIORITY keyword, MariaDB delays insertions until no\nother clients are reading from the table. Alternatively, when using the MyISAM\nstorage engine, you can use the CONCURRENT keyword to perform concurrent\ninsertion.\n\nThe LOW_PRIORITY and CONCURRENT keywords are mutually exclusive. They cannot\nbe used in the same statement.\n\nProgress Reporting\n------------------\n\nThe LOAD DATA INFILE statement supports progress reporting. You may find this\nuseful when dealing with long-running operations. Using another client you can\nissue a SHOW PROCESSLIST query to check the progress of the data load.\n\nUsing mariadb-import/mysqlimport\n--------------------------------\n\nMariaDB ships with a separate utility for loading data from files:\nmariadb-import (or mysqlimport before MariaDB 10.5). It operates by sending\nLOAD DATA INFILE statements to the server.\n\nUsing mariadb-import/mysqlimport you can compress the file using the\n--compress option, to get better performance over slow networks, providing\nboth the client and server support the compressed protocol. Use the --local\noption to load from the local file system.\n\nIndexing\n--------\n\nIn cases where the storage engine supports ALTER TABLE... DISABLE KEYS\nstatements (MyISAM and Aria), the LOAD DATA INFILE statement automatically\ndisables indexes during the execution.\n\nExamples\n--------\n\nYou have a file with this content (note the the separator is \',\', not tab,\nwhich is the default):\n\n2,2\n3,3\n4,4\n5,5\n6,8\n\nCREATE TABLE t1 (a int, b int, c int, d int, PRIMARY KEY (a));\nLOAD DATA LOCAL INFILE \n \'/tmp/loaddata7.dat\' INTO TABLE t1 FIELDS TERMINATED BY \',\' (a,b) SET c=a+b;\nSELECT * FROM t1;\n+------+------+------+\n| a | b | c |\n+------+------+------+\n| 2 | 2 | 4 |\n| 3 | 3 | 6 |\n| 4 | 4 | 8 |\n| 5 | 5 | 10 |\n| 6 | 8 | 14 |\n+------+------+------+\n\nAnother example, given the following data (the separator is a tab):\n\n1 a\n2 b\n\nThe value of the first column is doubled before loading:\n\nLOAD DATA INFILE \'ld.txt\' INTO TABLE ld (@i,v) SET i=@i*2;\n\nSELECT * FROM ld;\n+------+------+\n| i | v |\n+------+------+\n| 2 | a |\n| 4 | b |\n+------+------+\n\nURL: https://mariadb.com/kb/en/load-data-infile/','','https://mariadb.com/kb/en/load-data-infile/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (451,27,'LOAD XML','Syntax\n------\n\nLOAD XML [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE \'file_name\'\n [REPLACE | IGNORE]\n INTO TABLE [db_name.]tbl_name\n [CHARACTER SET charset_name]\n [ROWS IDENTIFIED BY \'<tagname>\']\n [IGNORE number {LINES | ROWS}]\n [(column_or_user_var,...)]\n [SET col_name = expr,...]\n\nDescription\n-----------\n\nThe LOAD XML statement reads data from an XML file into a table. The file_name\nmust be given as a literal string. The tagname in the optional ROWS IDENTIFIED\nBY clause must also be given as a literal string, and must be surrounded by\nangle brackets (< and >).\n\nLOAD XML acts as the complement of running the mysql client in XML output mode\n(that is, starting the client with the --xml option). To write data from a\ntable to an XML file, use a command such as the following one from the system\nshell:\n\nshell> mysql --xml -e \'SELECT * FROM mytable\' > file.xml\n\nTo read the file back into a table, use LOAD XML INFILE. By default, the <row>\nelement is considered to be the equivalent of a database table row; this can\nbe changed using the ROWS IDENTIFIED BY clause.\n\nThis statement supports three different XML formats:\n\n* Column names as attributes and column values as attribute values:\n\n<row column1=\"value1\" column2=\"value2\" .../>\n\n* Column names as tags and column values as the content of these tags:\n\n<row>\n <column1>value1</column1>\n <column2>value2</column2>\n</row>\n\n* Column names are the name attributes of <field> tags, and values are\n the contents of these tags:\n\n<row>\n <field name=\'column1\'>value1</field>\n <field name=\'column2\'>value2</field>\n</row>\n\nThis is the format used by other tools, such as mysqldump.\n\nAll 3 formats can be used in the same XML file; the import routine\nautomatically detects the format for each row and interprets it correctly.\nTags are matched based on the tag or attribute name and the column name.\n\nThe following clauses work essentially the same way for LOAD XML as they do\nfor LOAD DATA:\n\n* LOW_PRIORITY or CONCURRENT\n* LOCAL\n* REPLACE or IGNORE\n* CHARACTER SET\n* (column_or_user_var,...)\n* SET\n\nSee LOAD DATA for more information about these clauses.\n\nThe IGNORE number LINES or IGNORE number ROWS clause causes the first number\nrows in the XML file to be skipped. It is analogous to the LOAD DATA\nstatement\'s IGNORE ... LINES clause.\n\nIf the LOW_PRIORITY keyword is used, insertions are delayed until no other\nclients are reading from the table. The CONCURRENT keyword allowes the use of\nconcurrent inserts. These clauses cannot be specified together.\n\nThis statement activates INSERT triggers.\n\nURL: https://mariadb.com/kb/en/load-xml/','','https://mariadb.com/kb/en/load-xml/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (452,27,'Concurrent Inserts','The MyISAM storage engine supports concurrent inserts. This feature allows\nSELECT statements to be executed during INSERT operations, reducing contention.\n\nWhether concurrent inserts can be used or not depends on the value of the\nconcurrent_insert server system variable:\n\n* NEVER (0) disables concurrent inserts.\n* AUTO (1) allows concurrent inserts only when the target table has no free\nblocks (no data in the middle of the table has been deleted after the last\nOPTIMIZE TABLE). This is the default.\n* ALWAYS (2) always enables concurrent inserts, in which case new rows are\nadded at the end of a table if the table is being used by another thread.\n\nIf the binary log is used, CREATE TABLE ... SELECT and INSERT ... SELECT\nstatements cannot use concurrent inserts. These statements acquire a read lock\non the table, so concurrent inserts will need to wait. This way the log can be\nsafely used to restore data.\n\nConcurrent inserts are not used by replicas with the row based replication\n(see binary log formats).\n\nIf an INSERT statement contain the HIGH_PRIORITY clause, concurrent inserts\ncannot be used. INSERT ... DELAYED is usually unneeded if concurrent inserts\nare enabled.\n\nLOAD DATA INFILE uses concurrent inserts if the CONCURRENT keyword is\nspecified and concurrent_insert is not NEVER. This makes the statement slower\n(even if no other sessions access the table) but reduces contention.\n\nLOCK TABLES allows non-conflicting concurrent inserts if a READ LOCAL lock is\nused. Concurrent inserts are not allowed if the LOCAL keyword is omitted.\n\nNotes\n-----\n\nThe decision to enable concurrent insert for a table is done when the table is\nopened. If you change the value of concurrent_insert it will only affect new\nopened tables. If you want it to work for also for tables in use or cached,\nyou should do FLUSH TABLES after setting the variable.\n\nURL: https://mariadb.com/kb/en/concurrent-inserts/','','https://mariadb.com/kb/en/concurrent-inserts/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (453,27,'HIGH_PRIORITY and LOW_PRIORITY','The InnoDB storage engine uses row-level locking to ensure data integrity.\nHowever some storage engines (such as MEMORY, MyISAM, Aria and MERGE) lock the\nwhole table to prevent conflicts. These storage engines use two separate\nqueues to remember pending statements; one is for SELECTs and the other one is\nfor write statements (INSERT, DELETE, UPDATE). By default, the latter has a\nhigher priority.\n\nTo give write operations a lower priority, the low_priority_updates server\nsystem variable can be set to ON. The option is available on both the global\nand session levels, and it can be set at startup or via the SET statement.\n\nWhen too many table locks have been set by write statements, some pending\nSELECTs are executed. The maximum number of write locks that can be acquired\nbefore this happens is determined by the max_write_lock_count server system\nvariable, which is dynamic.\n\nIf write statements have a higher priority (default), the priority of\nindividual write statements (INSERT, REPLACE, UPDATE, DELETE) can be changed\nvia the LOW_PRIORITY attribute, and the priority of a SELECT statement can be\nraised via the HIGH_PRIORITY attribute. Also, LOCK TABLES supports a\nLOW_PRIORITY attribute for WRITE locks.\n\nIf read statements have a higher priority, the priority of an INSERT can be\nchanged via the HIGH_PRIORITY attribute. However, the priority of other write\nstatements cannot be raised individually.\n\nThe use of LOW_PRIORITY or HIGH_PRIORITY for an INSERT prevents Concurrent\nInserts from being used.\n\nURL: https://mariadb.com/kb/en/high_priority-and-low_priority/','','https://mariadb.com/kb/en/high_priority-and-low_priority/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (454,27,'INSERT - Default & Duplicate Values','Default Values\n--------------\n\nIf the SQL_MODE contains STRICT_TRANS_TABLES and you are inserting into a\ntransactional table (like InnoDB), or if the SQL_MODE contains\nSTRICT_ALL_TABLES, all NOT NULL columns which do not have a DEFAULT value (and\nare not AUTO_INCREMENT) must be explicitly referenced in INSERT statements. If\nnot, an error like this is produced:\n\nERROR 1364 (HY000): Field \'col\' doesn\'t have a default value\n\nIn all other cases, if a NOT NULL column without a DEFAULT value is not\nreferenced, an empty value will be inserted (for example, 0 for INTEGER\ncolumns and \'\' for CHAR columns). See NULL Values in MariaDB:Inserting for\nexamples.\n\nIf a NOT NULL column having a DEFAULT value is not referenced, NULL will be\ninserted.\n\nIf a NULL column having a DEFAULT value is not referenced, its default value\nwill be inserted. It is also possible to explicitly assign the default value\nusing the DEFAULT keyword or the DEFAULT() function.\n\nIf the DEFAULT keyword is used but the column does not have a DEFAULT value,\nan error like this is produced:\n\nERROR 1364 (HY000): Field \'col\' doesn\'t have a default value\n\nDuplicate Values\n----------------\n\nBy default, if you try to insert a duplicate row and there is a UNIQUE index,\nINSERT stops and an error like this is produced:\n\nERROR 1062 (23000): Duplicate entry \'dup_value\' for key \'col\'\n\nTo handle duplicates you can use the IGNORE clause, INSERT ON DUPLICATE KEY\nUPDATE or the REPLACE statement. Note that the IGNORE and DELAYED options are\nignored when you use ON DUPLICATE KEY UPDATE.\n\nURL: https://mariadb.com/kb/en/insert-default-duplicate-values/','','https://mariadb.com/kb/en/insert-default-duplicate-values/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (455,27,'INSERT IGNORE','Ignoring Errors\n---------------\n\nNormally INSERT stops and rolls back when it encounters an error.\n\nBy using the IGNORE keyword all errors are converted to warnings, which will\nnot stop inserts of additional rows.\n\nThe IGNORE and DELAYED options are ignored when you use ON DUPLICATE KEY\nUPDATE.\n\nPrior to MySQL and MariaDB 5.5.28, no warnings were issued for duplicate key\nerrors when using IGNORE. You can get the old behavior if you set OLD_MODE to\nNO_DUP_KEY_WARNINGS_WITH_IGNORE.\n\nExamples\n--------\n\nCREATE TABLE t1 (x INT UNIQUE);\n\nINSERT INTO t1 VALUES(1),(2);\n\nINSERT INTO t1 VALUES(2),(3);\nERROR 1062 (23000): Duplicate entry \'2\' for key \'x\'\nSELECT * FROM t1;\n+------+\n| x |\n+------+\n| 1 |\n| 2 |\n+------+\n2 rows in set (0.00 sec)\n\nINSERT IGNORE INTO t1 VALUES(2),(3);\nQuery OK, 1 row affected, 1 warning (0.04 sec)\n\nSHOW WARNINGS;\n+---------+------+---------------------------------+\n| Level | Code | Message |\n+---------+------+---------------------------------+\n| Warning | 1062 | Duplicate entry \'2\' for key \'x\' |\n+---------+------+---------------------------------+\n\nSELECT * FROM t1;\n+------+\n| x |\n+------+\n| 1 |\n| 2 |\n| 3 |\n+------+\n\nSee INSERT ON DUPLICATE KEY UPDATE for further examples using that syntax.\n\nURL: https://mariadb.com/kb/en/insert-ignore/','','https://mariadb.com/kb/en/insert-ignore/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (456,27,'INSERT ON DUPLICATE KEY UPDATE','Syntax\n------\n\nINSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]\n [INTO] tbl_name [PARTITION (partition_list)] [(col,...)]\n {VALUES | VALUE} ({expr | DEFAULT},...),(...),...\n [ ON DUPLICATE KEY UPDATE\n col=expr\n [, col=expr] ... ]\n\nOr:\n\nINSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]\n [INTO] tbl_name [PARTITION (partition_list)]\n SET col={expr | DEFAULT}, ...\n [ ON DUPLICATE KEY UPDATE\n col=expr\n [, col=expr] ... ]\n\nOr:\n\nINSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]\n [INTO] tbl_name [PARTITION (partition_list)] [(col,...)]\n SELECT ...\n [ ON DUPLICATE KEY UPDATE\n col=expr\n [, col=expr] ... ]\n\nDescription\n-----------\n\nINSERT ... ON DUPLICATE KEY UPDATE is a MariaDB/MySQL extension to the INSERT\nstatement that, if it finds a duplicate unique or primary key, will instead\nperform an UPDATE.\n\nThe row/s affected value is reported as 1 if a row is inserted, and 2 if a row\nis updated, unless the API\'s CLIENT_FOUND_ROWS flag is set.\n\nIf more than one unique index is matched, only the first is updated. It is not\nrecommended to use this statement on tables with more than one unique index.\n\nIf the table has an AUTO_INCREMENT primary key and the statement inserts or\nupdates a row, the LAST_INSERT_ID() function returns its AUTO_INCREMENT value.\n\nThe VALUES() function can only be used in a ON DUPLICATE KEY UPDATE clause and\nhas no meaning in any other context. It returns the column values from the\nINSERT portion of the statement. This function is particularly useful for\nmulti-rows inserts.\n\nThe IGNORE and DELAYED options are ignored when you use ON DUPLICATE KEY\nUPDATE.\n\nSee Partition Pruning and Selection for details on the PARTITION clause.\n\nThis statement activates INSERT and UPDATE triggers. See Trigger Overview for\ndetails.\n\nSee also a similar statement, REPLACE.\n\nExamples\n--------\n\nCREATE TABLE ins_duplicate (id INT PRIMARY KEY, animal VARCHAR(30));\nINSERT INTO ins_duplicate VALUES (1,\'Aardvark\'), (2,\'Cheetah\'), (3,\'Zebra\');\n\nIf there is no existing key, the statement runs as a regular INSERT:\n\nINSERT INTO ins_duplicate VALUES (4,\'Gorilla\') \n ON DUPLICATE KEY UPDATE animal=\'Gorilla\';\nQuery OK, 1 row affected (0.07 sec)\n\nSELECT * FROM ins_duplicate;\n+----+----------+\n| id | animal |\n+----+----------+\n| 1 | Aardvark |\n| 2 | Cheetah |\n| 3 | Zebra |\n| 4 | Gorilla |\n+----+----------+\n\nA regular INSERT with a primary key value of 1 will fail, due to the existing\nkey:\n\nINSERT INTO ins_duplicate VALUES (1,\'Antelope\');\nERROR 1062 (23000): Duplicate entry \'1\' for key \'PRIMARY\'\n\nHowever, we can use an INSERT ON DUPLICATE KEY UPDATE instead:\n\nINSERT INTO ins_duplicate VALUES (1,\'Antelope\') \n ON DUPLICATE KEY UPDATE animal=\'Antelope\';\nQuery OK, 2 rows affected (0.09 sec)\n\nNote that there are two rows reported as affected, but this refers only to the\nUPDATE.\n\nSELECT * FROM ins_duplicate;\n+----+----------+\n| id | animal |\n+----+----------+\n| 1 | Antelope |\n| 2 | Cheetah |\n| 3 | Zebra |\n| 4 | Gorilla |\n+----+----------+\n\nAdding a second unique column:\n\nALTER TABLE ins_duplicate ADD id2 INT;\nUPDATE ins_duplicate SET id2=id+10;\nALTER TABLE ins_duplicate ADD UNIQUE KEY(id2);\n\nWhere two rows match the unique keys match, only the first is updated. This\ncan be unsafe and is not recommended unless you are certain what you are doing.\n\nINSERT INTO ins_duplicate VALUES (2,\'Lion\',13) \n ON DUPLICATE KEY UPDATE animal=\'Lion\';\nQuery OK, 2 rows affected (0.004 sec)\n\nSELECT * FROM ins_duplicate;\n+----+----------+------+\n| id | animal | id2 |\n+----+----------+------+\n| 1 | Antelope | 11 |\n| 2 | Lion | 12 |\n| 3 | Zebra | 13 |\n| 4 | Gorilla | 14 |\n+----+----------+------+\n\nAlthough the third row with an id of 3 has an id2 of 13, which also matched,\nit was not updated.\n\nChanging id to an auto_increment field. If a new row is added, the\nauto_increment is moved forward. If the row is updated, it remains the same.\n\nALTER TABLE `ins_duplicate` CHANGE `id` `id` INT( 11 ) NOT NULL AUTO_INCREMENT;\nALTER TABLE ins_duplicate DROP id2;\nSELECT Auto_increment FROM INFORMATION_SCHEMA.TABLES \n WHERE TABLE_NAME=\'ins_duplicate\';\n+----------------+\n| Auto_increment |\n+----------------+\n| 5 |\n+----------------+\n\nINSERT INTO ins_duplicate VALUES (2,\'Leopard\') \n ON DUPLICATE KEY UPDATE animal=\'Leopard\';\nQuery OK, 2 rows affected (0.00 sec)\n\nSELECT Auto_increment FROM INFORMATION_SCHEMA.TABLES \n WHERE TABLE_NAME=\'ins_duplicate\';\n+----------------+\n| Auto_increment |\n+----------------+\n| 5 |\n+----------------+\n\nINSERT INTO ins_duplicate VALUES (5,\'Wild Dog\') \n ON DUPLICATE KEY UPDATE animal=\'Wild Dog\';\nQuery OK, 1 row affected (0.09 sec)\n\nSELECT * FROM ins_duplicate;\n+----+----------+\n| id | animal |\n+----+----------+\n| 1 | Antelope |\n| 2 | Leopard |\n| 3 | Zebra |\n| 4 | Gorilla |\n| 5 | Wild Dog |\n+----+----------+\n\nSELECT Auto_increment FROM INFORMATION_SCHEMA.TABLES \n WHERE TABLE_NAME=\'ins_duplicate\';\n+----------------+\n| Auto_increment |\n+----------------+\n| 6 |\n+----------------+\n\nRefering to column values from the INSERT portion of the statement:\n\nINSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6)\n ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);\n\nSee the VALUES() function for more.\n\nURL: https://mariadb.com/kb/en/insert-on-duplicate-key-update/','','https://mariadb.com/kb/en/insert-on-duplicate-key-update/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (457,27,'INSERT...RETURNING','MariaDB starting with 10.5.0\n----------------------------\nINSERT ... RETURNING was added in MariaDB 10.5.0, and returns a resultset of\nthe inserted rows.\n\nSyntax\n------\n\nINSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]\n [INTO] tbl_name [PARTITION (partition_list)] [(col,...)]\n {VALUES | VALUE} ({expr | DEFAULT},...),(...),...\n [ ON DUPLICATE KEY UPDATE\n col=expr\n [, col=expr] ... ] [RETURNING select_expr\n [, select_expr ...]]\n\nOr:\n\nINSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]\n [INTO] tbl_name [PARTITION (partition_list)]\n SET col={expr | DEFAULT}, ...\n [ ON DUPLICATE KEY UPDATE\n col=expr\n [, col=expr] ... ] [RETURNING select_expr\n [, select_expr ...]]\n\nOr:\n\nINSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]\n [INTO] tbl_name [PARTITION (partition_list)] [(col,...)]\n SELECT ...\n [ ON DUPLICATE KEY UPDATE\n col=expr\n [, col=expr] ... ] [RETURNING select_expr\n [, select_expr ...]]\n\nDescription\n-----------\n\nINSERT ... RETURNING returns a resultset of the inserted rows.\n\nThis returns the listed columns for all the rows that are inserted, or\nalternatively, the specified SELECT expression. Any SQL expressions which can\nbe calculated can be used in the select expression for the RETURNING clause,\nincluding virtual columns and aliases, expressions which use various operators\nsuch as bitwise, logical and arithmetic operators, string functions, date-time\nfunctions, numeric functions, control flow functions, secondary functions and\nstored functions. Along with this, statements which have subqueries and\nprepared statements can also be used.\n\nExamples\n--------\n\nSimple INSERT statements:\n\nCREATE OR REPLACE TABLE t2 (id INT, animal VARCHAR(20), t TIMESTAMP);\n\nINSERT INTO t2 (id) VALUES (2),(3) RETURNING id,t;\n+------+---------------------+\n| id | t |\n+------+---------------------+\n| 2 | 2021-04-28 00:59:32 |\n| 3 | 2021-04-28 00:59:32 |\n+------+---------------------+\n\nINSERT INTO t2(id,animal) VALUES\n(1,\'Dog\'),(2,\'Lion\'),(3,\'Tiger\'),(4,\'Leopard\') \n RETURNING id,id+id,id&id,id||id;\n+------+-------+-------+--------+\n| id | id+id | id&id | id||id |\n+------+-------+-------+--------+\n| 1 | 2 | 1 | 1 |\n| 2 | 4 | 2 | 1 |\n| 3 | 6 | 3 | 1 |\n| 4 | 8 | 4 | 1 |\n+------+-------+-------+--------+\n\nUsing stored functions in RETURNING\n\nDELIMITER |\nCREATE FUNCTION f(arg INT) RETURNS INT\n BEGIN\n RETURN (SELECT arg+arg);\n END|\n\nDELIMITER ;\n\nPREPARE stmt FROM \"INSERT INTO t1 SET id1=1, animal1=\'Bear\' RETURNING f(id1),\nUPPER(animal1)\";\n\nEXECUTE stmt;\n+---------+----------------+\n| f(id1) | UPPER(animal1) |\n+---------+----------------+\n| 2 | BEAR |\n+---------+----------------+\n\nSubqueries in the RETURNING clause that return more than one row or column\ncannot be used.\n\nAggregate functions cannot be used in the RETURNING clause. Since aggregate\nfunctions work on a set of values, and if the purpose is to get the row count,\nROW_COUNT() with SELECT can be used or it can be used in\nINSERT...SELECT...RETURNING if the table in the RETURNING clause is not the\nsame as the INSERT table.\n\nURL: https://mariadb.com/kb/en/insertreturning/','','https://mariadb.com/kb/en/insertreturning/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (458,27,'REPLACE...RETURNING','MariaDB starting with 10.5.0\n----------------------------\nREPLACE ... RETURNING was added in MariaDB 10.5.0, and returns a resultset of\nthe replaced rows.\n\nSyntax\n------\n\nREPLACE [LOW_PRIORITY | DELAYED]\n [INTO] tbl_name [PARTITION (partition_list)] [(col,...)]\n {VALUES | VALUE} ({expr | DEFAULT},...),(...),...\n[RETURNING select_expr \n [, select_expr ...]]\n\nOr:\n\nREPLACE [LOW_PRIORITY | DELAYED]\n [INTO] tbl_name [PARTITION (partition_list)]\n SET col={expr | DEFAULT}, ...\n[RETURNING select_expr \n [, select_expr ...]]\n\nOr:\n\nREPLACE [LOW_PRIORITY | DELAYED]\n [INTO] tbl_name [PARTITION (partition_list)] [(col,...)]\n SELECT ...\n[RETURNING select_expr \n [, select_expr ...]]\n\nDescription\n-----------\n\nREPLACE ... RETURNING returns a resultset of the replaced rows.\n\nThis returns the listed columns for all the rows that are replaced, or\nalternatively, the specified SELECT expression. Any SQL expressions which can\nbe calculated can be used in the select expression for the RETURNING clause,\nincluding virtual columns and aliases, expressions which use various operators\nsuch as bitwise, logical and arithmetic operators, string functions, date-time\nfunctions, numeric functions, control flow functions, secondary functions and\nstored functions. Along with this, statements which have subqueries and\nprepared statements can also be used.\n\nExamples\n--------\n\nSimple REPLACE statement\n\nREPLACE INTO t2 VALUES (1,\'Leopard\'),(2,\'Dog\') RETURNING id2, id2+id2 \nas Total ,id2|id2, id2&&id2;\n+-----+-------+---------+----------+\n| id2 | Total | id2|id2 | id2&&id2 |\n+-----+-------+---------+----------+\n| 1 | 2 | 1 | 1 |\n| 2 | 4 | 2 | 1 |\n+-----+-------+---------+----------+\n\nUsing stored functions in RETURNING\n\nDELIMITER |\nCREATE FUNCTION f(arg INT) RETURNS INT\n BEGIN\n RETURN (SELECT arg+arg);\n END|\n\nDELIMITER ;\nPREPARE stmt FROM \"REPLACE INTO t2 SET id2=3, animal2=\'Fox\' RETURNING f2(id2),\nUPPER(animal2)\";\n\nEXECUTE stmt;\n+---------+----------------+\n| f2(id2) | UPPER(animal2) |\n+---------+----------------+\n| 6 | FOX |\n+---------+----------------+\n\nSubqueries in the statement\n\nREPLACE INTO t1 SELECT * FROM t2 RETURNING (SELECT id2 FROM t2 WHERE \nid2 IN (SELECT id2 FROM t2 WHERE id2=1)) AS new_id;\n+--------+\n| new_id |\n+--------+\n| 1 |\n| 1 |\n| 1 |\n| 1 |\n+--------+\n\nSubqueries in the RETURNING clause that return more than one row or column\ncannot be used..\n\nAggregate functions cannot be used in the RETURNING clause. Since aggregate\nfunctions work on a set of values and if the purpose is to get the row count,\nROW_COUNT() with SELECT can be used, or it can be used in\nREPLACE...SELECT...RETURNING if the table in the RETURNING clause is not the\nsame as the REPLACE table.\n\nURL: https://mariadb.com/kb/en/replacereturning/','','https://mariadb.com/kb/en/replacereturning/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (459,27,'CALL','Syntax\n------\n\nCALL sp_name([parameter[,...]])\nCALL sp_name[()]\n\nDescription\n-----------\n\nThe CALL statement invokes a stored procedure that was defined previously with\nCREATE PROCEDURE.\n\nStored procedure names can be specified as database_name.procedure_name.\nProcedure names and database names can be quoted with backticks (). This is\nnecessary if they are reserved words, or contain special characters. See\nidentifier qualifiers for details.\n\nCALL p() and CALL p are equivalent.\n\nIf parentheses are used, any number of spaces, tab characters and newline\ncharacters are allowed between the procedure\'s name and the open parenthesis.\n\nCALL can pass back values to its caller using parameters that are declared as\nOUT or INOUT parameters. If no value is assigned to an OUT parameter, NULL is\nassigned (and its former value is lost). To pass such values from another\nstored program you can use user-defined variables, local variables or\nroutine\'s parameters; in other contexts, you can only use user-defined\nvariables.\n\nCALL can also be executed as a prepared statement. Placeholders can be used\nfor IN parameters in all versions of MariaDB; for OUT and INOUT parameters,\nplaceholders can be used since MariaDB 5.5.\n\nWhen the procedure returns, a client program can also obtain the number of\nrows affected for the final statement executed within the routine: At the SQL\nlevel, call the ROW_COUNT() function; from the C API, call the\nmysql_affected_rows() function.\n\nIf the CLIENT_MULTI_RESULTS API flag is set, CALL can return any number of\nresultsets and the called stored procedure can execute prepared statements. If\nit is not set, at most one resultset can be returned and prepared statements\ncannot be used within procedures.\n\nURL: https://mariadb.com/kb/en/call/','','https://mariadb.com/kb/en/call/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (460,27,'DO','Syntax\n------\n\nDO expr [, expr] ...\n\nDescription\n-----------\n\nDO executes the expressions but does not return any results. In most respects,\nDO is shorthand for SELECT expr, ..., but has the advantage that it is\nslightly faster when you do not care about the result.\n\nDO is useful primarily with functions that have side effects, such as\nRELEASE_LOCK().\n\nURL: https://mariadb.com/kb/en/do/','','https://mariadb.com/kb/en/do/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (461,27,'Comment Syntax','There are three supported comment styles in MariaDB:\n\n* From a \'#\' to the end of a line:SELECT * FROM users; # This is a comment\n\n* From a \'-- \' to the end of a line. The space after the two dashes is\nrequired (as in MySQL).SELECT * FROM users; -- This is a comment\n\n* C style comments from an opening \'/*\' to a closing \'*/\'. Comments of this\nform can span multiple lines:SELECT * FROM users; /* This is a\nmulti-line\ncomment */\n\nNested comments are possible in some situations, but they are not supported or\nrecommended.\n\nExecutable Comments\n-------------------\n\nAs an aid to portability between different databases, MariaDB supports\nexecutable comments. These special comments allow you to embed SQL code which\nwill not execute when run on other databases, but will execute when run on\nMariaDB.\n\nMariaDB supports both MySQL\'s executable comment format, and a slightly\nmodified version specific to MariaDB. This way, if you have SQL code that\nworks on MySQL and MariaDB, but not other databases, you can wrap it in a\nMySQL executable comment, and if you have code that specifically takes\nadvantage of features only available in MariaDB you can use the MariaDB\nspecific format to hide the code from MySQL.\n\nExecutable Comment Syntax\n-------------------------\n\nMySQL and MariaDB executable comment syntax:\n\n/*! MySQL or MariaDB-specific code */\n\nCode that should be executed only starting from a specific MySQL or MariaDB\nversion:\n\n/*!##### MySQL or MariaDB-specific code */\n\nThe numbers, represented by \'######\' in the syntax examples above specify the\nspecific the minimum versions of MySQL and MariaDB that should execute the\ncomment. The first number is the major version, the second 2 numbers are the\nminor version and the last 2 is the patch level.\n\nFor example, if you want to embed some code that should only execute on MySQL\nor MariaDB starting from 5.1.0, you would do the following:\n\n/*!50100 MySQL and MariaDB 5.1.0 (and above) code goes here. */\n\nMariaDB-only executable comment syntax (starting from MariaDB 5.3.1):\n\n/*M! MariaDB-specific code */\n/*M!###### MariaDB-specific code */\n\nMariaDB ignores MySQL-style executable comments that have a version number in\nthe range 50700..99999. This is needed to skip features introduced in\nMySQL-5.7 that are not ported to MariaDB 10.x yet.\n\n/*!50701 MariaDB-10.x ignores MySQL-5.7 specific code */\n\nNote: comments which have a version number in the range 50700..99999 that use\nMariaDB-style executable comment syntax are still executed.\n\n/*M!50701 MariaDB-10.x does not ignore this */\n\nStatement delimiters cannot be used within executable comments.\n\nExamples\n--------\n\nIn MySQL all the following will return 2: In MariaDB, the last 2 queries would\nreturn 3.\n\nSELECT 2 /* +1 */;\nSELECT 1 /*! +1 */;\nSELECT 1 /*!50101 +1 */;\nSELECT 2 /*M! +1 */;\nSELECT 2 /*M!50301 +1 */;\n\nThe following executable statement will not work due to the delimiter inside\nthe executable portion:\n\n/*M!100100 select 1 ; */\nERROR 1064 (42000): You have an error in your SQL syntax; check the manual\nthat corresponds to your MariaDB server version for the right syntax to use\nnear \'\' at line 1\n\nInstead, the delimiter should be placed outside the executable portion:\n\n/*M!100100 select 1 */;\n+---+\n| 1 |\n+---+\n| 1 |\n+---+\n\nURL: https://mariadb.com/kb/en/comment-syntax/','','https://mariadb.com/kb/en/comment-syntax/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (462,27,'HANDLER Commands','Syntax\n------\n\nHANDLER tbl_name OPEN [ [AS] alias]\nHANDLER tbl_name READ index_name { = | >= | <= | < } (value1,value2,...)\n [ WHERE where_condition ] [LIMIT ... ]\nHANDLER tbl_name READ index_name { FIRST | NEXT | PREV | LAST }\n [ WHERE where_condition ] [LIMIT ... ]\nHANDLER tbl_name READ { FIRST | NEXT }\n [ WHERE where_condition ] [LIMIT ... ]\nHANDLER tbl_name CLOSE\n\nDescription\n-----------\n\nThe HANDLER statement provides direct access to table storage engine\ninterfaces for key lookups and key or table scans. It is available for at\nleast Aria, Memory, MyISAM and InnoDB tables (and should work with most\n\'normal\' storage engines, but not with system tables, MERGE or views).\n\nHANDLER ... OPEN opens a table, allowing it to be accessible to subsequent\nHANDLER ... READ statements. The table can either be opened using an alias\n(which must then be used by HANDLER ... READ, or a table name.\n\nThe table object is only closed when HANDLER ... CLOSE is called by the\nsession, and is not shared by other sessions.\n\nPrepared statements work with HANDLER READ, which gives a much higher\nperformance (50% speedup) as there is no parsing and all data is transformed\nin binary (without conversions to text, as with the normal protocol).\n\nThe HANDLER command does not work with partitioned tables.\n\nKey Lookup\n----------\n\nA key lookup is started with:\n\nHANDLER tbl_name READ index_name { = | >= | <= | < } (value,value) [LIMIT...]\n\nThe values stands for the value of each of the key columns. For most key types\n(except for HASH keys in MEMORY storage engine) you can use a prefix subset of\nit\'s columns.\n\nIf you are using LIMIT, then in case of >= or > then there is an implicit NEXT\nimplied, while if you are using <= or < then there is an implicit PREV implied.\n\nAfter the initial read, you can use\n\nHANDLER tbl_name READ index_name NEXT [ LIMIT ... ]\nor\nHANDLER tbl_name READ index_name PREV [ LIMIT ... ]\n\nto scan the rows in key order.\n\nNote that the row order is not defined for keys with duplicated values and\nwill vary from engine to engine.\n\nKey Scans\n---------\n\nYou can scan a table in key order by doing:\n\nHANDLER tbl_name READ index_name FIRST [ LIMIT ... ]\nHANDLER tbl_name READ index_name NEXT [ LIMIT ... ]\n\nor, if the handler supports backwards key scans (most do):\n\nHANDLER tbl_name READ index_name LAST [ LIMIT ... ]\nHANDLER tbl_name READ index_name PREV [ LIMIT ... ]\n\nTable Scans\n-----------\n\nYou can scan a table in row order by doing:\n\nHANDLER tbl_name READ FIRST [ LIMIT ... ]\nHANDLER tbl_name READ NEXT [ LIMIT ... ]\n\nLimitations\n-----------\n\nAs this is a direct interface to the storage engine, some limitations may\napply for what you can do and what happens if the table changes. Here follows\nsome of the common limitations:\n\nFinding \'Old Rows\'\n------------------\n\nHANDLER READ is not transaction safe, consistent or atomic. It\'s ok for the\nstorage engine to returns rows that existed when you started the scan but that\nwere later deleted. This can happen as the storage engine may cache rows as\npart of the scan from a previous read.\n\nYou may also find rows committed since the scan originally started.\n\nInvisible Columns\n-----------------\n\nHANDLER ... READ also reads the data of invisible-columns.\n\nSystem-Versioned Tables\n-----------------------\n\nHANDLER ... READ reads everything from system-versioned tables, and so\nincludes row_start and row_end fields, as well as all rows that have since\nbeen deleted or changed, including when history partitions are used.\n\nOther Limitations\n-----------------\n\n* If you do an ALTER TABLE, all your HANDLERs for that table are automatically\nclosed.\n* If you do an ALTER TABLE for a table that is used by some other connection\nwith HANDLER, the ALTER TABLE will wait for the HANDLER to be closed.\n* For HASH keys, you must use all key parts when searching for a row.\n* For HASH keys, you can\'t do a key scan of all values. You can only find all\nrows with the same key value.\n* While each HANDLER READ command is atomic, if you do a scan in many steps,\nthen some engines may give you error 1020 if the table changed between the\ncommands. Please refer to the specific engine handler page if this happens.\n\nError Codes\n-----------\n\n* Error 1031 (ER_ILLEGAL_HA) Table storage engine for \'t1\' doesn\'t have this\noption\nIf you get this for HANDLER OPEN it means the storage engine doesn\'t support\nHANDLER calls.\nIf you get this for HANDLER READ it means you are trying to use an incomplete\nHASH key.\n\n* Error 1020 (ER_CHECKREAD) Record has changed since last read in table \'...\'\nThis means that the table changed between two reads and the handler can\'t\nhandle this case for the given scan.\n\nURL: https://mariadb.com/kb/en/handler-commands/','','https://mariadb.com/kb/en/handler-commands/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (463,27,'HANDLER for MEMORY Tables','This article explains how to use HANDLER commands efficiently with MEMORY/HEAP\ntables.\n\nIf you want to scan a table for over different key values, not just search for\nexact key values, you should create your keys with \'USING BTREE\':\n\nCREATE TABLE t1 (a INT, b INT, KEY(a), KEY b USING BTREE (b)) engine=memory;\n\nIn the above table, a is a HASH key that only supports exact matches (=) while\nb is a BTREE key that you can use to scan the table in key order, starting\nfrom start or from a given key value.\n\nThe limitations for HANDLER READ with Memory|HEAP tables are:\n\nLimitations for HASH keys\n-------------------------\n\n* You must use all key parts when searching for a row.\n* You can\'t do a key scan of all values. You can only find all rows with the\nsame key value.\n* READ NEXT gives error 1031 if the tables changed since last read.\n\nLimitations for BTREE keys\n--------------------------\n\n* READ NEXT gives error 1031 if the tables changed since last read. This\nlimitation can be lifted in the future.\n\nLimitations for table scans\n---------------------------\n\n* READ NEXT gives error 1031 if the table was truncated since last READ call.\n\nURL: https://mariadb.com/kb/en/handler-for-memory-tables/','','https://mariadb.com/kb/en/handler-for-memory-tables/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (464,27,'Useful MariaDB Queries','This page is intended to be a quick reference of commonly-used and/or useful\nqueries in MariaDB.\n\nCreating a Table\n----------------\n\nCREATE TABLE t1 ( a INT );\nCREATE TABLE t2 ( b INT );\nCREATE TABLE student_tests (\n name CHAR(10), test CHAR(10), \n score TINYINT, test_date DATE\n);\n\nSee CREATE TABLE for more.\n\nInserting Records\n-----------------\n\nINSERT INTO t1 VALUES (1), (2), (3);\nINSERT INTO t2 VALUES (2), (4);\n\nINSERT INTO student_tests \n (name, test, score, test_date) VALUES\n (\'Chun\', \'SQL\', 75, \'2012-11-05\'), \n (\'Chun\', \'Tuning\', 73, \'2013-06-14\'),\n (\'Esben\', \'SQL\', 43, \'2014-02-11\'), \n (\'Esben\', \'Tuning\', 31, \'2014-02-09\'), \n (\'Kaolin\', \'SQL\', 56, \'2014-01-01\'),\n (\'Kaolin\', \'Tuning\', 88, \'2013-12-29\'), \n (\'Tatiana\', \'SQL\', 87, \'2012-04-28\'), \n (\'Tatiana\', \'Tuning\', 83, \'2013-09-30\');\n\nSee INSERT for more.\n\nUsing AUTO_INCREMENT\n--------------------\n\nThe AUTO_INCREMENT attribute is used to automatically generate a unique\nidentity for new rows.\n\nCREATE TABLE student_details (\n id INT NOT NULL AUTO_INCREMENT, name CHAR(10), \n date_of_birth DATE, PRIMARY KEY (id)\n);\n\nWhen inserting, the id field can be omitted, and is automatically created.\n\nINSERT INTO student_details (name,date_of_birth) VALUES \n (\'Chun\', \'1993-12-31\'), \n (\'Esben\',\'1946-01-01\'),\n (\'Kaolin\',\'1996-07-16\'),\n (\'Tatiana\', \'1988-04-13\');\n\nSELECT * FROM student_details;\n+----+---------+---------------+\n| id | name | date_of_birth |\n+----+---------+---------------+\n| 1 | Chun | 1993-12-31 |\n| 2 | Esben | 1946-01-01 |\n| 3 | Kaolin | 1996-07-16 |\n| 4 | Tatiana | 1988-04-13 |\n+----+---------+---------------+\n\nSee AUTO_INCREMENT for more.\n\nQuerying from two tables on a common value\n------------------------------------------\n\nSELECT * FROM t1 INNER JOIN t2 ON t1.a = t2.b;\n\nThis kind of query is called a join - see JOINS for more.\n\nFinding the Maximum Value\n-------------------------\n\nSELECT MAX(a) FROM t1;\n+--------+\n| MAX(a) |\n+--------+\n| 3 |\n+--------+\n\nSee the MAX() function for more, as well as Finding the maximum value and\ngrouping the results below for a more practical example.\n\nFinding the Minimum Value\n-------------------------\n\nSELECT MIN(a) FROM t1;\n+--------+\n| MIN(a) |\n+--------+\n| 1 |\n+--------+\n\nSee the MIN() function for more.\n\nFinding the Average Value\n-------------------------\n\nSELECT AVG(a) FROM t1;\n+--------+\n| AVG(a) |\n+--------+\n| 2.0000 |\n+--------+\n\nSee the AVG() function for more.\n\nFinding the Maximum Value and Grouping the Results\n--------------------------------------------------\n\nSELECT name, MAX(score) FROM student_tests GROUP BY name;\n+---------+------------+\n| name | MAX(score) |\n+---------+------------+\n| Chun | 75 |\n| Esben | 43 |\n| Kaolin | 88 |\n| Tatiana | 87 |\n+---------+------------+\n\nSee the MAX() function for more.\n\nOrdering Results\n----------------\n\nSELECT name, test, score FROM student_tests ORDER BY score DESC;\n+---------+--------+-------+\n| name | test | score |\n+---------+--------+-------+\n| Kaolin | Tuning | 88 |\n| Tatiana | SQL | 87 |\n| Tatiana | Tuning | 83 |\n| Chun | SQL | 75 |\n| Chun | Tuning | 73 |\n| Kaolin | SQL | 56 |\n| Esben | SQL | 43 |\n| Esben | Tuning | 31 |\n+---------+--------+-------+\n\nSee ORDER BY for more.\n\nFinding the Row with the Minimum of a Particular Column\n-------------------------------------------------------\n\nIn this example, we want to find the lowest test score for any student.\n\nSELECT name,test, score FROM student_tests WHERE score=(SELECT MIN(score) FROM\nstudent);\n+-------+--------+-------+\n| name | test | score |\n+-------+--------+-------+\n| Esben | Tuning | 31 |\n+-------+--------+-------+\n\nFinding Rows with the Maximum Value of a Column by Group\n--------------------------------------------------------\n\nThis example returns the best test results of each student:\n\nSELECT name, test, score FROM student_tests st1 WHERE score = (\n SELECT MAX(score) FROM student st2 WHERE st1.name = st2.name\n); \n+---------+--------+-------+\n| name | test | score |\n+---------+--------+-------+\n| Chun | SQL | 75 |\n| Esben | SQL | 43 |\n| Kaolin | Tuning | 88 |\n| Tatiana | SQL | 87 |\n+---------+--------+-------+\n\nCalculating Age\n---------------\n\nThe TIMESTAMPDIFF function can be used to calculate someone\'s age:\n\nSELECT CURDATE() AS today;\n+------------+\n| today |\n+------------+\n| 2014-02-17 |\n+------------+\n\nSELECT name, date_of_birth, TIMESTAMPDIFF(YEAR,date_of_birth,\'2014-08-02\') AS\nage \n FROM student_details;\n+---------+---------------+------+\n| name | date_of_birth | age |\n+---------+---------------+------+\n| Chun | 1993-12-31 | 20 |\n| Esben | 1946-01-01 | 68 |\n| Kaolin | 1996-07-16 | 18 |\n| Tatiana | 1988-04-13 | 26 |\n+---------+---------------+------+\n\nSee TIMESTAMPDIFF() for more.\n\nUsing User-defined Variables\n----------------------------\n\nThis example sets a user-defined variable with the average test score, and\nthen uses it in a later query to return all results above the average.\n\nSELECT @avg_score:= AVG(score) FROM student_tests;\n+-------------------------+\n| @avg_score:= AVG(score) |\n+-------------------------+\n| 67.000000000 |\n+-------------------------+\n\nSELECT * FROM student_tests WHERE score > @avg_score;\n+---------+--------+-------+------------+\n| name | test | score | test_date |\n+---------+--------+-------+------------+\n| Chun | SQL | 75 | 2012-11-05 |\n| Chun | Tuning | 73 | 2013-06-14 |\n| Kaolin | Tuning | 88 | 2013-12-29 |\n| Tatiana | SQL | 87 | 2012-04-28 |\n| Tatiana | Tuning | 83 | 2013-09-30 |\n+---------+--------+-------+------------+\n\nUser-defined variables can also be used to add an incremental counter to a\nresultset:\n\nSET @count = 0;\n\nSELECT @count := @count + 1 AS counter, name, date_of_birth FROM\nstudent_details;\n+---------+---------+---------------+\n| counter | name | date_of_birth |\n+---------+---------+---------------+\n| 1 | Chun | 1993-12-31 |\n| 2 | Esben | 1946-01-01 |\n| 3 | Kaolin | 1996-07-16 |\n| 4 | Tatiana | 1988-04-13 |\n+---------+---------+---------------+\n\nSee User-defined Variables for more.\n\nView Tables in Order of Size\n----------------------------\n\nReturns a list of all tables in the database, ordered by size:\n\nSELECT table_schema as `DB`, table_name AS `Table`, \n ROUND(((data_length + index_length) / 1024 / 1024), 2) `Size (MB)`\n FROM information_schema.TABLES\n ORDER BY (data_length + index_length) DESC;\n\n+--------------------+---------------------------------------+-----------+\n| DB | Table | Size (MB) |\n+--------------------+---------------------------------------+-----------+\n| wordpress | wp_simple_history_contexts | 7.05 |\n| wordpress | wp_posts | 6.59 |\n| wordpress | wp_simple_history | 3.05 |\n| wordpress | wp_comments | 2.73 |\n| wordpress | wp_commentmeta | 2.47 |\n| wordpress | wp_simple_login_log | 2.03 |\n...\n\nRemoving Duplicates\n-------------------\n\nMariaDB starting with 10.3\n--------------------------\nThe following syntax is only valid MariaDB 10.3 and beyond:\n\nThis example assumes there\'s a unique ID, but that all other fields are\nidentical. In the example below, there are 4 records, 3 of which are\nduplicates, so two of the three duplicates need to be removed. The\nintermediate SELECT is not necessary, but demonstrates what is being returned.\n\nCREATE TABLE t (id INT, f1 VARCHAR(2));\n\nINSERT INTO t VALUES (1,\'a\'), (2,\'a\'), (3,\'b\'), (4,\'a\');\n\nSELECT * FROM t t1, t t2 WHERE t1.f1=t2.f1 AND t1.id<>t2.id AND t1.id=(\n SELECT MAX(id) FROM t tab WHERE tab.f1=t1.f1\n);\n+------+------+------+------+\n| id | f1 | id | f1 |\n+------+------+------+------+\n| 4 | a | 1 | a |\n| 4 | a | 2 | a |\n+------+------+------+------+\n\nDELETE FROM t WHERE id IN (\n SELECT t2.id FROM t t1, t t2 WHERE t1.f1=t2.f1 AND t1.id<>t2.id AND t1.id=(\n SELECT MAX(id) FROM t tab WHERE tab.f1=t1.f1\n )\n);\nQuery OK, 2 rows affected (0.120 sec)\n\nSELECT * FROM t;\n+------+------+\n| id | f1 |\n+------+------+\n| 3 | b |\n| 4 | a |\n+------+------\n\nURL: https://mariadb.com/kb/en/useful-mariadb-queries/','','https://mariadb.com/kb/en/useful-mariadb-queries/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (465,28,'ANALYZE FORMAT=JSON','ANALYZE FORMAT=JSON is a mix of the EXPLAIN FORMAT=JSON and ANALYZE statement\nfeatures. The ANALYZE FORMAT=JSON $statement will execute $statement, and then\nprint the output of EXPLAIN FORMAT=JSON, amended with data from the query\nexecution.\n\nBasic Execution Data\n--------------------\n\nYou can get the following also from tabular ANALYZE statement form:\n\n* r_rows is provided for any node that reads rows. It shows how many rows\nwere read, on average \n* r_filtered is provided whenever there is a condition that is checked. It\nshows the percentage of rows left after checking the condition.\n\nAdvanced Execution Data\n-----------------------\n\nThe most important data not available in the regular tabula ANALYZE statement\nare:\n\n* r_loops field. This shows how many times the node was executed. Most query\nplan elements have this field.\n* r_total_time_ms field. It shows how much time in total was spent executing\nthis node. If the node has subnodes, their execution time is included.\n* r_buffer_size field. Query plan nodes that make use of buffers report the\nsize of buffer that was was used.\n\nSHOW ANALYZE FORMAT=JSON\n------------------------\n\nMariaDB starting with 10.9\n--------------------------\nSHOW ANALYZE FORMAT=JSON for <connection_id> extends ANALYZE [FORMAT=JSON]\n<select> to allow one to analyze a query currently running in another\nconnection.\n\nData About Individual Query Plan Nodes\n--------------------------------------\n\n* filesort node reports whether sorting was done with LIMIT n parameter, and\nhow many rows were in the sort result. \n* block-nl-join node has r_loops field, which allows to tell whether Using\njoin buffer was efficient \n* range-checked-for-each-record reports counters that show the result of the\ncheck. \n* expression-cache is used for subqueries, and it reports how many times the\ncache was used, and what cache hit ratio was.\n* union_result node has r_rows so one can see how many rows were produced\nafter UNION operation\n* and so forth\n\nUse Cases\n---------\n\nSee Examples of ANALYZE FORMAT=JSON.\n\nURL: https://mariadb.com/kb/en/analyze-format-json/','','https://mariadb.com/kb/en/analyze-format-json/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (466,28,'ANALYZE FORMAT=JSON Examples','Example #1\n----------\n\nCustomers who have ordered more than 1M goods.\n\nANALYZE FORMAT=JSON\nSELECT COUNT(*)\nFROM customer\nWHERE\n (SELECT SUM(o_totalprice) FROM orders WHERE o_custkey=c_custkey) > 1000*1000;\n\nThe query takes 40 seconds over cold cache\n\nEXPLAIN: {\n \"query_block\": {\n \"select_id\": 1,\n \"r_loops\": 1,\n \"r_total_time_ms\": 39872,\n \"table\": {\n \"table_name\": \"customer\",\n \"access_type\": \"index\",\n \"key\": \"i_c_nationkey\",\n \"key_length\": \"5\",\n \"used_key_parts\": [\"c_nationkey\"],\n \"r_loops\": 1,\n \"rows\": 150303,\n \"r_rows\": 150000,\n \"r_total_time_ms\": 270.3,\n \"filtered\": 100,\n \"r_filtered\": 60.691,\n \"attached_condition\": \"((subquery#2) > <cache>((1000 * 1000)))\",\n \"using_index\": true\n },\n \"subqueries\": [\n {\n \"query_block\": {\n \"select_id\": 2,\n \"r_loops\": 150000,\n \"r_total_time_ms\": 39531,\n \"table\": {\n \"table_name\": \"orders\",\n \"access_type\": \"ref\",\n \"possible_keys\": [\"i_o_custkey\"],\n \"key\": \"i_o_custkey\",\n \"key_length\": \"5\",\n \"used_key_parts\": [\"o_custkey\"],\n \"ref\": [\"dbt3sf1.customer.c_custkey\"],\n \"r_loops\": 150000,\n \"rows\": 7,\n \"r_rows\": 10,\n \"r_total_time_ms\": 39208,\n \"filtered\": 100,\n \"r_filtered\": 100\n }\n }\n }\n ]\n }\n}\nANALYZE shows that 39.2 seconds were spent in the subquery, which was executed\n150K times (for every row of outer table).\n\nURL: https://mariadb.com/kb/en/analyze-formatjson-examples/','','https://mariadb.com/kb/en/analyze-formatjson-examples/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (467,28,'ANALYZE Statement','Description\n-----------\n\nThe ANALYZE statement is similar to the EXPLAIN statement. ANALYZE statement\nwill invoke the optimizer, execute the statement, and then produce EXPLAIN\noutput instead of the result set. The EXPLAIN output will be annotated with\nstatistics from statement execution.\n\nThis lets one check how close the optimizer\'s estimates about the query plan\nare to the reality. ANALYZE produces an overview, while the ANALYZE\nFORMAT=JSON command provides a more detailed view of the query plan and the\nquery execution.\n\nThe syntax is\n\nANALYZE explainable_statement;\n\nwhere the statement is any statement for which one can run EXPLAIN.\n\nCommand Output\n--------------\n\nConsider an example:\n\nANALYZE SELECT * FROM tbl1 \nWHERE key1 \n BETWEEN 10 AND 200 AND\n col1 LIKE \'foo%\'\\G\n\n*************************** 1. row ***************************\n id: 1\n select_type: SIMPLE\n table: tbl1\n type: range\npossible_keys: key1\n key: key1\n key_len: 5\n ref: NULL\n rows: 181\n r_rows: 181\n filtered: 100.00\n r_filtered: 10.50\n Extra: Using index condition; Using where\n\nCompared to EXPLAIN, ANALYZE produces two extra columns:\n\n* r_rows is an observation-based counterpart of the rows column. It shows how\nmany rows were actually read from the table. \n* r_filtered is an observation-based counterpart of the filtered column. It\nshows which fraction of rows was left after applying the WHERE condition.\n\nInterpreting the Output\n-----------------------\n\nJoins\n-----\n\nLet\'s consider a more complicated example.\n\nANALYZE SELECT *\nFROM orders, customer \nWHERE\n customer.c_custkey=orders.o_custkey AND\n customer.c_acctbal < 0 AND\n orders.o_totalprice > 200*1000\n\n+----+-------------+----------+------+---------------+-------------+---------+-\n------------------+--------+--------+----------+------------+-------------+\n| id | select_type | table | type | possible_keys | key | key_len |\nref | rows | r_rows | filtered | r_filtered | Extra |\n+----+-------------+----------+------+---------------+-------------+---------+-\n------------------+--------+--------+----------+------------+-------------+\n| 1 | SIMPLE | customer | ALL | PRIMARY,... | NULL | NULL |\nNULL | 149095 | 150000 | 18.08 | 9.13 | Using where |\n| 1 | SIMPLE | orders | ref | i_o_custkey | i_o_custkey | 5 |\ncustomer.c_custkey | 7 | 10 | 100.00 | 30.03 | Using where |\n+----+-------------+----------+------+---------------+-------------+---------+-\n------------------+--------+--------+----------+------------+-------------+\n\nHere, one can see that\n\n* For table customer, customer.rows=149095, customer.r_rows=150000. The\nestimate for number of rows we will read was fairly precise\n* customer.filtered=18.08, customer.r_filtered=9.13. The optimizer somewhat\noverestimated the number of records that will match selectivity of condition\nattached to `customer` table (in general, when you have a full scan and\nr_filtered is less than 15%, it\'s time to consider adding an appropriate\nindex).\n* For table orders, orders.rows=7, orders.r_rows=10. This means that on\naverage, there are 7 orders for a given c_custkey, but in our case there were\n10, which is close to the expectation (when this number is consistently far\nfrom the expectation, it may be time to run ANALYZE TABLE, or even edit the\ntable statistics manually to get better query plans).\n* orders.filtered=100, orders.r_filtered=30.03. The optimizer didn\'t have any\nway to estimate which fraction of records will be left after it checks the\ncondition that is attached to table orders (it\'s orders.o_totalprice >\n200*1000). So, it used 100%. In reality, it is 30%. 30% is typically not\nselective enough to warrant adding new indexes. For joins with many tables, it\nmight be worth to collect and use column statistics for columns in question,\nthis may help the optimizer to pick a better query plan.\n\nMeaning of NULL in r_rows and r_filtered\n----------------------------------------\n\nLet\'s modify the previous example slightly\n\nANALYZE SELECT * \nFROM orders, customer \nWHERE\n customer.c_custkey=orders.o_custkey AND\n customer.c_acctbal < -0 AND\n customer.c_comment LIKE \'%foo%\' AND\n orders.o_totalprice > 200*1000;\n\n+----+-------------+----------+------+---------------+-------------+---------+-\n------------------+--------+--------+----------+------------+-------------+\n| id | select_type | table | type | possible_keys | key | key_len |\nref | rows | r_rows | filtered | r_filtered | Extra |\n+----+-------------+----------+------+---------------+-------------+---------+-\n------------------+--------+--------+----------+------------+-------------+\n| 1 | SIMPLE | customer | ALL | PRIMARY,... | NULL | NULL |\nNULL | 149095 | 150000 | 18.08 | 0.00 | Using where |\n| 1 | SIMPLE | orders | ref | i_o_custkey | i_o_custkey | 5 |\ncustomer.c_custkey | 7 | NULL | 100.00 | NULL | Using where |\n+----+-------------+----------+------+---------------+-------------+---------+-\n------------------+--------+--------+----------+------------+-------------+\n\nHere, one can see that orders.r_rows=NULL and orders.r_filtered=NULL. This\nmeans that table orders was not scanned even once. Indeed, we can also see\ncustomer.r_filtered=0.00. This shows that a part of WHERE attached to table\n`customer` was never satisfied (or, satisfied in less than 0.01% of cases).\n\nANALYZE FORMAT=JSON\n-------------------\n\nANALYZE FORMAT=JSON produces JSON output. It produces much more information\nthan tabular ANALYZE.\n\nNotes\n-----\n\n* ANALYZE UPDATE or ANALYZE DELETE will actually make updates/deletes (ANALYZE\nSELECT will perform the select operation and then discard the resultset).\n* PostgreSQL has a similar command, EXPLAIN ANALYZE.\n* The EXPLAIN in the slow query log feature allows MariaDB to have ANALYZE\noutput of slow queries printed into the slow query log (see MDEV-6388).\n\nURL: https://mariadb.com/kb/en/analyze-statement/','','https://mariadb.com/kb/en/analyze-statement/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (468,28,'EXPLAIN','Syntax\n------\n\nEXPLAIN tbl_name [col_name | wild]\n\nOr\n\nEXPLAIN [EXTENDED | PARTITIONS | FORMAT=JSON] \n {SELECT select_options | UPDATE update_options | DELETE delete_options}\n\nDescription\n-----------\n\nThe EXPLAIN statement can be used either as a synonym for DESCRIBE or as a way\nto obtain information about how MariaDB executes a SELECT, UPDATE or DELETE\nstatement:\n\n* \'EXPLAIN tbl_name\' is synonymous with \n \'DESCRIBE tbl_name\' or\n \'SHOW COLUMNS FROM tbl_name\'.\n* When you precede a SELECT, UPDATE or a DELETE statement with the keyword \n EXPLAIN, MariaDB displays information from the optimizer\n about the query execution plan. That is, MariaDB explains how it would\n process the SELECT, UPDATE or DELETE, including information about how tables\n are joined and in which order. EXPLAIN EXTENDED can be\n used to provide additional information.\n* EXPLAIN PARTITIONS is useful only when examining queries involving\npartitioned tables. For details, see Partition pruning and selection.\n* ANALYZE statement performs the query as well as producing EXPLAIN output,\nand provides actual as well as estimated statistics.\n* EXPLAIN output can be printed in the slow query log. See EXPLAIN in the Slow\nQuery Log for details.\n\nSHOW EXPLAIN shows the output of a running statement. In some cases, its\noutput can be closer to reality than EXPLAIN.\n\nThe ANALYZE statement runs a statement and returns information about its\nexecution plan. It also shows additional columns, to check how much the\noptimizer\'s estimation about filtering and found rows are close to reality.\n\nThere is an online EXPLAIN Analyzer that you can use to share EXPLAIN and\nEXPLAIN EXTENDED output with others.\n\nEXPLAIN can acquire metadata locks in the same way that SELECT does, as it\nneeds to know table metadata and, sometimes, data as well.\n\nColumns in EXPLAIN ... SELECT\n-----------------------------\n\n+--------------------------------------+--------------------------------------+\n| Column name | Description |\n+--------------------------------------+--------------------------------------+\n| id | Sequence number that shows in which |\n| | order tables are joined. |\n+--------------------------------------+--------------------------------------+\n| select_type | What kind of SELECT the table comes |\n| | from. |\n+--------------------------------------+--------------------------------------+\n| table | Alias name of table. Materialized |\n| | temporary tables for sub queries |\n| | are named <subquery#> |\n+--------------------------------------+--------------------------------------+\n| type | How rows are found from the table |\n| | (join type). |\n+--------------------------------------+--------------------------------------+\n| possible_keys | keys in table that could be used to |\n| | find rows in the table |\n+--------------------------------------+--------------------------------------+\n| key | The name of the key that is used to |\n| | retrieve rows. NULL is no key was |\n| | used. |\n+--------------------------------------+--------------------------------------+\n| key_len | How many bytes of the key that was |\n| | used (shows if we are using only |\n| | parts of the multi-column key). |\n+--------------------------------------+--------------------------------------+\n| ref | The reference that is used as the |\n| | key value. |\n+--------------------------------------+--------------------------------------+\n| rows | An estimate of how many rows we |\n| | will find in the table for each key |\n| | lookup. |\n+--------------------------------------+--------------------------------------+\n| Extra | Extra information about this join. |\n+--------------------------------------+--------------------------------------+\n\nHere are descriptions of the values for some of the more complex columns in\nEXPLAIN ... SELECT:\n\n\"Select_type\" Column\n--------------------\n\nThe select_type column can have the following values:\n\n+-----------------+-----------------------------------+-----------------------+\n| Value | Description | Comment |\n+-----------------+-----------------------------------+-----------------------+\n| DEPENDENT | The SUBQUERY is DEPENDENT. | |\n| SUBQUERY | | |\n+-----------------+-----------------------------------+-----------------------+\n| DEPENDENT UNION | The UNION is DEPENDENT. | |\n+-----------------+-----------------------------------+-----------------------+\n| DERIVED | The SELECT is DERIVED from the | |\n| | PRIMARY. | |\n+-----------------+-----------------------------------+-----------------------+\n| MATERIALIZED | The SUBQUERY is MATERIALIZED. | Materialized tables |\n| | | will be populated at |\n| | | first access and |\n| | | will be accessed by |\n| | | the primary key (= |\n| | | one key lookup). |\n| | | Number of rows in |\n| | | EXPLAIN shows the |\n| | | cost of populating |\n| | | the table |\n+-----------------+-----------------------------------+-----------------------+\n| PRIMARY | The SELECT is in the outermost | |\n| | query, but there is also a | |\n| | SUBQUERY within it. | |\n+-----------------+-----------------------------------+-----------------------+\n| SIMPLE | It is a simple SELECT query | |\n| | without any SUBQUERY or UNION. | |\n+-----------------+-----------------------------------+-----------------------+\n| SUBQUERY | The SELECT is a SUBQUERY of the | |\n| | PRIMARY. | |\n+-----------------+-----------------------------------+-----------------------+\n| UNCACHEABLE | The SUBQUERY is UNCACHEABLE. | |\n| SUBQUERY | | |\n+-----------------+-----------------------------------+-----------------------+\n| UNCACHEABLE | The UNION is UNCACHEABLE. | |\n| UNION | | |\n+-----------------+-----------------------------------+-----------------------+\n| UNION | The SELECT is a UNION of the | |\n| | PRIMARY. | |\n+-----------------+-----------------------------------+-----------------------+\n| UNION RESULT | The result of the UNION. | |\n+-----------------+-----------------------------------+-----------------------+\n| LATERAL DERIVED | The SELECT uses a Lateral | |\n| | Derived optimization | |\n+-----------------+-----------------------------------+-----------------------+\n\n\"Type\" Column\n-------------\n\nThis column contains information on how the table is accessed.\n\n+------------------------+---------------------------------------------------+\n| Value | Description |\n+------------------------+---------------------------------------------------+\n| ALL | A full table scan is done for the table (all |\n| | rows are read). This is bad if the table is |\n| | large and the table is joined against a previous |\n| | table! This happens when the optimizer could |\n| | not find any usable index to access rows. |\n+------------------------+---------------------------------------------------+\n| const | There is only one possibly matching row in the |\n| | table. The row is read before the optimization |\n| | phase and all columns in the table are treated |\n| | as constants. |\n+------------------------+---------------------------------------------------+\n| eq_ref | A unique index is used to find the rows. This is |\n| | the best possible plan to find the row. |\n+------------------------+---------------------------------------------------+\n| fulltext | A fulltext index is used to access the rows. |\n+------------------------+---------------------------------------------------+\n| index_merge | A \'range\' access is done for for several index |\n| | and the found rows are merged. The key column |\n| | shows which keys are used. |\n+------------------------+---------------------------------------------------+\n| index_subquery | This is similar as ref, but used for sub queries |\n| | that are transformed to key lookups. |\n+------------------------+---------------------------------------------------+\n| index | A full scan over the used index. Better than |\n| | ALL but still bad if index is large and the |\n| | table is joined against a previous table. |\n+------------------------+---------------------------------------------------+\n| range | The table will be accessed with a key over one |\n| | or more value ranges. |\n+------------------------+---------------------------------------------------+\n| ref_or_null | Like \'ref\' but in addition another search for |\n| | the \'null\' value is done if the first value was |\n| | not found. This happens usually with sub queries. |\n+------------------------+---------------------------------------------------+\n| ref | A non unique index or prefix of an unique index |\n| | is used to find the rows. Good if the prefix |\n| | doesn\'t match many rows. |\n+------------------------+---------------------------------------------------+\n| system | The table has 0 or 1 rows. |\n+------------------------+---------------------------------------------------+\n| unique_subquery | This is similar as eq_ref, but used for sub |\n| | queries that are transformed to key lookups |\n+------------------------+---------------------------------------------------+\n\n\"Extra\" Column\n--------------\n\nThis column consists of one or more of the following values, separated by \';\'\n\nNote that some of these values are detected after the optimization phase.\n\nThe optimization phase can do the following changes to the WHERE clause:\n\n* Add the expressions from the ON and USING clauses to the WHERE\n clause.\n* Constant propagation: If there is column=constant, replace all column\n instances with this constant.\n* Replace all columns from \'const\' tables with their values.\n* Remove the used key columns from the WHERE (as this will be tested as\n part of the key lookup).\n* Remove impossible constant sub expressions.\n For example WHERE \'(a=1 and a=2) OR b=1\' becomes \'b=1\'.\n* Replace columns with other columns that has identical values:\n Example: WHERE a=b and a=c may be treated\n as \'WHERE a=b and a=c and b=c\'.\n* Add extra conditions to detect impossible row conditions earlier. This\n happens mainly with OUTER JOIN where we in some cases add detection\n of NULL values in the WHERE (Part of \'Not exists\' optimization).\n This can cause an unexpected \'Using where\' in the Extra column.\n* For each table level we remove expressions that have already been tested when\n we read the previous row. Example: When joining tables t1 with t2\n using the following WHERE \'t1.a=1 and t1.a=t2.b\', we don\'t have to\n test \'t1.a=1\' when checking rows in t2 as we already know that this\n expression is true.\n\n+------------------------+---------------------------------------------------+\n| Value | Description |\n+------------------------+---------------------------------------------------+\n| const row not found | The table was a system table (a table with |\n| | should exactly one row), but no row was found. |\n+------------------------+---------------------------------------------------+\n| Distinct | If distinct optimization (remove duplicates) was |','','https://mariadb.com/kb/en/explain/');
-update help_topic set description = CONCAT(description, '\n| | used. This is marked only for the last table in |\n| | the SELECT. |\n+------------------------+---------------------------------------------------+\n| Full scan on NULL key | The table is a part of the sub query and if the |\n| | value that is used to match the sub query will |\n| | be NULL, we will do a full table scan. |\n+------------------------+---------------------------------------------------+\n| Impossible HAVING | The used HAVING clause is always false so the |\n| | SELECT will return no rows. |\n+------------------------+---------------------------------------------------+\n| Impossible WHERE | The used WHERE clause is always false so the |\n| noticed after reading | SELECT will return no rows. This case was |\n| const tables. | detected after we had read all \'const\' tables |\n| | and used the column values as constant in the |\n| | WHERE clause. For example: WHERE const_column=5 |\n| | and const_column had a value of 4. |\n+------------------------+---------------------------------------------------+\n| Impossible WHERE | The used WHERE clause is always false so the |\n| | SELECT will return no rows. For example: WHERE |\n| | 1=2 |\n+------------------------+---------------------------------------------------+\n| No matching min/max | During early optimization of MIN()/MAX() values |\n| row | it was detected that no row could match the |\n| | WHERE clause. The MIN()/MAX() function will |\n| | return NULL. |\n+------------------------+---------------------------------------------------+\n| no matching row in | The table was a const table (a table with only |\n| const table | one possible matching row), but no row was found. |\n+------------------------+---------------------------------------------------+\n| No tables used | The SELECT was a sub query that did not use any |\n| | tables. For example a there was no FROM clause |\n| | or a FROM DUAL clause. |\n+------------------------+---------------------------------------------------+\n| Not exists | Stop searching after more row if we find one |\n| | single matching row. This optimization is used |\n| | with LEFT JOIN where one is explicitly searching |\n| | for rows that doesn\'t exists in the LEFT JOIN |\n| | TABLE. Example: SELECT * FROM t1 LEFT JOIN t2 on |\n| | (...) WHERE t2.not_null_column IS NULL. As |\n| | t2.not_null_column can only be NULL if there was |\n| | no matching row for on condition, we can stop |\n| | searching if we find a single matching row. |\n+------------------------+---------------------------------------------------+\n| Open_frm_only | For information_schema tables. Only the frm |\n| | (table definition file was opened) was opened |\n| | for each matching row. |\n+------------------------+---------------------------------------------------+\n| Open_full_table | For information_schema tables. A full table open |\n| | for each matching row is done to retrieve the |\n| | requested information. (Slow) |\n+------------------------+---------------------------------------------------+\n| Open_trigger_only | For information_schema tables. Only the trigger |\n| | file definition was opened for each matching row. |\n+------------------------+---------------------------------------------------+\n| Range checked for | This only happens when there was no good default |\n| each record (index | index to use but there may some index that could |\n| map: ...) | be used when we can treat all columns from |\n| | previous table as constants. For each row |\n| | combination the optimizer will decide which |\n| | index to use (if any) to fetch a row from this |\n| | table. This is not fast, but faster than a full |\n| | table scan that is the only other choice. The |\n| | index map is a bitmask that shows which index |\n| | are considered for each row condition. |\n+------------------------+---------------------------------------------------+\n| Scanned 0/1/all | For information_schema tables. Shows how many |\n| databases | times we had to do a directory scan. |\n+------------------------+---------------------------------------------------+\n| Select tables | All tables in the join was optimized away. This |\n| optimized away | happens when we are only using COUNT(*), MIN() |\n| | and MAX() functions in the SELECT and we where |\n| | able to replace all of these with constants. |\n+------------------------+---------------------------------------------------+\n| Skip_open_table | For information_schema tables. The queried table |\n| | didn\'t need to be opened. |\n+------------------------+---------------------------------------------------+\n| unique row not found | The table was detected to be a const table (a |\n| | table with only one possible matching row) |\n| | during the early optimization phase, but no row |\n| | was found. |\n+------------------------+---------------------------------------------------+\n| Using filesort | Filesort is needed to resolve the query. This |\n| | means an extra phase where we first collect all |\n| | columns to sort, sort them with a disk based |\n| | merge sort and then use the sorted set to |\n| | retrieve the rows in sorted order. If the column |\n| | set is small, we store all the columns in the |\n| | sort file to not have to go to the database to |\n| | retrieve them again. |\n+------------------------+---------------------------------------------------+\n| Using index | Only the index is used to retrieve the needed |\n| | information from the table. There is no need to |\n| | perform an extra seek to retrieve the actual |\n| | record. |\n+------------------------+---------------------------------------------------+\n| Using index condition | Like \'Using where\' but the where condition is |\n| | pushed down to the table engine for internal |\n| | optimization at the index level. |\n+------------------------+---------------------------------------------------+\n| Using index | Like \'Using index condition\' but in addition we |\n| condition(BKA) | use batch key access to retrieve rows. |\n+------------------------+---------------------------------------------------+\n| Using index for | The index is being used to resolve a GROUP BY or |\n| group-by | DISTINCT query. The rows are not read. This is |\n| | very efficient if the table has a lot of |\n| | identical index entries as duplicates are |\n| | quickly jumped over. |\n+------------------------+---------------------------------------------------+\n| Using intersect(...) | For index_merge joins. Shows which index are |\n| | part of the intersect. |\n+------------------------+---------------------------------------------------+\n| Using join buffer | We store previous row combinations in a row |\n| | buffer to be able to match each row against all |\n| | of the rows combinations in the join buffer at |\n| | one go. |\n+------------------------+---------------------------------------------------+\n| Using sort_union(...) | For index_merge joins. Shows which index are |\n| | part of the union. |\n+------------------------+---------------------------------------------------+\n| Using temporary | A temporary table is created to hold the result. |\n| | This typically happens if you are using GROUP |\n| | BY, DISTINCT or ORDER BY. |\n+------------------------+---------------------------------------------------+\n| Using where | A WHERE expression (in additional to the |\n| | possible key lookup) is used to check if the row |\n| | should be accepted. If you don\'t have \'Using |\n| | where\' together with a join type of ALL, you are |\n| | probably doing something wrong! |\n+------------------------+---------------------------------------------------+\n| Using where with | Like \'Using where\' but the where condition is |\n| pushed condition | pushed down to the table engine for internal |\n| | optimization at the row level. |\n+------------------------+---------------------------------------------------+\n| Using buffer | The UPDATE statement will first buffer the rows, |\n| | and then run the updates, rather than do updates |\n| | on the fly. See Using Buffer UPDATE Algorithm |\n| | for a detailed explanation. |\n+------------------------+---------------------------------------------------+\n\nEXPLAIN EXTENDED\n----------------\n\nThe EXTENDED keyword adds another column, filtered, to the output. This is a\npercentage estimate of the table rows that will be filtered by the condition.\n\nAn EXPLAIN EXTENDED will always throw a warning, as it adds extra Message\ninformation to a subsequent SHOW WARNINGS statement. This includes what the\nSELECT query would look like after optimizing and rewriting rules are applied\nand how the optimizer qualifies columns and tables.\n\nExamples\n--------\n\nAs synonym for DESCRIBE or SHOW COLUMNS FROM:\n\nDESCRIBE city;\n+------------+----------+------+-----+---------+----------------+\n| Field | Type | Null | Key | Default | Extra |\n+------------+----------+------+-----+---------+----------------+\n| Id | int(11) | NO | PRI | NULL | auto_increment |\n| Name | char(35) | YES | | NULL | |\n| Country | char(3) | NO | UNI | | |\n| District | char(20) | YES | MUL | | |\n| Population | int(11) | YES | | NULL | |\n+------------+----------+------+-----+---------+----------------+\n\nA simple set of examples to see how EXPLAIN can identify poor index usage:\n\nCREATE TABLE IF NOT EXISTS `employees_example` (\n `id` int(11) NOT NULL AUTO_INCREMENT,\n `first_name` varchar(30) NOT NULL,\n `last_name` varchar(40) NOT NULL,\n `position` varchar(25) NOT NULL,\n `home_address` varchar(50) NOT NULL,\n `home_phone` varchar(12) NOT NULL,\n `employee_code` varchar(25) NOT NULL,\n PRIMARY KEY (`id`),\n UNIQUE KEY `employee_code` (`employee_code`),\n KEY `first_name` (`first_name`,`last_name`)\n) ENGINE=Aria;\n\nINSERT INTO `employees_example` (`first_name`, `last_name`, `position`,\n`home_address`, `home_phone`, `employee_code`)\n VALUES\n (\'Mustapha\', \'Mond\', \'Chief Executive Officer\', \'692 Promiscuous Plaza\',\n\'326-555-3492\', \'MM1\'),\n (\'Henry\', \'Foster\', \'Store Manager\', \'314 Savage Circle\', \'326-555-3847\',\n\'HF1\'),\n (\'Bernard\', \'Marx\', \'Cashier\', \'1240 Ambient Avenue\', \'326-555-8456\', \'BM1\'),\n (\'Lenina\', \'Crowne\', \'Cashier\', \'281 Bumblepuppy Boulevard\', \'328-555-2349\',\n\'LC1\'),\n (\'Fanny\', \'Crowne\', \'Restocker\', \'1023 Bokanovsky Lane\', \'326-555-6329\',\n\'FC1\'),\n (\'Helmholtz\', \'Watson\', \'Janitor\', \'944 Soma Court\', \'329-555-2478\', \'HW1\');\n\nSHOW INDEXES FROM employees_example;\n+-------------------+------------+---------------+--------------+--------------\n+-----------+-------------+----------+--------+------+------------+---------+--\n------------+\n| Table | Non_unique | Key_name | Seq_in_index | Column_name \n | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |\nIndex_comment |\n+-------------------+------------+---------------+--------------+--------------\n+-----------+-------------+----------+--------+------+------------+---------+--\n------------+\n| employees_example | 0 | PRIMARY | 1 | id \n | A | 7 | NULL | NULL | | BTREE | |\n |\n| employees_example | 0 | employee_code | 1 |\nemployee_code | A | 7 | NULL | NULL | | BTREE \n | | |\n| employees_example | 1 | first_name | 1 | first_name \n | A | NULL | NULL | NULL | | BTREE | |\n |') WHERE help_topic_id = 468;
-update help_topic set description = CONCAT(description, '\n| employees_example | 1 | first_name | 2 | last_name \n | A | NULL | NULL | NULL | | BTREE | |\n |\n+-------------------+------------+---------------+--------------+--------------\n+-----------+-------------+----------+--------+------+------------+---------+--\n------------+\n\nSELECT on a primary key:\n\nEXPLAIN SELECT * FROM employees_example WHERE id=1;\n+------+-------------+-------------------+-------+---------------+---------+---\n-----+-------+------+-------+\n| id | select_type | table | type | possible_keys | key |\nkey_len | ref | rows | Extra |\n+------+-------------+-------------------+-------+---------------+---------+---\n-----+-------+------+-------+\n| 1 | SIMPLE | employees_example | const | PRIMARY | PRIMARY | 4\n | const | 1 | |\n+------+-------------+-------------------+-------+---------------+---------+---\n-----+-------+------+-------+\n\nThe type is const, which means that only one possible result could be\nreturned. Now, returning the same record but searching by their phone number:\n\nEXPLAIN SELECT * FROM employees_example WHERE home_phone=\'326-555-3492\';\n+------+-------------+-------------------+------+---------------+------+-------\n-+------+------+-------------+\n| id | select_type | table | type | possible_keys | key |\nkey_len | ref | rows | Extra |\n+------+-------------+-------------------+------+---------------+------+-------\n-+------+------+-------------+\n| 1 | SIMPLE | employees_example | ALL | NULL | NULL | NULL \n | NULL | 6 | Using where |\n+------+-------------+-------------------+------+---------------+------+-------\n-+------+------+-------------+\n\nHere, the type is All, which means no index could be used. Looking at the rows\ncount, a full table scan (all six rows) had to be performed in order to\nretrieve the record. If it\'s a requirement to search by phone number, an index\nwill have to be created.\n\nSHOW EXPLAIN example:\n\nSHOW EXPLAIN FOR 1;\n+------+-------------+-------+-------+---------------+------+---------+------+-\n-------+-------------+\n| id | select_type | table | type | possible_keys | key | key_len | ref |\nrows | Extra |\n+------+-------------+-------+-------+---------------+------+---------+------+-\n-------+-------------+\n| 1 | SIMPLE | tbl | index | NULL | a | 5 | NULL |\n1000107 | Using index |\n+------+-------------+-------+-------+---------------+------+---------+------+-\n-------+-------------+\n1 row in set, 1 warning (0.00 sec)\n\nExample of ref_or_null Optimization\n-----------------------------------\n\nSELECT * FROM table_name\n WHERE key_column=expr OR key_column IS NULL;\n\nref_or_null is something that often happens when you use subqueries with NOT\nIN as then one has to do an extra check for NULL values if the first value\ndidn\'t have a matching row.\n\nURL: https://mariadb.com/kb/en/explain/') WHERE help_topic_id = 468;
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (469,28,'EXPLAIN ANALYZE','The syntax for the EXPLAIN ANALYZE feature was changed to ANALYZE statement,\navailable since MariaDB 10.1.0. See ANALYZE statement.\n\nURL: https://mariadb.com/kb/en/explain-analyze/','','https://mariadb.com/kb/en/explain-analyze/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (470,28,'EXPLAIN FORMAT=JSON','Synopsis\n--------\n\nEXPLAIN FORMAT=JSON is a variant of EXPLAIN command that produces output in\nJSON form. The output always has one row which has only one column titled\n\"JSON\". The contents are a JSON representation of the query plan, formatted\nfor readability:\n\nEXPLAIN FORMAT=JSON SELECT * FROM t1 WHERE col1=1\\G\n\n*************************** 1. row ***************************\nEXPLAIN: {\n \"query_block\": {\n \"select_id\": 1,\n \"table\": {\n \"table_name\": \"t1\",\n \"access_type\": \"ALL\",\n \"rows\": 1000,\n \"filtered\": 100,\n \"attached_condition\": \"(t1.col1 = 1)\"\n }\n }\n}\n\nOutput is different from MySQL\n------------------------------\n\nThe output of MariaDB\'s EXPLAIN FORMAT=JSON is different from EXPLAIN\nFORMAT=JSON in MySQL.The reasons for that are:\n\n* MySQL\'s output has deficiencies. Some are listed here: EXPLAIN FORMAT=JSON\nin MySQL\n* The output of MySQL\'s EXPLAIN FORMAT=JSON is not defined. Even MySQL\nWorkbench has trouble parsing it (see this blog post).\n* MariaDB has query optimizations that MySQL does not have. Ergo, MariaDB\ngenerates query plans that MySQL does not generate.\n\nA (as yet incomplete) list of how MariaDB\'s output is different from MySQL can\nbe found here: EXPLAIN FORMAT=JSON differences from MySQL.\n\nOutput Format\n-------------\n\nTODO: MariaDB\'s output format description.\n\nURL: https://mariadb.com/kb/en/explain-format-json/','','https://mariadb.com/kb/en/explain-format-json/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (471,28,'DESCRIBE','Syntax\n------\n\n{DESCRIBE | DESC} tbl_name [col_name | wild]\n\nDescription\n-----------\n\nDESCRIBE provides information about the columns in a table. It is a shortcut\nfor SHOW COLUMNS FROM. These statements also display information for views.\n\ncol_name can be a column name, or a string containing the SQL \"%\" and \"_\"\nwildcard characters to obtain output only for the columns with names matching\nthe string. There is no need to enclose the string within quotes unless it\ncontains spaces or other special characters.\n\nDESCRIBE city;\n+------------+----------+------+-----+---------+----------------+\n| Field | Type | Null | Key | Default | Extra |\n+------------+----------+------+-----+---------+----------------+\n| Id | int(11) | NO | PRI | NULL | auto_increment |\n| Name | char(35) | YES | | NULL | |\n| Country | char(3) | NO | UNI | | |\n| District | char(20) | YES | MUL | | |\n| Population | int(11) | YES | | NULL | |\n+------------+----------+------+-----+---------+----------------+\n\nThe description for SHOW COLUMNS provides more information about the output\ncolumns.\n\nURL: https://mariadb.com/kb/en/describe/','','https://mariadb.com/kb/en/describe/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (472,29,'Identifier Names','Databases, tables, indexes, columns, aliases, views, stored routines,\ntriggers, events, variables, partitions, tablespaces, savepoints, labels,\nusers, roles, are collectively known as identifiers, and have certain rules\nfor naming.\n\nIdentifiers may be quoted using the backtick character - `. Quoting is\noptional for identifiers that don\'t contain special characters, or for\nidentifiers that are not reserved words. If the ANSI_QUOTES SQL_MODE flag is\nset, double quotes (\") can also be used to quote identifiers. If the MSSQL\nflag is set, square brackets ([ and ]) can be used for quoting.\n\nEven when using reserved words as names, fully qualified names do not need to\nbe quoted. For example, test.select has only one possible meaning, so it is\ncorrectly parsed even without quotes.\n\nUnquoted\n--------\n\nThe following characters are valid, and allow identifiers to be unquoted:\n\n* ASCII: [0-9,a-z,A-Z$_] (numerals 0-9, basic Latin letters, both lowercase\nand uppercase, dollar sign, underscore)\n* Extended: U+0080 .. U+FFFF\n\nQuoted\n------\n\nThe following characters are valid, but identifiers using them must be quoted:\n\n* ASCII: U+0001 .. U+007F (full Unicode Basic Multilingual Plane (BMP) except\nfor U+0000)\n* Extended: U+0080 .. U+FFFF \n* Identifier quotes can themselves be used as part of an identifier, as long\nas they are quoted.\n\nFurther Rules\n-------------\n\nThere are a number of other rules for identifiers:\n\n* Identifiers are stored as Unicode (UTF-8)\n* Identifiers may or may not be case-sensitive. See Indentifier\nCase-sensitivity.\n* Database, table and column names can\'t end with space characters\n* Identifier names may begin with a numeral, but can\'t only contain numerals\nunless quoted.\n* An identifier starting with a numeral, followed by an \'e\', may be parsed as\na floating point number, and needs to be quoted.\n* Identifiers are not permitted to contain the ASCII NUL character (U+0000)\nand supplementary characters (U+10000 and higher).\n* Names such as 5e6, 9e are not prohibited, but it\'s strongly recommended not\nto use them, as they could lead to ambiguity in certain contexts, being\ntreated as a number or expression.\n* User variables cannot be used as part of an identifier, or as an identifier\nin an SQL statement.\n\nQuote Character\n---------------\n\nThe regular quote character is the backtick character - `, but if the\nANSI_QUOTES SQL_MODE option is specified, a regular double quote - \" may be\nused as well.\n\nThe backtick character can be used as part of an identifier. In that case the\nidentifier needs to be quoted. The quote character can be the backtick, but in\nthat case, the backtick in the name must be escaped with another backtick.\n\nMaximum Length\n--------------\n\n* Databases, tables, columns, indexes, constraints, stored routines, triggers,\nevents, views, tablespaces, servers and log file groups have a maximum length\nof 64 characters.\n* Compound statement labels have a maximum length of 16 characters\n* Aliases have a maximum length of 256 characters, except for column aliases\nin CREATE VIEW statements, which are checked against the maximum column length\nof 64 characters (not the maximum alias length of 256 characters).\n* Users have a maximum length of 80 characters.\n* Roles have a maximum length of 128 characters.\n* Multi-byte characters do not count extra towards towards the character limit.\n\nMultiple Identifiers\n--------------------\n\nMariaDB allows the column name to be used on its own if the reference will be\nunambiguous, or the table name to be used with the column name, or all three\nof the database, table and column names. A period is used to separate the\nidentifiers, and the period can be surrounded by spaces.\n\nExamples\n--------\n\nUsing the period to separate identifiers:\n\nCREATE TABLE t1 (i int);\n\nINSERT INTO t1(i) VALUES (10);\n\nSELECT i FROM t1;\n+------+\n| i |\n+------+\n| 10 |\n+------+\n\nSELECT t1.i FROM t1;\n+------+\n| i |\n+------+\n| 10 |\n+------+\n\nSELECT test.t1.i FROM t1;\n+------+\n| i |\n+------+\n| 10 |\n+------+\n\nThe period can be separated by spaces:\n\nSELECT test . t1 . i FROM t1;\n+------+\n| i |\n+------+\n| 10 |\n+------+\n\nResolving ambiguity:\n\nCREATE TABLE t2 (i int);\n\nSELECT i FROM t1 LEFT JOIN t2 ON t1.i=t2.i;\nERROR 1052 (23000): Column \'i\' in field list is ambiguous\n\nSELECT t1.i FROM t1 LEFT JOIN t2 ON t1.i=t2.i;\n+------+\n| i |\n+------+\n| 10 |\n+------+\n\nCreating a table with characters that require quoting:\n\nCREATE TABLE 123% (i int);\nERROR 1064 (42000): You have an error in your SQL syntax; \n check the manual that corresponds to your MariaDB server version for the\nright syntax \n to use near \'123% (i int)\' at line 1\n\nCREATE TABLE `123%` (i int);\nQuery OK, 0 rows affected (0.85 sec)\n\nCREATE TABLE `TABLE` (i int);\nQuery OK, 0 rows affected (0.36 sec)\n\nUsing double quotes as a quoting character:\n\nCREATE TABLE \"SELECT\" (i int);\nERROR 1064 (42000): You have an error in your SQL syntax; \n check the manual that corresponds to your MariaDB server version for the\nright syntax \n to use near \'\"SELECT\" (i int)\' at line 1\n\nSET sql_mode=\'ANSI_QUOTES\';\nQuery OK, 0 rows affected (0.03 sec)\n\nCREATE TABLE \"SELECT\" (i int);\nQuery OK, 0 rows affected (0.46 sec)\n\nUsing an identifier quote as part of an identifier name:\n\nSHOW VARIABLES LIKE \'sql_mode\';\n+---------------+-------------+\n| Variable_name | Value |\n+---------------+-------------+\n| sql_mode | ANSI_QUOTES |\n+---------------+-------------+\n\nCREATE TABLE \"fg`d\" (i int);\nQuery OK, 0 rows affected (0.34 sec)\n\nCreating the table named * (Unicode number: U+002A) requires quoting.\n\nCREATE TABLE `*` (a INT);\n\nFloating point ambiguity:\n\nCREATE TABLE 8984444cce5d (x INT);\nQuery OK, 0 rows affected (0.38 sec)\n\nCREATE TABLE 8981e56cce5d (x INT);\nERROR 1064 (42000): You have an error in your SQL syntax; \n check the manual that corresponds to your MariaDB server version for the\nright syntax \n to use near \'8981e56cce5d (x INT)\' at line 1\n\nCREATE TABLE `8981e56cce5d` (x INT);\nQuery OK, 0 rows affected (0.39 sec)\n\nURL: https://mariadb.com/kb/en/identifier-names/','','https://mariadb.com/kb/en/identifier-names/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (473,29,'Identifier Case-sensitivity','Whether objects are case-sensitive or not is partly determined by the\nunderlying operating system. Unix-based systems are case-sensitive, Windows is\nnot, while Mac OS X is usually case-insensitive by default, but devices can be\nconfigured as case-sensitive using Disk Utility.\n\nDatabase, table, table aliases and trigger names are affected by the systems\ncase-sensitivity, while index, column, column aliases, stored routine and\nevent names are never case sensitive.\n\nLog file group name are case sensitive.\n\nThe lower_case_table_names server system variable plays a key role. It\ndetermines whether table names, aliases and database names are compared in a\ncase-sensitive manner. If set to 0 (the default on Unix-based systems), table\nnames and aliases and database names are compared in a case-sensitive manner.\nIf set to 1 (the default on Windows), names are stored in lowercase and not\ncompared in a case-sensitive manner. If set to 2 (the default on Mac OS X),\nnames are stored as declared, but compared in lowercase.\n\nIt is thus possible to make Unix-based systems behave like Windows and ignore\ncase-sensitivity, but the reverse is not true, as the underlying Windows\nfilesystem can not support this.\n\nEven on case-insensitive systems, you are required to use the same case\nconsistently within the same statement. The following statement fails, as it\nrefers to the table name in a different case.\n\nSELECT * FROM a_table WHERE A_table.id>10;\n\nFor a full list of identifier naming rules, see Identifier Names.\n\nPlease note that lower_case_table_names is a database initialization\nparameter. This means that, along with innodb_page_size, this variable must be\nset before running mysql_install_db, and will not change the behavior of\nservers unless applied before the creation of core system databases.\n\nURL: https://mariadb.com/kb/en/identifier-case-sensitivity/','','https://mariadb.com/kb/en/identifier-case-sensitivity/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (474,29,'Binary Literals','Binary literals can be written in one of the following formats: b\'value\',\nB\'value\' or 0bvalue, where value is a string composed by 0 and 1 digits.\n\nBinary literals are interpreted as binary strings, and are convenient to\nrepresent VARBINARY, BINARY or BIT values.\n\nTo convert a binary literal into an integer, just add 0.\n\nExamples\n--------\n\nPrinting the value as a binary string:\n\nSELECT 0b1000001;\n+-----------+\n| 0b1000001 |\n+-----------+\n| A |\n+-----------+\n\nConverting the same value into a number:\n\nSELECT 0b1000001+0;\n+-------------+\n| 0b1000001+0 |\n+-------------+\n| 65 |\n+-------------+\n\nURL: https://mariadb.com/kb/en/binary-literals/','','https://mariadb.com/kb/en/binary-literals/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (475,29,'Boolean Literals','In MariaDB, FALSE is a synonym of 0 and TRUE is a synonym of 1. These\nconstants are case insensitive, so TRUE, True, and true are equivalent.\n\nThese terms are not synonyms of 0 and 1 when used with the IS operator. So,\nfor example, 10 IS TRUE returns 1, while 10 = TRUE returns 0 (because 1 != 10).\n\nThe IS operator accepts a third constant exists: UNKNOWN. It is always a\nsynonym of NULL.\n\nTRUE and FALSE are reserved words, while UNKNOWN is not.\n\nURL: https://mariadb.com/kb/en/sql-language-structure-boolean-literals/','','https://mariadb.com/kb/en/sql-language-structure-boolean-literals/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (476,29,'Date and Time Literals','Standard syntaxes\n-----------------\n\nMariaDB supports the SQL standard and ODBC syntaxes for DATE, TIME and\nTIMESTAMP literals.\n\nSQL standard syntax:\n\n* DATE \'string\'\n* TIME \'string\'\n* TIMESTAMP \'string\'\n\nODBC syntax:\n\n* {d \'string\'}\n* {t \'string\'}\n* {ts \'string\'}\n\nThe timestamp literals are treated as DATETIME literals, because in MariaDB\nthe range of DATETIME is closer to the TIMESTAMP range in the SQL standard.\n\nstring is a string in a proper format, as explained below.\n\nDATE literals\n-------------\n\nA DATE string is a string in one of the following formats: \'YYYY-MM-DD\' or\n\'YY-MM-DD\'. Note that any punctuation character can be used as delimiter. All\ndelimiters must consist of 1 character. Different delimiters can be used in\nthe same string. Delimiters are optional (but if one delimiter is used, all\ndelimiters must be used).\n\nA DATE literal can also be an integer, in one of the following formats:\nYYYYMMDD or YYMMDD.\n\nAll the following DATE literals are valid, and they all represent the same\nvalue:\n\n\'19940101\'\n\'940101\'\n\'1994-01-01\'\n\'94/01/01\'\n\'1994-01/01\'\n\'94:01!01\'\n19940101\n940101\n\nDATETIME literals\n-----------------\n\nA DATETIME string is a string in one of the following formats: \'YYYY-MM-DD\nHH:MM:SS\' or \'YY-MM-DD HH:MM:SS\'. Note that any punctuation character can be\nused as delimiter for the date part and for the time part. All delimiters must\nconsist of 1 character. Different delimiters can be used in the same string.\nThe hours, minutes and seconds parts can consist of one character. For this\nreason, delimiters are mandatory for DATETIME literals.\n\nThe delimiter between the date part and the time part can be a T or any\nsequence of space characters (including tabs, new lines and carriage returns).\n\nA DATETIME literal can also be a number, in one of the following formats:\nYYYYMMDDHHMMSS, YYMMDDHHMMSS, YYYYMMDD or YYMMDD. In this case, all the time\nsubparts must consist of 2 digits.\n\nAll the following DATE literals are valid, and they all represent the same\nvalue:\n\n\'1994-01-01T12:30:03\'\n\'1994/01/01\\n\\t 12+30+03\'\n\'1994/01\\\\01\\n\\t 12+30-03\'\n\'1994-01-01 12:30:3\'\n\nTIME literals\n-------------\n\nA TIME string is a string in one of the following formats: \'D HH:MM:SS\',\n\'HH:MM:SS, \'D HH:MM\', \'HH:MM\', \'D HH\', or \'SS\'. D is a value from 0 to 34\nwhich represents days. : is the only allowed delimiter for TIME literals.\nDelimiters are mandatory, with an exception: the \'HHMMSS\' format is allowed.\nWhen delimiters are used, each part of the literal can consist of one\ncharacter.\n\nA TIME literal can also be a number in one of the following formats: HHMMSS,\nMMSS, or SS.\n\nThe following literals are equivalent:\n\n\'09:05:00\'\n\'9:05:0\'\n\'9:5:0\'\n\'090500\'\n\n2-digit years\n-------------\n\nThe year part in DATE and DATETIME literals is determined as follows:\n\n* 70 - 99 = 1970 - 1999\n* 00 - 69 = 2000 - 2069\n\nMicroseconds\n------------\n\nDATETIME and TIME literals can have an optional microseconds part. For both\nstring and numeric forms, it is expressed as a decimal part. Up to 6 decimal\ndigits are allowed. Examples:\n\n\'12:30:00.123456\'\n123000.123456\n\nSee Microseconds in MariaDB for details.\n\nDate and time literals and the SQL_MODE\n---------------------------------------\n\nUnless the SQL_MODE NO_ZERO_DATE flag is set, some special values are allowed:\nthe \'0000-00-00\' DATE, the \'00:00:00\' TIME, and the 0000-00-00 00:00:00\nDATETIME.\n\nIf the ALLOW_INVALID_DATES flag is set, the invalid dates (for example, 30th\nFebruary) are allowed. If not, if the NO_ZERO_DATE is set, an error is\nproduced; otherwise, a zero-date is returned.\n\nUnless the NO_ZERO_IN_DATE flag is set, each subpart of a date or time value\n(years, hours...) can be set to 0.\n\nURL: https://mariadb.com/kb/en/date-and-time-literals/','','https://mariadb.com/kb/en/date-and-time-literals/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (477,29,'Hexadecimal Literals','Hexadecimal literals can be written using any of the following syntaxes:\n\n* x\'value\'\n* X\'value\' (SQL standard)\n* 0xvalue (ODBC)\n\nvalue is a sequence of hexadecimal digits (from 0 to 9 and from A to F). The\ncase of the digits does not matter. With the first two syntaxes, value must\nconsist of an even number of digits. With the last syntax, digits can be even,\nand they are treated as if they had an extra 0 at the beginning.\n\nNormally, hexadecimal literals are interpreted as binary string, where each\npair of digits represents a character. When used in a numeric context, they\nare interpreted as integers. (See the example below). In no case can a\nhexadecimal literal be a decimal number.\n\nThe first two syntaxes; X\'value\' and x\'value, follow the SQL standard, and\nbehave as a string in all contexts in MariaDB since MariaDB 10.0.3 and MariaDB\n5.5.31 (fixing MDEV-4489). The latter syntax, 0xvalue, is a MySQL/MariaDB\nextension for hex hybrids and behaves as a string or as a number depending on\ncontext. MySQL treats all syntaxes the same, so there may be different results\nin MariaDB and MySQL (see below).\n\nExamples\n--------\n\nRepresenting the a character with the three syntaxes explained above:\n\nSELECT x\'61\', X\'61\', 0x61;\n+-------+-------+------+\n| x\'61\' | X\'61\' | 0x61 |\n+-------+-------+------+\n| a | a | a |\n+-------+-------+------+\n\nHexadecimal literals in a numeric context:\n\nSELECT 0 + 0xF, -0xF;\n+---------+------+\n| 0 + 0xF | -0xF |\n+---------+------+\n| 15 | -15 |\n+---------+------+\n\nFun with Types\n--------------\n\nCREATE TABLE t1 (a INT, b VARCHAR(10));\nINSERT INTO t1 VALUES (0x31, 0x61),(COALESCE(0x31), COALESCE(0x61));\n\nSELECT * FROM t1;\n+------+------+\n| a | b |\n+------+------+\n| 49 | a |\n| 1 | a |\n+------+------+\n\nThe reason for the differing results above is that when 0x31 is inserted\ndirectly to the column, it\'s treated as a number, while when 0x31 is passed to\nCOALESCE(), it\'s treated as a string, because:\n\n* HEX values have a string data type by default.\n* COALESCE() has the same data type as the argument.\n\nDifferences Between MariaDB and MySQL\n-------------------------------------\n\nSELECT x\'0a\'+0;\n+---------+\n| x\'0a\'+0 |\n+---------+\n| 0 |\n+---------+\n1 row in set, 1 warning (0.00 sec)\n\nWarning (Code 1292): Truncated incorrect DOUBLE value: \'\\x0A\'\n\nSELECT X\'0a\'+0;\n+---------+\n| X\'0a\'+0 |\n+---------+\n| 0 |\n+---------+\n1 row in set, 1 warning (0.00 sec)\n\nWarning (Code 1292): Truncated incorrect DOUBLE value: \'\\x0A\'\n\nSELECT 0x0a+0;\n+--------+\n| 0x0a+0 |\n+--------+\n| 10 |\n+--------+\n\nIn MySQL (up until at least MySQL 8.0.26):\n\nSELECT x\'0a\'+0;\n+---------+\n| x\'0a\'+0 |\n+---------+\n| 10 |\n+---------+\n\nSELECT X\'0a\'+0;\n+---------+\n| X\'0a\'+0 |\n+---------+\n| 10 |\n+---------+\n\nSELECT 0x0a+0;\n+--------+\n| 0x0a+0 |\n+--------+\n| 10 |\n+--------+\n\nURL: https://mariadb.com/kb/en/hexadecimal-literals/','','https://mariadb.com/kb/en/hexadecimal-literals/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (478,29,'Identifier Qualifiers','Qualifiers are used within SQL statements to reference data structures, such\nas databases, tables, or columns. For example, typically a SELECT query\ncontains references to some columns and at least one table.\n\nQualifiers can be composed by one or more identifiers, where the initial parts\naffect the context within which the final identifier is interpreted:\n\n* For a database, only the database identifier needs to be specified.\n* For objects which are contained in a database (like tables, views,\nfunctions, etc) the database identifier can be specified. If no database is\nspecified, the current database is assumed (see USE and DATABASE() for more\ndetails). If there is no default database and no database is specified, an\nerror is issued.\n* For column names, the table and the database are generally obvious from the\ncontext of the statement. It is however possible to specify the table\nidentifier, or the database identifier plus the table identifier.\n* An identifier is fully-qualified if it contains all possible qualifiers, for\nexample, the following column is fully qualified: db_name.tbl_name.col_name.\n\nIf a qualifier is composed by more than one identifier, a dot (.) must be used\nas a separator. All identifiers can be quoted individually. Extra spacing\n(including new lines and tabs) is allowed.\n\nAll the following examples are valid:\n\n* db_name.tbl_name.col_name\n* tbl_name\n* `db_name`.`tbl_name`.`col_name`\n* `db_name` . `tbl_name`\n* db_name. tbl_name\n\nIf a table identifier is prefixed with a dot (.), the default database is\nassumed. This syntax is supported for ODBC compliance, but has no practical\neffect on MariaDB. These qualifiers are equivalent:\n\n* tbl_name\n* . tbl_name\n* .`tbl_name`\n* . `tbl_name`\n\nFor DML statements, it is possible to specify a list of the partitions using\nthe PARTITION clause. See Partition Pruning and Selection for details.\n\nURL: https://mariadb.com/kb/en/identifier-qualifiers/','','https://mariadb.com/kb/en/identifier-qualifiers/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (479,29,'Identifier to File Name Mapping','Some identifiers map to a file name on the filesystem. Databases each have\ntheir own directory, while, depending on the storage engine, table names and\nindex names may map to a file name.\n\nNot all characters that are allowed in table names can be used in file names.\nEvery filesystem has its own rules of what characters can be used in file\nnames. To let the user create tables using all characters allowed in the SQL\nStandard and to not depend on whatever particular filesystem a particular\ndatabase resides, MariaDB encodes \"potentially unsafe\" characters in the table\nname to derive the corresponding file name.\n\nThis is implemented using a special character set. MariaDB converts a table\nname to the \"filename\" character set to get the file name for this table. And\nit converts the file name from the \"filename\" character set to, for example,\nutf8 to get the table name for this file name.\n\nThe conversion rules are as follows: if the identifier is made up only of\nbasic Latin numbers, letters and/or the underscore character, the encoding\nmatches the name (see however Identifier Case Sensitivity). Otherwise they are\nencoded according to the following table:\n\n+-----------------+------------+-----------+--------+-----------+-----------+\n| Code Range | Pattern | Number | Used | Unused | Blocks |\n+-----------------+------------+-----------+--------+-----------+-----------+\n| 00C0..017F | [@][0..4][ | 5*20= 100 | 97 | 3 | Latin-1 |\n| | ..z] | | | | Supplemen |\n| | | | | | + Latin |\n| | | | | | Extended- |\n| | | | | | |\n+-----------------+------------+-----------+--------+-----------+-----------+\n| 0370..03FF | [@][5..9][ | 5*20= 100 | 88 | 12 | Greek |\n| | ..z] | | | | and |\n| | | | | | Coptic |\n+-----------------+------------+-----------+--------+-----------+-----------+\n| 0400..052F | [@][g..z][ | 20*7= 140 | 137 | 3 | Cyrillic |\n| | ..6] | | | | + |\n| | | | | | Cyrillic |\n| | | | | | Supplemen |\n| | | | | | |\n+-----------------+------------+-----------+--------+-----------+-----------+\n| 0530..058F | [@][g..z][ | 20*2= 40 | 38 | 2 | Armenian |\n| | ..8] | | | | |\n+-----------------+------------+-----------+--------+-----------+-----------+\n| 2160..217F | [@][g..z][ | 20*1= 20 | 16 | 4 | Number |\n| | ] | | | | Forms |\n+-----------------+------------+-----------+--------+-----------+-----------+\n| 0180..02AF | [@][g..z][ | 20*11=220 | 203 | 17 | Latin |\n| | ..k] | | | | Extended- |\n| | | | | | + IPA |\n| | | | | | Extension |\n| | | | | | |\n+-----------------+------------+-----------+--------+-----------+-----------+\n| 1E00..1EFF | [@][g..z][ | 20*7= 140 | 136 | 4 | Latin |\n| | ..r] | | | | Extended |\n| | | | | | Additiona |\n| | | | | | |\n+-----------------+------------+-----------+--------+-----------+-----------+\n| 1F00..1FFF | [@][g..z][ | 20*8= 160 | 144 | 16 | Greek |\n| | ..z] | | | | Extended |\n+-----------------+------------+-----------+--------+-----------+-----------+\n| .... .... | [@][a..f][ | 6*20= 120 | 0 | 120 | RESERVED |\n| | ..z] | | | | |\n+-----------------+------------+-----------+--------+-----------+-----------+\n| 24B6..24E9 | [@][@][a.. | 26 | 26 | 0 | Enclosed |\n| | ] | | | | Alphanume |\n| | | | | | ics |\n+-----------------+------------+-----------+--------+-----------+-----------+\n| FF21..FF5A | [@][a..z][ | 26 | 26 | 0 | Halfwidth |\n| | ] | | | | and |\n| | | | | | Fullwidth |\n| | | | | | forms |\n+-----------------+------------+-----------+--------+-----------+-----------+\n\nCode Range values are UCS-2.\n\nAll of this encoding happens transparently at the filesystem level with one\nexception. Until MySQL 5.1.6, an old encoding was used. Identifiers created in\na version before MySQL 5.1.6, and which haven\'t been updated to the new\nencoding, the server prefixes mysql50 to their name.\n\nExamples\n--------\n\nFind the file name for a table with a non-Latin1 name:\n\nselect cast(convert(\"this_is_таблица\" USING filename) as binary);\n+------------------------------------------------------------------+\n| cast(convert(\"this_is_таблица\" USING filename) as binary) |\n+------------------------------------------------------------------+\n| this_is_@y0@g0@h0@r0@o0@i1@g0 |\n+------------------------------------------------------------------+\n\nFind the table name for a file name:\n\nselect convert(_filename \"this_is_@y0@g0@h0@r0@o0@i1@g0\" USING utf8);\n+---------------------------------------------------------------+\n| convert(_filename \"this_is_@y0@g0@h0@r0@o0@i1@g0\" USING utf8) |\n+---------------------------------------------------------------+\n| this_is_таблица |\n+---------------------------------------------------------------+\n\nAn old table created before MySQL 5.1.6, with the old encoding:\n\nSHOW TABLES;\n+--------------------+\n| Tables_in_test |\n+--------------------+\n| #mysql50#table@1 |\n+--------------------+\n\nThe prefix needs to be supplied to reference this table:\n\nSHOW COLUMNS FROM `table@1`;\nERROR 1146 (42S02): Table \'test.table@1\' doesn\'t exist\n\nSHOW COLUMNS FROM `#mysql50#table@1`;\n+-------+---------+------+-----+---------+-------+\n| Field | Type | Null | Key | Default | Extra |\n+-------+---------+------+-----+---------+-------+\n| i | int(11) | YES | | NULL | |\n+-------+---------+------+-----+---------+-------+\n\nURL: https://mariadb.com/kb/en/identifier-to-file-name-mapping/','','https://mariadb.com/kb/en/identifier-to-file-name-mapping/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (480,29,'Numeric Literals','Numeric literals are written as a sequence of digits from 0 to 9. Initial\nzeros are ignored. A sign can always precede the digits, but it is optional\nfor positive numbers. In decimal numbers, the integer part and the decimal\npart are divided with a dot (.).\n\nIf the integer part is zero, it can be omitted, but the literal must begin\nwith a dot.\n\nThe notation with exponent can be used. The exponent is preceded by an E or e\ncharacter. The exponent can be preceded by a sign and must be an integer. A\nnumber N with an exponent part X, is calculated as N * POW(10, X).\n\nIn some cases, adding zeroes at the end of a decimal number can increment the\nprecision of the expression where the number is used. For example, PI() by\ndefault returns a number with 6 decimal digits. But the PI()+0.0000000000\nexpression (with 10 zeroes) returns a number with 10 decimal digits.\n\nHexadecimal literals are interpreted as numbers when used in numeric contexts.\n\nExamples\n--------\n\n10\n+10\n-10\n\nAll these literals are equivalent:\n\n0.1\n.1\n+0.1\n+.1\n\nWith exponents:\n\n0.2E3 -- 0.2 * POW(10, 3) = 200\n.2e3\n.2e+2\n1.1e-10 -- 0.00000000011\n-1.1e10 -- -11000000000\n\nURL: https://mariadb.com/kb/en/numeric-iterals/','','https://mariadb.com/kb/en/numeric-iterals/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (481,29,'Reserved Words','The following is a list of all reserved words in MariaDB.\n\nReserved words cannot be used as Identifiers, unless they are quoted.\n\nThe definitive list of reserved words for each version can be found by\nexamining the sql/lex.h and sql/sql_yacc.yy files.\n\nReserved Words\n--------------\n\n+--------------------------------------------+--------------------------------+\n| Keyword | Notes |\n+--------------------------------------------+--------------------------------+\n| ACCESSIBLE | |\n+--------------------------------------------+--------------------------------+\n| ADD | |\n+--------------------------------------------+--------------------------------+\n| ALL | |\n+--------------------------------------------+--------------------------------+\n| ALTER | |\n+--------------------------------------------+--------------------------------+\n| ANALYZE | |\n+--------------------------------------------+--------------------------------+\n| AND | |\n+--------------------------------------------+--------------------------------+\n| AS | |\n+--------------------------------------------+--------------------------------+\n| ASC | |\n+--------------------------------------------+--------------------------------+\n| ASENSITIVE | |\n+--------------------------------------------+--------------------------------+\n| BEFORE | |\n+--------------------------------------------+--------------------------------+\n| BETWEEN | |\n+--------------------------------------------+--------------------------------+\n| BIGINT | |\n+--------------------------------------------+--------------------------------+\n| BINARY | |\n+--------------------------------------------+--------------------------------+\n| BLOB | |\n+--------------------------------------------+--------------------------------+\n| BOTH | |\n+--------------------------------------------+--------------------------------+\n| BY | |\n+--------------------------------------------+--------------------------------+\n| CALL | |\n+--------------------------------------------+--------------------------------+\n| CASCADE | |\n+--------------------------------------------+--------------------------------+\n| CASE | |\n+--------------------------------------------+--------------------------------+\n| CHANGE | |\n+--------------------------------------------+--------------------------------+\n| CHAR | |\n+--------------------------------------------+--------------------------------+\n| CHARACTER | |\n+--------------------------------------------+--------------------------------+\n| CHECK | |\n+--------------------------------------------+--------------------------------+\n| COLLATE | |\n+--------------------------------------------+--------------------------------+\n| COLUMN | |\n+--------------------------------------------+--------------------------------+\n| CONDITION | |\n+--------------------------------------------+--------------------------------+\n| CONSTRAINT | |\n+--------------------------------------------+--------------------------------+\n| CONTINUE | |\n+--------------------------------------------+--------------------------------+\n| CONVERT | |\n+--------------------------------------------+--------------------------------+\n| CREATE | |\n+--------------------------------------------+--------------------------------+\n| CROSS | |\n+--------------------------------------------+--------------------------------+\n| CURRENT_DATE | |\n+--------------------------------------------+--------------------------------+\n| CURRENT_ROLE | |\n+--------------------------------------------+--------------------------------+\n| CURRENT_TIME | |\n+--------------------------------------------+--------------------------------+\n| CURRENT_TIMESTAMP | |\n+--------------------------------------------+--------------------------------+\n| CURRENT_USER | |\n+--------------------------------------------+--------------------------------+\n| CURSOR | |\n+--------------------------------------------+--------------------------------+\n| DATABASE | |\n+--------------------------------------------+--------------------------------+\n| DATABASES | |\n+--------------------------------------------+--------------------------------+\n| DAY_HOUR | |\n+--------------------------------------------+--------------------------------+\n| DAY_MICROSECOND | |\n+--------------------------------------------+--------------------------------+\n| DAY_MINUTE | |\n+--------------------------------------------+--------------------------------+\n| DAY_SECOND | |\n+--------------------------------------------+--------------------------------+\n| DEC | |\n+--------------------------------------------+--------------------------------+\n| DECIMAL | |\n+--------------------------------------------+--------------------------------+\n| DECLARE | |\n+--------------------------------------------+--------------------------------+\n| DEFAULT | |\n+--------------------------------------------+--------------------------------+\n| DELAYED | |\n+--------------------------------------------+--------------------------------+\n| DELETE | |\n+--------------------------------------------+--------------------------------+\n| DELETE_DOMAIN_ID | |\n+--------------------------------------------+--------------------------------+\n| DESC | |\n+--------------------------------------------+--------------------------------+\n| DESCRIBE | |\n+--------------------------------------------+--------------------------------+\n| DETERMINISTIC | |\n+--------------------------------------------+--------------------------------+\n| DISTINCT | |\n+--------------------------------------------+--------------------------------+\n| DISTINCTROW | |\n+--------------------------------------------+--------------------------------+\n| DIV | |\n+--------------------------------------------+--------------------------------+\n| DO_DOMAIN_IDS | |\n+--------------------------------------------+--------------------------------+\n| DOUBLE | |\n+--------------------------------------------+--------------------------------+\n| DROP | |\n+--------------------------------------------+--------------------------------+\n| DUAL | |\n+--------------------------------------------+--------------------------------+\n| EACH | |\n+--------------------------------------------+--------------------------------+\n| ELSE | |\n+--------------------------------------------+--------------------------------+\n| ELSEIF | |\n+--------------------------------------------+--------------------------------+\n| ENCLOSED | |\n+--------------------------------------------+--------------------------------+\n| ESCAPED | |\n+--------------------------------------------+--------------------------------+\n| EXCEPT | Added in MariaDB 10.3.0 |\n+--------------------------------------------+--------------------------------+\n| EXISTS | |\n+--------------------------------------------+--------------------------------+\n| EXIT | |\n+--------------------------------------------+--------------------------------+\n| EXPLAIN | |\n+--------------------------------------------+--------------------------------+\n| FALSE | |\n+--------------------------------------------+--------------------------------+\n| FETCH | |\n+--------------------------------------------+--------------------------------+\n| FLOAT | |\n+--------------------------------------------+--------------------------------+\n| FLOAT4 | |\n+--------------------------------------------+--------------------------------+\n| FLOAT8 | |\n+--------------------------------------------+--------------------------------+\n| FOR | |\n+--------------------------------------------+--------------------------------+\n| FORCE | |\n+--------------------------------------------+--------------------------------+\n| FOREIGN | |\n+--------------------------------------------+--------------------------------+\n| FROM | |\n+--------------------------------------------+--------------------------------+\n| FULLTEXT | |\n+--------------------------------------------+--------------------------------+\n| GENERAL | |\n+--------------------------------------------+--------------------------------+\n| GRANT | |\n+--------------------------------------------+--------------------------------+\n| GROUP | |\n+--------------------------------------------+--------------------------------+\n| HAVING | |\n+--------------------------------------------+--------------------------------+\n| HIGH_PRIORITY | |\n+--------------------------------------------+--------------------------------+\n| HOUR_MICROSECOND | |\n+--------------------------------------------+--------------------------------+\n| HOUR_MINUTE | |\n+--------------------------------------------+--------------------------------+\n| HOUR_SECOND | |','','https://mariadb.com/kb/en/reserved-words/');
-update help_topic set description = CONCAT(description, '\n+--------------------------------------------+--------------------------------+\n| IF | |\n+--------------------------------------------+--------------------------------+\n| IGNORE | |\n+--------------------------------------------+--------------------------------+\n| IGNORE_DOMAIN_IDS | |\n+--------------------------------------------+--------------------------------+\n| IGNORE_SERVER_IDS | |\n+--------------------------------------------+--------------------------------+\n| IN | |\n+--------------------------------------------+--------------------------------+\n| INDEX | |\n+--------------------------------------------+--------------------------------+\n| INFILE | |\n+--------------------------------------------+--------------------------------+\n| INNER | |\n+--------------------------------------------+--------------------------------+\n| INOUT | |\n+--------------------------------------------+--------------------------------+\n| INSENSITIVE | |\n+--------------------------------------------+--------------------------------+\n| INSERT | |\n+--------------------------------------------+--------------------------------+\n| INT | |\n+--------------------------------------------+--------------------------------+\n| INT1 | |\n+--------------------------------------------+--------------------------------+\n| INT2 | |\n+--------------------------------------------+--------------------------------+\n| INT3 | |\n+--------------------------------------------+--------------------------------+\n| INT4 | |\n+--------------------------------------------+--------------------------------+\n| INT8 | |\n+--------------------------------------------+--------------------------------+\n| INTEGER | |\n+--------------------------------------------+--------------------------------+\n| INTERSECT | Added in MariaDB 10.3.0 |\n+--------------------------------------------+--------------------------------+\n| INTERVAL | |\n+--------------------------------------------+--------------------------------+\n| INTO | |\n+--------------------------------------------+--------------------------------+\n| IS | |\n+--------------------------------------------+--------------------------------+\n| ITERATE | |\n+--------------------------------------------+--------------------------------+\n| JOIN | |\n+--------------------------------------------+--------------------------------+\n| KEY | |\n+--------------------------------------------+--------------------------------+\n| KEYS | |\n+--------------------------------------------+--------------------------------+\n| KILL | |\n+--------------------------------------------+--------------------------------+\n| LEADING | |\n+--------------------------------------------+--------------------------------+\n| LEAVE | |\n+--------------------------------------------+--------------------------------+\n| LEFT | |\n+--------------------------------------------+--------------------------------+\n| LIKE | |\n+--------------------------------------------+--------------------------------+\n| LIMIT | |\n+--------------------------------------------+--------------------------------+\n| LINEAR | |\n+--------------------------------------------+--------------------------------+\n| LINES | |\n+--------------------------------------------+--------------------------------+\n| LOAD | |\n+--------------------------------------------+--------------------------------+\n| LOCALTIME | |\n+--------------------------------------------+--------------------------------+\n| LOCALTIMESTAMP | |\n+--------------------------------------------+--------------------------------+\n| LOCK | |\n+--------------------------------------------+--------------------------------+\n| LONG | |\n+--------------------------------------------+--------------------------------+\n| LONGBLOB | |\n+--------------------------------------------+--------------------------------+\n| LONGTEXT | |\n+--------------------------------------------+--------------------------------+\n| LOOP | |\n+--------------------------------------------+--------------------------------+\n| LOW_PRIORITY | |\n+--------------------------------------------+--------------------------------+\n| MASTER_HEARTBEAT_PERIOD | |\n+--------------------------------------------+--------------------------------+\n| MASTER_SSL_VERIFY_SERVER_CERT | |\n+--------------------------------------------+--------------------------------+\n| MATCH | |\n+--------------------------------------------+--------------------------------+\n| MAXVALUE | |\n+--------------------------------------------+--------------------------------+\n| MEDIUMBLOB | |\n+--------------------------------------------+--------------------------------+\n| MEDIUMINT | |\n+--------------------------------------------+--------------------------------+\n| MEDIUMTEXT | |\n+--------------------------------------------+--------------------------------+\n| MIDDLEINT | |\n+--------------------------------------------+--------------------------------+\n| MINUTE_MICROSECOND | |\n+--------------------------------------------+--------------------------------+\n| MINUTE_SECOND | |\n+--------------------------------------------+--------------------------------+\n| MOD | |\n+--------------------------------------------+--------------------------------+\n| MODIFIES | |\n+--------------------------------------------+--------------------------------+\n| NATURAL | |\n+--------------------------------------------+--------------------------------+\n| NOT | |\n+--------------------------------------------+--------------------------------+\n| NO_WRITE_TO_BINLOG | |\n+--------------------------------------------+--------------------------------+\n| NULL | |\n+--------------------------------------------+--------------------------------+\n| NUMERIC | |\n+--------------------------------------------+--------------------------------+\n| OFFSET | Added in MariaDB 10.6.0 |\n+--------------------------------------------+--------------------------------+\n| ON | |\n+--------------------------------------------+--------------------------------+\n| OPTIMIZE | |\n+--------------------------------------------+--------------------------------+\n| OPTION | |\n+--------------------------------------------+--------------------------------+\n| OPTIONALLY | |\n+--------------------------------------------+--------------------------------+\n| OR | |\n+--------------------------------------------+--------------------------------+\n| ORDER | |\n+--------------------------------------------+--------------------------------+\n| OUT | |\n+--------------------------------------------+--------------------------------+\n| OUTER | |\n+--------------------------------------------+--------------------------------+\n| OUTFILE | |\n+--------------------------------------------+--------------------------------+\n| OVER | |\n+--------------------------------------------+--------------------------------+\n| PAGE_CHECKSUM | |\n+--------------------------------------------+--------------------------------+\n| PARSE_VCOL_EXPR | |\n+--------------------------------------------+--------------------------------+\n| PARTITION | |\n+--------------------------------------------+--------------------------------+\n| POSITION | |\n+--------------------------------------------+--------------------------------+\n| PRECISION | |\n+--------------------------------------------+--------------------------------+\n| PRIMARY | |\n+--------------------------------------------+--------------------------------+\n| PROCEDURE | |\n+--------------------------------------------+--------------------------------+\n| PURGE | |\n+--------------------------------------------+--------------------------------+\n| RANGE | |\n+--------------------------------------------+--------------------------------+\n| READ | |\n+--------------------------------------------+--------------------------------+\n| READS | |\n+--------------------------------------------+--------------------------------+\n| READ_WRITE | |\n+--------------------------------------------+--------------------------------+\n| REAL | |\n+--------------------------------------------+--------------------------------+\n| RECURSIVE | |\n+--------------------------------------------+--------------------------------+\n| REF_SYSTEM_ID | |\n+--------------------------------------------+--------------------------------+\n| REFERENCES | |\n+--------------------------------------------+--------------------------------+\n| REGEXP | |\n+--------------------------------------------+--------------------------------+\n| RELEASE | |\n+--------------------------------------------+--------------------------------+\n| RENAME | |') WHERE help_topic_id = 481;
-update help_topic set description = CONCAT(description, '\n+--------------------------------------------+--------------------------------+\n| REPEAT | |\n+--------------------------------------------+--------------------------------+\n| REPLACE | |\n+--------------------------------------------+--------------------------------+\n| REQUIRE | |\n+--------------------------------------------+--------------------------------+\n| RESIGNAL | |\n+--------------------------------------------+--------------------------------+\n| RESTRICT | |\n+--------------------------------------------+--------------------------------+\n| RETURN | |\n+--------------------------------------------+--------------------------------+\n| RETURNING | |\n+--------------------------------------------+--------------------------------+\n| REVOKE | |\n+--------------------------------------------+--------------------------------+\n| RIGHT | |\n+--------------------------------------------+--------------------------------+\n| RLIKE | |\n+--------------------------------------------+--------------------------------+\n| ROWS | |\n+--------------------------------------------+--------------------------------+\n| SCHEMA | |\n+--------------------------------------------+--------------------------------+\n| SCHEMAS | |\n+--------------------------------------------+--------------------------------+\n| SECOND_MICROSECOND | |\n+--------------------------------------------+--------------------------------+\n| SELECT | |\n+--------------------------------------------+--------------------------------+\n| SENSITIVE | |\n+--------------------------------------------+--------------------------------+\n| SEPARATOR | |\n+--------------------------------------------+--------------------------------+\n| SET | |\n+--------------------------------------------+--------------------------------+\n| SHOW | |\n+--------------------------------------------+--------------------------------+\n| SIGNAL | |\n+--------------------------------------------+--------------------------------+\n| SLOW | |\n+--------------------------------------------+--------------------------------+\n| SMALLINT | |\n+--------------------------------------------+--------------------------------+\n| SPATIAL | |\n+--------------------------------------------+--------------------------------+\n| SPECIFIC | |\n+--------------------------------------------+--------------------------------+\n| SQL | |\n+--------------------------------------------+--------------------------------+\n| SQLEXCEPTION | |\n+--------------------------------------------+--------------------------------+\n| SQLSTATE | |\n+--------------------------------------------+--------------------------------+\n| SQLWARNING | |\n+--------------------------------------------+--------------------------------+\n| SQL_BIG_RESULT | |\n+--------------------------------------------+--------------------------------+\n| SQL_CALC_FOUND_ROWS | |\n+--------------------------------------------+--------------------------------+\n| SQL_SMALL_RESULT | |\n+--------------------------------------------+--------------------------------+\n| SSL | |\n+--------------------------------------------+--------------------------------+\n| STARTING | |\n+--------------------------------------------+--------------------------------+\n| STATS_AUTO_RECALC | |\n+--------------------------------------------+--------------------------------+\n| STATS_PERSISTENT | |\n+--------------------------------------------+--------------------------------+\n| STATS_SAMPLE_PAGES | |\n+--------------------------------------------+--------------------------------+\n| STRAIGHT_JOIN | |\n+--------------------------------------------+--------------------------------+\n| TABLE | |\n+--------------------------------------------+--------------------------------+\n| TERMINATED | |\n+--------------------------------------------+--------------------------------+\n| THEN | |\n+--------------------------------------------+--------------------------------+\n| TINYBLOB | |\n+--------------------------------------------+--------------------------------+\n| TINYINT | |\n+--------------------------------------------+--------------------------------+\n| TINYTEXT | |\n+--------------------------------------------+--------------------------------+\n| TO | |\n+--------------------------------------------+--------------------------------+\n| TRAILING | |\n+--------------------------------------------+--------------------------------+\n| TRIGGER | |\n+--------------------------------------------+--------------------------------+\n| TRUE | |\n+--------------------------------------------+--------------------------------+\n| UNDO | |\n+--------------------------------------------+--------------------------------+\n| UNION | |\n+--------------------------------------------+--------------------------------+\n| UNIQUE | |\n+--------------------------------------------+--------------------------------+\n| UNLOCK | |\n+--------------------------------------------+--------------------------------+\n| UNSIGNED | |\n+--------------------------------------------+--------------------------------+\n| UPDATE | |\n+--------------------------------------------+--------------------------------+\n| USAGE | |\n+--------------------------------------------+--------------------------------+\n| USE | |\n+--------------------------------------------+--------------------------------+\n| USING | |\n+--------------------------------------------+--------------------------------+\n| UTC_DATE | |\n+--------------------------------------------+--------------------------------+\n| UTC_TIME | |\n+--------------------------------------------+--------------------------------+\n| UTC_TIMESTAMP | |\n+--------------------------------------------+--------------------------------+\n| VALUES | |\n+--------------------------------------------+--------------------------------+\n| VARBINARY | |\n+--------------------------------------------+--------------------------------+\n| VARCHAR | |\n+--------------------------------------------+--------------------------------+\n| VARCHARACTER | |\n+--------------------------------------------+--------------------------------+\n| VARYING | |\n+--------------------------------------------+--------------------------------+\n| WHEN | |\n+--------------------------------------------+--------------------------------+\n| WHERE | |\n+--------------------------------------------+--------------------------------+\n| WHILE | |\n+--------------------------------------------+--------------------------------+\n| WINDOW | Only disallowed for table |\n| | aliases. |\n+--------------------------------------------+--------------------------------+\n| WITH | |\n+--------------------------------------------+--------------------------------+\n| WRITE | |\n+--------------------------------------------+--------------------------------+\n| XOR | |\n+--------------------------------------------+--------------------------------+\n| YEAR_MONTH | |\n+--------------------------------------------+--------------------------------+\n| ZEROFILL | |\n+--------------------------------------------+--------------------------------+\n\nExceptions\n----------\n\nSome keywords are exceptions for historical reasons, and are permitted as\nunquoted identifiers. These include:\n\n+-----------------------------------------------------------------------------+\n| Keyword |\n+-----------------------------------------------------------------------------+\n| ACTION |\n+-----------------------------------------------------------------------------+\n| BIT |\n+-----------------------------------------------------------------------------+\n| DATE |\n+-----------------------------------------------------------------------------+\n| ENUM |\n+-----------------------------------------------------------------------------+\n| NO |\n+-----------------------------------------------------------------------------+\n| TEXT |\n+-----------------------------------------------------------------------------+\n| TIME |\n+-----------------------------------------------------------------------------+\n| TIMESTAMP |\n+-----------------------------------------------------------------------------+\n\nOracle Mode\n-----------\n\nIn Oracle mode, from MariaDB 10.3, there are a number of extra reserved words:\n\n+--------------------------------------------+--------------------------------+\n| Keyword | Notes |\n+--------------------------------------------+--------------------------------+\n| BODY | |\n+--------------------------------------------+--------------------------------+\n| ELSIF | |\n+--------------------------------------------+--------------------------------+\n| GOTO | |\n+--------------------------------------------+--------------------------------+\n| HISTORY | <= MariaDB 10.3.6 only |') WHERE help_topic_id = 481;
-update help_topic set description = CONCAT(description, '\n+--------------------------------------------+--------------------------------+\n| MINUS | From MariaDB 10.6.1 |\n+--------------------------------------------+--------------------------------+\n| OTHERS | |\n+--------------------------------------------+--------------------------------+\n| PACKAGE | |\n+--------------------------------------------+--------------------------------+\n| PERIOD | <= MariaDB 10.3.6 only |\n+--------------------------------------------+--------------------------------+\n| RAISE | |\n+--------------------------------------------+--------------------------------+\n| ROWNUM | From MariaDB 10.6.1 |\n+--------------------------------------------+--------------------------------+\n| ROWTYPE | |\n+--------------------------------------------+--------------------------------+\n| SYSDATE | From MariaDB 10.6.1 |\n+--------------------------------------------+--------------------------------+\n| SYSTEM | <= MariaDB 10.3.6 only. Note |\n| | however that SYSTEM sometimes |\n| | needs to be quoted to avoid |\n| | confusion with |\n| | System-versioned tables. |\n+--------------------------------------------+--------------------------------+\n| SYSTEM_TIME | <= MariaDB 10.3.6 only |\n+--------------------------------------------+--------------------------------+\n| VERSIONING | <= MariaDB 10.3.6 only |\n+--------------------------------------------+--------------------------------+\n| WITHOUT | <= MariaDB 10.3.6 only |\n+--------------------------------------------+--------------------------------+\n\nFunction Names\n--------------\n\nIf the IGNORE_SPACE SQL_MODE flag is set, function names become reserved words.\n\nURL: https://mariadb.com/kb/en/reserved-words/') WHERE help_topic_id = 481;
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (482,29,'String Literals','Strings are sequences of characters and are enclosed with quotes.\n\nThe syntax is:\n\n[_charset_name]\'string\' [COLLATE collation_name]\n\nFor example:\n\n\'The MariaDB Foundation\'\n_utf8 \'Foundation\' COLLATE utf8_unicode_ci;\n\nStrings can either be enclosed in single quotes or in double quotes (the same\ncharacter must be used to both open and close the string).\n\nThe ANSI SQL-standard does not permit double quotes for enclosing strings, and\nalthough MariaDB does by default, if the MariaDB server has enabled the\nANSI_QUOTES_SQL SQL_MODE, double quotes will be treated as being used for\nidentifiers instead of strings.\n\nStrings that are next to each other are automatically concatenated. For\nexample:\n\n\'The \' \'MariaDB \' \'Foundation\'\n\nand\n\n\'The MariaDB Foundation\'\n\nare equivalent.\n\nThe \\ (backslash character) is used to escape characters (unless the SQL_MODE\nhasn\'t been set to NO_BACKSLASH_ESCAPES). For example:\n\n\'MariaDB\'s new features\'\n\nis not a valid string because of the single quote in the middle of the string,\nwhich is treated as if it closes the string, but is actually meant as part of\nthe string, an apostrophe. The backslash character helps in situations like\nthis:\n\n\'MariaDB\\\'s new features\'\n\nis now a valid string, and if displayed, will appear without the backslash.\n\nSELECT \'MariaDB\\\'s new features\';\n+------------------------+\n| MariaDB\'s new features |\n+------------------------+\n| MariaDB\'s new features |\n+------------------------+\n\nAnother way to escape the quoting character is repeating it twice:\n\nSELECT \'I\'\'m here\', \"\"\"Double\"\"\";\n+----------+----------+\n| I\'m here | \"Double\" |\n+----------+----------+\n| I\'m here | \"Double\" |\n+----------+----------+\n\nEscape Sequences\n----------------\n\nThere are other escape sequences also. Here is a full list:\n\n+-----------------------------------------------+-----------------------------+\n| Escape sequence | Character |\n+-----------------------------------------------+-----------------------------+\n| \\0 | ASCII NUL (0x00). |\n+-----------------------------------------------+-----------------------------+\n| \\\' | Single quote (\"\'\"). |\n+-----------------------------------------------+-----------------------------+\n| \\\" | Double quote (\"\"\"). |\n+-----------------------------------------------+-----------------------------+\n| \\b | Backspace. |\n+-----------------------------------------------+-----------------------------+\n| \\n | Newline, or linefeed,. |\n+-----------------------------------------------+-----------------------------+\n| \\r | Carriage return. |\n+-----------------------------------------------+-----------------------------+\n| \\t | Tab. |\n+-----------------------------------------------+-----------------------------+\n| \\Z | ASCII 26 (Control+Z). See |\n| | note following the table. |\n+-----------------------------------------------+-----------------------------+\n| \\\\ | Backslash (\"\\\"). |\n+-----------------------------------------------+-----------------------------+\n| \\% | \"%\" character. See note |\n| | following the table. |\n+-----------------------------------------------+-----------------------------+\n| \\_ | A \"_\" character. See note |\n| | following the table. |\n+-----------------------------------------------+-----------------------------+\n\nEscaping the % and _ characters can be necessary when using the LIKE operator,\nwhich treats them as special characters.\n\nThe ASCII 26 character (\\Z) needs to be escaped when included in a batch file\nwhich needs to be executed in Windows. The reason is that ASCII 26, in\nWindows, is the end of file (EOF).\n\nBackslash (\\), if not used as an escape character, must always be escaped.\nWhen followed by a character that is not in the above table, backslashes will\nsimply be ignored.\n\nURL: https://mariadb.com/kb/en/string-literals/','','https://mariadb.com/kb/en/string-literals/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (483,29,'Table Value Constructors','MariaDB starting with 10.3.3\n----------------------------\nTable Value Constructors were introduced in MariaDB 10.3.3\n\nSyntax\n------\n\nVALUES ( row_value[, row_value...]), (...)...\n\nDescription\n-----------\n\nIn Unions, Views, and sub-queries, a Table Value Constructor (TVC) allows you\nto inject arbitrary values into the result-set. The given values must have the\nsame number of columns as the result-set, otherwise it returns Error 1222.\n\nExamples\n--------\n\nUsing TVC\'s with UNION operations:\n\nCREATE TABLE test.t1 (val1 INT, val2 INT);\nINSERT INTO test.t1 VALUES(5, 8), (3, 4), (1, 2);\n\nSELECT * FROM test.t1\nUNION\nVALUES (70, 90), (100, 110);\n\n+------+------+\n| val1 | val2 |\n+------+------+\n| 5 | 8 | \n| 3 | 4 |\n| 1 | 2 |\n| 70 | 90 |\n| 100 | 110 |\n+------+------+\n\nUsing TVC\'s with a CREATE VIEW statement:\n\nCREATE VIEW v1 AS VALUES (7, 9), (9, 10);\n\nSELECT * FROM v1;\n+---+----+\n| 7 | 9 |\n+---+----+\n| 7 | 9 |\n| 9 | 10 |\n+---+----+\n\nUsing TVC with an ORDER BY clause:\n\nSELECT * FROM test.t1\nUNION\nVALUES (10, 20), (30, 40), (50, 60), (70, 80)\nORDER BY val1 DESC;\n\nUsing TVC with LIMIT clause:\n\nSELECT * FROM test.t1\nUNION\nVALUES (10, 20), (30, 40), (50, 60), (70, 80)\nLIMIT 2 OFFSET 4;\n\n+------+------+\n| val1 | val2 |\n+------+------+\n| 30 | 40 | \n| 50 | 60 |\n+------+------+\n\nURL: https://mariadb.com/kb/en/table-value-constructors/','','https://mariadb.com/kb/en/table-value-constructors/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (484,29,'User-Defined Variables','User-defined variables are variables which can be created by the user and\nexist in the session. This means that no one can access user-defined variables\nthat have been set by another user, and when the session is closed these\nvariables expire. However, these variables can be shared between several\nqueries and stored programs.\n\nUser-defined variables names must be preceded by a single at character (@).\nWhile it is safe to use a reserved word as a user-variable name, the only\nallowed characters are ASCII letters, digits, dollar sign ($), underscore (_)\nand dot (.). If other characters are used, the name can be quoted in one of\nthe following ways:\n\n* @`var_name`\n* @\'var_name\'\n* @\"var_name\"\n\nThese characters can be escaped as usual.\n\nUser-variables names are case insensitive, though they were case sensitive in\nMySQL 4.1 and older versions.\n\nUser-defined variables cannot be declared. They can be read even if no value\nhas been set yet; in that case, they are NULL. To set a value for a\nuser-defined variable you can use:\n\n* SET statement;\n* := operator within a SQL statement;\n* SELECT ... INTO.\n\nSince user-defined variables type cannot be declared, the only way to force\ntheir type is using CAST() or CONVERT():\n\nSET @str = CAST(123 AS CHAR(5));\n\nIf a variable has not been used yet, its value is NULL:\n\nSELECT @x IS NULL;\n+------------+\n| @x IS NULL |\n+------------+\n| 1 |\n+------------+\n\nIt is unsafe to read a user-defined variable and set its value in the same\nstatement (unless the command is SET), because the order of these actions is\nundefined.\n\nUser-defined variables can be used in most MariaDB\'s statements and clauses\nwhich accept an SQL expression. However there are some exceptions, like the\nLIMIT clause.\n\nThey must be used to PREPARE a prepared statement:\n\n@sql = \'DELETE FROM my_table WHERE c>1;\';\nPREPARE stmt FROM @sql;\nEXECUTE stmt;\nDEALLOCATE PREPARE stmt;\n\nAnother common use is to include a counter in a query:\n\nSET @var = 0;\nSELECT a, b, c, (@var:=@var+1) AS counter FROM my_table;\n\nInformation Schema\n------------------\n\nUser-defined variables can be viewed in the Information Schema USER_VARIABLES\nTable (as part of the User Variables plugin) from MariaDB 10.2.\n\nFlushing User-Defined Variables\n-------------------------------\n\nUser-defined variables are reset and the Information Schema table emptied with\nthe FLUSH USER_VARIABLES statement.\n\nSET @str = CAST(123 AS CHAR(5));\n\nSELECT * FROM information_schema.USER_VARIABLES ORDER BY VARIABLE_NAME;\n+---------------+----------------+---------------+--------------------+\n| VARIABLE_NAME | VARIABLE_VALUE | VARIABLE_TYPE | CHARACTER_SET_NAME |\n+---------------+----------------+---------------+--------------------+\n| str | 123 | VARCHAR | utf8mb3 |\n+---------------+----------------+---------------+--------------------+\n\nFLUSH USER_VARIABLES;\n\nSELECT * FROM information_schema.USER_VARIABLES ORDER BY VARIABLE_NAME;\nEmpty set (0.000 sec)\n\nURL: https://mariadb.com/kb/en/user-defined-variables/','','https://mariadb.com/kb/en/user-defined-variables/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (485,29,'Delimiters','The default delimiter in the mysql client (from MariaDB 10.4.6, also called\nmariadb) is the semicolon.\n\nWhen creating stored programs from the command-line, it is likely you will\nneed to differentiate between the regular delimiter and a delimiter inside a\nBEGIN END block. To understand better, consider the following example:\n\nCREATE FUNCTION FortyTwo() RETURNS TINYINT DETERMINISTIC\nBEGIN\n DECLARE x TINYINT;\n SET x = 42;\n RETURN x;\nEND;\n\nIf you enter the above line by line, the mysql client will treat the first\nsemicolon, at the end of the DECLARE x TINYINT line, as the end of the\nstatement. Since that\'s only a partial definition, it will throw a syntax\nerror, as follows:\n\nCREATE FUNCTION FortyTwo() RETURNS TINYINT DETERMINISTIC\nBEGIN\nDECLARE x TINYINT;\nERROR 1064 (42000): You have an error in your SQL syntax; \ncheck the manual that corresponds to your MariaDB server version\n for the right syntax to use near \'\' at line 3\n\nThe solution is to specify a distinct delimiter for the duration of the\nprocess, using the DELIMITER command. The delimiter can be any set of\ncharacters you choose, but it needs to be a distinctive set of characters that\nwon\'t cause further confusion. // is a common choice, and used throughout the\nknowledgebase.\n\nHere\'s how the function could be successfully entered from the mysql client\nwith the new delimiter.\n\nDELIMITER //\n\nCREATE FUNCTION FortyTwo() RETURNS TINYINT DETERMINISTIC\nBEGIN\n DECLARE x TINYINT;\n SET x = 42;\n RETURN x;\nEND\n\n//\n\nDELIMITER ;\n\nAt the end, the delimiter is restored to the default semicolon. The \\g and \\G\ndelimiters can always be used, even when a custom delimiter is specified.\n\nURL: https://mariadb.com/kb/en/delimiters/','','https://mariadb.com/kb/en/delimiters/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (486,29,'SQL_MODE=ORACLE','From MariaDB 10.3, setting the sql_mode system variable to Oracle allows the\nserver to understand a subset of Oracle\'s PL/SQL language. For example:\n\nSET SQL_MODE=\'ORACLE\';\n\nAll traditional MariaDB SQL/PSM syntax should work as before, as long as it\ndoes not conflict with Oracle\'s PL/SQL syntax. All MariaDB functions should be\nsupported in both normal and Oracle modes.\n\nPrior to MariaDB 10.3, MariaDB does not support Oracle\'s PL/SQL language, and\nSET SQL_MODE=ORACLE is only an alias for the following sql_mode in those\nversions:\n\nSET SQL_MODE=\'PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, NO_KEY_OPTIONS,\nNO_TABLE_OPTIONS, NO_FIELD_OPTIONS, NO_AUTO_CREATE_USER\';\n\nFrom MariaDB 10.3, SET SQL_MODE=ORACLE is same as:\n\nSET SQL_MODE=\'PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ORACLE,NO_KEY_OPTIONS,\nNO_TABLE_OPTIONS,NO_FIELD_OPTIONS,NO_AUTO_CREATE_USER,SIMULTANEOUS_ASSIGNMENT\';\n\nSupported Syntax in Oracle Mode\n-------------------------------\n\nStored Procedures and Stored Functions\n--------------------------------------\n\nOracle mode makes the following changes to Stored Procedures and Stored\nFunctions:\n\n+-----------------------------------------+-----------------------------------+\n| Oracle syntax | Description |\n+-----------------------------------------+-----------------------------------+\n| CREATE PROCEDURE p1 (param OUT INT) | ANSI uses (OUT param INT) |\n+-----------------------------------------+-----------------------------------+\n| CREATE PROCEDURE p1 (a IN OUT INT) | ANSI uses (INOUT param INT) |\n+-----------------------------------------+-----------------------------------+\n| AS before function body | CREATE FUNCTION f1 RETURN NUMBER |\n| | AS BEGIN... |\n+-----------------------------------------+-----------------------------------+\n| IS before function body | CREATE FUNCTION f1 RETURN NUMBER |\n| | IS BEGIN... |\n+-----------------------------------------+-----------------------------------+\n| If function has no parameters then | Example: CREATE PROCEDURE p1 AS |\n| parentheses must be omitted | BEGIN NULL; END; |\n+-----------------------------------------+-----------------------------------+\n| CREATE PROCEDURE p1 AS BEGIN END p1; | Optional routine name after END |\n| | keyword. MDEV-12089 |\n+-----------------------------------------+-----------------------------------+\n| CREATE FUNCTION f1(a VARCHAR) | VARCHAR can be used without |\n| | length for routine parameters |\n| | and RETURN clause. The length is |\n| | inherited from the argument at |\n| | call time. MDEV-10596 |\n+-----------------------------------------+-----------------------------------+\n| CREATE AGGREGATE FUNCTION f1( ) | Creates an aggregate function, |\n| | which performs the function |\n| | against a set of rows and |\n| | returns one aggregate result. |\n+-----------------------------------------+-----------------------------------+\n| No CALL needed in Stored Procedures | In Oracle mode one can call |\n| | other stored procedures with |\n| | name only. MDEV-12107 |\n+-----------------------------------------+-----------------------------------+\n| RETURN. Can also be used in stored | ANSI uses RETURNS. MariaDB mode |\n| procedures | only supports RETURNS in stored |\n| | functions |\n+-----------------------------------------+-----------------------------------+\n\nCursors\n-------\n\nOracle mode makes the following changes to Cursors:\n\n+-----------------------------------------+-----------------------------------+\n| Oracle syntax | Description |\n+-----------------------------------------+-----------------------------------+\n| CREATE PROCEDURE p1 AS CURSOR cur IS | Explicit cursor with FOR loop. |\n| (SELECT a, b FROM t1); BEGIN FOR rec | MDEV-10581 |\n| IN cur ... | |\n+-----------------------------------------+-----------------------------------+\n| CREATE PROCEDURE p1 AS rec IN (SELECT | Implicit cursor with FOR loop. |\n| a, b FROM t1) | MDEV-12098 |\n+-----------------------------------------+-----------------------------------+\n| CURSOR c(prm_a VARCHAR2, prm_b | Cursor with parameters. |\n| VARCHAR2) ... OPEN c(1,2) | MDEV-10597 |\n+-----------------------------------------+-----------------------------------+\n| CURSOR c(prm_a VARCHAR2, prm_b | Cursor with parameters and FOR |\n| VARCHAR2) ... FOR rec in c(1,2) | loop. MDEV-12314 |\n+-----------------------------------------+-----------------------------------+\n| s %ISOPEN, %ROWCOUNT, %FOUND, %NOTFOUND | Explicit cursor attributes. |\n| | MDEV-10582 |\n+-----------------------------------------+-----------------------------------+\n\nLOOP\n----\n\nOracle mode makes the following changes to LOOP:\n\n+-----------------------------------------+-----------------------------------+\n| Oracle syntax | Description |\n+-----------------------------------------+-----------------------------------+\n| FOR i IN 1..10 LOOP ... END LOOP | Numeric FOR loop. MDEV-10580 |\n+-----------------------------------------+-----------------------------------+\n| GOTO | GOTO statement. MDEV-10697 |\n+-----------------------------------------+-----------------------------------+\n| <<label>> used with GOTO | ANSI uses label:. MDEV-10697 |\n+-----------------------------------------+-----------------------------------+\n| To leave loop block: EXIT [ label ] [ | ANSI syntax is IF bool_expr THEN |\n| WHEN bool_expr ] | LEAVE label |\n+-----------------------------------------+-----------------------------------+\n| [<<label>>] WHILE boolean_expression | Oracle style WHILE loop |\n| LOOP statement... END LOOP [ label ] ; | |\n+-----------------------------------------+-----------------------------------+\n| CONTINUE [ label ] [ WHEN | CONTINUE is only valid inside a |\n| boolean_expression] | loop |\n+-----------------------------------------+-----------------------------------+\n\nVariables\n---------\n\n+------------------------------+-----------------+--------------------------+\n| Oracle syntax | Version | Description |\n+------------------------------+-----------------+--------------------------+\n| var:= 10; Can also be used | 10.3 | MariaDB uses SET var= |\n| with MariaDB systemvariables | | 10; |\n+------------------------------+-----------------+--------------------------+\n| var INT := 10 | 10.3 | Default variable value |\n+------------------------------+-----------------+--------------------------+\n| var1 | 10.3 | Take data type from a |\n| table_name.column_name%TYPE | | table column. MDEV-10577 |\n+------------------------------+-----------------+--------------------------+\n| var2 var1%TYPE | 10.3 | Take data type from |\n| | | another variable |\n+------------------------------+-----------------+--------------------------+\n| rec1 table_name%ROWTYPE | 10.3 | Take ROW structure from |\n| | | a table. MDEV-12133 |\n+------------------------------+-----------------+--------------------------+\n| rec2 rec1%ROWTYPE | 10.3 | Take ROW structure from |\n| | | ROW variable |\n+------------------------------+-----------------+--------------------------+\n| CURSOR c1 IS SELECT a,b | 10.3 | Take ROW structure from |\n| FROM t1; rec1 c1%ROWTYPE; | | a cursor. MDEV-12011 |\n+------------------------------+-----------------+--------------------------+\n| Variables can be declared | 10.3 | In MariaDB mode, |\n| after cursor declarations | | variables must be |\n| | | declared before |\n| | | cursors. MDEV-10598 |\n+------------------------------+-----------------+--------------------------+\n| Triggers uses :NEW and :OLD | 10.3 | ANSI uses NEW and OLD. |\n| | | MDEV-10579 |\n+------------------------------+-----------------+--------------------------+\n| SQLCODE | 10.3 | Returns the number code |\n| | | of the most recent |\n| | | exception. Can only be |\n| | | used in Stored |\n| | | Procedures. MDEV-10578 |\n+------------------------------+-----------------+--------------------------+\n| SQLERRM | 10.3 | Returns the error |\n| | | message associdated to |\n| | | it\'s error number |\n| | | argument or SQLCODE if |\n| | | no argument is given. |\n| | | Can only be used in |\n| | | Stored Procedures. |\n| | | MDEV-10578 |\n+------------------------------+-----------------+--------------------------+\n| SQL%ROWCOUNT | 10.3 | Almost same as |\n| | | ROW_COUNT(). MDEV-10583 |\n+------------------------------+-----------------+--------------------------+\n| ROWNUM | 10.6.1 | Returns number of |\n| | | accepted rows |\n+------------------------------+-----------------+--------------------------+\n\nExceptions\n----------\n\n+-----------------------------------------+-----------------------------------+\n| Oracle syntax | Description |\n+-----------------------------------------+-----------------------------------+\n| BEGIN ... EXCEPTION WHEN OTHERS THEN | Exception handlers are declared |\n| BEGIN .. END; END; | at the end of a block |\n+-----------------------------------------+-----------------------------------+\n| TOO_MANY_ROWS, NO_DATA_FOUND, | Predefined exceptions. MDEV-10839 |\n| DUP_VAL_ON_INDEX | |\n+-----------------------------------------+-----------------------------------+\n| RAISE TOO_MANY_ROWS ; .... EXCEPTION | Exception can be used with RAISE |\n| WHEN TOO_MANY_ROWS THEN ... | and EXCEPTION...WHEN. MDEV-10840 |\n+-----------------------------------------+-----------------------------------+\n| CREATE OR REPLACE FUNCTION f1 (a INT) | User defined exceptions. |\n| RETURN INT AS e1 EXCEPTION... | MDEV-10587 |\n+-----------------------------------------+-----------------------------------+\n\nBEGIN Blocks\n------------\n\n+-----------------------------------------+-----------------------------------+\n| Oracle syntax | Description |\n+-----------------------------------------+-----------------------------------+\n| BEGIN to start a block | MariaDB uses BEGIN NOT ATOMIC |\n| | for anyonymous blocks. MDEV-10655 |\n+-----------------------------------------+-----------------------------------+\n| DECLARE is used before BEGIN | DECLARE a INT; b VARCHAR(10); |\n| | BEGIN v:= 10; END; |\n+-----------------------------------------+-----------------------------------+\n| WHEN DUP_VAL_ON_INDEX THEN NULL ; | Do not require BEGIN..END in |\n| NULL; WHEN OTHERS THEN NULL | multi-statement exception |\n| | handlers in THEN clause. |\n| | MDEV-12088 |\n+-----------------------------------------+-----------------------------------+\n\nSimple Syntax Compatibility\n---------------------------\n\n+------------------------------+-----------------+--------------------------+\n| Oracle syntax | Version | Description |\n+------------------------------+-----------------+--------------------------+\n| ELSIF | 10.3 | ANSI uses ELSEIF |\n+------------------------------+-----------------+--------------------------+\n| SELECT UNIQUE | 10.3 | Same as SELECT |\n| | | DISTINCT. MDEV-12086 |','','https://mariadb.com/kb/en/sql_modeoracle/');
-update help_topic set description = CONCAT(description, '\n+------------------------------+-----------------+--------------------------+\n| TRUNCATE TABLE t1 [DROP | 10.3 | DROP STORAGE and REUSE |\n| STORAGE] or [REUSE STORAGE] | | STORAGE are allowed as |\n| | | optional keywords for |\n| | | TRUNCATE TABLE. |\n| | | MDEV-10588 |\n+------------------------------+-----------------+--------------------------+\n| Subqueries in a FROM clause | 10.6 | SELECT * FROM (SELECT 1 |\n| without an alias | | FROM DUAL), (SELECT 2 |\n| | | FROM DUAL) |\n+------------------------------+-----------------+--------------------------+\n| UNION, EXCEPT and INTERSECT | 10.3 | INTERSECT has higher |\n| all have the same | | precedence than UNION |\n| precedence. | | and EXCEPT in |\n| | | non-Oracle modes. |\n+------------------------------+-----------------+--------------------------+\n| MINUS | 10.6 | MINUS is a synonym for |\n| | | EXCEPT. |\n+------------------------------+-----------------+--------------------------+\n\nFunctions\n---------\n\n+------------------------------+-----------------+--------------------------+\n| Oracle syntax | Version | Description |\n+------------------------------+-----------------+--------------------------+\n| ADD_MONTHS() | 10.6.1 | Added as a wrapper for |\n| | | DATE_ADD() to enhance |\n| | | Oracle compatibility. |\n| | | All modes. |\n+------------------------------+-----------------+--------------------------+\n| CAST(expr as VARCHAR(N)) | 10.3 | Cast expression to a |\n| | | VARCHAR(N). MDEV-11275 |\n+------------------------------+-----------------+--------------------------+\n| DECODE | 10.3 | In Oracle mode, |\n| | | compares and matches |\n| | | search expressions |\n+------------------------------+-----------------+--------------------------+\n| LENGTH() is same as | 10.3 | MariaDB translates |\n| CHAR_LENGTH() | | LENGTH() to |\n| | | OCTET_LENGTH(). In all |\n| | | modes one can use |\n| | | LENGTHB() as a synonym |\n| | | to OCTET_LENGTH() |\n+------------------------------+-----------------+--------------------------+\n| CHR(num) | 10.3 | Returns a VARCHAR(1) |\n| | | with character set and |\n| | | collation according to |\n| | | @@character_set_database |\n| | | and @@collation_database |\n+------------------------------+-----------------+--------------------------+\n| substr(\'abc\',0 ,3) same as | 10.3 | Position 0 for substr() |\n| substr(\'abc\', 1 ,3) | | is same as position 1 |\n+------------------------------+-----------------+--------------------------+\n| SYS_GUID | 10.6.1 | Generates a globally |\n| | | unique identifier. |\n| | | Similar to UUID but |\n| | | without the -. All |\n| | | modes. |\n+------------------------------+-----------------+--------------------------+\n| TO_CHAR | 10.6.1 | Added to enhance Oracle |\n| | | compatibility. All |\n| | | modes. |\n+------------------------------+-----------------+--------------------------+\n| TRIM, LTRIM, RTRIM, LPAD | 10.3 | Returns NULL instead of |\n| and RPAD | | an empty string if |\n| | | returning an empty |\n| | | result. These functions |\n| | | can also be accessed |\n| | | outside of ORACLE mode |\n| | | by suffixing _ORACLE |\n| | | onto the end of the |\n| | | function name, such as |\n| | | TRIM_ORACLE. |\n+------------------------------+-----------------+--------------------------+\n\nPrepared Statements\n-------------------\n\nOracle mode makes the following changes to Prepared Statements:\n\n+-----------------------------------------+-----------------------------------+\n| Oracle syntax | Description |\n+-----------------------------------------+-----------------------------------+\n| PREPARE stmt FROM \'SELECT :1, :2\' | ANSI uses ?. MDEV-10801 |\n+-----------------------------------------+-----------------------------------+\n| EXECUTE IMMEDIATE \'INSERT INTO t1 | Dynamic placeholders. MDEV-10801 |\n| SELECT (:x,:y) FROM DUAL\' USING 10,20 | |\n+-----------------------------------------+-----------------------------------+\n\nSynonyms for Basic SQL Types\n----------------------------\n\n+--------------------------------+-------------------------------------------+\n| Oracle type | MariaDB synonym |\n+--------------------------------+-------------------------------------------+\n| VARCHAR2 | VARCHAR |\n+--------------------------------+-------------------------------------------+\n| NUMBER | DECIMAL |\n+--------------------------------+-------------------------------------------+\n| DATE (with time portion) | MariaDB DATETIME |\n+--------------------------------+-------------------------------------------+\n| RAW | VARBINARY |\n+--------------------------------+-------------------------------------------+\n| CLOB | LONGTEXT |\n+--------------------------------+-------------------------------------------+\n| BLOB | LONGBLOB |\n+--------------------------------+-------------------------------------------+\n\nThis was implemented as part of MDEV-10343.\n\nIf one does a SHOW CREATE TABLE in ORACLE mode on a table that has a native\nMariaDB DATE column, it will be displayed as mariadb_schema.date to not\nconflict with the Oracle DATE type.\n\nPackages\n--------\n\nThe following syntax has been supported since MariaDB 10.3.5:\n\n* CREATE PACKAGE\n* CREATE PACKAGE BODY\n* DROP PACKAGE\n* DROP PACKAGE BODY\n* SHOW CREATE PACKAGE\n* SHOW CREATE PACKAGE BODY\n\nNULL Handling\n-------------\n\nOracle mode makes the following changes to NULL handling:\n\nNULL As a Statement\n-------------------\n\nNULL can be used as a statement:\n\nIF a=10 THEN NULL; ELSE NULL; END IF\n\nTranslating Empty String Literals to NULL\n-----------------------------------------\n\nIn Oracle, empty string (\'\') and NULL are the same thing,\n\nBy using sql_mode=EMPTY_STRING_IS_NULL you can get a similar experience in\nMariaDB:\n\nSET sql_mode=EMPTY_STRING_IS_NULL;\nSELECT \'\' IS NULL; -- returns TRUE\nINSERT INTO t1 VALUES (\'\'); -- inserts NULL\n\nConcat Operator Ignores NULL\n----------------------------\n\nCONCAT() and || ignore NULL in Oracle mode. Can also be accessed outside of\nORACLE mode by using CONCAT_OPERATOR_ORACLE. MDEV-11880 and MDEV-12143.\n\nReserved Words\n--------------\n\nThere are a number of extra reserved words in Oracle mode.\n\nSHOW CREATE TABLE\n-----------------\n\nThe SHOW CREATE TABLE statement will not display MariaDB-specific table\noptions, such as AUTO_INCREMENT or CHARSET, when Oracle mode is set.\n\nURL: https://mariadb.com/kb/en/sql_modeoracle/') WHERE help_topic_id = 486;
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (487,30,'CONTAINS','Syntax\n------\n\nContains(g1,g2)\n\nDescription\n-----------\n\nReturns 1 or 0 to indicate whether a geometry g1 completely contains geometry\ng2. CONTAINS() is based on the original MySQL implementation and uses object\nbounding rectangles, while ST_CONTAINS() uses object shapes.\n\nThis tests the opposite relationship to Within().\n\nURL: https://mariadb.com/kb/en/contains/','','https://mariadb.com/kb/en/contains/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (488,30,'CROSSES','Syntax\n------\n\nCrosses(g1,g2)\n\nDescription\n-----------\n\nReturns 1 if g1 spatially crosses g2. Returns NULL if g1 is a Polygon or a\nMultiPolygon, or if g2 is a Point or a MultiPoint. Otherwise, returns 0.\n\nThe term spatially crosses denotes a spatial relation between two given\ngeometries that has the following properties:\n\n* The two geometries intersect\n* Their intersection results in a geometry that has a dimension that is one\n less than the maximum dimension of the two given geometries\n* Their intersection is not equal to either of the two given geometries\n\nCROSSES() is based on the original MySQL implementation, and uses object\nbounding rectangles, while ST_CROSSES() uses object shapes.\n\nURL: https://mariadb.com/kb/en/crosses/','','https://mariadb.com/kb/en/crosses/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (489,30,'DISJOINT','Syntax\n------\n\nDisjoint(g1,g2)\n\nDescription\n-----------\n\nReturns 1 or 0 to indicate whether g1 is spatially disjoint from (does not\nintersect) g2.\n\nDISJOINT() tests the opposite relationship to INTERSECTS().\n\nDISJOINT() is based on the original MySQL implementation and uses object\nbounding rectangles, while ST_DISJOINT() uses object shapes.\n\nURL: https://mariadb.com/kb/en/disjoint/','','https://mariadb.com/kb/en/disjoint/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (490,30,'EQUALS','Syntax\n------\n\nEquals(g1,g2)\n\nFrom MariaDB 10.2.3:\n\nMBREQUALS(g1,g2)\n\nDescription\n-----------\n\nReturns 1 or 0 to indicate whether g1 is spatially equal to g2.\n\nEQUALS() is based on the original MySQL implementation and uses object\nbounding rectangles, while ST_EQUALS() uses object shapes.\n\nFrom MariaDB 10.2.3, MBREQUALS is a synonym for Equals.\n\nURL: https://mariadb.com/kb/en/equals/','','https://mariadb.com/kb/en/equals/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (491,30,'INTERSECTS','Syntax\n------\n\nINTERSECTS(g1,g2)\n\nDescription\n-----------\n\nReturns 1 or 0 to indicate whether geometry g1 spatially intersects geometry\ng2.\n\nINTERSECTS() is based on the original MySQL implementation and uses object\nbounding rectangles, while ST_INTERSECTS() uses object shapes.\n\nINTERSECTS() tests the opposite relationship to DISJOINT().\n\nURL: https://mariadb.com/kb/en/intersects/','','https://mariadb.com/kb/en/intersects/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (492,30,'OVERLAPS','Syntax\n------\n\nOVERLAPS(g1,g2)\n\nDescription\n-----------\n\nReturns 1 or 0 to indicate whether g1 spatially overlaps g2. The term\nspatially overlaps is used if two geometries intersect and their intersection\nresults in a geometry of the same dimension but not equal to either of the\ngiven geometries.\n\nOVERLAPS() is based on the original MySQL implementation and uses object\nbounding rectangles, while ST_OVERLAPS() uses object shapes.\n\nURL: https://mariadb.com/kb/en/overlaps/','','https://mariadb.com/kb/en/overlaps/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (493,30,'ST_CONTAINS','Syntax\n------\n\nST_CONTAINS(g1,g2)\n\nDescription\n-----------\n\nReturns 1 or 0 to indicate whether a geometry g1 completely contains geometry\ng2.\n\nST_CONTAINS() uses object shapes, while CONTAINS(), based on the original\nMySQL implementation, uses object bounding rectangles.\n\nST_CONTAINS tests the opposite relationship to ST_WITHIN().\n\nExamples\n--------\n\nSET @g1 = ST_GEOMFROMTEXT(\'POLYGON((175 150, 20 40, 50 60, 125 100, 175\n150))\');\n\nSET @g2 = ST_GEOMFROMTEXT(\'POINT(174 149)\');\n\nSELECT ST_CONTAINS(@g1,@g2);\n+----------------------+\n| ST_CONTAINS(@g1,@g2) |\n+----------------------+\n| 1 |\n+----------------------+\n\nSET @g2 = ST_GEOMFROMTEXT(\'POINT(175 151)\');\n\nSELECT ST_CONTAINS(@g1,@g2);\n+----------------------+\n| ST_CONTAINS(@g1,@g2) |\n+----------------------+\n| 0 |\n+----------------------+\n\nURL: https://mariadb.com/kb/en/st-contains/','','https://mariadb.com/kb/en/st-contains/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (494,30,'ST_CROSSES','Syntax\n------\n\nST_CROSSES(g1,g2)\n\nDescription\n-----------\n\nReturns 1 if geometry g1 spatially crosses geometry g2. Returns NULL if g1 is\na Polygon or a MultiPolygon, or if g2 is a Point or a MultiPoint. Otherwise,\nreturns 0.\n\nThe term spatially crosses denotes a spatial relation between two given\ngeometries that has the following properties:\n\n* The two geometries intersect\n* Their intersection results in a geometry that has a dimension that is one\n less than the maximum dimension of the two given geometries\n* Their intersection is not equal to either of the two given geometries\n\nST_CROSSES() uses object shapes, while CROSSES(), based on the original MySQL\nimplementation, uses object bounding rectangles.\n\nExamples\n--------\n\nSET @g1 = ST_GEOMFROMTEXT(\'LINESTRING(174 149, 176 151)\');\n\nSET @g2 = ST_GEOMFROMTEXT(\'POLYGON((175 150, 20 40, 50 60, 125 100, 175\n150))\');\n\nSELECT ST_CROSSES(@g1,@g2);\n+---------------------+\n| ST_CROSSES(@g1,@g2) |\n+---------------------+\n| 1 |\n+---------------------+\n\nSET @g1 = ST_GEOMFROMTEXT(\'LINESTRING(176 149, 176 151)\');\n\nSELECT ST_CROSSES(@g1,@g2);\n+---------------------+\n| ST_CROSSES(@g1,@g2) |\n+---------------------+\n| 0 |\n+---------------------+\n\nURL: https://mariadb.com/kb/en/st-crosses/','','https://mariadb.com/kb/en/st-crosses/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (495,30,'ST_DIFFERENCE','Syntax\n------\n\nST_DIFFERENCE(g1,g2)\n\nDescription\n-----------\n\nReturns a geometry representing the point set difference of the given geometry\nvalues.\n\nExample\n-------\n\nSET @g1 = POINT(10,10), @g2 = POINT(20,20);\n\nSELECT ST_AsText(ST_Difference(@g1, @g2));\n+------------------------------------+\n| ST_AsText(ST_Difference(@g1, @g2)) |\n+------------------------------------+\n| POINT(10 10) |\n+------------------------------------+\n\nURL: https://mariadb.com/kb/en/st_difference/','','https://mariadb.com/kb/en/st_difference/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (496,30,'ST_DISJOINT','Syntax\n------\n\nST_DISJOINT(g1,g2)\n\nDescription\n-----------\n\nReturns 1 or 0 to indicate whether geometry g1 is spatially disjoint from\n(does not intersect with) geometry g2.\n\nST_DISJOINT() uses object shapes, while DISJOINT(), based on the original\nMySQL implementation, uses object bounding rectangles.\n\nST_DISJOINT() tests the opposite relationship to ST_INTERSECTS().\n\nExamples\n--------\n\nSET @g1 = ST_GEOMFROMTEXT(\'POINT(0 0)\');\n\nSET @g2 = ST_GEOMFROMTEXT(\'LINESTRING(2 0, 0 2)\');\n\nSELECT ST_DISJOINT(@g1,@g2);\n+----------------------+\n| ST_DISJOINT(@g1,@g2) |\n+----------------------+\n| 1 |\n+----------------------+\n\nSET @g2 = ST_GEOMFROMTEXT(\'LINESTRING(0 0, 0 2)\');\n\nSELECT ST_DISJOINT(@g1,@g2);\n+----------------------+\n| ST_DISJOINT(@g1,@g2) |\n+----------------------+\n| 0 |\n+----------------------+\n\nURL: https://mariadb.com/kb/en/st_disjoint/','','https://mariadb.com/kb/en/st_disjoint/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (497,30,'ST_DISTANCE','Syntax\n------\n\nST_DISTANCE(g1,g2)\n\nDescription\n-----------\n\nReturns the distance between two geometries, or null if not given valid inputs.\n\nExample\n-------\n\nSELECT ST_Distance(POINT(1,2),POINT(2,2));\n+------------------------------------+\n| ST_Distance(POINT(1,2),POINT(2,2)) |\n+------------------------------------+\n| 1 |\n+------------------------------------+\n\nURL: https://mariadb.com/kb/en/st_distance/','','https://mariadb.com/kb/en/st_distance/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (498,30,'ST_DISTANCE_SPHERE','MariaDB starting with 10.2.38\n-----------------------------\nST_DISTANCE_SPHERE was introduced in MariaDB 10.2.38, MariaDB 10.3.29, MariaDB\n10.4.19 and MariaDB 10.5.10.\n\nSyntax\n------\n\nST_DISTANCE_SPHERE(g1,g2,[r])\n\nDescription\n-----------\n\nReturns the spherical distance between two geometries (point or multipoint) on\na sphere with the optional radius r (default is the Earth radius if r is not\nspecified), or NULL if not given valid inputs.\n\nExample\n-------\n\nset @zenica = ST_GeomFromText(\'POINT(17.907743 44.203438)\');\nset @sarajevo = ST_GeomFromText(\'POINT(18.413076 43.856258)\');\nSELECT ST_Distance_Sphere(@zenica, @sarajevo);\n55878.59337591705\n\nURL: https://mariadb.com/kb/en/st_distance_sphere/','','https://mariadb.com/kb/en/st_distance_sphere/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (499,30,'ST_EQUALS','Syntax\n------\n\nST_EQUALS(g1,g2)\n\nDescription\n-----------\n\nReturns 1 or 0 to indicate whether geometry g1 is spatially equal to geometry\ng2.\n\nST_EQUALS() uses object shapes, while EQUALS(), based on the original MySQL\nimplementation, uses object bounding rectangles.\n\nExamples\n--------\n\nSET @g1 = ST_GEOMFROMTEXT(\'LINESTRING(174 149, 176 151)\');\n\nSET @g2 = ST_GEOMFROMTEXT(\'LINESTRING(176 151, 174 149)\');\n\nSELECT ST_EQUALS(@g1,@g2);\n+--------------------+\n| ST_EQUALS(@g1,@g2) |\n+--------------------+\n| 1 |\n+--------------------+\n\nSET @g1 = ST_GEOMFROMTEXT(\'POINT(0 2)\');\n\nSET @g1 = ST_GEOMFROMTEXT(\'POINT(2 0)\');\n\nSELECT ST_EQUALS(@g1,@g2);\n+--------------------+\n| ST_EQUALS(@g1,@g2) |\n+--------------------+\n| 0 |\n+--------------------+\n\nURL: https://mariadb.com/kb/en/st-equals/','','https://mariadb.com/kb/en/st-equals/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (500,30,'ST_INTERSECTS','Syntax\n------\n\nST_INTERSECTS(g1,g2)\n\nDescription\n-----------\n\nReturns 1 or 0 to indicate whether geometry g1 spatially intersects geometry\ng2.\n\nST_INTERSECTS() uses object shapes, while INTERSECTS(), based on the original\nMySQL implementation, uses object bounding rectangles.\n\nST_INTERSECTS() tests the opposite relationship to ST_DISJOINT().\n\nExamples\n--------\n\nSET @g1 = ST_GEOMFROMTEXT(\'POINT(0 0)\');\n\nSET @g2 = ST_GEOMFROMTEXT(\'LINESTRING(0 0, 0 2)\');\n\nSELECT ST_INTERSECTS(@g1,@g2);\n+------------------------+\n| ST_INTERSECTS(@g1,@g2) |\n+------------------------+\n| 1 |\n+------------------------+\n\nSET @g2 = ST_GEOMFROMTEXT(\'LINESTRING(2 0, 0 2)\');\n\nSELECT ST_INTERSECTS(@g1,@g2);\n+------------------------+\n| ST_INTERSECTS(@g1,@g2) |\n+------------------------+\n| 0 |\n+------------------------+\n\nURL: https://mariadb.com/kb/en/st-intersects/','','https://mariadb.com/kb/en/st-intersects/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (501,30,'ST_LENGTH','Syntax\n------\n\nST_LENGTH(ls)\n\nDescription\n-----------\n\nReturns as a double-precision number the length of the LineString value ls in\nits associated spatial reference.\n\nExamples\n--------\n\nSET @ls = \'LineString(1 1,2 2,3 3)\';\n\nSELECT ST_LENGTH(ST_GeomFromText(@ls));\n+---------------------------------+\n| ST_LENGTH(ST_GeomFromText(@ls)) |\n+---------------------------------+\n| 2.82842712474619 |\n+---------------------------------+\n\nURL: https://mariadb.com/kb/en/st_length/','','https://mariadb.com/kb/en/st_length/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (502,30,'ST_OVERLAPS','Syntax\n------\n\nST_OVERLAPS(g1,g2)\n\nDescription\n-----------\n\nReturns 1 or 0 to indicate whether geometry g1 spatially overlaps geometry g2.\n\nThe term spatially overlaps is used if two geometries intersect and their\nintersection results in a geometry of the same dimension but not equal to\neither of the given geometries.\n\nST_OVERLAPS() uses object shapes, while OVERLAPS(), based on the original\nMySQL implementation, uses object bounding rectangles.\n\nURL: https://mariadb.com/kb/en/st-overlaps/','','https://mariadb.com/kb/en/st-overlaps/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (503,30,'ST_TOUCHES','Syntax\n------\n\nST_TOUCHES(g1,g2)\n\nDescription\n-----------\n\nReturns 1 or 0 to indicate whether geometry g1 spatially touches geometry g2.\nTwo geometries spatially touch if the interiors of the geometries do not\nintersect, but the boundary of one of the geometries intersects either the\nboundary or the interior of the other.\n\nST_TOUCHES() uses object shapes, while TOUCHES(), based on the original MySQL\nimplementation, uses object bounding rectangles.\n\nExamples\n--------\n\nSET @g1 = ST_GEOMFROMTEXT(\'POINT(2 0)\');\n\nSET @g2 = ST_GEOMFROMTEXT(\'LINESTRING(2 0, 0 2)\');\n\nSELECT ST_TOUCHES(@g1,@g2);\n+---------------------+\n| ST_TOUCHES(@g1,@g2) |\n+---------------------+\n| 1 |\n+---------------------+\n\nSET @g1 = ST_GEOMFROMTEXT(\'POINT(2 1)\');\n\nSELECT ST_TOUCHES(@g1,@g2);\n+---------------------+\n| ST_TOUCHES(@g1,@g2) |\n+---------------------+\n| 0 |\n+---------------------+\n\nURL: https://mariadb.com/kb/en/st-touches/','','https://mariadb.com/kb/en/st-touches/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (504,30,'ST_WITHIN','Syntax\n------\n\nST_WITHIN(g1,g2)\n\nDescription\n-----------\n\nReturns 1 or 0 to indicate whether geometry g1 is spatially within geometry g2.\n\nThis tests the opposite relationship as ST_CONTAINS().\n\nST_WITHIN() uses object shapes, while WITHIN(), based on the original MySQL\nimplementation, uses object bounding rectangles.\n\nExamples\n--------\n\nSET @g1 = ST_GEOMFROMTEXT(\'POINT(174 149)\');\n\nSET @g2 = ST_GEOMFROMTEXT(\'POLYGON((175 150, 20 40, 50 60, 125 100, 175\n150))\');\n\nSELECT ST_WITHIN(@g1,@g2);\n+--------------------+\n| ST_WITHIN(@g1,@g2) |\n+--------------------+\n| 1 |\n+--------------------+\n\nSET @g1 = ST_GEOMFROMTEXT(\'POINT(176 151)\');\n\nSELECT ST_WITHIN(@g1,@g2);\n+--------------------+\n| ST_WITHIN(@g1,@g2) |\n+--------------------+\n| 0 |\n+--------------------+\n\nURL: https://mariadb.com/kb/en/st-within/','','https://mariadb.com/kb/en/st-within/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (505,30,'TOUCHES','Syntax\n------\n\nTouches(g1,g2)\n\nDescription\n-----------\n\nReturns 1 or 0 to indicate whether g1 spatially touches g2. Two geometries\nspatially touch if the interiors of the geometries do not intersect, but the\nboundary of one of the geometries intersects either the boundary or the\ninterior of the other.\n\nTOUCHES() is based on the original MySQL implementation and uses object\nbounding rectangles, while ST_TOUCHES() uses object shapes.\n\nURL: https://mariadb.com/kb/en/touches/','','https://mariadb.com/kb/en/touches/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (506,30,'WITHIN','Syntax\n------\n\nWithin(g1,g2)\n\nDescription\n-----------\n\nReturns 1 or 0 to indicate whether g1 is spatially within g2. This tests the\nopposite relationship as Contains().\n\nWITHIN() is based on the original MySQL implementation, and uses object\nbounding rectangles, while ST_WITHIN() uses object shapes.\n\nExamples\n--------\n\nSET @g1 = GEOMFROMTEXT(\'POINT(174 149)\');\nSET @g2 = GEOMFROMTEXT(\'POINT(176 151)\');\nSET @g3 = GEOMFROMTEXT(\'POLYGON((175 150, 20 40, 50 60, 125 100, 175 150))\');\n\nSELECT within(@g1,@g3);\n+-----------------+\n| within(@g1,@g3) |\n+-----------------+\n| 1 |\n+-----------------+\n\nSELECT within(@g2,@g3);\n+-----------------+\n| within(@g2,@g3) |\n+-----------------+\n| 0 |\n+-----------------+\n\nURL: https://mariadb.com/kb/en/within/','','https://mariadb.com/kb/en/within/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (507,31,'Microseconds in MariaDB','The TIME, DATETIME, and TIMESTAMP types, along with the temporal functions,\nCAST and dynamic columns, support microseconds. The datetime precision of a\ncolumn can be specified when creating the table with CREATE TABLE, for example:\n\nCREATE TABLE example(\n col_microsec DATETIME(6),\n col_millisec TIME(3)\n);\n\nGenerally, the precision can be specified for any TIME, DATETIME, or TIMESTAMP\ncolumn, in parentheses, after the type name. The datetime precision specifies\nnumber of digits after the decimal dot and can be any integer number from 0 to\n6. If no precision is specified it is assumed to be 0, for backward\ncompatibility reasons.\n\nA datetime precision can be specified wherever a type name is used. For\nexample:\n\n* when declaring arguments of stored routines.\n* when specifying a return type of a stored function.\n* when declaring variables.\n* in a CAST function:create function example(x datetime(5)) returns time(4)\nbegin\n declare y timestamp(6);\n return cast(x as time(2));\nend;\n\n%f is used as the formatting option for microseconds in the STR_TO_DATE,\nDATE_FORMAT and FROM_UNIXTIME functions, for example:\n\nSELECT STR_TO_DATE(\'20200809 020917076\',\'%Y%m%d %H%i%s%f\');\n+-----------------------------------------------------+\n| STR_TO_DATE(\'20200809 020917076\',\'%Y%m%d %H%i%s%f\') |\n+-----------------------------------------------------+\n| 2020-08-09 02:09:17.076000 |\n+-----------------------------------------------------+\n\nAdditional Information\n----------------------\n\n* when comparing anything to a temporal value (DATETIME, TIME, DATE, or\nTIMESTAMP), both values are compared as temporal values, not as strings.\n* The INFORMATION_SCHEMA.COLUMNS table has a new column DATETIME_PRECISION\n* NOW(), CURTIME(), UTC_TIMESTAMP(), UTC_TIME(), CURRENT_TIME(),\nCURRENT_TIMESTAMP(), LOCALTIME() and LOCALTIMESTAMP() now accept datetime\nprecision as an optional argument. For example:SELECT CURTIME(4);\n--> 10:11:12.3456\n\n* TIME_TO_SEC() and UNIX_TIMESTAMP() preserve microseconds of the argument.\nThese functions will return a decimal number if the result non-zero datetime\nprecision and an integer otherwise (for backward compatibility).SELECT\nTIME_TO_SEC(\'10:10:10.12345\');\n--> 36610.12345\n\n* Current versions of this patch fix a bug in the following optimization: in\n certain queries with DISTINCT MariaDB can ignore this clause if it can\n prove that all result rows are unique anyway, for example, when a primary key\n is compared with a constant. Sometimes this optimization was applied\n incorrectly, though — for example, when comparing a\n string with a date constant. This is now fixed.\n* DATE_ADD() and DATE_SUB() functions can now take a TIME\n expression as an argument (not just DATETIME as before).SELECT\nTIME(\'10:10:10\') + INTERVAL 100 MICROSECOND;\n--> 10:10:10.000100\n\n* The event_time field in the mysql.general_log table and the start_time,\nquery_time, and lock_time fields in the mysql.slow_log table now store values\nwith microsecond precision.\n* This patch fixed a bug when comparing a temporal value using the BETWEEN\noperator and one of the operands is NULL.\n* The old syntax TIMESTAMP(N), where N is the display width, is no longer\nsupported. It was deprecated in MySQL 4.1.0 (released on\n 2003-04-03).\n* when a DATETIME value is compared to a TIME value, the latter is treated as\na full datetime with a zero date part, similar to comparing DATE to a\nDATETIME, or to comparing DECIMAL numbers.\n Earlier versions of MariaDB used to compare only the time part of both\noperands in such a case.\n* In MariaDB, an extra column TIME_MS has been added to the\nINFORMATION_SCHEMA.PROCESSLIST table, as well as to the output of SHOW FULL\nPROCESSLIST.\n\nNote: When you convert a temporal value to a value with a smaller precision,\nit will be truncated, not rounded. This is done to guarantee that the date\npart is not changed. For example:\n\nSELECT CAST(\'2009-12-31 23:59:59.998877\' as DATETIME(3));\n-> 2009-12-31 23:59:59.998\n\nMySQL 5.6 Microseconds\n----------------------\n\nMySQL 5.6 introduced microseconds using a slightly different implementation to\nMariaDB 5.3. Since MariaDB 10.1, MariaDB has defaulted to the MySQL format, by\nmeans of the --mysql56-temporal-format variable. The MySQL version requires\nslightly more storage but has some advantages in permitting the eventual\nsupport of negative dates, and in replication.\n\nURL: https://mariadb.com/kb/en/microseconds-in-mariadb/','','https://mariadb.com/kb/en/microseconds-in-mariadb/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (508,31,'Date and Time Units','The INTERVAL keyword can be used to add or subtract a time interval of time to\na DATETIME, DATE or TIME value.\n\nThe syntax is:\n\nINTERVAL time_quantity time_unit\n\nFor example, the SECOND unit is used below by the DATE_ADD() function:\n\nSELECT \'2008-12-31 23:59:59\' + INTERVAL 1 SECOND;\n+-------------------------------------------+\n| \'2008-12-31 23:59:59\' + INTERVAL 1 SECOND |\n+-------------------------------------------+\n| 2009-01-01 00:00:00 |\n+-------------------------------------------+\n\nThe following units are valid:\n\n+---------------------+------------------------------------------------------+\n| Unit | Description |\n+---------------------+------------------------------------------------------+\n| MICROSECOND | Microseconds |\n+---------------------+------------------------------------------------------+\n| SECOND | Seconds |\n+---------------------+------------------------------------------------------+\n| MINUTE | Minutes |\n+---------------------+------------------------------------------------------+\n| HOUR | Hours |\n+---------------------+------------------------------------------------------+\n| DAY | Days |\n+---------------------+------------------------------------------------------+\n| WEEK | Weeks |\n+---------------------+------------------------------------------------------+\n| MONTH | Months |\n+---------------------+------------------------------------------------------+\n| QUARTER | Quarters |\n+---------------------+------------------------------------------------------+\n| YEAR | Years |\n+---------------------+------------------------------------------------------+\n| SECOND_MICROSECOND | Seconds.Microseconds |\n+---------------------+------------------------------------------------------+\n| MINUTE_MICROSECOND | Minutes.Seconds.Microseconds |\n+---------------------+------------------------------------------------------+\n| MINUTE_SECOND | Minutes.Seconds |\n+---------------------+------------------------------------------------------+\n| HOUR_MICROSECOND | Hours.Minutes.Seconds.Microseconds |\n+---------------------+------------------------------------------------------+\n| HOUR_SECOND | Hours.Minutes.Seconds |\n+---------------------+------------------------------------------------------+\n| HOUR_MINUTE | Hours.Minutes |\n+---------------------+------------------------------------------------------+\n| DAY_MICROSECOND | Days Hours.Minutes.Seconds.Microseconds |\n+---------------------+------------------------------------------------------+\n| DAY_SECOND | Days Hours.Minutes.Seconds |\n+---------------------+------------------------------------------------------+\n| DAY_MINUTE | Days Hours.Minutes |\n+---------------------+------------------------------------------------------+\n| DAY_HOUR | Days Hours |\n+---------------------+------------------------------------------------------+\n| YEAR_MONTH | Years-Months |\n+---------------------+------------------------------------------------------+\n\nThe time units containing an underscore are composite; that is, they consist\nof multiple base time units. For base time units, time_quantity is an integer\nnumber. For composite units, the quantity must be expressed as a string with\nmultiple integer numbers separated by any punctuation character.\n\nExample of composite units:\n\nINTERVAL \'2:2\' YEAR_MONTH\nINTERVAL \'1:30:30\' HOUR_SECOND\nINTERVAL \'1!30!30\' HOUR_SECOND -- same as above\n\nTime units can be used in the following contexts:\n\n* after a + or a - operator;\n* with the following DATE or TIME functions: ADDDATE(), SUBDATE(), DATE_ADD(),\nDATE_SUB(), TIMESTAMPADD(), TIMESTAMPDIFF(), EXTRACT();\n* in the ON SCHEDULE clause of CREATE EVENT and ALTER EVENT.\n* when defining a partitioning BY SYSTEM_TIME\n\nURL: https://mariadb.com/kb/en/date-and-time-units/','','https://mariadb.com/kb/en/date-and-time-units/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (509,31,'ADD_MONTHS','MariaDB starting with 10.6.1\n----------------------------\nThe ADD_MONTHS function was introduced in MariaDB 10.6.1 to enhance Oracle\ncompatibility. Similar functionality can be achieved with the DATE_ADD\nfunction.\n\nSyntax\n------\n\nADD_MONTHS(date, months)\n\nDescription\n-----------\n\nADD_MONTHS adds an integer months to a given date (DATE, DATETIME or\nTIMESTAMP), returning the resulting date.\n\nmonths can be positive or negative.\n\nThe resulting day component will remain the same as that specified in date,\nunless the resulting month has fewer days than the day component of the given\ndate, in which case the day will be the last day of the resulting month.\n\nReturns NULL if given an invalid date, or a NULL argument.\n\nExamples\n--------\n\nSELECT ADD_MONTHS(\'2012-01-31\', 2);\n+-----------------------------+\n| ADD_MONTHS(\'2012-01-31\', 2) |\n+-----------------------------+\n| 2012-03-31 |\n+-----------------------------+\n\nSELECT ADD_MONTHS(\'2012-01-31\', -5);\n+------------------------------+\n| ADD_MONTHS(\'2012-01-31\', -5) |\n+------------------------------+\n| 2011-08-31 |\n+------------------------------+\n\nSELECT ADD_MONTHS(\'2011-01-31\', 1);\n+-----------------------------+\n| ADD_MONTHS(\'2011-01-31\', 1) |\n+-----------------------------+\n| 2011-02-28 |\n+-----------------------------+\n\nSELECT ADD_MONTHS(\'2012-01-31\', 1);\n+-----------------------------+\n| ADD_MONTHS(\'2012-01-31\', 1) |\n+-----------------------------+\n| 2012-02-29 |\n+-----------------------------+\n\nSELECT ADD_MONTHS(\'2012-01-31\', 2);\n+-----------------------------+\n| ADD_MONTHS(\'2012-01-31\', 2) |\n+-----------------------------+\n| 2012-03-31 |\n+-----------------------------+\n\nSELECT ADD_MONTHS(\'2012-01-31\', 3);\n+-----------------------------+\n| ADD_MONTHS(\'2012-01-31\', 3) |\n+-----------------------------+\n| 2012-04-30 |\n+-----------------------------+\n\nURL: https://mariadb.com/kb/en/add_months/','','https://mariadb.com/kb/en/add_months/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (510,31,'ADDDATE','Syntax\n------\n\nADDDATE(date,INTERVAL expr unit), ADDDATE(expr,days)\n\nDescription\n-----------\n\nWhen invoked with the INTERVAL form of the second argument, ADDDATE() is a\nsynonym for DATE_ADD(). The related function SUBDATE() is a synonym for\nDATE_SUB(). For information on the INTERVAL unit argument, see the discussion\nfor DATE_ADD().\n\nWhen invoked with the days form of the second argument, MariaDB treats it as\nan integer number of days to be added to expr.\n\nExamples\n--------\n\nSELECT DATE_ADD(\'2008-01-02\', INTERVAL 31 DAY);\n+-----------------------------------------+\n| DATE_ADD(\'2008-01-02\', INTERVAL 31 DAY) |\n+-----------------------------------------+\n| 2008-02-02 |\n+-----------------------------------------+\n\nSELECT ADDDATE(\'2008-01-02\', INTERVAL 31 DAY);\n+----------------------------------------+\n| ADDDATE(\'2008-01-02\', INTERVAL 31 DAY) |\n+----------------------------------------+\n| 2008-02-02 |\n+----------------------------------------+\n\nSELECT ADDDATE(\'2008-01-02\', 31);\n+---------------------------+\n| ADDDATE(\'2008-01-02\', 31) |\n+---------------------------+\n| 2008-02-02 |\n+---------------------------+\n\nCREATE TABLE t1 (d DATETIME);\nINSERT INTO t1 VALUES\n (\"2007-01-30 21:31:07\"),\n (\"1983-10-15 06:42:51\"),\n (\"2011-04-21 12:34:56\"),\n (\"2011-10-30 06:31:41\"),\n (\"2011-01-30 14:03:25\"),\n (\"2004-10-07 11:19:34\");\n\nSELECT d, ADDDATE(d, 10) from t1;\n+---------------------+---------------------+\n| d | ADDDATE(d, 10) |\n+---------------------+---------------------+\n| 2007-01-30 21:31:07 | 2007-02-09 21:31:07 |\n| 1983-10-15 06:42:51 | 1983-10-25 06:42:51 |\n| 2011-04-21 12:34:56 | 2011-05-01 12:34:56 |\n| 2011-10-30 06:31:41 | 2011-11-09 06:31:41 |\n| 2011-01-30 14:03:25 | 2011-02-09 14:03:25 |\n| 2004-10-07 11:19:34 | 2004-10-17 11:19:34 |\n+---------------------+---------------------+\n\nSELECT d, ADDDATE(d, INTERVAL 10 HOUR) from t1;\n+---------------------+------------------------------+\n| d | ADDDATE(d, INTERVAL 10 HOUR) |\n+---------------------+------------------------------+\n| 2007-01-30 21:31:07 | 2007-01-31 07:31:07 |\n| 1983-10-15 06:42:51 | 1983-10-15 16:42:51 |\n| 2011-04-21 12:34:56 | 2011-04-21 22:34:56 |\n| 2011-10-30 06:31:41 | 2011-10-30 16:31:41 |\n| 2011-01-30 14:03:25 | 2011-01-31 00:03:25 |\n| 2004-10-07 11:19:34 | 2004-10-07 21:19:34 |\n+---------------------+------------------------------+\n\nURL: https://mariadb.com/kb/en/adddate/','','https://mariadb.com/kb/en/adddate/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (511,31,'ADDTIME','Syntax\n------\n\nADDTIME(expr1,expr2)\n\nDescription\n-----------\n\nADDTIME() adds expr2 to expr1 and returns the result. expr1 is a time or\ndatetime expression, and expr2 is a time expression.\n\nExamples\n--------\n\nSELECT ADDTIME(\'2007-12-31 23:59:59.999999\', \'1 1:1:1.000002\');\n+---------------------------------------------------------+\n| ADDTIME(\'2007-12-31 23:59:59.999999\', \'1 1:1:1.000002\') |\n+---------------------------------------------------------+\n| 2008-01-02 01:01:01.000001 |\n+---------------------------------------------------------+\n\nSELECT ADDTIME(\'01:00:00.999999\', \'02:00:00.999998\');\n+-----------------------------------------------+\n| ADDTIME(\'01:00:00.999999\', \'02:00:00.999998\') |\n+-----------------------------------------------+\n| 03:00:01.999997 |\n+-----------------------------------------------+\n\nURL: https://mariadb.com/kb/en/addtime/','','https://mariadb.com/kb/en/addtime/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (512,31,'CONVERT_TZ','Syntax\n------\n\nCONVERT_TZ(dt,from_tz,to_tz)\n\nDescription\n-----------\n\nCONVERT_TZ() converts a datetime value dt from the time zone given by from_tz\nto the time zone given by to_tz and returns the resulting value.\n\nIn order to use named time zones, such as GMT, MET or Africa/Johannesburg, the\ntime_zone tables must be loaded (see mysql_tzinfo_to_sql).\n\nNo conversion will take place if the value falls outside of the supported\nTIMESTAMP range (\'1970-01-01 00:00:01\' to \'2038-01-19 05:14:07\' UTC) when\nconverted from from_tz to UTC.\n\nThis function returns NULL if the arguments are invalid (or named time zones\nhave not been loaded).\n\nSee time zones for more information.\n\nExamples\n--------\n\nSELECT CONVERT_TZ(\'2016-01-01 12:00:00\',\'+00:00\',\'+10:00\');\n+-----------------------------------------------------+\n| CONVERT_TZ(\'2016-01-01 12:00:00\',\'+00:00\',\'+10:00\') |\n+-----------------------------------------------------+\n| 2016-01-01 22:00:00 |\n+-----------------------------------------------------+\n\nUsing named time zones (with the time zone tables loaded):\n\nSELECT CONVERT_TZ(\'2016-01-01 12:00:00\',\'GMT\',\'Africa/Johannesburg\');\n+---------------------------------------------------------------+\n| CONVERT_TZ(\'2016-01-01 12:00:00\',\'GMT\',\'Africa/Johannesburg\') |\n+---------------------------------------------------------------+\n| 2016-01-01 14:00:00 |\n+---------------------------------------------------------------+\n\nThe value is out of the TIMESTAMP range, so no conversion takes place:\n\nSELECT CONVERT_TZ(\'1969-12-31 22:00:00\',\'+00:00\',\'+10:00\');\n+-----------------------------------------------------+\n| CONVERT_TZ(\'1969-12-31 22:00:00\',\'+00:00\',\'+10:00\') |\n+-----------------------------------------------------+\n| 1969-12-31 22:00:00 |\n+-----------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/convert_tz/','','https://mariadb.com/kb/en/convert_tz/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (513,31,'CURDATE','Syntax\n------\n\nCURDATE()\nCURRENT_DATE\nCURRENT_DATE()\n\nDescription\n-----------\n\nCURDATE returns the current date as a value in \'YYYY-MM-DD\' or YYYYMMDD\nformat, depending on whether the function is used in a string or numeric\ncontext.\n\nCURRENT_DATE and CURRENT_DATE() are synonyms.\n\nExamples\n--------\n\nSELECT CURDATE();\n+------------+\n| CURDATE() |\n+------------+\n| 2019-03-05 |\n+------------+\n\nIn a numeric context (note this is not performing date calculations):\n\nSELECT CURDATE() +0;\n+--------------+\n| CURDATE() +0 |\n+--------------+\n| 20190305 |\n+--------------+\n\nData calculation:\n\nSELECT CURDATE() - INTERVAL 5 DAY;\n+----------------------------+\n| CURDATE() - INTERVAL 5 DAY |\n+----------------------------+\n| 2019-02-28 |\n+----------------------------+\n\nURL: https://mariadb.com/kb/en/curdate/','','https://mariadb.com/kb/en/curdate/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (514,31,'CURRENT_DATE','Syntax\n------\n\nCURRENT_DATE, CURRENT_DATE()\n\nDescription\n-----------\n\nCURRENT_DATE and CURRENT_DATE() are synonyms for CURDATE().\n\nURL: https://mariadb.com/kb/en/current_date/','','https://mariadb.com/kb/en/current_date/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (515,31,'CURRENT_TIME','Syntax\n------\n\nCURRENT_TIME\nCURRENT_TIME([precision])\n\nDescription\n-----------\n\nCURRENT_TIME and CURRENT_TIME() are synonyms for CURTIME().\n\nURL: https://mariadb.com/kb/en/current_time/','','https://mariadb.com/kb/en/current_time/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (516,31,'CURRENT_TIMESTAMP','Syntax\n------\n\nCURRENT_TIMESTAMP\nCURRENT_TIMESTAMP([precision])\n\nDescription\n-----------\n\nCURRENT_TIMESTAMP and CURRENT_TIMESTAMP() are synonyms for NOW().\n\nURL: https://mariadb.com/kb/en/current_timestamp/','','https://mariadb.com/kb/en/current_timestamp/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (517,31,'CURTIME','Syntax\n------\n\nCURTIME([precision])\n\nDescription\n-----------\n\nReturns the current time as a value in \'HH:MM:SS\' or HHMMSS.uuuuuu format,\ndepending on whether the function is used in a string or numeric context. The\nvalue is expressed in the current time zone.\n\nThe optional precision determines the microsecond precision. See Microseconds\nin MariaDB.\n\nExamples\n--------\n\nSELECT CURTIME();\n+-----------+\n| CURTIME() |\n+-----------+\n| 12:45:39 |\n+-----------+\n\nSELECT CURTIME() + 0;\n+---------------+\n| CURTIME() + 0 |\n+---------------+\n| 124545.000000 |\n+---------------+\n\nWith precision:\n\nSELECT CURTIME(2);\n+-------------+\n| CURTIME(2) |\n+-------------+\n| 09:49:08.09 |\n+-------------+\n\nURL: https://mariadb.com/kb/en/curtime/','','https://mariadb.com/kb/en/curtime/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (518,31,'DATE FUNCTION','Syntax\n------\n\nDATE(expr)\n\nDescription\n-----------\n\nExtracts the date part of the date or datetime expression expr.\n\nExamples\n--------\n\nSELECT DATE(\'2013-07-18 12:21:32\');\n+-----------------------------+\n| DATE(\'2013-07-18 12:21:32\') |\n+-----------------------------+\n| 2013-07-18 |\n+-----------------------------+\n\nError Handling\n--------------\n\nUntil MariaDB 5.5.32, some versions of MariaDB returned 0000-00-00 when passed\nan invalid date. From 5.5.32, NULL is returned.\n\nURL: https://mariadb.com/kb/en/date-function/','','https://mariadb.com/kb/en/date-function/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (519,31,'DATEDIFF','Syntax\n------\n\nDATEDIFF(expr1,expr2)\n\nDescription\n-----------\n\nDATEDIFF() returns (expr1 – expr2) expressed as a value in days from one date\nto the other. expr1 and expr2 are date or date-and-time expressions. Only the\ndate parts of the values are used in the calculation.\n\nExamples\n--------\n\nSELECT DATEDIFF(\'2007-12-31 23:59:59\',\'2007-12-30\');\n+----------------------------------------------+\n| DATEDIFF(\'2007-12-31 23:59:59\',\'2007-12-30\') |\n+----------------------------------------------+\n| 1 |\n+----------------------------------------------+\n\nSELECT DATEDIFF(\'2010-11-30 23:59:59\',\'2010-12-31\');\n+----------------------------------------------+\n| DATEDIFF(\'2010-11-30 23:59:59\',\'2010-12-31\') |\n+----------------------------------------------+\n| -31 |\n+----------------------------------------------+\n\nCREATE TABLE t1 (d DATETIME);\nINSERT INTO t1 VALUES\n (\"2007-01-30 21:31:07\"),\n (\"1983-10-15 06:42:51\"),\n (\"2011-04-21 12:34:56\"),\n (\"2011-10-30 06:31:41\"),\n (\"2011-01-30 14:03:25\"),\n (\"2004-10-07 11:19:34\");\n\nSELECT NOW();\n+---------------------+\n| NOW() |\n+---------------------+\n| 2011-05-23 10:56:05 |\n+---------------------+\n\nSELECT d, DATEDIFF(NOW(),d) FROM t1;\n+---------------------+-------------------+\n| d | DATEDIFF(NOW(),d) |\n+---------------------+-------------------+\n| 2007-01-30 21:31:07 | 1574 |\n| 1983-10-15 06:42:51 | 10082 |\n| 2011-04-21 12:34:56 | 32 |\n| 2011-10-30 06:31:41 | -160 |\n| 2011-01-30 14:03:25 | 113 |\n| 2004-10-07 11:19:34 | 2419 |\n+---------------------+-------------------+\n\nURL: https://mariadb.com/kb/en/datediff/','','https://mariadb.com/kb/en/datediff/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (520,31,'DATE_ADD','Syntax\n------\n\nDATE_ADD(date,INTERVAL expr unit)\n\nDescription\n-----------\n\nPerforms date arithmetic. The date argument specifies the starting date or\ndatetime value. expr is an expression specifying the interval value to be\nadded or subtracted from the starting date. expr is a string; it may start\nwith a \"-\" for negative intervals. unit is a keyword indicating the units in\nwhich the expression should be interpreted. See Date and Time Units for a\ncomplete list of permitted units.\n\nExamples\n--------\n\nSELECT \'2008-12-31 23:59:59\' + INTERVAL 1 SECOND;\n+-------------------------------------------+\n| \'2008-12-31 23:59:59\' + INTERVAL 1 SECOND |\n+-------------------------------------------+\n| 2009-01-01 00:00:00 |\n+-------------------------------------------+\n\nSELECT INTERVAL 1 DAY + \'2008-12-31\';\n+-------------------------------+\n| INTERVAL 1 DAY + \'2008-12-31\' |\n+-------------------------------+\n| 2009-01-01 |\n+-------------------------------+\n\nSELECT \'2005-01-01\' - INTERVAL 1 SECOND;\n+----------------------------------+\n| \'2005-01-01\' - INTERVAL 1 SECOND |\n+----------------------------------+\n| 2004-12-31 23:59:59 |\n+----------------------------------+\n\nSELECT DATE_ADD(\'2000-12-31 23:59:59\', INTERVAL 1 SECOND);\n+----------------------------------------------------+\n| DATE_ADD(\'2000-12-31 23:59:59\', INTERVAL 1 SECOND) |\n+----------------------------------------------------+\n| 2001-01-01 00:00:00 |\n+----------------------------------------------------+\n\nSELECT DATE_ADD(\'2010-12-31 23:59:59\', INTERVAL 1 DAY);\n+-------------------------------------------------+\n| DATE_ADD(\'2010-12-31 23:59:59\', INTERVAL 1 DAY) |\n+-------------------------------------------------+\n| 2011-01-01 23:59:59 |\n+-------------------------------------------------+\n\nSELECT DATE_ADD(\'2100-12-31 23:59:59\', INTERVAL \'1:1\' MINUTE_SECOND);\n+---------------------------------------------------------------+\n| DATE_ADD(\'2100-12-31 23:59:59\', INTERVAL \'1:1\' MINUTE_SECOND) |\n+---------------------------------------------------------------+\n| 2101-01-01 00:01:00 |\n+---------------------------------------------------------------+\n\nSELECT DATE_ADD(\'1900-01-01 00:00:00\', INTERVAL \'-1 10\' DAY_HOUR);\n+------------------------------------------------------------+\n| DATE_ADD(\'1900-01-01 00:00:00\', INTERVAL \'-1 10\' DAY_HOUR) |\n+------------------------------------------------------------+\n| 1899-12-30 14:00:00 |\n+------------------------------------------------------------+\n\nSELECT DATE_ADD(\'1992-12-31 23:59:59.000002\', INTERVAL \'1.999999\'\nSECOND_MICROSECOND);\n+------------------------------------------------------------------------------\n-+\n| DATE_ADD(\'1992-12-31 23:59:59.000002\', INTERVAL \'1.999999\'\nSECOND_MICROSECOND) |\n+------------------------------------------------------------------------------\n-+\n| 1993-01-01 00:00:01.000001 \n |\n+------------------------------------------------------------------------------\n-+\n\nURL: https://mariadb.com/kb/en/date_add/','','https://mariadb.com/kb/en/date_add/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (521,31,'DATE_FORMAT','Syntax\n------\n\nDATE_FORMAT(date, format[, locale])\n\nDescription\n-----------\n\nFormats the date value according to the format string.\n\nThe language used for the names is controlled by the value of the\nlc_time_names system variable. See server locale for more on the supported\nlocales.\n\nThe options that can be used by DATE_FORMAT(), as well as its inverse\nSTR_TO_DATE() and the FROM_UNIXTIME() function, are:\n\n+---------------------------+------------------------------------------------+\n| Option | Description |\n+---------------------------+------------------------------------------------+\n| %a | Short weekday name in current locale |\n| | (Variable lc_time_names). |\n+---------------------------+------------------------------------------------+\n| %b | Short form month name in current locale. For |\n| | locale en_US this is one of: |\n| | Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov |\n| | or Dec. |\n+---------------------------+------------------------------------------------+\n| %c | Month with 1 or 2 digits. |\n+---------------------------+------------------------------------------------+\n| %D | Day with English suffix \'th\', \'nd\', \'st\' or |\n| | \'rd\'\'. (1st, 2nd, 3rd...). |\n+---------------------------+------------------------------------------------+\n| %d | Day with 2 digits. |\n+---------------------------+------------------------------------------------+\n| %e | Day with 1 or 2 digits. |\n+---------------------------+------------------------------------------------+\n| %f | Microseconds 6 digits. |\n+---------------------------+------------------------------------------------+\n| %H | Hour with 2 digits between 00-23. |\n+---------------------------+------------------------------------------------+\n| %h | Hour with 2 digits between 01-12. |\n+---------------------------+------------------------------------------------+\n| %I | Hour with 2 digits between 01-12. |\n+---------------------------+------------------------------------------------+\n| %i | Minute with 2 digits. |\n+---------------------------+------------------------------------------------+\n| %j | Day of the year (001-366) |\n+---------------------------+------------------------------------------------+\n| %k | Hour with 1 digits between 0-23. |\n+---------------------------+------------------------------------------------+\n| %l | Hour with 1 digits between 1-12. |\n+---------------------------+------------------------------------------------+\n| %M | Full month name in current locale (Variable |\n| | lc_time_names). |\n+---------------------------+------------------------------------------------+\n| %m | Month with 2 digits. |\n+---------------------------+------------------------------------------------+\n| %p | AM/PM according to current locale (Variable |\n| | lc_time_names). |\n+---------------------------+------------------------------------------------+\n| %r | Time in 12 hour format, followed by AM/PM. |\n| | Short for \'%I:%i:%S %p\'. |\n+---------------------------+------------------------------------------------+\n| %S | Seconds with 2 digits. |\n+---------------------------+------------------------------------------------+\n| %s | Seconds with 2 digits. |\n+---------------------------+------------------------------------------------+\n| %T | Time in 24 hour format. Short for \'%H:%i:%S\'. |\n+---------------------------+------------------------------------------------+\n| %U | Week number (00-53), when first day of the |\n| | week is Sunday. |\n+---------------------------+------------------------------------------------+\n| %u | Week number (00-53), when first day of the |\n| | week is Monday. |\n+---------------------------+------------------------------------------------+\n| %V | Week number (01-53), when first day of the |\n| | week is Sunday. Used with %X. |\n+---------------------------+------------------------------------------------+\n| %v | Week number (01-53), when first day of the |\n| | week is Monday. Used with %x. |\n+---------------------------+------------------------------------------------+\n| %W | Full weekday name in current locale (Variable |\n| | lc_time_names). |\n+---------------------------+------------------------------------------------+\n| %w | Day of the week. 0 = Sunday, 6 = Saturday. |\n+---------------------------+------------------------------------------------+\n| %X | Year with 4 digits when first day of the week |\n| | is Sunday. Used with %V. |\n+---------------------------+------------------------------------------------+\n| %x | Year with 4 digits when first day of the week |\n| | is Monday. Used with %v. |\n+---------------------------+------------------------------------------------+\n| %Y | Year with 4 digits. |\n+---------------------------+------------------------------------------------+\n| %y | Year with 2 digits. |\n+---------------------------+------------------------------------------------+\n| %# | For str_to_date(), skip all numbers. |\n+---------------------------+------------------------------------------------+\n| %. | For str_to_date(), skip all punctation |\n| | characters. |\n+---------------------------+------------------------------------------------+\n| %@ | For str_to_date(), skip all alpha characters. |\n+---------------------------+------------------------------------------------+\n| %% | A literal % character. |\n+---------------------------+------------------------------------------------+\n\nTo get a date in one of the standard formats, GET_FORMAT() can be used.\n\nExamples\n--------\n\nSELECT DATE_FORMAT(\'2009-10-04 22:23:00\', \'%W %M %Y\');\n+------------------------------------------------+\n| DATE_FORMAT(\'2009-10-04 22:23:00\', \'%W %M %Y\') |\n+------------------------------------------------+\n| Sunday October 2009 |\n+------------------------------------------------+\n\nSELECT DATE_FORMAT(\'2007-10-04 22:23:00\', \'%H:%i:%s\');\n+------------------------------------------------+\n| DATE_FORMAT(\'2007-10-04 22:23:00\', \'%H:%i:%s\') |\n+------------------------------------------------+\n| 22:23:00 |\n+------------------------------------------------+\n\nSELECT DATE_FORMAT(\'1900-10-04 22:23:00\', \'%D %y %a %d %m %b %j\');\n+------------------------------------------------------------+\n| DATE_FORMAT(\'1900-10-04 22:23:00\', \'%D %y %a %d %m %b %j\') |\n+------------------------------------------------------------+\n| 4th 00 Thu 04 10 Oct 277 |\n+------------------------------------------------------------+\n\nSELECT DATE_FORMAT(\'1997-10-04 22:23:00\', \'%H %k %I %r %T %S %w\');\n+------------------------------------------------------------+\n| DATE_FORMAT(\'1997-10-04 22:23:00\', \'%H %k %I %r %T %S %w\') |\n+------------------------------------------------------------+\n| 22 22 10 10:23:00 PM 22:23:00 00 6 |\n+------------------------------------------------------------+\n\nSELECT DATE_FORMAT(\'1999-01-01\', \'%X %V\');\n+------------------------------------+\n| DATE_FORMAT(\'1999-01-01\', \'%X %V\') |\n+------------------------------------+\n| 1998 52 |\n+------------------------------------+\n\nSELECT DATE_FORMAT(\'2006-06-00\', \'%d\');\n+---------------------------------+\n| DATE_FORMAT(\'2006-06-00\', \'%d\') |\n+---------------------------------+\n| 00 |\n+---------------------------------+\n\nMariaDB starting with 10.3.2\n----------------------------\nOptionally, the locale can be explicitly specified as the third DATE_FORMAT()\nargument. Doing so makes the function independent from the session settings,\nand the three argument version of DATE_FORMAT() can be used in virtual indexed\nand persistent generated-columns:\n\nSELECT DATE_FORMAT(\'2006-01-01\', \'%W\', \'el_GR\');\n+------------------------------------------+\n| DATE_FORMAT(\'2006-01-01\', \'%W\', \'el_GR\') |\n+------------------------------------------+\n| ΚυÏιακή |\n+------------------------------------------+\n\nURL: https://mariadb.com/kb/en/date_format/','','https://mariadb.com/kb/en/date_format/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (522,31,'DATE_SUB','Syntax\n------\n\nDATE_SUB(date,INTERVAL expr unit)\n\nDescription\n-----------\n\nPerforms date arithmetic. The date argument specifies the starting date or\ndatetime value. expr is an expression specifying the interval value to be\nadded or subtracted from the starting date. expr is a string; it may start\nwith a \"-\" for negative intervals. unit is a keyword indicating the units in\nwhich the expression should be interpreted. See Date and Time Units for a\ncomplete list of permitted units.\n\nSee also DATE_ADD().\n\nExamples\n--------\n\nSELECT DATE_SUB(\'1998-01-02\', INTERVAL 31 DAY);\n+-----------------------------------------+\n| DATE_SUB(\'1998-01-02\', INTERVAL 31 DAY) |\n+-----------------------------------------+\n| 1997-12-02 |\n+-----------------------------------------+\n\nSELECT DATE_SUB(\'2005-01-01 00:00:00\', INTERVAL \'1 1:1:1\' DAY_SECOND);\n+----------------------------------------------------------------+\n| DATE_SUB(\'2005-01-01 00:00:00\', INTERVAL \'1 1:1:1\' DAY_SECOND) |\n+----------------------------------------------------------------+\n| 2004-12-30 22:58:59 |\n+----------------------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/date_sub/','','https://mariadb.com/kb/en/date_sub/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (523,31,'DAY','Syntax\n------\n\nDAY(date)\n\nDescription\n-----------\n\nDAY() is a synonym for DAYOFMONTH().\n\nURL: https://mariadb.com/kb/en/day/','','https://mariadb.com/kb/en/day/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (524,31,'DAYNAME','Syntax\n------\n\nDAYNAME(date)\n\nDescription\n-----------\n\nReturns the name of the weekday for date. The language used for the name is\ncontrolled by the value of the lc_time_names system variable. See server\nlocale for more on the supported locales.\n\nExamples\n--------\n\nSELECT DAYNAME(\'2007-02-03\');\n+-----------------------+\n| DAYNAME(\'2007-02-03\') |\n+-----------------------+\n| Saturday |\n+-----------------------+\n\nCREATE TABLE t1 (d DATETIME);\nINSERT INTO t1 VALUES\n (\"2007-01-30 21:31:07\"),\n (\"1983-10-15 06:42:51\"),\n (\"2011-04-21 12:34:56\"),\n (\"2011-10-30 06:31:41\"),\n (\"2011-01-30 14:03:25\"),\n (\"2004-10-07 11:19:34\");\n\nSELECT d, DAYNAME(d) FROM t1;\n+---------------------+------------+\n| d | DAYNAME(d) |\n+---------------------+------------+\n| 2007-01-30 21:31:07 | Tuesday |\n| 1983-10-15 06:42:51 | Saturday |\n| 2011-04-21 12:34:56 | Thursday |\n| 2011-10-30 06:31:41 | Sunday |\n| 2011-01-30 14:03:25 | Sunday |\n| 2004-10-07 11:19:34 | Thursday |\n+---------------------+------------+\n\nChanging the locale:\n\nSET lc_time_names = \'fr_CA\';\n\nSELECT DAYNAME(\'2013-04-01\');\n+-----------------------+\n| DAYNAME(\'2013-04-01\') |\n+-----------------------+\n| lundi |\n+-----------------------+\n\nURL: https://mariadb.com/kb/en/dayname/','','https://mariadb.com/kb/en/dayname/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (525,31,'DAYOFMONTH','Syntax\n------\n\nDAYOFMONTH(date)\n\nDescription\n-----------\n\nReturns the day of the month for date, in the range 1 to 31, or 0 for dates\nsuch as \'0000-00-00\' or \'2008-00-00\' which have a zero day part.\n\nDAY() is a synonym.\n\nExamples\n--------\n\nSELECT DAYOFMONTH(\'2007-02-03\');\n+--------------------------+\n| DAYOFMONTH(\'2007-02-03\') |\n+--------------------------+\n| 3 |\n+--------------------------+\n\nCREATE TABLE t1 (d DATETIME);\nINSERT INTO t1 VALUES\n (\"2007-01-30 21:31:07\"),\n (\"1983-10-15 06:42:51\"),\n (\"2011-04-21 12:34:56\"),\n (\"2011-10-30 06:31:41\"),\n (\"2011-01-30 14:03:25\"),\n (\"2004-10-07 11:19:34\");\n\nSELECT d FROM t1 where DAYOFMONTH(d) = 30;\n+---------------------+\n| d |\n+---------------------+\n| 2007-01-30 21:31:07 |\n| 2011-10-30 06:31:41 |\n| 2011-01-30 14:03:25 |\n+---------------------+\n\nURL: https://mariadb.com/kb/en/dayofmonth/','','https://mariadb.com/kb/en/dayofmonth/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (526,31,'DAYOFWEEK','Syntax\n------\n\nDAYOFWEEK(date)\n\nDescription\n-----------\n\nReturns the day of the week index for the date (1 = Sunday, 2 = Monday, ..., 7\n= Saturday). These index values correspond to the ODBC standard.\n\nThis contrasts with WEEKDAY() which follows a different index numbering (0 =\nMonday, 1 = Tuesday, ... 6 = Sunday).\n\nExamples\n--------\n\nSELECT DAYOFWEEK(\'2007-02-03\');\n+-------------------------+\n| DAYOFWEEK(\'2007-02-03\') |\n+-------------------------+\n| 7 |\n+-------------------------+\n\nCREATE TABLE t1 (d DATETIME);\nINSERT INTO t1 VALUES\n (\"2007-01-30 21:31:07\"),\n (\"1983-10-15 06:42:51\"),\n (\"2011-04-21 12:34:56\"),\n (\"2011-10-30 06:31:41\"),\n (\"2011-01-30 14:03:25\"),\n (\"2004-10-07 11:19:34\");\n\nSELECT d, DAYNAME(d), DAYOFWEEK(d), WEEKDAY(d) from t1;\n+---------------------+------------+--------------+------------+\n| d | DAYNAME(d) | DAYOFWEEK(d) | WEEKDAY(d) |\n+---------------------+------------+--------------+------------+\n| 2007-01-30 21:31:07 | Tuesday | 3 | 1 |\n| 1983-10-15 06:42:51 | Saturday | 7 | 5 |\n| 2011-04-21 12:34:56 | Thursday | 5 | 3 |\n| 2011-10-30 06:31:41 | Sunday | 1 | 6 |\n| 2011-01-30 14:03:25 | Sunday | 1 | 6 |\n| 2004-10-07 11:19:34 | Thursday | 5 | 3 |\n+---------------------+------------+--------------+------------+\n\nURL: https://mariadb.com/kb/en/dayofweek/','','https://mariadb.com/kb/en/dayofweek/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (527,31,'DAYOFYEAR','Syntax\n------\n\nDAYOFYEAR(date)\n\nDescription\n-----------\n\nReturns the day of the year for date, in the range 1 to 366.\n\nExamples\n--------\n\nSELECT DAYOFYEAR(\'2018-02-16\');\n+-------------------------+\n| DAYOFYEAR(\'2018-02-16\') |\n+-------------------------+\n| 47 |\n+-------------------------+\n\nURL: https://mariadb.com/kb/en/dayofyear/','','https://mariadb.com/kb/en/dayofyear/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (528,31,'EXTRACT','Syntax\n------\n\nEXTRACT(unit FROM date)\n\nDescription\n-----------\n\nThe EXTRACT() function extracts the required unit from the date. See Date and\nTime Units for a complete list of permitted units.\n\nIn MariaDB 10.0.7 and MariaDB 5.5.35, EXTRACT (HOUR FROM ...) was changed to\nreturn a value from 0 to 23, adhering to the SQL standard. Until MariaDB\n10.0.6 and MariaDB 5.5.34, and in all versions of MySQL at least as of MySQL\n5.7, it could return a value > 23. HOUR() is not a standard function, so\ncontinues to adhere to the old behaviour inherited from MySQL.\n\nExamples\n--------\n\nSELECT EXTRACT(YEAR FROM \'2009-07-02\');\n+---------------------------------+\n| EXTRACT(YEAR FROM \'2009-07-02\') |\n+---------------------------------+\n| 2009 |\n+---------------------------------+\n\nSELECT EXTRACT(YEAR_MONTH FROM \'2009-07-02 01:02:03\');\n+------------------------------------------------+\n| EXTRACT(YEAR_MONTH FROM \'2009-07-02 01:02:03\') |\n+------------------------------------------------+\n| 200907 |\n+------------------------------------------------+\n\nSELECT EXTRACT(DAY_MINUTE FROM \'2009-07-02 01:02:03\');\n+------------------------------------------------+\n| EXTRACT(DAY_MINUTE FROM \'2009-07-02 01:02:03\') |\n+------------------------------------------------+\n| 20102 |\n+------------------------------------------------+\n\nSELECT EXTRACT(MICROSECOND FROM \'2003-01-02 10:30:00.000123\');\n+--------------------------------------------------------+\n| EXTRACT(MICROSECOND FROM \'2003-01-02 10:30:00.000123\') |\n+--------------------------------------------------------+\n| 123 |\n+--------------------------------------------------------+\n\nFrom MariaDB 10.0.7 and MariaDB 5.5.35, EXTRACT (HOUR FROM...) returns a value\nfrom 0 to 23, as per the SQL standard. HOUR is not a standard function, so\ncontinues to adhere to the old behaviour inherited from MySQL.\n\nSELECT EXTRACT(HOUR FROM \'26:30:00\'), HOUR(\'26:30:00\');\n+-------------------------------+------------------+\n| EXTRACT(HOUR FROM \'26:30:00\') | HOUR(\'26:30:00\') |\n+-------------------------------+------------------+\n| 2 | 26 |\n+-------------------------------+------------------+\n\nURL: https://mariadb.com/kb/en/extract/','','https://mariadb.com/kb/en/extract/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (529,31,'FROM_DAYS','Syntax\n------\n\nFROM_DAYS(N)\n\nDescription\n-----------\n\nGiven a day number N, returns a DATE value. The day count is based on the\nnumber of days from the start of the standard calendar (0000-00-00).\n\nThe function is not designed for use with dates before the advent of the\nGregorian calendar in October 1582. Results will not be reliable since it\ndoesn\'t account for the lost days when the calendar changed from the Julian\ncalendar.\n\nThis is the converse of the TO_DAYS() function.\n\nExamples\n--------\n\nSELECT FROM_DAYS(730669);\n+-------------------+\n| FROM_DAYS(730669) |\n+-------------------+\n| 2000-07-03 |\n+-------------------+\n\nURL: https://mariadb.com/kb/en/from_days/','','https://mariadb.com/kb/en/from_days/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (530,31,'FROM_UNIXTIME','Syntax\n------\n\nFROM_UNIXTIME(unix_timestamp), FROM_UNIXTIME(unix_timestamp,format)\n\nDescription\n-----------\n\nReturns a representation of the unix_timestamp argument as a value in\n\'YYYY-MM-DD HH:MM:SS\' or YYYYMMDDHHMMSS.uuuuuu format, depending on whether\nthe function is used in a string or numeric context. The value is expressed in\nthe current time zone. unix_timestamp is an internal timestamp value such as\nis produced by the UNIX_TIMESTAMP() function.\n\nIf format is given, the result is formatted according to the format string,\nwhich is used the same way as listed in the entry for the DATE_FORMAT()\nfunction.\n\nTimestamps in MariaDB have a maximum value of 2147483647, equivalent to\n2038-01-19 05:14:07. This is due to the underlying 32-bit limitation. Using\nthe function on a timestamp beyond this will result in NULL being returned.\nUse DATETIME as a storage type if you require dates beyond this.\n\nThe options that can be used by FROM_UNIXTIME(), as well as DATE_FORMAT() and\nSTR_TO_DATE(), are:\n\n+---------------------------+------------------------------------------------+\n| Option | Description |\n+---------------------------+------------------------------------------------+\n| %a | Short weekday name in current locale |\n| | (Variable lc_time_names). |\n+---------------------------+------------------------------------------------+\n| %b | Short form month name in current locale. For |\n| | locale en_US this is one of: |\n| | Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov |\n| | or Dec. |\n+---------------------------+------------------------------------------------+\n| %c | Month with 1 or 2 digits. |\n+---------------------------+------------------------------------------------+\n| %D | Day with English suffix \'th\', \'nd\', \'st\' or |\n| | \'rd\'\'. (1st, 2nd, 3rd...). |\n+---------------------------+------------------------------------------------+\n| %d | Day with 2 digits. |\n+---------------------------+------------------------------------------------+\n| %e | Day with 1 or 2 digits. |\n+---------------------------+------------------------------------------------+\n| %f | Microseconds 6 digits. |\n+---------------------------+------------------------------------------------+\n| %H | Hour with 2 digits between 00-23. |\n+---------------------------+------------------------------------------------+\n| %h | Hour with 2 digits between 01-12. |\n+---------------------------+------------------------------------------------+\n| %I | Hour with 2 digits between 01-12. |\n+---------------------------+------------------------------------------------+\n| %i | Minute with 2 digits. |\n+---------------------------+------------------------------------------------+\n| %j | Day of the year (001-366) |\n+---------------------------+------------------------------------------------+\n| %k | Hour with 1 digits between 0-23. |\n+---------------------------+------------------------------------------------+\n| %l | Hour with 1 digits between 1-12. |\n+---------------------------+------------------------------------------------+\n| %M | Full month name in current locale (Variable |\n| | lc_time_names). |\n+---------------------------+------------------------------------------------+\n| %m | Month with 2 digits. |\n+---------------------------+------------------------------------------------+\n| %p | AM/PM according to current locale (Variable |\n| | lc_time_names). |\n+---------------------------+------------------------------------------------+\n| %r | Time in 12 hour format, followed by AM/PM. |\n| | Short for \'%I:%i:%S %p\'. |\n+---------------------------+------------------------------------------------+\n| %S | Seconds with 2 digits. |\n+---------------------------+------------------------------------------------+\n| %s | Seconds with 2 digits. |\n+---------------------------+------------------------------------------------+\n| %T | Time in 24 hour format. Short for \'%H:%i:%S\'. |\n+---------------------------+------------------------------------------------+\n| %U | Week number (00-53), when first day of the |\n| | week is Sunday. |\n+---------------------------+------------------------------------------------+\n| %u | Week number (00-53), when first day of the |\n| | week is Monday. |\n+---------------------------+------------------------------------------------+\n| %V | Week number (01-53), when first day of the |\n| | week is Sunday. Used with %X. |\n+---------------------------+------------------------------------------------+\n| %v | Week number (01-53), when first day of the |\n| | week is Monday. Used with %x. |\n+---------------------------+------------------------------------------------+\n| %W | Full weekday name in current locale (Variable |\n| | lc_time_names). |\n+---------------------------+------------------------------------------------+\n| %w | Day of the week. 0 = Sunday, 6 = Saturday. |\n+---------------------------+------------------------------------------------+\n| %X | Year with 4 digits when first day of the week |\n| | is Sunday. Used with %V. |\n+---------------------------+------------------------------------------------+\n| %x | Year with 4 digits when first day of the week |\n| | is Sunday. Used with %v. |\n+---------------------------+------------------------------------------------+\n| %Y | Year with 4 digits. |\n+---------------------------+------------------------------------------------+\n| %y | Year with 2 digits. |\n+---------------------------+------------------------------------------------+\n| %# | For str_to_date(), skip all numbers. |\n+---------------------------+------------------------------------------------+\n| %. | For str_to_date(), skip all punctation |\n| | characters. |\n+---------------------------+------------------------------------------------+\n| %@ | For str_to_date(), skip all alpha characters. |\n+---------------------------+------------------------------------------------+\n| %% | A literal % character. |\n+---------------------------+------------------------------------------------+\n\nPerformance Considerations\n--------------------------\n\nIf your session time zone is set to SYSTEM (the default), FROM_UNIXTIME() will\ncall the OS function to convert the data using the system time zone. At least\non Linux, the corresponding function (localtime_r) uses a global mutex inside\nglibc that can cause contention under high concurrent load.\n\nSet your time zone to a named time zone to avoid this issue. See mysql time\nzone tables for details on how to do this.\n\nExamples\n--------\n\nSELECT FROM_UNIXTIME(1196440219);\n+---------------------------+\n| FROM_UNIXTIME(1196440219) |\n+---------------------------+\n| 2007-11-30 11:30:19 |\n+---------------------------+\n\nSELECT FROM_UNIXTIME(1196440219) + 0;\n+-------------------------------+\n| FROM_UNIXTIME(1196440219) + 0 |\n+-------------------------------+\n| 20071130113019.000000 |\n+-------------------------------+\n\nSELECT FROM_UNIXTIME(UNIX_TIMESTAMP(), \'%Y %D %M %h:%i:%s %x\');\n+---------------------------------------------------------+\n| FROM_UNIXTIME(UNIX_TIMESTAMP(), \'%Y %D %M %h:%i:%s %x\') |\n+---------------------------------------------------------+\n| 2010 27th March 01:03:47 2010 |\n+---------------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/from_unixtime/','','https://mariadb.com/kb/en/from_unixtime/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (531,31,'GET_FORMAT','Syntax\n------\n\nGET_FORMAT({DATE|DATETIME|TIME}, {\'EUR\'|\'USA\'|\'JIS\'|\'ISO\'|\'INTERNAL\'})\n\nDescription\n-----------\n\nReturns a format string. This function is useful in combination with the\nDATE_FORMAT() and the STR_TO_DATE() functions.\n\nPossible result formats are:\n\n+--------------------------------------+--------------------------------------+\n| Function Call | Result Format |\n+--------------------------------------+--------------------------------------+\n| GET_FORMAT(DATE,\'EUR\') | \'%d.%m.%Y\' |\n+--------------------------------------+--------------------------------------+\n| GET_FORMAT(DATE,\'USA\') | \'%m.%d.%Y\' |\n+--------------------------------------+--------------------------------------+\n| GET_FORMAT(DATE,\'JIS\') | \'%Y-%m-%d\' |\n+--------------------------------------+--------------------------------------+\n| GET_FORMAT(DATE,\'ISO\') | \'%Y-%m-%d\' |\n+--------------------------------------+--------------------------------------+\n| GET_FORMAT(DATE,\'INTERNAL\') | \'%Y%m%d\' |\n+--------------------------------------+--------------------------------------+\n| GET_FORMAT(DATETIME,\'EUR\') | \'%Y-%m-%d %H.%i.%s\' |\n+--------------------------------------+--------------------------------------+\n| GET_FORMAT(DATETIME,\'USA\') | \'%Y-%m-%d %H.%i.%s\' |\n+--------------------------------------+--------------------------------------+\n| GET_FORMAT(DATETIME,\'JIS\') | \'%Y-%m-%d %H:%i:%s\' |\n+--------------------------------------+--------------------------------------+\n| GET_FORMAT(DATETIME,\'ISO\') | \'%Y-%m-%d %H:%i:%s\' |\n+--------------------------------------+--------------------------------------+\n| GET_FORMAT(DATETIME,\'INTERNAL\') | \'%Y%m%d%H%i%s\' |\n+--------------------------------------+--------------------------------------+\n| GET_FORMAT(TIME,\'EUR\') | \'%H.%i.%s\' |\n+--------------------------------------+--------------------------------------+\n| GET_FORMAT(TIME,\'USA\') | \'%h:%i:%s %p\' |\n+--------------------------------------+--------------------------------------+\n| GET_FORMAT(TIME,\'JIS\') | \'%H:%i:%s\' |\n+--------------------------------------+--------------------------------------+\n| GET_FORMAT(TIME,\'ISO\') | \'%H:%i:%s\' |\n+--------------------------------------+--------------------------------------+\n| GET_FORMAT(TIME,\'INTERNAL\') | \'%H%i%s\' |\n+--------------------------------------+--------------------------------------+\n\nExamples\n--------\n\nObtaining the string matching to the standard European date format:\n\nSELECT GET_FORMAT(DATE, \'EUR\');\n+-------------------------+\n| GET_FORMAT(DATE, \'EUR\') |\n+-------------------------+\n| %d.%m.%Y |\n+-------------------------+\n\nUsing the same string to format a date:\n\nSELECT DATE_FORMAT(\'2003-10-03\',GET_FORMAT(DATE,\'EUR\'));\n+--------------------------------------------------+\n| DATE_FORMAT(\'2003-10-03\',GET_FORMAT(DATE,\'EUR\')) |\n+--------------------------------------------------+\n| 03.10.2003 |\n+--------------------------------------------------+\n\nSELECT STR_TO_DATE(\'10.31.2003\',GET_FORMAT(DATE,\'USA\'));\n+--------------------------------------------------+\n| STR_TO_DATE(\'10.31.2003\',GET_FORMAT(DATE,\'USA\')) |\n+--------------------------------------------------+\n| 2003-10-31 |\n+--------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/get_format/','','https://mariadb.com/kb/en/get_format/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (532,31,'HOUR','Syntax\n------\n\nHOUR(time)\n\nDescription\n-----------\n\nReturns the hour for time. The range of the return value is 0 to 23 for\ntime-of-day values. However, the range of TIME values actually is much larger,\nso HOUR can return values greater than 23.\n\nThe return value is always positive, even if a negative TIME value is provided.\n\nExamples\n--------\n\nSELECT HOUR(\'10:05:03\');\n+------------------+\n| HOUR(\'10:05:03\') |\n+------------------+\n| 10 |\n+------------------+\n\nSELECT HOUR(\'272:59:59\');\n+-------------------+\n| HOUR(\'272:59:59\') |\n+-------------------+\n| 272 |\n+-------------------+\n\nDifference between EXTRACT (HOUR FROM ...) (>= MariaDB 10.0.7 and MariaDB\n5.5.35) and HOUR:\n\nSELECT EXTRACT(HOUR FROM \'26:30:00\'), HOUR(\'26:30:00\');\n+-------------------------------+------------------+\n| EXTRACT(HOUR FROM \'26:30:00\') | HOUR(\'26:30:00\') |\n+-------------------------------+------------------+\n| 2 | 26 |\n+-------------------------------+------------------+\n\nURL: https://mariadb.com/kb/en/hour/','','https://mariadb.com/kb/en/hour/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (533,31,'LAST_DAY','Syntax\n------\n\nLAST_DAY(date)\n\nDescription\n-----------\n\nTakes a date or datetime value and returns the corresponding value for the\nlast day of the month. Returns NULL if the argument is invalid.\n\nExamples\n--------\n\nSELECT LAST_DAY(\'2003-02-05\');\n+------------------------+\n| LAST_DAY(\'2003-02-05\') |\n+------------------------+\n| 2003-02-28 |\n+------------------------+\n\nSELECT LAST_DAY(\'2004-02-05\');\n+------------------------+\n| LAST_DAY(\'2004-02-05\') |\n+------------------------+\n| 2004-02-29 |\n+------------------------+\n\nSELECT LAST_DAY(\'2004-01-01 01:01:01\');\n+---------------------------------+\n| LAST_DAY(\'2004-01-01 01:01:01\') |\n+---------------------------------+\n| 2004-01-31 |\n+---------------------------------+\n\nSELECT LAST_DAY(\'2003-03-32\');\n+------------------------+\n| LAST_DAY(\'2003-03-32\') |\n+------------------------+\n| NULL |\n+------------------------+\n1 row in set, 1 warning (0.00 sec)\n\nWarning (Code 1292): Incorrect datetime value: \'2003-03-32\'\n\nURL: https://mariadb.com/kb/en/last_day/','','https://mariadb.com/kb/en/last_day/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (534,31,'LOCALTIME','Syntax\n------\n\nLOCALTIME\nLOCALTIME([precision])\n\nDescription\n-----------\n\nLOCALTIME and LOCALTIME() are synonyms for NOW().\n\nURL: https://mariadb.com/kb/en/localtime/','','https://mariadb.com/kb/en/localtime/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (535,31,'LOCALTIMESTAMP','Syntax\n------\n\nLOCALTIMESTAMP\nLOCALTIMESTAMP([precision])\n\nDescription\n-----------\n\nLOCALTIMESTAMP and LOCALTIMESTAMP() are synonyms for NOW().\n\nURL: https://mariadb.com/kb/en/localtimestamp/','','https://mariadb.com/kb/en/localtimestamp/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (536,31,'MAKEDATE','Syntax\n------\n\nMAKEDATE(year,dayofyear)\n\nDescription\n-----------\n\nReturns a date, given year and day-of-year values. dayofyear must be greater\nthan 0 or the result is NULL.\n\nExamples\n--------\n\nSELECT MAKEDATE(2011,31), MAKEDATE(2011,32);\n+-------------------+-------------------+\n| MAKEDATE(2011,31) | MAKEDATE(2011,32) |\n+-------------------+-------------------+\n| 2011-01-31 | 2011-02-01 |\n+-------------------+-------------------+\n\nSELECT MAKEDATE(2011,365), MAKEDATE(2014,365);\n+--------------------+--------------------+\n| MAKEDATE(2011,365) | MAKEDATE(2014,365) |\n+--------------------+--------------------+\n| 2011-12-31 | 2014-12-31 |\n+--------------------+--------------------+\n\nSELECT MAKEDATE(2011,0);\n+------------------+\n| MAKEDATE(2011,0) |\n+------------------+\n| NULL |\n+------------------+\n\nURL: https://mariadb.com/kb/en/makedate/','','https://mariadb.com/kb/en/makedate/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (537,31,'MAKETIME','Syntax\n------\n\nMAKETIME(hour,minute,second)\n\nDescription\n-----------\n\nReturns a time value calculated from the hour, minute, and second arguments.\n\nIf minute or second are out of the range 0 to 60, NULL is returned. The hour\ncan be in the range -838 to 838, outside of which the value is truncated with\na warning.\n\nExamples\n--------\n\nSELECT MAKETIME(13,57,33);\n+--------------------+\n| MAKETIME(13,57,33) |\n+--------------------+\n| 13:57:33 |\n+--------------------+\n\nSELECT MAKETIME(-13,57,33);\n+---------------------+\n| MAKETIME(-13,57,33) |\n+---------------------+\n| -13:57:33 |\n+---------------------+\n\nSELECT MAKETIME(13,67,33);\n+--------------------+\n| MAKETIME(13,67,33) |\n+--------------------+\n| NULL |\n+--------------------+\n\nSELECT MAKETIME(-1000,57,33);\n+-----------------------+\n| MAKETIME(-1000,57,33) |\n+-----------------------+\n| -838:59:59 |\n+-----------------------+\n1 row in set, 1 warning (0.00 sec)\n\nSHOW WARNINGS;\n+---------+------+-----------------------------------------------+\n| Level | Code | Message |\n+---------+------+-----------------------------------------------+\n| Warning | 1292 | Truncated incorrect time value: \'-1000:57:33\' |\n+---------+------+-----------------------------------------------+\n\nURL: https://mariadb.com/kb/en/maketime/','','https://mariadb.com/kb/en/maketime/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (538,31,'MICROSECOND','Syntax\n------\n\nMICROSECOND(expr)\n\nDescription\n-----------\n\nReturns the microseconds from the time or datetime expression expr as a number\nin the range from 0 to 999999.\n\nIf expr is a time with no microseconds, zero is returned, while if expr is a\ndate with no time, zero with a warning is returned.\n\nExamples\n--------\n\nSELECT MICROSECOND(\'12:00:00.123456\');\n+--------------------------------+\n| MICROSECOND(\'12:00:00.123456\') |\n+--------------------------------+\n| 123456 |\n+--------------------------------+\n\nSELECT MICROSECOND(\'2009-12-31 23:59:59.000010\');\n+-------------------------------------------+\n| MICROSECOND(\'2009-12-31 23:59:59.000010\') |\n+-------------------------------------------+\n| 10 |\n+-------------------------------------------+\n\nSELECT MICROSECOND(\'2013-08-07 12:13:14\');\n+------------------------------------+\n| MICROSECOND(\'2013-08-07 12:13:14\') |\n+------------------------------------+\n| 0 |\n+------------------------------------+\n\nSELECT MICROSECOND(\'2013-08-07\');\n+---------------------------+\n| MICROSECOND(\'2013-08-07\') |\n+---------------------------+\n| 0 |\n+---------------------------+\n1 row in set, 1 warning (0.00 sec)\n\nSHOW WARNINGS;\n+---------+------+----------------------------------------------+\n| Level | Code | Message |\n+---------+------+----------------------------------------------+\n| Warning | 1292 | Truncated incorrect time value: \'2013-08-07\' |\n+---------+------+----------------------------------------------+\n\nURL: https://mariadb.com/kb/en/microsecond/','','https://mariadb.com/kb/en/microsecond/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (539,31,'MINUTE','Syntax\n------\n\nMINUTE(time)\n\nDescription\n-----------\n\nReturns the minute for time, in the range 0 to 59.\n\nExamples\n--------\n\nSELECT MINUTE(\'2013-08-03 11:04:03\');\n+-------------------------------+\n| MINUTE(\'2013-08-03 11:04:03\') |\n+-------------------------------+\n| 4 |\n+-------------------------------+\n\nSELECT MINUTE (\'23:12:50\');\n+---------------------+\n| MINUTE (\'23:12:50\') |\n+---------------------+\n| 12 |\n+---------------------+\n\nURL: https://mariadb.com/kb/en/minute/','','https://mariadb.com/kb/en/minute/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (540,31,'MONTH','Syntax\n------\n\nMONTH(date)\n\nDescription\n-----------\n\nReturns the month for date in the range 1 to 12 for January to December, or 0\nfor dates such as \'0000-00-00\' or \'2008-00-00\' that have a zero month part.\n\nExamples\n--------\n\nSELECT MONTH(\'2019-01-03\');\n+---------------------+\n| MONTH(\'2019-01-03\') |\n+---------------------+\n| 1 |\n+---------------------+\n\nSELECT MONTH(\'2019-00-03\');\n+---------------------+\n| MONTH(\'2019-00-03\') |\n+---------------------+\n| 0 |\n+---------------------+\n\nURL: https://mariadb.com/kb/en/month/','','https://mariadb.com/kb/en/month/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (541,31,'MONTHNAME','Syntax\n------\n\nMONTHNAME(date)\n\nDescription\n-----------\n\nReturns the full name of the month for date. The language used for the name is\ncontrolled by the value of the lc_time_names system variable. See server\nlocale for more on the supported locales.\n\nExamples\n--------\n\nSELECT MONTHNAME(\'2019-02-03\');\n+-------------------------+\n| MONTHNAME(\'2019-02-03\') |\n+-------------------------+\n| February |\n+-------------------------+\n\nChanging the locale:\n\nSET lc_time_names = \'fr_CA\';\n\nSELECT MONTHNAME(\'2019-05-21\');\n+-------------------------+\n| MONTHNAME(\'2019-05-21\') |\n+-------------------------+\n| mai |\n+-------------------------+\n\nURL: https://mariadb.com/kb/en/monthname/','','https://mariadb.com/kb/en/monthname/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (542,31,'NOW','Syntax\n------\n\nNOW([precision])\nCURRENT_TIMESTAMP\nCURRENT_TIMESTAMP([precision])\nLOCALTIME, LOCALTIME([precision])\nLOCALTIMESTAMP\nLOCALTIMESTAMP([precision])\n\nDescription\n-----------\n\nReturns the current date and time as a value in \'YYYY-MM-DD HH:MM:SS\' or\nYYYYMMDDHHMMSS.uuuuuu format, depending on whether the function is used in a\nstring or numeric context. The value is expressed in the current time zone.\n\nThe optional precision determines the microsecond precision. See Microseconds\nin MariaDB.\n\nNOW() (or its synonyms) can be used as the default value for TIMESTAMP columns\nas well as, since MariaDB 10.0.1, DATETIME columns. Before MariaDB 10.0.1, it\nwas only possible for a single TIMESTAMP column per table to contain the\nCURRENT_TIMESTAMP as its default.\n\nWhen displayed in the INFORMATION_SCHEMA.COLUMNS table, a default CURRENT\nTIMESTAMP is displayed as CURRENT_TIMESTAMP up until MariaDB 10.2.2, and as\ncurrent_timestamp() from MariaDB 10.2.3, due to to MariaDB 10.2 accepting\nexpressions in the DEFAULT clause.\n\nChanging the timestamp system variable with a SET timestamp statement affects\nthe value returned by NOW(), but not by SYSDATE().\n\nExamples\n--------\n\nSELECT NOW();\n+---------------------+\n| NOW() |\n+---------------------+\n| 2010-03-27 13:13:25 |\n+---------------------+\n\nSELECT NOW() + 0;\n+-----------------------+\n| NOW() + 0 |\n+-----------------------+\n| 20100327131329.000000 |\n+-----------------------+\n\nWith precision:\n\nSELECT CURRENT_TIMESTAMP(2);\n+------------------------+\n| CURRENT_TIMESTAMP(2) |\n+------------------------+\n| 2018-07-10 09:47:26.24 |\n+------------------------+\n\nUsed as a default TIMESTAMP:\n\nCREATE TABLE t (createdTS TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP);\n\nFrom MariaDB 10.2.2:\n\nSELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA=\'test\'\n AND COLUMN_NAME LIKE \'%ts%\'\\G\n*************************** 1. row ***************************\n TABLE_CATALOG: def\n TABLE_SCHEMA: test\n TABLE_NAME: t\n COLUMN_NAME: ts\n ORDINAL_POSITION: 1\n COLUMN_DEFAULT: current_timestamp()\n...\n\n<= MariaDB 10.2.1\n\nSELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA=\'test\'\n AND COLUMN_NAME LIKE \'%ts%\'\\G\n*************************** 1. row ***************************\n TABLE_CATALOG: def\n TABLE_SCHEMA: test\n TABLE_NAME: t\n COLUMN_NAME: createdTS\n ORDINAL_POSITION: 1\n COLUMN_DEFAULT: CURRENT_TIMESTAMP\n...\n\nURL: https://mariadb.com/kb/en/now/','','https://mariadb.com/kb/en/now/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (543,31,'PERIOD_ADD','Syntax\n------\n\nPERIOD_ADD(P,N)\n\nDescription\n-----------\n\nAdds N months to period P. P is in the format YYMM or YYYYMM, and is not a\ndate value. If P contains a two-digit year, values from 00 to 69 are converted\nto from 2000 to 2069, while values from 70 are converted to 1970 upwards.\n\nReturns a value in the format YYYYMM.\n\nExamples\n--------\n\nSELECT PERIOD_ADD(200801,2);\n+----------------------+\n| PERIOD_ADD(200801,2) |\n+----------------------+\n| 200803 |\n+----------------------+\n\nSELECT PERIOD_ADD(6910,2);\n+--------------------+\n| PERIOD_ADD(6910,2) |\n+--------------------+\n| 206912 |\n+--------------------+\n\nSELECT PERIOD_ADD(7010,2);\n+--------------------+\n| PERIOD_ADD(7010,2) |\n+--------------------+\n| 197012 |\n+--------------------+\n\nURL: https://mariadb.com/kb/en/period_add/','','https://mariadb.com/kb/en/period_add/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (544,31,'PERIOD_DIFF','Syntax\n------\n\nPERIOD_DIFF(P1,P2)\n\nDescription\n-----------\n\nReturns the number of months between periods P1 and P2. P1 and P2 can be in\nthe format YYMM or YYYYMM, and are not date values.\n\nIf P1 or P2 contains a two-digit year, values from 00 to 69 are converted to\nfrom 2000 to 2069, while values from 70 are converted to 1970 upwards.\n\nExamples\n--------\n\nSELECT PERIOD_DIFF(200802,200703);\n+----------------------------+\n| PERIOD_DIFF(200802,200703) |\n+----------------------------+\n| 11 |\n+----------------------------+\n\nSELECT PERIOD_DIFF(6902,6803);\n+------------------------+\n| PERIOD_DIFF(6902,6803) |\n+------------------------+\n| 11 |\n+------------------------+\n\nSELECT PERIOD_DIFF(7002,6803);\n+------------------------+\n| PERIOD_DIFF(7002,6803) |\n+------------------------+\n| -1177 |\n+------------------------+\n\nURL: https://mariadb.com/kb/en/period_diff/','','https://mariadb.com/kb/en/period_diff/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (545,31,'QUARTER','Syntax\n------\n\nQUARTER(date)\n\nDescription\n-----------\n\nReturns the quarter of the year for date, in the range 1 to 4. Returns 0 if\nmonth contains a zero value, or NULL if the given value is not otherwise a\nvalid date (zero values are accepted).\n\nExamples\n--------\n\nSELECT QUARTER(\'2008-04-01\');\n+-----------------------+\n| QUARTER(\'2008-04-01\') |\n+-----------------------+\n| 2 |\n+-----------------------+\n\nSELECT QUARTER(\'2019-00-01\');\n+-----------------------+\n| QUARTER(\'2019-00-01\') |\n+-----------------------+\n| 0 |\n+-----------------------+\n\nURL: https://mariadb.com/kb/en/quarter/','','https://mariadb.com/kb/en/quarter/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (546,31,'SECOND','Syntax\n------\n\nSECOND(time)\n\nDescription\n-----------\n\nReturns the second for a given time (which can include microseconds), in the\nrange 0 to 59, or NULL if not given a valid time value.\n\nExamples\n--------\n\nSELECT SECOND(\'10:05:03\');\n+--------------------+\n| SECOND(\'10:05:03\') |\n+--------------------+\n| 3 |\n+--------------------+\n\nSELECT SECOND(\'10:05:01.999999\');\n+---------------------------+\n| SECOND(\'10:05:01.999999\') |\n+---------------------------+\n| 1 |\n+---------------------------+\n\nURL: https://mariadb.com/kb/en/second/','','https://mariadb.com/kb/en/second/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (547,31,'SEC_TO_TIME','Syntax\n------\n\nSEC_TO_TIME(seconds)\n\nDescription\n-----------\n\nReturns the seconds argument, converted to hours, minutes, and seconds, as a\nTIME value. The range of the result is constrained to that of the TIME data\ntype. A warning occurs if the argument corresponds to a value outside that\nrange.\n\nThe time will be returned in the format hh:mm:ss, or hhmmss if used in a\nnumeric calculation.\n\nExamples\n--------\n\nSELECT SEC_TO_TIME(12414);\n+--------------------+\n| SEC_TO_TIME(12414) |\n+--------------------+\n| 03:26:54 |\n+--------------------+\n\nSELECT SEC_TO_TIME(12414)+0;\n+----------------------+\n| SEC_TO_TIME(12414)+0 |\n+----------------------+\n| 32654 |\n+----------------------+\n\nSELECT SEC_TO_TIME(9999999);\n+----------------------+\n| SEC_TO_TIME(9999999) |\n+----------------------+\n| 838:59:59 |\n+----------------------+\n1 row in set, 1 warning (0.00 sec)\n\nSHOW WARNINGS;\n+---------+------+-------------------------------------------+\n| Level | Code | Message |\n+---------+------+-------------------------------------------+\n| Warning | 1292 | Truncated incorrect time value: \'9999999\' |\n+---------+------+-------------------------------------------+\n\nURL: https://mariadb.com/kb/en/sec_to_time/','','https://mariadb.com/kb/en/sec_to_time/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (548,31,'STR_TO_DATE','Syntax\n------\n\nSTR_TO_DATE(str,format)\n\nDescription\n-----------\n\nThis is the inverse of the DATE_FORMAT() function. It takes a string str and a\nformat string format. STR_TO_DATE() returns a DATETIME value if the format\nstring contains both date and time parts, or a DATE or TIME value if the\nstring contains only date or time parts.\n\nThe date, time, or datetime values contained in str should be given in the\nformat indicated by format. If str contains an illegal date, time, or datetime\nvalue, STR_TO_DATE() returns NULL. An illegal value also produces a warning.\n\nUnder specific SQL_MODE settings an error may also be generated if the str\nisn\'t a valid date:\n\n* ALLOW_INVALID_DATES\n* NO_ZERO_DATE\n* NO_ZERO_IN_DATE\n\nThe options that can be used by STR_TO_DATE(), as well as its inverse\nDATE_FORMAT() and the FROM_UNIXTIME() function, are:\n\n+---------------------------+------------------------------------------------+\n| Option | Description |\n+---------------------------+------------------------------------------------+\n| %a | Short weekday name in current locale |\n| | (Variable lc_time_names). |\n+---------------------------+------------------------------------------------+\n| %b | Short form month name in current locale. For |\n| | locale en_US this is one of: |\n| | Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov |\n| | or Dec. |\n+---------------------------+------------------------------------------------+\n| %c | Month with 1 or 2 digits. |\n+---------------------------+------------------------------------------------+\n| %D | Day with English suffix \'th\', \'nd\', \'st\' or |\n| | \'rd\'\'. (1st, 2nd, 3rd...). |\n+---------------------------+------------------------------------------------+\n| %d | Day with 2 digits. |\n+---------------------------+------------------------------------------------+\n| %e | Day with 1 or 2 digits. |\n+---------------------------+------------------------------------------------+\n| %f | Microseconds 6 digits. |\n+---------------------------+------------------------------------------------+\n| %H | Hour with 2 digits between 00-23. |\n+---------------------------+------------------------------------------------+\n| %h | Hour with 2 digits between 01-12. |\n+---------------------------+------------------------------------------------+\n| %I | Hour with 2 digits between 01-12. |\n+---------------------------+------------------------------------------------+\n| %i | Minute with 2 digits. |\n+---------------------------+------------------------------------------------+\n| %j | Day of the year (001-366) |\n+---------------------------+------------------------------------------------+\n| %k | Hour with 1 digits between 0-23. |\n+---------------------------+------------------------------------------------+\n| %l | Hour with 1 digits between 1-12. |\n+---------------------------+------------------------------------------------+\n| %M | Full month name in current locale (Variable |\n| | lc_time_names). |\n+---------------------------+------------------------------------------------+\n| %m | Month with 2 digits. |\n+---------------------------+------------------------------------------------+\n| %p | AM/PM according to current locale (Variable |\n| | lc_time_names). |\n+---------------------------+------------------------------------------------+\n| %r | Time in 12 hour format, followed by AM/PM. |\n| | Short for \'%I:%i:%S %p\'. |\n+---------------------------+------------------------------------------------+\n| %S | Seconds with 2 digits. |\n+---------------------------+------------------------------------------------+\n| %s | Seconds with 2 digits. |\n+---------------------------+------------------------------------------------+\n| %T | Time in 24 hour format. Short for \'%H:%i:%S\'. |\n+---------------------------+------------------------------------------------+\n| %U | Week number (00-53), when first day of the |\n| | week is Sunday. |\n+---------------------------+------------------------------------------------+\n| %u | Week number (00-53), when first day of the |\n| | week is Monday. |\n+---------------------------+------------------------------------------------+\n| %V | Week number (01-53), when first day of the |\n| | week is Sunday. Used with %X. |\n+---------------------------+------------------------------------------------+\n| %v | Week number (01-53), when first day of the |\n| | week is Monday. Used with %x. |\n+---------------------------+------------------------------------------------+\n| %W | Full weekday name in current locale (Variable |\n| | lc_time_names). |\n+---------------------------+------------------------------------------------+\n| %w | Day of the week. 0 = Sunday, 6 = Saturday. |\n+---------------------------+------------------------------------------------+\n| %X | Year with 4 digits when first day of the week |\n| | is Sunday. Used with %V. |\n+---------------------------+------------------------------------------------+\n| %x | Year with 4 digits when first day of the week |\n| | is Monday. Used with %v. |\n+---------------------------+------------------------------------------------+\n| %Y | Year with 4 digits. |\n+---------------------------+------------------------------------------------+\n| %y | Year with 2 digits. |\n+---------------------------+------------------------------------------------+\n| %# | For str_to_date(), skip all numbers. |\n+---------------------------+------------------------------------------------+\n| %. | For str_to_date(), skip all punctation |\n| | characters. |\n+---------------------------+------------------------------------------------+\n| %@ | For str_to_date(), skip all alpha characters. |\n+---------------------------+------------------------------------------------+\n| %% | A literal % character. |\n+---------------------------+------------------------------------------------+\n\nExamples\n--------\n\nSELECT STR_TO_DATE(\'Wednesday, June 2, 2014\', \'%W, %M %e, %Y\');\n+---------------------------------------------------------+\n| STR_TO_DATE(\'Wednesday, June 2, 2014\', \'%W, %M %e, %Y\') |\n+---------------------------------------------------------+\n| 2014-06-02 |\n+---------------------------------------------------------+\n\nSELECT STR_TO_DATE(\'Wednesday23423, June 2, 2014\', \'%W, %M %e, %Y\');\n+--------------------------------------------------------------+\n| STR_TO_DATE(\'Wednesday23423, June 2, 2014\', \'%W, %M %e, %Y\') |\n+--------------------------------------------------------------+\n| NULL |\n+--------------------------------------------------------------+\n1 row in set, 1 warning (0.00 sec)\n\nSHOW WARNINGS;\n+---------+------+-------------------------------------------------------------\n---------------------+\n| Level | Code | Message \n |\n+---------+------+-------------------------------------------------------------\n---------------------+\n| Warning | 1411 | Incorrect datetime value: \'Wednesday23423, June 2, 2014\'\nfor function str_to_date |\n+---------+------+-------------------------------------------------------------\n---------------------+\n\nSELECT STR_TO_DATE(\'Wednesday23423, June 2, 2014\', \'%W%#, %M %e, %Y\');\n+----------------------------------------------------------------+\n| STR_TO_DATE(\'Wednesday23423, June 2, 2014\', \'%W%#, %M %e, %Y\') |\n+----------------------------------------------------------------+\n| 2014-06-02 |\n+----------------------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/str_to_date/','','https://mariadb.com/kb/en/str_to_date/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (549,31,'SUBDATE','Syntax\n------\n\nSUBDATE(date,INTERVAL expr unit), SUBDATE(expr,days)\n\nDescription\n-----------\n\nWhen invoked with the INTERVAL form of the second argument, SUBDATE() is a\nsynonym for DATE_SUB(). See Date and Time Units for a complete list of\npermitted units.\n\nThe second form allows the use of an integer value for days. In such cases, it\nis interpreted as the number of days to be subtracted from the date or\ndatetime expression expr.\n\nExamples\n--------\n\nSELECT DATE_SUB(\'2008-01-02\', INTERVAL 31 DAY);\n+-----------------------------------------+\n| DATE_SUB(\'2008-01-02\', INTERVAL 31 DAY) |\n+-----------------------------------------+\n| 2007-12-02 |\n+-----------------------------------------+\n\nSELECT SUBDATE(\'2008-01-02\', INTERVAL 31 DAY);\n+----------------------------------------+\n| SUBDATE(\'2008-01-02\', INTERVAL 31 DAY) |\n+----------------------------------------+\n| 2007-12-02 |\n+----------------------------------------+\n\nSELECT SUBDATE(\'2008-01-02 12:00:00\', 31);\n+------------------------------------+\n| SUBDATE(\'2008-01-02 12:00:00\', 31) |\n+------------------------------------+\n| 2007-12-02 12:00:00 |\n+------------------------------------+\n\nCREATE TABLE t1 (d DATETIME);\nINSERT INTO t1 VALUES\n (\"2007-01-30 21:31:07\"),\n (\"1983-10-15 06:42:51\"),\n (\"2011-04-21 12:34:56\"),\n (\"2011-10-30 06:31:41\"),\n (\"2011-01-30 14:03:25\"),\n (\"2004-10-07 11:19:34\");\n\nSELECT d, SUBDATE(d, 10) from t1;\n+---------------------+---------------------+\n| d | SUBDATE(d, 10) |\n+---------------------+---------------------+\n| 2007-01-30 21:31:07 | 2007-01-20 21:31:07 |\n| 1983-10-15 06:42:51 | 1983-10-05 06:42:51 |\n| 2011-04-21 12:34:56 | 2011-04-11 12:34:56 |\n| 2011-10-30 06:31:41 | 2011-10-20 06:31:41 |\n| 2011-01-30 14:03:25 | 2011-01-20 14:03:25 |\n| 2004-10-07 11:19:34 | 2004-09-27 11:19:34 |\n+---------------------+---------------------+\n\nSELECT d, SUBDATE(d, INTERVAL 10 MINUTE) from t1;\n+---------------------+--------------------------------+\n| d | SUBDATE(d, INTERVAL 10 MINUTE) |\n+---------------------+--------------------------------+\n| 2007-01-30 21:31:07 | 2007-01-30 21:21:07 |\n| 1983-10-15 06:42:51 | 1983-10-15 06:32:51 |\n| 2011-04-21 12:34:56 | 2011-04-21 12:24:56 |\n| 2011-10-30 06:31:41 | 2011-10-30 06:21:41 |\n| 2011-01-30 14:03:25 | 2011-01-30 13:53:25 |\n| 2004-10-07 11:19:34 | 2004-10-07 11:09:34 |\n+---------------------+--------------------------------+\n\nURL: https://mariadb.com/kb/en/subdate/','','https://mariadb.com/kb/en/subdate/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (550,31,'SUBTIME','Syntax\n------\n\nSUBTIME(expr1,expr2)\n\nDescription\n-----------\n\nSUBTIME() returns expr1 - expr2 expressed as a value in the same format as\nexpr1. expr1 is a time or datetime expression, and expr2 is a time expression.\n\nExamples\n--------\n\nSELECT SUBTIME(\'2007-12-31 23:59:59.999999\',\'1 1:1:1.000002\');\n+--------------------------------------------------------+\n| SUBTIME(\'2007-12-31 23:59:59.999999\',\'1 1:1:1.000002\') |\n+--------------------------------------------------------+\n| 2007-12-30 22:58:58.999997 |\n+--------------------------------------------------------+\n\nSELECT SUBTIME(\'01:00:00.999999\', \'02:00:00.999998\');\n+-----------------------------------------------+\n| SUBTIME(\'01:00:00.999999\', \'02:00:00.999998\') |\n+-----------------------------------------------+\n| -00:59:59.999999 |\n+-----------------------------------------------+\n\nURL: https://mariadb.com/kb/en/subtime/','','https://mariadb.com/kb/en/subtime/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (551,31,'SYSDATE','Syntax\n------\n\nSYSDATE([precision])\n\nDescription\n-----------\n\nReturns the current date and time as a value in \'YYYY-MM-DD HH:MM:SS\' or\nYYYYMMDDHHMMSS.uuuuuu format, depending on whether the function is used in a\nstring or numeric context.\n\nThe optional precision determines the microsecond precision. See Microseconds\nin MariaDB.\n\nSYSDATE() returns the time at which it executes. This differs from the\nbehavior for NOW(), which returns a constant time that indicates the time at\nwhich the statement began to execute. (Within a stored routine or trigger,\nNOW() returns the time at which the routine or triggering statement began to\nexecute.)\n\nIn addition, changing the timestamp system variable with a SET timestamp\nstatement affects the value returned by NOW() but not by SYSDATE(). This means\nthat timestamp settings in the binary log have no effect on invocations of\nSYSDATE().\n\nBecause SYSDATE() can return different values even within the same statement,\nand is not affected by SET TIMESTAMP, it is non-deterministic and therefore\nunsafe for replication if statement-based binary logging is used. If that is a\nproblem, you can use row-based logging, or start the server with the mysqld\noption --sysdate-is-now to cause SYSDATE() to be an alias for NOW(). The\nnon-deterministic nature of SYSDATE() also means that indexes cannot be used\nfor evaluating expressions that refer to it, and that statements using the\nSYSDATE() function are unsafe for statement-based replication.\n\nExamples\n--------\n\nDifference between NOW() and SYSDATE():\n\nSELECT NOW(), SLEEP(2), NOW();\n+---------------------+----------+---------------------+\n| NOW() | SLEEP(2) | NOW() |\n+---------------------+----------+---------------------+\n| 2010-03-27 13:23:40 | 0 | 2010-03-27 13:23:40 |\n+---------------------+----------+---------------------+\n\nSELECT SYSDATE(), SLEEP(2), SYSDATE();\n+---------------------+----------+---------------------+\n| SYSDATE() | SLEEP(2) | SYSDATE() |\n+---------------------+----------+---------------------+\n| 2010-03-27 13:23:52 | 0 | 2010-03-27 13:23:54 |\n+---------------------+----------+---------------------+\n\nWith precision:\n\nSELECT SYSDATE(4);\n+--------------------------+\n| SYSDATE(4) |\n+--------------------------+\n| 2018-07-10 10:17:13.1689 |\n+--------------------------+\n\nURL: https://mariadb.com/kb/en/sysdate/','','https://mariadb.com/kb/en/sysdate/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (552,31,'TIME Function','Syntax\n------\n\nTIME(expr)\n\nDescription\n-----------\n\nExtracts the time part of the time or datetime expression expr and returns it\nas a string.\n\nExamples\n--------\n\nSELECT TIME(\'2003-12-31 01:02:03\');\n+-----------------------------+\n| TIME(\'2003-12-31 01:02:03\') |\n+-----------------------------+\n| 01:02:03 |\n+-----------------------------+\n\nSELECT TIME(\'2003-12-31 01:02:03.000123\');\n+------------------------------------+\n| TIME(\'2003-12-31 01:02:03.000123\') |\n+------------------------------------+\n| 01:02:03.000123 |\n+------------------------------------+\n\nURL: https://mariadb.com/kb/en/time-function/','','https://mariadb.com/kb/en/time-function/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (553,31,'TIMEDIFF','Syntax\n------\n\nTIMEDIFF(expr1,expr2)\n\nDescription\n-----------\n\nTIMEDIFF() returns expr1 - expr2 expressed as a time value. expr1 and expr2\nare time or date-and-time expressions, but both must be of the same type.\n\nExamples\n--------\n\nSELECT TIMEDIFF(\'2000:01:01 00:00:00\', \'2000:01:01 00:00:00.000001\');\n+---------------------------------------------------------------+\n| TIMEDIFF(\'2000:01:01 00:00:00\', \'2000:01:01 00:00:00.000001\') |\n+---------------------------------------------------------------+\n| -00:00:00.000001 |\n+---------------------------------------------------------------+\n\nSELECT TIMEDIFF(\'2008-12-31 23:59:59.000001\', \'2008-12-30 01:01:01.000002\');\n+----------------------------------------------------------------------+\n| TIMEDIFF(\'2008-12-31 23:59:59.000001\', \'2008-12-30 01:01:01.000002\') |\n+----------------------------------------------------------------------+\n| 46:58:57.999999 |\n+----------------------------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/timediff/','','https://mariadb.com/kb/en/timediff/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (554,31,'TIMESTAMP FUNCTION','Syntax\n------\n\nTIMESTAMP(expr), TIMESTAMP(expr1,expr2)\n\nDescription\n-----------\n\nWith a single argument, this function returns the date or datetime expression\nexpr as a datetime value. With two arguments, it adds the time expression\nexpr2 to the date or datetime expression expr1 and returns the result as a\ndatetime value.\n\nExamples\n--------\n\nSELECT TIMESTAMP(\'2003-12-31\');\n+-------------------------+\n| TIMESTAMP(\'2003-12-31\') |\n+-------------------------+\n| 2003-12-31 00:00:00 |\n+-------------------------+\n\nSELECT TIMESTAMP(\'2003-12-31 12:00:00\',\'6:30:00\');\n+--------------------------------------------+\n| TIMESTAMP(\'2003-12-31 12:00:00\',\'6:30:00\') |\n+--------------------------------------------+\n| 2003-12-31 18:30:00 |\n+--------------------------------------------+\n\nURL: https://mariadb.com/kb/en/timestamp-function/','','https://mariadb.com/kb/en/timestamp-function/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (555,31,'TIMESTAMPADD','Syntax\n------\n\nTIMESTAMPADD(unit,interval,datetime_expr)\n\nDescription\n-----------\n\nAdds the integer expression interval to the date or datetime expression\ndatetime_expr. The unit for interval is given by the unit argument, which\nshould be one of the following values: MICROSECOND, SECOND, MINUTE, HOUR, DAY,\nWEEK, MONTH, QUARTER, or YEAR.\n\nThe unit value may be specified using one of keywords as shown, or with a\nprefix of SQL_TSI_. For example, DAY and SQL_TSI_DAY both are legal.\n\nBefore MariaDB 5.5, FRAC_SECOND was permitted as a synonym for MICROSECOND.\n\nExamples\n--------\n\nSELECT TIMESTAMPADD(MINUTE,1,\'2003-01-02\');\n+-------------------------------------+\n| TIMESTAMPADD(MINUTE,1,\'2003-01-02\') |\n+-------------------------------------+\n| 2003-01-02 00:01:00 |\n+-------------------------------------+\n\nSELECT TIMESTAMPADD(WEEK,1,\'2003-01-02\');\n+-----------------------------------+\n| TIMESTAMPADD(WEEK,1,\'2003-01-02\') |\n+-----------------------------------+\n| 2003-01-09 |\n+-----------------------------------+\n\nURL: https://mariadb.com/kb/en/timestampadd/','','https://mariadb.com/kb/en/timestampadd/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (556,31,'TIMESTAMPDIFF','Syntax\n------\n\nTIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)\n\nDescription\n-----------\n\nReturns datetime_expr2 - datetime_expr1, where datetime_expr1 and\ndatetime_expr2 are date or datetime expressions. One expression may be a date\nand the other a datetime; a date value is treated as a datetime having the\ntime part \'00:00:00\' where necessary. The unit for the result (an integer) is\ngiven by the unit argument. The legal values for unit are the same as those\nlisted in the description of the TIMESTAMPADD() function, i.e MICROSECOND,\nSECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, or YEAR.\n\nTIMESTAMPDIFF can also be used to calculate age.\n\nExamples\n--------\n\nSELECT TIMESTAMPDIFF(MONTH,\'2003-02-01\',\'2003-05-01\');\n+------------------------------------------------+\n| TIMESTAMPDIFF(MONTH,\'2003-02-01\',\'2003-05-01\') |\n+------------------------------------------------+\n| 3 |\n+------------------------------------------------+\n\nSELECT TIMESTAMPDIFF(YEAR,\'2002-05-01\',\'2001-01-01\');\n+-----------------------------------------------+\n| TIMESTAMPDIFF(YEAR,\'2002-05-01\',\'2001-01-01\') |\n+-----------------------------------------------+\n| -1 |\n+-----------------------------------------------+\n\nSELECT TIMESTAMPDIFF(MINUTE,\'2003-02-01\',\'2003-05-01 12:05:55\');\n+----------------------------------------------------------+\n| TIMESTAMPDIFF(MINUTE,\'2003-02-01\',\'2003-05-01 12:05:55\') |\n+----------------------------------------------------------+\n| 128885 |\n+----------------------------------------------------------+\n\nCalculating age:\n\nSELECT CURDATE();\n+------------+\n| CURDATE() |\n+------------+\n| 2019-05-27 |\n+------------+\n\nSELECT TIMESTAMPDIFF(YEAR, \'1971-06-06\', CURDATE()) AS age;\n+------+\n| age |\n+------+\n| 47 |\n+------+\n\nSELECT TIMESTAMPDIFF(YEAR, \'1971-05-06\', CURDATE()) AS age;\n+------+\n| age |\n+------+\n| 48 |\n+------+\n\nAge as of 2014-08-02:\n\nSELECT name, date_of_birth, TIMESTAMPDIFF(YEAR,date_of_birth,\'2014-08-02\') AS\nage \n FROM student_details;\n+---------+---------------+------+\n| name | date_of_birth | age |\n+---------+---------------+------+\n| Chun | 1993-12-31 | 20 |\n| Esben | 1946-01-01 | 68 |\n| Kaolin | 1996-07-16 | 18 |\n| Tatiana | 1988-04-13 | 26 |\n+---------+---------------+------+\n\nURL: https://mariadb.com/kb/en/timestampdiff/','','https://mariadb.com/kb/en/timestampdiff/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (557,31,'TIME_FORMAT','Syntax\n------\n\nTIME_FORMAT(time,format)\n\nDescription\n-----------\n\nThis is used like the DATE_FORMAT() function, but the format string may\ncontain format specifiers only for hours, minutes, and seconds. Other\nspecifiers produce a NULL value or 0.\n\nExamples\n--------\n\nSELECT TIME_FORMAT(\'100:00:00\', \'%H %k %h %I %l\');\n+--------------------------------------------+\n| TIME_FORMAT(\'100:00:00\', \'%H %k %h %I %l\') |\n+--------------------------------------------+\n| 100 100 04 04 4 |\n+--------------------------------------------+\n\nURL: https://mariadb.com/kb/en/time_format/','','https://mariadb.com/kb/en/time_format/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (558,31,'TIME_TO_SEC','Syntax\n------\n\nTIME_TO_SEC(time)\n\nDescription\n-----------\n\nReturns the time argument, converted to seconds.\n\nThe value returned by TIME_TO_SEC is of type DOUBLE. Before MariaDB 5.3 (and\nMySQL 5.6), the type was INT. The returned value preserves microseconds of the\nargument. See also Microseconds in MariaDB.\n\nExamples\n--------\n\nSELECT TIME_TO_SEC(\'22:23:00\');\n+-------------------------+\n| TIME_TO_SEC(\'22:23:00\') |\n+-------------------------+\n| 80580 |\n+-------------------------+\n\nSELECT TIME_TO_SEC(\'00:39:38\');\n+-------------------------+\n| TIME_TO_SEC(\'00:39:38\') |\n+-------------------------+\n| 2378 |\n+-------------------------+\n\nSELECT TIME_TO_SEC(\'09:12:55.2355\');\n+------------------------------+\n| TIME_TO_SEC(\'09:12:55.2355\') |\n+------------------------------+\n| 33175.2355 |\n+------------------------------+\n1 row in set (0.000 sec)\n\nURL: https://mariadb.com/kb/en/time_to_sec/','','https://mariadb.com/kb/en/time_to_sec/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (559,31,'TO_DAYS','Syntax\n------\n\nTO_DAYS(date)\n\nDescription\n-----------\n\nGiven a date date, returns the number of days since the start of the current\ncalendar (0000-00-00).\n\nThe function is not designed for use with dates before the advent of the\nGregorian calendar in October 1582. Results will not be reliable since it\ndoesn\'t account for the lost days when the calendar changed from the Julian\ncalendar.\n\nThis is the converse of the FROM_DAYS() function.\n\nExamples\n--------\n\nSELECT TO_DAYS(\'2007-10-07\');\n+-----------------------+\n| TO_DAYS(\'2007-10-07\') |\n+-----------------------+\n| 733321 |\n+-----------------------+\n\nSELECT TO_DAYS(\'0000-01-01\');\n+-----------------------+\n| TO_DAYS(\'0000-01-01\') |\n+-----------------------+\n| 1 |\n+-----------------------+\n\nSELECT TO_DAYS(950501);\n+-----------------+\n| TO_DAYS(950501) |\n+-----------------+\n| 728779 |\n+-----------------+\n\nURL: https://mariadb.com/kb/en/to_days/','','https://mariadb.com/kb/en/to_days/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (560,31,'TO_SECONDS','Syntax\n------\n\nTO_SECONDS(expr)\n\nDescription\n-----------\n\nReturns the number of seconds from year 0 till expr, or NULL if expr is not a\nvalid date or datetime.\n\nExamples\n--------\n\nSELECT TO_SECONDS(\'2013-06-13\');\n+--------------------------+\n| TO_SECONDS(\'2013-06-13\') |\n+--------------------------+\n| 63538300800 |\n+--------------------------+\n\nSELECT TO_SECONDS(\'2013-06-13 21:45:13\');\n+-----------------------------------+\n| TO_SECONDS(\'2013-06-13 21:45:13\') |\n+-----------------------------------+\n| 63538379113 |\n+-----------------------------------+\n\nSELECT TO_SECONDS(NOW());\n+-------------------+\n| TO_SECONDS(NOW()) |\n+-------------------+\n| 63543530875 |\n+-------------------+\n\nSELECT TO_SECONDS(20130513);\n+----------------------+\n| TO_SECONDS(20130513) |\n+----------------------+\n| 63535622400 |\n+----------------------+\n1 row in set (0.00 sec)\n\nSELECT TO_SECONDS(130513);\n+--------------------+\n| TO_SECONDS(130513) |\n+--------------------+\n| 63535622400 |\n+--------------------+\n\nURL: https://mariadb.com/kb/en/to_seconds/','','https://mariadb.com/kb/en/to_seconds/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (561,31,'UNIX_TIMESTAMP','Syntax\n------\n\nUNIX_TIMESTAMP()\nUNIX_TIMESTAMP(date)\n\nDescription\n-----------\n\nIf called with no argument, returns a Unix timestamp (seconds since\n\'1970-01-01 00:00:00\' UTC) as an unsigned integer. If UNIX_TIMESTAMP() is\ncalled with a date argument, it returns the value of the argument as seconds\nsince \'1970-01-01 00:00:00\' UTC. date may be a DATE string, a DATETIME string,\na TIMESTAMP, or a number in the format YYMMDD or YYYYMMDD. The server\ninterprets date as a value in the current time zone and converts it to an\ninternal value in UTC. Clients can set their time zone as described in time\nzones.\n\nThe inverse function of UNIX_TIMESTAMP() is FROM_UNIXTIME()\n\nUNIX_TIMESTAMP() supports microseconds.\n\nTimestamps in MariaDB have a maximum value of 2147483647, equivalent to\n2038-01-19 05:14:07. This is due to the underlying 32-bit limitation. Using\nthe function on a date beyond this will result in NULL being returned. Use\nDATETIME as a storage type if you require dates beyond this.\n\nError Handling\n--------------\n\nReturns NULL for wrong arguments to UNIX_TIMESTAMP(). In MySQL and MariaDB\nbefore 5.3 wrong arguments to UNIX_TIMESTAMP() returned 0.\n\nCompatibility\n-------------\n\nAs you can see in the examples above, UNIX_TIMESTAMP(constant-date-string)\nreturns a timestamp with 6 decimals while MariaDB 5.2 and before returns it\nwithout decimals. This can cause a problem if you are using UNIX_TIMESTAMP()\nas a partitioning function. You can fix this by using\nFLOOR(UNIX_TIMESTAMP(..)) or changing the date string to a date number, like\n20080101000000.\n\nExamples\n--------\n\nSELECT UNIX_TIMESTAMP();\n+------------------+\n| UNIX_TIMESTAMP() |\n+------------------+\n| 1269711082 |\n+------------------+\n\nSELECT UNIX_TIMESTAMP(\'2007-11-30 10:30:19\');\n+---------------------------------------+\n| UNIX_TIMESTAMP(\'2007-11-30 10:30:19\') |\n+---------------------------------------+\n| 1196436619.000000 |\n+---------------------------------------+\n\nSELECT UNIX_TIMESTAMP(\"2007-11-30 10:30:19.123456\");\n+----------------------------------------------+\n| unix_timestamp(\"2007-11-30 10:30:19.123456\") |\n+----------------------------------------------+\n| 1196411419.123456 |\n+----------------------------------------------+\n\nSELECT FROM_UNIXTIME(UNIX_TIMESTAMP(\'2007-11-30 10:30:19\'));\n+------------------------------------------------------+\n| FROM_UNIXTIME(UNIX_TIMESTAMP(\'2007-11-30 10:30:19\')) |\n+------------------------------------------------------+\n| 2007-11-30 10:30:19.000000 |\n+------------------------------------------------------+\n\nSELECT FROM_UNIXTIME(FLOOR(UNIX_TIMESTAMP(\'2007-11-30 10:30:19\')));\n+-------------------------------------------------------------+\n| FROM_UNIXTIME(FLOOR(UNIX_TIMESTAMP(\'2007-11-30 10:30:19\'))) |\n+-------------------------------------------------------------+\n| 2007-11-30 10:30:19 |\n+-------------------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/unix_timestamp/','','https://mariadb.com/kb/en/unix_timestamp/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (562,31,'UTC_DATE','Syntax\n------\n\nUTC_DATE, UTC_DATE()\n\nDescription\n-----------\n\nReturns the current UTC date as a value in \'YYYY-MM-DD\' or YYYYMMDD format,\ndepending on whether the function is used in a string or numeric context.\n\nExamples\n--------\n\nSELECT UTC_DATE(), UTC_DATE() + 0;\n+------------+----------------+\n| UTC_DATE() | UTC_DATE() + 0 |\n+------------+----------------+\n| 2010-03-27 | 20100327 |\n+------------+----------------+\n\nURL: https://mariadb.com/kb/en/utc_date/','','https://mariadb.com/kb/en/utc_date/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (563,31,'UTC_TIME','Syntax\n------\n\nUTC_TIME\nUTC_TIME([precision])\n\nDescription\n-----------\n\nReturns the current UTC time as a value in \'HH:MM:SS\' or HHMMSS.uuuuuu format,\ndepending on whether the function is used in a string or numeric context.\n\nThe optional precision determines the microsecond precision. See Microseconds\nin MariaDB.\n\nExamples\n--------\n\nSELECT UTC_TIME(), UTC_TIME() + 0;\n+------------+----------------+\n| UTC_TIME() | UTC_TIME() + 0 |\n+------------+----------------+\n| 17:32:34 | 173234.000000 |\n+------------+----------------+\n\nWith precision:\n\nSELECT UTC_TIME(5);\n+----------------+\n| UTC_TIME(5) |\n+----------------+\n| 07:52:50.78369 |\n+----------------+\n\nURL: https://mariadb.com/kb/en/utc_time/','','https://mariadb.com/kb/en/utc_time/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (564,31,'UTC_TIMESTAMP','Syntax\n------\n\nUTC_TIMESTAMP\nUTC_TIMESTAMP([precision])\n\nDescription\n-----------\n\nReturns the current UTC date and time as a value in \'YYYY-MM-DD HH:MM:SS\' or\nYYYYMMDDHHMMSS.uuuuuu format, depending on whether the function is used in a\nstring or numeric context.\n\nThe optional precision determines the microsecond precision. See Microseconds\nin MariaDB.\n\nExamples\n--------\n\nSELECT UTC_TIMESTAMP(), UTC_TIMESTAMP() + 0;\n+---------------------+-----------------------+\n| UTC_TIMESTAMP() | UTC_TIMESTAMP() + 0 |\n+---------------------+-----------------------+\n| 2010-03-27 17:33:16 | 20100327173316.000000 |\n+---------------------+-----------------------+\n\nWith precision:\n\nSELECT UTC_TIMESTAMP(4);\n+--------------------------+\n| UTC_TIMESTAMP(4) |\n+--------------------------+\n| 2018-07-10 07:51:09.1019 |\n+--------------------------+\n\nURL: https://mariadb.com/kb/en/utc_timestamp/','','https://mariadb.com/kb/en/utc_timestamp/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (565,31,'WEEK','Syntax\n------\n\nWEEK(date[,mode])\n\nDescription\n-----------\n\nThis function returns the week number for date. The two-argument form of\nWEEK() allows you to specify whether the week starts on Sunday or Monday and\nwhether the return value should be in the range from 0 to 53 or from 1 to 53.\nIf the mode argument is omitted, the value of the default_week_format system\nvariable is used.\n\nModes\n-----\n\n+-------+---------------------+--------+------------------------------------+\n| Mode | 1st day of week | Range | Week 1 is the 1st week with |\n+-------+---------------------+--------+------------------------------------+\n| 0 | Sunday | 0-53 | a Sunday in this year |\n+-------+---------------------+--------+------------------------------------+\n| 1 | Monday | 0-53 | more than 3 days this year |\n+-------+---------------------+--------+------------------------------------+\n| 2 | Sunday | 1-53 | a Sunday in this year |\n+-------+---------------------+--------+------------------------------------+\n| 3 | Monday | 1-53 | more than 3 days this year |\n+-------+---------------------+--------+------------------------------------+\n| 4 | Sunday | 0-53 | more than 3 days this year |\n+-------+---------------------+--------+------------------------------------+\n| 5 | Monday | 0-53 | a Monday in this year |\n+-------+---------------------+--------+------------------------------------+\n| 6 | Sunday | 1-53 | more than 3 days this year |\n+-------+---------------------+--------+------------------------------------+\n| 7 | Monday | 1-53 | a Monday in this year |\n+-------+---------------------+--------+------------------------------------+\n\nWith the mode value of 3, which means \'more than 3 days this year\', weeks are\nnumbered according to ISO 8601:1988.\n\nExamples\n--------\n\nSELECT WEEK(\'2008-02-20\');\n+--------------------+\n| WEEK(\'2008-02-20\') |\n+--------------------+\n| 7 |\n+--------------------+\n\nSELECT WEEK(\'2008-02-20\',0);\n+----------------------+\n| WEEK(\'2008-02-20\',0) |\n+----------------------+\n| 7 |\n+----------------------+\n\nSELECT WEEK(\'2008-02-20\',1);\n+----------------------+\n| WEEK(\'2008-02-20\',1) |\n+----------------------+\n| 8 |\n+----------------------+\n\nSELECT WEEK(\'2008-12-31\',0);\n+----------------------+\n| WEEK(\'2008-12-31\',0) |\n+----------------------+\n| 52 |\n+----------------------+\n\nSELECT WEEK(\'2008-12-31\',1);\n+----------------------+\n| WEEK(\'2008-12-31\',1) |\n+----------------------+\n| 53 |\n+----------------------+\n\nSELECT WEEK(\'2019-12-30\',3);\n+----------------------+\n| WEEK(\'2019-12-30\',3) |\n+----------------------+\n| 1 |\n+----------------------+\n\nCREATE TABLE t1 (d DATETIME);\nINSERT INTO t1 VALUES\n (\"2007-01-30 21:31:07\"),\n (\"1983-10-15 06:42:51\"),\n (\"2011-04-21 12:34:56\"),\n (\"2011-10-30 06:31:41\"),\n (\"2011-01-30 14:03:25\"),\n (\"2004-10-07 11:19:34\");\n\nSELECT d, WEEK(d,0), WEEK(d,1) from t1;\n+---------------------+-----------+-----------+\n| d | WEEK(d,0) | WEEK(d,1) |\n+---------------------+-----------+-----------+\n| 2007-01-30 21:31:07 | 4 | 5 |\n| 1983-10-15 06:42:51 | 41 | 41 |\n| 2011-04-21 12:34:56 | 16 | 16 |\n| 2011-10-30 06:31:41 | 44 | 43 |\n| 2011-01-30 14:03:25 | 5 | 4 |\n| 2004-10-07 11:19:34 | 40 | 41 |\n+---------------------+-----------+-----------+\n\nURL: https://mariadb.com/kb/en/week/','','https://mariadb.com/kb/en/week/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (566,31,'WEEKDAY','Syntax\n------\n\nWEEKDAY(date)\n\nDescription\n-----------\n\nReturns the weekday index for date (0 = Monday, 1 = Tuesday, ... 6 = Sunday).\n\nThis contrasts with DAYOFWEEK() which follows the ODBC standard (1 = Sunday, 2\n= Monday, ..., 7 = Saturday).\n\nExamples\n--------\n\nSELECT WEEKDAY(\'2008-02-03 22:23:00\');\n+--------------------------------+\n| WEEKDAY(\'2008-02-03 22:23:00\') |\n+--------------------------------+\n| 6 |\n+--------------------------------+\n\nSELECT WEEKDAY(\'2007-11-06\');\n+-----------------------+\n| WEEKDAY(\'2007-11-06\') |\n+-----------------------+\n| 1 |\n+-----------------------+\n\nCREATE TABLE t1 (d DATETIME);\nINSERT INTO t1 VALUES\n (\"2007-01-30 21:31:07\"),\n (\"1983-10-15 06:42:51\"),\n (\"2011-04-21 12:34:56\"),\n (\"2011-10-30 06:31:41\"),\n (\"2011-01-30 14:03:25\"),\n (\"2004-10-07 11:19:34\");\n\nSELECT d FROM t1 where WEEKDAY(d) = 6;\n+---------------------+\n| d |\n+---------------------+\n| 2011-10-30 06:31:41 |\n| 2011-01-30 14:03:25 |\n+---------------------+\n\nURL: https://mariadb.com/kb/en/weekday/','','https://mariadb.com/kb/en/weekday/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (567,31,'WEEKOFYEAR','Syntax\n------\n\nWEEKOFYEAR(date)\n\nDescription\n-----------\n\nReturns the calendar week of the date as a number in the range from 1 to 53.\nWEEKOFYEAR() is a compatibility function that is equivalent to WEEK(date,3).\n\nExamples\n--------\n\nSELECT WEEKOFYEAR(\'2008-02-20\');\n+--------------------------+\n| WEEKOFYEAR(\'2008-02-20\') |\n+--------------------------+\n| 8 |\n+--------------------------+\n\nCREATE TABLE t1 (d DATETIME);\nINSERT INTO t1 VALUES\n (\"2007-01-30 21:31:07\"),\n (\"1983-10-15 06:42:51\"),\n (\"2011-04-21 12:34:56\"),\n (\"2011-10-30 06:31:41\"),\n (\"2011-01-30 14:03:25\"),\n (\"2004-10-07 11:19:34\");\n\nselect * from t1;\n+---------------------+\n| d |\n+---------------------+\n| 2007-01-30 21:31:07 |\n| 1983-10-15 06:42:51 |\n| 2011-04-21 12:34:56 |\n| 2011-10-30 06:31:41 |\n| 2011-01-30 14:03:25 |\n| 2004-10-07 11:19:34 |\n+---------------------+\n\nSELECT d, WEEKOFYEAR(d), WEEK(d,3) from t1;\n+---------------------+---------------+-----------+\n| d | WEEKOFYEAR(d) | WEEK(d,3) |\n+---------------------+---------------+-----------+\n| 2007-01-30 21:31:07 | 5 | 5 |\n| 1983-10-15 06:42:51 | 41 | 41 |\n| 2011-04-21 12:34:56 | 16 | 16 |\n| 2011-10-30 06:31:41 | 43 | 43 |\n| 2011-01-30 14:03:25 | 4 | 4 |\n| 2004-10-07 11:19:34 | 41 | 41 |\n+---------------------+---------------+-----------+\n\nURL: https://mariadb.com/kb/en/weekofyear/','','https://mariadb.com/kb/en/weekofyear/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (568,31,'YEAR','Syntax\n------\n\nYEAR(date)\n\nDescription\n-----------\n\nReturns the year for the given date, in the range 1000 to 9999, or 0 for the\n\"zero\" date.\n\nExamples\n--------\n\nCREATE TABLE t1 (d DATETIME);\nINSERT INTO t1 VALUES\n (\"2007-01-30 21:31:07\"),\n (\"1983-10-15 06:42:51\"),\n (\"2011-04-21 12:34:56\"),\n (\"2011-10-30 06:31:41\"),\n (\"2011-01-30 14:03:25\"),\n (\"2004-10-07 11:19:34\");\n\nSELECT * FROM t1;\n+---------------------+\n| d |\n+---------------------+\n| 2007-01-30 21:31:07 |\n| 1983-10-15 06:42:51 |\n| 2011-04-21 12:34:56 |\n| 2011-10-30 06:31:41 |\n| 2011-01-30 14:03:25 |\n| 2004-10-07 11:19:34 |\n+---------------------+\n\nSELECT * FROM t1 WHERE YEAR(d) = 2011;\n+---------------------+\n| d |\n+---------------------+\n| 2011-04-21 12:34:56 |\n| 2011-10-30 06:31:41 |\n| 2011-01-30 14:03:25 |\n+---------------------+\n\nSELECT YEAR(\'1987-01-01\');\n+--------------------+\n| YEAR(\'1987-01-01\') |\n+--------------------+\n| 1987 |\n+--------------------+\n\nURL: https://mariadb.com/kb/en/year/','','https://mariadb.com/kb/en/year/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (569,31,'YEARWEEK','Syntax\n------\n\nYEARWEEK(date), YEARWEEK(date,mode)\n\nDescription\n-----------\n\nReturns year and week for a date. The mode argument works exactly like the\nmode argument to WEEK(). The year in the result may be different from the year\nin the date argument for the first and the last week of the year.\n\nExamples\n--------\n\nSELECT YEARWEEK(\'1987-01-01\');\n+------------------------+\n| YEARWEEK(\'1987-01-01\') |\n+------------------------+\n| 198652 |\n+------------------------+\n\nCREATE TABLE t1 (d DATETIME);\nINSERT INTO t1 VALUES\n (\"2007-01-30 21:31:07\"),\n (\"1983-10-15 06:42:51\"),\n (\"2011-04-21 12:34:56\"),\n (\"2011-10-30 06:31:41\"),\n (\"2011-01-30 14:03:25\"),\n (\"2004-10-07 11:19:34\");\n\nSELECT * FROM t1;\n+---------------------+\n| d |\n+---------------------+\n| 2007-01-30 21:31:07 |\n| 1983-10-15 06:42:51 |\n| 2011-04-21 12:34:56 |\n| 2011-10-30 06:31:41 |\n| 2011-01-30 14:03:25 |\n| 2004-10-07 11:19:34 |\n+---------------------+\n6 rows in set (0.02 sec)\n\nSELECT YEARWEEK(d) FROM t1 WHERE YEAR(d) = 2011;\n+-------------+\n| YEARWEEK(d) |\n+-------------+\n| 201116 |\n| 201144 |\n| 201105 |\n+-------------+\n3 rows in set (0.03 sec)\n\nURL: https://mariadb.com/kb/en/yearweek/','','https://mariadb.com/kb/en/yearweek/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (570,32,'Well-Known Binary (WKB) Format','WKB stands for Well-Known Binary, a format for representing geographical and\ngeometrical data.\n\nWKB uses 1-byte unsigned integers, 4-byte unsigned integers, and 8-byte\ndouble-precision numbers.\n\n* The first byte indicates the byte order. 00 for big endian, or 01 for little\nendian.\n* The next 4 bytes indicate the geometry type. Values from 1 to 7 indicate\nwhether the type is Point, LineString, Polygon, MultiPoint, MultiLineString,\nMultiPolygon, or GeometryCollection respectively. \n* The 8-byte floats represent the co-ordinates.\n\nTake the following example, a sequence of 21 bytes each represented by two hex\ndigits:\n\n000000000140000000000000004010000000000000\n\n* It\'s big endian\n000000000140000000000000004010000000000000\n\n* It\'s a POINT\n000000000140000000000000004010000000000000\n\n* The X co-ordinate is 2.0\n000000000140000000000000004010000000000000\n\n* The Y-co-ordinate is 4.0\n000000000140000000000000004010000000000000\n\nURL: https://mariadb.com/kb/en/well-known-binary-wkb-format/','','https://mariadb.com/kb/en/well-known-binary-wkb-format/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (571,32,'AsBinary','A synonym for ST_AsBinary().\n\nURL: https://mariadb.com/kb/en/wkb-asbinary/','','https://mariadb.com/kb/en/wkb-asbinary/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (572,32,'AsWKB','A synonym for ST_AsBinary().\n\nURL: https://mariadb.com/kb/en/aswkb/','','https://mariadb.com/kb/en/aswkb/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (573,32,'MLineFromWKB','Syntax\n------\n\nMLineFromWKB(wkb[,srid])\nMultiLineStringFromWKB(wkb[,srid])\n\nDescription\n-----------\n\nConstructs a MULTILINESTRING value using its WKB representation and SRID.\n\nMLineFromWKB() and MultiLineStringFromWKB() are synonyms.\n\nExamples\n--------\n\nSET @g = ST_AsBinary(MLineFromText(\'MULTILINESTRING((10 48,10 21,10 0),(16\n0,16 23,16 48))\'));\n\nSELECT ST_AsText(MLineFromWKB(@g));\n+--------------------------------------------------------+\n| ST_AsText(MLineFromWKB(@g)) |\n+--------------------------------------------------------+\n| MULTILINESTRING((10 48,10 21,10 0),(16 0,16 23,16 48)) |\n+--------------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/mlinefromwkb/','','https://mariadb.com/kb/en/mlinefromwkb/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (574,32,'MPointFromWKB','Syntax\n------\n\nMPointFromWKB(wkb[,srid])\nMultiPointFromWKB(wkb[,srid])\n\nDescription\n-----------\n\nConstructs a MULTIPOINT value using its WKB representation and SRID.\n\nMPointFromWKB() and MultiPointFromWKB() are synonyms.\n\nExamples\n--------\n\nSET @g = ST_AsBinary(MPointFromText(\'MultiPoint( 1 1, 2 2, 5 3, 7 2, 9 3, 8 4,\n6 6, 6 9, 4 9, 1 5 )\'));\n\nSELECT ST_AsText(MPointFromWKB(@g));\n+-----------------------------------------------------+\n| ST_AsText(MPointFromWKB(@g)) |\n+-----------------------------------------------------+\n| MULTIPOINT(1 1,2 2,5 3,7 2,9 3,8 4,6 6,6 9,4 9,1 5) |\n+-----------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/mpointfromwkb/','','https://mariadb.com/kb/en/mpointfromwkb/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (575,32,'MPolyFromWKB','Syntax\n------\n\nMPolyFromWKB(wkb[,srid])\nMultiPolygonFromWKB(wkb[,srid])\n\nDescription\n-----------\n\nConstructs a MULTIPOLYGON value using its WKB representation and SRID.\n\nMPolyFromWKB() and MultiPolygonFromWKB() are synonyms.\n\nExamples\n--------\n\nSET @g = ST_AsBinary(MPointFromText(\'MULTIPOLYGON(((28 26,28 0,84 0,84 42,28\n26),(52 18,66 23,73 9,48 6,52 18)),((59 18,67 18,67 13,59 13,59 18)))\'));\n\nSELECT ST_AsText(MPolyFromWKB(@g))\\G\n*************************** 1. row ***************************\nST_AsText(MPolyFromWKB(@g)): MULTIPOLYGON(((28 26,28 0,84 0,84 42,28 26),(52\n18,66 23,73 9,48 6,52 18)),((59 18,67 18,67 13,59 13,59 18)))\n\nURL: https://mariadb.com/kb/en/mpolyfromwkb/','','https://mariadb.com/kb/en/mpolyfromwkb/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (576,32,'GeomCollFromWKB','A synonym for ST_GeomCollFromWKB.\n\nURL: https://mariadb.com/kb/en/wkb-geomcollfromwkb/','','https://mariadb.com/kb/en/wkb-geomcollfromwkb/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (577,32,'GeometryCollectionFromWKB','A synonym for ST_GeomCollFromWKB.\n\nURL: https://mariadb.com/kb/en/geometrycollectionfromwkb/','','https://mariadb.com/kb/en/geometrycollectionfromwkb/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (578,32,'GeometryFromWKB','A synonym for ST_GeomFromWKB.\n\nURL: https://mariadb.com/kb/en/geometryfromwkb/','','https://mariadb.com/kb/en/geometryfromwkb/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (579,32,'GeomFromWKB','A synonym for ST_GeomFromWKB.\n\nURL: https://mariadb.com/kb/en/wkb-geomfromwkb/','','https://mariadb.com/kb/en/wkb-geomfromwkb/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (580,32,'LineFromWKB','A synonym for ST_LineFromWKB.\n\nURL: https://mariadb.com/kb/en/wkb-linefromwkb/','','https://mariadb.com/kb/en/wkb-linefromwkb/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (581,32,'LineStringFromWKB','A synonym for ST_LineFromWKB.\n\nURL: https://mariadb.com/kb/en/linestringfromwkb/','','https://mariadb.com/kb/en/linestringfromwkb/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (582,32,'MultiLineStringFromWKB','A synonym for MLineFromWKB().\n\nURL: https://mariadb.com/kb/en/multilinestringfromwkb/','','https://mariadb.com/kb/en/multilinestringfromwkb/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (583,32,'MultiPointFromWKB','A synonym for MPointFromWKB.\n\nURL: https://mariadb.com/kb/en/multipointfromwkb/','','https://mariadb.com/kb/en/multipointfromwkb/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (584,32,'MultiPolygonFromWKB','Synonym for MPolyFromWKB.\n\nURL: https://mariadb.com/kb/en/multipolygonfromwkb/','','https://mariadb.com/kb/en/multipolygonfromwkb/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (585,32,'PointFromWKB','A synonym for ST_PointFromWKB.\n\nURL: https://mariadb.com/kb/en/wkb-pointfromwkb/','','https://mariadb.com/kb/en/wkb-pointfromwkb/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (586,32,'PolyFromWKB','A synonym for ST_PolyFromWKB.\n\nURL: https://mariadb.com/kb/en/wkb-polyfromwkb/','','https://mariadb.com/kb/en/wkb-polyfromwkb/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (587,32,'PolygonFromWKB','A synonym for ST_PolyFromWKB.\n\nURL: https://mariadb.com/kb/en/polygonfromwkb/','','https://mariadb.com/kb/en/polygonfromwkb/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (588,32,'ST_AsBinary','Syntax\n------\n\nST_AsBinary(g)\nAsBinary(g)\nST_AsWKB(g)\nAsWKB(g)\n\nDescription\n-----------\n\nConverts a value in internal geometry format to its WKB representation and\nreturns the binary result.\n\nST_AsBinary(), AsBinary(), ST_AsWKB() and AsWKB() are synonyms,\n\nExamples\n--------\n\nSET @poly = ST_GeomFromText(\'POLYGON((0 0,0 1,1 1,1 0,0 0))\');\nSELECT ST_AsBinary(@poly);\n\nSELECT ST_AsText(ST_GeomFromWKB(ST_AsWKB(@poly)));\n+--------------------------------------------+\n| ST_AsText(ST_GeomFromWKB(ST_AsWKB(@poly))) |\n+--------------------------------------------+\n| POLYGON((0 0,0 1,1 1,1 0,0 0)) |\n+--------------------------------------------+\n\nURL: https://mariadb.com/kb/en/st_asbinary/','','https://mariadb.com/kb/en/st_asbinary/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (589,32,'ST_AsWKB','A synonym for ST_AsBinary().\n\nURL: https://mariadb.com/kb/en/st_aswkb/','','https://mariadb.com/kb/en/st_aswkb/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (590,32,'ST_GeomCollFromWKB','Syntax\n------\n\nST_GeomCollFromWKB(wkb[,srid])\nST_GeometryCollectionFromWKB(wkb[,srid])\nGeomCollFromWKB(wkb[,srid])\nGeometryCollectionFromWKB(wkb[,srid])\n\nDescription\n-----------\n\nConstructs a GEOMETRYCOLLECTION value using its WKB representation and SRID.\n\nST_GeomCollFromWKB(), ST_GeometryCollectionFromWKB(), GeomCollFromWKB() and\nGeometryCollectionFromWKB() are synonyms.\n\nExamples\n--------\n\nSET @g = ST_AsBinary(ST_GeomFromText(\'GEOMETRYCOLLECTION(\n POLYGON((5 5,10 5,10 10,5 5)),POINT(10 10))\'));\n\nSELECT ST_AsText(ST_GeomCollFromWKB(@g));\n+----------------------------------------------------------------+\n| ST_AsText(ST_GeomCollFromWKB(@g)) |\n+----------------------------------------------------------------+\n| GEOMETRYCOLLECTION(POLYGON((5 5,10 5,10 10,5 5)),POINT(10 10)) |\n+----------------------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/st_geomcollfromwkb/','','https://mariadb.com/kb/en/st_geomcollfromwkb/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (591,32,'ST_GeometryCollectionFromWKB','A synonym for ST_GeomCollFromWKB.\n\nURL: https://mariadb.com/kb/en/st_geometrycollectionfromwkb/','','https://mariadb.com/kb/en/st_geometrycollectionfromwkb/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (592,32,'ST_GeometryFromWKB','A synonym for ST_GeomFromWKB.\n\nURL: https://mariadb.com/kb/en/st_geometryfromwkb/','','https://mariadb.com/kb/en/st_geometryfromwkb/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (593,32,'ST_GeomFromWKB','Syntax\n------\n\nST_GeomFromWKB(wkb[,srid])\nST_GeometryFromWKB(wkb[,srid])\nGeomFromWKB(wkb[,srid])\nGeometryFromWKB(wkb[,srid])\n\nDescription\n-----------\n\nConstructs a geometry value of any type using its WKB representation and SRID.\n\nST_GeomFromWKB(), ST_GeometryFromWKB(), GeomFromWKB() and GeometryFromWKB()\nare synonyms.\n\nExamples\n--------\n\nSET @g = ST_AsBinary(ST_LineFromText(\'LINESTRING(0 4, 4 6)\'));\n\nSELECT ST_AsText(ST_GeomFromWKB(@g));\n+-------------------------------+\n| ST_AsText(ST_GeomFromWKB(@g)) |\n+-------------------------------+\n| LINESTRING(0 4,4 6) |\n+-------------------------------+\n\nURL: https://mariadb.com/kb/en/st_geomfromwkb/','','https://mariadb.com/kb/en/st_geomfromwkb/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (594,32,'ST_LineFromWKB','Syntax\n------\n\nST_LineFromWKB(wkb[,srid])\nLineFromWKB(wkb[,srid])\nST_LineStringFromWKB(wkb[,srid])\nLineStringFromWKB(wkb[,srid])\n\nDescription\n-----------\n\nConstructs a LINESTRING value using its WKB representation and SRID.\n\nST_LineFromWKB(), LineFromWKB(), ST_LineStringFromWKB(), and\nLineStringFromWKB() are synonyms.\n\nExamples\n--------\n\nSET @g = ST_AsBinary(ST_LineFromText(\'LineString(0 4,4 6)\'));\n\nSELECT ST_AsText(ST_LineFromWKB(@g)) AS l;\n+---------------------+\n| l |\n+---------------------+\n| LINESTRING(0 4,4 6) |\n+---------------------+\n\nURL: https://mariadb.com/kb/en/st_linefromwkb/','','https://mariadb.com/kb/en/st_linefromwkb/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (595,32,'ST_LineStringFromWKB','A synonym for ST_LineFromWKB.\n\nURL: https://mariadb.com/kb/en/st_linestringfromwkb/','','https://mariadb.com/kb/en/st_linestringfromwkb/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (596,32,'ST_PointFromWKB','Syntax\n------\n\nST_PointFromWKB(wkb[,srid])\nPointFromWKB(wkb[,srid])\n\nDescription\n-----------\n\nConstructs a POINT value using its WKB representation and SRID.\n\nST_PointFromWKB() and PointFromWKB() are synonyms.\n\nExamples\n--------\n\nSET @g = ST_AsBinary(ST_PointFromText(\'POINT(0 4)\'));\n\nSELECT ST_AsText(ST_PointFromWKB(@g)) AS p;\n+------------+\n| p |\n+------------+\n| POINT(0 4) |\n+------------+\n\nURL: https://mariadb.com/kb/en/st_pointfromwkb/','','https://mariadb.com/kb/en/st_pointfromwkb/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (597,32,'ST_PolyFromWKB','Syntax\n------\n\nST_PolyFromWKB(wkb[,srid])\nST_PolygonFromWKB(wkb[,srid])\nPolyFromWKB(wkb[,srid])\nPolygonFromWKB(wkb[,srid])\n\nDescription\n-----------\n\nConstructs a POLYGON value using its WKB representation and SRID.\n\nST_PolyFromWKB(), ST_PolygonFromWKB(), PolyFromWKB() and PolygonFromWKB() are\nsynonyms.\n\nExamples\n--------\n\nSET @g = ST_AsBinary(ST_PolyFromText(\'POLYGON((1 1,1 5,4 9,6 9,9 3,7 2,1\n1))\'));\n\nSELECT ST_AsText(ST_PolyFromWKB(@g)) AS p;\n+----------------------------------------+\n| p |\n+----------------------------------------+\n| POLYGON((1 1,1 5,4 9,6 9,9 3,7 2,1 1)) |\n+----------------------------------------+\n\nURL: https://mariadb.com/kb/en/st_polyfromwkb/','','https://mariadb.com/kb/en/st_polyfromwkb/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (598,32,'ST_PolygonFromWKB','A synonym for ST_PolyFromWKB.\n\nURL: https://mariadb.com/kb/en/st_polygonfromwkb/','','https://mariadb.com/kb/en/st_polygonfromwkb/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (599,34,'Geometry Types','Description\n-----------\n\nMariaDB provides a standard way of creating spatial columns for geometry\ntypes, for example, with CREATE TABLE or ALTER TABLE. Currently, spatial\ncolumns are supported for MyISAM, InnoDB and ARCHIVE tables. See also SPATIAL\nINDEX.\n\nThe basic geometry type is GEOMETRY. But the type can be more specific. The\nfollowing types are supported:\n\n+-----------------------------------------------------------------------------+\n| Geometry Types |\n+-----------------------------------------------------------------------------+\n| POINT |\n+-----------------------------------------------------------------------------+\n| LINESTRING |\n+-----------------------------------------------------------------------------+\n| POLYGON |\n+-----------------------------------------------------------------------------+\n| MULTIPOINT |\n+-----------------------------------------------------------------------------+\n| MULTILINESTRING |\n+-----------------------------------------------------------------------------+\n| MULTIPOLYGON |\n+-----------------------------------------------------------------------------+\n| GEOMETRYCOLLECTION |\n+-----------------------------------------------------------------------------+\n| GEOMETRY |\n+-----------------------------------------------------------------------------+\n\nExamples\n--------\n\nNote: For clarity, only one type is listed per table in the examples below,\nbut a table row can contain multiple types. For example:\n\nCREATE TABLE object (shapeA POLYGON, shapeB LINESTRING);\n\nPOINT\n-----\n\nCREATE TABLE gis_point (g POINT);\nSHOW FIELDS FROM gis_point;\nINSERT INTO gis_point VALUES\n (PointFromText(\'POINT(10 10)\')),\n (PointFromText(\'POINT(20 10)\')),\n (PointFromText(\'POINT(20 20)\')),\n (PointFromWKB(AsWKB(PointFromText(\'POINT(10 20)\'))));\n\nLINESTRING\n----------\n\nCREATE TABLE gis_line (g LINESTRING);\nSHOW FIELDS FROM gis_line;\nINSERT INTO gis_line VALUES\n (LineFromText(\'LINESTRING(0 0,0 10,10 0)\')),\n (LineStringFromText(\'LINESTRING(10 10,20 10,20 20,10 20,10 10)\')),\n (LineStringFromWKB(AsWKB(LineString(Point(10, 10), Point(40, 10)))));\n\nPOLYGON\n-------\n\nCREATE TABLE gis_polygon (g POLYGON);\nSHOW FIELDS FROM gis_polygon;\nINSERT INTO gis_polygon VALUES\n (PolygonFromText(\'POLYGON((10 10,20 10,20 20,10 20,10 10))\')),\n (PolyFromText(\'POLYGON((0 0,50 0,50 50,0 50,0 0), (10 10,20 10,20 20,10\n20,10 10))\')),\n (PolyFromWKB(AsWKB(Polygon(LineString(Point(0, 0), Point(30, 0), Point(30,\n30), Point(0, 0))))));\n\nMULTIPOINT\n----------\n\nCREATE TABLE gis_multi_point (g MULTIPOINT);\nSHOW FIELDS FROM gis_multi_point;\nINSERT INTO gis_multi_point VALUES\n (MultiPointFromText(\'MULTIPOINT(0 0,10 10,10 20,20 20)\')),\n (MPointFromText(\'MULTIPOINT(1 1,11 11,11 21,21 21)\')),\n (MPointFromWKB(AsWKB(MultiPoint(Point(3, 6), Point(4, 10)))));\n\nMULTILINESTRING\n---------------\n\nCREATE TABLE gis_multi_line (g MULTILINESTRING);\nSHOW FIELDS FROM gis_multi_line;\nINSERT INTO gis_multi_line VALUES\n (MultiLineStringFromText(\'MULTILINESTRING((10 48,10 21,10 0),(16 0,16\n23,16 48))\')),\n (MLineFromText(\'MULTILINESTRING((10 48,10 21,10 0))\')),\n (MLineFromWKB(AsWKB(MultiLineString(LineString(Point(1, 2), Point(3, 5)),\nLineString(Point(2, 5), Point(5, 8), Point(21, 7))))));\n\nMULTIPOLYGON\n------------\n\nCREATE TABLE gis_multi_polygon (g MULTIPOLYGON);\nSHOW FIELDS FROM gis_multi_polygon;\nINSERT INTO gis_multi_polygon VALUES\n (MultiPolygonFromText(\'MULTIPOLYGON(((28 26,28 0,84 0,84 42,28 26),(52\n18,66 23,73 9,48 6,52 18)),((59 18,67 18,67 13,59 13,59 18)))\')),\n (MPolyFromText(\'MULTIPOLYGON(((28 26,28 0,84 0,84 42,28 26),(52 18,66\n23,73 9,48 6,52 18)),((59 18,67 18,67 13,59 13,59 18)))\')),\n (MPolyFromWKB(AsWKB(MultiPolygon(Polygon(LineString(Point(0, 3), Point(3,\n3), Point(3, 0), Point(0, 3)))))));\n\nGEOMETRYCOLLECTION\n------------------\n\nCREATE TABLE gis_geometrycollection (g GEOMETRYCOLLECTION);\nSHOW FIELDS FROM gis_geometrycollection;\nINSERT INTO gis_geometrycollection VALUES\n (GeomCollFromText(\'GEOMETRYCOLLECTION(POINT(0 0), LINESTRING(0 0,10\n10))\')),\n (GeometryFromWKB(AsWKB(GeometryCollection(Point(44, 6),\nLineString(Point(3, 6), Point(7, 9)))))),\n (GeomFromText(\'GeometryCollection()\')),\n (GeomFromText(\'GeometryCollection EMPTY\'));\n\nGEOMETRY\n--------\n\nCREATE TABLE gis_geometry (g GEOMETRY);\nSHOW FIELDS FROM gis_geometry;\nINSERT into gis_geometry SELECT * FROM gis_point;\nINSERT into gis_geometry SELECT * FROM gis_line;\nINSERT into gis_geometry SELECT * FROM gis_polygon;\nINSERT into gis_geometry SELECT * FROM gis_multi_point;\nINSERT into gis_geometry SELECT * FROM gis_multi_line;\nINSERT into gis_geometry SELECT * FROM gis_multi_polygon;\nINSERT into gis_geometry SELECT * FROM gis_geometrycollection;\n\nURL: https://mariadb.com/kb/en/geometry-types/','','https://mariadb.com/kb/en/geometry-types/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (600,34,'Geometry Hierarchy','Description\n-----------\n\nGeometry is the base class. It is an abstract class. The instantiable\nsubclasses of Geometry are restricted to zero-, one-, and two-dimensional\ngeometric objects that exist in two-dimensional coordinate space. All\ninstantiable geometry classes are defined so that valid instances of a\ngeometry class are topologically closed (that is, all defined geometries\ninclude their boundary).\n\nThe base Geometry class has subclasses for Point, Curve, Surface, and\nGeometryCollection:\n\n* Point represents zero-dimensional objects.\n* Curve represents one-dimensional objects, and has subclass LineString, with\nsub-subclasses Line and LinearRing.\n* Surface is designed for two-dimensional objects and has subclass Polygon.\n* GeometryCollection has specialized zero-, one-, and two-dimensional\ncollection classes named MultiPoint, MultiLineString, and MultiPolygon for\nmodeling geometries corresponding to collections of Points, LineStrings, and\nPolygons, respectively. MultiCurve and MultiSurface are introduced as abstract\nsuperclasses that generalize the collection interfaces to handle Curves and\nSurfaces.\n\nGeometry, Curve, Surface, MultiCurve, and MultiSurface are defined as\nnon-instantiable classes. They define a common set of methods for their\nsubclasses and are included for extensibility.\n\nPoint, LineString, Polygon, GeometryCollection, MultiPoint, MultiLineString,\nand MultiPolygon are instantiable classes.\n\nURL: https://mariadb.com/kb/en/geometry-hierarchy/','','https://mariadb.com/kb/en/geometry-hierarchy/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (601,34,'SPATIAL INDEX','Description\n-----------\n\nOn MyISAM, Aria and InnoDB tables, MariaDB can create spatial indexes (an\nR-tree index) using syntax similar to that for creating regular indexes, but\nextended with the SPATIAL keyword. Currently, columns in spatial indexes must\nbe declared NOT NULL.\n\nSpatial indexes can be created when the table is created, or added after the\nfact like so:\n\n* with CREATE TABLE: CREATE TABLE geom (g GEOMETRY NOT NULL, SPATIAL INDEX(g));\n\n* with ALTER TABLE: ALTER TABLE geom ADD SPATIAL INDEX(g);\n\n* with CREATE INDEX: CREATE SPATIAL INDEX sp_index ON geom (g);\n\nSPATIAL INDEX creates an R-tree index. For storage engines that support\nnon-spatial indexing of spatial columns, the engine creates a B-tree index. A\nB-tree index on spatial values is useful for exact-value lookups, but not for\nrange scans.\n\nFor more information on indexing spatial columns, see CREATE INDEX.\n\nTo drop spatial indexes, use ALTER TABLE or DROP INDEX:\n\n* with ALTER TABLE: ALTER TABLE geom DROP INDEX g;\n\n* with DROP INDEX: DROP INDEX sp_index ON geom;\n\nData-at-Rest Encyption\n----------------------\n\nBefore MariaDB 10.4.3, InnoDB\'s spatial indexes could not be encrypted. If an\nInnoDB table was encrypted and if it contained spatial indexes, then those\nindexes would be unencrypted.\n\nIn MariaDB 10.4.3 and later, if innodb_checksum_algorithm is set to full_crc32\nor strict_full_crc32, and if the table does not use ROW_FORMAT=COMPRESSED,\nthen InnoDB spatial indexes will be encrypted if the table is encrypted.\n\nSee MDEV-12026 for more information.\n\nURL: https://mariadb.com/kb/en/spatial-index/','','https://mariadb.com/kb/en/spatial-index/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (602,35,'BOUNDARY','A synonym for ST_BOUNDARY.\n\nURL: https://mariadb.com/kb/en/geometry-properties-boundary/','','https://mariadb.com/kb/en/geometry-properties-boundary/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (603,35,'DIMENSION','A synonym for ST_DIMENSION.\n\nURL: https://mariadb.com/kb/en/dimension/','','https://mariadb.com/kb/en/dimension/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (604,35,'ENVELOPE','A synonym for ST_ENVELOPE.\n\nURL: https://mariadb.com/kb/en/geometry-properties-envelope/','','https://mariadb.com/kb/en/geometry-properties-envelope/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (605,35,'GeometryN','A synonym for ST_GeometryN.\n\nURL: https://mariadb.com/kb/en/geometry-properties-geometryn/','','https://mariadb.com/kb/en/geometry-properties-geometryn/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (606,35,'GeometryType','A synonym for ST_GeometryType.\n\nURL: https://mariadb.com/kb/en/geometry-properties-geometrytype/','','https://mariadb.com/kb/en/geometry-properties-geometrytype/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (607,35,'IsClosed','A synonym for ST_IsClosed.\n\nURL: https://mariadb.com/kb/en/isclosed/','','https://mariadb.com/kb/en/isclosed/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (608,35,'IsEmpty','A synonym for ST_IsEmpty.\n\nURL: https://mariadb.com/kb/en/geometry-properties-isempty/','','https://mariadb.com/kb/en/geometry-properties-isempty/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (609,35,'IsRing','A synonym for ST_IsRing.\n\nURL: https://mariadb.com/kb/en/isring/','','https://mariadb.com/kb/en/isring/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (610,35,'IsSimple','A synonym for ST_IsSImple.\n\nURL: https://mariadb.com/kb/en/geometry-properties-issimple/','','https://mariadb.com/kb/en/geometry-properties-issimple/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (611,35,'NumGeometries','A synonym for ST_NumGeometries.\n\nURL: https://mariadb.com/kb/en/geometry-properties-numgeometries/','','https://mariadb.com/kb/en/geometry-properties-numgeometries/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (612,35,'SRID','A synonym for ST_SRID.\n\nURL: https://mariadb.com/kb/en/geometry-properties-srid/','','https://mariadb.com/kb/en/geometry-properties-srid/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (613,35,'ST_BOUNDARY','MariaDB starting with 10.1.2\n----------------------------\nThe ST_BOUNDARY function was introduced in MariaDB 10.1.2\n\nSyntax\n------\n\nST_BOUNDARY(g)\nBOUNDARY(g)\n\nDescription\n-----------\n\nReturns a geometry that is the closure of the combinatorial boundary of the\ngeometry value g.\n\nBOUNDARY() is a synonym.\n\nExamples\n--------\n\nSELECT ST_AsText(ST_Boundary(ST_GeomFromText(\'LINESTRING(3 3,0 0, -3 3)\')));\n+----------------------------------------------------------------------+\n| ST_AsText(ST_Boundary(ST_GeomFromText(\'LINESTRING(3 3,0 0, -3 3)\'))) |\n+----------------------------------------------------------------------+\n| MULTIPOINT(3 3,-3 3) |\n+----------------------------------------------------------------------+\n\nSELECT ST_AsText(ST_Boundary(ST_GeomFromText(\'POLYGON((3 3,0 0, -3 3, 3\n3))\')));\n+--------------------------------------------------------------------------+\n| ST_AsText(ST_Boundary(ST_GeomFromText(\'POLYGON((3 3,0 0, -3 3, 3 3))\'))) |\n+--------------------------------------------------------------------------+\n| LINESTRING(3 3,0 0,-3 3,3 3) |\n+--------------------------------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/st_boundary/','','https://mariadb.com/kb/en/st_boundary/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (614,35,'ST_DIMENSION','Syntax\n------\n\nST_Dimension(g)\nDimension(g)\n\nDescription\n-----------\n\nReturns the inherent dimension of the geometry value g. The result can be\n\n+------------------------------------+---------------------------------------+\n| Dimension | Definition |\n+------------------------------------+---------------------------------------+\n| -1 | empty geometry |\n+------------------------------------+---------------------------------------+\n| 0 | geometry with no length or area |\n+------------------------------------+---------------------------------------+\n| 1 | geometry with no area but nonzero |\n| | length |\n+------------------------------------+---------------------------------------+\n| 2 | geometry with nonzero area |\n+------------------------------------+---------------------------------------+\n\nST_Dimension() and Dimension() are synonyms.\n\nExamples\n--------\n\nSELECT Dimension(GeomFromText(\'LineString(1 1,2 2)\'));\n+------------------------------------------------+\n| Dimension(GeomFromText(\'LineString(1 1,2 2)\')) |\n+------------------------------------------------+\n| 1 |\n+------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/st_dimension/','','https://mariadb.com/kb/en/st_dimension/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (615,35,'ST_ENVELOPE','Syntax\n------\n\nST_ENVELOPE(g)\nENVELOPE(g)\n\nDescription\n-----------\n\nReturns the Minimum Bounding Rectangle (MBR) for the geometry value g. The\nresult is returned as a Polygon value.\n\nThe polygon is defined by the corner points of the bounding box:\n\nPOLYGON((MINX MINY, MAXX MINY, MAXX MAXY, MINX MAXY, MINX MINY))\n\nST_ENVELOPE() and ENVELOPE() are synonyms.\n\nExamples\n--------\n\nSELECT AsText(ST_ENVELOPE(GeomFromText(\'LineString(1 1,4 4)\')));\n+----------------------------------------------------------+\n| AsText(ST_ENVELOPE(GeomFromText(\'LineString(1 1,4 4)\'))) |\n+----------------------------------------------------------+\n| POLYGON((1 1,4 1,4 4,1 4,1 1)) |\n+----------------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/st_envelope/','','https://mariadb.com/kb/en/st_envelope/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (616,35,'ST_GEOMETRYN','Syntax\n------\n\nST_GeometryN(gc,N)\nGeometryN(gc,N)\n\nDescription\n-----------\n\nReturns the N-th geometry in the GeometryCollection gc. Geometries are\nnumbered beginning with 1.\n\nST_GeometryN() and GeometryN() are synonyms.\n\nExample\n-------\n\nSET @gc = \'GeometryCollection(Point(1 1),LineString(12 14, 9 11))\';\n\nSELECT AsText(GeometryN(GeomFromText(@gc),1));\n+----------------------------------------+\n| AsText(GeometryN(GeomFromText(@gc),1)) |\n+----------------------------------------+\n| POINT(1 1) |\n+----------------------------------------+\n\nURL: https://mariadb.com/kb/en/st_geometryn/','','https://mariadb.com/kb/en/st_geometryn/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (617,35,'ST_GEOMETRYTYPE','Syntax\n------\n\nST_GeometryType(g)\nGeometryType(g)\n\nDescription\n-----------\n\nReturns as a string the name of the geometry type of which the geometry\ninstance g is a member. The name corresponds to one of the instantiable\nGeometry subclasses.\n\nST_GeometryType() and GeometryType() are synonyms.\n\nExamples\n--------\n\nSELECT GeometryType(GeomFromText(\'POINT(1 1)\'));\n+------------------------------------------+\n| GeometryType(GeomFromText(\'POINT(1 1)\')) |\n+------------------------------------------+\n| POINT |\n+------------------------------------------+\n\nURL: https://mariadb.com/kb/en/st_geometrytype/','','https://mariadb.com/kb/en/st_geometrytype/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (618,35,'ST_ISCLOSED','Syntax\n------\n\nST_IsClosed(g)\nIsClosed(g)\n\nDescription\n-----------\n\nReturns 1 if a given LINESTRING\'s start and end points are the same, or 0 if\nthey are not the same. Before MariaDB 10.1.5, returns NULL if not given a\nLINESTRING. After MariaDB 10.1.5, returns -1.\n\nST_IsClosed() and IsClosed() are synonyms.\n\nExamples\n--------\n\nSET @ls = \'LineString(0 0, 0 4, 4 4, 0 0)\';\nSELECT ST_ISCLOSED(GEOMFROMTEXT(@ls));\n+--------------------------------+\n| ST_ISCLOSED(GEOMFROMTEXT(@ls)) |\n+--------------------------------+\n| 1 |\n+--------------------------------+\n\nSET @ls = \'LineString(0 0, 0 4, 4 4, 0 1)\';\nSELECT ST_ISCLOSED(GEOMFROMTEXT(@ls));\n+--------------------------------+\n| ST_ISCLOSED(GEOMFROMTEXT(@ls)) |\n+--------------------------------+\n| 0 |\n+--------------------------------+\n\nURL: https://mariadb.com/kb/en/st_isclosed/','','https://mariadb.com/kb/en/st_isclosed/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (619,35,'ST_ISEMPTY','Syntax\n------\n\nST_IsEmpty(g)\nIsEmpty(g)\n\nDescription\n-----------\n\nIsEmpty is a function defined by the OpenGIS specification, but is not fully\nimplemented by MariaDB or MySQL.\n\nSince MariaDB and MySQL do not support GIS EMPTY values such as POINT EMPTY,\nas implemented it simply returns 1 if the geometry value g is invalid, 0 if it\nis valid, and NULL if the argument is NULL.\n\nST_IsEmpty() and IsEmpty() are synonyms.\n\nURL: https://mariadb.com/kb/en/st_isempty/','','https://mariadb.com/kb/en/st_isempty/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (620,35,'ST_IsRing','MariaDB starting with 10.1.2\n----------------------------\nThe ST_IsRing function was introduced in MariaDB 10.1.2\n\nSyntax\n------\n\nST_IsRing(g)\nIsRing(g)\n\nDescription\n-----------\n\nReturns true if a given LINESTRING is a ring, that is, both ST_IsClosed and\nST_IsSimple. A simple curve does not pass through the same point more than\nonce. However, see MDEV-7510.\n\nSt_IsRing() and IsRing() are synonyms.\n\nURL: https://mariadb.com/kb/en/st_isring/','','https://mariadb.com/kb/en/st_isring/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (621,35,'ST_IsSimple','Syntax\n------\n\nST_IsSimple(g)\nIsSimple(g)\n\nDescription\n-----------\n\nReturns true if the given Geometry has no anomalous geometric points, false if\nit does, or NULL if given a NULL value.\n\nST_IsSimple() and IsSimple() are synonyms.\n\nExamples\n--------\n\nA POINT is always simple.\n\nSET @g = \'Point(1 2)\';\n\nSELECT ST_ISSIMPLE(GEOMFROMTEXT(@g));\n+-------------------------------+\n| ST_ISSIMPLE(GEOMFROMTEXT(@g)) |\n+-------------------------------+\n| 1 |\n+-------------------------------+\n\nURL: https://mariadb.com/kb/en/st_issimple/','','https://mariadb.com/kb/en/st_issimple/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (622,35,'ST_NUMGEOMETRIES','Syntax\n------\n\nST_NumGeometries(gc)\nNumGeometries(gc)\n\nDescription\n-----------\n\nReturns the number of geometries in the GeometryCollection gc.\n\nST_NumGeometries() and NumGeometries() are synonyms.\n\nExample\n-------\n\nSET @gc = \'GeometryCollection(Point(1 1),LineString(2 2, 3 3))\';\n\nSELECT NUMGEOMETRIES(GeomFromText(@gc));\n+----------------------------------+\n| NUMGEOMETRIES(GeomFromText(@gc)) |\n+----------------------------------+\n| 2 |\n+----------------------------------+\n\nURL: https://mariadb.com/kb/en/st_numgeometries/','','https://mariadb.com/kb/en/st_numgeometries/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (623,35,'ST_RELATE','MariaDB starting with 10.1.2\n----------------------------\nThe ST_RELATE() function was introduced in MariaDB 10.1.2\n\nSyntax\n------\n\nST_Relate(g1, g2, i)\n\nDescription\n-----------\n\nReturns true if Geometry g1 is spatially related to Geometryg2 by testing for\nintersections between the interior, boundary and exterior of the two\ngeometries as specified by the values in intersection matrix pattern i.\n\nURL: https://mariadb.com/kb/en/st_relate/','','https://mariadb.com/kb/en/st_relate/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (624,35,'ST_SRID','Syntax\n------\n\nST_SRID(g)\nSRID(g)\n\nDescription\n-----------\n\nReturns an integer indicating the Spatial Reference System ID for the geometry\nvalue g.\n\nIn MariaDB, the SRID value is just an integer associated with the geometry\nvalue. All calculations are done assuming Euclidean (planar) geometry.\n\nST_SRID() and SRID() are synonyms.\n\nExamples\n--------\n\nSELECT SRID(GeomFromText(\'LineString(1 1,2 2)\',101));\n+-----------------------------------------------+\n| SRID(GeomFromText(\'LineString(1 1,2 2)\',101)) |\n+-----------------------------------------------+\n| 101 |\n+-----------------------------------------------+\n\nURL: https://mariadb.com/kb/en/st_srid/','','https://mariadb.com/kb/en/st_srid/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (625,36,'LOAD_FILE','Syntax\n------\n\nLOAD_FILE(file_name)\n\nDescription\n-----------\n\nReads the file and returns the file contents as a string. To use this\nfunction, the file must be located on the server host, you must specify the\nfull path name to the file, and you must have the FILE privilege. The file\nmust be readable by all and it must be less than the size, in bytes, of the\nmax_allowed_packet system variable. If the secure_file_priv system variable is\nset to a non-empty directory name, the file to be loaded must be located in\nthat directory.\n\nIf the file does not exist or cannot be read because one of the preceding\nconditions is not satisfied, the function returns NULL.\n\nSince MariaDB 5.1, the character_set_filesystem system variable has controlled\ninterpretation of file names that are given as literal strings.\n\nStatements using the LOAD_FILE() function are not safe for statement based\nreplication. This is because the slave will execute the LOAD_FILE() command\nitself. If the file doesn\'t exist on the slave, the function will return NULL.\n\nExamples\n--------\n\nUPDATE t SET blob_col=LOAD_FILE(\'/tmp/picture\') WHERE id=1;\n\nURL: https://mariadb.com/kb/en/load_file/','','https://mariadb.com/kb/en/load_file/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (626,36,'NOT REGEXP','Syntax\n------\n\nexpr NOT REGEXP pat, expr NOT RLIKE pat\n\nDescription\n-----------\n\nThis is the same as NOT (expr REGEXP pat).\n\nURL: https://mariadb.com/kb/en/not-regexp/','','https://mariadb.com/kb/en/not-regexp/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (627,36,'REGEXP','Syntax\n------\n\nexpr REGEXP pat, expr RLIKE pat\n\nDescription\n-----------\n\nPerforms a pattern match of a string expression expr against a pattern pat.\nThe pattern can be an extended regular expression. See Regular Expressions\nOverview for details on the syntax for regular expressions (see also PCRE\nRegular Expressions).\n\nReturns 1 if expr matches pat or 0 if it doesn\'t match. If either expr or pat\nare NULL, the result is NULL.\n\nThe negative form NOT REGEXP also exists, as an alias for NOT (string REGEXP\npattern). RLIKE and NOT RLIKE are synonyms for REGEXP and NOT REGEXP,\noriginally provided for mSQL compatibility.\n\nThe pattern need not be a literal string. For example, it can be specified as\na string expression or table column.\n\nNote: Because MariaDB uses the C escape syntax in strings (for example, \"\\n\"\nto represent the newline character), you must double any \"\\\" that you use in\nyour REGEXP strings.\n\nREGEXP is not case sensitive, except when used with binary strings.\n\nMariaDB 10.0.5 moved to the PCRE regex library - see PCRE Regular Expressions\nfor enhancements to REGEXP introduced in MariaDB 10.0.5.\n\nThe default_regex_flags variable addresses the remaining compatibilities\nbetween PCRE and the old regex library.\n\nExamples\n--------\n\nSELECT \'Monty!\' REGEXP \'m%y%%\';\n+-------------------------+\n| \'Monty!\' REGEXP \'m%y%%\' |\n+-------------------------+\n| 0 |\n+-------------------------+\n\nSELECT \'Monty!\' REGEXP \'.*\';\n+----------------------+\n| \'Monty!\' REGEXP \'.*\' |\n+----------------------+\n| 1 |\n+----------------------+\n\nSELECT \'new*\\n*line\' REGEXP \'new\\\\*.\\\\*line\';\n+---------------------------------------+\n| \'new*\\n*line\' REGEXP \'new\\\\*.\\\\*line\' |\n+---------------------------------------+\n| 1 |\n+---------------------------------------+\n\nSELECT \'a\' REGEXP \'A\', \'a\' REGEXP BINARY \'A\';\n+----------------+-----------------------+\n| \'a\' REGEXP \'A\' | \'a\' REGEXP BINARY \'A\' |\n+----------------+-----------------------+\n| 1 | 0 |\n+----------------+-----------------------+\n\nSELECT \'a\' REGEXP \'^[a-d]\';\n+---------------------+\n| \'a\' REGEXP \'^[a-d]\' |\n+---------------------+\n| 1 |\n+---------------------+\n\ndefault_regex_flags examples\n----------------------------\n\nMariaDB 10.0.11 introduced the default_regex_flags variable to address the\nremaining compatibilities between PCRE and the old regex library.\n\nThe default behaviour (multiline match is off)\n\nSELECT \'a\\nb\\nc\' RLIKE \'^b$\';\n+---------------------------+\n| \'(?m)a\\nb\\nc\' RLIKE \'^b$\' |\n+---------------------------+\n| 0 |\n+---------------------------+\n\nEnabling the multiline option using the PCRE option syntax:\n\nSELECT \'a\\nb\\nc\' RLIKE \'(?m)^b$\';\n+---------------------------+\n| \'a\\nb\\nc\' RLIKE \'(?m)^b$\' |\n+---------------------------+\n| 1 |\n+---------------------------+\n\nEnabling the multiline option using default_regex_flags\n\nSET default_regex_flags=\'MULTILINE\';\nSELECT \'a\\nb\\nc\' RLIKE \'^b$\';\n+-----------------------+\n| \'a\\nb\\nc\' RLIKE \'^b$\' |\n+-----------------------+\n| 1 |\n+-----------------------+\n\nURL: https://mariadb.com/kb/en/regexp/','','https://mariadb.com/kb/en/regexp/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (628,36,'REGEXP_INSTR','Syntax\n------\n\nREGEXP_INSTR(subject, pattern)\n\nReturns the position of the first occurrence of the regular expression pattern\nin the string subject, or 0 if pattern was not found.\n\nThe positions start with 1 and are measured in characters (i.e. not in bytes),\nwhich is important for multi-byte character sets. You can cast a multi-byte\ncharacter set to BINARY to get offsets in bytes.\n\nThe function follows the case sensitivity rules of the effective collation.\nMatching is performed case insensitively for case insensitive collations, and\ncase sensitively for case sensitive collations and for binary data.\n\nThe collation case sensitivity can be overwritten using the (?i) and (?-i)\nPCRE flags.\n\nMariaDB uses the PCRE regular expression library for enhanced regular\nexpression performance, and REGEXP_INSTR was introduced as part of this\nenhancement.\n\nExamples\n--------\n\nSELECT REGEXP_INSTR(\'abc\',\'b\');\n-> 2\n\nSELECT REGEXP_INSTR(\'abc\',\'x\');\n-> 0\n\nSELECT REGEXP_INSTR(\'BJÖRN\',\'N\');\n-> 5\n\nCasting a multi-byte character set as BINARY to get offsets in bytes:\n\nSELECT REGEXP_INSTR(BINARY \'BJÖRN\',\'N\') AS cast_utf8_to_binary;\n-> 6\n\nCase sensitivity:\n\nSELECT REGEXP_INSTR(\'ABC\',\'b\');\n-> 2\n\nSELECT REGEXP_INSTR(\'ABC\' COLLATE utf8_bin,\'b\');\n-> 0\n\nSELECT REGEXP_INSTR(BINARY\'ABC\',\'b\');\n-> 0\n\nSELECT REGEXP_INSTR(\'ABC\',\'(?-i)b\');\n-> 0\n\nSELECT REGEXP_INSTR(\'ABC\' COLLATE utf8_bin,\'(?i)b\');\n-> 2\n\nURL: https://mariadb.com/kb/en/regexp_instr/','','https://mariadb.com/kb/en/regexp_instr/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (629,36,'REGEXP_REPLACE','Syntax\n------\n\nREGEXP_REPLACE(subject, pattern, replace)\n\nDescription\n-----------\n\nREGEXP_REPLACE returns the string subject with all occurrences of the regular\nexpression pattern replaced by the string replace. If no occurrences are\nfound, then subject is returned as is.\n\nThe replace string can have backreferences to the subexpressions in the form\n\\N, where N is a number from 1 to 9.\n\nThe function follows the case sensitivity rules of the effective collation.\nMatching is performed case insensitively for case insensitive collations, and\ncase sensitively for case sensitive collations and for binary data.\n\nThe collation case sensitivity can be overwritten using the (?i) and (?-i)\nPCRE flags.\n\nMariaDB uses the PCRE regular expression library for enhanced regular\nexpression performance, and REGEXP_REPLACE was introduced as part of this\nenhancement.\n\nThe default_regex_flags variable addresses the remaining compatibilities\nbetween PCRE and the old regex library.\n\nExamples\n--------\n\nSELECT REGEXP_REPLACE(\'ab12cd\',\'[0-9]\',\'\') AS remove_digits;\n-> abcd\n\nSELECT\nREGEXP_REPLACE(\'<html><head><title>title</title><body>body</body></htm>\',\n\'<.+?>\',\' \')\nAS strip_html;\n-> title body\n\nBackreferences to the subexpressions in the form \\N, where N is a number from\n1 to 9:\n\nSELECT REGEXP_REPLACE(\'James Bond\',\'^(.*) (.*)$\',\'\\\\2, \\\\1\') AS reorder_name;\n-> Bond, James\n\nCase insensitive and case sensitive matches:\n\nSELECT REGEXP_REPLACE(\'ABC\',\'b\',\'-\') AS case_insensitive;\n-> A-C\n\nSELECT REGEXP_REPLACE(\'ABC\' COLLATE utf8_bin,\'b\',\'-\') AS case_sensitive;\n-> ABC\n\nSELECT REGEXP_REPLACE(BINARY \'ABC\',\'b\',\'-\') AS binary_data;\n-> ABC\n\nOverwriting the collation case sensitivity using the (?i) and (?-i) PCRE flags.\n\nSELECT REGEXP_REPLACE(\'ABC\',\'(?-i)b\',\'-\') AS force_case_sensitive;\n-> ABC\n\nSELECT REGEXP_REPLACE(BINARY \'ABC\',\'(?i)b\',\'-\') AS force_case_insensitive;\n-> A-C\n\nURL: https://mariadb.com/kb/en/regexp_replace/','','https://mariadb.com/kb/en/regexp_replace/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (630,36,'REGEXP_SUBSTR','Syntax\n------\n\nREGEXP_SUBSTR(subject,pattern)\n\nDescription\n-----------\n\nReturns the part of the string subject that matches the regular expression\npattern, or an empty string if pattern was not found.\n\nThe function follows the case sensitivity rules of the effective collation.\nMatching is performed case insensitively for case insensitive collations, and\ncase sensitively for case sensitive collations and for binary data.\n\nThe collation case sensitivity can be overwritten using the (?i) and (?-i)\nPCRE flags.\n\nMariaDB uses the PCRE regular expression library for enhanced regular\nexpression performance, and REGEXP_SUBSTR was introduced as part of this\nenhancement.\n\nThe default_regex_flags variable addresses the remaining compatibilities\nbetween PCRE and the old regex library.\n\nExamples\n--------\n\nSELECT REGEXP_SUBSTR(\'ab12cd\',\'[0-9]+\');\n-> 12\n\nSELECT REGEXP_SUBSTR(\n \'See https://mariadb.org/en/foundation/ for details\',\n \'https?://[^/]*\');\n-> https://mariadb.org\n\nSELECT REGEXP_SUBSTR(\'ABC\',\'b\');\n-> B\n\nSELECT REGEXP_SUBSTR(\'ABC\' COLLATE utf8_bin,\'b\');\n->\n\nSELECT REGEXP_SUBSTR(BINARY\'ABC\',\'b\');\n->\n\nSELECT REGEXP_SUBSTR(\'ABC\',\'(?i)b\');\n-> B\n\nSELECT REGEXP_SUBSTR(\'ABC\' COLLATE utf8_bin,\'(?+i)b\');\n-> B\n\nURL: https://mariadb.com/kb/en/regexp_substr/','','https://mariadb.com/kb/en/regexp_substr/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (631,36,'ASCII','Syntax\n------\n\nASCII(str)\n\nDescription\n-----------\n\nReturns the numeric ASCII value of the leftmost character of the string\nargument. Returns 0 if the given string is empty and NULL if it is NULL.\n\nASCII() works for 8-bit characters.\n\nExamples\n--------\n\nSELECT ASCII(9);\n+----------+\n| ASCII(9) |\n+----------+\n| 57 |\n+----------+\n\nSELECT ASCII(\'9\');\n+------------+\n| ASCII(\'9\') |\n+------------+\n| 57 |\n+------------+\n\nSELECT ASCII(\'abc\');\n+--------------+\n| ASCII(\'abc\') |\n+--------------+\n| 97 |\n+--------------+\n\nURL: https://mariadb.com/kb/en/ascii/','','https://mariadb.com/kb/en/ascii/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (632,36,'BIN','Syntax\n------\n\nBIN(N)\n\nDescription\n-----------\n\nReturns a string representation of the binary value of the given longlong\n(that is, BIGINT) number. This is equivalent to CONV(N,10,2). The argument\nshould be positive. If it is a FLOAT, it will be truncated. Returns NULL if\nthe argument is NULL.\n\nExamples\n--------\n\nSELECT BIN(12);\n+---------+\n| BIN(12) |\n+---------+\n| 1100 |\n+---------+\n\nURL: https://mariadb.com/kb/en/bin/','','https://mariadb.com/kb/en/bin/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (633,36,'BINARY Operator','This page describes the BINARY operator. For details about the data type, see\nBinary Data Type.\n\nSyntax\n------\n\nBINARY\n\nDescription\n-----------\n\nThe BINARY operator casts the string following it to a binary string. This is\nan easy way to force a column comparison to be done byte by byte rather than\ncharacter by character. This causes the comparison to be case sensitive even\nif the column isn\'t defined as BINARY or BLOB.\n\nBINARY also causes trailing spaces to be significant.\n\nExamples\n--------\n\nSELECT \'a\' = \'A\';\n+-----------+\n| \'a\' = \'A\' |\n+-----------+\n| 1 |\n+-----------+\n\nSELECT BINARY \'a\' = \'A\';\n+------------------+\n| BINARY \'a\' = \'A\' |\n+------------------+\n| 0 |\n+------------------+\n\nSELECT \'a\' = \'a \';\n+------------+\n| \'a\' = \'a \' |\n+------------+\n| 1 |\n+------------+\n\nSELECT BINARY \'a\' = \'a \';\n+-------------------+\n| BINARY \'a\' = \'a \' |\n+-------------------+\n| 0 |\n+-------------------+\n\nURL: https://mariadb.com/kb/en/binary-operator/','','https://mariadb.com/kb/en/binary-operator/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (634,36,'BIT_LENGTH','Syntax\n------\n\nBIT_LENGTH(str)\n\nDescription\n-----------\n\nReturns the length of the given string argument in bits. If the argument is\nnot a string, it will be converted to string. If the argument is NULL, it\nreturns NULL.\n\nExamples\n--------\n\nSELECT BIT_LENGTH(\'text\');\n+--------------------+\n| BIT_LENGTH(\'text\') |\n+--------------------+\n| 32 |\n+--------------------+\n\nSELECT BIT_LENGTH(\'\');\n+----------------+\n| BIT_LENGTH(\'\') |\n+----------------+\n| 0 |\n+----------------+\n\nCompatibility\n-------------\n\nPostgreSQL and Sybase support BIT_LENGTH().\n\nURL: https://mariadb.com/kb/en/bit_length/','','https://mariadb.com/kb/en/bit_length/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (635,36,'CAST','Syntax\n------\n\nCAST(expr AS type)\n\nDescription\n-----------\n\nThe CAST() function takes a value of one type and produces a value of another\ntype, similar to the CONVERT() function.\n\nThe type can be one of the following values:\n\n* BINARY\n* CHAR\n* DATE\n* DATETIME\n* DECIMAL[(M[,D])]\n* DOUBLE\n* FLOAT (from MariaDB 10.4.5)\n* INTEGER\nShort for SIGNED INTEGER\n\n* SIGNED [INTEGER]\n* UNSIGNED [INTEGER]\n* TIME\n* VARCHAR (in Oracle mode, from MariaDB 10.3)\n\nThe main difference between CAST and CONVERT() is that CONVERT(expr,type) is\nODBC syntax while CAST(expr as type) and CONVERT(... USING ...) are SQL92\nsyntax.\n\nIn MariaDB 10.4 and later, you can use the CAST() function with the INTERVAL\nkeyword.\n\nUntil MariaDB 5.5.31, X\'HHHH\', the standard SQL syntax for binary string\nliterals, erroneously worked in the same way as 0xHHHH. In 5.5.31 it was\nintentionally changed to behave as a string in all contexts (and never as a\nnumber).\n\nThis introduced an incompatibility with previous versions of MariaDB, and all\nversions of MySQL (see the example below).\n\nExamples\n--------\n\nSimple casts:\n\nSELECT CAST(\"abc\" AS BINARY);\nSELECT CAST(\"1\" AS UNSIGNED INTEGER);\nSELECT CAST(123 AS CHAR CHARACTER SET utf8)\n\nNote that when one casts to CHAR without specifying the character set, the\ncollation_connection character set collation will be used. When used with CHAR\nCHARACTER SET, the default collation for that character set will be used.\n\nSELECT COLLATION(CAST(123 AS CHAR));\n+------------------------------+\n| COLLATION(CAST(123 AS CHAR)) |\n+------------------------------+\n| latin1_swedish_ci |\n+------------------------------+\n\nSELECT COLLATION(CAST(123 AS CHAR CHARACTER SET utf8));\n+-------------------------------------------------+\n| COLLATION(CAST(123 AS CHAR CHARACTER SET utf8)) |\n+-------------------------------------------------+\n| utf8_general_ci |\n+-------------------------------------------------+\n\nIf you also want to change the collation, you have to use the COLLATE operator:\n\nSELECT COLLATION(CAST(123 AS CHAR CHARACTER SET utf8) \n COLLATE utf8_unicode_ci);\n+-------------------------------------------------------------------------+\n| COLLATION(CAST(123 AS CHAR CHARACTER SET utf8) COLLATE utf8_unicode_ci) |\n+-------------------------------------------------------------------------+\n| utf8_unicode_ci |\n+-------------------------------------------------------------------------+\n\nUsing CAST() to order an ENUM field as a CHAR rather than the internal\nnumerical value:\n\nCREATE TABLE enum_list (enum_field enum(\'c\',\'a\',\'b\'));\n\nINSERT INTO enum_list (enum_field) \nVALUES(\'c\'),(\'a\'),(\'c\'),(\'b\');\n\nSELECT * FROM enum_list \nORDER BY enum_field;\n+------------+\n| enum_field |\n+------------+\n| c |\n| c |\n| a |\n| b |\n+------------+\n\nSELECT * FROM enum_list \nORDER BY CAST(enum_field AS CHAR);\n+------------+\n| enum_field |\n+------------+\n| a |\n| b |\n| c |\n| c |\n+------------+\n\nFrom MariaDB 5.5.31, the following will trigger warnings, since x\'aa\' and\n\'X\'aa\' no longer behave as a number. Previously, and in all versions of MySQL,\nno warnings are triggered since they did erroneously behave as a number:\n\nSELECT CAST(0xAA AS UNSIGNED), CAST(x\'aa\' AS UNSIGNED), CAST(X\'aa\' AS\nUNSIGNED);\n+------------------------+-------------------------+-------------------------+\n| CAST(0xAA AS UNSIGNED) | CAST(x\'aa\' AS UNSIGNED) | CAST(X\'aa\' AS UNSIGNED) |\n+------------------------+-------------------------+-------------------------+\n| 170 | 0 | 0 |\n+------------------------+-------------------------+-------------------------+\n1 row in set, 2 warnings (0.00 sec)\n\nWarning (Code 1292): Truncated incorrect INTEGER value: \'\\xAA\'\nWarning (Code 1292): Truncated incorrect INTEGER value: \'\\xAA\'\n\nCasting to intervals:\n\nSELECT CAST(2019-01-04 INTERVAL AS DAY_SECOND(2)) AS \"Cast\";\n\n+-------------+\n| Cast |\n+-------------+\n| 00:20:17.00 |\n+-------------+\n\nURL: https://mariadb.com/kb/en/cast/','','https://mariadb.com/kb/en/cast/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (636,36,'CHAR Function','Syntax\n------\n\nCHAR(N,... [USING charset_name])\n\nDescription\n-----------\n\nCHAR() interprets each argument as an INT and returns a string consisting of\nthe characters given by the code values of those integers. NULL values are\nskipped. By default, CHAR() returns a binary string. To produce a string in a\ngiven character set, use the optional USING clause:\n\nSELECT CHARSET(CHAR(0x65)), CHARSET(CHAR(0x65 USING utf8));\n+---------------------+--------------------------------+\n| CHARSET(CHAR(0x65)) | CHARSET(CHAR(0x65 USING utf8)) |\n+---------------------+--------------------------------+\n| binary | utf8 |\n+---------------------+--------------------------------+\n\nIf USING is given and the result string is illegal for the given character\nset, a warning is issued. Also, if strict SQL mode is enabled, the result from\nCHAR() becomes NULL.\n\nExamples\n--------\n\nSELECT CHAR(77,97,114,\'105\',97,\'68\',66);\n+----------------------------------+\n| CHAR(77,97,114,\'105\',97,\'68\',66) |\n+----------------------------------+\n| MariaDB |\n+----------------------------------+\n\nSELECT CHAR(77,77.3,\'77.3\');\n+----------------------+\n| CHAR(77,77.3,\'77.3\') |\n+----------------------+\n| MMM |\n+----------------------+\n1 row in set, 1 warning (0.00 sec)\n\nWarning (Code 1292): Truncated incorrect INTEGER value: \'77.3\'\n\nURL: https://mariadb.com/kb/en/char-function/','','https://mariadb.com/kb/en/char-function/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (637,36,'CHAR_LENGTH','Syntax\n------\n\nCHAR_LENGTH(str)\nCHARACTER_LENGTH(str)\n\nDescription\n-----------\n\nReturns the length of the given string argument, measured in characters. A\nmulti-byte character counts as a single character. This means that for a\nstring containing five two-byte characters, LENGTH() (or OCTET_LENGTH() in\nOracle mode) returns 10, whereas CHAR_LENGTH() returns 5. If the argument is\nNULL, it returns NULL.\n\nIf the argument is not a string value, it is converted into a string.\n\nIt is synonymous with the CHARACTER_LENGTH() function.\n\nExamples\n--------\n\nSELECT CHAR_LENGTH(\'MariaDB\');\n+------------------------+\n| CHAR_LENGTH(\'MariaDB\') |\n+------------------------+\n| 7 |\n+------------------------+\n\nWhen Oracle mode from MariaDB 10.3 is not set:\n\nSELECT CHAR_LENGTH(\'Ï€\'), LENGTH(\'Ï€\'), LENGTHB(\'Ï€\'), OCTET_LENGTH(\'Ï€\');\n+-------------------+--------------+---------------+--------------------+\n| CHAR_LENGTH(\'Ï€\') | LENGTH(\'Ï€\') | LENGTHB(\'Ï€\') | OCTET_LENGTH(\'Ï€\') |\n+-------------------+--------------+---------------+--------------------+\n| 1 | 2 | 2 | 2 |\n+-------------------+--------------+---------------+--------------------+\n\nIn Oracle mode from MariaDB 10.3:\n\nSELECT CHAR_LENGTH(\'Ï€\'), LENGTH(\'Ï€\'), LENGTHB(\'Ï€\'), OCTET_LENGTH(\'Ï€\');\n+-------------------+--------------+---------------+--------------------+\n| CHAR_LENGTH(\'Ï€\') | LENGTH(\'Ï€\') | LENGTHB(\'Ï€\') | OCTET_LENGTH(\'Ï€\') |\n+-------------------+--------------+---------------+--------------------+\n| 1 | 1 | 2 | 2 |\n+-------------------+--------------+---------------+--------------------+\n\nURL: https://mariadb.com/kb/en/char_length/','','https://mariadb.com/kb/en/char_length/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (638,36,'CHR','MariaDB starting with 10.3.1\n----------------------------\nThe CHR() function was introduced in MariaDB 10.3.1 to provide Oracle\ncompatibility\n\nSyntax\n------\n\nCHR(N)\n\nDescription\n-----------\n\nCHR() interprets each argument N as an integer and returns a VARCHAR(1) string\nconsisting of the character given by the code values of the integer. The\ncharacter set and collation of the string are set according to the values of\nthe character_set_database and collation_database system variables.\n\nCHR() is similar to the CHAR() function, but only accepts a single argument.\n\nCHR() is available in all sql_modes.\n\nExamples\n--------\n\nSELECT CHR(67);\n+---------+\n| CHR(67) |\n+---------+\n| C |\n+---------+\n\nSELECT CHR(\'67\');\n+-----------+\n| CHR(\'67\') |\n+-----------+\n| C |\n+-----------+\n\nSELECT CHR(\'C\');\n+----------+\n| CHR(\'C\') |\n+----------+\n| |\n+----------+\n1 row in set, 1 warning (0.000 sec)\n\nSHOW WARNINGS;\n+---------+------+----------------------------------------+\n| Level | Code | Message |\n+---------+------+----------------------------------------+\n| Warning | 1292 | Truncated incorrect INTEGER value: \'C\' |\n+---------+------+----------------------------------------+\n\nURL: https://mariadb.com/kb/en/chr/','','https://mariadb.com/kb/en/chr/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (639,36,'CONCAT','Syntax\n------\n\nCONCAT(str1,str2,...)\n\nDescription\n-----------\n\nReturns the string that results from concatenating the arguments. May have one\nor more arguments. If all arguments are non-binary strings, the result is a\nnon-binary string. If the arguments include any binary strings, the result is\na binary string. A numeric argument is converted to its equivalent binary\nstring form; if you want to avoid that, you can use an explicit type cast, as\nin this example:\n\nSELECT CONCAT(CAST(int_col AS CHAR), char_col);\n\nCONCAT() returns NULL if any argument is NULL.\n\nA NULL parameter hides all information contained in other parameters from the\nresult. Sometimes this is not desirable; to avoid this, you can:\n\n* Use the CONCAT_WS() function with an empty separator, because that function\nis NULL-safe.\n* Use IFNULL() to turn NULLs into empty strings.\n\nOracle Mode\n-----------\n\nMariaDB starting with 10.3\n--------------------------\nIn Oracle mode from MariaDB 10.3, CONCAT ignores NULL.\n\nExamples\n--------\n\nSELECT CONCAT(\'Ma\', \'ria\', \'DB\');\n+---------------------------+\n| CONCAT(\'Ma\', \'ria\', \'DB\') |\n+---------------------------+\n| MariaDB |\n+---------------------------+\n\nSELECT CONCAT(\'Ma\', \'ria\', NULL, \'DB\');\n+---------------------------------+\n| CONCAT(\'Ma\', \'ria\', NULL, \'DB\') |\n+---------------------------------+\n| NULL |\n+---------------------------------+\n\nSELECT CONCAT(42.0);\n+--------------+\n| CONCAT(42.0) |\n+--------------+\n| 42.0 |\n+--------------+\n\nUsing IFNULL() to handle NULLs:\n\nSELECT CONCAT(\'The value of @v is: \', IFNULL(@v, \'\'));\n+------------------------------------------------+\n| CONCAT(\'The value of @v is: \', IFNULL(@v, \'\')) |\n+------------------------------------------------+\n| The value of @v is: |\n+------------------------------------------------+\n\nIn Oracle mode, from MariaDB 10.3:\n\nSELECT CONCAT(\'Ma\', \'ria\', NULL, \'DB\');\n+---------------------------------+\n| CONCAT(\'Ma\', \'ria\', NULL, \'DB\') |\n+---------------------------------+\n| MariaDB |\n+---------------------------------+\n\nURL: https://mariadb.com/kb/en/concat/','','https://mariadb.com/kb/en/concat/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (640,36,'CONCAT_WS','Syntax\n------\n\nCONCAT_WS(separator,str1,str2,...)\n\nDescription\n-----------\n\nCONCAT_WS() stands for Concatenate With Separator and is a special form of\nCONCAT(). The first argument is the separator for the rest of the arguments.\nThe separator is added between the strings to be concatenated. The separator\ncan be a string, as can the rest of the arguments.\n\nIf the separator is NULL, the result is NULL; all other NULL values are\nskipped. This makes CONCAT_WS() suitable when you want to concatenate some\nvalues and avoid losing all information if one of them is NULL.\n\nExamples\n--------\n\nSELECT CONCAT_WS(\',\',\'First name\',\'Second name\',\'Last Name\');\n+-------------------------------------------------------+\n| CONCAT_WS(\',\',\'First name\',\'Second name\',\'Last Name\') |\n+-------------------------------------------------------+\n| First name,Second name,Last Name |\n+-------------------------------------------------------+\n\nSELECT CONCAT_WS(\'-\',\'Floor\',NULL,\'Room\');\n+------------------------------------+\n| CONCAT_WS(\'-\',\'Floor\',NULL,\'Room\') |\n+------------------------------------+\n| Floor-Room |\n+------------------------------------+\n\nIn some cases, remember to include a space in the separator string:\n\nSET @a = \'gnu\', @b = \'penguin\', @c = \'sea lion\';\nQuery OK, 0 rows affected (0.00 sec)\n\nSELECT CONCAT_WS(\', \', @a, @b, @c);\n+-----------------------------+\n| CONCAT_WS(\', \', @a, @b, @c) |\n+-----------------------------+\n| gnu, penguin, sea lion |\n+-----------------------------+\n\nUsing CONCAT_WS() to handle NULLs:\n\nSET @a = \'a\', @b = NULL, @c = \'c\';\n\nSELECT CONCAT_WS(\'\', @a, @b, @c);\n+---------------------------+\n| CONCAT_WS(\'\', @a, @b, @c) |\n+---------------------------+\n| ac |\n+---------------------------+\n\nURL: https://mariadb.com/kb/en/concat_ws/','','https://mariadb.com/kb/en/concat_ws/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (641,36,'CONVERT','Syntax\n------\n\nCONVERT(expr,type), CONVERT(expr USING transcoding_name)\n\nDescription\n-----------\n\nThe CONVERT() and CAST() functions take a value of one type and produce a\nvalue of another type.\n\nThe type can be one of the following values:\n\n* BINARY\n* CHAR\n* DATE\n* DATETIME\n* DECIMAL[(M[,D])]\n* DOUBLE\n* FLOAT (from MariaDB 10.4.5)\n* INTEGER\nShort for SIGNED INTEGER\n\n* SIGNED [INTEGER]\n* UNSIGNED [INTEGER]\n* TIME\n* VARCHAR (in Oracle mode, from MariaDB 10.3)\n\nNote that in MariaDB, INT and INTEGER are the same thing.\n\nBINARY produces a string with the BINARY data type. If the optional length is\ngiven, BINARY(N) causes the cast to use no more than N bytes of the argument.\nValues shorter than the given number in bytes are padded with 0x00 bytes to\nmake them equal the length value.\n\nCHAR(N) causes the cast to use no more than the number of characters given in\nthe argument.\n\nThe main difference between the CAST() and CONVERT() is that\nCONVERT(expr,type) is ODBC syntax while CAST(expr as type) and CONVERT(...\nUSING ...) are SQL92 syntax.\n\nCONVERT() with USING is used to convert data between different character sets.\nIn MariaDB, transcoding names are the same as the corresponding character set\nnames. For example, this statement converts the string \'abc\' in the default\ncharacter set to the corresponding string in the utf8 character set:\n\nSELECT CONVERT(\'abc\' USING utf8);\n\nExamples\n--------\n\nSELECT enum_col FROM tbl_name \nORDER BY CAST(enum_col AS CHAR);\n\nConverting a BINARY to string to permit the LOWER function to work:\n\nSET @x = \'AardVark\';\n\nSET @x = BINARY \'AardVark\';\n\nSELECT LOWER(@x), LOWER(CONVERT (@x USING latin1));\n+-----------+----------------------------------+\n| LOWER(@x) | LOWER(CONVERT (@x USING latin1)) |\n+-----------+----------------------------------+\n| AardVark | aardvark |\n+-----------+----------------------------------+\n\nURL: https://mariadb.com/kb/en/convert/','','https://mariadb.com/kb/en/convert/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (642,36,'ELT','Syntax\n------\n\nELT(N, str1[, str2, str3,...])\n\nDescription\n-----------\n\nTakes a numeric argument and a series of string arguments. Returns the string\nthat corresponds to the given numeric position. For instance, it returns str1\nif N is 1, str2 if N is 2, and so on. If the numeric argument is a FLOAT,\nMariaDB rounds it to the nearest INTEGER. If the numeric argument is less than\n1, greater than the total number of arguments, or not a number, ELT() returns\nNULL. It must have at least two arguments.\n\nIt is complementary to the FIELD() function.\n\nExamples\n--------\n\nSELECT ELT(1, \'ej\', \'Heja\', \'hej\', \'foo\');\n+------------------------------------+\n| ELT(1, \'ej\', \'Heja\', \'hej\', \'foo\') |\n+------------------------------------+\n| ej |\n+------------------------------------+\n\nSELECT ELT(4, \'ej\', \'Heja\', \'hej\', \'foo\');\n+------------------------------------+\n| ELT(4, \'ej\', \'Heja\', \'hej\', \'foo\') |\n+------------------------------------+\n| foo |\n+------------------------------------+\n\nURL: https://mariadb.com/kb/en/elt/','','https://mariadb.com/kb/en/elt/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (643,36,'EXPORT_SET','Syntax\n------\n\nEXPORT_SET(bits, on, off[, separator[, number_of_bits]])\n\nDescription\n-----------\n\nTakes a minimum of three arguments. Returns a string where each bit in the\ngiven bits argument is returned, with the string values given for on and off.\n\nBits are examined from right to left, (from low-order to high-order bits).\nStrings are added to the result from left to right, separated by a separator\nstring (defaults as \',\'). You can optionally limit the number of bits the\nEXPORT_SET() function examines using the number_of_bits option.\n\nIf any of the arguments are set as NULL, the function returns NULL.\n\nExamples\n--------\n\nSELECT EXPORT_SET(5,\'Y\',\'N\',\',\',4);\n+-----------------------------+\n| EXPORT_SET(5,\'Y\',\'N\',\',\',4) |\n+-----------------------------+\n| Y,N,Y,N |\n+-----------------------------+\n\nSELECT EXPORT_SET(6,\'1\',\'0\',\',\',10);\n+------------------------------+\n| EXPORT_SET(6,\'1\',\'0\',\',\',10) |\n+------------------------------+\n| 0,1,1,0,0,0,0,0,0,0 |\n+------------------------------+\n\nURL: https://mariadb.com/kb/en/export_set/','','https://mariadb.com/kb/en/export_set/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (644,36,'EXTRACTVALUE','Syntax\n------\n\nEXTRACTVALUE(xml_frag, xpath_expr)\n\nDescription\n-----------\n\nThe EXTRACTVALUE() function takes two string arguments: a fragment of XML\nmarkup and an XPath expression, (also known as a locator). It returns the text\n(That is, CDDATA), of the first text node which is a child of the element or\nelements matching the XPath expression.\n\nIn cases where a valid XPath expression does not match any text nodes in a\nvalid XML fragment, (including the implicit /text() expression), the\nEXTRACTVALUE() function returns an empty string.\n\nInvalid Arguments\n-----------------\n\nWhen either the XML fragment or the XPath expression is NULL, the\nEXTRACTVALUE() function returns NULL. When the XML fragment is invalid, it\nraises a warning Code 1525:\n\nWarning (Code 1525): Incorrect XML value: \'parse error at line 1 pos 11:\nunexpected END-OF-INPUT\'\n\nWhen the XPath value is invalid, it generates an Error 1105:\n\nERROR 1105 (HY000): XPATH syntax error: \')\'\n\nExplicit text() Expressions\n---------------------------\n\nThis function is the equivalent of performing a match using the XPath\nexpression after appending /text(). In other words:\n\nSELECT\n EXTRACTVALUE(\'<cases><case>example</case></cases>\', \'/cases/case\')\n AS \'Base Example\',\n EXTRACTVALUE(\'<cases><case>example</case></cases>\', \'/cases/case/text()\')\n AS \'text() Example\';\n+--------------+----------------+\n| Base Example | text() Example |\n+--------------+----------------+\n| example | example |\n+--------------+----------------+\n\nCount Matches\n-------------\n\nWhen EXTRACTVALUE() returns multiple matches, it returns the content of the\nfirst child text node of each matching element, in the matched order, as a\nsingle, space-delimited string.\n\nBy design, the EXTRACTVALUE() function makes no distinction between a match on\nan empty element and no match at all. If you need to determine whether no\nmatching element was found in the XML fragment or if an element was found that\ncontained no child text nodes, use the XPath count() function.\n\nFor instance, when looking for a value that exists, but contains no child text\nnodes, you would get a count of the number of matching instances:\n\nSELECT\n EXTRACTVALUE(\'<cases><case/></cases>\', \'/cases/case\')\n AS \'Empty Example\',\n EXTRACTVALUE(\'<cases><case/></cases>\', \'count(/cases/case)\')\n AS \'count() Example\';\n+---------------+-----------------+\n| Empty Example | count() Example |\n+---------------+-----------------+\n| | 1 |\n+---------------+-----------------+\n\nAlternatively, when looking for a value that doesn\'t exist, count() returns 0.\n\nSELECT\n EXTRACTVALUE(\'<cases><case/></cases>\', \'/cases/person\')\n AS \'No Match Example\',\n EXTRACTVALUE(\'<cases><case/></cases>\', \'count(/cases/person)\')\n AS \'count() Example\';\n+------------------+-----------------+\n| No Match Example | count() Example |\n+------------------+-----------------+\n| | 0|\n+------------------+-----------------+\n\nMatches\n-------\n\nImportant: The EXTRACTVALUE() function only returns CDDATA. It does not return\ntags that the element might contain or the text that these child elements\ncontain.\n\nSELECT\n\nEXTRACTVALUE(\'<cases><case>Person<email>x@example.com</email></case></cases>\',\n\'/cases\')\n AS Case;\n+--------+\n| Case |\n+--------+\n| Person |\n+--------+\n\nNote, in the above example, while the XPath expression matches to the parent\n<case> instance, it does not return the contained <email> tag or its content.\n\nExamples\n--------\n\nSELECT\n ExtractValue(\'<a>ccc<b>ddd</b></a>\', \'/a\') AS val1,\n ExtractValue(\'<a>ccc<b>ddd</b></a>\', \'/a/b\') AS val2,\n ExtractValue(\'<a>ccc<b>ddd</b></a>\', \'//b\') AS val3,\n ExtractValue(\'<a>ccc<b>ddd</b></a>\', \'/b\') AS val4,\n ExtractValue(\'<a>ccc<b>ddd</b><b>eee</b></a>\', \'//b\') AS val5;\n+------+------+------+------+---------+\n| val1 | val2 | val3 | val4 | val5 |\n+------+------+------+------+---------+\n| ccc | ddd | ddd | | ddd eee |\n+------+------+------+------+---------+\n\nURL: https://mariadb.com/kb/en/extractvalue/','','https://mariadb.com/kb/en/extractvalue/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (645,36,'FIELD','Syntax\n------\n\nFIELD(pattern, str1[,str2,...])\n\nDescription\n-----------\n\nReturns the index position of the string or number matching the given pattern.\nReturns 0 in the event that none of the arguments match the pattern. Raises an\nError 1582 if not given at least two arguments.\n\nWhen all arguments given to the FIELD() function are strings, they are treated\nas case-insensitive. When all the arguments are numbers, they are treated as\nnumbers. Otherwise, they are treated as doubles.\n\nIf the given pattern occurs more than once, the FIELD() function only returns\nthe index of the first instance. If the given pattern is NULL, the function\nreturns 0, as a NULL pattern always fails to match.\n\nThis function is complementary to the ELT() function.\n\nExamples\n--------\n\nSELECT FIELD(\'ej\', \'Hej\', \'ej\', \'Heja\', \'hej\', \'foo\') \n AS \'Field Results\';\n+---------------+\n| Field Results | \n+---------------+\n| 2 |\n+---------------+\n\nSELECT FIELD(\'fo\', \'Hej\', \'ej\', \'Heja\', \'hej\', \'foo\')\n AS \'Field Results\';\n+---------------+\n| Field Results | \n+---------------+\n| 0 |\n+---------------+\n\nSELECT FIELD(1, 2, 3, 4, 5, 1) AS \'Field Results\';\n+---------------+\n| Field Results |\n+---------------+\n| 5 |\n+---------------+\n\nSELECT FIELD(NULL, 2, 3) AS \'Field Results\';\n+---------------+\n| Field Results |\n+---------------+\n| 0 |\n+---------------+\n\nSELECT FIELD(\'fail\') AS \'Field Results\';\nError 1582 (42000): Incorrect parameter count in call\nto native function \'field\'\n\nURL: https://mariadb.com/kb/en/field/','','https://mariadb.com/kb/en/field/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (646,36,'FIND_IN_SET','Syntax\n------\n\nFIND_IN_SET(pattern, strlist)\n\nDescription\n-----------\n\nReturns the index position where the given pattern occurs in a string list.\nThe first argument is the pattern you want to search for. The second argument\nis a string containing comma-separated variables. If the second argument is of\nthe SET data-type, the function is optimized to use bit arithmetic.\n\nIf the pattern does not occur in the string list or if the string list is an\nempty string, the function returns 0. If either argument is NULL, the function\nreturns NULL. The function does not return the correct result if the pattern\ncontains a comma (\",\") character.\n\nExamples\n--------\n\nSELECT FIND_IN_SET(\'b\',\'a,b,c,d\') AS \"Found Results\";\n+---------------+\n| Found Results |\n+---------------+\n| 2 |\n+---------------+\n\nURL: https://mariadb.com/kb/en/find_in_set/','','https://mariadb.com/kb/en/find_in_set/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (647,36,'FORMAT','Syntax\n------\n\nFORMAT(num, decimal_position[, locale])\n\nDescription\n-----------\n\nFormats the given number for display as a string, adding separators to\nappropriate position and rounding the results to the given decimal position.\nFor instance, it would format 15233.345 to 15,233.35.\n\nIf the given decimal position is 0, it rounds to return no decimal point or\nfractional part. You can optionally specify a locale value to format numbers\nto the pattern appropriate for the given region.\n\nExamples\n--------\n\nSELECT FORMAT(1234567890.09876543210, 4) AS \'Format\';\n+--------------------+\n| Format |\n+--------------------+\n| 1,234,567,890.0988 |\n+--------------------+\n\nSELECT FORMAT(1234567.89, 4) AS \'Format\';\n+----------------+\n| Format |\n+----------------+\n| 1,234,567.8900 |\n+----------------+\n\nSELECT FORMAT(1234567.89, 0) AS \'Format\';\n+-----------+\n| Format |\n+-----------+\n| 1,234,568 |\n+-----------+\n\nSELECT FORMAT(123456789,2,\'rm_CH\') AS \'Format\';\n+----------------+\n| Format |\n+----------------+\n| 123\'456\'789,00 |\n+----------------+\n\nURL: https://mariadb.com/kb/en/format/','','https://mariadb.com/kb/en/format/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (648,36,'FROM_BASE64','Syntax\n------\n\nFROM_BASE64(str)\n\nDescription\n-----------\n\nDecodes the given base-64 encode string, returning the result as a binary\nstring. Returns NULL if the given string is NULL or if it\'s invalid.\n\nIt is the reverse of the TO_BASE64 function.\n\nThere are numerous methods to base-64 encode a string. MariaDB uses the\nfollowing:\n\n* It encodes alphabet value 64 as \'+\'.\n* It encodes alphabet value 63 as \'/\'.\n* It codes output in groups of four printable characters. Each three byte of\ndata encoded uses four characters. If the final group is incomplete, it pads\nthe difference with the \'=\' character.\n* It divides long output, adding a new line very 76 characters.\n* In decoding, it recognizes and ignores newlines, carriage returns, tabs and\nspace whitespace characters.\n\nSELECT TO_BASE64(\'Maria\') AS \'Input\';\n+-----------+\n| Input |\n+-----------+\n| TWFyaWE= |\n+-----------+\n\nSELECT FROM_BASE64(\'TWFyaWE=\') AS \'Output\';\n+--------+\n| Output |\n+--------+\n| Maria |\n+--------+\n\nURL: https://mariadb.com/kb/en/from_base64/','','https://mariadb.com/kb/en/from_base64/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (649,36,'HEX','Syntax\n------\n\nHEX(N_or_S)\n\nDescription\n-----------\n\nIf N_or_S is a number, returns a string representation of the hexadecimal\nvalue of N, where N is a longlong (BIGINT) number. This is equivalent to\nCONV(N,10,16).\n\nIf N_or_S is a string, returns a hexadecimal string representation of N_or_S\nwhere each byte of each character in N_or_S is converted to two hexadecimal\ndigits. If N_or_S is NULL, returns NULL. The inverse of this operation is\nperformed by the UNHEX() function.\n\nMariaDB starting with 10.5.0\n----------------------------\nHEX() with an INET6 argument returns a hexadecimal representation of the\nunderlying 16-byte binary string.\n\nExamples\n--------\n\nSELECT HEX(255);\n+----------+\n| HEX(255) |\n+----------+\n| FF |\n+----------+\n\nSELECT 0x4D617269614442;\n+------------------+\n| 0x4D617269614442 |\n+------------------+\n| MariaDB |\n+------------------+\n\nSELECT HEX(\'MariaDB\');\n+----------------+\n| HEX(\'MariaDB\') |\n+----------------+\n| 4D617269614442 |\n+----------------+\n\nFrom MariaDB 10.5.0:\n\nSELECT HEX(CAST(\'2001:db8::ff00:42:8329\' AS INET6));\n+----------------------------------------------+\n| HEX(CAST(\'2001:db8::ff00:42:8329\' AS INET6)) |\n+----------------------------------------------+\n| 20010DB8000000000000FF0000428329 |\n+----------------------------------------------+\n\nURL: https://mariadb.com/kb/en/hex/','','https://mariadb.com/kb/en/hex/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (650,36,'INSTR','Syntax\n------\n\nINSTR(str,substr)\n\nDescription\n-----------\n\nReturns the position of the first occurrence of substring substr in string\nstr. This is the same as the two-argument form of LOCATE(), except that the\norder of the arguments is reversed.\n\nINSTR() performs a case-insensitive search.\n\nIf any argument is NULL, returns NULL.\n\nExamples\n--------\n\nSELECT INSTR(\'foobarbar\', \'bar\');\n+---------------------------+\n| INSTR(\'foobarbar\', \'bar\') |\n+---------------------------+\n| 4 |\n+---------------------------+\n\nSELECT INSTR(\'My\', \'Maria\');\n+----------------------+\n| INSTR(\'My\', \'Maria\') |\n+----------------------+\n| 0 |\n+----------------------+\n\nURL: https://mariadb.com/kb/en/instr/','','https://mariadb.com/kb/en/instr/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (651,36,'LCASE','Syntax\n------\n\nLCASE(str)\n\nDescription\n-----------\n\nLCASE() is a synonym for LOWER().\n\nURL: https://mariadb.com/kb/en/lcase/','','https://mariadb.com/kb/en/lcase/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (652,36,'LEFT','Syntax\n------\n\nLEFT(str,len)\n\nDescription\n-----------\n\nReturns the leftmost len characters from the string str, or NULL if any\nargument is NULL.\n\nExamples\n--------\n\nSELECT LEFT(\'MariaDB\', 5);\n+--------------------+\n| LEFT(\'MariaDB\', 5) |\n+--------------------+\n| Maria |\n+--------------------+\n\nURL: https://mariadb.com/kb/en/left/','','https://mariadb.com/kb/en/left/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (653,36,'INSERT Function','Syntax\n------\n\nINSERT(str,pos,len,newstr)\n\nDescription\n-----------\n\nReturns the string str, with the substring beginning at position pos and len\ncharacters long replaced by the string newstr. Returns the original string if\npos is not within the length of the string. Replaces the rest of the string\nfrom position pos if len is not within the length of the rest of the string.\nReturns NULL if any argument is NULL.\n\nExamples\n--------\n\nSELECT INSERT(\'Quadratic\', 3, 4, \'What\');\n+-----------------------------------+\n| INSERT(\'Quadratic\', 3, 4, \'What\') |\n+-----------------------------------+\n| QuWhattic |\n+-----------------------------------+\n\nSELECT INSERT(\'Quadratic\', -1, 4, \'What\');\n+------------------------------------+\n| INSERT(\'Quadratic\', -1, 4, \'What\') |\n+------------------------------------+\n| Quadratic |\n+------------------------------------+\n\nSELECT INSERT(\'Quadratic\', 3, 100, \'What\');\n+-------------------------------------+\n| INSERT(\'Quadratic\', 3, 100, \'What\') |\n+-------------------------------------+\n| QuWhat |\n+-------------------------------------+\n\nURL: https://mariadb.com/kb/en/insert-function/','','https://mariadb.com/kb/en/insert-function/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (654,36,'LENGTH','Syntax\n------\n\nLENGTH(str)\n\nDescription\n-----------\n\nReturns the length of the string str.\n\nIn the default mode, when Oracle mode from MariaDB 10.3 is not set, the length\nis measured in bytes. In this case, a multi-byte character counts as multiple\nbytes. This means that for a string containing five two-byte characters,\nLENGTH() returns 10, whereas CHAR_LENGTH() returns 5.\n\nWhen running Oracle mode from MariaDB 10.3, the length is measured in\ncharacters, and LENGTH is a synonym for CHAR_LENGTH().\n\nIf str is not a string value, it is converted into a string. If str is NULL,\nthe function returns NULL.\n\nExamples\n--------\n\nSELECT LENGTH(\'MariaDB\');\n+-------------------+\n| LENGTH(\'MariaDB\') |\n+-------------------+\n| 7 |\n+-------------------+\n\nWhen Oracle mode from MariaDB 10.3 is not set:\n\nSELECT CHAR_LENGTH(\'Ï€\'), LENGTH(\'Ï€\'), LENGTHB(\'Ï€\'), OCTET_LENGTH(\'Ï€\');\n+-------------------+--------------+---------------+--------------------+\n| CHAR_LENGTH(\'Ï€\') | LENGTH(\'Ï€\') | LENGTHB(\'Ï€\') | OCTET_LENGTH(\'Ï€\') |\n+-------------------+--------------+---------------+--------------------+\n| 1 | 2 | 2 | 2 |\n+-------------------+--------------+---------------+--------------------+\n\nIn Oracle mode from MariaDB 10.3:\n\nSELECT CHAR_LENGTH(\'Ï€\'), LENGTH(\'Ï€\'), LENGTHB(\'Ï€\'), OCTET_LENGTH(\'Ï€\');\n+-------------------+--------------+---------------+--------------------+\n| CHAR_LENGTH(\'Ï€\') | LENGTH(\'Ï€\') | LENGTHB(\'Ï€\') | OCTET_LENGTH(\'Ï€\') |\n+-------------------+--------------+---------------+--------------------+\n| 1 | 1 | 2 | 2 |\n+-------------------+--------------+---------------+--------------------+\n\nURL: https://mariadb.com/kb/en/length/','','https://mariadb.com/kb/en/length/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (655,36,'LENGTHB','MariaDB starting with 10.3.1\n----------------------------\nIntroduced in MariaDB 10.3.1 as part of the Oracle compatibility enhancements.\n\nSyntax\n------\n\nLENGTHB(str)\n\nDescription\n-----------\n\nLENGTHB() returns the length of the given string, in bytes. When Oracle mode\nis not set, this is a synonym for LENGTH.\n\nA multi-byte character counts as multiple bytes. This means that for a string\ncontaining five two-byte characters, LENGTHB() returns 10, whereas\nCHAR_LENGTH() returns 5.\n\nIf str is not a string value, it is converted into a string. If str is NULL,\nthe function returns NULL.\n\nExamples\n--------\n\nWhen Oracle mode from MariaDB 10.3 is not set:\n\nSELECT CHAR_LENGTH(\'Ï€\'), LENGTH(\'Ï€\'), LENGTHB(\'Ï€\'), OCTET_LENGTH(\'Ï€\');\n+-------------------+--------------+---------------+--------------------+\n| CHAR_LENGTH(\'Ï€\') | LENGTH(\'Ï€\') | LENGTHB(\'Ï€\') | OCTET_LENGTH(\'Ï€\') |\n+-------------------+--------------+---------------+--------------------+\n| 1 | 2 | 2 | 2 |\n+-------------------+--------------+---------------+--------------------+\n\nIn Oracle mode from MariaDB 10.3:\n\nSELECT CHAR_LENGTH(\'Ï€\'), LENGTH(\'Ï€\'), LENGTHB(\'Ï€\'), OCTET_LENGTH(\'Ï€\');\n+-------------------+--------------+---------------+--------------------+\n| CHAR_LENGTH(\'Ï€\') | LENGTH(\'Ï€\') | LENGTHB(\'Ï€\') | OCTET_LENGTH(\'Ï€\') |\n+-------------------+--------------+---------------+--------------------+\n| 1 | 1 | 2 | 2 |\n+-------------------+--------------+---------------+--------------------+\n\nURL: https://mariadb.com/kb/en/lengthb/','','https://mariadb.com/kb/en/lengthb/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (656,36,'LIKE','Syntax\n------\n\nexpr LIKE pat [ESCAPE \'escape_char\']\nexpr NOT LIKE pat [ESCAPE \'escape_char\']\n\nDescription\n-----------\n\nTests whether expr matches the pattern pat. Returns either 1 (TRUE) or 0\n(FALSE). Both expr and pat may be any valid expression and are evaluated to\nstrings. Patterns may use the following wildcard characters:\n\n* % matches any number of characters, including zero.\n* _ matches any single character.\n\nUse NOT LIKE to test if a string does not match a pattern. This is equivalent\nto using the NOT operator on the entire LIKE expression.\n\nIf either the expression or the pattern is NULL, the result is NULL.\n\nLIKE performs case-insensitive substring matches if the collation for the\nexpression and pattern is case-insensitive. For case-sensitive matches,\ndeclare either argument to use a binary collation using COLLATE, or coerce\neither of them to a BINARY string using CAST. Use SHOW COLLATION to get a list\nof available collations. Collations ending in _bin are case-sensitive.\n\nNumeric arguments are coerced to binary strings.\n\nThe _ wildcard matches a single character, not byte. It will only match a\nmulti-byte character if it is valid in the expression\'s character set. For\nexample, _ will match _utf8\"€\", but it will not match _latin1\"€\" because the\nEuro sign is not a valid latin1 character. If necessary, use CONVERT to use\nthe expression in a different character set.\n\nIf you need to match the characters _ or %, you must escape them. By default,\nyou can prefix the wildcard characters the backslash character \\ to escape\nthem. The backslash is used both to encode special characters like newlines\nwhen a string is parsed as well as to escape wildcards in a pattern after\nparsing. Thus, to match an actual backslash, you sometimes need to\ndouble-escape it as \"\\\\\\\\\".\n\nTo avoid difficulties with the backslash character, you can change the\nwildcard escape character using ESCAPE in a LIKE expression. The argument to\nESCAPE must be a single-character string.\n\nExamples\n--------\n\nSelect the days that begin with \"T\":\n\nCREATE TABLE t1 (d VARCHAR(16));\nINSERT INTO t1 VALUES \n (\"Monday\"), (\"Tuesday\"), (\"Wednesday\"),\n (\"Thursday\"), (\"Friday\"), (\"Saturday\"), (\"Sunday\");\nSELECT * FROM t1 WHERE d LIKE \"T%\";\n\nSELECT * FROM t1 WHERE d LIKE \"T%\";\n+----------+\n| d |\n+----------+\n| Tuesday |\n| Thursday |\n+----------+\n\nSelect the days that contain the substring \"es\":\n\nSELECT * FROM t1 WHERE d LIKE \"%es%\";\n\nSELECT * FROM t1 WHERE d LIKE \"%es%\";\n+-----------+\n| d |\n+-----------+\n| Tuesday |\n| Wednesday |\n+-----------+\n\nSelect the six-character day names:\n\nSELECT * FROM t1 WHERE d like \"___day\";\n\nSELECT * FROM t1 WHERE d like \"___day\";\n+---------+\n| d |\n+---------+\n| Monday |\n| Friday |\n| Sunday |\n+---------+\n\nWith the default collations, LIKE is case-insensitive:\n\nSELECT * FROM t1 where d like \"t%\";\n\nSELECT * FROM t1 where d like \"t%\";\n+----------+\n| d |\n+----------+\n| Tuesday |\n| Thursday |\n+----------+\n\nUse COLLATE to specify a binary collation, forcing case-sensitive matches:\n\nSELECT * FROM t1 WHERE d like \"t%\" COLLATE latin1_bin;\n\nSELECT * FROM t1 WHERE d like \"t%\" COLLATE latin1_bin;\nEmpty set (0.00 sec)\n\nYou can include functions and operators in the expression to match. Select\ndates based on their day name:\n\nCREATE TABLE t2 (d DATETIME);\nINSERT INTO t2 VALUES\n (\"2007-01-30 21:31:07\"),\n (\"1983-10-15 06:42:51\"),\n (\"2011-04-21 12:34:56\"),\n (\"2011-10-30 06:31:41\"),\n (\"2011-01-30 14:03:25\"),\n (\"2004-10-07 11:19:34\");\nSELECT * FROM t2 WHERE DAYNAME(d) LIKE \"T%\";\n\nSELECT * FROM t2 WHERE DAYNAME(d) LIKE \"T%\";\n+------------------+\n| d |\n+------------------+\n| 2007-01-30 21:31 |\n| 2011-04-21 12:34 |\n| 2004-10-07 11:19 |\n+------------------+\n3 rows in set, 7 warnings (0.00 sec)\n\nOptimizing LIKE\n---------------\n\n* MariaDB can use indexes for LIKE on string columns in the case where the\nLIKE doesn\'t start with % or _.\n* Starting from MariaDB 10.0, one can set the\noptimizer_use_condition_selectivity variable to 5. If this is done, then the\noptimizer will read optimizer_selectivity_sampling_limit rows to calculate the\nselectivity of the LIKE expression before starting to calculate the query\nplan. This can help speed up some LIKE queries by providing the optimizer with\nmore information about your data.\n\nURL: https://mariadb.com/kb/en/like/','','https://mariadb.com/kb/en/like/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (657,36,'LOCATE','Syntax\n------\n\nLOCATE(substr,str), LOCATE(substr,str,pos)\n\nDescription\n-----------\n\nThe first syntax returns the position of the first occurrence of substring\nsubstr in string str. The second syntax returns the position of the first\noccurrence of substring substr in string str, starting at position pos.\nReturns 0 if substr is not in str.\n\nLOCATE() performs a case-insensitive search.\n\nIf any argument is NULL, returns NULL.\n\nINSTR() is the same as the two-argument form of LOCATE(), except that the\norder of the arguments is reversed.\n\nExamples\n--------\n\nSELECT LOCATE(\'bar\', \'foobarbar\');\n+----------------------------+\n| LOCATE(\'bar\', \'foobarbar\') |\n+----------------------------+\n| 4 |\n+----------------------------+\n\nSELECT LOCATE(\'My\', \'Maria\');\n+-----------------------+\n| LOCATE(\'My\', \'Maria\') |\n+-----------------------+\n| 0 |\n+-----------------------+\n\nSELECT LOCATE(\'bar\', \'foobarbar\', 5);\n+-------------------------------+\n| LOCATE(\'bar\', \'foobarbar\', 5) |\n+-------------------------------+\n| 7 |\n+-------------------------------+\n\nURL: https://mariadb.com/kb/en/locate/','','https://mariadb.com/kb/en/locate/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (658,36,'LOWER','Syntax\n------\n\nLOWER(str)\n\nDescription\n-----------\n\nReturns the string str with all characters changed to lowercase according to\nthe current character set mapping. The default is latin1 (cp1252 West\nEuropean).\n\nExamples\n--------\n\nSELECT LOWER(\'QUADRATICALLY\');\n+------------------------+\n| LOWER(\'QUADRATICALLY\') |\n+------------------------+\n| quadratically |\n+------------------------+\n\nLOWER() (and UPPER()) are ineffective when applied to binary strings (BINARY,\nVARBINARY, BLOB). To perform lettercase conversion, CONVERT the string to a\nnon-binary string:\n\nSET @str = BINARY \'North Carolina\';\n\nSELECT LOWER(@str), LOWER(CONVERT(@str USING latin1));\n+----------------+-----------------------------------+\n| LOWER(@str) | LOWER(CONVERT(@str USING latin1)) |\n+----------------+-----------------------------------+\n| North Carolina | north carolina |\n+----------------+-----------------------------------+\n\nURL: https://mariadb.com/kb/en/lower/','','https://mariadb.com/kb/en/lower/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (659,36,'LPAD','Syntax\n------\n\nLPAD(str, len [,padstr])\n\nDescription\n-----------\n\nReturns the string str, left-padded with the string padstr to a length of len\ncharacters. If str is longer than len, the return value is shortened to len\ncharacters. If padstr is omitted, the LPAD function pads spaces.\n\nPrior to MariaDB 10.3.1, the padstr parameter was mandatory.\n\nReturns NULL if given a NULL argument. If the result is empty (zero length),\nreturns either an empty string or, from MariaDB 10.3.6 with SQL_MODE=Oracle,\nNULL.\n\nThe Oracle mode version of the function can be accessed outside of Oracle mode\nby using LPAD_ORACLE as the function name.\n\nExamples\n--------\n\nSELECT LPAD(\'hello\',10,\'.\');\n+----------------------+\n| LPAD(\'hello\',10,\'.\') |\n+----------------------+\n| .....hello |\n+----------------------+\n\nSELECT LPAD(\'hello\',2,\'.\');\n+---------------------+\n| LPAD(\'hello\',2,\'.\') |\n+---------------------+\n| he |\n+---------------------+\n\nFrom MariaDB 10.3.1, with the pad string defaulting to space.\n\nSELECT LPAD(\'hello\',10);\n+------------------+\n| LPAD(\'hello\',10) |\n+------------------+\n| hello |\n+------------------+\n\nOracle mode version from MariaDB 10.3.6:\n\nSELECT LPAD(\'\',0),LPAD_ORACLE(\'\',0);\n+------------+-------------------+\n| LPAD(\'\',0) | LPAD_ORACLE(\'\',0) |\n+------------+-------------------+\n| | NULL |\n+------------+-------------------+\n\nURL: https://mariadb.com/kb/en/lpad/','','https://mariadb.com/kb/en/lpad/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (660,36,'LTRIM','Syntax\n------\n\nLTRIM(str)\n\nDescription\n-----------\n\nReturns the string str with leading space characters removed.\n\nReturns NULL if given a NULL argument. If the result is empty, returns either\nan empty string, or, from MariaDB 10.3.6 with SQL_MODE=Oracle, NULL.\n\nThe Oracle mode version of the function can be accessed outside of Oracle mode\nby using LTRIM_ORACLE as the function name.\n\nExamples\n--------\n\nSELECT QUOTE(LTRIM(\' MariaDB \'));\n+-------------------------------+\n| QUOTE(LTRIM(\' MariaDB \')) |\n+-------------------------------+\n| \'MariaDB \' |\n+-------------------------------+\n\nOracle mode version from MariaDB 10.3.6:\n\nSELECT LTRIM(\'\'),LTRIM_ORACLE(\'\');\n+-----------+------------------+\n| LTRIM(\'\') | LTRIM_ORACLE(\'\') |\n+-----------+------------------+\n| | NULL |\n+-----------+------------------+\n\nURL: https://mariadb.com/kb/en/ltrim/','','https://mariadb.com/kb/en/ltrim/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (661,36,'MAKE_SET','Syntax\n------\n\nMAKE_SET(bits,str1,str2,...)\n\nDescription\n-----------\n\nReturns a set value (a string containing substrings separated by \",\"\ncharacters) consisting of the strings that have the corresponding bit in bits\nset. str1 corresponds to bit 0, str2 to bit 1, and so on. NULL values in str1,\nstr2, ... are not appended to the result.\n\nExamples\n--------\n\nSELECT MAKE_SET(1,\'a\',\'b\',\'c\');\n+-------------------------+\n| MAKE_SET(1,\'a\',\'b\',\'c\') |\n+-------------------------+\n| a |\n+-------------------------+\n\nSELECT MAKE_SET(1 | 4,\'hello\',\'nice\',\'world\');\n+----------------------------------------+\n| MAKE_SET(1 | 4,\'hello\',\'nice\',\'world\') |\n+----------------------------------------+\n| hello,world |\n+----------------------------------------+\n\nSELECT MAKE_SET(1 | 4,\'hello\',\'nice\',NULL,\'world\');\n+---------------------------------------------+\n| MAKE_SET(1 | 4,\'hello\',\'nice\',NULL,\'world\') |\n+---------------------------------------------+\n| hello |\n+---------------------------------------------+\n\nSELECT QUOTE(MAKE_SET(0,\'a\',\'b\',\'c\'));\n+--------------------------------+\n| QUOTE(MAKE_SET(0,\'a\',\'b\',\'c\')) |\n+--------------------------------+\n| \'\' |\n+--------------------------------+\n\nURL: https://mariadb.com/kb/en/make_set/','','https://mariadb.com/kb/en/make_set/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (662,36,'MATCH AGAINST','Syntax\n------\n\nMATCH (col1,col2,...) AGAINST (expr [search_modifier])\n\nDescription\n-----------\n\nA special construct used to perform a fulltext search on a fulltext index.\n\nSee Fulltext Index Overview for a full description, and Full-text Indexes for\nmore articles on the topic.\n\nExamples\n--------\n\nCREATE TABLE ft_myisam(copy TEXT,FULLTEXT(copy)) ENGINE=MyISAM;\n\nINSERT INTO ft_myisam(copy) VALUES (\'Once upon a time\'), (\'There was a wicked\nwitch\'), \n (\'Who ate everybody up\');\n\nSELECT * FROM ft_myisam WHERE MATCH(copy) AGAINST(\'wicked\');\n+--------------------------+\n| copy |\n+--------------------------+\n| There was a wicked witch |\n+--------------------------+\n\nSELECT id, body, MATCH (title,body) AGAINST\n (\'Security implications of running MySQL as root\'\n IN NATURAL LANGUAGE MODE) AS score\n FROM articles WHERE MATCH (title,body) AGAINST\n (\'Security implications of running MySQL as root\'\n IN NATURAL LANGUAGE MODE);\n+----+-------------------------------------+-----------------+\n| id | body | score |\n+----+-------------------------------------+-----------------+\n| 4 | 1. Never run mysqld as root. 2. ... | 1.5219271183014 |\n| 6 | When configured properly, MySQL ... | 1.3114095926285 |\n+----+-------------------------------------+-----------------+\n\nURL: https://mariadb.com/kb/en/match-against/','','https://mariadb.com/kb/en/match-against/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (663,36,'MID','Syntax\n------\n\nMID(str,pos,len)\n\nDescription\n-----------\n\nMID(str,pos,len) is a synonym for SUBSTRING(str,pos,len).\n\nExamples\n--------\n\nSELECT MID(\'abcd\',4,1);\n+-----------------+\n| MID(\'abcd\',4,1) |\n+-----------------+\n| d |\n+-----------------+\n\nSELECT MID(\'abcd\',2,2);\n+-----------------+\n| MID(\'abcd\',2,2) |\n+-----------------+\n| bc |\n+-----------------+\n\nA negative starting position:\n\nSELECT MID(\'abcd\',-2,4);\n+------------------+\n| MID(\'abcd\',-2,4) |\n+------------------+\n| cd |\n+------------------+\n\nURL: https://mariadb.com/kb/en/mid/','','https://mariadb.com/kb/en/mid/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (664,36,'NATURAL_SORT_KEY','MariaDB starting with 10.7.0\n----------------------------\nNATURAL_SORT_KEY was added in MariaDB 10.7.0.\n\nSyntax\n------\n\nNATURAL_SORT_KEY(str)\n\nDescription\n-----------\n\nThe NATURAL_SORT_KEY function is used for sorting that is closer to natural\nsorting. Strings are sorted in alphabetical order, while numbers are treated\nin a way such that, for example, 10 is greater than 2, whereas in other forms\nof sorting, 2 would be greater than 10, just like z is greater than ya.\n\nThere are multiple natural sort implementations, differing in the way they\nhandle leading zeroes, fractions, i18n, negatives, decimals and so on.\n\nMariaDB\'s implementation ignores leading zeroes when performing the sort.\n\nYou can use also use NATURAL_SORT_KEY with generated columns. The value is not\nstored permanently in the table. When using a generated column, the virtual\ncolumn must be longer than the base column to cater for embedded numbers in\nthe string and MDEV-24582.\n\nExamples\n--------\n\nStrings and Numbers\n-------------------\n\nCREATE TABLE t1 (c TEXT);\n\nINSERT INTO t1 VALUES (\'b1\'),(\'a2\'),(\'a11\'),(\'a1\');\n\nSELECT c FROM t1;\n+------+\n| c |\n+------+\n| b1 |\n| a2 |\n| a11 |\n| a1 |\n+------+\n\nSELECT c FROM t1 ORDER BY c;\n+------+\n| c |\n+------+\n| a1 |\n| a11 |\n| a2 |\n| b1 |\n+------+\n\nUnsorted, regular sort and natural sort:\n\nTRUNCATE t1;\n\nINSERT INTO t1 VALUES \n (\'5.5.31\'),(\'10.7.0\'),(\'10.2.1\'),\n (\'10.1.22\'),(\'10.3.32\'),(\'10.2.12\');\n\nSELECT c FROM t1;\n+---------+\n| c |\n+---------+\n| 5.5.31 |\n| 10.7.0 |\n| 10.2.1 |\n| 10.1.22 |\n| 10.3.32 |\n| 10.2.12 |\n+---------+\n\nSELECT c FROM t1 ORDER BY c;\n+---------+\n| c |\n+---------+\n| 10.1.22 |\n| 10.2.1 |\n| 10.2.12 |\n| 10.3.32 |\n| 10.7.0 |\n| 5.5.31 |\n+---------+\n\nSELECT c FROM t1 ORDER BY NATURAL_SORT_KEY(c);\n+---------+\n| c |\n+---------+\n| 5.5.31 |\n| 10.1.22 |\n| 10.2.1 |\n| 10.2.12 |\n| 10.3.32 |\n| 10.7.0 |\n+---------+\n\nIPs\n---\n\nSorting IPs, unsorted, regular sort and natural sort::\n\nTRUNCATE t1;\n\nINSERT INTO t1 VALUES \n (\'192.167.3.1\'),(\'192.167.1.12\'),(\'100.200.300.400\'),\n (\'100.50.60.70\'),(\'100.8.9.9\'),(\'127.0.0.1\'),(\'0.0.0.0\');\n\nSELECT c FROM t1;\n+-----------------+\n| c |\n+-----------------+\n| 192.167.3.1 |\n| 192.167.1.12 |\n| 100.200.300.400 |\n| 100.50.60.70 |\n| 100.8.9.9 |\n| 127.0.0.1 |\n| 0.0.0.0 |\n+-----------------+\n\nSELECT c FROM t1 ORDER BY c;\n+-----------------+\n| c |\n+-----------------+\n| 0.0.0.0 |\n| 100.200.300.400 |\n| 100.50.60.70 |\n| 100.8.9.9 |\n| 127.0.0.1 |\n| 192.167.1.12 |\n| 192.167.3.1 |\n+-----------------+\n\nSELECT c FROM t1 ORDER BY NATURAL_SORT_KEY(c);\n+-----------------+\n| c |\n+-----------------+\n| 0.0.0.0 |\n| 100.8.9.9 |\n| 100.50.60.70 |\n| 100.200.300.400 |\n| 127.0.0.1 |\n| 192.167.1.12 |\n| 192.167.3.1 |\n+-----------------+\n\nGenerated Columns\n-----------------\n\nUsing with a generated column:\n\nCREATE TABLE t(c VARCHAR(3), k VARCHAR(4) AS (NATURAL_SORT_KEY(c)) INVISIBLE);\n\nINSERT INTO t(c) VALUES (\'b1\'),(\'a2\'),(\'a11\'),(\'a10\');\n\nSELECT * FROM t ORDER by k;\n+------+\n| c |\n+------+\n| a2 |\n| a10 |\n| a11 |\n| b1 |\n+------+\n\nNote that if the virtual column is not longer, results may not be as expected:\n\nCREATE TABLE t2(c VARCHAR(3), k VARCHAR(3) AS (NATURAL_SORT_KEY(c)) INVISIBLE);\n\nINSERT INTO t2(c) VALUES (\'b1\'),(\'a2\'),(\'a11\'),(\'a10\');\n\nSELECT * FROM t2 ORDER by k;\n+------+\n| c |\n+------+\n| a2 |\n| a11 |\n| a10 |\n| b1 |\n+------+\n\nLeading Zeroes\n--------------\n\nIgnoring leading zeroes can lead to undesirable results in certain contexts.\nFor example:\n\nCREATE TABLE t3 (a VARCHAR(4));\n\nINSERT INTO t3 VALUES \n (\'a1\'), (\'a001\'), (\'a10\'), (\'a001\'), (\'a10\'),\n (\'a01\'), (\'a01\'), (\'a01b\'), (\'a01b\'), (\'a1\');\n\nSELECT a FROM t3 ORDER BY a;\n+------+\n| a |\n+------+\n| a001 |\n| a001 |\n| a01 |\n| a01 |\n| a01b |\n| a01b |\n| a1 |\n| a1 |\n| a10 |\n| a10 |\n+------+\n10 rows in set (0.000 sec)\n\nSELECT a FROM t3 ORDER BY NATURAL_SORT_KEY(a);\n+------+\n| a |\n+------+\n| a1 |\n| a01 |\n| a01 |\n| a001 |\n| a001 |\n| a1 |\n| a01b |\n| a01b |\n| a10 |\n| a10 |\n+------+\n\nThis may not be what we were hoping for in a \'natural\' sort. A workaround is\nto sort by both NATURAL_SORT_KEY and regular sort.\n\nSELECT a FROM t3 ORDER BY NATURAL_SORT_KEY(a), a;\n+------+\n| a |\n+------+\n| a001 |\n| a001 |\n| a01 |\n| a01 |\n| a1 |\n| a1 |\n| a01b |\n| a01b |\n| a10 |\n| a10 |\n+------+\n\nURL: https://mariadb.com/kb/en/natural_sort_key/','','https://mariadb.com/kb/en/natural_sort_key/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (665,36,'NOT LIKE','Syntax\n------\n\nexpr NOT LIKE pat [ESCAPE \'escape_char\']\n\nDescription\n-----------\n\nThis is the same as NOT (expr LIKE pat [ESCAPE \'escape_char\']).\n\nURL: https://mariadb.com/kb/en/not-like/','','https://mariadb.com/kb/en/not-like/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (666,36,'OCTET_LENGTH','Syntax\n------\n\nOCTET_LENGTH(str)\n\nDescription\n-----------\n\nOCTET_LENGTH() returns the length of the given string, in octets (bytes). This\nis a synonym for LENGTHB(), and, when Oracle mode from MariaDB 10.3 is not\nset, a synonym for LENGTH().\n\nA multi-byte character counts as multiple bytes. This means that for a string\ncontaining five two-byte characters, OCTET_LENGTH() returns 10, whereas\nCHAR_LENGTH() returns 5.\n\nIf str is not a string value, it is converted into a string. If str is NULL,\nthe function returns NULL.\n\nExamples\n--------\n\nWhen Oracle mode from MariaDB 10.3 is not set:\n\nSELECT CHAR_LENGTH(\'Ï€\'), LENGTH(\'Ï€\'), LENGTHB(\'Ï€\'), OCTET_LENGTH(\'Ï€\');\n+-------------------+--------------+---------------+--------------------+\n| CHAR_LENGTH(\'Ï€\') | LENGTH(\'Ï€\') | LENGTHB(\'Ï€\') | OCTET_LENGTH(\'Ï€\') |\n+-------------------+--------------+---------------+--------------------+\n| 1 | 2 | 2 | 2 |\n+-------------------+--------------+---------------+--------------------+\n\nIn Oracle mode from MariaDB 10.3:\n\nSELECT CHAR_LENGTH(\'Ï€\'), LENGTH(\'Ï€\'), LENGTHB(\'Ï€\'), OCTET_LENGTH(\'Ï€\');\n+-------------------+--------------+---------------+--------------------+\n| CHAR_LENGTH(\'Ï€\') | LENGTH(\'Ï€\') | LENGTHB(\'Ï€\') | OCTET_LENGTH(\'Ï€\') |\n+-------------------+--------------+---------------+--------------------+\n| 1 | 1 | 2 | 2 |\n+-------------------+--------------+---------------+--------------------+\n\nURL: https://mariadb.com/kb/en/octet_length/','','https://mariadb.com/kb/en/octet_length/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (667,36,'ORD','Syntax\n------\n\nORD(str)\n\nDescription\n-----------\n\nIf the leftmost character of the string str is a multi-byte character, returns\nthe code for that character, calculated from the numeric values of its\nconstituent bytes using this formula:\n\n(1st byte code)\n+ (2nd byte code x 256)\n+ (3rd byte code x 256 x 256) ...\n\nIf the leftmost character is not a multi-byte character, ORD() returns the\nsame value as the ASCII() function.\n\nExamples\n--------\n\nSELECT ORD(\'2\');\n+----------+\n| ORD(\'2\') |\n+----------+\n| 50 |\n+----------+\n\nURL: https://mariadb.com/kb/en/ord/','','https://mariadb.com/kb/en/ord/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (668,36,'POSITION','Syntax\n------\n\nPOSITION(substr IN str)\n\nDescription\n-----------\n\nPOSITION(substr IN str) is a synonym for LOCATE(substr,str).\n\nIt\'s part of ODBC 3.0.\n\nURL: https://mariadb.com/kb/en/position/','','https://mariadb.com/kb/en/position/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (669,36,'QUOTE','Syntax\n------\n\nQUOTE(str)\n\nDescription\n-----------\n\nQuotes a string to produce a result that can be used as a properly escaped\ndata value in an SQL statement. The string is returned enclosed by single\nquotes and with each instance of single quote (\"\'\"), backslash (\"\\\"), ASCII\nNUL, and Control-Z preceded by a backslash. If the argument is NULL, the\nreturn value is the word \"NULL\" without enclosing single quotes.\n\nExamples\n--------\n\nSELECT QUOTE(\"Don\'t!\");\n+-----------------+\n| QUOTE(\"Don\'t!\") |\n+-----------------+\n| \'Don\\\'t!\' |\n+-----------------+\n\nSELECT QUOTE(NULL); \n+-------------+\n| QUOTE(NULL) |\n+-------------+\n| NULL |\n+-------------+\n\nURL: https://mariadb.com/kb/en/quote/','','https://mariadb.com/kb/en/quote/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (670,36,'REPEAT Function','Syntax\n------\n\nREPEAT(str,count)\n\nDescription\n-----------\n\nReturns a string consisting of the string str repeated count times. If count\nis less than 1, returns an empty string. Returns NULL if str or count are NULL.\n\nExamples\n--------\n\nSELECT QUOTE(REPEAT(\'MariaDB \',4));\n+------------------------------------+\n| QUOTE(REPEAT(\'MariaDB \',4)) |\n+------------------------------------+\n| \'MariaDB MariaDB MariaDB MariaDB \' |\n+------------------------------------+\n\nURL: https://mariadb.com/kb/en/repeat-function/','','https://mariadb.com/kb/en/repeat-function/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (671,36,'REPLACE Function','Syntax\n------\n\nREPLACE(str,from_str,to_str)\n\nDescription\n-----------\n\nReturns the string str with all occurrences of the string from_str replaced by\nthe string to_str. REPLACE() performs a case-sensitive match when searching\nfor from_str.\n\nExamples\n--------\n\nSELECT REPLACE(\'www.mariadb.org\', \'w\', \'Ww\');\n+---------------------------------------+\n| REPLACE(\'www.mariadb.org\', \'w\', \'Ww\') |\n+---------------------------------------+\n| WwWwWw.mariadb.org |\n+---------------------------------------+\n\nURL: https://mariadb.com/kb/en/replace-function/','','https://mariadb.com/kb/en/replace-function/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (672,36,'REVERSE','Syntax\n------\n\nREVERSE(str)\n\nDescription\n-----------\n\nReturns the string str with the order of the characters reversed.\n\nExamples\n--------\n\nSELECT REVERSE(\'desserts\');\n+---------------------+\n| REVERSE(\'desserts\') |\n+---------------------+\n| stressed |\n+---------------------+\n\nURL: https://mariadb.com/kb/en/reverse/','','https://mariadb.com/kb/en/reverse/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (673,36,'RIGHT','Syntax\n------\n\nRIGHT(str,len)\n\nDescription\n-----------\n\nReturns the rightmost len characters from the string str, or NULL if any\nargument is NULL.\n\nExamples\n--------\n\nSELECT RIGHT(\'MariaDB\', 2);\n+---------------------+\n| RIGHT(\'MariaDB\', 2) |\n+---------------------+\n| DB |\n+---------------------+\n\nURL: https://mariadb.com/kb/en/right/','','https://mariadb.com/kb/en/right/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (674,36,'RPAD','Syntax\n------\n\nRPAD(str, len [, padstr])\n\nDescription\n-----------\n\nReturns the string str, right-padded with the string padstr to a length of len\ncharacters. If str is longer than len, the return value is shortened to len\ncharacters. If padstr is omitted, the RPAD function pads spaces.\n\nPrior to MariaDB 10.3.1, the padstr parameter was mandatory.\n\nReturns NULL if given a NULL argument. If the result is empty (a length of\nzero), returns either an empty string, or, from MariaDB 10.3.6 with\nSQL_MODE=Oracle, NULL.\n\nThe Oracle mode version of the function can be accessed outside of Oracle mode\nby using RPAD_ORACLE as the function name.\n\nExamples\n--------\n\nSELECT RPAD(\'hello\',10,\'.\');\n+----------------------+\n| RPAD(\'hello\',10,\'.\') |\n+----------------------+\n| hello..... |\n+----------------------+\n\nSELECT RPAD(\'hello\',2,\'.\');\n+---------------------+\n| RPAD(\'hello\',2,\'.\') |\n+---------------------+\n| he |\n+---------------------+\n\nFrom MariaDB 10.3.1, with the pad string defaulting to space.\n\nSELECT RPAD(\'hello\',30);\n+--------------------------------+\n| RPAD(\'hello\',30) |\n+--------------------------------+\n| hello |\n+--------------------------------+\n\nOracle mode version from MariaDB 10.3.6:\n\nSELECT RPAD(\'\',0),RPAD_ORACLE(\'\',0);\n+------------+-------------------+\n| RPAD(\'\',0) | RPAD_ORACLE(\'\',0) |\n+------------+-------------------+\n| | NULL |\n+------------+-------------------+\n\nURL: https://mariadb.com/kb/en/rpad/','','https://mariadb.com/kb/en/rpad/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (675,36,'RTRIM','Syntax\n------\n\nRTRIM(str)\n\nDescription\n-----------\n\nReturns the string str with trailing space characters removed.\n\nReturns NULL if given a NULL argument. If the result is empty, returns either\nan empty string, or, from MariaDB 10.3.6 with SQL_MODE=Oracle, NULL.\n\nThe Oracle mode version of the function can be accessed outside of Oracle mode\nby using RTRIM_ORACLE as the function name.\n\nExamples\n--------\n\nSELECT QUOTE(RTRIM(\'MariaDB \'));\n+-----------------------------+\n| QUOTE(RTRIM(\'MariaDB \')) |\n+-----------------------------+\n| \'MariaDB\' |\n+-----------------------------+\n\nOracle mode version from MariaDB 10.3.6:\n\nSELECT RTRIM(\'\'),RTRIM_ORACLE(\'\');\n+-----------+------------------+\n| RTRIM(\'\') | RTRIM_ORACLE(\'\') |\n+-----------+------------------+\n| | NULL |\n+-----------+------------------+\n\nURL: https://mariadb.com/kb/en/rtrim/','','https://mariadb.com/kb/en/rtrim/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (676,36,'SFORMAT','MariaDB starting with 10.7.0\n----------------------------\nSFORMAT was added in MariaDB 10.7.0.\n\nDescription\n-----------\n\nThe SFORMAT function takes an input string and a formatting specification and\nreturns the string formatted using the rules the user passed in the\nspecification.\n\nIt use the fmtlib library for Python-like (as well as Rust, C++20, etc) string\nformatting.\n\nOnly fmtlib 7.0.0+ is supported.\n\nThere is no native support for temporal and decimal values:\n\n* TIME_RESULT is handled as STRING_RESULT\n* DECIMAL_RESULT as REAL_RESULT\n\nExamples\n--------\n\nSELECT SFORMAT(\"The answer is {}.\", 42);\n+----------------------------------+\n| SFORMAT(\"The answer is {}.\", 42) |\n+----------------------------------+\n| The answer is 42. |\n+----------------------------------+\n\nCREATE TABLE test_sformat(mdb_release char(6), mdev int, feature char(20));\n\nINSERT INTO test_sformat VALUES(\'10.7.0\', 25015, \'Python style sformat\'), \n (\'10.7.0\', 4958, \'UUID\');\n\nSELECT * FROM test_sformat;\n+-------------+-------+----------------------+\n| mdb_release | mdev | feature |\n+-------------+-------+----------------------+\n| 10.7.0 | 25015 | Python style sformat |\n| 10.7.0 | 4958 | UUID |\n+-------------+-------+----------------------+\n\nSELECT SFORMAT(\'MariaDB Server {} has a preview for MDEV-{} which is about\n{}\', \n mdb_release, mdev, feature) AS \'Preview Release Examples\'\n FROM test_sformat;\n+------------------------------------------------------------------------------\n---------+\n| Preview Release Examples \n |\n+------------------------------------------------------------------------------\n---------+\n| MariaDB Server 10.7.0 has a preview for MDEV-25015 which is about Python\nstyle sformat |\n| MariaDB Server 10.7.0 has a preview for MDEV-4958 which is about UUID \n |\n+------------------------------------------------------------------------------\n---------+\n\nURL: https://mariadb.com/kb/en/sformat/','','https://mariadb.com/kb/en/sformat/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (677,36,'SOUNDEX','Syntax\n------\n\nSOUNDEX(str)\n\nDescription\n-----------\n\nReturns a soundex string from str. Two strings that sound almost the same\nshould have identical soundex strings. A standard soundex string is four\ncharacters long, but the SOUNDEX() function returns an arbitrarily long\nstring. You can use SUBSTRING() on the result to get a standard soundex\nstring. All non-alphabetic characters in str are ignored. All international\nalphabetic characters outside the A-Z range are treated as vowels.\n\nImportant: When using SOUNDEX(), you should be aware of the following details:\n\n* This function, as currently implemented, is intended to work well with\n strings that are in the English language only. Strings in other languages may\n not produce reasonable results.\n\n* This function implements the original Soundex algorithm, not the more\npopular enhanced version (also described by D. Knuth). The difference is that\noriginal version discards vowels first and duplicates second, whereas the\nenhanced version discards duplicates first and vowels second.\n\nExamples\n--------\n\nSOUNDEX(\'Hello\');\n+------------------+\n| SOUNDEX(\'Hello\') |\n+------------------+\n| H400 |\n+------------------+\n\nSELECT SOUNDEX(\'MariaDB\');\n+--------------------+\n| SOUNDEX(\'MariaDB\') |\n+--------------------+\n| M631 |\n+--------------------+\n\nSELECT SOUNDEX(\'Knowledgebase\');\n+--------------------------+\n| SOUNDEX(\'Knowledgebase\') |\n+--------------------------+\n| K543212 |\n+--------------------------+\n\nSELECT givenname, surname FROM users WHERE SOUNDEX(givenname) =\nSOUNDEX(\"robert\");\n+-----------+---------+\n| givenname | surname |\n+-----------+---------+\n| Roberto | Castro |\n+-----------+---------+\n\nURL: https://mariadb.com/kb/en/soundex/','','https://mariadb.com/kb/en/soundex/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (678,36,'SOUNDS LIKE','Syntax\n------\n\nexpr1 SOUNDS LIKE expr2\n\nDescription\n-----------\n\nThis is the same as SOUNDEX(expr1) = SOUNDEX(expr2).\n\nExample\n-------\n\nSELECT givenname, surname FROM users WHERE givenname SOUNDS LIKE \"robert\";\n+-----------+---------+\n| givenname | surname |\n+-----------+---------+\n| Roberto | Castro |\n+-----------+---------+\n\nURL: https://mariadb.com/kb/en/sounds-like/','','https://mariadb.com/kb/en/sounds-like/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (679,36,'SPACE','Syntax\n------\n\nSPACE(N)\n\nDescription\n-----------\n\nReturns a string consisting of N space characters. If N is NULL, returns NULL.\n\nExamples\n--------\n\nSELECT QUOTE(SPACE(6));\n+-----------------+\n| QUOTE(SPACE(6)) |\n+-----------------+\n| \' \' |\n+-----------------+\n\nURL: https://mariadb.com/kb/en/space/','','https://mariadb.com/kb/en/space/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (680,36,'STRCMP','Syntax\n------\n\nSTRCMP(expr1,expr2)\n\nDescription\n-----------\n\nSTRCMP() returns 0 if the strings are the same, -1 if the first argument is\nsmaller than the second according to the current sort order, and 1 if the\nstrings are otherwise not the same. Returns NULL is either argument is NULL.\n\nExamples\n--------\n\nSELECT STRCMP(\'text\', \'text2\');\n+-------------------------+\n| STRCMP(\'text\', \'text2\') |\n+-------------------------+\n| -1 |\n+-------------------------+\n\nSELECT STRCMP(\'text2\', \'text\');\n+-------------------------+\n| STRCMP(\'text2\', \'text\') |\n+-------------------------+\n| 1 |\n+-------------------------+\n\nSELECT STRCMP(\'text\', \'text\');\n+------------------------+\n| STRCMP(\'text\', \'text\') |\n+------------------------+\n| 0 |\n+------------------------+\n\nURL: https://mariadb.com/kb/en/strcmp/','','https://mariadb.com/kb/en/strcmp/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (681,36,'SUBSTR','Description\n-----------\n\nSUBSTR() is a synonym for SUBSTRING().\n\nURL: https://mariadb.com/kb/en/substr/','','https://mariadb.com/kb/en/substr/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (682,36,'SUBSTRING','Syntax\n------\n\nSUBSTRING(str,pos), \nSUBSTRING(str FROM pos), \nSUBSTRING(str,pos,len),\nSUBSTRING(str FROM pos FOR len)\n\nSUBSTR(str,pos), \nSUBSTR(str FROM pos), \nSUBSTR(str,pos,len),\nSUBSTR(str FROM pos FOR len)\n\nDescription\n-----------\n\nThe forms without a len argument return a substring from string str starting\nat position pos.\n\nThe forms with a len argument return a substring len characters long from\nstring str, starting at position pos.\n\nThe forms that use FROM are standard SQL syntax.\n\nIt is also possible to use a negative value for pos. In this case, the\nbeginning of the substring is pos characters from the end of the string,\nrather than the beginning. A negative value may be used for pos in any of the\nforms of this function.\n\nBy default, the position of the first character in the string from which the\nsubstring is to be extracted is reckoned as 1. For Oracle-compatibility, from\nMariaDB 10.3.3, when sql_mode is set to \'oracle\', position zero is treated as\nposition 1 (although the first character is still reckoned as 1).\n\nIf any argument is NULL, returns NULL.\n\nExamples\n--------\n\nSELECT SUBSTRING(\'Knowledgebase\',5);\n+------------------------------+\n| SUBSTRING(\'Knowledgebase\',5) |\n+------------------------------+\n| ledgebase |\n+------------------------------+\n\nSELECT SUBSTRING(\'MariaDB\' FROM 6);\n+-----------------------------+\n| SUBSTRING(\'MariaDB\' FROM 6) |\n+-----------------------------+\n| DB |\n+-----------------------------+\n\nSELECT SUBSTRING(\'Knowledgebase\',3,7);\n+--------------------------------+\n| SUBSTRING(\'Knowledgebase\',3,7) |\n+--------------------------------+\n| owledge |\n+--------------------------------+\n\nSELECT SUBSTRING(\'Knowledgebase\', -4);\n+--------------------------------+\n| SUBSTRING(\'Knowledgebase\', -4) |\n+--------------------------------+\n| base |\n+--------------------------------+\n\nSELECT SUBSTRING(\'Knowledgebase\', -8, 4);\n+-----------------------------------+\n| SUBSTRING(\'Knowledgebase\', -8, 4) |\n+-----------------------------------+\n| edge |\n+-----------------------------------+\n\nSELECT SUBSTRING(\'Knowledgebase\' FROM -8 FOR 4);\n+------------------------------------------+\n| SUBSTRING(\'Knowledgebase\' FROM -8 FOR 4) |\n+------------------------------------------+\n| edge |\n+------------------------------------------+\n\nOracle mode from MariaDB 10.3.3:\n\nSELECT SUBSTR(\'abc\',0,3);\n+-------------------+\n| SUBSTR(\'abc\',0,3) |\n+-------------------+\n| |\n+-------------------+\n\nSELECT SUBSTR(\'abc\',1,2);\n+-------------------+\n| SUBSTR(\'abc\',1,2) |\n+-------------------+\n| ab |\n+-------------------+\n\nSET sql_mode=\'oracle\';\n\nSELECT SUBSTR(\'abc\',0,3);\n+-------------------+\n| SUBSTR(\'abc\',0,3) |\n+-------------------+\n| abc |\n+-------------------+\n\nSELECT SUBSTR(\'abc\',1,2);\n+-------------------+\n| SUBSTR(\'abc\',1,2) |\n+-------------------+\n| ab |\n+-------------------+\n\nURL: https://mariadb.com/kb/en/substring/','','https://mariadb.com/kb/en/substring/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (683,36,'SUBSTRING_INDEX','Syntax\n------\n\nSUBSTRING_INDEX(str,delim,count)\n\nDescription\n-----------\n\nReturns the substring from string str before count occurrences of the\ndelimiter delim. If count is positive, everything to the left of the final\ndelimiter (counting from the left) is returned. If count is negative,\neverything to the right of the final delimiter (counting from the right) is\nreturned. SUBSTRING_INDEX() performs a case-sensitive match when searching for\ndelim.\n\nIf any argument is NULL, returns NULL.\n\nFor example\n\nSUBSTRING_INDEX(\'www.mariadb.org\', \'.\', 2)\n\nmeans \"Return all of the characters up to the 2nd occurrence of .\"\n\nExamples\n--------\n\nSELECT SUBSTRING_INDEX(\'www.mariadb.org\', \'.\', 2);\n+--------------------------------------------+\n| SUBSTRING_INDEX(\'www.mariadb.org\', \'.\', 2) |\n+--------------------------------------------+\n| www.mariadb |\n+--------------------------------------------+\n\nSELECT SUBSTRING_INDEX(\'www.mariadb.org\', \'.\', -2);\n+---------------------------------------------+\n| SUBSTRING_INDEX(\'www.mariadb.org\', \'.\', -2) |\n+---------------------------------------------+\n| mariadb.org |\n+---------------------------------------------+\n\nURL: https://mariadb.com/kb/en/substring_index/','','https://mariadb.com/kb/en/substring_index/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (684,36,'TO_BASE64','Syntax\n------\n\nTO_BASE64(str)\n\nDescription\n-----------\n\nConverts the string argument str to its base-64 encoded form, returning the\nresult as a character string in the connection character set and collation.\n\nThe argument str will be converted to string first if it is not a string. A\nNULL argument will return a NULL result.\n\nThe reverse function, FROM_BASE64(), decodes an encoded base-64 string.\n\nThere are a numerous different methods to base-64 encode a string. The\nfollowing are used by MariaDB and MySQL:\n\n* Alphabet value 64 is encoded as \'+\'.\n* Alphabet value 63 is encoded as \'/\'.\n* Encoding output is made up of groups of four printable characters, with each\nthree bytes of data encoded using four characters. If the final group is not\ncomplete, it is padded with \'=\' characters to make up a length of four.\n* To divide long output, a newline is added after every 76 characters.\n* Decoding will recognize and ignore newlines, carriage returns, tabs, and\nspaces.\n\nExamples\n--------\n\nSELECT TO_BASE64(\'Maria\');\n+--------------------+\n| TO_BASE64(\'Maria\') |\n+--------------------+\n| TWFyaWE= |\n+--------------------+\n\nURL: https://mariadb.com/kb/en/to_base64/','','https://mariadb.com/kb/en/to_base64/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (685,36,'TO_CHAR','MariaDB starting with 10.6.1\n----------------------------\nThe TO_CHAR function was introduced in MariaDB 10.6.1 to enhance Oracle\ncompatibility.\n\nSyntax\n------\n\nTO_CHAR(expr[, fmt])\n\nDescription\n-----------\n\nThe TO_CHAR function converts an expr of type date, datetime, time or\ntimestamp to a string. The optional fmt argument supports\nYYYY/YYY/YY/RRRR/RR/MM/MON/MONTH/MI/DD/DY/HH/HH12/HH24/SS and special\ncharacters. The default value is \"YYYY-MM-DD HH24:MI:SS\".\n\nIn Oracle, TO_CHAR can also be used to convert numbers to strings, but this is\nnot supported in MariaDB and will give an error.\n\nExamples\n--------\n\nSELECT TO_CHAR(\'1980-01-11 04:50:39\', \'YYYY-MM-DD\');\n+----------------------------------------------+\n| TO_CHAR(\'1980-01-11 04:50:39\', \'YYYY-MM-DD\') |\n+----------------------------------------------+\n| 1980-01-11 |\n+----------------------------------------------+\n\nSELECT TO_CHAR(\'1980-01-11 04:50:39\', \'HH24-MI-SS\');\n+----------------------------------------------+\n| TO_CHAR(\'1980-01-11 04:50:39\', \'HH24-MI-SS\') |\n+----------------------------------------------+\n| 04-50-39 |\n+----------------------------------------------+\n\nSELECT TO_CHAR(\'00-01-01 00:00:00\', \'YY-MM-DD HH24:MI:SS\');\n+-----------------------------------------------------+\n| TO_CHAR(\'00-01-01 00:00:00\', \'YY-MM-DD HH24:MI:SS\') |\n+-----------------------------------------------------+\n| 00-01-01 00:00:00 |\n+-----------------------------------------------------+\n\nSELECT TO_CHAR(\'99-12-31 23:59:59\', \'YY-MM-DD HH24:MI:SS\');\n+-----------------------------------------------------+\n| TO_CHAR(\'99-12-31 23:59:59\', \'YY-MM-DD HH24:MI:SS\') |\n+-----------------------------------------------------+\n| 99-12-31 23:59:59 |\n+-----------------------------------------------------+\n\nSELECT TO_CHAR(\'9999-12-31 23:59:59\', \'YY-MM-DD HH24:MI:SS\');\n+-------------------------------------------------------+\n| TO_CHAR(\'9999-12-31 23:59:59\', \'YY-MM-DD HH24:MI:SS\') |\n+-------------------------------------------------------+\n| 99-12-31 23:59:59 |\n+-------------------------------------------------------+\n\nSELECT TO_CHAR(\'21-01-03 08:30:00\', \'Y-MONTH-DY HH:MI:SS\');\n+-----------------------------------------------------+\n| TO_CHAR(\'21-01-03 08:30:00\', \'Y-MONTH-DY HH:MI:SS\') |\n+-----------------------------------------------------+\n| 1-January -Sun 08:30:00 |\n+-----------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/to_char/','','https://mariadb.com/kb/en/to_char/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (686,36,'TRIM','Syntax\n------\n\nTRIM([{BOTH | LEADING | TRAILING} [remstr] FROM] str), TRIM([remstr FROM] str)\n\nFrom MariaDB 10.3.6\n\nTRIM_ORACLE([{BOTH | LEADING | TRAILING} [remstr] FROM] str), TRIM([remstr\nFROM] str)\n\nDescription\n-----------\n\nReturns the string str with all remstr prefixes or suffixes removed. If none\nof the specifiers BOTH, LEADING, or TRAILING is given, BOTH is assumed. remstr\nis optional and, if not specified, spaces are removed.\n\nReturns NULL if given a NULL argument. If the result is empty, returns either\nan empty string, or, from MariaDB 10.3.6 with SQL_MODE=Oracle, NULL.\nSQL_MODE=Oracle is not set by default.\n\nThe Oracle mode version of the function can be accessed in any mode by using\nTRIM_ORACLE as the function name.\n\nExamples\n--------\n\nSELECT TRIM(\' bar \')\\G\n*************************** 1. row ***************************\nTRIM(\' bar \'): bar\n\nSELECT TRIM(LEADING \'x\' FROM \'xxxbarxxx\')\\G\n*************************** 1. row ***************************\nTRIM(LEADING \'x\' FROM \'xxxbarxxx\'): barxxx\n\nSELECT TRIM(BOTH \'x\' FROM \'xxxbarxxx\')\\G\n*************************** 1. row ***************************\nTRIM(BOTH \'x\' FROM \'xxxbarxxx\'): bar\n\nSELECT TRIM(TRAILING \'xyz\' FROM \'barxxyz\')\\G\n*************************** 1. row ***************************\nTRIM(TRAILING \'xyz\' FROM \'barxxyz\'): barx\n\nFrom MariaDB 10.3.6, with SQL_MODE=Oracle not set:\n\nSELECT TRIM(\'\'),TRIM_ORACLE(\'\');\n+----------+-----------------+\n| TRIM(\'\') | TRIM_ORACLE(\'\') |\n+----------+-----------------+\n| | NULL |\n+----------+-----------------+\n\nFrom MariaDB 10.3.6, with SQL_MODE=Oracle set:\n\nSELECT TRIM(\'\'),TRIM_ORACLE(\'\');\n+----------+-----------------+\n| TRIM(\'\') | TRIM_ORACLE(\'\') |\n+----------+-----------------+\n| NULL | NULL |\n+----------+-----------------+\n\nURL: https://mariadb.com/kb/en/trim/','','https://mariadb.com/kb/en/trim/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (687,36,'UCASE','Syntax\n------\n\nUCASE(str)\n\nDescription\n-----------\n\nUCASE() is a synonym for UPPER().\n\nURL: https://mariadb.com/kb/en/ucase/','','https://mariadb.com/kb/en/ucase/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (688,36,'UNCOMPRESSED_LENGTH','Syntax\n------\n\nUNCOMPRESSED_LENGTH(compressed_string)\n\nDescription\n-----------\n\nReturns the length that the compressed string had before being compressed with\nCOMPRESS().\n\nUNCOMPRESSED_LENGTH() returns NULL or an incorrect result if the string is not\ncompressed.\n\nUntil MariaDB 10.3.1, returns MYSQL_TYPE_LONGLONG, or bigint(10), in all\ncases. From MariaDB 10.3.1, returns MYSQL_TYPE_LONG, or int(10), when the\nresult would fit within 32-bits.\n\nExamples\n--------\n\nSELECT UNCOMPRESSED_LENGTH(COMPRESS(REPEAT(\'a\',30)));\n+-----------------------------------------------+\n| UNCOMPRESSED_LENGTH(COMPRESS(REPEAT(\'a\',30))) |\n+-----------------------------------------------+\n| 30 |\n+-----------------------------------------------+\n\nURL: https://mariadb.com/kb/en/uncompressed_length/','','https://mariadb.com/kb/en/uncompressed_length/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (689,36,'UNHEX','Syntax\n------\n\nUNHEX(str)\n\nDescription\n-----------\n\nPerforms the inverse operation of HEX(str). That is, it interprets each pair\nof hexadecimal digits in the argument as a number and converts it to the\ncharacter represented by the number. The resulting characters are returned as\na binary string.\n\nIf str is NULL, UNHEX() returns NULL.\n\nExamples\n--------\n\nSELECT HEX(\'MariaDB\');\n+----------------+\n| HEX(\'MariaDB\') |\n+----------------+\n| 4D617269614442 |\n+----------------+\n\nSELECT UNHEX(\'4D617269614442\');\n+-------------------------+\n| UNHEX(\'4D617269614442\') |\n+-------------------------+\n| MariaDB |\n+-------------------------+\n\nSELECT 0x4D617269614442;\n+------------------+\n| 0x4D617269614442 |\n+------------------+\n| MariaDB |\n+------------------+\n\nSELECT UNHEX(HEX(\'string\'));\n+----------------------+\n| UNHEX(HEX(\'string\')) |\n+----------------------+\n| string |\n+----------------------+\n\nSELECT HEX(UNHEX(\'1267\'));\n+--------------------+\n| HEX(UNHEX(\'1267\')) |\n+--------------------+\n| 1267 |\n+--------------------+\n\nURL: https://mariadb.com/kb/en/unhex/','','https://mariadb.com/kb/en/unhex/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (690,36,'UPDATEXML','Syntax\n------\n\nUpdateXML(xml_target, xpath_expr, new_xml)\n\nDescription\n-----------\n\nThis function replaces a single portion of a given fragment of XML markup\nxml_target with a new XML fragment new_xml, and then returns the changed XML.\nThe portion of xml_target that is replaced matches an XPath expression\nxpath_expr supplied by the user. If no expression matching xpath_expr is\nfound, or if multiple matches are found, the function returns the original\nxml_target XML fragment. All three arguments should be strings.\n\nExamples\n--------\n\nSELECT\n UpdateXML(\'<a><b>ccc</b><d></d></a>\', \'/a\', \'<e>fff</e>\') AS val1,\n UpdateXML(\'<a><b>ccc</b><d></d></a>\', \'/b\', \'<e>fff</e>\') AS val2,\n UpdateXML(\'<a><b>ccc</b><d></d></a>\', \'//b\', \'<e>fff</e>\') AS val3,\n UpdateXML(\'<a><b>ccc</b><d></d></a>\', \'/a/d\', \'<e>fff</e>\') AS val4,\n UpdateXML(\'<a><d></d><b>ccc</b><d></d></a>\', \'/a/d\', \'<e>fff</e>\') AS val5\n \\G\n*************************** 1. row ***************************\nval1: <e>fff</e>\nval2: <a><b>ccc</b><d></d></a>\nval3: <a><e>fff</e><d></d></a>\nval4: <a><b>ccc</b><e>fff</e></a>\nval5: <a><d></d><b>ccc</b><d></d></a>\n1 row in set (0.00 sec)\n\nURL: https://mariadb.com/kb/en/updatexml/','','https://mariadb.com/kb/en/updatexml/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (691,36,'UPPER','Syntax\n------\n\nUPPER(str)\n\nDescription\n-----------\n\nReturns the string str with all characters changed to uppercase according to\nthe current character set mapping. The default is latin1 (cp1252 West\nEuropean).\n\nSELECT UPPER(surname), givenname FROM users ORDER BY surname;\n+----------------+------------+\n| UPPER(surname) | givenname |\n+----------------+------------+\n| ABEL | Jacinto |\n| CASTRO | Robert |\n| COSTA | Phestos |\n| MOSCHELLA | Hippolytos |\n+----------------+------------+\n\nUPPER() is ineffective when applied to binary strings (BINARY, VARBINARY,\nBLOB). The description of LOWER() shows how to perform lettercase conversion\nof binary strings.\n\nURL: https://mariadb.com/kb/en/upper/','','https://mariadb.com/kb/en/upper/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (692,36,'WEIGHT_STRING','Syntax\n------\n\nWEIGHT_STRING(str [AS {CHAR|BINARY}(N)] [LEVEL levels] [flags])\n levels: N [ASC|DESC|REVERSE] [, N [ASC|DESC|REVERSE]] ...\n\nDescription\n-----------\n\nReturns a binary string representing the string\'s sorting and comparison\nvalue. A string with a lower result means that for sorting purposes the string\nappears before a string with a higher result.\n\nWEIGHT_STRING() is particularly useful when adding new collations, for testing\npurposes.\n\nIf str is a non-binary string (CHAR, VARCHAR or TEXT), WEIGHT_STRING returns\nthe string\'s collation weight. If str is a binary string (BINARY, VARBINARY or\nBLOB), the return value is simply the input value, since the weight for each\nbyte in a binary string is the byte value.\n\nWEIGHT_STRING() returns NULL if given a NULL input.\n\nThe optional AS clause permits casting the input string to a binary or\nnon-binary string, as well as to a particular length.\n\nAS BINARY(N) measures the length in bytes rather than characters, and right\npads with 0x00 bytes to the desired length.\n\nAS CHAR(N) measures the length in characters, and right pads with spaces to\nthe desired length.\n\nN has a minimum value of 1, and if it is less than the length of the input\nstring, the string is truncated without warning.\n\nThe optional LEVEL clause specifies that the return value should contain\nweights for specific collation levels. The levels specifier can either be a\nsingle integer, a comma-separated list of integers, or a range of integers\nseparated by a dash (whitespace is ignored). Integers can range from 1 to a\nmaximum of 6, dependent on the collation, and need to be listed in ascending\norder.\n\nIf the LEVEL clause is no provided, a default of 1 to the maximum for the\ncollation is assumed.\n\nIf the LEVEL is specified without using a range, an optional modifier is\npermitted.\n\nASC, the default, returns the weights without any modification.\n\nDESC returns bitwise-inverted weights.\n\nREVERSE returns the weights in reverse order.\n\nExamples\n--------\n\nThe examples below use the HEX() function to represent non-printable results\nin hexadecimal format.\n\nSELECT HEX(WEIGHT_STRING(\'x\'));\n+-------------------------+\n| HEX(WEIGHT_STRING(\'x\')) |\n+-------------------------+\n| 0058 |\n+-------------------------+\n\nSELECT HEX(WEIGHT_STRING(\'x\' AS BINARY(4)));\n+--------------------------------------+\n| HEX(WEIGHT_STRING(\'x\' AS BINARY(4))) |\n+--------------------------------------+\n| 78000000 |\n+--------------------------------------+\n\nSELECT HEX(WEIGHT_STRING(\'x\' AS CHAR(4)));\n+------------------------------------+\n| HEX(WEIGHT_STRING(\'x\' AS CHAR(4))) |\n+------------------------------------+\n| 0058002000200020 |\n+------------------------------------+\n\nSELECT HEX(WEIGHT_STRING(0xaa22ee LEVEL 1));\n+--------------------------------------+\n| HEX(WEIGHT_STRING(0xaa22ee LEVEL 1)) |\n+--------------------------------------+\n| AA22EE |\n+--------------------------------------+\n\nSELECT HEX(WEIGHT_STRING(0xaa22ee LEVEL 1 DESC));\n+-------------------------------------------+\n| HEX(WEIGHT_STRING(0xaa22ee LEVEL 1 DESC)) |\n+-------------------------------------------+\n| 55DD11 |\n+-------------------------------------------+\n\nSELECT HEX(WEIGHT_STRING(0xaa22ee LEVEL 1 REVERSE));\n+----------------------------------------------+\n| HEX(WEIGHT_STRING(0xaa22ee LEVEL 1 REVERSE)) |\n+----------------------------------------------+\n| EE22AA |\n+----------------------------------------------+\n\nURL: https://mariadb.com/kb/en/weight_string/','','https://mariadb.com/kb/en/weight_string/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (693,36,'Type Conversion','Implicit type conversion takes place when MariaDB is using operands or\ndifferent types, in order to make the operands compatible.\n\nIt is best practice not to rely upon implicit conversion; rather use CAST to\nexplicitly convert types.\n\nRules for Conversion on Comparison\n----------------------------------\n\n* If either argument is NULL, the result of the comparison is NULL unless the\nNULL-safe <=> equality comparison operator is used.\n* If both arguments are integers, they are compared as integers.\n* If both arguments are strings, they are compared as strings.\n* If one argument is decimal and the other argument is decimal or integer,\nthey are compared as decimals.\n* If one argument is decimal and the other argument is a floating point, they\nare compared as floating point values.\n* If one argument is string and the other argument is integer, they are\ncompared as decimals. This conversion was added in MariaDB 10.3.36. Prior to\n10.3.36, this combination was compared as floating point values, which did not\nalways work well for huge 64-bit integers because of a possible precision loss\non conversion to double.\n* If a hexadecimal argument is not compared to a number, it is treated as a\nbinary string.\n* If a constant is compared to a TIMESTAMP or DATETIME, the constant is\nconverted to a timestamp, unless used as an argument to the IN function.\n* In other cases, arguments are compared as floating point, or real, numbers.\n\nNote that if a string column is being compared with a numeric value, MariaDB\nwill not use the index on the column, as there are numerous alternatives that\nmay evaluate as equal (see examples below).\n\nComparison Examples\n-------------------\n\nConverting a string to a number:\n\nSELECT 15+\'15\';\n+---------+\n| 15+\'15\' |\n+---------+\n| 30 |\n+---------+\n\nConverting a number to a string:\n\nSELECT CONCAT(15,\'15\');\n+-----------------+\n| CONCAT(15,\'15\') |\n+-----------------+\n| 1515 |\n+-----------------+\n\nFloating point number errors:\n\nSELECT \'9746718491924563214\' = 9746718491924563213;\n+---------------------------------------------+\n| \'9746718491924563214\' = 9746718491924563213 |\n+---------------------------------------------+\n| 1 |\n+---------------------------------------------+\n\nNumeric equivalence with strings:\n\nSELECT \'5\' = 5;\n+---------+\n| \'5\' = 5 |\n+---------+\n| 1 |\n+---------+\n\nSELECT \' 5\' = 5;\n+------------+\n| \' 5\' = 5 |\n+------------+\n| 1 |\n+------------+\n\nSELECT \' 5 \' = 5;\n+--------------+\n| \' 5 \' = 5 |\n+--------------+\n| 1 |\n+--------------+\n1 row in set, 1 warning (0.000 sec)\n\nSHOW WARNINGS;\n+-------+------+--------------------------------------------+\n| Level | Code | Message |\n+-------+------+--------------------------------------------+\n| Note | 1292 | Truncated incorrect DOUBLE value: \' 5 \' |\n+-------+------+--------------------------------------------+\n\nAs a result of the above, MariaDB cannot use the index when comparing a string\nwith a numeric value in the example below:\n\nCREATE TABLE t (a VARCHAR(10), b VARCHAR(10), INDEX idx_a (a));\n\nINSERT INTO t VALUES \n (\'1\', \'1\'), (\'2\', \'2\'), (\'3\', \'3\'),\n (\'4\', \'4\'), (\'5\', \'5\'), (\'1\', \'5\');\n\nEXPLAIN SELECT * FROM t WHERE a = \'3\' \\G\n*************************** 1. row ***************************\n id: 1\n select_type: SIMPLE\n table: t\n type: ref\npossible_keys: idx_a\n key: idx_a\n key_len: 13\n ref: const\n rows: 1\n Extra: Using index condition\n\nEXPLAIN SELECT * FROM t WHERE a = 3 \\G\n*************************** 1. row ***************************\n id: 1\n select_type: SIMPLE\n table: t\n type: ALL\npossible_keys: idx_a\n key: NULL\n key_len: NULL\n ref: NULL\n rows: 6\n Extra: Using where\n\nRules for Conversion on Dyadic Arithmetic Operations\n----------------------------------------------------\n\nImplicit type conversion also takes place on dyadic arithmetic operations\n(+,-,*,/). MariaDB chooses the minimum data type that is guaranteed to fit the\nresult and converts both arguments to the result data type.\n\nFor addition (+), subtraction (-) and multiplication (*), the result data type\nis chosen as follows:\n\n* If either of the arguments is an approximate number (float, double), the\nresult is double.\n* If either of the arguments is a string (char, varchar, text), the result is\ndouble.\n* If either of the arguments is a decimal number, the result is decimal.\n* If either of the arguments is of a temporal type with a non-zero fractional\nsecond precision (time(N), datetime(N), timestamp(N)), the result is decimal.\n* If either of the arguments is of a temporal type with a zero fractional\nsecond precision (time(0), date, datetime(0), timestamp(0)), the result may\nvary between int, int unsigned, bigint or bigint unsigned, depending on the\nexact data type combination.\n* If both arguments are integer numbers (tinyint, smallint, mediumint,\nbigint), the result may vary between int, int unsigned, bigint or bigint\nunsigned, depending of the exact data types and their signs.\n\nFor division (/), the result data type is chosen as follows:\n\n* If either of the arguments is an approximate number (float, double), the\nresult is double.\n* If either of the arguments is a string (char, varchar, text), the result is\ndouble.\n* Otherwise, the result is decimal.\n\nArithmetic Examples\n-------------------\n\nNote, the above rules mean that when an argument of a temporal data type\nappears in addition or subtraction, it\'s treated as a number by default.\n\nSELECT TIME\'10:20:30\' + 1;\n+--------------------+\n| TIME\'10:20:30\' + 1 |\n+--------------------+\n| 102031 |\n+--------------------+\n\nIn order to do temporal addition or subtraction instead, use the DATE_ADD() or\nDATE_SUB() functions, or an INTERVAL expression as the second argument:\n\nSELECT TIME\'10:20:30\' + INTERVAL 1 SECOND;\n+------------------------------------+\n| TIME\'10:20:30\' + INTERVAL 1 SECOND |\n+------------------------------------+\n| 10:20:31 |\n+------------------------------------+\n\nSELECT \"2.2\" + 3;\n+-----------+\n| \"2.2\" + 3 |\n+-----------+\n| 5.2 |\n+-----------+\n\nSELECT 2.2 + 3;\n+---------+\n| 2.2 + 3 |\n+---------+\n| 5.2 |\n+---------+\n\nSELECT 2.2 / 3;\n+---------+\n| 2.2 / 3 |\n+---------+\n| 0.73333 |\n+---------+\n\nSELECT \"2.2\" / 3;\n+--------------------+\n| \"2.2\" / 3 |\n+--------------------+\n| 0.7333333333333334 |\n+--------------------+\n\nURL: https://mariadb.com/kb/en/type-conversion/','','https://mariadb.com/kb/en/type-conversion/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (694,37,'_rowid','Syntax\n------\n\n_rowid\n\nDescription\n-----------\n\nThe _rowid pseudo column is mapped to the primary key in the related table.\nThis can be used as a replacement of the rowid pseudo column in other\ndatabases. Another usage is to simplify sql queries as one doesn\'t have to\nknow the name of the primary key.\n\nExamples\n--------\n\ncreate table t1 (a int primary key, b varchar(80));\ninsert into t1 values (1,\"one\"),(2,\"two\");\nselect * from t1 where _rowid=1;\n\n+---+------+\n| a | b |\n+---+------+\n| 1 | one |\n+---+------+\n\nupdate t1 set b=\"three\" where _rowid=2;\nselect * from t1 where _rowid>=1 and _rowid<=10;\n\n+---+-------+\n| a | b |\n+---+-------+\n| 1 | one |\n| 2 | three |\n+---+-------+\n\nURL: https://mariadb.com/kb/en/_rowid/','','https://mariadb.com/kb/en/_rowid/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (695,38,'ALTER TABLE','Syntax\n------\n\nALTER [ONLINE] [IGNORE] TABLE [IF EXISTS] tbl_name\n [WAIT n | NOWAIT]\n alter_specification [, alter_specification] ...\nalter_specification:\n table_option ...\n | ADD [COLUMN] [IF NOT EXISTS] col_name column_definition\n [FIRST | AFTER col_name ]\n | ADD [COLUMN] [IF NOT EXISTS] (col_name column_definition,...)\n | ADD {INDEX|KEY} [IF NOT EXISTS] [index_name]\n [index_type] (index_col_name,...) [index_option] ...\n | ADD [CONSTRAINT [symbol]] PRIMARY KEY\n [index_type] (index_col_name,...) [index_option] ...\n | ADD [CONSTRAINT [symbol]]\n UNIQUE [INDEX|KEY] [index_name]\n [index_type] (index_col_name,...) [index_option] ...\n | ADD FULLTEXT [INDEX|KEY] [index_name]\n (index_col_name,...) [index_option] ...\n | ADD SPATIAL [INDEX|KEY] [index_name]\n (index_col_name,...) [index_option] ...\n | ADD [CONSTRAINT [symbol]]\n FOREIGN KEY [IF NOT EXISTS] [index_name] (index_col_name,...)\n reference_definition\n | ADD PERIOD FOR SYSTEM_TIME (start_column_name, end_column_name)\n | ALTER [COLUMN] col_name SET DEFAULT literal | (expression)\n | ALTER [COLUMN] col_name DROP DEFAULT\n | ALTER {INDEX|KEY} index_name [NOT] INVISIBLE\n | CHANGE [COLUMN] [IF EXISTS] old_col_name new_col_name column_definition\n [FIRST|AFTER col_name]\n | MODIFY [COLUMN] [IF EXISTS] col_name column_definition\n [FIRST | AFTER col_name]\n | DROP [COLUMN] [IF EXISTS] col_name [RESTRICT|CASCADE]\n | DROP PRIMARY KEY\n | DROP {INDEX|KEY} [IF EXISTS] index_name\n | DROP FOREIGN KEY [IF EXISTS] fk_symbol\n | DROP CONSTRAINT [IF EXISTS] constraint_name\n | DISABLE KEYS\n | ENABLE KEYS\n | RENAME [TO] new_tbl_name\n | ORDER BY col_name [, col_name] ...\n | RENAME COLUMN old_col_name TO new_col_name\n | RENAME {INDEX|KEY} old_index_name TO new_index_name\n | CONVERT TO CHARACTER SET charset_name [COLLATE collation_name]\n | [DEFAULT] CHARACTER SET [=] charset_name\n | [DEFAULT] COLLATE [=] collation_name\n | DISCARD TABLESPACE\n | IMPORT TABLESPACE\n | ALGORITHM [=] {DEFAULT|INPLACE|COPY|NOCOPY|INSTANT}\n | LOCK [=] {DEFAULT|NONE|SHARED|EXCLUSIVE}\n | FORCE\n | partition_options\n | ADD PARTITION [IF NOT EXISTS] (partition_definition)\n | DROP PARTITION [IF EXISTS] partition_names\n | COALESCE PARTITION number\n | REORGANIZE PARTITION [partition_names INTO (partition_definitions)]\n | ANALYZE PARTITION partition_names\n | CHECK PARTITION partition_names\n | OPTIMIZE PARTITION partition_names\n | REBUILD PARTITION partition_names\n | REPAIR PARTITION partition_names\n | EXCHANGE PARTITION partition_name WITH TABLE tbl_name\n | REMOVE PARTITIONING\n | ADD SYSTEM VERSIONING\n | DROP SYSTEM VERSIONING\nindex_col_name:\n col_name [(length)] [ASC | DESC]\nindex_type:\n USING {BTREE | HASH | RTREE}\nindex_option:\n [ KEY_BLOCK_SIZE [=] value\n | index_type\n | WITH PARSER parser_name\n | COMMENT \'string\'\n | CLUSTERING={YES| NO} ]\n [ IGNORED | NOT IGNORED ]\ntable_options:\n table_option [[,] table_option] ...\n\nDescription\n-----------\n\nALTER TABLE enables you to change the structure of an existing table. For\nexample, you can add or delete columns, create or destroy indexes, change the\ntype of existing columns, or rename columns or the table itself. You can also\nchange the comment for the table and the storage engine of the table.\n\nIf another connection is using the table, a metadata lock is active, and this\nstatement will wait until the lock is released. This is also true for\nnon-transactional tables.\n\nWhen adding a UNIQUE index on a column (or a set of columns) which have\nduplicated values, an error will be produced and the statement will be\nstopped. To suppress the error and force the creation of UNIQUE indexes,\ndiscarding duplicates, the IGNORE option can be specified. This can be useful\nif a column (or a set of columns) should be UNIQUE but it contains duplicate\nvalues; however, this technique provides no control on which rows are\npreserved and which are deleted. Also, note that IGNORE is accepted but\nignored in ALTER TABLE ... EXCHANGE PARTITION statements.\n\nThis statement can also be used to rename a table. For details see RENAME\nTABLE.\n\nWhen an index is created, the storage engine may use a configurable buffer in\nthe process. Incrementing the buffer speeds up the index creation. Aria and\nMyISAM allocate a buffer whose size is defined by aria_sort_buffer_size or\nmyisam_sort_buffer_size, also used for REPAIR TABLE. InnoDB allocates three\nbuffers whose size is defined by innodb_sort_buffer_size.\n\nPrivileges\n----------\n\nExecuting the ALTER TABLE statement generally requires at least the ALTER\nprivilege for the table or the database..\n\nIf you are renaming a table, then it also requires the DROP, CREATE and INSERT\nprivileges for the table or the database as well.\n\nOnline DDL\n----------\n\nOnline DDL is supported with the ALGORITHM and LOCK clauses.\n\nSee InnoDB Online DDL Overview for more information on online DDL with InnoDB.\n\nALTER ONLINE TABLE\n------------------\n\nALTER ONLINE TABLE also works for partitioned tables.\n\nOnline ALTER TABLE is available by executing the following:\n\nALTER ONLINE TABLE ...;\n\nThis statement has the following semantics:\n\nThis statement is equivalent to the following:\n\nALTER TABLE ... LOCK=NONE;\n\nSee the LOCK alter specification for more information.\n\nThis statement is equivalent to the following:\n\nALTER TABLE ... ALGORITHM=INPLACE;\n\nSee the ALGORITHM alter specification for more information.\n\nWAIT/NOWAIT\n-----------\n\nMariaDB starting with 10.3.0\n----------------------------\nSet the lock wait timeout. See WAIT and NOWAIT.\n\nIF EXISTS\n---------\n\nThe IF EXISTS and IF NOT EXISTS clauses are available for the following:\n\nADD COLUMN [IF NOT EXISTS]\nADD INDEX [IF NOT EXISTS]\nADD FOREIGN KEY [IF NOT EXISTS]\nADD PARTITION [IF NOT EXISTS]\nCREATE INDEX [IF NOT EXISTS]\nDROP COLUMN [IF EXISTS]\nDROP INDEX [IF EXISTS]\nDROP FOREIGN KEY [IF EXISTS]\nDROP PARTITION [IF EXISTS]\nCHANGE COLUMN [IF EXISTS]\nMODIFY COLUMN [IF EXISTS]\nDROP INDEX [IF EXISTS]\nWhen IF EXISTS and IF NOT EXISTS are used in clauses, queries will not report\nerrors when the condition is triggered for that clause. A warning with the\nsame message text will be issued and the ALTER will move on to the next clause\nin the statement (or end if finished).\n\nMariaDB starting with 10.5.2\n----------------------------\nIf this is directive is used after ALTER ... TABLE, one will not get an error\nif the table doesn\'t exist.\n\nColumn Definitions\n------------------\n\nSee CREATE TABLE: Column Definitions for information about column definitions.\n\nIndex Definitions\n-----------------\n\nSee CREATE TABLE: Index Definitions for information about index definitions.\n\nThe CREATE INDEX and DROP INDEX statements can also be used to add or remove\nan index.\n\nCharacter Sets and Collations\n-----------------------------\n\nCONVERT TO CHARACTER SET charset_name [COLLATE collation_name]\n[DEFAULT] CHARACTER SET [=] charset_name\n[DEFAULT] COLLATE [=] collation_name\nSee Setting Character Sets and Collations for details on setting the character\nsets and collations.\n\nAlter Specifications\n--------------------\n\nTable Options\n-------------\n\nSee CREATE TABLE: Table Options for information about table options.\n\nADD COLUMN\n----------\n\n... ADD COLUMN [IF NOT EXISTS] (col_name column_definition,...)\nAdds a column to the table. The syntax is the same as in CREATE TABLE. If you\nare using IF NOT_EXISTS the column will not be added if it was not there\nalready. This is very useful when doing scripts to modify tables.\n\nThe FIRST and AFTER clauses affect the physical order of columns in the\ndatafile. Use FIRST to add a column in the first (leftmost) position, or AFTER\nfollowed by a column name to add the new column in any other position. Note\nthat, nowadays, the physical position of a column is usually irrelevant.\n\nSee also Instant ADD COLUMN for InnoDB.\n\nDROP COLUMN\n-----------\n\n... DROP COLUMN [IF EXISTS] col_name [CASCADE|RESTRICT]\nDrops the column from the table. If you are using IF EXISTS you will not get\nan error if the column didn\'t exist. If the column is part of any index, the\ncolumn will be dropped from them, except if you add a new column with\nidentical name at the same time. The index will be dropped if all columns from\nthe index were dropped. If the column was used in a view or trigger, you will\nget an error next time the view or trigger is accessed.\n\nMariaDB starting with 10.2.8\n----------------------------\nDropping a column that is part of a multi-column UNIQUE constraint is not\npermitted. For example:\n\nCREATE TABLE a (\n a int,\n b int,\n primary key (a,b)\n);\n\nALTER TABLE x DROP COLUMN a;\n[42000][1072] Key column \'A\' doesn\'t exist in table\n\nThe reason is that dropping column a would result in the new constraint that\nall values in column b be unique. In order to drop the column, an explicit\nDROP PRIMARY KEY and ADD PRIMARY KEY would be required. Up until MariaDB\n10.2.7, the column was dropped and the additional constraint applied,\nresulting in the following structure:\n\nALTER TABLE x DROP COLUMN a;\nQuery OK, 0 rows affected (0.46 sec)\n\nDESC x;\n+-------+---------+------+-----+---------+-------+\n| Field | Type | Null | Key | Default | Extra |\n+-------+---------+------+-----+---------+-------+\n| b | int(11) | NO | PRI | NULL | |\n+-------+---------+------+-----+---------+-------+\n\nMariaDB starting with 10.4.0\n----------------------------\nMariaDB 10.4.0 supports instant DROP COLUMN. DROP COLUMN of an indexed column\nwould imply DROP INDEX (and in the case of a non-UNIQUE multi-column index,\npossibly ADD INDEX). These will not be allowed with ALGORITHM=INSTANT, but\nunlike before, they can be allowed with ALGORITHM=NOCOPY\n\nRESTRICT and CASCADE are allowed to make porting from other database systems\neasier. In MariaDB, they do nothing.\n\nMODIFY COLUMN\n-------------\n\nAllows you to modify the type of a column. The column will be at the same\nplace as the original column and all indexes on the column will be kept. Note\nthat when modifying column, you should specify all attributes for the new\ncolumn.\n\nCREATE TABLE t1 (a INT UNSIGNED AUTO_INCREMENT, PRIMARY KEY((a));\nALTER TABLE t1 MODIFY a BIGINT UNSIGNED AUTO_INCREMENT;\n\nCHANGE COLUMN\n-------------\n\nWorks like MODIFY COLUMN except that you can also change the name of the\ncolumn. The column will be at the same place as the original column and all\nindex on the column will be kept.\n\nCREATE TABLE t1 (a INT UNSIGNED AUTO_INCREMENT, PRIMARY KEY(a));\nALTER TABLE t1 CHANGE a b BIGINT UNSIGNED AUTO_INCREMENT;\n\nALTER COLUMN\n------------\n\nThis lets you change column options.\n\nCREATE TABLE t1 (a INT UNSIGNED AUTO_INCREMENT, b varchar(50), PRIMARY KEY(a));\nALTER TABLE t1 ALTER b SET DEFAULT \'hello\';\n\nRENAME INDEX/KEY\n----------------\n\nMariaDB starting with 10.5.2\n----------------------------\nFrom MariaDB 10.5.2, it is possible to rename an index using the RENAME INDEX\n(or RENAME KEY) syntax, for example:\n\nALTER TABLE t1 RENAME INDEX i_old TO i_new;\n\nRENAME COLUMN\n-------------\n\nMariaDB starting with 10.5.2\n----------------------------\nFrom MariaDB 10.5.2, it is possible to rename a column using the RENAME COLUMN\nsyntax, for example:\n\nALTER TABLE t1 RENAME COLUMN c_old TO c_new;\n\nADD PRIMARY KEY\n---------------\n\nAdd a primary key.\n\nFor PRIMARY KEY indexes, you can specify a name for the index, but it is\nsilently ignored, and the name of the index is always PRIMARY.\n\nSee Getting Started with Indexes: Primary Key for more information.\n\nDROP PRIMARY KEY\n----------------\n\nDrop a primary key.\n\nFor PRIMARY KEY indexes, you can specify a name for the index, but it is\nsilently ignored, and the name of the index is always PRIMARY.\n\nSee Getting Started with Indexes: Primary Key for more information.\n\nADD FOREIGN KEY\n---------------\n\nAdd a foreign key.\n\nFor FOREIGN KEY indexes, a reference definition must be provided.\n\nFor FOREIGN KEY indexes, you can specify a name for the constraint, using the\nCONSTRAINT keyword. That name will be used in error messages.\n\nFirst, you have to specify the name of the target (parent) table and a column\nor a column list which must be indexed and whose values must match to the\nforeign key\'s values. The MATCH clause is accepted to improve the\ncompatibility with other DBMS\'s, but has no meaning in MariaDB. The ON DELETE\nand ON UPDATE clauses specify what must be done when a DELETE (or a REPLACE)\nstatements attempts to delete a referenced row from the parent table, and when\nan UPDATE statement attempts to modify the referenced foreign key columns in a\nparent table row, respectively. The following options are allowed:\n\n* RESTRICT: The delete/update operation is not performed. The statement\nterminates with a 1451 error (SQLSTATE \'2300\').\n* NO ACTION: Synonym for RESTRICT.\n* CASCADE: The delete/update operation is performed in both tables.\n* SET NULL: The update or delete goes ahead in the parent table, and the\ncorresponding foreign key fields in the child table are set to NULL. (They\nmust not be defined as NOT NULL for this to succeed).\n* SET DEFAULT: This option is implemented only for the legacy PBXT storage\nengine, which is disabled by default and no longer maintained. It sets the\nchild table\'s foreign key fields to their DEFAULT values when the referenced\nparent table key entries are updated or deleted.\n\nIf either clause is omitted, the default behavior for the omitted clause is\nRESTRICT.\n\nSee Foreign Keys for more information.\n\nDROP FOREIGN KEY\n----------------\n\nDrop a foreign key.\n\nSee Foreign Keys for more information.\n\nADD INDEX\n---------\n\nAdd a plain index.\n\nPlain indexes are regular indexes that are not unique, and are not acting as a\nprimary key or a foreign key. They are also not the \"specialized\" FULLTEXT or\nSPATIAL indexes.\n\nSee Getting Started with Indexes: Plain Indexes for more information.\n\nDROP INDEX\n----------\n\nDrop a plain index.\n\nPlain indexes are regular indexes that are not unique, and are not acting as a\nprimary key or a foreign key. They are also not the \"specialized\" FULLTEXT or\nSPATIAL indexes.\n\nSee Getting Started with Indexes: Plain Indexes for more information.\n\nADD UNIQUE INDEX\n----------------\n\nAdd a unique index.\n\nThe UNIQUE keyword means that the index will not accept duplicated values,','','https://mariadb.com/kb/en/alter-table/');
-update help_topic set description = CONCAT(description, '\nexcept for NULLs. An error will raise if you try to insert duplicate values in\na UNIQUE index.\n\nFor UNIQUE indexes, you can specify a name for the constraint, using the\nCONSTRAINT keyword. That name will be used in error messages.\n\nSee Getting Started with Indexes: Unique Index for more information.\n\nDROP UNIQUE INDEX\n-----------------\n\nDrop a unique index.\n\nThe UNIQUE keyword means that the index will not accept duplicated values,\nexcept for NULLs. An error will raise if you try to insert duplicate values in\na UNIQUE index.\n\nFor UNIQUE indexes, you can specify a name for the constraint, using the\nCONSTRAINT keyword. That name will be used in error messages.\n\nSee Getting Started with Indexes: Unique Index for more information.\n\nADD FULLTEXT INDEX\n------------------\n\nAdd a FULLTEXT index.\n\nSee Full-Text Indexes for more information.\n\nDROP FULLTEXT INDEX\n-------------------\n\nDrop a FULLTEXT index.\n\nSee Full-Text Indexes for more information.\n\nADD SPATIAL INDEX\n-----------------\n\nAdd a SPATIAL index.\n\nSee SPATIAL INDEX for more information.\n\nDROP SPATIAL INDEX\n------------------\n\nDrop a SPATIAL index.\n\nSee SPATIAL INDEX for more information.\n\nENABLE/ DISABLE KEYS\n--------------------\n\nDISABLE KEYS will disable all non unique keys for the table for storage\nengines that support this (at least MyISAM and Aria). This can be used to\nspeed up inserts into empty tables.\n\nENABLE KEYS will enable all disabled keys.\n\nRENAME TO\n---------\n\nRenames the table. See also RENAME TABLE.\n\nADD CONSTRAINT\n--------------\n\nModifies the table adding a constraint on a particular column or columns.\n\nMariaDB starting with 10.2.1\n----------------------------\nMariaDB 10.2.1 introduced new ways to define a constraint.\n\nNote: Before MariaDB 10.2.1, constraint expressions were accepted in syntax,\nbut ignored.\n\nALTER TABLE table_name \nADD CONSTRAINT [constraint_name] CHECK(expression);\nBefore a row is inserted or updated, all constraints are evaluated in the\norder they are defined. If any constraint fails, then the row will not be\nupdated. One can use most deterministic functions in a constraint, including\nUDF\'s.\n\nCREATE TABLE account_ledger (\n id INT PRIMARY KEY AUTO_INCREMENT,\n transaction_name VARCHAR(100),\n credit_account VARCHAR(100),\n credit_amount INT,\n debit_account VARCHAR(100),\n debit_amount INT);\n\nALTER TABLE account_ledger \nADD CONSTRAINT is_balanced \n CHECK((debit_amount + credit_amount) = 0);\n\nThe constraint_name is optional. If you don\'t provide one in the ALTER TABLE\nstatement, MariaDB auto-generates a name for you. This is done so that you can\nremove it later using DROP CONSTRAINT clause.\n\nYou can disable all constraint expression checks by setting the variable\ncheck_constraint_checks to OFF. You may find this useful when loading a table\nthat violates some constraints that you want to later find and fix in SQL.\n\nTo view constraints on a table, query information_schema.TABLE_CONSTRAINTS:\n\nSELECT CONSTRAINT_NAME, TABLE_NAME, CONSTRAINT_TYPE \nFROM information_schema.TABLE_CONSTRAINTS\nWHERE TABLE_NAME = \'account_ledger\';\n\n+-----------------+----------------+-----------------+\n| CONSTRAINT_NAME | TABLE_NAME | CONSTRAINT_TYPE |\n+-----------------+----------------+-----------------+\n| is_balanced | account_ledger | CHECK |\n+-----------------+----------------+-----------------+\n\nDROP CONSTRAINT\n---------------\n\nMariaDB starting with 10.2.22\n-----------------------------\nDROP CONSTRAINT for UNIQUE and FOREIGN KEY constraints was introduced in\nMariaDB 10.2.22 and MariaDB 10.3.13.\n\nMariaDB starting with 10.2.1\n----------------------------\nDROP CONSTRAINT for CHECK constraints was introduced in MariaDB 10.2.1\n\nModifies the table, removing the given constraint.\n\nALTER TABLE table_name\nDROP CONSTRAINT constraint_name;\n\nWhen you add a constraint to a table, whether through a CREATE TABLE or ALTER\nTABLE...ADD CONSTRAINT statement, you can either set a constraint_name\nyourself, or allow MariaDB to auto-generate one for you. To view constraints\non a table, query information_schema.TABLE_CONSTRAINTS. For instance,\n\nCREATE TABLE t (\n a INT,\n b INT,\n c INT,\n CONSTRAINT CHECK(a > b),\n CONSTRAINT check_equals CHECK(a = c));\n\nSELECT CONSTRAINT_NAME, TABLE_NAME, CONSTRAINT_TYPE \nFROM information_schema.TABLE_CONSTRAINTS\nWHERE TABLE_NAME = \'t\';\n\n+-----------------+----------------+-----------------+\n| CONSTRAINT_NAME | TABLE_NAME | CONSTRAINT_TYPE |\n+-----------------+----------------+-----------------+\n| check_equals | t | CHECK |\n| CONSTRAINT_1 | t | CHECK |\n+-----------------+----------------+-----------------+\n\nTo remove a constraint from the table, issue an ALTER TABLE...DROP CONSTRAINT\nstatement. For example,\n\nALTER TABLE t DROP CONSTRAINT is_unique;\n\nADD SYSTEM VERSIONING\n---------------------\n\nMariaDB starting with 10.3.4\n----------------------------\nSystem-versioned tables was added in MariaDB 10.3.4.\n\nAdd system versioning.\n\nDROP SYSTEM VERSIONING\n----------------------\n\nMariaDB starting with 10.3.4\n----------------------------\nSystem-versioned tables was added in MariaDB 10.3.4.\n\nDrop system versioning.\n\nADD PERIOD FOR SYSTEM_TIME\n--------------------------\n\nMariaDB starting with 10.3.4\n----------------------------\nSystem-versioned tables was added in MariaDB 10.3.4.\n\nFORCE\n-----\n\nALTER TABLE ... FORCE can force MariaDB to re-build the table.\n\nIn MariaDB 5.5 and before, this could only be done by setting the ENGINE table\noption to its old value. For example, for an InnoDB table, one could execute\nthe following:\n\nALTER TABLE tab_name ENGINE = InnoDB;\n\nThe FORCE option can be used instead. For example, :\n\nALTER TABLE tab_name FORCE;\n\nWith InnoDB, the table rebuild will only reclaim unused space (i.e. the space\npreviously used for deleted rows) if the innodb_file_per_table system variable\nis set to ON (the default). If the system variable is OFF, then the space will\nnot be reclaimed, but it will be-re-used for new data that\'s later added.\n\nEXCHANGE PARTITION\n------------------\n\nThis is used to exchange the contents of a partition with another table.\n\nThis is performed by swapping the tablespaces of the partition with the other\ntable.\n\nSee copying InnoDB\'s transportable tablespaces for more information.\n\nDISCARD TABLESPACE\n------------------\n\nThis is used to discard an InnoDB table\'s tablespace.\n\nSee copying InnoDB\'s transportable tablespaces for more information.\n\nIMPORT TABLESPACE\n-----------------\n\nThis is used to import an InnoDB table\'s tablespace. The tablespace should\nhave been copied from its original server after executing FLUSH TABLES FOR\nEXPORT.\n\nSee copying InnoDB\'s transportable tablespaces for more information.\n\nALTER TABLE ... IMPORT only applies to InnoDB tables. Most other popular\nstorage engines, such as Aria and MyISAM, will recognize their data files as\nsoon as they\'ve been placed in the proper directory under the datadir, and no\nspecial DDL is required to import them.\n\nALGORITHM\n---------\n\nThe ALTER TABLE statement supports the ALGORITHM clause. This clause is one of\nthe clauses that is used to implement online DDL. ALTER TABLE supports several\ndifferent algorithms. An algorithm can be explicitly chosen for an ALTER TABLE\noperation by setting the ALGORITHM clause. The supported values are:\n\n* ALGORITHM=DEFAULT - This implies the default behavior for the specific\nstatement, such as if no ALGORITHM clause is specified.\n* ALGORITHM=COPY\n* ALGORITHM=INPLACE\n* ALGORITHM=NOCOPY - This was added in MariaDB 10.3.7.\n* ALGORITHM=INSTANT - This was added in MariaDB 10.3.7.\n\nSee InnoDB Online DDL Overview: ALGORITHM for information on how the ALGORITHM\nclause affects InnoDB.\n\nALGORITHM=DEFAULT\n-----------------\n\nThe default behavior, which occurs if ALGORITHM=DEFAULT is specified, or if\nALGORITHM is not specified at all, usually only makes a copy if the operation\ndoesn\'t support being done in-place at all. In this case, the most efficient\navailable algorithm will usually be used.\n\nHowever, in MariaDB 10.3.6 and before, if the value of the old_alter_table\nsystem variable is set to ON, then the default behavior is to perform ALTER\nTABLE operations by making a copy of the table using the old algorithm.\n\nIn MariaDB 10.3.7 and later, the old_alter_table system variable is\ndeprecated. Instead, the alter_algorithm system variable defines the default\nalgorithm for ALTER TABLE operations.\n\nALGORITHM=COPY\n--------------\n\nALGORITHM=COPY is the name for the original ALTER TABLE algorithm from early\nMariaDB versions.\n\nWhen ALGORITHM=COPY is set, MariaDB essentially does the following operations:\n\n-- Create a temporary table with the new definition\nCREATE TEMPORARY TABLE tmp_tab (\n...\n);\n\n-- Copy the data from the original table\nINSERT INTO tmp_tab\n SELECT * FROM original_tab;\n\n-- Drop the original table\nDROP TABLE original_tab;\n\n-- Rename the temporary table, so that it replaces the original one\nRENAME TABLE tmp_tab TO original_tab;\n\nThis algorithm is very inefficient, but it is generic, so it works for all\nstorage engines.\n\nIf ALGORITHM=COPY is specified, then the copy algorithm will be used even if\nit is not necessary. This can result in a lengthy table copy. If multiple\nALTER TABLE operations are required that each require the table to be rebuilt,\nthen it is best to specify all operations in a single ALTER TABLE statement,\nso that the table is only rebuilt once.\n\nALGORITHM=INPLACE\n-----------------\n\nALGORITHM=COPY can be incredibly slow, because the whole table has to be\ncopied and rebuilt. ALGORITHM=INPLACE was introduced as a way to avoid this by\nperforming operations in-place and avoiding the table copy and rebuild, when\npossible.\n\nWhen ALGORITHM=INPLACE is set, the underlying storage engine uses\noptimizations to perform the operation while avoiding the table copy and\nrebuild. However, INPLACE is a bit of a misnomer, since some operations may\nstill require the table to be rebuilt for some storage engines. Regardless,\nseveral operations can be performed without a full copy of the table for some\nstorage engines.\n\nA more accurate name would have been ALGORITHM=ENGINE, where ENGINE refers to\nan \"engine-specific\" algorithm.\n\nIf an ALTER TABLE operation supports ALGORITHM=INPLACE, then it can be\nperformed using optimizations by the underlying storage engine, but it may\nrebuilt.\n\nSee InnoDB Online DDL Operations with ALGORITHM=INPLACE for more.\n\nALGORITHM=NOCOPY\n----------------\n\nALGORITHM=NOCOPY was introduced in MariaDB 10.3.7.\n\nALGORITHM=INPLACE can sometimes be surprisingly slow in instances where it has\nto rebuild the clustered index, because when the clustered index has to be\nrebuilt, the whole table has to be rebuilt. ALGORITHM=NOCOPY was introduced as\na way to avoid this.\n\nIf an ALTER TABLE operation supports ALGORITHM=NOCOPY, then it can be\nperformed without rebuilding the clustered index.\n\nIf ALGORITHM=NOCOPY is specified for an ALTER TABLE operation that does not\nsupport ALGORITHM=NOCOPY, then an error will be raised. In this case, raising\nan error is preferable, if the alternative is for the operation to rebuild the\nclustered index, and perform unexpectedly slowly.\n\nSee InnoDB Online DDL Operations with ALGORITHM=NOCOPY for more.\n\nALGORITHM=INSTANT\n-----------------\n\nALGORITHM=INSTANT was introduced in MariaDB 10.3.7.\n\nALGORITHM=INPLACE can sometimes be surprisingly slow in instances where it has\nto modify data files. ALGORITHM=INSTANT was introduced as a way to avoid this.\n\nIf an ALTER TABLE operation supports ALGORITHM=INSTANT, then it can be\nperformed without modifying any data files.\n\nIf ALGORITHM=INSTANT is specified for an ALTER TABLE operation that does not\nsupport ALGORITHM=INSTANT, then an error will be raised. In this case, raising\nan error is preferable, if the alternative is for the operation to modify data\nfiles, and perform unexpectedly slowly.\n\nSee InnoDB Online DDL Operations with ALGORITHM=INSTANT for more.\n\nLOCK\n----\n\nThe ALTER TABLE statement supports the LOCK clause. This clause is one of the\nclauses that is used to implement online DDL. ALTER TABLE supports several\ndifferent locking strategies. A locking strategy can be explicitly chosen for\nan ALTER TABLE operation by setting the LOCK clause. The supported values are:\n\n* DEFAULT: Acquire the least restrictive lock on the table that is supported\nfor the specific operation. Permit the maximum amount of concurrency that is\nsupported for the specific operation.\n* NONE: Acquire no lock on the table. Permit all concurrent DML. If this\nlocking strategy is not permitted for an operation, then an error is raised.\n* SHARED: Acquire a read lock on the table. Permit read-only concurrent DML.\nIf this locking strategy is not permitted for an operation, then an error is\nraised.\n* EXCLUSIVE: Acquire a write lock on the table. Do not permit concurrent DML.\n\nDifferent storage engines support different locking strategies for different\noperations. If a specific locking strategy is chosen for an ALTER TABLE\noperation, and that table\'s storage engine does not support that locking\nstrategy for that specific operation, then an error will be raised.\n\nIf the LOCK clause is not explicitly set, then the operation uses LOCK=DEFAULT.\n\nALTER ONLINE TABLE is equivalent to LOCK=NONE. Therefore, the ALTER ONLINE\nTABLE statement can be used to ensure that your ALTER TABLE operation allows\nall concurrent DML.\n\nSee InnoDB Online DDL Overview: LOCK for information on how the LOCK clause\naffects InnoDB.\n\nProgress Reporting\n------------------\n\nMariaDB provides progress reporting for ALTER TABLE statement for clients that\nsupport the new progress reporting protocol. For example, if you were using\nthe mysql client, then the progress report might look like this::\n\nALTER TABLE test ENGINE=Aria;\nStage: 1 of 2 \'copy to tmp table\' 46% of stage\n\nThe progress report is also shown in the output of the SHOW PROCESSLIST\nstatement and in the contents of the information_schema.PROCESSLIST table.\n\nSee Progress Reporting for more information.\n\nAborting ALTER TABLE Operations\n-------------------------------\n\nIf an ALTER TABLE operation is being performed and the connection is killed,') WHERE help_topic_id = 695;
-update help_topic set description = CONCAT(description, '\nthe changes will be rolled back in a controlled manner. The rollback can be a\nslow operation as the time it takes is relative to how far the operation has\nprogressed.\n\nMariaDB starting with 10.2.13\n-----------------------------\nAborting ALTER TABLE ... ALGORITHM=COPY was made faster by removing excessive\nundo logging (MDEV-11415). This significantly shortens the time it takes to\nabort a running ALTER TABLE operation.\n\nAtomic ALTER TABLE\n------------------\n\nMariaDB starting with 10.6.1\n----------------------------\nFrom MariaDB 10.6, ALTER TABLE is atomic for most engines, including InnoDB,\nMyRocks, MyISAM and Aria (MDEV-25180). This means that if there is a crash\n(server down or power outage) during an ALTER TABLE operation, after recovery,\neither the old table and associated triggers and status will be intact, or the\nnew table will be active.\n\nIn older MariaDB versions one could get leftover #sql-alter..\',\n\'#sql-backup..\' or \'table_name.frmË\' files if the system crashed during the\nALTER TABLE operation.\n\nSee Atomic DDL for more information.\n\nReplication\n-----------\n\nMariaDB starting with 10.8.1\n----------------------------\nBefore MariaDB 10.8.1, ALTER TABLE got fully executed on the primary first,\nand only then was it replicated and started executing on replicas. From\nMariaDB 10.8.1, ALTER TABLE gains an option to replicate sooner and begin\nexecuting on replicas when it merely starts executing on the primary, not when\nit finishes. This way the replication lag caused by a heavy ALTER TABLE can be\ncompletely eliminated (MDEV-11675).\n\nExamples\n--------\n\nAdding a new column:\n\nALTER TABLE t1 ADD x INT;\n\nDropping a column:\n\nALTER TABLE t1 DROP x;\n\nModifying the type of a column:\n\nALTER TABLE t1 MODIFY x bigint unsigned;\n\nChanging the name and type of a column:\n\nALTER TABLE t1 CHANGE a b bigint unsigned auto_increment;\n\nCombining multiple clauses in a single ALTER TABLE statement, separated by\ncommas:\n\nALTER TABLE t1 DROP x, ADD x2 INT, CHANGE y y2 INT;\n\nChanging the storage engine and adding a comment:\n\nALTER TABLE t1 \n ENGINE = InnoDB\n COMMENT = \'First of three tables containing usage info\';\n\nRebuilding the table (the previous example will also rebuild the table if it\nwas already InnoDB):\n\nALTER TABLE t1 FORCE;\n\nDropping an index:\n\nALTER TABLE rooms DROP INDEX u;\n\nAdding a unique index:\n\nALTER TABLE rooms ADD UNIQUE INDEX u(room_number);\n\nFrom MariaDB 10.5.3, adding a primary key for an application-time period table\nwith a WITHOUT OVERLAPS constraint:\n\nALTER TABLE rooms ADD PRIMARY KEY(room_number, p WITHOUT OVERLAPS);\n\nFrom MariaDB 10.8.1, ALTER query can be replicated faster with the setting of\n\nSET @@SESSION.binlog_alter_two_phase = true;\n\nprior the ALTER query. Binlog would contain two event groups\n\n| master-bin.000001 | 495 | Gtid | 1 | 537 | GTID\n0-1-2 START ALTER |\n| master-bin.000001 | 537 | Query | 1 | 655 | use\n`test`; alter table t add column b int, algorithm=inplace |\n| master-bin.000001 | 655 | Gtid | 1 | 700 | GTID\n0-1-3 COMMIT ALTER id=2 |\n| master-bin.000001 | 700 | Query | 1 | 835 | use\n`test`; alter table t add column b int, algorithm=inplace |\n\nof which the first one gets delivered to replicas before ALTER is taken to\nactual execution on the primary.\n\nURL: https://mariadb.com/kb/en/alter-table/') WHERE help_topic_id = 695;
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (696,38,'ALTER DATABASE','Modifies a database, changing its overall characteristics.\n\nSyntax\n------\n\nALTER {DATABASE | SCHEMA} [db_name]\n alter_specification ...\nALTER {DATABASE | SCHEMA} db_name\n UPGRADE DATA DIRECTORY NAME\n\nalter_specification:\n [DEFAULT] CHARACTER SET [=] charset_name\n | [DEFAULT] COLLATE [=] collation_name\n | COMMENT [=] \'comment\'\n\nDescription\n-----------\n\nALTER DATABASE enables you to change the overall characteristics of a\ndatabase. These characteristics are stored in the db.opt file in the database\ndirectory. To use ALTER DATABASE, you need the ALTER privilege on the\ndatabase. ALTER SCHEMA is a synonym for ALTER DATABASE.\n\nThe CHARACTER SET clause changes the default database character set. The\nCOLLATE clause changes the default database collation. See Character Sets and\nCollations for more.\n\nYou can see what character sets and collations are available using,\nrespectively, the SHOW CHARACTER SET and SHOW COLLATION statements.\n\nChanging the default character set/collation of a database does not change the\ncharacter set/collation of any stored procedures or stored functions that were\npreviously created, and relied on the defaults. These need to be dropped and\nrecreated in order to apply the character set/collation changes.\n\nThe database name can be omitted from the first syntax, in which case the\nstatement applies to the default database.\n\nThe syntax that includes the UPGRADE DATA DIRECTORY NAME clause was added in\nMySQL 5.1.23. It updates the name of the directory associated with the\ndatabase to use the encoding implemented in MySQL 5.1 for mapping database\nnames to database directory names (see Identifier to File Name Mapping). This\nclause is for use under these conditions:\n\n* It is intended when upgrading MySQL to 5.1 or later from older versions.\n* It is intended to update a database directory name to the current encoding\nformat if the name contains special characters that need encoding.\n* The statement is used by mysqlcheck (as invoked by mysql_upgrade).\n\nFor example,if a database in MySQL 5.0 has a name of a-b-c, the name contains\ninstance of the `-\' character. In 5.0, the database directory is also named\na-b-c, which is not necessarily safe for all file systems. In MySQL 5.1 and\nup, the same database name is encoded as a@002db@002dc to produce a file\nsystem-neutral directory name.\n\nWhen a MySQL installation is upgraded to MySQL 5.1 or later from an older\nversion,the server displays a name such as a-b-c (which is in the old format)\nas #mysql50#a-b-c, and you must refer to the name using the #mysql50# prefix.\nUse UPGRADE DATA DIRECTORY NAME in this case to explicitly tell the server to\nre-encode the database directory name to the current encoding format:\n\nALTER DATABASE `#mysql50#a-b-c` UPGRADE DATA DIRECTORY NAME;\n\nAfter executing this statement, you can refer to the database as a-b-c without\nthe special #mysql50# prefix.\n\nCOMMENT\n-------\n\nMariaDB starting with 10.5.0\n----------------------------\nFrom MariaDB 10.5.0, it is possible to add a comment of a maximum of 1024\nbytes. If the comment length exceeds this length, a error/warning code 4144 is\nthrown. The database comment is also added to the db.opt file, as well as to\nthe information_schema.schemata table.\n\nExamples\n--------\n\nALTER DATABASE test CHARACTER SET=\'utf8\' COLLATE=\'utf8_bin\';\n\nFrom MariaDB 10.5.0:\n\nALTER DATABASE p COMMENT=\'Presentations\';\n\nURL: https://mariadb.com/kb/en/alter-database/','','https://mariadb.com/kb/en/alter-database/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (697,38,'ALTER EVENT','Modifies one or more characteristics of an existing event.\n\nSyntax\n------\n\nALTER\n [DEFINER = { user | CURRENT_USER }]\n EVENT event_name\n [ON SCHEDULE schedule]\n [ON COMPLETION [NOT] PRESERVE]\n [RENAME TO new_event_name]\n [ENABLE | DISABLE | DISABLE ON SLAVE]\n [COMMENT \'comment\']\n [DO sql_statement]\n\nDescription\n-----------\n\nThe ALTER EVENT statement is used to change one or more of the characteristics\nof an existing event without the need to drop and recreate it. The syntax for\neach of the DEFINER, ON SCHEDULE, ON COMPLETION, COMMENT, ENABLE / DISABLE,\nand DO clauses is exactly the same as when used with CREATE EVENT.\n\nThis statement requires the EVENT privilege. When a user executes a successful\nALTER EVENT statement, that user becomes the definer for the affected event.\n\n(In MySQL 5.1.11 and earlier, an event could be altered only by its definer,\nor by a user having the SUPER privilege.)\n\nALTER EVENT works only with an existing event:\n\nALTER EVENT no_such_event ON SCHEDULE EVERY \'2:3\' DAY_HOUR;\nERROR 1539 (HY000): Unknown event \'no_such_event\'\n\nExamples\n--------\n\nALTER EVENT myevent \n ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 2 HOUR\n DO\n UPDATE myschema.mytable SET mycol = mycol + 1;\n\nURL: https://mariadb.com/kb/en/alter-event/','','https://mariadb.com/kb/en/alter-event/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (698,38,'ALTER FUNCTION','Syntax\n------\n\nALTER FUNCTION func_name [characteristic ...]\n\ncharacteristic:\n { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }\n | SQL SECURITY { DEFINER | INVOKER }\n | COMMENT \'string\'\n\nDescription\n-----------\n\nThis statement can be used to change the characteristics of a stored function.\nMore than one change may be specified in an ALTER FUNCTION statement. However,\nyou cannot change the parameters or body of a stored function using this\nstatement; to make such changes, you must drop and re-create the function\nusing DROP FUNCTION and CREATE FUNCTION.\n\nYou must have the ALTER ROUTINE privilege for the function. (That privilege is\ngranted automatically to the function creator.) If binary logging is enabled,\nthe ALTER FUNCTION statement might also require the SUPER privilege, as\ndescribed in Binary Logging of Stored Routines.\n\nExample\n-------\n\nALTER FUNCTION hello SQL SECURITY INVOKER;\n\nURL: https://mariadb.com/kb/en/alter-function/','','https://mariadb.com/kb/en/alter-function/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (699,38,'ALTER LOGFILE GROUP','Syntax\n------\n\nALTER LOGFILE GROUP logfile_group\n ADD UNDOFILE \'file_name\'\n [INITIAL_SIZE [=] size]\n [WAIT]\n ENGINE [=] engine_name\n\nThe ALTER LOGFILE GROUP statement is not supported by MariaDB. It was\noriginally inherited from MySQL NDB Cluster. See MDEV-19295 for more\ninformation.\n\nURL: https://mariadb.com/kb/en/alter-logfile-group/','','https://mariadb.com/kb/en/alter-logfile-group/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (700,38,'ALTER PROCEDURE','Syntax\n------\n\nALTER PROCEDURE proc_name [characteristic ...]\n\ncharacteristic:\n { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }\n | SQL SECURITY { DEFINER | INVOKER }\n | COMMENT \'string\'\n\nDescription\n-----------\n\nThis statement can be used to change the characteristics of a stored\nprocedure. More than one change may be specified in an ALTER PROCEDURE\nstatement. However, you cannot change the parameters or body of a stored\nprocedure using this statement. To make such changes, you must drop and\nre-create the procedure using either CREATE OR REPLACE PROCEDURE (since\nMariaDB 10.1.3) or DROP PROCEDURE and CREATE PROCEDURE (MariaDB 10.1.2 and\nbefore).\n\nYou must have the ALTER ROUTINE privilege for the procedure. By default, that\nprivilege is granted automatically to the procedure creator. See Stored\nRoutine Privileges.\n\nExample\n-------\n\nALTER PROCEDURE simpleproc SQL SECURITY INVOKER;\n\nURL: https://mariadb.com/kb/en/alter-procedure/','','https://mariadb.com/kb/en/alter-procedure/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (701,38,'ALTER SERVER','Syntax\n------\n\nALTER SERVER server_name\n OPTIONS (option [, option] ...)\n\nDescription\n-----------\n\nAlters the server information for server_name, adjusting the specified options\nas per the CREATE SERVER command. The corresponding fields in the\nmysql.servers table are updated accordingly. This statement requires the SUPER\nprivilege or, from MariaDB 10.5.2, the FEDERATED ADMIN privilege.\n\nALTER SERVER is not written to the binary log, irrespective of the binary log\nformat being used. From MariaDB 10.1.13, Galera replicates the CREATE SERVER,\nALTER SERVER and DROP SERVER statements.\n\nExamples\n--------\n\nALTER SERVER s OPTIONS (USER \'sally\');\n\nURL: https://mariadb.com/kb/en/alter-server/','','https://mariadb.com/kb/en/alter-server/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (702,38,'ALTER TABLESPACE','The ALTER TABLESPACE statement is not supported by MariaDB. It was originally\ninherited from MySQL NDB Cluster. In MySQL 5.7 and later, the statement is\nalso supported for InnoDB. However, MariaDB has chosen not to include that\nspecific feature. See MDEV-19294 for more information.\n\nURL: https://mariadb.com/kb/en/alter-tablespace/','','https://mariadb.com/kb/en/alter-tablespace/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (703,38,'ALTER VIEW','Syntax\n------\n\nALTER\n [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]\n [DEFINER = { user | CURRENT_USER }]\n [SQL SECURITY { DEFINER | INVOKER }]\n VIEW view_name [(column_list)]\n AS select_statement\n [WITH [CASCADED | LOCAL] CHECK OPTION]\n\nDescription\n-----------\n\nThis statement changes the definition of a view, which must exist. The syntax\nis similar to that for CREATE VIEW and the effect is the same as for CREATE OR\nREPLACE VIEW if the view exists. This statement requires the CREATE VIEW and\nDROP privileges for the view, and some privilege for each column referred to\nin the SELECT statement. ALTER VIEW is allowed only to the definer or users\nwith the SUPER privilege.\n\nExample\n-------\n\nALTER VIEW v AS SELECT a, a*3 AS a2 FROM t;\n\nURL: https://mariadb.com/kb/en/alter-view/','','https://mariadb.com/kb/en/alter-view/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (704,38,'CREATE TABLE','Syntax\n------\n\nCREATE [OR REPLACE] [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name\n (create_definition,...) [table_options ]... [partition_options]\nCREATE [OR REPLACE] [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name\n [(create_definition,...)] [table_options ]... [partition_options]\n select_statement\nCREATE [OR REPLACE] [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name\n { LIKE old_table_name | (LIKE old_table_name) }\nselect_statement:\n [IGNORE | REPLACE] [AS] SELECT ... (Some legal select statement)\n\nDescription\n-----------\n\nUse the CREATE TABLE statement to create a table with the given name.\n\nIn its most basic form, the CREATE TABLE statement provides a table name\nfollowed by a list of columns, indexes, and constraints. By default, the table\nis created in the default database. Specify a database with db_name.tbl_name.\nIf you quote the table name, you must quote the database name and table name\nseparately as `db_name`.`tbl_name`. This is particularly useful for CREATE\nTABLE ... SELECT, because it allows to create a table into a database, which\ncontains data from other databases. See Identifier Qualifiers.\n\nIf a table with the same name exists, error 1050 results. Use IF NOT EXISTS to\nsuppress this error and issue a note instead. Use SHOW WARNINGS to see notes.\n\nThe CREATE TABLE statement automatically commits the current transaction,\nexcept when using the TEMPORARY keyword.\n\nFor valid identifiers to use as table names, see Identifier Names.\n\nNote: if the default_storage_engine is set to ColumnStore then it needs\nsetting on all UMs. Otherwise when the tables using the default engine are\nreplicated across UMs they will use the wrong engine. You should therefore not\nuse this option as a session variable with ColumnStore.\n\nMicrosecond precision can be between 0-6. If no precision is specified it is\nassumed to be 0, for backward compatibility reasons.\n\nPrivileges\n----------\n\nExecuting the CREATE TABLE statement requires the CREATE privilege for the\ntable or the database.\n\nCREATE OR REPLACE\n-----------------\n\nIf the OR REPLACE clause is used and the table already exists, then instead of\nreturning an error, the server will drop the existing table and replace it\nwith the newly defined table.\n\nThis syntax was originally added to make replication more robust if it has to\nrollback and repeat statements such as CREATE ... SELECT on replicas.\n\nCREATE OR REPLACE TABLE table_name (a int);\n\nis basically the same as:\n\nDROP TABLE IF EXISTS table_name;\nCREATE TABLE table_name (a int);\n\nwith the following exceptions:\n\n* If table_name was locked with LOCK TABLES it will continue to be locked\nafter the statement.\n* Temporary tables are only dropped if the TEMPORARY keyword was used. (With\nDROP TABLE, temporary tables are preferred to be dropped before normal\ntables).\n\nThings to be Aware of With CREATE OR REPLACE\n--------------------------------------------\n\n* The table is dropped first (if it existed), after that the CREATE is done.\nBecause of this, if the CREATE fails, then the table will not exist anymore\nafter the statement. If the table was used with LOCK TABLES it will be\nunlocked.\n* One can\'t use OR REPLACE together with IF EXISTS.\n* Slaves in replication will by default use CREATE OR REPLACE when replicating\nCREATE statements that don\'\'t use IF EXISTS. This can be changed by setting\nthe variable slave-ddl-exec-mode to STRICT.\n\nCREATE TABLE IF NOT EXISTS\n--------------------------\n\nIf the IF NOT EXISTS clause is used, then the table will only be created if a\ntable with the same name does not already exist. If the table already exists,\nthen a warning will be triggered by default.\n\nCREATE TEMPORARY TABLE\n----------------------\n\nUse the TEMPORARY keyword to create a temporary table that is only available\nto the current session. Temporary tables are dropped when the session ends.\nTemporary table names are specific to the session. They will not conflict with\nother temporary tables from other sessions even if they share the same name.\nThey will shadow names of non-temporary tables or views, if they are\nidentical. A temporary table can have the same name as a non-temporary table\nwhich is located in the same database. In that case, their name will reference\nthe temporary table when used in SQL statements. You must have the CREATE\nTEMPORARY TABLES privilege on the database to create temporary tables. If no\nstorage engine is specified, the default_tmp_storage_engine setting will\ndetermine the engine.\n\nROCKSDB temporary tables cannot be created by setting the\ndefault_tmp_storage_engine system variable, or using CREATE TEMPORARY TABLE\nLIKE. Before MariaDB 10.7, they could be specified, but would silently fail,\nand a MyISAM table would be created instead. From MariaDB 10.7 an error is\nreturned. Explicitly creating a temporary table with ENGINE=ROCKSDB has never\nbeen permitted.\n\nCREATE TABLE ... LIKE\n---------------------\n\nUse the LIKE clause instead of a full table definition to create a table with\nthe same definition as another table, including columns, indexes, and table\noptions. Foreign key definitions, as well as any DATA DIRECTORY or INDEX\nDIRECTORY table options specified on the original table, will not be created.\n\nCREATE TABLE ... SELECT\n-----------------------\n\nYou can create a table containing data from other tables using the CREATE ...\nSELECT statement. Columns will be created in the table for each field returned\nby the SELECT query.\n\nYou can also define some columns normally and add other columns from a SELECT.\nYou can also create columns in the normal way and assign them some values\nusing the query, this is done to force a certain type or other field\ncharacteristics. The columns that are not named in the query will be placed\nbefore the others. For example:\n\nCREATE TABLE test (a INT NOT NULL, b CHAR(10)) ENGINE=MyISAM\n SELECT 5 AS b, c, d FROM another_table;\n\nRemember that the query just returns data. If you want to use the same\nindexes, or the same columns attributes ([NOT] NULL, DEFAULT, AUTO_INCREMENT)\nin the new table, you need to specify them manually. Types and sizes are not\nautomatically preserved if no data returned by the SELECT requires the full\nsize, and VARCHAR could be converted into CHAR. The CAST() function can be\nused to forcee the new table to use certain types.\n\nAliases (AS) are taken into account, and they should always be used when you\nSELECT an expression (function, arithmetical operation, etc).\n\nIf an error occurs during the query, the table will not be created at all.\n\nIf the new table has a primary key or UNIQUE indexes, you can use the IGNORE\nor REPLACE keywords to handle duplicate key errors during the query. IGNORE\nmeans that the newer values must not be inserted an identical value exists in\nthe index. REPLACE means that older values must be overwritten.\n\nIf the columns in the new table are more than the rows returned by the query,\nthe columns populated by the query will be placed after other columns. Note\nthat if the strict SQL_MODE is on, and the columns that are not names in the\nquery do not have a DEFAULT value, an error will raise and no rows will be\ncopied.\n\nConcurrent inserts are not used during the execution of a CREATE ... SELECT.\n\nIf the table already exists, an error similar to the following will be\nreturned:\n\nERROR 1050 (42S01): Table \'t\' already exists\n\nIf the IF NOT EXISTS clause is used and the table exists, a note will be\nproduced instead of an error.\n\nTo insert rows from a query into an existing table, INSERT ... SELECT can be\nused.\n\nColumn Definitions\n------------------\n\ncreate_definition:\n { col_name column_definition | index_definition | period_definition | CHECK\n(expr) }\ncolumn_definition:\n data_type\n [NOT NULL | NULL] [DEFAULT default_value | (expression)]\n [ON UPDATE [NOW | CURRENT_TIMESTAMP] [(precision)]]\n [AUTO_INCREMENT] [ZEROFILL] [UNIQUE [KEY] | [PRIMARY] KEY]\n [INVISIBLE] [{WITH|WITHOUT} SYSTEM VERSIONING]\n [COMMENT \'string\'] [REF_SYSTEM_ID = value]\n [reference_definition]\n | data_type [GENERATED ALWAYS]\n AS { { ROW {START|END} } | { (expression) [VIRTUAL | PERSISTENT | STORED] } }\n [UNIQUE [KEY]] [COMMENT \'string\']\nconstraint_definition:\n CONSTRAINT [constraint_name] CHECK (expression)\nNote: Until MariaDB 10.4, MariaDB accepts the shortcut format with a\nREFERENCES clause only in ALTER TABLE and CREATE TABLE statements, but that\nsyntax does nothing. For example:\n\nCREATE TABLE b(for_key INT REFERENCES a(not_key));\n\nMariaDB simply parses it without returning any error or warning, for\ncompatibility with other DBMS\'s. Before MariaDB 10.2.1 this was also true for\nCHECK constraints. However, only the syntax described below creates foreign\nkeys.\n\nFrom MariaDB 10.5, MariaDB will attempt to apply the constraint. See Foreign\nKeys examples.\n\nEach definition either creates a column in the table or specifies and index or\nconstraint on one or more columns. See Indexes below for details on creating\nindexes.\n\nCreate a column by specifying a column name and a data type, optionally\nfollowed by column options. See Data Types for a full list of data types\nallowed in MariaDB.\n\nNULL and NOT NULL\n-----------------\n\nUse the NULL or NOT NULL options to specify that values in the column may or\nmay not be NULL, respectively. By default, values may be NULL. See also NULL\nValues in MariaDB.\n\nDEFAULT Column Option\n---------------------\n\nMariaDB starting with 10.2.1\n----------------------------\nThe DEFAULT clause was enhanced in MariaDB 10.2.1. Some enhancements include\n\n* BLOB and TEXT columns now support DEFAULT.\n* The DEFAULT clause can now be used with an expression or function.\n\nSpecify a default value using the DEFAULT clause. If you don\'t specify DEFAULT\nthen the following rules apply:\n\n* If the column is not defined with NOT NULL, AUTO_INCREMENT or TIMESTAMP, an\nexplicit DEFAULT NULL will be added.\nNote that in MySQL and in MariaDB before 10.1.6, you may get an explicit\nDEFAULT for primary key parts, if not specified with NOT NULL.\n\nThe default value will be used if you INSERT a row without specifying a value\nfor that column, or if you specify DEFAULT for that column. Before MariaDB\n10.2.1 you couldn\'t usually provide an expression or function to evaluate at\ninsertion time. You had to provide a constant default value instead. The one\nexception is that you may use CURRENT_TIMESTAMP as the default value for a\nTIMESTAMP column to use the current timestamp at insertion time.\n\nCURRENT_TIMESTAMP may also be used as the default value for a DATETIME\n\nFrom MariaDB 10.2.1 you can use most functions in DEFAULT. Expressions should\nhave parentheses around them. If you use a non deterministic function in\nDEFAULT then all inserts to the table will be replicated in row mode. You can\neven refer to earlier columns in the DEFAULT expression (excluding\nAUTO_INCREMENT columns):\n\nCREATE TABLE t1 (a int DEFAULT (1+1), b int DEFAULT (a+1));\nCREATE TABLE t2 (a bigint primary key DEFAULT UUID_SHORT());\n\nThe DEFAULT clause cannot contain any stored functions or subqueries, and a\ncolumn used in the clause must already have been defined earlier in the\nstatement.\n\nSince MariaDB 10.2.1, it is possible to assign BLOB or TEXT columns a DEFAULT\nvalue. In earlier versions, assigning a default to these columns was not\npossible.\n\nMariaDB starting with 10.3.3\n----------------------------\nStarting from 10.3.3 you can also use DEFAULT (NEXT VALUE FOR sequence)\n\nAUTO_INCREMENT Column Option\n----------------------------\n\nUse AUTO_INCREMENT to create a column whose value can can be set automatically\nfrom a simple counter. You can only use AUTO_INCREMENT on a column with an\ninteger type. The column must be a key, and there can only be one\nAUTO_INCREMENT column in a table. If you insert a row without specifying a\nvalue for that column (or if you specify 0, NULL, or DEFAULT as the value),\nthe actual value will be taken from the counter, with each insertion\nincrementing the counter by one. You can still insert a value explicitly. If\nyou insert a value that is greater than the current counter value, the counter\nis set based on the new value. An AUTO_INCREMENT column is implicitly NOT\nNULL. Use LAST_INSERT_ID to get the AUTO_INCREMENT value most recently used by\nan INSERT statement.\n\nZEROFILL Column Option\n----------------------\n\nIf the ZEROFILL column option is specified for a column using a numeric data\ntype, then the column will be set to UNSIGNED and the spaces used by default\nto pad the field are replaced with zeros. ZEROFILL is ignored in expressions\nor as part of a UNION. ZEROFILL is a non-standard MySQL and MariaDB\nenhancement.\n\nPRIMARY KEY Column Option\n-------------------------\n\nUse PRIMARY KEY to make a column a primary key. A primary key is a special\ntype of a unique key. There can be at most one primary key per table, and it\nis implicitly NOT NULL.\n\nSpecifying a column as a unique key creates a unique index on that column. See\nthe Index Definitions section below for more information.\n\nUNIQUE KEY Column Option\n------------------------\n\nUse UNIQUE KEY (or just UNIQUE) to specify that all values in the column must\nbe distinct from each other. Unless the column is NOT NULL, there may be\nmultiple rows with NULL in the column.\n\nSpecifying a column as a unique key creates a unique index on that column. See\nthe Index Definitions section below for more information.\n\nCOMMENT Column Option\n---------------------\n\nYou can provide a comment for each column using the COMMENT clause. The\nmaximum length is 1024 characters. Use the SHOW FULL COLUMNS statement to see\ncolumn comments.\n\nREF_SYSTEM_ID\n-------------\n\nREF_SYSTEM_ID can be used to specify Spatial Reference System IDs for spatial\ndata type columns. For example:\n\nCREATE TABLE t1(g GEOMETRY(9,4) REF_SYSTEM_ID=101);\n\nGenerated Columns\n-----------------\n\nA generated column is a column in a table that cannot explicitly be set to a\nspecific value in a DML query. Instead, its value is automatically generated\nbased on an expression. This expression might generate the value based on the\nvalues of other columns in the table, or it might generate the value by\ncalling built-in functions or user-defined functions (UDFs).\n\nThere are two types of generated columns:\n\n* PERSISTENT or STORED: This type\'s value is actually stored in the table.','','https://mariadb.com/kb/en/create-table/');
-update help_topic set description = CONCAT(description, '\n* VIRTUAL: This type\'s value is not stored at all. Instead, the value is\ngenerated dynamically when the table is queried. This type is the default.\n\nGenerated columns are also sometimes called computed columns or virtual\ncolumns.\n\nFor a complete description about generated columns and their limitations, see\nGenerated (Virtual and Persistent/Stored) Columns.\n\nCOMPRESSED\n----------\n\nMariaDB starting with 10.3.3\n----------------------------\nCertain columns may be compressed. See Storage-Engine Independent Column\nCompression.\n\nINVISIBLE\n---------\n\nMariaDB starting with 10.3.3\n----------------------------\nColumns may be made invisible, and hidden in certain contexts. See Invisible\nColumns.\n\nWITH SYSTEM VERSIONING Column Option\n------------------------------------\n\nMariaDB starting with 10.3.4\n----------------------------\nColumns may be explicitly marked as included from system versioning. See\nSystem-versioned tables for details.\n\nWITHOUT SYSTEM VERSIONING Column Option\n---------------------------------------\n\nMariaDB starting with 10.3.4\n----------------------------\nColumns may be explicitly marked as excluded from system versioning. See\nSystem-versioned tables for details.\n\nIndex Definitions\n-----------------\n\nindex_definition:\n {INDEX|KEY} [index_name] [index_type] (index_col_name,...) [index_option]\n...\n {{{|}}} {FULLTEXT|SPATIAL} [INDEX|KEY] [index_name] (index_col_name,...)\n[index_option] ...\n {{{|}}} [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (index_col_name,...)\n[index_option] ...\n {{{|}}} [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY] [index_name] [index_type]\n(index_col_name,...) [index_option] ...\n {{{|}}} [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name,...)\nreference_definition\n\nindex_col_name:\n col_name [(length)] [ASC | DESC]\n\nindex_type:\n USING {BTREE | HASH | RTREE}\n\nindex_option:\n [ KEY_BLOCK_SIZE [=] value\n {{{|}}} index_type\n {{{|}}} WITH PARSER parser_name\n {{{|}}} COMMENT \'string\'\n {{{|}}} CLUSTERING={YES| NO} ]\n [ IGNORED | NOT IGNORED ]\n\nreference_definition:\n REFERENCES tbl_name (index_col_name,...)\n [MATCH FULL | MATCH PARTIAL | MATCH SIMPLE]\n [ON DELETE reference_option]\n [ON UPDATE reference_option]\n\nreference_option:\n RESTRICT | CASCADE | SET NULL | NO ACTION\n\nINDEX and KEY are synonyms.\n\nIndex names are optional, if not specified an automatic name will be assigned.\nIndex name are needed to drop indexes and appear in error messages when a\nconstraint is violated.\n\nIndex Categories\n----------------\n\nPlain Indexes\n-------------\n\nPlain indexes are regular indexes that are not unique, and are not acting as a\nprimary key or a foreign key. They are also not the \"specialized\" FULLTEXT or\nSPATIAL indexes.\n\nSee Getting Started with Indexes: Plain Indexes for more information.\n\nPRIMARY KEY\n-----------\n\nFor PRIMARY KEY indexes, you can specify a name for the index, but it is\nignored, and the name of the index is always PRIMARY. From MariaDB 10.3.18 and\nMariaDB 10.4.8, a warning is explicitly issued if a name is specified. Before\nthen, the name was silently ignored.\n\nSee Getting Started with Indexes: Primary Key for more information.\n\nUNIQUE\n------\n\nThe UNIQUE keyword means that the index will not accept duplicated values,\nexcept for NULLs. An error will raise if you try to insert duplicate values in\na UNIQUE index.\n\nFor UNIQUE indexes, you can specify a name for the constraint, using the\nCONSTRAINT keyword. That name will be used in error messages.\n\nSee Getting Started with Indexes: Unique Index for more information.\n\nFOREIGN KEY\n-----------\n\nFor FOREIGN KEY indexes, a reference definition must be provided.\n\nFor FOREIGN KEY indexes, you can specify a name for the constraint, using the\nCONSTRAINT keyword. That name will be used in error messages.\n\nFirst, you have to specify the name of the target (parent) table and a column\nor a column list which must be indexed and whose values must match to the\nforeign key\'s values. The MATCH clause is accepted to improve the\ncompatibility with other DBMS\'s, but has no meaning in MariaDB. The ON DELETE\nand ON UPDATE clauses specify what must be done when a DELETE (or a REPLACE)\nstatements attempts to delete a referenced row from the parent table, and when\nan UPDATE statement attempts to modify the referenced foreign key columns in a\nparent table row, respectively. The following options are allowed:\n\n* RESTRICT: The delete/update operation is not performed. The statement\nterminates with a 1451 error (SQLSTATE \'2300\').\n* NO ACTION: Synonym for RESTRICT.\n* CASCADE: The delete/update operation is performed in both tables.\n* SET NULL: The update or delete goes ahead in the parent table, and the\ncorresponding foreign key fields in the child table are set to NULL. (They\nmust not be defined as NOT NULL for this to succeed).\n* SET DEFAULT: This option is currently implemented only for the PBXT storage\nengine, which is disabled by default and no longer maintained. It sets the\nchild table\'s foreign key fields to their DEFAULT values when the referenced\nparent table key entries are updated or deleted.\n\nIf either clause is omitted, the default behavior for the omitted clause is\nRESTRICT.\n\nSee Foreign Keys for more information.\n\nFULLTEXT\n--------\n\nUse the FULLTEXT keyword to create full-text indexes.\n\nSee Full-Text Indexes for more information.\n\nSPATIAL\n-------\n\nUse the SPATIAL keyword to create geometric indexes.\n\nSee SPATIAL INDEX for more information.\n\nIndex Options\n-------------\n\nKEY_BLOCK_SIZE Index Option\n---------------------------\n\nThe KEY_BLOCK_SIZE index option is similar to the KEY_BLOCK_SIZE table option.\n\nWith the InnoDB storage engine, if you specify a non-zero value for the\nKEY_BLOCK_SIZE table option for the whole table, then the table will\nimplicitly be created with the ROW_FORMAT table option set to COMPRESSED.\nHowever, this does not happen if you just set the KEY_BLOCK_SIZE index option\nfor one or more indexes in the table. The InnoDB storage engine ignores the\nKEY_BLOCK_SIZE index option. However, the SHOW CREATE TABLE statement may\nstill report it for the index.\n\nFor information about the KEY_BLOCK_SIZE index option, see the KEY_BLOCK_SIZE\ntable option below.\n\nIndex Types\n-----------\n\nEach storage engine supports some or all index types. See Storage Engine Index\nTypes for details on permitted index types for each storage engine.\n\nDifferent index types are optimized for different kind of operations:\n\n* BTREE is the default type, and normally is the best choice. It is supported\nby all storage engines. It can be used to compare a column\'s value with a\nvalue using the =, >, >=, <, <=, BETWEEN, and LIKE operators. BTREE can also\nbe used to find NULL values. Searches against an index prefix are possible.\n* HASH is only supported by the MEMORY storage engine. HASH indexes can only\nbe used for =, <=, and >= comparisons. It can not be used for the ORDER BY\nclause. Searches against an index prefix are not possible.\n* RTREE is the default for SPATIAL indexes, but if the storage engine does not\nsupport it BTREE can be used.\n\nIndex columns names are listed between parenthesis. After each column, a\nprefix length can be specified. If no length is specified, the whole column\nwill be indexed. ASC and DESC can be specified for compatibility with are\nDBMS\'s, but have no meaning in MariaDB.\n\nWITH PARSER Index Option\n------------------------\n\nThe WITH PARSER index option only applies to FULLTEXT indexes and contains the\nfulltext parser name. The fulltext parser must be an installed plugin.\n\nCOMMENT Index Option\n--------------------\n\nA comment of up to 1024 characters is permitted with the COMMENT index option.\n\nThe COMMENT index option allows you to specify a comment with user-readable\ntext describing what the index is for. This information is not used by the\nserver itself.\n\nCLUSTERING Index Option\n-----------------------\n\nThe CLUSTERING index option is only valid for tables using the TokuDB storage\nengine.\n\nIGNORED / NOT IGNORED\n---------------------\n\nMariaDB starting with 10.6.0\n----------------------------\nFrom MariaDB 10.6.0, indexes can be specified to be ignored by the optimizer.\nSee Ignored Indexes.\n\nPeriods\n-------\n\nMariaDB starting with 10.3.4\n----------------------------\n\nperiod_definition:\n PERIOD FOR SYSTEM_TIME (start_column_name, end_column_name)\nMariaDB supports a subset of the standard syntax for periods. At the moment\nit\'s only used for creating System-versioned tables. Both columns must be\ncreated, must be either of a TIMESTAMP(6) or BIGINT UNSIGNED type, and be\ngenerated as ROW START and ROW END accordingly. See System-versioned tables\nfor details.\n\nThe table must also have the WITH SYSTEM VERSIONING clause.\n\nConstraint Expressions\n----------------------\n\nMariaDB starting with 10.2.1\n----------------------------\nMariaDB 10.2.1 introduced new ways to define a constraint.\n\nNote: Before MariaDB 10.2.1, constraint expressions were accepted in the\nsyntax but ignored.\n\nMariaDB 10.2.1 introduced two ways to define a constraint:\n\n* CHECK(expression) given as part of a column definition.\n* CONSTRAINT [constraint_name] CHECK (expression)\n\nBefore a row is inserted or updated, all constraints are evaluated in the\norder they are defined. If any constraints fails, then the row will not be\nupdated. One can use most deterministic functions in a constraint, including\nUDFs.\n\ncreate table t1 (a int check(a>0) ,b int check (b> 0), constraint abc check\n(a>b));\n\nIf you use the second format and you don\'t give a name to the constraint, then\nthe constraint will get a auto generated name. This is done so that you can\nlater delete the constraint with ALTER TABLE DROP constraint_name.\n\nOne can disable all constraint expression checks by setting the variable\ncheck_constraint_checks to OFF. This is useful for example when loading a\ntable that violates some constraints that you want to later find and fix in\nSQL.\n\nSee CONSTRAINT for more information.\n\nTable Options\n-------------\n\nFor each individual table you create (or alter), you can set some table\noptions. The general syntax for setting options is:\n\n<OPTION_NAME> = <option_value>, [<OPTION_NAME> = <option_value> ...]\n\nThe equal sign is optional.\n\nSome options are supported by the server and can be used for all tables, no\nmatter what storage engine they use; other options can be specified for all\nstorage engines, but have a meaning only for some engines. Also, engines can\nextend CREATE TABLE with new options.\n\nIf the IGNORE_BAD_TABLE_OPTIONS SQL_MODE is enabled, wrong table options\ngenerate a warning; otherwise, they generate an error.\n\ntable_option: \n [STORAGE] ENGINE [=] engine_name\n | AUTO_INCREMENT [=] value\n | AVG_ROW_LENGTH [=] value\n | [DEFAULT] CHARACTER SET [=] charset_name\n | CHECKSUM [=] {0 | 1}\n | [DEFAULT] COLLATE [=] collation_name\n | COMMENT [=] \'string\'\n | CONNECTION [=] \'connect_string\'\n | DATA DIRECTORY [=] \'absolute path to directory\'\n | DELAY_KEY_WRITE [=] {0 | 1}\n | ENCRYPTED [=] {YES | NO}\n | ENCRYPTION_KEY_ID [=] value\n | IETF_QUOTES [=] {YES | NO}\n | INDEX DIRECTORY [=] \'absolute path to directory\'\n | INSERT_METHOD [=] { NO | FIRST | LAST }\n | KEY_BLOCK_SIZE [=] value\n | MAX_ROWS [=] value\n | MIN_ROWS [=] value\n | PACK_KEYS [=] {0 | 1 | DEFAULT}\n | PAGE_CHECKSUM [=] {0 | 1}\n | PAGE_COMPRESSED [=] {0 | 1}\n | PAGE_COMPRESSION_LEVEL [=] {0 .. 9}\n | PASSWORD [=] \'string\'\n | ROW_FORMAT [=] {DEFAULT|DYNAMIC|FIXED|COMPRESSED|REDUNDANT|COMPACT|PAGE}\n | SEQUENCE [=] {0|1}\n | STATS_AUTO_RECALC [=] {DEFAULT|0|1}\n | STATS_PERSISTENT [=] {DEFAULT|0|1}\n | STATS_SAMPLE_PAGES [=] {DEFAULT|value}\n | TABLESPACE tablespace_name\n | TRANSACTIONAL [=] {0 | 1}\n | UNION [=] (tbl_name[,tbl_name]...)\n | WITH SYSTEM VERSIONING\n\n[STORAGE] ENGINE\n----------------\n\n[STORAGE] ENGINE specifies a storage engine for the table. If this option is\nnot used, the default storage engine is used instead. That is, the\ndefault_storage_engine session option value if it is set, or the value\nspecified for the --default-storage-engine mysqld startup option, or the\ndefault storage engine, InnoDB. If the specified storage engine is not\ninstalled and active, the default value will be used, unless the\nNO_ENGINE_SUBSTITUTION SQL MODE is set (default). This is only true for CREATE\nTABLE, not for ALTER TABLE. For a list of storage engines that are present in\nyour server, issue a SHOW ENGINES.\n\nAUTO_INCREMENT\n--------------\n\nAUTO_INCREMENT specifies the initial value for the AUTO_INCREMENT primary key.\nThis works for MyISAM, Aria, InnoDB, MEMORY, and ARCHIVE tables. You can\nchange this option with ALTER TABLE, but in that case the new value must be\nhigher than the highest value which is present in the AUTO_INCREMENT column.\nIf the storage engine does not support this option, you can insert (and then\ndelete) a row having the wanted value - 1 in the AUTO_INCREMENT column.\n\nAVG_ROW_LENGTH\n--------------\n\nAVG_ROW_LENGTH is the average rows size. It only applies to tables using\nMyISAM and Aria storage engines that have the ROW_FORMAT table option set to\nFIXED format.\n\nMyISAM uses MAX_ROWS and AVG_ROW_LENGTH to decide the maximum size of a table\n(default: 256TB, or the maximum file size allowed by the system).\n\n[DEFAULT] CHARACTER SET/CHARSET\n-------------------------------\n\n[DEFAULT] CHARACTER SET (or [DEFAULT] CHARSET) is used to set a default\ncharacter set for the table. This is the character set used for all columns\nwhere an explicit character set is not specified. If this option is omitted or\nDEFAULT is specified, database\'s default character set will be used. See\nSetting Character Sets and Collations for details on setting the character\nsets.\n\nCHECKSUM/TABLE_CHECKSUM\n-----------------------\n\nCHECKSUM (or TABLE_CHECKSUM) can be set to 1 to maintain a live checksum for\nall table\'s rows. This makes write operations slower, but CHECKSUM TABLE will\nbe very fast. This option is only supported for MyISAM and Aria tables.\n\n[DEFAULT] COLLATE\n-----------------\n\n[DEFAULT] COLLATE is used to set a default collation for the table. This is\nthe collation used for all columns where an explicit character set is not\nspecified. If this option is omitted or DEFAULT is specified, database\'s') WHERE help_topic_id = 704;
-update help_topic set description = CONCAT(description, '\ndefault option will be used. See Setting Character Sets and Collations for\ndetails on setting the collations\n\nCOMMENT\n-------\n\nCOMMENT is a comment for the table. The maximum length is 2048 characters.\nAlso used to define table parameters when creating a Spider table.\n\nCONNECTION\n----------\n\nCONNECTION is used to specify a server name or a connection string for a\nSpider, CONNECT, Federated or FederatedX table.\n\nDATA DIRECTORY/INDEX DIRECTORY\n------------------------------\n\nDATA DIRECTORY and INDEX DIRECTORY are supported for MyISAM and Aria, and DATA\nDIRECTORY is also supported by InnoDB if the innodb_file_per_table server\nsystem variable is enabled, but only in CREATE TABLE, not in ALTER TABLE. So,\ncarefully choose a path for InnoDB tables at creation time, because it cannot\nbe changed without dropping and re-creating the table. These options specify\nthe paths for data files and index files, respectively. If these options are\nomitted, the database\'s directory will be used to store data files and index\nfiles. Note that these table options do not work for partitioned tables (use\nthe partition options instead), or if the server has been invoked with the\n--skip-symbolic-links startup option. To avoid the overwriting of old files\nwith the same name that could be present in the directories, you can use the\n--keep_files_on_create option (an error will be issued if files already\nexist). These options are ignored if the NO_DIR_IN_CREATE SQL_MODE is enabled\n(useful for replication slaves). Also note that symbolic links cannot be used\nfor InnoDB tables.\n\nDATA DIRECTORY works by creating symlinks from where the table would normally\nhave been (inside the datadir) to where the option specifies. For security\nreasons, to avoid bypassing the privilege system, the server does not permit\nsymlinks inside the datadir. Therefore, DATA DIRECTORY cannot be used to\nspecify a location inside the datadir. An attempt to do so will result in an\nerror 1210 (HY000) Incorrect arguments to DATA DIRECTORY.\n\nDELAY_KEY_WRITE\n---------------\n\nDELAY_KEY_WRITE is supported by MyISAM and Aria, and can be set to 1 to speed\nup write operations. In that case, when data are modified, the indexes are not\nupdated until the table is closed. Writing the changes to the index file\naltogether can be much faster. However, note that this option is applied only\nif the delay_key_write server variable is set to \'ON\'. If it is \'OFF\' the\ndelayed index writes are always disabled, and if it is \'ALL\' the delayed index\nwrites are always used, disregarding the value of DELAY_KEY_WRITE.\n\nENCRYPTED\n---------\n\nThe ENCRYPTED table option can be used to manually set the encryption status\nof an InnoDB table. See InnoDB Encryption for more information.\n\nAria does not support the ENCRYPTED table option. See MDEV-18049.\n\nSee Data-at-Rest Encryption for more information.\n\nENCRYPTION_KEY_ID\n-----------------\n\nThe ENCRYPTION_KEY_ID table option can be used to manually set the encryption\nkey of an InnoDB table. See InnoDB Encryption for more information.\n\nAria does not support the ENCRYPTION_KEY_ID table option. See MDEV-18049.\n\nSee Data-at-Rest Encryption for more information.\n\nIETF_QUOTES\n-----------\n\nFor the CSV storage engine, the IETF_QUOTES option, when set to YES, enables\nIETF-compatible parsing of embedded quote and comma characters. Enabling this\noption for a table improves compatibility with other tools that use CSV, but\nis not compatible with MySQL CSV tables, or MariaDB CSV tables created without\nthis option. Disabled by default.\n\nINSERT_METHOD\n-------------\n\nINSERT_METHOD is only used with MERGE tables. This option determines in which\nunderlying table the new rows should be inserted. If you set it to \'NO\' (which\nis the default) no new rows can be added to the table (but you will still be\nable to perform INSERTs directly against the underlying tables). FIRST means\nthat the rows are inserted into the first table, and LAST means that thet are\ninserted into the last table.\n\nKEY_BLOCK_SIZE\n--------------\n\nKEY_BLOCK_SIZE is used to determine the size of key blocks, in bytes or\nkilobytes. However, this value is just a hint, and the storage engine could\nmodify or ignore it. If KEY_BLOCK_SIZE is set to 0, the storage engine\'s\ndefault value will be used.\n\nWith the InnoDB storage engine, if you specify a non-zero value for the\nKEY_BLOCK_SIZE table option for the whole table, then the table will\nimplicitly be created with the ROW_FORMAT table option set to COMPRESSED.\n\nMIN_ROWS/MAX_ROWS\n-----------------\n\nMIN_ROWS and MAX_ROWS let the storage engine know how many rows you are\nplanning to store as a minimum and as a maximum. These values will not be used\nas real limits, but they help the storage engine to optimize the table.\nMIN_ROWS is only used by MEMORY storage engine to decide the minimum memory\nthat is always allocated. MAX_ROWS is used to decide the minimum size for\nindexes.\n\nPACK_KEYS\n---------\n\nPACK_KEYS can be used to determine whether the indexes will be compressed. Set\nit to 1 to compress all keys. With a value of 0, compression will not be used.\nWith the DEFAULT value, only long strings will be compressed. Uncompressed\nkeys are faster.\n\nPAGE_CHECKSUM\n-------------\n\nPAGE_CHECKSUM is only applicable to Aria tables, and determines whether\nindexes and data should use page checksums for extra safety.\n\nPAGE_COMPRESSED\n---------------\n\nPAGE_COMPRESSED is used to enable InnoDB page compression for InnoDB tables.\n\nPAGE_COMPRESSION_LEVEL\n----------------------\n\nPAGE_COMPRESSION_LEVEL is used to set the compression level for InnoDB page\ncompression for InnoDB tables. The table must also have the PAGE_COMPRESSED\ntable option set to 1.\n\nValid values for PAGE_COMPRESSION_LEVEL are 1 (the best speed) through 9 (the\nbest compression), .\n\nPASSWORD\n--------\n\nPASSWORD is unused.\n\nRAID_TYPE\n---------\n\nRAID_TYPE is an obsolete option, as the raid support has been disabled since\nMySQL 5.0.\n\nROW_FORMAT\n----------\n\nThe ROW_FORMAT table option specifies the row format for the data file.\nPossible values are engine-dependent.\n\nSupported MyISAM Row Formats\n----------------------------\n\nFor MyISAM, the supported row formats are:\n\n* FIXED\n* DYNAMIC\n* COMPRESSED\n\nThe COMPRESSED row format can only be set by the myisampack command line tool.\n\nSee MyISAM Storage Formats for more information.\n\nSupported Aria Row Formats\n--------------------------\n\nFor Aria, the supported row formats are:\n\n* PAGE\n* FIXED\n* DYNAMIC.\n\nSee Aria Storage Formats for more information.\n\nSupported InnoDB Row Formats\n----------------------------\n\nFor InnoDB, the supported row formats are:\n\n* COMPACT\n* REDUNDANT\n* COMPRESSED\n* DYNAMIC.\n\nIf the ROW_FORMAT table option is set to FIXED for an InnoDB table, then the\nserver will either return an error or a warning depending on the value of the\ninnodb_strict_mode system variable. If the innodb_strict_mode system variable\nis set to OFF, then a warning is issued, and MariaDB will create the table\nusing the default row format for the specific MariaDB server version. If the\ninnodb_strict_mode system variable is set to ON, then an error will be raised.\n\nSee InnoDB Storage Formats for more information.\n\nOther Storage Engines and ROW_FORMAT\n------------------------------------\n\nOther storage engines do not support the ROW_FORMAT table option.\n\nSEQUENCE\n--------\n\nMariaDB starting with 10.3\n--------------------------\nIf the table is a sequence, then it will have the SEQUENCE set to 1.\n\nSTATS_AUTO_RECALC\n-----------------\n\nSTATS_AUTO_RECALC indicates whether to automatically recalculate persistent\nstatistics (see STATS_PERSISTENT, below) for an InnoDB table. If set to 1,\nstatistics will be recalculated when more than 10% of the data has changed.\nWhen set to 0, stats will be recalculated only when an ANALYZE TABLE is run.\nIf set to DEFAULT, or left out, the value set by the innodb_stats_auto_recalc\nsystem variable applies. See InnoDB Persistent Statistics.\n\nSTATS_PERSISTENT\n----------------\n\nSTATS_PERSISTENT indicates whether the InnoDB statistics created by ANALYZE\nTABLE will remain on disk or not. It can be set to 1 (on disk), 0 (not on\ndisk, the pre-MariaDB 10 behavior), or DEFAULT (the same as leaving out the\noption), in which case the value set by the innodb_stats_persistent system\nvariable will apply. Persistent statistics stored on disk allow the statistics\nto survive server restarts, and provide better query plan stability. See\nInnoDB Persistent Statistics.\n\nSTATS_SAMPLE_PAGES\n------------------\n\nSTATS_SAMPLE_PAGES indicates how many pages are used to sample index\nstatistics. If 0 or DEFAULT, the default value, the innodb_stats_sample_pages\nvalue is used. See InnoDB Persistent Statistics.\n\nTRANSACTIONAL\n-------------\n\nTRANSACTIONAL is only applicable for Aria tables. In future Aria tables\ncreated with this option will be fully transactional, but currently this\nprovides a form of crash protection. See Aria Storage Engine for more details.\n\nUNION\n-----\n\nUNION must be specified when you create a MERGE table. This option contains a\ncomma-separated list of MyISAM tables which are accessed by the new table. The\nlist is enclosed between parenthesis. Example: UNION = (t1,t2)\n\nWITH SYSTEM VERSIONING\n----------------------\n\nWITH SYSTEM VERSIONING is used for creating System-versioned tables.\n\nPartitions\n----------\n\npartition_options:\n PARTITION BY\n { [LINEAR] HASH(expr)\n | [LINEAR] KEY(column_list)\n | RANGE(expr)\n | LIST(expr)\n | SYSTEM_TIME [INTERVAL time_quantity time_unit] [LIMIT num] }\n [PARTITIONS num]\n [SUBPARTITION BY\n { [LINEAR] HASH(expr)\n | [LINEAR] KEY(column_list) }\n [SUBPARTITIONS num]\n ]\n [(partition_definition [, partition_definition] ...)]\npartition_definition:\n PARTITION partition_name\n [VALUES {LESS THAN {(expr) | MAXVALUE} | IN (value_list)}]\n [[STORAGE] ENGINE [=] engine_name]\n [COMMENT [=] \'comment_text\' ]\n [DATA DIRECTORY [=] \'data_dir\']\n [INDEX DIRECTORY [=] \'index_dir\']\n [MAX_ROWS [=] max_number_of_rows]\n [MIN_ROWS [=] min_number_of_rows]\n [TABLESPACE [=] tablespace_name]\n [NODEGROUP [=] node_group_id]\n [(subpartition_definition [, subpartition_definition] ...)]\nsubpartition_definition:\n SUBPARTITION logical_name\n [[STORAGE] ENGINE [=] engine_name]\n [COMMENT [=] \'comment_text\' ]\n [DATA DIRECTORY [=] \'data_dir\']\n [INDEX DIRECTORY [=] \'index_dir\']\n [MAX_ROWS [=] max_number_of_rows]\n [MIN_ROWS [=] min_number_of_rows]\n [TABLESPACE [=] tablespace_name]\n [NODEGROUP [=] node_group_id]\nIf the PARTITION BY clause is used, the table will be partitioned. A partition\nmethod must be explicitly indicated for partitions and subpartitions.\nPartition methods are:\n\n* [LINEAR] HASH creates a hash key which will be used to read and write rows.\nThe partition function can be any valid SQL expression which returns an\nINTEGER number. Thus, it is possible to use the HASH method on an integer\ncolumn, or on functions which accept integer columns as an argument. However,\nVALUES LESS THAN and VALUES IN clauses can not be used with HASH. An example:\n\nCREATE TABLE t1 (a INT, b CHAR(5), c DATETIME)\n PARTITION BY HASH ( YEAR(c) );\n\n[LINEAR] HASH can be used for subpartitions, too.\n\n* [LINEAR] KEY is similar to HASH, but the index has an even distribution of\ndata. Also, the expression can only be a column or a list of columns. VALUES\nLESS THAN and VALUES IN clauses can not be used with KEY.\n* RANGE partitions the rows using on a range of values, using the VALUES LESS\nTHAN operator. VALUES IN is not allowed with RANGE. The partition function can\nbe any valid SQL expression which returns a single value.\n* LIST assigns partitions based on a table\'s column with a restricted set of\npossible values. It is similar to RANGE, but VALUES IN must be used for at\nleast 1 columns, and VALUES LESS THAN is disallowed.\n* SYSTEM_TIME partitioning is used for System-versioned tables to store\nhistorical data separately from current data.\n\nOnly HASH and KEY can be used for subpartitions, and they can be [LINEAR].\n\nIt is possible to define up to 1024 partitions and subpartitions.\n\nThe number of defined partitions can be optionally specified as PARTITION\ncount. This can be done to avoid specifying all partitions individually. But\nyou can also declare each individual partition and, additionally, specify a\nPARTITIONS count clause; in the case, the number of PARTITIONs must equal\ncount.\n\nAlso see Partitioning Types Overview.\n\nSequences\n---------\n\nMariaDB starting with 10.3\n--------------------------\nCREATE TABLE can also be used to create a SEQUENCE. See CREATE SEQUENCE and\nSequence Overview.\n\nAtomic DDL\n----------\n\nMariaDB starting with 10.6.1\n----------------------------\nMariaDB 10.6.1 supports Atomic DDL. CREATE TABLE is atomic, except for CREATE\nOR REPLACE, which is only crash safe.\n\nExamples\n--------\n\ncreate table if not exists test (\na bigint auto_increment primary key,\nname varchar(128) charset utf8,\nkey name (name(32))\n) engine=InnoDB default charset latin1;\n\nThis example shows a couple of things:\n\n* Usage of IF NOT EXISTS; If the table already existed, it will not be\ncreated. There will not be any error for the client, just a warning.\n* How to create a PRIMARY KEY that is automatically generated.\n* How to specify a table-specific character set and another for a column.\n* How to create an index (name) that is only partly indexed (to save space).\n\nThe following clauses will work from MariaDB 10.2.1 only.\n\nCREATE TABLE t1(\n a int DEFAULT (1+1),\n b int DEFAULT (a+1),\n expires DATETIME DEFAULT(NOW() + INTERVAL 1 YEAR),\n x BLOB DEFAULT USER()\n);\n\nURL: https://mariadb.com/kb/en/create-table/') WHERE help_topic_id = 704;
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (705,38,'DROP TABLE','Syntax\n------\n\nDROP [TEMPORARY] TABLE [IF EXISTS] [/*COMMENT TO SAVE*/]\n tbl_name [, tbl_name] ...\n [WAIT n|NOWAIT]\n [RESTRICT | CASCADE]\n\nDescription\n-----------\n\nDROP TABLE removes one or more tables. You must have the DROP privilege for\neach table. All table data and the table definition are removed, as well as\ntriggers associated to the table, so be careful with this statement! If any of\nthe tables named in the argument list do not exist, MariaDB returns an error\nindicating by name which non-existing tables it was unable to drop, but it\nalso drops all of the tables in the list that do exist.\n\nImportant: When a table is dropped, user privileges on the table are not\nautomatically dropped. See GRANT.\n\nIf another thread is using the table in an explicit transaction or an\nautocommit transaction, then the thread acquires a metadata lock (MDL) on the\ntable. The DROP TABLE statement will wait in the \"Waiting for table metadata\nlock\" thread state until the MDL is released. MDLs are released in the\nfollowing cases:\n\n* If an MDL is acquired in an explicit transaction, then the MDL will be\nreleased when the transaction ends.\n* If an MDL is acquired in an autocommit transaction, then the MDL will be\nreleased when the statement ends.\n* Transactional and non-transactional tables are handled the same.\n\nNote that for a partitioned table, DROP TABLE permanently removes the table\ndefinition, all of its partitions, and all of the data which was stored in\nthose partitions. It also removes the partitioning definition (.par) file\nassociated with the dropped table.\n\nFor each referenced table, DROP TABLE drops a temporary table with that name,\nif it exists. If it does not exist, and the TEMPORARY keyword is not used, it\ndrops a non-temporary table with the same name, if it exists. The TEMPORARY\nkeyword ensures that a non-temporary table will not accidentally be dropped.\n\nUse IF EXISTS to prevent an error from occurring for tables that do not exist.\nA NOTE is generated for each non-existent table when using IF EXISTS. See SHOW\nWARNINGS.\n\nIf a foreign key references this table, the table cannot be dropped. In this\ncase, it is necessary to drop the foreign key first.\n\nRESTRICT and CASCADE are allowed to make porting from other database systems\neasier. In MariaDB, they do nothing.\n\nThe comment before the table names (/*COMMENT TO SAVE*/) is stored in the\nbinary log. That feature can be used by replication tools to send their\ninternal messages.\n\nIt is possible to specify table names as db_name.tab_name. This is useful to\ndelete tables from multiple databases with one statement. See Identifier\nQualifiers for details.\n\nThe DROP privilege is required to use DROP TABLE on non-temporary tables. For\ntemporary tables, no privilege is required, because such tables are only\nvisible for the current session.\n\nNote: DROP TABLE automatically commits the current active transaction, unless\nyou use the TEMPORARY keyword.\n\nMariaDB starting with 10.5.4\n----------------------------\nFrom MariaDB 10.5.4, DROP TABLE reliably deletes table remnants inside a\nstorage engine even if the .frm file is missing. Before then, a missing .frm\nfile would result in the statement failing.\n\nMariaDB starting with 10.3.1\n----------------------------\n\nWAIT/NOWAIT\n-----------\n\nSet the lock wait timeout. See WAIT and NOWAIT.\n\nDROP TABLE in replication\n-------------------------\n\nDROP TABLE has the following characteristics in replication:\n\n* DROP TABLE IF EXISTS are always logged.\n* DROP TABLE without IF EXISTS for tables that don\'t exist are not written to\nthe binary log.\n* Dropping of TEMPORARY tables are prefixed in the log with TEMPORARY. These\ndrops are only logged when running statement or mixed mode replication.\n* One DROP TABLE statement can be logged with up to 3 different DROP\nstatements:\nDROP TEMPORARY TABLE list_of_non_transactional_temporary_tables\nDROP TEMPORARY TABLE list_of_transactional_temporary_tables\nDROP TABLE list_of_normal_tables\n\nDROP TABLE on the primary is treated on the replica as DROP TABLE IF EXISTS.\nYou can change that by setting slave-ddl-exec-mode to STRICT.\n\nDropping an Internal #sql-... Table\n-----------------------------------\n\nFrom MariaDB 10.6, DROP TABLE is atomic and the following does not apply.\nUntil MariaDB 10.5, if the mariadbd/mysqld process is killed during an ALTER\nTABLE you may find a table named #sql-... in your data directory. In MariaDB\n10.3, InnoDB tables with this prefix will be deleted automatically during\nstartup. From MariaDB 10.4, these temporary tables will always be deleted\nautomatically.\n\nIf you want to delete one of these tables explicitly you can do so by using\nthe following syntax:\n\nDROP TABLE `#mysql50##sql-...`;\n\nWhen running an ALTER TABLE…ALGORITHM=INPLACE that rebuilds the table, InnoDB\nwill create an internal #sql-ib table. Until MariaDB 10.3.2, for these tables,\nthe .frm file will be called something else. In order to drop such a table\nafter a server crash, you must rename the #sql*.frm file to match the\n#sql-ib*.ibd file.\n\nFrom MariaDB 10.3.3, the same name as the .frm file is used for the\nintermediate copy of the table. The #sql-ib names are used by TRUNCATE and\ndelayed DROP.\n\nFrom MariaDB 10.2.19 and MariaDB 10.3.10, the #sql-ib tables will be deleted\nautomatically.\n\nDropping All Tables in a Database\n---------------------------------\n\nThe best way to drop all tables in a database is by executing DROP DATABASE,\nwhich will drop the database itself, and all tables in it.\n\nHowever, if you want to drop all tables in the database, but you also want to\nkeep the database itself and any other non-table objects in it, then you would\nneed to execute DROP TABLE to drop each individual table. You can construct\nthese DROP TABLE commands by querying the TABLES table in the\ninformation_schema database. For example:\n\nSELECT CONCAT(\'DROP TABLE IF EXISTS `\', TABLE_SCHEMA, \'`.`\', TABLE_NAME, \'`;\')\nFROM information_schema.TABLES\nWHERE TABLE_SCHEMA = \'mydb\';\n\nAtomic DROP TABLE\n-----------------\n\nMariaDB starting with 10.6.1\n----------------------------\nFrom MariaDB 10.6, DROP TABLE for a single table is atomic (MDEV-25180) for\nmost engines, including InnoDB, MyRocks, MyISAM and Aria.\n\nThis means that if there is a crash (server down or power outage) during DROP\nTABLE, all tables that have been processed so far will be completely dropped,\nincluding related trigger files and status entries, and the binary log will\ninclude a DROP TABLE statement for the dropped tables. Tables for which the\ndrop had not started will be left intact.\n\nIn older MariaDB versions, there was a small chance that, during a server\ncrash happening in the middle of DROP TABLE, some storage engines that were\nusing multiple storage files, like MyISAM, could have only a part of its\ninternal files dropped.\n\nIn MariaDB 10.5, DROP TABLE was extended to be able to delete a table that was\nonly partly dropped (MDEV-11412) as explained above. Atomic DROP TABLE is the\nfinal piece to make DROP TABLE fully reliable.\n\nDropping multiple tables is crash-safe.\n\nSee Atomic DDL for more information.\n\nExamples\n--------\n\nDROP TABLE Employees, Customers;\n\nNotes\n-----\n\nBeware that DROP TABLE can drop both tables and sequences. This is mainly done\nto allow old tools like mysqldump to work with sequences.\n\nURL: https://mariadb.com/kb/en/drop-table/','','https://mariadb.com/kb/en/drop-table/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (706,38,'RENAME TABLE','Syntax\n------\n\nRENAME TABLE[S] [IF EXISTS] tbl_name \n [WAIT n | NOWAIT]\n TO new_tbl_name\n [, tbl_name2 TO new_tbl_name2] ...\n\nDescription\n-----------\n\nThis statement renames one or more tables or views, but not the privileges\nassociated with them.\n\nIF EXISTS\n---------\n\nMariaDB starting with 10.5.2\n----------------------------\nIf this directive is used, one will not get an error if the table to be\nrenamed doesn\'t exist.\n\nThe rename operation is done atomically, which means that no other session can\naccess any of the tables while the rename is running. For example, if you have\nan existing table old_table, you can create another table new_table that has\nthe same structure but is empty, and then replace the existing table with the\nempty one as follows (assuming that backup_table does not already exist):\n\nCREATE TABLE new_table (...);\nRENAME TABLE old_table TO backup_table, new_table TO old_table;\n\ntbl_name can optionally be specified as db_name.tbl_name. See Identifier\nQualifiers. This allows to use RENAME to move a table from a database to\nanother (as long as they are on the same filesystem):\n\nRENAME TABLE db1.t TO db2.t;\n\nNote that moving a table to another database is not possible if it has some\ntriggers. Trying to do so produces the following error:\n\nERROR 1435 (HY000): Trigger in wrong schema\n\nAlso, views cannot be moved to another database:\n\nERROR 1450 (HY000): Changing schema from \'old_db\' to \'new_db\' is not allowed.\n\nMultiple tables can be renamed in a single statement. The presence or absence\nof the optional S (RENAME TABLE or RENAME TABLES) has no impact, whether a\nsingle or multiple tables are being renamed.\n\nIf a RENAME TABLE renames more than one table and one renaming fails, all\nrenames executed by the same statement are rolled back.\n\nRenames are always executed in the specified order. Knowing this, it is also\npossible to swap two tables\' names:\n\nRENAME TABLE t1 TO tmp_table,\n t2 TO t1,\n tmp_table TO t2;\n\nWAIT/NOWAIT\n-----------\n\nMariaDB starting with 10.3.0\n----------------------------\nSet the lock wait timeout. See WAIT and NOWAIT.\n\nPrivileges\n----------\n\nExecuting the RENAME TABLE statement requires the DROP, CREATE and INSERT\nprivileges for the table or the database.\n\nAtomic RENAME TABLE\n-------------------\n\nMariaDB starting with 10.6.1\n----------------------------\nFrom MariaDB 10.6, RENAME TABLE is atomic for most engines, including InnoDB,\nMyRocks, MyISAM and Aria (MDEV-23842). This means that if there is a crash\n(server down or power outage) during RENAME TABLE, all tables will revert to\ntheir original names and any changes to trigger files will be reverted.\n\nIn older MariaDB version there was a small chance that, during a server crash\nhappening in the middle of RENAME TABLE, some tables could have been renamed\n(in the worst case partly) while others would not be renamed.\n\nSee Atomic DDL for more information.\n\nURL: https://mariadb.com/kb/en/rename-table/','','https://mariadb.com/kb/en/rename-table/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (707,38,'TRUNCATE TABLE','Syntax\n------\n\nTRUNCATE [TABLE] tbl_name\n [WAIT n | NOWAIT]\n\nDescription\n-----------\n\nTRUNCATE TABLE empties a table completely. It requires the DROP privilege. See\nGRANT.\n\ntbl_name can also be specified in the form db_name.tbl_name (see Identifier\nQualifiers).\n\nLogically, TRUNCATE TABLE is equivalent to a DELETE statement that deletes all\nrows, but there are practical differences under some circumstances.\n\nTRUNCATE TABLE will fail for an InnoDB table if any FOREIGN KEY constraints\nfrom other tables reference the table, returning the error:\n\nERROR 1701 (42000): Cannot truncate a table referenced in a foreign key\nconstraint\n\nForeign Key constraints between columns in the same table are permitted.\n\nFor an InnoDB table, if there are no FOREIGN KEY constraints, InnoDB performs\nfast truncation by dropping the original table and creating an empty one with\nthe same definition, which is much faster than deleting rows one by one. The\nAUTO_INCREMENT counter is reset by TRUNCATE TABLE, regardless of whether there\nis a FOREIGN KEY constraint.\n\nThe count of rows affected by TRUNCATE TABLE is accurate only when it is\nmapped to a DELETE statement.\n\nFor other storage engines, TRUNCATE TABLE differs from DELETE in the following\nways:\n\n* Truncate operations drop and re-create the table, which is much\n faster than deleting rows one by one, particularly for large tables.\n* Truncate operations cause an implicit commit.\n* Truncation operations cannot be performed if the session holds an\n active table lock.\n* Truncation operations do not return a meaningful value for the number\n of deleted rows. The usual result is \"0 rows affected,\" which should\n be interpreted as \"no information.\"\n* As long as the table format file tbl_name.frm is valid, the\n table can be re-created as an empty table\n with TRUNCATE TABLE, even if the data or index files have become\n corrupted.\n* The table handler does not remember the last\n used AUTO_INCREMENT value, but starts counting\n from the beginning. This is true even for MyISAM and InnoDB, which normally\n do not reuse sequence values.\n* When used with partitioned tables, TRUNCATE TABLE preserves\n the partitioning; that is, the data and index files are dropped and\n re-created, while the partition definitions (.par) file is\n unaffected.\n* Since truncation of a table does not make any use of DELETE,\n the TRUNCATE statement does not invoke ON DELETE triggers.\n* TRUNCATE TABLE will only reset the values in the Performance Schema summary\ntables to zero or null, and will not remove the rows.\n\nFor the purposes of binary logging and replication, TRUNCATE TABLE is treated\nas DROP TABLE followed by CREATE TABLE (DDL rather than DML).\n\nTRUNCATE TABLE does not work on views. Currently, TRUNCATE TABLE drops all\nhistorical records from a system-versioned table.\n\nMariaDB starting with 10.3.0\n----------------------------\n\nWAIT/NOWAIT\n-----------\n\nSet the lock wait timeout. See WAIT and NOWAIT.\n\nOracle-mode\n-----------\n\nOracle-mode from MariaDB 10.3 permits the optional keywords REUSE STORAGE or\nDROP STORAGE to be used.\n\nTRUNCATE [TABLE] tbl_name [{DROP | REUSE} STORAGE] [WAIT n | NOWAIT]\n\nThese have no effect on the operation.\n\nPerformance\n-----------\n\nTRUNCATE TABLE is faster than DELETE, because it drops and re-creates a table.\n\nWith InnoDB, TRUNCATE TABLE is slower if innodb_file_per_table=ON is set (the\ndefault). This is because TRUNCATE TABLE unlinks the underlying tablespace\nfile, which can be an expensive operation. See MDEV-8069 for more details.\n\nThe performance issues with innodb_file_per_table=ON can be exacerbated in\ncases where the InnoDB buffer pool is very large and\ninnodb_adaptive_hash_index=ON is set. In that case, using DROP TABLE followed\nby CREATE TABLE instead of TRUNCATE TABLE may perform better. Setting\ninnodb_adaptive_hash_index=OFF (it defaults to ON before MariaDB 10.5) can\nalso help. In MariaDB 10.2 only, from MariaDB 10.2.19, this performance can\nalso be improved by setting innodb_safe_truncate=OFF. See MDEV-9459 for more\ndetails.\n\nSetting innodb_adaptive_hash_index=OFF can also improve TRUNCATE TABLE\nperformance in general. See MDEV-16796 for more details.\n\nURL: https://mariadb.com/kb/en/truncate-table/','','https://mariadb.com/kb/en/truncate-table/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (708,38,'CREATE DATABASE','Syntax\n------\n\nCREATE [OR REPLACE] {DATABASE | SCHEMA} [IF NOT EXISTS] db_name\n [create_specification] ...\n\ncreate_specification:\n [DEFAULT] CHARACTER SET [=] charset_name\n | [DEFAULT] COLLATE [=] collation_name\n | COMMENT [=] \'comment\'\n\nDescription\n-----------\n\nCREATE DATABASE creates a database with the given name. To use this statement,\nyou need the CREATE privilege for the database. CREATE SCHEMA is a synonym for\nCREATE DATABASE.\n\nFor valid identifiers to use as database names, see Identifier Names.\n\nOR REPLACE\n----------\n\nMariaDB starting with 10.1.3\n----------------------------\nThe OR REPLACE clause was added in MariaDB 10.1.3\n\nIf the optional OR REPLACE clause is used, it acts as a shortcut for:\n\nDROP DATABASE IF EXISTS db_name;\nCREATE DATABASE db_name ...;\n\nIF NOT EXISTS\n-------------\n\nWhen the IF NOT EXISTS clause is used, MariaDB will return a warning instead\nof an error if the specified database already exists.\n\nCOMMENT\n-------\n\nMariaDB starting with 10.5.0\n----------------------------\nFrom MariaDB 10.5.0, it is possible to add a comment of a maximum of 1024\nbytes. If the comment length exceeds this length, a error/warning code 4144 is\nthrown. The database comment is also added to the db.opt file, as well as to\nthe information_schema.schemata table.\n\nExamples\n--------\n\nCREATE DATABASE db1;\nQuery OK, 1 row affected (0.18 sec)\n\nCREATE DATABASE db1;\nERROR 1007 (HY000): Can\'t create database \'db1\'; database exists\n\nCREATE OR REPLACE DATABASE db1;\nQuery OK, 2 rows affected (0.00 sec)\n\nCREATE DATABASE IF NOT EXISTS db1;\nQuery OK, 1 row affected, 1 warning (0.01 sec)\n\nSHOW WARNINGS;\n+-------+------+----------------------------------------------+\n| Level | Code | Message |\n+-------+------+----------------------------------------------+\n| Note | 1007 | Can\'t create database \'db1\'; database exists |\n+-------+------+----------------------------------------------+\n\nSetting the character sets and collation. See Setting Character Sets and\nCollations for more details.\n\nCREATE DATABASE czech_slovak_names \n CHARACTER SET = \'keybcs2\'\n COLLATE = \'keybcs2_bin\';\n\nComments, from MariaDB 10.5.0:\n\nCREATE DATABASE presentations COMMENT \'Presentations for conferences\';\n\nURL: https://mariadb.com/kb/en/create-database/','','https://mariadb.com/kb/en/create-database/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (709,38,'CREATE EVENT','Syntax\n------\n\nCREATE [OR REPLACE]\n [DEFINER = { user | CURRENT_USER | role | CURRENT_ROLE }]\n EVENT\n [IF NOT EXISTS]\n event_name\n ON SCHEDULE schedule\n [ON COMPLETION [NOT] PRESERVE]\n [ENABLE | DISABLE | DISABLE ON SLAVE]\n [COMMENT \'comment\']\n DO sql_statement;\n\nschedule:\n AT timestamp [+ INTERVAL interval] ...\n | EVERY interval\n [STARTS timestamp [+ INTERVAL interval] ...]\n [ENDS timestamp [+ INTERVAL interval] ...]\n\ninterval:\n quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |\n WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |\n DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}\n\nDescription\n-----------\n\nThis statement creates and schedules a new event. It requires the EVENT\nprivilege for the schema in which the event is to be created.\n\nThe minimum requirements for a valid CREATE EVENT statement are as follows:\n\n* The keywords CREATE EVENT plus an event name, which uniquely identifies\n the event in the current schema. (Prior to MySQL 5.1.12, the event name\n needed to be unique only among events created by the same user on a given\n database.)\n* An ON SCHEDULE clause, which determines when and how often the event\n executes.\n* A DO clause, which contains the SQL statement to be executed by an\n event.\n\nHere is an example of a minimal CREATE EVENT statement:\n\nCREATE EVENT myevent\n ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR\n DO\n UPDATE myschema.mytable SET mycol = mycol + 1;\n\nThe previous statement creates an event named myevent. This event executes\nonce — one hour following its creation — by running an SQL statement that\nincrements the value of the myschema.mytable table\'s mycol column by 1.\n\nThe event_name must be a valid MariaDB identifier with a maximum length of 64\ncharacters. It may be delimited using back ticks, and may be qualified with\nthe name of a database schema. An event is associated with both a MariaDB user\n(the definer) and a schema, and its name must be unique among names of events\nwithin that schema. In general, the rules governing event names are the same\nas those for names of stored routines. See Identifier Names.\n\nIf no schema is indicated as part of event_name, the default (current) schema\nis assumed.\n\nFor valid identifiers to use as event names, see Identifier Names.\n\nOR REPLACE\n----------\n\nThe OR REPLACE clause was included in MariaDB 10.1.4. If used and the event\nalready exists, instead of an error being returned, the existing event will be\ndropped and replaced by the newly defined event.\n\nIF NOT EXISTS\n-------------\n\nIf the IF NOT EXISTS clause is used, MariaDB will return a warning instead of\nan error if the event already exists. Cannot be used together with OR REPLACE.\n\nON SCHEDULE\n-----------\n\nThe ON SCHEDULE clause can be used to specify when the event must be triggered.\n\nAT\n--\n\nIf you want to execute the event only once (one time event), you can use the\nAT keyword, followed by a timestamp. If you use CURRENT_TIMESTAMP, the event\nacts as soon as it is created. As a convenience, you can add one or more\nintervals to that timestamp. You can also specify a timestamp in the past, so\nthat the event is stored but not triggered, until you modify it via ALTER\nEVENT.\n\nThe following example shows how to create an event that will be triggered\ntomorrow at a certain time:\n\nCREATE EVENT example\nON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 DAY + INTERVAL 3 HOUR\nDO something;\n\nYou can also specify that an event must be triggered at a regular interval\n(recurring event). In such cases, use the EVERY clause followed by the\ninterval.\n\nIf an event is recurring, you can specify when the first execution must happen\nvia the STARTS clause and a maximum time for the last execution via the ENDS\nclause. STARTS and ENDS clauses are followed by a timestamp and, optionally,\none or more intervals. The ENDS clause can specify a timestamp in the past, so\nthat the event is stored but not executed until you modify it via ALTER EVENT.\n\nIn the following example, next month a recurring event will be triggered\nhourly for a week:\n\nCREATE EVENT example\nON SCHEDULE EVERY 1 HOUR\nSTARTS CURRENT_TIMESTAMP + INTERVAL 1 MONTH\nENDS CURRENT_TIMESTAMP + INTERVAL 1 MONTH + INTERVAL 1 WEEK\nDO some_task;\n\nIntervals consist of a quantity and a time unit. The time units are the same\nused for other staments and time functions, except that you can\'t use\nmicroseconds for events. For simple time units, like HOUR or MINUTE, the\nquantity is an integer number, for example \'10 MINUTE\'. For composite time\nunits, like HOUR_MINUTE or HOUR_SECOND, the quantity must be a string with all\ninvolved simple values and their separators, for example \'2:30\' or \'2:30:30\'.\n\nON COMPLETION [NOT] PRESERVE\n----------------------------\n\nThe ON COMPLETION clause can be used to specify if the event must be deleted\nafter its last execution (that is, after its AT or ENDS timestamp is past). By\ndefault, events are dropped when they are expired. To explicitly state that\nthis is the desired behaviour, you can use ON COMPLETION NOT PRESERVE.\nInstead, if you want the event to be preserved, you can use ON COMPLETION\nPRESERVE.\n\nIn you specify ON COMPLETION NOT PRESERVE, and you specify a timestamp in the\npast for AT or ENDS clause, the event will be immediatly dropped. In such\ncases, you will get a Note 1558: \"Event execution time is in the past and ON\nCOMPLETION NOT PRESERVE is set. The event was dropped immediately after\ncreation\".\n\nENABLE/DISABLE/DISABLE ON SLAVE\n-------------------------------\n\nEvents are ENABLEd by default. If you want to stop MariaDB from executing an\nevent, you may specify DISABLE. When it is ready to be activated, you may\nenable it using ALTER EVENT. Another option is DISABLE ON SLAVE, which\nindicates that an event was created on a master and has been replicated to the\nslave, which is prevented from executing the event. If DISABLE ON SLAVE is\nspecifically set, the event will be disabled everywhere. It will not be\nexecuted on the mater or the slaves.\n\nCOMMENT\n-------\n\nThe COMMENT clause may be used to set a comment for the event. Maximum length\nfor comments is 64 characters. The comment is a string, so it must be quoted.\nTo see events comments, you can query the INFORMATION_SCHEMA.EVENTS table (the\ncolumn is named EVENT_COMMENT).\n\nExamples\n--------\n\nMinimal CREATE EVENT statement:\n\nCREATE EVENT myevent\n ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR\n DO\n UPDATE myschema.mytable SET mycol = mycol + 1;\n\nAn event that will be triggered tomorrow at a certain time:\n\nCREATE EVENT example\nON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 DAY + INTERVAL 3 HOUR\nDO something;\n\nNext month a recurring event will be triggered hourly for a week:\n\nCREATE EVENT example\nON SCHEDULE EVERY 1 HOUR\nSTARTS CURRENT_TIMESTAMP + INTERVAL 1 MONTH\nENDS CURRENT_TIMESTAMP + INTERVAL 1 MONTH + INTERVAL 1 WEEK\nDO some_task;\n\nOR REPLACE and IF NOT EXISTS:\n\nCREATE EVENT myevent\n ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR\n DO\n UPDATE myschema.mytable SET mycol = mycol + 1;\nERROR 1537 (HY000): Event \'myevent\' already exists\n\nCREATE OR REPLACE EVENT myevent\n ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR\n DO\n UPDATE myschema.mytable SET mycol = mycol + 1;;\nQuery OK, 0 rows affected (0.00 sec)\n\nCREATE EVENT IF NOT EXISTS myevent\n ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR\n DO\n UPDATE myschema.mytable SET mycol = mycol + 1;\nQuery OK, 0 rows affected, 1 warning (0.00 sec)\n\nSHOW WARNINGS;\n+-------+------+--------------------------------+\n| Level | Code | Message |\n+-------+------+--------------------------------+\n| Note | 1537 | Event \'myevent\' already exists |\n+-------+------+--------------------------------+\n\nURL: https://mariadb.com/kb/en/create-event/','','https://mariadb.com/kb/en/create-event/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (710,38,'CREATE FUNCTION','Syntax\n------\n\nCREATE [OR REPLACE]\n [DEFINER = {user | CURRENT_USER | role | CURRENT_ROLE }]\n [AGGREGATE] FUNCTION [IF NOT EXISTS] func_name ([func_parameter[,...]])\n RETURNS type\n [characteristic ...]\n RETURN func_body\nfunc_parameter:\n [ IN | OUT | INOUT | IN OUT ] param_name type\ntype:\n Any valid MariaDB data type\ncharacteristic:\n LANGUAGE SQL\n | [NOT] DETERMINISTIC\n | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }\n | SQL SECURITY { DEFINER | INVOKER }\n | COMMENT \'string\'\nfunc_body:\n Valid SQL procedure statement\n\nDescription\n-----------\n\nUse the CREATE FUNCTION statement to create a new stored function. You must\nhave the CREATE ROUTINE database privilege to use CREATE FUNCTION. A function\ntakes any number of arguments and returns a value from the function body. The\nfunction body can be any valid SQL expression as you would use, for example,\nin any select expression. If you have the appropriate privileges, you can call\nthe function exactly as you would any built-in function. See Security below\nfor details on privileges.\n\nYou can also use a variant of the CREATE FUNCTION statement to install a\nuser-defined function (UDF) defined by a plugin. See CREATE FUNCTION (UDF) for\ndetails.\n\nYou can use a SELECT statement for the function body by enclosing it in\nparentheses, exactly as you would to use a subselect for any other expression.\nThe SELECT statement must return a single value. If more than one column is\nreturned when the function is called, error 1241 results. If more than one row\nis returned when the function is called, error 1242 results. Use a LIMIT\nclause to ensure only one row is returned.\n\nYou can also replace the RETURN clause with a BEGIN...END compound statement.\nThe compound statement must contain a RETURN statement. When the function is\ncalled, the RETURN statement immediately returns its result, and any\nstatements after RETURN are effectively ignored.\n\nBy default, a function is associated with the current database. To associate\nthe function explicitly with a given database, specify the fully-qualified\nname as db_name.func_name when you create it. If the function name is the same\nas the name of a built-in function, you must use the fully qualified name when\nyou call it.\n\nThe parameter list enclosed within parentheses must always be present. If\nthere are no parameters, an empty parameter list of () should be used.\nParameter names are not case sensitive.\n\nEach parameter can be declared to use any valid data type, except that the\nCOLLATE attribute cannot be used.\n\nFor valid identifiers to use as function names, see Identifier Names.\n\nIN | OUT | INOUT | IN OUT\n-------------------------\n\nMariaDB starting with 10.8.0\n----------------------------\nThe function parameter qualifiers for IN, OUT, INOUT, and IN OUT were added in\na 10.8.0 preview release. Prior to 10.8.0 quantifiers were supported only in\nprocedures.\n\nOUT, INOUT and its equivalent IN OUT, are only valid if called from SET and\nnot SELECT. These quantifiers are especially useful for creating functions\nwith more than one return value. This allows functions to be more complex and\nnested.\n\nDELIMITER $$\nCREATE FUNCTION add_func3(IN a INT, IN b INT, OUT c INT) RETURNS INT\nBEGIN\n SET c = 100;\n RETURN a + b;\nEND;\n$$\nDELIMITER ;\n\nSET @a = 2;\nSET @b = 3;\nSET @c = 0;\nSET @res= add_func3(@a, @b, @c);\n\nSELECT add_func3(@a, @b, @c);\nERROR 4186 (HY000): OUT or INOUT argument 3 for function add_func3 is not\nallowed here\n\nDELIMITER $$\nCREATE FUNCTION add_func4(IN a INT, IN b INT, d INT) RETURNS INT\nBEGIN\n DECLARE c, res INT;\n SET res = add_func3(a, b, c) + d;\n if (c > 99) then\n return 3;\n else\n return res;\n end if;\nEND;\n$$\n\nDELIMITER ;\n\nSELECT add_func4(1,2,3);\n+------------------+\n| add_func4(1,2,3) |\n+------------------+\n| 3 |\n+------------------+\n\nAGGREGATE\n---------\n\nMariaDB starting with 10.3.3\n----------------------------\nFrom MariaDB 10.3.3, it is possible to create stored aggregate functions as\nwell. See Stored Aggregate Functions for details.\n\nRETURNS\n-------\n\nThe RETURNS clause specifies the return type of the function. NULL values are\npermitted with all return types.\n\nWhat happens if the RETURN clause returns a value of a different type? It\ndepends on the SQL_MODE in effect at the moment of the function creation.\n\nIf the SQL_MODE is strict (STRICT_ALL_TABLES or STRICT_TRANS_TABLES flags are\nspecified), a 1366 error will be produced.\n\nOtherwise, the value is coerced to the proper type. For example, if a function\nspecifies an ENUM or SET value in the RETURNS clause, but the RETURN clause\nreturns an integer, the value returned from the function is the string for the\ncorresponding ENUM member of set of SET members.\n\nMariaDB stores the SQL_MODE system variable setting that is in effect at the\ntime a routine is created, and always executes the routine with this setting\nin force, regardless of the server SQL mode in effect when the routine is\ninvoked.\n\nLANGUAGE SQL\n------------\n\nLANGUAGE SQL is a standard SQL clause, and it can be used in MariaDB for\nportability. However that clause has no meaning, because SQL is the only\nsupported language for stored functions.\n\nA function is deterministic if it can produce only one result for a given list\nof parameters. If the result may be affected by stored data, server variables,\nrandom numbers or any value that is not explicitly passed, then the function\nis not deterministic. Also, a function is non-deterministic if it uses\nnon-deterministic functions like NOW() or CURRENT_TIMESTAMP(). The optimizer\nmay choose a faster execution plan if it known that the function is\ndeterministic. In such cases, you should declare the routine using the\nDETERMINISTIC keyword. If you want to explicitly state that the function is\nnot deterministic (which is the default) you can use the NOT DETERMINISTIC\nkeywords.\n\nIf you declare a non-deterministic function as DETERMINISTIC, you may get\nincorrect results. If you declare a deterministic function as NOT\nDETERMINISTIC, in some cases the queries will be slower.\n\nOR REPLACE\n----------\n\nMariaDB starting with 10.1.3\n----------------------------\nIf the optional OR REPLACE clause is used, it acts as a shortcut for:\n\nDROP FUNCTION IF EXISTS function_name;\nCREATE FUNCTION function_name ...;\n\nwith the exception that any existing privileges for the function are not\ndropped.\n\nIF NOT EXISTS\n-------------\n\nMariaDB starting with 10.1.3\n----------------------------\nIf the IF NOT EXISTS clause is used, MariaDB will return a warning instead of\nan error if the function already exists. Cannot be used together with OR\nREPLACE.\n\n[NOT] DETERMINISTIC\n-------------------\n\nThe [NOT] DETERMINISTIC clause also affects binary logging, because the\nSTATEMENT format can not be used to store or replicate non-deterministic\nstatements.\n\nCONTAINS SQL, NO SQL, READS SQL DATA, and MODIFIES SQL DATA are informative\nclauses that tell the server what the function does. MariaDB does not check in\nany way whether the specified clause is correct. If none of these clauses are\nspecified, CONTAINS SQL is used by default.\n\nMODIFIES SQL DATA\n-----------------\n\nMODIFIES SQL DATA means that the function contains statements that may modify\ndata stored in databases. This happens if the function contains statements\nlike DELETE, UPDATE, INSERT, REPLACE or DDL.\n\nREADS SQL DATA\n--------------\n\nREADS SQL DATA means that the function reads data stored in databases, but\ndoes not modify any data. This happens if SELECT statements are used, but\nthere no write operations are executed.\n\nCONTAINS SQL\n------------\n\nCONTAINS SQL means that the function contains at least one SQL statement, but\nit does not read or write any data stored in a database. Examples include SET\nor DO.\n\nNO SQL\n------\n\nNO SQL means nothing, because MariaDB does not currently support any language\nother than SQL.\n\nOracle Mode\n-----------\n\nMariaDB starting with 10.3\n--------------------------\nFrom MariaDB 10.3, a subset of Oracle\'s PL/SQL language has been supported in\naddition to the traditional SQL/PSM-based MariaDB syntax. See Oracle mode from\nMariaDB 10.3 for details on changes when running Oracle mode.\n\nSecurity\n--------\n\nYou must have the EXECUTE privilege on a function to call it. MariaDB\nautomatically grants the EXECUTE and ALTER ROUTINE privileges to the account\nthat called CREATE FUNCTION, even if the DEFINER clause was used.\n\nEach function has an account associated as the definer. By default, the\ndefiner is the account that created the function. Use the DEFINER clause to\nspecify a different account as the definer. You must have the SUPER privilege,\nor, from MariaDB 10.5.2, the SET USER privilege, to use the DEFINER clause.\nSee Account Names for details on specifying accounts.\n\nThe SQL SECURITY clause specifies what privileges are used when a function is\ncalled. If SQL SECURITY is INVOKER, the function body will be evaluated using\nthe privileges of the user calling the function. If SQL SECURITY is DEFINER,\nthe function body is always evaluated using the privileges of the definer\naccount. DEFINER is the default.\n\nThis allows you to create functions that grant limited access to certain data.\nFor example, say you have a table that stores some employee information, and\nthat you\'ve granted SELECT privileges only on certain columns to the user\naccount roger.\n\nCREATE TABLE employees (name TINYTEXT, dept TINYTEXT, salary INT);\nGRANT SELECT (name, dept) ON employees TO roger;\n\nTo allow the user the get the maximum salary for a department, define a\nfunction and grant the EXECUTE privilege:\n\nCREATE FUNCTION max_salary (dept TINYTEXT) RETURNS INT RETURN\n (SELECT MAX(salary) FROM employees WHERE employees.dept = dept);\nGRANT EXECUTE ON FUNCTION max_salary TO roger;\n\nSince SQL SECURITY defaults to DEFINER, whenever the user roger calls this\nfunction, the subselect will execute with your privileges. As long as you have\nprivileges to select the salary of each employee, the caller of the function\nwill be able to get the maximum salary for each department without being able\nto see individual salaries.\n\nCharacter sets and collations\n-----------------------------\n\nFunction return types can be declared to use any valid character set and\ncollation. If used, the COLLATE attribute needs to be preceded by a CHARACTER\nSET attribute.\n\nIf the character set and collation are not specifically set in the statement,\nthe database defaults at the time of creation will be used. If the database\ndefaults change at a later stage, the stored function character set/collation\nwill not be changed at the same time; the stored function needs to be dropped\nand recreated to ensure the same character set/collation as the database is\nused.\n\nExamples\n--------\n\nThe following example function takes a parameter, performs an operation using\nan SQL function, and returns the result.\n\nCREATE FUNCTION hello (s CHAR(20))\n RETURNS CHAR(50) DETERMINISTIC\n RETURN CONCAT(\'Hello, \',s,\'!\');\n\nSELECT hello(\'world\');\n+----------------+\n| hello(\'world\') |\n+----------------+\n| Hello, world! |\n+----------------+\n\nYou can use a compound statement in a function to manipulate data with\nstatements like INSERT and UPDATE. The following example creates a counter\nfunction that uses a temporary table to store the current value. Because the\ncompound statement contains statements terminated with semicolons, you have to\nfirst change the statement delimiter with the DELIMITER statement to allow the\nsemicolon to be used in the function body. See Delimiters in the mysql client\nfor more.\n\nCREATE TEMPORARY TABLE counter (c INT);\nINSERT INTO counter VALUES (0);\nDELIMITER //\nCREATE FUNCTION counter () RETURNS INT\n BEGIN\n UPDATE counter SET c = c + 1;\n RETURN (SELECT c FROM counter LIMIT 1);\n END //\nDELIMITER ;\n\nCharacter set and collation:\n\nCREATE FUNCTION hello2 (s CHAR(20))\n RETURNS CHAR(50) CHARACTER SET \'utf8\' COLLATE \'utf8_bin\' DETERMINISTIC\n RETURN CONCAT(\'Hello, \',s,\'!\');\n\nURL: https://mariadb.com/kb/en/create-function/','','https://mariadb.com/kb/en/create-function/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (711,38,'CREATE INDEX','Syntax\n------\n\nCREATE [OR REPLACE] [UNIQUE|FULLTEXT|SPATIAL] INDEX \n [IF NOT EXISTS] index_name\n [index_type]\n ON tbl_name (index_col_name,...)\n [WAIT n | NOWAIT]\n [index_option]\n [algorithm_option | lock_option] ...\n\nindex_col_name:\n col_name [(length)] [ASC | DESC]\n\nindex_type:\n USING {BTREE | HASH | RTREE}\n\nindex_option:\n [ KEY_BLOCK_SIZE [=] value\n | index_type\n | WITH PARSER parser_name\n | COMMENT \'string\'\n | CLUSTERING={YES| NO} ]\n [ IGNORED | NOT IGNORED ]\n\nalgorithm_option:\n ALGORITHM [=] {DEFAULT|INPLACE|COPY|NOCOPY|INSTANT}\n\nlock_option:\n LOCK [=] {DEFAULT|NONE|SHARED|EXCLUSIVE}\n\nDescription\n-----------\n\nCREATE INDEX is mapped to an ALTER TABLE statement to create indexes. See\nALTER TABLE. CREATE INDEX cannot be used to create a PRIMARY KEY; use ALTER\nTABLE instead.\n\nIf another connection is using the table, a metadata lock is active, and this\nstatement will wait until the lock is released. This is also true for\nnon-transactional tables.\n\nAnother shortcut, DROP INDEX, allows the removal of an index.\n\nFor valid identifiers to use as index names, see Identifier Names.\n\nNote that KEY_BLOCK_SIZE is currently ignored in CREATE INDEX, although it is\nincluded in the output of SHOW CREATE TABLE.\n\nPrivileges\n----------\n\nExecuting the CREATE INDEX statement requires the INDEX privilege for the\ntable or the database.\n\nOnline DDL\n----------\n\nOnline DDL is supported with the ALGORITHM and LOCK clauses.\n\nSee InnoDB Online DDL Overview for more information on online DDL with InnoDB.\n\nCREATE OR REPLACE INDEX\n-----------------------\n\nIf the OR REPLACE clause is used and if the index already exists, then instead\nof returning an error, the server will drop the existing index and replace it\nwith the newly defined index.\n\nCREATE INDEX IF NOT EXISTS\n--------------------------\n\nIf the IF NOT EXISTS clause is used, then the index will only be created if an\nindex with the same name does not already exist. If the index already exists,\nthen a warning will be triggered by default.\n\nIndex Definitions\n-----------------\n\nSee CREATE TABLE: Index Definitions for information about index definitions.\n\nWAIT/NOWAIT\n-----------\n\nSet the lock wait timeout. See WAIT and NOWAIT.\n\nALGORITHM\n---------\n\nSee ALTER TABLE: ALGORITHM for more information.\n\nLOCK\n----\n\nSee ALTER TABLE: LOCK for more information.\n\nProgress Reporting\n------------------\n\nMariaDB provides progress reporting for CREATE INDEX statement for clients\nthat support the new progress reporting protocol. For example, if you were\nusing the mysql client, then the progress report might look like this::\n\nCREATE INDEX i ON tab (num);\nStage: 1 of 2 \'copy to tmp table\' 46% of stage\n\nThe progress report is also shown in the output of the SHOW PROCESSLIST\nstatement and in the contents of the information_schema.PROCESSLIST table.\n\nSee Progress Reporting for more information.\n\nWITHOUT OVERLAPS\n----------------\n\nMariaDB starting with 10.5.3\n----------------------------\nThe WITHOUT OVERLAPS clause allows one to constrain a primary or unique index\nsuch that application-time periods cannot overlap.\n\nExamples\n--------\n\nCreating a unique index:\n\nCREATE UNIQUE INDEX HomePhone ON Employees(Home_Phone);\n\nOR REPLACE and IF NOT EXISTS:\n\nCREATE INDEX xi ON xx5 (x);\nQuery OK, 0 rows affected (0.03 sec)\n\nCREATE INDEX xi ON xx5 (x);\nERROR 1061 (42000): Duplicate key name \'xi\'\n\nCREATE OR REPLACE INDEX xi ON xx5 (x);\nQuery OK, 0 rows affected (0.03 sec)\n\nCREATE INDEX IF NOT EXISTS xi ON xx5 (x);\nQuery OK, 0 rows affected, 1 warning (0.00 sec)\n\nSHOW WARNINGS;\n+-------+------+-------------------------+\n| Level | Code | Message |\n+-------+------+-------------------------+\n| Note | 1061 | Duplicate key name \'xi\' |\n+-------+------+-------------------------+\n\nFrom MariaDB 10.5.3, creating a unique index for an application-time period\ntable with a WITHOUT OVERLAPS constraint:\n\nCREATE UNIQUE INDEX u ON rooms (room_number, p WITHOUT OVERLAPS);\n\nURL: https://mariadb.com/kb/en/create-index/','','https://mariadb.com/kb/en/create-index/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (712,38,'CREATE PACKAGE','MariaDB starting with 10.3.5\n----------------------------\nOracle-style packages were introduced in MariaDB 10.3.5.\n\nSyntax\n------\n\nCREATE\n [ OR REPLACE]\n [DEFINER = { user | CURRENT_USER | role | CURRENT_ROLE }]\n PACKAGE [ IF NOT EXISTS ]\n [ db_name . ] package_name\n [ package_characteristic ... ]\n{ AS | IS }\n [ package_specification_element ... ]\nEND [ package_name ]\n\npackage_characteristic:\n COMMENT \'string\'\n | SQL SECURITY { DEFINER | INVOKER }\n\npackage_specification_element:\n FUNCTION_SYM package_specification_function ;\n | PROCEDURE_SYM package_specification_procedure ;\n\npackage_specification_function:\n func_name [ ( func_param [, func_param]... ) ]\n RETURNS func_return_type\n [ package_routine_characteristic... ]\n\npackage_specification_procedure:\n proc_name [ ( proc_param [, proc_param]... ) ]\n [ package_routine_characteristic... ]\n\nfunc_return_type:\n type\n\nfunc_param:\n param_name [ IN | OUT | INOUT | IN OUT ] type\n\nproc_param:\n param_name [ IN | OUT | INOUT | IN OUT ] type\n\ntype:\n Any valid MariaDB explicit or anchored data type\n\npackage_routine_characteristic:\n COMMENT \'string\'\n | LANGUAGE SQL\n | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }\n | SQL SECURITY { DEFINER | INVOKER }\n\nDescription\n-----------\n\nThe CREATE PACKAGE statement can be used when Oracle SQL_MODE is set.\n\nThe CREATE PACKAGE creates the specification for a stored package (a\ncollection of logically related stored objects). A stored package\nspecification declares public routines (procedures and functions) of the\npackage, but does not implement these routines.\n\nA package whose specification was created by the CREATE PACKAGE statement,\nshould later be implemented using the CREATE PACKAGE BODY statement.\n\nFunction parameter quantifiers IN | OUT | INOUT | IN OUT\n--------------------------------------------------------\n\nMariaDB starting with 10.8.0\n----------------------------\nThe function parameter quantifiers for IN, OUT, INOUT, and IN OUT where added\nin a 10.8.0 preview release. Prior to 10.8.0 quantifiers were supported only\nin procedures.\n\nOUT, INOUT and its equivalent IN OUT, are only valid if called from SET and\nnot SELECT. These quantifiers are especially useful for creating functions and\nprocedures with more than one return value. This allows functions and\nprocedures to be more complex and nested.\n\nExamples\n--------\n\nSET sql_mode=ORACLE;\nDELIMITER $$\nCREATE OR REPLACE PACKAGE employee_tools AS\n FUNCTION getSalary(eid INT) RETURN DECIMAL(10,2);\n PROCEDURE raiseSalary(eid INT, amount DECIMAL(10,2));\n PROCEDURE raiseSalaryStd(eid INT);\n PROCEDURE hire(ename TEXT, esalary DECIMAL(10,2));\nEND;\n$$\nDELIMITER ;\n\nURL: https://mariadb.com/kb/en/create-package/','','https://mariadb.com/kb/en/create-package/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (713,38,'CREATE PACKAGE BODY','MariaDB starting with 10.3.5\n----------------------------\nOracle-style packages were introduced in MariaDB 10.3.5.\n\nSyntax\n------\n\nCREATE [ OR REPLACE ]\n [DEFINER = { user | CURRENT_USER | role | CURRENT_ROLE }]\n PACKAGE BODY\n [ IF NOT EXISTS ]\n [ db_name . ] package_name\n [ package_characteristic... ]\n{ AS | IS }\n package_implementation_declare_section\n package_implementation_executable_section\nEND [ package_name]\n\npackage_implementation_declare_section:\n package_implementation_item_declaration\n [ package_implementation_item_declaration... ]\n [ package_implementation_routine_definition... ]\n | package_implementation_routine_definition\n [ package_implementation_routine_definition...]\n\npackage_implementation_item_declaration:\n variable_declaration ;\n\nvariable_declaration:\n variable_name[,...] type [:= expr ]\n\npackage_implementation_routine_definition:\n FUNCTION package_specification_function\n [ package_implementation_function_body ] ;\n | PROCEDURE package_specification_procedure\n [ package_implementation_procedure_body ] ;\n\npackage_implementation_function_body:\n { AS | IS } package_routine_body [func_name]\n\npackage_implementation_procedure_body:\n { AS | IS } package_routine_body [proc_name]\n\npackage_routine_body:\n [ package_routine_declarations ]\n BEGIN\n statements [ EXCEPTION exception_handlers ]\n END\n\npackage_routine_declarations:\n package_routine_declaration \';\' [package_routine_declaration \';\']...\n\npackage_routine_declaration:\n variable_declaration\n | condition_name CONDITION FOR condition_value\n | user_exception_name EXCEPTION\n | CURSOR_SYM cursor_name\n [ ( cursor_formal_parameters ) ]\n IS select_statement\n ;\n\npackage_implementation_executable_section:\n END\n | BEGIN\n statement ; [statement ; ]...\n [EXCEPTION exception_handlers]\n END\n\nexception_handlers:\n exception_handler [exception_handler...]\n\nexception_handler:\n WHEN_SYM condition_value [, condition_value]...\n THEN_SYM statement ; [statement ;]...\n\ncondition_value:\n condition_name\n | user_exception_name\n | SQLWARNING\n | SQLEXCEPTION\n | NOT FOUND\n | OTHERS_SYM\n | SQLSTATE [VALUE] sqlstate_value\n | mariadb_error_code\n\nDescription\n-----------\n\nThe CREATE PACKAGE BODY statement can be used when Oracle SQL_MODE is set.\n\nThe CREATE PACKAGE BODY statement creates the package body for a stored\npackage. The package specification must be previously created using the CREATE\nPACKAGE statement.\n\nA package body provides implementations of the package public routines and can\noptionally have:\n\n* package-wide private variables\n* package private routines\n* forward declarations for private routines\n* an executable initialization section\n\nExamples\n--------\n\nSET sql_mode=ORACLE;\nDELIMITER $$\nCREATE OR REPLACE PACKAGE employee_tools AS\n FUNCTION getSalary(eid INT) RETURN DECIMAL(10,2);\n PROCEDURE raiseSalary(eid INT, amount DECIMAL(10,2));\n PROCEDURE raiseSalaryStd(eid INT);\n PROCEDURE hire(ename TEXT, esalary DECIMAL(10,2));\nEND;\n$$\nCREATE PACKAGE BODY employee_tools AS\n -- package body variables\n stdRaiseAmount DECIMAL(10,2):=500;\n\n-- private routines\n PROCEDURE log (eid INT, ecmnt TEXT) AS\n BEGIN\n INSERT INTO employee_log (id, cmnt) VALUES (eid, ecmnt);\n END;\n\n-- public routines\n PROCEDURE hire(ename TEXT, esalary DECIMAL(10,2)) AS\n eid INT;\n BEGIN\n INSERT INTO employee (name, salary) VALUES (ename, esalary);\n eid:= last_insert_id();\n log(eid, \'hire \' || ename);\n END;\n\nFUNCTION getSalary(eid INT) RETURN DECIMAL(10,2) AS\n nSalary DECIMAL(10,2);\n BEGIN\n SELECT salary INTO nSalary FROM employee WHERE id=eid;\n log(eid, \'getSalary id=\' || eid || \' salary=\' || nSalary);\n RETURN nSalary;\n END;\n\nPROCEDURE raiseSalary(eid INT, amount DECIMAL(10,2)) AS\n BEGIN\n UPDATE employee SET salary=salary+amount WHERE id=eid;\n log(eid, \'raiseSalary id=\' || eid || \' amount=\' || amount);\n END;\n\nPROCEDURE raiseSalaryStd(eid INT) AS\n BEGIN\n raiseSalary(eid, stdRaiseAmount);\n log(eid, \'raiseSalaryStd id=\' || eid);\n END;\n\nBEGIN\n -- This code is executed when the current session\n -- accesses any of the package routines for the first time\n log(0, \'Session \' || connection_id() || \' \' || current_user || \' started\');\nEND;\n$$\n\nDELIMITER ;\n\nURL: https://mariadb.com/kb/en/create-package-body/','','https://mariadb.com/kb/en/create-package-body/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (714,38,'CREATE PROCEDURE','Syntax\n------\n\nCREATE\n [OR REPLACE]\n [DEFINER = { user | CURRENT_USER | role | CURRENT_ROLE }]\n PROCEDURE [IF NOT EXISTS] sp_name ([proc_parameter[,...]])\n [characteristic ...] routine_body\n\nproc_parameter:\n [ IN | OUT | INOUT ] param_name type\n\ntype:\n Any valid MariaDB data type\n\ncharacteristic:\n LANGUAGE SQL\n | [NOT] DETERMINISTIC\n | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }\n | SQL SECURITY { DEFINER | INVOKER }\n | COMMENT \'string\'\n\nroutine_body:\n Valid SQL procedure statement\n\nDescription\n-----------\n\nCreates a stored procedure. By default, a routine is associated with the\ndefault database. To associate the routine explicitly with a given database,\nspecify the name as db_name.sp_name when you create it.\n\nWhen the routine is invoked, an implicit USE db_name is performed (and undone\nwhen the routine terminates). The causes the routine to have the given default\ndatabase while it executes. USE statements within stored routines are\ndisallowed.\n\nWhen a stored procedure has been created, you invoke it by using the CALL\nstatement (see CALL).\n\nTo execute the CREATE PROCEDURE statement, it is necessary to have the CREATE\nROUTINE privilege. By default, MariaDB automatically grants the ALTER ROUTINE\nand EXECUTE privileges to the routine creator. See also Stored Routine\nPrivileges.\n\nThe DEFINER and SQL SECURITY clauses specify the security context to be used\nwhen checking access privileges at routine execution time, as described here.\nRequires the SUPER privilege, or, from MariaDB 10.5.2, the SET USER privilege.\n\nIf the routine name is the same as the name of a built-in SQL function, you\nmust use a space between the name and the following parenthesis when defining\nthe routine, or a syntax error occurs. This is also true when you invoke the\nroutine later. For this reason, we suggest that it is better to avoid re-using\nthe names of existing SQL functions for your own stored routines.\n\nThe IGNORE_SPACE SQL mode applies to built-in functions, not to stored\nroutines. It is always allowable to have spaces after a routine name,\nregardless of whether IGNORE_SPACE is enabled.\n\nThe parameter list enclosed within parentheses must always be present. If\nthere are no parameters, an empty parameter list of () should be used.\nParameter names are not case sensitive.\n\nEach parameter can be declared to use any valid data type, except that the\nCOLLATE attribute cannot be used.\n\nFor valid identifiers to use as procedure names, see Identifier Names.\n\nThings to be Aware of With CREATE OR REPLACE\n--------------------------------------------\n\n* One can\'t use OR REPLACE together with IF EXISTS.\n\nCREATE PROCEDURE IF NOT EXISTS\n------------------------------\n\nIf the IF NOT EXISTS clause is used, then the procedure will only be created\nif a procedure with the same name does not already exist. If the procedure\nalready exists, then a warning will be triggered by default.\n\nIN/OUT/INOUT\n------------\n\nEach parameter is an IN parameter by default. To specify otherwise for a\nparameter, use the keyword OUT or INOUT before the parameter name.\n\nAn IN parameter passes a value into a procedure. The procedure might modify\nthe value, but the modification is not visible to the caller when the\nprocedure returns. An OUT parameter passes a value from the procedure back to\nthe caller. Its initial value is NULL within the procedure, and its value is\nvisible to the caller when the procedure returns. An INOUT parameter is\ninitialized by the caller, can be modified by the procedure, and any change\nmade by the procedure is visible to the caller when the procedure returns.\n\nFor each OUT or INOUT parameter, pass a user-defined variable in the CALL\nstatement that invokes the procedure so that you can obtain its value when the\nprocedure returns. If you are calling the procedure from within another stored\nprocedure or function, you can also pass a routine parameter or local routine\nvariable as an IN or INOUT parameter.\n\nDETERMINISTIC/NOT DETERMINISTIC\n-------------------------------\n\nDETERMINISTIC and NOT DETERMINISTIC apply only to functions. Specifying\nDETERMINISTC or NON-DETERMINISTIC in procedures has no effect. The default\nvalue is NOT DETERMINISTIC. Functions are DETERMINISTIC when they always\nreturn the same value for the same input. For example, a truncate or substring\nfunction. Any function involving data, therefore, is always NOT DETERMINISTIC.\n\nCONTAINS SQL/NO SQL/READS SQL DATA/MODIFIES SQL DATA\n----------------------------------------------------\n\nCONTAINS SQL, NO SQL, READS SQL DATA, and MODIFIES SQL DATA are informative\nclauses that tell the server what the function does. MariaDB does not check in\nany way whether the specified clause is correct. If none of these clauses are\nspecified, CONTAINS SQL is used by default.\n\nMODIFIES SQL DATA means that the function contains statements that may modify\ndata stored in databases. This happens if the function contains statements\nlike DELETE, UPDATE, INSERT, REPLACE or DDL.\n\nREADS SQL DATA means that the function reads data stored in databases, but\ndoes not modify any data. This happens if SELECT statements are used, but\nthere no write operations are executed.\n\nCONTAINS SQL means that the function contains at least one SQL statement, but\nit does not read or write any data stored in a database. Examples include SET\nor DO.\n\nNO SQL means nothing, because MariaDB does not currently support any language\nother than SQL.\n\nThe routine_body consists of a valid SQL procedure statement. This can be a\nsimple statement such as SELECT or INSERT, or it can be a compound statement\nwritten using BEGIN and END. Compound statements can contain declarations,\nloops, and other control structure statements. See Programmatic and Compound\nStatements for syntax details.\n\nMariaDB allows routines to contain DDL statements, such as CREATE and DROP.\nMariaDB also allows stored procedures (but not stored functions) to contain\nSQL transaction statements such as COMMIT.\n\nFor additional information about statements that are not allowed in stored\nroutines, see Stored Routine Limitations.\n\nInvoking stored procedure from within programs\n----------------------------------------------\n\nFor information about invoking stored procedures from within programs written\nin a language that has a MariaDB/MySQL interface, see CALL.\n\nOR REPLACE\n----------\n\nIf the optional OR REPLACE clause is used, it acts as a shortcut for:\n\nDROP PROCEDURE IF EXISTS name;\nCREATE PROCEDURE name ...;\n\nwith the exception that any existing privileges for the procedure are not\ndropped.\n\nsql_mode\n--------\n\nMariaDB stores the sql_mode system variable setting that is in effect at the\ntime a routine is created, and always executes the routine with this setting\nin force, regardless of the server SQL mode in effect when the routine is\ninvoked.\n\nCharacter Sets and Collations\n-----------------------------\n\nProcedure parameters can be declared with any character set/collation. If the\ncharacter set and collation are not specifically set, the database defaults at\nthe time of creation will be used. If the database defaults change at a later\nstage, the stored procedure character set/collation will not be changed at the\nsame time; the stored procedure needs to be dropped and recreated to ensure\nthe same character set/collation as the database is used.\n\nOracle Mode\n-----------\n\nMariaDB starting with 10.3\n--------------------------\nFrom MariaDB 10.3, a subset of Oracle\'s PL/SQL language has been supported in\naddition to the traditional SQL/PSM-based MariaDB syntax. See Oracle mode from\nMariaDB 10.3 for details on changes when running Oracle mode.\n\nExamples\n--------\n\nThe following example shows a simple stored procedure that uses an OUT\nparameter. It uses the DELIMITER command to set a new delimiter for the\nduration of the process — see Delimiters in the mysql client.\n\nDELIMITER //\n\nCREATE PROCEDURE simpleproc (OUT param1 INT)\n BEGIN\n SELECT COUNT(*) INTO param1 FROM t;\n END;\n//\n\nDELIMITER ;\n\nCALL simpleproc(@a);\n\nSELECT @a;\n+------+\n| @a |\n+------+\n| 1 |\n+------+\n\nCharacter set and collation:\n\nDELIMITER //\n\nCREATE PROCEDURE simpleproc2 (\n OUT param1 CHAR(10) CHARACTER SET \'utf8\' COLLATE \'utf8_bin\'\n)\n BEGIN\n SELECT CONCAT(\'a\'),f1 INTO param1 FROM t;\n END;\n//\n\nDELIMITER ;\n\nCREATE OR REPLACE:\n\nDELIMITER //\n\nCREATE PROCEDURE simpleproc2 (\n OUT param1 CHAR(10) CHARACTER SET \'utf8\' COLLATE \'utf8_bin\'\n)\n BEGIN\n SELECT CONCAT(\'a\'),f1 INTO param1 FROM t;\n END;\n//\nERROR 1304 (42000): PROCEDURE simpleproc2 already exists\n\nDELIMITER ;\n\nDELIMITER //\n\nCREATE OR REPLACE PROCEDURE simpleproc2 (\n OUT param1 CHAR(10) CHARACTER SET \'utf8\' COLLATE \'utf8_bin\'\n)\n BEGIN\n SELECT CONCAT(\'a\'),f1 INTO param1 FROM t;\n END;\n//\nERROR 1304 (42000): PROCEDURE simpleproc2 already exists\n\nDELIMITER ;\nQuery OK, 0 rows affected (0.03 sec)\n\nURL: https://mariadb.com/kb/en/create-procedure/','','https://mariadb.com/kb/en/create-procedure/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (715,38,'CREATE SERVER','Syntax\n------\n\nCREATE [OR REPLACE] SERVER [IF NOT EXISTS] server_name\n FOREIGN DATA WRAPPER wrapper_name\n OPTIONS (option [, option] ...)\n\noption:\n { HOST character-literal\n | DATABASE character-literal\n | USER character-literal\n | PASSWORD character-literal\n | SOCKET character-literal\n | OWNER character-literal\n | PORT numeric-literal }\n\nDescription\n-----------\n\nThis statement creates the definition of a server for use with the Spider,\nConnect, FEDERATED or FederatedX storage engine. The CREATE SERVER statement\ncreates a new row within the servers table within the mysql database. This\nstatement requires the SUPER privilege or, from MariaDB 10.5.2, the FEDERATED\nADMIN privilege.\n\nThe server_name should be a unique reference to the server. Server definitions\nare global within the scope of the server, it is not possible to qualify the\nserver definition to a specific database. server_name has a maximum length of\n64 characters (names longer than 64 characters are silently truncated), and is\ncase insensitive. You may specify the name as a quoted string.\n\nThe wrapper_name may be quoted with single quotes. Supported values are:\n\n* mysql\n* mariadb (in MariaDB 10.3 and later)\n\nFor each option you must specify either a character literal or numeric\nliteral. Character literals are UTF-8, support a maximum length of 64\ncharacters and default to a blank (empty) string. String literals are silently\ntruncated to 64 characters. Numeric literals must be a number between 0 and\n9999, default value is 0.\n\nNote: The OWNER option is currently not applied, and has no effect on the\nownership or operation of the server connection that is created.\n\nThe CREATE SERVER statement creates an entry in the mysql.servers table that\ncan later be used with the CREATE TABLE statement when creating a Spider,\nConnect, FederatedX or FEDERATED table. The options that you specify will be\nused to populate the columns in the mysql.servers table. The table columns are\nServer_name, Host, Db, Username, Password, Port and Socket.\n\nDROP SERVER removes a previously created server definition.\n\nCREATE SERVER is not written to the binary log, irrespective of the binary log\nformat being used. From MariaDB 10.1.13, Galera replicates the CREATE SERVER,\nALTER SERVER and DROP SERVER statements.\n\nFor valid identifiers to use as server names, see Identifier Names.\n\nOR REPLACE\n----------\n\nIf the optional OR REPLACE clause is used, it acts as a shortcut for:\n\nDROP SERVER IF EXISTS name;\nCREATE SERVER server_name ...;\n\nIF NOT EXISTS\n-------------\n\nIf the IF NOT EXISTS clause is used, MariaDB will return a warning instead of\nan error if the server already exists. Cannot be used together with OR REPLACE.\n\nExamples\n--------\n\nCREATE SERVER s\nFOREIGN DATA WRAPPER mysql\nOPTIONS (USER \'Remote\', HOST \'192.168.1.106\', DATABASE \'test\');\n\nOR REPLACE and IF NOT EXISTS:\n\nCREATE SERVER s \nFOREIGN DATA WRAPPER mysql \nOPTIONS (USER \'Remote\', HOST \'192.168.1.106\', DATABASE \'test\');\nERROR 1476 (HY000): The foreign server, s, you are trying to create already\nexists\n\nCREATE OR REPLACE SERVER s \nFOREIGN DATA WRAPPER mysql \nOPTIONS (USER \'Remote\', HOST \'192.168.1.106\', DATABASE \'test\');\nQuery OK, 0 rows affected (0.00 sec)\n\nCREATE SERVER IF NOT EXISTS s \nFOREIGN DATA WRAPPER mysql \nOPTIONS (USER \'Remote\', HOST \'192.168.1.106\', DATABASE \'test\');\nQuery OK, 0 rows affected, 1 warning (0.00 sec)\n\nSHOW WARNINGS;\n+-------+------+---------------------------------------------------------------\n+\n| Level | Code | Message \n |\n+-------+------+---------------------------------------------------------------\n+\n| Note | 1476 | The foreign server, s, you are trying to create already\nexists |\n+-------+------+---------------------------------------------------------------\n+\n\nURL: https://mariadb.com/kb/en/create-server/','','https://mariadb.com/kb/en/create-server/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (716,38,'CREATE TABLESPACE','The CREATE TABLESPACE statement is not supported by MariaDB. It was originally\ninherited from MySQL NDB Cluster. In MySQL 5.7 and later, the statement is\nalso supported for InnoDB. However, MariaDB has chosen not to include that\nspecific feature. See MDEV-19294 for more information.\n\nURL: https://mariadb.com/kb/en/create-tablespace/','','https://mariadb.com/kb/en/create-tablespace/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (717,38,'CREATE TRIGGER','Syntax\n------\n\nCREATE [OR REPLACE]\n [DEFINER = { user | CURRENT_USER | role | CURRENT_ROLE }]\n TRIGGER [IF NOT EXISTS] trigger_name trigger_time trigger_event\n ON tbl_name FOR EACH ROW\n [{ FOLLOWS | PRECEDES } other_trigger_name ]\n trigger_stmt;\n\nDescription\n-----------\n\nThis statement creates a new trigger. A trigger is a named database object\nthat is associated with a table, and that activates when a particular event\noccurs for the table. The trigger becomes associated with the table named\ntbl_name, which must refer to a permanent table. You cannot associate a\ntrigger with a TEMPORARY table or a view.\n\nCREATE TRIGGER requires the TRIGGER privilege for the table associated with\nthe trigger.\n\nMariaDB starting with 10.2.3\n----------------------------\nYou can have multiple triggers for the same trigger_time and trigger_event.\n\nFor valid identifiers to use as trigger names, see Identifier Names.\n\nOR REPLACE\n----------\n\nMariaDB starting with 10.1.4\n----------------------------\nIf used and the trigger already exists, instead of an error being returned,\nthe existing trigger will be dropped and replaced by the newly defined trigger.\n\nDEFINER\n-------\n\nThe DEFINER clause determines the security context to be used when checking\naccess privileges at trigger activation time. Usage requires the SUPER\nprivilege, or, from MariaDB 10.5.2, the SET USER privilege.\n\nIF NOT EXISTS\n-------------\n\nMariaDB starting with 10.1.4\n----------------------------\nIf the IF NOT EXISTS clause is used, the trigger will only be created if a\ntrigger of the same name does not exist. If the trigger already exists, by\ndefault a warning will be returned.\n\ntrigger_time\n------------\n\ntrigger_time is the trigger action time. It can be BEFORE or AFTER to indicate\nthat the trigger activates before or after each row to be modified.\n\ntrigger_event\n-------------\n\ntrigger_event indicates the kind of statement that activates the trigger. The\ntrigger_event can be one of the following:\n\n* INSERT: The trigger is activated whenever a new row is inserted into the\ntable; for example, through INSERT, LOAD DATA, and REPLACE statements.\n* UPDATE: The trigger is activated whenever a row is modified; for example,\nthrough UPDATE statements.\n* DELETE: The trigger is activated whenever a row is deleted from the table;\nfor example, through DELETE and REPLACE statements. However, DROP TABLE and\nTRUNCATE statements on the table do not activate this trigger, because they do\nnot use DELETE. Dropping a partition does not activate DELETE triggers, either.\n\nFOLLOWS/PRECEDES other_trigger_name\n-----------------------------------\n\nMariaDB starting with 10.2.3\n----------------------------\nThe FOLLOWS other_trigger_name and PRECEDES other_trigger_name options were\nadded in MariaDB 10.2.3 as part of supporting multiple triggers per action\ntime. This is the same syntax used by MySQL 5.7, although MySQL 5.7 does not\nhave multi-trigger support.\n\nFOLLOWS adds the new trigger after another trigger while PRECEDES adds the new\ntrigger before another trigger. If neither option is used, the new trigger is\nadded last for the given action and time.\n\nFOLLOWS and PRECEDES are not stored in the trigger definition. However the\ntrigger order is guaranteed to not change over time. mariadb-dump/mysqldump\nand other backup methods will not change trigger order. You can verify the\ntrigger order from the ACTION_ORDER column in INFORMATION_SCHEMA.TRIGGERS\ntable.\n\nSELECT trigger_name, action_order FROM information_schema.triggers \n WHERE event_object_table=\'t1\';\n\nAtomic DDL\n----------\n\nMariaDB starting with 10.6.1\n----------------------------\nMariaDB 10.6.1 supports Atomic DDL and CREATE TRIGGER is atomic.\n\nExamples\n--------\n\nCREATE DEFINER=`root`@`localhost` TRIGGER increment_animal\n AFTER INSERT ON animals FOR EACH ROW\n UPDATE animal_count SET animal_count.animals = animal_count.animals+1;\n\nOR REPLACE and IF NOT EXISTS\n\nCREATE DEFINER=`root`@`localhost` TRIGGER increment_animal\n AFTER INSERT ON animals FOR EACH ROW\n UPDATE animal_count SET animal_count.animals = animal_count.animals+1;\nERROR 1359 (HY000): Trigger already exists\n\nCREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER increment_animal\n AFTER INSERT ON animals FOR EACH ROW\n UPDATE animal_count SET animal_count.animals = animal_count.animals+1;\nQuery OK, 0 rows affected (0.12 sec)\n\nCREATE DEFINER=`root`@`localhost` TRIGGER IF NOT EXISTS increment_animal\n AFTER INSERT ON animals FOR EACH ROW\n UPDATE animal_count SET animal_count.animals = animal_count.animals+1;\nQuery OK, 0 rows affected, 1 warning (0.00 sec)\n\nSHOW WARNINGS;\n+-------+------+------------------------+\n| Level | Code | Message |\n+-------+------+------------------------+\n| Note | 1359 | Trigger already exists |\n+-------+------+------------------------+\n1 row in set (0.00 sec)\n\nURL: https://mariadb.com/kb/en/create-trigger/','','https://mariadb.com/kb/en/create-trigger/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (718,38,'CREATE VIEW','Syntax\n------\n\nCREATE\n [OR REPLACE]\n [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]\n [DEFINER = { user | CURRENT_USER | role | CURRENT_ROLE }]\n [SQL SECURITY { DEFINER | INVOKER }]\n VIEW [IF NOT EXISTS] view_name [(column_list)]\n AS select_statement\n [WITH [CASCADED | LOCAL] CHECK OPTION]\n\nDescription\n-----------\n\nThe CREATE VIEW statement creates a new view, or replaces an existing one if\nthe OR REPLACE clause is given. If the view does not exist, CREATE OR REPLACE\nVIEW is the same as CREATE VIEW. If the view does exist, CREATE OR REPLACE\nVIEW is the same as ALTER VIEW.\n\nThe select_statement is a SELECT statement that provides the definition of the\nview. (When you select from the view, you select in effect using the SELECT\nstatement.) select_statement can select from base tables or other views.\n\nThe view definition is \"frozen\" at creation time, so changes to the underlying\ntables afterwards do not affect the view definition. For example, if a view is\ndefined as SELECT * on a table, new columns added to the table later do not\nbecome part of the view. A SHOW CREATE VIEW shows that such queries are\nrewritten and column names are included in the view definition.\n\nThe view definition must be a query that does not return errors at view\ncreation times. However, the base tables used by the views might be altered\nlater and the query may not be valid anymore. In this case, querying the view\nwill result in an error. CHECK TABLE helps in finding this kind of problems.\n\nThe ALGORITHM clause affects how MariaDB processes the view. The DEFINER and\nSQL SECURITY clauses specify the security context to be used when checking\naccess privileges at view invocation time. The WITH CHECK OPTION clause can be\ngiven to constrain inserts or updates to rows in tables referenced by the\nview. These clauses are described later in this section.\n\nThe CREATE VIEW statement requires the CREATE VIEW privilege for the view, and\nsome privilege for each column selected by the SELECT statement. For columns\nused elsewhere in the SELECT statement you must have the SELECT privilege. If\nthe OR REPLACE clause is present, you must also have the DROP privilege for\nthe view.\n\nA view belongs to a database. By default, a new view is created in the default\ndatabase. To create the view explicitly in a given database, specify the name\nas db_name.view_name when you create it.\n\nCREATE VIEW test.v AS SELECT * FROM t;\n\nBase tables and views share the same namespace within a database, so a\ndatabase cannot contain a base table and a view that have the same name.\n\nViews must have unique column names with no duplicates, just like base tables.\nBy default, the names of the columns retrieved by the SELECT statement are\nused for the view column names. To define explicit names for the view columns,\nthe optional column_list clause can be given as a list of comma-separated\nidentifiers. The number of names in column_list must be the same as the number\nof columns retrieved by the SELECT statement.\n\nMySQL until 5.1.28\n------------------\nPrior to MySQL 5.1.29, When you modify an existing view, the current view\ndefinition is backed up and saved. It is stored in that table\'s database\ndirectory, in a subdirectory named arc. The backup file for a view v is named\nv.frm-00001. If you alter the view again, the next backup is named\nv.frm-00002. The three latest view backup definitions are stored. Backed up\nview definitions are not preserved by mysqldump, or any other such programs,\nbut you can retain them using a file copy operation. However, they are not\nneeded for anything but to provide you with a backup of your previous view\ndefinition. It is safe to remove these backup definitions, but only while\nmysqld is not running. If you delete the arc subdirectory or its files while\nmysqld is running, you will receive an error the next time you try to alter\nthe view:\n\nMariaDB [test]> ALTER VIEW v AS SELECT * FROM t; \nERROR 6 (HY000): Error on delete of \'.\\test\\arc/v.frm-0004\' (Errcode: 2)\n\nColumns retrieved by the SELECT statement can be simple references to table\ncolumns. They can also be expressions that use functions, constant values,\noperators, and so forth.\n\nUnqualified table or view names in the SELECT statement are interpreted with\nrespect to the default database. A view can refer to tables or views in other\ndatabases by qualifying the table or view name with the proper database name.\n\nA view can be created from many kinds of SELECT statements. It can refer to\nbase tables or other views. It can use joins, UNION, and subqueries. The\nSELECT need not even refer to any tables. The following example defines a view\nthat selects two columns from another table, as well as an expression\ncalculated from those columns:\n\nCREATE TABLE t (qty INT, price INT);\n\nINSERT INTO t VALUES(3, 50);\n\nCREATE VIEW v AS SELECT qty, price, qty*price AS value FROM t;\n\nSELECT * FROM v;\n+------+-------+-------+\n| qty | price | value |\n+------+-------+-------+\n| 3 | 50 | 150 |\n+------+-------+-------+\n\nA view definition is subject to the following restrictions:\n\n* The SELECT statement cannot contain a subquery in the FROM clause.\n* The SELECT statement cannot refer to system or user variables.\n* Within a stored program, the definition cannot refer to program parameters\nor local variables.\n* The SELECT statement cannot refer to prepared statement parameters.\n* Any table or view referred to in the definition must exist. However, after a\nview has been created, it is possible to drop a table or view that the\ndefinition refers to. In this case, use of the view results in an error. To\ncheck a view definition for problems of this kind, use the CHECK TABLE\nstatement.\n* The definition cannot refer to a TEMPORARY table, and you cannot create a\nTEMPORARY view.\n* Any tables named in the view definition must exist at definition time.\n* You cannot associate a trigger with a view.\n* For valid identifiers to use as view names, see Identifier Names.\n\nORDER BY is allowed in a view definition, but it is ignored if you select from\na view using a statement that has its own ORDER BY.\n\nFor other options or clauses in the definition, they are added to the options\nor clauses of the statement that references the view, but the effect is\nundefined. For example, if a view definition includes a LIMIT clause, and you\nselect from the view using a statement that has its own LIMIT clause, it is\nundefined which limit applies. This same principle applies to options such as\nALL, DISTINCT, or SQL_SMALL_RESULT that follow the SELECT keyword, and to\nclauses such as INTO, FOR UPDATE, and LOCK IN SHARE MODE.\n\nThe PROCEDURE clause cannot be used in a view definition, and it cannot be\nused if a view is referenced in the FROM clause.\n\nIf you create a view and then change the query processing environment by\nchanging system variables, that may affect the results that you get from the\nview:\n\nCREATE VIEW v (mycol) AS SELECT \'abc\';\n\nSET sql_mode = \'\';\n\nSELECT \"mycol\" FROM v;\n+-------+\n| mycol |\n+-------+\n| mycol | \n+-------+\n\nSET sql_mode = \'ANSI_QUOTES\';\n\nSELECT \"mycol\" FROM v;\n+-------+\n| mycol |\n+-------+\n| abc | \n+-------+\n\nThe DEFINER and SQL SECURITY clauses determine which MariaDB account to use\nwhen checking access privileges for the view when a statement is executed that\nreferences the view. They were added in MySQL 5.1.2. The legal SQL SECURITY\ncharacteristic values are DEFINER and INVOKER. These indicate that the\nrequired privileges must be held by the user who defined or invoked the view,\nrespectively. The default SQL SECURITY value is DEFINER.\n\nIf a user value is given for the DEFINER clause, it should be a MariaDB\naccount in \'user_name\'@\'host_name\' format (the same format used in the GRANT\nstatement). The user_name and host_name values both are required. The definer\ncan also be given as CURRENT_USER or CURRENT_USER(). The default DEFINER value\nis the user who executes the CREATE VIEW statement. This is the same as\nspecifying DEFINER = CURRENT_USER explicitly.\n\nIf you specify the DEFINER clause, these rules determine the legal DEFINER\nuser values:\n\n* If you do not have the SUPER privilege, or, from MariaDB 10.5.2, the SET\nUSER privilege, the only legal user value is your own account, either\nspecified literally or by using CURRENT_USER. You cannot set the definer to\nsome other account.\n* If you have the SUPER privilege, or, from MariaDB 10.5.2, the SET USER\nprivilege, you can specify any syntactically legal account name. If the\naccount does not actually exist, a warning is generated.\n* If the SQL SECURITY value is DEFINER but the definer account does not exist\nwhen the view is referenced, an error occurs.\n\nWithin a view definition, CURRENT_USER returns the view\'s DEFINER value by\ndefault. For views defined with the SQL SECURITY INVOKER characteristic,\nCURRENT_USER returns the account for the view\'s invoker. For information about\nuser auditing within views, see\nhttp://dev.mysql.com/doc/refman/5.1/en/account-activity-auditing.html.\n\nWithin a stored routine that is defined with the SQL SECURITY DEFINER\ncharacteristic, CURRENT_USER returns the routine\'s DEFINER value. This also\naffects a view defined within such a program, if the view definition contains\na DEFINER value of CURRENT_USER.\n\nView privileges are checked like this:\n\n* At view definition time, the view creator must have the privileges needed to\nuse the top-level objects accessed by the view. For example, if the view\ndefinition refers to table columns, the creator must have privileges for the\ncolumns, as described previously. If the definition refers to a stored\nfunction, only the privileges needed to invoke the function can be checked.\nThe privileges required when the function runs can be checked only as it\nexecutes: For different invocations of the function, different execution paths\nwithin the function might be taken.\n* When a view is referenced, privileges for objects accessed by the view are\nchecked against the privileges held by the view creator or invoker, depending\non whether the SQL SECURITY characteristic is DEFINER or INVOKER, respectively.\n* If reference to a view causes execution of a stored function, privilege\nchecking for statements executed within the function depend on whether the\nfunction is defined with a SQL SECURITY characteristic of DEFINER or INVOKER.\nIf the security characteristic is DEFINER, the function runs with the\nprivileges of its creator. If the characteristic is INVOKER, the function runs\nwith the privileges determined by the view\'s SQL SECURITY characteristic.\n\nExample: A view might depend on a stored function, and that function might\ninvoke other stored routines. For example, the following view invokes a stored\nfunction f():\n\nCREATE VIEW v AS SELECT * FROM t WHERE t.id = f(t.name);\n\nSuppose that f() contains a statement such as this:\n\nIF name IS NULL then\n CALL p1();\nELSE\n CALL p2();\nEND IF;\n\nThe privileges required for executing statements within f() need to be checked\nwhen f() executes. This might mean that privileges are needed for p1() or\np2(), depending on the execution path within f(). Those privileges must be\nchecked at runtime, and the user who must possess the privileges is determined\nby the SQL SECURITY values of the view v and the function f().\n\nThe DEFINER and SQL SECURITY clauses for views are extensions to standard SQL.\nIn standard SQL, views are handled using the rules for SQL SECURITY INVOKER.\n\nIf you invoke a view that was created before MySQL 5.1.2, it is treated as\nthough it was created with a SQL SECURITY DEFINER clause and with a DEFINER\nvalue that is the same as your account. However, because the actual definer is\nunknown, MySQL issues a warning. To make the warning go away, it is sufficient\nto re-create the view so that the view definition includes a DEFINER clause.\n\nThe optional ALGORITHM clause is an extension to standard SQL. It affects how\nMariaDB processes the view. ALGORITHM takes three values: MERGE, TEMPTABLE, or\nUNDEFINED. The default algorithm is UNDEFINED if no ALGORITHM clause is\npresent. See View Algorithms for more information.\n\nSome views are updatable. That is, you can use them in statements such as\nUPDATE, DELETE, or INSERT to update the contents of the underlying table. For\na view to be updatable, there must be a one-to-one relationship between the\nrows in the view and the rows in the underlying table. There are also certain\nother constructs that make a view non-updatable. See Inserting and Updating\nwith Views.\n\nWITH CHECK OPTION\n-----------------\n\nThe WITH CHECK OPTION clause can be given for an updatable view to prevent\ninserts or updates to rows except those for which the WHERE clause in the\nselect_statement is true.\n\nIn a WITH CHECK OPTION clause for an updatable view, the LOCAL and CASCADED\nkeywords determine the scope of check testing when the view is defined in\nterms of another view. The LOCAL keyword restricts the CHECK OPTION only to\nthe view being defined. CASCADED causes the checks for underlying views to be\nevaluated as well. When neither keyword is given, the default is CASCADED.\n\nFor more information about updatable views and the WITH CHECK OPTION clause,\nsee Inserting and Updating with Views.\n\nIF NOT EXISTS\n-------------\n\nMariaDB starting with 10.1.3\n----------------------------\nThe IF NOT EXISTS clause was added in MariaDB 10.1.3\n\nWhen the IF NOT EXISTS clause is used, MariaDB will return a warning instead\nof an error if the specified view already exists. Cannot be used together with\nthe OR REPLACE clause.\n\nAtomic DDL\n----------\n\nMariaDB starting with 10.6.1\n----------------------------\nMariaDB 10.6.1 supports Atomic DDL and CREATE VIEW is atomic.\n\nExamples\n--------\n\nCREATE TABLE t (a INT, b INT) ENGINE = InnoDB;\n\nINSERT INTO t VALUES (1,1), (2,2), (3,3);\n\nCREATE VIEW v AS SELECT a, a*2 AS a2 FROM t;\n\nSELECT * FROM v;\n+------+------+\n| a | a2 |\n+------+------+\n| 1 | 2 |\n| 2 | 4 |\n| 3 | 6 |\n+------+------+\n\nOR REPLACE and IF NOT EXISTS:\n\nCREATE VIEW v AS SELECT a, a*2 AS a2 FROM t;\nERROR 1050 (42S01): Table \'v\' already exists\n\nCREATE OR REPLACE VIEW v AS SELECT a, a*2 AS a2 FROM t;\nQuery OK, 0 rows affected (0.04 sec)\n\nCREATE VIEW IF NOT EXISTS v AS SELECT a, a*2 AS a2 FROM t;\nQuery OK, 0 rows affected, 1 warning (0.01 sec)\n','','https://mariadb.com/kb/en/create-view/');
-update help_topic set description = CONCAT(description, '\nSHOW WARNINGS;\n+-------+------+--------------------------+\n| Level | Code | Message |\n+-------+------+--------------------------+\n| Note | 1050 | Table \'v\' already exists |\n+-------+------+--------------------------+\n\nURL: https://mariadb.com/kb/en/create-view/') WHERE help_topic_id = 718;
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (719,38,'Generated (Virtual and Persistent/Stored) Columns','Syntax\n------\n\n<type> [GENERATED ALWAYS] AS ( <expression> )\n[VIRTUAL | PERSISTENT | STORED] [UNIQUE] [UNIQUE KEY] [COMMENT <text>]\n\nMariaDB\'s generated columns syntax is designed to be similar to the syntax for\nMicrosoft SQL Server\'s computed columns and Oracle Database\'s virtual columns.\nIn MariaDB 10.2 and later, the syntax is also compatible with the syntax for\nMySQL\'s generated columns.\n\nDescription\n-----------\n\nA generated column is a column in a table that cannot explicitly be set to a\nspecific value in a DML query. Instead, its value is automatically generated\nbased on an expression. This expression might generate the value based on the\nvalues of other columns in the table, or it might generate the value by\ncalling built-in functions or user-defined functions (UDFs).\n\nThere are two types of generated columns:\n\n* PERSISTENT (a.k.a. STORED): This type\'s value is actually stored in the\ntable.\n* VIRTUAL: This type\'s value is not stored at all. Instead, the value is\ngenerated dynamically when the table is queried. This type is the default.\n\nGenerated columns are also sometimes called computed columns or virtual\ncolumns.\n\nSupported Features\n------------------\n\nStorage Engine Support\n----------------------\n\n* Generated columns can only be used with storage engines which support them.\nIf you try to use a storage engine that does not support them, then you will\nsee an error similar to the following:\n\nERROR 1910 (HY000): TokuDB storage engine does not support computed columns\n\n* InnoDB, Aria, MyISAM and CONNECT support generated columns.\n\n* A column in a MERGE table can be built on a PERSISTENT generated column.\nHowever, a column in a MERGE table can not be defined as a VIRTUAL and\nPERSISTENT generated column.\n\nData Type Support\n-----------------\n\n* All data types are supported when defining generated columns.\n\n* Using the ZEROFILL column option is supported when defining generated\ncolumns.\n\n* Using the AUTO_INCREMENT column option is not supported when defining\ngenerated columns. Until MariaDB 10.2.25, it was supported, but this support\nwas removed, because it would not work correctly. See MDEV-11117.\n\nIndex Support\n-------------\n\n* Using a generated column as a table\'s primary key is not supported. See\nMDEV-5590 for more information. If you try to use one as a primary key, then\nyou will see an error similar to the following:\n\nERROR 1903 (HY000): Primary key cannot be defined upon a computed column\n\n* Using PERSISTENT generated columns as part of a foreign key is supported.\n\n* Referencing PERSISTENT generated columns as part of a foreign key is also\nsupported.\nHowever, using the ON UPDATE CASCADE, ON UPDATE SET NULL, or ON DELETE SET\nNULL clauses is not supported. If you try to use an unsupported clause, then\nyou will see an error similar to the following:\n\nERROR 1905 (HY000): Cannot define foreign key with ON UPDATE SET NULL clause\non a computed column\n\n* Defining indexes on both VIRTUAL and PERSISTENT generated columns is\nsupported.\nIf an index is defined on a generated column, then the optimizer considers\nusing it in the same way as indexes based on \"real\" columns.\n\nStatement Support\n-----------------\n\n* Generated columns are used in DML queries just as if they were \"real\"\ncolumns.\nHowever, VIRTUAL and PERSISTENT generated columns differ in how their data is\nstored.\nValues for PERSISTENT generated columns are generated whenever a DML queries\ninserts or updates the row with the special DEFAULT value. This generates the\ncolumns value, and it is stored in the table like the other \"real\" columns.\nThis value can be read by other DML queries just like the other \"real\" columns.\nValues for VIRTUAL generated columns are not stored in the table. Instead, the\nvalue is generated dynamically whenever the column is queried. If other\ncolumns in a row are queried, but the VIRTUAL generated column is not one of\nthe queried columns, then the column\'s value is not generated.\n\n* The SELECT statement supports generated columns.\n\n* Generated columns can be referenced in the INSERT, UPDATE, and DELETE\nstatements.\nHowever, VIRTUAL or PERSISTENT generated columns cannot be explicitly set to\nany other values than NULL or DEFAULT. If a generated column is explicitly set\nto any other value, then the outcome depends on whether strict mode is enabled\nin sql_mode. If it is not enabled, then a warning will be raised and the\ndefault generated value will be used instead. If it is enabled, then an error\nwill be raised instead.\n\n* The CREATE TABLE statement has limited support for generated columns.\nIt supports defining generated columns in a new table.\nIt supports using generated columns to partition tables.\nIt does not support using the versioning clauses with generated columns.\n\n* The ALTER TABLE statement has limited support for generated columns.\nIt supports the MODIFY and CHANGE clauses for PERSISTENT generated columns.\nIt does not support the MODIFY clause for VIRTUAL generated columns if\nALGORITHM is not set to COPY. See MDEV-15476 for more information.\nIt does not support the CHANGE clause for VIRTUAL generated columns if\nALGORITHM is not set to COPY. See MDEV-17035 for more information.\nIt does not support altering a table if ALGORITHM is not set to COPY if the\ntable has a VIRTUAL generated column that is indexed. See MDEV-14046 for more\ninformation.\nIt does not support adding a VIRTUAL generated column with the ADD clause if\nthe same statement is also adding other columns if ALGORITHM is not set to\nCOPY. See MDEV-17468 for more information.\nIt also does not support altering an existing column into a VIRTUAL generated\ncolumn.\nIt supports using generated columns to partition tables.\nIt does not support using the versioning clauses with generated columns.\n\n* The SHOW CREATE TABLE statement supports generated columns.\n\n* The DESCRIBE statement can be used to check whether a table has generated\ncolumns.\nYou can tell which columns are generated by looking for the ones where the\nExtra column is set to either VIRTUAL or PERSISTENT. For example:\n\nDESCRIBE table1;\n+-------+-------------+------+-----+---------+------------+\n| Field | Type | Null | Key | Default | Extra |\n+-------+-------------+------+-----+---------+------------+\n| a | int(11) | NO | | NULL | |\n| b | varchar(32) | YES | | NULL | |\n| c | int(11) | YES | | NULL | VIRTUAL |\n| d | varchar(5) | YES | | NULL | PERSISTENT |\n+-------+-------------+------+-----+---------+------------+\n\n* Generated columns can be properly referenced in the NEW and OLD rows in\ntriggers.\n\n* Stored procedures support generated columns.\n\n* The HANDLER statement supports generated columns.\n\nExpression Support\n------------------\n\n* Most legal, deterministic expressions which can be calculated are supported\nin expressions for generated columns.\n\n* Most built-in functions are supported in expressions for generated columns.\nHowever, some built-in functions can\'t be supported for technical reasons. For\nexample, If you try to use an unsupported function in an expression, an error\nis generated similar to the following:\n\nERROR 1901 (HY000): Function or expression \'dayname()\' cannot be used in the\nGENERATED ALWAYS AS clause of `v`\n\n* Subqueries are not supported in expressions for generated columns because\nthe underlying data can change.\n\n* Using anything that depends on data outside the row is not supported in\nexpressions for generated columns.\n\n* Stored functions are not supported in expressions for generated columns. See\nMDEV-17587 for more information.\n\n* Non-deterministic built-in functions are supported in expressions for not\nindexed VIRTUAL generated columns.\n\n* Non-deterministic built-in functions are not supported in expressions for\nPERSISTENT or indexed VIRTUAL generated columns.\n\n* User-defined functions (UDFs) are supported in expressions for generated\ncolumns.\nHowever, MariaDB can\'t check whether a UDF is deterministic, so it is up to\nthe user to be sure that they do not use non-deterministic UDFs with VIRTUAL\ngenerated columns.\n\n* Defining a generated column based on other generated columns defined before\nit in the table definition is supported. For example:\n\nCREATE TABLE t1 (a int as (1), b int as (a));\n\n* However, defining a generated column based on other generated columns\ndefined after in the table definition is not supported in expressions for\ngeneration columns because generated columns are calculated in the order they\nare defined.\n\n* Using an expression that exceeds 255 characters in length is supported in\nexpressions for generated columns. The new limit for the entire table\ndefinition, including all expressions for generated columns, is 65,535 bytes.\n\n* Using constant expressions is supported in expressions for generated\ncolumns. For example:\n\nCREATE TABLE t1 (a int as (1));\n\nMaking Stored Values Consistent\n-------------------------------\n\nWhen a generated column is PERSISTENT or indexed, the value of the expression\nneeds to be consistent regardless of the SQL Mode flags in the current\nsession. If it is not, then the table will be seen as corrupted when the value\nthat should actually be returned by the computed expression and the value that\nwas previously stored and/or indexed using a different sql_mode setting\ndisagree.\n\nThere are currently two affected classes of inconsistencies: character padding\nand unsigned subtraction:\n\n* For a VARCHAR or TEXT generated column the length of the value returned can\nvary depending on the PAD_CHAR_TO_FULL_LENGTH sql_mode flag. To make the\nvalue consistent, create the generated column using an RTRIM() or RPAD()\nfunction. Alternately, create the generated column as a CHAR column so that\nits data is always fully padded.\n\n* If a SIGNED generated column is based on the subtraction of an UNSIGNED\nvalue, the resulting value can vary depending on how large the value is and\nthe NO_UNSIGNED_SUBTRACTION sql_mode flag. To make the value consistent, use\nCAST() to ensure that each UNSIGNED operand is SIGNED before the subtraction.\n\nMariaDB starting with 10.5\n--------------------------\nBeginning in MariaDB 10.5, there is a fatal error generated when trying to\ncreate a generated column whose value can change depending on the SQL Mode\nwhen its data is PERSISTENT or indexed.\n\nFor an existing generated column that has a potentially inconsistent value, a\nwarning about a bad expression is generated the first time it is used (if\nwarnings are enabled).\n\nBeginning in MariaDB 10.4.8, MariaDB 10.3.18, and MariaDB 10.2.27 a\npotentially inconsistent generated column outputs a warning when created or\nfirst used (without restricting their creation).\n\nHere is an example of two tables that would be rejected in MariaDB 10.5 and\nwarned about in the other listed versions:\n\nCREATE TABLE bad_pad (\n txt CHAR(5),\n -- CHAR -> VARCHAR or CHAR -> TEXT can\'t be persistent or indexed:\n vtxt VARCHAR(5) AS (txt) PERSISTENT\n);\n\nCREATE TABLE bad_sub (\n num1 BIGINT UNSIGNED,\n num2 BIGINT UNSIGNED,\n -- The resulting value can vary for some large values\n vnum BIGINT AS (num1 - num2) VIRTUAL,\n KEY(vnum)\n);\n\nThe warnings for the above tables look like this:\n\nWarning (Code 1901): Function or expression \'`txt`\' cannot be used in the\nGENERATED ALWAYS AS clause of `vtxt`\nWarning (Code 1105): Expression depends on the @@sql_mode value\nPAD_CHAR_TO_FULL_LENGTH\n\nWarning (Code 1901): Function or expression \'`num1` - `num2`\' cannot be used\nin the GENERATED ALWAYS AS clause of `vnum`\nWarning (Code 1105): Expression depends on the @@sql_mode value\nNO_UNSIGNED_SUBTRACTION\n\nTo work around the issue, force the padding or type to make the generated\ncolumn\'s expression return a consistent value. For example:\n\nCREATE TABLE good_pad (\n txt CHAR(5),\n -- Using RTRIM() or RPAD() makes the value consistent:\n vtxt VARCHAR(5) AS (RTRIM(txt)) PERSISTENT,\n -- When not persistent or indexed, it is OK for the value to vary by mode:\n vtxt2 VARCHAR(5) AS (txt) VIRTUAL,\n -- CHAR -> CHAR is always OK:\n txt2 CHAR(5) AS (txt) PERSISTENT\n);\n\nCREATE TABLE good_sub (\n num1 BIGINT UNSIGNED,\n num2 BIGINT UNSIGNED,\n -- The indexed value will always be consistent in this expression:\n vnum BIGINT AS (CAST(num1 AS SIGNED) - CAST(num2 AS SIGNED)) VIRTUAL,\n KEY(vnum)\n);\n\nMySQL Compatibility Support\n---------------------------\n\n* The STORED keyword is supported as an alias for the PERSISTENT keyword.\n\n* Tables created with MySQL 5.7 or later that contain MySQL\'s generated\ncolumns can be imported into MariaDB without a dump and restore.\n\nImplementation Differences\n--------------------------\n\nGenerated columns are subject to various constraints in other DBMSs that are\nnot present in MariaDB\'s implementation. Generated columns may also be called\ncomputed columns or virtual columns in different implementations. The various\ndetails for a specific implementation can be found in the documentation for\neach specific DBMS.\n\nImplementation Differences Compared to Microsoft SQL Server\n-----------------------------------------------------------\n\nMariaDB\'s generated columns implementation does not enforce the following\nrestrictions that are present in Microsoft SQL Server\'s computed columns\nimplementation:\n\n* MariaDB allows server variables in generated column expressions, including\nthose that change dynamically, such as warning_count.\n* MariaDB allows the CONVERT_TZ() function to be called with a named time zone\nas an argument, even though time zone names and time offsets are configurable.\n* MariaDB allows the CAST() function to be used with non-unicode character\nsets, even though character sets are configurable and differ between\nbinaries/versions.\n* MariaDB allows FLOAT expressions to be used in generated columns. Microsoft\nSQL Server considers these expressions to be \"imprecise\" due to potential\ncross-platform differences in floating-point implementations and precision.\n* Microsoft SQL Server requires the ARITHABORT mode to be set, so that\ndivision by zero returns an error, and not a NULL.\n* Microsoft SQL Server requires QUOTED_IDENTIFIER to be set in sql_mode. In\nMariaDB, if data is inserted without ANSI_QUOTES set in sql_mode, then it will','','https://mariadb.com/kb/en/generated-columns/');
-update help_topic set description = CONCAT(description, '\nbe processed and stored differently in a generated column that contains quoted\nidentifiers.\n\nMicrosoft SQL Server enforces the above restrictions by doing one of the\nfollowing things:\n\n* Refusing to create computed columns.\n* Refusing to allow updates to a table containing them.\n* Refusing to use an index over such a column if it can not be guaranteed that\nthe expression is fully deterministic.\n\nIn MariaDB, as long as the sql_mode, language, and other settings that were in\neffect during the CREATE TABLE remain unchanged, the generated column\nexpression will always be evaluated the same. If any of these things change,\nthen please be aware that the generated column expression might not be\nevaluated the same way as it previously was.\n\nIf you try to update a virtual column, you will get an error if the default\nstrict mode is enabled in sql_mode, or a warning otherwise.\n\nDevelopment History\n-------------------\n\nGenerated columns was originally developed by Andrey Zhakov. It was then\nmodified by Sanja Byelkin and Igor Babaev at Monty Program for inclusion in\nMariaDB. Monty did the work on MariaDB 10.2 to lift a some of the old\nlimitations.\n\nExamples\n--------\n\nHere is an example table that uses both VIRTUAL and PERSISTENT virtual columns:\n\nUSE TEST;\n\nCREATE TABLE table1 (\n a INT NOT NULL,\n b VARCHAR(32),\n c INT AS (a mod 10) VIRTUAL,\n d VARCHAR(5) AS (left(b,5)) PERSISTENT);\n\nIf you describe the table, you can easily see which columns are virtual by\nlooking in the \"Extra\" column:\n\nDESCRIBE table1;\n+-------+-------------+------+-----+---------+------------+\n| Field | Type | Null | Key | Default | Extra |\n+-------+-------------+------+-----+---------+------------+\n| a | int(11) | NO | | NULL | |\n| b | varchar(32) | YES | | NULL | |\n| c | int(11) | YES | | NULL | VIRTUAL |\n| d | varchar(5) | YES | | NULL | PERSISTENT |\n+-------+-------------+------+-----+---------+------------+\n\nTo find out what function(s) generate the value of the virtual column you can\nuse SHOW CREATE TABLE:\n\nSHOW CREATE TABLE table1;\n\n| table1 | CREATE TABLE `table1` (\n `a` int(11) NOT NULL,\n `b` varchar(32) DEFAULT NULL,\n `c` int(11) AS (a mod 10) VIRTUAL,\n `d` varchar(5) AS (left(b,5)) PERSISTENT\n) ENGINE=MyISAM DEFAULT CHARSET=latin1 |\n\nIf you try to insert non-default values into a virtual column, you will\nreceive a warning and what you tried to insert will be ignored and the derived\nvalue inserted instead:\n\nWARNINGS;\nShow warnings enabled.\n\nINSERT INTO table1 VALUES (1, \'some text\',default,default);\nQuery OK, 1 row affected (0.00 sec)\n\nINSERT INTO table1 VALUES (2, \'more text\',5,default);\nQuery OK, 1 row affected, 1 warning (0.00 sec)\n\nWarning (Code 1645): The value specified for computed column \'c\' in table\n\'table1\' has been ignored.\n\nINSERT INTO table1 VALUES (123, \'even more text\',default,\'something\');\nQuery OK, 1 row affected, 2 warnings (0.00 sec)\n\nWarning (Code 1645): The value specified for computed column \'d\' in table\n\'table1\' has been ignored.\nWarning (Code 1265): Data truncated for column \'d\' at row 1\n\nSELECT * FROM table1;\n+-----+----------------+------+-------+\n| a | b | c | d |\n+-----+----------------+------+-------+\n| 1 | some text | 1 | some |\n| 2 | more text | 2 | more |\n| 123 | even more text | 3 | even |\n+-----+----------------+------+-------+\n3 rows in set (0.00 sec)\n\nIf the ZEROFILL clause is specified, it should be placed directly after the\ntype definition, before the AS (<expression>):\n\nCREATE TABLE table2 (a INT, b INT ZEROFILL AS (a*2) VIRTUAL);\nINSERT INTO table2 (a) VALUES (1);\n\nSELECT * FROM table2;\n+------+------------+\n| a | b |\n+------+------------+\n| 1 | 0000000002 |\n+------+------------+\n1 row in set (0.00 sec)\n\nYou can also use virtual columns to implement a \"poor man\'s partial index\".\nSee example at the end of Unique Index.\n\nURL: https://mariadb.com/kb/en/generated-columns/') WHERE help_topic_id = 719;
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (720,38,'Invisible Columns','MariaDB starting with 10.3.3\n----------------------------\nInvisible columns (sometimes also called hidden columns) first appeared in\nMariaDB 10.3.3.\n\nColumns can be given an INVISIBLE attribute in a CREATE TABLE or ALTER TABLE\nstatement. These columns will then not be listed in the results of a SELECT *\nstatement, nor do they need to be assigned a value in an INSERT statement,\nunless INSERT explicitly mentions them by name.\n\nSince SELECT * does not return the invisible columns, new tables or views\ncreated in this manner will have no trace of the invisible columns. If\nspecifically referenced in the SELECT statement, the columns will be brought\ninto the view/new table, but the INVISIBLE attribute will not.\n\nInvisible columns can be declared as NOT NULL, but then require a DEFAULT\nvalue.\n\nIt is not possible for all columns in a table to be invisible.\n\nExamples\n--------\n\nCREATE TABLE t (x INT INVISIBLE);\nERROR 1113 (42000): A table must have at least 1 column\n\nCREATE TABLE t (x INT, y INT INVISIBLE, z INT INVISIBLE NOT NULL);\nERROR 4106 (HY000): Invisible column `z` must have a default value\n\nCREATE TABLE t (x INT, y INT INVISIBLE, z INT INVISIBLE NOT NULL DEFAULT 4);\n\nINSERT INTO t VALUES (1),(2);\n\nINSERT INTO t (x,y) VALUES (3,33);\n\nSELECT * FROM t;\n+------+\n| x |\n+------+\n| 1 |\n| 2 |\n| 3 |\n+------+\n\nSELECT x,y,z FROM t;\n+------+------+---+\n| x | y | z |\n+------+------+---+\n| 1 | NULL | 4 |\n| 2 | NULL | 4 |\n| 3 | 33 | 4 |\n+------+------+---+\n\nDESC t;\n+-------+---------+------+-----+---------+-----------+\n| Field | Type | Null | Key | Default | Extra |\n+-------+---------+------+-----+---------+-----------+\n| x | int(11) | YES | | NULL | |\n| y | int(11) | YES | | NULL | INVISIBLE |\n| z | int(11) | NO | | 4 | INVISIBLE |\n+-------+---------+------+-----+---------+-----------+\n\nALTER TABLE t MODIFY x INT INVISIBLE, MODIFY y INT, MODIFY z INT NOT NULL\nDEFAULT 4;\n\nDESC t;\n+-------+---------+------+-----+---------+-----------+\n| Field | Type | Null | Key | Default | Extra |\n+-------+---------+------+-----+---------+-----------+\n| x | int(11) | YES | | NULL | INVISIBLE |\n| y | int(11) | YES | | NULL | |\n| z | int(11) | NO | | 4 | |\n+-------+---------+------+-----+---------+-----------+\n\nCreating a view from a table with hidden columns:\n\nCREATE VIEW v1 AS SELECT * FROM t;\n\nDESC v1;\n+-------+---------+------+-----+---------+-------+\n| Field | Type | Null | Key | Default | Extra |\n+-------+---------+------+-----+---------+-------+\n| y | int(11) | YES | | NULL | |\n| z | int(11) | NO | | 4 | |\n+-------+---------+------+-----+---------+-------+\n\nCREATE VIEW v2 AS SELECT x,y,z FROM t;\n\nDESC v2;\n+-------+---------+------+-----+---------+-------+\n| Field | Type | Null | Key | Default | Extra |\n+-------+---------+------+-----+---------+-------+\n| x | int(11) | YES | | NULL | |\n| y | int(11) | YES | | NULL | |\n| z | int(11) | NO | | 4 | |\n+-------+---------+------+-----+---------+-------+\n\nAdding a Surrogate Primary Key:\n\ncreate table t1 (x bigint unsigned not null, y varchar(16), z text);\n\ninsert into t1 values (123, \'qq11\', \'ipsum\');\n\ninsert into t1 values (123, \'qq22\', \'lorem\');\n\nalter table t1 add pkid serial primary key invisible first;\n\ninsert into t1 values (123, \'qq33\', \'amet\');\n\nselect * from t1;\n+-----+------+-------+\n| x | y | z |\n+-----+------+-------+\n| 123 | qq11 | ipsum |\n| 123 | qq22 | lorem |\n| 123 | qq33 | amet |\n+-----+------+-------+\n\nselect pkid, z from t1;\n+------+-------+\n| pkid | z |\n+------+-------+\n| 1 | ipsum |\n| 2 | lorem |\n| 3 | amet |\n+------+-------+\n\nURL: https://mariadb.com/kb/en/invisible-columns/','','https://mariadb.com/kb/en/invisible-columns/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (721,38,'DROP DATABASE','Syntax\n------\n\nDROP {DATABASE | SCHEMA} [IF EXISTS] db_name\n\nDescription\n-----------\n\nDROP DATABASE drops all tables in the database and deletes the database. Be\nvery careful with this statement! To use DROP DATABASE, you need the DROP\nprivilege on the database. DROP SCHEMA is a synonym for DROP DATABASE.\n\nImportant: When a database is dropped, user privileges on the database are not\nautomatically dropped. See GRANT.\n\nIF EXISTS\n---------\n\nUse IF EXISTS to prevent an error from occurring for databases that do not\nexist. A NOTE is generated for each non-existent database when using IF\nEXISTS. See SHOW WARNINGS.\n\nAtomic DDL\n----------\n\nMariaDB starting with 10.6.1\n----------------------------\nMariaDB 10.6.1 supports Atomic DDL.\n\nDROP DATABASE is implemented as\n\nloop over all tables\n DROP TABLE table\n\nEach individual DROP TABLE is atomic while DROP DATABASE as a whole is\ncrash-safe.\n\nExamples\n--------\n\nDROP DATABASE bufg;\nQuery OK, 0 rows affected (0.39 sec)\n\nDROP DATABASE bufg;\nERROR 1008 (HY000): Can\'t drop database \'bufg\'; database doesn\'t exist\n\n\\W\nShow warnings enabled.\n\nDROP DATABASE IF EXISTS bufg;\nQuery OK, 0 rows affected, 1 warning (0.00 sec)\nNote (Code 1008): Can\'t drop database \'bufg\'; database doesn\'t exist\n\nURL: https://mariadb.com/kb/en/drop-database/','','https://mariadb.com/kb/en/drop-database/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (722,38,'DROP EVENT','Syntax\n------\n\nDROP EVENT [IF EXISTS] event_name\n\nDescription\n-----------\n\nThis statement drops the event named event_name. The event immediately ceases\nbeing active, and is deleted completely from the server.\n\nIf the event does not exist, the error ERROR 1517 (HY000): Unknown event\n\'event_name\' results. You can override this and cause the statement to\ngenerate a NOTE for non-existent events instead by using IF EXISTS. See SHOW\nWARNINGS.\n\nThis statement requires the EVENT privilege. In MySQL 5.1.11 and earlier, an\nevent could be dropped only by its definer, or by a user having the SUPER\nprivilege.\n\nExamples\n--------\n\nDROP EVENT myevent3;\n\nUsing the IF EXISTS clause:\n\nDROP EVENT IF EXISTS myevent3;\nQuery OK, 0 rows affected, 1 warning (0.01 sec)\n\nSHOW WARNINGS;\n+-------+------+-------------------------------+\n| Level | Code | Message |\n+-------+------+-------------------------------+\n| Note | 1305 | Event myevent3 does not exist |\n+-------+------+-------------------------------+\n\nURL: https://mariadb.com/kb/en/drop-event/','','https://mariadb.com/kb/en/drop-event/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (723,38,'DROP FUNCTION','Syntax\n------\n\nDROP FUNCTION [IF EXISTS] f_name\n\nDescription\n-----------\n\nThe DROP FUNCTION statement is used to drop a stored function or a\nuser-defined function (UDF). That is, the specified routine is removed from\nthe server, along with all privileges specific to the function. You must have\nthe ALTER ROUTINE privilege for the routine in order to drop it. If the\nautomatic_sp_privileges server system variable is set, both the ALTER ROUTINE\nand EXECUTE privileges are granted automatically to the routine creator - see\nStored Routine Privileges.\n\nIF EXISTS\n---------\n\nThe IF EXISTS clause is a MySQL/MariaDB extension. It prevents an error from\noccurring if the function does not exist. A NOTE is produced that can be\nviewed with SHOW WARNINGS.\n\nFor dropping a user-defined functions (UDF), see DROP FUNCTION UDF.\n\nExamples\n--------\n\nDROP FUNCTION hello;\nQuery OK, 0 rows affected (0.042 sec)\n\nDROP FUNCTION hello;\nERROR 1305 (42000): FUNCTION test.hello does not exist\n\nDROP FUNCTION IF EXISTS hello;\nQuery OK, 0 rows affected, 1 warning (0.000 sec)\n\nSHOW WARNINGS;\n+-------+------+------------------------------------+\n| Level | Code | Message |\n+-------+------+------------------------------------+\n| Note | 1305 | FUNCTION test.hello does not exist |\n+-------+------+------------------------------------+\n\nURL: https://mariadb.com/kb/en/drop-function/','','https://mariadb.com/kb/en/drop-function/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (724,38,'DROP INDEX','Syntax\n------\n\nDROP INDEX [IF EXISTS] index_name ON tbl_name \n [WAIT n |NOWAIT]\n\nDescription\n-----------\n\nDROP INDEX drops the index named index_name from the table tbl_name. This\nstatement is mapped to an ALTER TABLE statement to drop the index.\n\nIf another connection is using the table, a metadata lock is active, and this\nstatement will wait until the lock is released. This is also true for\nnon-transactional tables.\n\nSee ALTER TABLE.\n\nAnother shortcut, CREATE INDEX, allows the creation of an index.\n\nTo remove the primary key, `PRIMARY` must be specified as index_name. Note\nthat the quotes are necessary, because PRIMARY is a keyword.\n\nPrivileges\n----------\n\nExecuting the DROP INDEX statement requires the INDEX privilege for the table\nor the database.\n\nOnline DDL\n----------\n\nOnline DDL is used by default with InnoDB, when the drop index operation\nsupports it.\n\nSee InnoDB Online DDL Overview for more information on online DDL with InnoDB.\n\nDROP INDEX IF EXISTS ...\n------------------------\n\nIf the IF EXISTS clause is used, then MariaDB will return a warning instead of\nan error if the index does not exist.\n\nWAIT/NOWAIT\n-----------\n\nMariaDB starting with 10.3.0\n----------------------------\nSet the lock wait timeout. See WAIT and NOWAIT.\n\nProgress Reporting\n------------------\n\nMariaDB provides progress reporting for DROP INDEX statement for clients that\nsupport the new progress reporting protocol. For example, if you were using\nthe mysql client, then the progress report might look like this::\n\nURL: https://mariadb.com/kb/en/drop-index/','','https://mariadb.com/kb/en/drop-index/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (725,38,'DROP PACKAGE','MariaDB starting with 10.3.5\n----------------------------\nOracle-style packages were introduced in MariaDB 10.3.5.\n\nSyntax\n------\n\nDROP PACKAGE [IF EXISTS] [ db_name . ] package_name\n\nDescription\n-----------\n\nThe DROP PACKAGE statement can be used when Oracle SQL_MODE is set.\n\nThe DROP PACKAGE statement drops a stored package entirely:\n\n* Drops the package specification (earlier created using the CREATE PACKAGE\nstatement).\n* Drops the package implementation, if the implementation was already created\nusing the CREATE PACKAGE BODY statement.\n\nURL: https://mariadb.com/kb/en/drop-package/','','https://mariadb.com/kb/en/drop-package/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (726,38,'DROP PACKAGE BODY','MariaDB starting with 10.3.5\n----------------------------\nOracle-style packages were introduced in MariaDB 10.3.5.\n\nSyntax\n------\n\nDROP PACKAGE BODY [IF EXISTS] [ db_name . ] package_name\n\nDescription\n-----------\n\nThe DROP PACKAGE BODY statement can be used when Oracle SQL_MODE is set.\n\nThe DROP PACKAGE BODY statement drops the package body (i.e the\nimplementation), previously created using the CREATE PACKAGE BODY statement.\n\nNote, DROP PACKAGE BODY drops only the package implementation, but does not\ndrop the package specification. Use DROP PACKAGE to drop the package entirely\n(i.e. both implementation and specification).\n\nURL: https://mariadb.com/kb/en/drop-package-body/','','https://mariadb.com/kb/en/drop-package-body/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (727,38,'DROP PROCEDURE','Syntax\n------\n\nDROP PROCEDURE [IF EXISTS] sp_name\n\nDescription\n-----------\n\nThis statement is used to drop a stored procedure. That is, the specified\nroutine is removed from the server along with all privileges specific to the\nprocedure. You must have the ALTER ROUTINE privilege for the routine. If the\nautomatic_sp_privileges server system variable is set, that privilege and\nEXECUTE are granted automatically to the routine creator - see Stored Routine\nPrivileges.\n\nThe IF EXISTS clause is a MySQL/MariaDB extension. It prevents an error from\noccurring if the procedure or function does not exist. A NOTE is produced that\ncan be viewed with SHOW WARNINGS.\n\nWhile this statement takes effect immediately, threads which are executing a\nprocedure can continue execution.\n\nExamples\n--------\n\nDROP PROCEDURE simpleproc;\n\nIF EXISTS:\n\nDROP PROCEDURE simpleproc;\nERROR 1305 (42000): PROCEDURE test.simpleproc does not exist\n\nDROP PROCEDURE IF EXISTS simpleproc;\nQuery OK, 0 rows affected, 1 warning (0.00 sec)\n\nSHOW WARNINGS;\n+-------+------+------------------------------------------+\n| Level | Code | Message |\n+-------+------+------------------------------------------+\n| Note | 1305 | PROCEDURE test.simpleproc does not exist |\n+-------+------+------------------------------------------+\n\nURL: https://mariadb.com/kb/en/drop-procedure/','','https://mariadb.com/kb/en/drop-procedure/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (728,38,'DROP SERVER','Syntax\n------\n\nDROP SERVER [ IF EXISTS ] server_name\n\nDescription\n-----------\n\nDrops the server definition for the server named server_name. The\ncorresponding row within the mysql.servers table will be deleted. This\nstatement requires the SUPER privilege or, from MariaDB 10.5.2, the FEDERATED\nADMIN privilege.\n\nDropping a server for a table does not affect any FederatedX, FEDERATED,\nConnect or Spider tables that used this connection information when they were\ncreated.\n\nDROP SERVER is not written to the binary log, irrespective of the binary log\nformat being used. From MariaDB 10.1.13, Galera replicates the CREATE SERVER,\nALTER SERVER and DROP SERVER statements.\n\nIF EXISTS\n---------\n\nIf the IF EXISTS clause is used, MariaDB will not return an error if the\nserver does not exist. Unlike all other statements, DROP SERVER IF EXISTS does\nnot issue a note if the server does not exist. See MDEV-9400.\n\nExamples\n--------\n\nDROP SERVER s;\n\nIF EXISTS:\n\nDROP SERVER s;\nERROR 1477 (HY000): The foreign server name you are trying to reference \n does not exist. Data source error: s\n\nDROP SERVER IF EXISTS s;\nQuery OK, 0 rows affected (0.00 sec)\n\nURL: https://mariadb.com/kb/en/drop-server/','','https://mariadb.com/kb/en/drop-server/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (729,38,'DROP TABLESPACE','The DROP TABLESPACE statement is not supported by MariaDB. It was originally\ninherited from MySQL NDB Cluster. In MySQL 5.7 and later, the statement is\nalso supported for InnoDB. However, MariaDB has chosen not to include that\nspecific feature. See MDEV-19294 for more information.\n\nURL: https://mariadb.com/kb/en/drop-tablespace/','','https://mariadb.com/kb/en/drop-tablespace/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (730,38,'DROP TRIGGER','Syntax\n------\n\nDROP TRIGGER [IF EXISTS] [schema_name.]trigger_name\n\nDescription\n-----------\n\nThis statement drops a trigger. The schema (database) name is optional. If the\nschema is omitted, the trigger is dropped from the default schema. Its use\nrequires the TRIGGER privilege for the table associated with the trigger.\n\nUse IF EXISTS to prevent an error from occurring for a trigger that does not\nexist. A NOTE is generated for a non-existent trigger when using IF EXISTS.\nSee SHOW WARNINGS.\n\nNote: Triggers for a table are also dropped if you drop the table.\n\nAtomic DDL\n----------\n\nMariaDB starting with 10.6.1\n----------------------------\nMariaDB 10.6.1 supports Atomic DDL and DROP TRIGGER is atomic.\n\nExamples\n--------\n\nDROP TRIGGER test.example_trigger;\n\nUsing the IF EXISTS clause:\n\nDROP TRIGGER IF EXISTS test.example_trigger;\nQuery OK, 0 rows affected, 1 warning (0.01 sec)\n\nSHOW WARNINGS;\n+-------+------+------------------------+\n| Level | Code | Message |\n+-------+------+------------------------+\n| Note | 1360 | Trigger does not exist |\n+-------+------+------------------------+\n\nURL: https://mariadb.com/kb/en/drop-trigger/','','https://mariadb.com/kb/en/drop-trigger/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (731,38,'DROP VIEW','Syntax\n------\n\nDROP VIEW [IF EXISTS]\n view_name [, view_name] ...\n [RESTRICT | CASCADE]\n\nDescription\n-----------\n\nDROP VIEW removes one or more views. You must have the DROP privilege for each\nview. If any of the views named in the argument list do not exist, MariaDB\nreturns an error indicating by name which non-existing views it was unable to\ndrop, but it also drops all of the views in the list that do exist.\n\nThe IF EXISTS clause prevents an error from occurring for views that don\'t\nexist. When this clause is given, a NOTE is generated for each non-existent\nview. See SHOW WARNINGS.\n\nRESTRICT and CASCADE, if given, are parsed and ignored.\n\nIt is possible to specify view names as db_name.view_name. This is useful to\ndelete views from multiple databases with one statement. See Identifier\nQualifiers for details.\n\nThe DROP privilege is required to use DROP TABLE on non-temporary tables. For\ntemporary tables, no privilege is required, because such tables are only\nvisible for the current session.\n\nIf a view references another view, it will be possible to drop the referenced\nview. However, the other view will reference a view which does not exist any\nmore. Thus, querying it will produce an error similar to the following:\n\nERROR 1356 (HY000): View \'db_name.view_name\' references invalid table(s) or \ncolumn(s) or function(s) or definer/invoker of view lack rights to use them\n\nThis problem is reported in the output of CHECK TABLE.\n\nNote that it is not necessary to use DROP VIEW to replace an existing view,\nbecause CREATE VIEW has an OR REPLACE clause.\n\nAtomic DDL\n----------\n\nMariaDB starting with 10.6.1\n----------------------------\nMariaDB 10.6.1 supports Atomic DDL and DROP VIEW for a singular view is\natomic. Dropping multiple views is crash-safe.\n\nExamples\n--------\n\nDROP VIEW v,v2;\n\nGiven views v and v2, but no view v3\n\nDROP VIEW v,v2,v3;\nERROR 1051 (42S02): Unknown table \'v3\'\n\nDROP VIEW IF EXISTS v,v2,v3;\nQuery OK, 0 rows affected, 1 warning (0.01 sec)\n\nSHOW WARNINGS;\n+-------+------+-------------------------+\n| Level | Code | Message |\n+-------+------+-------------------------+\n| Note | 1051 | Unknown table \'test.v3\' |\n+-------+------+-------------------------+\n\nURL: https://mariadb.com/kb/en/drop-view/','','https://mariadb.com/kb/en/drop-view/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (732,38,'CONSTRAINT','MariaDB supports the implementation of constraints at the table-level using\neither CREATE TABLE or ALTER TABLE statements. A table constraint restricts\nthe data you can add to the table. If you attempt to insert invalid data on a\ncolumn, MariaDB throws an error.\n\nSyntax\n------\n\n[CONSTRAINT [symbol]] constraint_expression\n\nconstraint_expression:\n | PRIMARY KEY [index_type] (index_col_name, ...) [index_option] ...\n | FOREIGN KEY [index_name] (index_col_name, ...)\n REFERENCES tbl_name (index_col_name, ...)\n [ON DELETE reference_option]\n [ON UPDATE reference_option]\n | UNIQUE [INDEX|KEY] [index_name]\n [index_type] (index_col_name, ...) [index_option] ...\n | CHECK (check_constraints)\n\nindex_type:\n USING {BTREE | HASH | RTREE}\n\nindex_col_name:\n col_name [(length)] [ASC | DESC]\n\nindex_option:\n | KEY_BLOCK_SIZE [=] value\n | index_type\n | WITH PARSER parser_name\n | COMMENT \'string\'\n | CLUSTERING={YES|NO}\n\nreference_option:\n RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT\n\nDescription\n-----------\n\nConstraints provide restrictions on the data you can add to a table. This\nallows you to enforce data integrity from MariaDB, rather than through\napplication logic. When a statement violates a constraint, MariaDB throws an\nerror.\n\nThere are four types of table constraints:\n\n+------------------------------------+---------------------------------------+\n| Constraint | Description |\n+------------------------------------+---------------------------------------+\n| PRIMARY KEY | Sets the column for referencing |\n| | rows. Values must be unique and not |\n| | null. |\n+------------------------------------+---------------------------------------+\n| FOREIGN KEY | Sets the column to reference the |\n| | primary key on another table. |\n+------------------------------------+---------------------------------------+\n| UNIQUE | Requires values in column or columns |\n| | only occur once in the table. |\n+------------------------------------+---------------------------------------+\n| CHECK | Checks whether the data meets the |\n| | given condition. |\n+------------------------------------+---------------------------------------+\n\nThe Information Schema TABLE_CONSTRAINTS Table contains information about\ntables that have constraints.\n\nFOREIGN KEY Constraints\n-----------------------\n\nInnoDB supports foreign key constraints. The syntax for a foreign key\nconstraint definition in InnoDB looks like this:\n\n[CONSTRAINT [symbol]] FOREIGN KEY\n [index_name] (index_col_name, ...)\n REFERENCES tbl_name (index_col_name,...)\n [ON DELETE reference_option]\n [ON UPDATE reference_option]\n\nreference_option:\n RESTRICT | CASCADE | SET NULL | NO ACTION\n\nThe Information Schema REFERENTIAL_CONSTRAINTS table has more information\nabout foreign keys.\n\nCHECK Constraints\n-----------------\n\nMariaDB starting with 10.2.1\n----------------------------\nFrom MariaDB 10.2.1, constraints are enforced. Before MariaDB 10.2.1\nconstraint expressions were accepted in the syntax but ignored.\n\nIn MariaDB 10.2.1 you can define constraints in 2 different ways:\n\n* CHECK(expression) given as part of a column definition.\n* CONSTRAINT [constraint_name] CHECK (expression)\n\nBefore a row is inserted or updated, all constraints are evaluated in the\norder they are defined. If any constraint expression returns false, then the\nrow will not be inserted or updated. One can use most deterministic functions\nin a constraint, including UDFs.\n\nCREATE TABLE t1 (a INT CHECK (a>2), b INT CHECK (b>2), CONSTRAINT a_greater\nCHECK (a>b));\n\nIf you use the second format and you don\'t give a name to the constraint, then\nthe constraint will get an automatically generated name. This is done so that\nyou can later delete the constraint with ALTER TABLE DROP constraint_name.\n\nOne can disable all constraint expression checks by setting the\ncheck_constraint_checks variable to OFF. This is useful for example when\nloading a table that violates some constraints that you want to later find and\nfix in SQL.\n\nReplication\n-----------\n\nIn row-based replication, only the master checks constraints, and failed\nstatements will not be replicated. In statement-based replication, the slaves\nwill also check constraints. Constraints should therefore be identical, as\nwell as deterministic, in a replication environment.\n\nAuto_increment\n--------------\n\nMariaDB starting with 10.2.6\n----------------------------\n* From MariaDB 10.2.6, auto_increment columns are no longer permitted in check\nconstraints. Previously they were permitted, but would not work correctly. See\nMDEV-11117.\n\nExamples\n--------\n\nCREATE TABLE product (category INT NOT NULL, id INT NOT NULL,\n price DECIMAL,\n PRIMARY KEY(category, id)) ENGINE=INNODB;\nCREATE TABLE customer (id INT NOT NULL,\n PRIMARY KEY (id)) ENGINE=INNODB;\nCREATE TABLE product_order (no INT NOT NULL AUTO_INCREMENT,\n product_category INT NOT NULL,\n product_id INT NOT NULL,\n customer_id INT NOT NULL,\n PRIMARY KEY(no),\n INDEX (product_category, product_id),\n FOREIGN KEY (product_category, product_id)\n REFERENCES product(category, id)\n ON UPDATE CASCADE ON DELETE RESTRICT,\n INDEX (customer_id),\n FOREIGN KEY (customer_id)\n REFERENCES customer(id)) ENGINE=INNODB;\n\nMariaDB starting with 10.2.1\n----------------------------\nThe following examples will work from MariaDB 10.2.1 onwards.\n\nNumeric constraints and comparisons:\n\nCREATE TABLE t1 (a INT CHECK (a>2), b INT CHECK (b>2), CONSTRAINT a_greater\nCHECK (a>b));\n\nINSERT INTO t1(a) VALUES (1);\nERROR 4022 (23000): CONSTRAINT `a` failed for `test`.`t1`\n\nINSERT INTO t1(a,b) VALUES (3,4);\nERROR 4022 (23000): CONSTRAINT `a_greater` failed for `test`.`t1`\n\nINSERT INTO t1(a,b) VALUES (4,3);\nQuery OK, 1 row affected (0.04 sec)\n\nDropping a constraint:\n\nALTER TABLE t1 DROP CONSTRAINT a_greater;\n\nAdding a constraint:\n\nALTER TABLE t1 ADD CONSTRAINT a_greater CHECK (a>b);\n\nDate comparisons and character length:\n\nCREATE TABLE t2 (name VARCHAR(30) CHECK (CHAR_LENGTH(name)>2), start_date\nDATE, \n end_date DATE CHECK (start_date IS NULL OR end_date IS NULL OR\nstart_date<end_date));\n\nINSERT INTO t2(name, start_date, end_date) VALUES(\'Ione\', \'2003-12-15\',\n\'2014-11-09\');\nQuery OK, 1 row affected (0.04 sec)\n\nINSERT INTO t2(name, start_date, end_date) VALUES(\'Io\', \'2003-12-15\',\n\'2014-11-09\');\nERROR 4022 (23000): CONSTRAINT `name` failed for `test`.`t2`\n\nINSERT INTO t2(name, start_date, end_date) VALUES(\'Ione\', NULL, \'2014-11-09\');\nQuery OK, 1 row affected (0.04 sec)\n\nINSERT INTO t2(name, start_date, end_date) VALUES(\'Ione\', \'2015-12-15\',\n\'2014-11-09\');\nERROR 4022 (23000): CONSTRAINT `end_date` failed for `test`.`t2`\n\nA misplaced parenthesis:\n\nCREATE TABLE t3 (name VARCHAR(30) CHECK (CHAR_LENGTH(name>2)), start_date\nDATE, \n end_date DATE CHECK (start_date IS NULL OR end_date IS NULL OR\nstart_date<end_date));\nQuery OK, 0 rows affected (0.32 sec)\n\nINSERT INTO t3(name, start_date, end_date) VALUES(\'Io\', \'2003-12-15\',\n\'2014-11-09\');\nQuery OK, 1 row affected, 1 warning (0.04 sec)\n\nSHOW WARNINGS;\n+---------+------+----------------------------------------+\n| Level | Code | Message |\n+---------+------+----------------------------------------+\n| Warning | 1292 | Truncated incorrect DOUBLE value: \'Io\' |\n+---------+------+----------------------------------------+\n\nCompare the definition of table t2 to table t3. CHAR_LENGTH(name)>2 is very\ndifferent to CHAR_LENGTH(name>2) as the latter mistakenly performs a numeric\ncomparison on the name field, leading to unexpected results.\n\nURL: https://mariadb.com/kb/en/constraint/','','https://mariadb.com/kb/en/constraint/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (733,38,'Dynamic Columns','Dynamic columns allow one to store different sets of columns for each row in a\ntable. It works by storing a set of columns in a blob and having a small set\nof functions to manipulate it. Dynamic columns should be used when it is not\npossible to use regular columns. A typical use case is when one needs to store\nitems that may have many different attributes (like size, color, weight, etc),\nand the set of possible attributes is very large and/or unknown in advance. In\nthat case, attributes can be put into dynamic columns.\n\nDynamic Columns Basics\n----------------------\n\nThe table should have a blob column which will be used as storage for dynamic\ncolumns:\n\ncreate table assets (\n item_name varchar(32) primary key, -- A common attribute for all items\n dynamic_cols blob -- Dynamic columns will be stored here\n);\n\nOnce created, one can access dynamic columns via dynamic column functions:\n\nInsert a row with two dynamic columns: color=blue, size=XL\n\nINSERT INTO assets VALUES \n (\'MariaDB T-shirt\', COLUMN_CREATE(\'color\', \'blue\', \'size\', \'XL\'));\n\nInsert another row with dynamic columns: color=black, price=500\n\nINSERT INTO assets VALUES\n (\'Thinkpad Laptop\', COLUMN_CREATE(\'color\', \'black\', \'price\', 500));\n\nSelect dynamic column \'color\' for all items:\n\nSELECT item_name, COLUMN_GET(dynamic_cols, \'color\' as char) \n AS color FROM assets;\n+-----------------+-------+\n| item_name | color |\n+-----------------+-------+\n| MariaDB T-shirt | blue |\n| Thinkpad Laptop | black |\n+-----------------+-------+\n\nIt is possible to add and remove dynamic columns from a row:\n\n-- Remove a column:\nUPDATE assets SET dynamic_cols=COLUMN_DELETE(dynamic_cols, \"price\") \nWHERE COLUMN_GET(dynamic_cols, \'color\' as char)=\'black\';\n\n-- Add a column:\nUPDATE assets SET dynamic_cols=COLUMN_ADD(dynamic_cols, \'warranty\', \'3 years\')\nWHERE item_name=\'Thinkpad Laptop\';\n\nYou can also list all columns, or get them together with their values in JSON\nformat:\n\nSELECT item_name, column_list(dynamic_cols) FROM assets;\n+-----------------+---------------------------+\n| item_name | column_list(dynamic_cols) |\n+-----------------+---------------------------+\n| MariaDB T-shirt | `size`,`color` |\n| Thinkpad Laptop | `color`,`warranty` |\n+-----------------+---------------------------+\n\nSELECT item_name, COLUMN_JSON(dynamic_cols) FROM assets;\n+-----------------+----------------------------------------+\n| item_name | COLUMN_JSON(dynamic_cols) |\n+-----------------+----------------------------------------+\n| MariaDB T-shirt | {\"size\":\"XL\",\"color\":\"blue\"} |\n| Thinkpad Laptop | {\"color\":\"black\",\"warranty\":\"3 years\"} |\n+-----------------+----------------------------------------+\n\nDynamic Columns Reference\n-------------------------\n\nThe rest of this page is a complete reference of dynamic columns in MariaDB\n\nDynamic Columns Functions\n-------------------------\n\nCOLUMN_CREATE\n-------------\n\nCOLUMN_CREATE(column_nr, value [as type], [column_nr, value \n [as type]]...);\nCOLUMN_CREATE(column_name, value [as type], [column_name, value \n [as type]]...);\n\nReturn a dynamic columns blob that stores the specified columns with values.\n\nThe return value is suitable for\n\n* \nstoring in a table\nfurther modification with other dynamic columns functions\n\nThe as type part allows one to specify the value type. In most cases, this is\nredundant because MariaDB will be able to deduce the type of the value.\nExplicit type specification may be needed when the type of the value is not\napparent. For example, a literal \'2012-12-01\' has a CHAR type by default, one\nwill need to specify \'2012-12-01\' AS DATE to have it stored as a date. See the\nDatatypes section for further details. Note also MDEV-597.\n\nTypical usage:\n\n-- MariaDB 5.3+:\nINSERT INTO tbl SET dyncol_blob=COLUMN_CREATE(1 /*column id*/, \"value\");\n-- MariaDB 10.0.1+:\nINSERT INTO tbl SET dyncol_blob=COLUMN_CREATE(\"column_name\", \"value\");\n\nCOLUMN_ADD\n----------\n\nCOLUMN_ADD(dyncol_blob, column_nr, value [as type], \n [column_nr, value [as type]]...);\nCOLUMN_ADD(dyncol_blob, column_name, value [as type], \n [column_name, value [as type]]...);\n\nAdds or updates dynamic columns.\n\n* \ndyncol_blob must be either a valid dynamic columns blob (for example,\nCOLUMN_CREATE returns such blob), or an empty string.\ncolumn_name specifies the name of the column to be added. If dyncol_blob\nalready has a column with this name, it will be overwritten.\nvalue specifies the new value for the column. Passing a NULL value will cause\nthe column to be deleted.\nas type is optional. See #datatypes section for a discussion about types.\n\nThe return value is a dynamic column blob after the modifications.\n\nTypical usage:\n\n-- MariaDB 5.3+:\nUPDATE tbl SET dyncol_blob=COLUMN_ADD(dyncol_blob, 1 /*column id*/, \"value\") \n WHERE id=1;\n-- MariaDB 10.0.1+:\nUPDATE t1 SET dyncol_blob=COLUMN_ADD(dyncol_blob, \"column_name\", \"value\") \n WHERE id=1;\n\nNote: COLUMN_ADD() is a regular function (just like CONCAT()), hence, in order\nto update the value in the table you have to use the UPDATE ... SET\ndynamic_col=COLUMN_ADD(dynamic_col, ....) pattern.\n\nCOLUMN_GET\n----------\n\nCOLUMN_GET(dyncol_blob, column_nr as type);\nCOLUMN_GET(dyncol_blob, column_name as type);\n\nGet the value of a dynamic column by its name. If no column with the given\nname exists, NULL will be returned.\n\ncolumn_name as type requires that one specify the datatype of the dynamic\ncolumn they are reading.\n\nThis may seem counter-intuitive: why would one need to specify which datatype\nthey\'re retrieving? Can\'t the dynamic columns system figure the datatype from\nthe data being stored?\n\nThe answer is: SQL is a statically-typed language. The SQL interpreter needs\nto know the datatypes of all expressions before the query is run (for example,\nwhen one is using prepared statements and runs \"select COLUMN_GET(...)\", the\nprepared statement API requires the server to inform the client about the\ndatatype of the column being read before the query is executed and the server\ncan see what datatype the column actually has).\n\nSee the Datatypes section for more information about datatypes.\n\nCOLUMN_DELETE\n-------------\n\nCOLUMN_DELETE(dyncol_blob, column_nr, column_nr...);\nCOLUMN_DELETE(dyncol_blob, column_name, column_name...);\n\nDelete a dynamic column with the specified name. Multiple names can be given.\n\nThe return value is a dynamic column blob after the modification.\n\nCOLUMN_EXISTS\n-------------\n\nCOLUMN_EXISTS(dyncol_blob, column_nr);\nCOLUMN_EXISTS(dyncol_blob, column_name);\n\nCheck if a column with name column_name exists in dyncol_blob. If yes, return\n1, otherwise return 0.\n\nCOLUMN_LIST\n-----------\n\nCOLUMN_LIST(dyncol_blob);\n\nReturn a comma-separated list of column names. The names are quoted with\nbackticks.\n\nSELECT column_list(column_create(\'col1\',\'val1\',\'col2\',\'val2\'));\n+---------------------------------------------------------+\n| column_list(column_create(\'col1\',\'val1\',\'col2\',\'val2\')) |\n+---------------------------------------------------------+\n| `col1`,`col2` |\n+---------------------------------------------------------+\n\nCOLUMN_CHECK\n------------\n\nCOLUMN_CHECK(dyncol_blob);\n\nCheck if dyncol_blob is a valid packed dynamic columns blob. Return value of 1\nmeans the blob is valid, return value of 0 means it is not.\n\nRationale: Normally, one works with valid dynamic column blobs. Functions like\nCOLUMN_CREATE, COLUMN_ADD, COLUMN_DELETE always return valid dynamic column\nblobs. However, if a dynamic column blob is accidentally truncated, or\ntranscoded from one character set to another, it will be corrupted. This\nfunction can be used to check if a value in a blob field is a valid dynamic\ncolumn blob.\n\nNote: It is possible that a truncation cut a Dynamic Column \"clearly\" so that\nCOLUMN_CHECK will not notice the corruption, but in any case of truncation a\nwarning is issued during value storing.\n\nCOLUMN_JSON\n-----------\n\nCOLUMN_JSON(dyncol_blob);\n\nReturn a JSON representation of data in dyncol_blob.\n\nExample:\n\nSELECT item_name, COLUMN_JSON(dynamic_cols) FROM assets;\n+-----------------+----------------------------------------+\n| item_name | COLUMN_JSON(dynamic_cols) |\n+-----------------+----------------------------------------+\n| MariaDB T-shirt | {\"size\":\"XL\",\"color\":\"blue\"} |\n| Thinkpad Laptop | {\"color\":\"black\",\"warranty\":\"3 years\"} |\n+-----------------+----------------------------------------+\n\nLimitation: COLUMN_JSON will decode nested dynamic columns at a nesting level\nof not more than 10 levels deep. Dynamic columns that are nested deeper than\n10 levels will be shown as BINARY string, without encoding.\n\nNesting Dynamic Columns\n-----------------------\n\nIt is possible to use nested dynamic columns by putting one dynamic column\nblob inside another. The COLUMN_JSON function will display nested columns.\n\nSET @tmp= column_create(\'parent_column\', \n column_create(\'child_column\', 12345));\nQuery OK, 0 rows affected (0.00 sec)\n\nSELECT column_json(@tmp);\n+------------------------------------------+\n| column_json(@tmp) |\n+------------------------------------------+\n| {\"parent_column\":{\"child_column\":12345}} |\n+------------------------------------------+\n\nSELECT column_get(column_get(@tmp, \'parent_column\' AS char), \n \'child_column\' AS int);\n+------------------------------------------------------------------------------\n\n| column_get(column_get(@tmp, \'parent_column\' as char), \'child_column\' as int)\n|\n+------------------------------------------------------------------------------\n\n| 12345\n|\n+------------------------------------------------------------------------------\n\nIf you are trying to get a nested dynamic column as a string use \'as BINARY\'\nas the last argument of COLUMN_GET (otherwise problems with character set\nconversion and illegal symbols are possible):\n\nselect column_json( column_get(\n column_create(\'test1\',\n column_create(\'key1\',\'value1\',\'key2\',\'value2\',\'key3\',\'value3\')),\n \'test1\' as BINARY));\n\nDatatypes\n---------\n\nIn SQL, one needs to define the type of each column in a table. Dynamic\ncolumns do not provide any way to declare a type in advance (\"whenever there\nis a column \'weight\', it should be integer\" is not possible). However, each\nparticular dynamic column value is stored together with its datatype.\n\nThe set of possible datatypes is mostly the same as that used by the SQL CAST\nand CONVERT functions. However, note that there are currently some differences\n- see MDEV-597.\n\n+--------+----------------------------------------------+-------------------+\n| type | dynamic column internal type | description |\n+--------+----------------------------------------------+-------------------+\n| BINARY | DYN_COL_STRING | (variable length |\n| (N)] | | string with |\n| | | binary charset) |\n+--------+----------------------------------------------+-------------------+\n| CHAR[( | DYN_COL_STRING | (variable length |\n| )] | | string with |\n| | | charset) |\n+--------+----------------------------------------------+-------------------+\n| DATE | DYN_COL_DATE | (date - 3 bytes) |\n+--------+----------------------------------------------+-------------------+\n| DATETI | DYN_COL_DATETIME | (date and time |\n| E[(D)] | | (with |\n| | | microseconds) - |\n| | | 9 bytes) |\n+--------+----------------------------------------------+-------------------+\n| DECIMA | DYN_COL_DECIMAL | (variable length |\n| [(M[,D | | binary decimal |\n| )] | | representation |\n| | | with MariaDB |\n| | | limitation) |\n+--------+----------------------------------------------+-------------------+\n| DOUBLE | DYN_COL_DOUBLE | (64 bit |\n| (M,D)] | | double-precision |\n| | | floating point) |\n+--------+----------------------------------------------+-------------------+\n| INTEGE | DYN_COL_INT | (variable |\n| | | length, up to 64 |\n| | | bit signed |\n| | | integer) |\n+--------+----------------------------------------------+-------------------+\n| SIGNED | DYN_COL_INT | (variable |\n| [INTEG | | length, up to 64 |\n| R] | | bit signed |\n| | | integer) |\n+--------+----------------------------------------------+-------------------+\n| TIME[( | DYN_COL_TIME | (time (with |\n| )] | | microseconds, |\n| | | may be negative) |\n| | | - 6 bytes) |\n+--------+----------------------------------------------+-------------------+\n| UNSIGN | DYN_COL_UINT | (variable |\n| D | | length, up to |','','https://mariadb.com/kb/en/dynamic-columns/');
-update help_topic set description = CONCAT(description, '\n| [INTEG | | 64bit unsigned |\n| R] | | integer) |\n+--------+----------------------------------------------+-------------------+\n\nA Note About Lengths\n--------------------\n\nIf you\'re running queries like\n\nSELECT COLUMN_GET(blob, \'colname\' as CHAR) ...\n\nwithout specifying a maximum length (i.e. using #as CHAR#, not as CHAR(n)),\nMariaDB will report the maximum length of the resultset column to be\n53,6870,911 (bytes or characters?) for MariaDB 5.3-10.0.0 and 16,777,216 for\nMariaDB 10.0.1+. This may cause excessive memory usage in some client\nlibraries, because they try to pre-allocate a buffer of maximum resultset\nwidth. If you suspect you\'re hitting this problem, use CHAR(n) whenever you\'re\nusing COLUMN_GET in the select list.\n\nMariaDB 5.3 vs MariaDB 10.0\n---------------------------\n\nThe dynamic columns feature was introduced into MariaDB in two steps:\n\n* MariaDB 5.3 was the first version to support dynamic columns. Only numbers\n could be used as column names in this version.\n* In MariaDB 10.0.1, column names can be either numbers or strings.\n Also, the COLUMN_JSON and COLUMN_CHECK functions were added.\n\nSee also Dynamic Columns in MariaDB 10.\n\nClient-side API\n---------------\n\nIt is also possible to create or parse dynamic columns blobs on the client\nside. libmysql client library now includes an API for writing/reading dynamic\ncolumn blobs. See dynamic-columns-api for details.\n\nLimitations\n-----------\n\n+---------------------------------------------------+------------------------+\n| Description | Limit |\n+---------------------------------------------------+------------------------+\n| Max number of columns | 65535 |\n+---------------------------------------------------+------------------------+\n| Max total length of packed dynamic column | max_allowed_packet |\n| | (1G) |\n+---------------------------------------------------+------------------------+\n\nURL: https://mariadb.com/kb/en/dynamic-columns/') WHERE help_topic_id = 733;
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (734,38,'Dynamic Columns from MariaDB 10','MariaDB starting with 10.0.1\n----------------------------\nMariaDB 10.0.1 introduced the following improvements to the dynamic columns\nfeature.\n\nColumn Name Support\n-------------------\n\nIt is possible to refer to column by names. Names can be used everywhere where\nin MariaDB 5.3 one could use only strings:\n\n* Create a dynamic column blob:\n\nCOLUMN_CREATE(\'int_col\', 123 as int, \'double_col\', 3.14 as double,\n\'string_col\', \'text-data\' as char);\n\n* Set a column value:\n\nCOLUMN_ADD(dyncol_blob, \'intcol\', 1234);\n\n* Get a column value:\n\nCOLUMN_GET(dynstr, \'column1\' as char(10));\n\n* Check whether a column exists\n\nCOLUMN_EXISTS(dyncol_blob, \'column_name\');\n\nChanges in Behavior\n-------------------\n\n* Column list output now includes quoting:\n\nselect column_list(column_create(1, 22, 2, 23));\n+------------------------------------------+\n| column_list(column_create(1, 22, 2, 23)) |\n+------------------------------------------+\n| `1`,`2` |\n+------------------------------------------+\nselect column_list(column_create(\'column1\', 22, \'column2\', 23)); \n+----------------------------------------------------------+\n| column_list(column_create(\'column1\', 22, \'column2\', 23)) |\n+----------------------------------------------------------+\n| `column1`,`column2` |\n+----------------------------------------------------------+\n\n* Column name interpretation has been changed so that the string now is not\nconverted to a number. So some \"magic\" tricks will not work any more, for\nexample, \"1test\" and \"1\" now become different column names:\n\nselect column_list(column_add(column_create(\'1a\', 22), \'1b\', 23));\n+------------------------------------------------------------+\n| column_list(column_add(column_create(\'1a\', 22), \'1b\', 23)) |\n+------------------------------------------------------------+\n| `1a`,`1b` |\n+------------------------------------------------------------+\n\n* Old behavior:\n\nselect column_list(column_add(column_create(\'1a\', 22), \'1b\', 23));\n+------------------------------------------------------------+\n| column_list(column_add(column_create(\'1a\', 22), \'1b\', 23)) |\n+------------------------------------------------------------+\n| 1 |\n+------------------------------------------------------------+\n\nNew Functions\n-------------\n\nThe following new functions have been added to dynamic columns in MariaDB 10\n\nCOLUMN_CHECK\n------------\n\nCOLUMN_CHECK is used to check a column\'s integrity. When it encounters an\nerror it does not return illegal format errors but returns false instead. It\nalso checks integrity more thoroughly and finds errors in the dynamic column\ninternal structures which might not be found by other functions.\n\nselect column_check(column_create(\'column1\', 22));\n+--------------------------------------------+\n| column_check(column_create(\'column1\', 22)) |\n+--------------------------------------------+\n| 1 |\n+--------------------------------------------+\nselect column_check(\'abracadabra\');\n+-----------------------------+\n| column_check(\'abracadabra\') |\n+-----------------------------+\n| 0 |\n+-----------------------------+\n\nCOLUMN_JSON\n-----------\n\nCOLUMN_JSON converts all dynamic column record content to a JSON object.\n\nselect column_json(column_create(\'column1\', 1, \'column2\', \"two\"));\n+------------------------------------------------------------+\n| column_json(column_create(\'column1\', 1, \'column2\', \"two\")) |\n+------------------------------------------------------------+\n| {\"column1\":1,\"column2\":\"two\"} |\n+------------------------------------------------------------+\n\nOther Changes\n-------------\n\n* All API functions has prefix mariadb_dyncol_ (old prefix dynamic_column_ is\ndepricated\n* API changed to be able to work with the new format (*_named functions).\n* Removed \'delete\' function because deleting could be done by adding NULL\nvalue.\n* \'Time\' and \'datetime\' in the new format are stored without microseconds if\nthey are 0.\n* New function added to API (except that two which are representing SQL level\nfunctions):\n\'Unpack\' the dynamic columns content to an arrays of values and names.\n3 functions to get any column value as string, integer (long long) or floating\npoint (double).\n\n* New type of \"dynamic column\" row added on the API level (in SQL level output\nit is a string but if you use dynamic column functions to construct object it\nwill be added as dynamic column value) which allow to add dynamic columns\ninside dynamic columns. JSON function represent such recursive constructions\ncorrectly but limit depth of representation as current implementation limit\n(internally depth of dynamic columns embedding is not limited).\n\nInterface with Cassandra\n------------------------\n\nCassandraSE is no longer actively being developed and has been removed in\nMariaDB 10.6. See MDEV-23024.\n\nSome internal changes were added to dynamic columns to allow them to serve as\nan interface to Apache Cassandra dynamic columns. The Cassandra engine may\npack all columns which were not mentioned in the MariaDB interface table\ndefinition and even bring changes in the dynamic column contents back to the\ncassandra columns family (the table analog in cassandra).\n\nURL: https://mariadb.com/kb/en/dynamic-columns-from-mariadb-10/','','https://mariadb.com/kb/en/dynamic-columns-from-mariadb-10/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (735,38,'MERGE','Description\n-----------\n\nThe MERGE storage engine, also known as the MRG_MyISAM engine, is a collection\nof identical MyISAM tables that can be used as one. \"Identical\" means that all\ntables have identical column and index information. You cannot merge MyISAM\ntables in which the columns are listed in a different order, do not have\nexactly the same columns, or have the indexes in different order. However, any\nor all of the MyISAM tables can be compressed with myisampack. Columns names\nand indexes names can be different, as long as data types and NULL/NOT NULL\nclauses are the same. Differences in table options such as AVG_ROW_LENGTH,\nMAX_ROWS, or PACK_KEYS do not matter.\n\nEach index in a MERGE table must match an index in underlying MyISAM tables,\nbut the opposite is not true. Also, a MERGE table cannot have a PRIMARY KEY or\nUNIQUE indexes, because it cannot enforce uniqueness over all underlying\ntables.\n\nThe following options are meaningful for MERGE tables:\n\n* UNION. This option specifies the list of the underlying MyISAM tables. The\nlist is enclosed between parentheses and separated with commas.\n* INSERT_METHOD. This options specifies whether, and how, INSERTs are allowed\nfor the table. Allowed values are: NO (INSERTs are not allowed), FIRST (new\nrows will be written into the first table specified in the UNION list), LAST\n(new rows will be written into the last table specified in the UNION list).\nThe default value is NO.\n\nIf you define a MERGE table with a definition which is different from the\nunderlying MyISAM tables, or one of the underlying tables is not MyISAM, the\nCREATE TABLE statement will not return any error. But any statement which\ninvolves the table will produce an error like the following:\n\nERROR 1168 (HY000): Unable to open underlying table which is differently\ndefined \n or of non-MyISAM type or doesn\'t exist\n\nA CHECK TABLE will show more information about the problem.\n\nThe error is also produced if the table is properly define, but an underlying\ntable\'s definition changes at some point in time.\n\nIf you try to insert a new row into a MERGE table with INSERT_METHOD=NO, you\nwill get an error like the following:\n\nERROR 1036 (HY000): Table \'tbl_name\' is read only\n\nIt is possible to build a MERGE table on MyISAM tables which have one or more\nvirtual columns. MERGE itself does not support virtual columns, thus such\ncolumns will be seen as regular columns. The data types and sizes will still\nneed to be identical, and they cannot be NOT NULL.\n\nExamples\n--------\n\nCREATE TABLE t1 (\n a INT NOT NULL AUTO_INCREMENT PRIMARY KEY,\n message CHAR(20)) ENGINE=MyISAM;\n\nCREATE TABLE t2 (\n a INT NOT NULL AUTO_INCREMENT PRIMARY KEY,\n message CHAR(20)) ENGINE=MyISAM;\n\nINSERT INTO t1 (message) VALUES (\'Testing\'),(\'table\'),(\'t1\');\n\nINSERT INTO t2 (message) VALUES (\'Testing\'),(\'table\'),(\'t2\');\n\nCREATE TABLE total (\n a INT NOT NULL AUTO_INCREMENT,\n message CHAR(20), INDEX(a))\n ENGINE=MERGE UNION=(t1,t2) INSERT_METHOD=LAST;\n\nSELECT * FROM total;\n+---+---------+\n| a | message |\n+---+---------+\n| 1 | Testing |\n| 2 | table |\n| 3 | t1 |\n| 1 | Testing |\n| 2 | table |\n| 3 | t2 |\n+---+---------+\n\nIn the following example, we\'ll create three MyISAM tables, and then a MERGE\ntable on them. However, one of them uses a different data type for the column\nb, so a SELECT will produce an error:\n\nCREATE TABLE t1 (\n a INT,\n b INT\n) ENGINE = MyISAM;\n\nCREATE TABLE t2 (\n a INT,\n b INT\n) ENGINE = MyISAM;\n\nCREATE TABLE t3 (\n a INT,\n b TINYINT\n) ENGINE = MyISAM;\n\nCREATE TABLE t_mrg (\n a INT,\n b INT\n) ENGINE = MERGE,UNION=(t1,t2,t3);\n\nSELECT * FROM t_mrg;\nERROR 1168 (HY000): Unable to open underlying table which is differently\ndefined\n or of non-MyISAM type or doesn\'t exist\n\nTo find out what\'s wrong, we\'ll use a CHECK TABLE:\n\nCHECK TABLE t_mrg\\G\n*************************** 1. row ***************************\n Table: test.t_mrg\n Op: check\nMsg_type: Error\nMsg_text: Table \'test.t3\' is differently defined or of non-MyISAM type or\ndoesn\'t exist\n*************************** 2. row ***************************\n Table: test.t_mrg\n Op: check\nMsg_type: Error\nMsg_text: Unable to open underlying table which is differently defined or of\nnon-MyISAM type or doesn\'t exist\n*************************** 3. row ***************************\n Table: test.t_mrg\n Op: check\nMsg_type: error\nMsg_text: Corrupt\n\nNow, we know that the problem is in t3\'s definition.\n\nURL: https://mariadb.com/kb/en/merge/','','https://mariadb.com/kb/en/merge/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (736,39,'Sequence Overview','MariaDB starting with 10.3\n--------------------------\nSequences were introduced in MariaDB 10.3.\n\nIntroduction\n------------\n\nA sequence is an object that generates a sequence of numeric values, as\nspecified by the CREATE SEQUENCE statement.\n\nCREATE SEQUENCE will create a sequence that generates new values when called\nwith NEXT VALUE FOR sequence_name. It\'s an alternative to AUTO INCREMENT when\none wants to have more control of how the numbers are generated. As the\nSEQUENCE caches values (up to the CACHE value in the CREATE SEQUENCE\nstatement, by default 1000) it can in some cases be much faster than AUTO\nINCREMENT. Another benefit is that one can access the last value generated by\nall used sequences, which solves one of the limitations with LAST_INSERT_ID().\n\nCreating a Sequence\n-------------------\n\nThe CREATE SEQUENCE statement is used to create a sequence. Here is an example\nof a sequence starting at 100, incrementing by 10 each time:\n\nCREATE SEQUENCE s START WITH 100 INCREMENT BY 10;\n\nThe CREATE SEQUENCE statement, along with defaults, can be viewd with the SHOW\nCREATE SEQUENCE STATEMENT, for example:\n\nSHOW CREATE SEQUENCE s\\G\n*************************** 1. row ***************************\n Table: s\nCreate Table: CREATE SEQUENCE `s` start with 100 minvalue 1 maxvalue\n9223372036854775806 \n increment by 10 cache 1000 nocycle ENGINE=InnoDB\n\nUsing Sequence Objects\n----------------------\n\nTo get the next value from a sequence, use\n\nNEXT VALUE FOR sequence_name\n\nor\n\nNEXTVAL(sequence_name)\n\nor in Oracle mode (SQL_MODE=ORACLE)\n\nsequence_name.nextval\n\nFor retrieving the last value used by the current connection from a sequence\nuse:\n\nPREVIOUS VALUE FOR sequence_name\n\nor\n\nLASTVAL(sequence_name)\n\nor in Oracle mode (SQL_MODE=ORACLE)\n\nsequence_name.currval\n\nFor example:\n\nSELECT NEXTVAL(s);\n+------------+\n| NEXTVAL(s) |\n+------------+\n| 100 |\n+------------+\n\nSELECT NEXTVAL(s);\n+------------+\n| NEXTVAL(s) |\n+------------+\n| 110 |\n+------------+\n\nSELECT LASTVAL(s);\n+------------+\n| LASTVAL(s) |\n+------------+\n| 110 |\n+------------+\n\nUsing Sequences in DEFAULT\n--------------------------\n\nMariaDB starting with 10.3.3\n----------------------------\nStarting from 10.3.3 you can use Sequences in DEFAULT:\n\ncreate sequence s1;\ncreate table t1 (a int primary key default (next value for s1), b int);\ninsert into t1 (b) values (1),(2);\nselect * from t1;\n+---+------+\n| a | b |\n+---+------+\n| 1 | 1 |\n| 2 | 2 |\n+---+------+\n\nChanging a Sequence\n-------------------\n\nThe ALTER SEQUENCE statement is used for changing sequences. For example, to\nrestart the sequence at another value:\n\nALTER SEQUENCE s RESTART 50;\n\nSELECT NEXTVAL(s);\n+------------+\n| NEXTVAL(s) |\n+------------+\n| 50 |\n+------------+\n\nThe SETVAL function can also be used to set the next value to be returned for\na SEQUENCE, for example:\n\nSELECT SETVAL(s, 100);\n+----------------+\n| SETVAL(s, 100) |\n+----------------+\n| 100 |\n+----------------+\n\nSETVAL can only be used to increase the sequence value. Attempting to set a\nlower value will fail, returning NULL:\n\nSELECT SETVAL(s, 50);\n+---------------+\n| SETVAL(s, 50) |\n+---------------+\n| NULL |\n+---------------+\n\nDropping a Sequence\n-------------------\n\nThe DROP SEQUENCE statement is used to drop a sequence, for example:\n\nDROP SEQUENCE s;\n\nReplication\n-----------\n\nIf one wants to use Sequences in a master-master setup or with Galera one\nshould use INCREMENT=0. This will tell the Sequence to use\nauto_increment_increment and auto_increment_offset to generate unique values\nfor each server.\n\nStandards Compliance\n--------------------\n\nMariaDB 10.3 supports both ANSI SQL and Oracle syntax for sequences.\n\nHowever as SEQUENCE is implemented as a special kind of table, it uses the\nsame namespace as tables. The benefits are that sequences show up in SHOW\nTABLES, and one can also create a sequence with CREATE TABLE and drop it with\nDROP TABLE. One can SELECT from it as from any other table. This ensures that\nall old tools that work with tables should work with sequences.\n\nSince sequence objects act as regular tables in many contexts, they will be\naffected by LOCK TABLES. This is not the case in other DBMS, such as Oracle,\nwhere LOCK TABLE does not affect sequences.\n\nNotes\n-----\n\nOne of the goals with the Sequence implementation is that all old tools, such\nas mysqldump, should work unchanged, while still keeping the normal usage of\nsequence standard compatibly.\n\nTo make this possible, sequence is currently implemented as a table with a few\nexclusive properties.\n\nThe special properties for sequence tables are:\n\n* A sequence table has always one row.\n* When one creates a sequence, either with CREATE TABLE or CREATE SEQUENCE,\none row will be inserted.\n* If one tries to insert into a sequence table, the single row will be\nupdated. This allows mysqldump to work but also gives the additional benefit\nthat one can change all properties of a sequence with a single insert. New\napplications should of course also use ALTER SEQUENCE.\n* UPDATE or DELETE can\'t be performed on Sequence objects.\n* Doing a select on the sequence shows the current state of the sequence,\nexcept the values that are reserved in the cache. The next_value column shows\nthe next value not reserved by the cache.\n* FLUSH TABLES will close the sequence and the next sequence number generated\nwill be according to what\'s stored in the Sequence object. In effect, this\nwill discard the cached values.\n* A number of normal table operations work on Sequence tables. See next\nsection.\n\nTable Operations that Work with Sequences\n-----------------------------------------\n\n* SHOW CREATE TABLE sequence_name. This shows the table structure that is\nbehind the SEQUENCE including the field names that can be used with SELECT or\neven CREATE TABLE.\n* CREATE TABLE sequence-structure ... SEQUENCE=1\n* ALTER TABLE sequence RENAME TO sequence2\n* RENAME TABLE sequence_name TO new_sequence_name\n* DROP TABLE sequence_name. This is allowed mainly to get old tools like\nmysqldump to work with sequence tables.\n* SHOW TABLES\n\nImplementation\n--------------\n\nInternally, sequence tables are created as a normal table without rollback\n(the InnoDB, Aria and MySAM engines support this), wrapped by a sequence\nengine object. This allowed us to create sequences with almost no performance\nimpact for normal tables. (The cost is one \'if\' per insert if the binary log\nis enabled).\n\nUnderlying Table Structure\n--------------------------\n\nThe following example shows the table structure of sequences and how it can be\nused as a table. (Output of results are slightly edited to make them easier to\nread)\n\ncreate sequence t1;\nshow create sequence t1\\G\n*************************** 1. row ***************************\n CREATE SEQUENCE `t1` start with 1 minvalue 1 maxvalue 9223372036854775806\n increment by 1 cache 1000 nocycle ENGINE=InnoDB\n\nshow create table t1\\G\n*************************** 1. row ***************************\nCreate Table: CREATE TABLE `t1` (\n `next_not_cached_value` bigint(21) NOT NULL,\n `minimum_value` bigint(21) NOT NULL,\n `maximum_value` bigint(21) NOT NULL,\n `start_value` bigint(21) NOT NULL COMMENT \'start value when sequences is\ncreated or value if RESTART is used\',\n `increment` bigint(21) NOT NULL COMMENT \'increment value\',\n `cache_size` bigint(21) unsigned NOT NULL,\n `cycle_option` tinyint(1) unsigned NOT NULL COMMENT \'0 if no cycles are\nallowed, 1 if the sequence should begin a new cycle when maximum_value is\npassed\',\n `cycle_count` bigint(21) NOT NULL COMMENT \'How many cycles have been done\'\n) ENGINE=InnoDB SEQUENCE=1\n\nselect * from t1\\G\nnext_not_cached_value: 1\n minimum_value: 1\n maximum_value: 9223372036854775806\n start_value: 1\n increment: 1\n cache_size: 1000\n cycle_option: 0\n cycle_count: 0\n\nThe cycle_count column is incremented every time the sequence wraps around.\n\nCredits\n-------\n\n* Thanks to Jianwe Zhao from Aliyun for his work on SEQUENCE in AliSQL, which\ngave ideas and inspiration for this work.\n* Thanks to Peter Gulutzan,who helped test and gave useful comments about the\nimplementation.\n\nURL: https://mariadb.com/kb/en/sequence-overview/','','https://mariadb.com/kb/en/sequence-overview/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (737,39,'CREATE SEQUENCE','MariaDB starting with 10.3\n--------------------------\nCREATE SEQUENCE was introduced in MariaDB 10.3.\n\nSyntax\n------\n\nCREATE [OR REPLACE] [TEMPORARY] SEQUENCE [IF NOT EXISTS] sequence_name\n[ INCREMENT [ BY | = ] increment ]\n[ MINVALUE [=] minvalue | NO MINVALUE | NOMINVALUE ]\n[ MAXVALUE [=] maxvalue | NO MAXVALUE | NOMAXVALUE ]\n[ START [ WITH | = ] start ] \n[ CACHE [=] cache | NOCACHE ] [ CYCLE | NOCYCLE] \n[table_options]\nThe options for CREATE SEQUENCE can be given in any order, optionally followed\nby table_options.\n\ntable_options can be any of the normal table options in CREATE TABLE but the\nmost usable ones are ENGINE=... and COMMENT=.\n\nNOMAXVALUE and NOMINVALUE are there to allow one to create SEQUENCEs using the\nOracle syntax.\n\nDescription\n-----------\n\nCREATE SEQUENCE will create a sequence that generates new values when called\nwith NEXT VALUE FOR sequence_name. It\'s an alternative to AUTO INCREMENT when\none wants to have more control of how the numbers are generated. As the\nSEQUENCE caches values (up to CACHE) it can in some cases be much faster than\nAUTO INCREMENT. Another benefit is that one can access the last value\ngenerated by all used sequences, which solves one of the limitations with\nLAST_INSERT_ID().\n\nCREATE SEQUENCE requires the CREATE privilege.\n\nDROP SEQUENCE can be used to drop a sequence, and ALTER SEQUENCE to change it.\n\nArguments to Create\n-------------------\n\nThe following options may be used:\n\n+---------------+------------------------------+----------------------------+\n| Option | Default value | Description |\n+---------------+------------------------------+----------------------------+\n| INCREMENT | 1 | Increment to use for |\n| | | values. May be negative. |\n| | | Setting an increment of 0 |\n| | | causes the sequence to |\n| | | use the value of the |\n| | | auto_increment_increment |\n| | | system variable at the |\n| | | time of creation, which |\n| | | is always a positive |\n| | | number. (see MDEV-16035). |\n+---------------+------------------------------+----------------------------+\n| MINVALUE | 1 if INCREMENT > 0 and | Minimum value for the |\n| | -9223372036854775807 if | sequence |\n| | INCREMENT < 0 | |\n+---------------+------------------------------+----------------------------+\n| MAXVALUE | 9223372036854775806 if | Max value for sequence |\n| | INCREMENT > 0 and -1 if | |\n| | INCREMENT < 0 | |\n+---------------+------------------------------+----------------------------+\n| START | MINVALUE if INCREMENT > 0 | First value that the |\n| | and MAX_VALUE if INCREMENT< | sequence will generate |\n| | 0 | |\n+---------------+------------------------------+----------------------------+\n| CACHE | 1000 | Number of values that |\n| | | should be cached. 0 if no |\n| | | CACHE. The underlying |\n| | | table will be updated |\n| | | first time a new sequence |\n| | | number is generated and |\n| | | each time the cache runs |\n| | | out. |\n+---------------+------------------------------+----------------------------+\n\nIf CYCLE is used then the sequence should start again from MINVALUE after it\nhas run out of values. Default value is NOCYCLE.\n\nConstraints on Create Arguments\n-------------------------------\n\nTo be able to create a legal sequence, the following must hold:\n\n* MAXVALUE >= start\n* MAXVALUE > MINVALUE\n* START >= MINVALUE\n* MAXVALUE <= 9223372036854775806 (LONGLONG_MAX-1)\n* MINVALUE >= -9223372036854775807 (LONGLONG_MIN+1)\n\nNote that sequences can\'t generate the maximum/minimum 64 bit number because\nof the constraint of MINVALUE and MAXVALUE.\n\nAtomic DDL\n----------\n\nMariaDB starting with 10.6.1\n----------------------------\nMariaDB 10.6.1 supports Atomic DDL and CREATE SEQUENCE is atomic.\n\nExamples\n--------\n\nCREATE SEQUENCE s START WITH 100 INCREMENT BY 10;\n\nCREATE SEQUENCE s2 START WITH -100 INCREMENT BY -10;\n\nThe following statement fails, as the increment conflicts with the defaults\n\nCREATE SEQUENCE s3 START WITH -100 INCREMENT BY 10;\nERROR 4082 (HY000): Sequence \'test.s3\' values are conflicting\n\nThe sequence can be created by specifying workable minimum and maximum values:\n\nCREATE SEQUENCE s3 START WITH -100 INCREMENT BY 10 MINVALUE=-100 MAXVALUE=1000;\n\nURL: https://mariadb.com/kb/en/create-sequence/','','https://mariadb.com/kb/en/create-sequence/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (738,39,'ALTER SEQUENCE','MariaDB starting with 10.3.1\n----------------------------\nALTER SEQUENCE was introduced in MariaDB 10.3.\n\nSyntax\n------\n\nALTER SEQUENCE [IF EXISTS] sequence_name\n[ INCREMENT [ BY | = ] increment ]\n[ MINVALUE [=] minvalue | NO MINVALUE | NOMINVALUE ]\n[ MAXVALUE [=] maxvalue | NO MAXVALUE | NOMAXVALUE ]\n[ START [ WITH | = ] start ] [ CACHE [=] cache ] [ [ NO ] CYCLE ]\n[ RESTART [[WITH | =] restart]\n\nALTER SEQUENCE allows one to change any values for a SEQUENCE created with\nCREATE SEQUENCE.\n\nThe options for ALTER SEQUENCE can be given in any order.\n\nDescription\n-----------\n\nALTER SEQUENCE changes the parameters of an existing sequence generator. Any\nparameters not specifically set in the ALTER SEQUENCE command retain their\nprior settings.\n\nALTER SEQUENCE requires the ALTER privilege.\n\nArguments to ALTER SEQUENCE\n---------------------------\n\nThe following options may be used:\n\n+---------------+-------------------------------+---------------------------+\n| Option | Default value | Description |\n+---------------+-------------------------------+---------------------------+\n| INCREMENT | 1 | Increment to use for |\n| | | values. May be negative. |\n+---------------+-------------------------------+---------------------------+\n| MINVALUE | 1 if INCREMENT > 0 and | Minimum value for the |\n| | -9223372036854775807 if | sequence. |\n| | INCREMENT < 0 | |\n+---------------+-------------------------------+---------------------------+\n| MAXVALUE | 9223372036854775806 if | Max value for sequence. |\n| | INCREMENT > 0 and -1 if | |\n| | INCREMENT < 0 | |\n+---------------+-------------------------------+---------------------------+\n| START | MINVALUE if INCREMENT > 0 | First value that the |\n| | and MAX_VALUE if INCREMENT< 0 | sequence will generate. |\n+---------------+-------------------------------+---------------------------+\n| CACHE | 1000 | Number of values that |\n| | | should be cached. 0 if |\n| | | no CACHE. The |\n| | | underlying table will be |\n| | | updated first time a new |\n| | | sequence number is |\n| | | generated and each time |\n| | | the cache runs out. |\n+---------------+-------------------------------+---------------------------+\n| CYCLE | 0 (= NO CYCLE) | 1 if the sequence should |\n| | | start again from |\n| | | MINVALUE# after it has |\n| | | run out of values. |\n+---------------+-------------------------------+---------------------------+\n| RESTART | START if restart value not | If RESTART option is |\n| | is given | used, NEXT VALUE will |\n| | | return the restart value. |\n+---------------+-------------------------------+---------------------------+\n\nThe optional clause RESTART [ WITH restart ] sets the next value for the\nsequence. This is equivalent to calling the SETVAL() function with the is_used\nargument as 0. The specified value will be returned by the next call of\nnextval. Using RESTART with no restart value is equivalent to supplying the\nstart value that was recorded by CREATE SEQUENCE or last set by ALTER SEQUENCE\nSTART WITH.\n\nALTER SEQUENCE will not allow you to change the sequence so that it\'s\ninconsistent. For example:\n\nCREATE SEQUENCE s1;\nALTER SEQUENCE s1 MINVALUE 10;\nERROR 4061 (HY000): Sequence \'test.t1\' values are conflicting\n\nALTER SEQUENCE s1 MINVALUE 10 RESTART 10;\nERROR 4061 (HY000): Sequence \'test.t1\' values are conflicting\n\nALTER SEQUENCE s1 MINVALUE 10 START 10 RESTART 10;\n\nINSERT\n------\n\nTo allow SEQUENCE objects to be backed up by old tools, like mysqldump, one\ncan use SELECT to read the current state of a SEQUENCE object and use an\nINSERT to update the SEQUENCE object. INSERT is only allowed if all fields are\nspecified:\n\nCREATE SEQUENCE s1;\nINSERT INTO s1 VALUES(1000,10,2000,1005,1,1000,0,0);\nSELECT * FROM s1;\n\n+------------+-----------+-----------+-------+-----------+-------+-------+-----\n-+\n| next_value | min_value | max_value | start | increment | cache | cycle |\nround |\n+------------+-----------+-----------+-------+-----------+-------+-------+-----\n-+\n| 1000 | 10 | 2000 | 1005 | 1 | 1000 | 0 | \n0 |\n+------------+-----------+-----------+-------+-----------+-------+-------+-----\n-+\n\nSHOW CREATE SEQUENCE s1;\n+-------+----------------------------------------------------------------------\n---------------------------------------+\n| Table | Create Table \n |\n+-------+----------------------------------------------------------------------\n---------------------------------------+\n| s1 | CREATE SEQUENCE `s1` start with 1005 minvalue 10 maxvalue 2000\nincrement by 1 cache 1000 nocycle ENGINE=Aria |\n+-------+----------------------------------------------------------------------\n---------------------------------------+\n\nNotes\n-----\n\nALTER SEQUENCE will instantly affect all future SEQUENCE operations. This is\nin contrast to some other databases where the changes requested by ALTER\nSEQUENCE will not be seen until the sequence cache has run out.\n\nALTER SEQUENCE will take a full table lock of the sequence object during its\n(brief) operation. This ensures that ALTER SEQUENCE is replicated correctly.\nIf you only want to set the next sequence value to a higher value than\ncurrent, then you should use SETVAL() instead, as this is not blocking.\n\nIf you want to change storage engine, sequence comment or rename the sequence,\nyou can use ALTER TABLE for this.\n\nURL: https://mariadb.com/kb/en/alter-sequence/','','https://mariadb.com/kb/en/alter-sequence/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (739,39,'DROP SEQUENCE','MariaDB starting with 10.3\n--------------------------\nDROP SEQUENCE was introduced in MariaDB 10.3.\n\nSyntax\n------\n\nDROP [TEMPORARY] SEQUENCE [IF EXISTS] [/*COMMENT TO SAVE*/]\n sequence_name [, sequence_name] ...\n\nDescription\n-----------\n\nDROP SEQUENCE removes one or more sequences created with CREATE SEQUENCE. You\nmust have the DROP privilege for each sequence. MariaDB returns an error\nindicating by name which non-existing tables it was unable to drop, but it\nalso drops all of the tables in the list that do exist.\n\nImportant: When a table is dropped, user privileges on the table are not\nautomatically dropped. See GRANT.\n\nIf another connection is using the sequence, a metadata lock is active, and\nthis statement will wait until the lock is released. This is also true for\nnon-transactional tables.\n\nFor each referenced sequence, DROP SEQUENCE drops a temporary sequence with\nthat name, if it exists. If it does not exist, and the TEMPORARY keyword is\nnot used, it drops a non-temporary sequence with the same name, if it exists.\nThe TEMPORARY keyword ensures that a non-temporary sequence will not\naccidentally be dropped.\n\nUse IF EXISTS to prevent an error from occurring for sequences that do not\nexist. A NOTE is generated for each non-existent sequence when using IF\nEXISTS. See SHOW WARNINGS.\n\nDROP SEQUENCE requires the DROP privilege.\n\nNotes\n-----\n\nDROP SEQUENCE only removes sequences, not tables. However, DROP TABLE can\nremove both sequences and tables.\n\nURL: https://mariadb.com/kb/en/drop-sequence/','','https://mariadb.com/kb/en/drop-sequence/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (740,39,'NEXT VALUE for sequence_name','MariaDB starting with 10.3\n--------------------------\nSEQUENCEs were introduced in MariaDB 10.3\n\nSyntax\n------\n\nNEXT VALUE FOR sequence\n\nor\n\nNEXTVAL(sequence_name)\n\nor in Oracle mode (SQL_MODE=ORACLE)\n\nsequence_name.nextval\n\nNEXT VALUE FOR is ANSI SQL syntax while NEXTVAL() is PostgreSQL syntax.\n\nDescription\n-----------\n\nGenerate next value for a SEQUENCE.\n\n* You can greatly speed up NEXT VALUE by creating the sequence with the CACHE\noption. If not, every NEXT VALUE usage will cause changes in the stored\nSEQUENCE table.\n* When using NEXT VALUE the value will be reserved at once and will not be\nreused, except if the SEQUENCE was created with CYCLE. This means that when\nyou are using SEQUENCEs you have to expect gaps in the generated sequence\nnumbers.\n* If one updates the SEQUENCE with SETVAL() or ALTER SEQUENCE ... RESTART,\nNEXT VALUE FOR will notice this and start from the next requested value.\n* FLUSH TABLES will close the sequence and the next sequence number generated\nwill be according to what\'s stored in the SEQUENCE object. In effect, this\nwill discard the cached values.\n* A server restart (or closing the current connection) also causes a drop of\nall cached values. The cached sequence numbers are reserved only for the\ncurrent connection.\n* NEXT VALUE requires the INSERT privilege.\n\nMariaDB starting with 10.3.3\n----------------------------\n* You can also use NEXT VALUE FOR sequence for column DEFAULT.\n\nURL: https://mariadb.com/kb/en/next-value-for-sequence_name/','','https://mariadb.com/kb/en/next-value-for-sequence_name/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (741,39,'PREVIOUS VALUE FOR sequence_name','MariaDB starting with 10.3\n--------------------------\nSEQUENCEs were introduced in MariaDB 10.3.\n\nSyntax\n------\n\nPREVIOUS VALUE FOR sequence_name\n\nor\n\nLASTVAL(sequence_name)\n\nor in Oracle mode (SQL_MODE=ORACLE)\n\nsequence_name.currval\n\nPREVIOUS VALUE FOR is IBM DB2 syntax while LASTVAL() is PostgreSQL syntax.\n\nDescription\n-----------\n\nGet last value in the current connection generated from a sequence.\n\n* If the sequence has not yet been used by the connection, PREVIOUS VALUE FOR\nreturns NULL (the same thing applies with a new connection which doesn\'t see a\nlast value for an existing sequence).\n* If a SEQUENCE has been dropped and re-created then it\'s treated as a new\nSEQUENCE and PREVIOUS VALUE FOR will return NULL.\n* FLUSH TABLES has no effect on PREVIOUS VALUE FOR.\n* Previous values for all used sequences are stored per connection until\nconnection ends.\n* PREVIOUS VALUE FOR requires the SELECT privilege.\n\nExample\n-------\n\nCREATE SEQUENCE s START WITH 100 INCREMENT BY 10;\n\nSELECT PREVIOUS VALUE FOR s;\n+----------------------+\n| PREVIOUS VALUE FOR s |\n+----------------------+\n| NULL |\n+----------------------+\n\n# The function works for sequences only, if the table is used an error is\ngenerated\nSELECT PREVIOUS VALUE FOR t;\nERROR 4089 (42S02): \'test.t\' is not a SEQUENCE\n\n# Call the NEXT VALUE FOR s:\nSELECT NEXT VALUE FOR s;\n+------------------+\n| NEXT VALUE FOR s |\n+------------------+\n| 100 |\n+------------------+\n\nSELECT PREVIOUS VALUE FOR s;\n+----------------------+\n| PREVIOUS VALUE FOR s |\n+----------------------+\n| 100 |\n+----------------------+\n\nNow try to start the new connection and check that the last value is still\nNULL, before updating the value in the new connection after the output of the\nnew connection gets current value (110 in the example below). Note that first\nconnection cannot see this change and the result of last value still remains\nthe same (100 in the example above).\n\n$ .mysql -uroot test -e\"SELECT PREVIOUS VALUE FOR s; SELECT NEXT VALUE FOR s;\nSELECT PREVIOUS VALUE FOR s;\"\n+----------------------+\n| PREVIOUS VALUE FOR s |\n+----------------------+\n| NULL |\n+----------------------+\n+------------------+\n| NEXT VALUE FOR s |\n+------------------+\n| 110 |\n+------------------+\n+----------------------+\n| PREVIOUS VALUE FOR s |\n+----------------------+\n| 110 |\n+----------------------+\n\nURL: https://mariadb.com/kb/en/previous-value-for-sequence_name/','','https://mariadb.com/kb/en/previous-value-for-sequence_name/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (742,39,'SETVAL','MariaDB starting with 10.3.1\n----------------------------\nSEQUENCEs were introduced in MariaDB 10.3.\n\nSyntax\n------\n\nSETVAL(sequence_name, next_value, [is_used, [round]])\n\nDescription\n-----------\n\nSet the next value to be returned for a SEQUENCE.\n\nThis function is compatible with PostgreSQL syntax, extended with the round\nargument.\n\nIf the is_used argument is not given or is 1 or true, then the next used value\nwill one after the given value. If is_used is 0 or false then the next\ngenerated value will be the given value.\n\nIf round is used then it will set the round value (or the internal cycle\ncount, starting at zero) for the sequence. If round is not used, it\'s assumed\nto be 0.\n\nnext_value must be an integer literal.\n\nFor SEQUENCE tables defined with CYCLE (see CREATE SEQUENCE) one should use\nboth next_value and round to define the next value. In this case the current\nsequence value is defined to be round, next_value.\n\nThe result returned by SETVAL() is next_value or NULL if the given next_value\nand round is smaller than the current value.\n\nSETVAL() will not set the SEQUENCE value to a something that is less than its\ncurrent value. This is needed to ensure that SETVAL() is replication safe. If\nyou want to set the SEQUENCE to a smaller number use ALTER SEQUENCE.\n\nIf CYCLE is used, first round and then next_value are compared to see if the\nvalue is bigger than the current value.\n\nInternally, in the MariaDB server, SETVAL() is used to inform slaves that a\nSEQUENCE has changed value. The slave may get SETVAL() statements out of\norder, but this is ok as only the biggest one will have an effect.\n\nSETVAL requires the INSERT privilege.\n\nExamples\n--------\n\nSELECT setval(foo, 42); -- Next nextval will return 43\nSELECT setval(foo, 42, true); -- Same as above\nSELECT setval(foo, 42, false); -- Next nextval will return 42\n\nSETVAL setting higher and lower values on a sequence with an increment of 10:\n\nSELECT NEXTVAL(s);\n+------------+\n| NEXTVAL(s) |\n+------------+\n| 50 |\n+------------+\n\nSELECT SETVAL(s, 100);\n+----------------+\n| SETVAL(s, 100) |\n+----------------+\n| 100 |\n+----------------+\n\nSELECT NEXTVAL(s);\n+------------+\n| NEXTVAL(s) |\n+------------+\n| 110 |\n+------------+\n\nSELECT SETVAL(s, 50);\n+---------------+\n| SETVAL(s, 50) |\n+---------------+\n| NULL |\n+---------------+\n\nSELECT NEXTVAL(s);\n+------------+\n| NEXTVAL(s) |\n+------------+\n| 120 |\n+------------+\n\nExample demonstrating round:\n\nCREATE OR REPLACE SEQUENCE s1\n START WITH 1\n MINVALUE 1\n MAXVALUE 99\n INCREMENT BY 1\n CACHE 20\n CYCLE;\n\nSELECT SETVAL(s1, 99, 1, 0);\n+----------------------+\n| SETVAL(s1, 99, 1, 0) |\n+----------------------+\n| 99 |\n+----------------------+\n\nSELECT NEXTVAL(s1);\n+-------------+\n| NEXTVAL(s1) |\n+-------------+\n| 1 |\n+-------------+\n\nThe following statement returns NULL, as the given next_value and round is\nsmaller than the current value.\n\nSELECT SETVAL(s1, 99, 1, 0);\n+----------------------+\n| SETVAL(s1, 99, 1, 0) |\n+----------------------+\n| NULL |\n+----------------------+\n\nSELECT NEXTVAL(s1);\n+-------------+\n| NEXTVAL(s1) |\n+-------------+\n| 2 |\n+-------------+\n\nIncreasing the round from zero to 1 will allow next_value to be returned.\n\nSELECT SETVAL(s1, 99, 1, 1);\n+----------------------+\n| SETVAL(s1, 99, 1, 1) |\n+----------------------+\n| 99 |\n+----------------------+\n\nSELECT NEXTVAL(s1);\n+-------------+\n| NEXTVAL(s1) |\n+-------------+\n| 1 |\n+-------------+\n\nURL: https://mariadb.com/kb/en/setval/','','https://mariadb.com/kb/en/setval/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (743,40,'JSON_ARRAYAGG','MariaDB starting with 10.5.0\n----------------------------\nJSON_ARRAYAGG was added in MariaDB 10.5.0.\n\nSyntax\n------\n\nJSON_ARRAYAGG(column_or_expression)\n\nDescription\n-----------\n\nJSON_ARRAYAGG returns a JSON array containing an element for each value in a\ngiven set of JSON or SQL values. It acts on a column or an expression that\nevaluates to a single value.\n\nReturns NULL in the case of an error, or if the result contains no rows.\n\nJSON_ARRAYAGG cannot currently be used as a window function.\n\nThe full syntax is as follows:\n\nJSON_ARRAYAGG([DISTINCT] expr [,expr ...]\n [ORDER BY {unsigned_integer | col_name | expr}\n [ASC | DESC] [,col_name ...]]\n [LIMIT {[offset,] row_count | row_count OFFSET offset}])\n\nExamples\n--------\n\nCREATE TABLE t1 (a INT, b INT);\n\nINSERT INTO t1 VALUES (1, 1),(2, 1), (1, 1),(2, 1), (3, 2),(2, 2),(2, 2),(2,\n2);\n\nSELECT JSON_ARRAYAGG(a), JSON_ARRAYAGG(b) FROM t1;\n+-------------------+-------------------+\n| JSON_ARRAYAGG(a) | JSON_ARRAYAGG(b) |\n+-------------------+-------------------+\n| [1,2,1,2,3,2,2,2] | [1,1,1,1,2,2,2,2] |\n+-------------------+-------------------+\n\nSELECT JSON_ARRAYAGG(a), JSON_ARRAYAGG(b) FROM t1 GROUP BY b;\n+------------------+------------------+\n| JSON_ARRAYAGG(a) | JSON_ARRAYAGG(b) |\n+------------------+------------------+\n| [1,2,1,2] | [1,1,1,1] |\n| [3,2,2,2] | [2,2,2,2] |\n+------------------+------------------+\n\nURL: https://mariadb.com/kb/en/json_arrayagg/','','https://mariadb.com/kb/en/json_arrayagg/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (744,40,'JSON_OBJECTAGG','MariaDB starting with 10.5.0\n----------------------------\nJSON_OBJECTAGG was added in MariaDB 10.5.0.\n\nSyntax\n------\n\nJSON_OBJECTAGG(key, value)\n\nDescription\n-----------\n\nJSON_OBJECTAGG returns a JSON object containing key-value pairs. It takes two\nexpressions that evaluate to a single value, or two column names, as\narguments, the first used as a key, and the second as a value.\n\nReturns NULL in the case of an error, or if the result contains no rows.\n\nJSON_OBJECTAGG cannot currently be used as a window function.\n\nExamples\n--------\n\nselect * from t1;\n+------+-------+\n| a | b |\n+------+-------+\n| 1 | Hello |\n| 1 | World |\n| 2 | This |\n+------+-------+\n\nSELECT JSON_OBJECTAGG(a, b) FROM t1;\n+----------------------------------------+\n| JSON_OBJECTAGG(a, b) |\n+----------------------------------------+\n| {\"1\":\"Hello\", \"1\":\"World\", \"2\":\"This\"} |\n+----------------------------------------+\n\nURL: https://mariadb.com/kb/en/json_objectagg/','','https://mariadb.com/kb/en/json_objectagg/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (745,40,'JSONPath Expressions','A number of JSON functions accept JSON Path expressions. MariaDB defines this\npath as follows:\n\nJSON Path Syntax\n----------------\n\npath : [\'lax\'] \'$\' [step]*\n\nThe path starts with an optional path mode. At the moment, MariaDB supports\nonly the \"lax\" mode, which is also the mode that is used when it is not\nexplicitly specified.\n\nThe $ symbol represents the context item. The search always starts from the\ncontext item; because of that, the path always starts with $.\n\nThen, it is followed by zero or more steps, which select element(s) in the\nJSON document. A step may be one of the following:\n\n* Object member selector\n* Array element selector\n* Wildcard selector\n\nObject Member Selector\n----------------------\n\nTo select member(s) in a JSON object, one can use one of the following:\n\n* .memberName selects the value of the member with name memberName.\n* .\"memberName\" - the same as above but allows one to select a member with a\nname that\'s not a valid identifier (that is, has space, dot, and/or other\ncharacters)\n* .* - selects the values of all members of the object.\n\nIf the current item is an array (instead of an object), nothing will be\nselected.\n\nArray Element Selector\n----------------------\n\nTo select elements of an array, one can use one of the following:\n\n* [N] selects element number N in the array. The elements are counted from\nzero.\n* [*] selects all elements in the array.\n\nIf the current item is an object (instead of an array), nothing will be\nselected.\n\nStarting from MariaDB server 10.9, JSON path also supports negative index in\narray, \'last\' keyword and range notation (\'to\' keyword) for accessing array\nelements. Negative index starts from -1.\n\n* [-N] selects n th element from end.\n* [last-N] selects n th element from the last element.\n* [M to N] selects range of elements starting from index M to N.\n\nExample:\n\nSET @json=\'{\n \"A\": [0,\n [1, 2, 3],\n [4, 5, 6],\n \"seven\",\n 0.8,\n true,\n false,\n \"eleven\",\n [12, [13, 14], {\"key1\":\"value1\"},[15]],\n true],\n \"B\": {\"C\": 1},\n \"D\": 2\n }\';\nSELECT JSON_EXTRACT(@json, \'$.A[-8][1]\');\n+--------------------------------------------------+\n| JSON_EXTRACT(@json, \'$.A[-8][1]\') |\n+--------------------------------------------------+\n| 5 |\n+--------------------------------------------------+\n\nSELECT JSON_EXTRACT(@json, \'$.A[last-7][1]\');\n+-----------------------------------------------+\n| SELECT JSON_EXTRACT(@json, \'$.A[last-7][1]\'); |\n+-----------------------------------------------+\n| 5 |\n+-----------------------------------------------+\n\nSET @json= \'[\n [1, {\"key1\": \"value1\"}, 3],\n [false, 5, 6],\n [7, 8, [9, {\"key2\": 2}, 11]],\n [15, 1.34, [14], [\"string1\", [16, {\"key1\":[1,2,3,[4,5,6]]}, 18]]],\n [19, 20],\n 21, 22\n ]\';\n\nSELECT JSON_EXTRACT(@json, \'$[0 to 3][2]\');\n+-----------------------------------------------+\n| JSON_EXTRACT(@json, \'$[0 to 3][2]\') |\n+-----------------------------------------------+\n| [3, 6, [9, {\"key2\": 2}, 11], [14]] |\n+-----------------------------------------------+\n\nThis will produce output for first index of eighth from last element of a two\ndimensional array.\n\nNote: In range notation, when M > N ( when M,N are greater than or equal to 0)\nor (size of array - M or size of array - N when M, N are less than 0), then it\nis treated as an impossible range and NULL is returned.\n\nSET @json= \'[1, 2, 3, 4, 5]\';\nSELECT JSON_EXTRACT(@json, \'$[4 to 2]\');\n+-----------------------------------+\n| JSON_EXTRACT(@json, \'$[4 to 2]\') |\n+-----------------------------------+\n| NULL |\n+-----------------------------------+\n\nWildcard\n--------\n\nThe wildcard step, **, recursively selects all child elements of the current\nelement. Both array elements and object members are selected.\n\nThe wildcard step must not be the last step in the JSONPath expression. It\nmust be followed by an array or object member selector step.\n\nFor example:\n\nselect json_extract(@json_doc, \'$**.price\');\n\nwill select all object members in the document that are named price, while\n\nselect json_extract(@json_doc, \'$**[2]\');\n\nwill select the second element in each of the arrays present in the document.\n\nCompatibility\n-------------\n\nMariaDB\'s JSONPath syntax supports a subset of JSON Path\'s definition in the\nSQL Standard. The most notable things not supported are the strict mode and\nfilters.\n\nMariaDB\'s JSONPath is close to MySQL\'s JSONPath. The wildcard step ( ** ) is a\nnon-standard extension that has the same meaning as in MySQL. The differences\nbetween MariaDB and MySQL\'s JSONPath are: MySQL supports [last] and [M to N]\nas array element selectors; MySQL doesn\'t allow one to specify the mode\nexplicitly (but uses lax mode implicitly).\n\nURL: https://mariadb.com/kb/en/jsonpath-expressions/','','https://mariadb.com/kb/en/jsonpath-expressions/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (746,40,'JSON_ARRAY','Syntax\n------\n\nJSON_ARRAY([value[, value2] ...])\n\nDescription\n-----------\n\nReturns a JSON array containing the listed values. The list can be empty.\n\nExample\n-------\n\nSELECT Json_Array(56, 3.1416, \'My name is \"Foo\"\', NULL);\n+--------------------------------------------------+\n| Json_Array(56, 3.1416, \'My name is \"Foo\"\', NULL) |\n+--------------------------------------------------+\n| [56, 3.1416, \"My name is \\\"Foo\\\"\", null] |\n+--------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/json_array/','','https://mariadb.com/kb/en/json_array/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (747,40,'JSON_ARRAY_APPEND','Syntax\n------\n\nJSON_ARRAY_APPEND(json_doc, path, value[, path, value] ...)\n\nDescription\n-----------\n\nAppends values to the end of the specified arrays within a JSON document,\nreturning the result, or NULL if any of the arguments are NULL.\n\nEvaluation is performed from left to right, with the resulting document from\nthe previous pair becoming the new value against which the next pair is\nevaluated.\n\nIf the json_doc is not a valid JSON document, or if any of the paths are not\nvalid, or contain a * or ** wildcard, an error is returned.\n\nExamples\n--------\n\nSET @json = \'[1, 2, [3, 4]]\';\n\nSELECT JSON_ARRAY_APPEND(@json, \'$[0]\', 5)\n+-------------------------------------+\n| JSON_ARRAY_APPEND(@json, \'$[0]\', 5) |\n+-------------------------------------+\n| [[1, 5], 2, [3, 4]] |\n+-------------------------------------+\n\nSELECT JSON_ARRAY_APPEND(@json, \'$[1]\', 6);\n+-------------------------------------+\n| JSON_ARRAY_APPEND(@json, \'$[1]\', 6) |\n+-------------------------------------+\n| [1, [2, 6], [3, 4]] |\n+-------------------------------------+\n\nSELECT JSON_ARRAY_APPEND(@json, \'$[1]\', 6, \'$[2]\', 7);\n+------------------------------------------------+\n| JSON_ARRAY_APPEND(@json, \'$[1]\', 6, \'$[2]\', 7) |\n+------------------------------------------------+\n| [1, [2, 6], [3, 4, 7]] |\n+------------------------------------------------+\n\nSELECT JSON_ARRAY_APPEND(@json, \'$\', 5);\n+----------------------------------+\n| JSON_ARRAY_APPEND(@json, \'$\', 5) |\n+----------------------------------+\n| [1, 2, [3, 4], 5] |\n+----------------------------------+\n\nSET @json = \'{\"A\": 1, \"B\": [2], \"C\": [3, 4]}\';\n\nSELECT JSON_ARRAY_APPEND(@json, \'$.B\', 5);\n+------------------------------------+\n| JSON_ARRAY_APPEND(@json, \'$.B\', 5) |\n+------------------------------------+\n| {\"A\": 1, \"B\": [2, 5], \"C\": [3, 4]} |\n+------------------------------------+\n\nURL: https://mariadb.com/kb/en/json_array_append/','','https://mariadb.com/kb/en/json_array_append/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (748,40,'JSON_ARRAY_INSERT','Syntax\n------\n\nJSON_ARRAY_INSERT(json_doc, path, value[, path, value] ...)\n\nDescription\n-----------\n\nInserts a value into a JSON document, returning the modified document, or NULL\nif any of the arguments are NULL.\n\nEvaluation is performed from left to right, with the resulting document from\nthe previous pair becoming the new value against which the next pair is\nevaluated.\n\nIf the json_doc is not a valid JSON document, or if any of the paths are not\nvalid, or contain a * or ** wildcard, an error is returned.\n\nExamples\n--------\n\nSET @json = \'[1, 2, [3, 4]]\';\n\nSELECT JSON_ARRAY_INSERT(@json, \'$[0]\', 5);\n+-------------------------------------+\n| JSON_ARRAY_INSERT(@json, \'$[0]\', 5) |\n+-------------------------------------+\n| [5, 1, 2, [3, 4]] |\n+-------------------------------------+\n\nSELECT JSON_ARRAY_INSERT(@json, \'$[1]\', 6);\n+-------------------------------------+\n| JSON_ARRAY_INSERT(@json, \'$[1]\', 6) |\n+-------------------------------------+\n| [1, 6, 2, [3, 4]] |\n+-------------------------------------+\n\nSELECT JSON_ARRAY_INSERT(@json, \'$[1]\', 6, \'$[2]\', 7);\n+------------------------------------------------+\n| JSON_ARRAY_INSERT(@json, \'$[1]\', 6, \'$[2]\', 7) |\n+------------------------------------------------+\n| [1, 6, 7, 2, [3, 4]] |\n+------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/json_array_insert/','','https://mariadb.com/kb/en/json_array_insert/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (749,40,'JSON_COMPACT','Syntax\n------\n\nJSON_COMPACT(json_doc)\n\nDescription\n-----------\n\nRemoves all unnecessary spaces so the json document is as short as possible.\n\nExample\n-------\n\nSET @j = \'{ \"A\": 1, \"B\": [2, 3]}\';\n\nSELECT JSON_COMPACT(@j), @j;\n+-------------------+------------------------+\n| JSON_COMPACT(@j) | @j |\n+-------------------+------------------------+\n| {\"A\":1,\"B\":[2,3]} | { \"A\": 1, \"B\": [2, 3]} |\n+-------------------+------------------------+\n\nURL: https://mariadb.com/kb/en/json_compact/','','https://mariadb.com/kb/en/json_compact/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (750,40,'JSON_CONTAINS','Syntax\n------\n\nJSON_CONTAINS(json_doc, val[, path])\n\nDescription\n-----------\n\nReturns whether or not the specified value is found in the given JSON document\nor, optionally, at the specified path within the document. Returns 1 if it\ndoes, 0 if not and NULL if any of the arguments are null. An error occurs if\nthe document or path is not valid, or contains the * or ** wildcards.\n\nExamples\n--------\n\nSET @json = \'{\"A\": 0, \"B\": {\"C\": 1}, \"D\": 2}\';\n\nSELECT JSON_CONTAINS(@json, \'2\', \'$.A\');\n+----------------------------------+\n| JSON_CONTAINS(@json, \'2\', \'$.A\') |\n+----------------------------------+\n| 0 |\n+----------------------------------+\n\nSELECT JSON_CONTAINS(@json, \'2\', \'$.D\');\n+----------------------------------+\n| JSON_CONTAINS(@json, \'2\', \'$.D\') |\n+----------------------------------+\n| 1 |\n+----------------------------------+\n\nSELECT JSON_CONTAINS(@json, \'{\"C\": 1}\', \'$.A\');\n+-----------------------------------------+\n| JSON_CONTAINS(@json, \'{\"C\": 1}\', \'$.A\') |\n+-----------------------------------------+\n| 0 |\n+-----------------------------------------+\n\nSELECT JSON_CONTAINS(@json, \'{\"C\": 1}\', \'$.B\');\n+-----------------------------------------+\n| JSON_CONTAINS(@json, \'{\"C\": 1}\', \'$.B\') |\n+-----------------------------------------+\n| 1 |\n+-----------------------------------------+\n\nURL: https://mariadb.com/kb/en/json_contains/','','https://mariadb.com/kb/en/json_contains/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (751,40,'JSON_CONTAINS_PATH','Syntax\n------\n\nJSON_CONTAINS_PATH(json_doc, return_arg, path[, path] ...)\n\nDescription\n-----------\n\nIndicates whether the given JSON document contains data at the specified path\nor paths. Returns 1 if it does, 0 if not and NULL if any of the arguments are\nnull.\n\nThe return_arg can be one or all:\n\n* one - Returns 1 if at least one path exists within the JSON document. \n* all - Returns 1 only if all paths exist within the JSON document.\n\nExamples\n--------\n\nSET @json = \'{\"A\": 1, \"B\": [2], \"C\": [3, 4]}\';\n\nSELECT JSON_CONTAINS_PATH(@json, \'one\', \'$.A\', \'$.D\');\n+------------------------------------------------+\n| JSON_CONTAINS_PATH(@json, \'one\', \'$.A\', \'$.D\') |\n+------------------------------------------------+\n| 1 |\n+------------------------------------------------+\n1 row in set (0.00 sec)\n\nSELECT JSON_CONTAINS_PATH(@json, \'all\', \'$.A\', \'$.D\');\n+------------------------------------------------+\n| JSON_CONTAINS_PATH(@json, \'all\', \'$.A\', \'$.D\') |\n+------------------------------------------------+\n| 0 |\n+------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/json_contains_path/','','https://mariadb.com/kb/en/json_contains_path/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (752,40,'JSON_DEPTH','Syntax\n------\n\nJSON_DEPTH(json_doc)\n\nDescription\n-----------\n\nReturns the maximum depth of the given JSON document, or NULL if the argument\nis null. An error will occur if the argument is an invalid JSON document.\n\n* Scalar values or empty arrays or objects have a depth of 1.\n* Arrays or objects that are not empty but contain only elements or member\nvalues of depth 1 will have a depth of 2.\n* In other cases, the depth will be greater than 2.\n\nExamples\n--------\n\nSELECT JSON_DEPTH(\'[]\'), JSON_DEPTH(\'true\'), JSON_DEPTH(\'{}\');\n+------------------+--------------------+------------------+\n| JSON_DEPTH(\'[]\') | JSON_DEPTH(\'true\') | JSON_DEPTH(\'{}\') |\n+------------------+--------------------+------------------+\n| 1 | 1 | 1 |\n+------------------+--------------------+------------------+\n\nSELECT JSON_DEPTH(\'[1, 2, 3]\'), JSON_DEPTH(\'[[], {}, []]\');\n+-------------------------+----------------------------+\n| JSON_DEPTH(\'[1, 2, 3]\') | JSON_DEPTH(\'[[], {}, []]\') |\n+-------------------------+----------------------------+\n| 2 | 2 |\n+-------------------------+----------------------------+\n\nSELECT JSON_DEPTH(\'[1, 2, [3, 4, 5, 6], 7]\');\n+---------------------------------------+\n| JSON_DEPTH(\'[1, 2, [3, 4, 5, 6], 7]\') |\n+---------------------------------------+\n| 3 |\n+---------------------------------------+\n\nURL: https://mariadb.com/kb/en/json_depth/','','https://mariadb.com/kb/en/json_depth/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (753,40,'JSON_DETAILED','Syntax\n------\n\nJSON_DETAILED(json_doc[, tab_size])\n\nDescription\n-----------\n\nRepresents JSON in the most understandable way emphasizing nested structures.\n\nExample\n-------\n\nSET @j = \'{ \"A\":1,\"B\":[2,3]}\';\n\nSELECT @j;\n+--------------------+\n| @j |\n+--------------------+\n| { \"A\":1,\"B\":[2,3]} |\n+--------------------+\n\nSELECT JSON_DETAILED(@j);\n+------------------------------------------------------------+\n| JSON_DETAILED(@j) |\n+------------------------------------------------------------+\n| {\n \"A\": 1,\n \"B\":\n [\n 2,\n 3\n ]\n} |\n+------------------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/json_detailed/','','https://mariadb.com/kb/en/json_detailed/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (754,40,'JSON_EQUALS','MariaDB starting with 10.7.0\n----------------------------\nJSON_EQUALS was added in MariaDB 10.7.0\n\nSyntax\n------\n\nJSON_EQUALS(json1, json2)\n\nDescription\n-----------\n\nChecks if there is equality between two json objects. Returns 1 if it there\nis, 0 if not, or NULL if any of the arguments are null.\n\nExamples\n--------\n\nSELECT JSON_EQUALS(\'{\"a\" :[1, 2, 3],\"b\":[4]}\', \'{\"b\":[4],\"a\":[1, 2, 3.0]}\');\n+------------------------------------------------------------------------+\n| JSON_EQUALS(\'{\"a\" :[1, 2, 3],\"b\":[4]}\', \'{\"b\":[4],\"a\":[1, 2, 3.0]}\') |\n+------------------------------------------------------------------------+\n| 1 |\n+------------------------------------------------------------------------+\n\nSELECT JSON_EQUALS(\'{\"a\":[1, 2, 3]}\', \'{\"a\":[1, 2, 3.01]}\');\n+------------------------------------------------------+\n| JSON_EQUALS(\'{\"a\":[1, 2, 3]}\', \'{\"a\":[1, 2, 3.01]}\') |\n+------------------------------------------------------+\n| 0 |\n+------------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/json_equals/','','https://mariadb.com/kb/en/json_equals/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (755,40,'JSON_EXISTS','Syntax\n------\n\nDescription\n-----------\n\nDetermines whether a specified JSON value exists in the given data. Returns 1\nif found, 0 if not, or NULL if any of the inputs were NULL.\n\nExamples\n--------\n\nSELECT JSON_EXISTS(\'{\"key1\":\"xxxx\", \"key2\":[1, 2, 3]}\', \"$.key2\");\n+------------------------------------------------------------+\n| JSON_EXISTS(\'{\"key1\":\"xxxx\", \"key2\":[1, 2, 3]}\', \"$.key2\") |\n+------------------------------------------------------------+\n| 1 |\n+------------------------------------------------------------+\n\nSELECT JSON_EXISTS(\'{\"key1\":\"xxxx\", \"key2\":[1, 2, 3]}\', \"$.key3\");\n+------------------------------------------------------------+\n| JSON_EXISTS(\'{\"key1\":\"xxxx\", \"key2\":[1, 2, 3]}\', \"$.key3\") |\n+------------------------------------------------------------+\n| 0 |\n+------------------------------------------------------------+\n\nSELECT JSON_EXISTS(\'{\"key1\":\"xxxx\", \"key2\":[1, 2, 3]}\', \"$.key2[1]\");\n+---------------------------------------------------------------+\n| JSON_EXISTS(\'{\"key1\":\"xxxx\", \"key2\":[1, 2, 3]}\', \"$.key2[1]\") |\n+---------------------------------------------------------------+\n| 1 |\n+---------------------------------------------------------------+\n\nSELECT JSON_EXISTS(\'{\"key1\":\"xxxx\", \"key2\":[1, 2, 3]}\', \"$.key2[10]\");\n+----------------------------------------------------------------+\n| JSON_EXISTS(\'{\"key1\":\"xxxx\", \"key2\":[1, 2, 3]}\', \"$.key2[10]\") |\n+----------------------------------------------------------------+\n| 0 |\n+----------------------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/json_exists/','','https://mariadb.com/kb/en/json_exists/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (756,40,'JSON_EXTRACT','Syntax\n------\n\nJSON_EXTRACT(json_doc, path[, path] ...)\n\nDescription\n-----------\n\nExtracts data from a JSON document. The extracted data is selected from the\nparts matching the path arguments. Returns all matched values; either as a\nsingle matched value, or, if the arguments could return multiple values, a\nresult autowrapped as an array in the matching order.\n\nReturns NULL if no paths match or if any of the arguments are NULL.\n\nAn error will occur if any path argument is not a valid path, or if the\njson_doc argument is not a valid JSON document.\n\nThe path expression be a JSONPath expression as supported by MariaDB\n\nExamples\n--------\n\nSET @json = \'[1, 2, [3, 4]]\';\n\nSELECT JSON_EXTRACT(@json, \'$[1]\');\n+-----------------------------+\n| JSON_EXTRACT(@json, \'$[1]\') |\n+-----------------------------+\n| 2 |\n+-----------------------------+\n\nSELECT JSON_EXTRACT(@json, \'$[2]\');\n+-----------------------------+\n| JSON_EXTRACT(@json, \'$[2]\') |\n+-----------------------------+\n| [3, 4] |\n+-----------------------------+\n\nSELECT JSON_EXTRACT(@json, \'$[2][1]\');\n+--------------------------------+\n| JSON_EXTRACT(@json, \'$[2][1]\') |\n+--------------------------------+\n| 4 |\n+--------------------------------+\n\nURL: https://mariadb.com/kb/en/json_extract/','','https://mariadb.com/kb/en/json_extract/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (757,40,'JSON_INSERT','Syntax\n------\n\nJSON_INSERT(json_doc, path, val[, path, val] ...)\n\nDescription\n-----------\n\nInserts data into a JSON document, returning the resulting document or NULL if\nany argument is null.\n\nAn error will occur if the JSON document is not invalid, or if any of the\npaths are invalid or contain a * or ** wildcard.\n\nJSON_INSERT can only insert data while JSON_REPLACE can only update. JSON_SET\ncan update or insert data.\n\nExamples\n--------\n\nSET @json = \'{ \"A\": 0, \"B\": [1, 2]}\';\n\nSELECT JSON_INSERT(@json, \'$.C\', \'[3, 4]\');\n+--------------------------------------+\n| JSON_INSERT(@json, \'$.C\', \'[3, 4]\') |\n+--------------------------------------+\n| { \"A\": 0, \"B\": [1, 2], \"C\":\"[3, 4]\"} |\n+--------------------------------------+\n\nURL: https://mariadb.com/kb/en/json_insert/','','https://mariadb.com/kb/en/json_insert/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (758,40,'JSON_KEYS','Syntax\n------\n\nJSON_KEYS(json_doc[, path])\n\nDescription\n-----------\n\nReturns the keys as a JSON array from the top-level value of a JSON object or,\nif the optional path argument is provided, the top-level keys from the path.\n\nExcludes keys from nested sub-objects in the top level value. The resulting\narray will be empty if the selected object is empty.\n\nReturns NULL if any of the arguments are null, a given path does not locate an\nobject, or if the json_doc argument is not an object.\n\nAn error will occur if JSON document is invalid, the path is invalid or if the\npath contains a * or ** wildcard.\n\nExamples\n--------\n\nSELECT JSON_KEYS(\'{\"A\": 1, \"B\": {\"C\": 2}}\');\n+--------------------------------------+\n| JSON_KEYS(\'{\"A\": 1, \"B\": {\"C\": 2}}\') |\n+--------------------------------------+\n| [\"A\", \"B\"] |\n+--------------------------------------+\n\nSELECT JSON_KEYS(\'{\"A\": 1, \"B\": 2, \"C\": {\"D\": 3}}\', \'$.C\');\n+-----------------------------------------------------+\n| JSON_KEYS(\'{\"A\": 1, \"B\": 2, \"C\": {\"D\": 3}}\', \'$.C\') |\n+-----------------------------------------------------+\n| [\"D\"] |\n+-----------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/json_keys/','','https://mariadb.com/kb/en/json_keys/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (759,40,'JSON_LENGTH','Syntax\n------\n\nJSON_LENGTH(json_doc[, path])\n\nDescription\n-----------\n\nReturns the length of a JSON document, or, if the optional path argument is\ngiven, the length of the value within the document specified by the path.\n\nReturns NULL if any of the arguments argument are null or the path argument\ndoes not identify a value in the document.\n\nAn error will occur if the JSON document is invalid, the path is invalid or if\nthe path contains a * or ** wildcard.\n\nLength will be determined as follow:\n\n* A scalar\'s length is always 1.\n* If an array, the number of elements in the array.\n* If an object, the number of members in the object.\n\nThe length of nested arrays or objects are not counted.\n\nExamples\n--------\n\nURL: https://mariadb.com/kb/en/json_length/','','https://mariadb.com/kb/en/json_length/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (760,40,'JSON_LOOSE','Syntax\n------\n\nJSON_LOOSE(json_doc)\n\nDescription\n-----------\n\nAdds spaces to a JSON document to make it look more readable.\n\nExample\n-------\n\nSET @j = \'{ \"A\":1,\"B\":[2,3]}\';\n\nSELECT JSON_LOOSE(@j), @j;\n+-----------------------+--------------------+\n| JSON_LOOSE(@j) | @j |\n+-----------------------+--------------------+\n| {\"A\": 1, \"B\": [2, 3]} | { \"A\":1,\"B\":[2,3]} |\n+-----------------------+--------------------+\n\nURL: https://mariadb.com/kb/en/json_loose/','','https://mariadb.com/kb/en/json_loose/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (761,40,'JSON_MERGE','Syntax\n------\n\nJSON_MERGE(json_doc, json_doc[, json_doc] ...)\n\nDescription\n-----------\n\nMerges the given JSON documents.\n\nReturns the merged result,or NULL if any argument is NULL.\n\nAn error occurs if any of the arguments are not valid JSON documents.\n\nJSON_MERGE has been deprecated since MariaDB 10.2.25, MariaDB 10.3.16 and\nMariaDB 10.4.5. JSON_MERGE_PATCH is an RFC 7396-compliant replacement, and\nJSON_MERGE_PRESERVE is a synonym.\n\nExample\n-------\n\nSET @json1 = \'[1, 2]\';\nSET @json2 = \'[3, 4]\';\n\nSELECT JSON_MERGE(@json1,@json2);\n+---------------------------+\n| JSON_MERGE(@json1,@json2) |\n+---------------------------+\n| [1, 2, 3, 4] |\n+---------------------------+\n\nURL: https://mariadb.com/kb/en/json_merge/','','https://mariadb.com/kb/en/json_merge/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (762,40,'JSON_MERGE_PATCH','MariaDB starting with 10.2.25\n-----------------------------\nJSON_MERGE_PATCH was introduced in MariaDB 10.2.25, MariaDB 10.3.16 and\nMariaDB 10.4.5.\n\nSyntax\n------\n\nJSON_MERGE_PATCH(json_doc, json_doc[, json_doc] ...)\n\nDescription\n-----------\n\nMerges the given JSON documents, returning the merged result, or NULL if any\nargument is NULL.\n\nJSON_MERGE_PATCH is an RFC 7396-compliant replacement for JSON_MERGE, which\nhas been deprecated.\n\nExample\n-------\n\nSET @json1 = \'[1, 2]\';\nSET @json2 = \'[2, 3]\';\nSELECT JSON_MERGE_PATCH(@json1,@json2),JSON_MERGE_PRESERVE(@json1,@json2);\n+---------------------------------+------------------------------------+\n| JSON_MERGE_PATCH(@json1,@json2) | JSON_MERGE_PRESERVE(@json1,@json2) |\n+---------------------------------+------------------------------------+\n| [2, 3] | [1, 2, 2, 3] |\n+---------------------------------+------------------------------------+\n\nURL: https://mariadb.com/kb/en/json_merge_patch/','','https://mariadb.com/kb/en/json_merge_patch/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (763,40,'JSON_MERGE_PRESERVE','MariaDB starting with 10.2.25\n-----------------------------\nJSON_MERGE_PRESERVE was introduced in MariaDB 10.2.25, MariaDB 10.3.16 and\nMariaDB 10.4.5.\n\nSyntax\n------\n\nJSON_MERGE_PRESERVE(json_doc, json_doc[, json_doc] ...)\n\nDescription\n-----------\n\nMerges the given JSON documents, returning the merged result, or NULL if any\nargument is NULL.\n\nJSON_MERGE_PRESERVE was introduced in MariaDB 10.2.25, MariaDB 10.3.16 and\nMariaDB 10.4.5 as a synonym for JSON_MERGE, which has been deprecated.\n\nExample\n-------\n\nSET @json1 = \'[1, 2]\';\nSET @json2 = \'[2, 3]\';\nSELECT JSON_MERGE_PATCH(@json1,@json2),JSON_MERGE_PRESERVE(@json1,@json2);\n+---------------------------------+------------------------------------+\n| JSON_MERGE_PATCH(@json1,@json2) | JSON_MERGE_PRESERVE(@json1,@json2) |\n+---------------------------------+------------------------------------+\n| [2, 3] | [1, 2, 2, 3] |\n+---------------------------------+------------------------------------+\n\nURL: https://mariadb.com/kb/en/json_merge_preserve/','','https://mariadb.com/kb/en/json_merge_preserve/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (764,40,'JSON_NORMALIZE','MariaDB starting with 10.7.0\n----------------------------\nJSON_NORMALIZE was added in MariaDB 10.7.0.\n\nSyntax\n------\n\nJSON_NORMALIZE(json)\n\nDescription\n-----------\n\nRecursively sorts keys and removes spaces, allowing comparison of json\ndocuments for equality.\n\nExamples\n--------\n\nWe may wish our application to use the database to enforce a unique constraint\non the JSON contents, and we can do so using the JSON_NORMALIZE function in\ncombination with a unique key.\n\nFor example, if we have a table with a JSON column:\n\nCREATE TABLE t1 (\n id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,\n val JSON,\n /* other columns here */\n PRIMARY KEY (id)\n);\n\nAdd a unique constraint using JSON_NORMALIZE like this:\n\nALTER TABLE t1\n ADD COLUMN jnorm JSON AS (JSON_NORMALIZE(val)) VIRTUAL,\n ADD UNIQUE KEY (jnorm);\n\nWe can test this by first inserting a row as normal:\n\nINSERT INTO t1 (val) VALUES (\'{\"name\":\"alice\",\"color\":\"blue\"}\');\n\nAnd then seeing what happens with a different string which would produce the\nsame JSON object:\n\nINSERT INTO t1 (val) VALUES (\'{ \"color\": \"blue\", \"name\": \"alice\" }\');\nERROR 1062 (23000): Duplicate entry \'{\"color\":\"blue\",\"name\":\"alice\"}\' for key\n\'jnorm\'\n\nURL: https://mariadb.com/kb/en/json_normalize/','','https://mariadb.com/kb/en/json_normalize/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (765,40,'JSON_OBJECT','Syntax\n------\n\nJSON_OBJECT([key, value[, key, value] ...])\n\nDescription\n-----------\n\nReturns a JSON object containing the given key/value pairs. The key/value list\ncan be empty.\n\nAn error will occur if there are an odd number of arguments, or any key name\nis NULL.\n\nExample\n-------\n\nSELECT JSON_OBJECT(\"id\", 1, \"name\", \"Monty\");\n+---------------------------------------+\n| JSON_OBJECT(\"id\", 1, \"name\", \"Monty\") |\n+---------------------------------------+\n| {\"id\": 1, \"name\": \"Monty\"} |\n+---------------------------------------+\n\nURL: https://mariadb.com/kb/en/json_object/','','https://mariadb.com/kb/en/json_object/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (766,40,'JSON_OVERLAPS','MariaDB starting with 10.9\n--------------------------\nJSON_OVERLAPS was added in MariaDB 10.9.\n\nSyntax\n------\n\nJSON_OVERLAPS(json_doc1, json_doc2)\n\nDescription\n-----------\n\nJSON_OVERLAPS() compares two json documents and returns true if they have at\nleast one common key-value pair between two objects, array element common\nbetween two arrays, or array element common with scalar if one of the\narguments is a scalar and other is an array. If two json documents are\nscalars, it returns true if they have same type and value.\n\nIf none of the above conditions are satisfied then it returns false.\n\nExamples\n--------\n\nSELECT JSON_OVERLAPS(\'false\', \'false\');\n+---------------------------------+\n| JSON_OVERLAPS(\'false\', \'false\') |\n+---------------------------------+\n| 1 |\n+---------------------------------+\n\nSELECT JSON_OVERLAPS(\'true\', \'[\"abc\", 1, 2, true, false]\');\n+----------------------------------------------------+\n| JSON_OVERLAPS(\'true\',\'[\"abc\", 1, 2, true, false]\') |\n+----------------------------------------------------+\n| 1 |\n+----------------------------------------------------+\n\nSELECT JSON_OVERLAPS(\'{\"A\": 1, \"B\": {\"C\":2}}\', \'{\"A\": 2, \"B\": {\"C\":2}}\') AS\nis_overlap;\n+---------------------+\n| is_overlap |\n+---------------------+\n| 1 |\n+---------------------+\n\nPartial match is considered as no-match.\n\nExamples\n--------\n\nSELECT JSON_OVERLAPS(\'[1, 2, true, false, null]\', \'[3, 4, [1]]\') AS is_overlap;\n+--------------------- +\n| is_overlap |\n+----------------------+\n| 0 |\n+----------------------+\n\nURL: https://mariadb.com/kb/en/json_overlaps/','','https://mariadb.com/kb/en/json_overlaps/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (767,40,'JSON_QUERY','Syntax\n------\n\nJSON_QUERY(json_doc, path)\n\nDescription\n-----------\n\nGiven a JSON document, returns an object or array specified by the path.\nReturns NULL if not given a valid JSON document, or if there is no match.\n\nExamples\n--------\n\nselect json_query(\'{\"key1\":{\"a\":1, \"b\":[1,2]}}\', \'$.key1\');\n+-----------------------------------------------------+\n| json_query(\'{\"key1\":{\"a\":1, \"b\":[1,2]}}\', \'$.key1\') |\n+-----------------------------------------------------+\n| {\"a\":1, \"b\":[1,2]} |\n+-----------------------------------------------------+\n\nselect json_query(\'{\"key1\":123, \"key1\": [1,2,3]}\', \'$.key1\');\n+-------------------------------------------------------+\n| json_query(\'{\"key1\":123, \"key1\": [1,2,3]}\', \'$.key1\') |\n+-------------------------------------------------------+\n| [1,2,3] |\n+-------------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/json_query/','','https://mariadb.com/kb/en/json_query/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (768,40,'JSON_QUOTE','Syntax\n------\n\nJSON_QUOTE(json_value)\n\nDescription\n-----------\n\nQuotes a string as a JSON value, usually for producing valid JSON string\nliterals for inclusion in JSON documents. Wraps the string with double quote\ncharacters and escapes interior quotes and other special characters, returning\na utf8mb4 string.\n\nReturns NULL if the argument is NULL.\n\nExamples\n--------\n\nSELECT JSON_QUOTE(\'A\'), JSON_QUOTE(\"B\"), JSON_QUOTE(\'\"C\"\');\n+-----------------+-----------------+-------------------+\n| JSON_QUOTE(\'A\') | JSON_QUOTE(\"B\") | JSON_QUOTE(\'\"C\"\') |\n+-----------------+-----------------+-------------------+\n| \"A\" | \"B\" | \"\\\"C\\\"\" |\n+-----------------+-----------------+-------------------+\n\nURL: https://mariadb.com/kb/en/json_quote/','','https://mariadb.com/kb/en/json_quote/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (769,40,'JSON_REMOVE','Syntax\n------\n\nJSON_REMOVE(json_doc, path[, path] ...)\n\nDescription\n-----------\n\nRemoves data from a JSON document returning the result, or NULL if any of the\narguments are null. If the element does not exist in the document, no changes\nare made.\n\nAn error will occur if JSON document is invalid, the path is invalid or if the\npath contains a * or ** wildcard.\n\nPath arguments are evaluated from left to right, with the result from the\nearlier evaluation being used as the value for the next.\n\nExamples\n--------\n\nSELECT JSON_REMOVE(\'{\"A\": 1, \"B\": 2, \"C\": {\"D\": 3}}\', \'$.C\');\n+-------------------------------------------------------+\n| JSON_REMOVE(\'{\"A\": 1, \"B\": 2, \"C\": {\"D\": 3}}\', \'$.C\') |\n+-------------------------------------------------------+\n| {\"A\": 1, \"B\": 2} |\n+-------------------------------------------------------+\n\nSELECT JSON_REMOVE(\'[\"A\", \"B\", [\"C\", \"D\"], \"E\"]\', \'$[1]\');\n+----------------------------------------------------+\n| JSON_REMOVE(\'[\"A\", \"B\", [\"C\", \"D\"], \"E\"]\', \'$[1]\') |\n+----------------------------------------------------+\n| [\"A\", [\"C\", \"D\"], \"E\"] |\n+----------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/json_remove/','','https://mariadb.com/kb/en/json_remove/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (770,40,'JSON_REPLACE','Syntax\n------\n\nJSON_REPLACE(json_doc, path, val[, path, val] ...)\n\nDescription\n-----------\n\nReplaces existing values in a JSON document, returning the result, or NULL if\nany of the arguments are NULL.\n\nAn error will occur if the JSON document is invalid, the path is invalid or if\nthe path contains a * or ** wildcard.\n\nPaths and values are evaluated from left to right, with the result from the\nearlier evaluation being used as the value for the next.\n\nJSON_REPLACE can only update data, while JSON_INSERT can only insert. JSON_SET\ncan update or insert data.\n\nExamples\n--------\n\nSELECT JSON_REPLACE(\'{ \"A\": 1, \"B\": [2, 3]}\', \'$.B[1]\', 4);\n+-----------------------------------------------------+\n| JSON_REPLACE(\'{ \"A\": 1, \"B\": [2, 3]}\', \'$.B[1]\', 4) |\n+-----------------------------------------------------+\n| { \"A\": 1, \"B\": [2, 4]} |\n+-----------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/json_replace/','','https://mariadb.com/kb/en/json_replace/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (771,40,'JSON_SEARCH','Syntax\n------\n\nJSON_SEARCH(json_doc, return_arg, search_str[, escape_char[, path] ...])\n\nDescription\n-----------\n\nReturns the path to the given string within a JSON document, or NULL if any of\njson_doc, search_str or a path argument is NULL; if the search string is not\nfound, or if no path exists within the document.\n\nA warning will occur if the JSON document is not valid, any of the path\narguments are not valid, if return_arg is neither one nor all, or if the\nescape character is not a constant. NULL will be returned.\n\nreturn_arg can be one of two values:\n\n* \'one: Terminates after finding the first match, so will return one path\nstring. If there is more than one match, it is undefined which is considered\nfirst.\n* all: Returns all matching path strings, without duplicates. Multiple strings\nare autowrapped as an array. The order is undefined.\n\nExamples\n--------\n\nSET @json = \'[\"A\", [{\"B\": \"1\"}], {\"C\":\"AB\"}, {\"D\":\"BC\"}]\';\n\nSELECT JSON_SEARCH(@json, \'one\', \'AB\');\n+---------------------------------+\n| JSON_SEARCH(@json, \'one\', \'AB\') |\n+---------------------------------+\n| \"$[2].C\" |\n+---------------------------------+\n\nURL: https://mariadb.com/kb/en/json_search/','','https://mariadb.com/kb/en/json_search/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (772,40,'JSON_SET','Syntax\n------\n\nJSON_SET(json_doc, path, val[, path, val] ...)\n\nDescription\n-----------\n\nUpdates or inserts data into a JSON document, returning the result, or NULL if\nany of the arguments are NULL or the optional path fails to find an object.\n\nAn error will occur if the JSON document is invalid, the path is invalid or if\nthe path contains a * or wildcard.\n\nJSON_SET can update or insert data, while JSON_REPLACE can only update, and\nJSON_INSERT only insert.\n\nExamples\n--------\n\nSELECT JSON_SET(Priv, \'$.locked\', \'true\') FROM mysql.global_priv\n\nURL: https://mariadb.com/kb/en/json_set/','','https://mariadb.com/kb/en/json_set/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (773,40,'JSON_TABLE','MariaDB starting with 10.6.0\n----------------------------\nJSON_TABLE was added in MariaDB 10.6.0.\n\nJSON_TABLE is a table function that converts JSON data into a relational form.\n\nSyntax\n------\n\nJSON_TABLE(json_doc, \n context_path COLUMNS (column_list)\n) [AS] alias\n\ncolumn_list:\n column[, column][, ...]\n\ncolumn:\n name FOR ORDINALITY\n | name type PATH path_str [on_empty] [on_error]\n | name type EXISTS PATH path_str\n | NESTED PATH path_str COLUMNS (column_list)\n\non_empty:\n {NULL | DEFAULT string | ERROR} ON EMPTY\n\non_error:\n {NULL | DEFAULT string | ERROR} ON ERROR\n\nDescription\n-----------\n\nJSON_TABLE can be used in contexts where a table reference can be used; in the\nFROM clause of a SELECT statement, and in multi-table UPDATE/DELETE statements.\n\njson_doc is the JSON document to extract data from. In the simplest case, it\nis a string literal containing JSON. In more complex cases it can be an\narbitrary expression returning JSON. The expression may have references to\ncolumns of other tables. However, one can only refer to tables that precede\nthis JSON_TABLE invocation. For RIGHT JOIN, it is assumed that its outer side\nprecedes the inner. All tables in outer selects are also considered preceding.\n\ncontext_path is a JSON Path expression pointing to a collection of nodes in\njson_doc that will be used as the source of rows.\n\nThe COLUMNS clause declares the names and types of the columns that JSON_TABLE\nreturns, as well as how the values of the columns are produced.\n\nColumn Definitions\n------------------\n\nThe following types of columns are supported:\n\nPath Columns\n------------\n\nname type PATH path_str [on_empty] [on_error]\n\nLocates the JSON node pointed to by path_str and returns its value. The\npath_str is evaluated using the current row source node as the context node.\n\nset @json=\'\n[\n {\"name\":\"Laptop\", \"color\":\"black\", \"price\":\"1000\"},\n {\"name\":\"Jeans\", \"color\":\"blue\"}\n]\';\n\nselect * from json_table(@json, \'$[*]\' \n columns(\n name varchar(10) path \'$.name\',\n color varchar(10) path \'$.color\',\n price decimal(8,2) path \'$.price\' )\n) as jt;\n+--------+-------+---------+\n| name | color | price |\n+--------+-------+---------+\n| Laptop | black | 1000.00 |\n| Jeans | blue | NULL |\n+--------+-------+---------+\n\nThe on_empty and on_error clauses specify the actions to be performed when the\nvalue was not found or there was an error condition. See the ON EMPTY and ON\nERROR clauses section for details.\n\nORDINALITY Columns\n------------------\n\nname FOR ORDINALITY\n\nCounts the rows, starting from 1.\n\nExample:\n\nset @json=\'\n[\n {\"name\":\"Laptop\", \"color\":\"black\"},\n {\"name\":\"Jeans\", \"color\":\"blue\"}\n]\';\n\nselect * from json_table(@json, \'$[*]\' \n columns(\n id for ordinality,\n name varchar(10) path \'$.name\')\n) as jt;\n+------+--------+\n| id | name |\n+------+--------+\n| 1 | Laptop |\n| 2 | Jeans |\n+------+--------+\n\nEXISTS PATH Columns\n-------------------\n\nname type EXISTS PATH path_str\n\nChecks whether the node pointed to by value_path exists. The value_path is\nevaluated using the current row source node as the context node.\n\nset @json=\'\n[\n {\"name\":\"Laptop\", \"color\":\"black\", \"price\":1000},\n {\"name\":\"Jeans\", \"color\":\"blue\"}\n]\';\n\nselect * from json_table(@json, \'$[*]\' \n columns(\n name varchar(10) path \'$.name\',\n has_price integer exists path \'$.price\')\n) as jt;\n+--------+-----------+\n| name | has_price |\n+--------+-----------+\n| Laptop | 1 |\n| Jeans | 0 |\n+--------+-----------+\n\nNESTED PATHs\n------------\n\nNESTED PATH converts nested JSON structures into multiple rows.\n\nNESTED PATH path COLUMNS (column_list)\n\nIt finds the sequence of JSON nodes pointed to by path and uses it to produce\nrows. For each found node, a row is generated with column values as specified\nby the NESTED PATH\'s COLUMNS clause. If path finds no nodes, only one row is\ngenerated with all columns having NULL values.\n\nFor example, consider a JSON document that contains an array of items, and\neach item, in turn, is expected to have an array of its available sizes:\n\nset @json=\'\n[\n {\"name\":\"Jeans\", \"sizes\": [32, 34, 36]},\n {\"name\":\"T-Shirt\", \"sizes\":[\"Medium\", \"Large\"]},\n {\"name\":\"Cellphone\"}\n]\';\n\nNESTED PATH allows one to produce a separate row for each size each item has:\n\nselect * from json_table(@json, \'$[*]\' \n columns(\n name varchar(10) path \'$.name\',\n nested path \'$.sizes[*]\' columns (\n size varchar(32) path \'$\'\n )\n )\n) as jt;\n+-----------+--------+\n| name | size |\n+-----------+--------+\n| Jeans | 32 |\n| Jeans | 34 |\n| Jeans | 36 |\n| T-Shirt | Medium |\n| T-Shirt | Large |\n| Cellphone | NULL |\n+-----------+--------+\n\nNESTED PATH clauses can be nested within one another. They can also be located\nnext to each other. In that case, the nested path clauses will produce records\none at a time. The ones that are not producing records will have all columns\nset to NULL.\n\nExample:\n\nset @json=\'\n[\n {\"name\":\"Jeans\", \"sizes\": [32, 34, 36], \"colors\":[\"black\", \"blue\"]}\n]\';\n\nselect * from json_table(@json, \'$[*]\' \n columns(\n name varchar(10) path \'$.name\',\n nested path \'$.sizes[*]\' columns (\n size varchar(32) path \'$\'\n ),\n nested path \'$.colors[*]\' columns (\n color varchar(32) path \'$\'\n )\n )\n) as jt;\n\n+-------+------+-------+\n| name | size | color |\n+-------+------+-------+\n| Jeans | 32 | NULL |\n| Jeans | 34 | NULL |\n| Jeans | 36 | NULL |\n| Jeans | NULL | black |\n| Jeans | NULL | blue |\n+-------+------+-------+\n\nON EMPTY and ON ERROR Clauses\n-----------------------------\n\nThe ON EMPTY clause specifies what will be done when the element specified by\nthe search path is missing in the JSON document.\n\non_empty:\n {NULL | DEFAULT string | ERROR} ON EMPTY\n\nWhen ON EMPTY clause is not present, NULL ON EMPTY is implied.\n\non_error:\n {NULL | DEFAULT string | ERROR} ON ERROR\n\nThe ON ERROR clause specifies what should be done if a JSON structure error\noccurs when trying to extract the value pointed to by the path expression. A\nJSON structure error here occurs only when one attempts to convert a JSON\nnon-scalar (array or object) into a scalar value. When the ON ERROR clause is\nnot present, NULL ON ERROR is implied.\n\nNote: A datatype conversion error (e.g. attempt to store a non-integer value\ninto an integer field, or a varchar column being truncated) is not considered\na JSON error and so will not trigger the ON ERROR behavior. It will produce\nwarnings, in the same way as CAST(value AS datatype) would.\n\nReplication\n-----------\n\nIn the current code, evaluation of JSON_TABLE is deterministic, that is, for a\ngiven input string JSON_TABLE will always produce the same set of rows in the\nsame order. However, one can think of JSON documents that one can consider\nidentical which will produce different output. In order to be future-proof and\nwithstand changes like:\n\n* sorting JSON object members by name (like MySQL does)\n* changing the way duplicate object members are handled\nthe function is marked as unsafe for statement-based replication.\n\nExtracting a Subdocument into a Column\n--------------------------------------\n\nMariaDB starting with 10.6.9\n----------------------------\nPrior to MariaDB 10.6.9, JSON_TABLE did not allow one to extract a JSON\n\"subdocument\" into a JSON column.\n\nSELECT * FROM JSON_TABLE(\'{\"foo\": [1,2,3,4]}\',\'$\' columns( jscol json path\n\'$.foo\') ) AS T;\n+-------+\n| jscol |\n+-------+\n| NULL |\n+-------+\n\nThis is supported from MariaDB 10.6.9:\n\nSELECT * FROM JSON_TABLE(\'{\"foo\": [1,2,3,4]}\',\'$\' columns( jscol json path\n\'$.foo\') ) AS T;\n+-----------+\n| jscol |\n+-----------+\n| [1,2,3,4] |\n+-----------+\n\nURL: https://mariadb.com/kb/en/json_table/','','https://mariadb.com/kb/en/json_table/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (774,40,'JSON_TYPE','Syntax\n------\n\nJSON_TYPE(json_val)\n\nDescription\n-----------\n\nReturns the type of a JSON value (as a string), or NULL if the argument is\nnull.\n\nAn error will occur if the argument is an invalid JSON value.\n\nThe following is a complete list of the possible return types:\n\n+-----------------------------------+-----------------+-----------------------+\n| Return type | Value | Example |\n+-----------------------------------+-----------------+-----------------------+\n| ARRAY | JSON array | [1, 2, {\"key\": |\n| | | \"value\"}] |\n+-----------------------------------+-----------------+-----------------------+\n| OBJECT | JSON object | {\"key\":\"value\"} |\n+-----------------------------------+-----------------+-----------------------+\n| BOOLEAN | JSON | true, false |\n| | true/false | |\n| | literals | |\n+-----------------------------------+-----------------+-----------------------+\n| DOUBLE | A number with | 1.2 |\n| | at least one | |\n| | floating point | |\n| | decimal. | |\n+-----------------------------------+-----------------+-----------------------+\n| INTEGER | A number | 1 |\n| | without a | |\n| | floating point | |\n| | decimal. | |\n+-----------------------------------+-----------------+-----------------------+\n| NULL | JSON null | null |\n| | literal (this | |\n| | is returned as | |\n| | a string, not | |\n| | to be confused | |\n| | with the SQL | |\n| | NULL value!) | |\n+-----------------------------------+-----------------+-----------------------+\n| STRING | JSON String | \"a sample string\" |\n+-----------------------------------+-----------------+-----------------------+\n\nExamples\n--------\n\nSELECT JSON_TYPE(\'{\"A\": 1, \"B\": 2, \"C\": 3}\');\n+---------------------------------------+\n| JSON_TYPE(\'{\"A\": 1, \"B\": 2, \"C\": 3}\') |\n+---------------------------------------+\n| OBJECT |\n+---------------------------------------+\n\nURL: https://mariadb.com/kb/en/json_type/','','https://mariadb.com/kb/en/json_type/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (775,40,'JSON_UNQUOTE','Syntax\n------\n\nJSON_UNQUOTE(val)\n\nDescription\n-----------\n\nUnquotes a JSON value, returning a string, or NULL if the argument is null.\n\nAn error will occur if the given value begins and ends with double quotes and\nis an invalid JSON string literal.\n\nIf the given value is not a JSON string, value is passed through unmodified.\n\nCertain character sequences have special meanings within a string. Usually, a\nbackslash is ignored, but the escape sequences in the table below are\nrecognised by MariaDB, unless the SQL Mode is set to NO_BACKSLASH_ESCAPES SQL.\n\n+-----------------------------------------------+-----------------------------+\n| Escape sequence | Character |\n+-----------------------------------------------+-----------------------------+\n| \\\" | Double quote (\") |\n+-----------------------------------------------+-----------------------------+\n| \\b | Backslash |\n+-----------------------------------------------+-----------------------------+\n| \\f | Formfeed |\n+-----------------------------------------------+-----------------------------+\n| \\n | Newline (linefeed) |\n+-----------------------------------------------+-----------------------------+\n| \\r | Carriage return |\n+-----------------------------------------------+-----------------------------+\n| \\t | Tab |\n+-----------------------------------------------+-----------------------------+\n| \\\\ | Backslash (\\) |\n+-----------------------------------------------+-----------------------------+\n| \\uXXXX | UTF-8 bytes for Unicode |\n| | value XXXX |\n+-----------------------------------------------+-----------------------------+\n\nExamples\n--------\n\nSELECT JSON_UNQUOTE(\'\"Monty\"\');\n+-------------------------+\n| JSON_UNQUOTE(\'\"Monty\"\') |\n+-------------------------+\n| Monty |\n+-------------------------+\n\nWith the default SQL Mode:\n\nSELECT JSON_UNQUOTE(\'Si\\bng\\ting\');\n+-----------------------------+\n| JSON_UNQUOTE(\'Si\\bng\\ting\') |\n+-----------------------------+\n| Sng ing |\n+-----------------------------+\n\nSetting NO_BACKSLASH_ESCAPES:\n\nSET @@sql_mode = \'NO_BACKSLASH_ESCAPES\';\n\nSELECT JSON_UNQUOTE(\'Si\\bng\\ting\');\n+-----------------------------+\n| JSON_UNQUOTE(\'Si\\bng\\ting\') |\n+-----------------------------+\n| Si\\bng\\ting |\n+-----------------------------+\n\nURL: https://mariadb.com/kb/en/json_unquote/','','https://mariadb.com/kb/en/json_unquote/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (776,40,'JSON_VALID','Syntax\n------\n\nJSON_VALID(value)\n\nDescription\n-----------\n\nIndicates whether the given value is a valid JSON document or not. Returns 1\nif valid, 0 if not, and NULL if the argument is NULL.\n\nFrom MariaDB 10.4.3, the JSON_VALID function is automatically used as a CHECK\nconstraint for the JSON data type alias in order to ensure that a valid json\ndocument is inserted.\n\nExamples\n--------\n\nSELECT JSON_VALID(\'{\"id\": 1, \"name\": \"Monty\"}\');\n+------------------------------------------+\n| JSON_VALID(\'{\"id\": 1, \"name\": \"Monty\"}\') |\n+------------------------------------------+\n| 1 |\n+------------------------------------------+\n\nSELECT JSON_VALID(\'{\"id\": 1, \"name\": \"Monty\", \"oddfield\"}\');\n+------------------------------------------------------+\n| JSON_VALID(\'{\"id\": 1, \"name\": \"Monty\", \"oddfield\"}\') |\n+------------------------------------------------------+\n| 0 |\n+------------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/json_valid/','','https://mariadb.com/kb/en/json_valid/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (777,40,'JSON_VALUE','Syntax\n------\n\nJSON_VALUE(json_doc, path)\n\nDescription\n-----------\n\nGiven a JSON document, returns the scalar specified by the path. Returns NULL\nif not given a valid JSON document, or if there is no match.\n\nExamples\n--------\n\nselect json_value(\'{\"key1\":123}\', \'$.key1\');\n+--------------------------------------+\n| json_value(\'{\"key1\":123}\', \'$.key1\') |\n+--------------------------------------+\n| 123 |\n+--------------------------------------+\n\nselect json_value(\'{\"key1\": [1,2,3], \"key1\":123}\', \'$.key1\');\n+-------------------------------------------------------+\n| json_value(\'{\"key1\": [1,2,3], \"key1\":123}\', \'$.key1\') |\n+-------------------------------------------------------+\n| 123 |\n+-------------------------------------------------------+\n\nIn the SET statement below, two escape characters are needed, as a single\nescape character would be applied by the SQL parser in the SET statement, and\nthe escaped character would not form part of the saved value.\n\nSET @json = \'{\"key1\":\"60\\\\\" Table\", \"key2\":\"1\"}\';\n\nSELECT JSON_VALUE(@json,\'$.key1\') AS Name , json_value(@json,\'$.key2\') as ID;\n+-----------+------+\n| Name | ID |\n+-----------+------+\n| 60\" Table | 1 |\n+-----------+------+\n\nURL: https://mariadb.com/kb/en/json_value/','','https://mariadb.com/kb/en/json_value/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (778,41,'Window Functions Overview','Introduction\n------------\n\nWindow functions allow calculations to be performed across a set of rows\nrelated to the current row.\n\nSyntax\n------\n\nfunction (expression) OVER (\n [ PARTITION BY expression_list ]\n [ ORDER BY order_list [ frame_clause ] ] )\n\nfunction:\n A valid window function\n\nexpression_list:\n expression | column_name [, expr_list ]\n\norder_list:\n expression | column_name [ ASC | DESC ]\n [, ... ]\n\nframe_clause:\n {ROWS | RANGE} {frame_border | BETWEEN frame_border AND frame_border}\n\nframe_border:\n | UNBOUNDED PRECEDING\n | UNBOUNDED FOLLOWING\n | CURRENT ROW\n | expr PRECEDING\n | expr FOLLOWING\n\nDescription\n-----------\n\nIn some ways, window functions are similar to aggregate functions in that they\nperform calculations across a set of rows. However, unlike aggregate\nfunctions, the output is not grouped into a single row.\n\nNon-aggregate window functions include\n\n* CUME_DIST\n* DENSE_RANK\n* FIRST_VALUE\n* LAG\n* LAST_VALUE\n* LEAD\n* MEDIAN\n* NTH_VALUE\n* NTILE\n* PERCENT_RANK\n* PERCENTILE_CONT\n* PERCENTILE_DISC\n* RANK, ROW_NUMBER\n\nAggregate functions that can also be used as window functions include\n\n* AVG\n* BIT_AND\n* BIT_OR\n* BIT_XOR\n* COUNT\n* MAX\n* MIN\n* STD\n* STDDEV\n* STDDEV_POP\n* STDDEV_SAMP\n* SUM\n* VAR_POP\n* VAR_SAMP\n* VARIANCE\n\nWindow function queries are characterised by the OVER keyword, following which\nthe set of rows used for the calculation is specified. By default, the set of\nrows used for the calculation (the \"window) is the entire dataset, which can\nbe ordered with the ORDER BY clause. The PARTITION BY clause is used to reduce\nthe window to a particular group within the dataset.\n\nFor example, given the following data:\n\nCREATE TABLE student (name CHAR(10), test CHAR(10), score TINYINT);\n\nINSERT INTO student VALUES \n (\'Chun\', \'SQL\', 75), (\'Chun\', \'Tuning\', 73),\n (\'Esben\', \'SQL\', 43), (\'Esben\', \'Tuning\', 31),\n (\'Kaolin\', \'SQL\', 56), (\'Kaolin\', \'Tuning\', 88),\n (\'Tatiana\', \'SQL\', 87), (\'Tatiana\', \'Tuning\', 83);\n\nthe following two queries return the average partitioned by test and by name\nrespectively:\n\nSELECT name, test, score, AVG(score) OVER (PARTITION BY test) \n AS average_by_test FROM student;\n+---------+--------+-------+-----------------+\n| name | test | score | average_by_test |\n+---------+--------+-------+-----------------+\n| Chun | SQL | 75 | 65.2500 |\n| Chun | Tuning | 73 | 68.7500 |\n| Esben | SQL | 43 | 65.2500 |\n| Esben | Tuning | 31 | 68.7500 |\n| Kaolin | SQL | 56 | 65.2500 |\n| Kaolin | Tuning | 88 | 68.7500 |\n| Tatiana | SQL | 87 | 65.2500 |\n| Tatiana | Tuning | 83 | 68.7500 |\n+---------+--------+-------+-----------------+\n\nSELECT name, test, score, AVG(score) OVER (PARTITION BY name) \n AS average_by_name FROM student;\n+---------+--------+-------+-----------------+\n| name | test | score | average_by_name |\n+---------+--------+-------+-----------------+\n| Chun | SQL | 75 | 74.0000 |\n| Chun | Tuning | 73 | 74.0000 |\n| Esben | SQL | 43 | 37.0000 |\n| Esben | Tuning | 31 | 37.0000 |\n| Kaolin | SQL | 56 | 72.0000 |\n| Kaolin | Tuning | 88 | 72.0000 |\n| Tatiana | SQL | 87 | 85.0000 |\n| Tatiana | Tuning | 83 | 85.0000 |\n+---------+--------+-------+-----------------+\n\nIt is also possible to specify which rows to include for the window function\n(for example, the current row and all preceding rows). See Window Frames for\nmore details.\n\nScope\n-----\n\nWindow functions were introduced in SQL:2003, and their definition was\nexpanded in subsequent versions of the standard. The last expansion was in the\nlatest version of the standard, SQL:2011.\n\nMost database products support a subset of the standard, they implement some\nfunctions defined as late as in SQL:2011, and at the same time leave some\nparts of SQL:2008 unimplemented.\n\nMariaDB:\n\n* Supports ROWS and RANGE-type frames\nAll kinds of frame bounds are supported, including RANGE PRECEDING|FOLLOWING n\nframe bounds (unlike PostgreSQL or MS SQL Server)\nDoes not yet support DATE[TIME] datatype and arithmetic for RANGE-type frames\n(MDEV-9727)\n\n* Does not support GROUPS-type frames (it seems that no popular database\nsupports it, either)\n\n* Does not support frame exclusion (no other database seems to support it,\neither) (MDEV-9724)\n* Does not support explicit NULLS FIRST or NULLS LAST.\n* Does not support nested navigation in window functions (this is\nVALUE_OF(expr AT row_marker [, default_value) syntax)\n\n* The following window functions are supported:\n\"Streamable\" window functions: ROW_NUMBER, RANK, DENSE_RANK, \nWindow functions that can be streamed once the number of rows in partition is\nknown: PERCENT_RANK, CUME_DIST, NTILE\n\n* Aggregate functions that are currently supported as window functions are:\nCOUNT, SUM, AVG, BIT_OR, BIT_AND, BIT_XOR.\n* Aggregate functions with the DISTINCT specifier (e.g. COUNT( DISTINCT x))\nare not supported as window functions.\n\nLinks\n-----\n\n* MDEV-6115 is the main jira task for window functions development. Other\ntasks are are attached as sub-tasks\n* bb-10.2-mdev9543 is the feature tree for window functions. Development is\nongoing, and this tree has the newest changes.\n* Testcases are in mysql-test/t/win*.test\n\nExamples\n--------\n\nGiven the following sample data:\n\nCREATE TABLE users (\n email VARCHAR(30),\n first_name VARCHAR(30),\n last_name VARCHAR(30),\n account_type VARCHAR(30)\n);\n\nINSERT INTO users VALUES \n (\'admin@boss.org\', \'Admin\', \'Boss\', \'admin\'),\n (\'bob.carlsen@foo.bar\', \'Bob\', \'Carlsen\', \'regular\'),\n (\'eddie.stevens@data.org\', \'Eddie\', \'Stevens\', \'regular\'),\n (\'john.smith@xyz.org\', \'John\', \'Smith\', \'regular\'),\n (\'root@boss.org\', \'Root\', \'Chief\', \'admin\')\n\nFirst, let\'s order the records by email alphabetically, giving each an\nascending rnum value starting with 1. This will make use of the ROW_NUMBER\nwindow function:\n\nSELECT row_number() OVER (ORDER BY email) AS rnum,\n email, first_name, last_name, account_type\nFROM users ORDER BY email;\n+------+------------------------+------------+-----------+--------------+\n| rnum | email | first_name | last_name | account_type |\n+------+------------------------+------------+-----------+--------------+\n| 1 | admin@boss.org | Admin | Boss | admin |\n| 2 | bob.carlsen@foo.bar | Bob | Carlsen | regular |\n| 3 | eddie.stevens@data.org | Eddie | Stevens | regular |\n| 4 | john.smith@xyz.org | John | Smith | regular |\n| 5 | root@boss.org | Root | Chief | admin |\n+------+------------------------+------------+-----------+--------------\n\nWe can generate separate sequences based on account type, using the PARTITION\nBY clause:\n\nSELECT row_number() OVER (PARTITION BY account_type ORDER BY email) AS rnum, \n email, first_name, last_name, account_type\nFROM users ORDER BY account_type,email;\n+------+------------------------+------------+-----------+--------------+\n| rnum | email | first_name | last_name | account_type |\n+------+------------------------+------------+-----------+--------------+\n| 1 | admin@boss.org | Admin | Boss | admin |\n| 2 | root@boss.org | Root | Chief | admin |\n| 1 | bob.carlsen@foo.bar | Bob | Carlsen | regular |\n| 2 | eddie.stevens@data.org | Eddie | Stevens | regular |\n| 3 | john.smith@xyz.org | John | Smith | regular |\n+------+------------------------+------------+-----------+--------------+\n\nGiven the following structure and data, we want to find the top 5 salaries\nfrom each department.\n\nCREATE TABLE employee_salaries (dept VARCHAR(20), name VARCHAR(20), salary\nINT(11));\n\nINSERT INTO employee_salaries VALUES\n(\'Engineering\', \'Dharma\', 3500),\n(\'Engineering\', \'Binh\', 3000),\n(\'Engineering\', \'Adalynn\', 2800),\n(\'Engineering\', \'Samuel\', 2500),\n(\'Engineering\', \'Cveta\', 2200),\n(\'Engineering\', \'Ebele\', 1800),\n(\'Sales\', \'Carbry\', 500),\n(\'Sales\', \'Clytemnestra\', 400),\n(\'Sales\', \'Juraj\', 300),\n(\'Sales\', \'Kalpana\', 300),\n(\'Sales\', \'Svantepolk\', 250),\n(\'Sales\', \'Angelo\', 200);\n\nWe could do this without using window functions, as follows:\n\nselect dept, name, salary\nfrom employee_salaries as t1\nwhere (select count(t2.salary)\n from employee_salaries as t2\n where t1.name != t2.name and\n t1.dept = t2.dept and\n t2.salary > t1.salary) < 5\norder by dept, salary desc;\n\n+-------------+--------------+--------+\n| dept | name | salary |\n+-------------+--------------+--------+\n| Engineering | Dharma | 3500 |\n| Engineering | Binh | 3000 |\n| Engineering | Adalynn | 2800 |\n| Engineering | Samuel | 2500 |\n| Engineering | Cveta | 2200 |\n| Sales | Carbry | 500 |\n| Sales | Clytemnestra | 400 |\n| Sales | Juraj | 300 |\n| Sales | Kalpana | 300 |\n| Sales | Svantepolk | 250 |\n+-------------+--------------+--------+\n\nThis has a number of disadvantages:\n\n* if there is no index, the query could take a long time if the\nemployee_salary_table is large\n* Adding and maintaining indexes adds overhead, and even with indexes on dept\nand salary, each subquery execution adds overhead by performing a lookup\nthrough the index.\n\nLet\'s try achieve the same with window functions. First, generate a rank for\nall employees, using the RANK function.\n\nselect rank() over (partition by dept order by salary desc) as ranking,\n dept, name, salary\n from employee_salaries\n order by dept, ranking;\n+---------+-------------+--------------+--------+\n| ranking | dept | name | salary |\n+---------+-------------+--------------+--------+\n| 1 | Engineering | Dharma | 3500 |\n| 2 | Engineering | Binh | 3000 |\n| 3 | Engineering | Adalynn | 2800 |\n| 4 | Engineering | Samuel | 2500 |\n| 5 | Engineering | Cveta | 2200 |\n| 6 | Engineering | Ebele | 1800 |\n| 1 | Sales | Carbry | 500 |\n| 2 | Sales | Clytemnestra | 400 |\n| 3 | Sales | Juraj | 300 |\n| 3 | Sales | Kalpana | 300 |\n| 5 | Sales | Svantepolk | 250 |\n| 6 | Sales | Angelo | 200 |\n+---------+-------------+--------------+--------+\n\nEach department has a separate sequence of ranks due to the PARTITION BY\nclause. This particular sequence of values for rank() is given by the ORDER BY\nclause inside the window function’s OVER clause. Finally, to get our results\nin a readable format we order the data by dept and the newly generated ranking\ncolumn.\n\nNow, we need to reduce the results to find only the top 5 per department. Here\nis a common mistake:\n\nselect\nrank() over (partition by dept order by salary desc) as ranking,\ndept, name, salary\nfrom employee_salaries\nwhere ranking <= 5\norder by dept, ranking;\n\nERROR 1054 (42S22): Unknown column \'ranking\' in \'where clause\'\n\nTrying to filter only the first 5 values per department by putting a where\nclause in the statement does not work, due to the way window functions are\ncomputed. The computation of window functions happens after all WHERE, GROUP\nBY and HAVING clauses have been completed, right before ORDER BY, so the WHERE\nclause has no idea that the ranking column exists. It is only present after we\nhave filtered and grouped all the rows.\n\nTo counteract this problem, we need to wrap our query into a derived table. We\ncan then attach a where clause to it:\n\nselect *from (select rank() over (partition by dept order by salary desc) as\nranking,\n dept, name, salary\nfrom employee_salaries) as salary_ranks\nwhere (salary_ranks.ranking <= 5)\n order by dept, ranking;\n+---------+-------------+--------------+--------+\n| ranking | dept | name | salary |\n+---------+-------------+--------------+--------+\n| 1 | Engineering | Dharma | 3500 |\n| 2 | Engineering | Binh | 3000 |\n| 3 | Engineering | Adalynn | 2800 |\n| 4 | Engineering | Samuel | 2500 |\n| 5 | Engineering | Cveta | 2200 |\n| 1 | Sales | Carbry | 500 |\n| 2 | Sales | Clytemnestra | 400 |\n| 3 | Sales | Juraj | 300 |\n| 3 | Sales | Kalpana | 300 |\n| 5 | Sales | Svantepolk | 250 |\n+---------+-------------+--------------+--------+\n\nURL: https://mariadb.com/kb/en/window-functions-overview/','','https://mariadb.com/kb/en/window-functions-overview/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (779,41,'CUME_DIST','Syntax\n------\n\nCUME_DIST() OVER ( \n [ PARTITION BY partition_expression ]\n [ ORDER BY order_list ]\n)\n\nDescription\n-----------\n\nCUME_DIST() is a window function that returns the cumulative distribution of a\ngiven row. The following formula is used to calculate the value:\n\n(number of rows <= current row) / (total rows)\n\nExamples\n--------\n\ncreate table t1 (\n pk int primary key,\n a int,\n b int\n);\n\ninsert into t1 values\n( 1 , 0, 10),\n( 2 , 0, 10),\n( 3 , 1, 10),\n( 4 , 1, 10),\n( 8 , 2, 10),\n( 5 , 2, 20),\n( 6 , 2, 20),\n( 7 , 2, 20),\n( 9 , 4, 20),\n(10 , 4, 20);\n\nselect pk, a, b,\n rank() over (order by a) as rank,\n percent_rank() over (order by a) as pct_rank,\n cume_dist() over (order by a) as cume_dist\nfrom t1;\n+----+------+------+------+--------------+--------------+\n| pk | a | b | rank | pct_rank | cume_dist |\n+----+------+------+------+--------------+--------------+\n| 1 | 0 | 10 | 1 | 0.0000000000 | 0.2000000000 |\n| 2 | 0 | 10 | 1 | 0.0000000000 | 0.2000000000 |\n| 3 | 1 | 10 | 3 | 0.2222222222 | 0.4000000000 |\n| 4 | 1 | 10 | 3 | 0.2222222222 | 0.4000000000 |\n| 5 | 2 | 20 | 5 | 0.4444444444 | 0.8000000000 |\n| 6 | 2 | 20 | 5 | 0.4444444444 | 0.8000000000 |\n| 7 | 2 | 20 | 5 | 0.4444444444 | 0.8000000000 |\n| 8 | 2 | 10 | 5 | 0.4444444444 | 0.8000000000 |\n| 9 | 4 | 20 | 9 | 0.8888888889 | 1.0000000000 |\n| 10 | 4 | 20 | 9 | 0.8888888889 | 1.0000000000 |\n+----+------+------+------+--------------+--------------+\n\nselect pk, a, b,\n percent_rank() over (order by pk) as pct_rank,\n cume_dist() over (order by pk) as cume_dist\nfrom t1 order by pk;\n+----+------+------+--------------+--------------+\n| pk | a | b | pct_rank | cume_dist |\n+----+------+------+--------------+--------------+\n| 1 | 0 | 10 | 0.0000000000 | 0.1000000000 |\n| 2 | 0 | 10 | 0.1111111111 | 0.2000000000 |\n| 3 | 1 | 10 | 0.2222222222 | 0.3000000000 |\n| 4 | 1 | 10 | 0.3333333333 | 0.4000000000 |\n| 5 | 2 | 20 | 0.4444444444 | 0.5000000000 |\n| 6 | 2 | 20 | 0.5555555556 | 0.6000000000 |\n| 7 | 2 | 20 | 0.6666666667 | 0.7000000000 |\n| 8 | 2 | 10 | 0.7777777778 | 0.8000000000 |\n| 9 | 4 | 20 | 0.8888888889 | 0.9000000000 |\n| 10 | 4 | 20 | 1.0000000000 | 1.0000000000 |\n+----+------+------+--------------+--------------+\n\nselect pk, a, b,\n percent_rank() over (partition by a order by a) as pct_rank,\n cume_dist() over (partition by a order by a) as cume_dist\nfrom t1;\n+----+------+------+--------------+--------------+\n| pk | a | b | pct_rank | cume_dist |\n+----+------+------+--------------+--------------+\n| 1 | 0 | 10 | 0.0000000000 | 1.0000000000 |\n| 2 | 0 | 10 | 0.0000000000 | 1.0000000000 |\n| 3 | 1 | 10 | 0.0000000000 | 1.0000000000 |\n| 4 | 1 | 10 | 0.0000000000 | 1.0000000000 |\n| 5 | 2 | 20 | 0.0000000000 | 1.0000000000 |\n| 6 | 2 | 20 | 0.0000000000 | 1.0000000000 |\n| 7 | 2 | 20 | 0.0000000000 | 1.0000000000 |\n| 8 | 2 | 10 | 0.0000000000 | 1.0000000000 |\n| 9 | 4 | 20 | 0.0000000000 | 1.0000000000 |\n| 10 | 4 | 20 | 0.0000000000 | 1.0000000000 |\n+----+------+------+--------------+--------------+\n\nURL: https://mariadb.com/kb/en/cume_dist/','','https://mariadb.com/kb/en/cume_dist/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (780,41,'DENSE_RANK','Syntax\n------\n\nDENSE_RANK() OVER (\n [ PARTITION BY partition_expression ]\n [ ORDER BY order_list ]\n)\n\nDescription\n-----------\n\nDENSE_RANK() is a window function that displays the number of a given row,\nstarting at one and following the ORDER BY sequence of the window function,\nwith identical values receiving the same result. Unlike the RANK() function,\nthere are no skipped values if the preceding results are identical. It is also\nsimilar to the ROW_NUMBER() function except that in that function, identical\nvalues will receive a different row number for each result.\n\nExamples\n--------\n\nThe distinction between DENSE_RANK(), RANK() and ROW_NUMBER():\n\nCREATE TABLE student(course VARCHAR(10), mark int, name varchar(10));\n\nINSERT INTO student VALUES \n (\'Maths\', 60, \'Thulile\'),\n (\'Maths\', 60, \'Pritha\'),\n (\'Maths\', 70, \'Voitto\'),\n (\'Maths\', 55, \'Chun\'),\n (\'Biology\', 60, \'Bilal\'),\n (\'Biology\', 70, \'Roger\');\n\nSELECT \n RANK() OVER (PARTITION BY course ORDER BY mark DESC) AS rank,\n DENSE_RANK() OVER (PARTITION BY course ORDER BY mark DESC) AS dense_rank,\n ROW_NUMBER() OVER (PARTITION BY course ORDER BY mark DESC) AS row_num,\n course, mark, name\nFROM student ORDER BY course, mark DESC;\n+------+------------+---------+---------+------+---------+\n| rank | dense_rank | row_num | course | mark | name |\n+------+------------+---------+---------+------+---------+\n| 1 | 1 | 1 | Biology | 70 | Roger |\n| 2 | 2 | 2 | Biology | 60 | Bilal |\n| 1 | 1 | 1 | Maths | 70 | Voitto |\n| 2 | 2 | 2 | Maths | 60 | Thulile |\n| 2 | 2 | 3 | Maths | 60 | Pritha |\n| 4 | 3 | 4 | Maths | 55 | Chun |\n+------+------------+---------+---------+------+---------+\n\nURL: https://mariadb.com/kb/en/dense_rank/','','https://mariadb.com/kb/en/dense_rank/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (781,41,'FIRST_VALUE','Syntax\n------\n\nFIRST_VALUE(expr) OVER (\n [ PARTITION BY partition_expression ]\n [ ORDER BY order_list ]\n)\n\nDescription\n-----------\n\nFIRST_VALUE returns the first result from an ordered set, or NULL if no such\nresult exists.\n\nExamples\n--------\n\nCREATE TABLE t1 (\n pk int primary key,\n a int,\n b int,\n c char(10),\n d decimal(10, 3),\n e real\n);\n\nINSERT INTO t1 VALUES\n( 1, 0, 1, \'one\', 0.1, 0.001),\n( 2, 0, 2, \'two\', 0.2, 0.002),\n( 3, 0, 3, \'three\', 0.3, 0.003),\n( 4, 1, 2, \'three\', 0.4, 0.004),\n( 5, 1, 1, \'two\', 0.5, 0.005),\n( 6, 1, 1, \'one\', 0.6, 0.006),\n( 7, 2, NULL, \'n_one\', 0.5, 0.007),\n( 8, 2, 1, \'n_two\', NULL, 0.008),\n( 9, 2, 2, NULL, 0.7, 0.009),\n(10, 2, 0, \'n_four\', 0.8, 0.010),\n(11, 2, 10, NULL, 0.9, NULL);\n\nSELECT pk, FIRST_VALUE(pk) OVER (ORDER BY pk) AS first_asc,\n LAST_VALUE(pk) OVER (ORDER BY pk) AS last_asc,\n FIRST_VALUE(pk) OVER (ORDER BY pk DESC) AS first_desc,\n LAST_VALUE(pk) OVER (ORDER BY pk DESC) AS last_desc\nFROM t1\nORDER BY pk DESC;\n\n+----+-----------+----------+------------+-----------+\n| pk | first_asc | last_asc | first_desc | last_desc |\n+----+-----------+----------+------------+-----------+\n| 11 | 1 | 11 | 11 | 11 |\n| 10 | 1 | 10 | 11 | 10 |\n| 9 | 1 | 9 | 11 | 9 |\n| 8 | 1 | 8 | 11 | 8 |\n| 7 | 1 | 7 | 11 | 7 |\n| 6 | 1 | 6 | 11 | 6 |\n| 5 | 1 | 5 | 11 | 5 |\n| 4 | 1 | 4 | 11 | 4 |\n| 3 | 1 | 3 | 11 | 3 |\n| 2 | 1 | 2 | 11 | 2 |\n| 1 | 1 | 1 | 11 | 1 |\n+----+-----------+----------+------------+-----------+\n\nCREATE OR REPLACE TABLE t1 (i int);\nINSERT INTO t1 VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10);\n\nSELECT i,\n FIRST_VALUE(i) OVER (ORDER BY i ROWS BETWEEN CURRENT ROW and 1 FOLLOWING) AS\nf_1f,\n LAST_VALUE(i) OVER (ORDER BY i ROWS BETWEEN CURRENT ROW and 1 FOLLOWING) AS\nl_1f,\n FIRST_VALUE(i) OVER (ORDER BY i ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) AS\nf_1p1f,\n LAST_VALUE(i) OVER (ORDER BY i ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) AS\nf_1p1f,\n FIRST_VALUE(i) OVER (ORDER BY i ROWS BETWEEN 2 PRECEDING AND 1 PRECEDING) AS\nf_2p1p,\n LAST_VALUE(i) OVER (ORDER BY i ROWS BETWEEN 2 PRECEDING AND 1 PRECEDING) AS\nf_2p1p,\n FIRST_VALUE(i) OVER (ORDER BY i ROWS BETWEEN 1 FOLLOWING AND 2 FOLLOWING) AS\nf_1f2f,\n LAST_VALUE(i) OVER (ORDER BY i ROWS BETWEEN 1 FOLLOWING AND 2 FOLLOWING) AS\nf_1f2f\nFROM t1;\n\n+------+------+------+--------+--------+--------+--------+--------+--------+\n| i | f_1f | l_1f | f_1p1f | f_1p1f | f_2p1p | f_2p1p | f_1f2f | f_1f2f |\n+------+------+------+--------+--------+--------+--------+--------+--------+\n| 1 | 1 | 2 | 1 | 2 | NULL | NULL | 2 | 3 |\n| 2 | 2 | 3 | 1 | 3 | 1 | 1 | 3 | 4 |\n| 3 | 3 | 4 | 2 | 4 | 1 | 2 | 4 | 5 |\n| 4 | 4 | 5 | 3 | 5 | 2 | 3 | 5 | 6 |\n| 5 | 5 | 6 | 4 | 6 | 3 | 4 | 6 | 7 |\n| 6 | 6 | 7 | 5 | 7 | 4 | 5 | 7 | 8 |\n| 7 | 7 | 8 | 6 | 8 | 5 | 6 | 8 | 9 |\n| 8 | 8 | 9 | 7 | 9 | 6 | 7 | 9 | 10 |\n| 9 | 9 | 10 | 8 | 10 | 7 | 8 | 10 | 10 |\n| 10 | 10 | 10 | 9 | 10 | 8 | 9 | NULL | NULL |\n+------+------+------+--------+--------+--------+--------+--------+--------+\n\nURL: https://mariadb.com/kb/en/first_value/','','https://mariadb.com/kb/en/first_value/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (782,41,'LAG','Syntax\n------\n\nLAG (expr[, offset]) OVER ( \n [ PARTITION BY partition_expression ]\n < ORDER BY order_list >\n)\n\nDescription\n-----------\n\nThe LAG function accesses data from a previous row according to the ORDER BY\nclause without the need for a self-join. The specific row is determined by the\noffset (default 1), which specifies the number of rows behind the current row\nto use. An offset of 0 is the current row.\n\nExamples\n--------\n\nCREATE TABLE t1 (pk int primary key, a int, b int, c char(10), d decimal(10,\n3), e real);\n\nINSERT INTO t1 VALUES\n ( 1, 0, 1, \'one\', 0.1, 0.001),\n ( 2, 0, 2, \'two\', 0.2, 0.002),\n ( 3, 0, 3, \'three\', 0.3, 0.003),\n ( 4, 1, 2, \'three\', 0.4, 0.004),\n ( 5, 1, 1, \'two\', 0.5, 0.005),\n ( 6, 1, 1, \'one\', 0.6, 0.006),\n ( 7, 2, NULL, \'n_one\', 0.5, 0.007),\n ( 8, 2, 1, \'n_two\', NULL, 0.008),\n ( 9, 2, 2, NULL, 0.7, 0.009),\n (10, 2, 0, \'n_four\', 0.8, 0.010),\n (11, 2, 10, NULL, 0.9, NULL);\n\nSELECT pk, LAG(pk) OVER (ORDER BY pk) AS l,\n LAG(pk,1) OVER (ORDER BY pk) AS l1,\n LAG(pk,2) OVER (ORDER BY pk) AS l2,\n LAG(pk,0) OVER (ORDER BY pk) AS l0,\n LAG(pk,-1) OVER (ORDER BY pk) AS lm1,\n LAG(pk,-2) OVER (ORDER BY pk) AS lm2\nFROM t1;\n+----+------+------+------+------+------+------+\n| pk | l | l1 | l2 | l0 | lm1 | lm2 |\n+----+------+------+------+------+------+------+\n| 1 | NULL | NULL | NULL | 1 | 2 | 3 |\n| 2 | 1 | 1 | NULL | 2 | 3 | 4 |\n| 3 | 2 | 2 | 1 | 3 | 4 | 5 |\n| 4 | 3 | 3 | 2 | 4 | 5 | 6 |\n| 5 | 4 | 4 | 3 | 5 | 6 | 7 |\n| 6 | 5 | 5 | 4 | 6 | 7 | 8 |\n| 7 | 6 | 6 | 5 | 7 | 8 | 9 |\n| 8 | 7 | 7 | 6 | 8 | 9 | 10 |\n| 9 | 8 | 8 | 7 | 9 | 10 | 11 |\n| 10 | 9 | 9 | 8 | 10 | 11 | NULL |\n| 11 | 10 | 10 | 9 | 11 | NULL | NULL |\n+----+------+------+------+------+------+------+\n\nURL: https://mariadb.com/kb/en/lag/','','https://mariadb.com/kb/en/lag/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (783,41,'LEAD','Syntax\n------\n\nLEAD (expr[, offset]) OVER ( \n [ PARTITION BY partition_expression ]\n [ ORDER BY order_list ]\n)\n\nDescription\n-----------\n\nThe LEAD function accesses data from a following row in the same result set\nwithout the need for a self-join. The specific row is determined by the offset\n(default 1), which specifies the number of rows ahead the current row to use.\nAn offset of 0 is the current row.\n\nExample\n-------\n\nCREATE TABLE t1 (pk int primary key, a int, b int, c char(10), d decimal(10,\n3), e real);\n\nINSERT INTO t1 VALUES\n ( 1, 0, 1, \'one\', 0.1, 0.001),\n ( 2, 0, 2, \'two\', 0.2, 0.002),\n ( 3, 0, 3, \'three\', 0.3, 0.003),\n ( 4, 1, 2, \'three\', 0.4, 0.004),\n ( 5, 1, 1, \'two\', 0.5, 0.005),\n ( 6, 1, 1, \'one\', 0.6, 0.006),\n ( 7, 2, NULL, \'n_one\', 0.5, 0.007),\n ( 8, 2, 1, \'n_two\', NULL, 0.008),\n ( 9, 2, 2, NULL, 0.7, 0.009),\n (10, 2, 0, \'n_four\', 0.8, 0.010),\n (11, 2, 10, NULL, 0.9, NULL);\n\nSELECT pk, LEAD(pk) OVER (ORDER BY pk) AS l,\n LEAD(pk,1) OVER (ORDER BY pk) AS l1,\n LEAD(pk,2) OVER (ORDER BY pk) AS l2,\n LEAD(pk,0) OVER (ORDER BY pk) AS l0,\n LEAD(pk,-1) OVER (ORDER BY pk) AS lm1,\n LEAD(pk,-2) OVER (ORDER BY pk) AS lm2\nFROM t1;\n+----+------+------+------+------+------+------+\n| pk | l | l1 | l2 | l0 | lm1 | lm2 |\n+----+------+------+------+------+------+------+\n| 1 | 2 | 2 | 3 | 1 | NULL | NULL |\n| 2 | 3 | 3 | 4 | 2 | 1 | NULL |\n| 3 | 4 | 4 | 5 | 3 | 2 | 1 |\n| 4 | 5 | 5 | 6 | 4 | 3 | 2 |\n| 5 | 6 | 6 | 7 | 5 | 4 | 3 |\n| 6 | 7 | 7 | 8 | 6 | 5 | 4 |\n| 7 | 8 | 8 | 9 | 7 | 6 | 5 |\n| 8 | 9 | 9 | 10 | 8 | 7 | 6 |\n| 9 | 10 | 10 | 11 | 9 | 8 | 7 |\n| 10 | 11 | 11 | NULL | 10 | 9 | 8 |\n| 11 | NULL | NULL | NULL | 11 | 10 | 9 |\n+----+------+------+------+------+------+------+\n\nURL: https://mariadb.com/kb/en/lead/','','https://mariadb.com/kb/en/lead/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (784,41,'Median Window Function','MariaDB starting with 10.3.3\n----------------------------\nThe MEDIAN() window function was first introduced with in MariaDB 10.3.3.\n\nSyntax\n------\n\nMEDIAN(median expression) OVER (\n [ PARTITION BY partition_expression ]\n)\n\nDescription\n-----------\n\nMEDIAN() is a window function that returns the median value of a range of\nvalues.\n\nIt is a specific case of PERCENTILE_CONT, with an argument of 0.5 and the\nORDER BY column the one in MEDIAN\'s argument.\n\nMEDIAN(<median-arg>) OVER ( [ PARTITION BY partition_expression] )\n\nIs equivalent to:\n\nPERCENTILE_CONT(0.5) WITHIN \n GROUP (ORDER BY <median-arg>) OVER ( [ PARTITION BY partition_expression ])\n\nExamples\n--------\n\nCREATE TABLE book_rating (name CHAR(30), star_rating TINYINT);\n\nINSERT INTO book_rating VALUES (\'Lord of the Ladybirds\', 5);\nINSERT INTO book_rating VALUES (\'Lord of the Ladybirds\', 3);\nINSERT INTO book_rating VALUES (\'Lady of the Flies\', 1);\nINSERT INTO book_rating VALUES (\'Lady of the Flies\', 2);\nINSERT INTO book_rating VALUES (\'Lady of the Flies\', 5);\n\nSELECT name, median(star_rating) OVER (PARTITION BY name) FROM book_rating;\n+-----------------------+----------------------------------------------+\n| name | median(star_rating) OVER (PARTITION BY name) |\n+-----------------------+----------------------------------------------+\n| Lord of the Ladybirds | 4.0000000000 |\n| Lord of the Ladybirds | 4.0000000000 |\n| Lady of the Flies | 2.0000000000 |\n| Lady of the Flies | 2.0000000000 |\n| Lady of the Flies | 2.0000000000 |\n+-----------------------+----------------------------------------------+\n\nURL: https://mariadb.com/kb/en/median/','','https://mariadb.com/kb/en/median/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (785,41,'NTH_VALUE','Syntax\n------\n\nNTH_VALUE (expr[, num_row]) OVER ( \n [ PARTITION BY partition_expression ]\n [ ORDER BY order_list ]\n)\n\nDescription\n-----------\n\nThe NTH_VALUE function returns the value evaluated at row number num_row of\nthe window frame, starting from 1, or NULL if the row does not exist.\n\nURL: https://mariadb.com/kb/en/nth_value/','','https://mariadb.com/kb/en/nth_value/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (786,41,'NTILE','Syntax\n------\n\nNTILE (expr) OVER ( \n [ PARTITION BY partition_expression ]\n [ ORDER BY order_list ]\n)\n\nDescription\n-----------\n\nNTILE() is a window function that returns an integer indicating which group a\ngiven row falls into. The number of groups is specified in the argument\n(expr), starting at one. Ordered rows in the partition are divided into the\nspecified number of groups with as equal a size as possible.\n\nExamples\n--------\n\ncreate table t1 (\n pk int primary key,\n a int,\n b int\n );\n\ninsert into t1 values\n (11 , 0, 10),\n (12 , 0, 10),\n (13 , 1, 10),\n (14 , 1, 10),\n (18 , 2, 10),\n (15 , 2, 20),\n (16 , 2, 20),\n (17 , 2, 20),\n (19 , 4, 20),\n (20 , 4, 20);\n\nselect pk, a, b,\n ntile(1) over (order by pk)\n from t1;\n+----+------+------+-----------------------------+\n| pk | a | b | ntile(1) over (order by pk) |\n+----+------+------+-----------------------------+\n| 11 | 0 | 10 | 1 |\n| 12 | 0 | 10 | 1 |\n| 13 | 1 | 10 | 1 |\n| 14 | 1 | 10 | 1 |\n| 15 | 2 | 20 | 1 |\n| 16 | 2 | 20 | 1 |\n| 17 | 2 | 20 | 1 |\n| 18 | 2 | 10 | 1 |\n| 19 | 4 | 20 | 1 |\n| 20 | 4 | 20 | 1 |\n+----+------+------+-----------------------------+\n\nselect pk, a, b,\n ntile(4) over (order by pk)\n from t1;\n+----+------+------+-----------------------------+\n| pk | a | b | ntile(4) over (order by pk) |\n+----+------+------+-----------------------------+\n| 11 | 0 | 10 | 1 |\n| 12 | 0 | 10 | 1 |\n| 13 | 1 | 10 | 1 |\n| 14 | 1 | 10 | 2 |\n| 15 | 2 | 20 | 2 |\n| 16 | 2 | 20 | 2 |\n| 17 | 2 | 20 | 3 |\n| 18 | 2 | 10 | 3 |\n| 19 | 4 | 20 | 4 |\n| 20 | 4 | 20 | 4 |\n+----+------+------+-----------------------------+\n\nURL: https://mariadb.com/kb/en/ntile/','','https://mariadb.com/kb/en/ntile/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (787,41,'PERCENT_RANK','Syntax\n------\n\nPERCENT_RANK() OVER (\n [ PARTITION BY partition_expression ]\n [ ORDER BY order_list ]\n)\n\nDescription\n-----------\n\nPERCENT_RANK() is a window function that returns the relative percent rank of\na given row. The following formula is used to calculate the percent rank:\n\n(rank - 1) / (number of rows in the window or partition - 1)\n\nExamples\n--------\n\ncreate table t1 (\n pk int primary key,\n a int,\n b int\n);\n\ninsert into t1 values\n( 1 , 0, 10),\n( 2 , 0, 10),\n( 3 , 1, 10),\n( 4 , 1, 10),\n( 8 , 2, 10),\n( 5 , 2, 20),\n( 6 , 2, 20),\n( 7 , 2, 20),\n( 9 , 4, 20),\n(10 , 4, 20);\n\nselect pk, a, b,\n rank() over (order by a) as rank,\n percent_rank() over (order by a) as pct_rank,\n cume_dist() over (order by a) as cume_dist\nfrom t1;\n+----+------+------+------+--------------+--------------+\n| pk | a | b | rank | pct_rank | cume_dist |\n+----+------+------+------+--------------+--------------+\n| 1 | 0 | 10 | 1 | 0.0000000000 | 0.2000000000 |\n| 2 | 0 | 10 | 1 | 0.0000000000 | 0.2000000000 |\n| 3 | 1 | 10 | 3 | 0.2222222222 | 0.4000000000 |\n| 4 | 1 | 10 | 3 | 0.2222222222 | 0.4000000000 |\n| 5 | 2 | 20 | 5 | 0.4444444444 | 0.8000000000 |\n| 6 | 2 | 20 | 5 | 0.4444444444 | 0.8000000000 |\n| 7 | 2 | 20 | 5 | 0.4444444444 | 0.8000000000 |\n| 8 | 2 | 10 | 5 | 0.4444444444 | 0.8000000000 |\n| 9 | 4 | 20 | 9 | 0.8888888889 | 1.0000000000 |\n| 10 | 4 | 20 | 9 | 0.8888888889 | 1.0000000000 |\n+----+------+------+------+--------------+--------------+\n\nselect pk, a, b,\n percent_rank() over (order by pk) as pct_rank,\n cume_dist() over (order by pk) as cume_dist\nfrom t1 order by pk;\n+----+------+------+--------------+--------------+\n| pk | a | b | pct_rank | cume_dist |\n+----+------+------+--------------+--------------+\n| 1 | 0 | 10 | 0.0000000000 | 0.1000000000 |\n| 2 | 0 | 10 | 0.1111111111 | 0.2000000000 |\n| 3 | 1 | 10 | 0.2222222222 | 0.3000000000 |\n| 4 | 1 | 10 | 0.3333333333 | 0.4000000000 |\n| 5 | 2 | 20 | 0.4444444444 | 0.5000000000 |\n| 6 | 2 | 20 | 0.5555555556 | 0.6000000000 |\n| 7 | 2 | 20 | 0.6666666667 | 0.7000000000 |\n| 8 | 2 | 10 | 0.7777777778 | 0.8000000000 |\n| 9 | 4 | 20 | 0.8888888889 | 0.9000000000 |\n| 10 | 4 | 20 | 1.0000000000 | 1.0000000000 |\n+----+------+------+--------------+--------------+\n\nselect pk, a, b,\n percent_rank() over (partition by a order by a) as pct_rank,\n cume_dist() over (partition by a order by a) as cume_dist\nfrom t1;\n+----+------+------+--------------+--------------+\n| pk | a | b | pct_rank | cume_dist |\n+----+------+------+--------------+--------------+\n| 1 | 0 | 10 | 0.0000000000 | 1.0000000000 |\n| 2 | 0 | 10 | 0.0000000000 | 1.0000000000 |\n| 3 | 1 | 10 | 0.0000000000 | 1.0000000000 |\n| 4 | 1 | 10 | 0.0000000000 | 1.0000000000 |\n| 5 | 2 | 20 | 0.0000000000 | 1.0000000000 |\n| 6 | 2 | 20 | 0.0000000000 | 1.0000000000 |\n| 7 | 2 | 20 | 0.0000000000 | 1.0000000000 |\n| 8 | 2 | 10 | 0.0000000000 | 1.0000000000 |\n| 9 | 4 | 20 | 0.0000000000 | 1.0000000000 |\n| 10 | 4 | 20 | 0.0000000000 | 1.0000000000 |\n+----+------+------+--------------+--------------+\n\nURL: https://mariadb.com/kb/en/percent_rank/','','https://mariadb.com/kb/en/percent_rank/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (788,41,'PERCENTILE_CONT','MariaDB starting with 10.3.3\n----------------------------\nThe PERCENTILE_CONT() window function was first introduced with in MariaDB\n10.3.3.\n\nSyntax\n------\n\nDescription\n-----------\n\nPERCENTILE_CONT() (standing for continuous percentile) is a window function\nwhich returns a value which corresponds to the given fraction in the sort\norder. If required, it will interpolate between adjacent input items.\n\nEssentially, the following process is followed to find the value to return:\n\n* Get the number of rows in the partition, denoted by N\n* RN = p*(N-1), where p denotes the argument to the PERCENTILE_CONT function\n* calculate the FRN(floor row number) and CRN(column row number for the group(\nFRN= floor(RN) and CRN = ceil(RN))\n* look up rows FRN and CRN\n* If (CRN = FRN = RN) then the result is (value of expression from row at RN)\n* Otherwise the result is\n* (CRN - RN) * (value of expression for row at FRN) +\n* (RN - FRN) * (value of expression for row at CRN)\n\nThe MEDIAN function is a specific case of PERCENTILE_CONT, equivalent to\nPERCENTILE_CONT(0.5).\n\nExamples\n--------\n\nCREATE TABLE book_rating (name CHAR(30), star_rating TINYINT);\n\nINSERT INTO book_rating VALUES (\'Lord of the Ladybirds\', 5);\nINSERT INTO book_rating VALUES (\'Lord of the Ladybirds\', 3);\nINSERT INTO book_rating VALUES (\'Lady of the Flies\', 1);\nINSERT INTO book_rating VALUES (\'Lady of the Flies\', 2);\nINSERT INTO book_rating VALUES (\'Lady of the Flies\', 5);\n\nSELECT name, PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY star_rating) \n OVER (PARTITION BY name) AS pc\n FROM book_rating;\n+-----------------------+--------------+\n| name | pc |\n+-----------------------+--------------+\n| Lord of the Ladybirds | 4.0000000000 |\n| Lord of the Ladybirds | 4.0000000000 |\n| Lady of the Flies | 2.0000000000 |\n| Lady of the Flies | 2.0000000000 |\n| Lady of the Flies | 2.0000000000 |\n+-----------------------+--------------+\n\nSELECT name, PERCENTILE_CONT(1) WITHIN GROUP (ORDER BY star_rating) \n OVER (PARTITION BY name) AS pc\n FROM book_rating;\n+-----------------------+--------------+\n| name | pc |\n+-----------------------+--------------+\n| Lord of the Ladybirds | 5.0000000000 |\n| Lord of the Ladybirds | 5.0000000000 |\n| Lady of the Flies | 5.0000000000 |\n| Lady of the Flies | 5.0000000000 |\n| Lady of the Flies | 5.0000000000 |\n+-----------------------+--------------+\n\nSELECT name, PERCENTILE_CONT(0) WITHIN GROUP (ORDER BY star_rating) \n OVER (PARTITION BY name) AS pc\n FROM book_rating;\n+-----------------------+--------------+\n| name | pc |\n+-----------------------+--------------+\n| Lord of the Ladybirds | 3.0000000000 |\n| Lord of the Ladybirds | 3.0000000000 |\n| Lady of the Flies | 1.0000000000 |\n| Lady of the Flies | 1.0000000000 |\n| Lady of the Flies | 1.0000000000 |\n+-----------------------+--------------+\n\nSELECT name, PERCENTILE_CONT(0.6) WITHIN GROUP (ORDER BY star_rating) \n OVER (PARTITION BY name) AS pc\n FROM book_rating;\n+-----------------------+--------------+\n| name | pc |\n+-----------------------+--------------+\n| Lord of the Ladybirds | 4.2000000000 |\n| Lord of the Ladybirds | 4.2000000000 |\n| Lady of the Flies | 2.6000000000 |\n| Lady of the Flies | 2.6000000000 |\n| Lady of the Flies | 2.6000000000 |\n+-----------------------+--------------+\n\nURL: https://mariadb.com/kb/en/percentile_cont/','','https://mariadb.com/kb/en/percentile_cont/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (789,41,'PERCENTILE_DISC','MariaDB starting with 10.3.3\n----------------------------\nThe PERCENTILE_DISC() window function was first introduced with in MariaDB\n10.3.3.\n\nSyntax\n------\n\nDescription\n-----------\n\nPERCENTILE_DISC() (standing for discrete percentile) is a window function\nwhich returns the first value in the set whose ordered position is the same or\nmore than the specified fraction.\n\nEssentially, the following process is followed to find the value to return:\n\n* Get the number of rows in the partition.\n* Walk through the partition, in order, until finding the the first row with\nCUME_DIST() >= function_argument.\n\nExamples\n--------\n\nCREATE TABLE book_rating (name CHAR(30), star_rating TINYINT);\n\nINSERT INTO book_rating VALUES (\'Lord of the Ladybirds\', 5);\nINSERT INTO book_rating VALUES (\'Lord of the Ladybirds\', 3);\nINSERT INTO book_rating VALUES (\'Lady of the Flies\', 1);\nINSERT INTO book_rating VALUES (\'Lady of the Flies\', 2);\nINSERT INTO book_rating VALUES (\'Lady of the Flies\', 5);\n\nSELECT name, PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY star_rating)\n OVER (PARTITION BY name) AS pc FROM book_rating;\n+-----------------------+------+\n| name | pc |\n+-----------------------+------+\n| Lord of the Ladybirds | 3 |\n| Lord of the Ladybirds | 3 |\n| Lady of the Flies | 2 |\n| Lady of the Flies | 2 |\n| Lady of the Flies | 2 |\n+-----------------------+------+\n5 rows in set (0.000 sec)\n\nSELECT name, PERCENTILE_DISC(0) WITHIN GROUP (ORDER BY star_rating) \n OVER (PARTITION BY name) AS pc FROM book_rating;\n+-----------------------+------+\n| name | pc |\n+-----------------------+------+\n| Lord of the Ladybirds | 3 |\n| Lord of the Ladybirds | 3 |\n| Lady of the Flies | 1 |\n| Lady of the Flies | 1 |\n| Lady of the Flies | 1 |\n+-----------------------+------+\n5 rows in set (0.000 sec)\n\nSELECT name, PERCENTILE_DISC(1) WITHIN GROUP (ORDER BY star_rating) \n OVER (PARTITION BY name) AS pc FROM book_rating;\n+-----------------------+------+\n| name | pc |\n+-----------------------+------+\n| Lord of the Ladybirds | 5 |\n| Lord of the Ladybirds | 5 |\n| Lady of the Flies | 5 |\n| Lady of the Flies | 5 |\n| Lady of the Flies | 5 |\n+-----------------------+------+\n5 rows in set (0.000 sec)\n\nSELECT name, PERCENTILE_DISC(0.6) WITHIN GROUP (ORDER BY star_rating) \n OVER (PARTITION BY name) AS pc FROM book_rating;\n+-----------------------+------+\n| name | pc |\n+-----------------------+------+\n| Lord of the Ladybirds | 5 |\n| Lord of the Ladybirds | 5 |\n| Lady of the Flies | 2 |\n| Lady of the Flies | 2 |\n| Lady of the Flies | 2 |\n+-----------------------+------\n\nURL: https://mariadb.com/kb/en/percentile_disc/','','https://mariadb.com/kb/en/percentile_disc/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (790,41,'RANK','Syntax\n------\n\nRANK() OVER (\n [ PARTITION BY partition_expression ]\n [ ORDER BY order_list ]\n)\n\nDescription\n-----------\n\nRANK() is a window function that displays the number of a given row, starting\nat one and following the ORDER BY sequence of the window function, with\nidentical values receiving the same result. It is similar to the ROW_NUMBER()\nfunction except that in that function, identical values will receive a\ndifferent row number for each result.\n\nExamples\n--------\n\nThe distinction between DENSE_RANK(), RANK() and ROW_NUMBER():\n\nCREATE TABLE student(course VARCHAR(10), mark int, name varchar(10));\n\nINSERT INTO student VALUES \n (\'Maths\', 60, \'Thulile\'),\n (\'Maths\', 60, \'Pritha\'),\n (\'Maths\', 70, \'Voitto\'),\n (\'Maths\', 55, \'Chun\'),\n (\'Biology\', 60, \'Bilal\'),\n (\'Biology\', 70, \'Roger\');\n\nSELECT \n RANK() OVER (PARTITION BY course ORDER BY mark DESC) AS rank,\n DENSE_RANK() OVER (PARTITION BY course ORDER BY mark DESC) AS dense_rank,\n ROW_NUMBER() OVER (PARTITION BY course ORDER BY mark DESC) AS row_num,\n course, mark, name\nFROM student ORDER BY course, mark DESC;\n+------+------------+---------+---------+------+---------+\n| rank | dense_rank | row_num | course | mark | name |\n+------+------------+---------+---------+------+---------+\n| 1 | 1 | 1 | Biology | 70 | Roger |\n| 2 | 2 | 2 | Biology | 60 | Bilal |\n| 1 | 1 | 1 | Maths | 70 | Voitto |\n| 2 | 2 | 2 | Maths | 60 | Thulile |\n| 2 | 2 | 3 | Maths | 60 | Pritha |\n| 4 | 3 | 4 | Maths | 55 | Chun |\n+------+------------+---------+---------+------+---------+\n\nURL: https://mariadb.com/kb/en/rank/','','https://mariadb.com/kb/en/rank/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (791,41,'ROW_NUMBER','Syntax\n------\n\nROW_NUMBER() OVER (\n [ PARTITION BY partition_expression ]\n [ ORDER BY order_list ]\n)\n\nDescription\n-----------\n\nROW_NUMBER() is a window function that displays the number of a given row,\nstarting at one and following the ORDER BY sequence of the window function,\nwith identical values receiving different row numbers. It is similar to the\nRANK() and DENSE_RANK() functions except that in that function, identical\nvalues will receive the same rank for each result.\n\nExamples\n--------\n\nThe distinction between DENSE_RANK(), RANK() and ROW_NUMBER():\n\nCREATE TABLE student(course VARCHAR(10), mark int, name varchar(10));\n\nINSERT INTO student VALUES \n (\'Maths\', 60, \'Thulile\'),\n (\'Maths\', 60, \'Pritha\'),\n (\'Maths\', 70, \'Voitto\'),\n (\'Maths\', 55, \'Chun\'),\n (\'Biology\', 60, \'Bilal\'),\n (\'Biology\', 70, \'Roger\');\n\nSELECT \n RANK() OVER (PARTITION BY course ORDER BY mark DESC) AS rank,\n DENSE_RANK() OVER (PARTITION BY course ORDER BY mark DESC) AS dense_rank,\n ROW_NUMBER() OVER (PARTITION BY course ORDER BY mark DESC) AS row_num,\n course, mark, name\nFROM student ORDER BY course, mark DESC;\n+------+------------+---------+---------+------+---------+\n| rank | dense_rank | row_num | course | mark | name |\n+------+------------+---------+---------+------+---------+\n| 1 | 1 | 1 | Biology | 70 | Roger |\n| 2 | 2 | 2 | Biology | 60 | Bilal |\n| 1 | 1 | 1 | Maths | 70 | Voitto |\n| 2 | 2 | 2 | Maths | 60 | Thulile |\n| 2 | 2 | 3 | Maths | 60 | Pritha |\n| 4 | 3 | 4 | Maths | 55 | Chun |\n+------+------------+---------+---------+------+---------+\n\nURL: https://mariadb.com/kb/en/row_number/','','https://mariadb.com/kb/en/row_number/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (792,41,'Aggregate Functions as Window Functions','It is possible to use aggregate functions as window functions. An aggregate\nfunction used as a window function must have the OVER clause. For example,\nhere\'s COUNT() used as a window function:\n\nselect COUNT(*) over (order by column) from table;\n\nMariaDB currently allows these aggregate functions to be used as window\nfunctions:\n\n* AVG\n* BIT_AND\n* BIT_OR\n* BIT_XOR\n* COUNT\n* JSON_ARRAYAGG\n* JSON_OBJECTAGG\n* MAX\n* MIN\n* STD\n* STDDEV\n* STDDEV_POP\n* STDDEV_SAMP\n* SUM\n* VAR_POP\n* VAR_SAMP\n* VARIANCE\n\nURL: https://mariadb.com/kb/en/aggregate-functions-as-window-functions/','','https://mariadb.com/kb/en/aggregate-functions-as-window-functions/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (793,41,'ColumnStore Window Functions','Introduction\n------------\n\nMariaDB ColumnStore provides support for window functions broadly following\nthe SQL 2003 specification. A window function allows for calculations relating\nto a window of data surrounding the current row in a result set. This\ncapability provides for simplified queries in support of common business\nquestions such as cumulative totals, rolling averages, and top 10 lists.\n\nAggregate functions are utilized for window functions however differ in\nbehavior from a group by query because the rows remain ungrouped. This\nprovides support for cumulative sums and rolling averages, for example.\n\nTwo key concepts for window functions are Partition and Frame:\n\n* A Partition is a group of rows, or window, that have the same value for a\nspecific column, for example a Partition can be created over a time period\nsuch as a quarter or lookup values.\n* The Frame for each row is a subset of the row\'s Partition. The frame\ntypically is dynamic allowing for a sliding frame of rows within the\nPartition. The Frame determines the range of rows for the windowing function.\nA Frame could be defined as the last X rows and next Y rows all the way up to\nthe entire Partition.\n\nWindow functions are applied after joins, group by, and having clauses are\ncalculated.\n\nSyntax\n------\n\nA window function is applied in the select clause using the following syntax:\n\nfunction_name ([expression [, expression ... ]]) OVER ( window_definition )\n\nwhere window_definition is defined as:\n\n[ PARTITION BY expression [, ...] ]\n[ ORDER BY expression [ ASC | DESC ] [ NULLS { FIRST | LAST } ] [, ...] ]\n[ frame_clause ]\n\nPARTITION BY:\n\n* Divides the window result set into groups based on one or more expressions.\n* An expression may be a constant, column, and non window function expressions.\n* A query is not limited to a single partition by clause. Different partition\nclauses can be used across different window function applications.\n* The partition by columns do not need to be in the select list but do need to\nbe available from the query result set.\n* If there is no PARTITION BY clause, all rows of the result set define the\ngroup.\n\nORDER BY\n\n* Defines the ordering of values within the partition.\n* Can be ordered by multiple keys which may be a constant, column or non\nwindow function expression.\n* The order by columns do not need to be in the select list but need to be\navailable from the query result set.\n* Use of a select column alias from the query is not supported.\n* ASC (default) and DESC options allow for ordering ascending or descending.\n* NULLS FIRST and NULL_LAST options specify whether null values come first or\nlast in the ordering sequence. NULLS_FIRST is the default for ASC order, and\nNULLS_LAST is the default for DESC order.\n\nand the optional frame_clause is defined as:\n\n{ RANGE | ROWS } frame_start\n{ RANGE | ROWS } BETWEEN frame_start AND frame_end\n\nand the optional frame_start and frame_end are defined as (value being a\nnumeric expression):\n\nUNBOUNDED PRECEDING\nvalue PRECEDING\nCURRENT ROW\nvalue FOLLOWING\nUNBOUNDED FOLLOWING\n\nRANGE/ROWS:\n\n* Defines the windowing clause for calculating the set of rows that the\nfunction applies to for calculating a given rows window function result.\n* Requires an ORDER BY clause to define the row order for the window.\n* ROWS specify the window in physical units, i.e. result set rows and must be\na constant or expression evaluating to a positive numeric value.\n* RANGE specifies the window as a logical offset. If the the expression\nevaluates to a numeric value then the ORDER BY expression must be a numeric or\nDATE type. If the expression evaluates to an interval value then the ORDER BY\nexpression must be a DATE data type.\n* UNBOUNDED PRECEDING indicates the window starts at the first row of the\npartition.\n* UNBOUNDED FOLLOWING indicates the window ends at the last row of the\npartition.\n* CURRENT ROW specifies the window start or ends at the current row or value.\n* If omitted, the default is ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW.\n\nSupported Functions\n-------------------\n\n+--------------------------------+-------------------------------------------+\n| Function | Description |\n+--------------------------------+-------------------------------------------+\n| AVG() | The average of all input values. |\n+--------------------------------+-------------------------------------------+\n| COUNT() | Number of input rows. |\n+--------------------------------+-------------------------------------------+\n| CUME_DIST() | Calculates the cumulative distribution, |\n| | or relative rank, of the current row to |\n| | other rows in the same partition. Number |\n| | of peer or preceding rows / number of |\n| | rows in partition. |\n+--------------------------------+-------------------------------------------+\n| DENSE_RANK() | Ranks items in a group leaving no gaps |\n| | in ranking sequence when there are ties. |\n+--------------------------------+-------------------------------------------+\n| FIRST_VALUE() | The value evaluated at the row that is |\n| | the first row of the window frame |\n| | (counting from 1); null if no such row. |\n+--------------------------------+-------------------------------------------+\n| LAG() | The value evaluated at the row that is |\n| | offset rows before the current row |\n| | within the partition; if there is no |\n| | such row, instead return default. Both |\n| | offset and default are evaluated with |\n| | respect to the current row. If omitted, |\n| | offset defaults to 1 and default to |\n| | null. LAG provides access to more than |\n| | one row of a table at the same time |\n| | without a self-join. Given a series of |\n| | rows returned from a query and a |\n| | position of the cursor, LAG provides |\n| | access to a row at a given physical |\n| | offset prior to that position. |\n+--------------------------------+-------------------------------------------+\n| LAST_VALUE() | The value evaluated at the row that is |\n| | the last row of the window frame |\n| | (counting from 1); null if no such row. |\n+--------------------------------+-------------------------------------------+\n| LEAD() | Provides access to a row at a given |\n| | physical offset beyond that position. |\n| | Returns value evaluated at the row that |\n| | is offset rows after the current row |\n| | within the partition; if there is no |\n| | such row, instead return default. Both |\n| | offset and default are evaluated with |\n| | respect to the current row. If omitted, |\n| | offset defaults to 1 and default to null. |\n+--------------------------------+-------------------------------------------+\n| MAX() | Maximum value of expression across all |\n| | input values. |\n+--------------------------------+-------------------------------------------+\n| MEDIAN() | An inverse distribution function that |\n| | assumes a continuous distribution model. |\n| | It takes a numeric or datetime value and |\n| | returns the middle value or an |\n| | interpolated value that would be the |\n| | middle value once the values are sorted. |\n| | Nulls are ignored in the calculation. |\n+--------------------------------+-------------------------------------------+\n| MIN() | Minimum value of expression across all |\n| | input values. |\n+--------------------------------+-------------------------------------------+\n| NTH_VALUE() | The value evaluated at the row that is |\n| | the nth row of the window frame |\n| | (counting from 1); null if no such row. |\n+--------------------------------+-------------------------------------------+\n| NTILE() | Divides an ordered data set into a |\n| | number of buckets indicated by expr and |\n| | assigns the appropriate bucket number to |\n| | each row. The buckets are numbered 1 |\n| | through expr. The expr value must |\n| | resolve to a positive constant for each |\n| | partition. Integer ranging from 1 to the |\n| | argument value, dividing the partition |\n| | as equally as possible. |\n+--------------------------------+-------------------------------------------+\n| PERCENT_RANK() | relative rank of the current row: (rank |\n| | - 1) / (total rows - 1). |\n+--------------------------------+-------------------------------------------+\n| PERCENTILE_CONT() | An inverse distribution function that |\n| | assumes a continuous distribution model. |\n| | It takes a percentile value and a sort |\n| | specification, and returns an |\n| | interpolated value that would fall into |\n| | that percentile value with respect to |\n| | the sort specification. Nulls are |\n| | ignored in the calculation. |\n+--------------------------------+-------------------------------------------+\n| PERCENTILE_DISC() | An inverse distribution function that |\n| | assumes a discrete distribution model. |\n| | It takes a percentile value and a sort |\n| | specification and returns an element |\n| | from the set. Nulls are ignored in the |\n| | calculation. |\n+--------------------------------+-------------------------------------------+\n| RANK() | rank of the current row with gaps; same |\n| | as row_number of its first peer. |\n+--------------------------------+-------------------------------------------+\n| ROW_NUMBER() | number of the current row within its |\n| | partition, counting from 1 |\n+--------------------------------+-------------------------------------------+\n| STDDEV() STDDEV_POP() | Computes the population standard |\n| | deviation and returns the square root of |\n| | the population variance. |\n+--------------------------------+-------------------------------------------+\n| STDDEV_SAMP() | Computes the cumulative sample standard |\n| | deviation and returns the square root of |\n| | the sample variance. |\n+--------------------------------+-------------------------------------------+\n| SUM() | Sum of expression across all input |\n| | values. |\n+--------------------------------+-------------------------------------------+\n| VARIANCE() VAR_POP() | Population variance of the input values |\n| | (square of the population standard |\n| | deviation). |\n+--------------------------------+-------------------------------------------+\n| VAR_SAMP() | Sample variance of the input values |\n| | (square of the sample standard |\n| | deviation). |\n+--------------------------------+-------------------------------------------+\n\nExamples\n--------\n\nExample Schema\n--------------\n\nThe examples are all based on the following simplified sales opportunity table:\n\ncreate table opportunities (\nid int,\naccountName varchar(20),\nname varchar(128),\nowner varchar(7),\namount decimal(10,2),\ncloseDate date,\nstageName varchar(11)\n) engine=columnstore;\n\nSome example values are (thanks to https://www.mockaroo.com for sample data\ngeneration):\n\n+----+---------------+------+--------+---------+-------------+-------------+\n| id | accountName | name | owner | amount | closeDate | stageName |\n+----+---------------+------+--------+---------+-------------+-------------+\n| 1 | Browseblab | Mult | Bob | 26444.8 | 2016-10-20 | Negotiating |','','https://mariadb.com/kb/en/window-functions-columnstore-window-functions/');
-update help_topic set description = CONCAT(description, '\n| | | -lat | | | | |\n| | | ral | | | | |\n| | | exec | | | | |\n| | | tive | | | | |\n| | | func | | | | |\n| | | ion | | | | |\n+----+---------------+------+--------+---------+-------------+-------------+\n| 2 | Mita | Orga | Maria | 477878. | 2016-11-28 | ClosedWon |\n| | | ic | | 1 | | |\n| | | dema | | | | |\n| | | d-dr | | | | |\n| | | ven | | | | |\n| | | benc | | | | |\n| | | mark | | | | |\n+----+---------------+------+--------+---------+-------------+-------------+\n| 3 | Miboo | De-e | Olivie | 80181.7 | 2017-01-05 | ClosedWon |\n| | | gine | | | | |\n| | | red | | | | |\n| | | hybr | | | | |\n| | | d | | | | |\n| | | grou | | | | |\n| | | ware | | | | |\n+----+---------------+------+--------+---------+-------------+-------------+\n| 4 | Youbridge | Ente | Chris | 946245. | 2016-07-02 | ClosedWon |\n| | | pris | | 9 | | |\n| | | -wid | | | | |\n| | | | | | | |\n| | | bott | | | | |\n| | | m-li | | | | |\n| | | e | | | | |\n| | | Grap | | | | |\n| | | ic | | | | |\n| | | Inte | | | | |\n| | | face | | | | |\n+----+---------------+------+--------+---------+-------------+-------------+\n| 5 | Skyba | Reve | Maria | 696241. | 2017-02-17 | Negotiating |\n| | | se-e | | 2 | | |\n| | | gine | | | | |\n| | | red | | | | |\n| | | fres | | | | |\n| | | -thi | | | | |\n| | | king | | | | |\n| | | stan | | | | |\n| | | ardi | | | | |\n| | | atio | | | | |\n| | | | | | | |\n+----+---------------+------+--------+---------+-------------+-------------+\n| 6 | Eayo | Fund | Bob | 765605. | 2016-08-27 | Prospecting |\n| | | ment | | 2 | | |\n| | | l | | | | |\n| | | well | | | | |\n| | | modu | | | | |\n| | | ated | | | | |\n| | | arti | | | | |\n| | | icia | | | | |\n| | | | | | | |\n| | | inte | | | | |\n| | | lige | | | | |\n| | | ce | | | | |\n+----+---------------+------+--------+---------+-------------+-------------+\n| 7 | Yotz | Exte | Chris | 319624. | 2017-01-06 | ClosedLost |\n| | | ded | | 0 | | |\n| | | seco | | | | |\n| | | dary | | | | |\n| | | infr | | | | |\n| | | stru | | | | |\n| | | ture | | | | |\n+----+---------------+------+--------+---------+-------------+-------------+\n| 8 | Oloo | Conf | Chris | 321016. | 2017-03-08 | ClosedLost |\n| | | gura | | 6 | | |\n| | | le | | | | |\n| | | web- | | | | |\n| | | nabl | | | | |\n| | | d | | | | |\n| | | data | | | | |\n| | | ware | | | | |\n| | | ouse | | | | |\n+----+---------------+------+--------+---------+-------------+-------------+\n| 9 | Kaymbo | Mult | Bob | 690881. | 2017-01-02 | Developing |\n| | | -lat | | 1 | | |\n| | | ral | | | | |\n| | | web- | | | | |\n| | | nabl | | | | |\n| | | d | | | | |\n| | | defi | | | | |\n| | | itio | | | | |\n| | | | | | | |\n+----+---------------+------+--------+---------+-------------+-------------+\n| 10 | Rhyloo | Publ | Chris | 965477. | 2016-11-07 | Prospecting |\n| | | c-ke | | 4 | | |\n| | | | | | | |\n| | | cohe | | | | |\n| | | ent | | | | |\n| | | infr | | | | |\n| | | stru | | | | |\n| | | ture | | | | |\n+----+---------------+------+--------+---------+-------------+-------------+\n\nThe schema, sample data, and queries are available as an attachment to this\narticle.\n\nCumulative Sum and Running Max Example\n--------------------------------------\n\nWindow functions can be used to achieve cumulative / running calculations on a\ndetail report. In this case a won opportunity report for a 7 day period adds\ncolumns to show the accumulated won amount as well as the current highest\nopportunity amount in preceding rows.\n\nselect owner, \naccountName, \nCloseDate, \namount, \nsum(amount) over (order by CloseDate rows between unbounded preceding and\ncurrent row) cumeWon, \nmax(amount) over (order by CloseDate rows between unbounded preceding and\ncurrent row) runningMax\nfrom opportunities \nwhere stageName=\'ClosedWon\' \nand closeDate >= \'2016-10-02\' and closeDate <= \'2016-10-09\' \norder by CloseDate;\n\nwith example results:\n\n+--------+---------------+-------------+---------+----------+--------------+\n| owner | accountName | CloseDate | amount | cumeWon | runningMax |\n+--------+---------------+-------------+---------+----------+--------------+\n| Bill | Babbleopia | 2016-10-02 | 437636. | 437636.4 | 437636.47 |\n| | | | 7 | | |\n+--------+---------------+-------------+---------+----------+--------------+\n| Bill | Thoughtworks | 2016-10-04 | 146086. | 583722.9 | 437636.47 |\n| | | | 1 | | |\n+--------+---------------+-------------+---------+----------+--------------+\n| Olivie | Devpulse | 2016-10-05 | 834235. | 1417958. | 834235.93 |\n| | | | 3 | 1 | |\n+--------+---------------+-------------+---------+----------+--------------+\n| Chris | Linkbridge | 2016-10-07 | 539977. | 2458738. | 834235.93 |\n| | | | 5 | 5 | |\n+--------+---------------+-------------+---------+----------+--------------+\n| Olivie | Trupe | 2016-10-07 | 500802. | 1918761. | 834235.93 |\n| | | | 9 | 0 | |\n+--------+---------------+-------------+---------+----------+--------------+\n| Bill | Latz | 2016-10-08 | 857254. | 3315993. | 857254.87 |\n| | | | 7 | 2 | |\n+--------+---------------+-------------+---------+----------+--------------+\n| Chris | Avamm | 2016-10-09 | 699566. | 4015560. | 857254.87 |\n| | | | 6 | 8 | |\n+--------+---------------+-------------+---------+----------+--------------+\n\nPartitioned Cumulative Sum and Running Max Example\n--------------------------------------------------\n\nThe above example can be partitioned, so that the window functions are over a\nparticular field grouping such as owner and accumulate within that grouping.\nThis is achieved by adding the syntax \"partition by <columns>\" in the window\nfunction clause.\n\nselect owner, \naccountName, \nCloseDate, \namount, \nsum(amount) over (partition by owner order by CloseDate rows between unbounded\npreceding and current row) cumeWon, \nmax(amount) over (partition by owner order by CloseDate rows between unbounded\npreceding and current row) runningMax \nfrom opportunities \nwhere stageName=\'ClosedWon\' \nand closeDate >= \'2016-10-02\' and closeDate <= \'2016-10-09\' \norder by owner, CloseDate;\n\nwith example results:\n\n+--------+---------------+-------------+---------+----------+--------------+\n| owner | accountName | CloseDate | amount | cumeWon | runningMax |\n+--------+---------------+-------------+---------+----------+--------------+\n| Bill | Babbleopia | 2016-10-02 | 437636. | 437636.4 | 437636.47 |\n| | | | 7 | | |\n+--------+---------------+-------------+---------+----------+--------------+\n| Bill | Thoughtworks | 2016-10-04 | 146086. | 583722.9 | 437636.47 |\n| | | | 1 | | |\n+--------+---------------+-------------+---------+----------+--------------+\n| Bill | Latz | 2016-10-08 | 857254. | 1440977. | 857254.87 |\n| | | | 7 | 5 | |\n+--------+---------------+-------------+---------+----------+--------------+\n| Chris | Linkbridge | 2016-10-07 | 539977. | 539977.4 | 539977.45 |\n| | | | 5 | | |\n+--------+---------------+-------------+---------+----------+--------------+\n| Chris | Avamm | 2016-10-09 | 699566. | 1239544. | 699566.86 |\n| | | | 6 | 1 | |\n+--------+---------------+-------------+---------+----------+--------------+\n| Olivie | Devpulse | 2016-10-05 | 834235. | 834235.9 | 834235.93 |\n| | | | 3 | | |\n+--------+---------------+-------------+---------+----------+--------------+\n| Olivie | Trupe | 2016-10-07 | 500802. | 1335038. | 834235.93 |\n| | | | 9 | 2 | |\n+--------+---------------+-------------+---------+----------+--------------+\n\nRanking / Top Results\n---------------------\n\nThe rank window function allows for ranking or assigning a numeric order value\nbased on the window function definition. Using the Rank() function will result\nin the same value for ties / equal values and the next rank value skipped. The\nDense_Rank() function behaves similarly except the next consecutive number is\nused after a tie rather than skipped. The Row_Number() function will provide a\nunique ordering value. The example query shows the Rank() function being\napplied to rank sales reps by the number of opportunities for Q4 2016.\n\nselect owner, \nwonCount, \nrank() over (order by wonCount desc) rank \nfrom (\n select owner,\n count(*) wonCount\n from opportunities\n where stageName=\'ClosedWon\'\n and closeDate >= \'2016-10-01\' and closeDate < \'2016-12-31\'\n group by owner\n) t\norder by rank;\n\nwith example results (note the query is technically incorrect by using\ncloseDate < \'2016-12-31\' however this creates a tie scenario for illustrative\npurposes):\n\n+----------------------+----------------------------------+------------------+\n| owner | wonCount | rank |\n+----------------------+----------------------------------+------------------+\n| Bill | 19 | 1 |\n+----------------------+----------------------------------+------------------+\n| Chris | 15 | 2 |') WHERE help_topic_id = 793;
-update help_topic set description = CONCAT(description, '\n+----------------------+----------------------------------+------------------+\n| Maria | 14 | 3 |\n+----------------------+----------------------------------+------------------+\n| Bob | 14 | 3 |\n+----------------------+----------------------------------+------------------+\n| Olivier | 10 | 5 |\n+----------------------+----------------------------------+------------------+\n\nIf the dense_rank function is used the rank values would be 1,2,3,3,4 and for\nthe row_number function the values would be 1,2,3,4,5.\n\nFirst and Last Values\n---------------------\n\nThe first_value and last_value functions allow determining the first and last\nvalues of a given range. Combined with a group by this allows summarizing\nopening and closing values. The example shows a more complex case where\ndetailed information is presented for first and last opportunity by quarter.\n\nselect a.year, \na.quarter, \nf.accountName firstAccountName, \nf.owner firstOwner, \nf.amount firstAmount, \nl.accountName lastAccountName, \nl.owner lastOwner, \nl.amount lastAmount \nfrom (\n select year,\n quarter,\n min(firstId) firstId,\n min(lastId) lastId\n from (\n select year(closeDate) year,\n quarter(closeDate) quarter,\n first_value(id) over (partition by year(closeDate), quarter(closeDate)\norder by closeDate rows between unbounded preceding and current row) firstId, \n last_value(id) over (partition by year(closeDate), quarter(closeDate)\norder by closeDate rows between current row and unbounded following) lastId \n from opportunities where stageName=\'ClosedWon\'\n ) t\n group by year, quarter order by year,quarter\n) a \njoin opportunities f on a.firstId = f.id \njoin opportunities l on a.lastId = l.id \norder by year, quarter;\n\nwith example results:\n\n+----+------+------------+--------+---------+-----------+-------+--------+\n| ye | quar | firstAccou | firstO | firstAm | lastAccou | lastO | lastAm |\n| r | er | tName | ner | unt | tName | ner | unt |\n+----+------+------------+--------+---------+-----------+-------+--------+\n| 20 | 3 | Skidoo | Bill | 523295. | Skipstorm | Bill | 151420 |\n| 6 | | | | 7 | | | 86 |\n+----+------+------------+--------+---------+-----------+-------+--------+\n| 20 | 4 | Skimia | Chris | 961513. | Avamm | Maria | 112493 |\n| 6 | | | | 9 | | | 65 |\n+----+------+------------+--------+---------+-----------+-------+--------+\n| 20 | 1 | Yombu | Bob | 536875. | Skaboo | Chris | 270273 |\n| 7 | | | | 1 | | | 08 |\n+----+------+------------+--------+---------+-----------+-------+--------+\n\nPrior and Next Example\n----------------------\n\nSometimes it useful to understand the previous and next values in the context\nof a given row. The lag and lead window functions provide this capability. By\ndefault the offset is one providing the prior or next value but can also be\nprovided to get a larger offset. The example query is a report of\nopportunities by account name showing the opportunity amount, and the prior\nand next opportunity amount for that account by close date.\n\nselect accountName, \ncloseDate, \namount currentOppAmount, \nlag(amount) over (partition by accountName order by closeDate) priorAmount,\nlead(amount) over (partition by accountName order by closeDate) nextAmount \nfrom opportunities \norder by accountName, closeDate \nlimit 9;\n\nwith example results:\n\n+--------------+-----------+-------------------+--------------+-------------+\n| accountName | closeDate | currentOppAmount | priorAmount | nextAmount |\n+--------------+-----------+-------------------+--------------+-------------+\n| Abata | 2016-09-1 | 645098.45 | NULL | 161086.82 |\n| | | | | |\n+--------------+-----------+-------------------+--------------+-------------+\n| Abata | 2016-10-1 | 161086.82 | 645098.45 | 350235.75 |\n| | | | | |\n+--------------+-----------+-------------------+--------------+-------------+\n| Abata | 2016-12-1 | 350235.75 | 161086.82 | 878595.89 |\n| | | | | |\n+--------------+-----------+-------------------+--------------+-------------+\n| Abata | 2016-12-3 | 878595.89 | 350235.75 | 922322.39 |\n| | | | | |\n+--------------+-----------+-------------------+--------------+-------------+\n| Abata | 2017-01-2 | 922322.39 | 878595.89 | NULL |\n| | | | | |\n+--------------+-----------+-------------------+--------------+-------------+\n| Abatz | 2016-10-1 | 795424.15 | NULL | NULL |\n| | | | | |\n+--------------+-----------+-------------------+--------------+-------------+\n| Agimba | 2016-07-0 | 288974.84 | NULL | 914461.49 |\n| | | | | |\n+--------------+-----------+-------------------+--------------+-------------+\n| Agimba | 2016-09-0 | 914461.49 | 288974.84 | 176645.52 |\n| | | | | |\n+--------------+-----------+-------------------+--------------+-------------+\n| Agimba | 2016-09-2 | 176645.52 | 914461.49 | NULL |\n| | | | | |\n+--------------+-----------+-------------------+--------------+-------------+\n\nQuartiles Example\n-----------------\n\nThe NTile window function allows for breaking up a data set into portions\nassigned a numeric value to each portion of the range. NTile(4) breaks the\ndata up into quartiles (4 sets). The example query produces a report of all\nopportunities summarizing the quartile boundaries of amount values.\n\nselect t.quartile, \nmin(t.amount) min, \nmax(t.amount) max \nfrom (\n select amount,\n ntile(4) over (order by amount asc) quartile\n from opportunities\n where closeDate >= \'2016-10-01\' and closeDate <= \'2016-12-31\'\n ) t\ngroup by quartile \norder by quartile;\n\nWith example results:\n\n+-----------------------------------------+----------------+----------------+\n| quartile | min | max |\n+-----------------------------------------+----------------+----------------+\n| 1 | 6337.15 | 287634.01 |\n+-----------------------------------------+----------------+----------------+\n| 2 | 288796.14 | 539977.45 |\n+-----------------------------------------+----------------+----------------+\n| 3 | 540070.04 | 748727.51 |\n+-----------------------------------------+----------------+----------------+\n| 4 | 753670.77 | 998864.47 |\n+-----------------------------------------+----------------+----------------+\n\nPercentile Example\n------------------\n\nThe percentile functions have a slightly different syntax from other window\nfunctions as can be seen in the example below. These functions can be only\napplied against numeric values. The argument to the function is the percentile\nto evaluate. Following \'within group\' is the sort expression which indicates\nthe sort column and optionally order. Finally after \'over\' is an optional\npartition by clause, for no partition clause use \'over ()\'. The example below\nutilizes the value 0.5 to calculate the median opportunity amount in the rows.\nThe values differ sometimes because percentile_cont will return the average of\nthe 2 middle rows for an even data set while percentile_desc returns the first\nencountered in the sort.\n\nselect owner, \naccountName, \nCloseDate, \namount,\npercentile_cont(0.5) within group (order by amount) over (partition by owner)\npct_cont,\npercentile_disc(0.5) within group (order by amount) over (partition by owner)\npct_disc\nfrom opportunities \nwhere stageName=\'ClosedWon\' \nand closeDate >= \'2016-10-02\' and closeDate <= \'2016-10-09\' \norder by owner, CloseDate;\n\nWith example results:\n\n+--------+----------------+-------------+---------+------------+------------+\n| owner | accountName | CloseDate | amount | pct_cont | pct_disc |\n+--------+----------------+-------------+---------+------------+------------+\n| Bill | Babbleopia | 2016-10-02 | 437636. | 437636.470 | 437636.47 |\n| | | | 7 | 000000 | |\n+--------+----------------+-------------+---------+------------+------------+\n| Bill | Thoughtworks | 2016-10-04 | 146086. | 437636.470 | 437636.47 |\n| | | | 1 | 000000 | |\n+--------+----------------+-------------+---------+------------+------------+\n| Bill | Latz | 2016-10-08 | 857254. | 437636.470 | 437636.47 |\n| | | | 7 | 000000 | |\n+--------+----------------+-------------+---------+------------+------------+\n| Chris | Linkbridge | 2016-10-07 | 539977. | 619772.155 | 539977.45 |\n| | | | 5 | 000000 | |\n+--------+----------------+-------------+---------+------------+------------+\n| Chris | Avamm | 2016-10-09 | 699566. | 619772.155 | 539977.45 |\n| | | | 6 | 000000 | |\n+--------+----------------+-------------+---------+------------+------------+\n| Olivie | Devpulse | 2016-10-05 | 834235. | 667519.110 | 500802.29 |\n| | | | 3 | 000000 | |\n+--------+----------------+-------------+---------+------------+------------+\n| Olivie | Trupe | 2016-10-07 | 500802. | 667519.110 | 500802.29 |\n| | | | 9 | 000000 | |\n+--------+----------------+-------------+---------+------------+------------+\n\nURL: https://mariadb.com/kb/en/window-functions-columnstore-window-functions/') WHERE help_topic_id = 793;
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (794,41,'Window Frames','Syntax\n------\n\nframe_clause:\n {ROWS | RANGE} {frame_border | BETWEEN frame_border AND frame_border}\n\nframe_border:\n | UNBOUNDED PRECEDING\n | UNBOUNDED FOLLOWING\n | CURRENT ROW\n | expr PRECEDING\n | expr FOLLOWING\n\nDescription\n-----------\n\nA basic overview of window functions is described in Window Functions\nOverview. Window frames expand this functionality by allowing the function to\ninclude a specified a number of rows around the current row.\n\nThese include:\n\n* All rows before the current row (UNBOUNDED PRECEDING), for example RANGE\nBETWEEN UNBOUNDED PRECEDING AND CURRENT ROW\n* All rows after the current row (UNBOUNDED FOLLOWING), for example RANGE\nBETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING\n* A set number of rows before the current row (expr PRECEDING) for example\nRANGE BETWEEN 6 PRECEDING AND CURRENT ROW\n* A set number of rows after the current row (expr PRECEDING AND expr\nFOLLOWING) for example RANGE BETWEEN CURRENT ROW AND 2 FOLLOWING\n* A specified number of rows both before and after the current row, for\nexample RANGE BETWEEN 6 PRECEDING AND 3 FOLLOWING\n\nThe following functions operate on window frames:\n\n* AVG\n* BIT_AND\n* BIT_OR\n* BIT_XOR\n* COUNT\n* LEAD\n* MAX\n* MIN\n* NTILE\n* STD\n* STDDEV\n* STDDEV_POP\n* STDDEV_SAMP\n* SUM\n* VAR_POP\n* VAR_SAMP\n* VARIANCE\n\nWindow frames are determined by the frame_clause in the window function\nrequest.\n\nTake the following example:\n\nCREATE TABLE `student_test` (\n name char(10),\n test char(10),\n score tinyint(4)\n);\n\nINSERT INTO student_test VALUES \n (\'Chun\', \'SQL\', 75), (\'Chun\', \'Tuning\', 73),\n (\'Esben\', \'SQL\', 43), (\'Esben\', \'Tuning\', 31),\n (\'Kaolin\', \'SQL\', 56), (\'Kaolin\', \'Tuning\', 88),\n (\'Tatiana\', \'SQL\', 87);\n\nSELECT name, test, score, SUM(score) \n OVER () AS total_score\n FROM student_test;\n+---------+--------+-------+-------------+\n| name | test | score | total_score |\n+---------+--------+-------+-------------+\n| Chun | SQL | 75 | 453 |\n| Chun | Tuning | 73 | 453 |\n| Esben | SQL | 43 | 453 |\n| Esben | Tuning | 31 | 453 |\n| Kaolin | SQL | 56 | 453 |\n| Kaolin | Tuning | 88 | 453 |\n| Tatiana | SQL | 87 | 453 |\n+---------+--------+-------+-------------+\n\nBy not specifying an OVER clause, the SUM function is run over the entire\ndataset. However, if we specify an ORDER BY condition based on score (and\norder the entire result in the same way for clarity), the following result is\nreturned:\n\nSELECT name, test, score, SUM(score) \n OVER (ORDER BY score) AS total_score\n FROM student_test ORDER BY score;\n+---------+--------+-------+-------------+\n| name | test | score | total_score |\n+---------+--------+-------+-------------+\n| Esben | Tuning | 31 | 31 |\n| Esben | SQL | 43 | 74 |\n| Kaolin | SQL | 56 | 130 |\n| Chun | Tuning | 73 | 203 |\n| Chun | SQL | 75 | 278 |\n| Tatiana | SQL | 87 | 365 |\n| Kaolin | Tuning | 88 | 453 |\n+---------+--------+-------+-------------+\n\nThe total_score column represents a running total of the current row, and all\nprevious rows. The window frame in this example expands as the function\nproceeds.\n\nThe above query makes use of the default to define the window frame. It could\nbe written explicitly as follows:\n\nSELECT name, test, score, SUM(score) \n OVER (ORDER BY score RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS\ntotal_score \n FROM student_test ORDER BY score;\n+---------+--------+-------+-------------+\n| name | test | score | total_score |\n+---------+--------+-------+-------------+\n| Esben | Tuning | 31 | 31 |\n| Esben | SQL | 43 | 74 |\n| Kaolin | SQL | 56 | 130 |\n| Chun | Tuning | 73 | 203 |\n| Chun | SQL | 75 | 278 |\n| Tatiana | SQL | 87 | 365 |\n| Kaolin | Tuning | 88 | 453 |\n+---------+--------+-------+-------------+\n\nLet\'s look at some alternatives:\n\nFirstly, applying the window function to the current row and all following\nrows can be done with the use of UNBOUNDED FOLLOWING:\n\nSELECT name, test, score, SUM(score) \n OVER (ORDER BY score RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) AS\ntotal_score \n FROM student_test ORDER BY score;\n+---------+--------+-------+-------------+\n| name | test | score | total_score |\n+---------+--------+-------+-------------+\n| Esben | Tuning | 31 | 453 |\n| Esben | SQL | 43 | 422 |\n| Kaolin | SQL | 56 | 379 |\n| Chun | Tuning | 73 | 323 |\n| Chun | SQL | 75 | 250 |\n| Tatiana | SQL | 87 | 175 |\n| Kaolin | Tuning | 88 | 88 |\n+---------+--------+-------+-------------+\n\nIt\'s possible to specify a number of rows, rather than the entire unbounded\nfollowing or preceding set. The following example takes the current row, as\nwell as the previous row:\n\nSELECT name, test, score, SUM(score) \n OVER (ORDER BY score ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS\ntotal_score \n FROM student_test ORDER BY score;\n+---------+--------+-------+-------------+\n| name | test | score | total_score |\n+---------+--------+-------+-------------+\n| Esben | Tuning | 31 | 31 |\n| Esben | SQL | 43 | 74 |\n| Kaolin | SQL | 56 | 99 |\n| Chun | Tuning | 73 | 129 |\n| Chun | SQL | 75 | 148 |\n| Tatiana | SQL | 87 | 162 |\n| Kaolin | Tuning | 88 | 175 |\n+---------+--------+-------+-------------+\n\nThe current row and the following row:\n\nSELECT name, test, score, SUM(score) \n OVER (ORDER BY score ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) AS\ntotal_score \n FROM student_test ORDER BY score;\n+---------+--------+-------+-------------+\n| name | test | score | total_score |\n+---------+--------+-------+-------------+\n| Esben | Tuning | 31 | 74 |\n| Esben | SQL | 43 | 130 |\n| Kaolin | SQL | 56 | 172 |\n| Chun | Tuning | 73 | 204 |\n| Chun | SQL | 75 | 235 |\n| Tatiana | SQL | 87 | 250 |\n| Kaolin | Tuning | 88 | 175 |\n+---------+--------+-------+-------------+\n\nURL: https://mariadb.com/kb/en/window-frames/','','https://mariadb.com/kb/en/window-frames/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (795,42,'SPIDER_BG_DIRECT_SQL','Syntax\n------\n\nSPIDER_BG_DIRECT_SQL(\'sql\', \'tmp_table_list\', \'parameters\')\n\nDescription\n-----------\n\nExecutes the given SQL statement in the background on the remote server, as\ndefined in the parameters listing. If the query returns a result-set, it\nsttores the results in the given temporary table. When the given SQL statement\nexecutes successfully, this function returns the number of called UDF\'s. It\nreturns 0 when the given SQL statement fails.\n\nThis function is a UDF installed with the Spider storage engine.\n\nExamples\n--------\n\nSELECT SPIDER_BG_DIRECT_SQL(\'SELECT * FROM example_table\', \'\', \n \'srv \"node1\", port \"8607\"\') AS \"Direct Query\";\n+--------------+\n| Direct Query | \n+--------------+\n| 1 |\n+--------------+\n\nParameters\n----------\n\nerror_rw_mode\n-------------\n\n* Description: Returns empty results on network error.\n0 : Return error on getting network error.\n1: Return 0 records on getting network error.\n\n* Default Table Value: 0\n* DSN Parameter Name: erwm\n\nURL: https://mariadb.com/kb/en/spider_bg_direct_sql/','','https://mariadb.com/kb/en/spider_bg_direct_sql/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (796,42,'SPIDER_COPY_TABLES','Syntax\n------\n\nSPIDER_COPY_TABLES(spider_table_name, \n source_link_id, destination_link_id_list [,parameters])\n\nDescription\n-----------\n\nA UDF installed with the Spider Storage Engine, this function copies table\ndata from source_link_id to destination_link_id_list. The service does not\nneed to be stopped in order to copy.\n\nIf the Spider table is partitioned, the name must be of the format\ntable_name#P#partition_name. The partition name can be viewed in the\nmysql.spider_tables table, for example:\n\nSELECT table_name FROM mysql.spider_tables;\n+-------------+\n| table_name |\n+-------------+\n| spt_a#P#pt1 |\n| spt_a#P#pt2 |\n| spt_a#P#pt3 |\n+-------------+\n\nReturns 1 if the data was copied successfully, or 0 if copying the data failed.\n\nURL: https://mariadb.com/kb/en/spider_copy_tables/','','https://mariadb.com/kb/en/spider_copy_tables/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (797,42,'SPIDER_DIRECT_SQL','Syntax\n------\n\nSPIDER_DIRECT_SQL(\'sql\', \'tmp_table_list\', \'parameters\')\n\nDescription\n-----------\n\nA UDF installed with the Spider Storage Engine, this function is used to\nexecute the SQL string sql on the remote server, as defined in parameters. If\nany resultsets are returned, they are stored in the tmp_table_list.\n\nThe function returns 1 if the SQL executes successfully, or 0 if it fails.\n\nExamples\n--------\n\nSELECT SPIDER_DIRECT_SQL(\'SELECT * FROM s\', \'\', \'srv \"node1\", port \"8607\"\');\n+----------------------------------------------------------------------+\n| SPIDER_DIRECT_SQL(\'SELECT * FROM s\', \'\', \'srv \"node1\", port \"8607\"\') |\n+----------------------------------------------------------------------+\n| 1 |\n+----------------------------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/spider_direct_sql/','','https://mariadb.com/kb/en/spider_direct_sql/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (798,42,'SPIDER_FLUSH_TABLE_MON_CACHE','Syntax\n------\n\nSPIDER_FLUSH_TABLE_MON_CACHE()\n\nDescription\n-----------\n\nA UDF installed with the Spider Storage Engine, this function is used for\nrefreshing monitoring server information. It returns a value of 1.\n\nExamples\n--------\n\nSELECT SPIDER_FLUSH_TABLE_MON_CACHE();\n+--------------------------------+\n| SPIDER_FLUSH_TABLE_MON_CACHE() |\n+--------------------------------+\n| 1 |\n+--------------------------------+\n\nURL: https://mariadb.com/kb/en/spider_flush_table_mon_cache/','','https://mariadb.com/kb/en/spider_flush_table_mon_cache/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (799,43,'COLUMN_ADD','Syntax\n------\n\nCOLUMN_ADD(dyncol_blob, column_nr, value [as type], [column_nr, value [as\ntype]]...);\nCOLUMN_ADD(dyncol_blob, column_name, value [as type], [column_name, value [as\ntype]]...);\n\nDescription\n-----------\n\nAdds or updates dynamic columns.\n\n* dyncol_blob must be either a valid dynamic columns blob (for example,\nCOLUMN_CREATE returns such blob), or an empty string.\n* column_name specifies the name of the column to be added. If dyncol_blob\nalready has a column with this name, it will be overwritten.\n* value specifies the new value for the column. Passing a NULL value will\ncause the column to be deleted.\n* as type is optional. See #datatypes section for a discussion about types.\n\nThe return value is a dynamic column blob after the modifications.\n\nExamples\n--------\n\nUPDATE t1 SET dyncol_blob=COLUMN_ADD(dyncol_blob, \"column_name\", \"value\")\nWHERE id=1;\n\nNote: COLUMN_ADD() is a regular function (just like CONCAT()), hence, in order\nto update the value in the table you have to use the UPDATE ... SET\ndynamic_col=COLUMN_ADD(dynamic_col, ....) pattern.\n\nURL: https://mariadb.com/kb/en/column_add/','','https://mariadb.com/kb/en/column_add/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (800,43,'COLUMN_CHECK','Syntax\n------\n\nCOLUMN_CHECK(dyncol_blob);\n\nDescription\n-----------\n\nCheck if dyncol_blob is a valid packed dynamic columns blob. Return value of 1\nmeans the blob is valid, return value of 0 means it is not.\n\nRationale: Normally, one works with valid dynamic column blobs. Functions like\nCOLUMN_CREATE, COLUMN_ADD, COLUMN_DELETE always return valid dynamic column\nblobs. However, if a dynamic column blob is accidentally truncated, or\ntranscoded from one character set to another, it will be corrupted. This\nfunction can be used to check if a value in a blob field is a valid dynamic\ncolumn blob.\n\nURL: https://mariadb.com/kb/en/column_check/','','https://mariadb.com/kb/en/column_check/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (801,43,'COLUMN_CREATE','Syntax\n------\n\nCOLUMN_CREATE(column_nr, value [as type], [column_nr, value [as type]]...);\nCOLUMN_CREATE(column_name, value [as type], [column_name, value [as type]]...);\n\nDescription\n-----------\n\nReturns a dynamic columns blob that stores the specified columns with values.\n\nThe return value is suitable for\n\n* storing in a table\n* further modification with other dynamic columns functions\n\nThe as type part allows one to specify the value type. In most cases, this is\nredundant because MariaDB will be able to deduce the type of the value.\nExplicit type specification may be needed when the type of the value is not\napparent. For example, a literal \'2012-12-01\' has a CHAR type by default, one\nwill need to specify \'2012-12-01\' AS DATE to have it stored as a date. See\nDynamic Columns:Datatypes for further details.\n\nExamples\n--------\n\nINSERT INTO tbl SET dyncol_blob=COLUMN_CREATE(\"column_name\", \"value\");\n\nURL: https://mariadb.com/kb/en/column_create/','','https://mariadb.com/kb/en/column_create/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (802,43,'COLUMN_DELETE','Syntax\n------\n\nCOLUMN_DELETE(dyncol_blob, column_nr, column_nr...);\nCOLUMN_DELETE(dyncol_blob, column_name, column_name...);\n\nDescription\n-----------\n\nDeletes a dynamic column with the specified name. Multiple names can be given.\nThe return value is a dynamic column blob after the modification.\n\nURL: https://mariadb.com/kb/en/column_delete/','','https://mariadb.com/kb/en/column_delete/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (803,43,'COLUMN_EXISTS','Syntax\n------\n\nCOLUMN_EXISTS(dyncol_blob, column_nr);\nCOLUMN_EXISTS(dyncol_blob, column_name);\n\nDescription\n-----------\n\nChecks if a column with name column_name exists in dyncol_blob. If yes, return\n1, otherwise return 0. See dynamic columns for more information.\n\nURL: https://mariadb.com/kb/en/column_exists/','','https://mariadb.com/kb/en/column_exists/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (804,43,'COLUMN_GET','Syntax\n------\n\nCOLUMN_GET(dyncol_blob, column_nr as type);\nCOLUMN_GET(dyncol_blob, column_name as type);\n\nDescription\n-----------\n\nGets the value of a dynamic column by its name. If no column with the given\nname exists, NULL will be returned.\n\ncolumn_name as type requires that one specify the datatype of the dynamic\ncolumn they are reading.\n\nThis may seem counter-intuitive: why would one need to specify which datatype\nthey\'re retrieving? Can\'t the dynamic columns system figure the datatype from\nthe data being stored?\n\nThe answer is: SQL is a statically-typed language. The SQL interpreter needs\nto know the datatypes of all expressions before the query is run (for example,\nwhen one is using prepared statements and runs \"select COLUMN_GET(...)\", the\nprepared statement API requires the server to inform the client about the\ndatatype of the column being read before the query is executed and the server\ncan see what datatype the column actually has).\n\nLengths\n-------\n\nIf you\'re running queries like:\n\nSELECT COLUMN_GET(blob, \'colname\' as CHAR) ...\n\nwithout specifying a maximum length (i.e. using as CHAR, not as CHAR(n)),\nMariaDB will report the maximum length of the resultset column to be\n16,777,216. This may cause excessive memory usage in some client libraries,\nbecause they try to pre-allocate a buffer of maximum resultset width. To avoid\nthis problem, use CHAR(n) whenever you\'re using COLUMN_GET in the select list.\n\nSee Dynamic Columns:Datatypes for more information about datatypes.\n\nURL: https://mariadb.com/kb/en/column_get/','','https://mariadb.com/kb/en/column_get/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (805,43,'COLUMN_JSON','Syntax\n------\n\nCOLUMN_JSON(dyncol_blob)\n\nDescription\n-----------\n\nReturns a JSON representation of data in dyncol_blob. Can also be used to\ndisplay nested columns. See dynamic columns for more information.\n\nExample\n-------\n\nselect item_name, COLUMN_JSON(dynamic_cols) from assets;\n+-----------------+----------------------------------------+\n| item_name | COLUMN_JSON(dynamic_cols) |\n+-----------------+----------------------------------------+\n| MariaDB T-shirt | {\"size\":\"XL\",\"color\":\"blue\"} |\n| Thinkpad Laptop | {\"color\":\"black\",\"warranty\":\"3 years\"} |\n+-----------------+----------------------------------------+\n\nLimitation: COLUMN_JSON will decode nested dynamic columns at a nesting level\nof not more than 10 levels deep. Dynamic columns that are nested deeper than\n10 levels will be shown as BINARY string, without encoding.\n\nURL: https://mariadb.com/kb/en/column_json/','','https://mariadb.com/kb/en/column_json/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (806,43,'COLUMN_LIST','Syntax\n------\n\nCOLUMN_LIST(dyncol_blob);\n\nDescription\n-----------\n\nReturns a comma-separated list of column names. The names are quoted with\nbackticks.\n\nSee dynamic columns for more information.\n\nURL: https://mariadb.com/kb/en/column_list/','','https://mariadb.com/kb/en/column_list/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (807,44,'WSREP_LAST_SEEN_GTID','MariaDB starting with 10.4.2\n----------------------------\nWSREP_LAST_SEEN_GTID was added as part of Galera 4 in MariaDB 10.4.2.\n\nSyntax\n------\n\nWSREP_LAST_SEEN_GTID()\n\nDescription\n-----------\n\nReturns the Global Transaction ID of the most recent write transaction\nobserved by the client.\n\nThe result can be useful to determine the transaction to provide to\nWSREP_SYNC_WAIT_UPTO_GTID for waiting and unblocking purposes.\n\nURL: https://mariadb.com/kb/en/wsrep_last_seen_gtid/','','https://mariadb.com/kb/en/wsrep_last_seen_gtid/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (808,44,'WSREP_LAST_WRITTEN_GTID','MariaDB starting with 10.4.2\n----------------------------\nWSREP_LAST_WRITTEN_GTID was added as part of Galera 4 in MariaDB 10.4.2.\n\nSyntax\n------\n\nWSREP_LAST_WRITTEN_GTID()\n\nDescription\n-----------\n\nReturns the Global Transaction ID of the most recent write transaction\nperformed by the client.\n\nURL: https://mariadb.com/kb/en/wsrep_last_written_gtid/','','https://mariadb.com/kb/en/wsrep_last_written_gtid/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (809,44,'WSREP_SYNC_WAIT_UPTO_GTID','MariaDB starting with 10.4.2\n----------------------------\nWSREP_SYNC_WAIT_UPTO_GTID was added as part of Galera 4 in MariaDB 10.4.2.\n\nSyntax\n------\n\nWSREP_SYNC_WAIT_UPTO_GTID(gtid[,timeout])\n\nDescription\n-----------\n\nBlocks the client until the transaction specified by the given Global\nTransaction ID is applied and committed by the node.\n\nThe optional timeout argument can be used to specify a block timeout in\nseconds. If not provided, the timeout will be indefinite.\n\nReturns the node that applied and committed the Global Transaction ID,\nER_LOCAL_WAIT_TIMEOUT if the function is timed out before this, or\nER_WRONG_ARGUMENTS if the function is given an invalid GTID.\n\nThe result from WSREP_LAST_SEEN_GTID can be useful to determine the\ntransaction to provide to WSREP_SYNC_WAIT_UPTO_GTID for waiting and unblocking\npurposes.\n\nURL: https://mariadb.com/kb/en/wsrep_sync_wait_upto_gtid/','','https://mariadb.com/kb/en/wsrep_sync_wait_upto_gtid/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (810,45,'System-Versioned Tables','MariaDB supports temporal data tables in the form of system-versioning tables\n(allowing you to query and operate on historic data, discussed below),\napplication-time periods (allow you to query and operate on a temporal range\nof data), and bitemporal tables (which combine both system-versioning and\napplication-time periods).\n\nSystem-Versioned Tables\n-----------------------\n\nSystem-versioned tables store the history of all changes, not only data which\nis currently valid. This allows data analysis for any point in time, auditing\nof changes and comparison of data from different points in time. Typical uses\ncases are:\n\n* Forensic analysis & legal requirements to store data for N years.\n* Data analytics (retrospective, trends etc.), e.g. to get your staff\ninformation as of one year ago.\n* Point-in-time recovery - recover a table state as of particular point in\ntime.\n\nSystem-versioned tables were first introduced in the SQL:2011 standard.\n\nCreating a System-Versioned Table\n---------------------------------\n\nThe CREATE TABLE syntax has been extended to permit creating a\nsystem-versioned table. To be system-versioned, according to SQL:2011, a table\nmust have two generated columns, a period, and a special table option clause:\n\nCREATE TABLE t(\n x INT,\n start_timestamp TIMESTAMP(6) GENERATED ALWAYS AS ROW START,\n end_timestamp TIMESTAMP(6) GENERATED ALWAYS AS ROW END,\n PERIOD FOR SYSTEM_TIME(start_timestamp, end_timestamp)\n) WITH SYSTEM VERSIONING;\n\nIn MariaDB one can also use a simplified syntax:\n\nCREATE TABLE t (\n x INT\n) WITH SYSTEM VERSIONING;\n\nIn the latter case no extra columns will be created and they won\'t clutter the\noutput of, say, SELECT * FROM t. The versioning information will still be\nstored, and it can be accessed via the pseudo-columns ROW_START and ROW_END:\n\nSELECT x, ROW_START, ROW_END FROM t;\n\nAdding or Removing System Versioning To/From a Table\n----------------------------------------------------\n\nAn existing table can be altered to enable system versioning for it.\n\nCREATE TABLE t(\n x INT\n);\n\nALTER TABLE t ADD SYSTEM VERSIONING;\n\nSHOW CREATE TABLE t\\G\n*************************** 1. row ***************************\n Table: t\nCreate Table: CREATE TABLE `t` (\n `x` int(11) DEFAULT NULL\n) ENGINE=InnoDB DEFAULT CHARSET=latin1 WITH SYSTEM VERSIONING\n\nSimilarly, system versioning can be removed from a table:\n\nALTER TABLE t DROP SYSTEM VERSIONING;\n\nSHOW CREATE TABLE t\\G\n*************************** 1. row ***************************\n Table: t\nCreate Table: CREATE TABLE `t` (\n `x` int(11) DEFAULT NULL\n) ENGINE=InnoDB DEFAULT CHARSET=latin1\n\nOne can also add system versioning with all columns created explicitly:\n\nALTER TABLE t ADD COLUMN ts TIMESTAMP(6) GENERATED ALWAYS AS ROW START,\n ADD COLUMN te TIMESTAMP(6) GENERATED ALWAYS AS ROW END,\n ADD PERIOD FOR SYSTEM_TIME(ts, te),\n ADD SYSTEM VERSIONING;\n\nSHOW CREATE TABLE t\\G\n*************************** 1. row ***************************\n Table: t\nCreate Table: CREATE TABLE `t` (\n `x` int(11) DEFAULT NULL,\n `ts` timestamp(6) GENERATED ALWAYS AS ROW START,\n `te` timestamp(6) GENERATED ALWAYS AS ROW END,\n PERIOD FOR SYSTEM_TIME (`ts`, `te`)\n) ENGINE=InnoDB DEFAULT CHARSET=latin1 WITH SYSTEM VERSIONING\n\nInserting Data\n--------------\n\nWhen data is inserted into a system-versioned table, it is given a row_start\nvalue of the current timestamp, and a row_end value of\nFROM_UNIXTIME(2147483647.999999). The current timestamp can be adjusted by\nsetting the timestamp system variable, for example:\n\nSELECT NOW();\n+---------------------+\n| NOW() |\n+---------------------+\n| 2022-10-24 23:09:38 |\n+---------------------+\n\nINSERT INTO t VALUES(1);\n\nSET @@timestamp = UNIX_TIMESTAMP(\'2033-10-24\');\n\nINSERT INTO t VALUES(2);\n\nSET @@timestamp = default;\n\nINSERT INTO t VALUES(3);\n\nSELECT a,row_start,row_end FROM t;\n+------+----------------------------+----------------------------+\n| a | row_start | row_end |\n+------+----------------------------+----------------------------+\n| 1 | 2022-10-24 23:09:38.951347 | 2038-01-19 05:14:07.999999 |\n| 2 | 2033-10-24 00:00:00.000000 | 2038-01-19 05:14:07.999999 |\n| 3 | 2022-10-24 23:09:38.961857 | 2038-01-19 05:14:07.999999 |\n+------+----------------------------+----------------------------+\n\nQuerying Historical Data\n------------------------\n\nSELECT\n------\n\nTo query the historical data one uses the clause FOR SYSTEM_TIME directly\nafter the table name (before the table alias, if any). SQL:2011 provides three\nsyntactic extensions:\n\n* AS OF is used to see the table as it was at a specific point in time in the\npast:\n\nSELECT * FROM t FOR SYSTEM_TIME AS OF TIMESTAMP\'2016-10-09 08:07:06\';\n\n* BETWEEN start AND end will show all rows that were visible at any point\nbetween two specified points in time. It works inclusively, a row visible\nexactly at start or exactly at end will be shown too.\n\nSELECT * FROM t FOR SYSTEM_TIME BETWEEN (NOW() - INTERVAL 1 YEAR) AND NOW();\n\n* FROM start TO end will also show all rows that were visible at any point\nbetween two specified points in time, including start, but excluding end.\n\nSELECT * FROM t FOR SYSTEM_TIME FROM \'2016-01-01 00:00:00\' TO \'2017-01-01\n00:00:00\';\n\nAdditionally MariaDB implements a non-standard extension:\n\n* ALL will show all rows, historical and current.\n\nSELECT * FROM t FOR SYSTEM_TIME ALL;\n\nIf the FOR SYSTEM_TIME clause is not used, the table will show the current\ndata. This is usually the same as if one had specified FOR SYSTEM_TIME AS OF\nCURRENT_TIMESTAMP, unless one has adjusted the row_start value (until MariaDB\n10.11, only possible by setting the secure_timestamp variable). For example:\n\nCREATE OR REPLACE TABLE t (a int) WITH SYSTEM VERSIONING;\n\nSELECT NOW();\n+---------------------+\n| NOW() |\n+---------------------+\n| 2022-10-24 23:43:37 |\n+---------------------+\n\nINSERT INTO t VALUES (1);\n\nSET @@timestamp = UNIX_TIMESTAMP(\'2033-03-03\');\n\nINSERT INTO t VALUES (2);\n\nDELETE FROM t;\n\nSET @@timestamp = default;\n\nSELECT a, row_start, row_end FROM t FOR SYSTEM_TIME ALL;\n+------+----------------------------+----------------------------+\n| a | row_start | row_end |\n+------+----------------------------+----------------------------+\n| 1 | 2022-10-24 23:43:37.192725 | 2033-03-03 00:00:00.000000 |\n| 2 | 2033-03-03 00:00:00.000000 | 2033-03-03 00:00:00.000000 |\n+------+----------------------------+----------------------------+\n2 rows in set (0.000 sec)\n\nSELECT a, row_start, row_end FROM t FOR SYSTEM_TIME AS OF CURRENT_TIMESTAMP;\n+------+----------------------------+----------------------------+\n| a | row_start | row_end |\n+------+----------------------------+----------------------------+\n| 1 | 2022-10-24 23:43:37.192725 | 2033-03-03 00:00:00.000000 |\n+------+----------------------------+----------------------------+\n1 row in set (0.000 sec)\n\nSELECT a, row_start, row_end FROM t;\nEmpty set (0.001 sec)\n\nViews and Subqueries\n--------------------\n\nWhen a system-versioned tables is used in a view or in a subquery in the from\nclause, FOR SYSTEM_TIME can be used directly in the view or subquery body, or\n(non-standard) applied to the whole view when it\'s being used in a SELECT:\n\nCREATE VIEW v1 AS SELECT * FROM t FOR SYSTEM_TIME AS OF TIMESTAMP\'2016-10-09\n08:07:06\';\n\nOr\n\nCREATE VIEW v1 AS SELECT * FROM t;\nSELECT * FROM v1 FOR SYSTEM_TIME AS OF TIMESTAMP\'2016-10-09 08:07:06\';\n\nUse in Replication and Binary Logs\n----------------------------------\n\nTables that use system-versioning implicitly add the row_end column to the\nPrimary Key. While this is generally not an issue for most use cases, it can\nlead to problems when re-applying write statements from the binary log or in\nreplication environments, where a primary retries an SQL statement on the\nreplica.\n\nSpecifically, these writes include a value on the row_end column containing\nthe timestamp from when the write was initially made. The re-occurrence of the\nPrimary Key with the old system-versioning columns raises an error due to the\nduplication.\n\nTo mitigate this with MariaDB Replication, set the secure_timestamp system\nvariable to YES on the replica. When set, the replica uses its own system\nclock when applying to the row log, meaning that the primary can retry as many\ntimes as needed without causing a conflict. The retries generate new\nhistorical rows with new values for the row_start and row_end columns.\n\nTransaction-Precise History in InnoDB\n-------------------------------------\n\nA point in time when a row was inserted or deleted does not necessarily mean\nthat a change became visible at the same moment. With transactional tables, a\nrow might have been inserted in a long transaction, and became visible hours\nafter it was inserted.\n\nFor some applications — for example, when doing data analytics on one-year-old\ndata — this distinction does not matter much. For others — forensic analysis —\nit might be crucial.\n\nMariaDB supports transaction-precise history (only for the InnoDB storage\nengine) that allows seeing the data exactly as it would\'ve been seen by a new\nconnection doing a SELECT at the specified point in time — rows inserted\nbefore that point, but committed after will not be shown.\n\nTo use transaction-precise history, InnoDB needs to remember not timestamps,\nbut transaction identifier per row. This is done by creating generated columns\nas BIGINT UNSIGNED, not TIMESTAMP(6):\n\nCREATE TABLE t(\n x INT,\n start_trxid BIGINT UNSIGNED GENERATED ALWAYS AS ROW START,\n end_trxid BIGINT UNSIGNED GENERATED ALWAYS AS ROW END,\n PERIOD FOR SYSTEM_TIME(start_trxid, end_trxid)\n) WITH SYSTEM VERSIONING;\n\nThese columns must be specified explicitly, but they can be made INVISIBLE to\navoid cluttering SELECT * output.\n\nWhen one uses transaction-precise history, one can optionally use transaction\nidentifiers in the FOR SYSTEM_TIME clause:\n\nSELECT * FROM t FOR SYSTEM_TIME AS OF TRANSACTION 12345;\n\nThis will show the data, exactly as it was seen by the transaction with the\nidentifier 12345.\n\nStoring the History Separately\n------------------------------\n\nWhen the history is stored together with the current data, it increases the\nsize of the table, so current data queries — table scans and index searches —\nwill take more time, because they will need to skip over historical data. If\nmost queries on that table use only current data, it might make sense to store\nthe history separately, to reduce the overhead from versioning.\n\nThis is done by partitioning the table by SYSTEM_TIME. Because of the\npartition pruning optimization, all current data queries will only access one\npartition, the one that stores current data.\n\nThis example shows how to create such a partitioned table:\n\nCREATE TABLE t (x INT) WITH SYSTEM VERSIONING\n PARTITION BY SYSTEM_TIME (\n PARTITION p_hist HISTORY,\n PARTITION p_cur CURRENT\n );\n\nIn this example all history will be stored in the partition p_hist while all\ncurrent data will be in the partition p_cur. The table must have exactly one\ncurrent partition and at least one historical partition.\n\nPartitioning by SYSTEM_TIME also supports automatic partition rotation. One\ncan rotate historical partitions by time or by size. This example shows how to\nrotate partitions by size:\n\nCREATE TABLE t (x INT) WITH SYSTEM VERSIONING\n PARTITION BY SYSTEM_TIME LIMIT 100000 (\n PARTITION p0 HISTORY,\n PARTITION p1 HISTORY,\n PARTITION pcur CURRENT\n );\n\nMariaDB will start writing history rows into partition p0, and when it reaches\na size of 100000 rows, MariaDB will switch to partition p1. There are only two\nhistorical partitions, so when p1 overflows, MariaDB will issue a warning, but\nwill continue writing into it.\n\nSimilarly, one can rotate partitions by time:\n\nCREATE TABLE t (x INT) WITH SYSTEM VERSIONING\n PARTITION BY SYSTEM_TIME INTERVAL 1 WEEK (\n PARTITION p0 HISTORY,\n PARTITION p1 HISTORY,\n PARTITION p2 HISTORY,\n PARTITION pcur CURRENT\n );\n\nThis means that the history for the first week after the table was created\nwill be stored in p0. The history for the second week — in p1, and all later\nhistory will go into p2. One can see the exact rotation time for each\npartition in the INFORMATION_SCHEMA.PARTITIONS table.\n\nIt is possible to combine partitioning by SYSTEM_TIME and subpartitions:\n\nCREATE TABLE t (x INT) WITH SYSTEM VERSIONING\n PARTITION BY SYSTEM_TIME\n SUBPARTITION BY KEY (x)\n SUBPARTITIONS 4 (\n PARTITION ph HISTORY,\n PARTITION pc CURRENT\n );\n\nDefault Partitions\n------------------\n\nMariaDB starting with 10.5.0\n----------------------------\nSince partitioning by current and historical data is such a typical usecase,\nfrom MariaDB 10.5, it is possible to use a simplified statement to do so. For\nexample, instead of\n\nCREATE TABLE t (x INT) WITH SYSTEM VERSIONING \n PARTITION BY SYSTEM_TIME (\n PARTITION p0 HISTORY,\n PARTITION pn CURRENT\n);\n\nyou can use\n\nCREATE TABLE t (x INT) WITH SYSTEM VERSIONING \n PARTITION BY SYSTEM_TIME;\n\nYou can also specify the number of partitions, which is useful if you want to\nrotate history by time, for example:\n\nCREATE TABLE t (x INT) WITH SYSTEM VERSIONING \n PARTITION BY SYSTEM_TIME\n INTERVAL 1 MONTH\n PARTITIONS 12;\n\nSpecifying the number of partitions without specifying a rotation condition\nwill result in a warning:\n\nCREATE OR REPLACE TABLE t (x INT) WITH SYSTEM VERSIONING\n PARTITION BY SYSTEM_TIME PARTITIONS 12;\nQuery OK, 0 rows affected, 1 warning (0.518 sec)\n\nWarning (Code 4115): Maybe missing parameters: no rotation condition for\nmultiple HISTORY partitions.\n\nwhile specifying only 1 partition will result in an error:\n\nCREATE OR REPLACE TABLE t (x INT) WITH SYSTEM VERSIONING\n PARTITION BY SYSTEM_TIME PARTITIONS 1;\nERROR 4128 (HY000): Wrong partitions for `t`: must have at least one HISTORY\nand exactly one last CURRENT\n\nAutomatically Creating Partitions\n---------------------------------\n\nMariaDB starting with 10.9.1\n----------------------------\nFrom MariaDB 10.9.1, the AUTO keyword can be used to automatically create\nhistory partitions.\n\nFor example\n\nCREATE TABLE t1 (x int) WITH SYSTEM VERSIONING\n PARTITION BY SYSTEM_TIME INTERVAL 1 HOUR AUTO;\n','','https://mariadb.com/kb/en/system-versioned-tables/');
-update help_topic set description = CONCAT(description, '\nCREATE TABLE t1 (x int) WITH SYSTEM VERSIONING\n PARTITION BY SYSTEM_TIME INTERVAL 1 MONTH\n STARTS \'2021-01-01 00:00:00\' AUTO PARTITIONS 12;\n\nCREATE TABLE t1 (x int) WITH SYSTEM VERSIONING\n PARTITION BY SYSTEM_TIME LIMIT 1000 AUTO;\n\nOr with explicit partitions:\n\nCREATE TABLE t1 (x int) WITH SYSTEM VERSIONING\n PARTITION BY SYSTEM_TIME INTERVAL 1 HOUR AUTO\n (PARTITION p0 HISTORY, PARTITION pn CURRENT);\n\nTo disable or enable auto-creation one can use ALTER TABLE by adding or\nremoving AUTO from the partitioning specification:\n\nCREATE TABLE t1 (x int) WITH SYSTEM VERSIONING\n PARTITION BY SYSTEM_TIME INTERVAL 1 HOUR AUTO;\n\n# Disables auto-creation:\nALTER TABLE t1 PARTITION BY SYSTEM_TIME INTERVAL 1 HOUR;\n\n# Enables auto-creation:\nALTER TABLE t1 PARTITION BY SYSTEM_TIME INTERVAL 1 HOUR AUTO;\n\nIf the rest of the partitioning specification is identical to CREATE TABLE, no\nrepartitioning will be done (for details see MDEV-27328).\n\nRemoving Old History\n--------------------\n\nBecause it stores all the history, a system-versioned table might grow very\nlarge over time. There are many options to trim down the space and remove the\nold history.\n\nOne can completely drop the versioning from the table and add it back again,\nthis will delete all the history:\n\nALTER TABLE t DROP SYSTEM VERSIONING;\nALTER TABLE t ADD SYSTEM VERSIONING;\n\nIt might be a rather time-consuming operation, though, as the table will need\nto be rebuilt, possibly twice (depending on the storage engine).\n\nAnother option would be to use partitioning and drop some of historical\npartitions:\n\nALTER TABLE t DROP PARTITION p0;\n\nNote, that one cannot drop a current partition or the only historical\npartition.\n\nAnd the third option; one can use a variant of the DELETE statement to prune\nthe history:\n\nDELETE HISTORY FROM t;\n\nor only old history up to a specific point in time:\n\nDELETE HISTORY FROM t BEFORE SYSTEM_TIME \'2016-10-09 08:07:06\';\n\nor to a specific transaction (with BEFORE SYSTEM_TIME TRANSACTION xxx).\n\nTo protect the integrity of the history, this statement requires a special\nDELETE HISTORY privilege.\n\nCurrently, using the DELETE HISTORY statement with a BEFORE SYSTEM_TIME\ngreater than the ROW_END of the active records (as a TIMESTAMP, this has a\nmaximum value of \'2038-01-19 03:14:07\' UTC) will result in the historical\nrecords being dropped, and the active records being deleted and moved to\nhistory. See MDEV-25468.\n\nPrior to MariaDB 10.4.5, the TRUNCATE TABLE statement drops all historical\nrecords from a system-versioned-table.\n\nFrom MariaDB 10.4.5, historic data is protected from TRUNCATE statements, as\nper the SQL standard, and an Error 4137 is instead raised:\n\nTRUNCATE t;\nERROR 4137 (HY000): System-versioned tables do not support TRUNCATE TABLE\n\nExcluding Columns From Versioning\n---------------------------------\n\nAnother MariaDB extension allows to version only a subset of columns in a\ntable. This is useful, for example, if you have a table with user information\nthat should be versioned, but one column is, let\'s say, a login counter that\nis incremented often and is not interesting to version. Such a column can be\nexcluded from versioning by declaring it WITHOUT VERSIONING\n\nCREATE TABLE t (\n x INT,\n y INT WITHOUT SYSTEM VERSIONING\n) WITH SYSTEM VERSIONING;\n\nA column can also be declared WITH VERSIONING, that will automatically make\nthe table versioned. The statement below is equivalent to the one above:\n\nCREATE TABLE t (\n x INT WITH SYSTEM VERSIONING,\n y INT\n);\n\nChanges in other sections: https://mariadb.com/kb/en/create-table/\nhttps://mariadb.com/kb/en/alter-table/ https://mariadb.com/kb/en/join-syntax/\nhttps://mariadb.com/kb/en/partitioning-types-overview/\nhttps://mariadb.com/kb/en/date-and-time-units/\nhttps://mariadb.com/kb/en/delete/ https://mariadb.com/kb/en/grant/\n\nthey all reference back to this page\n\nAlso, TODO:\n\n* limitations (size, speed, adding history to unique not nullable columns)\n\nSystem Variables\n----------------\n\nThere are a number of system variables related to system-versioned tables:\n\nsystem_versioning_alter_history\n-------------------------------\n\n* Description: SQL:2011 does not allow ALTER TABLE on system-versioned tables.\nWhen this variable is set to ERROR, an attempt to alter a system-versioned\ntable will result in an error. When this variable is set to KEEP, ALTER TABLE\nwill be allowed, but the history will become incorrect — querying historical\ndata will show the new table structure. This mode is still useful, for\nexample, when adding new columns to a table. Note that if historical data\ncontains or would contain nulls, attempting to ALTER these columns to be NOT\nNULL will return an error (or warning if strict_mode is not set).\n* Commandline: --system-versioning-alter-history=value\n* Scope: Global, Session\n* Dynamic: Yes\n* Type: Enum\n* Default Value: ERROR\n* Valid Values: ERROR, KEEP\n\nsystem_versioning_asof\n----------------------\n\n* Description: If set to a specific timestamp value, an implicit FOR\nSYSTEM_TIME AS OF clause will be applied to all queries. This is useful if one\nwants to do many queries for history at the specific point in time. Set it to\nDEFAULT to restore the default behavior. Has no effect on DML, so queries such\nas INSERT .. SELECT and REPLACE .. SELECT need to state AS OF explicitly.\n* Commandline: None\n* Scope: Global, Session\n* Dynamic: Yes\n* Type: Varchar\n* Default Value: DEFAULT\n\nsystem_versioning_innodb_algorithm_simple\n-----------------------------------------\n\n* Description: Never fully implemented and removed in the following release.\n* Commandline: --system-versioning-innodb-algorithm-simple[={0|1}]\n* Scope: Global, Session\n* Dynamic: Yes\n* Type: Boolean\n* Default Value: ON\n* Introduced: MariaDB 10.3.4\n* Removed: MariaDB 10.3.5\n\nsystem_versioning_insert_history\n--------------------------------\n\n* Description: Allows direct inserts into ROW_START and ROW_END columns if\nsecure_timestamp allows changing timestamp.\n* Commandline: --system-versioning-insert-history[={0|1}]\n* Scope: Global, Session\n* Dynamic: Yes\n* Type: Boolean\n* Default Value: OFF\n* Introduced: MariaDB 10.11.0\n\nLimitations\n-----------\n\n* Versioning clauses can not be applied to generated (virtual and persistent)\ncolumns.\n* Before MariaDB 10.11, mariadb-dump did not read historical rows from\nversioned tables, and so historical data would not be backed up. Also, a\nrestore of the timestamps would not be possible as they cannot be defined by\nan insert/a user. From MariaDB 10.11, use the -H or --dump-history options to\ninclude the history.\n\nURL: https://mariadb.com/kb/en/system-versioned-tables/') WHERE help_topic_id = 810;
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (811,45,'Application-Time Periods','MariaDB starting with 10.4.3\n----------------------------\nSupport for application-time period-versioning was added in MariaDB 10.4.3.\n\nExtending system-versioned tables, MariaDB 10.4 supports application-time\nperiod tables. Time periods are defined by a range between two temporal\ncolumns. The columns must be of the same temporal data type, i.e. DATE,\nTIMESTAMP or DATETIME (TIME and YEAR are not supported), and of the same width.\n\nUsing time periods implicitly defines the two columns as NOT NULL. It also\nadds a constraint to check whether the first value is less than the second\nvalue. The constraint is invisible to SHOW CREATE TABLE statements. The name\nof this constraint is prefixed by the time period name, to avoid conflict with\nother constraints.\n\nCreating Tables with Time Periods\n---------------------------------\n\nTo create a table with a time period, use a CREATE TABLE statement with the\nPERIOD table option.\n\nCREATE TABLE t1(\n name VARCHAR(50),\n date_1 DATE,\n date_2 DATE,\n PERIOD FOR date_period(date_1, date_2));\n\nThis creates a table with a time_period period and populates the table with\nsome basic temporal values.\n\nExamples are available in the MariaDB Server source code, at\nmysql-test/suite/period/r/create.result.\n\nAdding and Removing Time Periods\n--------------------------------\n\nThe ALTER TABLE statement now supports syntax for adding and removing time\nperiods from a table. To add a period, use the ADD PERIOD clause.\n\nFor example:\n\nCREATE OR REPLACE TABLE rooms (\n room_number INT,\n guest_name VARCHAR(255),\n checkin DATE,\n checkout DATE\n );\n\nALTER TABLE rooms ADD PERIOD FOR p(checkin,checkout);\n\nTo remove a period, use the DROP PERIOD clause:\n\nALTER TABLE rooms DROP PERIOD FOR p;\n\nBoth ADD PERIOD and DROP PERIOD clauses include an option to handle whether\nthe period already exists:\n\nALTER TABLE rooms ADD PERIOD IF NOT EXISTS FOR p(checkin,checkout);\n\nALTER TABLE rooms DROP PERIOD IF EXISTS FOR p;\n\nDeletion by Portion\n-------------------\n\nYou can also remove rows that fall within certain time periods.\n\nWhen MariaDB executes a DELETE FOR PORTION statement, it removes the row:\n\n* When the row period falls completely within the delete period, it removes\nthe row.\n* When the row period overlaps the delete period, it shrinks the row, removing\nthe overlap from the first or second row period value.\n* When the delete period falls completely within the row period, it splits the\nrow into two rows. The first row runs from the starting row period to the\nstarting delete period. The second runs from the ending delete period to the\nending row period.\n\nTo test this, first populate the table with some data to operate on:\n\nCREATE TABLE t1(\n name VARCHAR(50),\n date_1 DATE,\n date_2 DATE,\n PERIOD FOR date_period(date_1, date_2));\n\nINSERT INTO t1 (name, date_1, date_2) VALUES\n (\'a\', \'1999-01-01\', \'2000-01-01\'),\n (\'b\', \'1999-01-01\', \'2018-12-12\'),\n (\'c\', \'1999-01-01\', \'2017-01-01\'),\n (\'d\', \'2017-01-01\', \'2019-01-01\');\n\nSELECT * FROM t1;\n+------+------------+------------+\n| name | date_1 | date_2 |\n+------+------------+------------+\n| a | 1999-01-01 | 2000-01-01 |\n| b | 1999-01-01 | 2018-12-12 |\n| c | 1999-01-01 | 2017-01-01 |\n| d | 2017-01-01 | 2019-01-01 |\n+------+------------+------------+\n\nThen, run the DELETE FOR PORTION statement:\n\nDELETE FROM t1\nFOR PORTION OF date_period\n FROM \'2001-01-01\' TO \'2018-01-01\';\nQuery OK, 3 rows affected (0.028 sec)\n\nSELECT * FROM t1 ORDER BY name;\n+------+------------+------------+\n| name | date_1 | date_2 |\n+------+------------+------------+\n| a | 1999-01-01 | 2000-01-01 |\n| b | 1999-01-01 | 2001-01-01 |\n| b | 2018-01-01 | 2018-12-12 |\n| c | 1999-01-01 | 2001-01-01 |\n| d | 2018-01-01 | 2019-01-01 |\n+------+------------+------------+\n\nHere:\n\n* a is unchanged, as the range falls entirely out of the specified portion to\nbe deleted.\n* b, with values ranging from 1999 to 2018, is split into two rows, 1999 to\n2000 and 2018-01 to 2018-12.\n* c, with values ranging from 1999 to 2017, where only the upper value falls\nwithin the portion to be deleted, has been shrunk to 1999 to 2001.\n* d, with values ranging from 2017 to 2019, where only the lower value falls\nwithin the portion to be deleted, has been shrunk to 2018 to 2019.\n\nThe DELETE FOR PORTION statement has the following restrictions\n\n* The FROM...TO clause must be constant\n* Multi-delete is not supported\n\nIf there are DELETE or INSERT triggers, it works as follows: any matched row\nis deleted, and then one or two rows are inserted. If the record is deleted\ncompletely, nothing is inserted.\n\nUpdating by Portion\n-------------------\n\nThe UPDATE syntax now supports UPDATE FOR PORTION, which modifies rows based\non their occurrence in a range:\n\nTo test it, first populate the table with some data:\n\nTRUNCATE t1;\n\nINSERT INTO t1 (name, date_1, date_2) VALUES\n (\'a\', \'1999-01-01\', \'2000-01-01\'),\n (\'b\', \'1999-01-01\', \'2018-12-12\'),\n (\'c\', \'1999-01-01\', \'2017-01-01\'),\n (\'d\', \'2017-01-01\', \'2019-01-01\');\n\nSELECT * FROM t1;\n+------+------------+------------+\n| name | date_1 | date_2 |\n+------+------------+------------+\n| a | 1999-01-01 | 2000-01-01 |\n| b | 1999-01-01 | 2018-12-12 |\n| c | 1999-01-01 | 2017-01-01 |\n| d | 2017-01-01 | 2019-01-01 |\n+------+------------+------------+\n\nThen run the update:\n\nUPDATE t1 FOR PORTION OF date_period\n FROM \'2000-01-01\' TO \'2018-01-01\'\nSET name = CONCAT(name,\'_original\');\n\nSELECT * FROM t1 ORDER BY name;\n+------------+------------+------------+\n| name | date_1 | date_2 |\n+------------+------------+------------+\n| a | 1999-01-01 | 2000-01-01 |\n| b | 1999-01-01 | 2000-01-01 |\n| b | 2018-01-01 | 2018-12-12 |\n| b_original | 2000-01-01 | 2018-01-01 |\n| c | 1999-01-01 | 2000-01-01 |\n| c_original | 2000-01-01 | 2017-01-01 |\n| d | 2018-01-01 | 2019-01-01 |\n| d_original | 2017-01-01 | 2018-01-01 |\n+------------+------------+------------+\n\n* a is unchanged, as the range falls entirely out of the specified portion to\nbe deleted.\n* b, with values ranging from 1999 to 2018, is split into two rows, 1999 to\n2000 and 2018-01 to 2018-12.\n* c, with values ranging from 1999 to 2017, where only the upper value falls\nwithin the portion to be deleted, has been shrunk to 1999 to 2001.\n* d, with values ranging from 2017 to 2019, where only the lower value falls\nwithin the portion to be deleted, has been shrunk to 2018 to 2019. \n* Original rows affected by the update have \"_original\" appended to the name.\n\nThe UPDATE FOR PORTION statement has the following limitations:\n\n* The operation cannot modify the two temporal columns used by the time period\n* The operation cannot reference period values in the SET expression\n* FROM...TO expressions must be constant\n\nWITHOUT OVERLAPS\n----------------\n\nMariaDB starting with 10.5.3\n----------------------------\nMariaDB 10.5 introduced a new clause, WITHOUT OVERLAPS, which allows one to\ncreate an index specifying that application time periods should not overlap.\n\nAn index constrained by WITHOUT OVERLAPS is required to be either a primary\nkey or a unique index.\n\nTake the following example, an application time period table for a booking\nsystem:\n\nCREATE OR REPLACE TABLE rooms (\n room_number INT,\n guest_name VARCHAR(255),\n checkin DATE,\n checkout DATE,\n PERIOD FOR p(checkin,checkout)\n );\n\nINSERT INTO rooms VALUES \n (1, \'Regina\', \'2020-10-01\', \'2020-10-03\'),\n (2, \'Cochise\', \'2020-10-02\', \'2020-10-05\'),\n (1, \'Nowell\', \'2020-10-03\', \'2020-10-07\'),\n (2, \'Eusebius\', \'2020-10-04\', \'2020-10-06\');\n\nOur system is not intended to permit overlapping bookings, so the fourth\nrecord above should not have been inserted. Using WITHOUT OVERLAPS in a unique\nindex (in this case based on a combination of room number and the application\ntime period) allows us to specify this constraint in the table definition.\n\nCREATE OR REPLACE TABLE rooms (\n room_number INT,\n guest_name VARCHAR(255),\n checkin DATE,\n checkout DATE,\n PERIOD FOR p(checkin,checkout),\n UNIQUE (room_number, p WITHOUT OVERLAPS)\n );\n\nINSERT INTO rooms VALUES \n (1, \'Regina\', \'2020-10-01\', \'2020-10-03\'),\n (2, \'Cochise\', \'2020-10-02\', \'2020-10-05\'),\n (1, \'Nowell\', \'2020-10-03\', \'2020-10-07\'),\n (2, \'Eusebius\', \'2020-10-04\', \'2020-10-06\');\nERROR 1062 (23000): Duplicate entry \'2-2020-10-06-2020-10-04\' for key\n\'room_number\'\n\nFurther Examples\n----------------\n\nThe implicit change from NULL to NOT NULL:\n\nCREATE TABLE `t2` (\n `id` int(11) DEFAULT NULL,\n `d1` datetime DEFAULT NULL,\n `d2` datetime DEFAULT NULL\n) ENGINE=InnoDB DEFAULT CHARSET=latin1;\n\nALTER TABLE t2 ADD PERIOD FOR p(d1,d2);\n\nSHOW CREATE TABLE t2\\G\n*************************** 1. row ***************************\n Table: t2\nCreate Table: CREATE TABLE `t2` (\n `id` int(11) DEFAULT NULL,\n `d1` datetime NOT NULL,\n `d2` datetime NOT NULL,\n PERIOD FOR `p` (`d1`, `d2`)\n) ENGINE=InnoDB DEFAULT CHARSET=latin1\n\nDue to this constraint, trying to add a time period where null data already\nexists will fail.\n\nCREATE OR REPLACE TABLE `t2` (\n `id` int(11) DEFAULT NULL,\n `d1` datetime DEFAULT NULL,\n `d2` datetime DEFAULT NULL\n) ENGINE=InnoDB DEFAULT CHARSET=latin1;\n\nINSERT INTO t2(id) VALUES(1);\n\nALTER TABLE t2 ADD PERIOD FOR p(d1,d2);\nERROR 1265 (01000): Data truncated for column \'d1\' at row 1\n\nURL: https://mariadb.com/kb/en/application-time-periods/','','https://mariadb.com/kb/en/application-time-periods/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (812,45,'Bitemporal Tables','MariaDB starting with 10.4.3\n----------------------------\nBitemporal tables are tables that use versioning both at the system and\napplication-time period levels.\n\nUsing Bitemporal Tables\n-----------------------\n\nTo create a bitemporal table, use:\n\nCREATE TABLE test.t3 (\n date_1 DATE,\n date_2 DATE,\n row_start TIMESTAMP(6) AS ROW START INVISIBLE,\n row_end TIMESTAMP(6) AS ROW END INVISIBLE,\n PERIOD FOR application_time(date_1, date_2),\n PERIOD FOR system_time(row_start, row_end))\nWITH SYSTEM VERSIONING;\n\nNote that, while system_time here is also a time period, it cannot be used in\nDELETE FOR PORTION or UPDATE FOR PORTION statements.\n\nDELETE FROM test.t3 \nFOR PORTION OF system_time \n FROM \'2000-01-01\' TO \'2018-01-01\';\nERROR 42000: You have an error in your SQL syntax; check the manual that\ncorresponds \n to your MariaDB server version for the right syntax to use near\n \'of system_time from \'2000-01-01\' to \'2018-01-01\'\' at line 1\n\nURL: https://mariadb.com/kb/en/bitemporal-tables/','','https://mariadb.com/kb/en/bitemporal-tables/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (813,46,'ST_AsGeoJSON','Syntax\n------\n\nST_AsGeoJSON(g[, max_decimals[, options]])\n\nDescription\n-----------\n\nReturns the given geometry g as a GeoJSON element. The optional max_decimals\nlimits the maximum number of decimals displayed.\n\nThe optional options flag can be set to 1 to add a bounding box to the output.\n\nExamples\n--------\n\nSELECT ST_AsGeoJSON(ST_GeomFromText(\'POINT(5.3 7.2)\'));\n+-------------------------------------------------+\n| ST_AsGeoJSON(ST_GeomFromText(\'POINT(5.3 7.2)\')) |\n+-------------------------------------------------+\n| {\"type\": \"Point\", \"coordinates\": [5.3, 7.2]} |\n+-------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/geojson-st_asgeojson/','','https://mariadb.com/kb/en/geojson-st_asgeojson/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (814,46,'ST_GeomFromGeoJSON','MariaDB starting with 10.2.4\n----------------------------\nST_GeomFromGeoJSON was added in MariaDB 10.2.4\n\nSyntax\n------\n\nST_GeomFromGeoJSON(g[, option])\n\nDescription\n-----------\n\nGiven a GeoJSON input g, returns a geometry object. The option specifies what\nto do if g contains geometries with coordinate dimensions higher than 2.\n\n+---------------------------+------------------------------------------------+\n| Option | Description |\n+---------------------------+------------------------------------------------+\n| 1 | Return an error (the default) |\n+---------------------------+------------------------------------------------+\n| 2 - 4 | The document is accepted, but the coordinates |\n| | for higher coordinate dimensions are stripped |\n| | off. |\n+---------------------------+------------------------------------------------+\n\nNote that this function did not work correctly before MariaDB 10.2.8 - see\nMDEV-12180.\n\nExamples\n--------\n\nSET @j = \'{ \"type\": \"Point\", \"coordinates\": [5.3, 15.0]}\';\n\nSELECT ST_AsText(ST_GeomFromGeoJSON(@j));\n+-----------------------------------+\n| ST_AsText(ST_GeomFromGeoJSON(@j)) |\n+-----------------------------------+\n| POINT(5.3 15) |\n+-----------------------------------+\n\nURL: https://mariadb.com/kb/en/st_geomfromgeojson/','','https://mariadb.com/kb/en/st_geomfromgeojson/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (815,47,'Operator Precedence','The precedence is the order in which the SQL operators are evaluated.\n\nThe following list shows the SQL operator precedence. Operators that appear\nfirst in the list have a higher precedence. Operators which are listed\ntogether have the same precedence.\n\n* INTERVAL\n* BINARY, COLLATE\n* !\n* - (unary minus), [[bitwise-not|]] (unary bit inversion)\n* || (string concatenation)\n* ^\n* *, /, DIV, %, MOD\n* -, +\n* <<, >>\n* &\n* |\n* = (comparison), <=>, >=, >, <=, <, <>, !=, IS, LIKE, REGEXP, IN\n* BETWEEN, CASE, WHEN, THEN, ELSE, END\n* NOT\n* &&, AND\n* XOR\n* || (logical or), OR\n* = (assignment), :=\n\nFunctions precedence is always higher than operators precedence.\n\nIn this page CASE refers to the CASE operator, not to the CASE statement.\n\nIf the HIGH_NOT_PRECEDENCE SQL_MODE is set, NOT has the same precedence as !.\n\nThe || operator\'s precedence, as well as its meaning, depends on the\nPIPES_AS_CONCAT SQL_MODE flag: if it is on, || can be used to concatenate\nstrings (like the CONCAT() function) and has a higher precedence.\n\nThe = operator\'s precedence depends on the context - it is higher when = is\nused as a comparison operator.\n\nParenthesis can be used to modify the operators precedence in an expression.\n\nShort-circuit evaluation\n------------------------\n\nThe AND, OR, && and || operators support short-circuit evaluation. This means\nthat, in some cases, the expression on the right of those operators is not\nevaluated, because its result cannot affect the result. In the following\ncases, short-circuit evaluation is used and x() is not evaluated:\n\n* FALSE AND x()\n* FALSE && x()\n* TRUE OR x()\n* TRUE || x()\n* NULL BETWEEN x() AND x()\n\nNote however that the short-circuit evaluation does not apply to NULL AND x().\nAlso, BETWEEN\'s right operands are not evaluated if the left operand is NULL,\nbut in all other cases all the operands are evaluated.\n\nThis is a speed optimization. Also, since functions can have side-effects,\nthis behavior can be used to choose whether execute them or not using a\nconcise syntax:\n\nSELECT some_function() OR log_error();\n\nURL: https://mariadb.com/kb/en/operator-precedence/','','https://mariadb.com/kb/en/operator-precedence/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (816,48,'Addition Operator (+)','Syntax\n------\n\n+\n\nDescription\n-----------\n\nAddition.\n\nIf both operands are integers, the result is calculated with BIGINT precision.\nIf either integer is unsigned, the result is also an unsigned integer.\n\nFor real or string operands, the operand with the highest precision determines\nthe result precision.\n\nExamples\n--------\n\nSELECT 3+5;\n+-----+\n| 3+5 |\n+-----+\n| 8 |\n+-----+\n\nURL: https://mariadb.com/kb/en/addition-operator/','','https://mariadb.com/kb/en/addition-operator/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (817,48,'Division Operator (/)','Syntax\n------\n\n/\n\nDescription\n-----------\n\nDivision operator. Dividing by zero will return NULL. By default, returns four\ndigits after the decimal. This is determined by the server system variable\ndiv_precision_increment which by default is four. It can be set from 0 to 30.\n\nDividing by zero returns NULL. If the ERROR_ON_DIVISION_BY_ZERO SQL_MODE is\nused (the default since MariaDB 10.2.4), a division by zero also produces a\nwarning.\n\nExamples\n--------\n\nSELECT 4/5;\n+--------+\n| 4/5 |\n+--------+\n| 0.8000 |\n+--------+\n\nSELECT 300/(2-2);\n+-----------+\n| 300/(2-2) |\n+-----------+\n| NULL |\n+-----------+\n\nSELECT 300/7;\n+---------+\n| 300/7 |\n+---------+\n| 42.8571 |\n+---------+\n\nChanging div_precision_increment for the session from the default of four to\nsix:\n\nSET div_precision_increment = 6;\n\nSELECT 300/7;\n+-----------+\n| 300/7 |\n+-----------+\n| 42.857143 |\n+-----------+\n\nSELECT 300/7;\n+-----------+\n| 300/7 |\n+-----------+\n| 42.857143 |\n+-----------+\n\nURL: https://mariadb.com/kb/en/division-operator/','','https://mariadb.com/kb/en/division-operator/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (818,48,'Modulo Operator (%)','Syntax\n------\n\nN % M\n\nDescription\n-----------\n\nModulo operator. Returns the remainder of N divided by M. See also MOD.\n\nExamples\n--------\n\nSELECT 1042 % 50;\n+-----------+\n| 1042 % 50 |\n+-----------+\n| 42 |\n+-----------+\n\nURL: https://mariadb.com/kb/en/modulo-operator/','','https://mariadb.com/kb/en/modulo-operator/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (819,48,'Multiplication Operator (*)','Syntax\n------\n\n*\n\nDescription\n-----------\n\nMultiplication operator.\n\nExamples\n--------\n\nSELECT 7*6;\n+-----+\n| 7*6 |\n+-----+\n| 42 |\n+-----+\n\nSELECT 1234567890*9876543210;\n+-----------------------+\n| 1234567890*9876543210 |\n+-----------------------+\n| -6253480962446024716 |\n+-----------------------+\n\nSELECT 18014398509481984*18014398509481984.0;\n+---------------------------------------+\n| 18014398509481984*18014398509481984.0 |\n+---------------------------------------+\n| 324518553658426726783156020576256.0 |\n+---------------------------------------+\n\nSELECT 18014398509481984*18014398509481984;\n+-------------------------------------+\n| 18014398509481984*18014398509481984 |\n+-------------------------------------+\n| 0 |\n+-------------------------------------+\n\nURL: https://mariadb.com/kb/en/multiplication-operator/','','https://mariadb.com/kb/en/multiplication-operator/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (820,48,'Subtraction Operator (-)','Syntax\n------\n\n-\n\nDescription\n-----------\n\nSubtraction. The operator is also used as the unary minus for changing sign.\n\nIf both operands are integers, the result is calculated with BIGINT precision.\nIf either integer is unsigned, the result is also an unsigned integer, unless\nthe NO_UNSIGNED_SUBTRACTION SQL_MODE is enabled, in which case the result is\nalways signed.\n\nFor real or string operands, the operand with the highest precision determines\nthe result precision.\n\nExamples\n--------\n\nSELECT 96-9;\n+------+\n| 96-9 |\n+------+\n| 87 |\n+------+\n\nSELECT 15-17;\n+-------+\n| 15-17 |\n+-------+\n| -2 |\n+-------+\n\nSELECT 3.66 + 1.333;\n+--------------+\n| 3.66 + 1.333 |\n+--------------+\n| 4.993 |\n+--------------+\n\nUnary minus:\n\nSELECT - (3+5);\n+---------+\n| - (3+5) |\n+---------+\n| -8 |\n+---------+\n\nURL: https://mariadb.com/kb/en/subtraction-operator-/','','https://mariadb.com/kb/en/subtraction-operator-/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (821,49,'CHANGE MASTER TO','The terms master and slave have historically been used in replication, but the\nterms terms primary and replica are now preferred. The old terms are used\nstill used in parts of the documentation, and in MariaDB commands, although\nMariaDB 10.5 has begun the process of renaming. The documentation process is\nongoing. See MDEV-18777 to follow progress on this effort.\n\nSyntax\n------\n\nCHANGE MASTER [\'connection_name\'] TO master_def [, master_def] ... \n [FOR CHANNEL \'channel_name\']\n\nmaster_def:\n MASTER_BIND = \'interface_name\'\n | MASTER_HOST = \'host_name\'\n | MASTER_USER = \'user_name\'\n | MASTER_PASSWORD = \'password\'\n | MASTER_PORT = port_num\n | MASTER_CONNECT_RETRY = interval\n | MASTER_HEARTBEAT_PERIOD = interval\n | MASTER_LOG_FILE = \'master_log_name\'\n | MASTER_LOG_POS = master_log_pos\n | RELAY_LOG_FILE = \'relay_log_name\'\n | RELAY_LOG_POS = relay_log_pos\n | MASTER_DELAY = interval\n | MASTER_SSL = {0|1}\n | MASTER_SSL_CA = \'ca_file_name\'\n | MASTER_SSL_CAPATH = \'ca_directory_name\'\n | MASTER_SSL_CERT = \'cert_file_name\'\n | MASTER_SSL_CRL = \'crl_file_name\'\n | MASTER_SSL_CRLPATH = \'crl_directory_name\'\n | MASTER_SSL_KEY = \'key_file_name\'\n | MASTER_SSL_CIPHER = \'cipher_list\'\n | MASTER_SSL_VERIFY_SERVER_CERT = {0|1}\n | MASTER_USE_GTID = {current_pos|slave_pos|no}\n | MASTER_DEMOTE_TO_SLAVE = bool\n | IGNORE_SERVER_IDS = (server_id_list)\n | DO_DOMAIN_IDS = ([N,..])\n | IGNORE_DOMAIN_IDS = ([N,..])\n\nDescription\n-----------\n\nThe CHANGE MASTER statement sets the options that a replica uses to connect to\nand replicate from a primary.\n\nMariaDB starting with 10.7.0\n----------------------------\nThe FOR CHANNEL keyword was added for MySQL compatibility. This is identical\nto using the channel_name directly after CHANGE MASTER.\n\nMulti-Source Replication\n------------------------\n\nIf you are using multi-source replication, then you need to specify a\nconnection name when you execute CHANGE MASTER. There are two ways to do this:\n\n* Setting the default_master_connection system variable prior to executing\nCHANGE MASTER.\n* Setting the connection_name parameter when executing CHANGE MASTER.\n\ndefault_master_connection\n-------------------------\n\nSET default_master_connection = \'gandalf\';\nSTOP SLAVE;\nCHANGE MASTER TO \n MASTER_PASSWORD=\'new3cret\';\nSTART SLAVE;\n\nconnection_name\n---------------\n\nSTOP SLAVE \'gandalf\';\nCHANGE MASTER \'gandalf\' TO \n MASTER_PASSWORD=\'new3cret\';\nSTART SLAVE \'gandalf\';\n\nOptions\n-------\n\nConnection Options\n------------------\n\nMASTER_USER\n-----------\n\nThe MASTER_USER option for CHANGE MASTER defines the user account that the\nreplica will use to connect to the primary.\n\nThis user account will need the REPLICATION SLAVE privilege (or, from MariaDB\n10.5.1, the REPLICATION REPLICA on the primary.\n\nFor example:\n\nSTOP SLAVE;\nCHANGE MASTER TO\n MASTER_USER=\'repl\',\n MASTER_PASSWORD=\'new3cret\';\nSTART SLAVE;\n\nThe maximum length of the MASTER_USER string is 96 characters until MariaDB\n10.5, and 128 characters from MariaDB 10.6.\n\nMASTER_PASSWORD\n---------------\n\nThe MASTER_USER option for CHANGE MASTER defines the password that the replica\nwill use to connect to the primary as the user account defined by the\nMASTER_USER option.\n\nFor example:\n\nSTOP SLAVE;\nCHANGE MASTER TO \n MASTER_PASSWORD=\'new3cret\';\nSTART SLAVE;\n\nThe maximum length of the MASTER_PASSWORD string is 32 characters. The\neffective maximum length of the string depends on how many bytes are used per\ncharacter and can be up to 96 characters.\n\nDue to MDEV-29994, the password can be silently truncated to 41 characters\nwhen MariaDB is restarted. For this reason it is recommended to use a password\nthat is shorter than this.\n\nMASTER_HOST\n-----------\n\nThe MASTER_HOST option for CHANGE MASTER defines the hostname or IP address of\nthe primary.\n\nIf you set the value of the MASTER_HOST option to the empty string, then that\nis not the same as not setting the option\'s value at all. If you set the value\nof the MASTER_HOST option to the empty string, then the CHANGE MASTER command\nwill fail with an error. In MariaDB 5.3 and before, if you set the value of\nthe MASTER_HOST option to the empty string, then the CHANGE MASTER command\nwould succeed, but the subsequent START SLAVE command would fail.\n\nFor example:\n\nSTOP SLAVE;\nCHANGE MASTER TO\n MASTER_HOST=\'dbserver1.example.com\',\n MASTER_USER=\'repl\',\n MASTER_PASSWORD=\'new3cret\',\n MASTER_USE_GTID=slave_pos;\nSTART SLAVE;\n\nIf you set the value of the MASTER_HOST option in a CHANGE MASTER command,\nthen the replica assumes that the primary is different from before, even if\nyou set the value of this option to the same value it had previously. In this\nscenario, the replica will consider the old values for the primary\'s binary\nlog file name and position to be invalid for the new primary. As a side\neffect, if you do not explicitly set the values of the MASTER_LOG_FILE and\nMASTER_LOG_POS options in the statement, then the statement will be implicitly\nappended with MASTER_LOG_FILE=\'\' and MASTER_LOG_POS=4. However, if you enable\nGTID mode for replication by setting the MASTER_USE_GTID option to some value\nother than no in the statement, then these values will effectively be ignored\nanyway.\n\nReplicas cannot connect to primaries using Unix socket files or Windows named\npipes. The replica must connect to the primary using TCP/IP.\n\nThe maximum length of the MASTER_HOST string is 60 characters until MariaDB\n10.5, and 255 characters from MariaDB 10.6.\n\nMASTER_PORT\n-----------\n\nThe MASTER_PORT option for CHANGE MASTER defines the TCP/IP port of the\nprimary.\n\nFor example:\n\nSTOP SLAVE;\nCHANGE MASTER TO\n MASTER_HOST=\'dbserver1.example.com\',\n MASTER_PORT=3307,\n MASTER_USER=\'repl\',\n MASTER_PASSWORD=\'new3cret\',\n MASTER_USE_GTID=slave_pos;\nSTART SLAVE;\n\nIf you set the value of the MASTER_PORT option in a CHANGE MASTER command,\nthen the replica assumes that the primary is different from before, even if\nyou set the value of this option to the same value it had previously. In this\nscenario, the replica will consider the old values for the primary\'s binary\nlog file name and position to be invalid for the new primary. As a side\neffect, if you do not explicitly set the values of the MASTER_LOG_FILE and\nMASTER_LOG_POS options in the statement, then the statement will be implicitly\nappended with MASTER_LOG_FILE=\'\' and MASTER_LOG_POS=4. However, if you enable\nGTID mode for replication by setting the MASTER_USE_GTID option to some value\nother than no in the statement, then these values will effectively be ignored\nanyway.\n\nReplicas cannot connect to primaries using Unix socket files or Windows named\npipes. The replica must connect to the primary using TCP/IP.\n\nMASTER_CONNECT_RETRY\n--------------------\n\nThe MASTER_CONNECT_RETRY option for CHANGE MASTER defines how many seconds\nthat the replica will wait between connection retries. The default is 60.\n\nSTOP SLAVE;\nCHANGE MASTER TO \n MASTER_CONNECT_RETRY=20;\nSTART SLAVE;\n\nThe number of connection attempts is limited by the master_retry_count option.\nIt can be set either on the command-line or in a server option group in an\noption file prior to starting up the server. For example:\n\n[mariadb]\n...\nmaster_retry_count=4294967295\n\nMASTER_BIND\n-----------\n\nThe MASTER_BIND option for CHANGE MASTER is only supported by MySQL 5.6.2 and\nlater and by MySQL NDB Cluster 7.3.1 and later. This option is not supported\nby MariaDB. See MDEV-19248 for more information.\n\nThe MASTER_BIND option for CHANGE MASTER can be used on replicas that have\nmultiple network interfaces to choose which network interface the replica will\nuse to connect to the primary.\n\nMASTER_HEARTBEAT_PERIOD\n-----------------------\n\nThe MASTER_HEARTBEAT_PERIOD option for CHANGE MASTER can be used to set the\ninterval in seconds between replication heartbeats. Whenever the primary\'s\nbinary log is updated with an event, the waiting period for the next heartbeat\nis reset.\n\nThis option\'s interval argument has the following characteristics:\n\n* It is a decimal value with a range of 0 to 4294967 seconds.\n* It has a resolution of hundredths of a second.\n* Its smallest valid non-zero value is 0.001.\n* Its default value is the value of the slave_net_timeout system variable\ndivided by 2.\n* If it\'s set to 0, then heartbeats are disabled.\n\nHeartbeats are sent by the primary only if there are no unsent events in the\nbinary log file for a period longer than the interval.\n\nIf the RESET SLAVE statement is executed, then the heartbeat interval is reset\nto the default.\n\nIf the slave_net_timeout system variable is set to a value that is lower than\nthe current heartbeat interval, then a warning will be issued.\n\nTLS Options\n-----------\n\nThe TLS options are used for providing information about TLS. The options can\nbe set even on replicas that are compiled without TLS support. The TLS options\nare saved to either the default master.info file or the file that is\nconfigured by the master_info_file option, but these TLS options are ignored\nunless the replica supports TLS.\n\nSee Replication with Secure Connections for more information.\n\nMASTER_SSL\n----------\n\nThe MASTER_SSL option for CHANGE MASTER tells the replica whether to force TLS\nfor the connection. The valid values are 0 or 1.\n\nFor example:\n\nSTOP SLAVE;\nCHANGE MASTER TO\n MASTER_SSL=1;\nSTART SLAVE;\n\nMASTER_SSL_CA\n-------------\n\nThe MASTER_SSL_CA option for CHANGE MASTER defines a path to a PEM file that\nshould contain one or more X509 certificates for trusted Certificate\nAuthorities (CAs) to use for TLS. This option requires that you use the\nabsolute path, not a relative path. This option implies the MASTER_SSL option.\n\nFor example:\n\nSTOP SLAVE;\nCHANGE MASTER TO\n MASTER_SSL_CERT=\'/etc/my.cnf.d/certificates/server-cert.pem\',\n MASTER_SSL_KEY=\'/etc/my.cnf.d/certificates/server-key.pem\',\n MASTER_SSL_CA=\'/etc/my.cnf.d/certificates/ca.pem\',\n MASTER_SSL_VERIFY_SERVER_CERT=1;\nSTART SLAVE;\n\nSee Secure Connections Overview: Certificate Authorities (CAs) for more\ninformation.\n\nThe maximum length of MASTER_SSL_CA string is 511 characters.\n\nMASTER_SSL_CAPATH\n-----------------\n\nThe MASTER_SSL_CAPATH option for CHANGE MASTER defines a path to a directory\nthat contains one or more PEM files that should each contain one X509\ncertificate for a trusted Certificate Authority (CA) to use for TLS. This\noption requires that you use the absolute path, not a relative path. The\ndirectory specified by this option needs to be run through the openssl rehash\ncommand. This option implies the MASTER_SSL option.\n\nFor example:\n\nSTOP SLAVE;\nCHANGE MASTER TO\n MASTER_SSL_CERT=\'/etc/my.cnf.d/certificates/server-cert.pem\',\n MASTER_SSL_KEY=\'/etc/my.cnf.d/certificates/server-key.pem\',\n MASTER_SSL_CAPATH=\'/etc/my.cnf.d/certificates/ca/\',\n MASTER_SSL_VERIFY_SERVER_CERT=1;\nSTART SLAVE;\n\nSee Secure Connections Overview: Certificate Authorities (CAs) for more\ninformation.\n\nThe maximum length of MASTER_SSL_CA_PATH string is 511 characters.\n\nMASTER_SSL_CERT\n---------------\n\nThe MASTER_SSL_CERT option for CHANGE MASTER defines a path to the X509\ncertificate file to use for TLS. This option requires that you use the\nabsolute path, not a relative path. This option implies the MASTER_SSL option.\n\nFor example:\n\nSTOP SLAVE;\nCHANGE MASTER TO\n MASTER_SSL_CERT=\'/etc/my.cnf.d/certificates/server-cert.pem\',\n MASTER_SSL_KEY=\'/etc/my.cnf.d/certificates/server-key.pem\',\n MASTER_SSL_CA=\'/etc/my.cnf.d/certificates/ca.pem\',\n MASTER_SSL_VERIFY_SERVER_CERT=1;\nSTART SLAVE;\n\nThe maximum length of MASTER_SSL_CERT string is 511 characters.\n\nMASTER_SSL_CRL\n--------------\n\nThe MASTER_SSL_CRL option for CHANGE MASTER defines a path to a PEM file that\nshould contain one or more revoked X509 certificates to use for TLS. This\noption requires that you use the absolute path, not a relative path.\n\nThis option is only supported if the server was built with OpenSSL. If the\nserver was built with yaSSL, then this option is not supported. See TLS and\nCryptography Libraries Used by MariaDB for more information about which\nlibraries are used on which platforms.\n\nFor example:\n\nSTOP SLAVE;\nCHANGE MASTER TO\n MASTER_SSL_CERT=\'/etc/my.cnf.d/certificates/server-cert.pem\',\n MASTER_SSL_KEY=\'/etc/my.cnf.d/certificates/server-key.pem\',\n MASTER_SSL_CA=\'/etc/my.cnf.d/certificates/ca.pem\',\n MASTER_SSL_VERIFY_SERVER_CERT=1,\n MASTER_SSL_CRL=\'/etc/my.cnf.d/certificates/crl.pem\';\nSTART SLAVE;\n\nSee Secure Connections Overview: Certificate Revocation Lists (CRLs) for more\ninformation.\n\nThe maximum length of MASTER_SSL_CRL string is 511 characters.\n\nMASTER_SSL_CRLPATH\n------------------\n\nThe MASTER_SSL_CRLPATH option for CHANGE MASTER defines a path to a directory\nthat contains one or more PEM files that should each contain one revoked X509\ncertificate to use for TLS. This option requires that you use the absolute\npath, not a relative path. The directory specified by this variable needs to\nbe run through the openssl rehash command.\n\nThis option is only supported if the server was built with OpenSSL. If the\nserver was built with yaSSL, then this option is not supported. See TLS and\nCryptography Libraries Used by MariaDB for more information about which\nlibraries are used on which platforms.\n\nFor example:\n\nSTOP SLAVE;\nCHANGE MASTER TO\n MASTER_SSL_CERT=\'/etc/my.cnf.d/certificates/server-cert.pem\',\n MASTER_SSL_KEY=\'/etc/my.cnf.d/certificates/server-key.pem\',\n MASTER_SSL_CA=\'/etc/my.cnf.d/certificates/ca.pem\',\n MASTER_SSL_VERIFY_SERVER_CERT=1,\n MASTER_SSL_CRLPATH=\'/etc/my.cnf.d/certificates/crl/\';\nSTART SLAVE;\n\nSee Secure Connections Overview: Certificate Revocation Lists (CRLs) for more\ninformation.\n\nThe maximum length of MASTER_SSL_CRL_PATH string is 511 characters.\n\nMASTER_SSL_KEY\n--------------\n\nThe MASTER_SSL_KEY option for CHANGE MASTER defines a path to a private key\nfile to use for TLS. This option requires that you use the absolute path, not\na relative path. This option implies the MASTER_SSL option.\n\nFor example:\n\nSTOP SLAVE;\nCHANGE MASTER TO\n MASTER_SSL_CERT=\'/etc/my.cnf.d/certificates/server-cert.pem\',\n MASTER_SSL_KEY=\'/etc/my.cnf.d/certificates/server-key.pem\',\n MASTER_SSL_CA=\'/etc/my.cnf.d/certificates/ca.pem\',\n MASTER_SSL_VERIFY_SERVER_CERT=1;','','https://mariadb.com/kb/en/change-master-to/');
-update help_topic set description = CONCAT(description, '\nSTART SLAVE;\n\nThe maximum length of MASTER_SSL_KEY string is 511 characters.\n\nMASTER_SSL_CIPHER\n-----------------\n\nThe MASTER_SSL_CIPHER option for CHANGE MASTER defines the list of permitted\nciphers or cipher suites to use for TLS. Besides cipher names, if MariaDB was\ncompiled with OpenSSL, this option could be set to \"SSLv3\" or \"TLSv1.2\" to\nallow all SSLv3 or all TLSv1.2 ciphers. Note that the TLSv1.3 ciphers cannot\nbe excluded when using OpenSSL, even by using this option. See Using TLSv1.3\nfor details. This option implies the MASTER_SSL option.\n\nFor example:\n\nSTOP SLAVE;\nCHANGE MASTER TO\n MASTER_SSL_CERT=\'/etc/my.cnf.d/certificates/server-cert.pem\',\n MASTER_SSL_KEY=\'/etc/my.cnf.d/certificates/server-key.pem\',\n MASTER_SSL_CA=\'/etc/my.cnf.d/certificates/ca.pem\',\n MASTER_SSL_VERIFY_SERVER_CERT=1,\n MASTER_SSL_CIPHER=\'TLSv1.2\';\nSTART SLAVE;\n\nThe maximum length of MASTER_SSL_CIPHER string is 511 characters.\n\nMASTER_SSL_VERIFY_SERVER_CERT\n-----------------------------\n\nThe MASTER_SSL_VERIFY_SERVER_CERT option for CHANGE MASTER enables server\ncertificate verification. This option is disabled by default.\n\nFor example:\n\nSTOP SLAVE;\nCHANGE MASTER TO\n MASTER_SSL_CERT=\'/etc/my.cnf.d/certificates/server-cert.pem\',\n MASTER_SSL_KEY=\'/etc/my.cnf.d/certificates/server-key.pem\',\n MASTER_SSL_CA=\'/etc/my.cnf.d/certificates/ca.pem\',\n MASTER_SSL_VERIFY_SERVER_CERT=1;\nSTART SLAVE;\n\nSee Secure Connections Overview: Server Certificate Verification for more\ninformation.\n\nBinary Log Options\n------------------\n\nThese options are related to the binary log position on the primary.\n\nMASTER_LOG_FILE\n---------------\n\nThe MASTER_LOG_FILE option for CHANGE MASTER can be used along with\nMASTER_LOG_POS to specify the coordinates at which the replica\'s I/O thread\nshould begin reading from the primary\'s binary logs the next time the thread\nstarts.\n\nFor example:\n\nSTOP SLAVE;\nCHANGE MASTER TO\n MASTER_LOG_FILE=\'master2-bin.001\',\n MASTER_LOG_POS=4;\nSTART SLAVE;\n\nThe MASTER_LOG_FILE and MASTER_LOG_POS options cannot be specified if the\nRELAY_LOG_FILE and RELAY_LOG_POS options were also specified.\n\nThe MASTER_LOG_FILE and MASTER_LOG_POS options are effectively ignored if you\nenable GTID mode for replication by setting the MASTER_USE_GTID option to some\nvalue other than no in the statement.\n\nMASTER_LOG_POS\n--------------\n\nThe MASTER_LOG_POS option for CHANGE MASTER can be used along with\nMASTER_LOG_FILE to specify the coordinates at which the replica\'s I/O thread\nshould begin reading from the primary\'s binary logs the next time the thread\nstarts.\n\nFor example:\n\nSTOP SLAVE;\nCHANGE MASTER TO\n MASTER_LOG_FILE=\'master2-bin.001\',\n MASTER_LOG_POS=4;\nSTART SLAVE;\n\nThe MASTER_LOG_FILE and MASTER_LOG_POS options cannot be specified if the\nRELAY_LOG_FILE and RELAY_LOG_POS options were also specified.\n\nThe MASTER_LOG_FILE and MASTER_LOG_POS options are effectively ignored if you\nenable GTID mode for replication by setting the MASTER_USE_GTID option to some\nvalue other than no in the statement.\n\nRelay Log Options\n-----------------\n\nThese options are related to the relay log position on the replica.\n\nRELAY_LOG_FILE\n--------------\n\nThe RELAY_LOG_FILE option for CHANGE MASTER can be used along with the\nRELAY_LOG_POS option to specify the coordinates at which the replica\'s SQL\nthread should begin reading from the relay log the next time the thread starts.\n\nThe CHANGE MASTER statement usually deletes all relay log files. However, if\nthe RELAY_LOG_FILE and/or RELAY_LOG_POS options are specified, then existing\nrelay log files are kept.\n\nWhen you want to change the relay log position, you only need to stop the\nreplica\'s SQL thread. The replica\'s I/O thread can continue running. The STOP\nSLAVE and START SLAVE statements support the SQL_THREAD option for this\nscenario. For example:\n\nSTOP SLAVE SQL_THREAD;\nCHANGE MASTER TO\n RELAY_LOG_FILE=\'slave-relay-bin.006\',\n RELAY_LOG_POS=4025;\nSTART SLAVE SQL_THREAD;\n\nWhen the value of this option is changed, the metadata about the replica\'s SQL\nthread\'s position in the relay logs will also be changed in the relay-log.info\nfile or the file that is configured by the relay_log_info_file system variable.\n\nThe RELAY_LOG_FILE and RELAY_LOG_POS options cannot be specified if the\nMASTER_LOG_FILE and MASTER_LOG_POS options were also specified.\n\nRELAY_LOG_POS\n-------------\n\nThe RELAY_LOG_POS option for CHANGE MASTER can be used along with the\nRELAY_LOG_FILE option to specify the coordinates at which the replica\'s SQL\nthread should begin reading from the relay log the next time the thread starts.\n\nThe CHANGE MASTER statement usually deletes all relay log files. However, if\nthe RELAY_LOG_FILE and/or RELAY_LOG_POS options are specified, then existing\nrelay log files are kept.\n\nWhen you want to change the relay log position, you only need to stop the\nreplica\'s SQL thread. The replica\'s I/O thread can continue running. The STOP\nSLAVE and START SLAVE statements support the SQL_THREAD option for this\nscenario. For example:\n\nSTOP SLAVE SQL_THREAD;\nCHANGE MASTER TO\n RELAY_LOG_FILE=\'slave-relay-bin.006\',\n RELAY_LOG_POS=4025;\nSTART SLAVE SQL_THREAD;\n\nWhen the value of this option is changed, the metadata about the replica\'s SQL\nthread\'s position in the relay logs will also be changed in the relay-log.info\nfile or the file that is configured by the relay_log_info_file system variable.\n\nThe RELAY_LOG_FILE and RELAY_LOG_POS options cannot be specified if the\nMASTER_LOG_FILE and MASTER_LOG_POS options were also specified.\n\nGTID Options\n------------\n\nMASTER_USE_GTID\n---------------\n\nThe MASTER_USE_GTID option for CHANGE MASTER can be used to configure the\nreplica to use the global transaction ID (GTID) when connecting to a primary.\nThe possible values are:\n\n* current_pos - Replicate in GTID mode and use gtid_current_pos as the\nposition to start downloading transactions from the primary. Deprecated from\nMariaDB 10.10. Using to transition to primary can break the replication state\nif the replica executes local transactions due to actively updating\ngtid_current_pos with gtid_binlog_pos and gtid_slave_pos. Use the new, safe,\nMASTER_DEMOTE_TO_SLAVE=<bool> option instead.\n* slave_pos - Replicate in GTID mode and use gtid_slave_pos as the position to\nstart downloading transactions from the primary. From MariaDB 10.5.1,\nreplica_pos is an alias for slave_pos.\n* no - Don\'t replicate in GTID mode.\n\nMASTER_DEMOTE_TO_SLAVE\n----------------------\n\nMariaDB starting with 10.10\n---------------------------\nUsed to transition a primary to become a replica. Replaces the old\nMASTER_USE_GTID=current_pos with a safe alternative by forcing users to set\nUsing_Gtid=Slave_Pos and merging gtid_binlog_pos into gtid_slave_pos once at\nCHANGE MASTER TO time. If gtid_slave_pos is more recent than gtid_binlog_pos\n(as in the case of chain replication), the replication state should be\npreserved.\n\nFor example:\n\nSTOP SLAVE;\nCHANGE MASTER TO\n MASTER_USE_GTID = current_pos;\nSTART SLAVE;\n\nOr:\n\nSTOP SLAVE;\nSET GLOBAL gtid_slave_pos=\'0-1-153\';\nCHANGE MASTER TO\n MASTER_USE_GTID = slave_pos;\nSTART SLAVE;\n\nReplication Filter Options\n--------------------------\n\nAlso see Replication filters.\n\nIGNORE_SERVER_IDS\n-----------------\n\nThe IGNORE_SERVER_IDS option for CHANGE MASTER can be used to configure a\nreplica to ignore binary log events that originated from certain servers.\nFiltered binary log events will not get logged to the replica’s relay log, and\nthey will not be applied by the replica.\n\nThe option\'s value can be specified by providing a comma-separated list of\nserver_id values. For example:\n\nSTOP SLAVE;\nCHANGE MASTER TO \n IGNORE_SERVER_IDS = (3,5);\nSTART SLAVE;\n\nIf you would like to clear a previously set list, then you can set the value\nto an empty list. For example:\n\nSTOP SLAVE;\nCHANGE MASTER TO \n IGNORE_SERVER_IDS = ();\nSTART SLAVE;\n\nDO_DOMAIN_IDS\n-------------\n\nThe DO_DOMAIN_IDS option for CHANGE MASTER can be used to configure a replica\nto only apply binary log events if the transaction\'s GTID is in a specific\ngtid_domain_id value. Filtered binary log events will not get logged to the\nreplica’s relay log, and they will not be applied by the replica.\n\nThe option\'s value can be specified by providing a comma-separated list of\ngtid_domain_id values. Duplicate values are automatically ignored. For example:\n\nSTOP SLAVE;\nCHANGE MASTER TO \n DO_DOMAIN_IDS = (1,2);\nSTART SLAVE;\n\nIf you would like to clear a previously set list, then you can set the value\nto an empty list. For example:\n\nSTOP SLAVE;\nCHANGE MASTER TO \n DO_DOMAIN_IDS = ();\nSTART SLAVE;\n\nThe DO_DOMAIN_IDS option and the IGNORE_DOMAIN_IDS option cannot both be set\nto non-empty values at the same time. If you want to set the DO_DOMAIN_IDS\noption, and the IGNORE_DOMAIN_IDS option was previously set, then you need to\nclear the value of the IGNORE_DOMAIN_IDS option. For example:\n\nSTOP SLAVE;\nCHANGE MASTER TO \n IGNORE_DOMAIN_IDS = (),\n DO_DOMAIN_IDS = (1,2);\nSTART SLAVE;\n\nThe DO_DOMAIN_IDS option can only be specified if the replica is replicating\nin GTID mode. Therefore, the MASTER_USE_GTID option must also be set to some\nvalue other than no in order to use this option.\n\nIGNORE_DOMAIN_IDS\n-----------------\n\nThe IGNORE_DOMAIN_IDS option for CHANGE MASTER can be used to configure a\nreplica to ignore binary log events if the transaction\'s GTID is in a specific\ngtid_domain_id value. Filtered binary log events will not get logged to the\nreplica’s relay log, and they will not be applied by the replica.\n\nThe option\'s value can be specified by providing a comma-separated list of\ngtid_domain_id values. Duplicate values are automatically ignored. For example:\n\nSTOP SLAVE;\nCHANGE MASTER TO \n IGNORE_DOMAIN_IDS = (1,2);\nSTART SLAVE;\n\nIf you would like to clear a previously set list, then you can set the value\nto an empty list. For example:\n\nSTOP SLAVE;\nCHANGE MASTER TO \n IGNORE_DOMAIN_IDS = ();\nSTART SLAVE;\n\nThe DO_DOMAIN_IDS option and the IGNORE_DOMAIN_IDS option cannot both be set\nto non-empty values at the same time. If you want to set the IGNORE_DOMAIN_IDS\noption, and the DO_DOMAIN_IDS option was previously set, then you need to\nclear the value of the DO_DOMAIN_IDS option. For example:\n\nSTOP SLAVE;\nCHANGE MASTER TO \n DO_DOMAIN_IDS = (),\n IGNORE_DOMAIN_IDS = (1,2);\nSTART SLAVE;\n\nThe IGNORE_DOMAIN_IDS option can only be specified if the replica is\nreplicating in GTID mode. Therefore, the MASTER_USE_GTID option must also be\nset to some value other than no in order to use this option.\n\nDelayed Replication Options\n---------------------------\n\nMASTER_DELAY\n------------\n\nThe MASTER_DELAY option for CHANGE MASTER can be used to enable delayed\nreplication. This option specifies the time in seconds (at least) that a\nreplica should lag behind the primary up to a maximum value of 2147483647, or\nabout 68 years. Before executing an event, the replica will first wait, if\nnecessary, until the given time has passed since the event was created on the\nprimary. The result is that the replica will reflect the state of the primary\nsome time back in the past. The default is zero, no delay.\n\nSTOP SLAVE;\nCHANGE MASTER TO \n MASTER_DELAY=3600;\nSTART SLAVE;\n\nChanging Option Values\n----------------------\n\nIf you don\'t specify a given option when executing the CHANGE MASTER\nstatement, then the option keeps its old value in most cases. Most of the\ntime, there is no need to specify the options that do not need to change. For\nexample, if the password for the user account that the replica uses to connect\nto its primary has changed, but no other options need to change, then you can\njust change the MASTER_PASSWORD option by executing the following commands:\n\nSTOP SLAVE;\nCHANGE MASTER TO \n MASTER_PASSWORD=\'new3cret\';\nSTART SLAVE;\n\nThere are some cases where options are implicitly reset, such as when the\nMASTER_HOST and MASTER_PORT options are changed.\n\nOption Persistence\n------------------\n\nThe values of the MASTER_LOG_FILE and MASTER_LOG_POS options (i.e. the binary\nlog position on the primary) and most other options are written to either the\ndefault master.info file or the file that is configured by the\nmaster_info_file option. The replica\'s I/O thread keeps this binary log\nposition updated as it downloads events only when MASTER_USE_GTID option is\nset to NO. Otherwise the file is not updated on a per event basis.\n\nThe master_info_file option can be set either on the command-line or in a\nserver option group in an option file prior to starting up the server. For\nexample:\n\n[mariadb]\n...\nmaster_info_file=/mariadb/myserver1-master.info\n\nThe values of the RELAY_LOG_FILE and RELAY_LOG_POS options (i.e. the relay log\nposition) are written to either the default relay-log.info file or the file\nthat is configured by the relay_log_info_file system variable. The replica\'s\nSQL thread keeps this relay log position updated as it applies events.\n\nThe relay_log_info_file system variable can be set either on the command-line\nor in a server option group in an option file prior to starting up the server.\nFor example:\n\n[mariadb]\n...\nrelay_log_info_file=/mariadb/myserver1-relay-log.info\n\nGTID Persistence\n----------------\n\nIf the replica is replicating binary log events that contain GTIDs, then the\nreplica\'s SQL thread will write every GTID that it applies to the\nmysql.gtid_slave_pos table. This GTID can be inspected and modified through\nthe gtid_slave_pos system variable.\n\nIf the replica has the log_slave_updates system variable enabled and if the\nreplica has the binary log enabled, then every write by the replica\'s SQL\nthread will also go into the replica\'s binary log. This means that GTIDs of\nreplicated transactions would be reflected in the value of the gtid_binlog_pos\nsystem variable.\n\nCreating a Replica from a Backup\n--------------------------------\n\nThe CHANGE MASTER statement is useful for setting up a replica when you have a\nbackup of the primary and you also have the binary log position or GTID\nposition corresponding to the backup.\n\nAfter restoring the backup on the replica, you could execute something like\nthis to use the binary log position:\n\nCHANGE MASTER TO\n MASTER_LOG_FILE=\'master2-bin.001\',\n MASTER_LOG_POS=4;\nSTART SLAVE;\n') WHERE help_topic_id = 821;
-update help_topic set description = CONCAT(description, '\nOr you could execute something like this to use the GTID position:\n\nSET GLOBAL gtid_slave_pos=\'0-1-153\';\nCHANGE MASTER TO\n MASTER_USE_GTID=slave_pos;\nSTART SLAVE;\n\nSee Setting up a Replication Slave with Mariabackup for more information on\nhow to do this with Mariabackup.\n\nExample\n-------\n\nThe following example changes the primary and primary\'s binary log\ncoordinates. This is used when you want to set up the replica to replicate the\nprimary:\n\nCHANGE MASTER TO\n MASTER_HOST=\'master2.mycompany.com\',\n MASTER_USER=\'replication\',\n MASTER_PASSWORD=\'bigs3cret\',\n MASTER_PORT=3306,\n MASTER_LOG_FILE=\'master2-bin.001\',\n MASTER_LOG_POS=4,\n MASTER_CONNECT_RETRY=10;\nSTART SLAVE;\n\nURL: https://mariadb.com/kb/en/change-master-to/') WHERE help_topic_id = 821;
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (822,49,'START SLAVE','The terms master and slave have historically been used in replication, but the\nterms terms primary and replica are now preferred. The old terms are used\nstill used in parts of the documentation, and in MariaDB commands, although\nMariaDB 10.5 has begun the process of renaming. The documentation process is\nongoing. See MDEV-18777 to follow progress on this effort.\n\nSyntax\n------\n\nSTART SLAVE [\"connection_name\"] [thread_type [, thread_type] ... ] [FOR\nCHANNEL \"connection_name\"]\nSTART SLAVE [\"connection_name\"] [SQL_THREAD] UNTIL \n MASTER_LOG_FILE = \'log_name\', MASTER_LOG_POS = log_pos [FOR CHANNEL\n\"connection_name\"]\nSTART SLAVE [\"connection_name\"] [SQL_THREAD] UNTIL\n RELAY_LOG_FILE = \'log_name\', RELAY_LOG_POS = log_pos [FOR CHANNEL\n\"connection_name\"]\nSTART SLAVE [\"connection_name\"] [SQL_THREAD] UNTIL\n MASTER_GTID_POS = <GTID position> [FOR CHANNEL \"connection_name\"]\nSTART ALL SLAVES [thread_type [, thread_type]]\n\nSTART REPLICA [\"connection_name\"] [thread_type [, thread_type] ... ] -- from\n10.5.1\nSTART REPLICA [\"connection_name\"] [SQL_THREAD] UNTIL \n MASTER_LOG_FILE = \'log_name\', MASTER_LOG_POS = log_pos -- from 10.5.1\nSTART REPLICA [\"connection_name\"] [SQL_THREAD] UNTIL\n RELAY_LOG_FILE = \'log_name\', RELAY_LOG_POS = log_pos -- from 10.5.1\nSTART REPLICA [\"connection_name\"] [SQL_THREAD] UNTIL\n MASTER_GTID_POS = <GTID position> -- from 10.5.1\nSTART ALL REPLICAS [thread_type [, thread_type]] -- from 10.5.1\n\nthread_type: IO_THREAD | SQL_THREAD\n\nDescription\n-----------\n\nSTART SLAVE (START REPLICA from MariaDB 10.5.1) with no thread_type options\nstarts both of the replica threads (see replication). The I/O thread reads\nevents from the primary server and stores them in the relay log. The SQL\nthread reads events from the relay log and executes them. START SLAVE requires\nthe SUPER privilege, or, from MariaDB 10.5.2, the REPLICATION SLAVE ADMIN\nprivilege.\n\nIf START SLAVE succeeds in starting the replica threads, it returns without\nany error. However, even in that case, it might be that the replica threads\nstart and then later stop (for example, because they do not manage to connect\nto the primary or read its binary log, or some other problem). START SLAVE\ndoes not warn you about this. You must check the replica\'s error log for error\nmessages generated by the replica threads, or check that they are running\nsatisfactorily with SHOW SLAVE STATUS (SHOW REPLICA STATUS from MariaDB\n10.5.1).\n\nSTART SLAVE UNTIL\n-----------------\n\nSTART SLAVE UNTIL refers to the SQL_THREAD replica position at which the\nSQL_THREAD replication will halt. If SQL_THREAD isn\'t specified both threads\nare started.\n\nSTART SLAVE UNTIL master_gtid_pos=xxx is also supported. See Global\nTransaction ID/START SLAVE UNTIL master_gtid_pos=xxx for more details.\n\nconnection_name\n---------------\n\nIf there is only one nameless primary, or the default primary (as specified by\nthe default_master_connection system variable) is intended, connection_name\ncan be omitted. If provided, the START SLAVE statement will apply to the\nspecified primary. connection_name is case-insensitive.\n\nMariaDB starting with 10.7.0\n----------------------------\nThe FOR CHANNEL keyword was added for MySQL compatibility. This is identical\nas using the channel_name directly after START SLAVE.\n\nSTART ALL SLAVES\n----------------\n\nSTART ALL SLAVES starts all configured replicas (replicas with master_host not\nempty) that were not started before. It will give a note for all started\nconnections. You can check the notes with SHOW WARNINGS.\n\nSTART REPLICA\n-------------\n\nMariaDB starting with 10.5.1\n----------------------------\nSTART REPLICA is an alias for START SLAVE from MariaDB 10.5.1.\n\nURL: https://mariadb.com/kb/en/start-replica/','','https://mariadb.com/kb/en/start-replica/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (823,49,'STOP SLAVE','The terms master and slave have historically been used in replication, but the\nterms terms primary and replica are now preferred. The old terms are used\nstill used in parts of the documentation, and in MariaDB commands, although\nMariaDB 10.5 has begun the process of renaming. The documentation process is\nongoing. See MDEV-18777 to follow progress on this effort.\n\nSyntax\n------\n\nSTOP SLAVE [\"connection_name\"] [thread_type [, thread_type] ... ] [FOR CHANNEL\n\"connection_name\"]\n\nSTOP ALL SLAVES [thread_type [, thread_type]]\n\nSTOP REPLICA [\"connection_name\"] [thread_type [, thread_type] ... ] -- from\n10.5.1\n\nSTOP ALL REPLICAS [thread_type [, thread_type]] -- from 10.5.1\n\nthread_type: IO_THREAD | SQL_THREAD\n\nDescription\n-----------\n\nStops the replica threads. STOP SLAVE requires the SUPER privilege, or, from\nMariaDB 10.5.2, the REPLICATION SLAVE ADMIN privilege.\n\nLike START SLAVE, this statement may be used with the IO_THREAD and SQL_THREAD\noptions to name the thread or threads to be stopped. In almost all cases, one\nnever need to use the thread_type options.\n\nSTOP SLAVE waits until any current replication event group affecting one or\nmore non-transactional tables has finished executing (if there is any such\nreplication group), or until the user issues a KILL QUERY or KILL CONNECTION\nstatement.\n\nNote that STOP SLAVE doesn\'t delete the connection permanently. Next time you\nexecute START SLAVE or the MariaDB server restarts, the replica connection is\nrestored with it\'s original arguments. If you want to delete a connection, you\nshould execute RESET SLAVE.\n\nSTOP ALL SLAVES\n---------------\n\nSTOP ALL SLAVES stops all your running replicas. It will give you a note for\nevery stopped connection. You can check the notes with SHOW WARNINGS.\n\nconnection_name\n---------------\n\nThe connection_name option is used for multi-source replication.\n\nIf there is only one nameless master, or the default master (as specified by\nthe default_master_connection system variable) is intended, connection_name\ncan be omitted. If provided, the STOP SLAVE statement will apply to the\nspecified master. connection_name is case-insensitive.\n\nMariaDB starting with 10.7.0\n----------------------------\nThe FOR CHANNEL keyword was added for MySQL compatibility. This is identical\nas using the channel_name directly after STOP SLAVE.\n\nSTOP REPLICA\n------------\n\nMariaDB starting with 10.5.1\n----------------------------\nSTOP REPLICA is an alias for STOP SLAVE from MariaDB 10.5.1.\n\nURL: https://mariadb.com/kb/en/stop-replica/','','https://mariadb.com/kb/en/stop-replica/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (824,49,'RESET REPLICA/SLAVE','The terms master and slave have historically been used in replication, but the\nterms terms primary and replica are now preferred. The old terms are used\nstill used in parts of the documentation, and in MariaDB commands, although\nMariaDB 10.5 has begun the process of renaming. The documentation process is\nongoing. See MDEV-18777 to follow progress on this effort.\n\nSyntax\n------\n\nRESET REPLICA [\"connection_name\"] [ALL] [FOR CHANNEL \"connection_name\"] --\nfrom MariaDB 10.5.1 \nRESET SLAVE [\"connection_name\"] [ALL] [FOR CHANNEL \"connection_name\"]\n\nDescription\n-----------\n\nRESET REPLICA/SLAVE makes the replica forget its replication position in the\nmaster\'s binary log. This statement is meant to be used for a clean start. It\ndeletes the master.info and relay-log.info files, all the relay log files, and\nstarts a new relay log file. To use RESET REPLICA/SLAVE, the replica threads\nmust be stopped (use STOP REPLICA/SLAVE if necessary).\n\nNote: All relay log files are deleted, even if they have not been completely\nexecuted by the slave SQL thread. (This is a condition likely to exist on a\nreplication slave if you have issued a STOP REPLICA/SLAVE statement or if the\nslave is highly loaded.)\n\nNote: RESET REPLICA does not reset the global gtid_slave_pos variable. This\nmeans that a replica server configured with CHANGE MASTER TO\nMASTER_USE_GTID=slave_pos will not receive events with GTIDs occurring before\nthe state saved in gtid_slave_pos. If the intent is to reprocess these events,\ngtid_slave_pos must be manually reset, e.g. by executing set global\ngtid_slave_pos=\"\".\n\nConnection information stored in the master.info file is immediately reset\nusing any values specified in the corresponding startup options. This\ninformation includes values such as master host, master port, master user, and\nmaster password. If the replica SQL thread was in the middle of replicating\ntemporary tables when it was stopped, and RESET REPLICA/SLAVE is issued, these\nreplicated temporary tables are deleted on the slave.\n\nThe ALL also resets the PORT, HOST, USER and PASSWORD parameters for the\nslave. If you are using a connection name, it will permanently delete it and\nit will not show up anymore in SHOW ALL REPLICAS/SLAVE STATUS.\n\nconnection_name\n---------------\n\nThe connection_name option is used for multi-source replication.\n\nIf there is only one nameless primary, or the default primary (as specified by\nthe default_master_connection system variable) is intended, connection_name\ncan be omitted. If provided, the RESET REPLICA/SLAVE statement will apply to\nthe specified primary. connection_name is case-insensitive.\n\nMariaDB starting with 10.7.0\n----------------------------\nThe FOR CHANNEL keyword was added for MySQL compatibility. This is identical\nas using the channel_name directly after RESET REPLICA.\n\nRESET REPLICA\n-------------\n\nMariaDB starting with 10.5.1\n----------------------------\nRESET REPLICA is an alias for RESET SLAVE from MariaDB 10.5.1.\n\nURL: https://mariadb.com/kb/en/reset-replica/','','https://mariadb.com/kb/en/reset-replica/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (825,49,'RESET MASTER','RESET MASTER [TO #]\n\nDeletes all binary log files listed in the index file, resets the binary log\nindex file to be empty, and creates a new binary log file with a suffix of\n.000001.\n\nIf TO # is given, then the first new binary log file will start from number #.\n\nThis statement is for use only when the master is started for the first time,\nand should never be used if any slaves are actively replicating from the\nbinary log.\n\nURL: https://mariadb.com/kb/en/reset-master/','','https://mariadb.com/kb/en/reset-master/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (826,50,'EXECUTE Statement','Syntax\n------\n\nEXECUTE stmt_name\n [USING expression[, expression] ...]\n\nMariaDB starting with 10.2.3\n----------------------------\nEXECUTE with expression as parameters was introduced in MariaDB 10.2.3. Before\nthat one could only use variables (@var_name) as parameters.\n\nDescription\n-----------\n\nAfter preparing a statement with PREPARE, you execute it with an EXECUTE\nstatement that refers to the prepared statement name. If the prepared\nstatement contains any parameter markers, you must supply a USING clause that\nlists user variables containing the values to be bound to the parameters.\nParameter values can be supplied only by user variables, and the USING clause\nmust name exactly as many variables as the number of parameter markers in the\nstatement.\n\nYou can execute a given prepared statement multiple times, passing different\nvariables to it or setting the variables to different values before each\nexecution.\n\nIf the specified statement has not been PREPAREd, an error similar to the\nfollowing is produced:\n\nERROR 1243 (HY000): Unknown prepared statement handler (stmt_name) given to\nEXECUTE\n\nExample\n-------\n\nSee example in PREPARE.\n\nURL: https://mariadb.com/kb/en/execute-statement/','','https://mariadb.com/kb/en/execute-statement/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (827,50,'PREPARE Statement','Syntax\n------\n\nPREPARE stmt_name FROM preparable_stmt\n\nDescription\n-----------\n\nThe PREPARE statement prepares a statement and assigns it a name, stmt_name,\nby which to refer to the statement later. Statement names are not case\nsensitive. preparable_stmt is either a string literal or a user variable (not\na local variable, an SQL expression or a subquery) that contains the text of\nthe statement. The text must represent a single SQL statement, not multiple\nstatements. Within the statement, \"?\" characters can be used as parameter\nmarkers to indicate where data values are to be bound to the query later when\nyou execute it. The \"?\" characters should not be enclosed within quotes, even\nif you intend to bind them to string values. Parameter markers can be used\nonly where expressions should appear, not for SQL keywords, identifiers, and\nso forth.\n\nThe scope of a prepared statement is the session within which it is created.\nOther sessions cannot see it.\n\nIf a prepared statement with the given name already exists, it is deallocated\nimplicitly before the new statement is prepared. This means that if the new\nstatement contains an error and cannot be prepared, an error is returned and\nno statement with the given name exists.\n\nPrepared statements can be PREPAREd and EXECUTEd in a stored procedure, but\nnot in a stored function or trigger. Also, even if the statement is PREPAREd\nin a procedure, it will not be deallocated when the procedure execution ends.\n\nA prepared statement can access user-defined variables, but not local\nvariables or procedure\'s parameters.\n\nIf the prepared statement contains a syntax error, PREPARE will fail. As a\nside effect, stored procedures can use it to check if a statement is valid.\nFor example:\n\nCREATE PROCEDURE `test_stmt`(IN sql_text TEXT)\nBEGIN\n DECLARE EXIT HANDLER FOR SQLEXCEPTION\n BEGIN\n SELECT CONCAT(sql_text, \' is not valid\');\n END;\n SET @SQL := sql_text;\n PREPARE stmt FROM @SQL;\n DEALLOCATE PREPARE stmt;\nEND;\n\nThe FOUND_ROWS() and ROW_COUNT() functions, if called immediatly after\nEXECUTE, return the number of rows read or affected by the prepared\nstatements; however, if they are called after DEALLOCATE PREPARE, they provide\ninformation about this statement. If the prepared statement produces errors or\nwarnings, GET DIAGNOSTICS return information about them. DEALLOCATE PREPARE\nshouldn\'t clear the diagnostics area, unless it produces an error.\n\nA prepared statement is executed with EXECUTE and released with DEALLOCATE\nPREPARE.\n\nThe max_prepared_stmt_count server system variable determines the number of\nallowed prepared statements that can be prepared on the server. If it is set\nto 0, prepared statements are not allowed. If the limit is reached, an error\nsimilar to the following will be produced:\n\nERROR 1461 (42000): Can\'t create more than max_prepared_stmt_count statements \n (current value: 0)\n\nOracle Mode\n-----------\n\nMariaDB starting with 10.3\n--------------------------\nIn Oracle mode from MariaDB 10.3, PREPARE stmt FROM \'SELECT :1, :2\' is used,\ninstead of ?.\n\nPermitted Statements\n--------------------\n\nMariaDB starting with 10.6.2\n----------------------------\nAll statements can be prepared, except PREPARE, EXECUTE, and DEALLOCATE / DROP\nPREPARE.\n\nPrior to this, not all statements can be prepared. Only the following SQL\ncommands are permitted:\n\n* ALTER TABLE\n* ANALYZE TABLE\n* BINLOG\n* CACHE INDEX\n* CALL\n* CHANGE MASTER\n* CHECKSUM {TABLE | TABLES}\n* COMMIT\n* {CREATE | DROP} DATABASE\n* {CREATE | DROP} INDEX\n* {CREATE | RENAME | DROP} TABLE\n* {CREATE | RENAME | DROP} USER\n* {CREATE | DROP} VIEW\n* DELETE\n* DESCRIBE\n* DO\n* EXPLAIN\n* FLUSH {TABLE | TABLES | TABLES WITH READ LOCK | HOSTS | PRIVILEGES | LOGS |\nSTATUS | \n MASTER | SLAVE | DES_KEY_FILE | USER_RESOURCES | QUERY CACHE |\nTABLE_STATISTICS | \n INDEX_STATISTICS | USER_STATISTICS | CLIENT_STATISTICS}\n* GRANT\n* INSERT\n* INSTALL {PLUGIN | SONAME}\n* HANDLER READ\n* KILL\n* LOAD INDEX INTO CACHE\n* OPTIMIZE TABLE\n* REPAIR TABLE\n* REPLACE\n* RESET {MASTER | SLAVE | QUERY CACHE}\n* REVOKE\n* ROLLBACK\n* SELECT\n* SET\n* SET GLOBAL SQL_SLAVE_SKIP_COUNTER\n* SET ROLE\n* SET SQL_LOG_BIN\n* SET TRANSACTION ISOLATION LEVEL\n* SHOW EXPLAIN\n* SHOW {DATABASES | TABLES | OPEN TABLES | TABLE STATUS | COLUMNS | INDEX |\nTRIGGERS | \n EVENTS | GRANTS | CHARACTER SET | COLLATION | ENGINES | PLUGINS [SONAME] |\nPRIVILEGES | \n PROCESSLIST | PROFILE | PROFILES | VARIABLES | STATUS | WARNINGS | ERRORS |\n TABLE_STATISTICS | INDEX_STATISTICS | USER_STATISTICS | CLIENT_STATISTICS |\nAUTHORS | \n CONTRIBUTORS}\n* SHOW CREATE {DATABASE | TABLE | VIEW | PROCEDURE | FUNCTION | TRIGGER |\nEVENT}\n* SHOW {FUNCTION | PROCEDURE} CODE\n* SHOW BINLOG EVENTS\n* SHOW SLAVE HOSTS\n* SHOW {MASTER | BINARY} LOGS\n* SHOW {MASTER | SLAVE | TABLES | INNODB | FUNCTION | PROCEDURE} STATUS\n* SLAVE {START | STOP}\n* TRUNCATE TABLE\n* SHUTDOWN\n* UNINSTALL {PLUGIN | SONAME}\n* UPDATE\n\nSynonyms are not listed here, but can be used. For example, DESC can be used\ninstead of DESCRIBE.\n\nCompound statements can be prepared too.\n\nNote that if a statement can be run in a stored routine, it will work even if\nit is called by a prepared statement. For example, SIGNAL can\'t be directly\nprepared. However, it is allowed in stored routines. If the x() procedure\ncontains SIGNAL, you can still prepare and execute the \'CALL x();\' prepared\nstatement.\n\nPREPARE supports most kinds of expressions as well, for example:\n\nPREPARE stmt FROM CONCAT(\'SELECT * FROM \', table_name);\n\nWhen PREPARE is used with a statement which is not supported, the following\nerror is produced:\n\nERROR 1295 (HY000): This command is not supported in the prepared statement\nprotocol yet\n\nExample\n-------\n\ncreate table t1 (a int,b char(10));\ninsert into t1 values (1,\"one\"),(2, \"two\"),(3,\"three\");\nprepare test from \"select * from t1 where a=?\";\nset @param=2;\nexecute test using @param;\n+------+------+\n| a | b |\n+------+------+\n| 2 | two |\n+------+------+\nset @param=3;\nexecute test using @param;\n+------+-------+\n| a | b |\n+------+-------+\n| 3 | three |\n+------+-------+\ndeallocate prepare test;\n\nSince identifiers are not permitted as prepared statements parameters,\nsometimes it is necessary to dynamically compose an SQL statement. This\ntechnique is called dynamic SQL). The following example shows how to use\ndynamic SQL:\n\nCREATE PROCEDURE test.stmt_test(IN tab_name VARCHAR(64))\nBEGIN\n SET @sql = CONCAT(\'SELECT COUNT(*) FROM \', tab_name);\n PREPARE stmt FROM @sql;\n EXECUTE stmt;\n DEALLOCATE PREPARE stmt;\nEND;\n\nCALL test.stmt_test(\'mysql.user\');\n+----------+\n| COUNT(*) |\n+----------+\n| 4 |\n+----------+\n\nUse of variables in prepared statements:\n\nPREPARE stmt FROM \'SELECT @x;\';\n\nSET @x = 1;\n\nEXECUTE stmt;\n+------+\n| @x |\n+------+\n| 1 |\n+------+\n\nSET @x = 0;\n\nEXECUTE stmt;\n+------+\n| @x |\n+------+\n| 0 |\n+------+\n\nDEALLOCATE PREPARE stmt;\n\nURL: https://mariadb.com/kb/en/prepare-statement/','','https://mariadb.com/kb/en/prepare-statement/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (828,50,'DEALLOCATE / DROP PREPARE','Syntax\n------\n\n{DEALLOCATE | DROP} PREPARE stmt_name\n\nDescription\n-----------\n\nTo deallocate a prepared statement produced with PREPARE, use a DEALLOCATE\nPREPARE statement that refers to the prepared statement name.\n\nA prepared statement is implicitly deallocated when a new PREPARE command is\nissued. In that case, there is no need to use DEALLOCATE.\n\nAttempting to execute a prepared statement after deallocating it results in an\nerror, as if it was not prepared at all:\n\nERROR 1243 (HY000): Unknown prepared statement handler (stmt_name) given to\nEXECUTE\n\nIf the specified statement has not been PREPAREd, an error similar to the\nfollowing will be produced:\n\nERROR 1243 (HY000): Unknown prepared statement handler (stmt_name) given to\nDEALLOCATE PREPARE\n\nExample\n-------\n\nSee example in PREPARE.\n\nURL: https://mariadb.com/kb/en/deallocate-drop-prepare/','','https://mariadb.com/kb/en/deallocate-drop-prepare/');
-insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (829,50,'EXECUTE IMMEDIATE','MariaDB starting with 10.2.3\n----------------------------\nEXECUTE IMMEDIATE was introduced in MariaDB 10.2.3.\n\nSyntax\n------\n\nEXECUTE IMMEDIATE statement\n\nDescription\n-----------\n\nEXECUTE IMMEDIATE executes a dynamic SQL statement created on the fly, which\ncan reduce performance overhead.\n\nFor example:\n\nEXECUTE IMMEDIATE \'SELECT 1\'\n\nwhich is shorthand for:\n\nprepare stmt from \"select 1\";\nexecute stmt;\ndeallocate prepare stmt;\n\nEXECUTE IMMEDIATE supports complex expressions as prepare source and\nparameters:\n\nEXECUTE IMMEDIATE CONCAT(\'SELECT COUNT(*) FROM \', \'t1\', \' WHERE a=?\') USING\n5+5;\n\nLimitations: subselects and stored function calls are not supported as a\nprepare source.\n\nThe following examples return an error:\n\nCREATE OR REPLACE FUNCTION f1() RETURNS VARCHAR(64) RETURN \'SELECT * FROM t1\';\nEXECUTE IMMEDIATE f1();\nERROR 1970 (42000): EXECUTE IMMEDIATE does not support subqueries or stored\nfunctions\n\nEXECUTE IMMEDIATE (SELECT \'SELECT * FROM t1\');\nERROR 1064 (42000): You have an error in your SQL syntax; check the manual\nthat \n corresponds to your MariaDB server version for the right syntax to use near\n \'SELECT \'SELECT * FROM t1\')\' at line 1\n\nCREATE OR REPLACE FUNCTION f1() RETURNS INT RETURN 10;\nEXECUTE IMMEDIATE \'SELECT * FROM t1 WHERE a=?\' USING f1();\nERROR 1970 (42000): EXECUTE..USING does not support subqueries or stored\nfunctions\n\nEXECUTE IMMEDIATE \'SELECT * FROM t1 WHERE a=?\' USING (SELECT 10);\nERROR 1064 (42000): You have an error in your SQL syntax; check the manual\nthat \n corresponds to your MariaDB server version for the right syntax to use near\n \'SELECT 10)\' at line 1\n\nOne can use a user or an SP variable as a workaround:\n\nCREATE OR REPLACE FUNCTION f1() RETURNS VARCHAR(64) RETURN \'SELECT * FROM t1\';\nSET @stmt=f1();\nEXECUTE IMMEDIATE @stmt;\n\nSET @stmt=(SELECT \'SELECT 1\');\nEXECUTE IMMEDIATE @stmt;\n\nCREATE OR REPLACE FUNCTION f1() RETURNS INT RETURN 10;\nSET @param=f1();\nEXECUTE IMMEDIATE \'SELECT * FROM t1 WHERE a=?\' USING @param;\n\nSET @param=(SELECT 10);\nEXECUTE IMMEDIATE \'SELECT * FROM t1 WHERE a=?\' USING @param;\n\nEXECUTE IMMEDIATE supports user variables and SP variables as OUT parameters\n\nDELIMITER $$\nCREATE OR REPLACE PROCEDURE p1(OUT a INT)\nBEGIN\n SET a:= 10;\nEND;\n$$\nDELIMITER ;\nSET @a=2;\nEXECUTE IMMEDIATE \'CALL p1(?)\' USING @a;\nSELECT @a;\n+------+\n| @a |\n+------+\n| 10 |\n+------+\n\nSimilar to PREPARE, EXECUTE IMMEDIATE is allowed in stored procedures but is\nnot allowed in stored functions.\n\nThis example uses EXECUTE IMMEDIATE inside a stored procedure:\n\nDELIMITER $$\nCREATE OR REPLACE PROCEDURE p1()\nBEGIN\n EXECUTE IMMEDIATE \'SELECT 1\';\nEND;\n$$\nDELIMITER ;\nCALL p1;\n+---+\n| 1 |\n+---+\n| 1 |\n+---+\n\nThis script returns an error:\n\nDELIMITER $$\nCREATE FUNCTION f1() RETURNS INT\nBEGIN\n EXECUTE IMMEDIATE \'DO 1\';\n RETURN 1;\nEND;\n$$\nERROR 1336 (0A000): Dynamic SQL is not allowed in stored function or trigger\n\nEXECUTE IMMEDIATE can use DEFAULT and IGNORE indicators as bind parameters:\n\nCREATE OR REPLACE TABLE t1 (a INT DEFAULT 10);\nEXECUTE IMMEDIATE \'INSERT INTO t1 VALUES (?)\' USING DEFAULT;\nSELECT * FROM t1;\n+------+\n| a |\n+------+\n| 10 |\n+------+\n\nEXECUTE IMMEDIATE increments the Com_execute_immediate status variable, as\nwell as the Com_stmt_prepare, Com_stmt_execute and Com_stmt_close status\nvariables.\n\nNote, EXECUTE IMMEDIATE does not increment the Com_execute_sql status\nvariable. Com_execute_sql is used only for PREPARE..EXECUTE.\n\nThis session screenshot demonstrates how EXECUTE IMMEDIATE affects status\nvariables:\n\nSELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME RLIKE \n (\'COM_(EXECUTE|STMT_PREPARE|STMT_EXECUTE|STMT_CLOSE)\');\n\n+-----------------------+----------------+\n| VARIABLE_NAME | VARIABLE_VALUE |\n+-----------------------+----------------+\n| COM_EXECUTE_IMMEDIATE | 0 |\n| COM_EXECUTE_SQL | 0 |\n| COM_STMT_CLOSE | 0 |\n| COM_STMT_EXECUTE | 0 |\n| COM_STMT_PREPARE | 0 |\n+-----------------------+----------------+\n\nEXECUTE IMMEDIATE \'SELECT 1\';\n+---+\n| 1 |\n+---+\n| 1 |\n+---+\n\nSELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME RLIKE \n (\'COM_(EXECUTE|STMT_PREPARE|STMT_EXECUTE|STMT_CLOSE)\');\n+-----------------------+----------------+\n| VARIABLE_NAME | VARIABLE_VALUE |\n+-----------------------+----------------+\n| COM_EXECUTE_IMMEDIATE | 1 |\n| COM_EXECUTE_SQL | 0 |\n| COM_STMT_CLOSE | 1 |\n| COM_STMT_EXECUTE | 1 |\n| COM_STMT_PREPARE | 1 |\n+-----------------------+----------------+\n\nURL: https://mariadb.com/kb/en/execute-immediate/','','https://mariadb.com/kb/en/execute-immediate/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (137,12,'RANDOM_BYTES','MariaDB starting with 10.10.0\n-----------------------------\nThe RANDOM_BYTES function generates a binary string of random bytes. It was\nadded in MariaDB 10.10.0.\n\nSyntax\n------\n\nRANDOM_BYTES(length)\n\nDescription\n-----------\n\nGiven a length from 1 to 1024, generates a binary string of length consisting\nof random bytes generated by the SSL library\'s random number generator.\n\nSee the RAND_bytes() function documentation of your SSL library for\ninformation on the random number generator. In the case of OpenSSL, a\ncryptographically secure pseudo random generator (CSPRNG) is used.\n\nStatements containing the RANDOM_BYTES function are unsafe for replication.\n\nAn error occurs if length is outside the range 1 to 1024.\n\nURL: https://mariadb.com/kb/en/random_bytes/','','https://mariadb.com/kb/en/random_bytes/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (138,12,'SHA1','Syntax\n------\n\nSHA1(str), SHA(str)\n\nDescription\n-----------\n\nCalculates an SHA-1 160-bit checksum for the string str, as described in RFC\n3174 (Secure Hash Algorithm).\n\nThe value is returned as a string of 40 hex digits, or NULL if the argument\nwas NULL. As of MariaDB 5.5, the return value is a nonbinary string in the\nconnection character set and collation, determined by the values of the\ncharacter_set_connection and collation_connection system variables. Before\n5.5, the return value was a binary string.\n\nExamples\n--------\n\nSELECT SHA1(\'some boring text\');\n+------------------------------------------+\n| SHA1(\'some boring text\') |\n+------------------------------------------+\n| af969fc2085b1bb6d31e517d5c456def5cdd7093 |\n+------------------------------------------+\n\nURL: https://mariadb.com/kb/en/sha1/','','https://mariadb.com/kb/en/sha1/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (139,12,'SHA2','Syntax\n------\n\nSHA2(str,hash_len)\n\nDescription\n-----------\n\nGiven a string str, calculates an SHA-2 checksum, which is considered more\ncryptographically secure than its SHA-1 equivalent. The SHA-2 family includes\nSHA-224, SHA-256, SHA-384, and SHA-512, and the hash_len must correspond to\none of these, i.e. 224, 256, 384 or 512. 0 is equivalent to 256.\n\nThe return value is a nonbinary string in the connection character set and\ncollation, determined by the values of the character_set_connection and\ncollation_connection system variables.\n\nNULL is returned if the hash length is not valid, or the string str is NULL.\n\nSHA2 will only work if MariaDB was has been configured with TLS support.\n\nExamples\n--------\n\nSELECT SHA2(\'Maria\',224);\n+----------------------------------------------------------+\n| SHA2(\'Maria\',224) |\n+----------------------------------------------------------+\n| 6cc67add32286412efcab9d0e1675a43a5c2ef3cec8879f81516ff83 |\n+----------------------------------------------------------+\n\nSELECT SHA2(\'Maria\',256);\n+------------------------------------------------------------------+\n| SHA2(\'Maria\',256) |\n+------------------------------------------------------------------+\n| 9ff18ebe7449349f358e3af0b57cf7a032c1c6b2272cb2656ff85eb112232f16 |\n+------------------------------------------------------------------+\n\nSELECT SHA2(\'Maria\',0);\n+------------------------------------------------------------------+\n| SHA2(\'Maria\',0) |\n+------------------------------------------------------------------+\n| 9ff18ebe7449349f358e3af0b57cf7a032c1c6b2272cb2656ff85eb112232f16 |\n+------------------------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/sha2/','','https://mariadb.com/kb/en/sha2/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (140,13,'ENDPOINT','A synonym for ST_ENDPOINT.\n\nURL: https://mariadb.com/kb/en/linestring-properties-endpoint/','','https://mariadb.com/kb/en/linestring-properties-endpoint/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (141,13,'GLENGTH','Syntax\n------\n\nGLength(ls)\n\nDescription\n-----------\n\nReturns as a double-precision number the length of the LineString value ls in\nits associated spatial reference.\n\nExamples\n--------\n\nSET @ls = \'LineString(1 1,2 2,3 3)\';\n\nSELECT GLength(GeomFromText(@ls));\n+----------------------------+\n| GLength(GeomFromText(@ls)) |\n+----------------------------+\n| 2.82842712474619 |\n+----------------------------+\n\nURL: https://mariadb.com/kb/en/glength/','','https://mariadb.com/kb/en/glength/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (142,13,'NumPoints','A synonym for ST_NumPoints.\n\nURL: https://mariadb.com/kb/en/linestring-properties-numpoints/','','https://mariadb.com/kb/en/linestring-properties-numpoints/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (143,13,'PointN','A synonym for ST_PointN.\n\nURL: https://mariadb.com/kb/en/linestring-properties-pointn/','','https://mariadb.com/kb/en/linestring-properties-pointn/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (144,13,'STARTPOINT','A synonym for ST_STARTPOINT.\n\nURL: https://mariadb.com/kb/en/linestring-properties-startpoint/','','https://mariadb.com/kb/en/linestring-properties-startpoint/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (145,13,'ST_ENDPOINT','Syntax\n------\n\nST_EndPoint(ls)\nEndPoint(ls)\n\nDescription\n-----------\n\nReturns the Point that is the endpoint of the LineString value ls.\n\nST_EndPoint() and EndPoint() are synonyms.\n\nExamples\n--------\n\nSET @ls = \'LineString(1 1,2 2,3 3)\';\n\nSELECT AsText(EndPoint(GeomFromText(@ls)));\n+-------------------------------------+\n| AsText(EndPoint(GeomFromText(@ls))) |\n+-------------------------------------+\n| POINT(3 3) |\n+-------------------------------------+\n\nURL: https://mariadb.com/kb/en/st_endpoint/','','https://mariadb.com/kb/en/st_endpoint/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (146,13,'ST_NUMPOINTS','Syntax\n------\n\nST_NumPoints(ls)\nNumPoints(ls)\n\nDescription\n-----------\n\nReturns the number of Point objects in the LineString value ls.\n\nST_NumPoints() and NumPoints() are synonyms.\n\nExamples\n--------\n\nSET @ls = \'LineString(1 1,2 2,3 3)\';\n\nSELECT NumPoints(GeomFromText(@ls));\n+------------------------------+\n| NumPoints(GeomFromText(@ls)) |\n+------------------------------+\n| 3 |\n+------------------------------+\n\nURL: https://mariadb.com/kb/en/st_numpoints/','','https://mariadb.com/kb/en/st_numpoints/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (147,13,'ST_POINTN','Syntax\n------\n\nST_PointN(ls,N)\nPointN(ls,N)\n\nDescription\n-----------\n\nReturns the N-th Point in the LineString value ls. Points are numbered\nbeginning with 1.\n\nST_PointN() and PointN() are synonyms.\n\nExamples\n--------\n\nSET @ls = \'LineString(1 1,2 2,3 3)\';\n\nSELECT AsText(PointN(GeomFromText(@ls),2));\n+-------------------------------------+\n| AsText(PointN(GeomFromText(@ls),2)) |\n+-------------------------------------+\n| POINT(2 2) |\n+-------------------------------------+\n\nURL: https://mariadb.com/kb/en/st_pointn/','','https://mariadb.com/kb/en/st_pointn/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (148,13,'ST_STARTPOINT','Syntax\n------\n\nST_StartPoint(ls)\nStartPoint(ls)\n\nDescription\n-----------\n\nReturns the Point that is the start point of the LineString value ls.\n\nST_StartPoint() and StartPoint() are synonyms.\n\nExamples\n--------\n\nSET @ls = \'LineString(1 1,2 2,3 3)\';\n\nSELECT AsText(StartPoint(GeomFromText(@ls)));\n+---------------------------------------+\n| AsText(StartPoint(GeomFromText(@ls))) |\n+---------------------------------------+\n| POINT(1 1) |\n+---------------------------------------+\n\nURL: https://mariadb.com/kb/en/st_startpoint/','','https://mariadb.com/kb/en/st_startpoint/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (149,14,'GET_LOCK','Syntax\n------\n\nGET_LOCK(str,timeout)\n\nDescription\n-----------\n\nTries to obtain a lock with a name given by the string str, using a timeout of\ntimeout seconds. Returns 1 if the lock was obtained successfully, 0 if the\nattempt timed out (for example, because another client has previously locked\nthe name), or NULL if an error occurred (such as running out of memory or the\nthread was killed with mysqladmin kill).\n\nA lock is released with RELEASE_LOCK(), when the connection terminates (either\nnormally or abnormally). A connection can hold multiple locks at the same\ntime, so a lock that is no longer needed needs to be explicitly released.\n\nThe IS_FREE_LOCK function returns whether a specified lock a free or not, and\nthe IS_USED_LOCK whether the function is in use or not.\n\nLocks obtained with GET_LOCK() do not interact with transactions. That is,\ncommitting a transaction does not release any such locks obtained during the\ntransaction.\n\nIt is also possible to recursively set the same lock. If a lock with the same\nname is set n times, it needs to be released n times as well.\n\nstr is case insensitive for GET_LOCK() and related functions. If str is an\nempty string or NULL, GET_LOCK() returns NULL and does nothing. From MariaDB\n10.2.2, timeout supports microseconds. Before then, it was rounded to the\nclosest integer.\n\nIf the metadata_lock_info plugin is installed, locks acquired with this\nfunction are visible in the Information Schema METADATA_LOCK_INFO table.\n\nThis function can be used to implement application locks or to simulate record\nlocks. Names are locked on a server-wide basis. If a name has been locked by\none client, GET_LOCK() blocks any request by another client for a lock with\nthe same name. This allows clients that agree on a given lock name to use the\nname to perform cooperative advisory locking. But be aware that it also allows\na client that is not among the set of cooperating clients to lock a name,\neither inadvertently or deliberately, and thus prevent any of the cooperating\nclients from locking that name. One way to reduce the likelihood of this is to\nuse lock names that are database-specific or application-specific. For\nexample, use lock names of the form db_name.str or app_name.str.\n\nStatements using the GET_LOCK function are not safe for statement-based\nreplication.\n\nThe patch to permit multiple locks was contributed by Konstantin \"Kostja\"\nOsipov (MDEV-3917).\n\nExamples\n--------\n\nSELECT GET_LOCK(\'lock1\',10);\n+----------------------+\n| GET_LOCK(\'lock1\',10) |\n+----------------------+\n| 1 |\n+----------------------+\n\nSELECT IS_FREE_LOCK(\'lock1\'), IS_USED_LOCK(\'lock1\');\n+-----------------------+-----------------------+\n| IS_FREE_LOCK(\'lock1\') | IS_USED_LOCK(\'lock1\') |\n+-----------------------+-----------------------+\n| 0 | 46 |\n+-----------------------+-----------------------+\n\nSELECT IS_FREE_LOCK(\'lock2\'), IS_USED_LOCK(\'lock2\');\n+-----------------------+-----------------------+\n| IS_FREE_LOCK(\'lock2\') | IS_USED_LOCK(\'lock2\') |\n+-----------------------+-----------------------+\n| 1 | NULL |\n+-----------------------+-----------------------+\n\nMultiple locks can be held:\n\nSELECT GET_LOCK(\'lock2\',10);\n+----------------------+\n| GET_LOCK(\'lock2\',10) |\n+----------------------+\n| 1 |\n+----------------------+\n\nSELECT IS_FREE_LOCK(\'lock1\'), IS_FREE_LOCK(\'lock2\');\n+-----------------------+-----------------------+\n| IS_FREE_LOCK(\'lock1\') | IS_FREE_LOCK(\'lock2\') |\n+-----------------------+-----------------------+\n| 0 | 0 |\n+-----------------------+-----------------------+\n\nSELECT RELEASE_LOCK(\'lock1\'), RELEASE_LOCK(\'lock2\');\n+-----------------------+-----------------------+\n| RELEASE_LOCK(\'lock1\') | RELEASE_LOCK(\'lock2\') |\n+-----------------------+-----------------------+\n| 1 | 1 |\n+-----------------------+-----------------------+\n\nIt is possible to hold the same lock recursively. This example is viewed using\nthe metadata_lock_info plugin:\n\nSELECT GET_LOCK(\'lock3\',10);\n+----------------------+\n| GET_LOCK(\'lock3\',10) |\n+----------------------+\n| 1 |\n+----------------------+\n\nSELECT GET_LOCK(\'lock3\',10);\n+----------------------+\n| GET_LOCK(\'lock3\',10) |\n+----------------------+\n| 1 |\n+----------------------+\n\nSELECT * FROM INFORMATION_SCHEMA.METADATA_LOCK_INFO;\n+-----------+---------------------+---------------+-----------+--------------+-\n----------+\n| THREAD_ID | LOCK_MODE | LOCK_DURATION | LOCK_TYPE | TABLE_SCHEMA |\nTABLE_NAME |\n+-----------+---------------------+---------------+-----------+--------------+-\n----------+\n| 46 | MDL_SHARED_NO_WRITE | NULL | User lock | lock3 |\n |\n+-----------+---------------------+---------------+-----------+--------------+-\n----------+\n\nSELECT RELEASE_LOCK(\'lock3\');\n+-----------------------+\n| RELEASE_LOCK(\'lock3\') |\n+-----------------------+\n| 1 |\n+-----------------------+\n\nSELECT * FROM INFORMATION_SCHEMA.METADATA_LOCK_INFO;\n+-----------+---------------------+---------------+-----------+--------------+-\n----------+\n| THREAD_ID | LOCK_MODE | LOCK_DURATION | LOCK_TYPE | TABLE_SCHEMA |\nTABLE_NAME |\n+-----------+---------------------+---------------+-----------+--------------+-\n----------+\n| 46 | MDL_SHARED_NO_WRITE | NULL | User lock | lock3 |\n |\n+-----------+---------------------+---------------+-----------+--------------+-\n----------+\n\nSELECT RELEASE_LOCK(\'lock3\');\n+-----------------------+\n| RELEASE_LOCK(\'lock3\') |\n+-----------------------+\n| 1 |\n+-----------------------+\n\nSELECT * FROM INFORMATION_SCHEMA.METADATA_LOCK_INFO;\nEmpty set (0.000 sec)\n\nTimeout example: Connection 1:\n\nSELECT GET_LOCK(\'lock4\',10);\n+----------------------+\n| GET_LOCK(\'lock4\',10) |\n+----------------------+\n| 1 |\n+----------------------+\n\nConnection 2:\n\nSELECT GET_LOCK(\'lock4\',10);\n\nAfter 10 seconds...\n\n+----------------------+\n| GET_LOCK(\'lock4\',10) |\n+----------------------+\n| 0 |\n+----------------------+\n\nDeadlocks are automatically detected and resolved. Connection 1:\n\nSELECT GET_LOCK(\'lock5\',10); \n+----------------------+\n| GET_LOCK(\'lock5\',10) |\n+----------------------+\n| 1 |\n+----------------------+\n\nConnection 2:\n\nSELECT GET_LOCK(\'lock6\',10);\n+----------------------+\n| GET_LOCK(\'lock6\',10) |\n+----------------------+\n| 1 |\n+----------------------+\n\nConnection 1:\n\nSELECT GET_LOCK(\'lock6\',10); \n+----------------------+\n| GET_LOCK(\'lock6\',10) |\n+----------------------+\n| 0 |\n+----------------------+\n\nConnection 2:\n\nSELECT GET_LOCK(\'lock5\',10);\nERROR 1213 (40001): Deadlock found when trying to get lock; try restarting\ntransaction\n\nURL: https://mariadb.com/kb/en/get_lock/','','https://mariadb.com/kb/en/get_lock/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (150,14,'INET6_ATON','Syntax\n------\n\nINET6_ATON(expr)\n\nDescription\n-----------\n\nGiven an IPv6 or IPv4 network address as a string, returns a binary string\nthat represents the numeric value of the address.\n\nNo trailing zone ID\'s or traling network masks are permitted. For IPv4\naddresses, or IPv6 addresses with IPv4 address parts, no classful addresses or\ntrailing port numbers are permitted and octal numbers are not supported.\n\nThe returned binary string will be VARBINARY(16) or VARBINARY(4) for IPv6 and\nIPv4 addresses respectively.\n\nReturns NULL if the argument is not understood.\n\nMariaDB starting with 10.5.0\n----------------------------\nFrom MariaDB 10.5.0, INET6_ATON can take INET6 as an argument.\n\nExamples\n--------\n\nSELECT HEX(INET6_ATON(\'10.0.1.1\'));\n+-----------------------------+\n| HEX(INET6_ATON(\'10.0.1.1\')) |\n+-----------------------------+\n| 0A000101 |\n+-----------------------------+\n\nSELECT HEX(INET6_ATON(\'48f3::d432:1431:ba23:846f\'));\n+----------------------------------------------+\n| HEX(INET6_ATON(\'48f3::d432:1431:ba23:846f\')) |\n+----------------------------------------------+\n| 48F3000000000000D4321431BA23846F |\n+----------------------------------------------+\n\nURL: https://mariadb.com/kb/en/inet6_aton/','','https://mariadb.com/kb/en/inet6_aton/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (151,14,'INET6_NTOA','Syntax\n------\n\nINET6_NTOA(expr)\n\nDescription\n-----------\n\nGiven an IPv6 or IPv4 network address as a numeric binary string, returns the\naddress as a nonbinary string in the connection character set.\n\nThe return string is lowercase, and is platform independent, since it does not\nuse functions specific to the operating system. It has a maximum length of 39\ncharacters.\n\nReturns NULL if the argument is not understood.\n\nExamples\n--------\n\nSELECT INET6_NTOA(UNHEX(\'0A000101\'));\n+-------------------------------+\n| INET6_NTOA(UNHEX(\'0A000101\')) |\n+-------------------------------+\n| 10.0.1.1 |\n+-------------------------------+\n\nSELECT INET6_NTOA(UNHEX(\'48F3000000000000D4321431BA23846F\'));\n+-------------------------------------------------------+\n| INET6_NTOA(UNHEX(\'48F3000000000000D4321431BA23846F\')) |\n+-------------------------------------------------------+\n| 48f3::d432:1431:ba23:846f |\n+-------------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/inet6_ntoa/','','https://mariadb.com/kb/en/inet6_ntoa/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (152,14,'INET_ATON','Syntax\n------\n\nINET_ATON(expr)\n\nDescription\n-----------\n\nGiven the dotted-quad representation of an IPv4 network address as a string,\nreturns an integer that represents the numeric value of the address. Addresses\nmay be 4- or 8-byte addresses.\n\nReturns NULL if the argument is not understood.\n\nExamples\n--------\n\nSELECT INET_ATON(\'192.168.1.1\');\n+--------------------------+\n| INET_ATON(\'192.168.1.1\') |\n+--------------------------+\n| 3232235777 |\n+--------------------------+\n\nThis is calculated as follows: 192 x 2563 + 168 x 256 2 + 1 x 256 + 1\n\nURL: https://mariadb.com/kb/en/inet_aton/','','https://mariadb.com/kb/en/inet_aton/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (153,14,'INET_NTOA','Syntax\n------\n\nINET_NTOA(expr)\n\nDescription\n-----------\n\nGiven a numeric IPv4 network address in network byte order (4 or 8 byte),\nreturns the dotted-quad representation of the address as a string.\n\nExamples\n--------\n\nSELECT INET_NTOA(3232235777);\n+-----------------------+\n| INET_NTOA(3232235777) |\n+-----------------------+\n| 192.168.1.1 |\n+-----------------------+\n\n192.168.1.1 corresponds to 3232235777 since 192 x 2563 + 168 x 256 2 + 1 x 256\n+ 1 = 3232235777\n\nURL: https://mariadb.com/kb/en/inet_ntoa/','','https://mariadb.com/kb/en/inet_ntoa/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (154,14,'IS_FREE_LOCK','Syntax\n------\n\nIS_FREE_LOCK(str)\n\nDescription\n-----------\n\nChecks whether the lock named str is free to use (that is, not locked).\nReturns 1 if the lock is free (no one is using the lock), 0 if the lock is in\nuse, and NULL if an error occurs (such as an incorrect argument, like an empty\nstring or NULL). str is case insensitive.\n\nIf the metadata_lock_info plugin is installed, the Information Schema\nmetadata_lock_info table contains information about locks of this kind (as\nwell as metadata locks).\n\nStatements using the IS_FREE_LOCK function are not safe for statement-based\nreplication.\n\nURL: https://mariadb.com/kb/en/is_free_lock/','','https://mariadb.com/kb/en/is_free_lock/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (155,14,'IS_IPV4','Syntax\n------\n\nIS_IPV4(expr)\n\nDescription\n-----------\n\nIf the expression is a valid IPv4 address, returns 1, otherwise returns 0.\n\nIS_IPV4() is stricter than INET_ATON(), but as strict as INET6_ATON(), in\ndetermining the validity of an IPv4 address. This implies that if IS_IPV4\nreturns 1, the same expression will always return a non-NULL result when\npassed to INET_ATON(), but that the reverse may not apply.\n\nExamples\n--------\n\nSELECT IS_IPV4(\'1110.0.1.1\');\n+-----------------------+\n| IS_IPV4(\'1110.0.1.1\') |\n+-----------------------+\n| 0 |\n+-----------------------+\n\nSELECT IS_IPV4(\'48f3::d432:1431:ba23:846f\');\n+--------------------------------------+\n| IS_IPV4(\'48f3::d432:1431:ba23:846f\') |\n+--------------------------------------+\n| 0 |\n+--------------------------------------+\n\nURL: https://mariadb.com/kb/en/is_ipv4/','','https://mariadb.com/kb/en/is_ipv4/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (156,14,'IS_IPV4_COMPAT','Syntax\n------\n\nIS_IPV4_COMPAT(expr)\n\nDescription\n-----------\n\nReturns 1 if a given numeric binary string IPv6 address, such as returned by\nINET6_ATON(), is IPv4-compatible, otherwise returns 0.\n\nMariaDB starting with 10.5.0\n----------------------------\nFrom MariaDB 10.5.0, when the argument is not INET6, automatic implicit CAST\nto INET6 is applied. As a consequence, IS_IPV4_COMPAT now understands\narguments in both text representation and binary(16) representation. Before\nMariaDB 10.5.0, the function understood only binary(16) representation.\n\nExamples\n--------\n\nSELECT IS_IPV4_COMPAT(INET6_ATON(\'::10.0.1.1\'));\n+------------------------------------------+\n| IS_IPV4_COMPAT(INET6_ATON(\'::10.0.1.1\')) |\n+------------------------------------------+\n| 1 |\n+------------------------------------------+\n\nSELECT IS_IPV4_COMPAT(INET6_ATON(\'::48f3::d432:1431:ba23:846f\'));\n+-----------------------------------------------------------+\n| IS_IPV4_COMPAT(INET6_ATON(\'::48f3::d432:1431:ba23:846f\')) |\n+-----------------------------------------------------------+\n| 0 |\n+-----------------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/is_ipv4_compat/','','https://mariadb.com/kb/en/is_ipv4_compat/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (157,14,'IS_IPV4_MAPPED','Syntax\n------\n\nIS_IPV4_MAPPED(expr)\n\nDescription\n-----------\n\nReturns 1 if a given a numeric binary string IPv6 address, such as returned by\nINET6_ATON(), is a valid IPv4-mapped address, otherwise returns 0.\n\nMariaDB starting with 10.5.0\n----------------------------\nFrom MariaDB 10.5.0, when the argument is not INET6, automatic implicit CAST\nto INET6 is applied. As a consequence, IS_IPV4_MAPPED now understands\narguments in both text representation and binary(16) representation. Before\nMariaDB 10.5.0, the function understood only binary(16) representation.\n\nExamples\n--------\n\nSELECT IS_IPV4_MAPPED(INET6_ATON(\'::10.0.1.1\'));\n+------------------------------------------+\n| IS_IPV4_MAPPED(INET6_ATON(\'::10.0.1.1\')) |\n+------------------------------------------+\n| 0 |\n+------------------------------------------+\n\nSELECT IS_IPV4_MAPPED(INET6_ATON(\'::ffff:10.0.1.1\'));\n+-----------------------------------------------+\n| IS_IPV4_MAPPED(INET6_ATON(\'::ffff:10.0.1.1\')) |\n+-----------------------------------------------+\n| 1 |\n+-----------------------------------------------+\n\nURL: https://mariadb.com/kb/en/is_ipv4_mapped/','','https://mariadb.com/kb/en/is_ipv4_mapped/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (158,14,'IS_IPV6','Syntax\n------\n\nIS_IPV6(expr)\n\nDescription\n-----------\n\nReturns 1 if the expression is a valid IPv6 address specified as a string,\notherwise returns 0. Does not consider IPv4 addresses to be valid IPv6\naddresses.\n\nExamples\n--------\n\nSELECT IS_IPV6(\'48f3::d432:1431:ba23:846f\');\n+--------------------------------------+\n| IS_IPV6(\'48f3::d432:1431:ba23:846f\') |\n+--------------------------------------+\n| 1 |\n+--------------------------------------+\n1 row in set (0.02 sec)\n\nSELECT IS_IPV6(\'10.0.1.1\');\n+---------------------+\n| IS_IPV6(\'10.0.1.1\') |\n+---------------------+\n| 0 |\n+---------------------+\n\nURL: https://mariadb.com/kb/en/is_ipv6/','','https://mariadb.com/kb/en/is_ipv6/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (159,14,'IS_USED_LOCK','Syntax\n------\n\nIS_USED_LOCK(str)\n\nDescription\n-----------\n\nChecks whether the lock named str is in use (that is, locked). If so, it\nreturns the connection identifier of the client that holds the lock.\nOtherwise, it returns NULL. str is case insensitive.\n\nIf the metadata_lock_info plugin is installed, the Information Schema\nmetadata_lock_info table contains information about locks of this kind (as\nwell as metadata locks).\n\nStatements using the IS_USED_LOCK function are not safe for statement-based\nreplication.\n\nURL: https://mariadb.com/kb/en/is_used_lock/','','https://mariadb.com/kb/en/is_used_lock/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (160,14,'MASTER_GTID_WAIT','Syntax\n------\n\nMASTER_GTID_WAIT(gtid-list[, timeout)\n\nDescription\n-----------\n\nThis function takes a string containing a comma-separated list of global\ntransaction id\'s (similar to the value of, for example, gtid_binlog_pos). It\nwaits until the value of gtid_slave_pos has the same or higher seq_no within\nall replication domains specified in the gtid-list; in other words, it waits\nuntil the slave has reached the specified GTID position.\n\nAn optional second argument gives a timeout in seconds. If the timeout expires\nbefore the specified GTID position is reached, then the function returns -1.\nPassing NULL or a negative number for the timeout means no timeout, and the\nfunction will wait indefinitely.\n\nIf the wait completes without a timeout, 0 is returned. Passing NULL for the\ngtid-list makes the function return NULL immediately, without waiting.\n\nThe gtid-list may be the empty string, in which case MASTER_GTID_WAIT()\nreturns immediately. If the gtid-list contains fewer domains than\ngtid_slave_pos, then only those domains are waited upon. If gtid-list contains\na domain that is not present in @@gtid_slave_pos, then MASTER_GTID_WAIT() will\nwait until an event containing such domain_id arrives on the slave (or until\ntimed out or killed).\n\nMASTER_GTID_WAIT() can be useful to ensure that a slave has caught up to a\nmaster. Simply take the value of gtid_binlog_pos on the master, and use it in\na MASTER_GTID_WAIT() call on the slave; when the call completes, the slave\nwill have caught up with that master position.\n\nMASTER_GTID_WAIT() can also be used in client applications together with the\nlast_gtid session variable. This is useful in a read-scaleout replication\nsetup, where the application writes to a single master but divides the reads\nout to a number of slaves to distribute the load. In such a setup, there is a\nrisk that an application could first do an update on the master, and then a\nbit later do a read on a slave, and if the slave is not fast enough, the data\nread from the slave might not include the update just made, possibly confusing\nthe application and/or the end-user. One way to avoid this is to request the\nvalue of last_gtid on the master just after the update. Then before doing the\nread on the slave, do a MASTER_GTID_WAIT() on the value obtained from the\nmaster; this will ensure that the read is not performed until the slave has\nreplicated sufficiently far for the update to have become visible.\n\nNote that MASTER_GTID_WAIT() can be used even if the slave is configured not\nto use GTID for connections (CHANGE MASTER TO master_use_gtid=no). This is\nbecause from MariaDB 10, GTIDs are always logged on the master server, and\nalways recorded on the slave servers.\n\nDifferences to MASTER_POS_WAIT()\n--------------------------------\n\n* MASTER_GTID_WAIT() is global; it waits for any master connection to reach\n the specified GTID position. MASTER_POS_WAIT() works only against a\n specific connection. This also means that while MASTER_POS_WAIT() aborts if\n its master connection is terminated with STOP SLAVE or due to an error,\n MASTER_GTID_WAIT() continues to wait while slaves are stopped.\n\n* MASTER_GTID_WAIT() can take its timeout as a floating-point value, so a\n timeout in fractional seconds is supported, eg. MASTER_GTID_WAIT(\"0-1-100\",\n 0.5). (The minimum wait is one microsecond, 0.000001 seconds).\n\n* MASTER_GTID_WAIT() allows one to specify a timeout of zero in order to do a\n non-blocking check to see if the slaves have progressed to a specific GTID\nposition\n (MASTER_POS_WAIT() takes a zero timeout as meaning an infinite wait). To do\n an infinite MASTER_GTID_WAIT(), specify a negative timeout, or omit the\n timeout argument.\n\n* MASTER_GTID_WAIT() does not return the number of events executed since the\n wait started, nor does it return NULL if a slave thread is stopped. It\n always returns either 0 for successful wait completed, or -1 for timeout\n reached (or NULL if the specified gtid-pos is NULL).\n\nSince MASTER_GTID_WAIT() looks only at the seq_no part of the GTIDs, not the\nserver_id, care is needed if a slave becomes diverged from another server so\nthat two different GTIDs with the same seq_no (in the same domain) arrive at\nthe same server. This situation is in any case best avoided; setting\ngtid_strict_mode is recommended, as this will prevent any such out-of-order\nsequence numbers from ever being replicated on a slave.\n\nURL: https://mariadb.com/kb/en/master_gtid_wait/','','https://mariadb.com/kb/en/master_gtid_wait/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (161,14,'MASTER_POS_WAIT','Syntax\n------\n\nMASTER_POS_WAIT(log_name,log_pos[,timeout,[\"connection_name\"]])\n\nDescription\n-----------\n\nThis function is useful in replication for controlling primary/replica\nsynchronization. It blocks until the replica has read and applied all updates\nup to the specified position (log_name,log_pos) in the primary log. The return\nvalue is the number of log events the replica had to wait for to advance to\nthe specified position. The function returns NULL if the replica SQL thread is\nnot started, the replica\'s primary information is not initialized, the\narguments are incorrect, or an error occurs. It returns -1 if the timeout has\nbeen exceeded. If the replica SQL thread stops while MASTER_POS_WAIT() is\nwaiting, the function returns NULL. If the replica is past the specified\nposition, the function returns immediately.\n\nIf a timeout value is specified, MASTER_POS_WAIT() stops waiting when timeout\nseconds have elapsed. timeout must be greater than 0; a zero or negative\ntimeout means no timeout.\n\nThe connection_name is used when you are using multi-source-replication. If\nyou don\'t specify it, it\'s set to the value of the default_master_connection\nsystem variable.\n\nStatements using the MASTER_POS_WAIT() function are not safe for replication.\n\nURL: https://mariadb.com/kb/en/master_pos_wait/','','https://mariadb.com/kb/en/master_pos_wait/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (162,14,'NAME_CONST','Syntax\n------\n\nNAME_CONST(name,value)\n\nDescription\n-----------\n\nReturns the given value. When used to produce a result set column,\nNAME_CONST() causes the column to have the given name. The arguments should be\nconstants.\n\nThis function is used internally when replicating stored procedures. It makes\nlittle sense to use it explicitly in SQL statements, and it was not supposed\nto be used like that.\n\nSELECT NAME_CONST(\'myname\', 14);\n+--------+\n| myname |\n+--------+\n| 14 |\n+--------+\n\nURL: https://mariadb.com/kb/en/name_const/','','https://mariadb.com/kb/en/name_const/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (163,14,'RELEASE_ALL_LOCKS','MariaDB until 10.5.2\n--------------------\nRELEASE_ALL_LOCKS was added in MariaDB 10.5.2.\n\nSyntax\n------\n\nRELEASE_ALL_LOCKS()\n\nDescription\n-----------\n\nReleases all named locks held by the current session. Returns the number of\nlocks released, or 0 if none were held.\n\nStatements using the RELEASE_ALL_LOCKS function are not safe for\nstatement-based replication.\n\nExamples\n--------\n\nSELECT RELEASE_ALL_LOCKS();\n+---------------------+\n| RELEASE_ALL_LOCKS() | \n+---------------------+\n| 0 |\n+---------------------+\n\nSELECT GET_LOCK(\'lock1\',10);\n+----------------------+\n| GET_LOCK(\'lock1\',10) |\n+----------------------+\n| 1 |\n+----------------------+\n\nSELECT RELEASE_ALL_LOCKS();\n+---------------------+\n| RELEASE_ALL_LOCKS() | \n+---------------------+\n| 1 |\n+---------------------+\n\nURL: https://mariadb.com/kb/en/release_all_locks/','','https://mariadb.com/kb/en/release_all_locks/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (164,14,'RELEASE_LOCK','Syntax\n------\n\nRELEASE_LOCK(str)\n\nDescription\n-----------\n\nReleases the lock named by the string str that was obtained with GET_LOCK().\nReturns 1 if the lock was released, 0 if the lock was not established by this\nthread (in which case the lock is not released), and NULL if the named lock\ndid not exist. The lock does not exist if it was never obtained by a call to\nGET_LOCK() or if it has previously been released.\n\nstr is case insensitive. If str is an empty string or NULL, RELEASE_LOCK()\nreturns NULL and does nothing.\n\nStatements using the RELEASE_LOCK() function are not safe for replication.\n\nThe DO statement is convenient to use with RELEASE_LOCK().\n\nExamples\n--------\n\nConnection1:\n\nSELECT GET_LOCK(\'lock1\',10);\n+----------------------+\n| GET_LOCK(\'lock1\',10) |\n+----------------------+\n| 1 |\n+----------------------+\n\nConnection 2:\n\nSELECT GET_LOCK(\'lock2\',10);\n+----------------------+\n| GET_LOCK(\'lock2\',10) |\n+----------------------+\n| 1 |\n+----------------------+\n\nConnection 1:\n\nSELECT RELEASE_LOCK(\'lock1\'), RELEASE_LOCK(\'lock2\'), RELEASE_LOCK(\'lock3\');\n+-----------------------+-----------------------+-----------------------+\n| RELEASE_LOCK(\'lock1\') | RELEASE_LOCK(\'lock2\') | RELEASE_LOCK(\'lock3\') |\n+-----------------------+-----------------------+-----------------------+\n| 1 | 0 | NULL |\n+-----------------------+-----------------------+-----------------------+\n\nFrom MariaDB 10.0.2, it is possible to hold the same lock recursively. This\nexample is viewed using the metadata_lock_info plugin:\n\nSELECT GET_LOCK(\'lock3\',10);\n+----------------------+\n| GET_LOCK(\'lock3\',10) |\n+----------------------+\n| 1 |\n+----------------------+\n\nSELECT GET_LOCK(\'lock3\',10);\n+----------------------+\n| GET_LOCK(\'lock3\',10) |\n+----------------------+\n| 1 |\n+----------------------+\n\nSELECT * FROM INFORMATION_SCHEMA.METADATA_LOCK_INFO;\n+-----------+---------------------+---------------+-----------+--------------+-\n----------+\n| THREAD_ID | LOCK_MODE | LOCK_DURATION | LOCK_TYPE | TABLE_SCHEMA |\nTABLE_NAME |\n+-----------+---------------------+---------------+-----------+--------------+-\n----------+\n| 46 | MDL_SHARED_NO_WRITE | NULL | User lock | lock3 |\n |\n+-----------+---------------------+---------------+-----------+--------------+-\n----------+\n\nSELECT RELEASE_LOCK(\'lock3\');\n+-----------------------+\n| RELEASE_LOCK(\'lock3\') |\n+-----------------------+\n| 1 |\n+-----------------------+\n\nSELECT * FROM INFORMATION_SCHEMA.METADATA_LOCK_INFO;\n+-----------+---------------------+---------------+-----------+--------------+-\n----------+\n| THREAD_ID | LOCK_MODE | LOCK_DURATION | LOCK_TYPE | TABLE_SCHEMA |\nTABLE_NAME |\n+-----------+---------------------+---------------+-----------+--------------+-\n----------+\n| 46 | MDL_SHARED_NO_WRITE | NULL | User lock | lock3 |\n |\n+-----------+---------------------+---------------+-----------+--------------+-\n----------+\n\nSELECT RELEASE_LOCK(\'lock3\');\n+-----------------------+\n| RELEASE_LOCK(\'lock3\') |\n+-----------------------+\n| 1 |\n+-----------------------+\n\nSELECT * FROM INFORMATION_SCHEMA.METADATA_LOCK_INFO;\nEmpty set (0.000 sec)\n\nURL: https://mariadb.com/kb/en/release_lock/','','https://mariadb.com/kb/en/release_lock/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (165,14,'SLEEP','Syntax\n------\n\nSLEEP(duration)\n\nDescription\n-----------\n\nSleeps (pauses) for the number of seconds given by the duration argument, then\nreturns 0. If SLEEP() is interrupted, it returns 1. The duration may have a\nfractional part given in microseconds.\n\nStatements using the SLEEP() function are not safe for replication.\n\nExample\n-------\n\nSELECT SLEEP(5.5);\n+------------+\n| SLEEP(5.5) |\n+------------+\n| 0 |\n+------------+\n1 row in set (5.50 sec)\n\nURL: https://mariadb.com/kb/en/sleep/','','https://mariadb.com/kb/en/sleep/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (166,14,'SYS_GUID','MariaDB starting with 10.6.1\n----------------------------\nThe SYS_GUID function was introduced in MariaDB 10.6.1 to enhance Oracle\ncompatibility. Similar functionality can be achieved with the UUID function.\n\nSyntax\n------\n\nSYS_GUID()\n\nDescription\n-----------\n\nReturns a 16-byte globally unique identifier (GUID), similar to the UUID\nfunction, but without the - character.\n\nExample\n-------\n\nSELECT SYS_GUID();\n+----------------------------------+\n| SYS_GUID() |\n+----------------------------------+\n| 2C574E45BA2811EBB265F859713E4BE4 |\n+----------------------------------+\n\nURL: https://mariadb.com/kb/en/sys_guid/','','https://mariadb.com/kb/en/sys_guid/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (167,14,'UUID','Syntax\n------\n\nUUID()\n\nDescription\n-----------\n\nReturns a Universally Unique Identifier (UUID).\n\nA UUID is designed as a number that is globally unique in space and time. Two\ncalls to UUID() are expected to generate two different values, even if these\ncalls are performed on two separate computers that are not connected to each\nother.\n\nUUID() results are intended to be unique, but cannot always be relied upon to\nunpredictable and unguessable, so should not be relied upon for these purposes.\n\nA UUID is a 128-bit number represented by a utf8 string of five hexadecimal\nnumbers in aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee format:\n\n* The first three numbers are generated from a timestamp.\n* The fourth number preserves temporal uniqueness in case the timestamp value\n loses monotonicity (for example, due to daylight saving time).\n* The fifth number is an IEEE 802 node number that provides spatial uniqueness.\n A random number is substituted if the latter is not available (for example,\n because the host computer has no Ethernet card, or we do not know how to find\n the hardware address of an interface on your operating system). In this case,\n spatial uniqueness cannot be guaranteed. Nevertheless, a collision should\n have very low probability.\n\nCurrently, the MAC address of an interface is taken into account only on\nFreeBSD and Linux. On other operating systems, MariaDB uses a randomly\ngenerated 48-bit number.\n\nStatements using the UUID() function are not safe for replication.\n\nThe results are generated according to the \"DCE 1.1:Remote Procedure Call\"\n(Appendix A) CAE (Common Applications Environment) Specifications published by\nThe Open Group in October 1997 (Document Number C706).\n\nExamples\n--------\n\nSELECT UUID();\n+--------------------------------------+\n| UUID() |\n+--------------------------------------+\n| cd41294a-afb0-11df-bc9b-00241dd75637 |\n+--------------------------------------+\n\nURL: https://mariadb.com/kb/en/uuid/','','https://mariadb.com/kb/en/uuid/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (168,14,'UUID_SHORT','Syntax\n------\n\nUUID_SHORT()\n\nDescription\n-----------\n\nReturns a \"short\" universally unique identifier as a 64-bit unsigned integer\n(rather than a string-form 128-bit identifier as returned by the UUID()\nfunction).\n\nThe value of UUID_SHORT() is guaranteed to be unique if the following\nconditions hold:\n\n* The server_id of the current host is unique among your set of master and\n slave servers\n* server_id is between 0 and 255\n* You don\'t set back your system time for your server between mysqld restarts\n* You do not invoke UUID_SHORT() on average more than 16\n million times per second between mysqld restarts\n\nThe UUID_SHORT() return value is constructed this way:\n\n(server_id & 255) << 56\n+ (server_startup_time_in_seconds << 24)\n+ incremented_variable++;\n\nStatements using the UUID_SHORT() function are not safe for statement-based\nreplication.\n\nExamples\n--------\n\nSELECT UUID_SHORT();\n+-------------------+\n| UUID_SHORT() |\n+-------------------+\n| 21517162376069120 |\n+-------------------+\n\ncreate table t1 (a bigint unsigned default(uuid_short()) primary key);\ninsert into t1 values(),();\nselect * from t1;\n+-------------------+\n| a |\n+-------------------+\n| 98113699159474176 |\n| 98113699159474177 |\n+-------------------+\n\nURL: https://mariadb.com/kb/en/uuid_short/','','https://mariadb.com/kb/en/uuid_short/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (169,14,'VALUES / VALUE','Syntax\n------\n\nMariaDB starting with 10.3.3\n----------------------------\n\nVALUE(col_name)\n\nMariaDB until 10.3.2\n--------------------\n\nVALUES(col_name)\n\nDescription\n-----------\n\nIn an INSERT ... ON DUPLICATE KEY UPDATE statement, you can use the\nVALUES(col_name) function in the UPDATE clause to refer to column values from\nthe INSERT portion of the statement. In other words, VALUES(col_name) in the\nUPDATE clause refers to the value of col_name that would be inserted, had no\nduplicate-key conflict occurred. This function is especially useful in\nmultiple-row inserts.\n\nThe VALUES() function is meaningful only in INSERT ... ON DUPLICATE KEY UPDATE\nstatements and returns NULL otherwise.\n\nIn MariaDB 10.3.3 this function was renamed to VALUE(), because it\'s\nincompatible with the standard Table Value Constructors syntax, implemented in\nMariaDB 10.3.3.\n\nThe VALUES() function can still be used even from MariaDB 10.3.3, but only in\nINSERT ... ON DUPLICATE KEY UPDATE statements; it\'s a syntax error otherwise.\n\nExamples\n--------\n\nMariaDB starting with 10.3.3\n----------------------------\n\nINSERT INTO t (a,b,c) VALUES (1,2,3),(4,5,6)\n ON DUPLICATE KEY UPDATE c=VALUE(a)+VALUE(b);\n\nMariaDB until 10.3.2\n--------------------\n\nINSERT INTO t (a,b,c) VALUES (1,2,3),(4,5,6)\n ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);\n\nURL: https://mariadb.com/kb/en/values-value/','','https://mariadb.com/kb/en/values-value/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (170,15,'!','Syntax\n------\n\nNOT, !\n\nDescription\n-----------\n\nLogical NOT. Evaluates to 1 if the operand is 0, to 0 if the operand is\nnon-zero, and NOT NULL returns NULL.\n\nBy default, the ! operator has a higher precedence. If the HIGH_NOT_PRECEDENCE\nSQL_MODE flag is set, NOT and ! have the same precedence.\n\nExamples\n--------\n\nSELECT NOT 10;\n+--------+\n| NOT 10 |\n+--------+\n| 0 |\n+--------+\n\nSELECT NOT 0;\n+-------+\n| NOT 0 |\n+-------+\n| 1 |\n+-------+\n\nSELECT NOT NULL;\n+----------+\n| NOT NULL |\n+----------+\n| NULL |\n+----------+\n\nSELECT ! (1+1);\n+---------+\n| ! (1+1) |\n+---------+\n| 0 |\n+---------+\n\nSELECT ! 1+1;\n+-------+\n| ! 1+1 |\n+-------+\n| 1 |\n+-------+\n\nURL: https://mariadb.com/kb/en/not/','','https://mariadb.com/kb/en/not/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (171,15,'&&','Syntax\n------\n\nAND, &&\n\nDescription\n-----------\n\nLogical AND. Evaluates to 1 if all operands are non-zero and not NULL, to 0 if\none or more operands are 0, otherwise NULL is returned.\n\nFor this operator, short-circuit evaluation can be used.\n\nExamples\n--------\n\nSELECT 1 && 1;\n+--------+\n| 1 && 1 |\n+--------+\n| 1 |\n+--------+\n\nSELECT 1 && 0;\n+--------+\n| 1 && 0 |\n+--------+\n| 0 |\n+--------+\n\nSELECT 1 && NULL;\n+-----------+\n| 1 && NULL |\n+-----------+\n| NULL |\n+-----------+\n\nSELECT 0 && NULL;\n+-----------+\n| 0 && NULL |\n+-----------+\n| 0 |\n+-----------+\n\nSELECT NULL && 0;\n+-----------+\n| NULL && 0 |\n+-----------+\n| 0 |\n+-----------+\n\nURL: https://mariadb.com/kb/en/and/','','https://mariadb.com/kb/en/and/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (172,15,'XOR','Syntax\n------\n\nXOR\n\nDescription\n-----------\n\nXOR stands for eXclusive OR. Returns NULL if either operand is NULL. For\nnon-NULL operands, evaluates to 1 if an odd number of operands is non-zero,\notherwise 0 is returned.\n\nExamples\n--------\n\nSELECT 1 XOR 1;\n+---------+\n| 1 XOR 1 |\n+---------+\n| 0 |\n+---------+\n\nSELECT 1 XOR 0;\n+---------+\n| 1 XOR 0 |\n+---------+\n| 1 |\n+---------+\n\nSELECT 1 XOR NULL;\n+------------+\n| 1 XOR NULL |\n+------------+\n| NULL |\n+------------+\n\nIn the following example, the right 1 XOR 1 is evaluated first, and returns 0.\nThen, 1 XOR 0 is evaluated, and 1 is returned.\n\nSELECT 1 XOR 1 XOR 1;\n+---------------+\n| 1 XOR 1 XOR 1 |\n+---------------+\n| 1 |\n+---------------+\n\nURL: https://mariadb.com/kb/en/xor/','','https://mariadb.com/kb/en/xor/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (173,15,'||','Syntax\n------\n\nOR, ||\n\nDescription\n-----------\n\nLogical OR. When both operands are non-NULL, the result is 1 if any operand is\nnon-zero, and 0 otherwise. With a NULL operand, the result is 1 if the other\noperand is non-zero, and NULL otherwise. If both operands are NULL, the result\nis NULL.\n\nFor this operator, short-circuit evaluation can be used.\n\nNote that, if the PIPES_AS_CONCAT SQL_MODE is set, || is used as a string\nconcatenation operator. This means that a || b is the same as CONCAT(a,b). See\nCONCAT() for details.\n\nOracle Mode\n-----------\n\nMariaDB starting with 10.3\n--------------------------\nIn Oracle mode from MariaDB 10.3, || ignores NULL.\n\nExamples\n--------\n\nSELECT 1 || 1;\n+--------+\n| 1 || 1 |\n+--------+\n| 1 |\n+--------+\n\nSELECT 1 || 0;\n+--------+\n| 1 || 0 |\n+--------+\n| 1 |\n+--------+\n\nSELECT 0 || 0;\n+--------+\n| 0 || 0 |\n+--------+\n| 0 |\n+--------+\n\nSELECT 0 || NULL;\n+-----------+\n| 0 || NULL |\n+-----------+\n| NULL |\n+-----------+\n\nSELECT 1 || NULL;\n+-----------+\n| 1 || NULL |\n+-----------+\n| 1 |\n+-----------+\n\nIn Oracle mode, from MariaDB 10.3:\n\nSELECT 0 || NULL;\n+-----------+\n| 0 || NULL |\n+-----------+\n| 0 |\n+-----------+\n\nURL: https://mariadb.com/kb/en/or/','','https://mariadb.com/kb/en/or/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (174,16,'Stored Aggregate Functions','MariaDB starting with 10.3.3\n----------------------------\nThe ability to create stored aggregate functions was added in MariaDB 10.3.3.\n\nAggregate functions are functions that are computed over a sequence of rows\nand return one result for the sequence of rows.\n\nCreating a custom aggregate function is done using the CREATE FUNCTION\nstatement with two main differences:\n\n* The addition of the AGGREGATE keyword, so CREATE AGGREGATE FUNCTION\n* The FETCH GROUP NEXT ROW instruction inside the loop\n* Oracle PL/SQL compatibility using SQL/PL is provided\n\nStandard Syntax\n---------------\n\nCREATE AGGREGATE FUNCTION function_name (parameters) RETURNS return_type\nBEGIN\n All types of declarations\n DECLARE CONTINUE HANDLER FOR NOT FOUND RETURN return_val;\n LOOP\n FETCH GROUP NEXT ROW; // fetches next row from table\n other instructions\n END LOOP;\nEND\n\nStored aggregate functions were a 2016 Google Summer of Code project by Varun\nGupta.\n\nUsing SQL/PL\n------------\n\nSET sql_mode=Oracle;\nDELIMITER //\n\nCREATE AGGREGATE FUNCTION function_name (parameters) RETURN return_type\n declarations\nBEGIN\n LOOP\n FETCH GROUP NEXT ROW; -- fetches next row from table\n -- other instructions\n\nEND LOOP;\nEXCEPTION\n WHEN NO_DATA_FOUND THEN\n RETURN return_val;\nEND //\n\nDELIMITER ;\n\nExamples\n--------\n\nFirst a simplified example:\n\nCREATE TABLE marks(stud_id INT, grade_count INT);\n\nINSERT INTO marks VALUES (1,6), (2,4), (3,7), (4,5), (5,8);\n\nSELECT * FROM marks;\n+---------+-------------+\n| stud_id | grade_count |\n+---------+-------------+\n| 1 | 6 |\n| 2 | 4 |\n| 3 | 7 |\n| 4 | 5 |\n| 5 | 8 |\n+---------+-------------+\n\nDELIMITER //\nCREATE AGGREGATE FUNCTION IF NOT EXISTS aggregate_count(x INT) RETURNS INT\nBEGIN\n DECLARE count_students INT DEFAULT 0;\n DECLARE CONTINUE HANDLER FOR NOT FOUND\n RETURN count_students;\n LOOP\n FETCH GROUP NEXT ROW;\n IF x THEN\n SET count_students = count_students+1;\n END IF;\n END LOOP;\nEND //\nDELIMITER ;\n\nA non-trivial example that cannot easily be rewritten using existing functions:\n\nDELIMITER //\nCREATE AGGREGATE FUNCTION medi_int(x INT) RETURNS DOUBLE\nBEGIN\n DECLARE CONTINUE HANDLER FOR NOT FOUND\n BEGIN\n DECLARE res DOUBLE;\n DECLARE cnt INT DEFAULT (SELECT COUNT(*) FROM tt);\n DECLARE lim INT DEFAULT (cnt-1) DIV 2;\n IF cnt % 2 = 0 THEN\n SET res = (SELECT AVG(a) FROM (SELECT a FROM tt ORDER BY a LIMIT\nlim,2) ttt);\n ELSE\n SET res = (SELECT a FROM tt ORDER BY a LIMIT lim,1);\n END IF;\n DROP TEMPORARY TABLE tt;\n RETURN res;\n END;\n CREATE TEMPORARY TABLE tt (a INT);\n LOOP\n FETCH GROUP NEXT ROW;\n INSERT INTO tt VALUES (x);\n END LOOP;\nEND //\nDELIMITER ;\n\nSQL/PL Example\n--------------\n\nThis uses the same marks table as created above.\n\nSET sql_mode=Oracle;\nDELIMITER //\n\nCREATE AGGREGATE FUNCTION aggregate_count(x INT) RETURN INT AS count_students\nINT DEFAULT 0;\nBEGIN\n LOOP\n FETCH GROUP NEXT ROW;\n IF x THEN\n SET count_students := count_students+1;\n END IF;\n END LOOP;\nEXCEPTION\n WHEN NO_DATA_FOUND THEN\n RETURN count_students;\nEND aggregate_count //\nDELIMITER ;\n\nSELECT aggregate_count(stud_id) FROM marks;\n\nURL: https://mariadb.com/kb/en/stored-aggregate-functions/','','https://mariadb.com/kb/en/stored-aggregate-functions/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (175,16,'AVG','Syntax\n------\n\nAVG([DISTINCT] expr)\n\nDescription\n-----------\n\nReturns the average value of expr. The DISTINCT option can be used to return\nthe average of the distinct values of expr. NULL values are ignored. It is an\naggregate function, and so can be used with the GROUP BY clause.\n\nAVG() returns NULL if there were no matching rows.\n\nAVG() can be used as a window function.\n\nExamples\n--------\n\nCREATE TABLE sales (sales_value INT);\n\nINSERT INTO sales VALUES(10),(20),(20),(40);\n\nSELECT AVG(sales_value) FROM sales;\n+------------------+\n| AVG(sales_value) |\n+------------------+\n| 22.5000 |\n+------------------+\n\nSELECT AVG(DISTINCT(sales_value)) FROM sales;\n+----------------------------+\n| AVG(DISTINCT(sales_value)) |\n+----------------------------+\n| 23.3333 |\n+----------------------------+\n\nCommonly, AVG() is used with a GROUP BY clause:\n\nCREATE TABLE student (name CHAR(10), test CHAR(10), score TINYINT);\n\nINSERT INTO student VALUES \n (\'Chun\', \'SQL\', 75), (\'Chun\', \'Tuning\', 73),\n (\'Esben\', \'SQL\', 43), (\'Esben\', \'Tuning\', 31),\n (\'Kaolin\', \'SQL\', 56), (\'Kaolin\', \'Tuning\', 88),\n (\'Tatiana\', \'SQL\', 87), (\'Tatiana\', \'Tuning\', 83);\n\nSELECT name, AVG(score) FROM student GROUP BY name;\n+---------+------------+\n| name | AVG(score) |\n+---------+------------+\n| Chun | 74.0000 |\n| Esben | 37.0000 |\n| Kaolin | 72.0000 |\n| Tatiana | 85.0000 |\n+---------+------------+\n\nBe careful to avoid this common mistake, not grouping correctly and returning\nmismatched data:\n\nSELECT name,test,AVG(score) FROM student;\n+------+------+------------+\n| name | test | MIN(score) |\n+------+------+------------+\n| Chun | SQL | 31 |\n+------+------+------------+\n\nAs a window function:\n\nCREATE TABLE student_test (name CHAR(10), test CHAR(10), score TINYINT);\n\nINSERT INTO student_test VALUES \n (\'Chun\', \'SQL\', 75), (\'Chun\', \'Tuning\', 73),\n (\'Esben\', \'SQL\', 43), (\'Esben\', \'Tuning\', 31),\n (\'Kaolin\', \'SQL\', 56), (\'Kaolin\', \'Tuning\', 88),\n (\'Tatiana\', \'SQL\', 87), (\'Tatiana\', \'Tuning\', 83);\n\nSELECT name, test, score, AVG(score) OVER (PARTITION BY test) \n AS average_by_test FROM student_test;\n+---------+--------+-------+-----------------+\n| name | test | score | average_by_test |\n+---------+--------+-------+-----------------+\n| Chun | SQL | 75 | 65.2500 |\n| Chun | Tuning | 73 | 68.7500 |\n| Esben | SQL | 43 | 65.2500 |\n| Esben | Tuning | 31 | 68.7500 |\n| Kaolin | SQL | 56 | 65.2500 |\n| Kaolin | Tuning | 88 | 68.7500 |\n| Tatiana | SQL | 87 | 65.2500 |\n| Tatiana | Tuning | 83 | 68.7500 |\n+---------+--------+-------+-----------------+\n\nURL: https://mariadb.com/kb/en/avg/','','https://mariadb.com/kb/en/avg/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (176,16,'BIT_AND','Syntax\n------\n\nBIT_AND(expr) [over_clause]\n\nDescription\n-----------\n\nReturns the bitwise AND of all bits in expr. The calculation is performed with\n64-bit (BIGINT) precision. It is an aggregate function, and so can be used\nwith the GROUP BY clause.\n\nIf no rows match, BIT_AND will return a value with all bits set to 1. NULL\nvalues have no effect on the result unless all results are NULL, which is\ntreated as no match.\n\nBIT_AND can be used as a window function with the addition of the over_clause.\n\nExamples\n--------\n\nCREATE TABLE vals (x INT);\n\nINSERT INTO vals VALUES(111),(110),(100);\n\nSELECT BIT_AND(x), BIT_OR(x), BIT_XOR(x) FROM vals;\n+------------+-----------+------------+\n| BIT_AND(x) | BIT_OR(x) | BIT_XOR(x) |\n+------------+-----------+------------+\n| 100 | 111 | 101 |\n+------------+-----------+------------+\n\nAs an aggregate function:\n\nCREATE TABLE vals2 (category VARCHAR(1), x INT);\n\nINSERT INTO vals2 VALUES\n (\'a\',111),(\'a\',110),(\'a\',100),\n (\'b\',\'000\'),(\'b\',001),(\'b\',011);\n\nSELECT category, BIT_AND(x), BIT_OR(x), BIT_XOR(x) \n FROM vals GROUP BY category;\n+----------+------------+-----------+------------+\n| category | BIT_AND(x) | BIT_OR(x) | BIT_XOR(x) |\n+----------+------------+-----------+------------+\n| a | 100 | 111 | 101 |\n| b | 0 | 11 | 10 |\n+----------+------------+-----------+------------+\n\nNo match:\n\nSELECT BIT_AND(NULL);\n+----------------------+\n| BIT_AND(NULL) |\n+----------------------+\n| 18446744073709551615 |\n+----------------------+\n\nURL: https://mariadb.com/kb/en/bit_and/','','https://mariadb.com/kb/en/bit_and/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (177,16,'BIT_OR','Syntax\n------\n\nBIT_OR(expr) [over_clause]\n\nDescription\n-----------\n\nReturns the bitwise OR of all bits in expr. The calculation is performed with\n64-bit (BIGINT) precision. It is an aggregate function, and so can be used\nwith the GROUP BY clause.\n\nIf no rows match, BIT_OR will return a value with all bits set to 0. NULL\nvalues have no effect on the result unless all results are NULL, which is\ntreated as no match.\n\nBIT_OR can be used as a window function with the addition of the over_clause.\n\nExamples\n--------\n\nCREATE TABLE vals (x INT);\n\nINSERT INTO vals VALUES(111),(110),(100);\n\nSELECT BIT_AND(x), BIT_OR(x), BIT_XOR(x) FROM vals;\n+------------+-----------+------------+\n| BIT_AND(x) | BIT_OR(x) | BIT_XOR(x) |\n+------------+-----------+------------+\n| 100 | 111 | 101 |\n+------------+-----------+------------+\n\nAs an aggregate function:\n\nCREATE TABLE vals2 (category VARCHAR(1), x INT);\n\nINSERT INTO vals2 VALUES\n (\'a\',111),(\'a\',110),(\'a\',100),\n (\'b\',\'000\'),(\'b\',001),(\'b\',011);\n\nSELECT category, BIT_AND(x), BIT_OR(x), BIT_XOR(x) \n FROM vals GROUP BY category;\n+----------+------------+-----------+------------+\n| category | BIT_AND(x) | BIT_OR(x) | BIT_XOR(x) |\n+----------+------------+-----------+------------+\n| a | 100 | 111 | 101 |\n| b | 0 | 11 | 10 |\n+----------+------------+-----------+------------+\n\nNo match:\n\nSELECT BIT_OR(NULL);\n+--------------+\n| BIT_OR(NULL) |\n+--------------+\n| 0 |\n+--------------+\n\nURL: https://mariadb.com/kb/en/bit_or/','','https://mariadb.com/kb/en/bit_or/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (178,16,'BIT_XOR','Syntax\n------\n\nBIT_XOR(expr) [over_clause]\n\nDescription\n-----------\n\nReturns the bitwise XOR of all bits in expr. The calculation is performed with\n64-bit (BIGINT) precision. It is an aggregate function, and so can be used\nwith the GROUP BY clause.\n\nIf no rows match, BIT_XOR will return a value with all bits set to 0. NULL\nvalues have no effect on the result unless all results are NULL, which is\ntreated as no match.\n\nBIT_XOR can be used as a window function with the addition of the over_clause.\n\nExamples\n--------\n\nCREATE TABLE vals (x INT);\n\nINSERT INTO vals VALUES(111),(110),(100);\n\nSELECT BIT_AND(x), BIT_OR(x), BIT_XOR(x) FROM vals;\n+------------+-----------+------------+\n| BIT_AND(x) | BIT_OR(x) | BIT_XOR(x) |\n+------------+-----------+------------+\n| 100 | 111 | 101 |\n+------------+-----------+------------+\n\nAs an aggregate function:\n\nCREATE TABLE vals2 (category VARCHAR(1), x INT);\n\nINSERT INTO vals2 VALUES\n (\'a\',111),(\'a\',110),(\'a\',100),\n (\'b\',\'000\'),(\'b\',001),(\'b\',011);\n\nSELECT category, BIT_AND(x), BIT_OR(x), BIT_XOR(x) \n FROM vals GROUP BY category;\n+----------+------------+-----------+------------+\n| category | BIT_AND(x) | BIT_OR(x) | BIT_XOR(x) |\n+----------+------------+-----------+------------+\n| a | 100 | 111 | 101 |\n| b | 0 | 11 | 10 |\n+----------+------------+-----------+------------+\n\nNo match:\n\nSELECT BIT_XOR(NULL);\n+---------------+\n| BIT_XOR(NULL) |\n+---------------+\n| 0 |\n+---------------+\n\nURL: https://mariadb.com/kb/en/bit_xor/','','https://mariadb.com/kb/en/bit_xor/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (179,16,'COUNT','Syntax\n------\n\nCOUNT(expr)\n\nDescription\n-----------\n\nReturns a count of the number of non-NULL values of expr in the rows retrieved\nby a SELECT statement. The result is a BIGINT value. It is an aggregate\nfunction, and so can be used with the GROUP BY clause.\n\nCOUNT(*) counts the total number of rows in a table.\n\nCOUNT() returns 0 if there were no matching rows.\n\nCOUNT() can be used as a window function.\n\nExamples\n--------\n\nCREATE TABLE student (name CHAR(10), test CHAR(10), score TINYINT);\n\nINSERT INTO student VALUES \n (\'Chun\', \'SQL\', 75), (\'Chun\', \'Tuning\', 73),\n (\'Esben\', \'SQL\', 43), (\'Esben\', \'Tuning\', 31),\n (\'Kaolin\', \'SQL\', 56), (\'Kaolin\', \'Tuning\', 88),\n (\'Tatiana\', \'SQL\', 87), (\'Tatiana\', \'Tuning\', 83);\n\nSELECT COUNT(*) FROM student;\n+----------+\n| COUNT(*) |\n+----------+\n| 8 |\n+----------+\n\nCOUNT(DISTINCT) example:\n\nSELECT COUNT(DISTINCT (name)) FROM student;\n+------------------------+\n| COUNT(DISTINCT (name)) |\n+------------------------+\n| 4 |\n+------------------------+\n\nAs a window function\n\nCREATE OR REPLACE TABLE student_test (name CHAR(10), test CHAR(10), score\nTINYINT);\n\nINSERT INTO student_test VALUES \n (\'Chun\', \'SQL\', 75), (\'Chun\', \'Tuning\', 73),\n (\'Esben\', \'SQL\', 43), (\'Esben\', \'Tuning\', 31),\n (\'Kaolin\', \'SQL\', 56), (\'Kaolin\', \'Tuning\', 88),\n (\'Tatiana\', \'SQL\', 87);\n\nSELECT name, test, score, COUNT(score) OVER (PARTITION BY name) \n AS tests_written FROM student_test;\n+---------+--------+-------+---------------+\n| name | test | score | tests_written |\n+---------+--------+-------+---------------+\n| Chun | SQL | 75 | 2 |\n| Chun | Tuning | 73 | 2 |\n| Esben | SQL | 43 | 2 |\n| Esben | Tuning | 31 | 2 |\n| Kaolin | SQL | 56 | 2 |\n| Kaolin | Tuning | 88 | 2 |\n| Tatiana | SQL | 87 | 1 |\n+---------+--------+-------+---------------+\n\nURL: https://mariadb.com/kb/en/count/','','https://mariadb.com/kb/en/count/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (180,16,'COUNT DISTINCT','Syntax\n------\n\nCOUNT(DISTINCT expr,[expr...])\n\nDescription\n-----------\n\nReturns a count of the number of different non-NULL values.\n\nCOUNT(DISTINCT) returns 0 if there were no matching rows.\n\nAlthough, from MariaDB 10.2.0, COUNT can be used as a window function, COUNT\nDISTINCT cannot be.\n\nExamples\n--------\n\nCREATE TABLE student (name CHAR(10), test CHAR(10), score TINYINT);\n\nINSERT INTO student VALUES \n (\'Chun\', \'SQL\', 75), (\'Chun\', \'Tuning\', 73),\n (\'Esben\', \'SQL\', 43), (\'Esben\', \'Tuning\', 31),\n (\'Kaolin\', \'SQL\', 56), (\'Kaolin\', \'Tuning\', 88),\n (\'Tatiana\', \'SQL\', 87), (\'Tatiana\', \'Tuning\', 83);\n\nSELECT COUNT(*) FROM student;\n+----------+\n| COUNT(*) |\n+----------+\n| 8 |\n+----------+\n\nSELECT COUNT(DISTINCT (name)) FROM student;\n+------------------------+\n| COUNT(DISTINCT (name)) |\n+------------------------+\n| 4 |\n+------------------------+\n\nURL: https://mariadb.com/kb/en/count-distinct/','','https://mariadb.com/kb/en/count-distinct/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (181,16,'GROUP_CONCAT','Syntax\n------\n\nGROUP_CONCAT(expr)\n\nDescription\n-----------\n\nThis function returns a string result with the concatenated non-NULL values\nfrom a group. It returns NULL if there are no non-NULL values.\n\nThe maximum returned length in bytes is determined by the group_concat_max_len\nserver system variable, which defaults to 1M (>= MariaDB 10.2.4) or 1K (<=\nMariaDB 10.2.3).\n\nIf group_concat_max_len <= 512, the return type is VARBINARY or VARCHAR;\notherwise, the return type is BLOB or TEXT. The choice between binary or\nnon-binary types depends from the input.\n\nThe full syntax is as follows:\n\nGROUP_CONCAT([DISTINCT] expr [,expr ...]\n [ORDER BY {unsigned_integer | col_name | expr}\n [ASC | DESC] [,col_name ...]]\n [SEPARATOR str_val]\n [LIMIT {[offset,] row_count | row_count OFFSET offset}])\n\nDISTINCT eliminates duplicate values from the output string.\n\nORDER BY determines the order of returned values.\n\nSEPARATOR specifies a separator between the values. The default separator is a\ncomma (,). It is possible to avoid using a separator by specifying an empty\nstring.\n\nLIMIT\n-----\n\nMariaDB starting with 10.3.3\n----------------------------\nUntil MariaDB 10.3.2, it was not possible to use the LIMIT clause with\nGROUP_CONCAT. This restriction was lifted in MariaDB 10.3.3.\n\nExamples\n--------\n\nSELECT student_name,\n GROUP_CONCAT(test_score)\n FROM student\n GROUP BY student_name;\n\nGet a readable list of MariaDB users from the mysql.user table:\n\nSELECT GROUP_CONCAT(DISTINCT User ORDER BY User SEPARATOR \'\\n\')\n FROM mysql.user;\n\nIn the former example, DISTINCT is used because the same user may occur more\nthan once. The new line (\\n) used as a SEPARATOR makes the results easier to\nread.\n\nGet a readable list of hosts from which each user can connect:\n\nSELECT User, GROUP_CONCAT(Host ORDER BY Host SEPARATOR \', \') \n FROM mysql.user GROUP BY User ORDER BY User;\n\nThe former example shows the difference between the GROUP_CONCAT\'s ORDER BY\n(which sorts the concatenated hosts), and the SELECT\'s ORDER BY (which sorts\nthe rows).\n\nFrom MariaDB 10.3.3, LIMIT can be used with GROUP_CONCAT, so, for example,\ngiven the following table:\n\nCREATE TABLE d (dd DATE, cc INT);\n\nINSERT INTO d VALUES (\'2017-01-01\',1);\nINSERT INTO d VALUES (\'2017-01-02\',2);\nINSERT INTO d VALUES (\'2017-01-04\',3);\n\nthe following query:\n\nSELECT SUBSTRING_INDEX(GROUP_CONCAT(CONCAT_WS(\":\",dd,cc) ORDER BY cc\nDESC),\",\",1) FROM d;\n+----------------------------------------------------------------------------+\n| SUBSTRING_INDEX(GROUP_CONCAT(CONCAT_WS(\":\",dd,cc) ORDER BY cc DESC),\",\",1) |\n+----------------------------------------------------------------------------+\n| 2017-01-04:3 |\n+----------------------------------------------------------------------------+\n\ncan be more simply rewritten as:\n\nSELECT GROUP_CONCAT(CONCAT_WS(\":\",dd,cc) ORDER BY cc DESC LIMIT 1) FROM d;\n+-------------------------------------------------------------+\n| GROUP_CONCAT(CONCAT_WS(\":\",dd,cc) ORDER BY cc DESC LIMIT 1) |\n+-------------------------------------------------------------+\n| 2017-01-04:3 |\n+-------------------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/group_concat/','','https://mariadb.com/kb/en/group_concat/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (182,16,'MAX','Syntax\n------\n\nMAX([DISTINCT] expr)\n\nDescription\n-----------\n\nReturns the largest, or maximum, value of expr. MAX() can also take a string\nargument in which case it returns the maximum string value. The DISTINCT\nkeyword can be used to find the maximum of the distinct values of expr,\nhowever, this produces the same result as omitting DISTINCT.\n\nNote that SET and ENUM fields are currently compared by their string value\nrather than their relative position in the set, so MAX() may produce a\ndifferent highest result than ORDER BY DESC.\n\nIt is an aggregate function, and so can be used with the GROUP BY clause.\n\nMAX() can be used as a window function.\n\nMAX() returns NULL if there were no matching rows.\n\nExamples\n--------\n\nCREATE TABLE student (name CHAR(10), test CHAR(10), score TINYINT);\n\nINSERT INTO student VALUES \n (\'Chun\', \'SQL\', 75), (\'Chun\', \'Tuning\', 73),\n (\'Esben\', \'SQL\', 43), (\'Esben\', \'Tuning\', 31),\n (\'Kaolin\', \'SQL\', 56), (\'Kaolin\', \'Tuning\', 88),\n (\'Tatiana\', \'SQL\', 87), (\'Tatiana\', \'Tuning\', 83);\n\nSELECT name, MAX(score) FROM student GROUP BY name;\n+---------+------------+\n| name | MAX(score) |\n+---------+------------+\n| Chun | 75 |\n| Esben | 43 |\n| Kaolin | 88 |\n| Tatiana | 87 |\n+---------+------------+\n\nMAX string:\n\nSELECT MAX(name) FROM student;\n+-----------+\n| MAX(name) |\n+-----------+\n| Tatiana |\n+-----------+\n\nBe careful to avoid this common mistake, not grouping correctly and returning\nmismatched data:\n\nSELECT name,test,MAX(SCORE) FROM student;\n+------+------+------------+\n| name | test | MAX(SCORE) |\n+------+------+------------+\n| Chun | SQL | 88 |\n+------+------+------------+\n\nDifference between ORDER BY DESC and MAX():\n\nCREATE TABLE student2(name CHAR(10),grade ENUM(\'b\',\'c\',\'a\'));\n\nINSERT INTO student2 VALUES(\'Chun\',\'b\'),(\'Esben\',\'c\'),(\'Kaolin\',\'a\');\n\nSELECT MAX(grade) FROM student2;\n+------------+\n| MAX(grade) |\n+------------+\n| c |\n+------------+\n\nSELECT grade FROM student2 ORDER BY grade DESC LIMIT 1;\n+-------+\n| grade |\n+-------+\n| a |\n+-------+\n\nAs a window function:\n\nCREATE OR REPLACE TABLE student_test (name CHAR(10), test CHAR(10), score\nTINYINT);\nINSERT INTO student_test VALUES \n (\'Chun\', \'SQL\', 75), (\'Chun\', \'Tuning\', 73),\n (\'Esben\', \'SQL\', 43), (\'Esben\', \'Tuning\', 31),\n (\'Kaolin\', \'SQL\', 56), (\'Kaolin\', \'Tuning\', 88),\n (\'Tatiana\', \'SQL\', 87);\n\nSELECT name, test, score, MAX(score) \n OVER (PARTITION BY name) AS highest_score FROM student_test;\n+---------+--------+-------+---------------+\n| name | test | score | highest_score |\n+---------+--------+-------+---------------+\n| Chun | SQL | 75 | 75 |\n| Chun | Tuning | 73 | 75 |\n| Esben | SQL | 43 | 43 |\n| Esben | Tuning | 31 | 43 |\n| Kaolin | SQL | 56 | 88 |\n| Kaolin | Tuning | 88 | 88 |\n| Tatiana | SQL | 87 | 87 |\n+---------+--------+-------+---------------+\n\nURL: https://mariadb.com/kb/en/max/','','https://mariadb.com/kb/en/max/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (183,16,'MIN','Syntax\n------\n\nMIN([DISTINCT] expr)\n\nDescription\n-----------\n\nReturns the minimum value of expr. MIN() may take a string argument, in which\ncase it returns the minimum string value. The DISTINCT keyword can be used to\nfind the minimum of the distinct values of expr, however, this produces the\nsame result as omitting DISTINCT.\n\nNote that SET and ENUM fields are currently compared by their string value\nrather than their relative position in the set, so MIN() may produce a\ndifferent lowest result than ORDER BY ASC.\n\nIt is an aggregate function, and so can be used with the GROUP BY clause.\n\nMIN() can be used as a window function.\n\nMIN() returns NULL if there were no matching rows.\n\nExamples\n--------\n\nCREATE TABLE student (name CHAR(10), test CHAR(10), score TINYINT);\n\nINSERT INTO student VALUES \n (\'Chun\', \'SQL\', 75), (\'Chun\', \'Tuning\', 73),\n (\'Esben\', \'SQL\', 43), (\'Esben\', \'Tuning\', 31),\n (\'Kaolin\', \'SQL\', 56), (\'Kaolin\', \'Tuning\', 88),\n (\'Tatiana\', \'SQL\', 87), (\'Tatiana\', \'Tuning\', 83);\n\nSELECT name, MIN(score) FROM student GROUP BY name;\n+---------+------------+\n| name | MIN(score) |\n+---------+------------+\n| Chun | 73 |\n| Esben | 31 |\n| Kaolin | 56 |\n| Tatiana | 83 |\n+---------+------------+\n\nMIN() with a string:\n\nSELECT MIN(name) FROM student;\n+-----------+\n| MIN(name) |\n+-----------+\n| Chun |\n+-----------+\n\nBe careful to avoid this common mistake, not grouping correctly and returning\nmismatched data:\n\nSELECT name,test,MIN(score) FROM student;\n+------+------+------------+\n| name | test | MIN(score) |\n+------+------+------------+\n| Chun | SQL | 31 |\n+------+------+------------+\n\nDifference between ORDER BY ASC and MIN():\n\nCREATE TABLE student2(name CHAR(10),grade ENUM(\'b\',\'c\',\'a\'));\n\nINSERT INTO student2 VALUES(\'Chun\',\'b\'),(\'Esben\',\'c\'),(\'Kaolin\',\'a\');\n\nSELECT MIN(grade) FROM student2;\n+------------+\n| MIN(grade) |\n+------------+\n| a |\n+------------+\n\nSELECT grade FROM student2 ORDER BY grade ASC LIMIT 1;\n+-------+\n| grade |\n+-------+\n| b |\n+-------+\n\nAs a window function:\n\nCREATE OR REPLACE TABLE student_test (name CHAR(10), test CHAR(10), score\nTINYINT);\nINSERT INTO student_test VALUES \n (\'Chun\', \'SQL\', 75), (\'Chun\', \'Tuning\', 73),\n (\'Esben\', \'SQL\', 43), (\'Esben\', \'Tuning\', 31),\n (\'Kaolin\', \'SQL\', 56), (\'Kaolin\', \'Tuning\', 88),\n (\'Tatiana\', \'SQL\', 87);\n\nSELECT name, test, score, MIN(score) \n OVER (PARTITION BY name) AS lowest_score FROM student_test;\n+---------+--------+-------+--------------+\n| name | test | score | lowest_score |\n+---------+--------+-------+--------------+\n| Chun | SQL | 75 | 73 |\n| Chun | Tuning | 73 | 73 |\n| Esben | SQL | 43 | 31 |\n| Esben | Tuning | 31 | 31 |\n| Kaolin | SQL | 56 | 56 |\n| Kaolin | Tuning | 88 | 56 |\n| Tatiana | SQL | 87 | 87 |\n+---------+--------+-------+--------------+\n\nURL: https://mariadb.com/kb/en/min/','','https://mariadb.com/kb/en/min/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (184,16,'STD','Syntax\n------\n\nSTD(expr)\n\nDescription\n-----------\n\nReturns the population standard deviation of expr. This is an extension to\nstandard SQL. The standard SQL function STDDEV_POP() can be used instead.\n\nIt is an aggregate function, and so can be used with the GROUP BY clause.\n\nSTD() can be used as a window function.\n\nThis function returns NULL if there were no matching rows.\n\nExamples\n--------\n\nAs an aggregate function:\n\nCREATE OR REPLACE TABLE stats (category VARCHAR(2), x INT);\n\nINSERT INTO stats VALUES \n (\'a\',1),(\'a\',2),(\'a\',3),\n (\'b\',11),(\'b\',12),(\'b\',20),(\'b\',30),(\'b\',60);\n\nSELECT category, STDDEV_POP(x), STDDEV_SAMP(x), VAR_POP(x) \n FROM stats GROUP BY category;\n+----------+---------------+----------------+------------+\n| category | STDDEV_POP(x) | STDDEV_SAMP(x) | VAR_POP(x) |\n+----------+---------------+----------------+------------+\n| a | 0.8165 | 1.0000 | 0.6667 |\n| b | 18.0400 | 20.1693 | 325.4400 |\n+----------+---------------+----------------+------------+\n\nAs a window function:\n\nCREATE OR REPLACE TABLE student_test (name CHAR(10), test CHAR(10), score\nTINYINT);\n\nINSERT INTO student_test VALUES \n (\'Chun\', \'SQL\', 75), (\'Chun\', \'Tuning\', 73),\n (\'Esben\', \'SQL\', 43), (\'Esben\', \'Tuning\', 31),\n (\'Kaolin\', \'SQL\', 56), (\'Kaolin\', \'Tuning\', 88),\n (\'Tatiana\', \'SQL\', 87);\n\nSELECT name, test, score, STDDEV_POP(score) \n OVER (PARTITION BY test) AS stddev_results FROM student_test;\n+---------+--------+-------+----------------+\n| name | test | score | stddev_results |\n+---------+--------+-------+----------------+\n| Chun | SQL | 75 | 16.9466 |\n| Chun | Tuning | 73 | 24.1247 |\n| Esben | SQL | 43 | 16.9466 |\n| Esben | Tuning | 31 | 24.1247 |\n| Kaolin | SQL | 56 | 16.9466 |\n| Kaolin | Tuning | 88 | 24.1247 |\n| Tatiana | SQL | 87 | 16.9466 |\n+---------+--------+-------+----------------+\n\nURL: https://mariadb.com/kb/en/std/','','https://mariadb.com/kb/en/std/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (185,16,'STDDEV','Syntax\n------\n\nSTDDEV(expr)\n\nDescription\n-----------\n\nReturns the population standard deviation of expr. This function is provided\nfor compatibility with Oracle. The standard SQL function STDDEV_POP() can be\nused instead.\n\nIt is an aggregate function, and so can be used with the GROUP BY clause.\n\nSTDDEV() can be used as a window function.\n\nThis function returns NULL if there were no matching rows.\n\nExamples\n--------\n\nAs an aggregate function:\n\nCREATE OR REPLACE TABLE stats (category VARCHAR(2), x INT);\n\nINSERT INTO stats VALUES \n (\'a\',1),(\'a\',2),(\'a\',3),\n (\'b\',11),(\'b\',12),(\'b\',20),(\'b\',30),(\'b\',60);\n\nSELECT category, STDDEV_POP(x), STDDEV_SAMP(x), VAR_POP(x) \n FROM stats GROUP BY category;\n+----------+---------------+----------------+------------+\n| category | STDDEV_POP(x) | STDDEV_SAMP(x) | VAR_POP(x) |\n+----------+---------------+----------------+------------+\n| a | 0.8165 | 1.0000 | 0.6667 |\n| b | 18.0400 | 20.1693 | 325.4400 |\n+----------+---------------+----------------+------------+\n\nAs a window function:\n\nCREATE OR REPLACE TABLE student_test (name CHAR(10), test CHAR(10), score\nTINYINT);\n\nINSERT INTO student_test VALUES \n (\'Chun\', \'SQL\', 75), (\'Chun\', \'Tuning\', 73),\n (\'Esben\', \'SQL\', 43), (\'Esben\', \'Tuning\', 31),\n (\'Kaolin\', \'SQL\', 56), (\'Kaolin\', \'Tuning\', 88),\n (\'Tatiana\', \'SQL\', 87);\n\nSELECT name, test, score, STDDEV_POP(score) \n OVER (PARTITION BY test) AS stddev_results FROM student_test;\n+---------+--------+-------+----------------+\n| name | test | score | stddev_results |\n+---------+--------+-------+----------------+\n| Chun | SQL | 75 | 16.9466 |\n| Chun | Tuning | 73 | 24.1247 |\n| Esben | SQL | 43 | 16.9466 |\n| Esben | Tuning | 31 | 24.1247 |\n| Kaolin | SQL | 56 | 16.9466 |\n| Kaolin | Tuning | 88 | 24.1247 |\n| Tatiana | SQL | 87 | 16.9466 |\n+---------+--------+-------+----------------+\n\nURL: https://mariadb.com/kb/en/stddev/','','https://mariadb.com/kb/en/stddev/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (186,16,'STDDEV_POP','Syntax\n------\n\nSTDDEV_POP(expr)\n\nDescription\n-----------\n\nReturns the population standard deviation of expr (the square root of\nVAR_POP()). You can also use STD() or STDDEV(), which are equivalent but not\nstandard SQL.\n\nIt is an aggregate function, and so can be used with the GROUP BY clause.\n\nSTDDEV_POP() can be used as a window function.\n\nSTDDEV_POP() returns NULL if there were no matching rows.\n\nExamples\n--------\n\nAs an aggregate function:\n\nCREATE OR REPLACE TABLE stats (category VARCHAR(2), x INT);\n\nINSERT INTO stats VALUES \n (\'a\',1),(\'a\',2),(\'a\',3),\n (\'b\',11),(\'b\',12),(\'b\',20),(\'b\',30),(\'b\',60);\n\nSELECT category, STDDEV_POP(x), STDDEV_SAMP(x), VAR_POP(x) \n FROM stats GROUP BY category;\n+----------+---------------+----------------+------------+\n| category | STDDEV_POP(x) | STDDEV_SAMP(x) | VAR_POP(x) |\n+----------+---------------+----------------+------------+\n| a | 0.8165 | 1.0000 | 0.6667 |\n| b | 18.0400 | 20.1693 | 325.4400 |\n+----------+---------------+----------------+------------+\n\nAs a window function:\n\nCREATE OR REPLACE TABLE student_test (name CHAR(10), test CHAR(10), score\nTINYINT);\n\nINSERT INTO student_test VALUES \n (\'Chun\', \'SQL\', 75), (\'Chun\', \'Tuning\', 73),\n (\'Esben\', \'SQL\', 43), (\'Esben\', \'Tuning\', 31),\n (\'Kaolin\', \'SQL\', 56), (\'Kaolin\', \'Tuning\', 88),\n (\'Tatiana\', \'SQL\', 87);\n\nSELECT name, test, score, STDDEV_POP(score) \n OVER (PARTITION BY test) AS stddev_results FROM student_test;\n+---------+--------+-------+----------------+\n| name | test | score | stddev_results |\n+---------+--------+-------+----------------+\n| Chun | SQL | 75 | 16.9466 |\n| Chun | Tuning | 73 | 24.1247 |\n| Esben | SQL | 43 | 16.9466 |\n| Esben | Tuning | 31 | 24.1247 |\n| Kaolin | SQL | 56 | 16.9466 |\n| Kaolin | Tuning | 88 | 24.1247 |\n| Tatiana | SQL | 87 | 16.9466 |\n+---------+--------+-------+----------------+\n\nURL: https://mariadb.com/kb/en/stddev_pop/','','https://mariadb.com/kb/en/stddev_pop/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (187,16,'STDDEV_SAMP','Syntax\n------\n\nSTDDEV_SAMP(expr)\n\nDescription\n-----------\n\nReturns the sample standard deviation of expr (the square root of VAR_SAMP()).\n\nIt is an aggregate function, and so can be used with the GROUP BY clause.\n\nSTDDEV_SAMP() can be used as a window function.\n\nSTDDEV_SAMP() returns NULL if there were no matching rows.\n\nURL: https://mariadb.com/kb/en/stddev_samp/','','https://mariadb.com/kb/en/stddev_samp/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (188,16,'SUM','Syntax\n------\n\nSUM([DISTINCT] expr)\n\nDescription\n-----------\n\nReturns the sum of expr. If the return set has no rows, SUM() returns NULL.\nThe DISTINCT keyword can be used to sum only the distinct values of expr.\n\nSUM() can be used as a window function, although not with the DISTINCT\nspecifier.\n\nExamples\n--------\n\nCREATE TABLE sales (sales_value INT);\nINSERT INTO sales VALUES(10),(20),(20),(40);\n\nSELECT SUM(sales_value) FROM sales;\n+------------------+\n| SUM(sales_value) |\n+------------------+\n| 90 |\n+------------------+\n\nSELECT SUM(DISTINCT(sales_value)) FROM sales;\n+----------------------------+\n| SUM(DISTINCT(sales_value)) |\n+----------------------------+\n| 70 |\n+----------------------------+\n\nCommonly, SUM is used with a GROUP BY clause:\n\nCREATE TABLE sales (name CHAR(10), month CHAR(10), units INT);\n\nINSERT INTO sales VALUES \n (\'Chun\', \'Jan\', 75), (\'Chun\', \'Feb\', 73),\n (\'Esben\', \'Jan\', 43), (\'Esben\', \'Feb\', 31),\n (\'Kaolin\', \'Jan\', 56), (\'Kaolin\', \'Feb\', 88),\n (\'Tatiana\', \'Jan\', 87), (\'Tatiana\', \'Feb\', 83);\n\nSELECT name, SUM(units) FROM sales GROUP BY name;\n+---------+------------+\n| name | SUM(units) |\n+---------+------------+\n| Chun | 148 |\n| Esben | 74 |\n| Kaolin | 144 |\n| Tatiana | 170 |\n+---------+------------+\n\nThe GROUP BY clause is required when using an aggregate function along with\nregular column data, otherwise the result will be a mismatch, as in the\nfollowing common type of mistake:\n\nSELECT name,SUM(units) FROM sales\n;+------+------------+\n| name | SUM(units) |\n+------+------------+\n| Chun | 536 |\n+------+------------+\n\nAs a window function:\n\nCREATE OR REPLACE TABLE student_test (name CHAR(10), test CHAR(10), score\nTINYINT);\nINSERT INTO student_test VALUES \n (\'Chun\', \'SQL\', 75), (\'Chun\', \'Tuning\', 73),\n (\'Esben\', \'SQL\', 43), (\'Esben\', \'Tuning\', 31),\n (\'Kaolin\', \'SQL\', 56), (\'Kaolin\', \'Tuning\', 88),\n (\'Tatiana\', \'SQL\', 87);\n\nSELECT name, test, score, SUM(score) OVER (PARTITION BY name) AS total_score\nFROM student_test;\n+---------+--------+-------+-------------+\n| name | test | score | total_score |\n+---------+--------+-------+-------------+\n| Chun | SQL | 75 | 148 |\n| Chun | Tuning | 73 | 148 |\n| Esben | SQL | 43 | 74 |\n| Esben | Tuning | 31 | 74 |\n| Kaolin | SQL | 56 | 144 |\n| Kaolin | Tuning | 88 | 144 |\n| Tatiana | SQL | 87 | 87 |\n+---------+--------+-------+-------------+\n\nURL: https://mariadb.com/kb/en/sum/','','https://mariadb.com/kb/en/sum/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (189,16,'VARIANCE','Syntax\n------\n\nVARIANCE(expr)\n\nDescription\n-----------\n\nReturns the population standard variance of expr. This is an extension to\nstandard SQL. The standard SQL function VAR_POP() can be used instead.\n\nVariance is calculated by\n\n* working out the mean for the set\n* for each number, subtracting the mean and squaring the result\n* calculate the average of the resulting differences\n\nIt is an aggregate function, and so can be used with the GROUP BY clause.\n\nVARIANCE() can be used as a window function.\n\nVARIANCE() returns NULL if there were no matching rows.\n\nExamples\n--------\n\nCREATE TABLE v(i tinyint);\n\nINSERT INTO v VALUES(101),(99);\n\nSELECT VARIANCE(i) FROM v;\n+-------------+\n| VARIANCE(i) |\n+-------------+\n| 1.0000 |\n+-------------+\n\nINSERT INTO v VALUES(120),(80);\n\nSELECT VARIANCE(i) FROM v;\n+-------------+\n| VARIANCE(i) |\n+-------------+\n| 200.5000 |\n+-------------+\n\nAs an aggregate function:\n\nCREATE OR REPLACE TABLE stats (category VARCHAR(2), x INT);\n\nINSERT INTO stats VALUES \n (\'a\',1),(\'a\',2),(\'a\',3),\n (\'b\',11),(\'b\',12),(\'b\',20),(\'b\',30),(\'b\',60);\n\nSELECT category, STDDEV_POP(x), STDDEV_SAMP(x), VAR_POP(x) \n FROM stats GROUP BY category;\n+----------+---------------+----------------+------------+\n| category | STDDEV_POP(x) | STDDEV_SAMP(x) | VAR_POP(x) |\n+----------+---------------+----------------+------------+\n| a | 0.8165 | 1.0000 | 0.6667 |\n| b | 18.0400 | 20.1693 | 325.4400 |\n+----------+---------------+----------------+------------+\n\nAs a window function:\n\nCREATE OR REPLACE TABLE student_test (name CHAR(10), test CHAR(10), score\nTINYINT);\n\nINSERT INTO student_test VALUES \n (\'Chun\', \'SQL\', 75), (\'Chun\', \'Tuning\', 73),\n (\'Esben\', \'SQL\', 43), (\'Esben\', \'Tuning\', 31),\n (\'Kaolin\', \'SQL\', 56), (\'Kaolin\', \'Tuning\', 88),\n (\'Tatiana\', \'SQL\', 87);\n\nSELECT name, test, score, VAR_POP(score) \n OVER (PARTITION BY test) AS variance_results FROM student_test;\n+---------+--------+-------+------------------+\n| name | test | score | variance_results |\n+---------+--------+-------+------------------+\n| Chun | SQL | 75 | 287.1875 |\n| Chun | Tuning | 73 | 582.0000 |\n| Esben | SQL | 43 | 287.1875 |\n| Esben | Tuning | 31 | 582.0000 |\n| Kaolin | SQL | 56 | 287.1875 |\n| Kaolin | Tuning | 88 | 582.0000 |\n| Tatiana | SQL | 87 | 287.1875 |\n+---------+--------+-------+------------------+\n\nURL: https://mariadb.com/kb/en/variance/','','https://mariadb.com/kb/en/variance/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (190,16,'VAR_POP','Syntax\n------\n\nVAR_POP(expr)\n\nDescription\n-----------\n\nReturns the population standard variance of expr. It considers rows as the\nwhole population, not as a sample, so it has the number of rows as the\ndenominator. You can also use VARIANCE(), which is equivalent but is not\nstandard SQL.\n\nVariance is calculated by\n\n* working out the mean for the set\n* for each number, subtracting the mean and squaring the result\n* calculate the average of the resulting differences\n\nIt is an aggregate function, and so can be used with the GROUP BY clause.\n\nVAR_POP() can be used as a window function.\n\nVAR_POP() returns NULL if there were no matching rows.\n\nExamples\n--------\n\nCREATE TABLE v(i tinyint);\n\nINSERT INTO v VALUES(101),(99);\n\nSELECT VAR_POP(i) FROM v;\n+------------+\n| VAR_POP(i) |\n+------------+\n| 1.0000 |\n+------------+\n\nINSERT INTO v VALUES(120),(80);\n\nSELECT VAR_POP(i) FROM v;\n+------------+\n| VAR_POP(i) |\n+------------+\n| 200.5000 |\n+------------+\n\nAs an aggregate function:\n\nCREATE OR REPLACE TABLE stats (category VARCHAR(2), x INT);\n\nINSERT INTO stats VALUES \n (\'a\',1),(\'a\',2),(\'a\',3),\n (\'b\',11),(\'b\',12),(\'b\',20),(\'b\',30),(\'b\',60);\n\nSELECT category, STDDEV_POP(x), STDDEV_SAMP(x), VAR_POP(x) \n FROM stats GROUP BY category;\n+----------+---------------+----------------+------------+\n| category | STDDEV_POP(x) | STDDEV_SAMP(x) | VAR_POP(x) |\n+----------+---------------+----------------+------------+\n| a | 0.8165 | 1.0000 | 0.6667 |\n| b | 18.0400 | 20.1693 | 325.4400 |\n+----------+---------------+----------------+------------+\n\nAs a window function:\n\nCREATE OR REPLACE TABLE student_test (name CHAR(10), test CHAR(10), score\nTINYINT);\n\nINSERT INTO student_test VALUES \n (\'Chun\', \'SQL\', 75), (\'Chun\', \'Tuning\', 73),\n (\'Esben\', \'SQL\', 43), (\'Esben\', \'Tuning\', 31),\n (\'Kaolin\', \'SQL\', 56), (\'Kaolin\', \'Tuning\', 88),\n (\'Tatiana\', \'SQL\', 87);\n\nSELECT name, test, score, VAR_POP(score) \n OVER (PARTITION BY test) AS variance_results FROM student_test;\n+---------+--------+-------+------------------+\n| name | test | score | variance_results |\n+---------+--------+-------+------------------+\n| Chun | SQL | 75 | 287.1875 |\n| Esben | SQL | 43 | 287.1875 |\n| Kaolin | SQL | 56 | 287.1875 |\n| Tatiana | SQL | 87 | 287.1875 |\n| Chun | Tuning | 73 | 582.0000 |\n| Esben | Tuning | 31 | 582.0000 |\n| Kaolin | Tuning | 88 | 582.0000 |\n+---------+--------+-------+------------------+\n\nURL: https://mariadb.com/kb/en/var_pop/','','https://mariadb.com/kb/en/var_pop/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (191,16,'VAR_SAMP','Syntax\n------\n\nVAR_SAMP(expr)\n\nDescription\n-----------\n\nReturns the sample variance of expr. That is, the denominator is the number of\nrows minus one.\n\nIt is an aggregate function, and so can be used with the GROUP BY clause.\n\nVAR_SAMP() can be used as a window function.\n\nVAR_SAMP() returns NULL if there were no matching rows.\n\nExamples\n--------\n\nAs an aggregate function:\n\nCREATE OR REPLACE TABLE stats (category VARCHAR(2), x INT);\n\nINSERT INTO stats VALUES \n (\'a\',1),(\'a\',2),(\'a\',3),\n (\'b\',11),(\'b\',12),(\'b\',20),(\'b\',30),(\'b\',60);\n\nSELECT category, STDDEV_POP(x), STDDEV_SAMP(x), VAR_POP(x) \n FROM stats GROUP BY category;\n+----------+---------------+----------------+------------+\n| category | STDDEV_POP(x) | STDDEV_SAMP(x) | VAR_POP(x) |\n+----------+---------------+----------------+------------+\n| a | 0.8165 | 1.0000 | 0.6667 |\n| b | 18.0400 | 20.1693 | 325.4400 |\n+----------+---------------+----------------+------------+\n\nAs a window function:\n\nCREATE OR REPLACE TABLE student_test (name CHAR(10), test CHAR(10), score\nTINYINT);\n\nINSERT INTO student_test VALUES \n (\'Chun\', \'SQL\', 75), (\'Chun\', \'Tuning\', 73),\n (\'Esben\', \'SQL\', 43), (\'Esben\', \'Tuning\', 31),\n (\'Kaolin\', \'SQL\', 56), (\'Kaolin\', \'Tuning\', 88),\n (\'Tatiana\', \'SQL\', 87);\n\nSELECT name, test, score, VAR_SAMP(score) \n OVER (PARTITION BY test) AS variance_results FROM student_test;\n+---------+--------+-------+------------------+\n| name | test | score | variance_results |\n+---------+--------+-------+------------------+\n| Chun | SQL | 75 | 382.9167 |\n| Chun | Tuning | 73 | 873.0000 |\n| Esben | SQL | 43 | 382.9167 |\n| Esben | Tuning | 31 | 873.0000 |\n| Kaolin | SQL | 56 | 382.9167 |\n| Kaolin | Tuning | 88 | 873.0000 |\n| Tatiana | SQL | 87 | 382.9167 |\n+---------+--------+-------+------------------+\n\nURL: https://mariadb.com/kb/en/var_samp/','','https://mariadb.com/kb/en/var_samp/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (192,17,'BENCHMARK','Syntax\n------\n\nBENCHMARK(count,expr)\n\nDescription\n-----------\n\nThe BENCHMARK() function executes the expression expr repeatedly count times.\nIt may be used to time how quickly MariaDB processes the expression. The\nresult value is always 0. The intended use is from within the mysql client,\nwhich reports query execution times.\n\nExamples\n--------\n\nSELECT BENCHMARK(1000000,ENCODE(\'hello\',\'goodbye\'));\n+----------------------------------------------+\n| BENCHMARK(1000000,ENCODE(\'hello\',\'goodbye\')) |\n+----------------------------------------------+\n| 0 |\n+----------------------------------------------+\n1 row in set (0.21 sec)\n\nURL: https://mariadb.com/kb/en/benchmark/','','https://mariadb.com/kb/en/benchmark/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (193,17,'BINLOG_GTID_POS','Syntax\n------\n\nBINLOG_GTID_POS(binlog_filename,binlog_offset)\n\nDescription\n-----------\n\nThe BINLOG_GTID_POS() function takes as input an old-style binary log position\nin the form of a file name and a file offset. It looks up the position in the\ncurrent binlog, and returns a string representation of the corresponding GTID\nposition. If the position is not found in the current binlog, NULL is returned.\n\nExamples\n--------\n\nSELECT BINLOG_GTID_POS(\"master-bin.000001\", 600);\n\nURL: https://mariadb.com/kb/en/binlog_gtid_pos/','','https://mariadb.com/kb/en/binlog_gtid_pos/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (194,17,'CHARSET','Syntax\n------\n\nCHARSET(str)\n\nDescription\n-----------\n\nReturns the character set of the string argument. If str is not a string, it\nis considered as a binary string (so the function returns \'binary\'). This\napplies to NULL, too. The return value is a string in the utf8 character set.\n\nExamples\n--------\n\nSELECT CHARSET(\'abc\');\n+----------------+\n| CHARSET(\'abc\') |\n+----------------+\n| latin1 |\n+----------------+\n\nSELECT CHARSET(CONVERT(\'abc\' USING utf8));\n+------------------------------------+\n| CHARSET(CONVERT(\'abc\' USING utf8)) |\n+------------------------------------+\n| utf8 |\n+------------------------------------+\n\nSELECT CHARSET(USER());\n+-----------------+\n| CHARSET(USER()) |\n+-----------------+\n| utf8 |\n+-----------------+\n\nURL: https://mariadb.com/kb/en/charset/','','https://mariadb.com/kb/en/charset/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (195,17,'COERCIBILITY','Syntax\n------\n\nCOERCIBILITY(str)\n\nDescription\n-----------\n\nReturns the collation coercibility value of the string argument. Coercibility\ndefines what will be converted to what in case of collation conflict, with an\nexpression with higher coercibility being converted to the collation of an\nexpression with lower coercibility.\n\n+-----------------------------+---------------------------+------------------+\n| Coercibility | Description | Example |\n+-----------------------------+---------------------------+------------------+\n| 0 | Explicit | Value using a |\n| | | COLLATE clause |\n+-----------------------------+---------------------------+------------------+\n| 1 | No collation | Concatenated |\n| | | strings using |\n| | | different |\n| | | collations |\n+-----------------------------+---------------------------+------------------+\n| 2 | Implicit | Column value |\n+-----------------------------+---------------------------+------------------+\n| 3 | Constant | USER() return |\n| | | value |\n+-----------------------------+---------------------------+------------------+\n| 4 | Coercible | Literal string |\n+-----------------------------+---------------------------+------------------+\n| 5 | Ignorable | NULL or derived |\n| | | from NULL |\n+-----------------------------+---------------------------+------------------+\n\nExamples\n--------\n\nSELECT COERCIBILITY(\'abc\' COLLATE latin1_swedish_ci);\n+-----------------------------------------------+\n| COERCIBILITY(\'abc\' COLLATE latin1_swedish_ci) |\n+-----------------------------------------------+\n| 0 |\n+-----------------------------------------------+\n\nSELECT COERCIBILITY(USER());\n+----------------------+\n| COERCIBILITY(USER()) |\n+----------------------+\n| 3 |\n+----------------------+\n\nSELECT COERCIBILITY(\'abc\');\n+---------------------+\n| COERCIBILITY(\'abc\') |\n+---------------------+\n| 4 |\n+---------------------+\n\nURL: https://mariadb.com/kb/en/coercibility/','','https://mariadb.com/kb/en/coercibility/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (196,17,'COLLATION','Syntax\n------\n\nCOLLATION(str)\n\nDescription\n-----------\n\nReturns the collation of the string argument. If str is not a string, it is\nconsidered as a binary string (so the function returns \'binary\'). This applies\nto NULL, too. The return value is a string in the utf8 character set.\n\nSee Character Sets and Collations.\n\nExamples\n--------\n\nSELECT COLLATION(\'abc\');\n+-------------------+\n| COLLATION(\'abc\') |\n+-------------------+\n| latin1_swedish_ci |\n+-------------------+\n\nSELECT COLLATION(_utf8\'abc\');\n+-----------------------+\n| COLLATION(_utf8\'abc\') |\n+-----------------------+\n| utf8_general_ci |\n+-----------------------+\n\nURL: https://mariadb.com/kb/en/collation/','','https://mariadb.com/kb/en/collation/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (197,17,'CONNECTION_ID','Syntax\n------\n\nCONNECTION_ID()\n\nDescription\n-----------\n\nReturns the connection ID for the connection. Every connection (including\nevents) has an ID that is unique among the set of currently connected clients.\n\nUntil MariaDB 10.3.1, returns MYSQL_TYPE_LONGLONG, or bigint(10), in all\ncases. From MariaDB 10.3.1, returns MYSQL_TYPE_LONG, or int(10), when the\nresult would fit within 32-bits.\n\nExamples\n--------\n\nSELECT CONNECTION_ID();\n+-----------------+\n| CONNECTION_ID() |\n+-----------------+\n| 3 |\n+-----------------+\n\nURL: https://mariadb.com/kb/en/connection_id/','','https://mariadb.com/kb/en/connection_id/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (198,17,'CURRENT_ROLE','Syntax\n------\n\nCURRENT_ROLE, CURRENT_ROLE()\n\nDescription\n-----------\n\nReturns the current role name. This determines your access privileges. The\nreturn value is a string in the utf8 character set.\n\nIf there is no current role, NULL is returned.\n\nThe output of SELECT CURRENT_ROLE is equivalent to the contents of the\nENABLED_ROLES Information Schema table.\n\nUSER() returns the combination of user and host used to login. CURRENT_USER()\nreturns the account used to determine current connection\'s privileges.\n\nExamples\n--------\n\nSELECT CURRENT_ROLE;\n+--------------+\n| CURRENT_ROLE |\n+--------------+\n| NULL |\n+--------------+\n\nSET ROLE staff;\n\nSELECT CURRENT_ROLE;\n+--------------+\n| CURRENT_ROLE |\n+--------------+\n| staff |\n+--------------+\n\nURL: https://mariadb.com/kb/en/current_role/','','https://mariadb.com/kb/en/current_role/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (199,17,'CURRENT_USER','Syntax\n------\n\nCURRENT_USER, CURRENT_USER()\n\nDescription\n-----------\n\nReturns the user name and host name combination for the MariaDB account that\nthe server used to authenticate the current client. This account determines\nyour access privileges. The return value is a string in the utf8 character set.\n\nThe value of CURRENT_USER() can differ from the value of USER().\nCURRENT_ROLE() returns the current active role.\n\nExamples\n--------\n\nshell> mysql --user=\"anonymous\"\n\nselect user(),current_user();\n+---------------------+----------------+\n| user() | current_user() |\n+---------------------+----------------+\n| anonymous@localhost | @localhost |\n+---------------------+----------------+\n\nWhen calling CURRENT_USER() in a stored procedure, it returns the owner of the\nstored procedure, as defined with DEFINER.\n\nURL: https://mariadb.com/kb/en/current_user/','','https://mariadb.com/kb/en/current_user/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (200,17,'DATABASE','Syntax\n------\n\nDATABASE()\n\nDescription\n-----------\n\nReturns the default (current) database name as a string in the utf8 character\nset. If there is no default database, DATABASE() returns NULL. Within a stored\nroutine, the default database is the database that the routine is associated\nwith, which is not necessarily the same as the database that is the default in\nthe calling context.\n\nSCHEMA() is a synonym for DATABASE().\n\nTo select a default database, the USE statement can be run. Another way to set\nthe default database is specifying its name at mysql command line client\nstartup.\n\nExamples\n--------\n\nSELECT DATABASE();\n+------------+\n| DATABASE() |\n+------------+\n| NULL |\n+------------+\n\nUSE test;\nDatabase changed\n\nSELECT DATABASE();\n+------------+\n| DATABASE() |\n+------------+\n| test |\n+------------+\n\nURL: https://mariadb.com/kb/en/database/','','https://mariadb.com/kb/en/database/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (201,17,'DECODE_HISTOGRAM','Syntax\n------\n\nDECODE_HISTOGRAM(hist_type,histogram)\n\nDescription\n-----------\n\nReturns a string of comma separated numeric values corresponding to a\nprobability distribution represented by the histogram of type hist_type\n(SINGLE_PREC_HB or DOUBLE_PREC_HB). The hist_type and histogram would be\ncommonly used from the mysql.column_stats table.\n\nSee Histogram Based Statistics for details.\n\nExamples\n--------\n\nCREATE TABLE origin (\n i INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,\n v INT UNSIGNED NOT NULL\n);\n\nINSERT INTO origin(v) VALUES \n (1),(2),(3),(4),(5),(10),(20),\n (30),(40),(50),(60),(70),(80),\n (90),(100),(200),(400),(800);\n\nSET histogram_size=10,histogram_type=SINGLE_PREC_HB;\n\nANALYZE TABLE origin PERSISTENT FOR ALL;\n+-------------+---------+----------+-----------------------------------------+\n| Table | Op | Msg_type | Msg_text |\n+-------------+---------+----------+-----------------------------------------+\n| test.origin | analyze | status | Engine-independent statistics collected |\n| test.origin | analyze | status | OK |\n+-------------+---------+----------+-----------------------------------------+\n\nSELECT db_name,table_name,column_name,hist_type,\n hex(histogram),decode_histogram(hist_type,histogram)\n FROM mysql.column_stats WHERE db_name=\'test\' and table_name=\'origin\';\n+---------+------------+-------------+----------------+----------------------+-\n-----------------------------------------------------------------+\n| db_name | table_name | column_name | hist_type | hex(histogram) |\ndecode_histogram(hist_type,histogram) |\n+---------+------------+-------------+----------------+----------------------+-\n-----------------------------------------------------------------+\n| test | origin | i | SINGLE_PREC_HB | 0F2D3C5A7887A5C3D2F0 |\n0.059,0.118,0.059,0.118,0.118,0.059,0.118,0.118,0.059,0.118,0.059 |\n| test | origin | v | SINGLE_PREC_HB | 000001060C0F161C1F7F |\n0.000,0.000,0.004,0.020,0.024,0.012,0.027,0.024,0.012,0.376,0.502 |\n+---------+------------+-------------+----------------+----------------------+-\n-----------------------------------------------------------------+\n\nSET histogram_size=20,histogram_type=DOUBLE_PREC_HB;\n\nANALYZE TABLE origin PERSISTENT FOR ALL;\n+-------------+---------+----------+-----------------------------------------+\n| Table | Op | Msg_type | Msg_text |\n+-------------+---------+----------+-----------------------------------------+\n| test.origin | analyze | status | Engine-independent statistics collected |\n| test.origin | analyze | status | OK |\n+-------------+---------+----------+-----------------------------------------+\n\nSELECT db_name,table_name,column_name,\n hist_type,hex(histogram),decode_histogram(hist_type,histogram)\n FROM mysql.column_stats WHERE db_name=\'test\' and table_name=\'origin\';\n+---------+------------+-------------+----------------+------------------------\n-----------------+-------------------------------------------------------------\n---------------------------+\n| db_name | table_name | column_name | hist_type | hex(histogram) \n | decode_histogram(hist_type,histogram)\n |\n+---------+------------+-------------+----------------+------------------------\n-----------------+-------------------------------------------------------------\n---------------------------+\n| test | origin | i | DOUBLE_PREC_HB |\n0F0F2D2D3C3C5A5A78788787A5A5C3C3D2D2F0F0 |\n0.05882,0.11765,0.05882,0.11765,0.11765,0.05882,0.11765,0.11765,0.05882,0.11765\n0.05882 |\n| test | origin | v | DOUBLE_PREC_HB |\n5200F600480116067E0CB30F1B16831CB81FD67F |\n0.00125,0.00250,0.00125,0.01877,0.02502,0.01253,0.02502,0.02502,0.01253,0.37546\n0.50063 |\n\nURL: https://mariadb.com/kb/en/decode_histogram/','','https://mariadb.com/kb/en/decode_histogram/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (202,17,'DEFAULT','Syntax\n------\n\nDEFAULT(col_name)\n\nDescription\n-----------\n\nReturns the default value for a table column. If the column has no default\nvalue (and is not NULLABLE - NULLABLE fields have a NULL default), an error is\nreturned.\n\nFor integer columns using AUTO_INCREMENT, 0 is returned.\n\nWhen using DEFAULT as a value to set in an INSERT or UPDATE statement, you can\nuse the bare keyword DEFAULT without the parentheses and argument to refer to\nthe column in context. You can only use DEFAULT as a bare keyword if you are\nusing it alone without a surrounding expression or function.\n\nExamples\n--------\n\nSelect only non-default values for a column:\n\nSELECT i FROM t WHERE i != DEFAULT(i);\n\nUpdate values to be one greater than the default value:\n\nUPDATE t SET i = DEFAULT(i)+1 WHERE i < 100;\n\nWhen referring to the default value exactly in UPDATE or INSERT, you can omit\nthe argument:\n\nINSERT INTO t (i) VALUES (DEFAULT);\nUPDATE t SET i = DEFAULT WHERE i < 100;\n\nCREATE OR REPLACE TABLE t (\n i INT NOT NULL AUTO_INCREMENT,\n j INT NOT NULL,\n k INT DEFAULT 3,\n l INT NOT NULL DEFAULT 4,\n m INT,\n PRIMARY KEY (i)\n);\n\nDESC t;\n+-------+---------+------+-----+---------+----------------+\n| Field | Type | Null | Key | Default | Extra |\n+-------+---------+------+-----+---------+----------------+\n| i | int(11) | NO | PRI | NULL | auto_increment |\n| j | int(11) | NO | | NULL | |\n| k | int(11) | YES | | 3 | |\n| l | int(11) | NO | | 4 | |\n| m | int(11) | YES | | NULL | |\n+-------+---------+------+-----+---------+----------------+\n\nINSERT INTO t (j) VALUES (1);\nINSERT INTO t (j,m) VALUES (2,2);\nINSERT INTO t (j,l,m) VALUES (3,3,3);\n\nSELECT * FROM t;\n+---+---+------+---+------+\n| i | j | k | l | m |\n+---+---+------+---+------+\n| 1 | 1 | 3 | 4 | NULL |\n| 2 | 2 | 3 | 4 | 2 |\n| 3 | 3 | 3 | 3 | 3 |\n+---+---+------+---+------+\n\nSELECT DEFAULT(i), DEFAULT(k), DEFAULT (l), DEFAULT(m) FROM t;\n+------------+------------+-------------+------------+\n| DEFAULT(i) | DEFAULT(k) | DEFAULT (l) | DEFAULT(m) |\n+------------+------------+-------------+------------+\n| 0 | 3 | 4 | NULL |\n| 0 | 3 | 4 | NULL |\n| 0 | 3 | 4 | NULL |\n+------------+------------+-------------+------------+\n\nSELECT DEFAULT(i), DEFAULT(k), DEFAULT (l), DEFAULT(m), DEFAULT(j) FROM t;\nERROR 1364 (HY000): Field \'j\' doesn\'t have a default value\n\nSELECT * FROM t WHERE i = DEFAULT(i);\nEmpty set (0.001 sec)\n\nSELECT * FROM t WHERE j = DEFAULT(j);\nERROR 1364 (HY000): Field \'j\' doesn\'t have a default value\n\nSELECT * FROM t WHERE k = DEFAULT(k);\n+---+---+------+---+------+\n| i | j | k | l | m |\n+---+---+------+---+------+\n| 1 | 1 | 3 | 4 | NULL |\n| 2 | 2 | 3 | 4 | 2 |\n| 3 | 3 | 3 | 3 | 3 |\n+---+---+------+---+------+\n\nSELECT * FROM t WHERE l = DEFAULT(l);\n+---+---+------+---+------+\n| i | j | k | l | m |\n+---+---+------+---+------+\n| 1 | 1 | 3 | 4 | NULL |\n| 2 | 2 | 3 | 4 | 2 |\n+---+---+------+---+------+\n\nSELECT * FROM t WHERE m = DEFAULT(m);\nEmpty set (0.001 sec)\n\nSELECT * FROM t WHERE m <=> DEFAULT(m);\n+---+---+------+---+------+\n| i | j | k | l | m |\n+---+---+------+---+------+\n| 1 | 1 | 3 | 4 | NULL |\n+---+---+------+---+------+\n\nURL: https://mariadb.com/kb/en/default/','','https://mariadb.com/kb/en/default/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (203,17,'FOUND_ROWS','Syntax\n------\n\nFOUND_ROWS()\n\nDescription\n-----------\n\nA SELECT statement may include a LIMIT clause to restrict the number of rows\nthe server returns to the client. In some cases, it is desirable to know how\nmany rows the statement would have returned without the LIMIT, but without\nrunning the statement again. To obtain this row count, include a\nSQL_CALC_FOUND_ROWS option in the SELECT statement, and then invoke\nFOUND_ROWS() afterwards.\n\nYou can also use FOUND_ROWS() to obtain the number of rows returned by a\nSELECT which does not contain a LIMIT clause. In this case you don\'t need to\nuse the SQL_CALC_FOUND_ROWS option. This can be useful for example in a stored\nprocedure.\n\nAlso, this function works with some other statements which return a resultset,\nincluding SHOW, DESC and HELP. For DELETE ... RETURNING you should use\nROW_COUNT(). It also works as a prepared statement, or after executing a\nprepared statement.\n\nStatements which don\'t return any results don\'t affect FOUND_ROWS() - the\nprevious value will still be returned.\n\nWarning: When used after a CALL statement, this function returns the number of\nrows selected by the last query in the procedure, not by the whole procedure.\n\nStatements using the FOUND_ROWS() function are not safe for replication.\n\nExamples\n--------\n\nSHOW ENGINES\\G\n*************************** 1. row ***************************\n Engine: CSV\n Support: YES\n Comment: Stores tables as CSV files\nTransactions: NO\n XA: NO\n Savepoints: NO\n*************************** 2. row ***************************\n Engine: MRG_MyISAM\n Support: YES\n Comment: Collection of identical MyISAM tables\nTransactions: NO\n XA: NO\n Savepoints: NO\n\n...\n\n*************************** 8. row ***************************\n Engine: PERFORMANCE_SCHEMA\n Support: YES\n Comment: Performance Schema\nTransactions: NO\n XA: NO\n Savepoints: NO\n8 rows in set (0.000 sec)\n\nSELECT FOUND_ROWS();\n+--------------+\n| FOUND_ROWS() |\n+--------------+\n| 8 |\n+--------------+\n\nSELECT SQL_CALC_FOUND_ROWS * FROM tbl_name WHERE id > 100 LIMIT 10;\n\nSELECT FOUND_ROWS();\n+--------------+\n| FOUND_ROWS() |\n+--------------+\n| 23 |\n+--------------+\n\nURL: https://mariadb.com/kb/en/found_rows/','','https://mariadb.com/kb/en/found_rows/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (204,17,'LAST_INSERT_ID','Syntax\n------\n\nLAST_INSERT_ID(), LAST_INSERT_ID(expr)\n\nDescription\n-----------\n\nLAST_INSERT_ID() (no arguments) returns the first automatically generated\nvalue successfully inserted for an AUTO_INCREMENT column as a result of the\nmost recently executed INSERT statement. The value of LAST_INSERT_ID() remains\nunchanged if no rows are successfully inserted.\n\nIf one gives an argument to LAST_INSERT_ID(), then it will return the value of\nthe expression and the next call to LAST_INSERT_ID() will return the same\nvalue. The value will also be sent to the client and can be accessed by the\nmysql_insert_id function.\n\nFor example, after inserting a row that generates an AUTO_INCREMENT value, you\ncan get the value like this:\n\nSELECT LAST_INSERT_ID();\n+------------------+\n| LAST_INSERT_ID() |\n+------------------+\n| 9 |\n+------------------+\n\nYou can also use LAST_INSERT_ID() to delete the last inserted row:\n\nDELETE FROM product WHERE id = LAST_INSERT_ID();\n\nIf no rows were successfully inserted, LAST_INSERT_ID() returns 0.\n\nThe value of LAST_INSERT_ID() will be consistent across all versions if all\nrows in the INSERT or UPDATE statement were successful.\n\nThe currently executing statement does not affect the value of\nLAST_INSERT_ID(). Suppose that you generate an AUTO_INCREMENT value with one\nstatement, and then refer to LAST_INSERT_ID() in a multiple-row INSERT\nstatement that inserts rows into a table with its own AUTO_INCREMENT column.\nThe value of LAST_INSERT_ID() will remain stable in the second statement; its\nvalue for the second and later rows is not affected by the earlier row\ninsertions. (However, if you mix references to LAST_INSERT_ID() and\nLAST_INSERT_ID(expr), the effect is undefined.)\n\nIf the previous statement returned an error, the value of LAST_INSERT_ID() is\nundefined. For transactional tables, if the statement is rolled back due to an\nerror, the value of LAST_INSERT_ID() is left undefined. For manual ROLLBACK,\nthe value of LAST_INSERT_ID() is not restored to that before the transaction;\nit remains as it was at the point of the ROLLBACK.\n\nWithin the body of a stored routine (procedure or function) or a trigger, the\nvalue of LAST_INSERT_ID() changes the same way as for statements executed\noutside the body of these kinds of objects. The effect of a stored routine or\ntrigger upon the value of LAST_INSERT_ID() that is seen by following\nstatements depends on the kind of routine:\n\n* If a stored procedure executes statements that change the value of\nLAST_INSERT_ID(), the new value will be seen by statements that follow the\nprocedure call.\n\n* For stored functions and triggers that change the value, the value is\nrestored when the function or trigger ends, so following statements will not\nsee a changed value.\n\nExamples\n--------\n\nCREATE TABLE t (\n id INTEGER UNSIGNED AUTO_INCREMENT PRIMARY KEY,\n f VARCHAR(1))\nENGINE = InnoDB;\n\nINSERT INTO t(f) VALUES(\'a\');\n\nSELECT LAST_INSERT_ID();\n+------------------+\n| LAST_INSERT_ID() |\n+------------------+\n| 1 |\n+------------------+\n\nINSERT INTO t(f) VALUES(\'b\');\n\nINSERT INTO t(f) VALUES(\'c\');\n\nSELECT LAST_INSERT_ID();\n+------------------+\n| LAST_INSERT_ID() |\n+------------------+\n| 3 |\n+------------------+\n\nINSERT INTO t(f) VALUES(\'d\'),(\'e\');\n\nSELECT LAST_INSERT_ID();\n+------------------+\n| LAST_INSERT_ID() |\n+------------------+\n| 4 |\n+------------------+\n\nSELECT * FROM t;\n+----+------+\n| id | f |\n+----+------+\n| 1 | a |\n| 2 | b |\n| 3 | c |\n| 4 | d |\n| 5 | e |\n+----+------+\n\nSELECT LAST_INSERT_ID(12);\n+--------------------+\n| LAST_INSERT_ID(12) |\n+--------------------+\n| 12 |\n+--------------------+\n\nSELECT LAST_INSERT_ID();\n+------------------+\n| LAST_INSERT_ID() |\n+------------------+\n| 12 |\n+------------------+\n\nINSERT INTO t(f) VALUES(\'f\');\n\nSELECT LAST_INSERT_ID();\n+------------------+\n| LAST_INSERT_ID() |\n+------------------+\n| 6 |\n+------------------+\n\nSELECT * FROM t;\n+----+------+\n| id | f |\n+----+------+\n| 1 | a |\n| 2 | b |\n| 3 | c |\n| 4 | d |\n| 5 | e |\n| 6 | f |\n+----+------+\n\nSELECT LAST_INSERT_ID(12);\n+--------------------+\n| LAST_INSERT_ID(12) |\n+--------------------+\n| 12 |\n+--------------------+\n\nINSERT INTO t(f) VALUES(\'g\');\n\nSELECT * FROM t;\n+----+------+\n| id | f |\n+----+------+\n| 1 | a |\n| 2 | b |\n| 3 | c |\n| 4 | d |\n| 5 | e |\n| 6 | f |\n| 7 | g |\n+----+------+\n\nURL: https://mariadb.com/kb/en/last_insert_id/','','https://mariadb.com/kb/en/last_insert_id/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (205,17,'LAST_VALUE','Syntax\n------\n\nLAST_VALUE(expr,[expr,...])\n\nLAST_VALUE(expr) OVER (\n [ PARTITION BY partition_expression ]\n [ ORDER BY order_list ]\n)\n\nDescription\n-----------\n\nLAST_VALUE() evaluates all expressions and returns the last.\n\nThis is useful together with setting user variables to a value with\n@var:=expr, for example when you want to get data of rows updated/deleted\nwithout having to do two queries against the table.\n\nLAST_VALUE can be used as a window function.\n\nReturns NULL if no last value exists.\n\nExamples\n--------\n\nCREATE TABLE t1 (a int, b int);\nINSERT INTO t1 VALUES(1,10),(2,20);\nDELETE FROM t1 WHERE a=1 AND last_value(@a:=a,@b:=b,1);\nSELECT @a,@b;\n+------+------+\n| @a | @b |\n+------+------+\n| 1 | 10 |\n+------+------+\n\nAs a window function:\n\nCREATE TABLE t1 (\n pk int primary key,\n a int,\n b int,\n c char(10),\n d decimal(10, 3),\n e real\n);\n\nINSERT INTO t1 VALUES\n( 1, 0, 1, \'one\', 0.1, 0.001),\n( 2, 0, 2, \'two\', 0.2, 0.002),\n( 3, 0, 3, \'three\', 0.3, 0.003),\n( 4, 1, 2, \'three\', 0.4, 0.004),\n( 5, 1, 1, \'two\', 0.5, 0.005),\n( 6, 1, 1, \'one\', 0.6, 0.006),\n( 7, 2, NULL, \'n_one\', 0.5, 0.007),\n( 8, 2, 1, \'n_two\', NULL, 0.008),\n( 9, 2, 2, NULL, 0.7, 0.009),\n(10, 2, 0, \'n_four\', 0.8, 0.010),\n(11, 2, 10, NULL, 0.9, NULL);\n\nSELECT pk, FIRST_VALUE(pk) OVER (ORDER BY pk) AS first_asc,\n LAST_VALUE(pk) OVER (ORDER BY pk) AS last_asc,\n FIRST_VALUE(pk) OVER (ORDER BY pk DESC) AS first_desc,\n LAST_VALUE(pk) OVER (ORDER BY pk DESC) AS last_desc\nFROM t1\nORDER BY pk DESC;\n\n+----+-----------+----------+------------+-----------+\n| pk | first_asc | last_asc | first_desc | last_desc |\n+----+-----------+----------+------------+-----------+\n| 11 | 1 | 11 | 11 | 11 |\n| 10 | 1 | 10 | 11 | 10 |\n| 9 | 1 | 9 | 11 | 9 |\n| 8 | 1 | 8 | 11 | 8 |\n| 7 | 1 | 7 | 11 | 7 |\n| 6 | 1 | 6 | 11 | 6 |\n| 5 | 1 | 5 | 11 | 5 |\n| 4 | 1 | 4 | 11 | 4 |\n| 3 | 1 | 3 | 11 | 3 |\n| 2 | 1 | 2 | 11 | 2 |\n| 1 | 1 | 1 | 11 | 1 |\n+----+-----------+----------+------------+-----------+\n\nCREATE OR REPLACE TABLE t1 (i int);\nINSERT INTO t1 VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10);\n\nSELECT i,\n FIRST_VALUE(i) OVER (ORDER BY i ROWS BETWEEN CURRENT ROW and 1 FOLLOWING) AS\nf_1f,\n LAST_VALUE(i) OVER (ORDER BY i ROWS BETWEEN CURRENT ROW and 1 FOLLOWING) AS\nl_1f,\n FIRST_VALUE(i) OVER (ORDER BY i ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) AS\nf_1p1f,\n LAST_VALUE(i) OVER (ORDER BY i ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) AS\nf_1p1f,\n FIRST_VALUE(i) OVER (ORDER BY i ROWS BETWEEN 2 PRECEDING AND 1 PRECEDING) AS\nf_2p1p,\n LAST_VALUE(i) OVER (ORDER BY i ROWS BETWEEN 2 PRECEDING AND 1 PRECEDING) AS\nf_2p1p,\n FIRST_VALUE(i) OVER (ORDER BY i ROWS BETWEEN 1 FOLLOWING AND 2 FOLLOWING) AS\nf_1f2f,\n LAST_VALUE(i) OVER (ORDER BY i ROWS BETWEEN 1 FOLLOWING AND 2 FOLLOWING) AS\nf_1f2f\nFROM t1;\n\n+------+------+------+--------+--------+--------+--------+--------+--------+\n| i | f_1f | l_1f | f_1p1f | f_1p1f | f_2p1p | f_2p1p | f_1f2f | f_1f2f |\n+------+------+------+--------+--------+--------+--------+--------+--------+\n| 1 | 1 | 2 | 1 | 2 | NULL | NULL | 2 | 3 |\n| 2 | 2 | 3 | 1 | 3 | 1 | 1 | 3 | 4 |\n| 3 | 3 | 4 | 2 | 4 | 1 | 2 | 4 | 5 |\n| 4 | 4 | 5 | 3 | 5 | 2 | 3 | 5 | 6 |\n| 5 | 5 | 6 | 4 | 6 | 3 | 4 | 6 | 7 |\n| 6 | 6 | 7 | 5 | 7 | 4 | 5 | 7 | 8 |\n| 7 | 7 | 8 | 6 | 8 | 5 | 6 | 8 | 9 |\n| 8 | 8 | 9 | 7 | 9 | 6 | 7 | 9 | 10 |\n| 9 | 9 | 10 | 8 | 10 | 7 | 8 | 10 | 10 |\n| 10 | 10 | 10 | 9 | 10 | 8 | 9 | NULL | NULL |\n+------+------+------+--------+--------+--------+--------+--------+--------+\n\nURL: https://mariadb.com/kb/en/last_value/','','https://mariadb.com/kb/en/last_value/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (206,17,'PROCEDURE ANALYSE','Syntax\n------\n\nanalyse([max_elements[,max_memory]])\n\nDescription\n-----------\n\nThis procedure is defined in the sql/sql_analyse.cc file. It examines the\nresult from a query and returns an analysis of the results that suggests\noptimal data types for each column. To obtain this analysis, append PROCEDURE\nANALYSE to the end of a SELECT statement:\n\nSELECT ... FROM ... WHERE ... PROCEDURE ANALYSE([max_elements,[max_memory]])\n\nFor example:\n\nSELECT col1, col2 FROM table1 PROCEDURE ANALYSE(10, 2000);\n\nThe results show some statistics for the values returned by the query, and\npropose an optimal data type for the columns. This can be helpful for checking\nyour existing tables, or after importing new data. You may need to try\ndifferent settings for the arguments so that PROCEDURE ANALYSE() does not\nsuggest the ENUM data type when it is not appropriate.\n\nThe arguments are optional and are used as follows:\n\n* max_elements (default 256) is the maximum number of distinct values that\nanalyse notices per column. This is used by analyse to check whether the\noptimal data type should be of type ENUM; if there are more than max_elements\ndistinct values, then ENUM is not a suggested type.\n* max_memory (default 8192) is the maximum amount of memory that analyse\nshould allocate per column while trying to find all distinct values.\n\nURL: https://mariadb.com/kb/en/procedure-analyse/','','https://mariadb.com/kb/en/procedure-analyse/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (207,17,'ROWNUM','MariaDB starting with 10.6.1\n----------------------------\nFrom MariaDB 10.6.1, the ROWNUM() function is supported.\n\nSyntax\n------\n\nROWNUM()\n\nIn Oracle mode one can just use ROWNUM, without the parentheses.\n\nDescription\n-----------\n\nROWNUM() returns the current number of accepted rows in the current context.\nIt main purpose is to emulate the ROWNUM pseudo column in Oracle. For MariaDB\nnative applications, we recommend the usage of LIMIT, as it is easier to use\nand gives more predictable results than the usage of ROWNUM().\n\nThe main difference between using LIMIT and ROWNUM() to limit the rows in the\nresult is that LIMIT works on the result set while ROWNUM works on the number\nof accepted rows (before any ORDER or GROUP BY clauses).\n\nThe following queries will return the same results:\n\nSELECT * from t1 LIMIT 10;\nSELECT * from t1 WHERE ROWNUM() <= 10;\n\nWhile the following may return different results based on in which orders the\nrows are found:\n\nSELECT * from t1 ORDER BY a LIMIT 10;\nSELECT * from t1 ORDER BY a WHERE ROWNUM() <= 10;\n\nThe recommended way to use ROWNUM to limit the number of returned rows and get\npredictable results is to have the query in a subquery and test for ROWNUM()\nin the outer query:\n\nSELECT * FROM (select * from t1 ORDER BY a) WHERE ROWNUM() <= 10;\n\nROWNUM() can be used in the following contexts:\n\n* SELECT\n* INSERT\n* UPDATE\n* DELETE\n* LOAD DATA INFILE\n\nUsed in other contexts, ROWNUM() will return 0.\n\nExamples\n--------\n\nINSERT INTO t1 VALUES (1,ROWNUM()),(2,ROWNUM()),(3,ROWNUM());\n\nINSERT INTO t1 VALUES (1),(2) returning a, ROWNUM();\n\nUPDATE t1 SET row_num_column=ROWNUM();\n\nDELETE FROM t1 WHERE a < 10 AND ROWNUM() < 2;\n\nLOAD DATA INFILE \'filename\' into table t1 fields terminated by \',\' \n lines terminated by \"\\r\\n\" (a,b) set c=ROWNUM();\n\nOptimizations\n-------------\n\nIn many cases where ROWNUM() is used, MariaDB will use the same optimizations\nit uses with LIMIT.\n\nLIMIT optimization is possible when using ROWNUM in the following manner:\n\n* When one is in a top level WHERE clause comparing ROWNUM() with a numerical\nconstant using any of the following expressions:\nROWNUM() < number\nROWNUM() <= number\nROWNUM() = 1\nROWNUM() can be also be the right argument to the comparison function.\n\nIn the above cases, LIMIT optimization can be done in the following cases:\n\n* For the current sub query when the ROWNUM comparison is done on the top\nlevel:\n\nSELECT * from t1 WHERE ROWNUM() <= 2 AND t1.a > 0\n\n* For an inner sub query, when the upper level has only a ROWNUM() comparison\nin the WHERE clause:\n\nSELECT * from (select * from t1) as t WHERE ROWNUM() <= 2\n\nOther Changes Related to ROWNUM\n-------------------------------\n\nWhen ROWNUM() is used anywhere in a query, the optimization to ignore ORDER BY\nin subqueries are disabled.\n\nThis was done to get the following common Oracle query to work as expected:\n\nselect * from (select * from t1 order by a desc) as t where rownum() <= 2;\n\nBy default MariaDB ignores any ORDER BY in subqueries both because the SQL\nstandard defines results sets in subqueries to be un-ordered and because of\nperformance reasons (especially when using views in subqueries). See MDEV-3926\n\"Wrong result with GROUP BY ... WITH ROLLUP\" for a discussion of this topic.\n\nOther Considerations\n--------------------\n\nWhile MariaDB tries to emulate Oracle\'s usage of ROWNUM() as closely as\npossible, there are cases where the result is different:\n\n* When the optimizer finds rows in a different order (because of different\nstorage methods or optimization). This may also happen in Oracle if one adds\nor deletes an index, in which case the rows may be found in a different order.\n\nNote that usage of ROWNUM() in functions or stored procedures will use their\nown context, not the caller\'s context.\n\nURL: https://mariadb.com/kb/en/rownum/','','https://mariadb.com/kb/en/rownum/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (208,17,'ROW_COUNT','Syntax\n------\n\nROW_COUNT()\n\nDescription\n-----------\n\nROW_COUNT() returns the number of rows updated, inserted or deleted by the\npreceding statement. This is the same as the row count that the mysql client\ndisplays and the value from the mysql_affected_rows() C API function.\n\nGenerally:\n\n* For statements which return a result set (such as SELECT, SHOW, DESC or\nHELP), returns -1, even when the result set is empty. This is also true for\nadministrative statements, such as OPTIMIZE.\n* For DML statements other than SELECT and for ALTER TABLE, returns the number\nof affected rows.\n* For DDL statements (including TRUNCATE) and for other statements which don\'t\nreturn any result set (such as USE, DO, SIGNAL or DEALLOCATE PREPARE), returns\n0.\n\nFor UPDATE, affected rows is by default the number of rows that were actually\nchanged. If the CLIENT_FOUND_ROWS flag to mysql_real_connect() is specified\nwhen connecting to mysqld, affected rows is instead the number of rows matched\nby the WHERE clause.\n\nFor REPLACE, deleted rows are also counted. So, if REPLACE deletes a row and\nadds a new row, ROW_COUNT() returns 2.\n\nFor INSERT ... ON DUPLICATE KEY, updated rows are counted twice. So, if INSERT\nadds a new rows and modifies another row, ROW_COUNT() returns 3.\n\nROW_COUNT() does not take into account rows that are not directly\ndeleted/updated by the last statement. This means that rows deleted by foreign\nkeys or triggers are not counted.\n\nWarning: You can use ROW_COUNT() with prepared statements, but you need to\ncall it after EXECUTE, not after DEALLOCATE PREPARE, because the row count for\nallocate prepare is always 0.\n\nWarning: When used after a CALL statement, this function returns the number of\nrows affected by the last statement in the procedure, not by the whole\nprocedure.\n\nWarning: After INSERT DELAYED, ROW_COUNT() returns the number of the rows you\ntried to insert, not the number of the successful writes.\n\nThis information can also be found in the diagnostics area.\n\nStatements using the ROW_COUNT() function are not safe for replication.\n\nExamples\n--------\n\nCREATE TABLE t (A INT);\n\nINSERT INTO t VALUES(1),(2),(3);\n\nSELECT ROW_COUNT();\n+-------------+\n| ROW_COUNT() |\n+-------------+\n| 3 |\n+-------------+\n\nDELETE FROM t WHERE A IN(1,2);\n\nSELECT ROW_COUNT(); \n+-------------+\n| ROW_COUNT() |\n+-------------+\n| 2 |\n+-------------+\n\nExample with prepared statements:\n\nSET @q = \'INSERT INTO t VALUES(1),(2),(3);\';\n\nPREPARE stmt FROM @q;\n\nEXECUTE stmt;\nQuery OK, 3 rows affected (0.39 sec)\nRecords: 3 Duplicates: 0 Warnings: 0\n\nSELECT ROW_COUNT();\n+-------------+\n| ROW_COUNT() |\n+-------------+\n| 3 |\n+-------------+\n\nURL: https://mariadb.com/kb/en/row_count/','','https://mariadb.com/kb/en/row_count/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (209,17,'SCHEMA','Syntax\n------\n\nSCHEMA()\n\nDescription\n-----------\n\nThis function is a synonym for DATABASE().\n\nURL: https://mariadb.com/kb/en/schema/','','https://mariadb.com/kb/en/schema/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (210,17,'SESSION_USER','Syntax\n------\n\nSESSION_USER()\n\nDescription\n-----------\n\nSESSION_USER() is a synonym for USER().\n\nURL: https://mariadb.com/kb/en/session_user/','','https://mariadb.com/kb/en/session_user/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (211,17,'SYSTEM_USER','Syntax\n------\n\nSYSTEM_USER()\n\nDescription\n-----------\n\nSYSTEM_USER() is a synonym for USER().\n\nURL: https://mariadb.com/kb/en/system_user/','','https://mariadb.com/kb/en/system_user/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (212,17,'USER','Syntax\n------\n\nUSER()\n\nDescription\n-----------\n\nReturns the current MariaDB user name and host name, given when authenticating\nto MariaDB, as a string in the utf8 character set.\n\nNote that the value of USER() may differ from the value of CURRENT_USER(),\nwhich is the user used to authenticate the current client. CURRENT_ROLE()\nreturns the current active role.\n\nSYSTEM_USER() and SESSION_USER are synonyms for USER().\n\nStatements using the USER() function or one of its synonyms are not safe for\nstatement level replication.\n\nExamples\n--------\n\nshell> mysql --user=\"anonymous\"\n\nSELECT USER(),CURRENT_USER();\n+---------------------+----------------+\n| USER() | CURRENT_USER() |\n+---------------------+----------------+\n| anonymous@localhost | @localhost |\n+---------------------+----------------+\n\nTo select only the IP address, use SUBSTRING_INDEX(),\n\nSELECT SUBSTRING_INDEX(USER(), \'@\', -1);\n+----------------------------------+\n| SUBSTRING_INDEX(USER(), \'@\', -1) |\n+----------------------------------+\n| 192.168.0.101 |\n+----------------------------------+\n\nURL: https://mariadb.com/kb/en/user/','','https://mariadb.com/kb/en/user/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (213,17,'VERSION','Syntax\n------\n\nVERSION()\n\nDescription\n-----------\n\nReturns a string that indicates the MariaDB server version. The string uses\nthe utf8 character set.\n\nExamples\n--------\n\nSELECT VERSION();\n+----------------+\n| VERSION() |\n+----------------+\n| 10.4.7-MariaDB |\n+----------------+\n\nThe VERSION() string may have one or more of the following suffixes:\n\n+---------------------------+------------------------------------------------+\n| Suffix | Description |\n+---------------------------+------------------------------------------------+\n| -embedded | The server is an embedded server (libmysqld). |\n+---------------------------+------------------------------------------------+\n| -log | General logging, slow logging or binary |\n| | (replication) logging is enabled. |\n+---------------------------+------------------------------------------------+\n| -debug | The server is compiled for debugging. |\n+---------------------------+------------------------------------------------+\n| -valgrind | The server is compiled to be instrumented |\n| | with valgrind. |\n+---------------------------+------------------------------------------------+\n\nChanging the Version String\n---------------------------\n\nSome old legacy code may break because they are parsing the VERSION string and\nexpecting a MySQL string or a simple version string like Joomla til API17, see\nMDEV-7780.\n\nFrom MariaDB 10.2, one can fool these applications by setting the version\nstring from the command line or the my.cnf files with --version=....\n\nURL: https://mariadb.com/kb/en/version/','','https://mariadb.com/kb/en/version/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (214,18,'Assignment Operator (:=)','Syntax\n------\n\nvar_name := expr\n\nDescription\n-----------\n\nAssignment operator for assigning a value. The value on the right is assigned\nto the variable on left.\n\nUnlike the = operator, := can always be used to assign a value to a variable.\n\nThis operator works with both user-defined variables and local variables.\n\nWhen assigning the same value to several variables, LAST_VALUE() can be useful.\n\nExamples\n--------\n\nSELECT @x := 10;\n+----------+\n| @x := 10 |\n+----------+\n| 10 |\n+----------+\n\nSELECT @x, @y := @x;\n+------+----------+\n| @x | @y := @x |\n+------+----------+\n| 10 | 10 |\n+------+----------+\n\nURL: https://mariadb.com/kb/en/assignment-operator/','','https://mariadb.com/kb/en/assignment-operator/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (215,18,'Assignment Operator (=)','Syntax\n------\n\nidentifier = expr\n\nDescription\n-----------\n\nThe equal sign is used as both an assignment operator in certain contexts, and\nas a comparison operator. When used as assignment operator, the value on the\nright is assigned to the variable (or column, in some contexts) on the left.\n\nSince its use can be ambiguous, unlike the := assignment operator, the =\nassignment operator cannot be used in all contexts, and is only valid as part\nof a SET statement, or the SET clause of an UPDATE statement\n\nThis operator works with both user-defined variables and local variables.\n\nExamples\n--------\n\nUPDATE table_name SET x = 2 WHERE x > 100;\n\nSET @x = 1, @y := 2;\n\nURL: https://mariadb.com/kb/en/assignment-operators-assignment-operator/','','https://mariadb.com/kb/en/assignment-operators-assignment-operator/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (216,19,'Not Equal Operator','Syntax\n------\n\n<>, !=\n\nDescription\n-----------\n\nNot equal operator. Evaluates both SQL expressions and returns 1 if they are\nnot equal and 0 if they are equal, or NULL if either expression is NULL. If\nthe expressions return different data types, (for instance, a number and a\nstring), performs type conversion.\n\nWhen used in row comparisons these two queries return the same results:\n\nSELECT (t1.a, t1.b) != (t2.x, t2.y) \nFROM t1 INNER JOIN t2;\n\nSELECT (t1.a != t2.x) OR (t1.b != t2.y)\nFROM t1 INNER JOIN t2;\n\nExamples\n--------\n\nSELECT \'.01\' <> \'0.01\';\n+-----------------+\n| \'.01\' <> \'0.01\' |\n+-----------------+\n| 1 |\n+-----------------+\n\nSELECT .01 <> \'0.01\';\n+---------------+\n| .01 <> \'0.01\' |\n+---------------+\n| 0 |\n+---------------+\n\nSELECT \'zapp\' <> \'zappp\';\n+-------------------+\n| \'zapp\' <> \'zappp\' |\n+-------------------+\n| 1 |\n+-------------------+\n\nURL: https://mariadb.com/kb/en/not-equal/','','https://mariadb.com/kb/en/not-equal/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (217,19,'<','Syntax\n------\n\n<\n\nDescription\n-----------\n\nLess than operator. Evaluates both SQL expressions and returns 1 if the left\nvalue is less than the right value and 0 if it is not, or NULL if either\nexpression is NULL. If the expressions return different data types, (for\ninstance, a number and a string), performs type conversion.\n\nWhen used in row comparisons these two queries return the same results:\n\nSELECT (t1.a, t1.b) < (t2.x, t2.y) \nFROM t1 INNER JOIN t2;\n\nSELECT (t1.a < t2.x) OR ((t1.a = t2.x) AND (t1.b < t2.y))\nFROM t1 INNER JOIN t2;\n\nExamples\n--------\n\nSELECT 2 < 2;\n+-------+\n| 2 < 2 |\n+-------+\n| 0 |\n+-------+\n\nType conversion:\n\nSELECT 3<\'4\';\n+-------+\n| 3<\'4\' |\n+-------+\n| 1 |\n+-------+\n\nCase insensitivity - see Character Sets and Collations:\n\nSELECT \'a\'<\'A\';\n+---------+\n| \'a\'<\'A\' |\n+---------+\n| 0 |\n+---------+\n\nURL: https://mariadb.com/kb/en/less-than/','','https://mariadb.com/kb/en/less-than/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (218,19,'<=','Syntax\n------\n\n<=\n\nDescription\n-----------\n\nLess than or equal operator. Evaluates both SQL expressions and returns 1 if\nthe left value is less than or equal to the right value and 0 if it is not, or\nNULL if either expression is NULL. If the expressions return different data\ntypes, (for instance, a number and a string), performs type conversion.\n\nWhen used in row comparisons these two queries return the same results:\n\nSELECT (t1.a, t1.b) <= (t2.x, t2.y) \nFROM t1 INNER JOIN t2;\n\nSELECT (t1.a < t2.x) OR ((t1.a = t2.x) AND (t1.b <= t2.y))\nFROM t1 INNER JOIN t2;\n\nExamples\n--------\n\nSELECT 0.1 <= 2;\n+----------+\n| 0.1 <= 2 |\n+----------+\n| 1 |\n+----------+\n\nSELECT \'a\'<=\'A\';\n+----------+\n| \'a\'<=\'A\' |\n+----------+\n| 1 |\n+----------+\n\nURL: https://mariadb.com/kb/en/less-than-or-equal/','','https://mariadb.com/kb/en/less-than-or-equal/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (219,19,'<=>','Syntax\n------\n\n<=>\n\nDescription\n-----------\n\nNULL-safe equal operator. It performs an equality comparison like the =\noperator, but returns 1 rather than NULL if both operands are NULL, and 0\nrather than NULL if one operand is NULL.\n\na <=> b is equivalent to a = b OR (a IS NULL AND b IS NULL).\n\nWhen used in row comparisons these two queries return the same results:\n\nSELECT (t1.a, t1.b) <=> (t2.x, t2.y) \nFROM t1 INNER JOIN t2;\n\nSELECT (t1.a <=> t2.x) AND (t1.b <=> t2.y)\nFROM t1 INNER JOIN t2;\n\nSee also NULL Values in MariaDB.\n\nExamples\n--------\n\nSELECT 1 <=> 1, NULL <=> NULL, 1 <=> NULL;\n+---------+---------------+------------+\n| 1 <=> 1 | NULL <=> NULL | 1 <=> NULL |\n+---------+---------------+------------+\n| 1 | 1 | 0 |\n+---------+---------------+------------+\n\nSELECT 1 = 1, NULL = NULL, 1 = NULL;\n+-------+-------------+----------+\n| 1 = 1 | NULL = NULL | 1 = NULL |\n+-------+-------------+----------+\n| 1 | NULL | NULL |\n+-------+-------------+----------+\n\nURL: https://mariadb.com/kb/en/null-safe-equal/','','https://mariadb.com/kb/en/null-safe-equal/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (220,19,'=','Syntax\n------\n\nleft_expr = right_expr\n\nDescription\n-----------\n\nEqual operator. Evaluates both SQL expressions and returns 1 if they are\nequal, 0 if they are not equal, or NULL if either expression is NULL. If the\nexpressions return different data types (for example, a number and a string),\na type conversion is performed.\n\nWhen used in row comparisons these two queries are synonymous and return the\nsame results:\n\nSELECT (t1.a, t1.b) = (t2.x, t2.y) FROM t1 INNER JOIN t2;\n\nSELECT (t1.a = t2.x) AND (t1.b = t2.y) FROM t1 INNER JOIN t2;\n\nTo perform a NULL-safe comparison, use the <=> operator.\n\n= can also be used as an assignment operator.\n\nExamples\n--------\n\nSELECT 1 = 0;\n+-------+\n| 1 = 0 |\n+-------+\n| 0 |\n+-------+\n\nSELECT \'0\' = 0;\n+---------+\n| \'0\' = 0 |\n+---------+\n| 1 |\n+---------+\n\nSELECT \'0.0\' = 0;\n+-----------+\n| \'0.0\' = 0 |\n+-----------+\n| 1 |\n+-----------+\n\nSELECT \'0.01\' = 0;\n+------------+\n| \'0.01\' = 0 |\n+------------+\n| 0 |\n+------------+\n\nSELECT \'.01\' = 0.01;\n+--------------+\n| \'.01\' = 0.01 |\n+--------------+\n| 1 |\n+--------------+\n\nSELECT (5 * 2) = CONCAT(\'1\', \'0\');\n+----------------------------+\n| (5 * 2) = CONCAT(\'1\', \'0\') |\n+----------------------------+\n| 1 |\n+----------------------------+\n\nSELECT 1 = NULL;\n+----------+\n| 1 = NULL |\n+----------+\n| NULL |\n+----------+\n\nSELECT NULL = NULL;\n+-------------+\n| NULL = NULL |\n+-------------+\n| NULL |\n+-------------+\n\nURL: https://mariadb.com/kb/en/equal/','','https://mariadb.com/kb/en/equal/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (221,19,'>','Syntax\n------\n\n>\n\nDescription\n-----------\n\nGreater than operator. Evaluates both SQL expressions and returns 1 if the\nleft value is greater than the right value and 0 if it is not, or NULL if\neither expression is NULL. If the expressions return different data types,\n(for instance, a number and a string), performs type conversion.\n\nWhen used in row comparisons these two queries return the same results:\n\nSELECT (t1.a, t1.b) > (t2.x, t2.y) \nFROM t1 INNER JOIN t2;\n\nSELECT (t1.a > t2.x) OR ((t1.a = t2.x) AND (t1.b > t2.y))\nFROM t1 INNER JOIN t2;\n\nExamples\n--------\n\nSELECT 2 > 2;\n+-------+\n| 2 > 2 |\n+-------+\n| 0 |\n+-------+\n\nSELECT \'b\' > \'a\';\n+-----------+\n| \'b\' > \'a\' |\n+-----------+\n| 1 |\n+-----------+\n\nURL: https://mariadb.com/kb/en/greater-than/','','https://mariadb.com/kb/en/greater-than/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (222,19,'>=','Syntax\n------\n\n>=\n\nDescription\n-----------\n\nGreater than or equal operator. Evaluates both SQL expressions and returns 1\nif the left value is greater than or equal to the right value and 0 if it is\nnot, or NULL if either expression is NULL. If the expressions return different\ndata types, (for instance, a number and a string), performs type conversion.\n\nWhen used in row comparisons these two queries return the same results:\n\nSELECT (t1.a, t1.b) >= (t2.x, t2.y) \nFROM t1 INNER JOIN t2;\n\nSELECT (t1.a > t2.x) OR ((t1.a = t2.x) AND (t1.b >= t2.y))\nFROM t1 INNER JOIN t2;\n\nExamples\n--------\n\nSELECT 2 >= 2;\n+--------+\n| 2 >= 2 |\n+--------+\n| 1 |\n+--------+\n\nSELECT \'A\' >= \'a\';\n+------------+\n| \'A\' >= \'a\' |\n+------------+\n| 1 |\n+------------+\n\nURL: https://mariadb.com/kb/en/greater-than-or-equal/','','https://mariadb.com/kb/en/greater-than-or-equal/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (223,19,'BETWEEN AND','Syntax\n------\n\nexpr BETWEEN min AND max\n\nDescription\n-----------\n\nIf expr is greater than or equal to min and expr is less than or equal to max,\nBETWEEN returns 1, otherwise it returns 0. This is equivalent to the\nexpression (min <= expr AND expr <= max) if all the arguments are of the same\ntype. Otherwise type conversion takes place according to the rules described\nat Type Conversion, but applied to all the three arguments.\n\nExamples\n--------\n\nSELECT 1 BETWEEN 2 AND 3;\n+-------------------+\n| 1 BETWEEN 2 AND 3 |\n+-------------------+\n| 0 |\n+-------------------+\n\nSELECT \'b\' BETWEEN \'a\' AND \'c\';\n+-------------------------+\n| \'b\' BETWEEN \'a\' AND \'c\' |\n+-------------------------+\n| 1 |\n+-------------------------+\n\nSELECT 2 BETWEEN 2 AND \'3\';\n+---------------------+\n| 2 BETWEEN 2 AND \'3\' |\n+---------------------+\n| 1 |\n+---------------------+\n\nSELECT 2 BETWEEN 2 AND \'x-3\';\n+-----------------------+\n| 2 BETWEEN 2 AND \'x-3\' |\n+-----------------------+\n| 0 |\n+-----------------------+\n1 row in set, 1 warning (0.00 sec)\n\nWarning (Code 1292): Truncated incorrect DOUBLE value: \'x-3\'\n\nNULL:\n\nSELECT 1 BETWEEN 1 AND NULL;\n+----------------------+\n| 1 BETWEEN 1 AND NULL |\n+----------------------+\n| NULL |\n+----------------------+\n\nDATE, DATETIME and TIMESTAMP examples. Omitting the time component compares\nagainst 00:00, so later times on the same date are not returned:\n\nCREATE TABLE `x` (\n a date ,\n b datetime,\n c timestamp\n)\n\nINSERT INTO x VALUES \n (\'2018-11-11\', \'2018-11-11 05:15\', \'2018-11-11 05:15\'), \n (\'2018-11-12\', \'2018-11-12 05:15\', \'2018-11-12 05:15\');\n\nSELECT * FROM x WHERE a BETWEEN \'2018-11-11\' AND \'2018-11-12\';\n+------------+---------------------+---------------------+\n| a | b | c |\n+------------+---------------------+---------------------+\n| 2018-11-11 | 2018-11-11 05:15:00 | 2018-11-11 05:15:00 |\n| 2018-11-12 | 2018-11-12 05:15:00 | 2018-11-12 05:15:00 |\n+------------+---------------------+---------------------+\n\nSELECT * FROM x WHERE b BETWEEN \'2018-11-11\' AND \'2018-11-12\';\n+------------+---------------------+---------------------+\n| a | b | c |\n+------------+---------------------+---------------------+\n| 2018-11-11 | 2018-11-11 05:15:00 | 2018-11-11 05:15:00 |\n+------------+---------------------+---------------------+\n\nSELECT * FROM x WHERE c BETWEEN \'2018-11-11\' AND \'2018-11-12\';\n+------------+---------------------+---------------------+\n| a | b | c |\n+------------+---------------------+---------------------+\n| 2018-11-11 | 2018-11-11 05:15:00 | 2018-11-11 05:15:00 |\n+------------+---------------------+---------------------+\n\nURL: https://mariadb.com/kb/en/between-and/','','https://mariadb.com/kb/en/between-and/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (224,19,'COALESCE','Syntax\n------\n\nCOALESCE(value,...)\n\nDescription\n-----------\n\nReturns the first non-NULL value in the list, or NULL if there are no non-NULL\nvalues. At least one parameter must be passed.\n\nThe function is useful when substituting a default value for null values when\ndisplaying data.\n\nSee also NULL Values in MariaDB.\n\nExamples\n--------\n\nSELECT COALESCE(NULL,1);\n+------------------+\n| COALESCE(NULL,1) |\n+------------------+\n| 1 |\n+------------------+\n\nSELECT COALESCE(NULL,NULL,NULL);\n+--------------------------+\n| COALESCE(NULL,NULL,NULL) |\n+--------------------------+\n| NULL |\n+--------------------------+\n\nWhen two arguments are given, COALESCE() is the same as IFNULL():\n\nSET @a=NULL, @b=1;\n\nSELECT COALESCE(@a, @b), IFNULL(@a, @b);\n+------------------+----------------+\n| COALESCE(@a, @b) | IFNULL(@a, @b) |\n+------------------+----------------+\n| 1 | 1 |\n+------------------+----------------+\n\nHex type confusion:\n\nCREATE TABLE t1 (a INT, b VARCHAR(10));\nINSERT INTO t1 VALUES (0x31, 0x61),(COALESCE(0x31), COALESCE(0x61));\n\nSELECT * FROM t1;\n+------+------+\n| a | b |\n+------+------+\n| 49 | a |\n| 1 | a |\n+------+------+\n\nThe reason for the differing results above is that when 0x31 is inserted\ndirectly to the column, it\'s treated as a number (see Hexadecimal Literals),\nwhile when 0x31 is passed to COALESCE(), it\'s treated as a string, because:\n\n* HEX values have a string data type by default.\n* COALESCE() has the same data type as the argument.\n\nSubstituting zero for NULL (in this case when the aggregate function returns\nNULL after finding no rows):\n\nSELECT SUM(score) FROM student;\n+------------+\n| SUM(score) |\n+------------+\n| NULL |\n+------------+\n\nSELECT COALESCE(SUM(score),0) FROM student;\n+------------------------+\n| COALESCE(SUM(score),0) |\n+------------------------+\n| 0 |\n+------------------------+\n\nURL: https://mariadb.com/kb/en/coalesce/','','https://mariadb.com/kb/en/coalesce/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (225,19,'GREATEST','Syntax\n------\n\nGREATEST(value1,value2,...)\n\nDescription\n-----------\n\nWith two or more arguments, returns the largest (maximum-valued) argument. The\narguments are compared using the same rules as for LEAST().\n\nExamples\n--------\n\nSELECT GREATEST(2,0);\n+---------------+\n| GREATEST(2,0) |\n+---------------+\n| 2 |\n+---------------+\n\nSELECT GREATEST(34.0,3.0,5.0,767.0);\n+------------------------------+\n| GREATEST(34.0,3.0,5.0,767.0) |\n+------------------------------+\n| 767.0 |\n+------------------------------+\n\nSELECT GREATEST(\'B\',\'A\',\'C\');\n+-----------------------+\n| GREATEST(\'B\',\'A\',\'C\') |\n+-----------------------+\n| C |\n+-----------------------+\n\nURL: https://mariadb.com/kb/en/greatest/','','https://mariadb.com/kb/en/greatest/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (226,19,'IN','Syntax\n------\n\nexpr IN (value,...)\n\nDescription\n-----------\n\nReturns 1 if expr is equal to any of the values in the IN list, else returns\n0. If all values are constants, they are evaluated according to the type of\nexpr and sorted. The search for the item then is done using a binary search.\nThis means IN is very quick if the IN value list consists entirely of\nconstants. Otherwise, type conversion takes place according to the rules\ndescribed at Type Conversion, but applied to all the arguments.\n\nIf expr is NULL, IN always returns NULL. If at least one of the values in the\nlist is NULL, and one of the comparisons is true, the result is 1. If at least\none of the values in the list is NULL and none of the comparisons is true, the\nresult is NULL.\n\nExamples\n--------\n\nSELECT 2 IN (0,3,5,7);\n+----------------+\n| 2 IN (0,3,5,7) |\n+----------------+\n| 0 |\n+----------------+\n\nSELECT \'wefwf\' IN (\'wee\',\'wefwf\',\'weg\');\n+----------------------------------+\n| \'wefwf\' IN (\'wee\',\'wefwf\',\'weg\') |\n+----------------------------------+\n| 1 |\n+----------------------------------+\n\nType conversion:\n\nSELECT 1 IN (\'1\', \'2\', \'3\');\n+----------------------+\n| 1 IN (\'1\', \'2\', \'3\') |\n+----------------------+\n| 1 |\n+----------------------+\n\nSELECT NULL IN (1, 2, 3);\n+-------------------+\n| NULL IN (1, 2, 3) |\n+-------------------+\n| NULL |\n+-------------------+\n\nSELECT 1 IN (1, 2, NULL);\n+-------------------+\n| 1 IN (1, 2, NULL) |\n+-------------------+\n| 1 |\n+-------------------+\n\nSELECT 5 IN (1, 2, NULL);\n+-------------------+\n| 5 IN (1, 2, NULL) |\n+-------------------+\n| NULL |\n+-------------------+\n\nURL: https://mariadb.com/kb/en/in/','','https://mariadb.com/kb/en/in/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (227,19,'INTERVAL','Syntax\n------\n\nINTERVAL(N,N1,N2,N3,...)\n\nDescription\n-----------\n\nReturns the index of the last argument that is less than the first argument or\nis NULL.\n\nReturns 0 if N < N1, 1 if N < N2, 2 if N < N3 and so on or -1 if N is NULL.\nAll arguments are treated as integers. It is required that N1 < N2 < N3 < ...\n< Nn for this function to work correctly. This is because a fast binary search\nis used.\n\nExamples\n--------\n\nSELECT INTERVAL(23, 1, 15, 17, 30, 44, 200);\n+--------------------------------------+\n| INTERVAL(23, 1, 15, 17, 30, 44, 200) |\n+--------------------------------------+\n| 3 |\n+--------------------------------------+\n\nSELECT INTERVAL(10, 1, 10, 100, 1000);\n+--------------------------------+\n| INTERVAL(10, 1, 10, 100, 1000) |\n+--------------------------------+\n| 2 |\n+--------------------------------+\n\nSELECT INTERVAL(22, 23, 30, 44, 200);\n+-------------------------------+\n| INTERVAL(22, 23, 30, 44, 200) |\n+-------------------------------+\n| 0 |\n+-------------------------------+\n\nSELECT INTERVAL(10, 2, NULL);\n+-----------------------+\n| INTERVAL(10, 2, NULL) |\n+-----------------------+\n| 2 |\n+-----------------------+\n\nURL: https://mariadb.com/kb/en/interval/','','https://mariadb.com/kb/en/interval/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (228,19,'IS','Syntax\n------\n\nIS boolean_value\n\nDescription\n-----------\n\nTests a value against a boolean value, where boolean_value can be TRUE, FALSE,\nor UNKNOWN.\n\nThere is an important difference between using IS TRUE or comparing a value\nwith TRUE using =. When using =, only 1 equals to TRUE. But when using IS\nTRUE, all values which are logically true (like a number > 1) return TRUE.\n\nExamples\n--------\n\nSELECT 1 IS TRUE, 0 IS FALSE, NULL IS UNKNOWN;\n+-----------+------------+-----------------+\n| 1 IS TRUE | 0 IS FALSE | NULL IS UNKNOWN |\n+-----------+------------+-----------------+\n| 1 | 1 | 1 |\n+-----------+------------+-----------------+\n\nDifference between = and IS TRUE:\n\nSELECT 2 = TRUE, 2 IS TRUE;\n+----------+-----------+\n| 2 = TRUE | 2 IS TRUE |\n+----------+-----------+\n| 0 | 1 |\n+----------+-----------+\n\nURL: https://mariadb.com/kb/en/is/','','https://mariadb.com/kb/en/is/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (229,19,'IS NOT','Syntax\n------\n\nIS NOT boolean_value\n\nDescription\n-----------\n\nTests a value against a boolean value, where boolean_value can be TRUE, FALSE,\nor UNKNOWN.\n\nExamples\n--------\n\nSELECT 1 IS NOT UNKNOWN, 0 IS NOT UNKNOWN, NULL IS NOT UNKNOWN;\n+------------------+------------------+---------------------+\n| 1 IS NOT UNKNOWN | 0 IS NOT UNKNOWN | NULL IS NOT UNKNOWN |\n+------------------+------------------+---------------------+\n| 1 | 1 | 0 |\n+------------------+------------------+---------------------+\n\nSELECT NULL IS NOT TRUE, NULL IS NOT FALSE;\n+------------------+-------------------+\n| NULL IS NOT TRUE | NULL IS NOT FALSE |\n+------------------+-------------------+\n| 1 | 1 |\n+------------------+-------------------+\n\nURL: https://mariadb.com/kb/en/is-not/','','https://mariadb.com/kb/en/is-not/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (230,19,'IS NOT NULL','Syntax\n------\n\nIS NOT NULL\n\nDescription\n-----------\n\nTests whether a value is not NULL. See also NULL Values in MariaDB.\n\nExamples\n--------\n\nSELECT 1 IS NOT NULL, 0 IS NOT NULL, NULL IS NOT NULL;\n+---------------+---------------+------------------+\n| 1 IS NOT NULL | 0 IS NOT NULL | NULL IS NOT NULL |\n+---------------+---------------+------------------+\n| 1 | 1 | 0 |\n+---------------+---------------+------------------+\n\nURL: https://mariadb.com/kb/en/is-not-null/','','https://mariadb.com/kb/en/is-not-null/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (231,19,'IS NULL','Syntax\n------\n\nIS NULL\n\nDescription\n-----------\n\nTests whether a value is NULL. See also NULL Values in MariaDB.\n\nExamples\n--------\n\nSELECT 1 IS NULL, 0 IS NULL, NULL IS NULL;\n+-----------+-----------+--------------+\n| 1 IS NULL | 0 IS NULL | NULL IS NULL |\n+-----------+-----------+--------------+\n| 0 | 0 | 1 |\n+-----------+-----------+--------------+\n\nCompatibility\n-------------\n\nSome ODBC applications use the syntax auto_increment_field IS NOT NULL to find\nthe latest row that was inserted with an autogenerated key value. If your\napplications need this, you can set the sql_auto_is_null variable to 1.\n\nSET @@sql_auto_is_null=1;\nCREATE TABLE t1 (auto_increment_column INT NOT NULL AUTO_INCREMENT PRIMARY\nKEY);\nINSERT INTO t1 VALUES (NULL);\nSELECT * FROM t1 WHERE auto_increment_column IS NULL;\n\n+-----------------------+\n| auto_increment_column |\n+-----------------------+\n| 1 |\n+-----------------------+\n\nURL: https://mariadb.com/kb/en/is-null/','','https://mariadb.com/kb/en/is-null/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (232,19,'ISNULL','Syntax\n------\n\nISNULL(expr)\n\nDescription\n-----------\n\nIf expr is NULL, ISNULL() returns 1, otherwise it returns 0.\n\nSee also NULL Values in MariaDB.\n\nExamples\n--------\n\nSELECT ISNULL(1+1);\n+-------------+\n| ISNULL(1+1) |\n+-------------+\n| 0 |\n+-------------+\n\nSELECT ISNULL(1/0);\n+-------------+\n| ISNULL(1/0) |\n+-------------+\n| 1 |\n+-------------+\n\nURL: https://mariadb.com/kb/en/isnull/','','https://mariadb.com/kb/en/isnull/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (233,19,'LEAST','Syntax\n------\n\nLEAST(value1,value2,...)\n\nDescription\n-----------\n\nWith two or more arguments, returns the smallest (minimum-valued) argument.\nThe arguments are compared using the following rules:\n\n* If the return value is used in an INTEGER context or all arguments are\ninteger-valued, they are compared as integers.\n* If the return value is used in a REAL context or all arguments are\nreal-valued, they are compared as reals.\n* If any argument is a case-sensitive string, the arguments are compared as\ncase-sensitive strings.\n* In all other cases, the arguments are compared as case-insensitive strings.\n\nLEAST() returns NULL if any argument is NULL.\n\nExamples\n--------\n\nSELECT LEAST(2,0);\n+------------+\n| LEAST(2,0) |\n+------------+\n| 0 |\n+------------+\n\nSELECT LEAST(34.0,3.0,5.0,767.0);\n+---------------------------+\n| LEAST(34.0,3.0,5.0,767.0) |\n+---------------------------+\n| 3.0 |\n+---------------------------+\n\nSELECT LEAST(\'B\',\'A\',\'C\');\n+--------------------+\n| LEAST(\'B\',\'A\',\'C\') |\n+--------------------+\n| A |\n+--------------------+\n\nURL: https://mariadb.com/kb/en/least/','','https://mariadb.com/kb/en/least/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (234,19,'NOT BETWEEN','Syntax\n------\n\nexpr NOT BETWEEN min AND max\n\nDescription\n-----------\n\nThis is the same as NOT (expr BETWEEN min AND max).\n\nNote that the meaning of the alternative form NOT expr BETWEEN min AND max is\naffected by the HIGH_NOT_PRECEDENCE SQL_MODE flag.\n\nExamples\n--------\n\nSELECT 1 NOT BETWEEN 2 AND 3;\n+-----------------------+\n| 1 NOT BETWEEN 2 AND 3 |\n+-----------------------+\n| 1 |\n+-----------------------+\n\nSELECT \'b\' NOT BETWEEN \'a\' AND \'c\';\n+-----------------------------+\n| \'b\' NOT BETWEEN \'a\' AND \'c\' |\n+-----------------------------+\n| 0 |\n+-----------------------------+\n\nNULL:\n\nSELECT 1 NOT BETWEEN 1 AND NULL;\n+--------------------------+\n| 1 NOT BETWEEN 1 AND NULL |\n+--------------------------+\n| NULL |\n+--------------------------+\n\nURL: https://mariadb.com/kb/en/not-between/','','https://mariadb.com/kb/en/not-between/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (235,19,'NOT IN','Syntax\n------\n\nexpr NOT IN (value,...)\n\nDescription\n-----------\n\nThis is the same as NOT (expr IN (value,...)).\n\nExamples\n--------\n\nSELECT 2 NOT IN (0,3,5,7);\n+--------------------+\n| 2 NOT IN (0,3,5,7) |\n+--------------------+\n| 1 |\n+--------------------+\n\nSELECT \'wefwf\' NOT IN (\'wee\',\'wefwf\',\'weg\');\n+--------------------------------------+\n| \'wefwf\' NOT IN (\'wee\',\'wefwf\',\'weg\') |\n+--------------------------------------+\n| 0 |\n+--------------------------------------+\n\nSELECT 1 NOT IN (\'1\', \'2\', \'3\');\n+--------------------------+\n| 1 NOT IN (\'1\', \'2\', \'3\') |\n+--------------------------+\n| 0 |\n+--------------------------+\n\nNULL:\n\nSELECT NULL NOT IN (1, 2, 3);\n+-----------------------+\n| NULL NOT IN (1, 2, 3) |\n+-----------------------+\n| NULL |\n+-----------------------+\n\nSELECT 1 NOT IN (1, 2, NULL);\n+-----------------------+\n| 1 NOT IN (1, 2, NULL) |\n+-----------------------+\n| 0 |\n+-----------------------+\n\nSELECT 5 NOT IN (1, 2, NULL);\n+-----------------------+\n| 5 NOT IN (1, 2, NULL) |\n+-----------------------+\n| NULL |\n+-----------------------+\n\nURL: https://mariadb.com/kb/en/not-in/','','https://mariadb.com/kb/en/not-in/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (236,20,'&','Syntax\n------\n\n&\n\nDescription\n-----------\n\nBitwise AND. Converts the values to binary and compares bits. Only if both the\ncorresponding bits are 1 is the resulting bit also 1.\n\nSee also bitwise OR.\n\nExamples\n--------\n\nSELECT 2&1;\n+-----+\n| 2&1 |\n+-----+\n| 0 |\n+-----+\n\nSELECT 3&1;\n+-----+\n| 3&1 |\n+-----+\n| 1 |\n+-----+\n\nSELECT 29 & 15;\n+---------+\n| 29 & 15 |\n+---------+\n| 13 |\n+---------+\n\nURL: https://mariadb.com/kb/en/bitwise_and/','','https://mariadb.com/kb/en/bitwise_and/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (237,20,'<<','Syntax\n------\n\nvalue1 << value2\n\nDescription\n-----------\n\nConverts a longlong (BIGINT) number (value1) to binary and shifts value2 units\nto the left.\n\nExamples\n--------\n\nSELECT 1 << 2;\n+--------+\n| 1 << 2 |\n+--------+\n| 4 |\n+--------+\n\nURL: https://mariadb.com/kb/en/shift-left/','','https://mariadb.com/kb/en/shift-left/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (238,20,'>>','Syntax\n------\n\nvalue1 >> value2\n\nDescription\n-----------\n\nConverts a longlong (BIGINT) number (value1) to binary and shifts value2 units\nto the right.\n\nExamples\n--------\n\nSELECT 4 >> 2;\n+--------+\n| 4 >> 2 |\n+--------+\n| 1 |\n+--------+\n\nURL: https://mariadb.com/kb/en/shift-right/','','https://mariadb.com/kb/en/shift-right/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (239,20,'BIT_COUNT','Syntax\n------\n\nBIT_COUNT(N)\n\nDescription\n-----------\n\nReturns the number of bits that are set in the argument N.\n\nExamples\n--------\n\nSELECT BIT_COUNT(29), BIT_COUNT(b\'101010\');\n+---------------+----------------------+\n| BIT_COUNT(29) | BIT_COUNT(b\'101010\') |\n+---------------+----------------------+\n| 4 | 3 |\n+---------------+----------------------+\n\nURL: https://mariadb.com/kb/en/bit_count/','','https://mariadb.com/kb/en/bit_count/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (240,20,'^','Syntax\n------\n\n^\n\nDescription\n-----------\n\nBitwise XOR. Converts the values to binary and compares bits. If one (and only\none) of the corresponding bits is 1 is the resulting bit also 1.\n\nExamples\n--------\n\nSELECT 1 ^ 1;\n+-------+\n| 1 ^ 1 |\n+-------+\n| 0 |\n+-------+\n\nSELECT 1 ^ 0;\n+-------+\n| 1 ^ 0 |\n+-------+\n| 1 |\n+-------+\n\nSELECT 11 ^ 3;\n+--------+\n| 11 ^ 3 |\n+--------+\n| 8 |\n+--------+\n\nURL: https://mariadb.com/kb/en/bitwise-xor/','','https://mariadb.com/kb/en/bitwise-xor/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (241,20,'|','Syntax\n------\n\n|\n\nDescription\n-----------\n\nBitwise OR. Converts the values to binary and compares bits. If either of the\ncorresponding bits has a value of 1, the resulting bit is also 1.\n\nSee also bitwise AND.\n\nExamples\n--------\n\nSELECT 2|1;\n+-----+\n| 2|1 |\n+-----+\n| 3 |\n+-----+\n\nSELECT 29 | 15;\n+---------+\n| 29 | 15 |\n+---------+\n| 31 |\n+---------+\n\nURL: https://mariadb.com/kb/en/bitwise-or/','','https://mariadb.com/kb/en/bitwise-or/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (242,20,'~','Syntax\n------\n\n~\n\nDescription\n-----------\n\nBitwise NOT. Converts the value to 4 bytes binary and inverts all bits.\n\nExamples\n--------\n\nSELECT 3 & ~1;\n+--------+\n| 3 & ~1 |\n+--------+\n| 2 |\n+--------+\n\nSELECT 5 & ~1;\n+--------+\n| 5 & ~1 |\n+--------+\n| 4 |\n+--------+\n\nURL: https://mariadb.com/kb/en/bitwise-not/','','https://mariadb.com/kb/en/bitwise-not/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (243,20,'Parentheses','Parentheses are sometimes called precedence operators - this means that they\ncan be used to change the other operator\'s precedence in an expression. The\nexpressions that are written between parentheses are computed before the\nexpressions that are written outside. Parentheses must always contain an\nexpression (that is, they cannot be empty), and can be nested.\n\nFor example, the following expressions could return different results:\n\n* NOT a OR b\n* NOT (a OR b)\n\nIn the first case, NOT applies to a, so if a is FALSE or b is TRUE, the\nexpression returns TRUE. In the second case, NOT applies to the result of a OR\nb, so if at least one of a or b is TRUE, the expression is TRUE.\n\nWhen the precedence of operators is not intuitive, you can use parentheses to\nmake it immediately clear for whoever reads the statement.\n\nThe precedence of the NOT operator can also be affected by the\nHIGH_NOT_PRECEDENCE SQL_MODE flag.\n\nOther uses\n----------\n\nParentheses must always be used to enclose subqueries.\n\nParentheses can also be used in a JOIN statement between multiple tables to\ndetermine which tables must be joined first.\n\nAlso, parentheses are used to enclose the list of parameters to be passed to\nbuilt-in functions, user-defined functions and stored routines. However, when\nno parameter is passed to a stored procedure, parentheses are optional. For\nbuiltin functions and user-defined functions, spaces are not allowed between\nthe function name and the open parenthesis, unless the IGNORE_SPACE SQL_MODE\nis set. For stored routines (and for functions if IGNORE_SPACE is set) spaces\nare allowed before the open parenthesis, including tab characters and new line\ncharacters.\n\nSyntax errors\n-------------\n\nIf there are more open parentheses than closed parentheses, the error usually\nlooks like this:\n\nERROR 1064 (42000): You have an error in your SQL syntax; check the manual that\ncorresponds to your MariaDB server version for the right syntax to use near \'\'\na\nt line 1\n\nNote the empty string.\n\nIf there are more closed parentheses than open parentheses, the error usually\nlooks like this:\n\nERROR 1064 (42000): You have an error in your SQL syntax; check the manual that\ncorresponds to your MariaDB server version for the right syntax to use near \')\'\nat line 1\n\nNote the quoted closed parenthesis.\n\nURL: https://mariadb.com/kb/en/parentheses/','','https://mariadb.com/kb/en/parentheses/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (244,20,'TRUE FALSE','Description\n-----------\n\nThe constants TRUE and FALSE evaluate to 1 and 0, respectively. The constant\nnames can be written in any lettercase.\n\nExamples\n--------\n\nSELECT TRUE, true, FALSE, false;\n+------+------+-------+-------+\n| TRUE | TRUE | FALSE | FALSE |\n+------+------+-------+-------+\n| 1 | 1 | 0 | 0 |\n+------+------+-------+-------+\n\nURL: https://mariadb.com/kb/en/true-false/','','https://mariadb.com/kb/en/true-false/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (245,21,'ANALYZE TABLE','Syntax\n------\n\nANALYZE [NO_WRITE_TO_BINLOG | LOCAL] TABLE tbl_name [,tbl_name ...] \n [PERSISTENT FOR [ALL|COLUMNS ([col_name [,col_name ...]])]\n [INDEXES ([index_name [,index_name ...]])]]\n\nDescription\n-----------\n\nANALYZE TABLE analyzes and stores the key distribution for a table (index\nstatistics). This statement works with MyISAM, Aria and InnoDB tables. During\nthe analysis, InnoDB will allow reads/writes, and MyISAM/Aria reads/inserts.\nFor MyISAM tables, this statement is equivalent to using myisamchk --analyze.\n\nFor more information on how the analysis works within InnoDB, see InnoDB\nLimitations.\n\nMariaDB uses the stored key distribution to decide the order in which tables\nshould be joined when you perform a join on something other than a constant.\nIn addition, key distributions can be used when deciding which indexes to use\nfor a specific table within a query.\n\nThis statement requires SELECT and INSERT privileges for the table.\n\nBy default, ANALYZE TABLE statements are written to the binary log and will be\nreplicated. The NO_WRITE_TO_BINLOG keyword (LOCAL is an alias) will ensure the\nstatement is not written to the binary log.\n\nFrom MariaDB 10.3.19, ANALYZE TABLE statements are not logged to the binary\nlog if read_only is set. See also Read-Only Replicas.\n\nANALYZE TABLE is also supported for partitioned tables. You can use ALTER\nTABLE ... ANALYZE PARTITION to analyze one or more partitions.\n\nThe Aria storage engine supports progress reporting for the ANALYZE TABLE\nstatement.\n\nEngine-Independent Statistics\n-----------------------------\n\nANALYZE TABLE supports engine-independent statistics. See Engine-Independent\nTable Statistics: Collecting Statistics with the ANALYZE TABLE Statement for\nmore information.\n\nUseful Variables\n----------------\n\nFor calculating the number of duplicates, ANALYZE TABLE uses a buffer of\nsort_buffer_size bytes per column. You can slightly increase the speed of\nANALYZE TABLE by increasing this variable.\n\nURL: https://mariadb.com/kb/en/analyze-table/','','https://mariadb.com/kb/en/analyze-table/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (246,21,'CHECK TABLE','Syntax\n------\n\nCHECK TABLE tbl_name [, tbl_name] ... [option] ...\n\noption = {FOR UPGRADE | QUICK | FAST | MEDIUM | EXTENDED | CHANGED}\n\nDescription\n-----------\n\nCHECK TABLE checks a table or tables for errors. CHECK TABLE works for\nArchive, Aria, CSV, InnoDB and MyISAM tables. For Aria and MyISAM tables, the\nkey statistics are updated as well. For CSV, see also Checking and Repairing\nCSV Tables.\n\nAs an alternative, myisamchk is a commandline tool for checking MyISAM tables\nwhen the tables are not being accessed. For Aria tables, there is a similar\ntool: aria_chk.\n\nFor checking dynamic columns integrity, COLUMN_CHECK() can be used.\n\nCHECK TABLE can also check views for problems, such as tables that are\nreferenced in the view definition that no longer exist.\n\nCHECK TABLE is also supported for partitioned tables. You can use ALTER TABLE\n... CHECK PARTITION to check one or more partitions.\n\nThe meaning of the different options are as follows - note that this can vary\na bit between storage engines:\n\n+-----+----------------------------------------------------------------------+\n| FOR | Do a very quick check if the storage format for the table has |\n| UPG | changed so that one needs to do a REPAIR. This is only needed when |\n| ADE | one upgrades between major versions of MariaDB or MySQL. This is |\n| | usually done by running mysql_upgrade. |\n+-----+----------------------------------------------------------------------+\n| FAS | Only check tables that has not been closed properly or are marked |\n| | as corrupt. Only supported by the MyISAM and Aria engines. For |\n| | other engines the table is checked normally |\n+-----+----------------------------------------------------------------------+\n| CHA | Check only tables that has changed since last REPAIR / CHECK. Only |\n| GED | supported by the MyISAM and Aria engines. For other engines the |\n| | table is checked normally. |\n+-----+----------------------------------------------------------------------+\n| QUI | Do a fast check. For MyISAM and Aria, this means skipping the check |\n| K | of the delete link chain, which may take some time. |\n+-----+----------------------------------------------------------------------+\n| MED | Scan also the data files. Checks integrity between data and index |\n| UM | files with checksums. In most cases this should find all possible |\n| | errors. |\n+-----+----------------------------------------------------------------------+\n| EXT | Does a full check to verify every possible error. For MyISAM and |\n| NDE | Aria, verify for each row that all it keys exists and points to the |\n| | row. This may take a long time on large tables. Ignored by InnoDB |\n| | before MariaDB 10.6.11, MariaDB 10.7.7, MariaDB 10.8.6 and MariaDB |\n| | 10.9.4. |\n+-----+----------------------------------------------------------------------+\n\nFor most cases running CHECK TABLE without options or MEDIUM should be good\nenough.\n\nThe Aria storage engine supports progress reporting for this statement.\n\nIf you want to know if two tables are identical, take a look at CHECKSUM TABLE.\n\nInnoDB\n------\n\nIf CHECK TABLE finds an error in an InnoDB table, MariaDB might shutdown to\nprevent the error propagation. In this case, the problem will be reported in\nthe error log. Otherwise the table or an index might be marked as corrupted,\nto prevent use. This does not happen with some minor problems, like a wrong\nnumber of entries in a secondary index. Those problems are reported in the\noutput of CHECK TABLE.\n\nEach tablespace contains a header with metadata. This header is not checked by\nthis statement.\n\nDuring the execution of CHECK TABLE, other threads may be blocked.\n\nURL: https://mariadb.com/kb/en/check-table/','','https://mariadb.com/kb/en/check-table/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (247,21,'CHECK VIEW','Syntax\n------\n\nCHECK VIEW view_name\n\nDescription\n-----------\n\nThe CHECK VIEW statement was introduced in MariaDB 10.0.18 to assist with\nfixing MDEV-6916, an issue introduced in MariaDB 5.2 where the view algorithms\nwere swapped. It checks whether the view algorithm is correct. It is run as\npart of mysql_upgrade, and should not normally be required in regular use.\n\nURL: https://mariadb.com/kb/en/check-view/','','https://mariadb.com/kb/en/check-view/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (248,21,'CHECKSUM TABLE','Syntax\n------\n\nCHECKSUM TABLE tbl_name [, tbl_name] ... [ QUICK | EXTENDED ]\n\nDescription\n-----------\n\nCHECKSUM TABLE reports a table checksum. This is very useful if you want to\nknow if two tables are the same (for example on a master and slave).\n\nWith QUICK, the live table checksum is reported if it is available, or NULL\notherwise. This is very fast. A live checksum is enabled by specifying the\nCHECKSUM=1 table option when you create the table; currently, this is\nsupported only for Aria and MyISAM tables.\n\nWith EXTENDED, the entire table is read row by row and the checksum is\ncalculated. This can be very slow for large tables.\n\nIf neither QUICK nor EXTENDED is specified, MariaDB returns a live checksum if\nthe table storage engine supports it and scans the table otherwise.\n\nCHECKSUM TABLE requires the SELECT privilege for the table.\n\nFor a nonexistent table, CHECKSUM TABLE returns NULL and generates a warning.\n\nThe table row format affects the checksum value. If the row format changes,\nthe checksum will change. This means that when a table created with a\nMariaDB/MySQL version is upgraded to another version, the checksum value will\nprobably change.\n\nTwo identical tables should always match to the same checksum value; however,\nalso for non-identical tables there is a very slight chance that they will\nreturn the same value as the hashing algorithm is not completely\ncollision-free.\n\nIdentical Tables\n----------------\n\nIdentical tables mean that the CREATE statement is identical and that the\nfollowing variable, which affects the storage formats, was the same when the\ntables were created:\n\n* mysql56-temporal-format\n\nDifferences Between MariaDB and MySQL\n-------------------------------------\n\nCHECKSUM TABLE may give a different result as MariaDB doesn\'t ignore NULLs in\nthe columns as MySQL 5.1 does (Later MySQL versions should calculate checksums\nthe same way as MariaDB). You can get the \'old style\' checksum in MariaDB by\nstarting mysqld with the --old option. Note however that that the MyISAM and\nAria storage engines in MariaDB are using the new checksum internally, so if\nyou are using --old, the CHECKSUM command will be slower as it needs to\ncalculate the checksum row by row. Starting from MariaDB Server 10.9, --old is\ndeprecated and will be removed in a future release. Set --old-mode or OLD_MODE\nto COMPAT_5_1_CHECKSUM to get \'old style\' checksum.\n\nURL: https://mariadb.com/kb/en/checksum-table/','','https://mariadb.com/kb/en/checksum-table/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (249,21,'OPTIMIZE TABLE','Syntax\n------\n\nOPTIMIZE [NO_WRITE_TO_BINLOG | LOCAL] TABLE\n tbl_name [, tbl_name] ...\n [WAIT n | NOWAIT]\n\nDescription\n-----------\n\nOPTIMIZE TABLE has two main functions. It can either be used to defragment\ntables, or to update the InnoDB fulltext index.\n\nMariaDB starting with 10.3.0\n----------------------------\n\nWAIT/NOWAIT\n-----------\n\nSet the lock wait timeout. See WAIT and NOWAIT.\n\nDefragmenting\n-------------\n\nOPTIMIZE TABLE works for InnoDB (before MariaDB 10.1.1, only if the\ninnodb_file_per_table server system variable is set), Aria, MyISAM and ARCHIVE\ntables, and should be used if you have deleted a large part of a table or if\nyou have made many changes to a table with variable-length rows (tables that\nhave VARCHAR, VARBINARY, BLOB, or TEXT columns). Deleted rows are maintained\nin a linked list and subsequent INSERT operations reuse old row positions.\n\nThis statement requires SELECT and INSERT privileges for the table.\n\nBy default, OPTIMIZE TABLE statements are written to the binary log and will\nbe replicated. The NO_WRITE_TO_BINLOG keyword (LOCAL is an alias) will ensure\nthe statement is not written to the binary log.\n\nFrom MariaDB 10.3.19, OPTIMIZE TABLE statements are not logged to the binary\nlog if read_only is set. See also Read-Only Replicas.\n\nOPTIMIZE TABLE is also supported for partitioned tables. You can use ALTER\nTABLE ... OPTIMIZE PARTITION to optimize one or more partitions.\n\nYou can use OPTIMIZE TABLE to reclaim the unused space and to defragment the\ndata file. With other storage engines, OPTIMIZE TABLE does nothing by default,\nand returns this message: \" The storage engine for the table doesn\'t support\noptimize\". However, if the server has been started with the --skip-new option,\nOPTIMIZE TABLE is linked to ALTER TABLE, and recreates the table. This\noperation frees the unused space and updates index statistics.\n\nThe Aria storage engine supports progress reporting for this statement.\n\nIf a MyISAM table is fragmented, concurrent inserts will not be performed\nuntil an OPTIMIZE TABLE statement is executed on that table, unless the\nconcurrent_insert server system variable is set to ALWAYS.\n\nUpdating an InnoDB fulltext index\n---------------------------------\n\nWhen rows are added or deleted to an InnoDB fulltext index, the index is not\nimmediately re-organized, as this can be an expensive operation. Change\nstatistics are stored in a separate location . The fulltext index is only\nfully re-organized when an OPTIMIZE TABLE statement is run.\n\nBy default, an OPTIMIZE TABLE will defragment a table. In order to use it to\nupdate fulltext index statistics, the innodb_optimize_fulltext_only system\nvariable must be set to 1. This is intended to be a temporary setting, and\nshould be reset to 0 once the fulltext index has been re-organized.\n\nSince fulltext re-organization can take a long time, the\ninnodb_ft_num_word_optimize variable limits the re-organization to a number of\nwords (2000 by default). You can run multiple OPTIMIZE statements to fully\nre-organize the index.\n\nDefragmenting InnoDB tablespaces\n--------------------------------\n\nMariaDB 10.1.1 merged the Facebook/Kakao defragmentation patch, allowing one\nto use OPTIMIZE TABLE to defragment InnoDB tablespaces. For this functionality\nto be enabled, the innodb_defragment system variable must be enabled. No new\ntables are created and there is no need to copy data from old tables to new\ntables. Instead, this feature loads n pages (determined by\ninnodb-defragment-n-pages) and tries to move records so that pages would be\nfull of records and then frees pages that are fully empty after the operation.\nNote that tablespace files (including ibdata1) will not shrink as the result\nof defragmentation, but one will get better memory utilization in the InnoDB\nbuffer pool as there are fewer data pages in use.\n\nSee Defragmenting InnoDB Tablespaces for more details.\n\nURL: https://mariadb.com/kb/en/optimize-table/','','https://mariadb.com/kb/en/optimize-table/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (250,21,'REPAIR TABLE','Syntax\n------\n\nREPAIR [NO_WRITE_TO_BINLOG | LOCAL] TABLE\n tbl_name [, tbl_name] ...\n [QUICK] [EXTENDED] [USE_FRM]\n\nDescription\n-----------\n\nREPAIR TABLE repairs a possibly corrupted table. By default, it has the same\neffect as\n\nmyisamchk --recover tbl_name\n\nor\n\naria_chk --recover tbl_name\n\nSee aria_chk and myisamchk for more.\n\nREPAIR TABLE works for Archive, Aria, CSV and MyISAM tables. For InnoDB, see\nrecovery modes. For CSV, see also Checking and Repairing CSV Tables. For\nArchive, this statement also improves compression. If the storage engine does\nnot support this statement, a warning is issued.\n\nThis statement requires SELECT and INSERT privileges for the table.\n\nBy default, REPAIR TABLE statements are written to the binary log and will be\nreplicated. The NO_WRITE_TO_BINLOG keyword (LOCAL is an alias) will ensure the\nstatement is not written to the binary log.\n\nFrom MariaDB 10.3.19, REPAIR TABLE statements are not logged to the binary log\nif read_only is set. See also Read-Only Replicas.\n\nWhen an index is recreated, the storage engine may use a configurable buffer\nin the process. Incrementing the buffer speeds up the index creation. Aria and\nMyISAM allocate a buffer whose size is defined by aria_sort_buffer_size or\nmyisam_sort_buffer_size, also used for ALTER TABLE.\n\nREPAIR TABLE is also supported for partitioned tables. However, the USE_FRM\noption cannot be used with this statement on a partitioned table.\n\nALTER TABLE ... REPAIR PARTITION can be used to repair one or more partitions.\n\nThe Aria storage engine supports progress reporting for this statement.\n\nURL: https://mariadb.com/kb/en/repair-table/','','https://mariadb.com/kb/en/repair-table/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (251,21,'REPAIR VIEW','Syntax\n------\n\nREPAIR [NO_WRITE_TO_BINLOG | LOCAL] VIEW view_name[, view_name] ... [FROM\nMYSQL]\n\nDescription\n-----------\n\nThe REPAIR VIEW statement was introduced to assist with fixing MDEV-6916, an\nissue introduced in MariaDB 5.2 where the view algorithms were swapped\ncompared to their MySQL on disk representation. It checks whether the view\nalgorithm is correct. It is run as part of mysql_upgrade, and should not\nnormally be required in regular use.\n\nBy default it corrects the checksum and if necessary adds the mariadb-version\nfield. If the optional FROM MYSQL clause is used, and no mariadb-version field\nis present, the MERGE and TEMPTABLE algorithms are toggled.\n\nBy default, REPAIR VIEW statements are written to the binary log and will be\nreplicated. The NO_WRITE_TO_BINLOG keyword (LOCAL is an alias) will ensure the\nstatement is not written to the binary log.\n\nURL: https://mariadb.com/kb/en/repair-view/','','https://mariadb.com/kb/en/repair-view/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (252,22,'mysql.func Table','The mysql.func table stores information about user-defined functions (UDFs)\ncreated with the CREATE FUNCTION UDF statement.\n\nMariaDB starting with 10.4\n--------------------------\nIn MariaDB 10.4 and later, this table uses the Aria storage engine.\n\nMariaDB until 10.3\n------------------\nIn MariaDB 10.3 and before, this table uses the MyISAM storage engine.\n\nThe mysql.func table contains the following fields:\n\n+----------+---------+---------+-------+--------------+---------------------+\n| Field | Type | Null | Key | Default | Description |\n+----------+---------+---------+-------+--------------+---------------------+\n| name | char(64 | NO | PRI | | UDF name |\n| | | | | | |\n+----------+---------+---------+-------+--------------+---------------------+\n| ret | tinyint | NO | | 0 | |\n| | 1) | | | | |\n+----------+---------+---------+-------+--------------+---------------------+\n| dl | char(12 | NO | | | Shared library name |\n| | ) | | | | |\n+----------+---------+---------+-------+--------------+---------------------+\n| type | enum(\'f | NO | | NULL | Type, either |\n| | nction\' | | | | function or |\n| | \'aggreg | | | | aggregate. |\n| | te\') | | | | Aggregate |\n| | | | | | functions are |\n| | | | | | summary functions |\n| | | | | | such as SUM() and |\n| | | | | | AVG(). |\n+----------+---------+---------+-------+--------------+---------------------+\n\nExample\n-------\n\nSELECT * FROM mysql.func;\n+------------------------------+-----+--------------+-----------+\n| name | ret | dl | type |\n+------------------------------+-----+--------------+-----------+\n| spider_direct_sql | 2 | ha_spider.so | function |\n| spider_bg_direct_sql | 2 | ha_spider.so | aggregate |\n| spider_ping_table | 2 | ha_spider.so | function |\n| spider_copy_tables | 2 | ha_spider.so | function |\n| spider_flush_table_mon_cache | 2 | ha_spider.so | function |\n+------------------------------+-----+--------------+-----------+\n\nURL: https://mariadb.com/kb/en/mysqlfunc-table/','','https://mariadb.com/kb/en/mysqlfunc-table/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (253,22,'CREATE FUNCTION UDF','Syntax\n------\n\nCREATE [OR REPLACE] [AGGREGATE] FUNCTION [IF NOT EXISTS] function_name\n RETURNS {STRING|INTEGER|REAL|DECIMAL}\n SONAME shared_library_name\n\nDescription\n-----------\n\nA user-defined function (UDF) is a way to extend MariaDB with a new function\nthat works like a native (built-in) MariaDB function such as ABS() or CONCAT().\n\nfunction_name is the name that should be used in SQL statements to invoke the\nfunction.\n\nTo create a function, you must have the INSERT privilege for the mysql\ndatabase. This is necessary becauseCREATE FUNCTION adds a row to the\nmysql.func system table that records the function\'s name, type, and shared\nlibrary name. If you do not have this table, you should run the mysql_upgrade\ncommand to create it.\n\nUDFs need to be written in C, C++ or another language that uses C calling\nconventions, MariaDB needs to have been dynamically compiled, and your\noperating system must support dynamic loading.\n\nFor an example, see sql/udf_example.cc in the source tree. For a collection of\nexisting UDFs see http://www.mysqludf.org/.\n\nStatements making use of user-defined functions are not safe for replication.\n\nFor creating a stored function as opposed to a user-defined function, see\nCREATE FUNCTION.\n\nFor valid identifiers to use as function names, see Identifier Names.\n\nRETURNS\n-------\n\nThe RETURNS clause indicates the type of the function\'s return value, and can\nbe one of STRING, INTEGER, REAL or DECIMAL. DECIMAL functions currently return\nstring values and should be written like STRING functions.\n\nshared_library_name\n-------------------\n\nshared_library_name is the basename of the shared object file that contains\nthe code that implements the function. The file must be located in the plugin\ndirectory. This directory is given by the value of the plugin_dir system\nvariable. Note that before MariaDB/MySQL 5.1, the shared object could be\nlocated in any directory that was searched by your system\'s dynamic linker.\n\nAGGREGATE\n---------\n\nAggregate functions are summary functions such as SUM() and AVG().\n\nMariaDB starting with 10.4\n--------------------------\nAggregate UDF functions can be used as window functions.\n\nOR REPLACE\n----------\n\nMariaDB starting with 10.1.3\n----------------------------\nThe OR REPLACE clause was added in MariaDB 10.1.3\n\nIf the optional OR REPLACE clause is used, it acts as a shortcut for:\n\nDROP FUNCTION IF EXISTS function_name;\nCREATE FUNCTION name ...;\n\nIF NOT EXISTS\n-------------\n\nMariaDB starting with 10.1.3\n----------------------------\nThe IF NOT EXISTS clause was added in MariaDB 10.1.3\n\nWhen the IF NOT EXISTS clause is used, MariaDB will return a warning instead\nof an error if the specified function already exists. Cannot be used together\nwith OR REPLACE.\n\nUpgrading a UDF\n---------------\n\nTo upgrade the UDF\'s shared library, first run a DROP FUNCTION statement, then\nupgrade the shared library and finally run the CREATE FUNCTION statement. If\nyou upgrade without following this process, you may crash the server.\n\nExamples\n--------\n\nCREATE FUNCTION jsoncontains_path RETURNS integer SONAME \'ha_connect.so\';\nQuery OK, 0 rows affected (0.00 sec)\n\nOR REPLACE and IF NOT EXISTS:\n\nCREATE FUNCTION jsoncontains_path RETURNS integer SONAME \'ha_connect.so\';\nERROR 1125 (HY000): Function \'jsoncontains_path\' already exists\n\nCREATE OR REPLACE FUNCTION jsoncontains_path RETURNS integer SONAME\n\'ha_connect.so\';\nQuery OK, 0 rows affected (0.00 sec)\n\nCREATE FUNCTION IF NOT EXISTS jsoncontains_path RETURNS integer SONAME\n\'ha_connect.so\';\nQuery OK, 0 rows affected, 1 warning (0.00 sec)\n\nSHOW WARNINGS;\n+-------+------+---------------------------------------------+\n| Level | Code | Message |\n+-------+------+---------------------------------------------+\n| Note | 1125 | Function \'jsoncontains_path\' already exists |\n+-------+------+---------------------------------------------+\n\nURL: https://mariadb.com/kb/en/create-function-udf/','','https://mariadb.com/kb/en/create-function-udf/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (254,22,'DROP FUNCTION UDF','Syntax\n------\n\nDROP FUNCTION [IF EXISTS] function_name\n\nDescription\n-----------\n\nThis statement drops the user-defined function (UDF) named function_name.\n\nTo drop a function, you must have the DELETE privilege for the mysql database.\nThis is because DROP FUNCTION removes the row from the mysql.func system table\nthat records the function\'s name, type and shared library name.\n\nFor dropping a stored function, see DROP FUNCTION.\n\nUpgrading a UDF\n---------------\n\nTo upgrade the UDF\'s shared library, first run a DROP FUNCTION statement, then\nupgrade the shared library and finally run the CREATE FUNCTION statement. If\nyou upgrade without following this process, you may crash the server.\n\nExamples\n--------\n\nDROP FUNCTION jsoncontains_path;\n\nIF EXISTS:\n\nDROP FUNCTION jsoncontains_path;\nERROR 1305 (42000): FUNCTION test.jsoncontains_path does not exist\n\nDROP FUNCTION IF EXISTS jsoncontains_path;\nQuery OK, 0 rows affected, 1 warning (0.00 sec)\n\nSHOW WARNINGS;\n+-------+------+------------------------------------------------+\n| Level | Code | Message |\n+-------+------+------------------------------------------------+\n| Note | 1305 | FUNCTION test.jsoncontains_path does not exist |\n+-------+------+------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/drop-function-udf/','','https://mariadb.com/kb/en/drop-function-udf/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (255,22,'Creating User-Defined Functions','User-defined functions allow MariaDB to be extended with a new function that\nworks like a native (built-in) MariaDB function such as ABS() or CONCAT().\nThere are alternative ways to add a new function: writing a native function\n(which requires modifying and compiling the server source code), or writing a\nstored function.\n\nStatements making use of user-defined functions are not safe for replication.\n\nFunctions are written in C or C++, and to make use of them, the operating\nsystem must support dynamic loading.\n\nEach new SQL function requires corresponding functions written in C/C++. In\nthe list below, at least the main function - x() - and one other, are\nrequired. x should be replaced by the name of the function you are creating.\n\nAll functions need to be thread-safe, so not global or static variables that\nchange can be allocated. Memory is allocated in x_init()/ and freed in\nx_deinit().\n\nSimple Functions\n----------------\n\nx()\n---\n\nRequired for all UDFs; this is where the results are calculated.\n\n+------------------------------------------+----------------------------------+\n| C/C++ type | SQL type |\n+------------------------------------------+----------------------------------+\n| char * | STRING |\n+------------------------------------------+----------------------------------+\n| long long | INTEGER |\n+------------------------------------------+----------------------------------+\n| double | REAL |\n+------------------------------------------+----------------------------------+\n\nDECIMAL functions return string values, and so should be written accordingly.\nIt is not possible to create ROW functions.\n\nx_init()\n--------\n\nInitialization function for x(). Can be used for the following:\n\n* Check the number of arguments to X() (the SQL equivalent).\n* Verify the argument types, or to force arguments to be of a particular type\nafter the function is called.\n* Specify whether the result can be NULL.\n* Specify the maximum result length.\n* For REAL functions, specify the maximum number of decimals for the result.\n* Allocate any required memory.\n\nx_deinit()\n----------\n\nDe-initialization function for x(). Used to de-allocate memory that was\nallocated in x_init().\n\nDescription\n-----------\n\nEach time the SQL function X() is called:\n\n* MariaDB will first call the C/C++ initialization function, x_init(),\nassuming it exists. All setup will be performed, and if it returns an error,\nthe SQL statement is aborted and no further functions are called.\n* If there is no x_init() function, or it has been called and did not return\nan error, x() is then called once per row.\n* After all rows have finished processing, x_deinit() is called, if present,\nto clean up by de-allocating any memory that was allocated in x_init().\n* See User-defined Functions Calling Sequences for more details on the\nfunctions.\n\nAggregate Functions\n-------------------\n\nThe following functions are required for aggregate functions, such as AVG()\nand SUM(). When using CREATE FUNCTION, the AGGREGATE keyword is required.\n\nx_clear()\n---------\n\nUsed to reset the current aggregate, but without inserting the argument as the\ninitial aggregate value for the new group.\n\nx_add()\n-------\n\nUsed to add the argument to the current aggregate.\n\nx_remove()\n----------\n\nStarting from MariaDB 10.4, improves the support of window functions (so it is\nnot obligatory to add it) and should remove the argument from the current\naggregate.\n\nDescription\n-----------\n\nEach time the aggregate SQL function X() is called:\n\n* MariaDB will first call the C/C++ initialization function, x_init(),\nassuming it exists. All setup will be performed, and if it returns an error,\nthe SQL statement is aborted and no further functions are called.\n* If there is no x_init() function, or it has been called and did not return\nan error, x() is then called once per row.\n* After all rows have finished processing, x_deinit() is called, if present,\nto clean up by de-allocating any memory that was allocated in x_init().\n\n* MariaDB will first call the C/C++ initialization function, x_init(),\nassuming it exists. All setup will be performed, and if it returns an error,\nthe SQL statement is aborted and no further functions are called.\n* The table is sorted according to the GROUP BY expression.\n* x_clear() is called for the first row of each new group.\n* x_add() is called once per row for each row in the same group.\n* x() is called when the group changes, or after the last row, to get the\naggregate result. \n* The latter three steps are repeated until all rows have been processed.\n* After all rows have finished processing, x_deinit() is called, if present,\nto clean up by de-allocating any memory that was allocated in x_init().\n\nExamples\n--------\n\nFor an example, see sql/udf_example.cc in the source tree. For a collection of\nexisting UDFs see https://github.com/mysqludf.\n\nURL: https://mariadb.com/kb/en/creating-user-defined-functions/','','https://mariadb.com/kb/en/creating-user-defined-functions/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (256,22,'User-Defined Functions Calling Sequences','The functions described in Creating User-defined Functions are expanded on\nthis page. They are declared as follows:\n\nSimple Functions\n----------------\n\nx()\n---\n\nIf x() returns an integer, it is declared as follows:\n\nlong long x(UDF_INIT *initid, UDF_ARGS *args,\n char *is_null, char *error);\n\nIf x() returns a string (DECIMAL functions also return string values), it is\ndeclared as follows:\n\nchar *x(UDF_INIT *initid, UDF_ARGS *args,\n char *result, unsigned long *length,\n char *is_null, char *error);\n\nIf x() returns a real, it is declared as follows:\n\ndouble x(UDF_INIT *initid, UDF_ARGS *args,\n char *is_null, char *error);\n\nx_init()\n--------\n\nmy_bool x_init(UDF_INIT *initid, UDF_ARGS *args, char *message);\n\nx_deinit()\n----------\n\nvoid x_deinit(UDF_INIT *initid);\n\nDescription\n-----------\n\ninitid is a parameter passed to all three functions that points to a UDF_INIT\nstructure, used for communicating information between the functions. Its\nstructure members are:\n\n* my_bool maybe_null\nmaybe_null should be set to 1 if x_init can return a NULL value, Defaults to 1\nif any arguments are declared maybe_null.\n\n* unsigned int decimals\nNumber of decimals after the decimal point. The default, if an explicit number\nof decimals is passed in the arguments to the main function, is the maximum\nnumber of decimals, so if 9.5, 9.55 and 9.555 are passed to the function, the\ndefault would be three (based on 9.555, the maximum). If there are no\nexplicit number of decimals, the default is set to 31, or one more than the\nmaximum for the DOUBLE, FLOAT and DECIMAL types. This default can be changed\nin the function to suit the actual calculation.\n\n* unsigned int max_length\nMaximum length of the result. For integers, the default is 21. For strings,\nthe length of the longest argument. For reals, the default is 13 plus the\nnumber of decimals indicated by initid->decimals. The length includes any\nsigns or decimal points. Can also be set to 65KB or 16MB in order to return a\nBLOB. The memory remains unallocated, but this is used to decide on the data\ntype to use if the data needs to be temporarily stored.\n\n* char *ptr\nA pointer for use as required by the function. Commonly, initid->ptr is used\nto communicate allocated memory, with x_init() allocating the memory and\nassigning it to this pointer, x() using it, and x_deinit() de-allocating it.\n\n* my_bool const_item\nShould be set to 1 in x_init() if x() always returns the same value, otherwise\n0.\n\nAggregate Functions\n-------------------\n\nx_clear()\n---------\n\nx_clear() is a required function for aggregate functions, and is declared as\nfollows:\n\nvoid x_clear(UDF_INIT *initid, char *is_null, char *error);\n\nIt is called when the summary results need to be reset, that is at the\nbeginning of each new group. but also to reset the values when there were no\nmatching rows.\n\nis_null is set to point to CHAR(0) before calling x_clear().\n\nIn the case of an error, you can store the value to which the error argument\npoints (a single-byte variable, not a string string buffer) in the variable.\n\nx_reset()\n---------\n\nx_reset() is declared as follows:\n\nvoid x_reset(UDF_INIT *initid, UDF_ARGS *args,\n char *is_null, char *error);\n\nIt is called on finding the first row in a new group. Should reset the summary\nvariables, and then use UDF_ARGS as the first value in the group\'s internal\nsummary value. The function is not required if the UDF interface uses\nx_clear().\n\nx_add()\n-------\n\nx_add() is declared as follows:\n\nvoid x_add(UDF_INIT *initid, UDF_ARGS *args,\n char *is_null, char *error);\n\nIt is called for all rows belonging to the same group, and should be used to\nadd the value in UDF_ARGS to the internal summary variable.\n\nx_remove()\n----------\n\nx_remove() was added in MariaDB 10.4 and is declared as follows (same as\nx_add()):\n\nvoid x_remove(UDF_INIT* initid, UDF_ARGS* args,\n char* is_null, char *error );\n\nIt adds more efficient support of aggregate UDFs as window functions.\nx_remove() should \"subtract\" the row (reverse x_add()). In MariaDB 10.4\naggregate UDFs will work as WINDOW functions without x_remove() but it will\nnot be so efficient.\n\nIf x_remove() supported (defined) detected automatically.\n\nURL: https://mariadb.com/kb/en/user-defined-functions-calling-sequences/','','https://mariadb.com/kb/en/user-defined-functions-calling-sequences/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (257,22,'User-Defined Functions Security','The MariaDB server imposes a number of limitations on user-defined functions\nfor security purposes.\n\n* The INSERT privilege for the mysql database is required to run CREATE\nFUNCTION, as a record will be added to the mysql.func-table.\n* The DELETE privilege for the mysql database is required to run DROP FUNCTION\nas the corresponding record will be removed from the mysql.func-table.\n* UDF object files can only be placed in the plugin directory, as specified by\nthe value of the plugin_dir system variable.\n* At least one symbol, beyond the required x() - corresponding to an SQL\nfunction X()) - is required. These can be x_init(), x_deinit(), xxx_reset(),\nx_clear() and x_add() functions (see Creating User-defined Functions). The\nallow-suspicious-udfs mysqld option (by default unset) provides a workaround,\npermitting only one symbol to be used. This is not recommended, as it opens\nthe possibility of loading shared objects that are not legitimate user-defined\nfunctions.\n\nURL: https://mariadb.com/kb/en/user-defined-functions-security/','','https://mariadb.com/kb/en/user-defined-functions-security/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (258,23,'Numeric Data Type Overview','There are a number of numeric data types:\n\n* TINYINT\n* BOOLEAN - Synonym for TINYINT(1)\n* INT1 - Synonym for TINYINT\n* SMALLINT\n* INT2 - Synonym for SMALLINT\n* MEDIUMINT\n* INT3 - Synonym for MEDIUMINT\n* INT, INTEGER\n* INT4 - Synonym for INT\n* BIGINT\n* INT8 - Synonym for BIGINT\n* DECIMAL, DEC, NUMERIC, FIXED\n* FLOAT\n* DOUBLE, DOUBLE PRECISION, REAL\n* BIT\n\nSee the specific articles for detailed information on each.\n\nSIGNED, UNSIGNED and ZEROFILL\n-----------------------------\n\nMost numeric types can be defined as SIGNED, UNSIGNED or ZEROFILL, for example:\n\nTINYINT[(M)] [SIGNED | UNSIGNED | ZEROFILL]\n\nIf SIGNED, or no attribute, is specified, a portion of the numeric type will\nbe reserved for the sign (plus or minus). For example, a TINYINT SIGNED can\nrange from -128 to 127.\n\nIf UNSIGNED is specified, no portion of the numeric type is reserved for the\nsign, so for integer types range can be larger. For example, a TINYINT\nUNSIGNED can range from 0 to 255. Floating point and fixed-point types also\ncan be UNSIGNED, but this only prevents negative values from being stored and\ndoesn\'t alter the range.\n\nIf ZEROFILL is specified, the column will be set to UNSIGNED and the spaces\nused by default to pad the field are replaced with zeros. ZEROFILL is ignored\nin expressions or as part of a UNION. ZEROFILL is a non-standard MySQL and\nMariaDB enhancement.\n\nNote that although the preferred syntax indicates that the attributes are\nexclusive, more than one attribute can be specified.\n\nUntil MariaDB 10.2.7 (MDEV-8659), any combination of the attributes could be\nused in any order, with duplicates. In this case:\n\n* the presence of ZEROFILL makes the column UNSIGNED ZEROFILL.\n* the presence of UNSIGNED makes the column UNSIGNED.\n\nFrom MariaDB 10.2.8, only the following combinations are supported:\n\n* SIGNED\n* UNSIGNED\n* ZEROFILL\n* UNSIGNED ZEROFILL\n* ZEROFILL UNSIGNED\n\nThe latter two should be replaced with simply ZEROFILL, but are still accepted\nby the parser.\n\nExamples\n--------\n\nCREATE TABLE zf (\n i1 TINYINT SIGNED,\n i2 TINYINT UNSIGNED,\n i3 TINYINT ZEROFILL\n);\n\nINSERT INTO zf VALUES (2,2,2);\n\nSELECT * FROM zf;\n+------+------+------+\n| i1 | i2 | i3 |\n+------+------+------+\n| 2 | 2 | 002 |\n+------+------+------+\n\nRange\n-----\n\nWhen attempting to add a value that is out of the valid range for the numeric\ntype, MariaDB will react depending on the strict SQL_MODE setting.\n\nIf strict_mode has been set (the default from MariaDB 10.2.4), MariaDB will\nreturn an error.\n\nIf strict_mode has not been set (the default until MariaDB 10.2.3), MariaDB\nwill adjust the number to fit in the field, returning a warning.\n\nExamples\n--------\n\nWith strict_mode set:\n\nSHOW VARIABLES LIKE \'sql_mode\';\n+---------------+--------------------------------------------------------------\n----------------------------+\n| Variable_name | Value \n |\n+---------------+--------------------------------------------------------------\n----------------------------+\n| sql_mode |\nSTRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SU\nSTITUTION |\n+---------------+--------------------------------------------------------------\n----------------------------+\n\nCREATE TABLE ranges (i1 TINYINT, i2 SMALLINT, i3 TINYINT UNSIGNED);\n\nINSERT INTO ranges VALUES (257,257,257);\nERROR 1264 (22003): Out of range value for column \'i1\' at row 1\n\nSELECT * FROM ranges;\nEmpty set (0.10 sec)\n\nWith strict_mode unset:\n\nSHOW VARIABLES LIKE \'sql_mode%\';\n+---------------+-------+\n| Variable_name | Value |\n+---------------+-------+\n| sql_mode | |\n+---------------+-------+\n\nCREATE TABLE ranges (i1 TINYINT, i2 SMALLINT, i3 TINYINT UNSIGNED);\n\nINSERT INTO ranges VALUES (257,257,257);\nQuery OK, 1 row affected, 2 warnings (0.00 sec)\n\nSHOW WARNINGS;\n+---------+------+---------------------------------------------+\n| Level | Code | Message |\n+---------+------+---------------------------------------------+\n| Warning | 1264 | Out of range value for column \'i1\' at row 1 |\n| Warning | 1264 | Out of range value for column \'i3\' at row 1 |\n+---------+------+---------------------------------------------+\n2 rows in set (0.00 sec)\n\nSELECT * FROM ranges;\n+------+------+------+\n| i1 | i2 | i3 |\n+------+------+------+\n| 127 | 257 | 255 |\n+------+------+------+\n\nAuto_increment\n--------------\n\nThe AUTO_INCREMENT attribute can be used to generate a unique identity for new\nrows. For more details, see auto_increment.\n\nURL: https://mariadb.com/kb/en/numeric-data-type-overview/','','https://mariadb.com/kb/en/numeric-data-type-overview/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (259,23,'TINYINT','Syntax\n------\n\nTINYINT[(M)] [SIGNED | UNSIGNED | ZEROFILL]\n\nDescription\n-----------\n\nA very small integer. The signed range is -128 to 127. The unsigned range is 0\nto 255. For details on the attributes, see Numeric Data Type Overview.\n\nINT1 is a synonym for TINYINT. BOOL and BOOLEAN are synonyms for TINYINT(1).\n\nExamples\n--------\n\nCREATE TABLE tinyints (a TINYINT,b TINYINT UNSIGNED,c TINYINT ZEROFILL);\n\nWith strict_mode set, the default from MariaDB 10.2.4:\n\nINSERT INTO tinyints VALUES (-10,-10,-10);\nERROR 1264 (22003): Out of range value for column \'b\' at row 1\n\nINSERT INTO tinyints VALUES (-10,10,-10);\nERROR 1264 (22003): Out of range value for column \'c\' at row 1\n\nINSERT INTO tinyints VALUES (-10,10,10);\n\nSELECT * FROM tinyints;\n+------+------+------+\n| a | b | c |\n+------+------+------+\n| -10 | 10 | 010 |\n+------+------+------+\n\nINSERT INTO tinyints VALUES (128,128,128);\nERROR 1264 (22003): Out of range value for column \'a\' at row 1\n\nINSERT INTO tinyints VALUES (127,128,128);\n\nSELECT * FROM tinyints;\n+------+------+------+\n| a | b | c |\n+------+------+------+\n| -10 | 10 | 010 |\n| 127 | 128 | 128 |\n+------+------+------+\n\nWith strict_mode unset, the default until MariaDB 10.2.3:\n\nINSERT INTO tinyints VALUES (-10,-10,-10);\nQuery OK, 1 row affected, 2 warnings (0.08 sec)\nWarning (Code 1264): Out of range value for column \'b\' at row 1\nWarning (Code 1264): Out of range value for column \'c\' at row 1\n\nINSERT INTO tinyints VALUES (-10,10,-10);\nQuery OK, 1 row affected, 1 warning (0.11 sec)\nWarning (Code 1264): Out of range value for column \'c\' at row 1\n\nINSERT INTO tinyints VALUES (-10,10,10);\n\nSELECT * FROM tinyints;\n+------+------+------+\n| a | b | c |\n+------+------+------+\n| -10 | 0 | 000 |\n| -10 | 10 | 000 |\n| -10 | 10 | 010 |\n+------+------+------+\n\nINSERT INTO tinyints VALUES (128,128,128);\nQuery OK, 1 row affected, 1 warning (0.19 sec)\nWarning (Code 1264): Out of range value for column \'a\' at row 1\n\nINSERT INTO tinyints VALUES (127,128,128);\n\nSELECT * FROM tinyints;\n+------+------+------+\n| a | b | c |\n+------+------+------+\n| -10 | 0 | 000 |\n| -10 | 10 | 000 |\n| -10 | 10 | 010 |\n| 127 | 128 | 128 |\n| 127 | 128 | 128 |\n+------+------+------+\n\nURL: https://mariadb.com/kb/en/tinyint/','','https://mariadb.com/kb/en/tinyint/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (260,23,'BOOLEAN','Syntax\n------\n\nBOOL, BOOLEAN\n\nDescription\n-----------\n\nThese types are synonyms for TINYINT(1). A value of zero is considered false.\nNon-zero values are considered true.\n\nHowever, the values TRUE and FALSE are merely aliases for 1 and 0. See Boolean\nLiterals, as well as the IS operator for testing values against a boolean.\n\nExamples\n--------\n\nCREATE TABLE boo (i BOOLEAN);\n\nDESC boo;\n+-------+------------+------+-----+---------+-------+\n| Field | Type | Null | Key | Default | Extra |\n+-------+------------+------+-----+---------+-------+\n| i | tinyint(1) | YES | | NULL | |\n+-------+------------+------+-----+---------+-------+\n\nSELECT IF(0, \'true\', \'false\');\n+------------------------+\n| IF(0, \'true\', \'false\') |\n+------------------------+\n| false |\n+------------------------+\n\nSELECT IF(1, \'true\', \'false\');\n+------------------------+\n| IF(1, \'true\', \'false\') |\n+------------------------+\n| true |\n+------------------------+\n\nSELECT IF(2, \'true\', \'false\');\n+------------------------+\n| IF(2, \'true\', \'false\') |\n+------------------------+\n| true |\n+------------------------+\n\nTRUE and FALSE as aliases for 1 and 0:\n\nSELECT IF(0 = FALSE, \'true\', \'false\');\n\n+--------------------------------+\n| IF(0 = FALSE, \'true\', \'false\') |\n+--------------------------------+\n| true |\n+--------------------------------+\n\nSELECT IF(1 = TRUE, \'true\', \'false\');\n+-------------------------------+\n| IF(1 = TRUE, \'true\', \'false\') |\n+-------------------------------+\n| true |\n+-------------------------------+\n\nSELECT IF(2 = TRUE, \'true\', \'false\');\n+-------------------------------+\n| IF(2 = TRUE, \'true\', \'false\') |\n+-------------------------------+\n| false |\n+-------------------------------+\n\nSELECT IF(2 = FALSE, \'true\', \'false\');\n+--------------------------------+\n| IF(2 = FALSE, \'true\', \'false\') |\n+--------------------------------+\n| false |\n+--------------------------------+\n\nThe last two statements display the results shown because 2 is equal to\nneither 1 nor 0.\n\nURL: https://mariadb.com/kb/en/boolean/','','https://mariadb.com/kb/en/boolean/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (261,23,'SMALLINT','Syntax\n------\n\nSMALLINT[(M)] [SIGNED | UNSIGNED | ZEROFILL]\n\nDescription\n-----------\n\nA small integer. The signed range is -32768 to 32767. The unsigned range is 0\nto 65535.\n\nIf a column has been set to ZEROFILL, all values will be prepended by zeros so\nthat the SMALLINT value contains a number of M digits.\n\nNote: If the ZEROFILL attribute has been specified, the column will\nautomatically become UNSIGNED.\n\nINT2 is a synonym for SMALLINT.\n\nFor more details on the attributes, see Numeric Data Type Overview.\n\nExamples\n--------\n\nCREATE TABLE smallints (a SMALLINT,b SMALLINT UNSIGNED,c SMALLINT ZEROFILL);\n\nWith strict_mode set, the default from MariaDB 10.2.4:\n\nINSERT INTO smallints VALUES (-10,-10,-10);\nERROR 1264 (22003): Out of range value for column \'b\' at row 1\n\nINSERT INTO smallints VALUES (-10,10,-10);\nERROR 1264 (22003): Out of range value for column \'c\' at row 1\n\nINSERT INTO smallints VALUES (-10,10,10);\n\nINSERT INTO smallints VALUES (32768,32768,32768);\nERROR 1264 (22003): Out of range value for column \'a\' at row 1\n\nINSERT INTO smallints VALUES (32767,32768,32768);\n\nSELECT * FROM smallints;\n+-------+-------+-------+\n| a | b | c |\n+-------+-------+-------+\n| -10 | 10 | 00010 |\n| 32767 | 32768 | 32768 |\n+-------+-------+-------+\n\nWith strict_mode unset, the default until MariaDB 10.2.3:\n\nINSERT INTO smallints VALUES (-10,-10,-10);\nQuery OK, 1 row affected, 2 warnings (0.09 sec)\nWarning (Code 1264): Out of range value for column \'b\' at row 1\nWarning (Code 1264): Out of range value for column \'c\' at row 1\n\nINSERT INTO smallints VALUES (-10,10,-10);\nQuery OK, 1 row affected, 1 warning (0.08 sec)\nWarning (Code 1264): Out of range value for column \'c\' at row 1\n\nINSERT INTO smallints VALUES (-10,10,10);\n\nINSERT INTO smallints VALUES (32768,32768,32768);\nQuery OK, 1 row affected, 1 warning (0.04 sec)\nWarning (Code 1264): Out of range value for column \'a\' at row 1\n\nINSERT INTO smallints VALUES (32767,32768,32768);\n\nSELECT * FROM smallints;\n+-------+-------+-------+\n| a | b | c |\n+-------+-------+-------+\n| -10 | 0 | 00000 |\n| -10 | 10 | 00000 |\n| -10 | 10 | 00010 |\n| 32767 | 32768 | 32768 |\n| 32767 | 32768 | 32768 |\n+-------+-------+-------+\n\nURL: https://mariadb.com/kb/en/smallint/','','https://mariadb.com/kb/en/smallint/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (262,23,'MEDIUMINT','Syntax\n------\n\nMEDIUMINT[(M)] [SIGNED | UNSIGNED | ZEROFILL]\n\nDescription\n-----------\n\nA medium-sized integer. The signed range is -8388608 to 8388607. The unsigned\nrange is 0 to 16777215.\n\nZEROFILL pads the integer with zeroes and assumes UNSIGNED (even if UNSIGNED\nis not specified).\n\nINT3 is a synonym for MEDIUMINT.\n\nFor details on the attributes, see Numeric Data Type Overview.\n\nExamples\n--------\n\nCREATE TABLE mediumints (a MEDIUMINT,b MEDIUMINT UNSIGNED,c MEDIUMINT\nZEROFILL);\n\nDESCRIBE mediumints;\n+-------+--------------------------------+------+-----+---------+-------+\n| Field | Type | Null | Key | Default | Extra |\n+-------+--------------------------------+------+-----+---------+-------+\n| a | mediumint(9) | YES | | NULL | |\n| b | mediumint(8) unsigned | YES | | NULL | |\n| c | mediumint(8) unsigned zerofill | YES | | NULL | |\n+-------+--------------------------------+------+-----+---------+-------+\n\nWith strict_mode set, the default from MariaDB 10.2.4:\n\nINSERT INTO mediumints VALUES (-10,-10,-10);\nERROR 1264 (22003): Out of range value for column \'b\' at row 1\n\nINSERT INTO mediumints VALUES (-10,10,-10);\nERROR 1264 (22003): Out of range value for column \'c\' at row 1\n\nINSERT INTO mediumints VALUES (-10,10,10);\n\nINSERT INTO mediumints VALUES (8388608,8388608,8388608);\nERROR 1264 (22003): Out of range value for column \'a\' at row 1\n\nINSERT INTO mediumints VALUES (8388607,8388608,8388608);\n\nSELECT * FROM mediumints;\n+---------+---------+----------+\n| a | b | c |\n+---------+---------+----------+\n| -10 | 10 | 00000010 |\n| 8388607 | 8388608 | 08388608 |\n+---------+---------+----------+\n\nWith strict_mode unset, the default until MariaDB 10.2.3:\n\nINSERT INTO mediumints VALUES (-10,-10,-10);\nQuery OK, 1 row affected, 2 warnings (0.05 sec)\nWarning (Code 1264): Out of range value for column \'b\' at row 1\nWarning (Code 1264): Out of range value for column \'c\' at row 1\n\nINSERT INTO mediumints VALUES (-10,10,-10);\nQuery OK, 1 row affected, 1 warning (0.08 sec)\nWarning (Code 1264): Out of range value for column \'c\' at row 1\n\nINSERT INTO mediumints VALUES (-10,10,10);\n\nINSERT INTO mediumints VALUES (8388608,8388608,8388608);\nQuery OK, 1 row affected, 1 warning (0.05 sec)\nWarning (Code 1264): Out of range value for column \'a\' at row 1\n\nINSERT INTO mediumints VALUES (8388607,8388608,8388608);\n\nSELECT * FROM mediumints;\n+---------+---------+----------+\n| a | b | c |\n+---------+---------+----------+\n| -10 | 0 | 00000000 |\n| -10 | 0 | 00000000 |\n| -10 | 10 | 00000000 |\n| -10 | 10 | 00000010 |\n| 8388607 | 8388608 | 08388608 |\n| 8388607 | 8388608 | 08388608 |\n+---------+---------+----------+\n\nURL: https://mariadb.com/kb/en/mediumint/','','https://mariadb.com/kb/en/mediumint/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (263,23,'INT','Syntax\n------\n\nINT[(M)] [SIGNED | UNSIGNED | ZEROFILL]\nINTEGER[(M)] [SIGNED | UNSIGNED | ZEROFILL]\n\nDescription\n-----------\n\nA normal-size integer. When marked UNSIGNED, it ranges from 0 to 4294967295,\notherwise its range is -2147483648 to 2147483647 (SIGNED is the default). If a\ncolumn has been set to ZEROFILL, all values will be prepended by zeros so that\nthe INT value contains a number of M digits. INTEGER is a synonym for INT.\n\nNote: If the ZEROFILL attribute has been specified, the column will\nautomatically become UNSIGNED.\n\nINT4 is a synonym for INT.\n\nFor details on the attributes, see Numeric Data Type Overview.\n\nExamples\n--------\n\nCREATE TABLE ints (a INT,b INT UNSIGNED,c INT ZEROFILL);\n\nWith strict_mode set, the default from MariaDB 10.2.4:\n\nINSERT INTO ints VALUES (-10,-10,-10);\nERROR 1264 (22003): Out of range value for column \'b\' at row 1\n\nINSERT INTO ints VALUES (-10,10,-10);\nERROR 1264 (22003): Out of range value for column \'c\' at row 1\n\nINSERT INTO ints VALUES (-10,10,10);\n\nINSERT INTO ints VALUES (2147483648,2147483648,2147483648);\nERROR 1264 (22003): Out of range value for column \'a\' at row 1\n\nINSERT INTO ints VALUES (2147483647,2147483648,2147483648);\n\nSELECT * FROM ints;\n+------------+------------+------------+\n| a | b | c |\n+------------+------------+------------+\n| -10 | 10 | 0000000010 |\n| 2147483647 | 2147483648 | 2147483648 |\n+------------+------------+------------+\n\nWith strict_mode unset, the default until MariaDB 10.2.3:\n\nINSERT INTO ints VALUES (-10,-10,-10);\nQuery OK, 1 row affected, 2 warnings (0.10 sec)\nWarning (Code 1264): Out of range value for column \'b\' at row 1\nWarning (Code 1264): Out of range value for column \'c\' at row 1\n\nINSERT INTO ints VALUES (-10,10,-10);\nQuery OK, 1 row affected, 1 warning (0.08 sec)\nWarning (Code 1264): Out of range value for column \'c\' at row 1\n\nINSERT INTO ints VALUES (-10,10,10);\n\nINSERT INTO ints VALUES (2147483648,2147483648,2147483648);\nQuery OK, 1 row affected, 1 warning (0.07 sec)\nWarning (Code 1264): Out of range value for column \'a\' at row 1\n\nINSERT INTO ints VALUES (2147483647,2147483648,2147483648);\n\nSELECT * FROM ints;\n+------------+------------+------------+\n| a | b | c |\n+------------+------------+------------+\n| -10 | 0 | 0000000000 |\n| -10 | 10 | 0000000000 |\n| -10 | 10 | 0000000010 |\n| 2147483647 | 2147483648 | 2147483648 |\n| 2147483647 | 2147483648 | 2147483648 |\n+------------+------------+------------+\n\nURL: https://mariadb.com/kb/en/int/','','https://mariadb.com/kb/en/int/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (264,23,'BIGINT','Syntax\n------\n\nBIGINT[(M)] [SIGNED | UNSIGNED | ZEROFILL]\n\nDescription\n-----------\n\nA large integer. The signed range is -9223372036854775808 to\n9223372036854775807. The unsigned range is 0 to 18446744073709551615.\n\nIf a column has been set to ZEROFILL, all values will be prepended by zeros so\nthat the BIGINT value contains a number of M digits.\n\nNote: If the ZEROFILL attribute has been specified, the column will\nautomatically become UNSIGNED.\n\nFor more details on the attributes, see Numeric Data Type Overview.\n\nSERIAL is an alias for:\n\nBIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE\n\nINT8 is a synonym for BIGINT.\n\nExamples\n--------\n\nCREATE TABLE bigints (a BIGINT,b BIGINT UNSIGNED,c BIGINT ZEROFILL);\n\nWith strict_mode set, the default from MariaDB 10.2.4:\n\nINSERT INTO bigints VALUES (-10,-10,-10);\nERROR 1264 (22003): Out of range value for column \'b\' at row 1\n\nINSERT INTO bigints VALUES (-10,10,-10);\nERROR 1264 (22003): Out of range value for column \'c\' at row 1\n\nINSERT INTO bigints VALUES (-10,10,10);\n\nINSERT INTO bigints VALUES\n(9223372036854775808,9223372036854775808,9223372036854775808);\nERROR 1264 (22003): Out of range value for column \'a\' at row 1\n\nINSERT INTO bigints VALUES\n(9223372036854775807,9223372036854775808,9223372036854775808);\n\nSELECT * FROM bigints;\n+---------------------+---------------------+----------------------+\n| a | b | c |\n+---------------------+---------------------+----------------------+\n| -10 | 10 | 00000000000000000010 |\n| 9223372036854775807 | 9223372036854775808 | 09223372036854775808 |\n+---------------------+---------------------+----------------------+\n\nWith strict_mode unset, the default until MariaDB 10.2.3:\n\nINSERT INTO bigints VALUES (-10,-10,-10);\nQuery OK, 1 row affected, 2 warnings (0.08 sec)\nWarning (Code 1264): Out of range value for column \'b\' at row 1\nWarning (Code 1264): Out of range value for column \'c\' at row 1\n\nINSERT INTO bigints VALUES (-10,10,-10);\nQuery OK, 1 row affected, 1 warning (0.08 sec)\nWarning (Code 1264): Out of range value for column \'c\' at row 1\n\nINSERT INTO bigints VALUES (-10,10,10);\n\nINSERT INTO bigints VALUES\n(9223372036854775808,9223372036854775808,9223372036854775808);\nQuery OK, 1 row affected, 1 warning (0.07 sec)\nWarning (Code 1264): Out of range value for column \'a\' at row 1\n\nINSERT INTO bigints VALUES\n(9223372036854775807,9223372036854775808,9223372036854775808);\n\nSELECT * FROM bigints;\n+---------------------+---------------------+----------------------+\n| a | b | c |\n+---------------------+---------------------+----------------------+\n| -10 | 0 | 00000000000000000000 |\n| -10 | 10 | 00000000000000000000 |\n| -10 | 10 | 00000000000000000010 |\n| 9223372036854775807 | 9223372036854775808 | 09223372036854775808 |\n| 9223372036854775807 | 9223372036854775808 | 09223372036854775808 |\n+---------------------+---------------------+----------------------+\n\nURL: https://mariadb.com/kb/en/bigint/','','https://mariadb.com/kb/en/bigint/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (265,23,'DECIMAL','Syntax\n------\n\nDECIMAL[(M[,D])] [SIGNED | UNSIGNED | ZEROFILL]\n\nDescription\n-----------\n\nA packed \"exact\" fixed-point number. M is the total number of digits (the\nprecision) and D is the number of digits after the decimal point (the scale).\n\n* The decimal point and (for negative numbers) the \"-\" sign are not\ncounted in M. \n* If D is 0, values have no decimal point or fractional\npart and on INSERT the value will be rounded to the nearest DECIMAL. \n* The maximum number of digits (M) for DECIMAL is 65. \n* The maximum number of supported decimals (D) is 30 before MariadB 10.2.1 and\n38 afterwards. \n* If D is omitted, the default is 0. If M is omitted, the default is 10.\n\nUNSIGNED, if specified, disallows negative values.\n\nZEROFILL, if specified, pads the number with zeros, up to the total number of\ndigits specified by M.\n\nAll basic calculations (+, -, *, /) with DECIMAL columns are done with a\nprecision of 65 digits.\n\nFor more details on the attributes, see Numeric Data Type Overview.\n\nDEC, NUMERIC and FIXED are synonyms, as well as NUMBER in Oracle mode from\nMariaDB 10.3.\n\nExamples\n--------\n\nCREATE TABLE t1 (d DECIMAL UNSIGNED ZEROFILL);\n\nINSERT INTO t1 VALUES (1),(2),(3),(4.0),(5.2),(5.7);\nQuery OK, 6 rows affected, 2 warnings (0.16 sec)\nRecords: 6 Duplicates: 0 Warnings: 2\n\nNote (Code 1265): Data truncated for column \'d\' at row 5\nNote (Code 1265): Data truncated for column \'d\' at row 6\n\nSELECT * FROM t1;\n+------------+\n| d |\n+------------+\n| 0000000001 |\n| 0000000002 |\n| 0000000003 |\n| 0000000004 |\n| 0000000005 |\n| 0000000006 |\n+------------+\n\nWith strict_mode set, the default from MariaDB 10.2.4:\n\nINSERT INTO t1 VALUES (-7);\nERROR 1264 (22003): Out of range value for column \'d\' at row 1\n\nWith strict_mode unset, the default until MariaDB 10.2.3:\n\nINSERT INTO t1 VALUES (-7);\nQuery OK, 1 row affected, 1 warning (0.02 sec)\nWarning (Code 1264): Out of range value for column \'d\' at row 1\n\nSELECT * FROM t1;\n+------------+\n| d |\n+------------+\n| 0000000001 |\n| 0000000002 |\n| 0000000003 |\n| 0000000004 |\n| 0000000005 |\n| 0000000006 |\n| 0000000000 |\n+------------+\n\nURL: https://mariadb.com/kb/en/decimal/','','https://mariadb.com/kb/en/decimal/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (266,23,'FLOAT','Syntax\n------\n\nFLOAT[(M,D)] [SIGNED | UNSIGNED | ZEROFILL]\n\nDescription\n-----------\n\nA small (single-precision) floating-point number (see DOUBLE for a\nregular-size floating point number). Allowable values are:\n\n* -3.402823466E+38 to -1.175494351E-38\n* 0\n* 1.175494351E-38 to 3.402823466E+38.\n\nThese are the theoretical limits, based on the IEEE standard. The actual range\nmight be slightly smaller depending on your hardware or operating system.\n\nM is the total number of digits and D is the number of digits following the\ndecimal point. If M and D are omitted, values are stored to the limits allowed\nby the hardware. A single-precision floating-point number is accurate to\napproximately 7 decimal places.\n\nUNSIGNED, if specified, disallows negative values.\n\nUsing FLOAT might give you some unexpected problems because all calculations\nin MariaDB are done with double precision. See Floating Point Accuracy.\n\nFor more details on the attributes, see Numeric Data Type Overview.\n\nURL: https://mariadb.com/kb/en/float/','','https://mariadb.com/kb/en/float/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (267,23,'DOUBLE','Syntax\n------\n\nDOUBLE[(M,D)] [SIGNED | UNSIGNED | ZEROFILL]\nDOUBLE PRECISION[(M,D)] [SIGNED | UNSIGNED | ZEROFILL]\nREAL[(M,D)] [SIGNED | UNSIGNED | ZEROFILL]\n\nDescription\n-----------\n\nA normal-size (double-precision) floating-point number (see FLOAT for a\nsingle-precision floating-point number).\n\nAllowable values are:\n\n* -1.7976931348623157E+308 to -2.2250738585072014E-308\n* 0\n* 2.2250738585072014E-308 to 1.7976931348623157E+308\n\nThese are the theoretical limits, based on the IEEE standard. The actual range\nmight be slightly smaller depending on your hardware or operating system.\n\nM is the total number of digits and D is the number of digits following the\ndecimal point. If M and D are omitted, values are stored to the limits allowed\nby the hardware. A double-precision floating-point number is accurate to\napproximately 15 decimal places.\n\nUNSIGNED, if specified, disallows negative values.\n\nZEROFILL, if specified, pads the number with zeros, up to the total number of\ndigits specified by M.\n\nREAL and DOUBLE PRECISION are synonyms, unless the REAL_AS_FLOAT SQL mode is\nenabled, in which case REAL is a synonym for FLOAT rather than DOUBLE.\n\nSee Floating Point Accuracy for issues when using floating-point numbers.\n\nFor more details on the attributes, see Numeric Data Type Overview.\n\nExamples\n--------\n\nCREATE TABLE t1 (d DOUBLE(5,0) zerofill);\n\nINSERT INTO t1 VALUES (1),(2),(3),(4);\n\nSELECT * FROM t1;\n+-------+\n| d |\n+-------+\n| 00001 |\n| 00002 |\n| 00003 |\n| 00004 |\n+-------+\n\nURL: https://mariadb.com/kb/en/double/','','https://mariadb.com/kb/en/double/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (268,23,'BIT','Syntax\n------\n\nBIT[(M)]\n\nDescription\n-----------\n\nA bit-field type. M indicates the number of bits per value, from 1 to 64. The\ndefault is 1 if M is omitted.\n\nBit values can be inserted with b\'value\' notation, where value is the bit\nvalue in 0\'s and 1\'s.\n\nBit fields are automatically zero-padded from the left to the full length of\nthe bit, so for example in a BIT(4) field, \'10\' is equivalent to \'0010\'.\n\nBits are returned as binary, so to display them, either add 0, or use a\nfunction such as HEX, OCT or BIN to convert them.\n\nExamples\n--------\n\nCREATE TABLE b ( b1 BIT(8) );\n\nWith strict_mode set, the default from MariaDB 10.2.4:\n\nINSERT INTO b VALUES (b\'11111111\');\n\nINSERT INTO b VALUES (b\'01010101\');\n\nINSERT INTO b VALUES (b\'1111111111111\');\nERROR 1406 (22001): Data too long for column \'b1\' at row 1\n\nSELECT b1+0, HEX(b1), OCT(b1), BIN(b1) FROM b;\n+------+---------+---------+----------+\n| b1+0 | HEX(b1) | OCT(b1) | BIN(b1) |\n+------+---------+---------+----------+\n| 255 | FF | 377 | 11111111 |\n| 85 | 55 | 125 | 1010101 |\n+------+---------+---------+----------+\n\nWith strict_mode unset, the default until MariaDB 10.2.3:\n\nINSERT INTO b VALUES (b\'11111111\'),(b\'01010101\'),(b\'1111111111111\');\nQuery OK, 3 rows affected, 1 warning (0.10 sec)\nRecords: 3 Duplicates: 0 Warnings: 1\n\nSHOW WARNINGS;\n+---------+------+---------------------------------------------+\n| Level | Code | Message |\n+---------+------+---------------------------------------------+\n| Warning | 1264 | Out of range value for column \'b1\' at row 3 |\n+---------+------+---------------------------------------------+\n\nSELECT b1+0, HEX(b1), OCT(b1), BIN(b1) FROM b;\n+------+---------+---------+----------+\n| b1+0 | HEX(b1) | OCT(b1) | BIN(b1) |\n+------+---------+---------+----------+\n| 255 | FF | 377 | 11111111 |\n| 85 | 55 | 125 | 1010101 |\n| 255 | FF | 377 | 11111111 |\n+------+---------+---------+----------+\n\nURL: https://mariadb.com/kb/en/bit/','','https://mariadb.com/kb/en/bit/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (269,23,'Floating-point Accuracy','Due to their nature, not all floating-point numbers can be stored with exact\nprecision. Hardware architecture, the CPU or even the compiler version and\noptimization level may affect the precision.\n\nIf you are comparing DOUBLEs or FLOATs with numeric decimals, it is not safe\nto use the equality operator.\n\nSometimes, changing a floating-point number from single-precision (FLOAT) to\ndouble-precision (DOUBLE) will fix the problem.\n\nExample\n-------\n\nf1, f2 and f3 have seemingly identical values across each row, but due to\nfloating point accuracy, the results may be unexpected.\n\nCREATE TABLE fpn (id INT, f1 FLOAT, f2 DOUBLE, f3 DECIMAL (10,3));\nINSERT INTO fpn VALUES (1,2,2,2),(2,0.1,0.1,0.1);\n\nSELECT * FROM fpn WHERE f1*f1 = f2*f2;\n+------+------+------+-------+\n| id | f1 | f2 | f3 |\n+------+------+------+-------+\n| 1 | 2 | 2 | 2.000 |\n+------+------+------+-------+\n\nThe reason why only one instead of two rows was returned becomes clear when we\nsee how the floating point squares were evaluated.\n\nSELECT f1*f1, f2*f2, f3*f3 FROM fpn;\n+----------------------+----------------------+----------+\n| f1*f1 | f2*f2 | f3*f3 |\n+----------------------+----------------------+----------+\n| 4 | 4 | 4.000000 |\n| 0.010000000298023226 | 0.010000000000000002 | 0.010000 |\n+----------------------+----------------------+----------+\n\nURL: https://mariadb.com/kb/en/floating-point-accuracy/','','https://mariadb.com/kb/en/floating-point-accuracy/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (270,23,'BINARY','This page describes the BINARY data type. For details about the operator, see\nBinary Operator.\n\nSyntax\n------\n\nBINARY(M)\n\nDescription\n-----------\n\nThe BINARY type is similar to the CHAR type, but stores binary byte strings\nrather than non-binary character strings. M represents the column length in\nbytes.\n\nIt contains no character set, and comparison and sorting are based on the\nnumeric value of the bytes.\n\nIf the maximum length is exceeded, and SQL strict mode is not enabled , the\nextra characters will be dropped with a warning. If strict mode is enabled, an\nerror will occur.\n\nBINARY values are right-padded with 0x00 (the zero byte) to the specified\nlength when inserted. The padding is not removed on select, so this needs to\nbe taken into account when sorting and comparing, where all bytes are\nsignificant. The zero byte, 0x00 is less than a space for comparison purposes.\n\nExamples\n--------\n\nInserting too many characters, first with strict mode off, then with it on:\n\nCREATE TABLE bins (a BINARY(10));\n\nINSERT INTO bins VALUES(\'12345678901\');\nQuery OK, 1 row affected, 1 warning (0.04 sec)\n\nSELECT * FROM bins;\n+------------+\n| a |\n+------------+\n| 1234567890 |\n+------------+\n\nSET sql_mode=\'STRICT_ALL_TABLES\';\n\nINSERT INTO bins VALUES(\'12345678901\');\nERROR 1406 (22001): Data too long for column \'a\' at row 1\n\nSorting is performed with the byte value:\n\nTRUNCATE bins;\n\nINSERT INTO bins VALUES(\'A\'),(\'B\'),(\'a\'),(\'b\');\n\nSELECT * FROM bins ORDER BY a;\n+------+\n| a |\n+------+\n| A |\n| B |\n| a |\n| b |\n+------+\n\nUsing CAST to sort as a CHAR instead:\n\nSELECT * FROM bins ORDER BY CAST(a AS CHAR);\n+------+\n| a |\n+------+\n| a |\n| A |\n| b |\n| B |\n+------+\n\nThe field is a BINARY(10), so padding of two \'\\0\'s are inserted, causing\ncomparisons that don\'t take this into account to fail:\n\nTRUNCATE bins;\n\nINSERT INTO bins VALUES(\'12345678\');\n\nSELECT a = \'12345678\', a = \'12345678\\0\\0\' from bins;\n+----------------+--------------------+\n| a = \'12345678\' | a = \'12345678\\0\\0\' |\n+----------------+--------------------+\n| 0 | 1 |\n+----------------+--------------------+\n\nURL: https://mariadb.com/kb/en/binary/','','https://mariadb.com/kb/en/binary/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (271,23,'BLOB','Syntax\n------\n\nBLOB[(M)]\n\nDescription\n-----------\n\nA BLOB column with a maximum length of 65,535 (216 - 1) bytes. Each BLOB value\nis stored using a two-byte length prefix that indicates the number of bytes in\nthe value.\n\nAn optional length M can be given for this type. If this is done, MariaDB\ncreates the column as the smallest BLOB type large enough to hold values M\nbytes long.\n\nBLOBS can also be used to store dynamic columns.\n\nBefore MariaDB 10.2.1, BLOB and TEXT columns could not be assigned a DEFAULT\nvalue. This restriction was lifted in MariaDB 10.2.1.\n\nIndexing\n--------\n\nMariaDB starting with 10.4\n--------------------------\nFrom MariaDB 10.4, it is possible to set a unique index on a column that uses\nthe BLOB data type. In previous releases this was not possible, as the index\nwould only guarantee the uniqueness of a fixed number of characters.\n\nOracle Mode\n-----------\n\nMariaDB starting with 10.3\n--------------------------\nIn Oracle mode from MariaDB 10.3, BLOB is a synonym for LONGBLOB.\n\nURL: https://mariadb.com/kb/en/blob/','','https://mariadb.com/kb/en/blob/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (272,23,'BLOB and TEXT Data Types','Description\n-----------\n\nA BLOB is a binary large object that can hold a variable amount of data. The\nfour BLOB types are\n\n* TINYBLOB,\n* BLOB, \n* MEDIUMBLOB, and\n* LONGBLOB.\n\nThese differ only in the maximum length of the values they can hold.\n\nThe TEXT types are\n\n* TINYTEXT,\n* TEXT,\n* MEDIUMTEXT, and\n* LONGTEXT.\n* JSON (alias for LONGTEXT)\n\nThese correspond to the four BLOB types and have the same maximum lengths and\nstorage requirements.\n\nMariaDB starting with 10.2.1\n----------------------------\nStarting from MariaDB 10.2.1, BLOB and TEXT columns can have a DEFAULT value.\n\nMariaDB starting with 10.4.3\n----------------------------\nFrom MariaDB 10.4, it is possible to set a unique index on columns that use\nthe BLOB or TEXT data types.\n\nURL: https://mariadb.com/kb/en/blob-and-text-data-types/','','https://mariadb.com/kb/en/blob-and-text-data-types/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (273,23,'CHAR','This article covers the CHAR data type. See CHAR Function for the function.\n\nSyntax\n------\n\n[NATIONAL] CHAR[(M)] [CHARACTER SET charset_name] [COLLATE collation_name]\n\nDescription\n-----------\n\nA fixed-length string that is always right-padded with spaces to the specified\nlength when stored. M represents the column length in characters. The range of\nM is 0 to 255. If M is omitted, the length is 1.\n\nCHAR(0) columns can contain 2 values: an empty string or NULL. Such columns\ncannot be part of an index. The CONNECT storage engine does not support\nCHAR(0).\n\nNote: Trailing spaces are removed when CHAR values are retrieved unless the\nPAD_CHAR_TO_FULL_LENGTH SQL mode is enabled.\n\nBefore MariaDB 10.2, all collations were of type PADSPACE, meaning that CHAR\n(as well as VARCHAR and TEXT) values are compared without regard for trailing\nspaces. This does not apply to the LIKE pattern-matching operator, which takes\ninto account trailing spaces.\n\nIf a unique index consists of a column where trailing pad characters are\nstripped or ignored, inserts into that column where values differ only by the\nnumber of trailing pad characters will result in a duplicate-key error.\n\nExamples\n--------\n\nTrailing spaces:\n\nCREATE TABLE strtest (c CHAR(10));\nINSERT INTO strtest VALUES(\'Maria \');\n\nSELECT c=\'Maria\',c=\'Maria \' FROM strtest;\n+-----------+--------------+\n| c=\'Maria\' | c=\'Maria \' |\n+-----------+--------------+\n| 1 | 1 |\n+-----------+--------------+\n\nSELECT c LIKE \'Maria\',c LIKE \'Maria \' FROM strtest;\n+----------------+-------------------+\n| c LIKE \'Maria\' | c LIKE \'Maria \' |\n+----------------+-------------------+\n| 1 | 0 |\n+----------------+-------------------+\n\nNO PAD Collations\n-----------------\n\nNO PAD collations regard trailing spaces as normal characters. You can get a\nlist of all NO PAD collations by querying the Information Schema Collations\ntable, for example:\n\nSELECT collation_name FROM information_schema.collations \n WHERE collation_name LIKE \"%nopad%\";\n+------------------------------+\n| collation_name |\n+------------------------------+\n| big5_chinese_nopad_ci |\n| big5_nopad_bin |\n...\n\nURL: https://mariadb.com/kb/en/char/','','https://mariadb.com/kb/en/char/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (274,23,'CHAR BYTE','Description\n-----------\n\nThe CHAR BYTE data type is an alias for the BINARY data type. This is a\ncompatibility feature.\n\nURL: https://mariadb.com/kb/en/char-byte/','','https://mariadb.com/kb/en/char-byte/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (275,23,'ENUM','Syntax\n------\n\nENUM(\'value1\',\'value2\',...) [CHARACTER SET charset_name] [COLLATE\ncollation_name]\n\nDescription\n-----------\n\nAn enumeration. A string object that can have only one value, chosen from the\nlist of values \'value1\', \'value2\', ..., NULL or the special \'\' error value. In\ntheory, an ENUM column can have a maximum of 65,535 distinct values; in\npractice, the real maximum depends on many factors. ENUM values are\nrepresented internally as integers.\n\nTrailing spaces are automatically stripped from ENUM values on table creation.\n\nENUMs require relatively little storage space compared to strings, either one\nor two bytes depending on the number of enumeration values.\n\nNULL and empty values\n---------------------\n\nAn ENUM can also contain NULL and empty values. If the ENUM column is declared\nto permit NULL values, NULL becomes a valid value, as well as the default\nvalue (see below). If strict SQL Mode is not enabled, and an invalid value is\ninserted into an ENUM, a special empty string, with an index value of zero\n(see Numeric index, below), is inserted, with a warning. This may be\nconfusing, because the empty string is also a possible value, and the only\ndifference if that is this case its index is not 0. Inserting will fail with\nan error if strict mode is active.\n\nIf a DEFAULT clause is missing, the default value will be:\n\n* NULL if the column is nullable;\n* otherwise, the first value in the enumeration.\n\nNumeric index\n-------------\n\nENUM values are indexed numerically in the order they are defined, and sorting\nwill be performed in this numeric order. We suggest not using ENUM to store\nnumerals, as there is little to no storage space benefit, and it is easy to\nconfuse the enum integer with the enum numeral value by leaving out the quotes.\n\nAn ENUM defined as ENUM(\'apple\',\'orange\',\'pear\') would have the following\nindex values:\n\n+--------------------------------------+--------------------------------------+\n| Index | Value |\n+--------------------------------------+--------------------------------------+\n| NULL | NULL |\n+--------------------------------------+--------------------------------------+\n| 0 | \'\' |\n+--------------------------------------+--------------------------------------+\n| 1 | \'apple\' |\n+--------------------------------------+--------------------------------------+\n| 2 | \'orange\' |\n+--------------------------------------+--------------------------------------+\n| 3 | \'pear\' |\n+--------------------------------------+--------------------------------------+\n\nExamples\n--------\n\nCREATE TABLE fruits (\n id INT NOT NULL auto_increment PRIMARY KEY,\n fruit ENUM(\'apple\',\'orange\',\'pear\'),\n bushels INT);\n\nDESCRIBE fruits;\n+---------+-------------------------------+------+-----+---------+-------------\n--+\n| Field | Type | Null | Key | Default | Extra \n |\n+---------+-------------------------------+------+-----+---------+-------------\n--+\n| id | int(11) | NO | PRI | NULL |\nauto_increment |\n| fruit | enum(\'apple\',\'orange\',\'pear\') | YES | | NULL | \n |\n| bushels | int(11) | YES | | NULL | \n |\n+---------+-------------------------------+------+-----+---------+-------------\n--+\n\nINSERT INTO fruits\n (fruit,bushels) VALUES\n (\'pear\',20),\n (\'apple\',100),\n (\'orange\',25);\n\nINSERT INTO fruits\n (fruit,bushels) VALUES\n (\'avocado\',10);\nERROR 1265 (01000): Data truncated for column \'fruit\' at row 1\n\nSELECT * FROM fruits;\n+----+--------+---------+\n| id | fruit | bushels |\n+----+--------+---------+\n| 1 | pear | 20 |\n| 2 | apple | 100 |\n| 3 | orange | 25 |\n+----+--------+---------+\n\nSelecting by numeric index:\n\nSELECT * FROM fruits WHERE fruit=2;\n+----+--------+---------+\n| id | fruit | bushels |\n+----+--------+---------+\n| 3 | orange | 25 |\n+----+--------+---------+\n\nSorting is according to the index value:\n\nCREATE TABLE enums (a ENUM(\'2\',\'1\'));\n\nINSERT INTO enums VALUES (\'1\'),(\'2\');\n\nSELECT * FROM enums ORDER BY a ASC;\n+------+\n| a |\n+------+\n| 2 |\n| 1 |\n+------+\n\nIt\'s easy to get confused between returning the enum integer with the stored\nvalue, so we don\'t suggest using ENUM to store numerals. The first example\nreturns the 1st indexed field (\'2\' has an index value of 1, as it\'s defined\nfirst), while the second example returns the string value \'1\'.\n\nSELECT * FROM enums WHERE a=1;\n+------+\n| a |\n+------+\n| 2 |\n+------+\n\nSELECT * FROM enums WHERE a=\'1\';\n+------+\n| a |\n+------+\n| 1 |\n+------+\n\nURL: https://mariadb.com/kb/en/enum/','','https://mariadb.com/kb/en/enum/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (276,23,'INET4','MariaDB starting with 10.10.0\n-----------------------------\nThe INET4 data type was added in MariaDB 10.10.0\n\nINET4 is a data type to store IPv4 addresses, as 4-byte binary strings.\n\nURL: https://mariadb.com/kb/en/inet4/','','https://mariadb.com/kb/en/inet4/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (277,23,'INET6','MariaDB starting with 10.5.0\n----------------------------\nThe INET6 data type was added in MariaDB 10.5.0\n\nSyntax\n------\n\nINET6\n\nDescription\n-----------\n\nThe INET6 data type is intended for storage of IPv6 addresses, as well as IPv4\naddresses assuming conventional mapping of IPv4 addresses into IPv6 addresses.\n\nBoth short and long IPv6 notation are permitted, according to RFC-5952.\n\n* Values are stored as a 16-byte fixed length binary string, with most\nsignificant byte first.\n* Storage engines see INET6 as BINARY(16).\n* Clients see INET6 as CHAR(39) and get text representation on retrieval.\n\nThe IPv4-compatible notation is considered as deprecated. It is supported for\ncompatibility with the INET6_ATON function, which also understands this\nformat. It\'s recommended to use the mapped format to store IPv4 addresses in\nINET6.\n\nWhen an IPv4 mapped (or compatible) value is stored in INET6, it still\noccupies 16 bytes:\n\nRetrieval\n---------\n\nOn retrieval, in the client-server text protocol, INET6 values are converted\nto the short text representation, according to RFC-5952, that is with all\nleading zeroes in each group removed and with consequent zero groups\ncompressed.\n\nBesides creating one\'s own stored function, there is no a way to retrieve an\nINET6 value using long text representation.\n\nCasting\n-------\n\n* CAST from a character string to INET6 understands addresses in short or long\ntext notation (including IPv4 mapped and compatible addresses). NULL is\nreturned if the format is not understood.\n* CAST from a binary string to INET6 requires a 16-byte string as an argument.\nNULL is returned if the argument length is not equal to 16.\n* CAST from other data types to INET6 first converts data to a character\nstring, then CAST from character string to INET6 is applied.\n* CAST from INET6 to CHAR returns short text address notation.\n* CAST from INET6 to BINARY returns its 16-byte binary string representation.\n* CAST from INET6 to data types other than CHAR (e.g. SIGNED, UNSIGNED, TIME,\netc) returns an error.\n\nComparisons\n-----------\n\nAn INET6 expression can be compared to:\n\n* another INET6 expression\n* a character string expression with a text (short or long) address\nrepresentation:\n* a 16-byte binary string expression:\n\nAttempting to compare INET6 to an expression of any other data type returns an\nerror.\n\nMixing INET6 Values for Result\n------------------------------\n\nAn INET6 expression can be mixed for result (i.e. UNION, CASE..THEN, COALESCE\netc) with:\n\n* another INET6 expression. The resulting data type is INET6.\n* a character string in text (short or long) address representation. The\nresult data type is INET6. The character string counterpart is automatically\nconverted to INET6. If the string format is not understood, it\'s converted\nwith a warning to either NULL or to \'::\', depending on the NULL-ability of the\nresult.\n* a 16-byte binary string. The resulting data type is INET6. The binary string\ncounterpart is automatically converted to INET6. If the length of the binary\nstring is not equal to 16, it\'s converted with a warning to NULL or to \'::\'\ndepending on the NULL-ability of the result.\n\nAttempts to mix INET6 for result with other data types will return an error.\n\nMixing INET6 with other data types for LEAST and GREATEST, when mixing for\ncomparison and mixing for result are involved at the same time, uses the same\nrules with mixing for result, described in the previous paragraphs.\n\nFunctions and Operators\n-----------------------\n\n* HEX() with an INET6 argument returns a hexadecimal representation of the\nunderlying 16-byte binary string\n* Arithmetic operators (+,-,*,/,MOD,DIV) are not supported for INET6. This may\nchange in the future.\n* The INET6_ATON function now understands INET6 values as an argument\n* The prototypes of the IS_IPV4_COMPAT and IS_IPV4_MAPPED functions have\nchanged from a BINARY(16) to a INET6,\n* When the argument for these two functions is not INET6, automatic implicit\nCAST to INET6 is applied. As a consequence, both functions now understand\narguments in both text representation and binary(16) representation. Before\nMariaDB 10.5.0, these functions understood only binary(16) representation.\n\nPrepared Statement Parameters\n-----------------------------\n\nINET6 understands both text and binary(16) address representation in prepared\nstatement parameters (PREPARE..EXECUTE and EXECUTE IMMEDIATE statements).\n\nMigration between BINARY(16) and INET6\n---------------------------------------\n\nBefore MariaDB 10.5.0, you may have used BINARY(16) as a storage for IPv6\ninternet addresses, in combination with INET6_ATON and INET6_NTOA to\nrespectively insert and retrieve data.\n\nFrom 10.5, you can ALTER BINARY(16) columns storing IPv6 addresses to INET6.\nAfter such an alter, there is no a need to use INET6_ATON() and INET6_NTOA().\nAddresses can be inserted and retrieved directly.\n\nIt is also possible to convert INET6 columns to BINARY(16) and continue using\nthe data in combination with INET6_NTOA() and INET6_ATON().\n\nExamples\n--------\n\nCREATE TABLE t1 (a INET6);\n\nInserting using short text address notation:\n\nINSERT INTO t1 VALUES (\'2001:db8::ff00:42:8329\');\n\nLong text address notation:\n\nINSERT INTO t1 VALUES (\'2001:0db8:0000:0000:0000:ff00:0042:8329\');\n\n16-byte binary string notation:\n\nINSERT INTO t1 VALUES (0x20010DB8000000000000FF0000428329);\nINSERT INTO t1 VALUES (UNHEX(\'20010DB8000000000000FF0000428329\'));\n\nIPv4 addresses, using IPv4-mapped and IPv4-compatible notations:\n\nINSERT INTO t1 VALUES (\'::ffff:192.0.2.128\'); -- mapped\nINSERT INTO t1 VALUES (\'::192.0.2.128\'); -- compatible\n\nSELECT * FROM t1;\n+------------------------+\n| a |\n+------------------------+\n| 2001:db8::ff00:42:8329 |\n| 2001:db8::ff00:42:8329 |\n| 2001:db8::ff00:42:8329 |\n| 2001:db8::ff00:42:8329 |\n| ::ffff:192.0.2.128 |\n| ::192.0.2.128 |\n+------------------------+\n\nIPv4 mapped (or compatible) values still occupy 16 bytes:\n\nCREATE OR REPLACE TABLE t1 (a INET6);\n\nINSERT INTO t1 VALUES (\'::ffff:192.0.2.128\');\n\nSELECT * FROM t1;\n+--------------------+\n| a |\n+--------------------+\n| ::ffff:192.0.2.128 |\n+--------------------+\n\nSELECT HEX(a) FROM t1;\n+----------------------------------+\n| HEX(a) |\n+----------------------------------+\n| 00000000000000000000FFFFC0000280 |\n+----------------------------------+\n\nCasting from INET6 to anything other than CHAR returns an error:\n\nSELECT CAST(a AS DECIMAL) FROM t1;\n\nERROR 4079 (HY000): Illegal parameter data type inet6 for operation\n\'decimal_typecast\'\n\nComparison Examples\n-------------------\n\nComparison with another INET6 expression:\n\nCREATE OR REPLACE TABLE t1 (a INET6);\n CREATE OR REPLACE TABLE t2 (a INET6);\n\nINSERT INTO t1 VALUES\n(\'2001:db8::ff00:42:8328\'),(\'2001:db8::ff00:42:8329\');\n INSERT INTO t2 VALUES\n(\'2001:db8::ff00:42:832a\'),(\'2001:db8::ff00:42:8329\');\n\nSELECT t1.* FROM t1,t2 WHERE t1.a=t2.a;\n +------------------------+\n | a |\n +------------------------+\n | 2001:db8::ff00:42:8329 |\n +------------------------+\n\nWith a character string expression with a text (short or long) address\nrepresentation:\n\nCREATE OR REPLACE TABLE t1 (a INET6);\n\nINSERT INTO t1 VALUES (\'2001:db8::ff00:42:8329\');\n\nSELECT * FROM t1 WHERE a=\'2001:db8::ff00:42:8329\';\n +------------------------+\n | a |\n +------------------------+\n | 2001:db8::ff00:42:8329 |\n +------------------------+\n\nWith a 16-byte binary string expression:\n\nCREATE OR REPLACE TABLE t1 (a INET6);\n\nINSERT INTO t1 VALUES (\'2001:db8::ff00:42:8329\');\n\nSELECT * FROM t1 WHERE a=X\'20010DB8000000000000FF0000428329\';\n +------------------------+\n | a |\n +------------------------+\n | 2001:db8::ff00:42:8329 |\n +------------------------+\n\nWith an expression of another data type:\n\nSELECT * FROM t1 WHERE a=1;\nERROR 4078 (HY000): Illegal parameter data types inet6 and int for operation\n\'=\'\n\nMixing for Result Examples\n--------------------------\n\nMixed with another INET6 expression, returning an INET6 data type:\n\nCREATE OR REPLACE TABLE t1 (a INET6, b INET6);\n\nINSERT INTO t1 VALUES (NULL,\'2001:db8::ff00:42:8329\');\n\nSELECT a FROM t1 UNION SELECT b FROM t1;\n +------------------------+\n | a |\n +------------------------+\n | NULL |\n | 2001:db8::ff00:42:8329 |\n +------------------------+\n\nSELECT COALESCE(a, b) FROM t1;\n +------------------------+\n | COALESCE(a, b) |\n +------------------------+\n | 2001:db8::ff00:42:8329 |\n +------------------------+\n\nMixed with a character string in text (short or long) address representation:\n\nCREATE OR REPLACE TABLE t1 (a INET6, b VARCHAR(64));\n\nINSERT INTO t1 VALUES (NULL,\'2001:db8::ff00:42:8328\');\n\nINSERT INTO t1 VALUES (NULL,\'2001:db8::ff00:42:832a garbage\');\n\nSELECT COALESCE(a,b) FROM t1;\n +------------------------+\n | COALESCE(a,b) |\n +------------------------+\n | 2001:db8::ff00:42:8328 |\n | NULL |\n +------------------------+\n 2 rows in set, 1 warning (0.001 sec)\n\nSHOW WARNINGS;\n\n+---------+------+---------------------------------------------------------+\n | Level | Code | Message\n|\n\n+---------+------+---------------------------------------------------------+\n | Warning | 1292 | Incorrect inet6 value: \'2001:db8::ff00:42:832a garbage\'\n|\n\n+---------+------+---------------------------------------------------------+\n\nMixed with a 16-byte binary string:\n\nCREATE OR REPLACE TABLE t1 (a INET6, b VARBINARY(16));\n\nINSERT INTO t1 VALUES (NULL,CONCAT(0xFFFF,REPEAT(0x0000,6),0xFFFF));\n\nINSERT INTO t1 VALUES (NULL,0x00/*garbage*/);\n\nSELECT COALESCE(a,b) FROM t1;\n +---------------+\n | COALESCE(a,b) |\n +---------------+\n | ffff::ffff |\n | NULL |\n +---------------+\n 2 rows in set, 1 warning (0.001 sec)\n\nSHOW WARNINGS;\n +---------+------+-------------------------------+\n | Level | Code | Message |\n +---------+------+-------------------------------+\n | Warning | 1292 | Incorrect inet6 value: \'\\x00\' |\n +---------+------+-------------------------------+\n\nMixing with other data types:\n\nSELECT CAST(\'ffff::ffff\' AS INET6) UNION SELECT 1;\nERROR 4078 (HY000): Illegal parameter data types inet6 and int for operation\n\'UNION\'\n\nFunctions and Operators Examples\n--------------------------------\n\nHEX with an INET6 argument returning a hexadecimal representation:\n\nSELECT HEX(CAST(\'2001:db8::ff00:42:8329\' AS INET6));\n +----------------------------------------------+\n | HEX(CAST(\'2001:db8::ff00:42:8329\' AS INET6)) |\n +----------------------------------------------+\n | 20010DB8000000000000FF0000428329 |\n +----------------------------------------------+\n\nINET6_ATON now understands INET6 values as an argument:\n\nCREATE OR REPLACE TABLE t1 (a INET6);\n\nINSERT INTO t1 VALUES (\'2001:db8::ff00:42:8329\');\n\nSELECT a, HEX(INET6_ATON(a)) FROM t1;\n +------------------------+----------------------------------+\n | a | HEX(INET6_ATON(a)) |\n +------------------------+----------------------------------+\n | 2001:db8::ff00:42:8329 | 20010DB8000000000000FF0000428329 |\n +------------------------+----------------------------------+\n\nIS_IPV4_COMPAT and IS_IPV4_MAPPED prototype now a BINARY(16)):\n\nCREATE OR REPLACE TABLE t1 (a INET6);\n\nINSERT INTO t1 VALUES (\'2001:db8::ff00:42:8329\');\n INSERT INTO t1 VALUES (\'::ffff:192.168.0.1\');\n INSERT INTO t1 VALUES (\'::192.168.0.1\');\n\nSELECT a, IS_IPV4_MAPPED(a), IS_IPV4_COMPAT(a) FROM t1;\n +------------------------+-------------------+-------------------+\n | a | IS_IPV4_MAPPED(a) | IS_IPV4_COMPAT(a) |\n +------------------------+-------------------+-------------------+\n | 2001:db8::ff00:42:8329 | 0 | 0 |\n | ::ffff:192.168.0.1 | 1 | 0 |\n | ::192.168.0.1 | 0 | 1 |\n +------------------------+-------------------+-------------------+\n\nAutomatic implicit CAST to INET6:\n\nCREATE OR REPLACE TABLE t1 (\n a INET6,\n b VARCHAR(39) DEFAULT a\n );\n\nINSERT INTO t1 (a) VALUES (\'ffff::ffff\'),(\'::ffff:192.168.0.1\');\n\nSELECT a, IS_IPV4_MAPPED(a), b, IS_IPV4_MAPPED(b) FROM t1;\n\n+--------------------+-------------------+--------------------+----------------\n--+\n | a | IS_IPV4_MAPPED(a) | b |\nIS_IPV4_MAPPED(b) |\n\n+--------------------+-------------------+--------------------+----------------\n--+\n | ffff::ffff | 0 | ffff::ffff |\n 0 |\n | ::ffff:192.168.0.1 | 1 | ::ffff:192.168.0.1 |\n 1 |\n\n+--------------------+-------------------+--------------------+----------------\n--+\n\nCREATE OR REPLACE TABLE t1 (\n a INET6,\n b BINARY(16) DEFAULT UNHEX(HEX(a))\n );\n\nINSERT INTO t1 (a) VALUES (\'ffff::ffff\'),(\'::ffff:192.168.0.1\');\n\nSELECT a, IS_IPV4_MAPPED(a), HEX(b), IS_IPV4_MAPPED(b) FROM t1;\n\n+--------------------+-------------------+----------------------------------+--\n----------------+\n | a | IS_IPV4_MAPPED(a) | HEX(b)\n | IS_IPV4_MAPPED(b) |\n\n+--------------------+-------------------+----------------------------------+--\n----------------+\n | ffff::ffff | 0 |\nFFFF000000000000000000000000FFFF | 0 |\n | ::ffff:192.168.0.1 | 1 |\n00000000000000000000FFFFC0A80001 | 1 |\n\n+--------------------+-------------------+----------------------------------+--\n----------------+\n\nPrepared Statement Parameters Examples\n--------------------------------------\n\nCREATE OR REPLACE TABLE t1 (a INET6);\n\nEXECUTE IMMEDIATE \'INSERT INTO t1 VALUES (?)\' USING \'ffff::fffe\';\nEXECUTE IMMEDIATE \'INSERT INTO t1 VALUES (?)\' USING\nX\'FFFF000000000000000000000000FFFF\';\n\nSELECT * FROM t1;\n+------------+\n| a |\n+------------+\n| ffff::fffe |\n| ffff::ffff |\n+------------+\n\nEXECUTE IMMEDIATE \'SELECT * FROM t1 WHERE a=?\' USING \'ffff::fffe\';\n+------------+\n| a |\n+------------+\n| ffff::fffe |\n+------------+\n\nEXECUTE IMMEDIATE \'SELECT * FROM t1 WHERE a=?\' USING','','https://mariadb.com/kb/en/inet6/');
+update help_topic set description = CONCAT(description, '\nX\'FFFF000000000000000000000000FFFF\';\n+------------+\n| a |\n+------------+\n| ffff::ffff |\n+------------+\n\nMigration between BINARY(16) and INET6 Examples\n-----------------------------------------------\n\nBefore MariaDB 10.5:\n\nCREATE OR REPLACE TABLE t1 (a BINARY(16));\n\nINSERT INTO t1 VALUES (INET6_ATON(\'ffff::ffff\'));\n\nSELECT INET6_NTOA(a) FROM t1;\n+---------------+\n| INET6_NTOA(a) |\n+---------------+\n| ffff::ffff |\n+---------------+\n\nMigrating to INET6, from MariaDB 10.5:\n\nALTER TABLE t1 MODIFY a INET6;\n\nINSERT INTO t1 VALUES (\'ffff::fffe\');\n\nSELECT * FROM t1;\n+------------+\n| a |\n+------------+\n| ffff::ffff |\n| ffff::fffe |\n+------------+\n\nMigration from INET6 to BINARY(16):\n\nCREATE OR REPLACE TABLE t1 (a INET6);\n\nINSERT INTO t1 VALUES (\'2001:db8::ff00:42:8329\');\nINSERT INTO t1 VALUES (\'::ffff:192.168.0.1\');\nINSERT INTO t1 VALUES (\'::192.168.0.1\');\n\nALTER TABLE t1 MODIFY a BINARY(16);\n\nSELECT INET6_NTOA(a) FROM t1;\n+------------------------+\n| INET6_NTOA(a) |\n+------------------------+\n| 2001:db8::ff00:42:8329 |\n| ::ffff:192.168.0.1 |\n| ::192.168.0.1 |\n+------------------------+\n\nURL: https://mariadb.com/kb/en/inet6/') WHERE help_topic_id = 277;
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (278,23,'JSON Data Type','MariaDB starting with 10.2.7\n----------------------------\nThe JSON alias was added in MariaDB 10.2.7. This was done to make it possible\nto use JSON columns in statement based replication from MySQL to MariaDB and\nto make it possible for MariaDB to read mysqldumps from MySQL.\n\nJSON is an alias for LONGTEXT introduced for compatibility reasons with\nMySQL\'s JSON data type. MariaDB implements this as a LONGTEXT rather, as the\nJSON data type contradicts the SQL standard, and MariaDB\'s benchmarks indicate\nthat performance is at least equivalent.\n\nIn order to ensure that a a valid json document is inserted, the JSON_VALID\nfunction can be used as a CHECK constraint. This constraint is automatically\nincluded for types using the JSON alias from MariaDB 10.4.3.\n\nExamples\n--------\n\nCREATE TABLE t (j JSON);\n\nDESC t;\n+-------+----------+------+-----+---------+-------+\n| Field | Type | Null | Key | Default | Extra |\n+-------+----------+------+-----+---------+-------+\n| j | longtext | YES | | NULL | |\n+-------+----------+------+-----+---------+-------+\n\nWith validation:\n\nCREATE TABLE t2 (\n j JSON\n CHECK (JSON_VALID(j))\n);\n\nINSERT INTO t2 VALUES (\'invalid\');\nERROR 4025 (23000): CONSTRAINT `j` failed for `test`.`t2`\n\nINSERT INTO t2 VALUES (\'{\"id\": 1, \"name\": \"Monty\"}\');\nQuery OK, 1 row affected (0.13 sec)\n\nReplicating JSON Data Between MySQL and MariaDB\n-----------------------------------------------\n\nThe JSON type in MySQL stores the JSON object in a compact form, not as\nLONGTEXT as in MariaDB. This means that row based replication will not work\nfor JSON types from MySQL to MariaDB.\n\nThere are a a few different ways to solve this:\n\n* Use statement based replication.\n* Change the JSON column to type TEXT in MySQL\n* If you must use row-based replication and cannot change the MySQL master\nfrom JSON to TEXT, you can try to introduce an intermediate MySQL slave and\nchange the column type from JSON to TEXT on it. Then you replicate from this\nintermediate slave to MariaDB.\n\nConverting a MySQL TABLE with JSON Fields to MariaDB\n----------------------------------------------------\n\nMariaDB can\'t directly access MySQL\'s JSON format.\n\nThere are a a few different ways to move the table to MariaDB:\n\n* From MariaDB 10.5.7, see the you can use the mysql_json plugin. See Making\nMariaDB understand MySQL JSON.\n* Change the JSON column to type TEXT in MySQL. After this, MariaDB can\ndirectly use the table without any need for a dump and restore.\n* Use mariadb-dump/mysqldump to copy the table.\n\nDifferences Between MySQL JSON Strings and MariaDB JSON Strings\n---------------------------------------------------------------\n\n* In MySQL, JSON is an object and is compared according to json values. In\nMariaDB JSON strings are normal strings and compared as strings. One exception\nis when using JSON_EXTRACT() in which case strings are unescaped before\ncomparison.\n\nURL: https://mariadb.com/kb/en/json-data-type/','','https://mariadb.com/kb/en/json-data-type/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (279,23,'MEDIUMBLOB','Syntax\n------\n\nMEDIUMBLOB\n\nDescription\n-----------\n\nA BLOB column with a maximum length of 16,777,215 (224 - 1) bytes. Each\nMEDIUMBLOB value is stored using a three-byte length prefix that indicates the\nnumber of bytes in the value.\n\nURL: https://mariadb.com/kb/en/mediumblob/','','https://mariadb.com/kb/en/mediumblob/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (280,23,'MEDIUMTEXT','Syntax\n------\n\nMEDIUMTEXT [CHARACTER SET charset_name] [COLLATE collation_name]\n\nDescription\n-----------\n\nA TEXT column with a maximum length of 16,777,215 (224 - 1) characters. The\neffective maximum length is less if the value contains multi-byte characters.\nEach MEDIUMTEXT value is stored using a three-byte length prefix that\nindicates the number of bytes in the value.\n\nURL: https://mariadb.com/kb/en/mediumtext/','','https://mariadb.com/kb/en/mediumtext/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (281,23,'LONGBLOB','Syntax\n------\n\nLONGBLOB\n\nDescription\n-----------\n\nA BLOB column with a maximum length of 4,294,967,295 bytes or 4GB (232 - 1).\nThe effective maximum length of LONGBLOB columns depends on the configured\nmaximum packet size in the client/server protocol and available memory. Each\nLONGBLOB value is stored using a four-byte length prefix that indicates the\nnumber of bytes in the value.\n\nOracle Mode\n-----------\n\nMariaDB starting with 10.3\n--------------------------\nIn Oracle mode from MariaDB 10.3, BLOB is a synonym for LONGBLOB.\n\nURL: https://mariadb.com/kb/en/longblob/','','https://mariadb.com/kb/en/longblob/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (282,23,'LONGTEXT','Syntax\n------\n\nLONGTEXT [CHARACTER SET charset_name] [COLLATE collation_name]\n\nDescription\n-----------\n\nA TEXT column with a maximum length of 4,294,967,295 or 4GB (232 - 1)\ncharacters. The effective maximum length is less if the value contains\nmulti-byte characters. The effective maximum length of LONGTEXT columns also\ndepends on the configured maximum packet size in the client/server protocol\nand available memory. Each LONGTEXT value is stored using a four-byte length\nprefix that indicates the number of bytes in the value.\n\nFrom MariaDB 10.2.7, JSON is an alias for LONGTEXT. See JSON Data Type for\ndetails.\n\nOracle Mode\n-----------\n\nMariaDB starting with 10.3\n--------------------------\nIn Oracle mode from MariaDB 10.3, CLOB is a synonym for LONGTEXT.\n\nURL: https://mariadb.com/kb/en/longtext/','','https://mariadb.com/kb/en/longtext/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (283,23,'ROW','MariaDB starting with 10.3.0\n----------------------------\nThe ROW data type was introduced in MariaDB 10.3.0.\n\nSyntax\n------\n\nROW (<field name> <data type> [{, <field name> <data type>}... ])\n\nDescription\n-----------\n\nROW is a data type for stored procedure variables.\n\nFeatures\n--------\n\nROW fields as normal variables\n------------------------------\n\nROW fields (members) act as normal variables, and are able to appear in all\nquery parts where a stored procedure variable is allowed:\n\n* Assignment is using the := operator and the SET command:\n\na.x:= 10;\na.x:= b.x;\nSET a.x= 10, a.y=20, a.z= b.z;\n\n* Passing to functions and operators:\n\nSELECT f1(rec.a), rec.a<10;\n\n* Clauses (select list, WHERE, HAVING, LIMIT, etc...,):\n\nSELECT var.a, t1.b FROM t1 WHERE t1.b=var.b LIMIT var.c;\n\n* INSERT values:\n\nINSERT INTO t1 VALUES (rec.a, rec.b, rec.c);\n\n* SELECT .. INTO targets\n\nSELECT a,b INTO rec.a, rec.b FROM t1 WHERE t1.id=10;\n\n* Dynamic SQL out parameters (EXECUTE and EXECUTE IMMEDIATE)\n\nEXECUTE IMMEDIATE \'CALL proc_with_out_param(?)\' USING rec.a;\n\nROW type variables as FETCH targets\n-----------------------------------\n\nROW type variables are allowed as FETCH targets:\n\nFETCH cur INTO rec;\n\nwhere cur is a CURSOR and rec is a ROW type stored procedure variable.\n\nNote, currently an attempt to use FETCH for a ROW type variable returns this\nerror:\n\nERROR 1328 (HY000): Incorrect number of FETCH variables\n\nFETCH from a cursor cur into a ROW variable rec works as follows:\n\n* The number of fields in cur must match the number of fields in rec.\n Otherwise, an error is reported.\n\n* Assignment is done from left to right. The first cursor field is assigned to\n the first variable field, the second cursor field is assigned to the second\n variable field, etc.\n\n* Field names in rec are not important and can differ from field names\n in cur.\n\nSee FETCH Examples (below) for examples of using this with sql_mode=ORACLE and\nsql_mode=DEFAULT.\n\nROW type variables as SELECT...INTO targets\n-------------------------------------------\n\nROW type variables are allowed as SELECT..INTO targets with some differences\ndepending on which sql_mode is in use.\n\n* When using sql_mode=ORACLE, table%ROWTYPE and cursor%ROWTYPE\n variables can be used as SELECT...INTO targets.\n\n* Using multiple ROW variables in the SELECT..INTO list will report an\n error.\n\n* Using ROW variables with a different column count than in\n the SELECT..INTO list will report an error.\n\nSee SELECT...INTO Examples (below) for examples of using this with\nsql_mode=ORACLE and sql_mode=DEFAULT.\n\nFeatures not implemented\n------------------------\n\nThe following features are planned, but not implemented yet:\n\n* Returning a ROW type expression from a stored function (see MDEV-12252).\nThis will need some grammar change to support field names after parentheses:\n\nSELECT f1().x FROM DUAL;\n\n* Returning a ROW type expression from a built-in hybrid type function, such\nas CASE, IF, etc. \n* ROW of ROWs\n\nExamples\n--------\n\nDeclaring a ROW in a stored procedure\n-------------------------------------\n\nDELIMITER $$\nCREATE PROCEDURE p1()\nBEGIN\n DECLARE r ROW (c1 INT, c2 VARCHAR(10));\n SET r.c1= 10;\n SET r.c2= \'test\';\n INSERT INTO t1 VALUES (r.c1, r.c2);\nEND;\n$$\nDELIMITER ;\nCALL p1();\n\nFETCH Examples\n--------------\n\nA complete FETCH example for sql_mode=ORACLE:\n\nDROP TABLE IF EXISTS t1;\nCREATE TABLE t1 (a INT, b VARCHAR(32));\nINSERT INTO t1 VALUES (10,\'b10\');\nINSERT INTO t1 VALUES (20,\'b20\');\nINSERT INTO t1 VALUES (30,\'b30\');\n\nSET sql_mode=oracle;\nDROP PROCEDURE IF EXISTS p1;\nDELIMITER $$\nCREATE PROCEDURE p1 AS\n rec ROW(a INT, b VARCHAR(32));\n CURSOR c IS SELECT a,b FROM t1;\nBEGIN\n OPEN c;\n LOOP\n FETCH c INTO rec;\n EXIT WHEN c%NOTFOUND;\n SELECT (\'rec=(\' || rec.a ||\',\'|| rec.b||\')\');\n END LOOP;\n CLOSE c;\nEND;\n$$\nDELIMITER ;\nCALL p1();\n\nA complete FETCH example for sql_mode=DEFAULT:\n\nDROP TABLE IF EXISTS t1;\nCREATE TABLE t1 (a INT, b VARCHAR(32));\nINSERT INTO t1 VALUES (10,\'b10\');\nINSERT INTO t1 VALUES (20,\'b20\');\nINSERT INTO t1 VALUES (30,\'b30\');\n\nSET sql_mode=DEFAULT;\nDROP PROCEDURE IF EXISTS p1;\nDELIMITER $$\nCREATE PROCEDURE p1()\nBEGIN\n DECLARE done INT DEFAULT FALSE;\n DECLARE rec ROW(a INT, b VARCHAR(32));\n DECLARE c CURSOR FOR SELECT a,b FROM t1;\n DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;\n OPEN c;\nread_loop:\n LOOP\n FETCH c INTO rec;\n IF done THEN\n LEAVE read_loop;\n END IF;\n SELECT CONCAT(\'rec=(\',rec.a,\',\',rec.b,\')\');\n END LOOP;\n CLOSE c;\nEND;\n$$\nDELIMITER ;\nCALL p1();\n\nSELECT...INTO Examples\n----------------------\n\nA SELECT...INTO example for sql_mode=DEFAULT:\n\nSET sql_mode=DEFAULT;\nDROP TABLE IF EXISTS t1;\nDROP PROCEDURE IF EXISTS p1;\nCREATE TABLE t1 (a INT, b VARCHAR(32));\nINSERT INTO t1 VALUES (10,\'b10\');\nDELIMITER $$\nCREATE PROCEDURE p1()\nBEGIN\n DECLARE rec1 ROW(a INT, b VARCHAR(32));\n SELECT * FROM t1 INTO rec1;\n SELECT rec1.a, rec1.b;\nEND;\n$$\nDELIMITER ;\nCALL p1();\n\nThe above example returns:\n\n+--------+--------+\n| rec1.a | rec1.b |\n+--------+--------+\n| 10 | b10 |\n+--------+--------+\n\nA SELECT...INTO example for sql_mode=ORACLE:\n\nSET sql_mode=ORACLE;\nDROP TABLE IF EXISTS t1;\nDROP PROCEDURE IF EXISTS p1;\nCREATE TABLE t1 (a INT, b VARCHAR(32));\nINSERT INTO t1 VALUES (10,\'b10\');\nDELIMITER $$\nCREATE PROCEDURE p1 AS\n rec1 ROW(a INT, b VARCHAR(32));\nBEGIN\n SELECT * FROM t1 INTO rec1;\n SELECT rec1.a, rec1.b;\nEND;\n$$\nDELIMITER ;\nCALL p1();\n\nThe above example returns:\n\n+--------+--------+\n| rec1.a | rec1.b |\n+--------+--------+\n| 10 | b10 |\n+--------+--------+\n\nAn example for sql_mode=ORACLE using table%ROWTYPE variables as SELECT..INTO\ntargets:\n\nSET sql_mode=ORACLE;\nDROP TABLE IF EXISTS t1;\nDROP PROCEDURE IF EXISTS p1;\nCREATE TABLE t1 (a INT, b VARCHAR(32));\nINSERT INTO t1 VALUES (10,\'b10\');\nDELIMITER $$\nCREATE PROCEDURE p1 AS\n rec1 t1%ROWTYPE;\nBEGIN\n SELECT * FROM t1 INTO rec1;\n SELECT rec1.a, rec1.b;\nEND;\n$$\nDELIMITER ;\nCALL p1();\n\nThe above example returns:\n\n+--------+--------+\n| rec1.a | rec1.b |\n+--------+--------+\n| 10 | b10 |\n+--------+--------+\n\nAn example for sql_mode=ORACLE using cursor%ROWTYPE variables as SELECT..INTO\ntargets:\n\nSET sql_mode=ORACLE;\nDROP TABLE IF EXISTS t1;\nDROP PROCEDURE IF EXISTS p1;\nCREATE TABLE t1 (a INT, b VARCHAR(32));\nINSERT INTO t1 VALUES (10,\'b10\');\nDELIMITER $$\nCREATE PROCEDURE p1 AS\n CURSOR cur1 IS SELECT * FROM t1;\n rec1 cur1%ROWTYPE;\nBEGIN\n SELECT * FROM t1 INTO rec1;\n SELECT rec1.a, rec1.b;\nEND;\n$$\nDELIMITER ;\nCALL p1();\n\nThe above example returns:\n\n+--------+--------+\n| rec1.a | rec1.b |\n+--------+--------+\n| 10 | b10 |\n+--------+--------+\n\nURL: https://mariadb.com/kb/en/row/','','https://mariadb.com/kb/en/row/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (284,23,'TEXT','Syntax\n------\n\nTEXT[(M)] [CHARACTER SET charset_name] [COLLATE collation_name]\n\nDescription\n-----------\n\nA TEXT column with a maximum length of 65,535 (216 - 1) characters. The\neffective maximum length is less if the value contains multi-byte characters.\nEach TEXT value is stored using a two-byte length prefix that indicates the\nnumber of bytes in the value. If you need a bigger storage, consider using\nMEDIUMTEXT instead.\n\nAn optional length M can be given for this type. If this is done, MariaDB\ncreates the column as the smallest TEXT type large enough to hold values M\ncharacters long.\n\nBefore MariaDB 10.2, all MariaDB collations were of type PADSPACE, meaning\nthat TEXT (as well as VARCHAR and CHAR values) are compared without regard for\ntrailing spaces. This does not apply to the LIKE pattern-matching operator,\nwhich takes into account trailing spaces.\n\nBefore MariaDB 10.2.1, BLOB and TEXT columns could not be assigned a DEFAULT\nvalue. This restriction was lifted in MariaDB 10.2.1.\n\nExamples\n--------\n\nTrailing spaces:\n\nCREATE TABLE strtest (d TEXT(10));\nINSERT INTO strtest VALUES(\'Maria \');\n\nSELECT d=\'Maria\',d=\'Maria \' FROM strtest;\n+-----------+--------------+\n| d=\'Maria\' | d=\'Maria \' |\n+-----------+--------------+\n| 1 | 1 |\n+-----------+--------------+\n\nSELECT d LIKE \'Maria\',d LIKE \'Maria \' FROM strtest;\n+----------------+-------------------+\n| d LIKE \'Maria\' | d LIKE \'Maria \' |\n+----------------+-------------------+\n| 0 | 1 |\n+----------------+-------------------+\n\nIndexing\n--------\n\nTEXT columns can only be indexed over a specified length. This means that they\ncannot be used as the primary key of a table norm until MariaDB 10.4, can a\nunique index be created on them.\n\nMariaDB starting with 10.4\n--------------------------\nStarting with MariaDB 10.4, a unique index can be created on a TEXT column.\n\nInternally, this uses hash indexing to quickly check the values and if a hash\ncollision is found, the actual stored values are compared in order to retain\nthe uniqueness.\n\nDifference between VARCHAR and TEXT\n-----------------------------------\n\n* VARCHAR columns can be fully indexed. TEXT columns can only be indexed over\na specified length.\n* Using TEXT or BLOB in a SELECT query that uses temporary tables for storing\nintermediate results will force the temporary table to be disk based (using\nthe Aria storage engine instead of the memory storage engine, which is a bit\nslower. This is not that bad as the Aria storage engine caches the rows in\nmemory. To get the benefit of this, one should ensure that the\naria_pagecache_buffer_size variable is big enough to hold most of the row and\nindex data for temporary tables.\n\nFor Storage Engine Developers\n-----------------------------\n\n* Internally the full length of the VARCHAR column is allocated inside each\nTABLE objects record[] structure. As there are three such buffers, each open\ntable will allocate 3 times max-length-to-store-varchar bytes of memory.\n* TEXT and BLOB columns are stored with a pointer (4 or 8 bytes) + a 1-4 bytes\nlength. The TEXT data is only stored once. This means that internally TEXT\nuses less memory for each open table but instead has the additional overhead\nthat each TEXT object needs to be allocated and freed for each row access\n(with some caching in between).\n\nURL: https://mariadb.com/kb/en/text/','','https://mariadb.com/kb/en/text/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (285,23,'TINYBLOB','Syntax\n------\n\nTINYBLOB\n\nDescription\n-----------\n\nA BLOB column with a maximum length of 255 (28 - 1) bytes. Each TINYBLOB value\nis stored using a one-byte length prefix that indicates the number of bytes in\nthe value.\n\nURL: https://mariadb.com/kb/en/tinyblob/','','https://mariadb.com/kb/en/tinyblob/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (286,23,'TINYTEXT','Syntax\n------\n\nTINYTEXT [CHARACTER SET charset_name] [COLLATE collation_name]\n\nDescription\n-----------\n\nA TEXT column with a maximum length of 255 (28 - 1) characters. The effective\nmaximum length is less if the value contains multi-byte characters. Each\nTINYTEXT value is stored using a one-byte length prefix that indicates the\nnumber of bytes in the value.\n\nURL: https://mariadb.com/kb/en/tinytext/','','https://mariadb.com/kb/en/tinytext/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (287,23,'VARBINARY','Syntax\n------\n\nVARBINARY(M)\n\nDescription\n-----------\n\nThe VARBINARY type is similar to the VARCHAR type, but stores binary byte\nstrings rather than non-binary character strings. M represents the maximum\ncolumn length in bytes.\n\nIt contains no character set, and comparison and sorting are based on the\nnumeric value of the bytes.\n\nIf the maximum length is exceeded, and SQL strict mode is not enabled , the\nextra characters will be dropped with a warning. If strict mode is enabled, an\nerror will occur.\n\nUnlike BINARY values, VARBINARYs are not right-padded when inserting.\n\nOracle Mode\n-----------\n\nMariaDB starting with 10.3\n--------------------------\nIn Oracle mode from MariaDB 10.3, RAW is a synonym for VARBINARY.\n\nExamples\n--------\n\nInserting too many characters, first with strict mode off, then with it on:\n\nCREATE TABLE varbins (a VARBINARY(10));\n\nINSERT INTO varbins VALUES(\'12345678901\');\nQuery OK, 1 row affected, 1 warning (0.04 sec)\n\nSELECT * FROM varbins;\n+------------+\n| a |\n+------------+\n| 1234567890 |\n+------------+\n\nSET sql_mode=\'STRICT_ALL_TABLES\';\n\nINSERT INTO varbins VALUES(\'12345678901\');\nERROR 1406 (22001): Data too long for column \'a\' at row 1\n\nSorting is performed with the byte value:\n\nTRUNCATE varbins;\n\nINSERT INTO varbins VALUES(\'A\'),(\'B\'),(\'a\'),(\'b\');\n\nSELECT * FROM varbins ORDER BY a;\n+------+\n| a |\n+------+\n| A |\n| B |\n| a |\n| b |\n+------+\n\nUsing CAST to sort as a CHAR instead:\n\nSELECT * FROM varbins ORDER BY CAST(a AS CHAR);\n+------+\n| a |\n+------+\n| a |\n| A |\n| b |\n| B |\n+------+\n\nURL: https://mariadb.com/kb/en/varbinary/','','https://mariadb.com/kb/en/varbinary/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (288,23,'VARCHAR','Syntax\n------\n\n[NATIONAL] VARCHAR(M) [CHARACTER SET charset_name] [COLLATE collation_name]\n\nDescription\n-----------\n\nA variable-length string. M represents the maximum column length in\ncharacters. The range of M is 0 to 65,532. The effective maximum length of a\nVARCHAR is subject to the maximum row size and the character set used. For\nexample, utf8 characters can require up to three bytes per character, so a\nVARCHAR column that uses the utf8 character set can be declared to be a\nmaximum of 21,844 characters.\n\nNote: For the ColumnStore engine, M represents the maximum column length in\nbytes.\n\nMariaDB stores VARCHAR values as a one-byte or two-byte length prefix plus\ndata. The length prefix indicates the number of bytes in the value. A VARCHAR\ncolumn uses one length byte if values require no more than 255 bytes, two\nlength bytes if values may require more than 255 bytes.\n\nMariaDB follows the standard SQL specification, and does not remove trailing\nspaces from VARCHAR values.\n\nVARCHAR(0) columns can contain 2 values: an empty string or NULL. Such columns\ncannot be part of an index. The CONNECT storage engine does not support\nVARCHAR(0).\n\nVARCHAR is shorthand for CHARACTER VARYING. NATIONAL VARCHAR is the standard\nSQL way to define that a VARCHAR column should use some predefined character\nset. MariaDB uses utf8 as this predefined character set, as does MySQL 4.1 and\nup. NVARCHAR is shorthand for NATIONAL VARCHAR.\n\nBefore MariaDB 10.2, all MariaDB collations were of type PADSPACE, meaning\nthat VARCHAR (as well as CHAR and TEXT values) are compared without regard for\ntrailing spaces. This does not apply to the LIKE pattern-matching operator,\nwhich takes into account trailing spaces. From MariaDB 10.2, a number of NO\nPAD collations are available.\n\nIf a unique index consists of a column where trailing pad characters are\nstripped or ignored, inserts into that column where values differ only by the\nnumber of trailing pad characters will result in a duplicate-key error.\n\nExamples\n--------\n\nThe following are equivalent:\n\nVARCHAR(30) CHARACTER SET utf8\nNATIONAL VARCHAR(30)\nNVARCHAR(30)\nNCHAR VARCHAR(30)\nNATIONAL CHARACTER VARYING(30)\nNATIONAL CHAR VARYING(30)\n\nTrailing spaces:\n\nCREATE TABLE strtest (v VARCHAR(10));\nINSERT INTO strtest VALUES(\'Maria \');\n\nSELECT v=\'Maria\',v=\'Maria \' FROM strtest;\n+-----------+--------------+\n| v=\'Maria\' | v=\'Maria \' |\n+-----------+--------------+\n| 1 | 1 |\n+-----------+--------------+\n\nSELECT v LIKE \'Maria\',v LIKE \'Maria \' FROM strtest;\n+----------------+-------------------+\n| v LIKE \'Maria\' | v LIKE \'Maria \' |\n+----------------+-------------------+\n| 0 | 1 |\n+----------------+-------------------+\n\nTruncation\n----------\n\n* Depending on whether or not strict sql mode is set, you will either get a\nwarning or an error if you try to insert a string that is too long into a\nVARCHAR column. If the extra characters are spaces, the spaces that can\'t fit\nwill be removed and you will always get a warning, regardless of the sql mode\nsetting.\n\nDifference Between VARCHAR and TEXT\n-----------------------------------\n\n* VARCHAR columns can be fully indexed. TEXT columns can only be indexed over\na specified length.\n* Using TEXT or BLOB in a SELECT query that uses temporary tables for storing\nintermediate results will force the temporary table to be disk based (using\nthe Aria storage engine instead of the memory storage engine, which is a bit\nslower. This is not that bad as the Aria storage engine caches the rows in\nmemory. To get the benefit of this, one should ensure that the\naria_pagecache_buffer_size variable is big enough to hold most of the row and\nindex data for temporary tables.\n\nOracle Mode\n-----------\n\nMariaDB starting with 10.3\n--------------------------\nIn Oracle mode from MariaDB 10.3, VARCHAR2 is a synonym.\n\nFor Storage Engine Developers\n-----------------------------\n\n* Internally the full length of the VARCHAR column is allocated inside each\nTABLE objects record[] structure. As there are three such buffers, each open\ntable will allocate 3 times max-length-to-store-varchar bytes of memory.\n* TEXT and BLOB columns are stored with a pointer (4 or 8 bytes) + a 1-4 bytes\nlength. The TEXT data is only stored once. This means that internally TEXT\nuses less memory for each open table but instead has the additional overhead\nthat each TEXT object needs to be allocated and freed for each row access\n(with some caching in between).\n\nURL: https://mariadb.com/kb/en/varchar/','','https://mariadb.com/kb/en/varchar/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (289,23,'SET Data Type','Syntax\n------\n\nSET(\'value1\',\'value2\',...) [CHARACTER SET charset_name] [COLLATE\ncollation_name]\n\nDescription\n-----------\n\nA set. A string object that can have zero or more values, each of which must\nbe chosen from the list of values \'value1\', \'value2\', ... A SET column can\nhave a maximum of 64 members. SET values are represented internally as\nintegers.\n\nSET values cannot contain commas.\n\nIf a SET contains duplicate values, an error will be returned if strict mode\nis enabled, or a warning if strict mode is not enabled.\n\nURL: https://mariadb.com/kb/en/set-data-type/','','https://mariadb.com/kb/en/set-data-type/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (290,23,'UUID Data Type','MariaDB starting with 10.7.0\n----------------------------\nThe UUID data type was added in a MariaDB 10.7.0 preview.\n\nSyntax\n------\n\nUUID\n\nDescription\n-----------\n\nThe UUID data type is intended for the storage of 128-bit UUID (Universally\nUnique Identifier) data. See the UUID function page for more details on UUIDs\nthemselves.\n\nRetrieval\n---------\n\nData retrieved by this data type is in the string representation defined in\nRFC4122.\n\nCasting\n-------\n\nString literals of hexadecimal characters and CHAR/VARCHAR/TEXT can be cast to\nthe UUID data type. Likewise hexadecimal literals, binary-literals, and\nBINARY/VARBINARY/BLOB types can also be cast to UUID.\n\nThe data type will not accept a short UUID generated with the UUID_SHORT\nfunction, but will accept a value without the - character generated by the\nSYS_GUID function (or inserted directly). Hyphens can be partially omitted as\nwell, or included after any group of two digits.\n\nThe type does not accept UUIDs in braces, permitted by some implementations.\n\nStorage\n-------\n\nUUID are stored in an index friendly manner, the order of a UUID of\nllllllll-mmmm-Vhhh-vsss-nnnnnnnnnnnn is stored as:\n\nnnnnnnnnnnnn-vsss-Vhhh-mmmm-llllllll\n\nThis provides a sorting order, if a UUIDv1 (node and timestamp) is used, of\nthe node, followed by the timestamp.\n\nExamples\n--------\n\nCREATE TABLE t1 (id UUID);\n\nDirectly Inserting via string literals:\n\nINSERT INTO t1 VALUES(\'123e4567-e89b-12d3-a456-426655440000\');\n\nDirectly Inserting via hexadecimal literals:\n\nINSERT INTO t1 VALUES (x\'fffffffffffffffffffffffffffffffe\');\n\nGenerating and inserting via the UUID function.\n\nINSERT INTO t1 VALUES (UUID());\n\nRetrieval:\n\nSELECT * FROM t1;\n+--------------------------------------+\n| id |\n+--------------------------------------+\n| 123e4567-e89b-12d3-a456-426655440000 |\n| ffffffff-ffff-ffff-ffff-fffffffffffe |\n| 93aac041-1a14-11ec-ab4e-f859713e4be4 |\n+--------------------------------------+\n\nThe UUID_SHORT function does not generate valid full-length UUID:\n\nINSERT INTO t1 VALUES (UUID_SHORT());\nERROR 1292 (22007): Incorrect uuid value: \'99440417627439104\' \n for column `test`.`t1`.`id` at row 1\n\nAccepting a value without the - character, either directly or generated by the\nSYS_GUID function:\n\nINSERT INTO t1 VALUES (SYS_GUID());\n\nSELECT * FROM t1;\n+--------------------------------------+\n| id |\n+--------------------------------------+\n| 123e4567-e89b-12d3-a456-426655440000 |\n| ffffffff-ffff-ffff-ffff-fffffffffffe |\n| 93aac041-1a14-11ec-ab4e-f859713e4be4 |\n| ea0368d3-1a14-11ec-ab4e-f859713e4be4 |\n+--------------------------------------+\n\nSELECT SYS_GUID();\n+----------------------------------+\n| SYS_GUID() |\n+----------------------------------+\n| ff5b6bcc1a1411ecab4ef859713e4be4 |\n+----------------------------------+\n\nINSERT INTO t1 VALUES (\'ff5b6bcc1a1411ecab4ef859713e4be4\');\n\nSELECT * FROM t1;\n+--------------------------------------+\n| id |\n+--------------------------------------+\n| 123e4567-e89b-12d3-a456-426655440000 |\n| ffffffff-ffff-ffff-ffff-fffffffffffe |\n| 93aac041-1a14-11ec-ab4e-f859713e4be4 |\n| ea0368d3-1a14-11ec-ab4e-f859713e4be4 |\n| ff5b6bcc-1a14-11ec-ab4e-f859713e4be4 |\n+--------------------------------------+\n\nValid and invalid hyphen and brace usage:\n\nTRUNCATE t1;\n\nINSERT INTO t1 VALUES (\'f8aa-ed66-1a1b-11ec-ab4e-f859-713e-4be4\');\n\nINSERT INTO t1 VALUES (\'1b80667f1a1c-11ecab4ef859713e4be4\');\n\nINSERT INTO t1 VALUES (\'2fd6c945-1a-1c-11ec-ab4e-f859713e4be4\');\n\nINSERT INTO t1 VALUES (\'49-c9-f9-59-1a-1c-11ec-ab4e-f859713e4be4\');\n\nINSERT INTO t1 VALUES (\'57-96-da-c1-1a-1c-11-ec-ab-4e-f8-59-71-3e-4b-e4\');\n\nINSERT INTO t1 VALUES (\'6-eb74f8f-1a1c-11ec-ab4e-f859713e4be4\');\n\nINSERT INTO t1 VALUES (\'{29bad136-1a1d-11ec-ab4e-f859713e4be4}\');\nERROR 1292 (22007): Incorrect uuid value:\n\'{29bad136-1a1d-11ec-ab4e-f859713e4be4}\' \n for column `test`.`t1`.`id` at row 1\n\nSELECT * FROM t1;\n+--------------------------------------+\n| id |\n+--------------------------------------+\n| f8aaed66-1a1b-11ec-ab4e-f859713e4be4 |\n| 1b80667f-1a1c-11ec-ab4e-f859713e4be4 |\n| 2fd6c945-1a1c-11ec-ab4e-f859713e4be4 |\n| 49c9f959-1a1c-11ec-ab4e-f859713e4be4 |\n| 5796dac1-1a1c-11ec-ab4e-f859713e4be4 |\n| 6eb74f8f-1a1c-11ec-ab4e-f859713e4be4 |\n+--------------------------------------+\n\nURL: https://mariadb.com/kb/en/uuid-data-type/','','https://mariadb.com/kb/en/uuid-data-type/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (291,23,'DATE','Syntax\n------\n\nDATE\n\nDescription\n-----------\n\nA date. The supported range is \'1000-01-01\' to \'9999-12-31\'. MariaDB displays\nDATE values in \'YYYY-MM-DD\' format, but can be assigned dates in looser\nformats, including strings or numbers, as long as they make sense. These\ninclude a short year, YY-MM-DD, no delimiters, YYMMDD, or any other acceptable\ndelimiter, for example YYYY/MM/DD. For details, see date and time literals.\n\n\'0000-00-00\' is a permitted special value (zero-date), unless the NO_ZERO_DATE\nSQL_MODE is used. Also, individual components of a date can be set to 0 (for\nexample: \'2015-00-12\'), unless the NO_ZERO_IN_DATE SQL_MODE is used. In many\ncases, the result of en expression involving a zero-date, or a date with\nzero-parts, is NULL. If the ALLOW_INVALID_DATES SQL_MODE is enabled, if the\nday part is in the range between 1 and 31, the date does not produce any\nerror, even for months that have less than 31 days.\n\nOracle Mode\n-----------\n\nMariaDB starting with 10.3\n--------------------------\nIn Oracle mode from MariaDB 10.3, DATE with a time portion is a synonym for\nDATETIME. See also mariadb_schema.\n\nExamples\n--------\n\nCREATE TABLE t1 (d DATE);\n\nINSERT INTO t1 VALUES (\"2010-01-12\"), (\"2011-2-28\"), (\'120314\'),(\'13*04*21\');\n\nSELECT * FROM t1;\n+------------+\n| d |\n+------------+\n| 2010-01-12 |\n| 2011-02-28 |\n| 2012-03-14 |\n| 2013-04-21 |\n+------------+\n\nURL: https://mariadb.com/kb/en/date/','','https://mariadb.com/kb/en/date/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (292,23,'TIME','Syntax\n------\n\nTIME [(<microsecond precision>)]\n\nDescription\n-----------\n\nA time. The range is \'-838:59:59.999999\' to \'838:59:59.999999\'. Microsecond\nprecision can be from 0-6; if not specified 0 is used. Microseconds have been\navailable since MariaDB 5.3.\n\nMariaDB displays TIME values in \'HH:MM:SS.ssssss\' format, but allows\nassignment of times in looser formats, including \'D HH:MM:SS\', \'HH:MM:SS\',\n\'HH:MM\', \'D HH:MM\', \'D HH\', \'SS\', or \'HHMMSS\', as well as permitting dropping\nof any leading zeros when a delimiter is provided, for example \'3:9:10\'. For\ndetails, see date and time literals.\n\nMariaDB starting with 10.1.2\n----------------------------\nMariaDB 10.1.2 introduced the --mysql56-temporal-format option, on by default,\nwhich allows MariaDB to store TIMEs using the same low-level format MySQL 5.6\nuses.\n\nInternal Format\n---------------\n\nIn MariaDB 10.1.2 a new temporal format was introduced from MySQL 5.6 that\nalters how the TIME, DATETIME and TIMESTAMP columns operate at lower levels.\nThese changes allow these temporal data types to have fractional parts and\nnegative values. You can disable this feature using the\nmysql56_temporal_format system variable.\n\nTables that include TIMESTAMP values that were created on an older version of\nMariaDB or that were created while the mysql56_temporal_format system variable\nwas disabled continue to store data using the older data type format.\n\nIn order to update table columns from the older format to the newer format,\nexecute an ALTER TABLE... MODIFY COLUMN statement that changes the column to\nthe *same* data type. This change may be needed if you want to export the\ntable\'s tablespace and import it onto a server that has\nmysql56_temporal_format=ON set (see MDEV-15225).\n\nFor instance, if you have a TIME column in your table:\n\nSHOW VARIABLES LIKE \'mysql56_temporal_format\';\n\n+-------------------------+-------+\n| Variable_name | Value |\n+-------------------------+-------+\n| mysql56_temporal_format | ON |\n+-------------------------+-------+\n\nALTER TABLE example_table MODIFY ts_col TIME;\n\nWhen MariaDB executes the ALTER TABLE statement, it converts the data from the\nolder temporal format to the newer one.\n\nIn the event that you have several tables and columns using temporal data\ntypes that you want to switch over to the new format, make sure the system\nvariable is enabled, then perform a dump and restore using mysqldump. The\ncolumns using relevant temporal data types are restored using the new temporal\nformat.\n\nStarting from MariaDB 10.5.1 columns with old temporal formats are marked with\na /* mariadb-5.3 */ comment in the output of SHOW CREATE TABLE, SHOW COLUMNS,\nDESCRIBE statements, as well as in the COLUMN_TYPE column of the\nINFORMATION_SCHEMA.COLUMNS Table.\n\nSHOW CREATE TABLE mariadb5312_time\\G\n*************************** 1. row ***************************\n Table: mariadb5312_time\nCreate Table: CREATE TABLE `mariadb5312_time` (\n `t0` time /* mariadb-5.3 */ DEFAULT NULL,\n `t6` time(6) /* mariadb-5.3 */ DEFAULT NULL\n) ENGINE=MyISAM DEFAULT CHARSET=latin1\n\nNote, columns with the current format are not marked with a comment.\n\nExamples\n--------\n\nINSERT INTO time VALUES (\'90:00:00\'), (\'800:00:00\'), (800), (22), (151413),\n(\'9:6:3\'), (\'12 09\');\n\nSELECT * FROM time;\n+-----------+\n| t |\n+-----------+\n| 90:00:00 |\n| 800:00:00 |\n| 00:08:00 |\n| 00:00:22 |\n| 15:14:13 |\n| 09:06:03 |\n| 297:00:00 |\n+-----------+\n\nURL: https://mariadb.com/kb/en/time/','','https://mariadb.com/kb/en/time/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (293,23,'DATETIME','Syntax\n------\n\nDATETIME [(microsecond precision)]\n\nDescription\n-----------\n\nA date and time combination.\n\nMariaDB displays DATETIME values in \'YYYY-MM-DD HH:MM:SS.ffffff\' format, but\nallows assignment of values to DATETIME columns using either strings or\nnumbers. For details, see date and time literals.\n\nDATETIME columns also accept CURRENT_TIMESTAMP as the default value.\n\nMariaDB 10.1.2 introduced the --mysql56-temporal-format option, on by default,\nwhich allows MariaDB to store DATETMEs using the same low-level format MySQL\n5.6 uses. For more information, see Internal Format, below.\n\nFor storage requirements, see Data Type Storage Requirements.\n\nSupported Values\n----------------\n\nMariaDB stores values that use the DATETIME data type in a format that\nsupports values between 1000-01-01 00:00:00.000000 and 9999-12-31\n23:59:59.999999.\n\nMariaDB can also store microseconds with a precision between 0 and 6. If no\nmicrosecond precision is specified, then 0 is used by default.\n\nMariaDB also supports \'0000-00-00\' as a special zero-date value, unless\nNO_ZERO_DATE is specified in the SQL_MODE. Similarly, individual components of\na date can be set to 0 (for example: \'2015-00-12\'), unless NO_ZERO_IN_DATE is\nspecified in the SQL_MODE. In many cases, the result of en expression\ninvolving a zero-date, or a date with zero-parts, is NULL. If the\nALLOW_INVALID_DATES SQL_MODE is enabled, if the day part is in the range\nbetween 1 and 31, the date does not produce any error, even for months that\nhave less than 31 days.\n\nTime Zones\n----------\n\nIf a column uses the DATETIME data type, then any inserted values are stored\nas-is, so no automatic time zone conversions are performed.\n\nMariaDB also does not currently support time zone literals that contain time\nzone identifiers. See MDEV-11829 for more information.\n\nMariaDB validates DATETIME literals against the session\'s time zone. For\nexample, if a specific time range never occurred in a specific time zone due\nto daylight savings time, then DATETIME values within that range would be\ninvalid for that time zone.\n\nFor example, daylight savings time started on March 10, 2019 in the US, so the\ntime range between 02:00:00 and 02:59:59 is invalid for that day in US time\nzones:\n\nSET time_zone = \'America/New_York\';\nQuery OK, 0 rows affected (0.000 sec)\n\nINSERT INTO timestamp_test VALUES (\'2019-03-10 02:55:05\');\nERROR 1292 (22007): Incorrect datetime value: \'2019-03-10 02:55:05\' for column\n`db1`.`timestamp_test`.`timestamp_test` at row 1\n\nBut that same time range is fine in other time zones, such as Coordinated\nUniversal Time (UTC). For example:\n\nSET time_zone = \'UTC\';\nQuery OK, 0 rows affected (0.000 sec)\n\nINSERT INTO timestamp_test VALUES (\'2019-03-10 02:55:05\');\nQuery OK, 1 row affected (0.002 sec)\n\nOracle Mode\n-----------\n\nMariaDB starting with 10.3\n--------------------------\nIn Oracle mode from MariaDB 10.3, DATE with a time portion is a synonym for\nDATETIME. See also mariadb_schema.\n\nInternal Format\n---------------\n\nIn MariaDB 10.1.2 a new temporal format was introduced from MySQL 5.6 that\nalters how the TIME, DATETIME and TIMESTAMP columns operate at lower levels.\nThese changes allow these temporal data types to have fractional parts and\nnegative values. You can disable this feature using the\nmysql56_temporal_format system variable.\n\nTables that include TIMESTAMP values that were created on an older version of\nMariaDB or that were created while the mysql56_temporal_format system variable\nwas disabled continue to store data using the older data type format.\n\nIn order to update table columns from the older format to the newer format,\nexecute an ALTER TABLE... MODIFY COLUMN statement that changes the column to\nthe *same* data type. This change may be needed if you want to export the\ntable\'s tablespace and import it onto a server that has\nmysql56_temporal_format=ON set (see MDEV-15225).\n\nFor instance, if you have a DATETIME column in your table:\n\nSHOW VARIABLES LIKE \'mysql56_temporal_format\';\n\n+-------------------------+-------+\n| Variable_name | Value |\n+-------------------------+-------+\n| mysql56_temporal_format | ON |\n+-------------------------+-------+\n\nALTER TABLE example_table MODIFY ts_col DATETIME;\n\nWhen MariaDB executes the ALTER TABLE statement, it converts the data from the\nolder temporal format to the newer one.\n\nIn the event that you have several tables and columns using temporal data\ntypes that you want to switch over to the new format, make sure the system\nvariable is enabled, then perform a dump and restore using mysqldump. The\ncolumns using relevant temporal data types are restored using the new temporal\nformat.\n\nStarting from MariaDB 10.5.1 columns with old temporal formats are marked with\na /* mariadb-5.3 */ comment in the output of SHOW CREATE TABLE, SHOW COLUMNS,\nDESCRIBE statements, as well as in the COLUMN_TYPE column of the\nINFORMATION_SCHEMA.COLUMNS Table.\n\nSHOW CREATE TABLE mariadb5312_datetime\\G\n*************************** 1. row ***************************\n Table: mariadb5312_datetime\nCreate Table: CREATE TABLE `mariadb5312_datetime` (\n `dt0` datetime /* mariadb-5.3 */ DEFAULT NULL,\n `dt6` datetime(6) /* mariadb-5.3 */ DEFAULT NULL\n) ENGINE=MyISAM DEFAULT CHARSET=latin1\n\nExamples\n--------\n\nCREATE TABLE t1 (d DATETIME);\n\nINSERT INTO t1 VALUES (\"2011-03-11\"), (\"2012-04-19 13:08:22\"),\n (\"2013-07-18 13:44:22.123456\");\n\nSELECT * FROM t1;\n+---------------------+\n| d |\n+---------------------+\n| 2011-03-11 00:00:00 |\n| 2012-04-19 13:08:22 |\n| 2013-07-18 13:44:22 |\n+---------------------+\n\nCREATE TABLE t2 (d DATETIME(6));\n\nINSERT INTO t2 VALUES (\"2011-03-11\"), (\"2012-04-19 13:08:22\"),\n (\"2013-07-18 13:44:22.123456\");\n\nSELECT * FROM t2;\n+----------------------------+\n| d |\n+----------------------------+\n| 2011-03-11 00:00:00.000000 |\n| 2012-04-19 13:08:22.000000 |\n| 2013-07-18 13:44:22.123456 |\n+----------------------------++\n\nStrings used in datetime context are automatically converted to datetime(6).\nIf you want to have a datetime without seconds, you should use\nCONVERT(..,datetime).\n\nSELECT CONVERT(\'2007-11-30 10:30:19\',datetime);\n+-----------------------------------------+\n| CONVERT(\'2007-11-30 10:30:19\',datetime) |\n+-----------------------------------------+\n| 2007-11-30 10:30:19 |\n+-----------------------------------------+\n\nSELECT CONVERT(\'2007-11-30 10:30:19\',datetime(6));\n+--------------------------------------------+\n| CONVERT(\'2007-11-30 10:30:19\',datetime(6)) |\n+--------------------------------------------+\n| 2007-11-30 10:30:19.000000 |\n+--------------------------------------------+\n\nURL: https://mariadb.com/kb/en/datetime/','','https://mariadb.com/kb/en/datetime/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (294,23,'TIMESTAMP','Syntax\n------\n\nTIMESTAMP [(<microsecond precision)]\n\nDescription\n-----------\n\nA timestamp in the format YYYY-MM-DD HH:MM:SS.ffffff.\n\nThe timestamp field is generally used to define at which moment in time a row\nwas added or updated and by default will automatically be assigned the current\ndatetime when a record is inserted or updated. The automatic properties only\napply to the first TIMESTAMP in the record; subsequent TIMESTAMP columns will\nnot be changed.\n\nMariaDB includes the --mysql56-temporal-format option, on by default, which\nallows MariaDB to store TIMESTAMPs using the same low-level format MySQL 5.6\nuses.\n\nFor more information, see Internal Format.\n\nSupported Values\n----------------\n\nMariaDB stores values that use the TIMESTAMP data type as the number of\nseconds since \'1970-01-01 00:00:00\' (UTC). This means that the TIMESTAMP data\ntype can hold values between \'1970-01-01 00:00:01\' (UTC) and \'2038-01-19\n03:14:07\' (UTC).\n\nMariaDB can also store microseconds with a precision between 0 and 6. If no\nmicrosecond precision is specified, then 0 is used by default.\n\nAutomatic Values\n----------------\n\nMariaDB has special behavior for the first column that uses the TIMESTAMP data\ntype in a specific table. For the first column that uses the TIMESTAMP data\ntype in a specific table, MariaDB automatically assigns the following\nproperties to the column:\n\n* DEFAULT CURRENT_TIMESTAMP\n* ON UPDATE CURRENT_TIMESTAMP\n\nThis means that if the column is not explicitly assigned a value in an INSERT\nor UPDATE query, then MariaDB will automatically initialize the column\'s value\nwith the current date and time.\n\nThis automatic initialization for INSERT and UPDATE queries can also be\nexplicitly enabled for a column that uses the TIMESTAMP data type by\nspecifying the DEFAULT CURRENT_TIMESTAMP and ON UPDATE CURRENT_TIMESTAMP\nclauses for the column. In these clauses, any synonym of CURRENT_TIMESTAMP is\naccepted, including CURRENT_TIMESTAMP(), NOW(), LOCALTIME, LOCALTIME(),\nLOCALTIMESTAMP, and LOCALTIMESTAMP().\n\nThis automatic initialization for INSERT queries can also be explicitly\ndisabled for a column that uses the TIMESTAMP data type by specifying a\nconstant DEFAULT value. For example, DEFAULT 0.\n\nThis automatic initialization for UPDATE queries can also be explicitly\ndisabled for a column that uses the TIMESTAMP data type by specifying a\nDEFAULT clause for the column, but no ON UPDATE clause. If a DEFAULT clause is\nexplicitly specified for a column that uses the TIMESTAMP data type, but an ON\nUPDATE clause is not specified for the column, then the timestamp value will\nnot automatically change when an UPDATE statement is executed.\n\nMariaDB also has special behavior if NULL is assigned to column that uses the\nTIMESTAMP data type. If the column is assigned the NULL value in an INSERT or\nUPDATE query, then MariaDB will automatically initialize the column\'s value\nwith the current date and time. For details, see NULL values in MariaDB.\n\nThis automatic initialization for NULL values can also be explicitly disabled\nfor a column that uses the TIMESTAMP data type by specifying the NULL\nattribute for the column. In this case, if the column\'s value is set to NULL,\nthen the column\'s value will actually be set to NULL.\n\nTime Zones\n----------\n\nIf a column uses the TIMESTAMP data type, then any inserted values are\nconverted from the session\'s time zone to Coordinated Universal Time (UTC)\nwhen stored, and converted back to the session\'s time zone when retrieved.\n\nMariaDB does not currently store any time zone identifier with the value of\nthe TIMESTAMP data type. See MDEV-10018 for more information.\n\nMariaDB does not currently support time zone literals that contain time zone\nidentifiers. See MDEV-11829 for more information.\n\nLimitations\n-----------\n\n* Because the TIMESTAMP value is stored as Epoch Seconds, the timestamp value\n\'1970-01-01 00:00:00\' (UTC) is reserved since the second #0 is used to\nrepresent \'0000-00-00 00:00:00\'.\n* In MariaDB 5.5 and before there could only be one TIMESTAMP column per table\nthat had CURRENT_TIMESTAMP defined as its default value. This limit has no\nlonger applied since MariaDB 10.0.\n\nSQL_MODE=MAXDB\n--------------\n\nIf the SQL_MODE is set to MAXDB, TIMESTAMP fields will be silently converted\nto DATETIME.\n\nInternal Format\n---------------\n\nIn MariaDB 10.1.2 a new temporal format was introduced from MySQL 5.6 that\nalters how the TIME, DATETIME and TIMESTAMP columns operate at lower levels.\nThese changes allow these temporal data types to have fractional parts and\nnegative values. You can disable this feature using the\nmysql56_temporal_format system variable.\n\nTables that include TIMESTAMP values that were created on an older version of\nMariaDB or that were created while the mysql56_temporal_format system variable\nwas disabled continue to store data using the older data type format.\n\nIn order to update table columns from the older format to the newer format,\nexecute an ALTER TABLE... MODIFY COLUMN statement that changes the column to\nthe *same* data type. This change may be needed if you want to export the\ntable\'s tablespace and import it onto a server that has\nmysql56_temporal_format=ON set (see MDEV-15225).\n\nFor instance, if you have a TIMESTAMP column in your table:\n\nSHOW VARIABLES LIKE \'mysql56_temporal_format\';\n\n+-------------------------+-------+\n| Variable_name | Value |\n+-------------------------+-------+\n| mysql56_temporal_format | ON |\n+-------------------------+-------+\n\nALTER TABLE example_table MODIFY ts_col TIMESTAMP;\n\nWhen MariaDB executes the ALTER TABLE statement, it converts the data from the\nolder temporal format to the newer one.\n\nIn the event that you have several tables and columns using temporal data\ntypes that you want to switch over to the new format, make sure the system\nvariable is enabled, then perform a dump and restore using mysqldump. The\ncolumns using relevant temporal data types are restored using the new temporal\nformat.\n\nStarting from MariaDB 10.5.1 columns with old temporal formats are marked with\na /* mariadb-5.3 */ comment in the output of SHOW CREATE TABLE, SHOW COLUMNS,\nDESCRIBE statements, as well as in the COLUMN_TYPE column of the\nINFORMATION_SCHEMA.COLUMNS Table.\n\nSHOW CREATE TABLE mariadb5312_timestamp\\G\n*************************** 1. row ***************************\n Table: mariadb5312_timestamp\nCreate Table: CREATE TABLE `mariadb5312_timestamp` (\n `ts0` timestamp /* mariadb-5.3 */ NOT NULL DEFAULT current_timestamp() ON\nUPDATE current_timestamp(),\n `ts6` timestamp(6) /* mariadb-5.3 */ NOT NULL DEFAULT \'0000-00-00\n00:00:00.000000\'\n) ENGINE=MyISAM DEFAULT CHARSET=latin1\n\nNote: Prior to MySQL 4.1 a different format for the TIMESTAMP datatype was\nused. This format is unsupported in MariaDB 5.1 and upwards.\n\nExamples\n--------\n\nCREATE TABLE t (id INT, ts TIMESTAMP);\n\nDESC t;\n+-------+-----------+------+-----+-------------------+-------------------------\n---+\n| Field | Type | Null | Key | Default | Extra \n |\n+-------+-----------+------+-----+-------------------+-------------------------\n---+\n| id | int(11) | YES | | NULL | \n |\n| ts | timestamp | NO | | CURRENT_TIMESTAMP | on update\nCURRENT_TIMESTAMP |\n+-------+-----------+------+-----+-------------------+-------------------------\n---+\n\nINSERT INTO t(id) VALUES (1),(2);\n\nSELECT * FROM t;\n+------+---------------------+\n| id | ts |\n+------+---------------------+\n| 1 | 2013-07-22 12:50:05 |\n| 2 | 2013-07-22 12:50:05 |\n+------+---------------------+\n\nINSERT INTO t VALUES (3,NULL),(4,\'2001-07-22 12:12:12\');\n\nSELECT * FROM t;\n+------+---------------------+\n| id | ts |\n+------+---------------------+\n| 1 | 2013-07-22 12:50:05 |\n| 2 | 2013-07-22 12:50:05 |\n| 3 | 2013-07-22 12:51:56 |\n| 4 | 2001-07-22 12:12:12 |\n+------+---------------------+\n\nConverting to Unix epoch:\n\nSELECT ts, UNIX_TIMESTAMP(ts) FROM t;\n+---------------------+--------------------+\n| ts | UNIX_TIMESTAMP(ts) |\n+---------------------+--------------------+\n| 2013-07-22 12:50:05 | 1374490205 |\n| 2013-07-22 12:50:05 | 1374490205 |\n| 2013-07-22 12:51:56 | 1374490316 |\n| 2001-07-22 12:12:12 | 995796732 |\n+---------------------+--------------------+\n\nUpdate also changes the timestamp:\n\nUPDATE t set id=5 WHERE id=1;\n\nSELECT * FROM t;\n+------+---------------------+\n| id | ts |\n+------+---------------------+\n| 5 | 2013-07-22 14:52:33 |\n| 2 | 2013-07-22 12:50:05 |\n| 3 | 2013-07-22 12:51:56 |\n| 4 | 2001-07-22 12:12:12 |\n+------+---------------------+\n\nDefault NULL:\n\nCREATE TABLE t2 (id INT, ts TIMESTAMP NULL ON UPDATE CURRENT_TIMESTAMP);\n\nINSERT INTO t(id) VALUES (1),(2);\n\nSELECT * FROM t2;\n\nINSERT INTO t2(id) VALUES (1),(2);\n\nSELECT * FROM t2;\n+------+------+\n| id | ts |\n+------+------+\n| 1 | NULL |\n| 2 | NULL |\n+------+------+\n\nUPDATE t2 SET id=3 WHERE id=1;\n\nSELECT * FROM t2;\n+------+---------------------+\n| id | ts |\n+------+---------------------+\n| 3 | 2013-07-22 15:32:22 |\n| 2 | NULL |\n+------+---------------------+\n\nOnly the first timestamp is automatically inserted and updated:\n\nCREATE TABLE t3 (id INT, ts1 TIMESTAMP, ts2 TIMESTAMP);\n\nINSERT INTO t3(id) VALUES (1),(2);\n\nSELECT * FROM t3;\n+------+---------------------+---------------------+\n| id | ts1 | ts2 |\n+------+---------------------+---------------------+\n| 1 | 2013-07-22 15:35:07 | 0000-00-00 00:00:00 |\n| 2 | 2013-07-22 15:35:07 | 0000-00-00 00:00:00 |\n+------+---------------------+---------------------+\n\nDESC t3;\n+-------+-----------+------+-----+---------------------+-----------------------\n-----+\n| Field | Type | Null | Key | Default | Extra \n |\n+-------+-----------+------+-----+---------------------+-----------------------\n-----+\n| id | int(11) | YES | | NULL | \n |\n| ts1 | timestamp | NO | | CURRENT_TIMESTAMP | on update\nCURRENT_TIMESTAMP |\n| ts2 | timestamp | NO | | 0000-00-00 00:00:00 | \n |\n+-------+-----------+------+-----+---------------------+-----------------------\n-----+\n\nExplicitly setting a timestamp with the CURRENT_TIMESTAMP function:\n\nINSERT INTO t3(id,ts2) VALUES (3,CURRENT_TIMESTAMP());\n\nSELECT * FROM t3;\n+------+---------------------+---------------------+\n| id | ts1 | ts2 |\n+------+---------------------+---------------------+\n| 1 | 2013-07-22 15:35:07 | 0000-00-00 00:00:00 |\n| 2 | 2013-07-22 15:35:07 | 0000-00-00 00:00:00 |\n| 3 | 2013-07-22 15:38:52 | 2013-07-22 15:38:52 |\n+------+---------------------+---------------------+\n\nSpecifying the timestamp as NOT NULL:\n\nCREATE TABLE t4 (id INT, ts TIMESTAMP NOT NULL);\n\nINSERT INTO t4(id) VALUES (1);\nSELECT SLEEP(1);\nINSERT INTO t4(id,ts) VALUES (2,NULL);\n\nSELECT * FROM t4;\n\nURL: https://mariadb.com/kb/en/timestamp/','','https://mariadb.com/kb/en/timestamp/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (295,23,'YEAR Data Type','Syntax\n------\n\nYEAR[(4)]\n\nDescription\n-----------\n\nA year in two-digit or four-digit format. The default is four-digit format.\nNote that the two-digit format has been deprecated since MariaDB 5.5.27.\n\nIn four-digit format, the allowable values are 1901 to 2155, and 0000. In\ntwo-digit format, the allowable values are 70 to 69, representing years from\n1970 to 2069. MariaDB displays YEAR values in YYYY format, but allows you to\nassign values to YEAR columns using either strings or numbers.\n\nInserting numeric zero has a different result for YEAR(4) and YEAR(2). For\nYEAR(2), the value 00 reflects the year 2000. For YEAR(4), the value 0000\nreflects the year zero. This only applies to numeric zero. String zero always\nreflects the year 2000.\n\nExamples\n--------\n\nAccepting a string or a number:\n\nCREATE TABLE y(y YEAR);\n\nINSERT INTO y VALUES (1990),(\'2012\');\n\nSELECT * FROM y;\n+------+\n| y |\n+------+\n| 1990 |\n| 2012 |\n+------+\n\nWith strict_mode set, the default from MariaDB 10.2.4:\n\nOut of range:\n\nINSERT INTO y VALUES (1005),(\'3080\');\nERROR 1264 (22003): Out of range value for column \'y\' at row 1\n\nINSERT INTO y VALUES (\'2013-12-12\');\nERROR 1265 (01000): Data truncated for column \'y\' at row 1\n\nSELECT * FROM y;\n+------+\n| y |\n+------+\n| 1990 |\n| 2012 |\n+------+\n\nWith strict_mode unset, the default until MariaDB 10.2.3:\n\nOut of range:\n\nINSERT INTO y VALUES (1005),(\'3080\');\nQuery OK, 2 rows affected, 2 warnings (0.05 sec)\nRecords: 2 Duplicates: 0 Warnings: 2\n\nSHOW WARNINGS;\n+---------+------+--------------------------------------------+\n| Level | Code | Message |\n+---------+------+--------------------------------------------+\n| Warning | 1264 | Out of range value for column \'y\' at row 1 |\n| Warning | 1264 | Out of range value for column \'y\' at row 2 |\n+---------+------+--------------------------------------------+\n\nSELECT * FROM y;\n+------+\n| y |\n+------+\n| 1990 |\n| 2012 |\n| 0000 |\n| 0000 |\n+------+\n\nTruncating:\n\nINSERT INTO y VALUES (\'2013-12-12\');\nQuery OK, 1 row affected, 1 warning (0.05 sec)\n\nSHOW WARNINGS;\n+---------+------+----------------------------------------+\n| Level | Code | Message |\n+---------+------+----------------------------------------+\n| Warning | 1265 | Data truncated for column \'y\' at row 1 |\n+---------+------+----------------------------------------+\n\nSELECT * FROM y;\n+------+\n| y |\n+------+\n| 1990 |\n| 2012 |\n| 0000 |\n| 0000 |\n| 2013 |\n+------+\n\nDifference between YEAR(2) and YEAR(4), and string and numeric zero:\n\nCREATE TABLE y2(y YEAR(4), y2 YEAR(2));\nQuery OK, 0 rows affected, 1 warning (0.40 sec)\n\nNote (Code 1287): \'YEAR(2)\' is deprecated and will be removed in a future\nrelease. \n Please use YEAR(4) instead\n\nINSERT INTO y2 VALUES(0,0),(\'0\',\'0\');\n\nSELECT YEAR(y),YEAR(y2) FROM y2;\n+---------+----------+\n| YEAR(y) | YEAR(y2) |\n+---------+----------+\n| 0 | 2000 |\n| 2000 | 2000 |\n+---------+----------+\n\nURL: https://mariadb.com/kb/en/year-data-type/','','https://mariadb.com/kb/en/year-data-type/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (296,23,'AUTO_INCREMENT','Description\n-----------\n\nThe AUTO_INCREMENT attribute can be used to generate a unique identity for new\nrows. When you insert a new record to the table (or upon adding an\nAUTO_INCREMENT attribute with the ALTER TABLE statement), and the\nauto_increment field is NULL or DEFAULT (in the case of an INSERT), the value\nwill automatically be incremented. This also applies to 0, unless the\nNO_AUTO_VALUE_ON_ZERO SQL_MODE is enabled.\n\nAUTO_INCREMENT columns start from 1 by default. The automatically generated\nvalue can never be lower than 0.\n\nEach table can have only one AUTO_INCREMENT column. It must defined as a key\n(not necessarily the PRIMARY KEY or UNIQUE key). In some storage engines\n(including the default InnoDB), if the key consists of multiple columns, the\nAUTO_INCREMENT column must be the first column. Storage engines that permit\nthe column to be placed elsewhere are Aria, MyISAM, MERGE, Spider, TokuDB,\nBLACKHOLE, FederatedX and Federated.\n\nCREATE TABLE animals (\n id MEDIUMINT NOT NULL AUTO_INCREMENT,\n name CHAR(30) NOT NULL,\n PRIMARY KEY (id)\n );\n\nINSERT INTO animals (name) VALUES\n (\'dog\'),(\'cat\'),(\'penguin\'),\n (\'fox\'),(\'whale\'),(\'ostrich\');\n\nSELECT * FROM animals;\n+----+---------+\n| id | name |\n+----+---------+\n| 1 | dog |\n| 2 | cat |\n| 3 | penguin |\n| 4 | fox |\n| 5 | whale |\n| 6 | ostrich |\n+----+---------+\n\nSERIAL is an alias for BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE.\n\nCREATE TABLE t (id SERIAL, c CHAR(1)) ENGINE=InnoDB;\n\nSHOW CREATE TABLE t \\G\n*************************** 1. row ***************************\n Table: t\nCreate Table: CREATE TABLE `t` (\n `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,\n `c` char(1) DEFAULT NULL,\n UNIQUE KEY `id` (`id`)\n) ENGINE=InnoDB DEFAULT CHARSET=latin1\n\nSetting or Changing the Auto_Increment Value\n--------------------------------------------\n\nYou can use an ALTER TABLE statement to assign a new value to the\nauto_increment table option, or set the insert_id server system variable to\nchange the next AUTO_INCREMENT value inserted by the current session.\n\nLAST_INSERT_ID() can be used to see the last AUTO_INCREMENT value inserted by\nthe current session.\n\nALTER TABLE animals AUTO_INCREMENT=8;\n\nINSERT INTO animals (name) VALUES (\'aardvark\');\n\nSELECT * FROM animals;\n+----+-----------+\n| id | name |\n+----+-----------+\n| 1 | dog |\n| 2 | cat |\n| 3 | penguin |\n| 4 | fox |\n| 5 | whale |\n| 6 | ostrich |\n| 8 | aardvark |\n+----+-----------+\n\nSET insert_id=12;\n\nINSERT INTO animals (name) VALUES (\'gorilla\');\n\nSELECT * FROM animals;\n+----+-----------+\n| id | name |\n+----+-----------+\n| 1 | dog |\n| 2 | cat |\n| 3 | penguin |\n| 4 | fox |\n| 5 | whale |\n| 6 | ostrich |\n| 8 | aardvark |\n| 12 | gorilla |\n+----+-----------+\n\nInnoDB\n------\n\nUntil MariaDB 10.2.3, InnoDB used an auto-increment counter that is stored in\nmemory. When the server restarts, the counter is re-initialized to the highest\nvalue used in the table, which cancels the effects of any AUTO_INCREMENT = N\noption in the table statements.\n\nFrom MariaDB 10.2.4, this restriction has been lifted and AUTO_INCREMENT is\npersistent.\n\nSee also AUTO_INCREMENT Handling in InnoDB.\n\nSetting Explicit Values\n-----------------------\n\nIt is possible to specify a value for an AUTO_INCREMENT column. If the key is\nprimary or unique, the value must not already exist in the key.\n\nIf the new value is higher than the current maximum value, the AUTO_INCREMENT\nvalue is updated, so the next value will be higher. If the new value is lower\nthan the current maximum value, the AUTO_INCREMENT value remains unchanged.\n\nThe following example demonstrates these behaviors:\n\nCREATE TABLE t (id INTEGER UNSIGNED AUTO_INCREMENT PRIMARY KEY) ENGINE =\nInnoDB;\n\nINSERT INTO t VALUES (NULL);\nSELECT id FROM t;\n+----+\n| id |\n+----+\n| 1 |\n+----+\n\nINSERT INTO t VALUES (10); -- higher value\nSELECT id FROM t;\n+----+\n| id |\n+----+\n| 1 |\n| 10 |\n+----+\n\nINSERT INTO t VALUES (2); -- lower value\nINSERT INTO t VALUES (NULL); -- auto value\nSELECT id FROM t;\n+----+\n| id |\n+----+\n| 1 |\n| 2 |\n| 10 |\n| 11 |\n+----+\n\nThe ARCHIVE storage engine does not allow to insert a value that is lower than\nthe current maximum.\n\nMissing Values\n--------------\n\nAn AUTO_INCREMENT column normally has missing values. This happens because if\na row is deleted, or an AUTO_INCREMENT value is explicitly updated, old values\nare never re-used. The REPLACE statement also deletes a row, and its value is\nwasted. With InnoDB, values can be reserved by a transaction; but if the\ntransaction fails (for example, because of a ROLLBACK) the reserved value will\nbe lost.\n\nThus AUTO_INCREMENT values can be used to sort results in a chronological\norder, but not to create a numeric sequence.\n\nReplication\n-----------\n\nTo make master-master or Galera safe to use AUTO_INCREMENT one should use the\nsystem variables auto_increment_increment and auto_increment_offset to\ngenerate unique values for each server.\n\nCHECK Constraints, DEFAULT Values and Virtual Columns\n-----------------------------------------------------\n\nMariaDB starting with 10.2.6\n----------------------------\nFrom MariaDB 10.2.6 auto_increment columns are no longer permitted in CHECK\nconstraints, DEFAULT value expressions and virtual columns. They were\npermitted in earlier versions, but did not work correctly. See MDEV-11117.\n\nGenerating Auto_Increment Values When Adding the Attribute\n----------------------------------------------------------\n\nCREATE OR REPLACE TABLE t1 (a INT);\nINSERT t1 VALUES (0),(0),(0);\nALTER TABLE t1 MODIFY a INT NOT NULL AUTO_INCREMENT PRIMARY KEY;\nSELECT * FROM t1;\n+---+\n| a |\n+---+\n| 1 |\n| 2 |\n| 3 |\n+---+\n\nCREATE OR REPLACE TABLE t1 (a INT);\nINSERT t1 VALUES (5),(0),(8),(0);\nALTER TABLE t1 MODIFY a INT NOT NULL AUTO_INCREMENT PRIMARY KEY;\nSELECT * FROM t1;\n+---+\n| a |\n+---+\n| 5 |\n| 6 |\n| 8 |\n| 9 |\n+---+\n\nIf the NO_AUTO_VALUE_ON_ZERO SQL_MODE is set, zero values will not be\nautomatically incremented:\n\nSET SQL_MODE=\'no_auto_value_on_zero\';\nCREATE OR REPLACE TABLE t1 (a INT);\nINSERT t1 VALUES (3), (0);\nALTER TABLE t1 MODIFY a INT NOT NULL AUTO_INCREMENT PRIMARY KEY;\nSELECT * FROM t1;\n+---+\n| a |\n+---+\n| 0 |\n| 3 |\n+---+\n\nURL: https://mariadb.com/kb/en/auto_increment/','','https://mariadb.com/kb/en/auto_increment/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (297,24,'Using Compound Statements Outside of Stored Programs','Compound statements can also be used outside of stored programs.\n\ndelimiter |\nIF @have_innodb THEN\n CREATE TABLE IF NOT EXISTS innodb_index_stats (\n database_name VARCHAR(64) NOT NULL,\n table_name VARCHAR(64) NOT NULL,\n index_name VARCHAR(64) NOT NULL,\n last_update TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE\nCURRENT_TIMESTAMP,\n stat_name VARCHAR(64) NOT NULL,\n stat_value BIGINT UNSIGNED NOT NULL,\n sample_size BIGINT UNSIGNED,\n stat_description VARCHAR(1024) NOT NULL,\n PRIMARY KEY (database_name, table_name, index_name, stat_name)\n ) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_bin STATS_PERSISTENT=0;\nEND IF|\nQuery OK, 0 rows affected, 2 warnings (0.00 sec)\n\nNote, that using compound statements this way is subject to following\nlimitations:\n\n* Only BEGIN, IF, CASE, LOOP, WHILE, REPEAT statements may start a compound\nstatement outside of stored programs.\n* BEGIN must use the BEGIN NOT ATOMIC syntax (otherwise it\'ll be confused with\nBEGIN that starts a transaction).\n* A compound statement might not start with a label.\n* A compound statement is parsed completely—note \"2 warnings\" in the above\nexample, even if the condition was false (InnoDB was, indeed, disabled), and\nthe CREATE TABLE statement was not executed, it was still parsed and the\nparser produced \"Unknown storage engine\" warning.\n\nInside a compound block first three limitations do not apply, one can use\nanything that can be used inside a stored program — including labels,\ncondition handlers, variables, and so on:\n\nBEGIN NOT ATOMIC\n DECLARE foo CONDITION FOR 1146;\n DECLARE x INT DEFAULT 0;\n DECLARE CONTINUE HANDLER FOR SET x=1;\n INSERT INTO test.t1 VALUES (\"hndlr1\", val, 2);\n END|\n\nExample how to use IF:\n\nIF (1>0) THEN BEGIN NOT ATOMIC SELECT 1; END ; END IF;;\n\nExample of how to use WHILE loop:\n\nDELIMITER |\nBEGIN NOT ATOMIC\n DECLARE x INT DEFAULT 0;\n WHILE x <= 10 DO\n SET x = x + 1;\n SELECT x;\n END WHILE;\nEND|\nDELIMITER ;\n\nURL:\nhttps://mariadb.com/kb/en/using-compound-statements-outside-of-stored-programs/','','https://mariadb.com/kb/en/using-compound-statements-outside-of-stored-programs/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (298,24,'BEGIN END','Syntax\n------\n\n[begin_label:] BEGIN [NOT ATOMIC]\n [statement_list]\nEND [end_label]\n\nNOT ATOMIC is required when used outside of a stored procedure. Inside stored\nprocedures or within an anonymous block, BEGIN alone starts a new anonymous\nblock.\n\nDescription\n-----------\n\nBEGIN ... END syntax is used for writing compound statements. A compound\nstatement can contain multiple statements, enclosed by the BEGIN and END\nkeywords. statement_list represents a list of one or more statements, each\nterminated by a semicolon (i.e., ;) statement delimiter. statement_list is\noptional, which means that the empty compound statement (BEGIN END) is legal.\n\nNote that END will perform a commit. If you are running in autocommit mode,\nevery statement will be committed separately. If you are not running in\nautocommit mode, you must execute a COMMIT or ROLLBACK after END to get the\ndatabase up to date.\n\nUse of multiple statements requires that a client is able to send statement\nstrings containing the ; statement delimiter. This is handled in the mysql\ncommand-line client with the DELIMITER command. Changing the ;\nend-of-statement delimiter (for example, to //) allows ; to be used in a\nprogram body.\n\nA compound statement within a stored program can be labeled. end_label cannot\nbe given unless begin_label also is present. If both are present, they must be\nthe same.\n\nBEGIN ... END constructs can be nested. Each block can define its own\nvariables, a CONDITION, a HANDLER and a CURSOR, which don\'t exist in the outer\nblocks. The most local declarations override the outer objects which use the\nsame name (see example below).\n\nThe declarations order is the following:\n\n* DECLARE local variables;\n* DECLARE CONDITIONs;\n* DECLARE CURSORs;\n* DECLARE HANDLERs;\n\nNote that DECLARE HANDLER contains another BEGIN ... END construct.\n\nHere is an example of a very simple, anonymous block:\n\nBEGIN NOT ATOMIC\nSET @a=1;\nCREATE TABLE test.t1(a INT);\nEND|\n\nBelow is an example of nested blocks in a stored procedure:\n\nCREATE PROCEDURE t( )\nBEGIN\n DECLARE x TINYINT UNSIGNED DEFAULT 1;\n BEGIN\n DECLARE x CHAR(2) DEFAULT \'02\';\n DECLARE y TINYINT UNSIGNED DEFAULT 10;\n SELECT x, y;\n END;\n SELECT x;\nEND;\n\nIn this example, a TINYINT variable, x is declared in the outter block. But in\nthe inner block x is re-declared as a CHAR and an y variable is declared. The\ninner SELECT shows the \"new\" value of x, and the value of y. But when x is\nselected in the outer block, the \"old\" value is returned. The final SELECT\ndoesn\'t try to read y, because it doesn\'t exist in that context.\n\nURL: https://mariadb.com/kb/en/begin-end/','','https://mariadb.com/kb/en/begin-end/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (299,24,'CASE Statement','Syntax\n------\n\nCASE case_value\n WHEN when_value THEN statement_list\n [WHEN when_value THEN statement_list] ...\n [ELSE statement_list]\nEND CASE\n\nOr:\n\nCASE\n WHEN search_condition THEN statement_list\n [WHEN search_condition THEN statement_list] ...\n [ELSE statement_list]\nEND CASE\n\nDescription\n-----------\n\nThe text on this page describes the CASE statement for stored programs. See\nthe CASE OPERATOR for details on the CASE operator outside of stored programs.\n\nThe CASE statement for stored programs implements a complex conditional\nconstruct. If a search_condition evaluates to true, the corresponding SQL\nstatement list is executed. If no search condition matches, the statement list\nin the ELSE clause is executed. Each statement_list consists of one or more\nstatements.\n\nThe CASE statement cannot have an ELSE NULL clause, and it is terminated with\nEND CASE instead of END. implements a complex conditional construct. If a\nsearch_condition evaluates to true, the corresponding SQL statement list is\nexecuted. If no search condition matches, the statement list in the ELSE\nclause is executed. Each statement_list consists of one or more statements.\n\nIf no when_value or search_condition matches the value tested and the CASE\nstatement contains no ELSE clause, a Case not found for CASE statement error\nresults.\n\nEach statement_list consists of one or more statements; an empty\nstatement_list is not allowed. To handle situations where no value is matched\nby any WHEN clause, use an ELSE containing an empty BEGIN ... END block, as\nshown in this example:\n\nDELIMITER |\nCREATE PROCEDURE p()\nBEGIN\n DECLARE v INT DEFAULT 1;\n CASE v\n WHEN 2 THEN SELECT v;\n WHEN 3 THEN SELECT 0;\n ELSE BEGIN END;\n END CASE;\nEND;\n|\n\nThe indentation used here in the ELSE clause is for purposes of clarity only,\nand is not otherwise significant. See Delimiters in the mysql client for more\non the use of the delimiter command.\n\nNote: The syntax of the CASE statement used inside stored programs differs\nslightly from that of the SQL CASE expression described in CASE OPERATOR. The\nCASE statement cannot have an ELSE NULL clause, and it is terminated with END\nCASE instead of END.\n\nURL: https://mariadb.com/kb/en/case-statement/','','https://mariadb.com/kb/en/case-statement/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (300,24,'DECLARE CONDITION','Syntax\n------\n\nDECLARE condition_name CONDITION FOR condition_value\n\ncondition_value:\n SQLSTATE [VALUE] sqlstate_value\n | mysql_error_code\n\nDescription\n-----------\n\nThe DECLARE ... CONDITION statement defines a named error condition. It\nspecifies a condition that needs specific handling and associates a name with\nthat condition. Later, the name can be used in a DECLARE ... HANDLER, SIGNAL\nor RESIGNAL statement (as long as the statement is located in the same BEGIN\n... END block).\n\nConditions must be declared after local variables, but before CURSORs and\nHANDLERs.\n\nA condition_value for DECLARE ... CONDITION can be an SQLSTATE value (a\n5-character string literal) or a MySQL error code (a number). You should not\nuse SQLSTATE value \'00000\' or MySQL error code 0, because those indicate\nsucess rather than an error condition. If you try, or if you specify an\ninvalid SQLSTATE value, an error like this is produced:\n\nERROR 1407 (42000): Bad SQLSTATE: \'00000\'\n\nFor a list of SQLSTATE values and MariaDB error codes, see MariaDB Error Codes.\n\nURL: https://mariadb.com/kb/en/declare-condition/','','https://mariadb.com/kb/en/declare-condition/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (301,24,'DECLARE HANDLER','Syntax\n------\n\nDECLARE handler_type HANDLER\n FOR condition_value [, condition_value] ...\n statement\n\nhandler_type:\n CONTINUE\n | EXIT\n | UNDO\n\ncondition_value:\n SQLSTATE [VALUE] sqlstate_value\n | condition_name\n | SQLWARNING\n | NOT FOUND\n | SQLEXCEPTION\n | mariadb_error_code\n\nDescription\n-----------\n\nThe DECLARE ... HANDLER statement specifies handlers that each may deal with\none or more conditions. If one of these conditions occurs, the specified\nstatement is executed. statement can be a simple statement (for example, SET\nvar_name = value), or it can be a compound statement written using BEGIN and\nEND.\n\nHandlers must be declared after local variables, a CONDITION and a CURSOR.\n\nFor a CONTINUE handler, execution of the current program continues after\nexecution of the handler statement. For an EXIT handler, execution terminates\nfor the BEGIN ... END compound statement in which the handler is declared.\n(This is true even if the condition occurs in an inner block.) The UNDO\nhandler type statement is not supported.\n\nIf a condition occurs for which no handler has been declared, the default\naction is EXIT.\n\nA condition_value for DECLARE ... HANDLER can be any of the following values:\n\n* An SQLSTATE value (a 5-character string literal) or a MariaDB error\ncode (a number). You should not use SQLSTATE value \'00000\' or MariaDB\nerror code 0, because those indicate sucess rather than an error\ncondition. For a list of SQLSTATE values and MariaDB error codes, see\nMariaDB Error Codes.\n* A condition name previously specified with DECLARE ... CONDITION. It must be\nin the same stored program. See DECLARE CONDITION.\n* SQLWARNING is shorthand for the class of SQLSTATE values that begin\nwith \'01\'.\n* NOT FOUND is shorthand for the class of SQLSTATE values that begin\nwith \'02\'. This is relevant only the context of cursors and is used to\ncontrol what happens when a cursor reaches the end of a data set. If\nno more rows are available, a No Data condition occurs with SQLSTATE\nvalue 02000. To detect this condition, you can set up a handler for it\n(or for a NOT FOUND condition). An example is shown in Cursor Overview. This\ncondition also occurs for SELECT ... INTO var_list statements that retrieve no\nrows.\n* SQLEXCEPTION is shorthand for the class of SQLSTATE values that do\nnot begin with \'00\', \'01\', or \'02\'.\n\nWhen an error raises, in some cases it could be handled by multiple HANDLERs.\nFor example, there may be an handler for 1050 error, a separate handler for\nthe 42S01 SQLSTATE, and another separate handler for the SQLEXCEPTION class:\nin theory all occurrences of HANDLER may catch the 1050 error, but MariaDB\nchooses the HANDLER with the highest precedence. Here are the precedence rules:\n\n* Handlers which refer to an error code have the highest precedence.\n* Handlers which refer to a SQLSTATE come next.\n* Handlers which refer to an error class have the lowest precedence.\n\nIn some cases, a statement could produce multiple errors. If this happens, in\nsome cases multiple handlers could have the highest precedence. In such cases,\nthe choice of the handler is indeterminate.\n\nNote that if an error occurs within a CONTINUE HANDLER block, it can be\nhandled by another HANDLER. However, a HANDLER which is already in the stack\n(that is, it has been called to handle an error and its execution didn\'t\nfinish yet) cannot handle new errors—this prevents endless loops. For example,\nsuppose that a stored procedure contains a CONTINUE HANDLER for SQLWARNING and\nanother CONTINUE HANDLER for NOT FOUND. At some point, a NOT FOUND error\noccurs, and the execution enters the NOT FOUND HANDLER. But within that\nhandler, a warning occurs, and the execution enters the SQLWARNING HANDLER. If\nanother NOT FOUND error occurs, it cannot be handled again by the NOT FOUND\nHANDLER, because its execution is not finished.\n\nWhen a DECLARE HANDLER block can handle more than one error condition, it may\nbe useful to know which errors occurred. To do so, you can use the GET\nDIAGNOSTICS statement.\n\nAn error that is handled by a DECLARE HANDLER construct can be issued again\nusing the RESIGNAL statement.\n\nBelow is an example using DECLARE HANDLER:\n\nCREATE TABLE test.t (s1 INT, PRIMARY KEY (s1));\n\nDELIMITER //\n\nCREATE PROCEDURE handlerdemo ( )\n BEGIN\n DECLARE CONTINUE HANDLER FOR SQLSTATE \'23000\' SET @x2 = 1;\n SET @x = 1;\n INSERT INTO test.t VALUES (1);\n SET @x = 2;\n INSERT INTO test.t VALUES (1);\n SET @x = 3;\n END;\n //\n\nDELIMITER ;\n\nCALL handlerdemo( );\n\nSELECT @x;\n+------+\n| @x |\n+------+\n| 3 |\n+------+\n\nURL: https://mariadb.com/kb/en/declare-handler/','','https://mariadb.com/kb/en/declare-handler/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (302,24,'DECLARE Variable','Syntax\n------\n\nDECLARE var_name [, var_name] ... [[ROW] TYPE OF]] type [DEFAULT value]\n\nDescription\n-----------\n\nThis statement is used to declare local variables within stored programs. To\nprovide a default value for the variable, include a DEFAULT clause. The value\ncan be specified as an expression (even subqueries are permitted); it need not\nbe a constant. If the DEFAULT clause is missing, the initial value is NULL.\n\nLocal variables are treated like stored routine parameters with respect to\ndata type and overflow checking. See CREATE PROCEDURE.\n\nLocal variables must be declared before CONDITIONs, CURSORs and HANDLERs.\n\nLocal variable names are not case sensitive.\n\nThe scope of a local variable is within the BEGIN ... END block where it is\ndeclared. The variable can be referred to in blocks nested within the\ndeclaring block, except those blocks that declare a variable with the same\nname.\n\nTYPE OF / ROW TYPE OF\n---------------------\n\nMariaDB starting with 10.3\n--------------------------\nTYPE OF and ROW TYPE OF anchored data types for stored routines were\nintroduced in MariaDB 10.3.\n\nAnchored data types allow a data type to be defined based on another object,\nsuch as a table row, rather than specifically set in the declaration. If the\nanchor object changes, so will the anchored data type. This can lead to\nroutines being easier to maintain, so that if the data type in the table is\nchanged, it will automatically be changed in the routine as well.\n\nVariables declared with ROW TYPE OF will have the same features as implicit\nROW variables. It is not possible to use ROW TYPE OF variables in a LIMIT\nclause.\n\nThe real data type of TYPE OF and ROW TYPE OF table_name will become known at\nthe very beginning of the stored routine call. ALTER TABLE or DROP TABLE\nstatements performed inside the current routine on the tables that appear in\nanchors won\'t affect the data type of the anchored variables, even if the\nvariable is declared after an ALTER TABLE or DROP TABLE statement.\n\nThe real data type of a ROW TYPE OF cursor_name variable will become known\nwhen execution enters into the block where the variable is declared. Data type\ninstantiation will happen only once. In a cursor ROW TYPE OF variable that is\ndeclared inside a loop, its data type will become known on the very first\niteration and won\'t change on further loop iterations.\n\nThe tables referenced in TYPE OF and ROW TYPE OF declarations will be checked\nfor existence at the beginning of the stored routine call. CREATE PROCEDURE or\nCREATE FUNCTION will not check the referenced tables for existence.\n\nExamples\n--------\n\nTYPE OF and ROW TYPE OF from MariaDB 10.3:\n\nDECLARE tmp TYPE OF t1.a; -- Get the data type from the column {{a}} in the\ntable {{t1}}\n\nDECLARE rec1 ROW TYPE OF t1; -- Get the row data type from the table {{t1}}\n\nDECLARE rec2 ROW TYPE OF cur1; -- Get the row data type from the cursor\n{{cur1}}\n\nURL: https://mariadb.com/kb/en/declare-variable/','','https://mariadb.com/kb/en/declare-variable/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (303,24,'FOR','MariaDB starting with 10.3\n--------------------------\nFOR loops were introduced in MariaDB 10.3.\n\nSyntax\n------\n\nInteger range FOR loop:\n\n[begin_label:]\nFOR var_name IN [ REVERSE ] lower_bound .. upper_bound\nDO statement_list\nEND FOR [ end_label ]\n\nExplicit cursor FOR loop\n\n[begin_label:]\nFOR record_name IN cursor_name [ ( cursor_actual_parameter_list)]\nDO statement_list\nEND FOR [ end_label ]\n\nExplicit cursor FOR loop (Oracle mode)\n\n[begin_label:]\nFOR record_name IN cursor_name [ ( cursor_actual_parameter_list)]\nLOOP\n statement_list\nEND LOOP [ end_label ]\n\nImplicit cursor FOR loop\n\n[begin_label:]\nFOR record_name IN ( select_statement )\nDO statement_list\nEND FOR [ end_label ]\n\nDescription\n-----------\n\nFOR loops allow code to be executed a fixed number of times.\n\nIn an integer range FOR loop, MariaDB will compare the lower bound and upper\nbound values, and assign the lower bound value to a counter. If REVERSE is not\nspecified, and the upper bound value is greater than or equal to the counter,\nthe counter will be incremented and the statement will continue, after which\nthe loop is entered again. If the upper bound value is greater than the\ncounter, the loop will be exited.\n\nIf REVERSE is specified, the counter is decremented, and the upper bound value\nneeds to be less than or equal for the loop to continue.\n\nExamples\n--------\n\nIntger range FOR loop:\n\nCREATE TABLE t1 (a INT);\n\nDELIMITER //\n\nFOR i IN 1..3\nDO\n INSERT INTO t1 VALUES (i);\nEND FOR;\n//\n\nDELIMITER ;\n\nSELECT * FROM t1;\n+------+\n| a |\n+------+\n| 1 |\n| 2 |\n| 3 |\n+------+\n\nREVERSE integer range FOR loop:\n\nCREATE OR REPLACE TABLE t1 (a INT);\n\nDELIMITER //\nFOR i IN REVERSE 4..12\n DO\n INSERT INTO t1 VALUES (i);\nEND FOR;\n//\nQuery OK, 9 rows affected (0.422 sec)\n\nDELIMITER ;\n\nSELECT * FROM t1;\n+------+\n| a |\n+------+\n| 12 |\n| 11 |\n| 10 |\n| 9 |\n| 8 |\n| 7 |\n| 6 |\n| 5 |\n| 4 |\n+------+\n\nExplicit cursor in Oracle mode:\n\nSET sql_mode=ORACLE;\n\nCREATE OR REPLACE TABLE t1 (a INT, b VARCHAR(32));\n\nINSERT INTO t1 VALUES (10,\'b0\');\nINSERT INTO t1 VALUES (11,\'b1\');\nINSERT INTO t1 VALUES (12,\'b2\');\n\nDELIMITER //\n\nCREATE OR REPLACE PROCEDURE p1(pa INT) AS \n CURSOR cur(va INT) IS\n SELECT a, b FROM t1 WHERE a=va;\nBEGIN\n FOR rec IN cur(pa)\n LOOP\n SELECT rec.a, rec.b;\n END LOOP;\nEND;\n//\n\nDELIMITER ;\n\nCALL p1(10);\n+-------+-------+\n| rec.a | rec.b |\n+-------+-------+\n| 10 | b0 |\n+-------+-------+\n\nCALL p1(11);\n+-------+-------+\n| rec.a | rec.b |\n+-------+-------+\n| 11 | b1 |\n+-------+-------+\n\nCALL p1(12);\n+-------+-------+\n| rec.a | rec.b |\n+-------+-------+\n| 12 | b2 |\n+-------+-------+\n\nCALL p1(13);\nQuery OK, 0 rows affected (0.000 sec)\n\nURL: https://mariadb.com/kb/en/for/','','https://mariadb.com/kb/en/for/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (304,24,'GOTO','MariaDB starting with 10.3\n--------------------------\nThe GOTO statement was introduced in MariaDB 10.3 for Oracle compatibility.\n\nSyntax\n------\n\nGOTO label\n\nDescription\n-----------\n\nThe GOTO statement causes the code to jump to the specified label, and\ncontinue operating from there. It is only accepted when in Oracle mode.\n\nExample\n-------\n\nSET sql_mode=ORACLE;\n\nDELIMITER //\n\nCREATE OR REPLACE PROCEDURE p1 AS\n\nBEGIN\n\nSELECT 1;\n GOTO label;\n SELECT 2;\n <<label>>\n SELECT 3;\n\nEND;\n\n//\n\nDELIMITER\n\ncall p1();\n+---+\n| 1 |\n+---+\n| 1 |\n+---+\n1 row in set (0.000 sec)\n\n+---+\n| 3 |\n+---+\n| 3 |\n+---+\n1 row in set (0.000 sec)\n\nURL: https://mariadb.com/kb/en/goto/','','https://mariadb.com/kb/en/goto/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (305,24,'IF','Syntax\n------\n\nIF search_condition THEN statement_list\n [ELSEIF search_condition THEN statement_list] ...\n [ELSE statement_list]\nEND IF;\n\nDescription\n-----------\n\nIF implements a basic conditional construct. If the search_condition evaluates\nto true, the corresponding SQL statement list is executed. If no\nsearch_condition matches, the statement list in the ELSE clause is executed.\nEach statement_list consists of one or more statements.\n\nURL: https://mariadb.com/kb/en/if/','','https://mariadb.com/kb/en/if/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (306,24,'ITERATE','Syntax\n------\n\nITERATE label\n\nITERATE can appear only within LOOP, REPEAT, and WHILE statements. ITERATE\nmeans \"do the loop again\", and uses the statement\'s label to determine which\nstatements to repeat. The label must be in the same stored program, not in a\ncaller procedure.\n\nIf you try to use ITERATE with a non-existing label, or if the label is\nassociated to a construct which is not a loop, the following error will be\nproduced:\n\nERROR 1308 (42000): ITERATE with no matching label: <label_name>\n\nBelow is an example of how ITERATE might be used:\n\nCREATE PROCEDURE doiterate(p1 INT)\nBEGIN\n label1: LOOP\n SET p1 = p1 + 1;\n IF p1 < 10 THEN ITERATE label1; END IF;\n LEAVE label1;\n END LOOP label1;\n SET @x = p1;\nEND\n\nURL: https://mariadb.com/kb/en/iterate/','','https://mariadb.com/kb/en/iterate/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (307,24,'Labels','Syntax\n------\n\nlabel: <construct>\n[label]\n\nLabels are MariaDB identifiers which can be used to identify a BEGIN ... END\nconstruct or a loop. They have a maximum length of 16 characters and can be\nquoted with backticks (i.e.., `).\n\nLabels have a start part and an end part. The start part must precede the\nportion of code it refers to, must be followed by a colon (:) and can be on\nthe same or different line. The end part is optional and adds nothing, but can\nmake the code more readable. If used, the end part must precede the\nconstruct\'s delimiter (;). Constructs identified by a label can be nested.\nEach construct can be identified by only one label.\n\nLabels need not be unique in the stored program they belong to. However, a\nlabel for an inner loop cannot be identical to a label for an outer loop. In\nthis case, the following error would be produced:\n\nERROR 1309 (42000): Redefining label <label_name>\n\nLEAVE and ITERATE statements can be used to exit or repeat a portion of code\nidentified by a label. They must be in the same Stored Routine, Trigger or\nEvent which contains the target label.\n\nBelow is an example using a simple label that is used to exit a LOOP:\n\nCREATE PROCEDURE `test_sp`()\nBEGIN\n `my_label`:\n LOOP\n SELECT \'looping\';\n LEAVE `my_label`;\n END LOOP;\n SELECT \'out of loop\';\nEND;\n\nThe following label is used to exit a procedure, and has an end part:\n\nCREATE PROCEDURE `test_sp`()\n`my_label`:\nBEGIN\n IF @var = 1 THEN\n LEAVE `my_label`;\n END IF;\n DO something();\nEND `my_label`;\n\nURL: https://mariadb.com/kb/en/labels/','','https://mariadb.com/kb/en/labels/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (308,24,'LEAVE','Syntax\n------\n\nLEAVE label\n\nThis statement is used to exit the flow control construct that has the given\nlabel. The label must be in the same stored program, not in a caller\nprocedure. LEAVE can be used within BEGIN ... END or loop constructs (LOOP,\nREPEAT, WHILE). In Stored Procedures, Triggers and Events, LEAVE can refer to\nthe outmost BEGIN ... END construct; in that case, the program exits the\nprocedure. In Stored Functions, RETURN can be used instead.\n\nNote that LEAVE cannot be used to exit a DECLARE HANDLER block.\n\nIf you try to LEAVE a non-existing label, or if you try to LEAVE a HANDLER\nblock, the following error will be produced:\n\nERROR 1308 (42000): LEAVE with no matching label: <label_name>\n\nThe following example uses LEAVE to exit the procedure if a condition is true:\n\nCREATE PROCEDURE proc(IN p TINYINT)\nCONTAINS SQL\n`whole_proc`:\nBEGIN\n SELECT 1;\n IF p < 1 THEN\n LEAVE `whole_proc`;\n END IF;\n SELECT 2;\nEND;\n\nCALL proc(0);\n+---+\n| 1 |\n+---+\n| 1 |\n+---+\n\nURL: https://mariadb.com/kb/en/leave/','','https://mariadb.com/kb/en/leave/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (309,24,'LOOP','Syntax\n------\n\n[begin_label:] LOOP\n statement_list\nEND LOOP [end_label]\n\nDescription\n-----------\n\nLOOP implements a simple loop construct, enabling repeated execution of the\nstatement list, which consists of one or more statements, each terminated by a\nsemicolon (i.e., ;) statement delimiter. The statements within the loop are\nrepeated until the loop is exited; usually this is accomplished with a LEAVE\nstatement.\n\nA LOOP statement can be labeled. end_label cannot be given unless begin_label\nalso is present. If both are present, they must be the same.\n\nSee Delimiters in the mysql client for more on delimiter usage in the client.\n\nURL: https://mariadb.com/kb/en/loop/','','https://mariadb.com/kb/en/loop/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (310,24,'REPEAT LOOP','Syntax\n------\n\n[begin_label:] REPEAT\n statement_list\nUNTIL search_condition\nEND REPEAT [end_label]\n\nThe statement list within a REPEAT statement is repeated until the\nsearch_condition is true. Thus, a REPEAT always enters the loop at least once.\nstatement_list consists of one or more statements, each terminated by a\nsemicolon (i.e., ;) statement delimiter.\n\nA REPEAT statement can be labeled. end_label cannot be given unless\nbegin_label also is present. If both are present, they must be the same.\n\nSee Delimiters in the mysql client for more on client delimiter usage.\n\nDELIMITER //\n\nCREATE PROCEDURE dorepeat(p1 INT)\n BEGIN\n SET @x = 0;\n REPEAT SET @x = @x + 1; UNTIL @x > p1 END REPEAT;\n END\n//\n\nCALL dorepeat(1000)//\n\nSELECT @x//\n+------+\n| @x |\n+------+\n| 1001 |\n+------+\n\nURL: https://mariadb.com/kb/en/repeat-loop/','','https://mariadb.com/kb/en/repeat-loop/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (311,24,'RESIGNAL','Syntax\n------\n\nRESIGNAL [error_condition]\n [SET error_property\n [, error_property] ...]\n\nerror_condition:\n SQLSTATE [VALUE] \'sqlstate_value\'\n | condition_name\n\nerror_property:\n error_property_name = <error_property_value>\n\nerror_property_name:\n CLASS_ORIGIN\n | SUBCLASS_ORIGIN\n | MESSAGE_TEXT\n | MYSQL_ERRNO\n | CONSTRAINT_CATALOG\n | CONSTRAINT_SCHEMA\n | CONSTRAINT_NAME\n | CATALOG_NAME\n | SCHEMA_NAME\n | TABLE_NAME\n | COLUMN_NAME\n | CURSOR_NAME\n\nDescription\n-----------\n\nThe syntax of RESIGNAL and its semantics are very similar to SIGNAL. This\nstatement can only be used within an error HANDLER. It produces an error, like\nSIGNAL. RESIGNAL clauses are the same as SIGNAL, except that they all are\noptional, even SQLSTATE. All the properties which are not specified in\nRESIGNAL, will be identical to the properties of the error that was received\nby the error HANDLER. For a description of the clauses, see diagnostics area.\n\nNote that RESIGNAL does not empty the diagnostics area: it just appends\nanother error condition.\n\nRESIGNAL, without any clauses, produces an error which is identical to the\nerror that was received by HANDLER.\n\nIf used out of a HANDLER construct, RESIGNAL produces the following error:\n\nERROR 1645 (0K000): RESIGNAL when handler not active\n\nIn MariaDB 5.5, if a HANDLER contained a CALL to another procedure, that\nprocedure could use RESIGNAL. Since MariaDB 10.0, trying to do this raises the\nabove error.\n\nFor a list of SQLSTATE values and MariaDB error codes, see MariaDB Error Codes.\n\nThe following procedure tries to query two tables which don\'t exist, producing\na 1146 error in both cases. Those errors will trigger the HANDLER. The first\ntime the error will be ignored and the client will not receive it, but the\nsecond time, the error is re-signaled, so the client will receive it.\n\nCREATE PROCEDURE test_error( )\nBEGIN\n DECLARE CONTINUE HANDLER\n FOR 1146\n BEGIN\n IF @hide_errors IS FALSE THEN\n RESIGNAL;\n END IF;\n END;\n SET @hide_errors = TRUE;\n SELECT \'Next error will be ignored\' AS msg;\n SELECT `c` FROM `temptab_one`;\n SELECT \'Next error won\'\'t be ignored\' AS msg;\n SET @hide_errors = FALSE;\n SELECT `c` FROM `temptab_two`;\nEND;\n\nCALL test_error( );\n\n+----------------------------+\n| msg |\n+----------------------------+\n| Next error will be ignored |\n+----------------------------+\n\n+-----------------------------+\n| msg |\n+-----------------------------+\n| Next error won\'t be ignored |\n+-----------------------------+\n\nERROR 1146 (42S02): Table \'test.temptab_two\' doesn\'t exist\n\nThe following procedure re-signals an error, modifying only the error message\nto clarify the cause of the problem.\n\nCREATE PROCEDURE test_error()\nBEGIN\n DECLARE CONTINUE HANDLER\n FOR 1146\n BEGIN\n RESIGNAL SET\n MESSAGE_TEXT = \'`temptab` does not exist\';\n END;\n SELECT `c` FROM `temptab`;\nEND;\n\nCALL test_error( );\nERROR 1146 (42S02): `temptab` does not exist\n\nAs explained above, this works on MariaDB 5.5, but produces a 1645 error since\n10.0.\n\nCREATE PROCEDURE handle_error()\nBEGIN\n RESIGNAL;\nEND;\nCREATE PROCEDURE p()\nBEGIN\n DECLARE EXIT HANDLER FOR SQLEXCEPTION CALL p();\n SIGNAL SQLSTATE \'45000\';\nEND;\n\nURL: https://mariadb.com/kb/en/resignal/','','https://mariadb.com/kb/en/resignal/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (312,24,'RETURN','Syntax\n------\n\nRETURN expr\n\nThe RETURN statement terminates execution of a stored function and returns the\nvalue expr to the function caller. There must be at least one RETURN statement\nin a stored function. If the function has multiple exit points, all exit\npoints must have a RETURN.\n\nThis statement is not used in stored procedures, triggers, or events. LEAVE\ncan be used instead.\n\nThe following example shows that RETURN can return the result of a scalar\nsubquery:\n\nCREATE FUNCTION users_count() RETURNS BOOL\n READS SQL DATA\nBEGIN\n RETURN (SELECT COUNT(DISTINCT User) FROM mysql.user);\nEND;\n\nURL: https://mariadb.com/kb/en/return/','','https://mariadb.com/kb/en/return/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (313,24,'SELECT INTO','Syntax\n------\n\nSELECT col_name [, col_name] ...\n INTO var_name [, var_name] ...\n table_expr\n\nDescription\n-----------\n\nSELECT ... INTO enables selected columns to be stored directly into variables.\nNo resultset is produced. The query should return a single row. If the query\nreturns no rows, a warning with error code 1329 occurs (No data), and the\nvariable values remain unchanged. If the query returns multiple rows, error\n1172 occurs (Result consisted of more than one row). If it is possible that\nthe statement may retrieve multiple rows, you can use LIMIT 1 to limit the\nresult set to a single row.\n\nThe INTO clause can also be specified at the end of the statement.\n\nIn the context of such statements that occur as part of events executed by the\nEvent Scheduler, diagnostics messages (not only errors, but also warnings) are\nwritten to the error log, and, on Windows, to the application event log.\n\nThis statement can be used with both local variables and user-defined\nvariables.\n\nFor the complete syntax, see SELECT.\n\nAnother way to set a variable\'s value is the SET statement.\n\nSELECT ... INTO results are not stored in the query cache even if SQL_CACHE is\nspecified.\n\nExamples\n--------\n\nSELECT id, data INTO @x,@y \nFROM test.t1 LIMIT 1;\nSELECT * from t1 where t1.a=@x and t1.b=@y\n\nIf you want to use this construct with UNION you have to use the syntax:\n\nSELECT * INTO @x FROM (SELECT t1.a FROM t1 UNION SELECT t2.a FROM t2);\n\nURL: https://mariadb.com/kb/en/selectinto/','','https://mariadb.com/kb/en/selectinto/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (314,24,'SIGNAL','Syntax\n------\n\nSIGNAL error_condition\n [SET error_property\n [, error_property] ...]\n\nerror_condition:\n SQLSTATE [VALUE] \'sqlstate_value\'\n | condition_name\n\nerror_property:\n error_property_name = <error_property_value>\n\nerror_property_name:\n CLASS_ORIGIN\n | SUBCLASS_ORIGIN\n | MESSAGE_TEXT\n | MYSQL_ERRNO\n | CONSTRAINT_CATALOG\n | CONSTRAINT_SCHEMA\n | CONSTRAINT_NAME\n | CATALOG_NAME\n | SCHEMA_NAME\n | TABLE_NAME\n | COLUMN_NAME\n | CURSOR_NAME\n\nSIGNAL empties the diagnostics area and produces a custom error. This\nstatement can be used anywhere, but is generally useful when used inside a\nstored program. When the error is produced, it can be caught by a HANDLER. If\nnot, the current stored program, or the current statement, will terminate with\nthe specified error.\n\nSometimes an error HANDLER just needs to SIGNAL the same error it received,\noptionally with some changes. Usually the RESIGNAL statement is the most\nconvenient way to do this.\n\nerror_condition can be an SQLSTATE value or a named error condition defined\nvia DECLARE CONDITION. SQLSTATE must be a constant string consisting of five\ncharacters. These codes are standard to ODBC and ANSI SQL. For customized\nerrors, the recommended SQLSTATE is \'45000\'. For a list of SQLSTATE values\nused by MariaDB, see the MariaDB Error Codes page. The SQLSTATE can be read\nvia the API method mysql_sqlstate( ).\n\nTo specify error properties user-defined variables and local variables can be\nused, as well as character set conversions (but you can\'t set a collation).\n\nThe error properties, their type and their default values are explained in the\ndiagnostics area page.\n\nErrors\n------\n\nIf the SQLSTATE is not valid, the following error like this will be produced:\n\nERROR 1407 (42000): Bad SQLSTATE: \'123456\'\n\nIf a property is specified more than once, an error like this will be produced:\n\nERROR 1641 (42000): Duplicate condition information item \'MESSAGE_TEXT\'\n\nIf you specify a condition name which is not declared, an error like this will\nbe produced:\n\nERROR 1319 (42000): Undefined CONDITION: cond_name\n\nIf MYSQL_ERRNO is out of range, you will get an error like this:\n\nERROR 1231 (42000): Variable \'MYSQL_ERRNO\' can\'t be set to the value of \'0\'\n\nExamples\n--------\n\nHere\'s what happens if SIGNAL is used in the client to generate errors:\n\nSIGNAL SQLSTATE \'01000\';\nQuery OK, 0 rows affected, 1 warning (0.00 sec)\n\nSHOW WARNINGS;\n\n+---------+------+------------------------------------------+\n| Level | Code | Message |\n+---------+------+------------------------------------------+\n| Warning | 1642 | Unhandled user-defined warning condition |\n+---------+------+------------------------------------------+\n1 row in set (0.06 sec)\n\nSIGNAL SQLSTATE \'02000\';\nERROR 1643 (02000): Unhandled user-defined not found condition\n\nHow to specify MYSQL_ERRNO and MESSAGE_TEXT properties:\n\nSIGNAL SQLSTATE \'45000\' SET MYSQL_ERRNO=30001, MESSAGE_TEXT=\'H\nello, world!\';\n\nERROR 30001 (45000): Hello, world!\n\nThe following code shows how to use user variables, local variables and\ncharacter set conversion with SIGNAL:\n\nCREATE PROCEDURE test_error(x INT)\nBEGIN\n DECLARE errno SMALLINT UNSIGNED DEFAULT 31001;\n SET @errmsg = \'Hello, world!\';\n IF x = 1 THEN\n SIGNAL SQLSTATE \'45000\' SET\n MYSQL_ERRNO = errno,\n MESSAGE_TEXT = @errmsg;\n ELSE\n SIGNAL SQLSTATE \'45000\' SET\n MYSQL_ERRNO = errno,\n MESSAGE_TEXT = _utf8\'Hello, world!\';\n END IF;\nEND;\n\nHow to use named error conditions:\n\nCREATE PROCEDURE test_error(n INT)\nBEGIN\n DECLARE `too_big` CONDITION FOR SQLSTATE \'45000\';\n IF n > 10 THEN\n SIGNAL `too_big`;\n END IF;\nEND;\n\nIn this example, we\'ll define a HANDLER for an error code. When the error\noccurs, we SIGNAL a more informative error which makes sense for our procedure:\n\nCREATE PROCEDURE test_error()\nBEGIN\n DECLARE EXIT HANDLER\n FOR 1146\n BEGIN\n SIGNAL SQLSTATE \'45000\' SET\n MESSAGE_TEXT = \'Temporary tables not found; did you call init()\nprocedure?\';\n END;\n -- this will produce a 1146 error\n SELECT `c` FROM `temptab`;\nEND;\n\nURL: https://mariadb.com/kb/en/signal/','','https://mariadb.com/kb/en/signal/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (315,24,'WHILE','Syntax\n------\n\n[begin_label:] WHILE search_condition DO\n statement_list\nEND WHILE [end_label]\n\nDescription\n-----------\n\nThe statement list within a WHILE statement is repeated as long as the\nsearch_condition is true. statement_list consists of one or more statements.\nIf the loop must be executed at least once, REPEAT ... LOOP can be used\ninstead.\n\nA WHILE statement can be labeled. end_label cannot be given unless begin_label\nalso is present. If both are present, they must be the same.\n\nExamples\n--------\n\nCREATE PROCEDURE dowhile()\nBEGIN\n DECLARE v1 INT DEFAULT 5;\n\nWHILE v1 > 0 DO\n ...\n SET v1 = v1 - 1;\n END WHILE;\nEND\n\nURL: https://mariadb.com/kb/en/while/','','https://mariadb.com/kb/en/while/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (316,24,'Cursor Overview','Description\n-----------\n\nA cursor is a structure that allows you to go over records sequentially, and\nperform processing based on the result.\n\nMariaDB permits cursors inside stored programs, and MariaDB cursors are\nnon-scrollable, read-only and asensitive.\n\n* Non-scrollable means that the rows can only be fetched in the order\nspecified by the SELECT statement. Rows cannot be skipped, you cannot jump to\na specific row, and you cannot fetch rows in reverse order.\n* Read-only means that data cannot be updated through the cursor.\n* Asensitive means that the cursor points to the actual underlying data. This\nkind of cursor is quicker than the alternative, an insensitive cursor, as no\ndata is copied to a temporary table. However, changes to the data being used\nby the cursor will affect the cursor data.\n\nCursors are created with a DECLARE CURSOR statement and opened with an OPEN\nstatement. Rows are read with a FETCH statement before the cursor is finally\nclosed with a CLOSE statement.\n\nWhen FETCH is issued and there are no more rows to extract, the following\nerror is produced:\n\nERROR 1329 (02000): No data - zero rows fetched, selected, or processed\n\nTo avoid problems, a DECLARE HANDLER statement is generally used. The HANDLER\nshould handler the 1329 error, or the \'02000\' SQLSTATE, or the NOT FOUND error\nclass.\n\nOnly SELECT statements are allowed for cursors, and they cannot be contained\nin a variable - so, they cannot be composed dynamically. However, it is\npossible to SELECT from a view. Since the CREATE VIEW statement can be\nexecuted as a prepared statement, it is possible to dynamically create the\nview that is queried by the cursor.\n\nFrom MariaDB 10.3.0, cursors can have parameters. Cursor parameters can appear\nin any part of the DECLARE CURSOR select_statement where a stored procedure\nvariable is allowed (select list, WHERE, HAVING, LIMIT etc). See DECLARE\nCURSOR and OPEN for syntax, and below for an example:\n\nExamples\n--------\n\nCREATE TABLE c1(i INT);\n\nCREATE TABLE c2(i INT);\n\nCREATE TABLE c3(i INT);\n\nDELIMITER //\n\nCREATE PROCEDURE p1()\nBEGIN\n DECLARE done INT DEFAULT FALSE;\n DECLARE x, y INT;\n DECLARE cur1 CURSOR FOR SELECT i FROM test.c1;\n DECLARE cur2 CURSOR FOR SELECT i FROM test.c2;\n DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;\n\nOPEN cur1;\n OPEN cur2;\n\nread_loop: LOOP\n FETCH cur1 INTO x;\n FETCH cur2 INTO y;\n IF done THEN\n LEAVE read_loop;\n END IF;\n IF x < y THEN\n INSERT INTO test.c3 VALUES (x);\n ELSE\n INSERT INTO test.c3 VALUES (y);\n END IF;\n END LOOP;\n\nCLOSE cur1;\n CLOSE cur2;\nEND; //\n\nDELIMITER ;\n\nINSERT INTO c1 VALUES(5),(50),(500);\n\nINSERT INTO c2 VALUES(10),(20),(30);\n\nCALL p1;\n\nSELECT * FROM c3;\n+------+\n| i |\n+------+\n| 5 |\n| 20 |\n| 30 |\n+------+\n\nFrom MariaDB 10.3.0\n\nDROP PROCEDURE IF EXISTS p1;\nDROP TABLE IF EXISTS t1;\nCREATE TABLE t1 (a INT, b VARCHAR(10));\n\nINSERT INTO t1 VALUES (1,\'old\'),(2,\'old\'),(3,\'old\'),(4,\'old\'),(5,\'old\');\n\nDELIMITER //\n\nCREATE PROCEDURE p1(min INT,max INT)\nBEGIN\n DECLARE done INT DEFAULT FALSE;\n DECLARE va INT;\n DECLARE cur CURSOR(pmin INT, pmax INT) FOR SELECT a FROM t1 WHERE a BETWEEN\npmin AND pmax;\n DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=TRUE;\n OPEN cur(min,max);\n read_loop: LOOP\n FETCH cur INTO va;\n IF done THEN\n LEAVE read_loop;\n END IF;\n INSERT INTO t1 VALUES (va,\'new\');\n END LOOP;\n CLOSE cur;\nEND;\n//\n\nDELIMITER ;\n\nCALL p1(2,4);\n\nSELECT * FROM t1;\n+------+------+\n| a | b |\n+------+------+\n| 1 | old |\n| 2 | old |\n| 3 | old |\n| 4 | old |\n| 5 | old |\n| 2 | new |\n| 3 | new |\n| 4 | new |\n+------+------+\n\nURL: https://mariadb.com/kb/en/cursor-overview/','','https://mariadb.com/kb/en/cursor-overview/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (317,24,'DECLARE CURSOR','Syntax\n------\n\n<= MariaDB 10.2\n\nDECLARE cursor_name CURSOR FOR select_statement\n\nFrom MariaDB 10.3\n\nDECLARE cursor_name CURSOR [(cursor_formal_parameter[,...])] FOR\nselect_statement\n\ncursor_formal_parameter:\n name type [collate clause]\n\nFrom MariaDB 10.8\n\nDECLARE cursor_name CURSOR [(cursor_formal_parameter[,...])] FOR\nselect_statement\n\ncursor_formal_parameter:\n [IN] name type [collate clause]\n\nDescription\n-----------\n\nThis statement declares a cursor. Multiple cursors may be declared in a stored\nprogram, but each cursor in a given block must have a unique name.\n\nselect_statement is not executed until the OPEN statement is executed. It is\nimportant to remember this if the query produces an error, or calls functions\nwhich have side effects.\n\nA SELECT associated to a cursor can use variables, but the query itself cannot\nbe a variable, and cannot be dynamically composed. The SELECT statement cannot\nhave an INTO clause.\n\nCursors must be declared before HANDLERs, but after local variables and\nCONDITIONs.\n\nParameters\n----------\n\nMariaDB starting with 10.3.0\n----------------------------\nFrom MariaDB 10.3.0, cursors can have parameters. This is a non-standard SQL\nextension. Cursor parameters can appear in any part of the DECLARE CURSOR\nselect_statement where a stored procedure variable is allowed (select list,\nWHERE, HAVING, LIMIT etc).\n\nIN\n--\n\nMariaDB starting with 10.8.0\n----------------------------\nFrom MariaDB 10.8.0 preview release, the IN qualifier is supported in the\ncursor_format_parameter part of the syntax.\n\nSee Cursor Overview for an example.\n\nURL: https://mariadb.com/kb/en/declare-cursor/','','https://mariadb.com/kb/en/declare-cursor/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (318,24,'OPEN','Syntax\n------\n\n<= MariaDB 10.2\n\nOPEN cursor_name\n\nFrom MariaDB 10.3\n\nOPEN cursor_name [expression[,...]];\n\nDescription\n-----------\n\nThis statement opens a cursor which was previously declared with DECLARE\nCURSOR.\n\nThe query associated to the DECLARE CURSOR is executed when OPEN is executed.\nIt is important to remember this if the query produces an error, or calls\nfunctions which have side effects.\n\nThis is necessary in order to FETCH rows from a cursor.\n\nSee Cursor Overview for an example.\n\nURL: https://mariadb.com/kb/en/open/','','https://mariadb.com/kb/en/open/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (319,24,'FETCH','Syntax\n------\n\nFETCH cursor_name INTO var_name [, var_name] ...\n\nDescription\n-----------\n\nThis statement fetches the next row (if a row exists) using the specified open\ncursor, and advances the cursor pointer.\n\nvar_name can be a local variable, but not a user-defined variable.\n\nIf no more rows are available, a No Data condition occurs with SQLSTATE value\n02000. To detect this condition, you can set up a handler for it (or for a NOT\nFOUND condition).\n\nSee Cursor Overview for an example.\n\nURL: https://mariadb.com/kb/en/fetch/','','https://mariadb.com/kb/en/fetch/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (320,24,'CLOSE','Syntax\n------\n\nCLOSE cursor_name\n\nDescription\n-----------\n\nThis statement closes a previously opened cursor. The cursor must have been\npreviously opened or else an error occurs.\n\nIf not closed explicitly, a cursor is closed at the end of the compound\nstatement in which it was declared.\n\nSee Cursor Overview for an example.\n\nURL: https://mariadb.com/kb/en/close/','','https://mariadb.com/kb/en/close/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (321,25,'BUFFER','A synonym for ST_BUFFER.\n\nURL: https://mariadb.com/kb/en/buffer/','','https://mariadb.com/kb/en/buffer/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (322,25,'CONVEXHULL','A synonym for ST_CONVEXHULL.\n\nURL: https://mariadb.com/kb/en/convexhull/','','https://mariadb.com/kb/en/convexhull/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (323,25,'GEOMETRYCOLLECTION','Syntax\n------\n\nGeometryCollection(g1,g2,...)\n\nDescription\n-----------\n\nConstructs a WKB GeometryCollection. If any argument is not a well-formed WKB\nrepresentation of a geometry, the return value is NULL.\n\nExamples\n--------\n\nCREATE TABLE gis_geometrycollection (g GEOMETRYCOLLECTION);\nSHOW FIELDS FROM gis_geometrycollection;\nINSERT INTO gis_geometrycollection VALUES\n (GeomCollFromText(\'GEOMETRYCOLLECTION(POINT(0 0), LINESTRING(0 0,10\n10))\')),\n (GeometryFromWKB(AsWKB(GeometryCollection(Point(44, 6),\nLineString(Point(3, 6), Point(7, 9)))))),\n (GeomFromText(\'GeometryCollection()\')),\n (GeomFromText(\'GeometryCollection EMPTY\'));\n\nURL: https://mariadb.com/kb/en/geometrycollection/','','https://mariadb.com/kb/en/geometrycollection/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (324,25,'LINESTRING','Syntax\n------\n\nLineString(pt1,pt2,...)\n\nDescription\n-----------\n\nConstructs a WKB LineString value from a number of WKB Point arguments. If any\nargument is not a WKB Point, the return value is NULL. If the number of Point\narguments is less than two, the return value is NULL.\n\nExamples\n--------\n\nSET @ls = \'LineString(1 1,2 2,3 3)\';\n\nSELECT AsText(EndPoint(GeomFromText(@ls)));\n+-------------------------------------+\n| AsText(EndPoint(GeomFromText(@ls))) |\n+-------------------------------------+\n| POINT(3 3) |\n+-------------------------------------+\n\nCREATE TABLE gis_line (g LINESTRING);\nINSERT INTO gis_line VALUES\n (LineFromText(\'LINESTRING(0 0,0 10,10 0)\')),\n (LineStringFromText(\'LINESTRING(10 10,20 10,20 20,10 20,10 10)\')),\n (LineStringFromWKB(AsWKB(LineString(Point(10, 10), Point(40, 10)))));\n\nURL: https://mariadb.com/kb/en/linestring/','','https://mariadb.com/kb/en/linestring/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (325,25,'MULTILINESTRING','Syntax\n------\n\nMultiLineString(ls1,ls2,...)\n\nDescription\n-----------\n\nConstructs a WKB MultiLineString value using WKB LineString arguments. If any\nargument is not a WKB LineString, the return value is NULL.\n\nExample\n-------\n\nCREATE TABLE gis_multi_line (g MULTILINESTRING);\nINSERT INTO gis_multi_line VALUES\n (MultiLineStringFromText(\'MULTILINESTRING((10 48,10 21,10 0),(16 0,16 23,16\n48))\')),\n (MLineFromText(\'MULTILINESTRING((10 48,10 21,10 0))\')),\n (MLineFromWKB(AsWKB(MultiLineString(LineString(Point(1, 2), \n Point(3, 5)), LineString(Point(2, 5),Point(5, 8),Point(21, 7))))));\n\nURL: https://mariadb.com/kb/en/multilinestring/','','https://mariadb.com/kb/en/multilinestring/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (326,25,'MULTIPOINT','Syntax\n------\n\nMultiPoint(pt1,pt2,...)\n\nDescription\n-----------\n\nConstructs a WKB MultiPoint value using WKB Point arguments. If any argument\nis not a WKB Point, the return value is NULL.\n\nExamples\n--------\n\nSET @g = ST_GEOMFROMTEXT(\'MultiPoint( 1 1, 2 2, 5 3, 7 2, 9 3, 8 4, 6 6, 6 9,\n4 9, 1 5 )\');\n\nCREATE TABLE gis_multi_point (g MULTIPOINT);\nINSERT INTO gis_multi_point VALUES\n (MultiPointFromText(\'MULTIPOINT(0 0,10 10,10 20,20 20)\')),\n (MPointFromText(\'MULTIPOINT(1 1,11 11,11 21,21 21)\')),\n (MPointFromWKB(AsWKB(MultiPoint(Point(3, 6), Point(4, 10)))));\n\nURL: https://mariadb.com/kb/en/multipoint/','','https://mariadb.com/kb/en/multipoint/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (327,25,'MULTIPOLYGON','Syntax\n------\n\nMultiPolygon(poly1,poly2,...)\n\nDescription\n-----------\n\nConstructs a WKB MultiPolygon value from a set of WKB Polygon arguments. If\nany argument is not a WKB Polygon, the return value is NULL.\n\nExample\n-------\n\nCREATE TABLE gis_multi_polygon (g MULTIPOLYGON);\nINSERT INTO gis_multi_polygon VALUES\n (MultiPolygonFromText(\'MULTIPOLYGON(((28 26,28 0,84 0,84 42,28 26),(52\n18,66 23,73 9,48 6,52 18)),\n ((59 18,67 18,67 13,59 13,59 18)))\')),\n (MPolyFromText(\'MULTIPOLYGON(((28 26,28 0,84 0,84 42,28 26),(52 18,66\n23,73 9,48 6,52 18)),\n ((59 18,67 18,67 13,59 13,59 18)))\')),\n (MPolyFromWKB(AsWKB(MultiPolygon(Polygon(LineString(\n Point(0, 3), Point(3, 3), Point(3, 0), Point(0, 3)))))));\n\nURL: https://mariadb.com/kb/en/multipolygon/','','https://mariadb.com/kb/en/multipolygon/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (328,25,'POINT','Syntax\n------\n\nPoint(x,y)\n\nDescription\n-----------\n\nConstructs a WKB Point using the given coordinates.\n\nExamples\n--------\n\nSET @g = ST_GEOMFROMTEXT(\'Point(1 1)\');\n\nCREATE TABLE gis_point (g POINT);\nINSERT INTO gis_point VALUES\n (PointFromText(\'POINT(10 10)\')),\n (PointFromText(\'POINT(20 10)\')),\n (PointFromText(\'POINT(20 20)\')),\n (PointFromWKB(AsWKB(PointFromText(\'POINT(10 20)\'))));\n\nURL: https://mariadb.com/kb/en/point/','','https://mariadb.com/kb/en/point/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (329,25,'PointOnSurface','A synonym for ST_PointOnSurface.\n\nURL: https://mariadb.com/kb/en/pointonsurface/','','https://mariadb.com/kb/en/pointonsurface/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (330,25,'POLYGON','Syntax\n------\n\nPolygon(ls1,ls2,...)\n\nDescription\n-----------\n\nConstructs a WKB Polygon value from a number of WKB LineString arguments. If\nany argument does not represent the WKB of a LinearRing (that is, not a closed\nand simple LineString) the return value is NULL.\n\nNote that according to the OpenGIS standard, a POLYGON should have exactly one\nExteriorRing and all other rings should lie within that ExteriorRing and thus\nbe the InteriorRings. Practically, however, some systems, including MariaDB\'s,\npermit polygons to have several \'ExteriorRings\'. In the case of there being\nmultiple, non-overlapping exterior rings ST_NUMINTERIORRINGS() will return 1.\n\nExamples\n--------\n\nSET @g = ST_GEOMFROMTEXT(\'POLYGON((1 1,1 5,4 9,6 9,9 3,7 2,1 1))\');\n\nCREATE TABLE gis_polygon (g POLYGON);\nINSERT INTO gis_polygon VALUES\n (PolygonFromText(\'POLYGON((10 10,20 10,20 20,10 20,10 10))\')),\n (PolyFromText(\'POLYGON((0 0,50 0,50 50,0 50,0 0), (10 10,20 10,20 20,10\n20,10 10))\')),\n (PolyFromWKB(AsWKB(Polygon(LineString(Point(0, 0), Point(30, 0), Point(30,\n30), Point(0, 0))))));\n\nNon-overlapping \'polygon\':\n\nSELECT ST_NumInteriorRings(ST_PolyFromText(\'POLYGON((0 0,10 0,10 10,0 10,0 0),\n (-1 -1,-5 -1,-5 -5,-1 -5,-1 -1))\')) AS NumInteriorRings;\n+------------------+\n| NumInteriorRings |\n+------------------+\n| 1 |\n+------------------+\n\nURL: https://mariadb.com/kb/en/polygon/','','https://mariadb.com/kb/en/polygon/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (331,25,'ST_BUFFER','Syntax\n------\n\nST_BUFFER(g1,r)\nBUFFER(g1,r)\n\nDescription\n-----------\n\nReturns a geometry that represents all points whose distance from geometry g1\nis less than or equal to distance, or radius, r.\n\nUses for this function could include creating for example a new geometry\nrepresenting a buffer zone around an island.\n\nBUFFER() is a synonym.\n\nExamples\n--------\n\nDetermining whether a point is within a buffer zone:\n\nSET @g1 = ST_GEOMFROMTEXT(\'POLYGON((10 10, 10 20, 20 20, 20 10, 10 10))\');\n\nSET @g2 = ST_GEOMFROMTEXT(\'POINT(8 8)\');\n\nSELECT ST_WITHIN(@g2,ST_BUFFER(@g1,5));\n+---------------------------------+\n| ST_WITHIN(@g2,ST_BUFFER(@g1,5)) |\n+---------------------------------+\n| 1 |\n+---------------------------------+\n\nSELECT ST_WITHIN(@g2,ST_BUFFER(@g1,1));\n+---------------------------------+\n| ST_WITHIN(@g2,ST_BUFFER(@g1,1)) |\n+---------------------------------+\n| 0 |\n+---------------------------------+\n\nURL: https://mariadb.com/kb/en/st_buffer/','','https://mariadb.com/kb/en/st_buffer/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (332,25,'ST_CONVEXHULL','MariaDB starting with 10.1.2\n----------------------------\nST_ConvexHull() was introduced in MariaDB 10.1.2\n\nSyntax\n------\n\nST_ConvexHull(g)\nConvexHull(g)\n\nDescription\n-----------\n\nGiven a geometry, returns a geometry that is the minimum convex geometry\nenclosing all geometries within the set. Returns NULL if the geometry value is\nNULL or an empty value.\n\nST_ConvexHull() and ConvexHull() are synonyms.\n\nExamples\n--------\n\nThe ConvexHull of a single point is simply the single point:\n\nSET @g = ST_GEOMFROMTEXT(\'Point(0 0)\');\n\nSELECT ST_ASTEXT(ST_CONVEXHULL(@g));\n+------------------------------+\n| ST_ASTEXT(ST_CONVEXHULL(@g)) |\n+------------------------------+\n| POINT(0 0) |\n+------------------------------+\n\nSET @g = ST_GEOMFROMTEXT(\'MultiPoint(0 0, 1 2, 2 3)\');\n\nSELECT ST_ASTEXT(ST_CONVEXHULL(@g));\n+------------------------------+\n| ST_ASTEXT(ST_CONVEXHULL(@g)) |\n+------------------------------+\n| POLYGON((0 0,1 2,2 3,0 0)) |\n+------------------------------+\n\nSET @g = ST_GEOMFROMTEXT(\'MultiPoint( 1 1, 2 2, 5 3, 7 2, 9 3, 8 4, 6 6, 6 9,\n4 9, 1 5 )\');\n\nSELECT ST_ASTEXT(ST_CONVEXHULL(@g));\n+----------------------------------------+\n| ST_ASTEXT(ST_CONVEXHULL(@g)) |\n+----------------------------------------+\n| POLYGON((1 1,1 5,4 9,6 9,9 3,7 2,1 1)) |\n+----------------------------------------+\n\nURL: https://mariadb.com/kb/en/st_convexhull/','','https://mariadb.com/kb/en/st_convexhull/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (333,25,'ST_INTERSECTION','Syntax\n------\n\nST_INTERSECTION(g1,g2)\n\nDescription\n-----------\n\nReturns a geometry that is the intersection, or shared portion, of geometry g1\nand geometry g2.\n\nExamples\n--------\n\nSET @g1 = ST_GEOMFROMTEXT(\'POINT(2 1)\');\n\nSET @g2 = ST_GEOMFROMTEXT(\'LINESTRING(2 1, 0 2)\');\n\nSELECT ASTEXT(ST_INTERSECTION(@g1,@g2));\n+----------------------------------+\n| ASTEXT(ST_INTERSECTION(@g1,@g2)) |\n+----------------------------------+\n| POINT(2 1) |\n+----------------------------------+\n\nURL: https://mariadb.com/kb/en/st_intersection/','','https://mariadb.com/kb/en/st_intersection/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (334,25,'ST_POINTONSURFACE','MariaDB starting with 10.1.2\n----------------------------\nST_POINTONSURFACE() was introduced in MariaDB 10.1.2\n\nSyntax\n------\n\nST_PointOnSurface(g)\nPointOnSurface(g)\n\nDescription\n-----------\n\nGiven a geometry, returns a POINT guaranteed to intersect a surface. However,\nsee MDEV-7514.\n\nST_PointOnSurface() and PointOnSurface() are synonyms.\n\nURL: https://mariadb.com/kb/en/st_pointonsurface/','','https://mariadb.com/kb/en/st_pointonsurface/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (335,25,'ST_SYMDIFFERENCE','Syntax\n------\n\nST_SYMDIFFERENCE(g1,g2)\n\nDescription\n-----------\n\nReturns a geometry that represents the portions of geometry g1 and geometry g2\nthat don\'t intersect.\n\nExamples\n--------\n\nSET @g1 = ST_GEOMFROMTEXT(\'LINESTRING(10 20, 10 40)\');\n\nSET @g2 = ST_GEOMFROMTEXT(\'LINESTRING(10 15, 10 25)\');\n\nSELECT ASTEXT(ST_SYMDIFFERENCE(@g1,@g2));\n+----------------------------------------------+\n| ASTEXT(ST_SYMDIFFERENCE(@g1,@g2)) |\n+----------------------------------------------+\n| MULTILINESTRING((10 15,10 20),(10 25,10 40)) |\n+----------------------------------------------+\n\nSET @g2 = ST_GeomFromText(\'LINESTRING(10 20, 10 41)\');\n\nSELECT ASTEXT(ST_SYMDIFFERENCE(@g1,@g2));\n+-----------------------------------+\n| ASTEXT(ST_SYMDIFFERENCE(@g1,@g2)) |\n+-----------------------------------+\n| LINESTRING(10 40,10 41) |\n+-----------------------------------+\n\nURL: https://mariadb.com/kb/en/st_symdifference/','','https://mariadb.com/kb/en/st_symdifference/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (336,25,'ST_UNION','Syntax\n------\n\nST_UNION(g1,g2)\n\nDescription\n-----------\n\nReturns a geometry that is the union of the geometry g1 and geometry g2.\n\nExamples\n--------\n\nSET @g1 = GEOMFROMTEXT(\'POINT (0 2)\');\n\nSET @g2 = GEOMFROMTEXT(\'POINT (2 0)\');\n\nSELECT ASTEXT(ST_UNION(@g1,@g2));\n+---------------------------+\n| ASTEXT(ST_UNION(@g1,@g2)) |\n+---------------------------+\n| MULTIPOINT(2 0,0 2) |\n+---------------------------+\n\nSET @g1 = GEOMFROMTEXT(\'POLYGON((0 0,0 3,3 3,3 0,0 0))\');\n\nSET @g2 = GEOMFROMTEXT(\'POLYGON((2 2,4 2,4 4,2 4,2 2))\');\n\nSELECT ASTEXT(ST_UNION(@g1,@g2));\n+------------------------------------------------+\n| ASTEXT(ST_UNION(@g1,@g2)) |\n+------------------------------------------------+\n| POLYGON((0 0,0 3,2 3,2 4,4 4,4 2,3 2,3 0,0 0)) |\n+------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/st_union/','','https://mariadb.com/kb/en/st_union/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (337,26,'SHOW GRANTS','Syntax\n------\n\nSHOW GRANTS [FOR user|role]\n\nDescription\n-----------\n\nThe SHOW GRANTS statement lists privileges granted to a particular user or\nrole.\n\nUsers\n-----\n\nThe statement lists the GRANT statement or statements that must be issued to\nduplicate the privileges that are granted to a MariaDB user account. The\naccount is named using the same format as for the GRANT statement; for\nexample, \'jeffrey\'@\'localhost\'. If you specify only the user name part of the\naccount name, a host name part of \'%\' is used. For additional information\nabout specifying account names, see GRANT.\n\nSHOW GRANTS FOR \'root\'@\'localhost\';\n+---------------------------------------------------------------------+\n| Grants for root@localhost |\n+---------------------------------------------------------------------+\n| GRANT ALL PRIVILEGES ON *.* TO \'root\'@\'localhost\' WITH GRANT OPTION |\n+---------------------------------------------------------------------+\n\nTo list the privileges granted to the account that you are using to connect to\nthe server, you can use any of the following statements:\n\nSHOW GRANTS;\nSHOW GRANTS FOR CURRENT_USER;\nSHOW GRANTS FOR CURRENT_USER();\n\nIf SHOW GRANTS FOR CURRENT_USER (or any of the equivalent syntaxes) is used in\nDEFINER context (such as within a stored procedure that is defined with SQL\nSECURITY DEFINER), the grants displayed are those of the definer and not the\ninvoker.\n\nNote that the DELETE HISTORY privilege, introduced in MariaDB 10.3.4, was\ndisplayed as DELETE VERSIONING ROWS when running SHOW GRANTS until MariaDB\n10.3.15 (MDEV-17655).\n\nRoles\n-----\n\nSHOW GRANTS can also be used to view the privileges granted to a role.\n\nExample\n-------\n\nSHOW GRANTS FOR journalist;\n+------------------------------------------+\n| Grants for journalist |\n+------------------------------------------+\n| GRANT USAGE ON *.* TO \'journalist\' |\n| GRANT DELETE ON `test`.* TO \'journalist\' |\n+------------------------------------------+\n\nFOR PUBLIC\n----------\n\nMariaDB starting with 10.11\n---------------------------\nGRANT ... TO PUBLIC was introduced in MariaDB 10.11 to grant privileges to all\nusers. SHOW GRANTS FOR PUBLIC shows all these grants.\n\nSHOW GRANTS FOR public;\n+------------------------------------------------+\n| Grants for PUBLIC |\n+------------------------------------------------+\n| GRANT ALL PRIVILEGES ON `dev_db`.* TO `PUBLIC` |\n+------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/show-grants/','','https://mariadb.com/kb/en/show-grants/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (338,26,'SHOW CREATE USER','Syntax\n------\n\nSHOW CREATE USER user_name\n\nDescription\n-----------\n\nShows the CREATE USER statement that created the given user. The statement\nrequires the SELECT privilege for the mysql database, except for the current\nuser.\n\nExamples\n--------\n\nCREATE USER foo4@test require cipher \'text\' \n issuer \'foo_issuer\' subject \'foo_subject\';\n\nSHOW CREATE USER foo4@test\\G\n*************************** 1. row ***************************\nCREATE USER \'foo4\'@\'test\' \n REQUIRE ISSUER \'foo_issuer\'\n SUBJECT \'foo_subject\'\n CIPHER \'text\'\n\nUser Password Expiry:\n\nCREATE USER \'monty\'@\'localhost\' PASSWORD EXPIRE INTERVAL 120 DAY;\n\nSHOW CREATE USER \'monty\'@\'localhost\';\n+------------------------------------------------------------------+\n| CREATE USER for monty@localhost |\n+------------------------------------------------------------------+\n| CREATE USER \'monty\'@\'localhost\' PASSWORD EXPIRE INTERVAL 120 DAY |\n+------------------------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/show-create-user/','','https://mariadb.com/kb/en/show-create-user/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (339,26,'SHOW COLUMNS','Syntax\n------\n\nSHOW [FULL] {COLUMNS | FIELDS} FROM tbl_name [FROM db_name]\n [LIKE \'pattern\' | WHERE expr]\n\nDescription\n-----------\n\nSHOW COLUMNS displays information about the columns in a given table. It also\nworks for views. The LIKE clause, if present on its own, indicates which\ncolumn names to match. The WHERE and LIKE clauses can be given to select rows\nusing more general conditions, as discussed in Extended SHOW.\n\nIf the data types differ from what you expect them to be based on a CREATE\nTABLE statement, note that MariaDB sometimes changes data types when you\ncreate or alter a table. The conditions under which this occurs are described\nin the Silent Column Changes article.\n\nThe FULL keyword causes the output to include the column collation and\ncomments, as well as the privileges you have for each column.\n\nYou can use db_name.tbl_name as an alternative to the tbl_name FROM db_name\nsyntax. In other words, these two statements are equivalent:\n\nSHOW COLUMNS FROM mytable FROM mydb;\nSHOW COLUMNS FROM mydb.mytable;\n\nSHOW COLUMNS displays the following values for each table column:\n\nField indicates the column name.\n\nType indicates the column data type.\n\nCollation indicates the collation for non-binary string columns, or NULL for\nother columns. This value is displayed only if you use the FULL keyword.\n\nThe Null field contains YES if NULL values can be stored in the column, NO if\nnot.\n\nThe Key field indicates whether the column is indexed:\n\n* If Key is empty, the column either is not indexed or is indexed only as a\n secondary column in a multiple-column, non-unique index.\n* If Key is PRI, the column is a PRIMARY KEY or\n is one of the columns in a multiple-column PRIMARY KEY.\n* If Key is UNI, the column is the first column of a unique-valued\n index that cannot contain NULL values.\n* If Key is MUL, multiple occurrences of a given value are allowed\n within the column. The column is the first column of a non-unique index or a\n unique-valued index that can contain NULL values.\n\nIf more than one of the Key values applies to a given column of a table, Key\ndisplays the one with the highest priority, in the order PRI, UNI, MUL.\n\nA UNIQUE index may be displayed as PRI if it cannot contain NULL values and\nthere is no PRIMARY KEY in the table. A UNIQUE index may display as MUL if\nseveral columns form a composite UNIQUE index; although the combination of the\ncolumns is unique, each column can still hold multiple occurrences of a given\nvalue.\n\nThe Default field indicates the default value that is assigned to the column.\n\nThe Extra field contains any additional information that is available about a\ngiven column.\n\n+------------------------+---------------------------------------------------+\n| Value | Description |\n+------------------------+---------------------------------------------------+\n| AUTO_INCREMENT | The column was created with the AUTO_INCREMENT |\n| | keyword. |\n+------------------------+---------------------------------------------------+\n| PERSISTENT | The column was created with the PERSISTENT |\n| | keyword. (New in 5.3) |\n+------------------------+---------------------------------------------------+\n| VIRTUAL | The column was created with the VIRTUAL keyword. |\n| | (New in 5.3) |\n+------------------------+---------------------------------------------------+\n| on update | The column is a TIMESTAMP column that is |\n| CURRENT_TIMESTAMP | automatically updated on INSERT and UPDATE. |\n+------------------------+---------------------------------------------------+\n\nPrivileges indicates the privileges you have for the column. This value is\ndisplayed only if you use the FULL keyword.\n\nComment indicates any comment the column has. This value is displayed only if\nyou use the FULL keyword.\n\nSHOW FIELDS is a synonym for SHOW COLUMNS. Also DESCRIBE and EXPLAIN can be\nused as shortcuts.\n\nYou can also list a table\'s columns with:\n\nmysqlshow db_name tbl_name\n\nSee the mysqlshow command for more details.\n\nThe DESCRIBE statement provides information similar to SHOW COLUMNS. The\ninformation_schema.COLUMNS table provides similar, but more complete,\ninformation.\n\nThe SHOW CREATE TABLE, SHOW TABLE STATUS, and SHOW INDEX statements also\nprovide information about tables.\n\nExamples\n--------\n\nSHOW COLUMNS FROM city;\n+------------+----------+------+-----+---------+----------------+\n| Field | Type | Null | Key | Default | Extra |\n+------------+----------+------+-----+---------+----------------+\n| Id | int(11) | NO | PRI | NULL | auto_increment |\n| Name | char(35) | NO | | | |\n| Country | char(3) | NO | UNI | | |\n| District | char(20) | YES | MUL | | |\n| Population | int(11) | NO | | 0 | |\n+------------+----------+------+-----+---------+----------------+\n\nSHOW COLUMNS FROM employees WHERE Type LIKE \'Varchar%\';\n+---------------+-------------+------+-----+---------+-------+\n| Field | Type | Null | Key | Default | Extra |\n+---------------+-------------+------+-----+---------+-------+\n| first_name | varchar(30) | NO | MUL | NULL | |\n| last_name | varchar(40) | NO | | NULL | |\n| position | varchar(25) | NO | | NULL | |\n| home_address | varchar(50) | NO | | NULL | |\n| home_phone | varchar(12) | NO | | NULL | |\n| employee_code | varchar(25) | NO | UNI | NULL | |\n+---------------+-------------+------+-----+---------+-------+\n\nURL: https://mariadb.com/kb/en/show-columns/','','https://mariadb.com/kb/en/show-columns/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (340,26,'SHOW CREATE TABLE','Syntax\n------\n\nSHOW CREATE TABLE tbl_name\n\nDescription\n-----------\n\nShows the CREATE TABLE statement that created the given table. The statement\nrequires the SELECT privilege for the table. This statement also works with\nviews and SEQUENCE.\n\nSHOW CREATE TABLE quotes table and column names according to the value of the\nsql_quote_show_create server system variable.\n\nCertain SQL_MODE values can result in parts of the original CREATE statement\nnot being included in the output. MariaDB-specific table options, column\noptions, and index options are not included in the output of this statement if\nthe NO_TABLE_OPTIONS, NO_FIELD_OPTIONS and NO_KEY_OPTIONS SQL_MODE flags are\nused. All MariaDB-specific table attributes are also not shown when a\nnon-MariaDB/MySQL emulation mode is used, which includes ANSI, DB2,\nPOSTGRESQL, MSSQL, MAXDB or ORACLE.\n\nInvalid table options, column options and index options are normally commented\nout (note, that it is possible to create a table with invalid options, by\naltering a table of a different engine, where these options were valid). To\nhave them uncommented, enable the IGNORE_BAD_TABLE_OPTIONS SQL_MODE. Remember\nthat replaying a CREATE TABLE statement with uncommented invalid options will\nfail with an error, unless the IGNORE_BAD_TABLE_OPTIONS SQL_MODE is in effect.\n\nNote that SHOW CREATE TABLE is not meant to provide metadata about a table. It\nprovides information about how the table was declared, but the real table\nstructure could differ a bit. For example, if an index has been declared as\nHASH, the CREATE TABLE statement returned by SHOW CREATE TABLE will declare\nthat index as HASH; however, it is possible that the index is in fact a BTREE,\nbecause the storage engine does not support HASH.\n\nMariaDB starting with 10.2.1\n----------------------------\nMariaDB 10.2.1 permits TEXT and BLOB data types to be assigned a DEFAULT\nvalue. As a result, from MariaDB 10.2.1, SHOW CREATE TABLE will append a\nDEFAULT NULL to nullable TEXT or BLOB fields if no specific default is\nprovided.\n\nMariaDB starting with 10.2.2\n----------------------------\nFrom MariaDB 10.2.2, numbers are no longer quoted in the DEFAULT clause in\nSHOW CREATE statement. Previously, MariaDB quoted numbers.\n\nIndex Order\n-----------\n\nIndexes are sorted and displayed in the following order, which may differ from\nthe order of the CREATE TABLE statement.\n\n* PRIMARY KEY\n* UNIQUE keys where all column are NOT NULL\n* UNIQUE keys that don\'t contain partial segments\n* Other UNIQUE keys\n* LONG UNIQUE keys\n* Normal keys\n* Fulltext keys\n\nSee sql/sql_table.cc for details.\n\nExamples\n--------\n\nSHOW CREATE TABLE t\\G\n*************************** 1. row ***************************\n Table: t\nCreate Table: CREATE TABLE `t` (\n `id` int(11) NOT NULL AUTO_INCREMENT,\n `s` char(60) DEFAULT NULL,\n PRIMARY KEY (`id`)\n) ENGINE=InnoDB DEFAULT CHARSET=latin1\n\nWith sql_quote_show_create off:\n\nSHOW CREATE TABLE t\\G\n*************************** 1. row ***************************\n Table: t\nCreate Table: CREATE TABLE t (\n id int(11) NOT NULL AUTO_INCREMENT,\n s char(60) DEFAULT NULL,\n PRIMARY KEY (id)\n) ENGINE=InnoDB DEFAULT CHARSET=latin1\n\nUnquoted numeric DEFAULTs, from MariaDB 10.2.2:\n\nCREATE TABLE td (link TINYINT DEFAULT 1);\n\nSHOW CREATE TABLE td\\G\n*************************** 1. row ***************************\n Table: td\nCreate Table: CREATE TABLE `td` (\n `link` tinyint(4) DEFAULT 1\n) ENGINE=InnoDB DEFAULT CHARSET=latin1\n\nQuoted numeric DEFAULTs, until MariaDB 10.2.1:\n\nCREATE TABLE td (link TINYINT DEFAULT 1);\n\nSHOW CREATE TABLE td\\G\n*************************** 1. row ***************************\n Table: td\nCreate Table: CREATE TABLE `td` (\n `link` tinyint(4) DEFAULT \'1\'\n) ENGINE=InnoDB DEFAULT CHARSET=latin1\n\nSQL_MODE impacting the output:\n\nSELECT @@sql_mode;\n+------------------------------------------------------------------------------\n------------+\n| @@sql_mode \n |\n+------------------------------------------------------------------------------\n------------+\n|\nSTRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SU\nSTITUTION |\n+------------------------------------------------------------------------------\n------------+\n\nCREATE TABLE `t1` (\n `id` int(11) NOT NULL AUTO_INCREMENT,\n `msg` varchar(100) DEFAULT NULL,\n PRIMARY KEY (`id`)\n ) ENGINE=InnoDB DEFAULT CHARSET=latin1\n;\n\nSHOW CREATE TABLE t1\\G\n*************************** 1. row ***************************\n Table: t1\nCreate Table: CREATE TABLE `t1` (\n `id` int(11) NOT NULL AUTO_INCREMENT,\n `msg` varchar(100) DEFAULT NULL,\n PRIMARY KEY (`id`)\n) ENGINE=InnoDB DEFAULT CHARSET=latin1\n\nSET SQL_MODE=ORACLE;\n\nSHOW CREATE TABLE t1\\G\n*************************** 1. row ***************************\n Table: t1\nCreate Table: CREATE TABLE \"t1\" (\n \"id\" int(11) NOT NULL,\n \"msg\" varchar(100) DEFAULT NULL,\n PRIMARY KEY (\"id\")\n\nURL: https://mariadb.com/kb/en/show-create-table/','','https://mariadb.com/kb/en/show-create-table/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (341,26,'SHOW INDEX','Syntax\n------\n\nSHOW {INDEX | INDEXES | KEYS} \n FROM tbl_name [FROM db_name]\n [WHERE expr]\n\nDescription\n-----------\n\nSHOW INDEX returns table index information. The format resembles that of the\nSQLStatistics call in ODBC.\n\nYou can use db_name.tbl_name as an alternative to the tbl_name FROM db_name\nsyntax. These two statements are equivalent:\n\nSHOW INDEX FROM mytable FROM mydb;\nSHOW INDEX FROM mydb.mytable;\n\nSHOW KEYS and SHOW INDEXES are synonyms for SHOW INDEX.\n\nYou can also list a table\'s indexes with the mariadb-show/mysqlshow command:\n\nmysqlshow -k db_name tbl_name\n\nThe information_schema.STATISTICS table stores similar information.\n\nThe following fields are returned by SHOW INDEX.\n\n+------------------------+---------------------------------------------------+\n| Field | Description |\n+------------------------+---------------------------------------------------+\n| Table | Table name |\n+------------------------+---------------------------------------------------+\n| Non_unique | 1 if the index permits duplicate values, 0 if |\n| | values must be unique. |\n+------------------------+---------------------------------------------------+\n| Key_name | Index name. The primary key is always named |\n| | PRIMARY. |\n+------------------------+---------------------------------------------------+\n| Seq_in_index | The column\'s sequence in the index, beginning |\n| | with 1. |\n+------------------------+---------------------------------------------------+\n| Column_name | Column name. |\n+------------------------+---------------------------------------------------+\n| Collation | Either A, if the column is sorted in ascending |\n| | order in the index, or NULL if it\'s not sorted. |\n+------------------------+---------------------------------------------------+\n| Cardinality | Estimated number of unique values in the index. |\n| | The cardinality statistics are calculated at |\n| | various times, and can help the optimizer make |\n| | improved decisions. |\n+------------------------+---------------------------------------------------+\n| Sub_part | NULL if the entire column is included in the |\n| | index, or the number of included characters if |\n| | not. |\n+------------------------+---------------------------------------------------+\n| Packed | NULL if the index is not packed, otherwise how |\n| | the index is packed. |\n+------------------------+---------------------------------------------------+\n| Null | NULL if NULL values are permitted in the column, |\n| | an empty string if NULLs are not permitted. |\n+------------------------+---------------------------------------------------+\n| Index_type | The index type, which can be BTREE, FULLTEXT, |\n| | HASH or RTREE. See Storage Engine Index Types. |\n+------------------------+---------------------------------------------------+\n| Comment | Other information, such as whether the index is |\n| | disabled. |\n+------------------------+---------------------------------------------------+\n| Index_comment | Contents of the COMMENT attribute when the index |\n| | was created. |\n+------------------------+---------------------------------------------------+\n| Ignored | Whether or not an index will be ignored by the |\n| | optimizer. See Ignored Indexes. From MariaDB |\n| | 10.6.0. |\n+------------------------+---------------------------------------------------+\n\nThe WHERE and LIKE clauses can be given to select rows using more general\nconditions, as discussed in Extended SHOW.\n\nExamples\n--------\n\nCREATE TABLE IF NOT EXISTS `employees_example` (\n `id` int(11) NOT NULL AUTO_INCREMENT,\n `first_name` varchar(30) NOT NULL,\n `last_name` varchar(40) NOT NULL,\n `position` varchar(25) NOT NULL,\n `home_address` varchar(50) NOT NULL,\n `home_phone` varchar(12) NOT NULL,\n `employee_code` varchar(25) NOT NULL,\n PRIMARY KEY (`id`),\n UNIQUE KEY `employee_code` (`employee_code`),\n KEY `first_name` (`first_name`,`last_name`)\n) ENGINE=Aria;\n\nINSERT INTO `employees_example` (`first_name`, `last_name`, `position`,\n`home_address`, `home_phone`, `employee_code`)\n VALUES\n (\'Mustapha\', \'Mond\', \'Chief Executive Officer\', \'692 Promiscuous Plaza\',\n\'326-555-3492\', \'MM1\'),\n (\'Henry\', \'Foster\', \'Store Manager\', \'314 Savage Circle\', \'326-555-3847\',\n\'HF1\'),\n (\'Bernard\', \'Marx\', \'Cashier\', \'1240 Ambient Avenue\', \'326-555-8456\', \'BM1\'),\n (\'Lenina\', \'Crowne\', \'Cashier\', \'281 Bumblepuppy Boulevard\', \'328-555-2349\',\n\'LC1\'),\n (\'Fanny\', \'Crowne\', \'Restocker\', \'1023 Bokanovsky Lane\', \'326-555-6329\',\n\'FC1\'),\n (\'Helmholtz\', \'Watson\', \'Janitor\', \'944 Soma Court\', \'329-555-2478\', \'HW1\');\n\nSHOW INDEXES FROM employees_example\\G\n*************************** 1. row ***************************\n Table: employees_example\n Non_unique: 0\n Key_name: PRIMARY\n Seq_in_index: 1\n Column_name: id\n Collation: A\n Cardinality: 6\n Sub_part: NULL\n Packed: NULL\n Null:\n Index_type: BTREE\n Comment:\nIndex_comment: \n Ignored: NO\n*************************** 2. row ***************************\n Table: employees_example\n Non_unique: 0\n Key_name: employee_code\n Seq_in_index: 1\n Column_name: employee_code\n Collation: A\n Cardinality: 6\n Sub_part: NULL\n Packed: NULL\n Null:\n Index_type: BTREE\n Comment:\nIndex_comment: \n Ignored: NO\n*************************** 3. row ***************************\n Table: employees_example\n Non_unique: 1\n Key_name: first_name\n Seq_in_index: 1\n Column_name: first_name\n Collation: A\n Cardinality: NULL\n Sub_part: NULL\n Packed: NULL\n Null:\n Index_type: BTREE\n Comment:\nIndex_comment: \n Ignored: NO\n*************************** 4. row ***************************\n Table: employees_example\n Non_unique: 1\n Key_name: first_name\n Seq_in_index: 2\n Column_name: last_name\n Collation: A\n Cardinality: NULL\n Sub_part: NULL\n Packed: NULL\n Null:\n Index_type: BTREE\n Comment:\nIndex_comment: \n Ignored: NO\n\nURL: https://mariadb.com/kb/en/show-index/','','https://mariadb.com/kb/en/show-index/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (342,26,'SHOW EXPLAIN','Syntax\n------\n\nSHOW EXPLAIN [FORMAT=JSON] FOR <connection_id>;\nEXPLAIN [FORMAT=JSON] FOR CONNECTION <connection_id>;\n\nDescription\n-----------\n\nThe SHOW EXPLAIN command allows one to get an EXPLAIN (that is, a description\nof a query plan) of a query running in a certain connection.\n\nSHOW EXPLAIN FOR <connection_id>;\n\nwill produce an EXPLAIN output for the query that connection number\nconnection_id is running. The connection id can be obtained with SHOW\nPROCESSLIST.\n\nSHOW EXPLAIN FOR 1;\n+------+-------------+-------+-------+---------------+------+---------+------+-\n-------+-------------+\n| id | select_type | table | type | possible_keys | key | key_len | ref |\nrows | Extra |\n+------+-------------+-------+-------+---------------+------+---------+------+-\n-------+-------------+\n| 1 | SIMPLE | tbl | index | NULL | a | 5 | NULL |\n1000107 | Using index |\n+------+-------------+-------+-------+---------------+------+---------+------+-\n-------+-------------+\n1 row in set, 1 warning (0.00 sec)\n\nThe output is always accompanied with a warning which shows the query the\ntarget connection is running (this shows what the EXPLAIN is for):\n\nSHOW WARNINGS;\n+-------+------+------------------------+\n| Level | Code | Message |\n+-------+------+------------------------+\n| Note | 1003 | select sum(a) from tbl |\n+-------+------+------------------------+\n1 row in set (0.00 sec)\n\nEXPLAIN FOR CONNECTION\n----------------------\n\nMariaDB starting with 10.9\n--------------------------\nThe EXPLAIN FOR CONNECTION syntax was added for MySQL compatibility.\n\nFORMAT=JSON\n-----------\n\nMariaDB starting with 10.9\n--------------------------\nSHOW EXPLAIN [FORMAT=JSON] FOR <connection_id> extends SHOW EXPLAIN to return\nmore detailed JSON output.\n\nPossible Errors\n---------------\n\nThe output can be only produced if the target connection is currently running\na query, which has a ready query plan. If this is not the case, the output\nwill be:\n\nSHOW EXPLAIN FOR 2;\nERROR 1932 (HY000): Target is not running an EXPLAINable command\n\nYou will get this error when:\n\n* the target connection is not running a command for which one can run EXPLAIN\n* the target connection is running a command for which one can run EXPLAIN, but\nthere is no query plan yet (for example, tables are open and locks are\n acquired before the query plan is produced)\n\nDifferences Between SHOW EXPLAIN and EXPLAIN Outputs\n----------------------------------------------------\n\nBackground\n----------\n\nIn MySQL, EXPLAIN execution takes a slightly different route from the way the\nreal query (typically the SELECT) is optimized. This is unfortunate, and has\ncaused a number of bugs in EXPLAIN. (For example, see MDEV-326, MDEV-410, and\nlp:1013343. lp:992942 is not directly about EXPLAIN, but it also would not\nhave existed if MySQL didn\'t try to delete parts of a query plan in the middle\nof the query)\n\nSHOW EXPLAIN examines a running SELECT, and hence its output may be slightly\ndifferent from what EXPLAIN SELECT would produce. We did our best to make sure\nthat either the difference is negligible, or SHOW EXPLAIN\'s output is closer\nto reality than EXPLAIN\'s output.\n\nList of Recorded Differences\n----------------------------\n\n* SHOW EXPLAIN may have Extra=\'no matching row in const table\', where EXPLAIN\nwould produce Extra=\'Impossible WHERE ...\'\n* For queries with subqueries, SHOW EXPLAIN may print select_type==PRIMARY\nwhere regular EXPLAIN used to print select_type==SIMPLE, or vice versa.\n\nRequired Permissions\n--------------------\n\nRunning SHOW EXPLAIN requires the same permissions as running SHOW PROCESSLIST\nwould.\n\nURL: https://mariadb.com/kb/en/show-explain/','','https://mariadb.com/kb/en/show-explain/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (343,26,'BACKUP STAGE','MariaDB starting with 10.4.1\n----------------------------\nThe BACKUP STAGE commands were introduced in MariaDB 10.4.1.\n\nThe BACKUP STAGE commands are a set of commands to make it possible to make an\nefficient external backup tool.\n\nSyntax\n------\n\nBACKUP STAGE [START | FLUSH | BLOCK_DDL | BLOCK_COMMIT | END ]\n\nIn the following text, a transactional table means InnoDB or \"InnoDB-like\nengine with redo log that can lock redo purges and can be copied without locks\nby an outside process\".\n\nGoals with BACKUP STAGE Commands\n--------------------------------\n\n* To be able to do a majority of the backup with the minimum possible server\nlocks. Especially for transactional tables (InnoDB, MyRocks etc) there is only\nneed for a very short block of new commits while copying statistics and log\ntables.\n* DDL are only needed to be blocked for a very short duration of the backup\nwhile mariabackup is copying the tables affected by DDL during the initial\npart of the backup.\n* Most non transactional tables (those that are not in use) will be copied\nduring BACKUP STAGE START. The exceptions are system statistic and log tables\nthat are not blocked during the backup until BLOCK_COMMIT.\n* Should work efficiently with backup tools that use disk snapshots.\n* Should work as efficiently as possible for all table types that store data\non the local disks.\n* As little copying as possible under higher level stages/locks. For example,\n.frm (dictionary) and .trn (trigger) files should be copying while copying the\ntable data.\n\nBACKUP STAGE Commands\n---------------------\n\nBACKUP STAGE START\n------------------\n\nThe START stage is designed for the following tasks:\n\n* Blocks purge of redo files for storage engines that needs this (Aria)\n* Start logging of DDL commands into \'datadir\'/ddl.log. This may take a short\ntime as the command has to wait until there are no active DDL commands.\n\nBACKUP STAGE FLUSH\n------------------\n\nThe FLUSH stage is designed for the following tasks:\n\n* FLUSH all changes for inactive non-transactional tables, except for\nstatistics and log tables.\n* Close all tables that are not in use, to ensure they are marked as closed\nfor the backup.\n* BLOCK all new write locks for all non transactional tables (except\nstatistics and log tables). The command will not wait for tables that are in\nuse by read-only transactions.\n\nDDLs don\'t have to be blocked at this stage as they can\'t cause the table to\nbe in an inconsistent state. This is true also for non-transactional tables.\n\nBACKUP STAGE BLOCK_DDL\n----------------------\n\nThe BLOCK_DDL stage is designed for the following tasks:\n\n* Wait for all statements using write locked non-transactional tables to end.\n* Blocks CREATE TABLE, DROP TABLE, TRUNCATE TABLE, and RENAME TABLE.\n* Blocks also start off a new ALTER TABLE and the final rename phase of ALTER\nTABLE. Running ALTER TABLES are not blocked.\n\nBACKUP STAGE BLOCK_COMMIT\n-------------------------\n\nThe BLOCK_COMMIT stage is designed for the following tasks:\n\n* Lock the binary log and commit/rollback to ensure that no changes are\ncommitted to any tables. If there are active commits or data to be copied to\nthe binary log this will be allowed to finish. Active transactions will not\naffect BLOCK_COMMIT.\n* This doesn\'t lock temporary tables that are not used by replication. However\nthese will be blocked when it\'s time to write to the binary log.\n* Lock system log tables and statistics tables, flush them and mark them\nclosed.\n\nWhen the BLOCK_COMMIT\'s stages return, this is the \'backup time\'. Everything\ncommitted will be in the backup and everything not committed will roll back.\n\nTransactional engines will continue to do changes to the redo log during the\nBLOCK COMMIT stage, but this is not important as all of these will roll back\nlater as the changes will not be committed.\n\nBACKUP STAGE END\n----------------\n\nThe END stage is designed for the following tasks:\n\n* End DDL logging\n* Free resources\n\nUsing BACKUP STAGE Commands with Backup Tools\n---------------------------------------------\n\nUsing BACKUP STAGE Commands with Mariabackup\n--------------------------------------------\n\nThe BACKUP STAGE commands are a set of commands to make it possible to make an\nefficient external backup tool. How Mariabackup uses these commands depends on\nwhether you are using the version that is bundled with MariaDB Community\nServer or the version that is bundled with MariaDB Enterprise Server. See\nMariabackup and BACKUP STAGE Commands for some examples on how Mariabackup\nuses these commands.\n\nIf you would like to use a version of Mariabackup that uses the BACKUP STAGE\ncommands in an efficient way, then one option is to use MariaDB Enterprise\nBackup that is bundled with MariaDB Enterprise Server.\n\nUsing BACKUP STAGE Commands with Storage Snapshots\n--------------------------------------------------\n\nThe BACKUP STAGE commands are a set of commands to make it possible to make an\nefficient external backup tool. These commands could even be used by tools\nthat perform backups by taking a snapshot of a file system, SAN, or some other\nkind of storage device. See Storage Snapshots and BACKUP STAGE Commands for\nsome examples on how to use each BACKUP STAGE command in an efficient way.\n\nPrivileges\n----------\n\nBACKUP STAGE requires the RELOAD privilege.\n\nNotes\n-----\n\n* Only one connection can run BACKUP STAGE START. If a second connection\ntries, it will wait until the first one has executed BACKUP STAGE END.\n* If the user skips a BACKUP STAGE, then all intermediate backup stages will\nautomatically be run. This will allow us to add new stages within the BACKUP\nSTAGE hierarchy in the future with even more precise locks without causing\nproblems for tools using an earlier version of the BACKUP STAGE implementation.\n* One can use the max_statement_time or lock_wait_timeout system variables to\nensure that a BACKUP STAGE command doesn\'t block the server too long.\n* DDL logging will only be available in MariaDB Enterprise Server 10.2 and\nlater.\n* A disconnect will automatically release backup stages.\n* There is no easy way to see which is the current stage.\n\nURL: https://mariadb.com/kb/en/backup-stage/','','https://mariadb.com/kb/en/backup-stage/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (344,26,'BACKUP LOCK','MariaDB starting with 10.4.2\n----------------------------\nThe BACKUP LOCK command was introduced in MariaDB 10.4.2.\n\nBACKUP LOCK blocks a table from DDL statements. This is mainly intended to be\nused by tools like mariabackup that need to ensure there are no DDLs on a\ntable while the table files are opened. For example, for an Aria table that\nstores data in 3 files with extensions .frm, .MAI and .MAD. Normal read/write\noperations can continue as normal.\n\nSyntax\n------\n\nTo lock a table:\n\nBACKUP LOCK table_name\n\nTo unlock a table:\n\nBACKUP UNLOCK\n\nUsage in a Backup Tool\n----------------------\n\nBACKUP LOCK [database.]table_name;\n - Open all files related to a table (for example, t.frm, t.MAI and t.MYD)\nBACKUP UNLOCK;\n- Copy data\n- Close files\n\nThis ensures that all files are from the same generation, that is created at\nthe same time by the MariaDB server. This works, because the open files will\npoint to the original table files which will not be affected if there is any\nALTER TABLE while copying the files.\n\nPrivileges\n----------\n\nBACKUP LOCK requires the RELOAD privilege.\n\nNotes\n-----\n\n* The idea is that the BACKUP LOCK should be held for as short a time as\npossible by the backup tool. The time to take an uncontested lock is very\nshort! One can easily do 50,000 locks/unlocks per second on low end hardware.\n* One should use different connections for BACKUP STAGE commands and BACKUP\nLOCK.\n\nImplementation\n--------------\n\n* Internally, BACKUP LOCK is implemented by taking an MDLSHARED_HIGH_PRIO MDL\nlock on the table object, which protects the table from any DDL operations.\n\nURL: https://mariadb.com/kb/en/backup-lock/','','https://mariadb.com/kb/en/backup-lock/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (345,26,'FLUSH','Syntax\n------\n\nFLUSH [NO_WRITE_TO_BINLOG | LOCAL]\n flush_option [, flush_option] ...\n\nor when flushing tables:\n\nFLUSH [NO_WRITE_TO_BINLOG | LOCAL] TABLES [table_list] [table_flush_option]\n\nwhere table_list is a list of tables separated by , (comma).\n\nDescription\n-----------\n\nThe FLUSH statement clears or reloads various internal caches used by MariaDB.\nTo execute FLUSH, you must have the RELOAD privilege. See GRANT.\n\nThe RESET statement is similar to FLUSH. See RESET.\n\nYou cannot issue a FLUSH statement from within a stored function or a trigger.\nDoing so within a stored procedure is permitted, as long as it is not called\nby a stored function or trigger. See Stored Routine Limitations, Stored\nFunction Limitations and Trigger Limitations.\n\nIf a listed table is a view, an error like the following will be produced:\n\nERROR 1347 (HY000): \'test.v\' is not BASE TABLE\n\nBy default, FLUSH statements are written to the binary log and will be\nreplicated. The NO_WRITE_TO_BINLOG keyword (LOCAL is an alias) will ensure the\nstatement is not written to the binary log.\n\nThe different flush options are:\n\n+---------------------------+------------------------------------------------+\n| Option | Description |\n+---------------------------+------------------------------------------------+\n| CHANGED_PAGE_BITMAPS | XtraDB only. Internal command used for backup |\n| | purposes. See the Information Schema |\n| | CHANGED_PAGE_BITMAPS Table. |\n+---------------------------+------------------------------------------------+\n| CLIENT_STATISTICS | Reset client statistics (see SHOW |\n| | CLIENT_STATISTICS). |\n+---------------------------+------------------------------------------------+\n| DES_KEY_FILE | Reloads the DES key file (Specified with the |\n| | --des-key-file startup option). |\n+---------------------------+------------------------------------------------+\n| HOSTS | Flush the hostname cache (used for converting |\n| | ip to host names and for unblocking blocked |\n| | hosts. See max_connect_errors and |\n| | performance_schema.host_cache |\n+---------------------------+------------------------------------------------+\n| INDEX_STATISTICS | Reset index statistics (see SHOW |\n| | INDEX_STATISTICS). |\n+---------------------------+------------------------------------------------+\n| [ERROR | ENGINE | | Close and reopen the specified log type, or |\n| GENERAL | SLOW | BINARY | all log types if none are specified. FLUSH |\n| | RELAY] LOGS | RELAY LOGS [connection-name] can be used to |\n| | flush the relay logs for a specific |\n| | connection. Only one connection can be |\n| | specified per FLUSH command. See Multi-source |\n| | replication. FLUSH ENGINE LOGS will delete |\n| | all unneeded Aria redo logs. Since MariaDB |\n| | 10.1.30 and MariaDB 10.2.11, FLUSH BINARY |\n| | LOGS DELETE_DOMAIN_ID=(list-of-domains) can |\n| | be used to discard obsolete GTID domains from |\n| | the server\'s binary log state. In order for |\n| | this to be successful, no event group from |\n| | the listed GTID domains can be present in |\n| | existing binary log files. If some still |\n| | exist, then they must be purged prior to |\n| | executing this command. If the command |\n| | completes successfully, then it also rotates |\n| | the binary log. |\n+---------------------------+------------------------------------------------+\n| MASTER | Deprecated option, use RESET MASTER instead. |\n+---------------------------+------------------------------------------------+\n| PRIVILEGES | Reload all privileges from the privilege |\n| | tables in the mysql database. If the server |\n| | is started with --skip-grant-table option, |\n| | this will activate the privilege tables again. |\n+---------------------------+------------------------------------------------+\n| QUERY CACHE | Defragment the query cache to better utilize |\n| | its memory. If you want to reset the query |\n| | cache, you can do it with RESET QUERY CACHE. |\n+---------------------------+------------------------------------------------+\n| QUERY_RESPONSE_TIME | See the QUERY_RESPONSE_TIME plugin. |\n+---------------------------+------------------------------------------------+\n| SLAVE | Deprecated option, use RESET REPLICA or RESET |\n| | SLAVE instead. |\n+---------------------------+------------------------------------------------+\n| SSL | Used to dynamically reinitialize the server\'s |\n| | TLS context by reloading the files defined by |\n| | several TLS system variables. See FLUSH SSL |\n| | for more information. This command was first |\n| | added in MariaDB 10.4.1. |\n+---------------------------+------------------------------------------------+\n| STATUS | Resets all server status variables that can |\n| | be reset to 0. Not all global status |\n| | variables support this, so not all global |\n| | values are reset. See FLUSH STATUS for more |\n| | information. |\n+---------------------------+------------------------------------------------+\n| TABLE | Close tables given as options or all open |\n| | tables if no table list was used. From |\n| | MariaDB 10.4.1, using without any table list |\n| | will only close tables not in use, and tables |\n| | not locked by the FLUSH TABLES connection. If |\n| | there are no locked tables, FLUSH TABLES will |\n| | be instant and will not cause any waits, as |\n| | it no longer waits for tables in use. When a |\n| | table list is provided, from MariaDB 10.4.1, |\n| | the server will wait for the end of any |\n| | transactions that are using the tables. |\n| | Previously, FLUSH TABLES only waited for the |\n| | statements to complete. |\n+---------------------------+------------------------------------------------+\n| TABLES | Same as FLUSH TABLE. |\n+---------------------------+------------------------------------------------+\n| TABLES ... FOR EXPORT | For InnoDB tables, flushes table changes to |\n| | disk to permit binary table copies while the |\n| | server is running. See FLUSH TABLES ... FOR |\n| | EXPORT for more. |\n+---------------------------+------------------------------------------------+\n| TABLES WITH READ LOCK | Closes all open tables. New tables are only |\n| | allowed to be opened with read locks until an |\n| | UNLOCK TABLES is given. |\n+---------------------------+------------------------------------------------+\n| TABLES WITH READ LOCK | As TABLES WITH READ LOCK but also disable all |\n| AND DISABLE CHECKPOINT | checkpoint writes by transactional table |\n| | engines. This is useful when doing a disk |\n| | snapshot of all tables. |\n+---------------------------+------------------------------------------------+\n| TABLE_STATISTICS | Reset table statistics (see SHOW |\n| | TABLE_STATISTICS). |\n+---------------------------+------------------------------------------------+\n| USER_RESOURCES | Resets all per hour user resources. This |\n| | enables clients that have exhausted their |\n| | resources to connect again. |\n+---------------------------+------------------------------------------------+\n| USER_STATISTICS | Reset user statistics (see SHOW |\n| | USER_STATISTICS). |\n+---------------------------+------------------------------------------------+\n| USER_VARIABLES | Reset user variables (see User-defined |\n| | variables). |\n+---------------------------+------------------------------------------------+\n\nYou can also use the mysqladmin client to flush things. Use mysqladmin --help\nto examine what flush commands it supports.\n\nFLUSH RELAY LOGS\n----------------\n\nFLUSH RELAY LOGS \'connection_name\';\n\nCompatibility with MySQL\n------------------------\n\nMariaDB starting with 10.7.0\n----------------------------\nThe FOR CHANNEL keyword was added for MySQL compatibility. This is identical\nas using the channel_name directly after the FLUSH command.\n\nFor example, one can now use:\n\nFLUSH RELAY LOGS FOR CHANNEL \'connection_name\';\n\nFLUSH STATUS\n------------\n\nServer status variables can be reset by executing the following:\n\nFLUSH STATUS;\n\nGlobal Status Variables that Support FLUSH STATUS\n-------------------------------------------------\n\nNot all global status variables support being reset by FLUSH STATUS.\nCurrently, the following status variables are reset by FLUSH STATUS:\n\n* Aborted_clients\n* Aborted_connects\n* Binlog_cache_disk_use\n* Binlog_cache_use\n* Binlog_stmt_cache_disk_use\n* Binlog_stmt_cache_use\n* Connection_errors_accept\n* Connection_errors_internal\n* Connection_errors_max_connections\n* Connection_errors_peer_address\n* Connection_errors_select\n* Connection_errors_tcpwrap\n* Created_tmp_files\n* Delayed_errors\n* Delayed_writes\n* Feature_check_constraint\n* Feature_delay_key_write\n* Max_used_connections\n* Opened_plugin_libraries\n* Performance_schema_accounts_lost\n* Performance_schema_cond_instances_lost\n* Performance_schema_digest_lost\n* Performance_schema_file_handles_lost\n* Performance_schema_file_instances_lost\n* Performance_schema_hosts_lost\n* Performance_schema_locker_lost\n* Performance_schema_mutex_instances_lost\n* Performance_schema_rwlock_instances_lost\n* Performance_schema_session_connect_attrs_lost\n* Performance_schema_socket_instances_lost\n* Performance_schema_stage_classes_lost\n* Performance_schema_statement_classes_lost\n* Performance_schema_table_handles_lost\n* Performance_schema_table_instances_lost\n* Performance_schema_thread_instances_lost\n* Performance_schema_users_lost\n* Qcache_hits\n* Qcache_inserts\n* Qcache_lowmem_prunes\n* Qcache_not_cached\n* Rpl_semi_sync_master_no_times\n* Rpl_semi_sync_master_no_tx\n* Rpl_semi_sync_master_timefunc_failures\n* Rpl_semi_sync_master_wait_pos_backtraverse\n* Rpl_semi_sync_master_yes_tx\n* Rpl_transactions_multi_engine\n* Server_audit_writes_failed\n* Slave_retried_transactions\n* Slow_launch_threads\n* Ssl_accept_renegotiates\n* Ssl_accepts\n* Ssl_callback_cache_hits\n* Ssl_client_connects\n* Ssl_connect_renegotiates\n* Ssl_ctx_verify_depth\n* Ssl_ctx_verify_mode\n* Ssl_finished_accepts\n* Ssl_finished_connects\n* Ssl_session_cache_hits\n* Ssl_session_cache_misses\n* Ssl_session_cache_overflows\n* Ssl_session_cache_size\n* Ssl_session_cache_timeouts\n* Ssl_sessions_reused\n* Ssl_used_session_cache_entries\n* Subquery_cache_hit\n* Subquery_cache_miss\n* Table_locks_immediate\n* Table_locks_waited\n* Tc_log_max_pages_used\n* Tc_log_page_waits\n* Transactions_gtid_foreign_engine\n* Transactions_multi_engine\n\nThe different usage of FLUSH TABLES\n-----------------------------------\n\nThe purpose of FLUSH TABLES\n---------------------------\n\nThe purpose of FLUSH TABLES is to clean up the open table cache and table\ndefinition cache from not in use tables. This frees up memory and file\ndescriptors. Normally this is not needed as the caches works on a FIFO bases,\nbut can be useful if the server seams to use up to much memory for some reason.\n\nThe purpose of FLUSH TABLES WITH READ LOCK \n-------------------------------------------\n\nFLUSH TABLES WITH READ LOCK is useful if you want to take a backup of some\ntables. When FLUSH TABLES WITH READ LOCK returns, all write access to tables\nare blocked and all tables are marked as \'properly closed\' on disk. The tables\ncan still be used for read operations.\n\nThe purpose of FLUSH TABLES table_list\n--------------------------------------\n\nFLUSH TABLES table_list is useful if you want to copy a table object/files to\nor from the server. This command puts a lock that stops new users of the table\nand will wait until everyone has stopped using the table. The table is then\nremoved from the table definition and table cache.\n\nNote that it\'s up to the user to ensure that no one is accessing the table\nbetween FLUSH TABLES and the table is copied to or from the server. This can\nbe secured by using LOCK TABLES.\n','','https://mariadb.com/kb/en/flush/');
+update help_topic set description = CONCAT(description, '\nIf there are any tables locked by the connection that is using FLUSH TABLES\nall the locked tables will be closed as part of the flush and reopened and\nrelocked before FLUSH TABLES returns. This allows one to copy the table after\nFLUSH TABLES returns without having any writes on the table. For now this\nworks works with most tables, except InnoDB as InnoDB may do background purges\non the table even while it\'s write locked.\n\nThe purpose of FLUSH TABLES table_list WITH READ LOCK\n-----------------------------------------------------\n\nFLUSH TABLES table_list WITH READ LOCK should work as FLUSH TABLES WITH READ\nLOCK, but only those tables that are listed will be properly closed. However\nin practice this works exactly like FLUSH TABLES WITH READ LOCK as the FLUSH\ncommand has anyway to wait for all WRITE operations to end because we are\ndepending on a global read lock for this code. In the future we should\nconsider fixing this to instead use meta data locks.\n\nImplementation of FLUSH TABLES commands in MariaDB 10.4.8 and above\n-------------------------------------------------------------------\n\nImplementation of FLUSH TABLES\n------------------------------\n\n* Free memory and file descriptors not in use\n\nImplementation of FLUSH TABLES WITH READ LOCK\n---------------------------------------------\n\n* Lock all tables read only for simple old style backup.\n* All background writes are suspended and tables are marked as closed.\n* No statement requiring table changes are allowed for any user until UNLOCK\nTABLES.\n\nInstead of using FLUSH TABLE WITH READ LOCK one should in most cases instead\nuse BACKUP STAGE BLOCK_COMMIT.\n\nImplementation of FLUSH TABLES table_list\n-----------------------------------------\n\n* Free memory and file descriptors for tables not in use from table list.\n* Lock given tables as read only.\n* Wait until all translations has ended that uses any of the given tables.\n* Wait until all background writes are suspended and tables are marked as\nclosed.\n\nImplementation of FLUSH TABLES table_list FOR EXPORT\n----------------------------------------------------\n\n* Free memory and file descriptors for tables not in use from table list\n* Lock given tables as read.\n* Wait until all background writes are suspended and tables are marked as\nclosed.\n* Check that all tables supports FOR EXPORT\n* No changes to these tables allowed until UNLOCK TABLES\n\nThis is basically the same behavior as in old MariaDB version if one first\nlock the tables, then do FLUSH TABLES. The tables will be copyable until\nUNLOCK TABLES.\n\nFLUSH SSL\n---------\n\nMariaDB starting with 10.4\n--------------------------\nThe FLUSH SSL command was first added in MariaDB 10.4.\n\nIn MariaDB 10.4 and later, the FLUSH SSL command can be used to dynamically\nreinitialize the server\'s TLS context. This is most useful if you need to\nreplace a certificate that is about to expire without restarting the server.\n\nThis operation is performed by reloading the files defined by the following\nTLS system variables:\n\n* ssl_cert\n* ssl_key\n* ssl_ca\n* ssl_capath\n* ssl_crl\n* ssl_crlpath\n\nThese TLS system variables are not dynamic, so their values can not be changed\nwithout restarting the server.\n\nIf you want to dynamically reinitialize the server\'s TLS context, then you\nneed to change the certificate and key files at the relevant paths defined by\nthese TLS system variables, without actually changing the values of the\nvariables. See MDEV-19341 for more information.\n\nReducing Memory Usage\n---------------------\n\nTo flush some of the global caches that take up memory, you could execute the\nfollowing command:\n\nFLUSH LOCAL HOSTS,\n QUERY CACHE,\n TABLE_STATISTICS,\n INDEX_STATISTICS,\n USER_STATISTICS;\n\nURL: https://mariadb.com/kb/en/flush/') WHERE help_topic_id = 345;
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (346,26,'FLUSH QUERY CACHE','Description\n-----------\n\nYou can defragment the query cache to better utilize its memory with the FLUSH\nQUERY CACHE statement. The statement does not remove any queries from the\ncache.\n\nThe RESET QUERY CACHE statement removes all query results from the query\ncache. The FLUSH TABLES statement also does this.\n\nURL: https://mariadb.com/kb/en/flush-query-cache/','','https://mariadb.com/kb/en/flush-query-cache/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (347,26,'FLUSH TABLES FOR EXPORT','Syntax\n------\n\nFLUSH TABLES table_name [, table_name] FOR EXPORT\n\nDescription\n-----------\n\nFLUSH TABLES ... FOR EXPORT flushes changes to the specified tables to disk so\nthat binary copies can be made while the server is still running. This works\nfor Archive, Aria, CSV, InnoDB, MyISAM, MERGE, and XtraDB tables.\n\nThe table is read locked until one has issued UNLOCK TABLES.\n\nIf a storage engine does not support FLUSH TABLES FOR EXPORT, a 1031 error\n(SQLSTATE \'HY000\') is produced.\n\nIf FLUSH TABLES ... FOR EXPORT is in effect in the session, the following\nstatements will produce an error if attempted:\n\n* FLUSH TABLES WITH READ LOCK\n* FLUSH TABLES ... WITH READ LOCK\n* FLUSH TABLES ... FOR EXPORT\n* Any statement trying to update any table\n\nIf any of the following statements is in effect in the session, attempting\nFLUSH TABLES ... FOR EXPORT will produce an error.\n\n* FLUSH TABLES ... WITH READ LOCK\n* FLUSH TABLES ... FOR EXPORT\n* LOCK TABLES ... READ\n* LOCK TABLES ... WRITE\n\nFLUSH FOR EXPORT is not written to the binary log.\n\nThis statement requires the RELOAD and the LOCK TABLES privileges.\n\nIf one of the specified tables cannot be locked, none of the tables will be\nlocked.\n\nIf a table does not exist, an error like the following will be produced:\n\nERROR 1146 (42S02): Table \'test.xxx\' doesn\'t exist\n\nIf a table is a view, an error like the following will be produced:\n\nERROR 1347 (HY000): \'test.v\' is not BASE TABLE\n\nExample\n-------\n\nFLUSH TABLES test.t1 FOR EXPORT;\n# Copy files related to the table (see below)\nUNLOCK TABLES;\n\nFor a full description, please see copying MariaDB tables.\n\nURL: https://mariadb.com/kb/en/flush-tables-for-export/','','https://mariadb.com/kb/en/flush-tables-for-export/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (348,26,'SHOW RELAYLOG EVENTS','The terms master and slave have historically been used in replication, but the\nterms terms primary and replica are now preferred. The old terms are used\nstill used in parts of the documentation, and in MariaDB commands, although\nMariaDB 10.5 has begun the process of renaming. The documentation process is\nongoing. See MDEV-18777 to follow progress on this effort.\n\nSyntax\n------\n\nSHOW RELAYLOG [\'connection_name\'] EVENTS\n [IN \'log_name\'] [FROM pos] [LIMIT [offset,] row_count]\n [ FOR CHANNEL \'channel_name\']\n\nDescription\n-----------\n\nOn replicas, this command shows the events in the relay log. If \'log_name\' is\nnot specified, the first relay log is shown.\n\nSyntax for the LIMIT clause is the same as for SELECT ... LIMIT.\n\nUsing the LIMIT clause is highly recommended because the SHOW RELAYLOG EVENTS\ncommand returns the complete contents of the relay log, which can be quite\nlarge.\n\nThis command does not return events related to setting user and system\nvariables. If you need those, use mariadb-binlog/mysqlbinlog.\n\nOn the primary, this command does nothing.\n\nRequires the REPLICA MONITOR privilege (>= MariaDB 10.5.9), the REPLICATION\nSLAVE ADMIN privilege (>= MariaDB 10.5.2) or the REPLICATION SLAVE privilege\n(<= MariaDB 10.5.1).\n\nconnection_name\n---------------\n\nIf there is only one nameless primary, or the default primary (as specified by\nthe default_master_connection system variable) is intended, connection_name\ncan be omitted. If provided, the SHOW RELAYLOG statement will apply to the\nspecified primary. connection_name is case-insensitive.\n\nMariaDB starting with 10.7.0\n----------------------------\nThe FOR CHANNEL keyword was added for MySQL compatibility. This is identical\nas using the channel_name directly after SHOW RELAYLOG.\n\nURL: https://mariadb.com/kb/en/show-relaylog-events/','','https://mariadb.com/kb/en/show-relaylog-events/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (349,26,'SHOW SLAVE STATUS','Syntax\n------\n\nSHOW SLAVE [\"connection_name\"] STATUS [FOR CHANNEL \"connection_name\"]\nSHOW REPLICA [\"connection_name\"] STATUS -- From MariaDB 10.5.1\n\nor\n\nSHOW ALL SLAVES STATUS\nSHOW ALL REPLICAS STATUS -- From MariaDB 10.5.1\n\nDescription\n-----------\n\nThis statement is to be run on a replica and provides status information on\nessential parameters of the replica threads.\n\nThis statement requires the SUPER privilege, the REPLICATION_CLIENT privilege,\nor, from MariaDB 10.5.2, the REPLICATION SLAVE ADMIN privilege, or, from\nMariaDB 10.5.9, the REPLICA MONITOR privilege.\n\nMulti-Source\n------------\n\nThe ALL and \"connection_name\" options allow you to connect to many primaries\nat the same time.\n\nALL SLAVES (or ALL REPLICAS from MariaDB 10.5.1) gives you a list of all\nconnections to the primary nodes.\n\nThe rows will be sorted according to Connection_name.\n\nIf you specify a connection_name, you only get the information about that\nconnection. If connection_name is not used, then the name set by\ndefault_master_connection is used. If the connection name doesn\'t exist you\nwill get an error: There is no master connection for \'xxx\'.\n\nMariaDB starting with 10.7.0\n----------------------------\nThe FOR CHANNEL keyword was added for MySQL compatibility. This is identical\nas using the channel_name directly after SHOW SLAVE.\n\nColumn Descriptions\n-------------------\n\n+---------------+---------------------------------------+-------------------+\n| Name | Description | Added |\n+---------------+---------------------------------------+-------------------+\n| Connection_na | Name of the primary connection. | |\n| e | Returned with SHOW ALL SLAVES STATUS | |\n| | (or SHOW ALL REPLICAS STATUS from | |\n| | MariaDB 10.5.1) only. | |\n+---------------+---------------------------------------+-------------------+\n| Slave_SQL_Sta | State of SQL thread. Returned with | |\n| e | SHOW ALL SLAVES STATUS (or SHOW ALL | |\n| | REPLICAS STATUS from MariaDB 10.5.1) | |\n| | only. See Slave SQL Thread States. | |\n+---------------+---------------------------------------+-------------------+\n| Slave_IO_Stat | State of I/O thread. See Slave I/O | |\n| | Thread States. | |\n+---------------+---------------------------------------+-------------------+\n| Master_host | Master host that the replica is | |\n| | connected to. | |\n+---------------+---------------------------------------+-------------------+\n| Master_user | Account user name being used to | |\n| | connect to the primary. | |\n+---------------+---------------------------------------+-------------------+\n| Master_port | The port being used to connect to | |\n| | the primary. | |\n+---------------+---------------------------------------+-------------------+\n| Connect_Retry | Time in seconds between retries to | |\n| | connect. The default is 60. The | |\n| | CHANGE MASTER TO statement can set | |\n| | this. The master-retry-count option | |\n| | determines the maximum number of | |\n| | reconnection attempts. | |\n+---------------+---------------------------------------+-------------------+\n| Master_Log_Fi | Name of the primary binary log file | |\n| e | that the I/O thread is currently | |\n| | reading from. | |\n+---------------+---------------------------------------+-------------------+\n| Read_Master_L | Position up to which the I/O thread | |\n| g_Pos | has read in the current primary | |\n| | binary log file. | |\n+---------------+---------------------------------------+-------------------+\n| Relay_Log_Fil | Name of the relay log file that the | |\n| | SQL thread is currently processing. | |\n+---------------+---------------------------------------+-------------------+\n| Relay_Log_Pos | Position up to which the SQL thread | |\n| | has finished processing in the | |\n| | current relay log file. | |\n+---------------+---------------------------------------+-------------------+\n| Relay_Master_ | Name of the primary binary log file | |\n| og_File | that contains the most recent event | |\n| | executed by the SQL thread. | |\n+---------------+---------------------------------------+-------------------+\n| Slave_IO_Runn | Whether the replica I/O thread is | |\n| ng | running and connected (Yes), running | |\n| | but not connected to a primary | |\n| | (Connecting) or not running (No). | |\n+---------------+---------------------------------------+-------------------+\n| Slave_SQL_Run | Whether or not the SQL thread is | |\n| ing | running. | |\n+---------------+---------------------------------------+-------------------+\n| Replicate_Do_ | Databases specified for replicating | |\n| B | with the replicate_do_db option. | |\n+---------------+---------------------------------------+-------------------+\n| Replicate_Ign | Databases specified for ignoring | |\n| re_DB | with the replicate_ignore_db option. | |\n+---------------+---------------------------------------+-------------------+\n| Replicate_Do_ | Tables specified for replicating | |\n| able | with the replicate_do_table option. | |\n+---------------+---------------------------------------+-------------------+\n| Replicate_Ign | Tables specified for ignoring with | |\n| re_Table | the replicate_ignore_table option. | |\n+---------------+---------------------------------------+-------------------+\n| Replicate_Wil | Tables specified for replicating | |\n| _Do_Table | with the replicate_wild_do_table | |\n| | option. | |\n+---------------+---------------------------------------+-------------------+\n| Replicate_Wil | Tables specified for ignoring with | |\n| _Ignore_Table | the replicate_wild_ignore_table | |\n| | option. | |\n+---------------+---------------------------------------+-------------------+\n| Last_Errno | Alias for Last_SQL_Errno (see below) | |\n+---------------+---------------------------------------+-------------------+\n| Last Error | Alias for Last_SQL_Error (see below) | |\n+---------------+---------------------------------------+-------------------+\n| Skip_Counter | Number of events that a replica | |\n| | skips from the master, as recorded | |\n| | in the sql_slave_skip_counter system | |\n| | variable. | |\n+---------------+---------------------------------------+-------------------+\n| Exec_Master_L | Position up to which the SQL thread | |\n| g_Pos | has processed in the current master | |\n| | binary log file. Can be used to | |\n| | start a new replica from a current | |\n| | replica with the CHANGE MASTER TO | |\n| | ... MASTER_LOG_POS option. | |\n+---------------+---------------------------------------+-------------------+\n| Relay_Log_Spa | Total size of all relay log files | |\n| e | combined. | |\n+---------------+---------------------------------------+-------------------+\n| Until_Conditi | | |\n| n | | |\n+---------------+---------------------------------------+-------------------+\n| Until_Log_Fil | The MASTER_LOG_FILE value of the | |\n| | START SLAVE UNTIL condition. | |\n+---------------+---------------------------------------+-------------------+\n| Until_Log_Pos | The MASTER_LOG_POS value of the | |\n| | START SLAVE UNTIL condition. | |\n+---------------+---------------------------------------+-------------------+\n| Master_SSL_Al | Whether an SSL connection is | |\n| owed | permitted (Yes), not permitted (No) | |\n| | or permitted but without the replica | |\n| | having SSL support enabled (Ignored) | |\n+---------------+---------------------------------------+-------------------+\n| Master_SSL_CA | The MASTER_SSL_CA option of the | |\n| File | CHANGE MASTER TO statement. | |\n+---------------+---------------------------------------+-------------------+\n| Master_SSL_CA | The MASTER_SSL_CAPATH option of the | |\n| Path | CHANGE MASTER TO statement. | |\n+---------------+---------------------------------------+-------------------+\n| Master_SSL_Ce | The MASTER_SSL_CERT option of the | |\n| t | CHANGE MASTER TO statement. | |\n+---------------+---------------------------------------+-------------------+\n| Master_SSL_Ci | The MASTER_SSL_CIPHER option of the | |\n| her | CHANGE MASTER TO statement. | |\n+---------------+---------------------------------------+-------------------+\n| Master_SSL_Ke | The MASTER_SSL_KEY option of the | |\n| | CHANGE MASTER TO statement. | |\n+---------------+---------------------------------------+-------------------+\n| Seconds_Behin | Difference between the timestamp | |\n| _Master | logged on the master for the event | |\n| | that the replica is currently | |\n| | processing, and the current | |\n| | timestamp on the replica. Zero if | |\n| | the replica is not currently | |\n| | processing an event. With parallel | |\n| | replication, seconds_behind_master | |\n| | is updated only after transactions | |\n| | commit. | |\n+---------------+---------------------------------------+-------------------+\n| Master_SSL_Ve | The MASTER_SSL_VERIFY_SERVER_CERT | |\n| ify_Server_Ce | option of the CHANGE MASTER TO | |\n| t | statement. | |\n+---------------+---------------------------------------+-------------------+\n| Last_IO_Errno | Error code of the most recent error | |\n| | that caused the I/O thread to stop | |\n| | (also recorded in the replica\'s | |\n| | error log). 0 means no error. RESET | |\n| | SLAVE or RESET MASTER will reset | |\n| | this value. | |\n+---------------+---------------------------------------+-------------------+\n| Last_IO_Error | Error message of the most recent | |\n| | error that caused the I/O thread to | |\n| | stop (also recorded in the replica\'s | |\n| | error log). An empty string means no | |\n| | error. RESET SLAVE or RESET MASTER | |\n| | will reset this value. | |\n+---------------+---------------------------------------+-------------------+\n| Last_SQL_Errn | Error code of the most recent error | |\n| | that caused the SQL thread to stop | |\n| | (also recorded in the replica\'s | |\n| | error log). 0 means no error. RESET | |\n| | SLAVE or RESET MASTER will reset | |\n| | this value. | |\n+---------------+---------------------------------------+-------------------+\n| Last_SQL_Erro | Error message of the most recent | |\n| | error that caused the SQL thread to | |\n| | stop (also recorded in the replica\'s | |','','https://mariadb.com/kb/en/show-replica-status/');
+update help_topic set description = CONCAT(description, '\n| | error log). An empty string means no | |\n| | error. RESET SLAVE or RESET MASTER | |\n| | will reset this value. | |\n+---------------+---------------------------------------+-------------------+\n| Replicate_Ign | List of server_ids that are | |\n| re_Server_Ids | currently being ignored for | |\n| | replication purposes, or an empty | |\n| | string for none, as specified in the | |\n| | IGNORE_SERVER_IDS option of the | |\n| | CHANGE MASTER TO statement. | |\n+---------------+---------------------------------------+-------------------+\n| Master_Server | The master\'s server_id value. | |\n| Id | | |\n+---------------+---------------------------------------+-------------------+\n| Master_SSL_Cr | The MASTER_SSL_CRL option of the | |\n| | CHANGE MASTER TO statement. | |\n+---------------+---------------------------------------+-------------------+\n| Master_SSL_Cr | The MASTER_SSL_CRLPATH option of the | |\n| path | CHANGE MASTER TO statement. | |\n+---------------+---------------------------------------+-------------------+\n| Using_Gtid | Whether or not global transaction | |\n| | ID\'s are being used for replication | |\n| | (can be No, Slave_Pos, or | |\n| | Current_Pos). | |\n+---------------+---------------------------------------+-------------------+\n| Gtid_IO_Pos | Current global transaction ID value. | |\n+---------------+---------------------------------------+-------------------+\n| Retried_trans | Number of retried transactions for | |\n| ctions | this connection. Returned with SHOW | |\n| | ALL SLAVES STATUS only. | |\n+---------------+---------------------------------------+-------------------+\n| Max_relay_log | Max relay log size for this | |\n| size | connection. Returned with SHOW ALL | |\n| | SLAVES STATUS only. | |\n+---------------+---------------------------------------+-------------------+\n| Executed_log_ | How many log entries the replica has | |\n| ntries | executed. Returned with SHOW ALL | |\n| | SLAVES STATUS only. | |\n+---------------+---------------------------------------+-------------------+\n| Slave_receive | How many heartbeats we have got from | |\n| _heartbeats | the master. Returned with SHOW ALL | |\n| | SLAVES STATUS only. | |\n+---------------+---------------------------------------+-------------------+\n| Slave_heartbe | How often to request a heartbeat | |\n| t_period | packet from the master (in seconds). | |\n| | Returned with SHOW ALL SLAVES STATUS | |\n| | only. | |\n+---------------+---------------------------------------+-------------------+\n| Gtid_Slave_Po | GTID of the last event group | |\n| | replicated on a replica server, for | |\n| | each replication domain, as stored | |\n| | in the gtid_slave_pos system | |\n| | variable. Returned with SHOW ALL | |\n| | SLAVES STATUS only. | |\n+---------------+---------------------------------------+-------------------+\n| SQL_Delay | Value specified by MASTER_DELAY in | MariaDB 10.2.3 |\n| | CHANGE MASTER (or 0 if none). | |\n+---------------+---------------------------------------+-------------------+\n| SQL_Remaining | When the replica is delaying the | MariaDB 10.2.3 |\n| Delay | execution of an event due to | |\n| | MASTER_DELAY, this is the number of | |\n| | seconds of delay remaining before | |\n| | the event will be applied. | |\n| | Otherwise, the value is NULL. | |\n+---------------+---------------------------------------+-------------------+\n| Slave_SQL_Run | The state of the SQL driver threads, | MariaDB 10.2.3 |\n| ing_State | same as in SHOW PROCESSLIST. When | |\n| | the replica is delaying the | |\n| | execution of an event due to | |\n| | MASTER_DELAY, this field displays: | |\n| | \"Waiting until MASTER_DELAY seconds | |\n| | after master executed event\". | |\n+---------------+---------------------------------------+-------------------+\n| Slave_DDL_Gro | This status variable counts the | MariaDB 10.3.7 |\n| ps | occurrence of DDL statements. This | |\n| | is a replica-side counter for | |\n| | optimistic parallel replication. | |\n+---------------+---------------------------------------+-------------------+\n| Slave_Non_Tra | This status variable counts the | MariaDB 10.3.7 |\n| sactional_Gro | occurrence of non-transactional | |\n| ps | event groups. This is a | |\n| | replica-side counter for optimistic | |\n| | parallel replication. | |\n+---------------+---------------------------------------+-------------------+\n| Slave_Transac | This status variable counts the | MariaDB 10.3.7 |\n| ional_Groups | occurrence of transactional event | |\n| | groups. This is a replica-side | |\n| | counter for optimistic parallel | |\n| | replication. | |\n+---------------+---------------------------------------+-------------------+\n\nSHOW REPLICA STATUS\n-------------------\n\nMariaDB starting with 10.5.1\n----------------------------\nSHOW REPLICA STATUS is an alias for SHOW SLAVE STATUS from MariaDB 10.5.1.\n\nExamples\n--------\n\nIf you issue this statement using the mysql client, you can use a \\G statement\nterminator rather than a semicolon to obtain a more readable vertical layout.\n\nSHOW SLAVE STATUS\\G\n*************************** 1. row ***************************\n Slave_IO_State: Waiting for master to send event\n Master_Host: db01.example.com\n Master_User: replicant\n Master_Port: 3306\n Connect_Retry: 60\n Master_Log_File: mariadb-bin.000010\n Read_Master_Log_Pos: 548\n Relay_Log_File: relay-bin.000004\n Relay_Log_Pos: 837\n Relay_Master_Log_File: mariadb-bin.000010\n Slave_IO_Running: Yes\n Slave_SQL_Running: Yes\n Replicate_Do_DB:\n Replicate_Ignore_DB:\n Replicate_Do_Table:\n Replicate_Ignore_Table:\n Replicate_Wild_Do_Table:\n Replicate_Wild_Ignore_Table:\n Last_Errno: 0\n Last_Error:\n Skip_Counter: 0\n Exec_Master_Log_Pos: 548\n Relay_Log_Space: 1497\n Until_Condition: None\n Until_Log_File:\n Until_Log_Pos: 0\n Master_SSL_Allowed: No\n Master_SSL_CA_File:\n Master_SSL_CA_Path:\n Master_SSL_Cert:\n Master_SSL_Cipher:\n Master_SSL_Key:\n Seconds_Behind_Master: 0\nMaster_SSL_Verify_Server_Cert: No\n Last_IO_Errno: 0\n Last_IO_Error:\n Last_SQL_Errno: 0\n Last_SQL_Error:\n Replicate_Ignore_Server_Ids:\n Master_Server_Id: 101\n Master_SSL_Crl:\n Master_SSL_Crlpath:\n Using_Gtid: No\n Gtid_IO_Pos:\n\nSHOW ALL SLAVES STATUS\\G\n*************************** 1. row ***************************\n Connection_name:\n Slave_SQL_State: Slave has read all relay log; waiting for the\nslave I/O thread to update it\n Slave_IO_State: Waiting for master to send event\n Master_Host: db01.example.com\n Master_User: replicant\n Master_Port: 3306\n Connect_Retry: 60\n Master_Log_File: mariadb-bin.000010\n Read_Master_Log_Pos: 3608\n Relay_Log_File: relay-bin.000004\n Relay_Log_Pos: 3897\n Relay_Master_Log_File: mariadb-bin.000010\n Slave_IO_Running: Yes\n Slave_SQL_Running: Yes\n Replicate_Do_DB:\n Replicate_Ignore_DB:\n Replicate_Do_Table:\n Replicate_Ignore_Table:\n Replicate_Wild_Do_Table:\n Replicate_Wild_Ignore_Table:\n Last_Errno: 0\n Last_Error:\n Skip_Counter: 0\n Exec_Master_Log_Pos: 3608\n Relay_Log_Space: 4557\n Until_Condition: None\n Until_Log_File:\n Until_Log_Pos: 0\n Master_SSL_Allowed: No\n Master_SSL_CA_File:\n Master_SSL_CA_Path:\n Master_SSL_Cert:\n Master_SSL_Cipher:\n Master_SSL_Key:\n Seconds_Behind_Master: 0\nMaster_SSL_Verify_Server_Cert: No\n Last_IO_Errno: 0\n Last_IO_Error:\n Last_SQL_Errno: 0\n Last_SQL_Error:\n Replicate_Ignore_Server_Ids:\n Master_Server_Id: 101\n Master_SSL_Crl:\n Master_SSL_Crlpath:\n Using_Gtid: No\n Gtid_IO_Pos:\n Retried_transactions: 0\n Max_relay_log_size: 104857600\n Executed_log_entries: 40\n Slave_received_heartbeats: 11\n Slave_heartbeat_period: 1800.000\n Gtid_Slave_Pos: 0-101-2320\n\nYou can also access some of the variables directly from status variables:\n\nSET @@default_master_connection=\"test\" ;\nshow status like \"%slave%\"\n\nVariable_name Value\nCom_show_slave_hosts 0\nCom_show_slave_status 0\nCom_start_all_slaves 0\nCom_start_slave 0\nCom_stop_all_slaves 0\nCom_stop_slave 0\nRpl_semi_sync_slave_status OFF\nSlave_connections 0\nSlave_heartbeat_period 1800.000\nSlave_open_temp_tables 0\nSlave_received_heartbeats 0\nSlave_retried_transactions 0\nSlave_running OFF\nSlaves_connected 0\nSlaves_running 1\n\nURL: https://mariadb.com/kb/en/show-replica-status/') WHERE help_topic_id = 349;
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (350,26,'SHOW MASTER STATUS','Syntax\n------\n\nSHOW MASTER STATUS\nSHOW BINLOG STATUS -- From MariaDB 10.5.2\n\nDescription\n-----------\n\nProvides status information about the binary log files of the primary.\n\nThis statement requires the SUPER privilege, the REPLICATION_CLIENT privilege,\nor, from MariaDB 10.5.2, the BINLOG MONITOR privilege.\n\nTo see information about the current GTIDs in the binary log, use the\ngtid_binlog_pos variable.\n\nSHOW MASTER STATUS was renamed to SHOW BINLOG STATUS in MariaDB 10.5.2, but\nthe old name remains an alias for compatibility purposes.\n\nExample\n-------\n\nSHOW MASTER STATUS;\n+--------------------+----------+--------------+------------------+\n| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |\n+--------------------+----------+--------------+------------------+\n| mariadb-bin.000016 | 475 | | |\n+--------------------+----------+--------------+------------------+\nSELECT @@global.gtid_binlog_pos;\n+--------------------------+\n| @@global.gtid_binlog_pos |\n+--------------------------+\n| 0-1-2 |\n+--------------------------+\n\nURL: https://mariadb.com/kb/en/show-binlog-status/','','https://mariadb.com/kb/en/show-binlog-status/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (351,26,'SHOW SLAVE HOSTS','Syntax\n------\n\nSHOW SLAVE HOSTS\nSHOW REPLICA HOSTS -- from MariaDB 10.5.1\n\nDescription\n-----------\n\nThis command is run on the primary and displays a list of replicas that are\ncurrently registered with it. Only replicas started with the\n--report-host=host_name option are visible in this list.\n\nThe output looks like this:\n\nSHOW SLAVE HOSTS;\n+------------+-----------+------+-----------+\n| Server_id | Host | Port | Master_id |\n+------------+-----------+------+-----------+\n| 192168010 | iconnect2 | 3306 | 192168011 |\n| 1921680101 | athena | 3306 | 192168011 |\n+------------+-----------+------+-----------+\n\n* Server_id: The unique server ID of the replica server, as configured in the\nserver\'s option file, or on the command line with --server-id=value.\n* Host: The host name of the replica server, as configured in the server\'s\noption file, or on the command line with --report-host=host_name. Note that\nthis can differ from the machine name as configured in the operating system.\n* Port: The port the replica server is listening on.\n* Master_id: The unique server ID of the primary server that the replica\nserver is replicating from.\n\nSome MariaDB and MySQL versions report another variable, rpl_recovery_rank.\nThis variable was never used, and was eventually removed in MariaDB 10.1.2 .\n\nRequires the REPLICATION MASTER ADMIN privilege (>= MariaDB 10.5.2) or the\nREPLICATION SLAVE privilege (<= MariaDB 10.5.1).\n\nSHOW REPLICA HOSTS\n------------------\n\nMariaDB starting with 10.5.1\n----------------------------\nSHOW REPLICA HOSTS is an alias for SHOW SLAVE HOSTS from MariaDB 10.5.1.\n\nURL: https://mariadb.com/kb/en/show-replica-hosts/','','https://mariadb.com/kb/en/show-replica-hosts/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (352,26,'SHOW PLUGINS','Syntax\n------\n\nSHOW PLUGINS;\n\nDescription\n-----------\n\nSHOW PLUGINS displays information about installed plugins. The Library column\nindicates the plugin library - if it is NULL, the plugin is built-in and\ncannot be uninstalled.\n\nThe PLUGINS table in the information_schema database contains more detailed\ninformation.\n\nFor specific information about storage engines (a particular type of plugin),\nsee the information_schema.ENGINES table and the SHOW ENGINES statement.\n\nExamples\n--------\n\nSHOW PLUGINS;\n+----------------------------+----------+--------------------+-------------+---\n-----+\n| Name | Status | Type | Library |\nLicense |\n+----------------------------+----------+--------------------+-------------+---\n-----+\n| binlog | ACTIVE | STORAGE ENGINE | NULL |\nGPL |\n| mysql_native_password | ACTIVE | AUTHENTICATION | NULL |\nGPL |\n| mysql_old_password | ACTIVE | AUTHENTICATION | NULL |\nGPL |\n| MRG_MyISAM | ACTIVE | STORAGE ENGINE | NULL |\nGPL |\n| MyISAM | ACTIVE | STORAGE ENGINE | NULL |\nGPL |\n| CSV | ACTIVE | STORAGE ENGINE | NULL |\nGPL |\n| MEMORY | ACTIVE | STORAGE ENGINE | NULL |\nGPL |\n| FEDERATED | ACTIVE | STORAGE ENGINE | NULL |\nGPL |\n| PERFORMANCE_SCHEMA | ACTIVE | STORAGE ENGINE | NULL |\nGPL |\n| Aria | ACTIVE | STORAGE ENGINE | NULL |\nGPL |\n| InnoDB | ACTIVE | STORAGE ENGINE | NULL |\nGPL |\n| INNODB_TRX | ACTIVE | INFORMATION SCHEMA | NULL |\nGPL |\n...\n| INNODB_SYS_FOREIGN | ACTIVE | INFORMATION SCHEMA | NULL |\nGPL |\n| INNODB_SYS_FOREIGN_COLS | ACTIVE | INFORMATION SCHEMA | NULL |\nGPL |\n| SPHINX | ACTIVE | STORAGE ENGINE | NULL |\nGPL |\n| ARCHIVE | ACTIVE | STORAGE ENGINE | NULL |\nGPL |\n| BLACKHOLE | ACTIVE | STORAGE ENGINE | NULL |\nGPL |\n| FEEDBACK | DISABLED | INFORMATION SCHEMA | NULL |\nGPL |\n| partition | ACTIVE | STORAGE ENGINE | NULL |\nGPL |\n| pam | ACTIVE | AUTHENTICATION | auth_pam.so |\nGPL |\n+----------------------------+----------+--------------------+-------------+---\n-----+\n\nURL: https://mariadb.com/kb/en/show-plugins/','','https://mariadb.com/kb/en/show-plugins/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (353,26,'SHOW PLUGINS SONAME','Syntax\n------\n\nSHOW PLUGINS SONAME { library | LIKE \'pattern\' | WHERE expr };\n\nDescription\n-----------\n\nSHOW PLUGINS SONAME displays information about compiled-in and all server\nplugins in the plugin_dir directory, including plugins that haven\'t been\ninstalled.\n\nExamples\n--------\n\nSHOW PLUGINS SONAME \'ha_example.so\';\n+----------+---------------+----------------+---------------+---------+\n| Name | Status | Type | Library | License |\n+----------+---------------+----------------+---------------+---------+\n| EXAMPLE | NOT INSTALLED | STORAGE ENGINE | ha_example.so | GPL |\n| UNUSABLE | NOT INSTALLED | DAEMON | ha_example.so | GPL |\n+----------+---------------+----------------+---------------+---------+\n\nThere is also a corresponding information_schema table, called ALL_PLUGINS,\nwhich contains more complete information.\n\nURL: https://mariadb.com/kb/en/show-plugins-soname/','','https://mariadb.com/kb/en/show-plugins-soname/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (354,26,'SET','Syntax\n------\n\nSET variable_assignment [, variable_assignment] ...\n\nvariable_assignment:\n user_var_name = expr\n | [GLOBAL | SESSION] system_var_name = expr\n | [@@global. | @@session. | @@]system_var_name = expr\n\nOne can also set a user variable in any expression with this syntax:\n\nuser_var_name:= expr\n\nDescription\n-----------\n\nThe SET statement assigns values to different types of variables that affect\nthe operation of the server or your client. Older versions of MySQL employed\nSET OPTION, but this syntax was deprecated in favor of SET without OPTION, and\nwas removed in MariaDB 10.0.\n\nChanging a system variable by using the SET statement does not make the change\npermanently. To do so, the change must be made in a configuration file.\n\nFor setting variables on a per-query basis, see SET STATEMENT.\n\nSee SHOW VARIABLES for documentation on viewing server system variables.\n\nSee Server System Variables for a list of all the system variables.\n\nGLOBAL / SESSION\n----------------\n\nWhen setting a system variable, the scope can be specified as either GLOBAL or\nSESSION.\n\nA global variable change affects all new sessions. It does not affect any\ncurrently open sessions, including the one that made the change.\n\nA session variable change affects the current session only.\n\nIf the variable has a session value, not specifying either GLOBAL or SESSION\nwill be the same as specifying SESSION. If the variable only has a global\nvalue, not specifying GLOBAL or SESSION will apply to the change to the global\nvalue.\n\nDEFAULT\n-------\n\nSetting a global variable to DEFAULT will restore it to the server default,\nand setting a session variable to DEFAULT will restore it to the current\nglobal value.\n\nExamples\n--------\n\n* innodb_sync_spin_loops is a global variable.\n* skip_parallel_replication is a session variable.\n* max_error_count is both global and session.\n\nSELECT VARIABLE_NAME, SESSION_VALUE, GLOBAL_VALUE FROM\n INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE \n VARIABLE_NAME IN (\'max_error_count\', \'skip_parallel_replication\',\n\'innodb_sync_spin_loops\');\n+---------------------------+---------------+--------------+\n| VARIABLE_NAME | SESSION_VALUE | GLOBAL_VALUE |\n+---------------------------+---------------+--------------+\n| MAX_ERROR_COUNT | 64 | 64 |\n| SKIP_PARALLEL_REPLICATION | OFF | NULL |\n| INNODB_SYNC_SPIN_LOOPS | NULL | 30 |\n+---------------------------+---------------+--------------+\n\nSetting the session values:\n\nSET max_error_count=128;Query OK, 0 rows affected (0.000 sec)\n\nSET skip_parallel_replication=ON;Query OK, 0 rows affected (0.000 sec)\n\nSET innodb_sync_spin_loops=60;\nERROR 1229 (HY000): Variable \'innodb_sync_spin_loops\' is a GLOBAL variable \n and should be set with SET GLOBAL\n\nSELECT VARIABLE_NAME, SESSION_VALUE, GLOBAL_VALUE FROM\n INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE \n VARIABLE_NAME IN (\'max_error_count\', \'skip_parallel_replication\',\n\'innodb_sync_spin_loops\');\n+---------------------------+---------------+--------------+\n| VARIABLE_NAME | SESSION_VALUE | GLOBAL_VALUE |\n+---------------------------+---------------+--------------+\n| MAX_ERROR_COUNT | 128 | 64 |\n| SKIP_PARALLEL_REPLICATION | ON | NULL |\n| INNODB_SYNC_SPIN_LOOPS | NULL | 30 |\n+---------------------------+---------------+--------------+\n\nSetting the global values:\n\nSET GLOBAL max_error_count=256;\n\nSET GLOBAL skip_parallel_replication=ON;\nERROR 1228 (HY000): Variable \'skip_parallel_replication\' is a SESSION variable \n and can\'t be used with SET GLOBAL\n\nSET GLOBAL innodb_sync_spin_loops=120;\n\nSELECT VARIABLE_NAME, SESSION_VALUE, GLOBAL_VALUE FROM\n INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE \n VARIABLE_NAME IN (\'max_error_count\', \'skip_parallel_replication\',\n\'innodb_sync_spin_loops\');\n+---------------------------+---------------+--------------+\n| VARIABLE_NAME | SESSION_VALUE | GLOBAL_VALUE |\n+---------------------------+---------------+--------------+\n| MAX_ERROR_COUNT | 128 | 256 |\n| SKIP_PARALLEL_REPLICATION | ON | NULL |\n| INNODB_SYNC_SPIN_LOOPS | NULL | 120 |\n+---------------------------+---------------+--------------+\n\nSHOW VARIABLES will by default return the session value unless the variable is\nglobal only.\n\nSHOW VARIABLES LIKE \'max_error_count\';\n+-----------------+-------+\n| Variable_name | Value |\n+-----------------+-------+\n| max_error_count | 128 |\n+-----------------+-------+\n\nSHOW VARIABLES LIKE \'skip_parallel_replication\';\n+---------------------------+-------+\n| Variable_name | Value |\n+---------------------------+-------+\n| skip_parallel_replication | ON |\n+---------------------------+-------+\n\nSHOW VARIABLES LIKE \'innodb_sync_spin_loops\';\n+------------------------+-------+\n| Variable_name | Value |\n+------------------------+-------+\n| innodb_sync_spin_loops | 120 |\n+------------------------+-------+\n\nUsing the inplace syntax:\n\nSELECT (@a:=1);\n+---------+\n| (@a:=1) |\n+---------+\n| 1 |\n+---------+\n\nSELECT @a;\n+------+\n| @a |\n+------+\n| 1 |\n+------+\n\nURL: https://mariadb.com/kb/en/set/','','https://mariadb.com/kb/en/set/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (355,26,'SET CHARACTER SET','Syntax\n------\n\nSET {CHARACTER SET | CHARSET}\n {charset_name | DEFAULT}\n\nDescription\n-----------\n\nSets the character_set_client and character_set_results session system\nvariables to the specified character set and collation_connection to the value\nof collation_database, which implicitly sets character_set_connection to the\nvalue of character_set_database.\n\nThis maps all strings sent between the current client and the server with the\ngiven mapping.\n\nExample\n-------\n\nSHOW VARIABLES LIKE \'character_set\\_%\';\n+--------------------------+--------+\n| Variable_name | Value |\n+--------------------------+--------+\n| character_set_client | utf8 |\n| character_set_connection | utf8 |\n| character_set_database | latin1 |\n| character_set_filesystem | binary |\n| character_set_results | utf8 |\n| character_set_server | latin1 |\n| character_set_system | utf8 |\n+--------------------------+--------+\n\nSHOW VARIABLES LIKE \'collation%\';\n+----------------------+-------------------+\n| Variable_name | Value |\n+----------------------+-------------------+\n| collation_connection | utf8_general_ci |\n| collation_database | latin1_swedish_ci |\n| collation_server | latin1_swedish_ci |\n+----------------------+-------------------+\n\nSET CHARACTER SET utf8mb4;\n\nSHOW VARIABLES LIKE \'character_set\\_%\';\n+--------------------------+---------+\n| Variable_name | Value |\n+--------------------------+---------+\n| character_set_client | utf8mb4 |\n| character_set_connection | latin1 |\n| character_set_database | latin1 |\n| character_set_filesystem | binary |\n| character_set_results | utf8mb4 |\n| character_set_server | latin1 |\n| character_set_system | utf8 |\n+--------------------------+---------+\n\nSHOW VARIABLES LIKE \'collation%\';\n+----------------------+-------------------+\n| Variable_name | Value |\n+----------------------+-------------------+\n| collation_connection | latin1_swedish_ci |\n| collation_database | latin1_swedish_ci |\n| collation_server | latin1_swedish_ci |\n+----------------------+-------------------+\n\nURL: https://mariadb.com/kb/en/set-character-set/','','https://mariadb.com/kb/en/set-character-set/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (356,26,'SET NAMES','Syntax\n------\n\nSET NAMES {\'charset_name\'\n [COLLATE \'collation_name\'] | DEFAULT}\n\nDescription\n-----------\n\nSets the character_set_client, character_set_connection, character_set_results\nand, implicitly, the collation_connection session system variables to the\nspecified character set and collation.\n\nThis determines which character set the client will use to send statements to\nthe server, and the server will use for sending results back to the client.\n\nucs2, utf16, utf16le and utf32 are not valid character sets for SET NAMES, as\nthey cannot be used as client character sets.\n\nThe collation clause is optional. If not defined (or if DEFAULT is specified),\nthe default collation for the character set will be used.\n\nQuotes are optional for the character set or collation clauses.\n\nExamples\n--------\n\nSELECT VARIABLE_NAME, SESSION_VALUE \n FROM INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE\n VARIABLE_NAME LIKE \'character_set_c%\' OR\n VARIABLE_NAME LIKE \'character_set_re%\' OR\n VARIABLE_NAME LIKE \'collation_c%\';\n+--------------------------+-----------------+\n| VARIABLE_NAME | SESSION_VALUE |\n+--------------------------+-----------------+\n| CHARACTER_SET_RESULTS | utf8 |\n| CHARACTER_SET_CONNECTION | utf8 |\n| CHARACTER_SET_CLIENT | utf8 |\n| COLLATION_CONNECTION | utf8_general_ci |\n+--------------------------+-----------------+\n\nSET NAMES big5;\n\nSELECT VARIABLE_NAME, SESSION_VALUE \n FROM INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE\n VARIABLE_NAME LIKE \'character_set_c%\' OR\n VARIABLE_NAME LIKE \'character_set_re%\' OR\n VARIABLE_NAME LIKE \'collation_c%\';\n+--------------------------+-----------------+\n| VARIABLE_NAME | SESSION_VALUE |\n+--------------------------+-----------------+\n| CHARACTER_SET_RESULTS | big5 |\n| CHARACTER_SET_CONNECTION | big5 |\n| CHARACTER_SET_CLIENT | big5 |\n| COLLATION_CONNECTION | big5_chinese_ci |\n+--------------------------+-----------------+\n\nSET NAMES \'latin1\' COLLATE \'latin1_bin\';\n\nSELECT VARIABLE_NAME, SESSION_VALUE \n FROM INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE\n VARIABLE_NAME LIKE \'character_set_c%\' OR\n VARIABLE_NAME LIKE \'character_set_re%\' OR\n VARIABLE_NAME LIKE \'collation_c%\';\n+--------------------------+---------------+\n| VARIABLE_NAME | SESSION_VALUE |\n+--------------------------+---------------+\n| CHARACTER_SET_RESULTS | latin1 |\n| CHARACTER_SET_CONNECTION | latin1 |\n| CHARACTER_SET_CLIENT | latin1 |\n| COLLATION_CONNECTION | latin1_bin |\n+--------------------------+---------------+\n\nSET NAMES DEFAULT;\n\nSELECT VARIABLE_NAME, SESSION_VALUE \n FROM INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE\n VARIABLE_NAME LIKE \'character_set_c%\' OR\n VARIABLE_NAME LIKE \'character_set_re%\' OR\n VARIABLE_NAME LIKE \'collation_c%\';\n+--------------------------+-------------------+\n| VARIABLE_NAME | SESSION_VALUE |\n+--------------------------+-------------------+\n| CHARACTER_SET_RESULTS | latin1 |\n| CHARACTER_SET_CONNECTION | latin1 |\n| CHARACTER_SET_CLIENT | latin1 |\n| COLLATION_CONNECTION | latin1_swedish_ci |\n+--------------------------+-------------------+\n\nURL: https://mariadb.com/kb/en/set-names/','','https://mariadb.com/kb/en/set-names/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (357,26,'SET SQL_LOG_BIN','Syntax\n------\n\nSET [SESSION] sql_log_bin = {0|1}\n\nDescription\n-----------\n\nSets the sql_log_bin system variable, which disables or enables binary logging\nfor the current connection, if the client has the SUPER privilege. The\nstatement is refused with an error if the client does not have that privilege.\n\nBefore MariaDB 5.5 and before MySQL 5.6 one could also set sql_log_bin as a\nglobal variable. This was disabled as this was too dangerous as it could\ndamage replication.\n\nURL: https://mariadb.com/kb/en/set-sql_log_bin/','','https://mariadb.com/kb/en/set-sql_log_bin/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (358,26,'SET STATEMENT','MariaDB starting with 10.1.2\n----------------------------\nPer-query variables were introduced in MariaDB 10.1.2\n\nSET STATEMENT can be used to set the value of a system variable for the\nduration of the statement. It is also possible to set multiple variables.\n\nSyntax\n------\n\nSET STATEMENT var1=value1 [, var2=value2, ...] \n FOR <statement>\n\nwhere varN is a system variable (list of allowed variables is provided below),\nand valueN is a constant literal.\n\nDescription\n-----------\n\nSET STATEMENT var1=value1 FOR stmt\n\nis roughly equivalent to\n\nSET @save_value=@@var1;\nSET SESSION var1=value1;\nstmt;\nSET SESSION var1=@save_value;\n\nThe server parses the whole statement before executing it, so any variables\nset in this fashion that affect the parser may not have the expected effect.\nExamples include the charset variables, sql_mode=ansi_quotes, etc.\n\nExamples\n--------\n\nOne can limit statement execution time max_statement_time:\n\nSET STATEMENT max_statement_time=1000 FOR SELECT ... ;\n\nOne can switch on/off individual optimizations:\n\nSET STATEMENT optimizer_switch=\'materialization=off\' FOR SELECT ....;\n\nIt is possible to enable MRR/BKA for a query:\n\nSET STATEMENT join_cache_level=6, optimizer_switch=\'mrr=on\' FOR SELECT ...\n\nNote that it makes no sense to try to set a session variable inside a SET\nSTATEMENT:\n\n#USELESS STATEMENT\nSET STATEMENT sort_buffer_size = 100000 for SET SESSION sort_buffer_size =\n200000;\n\nFor the above, after setting sort_buffer_size to 200000 it will be reset to\nits original state (the state before the SET STATEMENT started) after the\nstatement execution.\n\nLimitations\n-----------\n\nThere are a number of variables that cannot be set on per-query basis. These\ninclude:\n\n* autocommit\n* character_set_client\n* character_set_connection\n* character_set_filesystem\n* collation_connection\n* default_master_connection\n* debug_sync\n* interactive_timeout\n* gtid_domain_id\n* last_insert_id\n* log_slow_filter\n* log_slow_rate_limit\n* log_slow_verbosity\n* long_query_time\n* min_examined_row_limit\n* profiling\n* profiling_history_size\n* query_cache_type\n* rand_seed1\n* rand_seed2\n* skip_replication\n* slow_query_log\n* sql_log_off\n* tx_isolation\n* wait_timeout\n\nSource\n------\n\n* The feature was originally implemented as a Google Summer of Code 2009\nproject by Joseph Lukas. \n* Percona Server 5.6 included it as Per-query variable statement\n* MariaDB ported the patch and fixed many bugs. The task in MariaDB Jira is\nMDEV-5231.\n\nURL: https://mariadb.com/kb/en/set-statement/','','https://mariadb.com/kb/en/set-statement/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (359,26,'SET Variable','Syntax\n------\n\nSET var_name = expr [, var_name = expr] ...\n\nDescription\n-----------\n\nThe SET statement in stored programs is an extended version of the general SET\nstatement. Referenced variables may be ones declared inside a stored program,\nglobal system variables, or user-defined variables.\n\nThe SET statement in stored programs is implemented as part of the\npre-existing SET syntax. This allows an extended syntax of SET a=x, b=y, ...\nwhere different variable types (locally declared variables, global and session\nserver variables, user-defined variables) can be mixed. This also allows\ncombinations of local variables and some options that make sense only for\nsystem variables; in that case, the options are recognized but ignored.\n\nSET can be used with both local variables and user-defined variables.\n\nWhen setting several variables using the columns returned by a query, SELECT\nINTO should be preferred.\n\nTo set many variables to the same value, the LAST_VALUE( ) function can be\nused.\n\nBelow is an example of how a user-defined variable may be set:\n\nSET @x = 1;\n\nURL: https://mariadb.com/kb/en/set-variable/','','https://mariadb.com/kb/en/set-variable/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (360,26,'About SHOW','SHOW has many forms that provide information about databases, tables, columns,\nor status information about the server. These include:\n\n* SHOW AUTHORS\n* SHOW CHARACTER SET [like_or_where]\n* SHOW COLLATION [like_or_where]\n* SHOW [FULL] COLUMNS FROM tbl_name [FROM db_name] [like_or_where]\n* SHOW CONTRIBUTORS\n* SHOW CREATE DATABASE db_name\n* SHOW CREATE EVENT event_name\n* SHOW CREATE PACKAGE package_name\n* SHOW CREATE PACKAGE BODY package_name\n* SHOW CREATE PROCEDURE proc_name\n* SHOW CREATE TABLE tbl_name\n* SHOW CREATE TRIGGER trigger_name\n* SHOW CREATE VIEW view_name\n* SHOW DATABASES [like_or_where]\n* SHOW ENGINE engine_name {STATUS | MUTEX}\n* SHOW [STORAGE] ENGINES\n* SHOW ERRORS [LIMIT [offset,] row_count]\n* SHOW [FULL] EVENTS\n* SHOW FUNCTION CODE func_name\n* SHOW FUNCTION STATUS [like_or_where]\n* SHOW GRANTS FOR user\n* SHOW INDEX FROM tbl_name [FROM db_name]\n* SHOW INNODB STATUS\n* SHOW OPEN TABLES [FROM db_name] [like_or_where]\n* SHOW PLUGINS\n* SHOW PROCEDURE CODE proc_name\n* SHOW PROCEDURE STATUS [like_or_where]\n* SHOW PRIVILEGES\n* SHOW [FULL] PROCESSLIST\n* SHOW PROFILE [types] [FOR QUERY n] [OFFSET n] [LIMIT n]\n* SHOW PROFILES\n* SHOW [GLOBAL | SESSION] STATUS [like_or_where]\n* SHOW TABLE STATUS [FROM db_name] [like_or_where]\n* SHOW TABLES [FROM db_name] [like_or_where]\n* SHOW TRIGGERS [FROM db_name] [like_or_where]\n* SHOW [GLOBAL | SESSION] VARIABLES [like_or_where]\n* SHOW WARNINGS [LIMIT [offset,] row_count]\n\nlike_or_where:\n LIKE \'pattern\'\n | WHERE expr\n\nIf the syntax for a given SHOW statement includes a LIKE \'pattern\' part,\n\'pattern\' is a string that can contain the SQL \"%\" and \"_\" wildcard\ncharacters. The pattern is useful for restricting statement output to matching\nvalues.\n\nSeveral SHOW statements also accept a WHERE clause that provides more\nflexibility in specifying which rows to display. See Extended Show.\n\nURL: https://mariadb.com/kb/en/about-show/','','https://mariadb.com/kb/en/about-show/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (361,26,'Extended Show','The following SHOW statements can be extended by using a WHERE clause and a\nLIKE clause to refine the results:\n\n* SHOW CHARACTER SET\n* SHOW COLLATION\n* SHOW COLUMNS\n* SHOW DATABASES\n* SHOW FUNCTION STATUS\n* SHOW INDEX\n* SHOW OPEN TABLES\n* SHOW PACKAGE STATUS\n* SHOW PACKAGE BODY STATUS\n* SHOW INDEX\n* SHOW PROCEDURE STATUS\n* SHOW STATUS\n* SHOW TABLE STATUS\n* SHOW TABLES\n* SHOW TRIGGERS\n* SHOW VARIABLES\n\nAs with a regular SELECT, the WHERE clause can be used for the specific\ncolumns returned, and the LIKE clause with the regular wildcards.\n\nExamples\n--------\n\nSHOW TABLES;\n+----------------------+\n| Tables_in_test |\n+----------------------+\n| animal_count |\n| animals |\n| are_the_mooses_loose |\n| aria_test2 |\n| t1 |\n| view1 |\n+----------------------+\n\nShowing the tables beginning with a only.\n\nSHOW TABLES WHERE Tables_in_test LIKE \'a%\';\n+----------------------+\n| Tables_in_test |\n+----------------------+\n| animal_count |\n| animals |\n| are_the_mooses_loose |\n| aria_test2 |\n+----------------------+\n\nVariables whose name starts with aria and with a valued of greater than 8192:\n\nSHOW VARIABLES WHERE Variable_name LIKE \'aria%\' AND Value >8192;\n+------------------------------+---------------------+\n| Variable_name | Value |\n+------------------------------+---------------------+\n| aria_checkpoint_log_activity | 1048576 |\n| aria_log_file_size | 1073741824 |\n| aria_max_sort_file_size | 9223372036853727232 |\n| aria_pagecache_buffer_size | 134217728 |\n| aria_sort_buffer_size | 134217728 |\n+------------------------------+---------------------+\n\nShortcut, just returning variables whose name begins with aria.\n\nSHOW VARIABLES LIKE \'aria%\';\n+------------------------------------------+---------------------+\n| Variable_name | Value |\n+------------------------------------------+---------------------+\n| aria_block_size | 8192 |\n| aria_checkpoint_interval | 30 |\n| aria_checkpoint_log_activity | 1048576 |\n| aria_force_start_after_recovery_failures | 0 |\n| aria_group_commit | none |\n| aria_group_commit_interval | 0 |\n| aria_log_file_size | 1073741824 |\n| aria_log_purge_type | immediate |\n| aria_max_sort_file_size | 9223372036853727232 |\n| aria_page_checksum | ON |\n| aria_pagecache_age_threshold | 300 |\n| aria_pagecache_buffer_size | 134217728 |\n| aria_pagecache_division_limit | 100 |\n| aria_recover | NORMAL |\n| aria_repair_threads | 1 |\n| aria_sort_buffer_size | 134217728 |\n| aria_stats_method | nulls_unequal |\n| aria_sync_log_dir | NEWFILE |\n| aria_used_for_temp_tables | ON |\n+------------------------------------------+---------------------+\n\nURL: https://mariadb.com/kb/en/extended-show/','','https://mariadb.com/kb/en/extended-show/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (362,26,'SHOW AUTHORS','Syntax\n------\n\nSHOW AUTHORS\n\nDescription\n-----------\n\nThe SHOW AUTHORS statement displays information about the people who work on\nMariaDB. For each author, it displays Name, Location, and Comment values. All\ncolumns are encoded as latin1.\n\nThese include:\n\n* First the active people in MariaDB are listed.\n* Then the active people in MySQL.\n* Last the people that have contributed to MariaDB/MySQL in the past.\n\nThe order is somewhat related to importance of the contribution given to the\nMariaDB project, but this is not 100% accurate. There is still room for\nimprovement and debate...\n\nExample\n-------\n\nSHOW AUTHORS\\G\n*************************** 1. row ***************************\n Name: Michael (Monty) Widenius\nLocation: Tusby, Finland\n Comment: Lead developer and main author\n*************************** 2. row ***************************\n Name: Sergei Golubchik\nLocation: Kerpen, Germany\n Comment: Architect, Full-text search, precision math, plugin framework,\nmerges etc\n*************************** 3. row ***************************\n Name: Igor Babaev\nLocation: Bellevue, USA\n Comment: Optimizer, keycache, core work\n*************************** 4. row ***************************\n Name: Sergey Petrunia\nLocation: St. Petersburg, Russia\n Comment: Optimizer\n*************************** 5. row ***************************\n Name: Oleksandr Byelkin\nLocation: Lugansk, Ukraine\n Comment: Query Cache (4.0), Subqueries (4.1), Views (5.0)\n*************************** 6. row ***************************\n Name: Timour Katchaounov\nLocation: Sofia , Bulgaria\n Comment: Optimizer\n*************************** 7. row ***************************\n Name: Kristian Nielsen\nLocation: Copenhagen, Denmark\n Comment: Replication, Async client prototocol, General buildbot stuff\n*************************** 8. row ***************************\n Name: Alexander (Bar) Barkov\nLocation: Izhevsk, Russia\n Comment: Unicode and character sets\n*************************** 9. row ***************************\n Name: Alexey Botchkov (Holyfoot)\nLocation: Izhevsk, Russia\n Comment: GIS extensions, embedded server, precision math\n*************************** 10. row ***************************\n Name: Daniel Bartholomew\nLocation: Raleigh, USA\n Comment: MariaDB documentation, Buildbot, releases\n*************************** 11. row ***************************\n Name: Colin Charles\nLocation: Selangor, Malesia\n Comment: MariaDB documentation, talks at a LOT of conferences\n*************************** 12. row ***************************\n Name: Sergey Vojtovich\nLocation: Izhevsk, Russia\n Comment: initial implementation of plugin architecture, maintained native\nstorage engines (MyISAM, MEMORY, ARCHIVE, etc), rewrite of table cache\n*************************** 13. row ***************************\n Name: Vladislav Vaintroub\nLocation: Mannheim, Germany\n Comment: MariaDB Java connector, new thread pool, Windows optimizations\n*************************** 14. row ***************************\n Name: Elena Stepanova\nLocation: Sankt Petersburg, Russia\n Comment: QA, test cases\n*************************** 15. row ***************************\n Name: Georg Richter\nLocation: Heidelberg, Germany\n Comment: New LGPL C connector, PHP connector\n*************************** 16. row ***************************\n Name: Jan Lindström\nLocation: Ylämylly, Finland\n Comment: Working on InnoDB\n*************************** 17. row ***************************\n Name: Lixun Peng\nLocation: Hangzhou, China\n Comment: Multi Source replication\n*************************** 18. row ***************************\n Name: Olivier Bertrand\nLocation: Paris, France\n Comment: CONNECT storage engine\n*************************** 19. row ***************************\n Name: Kentoku Shiba\nLocation: Tokyo, Japan\n Comment: Spider storage engine, metadata_lock_info Information schema\n*************************** 20. row ***************************\n Name: Percona\nLocation: CA, USA\n Comment: XtraDB, microslow patches, extensions to slow log\n*************************** 21. row ***************************\n Name: Vicentiu Ciorbaru\nLocation: Bucharest, Romania\n Comment: Roles\n*************************** 22. row ***************************\n Name: Sudheera Palihakkara\nLocation: \n Comment: PCRE Regular Expressions\n*************************** 23. row ***************************\n Name: Pavel Ivanov\nLocation: USA\n Comment: Some patches and bug fixes\n*************************** 24. row ***************************\n Name: Konstantin Osipov\nLocation: Moscow, Russia\n Comment: Prepared statements (4.1), Cursors (5.0), GET_LOCK (10.0)\n*************************** 25. row ***************************\n Name: Ian Gilfillan\nLocation: South Africa\n Comment: MariaDB documentation\n*************************** 26. row ***************************\n Name: Federico Razolli\nLocation: Italy\n Comment: MariaDB documentation Italian translation\n*************************** 27. row ***************************\n Name: Guilhem Bichot\nLocation: Bordeaux, France\n Comment: Replication (since 4.0)\n*************************** 28. row ***************************\n Name: Andrei Elkin\nLocation: Espoo, Finland\n Comment: Replication\n*************************** 29. row ***************************\n Name: Dmitri Lenev\nLocation: Moscow, Russia\n Comment: Time zones support (4.1), Triggers (5.0)\n*************************** 30. row ***************************\n Name: Marc Alff\nLocation: Denver, CO, USA\n Comment: Signal, Resignal, Performance schema\n*************************** 31. row ***************************\n Name: Mikael Ronström\nLocation: Stockholm, Sweden\n Comment: NDB Cluster, Partitioning, online alter table\n*************************** 32. row ***************************\n Name: Ingo Strüwing\nLocation: Berlin, Germany\n Comment: Bug fixing in MyISAM, Merge tables etc\n*************************** 33. row ***************************\n Name: Marko Mäkelä\nLocation: Helsinki, Finland\n Comment: InnoDB core developer\n...\n\nURL: https://mariadb.com/kb/en/show-authors/','','https://mariadb.com/kb/en/show-authors/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (363,26,'SHOW BINARY LOGS','Syntax\n------\n\nSHOW BINARY LOGS\nSHOW MASTER LOGS\n\nDescription\n-----------\n\nLists the binary log files on the server. This statement is used as part of\nthe procedure described in PURGE BINARY LOGS, that shows how to determine\nwhich logs can be purged.\n\nThis statement requires the SUPER privilege, the REPLICATION_CLIENT privilege,\nor, from MariaDB 10.5.2, the BINLOG MONITOR privilege.\n\nExamples\n--------\n\nSHOW BINARY LOGS;\n+--------------------+-----------+\n| Log_name | File_size |\n+--------------------+-----------+\n| mariadb-bin.000001 | 19039 |\n| mariadb-bin.000002 | 717389 |\n| mariadb-bin.000003 | 300 |\n| mariadb-bin.000004 | 333 |\n| mariadb-bin.000005 | 899 |\n| mariadb-bin.000006 | 125 |\n| mariadb-bin.000007 | 18907 |\n| mariadb-bin.000008 | 19530 |\n| mariadb-bin.000009 | 151 |\n| mariadb-bin.000010 | 151 |\n| mariadb-bin.000011 | 125 |\n| mariadb-bin.000012 | 151 |\n| mariadb-bin.000013 | 151 |\n| mariadb-bin.000014 | 125 |\n| mariadb-bin.000015 | 151 |\n| mariadb-bin.000016 | 314 |\n+--------------------+-----------+\n\nURL: https://mariadb.com/kb/en/show-binary-logs/','','https://mariadb.com/kb/en/show-binary-logs/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (364,26,'SHOW BINLOG EVENTS','Syntax\n------\n\nSHOW BINLOG EVENTS\n [IN \'log_name\'] [FROM pos] [LIMIT [offset,] row_count]\n\nDescription\n-----------\n\nShows the events in the binary log. If you do not specify \'log_name\', the\nfirst binary log is displayed.\n\nRequires the BINLOG MONITOR privilege (>= MariaDB 10.5.2) or the REPLICATION\nSLAVE privilege (<= MariaDB 10.5.1).\n\nExample\n-------\n\nSHOW BINLOG EVENTS IN \'mysql_sandbox10019-bin.000002\';\n+-------------------------------+-----+-------------------+-----------+--------\n----+------------------------------------------------+\n| Log_name | Pos | Event_type | Server_id |\nEnd_log_pos | Info |\n+-------------------------------+-----+-------------------+-----------+--------\n----+------------------------------------------------+\n| mysql_sandbox10019-bin.000002 | 4 | Format_desc | 1 | \n 248 | Server ver: 10.0.19-MariaDB-log, Binlog ver: 4 |\n| mysql_sandbox10019-bin.000002 | 248 | Gtid_list | 1 | \n 273 | [] |\n| mysql_sandbox10019-bin.000002 | 273 | Binlog_checkpoint | 1 | \n 325 | mysql_sandbox10019-bin.000002 |\n| mysql_sandbox10019-bin.000002 | 325 | Gtid | 1 | \n 363 | GTID 0-1-1 |\n| mysql_sandbox10019-bin.000002 | 363 | Query | 1 | \n 446 | CREATE DATABASE blog |\n| mysql_sandbox10019-bin.000002 | 446 | Gtid | 1 | \n 484 | GTID 0-1-2 |\n| mysql_sandbox10019-bin.000002 | 484 | Query | 1 | \n 571 | use `blog`; CREATE TABLE bb (id INT) |\n+-------------------------------+-----+-------------------+-----------+--------\n----+------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/show-binlog-events/','','https://mariadb.com/kb/en/show-binlog-events/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (365,26,'SHOW CHARACTER SET','Syntax\n------\n\nSHOW CHARACTER SET\n [LIKE \'pattern\' | WHERE expr]\n\nDescription\n-----------\n\nThe SHOW CHARACTER SET statement shows all available character sets. The LIKE\nclause, if present on its own, indicates which character set names to match.\nThe WHERE and LIKE clauses can be given to select rows using more general\nconditions, as discussed in Extended SHOW.\n\nThe same information can be queried from the Information Schema CHARACTER_SETS\ntable.\n\nSee Setting Character Sets and Collations for details on specifying the\ncharacter set at the server, database, table and column levels.\n\nExamples\n--------\n\nSHOW CHARACTER SET LIKE \'latin%\';\n+---------+-----------------------------+-------------------+--------+\n| Charset | Description | Default collation | Maxlen |\n+---------+-----------------------------+-------------------+--------+\n| latin1 | cp1252 West European | latin1_swedish_ci | 1 |\n| latin2 | ISO 8859-2 Central European | latin2_general_ci | 1 |\n| latin5 | ISO 8859-9 Turkish | latin5_turkish_ci | 1 |\n| latin7 | ISO 8859-13 Baltic | latin7_general_ci | 1 |\n+---------+-----------------------------+-------------------+--------+\n\nSHOW CHARACTER SET WHERE Maxlen LIKE \'2\';\n+---------+---------------------------+-------------------+--------+\n| Charset | Description | Default collation | Maxlen |\n+---------+---------------------------+-------------------+--------+\n| big5 | Big5 Traditional Chinese | big5_chinese_ci | 2 |\n| sjis | Shift-JIS Japanese | sjis_japanese_ci | 2 |\n| euckr | EUC-KR Korean | euckr_korean_ci | 2 |\n| gb2312 | GB2312 Simplified Chinese | gb2312_chinese_ci | 2 |\n| gbk | GBK Simplified Chinese | gbk_chinese_ci | 2 |\n| ucs2 | UCS-2 Unicode | ucs2_general_ci | 2 |\n| cp932 | SJIS for Windows Japanese | cp932_japanese_ci | 2 |\n+---------+---------------------------+-------------------+--------+\n\nURL: https://mariadb.com/kb/en/show-character-set/','','https://mariadb.com/kb/en/show-character-set/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (366,26,'SHOW CLIENT_STATISTICS','Syntax\n------\n\nSHOW CLIENT_STATISTICS\n\nDescription\n-----------\n\nThe SHOW CLIENT_STATISTICS statement is part of the User Statistics feature.\nIt was removed as a separate statement in MariaDB 10.1.1, but effectively\nreplaced by the generic SHOW information_schema_table statement. The\ninformation_schema.CLIENT_STATISTICS table holds statistics about client\nconnections.\n\nThe userstat system variable must be set to 1 to activate this feature. See\nthe User Statistics and information_schema.CLIENT_STATISTICS articles for more\ninformation.\n\nExample\n-------\n\nSHOW CLIENT_STATISTICS\\G\n*************************** 1. row ***************************\n Client: localhost\n Total_connections: 35\nConcurrent_connections: 0\n Connected_time: 708\n Busy_time: 2.5557979999999985\n Cpu_time: 0.04123740000000002\n Bytes_received: 3883\n Bytes_sent: 21595\n Binlog_bytes_written: 0\n Rows_read: 18\n Rows_sent: 115\n Rows_deleted: 0\n Rows_inserted: 0\n Rows_updated: 0\n Select_commands: 70\n Update_commands: 0\n Other_commands: 0\n Commit_transactions: 1\n Rollback_transactions: 0\n Denied_connections: 0\n Lost_connections: 0\n Access_denied: 0\n Empty_queries: 35\n\nURL: https://mariadb.com/kb/en/show-client-statistics/','','https://mariadb.com/kb/en/show-client-statistics/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (367,26,'SHOW CONTRIBUTORS','Syntax\n------\n\nSHOW CONTRIBUTORS\n\nDescription\n-----------\n\nThe SHOW CONTRIBUTORS statement displays information about the companies and\npeople who financially contribute to MariaDB. For each contributor, it\ndisplays Name, Location, and Comment values. All columns are encoded as latin1.\n\nIt displays all members and sponsors of the MariaDB Foundation as well as\nother financial contributors.\n\nExample\n-------\n\nSHOW CONTRIBUTORS;\n+---------------------+-------------------------------+------------------------\n------------------------------------+\n| Name | Location | Comment \n |\n+---------------------+-------------------------------+------------------------\n------------------------------------+\n| Alibaba Cloud | https://www.alibabacloud.com/ | Platinum Sponsor of\nthe MariaDB Foundation |\n| Tencent Cloud | https://cloud.tencent.com | Platinum Sponsor of\nthe MariaDB Foundation |\n| Microsoft | https://microsoft.com/ | Platinum Sponsor of\nthe MariaDB Foundation |\n| MariaDB Corporation | https://mariadb.com | Founding member,\nPlatinum Sponsor of the MariaDB Foundation |\n| ServiceNow | https://servicenow.com | Platinum Sponsor of\nthe MariaDB Foundation |\n| Intel | https://www.intel.com | Platinum Sponsor of\nthe MariaDB Foundation |\n| SIT | https://sit.org | Platinum Sponsor of\nthe MariaDB Foundation |\n| Visma | https://visma.com | Gold Sponsor of the\nMariaDB Foundation |\n| DBS | https://dbs.com | Gold Sponsor of the\nMariaDB Foundation |\n| IBM | https://www.ibm.com | Gold Sponsor of the\nMariaDB Foundation |\n| Automattic | https://automattic.com | Silver Sponsor of the\nMariaDB Foundation |\n| Percona | https://www.percona.com/ | Sponsor of the MariaDB\nFoundation |\n| Galera Cluster | https://galeracluster.com | Sponsor of the MariaDB\nFoundation |\n| Google | USA | Sponsoring encryption,\nparallel replication and GTID |\n| Facebook | USA | Sponsoring\nnon-blocking API, LIMIT ROWS EXAMINED etc |\n| Ronald Bradford | Brisbane, Australia | EFF contribution for\nUC2006 Auction |\n| Sheeri Kritzer | Boston, Mass. USA | EFF contribution for\nUC2006 Auction |\n| Mark Shuttleworth | London, UK. | EFF contribution for\nUC2006 Auction |\n+---------------------+-------------------------------+------------------------\n------------------------------------+\n\nURL: https://mariadb.com/kb/en/show-contributors/','','https://mariadb.com/kb/en/show-contributors/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (368,26,'SHOW CREATE DATABASE','Syntax\n------\n\nSHOW CREATE {DATABASE | SCHEMA} db_name\n\nDescription\n-----------\n\nShows the CREATE DATABASE statement that creates the given database. SHOW\nCREATE SCHEMA is a synonym for SHOW CREATE DATABASE. SHOW CREATE DATABASE\nquotes database names according to the value of the sql_quote_show_create\nserver system variable.\n\nExamples\n--------\n\nSHOW CREATE DATABASE test;\n+----------+-----------------------------------------------------------------+\n| Database | Create Database |\n+----------+-----------------------------------------------------------------+\n| test | CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET latin1 */ |\n+----------+-----------------------------------------------------------------+\n\nSHOW CREATE SCHEMA test;\n+----------+-----------------------------------------------------------------+\n| Database | Create Database |\n+----------+-----------------------------------------------------------------+\n| test | CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET latin1 */ |\n+----------+-----------------------------------------------------------------+\n\nWith sql_quote_show_create off:\n\nSHOW CREATE DATABASE test;\n+----------+---------------------------------------------------------------+\n| Database | Create Database |\n+----------+---------------------------------------------------------------+\n| test | CREATE DATABASE test /*!40100 DEFAULT CHARACTER SET latin1 */ |\n+----------+---------------------------------------------------------------+\n\nWith a comment, from MariaDB 10.5:\n\nSHOW CREATE DATABASE p;\n+----------+-------------------------------------------------------------------\n------------------+\n| Database | Create Database \n |\n+----------+-------------------------------------------------------------------\n------------------+\n| p | CREATE DATABASE `p` /*!40100 DEFAULT CHARACTER SET latin1 */\nCOMMENT \'presentations\' |\n+----------+-------------------------------------------------------------------\n------------------+\n\nURL: https://mariadb.com/kb/en/show-create-database/','','https://mariadb.com/kb/en/show-create-database/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (369,26,'SHOW CREATE EVENT','Syntax\n------\n\nSHOW CREATE EVENT event_name\n\nDescription\n-----------\n\nThis statement displays the CREATE EVENT statement needed to re-create a given\nevent, as well as the SQL_MODE that was used when the trigger has been created\nand the character set used by the connection. To find out which events are\npresent, use SHOW EVENTS.\n\nThe output of this statement is unreliably affected by the\nsql_quote_show_create server system variable - see\nhttp://bugs.mysql.com/bug.php?id=12719\n\nThe information_schema.EVENTS table provides similar, but more complete,\ninformation.\n\nExamples\n--------\n\nSHOW CREATE EVENT test.e_daily\\G\n*************************** 1. row ***************************\n Event: e_daily\n sql_mode:\n time_zone: SYSTEM\n Create Event: CREATE EVENT `e_daily`\n ON SCHEDULE EVERY 1 DAY\n STARTS CURRENT_TIMESTAMP + INTERVAL 6 HOUR\n ON COMPLETION NOT PRESERVE\n ENABLE\n COMMENT \'Saves total number of sessions then\n clears the table each day\'\n DO BEGIN\n INSERT INTO site_activity.totals (time, total)\n SELECT CURRENT_TIMESTAMP, COUNT(*)\n FROM site_activity.sessions;\n DELETE FROM site_activity.sessions;\n END\ncharacter_set_client: latin1\ncollation_connection: latin1_swedish_ci\n Database Collation: latin1_swedish_ci\n\nURL: https://mariadb.com/kb/en/show-create-event/','','https://mariadb.com/kb/en/show-create-event/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (370,26,'SHOW CREATE FUNCTION','Syntax\n------\n\nSHOW CREATE FUNCTION func_name\n\nDescription\n-----------\n\nThis statement is similar to SHOW CREATE PROCEDURE but for stored functions.\n\nThe output of this statement is unreliably affected by the\nsql_quote_show_create server system variable - see\nhttp://bugs.mysql.com/bug.php?id=12719\n\nExample\n-------\n\nSHOW CREATE FUNCTION VatCents\\G\n*************************** 1. row ***************************\n Function: VatCents\n sql_mode:\n Create Function: CREATE DEFINER=`root`@`localhost` FUNCTION\n`VatCents`(price DECIMAL(10,2)) RETURNS int(11)\n DETERMINISTIC\nBEGIN\n DECLARE x INT;\n SET x = price * 114;\n RETURN x;\nEND\ncharacter_set_client: utf8\ncollation_connection: utf8_general_ci\n Database Collation: latin1_swedish_ci\n\nURL: https://mariadb.com/kb/en/show-create-function/','','https://mariadb.com/kb/en/show-create-function/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (371,26,'SHOW CREATE PACKAGE','MariaDB starting with 10.3.5\n----------------------------\nOracle-style packages were introduced in MariaDB 10.3.5.\n\nSyntax\n------\n\nSHOW CREATE PACKAGE [ db_name . ] package_name\n\nDescription\n-----------\n\nThe SHOW CREATE PACKAGE statement can be used when Oracle SQL_MODE is set.\n\nShows the CREATE statement that creates the given package specification.\n\nExamples\n--------\n\nSHOW CREATE PACKAGE employee_tools\\G\n*************************** 1. row ***************************\n Package: employee_tools\n sql_mode:\nPIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ORACLE,NO_KEY_OPTIONS,NO_TABLE_OPTIONS\nNO_FIELD_OPTIONS,NO_AUTO_CREATE_USER\n Create Package: CREATE DEFINER=\"root\"@\"localhost\" PACKAGE\n\"employee_tools\" AS\n FUNCTION getSalary(eid INT) RETURN DECIMAL(10,2);\n PROCEDURE raiseSalary(eid INT, amount DECIMAL(10,2));\n PROCEDURE raiseSalaryStd(eid INT);\n PROCEDURE hire(ename TEXT, esalary DECIMAL(10,2));\nEND\ncharacter_set_client: utf8\ncollation_connection: utf8_general_ci\n Database Collation: latin1_swedish_ci\n\nURL: https://mariadb.com/kb/en/show-create-package/','','https://mariadb.com/kb/en/show-create-package/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (372,26,'SHOW CREATE PACKAGE BODY','MariaDB starting with 10.3.5\n----------------------------\nOracle-style packages were introduced in MariaDB 10.3.5.\n\nSyntax\n------\n\nSHOW CREATE PACKAGE BODY [ db_name . ] package_name\n\nDescription\n-----------\n\nThe SHOW CREATE PACKAGE BODY statement can be used when Oracle SQL_MODE is set.\n\nShows the CREATE statement that creates the given package body (i.e. the\nimplementation).\n\nExamples\n--------\n\nSHOW CREATE PACKAGE BODY employee_tools\\G\n*************************** 1. row ***************************\n Package body: employee_tools\n sql_mode:\nPIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ORACLE,NO_KEY_OPTIONS,NO_TABLE_OPTIONS\nNO_FIELD_OPTIONS,NO_AUTO_CREATE_USER\n Create Package Body: CREATE DEFINER=\"root\"@\"localhost\" PACKAGE BODY\n\"employee_tools\" AS\n\nstdRaiseAmount DECIMAL(10,2):=500;\n\nPROCEDURE log (eid INT, ecmnt TEXT) AS\n BEGIN\n INSERT INTO employee_log (id, cmnt) VALUES (eid, ecmnt);\n END;\n\nPROCEDURE hire(ename TEXT, esalary DECIMAL(10,2)) AS\n eid INT;\n BEGIN\n INSERT INTO employee (name, salary) VALUES (ename, esalary);\n eid:= last_insert_id();\n log(eid, \'hire \' || ename);\n END;\n\nFUNCTION getSalary(eid INT) RETURN DECIMAL(10,2) AS\n nSalary DECIMAL(10,2);\n BEGIN\n SELECT salary INTO nSalary FROM employee WHERE id=eid;\n log(eid, \'getSalary id=\' || eid || \' salary=\' || nSalary);\n RETURN nSalary;\n END;\n\nPROCEDURE raiseSalary(eid INT, amount DECIMAL(10,2)) AS\n BEGIN\n UPDATE employee SET salary=salary+amount WHERE id=eid;\n log(eid, \'raiseSalary id=\' || eid || \' amount=\' || amount);\n END;\n\nPROCEDURE raiseSalaryStd(eid INT) AS\n BEGIN\n raiseSalary(eid, stdRaiseAmount);\n log(eid, \'raiseSalaryStd id=\' || eid);\n END;\n\nBEGIN \n log(0, \'Session \' || connection_id() || \' \' || current_user || \' started\');\nEND\ncharacter_set_client: utf8\ncollation_connection: utf8_general_ci\n Database Collation: latin1_swedish_ci\n\nURL: https://mariadb.com/kb/en/show-create-package-body/','','https://mariadb.com/kb/en/show-create-package-body/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (373,26,'SHOW CREATE PROCEDURE','Syntax\n------\n\nSHOW CREATE PROCEDURE proc_name\n\nDescription\n-----------\n\nThis statement is a MariaDB extension. It returns the exact string that can be\nused to re-create the named stored procedure, as well as the SQL_MODE that was\nused when the trigger has been created and the character set used by the\nconnection.. A similar statement, SHOW CREATE FUNCTION, displays information\nabout stored functions.\n\nBoth statements require that you are the owner of the routine or have the\nSELECT privilege on the mysql.proc table. When neither is true, the statements\ndisplay NULL for the Create Procedure or Create Function field.\n\nWarning Users with SELECT privileges on mysql.proc or USAGE privileges on *.*\ncan view the text of routines, even when they do not have privileges for the\nfunction or procedure itself.\n\nThe output of these statements is unreliably affected by the\nsql_quote_show_create server system variable - see\nhttp://bugs.mysql.com/bug.php?id=12719\n\nExamples\n--------\n\nHere\'s a comparison of the SHOW CREATE PROCEDURE and SHOW CREATE FUNCTION\nstatements.\n\nSHOW CREATE PROCEDURE test.simpleproc\\G\n*************************** 1. row ***************************\n Procedure: simpleproc\n sql_mode:\n Create Procedure: CREATE PROCEDURE `simpleproc`(OUT param1 INT)\n BEGIN\n SELECT COUNT(*) INTO param1 FROM t;\n END\ncharacter_set_client: latin1\ncollation_connection: latin1_swedish_ci\n Database Collation: latin1_swedish_ci\n\nSHOW CREATE FUNCTION test.hello\\G\n*************************** 1. row ***************************\n Function: hello\n sql_mode:\n Create Function: CREATE FUNCTION `hello`(s CHAR(20))\n RETURNS CHAR(50)\n RETURN CONCAT(\'Hello, \',s,\'!\')\ncharacter_set_client: latin1\ncollation_connection: latin1_swedish_ci\n Database Collation: latin1_swedish_ci\n\nWhen the user issuing the statement does not have privileges on the routine,\nattempting to CALL the procedure raises Error 1370.\n\nCALL test.prc1();\nError 1370 (42000): execute command denieed to user \'test_user\'@\'localhost\'\nfor routine \'test\'.\'prc1\'\n\nIf the user neither has privilege to the routine nor the SELECT privilege on\nmysql.proc table, it raises Error 1305, informing them that the procedure does\nnot exist.\n\nSHOW CREATE TABLES test.prc1\\G\nError 1305 (42000): PROCEDURE prc1 does not exist\n\nURL: https://mariadb.com/kb/en/show-create-procedure/','','https://mariadb.com/kb/en/show-create-procedure/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (374,26,'SHOW CREATE SEQUENCE','MariaDB starting with 10.3.1\n----------------------------\nSequences were introduced in MariaDB 10.3.\n\nSyntax\n------\n\nSHOW CREATE SEQUENCE sequence_name;\n\nDescription\n-----------\n\nShows the CREATE SEQUENCE statement that created the given sequence. The\nstatement requires the SELECT privilege for the table.\n\nExample\n-------\n\nCREATE SEQUENCE s1 START WITH 50;\nSHOW CREATE SEQUENCE s1\\G;\n*************************** 1. row ***************************\n Table: s1\nCreate Table: CREATE SEQUENCE `s1` start with 50 minvalue 1 maxvalue\n9223372036854775806 \n increment by 1 cache 1000 nocycle ENGINE=InnoDB\n\nNotes\n-----\n\nIf you want to see the underlying table structure used for the SEQUENCE you\ncan use SHOW CREATE TABLE on the SEQUENCE. You can also use SELECT to read the\ncurrent recorded state of the SEQUENCE:\n\nSHOW CREATE TABLE s1\\G\n*************************** 1. row ***************************\n Table: s1\nCreate Table: CREATE TABLE `s1` (\n `next_not_cached_value` bigint(21) NOT NULL,\n `minimum_value` bigint(21) NOT NULL,\n `maximum_value` bigint(21) NOT NULL,\n `start_value` bigint(21) NOT NULL COMMENT \'start value when sequences is\ncreated \n or value if RESTART is used\',\n `increment` bigint(21) NOT NULL COMMENT \'increment value\',\n `cache_size` bigint(21) unsigned NOT NULL,\n `cycle_option` tinyint(1) unsigned NOT NULL COMMENT \'0 if no cycles are\nallowed, \n 1 if the sequence should begin a new cycle when maximum_value is passed\',\n `cycle_count` bigint(21) NOT NULL COMMENT \'How many cycles have been done\'\n) ENGINE=InnoDB SEQUENCE=1\n\nSELECT * FROM s1\\G\n*************************** 1. row ***************************\nnext_not_cached_value: 50\n minimum_value: 1\n maximum_value: 9223372036854775806\n start_value: 50\n increment: 1\n cache_size: 1000\n cycle_option: 0\n cycle_count: 0\n\nURL: https://mariadb.com/kb/en/show-create-sequence/','','https://mariadb.com/kb/en/show-create-sequence/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (375,26,'SHOW CREATE TRIGGER','Syntax\n------\n\nSHOW CREATE TRIGGER trigger_name\n\nDescription\n-----------\n\nThis statement shows a CREATE TRIGGER statement that creates the given\ntrigger, as well as the SQL_MODE that was used when the trigger has been\ncreated and the character set used by the connection.\n\nThe output of this statement is unreliably affected by the\nsql_quote_show_create server system variable - see\nhttp://bugs.mysql.com/bug.php?id=12719\n\nExamples\n--------\n\nSHOW CREATE TRIGGER example\\G\n*************************** 1. row ***************************\n Trigger: example\n sql_mode:\nONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,STRICT_ALL_TABLES\n,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO\n\nENGINE_SUBSTITUTION\nSQL Original Statement: CREATE DEFINER=`root`@`localhost` TRIGGER example\nBEFORE\n INSERT ON t FOR EACH ROW\nBEGIN\n SET NEW.c = NEW.c * 2;\nEND\n character_set_client: cp850\n collation_connection: cp850_general_ci\n Database Collation: utf8_general_ci\n Created: 2016-09-29 13:53:34.35\n\nMariaDB starting with 10.2.3\n----------------------------\nThe Created column was added in MySQL 5.7 and MariaDB 10.2.3 as part of\nintroducing multiple trigger events per action.\n\nURL: https://mariadb.com/kb/en/show-create-trigger/','','https://mariadb.com/kb/en/show-create-trigger/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (376,26,'SHOW CREATE VIEW','Syntax\n------\n\nSHOW CREATE VIEW view_name\n\nDescription\n-----------\n\nThis statement shows a CREATE VIEW statement that creates the given view, as\nwell as the character set used by the connection when the view was created.\nThis statement also works with views.\n\nSHOW CREATE VIEW quotes table, column and stored function names according to\nthe value of the sql_quote_show_create server system variable.\n\nExamples\n--------\n\nSHOW CREATE VIEW example\\G\n*************************** 1. row ***************************\n View: example\n Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL\nSECURITY DEFINER VIEW `example` AS (select `t`.`id` AS `id`,`t`.`s` AS `s` from\n`t`)\ncharacter_set_client: cp850\ncollation_connection: cp850_general_ci\n\nWith sql_quote_show_create off:\n\nSHOW CREATE VIEW example\\G\n*************************** 1. row ***************************\n View: example\n Create View: CREATE ALGORITHM=UNDEFINED DEFINER=root@localhost SQL\nSECU\nRITY DEFINER VIEW example AS (select t.id AS id,t.s AS s from t)\ncharacter_set_client: cp850\ncollation_connection: cp850_general_ci\n\nGrants\n------\n\nTo be able to see a view, you need to have the SHOW VIEW and the SELECT\nprivilege on the view:\n\nGRANT SHOW VIEW,SELECT ON test_database.test_view TO \'test\'@\'localhost\';\n\nURL: https://mariadb.com/kb/en/show-create-view/','','https://mariadb.com/kb/en/show-create-view/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (377,26,'SHOW DATABASES','Syntax\n------\n\nSHOW {DATABASES | SCHEMAS}\n [LIKE \'pattern\' | WHERE expr]\n\nDescription\n-----------\n\nSHOW DATABASES lists the databases on the MariaDB server host. SHOW SCHEMAS is\na synonym for SHOW DATABASES. The LIKE clause, if present on its own,\nindicates which database names to match. The WHERE and LIKE clauses can be\ngiven to select rows using more general conditions, as discussed in Extended\nSHOW.\n\nYou see only those databases for which you have some kind of privilege, unless\nyou have the global SHOW DATABASES privilege. You can also get this list using\nthe mysqlshow command.\n\nIf the server was started with the --skip-show-database option, you cannot use\nthis statement at all unless you have the SHOW DATABASES privilege.\n\nThe list of results returned by SHOW DATABASES is based on directories in the\ndata directory, which is how MariaDB implements databases. It\'s possible that\noutput includes directories that do not correspond to actual databases.\n\nThe Information Schema SCHEMATA table also contains database information.\n\nExamples\n--------\n\nSHOW DATABASES;\n+--------------------+\n| Database |\n+--------------------+\n| information_schema |\n| mysql |\n| performance_schema |\n| test |\n+--------------------+\n\nSHOW DATABASES LIKE \'m%\';\n+---------------+\n| Database (m%) |\n+---------------+\n| mysql |\n+---------------+\n\nURL: https://mariadb.com/kb/en/show-databases/','','https://mariadb.com/kb/en/show-databases/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (378,26,'SHOW ENGINE','Syntax\n------\n\nSHOW ENGINE engine_name {STATUS | MUTEX}\n\nDescription\n-----------\n\nSHOW ENGINE displays operational information about a storage engine. The\nfollowing statements currently are supported:\n\nSHOW ENGINE INNODB STATUS\nSHOW ENGINE INNODB MUTEX\nSHOW ENGINE PERFORMANCE_SCHEMA STATUS\nSHOW ENGINE ROCKSDB STATUS\n\nIf the Sphinx Storage Engine is installed, the following is also supported:\n\nSHOW ENGINE SPHINX STATUS\n\nSee SHOW ENGINE SPHINX STATUS.\n\nOlder (and now removed) synonyms were SHOW INNODB STATUS for SHOW ENGINE\nINNODB STATUS and SHOW MUTEX STATUS for SHOW ENGINE INNODB MUTEX.\n\nSHOW ENGINE INNODB STATUS\n-------------------------\n\nSHOW ENGINE INNODB STATUS displays extensive information from the standard\nInnoDB Monitor about the state of the InnoDB storage engine. See SHOW ENGINE\nINNODB STATUS for more.\n\nSHOW ENGINE INNODB MUTEX\n------------------------\n\nSHOW ENGINE INNODB MUTEX displays InnoDB mutex statistics.\n\nThe statement displays the following output fields:\n\n* Type: Always InnoDB.\n* Name: The source file where the mutex is implemented, and the line number\n in the file where the mutex is created. The line number is dependent on the\nMariaDB version.\n* Status: This field displays the following values if UNIV_DEBUG was defined\nat compilation time (for example, in include/univ.h in the InnoDB part of the\nsource tree). Only the os_waits value is displayed if UNIV_DEBUG was not\ndefined. Without UNIV_DEBUG, the information on which the output is based is\ninsufficient to distinguish regular mutexes and mutexes that protect\n rw-locks (which allow multiple readers or a single writer). Consequently, the\n output may appear to contain multiple rows for the same mutex.\ncount indicates how many times the mutex was requested.\nspin_waits indicates how many times the spinlock had to run.\nspin_rounds indicates the number of spinlock rounds. (spin_rounds divided by\n spin_waits provides the average round count.)\nos_waits indicates the number of operating system waits. This occurs when\n the spinlock did not work (the mutex was not locked during the spinlock and\n it was necessary to yield to the operating system and wait).\nos_yields indicates the number of times a the thread trying to lock a mutex\n gave up its timeslice and yielded to the operating system (on the\n presumption that allowing other threads to run will free the mutex so that\n it can be locked).\nos_wait_times indicates the amount of time (in ms) spent in operating system\n waits, if the timed_mutexes system variable is 1 (ON). If timed_mutexes is 0\n (OFF), timing is disabled, so os_wait_times is 0. timed_mutexes is off by\n default.\n\nInformation from this statement can be used to diagnose system problems. For\nexample, large values of spin_waits and spin_rounds may indicate scalability\nproblems.\n\nThe information_schema.INNODB_MUTEXES table provides similar information.\n\nSHOW ENGINE PERFORMANCE_SCHEMA STATUS\n-------------------------------------\n\nThis statement shows how much memory is used for performance_schema tables and\ninternal buffers.\n\nThe output contains the following fields:\n\n* Type: Always performance_schema.\n* Name: The name of a table, the name of an internal buffer, or the\nperformance_schema word, followed by a dot and an attribute. Internal buffers\nnames are enclosed by parenthesis. performance_schema means that the attribute\nrefers to the whole database (it is a total). \n* Status: The value for the attribute.\n\nThe following attributes are shown, in this order, for all tables:\n\n* row_size: The memory used for an individual record. This value will never\nchange.\n* row_count: The number of rows in the table or buffer. For some tables, this\nvalue depends on a server system variable.\n* memory: For tables and performance_schema, this is the result of row_size *\nrow_count.\n\nFor internal buffers, the attributes are:\n\n* count\n* size\n\nSHOW ENGINE ROCKSDB STATUS\n--------------------------\n\nSee also MyRocks Performance Troubleshooting\n\nURL: https://mariadb.com/kb/en/show-engine/','','https://mariadb.com/kb/en/show-engine/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (379,26,'SHOW ENGINE INNODB STATUS','SHOW ENGINE INNODB STATUS is a specific form of the SHOW ENGINE statement that\ndisplays the InnoDB Monitor output, which is extensive InnoDB information\nwhich can be useful in diagnosing problems.\n\nThe following sections are displayed\n\n* Status: Shows the timestamp, monitor name and the number of seconds, or the\nelapsed time between the current time and the time the InnoDB Monitor output\nwas last displayed. The per-second averages are based upon this time.\n* BACKGROUND THREAD: srv_master_thread lines show work performed by the main\nbackground thread.\n* SEMAPHORES: Threads waiting for a semaphore and stats on how the number of\ntimes threads have needed a spin or a wait on a mutex or rw-lock semaphore. If\nthis number of threads is large, there may be I/O or contention issues.\nReducing the size of the innodb_thread_concurrency system variable may help if\ncontention is related to thread scheduling. Spin rounds per wait shows the\nnumber of spinlock rounds per OS wait for a mutex. \n* LATEST FOREIGN KEY ERROR: Only shown if there has been a foreign key\nconstraint error, it displays the failed statement and information about the\nconstraint and the related tables.\n* LATEST DETECTED DEADLOCK: Only shown if there has been a deadlock, it\ndisplays the transactions involved in the deadlock and the statements being\nexecuted, held and required locked and the transaction rolled back to.\n* TRANSACTIONS: The output of this section can help identify lock contention,\nas well as reasons for the deadlocks.\n* FILE I/O: InnoDB thread information as well as pending I/O operations and\nI/O performance statistics.\n* INSERT BUFFER AND ADAPTIVE HASH INDEX: InnoDB insert buffer (old name for\nthe change buffer) and adaptive hash index status information, including the\nnumber of each type of operation performed, and adaptive hash index\nperformance.\n* LOG: InnoDB log information, including current log sequence number, how far\nthe log has been flushed to disk, the position at which InnoDB last took a\ncheckpoint, pending writes and write performance statistics.\n* BUFFER POOL AND MEMORY: Information on buffer pool pages read and written,\nwhich allows you to see the number of data file I/O operations performed by\nyour queries. See InnoDB Buffer Pool for more. Similar information is also\navailable from the INFORMATION_SCHEMA.INNODB_BUFFER_POOL_STATS table.\n* ROW OPERATIONS:Information about the main thread, including the number and\nperformance rate for each type of row operation.\n\nIf the innodb_status_output_locks system variable is set to 1, extended lock\ninformation will be displayed.\n\nExample output:\n\n=====================================\n2019-09-06 12:44:13 0x7f93cc236700 INNODB MONITOR OUTPUT\n=====================================\nPer second averages calculated from the last 4 seconds\n-----------------\nBACKGROUND THREAD\n-----------------\nsrv_master_thread loops: 2 srv_active, 0 srv_shutdown, 83698 srv_idle\nsrv_master_thread log flush and writes: 83682\n----------\nSEMAPHORES\n----------\nOS WAIT ARRAY INFO: reservation count 15\nOS WAIT ARRAY INFO: signal count 8\nRW-shared spins 0, rounds 20, OS waits 7\nRW-excl spins 0, rounds 0, OS waits 0\nRW-sx spins 0, rounds 0, OS waits 0\nSpin rounds per wait: 20.00 RW-shared, 0.00 RW-excl, 0.00 RW-sx\n------------\nTRANSACTIONS\n------------\nTrx id counter 236\nPurge done for trx\'s n:o < 236 undo n:o < 0 state: running\nHistory list length 22\nLIST OF TRANSACTIONS FOR EACH SESSION:\n---TRANSACTION 421747401994584, not started\n0 lock struct(s), heap size 1136, 0 row lock(s)\n---TRANSACTION 421747401990328, not started\n0 lock struct(s), heap size 1136, 0 row lock(s)\n--------\nFILE I/O\n--------\nI/O thread 0 state: waiting for completed aio requests (insert buffer thread)\nI/O thread 1 state: waiting for completed aio requests (log thread)\nI/O thread 2 state: waiting for completed aio requests (read thread)\nI/O thread 3 state: waiting for completed aio requests (read thread)\nI/O thread 4 state: waiting for completed aio requests (read thread)\nI/O thread 5 state: waiting for completed aio requests (read thread)\nI/O thread 6 state: waiting for completed aio requests (write thread)\nI/O thread 7 state: waiting for completed aio requests (write thread)\nI/O thread 8 state: waiting for completed aio requests (write thread)\nI/O thread 9 state: waiting for completed aio requests (write thread)\nPending normal aio reads: [0, 0, 0, 0] , aio writes: [0, 0, 0, 0] ,\n ibuf aio reads:, log i/o\'s:, sync i/o\'s:\nPending flushes (fsync) log: 0; buffer pool: 0\n286 OS file reads, 171 OS file writes, 22 OS fsyncs\n0.00 reads/s, 0 avg bytes/read, 0.00 writes/s, 0.00 fsyncs/s\n-------------------------------------\nINSERT BUFFER AND ADAPTIVE HASH INDEX\n-------------------------------------\nIbuf: size 1, free list len 0, seg size 2, 0 merges\nmerged operations:\n insert 0, delete mark 0, delete 0\ndiscarded operations:\n insert 0, delete mark 0, delete 0\nHash table size 34679, node heap has 0 buffer(s)\nHash table size 34679, node heap has 0 buffer(s)\nHash table size 34679, node heap has 0 buffer(s)\nHash table size 34679, node heap has 0 buffer(s)\nHash table size 34679, node heap has 0 buffer(s)\nHash table size 34679, node heap has 0 buffer(s)\nHash table size 34679, node heap has 0 buffer(s)\nHash table size 34679, node heap has 0 buffer(s)\n0.00 hash searches/s, 0.00 non-hash searches/s\n---\nLOG\n---\nLog sequence number 445926\nLog flushed up to 445926\nPages flushed up to 445926\nLast checkpoint at 445917\n0 pending log flushes, 0 pending chkp writes\n18 log i/o\'s done, 0.00 log i/o\'s/second\n----------------------\nBUFFER POOL AND MEMORY\n----------------------\nTotal large memory allocated 167772160\nDictionary memory allocated 50768\nBuffer pool size 8012\nFree buffers 7611\nDatabase pages 401\nOld database pages 0\nModified db pages 0\nPercent of dirty pages(LRU & free pages): 0.000\nMax dirty pages percent: 75.000\nPending reads 0\nPending writes: LRU 0, flush list 0, single page 0\nPages made young 0, not young 0\n0.00 youngs/s, 0.00 non-youngs/s\nPages read 264, created 137, written 156\n0.00 reads/s, 0.00 creates/s, 0.00 writes/s\nNo buffer pool page gets since the last printout\nPages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead\n0.00/s\nLRU len: 401, unzip_LRU len: 0\nI/O sum[0]:cur[0], unzip sum[0]:cur[0]\n--------------\nROW OPERATIONS\n--------------\n0 queries inside InnoDB, 0 queries in queue\n0 read views open inside InnoDB\nProcess ID=4267, Main thread ID=140272021272320, state: sleeping\nNumber of rows inserted 1, updated 0, deleted 0, read 1\n0.00 inserts/s, 0.00 updates/s, 0.00 deletes/s, 0.00 reads/s\nNumber of system rows inserted 0, updated 0, deleted 0, read 0\n0.00 inserts/s, 0.00 updates/s, 0.00 deletes/s, 0.00 reads/s\n----------------------------\nEND OF INNODB MONITOR OUTPUT\n============================\n\nURL: https://mariadb.com/kb/en/show-engine-innodb-status/','','https://mariadb.com/kb/en/show-engine-innodb-status/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (380,26,'SHOW ENGINES','Syntax\n------\n\nSHOW [STORAGE] ENGINES\n\nDescription\n-----------\n\nSHOW ENGINES displays status information about the server\'s storage engines.\nThis is particularly useful for checking whether a storage engine is\nsupported, or to see what the default engine is. SHOW TABLE TYPES is a\ndeprecated synonym.\n\nThe information_schema.ENGINES table provides the same information.\n\nSince storage engines are plugins, different information about them is also\nshown in the information_schema.PLUGINS table and by the SHOW PLUGINS\nstatement.\n\nNote that both MySQL\'s InnoDB and Percona\'s XtraDB replacement are labeled as\nInnoDB. However, if XtraDB is in use, it will be specified in the COMMENT\nfield. See XtraDB and InnoDB. The same applies to FederatedX.\n\nThe output consists of the following columns:\n\n* Engine indicates the engine\'s name.\n* Support indicates whether the engine is installed, and whether it is the\ndefault engine for the current session.\n* Comment is a brief description.\n* Transactions, XA and Savepoints indicate whether transactions, XA\ntransactions and transaction savepoints are supported by the engine.\n\nExamples\n--------\n\nSHOW ENGINES\\G\n*************************** 1. row ***************************\n Engine: InnoDB\n Support: DEFAULT\n Comment: Supports transactions, row-level locking, and foreign keys\nTransactions: YES\n XA: YES\n Savepoints: YES\n*************************** 2. row ***************************\n Engine: CSV\n Support: YES\n Comment: CSV storage engine\nTransactions: NO\n XA: NO\n Savepoints: NO\n*************************** 3. row ***************************\n Engine: MyISAM\n Support: YES\n Comment: MyISAM storage engine\nTransactions: NO\n XA: NO\n Savepoints: NO\n*************************** 4. row ***************************\n Engine: BLACKHOLE\n Support: YES\n Comment: /dev/null storage engine (anything you write to it disappears)\nTransactions: NO\n XA: NO\n Savepoints: NO\n*************************** 5. row ***************************\n Engine: FEDERATED\n Support: YES\n Comment: FederatedX pluggable storage engine\nTransactions: YES\n XA: NO\n Savepoints: YES\n*************************** 6. row ***************************\n Engine: MRG_MyISAM\n Support: YES\n Comment: Collection of identical MyISAM tables\nTransactions: NO\n XA: NO\n Savepoints: NO\n*************************** 7. row ***************************\n Engine: ARCHIVE\n Support: YES\n Comment: Archive storage engine\nTransactions: NO\n XA: NO\n Savepoints: NO\n*************************** 8. row ***************************\n Engine: MEMORY\n Support: YES\n Comment: Hash based, stored in memory, useful for temporary tables\nTransactions: NO\n XA: NO\n Savepoints: NO\n*************************** 9. row ***************************\n Engine: PERFORMANCE_SCHEMA\n Support: YES\n Comment: Performance Schema\nTransactions: NO\n XA: NO\n Savepoints: NO\n*************************** 10. row ***************************\n Engine: Aria\n Support: YES\n Comment: Crash-safe tables with MyISAM heritage\nTransactions: NO\n XA: NO\n Savepoints: NO\n10 rows in set (0.00 sec)\n\nURL: https://mariadb.com/kb/en/show-engines/','','https://mariadb.com/kb/en/show-engines/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (381,26,'SHOW ERRORS','Syntax\n------\n\nSHOW ERRORS [LIMIT [offset,] row_count]\nSHOW ERRORS [LIMIT row_count OFFSET offset]\nSHOW COUNT(*) ERRORS\n\nDescription\n-----------\n\nThis statement is similar to SHOW WARNINGS, except that instead of displaying\nerrors, warnings, and notes, it displays only errors.\n\nThe LIMIT clause has the same syntax as for the SELECT statement.\n\nThe SHOW COUNT(*) ERRORS statement displays the number of errors. You can also\nretrieve this number from the error_count variable.\n\nSHOW COUNT(*) ERRORS;\nSELECT @@error_count;\n\nThe value of error_count might be greater than the number of messages\ndisplayed by SHOW WARNINGS if the max_error_count system variable is set so\nlow that not all messages are stored.\n\nFor a list of MariaDB error codes, see MariaDB Error Codes.\n\nExamples\n--------\n\nSELECT f();\nERROR 1305 (42000): FUNCTION f does not exist\n\nSHOW COUNT(*) ERRORS;\n+-----------------------+\n| @@session.error_count |\n+-----------------------+\n| 1 |\n+-----------------------+\n\nSHOW ERRORS;\n+-------+------+---------------------------+\n| Level | Code | Message |\n+-------+------+---------------------------+\n| Error | 1305 | FUNCTION f does not exist |\n+-------+------+---------------------------+\n\nURL: https://mariadb.com/kb/en/show-errors/','','https://mariadb.com/kb/en/show-errors/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (382,26,'SHOW EVENTS','Syntax\n------\n\nSHOW EVENTS [{FROM | IN} schema_name]\n [LIKE \'pattern\' | WHERE expr]\n\nDescription\n-----------\n\nShows information about Event Manager events (created with CREATE EVENT).\nRequires the EVENT privilege. Without any arguments, SHOW EVENTS lists all of\nthe events in the current schema:\n\nSELECT CURRENT_USER(), SCHEMA();\n+----------------+----------+\n| CURRENT_USER() | SCHEMA() |\n+----------------+----------+\n| jon@ghidora | myschema |\n+----------------+----------+\n\nSHOW EVENTS\\G\n*************************** 1. row ***************************\n Db: myschema\n Name: e_daily\n Definer: jon@ghidora\n Time zone: SYSTEM\n Type: RECURRING\n Execute at: NULL\n Interval value: 10\n Interval field: SECOND\n Starts: 2006-02-09 10:41:23\n Ends: NULL\n Status: ENABLED\n Originator: 0\ncharacter_set_client: latin1\ncollation_connection: latin1_swedish_ci\n Database Collation: latin1_swedish_ci\n\nTo see the event action, use SHOW CREATE EVENT instead, or look at the\ninformation_schema.EVENTS table.\n\nTo see events for a specific schema, use the FROM clause. For example, to see\nevents for the test schema, use the following statement:\n\nSHOW EVENTS FROM test;\n\nThe LIKE clause, if present, indicates which event names to match. The WHERE\nclause can be given to select rows using more general conditions, as discussed\nin Extended Show.\n\nURL: https://mariadb.com/kb/en/show-events/','','https://mariadb.com/kb/en/show-events/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (383,26,'SHOW FUNCTION STATUS','Syntax\n------\n\nSHOW FUNCTION STATUS\n [LIKE \'pattern\' | WHERE expr]\n\nDescription\n-----------\n\nThis statement is similar to SHOW PROCEDURE STATUS but for stored functions.\n\nThe LIKE clause, if present on its own, indicates which function names to\nmatch.\n\nThe WHERE and LIKE clauses can be given to select rows using more general\nconditions, as discussed in Extended SHOW.\n\nThe information_schema.ROUTINES table contains more detailed information.\n\nExamples\n--------\n\nShowing all stored functions:\n\nSHOW FUNCTION STATUS\\G\n*************************** 1. row ***************************\n Db: test\n Name: VatCents\n Type: FUNCTION\n Definer: root@localhost\n Modified: 2013-06-01 12:40:31\n Created: 2013-06-01 12:40:31\n Security_type: DEFINER\n Comment:\ncharacter_set_client: utf8\ncollation_connection: utf8_general_ci\n Database Collation: latin1_swedish_ci\n\nStored functions whose name starts with \'V\':\n\nSHOW FUNCTION STATUS LIKE \'V%\' \\G\n*************************** 1. row ***************************\n Db: test\n Name: VatCents\n Type: FUNCTION\n Definer: root@localhost\n Modified: 2013-06-01 12:40:31\n Created: 2013-06-01 12:40:31\n Security_type: DEFINER\n Comment:\ncharacter_set_client: utf8\ncollation_connection: utf8_general_ci\n Database Collation: latin1_swedish_ci\n\nStored functions with a security type of \'DEFINER\':\n\nSHOW FUNCTION STATUS WHERE Security_type LIKE \'DEFINER\' \\G\n*************************** 1. row ***************************\n Db: test\n Name: VatCents\n Type: FUNCTION\n Definer: root@localhost\n Modified: 2013-06-01 12:40:31\n Created: 2013-06-01 12:40:31\n Security_type: DEFINER\n Comment:\ncharacter_set_client: utf8\ncollation_connection: utf8_general_ci\n Database Collation: latin1_swedish_ci\n\nURL: https://mariadb.com/kb/en/show-function-status/','','https://mariadb.com/kb/en/show-function-status/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (384,26,'SHOW LOCALES','SHOW LOCALES was introduced as part of the Information Schema plugin extension.\n\nSHOW LOCALES is used to return locales information as part of the Locales\nplugin. While the information_schema.LOCALES table has 8 columns, the SHOW\nLOCALES statement will only display 4 of them:\n\nExample\n-------\n\nSHOW LOCALES;\n+-----+-------+-------------------------------------+------------------------+\n| Id | Name | Description | Error_Message_Language |\n+-----+-------+-------------------------------------+------------------------+\n| 0 | en_US | English - United States | english |\n| 1 | en_GB | English - United Kingdom | english |\n| 2 | ja_JP | Japanese - Japan | japanese |\n| 3 | sv_SE | Swedish - Sweden | swedish |\n...\n\nURL: https://mariadb.com/kb/en/show-locales/','','https://mariadb.com/kb/en/show-locales/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (385,26,'SHOW OPEN TABLES','Syntax\n------\n\nSHOW OPEN TABLES [FROM db_name]\n [LIKE \'pattern\' | WHERE expr]\n\nDescription\n-----------\n\nSHOW OPEN TABLES lists the non-TEMPORARY tables that are currently open in the\ntable cache. See http://dev.mysql.com/doc/refman/5.1/en/table-cache.html.\n\nThe FROM and LIKE clauses may be used.\n\nThe FROM clause, if present, restricts the tables shown to those present in\nthe db_name database.\n\nThe LIKE clause, if present on its own, indicates which table names to match.\nThe WHERE and LIKE clauses can be given to select rows using more general\nconditions, as discussed in Extended SHOW.\n\nThe following information is returned:\n\n+---------------------------+------------------------------------------------+\n| Column | Description |\n+---------------------------+------------------------------------------------+\n| Database | Database name. |\n+---------------------------+------------------------------------------------+\n| Name | Table name. |\n+---------------------------+------------------------------------------------+\n| In_use | Number of table instances being used. |\n+---------------------------+------------------------------------------------+\n| Name_locked | 1 if the table is name-locked, e.g. if it is |\n| | being dropped or renamed, otherwise 0. |\n+---------------------------+------------------------------------------------+\n\nBefore MariaDB 5.5, each use of, for example, LOCK TABLE ... WRITE would\nincrement In_use for that table. With the implementation of the metadata\nlocking improvements in MariaDB 5.5, LOCK TABLE... WRITE acquires a strong MDL\nlock, and concurrent connections will wait on this MDL lock, so any subsequent\nLOCK TABLE... WRITE will not increment In_use.\n\nExample\n-------\n\nSHOW OPEN TABLES;\n+----------+---------------------------+--------+-------------+\n| Database | Table | In_use | Name_locked |\n+----------+---------------------------+--------+-------------+\n...\n| test | xjson | 0 | 0 |\n| test | jauthor | 0 | 0 |\n| test | locks | 1 | 0 |\n...\n+----------+---------------------------+--------+-------------+\n\nURL: https://mariadb.com/kb/en/show-open-tables/','','https://mariadb.com/kb/en/show-open-tables/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (386,26,'SHOW PACKAGE BODY STATUS','MariaDB starting with 10.3.5\n----------------------------\nOracle-style packages were introduced in MariaDB 10.3.5.\n\nSyntax\n------\n\nSHOW PACKAGE BODY STATUS\n [LIKE \'pattern\' | WHERE expr]\n\nDescription\n-----------\n\nThe SHOW PACKAGE BODY STATUS statement returns characteristics of stored\npackage bodies (implementations), such as the database, name, type, creator,\ncreation and modification dates, and character set information. A similar\nstatement, SHOW PACKAGE STATUS, displays information about stored package\nspecifications.\n\nThe LIKE clause, if present, indicates which package names to match. The WHERE\nand LIKE clauses can be given to select rows using more general conditions, as\ndiscussed in Extended SHOW.\n\nThe ROUTINES table in the INFORMATION_SCHEMA database contains more detailed\ninformation.\n\nExamples\n--------\n\nSHOW PACKAGE BODY STATUS LIKE \'pkg1\'\\G\n*************************** 1. row ***************************\n Db: test\n Name: pkg1\n Type: PACKAGE BODY\n Definer: root@localhost\n Modified: 2018-02-27 14:44:14\n Created: 2018-02-27 14:44:14\n Security_type: DEFINER\n Comment: This is my first package body\ncharacter_set_client: utf8\ncollation_connection: utf8_general_ci\n Database Collation: latin1_swedish_ci\n\nURL: https://mariadb.com/kb/en/show-package-body-status/','','https://mariadb.com/kb/en/show-package-body-status/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (387,26,'SHOW PACKAGE STATUS','MariaDB starting with 10.3.5\n----------------------------\nOracle-style packages were introduced in MariaDB 10.3.5.\n\nSyntax\n------\n\nSHOW PACKAGE STATUS\n [LIKE \'pattern\' | WHERE expr]\n\nDescription\n-----------\n\nThe SHOW PACKAGE STATUS statement returns characteristics of stored package\nspecifications, such as the database, name, type, creator, creation and\nmodification dates, and character set information. A similar statement, SHOW\nPACKAGE BODY STATUS, displays information about stored package bodies (i.e.\nimplementations).\n\nThe LIKE clause, if present, indicates which package names to match. The WHERE\nand LIKE clauses can be given to select rows using more general conditions, as\ndiscussed in Extended SHOW.\n\nThe ROUTINES table in the INFORMATION_SCHEMA database contains more detailed\ninformation.\n\nExamples\n--------\n\nSHOW PACKAGE STATUS LIKE \'pkg1\'\\G\n*************************** 1. row ***************************\n Db: test\n Name: pkg1\n Type: PACKAGE\n Definer: root@localhost\n Modified: 2018-02-27 14:38:15\n Created: 2018-02-27 14:38:15\n Security_type: DEFINER\n Comment: This is my first package\ncharacter_set_client: utf8\ncollation_connection: utf8_general_ci\n Database Collation: latin1_swedish_ci\n\nURL: https://mariadb.com/kb/en/show-package-status/','','https://mariadb.com/kb/en/show-package-status/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (388,26,'SHOW PRIVILEGES','Syntax\n------\n\nSHOW PRIVILEGES\n\nDescription\n-----------\n\nSHOW PRIVILEGES shows the list of system privileges that the MariaDB server\nsupports. The exact list of privileges depends on the version of your server.\n\nNote that before MariaDB 10.3.23, MariaDB 10.4.13 and MariaDB 10.5.2 , the\nDelete history privilege displays as Delete versioning rows (MDEV-20382).\n\nExample\n-------\n\nFrom MariaDB 10.5.9\n\nSHOW PRIVILEGES;\n+--------------------------+---------------------------------------+-----------\n--------------------------------------------------------+\n| Privilege | Context | Comment \n |\n+--------------------------+---------------------------------------+-----------\n--------------------------------------------------------+\n| Alter | Tables | To alter\nthe table |\n| Alter routine | Functions,Procedures | To alter\nor drop stored functions/procedures |\n| Create | Databases,Tables,Indexes | To create\nnew databases and tables |\n| Create routine | Databases | To use\nCREATE FUNCTION/PROCEDURE |\n| Create temporary tables | Databases | To use\nCREATE TEMPORARY TABLE |\n| Create view | Tables | To create\nnew views |\n| Create user | Server Admin | To create\nnew users |\n| Delete | Tables | To delete\nexisting rows |\n| Delete history | Tables | To delete\nversioning table historical rows |\n| Drop | Databases,Tables | To drop\ndatabases, tables, and views |\n| Event | Server Admin | To\ncreate, alter, drop and execute events |\n| Execute | Functions,Procedures | To\nexecute stored routines |\n| File | File access on server | To read\nand write files on the server |\n| Grant option | Databases,Tables,Functions,Procedures | To give\nto other users those privileges you possess |\n| Index | Tables | To create\nor drop indexes |\n| Insert | Tables | To insert\ndata into tables |\n| Lock tables | Databases | To use\nLOCK TABLES (together with SELECT privilege) |\n| Process | Server Admin | To view\nthe plain text of currently executing queries |\n| Proxy | Server Admin | To make\nproxy user possible |\n| References | Databases,Tables | To have\nreferences on tables |\n| Reload | Server Admin | To reload\nor refresh tables, logs and privileges |\n| Binlog admin | Server | To purge\nbinary logs |\n| Binlog monitor | Server | To use\nSHOW BINLOG STATUS and SHOW BINARY LOG |\n| Binlog replay | Server | To use\nBINLOG (generated by mariadb-binlog) |\n| Replication master admin | Server | To\nmonitor connected slaves |\n| Replication slave admin | Server | To\nstart/stop slave and apply binlog events |\n| Slave monitor | Server | To use\nSHOW SLAVE STATUS and SHOW RELAYLOG EVENTS |\n| Replication slave | Server Admin | To read\nbinary log events from the master |\n| Select | Tables | To\nretrieve rows from table |\n| Show databases | Server Admin | To see\nall databases with SHOW DATABASES |\n| Show view | Tables | To see\nviews with SHOW CREATE VIEW |\n| Shutdown | Server Admin | To shut\ndown the server |\n| Super | Server Admin | To use\nKILL thread, SET GLOBAL, CHANGE MASTER, etc. |\n| Trigger | Tables | To use\ntriggers |\n| Create tablespace | Server Admin | To\ncreate/alter/drop tablespaces |\n| Update | Tables | To update\nexisting rows |\n| Set user | Server | To create\nviews and stored routines with a different definer |\n| Federated admin | Server | To\nexecute the CREATE SERVER, ALTER SERVER, DROP SERVER statements |\n| Connection admin | Server | To bypass\nconnection limits and kill other users\' connections |\n| Read_only admin | Server | To\nperform write operations even if @@read_only=ON |\n| Usage | Server Admin | No\nprivileges - allow connect only |\n+--------------------------+---------------------------------------+-----------\n--------------------------------------------------------+\n41 rows in set (0.000 sec)\n\nURL: https://mariadb.com/kb/en/show-privileges/','','https://mariadb.com/kb/en/show-privileges/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (389,26,'SHOW PROCEDURE CODE','Syntax\n------\n\nSHOW PROCEDURE CODE proc_name\n\nDescription\n-----------\n\nThis statement is a MariaDB extension that is available only for servers that\nhave been built with debugging support. It displays a representation of the\ninternal implementation of the named stored procedure. A similar statement,\nSHOW FUNCTION CODE, displays information about stored functions.\n\nBoth statements require that you be the owner of the routine or have SELECT\naccess to the mysql.proc table.\n\nIf the named routine is available, each statement produces a result set. Each\nrow in the result set corresponds to one \"instruction\" in the routine. The\nfirst column is Pos, which is an ordinal number beginning with 0. The second\ncolumn is Instruction, which contains an SQL statement (usually changed from\nthe original source), or a directive which has meaning only to the\nstored-routine handler.\n\nExamples\n--------\n\nDELIMITER //\n\nCREATE PROCEDURE p1 ()\n BEGIN\n DECLARE fanta INT DEFAULT 55;\n DROP TABLE t2;\n LOOP\n INSERT INTO t3 VALUES (fanta);\n END LOOP;\n END//\nQuery OK, 0 rows affected (0.00 sec)\n\nSHOW PROCEDURE CODE p1//\n+-----+----------------------------------------+\n| Pos | Instruction |\n+-----+----------------------------------------+\n| 0 | set fanta@0 55 |\n| 1 | stmt 9 \"DROP TABLE t2\" |\n| 2 | stmt 5 \"INSERT INTO t3 VALUES (fanta)\" |\n| 3 | jump 2 |\n+-----+----------------------------------------+\n\nURL: https://mariadb.com/kb/en/show-procedure-code/','','https://mariadb.com/kb/en/show-procedure-code/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (390,26,'SHOW PROCEDURE STATUS','Syntax\n------\n\nSHOW PROCEDURE STATUS\n [LIKE \'pattern\' | WHERE expr]\n\nDescription\n-----------\n\nThis statement is a MariaDB extension. It returns characteristics of a stored\nprocedure, such as the database, name, type, creator, creation and\nmodification dates, and character set information. A similar statement, SHOW\nFUNCTION STATUS, displays information about stored functions.\n\nThe LIKE clause, if present, indicates which procedure or function names to\nmatch. The WHERE and LIKE clauses can be given to select rows using more\ngeneral conditions, as discussed in Extended SHOW.\n\nThe ROUTINES table in the INFORMATION_SCHEMA database contains more detailed\ninformation.\n\nExamples\n--------\n\nSHOW PROCEDURE STATUS LIKE \'p1\'\\G\n*************************** 1. row ***************************\n Db: test\n Name: p1\n Type: PROCEDURE\n Definer: root@localhost\n Modified: 2010-08-23 13:23:03\n Created: 2010-08-23 13:23:03\n Security_type: DEFINER\n Comment:\ncharacter_set_client: latin1\ncollation_connection: latin1_swedish_ci\n Database Collation: latin1_swedish_ci\n\nURL: https://mariadb.com/kb/en/show-procedure-status/','','https://mariadb.com/kb/en/show-procedure-status/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (391,26,'SHOW PROCESSLIST','Syntax\n------\n\nSHOW [FULL] PROCESSLIST\n\nDescription\n-----------\n\nSHOW PROCESSLIST shows you which threads are running. You can also get this\ninformation from the information_schema.PROCESSLIST table or the mysqladmin\nprocesslist command. If you have the PROCESS privilege, you can see all\nthreads. Otherwise, you can see only your own threads (that is, threads\nassociated with the MariaDB account that you are using). If you do not use the\nFULL keyword, only the first 100 characters of each statement are shown in the\nInfo field.\n\nThe columns shown in SHOW PROCESSLIST are:\n\n+---------------------+------------------------------------------------------+\n| Name | Description |\n+---------------------+------------------------------------------------------+\n| ID | The client\'s process ID. |\n+---------------------+------------------------------------------------------+\n| USER | The username associated with the process. |\n+---------------------+------------------------------------------------------+\n| HOST | The host the client is connected to. |\n+---------------------+------------------------------------------------------+\n| DB | The default database of the process (NULL if no |\n| | default). |\n+---------------------+------------------------------------------------------+\n| COMMAND | The command type. See Thread Command Values. |\n+---------------------+------------------------------------------------------+\n| TIME | The amount of time, in seconds, the process has |\n| | been in its current state. For a replica SQL thread |\n| | before MariaDB 10.1, this is the time in seconds |\n| | between the last replicated event\'s timestamp and |\n| | the replica machine\'s real time. |\n+---------------------+------------------------------------------------------+\n| STATE | See Thread States. |\n+---------------------+------------------------------------------------------+\n| INFO | The statement being executed. |\n+---------------------+------------------------------------------------------+\n| PROGRESS | The total progress of the process (0-100%) (see |\n| | Progress Reporting). |\n+---------------------+------------------------------------------------------+\n\nSee TIME_MS column in information_schema.PROCESSLIST for differences in the\nTIME column between MariaDB and MySQL.\n\nThe information_schema.PROCESSLIST table contains the following additional\ncolumns:\n\n+---------------------+------------------------------------------------------+\n| Name | Description |\n+---------------------+------------------------------------------------------+\n| TIME_MS | The amount of time, in milliseconds, the process |\n| | has been in its current state. |\n+---------------------+------------------------------------------------------+\n| STAGE | The stage the process is currently in. |\n+---------------------+------------------------------------------------------+\n| MAX_STAGE | The maximum number of stages. |\n+---------------------+------------------------------------------------------+\n| PROGRESS | The progress of the process within the current |\n| | stage (0-100%). |\n+---------------------+------------------------------------------------------+\n| MEMORY_USED | The amount of memory used by the process. |\n+---------------------+------------------------------------------------------+\n| EXAMINED_ROWS | The number of rows the process has examined. |\n+---------------------+------------------------------------------------------+\n| QUERY_ID | Query ID. |\n+---------------------+------------------------------------------------------+\n\nNote that the PROGRESS field from the information schema, and the PROGRESS\nfield from SHOW PROCESSLIST display different results. SHOW PROCESSLIST shows\nthe total progress, while the information schema shows the progress for the\ncurrent stage only.\n\nThreads can be killed using their thread_id or their query_id, with the KILL\nstatement.\n\nSince queries on this table are locking, if the performance_schema is enabled,\nyou may want to query the THREADS table instead.\n\nExamples\n--------\n\nSHOW PROCESSLIST;\n+----+-----------------+-----------+------+---------+------+-------------------\n----+------------------+----------+\n| Id | User | Host | db | Command | Time | State \n | Info | Progress |\n+----+-----------------+-----------+------+---------+------+-------------------\n----+------------------+----------+\n| 2 | event_scheduler | localhost | NULL | Daemon | 2693 | Waiting on empty\nqueue | NULL | 0.000 |\n| 4 | root | localhost | NULL | Query | 0 | Table lock \n | SHOW PROCESSLIST | 0.000 |\n+----+-----------------+-----------+------+---------+------+-------------------\n----+------------------+----------+\n\nURL: https://mariadb.com/kb/en/show-processlist/','','https://mariadb.com/kb/en/show-processlist/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (392,26,'SHOW PROFILE','Syntax\n------\n\nSHOW PROFILE [type [, type] ... ]\n [FOR QUERY n]\n [LIMIT row_count [OFFSET offset]]\n\ntype:\n ALL\n | BLOCK IO\n | CONTEXT SWITCHES\n | CPU\n | IPC\n | MEMORY\n | PAGE FAULTS\n | SOURCE\n | SWAPS\n\nDescription\n-----------\n\nThe SHOW PROFILE and SHOW PROFILES statements display profiling information\nthat indicates resource usage for statements executed during the course of the\ncurrent session.\n\nProfiling is controlled by the profiling session variable, which has a default\nvalue of 0 (OFF). Profiling is enabled by setting profiling to 1 or ON:\n\nSET profiling = 1;\n\nSHOW PROFILES displays a list of the most recent statements sent to the\nmaster. The size of the list is controlled by the profiling_history_size\nsession variable, which has a default value of 15. The maximum value is 100.\nSetting the value to 0 has the practical effect of disabling profiling.\n\nAll statements are profiled except SHOW PROFILES and SHOW PROFILE, so you will\nfind neither of those statements in the profile list. Malformed statements are\nprofiled. For example, SHOW PROFILING is an illegal statement, and a syntax\nerror occurs if you try to execute it, but it will show up in the profiling\nlist.\n\nSHOW PROFILE displays detailed information about a single statement. Without\nthe FOR QUERY n clause, the output pertains to the most recently executed\nstatement. If FOR QUERY n is included, SHOW PROFILE displays information for\nstatement n. The values of n correspond to the Query_ID values displayed by\nSHOW PROFILES.\n\nThe LIMIT row_count clause may be given to limit the output to row_count rows.\nIf LIMIT is given, OFFSET offset may be added to begin the output offset rows\ninto the full set of rows.\n\nBy default, SHOW PROFILE displays Status and Duration columns. The Status\nvalues are like the State values displayed by SHOW PROCESSLIST, although there\nmight be some minor differences in interpretation for the two statements for\nsome status values (see\nhttp://dev.mysql.com/doc/refman/5.6/en/thread-information.html).\n\nOptional type values may be specified to display specific additional types of\ninformation:\n\n* ALL displays all information\n* BLOCK IO displays counts for block input and output operations\n* CONTEXT SWITCHES displays counts for voluntary and involuntary context\nswitches\n* CPU displays user and system CPU usage times\n* IPC displays counts for messages sent and received\n* MEMORY is not currently implemented\n* PAGE FAULTS displays counts for major and minor page faults\n* SOURCE displays the names of functions from the source code, together with\nthe name and line number of the file in which the function occurs\n* SWAPS displays swap counts\n\nProfiling is enabled per session. When a session ends, its profiling\ninformation is lost.\n\nThe information_schema.PROFILING table contains similar information.\n\nExamples\n--------\n\nSELECT @@profiling;\n+-------------+\n| @@profiling |\n+-------------+\n| 0 |\n+-------------+\n\nSET profiling = 1;\n\nUSE test;\n\nDROP TABLE IF EXISTS t1;\n\nCREATE TABLE T1 (id INT);\n\nSHOW PROFILES;\n+----------+------------+--------------------------+\n| Query_ID | Duration | Query |\n+----------+------------+--------------------------+\n| 1 | 0.00009200 | SELECT DATABASE() |\n| 2 | 0.00023800 | show databases |\n| 3 | 0.00018900 | show tables |\n| 4 | 0.00014700 | DROP TABLE IF EXISTS t1 |\n| 5 | 0.24476900 | CREATE TABLE T1 (id INT) |\n+----------+------------+--------------------------+\n\nSHOW PROFILE;\n+----------------------+----------+\n| Status | Duration |\n+----------------------+----------+\n| starting | 0.000042 |\n| checking permissions | 0.000044 |\n| creating table | 0.244645 |\n| After create | 0.000013 |\n| query end | 0.000003 |\n| freeing items | 0.000016 |\n| logging slow query | 0.000003 |\n| cleaning up | 0.000003 |\n+----------------------+----------+\n\nSHOW PROFILE FOR QUERY 4;\n+--------------------+----------+\n| Status | Duration |\n+--------------------+----------+\n| starting | 0.000126 |\n| query end | 0.000004 |\n| freeing items | 0.000012 |\n| logging slow query | 0.000003 |\n| cleaning up | 0.000002 |\n+--------------------+----------+\n\nSHOW PROFILE CPU FOR QUERY 5;\n+----------------------+----------+----------+------------+\n| Status | Duration | CPU_user | CPU_system |\n+----------------------+----------+----------+------------+\n| starting | 0.000042 | 0.000000 | 0.000000 |\n| checking permissions | 0.000044 | 0.000000 | 0.000000 |\n| creating table | 0.244645 | 0.000000 | 0.000000 |\n| After create | 0.000013 | 0.000000 | 0.000000 |\n| query end | 0.000003 | 0.000000 | 0.000000 |\n| freeing items | 0.000016 | 0.000000 | 0.000000 |\n| logging slow query | 0.000003 | 0.000000 | 0.000000 |\n| cleaning up | 0.000003 | 0.000000 | 0.000000 |\n+----------------------+----------+----------+------------+\n\nURL: https://mariadb.com/kb/en/show-profile/','','https://mariadb.com/kb/en/show-profile/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (393,26,'SHOW PROFILES','Syntax\n------\n\nSHOW PROFILES\n\nDescription\n-----------\n\nThe SHOW PROFILES statement displays profiling information that indicates\nresource usage for statements executed during the course of the current\nsession. It is used together with SHOW PROFILE.\n\nURL: https://mariadb.com/kb/en/show-profiles/','','https://mariadb.com/kb/en/show-profiles/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (394,26,'SHOW QUERY_RESPONSE_TIME','It is possible to use SHOW QUERY_RESPONSE_TIME as an alternative for\nretrieving information from the QUERY_RESPONSE_TIME plugin.\n\nThis was introduced as part of the Information Schema plugin extension.\n\nURL: https://mariadb.com/kb/en/show-query_response_time/','','https://mariadb.com/kb/en/show-query_response_time/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (395,26,'SHOW STATUS','Syntax\n------\n\nSHOW [GLOBAL | SESSION] STATUS\n [LIKE \'pattern\' | WHERE expr]\n\nDescription\n-----------\n\nSHOW STATUS provides server status information. This information also can be\nobtained using the mysqladmin extended-status command, or by querying the\nInformation Schema GLOBAL_STATUS and SESSION_STATUS tables. The LIKE clause,\nif present, indicates which variable names to match. The WHERE clause can be\ngiven to select rows using more general conditions.\n\nWith the GLOBAL modifier, SHOW STATUS displays the status values for all\nconnections to MariaDB. With SESSION, it displays the status values for the\ncurrent connection. If no modifier is present, the default is SESSION. LOCAL\nis a synonym for SESSION. If you see a lot of 0 values, the reason is probably\nthat you have used SHOW STATUS with a new connection instead of SHOW GLOBAL\nSTATUS.\n\nSome status variables have only a global value. For these, you get the same\nvalue for both GLOBAL and SESSION.\n\nSee Server Status Variables for a full list, scope and description of the\nvariables that can be viewed with SHOW STATUS.\n\nThe LIKE clause, if present on its own, indicates which variable name to match.\n\nThe WHERE and LIKE clauses can be given to select rows using more general\nconditions, as discussed in Extended SHOW.\n\nExamples\n--------\n\nFull output from MariaDB 10.1.17:\n\nSHOW GLOBAL STATUS;\n+--------------------------------------------------------------+---------------\n------------------------+\n| Variable_name | Value \n |\n+--------------------------------------------------------------+---------------\n------------------------+\n| Aborted_clients | 0 \n |\n| Aborted_connects | 0 \n |\n| Access_denied_errors | 0 \n |\n| Acl_column_grants | 0 \n |\n| Acl_database_grants | 2 \n |\n| Acl_function_grants | 0 \n |\n| Acl_procedure_grants | 0 \n |\n| Acl_proxy_users | 2 \n |\n| Acl_role_grants | 0 \n |\n| Acl_roles | 0 \n |\n| Acl_table_grants | 0 \n |\n| Acl_users | 6 \n |\n| Aria_pagecache_blocks_not_flushed | 0 \n |\n| Aria_pagecache_blocks_unused | 15706 \n |\n| Aria_pagecache_blocks_used | 0 \n |\n| Aria_pagecache_read_requests | 0 \n |\n| Aria_pagecache_reads | 0 \n |\n| Aria_pagecache_write_requests | 0 \n |\n| Aria_pagecache_writes | 0 \n |\n| Aria_transaction_log_syncs | 0 \n |\n| Binlog_commits | 0 \n |\n| Binlog_group_commits | 0 \n |\n| Binlog_group_commit_trigger_count | 0 \n |\n| Binlog_group_commit_trigger_lock_wait | 0 \n |\n| Binlog_group_commit_trigger_timeout | 0 \n |\n| Binlog_snapshot_file | \n |\n| Binlog_snapshot_position | 0 \n |\n| Binlog_bytes_written | 0 \n |\n| Binlog_cache_disk_use | 0 \n |\n| Binlog_cache_use | 0 \n |\n| Binlog_stmt_cache_disk_use | 0 \n |\n| Binlog_stmt_cache_use | 0 \n |\n| Busy_time | 0.000000 \n |\n| Bytes_received | 432 \n |\n| Bytes_sent | 15183 \n |\n| Com_admin_commands | 1 \n |\n| Com_alter_db | 0 \n |\n| Com_alter_db_upgrade | 0 \n |\n| Com_alter_event | 0 \n |\n| Com_alter_function | 0 \n |\n| Com_alter_procedure | 0 \n |\n| Com_alter_server | 0 \n |\n| Com_alter_table | 0 \n |\n| Com_alter_tablespace | 0 \n |\n| Com_analyze | 0 \n |\n| Com_assign_to_keycache | 0 \n |\n| Com_begin | 0 \n |\n| Com_binlog | 0 \n |\n| Com_call_procedure | 0 \n |\n| Com_change_db | 0 \n |\n| Com_change_master | 0 \n |\n| Com_check | 0 \n |\n| Com_checksum | 0 \n |\n| Com_commit | 0 \n |\n| Com_compound_sql | 0 \n |\n| Com_create_db | 0 \n |\n| Com_create_event | 0 \n |\n| Com_create_function | 0 \n |\n| Com_create_index | 0 \n |\n| Com_create_procedure | 0 \n |\n| Com_create_role | 0 \n |\n| Com_create_server | 0 \n |\n| Com_create_table | 0 \n |\n| Com_create_temporary_table | 0 \n |\n| Com_create_trigger | 0 \n |\n| Com_create_udf | 0 \n |\n| Com_create_user | 0 \n |\n| Com_create_view | 0 \n |\n| Com_dealloc_sql | 0 \n |\n| Com_delete | 0 \n |\n| Com_delete_multi | 0 \n |\n| Com_do | 0 \n |\n| Com_drop_db | 0 \n |\n| Com_drop_event | 0 \n |\n| Com_drop_function | 0 \n |\n| Com_drop_index | 0 \n |\n| Com_drop_procedure | 0 \n |\n| Com_drop_role | 0 \n |\n| Com_drop_server | 0 \n |\n| Com_drop_table | 0 \n |\n| Com_drop_temporary_table | 0 \n |\n| Com_drop_trigger | 0 \n |\n| Com_drop_user | 0 \n |\n| Com_drop_view | 0 \n |\n| Com_empty_query | 0 \n |\n| Com_execute_sql | 0 \n |\n| Com_flush | 0 \n |\n| Com_get_diagnostics | 0 \n |\n| Com_grant | 0 \n |\n| Com_grant_role | 0 \n |\n| Com_ha_close | 0 \n |\n| Com_ha_open | 0 \n |\n| Com_ha_read | 0 \n |\n| Com_help | 0 \n |\n| Com_insert | 0 \n |\n| Com_insert_select | 0 \n |\n| Com_install_plugin | 0 \n |\n| Com_kill | 0 \n |\n| Com_load | 0 \n |\n| Com_lock_tables | 0 \n |\n| Com_optimize | 0 \n |\n| Com_preload_keys | 0 \n |\n| Com_prepare_sql | 0 \n |\n| Com_purge | 0 \n |\n| Com_purge_before_date | 0 \n |\n| Com_release_savepoint | 0 \n |\n| Com_rename_table | 0 \n |\n| Com_rename_user | 0 \n |\n| Com_repair | 0 \n |\n| Com_replace | 0 \n |\n| Com_replace_select | 0 \n |\n| Com_reset | 0 \n |\n| Com_resignal | 0 \n |\n| Com_revoke | 0 \n |\n| Com_revoke_all | 0 \n |\n| Com_revoke_role | 0 \n |\n| Com_rollback | 0 \n |\n| Com_rollback_to_savepoint | 0 \n |\n| Com_savepoint | 0 \n |\n| Com_select | 1 \n |\n| Com_set_option | 0 \n |\n| Com_show_authors | 0 \n |\n| Com_show_binlog_events | 0 \n |\n| Com_show_binlogs | 0 \n |\n| Com_show_charsets | 0 \n |\n| Com_show_collations | 0 \n |\n| Com_show_contributors | 0 \n |\n| Com_show_create_db | 0 \n |\n| Com_show_create_event | 0 \n |\n| Com_show_create_func | 0 \n |\n| Com_show_create_proc | 0 \n |\n| Com_show_create_table | 0 \n |\n| Com_show_create_trigger | 0 \n |\n| Com_show_databases | 0 \n |\n| Com_show_engine_logs | 0 \n |','','https://mariadb.com/kb/en/show-status/');
+update help_topic set description = CONCAT(description, '\n| Com_show_engine_mutex | 0 \n |\n| Com_show_engine_status | 0 \n |\n| Com_show_errors | 0 \n |\n| Com_show_events | 0 \n |\n| Com_show_explain | 0 \n |\n| Com_show_fields | 0 \n |\n| Com_show_function_status | 0 \n |\n| Com_show_generic | 0 \n |\n| Com_show_grants | 0 \n |\n| Com_show_keys | 0 \n |\n| Com_show_master_status | 0 \n |\n| Com_show_open_tables | 0 \n |\n| Com_show_plugins | 0 \n |\n| Com_show_privileges | 0 \n |\n| Com_show_procedure_status | 0 \n |\n| Com_show_processlist | 0 \n |\n| Com_show_profile | 0 \n |\n| Com_show_profiles | 0 \n |\n| Com_show_relaylog_events | 0 \n |\n| Com_show_slave_hosts | 0 \n |\n| Com_show_slave_status | 0 \n |\n| Com_show_status | 2 \n |\n| Com_show_storage_engines | 0 \n |\n| Com_show_table_status | 0 \n |\n| Com_show_tables | 0 \n |\n| Com_show_triggers | 0 \n |\n| Com_show_variables | 0 \n |\n| Com_show_warnings | 0 \n |\n| Com_shutdown | 0 \n |\n| Com_signal | 0 \n |\n| Com_start_all_slaves | 0 \n |\n| Com_start_slave | 0 \n |\n| Com_stmt_close | 0 \n |\n| Com_stmt_execute | 0 \n |\n| Com_stmt_fetch | 0 \n |\n| Com_stmt_prepare | 0 \n |\n| Com_stmt_reprepare | 0 \n |\n| Com_stmt_reset | 0 \n |\n| Com_stmt_send_long_data | 0 \n |\n| Com_stop_all_slaves | 0 \n |\n| Com_stop_slave | 0 \n |\n| Com_truncate | 0 \n |\n| Com_uninstall_plugin | 0 \n |\n| Com_unlock_tables | 0 \n |\n| Com_update | 0 \n |\n| Com_update_multi | 0 \n |\n| Com_xa_commit | 0 \n |\n| Com_xa_end | 0 \n |\n| Com_xa_prepare | 0 \n |\n| Com_xa_recover | 0 \n |\n| Com_xa_rollback | 0 \n |\n| Com_xa_start | 0 \n |\n| Compression | OFF \n |\n| Connection_errors_accept | 0 \n |\n| Connection_errors_internal | 0 \n |\n| Connection_errors_max_connections | 0 \n |\n| Connection_errors_peer_address | 0 \n |\n| Connection_errors_select | 0 \n |\n| Connection_errors_tcpwrap | 0 \n |\n| Connections | 4 \n |\n| Cpu_time | 0.000000 \n |\n| Created_tmp_disk_tables | 0 \n |\n| Created_tmp_files | 6 \n |\n| Created_tmp_tables | 2 \n |\n| Delayed_errors | 0 \n |\n| Delayed_insert_threads | 0 \n |\n| Delayed_writes | 0 \n |\n| Delete_scan | 0 \n |\n| Empty_queries | 0 \n |\n| Executed_events | 0 \n |\n| Executed_triggers | 0 \n |\n| Feature_delay_key_write | 0 \n |\n| Feature_dynamic_columns | 0 \n |\n| Feature_fulltext | 0 \n |\n| Feature_gis | 0 \n |\n| Feature_locale | 0 \n |\n| Feature_subquery | 0 \n |\n| Feature_timezone | 0 \n |\n| Feature_trigger | 0 \n |\n| Feature_xml | 0 \n |\n| Flush_commands | 1 \n |\n| Handler_commit | 1 \n |\n| Handler_delete | 0 \n |\n| Handler_discover | 0 \n |\n| Handler_external_lock | 0 \n |\n| Handler_icp_attempts | 0 \n |\n| Handler_icp_match | 0 \n |\n| Handler_mrr_init | 0 \n |\n| Handler_mrr_key_refills | 0 \n |\n| Handler_mrr_rowid_refills | 0 \n |\n| Handler_prepare | 0 \n |\n| Handler_read_first | 3 \n |\n| Handler_read_key | 0 \n |\n| Handler_read_last | 0 \n |\n| Handler_read_next | 0 \n |\n| Handler_read_prev | 0 \n |\n| Handler_read_retry | 0 \n |\n| Handler_read_rnd | 0 \n |\n| Handler_read_rnd_deleted | 0 \n |\n| Handler_read_rnd_next | 537 \n |\n| Handler_rollback | 0 \n |\n| Handler_savepoint | 0 \n |\n| Handler_savepoint_rollback | 0 \n |\n| Handler_tmp_update | 0 \n |\n| Handler_tmp_write | 516 \n |\n| Handler_update | 0 \n |\n| Handler_write | 0 \n |\n| Innodb_available_undo_logs | 128 \n |\n| Innodb_background_log_sync | 222 \n |\n| Innodb_buffer_pool_bytes_data | 2523136 \n |\n| Innodb_buffer_pool_bytes_dirty | 0 \n |\n| Innodb_buffer_pool_dump_status | Dumping\nbuffer pool(s) not yet started |\n| Innodb_buffer_pool_load_status | Loading\nbuffer pool(s) not yet started |\n| Innodb_buffer_pool_pages_data | 154 \n |\n| Innodb_buffer_pool_pages_dirty | 0 \n |\n| Innodb_buffer_pool_pages_flushed | 1 \n |\n| Innodb_buffer_pool_pages_free | 8037 \n |\n| Innodb_buffer_pool_pages_lru_flushed | 0 \n |\n| Innodb_buffer_pool_pages_made_not_young | 0 \n |\n| Innodb_buffer_pool_pages_made_young | 0 \n |\n| Innodb_buffer_pool_pages_misc | 0 \n |\n| Innodb_buffer_pool_pages_old | 0 \n |\n| Innodb_buffer_pool_pages_total | 8191 \n |\n| Innodb_buffer_pool_read_ahead | 0 \n |\n| Innodb_buffer_pool_read_ahead_evicted | 0 \n |\n| Innodb_buffer_pool_read_ahead_rnd | 0 \n |\n| Innodb_buffer_pool_read_requests | 558 \n |\n| Innodb_buffer_pool_reads | 155 \n |\n| Innodb_buffer_pool_wait_free | 0 \n |\n| Innodb_buffer_pool_write_requests | 1 \n |\n| Innodb_checkpoint_age | 0 \n |\n| Innodb_checkpoint_max_age | 80826164 \n |\n| Innodb_data_fsyncs | 5 \n |\n| Innodb_data_pending_fsyncs | 0 \n |\n| Innodb_data_pending_reads | 0 \n |\n| Innodb_data_pending_writes | 0 \n |\n| Innodb_data_read | 2609664 \n |\n| Innodb_data_reads | 172 \n |\n| Innodb_data_writes | 5 \n |\n| Innodb_data_written | 34304 \n |\n| Innodb_dblwr_pages_written | 1 \n |\n| Innodb_dblwr_writes | 1 \n |\n| Innodb_deadlocks | 0 \n |\n| Innodb_have_atomic_builtins | ON \n |\n| Innodb_history_list_length | 0 \n |\n| Innodb_ibuf_discarded_delete_marks | 0 \n |\n| Innodb_ibuf_discarded_deletes | 0 \n |\n| Innodb_ibuf_discarded_inserts | 0 \n |\n| Innodb_ibuf_free_list | 0 \n |\n| Innodb_ibuf_merged_delete_marks | 0 \n |\n| Innodb_ibuf_merged_deletes | 0 \n |\n| Innodb_ibuf_merged_inserts | 0 \n |\n| Innodb_ibuf_merges | 0 \n |') WHERE help_topic_id = 395;
+update help_topic set description = CONCAT(description, '\n| Innodb_ibuf_segment_size | 2 \n |\n| Innodb_ibuf_size | 1 \n |\n| Innodb_log_waits | 0 \n |\n| Innodb_log_write_requests | 0 \n |\n| Innodb_log_writes | 1 \n |\n| Innodb_lsn_current | 1616829 \n |\n| Innodb_lsn_flushed | 1616829 \n |\n| Innodb_lsn_last_checkpoint | 1616829 \n |\n| Innodb_master_thread_active_loops | 0 \n |\n| Innodb_master_thread_idle_loops | 222 \n |\n| Innodb_max_trx_id | 2308 \n |\n| Innodb_mem_adaptive_hash | 2217568 \n |\n| Innodb_mem_dictionary | 630703 \n |\n| Innodb_mem_total | 140771328 \n |\n| Innodb_mutex_os_waits | 1 \n |\n| Innodb_mutex_spin_rounds | 30 \n |\n| Innodb_mutex_spin_waits | 1 \n |\n| Innodb_oldest_view_low_limit_trx_id | 0 \n |\n| Innodb_os_log_fsyncs | 3 \n |\n| Innodb_os_log_pending_fsyncs | 0 \n |\n| Innodb_os_log_pending_writes | 0 \n |\n| Innodb_os_log_written | 512 \n |\n| Innodb_page_size | 16384 \n |\n| Innodb_pages_created | 0 \n |\n| Innodb_pages_read | 154 \n |\n| Innodb_pages_written | 1 \n |\n| Innodb_purge_trx_id | 0 \n |\n| Innodb_purge_undo_no | 0 \n |\n| Innodb_read_views_memory | 88 \n |\n| Innodb_row_lock_current_waits | 0 \n |\n| Innodb_row_lock_time | 0 \n |\n| Innodb_row_lock_time_avg | 0 \n |\n| Innodb_row_lock_time_max | 0 \n |\n| Innodb_row_lock_waits | 0 \n |\n| Innodb_rows_deleted | 0 \n |\n| Innodb_rows_inserted | 0 \n |\n| Innodb_rows_read | 0 \n |\n| Innodb_rows_updated | 0 \n |\n| Innodb_system_rows_deleted | 0 \n |\n| Innodb_system_rows_inserted | 0 \n |\n| Innodb_system_rows_read | 0 \n |\n| Innodb_system_rows_updated | 0 \n |\n| Innodb_s_lock_os_waits | 2 \n |\n| Innodb_s_lock_spin_rounds | 60 \n |\n| Innodb_s_lock_spin_waits | 2 \n |\n| Innodb_truncated_status_writes | 0 \n |\n| Innodb_x_lock_os_waits | 0 \n |\n| Innodb_x_lock_spin_rounds | 0 \n |\n| Innodb_x_lock_spin_waits | 0 \n |\n| Innodb_page_compression_saved | 0 \n |\n| Innodb_page_compression_trim_sect512 | 0 \n |\n| Innodb_page_compression_trim_sect1024 | 0 \n |\n| Innodb_page_compression_trim_sect2048 | 0 \n |\n| Innodb_page_compression_trim_sect4096 | 0 \n |\n| Innodb_page_compression_trim_sect8192 | 0 \n |\n| Innodb_page_compression_trim_sect16384 | 0 \n |\n| Innodb_page_compression_trim_sect32768 | 0 \n |\n| Innodb_num_index_pages_written | 0 \n |\n| Innodb_num_non_index_pages_written | 5 \n |\n| Innodb_num_pages_page_compressed | 0 \n |\n| Innodb_num_page_compressed_trim_op | 0 \n |\n| Innodb_num_page_compressed_trim_op_saved | 0 \n |\n| Innodb_num_pages_page_decompressed | 0 \n |\n| Innodb_num_pages_page_compression_error | 0 \n |\n| Innodb_num_pages_encrypted | 0 \n |\n| Innodb_num_pages_decrypted | 0 \n |\n| Innodb_have_lz4 | OFF \n |\n| Innodb_have_lzo | OFF \n |\n| Innodb_have_lzma | OFF \n |\n| Innodb_have_bzip2 | OFF \n |\n| Innodb_have_snappy | OFF \n |\n| Innodb_defragment_compression_failures | 0 \n |\n| Innodb_defragment_failures | 0 \n |\n| Innodb_defragment_count | 0 \n |\n| Innodb_onlineddl_rowlog_rows | 0 \n |\n| Innodb_onlineddl_rowlog_pct_used | 0 \n |\n| Innodb_onlineddl_pct_progress | 0 \n |\n| Innodb_secondary_index_triggered_cluster_reads | 0 \n |\n| Innodb_secondary_index_triggered_cluster_reads_avoided | 0 \n |\n| Innodb_encryption_rotation_pages_read_from_cache | 0 \n |\n| Innodb_encryption_rotation_pages_read_from_disk | 0 \n |\n| Innodb_encryption_rotation_pages_modified | 0 \n |\n| Innodb_encryption_rotation_pages_flushed | 0 \n |\n| Innodb_encryption_rotation_estimated_iops | 0 \n |\n| Innodb_scrub_background_page_reorganizations | 0 \n |\n| Innodb_scrub_background_page_splits | 0 \n |\n| Innodb_scrub_background_page_split_failures_underflow | 0 \n |\n| Innodb_scrub_background_page_split_failures_out_of_filespace | 0 \n |\n| Innodb_scrub_background_page_split_failures_missing_index | 0 \n |\n| Innodb_scrub_background_page_split_failures_unknown | 0 \n |\n| Key_blocks_not_flushed | 0 \n |\n| Key_blocks_unused | 107163 \n |\n| Key_blocks_used | 0 \n |\n| Key_blocks_warm | 0 \n |\n| Key_read_requests | 0 \n |\n| Key_reads | 0 \n |\n| Key_write_requests | 0 \n |\n| Key_writes | 0 \n |\n| Last_query_cost | 0.000000 \n |\n| Master_gtid_wait_count | 0 \n |\n| Master_gtid_wait_time | 0 \n |\n| Master_gtid_wait_timeouts | 0 \n |\n| Max_statement_time_exceeded | 0 \n |\n| Max_used_connections | 1 \n |\n| Memory_used | 273614696 \n |\n| Not_flushed_delayed_rows | 0 \n |\n| Open_files | 25 \n |\n| Open_streams | 0 \n |\n| Open_table_definitions | 18 \n |\n| Open_tables | 11 \n |\n| Opened_files | 77 \n |\n| Opened_plugin_libraries | 0 \n |\n| Opened_table_definitions | 18 \n |\n| Opened_tables | 18 \n |\n| Opened_views | 0 \n |\n| Performance_schema_accounts_lost | 0 \n |\n| Performance_schema_cond_classes_lost | 0 \n |\n| Performance_schema_cond_instances_lost | 0 \n |\n| Performance_schema_digest_lost | 0 \n |\n| Performance_schema_file_classes_lost | 0 \n |\n| Performance_schema_file_handles_lost | 0 \n |\n| Performance_schema_file_instances_lost | 0 \n |\n| Performance_schema_hosts_lost | 0 \n |\n| Performance_schema_locker_lost | 0 \n |\n| Performance_schema_mutex_classes_lost | 0 \n |\n| Performance_schema_mutex_instances_lost | 0 \n |\n| Performance_schema_rwlock_classes_lost | 0 \n |\n| Performance_schema_rwlock_instances_lost | 0 \n |\n| Performance_schema_session_connect_attrs_lost | 0 \n |\n| Performance_schema_socket_classes_lost | 0 \n |\n| Performance_schema_socket_instances_lost | 0 \n |\n| Performance_schema_stage_classes_lost | 0 \n |\n| Performance_schema_statement_classes_lost | 0 \n |\n| Performance_schema_table_handles_lost | 0 \n |\n| Performance_schema_table_instances_lost | 0 \n |\n| Performance_schema_thread_classes_lost | 0 \n |\n| Performance_schema_thread_instances_lost | 0 \n |\n| Performance_schema_users_lost | 0 \n |\n| Prepared_stmt_count | 0 \n |\n| Qcache_free_blocks | 1 \n |\n| Qcache_free_memory | 1031336 \n |\n| Qcache_hits | 0 \n |\n| Qcache_inserts | 0 \n |\n| Qcache_lowmem_prunes | 0 \n |\n| Qcache_not_cached | 0 \n |\n| Qcache_queries_in_cache | 0 \n |\n| Qcache_total_blocks | 1 \n |\n| Queries | 4 \n |\n| Questions | 4 \n |\n| Rows_read | 10 \n |\n| Rows_sent | 517 \n |\n| Rows_tmp_read | 516 \n |\n| Rpl_status | AUTH_MASTER \n |') WHERE help_topic_id = 395;
+update help_topic set description = CONCAT(description, '\n| Select_full_join | 0 \n |\n| Select_full_range_join | 0 \n |\n| Select_range | 0 \n |\n| Select_range_check | 0 \n |\n| Select_scan | 2 \n |\n| Slave_connections | 0 \n |\n| Slave_heartbeat_period | 0.000 \n |\n| Slave_open_temp_tables | 0 \n |\n| Slave_received_heartbeats | 0 \n |\n| Slave_retried_transactions | 0 \n |\n| Slave_running | OFF \n |\n| Slave_skipped_errors | 0 \n |\n| Slaves_connected | 0 \n |\n| Slaves_running | 0 \n |\n| Slow_launch_threads | 0 \n |\n| Slow_queries | 0 \n |\n| Sort_merge_passes | 0 \n |\n| Sort_priority_queue_sorts | 0 \n |\n| Sort_range | 0 \n |\n| Sort_rows | 0 \n |\n| Sort_scan | 0 \n |\n| Ssl_accept_renegotiates | 0 \n |\n| Ssl_accepts | 0 \n |\n| Ssl_callback_cache_hits | 0 \n |\n| Ssl_cipher | \n |\n| Ssl_cipher_list | \n |\n| Ssl_client_connects | 0 \n |\n| Ssl_connect_renegotiates | 0 \n |\n| Ssl_ctx_verify_depth | 0 \n |\n| Ssl_ctx_verify_mode | 0 \n |\n| Ssl_default_timeout | 0 \n |\n| Ssl_finished_accepts | 0 \n |\n| Ssl_finished_connects | 0 \n |\n| Ssl_server_not_after | \n |\n| Ssl_server_not_before | \n |\n| Ssl_session_cache_hits | 0 \n |\n| Ssl_session_cache_misses | 0 \n |\n| Ssl_session_cache_mode | NONE \n |\n| Ssl_session_cache_overflows | 0 \n |\n| Ssl_session_cache_size | 0 \n |\n| Ssl_session_cache_timeouts | 0 \n |\n| Ssl_sessions_reused | 0 \n |\n| Ssl_used_session_cache_entries | 0 \n |\n| Ssl_verify_depth | 0 \n |\n| Ssl_verify_mode | 0 \n |\n| Ssl_version | \n |\n| Subquery_cache_hit | 0 \n |\n| Subquery_cache_miss | 0 \n |\n| Syncs | 2 \n |\n| Table_locks_immediate | 21 \n |\n| Table_locks_waited | 0 \n |\n| Tc_log_max_pages_used | 0 \n |\n| Tc_log_page_size | 4096 \n |\n| Tc_log_page_waits | 0 \n |\n| Threadpool_idle_threads | 0 \n |\n| Threadpool_threads | 0 \n |\n| Threads_cached | 0 \n |\n| Threads_connected | 1 \n |\n| Threads_created | 2 \n |\n| Threads_running | 1 \n |\n| Update_scan | 0 \n |\n| Uptime | 223 \n |\n| Uptime_since_flush_status | 223 \n |\n| wsrep_cluster_conf_id |\n18446744073709551615 |\n| wsrep_cluster_size | 0 \n |\n| wsrep_cluster_state_uuid | \n |\n| wsrep_cluster_status | Disconnected \n |\n| wsrep_connected | OFF \n |\n| wsrep_local_bf_aborts | 0 \n |\n| wsrep_local_index |\n18446744073709551615 |\n| wsrep_provider_name | \n |\n| wsrep_provider_vendor | \n |\n| wsrep_provider_version | \n |\n| wsrep_ready | OFF \n |\n| wsrep_thread_count | 0 \n |\n+--------------------------------------------------------------+---------------\n------------------------+\n516 rows in set (0.00 sec)\n\nExample of filtered output:\n\nSHOW STATUS LIKE \'Key%\';\n+------------------------+--------+\n| Variable_name | Value |\n+------------------------+--------+\n| Key_blocks_not_flushed | 0 |\n| Key_blocks_unused | 107163 |\n| Key_blocks_used | 0 |\n| Key_blocks_warm | 0 |\n| Key_read_requests | 0 |\n| Key_reads | 0 |\n| Key_write_requests | 0 |\n| Key_writes | 0 |\n+------------------------+--------+\n8 rows in set (0.00 sec)\n\nURL: https://mariadb.com/kb/en/show-status/') WHERE help_topic_id = 395;
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (396,26,'SHOW TABLE STATUS','Syntax\n------\n\nSHOW TABLE STATUS [{FROM | IN} db_name]\n [LIKE \'pattern\' | WHERE expr]\n\nDescription\n-----------\n\nSHOW TABLE STATUS works like SHOW TABLES, but provides more extensive\ninformation about each non-TEMPORARY table.\n\nThe LIKE clause, if present on its own, indicates which table names to match.\nThe WHERE and LIKE clauses can be given to select rows using more general\nconditions, as discussed in Extended SHOW.\n\nThe following information is returned:\n\n+---------------------------+------------------------------------------------+\n| Column | Description |\n+---------------------------+------------------------------------------------+\n| Name | Table name. |\n+---------------------------+------------------------------------------------+\n| Engine | Table storage engine. |\n+---------------------------+------------------------------------------------+\n| Version | Version number from the table\'s .frm file. |\n+---------------------------+------------------------------------------------+\n| Row_format | Row format (see InnoDB, Aria and MyISAM row |\n| | formats). |\n+---------------------------+------------------------------------------------+\n| Rows | Number of rows in the table. Some engines, |\n| | such as XtraDB and InnoDB may store an |\n| | estimate. |\n+---------------------------+------------------------------------------------+\n| Avg_row_length | Average row length in the table. |\n+---------------------------+------------------------------------------------+\n| Data_length | For InnoDB/XtraDB, the index size, in pages, |\n| | multiplied by the page size. For Aria and |\n| | MyISAM, length of the data file, in bytes. |\n| | For MEMORY, the approximate allocated memory. |\n+---------------------------+------------------------------------------------+\n| Max_data_length | Maximum length of the data file, ie the total |\n| | number of bytes that could be stored in the |\n| | table. Not used in XtraDB and InnoDB. |\n+---------------------------+------------------------------------------------+\n| Index_length | Length of the index file. |\n+---------------------------+------------------------------------------------+\n| Data_free | Bytes allocated but unused. For InnoDB tables |\n| | in a shared tablespace, the free space of the |\n| | shared tablespace with small safety margin. |\n| | An estimate in the case of partitioned tables |\n| | - see the PARTITIONS table. |\n+---------------------------+------------------------------------------------+\n| Auto_increment | Next AUTO_INCREMENT value. |\n+---------------------------+------------------------------------------------+\n| Create_time | Time the table was created. Some engines just |\n| | return the ctime information from the file |\n| | system layer here, in that case the value is |\n| | not necessarily the table creation time but |\n| | rather the time the file system metadata for |\n| | it had last changed. |\n+---------------------------+------------------------------------------------+\n| Update_time | Time the table was last updated. On Windows, |\n| | the timestamp is not updated on update, so |\n| | MyISAM values will be inaccurate. In InnoDB, |\n| | if shared tablespaces are used, will be NULL, |\n| | while buffering can also delay the update, so |\n| | the value will differ from the actual time of |\n| | the last UPDATE, INSERT or DELETE. |\n+---------------------------+------------------------------------------------+\n| Check_time | Time the table was last checked. Not kept by |\n| | all storage engines, in which case will be |\n| | NULL. |\n+---------------------------+------------------------------------------------+\n| Collation | Character set and collation. |\n+---------------------------+------------------------------------------------+\n| Checksum | Live checksum value, if any. |\n+---------------------------+------------------------------------------------+\n| Create_options | Extra CREATE TABLE options. |\n+---------------------------+------------------------------------------------+\n| Comment | Table comment provided when MariaDB created |\n| | the table. |\n+---------------------------+------------------------------------------------+\n| Max_index_length | Maximum index length (supported by MyISAM and |\n| | Aria tables). Added in MariaDB 10.3.5. |\n+---------------------------+------------------------------------------------+\n| Temporary | Placeholder to signal that a table is a |\n| | temporary table. Currently always \"N\", except |\n| | \"Y\" for generated information_schema tables |\n| | and NULL for views. Added in MariaDB 10.3.5. |\n+---------------------------+------------------------------------------------+\n\nSimilar information can be found in the information_schema.TABLES table as\nwell as by using mysqlshow:\n\nmysqlshow --status db_name\n\nViews\n-----\n\nFor views, all columns in SHOW TABLE STATUS are NULL except \'Name\' and\n\'Comment\'\n\nExample\n-------\n\nshow table status\\G\n*************************** 1. row ***************************\n Name: bus_routes\n Engine: InnoDB\n Version: 10\n Row_format: Dynamic\n Rows: 5\n Avg_row_length: 3276\n Data_length: 16384\nMax_data_length: 0\n Index_length: 0\n Data_free: 0\n Auto_increment: NULL\n Create_time: 2017-05-24 11:17:46\n Update_time: NULL\n Check_time: NULL\n Collation: latin1_swedish_ci\n Checksum: NULL\n Create_options: \n Comment:\n\nURL: https://mariadb.com/kb/en/show-table-status/','','https://mariadb.com/kb/en/show-table-status/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (397,26,'SHOW TABLES','Syntax\n------\n\nSHOW [FULL] TABLES [FROM db_name]\n [LIKE \'pattern\' | WHERE expr]\n\nDescription\n-----------\n\nSHOW TABLES lists the non-TEMPORARY tables, sequences and views in a given\ndatabase.\n\nThe LIKE clause, if present on its own, indicates which table names to match.\nThe WHERE and LIKE clauses can be given to select rows using more general\nconditions, as discussed in Extended SHOW. For example, when searching for\ntables in the test database, the column name for use in the WHERE and LIKE\nclauses will be Tables_in_test\n\nThe FULL modifier is supported such that SHOW FULL TABLES displays a second\noutput column. Values for the second column, Table_type, are BASE TABLE for a\ntable, VIEW for a view and SEQUENCE for a sequence.\n\nYou can also get this information using:\n\nmysqlshow db_name\n\nSee mysqlshow for more details.\n\nIf you have no privileges for a base table or view, it does not show up in the\noutput from SHOW TABLES or mysqlshow db_name.\n\nThe information_schema.TABLES table, as well as the SHOW TABLE STATUS\nstatement, provide extended information about tables.\n\nExamples\n--------\n\nSHOW TABLES;\n+----------------------+\n| Tables_in_test |\n+----------------------+\n| animal_count |\n| animals |\n| are_the_mooses_loose |\n| aria_test2 |\n| t1 |\n| view1 |\n+----------------------+\n\nShowing the tables beginning with a only.\n\nSHOW TABLES WHERE Tables_in_test LIKE \'a%\';\n+----------------------+\n| Tables_in_test |\n+----------------------+\n| animal_count |\n| animals |\n| are_the_mooses_loose |\n| aria_test2 |\n+----------------------+\n\nShowing tables and table types:\n\nSHOW FULL TABLES;\n+----------------+------------+\n| Tables_in_test | Table_type |\n+----------------+------------+\n| s1 | SEQUENCE |\n| student | BASE TABLE |\n| v1 | VIEW |\n+----------------+------------+\n\nURL: https://mariadb.com/kb/en/show-tables/','','https://mariadb.com/kb/en/show-tables/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (398,26,'SHOW TABLE_STATISTICS','Syntax\n------\n\nSHOW TABLE_STATISTICS\n\nDescription\n-----------\n\nThe SHOW TABLE_STATISTICS statementis part of the User Statistics feature. It\nwas removed as a separate statement in MariaDB 10.1.1, but effectively\nreplaced by the generic SHOW information_schema_table statement. The\ninformation_schema.TABLE_STATISTICS table shows statistics on table usage\n\nThe userstat system variable must be set to 1 to activate this feature. See\nthe User Statistics and information_schema.TABLE_STATISTICS articles for more\ninformation.\n\nExample\n-------\n\nSHOW TABLE_STATISTICS\\G\n*************************** 1. row ***************************\n Table_schema: mysql\n Table_name: proxies_priv\n Rows_read: 2\n Rows_changed: 0\nRows_changed_x_#indexes: 0\n*************************** 2. row ***************************\n Table_schema: test\n Table_name: employees_example\n Rows_read: 7\n Rows_changed: 0\nRows_changed_x_#indexes: 0\n*************************** 3. row ***************************\n Table_schema: mysql\n Table_name: user\n Rows_read: 16\n Rows_changed: 0\nRows_changed_x_#indexes: 0\n*************************** 4. row ***************************\n Table_schema: mysql\n Table_name: db\n Rows_read: 2\n Rows_changed: 0\nRows_changed_x_#indexes: 0\n\nURL: https://mariadb.com/kb/en/show-table-statistics/','','https://mariadb.com/kb/en/show-table-statistics/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (399,26,'SHOW TRIGGERS','Syntax\n------\n\nSHOW TRIGGERS [FROM db_name]\n [LIKE \'pattern\' | WHERE expr]\n\nDescription\n-----------\n\nSHOW TRIGGERS lists the triggers currently defined for tables in a database\n(the default database unless a FROM clause is given). This statement requires\nthe TRIGGER privilege (prior to MySQL 5.1.22, it required the SUPER privilege).\n\nThe LIKE clause, if present on its own, indicates which table names to match\nand causes the statement to display triggers for those tables. The WHERE and\nLIKE clauses can be given to select rows using more general conditions, as\ndiscussed in Extended SHOW.\n\nSimilar information is stored in the information_schema.TRIGGERS table.\n\nMariaDB starting with 10.2.3\n----------------------------\nIf there are multiple triggers for the same action, then the triggers are\nshown in action order.\n\nExamples\n--------\n\nFor the trigger defined at Trigger Overview:\n\nSHOW triggers Like \'animals\' \\G\n*************************** 1. row ***************************\n Trigger: the_mooses_are_loose\n Event: INSERT\n Table: animals\n Statement: BEGIN\n IF NEW.name = \'Moose\' THEN\n UPDATE animal_count SET animal_count.animals = animal_count.animals+100;\n ELSE \n UPDATE animal_count SET animal_count.animals = animal_count.animals+1;\n END IF;\nEND\n Timing: AFTER\n Created: 2016-09-29 13:53:34.35\n sql_mode:\n Definer: root@localhost\ncharacter_set_client: utf8\ncollation_connection: utf8_general_ci\n Database Collation: latin1_swedish_ci\n\nListing all triggers associated with a certain table:\n\nSHOW TRIGGERS FROM test WHERE `Table` = \'user\' \\G\n*************************** 1. row ***************************\n Trigger: user_ai\n Event: INSERT\n Table: user\n Statement: BEGIN END\n Timing: AFTER\n Created: 2016-09-29 13:53:34.35\n sql_mode:\n Definer: root@%\ncharacter_set_client: utf8\ncollation_connection: utf8_general_ci\n Database Collation: latin1_swedish_ci\n\nSHOW triggers WHERE Event Like \'Insert\' \\G\n*************************** 1. row ***************************\n Trigger: the_mooses_are_loose\n Event: INSERT\n Table: animals\n Statement: BEGIN\n IF NEW.name = \'Moose\' THEN\n UPDATE animal_count SET animal_count.animals = animal_count.animals+100;\n ELSE \n UPDATE animal_count SET animal_count.animals = animal_count.animals+1;\n END IF;\nEND\n Timing: AFTER\n Created: 2016-09-29 13:53:34.35\n sql_mode:\n Definer: root@localhost\ncharacter_set_client: utf8\ncollation_connection: utf8_general_ci\n Database Collation: latin1_swedish_ci\n\n* character_set_client is the session value of the character_set_client system\nvariable when the trigger was created. \n* collation_connection is the session value of the collation_connection system\nvariable when the trigger was\n created. \n* Database Collation is the collation of the database \n with which the trigger is associated.\n\nThese columns were added in MariaDB/MySQL 5.1.21.\n\nOld triggers created before MySQL 5.7 and MariaDB 10.2.3 has NULL in the\nCreated column.\n\nURL: https://mariadb.com/kb/en/show-triggers/','','https://mariadb.com/kb/en/show-triggers/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (400,26,'SHOW USER_STATISTICS','Syntax\n------\n\nSHOW USER_STATISTICS\n\nDescription\n-----------\n\nThe SHOW USER_STATISTICS statement is part of the User Statistics feature. It\nwas removed as a separate statement in MariaDB 10.1.1, but effectively\nreplaced by the generic SHOW information_schema_table statement. The\ninformation_schema.USER_STATISTICS table holds statistics about user activity.\nYou can use this table to find out such things as which user is causing the\nmost load and which users are being abusive. You can also use this table to\nmeasure how close to capacity the server may be.\n\nThe userstat system variable must be set to 1 to activate this feature. See\nthe User Statistics and information_schema.USER_STATISTICS table for more\ninformation.\n\nExample\n-------\n\nSHOW USER_STATISTICS\\G\n*************************** 1. row ***************************\n User: root\n Total_connections: 1\nConcurrent_connections: 0\n Connected_time: 3297\n Busy_time: 0.14113400000000006\n Cpu_time: 0.017637000000000003\n Bytes_received: 969\n Bytes_sent: 22355\n Binlog_bytes_written: 0\n Rows_read: 10\n Rows_sent: 67\n Rows_deleted: 0\n Rows_inserted: 0\n Rows_updated: 0\n Select_commands: 7\n Update_commands: 0\n Other_commands: 0\n Commit_transactions: 1\n Rollback_transactions: 0\n Denied_connections: 0\n Lost_connections: 0\n Access_denied: 0\n Empty_queries: 7\n\nURL: https://mariadb.com/kb/en/show-user-statistics/','','https://mariadb.com/kb/en/show-user-statistics/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (401,26,'SHOW VARIABLES','Syntax\n------\n\nSHOW [GLOBAL | SESSION] VARIABLES\n [LIKE \'pattern\' | WHERE expr]\n\nDescription\n-----------\n\nSHOW VARIABLES shows the values of MariaDB system variables. This information\nalso can be obtained using the mysqladmin variables command. The LIKE clause,\nif present, indicates which variable names to match. The WHERE clause can be\ngiven to select rows using more general conditions.\n\nWith the GLOBAL modifier, SHOW VARIABLES displays the values that are used for\nnew connections to MariaDB. With SESSION, it displays the values that are in\neffect for the current connection. If no modifier is present, the default is\nSESSION. LOCAL is a synonym for SESSION. With a LIKE clause, the statement\ndisplays only rows for those variables with names that match the pattern. To\nobtain the row for a specific variable, use a LIKE clause as shown:\n\nSHOW VARIABLES LIKE \'maria_group_commit\';\nSHOW SESSION VARIABLES LIKE \'maria_group_commit\';\n\nTo get a list of variables whose name match a pattern, use the \"%\" wildcard\ncharacter in a LIKE clause:\n\nSHOW VARIABLES LIKE \'%maria%\';\nSHOW GLOBAL VARIABLES LIKE \'%maria%\';\n\nWildcard characters can be used in any position within the pattern to be\nmatched. Strictly speaking, because \"_\" is a wildcard that matches any single\ncharacter, you should escape it as \"\\_\" to match it literally. In practice,\nthis is rarely necessary.\n\nThe WHERE and LIKE clauses can be given to select rows using more general\nconditions, as discussed in Extended SHOW.\n\nSee SET for information on setting server system variables.\n\nSee Server System Variables for a list of all the variables that can be set.\n\nYou can also see the server variables by querying the Information Schema\nGLOBAL_VARIABLES and SESSION_VARIABLES tables.\n\nExamples\n--------\n\nSHOW VARIABLES LIKE \'aria%\';\n+------------------------------------------+---------------------+\n| Variable_name | Value |\n+------------------------------------------+---------------------+\n| aria_block_size | 8192 |\n| aria_checkpoint_interval | 30 |\n| aria_checkpoint_log_activity | 1048576 |\n| aria_force_start_after_recovery_failures | 0 |\n| aria_group_commit | none |\n| aria_group_commit_interval | 0 |\n| aria_log_file_size | 1073741824 |\n| aria_log_purge_type | immediate |\n| aria_max_sort_file_size | 9223372036853727232 |\n| aria_page_checksum | ON |\n| aria_pagecache_age_threshold | 300 |\n| aria_pagecache_buffer_size | 134217728 |\n| aria_pagecache_division_limit | 100 |\n| aria_recover | NORMAL |\n| aria_repair_threads | 1 |\n| aria_sort_buffer_size | 134217728 |\n| aria_stats_method | nulls_unequal |\n| aria_sync_log_dir | NEWFILE |\n| aria_used_for_temp_tables | ON |\n+------------------------------------------+---------------------+\n\nSELECT VARIABLE_NAME, SESSION_VALUE, GLOBAL_VALUE FROM\n INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE\n VARIABLE_NAME LIKE \'max_error_count\' OR\n VARIABLE_NAME LIKE \'innodb_sync_spin_loops\';\n+---------------------------+---------------+--------------+\n| VARIABLE_NAME | SESSION_VALUE | GLOBAL_VALUE |\n+---------------------------+---------------+--------------+\n| MAX_ERROR_COUNT | 64 | 64 |\n| INNODB_SYNC_SPIN_LOOPS | NULL | 30 |\n+---------------------------+---------------+--------------+\n\nSET GLOBAL max_error_count=128;\n\nSELECT VARIABLE_NAME, SESSION_VALUE, GLOBAL_VALUE FROM\n INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE\n VARIABLE_NAME LIKE \'max_error_count\' OR\n VARIABLE_NAME LIKE \'innodb_sync_spin_loops\';\n+---------------------------+---------------+--------------+\n| VARIABLE_NAME | SESSION_VALUE | GLOBAL_VALUE |\n+---------------------------+---------------+--------------+\n| MAX_ERROR_COUNT | 64 | 128 |\n| INNODB_SYNC_SPIN_LOOPS | NULL | 30 |\n+---------------------------+---------------+--------------+\n\nSET GLOBAL max_error_count=128;\n\nSHOW VARIABLES LIKE \'max_error_count\';\n+-----------------+-------+\n| Variable_name | Value |\n+-----------------+-------+\n| max_error_count | 64 |\n+-----------------+-------+\n\nSHOW GLOBAL VARIABLES LIKE \'max_error_count\';\n+-----------------+-------+\n| Variable_name | Value |\n+-----------------+-------+\n| max_error_count | 128 |\n+-----------------+-------+\n\nBecause the following variable only has a global scope, the global value is\nreturned even when specifying SESSION (in this case by default):\n\nSHOW VARIABLES LIKE \'innodb_sync_spin_loops\';\n+------------------------+-------+\n| Variable_name | Value |\n+------------------------+-------+\n| innodb_sync_spin_loops | 30 |\n+------------------------+-------+\n\nURL: https://mariadb.com/kb/en/show-variables/','','https://mariadb.com/kb/en/show-variables/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (402,26,'SHOW WARNINGS','Syntax\n------\n\nSHOW WARNINGS [LIMIT [offset,] row_count]\nSHOW ERRORS [LIMIT row_count OFFSET offset]\nSHOW COUNT(*) WARNINGS\n\nDescription\n-----------\n\nSHOW WARNINGS shows the error, warning, and note messages that resulted from\nthe last statement that generated messages in the current session. It shows\nnothing if the last statement used a table and generated no messages. (That\nis, a statement that uses a table but generates no messages clears the message\nlist.) Statements that do not use tables and do not generate messages have no\neffect on the message list.\n\nA note is different to a warning in that it only appears if the sql_notes\nvariable is set to 1 (the default), and is not converted to an error if strict\nmode is enabled.\n\nA related statement, SHOW ERRORS, shows only the errors.\n\nThe SHOW COUNT(*) WARNINGS statement displays the total number of errors,\nwarnings, and notes. You can also retrieve this number from the warning_count\nvariable:\n\nSHOW COUNT(*) WARNINGS;\nSELECT @@warning_count;\n\nThe value of warning_count might be greater than the number of messages\ndisplayed by SHOW WARNINGS if the max_error_count system variable is set so\nlow that not all messages are stored.\n\nThe LIMIT clause has the same syntax as for the SELECT statement.\n\nSHOW WARNINGS can be used after EXPLAIN EXTENDED to see how a query is\ninternally rewritten by MariaDB.\n\nIf the sql_notes server variable is set to 1, Notes are included in the output\nof SHOW WARNINGS; if it is set to 0, this statement will not show (or count)\nNotes.\n\nThe results of SHOW WARNINGS and SHOW COUNT(*) WARNINGS are directly sent to\nthe client. If you need to access those information in a stored program, you\ncan use the GET DIAGNOSTICS statement instead.\n\nFor a list of MariaDB error codes, see MariaDB Error Codes.\n\nThe mysql client also has a number of options related to warnings. The \\W\ncommand will show warnings after every statement, while \\w will disable this.\nStarting the client with the --show-warnings option will show warnings after\nevery statement.\n\nMariaDB 10.3.1 implements a stored routine error stack trace. SHOW WARNINGS\ncan also be used to show more information. See the example below.\n\nExamples\n--------\n\nSELECT 1/0;\n+------+\n| 1/0 |\n+------+\n| NULL |\n+------+\n\nSHOW COUNT(*) WARNINGS;\n+-------------------------+\n| @@session.warning_count |\n+-------------------------+\n| 1 |\n+-------------------------+\n\nSHOW WARNINGS;\n+---------+------+---------------+\n| Level | Code | Message |\n+---------+------+---------------+\n| Warning | 1365 | Division by 0 |\n+---------+------+---------------+\n\nStack Trace\n-----------\n\nFrom MariaDB 10.3.1, displaying a stack trace:\n\nDELIMITER $$\nCREATE OR REPLACE PROCEDURE p1()\n BEGIN\n DECLARE c CURSOR FOR SELECT * FROM not_existing;\n OPEN c;\n CLOSE c;\n END;\n$$\nCREATE OR REPLACE PROCEDURE p2()\n BEGIN\n CALL p1;\n END;\n$$\nDELIMITER ;\nCALL p2;\nERROR 1146 (42S02): Table \'test.not_existing\' doesn\'t exist\n\nSHOW WARNINGS;\n+-------+------+-----------------------------------------+\n| Level | Code | Message |\n+-------+------+-----------------------------------------+\n| Error | 1146 | Table \'test.not_existing\' doesn\'t exist |\n| Note | 4091 | At line 6 in test.p1 |\n| Note | 4091 | At line 4 in test.p2 |\n+-------+------+-----------------------------------------+\n\nSHOW WARNINGS displays a stack trace, showing where the error actually\nhappened:\n\n* Line 4 in test.p1 is the OPEN command which actually raised the error\n* Line 3 in test.p2 is the CALL statement, calling p1 from p2.\n\nURL: https://mariadb.com/kb/en/show-warnings/','','https://mariadb.com/kb/en/show-warnings/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (403,26,'SHOW WSREP_MEMBERSHIP','SHOW WSREP_MEMBERSHIP is part of the WSREP_INFO plugin.\n\nSyntax\n------\n\nSHOW WSREP_MEMBERSHIP\n\nDescription\n-----------\n\nThe SHOW WSREP_MEMBERSHIP statement returns Galera node cluster membership\ninformation. It returns the same information as found in the\ninformation_schema.WSREP_MEMBERSHIP table. Only users with the SUPER privilege\ncan access this information.\n\nExamples\n--------\n\nSHOW WSREP_MEMBERSHIP;\n+-------+--------------------------------------+----------+-----------------+\n| Index | Uuid | Name | Address |\n+-------+--------------------------------------+----------+-----------------+\n| 0 | 19058073-8940-11e4-8570-16af7bf8fced | my_node1 | 10.0.2.15:16001 |\n| 1 | 19f2b0e0-8942-11e4-9cb8-b39e8ee0b5dd | my_node3 | 10.0.2.15:16003 |\n| 2 | d85e62db-8941-11e4-b1ef-4bc9980e476d | my_node2 | 10.0.2.15:16002 |\n+-------+--------------------------------------+----------+-----------------+\n\nURL: https://mariadb.com/kb/en/show-wsrep_membership/','','https://mariadb.com/kb/en/show-wsrep_membership/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (404,26,'SHOW WSREP_STATUS','SHOW WSREP_STATUS is part of the WSREP_INFO plugin.\n\nSyntax\n------\n\nSHOW WSREP_STATUS\n\nDescription\n-----------\n\nThe SHOW WSREP_STATUS statement returns Galera node and cluster status\ninformation. It returns the same information as found in the\ninformation_schema.WSREP_STATUS table. Only users with the SUPER privilege can\naccess this information.\n\nExamples\n--------\n\nSHOW WSREP_STATUS;\n+------------+-------------+----------------+--------------+\n| Node_Index | Node_Status | Cluster_Status | Cluster_Size |\n+------------+-------------+----------------+--------------+\n| 0 | Synced | Primary | 3 |\n+------------+-------------+----------------+--------------+\n\nURL: https://mariadb.com/kb/en/show-wsrep_status/','','https://mariadb.com/kb/en/show-wsrep_status/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (405,26,'BINLOG','Syntax\n------\n\nBINLOG \'str\'\n\nDescription\n-----------\n\nBINLOG is an internal-use statement. It is generated by the\nmariadb-binlog/mysqlbinlog program as the printable representation of certain\nevents in binary log files. The \'str\' value is a base 64-encoded string the\nthat server decodes to determine the data change indicated by the\ncorresponding event. This statement requires the SUPER privilege (<= MariaDB\n10.5.1) or theBINLOG REPLAY privilege (>= MariaDB 10.5.2).\n\nURL: https://mariadb.com/kb/en/binlog/','','https://mariadb.com/kb/en/binlog/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (406,26,'PURGE BINARY LOGS','Syntax\n------\n\nPURGE { BINARY | MASTER } LOGS\n { TO \'log_name\' | BEFORE datetime_expr }\n\nDescription\n-----------\n\nThe PURGE BINARY LOGS statement deletes all the binary log files listed in the\nlog index file prior to the specified log file name or date. BINARY and MASTER\nare synonyms. Deleted log files also are removed from the list recorded in the\nindex file, so that the given log file becomes the first in the list.\n\nThe datetime expression is in the format \'YYYY-MM-DD hh:mm:ss\'.\n\nIf a replica is active but has yet to read from a binary log file you attempt\nto delete, the statement will fail with an error. However, if the replica is\nnot connected and has yet to read from a log file you delete, the file will be\ndeleted, but the replica will be unable to continue replicating once it\nconnects again.\n\nThis statement has no effect if the server was not started with the --log-bin\noption to enable binary logging.\n\nTo list the binary log files on the server, use SHOW BINARY LOGS. To see which\nfiles they are reading, use SHOW SLAVE STATUS (or SHOW REPLICA STATUS from\nMariaDB 10.5.1). You can only delete the files that are older than the oldest\nfile that is used by the slaves.\n\nTo delete all binary log files, use RESET MASTER. To move to a new log file\n(for example if you want to remove the current log file), use FLUSH LOGS\nbefore you execute PURGE LOGS.\n\nIf the expire_logs_days server system variable is not set to 0, the server\nautomatically deletes binary log files after the given number of days. From\nMariaDB 10.6, the binlog_expire_logs_seconds variable allows more precise\ncontrol over binlog deletion, and takes precedence if both are non-zero.\n\nRequires the SUPER privilege or, from MariaDB 10.5.2, the BINLOG ADMIN\nprivilege, to run.\n\nExamples\n--------\n\nPURGE BINARY LOGS TO \'mariadb-bin.000063\';\n\nPURGE BINARY LOGS BEFORE \'2013-04-21\';\n\nPURGE BINARY LOGS BEFORE \'2013-04-22 09:55:22\';\n\nURL: https://mariadb.com/kb/en/purge-binary-logs/','','https://mariadb.com/kb/en/purge-binary-logs/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (407,26,'CACHE INDEX','Syntax\n------\n\nCACHE INDEX \n tbl_index_list [, tbl_index_list] ...\n IN key_cache_name\n\ntbl_index_list:\n tbl_name [[INDEX|KEY] (index_name[, index_name] ...)]\n\nDescription\n-----------\n\nThe CACHE INDEX statement assigns table indexes to a specific key cache. It is\nused only for MyISAM tables.\n\nA default key cache exists and cannot be destroyed. To create more key caches,\nthe key_buffer_size server system variable.\n\nThe associations between tables indexes and key caches are lost on server\nrestart. To recreate them automatically, it is necessary to configure caches\nin a configuration file and include some CACHE INDEX (and optionally LOAD\nINDEX) statements in the init file.\n\nExamples\n--------\n\nThe following statement assigns indexes from the tables t1, t2, and t3 to the\nkey cache named hot_cache:\n\nCACHE INDEX t1, t2, t3 IN hot_cache;\n+---------+--------------------+----------+----------+\n| Table | Op | Msg_type | Msg_text |\n+---------+--------------------+----------+----------+\n| test.t1 | assign_to_keycache | status | OK |\n| test.t2 | assign_to_keycache | status | OK |\n| test.t3 | assign_to_keycache | status | OK |\n+---------+--------------------+----------+----------+\n\nImplementation (for MyISAM)\n---------------------------\n\nNormally CACHE INDEX should not take a long time to execute. Internally it\'s\nimplemented the following way:\n\n* Find the right key cache (under LOCK_global_system_variables)\n* Open the table with a TL_READ_NO_INSERT lock.\n* Flush the original key cache for the given file (under key cache lock)\n* Flush the new key cache for the given file (safety)\n* Move the file to the new key cache (under file share lock)\n\nThe only possible long operations are getting the locks for the table and\nflushing the original key cache, if there were many key blocks for the file in\nit.\n\nWe plan to also add CACHE INDEX for Aria tables if there is a need for this.\n\nURL: https://mariadb.com/kb/en/cache-index/','','https://mariadb.com/kb/en/cache-index/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (408,26,'HELP Command','Syntax\n------\n\nHELP search_string\n\nDescription\n-----------\n\nThe HELP command can be used in any MariaDB client, such as the mysql\ncommand-line client, to get basic syntax help and a short description for most\ncommands and functions.\n\nIf you provide an argument to the HELP command, the mysql client uses it as a\nsearch string to access server-side help. The proper operation of this command\nrequires that the help tables in the mysql database be initialized with help\ntopic information.\n\nIf there is no match for the search string, the search fails. Use HELP\ncontents to see a list of the help categories:\n\nHELP contents\nYou asked for help about help category: \"Contents\"\nFor more information, type \'help <item>\', where <item> is one of the following\ncategories:\n Account Management\n Administration\n Compound Statements\n Data Definition\n Data Manipulation\n Data Types\n Functions\n Functions and Modifiers for Use with GROUP BY\n Geographic Features\n Help Metadata\n Language Structure\n Plugins\n Procedures\n Sequences\n Table Maintenance\n Transactions\n User-Defined Functions\n Utility\n\nIf a search string matches multiple items, MariaDB shows a list of matching\ntopics:\n\nHELP drop\nMany help items for your request exist.\nTo make a more specific request, please type \'help <item>\',\nwhere <item> is one of the following\ntopics:\n ALTER TABLE\n DROP DATABASE\n DROP EVENT\n DROP FUNCTION\n DROP FUNCTION UDF\n DROP INDEX\n DROP PACKAGE\n DROP PACKAGE BODY\n DROP PROCEDURE\n DROP ROLE\n DROP SEQUENCE\n DROP SERVER\n DROP TABLE\n DROP TRIGGER\n DROP USER\n DROP VIEW\n\nThen you can enter a topic as the search string to see the help entry for that\ntopic.\n\nThe help is provided with the MariaDB server and makes use of four help tables\nfound in the mysql database: help_relation, help_topic, help_category and\nhelp_keyword. These tables are populated by the mysql_install_db or\nfill_help_table.sql scripts which, until MariaDB 10.4.7, contain data\ngenerated from an old version of MySQL.\n\nURL: https://mariadb.com/kb/en/help-command/','','https://mariadb.com/kb/en/help-command/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (409,26,'KILL [CONNECTION | QUERY]','Syntax\n------\n\nKILL [HARD | SOFT] { {CONNECTION|QUERY} thread_id | QUERY ID query_id | USER\nuser_name }\n\nDescription\n-----------\n\nEach connection to mysqld runs in a separate thread. You can see which threads\nare running with the SHOW PROCESSLIST statement and kill a thread with the\nKILL thread_id statement. KILL allows the optional CONNECTION or QUERY\nmodifier:\n\n* KILL CONNECTION is the same as KILL with no\n modifier: It terminates the connection associated with the given thread or\nquery id.\n* KILL QUERY terminates the statement that the connection thread_id is\n currently executing, but leaves the connection itself intact.\n* KILL QUERY ID terminates the query by query_id, leaving the connection\nintact.\n\nIf a connection is terminated that has an active transaction, the transaction\nwill be rolled back. If only a query is killed, the current transaction will\nstay active. See also idle_transaction_timeout.\n\nIf you have the PROCESS privilege, you can see all threads. If you have the\nSUPER privilege, or, from MariaDB 10.5.2, the CONNECTION ADMIN privilege, you\ncan kill all threads and statements. Otherwise, you can see and kill only your\nown threads and statements.\n\nKilling queries that repair or create indexes on MyISAM and Aria tables may\nresult in corrupted tables. Use the SOFT option to avoid this!\n\nThe HARD option (default) kills a command as soon as possible. If you use\nSOFT, then critical operations that may leave a table in an inconsistent state\nwill not be interrupted. Such operations include REPAIR and INDEX creation for\nMyISAM and Aria tables (REPAIR TABLE, OPTIMIZE TABLE).\n\nKILL ... USER username will kill all connections/queries for a given user.\nUSER can be specified one of the following ways:\n\n* username (Kill without regard to hostname)\n* username@hostname\n* CURRENT_USER or CURRENT_USER()\n\nIf you specify a thread id and that thread does not exist, you get the\nfollowing error:\n\nERROR 1094 (HY000): Unknown thread id: <thread_id>\n\nIf you specify a query id that doesn\'t exist, you get the following error:\n\nERROR 1957 (HY000): Unknown query id: <query_id>\n\nHowever, if you specify a user name, no error is issued for non-connected (or\neven non-existing) users. To check if the connection/query has been killed,\nyou can use the ROW_COUNT() function.\n\nA client whose connection is killed receives the following error:\n\nERROR 1317 (70100): Query execution was interrupted\n\nTo obtain a list of existing sessions, use the SHOW PROCESSLIST statement or\nquery the Information Schema PROCESSLIST table.\n\nNote: You cannot use KILL with the Embedded MySQL Server library because the\nembedded server merely runs inside the threads of the host application. It\ndoes not create any connection threads of its own.\n\nNote: You can also use mysqladmin kill thread_id [,thread_id...] to kill\nconnections. To get a list of running queries, use mysqladmin processlist. See\nmysqladmin.\n\nPercona Toolkit contains a program, pt-kill that can be used to automatically\nkill connections that match certain criteria. For example, it can be used to\nterminate idle connections, or connections that have been busy for more than\n60 seconds.\n\nURL: https://mariadb.com/kb/en/kill/','','https://mariadb.com/kb/en/kill/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (410,26,'LOAD INDEX','Syntax\n------\n\nLOAD INDEX INTO CACHE\n tbl_index_list [, tbl_index_list] ...\n\ntbl_index_list:\n tbl_name\n [[INDEX|KEY] (index_name[, index_name] ...)]\n [IGNORE LEAVES]\n\nDescription\n-----------\n\nThe LOAD INDEX INTO CACHE statement preloads a table index into the key cache\nto which it has been assigned by an explicit CACHE INDEX statement, or into\nthe default key cache otherwise. LOAD INDEX INTO CACHE is used only for MyISAM\nor Aria tables.\n\nThe IGNORE LEAVES modifier causes only blocks for the nonleaf nodes of the\nindex to be preloaded.\n\nURL: https://mariadb.com/kb/en/load-index/','','https://mariadb.com/kb/en/load-index/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (411,26,'RESET','Syntax\n------\n\nRESET reset_option [, reset_option] ...\n\nDescription\n-----------\n\nThe RESET statement is used to clear the state of various server operations.\nYou must have the RELOAD privilege to execute RESET.\n\nRESET acts as a stronger version of the FLUSH statement.\n\nThe different RESET options are:\n\n+---------------------------+------------------------------------------------+\n| Option | Description |\n+---------------------------+------------------------------------------------+\n| SLAVE | Deletes all relay logs from the slave and |\n| [\"connection_name\"] [ALL] | reset the replication position in the master |\n| | binary log. |\n+---------------------------+------------------------------------------------+\n| MASTER | Deletes all old binary logs, makes the binary |\n| | index file (--log-bin-index) empty and |\n| | creates a new binary log file. This is |\n| | useful when you want to reset the master to |\n| | an initial state. If you want to just delete |\n| | old, not used binary logs, you should use the |\n| | PURGE BINARY LOGS command. |\n+---------------------------+------------------------------------------------+\n| QUERY CACHE | Removes all queries from the query cache. See |\n| | also FLUSH QUERY CACHE. |\n+---------------------------+------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/reset/','','https://mariadb.com/kb/en/reset/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (412,26,'SHUTDOWN','Syntax\n------\n\nSHUTDOWN [WAIT FOR ALL { SLAVES | REPLICAS } ]\n\nDescription\n-----------\n\nThe SHUTDOWN command shuts the server down.\n\nWAIT FOR ALL SLAVES\n-------------------\n\nMariaDB starting with 10.4.4\n----------------------------\nThe WAIT FOR ALL SLAVES option was first added in MariaDB 10.4.4. WAIT FOR ALL\nREPLICAS has been a synonym since MariaDB 10.5.1.\n\nWhen a master server is shutdown and it goes through the normal shutdown\nprocess, the master kills client threads in random order. By default, the\nmaster also considers its binary log dump threads to be regular client\nthreads. As a consequence, the binary log dump threads can be killed while\nclient threads still exist, and this means that data can be written on the\nmaster during a normal shutdown that won\'t be replicated. This is true even if\nsemi-synchronous replication is being used.\n\nIn MariaDB 10.4 and later, this problem can be solved by shutting down the\nserver with the SHUTDOWN command and by providing the WAIT FOR ALL SLAVES\noption to the command. For example:\n\nSHUTDOWN WAIT FOR ALL SLAVES;\n\nWhen the WAIT FOR ALL SLAVES option is provided, the server only kills its\nbinary log dump threads after all client threads have been killed, and it only\ncompletes the shutdown after the last binary log has been sent to all\nconnected replicas.\n\nSee Replication Threads: Binary Log Dump Threads and the Shutdown Process for\nmore information.\n\nRequired Permissions\n--------------------\n\nOne must have a SHUTDOWN privilege (see GRANT) to use this command. It is the\nsame privilege one needs to use the mariadb-admin/mysqladmin shutdown command.\n\nShutdown for Upgrades\n---------------------\n\nIf you are doing a shutdown to migrate to another major version of MariaDB,\nplease ensure that the innodb_fast_shutdown variable is not 2 (fast crash\nshutdown). The default of this variable is 1.\n\nExample\n-------\n\nThe following example shows how to create an event which turns off the server\nat a certain time:\n\nCREATE EVENT `test`.`shutd`\n ON SCHEDULE\n EVERY 1 DAY\n STARTS \'2014-01-01 20:00:00\'\n COMMENT \'Shutdown Maria when the office is closed\'\nDO BEGIN\n SHUTDOWN;\nEND;\n\nOther Ways to Stop mysqld\n-------------------------\n\nYou can use the mariadb-admin/mysqladmin shutdown command to take down mysqld\ncleanly.\n\nYou can also use the system kill command on Unix with signal SIGTERM (15)\n\nkill -SIGTERM pid-of-mysqld-process\n\nYou can find the process number of the server process in the file that ends\nwith .pid in your data directory.\n\nThe above is identical to mysqladmin shutdown.\n\nOn windows you should use:\n\nNET STOP MySQL\n\nURL: https://mariadb.com/kb/en/shutdown/','','https://mariadb.com/kb/en/shutdown/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (413,26,'USE','Syntax\n------\n\nUSE db_name\n\nDescription\n-----------\n\nThe \'USE db_name\' statement tells MariaDB to use the db_name database as the\ndefault (current) database for subsequent statements. The database remains the\ndefault until the end of the session or another USE statement is issued:\n\nUSE db1;\nSELECT COUNT(*) FROM mytable; # selects from db1.mytable\nUSE db2;\nSELECT COUNT(*) FROM mytable; # selects from db2.mytable\n\nThe DATABASE() function (SCHEMA() is a synonym) returns the default database.\n\nAnother way to set the default database is specifying its name at mysql\ncommand line client startup.\n\nURL: https://mariadb.com/kb/en/use/','','https://mariadb.com/kb/en/use/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (414,26,'SHOW FUNCTION CODE','Syntax\n------\n\nSHOW FUNCTION CODE func_name\n\nDescription\n-----------\n\nSHOW FUNCTION CODE shows a representation of the internal implementation of\nthe stored function.\n\nIt is similar to SHOW PROCEDURE CODE but for stored functions.\n\nURL: https://mariadb.com/kb/en/show-function-code/','','https://mariadb.com/kb/en/show-function-code/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (415,26,'SHOW COLLATION','Syntax\n------\n\nSHOW COLLATION\n [LIKE \'pattern\' | WHERE expr]\n\nDescription\n-----------\n\nThe output from SHOW COLLATION includes all available collations. The LIKE\nclause, if present on its own, indicates which collation names to match. The\nWHERE and LIKE clauses can be given to select rows using more general\nconditions, as discussed in Extended SHOW.\n\nThe same information can be queried from the Information Schema COLLATIONS\ntable.\n\nSee Setting Character Sets and Collations for details on specifying the\ncollation at the server, database, table and column levels.\n\nExamples\n--------\n\nSHOW COLLATION LIKE \'latin1%\';\n+-------------------+---------+----+---------+----------+---------+\n| Collation | Charset | Id | Default | Compiled | Sortlen |\n+-------------------+---------+----+---------+----------+---------+\n| latin1_german1_ci | latin1 | 5 | | Yes | 1 |\n| latin1_swedish_ci | latin1 | 8 | Yes | Yes | 1 |\n| latin1_danish_ci | latin1 | 15 | | Yes | 1 |\n| latin1_german2_ci | latin1 | 31 | | Yes | 2 |\n| latin1_bin | latin1 | 47 | | Yes | 1 |\n| latin1_general_ci | latin1 | 48 | | Yes | 1 |\n| latin1_general_cs | latin1 | 49 | | Yes | 1 |\n| latin1_spanish_ci | latin1 | 94 | | Yes | 1 |\n+-------------------+---------+----+---------+----------+---------+\n\nSHOW COLLATION WHERE Sortlen LIKE \'8\' AND Charset LIKE \'utf8\';\n+--------------------+---------+-----+---------+----------+---------+\n| Collation | Charset | Id | Default | Compiled | Sortlen |\n+--------------------+---------+-----+---------+----------+---------+\n| utf8_unicode_ci | utf8 | 192 | | Yes | 8 |\n| utf8_icelandic_ci | utf8 | 193 | | Yes | 8 |\n| utf8_latvian_ci | utf8 | 194 | | Yes | 8 |\n| utf8_romanian_ci | utf8 | 195 | | Yes | 8 |\n| utf8_slovenian_ci | utf8 | 196 | | Yes | 8 |\n| utf8_polish_ci | utf8 | 197 | | Yes | 8 |\n| utf8_estonian_ci | utf8 | 198 | | Yes | 8 |\n| utf8_spanish_ci | utf8 | 199 | | Yes | 8 |\n| utf8_swedish_ci | utf8 | 200 | | Yes | 8 |\n| utf8_turkish_ci | utf8 | 201 | | Yes | 8 |\n| utf8_czech_ci | utf8 | 202 | | Yes | 8 |\n| utf8_danish_ci | utf8 | 203 | | Yes | 8 |\n| utf8_lithuanian_ci | utf8 | 204 | | Yes | 8 |\n| utf8_slovak_ci | utf8 | 205 | | Yes | 8 |\n| utf8_spanish2_ci | utf8 | 206 | | Yes | 8 |\n| utf8_roman_ci | utf8 | 207 | | Yes | 8 |\n| utf8_persian_ci | utf8 | 208 | | Yes | 8 |\n| utf8_esperanto_ci | utf8 | 209 | | Yes | 8 |\n| utf8_hungarian_ci | utf8 | 210 | | Yes | 8 |\n| utf8_sinhala_ci | utf8 | 211 | | Yes | 8 |\n| utf8_croatian_ci | utf8 | 213 | | Yes | 8 |\n+--------------------+---------+-----+---------+----------+---------+\n\nURL: https://mariadb.com/kb/en/show-collation/','','https://mariadb.com/kb/en/show-collation/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (416,27,'DELETE','Syntax\n------\n\nSingle-table syntax:\n\nDELETE [LOW_PRIORITY] [QUICK] [IGNORE] \n FROM tbl_name [PARTITION (partition_list)]\n [FOR PORTION OF period FROM expr1 TO expr2]\n [WHERE where_condition]\n [ORDER BY ...]\n [LIMIT row_count]\n [RETURNING select_expr\n [, select_expr ...]]\n\nMultiple-table syntax:\n\nDELETE [LOW_PRIORITY] [QUICK] [IGNORE]\n tbl_name[.*] [, tbl_name[.*]] ...\n FROM table_references\n [WHERE where_condition]\n\nOr:\n\nDELETE [LOW_PRIORITY] [QUICK] [IGNORE]\n FROM tbl_name[.*] [, tbl_name[.*]] ...\n USING table_references\n [WHERE where_condition]\n\nTrimming history:\n\nDELETE HISTORY\n FROM tbl_name [PARTITION (partition_list)]\n [BEFORE SYSTEM_TIME [TIMESTAMP|TRANSACTION] expression]\n\nDescription\n-----------\n\n+---------------------------+------------------------------------------------+\n| Option | Description |\n+---------------------------+------------------------------------------------+\n| LOW_PRIORITY | Wait until all SELECT\'s are done before |\n| | starting the statement. Used with storage |\n| | engines that uses table locking (MyISAM, Aria |\n| | etc). See HIGH_PRIORITY and LOW_PRIORITY |\n| | clauses for details. |\n+---------------------------+------------------------------------------------+\n| QUICK | Signal the storage engine that it should |\n| | expect that a lot of rows are deleted. The |\n| | storage engine engine can do things to speed |\n| | up the DELETE like ignoring merging of data |\n| | blocks until all rows are deleted from the |\n| | block (instead of when a block is half full). |\n| | This speeds up things at the expanse of lost |\n| | space in data blocks. At least MyISAM and |\n| | Aria support this feature. |\n+---------------------------+------------------------------------------------+\n| IGNORE | Don\'t stop the query even if a not-critical |\n| | error occurs (like data overflow). See How |\n| | IGNORE works for a full description. |\n+---------------------------+------------------------------------------------+\n\nFor the single-table syntax, the DELETE statement deletes rows from tbl_name\nand returns a count of the number of deleted rows. This count can be obtained\nby calling the ROW_COUNT() function. The WHERE clause, if given, specifies the\nconditions that identify which rows to delete. With no WHERE clause, all rows\nare deleted. If the ORDER BY clause is specified, the rows are deleted in the\norder that is specified. The LIMIT clause places a limit on the number of rows\nthat can be deleted.\n\nFor the multiple-table syntax, DELETE deletes from each tbl_name the rows that\nsatisfy the conditions. In this case, ORDER BY and LIMIT> cannot be used. A\nDELETE can also reference tables which are located in different databases; see\nIdentifier Qualifiers for the syntax.\n\nwhere_condition is an expression that evaluates to true for each row to be\ndeleted. It is specified as described in SELECT.\n\nCurrently, you cannot delete from a table and select from the same table in a\nsubquery.\n\nYou need the DELETE privilege on a table to delete rows from it. You need only\nthe SELECT privilege for any columns that are only read, such as those named\nin the WHERE clause. See GRANT.\n\nAs stated, a DELETE statement with no WHERE clause deletes all rows. A faster\nway to do this, when you do not need to know the number of deleted rows, is to\nuse TRUNCATE TABLE. However, within a transaction or if you have a lock on the\ntable, TRUNCATE TABLE cannot be used whereas DELETE can. See TRUNCATE TABLE,\nand LOCK.\n\nPARTITION\n---------\n\nSee Partition Pruning and Selection for details.\n\nFOR PORTION OF\n--------------\n\nMariaDB starting with 10.4.3\n----------------------------\nSee Application Time Periods - Deletion by Portion.\n\nRETURNING\n---------\n\nIt is possible to return a resultset of the deleted rows for a single table to\nthe client by using the syntax DELETE ... RETURNING select_expr [,\nselect_expr2 ...]]\n\nAny of SQL expression that can be calculated from a single row fields is\nallowed. Subqueries are allowed. The AS keyword is allowed, so it is possible\nto use aliases.\n\nThe use of aggregate functions is not allowed. RETURNING cannot be used in\nmulti-table DELETEs.\n\nMariaDB starting with 10.3.1\n----------------------------\n\nSame Source and Target Table\n----------------------------\n\nUntil MariaDB 10.3.1, deleting from a table with the same source and target\nwas not possible. From MariaDB 10.3.1, this is now possible. For example:\n\nDELETE FROM t1 WHERE c1 IN (SELECT b.c1 FROM t1 b WHERE b.c2=0);\n\nMariaDB starting with 10.3.4\n----------------------------\n\nDELETE HISTORY\n--------------\n\nOne can use DELETE HISTORY to delete historical information from\nSystem-versioned tables.\n\nExamples\n--------\n\nHow to use the ORDER BY and LIMIT clauses:\n\nDELETE FROM page_hit ORDER BY timestamp LIMIT 1000000;\n\nHow to use the RETURNING clause:\n\nDELETE FROM t RETURNING f1;\n+------+\n| f1 |\n+------+\n| 5 |\n| 50 |\n| 500 |\n+------+\n\nThe following statement joins two tables: one is only used to satisfy a WHERE\ncondition, but no row is deleted from it; rows from the other table are\ndeleted, instead.\n\nDELETE post FROM blog INNER JOIN post WHERE blog.id = post.blog_id;\n\nDeleting from the Same Source and Target\n----------------------------------------\n\nCREATE TABLE t1 (c1 INT, c2 INT);\nDELETE FROM t1 WHERE c1 IN (SELECT b.c1 FROM t1 b WHERE b.c2=0);\n\nUntil MariaDB 10.3.1, this returned:\n\nERROR 1093 (HY000): Table \'t1\' is specified twice, both as a target for\n\'DELETE\' \n and as a separate source for\n\nFrom MariaDB 10.3.1:\n\nQuery OK, 0 rows affected (0.00 sec)\n\nURL: https://mariadb.com/kb/en/delete/','','https://mariadb.com/kb/en/delete/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (417,27,'REPLACE','Syntax\n------\n\nREPLACE [LOW_PRIORITY | DELAYED]\n [INTO] tbl_name [PARTITION (partition_list)] [(col,...)]\n {VALUES | VALUE} ({expr | DEFAULT},...),(...),...\n[RETURNING select_expr \n [, select_expr ...]]\n\nOr:\n\nREPLACE [LOW_PRIORITY | DELAYED]\n [INTO] tbl_name [PARTITION (partition_list)]\n SET col={expr | DEFAULT}, ...\n[RETURNING select_expr \n [, select_expr ...]]\n\nOr:\n\nREPLACE [LOW_PRIORITY | DELAYED]\n [INTO] tbl_name [PARTITION (partition_list)] [(col,...)]\n SELECT ...\n[RETURNING select_expr \n [, select_expr ...]]\n\nDescription\n-----------\n\nREPLACE works exactly like INSERT, except that if an old row in the table has\nthe same value as a new row for a PRIMARY KEY or a UNIQUE index, the old row\nis deleted before the new row is inserted. If the table has more than one\nUNIQUE keys, it is possible that the new row conflicts with more than one row.\nIn this case, all conflicting rows will be deleted.\n\nThe table name can be specified in the form db_name.tbl_name or, if a default\ndatabase is selected, in the form tbl_name (see Identifier Qualifiers). This\nallows to use REPLACE ... SELECT to copy rows between different databases.\n\nMariaDB starting with 10.5.0\n----------------------------\nThe RETURNING clause was introduced in MariaDB 10.5.0\n\nBasically it works like this:\n\nBEGIN;\nSELECT 1 FROM t1 WHERE key=# FOR UPDATE;\nIF found-row\n DELETE FROM t1 WHERE key=# ;\nENDIF\nINSERT INTO t1 VALUES (...);\nEND;\n\nThe above can be replaced with:\n\nREPLACE INTO t1 VALUES (...)\n\nREPLACE is a MariaDB/MySQL extension to the SQL standard. It either inserts,\nor deletes and inserts. For other MariaDB/MySQL extensions to standard SQL ---\nthat also handle duplicate values --- see IGNORE and INSERT ON DUPLICATE KEY\nUPDATE.\n\nNote that unless the table has a PRIMARY KEY or UNIQUE index, using a REPLACE\nstatement makes no sense. It becomes equivalent to INSERT, because there is no\nindex to be used to determine whether a new row duplicates another.\n\nValues for all columns are taken from the values sSee Partition Pruning and\nSelection for details.pecified in the REPLACE statement. Any missing columns\nare set to their default values, just as happens for INSERT. You cannot refer\nto values from the current row and use them in the new row. If you use an\nassignment such as \'SET col = col + 1\', the reference to the column name on\nthe right hand side is treated as DEFAULT(col), so the assignment is\nequivalent to \'SET col = DEFAULT(col) + 1\'.\n\nTo use REPLACE, you must have both the INSERT and DELETE privileges for the\ntable.\n\nThere are some gotchas you should be aware of, before using REPLACE:\n\n* If there is an AUTO_INCREMENT field, a new value will be generated.\n* If there are foreign keys, ON DELETE action will be activated by REPLACE.\n* Triggers on DELETE and INSERT will be activated by REPLACE.\n\nTo avoid some of these behaviors, you can use INSERT ... ON DUPLICATE KEY\nUPDATE.\n\nThis statement activates INSERT and DELETE triggers. See Trigger Overview for\ndetails.\n\nPARTITION\n---------\n\nSee Partition Pruning and Selection for details.\n\nREPLACE RETURNING\n-----------------\n\nREPLACE ... RETURNING returns a resultset of the replaced rows.\n\nThis returns the listed columns for all the rows that are replaced, or\nalternatively, the specified SELECT expression. Any SQL expressions which can\nbe calculated can be used in the select expression for the RETURNING clause,\nincluding virtual columns and aliases, expressions which use various operators\nsuch as bitwise, logical and arithmetic operators, string functions, date-time\nfunctions, numeric functions, control flow functions, secondary functions and\nstored functions. Along with this, statements which have subqueries and\nprepared statements can also be used.\n\nExamples\n--------\n\nSimple REPLACE statement\n\nREPLACE INTO t2 VALUES (1,\'Leopard\'),(2,\'Dog\') RETURNING id2, id2+id2 \nas Total ,id2|id2, id2&&id2;\n+-----+-------+---------+----------+\n| id2 | Total | id2|id2 | id2&&id2 |\n+-----+-------+---------+----------+\n| 1 | 2 | 1 | 1 |\n| 2 | 4 | 2 | 1 |\n+-----+-------+---------+----------+\n\nUsing stored functions in RETURNING\n\nDELIMITER |\nCREATE FUNCTION f(arg INT) RETURNS INT\n BEGIN\n RETURN (SELECT arg+arg);\n END|\n\nDELIMITER ;\nPREPARE stmt FROM \"REPLACE INTO t2 SET id2=3, animal2=\'Fox\' RETURNING f2(id2),\nUPPER(animal2)\";\n\nEXECUTE stmt;\n+---------+----------------+\n| f2(id2) | UPPER(animal2) |\n+---------+----------------+\n| 6 | FOX |\n+---------+----------------+\n\nSubqueries in the statement\n\nREPLACE INTO t1 SELECT * FROM t2 RETURNING (SELECT id2 FROM t2 WHERE \nid2 IN (SELECT id2 FROM t2 WHERE id2=1)) AS new_id;\n+--------+\n| new_id |\n+--------+\n| 1 |\n| 1 |\n| 1 |\n| 1 |\n+--------+\n\nSubqueries in the RETURNING clause that return more than one row or column\ncannot be used..\n\nAggregate functions cannot be used in the RETURNING clause. Since aggregate\nfunctions work on a set of values and if the purpose is to get the row count,\nROW_COUNT() with SELECT can be used, or it can be used in REPLACE...SEL==\nDescription\n\nREPLACE ... RETURNING returns a resultset of the replaced rows.\n\nThis returns the listed columns for all the rows that are replaced, or\nalternatively, the specified SELECT expression. Any SQL expressions which can\nbe calculated can be used in the select expression for the RETURNING clause,\nincluding virtual columns and aliases, expressions which use various operators\nsuch as bitwise, logical and arithmetic operators, string functions, date-time\nfunctions, numeric functions, control flow functions, secondary functions and\nstored functions. Along with this, statements which have subqueries and\nprepared statements can also be used.\n\nExamples\n--------\n\nSimple REPLACE statement\n\nREPLACE INTO t2 VALUES (1,\'Leopard\'),(2,\'Dog\') RETURNING id2, id2+id2 \nas Total ,id2|id2, id2&&id2;\n+-----+-------+---------+----------+\n| id2 | Total | id2|id2 | id2&&id2 |\n+-----+-------+---------+----------+\n| 1 | 2 | 1 | 1 |\n| 2 | 4 | 2 | 1 |\n+-----+-------+---------+----------+\n\nUsing stored functions in RETURNING\n\nDELIMITER |\nCREATE FUNCTION f(arg INT) RETURNS INT\n BEGIN\n RETURN (SELECT arg+arg);\n END|\n\nDELIMITER ;\nPREPARE stmt FROM \"REPLACE INTO t2 SET id2=3, animal2=\'Fox\' RETURNING f2(id2),\nUPPER(animal2)\";\n\nEXECUTE stmt;\n+---------+----------------+\n| f2(id2) | UPPER(animal2) |\n+---------+----------------+\n| 6 | FOX |\n+---------+----------------+\n\nSubqueries in the statement\n\nREPLACE INTO t1 SELECT * FROM t2 RETURNING (SELECT id2 FROM t2 WHERE \nid2 IN (SELECT id2 FROM t2 WHERE id2=1)) AS new_id;\n+--------+\n| new_id |\n+--------+\n| 1 |\n| 1 |\n| 1 |\n| 1 |\n+--------+\n\nSubqueries in the RETURNING clause that return more than one row or column\ncannot be used..\n\nAggregate functions cannot be used in the RETURNING clause. Since aggregate\nfunctions work on a set of values and if the purpose is to get the row count,\nROW_COUNT() with SELECT can be used, or it can be used in\nREPLACE...SELECT...RETURNING if the table in the RETURNING clause is not the\nsame as the REPLACE table. ECT...RETURNING if the table in the RETURNING\nclause is not the same as the REPLACE table.\n\nURL: https://mariadb.com/kb/en/replace/','','https://mariadb.com/kb/en/replace/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (418,27,'UPDATE','Syntax\n------\n\nSingle-table syntax:\n\nUPDATE [LOW_PRIORITY] [IGNORE] table_reference \n [PARTITION (partition_list)]\n [FOR PORTION OF period FROM expr1 TO expr2]\n SET col1={expr1|DEFAULT} [,col2={expr2|DEFAULT}] ...\n [WHERE where_condition]\n [ORDER BY ...]\n [LIMIT row_count]\n\nMultiple-table syntax:\n\nUPDATE [LOW_PRIORITY] [IGNORE] table_references\n SET col1={expr1|DEFAULT} [, col2={expr2|DEFAULT}] ...\n [WHERE where_condition]\n\nDescription\n-----------\n\nFor the single-table syntax, the UPDATE statement updates columns of existing\nrows in the named table with new values. The SET clause indicates which\ncolumns to modify and the values they should be given. Each value can be given\nas an expression, or the keyword DEFAULT to set a column explicitly to its\ndefault value. The WHERE clause, if given, specifies the conditions that\nidentify which rows to update. With no WHERE clause, all rows are updated. If\nthe ORDER BY clause is specified, the rows are updated in the order that is\nspecified. The LIMIT clause places a limit on the number of rows that can be\nupdated.\n\nUntil MariaDB 10.3.2, for the multiple-table syntax, UPDATE updates rows in\neach table named in table_references that satisfy the conditions. In this\ncase, ORDER BY and LIMIT cannot be used. This restriction was lifted in\nMariaDB 10.3.2 and both clauses can be used with multiple-table updates. An\nUPDATE can also reference tables which are located in different databases; see\nIdentifier Qualifiers for the syntax.\n\nwhere_condition is an expression that evaluates to true for each row to be\nupdated.\n\ntable_references and where_condition are as specified as described in SELECT.\n\nFor single-table updates, assignments are evaluated in left-to-right order,\nwhile for multi-table updates, there is no guarantee of a particular order. If\nthe SIMULTANEOUS_ASSIGNMENT sql_mode (available from MariaDB 10.3.5) is set,\nUPDATE statements evaluate all assignments simultaneously.\n\nYou need the UPDATE privilege only for columns referenced in an UPDATE that\nare actually updated. You need only the SELECT privilege for any columns that\nare read but not modified. See GRANT.\n\nThe UPDATE statement supports the following modifiers:\n\n* If you use the LOW_PRIORITY keyword, execution of\n the UPDATE is delayed until no other clients are reading from\n the table. This affects only storage engines that use only table-level\n locking (MyISAM, MEMORY, MERGE). See HIGH_PRIORITY and LOW_PRIORITY clauses\nfor details.\n* If you use the IGNORE keyword, the update statement does \n not abort even if errors occur during the update. Rows for which\n duplicate-key conflicts occur are not updated. Rows for which columns are\n updated to values that would cause data conversion errors are updated to the\n closest valid values instead.\n\nPARTITION\n---------\n\nSee Partition Pruning and Selection for details.\n\nFOR PORTION OF\n--------------\n\nMariaDB starting with 10.4.3\n----------------------------\nSee Application Time Periods - Updating by Portion.\n\nUPDATE Statements With the Same Source and Target\n-------------------------------------------------\n\nMariaDB starting with 10.3.2\n----------------------------\nFrom MariaDB 10.3.2, UPDATE statements may have the same source and target.\n\nFor example, given the following table:\n\nDROP TABLE t1;\nCREATE TABLE t1 (c1 INT, c2 INT);\nINSERT INTO t1 VALUES (10,10), (20,20);\n\nUntil MariaDB 10.3.1, the following UPDATE statement would not work:\n\nUPDATE t1 SET c1=c1+1 WHERE c2=(SELECT MAX(c2) FROM t1);\nERROR 1093 (HY000): Table \'t1\' is specified twice, \n both as a target for \'UPDATE\' and as a separate source for data\n\nFrom MariaDB 10.3.2, the statement executes successfully:\n\nUPDATE t1 SET c1=c1+1 WHERE c2=(SELECT MAX(c2) FROM t1);\n\nSELECT * FROM t1;\n+------+------+\n| c1 | c2 |\n+------+------+\n| 10 | 10 |\n| 21 | 20 |\n+------+------+\n\nExample\n-------\n\nSingle-table syntax:\n\nUPDATE table_name SET column1 = value1, column2 = value2 WHERE id=100;\n\nMultiple-table syntax:\n\nUPDATE tab1, tab2 SET tab1.column1 = value1, tab1.column2 = value2 WHERE\ntab1.id = tab2.id;\n\nURL: https://mariadb.com/kb/en/update/','','https://mariadb.com/kb/en/update/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (419,27,'IGNORE','The IGNORE option tells the server to ignore some common errors.\n\nIGNORE can be used with the following statements:\n\n* DELETE\n* INSERT (see also INSERT IGNORE)\n* LOAD DATA INFILE\n* UPDATE\n* ALTER TABLE\n* CREATE TABLE ... SELECT\n* INSERT ... SELECT\n\nThe logic used:\n\n* Variables out of ranges are replaced with the maximum/minimum value.\n\n* SQL_MODEs STRICT_TRANS_TABLES, STRICT_ALL_TABLES, NO_ZERO_IN_DATE,\nNO_ZERO_DATE are ignored.\n\n* Inserting NULL in a NOT NULL field will insert 0 ( in a numerical\n field), 0000-00-00 ( in a date field) or an empty string ( in a character\n field).\n\n* Rows that cause a duplicate key error or break a foreign key constraint are\n not inserted, updated, or deleted.\n\nThe following errors are ignored:\n\n+---------------------+---------------------------------+--------------------+\n| Error number | Symbolic error name | Description |\n+---------------------+---------------------------------+--------------------+\n| 1022 | ER_DUP_KEY | Can\'t write; |\n| | | duplicate key in |\n| | | table \'%s\' |\n+---------------------+---------------------------------+--------------------+\n| 1048 | ER_BAD_NULL_ERROR | Column \'%s\' |\n| | | cannot be null |\n+---------------------+---------------------------------+--------------------+\n| 1062 | ER_DUP_ENTRY | Duplicate entry |\n| | | \'%s\' for key %d |\n+---------------------+---------------------------------+--------------------+\n| 1242 | ER_SUBQUERY_NO_1_ROW | Subquery returns |\n| | | more than 1 row |\n+---------------------+---------------------------------+--------------------+\n| 1264 | ER_WARN_DATA_OUT_OF_RANGE | Out of range |\n| | | value for column |\n| | | \'%s\' at row %ld |\n+---------------------+---------------------------------+--------------------+\n| 1265 | WARN_DATA_TRUNCATED | Data truncated |\n| | | for column \'%s\' |\n| | | at row %ld |\n+---------------------+---------------------------------+--------------------+\n| 1292 | ER_TRUNCATED_WRONG_VALUE | Truncated |\n| | | incorrect %s |\n| | | value: \'%s\' |\n+---------------------+---------------------------------+--------------------+\n| 1366 | ER_TRUNCATED_WRONG_VALUE_FOR_FI | Incorrect integer |\n| | LD | value |\n+---------------------+---------------------------------+--------------------+\n| 1369 | ER_VIEW_CHECK_FAILED | CHECK OPTION |\n| | | failed \'%s.%s\' |\n+---------------------+---------------------------------+--------------------+\n| 1451 | ER_ROW_IS_REFERENCED_2 | Cannot delete or |\n| | | update a parent |\n| | | row |\n+---------------------+---------------------------------+--------------------+\n| 1452 | ER_NO_REFERENCED_ROW_2 | Cannot add or |\n| | | update a child |\n| | | row: a foreign |\n| | | key constraint |\n| | | fails (%s) |\n+---------------------+---------------------------------+--------------------+\n| 1526 | ER_NO_PARTITION_FOR_GIVEN_VALUE | Table has no |\n| | | partition for |\n| | | value %s |\n+---------------------+---------------------------------+--------------------+\n| 1586 | ER_DUP_ENTRY_WITH_KEY_NAME | Duplicate entry |\n| | | \'%s\' for key \'%s\' |\n+---------------------+---------------------------------+--------------------+\n| 1591 | ER_NO_PARTITION_FOR_GIVEN_VALUE | Table has no |\n| | SILENT | partition for |\n| | | some existing |\n| | | values |\n+---------------------+---------------------------------+--------------------+\n| 1748 | ER_ROW_DOES_NOT_MATCH_GIVEN_PAR | Found a row not |\n| | ITION_SET | matching the |\n| | | given partition |\n| | | set |\n+---------------------+---------------------------------+--------------------+\n\nIgnored errors normally generate a warning.\n\nA property of the IGNORE clause consists in causing transactional engines and\nnon-transactional engines (like XtraDB and Aria) to behave the same way. For\nexample, normally a multi-row insert which tries to violate a UNIQUE contraint\nis completely rolled back on XtraDB/InnoDB, but might be partially executed on\nAria. With the IGNORE clause, the statement will be partially executed in both\nengines.\n\nDuplicate key errors also generate warnings. The OLD_MODE server variable can\nbe used to prevent this.\n\nURL: https://mariadb.com/kb/en/ignore/','','https://mariadb.com/kb/en/ignore/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (420,27,'SELECT','Syntax\n------\n\nSELECT\n [ALL | DISTINCT | DISTINCTROW]\n [HIGH_PRIORITY]\n [STRAIGHT_JOIN]\n [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]\n [SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS]\n select_expr [, select_expr ...]\n [ FROM table_references\n [WHERE where_condition]\n [GROUP BY {col_name | expr | position} [ASC | DESC], ... [WITH ROLLUP]]\n [HAVING where_condition]\n [ORDER BY {col_name | expr | position} [ASC | DESC], ...]\n [LIMIT {[offset,] row_count | row_count OFFSET offset [ROWS EXAMINED\nrows_limit] } |\n [OFFSET start { ROW | ROWS }]\n [FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } { ONLY | WITH TIES }]\n]\n procedure|[PROCEDURE procedure_name(argument_list)]\n [INTO OUTFILE \'file_name\' [CHARACTER SET charset_name] [export_options] |\n INTO DUMPFILE \'file_name\' | INTO var_name [, var_name] ]\n [FOR UPDATE lock_option | LOCK IN SHARE MODE lock_option]\nexport_options:\n [{FIELDS | COLUMNS}\n [TERMINATED BY \'string\']\n [[OPTIONALLY] ENCLOSED BY \'char\']\n [ESCAPED BY \'char\']\n ]\n [LINES\n [STARTING BY \'string\']\n [TERMINATED BY \'string\']\n ]\nlock_option:\n [WAIT n | NOWAIT | SKIP LOCKED]\n\nDescription\n-----------\n\nSELECT is used to retrieve rows selected from one or more tables, and can\ninclude UNION statements and subqueries.\n\n* Each select_expr expression indicates a column or data that you want to\nretrieve. You\nmust have at least one select expression. See Select Expressions below.\n\n* The FROM clause indicates the table or tables from which to retrieve rows.\nUse either a single table name or a JOIN expression. See JOIN\nfor details. If no table is involved, FROM DUAL can be specified.\n\n* Each table can also be specified as db_name.tabl_name. Each column can also\nbe specified as tbl_name.col_name or even db_name.tbl_name.col_name. This\nallows one to write queries which involve multiple databases. See Identifier\nQualifiers for syntax details.\n\n* The WHERE clause, if given, indicates the condition or\n conditions that rows must satisfy to be selected.\n where_condition is an expression that evaluates to true for\n each row to be selected. The statement selects all rows if there is no WHERE\n clause.\nIn the WHERE clause, you can use any of the functions and\n operators that MariaDB supports, except for aggregate (summary) functions.\nSee Functions and Operators and Functions and Modifiers for use with GROUP BY\n(aggregate).\n\n* Use the ORDER BY clause to order the results.\n\n* Use the LIMIT clause allows you to restrict the results to only\na certain number of rows, optionally with an offset.\n\n* Use the GROUP BY and HAVING clauses to group\nrows together when they have columns or computed values in common.\n\nSELECT can also be used to retrieve rows computed without reference to any\ntable.\n\nSelect Expressions\n------------------\n\nA SELECT statement must contain one or more select expressions, separated by\ncommas. Each select expression can be one of the following:\n\n* The name of a column.\n* Any expression using functions and operators.\n* * to select all columns from all tables in the FROM clause.\n* tbl_name.* to select all columns from just the table tbl_name.\n\nWhen specifying a column, you can either use just the column name or qualify\nthe column name with the name of the table using tbl_name.col_name. The\nqualified form is useful if you are joining multiple tables in the FROM\nclause. If you do not qualify the column names when selecting from multiple\ntables, MariaDB will try to find the column in each table. It is an error if\nthat column name exists in multiple tables.\n\nYou can quote column names using backticks. If you are qualifying column names\nwith table names, quote each part separately as `tbl_name`.`col_name`.\n\nIf you use any grouping functions in any of the select expressions, all rows\nin your results will be implicitly grouped, as if you had used GROUP BY NULL.\n\nDISTINCT\n--------\n\nA query may produce some identical rows. By default, all rows are retrieved,\neven when their values are the same. To explicitly specify that you want to\nretrieve identical rows, use the ALL option. If you want duplicates to be\nremoved from the resultset, use the DISTINCT option. DISTINCTROW is a synonym\nfor DISTINCT. See also COUNT DISTINCT and SELECT UNIQUE in Oracle mode.\n\nINTO\n----\n\nThe INTO clause is used to specify that the query results should be written to\na file or variable.\n\n* SELECT INTO OUTFILE - formatting and writing the result to an external file.\n* SELECT INTO DUMPFILE - binary-safe writing of the unformatted results to an\nexternal file.\n* SELECT INTO Variable - selecting and setting variables.\n\nThe reverse of SELECT INTO OUTFILE is LOAD DATA.\n\nLIMIT\n-----\n\nRestricts the number of returned rows. See LIMIT and LIMIT ROWS EXAMINED for\ndetails.\n\nLOCK IN SHARE MODE/FOR UPDATE\n-----------------------------\n\nSee LOCK IN SHARE MODE and FOR UPDATE for details on the respective locking\nclauses.\n\nOFFSET ... FETCH\n----------------\n\nMariaDB starting with 10.6\n--------------------------\nSee SELECT ... OFFSET ... FETCH.\n\nORDER BY\n--------\n\nOrder a resultset. See ORDER BY for details.\n\nPARTITION\n---------\n\nSpecifies to the optimizer which partitions are relevant for the query. Other\npartitions will not be read. See Partition Pruning and Selection for details.\n\nPROCEDURE\n---------\n\nPasses the whole result set to a C Procedure. See PROCEDURE and PROCEDURE\nANALYSE (the only built-in procedure not requiring the server to be\nrecompiled).\n\nSKIP LOCKED\n-----------\n\nMariaDB starting with 10.6\n--------------------------\nThe SKIP LOCKED clause was introduced in MariaDB 10.6.0.\n\nThis causes those rows that couldn\'t be locked (LOCK IN SHARE MODE or FOR\nUPDATE) to be excluded from the result set. An explicit NOWAIT is implied\nhere. This is only implemented on InnoDB tables and ignored otherwise.\n\nSQL_CALC_FOUND_ROWS\n-------------------\n\nWhen SQL_CALC_FOUND_ROWS is used, then MariaDB will calculate how many rows\nwould have been in the result, if there would be no LIMIT clause. The result\ncan be found by calling the function FOUND_ROWS() in your next sql statement.\n\nmax_statement_time clause\n-------------------------\n\nBy using max_statement_time in conjunction with SET STATEMENT, it is possible\nto limit the execution time of individual queries. For example:\n\nSET STATEMENT max_statement_time=100 FOR \n SELECT field1 FROM table_name ORDER BY field1;\n\nWAIT/NOWAIT\n-----------\n\nSet the lock wait timeout. See WAIT and NOWAIT.\n\nExamples\n--------\n\nSELECT f1,f2 FROM t1 WHERE (f3<=10) AND (f4=\'y\');\n\nSee Getting Data from MariaDB (Beginner tutorial), or the various\nsub-articles, for more examples.\n\nURL: https://mariadb.com/kb/en/select/','','https://mariadb.com/kb/en/select/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (421,27,'JOIN Syntax','Description\n-----------\n\nMariaDB supports the following JOIN syntaxes for the table_references part of\nSELECT statements and multiple-table DELETE and UPDATE statements:\n\ntable_references:\n table_reference [, table_reference] ...\n\ntable_reference:\n table_factor\n | join_table\n\ntable_factor:\n tbl_name [PARTITION (partition_list)]\n [query_system_time_period_specification] [[AS] alias] [index_hint_list]\n | table_subquery [query_system_time_period_specification] [AS] alias\n | ( table_references )\n | { ON table_reference LEFT OUTER JOIN table_reference\n ON conditional_expr }\n\njoin_table:\n table_reference [INNER | CROSS] JOIN table_factor [join_condition]\n | table_reference STRAIGHT_JOIN table_factor\n | table_reference STRAIGHT_JOIN table_factor ON conditional_expr\n | table_reference {LEFT|RIGHT} [OUTER] JOIN table_reference join_condition\n | table_reference NATURAL [{LEFT|RIGHT} [OUTER]] JOIN table_factor\n\njoin_condition:\n ON conditional_expr\n | USING (column_list)\n\nquery_system_time_period_specification:\n FOR SYSTEM_TIME AS OF point_in_time\n | FOR SYSTEM_TIME BETWEEN point_in_time AND point_in_time\n | FOR SYSTEM_TIME FROM point_in_time TO point_in_time\n | FOR SYSTEM_TIME ALL\n\npoint_in_time:\n [TIMESTAMP] expression\n | TRANSACTION expression\n\nindex_hint_list:\n index_hint [, index_hint] ...\n\nindex_hint:\n USE {INDEX|KEY}\n [{FOR {JOIN|ORDER BY|GROUP BY}] ([index_list])\n | IGNORE {INDEX|KEY}\n [{FOR {JOIN|ORDER BY|GROUP BY}] (index_list)\n | FORCE {INDEX|KEY}\n [{FOR {JOIN|ORDER BY|GROUP BY}] (index_list)\n\nindex_list:\n index_name [, index_name] ...\n\nA table reference is also known as a join expression.\n\nEach table can also be specified as db_name.tabl_name. This allows to write\nqueries which involve multiple databases. See Identifier Qualifiers for syntax\ndetails.\n\nThe syntax of table_factor is extended in comparison with the SQL Standard.\nThe latter accepts only table_reference, not a list of them inside a pair of\nparentheses.\n\nThis is a conservative extension if we consider each comma in a list of\ntable_reference items as equivalent to an inner join. For example:\n\nSELECT * FROM t1 LEFT JOIN (t2, t3, t4)\n ON (t2.a=t1.a AND t3.b=t1.b AND t4.c=t1.c)\n\nis equivalent to:\n\nSELECT * FROM t1 LEFT JOIN (t2 CROSS JOIN t3 CROSS JOIN t4)\n ON (t2.a=t1.a AND t3.b=t1.b AND t4.c=t1.c)\n\nIn MariaDB, CROSS JOIN is a syntactic equivalent to INNER JOIN (they can\nreplace each other). In standard SQL, they are not equivalent. INNER JOIN is\nused with an ON clause, CROSS JOIN is used otherwise.\n\nIn general, parentheses can be ignored in join expressions containing only\ninner join operations. MariaDB also supports nested joins (see\nhttp://dev.mysql.com/doc/refman/5.1/en/nested-join-optimization.html).\n\nSee System-versioned tables for more information about FOR SYSTEM_TIME syntax.\n\nIndex hints can be specified to affect how the MariaDB optimizer makes use of\nindexes. For more information, see How to force query plans.\n\nExamples\n--------\n\nSELECT left_tbl.*\n FROM left_tbl LEFT JOIN right_tbl ON left_tbl.id = right_tbl.id\n WHERE right_tbl.id IS NULL;\n\nURL: https://mariadb.com/kb/en/join-syntax/','','https://mariadb.com/kb/en/join-syntax/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (422,27,'Scalar Subqueries','A scalar subquery is a subquery that returns a single value. This is the\nsimplest form of a subquery, and can be used in most places a literal or\nsingle column value is valid.\n\nThe data type, length and character set and collation are all taken from the\nresult returned by the subquery. The result of a subquery can always be NULL,\nthat is, no result returned. Even if the original value is defined as NOT\nNULL, this is disregarded.\n\nA subquery cannot be used where only a literal is expected, for example LOAD\nDATA INFILE expects a literal string containing the file name, and LIMIT\nrequires a literal integer.\n\nExamples\n--------\n\nCREATE TABLE sq1 (num TINYINT);\n\nCREATE TABLE sq2 (num TINYINT);\n\nINSERT INTO sq1 VALUES (1);\n\nINSERT INTO sq2 VALUES (10* (SELECT num FROM sq1));\n\nSELECT * FROM sq2;\n+------+\n| num |\n+------+\n| 10 |\n+------+\n\nInserting a second row means the subquery is no longer a scalar, and this\nparticular query is not valid:\n\nINSERT INTO sq1 VALUES (2);\n\nINSERT INTO sq2 VALUES (10* (SELECT num FROM sq1));\nERROR 1242 (21000): Subquery returns more than 1 row\n\nNo rows in the subquery, so the scalar is NULL:\n\nINSERT INTO sq2 VALUES (10* (SELECT num FROM sq3 WHERE num=\'3\'));\n\nSELECT * FROM sq2;\n+------+\n| num |\n+------+\n| 10 |\n| NULL |\n+------+\n\nA more traditional scalar subquery, as part of a WHERE clause:\n\nSELECT * FROM sq1 WHERE num = (SELECT MAX(num)/10 FROM sq2); \n+------+\n| num |\n+------+\n| 1 |\n+------+\n\nURL: https://mariadb.com/kb/en/subqueries-scalar-subqueries/','','https://mariadb.com/kb/en/subqueries-scalar-subqueries/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (423,27,'Row Subqueries','A row subquery is a subquery returning a single row, as opposed to a scalar\nsubquery, which returns a single column from a row, or a literal.\n\nExamples\n--------\n\nCREATE TABLE staff (name VARCHAR(10), age TINYINT);\n\nCREATE TABLE customer (name VARCHAR(10), age TINYINT);\n\nINSERT INTO staff VALUES (\'Bilhah\',37), (\'Valerius\',61), (\'Maia\',25);\n\nINSERT INTO customer VALUES (\'Thanasis\',48), (\'Valerius\',61), (\'Brion\',51);\n\nSELECT * FROM staff WHERE (name,age) = (SELECT name,age FROM customer WHERE\nname=\'Valerius\');\n+----------+------+\n| name | age |\n+----------+------+\n| Valerius | 61 |\n+----------+------+\n\nFinding all rows in one table also in another:\n\nSELECT name,age FROM staff WHERE (name,age) IN (SELECT name,age FROM customer);\n+----------+------+\n| name | age |\n+----------+------+\n| Valerius | 61 |\n+----------+------+\n\nURL: https://mariadb.com/kb/en/subqueries-row-subqueries/','','https://mariadb.com/kb/en/subqueries-row-subqueries/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (424,27,'Subqueries and ALL','Subqueries using the ALL keyword will return true if the comparison returns\ntrue for each row returned by the subquery, or the subquery returns no rows.\n\nSyntax\n------\n\nscalar_expression comparison_operator ALL <Table subquery>\n\n* scalar_expression may be any expression that evaluates to a single\nvalue\n* comparison_operator may be any one of: =, >, <, >=, <=, <> or !=\n\nALL returns:\n\n* NULL if the comparison operator returns NULL for at least one row returned\nby the Table subquery or scalar_expression returns NULL.\n* FALSE if the comparison operator returns FALSE for at least one row returned\nby the Table subquery.\n* TRUE if the comparison operator returns TRUE for all rows returned by the\nTable subquery, or if Table subquery returns no rows.\n\nNOT IN is an alias for <> ALL.\n\nExamples\n--------\n\nCREATE TABLE sq1 (num TINYINT);\n\nCREATE TABLE sq2 (num2 TINYINT);\n\nINSERT INTO sq1 VALUES(100);\n\nINSERT INTO sq2 VALUES(40),(50),(60);\n\nSELECT * FROM sq1 WHERE num > ALL (SELECT * FROM sq2);\n+------+\n| num |\n+------+\n| 100 |\n+------+\n\nSince 100 > all of 40,50 and 60, the evaluation is true and the row is returned\n\nAdding a second row to sq1, where the evaluation for that record is false:\n\nINSERT INTO sq1 VALUES(30);\n\nSELECT * FROM sq1 WHERE num > ALL (SELECT * FROM sq2);\n+------+\n| num |\n+------+\n| 100 |\n+------+\n\nAdding a new row to sq2, causing all evaluations to be false:\n\nINSERT INTO sq2 VALUES(120);\n\nSELECT * FROM sq1 WHERE num > ALL (SELECT * FROM sq2);\nEmpty set (0.00 sec)\n\nWhen the subquery returns no results, the evaluation is still true:\n\nSELECT * FROM sq1 WHERE num > ALL (SELECT * FROM sq2 WHERE num2 > 300);\n+------+\n| num |\n+------+\n| 100 |\n| 30 |\n+------+\n\nEvaluating against a NULL will cause the result to be unknown, or not true,\nand therefore return no rows:\n\nINSERT INTO sq2 VALUES (NULL);\n\nSELECT * FROM sq1 WHERE num > ALL (SELECT * FROM sq2);\n\nURL: https://mariadb.com/kb/en/subqueries-and-all/','','https://mariadb.com/kb/en/subqueries-and-all/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (425,27,'Subqueries and ANY','Subqueries using the ANY keyword will return true if the comparison returns\ntrue for at least one row returned by the subquery.\n\nSyntax\n------\n\nThe required syntax for an ANY or SOME quantified comparison is:\n\nscalar_expression comparison_operator ANY <Table subquery>\n\nOr:\n\nscalar_expression comparison_operator SOME <Table subquery>\n\n* scalar_expression may be any expression that evaluates to a\nsingle value.\n* comparison_operator may be any one of =, >, <, >=, <=, <> or !=.\n\nANY returns:\n\n* TRUE if the comparison operator returns TRUE for at least one row returned\nby the Table subquery.\n* FALSE if the comparison operator returns FALSE for all rows returned by the\nTable subquery, or Table subquery has zero rows.\n* NULL if the comparison operator returns NULL for at least one row returned\nby the Table subquery and doesn\'t returns TRUE for any of them, or if\nscalar_expression returns NULL.\n\nSOME is a synmonym for ANY, and IN is a synonym for = ANY\n\nExamples\n--------\n\nCREATE TABLE sq1 (num TINYINT);\n\nCREATE TABLE sq2 (num2 TINYINT);\n\nINSERT INTO sq1 VALUES(100);\n\nINSERT INTO sq2 VALUES(40),(50),(120);\n\nSELECT * FROM sq1 WHERE num > ANY (SELECT * FROM sq2);\n+------+\n| num |\n+------+\n| 100 |\n+------+\n\n100 is greater than two of the three values, and so the expression evaluates\nas true.\n\nSOME is a synonym for ANY:\n\nSELECT * FROM sq1 WHERE num < SOME (SELECT * FROM sq2);\n+------+\n| num |\n+------+\n| 100 |\n+------+\n\nIN is a synonym for = ANY, and here there are no matches, so no results are\nreturned:\n\nSELECT * FROM sq1 WHERE num IN (SELECT * FROM sq2);\nEmpty set (0.00 sec)\n\nINSERT INTO sq2 VALUES(100);\nQuery OK, 1 row affected (0.05 sec)\n\nSELECT * FROM sq1 WHERE num <> ANY (SELECT * FROM sq2);\n+------+\n| num |\n+------+\n| 100 |\n+------+\n\nReading this query, the results may be counter-intuitive. It may seem to read\nas \"SELECT * FROM sq1 WHERE num does not match any results in sq2. Since it\ndoes match 100, it could seem that the results are incorrect. However, the\nquery returns a result if the match does not match any of sq2. Since 100\nalready does not match 40, the expression evaluates to true immediately,\nregardless of the 100\'s matching. It may be more easily readable to use SOME\nin a case such as this:\n\nSELECT * FROM sq1 WHERE num <> SOME (SELECT * FROM sq2);\n+------+\n| num |\n+------+\n| 100 |\n+------+\n\nURL: https://mariadb.com/kb/en/subqueries-and-any/','','https://mariadb.com/kb/en/subqueries-and-any/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (426,27,'Subqueries and EXISTS','Syntax\n------\n\nSELECT ... WHERE EXISTS <Table subquery>\n\nDescription\n-----------\n\nSubqueries using the EXISTS keyword will return true if the subquery returns\nany rows. Conversely, subqueries using NOT EXISTS will return true only if the\nsubquery returns no rows from the table.\n\nEXISTS subqueries ignore the columns specified by the SELECT of the subquery,\nsince they\'re not relevant. For example,\n\nSELECT col1 FROM t1 WHERE EXISTS (SELECT * FROM t2);\n\nand\n\nSELECT col1 FROM t1 WHERE EXISTS (SELECT col2 FROM t2);\n\nproduce identical results.\n\nExamples\n--------\n\nCREATE TABLE sq1 (num TINYINT);\n\nCREATE TABLE sq2 (num2 TINYINT);\n\nINSERT INTO sq1 VALUES(100);\n\nINSERT INTO sq2 VALUES(40),(50),(60);\n\nSELECT * FROM sq1 WHERE EXISTS (SELECT * FROM sq2 WHERE num2>50);\n+------+\n| num |\n+------+\n| 100 |\n+------+\n\nSELECT * FROM sq1 WHERE NOT EXISTS (SELECT * FROM sq2 GROUP BY num2 HAVING\nMIN(num2)=40);\nEmpty set (0.00 sec)\n\nURL: https://mariadb.com/kb/en/subqueries-and-exists/','','https://mariadb.com/kb/en/subqueries-and-exists/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (427,27,'Subqueries in a FROM Clause','Although subqueries are more commonly placed in a WHERE clause, they can also\nform part of the FROM clause. Such subqueries are commonly called derived\ntables.\n\nIf a subquery is used in this way, you must also use an AS clause to name the\nresult of the subquery.\n\nORACLE mode\n-----------\n\nMariaDB starting with 10.6.0\n----------------------------\nFrom MariaDB 10.6.0, anonymous subqueries in a FROM clause (no AS clause) are\npermitted in ORACLE mode.\n\nExamples\n--------\n\nCREATE TABLE student (name CHAR(10), test CHAR(10), score TINYINT);\n\nINSERT INTO student VALUES \n (\'Chun\', \'SQL\', 75), (\'Chun\', \'Tuning\', 73),\n (\'Esben\', \'SQL\', 43), (\'Esben\', \'Tuning\', 31),\n (\'Kaolin\', \'SQL\', 56), (\'Kaolin\', \'Tuning\', 88),\n (\'Tatiana\', \'SQL\', 87), (\'Tatiana\', \'Tuning\', 83);\n\nAssume that, given the data above, you want to return the average total for\nall students. In other words, the average of Chun\'s 148 (75+73), Esben\'s 74\n(43+31), etc.\n\nYou cannot do the following:\n\nSELECT AVG(SUM(score)) FROM student GROUP BY name;\nERROR 1111 (HY000): Invalid use of group function\n\nA subquery in the FROM clause is however permitted:\n\nSELECT AVG(sq_sum) FROM (SELECT SUM(score) AS sq_sum FROM student GROUP BY\nname) AS t;\n+-------------+\n| AVG(sq_sum) |\n+-------------+\n| 134.0000 |\n+-------------+\n\nFrom MariaDB 10.6 in ORACLE mode, the following is permitted:\n\nSELECT * FROM (SELECT 1 FROM DUAL), (SELECT 2 FROM DUAL);\n\nURL: https://mariadb.com/kb/en/subqueries-in-a-from-clause/','','https://mariadb.com/kb/en/subqueries-in-a-from-clause/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (428,27,'Subqueries and JOINs','A subquery can quite often, but not in all cases, be rewritten as a JOIN.\n\nRewriting Subqueries as JOINS\n-----------------------------\n\nA subquery using IN can be rewritten with the DISTINCT keyword, for example:\n\nSELECT * FROM table1 WHERE col1 IN (SELECT col1 FROM table2);\n\ncan be rewritten as:\n\nSELECT DISTINCT table1.* FROM table1, table2 WHERE table1.col1=table2.col1;\n\nNOT IN or NOT EXISTS queries can also be rewritten. For example, these two\nqueries returns the same result:\n\nSELECT * FROM table1 WHERE col1 NOT IN (SELECT col1 FROM table2);\nSELECT * FROM table1 WHERE NOT EXISTS (SELECT col1 FROM table2 WHERE\ntable1.col1=table2.col1);\n\nand both can be rewritten as:\n\nSELECT table1.* FROM table1 LEFT JOIN table2 ON table1.id=table2.id WHERE\ntable2.id IS NULL;\n\nSubqueries that can be rewritten as a LEFT JOIN are sometimes more efficient.\n\nUsing Subqueries instead of JOINS\n---------------------------------\n\nThere are some scenarios, though, which call for subqueries rather than joins:\n\n* When you want duplicates, but not false duplicates. Suppose Table_1\n has three rows — {1,1,2}\n — and Table_2 has two rows\n — {1,2,2}. If you need to list the rows\n in Table_1 which are also in Table_2, only this\n subquery-based SELECT statement will give the right answer\n (1,1,2):\n\nSELECT Table_1.column_1 \nFROM Table_1 \nWHERE Table_1.column_1 IN \n (SELECT Table_2.column_1\n FROM Table_2);\n\n* This SQL statement won\'t work:\n\nSELECT Table_1.column_1 \nFROM Table_1,Table_2 \nWHERE Table_1.column_1 = Table_2.column_1;\n\n* because the result will be {1,1,2,2}\n — and the duplication of 2 is an error. This SQL\n statement won\'t work either:\n\nSELECT DISTINCT Table_1.column_1 \nFROM Table_1,Table_2 \nWHERE Table_1.column_1 = Table_2.column_1;\n\n* because the result will be {1,2} — and\n the removal of the duplicated 1 is an error too.\n\n* When the outermost statement is not a query. The SQL statement:\n\nUPDATE Table_1 SET column_1 = (SELECT column_1 FROM Table_2);\n\n* can\'t be expressed using a join unless some rare SQL3 features are used.\n\n* When the join is over an expression. The SQL statement:\n\nSELECT * FROM Table_1 \nWHERE column_1 + 5 =\n (SELECT MAX(column_1) FROM Table_2);\n\n* is hard to express with a join. In fact, the only way we can think of is\n this SQL statement:\n\nSELECT Table_1.*\nFROM Table_1, \n (SELECT MAX(column_1) AS max_column_1 FROM Table_2) AS Table_2\nWHERE Table_1.column_1 + 5 = Table_2.max_column_1;\n\n* which still involves a parenthesized query, so nothing is gained from the\n transformation.\n\n* When you want to see the exception. For example, suppose the question is:\n what books are longer than Das Kapital? These two queries are effectively\n almost the same:\n\nSELECT DISTINCT Bookcolumn_1.* \nFROM Books AS Bookcolumn_1 JOIN Books AS Bookcolumn_2 USING(page_count) \nWHERE title = \'Das Kapital\';\n\nSELECT DISTINCT Bookcolumn_1.* \nFROM Books AS Bookcolumn_1 \nWHERE Bookcolumn_1.page_count > \n (SELECT DISTINCT page_count\n FROM Books AS Bookcolumn_2\n WHERE title = \'Das Kapital\');\n\n* The difference is between these two SQL statements is, if there are two\n editions of Das Kapital (with different page counts), then the self-join\n example will return the books which are longer than the shortest edition\n of Das Kapital. That might be the wrong answer, since the original\n question didn\'t ask for \"... longer than ANY book named Das Kapital\"\n (it seems to contain a false assumption that there\'s only one edition).\n\nURL: https://mariadb.com/kb/en/subqueries-and-joins/','','https://mariadb.com/kb/en/subqueries-and-joins/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (429,27,'Subquery Limitations','There are a number of limitations regarding subqueries, which are discussed\nbelow. The following tables and data will be used in the examples that follow:\n\nCREATE TABLE staff(name VARCHAR(10),age TINYINT);\n\nCREATE TABLE customer(name VARCHAR(10),age TINYINT);\n\nINSERT INTO staff VALUES \n(\'Bilhah\',37), (\'Valerius\',61), (\'Maia\',25);\n\nINSERT INTO customer VALUES \n(\'Thanasis\',48), (\'Valerius\',61), (\'Brion\',51);\n\nORDER BY and LIMIT\n------------------\n\nTo use ORDER BY or limit LIMIT in subqueries both must be used.. For example:\n\nSELECT * FROM staff WHERE name IN (SELECT name FROM customer ORDER BY name);\n+----------+------+\n| name | age |\n+----------+------+\n| Valerius | 61 |\n+----------+------+\n\nis valid, but\n\nSELECT * FROM staff WHERE name IN (SELECT NAME FROM customer ORDER BY name\nLIMIT 1);\nERROR 1235 (42000): This version of MariaDB doesn\'t \n yet support \'LIMIT & IN/ALL/ANY/SOME subquery\'\n\nis not.\n\nModifying and Selecting from the Same Table\n-------------------------------------------\n\nIt\'s not possible to both modify and select from the same table in a subquery.\nFor example:\n\nDELETE FROM staff WHERE name = (SELECT name FROM staff WHERE age=61);\nERROR 1093 (HY000): Table \'staff\' is specified twice, both \n as a target for \'DELETE\' and as a separate source for data\n\nRow Comparison Operations\n-------------------------\n\nThere is only partial support for row comparison operations. The expression in\n\nexpr op {ALL|ANY|SOME} subquery,\n\nmust be scalar and the subquery can only return a single column.\n\nHowever, because of the way IN is implemented (it is rewritten as a sequence\nof = comparisons and AND), the expression in\n\nexpression [NOT] IN subquery\n\nis permitted to be an n-tuple and the subquery can return rows of n-tuples.\n\nFor example:\n\nSELECT * FROM staff WHERE (name,age) NOT IN (\n SELECT name,age FROM customer WHERE age >=51]\n);\n+--------+------+\n| name | age |\n+--------+------+\n| Bilhah | 37 |\n| Maia | 25 |\n+--------+------+\n\nis permitted, but\n\nSELECT * FROM staff WHERE (name,age) = ALL (\n SELECT name,age FROM customer WHERE age >=51\n);\nERROR 1241 (21000): Operand should contain 1 column(s)\n\nis not.\n\nCorrelated Subqueries\n---------------------\n\nSubqueries in the FROM clause cannot be correlated subqueries. They cannot be\nevaluated for each row of the outer query since they are evaluated to produce\na result set during when the query is executed.\n\nStored Functions\n----------------\n\nA subquery can refer to a stored function which modifies data. This is an\nextension to the SQL standard, but can result in indeterminate outcomes. For\nexample, take:\n\nSELECT ... WHERE x IN (SELECT f() ...);\n\nwhere f() inserts rows. The function f() could be executed a different number\nof times depending on how the optimizer chooses to handle the query.\n\nThis sort of construct is therefore not safe to use in replication that is not\nrow-based, as there could be different results on the master and the slave.\n\nURL: https://mariadb.com/kb/en/subquery-limitations/','','https://mariadb.com/kb/en/subquery-limitations/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (430,27,'UNION','UNION is used to combine the results from multiple SELECT statements into a\nsingle result set.\n\nSyntax\n------\n\nSELECT ...\nUNION [ALL | DISTINCT] SELECT ...\n[UNION [ALL | DISTINCT] SELECT ...]\n[ORDER BY [column [, column ...]]]\n[LIMIT {[offset,] row_count | row_count OFFSET offset}]\n\nDescription\n-----------\n\nUNION is used to combine the results from multiple SELECT statements into a\nsingle result set.\n\nThe column names from the first SELECT statement are used as the column names\nfor the results returned. Selected columns listed in corresponding positions\nof each SELECT statement should have the same data type. (For example, the\nfirst column selected by the first statement should have the same type as the\nfirst column selected by the other statements.)\n\nIf they don\'t, the type and length of the columns in the result take into\naccount the values returned by all of the SELECTs, so there is no need for\nexplicit casting. Note that currently this is not the case for recursive CTEs\n- see MDEV-12325.\n\nTable names can be specified as db_name.tbl_name. This permits writing UNIONs\nwhich involve multiple databases. See Identifier Qualifiers for syntax details.\n\nUNION queries cannot be used with aggregate functions.\n\nEXCEPT and UNION have the same operation precedence and INTERSECT has a higher\nprecedence, unless running in Oracle mode, in which case all three have the\nsame precedence.\n\nALL/DISTINCT\n------------\n\nThe ALL keyword causes duplicate rows to be preserved. The DISTINCT keyword\n(the default if the keyword is omitted) causes duplicate rows to be removed by\nthe results.\n\nUNION ALL and UNION DISTINCT can both be present in a query. In this case,\nUNION DISTINCT will override any UNION ALLs to its left.\n\nMariaDB starting with 10.1.1\n----------------------------\nUntil MariaDB 10.1.1, all UNION ALL statements required the server to create a\ntemporary table. Since MariaDB 10.1.1, the server can in most cases execute\nUNION ALL without creating a temporary table, improving performance (see\nMDEV-334).\n\nORDER BY and LIMIT\n------------------\n\nIndividual SELECTs can contain their own ORDER BY and LIMIT clauses. In this\ncase, the individual queries need to be wrapped between parentheses. However,\nthis does not affect the order of the UNION, so they only are useful to limit\nthe record read by one SELECT.\n\nThe UNION can have global ORDER BY and LIMIT clauses, which affect the whole\nresultset. If the columns retrieved by individual SELECT statements have an\nalias (AS), the ORDER BY must use that alias, not the real column names.\n\nHIGH_PRIORITY\n-------------\n\nSpecifying a query as HIGH_PRIORITY will not work inside a UNION. If applied\nto the first SELECT, it will be ignored. Applying to a later SELECT results in\na syntax error:\n\nERROR 1234 (42000): Incorrect usage/placement of \'HIGH_PRIORITY\'\n\nSELECT ... INTO ...\n-------------------\n\nIndividual SELECTs cannot be written INTO DUMPFILE or INTO OUTFILE. If the\nlast SELECT statement specifies INTO DUMPFILE or INTO OUTFILE, the entire\nresult of the UNION will be written. Placing the clause after any other SELECT\nwill result in a syntax error.\n\nIf the result is a single row, SELECT ... INTO @var_name can also be used.\n\nMariaDB starting with 10.4.0\n----------------------------\n\nParentheses\n-----------\n\nFrom MariaDB 10.4.0, parentheses can be used to specify precedence. Before\nthis, a syntax error would be returned.\n\nExamples\n--------\n\nUNION between tables having different column names:\n\n(SELECT e_name AS name, email FROM employees)\nUNION\n(SELECT c_name AS name, email FROM customers);\n\nSpecifying the UNION\'s global order and limiting total rows:\n\n(SELECT name, email FROM employees)\nUNION\n(SELECT name, email FROM customers)\nORDER BY name LIMIT 10;\n\nAdding a constant row:\n\n(SELECT \'John Doe\' AS name, \'john.doe@example.net\' AS email)\nUNION\n(SELECT name, email FROM customers);\n\nDiffering types:\n\nSELECT CAST(\'x\' AS CHAR(1)) UNION SELECT REPEAT(\'y\',4);\n+----------------------+\n| CAST(\'x\' AS CHAR(1)) |\n+----------------------+\n| x |\n| yyyy |\n+----------------------+\n\nReturning the results in order of each individual SELECT by use of a sort\ncolumn:\n\n(SELECT 1 AS sort_column, e_name AS name, email FROM employees)\nUNION\n(SELECT 2, c_name AS name, email FROM customers) ORDER BY sort_column;\n\nDifference between UNION, EXCEPT and INTERSECT. INTERSECT ALL and EXCEPT ALL\nare available from MariaDB 10.5.0.\n\nCREATE TABLE seqs (i INT);\nINSERT INTO seqs VALUES (1),(2),(2),(3),(3),(4),(5),(6);\n\nSELECT i FROM seqs WHERE i <= 3 UNION SELECT i FROM seqs WHERE i>=3;\n+------+\n| i |\n+------+\n| 1 |\n| 2 |\n| 3 |\n| 4 |\n| 5 |\n| 6 |\n+------+\n\nSELECT i FROM seqs WHERE i <= 3 UNION ALL SELECT i FROM seqs WHERE i>=3;\n+------+\n| i |\n+------+\n| 1 |\n| 2 |\n| 2 |\n| 3 |\n| 3 |\n| 3 |\n| 3 |\n| 4 |\n| 5 |\n| 6 |\n+------+\n\nSELECT i FROM seqs WHERE i <= 3 EXCEPT SELECT i FROM seqs WHERE i>=3;\n+------+\n| i |\n+------+\n| 1 |\n| 2 |\n+------+\n\nSELECT i FROM seqs WHERE i <= 3 EXCEPT ALL SELECT i FROM seqs WHERE i>=3;\n+------+\n| i |\n+------+\n| 1 |\n| 2 |\n| 2 |\n+------+\n\nSELECT i FROM seqs WHERE i <= 3 INTERSECT SELECT i FROM seqs WHERE i>=3;\n+------+\n| i |\n+------+\n| 3 |\n+------+\n\nSELECT i FROM seqs WHERE i <= 3 INTERSECT ALL SELECT i FROM seqs WHERE i>=3;\n+------+\n| i |\n+------+\n| 3 |\n| 3 |\n+------+\n\nParentheses for specifying precedence, from MariaDB 10.4.0\n\nCREATE OR REPLACE TABLE t1 (a INT);\nCREATE OR REPLACE TABLE t2 (b INT);\nCREATE OR REPLACE TABLE t3 (c INT);\n\nINSERT INTO t1 VALUES (1),(2),(3),(4);\nINSERT INTO t2 VALUES (5),(6);\nINSERT INTO t3 VALUES (1),(6);\n\n((SELECT a FROM t1) UNION (SELECT b FROM t2)) INTERSECT (SELECT c FROM t3);\n+------+\n| a |\n+------+\n| 1 |\n| 6 |\n+------+\n\n(SELECT a FROM t1) UNION ((SELECT b FROM t2) INTERSECT (SELECT c FROM t3));\n+------+\n| a |\n+------+\n| 1 |\n| 2 |\n| 3 |\n| 4 |\n| 6 |\n+------+\n\nURL: https://mariadb.com/kb/en/union/','','https://mariadb.com/kb/en/union/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (431,27,'EXCEPT','MariaDB starting with 10.3.0\n----------------------------\nEXCEPT was introduced in MariaDB 10.3.0.\n\nThe result of EXCEPT is all records of the left SELECT result set except\nrecords which are in right SELECT result set, i.e. it is subtraction of two\nresult sets. From MariaDB 10.6.1, MINUS is a synonym.\n\nSyntax\n------\n\nSELECT ...\n(INTERSECT [ALL | DISTINCT] | EXCEPT [ALL | DISTINCT] | UNION [ALL |\nDISTINCT]) SELECT ...\n[(INTERSECT [ALL | DISTINCT] | EXCEPT [ALL | DISTINCT] | UNION [ALL |\nDISTINCT]) SELECT ...]\n[ORDER BY [{col_name | expr | position} [ASC | DESC] [, {col_name | expr |\nposition} [ASC | DESC] ...]]]\n[LIMIT {[offset,] row_count | row_count OFFSET offset}\n| OFFSET start { ROW | ROWS }\n| FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } { ONLY | WITH TIES } ]\n\nPlease note:\n\n* Brackets for explicit operation precedence are not supported; use a subquery\nin the FROM clause as a workaround).\n\nDescription\n-----------\n\nMariaDB has supported EXCEPT and INTERSECT in addition to UNION since MariaDB\n10.3.\n\nThe queries before and after EXCEPT must be SELECT or VALUES statements.\n\nAll behavior for naming columns, ORDER BY and LIMIT is the same as for UNION.\nNote that the alternative SELECT ... OFFSET ... FETCH syntax is only\nsupported. This allows us to use the WITH TIES clause.\n\nEXCEPT implicitly supposes a DISTINCT operation.\n\nThe result of EXCEPT is all records of the left SELECT result except records\nwhich are in right SELECT result set, i.e. it is subtraction of two result\nsets.\n\nEXCEPT and UNION have the same operation precedence and INTERSECT has a higher\nprecedence, unless running in Oracle mode, in which case all three have the\nsame precedence.\n\nMariaDB starting with 10.4.0\n----------------------------\n\nParentheses\n-----------\n\nFrom MariaDB 10.4.0, parentheses can be used to specify precedence. Before\nthis, a syntax error would be returned.\n\nMariaDB starting with 10.5.0\n----------------------------\n\nALL/DISTINCT\n------------\n\nEXCEPT ALL and EXCEPT DISTINCT were introduced in MariaDB 10.5.0. The ALL\noperator leaves duplicates intact, while the DISTINCT operator removes\nduplicates. DISTINCT is the default behavior if neither operator is supplied,\nand the only behavior prior to MariaDB 10.5.\n\nExamples\n--------\n\nShow customers which are not employees:\n\n(SELECT e_name AS name, email FROM customers)\nEXCEPT\n(SELECT c_name AS name, email FROM employees);\n\nDifference between UNION, EXCEPT and INTERSECT. INTERSECT ALL and EXCEPT ALL\nare available from MariaDB 10.5.0.\n\nCREATE TABLE seqs (i INT);\nINSERT INTO seqs VALUES (1),(2),(2),(3),(3),(4),(5),(6);\n\nSELECT i FROM seqs WHERE i <= 3 UNION SELECT i FROM seqs WHERE i>=3;\n+------+\n| i |\n+------+\n| 1 |\n| 2 |\n| 3 |\n| 4 |\n| 5 |\n| 6 |\n+------+\n\nSELECT i FROM seqs WHERE i <= 3 UNION ALL SELECT i FROM seqs WHERE i>=3;\n+------+\n| i |\n+------+\n| 1 |\n| 2 |\n| 2 |\n| 3 |\n| 3 |\n| 3 |\n| 3 |\n| 4 |\n| 5 |\n| 6 |\n+------+\n\nSELECT i FROM seqs WHERE i <= 3 EXCEPT SELECT i FROM seqs WHERE i>=3;\n+------+\n| i |\n+------+\n| 1 |\n| 2 |\n+------+\n\nSELECT i FROM seqs WHERE i <= 3 EXCEPT ALL SELECT i FROM seqs WHERE i>=3;\n+------+\n| i |\n+------+\n| 1 |\n| 2 |\n| 2 |\n+------+\n\nSELECT i FROM seqs WHERE i <= 3 INTERSECT SELECT i FROM seqs WHERE i>=3;\n+------+\n| i |\n+------+\n| 3 |\n+------+\n\nSELECT i FROM seqs WHERE i <= 3 INTERSECT ALL SELECT i FROM seqs WHERE i>=3;\n+------+\n| i |\n+------+\n| 3 |\n| 3 |\n+------+\n\nParentheses for specifying precedence, from MariaDB 10.4.0\n\nCREATE OR REPLACE TABLE t1 (a INT);\nCREATE OR REPLACE TABLE t2 (b INT);\nCREATE OR REPLACE TABLE t3 (c INT);\n\nINSERT INTO t1 VALUES (1),(2),(3),(4);\nINSERT INTO t2 VALUES (5),(6);\nINSERT INTO t3 VALUES (1),(6);\n\n((SELECT a FROM t1) UNION (SELECT b FROM t2)) EXCEPT (SELECT c FROM t3);\n+------+\n| a |\n+------+\n| 2 |\n| 3 |\n| 4 |\n| 5 |\n+------+\n\n(SELECT a FROM t1) UNION ((SELECT b FROM t2) EXCEPT (SELECT c FROM t3));\n+------+\n| a |\n+------+\n| 1 |\n| 2 |\n| 3 |\n| 4 |\n| 5 |\n+------+\n\nHere is an example that makes use of the SEQUENCE storage engine and the\nVALUES statement, to generate a numeric sequence and remove some arbitrary\nnumbers from it:\n\n(SELECT seq FROM seq_1_to_10) EXCEPT VALUES (2), (3), (4);\n+-----+\n| seq |\n+-----+\n| 1 |\n| 5 |\n| 6 |\n| 7 |\n| 8 |\n| 9 |\n| 10 |\n+-----+\n\nURL: https://mariadb.com/kb/en/except/','','https://mariadb.com/kb/en/except/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (432,27,'INTERSECT','MariaDB starting with 10.3.0\n----------------------------\nINTERSECT was introduced in MariaDB 10.3.0.\n\nThe result of an intersect is the intersection of right and left SELECT\nresults, i.e. only records that are present in both result sets will be\nincluded in the result of the operation.\n\nSyntax\n------\n\nSELECT ...\n(INTERSECT [ALL | DISTINCT] | EXCEPT [ALL | DISTINCT] | UNION [ALL |\nDISTINCT]) SELECT ...\n[(INTERSECT [ALL | DISTINCT] | EXCEPT [ALL | DISTINCT] | UNION [ALL |\nDISTINCT]) SELECT ...]\n[ORDER BY [column [, column ...]]]\n[LIMIT {[offset,] row_count | row_count OFFSET offset}]\n\nDescription\n-----------\n\nMariaDB has supported INTERSECT (as well as EXCEPT) in addition to UNION since\nMariaDB 10.3.\n\nAll behavior for naming columns, ORDER BY and LIMIT is the same as for UNION.\n\nINTERSECT implicitly supposes a DISTINCT operation.\n\nThe result of an intersect is the intersection of right and left SELECT\nresults, i.e. only records that are present in both result sets will be\nincluded in the result of the operation.\n\nINTERSECT has higher precedence than UNION and EXCEPT (unless running running\nin Oracle mode, in which case all three have the same precedence). If possible\nit will be executed linearly but if not it will be translated to a subquery in\nthe FROM clause:\n\n(select a,b from t1)\nunion\n(select c,d from t2)\nintersect\n(select e,f from t3)\nunion\n(select 4,4);\n\nwill be translated to:\n\n(select a,b from t1)\nunion\nselect c,d from\n ((select c,d from t2)\n intersect\n (select e,f from t3)) dummy_subselect\nunion\n(select 4,4)\n\nMariaDB starting with 10.4.0\n----------------------------\n\nParentheses\n-----------\n\nFrom MariaDB 10.4.0, parentheses can be used to specify precedence. Before\nthis, a syntax error would be returned.\n\nMariaDB starting with 10.5.0\n----------------------------\n\nALL/DISTINCT\n------------\n\nINTERSECT ALL and INTERSECT DISTINCT were introduced in MariaDB 10.5.0. The\nALL operator leaves duplicates intact, while the DISTINCT operator removes\nduplicates. DISTINCT is the default behavior if neither operator is supplied,\nand the only behavior prior to MariaDB 10.5.\n\nExamples\n--------\n\nShow customers which are employees:\n\n(SELECT e_name AS name, email FROM employees)\nINTERSECT\n(SELECT c_name AS name, email FROM customers);\n\nDifference between UNION, EXCEPT and INTERSECT. INTERSECT ALL and EXCEPT ALL\nare available from MariaDB 10.5.0.\n\nCREATE TABLE seqs (i INT);\nINSERT INTO seqs VALUES (1),(2),(2),(3),(3),(4),(5),(6);\n\nSELECT i FROM seqs WHERE i <= 3 UNION SELECT i FROM seqs WHERE i>=3;\n+------+\n| i |\n+------+\n| 1 |\n| 2 |\n| 3 |\n| 4 |\n| 5 |\n| 6 |\n+------+\n\nSELECT i FROM seqs WHERE i <= 3 UNION ALL SELECT i FROM seqs WHERE i>=3;\n+------+\n| i |\n+------+\n| 1 |\n| 2 |\n| 2 |\n| 3 |\n| 3 |\n| 3 |\n| 3 |\n| 4 |\n| 5 |\n| 6 |\n+------+\n\nSELECT i FROM seqs WHERE i <= 3 EXCEPT SELECT i FROM seqs WHERE i>=3;\n+------+\n| i |\n+------+\n| 1 |\n| 2 |\n+------+\n\nSELECT i FROM seqs WHERE i <= 3 EXCEPT ALL SELECT i FROM seqs WHERE i>=3;\n+------+\n| i |\n+------+\n| 1 |\n| 2 |\n| 2 |\n+------+\n\nSELECT i FROM seqs WHERE i <= 3 INTERSECT SELECT i FROM seqs WHERE i>=3;\n+------+\n| i |\n+------+\n| 3 |\n+------+\n\nSELECT i FROM seqs WHERE i <= 3 INTERSECT ALL SELECT i FROM seqs WHERE i>=3;\n+------+\n| i |\n+------+\n| 3 |\n| 3 |\n+------+\n\nParentheses for specifying precedence, from MariaDB 10.4.0\n\nCREATE OR REPLACE TABLE t1 (a INT);\nCREATE OR REPLACE TABLE t2 (b INT);\nCREATE OR REPLACE TABLE t3 (c INT);\n\nINSERT INTO t1 VALUES (1),(2),(3),(4);\nINSERT INTO t2 VALUES (5),(6);\nINSERT INTO t3 VALUES (1),(6);\n\n((SELECT a FROM t1) UNION (SELECT b FROM t2)) INTERSECT (SELECT c FROM t3);\n+------+\n| a |\n+------+\n| 1 |\n| 6 |\n+------+\n\n(SELECT a FROM t1) UNION ((SELECT b FROM t2) INTERSECT (SELECT c FROM t3));\n+------+\n| a |\n+------+\n| 1 |\n| 2 |\n| 3 |\n| 4 |\n| 6 |\n+------+\n\nURL: https://mariadb.com/kb/en/intersect/','','https://mariadb.com/kb/en/intersect/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (433,27,'Precedence Control in Table Operations','MariaDB starting with 10.4.0\n----------------------------\nBeginning in MariaDB 10.4, you can control the ordering of execution on table\noperations using parentheses.\n\nSyntax\n------\n\n( expression )\n[ORDER BY [column[, column...]]]\n[LIMIT {[offset,] row_count | row_count OFFSET offset}]\n\nDescription\n-----------\n\nUsing parentheses in your SQL allows you to control the order of execution for\nSELECT statements and Table Value Constructor, including UNION, EXCEPT, and\nINTERSECT operations. MariaDB executes the parenthetical expression before the\nrest of the statement. You can then use ORDER BY and LIMIT clauses the further\norganize the result-set.\n\nNote: In practice, the Optimizer may rearrange the exact order in which\nMariaDB executes different parts of the statement. When it calculates the\nresult-set, however, it returns values as though the parenthetical expression\nwere executed first.\n\nExample\n-------\n\nCREATE TABLE test.t1 (num INT);\n\nINSERT INTO test.t1 VALUES (1),(2),(3);\n\n(SELECT * FROM test.t1 \n UNION \n VALUES (10)) \nINTERSECT \nVALUES (1),(3),(10),(11);\n+------+\n| num |\n+------+\n| 1 |\n| 3 |\n| 10 |\n+------+\n\n((SELECT * FROM test.t1 \n UNION\n VALUES (10))\n INTERSECT \n VALUES (1),(3),(10),(11)) \nORDER BY 1 DESC;\n+------+\n| num |\n+------+\n| 10 |\n| 3 |\n| 1 |\n+------+\n\nURL: https://mariadb.com/kb/en/precedence-control-in-table-operations/','','https://mariadb.com/kb/en/precedence-control-in-table-operations/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (434,27,'LIMIT','Description\n-----------\n\nUse the LIMIT clause to restrict the number of returned rows. When you use a\nsingle integer n with LIMIT, the first n rows will be returned. Use the ORDER\nBY clause to control which rows come first. You can also select a number of\nrows after an offset using either of the following:\n\nLIMIT offset, row_count\nLIMIT row_count OFFSET offset\n\nWhen you provide an offset m with a limit n, the first m rows will be ignored,\nand the following n rows will be returned.\n\nExecuting an UPDATE with the LIMIT clause is not safe for replication. LIMIT 0\nis an exception to this rule (see MDEV-6170).\n\nThere is a LIMIT ROWS EXAMINED optimization which provides the means to\nterminate the execution of SELECT statements which examine too many rows, and\nthus use too many resources. See LIMIT ROWS EXAMINED.\n\nMulti-Table Updates\n-------------------\n\nMariaDB starting with 10.3.2\n----------------------------\nUntil MariaDB 10.3.1, it was not possible to use LIMIT (or ORDER BY) in a\nmulti-table UPDATE statement. This restriction was lifted in MariaDB 10.3.2.\n\nGROUP_CONCAT\n------------\n\nMariaDB starting with 10.3.2\n----------------------------\nStarting from MariaDB 10.3.3, it is possible to use LIMIT with GROUP_CONCAT().\n\nExamples\n--------\n\nCREATE TABLE members (name VARCHAR(20));\nINSERT INTO members VALUES(\'Jagdish\'),(\'Kenny\'),(\'Rokurou\'),(\'Immaculada\');\n\nSELECT * FROM members;\n+------------+\n| name |\n+------------+\n| Jagdish |\n| Kenny |\n| Rokurou |\n| Immaculada |\n+------------+\n\nSelect the first two names (no ordering specified):\n\nSELECT * FROM members LIMIT 2;\n+---------+\n| name |\n+---------+\n| Jagdish |\n| Kenny |\n+---------+\n\nAll the names in alphabetical order:\n\nSELECT * FROM members ORDER BY name;\n+------------+\n| name |\n+------------+\n| Immaculada |\n| Jagdish |\n| Kenny |\n| Rokurou |\n+------------+\n\nThe first two names, ordered alphabetically:\n\nSELECT * FROM members ORDER BY name LIMIT 2;\n+------------+\n| name |\n+------------+\n| Immaculada |\n| Jagdish |\n+------------+\n\nThe third name, ordered alphabetically (the first name would be offset zero,\nso the third is offset two):\n\nSELECT * FROM members ORDER BY name LIMIT 2,1;\n+-------+\n| name |\n+-------+\n| Kenny |\n+-------+\n\nFrom MariaDB 10.3.2, LIMIT can be used in a multi-table update:\n\nCREATE TABLE warehouse (product_id INT, qty INT);\nINSERT INTO warehouse VALUES (1,100),(2,100),(3,100),(4,100);\n\nCREATE TABLE store (product_id INT, qty INT);\nINSERT INTO store VALUES (1,5),(2,5),(3,5),(4,5);\n\nUPDATE warehouse,store SET warehouse.qty = warehouse.qty-2, store.qty =\nstore.qty+2 \n WHERE (warehouse.product_id = store.product_id AND store.product_id >= 1)\n ORDER BY store.product_id DESC LIMIT 2;\n\nSELECT * FROM warehouse;\n+------------+------+\n| product_id | qty |\n+------------+------+\n| 1 | 100 |\n| 2 | 100 |\n| 3 | 98 |\n| 4 | 98 |\n+------------+------+\n\nSELECT * FROM store;\n+------------+------+\n| product_id | qty |\n+------------+------+\n| 1 | 5 |\n| 2 | 5 |\n| 3 | 7 |\n| 4 | 7 |\n+------------+------+\n\nFrom MariaDB 10.3.3, LIMIT can be used with GROUP_CONCAT, so, for example,\ngiven the following table:\n\nCREATE TABLE d (dd DATE, cc INT);\n\nINSERT INTO d VALUES (\'2017-01-01\',1);\nINSERT INTO d VALUES (\'2017-01-02\',2);\nINSERT INTO d VALUES (\'2017-01-04\',3);\n\nthe following query:\n\nSELECT SUBSTRING_INDEX(GROUP_CONCAT(CONCAT_WS(\":\",dd,cc) ORDER BY cc\nDESC),\",\",1) FROM d;\n+----------------------------------------------------------------------------+\n| SUBSTRING_INDEX(GROUP_CONCAT(CONCAT_WS(\":\",dd,cc) ORDER BY cc DESC),\",\",1) |\n+----------------------------------------------------------------------------+\n| 2017-01-04:3 |\n+----------------------------------------------------------------------------+\n\ncan be more simply rewritten as:\n\nSELECT GROUP_CONCAT(CONCAT_WS(\":\",dd,cc) ORDER BY cc DESC LIMIT 1) FROM d;\n+-------------------------------------------------------------+\n| GROUP_CONCAT(CONCAT_WS(\":\",dd,cc) ORDER BY cc DESC LIMIT 1) |\n+-------------------------------------------------------------+\n| 2017-01-04:3 |\n+-------------------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/limit/','','https://mariadb.com/kb/en/limit/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (435,27,'ORDER BY','Description\n-----------\n\nUse the ORDER BY clause to order a resultset, such as that are returned from a\nSELECT statement. You can specify just a column or use any expression with\nfunctions. If you are using the GROUP BY clause, you can use grouping\nfunctions in ORDER BY. Ordering is done after grouping.\n\nYou can use multiple ordering expressions, separated by commas. Rows will be\nsorted by the first expression, then by the second expression if they have the\nsame value for the first, and so on.\n\nYou can use the keywords ASC and DESC after each ordering expression to force\nthat ordering to be ascending or descending, respectively. Ordering is\nascending by default.\n\nYou can also use a single integer as the ordering expression. If you use an\ninteger n, the results will be ordered by the nth column in the select\nexpression.\n\nWhen string values are compared, they are compared as if by the STRCMP\nfunction. STRCMP ignores trailing whitespace and may normalize characters and\nignore case, depending on the collation in use.\n\nDuplicated entries in the ORDER BY clause are removed.\n\nORDER BY can also be used to order the activities of a DELETE or UPDATE\nstatement (usually with the LIMIT clause).\n\nMariaDB starting with 10.3.2\n----------------------------\nUntil MariaDB 10.3.1, it was not possible to use ORDER BY (or LIMIT) in a\nmulti-table UPDATE statement. This restriction was lifted in MariaDB 10.3.2.\n\nMariaDB starting with 10.5\n--------------------------\nFrom MariaDB 10.5, MariaDB allows packed sort keys and values of non-sorted\nfields in the sort buffer. This can make filesort temporary files much smaller\nwhen VARCHAR, CHAR or BLOBs are used, notably speeding up some ORDER BY sorts.\n\nExamples\n--------\n\nCREATE TABLE seq (i INT, x VARCHAR(1));\nINSERT INTO seq VALUES (1,\'a\'), (2,\'b\'), (3,\'b\'), (4,\'f\'), (5,\'e\');\n\nSELECT * FROM seq ORDER BY i;\n+------+------+\n| i | x |\n+------+------+\n| 1 | a |\n| 2 | b |\n| 3 | b |\n| 4 | f |\n| 5 | e |\n+------+------+\n\nSELECT * FROM seq ORDER BY i DESC;\n+------+------+\n| i | x |\n+------+------+\n| 5 | e |\n| 4 | f |\n| 3 | b |\n| 2 | b |\n| 1 | a |\n+------+------+\n\nSELECT * FROM seq ORDER BY x,i;\n+------+------+\n| i | x |\n+------+------+\n| 1 | a |\n| 2 | b |\n| 3 | b |\n| 5 | e |\n| 4 | f |\n+------+------+\n\nORDER BY in an UPDATE statement, in conjunction with LIMIT:\n\nUPDATE seq SET x=\'z\' WHERE x=\'b\' ORDER BY i DESC LIMIT 1;\n\nSELECT * FROM seq;\n+------+------+\n| i | x |\n+------+------+\n| 1 | a |\n| 2 | b |\n| 3 | z |\n| 4 | f |\n| 5 | e |\n+------+------+\n\nFrom MariaDB 10.3.2, ORDER BY can be used in a multi-table update:\n\nCREATE TABLE warehouse (product_id INT, qty INT);\nINSERT INTO warehouse VALUES (1,100),(2,100),(3,100),(4,100);\n\nCREATE TABLE store (product_id INT, qty INT);\nINSERT INTO store VALUES (1,5),(2,5),(3,5),(4,5);\n\nUPDATE warehouse,store SET warehouse.qty = warehouse.qty-2, store.qty =\nstore.qty+2 \n WHERE (warehouse.product_id = store.product_id AND store.product_id >= 1)\n ORDER BY store.product_id DESC LIMIT 2;\n\nSELECT * FROM warehouse;\n+------------+------+\n| product_id | qty |\n+------------+------+\n| 1 | 100 |\n| 2 | 100 |\n| 3 | 98 |\n| 4 | 98 |\n+------------+------+\n\nSELECT * FROM store;\n+------------+------+\n| product_id | qty |\n+------------+------+\n| 1 | 5 |\n| 2 | 5 |\n| 3 | 7 |\n| 4 | 7 |\n+------------+------+\n\nURL: https://mariadb.com/kb/en/order-by/','','https://mariadb.com/kb/en/order-by/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (436,27,'GROUP BY','Use the GROUP BY clause in a SELECT statement to group rows together that have\nthe same value in one or more column, or the same computed value using\nexpressions with any functions and operators except grouping functions. When\nyou use a GROUP BY clause, you will get a single result row for each group of\nrows that have the same value for the expression given in GROUP BY.\n\nWhen grouping rows, grouping values are compared as if by the = operator. For\nstring values, the = operator ignores trailing whitespace and may normalize\ncharacters and ignore case, depending on the collation in use.\n\nYou can use any of the grouping functions in your select expression. Their\nvalues will be calculated based on all the rows that have been grouped\ntogether for each result row. If you select a non-grouped column or a value\ncomputed from a non-grouped column, it is undefined which row the returned\nvalue is taken from. This is not permitted if the ONLY_FULL_GROUP_BY SQL_MODE\nis used.\n\nYou can use multiple expressions in the GROUP BY clause, separated by commas.\nRows are grouped together if they match on each of the expressions.\n\nYou can also use a single integer as the grouping expression. If you use an\ninteger n, the results will be grouped by the nth column in the select\nexpression.\n\nThe WHERE clause is applied before the GROUP BY clause. It filters\nnon-aggregated rows before the rows are grouped together. To filter grouped\nrows based on aggregate values, use the HAVING clause. The HAVING clause takes\nany expression and evaluates it as a boolean, just like the WHERE clause. You\ncan use grouping functions in the HAVING clause. As with the select\nexpression, if you reference non-grouped columns in the HAVING clause, the\nbehavior is undefined.\n\nBy default, if a GROUP BY clause is present, the rows in the output will be\nsorted by the expressions used in the GROUP BY. You can also specify ASC or\nDESC (ascending, descending) after those expressions, like in ORDER BY. The\ndefault is ASC.\n\nIf you want the rows to be sorted by another field, you can add an explicit\nORDER BY. If you don\'t want the result to be ordered, you can add ORDER BY\nNULL.\n\nWITH ROLLUP\n-----------\n\nThe WITH ROLLUP modifer adds extra rows to the resultset that represent\nsuper-aggregate summaries. For a full description with examples, see SELECT\nWITH ROLLUP.\n\nGROUP BY Examples\n-----------------\n\nConsider the following table that records how many times each user has played\nand won a game:\n\nCREATE TABLE plays (name VARCHAR(16), plays INT, wins INT);\nINSERT INTO plays VALUES \n (\"John\", 20, 5),\n (\"Robert\", 22, 8),\n (\"Wanda\", 32, 8),\n (\"Susan\", 17, 3);\n\nGet a list of win counts along with a count:\n\nSELECT wins, COUNT(*) FROM plays GROUP BY wins;\n+------+----------+\n| wins | COUNT(*) |\n+------+----------+\n| 3 | 1 |\n| 5 | 1 |\n| 8 | 2 |\n+------+----------+\n3 rows in set (0.00 sec)\n\nThe GROUP BY expression can be a computed value, and can refer back to an\nidentifer specified with AS. Get a list of win averages along with a count:\n\nSELECT (wins / plays) AS winavg, COUNT(*) FROM plays GROUP BY winavg;\n+--------+----------+\n| winavg | COUNT(*) |\n+--------+----------+\n| 0.1765 | 1 |\n| 0.2500 | 2 |\n| 0.3636 | 1 |\n+--------+----------+\n3 rows in set (0.00 sec)\n\nYou can use any grouping function in the select expression. For each win\naverage as above, get a list of the average play count taken to get that\naverage:\n\nSELECT (wins / plays) AS winavg, AVG(plays) FROM plays \n GROUP BY winavg;\n+--------+------------+\n| winavg | AVG(plays) |\n+--------+------------+\n| 0.1765 | 17.0000 |\n| 0.2500 | 26.0000 |\n| 0.3636 | 22.0000 |\n+--------+------------+\n3 rows in set (0.00 sec)\n\nYou can filter on aggregate information using the HAVING clause. The HAVING\nclause is applied after GROUP BY and allows you to filter on aggregate data\nthat is not available to the WHERE clause. Restrict the above example to\nresults that involve an average number of plays over 20:\n\nSELECT (wins / plays) AS winavg, AVG(plays) FROM plays \n GROUP BY winavg HAVING AVG(plays) > 20;\n+--------+------------+\n| winavg | AVG(plays) |\n+--------+------------+\n| 0.2500 | 26.0000 |\n| 0.3636 | 22.0000 |\n+--------+------------+\n2 rows in set (0.00 sec)\n\nURL: https://mariadb.com/kb/en/group-by/','','https://mariadb.com/kb/en/group-by/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (437,27,'WITH','MariaDB starting with 10.2.1\n----------------------------\nCommon Table Expressions were introduced in MariaDB 10.2.1.\n\nSyntax\n------\n\nWITH [RECURSIVE] table_reference [(columns_list)] AS (\n SELECT ...\n)\n[CYCLE cycle_column_list RESTRICT]\nSELECT ...\n\nDescription\n-----------\n\nThe WITH keyword signifies a Common Table Expression (CTE). It allows you to\nrefer to a subquery expression many times in a query, as if having a temporary\ntable that only exists for the duration of a query.\n\nThere are two kinds of CTEs:\n\n* Non-Recursive\n* Recursive (signified by the RECURSIVE keyword, supported since MariaDB\n10.2.2)\n\nYou can use table_reference as any normal table in the external SELECT part.\nYou can also use WITH in subqueries, as well as with EXPLAIN and SELECT.\n\nPoorly-formed recursive CTEs can in theory cause infinite loops. The\nmax_recursive_iterations system variable limits the number of recursions.\n\nCYCLE ... RESTRICT\n------------------\n\nMariaDB starting with 10.5.2\n----------------------------\nThe CYCLE clause enables CTE cycle detection, avoiding excessive or infinite\nloops, MariaDB supports a relaxed, non-standard grammar.\n\nThe SQL Standard permits a CYCLE clause, as follows:\n\nWITH RECURSIVE ... (\n ...\n)\nCYCLE <cycle column list>\nSET <cycle mark column> TO <cycle mark value> DEFAULT <non-cycle mark value>\nUSING <path column>\n\nwhere all clauses are mandatory.\n\nMariaDB does not support this, but from 10.5.2 permits a non-standard relaxed\ngrammar, as follows:\n\nWITH RECURSIVE ... (\n ...\n)\nCYCLE <cycle column list> RESTRICT\n\nWith the use of CYCLE ... RESTRICT it makes no difference whether the CTE uses\nUNION ALL or UNION DISTINCT anymore. UNION ALL means \"all rows, but without\ncycles\", which is exactly what the CYCLE clause enables. And UNION DISTINCT\nmeans all rows should be different, which, again, is what will happen — as\nuniqueness is enforced over a subset of columns, complete rows will\nautomatically all be different.\n\nExamples\n--------\n\nBelow is an example with the WITH at the top level:\n\nWITH t AS (SELECT a FROM t1 WHERE b >= \'c\') \n SELECT * FROM t2, t WHERE t2.c = t.a;\n\nThe example below uses WITH in a subquery:\n\nSELECT t1.a, t1.b FROM t1, t2\n WHERE t1.a > t2.c\n AND t2.c IN(WITH t AS (SELECT * FROM t1 WHERE t1.a < 5)\n SELECT t2.c FROM t2, t WHERE t2.c = t.a);\n\nBelow is an example of a Recursive CTE:\n\nWITH RECURSIVE ancestors AS \n ( SELECT * FROM folks\n WHERE name=\"Alex\"\n UNION\n SELECT f.*\n FROM folks AS f, ancestors AS a\n WHERE f.id = a.father OR f.id = a.mother )\nSELECT * FROM ancestors;\n\nTake the following structure, and data,\n\nCREATE TABLE t1 (from_ int, to_ int);\nINSERT INTO t1 VALUES (1,2), (1,100), (2,3), (3,4), (4,1);\nSELECT * FROM t1;\n+-------+------+\n| from_ | to_ |\n+-------+------+\n| 1 | 2 |\n| 1 | 100 |\n| 2 | 3 |\n| 3 | 4 |\n| 4 | 1 |\n+-------+------+\n\nGiven the above, the following query would theoretically result in an infinite\nloop due to the last record in t1 (note that max_recursive_iterations is set\nto 10 for the purposes of this example, to avoid the excessive number of\ncycles):\n\nSET max_recursive_iterations=10;\n\nWITH RECURSIVE cte (depth, from_, to_) AS ( \n SELECT 0,1,1 UNION DISTINCT SELECT depth+1, t1.from_, t1.to_\n FROM t1, cte WHERE t1.from_ = cte.to_\n) \nSELECT * FROM cte;\n+-------+-------+------+\n| depth | from_ | to_ |\n+-------+-------+------+\n| 0 | 1 | 1 |\n| 1 | 1 | 2 |\n| 1 | 1 | 100 |\n| 2 | 2 | 3 |\n| 3 | 3 | 4 |\n| 4 | 4 | 1 |\n| 5 | 1 | 2 |\n| 5 | 1 | 100 |\n| 6 | 2 | 3 |\n| 7 | 3 | 4 |\n| 8 | 4 | 1 |\n| 9 | 1 | 2 |\n| 9 | 1 | 100 |\n| 10 | 2 | 3 |\n+-------+-------+------+\n\nHowever, the CYCLE ... RESTRICT clause (from MariaDB 10.5.2) can overcome this:\n\nWITH RECURSIVE cte (depth, from_, to_) AS ( \n SELECT 0,1,1 UNION SELECT depth+1, t1.from_, t1.to_\n FROM t1, cte WHERE t1.from_ = cte.to_\n) \nCYCLE from_, to_ RESTRICT \nSELECT * FROM cte;\n+-------+-------+------+\n| depth | from_ | to_ |\n+-------+-------+------+\n| 0 | 1 | 1 |\n| 1 | 1 | 2 |\n| 1 | 1 | 100 |\n| 2 | 2 | 3 |\n| 3 | 3 | 4 |\n| 4 | 4 | 1 |\n+-------+-------+------+\n\nURL: https://mariadb.com/kb/en/with/','','https://mariadb.com/kb/en/with/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (438,27,'Non-Recursive Common Table Expressions Overview','Common Table Expressions (CTEs) are a standard SQL feature, and are\nessentially temporary named result sets. There are two kinds of CTEs:\nNon-Recursive, which this article covers; and Recursive.\n\nMariaDB starting with 10.2.1\n----------------------------\nCommon table expressions were introduced in MariaDB 10.2.1.\n\nNon-Recursive CTEs\n------------------\n\nThe WITH keyword signifies a CTE. It is given a name, followed by a body (the\nmain query) as follows:\n\nCTEs are similar to derived tables. For example\n\nWITH engineers AS \n ( SELECT * FROM employees\n WHERE dept = \'Engineering\' )\n\nSELECT * FROM engineers\nWHERE ...\n\nSELECT * FROM\n ( SELECT * FROM employees\n WHERE dept = \'Engineering\' ) AS engineers\nWHERE\n...\n\nA non-recursive CTE is basically a query-local VIEW. There are several\nadvantages and caveats to them. The syntax is more readable than nested FROM\n(SELECT ...). A CTE can refer to another and it can be referenced from\nmultiple places.\n\nA CTE referencing Another CTE\n-----------------------------\n\nUsing this format makes for a more readable SQL than a nested FROM(SELECT ...)\nclause. Below is an example of this:\n\nWITH engineers AS (\nSELECT * FROM employees\nWHERE dept IN(\'Development\',\'Support\') ),\neu_engineers AS ( SELECT * FROM engineers WHERE country IN(\'NL\',...) )\nSELECT\n...\nFROM eu_engineers;\n\nMultiple Uses of a CTE\n----------------------\n\nThis can be an \'anti-self join\', for example:\n\nWITH engineers AS (\nSELECT * FROM employees\nWHERE dept IN(\'Development\',\'Support\') )\n\nSELECT * FROM engineers E1\nWHERE NOT EXISTS\n (SELECT 1 FROM engineers E2\n WHERE E2.country=E1.country\n AND E2.name <> E1.name );\n\nOr, for year-over-year comparisons, for example:\n\nWITH sales_product_year AS (\nSELECT product, YEAR(ship_date) AS year,\nSUM(price) AS total_amt\nFROM item_sales\nGROUP BY product, year )\n\nSELECT *\nFROM sales_product_year CUR,\nsales_product_year PREV,\nWHERE CUR.product=PREV.product \nAND CUR.year=PREV.year + 1 \nAND CUR.total_amt > PREV.total_amt\n\nAnother use is to compare individuals against their group. Below is an example\nof how this might be executed:\n\nWITH sales_product_year AS (\nSELECT product,\nYEAR(ship_date) AS year,\nSUM(price) AS total_amt\nFROM item_sales\nGROUP BY product, year\n)\n\nSELECT * \nFROM sales_product_year S1\nWHERE\ntotal_amt > \n (SELECT 0.1 * SUM(total_amt)\n FROM sales_product_year S2\n WHERE S2.year = S1.year)\n\nURL: https://mariadb.com/kb/en/non-recursive-common-table-expressions-overview/','','https://mariadb.com/kb/en/non-recursive-common-table-expressions-overview/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (439,27,'Recursive Common Table Expressions Overview','MariaDB starting with 10.2.2\n----------------------------\nRecursive Common Table Expressions have been supported since MariaDB 10.2.2.\n\nCommon Table Expressions (CTEs) are a standard SQL feature, and are\nessentially temporary named result sets. CTEs first appeared in the SQL\nstandard in 1999, and the first implementations began appearing in 2007.\n\nThere are two kinds of CTEs:\n\n* Non-recursive\n* Recursive, which this article covers.\n\nSQL is generally poor at recursive structures.\n\nCTEs permit a query to reference itself. A recursive CTE will repeatedly\nexecute subsets of the data until it obtains the complete result set. This\nmakes it particularly useful for handing hierarchical or tree-structured data.\nmax_recursive_iterations avoids infinite loops.\n\nSyntax example\n--------------\n\nWITH RECURSIVE signifies a recursive CTE. It is given a name, followed by a\nbody (the main query) as follows:\n\nComputation\n-----------\n\nGiven the following structure:\n\nFirst execute the anchor part of the query:\n\nNext, execute the recursive part of the query:\n\nSummary so far\n--------------\n\nwith recursive R as (\n select anchor_data\n union [all]\n select recursive_part\n from R, ...\n)\nselect ...\n\n* Compute anchor_data\n* Compute recursive_part to get the new data\n* if (new data is non-empty) goto 2;\n\nCAST to avoid truncating data\n-----------------------------\n\nAs currently implemented by MariaDB and by the SQL Standard, data may be\ntruncated if not correctly cast. It is necessary to CAST the column to the\ncorrect width if the CTE\'s recursive part produces wider values for a column\nthan the CTE\'s nonrecursive part. Some other DBMS give an error in this\nsituation, and MariaDB\'s behavior may change in future - see MDEV-12325. See\nthe examples below.\n\nExamples\n--------\n\nTransitive closure - determining bus destinations\n-------------------------------------------------\n\nSample data:\n\nCREATE TABLE bus_routes (origin varchar(50), dst varchar(50));\nINSERT INTO bus_routes VALUES \n (\'New York\', \'Boston\'),\n (\'Boston\', \'New York\'),\n (\'New York\', \'Washington\'),\n (\'Washington\', \'Boston\'),\n (\'Washington\', \'Raleigh\');\n\nNow, we want to return the bus destinations with New York as the origin:\n\nWITH RECURSIVE bus_dst as ( \n SELECT origin as dst FROM bus_routes WHERE origin=\'New York\'\n UNION\n SELECT bus_routes.dst FROM bus_routes JOIN bus_dst ON bus_dst.dst=\nbus_routes.origin \n) \nSELECT * FROM bus_dst;\n+------------+\n| dst |\n+------------+\n| New York |\n| Boston |\n| Washington |\n| Raleigh |\n+------------+\n\nThe above example is computed as follows:\n\nFirst, the anchor data is calculated:\n\n* Starting from New York\n* Boston and Washington are added\n\nNext, the recursive part:\n\n* Starting from Boston and then Washington\n* Raleigh is added\n* UNION excludes nodes that are already present.\n\nComputing paths - determining bus routes\n----------------------------------------\n\nThis time, we are trying to get bus routes such as \"New York -> Washington ->\nRaleigh\".\n\nUsing the same sample data as the previous example:\n\nWITH RECURSIVE paths (cur_path, cur_dest) AS (\n SELECT origin, origin FROM bus_routes WHERE origin=\'New York\'\n UNION\n SELECT CONCAT(paths.cur_path, \',\', bus_routes.dst), bus_routes.dst\n FROM paths\n JOIN bus_routes\n ON paths.cur_dest = bus_routes.origin AND\n NOT FIND_IN_SET(bus_routes.dst, paths.cur_path)\n) \nSELECT * FROM paths;\n+-----------------------------+------------+\n| cur_path | cur_dest |\n+-----------------------------+------------+\n| New York | New York |\n| New York,Boston | Boston |\n| New York,Washington | Washington |\n| New York,Washington,Boston | Boston |\n| New York,Washington,Raleigh | Raleigh |\n+-----------------------------+------------+\n\nCAST to avoid data truncation\n-----------------------------\n\nIn the following example, data is truncated because the results are not\nspecifically cast to a wide enough type:\n\nWITH RECURSIVE tbl AS (\n SELECT NULL AS col\n UNION\n SELECT \"THIS NEVER SHOWS UP\" AS col FROM tbl\n)\nSELECT col FROM tbl\n+------+\n| col |\n+------+\n| NULL |\n| |\n+------+\n\nExplicitly use CAST to overcome this:\n\nWITH RECURSIVE tbl AS (\n SELECT CAST(NULL AS CHAR(50)) AS col\n UNION SELECT \"THIS NEVER SHOWS UP\" AS col FROM tbl\n) \nSELECT * FROM tbl;\n+---------------------+\n| col |\n+---------------------+\n| NULL |\n| THIS NEVER SHOWS UP |\n+---------------------+\n\nURL: https://mariadb.com/kb/en/recursive-common-table-expressions-overview/','','https://mariadb.com/kb/en/recursive-common-table-expressions-overview/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (440,27,'SELECT WITH ROLLUP','Syntax\n------\n\nSee SELECT for the full syntax.\n\nDescription\n-----------\n\nThe WITH ROLLUP modifier adds extra rows to the resultset that represent\nsuper-aggregate summaries. The super-aggregated column is represented by a\nNULL value. Multiple aggregates over different columns will be added if there\nare multiple GROUP BY columns.\n\nThe LIMIT clause can be used at the same time, and is applied after the WITH\nROLLUP rows have been added.\n\nWITH ROLLUP cannot be used with ORDER BY. Some sorting is still possible by\nusing ASC or DESC clauses with the GROUP BY column, although the\nsuper-aggregate rows will always be added last.\n\nExamples\n--------\n\nThese examples use the following sample table\n\nCREATE TABLE booksales ( \n country VARCHAR(35), genre ENUM(\'fiction\',\'non-fiction\'), year YEAR, sales\nINT);\n\nINSERT INTO booksales VALUES\n (\'Senegal\',\'fiction\',2014,12234), (\'Senegal\',\'fiction\',2015,15647),\n (\'Senegal\',\'non-fiction\',2014,64980), (\'Senegal\',\'non-fiction\',2015,78901),\n (\'Paraguay\',\'fiction\',2014,87970), (\'Paraguay\',\'fiction\',2015,76940),\n (\'Paraguay\',\'non-fiction\',2014,8760), (\'Paraguay\',\'non-fiction\',2015,9030);\n\nThe addition of the WITH ROLLUP modifier in this example adds an extra row\nthat aggregates both years:\n\nSELECT year, SUM(sales) FROM booksales GROUP BY year;\n+------+------------+\n| year | SUM(sales) |\n+------+------------+\n| 2014 | 173944 |\n| 2015 | 180518 |\n+------+------------+\n2 rows in set (0.08 sec)\n\nSELECT year, SUM(sales) FROM booksales GROUP BY year WITH ROLLUP;\n+------+------------+\n| year | SUM(sales) |\n+------+------------+\n| 2014 | 173944 |\n| 2015 | 180518 |\n| NULL | 354462 |\n+------+------------+\n\nIn the following example, each time the genre, the year or the country change,\nanother super-aggregate row is added:\n\nSELECT country, year, genre, SUM(sales) \n FROM booksales GROUP BY country, year, genre;\n+----------+------+-------------+------------+\n| country | year | genre | SUM(sales) |\n+----------+------+-------------+------------+\n| Paraguay | 2014 | fiction | 87970 |\n| Paraguay | 2014 | non-fiction | 8760 |\n| Paraguay | 2015 | fiction | 76940 |\n| Paraguay | 2015 | non-fiction | 9030 |\n| Senegal | 2014 | fiction | 12234 |\n| Senegal | 2014 | non-fiction | 64980 |\n| Senegal | 2015 | fiction | 15647 |\n| Senegal | 2015 | non-fiction | 78901 |\n+----------+------+-------------+------------+\n\nSELECT country, year, genre, SUM(sales) \n FROM booksales GROUP BY country, year, genre WITH ROLLUP;\n+----------+------+-------------+------------+\n| country | year | genre | SUM(sales) |\n+----------+------+-------------+------------+\n| Paraguay | 2014 | fiction | 87970 |\n| Paraguay | 2014 | non-fiction | 8760 |\n| Paraguay | 2014 | NULL | 96730 |\n| Paraguay | 2015 | fiction | 76940 |\n| Paraguay | 2015 | non-fiction | 9030 |\n| Paraguay | 2015 | NULL | 85970 |\n| Paraguay | NULL | NULL | 182700 |\n| Senegal | 2014 | fiction | 12234 |\n| Senegal | 2014 | non-fiction | 64980 |\n| Senegal | 2014 | NULL | 77214 |\n| Senegal | 2015 | fiction | 15647 |\n| Senegal | 2015 | non-fiction | 78901 |\n| Senegal | 2015 | NULL | 94548 |\n| Senegal | NULL | NULL | 171762 |\n| NULL | NULL | NULL | 354462 |\n+----------+------+-------------+------------+\n\nThe LIMIT clause, applied after WITH ROLLUP:\n\nSELECT country, year, genre, SUM(sales) \n FROM booksales GROUP BY country, year, genre WITH ROLLUP LIMIT 4;\n+----------+------+-------------+------------+\n| country | year | genre | SUM(sales) |\n+----------+------+-------------+------------+\n| Paraguay | 2014 | fiction | 87970 |\n| Paraguay | 2014 | non-fiction | 8760 |\n| Paraguay | 2014 | NULL | 96730 |\n| Paraguay | 2015 | fiction | 76940 |\n+----------+------+-------------+------------+\n\nSorting by year descending:\n\nSELECT country, year, genre, SUM(sales) \n FROM booksales GROUP BY country, year DESC, genre WITH ROLLUP;\n+----------+------+-------------+------------+\n| country | year | genre | SUM(sales) |\n+----------+------+-------------+------------+\n| Paraguay | 2015 | fiction | 76940 |\n| Paraguay | 2015 | non-fiction | 9030 |\n| Paraguay | 2015 | NULL | 85970 |\n| Paraguay | 2014 | fiction | 87970 |\n| Paraguay | 2014 | non-fiction | 8760 |\n| Paraguay | 2014 | NULL | 96730 |\n| Paraguay | NULL | NULL | 182700 |\n| Senegal | 2015 | fiction | 15647 |\n| Senegal | 2015 | non-fiction | 78901 |\n| Senegal | 2015 | NULL | 94548 |\n| Senegal | 2014 | fiction | 12234 |\n| Senegal | 2014 | non-fiction | 64980 |\n| Senegal | 2014 | NULL | 77214 |\n| Senegal | NULL | NULL | 171762 |\n| NULL | NULL | NULL | 354462 |\n+----------+------+-------------+------------+\n\nURL: https://mariadb.com/kb/en/select-with-rollup/','','https://mariadb.com/kb/en/select-with-rollup/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (441,27,'SELECT INTO OUTFILE','Syntax\n------\n\nSELECT ... INTO OUTFILE \'file_name\'\n [CHARACTER SET charset_name]\n [export_options]\n\nexport_options:\n [{FIELDS | COLUMNS}\n [TERMINATED BY \'string\']\n [[OPTIONALLY] ENCLOSED BY \'char\']\n [ESCAPED BY \'char\']\n ]\n [LINES\n [STARTING BY \'string\']\n [TERMINATED BY \'string\']\n ]\n\nDescription\n-----------\n\nSELECT INTO OUTFILE writes the resulting rows to a file, and allows the use of\ncolumn and row terminators to specify a particular output format. The default\nis to terminate fields with tabs (\\t) and lines with newlines (\\n).\n\nThe file must not exist. It cannot be overwritten. A user needs the FILE\nprivilege to run this statement. Also, MariaDB needs permission to write files\nin the specified location. If the secure_file_priv system variable is set to a\nnon-empty directory name, the file can only be written to that directory.\n\nThe LOAD DATA INFILE statement complements SELECT INTO OUTFILE.\n\nCharacter-sets\n--------------\n\nThe CHARACTER SET clause specifies the character set in which the results are\nto be written. Without the clause, no conversion takes place (the binary\ncharacter set). In this case, if there are multiple character sets, the output\nwill contain these too, and may not easily be able to be reloaded.\n\nIn cases where you have two servers using different character-sets, using\nSELECT INTO OUTFILE to transfer data from one to the other can have unexpected\nresults. To ensure that MariaDB correctly interprets the escape sequences, use\nthe CHARACTER SET clause on both the SELECT INTO OUTFILE statement and the\nsubsequent LOAD DATA INFILE statement.\n\nExample\n-------\n\nThe following example produces a file in the CSV format:\n\nSELECT customer_id, firstname, surname from customer\n INTO OUTFILE \'/exportdata/customers.txt\'\n FIELDS TERMINATED BY \',\' OPTIONALLY ENCLOSED BY \'\"\'\n LINES TERMINATED BY \'\\n\';\n\nThe following ANSI syntax is also supported for simple SELECT without UNION\n\nSELECT customer_id, firstname, surname INTO OUTFILE \'/exportdata/customers.txt\'\n FIELDS TERMINATED BY \',\' OPTIONALLY ENCLOSED BY \'\"\'\n LINES TERMINATED BY \'\\n\'\n FROM customers;\n\nIf you want to use the ANSI syntax with UNION or similar construct you have to\nuse the syntax:\n\nSELECT * INTO OUTFILE \"/tmp/skr3\" FROM (SELECT * FROM t1 UNION SELECT * FROM\nt1);\n\nURL: https://mariadb.com/kb/en/select-into-outfile/','','https://mariadb.com/kb/en/select-into-outfile/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (442,27,'SELECT INTO DUMPFILE','Syntax\n------\n\nSELECT ... INTO DUMPFILE \'file_path\'\n\nDescription\n-----------\n\nSELECT ... INTO DUMPFILE is a SELECT clause which writes the resultset into a\nsingle unformatted row, without any separators, in a file. The results will\nnot be returned to the client.\n\nfile_path can be an absolute path, or a relative path starting from the data\ndirectory. It can only be specified as a string literal, not as a variable.\nHowever, the statement can be dynamically composed and executed as a prepared\nstatement to work around this limitation.\n\nThis statement is binary-safe and so is particularly useful for writing BLOB\nvalues to file. It can be used, for example, to copy an image or an audio\ndocument from the database to a file. SELECT ... INTO FILE can be used to save\na text file.\n\nThe file must not exist. It cannot be overwritten. A user needs the FILE\nprivilege to run this statement. Also, MariaDB needs permission to write files\nin the specified location. If the secure_file_priv system variable is set to a\nnon-empty directory name, the file can only be written to that directory.\n\nSince MariaDB 5.1, the character_set_filesystem system variable has controlled\ninterpretation of file names that are given as literal strings.\n\nExample\n-------\n\nSELECT _utf8\'Hello world!\' INTO DUMPFILE \'/tmp/world\';\n\nSELECT LOAD_FILE(\'/tmp/world\') AS world;\n+--------------+\n| world |\n+--------------+\n| Hello world! |\n+--------------+\n\nURL: https://mariadb.com/kb/en/select-into-dumpfile/','','https://mariadb.com/kb/en/select-into-dumpfile/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (443,27,'FOR UPDATE','InnoDB supports row-level locking. Selected rows can be locked using LOCK IN\nSHARE MODE or FOR UPDATE. In both cases, a lock is acquired on the rows read\nby the query, and it will be released when the current transaction is\ncommitted.\n\nThe FOR UPDATE clause of SELECT applies only when autocommit is set to 0 or\nthe SELECT is enclosed in a transaction. A lock is acquired on the rows, and\nother transactions are prevented from writing the rows, acquire locks, and\nfrom reading them (unless their isolation level is READ UNCOMMITTED).\n\nIf autocommit is set to 1, the LOCK IN SHARE MODE and FOR UPDATE clauses have\nno effect.\n\nIf the isolation level is set to SERIALIZABLE, all plain SELECT statements are\nconverted to SELECT ... LOCK IN SHARE MODE.\n\nExample\n-------\n\nSELECT * FROM trans WHERE period=2001 FOR UPDATE;\n\nURL: https://mariadb.com/kb/en/for-update/','','https://mariadb.com/kb/en/for-update/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (444,27,'LOCK IN SHARE MODE','InnoDB supports row-level locking. Selected rows can be locked using LOCK IN\nSHARE MODE or FOR UPDATE. In both cases, a lock is acquired on the rows read\nby the query, and it will be released when the current transaction is\ncommitted.\n\nWhen LOCK IN SHARE MODE is specified in a SELECT statement, MariaDB will wait\nuntil all transactions that have modified the rows are committed. Then, a\nwrite lock is acquired. All transactions can read the rows, but if they want\nto modify them, they have to wait until your transaction is committed.\n\nIf autocommit is set to 1, the LOCK IN SHARE MODE and FOR UPDATE clauses have\nno effect.\n\nURL: https://mariadb.com/kb/en/lock-in-share-mode/','','https://mariadb.com/kb/en/lock-in-share-mode/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (445,27,'Optimizer Hints','Optimizer hints\n---------------\n\nThere are some options available in SELECT to affect the execution plan. These\nare known as optimizer hints.\n\nHIGH PRIORITY\n-------------\n\nHIGH_PRIORITY gives the statement a higher priority. If the table is locked,\nhigh priority SELECTs will be executed as soon as the lock is released, even\nif other statements are queued. HIGH_PRIORITY applies only if the storage\nengine only supports table-level locking (MyISAM, MEMORY, MERGE). See\nHIGH_PRIORITY and LOW_PRIORITY clauses for details.\n\nSQL_CACHE / SQL_NO_CACHE\n------------------------\n\nIf the query_cache_type system variable is set to 2 or DEMAND, and the current\nstatement is cacheable, SQL_CACHE causes the query to be cached and\nSQL_NO_CACHE causes the query not to be cached. For UNIONs, SQL_CACHE or\nSQL_NO_CACHE should be specified for the first query. See also The Query Cache\nfor more detail and a list of the types of statements that aren\'t cacheable.\n\nSQL_BUFFER_RESULT\n-----------------\n\nSQL_BUFFER_RESULT forces the optimizer to use a temporary table to process the\nresult. This is useful to free locks as soon as possible.\n\nSQL_SMALL_RESULT / SQL_BIG_RESULT\n---------------------------------\n\nSQL_SMALL_RESULT and SQL_BIG_RESULT tell the optimizer whether the result is\nvery big or not. Usually, GROUP BY and DISTINCT operations are performed using\na temporary table. Only if the result is very big, using a temporary table is\nnot convenient. The optimizer automatically knows if the result is too big,\nbut you can force the optimizer to use a temporary table with\nSQL_SMALL_RESULT, or avoid the temporary table using SQL_BIG_RESULT.\n\nSTRAIGHT_JOIN\n-------------\n\nSTRAIGHT_JOIN applies to the JOIN queries, and tells the optimizer that the\ntables must be read in the order they appear in the SELECT. For const and\nsystem table this options is sometimes ignored.\n\nSQL_CALC_FOUND_ROWS\n-------------------\n\nSQL_CALC_FOUND_ROWS is only applied when using the LIMIT clause. If this\noption is used, MariaDB will count how many rows would match the query,\nwithout the LIMIT clause. That number can be retrieved in the next query,\nusing FOUND_ROWS().\n\nUSE/FORCE/IGNORE INDEX\n----------------------\n\nUSE INDEX, FORCE INDEX and IGNORE INDEX constrain the query planning to a\nspecific index.\n\nFor further information about some of these options, see How to force query\nplans.\n\nURL: https://mariadb.com/kb/en/optimizer-hints/','','https://mariadb.com/kb/en/optimizer-hints/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (446,27,'PROCEDURE','The PROCEDURE clause of SELECT passes the whole result set to a Procedure\nwhich will process it. These Procedures are not Stored Procedures, and can\nonly be written in the C language, so it is necessary to recompile the server.\n\nCurrently, the only available procedure is ANALYSE, which examines the\nresultset and suggests the optimal datatypes for each column. It is defined in\nthe sql/sql_analyse.cc file, and can be used as an example to create more\nProcedures.\n\nThis clause cannot be used in a view\'s definition.\n\nURL: https://mariadb.com/kb/en/procedure/','','https://mariadb.com/kb/en/procedure/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (447,27,'DUAL','Description\n-----------\n\nYou are allowed to specify DUAL as a dummy table name in situations where no\ntables are referenced, such as the following SELECT statement:\n\nSELECT 1 + 1 FROM DUAL;\n+-------+\n| 1 + 1 |\n+-------+\n| 2 |\n+-------+\n\nDUAL is purely for the convenience of people who require that all SELECT\nstatements should have FROM and possibly other clauses. MariaDB ignores the\nclauses. MariaDB does not require FROM DUAL if no tables are referenced.\n\nFROM DUAL could be used when you only SELECT computed values, but require a\nWHERE clause, perhaps to test that a script correctly handles empty resultsets:\n\nSELECT 1 FROM DUAL WHERE FALSE;\nEmpty set (0.00 sec)\n\nURL: https://mariadb.com/kb/en/dual/','','https://mariadb.com/kb/en/dual/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (448,27,'SELECT ... OFFSET ... FETCH','MariaDB starting with 10.6.0\n----------------------------\nSELECT ... OFFSET ... FETCH was introduced in MariaDB 10.6.\n\nSyntax\n------\n\nOFFSET start { ROW | ROWS }\nFETCH { FIRST | NEXT } [ count ] { ROW | ROWS } { ONLY | WITH TIES }\n\nDescription\n-----------\n\nThe OFFSET clause allows one to return only those elements of a resultset that\ncome after a specified offset. The FETCH clause specifies the number of rows\nto return, while ONLY or WITH TIES specifies whether or not to also return any\nfurther results that tie for last place according to the ordered resultset.\n\nEither the singular ROW or the plural ROWS can be used after the OFFSET and\nFETCH clauses; the choice has no impact on the results.\n\nIn the case of WITH TIES, an ORDER BY clause is required, otherwise an ERROR\nwill be returned.\n\nSELECT i FROM t1 FETCH FIRST 2 ROWS WITH TIES;\nERROR 4180 (HY000): FETCH ... WITH TIES requires ORDER BY clause to be present\n\nExamples\n--------\n\nGiven a table with 6 rows:\n\nCREATE OR REPLACE TABLE t1 (i INT);\nINSERT INTO t1 VALUES (1),(2),(3),(4), (4), (5);\nSELECT i FROM t1 ORDER BY i ASC;\n+------+\n| i |\n+------+\n| 1 |\n| 2 |\n| 3 |\n| 4 |\n| 4 |\n| 5 |\n+------+\n\nOFFSET 2 allows one to skip the first two results.\n\nSELECT i FROM t1 ORDER BY i ASC OFFSET 2 ROWS;\n+------+\n| i |\n+------+\n| 3 |\n| 4 |\n| 4 |\n| 5 |\n+------+\n\nFETCH FIRST 3 ROWS ONLY limits the results to three rows only\n\nSELECT i FROM t1 ORDER BY i ASC OFFSET 1 ROWS FETCH FIRST 3 ROWS ONLY;\n+------+\n| i |\n+------+\n| 2 |\n| 3 |\n| 4 |\n+------+\n\nThe same outcome can also be achieved with the LIMIT clause:\n\nSELECT i FROM t1 ORDER BY i ASC LIMIT 3 OFFSET 1;\n+------+\n| i |\n+------+\n| 2 |\n| 3 |\n| 4 |\n+------+\n\nWITH TIES ensures the tied result 4 is also returned.\n\nSELECT i FROM t1 ORDER BY i ASC OFFSET 1 ROWS FETCH FIRST 3 ROWS WITH TIES;\n+------+\n| i |\n+------+\n| 2 |\n| 3 |\n| 4 |\n| 4 |\n+------+\n\nURL: https://mariadb.com/kb/en/select-offset-fetch/','','https://mariadb.com/kb/en/select-offset-fetch/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (449,27,'INSERT','Syntax\n------\n\nINSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]\n [INTO] tbl_name [PARTITION (partition_list)] [(col,...)]\n {VALUES | VALUE} ({expr | DEFAULT},...),(...),...\n [ ON DUPLICATE KEY UPDATE\n col=expr\n [, col=expr] ... ] [RETURNING select_expr\n [, select_expr ...]]\n\nOr:\n\nINSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]\n [INTO] tbl_name [PARTITION (partition_list)]\n SET col={expr | DEFAULT}, ...\n [ ON DUPLICATE KEY UPDATE\n col=expr\n [, col=expr] ... ] [RETURNING select_expr\n [, select_expr ...]]\n\nOr:\n\nINSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]\n [INTO] tbl_name [PARTITION (partition_list)] [(col,...)]\n SELECT ...\n [ ON DUPLICATE KEY UPDATE\n col=expr\n [, col=expr] ... ] [RETURNING select_expr\n [, select_expr ...]]\n\nThe INSERT statement is used to insert new rows into an existing table. The\nINSERT ... VALUES and INSERT ... SET forms of the statement insert rows based\non explicitly specified values. The INSERT ... SELECT form inserts rows\nselected from another table or tables. INSERT ... SELECT is discussed further\nin the INSERT ... SELECT article.\n\nThe table name can be specified in the form db_name.tbl_name or, if a default\ndatabase is selected, in the form tbl_name (see Identifier Qualifiers). This\nallows to use INSERT ... SELECT to copy rows between different databases.\n\nThe PARTITION clause can be used in both the INSERT and the SELECT part. See\nPartition Pruning and Selection for details.\n\nMariaDB starting with 10.5\n--------------------------\nThe RETURNING clause was introduced in MariaDB 10.5.\n\nThe columns list is optional. It specifies which values are explicitly\ninserted, and in which order. If this clause is not specified, all values must\nbe explicitly specified, in the same order they are listed in the table\ndefinition.\n\nThe list of value follow the VALUES or VALUE keyword (which are\ninterchangeable, regardless how much values you want to insert), and is\nwrapped by parenthesis. The values must be listed in the same order as the\ncolumns list. It is possible to specify more than one list to insert more than\none rows with a single statement. If many rows are inserted, this is a speed\noptimization.\n\nFor one-row statements, the SET clause may be more simple, because you don\'t\nneed to remember the columns order. All values are specified in the form col =\nexpr.\n\nValues can also be specified in the form of a SQL expression or subquery.\nHowever, the subquery cannot access the same table that is named in the INTO\nclause.\n\nIf you use the LOW_PRIORITY keyword, execution of the INSERT is delayed until\nno other clients are reading from the table. If you use the HIGH_PRIORITY\nkeyword, the statement has the same priority as SELECTs. This affects only\nstorage engines that use only table-level locking (MyISAM, MEMORY, MERGE).\nHowever, if one of these keywords is specified, concurrent inserts cannot be\nused. See HIGH_PRIORITY and LOW_PRIORITY clauses for details.\n\nINSERT DELAYED\n--------------\n\nFor more details on the DELAYED option, see INSERT DELAYED.\n\nHIGH PRIORITY and LOW PRIORITY\n------------------------------\n\nSee HIGH_PRIORITY and LOW_PRIORITY.\n\nDefaults and Duplicate Values\n-----------------------------\n\nSee INSERT - Default & Duplicate Values for details..\n\nINSERT IGNORE\n-------------\n\nSee INSERT IGNORE.\n\nINSERT ON DUPLICATE KEY UPDATE\n------------------------------\n\nSee INSERT ON DUPLICATE KEY UPDATE.\n\nExamples\n--------\n\nSpecifying the column names:\n\nINSERT INTO person (first_name, last_name) VALUES (\'John\', \'Doe\');\n\nInserting more than 1 row at a time:\n\nINSERT INTO tbl_name VALUES (1, \"row 1\"), (2, \"row 2\");\n\nUsing the SET clause:\n\nINSERT INTO person SET first_name = \'John\', last_name = \'Doe\';\n\nSELECTing from another table:\n\nINSERT INTO contractor SELECT * FROM person WHERE status = \'c\';\n\nSee INSERT ON DUPLICATE KEY UPDATE and INSERT IGNORE for further examples.\n\nINSERT ... RETURNING\n--------------------\n\nINSERT ... RETURNING returns a resultset of the inserted rows.\n\nThis returns the listed columns for all the rows that are inserted, or\nalternatively, the specified SELECT expression. Any SQL expressions which can\nbe calculated can be used in the select expression for the RETURNING clause,\nincluding virtual columns and aliases, expressions which use various operators\nsuch as bitwise, logical and arithmetic operators, string functions, date-time\nfunctions, numeric functions, control flow functions, secondary functions and\nstored functions. Along with this, statements which have subqueries and\nprepared statements can also be used.\n\nExamples\n--------\n\nSimple INSERT statement\n\nINSERT INTO t2 VALUES (1,\'Dog\'),(2,\'Lion\'),(3,\'Tiger\'),(4,\'Leopard\') \nRETURNING id2,id2+id2,id2&id2,id2||id2;\n+-----+---------+---------+----------+\n| id2 | id2+id2 | id2&id2 | id2||id2 |\n+-----+---------+---------+----------+\n| 1 | 2 | 1 | 1 |\n| 2 | 4 | 2 | 1 |\n| 3 | 6 | 3 | 1 |\n| 4 | 8 | 4 | 1 |\n+-----+---------+---------+----------+\n\nUsing stored functions in RETURNING\n\nDELIMITER |\nCREATE FUNCTION f(arg INT) RETURNS INT\n BEGIN\n RETURN (SELECT arg+arg);\n END|\n\nDELIMITER ;\n\nPREPARE stmt FROM \"INSERT INTO t1 SET id1=1, animal1=\'Bear\' RETURNING f(id1),\nUPPER(animal1)\";\n\nEXECUTE stmt;\n+---------+----------------+\n| f(id1) | UPPER(animal1) |\n+---------+----------------+\n| 2 | BEAR |\n+---------+----------------+\n\nSubqueries in the RETURNING clause that return more than one row or column\ncannot be used.\n\nAggregate functions cannot be used in the RETURNING clause. Since aggregate\nfunctions work on a set of values, and if the purpose is to get the row count,\nROW_COUNT() with SELECT can be used or it can be used in\nINSERT...SELECT...RETURNING if the table in the RETURNING clause is not the\nsame as the INSERT table.\n\nURL: https://mariadb.com/kb/en/insert/','','https://mariadb.com/kb/en/insert/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (450,27,'INSERT DELAYED','Syntax\n------\n\nINSERT DELAYED ...\n\nDescription\n-----------\n\nThe DELAYED option for the INSERT statement is a MariaDB/MySQL extension to\nstandard SQL that is very useful if you have clients that cannot or need not\nwait for the INSERT to complete. This is a common situation when you use\nMariaDB for logging and you also periodically run SELECT and UPDATE statements\nthat take a long time to complete.\n\nWhen a client uses INSERT DELAYED, it gets an okay from the server at once,\nand the row is queued to be inserted when the table is not in use by any other\nthread.\n\nAnother major benefit of using INSERT DELAYED is that inserts from many\nclients are bundled together and written in one block. This is much faster\nthan performing many separate inserts.\n\nNote that INSERT DELAYED is slower than a normal INSERT if the table is not\notherwise in use. There is also the additional overhead for the server to\nhandle a separate thread for each table for which there are delayed rows. This\nmeans that you should use INSERT DELAYED only when you are really sure that\nyou need it.\n\nThe queued rows are held only in memory until they are inserted into the\ntable. This means that if you terminate mysqld forcibly (for example, with\nkill -9) or if mysqld dies unexpectedly, any queued rows that have not been\nwritten to disk are lost.\n\nThe number of concurrent INSERT DELAYED threads is limited by the\nmax_delayed_threads server system variables. If it is set to 0, INSERT DELAYED\nis disabled. The session value can be equal to the global value, or 0 to\ndisable this statement for the current session. If this limit has been\nreached, the DELAYED clause will be silently ignore for subsequent statements\n(no error will be produced).\n\nLimitations\n-----------\n\nThere are some limitations on the use of DELAYED:\n\n* INSERT DELAYED works only with MyISAM, MEMORY, ARCHIVE,\n and BLACKHOLE tables. If you execute INSERT DELAYED with another storage\nengine, you will get an error like this: ERROR 1616 (HY000): DELAYED option\nnot supported for table \'tab_name\'\n* For MyISAM tables, if there are no free blocks in the middle of the data\n file, concurrent SELECT and INSERT statements are supported. Under these\n circumstances, you very seldom need to use INSERT DELAYED\n with MyISAM.\n* INSERT DELAYED should be used only for\n INSERT statements that specify value lists. The server\n ignores DELAYED for INSERT ... SELECT\n or INSERT ... ON DUPLICATE KEY UPDATE statements.\n* Because the INSERT DELAYED statement returns immediately,\n before the rows are inserted, you cannot use\n LAST_INSERT_ID() to get the\n AUTO_INCREMENT value that the statement might generate.\n* DELAYED rows are not visible to SELECT\n statements until they actually have been inserted.\n* After INSERT DELAYED, ROW_COUNT() returns the number of the rows you tried\nto insert, not the number of the successful writes.\n* DELAYED is ignored on slave replication servers, so that \n INSERT DELAYED is treated as a normal\n INSERT on slaves. This is because\n DELAYED could cause the slave to have different data than\n the master. INSERT DELAYED statements are not safe for replication.\n* Pending INSERT DELAYED statements are lost if a table is\n write locked and ALTER TABLE is used to modify the table structure.\n* INSERT DELAYED is not supported for views. If you try, you will get an error\nlike this: ERROR 1347 (HY000): \'view_name\' is not BASE TABLE\n* INSERT DELAYED is not supported for partitioned tables.\n* INSERT DELAYED is not supported within stored programs.\n* INSERT DELAYED does not work with triggers.\n* INSERT DELAYED does not work if there is a check constraint in place.\n* INSERT DELAYED does not work if skip-new mode is active.\n\nURL: https://mariadb.com/kb/en/insert-delayed/','','https://mariadb.com/kb/en/insert-delayed/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (451,27,'INSERT SELECT','Syntax\n------\n\nINSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]\n [INTO] tbl_name [(col_name,...)]\n SELECT ...\n [ ON DUPLICATE KEY UPDATE col_name=expr, ... ]\n\nDescription\n-----------\n\nWith INSERT ... SELECT, you can quickly insert many rows into a table from one\nor more other tables. For example:\n\nINSERT INTO tbl_temp2 (fld_id)\n SELECT tbl_temp1.fld_order_id\n FROM tbl_temp1 WHERE tbl_temp1.fld_order_id > 100;\n\ntbl_name can also be specified in the form db_name.tbl_name (see Identifier\nQualifiers). This allows to copy rows between different databases.\n\nIf the new table has a primary key or UNIQUE indexes, you can use IGNORE to\nhandle duplicate key errors during the query. The newer values will not be\ninserted if an identical value already exists.\n\nREPLACE can be used instead of INSERT to prevent duplicates on UNIQUE indexes\nby deleting old values. In that case, ON DUPLICATE KEY UPDATE cannot be used.\n\nINSERT ... SELECT works for tables which already exist. To create a table for\na given resultset, you can use CREATE TABLE ... SELECT.\n\nURL: https://mariadb.com/kb/en/insert-select/','','https://mariadb.com/kb/en/insert-select/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (452,27,'LOAD DATA INFILE','Syntax\n------\n\nLOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE \'file_name\'\n [REPLACE | IGNORE]\n INTO TABLE tbl_name\n [CHARACTER SET charset_name]\n [{FIELDS | COLUMNS}\n [TERMINATED BY \'string\']\n [[OPTIONALLY] ENCLOSED BY \'char\']\n [ESCAPED BY \'char\']\n ]\n [LINES\n [STARTING BY \'string\']\n [TERMINATED BY \'string\']\n ]\n [IGNORE number LINES]\n [(col_name_or_user_var,...)]\n [SET col_name = expr,...]\n\nDescription\n-----------\n\nLOAD DATA INFILE is unsafe for statement-based replication.\n\nReads rows from a text file into the designated table on the database at a\nvery high speed. The file name must be given as a literal string.\n\nFiles are written to disk using the SELECT INTO OUTFILE statement. You can\nthen read the files back into a table using the LOAD DATA INFILE statement.\nThe FIELDS and LINES clauses are the same in both statements. These clauses\nare optional, but if both are specified then the FIELDS clause must precede\nLINES.\n\nExecuting this statement activates INSERT triggers.\n\nOne must have the FILE privilege to be able to execute LOAD DATA INFILE. This\nis to ensure normal users cannot read system files. LOAD DATA LOCAL INFILE\ndoes not have this requirement.\n\nIf the secure_file_priv system variable is set (by default it is not), the\nloaded file must be present in the specified directory.\n\nNote that MariaDB\'s systemd unit file restricts access to /home, /root, and\n/run/user by default. See Configuring access to home directories.\n\nLOAD DATA LOCAL INFILE\n----------------------\n\nWhen you execute the LOAD DATA INFILE statement, MariaDB Server attempts to\nread the input file from its own file system. By contrast, when you execute\nthe LOAD DATA LOCAL INFILE statement, the client attempts to read the input\nfile from its file system, and it sends the contents of the input file to the\nMariaDB Server. This allows you to load files from the client\'s local file\nsystem into the database.\n\nIf you don\'t want to permit this operation (perhaps for security reasons), you\ncan disable the LOAD DATA LOCAL INFILE statement on either the server or the\nclient.\n\n* The LOAD DATA LOCAL INFILE statement can be disabled on the server by\nsetting the local_infile system variable to 0.\n* The LOAD DATA LOCAL INFILE statement can be disabled on the client. If you\nare using MariaDB Connector/C, this can be done by unsetting the\nCLIENT_LOCAL_FILES capability flag with the mysql_real_connect function or by\nunsetting the MYSQL_OPT_LOCAL_INFILE option with mysql_optionsv function. If\nyou are using a different client or client library, then see the documentation\nfor your specific client or client library to determine how it handles the\nLOAD DATA LOCAL INFILE statement.\n\nIf the LOAD DATA LOCAL INFILE statement is disabled by either the server or\nthe client and if the user attempts to execute it, then the server will cause\nthe statement to fail with the following error message:\n\nThe used command is not allowed with this MariaDB version\n\nNote that it is not entirely accurate to say that the MariaDB version does not\nsupport the command. It would be more accurate to say that the MariaDB\nconfiguration does not support the command. See MDEV-20500 for more\ninformation.\n\nFrom MariaDB 10.5.2, the error message is more accurate:\n\nThe used command is not allowed because the MariaDB server or client \n has disabled the local infile capability\n\nREPLACE and IGNORE\n------------------\n\nIf you load data from a file into a table that already contains data and has a\nprimary key, you may encounter issues where the statement attempts to insert a\nrow with a primary key that already exists. When this happens, the statement\nfails with Error 1064, protecting the data already on the table. If you want\nMariaDB to overwrite duplicates, use the REPLACE keyword.\n\nThe REPLACE keyword works like the REPLACE statement. Here, the statement\nattempts to load the data from the file. If the row does not exist, it adds it\nto the table. If the row contains an existing primary key, it replaces the\ntable data. That is, in the event of a conflict, it assumes the file contains\nthe desired row.\n\nThis operation can cause a degradation in load speed by a factor of 20 or more\nif the part that has already been loaded is larger than the capacity of the\nInnoDB Buffer Pool. This happens because it causes a lot of turnaround in the\nbuffer pool.\n\nUse the IGNORE keyword when you want to skip any rows that contain a\nconflicting primary key. Here, the statement attempts to load the data from\nthe file. If the row does not exist, it adds it to the table. If the row\ncontains an existing primary key, it ignores the addition request and moves on\nto the next. That is, in the event of a conflict, it assumes the table\ncontains the desired row.\n\nCharacter-sets\n--------------\n\nWhen the statement opens the file, it attempts to read the contents using the\ndefault character-set, as defined by the character_set_database system\nvariable.\n\nIn the cases where the file was written using a character-set other than the\ndefault, you can specify the character-set to use with the CHARACTER SET\nclause in the statement. It ignores character-sets specified by the SET NAMES\nstatement and by the character_set_client system variable. Setting the\nCHARACTER SET clause to a value of binary indicates \"no conversion.\"\n\nThe statement interprets all fields in the file as having the same\ncharacter-set, regardless of the column data type. To properly interpret file\ncontents, you must ensure that it was written with the correct character-set.\nIf you write a data file with mysqldump -T or with the SELECT INTO OUTFILE\nstatement with the mysql client, be sure to use the --default-character-set\noption, so that the output is written with the desired character-set.\n\nWhen using mixed character sets, use the CHARACTER SET clause in both SELECT\nINTO OUTFILE and LOAD DATA INFILE to ensure that MariaDB correctly interprets\nthe escape sequences.\n\nThe character_set_filesystem system variable controls the interpretation of\nthe filename.\n\nIt is currently not possible to load data files that use the ucs2 character\nset.\n\nPreprocessing Inputs\n--------------------\n\ncol_name_or_user_var can be a column name, or a user variable. In the case of\na variable, the SET statement can be used to preprocess the value before\nloading into the table.\n\nPriority and Concurrency\n------------------------\n\nIn storage engines that perform table-level locking (MyISAM, MEMORY and\nMERGE), using the LOW_PRIORITY keyword, MariaDB delays insertions until no\nother clients are reading from the table. Alternatively, when using the MyISAM\nstorage engine, you can use the CONCURRENT keyword to perform concurrent\ninsertion.\n\nThe LOW_PRIORITY and CONCURRENT keywords are mutually exclusive. They cannot\nbe used in the same statement.\n\nProgress Reporting\n------------------\n\nThe LOAD DATA INFILE statement supports progress reporting. You may find this\nuseful when dealing with long-running operations. Using another client you can\nissue a SHOW PROCESSLIST query to check the progress of the data load.\n\nUsing mariadb-import/mysqlimport\n--------------------------------\n\nMariaDB ships with a separate utility for loading data from files:\nmariadb-import (or mysqlimport before MariaDB 10.5). It operates by sending\nLOAD DATA INFILE statements to the server.\n\nUsing mariadb-import/mysqlimport you can compress the file using the\n--compress option, to get better performance over slow networks, providing\nboth the client and server support the compressed protocol. Use the --local\noption to load from the local file system.\n\nIndexing\n--------\n\nIn cases where the storage engine supports ALTER TABLE... DISABLE KEYS\nstatements (MyISAM and Aria), the LOAD DATA INFILE statement automatically\ndisables indexes during the execution.\n\nExamples\n--------\n\nYou have a file with this content (note the the separator is \',\', not tab,\nwhich is the default):\n\n2,2\n3,3\n4,4\n5,5\n6,8\n\nCREATE TABLE t1 (a int, b int, c int, d int, PRIMARY KEY (a));\nLOAD DATA LOCAL INFILE \n \'/tmp/loaddata7.dat\' INTO TABLE t1 FIELDS TERMINATED BY \',\' (a,b) SET c=a+b;\nSELECT * FROM t1;\n+------+------+------+\n| a | b | c |\n+------+------+------+\n| 2 | 2 | 4 |\n| 3 | 3 | 6 |\n| 4 | 4 | 8 |\n| 5 | 5 | 10 |\n| 6 | 8 | 14 |\n+------+------+------+\n\nAnother example, given the following data (the separator is a tab):\n\n1 a\n2 b\n\nThe value of the first column is doubled before loading:\n\nLOAD DATA INFILE \'ld.txt\' INTO TABLE ld (@i,v) SET i=@i*2;\n\nSELECT * FROM ld;\n+------+------+\n| i | v |\n+------+------+\n| 2 | a |\n| 4 | b |\n+------+------+\n\nURL: https://mariadb.com/kb/en/load-data-infile/','','https://mariadb.com/kb/en/load-data-infile/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (453,27,'LOAD XML','Syntax\n------\n\nLOAD XML [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE \'file_name\'\n [REPLACE | IGNORE]\n INTO TABLE [db_name.]tbl_name\n [CHARACTER SET charset_name]\n [ROWS IDENTIFIED BY \'<tagname>\']\n [IGNORE number {LINES | ROWS}]\n [(column_or_user_var,...)]\n [SET col_name = expr,...]\n\nDescription\n-----------\n\nThe LOAD XML statement reads data from an XML file into a table. The file_name\nmust be given as a literal string. The tagname in the optional ROWS IDENTIFIED\nBY clause must also be given as a literal string, and must be surrounded by\nangle brackets (< and >).\n\nLOAD XML acts as the complement of running the mysql client in XML output mode\n(that is, starting the client with the --xml option). To write data from a\ntable to an XML file, use a command such as the following one from the system\nshell:\n\nshell> mysql --xml -e \'SELECT * FROM mytable\' > file.xml\n\nTo read the file back into a table, use LOAD XML INFILE. By default, the <row>\nelement is considered to be the equivalent of a database table row; this can\nbe changed using the ROWS IDENTIFIED BY clause.\n\nThis statement supports three different XML formats:\n\n* Column names as attributes and column values as attribute values:\n\n<row column1=\"value1\" column2=\"value2\" .../>\n\n* Column names as tags and column values as the content of these tags:\n\n<row>\n <column1>value1</column1>\n <column2>value2</column2>\n</row>\n\n* Column names are the name attributes of <field> tags, and values are\n the contents of these tags:\n\n<row>\n <field name=\'column1\'>value1</field>\n <field name=\'column2\'>value2</field>\n</row>\n\nThis is the format used by other tools, such as mysqldump.\n\nAll 3 formats can be used in the same XML file; the import routine\nautomatically detects the format for each row and interprets it correctly.\nTags are matched based on the tag or attribute name and the column name.\n\nThe following clauses work essentially the same way for LOAD XML as they do\nfor LOAD DATA:\n\n* LOW_PRIORITY or CONCURRENT\n* LOCAL\n* REPLACE or IGNORE\n* CHARACTER SET\n* (column_or_user_var,...)\n* SET\n\nSee LOAD DATA for more information about these clauses.\n\nThe IGNORE number LINES or IGNORE number ROWS clause causes the first number\nrows in the XML file to be skipped. It is analogous to the LOAD DATA\nstatement\'s IGNORE ... LINES clause.\n\nIf the LOW_PRIORITY keyword is used, insertions are delayed until no other\nclients are reading from the table. The CONCURRENT keyword allowes the use of\nconcurrent inserts. These clauses cannot be specified together.\n\nThis statement activates INSERT triggers.\n\nURL: https://mariadb.com/kb/en/load-xml/','','https://mariadb.com/kb/en/load-xml/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (454,27,'Concurrent Inserts','The MyISAM storage engine supports concurrent inserts. This feature allows\nSELECT statements to be executed during INSERT operations, reducing contention.\n\nWhether concurrent inserts can be used or not depends on the value of the\nconcurrent_insert server system variable:\n\n* NEVER (0) disables concurrent inserts.\n* AUTO (1) allows concurrent inserts only when the target table has no free\nblocks (no data in the middle of the table has been deleted after the last\nOPTIMIZE TABLE). This is the default.\n* ALWAYS (2) always enables concurrent inserts, in which case new rows are\nadded at the end of a table if the table is being used by another thread.\n\nIf the binary log is used, CREATE TABLE ... SELECT and INSERT ... SELECT\nstatements cannot use concurrent inserts. These statements acquire a read lock\non the table, so concurrent inserts will need to wait. This way the log can be\nsafely used to restore data.\n\nConcurrent inserts are not used by replicas with the row based replication\n(see binary log formats).\n\nIf an INSERT statement contain the HIGH_PRIORITY clause, concurrent inserts\ncannot be used. INSERT ... DELAYED is usually unneeded if concurrent inserts\nare enabled.\n\nLOAD DATA INFILE uses concurrent inserts if the CONCURRENT keyword is\nspecified and concurrent_insert is not NEVER. This makes the statement slower\n(even if no other sessions access the table) but reduces contention.\n\nLOCK TABLES allows non-conflicting concurrent inserts if a READ LOCAL lock is\nused. Concurrent inserts are not allowed if the LOCAL keyword is omitted.\n\nNotes\n-----\n\nThe decision to enable concurrent insert for a table is done when the table is\nopened. If you change the value of concurrent_insert it will only affect new\nopened tables. If you want it to work for also for tables in use or cached,\nyou should do FLUSH TABLES after setting the variable.\n\nURL: https://mariadb.com/kb/en/concurrent-inserts/','','https://mariadb.com/kb/en/concurrent-inserts/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (455,27,'HIGH_PRIORITY and LOW_PRIORITY','The InnoDB storage engine uses row-level locking to ensure data integrity.\nHowever some storage engines (such as MEMORY, MyISAM, Aria and MERGE) lock the\nwhole table to prevent conflicts. These storage engines use two separate\nqueues to remember pending statements; one is for SELECTs and the other one is\nfor write statements (INSERT, DELETE, UPDATE). By default, the latter has a\nhigher priority.\n\nTo give write operations a lower priority, the low_priority_updates server\nsystem variable can be set to ON. The option is available on both the global\nand session levels, and it can be set at startup or via the SET statement.\n\nWhen too many table locks have been set by write statements, some pending\nSELECTs are executed. The maximum number of write locks that can be acquired\nbefore this happens is determined by the max_write_lock_count server system\nvariable, which is dynamic.\n\nIf write statements have a higher priority (default), the priority of\nindividual write statements (INSERT, REPLACE, UPDATE, DELETE) can be changed\nvia the LOW_PRIORITY attribute, and the priority of a SELECT statement can be\nraised via the HIGH_PRIORITY attribute. Also, LOCK TABLES supports a\nLOW_PRIORITY attribute for WRITE locks.\n\nIf read statements have a higher priority, the priority of an INSERT can be\nchanged via the HIGH_PRIORITY attribute. However, the priority of other write\nstatements cannot be raised individually.\n\nThe use of LOW_PRIORITY or HIGH_PRIORITY for an INSERT prevents Concurrent\nInserts from being used.\n\nURL: https://mariadb.com/kb/en/high_priority-and-low_priority/','','https://mariadb.com/kb/en/high_priority-and-low_priority/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (456,27,'INSERT - Default & Duplicate Values','Default Values\n--------------\n\nIf the SQL_MODE contains STRICT_TRANS_TABLES and you are inserting into a\ntransactional table (like InnoDB), or if the SQL_MODE contains\nSTRICT_ALL_TABLES, all NOT NULL columns which do not have a DEFAULT value (and\nare not AUTO_INCREMENT) must be explicitly referenced in INSERT statements. If\nnot, an error like this is produced:\n\nERROR 1364 (HY000): Field \'col\' doesn\'t have a default value\n\nIn all other cases, if a NOT NULL column without a DEFAULT value is not\nreferenced, an empty value will be inserted (for example, 0 for INTEGER\ncolumns and \'\' for CHAR columns). See NULL Values in MariaDB:Inserting for\nexamples.\n\nIf a NOT NULL column having a DEFAULT value is not referenced, NULL will be\ninserted.\n\nIf a NULL column having a DEFAULT value is not referenced, its default value\nwill be inserted. It is also possible to explicitly assign the default value\nusing the DEFAULT keyword or the DEFAULT() function.\n\nIf the DEFAULT keyword is used but the column does not have a DEFAULT value,\nan error like this is produced:\n\nERROR 1364 (HY000): Field \'col\' doesn\'t have a default value\n\nDuplicate Values\n----------------\n\nBy default, if you try to insert a duplicate row and there is a UNIQUE index,\nINSERT stops and an error like this is produced:\n\nERROR 1062 (23000): Duplicate entry \'dup_value\' for key \'col\'\n\nTo handle duplicates you can use the IGNORE clause, INSERT ON DUPLICATE KEY\nUPDATE or the REPLACE statement. Note that the IGNORE and DELAYED options are\nignored when you use ON DUPLICATE KEY UPDATE.\n\nURL: https://mariadb.com/kb/en/insert-default-duplicate-values/','','https://mariadb.com/kb/en/insert-default-duplicate-values/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (457,27,'INSERT IGNORE','Ignoring Errors\n---------------\n\nNormally INSERT stops and rolls back when it encounters an error.\n\nBy using the IGNORE keyword all errors are converted to warnings, which will\nnot stop inserts of additional rows.\n\nThe IGNORE and DELAYED options are ignored when you use ON DUPLICATE KEY\nUPDATE.\n\nPrior to MySQL and MariaDB 5.5.28, no warnings were issued for duplicate key\nerrors when using IGNORE. You can get the old behavior if you set OLD_MODE to\nNO_DUP_KEY_WARNINGS_WITH_IGNORE.\n\nExamples\n--------\n\nCREATE TABLE t1 (x INT UNIQUE);\n\nINSERT INTO t1 VALUES(1),(2);\n\nINSERT INTO t1 VALUES(2),(3);\nERROR 1062 (23000): Duplicate entry \'2\' for key \'x\'\nSELECT * FROM t1;\n+------+\n| x |\n+------+\n| 1 |\n| 2 |\n+------+\n2 rows in set (0.00 sec)\n\nINSERT IGNORE INTO t1 VALUES(2),(3);\nQuery OK, 1 row affected, 1 warning (0.04 sec)\n\nSHOW WARNINGS;\n+---------+------+---------------------------------+\n| Level | Code | Message |\n+---------+------+---------------------------------+\n| Warning | 1062 | Duplicate entry \'2\' for key \'x\' |\n+---------+------+---------------------------------+\n\nSELECT * FROM t1;\n+------+\n| x |\n+------+\n| 1 |\n| 2 |\n| 3 |\n+------+\n\nSee INSERT ON DUPLICATE KEY UPDATE for further examples using that syntax.\n\nURL: https://mariadb.com/kb/en/insert-ignore/','','https://mariadb.com/kb/en/insert-ignore/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (458,27,'INSERT ON DUPLICATE KEY UPDATE','Syntax\n------\n\nINSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]\n [INTO] tbl_name [PARTITION (partition_list)] [(col,...)]\n {VALUES | VALUE} ({expr | DEFAULT},...),(...),...\n [ ON DUPLICATE KEY UPDATE\n col=expr\n [, col=expr] ... ]\n\nOr:\n\nINSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]\n [INTO] tbl_name [PARTITION (partition_list)]\n SET col={expr | DEFAULT}, ...\n [ ON DUPLICATE KEY UPDATE\n col=expr\n [, col=expr] ... ]\n\nOr:\n\nINSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]\n [INTO] tbl_name [PARTITION (partition_list)] [(col,...)]\n SELECT ...\n [ ON DUPLICATE KEY UPDATE\n col=expr\n [, col=expr] ... ]\n\nDescription\n-----------\n\nINSERT ... ON DUPLICATE KEY UPDATE is a MariaDB/MySQL extension to the INSERT\nstatement that, if it finds a duplicate unique or primary key, will instead\nperform an UPDATE.\n\nThe row/s affected value is reported as 1 if a row is inserted, and 2 if a row\nis updated, unless the API\'s CLIENT_FOUND_ROWS flag is set.\n\nIf more than one unique index is matched, only the first is updated. It is not\nrecommended to use this statement on tables with more than one unique index.\n\nIf the table has an AUTO_INCREMENT primary key and the statement inserts or\nupdates a row, the LAST_INSERT_ID() function returns its AUTO_INCREMENT value.\n\nThe VALUES() function can only be used in a ON DUPLICATE KEY UPDATE clause and\nhas no meaning in any other context. It returns the column values from the\nINSERT portion of the statement. This function is particularly useful for\nmulti-rows inserts.\n\nThe IGNORE and DELAYED options are ignored when you use ON DUPLICATE KEY\nUPDATE.\n\nSee Partition Pruning and Selection for details on the PARTITION clause.\n\nThis statement activates INSERT and UPDATE triggers. See Trigger Overview for\ndetails.\n\nSee also a similar statement, REPLACE.\n\nExamples\n--------\n\nCREATE TABLE ins_duplicate (id INT PRIMARY KEY, animal VARCHAR(30));\nINSERT INTO ins_duplicate VALUES (1,\'Aardvark\'), (2,\'Cheetah\'), (3,\'Zebra\');\n\nIf there is no existing key, the statement runs as a regular INSERT:\n\nINSERT INTO ins_duplicate VALUES (4,\'Gorilla\') \n ON DUPLICATE KEY UPDATE animal=\'Gorilla\';\nQuery OK, 1 row affected (0.07 sec)\n\nSELECT * FROM ins_duplicate;\n+----+----------+\n| id | animal |\n+----+----------+\n| 1 | Aardvark |\n| 2 | Cheetah |\n| 3 | Zebra |\n| 4 | Gorilla |\n+----+----------+\n\nA regular INSERT with a primary key value of 1 will fail, due to the existing\nkey:\n\nINSERT INTO ins_duplicate VALUES (1,\'Antelope\');\nERROR 1062 (23000): Duplicate entry \'1\' for key \'PRIMARY\'\n\nHowever, we can use an INSERT ON DUPLICATE KEY UPDATE instead:\n\nINSERT INTO ins_duplicate VALUES (1,\'Antelope\') \n ON DUPLICATE KEY UPDATE animal=\'Antelope\';\nQuery OK, 2 rows affected (0.09 sec)\n\nNote that there are two rows reported as affected, but this refers only to the\nUPDATE.\n\nSELECT * FROM ins_duplicate;\n+----+----------+\n| id | animal |\n+----+----------+\n| 1 | Antelope |\n| 2 | Cheetah |\n| 3 | Zebra |\n| 4 | Gorilla |\n+----+----------+\n\nAdding a second unique column:\n\nALTER TABLE ins_duplicate ADD id2 INT;\nUPDATE ins_duplicate SET id2=id+10;\nALTER TABLE ins_duplicate ADD UNIQUE KEY(id2);\n\nWhere two rows match the unique keys match, only the first is updated. This\ncan be unsafe and is not recommended unless you are certain what you are doing.\n\nINSERT INTO ins_duplicate VALUES (2,\'Lion\',13) \n ON DUPLICATE KEY UPDATE animal=\'Lion\';\nQuery OK, 2 rows affected (0.004 sec)\n\nSELECT * FROM ins_duplicate;\n+----+----------+------+\n| id | animal | id2 |\n+----+----------+------+\n| 1 | Antelope | 11 |\n| 2 | Lion | 12 |\n| 3 | Zebra | 13 |\n| 4 | Gorilla | 14 |\n+----+----------+------+\n\nAlthough the third row with an id of 3 has an id2 of 13, which also matched,\nit was not updated.\n\nChanging id to an auto_increment field. If a new row is added, the\nauto_increment is moved forward. If the row is updated, it remains the same.\n\nALTER TABLE `ins_duplicate` CHANGE `id` `id` INT( 11 ) NOT NULL AUTO_INCREMENT;\nALTER TABLE ins_duplicate DROP id2;\nSELECT Auto_increment FROM INFORMATION_SCHEMA.TABLES \n WHERE TABLE_NAME=\'ins_duplicate\';\n+----------------+\n| Auto_increment |\n+----------------+\n| 5 |\n+----------------+\n\nINSERT INTO ins_duplicate VALUES (2,\'Leopard\') \n ON DUPLICATE KEY UPDATE animal=\'Leopard\';\nQuery OK, 2 rows affected (0.00 sec)\n\nSELECT Auto_increment FROM INFORMATION_SCHEMA.TABLES \n WHERE TABLE_NAME=\'ins_duplicate\';\n+----------------+\n| Auto_increment |\n+----------------+\n| 5 |\n+----------------+\n\nINSERT INTO ins_duplicate VALUES (5,\'Wild Dog\') \n ON DUPLICATE KEY UPDATE animal=\'Wild Dog\';\nQuery OK, 1 row affected (0.09 sec)\n\nSELECT * FROM ins_duplicate;\n+----+----------+\n| id | animal |\n+----+----------+\n| 1 | Antelope |\n| 2 | Leopard |\n| 3 | Zebra |\n| 4 | Gorilla |\n| 5 | Wild Dog |\n+----+----------+\n\nSELECT Auto_increment FROM INFORMATION_SCHEMA.TABLES \n WHERE TABLE_NAME=\'ins_duplicate\';\n+----------------+\n| Auto_increment |\n+----------------+\n| 6 |\n+----------------+\n\nRefering to column values from the INSERT portion of the statement:\n\nINSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6)\n ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);\n\nSee the VALUES() function for more.\n\nURL: https://mariadb.com/kb/en/insert-on-duplicate-key-update/','','https://mariadb.com/kb/en/insert-on-duplicate-key-update/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (459,27,'INSERT...RETURNING','MariaDB starting with 10.5.0\n----------------------------\nINSERT ... RETURNING was added in MariaDB 10.5.0, and returns a resultset of\nthe inserted rows.\n\nSyntax\n------\n\nINSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]\n [INTO] tbl_name [PARTITION (partition_list)] [(col,...)]\n {VALUES | VALUE} ({expr | DEFAULT},...),(...),...\n [ ON DUPLICATE KEY UPDATE\n col=expr\n [, col=expr] ... ] [RETURNING select_expr\n [, select_expr ...]]\n\nOr:\n\nINSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]\n [INTO] tbl_name [PARTITION (partition_list)]\n SET col={expr | DEFAULT}, ...\n [ ON DUPLICATE KEY UPDATE\n col=expr\n [, col=expr] ... ] [RETURNING select_expr\n [, select_expr ...]]\n\nOr:\n\nINSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]\n [INTO] tbl_name [PARTITION (partition_list)] [(col,...)]\n SELECT ...\n [ ON DUPLICATE KEY UPDATE\n col=expr\n [, col=expr] ... ] [RETURNING select_expr\n [, select_expr ...]]\n\nDescription\n-----------\n\nINSERT ... RETURNING returns a resultset of the inserted rows.\n\nThis returns the listed columns for all the rows that are inserted, or\nalternatively, the specified SELECT expression. Any SQL expressions which can\nbe calculated can be used in the select expression for the RETURNING clause,\nincluding virtual columns and aliases, expressions which use various operators\nsuch as bitwise, logical and arithmetic operators, string functions, date-time\nfunctions, numeric functions, control flow functions, secondary functions and\nstored functions. Along with this, statements which have subqueries and\nprepared statements can also be used.\n\nExamples\n--------\n\nSimple INSERT statements:\n\nCREATE OR REPLACE TABLE t2 (id INT, animal VARCHAR(20), t TIMESTAMP);\n\nINSERT INTO t2 (id) VALUES (2),(3) RETURNING id,t;\n+------+---------------------+\n| id | t |\n+------+---------------------+\n| 2 | 2021-04-28 00:59:32 |\n| 3 | 2021-04-28 00:59:32 |\n+------+---------------------+\n\nINSERT INTO t2(id,animal) VALUES\n(1,\'Dog\'),(2,\'Lion\'),(3,\'Tiger\'),(4,\'Leopard\') \n RETURNING id,id+id,id&id,id||id;\n+------+-------+-------+--------+\n| id | id+id | id&id | id||id |\n+------+-------+-------+--------+\n| 1 | 2 | 1 | 1 |\n| 2 | 4 | 2 | 1 |\n| 3 | 6 | 3 | 1 |\n| 4 | 8 | 4 | 1 |\n+------+-------+-------+--------+\n\nUsing stored functions in RETURNING\n\nDELIMITER |\nCREATE FUNCTION f(arg INT) RETURNS INT\n BEGIN\n RETURN (SELECT arg+arg);\n END|\n\nDELIMITER ;\n\nPREPARE stmt FROM \"INSERT INTO t1 SET id1=1, animal1=\'Bear\' RETURNING f(id1),\nUPPER(animal1)\";\n\nEXECUTE stmt;\n+---------+----------------+\n| f(id1) | UPPER(animal1) |\n+---------+----------------+\n| 2 | BEAR |\n+---------+----------------+\n\nSubqueries in the RETURNING clause that return more than one row or column\ncannot be used.\n\nAggregate functions cannot be used in the RETURNING clause. Since aggregate\nfunctions work on a set of values, and if the purpose is to get the row count,\nROW_COUNT() with SELECT can be used or it can be used in\nINSERT...SELECT...RETURNING if the table in the RETURNING clause is not the\nsame as the INSERT table.\n\nURL: https://mariadb.com/kb/en/insertreturning/','','https://mariadb.com/kb/en/insertreturning/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (460,27,'REPLACE...RETURNING','MariaDB starting with 10.5.0\n----------------------------\nREPLACE ... RETURNING was added in MariaDB 10.5.0, and returns a resultset of\nthe replaced rows.\n\nSyntax\n------\n\nREPLACE [LOW_PRIORITY | DELAYED]\n [INTO] tbl_name [PARTITION (partition_list)] [(col,...)]\n {VALUES | VALUE} ({expr | DEFAULT},...),(...),...\n[RETURNING select_expr \n [, select_expr ...]]\n\nOr:\n\nREPLACE [LOW_PRIORITY | DELAYED]\n [INTO] tbl_name [PARTITION (partition_list)]\n SET col={expr | DEFAULT}, ...\n[RETURNING select_expr \n [, select_expr ...]]\n\nOr:\n\nREPLACE [LOW_PRIORITY | DELAYED]\n [INTO] tbl_name [PARTITION (partition_list)] [(col,...)]\n SELECT ...\n[RETURNING select_expr \n [, select_expr ...]]\n\nDescription\n-----------\n\nREPLACE ... RETURNING returns a resultset of the replaced rows.\n\nThis returns the listed columns for all the rows that are replaced, or\nalternatively, the specified SELECT expression. Any SQL expressions which can\nbe calculated can be used in the select expression for the RETURNING clause,\nincluding virtual columns and aliases, expressions which use various operators\nsuch as bitwise, logical and arithmetic operators, string functions, date-time\nfunctions, numeric functions, control flow functions, secondary functions and\nstored functions. Along with this, statements which have subqueries and\nprepared statements can also be used.\n\nExamples\n--------\n\nSimple REPLACE statement\n\nREPLACE INTO t2 VALUES (1,\'Leopard\'),(2,\'Dog\') RETURNING id2, id2+id2 \nas Total ,id2|id2, id2&&id2;\n+-----+-------+---------+----------+\n| id2 | Total | id2|id2 | id2&&id2 |\n+-----+-------+---------+----------+\n| 1 | 2 | 1 | 1 |\n| 2 | 4 | 2 | 1 |\n+-----+-------+---------+----------+\n\nUsing stored functions in RETURNING\n\nDELIMITER |\nCREATE FUNCTION f(arg INT) RETURNS INT\n BEGIN\n RETURN (SELECT arg+arg);\n END|\n\nDELIMITER ;\nPREPARE stmt FROM \"REPLACE INTO t2 SET id2=3, animal2=\'Fox\' RETURNING f2(id2),\nUPPER(animal2)\";\n\nEXECUTE stmt;\n+---------+----------------+\n| f2(id2) | UPPER(animal2) |\n+---------+----------------+\n| 6 | FOX |\n+---------+----------------+\n\nSubqueries in the statement\n\nREPLACE INTO t1 SELECT * FROM t2 RETURNING (SELECT id2 FROM t2 WHERE \nid2 IN (SELECT id2 FROM t2 WHERE id2=1)) AS new_id;\n+--------+\n| new_id |\n+--------+\n| 1 |\n| 1 |\n| 1 |\n| 1 |\n+--------+\n\nSubqueries in the RETURNING clause that return more than one row or column\ncannot be used..\n\nAggregate functions cannot be used in the RETURNING clause. Since aggregate\nfunctions work on a set of values and if the purpose is to get the row count,\nROW_COUNT() with SELECT can be used, or it can be used in\nREPLACE...SELECT...RETURNING if the table in the RETURNING clause is not the\nsame as the REPLACE table.\n\nURL: https://mariadb.com/kb/en/replacereturning/','','https://mariadb.com/kb/en/replacereturning/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (461,27,'CALL','Syntax\n------\n\nCALL sp_name([parameter[,...]])\nCALL sp_name[()]\n\nDescription\n-----------\n\nThe CALL statement invokes a stored procedure that was defined previously with\nCREATE PROCEDURE.\n\nStored procedure names can be specified as database_name.procedure_name.\nProcedure names and database names can be quoted with backticks (). This is\nnecessary if they are reserved words, or contain special characters. See\nidentifier qualifiers for details.\n\nCALL p() and CALL p are equivalent.\n\nIf parentheses are used, any number of spaces, tab characters and newline\ncharacters are allowed between the procedure\'s name and the open parenthesis.\n\nCALL can pass back values to its caller using parameters that are declared as\nOUT or INOUT parameters. If no value is assigned to an OUT parameter, NULL is\nassigned (and its former value is lost). To pass such values from another\nstored program you can use user-defined variables, local variables or\nroutine\'s parameters; in other contexts, you can only use user-defined\nvariables.\n\nCALL can also be executed as a prepared statement. Placeholders can be used\nfor IN parameters in all versions of MariaDB; for OUT and INOUT parameters,\nplaceholders can be used since MariaDB 5.5.\n\nWhen the procedure returns, a client program can also obtain the number of\nrows affected for the final statement executed within the routine: At the SQL\nlevel, call the ROW_COUNT() function; from the C API, call the\nmysql_affected_rows() function.\n\nIf the CLIENT_MULTI_RESULTS API flag is set, CALL can return any number of\nresultsets and the called stored procedure can execute prepared statements. If\nit is not set, at most one resultset can be returned and prepared statements\ncannot be used within procedures.\n\nURL: https://mariadb.com/kb/en/call/','','https://mariadb.com/kb/en/call/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (462,27,'DO','Syntax\n------\n\nDO expr [, expr] ...\n\nDescription\n-----------\n\nDO executes the expressions but does not return any results. In most respects,\nDO is shorthand for SELECT expr, ..., but has the advantage that it is\nslightly faster when you do not care about the result.\n\nDO is useful primarily with functions that have side effects, such as\nRELEASE_LOCK().\n\nURL: https://mariadb.com/kb/en/do/','','https://mariadb.com/kb/en/do/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (463,27,'Comment Syntax','There are three supported comment styles in MariaDB:\n\n* From a \'#\' to the end of a line:SELECT * FROM users; # This is a comment\n\n* From a \'-- \' to the end of a line. The space after the two dashes is\nrequired (as in MySQL).SELECT * FROM users; -- This is a comment\n\n* C style comments from an opening \'/*\' to a closing \'*/\'. Comments of this\nform can span multiple lines:SELECT * FROM users; /* This is a\nmulti-line\ncomment */\n\nNested comments are possible in some situations, but they are not supported or\nrecommended.\n\nExecutable Comments\n-------------------\n\nAs an aid to portability between different databases, MariaDB supports\nexecutable comments. These special comments allow you to embed SQL code which\nwill not execute when run on other databases, but will execute when run on\nMariaDB.\n\nMariaDB supports both MySQL\'s executable comment format, and a slightly\nmodified version specific to MariaDB. This way, if you have SQL code that\nworks on MySQL and MariaDB, but not other databases, you can wrap it in a\nMySQL executable comment, and if you have code that specifically takes\nadvantage of features only available in MariaDB you can use the MariaDB\nspecific format to hide the code from MySQL.\n\nExecutable Comment Syntax\n-------------------------\n\nMySQL and MariaDB executable comment syntax:\n\n/*! MySQL or MariaDB-specific code */\n\nCode that should be executed only starting from a specific MySQL or MariaDB\nversion:\n\n/*!##### MySQL or MariaDB-specific code */\n\nThe numbers, represented by \'######\' in the syntax examples above specify the\nspecific the minimum versions of MySQL and MariaDB that should execute the\ncomment. The first number is the major version, the second 2 numbers are the\nminor version and the last 2 is the patch level.\n\nFor example, if you want to embed some code that should only execute on MySQL\nor MariaDB starting from 5.1.0, you would do the following:\n\n/*!50100 MySQL and MariaDB 5.1.0 (and above) code goes here. */\n\nMariaDB-only executable comment syntax (starting from MariaDB 5.3.1):\n\n/*M! MariaDB-specific code */\n/*M!###### MariaDB-specific code */\n\nMariaDB ignores MySQL-style executable comments that have a version number in\nthe range 50700..99999. This is needed to skip features introduced in\nMySQL-5.7 that are not ported to MariaDB 10.x yet.\n\n/*!50701 MariaDB-10.x ignores MySQL-5.7 specific code */\n\nNote: comments which have a version number in the range 50700..99999 that use\nMariaDB-style executable comment syntax are still executed.\n\n/*M!50701 MariaDB-10.x does not ignore this */\n\nStatement delimiters cannot be used within executable comments.\n\nExamples\n--------\n\nIn MySQL all the following will return 2: In MariaDB, the last 2 queries would\nreturn 3.\n\nSELECT 2 /* +1 */;\nSELECT 1 /*! +1 */;\nSELECT 1 /*!50101 +1 */;\nSELECT 2 /*M! +1 */;\nSELECT 2 /*M!50301 +1 */;\n\nThe following executable statement will not work due to the delimiter inside\nthe executable portion:\n\n/*M!100100 select 1 ; */\nERROR 1064 (42000): You have an error in your SQL syntax; check the manual\nthat corresponds to your MariaDB server version for the right syntax to use\nnear \'\' at line 1\n\nInstead, the delimiter should be placed outside the executable portion:\n\n/*M!100100 select 1 */;\n+---+\n| 1 |\n+---+\n| 1 |\n+---+\n\nURL: https://mariadb.com/kb/en/comment-syntax/','','https://mariadb.com/kb/en/comment-syntax/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (464,27,'HANDLER Commands','Syntax\n------\n\nHANDLER tbl_name OPEN [ [AS] alias]\nHANDLER tbl_name READ index_name { = | >= | <= | < } (value1,value2,...)\n [ WHERE where_condition ] [LIMIT ... ]\nHANDLER tbl_name READ index_name { FIRST | NEXT | PREV | LAST }\n [ WHERE where_condition ] [LIMIT ... ]\nHANDLER tbl_name READ { FIRST | NEXT }\n [ WHERE where_condition ] [LIMIT ... ]\nHANDLER tbl_name CLOSE\n\nDescription\n-----------\n\nThe HANDLER statement provides direct access to table storage engine\ninterfaces for key lookups and key or table scans. It is available for at\nleast Aria, Memory, MyISAM and InnoDB tables (and should work with most\n\'normal\' storage engines, but not with system tables, MERGE or views).\n\nHANDLER ... OPEN opens a table, allowing it to be accessible to subsequent\nHANDLER ... READ statements. The table can either be opened using an alias\n(which must then be used by HANDLER ... READ, or a table name.\n\nThe table object is only closed when HANDLER ... CLOSE is called by the\nsession, and is not shared by other sessions.\n\nPrepared statements work with HANDLER READ, which gives a much higher\nperformance (50% speedup) as there is no parsing and all data is transformed\nin binary (without conversions to text, as with the normal protocol).\n\nThe HANDLER command does not work with partitioned tables.\n\nKey Lookup\n----------\n\nA key lookup is started with:\n\nHANDLER tbl_name READ index_name { = | >= | <= | < } (value,value) [LIMIT...]\n\nThe values stands for the value of each of the key columns. For most key types\n(except for HASH keys in MEMORY storage engine) you can use a prefix subset of\nit\'s columns.\n\nIf you are using LIMIT, then in case of >= or > then there is an implicit NEXT\nimplied, while if you are using <= or < then there is an implicit PREV implied.\n\nAfter the initial read, you can use\n\nHANDLER tbl_name READ index_name NEXT [ LIMIT ... ]\nor\nHANDLER tbl_name READ index_name PREV [ LIMIT ... ]\n\nto scan the rows in key order.\n\nNote that the row order is not defined for keys with duplicated values and\nwill vary from engine to engine.\n\nKey Scans\n---------\n\nYou can scan a table in key order by doing:\n\nHANDLER tbl_name READ index_name FIRST [ LIMIT ... ]\nHANDLER tbl_name READ index_name NEXT [ LIMIT ... ]\n\nor, if the handler supports backwards key scans (most do):\n\nHANDLER tbl_name READ index_name LAST [ LIMIT ... ]\nHANDLER tbl_name READ index_name PREV [ LIMIT ... ]\n\nTable Scans\n-----------\n\nYou can scan a table in row order by doing:\n\nHANDLER tbl_name READ FIRST [ LIMIT ... ]\nHANDLER tbl_name READ NEXT [ LIMIT ... ]\n\nLimitations\n-----------\n\nAs this is a direct interface to the storage engine, some limitations may\napply for what you can do and what happens if the table changes. Here follows\nsome of the common limitations:\n\nFinding \'Old Rows\'\n------------------\n\nHANDLER READ is not transaction safe, consistent or atomic. It\'s ok for the\nstorage engine to returns rows that existed when you started the scan but that\nwere later deleted. This can happen as the storage engine may cache rows as\npart of the scan from a previous read.\n\nYou may also find rows committed since the scan originally started.\n\nInvisible Columns\n-----------------\n\nHANDLER ... READ also reads the data of invisible-columns.\n\nSystem-Versioned Tables\n-----------------------\n\nHANDLER ... READ reads everything from system-versioned tables, and so\nincludes row_start and row_end fields, as well as all rows that have since\nbeen deleted or changed, including when history partitions are used.\n\nOther Limitations\n-----------------\n\n* If you do an ALTER TABLE, all your HANDLERs for that table are automatically\nclosed.\n* If you do an ALTER TABLE for a table that is used by some other connection\nwith HANDLER, the ALTER TABLE will wait for the HANDLER to be closed.\n* For HASH keys, you must use all key parts when searching for a row.\n* For HASH keys, you can\'t do a key scan of all values. You can only find all\nrows with the same key value.\n* While each HANDLER READ command is atomic, if you do a scan in many steps,\nthen some engines may give you error 1020 if the table changed between the\ncommands. Please refer to the specific engine handler page if this happens.\n\nError Codes\n-----------\n\n* Error 1031 (ER_ILLEGAL_HA) Table storage engine for \'t1\' doesn\'t have this\noption\nIf you get this for HANDLER OPEN it means the storage engine doesn\'t support\nHANDLER calls.\nIf you get this for HANDLER READ it means you are trying to use an incomplete\nHASH key.\n\n* Error 1020 (ER_CHECKREAD) Record has changed since last read in table \'...\'\nThis means that the table changed between two reads and the handler can\'t\nhandle this case for the given scan.\n\nURL: https://mariadb.com/kb/en/handler-commands/','','https://mariadb.com/kb/en/handler-commands/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (465,27,'HANDLER for MEMORY Tables','This article explains how to use HANDLER commands efficiently with MEMORY/HEAP\ntables.\n\nIf you want to scan a table for over different key values, not just search for\nexact key values, you should create your keys with \'USING BTREE\':\n\nCREATE TABLE t1 (a INT, b INT, KEY(a), KEY b USING BTREE (b)) engine=memory;\n\nIn the above table, a is a HASH key that only supports exact matches (=) while\nb is a BTREE key that you can use to scan the table in key order, starting\nfrom start or from a given key value.\n\nThe limitations for HANDLER READ with Memory|HEAP tables are:\n\nLimitations for HASH keys\n-------------------------\n\n* You must use all key parts when searching for a row.\n* You can\'t do a key scan of all values. You can only find all rows with the\nsame key value.\n* READ NEXT gives error 1031 if the tables changed since last read.\n\nLimitations for BTREE keys\n--------------------------\n\n* READ NEXT gives error 1031 if the tables changed since last read. This\nlimitation can be lifted in the future.\n\nLimitations for table scans\n---------------------------\n\n* READ NEXT gives error 1031 if the table was truncated since last READ call.\n\nURL: https://mariadb.com/kb/en/handler-for-memory-tables/','','https://mariadb.com/kb/en/handler-for-memory-tables/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (466,27,'Useful MariaDB Queries','This page is intended to be a quick reference of commonly-used and/or useful\nqueries in MariaDB.\n\nCreating a Table\n----------------\n\nCREATE TABLE t1 ( a INT );\nCREATE TABLE t2 ( b INT );\nCREATE TABLE student_tests (\n name CHAR(10), test CHAR(10), \n score TINYINT, test_date DATE\n);\n\nSee CREATE TABLE for more.\n\nInserting Records\n-----------------\n\nINSERT INTO t1 VALUES (1), (2), (3);\nINSERT INTO t2 VALUES (2), (4);\n\nINSERT INTO student_tests \n (name, test, score, test_date) VALUES\n (\'Chun\', \'SQL\', 75, \'2012-11-05\'), \n (\'Chun\', \'Tuning\', 73, \'2013-06-14\'),\n (\'Esben\', \'SQL\', 43, \'2014-02-11\'), \n (\'Esben\', \'Tuning\', 31, \'2014-02-09\'), \n (\'Kaolin\', \'SQL\', 56, \'2014-01-01\'),\n (\'Kaolin\', \'Tuning\', 88, \'2013-12-29\'), \n (\'Tatiana\', \'SQL\', 87, \'2012-04-28\'), \n (\'Tatiana\', \'Tuning\', 83, \'2013-09-30\');\n\nSee INSERT for more.\n\nUsing AUTO_INCREMENT\n--------------------\n\nThe AUTO_INCREMENT attribute is used to automatically generate a unique\nidentity for new rows.\n\nCREATE TABLE student_details (\n id INT NOT NULL AUTO_INCREMENT, name CHAR(10), \n date_of_birth DATE, PRIMARY KEY (id)\n);\n\nWhen inserting, the id field can be omitted, and is automatically created.\n\nINSERT INTO student_details (name,date_of_birth) VALUES \n (\'Chun\', \'1993-12-31\'), \n (\'Esben\',\'1946-01-01\'),\n (\'Kaolin\',\'1996-07-16\'),\n (\'Tatiana\', \'1988-04-13\');\n\nSELECT * FROM student_details;\n+----+---------+---------------+\n| id | name | date_of_birth |\n+----+---------+---------------+\n| 1 | Chun | 1993-12-31 |\n| 2 | Esben | 1946-01-01 |\n| 3 | Kaolin | 1996-07-16 |\n| 4 | Tatiana | 1988-04-13 |\n+----+---------+---------------+\n\nSee AUTO_INCREMENT for more.\n\nQuerying from two tables on a common value\n------------------------------------------\n\nSELECT * FROM t1 INNER JOIN t2 ON t1.a = t2.b;\n\nThis kind of query is called a join - see JOINS for more.\n\nFinding the Maximum Value\n-------------------------\n\nSELECT MAX(a) FROM t1;\n+--------+\n| MAX(a) |\n+--------+\n| 3 |\n+--------+\n\nSee the MAX() function for more, as well as Finding the maximum value and\ngrouping the results below for a more practical example.\n\nFinding the Minimum Value\n-------------------------\n\nSELECT MIN(a) FROM t1;\n+--------+\n| MIN(a) |\n+--------+\n| 1 |\n+--------+\n\nSee the MIN() function for more.\n\nFinding the Average Value\n-------------------------\n\nSELECT AVG(a) FROM t1;\n+--------+\n| AVG(a) |\n+--------+\n| 2.0000 |\n+--------+\n\nSee the AVG() function for more.\n\nFinding the Maximum Value and Grouping the Results\n--------------------------------------------------\n\nSELECT name, MAX(score) FROM student_tests GROUP BY name;\n+---------+------------+\n| name | MAX(score) |\n+---------+------------+\n| Chun | 75 |\n| Esben | 43 |\n| Kaolin | 88 |\n| Tatiana | 87 |\n+---------+------------+\n\nSee the MAX() function for more.\n\nOrdering Results\n----------------\n\nSELECT name, test, score FROM student_tests ORDER BY score DESC;\n+---------+--------+-------+\n| name | test | score |\n+---------+--------+-------+\n| Kaolin | Tuning | 88 |\n| Tatiana | SQL | 87 |\n| Tatiana | Tuning | 83 |\n| Chun | SQL | 75 |\n| Chun | Tuning | 73 |\n| Kaolin | SQL | 56 |\n| Esben | SQL | 43 |\n| Esben | Tuning | 31 |\n+---------+--------+-------+\n\nSee ORDER BY for more.\n\nFinding the Row with the Minimum of a Particular Column\n-------------------------------------------------------\n\nIn this example, we want to find the lowest test score for any student.\n\nSELECT name,test, score FROM student_tests WHERE score=(SELECT MIN(score) FROM\nstudent);\n+-------+--------+-------+\n| name | test | score |\n+-------+--------+-------+\n| Esben | Tuning | 31 |\n+-------+--------+-------+\n\nFinding Rows with the Maximum Value of a Column by Group\n--------------------------------------------------------\n\nThis example returns the best test results of each student:\n\nSELECT name, test, score FROM student_tests st1 WHERE score = (\n SELECT MAX(score) FROM student st2 WHERE st1.name = st2.name\n); \n+---------+--------+-------+\n| name | test | score |\n+---------+--------+-------+\n| Chun | SQL | 75 |\n| Esben | SQL | 43 |\n| Kaolin | Tuning | 88 |\n| Tatiana | SQL | 87 |\n+---------+--------+-------+\n\nCalculating Age\n---------------\n\nThe TIMESTAMPDIFF function can be used to calculate someone\'s age:\n\nSELECT CURDATE() AS today;\n+------------+\n| today |\n+------------+\n| 2014-02-17 |\n+------------+\n\nSELECT name, date_of_birth, TIMESTAMPDIFF(YEAR,date_of_birth,\'2014-08-02\') AS\nage \n FROM student_details;\n+---------+---------------+------+\n| name | date_of_birth | age |\n+---------+---------------+------+\n| Chun | 1993-12-31 | 20 |\n| Esben | 1946-01-01 | 68 |\n| Kaolin | 1996-07-16 | 18 |\n| Tatiana | 1988-04-13 | 26 |\n+---------+---------------+------+\n\nSee TIMESTAMPDIFF() for more.\n\nUsing User-defined Variables\n----------------------------\n\nThis example sets a user-defined variable with the average test score, and\nthen uses it in a later query to return all results above the average.\n\nSELECT @avg_score:= AVG(score) FROM student_tests;\n+-------------------------+\n| @avg_score:= AVG(score) |\n+-------------------------+\n| 67.000000000 |\n+-------------------------+\n\nSELECT * FROM student_tests WHERE score > @avg_score;\n+---------+--------+-------+------------+\n| name | test | score | test_date |\n+---------+--------+-------+------------+\n| Chun | SQL | 75 | 2012-11-05 |\n| Chun | Tuning | 73 | 2013-06-14 |\n| Kaolin | Tuning | 88 | 2013-12-29 |\n| Tatiana | SQL | 87 | 2012-04-28 |\n| Tatiana | Tuning | 83 | 2013-09-30 |\n+---------+--------+-------+------------+\n\nUser-defined variables can also be used to add an incremental counter to a\nresultset:\n\nSET @count = 0;\n\nSELECT @count := @count + 1 AS counter, name, date_of_birth FROM\nstudent_details;\n+---------+---------+---------------+\n| counter | name | date_of_birth |\n+---------+---------+---------------+\n| 1 | Chun | 1993-12-31 |\n| 2 | Esben | 1946-01-01 |\n| 3 | Kaolin | 1996-07-16 |\n| 4 | Tatiana | 1988-04-13 |\n+---------+---------+---------------+\n\nSee User-defined Variables for more.\n\nView Tables in Order of Size\n----------------------------\n\nReturns a list of all tables in the database, ordered by size:\n\nSELECT table_schema as `DB`, table_name AS `Table`, \n ROUND(((data_length + index_length) / 1024 / 1024), 2) `Size (MB)`\n FROM information_schema.TABLES\n ORDER BY (data_length + index_length) DESC;\n\n+--------------------+---------------------------------------+-----------+\n| DB | Table | Size (MB) |\n+--------------------+---------------------------------------+-----------+\n| wordpress | wp_simple_history_contexts | 7.05 |\n| wordpress | wp_posts | 6.59 |\n| wordpress | wp_simple_history | 3.05 |\n| wordpress | wp_comments | 2.73 |\n| wordpress | wp_commentmeta | 2.47 |\n| wordpress | wp_simple_login_log | 2.03 |\n...\n\nRemoving Duplicates\n-------------------\n\nMariaDB starting with 10.3\n--------------------------\nThe following syntax is only valid MariaDB 10.3 and beyond:\n\nThis example assumes there\'s a unique ID, but that all other fields are\nidentical. In the example below, there are 4 records, 3 of which are\nduplicates, so two of the three duplicates need to be removed. The\nintermediate SELECT is not necessary, but demonstrates what is being returned.\n\nCREATE TABLE t (id INT, f1 VARCHAR(2));\n\nINSERT INTO t VALUES (1,\'a\'), (2,\'a\'), (3,\'b\'), (4,\'a\');\n\nSELECT * FROM t t1, t t2 WHERE t1.f1=t2.f1 AND t1.id<>t2.id AND t1.id=(\n SELECT MAX(id) FROM t tab WHERE tab.f1=t1.f1\n);\n+------+------+------+------+\n| id | f1 | id | f1 |\n+------+------+------+------+\n| 4 | a | 1 | a |\n| 4 | a | 2 | a |\n+------+------+------+------+\n\nDELETE FROM t WHERE id IN (\n SELECT t2.id FROM t t1, t t2 WHERE t1.f1=t2.f1 AND t1.id<>t2.id AND t1.id=(\n SELECT MAX(id) FROM t tab WHERE tab.f1=t1.f1\n )\n);\nQuery OK, 2 rows affected (0.120 sec)\n\nSELECT * FROM t;\n+------+------+\n| id | f1 |\n+------+------+\n| 3 | b |\n| 4 | a |\n+------+------\n\nURL: https://mariadb.com/kb/en/useful-mariadb-queries/','','https://mariadb.com/kb/en/useful-mariadb-queries/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (467,28,'ANALYZE FORMAT=JSON','ANALYZE FORMAT=JSON is a mix of the EXPLAIN FORMAT=JSON and ANALYZE statement\nfeatures. The ANALYZE FORMAT=JSON $statement will execute $statement, and then\nprint the output of EXPLAIN FORMAT=JSON, amended with data from the query\nexecution.\n\nBasic Execution Data\n--------------------\n\nYou can get the following also from tabular ANALYZE statement form:\n\n* r_rows is provided for any node that reads rows. It shows how many rows\nwere read, on average \n* r_filtered is provided whenever there is a condition that is checked. It\nshows the percentage of rows left after checking the condition.\n\nAdvanced Execution Data\n-----------------------\n\nThe most important data not available in the regular tabula ANALYZE statement\nare:\n\n* r_loops field. This shows how many times the node was executed. Most query\nplan elements have this field.\n* r_total_time_ms field. It shows how much time in total was spent executing\nthis node. If the node has subnodes, their execution time is included.\n* r_buffer_size field. Query plan nodes that make use of buffers report the\nsize of buffer that was was used.\n\nSHOW ANALYZE FORMAT=JSON\n------------------------\n\nMariaDB starting with 10.9\n--------------------------\nSHOW ANALYZE FORMAT=JSON for <connection_id> extends ANALYZE [FORMAT=JSON]\n<select> to allow one to analyze a query currently running in another\nconnection.\n\nData About Individual Query Plan Nodes\n--------------------------------------\n\n* filesort node reports whether sorting was done with LIMIT n parameter, and\nhow many rows were in the sort result. \n* block-nl-join node has r_loops field, which allows to tell whether Using\njoin buffer was efficient \n* range-checked-for-each-record reports counters that show the result of the\ncheck. \n* expression-cache is used for subqueries, and it reports how many times the\ncache was used, and what cache hit ratio was.\n* union_result node has r_rows so one can see how many rows were produced\nafter UNION operation\n* and so forth\n\nUse Cases\n---------\n\nSee Examples of ANALYZE FORMAT=JSON.\n\nURL: https://mariadb.com/kb/en/analyze-format-json/','','https://mariadb.com/kb/en/analyze-format-json/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (468,28,'ANALYZE FORMAT=JSON Examples','Example #1\n----------\n\nCustomers who have ordered more than 1M goods.\n\nANALYZE FORMAT=JSON\nSELECT COUNT(*)\nFROM customer\nWHERE\n (SELECT SUM(o_totalprice) FROM orders WHERE o_custkey=c_custkey) > 1000*1000;\n\nThe query takes 40 seconds over cold cache\n\nEXPLAIN: {\n \"query_block\": {\n \"select_id\": 1,\n \"r_loops\": 1,\n \"r_total_time_ms\": 39872,\n \"table\": {\n \"table_name\": \"customer\",\n \"access_type\": \"index\",\n \"key\": \"i_c_nationkey\",\n \"key_length\": \"5\",\n \"used_key_parts\": [\"c_nationkey\"],\n \"r_loops\": 1,\n \"rows\": 150303,\n \"r_rows\": 150000,\n \"r_total_time_ms\": 270.3,\n \"filtered\": 100,\n \"r_filtered\": 60.691,\n \"attached_condition\": \"((subquery#2) > <cache>((1000 * 1000)))\",\n \"using_index\": true\n },\n \"subqueries\": [\n {\n \"query_block\": {\n \"select_id\": 2,\n \"r_loops\": 150000,\n \"r_total_time_ms\": 39531,\n \"table\": {\n \"table_name\": \"orders\",\n \"access_type\": \"ref\",\n \"possible_keys\": [\"i_o_custkey\"],\n \"key\": \"i_o_custkey\",\n \"key_length\": \"5\",\n \"used_key_parts\": [\"o_custkey\"],\n \"ref\": [\"dbt3sf1.customer.c_custkey\"],\n \"r_loops\": 150000,\n \"rows\": 7,\n \"r_rows\": 10,\n \"r_total_time_ms\": 39208,\n \"filtered\": 100,\n \"r_filtered\": 100\n }\n }\n }\n ]\n }\n}\nANALYZE shows that 39.2 seconds were spent in the subquery, which was executed\n150K times (for every row of outer table).\n\nURL: https://mariadb.com/kb/en/analyze-formatjson-examples/','','https://mariadb.com/kb/en/analyze-formatjson-examples/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (469,28,'ANALYZE Statement','Description\n-----------\n\nThe ANALYZE statement is similar to the EXPLAIN statement. ANALYZE statement\nwill invoke the optimizer, execute the statement, and then produce EXPLAIN\noutput instead of the result set. The EXPLAIN output will be annotated with\nstatistics from statement execution.\n\nThis lets one check how close the optimizer\'s estimates about the query plan\nare to the reality. ANALYZE produces an overview, while the ANALYZE\nFORMAT=JSON command provides a more detailed view of the query plan and the\nquery execution.\n\nThe syntax is\n\nANALYZE explainable_statement;\n\nwhere the statement is any statement for which one can run EXPLAIN.\n\nCommand Output\n--------------\n\nConsider an example:\n\nANALYZE SELECT * FROM tbl1 \nWHERE key1 \n BETWEEN 10 AND 200 AND\n col1 LIKE \'foo%\'\\G\n\n*************************** 1. row ***************************\n id: 1\n select_type: SIMPLE\n table: tbl1\n type: range\npossible_keys: key1\n key: key1\n key_len: 5\n ref: NULL\n rows: 181\n r_rows: 181\n filtered: 100.00\n r_filtered: 10.50\n Extra: Using index condition; Using where\n\nCompared to EXPLAIN, ANALYZE produces two extra columns:\n\n* r_rows is an observation-based counterpart of the rows column. It shows how\nmany rows were actually read from the table. \n* r_filtered is an observation-based counterpart of the filtered column. It\nshows which fraction of rows was left after applying the WHERE condition.\n\nInterpreting the Output\n-----------------------\n\nJoins\n-----\n\nLet\'s consider a more complicated example.\n\nANALYZE SELECT *\nFROM orders, customer \nWHERE\n customer.c_custkey=orders.o_custkey AND\n customer.c_acctbal < 0 AND\n orders.o_totalprice > 200*1000\n\n+----+-------------+----------+------+---------------+-------------+---------+-\n------------------+--------+--------+----------+------------+-------------+\n| id | select_type | table | type | possible_keys | key | key_len |\nref | rows | r_rows | filtered | r_filtered | Extra |\n+----+-------------+----------+------+---------------+-------------+---------+-\n------------------+--------+--------+----------+------------+-------------+\n| 1 | SIMPLE | customer | ALL | PRIMARY,... | NULL | NULL |\nNULL | 149095 | 150000 | 18.08 | 9.13 | Using where |\n| 1 | SIMPLE | orders | ref | i_o_custkey | i_o_custkey | 5 |\ncustomer.c_custkey | 7 | 10 | 100.00 | 30.03 | Using where |\n+----+-------------+----------+------+---------------+-------------+---------+-\n------------------+--------+--------+----------+------------+-------------+\n\nHere, one can see that\n\n* For table customer, customer.rows=149095, customer.r_rows=150000. The\nestimate for number of rows we will read was fairly precise\n* customer.filtered=18.08, customer.r_filtered=9.13. The optimizer somewhat\noverestimated the number of records that will match selectivity of condition\nattached to `customer` table (in general, when you have a full scan and\nr_filtered is less than 15%, it\'s time to consider adding an appropriate\nindex).\n* For table orders, orders.rows=7, orders.r_rows=10. This means that on\naverage, there are 7 orders for a given c_custkey, but in our case there were\n10, which is close to the expectation (when this number is consistently far\nfrom the expectation, it may be time to run ANALYZE TABLE, or even edit the\ntable statistics manually to get better query plans).\n* orders.filtered=100, orders.r_filtered=30.03. The optimizer didn\'t have any\nway to estimate which fraction of records will be left after it checks the\ncondition that is attached to table orders (it\'s orders.o_totalprice >\n200*1000). So, it used 100%. In reality, it is 30%. 30% is typically not\nselective enough to warrant adding new indexes. For joins with many tables, it\nmight be worth to collect and use column statistics for columns in question,\nthis may help the optimizer to pick a better query plan.\n\nMeaning of NULL in r_rows and r_filtered\n----------------------------------------\n\nLet\'s modify the previous example slightly\n\nANALYZE SELECT * \nFROM orders, customer \nWHERE\n customer.c_custkey=orders.o_custkey AND\n customer.c_acctbal < -0 AND\n customer.c_comment LIKE \'%foo%\' AND\n orders.o_totalprice > 200*1000;\n\n+----+-------------+----------+------+---------------+-------------+---------+-\n------------------+--------+--------+----------+------------+-------------+\n| id | select_type | table | type | possible_keys | key | key_len |\nref | rows | r_rows | filtered | r_filtered | Extra |\n+----+-------------+----------+------+---------------+-------------+---------+-\n------------------+--------+--------+----------+------------+-------------+\n| 1 | SIMPLE | customer | ALL | PRIMARY,... | NULL | NULL |\nNULL | 149095 | 150000 | 18.08 | 0.00 | Using where |\n| 1 | SIMPLE | orders | ref | i_o_custkey | i_o_custkey | 5 |\ncustomer.c_custkey | 7 | NULL | 100.00 | NULL | Using where |\n+----+-------------+----------+------+---------------+-------------+---------+-\n------------------+--------+--------+----------+------------+-------------+\n\nHere, one can see that orders.r_rows=NULL and orders.r_filtered=NULL. This\nmeans that table orders was not scanned even once. Indeed, we can also see\ncustomer.r_filtered=0.00. This shows that a part of WHERE attached to table\n`customer` was never satisfied (or, satisfied in less than 0.01% of cases).\n\nANALYZE FORMAT=JSON\n-------------------\n\nANALYZE FORMAT=JSON produces JSON output. It produces much more information\nthan tabular ANALYZE.\n\nNotes\n-----\n\n* ANALYZE UPDATE or ANALYZE DELETE will actually make updates/deletes (ANALYZE\nSELECT will perform the select operation and then discard the resultset).\n* PostgreSQL has a similar command, EXPLAIN ANALYZE.\n* The EXPLAIN in the slow query log feature allows MariaDB to have ANALYZE\noutput of slow queries printed into the slow query log (see MDEV-6388).\n\nURL: https://mariadb.com/kb/en/analyze-statement/','','https://mariadb.com/kb/en/analyze-statement/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (470,28,'EXPLAIN','Syntax\n------\n\nEXPLAIN tbl_name [col_name | wild]\n\nOr\n\nEXPLAIN [EXTENDED | PARTITIONS | FORMAT=JSON] \n {SELECT select_options | UPDATE update_options | DELETE delete_options}\n\nDescription\n-----------\n\nThe EXPLAIN statement can be used either as a synonym for DESCRIBE or as a way\nto obtain information about how MariaDB executes a SELECT, UPDATE or DELETE\nstatement:\n\n* \'EXPLAIN tbl_name\' is synonymous with \n \'DESCRIBE tbl_name\' or\n \'SHOW COLUMNS FROM tbl_name\'.\n* When you precede a SELECT, UPDATE or a DELETE statement with the keyword \n EXPLAIN, MariaDB displays information from the optimizer\n about the query execution plan. That is, MariaDB explains how it would\n process the SELECT, UPDATE or DELETE, including information about how tables\n are joined and in which order. EXPLAIN EXTENDED can be\n used to provide additional information.\n* EXPLAIN PARTITIONS is useful only when examining queries involving\npartitioned tables. For details, see Partition pruning and selection.\n* ANALYZE statement performs the query as well as producing EXPLAIN output,\nand provides actual as well as estimated statistics.\n* EXPLAIN output can be printed in the slow query log. See EXPLAIN in the Slow\nQuery Log for details.\n\nSHOW EXPLAIN shows the output of a running statement. In some cases, its\noutput can be closer to reality than EXPLAIN.\n\nThe ANALYZE statement runs a statement and returns information about its\nexecution plan. It also shows additional columns, to check how much the\noptimizer\'s estimation about filtering and found rows are close to reality.\n\nThere is an online EXPLAIN Analyzer that you can use to share EXPLAIN and\nEXPLAIN EXTENDED output with others.\n\nEXPLAIN can acquire metadata locks in the same way that SELECT does, as it\nneeds to know table metadata and, sometimes, data as well.\n\nColumns in EXPLAIN ... SELECT\n-----------------------------\n\n+--------------------------------------+--------------------------------------+\n| Column name | Description |\n+--------------------------------------+--------------------------------------+\n| id | Sequence number that shows in which |\n| | order tables are joined. |\n+--------------------------------------+--------------------------------------+\n| select_type | What kind of SELECT the table comes |\n| | from. |\n+--------------------------------------+--------------------------------------+\n| table | Alias name of table. Materialized |\n| | temporary tables for sub queries |\n| | are named <subquery#> |\n+--------------------------------------+--------------------------------------+\n| type | How rows are found from the table |\n| | (join type). |\n+--------------------------------------+--------------------------------------+\n| possible_keys | keys in table that could be used to |\n| | find rows in the table |\n+--------------------------------------+--------------------------------------+\n| key | The name of the key that is used to |\n| | retrieve rows. NULL is no key was |\n| | used. |\n+--------------------------------------+--------------------------------------+\n| key_len | How many bytes of the key that was |\n| | used (shows if we are using only |\n| | parts of the multi-column key). |\n+--------------------------------------+--------------------------------------+\n| ref | The reference that is used as the |\n| | key value. |\n+--------------------------------------+--------------------------------------+\n| rows | An estimate of how many rows we |\n| | will find in the table for each key |\n| | lookup. |\n+--------------------------------------+--------------------------------------+\n| Extra | Extra information about this join. |\n+--------------------------------------+--------------------------------------+\n\nHere are descriptions of the values for some of the more complex columns in\nEXPLAIN ... SELECT:\n\n\"Select_type\" Column\n--------------------\n\nThe select_type column can have the following values:\n\n+-----------------+-----------------------------------+-----------------------+\n| Value | Description | Comment |\n+-----------------+-----------------------------------+-----------------------+\n| DEPENDENT | The SUBQUERY is DEPENDENT. | |\n| SUBQUERY | | |\n+-----------------+-----------------------------------+-----------------------+\n| DEPENDENT UNION | The UNION is DEPENDENT. | |\n+-----------------+-----------------------------------+-----------------------+\n| DERIVED | The SELECT is DERIVED from the | |\n| | PRIMARY. | |\n+-----------------+-----------------------------------+-----------------------+\n| MATERIALIZED | The SUBQUERY is MATERIALIZED. | Materialized tables |\n| | | will be populated at |\n| | | first access and |\n| | | will be accessed by |\n| | | the primary key (= |\n| | | one key lookup). |\n| | | Number of rows in |\n| | | EXPLAIN shows the |\n| | | cost of populating |\n| | | the table |\n+-----------------+-----------------------------------+-----------------------+\n| PRIMARY | The SELECT is in the outermost | |\n| | query, but there is also a | |\n| | SUBQUERY within it. | |\n+-----------------+-----------------------------------+-----------------------+\n| SIMPLE | It is a simple SELECT query | |\n| | without any SUBQUERY or UNION. | |\n+-----------------+-----------------------------------+-----------------------+\n| SUBQUERY | The SELECT is a SUBQUERY of the | |\n| | PRIMARY. | |\n+-----------------+-----------------------------------+-----------------------+\n| UNCACHEABLE | The SUBQUERY is UNCACHEABLE. | |\n| SUBQUERY | | |\n+-----------------+-----------------------------------+-----------------------+\n| UNCACHEABLE | The UNION is UNCACHEABLE. | |\n| UNION | | |\n+-----------------+-----------------------------------+-----------------------+\n| UNION | The SELECT is a UNION of the | |\n| | PRIMARY. | |\n+-----------------+-----------------------------------+-----------------------+\n| UNION RESULT | The result of the UNION. | |\n+-----------------+-----------------------------------+-----------------------+\n| LATERAL DERIVED | The SELECT uses a Lateral | |\n| | Derived optimization | |\n+-----------------+-----------------------------------+-----------------------+\n\n\"Type\" Column\n-------------\n\nThis column contains information on how the table is accessed.\n\n+------------------------+---------------------------------------------------+\n| Value | Description |\n+------------------------+---------------------------------------------------+\n| ALL | A full table scan is done for the table (all |\n| | rows are read). This is bad if the table is |\n| | large and the table is joined against a previous |\n| | table! This happens when the optimizer could |\n| | not find any usable index to access rows. |\n+------------------------+---------------------------------------------------+\n| const | There is only one possibly matching row in the |\n| | table. The row is read before the optimization |\n| | phase and all columns in the table are treated |\n| | as constants. |\n+------------------------+---------------------------------------------------+\n| eq_ref | A unique index is used to find the rows. This is |\n| | the best possible plan to find the row. |\n+------------------------+---------------------------------------------------+\n| fulltext | A fulltext index is used to access the rows. |\n+------------------------+---------------------------------------------------+\n| index_merge | A \'range\' access is done for for several index |\n| | and the found rows are merged. The key column |\n| | shows which keys are used. |\n+------------------------+---------------------------------------------------+\n| index_subquery | This is similar as ref, but used for sub queries |\n| | that are transformed to key lookups. |\n+------------------------+---------------------------------------------------+\n| index | A full scan over the used index. Better than |\n| | ALL but still bad if index is large and the |\n| | table is joined against a previous table. |\n+------------------------+---------------------------------------------------+\n| range | The table will be accessed with a key over one |\n| | or more value ranges. |\n+------------------------+---------------------------------------------------+\n| ref_or_null | Like \'ref\' but in addition another search for |\n| | the \'null\' value is done if the first value was |\n| | not found. This happens usually with sub queries. |\n+------------------------+---------------------------------------------------+\n| ref | A non unique index or prefix of an unique index |\n| | is used to find the rows. Good if the prefix |\n| | doesn\'t match many rows. |\n+------------------------+---------------------------------------------------+\n| system | The table has 0 or 1 rows. |\n+------------------------+---------------------------------------------------+\n| unique_subquery | This is similar as eq_ref, but used for sub |\n| | queries that are transformed to key lookups |\n+------------------------+---------------------------------------------------+\n\n\"Extra\" Column\n--------------\n\nThis column consists of one or more of the following values, separated by \';\'\n\nNote that some of these values are detected after the optimization phase.\n\nThe optimization phase can do the following changes to the WHERE clause:\n\n* Add the expressions from the ON and USING clauses to the WHERE\n clause.\n* Constant propagation: If there is column=constant, replace all column\n instances with this constant.\n* Replace all columns from \'const\' tables with their values.\n* Remove the used key columns from the WHERE (as this will be tested as\n part of the key lookup).\n* Remove impossible constant sub expressions.\n For example WHERE \'(a=1 and a=2) OR b=1\' becomes \'b=1\'.\n* Replace columns with other columns that has identical values:\n Example: WHERE a=b and a=c may be treated\n as \'WHERE a=b and a=c and b=c\'.\n* Add extra conditions to detect impossible row conditions earlier. This\n happens mainly with OUTER JOIN where we in some cases add detection\n of NULL values in the WHERE (Part of \'Not exists\' optimization).\n This can cause an unexpected \'Using where\' in the Extra column.\n* For each table level we remove expressions that have already been tested when\n we read the previous row. Example: When joining tables t1 with t2\n using the following WHERE \'t1.a=1 and t1.a=t2.b\', we don\'t have to\n test \'t1.a=1\' when checking rows in t2 as we already know that this\n expression is true.\n\n+------------------------+---------------------------------------------------+\n| Value | Description |\n+------------------------+---------------------------------------------------+\n| const row not found | The table was a system table (a table with |\n| | should exactly one row), but no row was found. |\n+------------------------+---------------------------------------------------+\n| Distinct | If distinct optimization (remove duplicates) was |','','https://mariadb.com/kb/en/explain/');
+update help_topic set description = CONCAT(description, '\n| | used. This is marked only for the last table in |\n| | the SELECT. |\n+------------------------+---------------------------------------------------+\n| Full scan on NULL key | The table is a part of the sub query and if the |\n| | value that is used to match the sub query will |\n| | be NULL, we will do a full table scan. |\n+------------------------+---------------------------------------------------+\n| Impossible HAVING | The used HAVING clause is always false so the |\n| | SELECT will return no rows. |\n+------------------------+---------------------------------------------------+\n| Impossible WHERE | The used WHERE clause is always false so the |\n| noticed after reading | SELECT will return no rows. This case was |\n| const tables. | detected after we had read all \'const\' tables |\n| | and used the column values as constant in the |\n| | WHERE clause. For example: WHERE const_column=5 |\n| | and const_column had a value of 4. |\n+------------------------+---------------------------------------------------+\n| Impossible WHERE | The used WHERE clause is always false so the |\n| | SELECT will return no rows. For example: WHERE |\n| | 1=2 |\n+------------------------+---------------------------------------------------+\n| No matching min/max | During early optimization of MIN()/MAX() values |\n| row | it was detected that no row could match the |\n| | WHERE clause. The MIN()/MAX() function will |\n| | return NULL. |\n+------------------------+---------------------------------------------------+\n| no matching row in | The table was a const table (a table with only |\n| const table | one possible matching row), but no row was found. |\n+------------------------+---------------------------------------------------+\n| No tables used | The SELECT was a sub query that did not use any |\n| | tables. For example a there was no FROM clause |\n| | or a FROM DUAL clause. |\n+------------------------+---------------------------------------------------+\n| Not exists | Stop searching after more row if we find one |\n| | single matching row. This optimization is used |\n| | with LEFT JOIN where one is explicitly searching |\n| | for rows that doesn\'t exists in the LEFT JOIN |\n| | TABLE. Example: SELECT * FROM t1 LEFT JOIN t2 on |\n| | (...) WHERE t2.not_null_column IS NULL. As |\n| | t2.not_null_column can only be NULL if there was |\n| | no matching row for on condition, we can stop |\n| | searching if we find a single matching row. |\n+------------------------+---------------------------------------------------+\n| Open_frm_only | For information_schema tables. Only the frm |\n| | (table definition file was opened) was opened |\n| | for each matching row. |\n+------------------------+---------------------------------------------------+\n| Open_full_table | For information_schema tables. A full table open |\n| | for each matching row is done to retrieve the |\n| | requested information. (Slow) |\n+------------------------+---------------------------------------------------+\n| Open_trigger_only | For information_schema tables. Only the trigger |\n| | file definition was opened for each matching row. |\n+------------------------+---------------------------------------------------+\n| Range checked for | This only happens when there was no good default |\n| each record (index | index to use but there may some index that could |\n| map: ...) | be used when we can treat all columns from |\n| | previous table as constants. For each row |\n| | combination the optimizer will decide which |\n| | index to use (if any) to fetch a row from this |\n| | table. This is not fast, but faster than a full |\n| | table scan that is the only other choice. The |\n| | index map is a bitmask that shows which index |\n| | are considered for each row condition. |\n+------------------------+---------------------------------------------------+\n| Scanned 0/1/all | For information_schema tables. Shows how many |\n| databases | times we had to do a directory scan. |\n+------------------------+---------------------------------------------------+\n| Select tables | All tables in the join was optimized away. This |\n| optimized away | happens when we are only using COUNT(*), MIN() |\n| | and MAX() functions in the SELECT and we where |\n| | able to replace all of these with constants. |\n+------------------------+---------------------------------------------------+\n| Skip_open_table | For information_schema tables. The queried table |\n| | didn\'t need to be opened. |\n+------------------------+---------------------------------------------------+\n| unique row not found | The table was detected to be a const table (a |\n| | table with only one possible matching row) |\n| | during the early optimization phase, but no row |\n| | was found. |\n+------------------------+---------------------------------------------------+\n| Using filesort | Filesort is needed to resolve the query. This |\n| | means an extra phase where we first collect all |\n| | columns to sort, sort them with a disk based |\n| | merge sort and then use the sorted set to |\n| | retrieve the rows in sorted order. If the column |\n| | set is small, we store all the columns in the |\n| | sort file to not have to go to the database to |\n| | retrieve them again. |\n+------------------------+---------------------------------------------------+\n| Using index | Only the index is used to retrieve the needed |\n| | information from the table. There is no need to |\n| | perform an extra seek to retrieve the actual |\n| | record. |\n+------------------------+---------------------------------------------------+\n| Using index condition | Like \'Using where\' but the where condition is |\n| | pushed down to the table engine for internal |\n| | optimization at the index level. |\n+------------------------+---------------------------------------------------+\n| Using index | Like \'Using index condition\' but in addition we |\n| condition(BKA) | use batch key access to retrieve rows. |\n+------------------------+---------------------------------------------------+\n| Using index for | The index is being used to resolve a GROUP BY or |\n| group-by | DISTINCT query. The rows are not read. This is |\n| | very efficient if the table has a lot of |\n| | identical index entries as duplicates are |\n| | quickly jumped over. |\n+------------------------+---------------------------------------------------+\n| Using intersect(...) | For index_merge joins. Shows which index are |\n| | part of the intersect. |\n+------------------------+---------------------------------------------------+\n| Using join buffer | We store previous row combinations in a row |\n| | buffer to be able to match each row against all |\n| | of the rows combinations in the join buffer at |\n| | one go. |\n+------------------------+---------------------------------------------------+\n| Using sort_union(...) | For index_merge joins. Shows which index are |\n| | part of the union. |\n+------------------------+---------------------------------------------------+\n| Using temporary | A temporary table is created to hold the result. |\n| | This typically happens if you are using GROUP |\n| | BY, DISTINCT or ORDER BY. |\n+------------------------+---------------------------------------------------+\n| Using where | A WHERE expression (in additional to the |\n| | possible key lookup) is used to check if the row |\n| | should be accepted. If you don\'t have \'Using |\n| | where\' together with a join type of ALL, you are |\n| | probably doing something wrong! |\n+------------------------+---------------------------------------------------+\n| Using where with | Like \'Using where\' but the where condition is |\n| pushed condition | pushed down to the table engine for internal |\n| | optimization at the row level. |\n+------------------------+---------------------------------------------------+\n| Using buffer | The UPDATE statement will first buffer the rows, |\n| | and then run the updates, rather than do updates |\n| | on the fly. See Using Buffer UPDATE Algorithm |\n| | for a detailed explanation. |\n+------------------------+---------------------------------------------------+\n\nEXPLAIN EXTENDED\n----------------\n\nThe EXTENDED keyword adds another column, filtered, to the output. This is a\npercentage estimate of the table rows that will be filtered by the condition.\n\nAn EXPLAIN EXTENDED will always throw a warning, as it adds extra Message\ninformation to a subsequent SHOW WARNINGS statement. This includes what the\nSELECT query would look like after optimizing and rewriting rules are applied\nand how the optimizer qualifies columns and tables.\n\nExamples\n--------\n\nAs synonym for DESCRIBE or SHOW COLUMNS FROM:\n\nDESCRIBE city;\n+------------+----------+------+-----+---------+----------------+\n| Field | Type | Null | Key | Default | Extra |\n+------------+----------+------+-----+---------+----------------+\n| Id | int(11) | NO | PRI | NULL | auto_increment |\n| Name | char(35) | YES | | NULL | |\n| Country | char(3) | NO | UNI | | |\n| District | char(20) | YES | MUL | | |\n| Population | int(11) | YES | | NULL | |\n+------------+----------+------+-----+---------+----------------+\n\nA simple set of examples to see how EXPLAIN can identify poor index usage:\n\nCREATE TABLE IF NOT EXISTS `employees_example` (\n `id` int(11) NOT NULL AUTO_INCREMENT,\n `first_name` varchar(30) NOT NULL,\n `last_name` varchar(40) NOT NULL,\n `position` varchar(25) NOT NULL,\n `home_address` varchar(50) NOT NULL,\n `home_phone` varchar(12) NOT NULL,\n `employee_code` varchar(25) NOT NULL,\n PRIMARY KEY (`id`),\n UNIQUE KEY `employee_code` (`employee_code`),\n KEY `first_name` (`first_name`,`last_name`)\n) ENGINE=Aria;\n\nINSERT INTO `employees_example` (`first_name`, `last_name`, `position`,\n`home_address`, `home_phone`, `employee_code`)\n VALUES\n (\'Mustapha\', \'Mond\', \'Chief Executive Officer\', \'692 Promiscuous Plaza\',\n\'326-555-3492\', \'MM1\'),\n (\'Henry\', \'Foster\', \'Store Manager\', \'314 Savage Circle\', \'326-555-3847\',\n\'HF1\'),\n (\'Bernard\', \'Marx\', \'Cashier\', \'1240 Ambient Avenue\', \'326-555-8456\', \'BM1\'),\n (\'Lenina\', \'Crowne\', \'Cashier\', \'281 Bumblepuppy Boulevard\', \'328-555-2349\',\n\'LC1\'),\n (\'Fanny\', \'Crowne\', \'Restocker\', \'1023 Bokanovsky Lane\', \'326-555-6329\',\n\'FC1\'),\n (\'Helmholtz\', \'Watson\', \'Janitor\', \'944 Soma Court\', \'329-555-2478\', \'HW1\');\n\nSHOW INDEXES FROM employees_example;\n+-------------------+------------+---------------+--------------+--------------\n+-----------+-------------+----------+--------+------+------------+---------+--\n------------+\n| Table | Non_unique | Key_name | Seq_in_index | Column_name \n | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |\nIndex_comment |\n+-------------------+------------+---------------+--------------+--------------\n+-----------+-------------+----------+--------+------+------------+---------+--\n------------+\n| employees_example | 0 | PRIMARY | 1 | id \n | A | 7 | NULL | NULL | | BTREE | |\n |\n| employees_example | 0 | employee_code | 1 |\nemployee_code | A | 7 | NULL | NULL | | BTREE \n | | |\n| employees_example | 1 | first_name | 1 | first_name \n | A | NULL | NULL | NULL | | BTREE | |\n |') WHERE help_topic_id = 470;
+update help_topic set description = CONCAT(description, '\n| employees_example | 1 | first_name | 2 | last_name \n | A | NULL | NULL | NULL | | BTREE | |\n |\n+-------------------+------------+---------------+--------------+--------------\n+-----------+-------------+----------+--------+------+------------+---------+--\n------------+\n\nSELECT on a primary key:\n\nEXPLAIN SELECT * FROM employees_example WHERE id=1;\n+------+-------------+-------------------+-------+---------------+---------+---\n-----+-------+------+-------+\n| id | select_type | table | type | possible_keys | key |\nkey_len | ref | rows | Extra |\n+------+-------------+-------------------+-------+---------------+---------+---\n-----+-------+------+-------+\n| 1 | SIMPLE | employees_example | const | PRIMARY | PRIMARY | 4\n | const | 1 | |\n+------+-------------+-------------------+-------+---------------+---------+---\n-----+-------+------+-------+\n\nThe type is const, which means that only one possible result could be\nreturned. Now, returning the same record but searching by their phone number:\n\nEXPLAIN SELECT * FROM employees_example WHERE home_phone=\'326-555-3492\';\n+------+-------------+-------------------+------+---------------+------+-------\n-+------+------+-------------+\n| id | select_type | table | type | possible_keys | key |\nkey_len | ref | rows | Extra |\n+------+-------------+-------------------+------+---------------+------+-------\n-+------+------+-------------+\n| 1 | SIMPLE | employees_example | ALL | NULL | NULL | NULL \n | NULL | 6 | Using where |\n+------+-------------+-------------------+------+---------------+------+-------\n-+------+------+-------------+\n\nHere, the type is All, which means no index could be used. Looking at the rows\ncount, a full table scan (all six rows) had to be performed in order to\nretrieve the record. If it\'s a requirement to search by phone number, an index\nwill have to be created.\n\nSHOW EXPLAIN example:\n\nSHOW EXPLAIN FOR 1;\n+------+-------------+-------+-------+---------------+------+---------+------+-\n-------+-------------+\n| id | select_type | table | type | possible_keys | key | key_len | ref |\nrows | Extra |\n+------+-------------+-------+-------+---------------+------+---------+------+-\n-------+-------------+\n| 1 | SIMPLE | tbl | index | NULL | a | 5 | NULL |\n1000107 | Using index |\n+------+-------------+-------+-------+---------------+------+---------+------+-\n-------+-------------+\n1 row in set, 1 warning (0.00 sec)\n\nExample of ref_or_null Optimization\n-----------------------------------\n\nSELECT * FROM table_name\n WHERE key_column=expr OR key_column IS NULL;\n\nref_or_null is something that often happens when you use subqueries with NOT\nIN as then one has to do an extra check for NULL values if the first value\ndidn\'t have a matching row.\n\nURL: https://mariadb.com/kb/en/explain/') WHERE help_topic_id = 470;
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (471,28,'EXPLAIN ANALYZE','The syntax for the EXPLAIN ANALYZE feature was changed to ANALYZE statement,\navailable since MariaDB 10.1.0. See ANALYZE statement.\n\nURL: https://mariadb.com/kb/en/explain-analyze/','','https://mariadb.com/kb/en/explain-analyze/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (472,28,'EXPLAIN FORMAT=JSON','Synopsis\n--------\n\nEXPLAIN FORMAT=JSON is a variant of EXPLAIN command that produces output in\nJSON form. The output always has one row which has only one column titled\n\"JSON\". The contents are a JSON representation of the query plan, formatted\nfor readability:\n\nEXPLAIN FORMAT=JSON SELECT * FROM t1 WHERE col1=1\\G\n\n*************************** 1. row ***************************\nEXPLAIN: {\n \"query_block\": {\n \"select_id\": 1,\n \"table\": {\n \"table_name\": \"t1\",\n \"access_type\": \"ALL\",\n \"rows\": 1000,\n \"filtered\": 100,\n \"attached_condition\": \"(t1.col1 = 1)\"\n }\n }\n}\n\nOutput is different from MySQL\n------------------------------\n\nThe output of MariaDB\'s EXPLAIN FORMAT=JSON is different from EXPLAIN\nFORMAT=JSON in MySQL.The reasons for that are:\n\n* MySQL\'s output has deficiencies. Some are listed here: EXPLAIN FORMAT=JSON\nin MySQL\n* The output of MySQL\'s EXPLAIN FORMAT=JSON is not defined. Even MySQL\nWorkbench has trouble parsing it (see this blog post).\n* MariaDB has query optimizations that MySQL does not have. Ergo, MariaDB\ngenerates query plans that MySQL does not generate.\n\nA (as yet incomplete) list of how MariaDB\'s output is different from MySQL can\nbe found here: EXPLAIN FORMAT=JSON differences from MySQL.\n\nOutput Format\n-------------\n\nTODO: MariaDB\'s output format description.\n\nURL: https://mariadb.com/kb/en/explain-format-json/','','https://mariadb.com/kb/en/explain-format-json/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (473,28,'DESCRIBE','Syntax\n------\n\n{DESCRIBE | DESC} tbl_name [col_name | wild]\n\nDescription\n-----------\n\nDESCRIBE provides information about the columns in a table. It is a shortcut\nfor SHOW COLUMNS FROM. These statements also display information for views.\n\ncol_name can be a column name, or a string containing the SQL \"%\" and \"_\"\nwildcard characters to obtain output only for the columns with names matching\nthe string. There is no need to enclose the string within quotes unless it\ncontains spaces or other special characters.\n\nDESCRIBE city;\n+------------+----------+------+-----+---------+----------------+\n| Field | Type | Null | Key | Default | Extra |\n+------------+----------+------+-----+---------+----------------+\n| Id | int(11) | NO | PRI | NULL | auto_increment |\n| Name | char(35) | YES | | NULL | |\n| Country | char(3) | NO | UNI | | |\n| District | char(20) | YES | MUL | | |\n| Population | int(11) | YES | | NULL | |\n+------------+----------+------+-----+---------+----------------+\n\nThe description for SHOW COLUMNS provides more information about the output\ncolumns.\n\nURL: https://mariadb.com/kb/en/describe/','','https://mariadb.com/kb/en/describe/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (474,29,'Identifier Names','Databases, tables, indexes, columns, aliases, views, stored routines,\ntriggers, events, variables, partitions, tablespaces, savepoints, labels,\nusers, roles, are collectively known as identifiers, and have certain rules\nfor naming.\n\nIdentifiers may be quoted using the backtick character - `. Quoting is\noptional for identifiers that don\'t contain special characters, or for\nidentifiers that are not reserved words. If the ANSI_QUOTES SQL_MODE flag is\nset, double quotes (\") can also be used to quote identifiers. If the MSSQL\nflag is set, square brackets ([ and ]) can be used for quoting.\n\nEven when using reserved words as names, fully qualified names do not need to\nbe quoted. For example, test.select has only one possible meaning, so it is\ncorrectly parsed even without quotes.\n\nUnquoted\n--------\n\nThe following characters are valid, and allow identifiers to be unquoted:\n\n* ASCII: [0-9,a-z,A-Z$_] (numerals 0-9, basic Latin letters, both lowercase\nand uppercase, dollar sign, underscore)\n* Extended: U+0080 .. U+FFFF\n\nQuoted\n------\n\nThe following characters are valid, but identifiers using them must be quoted:\n\n* ASCII: U+0001 .. U+007F (full Unicode Basic Multilingual Plane (BMP) except\nfor U+0000)\n* Extended: U+0080 .. U+FFFF \n* Identifier quotes can themselves be used as part of an identifier, as long\nas they are quoted.\n\nFurther Rules\n-------------\n\nThere are a number of other rules for identifiers:\n\n* Identifiers are stored as Unicode (UTF-8)\n* Identifiers may or may not be case-sensitive. See Indentifier\nCase-sensitivity.\n* Database, table and column names can\'t end with space characters\n* Identifier names may begin with a numeral, but can\'t only contain numerals\nunless quoted.\n* An identifier starting with a numeral, followed by an \'e\', may be parsed as\na floating point number, and needs to be quoted.\n* Identifiers are not permitted to contain the ASCII NUL character (U+0000)\nand supplementary characters (U+10000 and higher).\n* Names such as 5e6, 9e are not prohibited, but it\'s strongly recommended not\nto use them, as they could lead to ambiguity in certain contexts, being\ntreated as a number or expression.\n* User variables cannot be used as part of an identifier, or as an identifier\nin an SQL statement.\n\nQuote Character\n---------------\n\nThe regular quote character is the backtick character - `, but if the\nANSI_QUOTES SQL_MODE option is specified, a regular double quote - \" may be\nused as well.\n\nThe backtick character can be used as part of an identifier. In that case the\nidentifier needs to be quoted. The quote character can be the backtick, but in\nthat case, the backtick in the name must be escaped with another backtick.\n\nMaximum Length\n--------------\n\n* Databases, tables, columns, indexes, constraints, stored routines, triggers,\nevents, views, tablespaces, servers and log file groups have a maximum length\nof 64 characters.\n* Compound statement labels have a maximum length of 16 characters\n* Aliases have a maximum length of 256 characters, except for column aliases\nin CREATE VIEW statements, which are checked against the maximum column length\nof 64 characters (not the maximum alias length of 256 characters).\n* Users have a maximum length of 80 characters.\n* Roles have a maximum length of 128 characters.\n* Multi-byte characters do not count extra towards towards the character limit.\n\nMultiple Identifiers\n--------------------\n\nMariaDB allows the column name to be used on its own if the reference will be\nunambiguous, or the table name to be used with the column name, or all three\nof the database, table and column names. A period is used to separate the\nidentifiers, and the period can be surrounded by spaces.\n\nExamples\n--------\n\nUsing the period to separate identifiers:\n\nCREATE TABLE t1 (i int);\n\nINSERT INTO t1(i) VALUES (10);\n\nSELECT i FROM t1;\n+------+\n| i |\n+------+\n| 10 |\n+------+\n\nSELECT t1.i FROM t1;\n+------+\n| i |\n+------+\n| 10 |\n+------+\n\nSELECT test.t1.i FROM t1;\n+------+\n| i |\n+------+\n| 10 |\n+------+\n\nThe period can be separated by spaces:\n\nSELECT test . t1 . i FROM t1;\n+------+\n| i |\n+------+\n| 10 |\n+------+\n\nResolving ambiguity:\n\nCREATE TABLE t2 (i int);\n\nSELECT i FROM t1 LEFT JOIN t2 ON t1.i=t2.i;\nERROR 1052 (23000): Column \'i\' in field list is ambiguous\n\nSELECT t1.i FROM t1 LEFT JOIN t2 ON t1.i=t2.i;\n+------+\n| i |\n+------+\n| 10 |\n+------+\n\nCreating a table with characters that require quoting:\n\nCREATE TABLE 123% (i int);\nERROR 1064 (42000): You have an error in your SQL syntax; \n check the manual that corresponds to your MariaDB server version for the\nright syntax \n to use near \'123% (i int)\' at line 1\n\nCREATE TABLE `123%` (i int);\nQuery OK, 0 rows affected (0.85 sec)\n\nCREATE TABLE `TABLE` (i int);\nQuery OK, 0 rows affected (0.36 sec)\n\nUsing double quotes as a quoting character:\n\nCREATE TABLE \"SELECT\" (i int);\nERROR 1064 (42000): You have an error in your SQL syntax; \n check the manual that corresponds to your MariaDB server version for the\nright syntax \n to use near \'\"SELECT\" (i int)\' at line 1\n\nSET sql_mode=\'ANSI_QUOTES\';\nQuery OK, 0 rows affected (0.03 sec)\n\nCREATE TABLE \"SELECT\" (i int);\nQuery OK, 0 rows affected (0.46 sec)\n\nUsing an identifier quote as part of an identifier name:\n\nSHOW VARIABLES LIKE \'sql_mode\';\n+---------------+-------------+\n| Variable_name | Value |\n+---------------+-------------+\n| sql_mode | ANSI_QUOTES |\n+---------------+-------------+\n\nCREATE TABLE \"fg`d\" (i int);\nQuery OK, 0 rows affected (0.34 sec)\n\nCreating the table named * (Unicode number: U+002A) requires quoting.\n\nCREATE TABLE `*` (a INT);\n\nFloating point ambiguity:\n\nCREATE TABLE 8984444cce5d (x INT);\nQuery OK, 0 rows affected (0.38 sec)\n\nCREATE TABLE 8981e56cce5d (x INT);\nERROR 1064 (42000): You have an error in your SQL syntax; \n check the manual that corresponds to your MariaDB server version for the\nright syntax \n to use near \'8981e56cce5d (x INT)\' at line 1\n\nCREATE TABLE `8981e56cce5d` (x INT);\nQuery OK, 0 rows affected (0.39 sec)\n\nURL: https://mariadb.com/kb/en/identifier-names/','','https://mariadb.com/kb/en/identifier-names/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (475,29,'Identifier Case-sensitivity','Whether objects are case-sensitive or not is partly determined by the\nunderlying operating system. Unix-based systems are case-sensitive, Windows is\nnot, while Mac OS X is usually case-insensitive by default, but devices can be\nconfigured as case-sensitive using Disk Utility.\n\nDatabase, table, table aliases and trigger names are affected by the systems\ncase-sensitivity, while index, column, column aliases, stored routine and\nevent names are never case sensitive.\n\nLog file group name are case sensitive.\n\nThe lower_case_table_names server system variable plays a key role. It\ndetermines whether table names, aliases and database names are compared in a\ncase-sensitive manner. If set to 0 (the default on Unix-based systems), table\nnames and aliases and database names are compared in a case-sensitive manner.\nIf set to 1 (the default on Windows), names are stored in lowercase and not\ncompared in a case-sensitive manner. If set to 2 (the default on Mac OS X),\nnames are stored as declared, but compared in lowercase.\n\nIt is thus possible to make Unix-based systems behave like Windows and ignore\ncase-sensitivity, but the reverse is not true, as the underlying Windows\nfilesystem can not support this.\n\nEven on case-insensitive systems, you are required to use the same case\nconsistently within the same statement. The following statement fails, as it\nrefers to the table name in a different case.\n\nSELECT * FROM a_table WHERE A_table.id>10;\n\nFor a full list of identifier naming rules, see Identifier Names.\n\nPlease note that lower_case_table_names is a database initialization\nparameter. This means that, along with innodb_page_size, this variable must be\nset before running mysql_install_db, and will not change the behavior of\nservers unless applied before the creation of core system databases.\n\nURL: https://mariadb.com/kb/en/identifier-case-sensitivity/','','https://mariadb.com/kb/en/identifier-case-sensitivity/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (476,29,'Binary Literals','Binary literals can be written in one of the following formats: b\'value\',\nB\'value\' or 0bvalue, where value is a string composed by 0 and 1 digits.\n\nBinary literals are interpreted as binary strings, and are convenient to\nrepresent VARBINARY, BINARY or BIT values.\n\nTo convert a binary literal into an integer, just add 0.\n\nExamples\n--------\n\nPrinting the value as a binary string:\n\nSELECT 0b1000001;\n+-----------+\n| 0b1000001 |\n+-----------+\n| A |\n+-----------+\n\nConverting the same value into a number:\n\nSELECT 0b1000001+0;\n+-------------+\n| 0b1000001+0 |\n+-------------+\n| 65 |\n+-------------+\n\nURL: https://mariadb.com/kb/en/binary-literals/','','https://mariadb.com/kb/en/binary-literals/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (477,29,'Boolean Literals','In MariaDB, FALSE is a synonym of 0 and TRUE is a synonym of 1. These\nconstants are case insensitive, so TRUE, True, and true are equivalent.\n\nThese terms are not synonyms of 0 and 1 when used with the IS operator. So,\nfor example, 10 IS TRUE returns 1, while 10 = TRUE returns 0 (because 1 != 10).\n\nThe IS operator accepts a third constant exists: UNKNOWN. It is always a\nsynonym of NULL.\n\nTRUE and FALSE are reserved words, while UNKNOWN is not.\n\nURL: https://mariadb.com/kb/en/sql-language-structure-boolean-literals/','','https://mariadb.com/kb/en/sql-language-structure-boolean-literals/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (478,29,'Date and Time Literals','Standard syntaxes\n-----------------\n\nMariaDB supports the SQL standard and ODBC syntaxes for DATE, TIME and\nTIMESTAMP literals.\n\nSQL standard syntax:\n\n* DATE \'string\'\n* TIME \'string\'\n* TIMESTAMP \'string\'\n\nODBC syntax:\n\n* {d \'string\'}\n* {t \'string\'}\n* {ts \'string\'}\n\nThe timestamp literals are treated as DATETIME literals, because in MariaDB\nthe range of DATETIME is closer to the TIMESTAMP range in the SQL standard.\n\nstring is a string in a proper format, as explained below.\n\nDATE literals\n-------------\n\nA DATE string is a string in one of the following formats: \'YYYY-MM-DD\' or\n\'YY-MM-DD\'. Note that any punctuation character can be used as delimiter. All\ndelimiters must consist of 1 character. Different delimiters can be used in\nthe same string. Delimiters are optional (but if one delimiter is used, all\ndelimiters must be used).\n\nA DATE literal can also be an integer, in one of the following formats:\nYYYYMMDD or YYMMDD.\n\nAll the following DATE literals are valid, and they all represent the same\nvalue:\n\n\'19940101\'\n\'940101\'\n\'1994-01-01\'\n\'94/01/01\'\n\'1994-01/01\'\n\'94:01!01\'\n19940101\n940101\n\nDATETIME literals\n-----------------\n\nA DATETIME string is a string in one of the following formats: \'YYYY-MM-DD\nHH:MM:SS\' or \'YY-MM-DD HH:MM:SS\'. Note that any punctuation character can be\nused as delimiter for the date part and for the time part. All delimiters must\nconsist of 1 character. Different delimiters can be used in the same string.\nThe hours, minutes and seconds parts can consist of one character. For this\nreason, delimiters are mandatory for DATETIME literals.\n\nThe delimiter between the date part and the time part can be a T or any\nsequence of space characters (including tabs, new lines and carriage returns).\n\nA DATETIME literal can also be a number, in one of the following formats:\nYYYYMMDDHHMMSS, YYMMDDHHMMSS, YYYYMMDD or YYMMDD. In this case, all the time\nsubparts must consist of 2 digits.\n\nAll the following DATE literals are valid, and they all represent the same\nvalue:\n\n\'1994-01-01T12:30:03\'\n\'1994/01/01\\n\\t 12+30+03\'\n\'1994/01\\\\01\\n\\t 12+30-03\'\n\'1994-01-01 12:30:3\'\n\nTIME literals\n-------------\n\nA TIME string is a string in one of the following formats: \'D HH:MM:SS\',\n\'HH:MM:SS, \'D HH:MM\', \'HH:MM\', \'D HH\', or \'SS\'. D is a value from 0 to 34\nwhich represents days. : is the only allowed delimiter for TIME literals.\nDelimiters are mandatory, with an exception: the \'HHMMSS\' format is allowed.\nWhen delimiters are used, each part of the literal can consist of one\ncharacter.\n\nA TIME literal can also be a number in one of the following formats: HHMMSS,\nMMSS, or SS.\n\nThe following literals are equivalent:\n\n\'09:05:00\'\n\'9:05:0\'\n\'9:5:0\'\n\'090500\'\n\n2-digit years\n-------------\n\nThe year part in DATE and DATETIME literals is determined as follows:\n\n* 70 - 99 = 1970 - 1999\n* 00 - 69 = 2000 - 2069\n\nMicroseconds\n------------\n\nDATETIME and TIME literals can have an optional microseconds part. For both\nstring and numeric forms, it is expressed as a decimal part. Up to 6 decimal\ndigits are allowed. Examples:\n\n\'12:30:00.123456\'\n123000.123456\n\nSee Microseconds in MariaDB for details.\n\nDate and time literals and the SQL_MODE\n---------------------------------------\n\nUnless the SQL_MODE NO_ZERO_DATE flag is set, some special values are allowed:\nthe \'0000-00-00\' DATE, the \'00:00:00\' TIME, and the 0000-00-00 00:00:00\nDATETIME.\n\nIf the ALLOW_INVALID_DATES flag is set, the invalid dates (for example, 30th\nFebruary) are allowed. If not, if the NO_ZERO_DATE is set, an error is\nproduced; otherwise, a zero-date is returned.\n\nUnless the NO_ZERO_IN_DATE flag is set, each subpart of a date or time value\n(years, hours...) can be set to 0.\n\nURL: https://mariadb.com/kb/en/date-and-time-literals/','','https://mariadb.com/kb/en/date-and-time-literals/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (479,29,'Hexadecimal Literals','Hexadecimal literals can be written using any of the following syntaxes:\n\n* x\'value\'\n* X\'value\' (SQL standard)\n* 0xvalue (ODBC)\n\nvalue is a sequence of hexadecimal digits (from 0 to 9 and from A to F). The\ncase of the digits does not matter. With the first two syntaxes, value must\nconsist of an even number of digits. With the last syntax, digits can be even,\nand they are treated as if they had an extra 0 at the beginning.\n\nNormally, hexadecimal literals are interpreted as binary string, where each\npair of digits represents a character. When used in a numeric context, they\nare interpreted as integers. (See the example below). In no case can a\nhexadecimal literal be a decimal number.\n\nThe first two syntaxes; X\'value\' and x\'value, follow the SQL standard, and\nbehave as a string in all contexts in MariaDB since MariaDB 10.0.3 and MariaDB\n5.5.31 (fixing MDEV-4489). The latter syntax, 0xvalue, is a MySQL/MariaDB\nextension for hex hybrids and behaves as a string or as a number depending on\ncontext. MySQL treats all syntaxes the same, so there may be different results\nin MariaDB and MySQL (see below).\n\nExamples\n--------\n\nRepresenting the a character with the three syntaxes explained above:\n\nSELECT x\'61\', X\'61\', 0x61;\n+-------+-------+------+\n| x\'61\' | X\'61\' | 0x61 |\n+-------+-------+------+\n| a | a | a |\n+-------+-------+------+\n\nHexadecimal literals in a numeric context:\n\nSELECT 0 + 0xF, -0xF;\n+---------+------+\n| 0 + 0xF | -0xF |\n+---------+------+\n| 15 | -15 |\n+---------+------+\n\nFun with Types\n--------------\n\nCREATE TABLE t1 (a INT, b VARCHAR(10));\nINSERT INTO t1 VALUES (0x31, 0x61),(COALESCE(0x31), COALESCE(0x61));\n\nSELECT * FROM t1;\n+------+------+\n| a | b |\n+------+------+\n| 49 | a |\n| 1 | a |\n+------+------+\n\nThe reason for the differing results above is that when 0x31 is inserted\ndirectly to the column, it\'s treated as a number, while when 0x31 is passed to\nCOALESCE(), it\'s treated as a string, because:\n\n* HEX values have a string data type by default.\n* COALESCE() has the same data type as the argument.\n\nDifferences Between MariaDB and MySQL\n-------------------------------------\n\nSELECT x\'0a\'+0;\n+---------+\n| x\'0a\'+0 |\n+---------+\n| 0 |\n+---------+\n1 row in set, 1 warning (0.00 sec)\n\nWarning (Code 1292): Truncated incorrect DOUBLE value: \'\\x0A\'\n\nSELECT X\'0a\'+0;\n+---------+\n| X\'0a\'+0 |\n+---------+\n| 0 |\n+---------+\n1 row in set, 1 warning (0.00 sec)\n\nWarning (Code 1292): Truncated incorrect DOUBLE value: \'\\x0A\'\n\nSELECT 0x0a+0;\n+--------+\n| 0x0a+0 |\n+--------+\n| 10 |\n+--------+\n\nIn MySQL (up until at least MySQL 8.0.26):\n\nSELECT x\'0a\'+0;\n+---------+\n| x\'0a\'+0 |\n+---------+\n| 10 |\n+---------+\n\nSELECT X\'0a\'+0;\n+---------+\n| X\'0a\'+0 |\n+---------+\n| 10 |\n+---------+\n\nSELECT 0x0a+0;\n+--------+\n| 0x0a+0 |\n+--------+\n| 10 |\n+--------+\n\nURL: https://mariadb.com/kb/en/hexadecimal-literals/','','https://mariadb.com/kb/en/hexadecimal-literals/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (480,29,'Identifier Qualifiers','Qualifiers are used within SQL statements to reference data structures, such\nas databases, tables, or columns. For example, typically a SELECT query\ncontains references to some columns and at least one table.\n\nQualifiers can be composed by one or more identifiers, where the initial parts\naffect the context within which the final identifier is interpreted:\n\n* For a database, only the database identifier needs to be specified.\n* For objects which are contained in a database (like tables, views,\nfunctions, etc) the database identifier can be specified. If no database is\nspecified, the current database is assumed (see USE and DATABASE() for more\ndetails). If there is no default database and no database is specified, an\nerror is issued.\n* For column names, the table and the database are generally obvious from the\ncontext of the statement. It is however possible to specify the table\nidentifier, or the database identifier plus the table identifier.\n* An identifier is fully-qualified if it contains all possible qualifiers, for\nexample, the following column is fully qualified: db_name.tbl_name.col_name.\n\nIf a qualifier is composed by more than one identifier, a dot (.) must be used\nas a separator. All identifiers can be quoted individually. Extra spacing\n(including new lines and tabs) is allowed.\n\nAll the following examples are valid:\n\n* db_name.tbl_name.col_name\n* tbl_name\n* `db_name`.`tbl_name`.`col_name`\n* `db_name` . `tbl_name`\n* db_name. tbl_name\n\nIf a table identifier is prefixed with a dot (.), the default database is\nassumed. This syntax is supported for ODBC compliance, but has no practical\neffect on MariaDB. These qualifiers are equivalent:\n\n* tbl_name\n* . tbl_name\n* .`tbl_name`\n* . `tbl_name`\n\nFor DML statements, it is possible to specify a list of the partitions using\nthe PARTITION clause. See Partition Pruning and Selection for details.\n\nURL: https://mariadb.com/kb/en/identifier-qualifiers/','','https://mariadb.com/kb/en/identifier-qualifiers/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (481,29,'Identifier to File Name Mapping','Some identifiers map to a file name on the filesystem. Databases each have\ntheir own directory, while, depending on the storage engine, table names and\nindex names may map to a file name.\n\nNot all characters that are allowed in table names can be used in file names.\nEvery filesystem has its own rules of what characters can be used in file\nnames. To let the user create tables using all characters allowed in the SQL\nStandard and to not depend on whatever particular filesystem a particular\ndatabase resides, MariaDB encodes \"potentially unsafe\" characters in the table\nname to derive the corresponding file name.\n\nThis is implemented using a special character set. MariaDB converts a table\nname to the \"filename\" character set to get the file name for this table. And\nit converts the file name from the \"filename\" character set to, for example,\nutf8 to get the table name for this file name.\n\nThe conversion rules are as follows: if the identifier is made up only of\nbasic Latin numbers, letters and/or the underscore character, the encoding\nmatches the name (see however Identifier Case Sensitivity). Otherwise they are\nencoded according to the following table:\n\n+-----------------+------------+-----------+--------+-----------+-----------+\n| Code Range | Pattern | Number | Used | Unused | Blocks |\n+-----------------+------------+-----------+--------+-----------+-----------+\n| 00C0..017F | [@][0..4][ | 5*20= 100 | 97 | 3 | Latin-1 |\n| | ..z] | | | | Supplemen |\n| | | | | | + Latin |\n| | | | | | Extended- |\n| | | | | | |\n+-----------------+------------+-----------+--------+-----------+-----------+\n| 0370..03FF | [@][5..9][ | 5*20= 100 | 88 | 12 | Greek |\n| | ..z] | | | | and |\n| | | | | | Coptic |\n+-----------------+------------+-----------+--------+-----------+-----------+\n| 0400..052F | [@][g..z][ | 20*7= 140 | 137 | 3 | Cyrillic |\n| | ..6] | | | | + |\n| | | | | | Cyrillic |\n| | | | | | Supplemen |\n| | | | | | |\n+-----------------+------------+-----------+--------+-----------+-----------+\n| 0530..058F | [@][g..z][ | 20*2= 40 | 38 | 2 | Armenian |\n| | ..8] | | | | |\n+-----------------+------------+-----------+--------+-----------+-----------+\n| 2160..217F | [@][g..z][ | 20*1= 20 | 16 | 4 | Number |\n| | ] | | | | Forms |\n+-----------------+------------+-----------+--------+-----------+-----------+\n| 0180..02AF | [@][g..z][ | 20*11=220 | 203 | 17 | Latin |\n| | ..k] | | | | Extended- |\n| | | | | | + IPA |\n| | | | | | Extension |\n| | | | | | |\n+-----------------+------------+-----------+--------+-----------+-----------+\n| 1E00..1EFF | [@][g..z][ | 20*7= 140 | 136 | 4 | Latin |\n| | ..r] | | | | Extended |\n| | | | | | Additiona |\n| | | | | | |\n+-----------------+------------+-----------+--------+-----------+-----------+\n| 1F00..1FFF | [@][g..z][ | 20*8= 160 | 144 | 16 | Greek |\n| | ..z] | | | | Extended |\n+-----------------+------------+-----------+--------+-----------+-----------+\n| .... .... | [@][a..f][ | 6*20= 120 | 0 | 120 | RESERVED |\n| | ..z] | | | | |\n+-----------------+------------+-----------+--------+-----------+-----------+\n| 24B6..24E9 | [@][@][a.. | 26 | 26 | 0 | Enclosed |\n| | ] | | | | Alphanume |\n| | | | | | ics |\n+-----------------+------------+-----------+--------+-----------+-----------+\n| FF21..FF5A | [@][a..z][ | 26 | 26 | 0 | Halfwidth |\n| | ] | | | | and |\n| | | | | | Fullwidth |\n| | | | | | forms |\n+-----------------+------------+-----------+--------+-----------+-----------+\n\nCode Range values are UCS-2.\n\nAll of this encoding happens transparently at the filesystem level with one\nexception. Until MySQL 5.1.6, an old encoding was used. Identifiers created in\na version before MySQL 5.1.6, and which haven\'t been updated to the new\nencoding, the server prefixes mysql50 to their name.\n\nExamples\n--------\n\nFind the file name for a table with a non-Latin1 name:\n\nselect cast(convert(\"this_is_таблица\" USING filename) as binary);\n+------------------------------------------------------------------+\n| cast(convert(\"this_is_таблица\" USING filename) as binary) |\n+------------------------------------------------------------------+\n| this_is_@y0@g0@h0@r0@o0@i1@g0 |\n+------------------------------------------------------------------+\n\nFind the table name for a file name:\n\nselect convert(_filename \"this_is_@y0@g0@h0@r0@o0@i1@g0\" USING utf8);\n+---------------------------------------------------------------+\n| convert(_filename \"this_is_@y0@g0@h0@r0@o0@i1@g0\" USING utf8) |\n+---------------------------------------------------------------+\n| this_is_таблица |\n+---------------------------------------------------------------+\n\nAn old table created before MySQL 5.1.6, with the old encoding:\n\nSHOW TABLES;\n+--------------------+\n| Tables_in_test |\n+--------------------+\n| #mysql50#table@1 |\n+--------------------+\n\nThe prefix needs to be supplied to reference this table:\n\nSHOW COLUMNS FROM `table@1`;\nERROR 1146 (42S02): Table \'test.table@1\' doesn\'t exist\n\nSHOW COLUMNS FROM `#mysql50#table@1`;\n+-------+---------+------+-----+---------+-------+\n| Field | Type | Null | Key | Default | Extra |\n+-------+---------+------+-----+---------+-------+\n| i | int(11) | YES | | NULL | |\n+-------+---------+------+-----+---------+-------+\n\nURL: https://mariadb.com/kb/en/identifier-to-file-name-mapping/','','https://mariadb.com/kb/en/identifier-to-file-name-mapping/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (482,29,'Numeric Literals','Numeric literals are written as a sequence of digits from 0 to 9. Initial\nzeros are ignored. A sign can always precede the digits, but it is optional\nfor positive numbers. In decimal numbers, the integer part and the decimal\npart are divided with a dot (.).\n\nIf the integer part is zero, it can be omitted, but the literal must begin\nwith a dot.\n\nThe notation with exponent can be used. The exponent is preceded by an E or e\ncharacter. The exponent can be preceded by a sign and must be an integer. A\nnumber N with an exponent part X, is calculated as N * POW(10, X).\n\nIn some cases, adding zeroes at the end of a decimal number can increment the\nprecision of the expression where the number is used. For example, PI() by\ndefault returns a number with 6 decimal digits. But the PI()+0.0000000000\nexpression (with 10 zeroes) returns a number with 10 decimal digits.\n\nHexadecimal literals are interpreted as numbers when used in numeric contexts.\n\nExamples\n--------\n\n10\n+10\n-10\n\nAll these literals are equivalent:\n\n0.1\n.1\n+0.1\n+.1\n\nWith exponents:\n\n0.2E3 -- 0.2 * POW(10, 3) = 200\n.2e3\n.2e+2\n1.1e-10 -- 0.00000000011\n-1.1e10 -- -11000000000\n\nURL: https://mariadb.com/kb/en/numeric-iterals/','','https://mariadb.com/kb/en/numeric-iterals/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (483,29,'Reserved Words','The following is a list of all reserved words in MariaDB.\n\nReserved words cannot be used as Identifiers, unless they are quoted.\n\nThe definitive list of reserved words for each version can be found by\nexamining the sql/lex.h and sql/sql_yacc.yy files.\n\nReserved Words\n--------------\n\n+--------------------------------------------+--------------------------------+\n| Keyword | Notes |\n+--------------------------------------------+--------------------------------+\n| ACCESSIBLE | |\n+--------------------------------------------+--------------------------------+\n| ADD | |\n+--------------------------------------------+--------------------------------+\n| ALL | |\n+--------------------------------------------+--------------------------------+\n| ALTER | |\n+--------------------------------------------+--------------------------------+\n| ANALYZE | |\n+--------------------------------------------+--------------------------------+\n| AND | |\n+--------------------------------------------+--------------------------------+\n| AS | |\n+--------------------------------------------+--------------------------------+\n| ASC | |\n+--------------------------------------------+--------------------------------+\n| ASENSITIVE | |\n+--------------------------------------------+--------------------------------+\n| BEFORE | |\n+--------------------------------------------+--------------------------------+\n| BETWEEN | |\n+--------------------------------------------+--------------------------------+\n| BIGINT | |\n+--------------------------------------------+--------------------------------+\n| BINARY | |\n+--------------------------------------------+--------------------------------+\n| BLOB | |\n+--------------------------------------------+--------------------------------+\n| BOTH | |\n+--------------------------------------------+--------------------------------+\n| BY | |\n+--------------------------------------------+--------------------------------+\n| CALL | |\n+--------------------------------------------+--------------------------------+\n| CASCADE | |\n+--------------------------------------------+--------------------------------+\n| CASE | |\n+--------------------------------------------+--------------------------------+\n| CHANGE | |\n+--------------------------------------------+--------------------------------+\n| CHAR | |\n+--------------------------------------------+--------------------------------+\n| CHARACTER | |\n+--------------------------------------------+--------------------------------+\n| CHECK | |\n+--------------------------------------------+--------------------------------+\n| COLLATE | |\n+--------------------------------------------+--------------------------------+\n| COLUMN | |\n+--------------------------------------------+--------------------------------+\n| CONDITION | |\n+--------------------------------------------+--------------------------------+\n| CONSTRAINT | |\n+--------------------------------------------+--------------------------------+\n| CONTINUE | |\n+--------------------------------------------+--------------------------------+\n| CONVERT | |\n+--------------------------------------------+--------------------------------+\n| CREATE | |\n+--------------------------------------------+--------------------------------+\n| CROSS | |\n+--------------------------------------------+--------------------------------+\n| CURRENT_DATE | |\n+--------------------------------------------+--------------------------------+\n| CURRENT_ROLE | |\n+--------------------------------------------+--------------------------------+\n| CURRENT_TIME | |\n+--------------------------------------------+--------------------------------+\n| CURRENT_TIMESTAMP | |\n+--------------------------------------------+--------------------------------+\n| CURRENT_USER | |\n+--------------------------------------------+--------------------------------+\n| CURSOR | |\n+--------------------------------------------+--------------------------------+\n| DATABASE | |\n+--------------------------------------------+--------------------------------+\n| DATABASES | |\n+--------------------------------------------+--------------------------------+\n| DAY_HOUR | |\n+--------------------------------------------+--------------------------------+\n| DAY_MICROSECOND | |\n+--------------------------------------------+--------------------------------+\n| DAY_MINUTE | |\n+--------------------------------------------+--------------------------------+\n| DAY_SECOND | |\n+--------------------------------------------+--------------------------------+\n| DEC | |\n+--------------------------------------------+--------------------------------+\n| DECIMAL | |\n+--------------------------------------------+--------------------------------+\n| DECLARE | |\n+--------------------------------------------+--------------------------------+\n| DEFAULT | |\n+--------------------------------------------+--------------------------------+\n| DELAYED | |\n+--------------------------------------------+--------------------------------+\n| DELETE | |\n+--------------------------------------------+--------------------------------+\n| DELETE_DOMAIN_ID | |\n+--------------------------------------------+--------------------------------+\n| DESC | |\n+--------------------------------------------+--------------------------------+\n| DESCRIBE | |\n+--------------------------------------------+--------------------------------+\n| DETERMINISTIC | |\n+--------------------------------------------+--------------------------------+\n| DISTINCT | |\n+--------------------------------------------+--------------------------------+\n| DISTINCTROW | |\n+--------------------------------------------+--------------------------------+\n| DIV | |\n+--------------------------------------------+--------------------------------+\n| DO_DOMAIN_IDS | |\n+--------------------------------------------+--------------------------------+\n| DOUBLE | |\n+--------------------------------------------+--------------------------------+\n| DROP | |\n+--------------------------------------------+--------------------------------+\n| DUAL | |\n+--------------------------------------------+--------------------------------+\n| EACH | |\n+--------------------------------------------+--------------------------------+\n| ELSE | |\n+--------------------------------------------+--------------------------------+\n| ELSEIF | |\n+--------------------------------------------+--------------------------------+\n| ENCLOSED | |\n+--------------------------------------------+--------------------------------+\n| ESCAPED | |\n+--------------------------------------------+--------------------------------+\n| EXCEPT | Added in MariaDB 10.3.0 |\n+--------------------------------------------+--------------------------------+\n| EXISTS | |\n+--------------------------------------------+--------------------------------+\n| EXIT | |\n+--------------------------------------------+--------------------------------+\n| EXPLAIN | |\n+--------------------------------------------+--------------------------------+\n| FALSE | |\n+--------------------------------------------+--------------------------------+\n| FETCH | |\n+--------------------------------------------+--------------------------------+\n| FLOAT | |\n+--------------------------------------------+--------------------------------+\n| FLOAT4 | |\n+--------------------------------------------+--------------------------------+\n| FLOAT8 | |\n+--------------------------------------------+--------------------------------+\n| FOR | |\n+--------------------------------------------+--------------------------------+\n| FORCE | |\n+--------------------------------------------+--------------------------------+\n| FOREIGN | |\n+--------------------------------------------+--------------------------------+\n| FROM | |\n+--------------------------------------------+--------------------------------+\n| FULLTEXT | |\n+--------------------------------------------+--------------------------------+\n| GENERAL | |\n+--------------------------------------------+--------------------------------+\n| GRANT | |\n+--------------------------------------------+--------------------------------+\n| GROUP | |\n+--------------------------------------------+--------------------------------+\n| HAVING | |\n+--------------------------------------------+--------------------------------+\n| HIGH_PRIORITY | |\n+--------------------------------------------+--------------------------------+\n| HOUR_MICROSECOND | |\n+--------------------------------------------+--------------------------------+\n| HOUR_MINUTE | |\n+--------------------------------------------+--------------------------------+\n| HOUR_SECOND | |','','https://mariadb.com/kb/en/reserved-words/');
+update help_topic set description = CONCAT(description, '\n+--------------------------------------------+--------------------------------+\n| IF | |\n+--------------------------------------------+--------------------------------+\n| IGNORE | |\n+--------------------------------------------+--------------------------------+\n| IGNORE_DOMAIN_IDS | |\n+--------------------------------------------+--------------------------------+\n| IGNORE_SERVER_IDS | |\n+--------------------------------------------+--------------------------------+\n| IN | |\n+--------------------------------------------+--------------------------------+\n| INDEX | |\n+--------------------------------------------+--------------------------------+\n| INFILE | |\n+--------------------------------------------+--------------------------------+\n| INNER | |\n+--------------------------------------------+--------------------------------+\n| INOUT | |\n+--------------------------------------------+--------------------------------+\n| INSENSITIVE | |\n+--------------------------------------------+--------------------------------+\n| INSERT | |\n+--------------------------------------------+--------------------------------+\n| INT | |\n+--------------------------------------------+--------------------------------+\n| INT1 | |\n+--------------------------------------------+--------------------------------+\n| INT2 | |\n+--------------------------------------------+--------------------------------+\n| INT3 | |\n+--------------------------------------------+--------------------------------+\n| INT4 | |\n+--------------------------------------------+--------------------------------+\n| INT8 | |\n+--------------------------------------------+--------------------------------+\n| INTEGER | |\n+--------------------------------------------+--------------------------------+\n| INTERSECT | Added in MariaDB 10.3.0 |\n+--------------------------------------------+--------------------------------+\n| INTERVAL | |\n+--------------------------------------------+--------------------------------+\n| INTO | |\n+--------------------------------------------+--------------------------------+\n| IS | |\n+--------------------------------------------+--------------------------------+\n| ITERATE | |\n+--------------------------------------------+--------------------------------+\n| JOIN | |\n+--------------------------------------------+--------------------------------+\n| KEY | |\n+--------------------------------------------+--------------------------------+\n| KEYS | |\n+--------------------------------------------+--------------------------------+\n| KILL | |\n+--------------------------------------------+--------------------------------+\n| LEADING | |\n+--------------------------------------------+--------------------------------+\n| LEAVE | |\n+--------------------------------------------+--------------------------------+\n| LEFT | |\n+--------------------------------------------+--------------------------------+\n| LIKE | |\n+--------------------------------------------+--------------------------------+\n| LIMIT | |\n+--------------------------------------------+--------------------------------+\n| LINEAR | |\n+--------------------------------------------+--------------------------------+\n| LINES | |\n+--------------------------------------------+--------------------------------+\n| LOAD | |\n+--------------------------------------------+--------------------------------+\n| LOCALTIME | |\n+--------------------------------------------+--------------------------------+\n| LOCALTIMESTAMP | |\n+--------------------------------------------+--------------------------------+\n| LOCK | |\n+--------------------------------------------+--------------------------------+\n| LONG | |\n+--------------------------------------------+--------------------------------+\n| LONGBLOB | |\n+--------------------------------------------+--------------------------------+\n| LONGTEXT | |\n+--------------------------------------------+--------------------------------+\n| LOOP | |\n+--------------------------------------------+--------------------------------+\n| LOW_PRIORITY | |\n+--------------------------------------------+--------------------------------+\n| MASTER_HEARTBEAT_PERIOD | |\n+--------------------------------------------+--------------------------------+\n| MASTER_SSL_VERIFY_SERVER_CERT | |\n+--------------------------------------------+--------------------------------+\n| MATCH | |\n+--------------------------------------------+--------------------------------+\n| MAXVALUE | |\n+--------------------------------------------+--------------------------------+\n| MEDIUMBLOB | |\n+--------------------------------------------+--------------------------------+\n| MEDIUMINT | |\n+--------------------------------------------+--------------------------------+\n| MEDIUMTEXT | |\n+--------------------------------------------+--------------------------------+\n| MIDDLEINT | |\n+--------------------------------------------+--------------------------------+\n| MINUTE_MICROSECOND | |\n+--------------------------------------------+--------------------------------+\n| MINUTE_SECOND | |\n+--------------------------------------------+--------------------------------+\n| MOD | |\n+--------------------------------------------+--------------------------------+\n| MODIFIES | |\n+--------------------------------------------+--------------------------------+\n| NATURAL | |\n+--------------------------------------------+--------------------------------+\n| NOT | |\n+--------------------------------------------+--------------------------------+\n| NO_WRITE_TO_BINLOG | |\n+--------------------------------------------+--------------------------------+\n| NULL | |\n+--------------------------------------------+--------------------------------+\n| NUMERIC | |\n+--------------------------------------------+--------------------------------+\n| OFFSET | Added in MariaDB 10.6.0 |\n+--------------------------------------------+--------------------------------+\n| ON | |\n+--------------------------------------------+--------------------------------+\n| OPTIMIZE | |\n+--------------------------------------------+--------------------------------+\n| OPTION | |\n+--------------------------------------------+--------------------------------+\n| OPTIONALLY | |\n+--------------------------------------------+--------------------------------+\n| OR | |\n+--------------------------------------------+--------------------------------+\n| ORDER | |\n+--------------------------------------------+--------------------------------+\n| OUT | |\n+--------------------------------------------+--------------------------------+\n| OUTER | |\n+--------------------------------------------+--------------------------------+\n| OUTFILE | |\n+--------------------------------------------+--------------------------------+\n| OVER | |\n+--------------------------------------------+--------------------------------+\n| PAGE_CHECKSUM | |\n+--------------------------------------------+--------------------------------+\n| PARSE_VCOL_EXPR | |\n+--------------------------------------------+--------------------------------+\n| PARTITION | |\n+--------------------------------------------+--------------------------------+\n| POSITION | |\n+--------------------------------------------+--------------------------------+\n| PRECISION | |\n+--------------------------------------------+--------------------------------+\n| PRIMARY | |\n+--------------------------------------------+--------------------------------+\n| PROCEDURE | |\n+--------------------------------------------+--------------------------------+\n| PURGE | |\n+--------------------------------------------+--------------------------------+\n| RANGE | |\n+--------------------------------------------+--------------------------------+\n| READ | |\n+--------------------------------------------+--------------------------------+\n| READS | |\n+--------------------------------------------+--------------------------------+\n| READ_WRITE | |\n+--------------------------------------------+--------------------------------+\n| REAL | |\n+--------------------------------------------+--------------------------------+\n| RECURSIVE | |\n+--------------------------------------------+--------------------------------+\n| REF_SYSTEM_ID | |\n+--------------------------------------------+--------------------------------+\n| REFERENCES | |\n+--------------------------------------------+--------------------------------+\n| REGEXP | |\n+--------------------------------------------+--------------------------------+\n| RELEASE | |\n+--------------------------------------------+--------------------------------+\n| RENAME | |') WHERE help_topic_id = 483;
+update help_topic set description = CONCAT(description, '\n+--------------------------------------------+--------------------------------+\n| REPEAT | |\n+--------------------------------------------+--------------------------------+\n| REPLACE | |\n+--------------------------------------------+--------------------------------+\n| REQUIRE | |\n+--------------------------------------------+--------------------------------+\n| RESIGNAL | |\n+--------------------------------------------+--------------------------------+\n| RESTRICT | |\n+--------------------------------------------+--------------------------------+\n| RETURN | |\n+--------------------------------------------+--------------------------------+\n| RETURNING | |\n+--------------------------------------------+--------------------------------+\n| REVOKE | |\n+--------------------------------------------+--------------------------------+\n| RIGHT | |\n+--------------------------------------------+--------------------------------+\n| RLIKE | |\n+--------------------------------------------+--------------------------------+\n| ROWS | |\n+--------------------------------------------+--------------------------------+\n| SCHEMA | |\n+--------------------------------------------+--------------------------------+\n| SCHEMAS | |\n+--------------------------------------------+--------------------------------+\n| SECOND_MICROSECOND | |\n+--------------------------------------------+--------------------------------+\n| SELECT | |\n+--------------------------------------------+--------------------------------+\n| SENSITIVE | |\n+--------------------------------------------+--------------------------------+\n| SEPARATOR | |\n+--------------------------------------------+--------------------------------+\n| SET | |\n+--------------------------------------------+--------------------------------+\n| SHOW | |\n+--------------------------------------------+--------------------------------+\n| SIGNAL | |\n+--------------------------------------------+--------------------------------+\n| SLOW | |\n+--------------------------------------------+--------------------------------+\n| SMALLINT | |\n+--------------------------------------------+--------------------------------+\n| SPATIAL | |\n+--------------------------------------------+--------------------------------+\n| SPECIFIC | |\n+--------------------------------------------+--------------------------------+\n| SQL | |\n+--------------------------------------------+--------------------------------+\n| SQLEXCEPTION | |\n+--------------------------------------------+--------------------------------+\n| SQLSTATE | |\n+--------------------------------------------+--------------------------------+\n| SQLWARNING | |\n+--------------------------------------------+--------------------------------+\n| SQL_BIG_RESULT | |\n+--------------------------------------------+--------------------------------+\n| SQL_CALC_FOUND_ROWS | |\n+--------------------------------------------+--------------------------------+\n| SQL_SMALL_RESULT | |\n+--------------------------------------------+--------------------------------+\n| SSL | |\n+--------------------------------------------+--------------------------------+\n| STARTING | |\n+--------------------------------------------+--------------------------------+\n| STATS_AUTO_RECALC | |\n+--------------------------------------------+--------------------------------+\n| STATS_PERSISTENT | |\n+--------------------------------------------+--------------------------------+\n| STATS_SAMPLE_PAGES | |\n+--------------------------------------------+--------------------------------+\n| STRAIGHT_JOIN | |\n+--------------------------------------------+--------------------------------+\n| TABLE | |\n+--------------------------------------------+--------------------------------+\n| TERMINATED | |\n+--------------------------------------------+--------------------------------+\n| THEN | |\n+--------------------------------------------+--------------------------------+\n| TINYBLOB | |\n+--------------------------------------------+--------------------------------+\n| TINYINT | |\n+--------------------------------------------+--------------------------------+\n| TINYTEXT | |\n+--------------------------------------------+--------------------------------+\n| TO | |\n+--------------------------------------------+--------------------------------+\n| TRAILING | |\n+--------------------------------------------+--------------------------------+\n| TRIGGER | |\n+--------------------------------------------+--------------------------------+\n| TRUE | |\n+--------------------------------------------+--------------------------------+\n| UNDO | |\n+--------------------------------------------+--------------------------------+\n| UNION | |\n+--------------------------------------------+--------------------------------+\n| UNIQUE | |\n+--------------------------------------------+--------------------------------+\n| UNLOCK | |\n+--------------------------------------------+--------------------------------+\n| UNSIGNED | |\n+--------------------------------------------+--------------------------------+\n| UPDATE | |\n+--------------------------------------------+--------------------------------+\n| USAGE | |\n+--------------------------------------------+--------------------------------+\n| USE | |\n+--------------------------------------------+--------------------------------+\n| USING | |\n+--------------------------------------------+--------------------------------+\n| UTC_DATE | |\n+--------------------------------------------+--------------------------------+\n| UTC_TIME | |\n+--------------------------------------------+--------------------------------+\n| UTC_TIMESTAMP | |\n+--------------------------------------------+--------------------------------+\n| VALUES | |\n+--------------------------------------------+--------------------------------+\n| VARBINARY | |\n+--------------------------------------------+--------------------------------+\n| VARCHAR | |\n+--------------------------------------------+--------------------------------+\n| VARCHARACTER | |\n+--------------------------------------------+--------------------------------+\n| VARYING | |\n+--------------------------------------------+--------------------------------+\n| WHEN | |\n+--------------------------------------------+--------------------------------+\n| WHERE | |\n+--------------------------------------------+--------------------------------+\n| WHILE | |\n+--------------------------------------------+--------------------------------+\n| WINDOW | Only disallowed for table |\n| | aliases. |\n+--------------------------------------------+--------------------------------+\n| WITH | |\n+--------------------------------------------+--------------------------------+\n| WRITE | |\n+--------------------------------------------+--------------------------------+\n| XOR | |\n+--------------------------------------------+--------------------------------+\n| YEAR_MONTH | |\n+--------------------------------------------+--------------------------------+\n| ZEROFILL | |\n+--------------------------------------------+--------------------------------+\n\nExceptions\n----------\n\nSome keywords are exceptions for historical reasons, and are permitted as\nunquoted identifiers. These include:\n\n+-----------------------------------------------------------------------------+\n| Keyword |\n+-----------------------------------------------------------------------------+\n| ACTION |\n+-----------------------------------------------------------------------------+\n| BIT |\n+-----------------------------------------------------------------------------+\n| DATE |\n+-----------------------------------------------------------------------------+\n| ENUM |\n+-----------------------------------------------------------------------------+\n| NO |\n+-----------------------------------------------------------------------------+\n| TEXT |\n+-----------------------------------------------------------------------------+\n| TIME |\n+-----------------------------------------------------------------------------+\n| TIMESTAMP |\n+-----------------------------------------------------------------------------+\n\nOracle Mode\n-----------\n\nIn Oracle mode, from MariaDB 10.3, there are a number of extra reserved words:\n\n+--------------------------------------------+--------------------------------+\n| Keyword | Notes |\n+--------------------------------------------+--------------------------------+\n| BODY | |\n+--------------------------------------------+--------------------------------+\n| ELSIF | |\n+--------------------------------------------+--------------------------------+\n| GOTO | |\n+--------------------------------------------+--------------------------------+\n| HISTORY | <= MariaDB 10.3.6 only |') WHERE help_topic_id = 483;
+update help_topic set description = CONCAT(description, '\n+--------------------------------------------+--------------------------------+\n| MINUS | From MariaDB 10.6.1 |\n+--------------------------------------------+--------------------------------+\n| OTHERS | |\n+--------------------------------------------+--------------------------------+\n| PACKAGE | |\n+--------------------------------------------+--------------------------------+\n| PERIOD | <= MariaDB 10.3.6 only |\n+--------------------------------------------+--------------------------------+\n| RAISE | |\n+--------------------------------------------+--------------------------------+\n| ROWNUM | From MariaDB 10.6.1 |\n+--------------------------------------------+--------------------------------+\n| ROWTYPE | |\n+--------------------------------------------+--------------------------------+\n| SYSDATE | From MariaDB 10.6.1 |\n+--------------------------------------------+--------------------------------+\n| SYSTEM | <= MariaDB 10.3.6 only. Note |\n| | however that SYSTEM sometimes |\n| | needs to be quoted to avoid |\n| | confusion with |\n| | System-versioned tables. |\n+--------------------------------------------+--------------------------------+\n| SYSTEM_TIME | <= MariaDB 10.3.6 only |\n+--------------------------------------------+--------------------------------+\n| VERSIONING | <= MariaDB 10.3.6 only |\n+--------------------------------------------+--------------------------------+\n| WITHOUT | <= MariaDB 10.3.6 only |\n+--------------------------------------------+--------------------------------+\n\nFunction Names\n--------------\n\nIf the IGNORE_SPACE SQL_MODE flag is set, function names become reserved words.\n\nURL: https://mariadb.com/kb/en/reserved-words/') WHERE help_topic_id = 483;
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (484,29,'String Literals','Strings are sequences of characters and are enclosed with quotes.\n\nThe syntax is:\n\n[_charset_name]\'string\' [COLLATE collation_name]\n\nFor example:\n\n\'The MariaDB Foundation\'\n_utf8 \'Foundation\' COLLATE utf8_unicode_ci;\n\nStrings can either be enclosed in single quotes or in double quotes (the same\ncharacter must be used to both open and close the string).\n\nThe ANSI SQL-standard does not permit double quotes for enclosing strings, and\nalthough MariaDB does by default, if the MariaDB server has enabled the\nANSI_QUOTES_SQL SQL_MODE, double quotes will be treated as being used for\nidentifiers instead of strings.\n\nStrings that are next to each other are automatically concatenated. For\nexample:\n\n\'The \' \'MariaDB \' \'Foundation\'\n\nand\n\n\'The MariaDB Foundation\'\n\nare equivalent.\n\nThe \\ (backslash character) is used to escape characters (unless the SQL_MODE\nhasn\'t been set to NO_BACKSLASH_ESCAPES). For example:\n\n\'MariaDB\'s new features\'\n\nis not a valid string because of the single quote in the middle of the string,\nwhich is treated as if it closes the string, but is actually meant as part of\nthe string, an apostrophe. The backslash character helps in situations like\nthis:\n\n\'MariaDB\\\'s new features\'\n\nis now a valid string, and if displayed, will appear without the backslash.\n\nSELECT \'MariaDB\\\'s new features\';\n+------------------------+\n| MariaDB\'s new features |\n+------------------------+\n| MariaDB\'s new features |\n+------------------------+\n\nAnother way to escape the quoting character is repeating it twice:\n\nSELECT \'I\'\'m here\', \"\"\"Double\"\"\";\n+----------+----------+\n| I\'m here | \"Double\" |\n+----------+----------+\n| I\'m here | \"Double\" |\n+----------+----------+\n\nEscape Sequences\n----------------\n\nThere are other escape sequences also. Here is a full list:\n\n+-----------------------------------------------+-----------------------------+\n| Escape sequence | Character |\n+-----------------------------------------------+-----------------------------+\n| \\0 | ASCII NUL (0x00). |\n+-----------------------------------------------+-----------------------------+\n| \\\' | Single quote (\"\'\"). |\n+-----------------------------------------------+-----------------------------+\n| \\\" | Double quote (\"\"\"). |\n+-----------------------------------------------+-----------------------------+\n| \\b | Backspace. |\n+-----------------------------------------------+-----------------------------+\n| \\n | Newline, or linefeed,. |\n+-----------------------------------------------+-----------------------------+\n| \\r | Carriage return. |\n+-----------------------------------------------+-----------------------------+\n| \\t | Tab. |\n+-----------------------------------------------+-----------------------------+\n| \\Z | ASCII 26 (Control+Z). See |\n| | note following the table. |\n+-----------------------------------------------+-----------------------------+\n| \\\\ | Backslash (\"\\\"). |\n+-----------------------------------------------+-----------------------------+\n| \\% | \"%\" character. See note |\n| | following the table. |\n+-----------------------------------------------+-----------------------------+\n| \\_ | A \"_\" character. See note |\n| | following the table. |\n+-----------------------------------------------+-----------------------------+\n\nEscaping the % and _ characters can be necessary when using the LIKE operator,\nwhich treats them as special characters.\n\nThe ASCII 26 character (\\Z) needs to be escaped when included in a batch file\nwhich needs to be executed in Windows. The reason is that ASCII 26, in\nWindows, is the end of file (EOF).\n\nBackslash (\\), if not used as an escape character, must always be escaped.\nWhen followed by a character that is not in the above table, backslashes will\nsimply be ignored.\n\nURL: https://mariadb.com/kb/en/string-literals/','','https://mariadb.com/kb/en/string-literals/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (485,29,'Table Value Constructors','MariaDB starting with 10.3.3\n----------------------------\nTable Value Constructors were introduced in MariaDB 10.3.3\n\nSyntax\n------\n\nVALUES ( row_value[, row_value...]), (...)...\n\nDescription\n-----------\n\nIn Unions, Views, and sub-queries, a Table Value Constructor (TVC) allows you\nto inject arbitrary values into the result-set. The given values must have the\nsame number of columns as the result-set, otherwise it returns Error 1222.\n\nExamples\n--------\n\nUsing TVC\'s with UNION operations:\n\nCREATE TABLE test.t1 (val1 INT, val2 INT);\nINSERT INTO test.t1 VALUES(5, 8), (3, 4), (1, 2);\n\nSELECT * FROM test.t1\nUNION\nVALUES (70, 90), (100, 110);\n\n+------+------+\n| val1 | val2 |\n+------+------+\n| 5 | 8 | \n| 3 | 4 |\n| 1 | 2 |\n| 70 | 90 |\n| 100 | 110 |\n+------+------+\n\nUsing TVC\'s with a CREATE VIEW statement:\n\nCREATE VIEW v1 AS VALUES (7, 9), (9, 10);\n\nSELECT * FROM v1;\n+---+----+\n| 7 | 9 |\n+---+----+\n| 7 | 9 |\n| 9 | 10 |\n+---+----+\n\nUsing TVC with an ORDER BY clause:\n\nSELECT * FROM test.t1\nUNION\nVALUES (10, 20), (30, 40), (50, 60), (70, 80)\nORDER BY val1 DESC;\n\nUsing TVC with LIMIT clause:\n\nSELECT * FROM test.t1\nUNION\nVALUES (10, 20), (30, 40), (50, 60), (70, 80)\nLIMIT 2 OFFSET 4;\n\n+------+------+\n| val1 | val2 |\n+------+------+\n| 30 | 40 | \n| 50 | 60 |\n+------+------+\n\nURL: https://mariadb.com/kb/en/table-value-constructors/','','https://mariadb.com/kb/en/table-value-constructors/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (486,29,'User-Defined Variables','User-defined variables are variables which can be created by the user and\nexist in the session. This means that no one can access user-defined variables\nthat have been set by another user, and when the session is closed these\nvariables expire. However, these variables can be shared between several\nqueries and stored programs.\n\nUser-defined variables names must be preceded by a single at character (@).\nWhile it is safe to use a reserved word as a user-variable name, the only\nallowed characters are ASCII letters, digits, dollar sign ($), underscore (_)\nand dot (.). If other characters are used, the name can be quoted in one of\nthe following ways:\n\n* @`var_name`\n* @\'var_name\'\n* @\"var_name\"\n\nThese characters can be escaped as usual.\n\nUser-variables names are case insensitive, though they were case sensitive in\nMySQL 4.1 and older versions.\n\nUser-defined variables cannot be declared. They can be read even if no value\nhas been set yet; in that case, they are NULL. To set a value for a\nuser-defined variable you can use:\n\n* SET statement;\n* := operator within a SQL statement;\n* SELECT ... INTO.\n\nSince user-defined variables type cannot be declared, the only way to force\ntheir type is using CAST() or CONVERT():\n\nSET @str = CAST(123 AS CHAR(5));\n\nIf a variable has not been used yet, its value is NULL:\n\nSELECT @x IS NULL;\n+------------+\n| @x IS NULL |\n+------------+\n| 1 |\n+------------+\n\nIt is unsafe to read a user-defined variable and set its value in the same\nstatement (unless the command is SET), because the order of these actions is\nundefined.\n\nUser-defined variables can be used in most MariaDB\'s statements and clauses\nwhich accept an SQL expression. However there are some exceptions, like the\nLIMIT clause.\n\nThey must be used to PREPARE a prepared statement:\n\n@sql = \'DELETE FROM my_table WHERE c>1;\';\nPREPARE stmt FROM @sql;\nEXECUTE stmt;\nDEALLOCATE PREPARE stmt;\n\nAnother common use is to include a counter in a query:\n\nSET @var = 0;\nSELECT a, b, c, (@var:=@var+1) AS counter FROM my_table;\n\nInformation Schema\n------------------\n\nUser-defined variables can be viewed in the Information Schema USER_VARIABLES\nTable (as part of the User Variables plugin) from MariaDB 10.2.\n\nFlushing User-Defined Variables\n-------------------------------\n\nUser-defined variables are reset and the Information Schema table emptied with\nthe FLUSH USER_VARIABLES statement.\n\nSET @str = CAST(123 AS CHAR(5));\n\nSELECT * FROM information_schema.USER_VARIABLES ORDER BY VARIABLE_NAME;\n+---------------+----------------+---------------+--------------------+\n| VARIABLE_NAME | VARIABLE_VALUE | VARIABLE_TYPE | CHARACTER_SET_NAME |\n+---------------+----------------+---------------+--------------------+\n| str | 123 | VARCHAR | utf8mb3 |\n+---------------+----------------+---------------+--------------------+\n\nFLUSH USER_VARIABLES;\n\nSELECT * FROM information_schema.USER_VARIABLES ORDER BY VARIABLE_NAME;\nEmpty set (0.000 sec)\n\nURL: https://mariadb.com/kb/en/user-defined-variables/','','https://mariadb.com/kb/en/user-defined-variables/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (487,29,'Delimiters','The default delimiter in the mysql client (from MariaDB 10.4.6, also called\nmariadb) is the semicolon.\n\nWhen creating stored programs from the command-line, it is likely you will\nneed to differentiate between the regular delimiter and a delimiter inside a\nBEGIN END block. To understand better, consider the following example:\n\nCREATE FUNCTION FortyTwo() RETURNS TINYINT DETERMINISTIC\nBEGIN\n DECLARE x TINYINT;\n SET x = 42;\n RETURN x;\nEND;\n\nIf you enter the above line by line, the mysql client will treat the first\nsemicolon, at the end of the DECLARE x TINYINT line, as the end of the\nstatement. Since that\'s only a partial definition, it will throw a syntax\nerror, as follows:\n\nCREATE FUNCTION FortyTwo() RETURNS TINYINT DETERMINISTIC\nBEGIN\nDECLARE x TINYINT;\nERROR 1064 (42000): You have an error in your SQL syntax; \ncheck the manual that corresponds to your MariaDB server version\n for the right syntax to use near \'\' at line 3\n\nThe solution is to specify a distinct delimiter for the duration of the\nprocess, using the DELIMITER command. The delimiter can be any set of\ncharacters you choose, but it needs to be a distinctive set of characters that\nwon\'t cause further confusion. // is a common choice, and used throughout the\nknowledgebase.\n\nHere\'s how the function could be successfully entered from the mysql client\nwith the new delimiter.\n\nDELIMITER //\n\nCREATE FUNCTION FortyTwo() RETURNS TINYINT DETERMINISTIC\nBEGIN\n DECLARE x TINYINT;\n SET x = 42;\n RETURN x;\nEND\n\n//\n\nDELIMITER ;\n\nAt the end, the delimiter is restored to the default semicolon. The \\g and \\G\ndelimiters can always be used, even when a custom delimiter is specified.\n\nURL: https://mariadb.com/kb/en/delimiters/','','https://mariadb.com/kb/en/delimiters/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (488,29,'SQL_MODE=ORACLE','From MariaDB 10.3, setting the sql_mode system variable to Oracle allows the\nserver to understand a subset of Oracle\'s PL/SQL language. For example:\n\nSET SQL_MODE=\'ORACLE\';\n\nAll traditional MariaDB SQL/PSM syntax should work as before, as long as it\ndoes not conflict with Oracle\'s PL/SQL syntax. All MariaDB functions should be\nsupported in both normal and Oracle modes.\n\nPrior to MariaDB 10.3, MariaDB does not support Oracle\'s PL/SQL language, and\nSET SQL_MODE=ORACLE is only an alias for the following sql_mode in those\nversions:\n\nSET SQL_MODE=\'PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, NO_KEY_OPTIONS,\nNO_TABLE_OPTIONS, NO_FIELD_OPTIONS, NO_AUTO_CREATE_USER\';\n\nFrom MariaDB 10.3, SET SQL_MODE=ORACLE is same as:\n\nSET SQL_MODE=\'PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ORACLE,NO_KEY_OPTIONS,\nNO_TABLE_OPTIONS,NO_FIELD_OPTIONS,NO_AUTO_CREATE_USER,SIMULTANEOUS_ASSIGNMENT\';\n\nSupported Syntax in Oracle Mode\n-------------------------------\n\nStored Procedures and Stored Functions\n--------------------------------------\n\nOracle mode makes the following changes to Stored Procedures and Stored\nFunctions:\n\n+-----------------------------------------+-----------------------------------+\n| Oracle syntax | Description |\n+-----------------------------------------+-----------------------------------+\n| CREATE PROCEDURE p1 (param OUT INT) | ANSI uses (OUT param INT) |\n+-----------------------------------------+-----------------------------------+\n| CREATE PROCEDURE p1 (a IN OUT INT) | ANSI uses (INOUT param INT) |\n+-----------------------------------------+-----------------------------------+\n| AS before function body | CREATE FUNCTION f1 RETURN NUMBER |\n| | AS BEGIN... |\n+-----------------------------------------+-----------------------------------+\n| IS before function body | CREATE FUNCTION f1 RETURN NUMBER |\n| | IS BEGIN... |\n+-----------------------------------------+-----------------------------------+\n| If function has no parameters then | Example: CREATE PROCEDURE p1 AS |\n| parentheses must be omitted | BEGIN NULL; END; |\n+-----------------------------------------+-----------------------------------+\n| CREATE PROCEDURE p1 AS BEGIN END p1; | Optional routine name after END |\n| | keyword. MDEV-12089 |\n+-----------------------------------------+-----------------------------------+\n| CREATE FUNCTION f1(a VARCHAR) | VARCHAR can be used without |\n| | length for routine parameters |\n| | and RETURN clause. The length is |\n| | inherited from the argument at |\n| | call time. MDEV-10596 |\n+-----------------------------------------+-----------------------------------+\n| CREATE AGGREGATE FUNCTION f1( ) | Creates an aggregate function, |\n| | which performs the function |\n| | against a set of rows and |\n| | returns one aggregate result. |\n+-----------------------------------------+-----------------------------------+\n| No CALL needed in Stored Procedures | In Oracle mode one can call |\n| | other stored procedures with |\n| | name only. MDEV-12107 |\n+-----------------------------------------+-----------------------------------+\n| RETURN. Can also be used in stored | ANSI uses RETURNS. MariaDB mode |\n| procedures | only supports RETURNS in stored |\n| | functions |\n+-----------------------------------------+-----------------------------------+\n\nCursors\n-------\n\nOracle mode makes the following changes to Cursors:\n\n+-----------------------------------------+-----------------------------------+\n| Oracle syntax | Description |\n+-----------------------------------------+-----------------------------------+\n| CREATE PROCEDURE p1 AS CURSOR cur IS | Explicit cursor with FOR loop. |\n| (SELECT a, b FROM t1); BEGIN FOR rec | MDEV-10581 |\n| IN cur ... | |\n+-----------------------------------------+-----------------------------------+\n| CREATE PROCEDURE p1 AS rec IN (SELECT | Implicit cursor with FOR loop. |\n| a, b FROM t1) | MDEV-12098 |\n+-----------------------------------------+-----------------------------------+\n| CURSOR c(prm_a VARCHAR2, prm_b | Cursor with parameters. |\n| VARCHAR2) ... OPEN c(1,2) | MDEV-10597 |\n+-----------------------------------------+-----------------------------------+\n| CURSOR c(prm_a VARCHAR2, prm_b | Cursor with parameters and FOR |\n| VARCHAR2) ... FOR rec in c(1,2) | loop. MDEV-12314 |\n+-----------------------------------------+-----------------------------------+\n| s %ISOPEN, %ROWCOUNT, %FOUND, %NOTFOUND | Explicit cursor attributes. |\n| | MDEV-10582 |\n+-----------------------------------------+-----------------------------------+\n\nLOOP\n----\n\nOracle mode makes the following changes to LOOP:\n\n+-----------------------------------------+-----------------------------------+\n| Oracle syntax | Description |\n+-----------------------------------------+-----------------------------------+\n| FOR i IN 1..10 LOOP ... END LOOP | Numeric FOR loop. MDEV-10580 |\n+-----------------------------------------+-----------------------------------+\n| GOTO | GOTO statement. MDEV-10697 |\n+-----------------------------------------+-----------------------------------+\n| <<label>> used with GOTO | ANSI uses label:. MDEV-10697 |\n+-----------------------------------------+-----------------------------------+\n| To leave loop block: EXIT [ label ] [ | ANSI syntax is IF bool_expr THEN |\n| WHEN bool_expr ] | LEAVE label |\n+-----------------------------------------+-----------------------------------+\n| [<<label>>] WHILE boolean_expression | Oracle style WHILE loop |\n| LOOP statement... END LOOP [ label ] ; | |\n+-----------------------------------------+-----------------------------------+\n| CONTINUE [ label ] [ WHEN | CONTINUE is only valid inside a |\n| boolean_expression] | loop |\n+-----------------------------------------+-----------------------------------+\n\nVariables\n---------\n\n+------------------------------+-----------------+--------------------------+\n| Oracle syntax | Version | Description |\n+------------------------------+-----------------+--------------------------+\n| var:= 10; Can also be used | 10.3 | MariaDB uses SET var= |\n| with MariaDB systemvariables | | 10; |\n+------------------------------+-----------------+--------------------------+\n| var INT := 10 | 10.3 | Default variable value |\n+------------------------------+-----------------+--------------------------+\n| var1 | 10.3 | Take data type from a |\n| table_name.column_name%TYPE | | table column. MDEV-10577 |\n+------------------------------+-----------------+--------------------------+\n| var2 var1%TYPE | 10.3 | Take data type from |\n| | | another variable |\n+------------------------------+-----------------+--------------------------+\n| rec1 table_name%ROWTYPE | 10.3 | Take ROW structure from |\n| | | a table. MDEV-12133 |\n+------------------------------+-----------------+--------------------------+\n| rec2 rec1%ROWTYPE | 10.3 | Take ROW structure from |\n| | | ROW variable |\n+------------------------------+-----------------+--------------------------+\n| CURSOR c1 IS SELECT a,b | 10.3 | Take ROW structure from |\n| FROM t1; rec1 c1%ROWTYPE; | | a cursor. MDEV-12011 |\n+------------------------------+-----------------+--------------------------+\n| Variables can be declared | 10.3 | In MariaDB mode, |\n| after cursor declarations | | variables must be |\n| | | declared before |\n| | | cursors. MDEV-10598 |\n+------------------------------+-----------------+--------------------------+\n| Triggers uses :NEW and :OLD | 10.3 | ANSI uses NEW and OLD. |\n| | | MDEV-10579 |\n+------------------------------+-----------------+--------------------------+\n| SQLCODE | 10.3 | Returns the number code |\n| | | of the most recent |\n| | | exception. Can only be |\n| | | used in Stored |\n| | | Procedures. MDEV-10578 |\n+------------------------------+-----------------+--------------------------+\n| SQLERRM | 10.3 | Returns the error |\n| | | message associdated to |\n| | | it\'s error number |\n| | | argument or SQLCODE if |\n| | | no argument is given. |\n| | | Can only be used in |\n| | | Stored Procedures. |\n| | | MDEV-10578 |\n+------------------------------+-----------------+--------------------------+\n| SQL%ROWCOUNT | 10.3 | Almost same as |\n| | | ROW_COUNT(). MDEV-10583 |\n+------------------------------+-----------------+--------------------------+\n| ROWNUM | 10.6.1 | Returns number of |\n| | | accepted rows |\n+------------------------------+-----------------+--------------------------+\n\nExceptions\n----------\n\n+-----------------------------------------+-----------------------------------+\n| Oracle syntax | Description |\n+-----------------------------------------+-----------------------------------+\n| BEGIN ... EXCEPTION WHEN OTHERS THEN | Exception handlers are declared |\n| BEGIN .. END; END; | at the end of a block |\n+-----------------------------------------+-----------------------------------+\n| TOO_MANY_ROWS, NO_DATA_FOUND, | Predefined exceptions. MDEV-10839 |\n| DUP_VAL_ON_INDEX | |\n+-----------------------------------------+-----------------------------------+\n| RAISE TOO_MANY_ROWS ; .... EXCEPTION | Exception can be used with RAISE |\n| WHEN TOO_MANY_ROWS THEN ... | and EXCEPTION...WHEN. MDEV-10840 |\n+-----------------------------------------+-----------------------------------+\n| CREATE OR REPLACE FUNCTION f1 (a INT) | User defined exceptions. |\n| RETURN INT AS e1 EXCEPTION... | MDEV-10587 |\n+-----------------------------------------+-----------------------------------+\n\nBEGIN Blocks\n------------\n\n+-----------------------------------------+-----------------------------------+\n| Oracle syntax | Description |\n+-----------------------------------------+-----------------------------------+\n| BEGIN to start a block | MariaDB uses BEGIN NOT ATOMIC |\n| | for anyonymous blocks. MDEV-10655 |\n+-----------------------------------------+-----------------------------------+\n| DECLARE is used before BEGIN | DECLARE a INT; b VARCHAR(10); |\n| | BEGIN v:= 10; END; |\n+-----------------------------------------+-----------------------------------+\n| WHEN DUP_VAL_ON_INDEX THEN NULL ; | Do not require BEGIN..END in |\n| NULL; WHEN OTHERS THEN NULL | multi-statement exception |\n| | handlers in THEN clause. |\n| | MDEV-12088 |\n+-----------------------------------------+-----------------------------------+\n\nSimple Syntax Compatibility\n---------------------------\n\n+------------------------------+-----------------+--------------------------+\n| Oracle syntax | Version | Description |\n+------------------------------+-----------------+--------------------------+\n| ELSIF | 10.3 | ANSI uses ELSEIF |\n+------------------------------+-----------------+--------------------------+\n| SELECT UNIQUE | 10.3 | Same as SELECT |\n| | | DISTINCT. MDEV-12086 |','','https://mariadb.com/kb/en/sql_modeoracle/');
+update help_topic set description = CONCAT(description, '\n+------------------------------+-----------------+--------------------------+\n| TRUNCATE TABLE t1 [DROP | 10.3 | DROP STORAGE and REUSE |\n| STORAGE] or [REUSE STORAGE] | | STORAGE are allowed as |\n| | | optional keywords for |\n| | | TRUNCATE TABLE. |\n| | | MDEV-10588 |\n+------------------------------+-----------------+--------------------------+\n| Subqueries in a FROM clause | 10.6 | SELECT * FROM (SELECT 1 |\n| without an alias | | FROM DUAL), (SELECT 2 |\n| | | FROM DUAL) |\n+------------------------------+-----------------+--------------------------+\n| UNION, EXCEPT and INTERSECT | 10.3 | INTERSECT has higher |\n| all have the same | | precedence than UNION |\n| precedence. | | and EXCEPT in |\n| | | non-Oracle modes. |\n+------------------------------+-----------------+--------------------------+\n| MINUS | 10.6 | MINUS is a synonym for |\n| | | EXCEPT. |\n+------------------------------+-----------------+--------------------------+\n\nFunctions\n---------\n\n+------------------------------+-----------------+--------------------------+\n| Oracle syntax | Version | Description |\n+------------------------------+-----------------+--------------------------+\n| ADD_MONTHS() | 10.6.1 | Added as a wrapper for |\n| | | DATE_ADD() to enhance |\n| | | Oracle compatibility. |\n| | | All modes. |\n+------------------------------+-----------------+--------------------------+\n| CAST(expr as VARCHAR(N)) | 10.3 | Cast expression to a |\n| | | VARCHAR(N). MDEV-11275 |\n+------------------------------+-----------------+--------------------------+\n| DECODE | 10.3 | In Oracle mode, |\n| | | compares and matches |\n| | | search expressions |\n+------------------------------+-----------------+--------------------------+\n| LENGTH() is same as | 10.3 | MariaDB translates |\n| CHAR_LENGTH() | | LENGTH() to |\n| | | OCTET_LENGTH(). In all |\n| | | modes one can use |\n| | | LENGTHB() as a synonym |\n| | | to OCTET_LENGTH() |\n+------------------------------+-----------------+--------------------------+\n| CHR(num) | 10.3 | Returns a VARCHAR(1) |\n| | | with character set and |\n| | | collation according to |\n| | | @@character_set_database |\n| | | and @@collation_database |\n+------------------------------+-----------------+--------------------------+\n| substr(\'abc\',0 ,3) same as | 10.3 | Position 0 for substr() |\n| substr(\'abc\', 1 ,3) | | is same as position 1 |\n+------------------------------+-----------------+--------------------------+\n| SYS_GUID | 10.6.1 | Generates a globally |\n| | | unique identifier. |\n| | | Similar to UUID but |\n| | | without the -. All |\n| | | modes. |\n+------------------------------+-----------------+--------------------------+\n| TO_CHAR | 10.6.1 | Added to enhance Oracle |\n| | | compatibility. All |\n| | | modes. |\n+------------------------------+-----------------+--------------------------+\n| TRIM, LTRIM, RTRIM, LPAD | 10.3 | Returns NULL instead of |\n| and RPAD | | an empty string if |\n| | | returning an empty |\n| | | result. These functions |\n| | | can also be accessed |\n| | | outside of ORACLE mode |\n| | | by suffixing _ORACLE |\n| | | onto the end of the |\n| | | function name, such as |\n| | | TRIM_ORACLE. |\n+------------------------------+-----------------+--------------------------+\n\nPrepared Statements\n-------------------\n\nOracle mode makes the following changes to Prepared Statements:\n\n+-----------------------------------------+-----------------------------------+\n| Oracle syntax | Description |\n+-----------------------------------------+-----------------------------------+\n| PREPARE stmt FROM \'SELECT :1, :2\' | ANSI uses ?. MDEV-10801 |\n+-----------------------------------------+-----------------------------------+\n| EXECUTE IMMEDIATE \'INSERT INTO t1 | Dynamic placeholders. MDEV-10801 |\n| SELECT (:x,:y) FROM DUAL\' USING 10,20 | |\n+-----------------------------------------+-----------------------------------+\n\nSynonyms for Basic SQL Types\n----------------------------\n\n+--------------------------------+-------------------------------------------+\n| Oracle type | MariaDB synonym |\n+--------------------------------+-------------------------------------------+\n| VARCHAR2 | VARCHAR |\n+--------------------------------+-------------------------------------------+\n| NUMBER | DECIMAL |\n+--------------------------------+-------------------------------------------+\n| DATE (with time portion) | MariaDB DATETIME |\n+--------------------------------+-------------------------------------------+\n| RAW | VARBINARY |\n+--------------------------------+-------------------------------------------+\n| CLOB | LONGTEXT |\n+--------------------------------+-------------------------------------------+\n| BLOB | LONGBLOB |\n+--------------------------------+-------------------------------------------+\n\nThis was implemented as part of MDEV-10343.\n\nIf one does a SHOW CREATE TABLE in ORACLE mode on a table that has a native\nMariaDB DATE column, it will be displayed as mariadb_schema.date to not\nconflict with the Oracle DATE type.\n\nPackages\n--------\n\nThe following syntax has been supported since MariaDB 10.3.5:\n\n* CREATE PACKAGE\n* CREATE PACKAGE BODY\n* DROP PACKAGE\n* DROP PACKAGE BODY\n* SHOW CREATE PACKAGE\n* SHOW CREATE PACKAGE BODY\n\nNULL Handling\n-------------\n\nOracle mode makes the following changes to NULL handling:\n\nNULL As a Statement\n-------------------\n\nNULL can be used as a statement:\n\nIF a=10 THEN NULL; ELSE NULL; END IF\n\nTranslating Empty String Literals to NULL\n-----------------------------------------\n\nIn Oracle, empty string (\'\') and NULL are the same thing,\n\nBy using sql_mode=EMPTY_STRING_IS_NULL you can get a similar experience in\nMariaDB:\n\nSET sql_mode=EMPTY_STRING_IS_NULL;\nSELECT \'\' IS NULL; -- returns TRUE\nINSERT INTO t1 VALUES (\'\'); -- inserts NULL\n\nConcat Operator Ignores NULL\n----------------------------\n\nCONCAT() and || ignore NULL in Oracle mode. Can also be accessed outside of\nORACLE mode by using CONCAT_OPERATOR_ORACLE. MDEV-11880 and MDEV-12143.\n\nReserved Words\n--------------\n\nThere are a number of extra reserved words in Oracle mode.\n\nSHOW CREATE TABLE\n-----------------\n\nThe SHOW CREATE TABLE statement will not display MariaDB-specific table\noptions, such as AUTO_INCREMENT or CHARSET, when Oracle mode is set.\n\nURL: https://mariadb.com/kb/en/sql_modeoracle/') WHERE help_topic_id = 488;
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (489,30,'CONTAINS','Syntax\n------\n\nContains(g1,g2)\n\nDescription\n-----------\n\nReturns 1 or 0 to indicate whether a geometry g1 completely contains geometry\ng2. CONTAINS() is based on the original MySQL implementation and uses object\nbounding rectangles, while ST_CONTAINS() uses object shapes.\n\nThis tests the opposite relationship to Within().\n\nURL: https://mariadb.com/kb/en/contains/','','https://mariadb.com/kb/en/contains/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (490,30,'CROSSES','Syntax\n------\n\nCrosses(g1,g2)\n\nDescription\n-----------\n\nReturns 1 if g1 spatially crosses g2. Returns NULL if g1 is a Polygon or a\nMultiPolygon, or if g2 is a Point or a MultiPoint. Otherwise, returns 0.\n\nThe term spatially crosses denotes a spatial relation between two given\ngeometries that has the following properties:\n\n* The two geometries intersect\n* Their intersection results in a geometry that has a dimension that is one\n less than the maximum dimension of the two given geometries\n* Their intersection is not equal to either of the two given geometries\n\nCROSSES() is based on the original MySQL implementation, and uses object\nbounding rectangles, while ST_CROSSES() uses object shapes.\n\nURL: https://mariadb.com/kb/en/crosses/','','https://mariadb.com/kb/en/crosses/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (491,30,'DISJOINT','Syntax\n------\n\nDisjoint(g1,g2)\n\nDescription\n-----------\n\nReturns 1 or 0 to indicate whether g1 is spatially disjoint from (does not\nintersect) g2.\n\nDISJOINT() tests the opposite relationship to INTERSECTS().\n\nDISJOINT() is based on the original MySQL implementation and uses object\nbounding rectangles, while ST_DISJOINT() uses object shapes.\n\nURL: https://mariadb.com/kb/en/disjoint/','','https://mariadb.com/kb/en/disjoint/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (492,30,'EQUALS','Syntax\n------\n\nEquals(g1,g2)\n\nFrom MariaDB 10.2.3:\n\nMBREQUALS(g1,g2)\n\nDescription\n-----------\n\nReturns 1 or 0 to indicate whether g1 is spatially equal to g2.\n\nEQUALS() is based on the original MySQL implementation and uses object\nbounding rectangles, while ST_EQUALS() uses object shapes.\n\nFrom MariaDB 10.2.3, MBREQUALS is a synonym for Equals.\n\nURL: https://mariadb.com/kb/en/equals/','','https://mariadb.com/kb/en/equals/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (493,30,'INTERSECTS','Syntax\n------\n\nINTERSECTS(g1,g2)\n\nDescription\n-----------\n\nReturns 1 or 0 to indicate whether geometry g1 spatially intersects geometry\ng2.\n\nINTERSECTS() is based on the original MySQL implementation and uses object\nbounding rectangles, while ST_INTERSECTS() uses object shapes.\n\nINTERSECTS() tests the opposite relationship to DISJOINT().\n\nURL: https://mariadb.com/kb/en/intersects/','','https://mariadb.com/kb/en/intersects/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (494,30,'OVERLAPS','Syntax\n------\n\nOVERLAPS(g1,g2)\n\nDescription\n-----------\n\nReturns 1 or 0 to indicate whether g1 spatially overlaps g2. The term\nspatially overlaps is used if two geometries intersect and their intersection\nresults in a geometry of the same dimension but not equal to either of the\ngiven geometries.\n\nOVERLAPS() is based on the original MySQL implementation and uses object\nbounding rectangles, while ST_OVERLAPS() uses object shapes.\n\nURL: https://mariadb.com/kb/en/overlaps/','','https://mariadb.com/kb/en/overlaps/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (495,30,'ST_CONTAINS','Syntax\n------\n\nST_CONTAINS(g1,g2)\n\nDescription\n-----------\n\nReturns 1 or 0 to indicate whether a geometry g1 completely contains geometry\ng2.\n\nST_CONTAINS() uses object shapes, while CONTAINS(), based on the original\nMySQL implementation, uses object bounding rectangles.\n\nST_CONTAINS tests the opposite relationship to ST_WITHIN().\n\nExamples\n--------\n\nSET @g1 = ST_GEOMFROMTEXT(\'POLYGON((175 150, 20 40, 50 60, 125 100, 175\n150))\');\n\nSET @g2 = ST_GEOMFROMTEXT(\'POINT(174 149)\');\n\nSELECT ST_CONTAINS(@g1,@g2);\n+----------------------+\n| ST_CONTAINS(@g1,@g2) |\n+----------------------+\n| 1 |\n+----------------------+\n\nSET @g2 = ST_GEOMFROMTEXT(\'POINT(175 151)\');\n\nSELECT ST_CONTAINS(@g1,@g2);\n+----------------------+\n| ST_CONTAINS(@g1,@g2) |\n+----------------------+\n| 0 |\n+----------------------+\n\nURL: https://mariadb.com/kb/en/st-contains/','','https://mariadb.com/kb/en/st-contains/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (496,30,'ST_CROSSES','Syntax\n------\n\nST_CROSSES(g1,g2)\n\nDescription\n-----------\n\nReturns 1 if geometry g1 spatially crosses geometry g2. Returns NULL if g1 is\na Polygon or a MultiPolygon, or if g2 is a Point or a MultiPoint. Otherwise,\nreturns 0.\n\nThe term spatially crosses denotes a spatial relation between two given\ngeometries that has the following properties:\n\n* The two geometries intersect\n* Their intersection results in a geometry that has a dimension that is one\n less than the maximum dimension of the two given geometries\n* Their intersection is not equal to either of the two given geometries\n\nST_CROSSES() uses object shapes, while CROSSES(), based on the original MySQL\nimplementation, uses object bounding rectangles.\n\nExamples\n--------\n\nSET @g1 = ST_GEOMFROMTEXT(\'LINESTRING(174 149, 176 151)\');\n\nSET @g2 = ST_GEOMFROMTEXT(\'POLYGON((175 150, 20 40, 50 60, 125 100, 175\n150))\');\n\nSELECT ST_CROSSES(@g1,@g2);\n+---------------------+\n| ST_CROSSES(@g1,@g2) |\n+---------------------+\n| 1 |\n+---------------------+\n\nSET @g1 = ST_GEOMFROMTEXT(\'LINESTRING(176 149, 176 151)\');\n\nSELECT ST_CROSSES(@g1,@g2);\n+---------------------+\n| ST_CROSSES(@g1,@g2) |\n+---------------------+\n| 0 |\n+---------------------+\n\nURL: https://mariadb.com/kb/en/st-crosses/','','https://mariadb.com/kb/en/st-crosses/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (497,30,'ST_DIFFERENCE','Syntax\n------\n\nST_DIFFERENCE(g1,g2)\n\nDescription\n-----------\n\nReturns a geometry representing the point set difference of the given geometry\nvalues.\n\nExample\n-------\n\nSET @g1 = POINT(10,10), @g2 = POINT(20,20);\n\nSELECT ST_AsText(ST_Difference(@g1, @g2));\n+------------------------------------+\n| ST_AsText(ST_Difference(@g1, @g2)) |\n+------------------------------------+\n| POINT(10 10) |\n+------------------------------------+\n\nURL: https://mariadb.com/kb/en/st_difference/','','https://mariadb.com/kb/en/st_difference/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (498,30,'ST_DISJOINT','Syntax\n------\n\nST_DISJOINT(g1,g2)\n\nDescription\n-----------\n\nReturns 1 or 0 to indicate whether geometry g1 is spatially disjoint from\n(does not intersect with) geometry g2.\n\nST_DISJOINT() uses object shapes, while DISJOINT(), based on the original\nMySQL implementation, uses object bounding rectangles.\n\nST_DISJOINT() tests the opposite relationship to ST_INTERSECTS().\n\nExamples\n--------\n\nSET @g1 = ST_GEOMFROMTEXT(\'POINT(0 0)\');\n\nSET @g2 = ST_GEOMFROMTEXT(\'LINESTRING(2 0, 0 2)\');\n\nSELECT ST_DISJOINT(@g1,@g2);\n+----------------------+\n| ST_DISJOINT(@g1,@g2) |\n+----------------------+\n| 1 |\n+----------------------+\n\nSET @g2 = ST_GEOMFROMTEXT(\'LINESTRING(0 0, 0 2)\');\n\nSELECT ST_DISJOINT(@g1,@g2);\n+----------------------+\n| ST_DISJOINT(@g1,@g2) |\n+----------------------+\n| 0 |\n+----------------------+\n\nURL: https://mariadb.com/kb/en/st_disjoint/','','https://mariadb.com/kb/en/st_disjoint/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (499,30,'ST_DISTANCE','Syntax\n------\n\nST_DISTANCE(g1,g2)\n\nDescription\n-----------\n\nReturns the distance between two geometries, or null if not given valid inputs.\n\nExample\n-------\n\nSELECT ST_Distance(POINT(1,2),POINT(2,2));\n+------------------------------------+\n| ST_Distance(POINT(1,2),POINT(2,2)) |\n+------------------------------------+\n| 1 |\n+------------------------------------+\n\nURL: https://mariadb.com/kb/en/st_distance/','','https://mariadb.com/kb/en/st_distance/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (500,30,'ST_DISTANCE_SPHERE','MariaDB starting with 10.2.38\n-----------------------------\nST_DISTANCE_SPHERE was introduced in MariaDB 10.2.38, MariaDB 10.3.29, MariaDB\n10.4.19 and MariaDB 10.5.10.\n\nSyntax\n------\n\nST_DISTANCE_SPHERE(g1,g2,[r])\n\nDescription\n-----------\n\nReturns the spherical distance between two geometries (point or multipoint) on\na sphere with the optional radius r (default is the Earth radius if r is not\nspecified), or NULL if not given valid inputs.\n\nExample\n-------\n\nset @zenica = ST_GeomFromText(\'POINT(17.907743 44.203438)\');\nset @sarajevo = ST_GeomFromText(\'POINT(18.413076 43.856258)\');\nSELECT ST_Distance_Sphere(@zenica, @sarajevo);\n55878.59337591705\n\nURL: https://mariadb.com/kb/en/st_distance_sphere/','','https://mariadb.com/kb/en/st_distance_sphere/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (501,30,'ST_EQUALS','Syntax\n------\n\nST_EQUALS(g1,g2)\n\nDescription\n-----------\n\nReturns 1 or 0 to indicate whether geometry g1 is spatially equal to geometry\ng2.\n\nST_EQUALS() uses object shapes, while EQUALS(), based on the original MySQL\nimplementation, uses object bounding rectangles.\n\nExamples\n--------\n\nSET @g1 = ST_GEOMFROMTEXT(\'LINESTRING(174 149, 176 151)\');\n\nSET @g2 = ST_GEOMFROMTEXT(\'LINESTRING(176 151, 174 149)\');\n\nSELECT ST_EQUALS(@g1,@g2);\n+--------------------+\n| ST_EQUALS(@g1,@g2) |\n+--------------------+\n| 1 |\n+--------------------+\n\nSET @g1 = ST_GEOMFROMTEXT(\'POINT(0 2)\');\n\nSET @g1 = ST_GEOMFROMTEXT(\'POINT(2 0)\');\n\nSELECT ST_EQUALS(@g1,@g2);\n+--------------------+\n| ST_EQUALS(@g1,@g2) |\n+--------------------+\n| 0 |\n+--------------------+\n\nURL: https://mariadb.com/kb/en/st-equals/','','https://mariadb.com/kb/en/st-equals/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (502,30,'ST_INTERSECTS','Syntax\n------\n\nST_INTERSECTS(g1,g2)\n\nDescription\n-----------\n\nReturns 1 or 0 to indicate whether geometry g1 spatially intersects geometry\ng2.\n\nST_INTERSECTS() uses object shapes, while INTERSECTS(), based on the original\nMySQL implementation, uses object bounding rectangles.\n\nST_INTERSECTS() tests the opposite relationship to ST_DISJOINT().\n\nExamples\n--------\n\nSET @g1 = ST_GEOMFROMTEXT(\'POINT(0 0)\');\n\nSET @g2 = ST_GEOMFROMTEXT(\'LINESTRING(0 0, 0 2)\');\n\nSELECT ST_INTERSECTS(@g1,@g2);\n+------------------------+\n| ST_INTERSECTS(@g1,@g2) |\n+------------------------+\n| 1 |\n+------------------------+\n\nSET @g2 = ST_GEOMFROMTEXT(\'LINESTRING(2 0, 0 2)\');\n\nSELECT ST_INTERSECTS(@g1,@g2);\n+------------------------+\n| ST_INTERSECTS(@g1,@g2) |\n+------------------------+\n| 0 |\n+------------------------+\n\nURL: https://mariadb.com/kb/en/st-intersects/','','https://mariadb.com/kb/en/st-intersects/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (503,30,'ST_LENGTH','Syntax\n------\n\nST_LENGTH(ls)\n\nDescription\n-----------\n\nReturns as a double-precision number the length of the LineString value ls in\nits associated spatial reference.\n\nExamples\n--------\n\nSET @ls = \'LineString(1 1,2 2,3 3)\';\n\nSELECT ST_LENGTH(ST_GeomFromText(@ls));\n+---------------------------------+\n| ST_LENGTH(ST_GeomFromText(@ls)) |\n+---------------------------------+\n| 2.82842712474619 |\n+---------------------------------+\n\nURL: https://mariadb.com/kb/en/st_length/','','https://mariadb.com/kb/en/st_length/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (504,30,'ST_OVERLAPS','Syntax\n------\n\nST_OVERLAPS(g1,g2)\n\nDescription\n-----------\n\nReturns 1 or 0 to indicate whether geometry g1 spatially overlaps geometry g2.\n\nThe term spatially overlaps is used if two geometries intersect and their\nintersection results in a geometry of the same dimension but not equal to\neither of the given geometries.\n\nST_OVERLAPS() uses object shapes, while OVERLAPS(), based on the original\nMySQL implementation, uses object bounding rectangles.\n\nURL: https://mariadb.com/kb/en/st-overlaps/','','https://mariadb.com/kb/en/st-overlaps/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (505,30,'ST_TOUCHES','Syntax\n------\n\nST_TOUCHES(g1,g2)\n\nDescription\n-----------\n\nReturns 1 or 0 to indicate whether geometry g1 spatially touches geometry g2.\nTwo geometries spatially touch if the interiors of the geometries do not\nintersect, but the boundary of one of the geometries intersects either the\nboundary or the interior of the other.\n\nST_TOUCHES() uses object shapes, while TOUCHES(), based on the original MySQL\nimplementation, uses object bounding rectangles.\n\nExamples\n--------\n\nSET @g1 = ST_GEOMFROMTEXT(\'POINT(2 0)\');\n\nSET @g2 = ST_GEOMFROMTEXT(\'LINESTRING(2 0, 0 2)\');\n\nSELECT ST_TOUCHES(@g1,@g2);\n+---------------------+\n| ST_TOUCHES(@g1,@g2) |\n+---------------------+\n| 1 |\n+---------------------+\n\nSET @g1 = ST_GEOMFROMTEXT(\'POINT(2 1)\');\n\nSELECT ST_TOUCHES(@g1,@g2);\n+---------------------+\n| ST_TOUCHES(@g1,@g2) |\n+---------------------+\n| 0 |\n+---------------------+\n\nURL: https://mariadb.com/kb/en/st-touches/','','https://mariadb.com/kb/en/st-touches/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (506,30,'ST_WITHIN','Syntax\n------\n\nST_WITHIN(g1,g2)\n\nDescription\n-----------\n\nReturns 1 or 0 to indicate whether geometry g1 is spatially within geometry g2.\n\nThis tests the opposite relationship as ST_CONTAINS().\n\nST_WITHIN() uses object shapes, while WITHIN(), based on the original MySQL\nimplementation, uses object bounding rectangles.\n\nExamples\n--------\n\nSET @g1 = ST_GEOMFROMTEXT(\'POINT(174 149)\');\n\nSET @g2 = ST_GEOMFROMTEXT(\'POLYGON((175 150, 20 40, 50 60, 125 100, 175\n150))\');\n\nSELECT ST_WITHIN(@g1,@g2);\n+--------------------+\n| ST_WITHIN(@g1,@g2) |\n+--------------------+\n| 1 |\n+--------------------+\n\nSET @g1 = ST_GEOMFROMTEXT(\'POINT(176 151)\');\n\nSELECT ST_WITHIN(@g1,@g2);\n+--------------------+\n| ST_WITHIN(@g1,@g2) |\n+--------------------+\n| 0 |\n+--------------------+\n\nURL: https://mariadb.com/kb/en/st-within/','','https://mariadb.com/kb/en/st-within/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (507,30,'TOUCHES','Syntax\n------\n\nTouches(g1,g2)\n\nDescription\n-----------\n\nReturns 1 or 0 to indicate whether g1 spatially touches g2. Two geometries\nspatially touch if the interiors of the geometries do not intersect, but the\nboundary of one of the geometries intersects either the boundary or the\ninterior of the other.\n\nTOUCHES() is based on the original MySQL implementation and uses object\nbounding rectangles, while ST_TOUCHES() uses object shapes.\n\nURL: https://mariadb.com/kb/en/touches/','','https://mariadb.com/kb/en/touches/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (508,30,'WITHIN','Syntax\n------\n\nWithin(g1,g2)\n\nDescription\n-----------\n\nReturns 1 or 0 to indicate whether g1 is spatially within g2. This tests the\nopposite relationship as Contains().\n\nWITHIN() is based on the original MySQL implementation, and uses object\nbounding rectangles, while ST_WITHIN() uses object shapes.\n\nExamples\n--------\n\nSET @g1 = GEOMFROMTEXT(\'POINT(174 149)\');\nSET @g2 = GEOMFROMTEXT(\'POINT(176 151)\');\nSET @g3 = GEOMFROMTEXT(\'POLYGON((175 150, 20 40, 50 60, 125 100, 175 150))\');\n\nSELECT within(@g1,@g3);\n+-----------------+\n| within(@g1,@g3) |\n+-----------------+\n| 1 |\n+-----------------+\n\nSELECT within(@g2,@g3);\n+-----------------+\n| within(@g2,@g3) |\n+-----------------+\n| 0 |\n+-----------------+\n\nURL: https://mariadb.com/kb/en/within/','','https://mariadb.com/kb/en/within/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (509,31,'Microseconds in MariaDB','The TIME, DATETIME, and TIMESTAMP types, along with the temporal functions,\nCAST and dynamic columns, support microseconds. The datetime precision of a\ncolumn can be specified when creating the table with CREATE TABLE, for example:\n\nCREATE TABLE example(\n col_microsec DATETIME(6),\n col_millisec TIME(3)\n);\n\nGenerally, the precision can be specified for any TIME, DATETIME, or TIMESTAMP\ncolumn, in parentheses, after the type name. The datetime precision specifies\nnumber of digits after the decimal dot and can be any integer number from 0 to\n6. If no precision is specified it is assumed to be 0, for backward\ncompatibility reasons.\n\nA datetime precision can be specified wherever a type name is used. For\nexample:\n\n* when declaring arguments of stored routines.\n* when specifying a return type of a stored function.\n* when declaring variables.\n* in a CAST function:create function example(x datetime(5)) returns time(4)\nbegin\n declare y timestamp(6);\n return cast(x as time(2));\nend;\n\n%f is used as the formatting option for microseconds in the STR_TO_DATE,\nDATE_FORMAT and FROM_UNIXTIME functions, for example:\n\nSELECT STR_TO_DATE(\'20200809 020917076\',\'%Y%m%d %H%i%s%f\');\n+-----------------------------------------------------+\n| STR_TO_DATE(\'20200809 020917076\',\'%Y%m%d %H%i%s%f\') |\n+-----------------------------------------------------+\n| 2020-08-09 02:09:17.076000 |\n+-----------------------------------------------------+\n\nAdditional Information\n----------------------\n\n* when comparing anything to a temporal value (DATETIME, TIME, DATE, or\nTIMESTAMP), both values are compared as temporal values, not as strings.\n* The INFORMATION_SCHEMA.COLUMNS table has a new column DATETIME_PRECISION\n* NOW(), CURTIME(), UTC_TIMESTAMP(), UTC_TIME(), CURRENT_TIME(),\nCURRENT_TIMESTAMP(), LOCALTIME() and LOCALTIMESTAMP() now accept datetime\nprecision as an optional argument. For example:SELECT CURTIME(4);\n--> 10:11:12.3456\n\n* TIME_TO_SEC() and UNIX_TIMESTAMP() preserve microseconds of the argument.\nThese functions will return a decimal number if the result non-zero datetime\nprecision and an integer otherwise (for backward compatibility).SELECT\nTIME_TO_SEC(\'10:10:10.12345\');\n--> 36610.12345\n\n* Current versions of this patch fix a bug in the following optimization: in\n certain queries with DISTINCT MariaDB can ignore this clause if it can\n prove that all result rows are unique anyway, for example, when a primary key\n is compared with a constant. Sometimes this optimization was applied\n incorrectly, though — for example, when comparing a\n string with a date constant. This is now fixed.\n* DATE_ADD() and DATE_SUB() functions can now take a TIME\n expression as an argument (not just DATETIME as before).SELECT\nTIME(\'10:10:10\') + INTERVAL 100 MICROSECOND;\n--> 10:10:10.000100\n\n* The event_time field in the mysql.general_log table and the start_time,\nquery_time, and lock_time fields in the mysql.slow_log table now store values\nwith microsecond precision.\n* This patch fixed a bug when comparing a temporal value using the BETWEEN\noperator and one of the operands is NULL.\n* The old syntax TIMESTAMP(N), where N is the display width, is no longer\nsupported. It was deprecated in MySQL 4.1.0 (released on\n 2003-04-03).\n* when a DATETIME value is compared to a TIME value, the latter is treated as\na full datetime with a zero date part, similar to comparing DATE to a\nDATETIME, or to comparing DECIMAL numbers.\n Earlier versions of MariaDB used to compare only the time part of both\noperands in such a case.\n* In MariaDB, an extra column TIME_MS has been added to the\nINFORMATION_SCHEMA.PROCESSLIST table, as well as to the output of SHOW FULL\nPROCESSLIST.\n\nNote: When you convert a temporal value to a value with a smaller precision,\nit will be truncated, not rounded. This is done to guarantee that the date\npart is not changed. For example:\n\nSELECT CAST(\'2009-12-31 23:59:59.998877\' as DATETIME(3));\n-> 2009-12-31 23:59:59.998\n\nMySQL 5.6 Microseconds\n----------------------\n\nMySQL 5.6 introduced microseconds using a slightly different implementation to\nMariaDB 5.3. Since MariaDB 10.1, MariaDB has defaulted to the MySQL format, by\nmeans of the --mysql56-temporal-format variable. The MySQL version requires\nslightly more storage but has some advantages in permitting the eventual\nsupport of negative dates, and in replication.\n\nURL: https://mariadb.com/kb/en/microseconds-in-mariadb/','','https://mariadb.com/kb/en/microseconds-in-mariadb/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (510,31,'Date and Time Units','The INTERVAL keyword can be used to add or subtract a time interval of time to\na DATETIME, DATE or TIME value.\n\nThe syntax is:\n\nINTERVAL time_quantity time_unit\n\nFor example, the SECOND unit is used below by the DATE_ADD() function:\n\nSELECT \'2008-12-31 23:59:59\' + INTERVAL 1 SECOND;\n+-------------------------------------------+\n| \'2008-12-31 23:59:59\' + INTERVAL 1 SECOND |\n+-------------------------------------------+\n| 2009-01-01 00:00:00 |\n+-------------------------------------------+\n\nThe following units are valid:\n\n+---------------------+------------------------------------------------------+\n| Unit | Description |\n+---------------------+------------------------------------------------------+\n| MICROSECOND | Microseconds |\n+---------------------+------------------------------------------------------+\n| SECOND | Seconds |\n+---------------------+------------------------------------------------------+\n| MINUTE | Minutes |\n+---------------------+------------------------------------------------------+\n| HOUR | Hours |\n+---------------------+------------------------------------------------------+\n| DAY | Days |\n+---------------------+------------------------------------------------------+\n| WEEK | Weeks |\n+---------------------+------------------------------------------------------+\n| MONTH | Months |\n+---------------------+------------------------------------------------------+\n| QUARTER | Quarters |\n+---------------------+------------------------------------------------------+\n| YEAR | Years |\n+---------------------+------------------------------------------------------+\n| SECOND_MICROSECOND | Seconds.Microseconds |\n+---------------------+------------------------------------------------------+\n| MINUTE_MICROSECOND | Minutes.Seconds.Microseconds |\n+---------------------+------------------------------------------------------+\n| MINUTE_SECOND | Minutes.Seconds |\n+---------------------+------------------------------------------------------+\n| HOUR_MICROSECOND | Hours.Minutes.Seconds.Microseconds |\n+---------------------+------------------------------------------------------+\n| HOUR_SECOND | Hours.Minutes.Seconds |\n+---------------------+------------------------------------------------------+\n| HOUR_MINUTE | Hours.Minutes |\n+---------------------+------------------------------------------------------+\n| DAY_MICROSECOND | Days Hours.Minutes.Seconds.Microseconds |\n+---------------------+------------------------------------------------------+\n| DAY_SECOND | Days Hours.Minutes.Seconds |\n+---------------------+------------------------------------------------------+\n| DAY_MINUTE | Days Hours.Minutes |\n+---------------------+------------------------------------------------------+\n| DAY_HOUR | Days Hours |\n+---------------------+------------------------------------------------------+\n| YEAR_MONTH | Years-Months |\n+---------------------+------------------------------------------------------+\n\nThe time units containing an underscore are composite; that is, they consist\nof multiple base time units. For base time units, time_quantity is an integer\nnumber. For composite units, the quantity must be expressed as a string with\nmultiple integer numbers separated by any punctuation character.\n\nExample of composite units:\n\nINTERVAL \'2:2\' YEAR_MONTH\nINTERVAL \'1:30:30\' HOUR_SECOND\nINTERVAL \'1!30!30\' HOUR_SECOND -- same as above\n\nTime units can be used in the following contexts:\n\n* after a + or a - operator;\n* with the following DATE or TIME functions: ADDDATE(), SUBDATE(), DATE_ADD(),\nDATE_SUB(), TIMESTAMPADD(), TIMESTAMPDIFF(), EXTRACT();\n* in the ON SCHEDULE clause of CREATE EVENT and ALTER EVENT.\n* when defining a partitioning BY SYSTEM_TIME\n\nURL: https://mariadb.com/kb/en/date-and-time-units/','','https://mariadb.com/kb/en/date-and-time-units/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (511,31,'ADD_MONTHS','MariaDB starting with 10.6.1\n----------------------------\nThe ADD_MONTHS function was introduced in MariaDB 10.6.1 to enhance Oracle\ncompatibility. Similar functionality can be achieved with the DATE_ADD\nfunction.\n\nSyntax\n------\n\nADD_MONTHS(date, months)\n\nDescription\n-----------\n\nADD_MONTHS adds an integer months to a given date (DATE, DATETIME or\nTIMESTAMP), returning the resulting date.\n\nmonths can be positive or negative.\n\nThe resulting day component will remain the same as that specified in date,\nunless the resulting month has fewer days than the day component of the given\ndate, in which case the day will be the last day of the resulting month.\n\nReturns NULL if given an invalid date, or a NULL argument.\n\nExamples\n--------\n\nSELECT ADD_MONTHS(\'2012-01-31\', 2);\n+-----------------------------+\n| ADD_MONTHS(\'2012-01-31\', 2) |\n+-----------------------------+\n| 2012-03-31 |\n+-----------------------------+\n\nSELECT ADD_MONTHS(\'2012-01-31\', -5);\n+------------------------------+\n| ADD_MONTHS(\'2012-01-31\', -5) |\n+------------------------------+\n| 2011-08-31 |\n+------------------------------+\n\nSELECT ADD_MONTHS(\'2011-01-31\', 1);\n+-----------------------------+\n| ADD_MONTHS(\'2011-01-31\', 1) |\n+-----------------------------+\n| 2011-02-28 |\n+-----------------------------+\n\nSELECT ADD_MONTHS(\'2012-01-31\', 1);\n+-----------------------------+\n| ADD_MONTHS(\'2012-01-31\', 1) |\n+-----------------------------+\n| 2012-02-29 |\n+-----------------------------+\n\nSELECT ADD_MONTHS(\'2012-01-31\', 2);\n+-----------------------------+\n| ADD_MONTHS(\'2012-01-31\', 2) |\n+-----------------------------+\n| 2012-03-31 |\n+-----------------------------+\n\nSELECT ADD_MONTHS(\'2012-01-31\', 3);\n+-----------------------------+\n| ADD_MONTHS(\'2012-01-31\', 3) |\n+-----------------------------+\n| 2012-04-30 |\n+-----------------------------+\n\nURL: https://mariadb.com/kb/en/add_months/','','https://mariadb.com/kb/en/add_months/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (512,31,'ADDDATE','Syntax\n------\n\nADDDATE(date,INTERVAL expr unit), ADDDATE(expr,days)\n\nDescription\n-----------\n\nWhen invoked with the INTERVAL form of the second argument, ADDDATE() is a\nsynonym for DATE_ADD(). The related function SUBDATE() is a synonym for\nDATE_SUB(). For information on the INTERVAL unit argument, see the discussion\nfor DATE_ADD().\n\nWhen invoked with the days form of the second argument, MariaDB treats it as\nan integer number of days to be added to expr.\n\nExamples\n--------\n\nSELECT DATE_ADD(\'2008-01-02\', INTERVAL 31 DAY);\n+-----------------------------------------+\n| DATE_ADD(\'2008-01-02\', INTERVAL 31 DAY) |\n+-----------------------------------------+\n| 2008-02-02 |\n+-----------------------------------------+\n\nSELECT ADDDATE(\'2008-01-02\', INTERVAL 31 DAY);\n+----------------------------------------+\n| ADDDATE(\'2008-01-02\', INTERVAL 31 DAY) |\n+----------------------------------------+\n| 2008-02-02 |\n+----------------------------------------+\n\nSELECT ADDDATE(\'2008-01-02\', 31);\n+---------------------------+\n| ADDDATE(\'2008-01-02\', 31) |\n+---------------------------+\n| 2008-02-02 |\n+---------------------------+\n\nCREATE TABLE t1 (d DATETIME);\nINSERT INTO t1 VALUES\n (\"2007-01-30 21:31:07\"),\n (\"1983-10-15 06:42:51\"),\n (\"2011-04-21 12:34:56\"),\n (\"2011-10-30 06:31:41\"),\n (\"2011-01-30 14:03:25\"),\n (\"2004-10-07 11:19:34\");\n\nSELECT d, ADDDATE(d, 10) from t1;\n+---------------------+---------------------+\n| d | ADDDATE(d, 10) |\n+---------------------+---------------------+\n| 2007-01-30 21:31:07 | 2007-02-09 21:31:07 |\n| 1983-10-15 06:42:51 | 1983-10-25 06:42:51 |\n| 2011-04-21 12:34:56 | 2011-05-01 12:34:56 |\n| 2011-10-30 06:31:41 | 2011-11-09 06:31:41 |\n| 2011-01-30 14:03:25 | 2011-02-09 14:03:25 |\n| 2004-10-07 11:19:34 | 2004-10-17 11:19:34 |\n+---------------------+---------------------+\n\nSELECT d, ADDDATE(d, INTERVAL 10 HOUR) from t1;\n+---------------------+------------------------------+\n| d | ADDDATE(d, INTERVAL 10 HOUR) |\n+---------------------+------------------------------+\n| 2007-01-30 21:31:07 | 2007-01-31 07:31:07 |\n| 1983-10-15 06:42:51 | 1983-10-15 16:42:51 |\n| 2011-04-21 12:34:56 | 2011-04-21 22:34:56 |\n| 2011-10-30 06:31:41 | 2011-10-30 16:31:41 |\n| 2011-01-30 14:03:25 | 2011-01-31 00:03:25 |\n| 2004-10-07 11:19:34 | 2004-10-07 21:19:34 |\n+---------------------+------------------------------+\n\nURL: https://mariadb.com/kb/en/adddate/','','https://mariadb.com/kb/en/adddate/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (513,31,'ADDTIME','Syntax\n------\n\nADDTIME(expr1,expr2)\n\nDescription\n-----------\n\nADDTIME() adds expr2 to expr1 and returns the result. expr1 is a time or\ndatetime expression, and expr2 is a time expression.\n\nExamples\n--------\n\nSELECT ADDTIME(\'2007-12-31 23:59:59.999999\', \'1 1:1:1.000002\');\n+---------------------------------------------------------+\n| ADDTIME(\'2007-12-31 23:59:59.999999\', \'1 1:1:1.000002\') |\n+---------------------------------------------------------+\n| 2008-01-02 01:01:01.000001 |\n+---------------------------------------------------------+\n\nSELECT ADDTIME(\'01:00:00.999999\', \'02:00:00.999998\');\n+-----------------------------------------------+\n| ADDTIME(\'01:00:00.999999\', \'02:00:00.999998\') |\n+-----------------------------------------------+\n| 03:00:01.999997 |\n+-----------------------------------------------+\n\nURL: https://mariadb.com/kb/en/addtime/','','https://mariadb.com/kb/en/addtime/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (514,31,'CONVERT_TZ','Syntax\n------\n\nCONVERT_TZ(dt,from_tz,to_tz)\n\nDescription\n-----------\n\nCONVERT_TZ() converts a datetime value dt from the time zone given by from_tz\nto the time zone given by to_tz and returns the resulting value.\n\nIn order to use named time zones, such as GMT, MET or Africa/Johannesburg, the\ntime_zone tables must be loaded (see mysql_tzinfo_to_sql).\n\nNo conversion will take place if the value falls outside of the supported\nTIMESTAMP range (\'1970-01-01 00:00:01\' to \'2038-01-19 05:14:07\' UTC) when\nconverted from from_tz to UTC.\n\nThis function returns NULL if the arguments are invalid (or named time zones\nhave not been loaded).\n\nSee time zones for more information.\n\nExamples\n--------\n\nSELECT CONVERT_TZ(\'2016-01-01 12:00:00\',\'+00:00\',\'+10:00\');\n+-----------------------------------------------------+\n| CONVERT_TZ(\'2016-01-01 12:00:00\',\'+00:00\',\'+10:00\') |\n+-----------------------------------------------------+\n| 2016-01-01 22:00:00 |\n+-----------------------------------------------------+\n\nUsing named time zones (with the time zone tables loaded):\n\nSELECT CONVERT_TZ(\'2016-01-01 12:00:00\',\'GMT\',\'Africa/Johannesburg\');\n+---------------------------------------------------------------+\n| CONVERT_TZ(\'2016-01-01 12:00:00\',\'GMT\',\'Africa/Johannesburg\') |\n+---------------------------------------------------------------+\n| 2016-01-01 14:00:00 |\n+---------------------------------------------------------------+\n\nThe value is out of the TIMESTAMP range, so no conversion takes place:\n\nSELECT CONVERT_TZ(\'1969-12-31 22:00:00\',\'+00:00\',\'+10:00\');\n+-----------------------------------------------------+\n| CONVERT_TZ(\'1969-12-31 22:00:00\',\'+00:00\',\'+10:00\') |\n+-----------------------------------------------------+\n| 1969-12-31 22:00:00 |\n+-----------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/convert_tz/','','https://mariadb.com/kb/en/convert_tz/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (515,31,'CURDATE','Syntax\n------\n\nCURDATE()\nCURRENT_DATE\nCURRENT_DATE()\n\nDescription\n-----------\n\nCURDATE returns the current date as a value in \'YYYY-MM-DD\' or YYYYMMDD\nformat, depending on whether the function is used in a string or numeric\ncontext.\n\nCURRENT_DATE and CURRENT_DATE() are synonyms.\n\nExamples\n--------\n\nSELECT CURDATE();\n+------------+\n| CURDATE() |\n+------------+\n| 2019-03-05 |\n+------------+\n\nIn a numeric context (note this is not performing date calculations):\n\nSELECT CURDATE() +0;\n+--------------+\n| CURDATE() +0 |\n+--------------+\n| 20190305 |\n+--------------+\n\nData calculation:\n\nSELECT CURDATE() - INTERVAL 5 DAY;\n+----------------------------+\n| CURDATE() - INTERVAL 5 DAY |\n+----------------------------+\n| 2019-02-28 |\n+----------------------------+\n\nURL: https://mariadb.com/kb/en/curdate/','','https://mariadb.com/kb/en/curdate/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (516,31,'CURRENT_DATE','Syntax\n------\n\nCURRENT_DATE, CURRENT_DATE()\n\nDescription\n-----------\n\nCURRENT_DATE and CURRENT_DATE() are synonyms for CURDATE().\n\nURL: https://mariadb.com/kb/en/current_date/','','https://mariadb.com/kb/en/current_date/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (517,31,'CURRENT_TIME','Syntax\n------\n\nCURRENT_TIME\nCURRENT_TIME([precision])\n\nDescription\n-----------\n\nCURRENT_TIME and CURRENT_TIME() are synonyms for CURTIME().\n\nURL: https://mariadb.com/kb/en/current_time/','','https://mariadb.com/kb/en/current_time/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (518,31,'CURRENT_TIMESTAMP','Syntax\n------\n\nCURRENT_TIMESTAMP\nCURRENT_TIMESTAMP([precision])\n\nDescription\n-----------\n\nCURRENT_TIMESTAMP and CURRENT_TIMESTAMP() are synonyms for NOW().\n\nURL: https://mariadb.com/kb/en/current_timestamp/','','https://mariadb.com/kb/en/current_timestamp/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (519,31,'CURTIME','Syntax\n------\n\nCURTIME([precision])\n\nDescription\n-----------\n\nReturns the current time as a value in \'HH:MM:SS\' or HHMMSS.uuuuuu format,\ndepending on whether the function is used in a string or numeric context. The\nvalue is expressed in the current time zone.\n\nThe optional precision determines the microsecond precision. See Microseconds\nin MariaDB.\n\nExamples\n--------\n\nSELECT CURTIME();\n+-----------+\n| CURTIME() |\n+-----------+\n| 12:45:39 |\n+-----------+\n\nSELECT CURTIME() + 0;\n+---------------+\n| CURTIME() + 0 |\n+---------------+\n| 124545.000000 |\n+---------------+\n\nWith precision:\n\nSELECT CURTIME(2);\n+-------------+\n| CURTIME(2) |\n+-------------+\n| 09:49:08.09 |\n+-------------+\n\nURL: https://mariadb.com/kb/en/curtime/','','https://mariadb.com/kb/en/curtime/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (520,31,'DATE FUNCTION','Syntax\n------\n\nDATE(expr)\n\nDescription\n-----------\n\nExtracts the date part of the date or datetime expression expr.\n\nExamples\n--------\n\nSELECT DATE(\'2013-07-18 12:21:32\');\n+-----------------------------+\n| DATE(\'2013-07-18 12:21:32\') |\n+-----------------------------+\n| 2013-07-18 |\n+-----------------------------+\n\nError Handling\n--------------\n\nUntil MariaDB 5.5.32, some versions of MariaDB returned 0000-00-00 when passed\nan invalid date. From 5.5.32, NULL is returned.\n\nURL: https://mariadb.com/kb/en/date-function/','','https://mariadb.com/kb/en/date-function/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (521,31,'DATEDIFF','Syntax\n------\n\nDATEDIFF(expr1,expr2)\n\nDescription\n-----------\n\nDATEDIFF() returns (expr1 – expr2) expressed as a value in days from one date\nto the other. expr1 and expr2 are date or date-and-time expressions. Only the\ndate parts of the values are used in the calculation.\n\nExamples\n--------\n\nSELECT DATEDIFF(\'2007-12-31 23:59:59\',\'2007-12-30\');\n+----------------------------------------------+\n| DATEDIFF(\'2007-12-31 23:59:59\',\'2007-12-30\') |\n+----------------------------------------------+\n| 1 |\n+----------------------------------------------+\n\nSELECT DATEDIFF(\'2010-11-30 23:59:59\',\'2010-12-31\');\n+----------------------------------------------+\n| DATEDIFF(\'2010-11-30 23:59:59\',\'2010-12-31\') |\n+----------------------------------------------+\n| -31 |\n+----------------------------------------------+\n\nCREATE TABLE t1 (d DATETIME);\nINSERT INTO t1 VALUES\n (\"2007-01-30 21:31:07\"),\n (\"1983-10-15 06:42:51\"),\n (\"2011-04-21 12:34:56\"),\n (\"2011-10-30 06:31:41\"),\n (\"2011-01-30 14:03:25\"),\n (\"2004-10-07 11:19:34\");\n\nSELECT NOW();\n+---------------------+\n| NOW() |\n+---------------------+\n| 2011-05-23 10:56:05 |\n+---------------------+\n\nSELECT d, DATEDIFF(NOW(),d) FROM t1;\n+---------------------+-------------------+\n| d | DATEDIFF(NOW(),d) |\n+---------------------+-------------------+\n| 2007-01-30 21:31:07 | 1574 |\n| 1983-10-15 06:42:51 | 10082 |\n| 2011-04-21 12:34:56 | 32 |\n| 2011-10-30 06:31:41 | -160 |\n| 2011-01-30 14:03:25 | 113 |\n| 2004-10-07 11:19:34 | 2419 |\n+---------------------+-------------------+\n\nURL: https://mariadb.com/kb/en/datediff/','','https://mariadb.com/kb/en/datediff/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (522,31,'DATE_ADD','Syntax\n------\n\nDATE_ADD(date,INTERVAL expr unit)\n\nDescription\n-----------\n\nPerforms date arithmetic. The date argument specifies the starting date or\ndatetime value. expr is an expression specifying the interval value to be\nadded or subtracted from the starting date. expr is a string; it may start\nwith a \"-\" for negative intervals. unit is a keyword indicating the units in\nwhich the expression should be interpreted. See Date and Time Units for a\ncomplete list of permitted units.\n\nExamples\n--------\n\nSELECT \'2008-12-31 23:59:59\' + INTERVAL 1 SECOND;\n+-------------------------------------------+\n| \'2008-12-31 23:59:59\' + INTERVAL 1 SECOND |\n+-------------------------------------------+\n| 2009-01-01 00:00:00 |\n+-------------------------------------------+\n\nSELECT INTERVAL 1 DAY + \'2008-12-31\';\n+-------------------------------+\n| INTERVAL 1 DAY + \'2008-12-31\' |\n+-------------------------------+\n| 2009-01-01 |\n+-------------------------------+\n\nSELECT \'2005-01-01\' - INTERVAL 1 SECOND;\n+----------------------------------+\n| \'2005-01-01\' - INTERVAL 1 SECOND |\n+----------------------------------+\n| 2004-12-31 23:59:59 |\n+----------------------------------+\n\nSELECT DATE_ADD(\'2000-12-31 23:59:59\', INTERVAL 1 SECOND);\n+----------------------------------------------------+\n| DATE_ADD(\'2000-12-31 23:59:59\', INTERVAL 1 SECOND) |\n+----------------------------------------------------+\n| 2001-01-01 00:00:00 |\n+----------------------------------------------------+\n\nSELECT DATE_ADD(\'2010-12-31 23:59:59\', INTERVAL 1 DAY);\n+-------------------------------------------------+\n| DATE_ADD(\'2010-12-31 23:59:59\', INTERVAL 1 DAY) |\n+-------------------------------------------------+\n| 2011-01-01 23:59:59 |\n+-------------------------------------------------+\n\nSELECT DATE_ADD(\'2100-12-31 23:59:59\', INTERVAL \'1:1\' MINUTE_SECOND);\n+---------------------------------------------------------------+\n| DATE_ADD(\'2100-12-31 23:59:59\', INTERVAL \'1:1\' MINUTE_SECOND) |\n+---------------------------------------------------------------+\n| 2101-01-01 00:01:00 |\n+---------------------------------------------------------------+\n\nSELECT DATE_ADD(\'1900-01-01 00:00:00\', INTERVAL \'-1 10\' DAY_HOUR);\n+------------------------------------------------------------+\n| DATE_ADD(\'1900-01-01 00:00:00\', INTERVAL \'-1 10\' DAY_HOUR) |\n+------------------------------------------------------------+\n| 1899-12-30 14:00:00 |\n+------------------------------------------------------------+\n\nSELECT DATE_ADD(\'1992-12-31 23:59:59.000002\', INTERVAL \'1.999999\'\nSECOND_MICROSECOND);\n+------------------------------------------------------------------------------\n-+\n| DATE_ADD(\'1992-12-31 23:59:59.000002\', INTERVAL \'1.999999\'\nSECOND_MICROSECOND) |\n+------------------------------------------------------------------------------\n-+\n| 1993-01-01 00:00:01.000001 \n |\n+------------------------------------------------------------------------------\n-+\n\nURL: https://mariadb.com/kb/en/date_add/','','https://mariadb.com/kb/en/date_add/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (523,31,'DATE_FORMAT','Syntax\n------\n\nDATE_FORMAT(date, format[, locale])\n\nDescription\n-----------\n\nFormats the date value according to the format string.\n\nThe language used for the names is controlled by the value of the\nlc_time_names system variable. See server locale for more on the supported\nlocales.\n\nThe options that can be used by DATE_FORMAT(), as well as its inverse\nSTR_TO_DATE() and the FROM_UNIXTIME() function, are:\n\n+---------------------------+------------------------------------------------+\n| Option | Description |\n+---------------------------+------------------------------------------------+\n| %a | Short weekday name in current locale |\n| | (Variable lc_time_names). |\n+---------------------------+------------------------------------------------+\n| %b | Short form month name in current locale. For |\n| | locale en_US this is one of: |\n| | Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov |\n| | or Dec. |\n+---------------------------+------------------------------------------------+\n| %c | Month with 1 or 2 digits. |\n+---------------------------+------------------------------------------------+\n| %D | Day with English suffix \'th\', \'nd\', \'st\' or |\n| | \'rd\'\'. (1st, 2nd, 3rd...). |\n+---------------------------+------------------------------------------------+\n| %d | Day with 2 digits. |\n+---------------------------+------------------------------------------------+\n| %e | Day with 1 or 2 digits. |\n+---------------------------+------------------------------------------------+\n| %f | Microseconds 6 digits. |\n+---------------------------+------------------------------------------------+\n| %H | Hour with 2 digits between 00-23. |\n+---------------------------+------------------------------------------------+\n| %h | Hour with 2 digits between 01-12. |\n+---------------------------+------------------------------------------------+\n| %I | Hour with 2 digits between 01-12. |\n+---------------------------+------------------------------------------------+\n| %i | Minute with 2 digits. |\n+---------------------------+------------------------------------------------+\n| %j | Day of the year (001-366) |\n+---------------------------+------------------------------------------------+\n| %k | Hour with 1 digits between 0-23. |\n+---------------------------+------------------------------------------------+\n| %l | Hour with 1 digits between 1-12. |\n+---------------------------+------------------------------------------------+\n| %M | Full month name in current locale (Variable |\n| | lc_time_names). |\n+---------------------------+------------------------------------------------+\n| %m | Month with 2 digits. |\n+---------------------------+------------------------------------------------+\n| %p | AM/PM according to current locale (Variable |\n| | lc_time_names). |\n+---------------------------+------------------------------------------------+\n| %r | Time in 12 hour format, followed by AM/PM. |\n| | Short for \'%I:%i:%S %p\'. |\n+---------------------------+------------------------------------------------+\n| %S | Seconds with 2 digits. |\n+---------------------------+------------------------------------------------+\n| %s | Seconds with 2 digits. |\n+---------------------------+------------------------------------------------+\n| %T | Time in 24 hour format. Short for \'%H:%i:%S\'. |\n+---------------------------+------------------------------------------------+\n| %U | Week number (00-53), when first day of the |\n| | week is Sunday. |\n+---------------------------+------------------------------------------------+\n| %u | Week number (00-53), when first day of the |\n| | week is Monday. |\n+---------------------------+------------------------------------------------+\n| %V | Week number (01-53), when first day of the |\n| | week is Sunday. Used with %X. |\n+---------------------------+------------------------------------------------+\n| %v | Week number (01-53), when first day of the |\n| | week is Monday. Used with %x. |\n+---------------------------+------------------------------------------------+\n| %W | Full weekday name in current locale (Variable |\n| | lc_time_names). |\n+---------------------------+------------------------------------------------+\n| %w | Day of the week. 0 = Sunday, 6 = Saturday. |\n+---------------------------+------------------------------------------------+\n| %X | Year with 4 digits when first day of the week |\n| | is Sunday. Used with %V. |\n+---------------------------+------------------------------------------------+\n| %x | Year with 4 digits when first day of the week |\n| | is Monday. Used with %v. |\n+---------------------------+------------------------------------------------+\n| %Y | Year with 4 digits. |\n+---------------------------+------------------------------------------------+\n| %y | Year with 2 digits. |\n+---------------------------+------------------------------------------------+\n| %# | For str_to_date(), skip all numbers. |\n+---------------------------+------------------------------------------------+\n| %. | For str_to_date(), skip all punctation |\n| | characters. |\n+---------------------------+------------------------------------------------+\n| %@ | For str_to_date(), skip all alpha characters. |\n+---------------------------+------------------------------------------------+\n| %% | A literal % character. |\n+---------------------------+------------------------------------------------+\n\nTo get a date in one of the standard formats, GET_FORMAT() can be used.\n\nExamples\n--------\n\nSELECT DATE_FORMAT(\'2009-10-04 22:23:00\', \'%W %M %Y\');\n+------------------------------------------------+\n| DATE_FORMAT(\'2009-10-04 22:23:00\', \'%W %M %Y\') |\n+------------------------------------------------+\n| Sunday October 2009 |\n+------------------------------------------------+\n\nSELECT DATE_FORMAT(\'2007-10-04 22:23:00\', \'%H:%i:%s\');\n+------------------------------------------------+\n| DATE_FORMAT(\'2007-10-04 22:23:00\', \'%H:%i:%s\') |\n+------------------------------------------------+\n| 22:23:00 |\n+------------------------------------------------+\n\nSELECT DATE_FORMAT(\'1900-10-04 22:23:00\', \'%D %y %a %d %m %b %j\');\n+------------------------------------------------------------+\n| DATE_FORMAT(\'1900-10-04 22:23:00\', \'%D %y %a %d %m %b %j\') |\n+------------------------------------------------------------+\n| 4th 00 Thu 04 10 Oct 277 |\n+------------------------------------------------------------+\n\nSELECT DATE_FORMAT(\'1997-10-04 22:23:00\', \'%H %k %I %r %T %S %w\');\n+------------------------------------------------------------+\n| DATE_FORMAT(\'1997-10-04 22:23:00\', \'%H %k %I %r %T %S %w\') |\n+------------------------------------------------------------+\n| 22 22 10 10:23:00 PM 22:23:00 00 6 |\n+------------------------------------------------------------+\n\nSELECT DATE_FORMAT(\'1999-01-01\', \'%X %V\');\n+------------------------------------+\n| DATE_FORMAT(\'1999-01-01\', \'%X %V\') |\n+------------------------------------+\n| 1998 52 |\n+------------------------------------+\n\nSELECT DATE_FORMAT(\'2006-06-00\', \'%d\');\n+---------------------------------+\n| DATE_FORMAT(\'2006-06-00\', \'%d\') |\n+---------------------------------+\n| 00 |\n+---------------------------------+\n\nMariaDB starting with 10.3.2\n----------------------------\nOptionally, the locale can be explicitly specified as the third DATE_FORMAT()\nargument. Doing so makes the function independent from the session settings,\nand the three argument version of DATE_FORMAT() can be used in virtual indexed\nand persistent generated-columns:\n\nSELECT DATE_FORMAT(\'2006-01-01\', \'%W\', \'el_GR\');\n+------------------------------------------+\n| DATE_FORMAT(\'2006-01-01\', \'%W\', \'el_GR\') |\n+------------------------------------------+\n| ΚυÏιακή |\n+------------------------------------------+\n\nURL: https://mariadb.com/kb/en/date_format/','','https://mariadb.com/kb/en/date_format/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (524,31,'DATE_SUB','Syntax\n------\n\nDATE_SUB(date,INTERVAL expr unit)\n\nDescription\n-----------\n\nPerforms date arithmetic. The date argument specifies the starting date or\ndatetime value. expr is an expression specifying the interval value to be\nadded or subtracted from the starting date. expr is a string; it may start\nwith a \"-\" for negative intervals. unit is a keyword indicating the units in\nwhich the expression should be interpreted. See Date and Time Units for a\ncomplete list of permitted units.\n\nSee also DATE_ADD().\n\nExamples\n--------\n\nSELECT DATE_SUB(\'1998-01-02\', INTERVAL 31 DAY);\n+-----------------------------------------+\n| DATE_SUB(\'1998-01-02\', INTERVAL 31 DAY) |\n+-----------------------------------------+\n| 1997-12-02 |\n+-----------------------------------------+\n\nSELECT DATE_SUB(\'2005-01-01 00:00:00\', INTERVAL \'1 1:1:1\' DAY_SECOND);\n+----------------------------------------------------------------+\n| DATE_SUB(\'2005-01-01 00:00:00\', INTERVAL \'1 1:1:1\' DAY_SECOND) |\n+----------------------------------------------------------------+\n| 2004-12-30 22:58:59 |\n+----------------------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/date_sub/','','https://mariadb.com/kb/en/date_sub/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (525,31,'DAY','Syntax\n------\n\nDAY(date)\n\nDescription\n-----------\n\nDAY() is a synonym for DAYOFMONTH().\n\nURL: https://mariadb.com/kb/en/day/','','https://mariadb.com/kb/en/day/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (526,31,'DAYNAME','Syntax\n------\n\nDAYNAME(date)\n\nDescription\n-----------\n\nReturns the name of the weekday for date. The language used for the name is\ncontrolled by the value of the lc_time_names system variable. See server\nlocale for more on the supported locales.\n\nExamples\n--------\n\nSELECT DAYNAME(\'2007-02-03\');\n+-----------------------+\n| DAYNAME(\'2007-02-03\') |\n+-----------------------+\n| Saturday |\n+-----------------------+\n\nCREATE TABLE t1 (d DATETIME);\nINSERT INTO t1 VALUES\n (\"2007-01-30 21:31:07\"),\n (\"1983-10-15 06:42:51\"),\n (\"2011-04-21 12:34:56\"),\n (\"2011-10-30 06:31:41\"),\n (\"2011-01-30 14:03:25\"),\n (\"2004-10-07 11:19:34\");\n\nSELECT d, DAYNAME(d) FROM t1;\n+---------------------+------------+\n| d | DAYNAME(d) |\n+---------------------+------------+\n| 2007-01-30 21:31:07 | Tuesday |\n| 1983-10-15 06:42:51 | Saturday |\n| 2011-04-21 12:34:56 | Thursday |\n| 2011-10-30 06:31:41 | Sunday |\n| 2011-01-30 14:03:25 | Sunday |\n| 2004-10-07 11:19:34 | Thursday |\n+---------------------+------------+\n\nChanging the locale:\n\nSET lc_time_names = \'fr_CA\';\n\nSELECT DAYNAME(\'2013-04-01\');\n+-----------------------+\n| DAYNAME(\'2013-04-01\') |\n+-----------------------+\n| lundi |\n+-----------------------+\n\nURL: https://mariadb.com/kb/en/dayname/','','https://mariadb.com/kb/en/dayname/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (527,31,'DAYOFMONTH','Syntax\n------\n\nDAYOFMONTH(date)\n\nDescription\n-----------\n\nReturns the day of the month for date, in the range 1 to 31, or 0 for dates\nsuch as \'0000-00-00\' or \'2008-00-00\' which have a zero day part.\n\nDAY() is a synonym.\n\nExamples\n--------\n\nSELECT DAYOFMONTH(\'2007-02-03\');\n+--------------------------+\n| DAYOFMONTH(\'2007-02-03\') |\n+--------------------------+\n| 3 |\n+--------------------------+\n\nCREATE TABLE t1 (d DATETIME);\nINSERT INTO t1 VALUES\n (\"2007-01-30 21:31:07\"),\n (\"1983-10-15 06:42:51\"),\n (\"2011-04-21 12:34:56\"),\n (\"2011-10-30 06:31:41\"),\n (\"2011-01-30 14:03:25\"),\n (\"2004-10-07 11:19:34\");\n\nSELECT d FROM t1 where DAYOFMONTH(d) = 30;\n+---------------------+\n| d |\n+---------------------+\n| 2007-01-30 21:31:07 |\n| 2011-10-30 06:31:41 |\n| 2011-01-30 14:03:25 |\n+---------------------+\n\nURL: https://mariadb.com/kb/en/dayofmonth/','','https://mariadb.com/kb/en/dayofmonth/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (528,31,'DAYOFWEEK','Syntax\n------\n\nDAYOFWEEK(date)\n\nDescription\n-----------\n\nReturns the day of the week index for the date (1 = Sunday, 2 = Monday, ..., 7\n= Saturday). These index values correspond to the ODBC standard.\n\nThis contrasts with WEEKDAY() which follows a different index numbering (0 =\nMonday, 1 = Tuesday, ... 6 = Sunday).\n\nExamples\n--------\n\nSELECT DAYOFWEEK(\'2007-02-03\');\n+-------------------------+\n| DAYOFWEEK(\'2007-02-03\') |\n+-------------------------+\n| 7 |\n+-------------------------+\n\nCREATE TABLE t1 (d DATETIME);\nINSERT INTO t1 VALUES\n (\"2007-01-30 21:31:07\"),\n (\"1983-10-15 06:42:51\"),\n (\"2011-04-21 12:34:56\"),\n (\"2011-10-30 06:31:41\"),\n (\"2011-01-30 14:03:25\"),\n (\"2004-10-07 11:19:34\");\n\nSELECT d, DAYNAME(d), DAYOFWEEK(d), WEEKDAY(d) from t1;\n+---------------------+------------+--------------+------------+\n| d | DAYNAME(d) | DAYOFWEEK(d) | WEEKDAY(d) |\n+---------------------+------------+--------------+------------+\n| 2007-01-30 21:31:07 | Tuesday | 3 | 1 |\n| 1983-10-15 06:42:51 | Saturday | 7 | 5 |\n| 2011-04-21 12:34:56 | Thursday | 5 | 3 |\n| 2011-10-30 06:31:41 | Sunday | 1 | 6 |\n| 2011-01-30 14:03:25 | Sunday | 1 | 6 |\n| 2004-10-07 11:19:34 | Thursday | 5 | 3 |\n+---------------------+------------+--------------+------------+\n\nURL: https://mariadb.com/kb/en/dayofweek/','','https://mariadb.com/kb/en/dayofweek/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (529,31,'DAYOFYEAR','Syntax\n------\n\nDAYOFYEAR(date)\n\nDescription\n-----------\n\nReturns the day of the year for date, in the range 1 to 366.\n\nExamples\n--------\n\nSELECT DAYOFYEAR(\'2018-02-16\');\n+-------------------------+\n| DAYOFYEAR(\'2018-02-16\') |\n+-------------------------+\n| 47 |\n+-------------------------+\n\nURL: https://mariadb.com/kb/en/dayofyear/','','https://mariadb.com/kb/en/dayofyear/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (530,31,'EXTRACT','Syntax\n------\n\nEXTRACT(unit FROM date)\n\nDescription\n-----------\n\nThe EXTRACT() function extracts the required unit from the date. See Date and\nTime Units for a complete list of permitted units.\n\nIn MariaDB 10.0.7 and MariaDB 5.5.35, EXTRACT (HOUR FROM ...) was changed to\nreturn a value from 0 to 23, adhering to the SQL standard. Until MariaDB\n10.0.6 and MariaDB 5.5.34, and in all versions of MySQL at least as of MySQL\n5.7, it could return a value > 23. HOUR() is not a standard function, so\ncontinues to adhere to the old behaviour inherited from MySQL.\n\nExamples\n--------\n\nSELECT EXTRACT(YEAR FROM \'2009-07-02\');\n+---------------------------------+\n| EXTRACT(YEAR FROM \'2009-07-02\') |\n+---------------------------------+\n| 2009 |\n+---------------------------------+\n\nSELECT EXTRACT(YEAR_MONTH FROM \'2009-07-02 01:02:03\');\n+------------------------------------------------+\n| EXTRACT(YEAR_MONTH FROM \'2009-07-02 01:02:03\') |\n+------------------------------------------------+\n| 200907 |\n+------------------------------------------------+\n\nSELECT EXTRACT(DAY_MINUTE FROM \'2009-07-02 01:02:03\');\n+------------------------------------------------+\n| EXTRACT(DAY_MINUTE FROM \'2009-07-02 01:02:03\') |\n+------------------------------------------------+\n| 20102 |\n+------------------------------------------------+\n\nSELECT EXTRACT(MICROSECOND FROM \'2003-01-02 10:30:00.000123\');\n+--------------------------------------------------------+\n| EXTRACT(MICROSECOND FROM \'2003-01-02 10:30:00.000123\') |\n+--------------------------------------------------------+\n| 123 |\n+--------------------------------------------------------+\n\nFrom MariaDB 10.0.7 and MariaDB 5.5.35, EXTRACT (HOUR FROM...) returns a value\nfrom 0 to 23, as per the SQL standard. HOUR is not a standard function, so\ncontinues to adhere to the old behaviour inherited from MySQL.\n\nSELECT EXTRACT(HOUR FROM \'26:30:00\'), HOUR(\'26:30:00\');\n+-------------------------------+------------------+\n| EXTRACT(HOUR FROM \'26:30:00\') | HOUR(\'26:30:00\') |\n+-------------------------------+------------------+\n| 2 | 26 |\n+-------------------------------+------------------+\n\nURL: https://mariadb.com/kb/en/extract/','','https://mariadb.com/kb/en/extract/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (531,31,'FROM_DAYS','Syntax\n------\n\nFROM_DAYS(N)\n\nDescription\n-----------\n\nGiven a day number N, returns a DATE value. The day count is based on the\nnumber of days from the start of the standard calendar (0000-00-00).\n\nThe function is not designed for use with dates before the advent of the\nGregorian calendar in October 1582. Results will not be reliable since it\ndoesn\'t account for the lost days when the calendar changed from the Julian\ncalendar.\n\nThis is the converse of the TO_DAYS() function.\n\nExamples\n--------\n\nSELECT FROM_DAYS(730669);\n+-------------------+\n| FROM_DAYS(730669) |\n+-------------------+\n| 2000-07-03 |\n+-------------------+\n\nURL: https://mariadb.com/kb/en/from_days/','','https://mariadb.com/kb/en/from_days/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (532,31,'FROM_UNIXTIME','Syntax\n------\n\nFROM_UNIXTIME(unix_timestamp), FROM_UNIXTIME(unix_timestamp,format)\n\nDescription\n-----------\n\nReturns a representation of the unix_timestamp argument as a value in\n\'YYYY-MM-DD HH:MM:SS\' or YYYYMMDDHHMMSS.uuuuuu format, depending on whether\nthe function is used in a string or numeric context. The value is expressed in\nthe current time zone. unix_timestamp is an internal timestamp value such as\nis produced by the UNIX_TIMESTAMP() function.\n\nIf format is given, the result is formatted according to the format string,\nwhich is used the same way as listed in the entry for the DATE_FORMAT()\nfunction.\n\nTimestamps in MariaDB have a maximum value of 2147483647, equivalent to\n2038-01-19 05:14:07. This is due to the underlying 32-bit limitation. Using\nthe function on a timestamp beyond this will result in NULL being returned.\nUse DATETIME as a storage type if you require dates beyond this.\n\nThe options that can be used by FROM_UNIXTIME(), as well as DATE_FORMAT() and\nSTR_TO_DATE(), are:\n\n+---------------------------+------------------------------------------------+\n| Option | Description |\n+---------------------------+------------------------------------------------+\n| %a | Short weekday name in current locale |\n| | (Variable lc_time_names). |\n+---------------------------+------------------------------------------------+\n| %b | Short form month name in current locale. For |\n| | locale en_US this is one of: |\n| | Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov |\n| | or Dec. |\n+---------------------------+------------------------------------------------+\n| %c | Month with 1 or 2 digits. |\n+---------------------------+------------------------------------------------+\n| %D | Day with English suffix \'th\', \'nd\', \'st\' or |\n| | \'rd\'\'. (1st, 2nd, 3rd...). |\n+---------------------------+------------------------------------------------+\n| %d | Day with 2 digits. |\n+---------------------------+------------------------------------------------+\n| %e | Day with 1 or 2 digits. |\n+---------------------------+------------------------------------------------+\n| %f | Microseconds 6 digits. |\n+---------------------------+------------------------------------------------+\n| %H | Hour with 2 digits between 00-23. |\n+---------------------------+------------------------------------------------+\n| %h | Hour with 2 digits between 01-12. |\n+---------------------------+------------------------------------------------+\n| %I | Hour with 2 digits between 01-12. |\n+---------------------------+------------------------------------------------+\n| %i | Minute with 2 digits. |\n+---------------------------+------------------------------------------------+\n| %j | Day of the year (001-366) |\n+---------------------------+------------------------------------------------+\n| %k | Hour with 1 digits between 0-23. |\n+---------------------------+------------------------------------------------+\n| %l | Hour with 1 digits between 1-12. |\n+---------------------------+------------------------------------------------+\n| %M | Full month name in current locale (Variable |\n| | lc_time_names). |\n+---------------------------+------------------------------------------------+\n| %m | Month with 2 digits. |\n+---------------------------+------------------------------------------------+\n| %p | AM/PM according to current locale (Variable |\n| | lc_time_names). |\n+---------------------------+------------------------------------------------+\n| %r | Time in 12 hour format, followed by AM/PM. |\n| | Short for \'%I:%i:%S %p\'. |\n+---------------------------+------------------------------------------------+\n| %S | Seconds with 2 digits. |\n+---------------------------+------------------------------------------------+\n| %s | Seconds with 2 digits. |\n+---------------------------+------------------------------------------------+\n| %T | Time in 24 hour format. Short for \'%H:%i:%S\'. |\n+---------------------------+------------------------------------------------+\n| %U | Week number (00-53), when first day of the |\n| | week is Sunday. |\n+---------------------------+------------------------------------------------+\n| %u | Week number (00-53), when first day of the |\n| | week is Monday. |\n+---------------------------+------------------------------------------------+\n| %V | Week number (01-53), when first day of the |\n| | week is Sunday. Used with %X. |\n+---------------------------+------------------------------------------------+\n| %v | Week number (01-53), when first day of the |\n| | week is Monday. Used with %x. |\n+---------------------------+------------------------------------------------+\n| %W | Full weekday name in current locale (Variable |\n| | lc_time_names). |\n+---------------------------+------------------------------------------------+\n| %w | Day of the week. 0 = Sunday, 6 = Saturday. |\n+---------------------------+------------------------------------------------+\n| %X | Year with 4 digits when first day of the week |\n| | is Sunday. Used with %V. |\n+---------------------------+------------------------------------------------+\n| %x | Year with 4 digits when first day of the week |\n| | is Sunday. Used with %v. |\n+---------------------------+------------------------------------------------+\n| %Y | Year with 4 digits. |\n+---------------------------+------------------------------------------------+\n| %y | Year with 2 digits. |\n+---------------------------+------------------------------------------------+\n| %# | For str_to_date(), skip all numbers. |\n+---------------------------+------------------------------------------------+\n| %. | For str_to_date(), skip all punctation |\n| | characters. |\n+---------------------------+------------------------------------------------+\n| %@ | For str_to_date(), skip all alpha characters. |\n+---------------------------+------------------------------------------------+\n| %% | A literal % character. |\n+---------------------------+------------------------------------------------+\n\nPerformance Considerations\n--------------------------\n\nIf your session time zone is set to SYSTEM (the default), FROM_UNIXTIME() will\ncall the OS function to convert the data using the system time zone. At least\non Linux, the corresponding function (localtime_r) uses a global mutex inside\nglibc that can cause contention under high concurrent load.\n\nSet your time zone to a named time zone to avoid this issue. See mysql time\nzone tables for details on how to do this.\n\nExamples\n--------\n\nSELECT FROM_UNIXTIME(1196440219);\n+---------------------------+\n| FROM_UNIXTIME(1196440219) |\n+---------------------------+\n| 2007-11-30 11:30:19 |\n+---------------------------+\n\nSELECT FROM_UNIXTIME(1196440219) + 0;\n+-------------------------------+\n| FROM_UNIXTIME(1196440219) + 0 |\n+-------------------------------+\n| 20071130113019.000000 |\n+-------------------------------+\n\nSELECT FROM_UNIXTIME(UNIX_TIMESTAMP(), \'%Y %D %M %h:%i:%s %x\');\n+---------------------------------------------------------+\n| FROM_UNIXTIME(UNIX_TIMESTAMP(), \'%Y %D %M %h:%i:%s %x\') |\n+---------------------------------------------------------+\n| 2010 27th March 01:03:47 2010 |\n+---------------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/from_unixtime/','','https://mariadb.com/kb/en/from_unixtime/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (533,31,'GET_FORMAT','Syntax\n------\n\nGET_FORMAT({DATE|DATETIME|TIME}, {\'EUR\'|\'USA\'|\'JIS\'|\'ISO\'|\'INTERNAL\'})\n\nDescription\n-----------\n\nReturns a format string. This function is useful in combination with the\nDATE_FORMAT() and the STR_TO_DATE() functions.\n\nPossible result formats are:\n\n+--------------------------------------+--------------------------------------+\n| Function Call | Result Format |\n+--------------------------------------+--------------------------------------+\n| GET_FORMAT(DATE,\'EUR\') | \'%d.%m.%Y\' |\n+--------------------------------------+--------------------------------------+\n| GET_FORMAT(DATE,\'USA\') | \'%m.%d.%Y\' |\n+--------------------------------------+--------------------------------------+\n| GET_FORMAT(DATE,\'JIS\') | \'%Y-%m-%d\' |\n+--------------------------------------+--------------------------------------+\n| GET_FORMAT(DATE,\'ISO\') | \'%Y-%m-%d\' |\n+--------------------------------------+--------------------------------------+\n| GET_FORMAT(DATE,\'INTERNAL\') | \'%Y%m%d\' |\n+--------------------------------------+--------------------------------------+\n| GET_FORMAT(DATETIME,\'EUR\') | \'%Y-%m-%d %H.%i.%s\' |\n+--------------------------------------+--------------------------------------+\n| GET_FORMAT(DATETIME,\'USA\') | \'%Y-%m-%d %H.%i.%s\' |\n+--------------------------------------+--------------------------------------+\n| GET_FORMAT(DATETIME,\'JIS\') | \'%Y-%m-%d %H:%i:%s\' |\n+--------------------------------------+--------------------------------------+\n| GET_FORMAT(DATETIME,\'ISO\') | \'%Y-%m-%d %H:%i:%s\' |\n+--------------------------------------+--------------------------------------+\n| GET_FORMAT(DATETIME,\'INTERNAL\') | \'%Y%m%d%H%i%s\' |\n+--------------------------------------+--------------------------------------+\n| GET_FORMAT(TIME,\'EUR\') | \'%H.%i.%s\' |\n+--------------------------------------+--------------------------------------+\n| GET_FORMAT(TIME,\'USA\') | \'%h:%i:%s %p\' |\n+--------------------------------------+--------------------------------------+\n| GET_FORMAT(TIME,\'JIS\') | \'%H:%i:%s\' |\n+--------------------------------------+--------------------------------------+\n| GET_FORMAT(TIME,\'ISO\') | \'%H:%i:%s\' |\n+--------------------------------------+--------------------------------------+\n| GET_FORMAT(TIME,\'INTERNAL\') | \'%H%i%s\' |\n+--------------------------------------+--------------------------------------+\n\nExamples\n--------\n\nObtaining the string matching to the standard European date format:\n\nSELECT GET_FORMAT(DATE, \'EUR\');\n+-------------------------+\n| GET_FORMAT(DATE, \'EUR\') |\n+-------------------------+\n| %d.%m.%Y |\n+-------------------------+\n\nUsing the same string to format a date:\n\nSELECT DATE_FORMAT(\'2003-10-03\',GET_FORMAT(DATE,\'EUR\'));\n+--------------------------------------------------+\n| DATE_FORMAT(\'2003-10-03\',GET_FORMAT(DATE,\'EUR\')) |\n+--------------------------------------------------+\n| 03.10.2003 |\n+--------------------------------------------------+\n\nSELECT STR_TO_DATE(\'10.31.2003\',GET_FORMAT(DATE,\'USA\'));\n+--------------------------------------------------+\n| STR_TO_DATE(\'10.31.2003\',GET_FORMAT(DATE,\'USA\')) |\n+--------------------------------------------------+\n| 2003-10-31 |\n+--------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/get_format/','','https://mariadb.com/kb/en/get_format/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (534,31,'HOUR','Syntax\n------\n\nHOUR(time)\n\nDescription\n-----------\n\nReturns the hour for time. The range of the return value is 0 to 23 for\ntime-of-day values. However, the range of TIME values actually is much larger,\nso HOUR can return values greater than 23.\n\nThe return value is always positive, even if a negative TIME value is provided.\n\nExamples\n--------\n\nSELECT HOUR(\'10:05:03\');\n+------------------+\n| HOUR(\'10:05:03\') |\n+------------------+\n| 10 |\n+------------------+\n\nSELECT HOUR(\'272:59:59\');\n+-------------------+\n| HOUR(\'272:59:59\') |\n+-------------------+\n| 272 |\n+-------------------+\n\nDifference between EXTRACT (HOUR FROM ...) (>= MariaDB 10.0.7 and MariaDB\n5.5.35) and HOUR:\n\nSELECT EXTRACT(HOUR FROM \'26:30:00\'), HOUR(\'26:30:00\');\n+-------------------------------+------------------+\n| EXTRACT(HOUR FROM \'26:30:00\') | HOUR(\'26:30:00\') |\n+-------------------------------+------------------+\n| 2 | 26 |\n+-------------------------------+------------------+\n\nURL: https://mariadb.com/kb/en/hour/','','https://mariadb.com/kb/en/hour/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (535,31,'LAST_DAY','Syntax\n------\n\nLAST_DAY(date)\n\nDescription\n-----------\n\nTakes a date or datetime value and returns the corresponding value for the\nlast day of the month. Returns NULL if the argument is invalid.\n\nExamples\n--------\n\nSELECT LAST_DAY(\'2003-02-05\');\n+------------------------+\n| LAST_DAY(\'2003-02-05\') |\n+------------------------+\n| 2003-02-28 |\n+------------------------+\n\nSELECT LAST_DAY(\'2004-02-05\');\n+------------------------+\n| LAST_DAY(\'2004-02-05\') |\n+------------------------+\n| 2004-02-29 |\n+------------------------+\n\nSELECT LAST_DAY(\'2004-01-01 01:01:01\');\n+---------------------------------+\n| LAST_DAY(\'2004-01-01 01:01:01\') |\n+---------------------------------+\n| 2004-01-31 |\n+---------------------------------+\n\nSELECT LAST_DAY(\'2003-03-32\');\n+------------------------+\n| LAST_DAY(\'2003-03-32\') |\n+------------------------+\n| NULL |\n+------------------------+\n1 row in set, 1 warning (0.00 sec)\n\nWarning (Code 1292): Incorrect datetime value: \'2003-03-32\'\n\nURL: https://mariadb.com/kb/en/last_day/','','https://mariadb.com/kb/en/last_day/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (536,31,'LOCALTIME','Syntax\n------\n\nLOCALTIME\nLOCALTIME([precision])\n\nDescription\n-----------\n\nLOCALTIME and LOCALTIME() are synonyms for NOW().\n\nURL: https://mariadb.com/kb/en/localtime/','','https://mariadb.com/kb/en/localtime/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (537,31,'LOCALTIMESTAMP','Syntax\n------\n\nLOCALTIMESTAMP\nLOCALTIMESTAMP([precision])\n\nDescription\n-----------\n\nLOCALTIMESTAMP and LOCALTIMESTAMP() are synonyms for NOW().\n\nURL: https://mariadb.com/kb/en/localtimestamp/','','https://mariadb.com/kb/en/localtimestamp/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (538,31,'MAKEDATE','Syntax\n------\n\nMAKEDATE(year,dayofyear)\n\nDescription\n-----------\n\nReturns a date, given year and day-of-year values. dayofyear must be greater\nthan 0 or the result is NULL.\n\nExamples\n--------\n\nSELECT MAKEDATE(2011,31), MAKEDATE(2011,32);\n+-------------------+-------------------+\n| MAKEDATE(2011,31) | MAKEDATE(2011,32) |\n+-------------------+-------------------+\n| 2011-01-31 | 2011-02-01 |\n+-------------------+-------------------+\n\nSELECT MAKEDATE(2011,365), MAKEDATE(2014,365);\n+--------------------+--------------------+\n| MAKEDATE(2011,365) | MAKEDATE(2014,365) |\n+--------------------+--------------------+\n| 2011-12-31 | 2014-12-31 |\n+--------------------+--------------------+\n\nSELECT MAKEDATE(2011,0);\n+------------------+\n| MAKEDATE(2011,0) |\n+------------------+\n| NULL |\n+------------------+\n\nURL: https://mariadb.com/kb/en/makedate/','','https://mariadb.com/kb/en/makedate/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (539,31,'MAKETIME','Syntax\n------\n\nMAKETIME(hour,minute,second)\n\nDescription\n-----------\n\nReturns a time value calculated from the hour, minute, and second arguments.\n\nIf minute or second are out of the range 0 to 60, NULL is returned. The hour\ncan be in the range -838 to 838, outside of which the value is truncated with\na warning.\n\nExamples\n--------\n\nSELECT MAKETIME(13,57,33);\n+--------------------+\n| MAKETIME(13,57,33) |\n+--------------------+\n| 13:57:33 |\n+--------------------+\n\nSELECT MAKETIME(-13,57,33);\n+---------------------+\n| MAKETIME(-13,57,33) |\n+---------------------+\n| -13:57:33 |\n+---------------------+\n\nSELECT MAKETIME(13,67,33);\n+--------------------+\n| MAKETIME(13,67,33) |\n+--------------------+\n| NULL |\n+--------------------+\n\nSELECT MAKETIME(-1000,57,33);\n+-----------------------+\n| MAKETIME(-1000,57,33) |\n+-----------------------+\n| -838:59:59 |\n+-----------------------+\n1 row in set, 1 warning (0.00 sec)\n\nSHOW WARNINGS;\n+---------+------+-----------------------------------------------+\n| Level | Code | Message |\n+---------+------+-----------------------------------------------+\n| Warning | 1292 | Truncated incorrect time value: \'-1000:57:33\' |\n+---------+------+-----------------------------------------------+\n\nURL: https://mariadb.com/kb/en/maketime/','','https://mariadb.com/kb/en/maketime/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (540,31,'MICROSECOND','Syntax\n------\n\nMICROSECOND(expr)\n\nDescription\n-----------\n\nReturns the microseconds from the time or datetime expression expr as a number\nin the range from 0 to 999999.\n\nIf expr is a time with no microseconds, zero is returned, while if expr is a\ndate with no time, zero with a warning is returned.\n\nExamples\n--------\n\nSELECT MICROSECOND(\'12:00:00.123456\');\n+--------------------------------+\n| MICROSECOND(\'12:00:00.123456\') |\n+--------------------------------+\n| 123456 |\n+--------------------------------+\n\nSELECT MICROSECOND(\'2009-12-31 23:59:59.000010\');\n+-------------------------------------------+\n| MICROSECOND(\'2009-12-31 23:59:59.000010\') |\n+-------------------------------------------+\n| 10 |\n+-------------------------------------------+\n\nSELECT MICROSECOND(\'2013-08-07 12:13:14\');\n+------------------------------------+\n| MICROSECOND(\'2013-08-07 12:13:14\') |\n+------------------------------------+\n| 0 |\n+------------------------------------+\n\nSELECT MICROSECOND(\'2013-08-07\');\n+---------------------------+\n| MICROSECOND(\'2013-08-07\') |\n+---------------------------+\n| 0 |\n+---------------------------+\n1 row in set, 1 warning (0.00 sec)\n\nSHOW WARNINGS;\n+---------+------+----------------------------------------------+\n| Level | Code | Message |\n+---------+------+----------------------------------------------+\n| Warning | 1292 | Truncated incorrect time value: \'2013-08-07\' |\n+---------+------+----------------------------------------------+\n\nURL: https://mariadb.com/kb/en/microsecond/','','https://mariadb.com/kb/en/microsecond/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (541,31,'MINUTE','Syntax\n------\n\nMINUTE(time)\n\nDescription\n-----------\n\nReturns the minute for time, in the range 0 to 59.\n\nExamples\n--------\n\nSELECT MINUTE(\'2013-08-03 11:04:03\');\n+-------------------------------+\n| MINUTE(\'2013-08-03 11:04:03\') |\n+-------------------------------+\n| 4 |\n+-------------------------------+\n\nSELECT MINUTE (\'23:12:50\');\n+---------------------+\n| MINUTE (\'23:12:50\') |\n+---------------------+\n| 12 |\n+---------------------+\n\nURL: https://mariadb.com/kb/en/minute/','','https://mariadb.com/kb/en/minute/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (542,31,'MONTH','Syntax\n------\n\nMONTH(date)\n\nDescription\n-----------\n\nReturns the month for date in the range 1 to 12 for January to December, or 0\nfor dates such as \'0000-00-00\' or \'2008-00-00\' that have a zero month part.\n\nExamples\n--------\n\nSELECT MONTH(\'2019-01-03\');\n+---------------------+\n| MONTH(\'2019-01-03\') |\n+---------------------+\n| 1 |\n+---------------------+\n\nSELECT MONTH(\'2019-00-03\');\n+---------------------+\n| MONTH(\'2019-00-03\') |\n+---------------------+\n| 0 |\n+---------------------+\n\nURL: https://mariadb.com/kb/en/month/','','https://mariadb.com/kb/en/month/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (543,31,'MONTHNAME','Syntax\n------\n\nMONTHNAME(date)\n\nDescription\n-----------\n\nReturns the full name of the month for date. The language used for the name is\ncontrolled by the value of the lc_time_names system variable. See server\nlocale for more on the supported locales.\n\nExamples\n--------\n\nSELECT MONTHNAME(\'2019-02-03\');\n+-------------------------+\n| MONTHNAME(\'2019-02-03\') |\n+-------------------------+\n| February |\n+-------------------------+\n\nChanging the locale:\n\nSET lc_time_names = \'fr_CA\';\n\nSELECT MONTHNAME(\'2019-05-21\');\n+-------------------------+\n| MONTHNAME(\'2019-05-21\') |\n+-------------------------+\n| mai |\n+-------------------------+\n\nURL: https://mariadb.com/kb/en/monthname/','','https://mariadb.com/kb/en/monthname/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (544,31,'NOW','Syntax\n------\n\nNOW([precision])\nCURRENT_TIMESTAMP\nCURRENT_TIMESTAMP([precision])\nLOCALTIME, LOCALTIME([precision])\nLOCALTIMESTAMP\nLOCALTIMESTAMP([precision])\n\nDescription\n-----------\n\nReturns the current date and time as a value in \'YYYY-MM-DD HH:MM:SS\' or\nYYYYMMDDHHMMSS.uuuuuu format, depending on whether the function is used in a\nstring or numeric context. The value is expressed in the current time zone.\n\nThe optional precision determines the microsecond precision. See Microseconds\nin MariaDB.\n\nNOW() (or its synonyms) can be used as the default value for TIMESTAMP columns\nas well as, since MariaDB 10.0.1, DATETIME columns. Before MariaDB 10.0.1, it\nwas only possible for a single TIMESTAMP column per table to contain the\nCURRENT_TIMESTAMP as its default.\n\nWhen displayed in the INFORMATION_SCHEMA.COLUMNS table, a default CURRENT\nTIMESTAMP is displayed as CURRENT_TIMESTAMP up until MariaDB 10.2.2, and as\ncurrent_timestamp() from MariaDB 10.2.3, due to to MariaDB 10.2 accepting\nexpressions in the DEFAULT clause.\n\nChanging the timestamp system variable with a SET timestamp statement affects\nthe value returned by NOW(), but not by SYSDATE().\n\nExamples\n--------\n\nSELECT NOW();\n+---------------------+\n| NOW() |\n+---------------------+\n| 2010-03-27 13:13:25 |\n+---------------------+\n\nSELECT NOW() + 0;\n+-----------------------+\n| NOW() + 0 |\n+-----------------------+\n| 20100327131329.000000 |\n+-----------------------+\n\nWith precision:\n\nSELECT CURRENT_TIMESTAMP(2);\n+------------------------+\n| CURRENT_TIMESTAMP(2) |\n+------------------------+\n| 2018-07-10 09:47:26.24 |\n+------------------------+\n\nUsed as a default TIMESTAMP:\n\nCREATE TABLE t (createdTS TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP);\n\nFrom MariaDB 10.2.2:\n\nSELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA=\'test\'\n AND COLUMN_NAME LIKE \'%ts%\'\\G\n*************************** 1. row ***************************\n TABLE_CATALOG: def\n TABLE_SCHEMA: test\n TABLE_NAME: t\n COLUMN_NAME: ts\n ORDINAL_POSITION: 1\n COLUMN_DEFAULT: current_timestamp()\n...\n\n<= MariaDB 10.2.1\n\nSELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA=\'test\'\n AND COLUMN_NAME LIKE \'%ts%\'\\G\n*************************** 1. row ***************************\n TABLE_CATALOG: def\n TABLE_SCHEMA: test\n TABLE_NAME: t\n COLUMN_NAME: createdTS\n ORDINAL_POSITION: 1\n COLUMN_DEFAULT: CURRENT_TIMESTAMP\n...\n\nURL: https://mariadb.com/kb/en/now/','','https://mariadb.com/kb/en/now/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (545,31,'PERIOD_ADD','Syntax\n------\n\nPERIOD_ADD(P,N)\n\nDescription\n-----------\n\nAdds N months to period P. P is in the format YYMM or YYYYMM, and is not a\ndate value. If P contains a two-digit year, values from 00 to 69 are converted\nto from 2000 to 2069, while values from 70 are converted to 1970 upwards.\n\nReturns a value in the format YYYYMM.\n\nExamples\n--------\n\nSELECT PERIOD_ADD(200801,2);\n+----------------------+\n| PERIOD_ADD(200801,2) |\n+----------------------+\n| 200803 |\n+----------------------+\n\nSELECT PERIOD_ADD(6910,2);\n+--------------------+\n| PERIOD_ADD(6910,2) |\n+--------------------+\n| 206912 |\n+--------------------+\n\nSELECT PERIOD_ADD(7010,2);\n+--------------------+\n| PERIOD_ADD(7010,2) |\n+--------------------+\n| 197012 |\n+--------------------+\n\nURL: https://mariadb.com/kb/en/period_add/','','https://mariadb.com/kb/en/period_add/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (546,31,'PERIOD_DIFF','Syntax\n------\n\nPERIOD_DIFF(P1,P2)\n\nDescription\n-----------\n\nReturns the number of months between periods P1 and P2. P1 and P2 can be in\nthe format YYMM or YYYYMM, and are not date values.\n\nIf P1 or P2 contains a two-digit year, values from 00 to 69 are converted to\nfrom 2000 to 2069, while values from 70 are converted to 1970 upwards.\n\nExamples\n--------\n\nSELECT PERIOD_DIFF(200802,200703);\n+----------------------------+\n| PERIOD_DIFF(200802,200703) |\n+----------------------------+\n| 11 |\n+----------------------------+\n\nSELECT PERIOD_DIFF(6902,6803);\n+------------------------+\n| PERIOD_DIFF(6902,6803) |\n+------------------------+\n| 11 |\n+------------------------+\n\nSELECT PERIOD_DIFF(7002,6803);\n+------------------------+\n| PERIOD_DIFF(7002,6803) |\n+------------------------+\n| -1177 |\n+------------------------+\n\nURL: https://mariadb.com/kb/en/period_diff/','','https://mariadb.com/kb/en/period_diff/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (547,31,'QUARTER','Syntax\n------\n\nQUARTER(date)\n\nDescription\n-----------\n\nReturns the quarter of the year for date, in the range 1 to 4. Returns 0 if\nmonth contains a zero value, or NULL if the given value is not otherwise a\nvalid date (zero values are accepted).\n\nExamples\n--------\n\nSELECT QUARTER(\'2008-04-01\');\n+-----------------------+\n| QUARTER(\'2008-04-01\') |\n+-----------------------+\n| 2 |\n+-----------------------+\n\nSELECT QUARTER(\'2019-00-01\');\n+-----------------------+\n| QUARTER(\'2019-00-01\') |\n+-----------------------+\n| 0 |\n+-----------------------+\n\nURL: https://mariadb.com/kb/en/quarter/','','https://mariadb.com/kb/en/quarter/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (548,31,'SECOND','Syntax\n------\n\nSECOND(time)\n\nDescription\n-----------\n\nReturns the second for a given time (which can include microseconds), in the\nrange 0 to 59, or NULL if not given a valid time value.\n\nExamples\n--------\n\nSELECT SECOND(\'10:05:03\');\n+--------------------+\n| SECOND(\'10:05:03\') |\n+--------------------+\n| 3 |\n+--------------------+\n\nSELECT SECOND(\'10:05:01.999999\');\n+---------------------------+\n| SECOND(\'10:05:01.999999\') |\n+---------------------------+\n| 1 |\n+---------------------------+\n\nURL: https://mariadb.com/kb/en/second/','','https://mariadb.com/kb/en/second/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (549,31,'SEC_TO_TIME','Syntax\n------\n\nSEC_TO_TIME(seconds)\n\nDescription\n-----------\n\nReturns the seconds argument, converted to hours, minutes, and seconds, as a\nTIME value. The range of the result is constrained to that of the TIME data\ntype. A warning occurs if the argument corresponds to a value outside that\nrange.\n\nThe time will be returned in the format hh:mm:ss, or hhmmss if used in a\nnumeric calculation.\n\nExamples\n--------\n\nSELECT SEC_TO_TIME(12414);\n+--------------------+\n| SEC_TO_TIME(12414) |\n+--------------------+\n| 03:26:54 |\n+--------------------+\n\nSELECT SEC_TO_TIME(12414)+0;\n+----------------------+\n| SEC_TO_TIME(12414)+0 |\n+----------------------+\n| 32654 |\n+----------------------+\n\nSELECT SEC_TO_TIME(9999999);\n+----------------------+\n| SEC_TO_TIME(9999999) |\n+----------------------+\n| 838:59:59 |\n+----------------------+\n1 row in set, 1 warning (0.00 sec)\n\nSHOW WARNINGS;\n+---------+------+-------------------------------------------+\n| Level | Code | Message |\n+---------+------+-------------------------------------------+\n| Warning | 1292 | Truncated incorrect time value: \'9999999\' |\n+---------+------+-------------------------------------------+\n\nURL: https://mariadb.com/kb/en/sec_to_time/','','https://mariadb.com/kb/en/sec_to_time/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (550,31,'STR_TO_DATE','Syntax\n------\n\nSTR_TO_DATE(str,format)\n\nDescription\n-----------\n\nThis is the inverse of the DATE_FORMAT() function. It takes a string str and a\nformat string format. STR_TO_DATE() returns a DATETIME value if the format\nstring contains both date and time parts, or a DATE or TIME value if the\nstring contains only date or time parts.\n\nThe date, time, or datetime values contained in str should be given in the\nformat indicated by format. If str contains an illegal date, time, or datetime\nvalue, STR_TO_DATE() returns NULL. An illegal value also produces a warning.\n\nUnder specific SQL_MODE settings an error may also be generated if the str\nisn\'t a valid date:\n\n* ALLOW_INVALID_DATES\n* NO_ZERO_DATE\n* NO_ZERO_IN_DATE\n\nThe options that can be used by STR_TO_DATE(), as well as its inverse\nDATE_FORMAT() and the FROM_UNIXTIME() function, are:\n\n+---------------------------+------------------------------------------------+\n| Option | Description |\n+---------------------------+------------------------------------------------+\n| %a | Short weekday name in current locale |\n| | (Variable lc_time_names). |\n+---------------------------+------------------------------------------------+\n| %b | Short form month name in current locale. For |\n| | locale en_US this is one of: |\n| | Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov |\n| | or Dec. |\n+---------------------------+------------------------------------------------+\n| %c | Month with 1 or 2 digits. |\n+---------------------------+------------------------------------------------+\n| %D | Day with English suffix \'th\', \'nd\', \'st\' or |\n| | \'rd\'\'. (1st, 2nd, 3rd...). |\n+---------------------------+------------------------------------------------+\n| %d | Day with 2 digits. |\n+---------------------------+------------------------------------------------+\n| %e | Day with 1 or 2 digits. |\n+---------------------------+------------------------------------------------+\n| %f | Microseconds 6 digits. |\n+---------------------------+------------------------------------------------+\n| %H | Hour with 2 digits between 00-23. |\n+---------------------------+------------------------------------------------+\n| %h | Hour with 2 digits between 01-12. |\n+---------------------------+------------------------------------------------+\n| %I | Hour with 2 digits between 01-12. |\n+---------------------------+------------------------------------------------+\n| %i | Minute with 2 digits. |\n+---------------------------+------------------------------------------------+\n| %j | Day of the year (001-366) |\n+---------------------------+------------------------------------------------+\n| %k | Hour with 1 digits between 0-23. |\n+---------------------------+------------------------------------------------+\n| %l | Hour with 1 digits between 1-12. |\n+---------------------------+------------------------------------------------+\n| %M | Full month name in current locale (Variable |\n| | lc_time_names). |\n+---------------------------+------------------------------------------------+\n| %m | Month with 2 digits. |\n+---------------------------+------------------------------------------------+\n| %p | AM/PM according to current locale (Variable |\n| | lc_time_names). |\n+---------------------------+------------------------------------------------+\n| %r | Time in 12 hour format, followed by AM/PM. |\n| | Short for \'%I:%i:%S %p\'. |\n+---------------------------+------------------------------------------------+\n| %S | Seconds with 2 digits. |\n+---------------------------+------------------------------------------------+\n| %s | Seconds with 2 digits. |\n+---------------------------+------------------------------------------------+\n| %T | Time in 24 hour format. Short for \'%H:%i:%S\'. |\n+---------------------------+------------------------------------------------+\n| %U | Week number (00-53), when first day of the |\n| | week is Sunday. |\n+---------------------------+------------------------------------------------+\n| %u | Week number (00-53), when first day of the |\n| | week is Monday. |\n+---------------------------+------------------------------------------------+\n| %V | Week number (01-53), when first day of the |\n| | week is Sunday. Used with %X. |\n+---------------------------+------------------------------------------------+\n| %v | Week number (01-53), when first day of the |\n| | week is Monday. Used with %x. |\n+---------------------------+------------------------------------------------+\n| %W | Full weekday name in current locale (Variable |\n| | lc_time_names). |\n+---------------------------+------------------------------------------------+\n| %w | Day of the week. 0 = Sunday, 6 = Saturday. |\n+---------------------------+------------------------------------------------+\n| %X | Year with 4 digits when first day of the week |\n| | is Sunday. Used with %V. |\n+---------------------------+------------------------------------------------+\n| %x | Year with 4 digits when first day of the week |\n| | is Monday. Used with %v. |\n+---------------------------+------------------------------------------------+\n| %Y | Year with 4 digits. |\n+---------------------------+------------------------------------------------+\n| %y | Year with 2 digits. |\n+---------------------------+------------------------------------------------+\n| %# | For str_to_date(), skip all numbers. |\n+---------------------------+------------------------------------------------+\n| %. | For str_to_date(), skip all punctation |\n| | characters. |\n+---------------------------+------------------------------------------------+\n| %@ | For str_to_date(), skip all alpha characters. |\n+---------------------------+------------------------------------------------+\n| %% | A literal % character. |\n+---------------------------+------------------------------------------------+\n\nExamples\n--------\n\nSELECT STR_TO_DATE(\'Wednesday, June 2, 2014\', \'%W, %M %e, %Y\');\n+---------------------------------------------------------+\n| STR_TO_DATE(\'Wednesday, June 2, 2014\', \'%W, %M %e, %Y\') |\n+---------------------------------------------------------+\n| 2014-06-02 |\n+---------------------------------------------------------+\n\nSELECT STR_TO_DATE(\'Wednesday23423, June 2, 2014\', \'%W, %M %e, %Y\');\n+--------------------------------------------------------------+\n| STR_TO_DATE(\'Wednesday23423, June 2, 2014\', \'%W, %M %e, %Y\') |\n+--------------------------------------------------------------+\n| NULL |\n+--------------------------------------------------------------+\n1 row in set, 1 warning (0.00 sec)\n\nSHOW WARNINGS;\n+---------+------+-------------------------------------------------------------\n---------------------+\n| Level | Code | Message \n |\n+---------+------+-------------------------------------------------------------\n---------------------+\n| Warning | 1411 | Incorrect datetime value: \'Wednesday23423, June 2, 2014\'\nfor function str_to_date |\n+---------+------+-------------------------------------------------------------\n---------------------+\n\nSELECT STR_TO_DATE(\'Wednesday23423, June 2, 2014\', \'%W%#, %M %e, %Y\');\n+----------------------------------------------------------------+\n| STR_TO_DATE(\'Wednesday23423, June 2, 2014\', \'%W%#, %M %e, %Y\') |\n+----------------------------------------------------------------+\n| 2014-06-02 |\n+----------------------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/str_to_date/','','https://mariadb.com/kb/en/str_to_date/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (551,31,'SUBDATE','Syntax\n------\n\nSUBDATE(date,INTERVAL expr unit), SUBDATE(expr,days)\n\nDescription\n-----------\n\nWhen invoked with the INTERVAL form of the second argument, SUBDATE() is a\nsynonym for DATE_SUB(). See Date and Time Units for a complete list of\npermitted units.\n\nThe second form allows the use of an integer value for days. In such cases, it\nis interpreted as the number of days to be subtracted from the date or\ndatetime expression expr.\n\nExamples\n--------\n\nSELECT DATE_SUB(\'2008-01-02\', INTERVAL 31 DAY);\n+-----------------------------------------+\n| DATE_SUB(\'2008-01-02\', INTERVAL 31 DAY) |\n+-----------------------------------------+\n| 2007-12-02 |\n+-----------------------------------------+\n\nSELECT SUBDATE(\'2008-01-02\', INTERVAL 31 DAY);\n+----------------------------------------+\n| SUBDATE(\'2008-01-02\', INTERVAL 31 DAY) |\n+----------------------------------------+\n| 2007-12-02 |\n+----------------------------------------+\n\nSELECT SUBDATE(\'2008-01-02 12:00:00\', 31);\n+------------------------------------+\n| SUBDATE(\'2008-01-02 12:00:00\', 31) |\n+------------------------------------+\n| 2007-12-02 12:00:00 |\n+------------------------------------+\n\nCREATE TABLE t1 (d DATETIME);\nINSERT INTO t1 VALUES\n (\"2007-01-30 21:31:07\"),\n (\"1983-10-15 06:42:51\"),\n (\"2011-04-21 12:34:56\"),\n (\"2011-10-30 06:31:41\"),\n (\"2011-01-30 14:03:25\"),\n (\"2004-10-07 11:19:34\");\n\nSELECT d, SUBDATE(d, 10) from t1;\n+---------------------+---------------------+\n| d | SUBDATE(d, 10) |\n+---------------------+---------------------+\n| 2007-01-30 21:31:07 | 2007-01-20 21:31:07 |\n| 1983-10-15 06:42:51 | 1983-10-05 06:42:51 |\n| 2011-04-21 12:34:56 | 2011-04-11 12:34:56 |\n| 2011-10-30 06:31:41 | 2011-10-20 06:31:41 |\n| 2011-01-30 14:03:25 | 2011-01-20 14:03:25 |\n| 2004-10-07 11:19:34 | 2004-09-27 11:19:34 |\n+---------------------+---------------------+\n\nSELECT d, SUBDATE(d, INTERVAL 10 MINUTE) from t1;\n+---------------------+--------------------------------+\n| d | SUBDATE(d, INTERVAL 10 MINUTE) |\n+---------------------+--------------------------------+\n| 2007-01-30 21:31:07 | 2007-01-30 21:21:07 |\n| 1983-10-15 06:42:51 | 1983-10-15 06:32:51 |\n| 2011-04-21 12:34:56 | 2011-04-21 12:24:56 |\n| 2011-10-30 06:31:41 | 2011-10-30 06:21:41 |\n| 2011-01-30 14:03:25 | 2011-01-30 13:53:25 |\n| 2004-10-07 11:19:34 | 2004-10-07 11:09:34 |\n+---------------------+--------------------------------+\n\nURL: https://mariadb.com/kb/en/subdate/','','https://mariadb.com/kb/en/subdate/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (552,31,'SUBTIME','Syntax\n------\n\nSUBTIME(expr1,expr2)\n\nDescription\n-----------\n\nSUBTIME() returns expr1 - expr2 expressed as a value in the same format as\nexpr1. expr1 is a time or datetime expression, and expr2 is a time expression.\n\nExamples\n--------\n\nSELECT SUBTIME(\'2007-12-31 23:59:59.999999\',\'1 1:1:1.000002\');\n+--------------------------------------------------------+\n| SUBTIME(\'2007-12-31 23:59:59.999999\',\'1 1:1:1.000002\') |\n+--------------------------------------------------------+\n| 2007-12-30 22:58:58.999997 |\n+--------------------------------------------------------+\n\nSELECT SUBTIME(\'01:00:00.999999\', \'02:00:00.999998\');\n+-----------------------------------------------+\n| SUBTIME(\'01:00:00.999999\', \'02:00:00.999998\') |\n+-----------------------------------------------+\n| -00:59:59.999999 |\n+-----------------------------------------------+\n\nURL: https://mariadb.com/kb/en/subtime/','','https://mariadb.com/kb/en/subtime/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (553,31,'SYSDATE','Syntax\n------\n\nSYSDATE([precision])\n\nDescription\n-----------\n\nReturns the current date and time as a value in \'YYYY-MM-DD HH:MM:SS\' or\nYYYYMMDDHHMMSS.uuuuuu format, depending on whether the function is used in a\nstring or numeric context.\n\nThe optional precision determines the microsecond precision. See Microseconds\nin MariaDB.\n\nSYSDATE() returns the time at which it executes. This differs from the\nbehavior for NOW(), which returns a constant time that indicates the time at\nwhich the statement began to execute. (Within a stored routine or trigger,\nNOW() returns the time at which the routine or triggering statement began to\nexecute.)\n\nIn addition, changing the timestamp system variable with a SET timestamp\nstatement affects the value returned by NOW() but not by SYSDATE(). This means\nthat timestamp settings in the binary log have no effect on invocations of\nSYSDATE().\n\nBecause SYSDATE() can return different values even within the same statement,\nand is not affected by SET TIMESTAMP, it is non-deterministic and therefore\nunsafe for replication if statement-based binary logging is used. If that is a\nproblem, you can use row-based logging, or start the server with the mysqld\noption --sysdate-is-now to cause SYSDATE() to be an alias for NOW(). The\nnon-deterministic nature of SYSDATE() also means that indexes cannot be used\nfor evaluating expressions that refer to it, and that statements using the\nSYSDATE() function are unsafe for statement-based replication.\n\nExamples\n--------\n\nDifference between NOW() and SYSDATE():\n\nSELECT NOW(), SLEEP(2), NOW();\n+---------------------+----------+---------------------+\n| NOW() | SLEEP(2) | NOW() |\n+---------------------+----------+---------------------+\n| 2010-03-27 13:23:40 | 0 | 2010-03-27 13:23:40 |\n+---------------------+----------+---------------------+\n\nSELECT SYSDATE(), SLEEP(2), SYSDATE();\n+---------------------+----------+---------------------+\n| SYSDATE() | SLEEP(2) | SYSDATE() |\n+---------------------+----------+---------------------+\n| 2010-03-27 13:23:52 | 0 | 2010-03-27 13:23:54 |\n+---------------------+----------+---------------------+\n\nWith precision:\n\nSELECT SYSDATE(4);\n+--------------------------+\n| SYSDATE(4) |\n+--------------------------+\n| 2018-07-10 10:17:13.1689 |\n+--------------------------+\n\nURL: https://mariadb.com/kb/en/sysdate/','','https://mariadb.com/kb/en/sysdate/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (554,31,'TIME Function','Syntax\n------\n\nTIME(expr)\n\nDescription\n-----------\n\nExtracts the time part of the time or datetime expression expr and returns it\nas a string.\n\nExamples\n--------\n\nSELECT TIME(\'2003-12-31 01:02:03\');\n+-----------------------------+\n| TIME(\'2003-12-31 01:02:03\') |\n+-----------------------------+\n| 01:02:03 |\n+-----------------------------+\n\nSELECT TIME(\'2003-12-31 01:02:03.000123\');\n+------------------------------------+\n| TIME(\'2003-12-31 01:02:03.000123\') |\n+------------------------------------+\n| 01:02:03.000123 |\n+------------------------------------+\n\nURL: https://mariadb.com/kb/en/time-function/','','https://mariadb.com/kb/en/time-function/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (555,31,'TIMEDIFF','Syntax\n------\n\nTIMEDIFF(expr1,expr2)\n\nDescription\n-----------\n\nTIMEDIFF() returns expr1 - expr2 expressed as a time value. expr1 and expr2\nare time or date-and-time expressions, but both must be of the same type.\n\nExamples\n--------\n\nSELECT TIMEDIFF(\'2000:01:01 00:00:00\', \'2000:01:01 00:00:00.000001\');\n+---------------------------------------------------------------+\n| TIMEDIFF(\'2000:01:01 00:00:00\', \'2000:01:01 00:00:00.000001\') |\n+---------------------------------------------------------------+\n| -00:00:00.000001 |\n+---------------------------------------------------------------+\n\nSELECT TIMEDIFF(\'2008-12-31 23:59:59.000001\', \'2008-12-30 01:01:01.000002\');\n+----------------------------------------------------------------------+\n| TIMEDIFF(\'2008-12-31 23:59:59.000001\', \'2008-12-30 01:01:01.000002\') |\n+----------------------------------------------------------------------+\n| 46:58:57.999999 |\n+----------------------------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/timediff/','','https://mariadb.com/kb/en/timediff/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (556,31,'TIMESTAMP FUNCTION','Syntax\n------\n\nTIMESTAMP(expr), TIMESTAMP(expr1,expr2)\n\nDescription\n-----------\n\nWith a single argument, this function returns the date or datetime expression\nexpr as a datetime value. With two arguments, it adds the time expression\nexpr2 to the date or datetime expression expr1 and returns the result as a\ndatetime value.\n\nExamples\n--------\n\nSELECT TIMESTAMP(\'2003-12-31\');\n+-------------------------+\n| TIMESTAMP(\'2003-12-31\') |\n+-------------------------+\n| 2003-12-31 00:00:00 |\n+-------------------------+\n\nSELECT TIMESTAMP(\'2003-12-31 12:00:00\',\'6:30:00\');\n+--------------------------------------------+\n| TIMESTAMP(\'2003-12-31 12:00:00\',\'6:30:00\') |\n+--------------------------------------------+\n| 2003-12-31 18:30:00 |\n+--------------------------------------------+\n\nURL: https://mariadb.com/kb/en/timestamp-function/','','https://mariadb.com/kb/en/timestamp-function/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (557,31,'TIMESTAMPADD','Syntax\n------\n\nTIMESTAMPADD(unit,interval,datetime_expr)\n\nDescription\n-----------\n\nAdds the integer expression interval to the date or datetime expression\ndatetime_expr. The unit for interval is given by the unit argument, which\nshould be one of the following values: MICROSECOND, SECOND, MINUTE, HOUR, DAY,\nWEEK, MONTH, QUARTER, or YEAR.\n\nThe unit value may be specified using one of keywords as shown, or with a\nprefix of SQL_TSI_. For example, DAY and SQL_TSI_DAY both are legal.\n\nBefore MariaDB 5.5, FRAC_SECOND was permitted as a synonym for MICROSECOND.\n\nExamples\n--------\n\nSELECT TIMESTAMPADD(MINUTE,1,\'2003-01-02\');\n+-------------------------------------+\n| TIMESTAMPADD(MINUTE,1,\'2003-01-02\') |\n+-------------------------------------+\n| 2003-01-02 00:01:00 |\n+-------------------------------------+\n\nSELECT TIMESTAMPADD(WEEK,1,\'2003-01-02\');\n+-----------------------------------+\n| TIMESTAMPADD(WEEK,1,\'2003-01-02\') |\n+-----------------------------------+\n| 2003-01-09 |\n+-----------------------------------+\n\nURL: https://mariadb.com/kb/en/timestampadd/','','https://mariadb.com/kb/en/timestampadd/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (558,31,'TIMESTAMPDIFF','Syntax\n------\n\nTIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)\n\nDescription\n-----------\n\nReturns datetime_expr2 - datetime_expr1, where datetime_expr1 and\ndatetime_expr2 are date or datetime expressions. One expression may be a date\nand the other a datetime; a date value is treated as a datetime having the\ntime part \'00:00:00\' where necessary. The unit for the result (an integer) is\ngiven by the unit argument. The legal values for unit are the same as those\nlisted in the description of the TIMESTAMPADD() function, i.e MICROSECOND,\nSECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, or YEAR.\n\nTIMESTAMPDIFF can also be used to calculate age.\n\nExamples\n--------\n\nSELECT TIMESTAMPDIFF(MONTH,\'2003-02-01\',\'2003-05-01\');\n+------------------------------------------------+\n| TIMESTAMPDIFF(MONTH,\'2003-02-01\',\'2003-05-01\') |\n+------------------------------------------------+\n| 3 |\n+------------------------------------------------+\n\nSELECT TIMESTAMPDIFF(YEAR,\'2002-05-01\',\'2001-01-01\');\n+-----------------------------------------------+\n| TIMESTAMPDIFF(YEAR,\'2002-05-01\',\'2001-01-01\') |\n+-----------------------------------------------+\n| -1 |\n+-----------------------------------------------+\n\nSELECT TIMESTAMPDIFF(MINUTE,\'2003-02-01\',\'2003-05-01 12:05:55\');\n+----------------------------------------------------------+\n| TIMESTAMPDIFF(MINUTE,\'2003-02-01\',\'2003-05-01 12:05:55\') |\n+----------------------------------------------------------+\n| 128885 |\n+----------------------------------------------------------+\n\nCalculating age:\n\nSELECT CURDATE();\n+------------+\n| CURDATE() |\n+------------+\n| 2019-05-27 |\n+------------+\n\nSELECT TIMESTAMPDIFF(YEAR, \'1971-06-06\', CURDATE()) AS age;\n+------+\n| age |\n+------+\n| 47 |\n+------+\n\nSELECT TIMESTAMPDIFF(YEAR, \'1971-05-06\', CURDATE()) AS age;\n+------+\n| age |\n+------+\n| 48 |\n+------+\n\nAge as of 2014-08-02:\n\nSELECT name, date_of_birth, TIMESTAMPDIFF(YEAR,date_of_birth,\'2014-08-02\') AS\nage \n FROM student_details;\n+---------+---------------+------+\n| name | date_of_birth | age |\n+---------+---------------+------+\n| Chun | 1993-12-31 | 20 |\n| Esben | 1946-01-01 | 68 |\n| Kaolin | 1996-07-16 | 18 |\n| Tatiana | 1988-04-13 | 26 |\n+---------+---------------+------+\n\nURL: https://mariadb.com/kb/en/timestampdiff/','','https://mariadb.com/kb/en/timestampdiff/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (559,31,'TIME_FORMAT','Syntax\n------\n\nTIME_FORMAT(time,format)\n\nDescription\n-----------\n\nThis is used like the DATE_FORMAT() function, but the format string may\ncontain format specifiers only for hours, minutes, and seconds. Other\nspecifiers produce a NULL value or 0.\n\nExamples\n--------\n\nSELECT TIME_FORMAT(\'100:00:00\', \'%H %k %h %I %l\');\n+--------------------------------------------+\n| TIME_FORMAT(\'100:00:00\', \'%H %k %h %I %l\') |\n+--------------------------------------------+\n| 100 100 04 04 4 |\n+--------------------------------------------+\n\nURL: https://mariadb.com/kb/en/time_format/','','https://mariadb.com/kb/en/time_format/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (560,31,'TIME_TO_SEC','Syntax\n------\n\nTIME_TO_SEC(time)\n\nDescription\n-----------\n\nReturns the time argument, converted to seconds.\n\nThe value returned by TIME_TO_SEC is of type DOUBLE. Before MariaDB 5.3 (and\nMySQL 5.6), the type was INT. The returned value preserves microseconds of the\nargument. See also Microseconds in MariaDB.\n\nExamples\n--------\n\nSELECT TIME_TO_SEC(\'22:23:00\');\n+-------------------------+\n| TIME_TO_SEC(\'22:23:00\') |\n+-------------------------+\n| 80580 |\n+-------------------------+\n\nSELECT TIME_TO_SEC(\'00:39:38\');\n+-------------------------+\n| TIME_TO_SEC(\'00:39:38\') |\n+-------------------------+\n| 2378 |\n+-------------------------+\n\nSELECT TIME_TO_SEC(\'09:12:55.2355\');\n+------------------------------+\n| TIME_TO_SEC(\'09:12:55.2355\') |\n+------------------------------+\n| 33175.2355 |\n+------------------------------+\n1 row in set (0.000 sec)\n\nURL: https://mariadb.com/kb/en/time_to_sec/','','https://mariadb.com/kb/en/time_to_sec/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (561,31,'TO_DAYS','Syntax\n------\n\nTO_DAYS(date)\n\nDescription\n-----------\n\nGiven a date date, returns the number of days since the start of the current\ncalendar (0000-00-00).\n\nThe function is not designed for use with dates before the advent of the\nGregorian calendar in October 1582. Results will not be reliable since it\ndoesn\'t account for the lost days when the calendar changed from the Julian\ncalendar.\n\nThis is the converse of the FROM_DAYS() function.\n\nExamples\n--------\n\nSELECT TO_DAYS(\'2007-10-07\');\n+-----------------------+\n| TO_DAYS(\'2007-10-07\') |\n+-----------------------+\n| 733321 |\n+-----------------------+\n\nSELECT TO_DAYS(\'0000-01-01\');\n+-----------------------+\n| TO_DAYS(\'0000-01-01\') |\n+-----------------------+\n| 1 |\n+-----------------------+\n\nSELECT TO_DAYS(950501);\n+-----------------+\n| TO_DAYS(950501) |\n+-----------------+\n| 728779 |\n+-----------------+\n\nURL: https://mariadb.com/kb/en/to_days/','','https://mariadb.com/kb/en/to_days/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (562,31,'TO_SECONDS','Syntax\n------\n\nTO_SECONDS(expr)\n\nDescription\n-----------\n\nReturns the number of seconds from year 0 till expr, or NULL if expr is not a\nvalid date or datetime.\n\nExamples\n--------\n\nSELECT TO_SECONDS(\'2013-06-13\');\n+--------------------------+\n| TO_SECONDS(\'2013-06-13\') |\n+--------------------------+\n| 63538300800 |\n+--------------------------+\n\nSELECT TO_SECONDS(\'2013-06-13 21:45:13\');\n+-----------------------------------+\n| TO_SECONDS(\'2013-06-13 21:45:13\') |\n+-----------------------------------+\n| 63538379113 |\n+-----------------------------------+\n\nSELECT TO_SECONDS(NOW());\n+-------------------+\n| TO_SECONDS(NOW()) |\n+-------------------+\n| 63543530875 |\n+-------------------+\n\nSELECT TO_SECONDS(20130513);\n+----------------------+\n| TO_SECONDS(20130513) |\n+----------------------+\n| 63535622400 |\n+----------------------+\n1 row in set (0.00 sec)\n\nSELECT TO_SECONDS(130513);\n+--------------------+\n| TO_SECONDS(130513) |\n+--------------------+\n| 63535622400 |\n+--------------------+\n\nURL: https://mariadb.com/kb/en/to_seconds/','','https://mariadb.com/kb/en/to_seconds/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (563,31,'UNIX_TIMESTAMP','Syntax\n------\n\nUNIX_TIMESTAMP()\nUNIX_TIMESTAMP(date)\n\nDescription\n-----------\n\nIf called with no argument, returns a Unix timestamp (seconds since\n\'1970-01-01 00:00:00\' UTC) as an unsigned integer. If UNIX_TIMESTAMP() is\ncalled with a date argument, it returns the value of the argument as seconds\nsince \'1970-01-01 00:00:00\' UTC. date may be a DATE string, a DATETIME string,\na TIMESTAMP, or a number in the format YYMMDD or YYYYMMDD. The server\ninterprets date as a value in the current time zone and converts it to an\ninternal value in UTC. Clients can set their time zone as described in time\nzones.\n\nThe inverse function of UNIX_TIMESTAMP() is FROM_UNIXTIME()\n\nUNIX_TIMESTAMP() supports microseconds.\n\nTimestamps in MariaDB have a maximum value of 2147483647, equivalent to\n2038-01-19 05:14:07. This is due to the underlying 32-bit limitation. Using\nthe function on a date beyond this will result in NULL being returned. Use\nDATETIME as a storage type if you require dates beyond this.\n\nError Handling\n--------------\n\nReturns NULL for wrong arguments to UNIX_TIMESTAMP(). In MySQL and MariaDB\nbefore 5.3 wrong arguments to UNIX_TIMESTAMP() returned 0.\n\nCompatibility\n-------------\n\nAs you can see in the examples above, UNIX_TIMESTAMP(constant-date-string)\nreturns a timestamp with 6 decimals while MariaDB 5.2 and before returns it\nwithout decimals. This can cause a problem if you are using UNIX_TIMESTAMP()\nas a partitioning function. You can fix this by using\nFLOOR(UNIX_TIMESTAMP(..)) or changing the date string to a date number, like\n20080101000000.\n\nExamples\n--------\n\nSELECT UNIX_TIMESTAMP();\n+------------------+\n| UNIX_TIMESTAMP() |\n+------------------+\n| 1269711082 |\n+------------------+\n\nSELECT UNIX_TIMESTAMP(\'2007-11-30 10:30:19\');\n+---------------------------------------+\n| UNIX_TIMESTAMP(\'2007-11-30 10:30:19\') |\n+---------------------------------------+\n| 1196436619.000000 |\n+---------------------------------------+\n\nSELECT UNIX_TIMESTAMP(\"2007-11-30 10:30:19.123456\");\n+----------------------------------------------+\n| unix_timestamp(\"2007-11-30 10:30:19.123456\") |\n+----------------------------------------------+\n| 1196411419.123456 |\n+----------------------------------------------+\n\nSELECT FROM_UNIXTIME(UNIX_TIMESTAMP(\'2007-11-30 10:30:19\'));\n+------------------------------------------------------+\n| FROM_UNIXTIME(UNIX_TIMESTAMP(\'2007-11-30 10:30:19\')) |\n+------------------------------------------------------+\n| 2007-11-30 10:30:19.000000 |\n+------------------------------------------------------+\n\nSELECT FROM_UNIXTIME(FLOOR(UNIX_TIMESTAMP(\'2007-11-30 10:30:19\')));\n+-------------------------------------------------------------+\n| FROM_UNIXTIME(FLOOR(UNIX_TIMESTAMP(\'2007-11-30 10:30:19\'))) |\n+-------------------------------------------------------------+\n| 2007-11-30 10:30:19 |\n+-------------------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/unix_timestamp/','','https://mariadb.com/kb/en/unix_timestamp/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (564,31,'UTC_DATE','Syntax\n------\n\nUTC_DATE, UTC_DATE()\n\nDescription\n-----------\n\nReturns the current UTC date as a value in \'YYYY-MM-DD\' or YYYYMMDD format,\ndepending on whether the function is used in a string or numeric context.\n\nExamples\n--------\n\nSELECT UTC_DATE(), UTC_DATE() + 0;\n+------------+----------------+\n| UTC_DATE() | UTC_DATE() + 0 |\n+------------+----------------+\n| 2010-03-27 | 20100327 |\n+------------+----------------+\n\nURL: https://mariadb.com/kb/en/utc_date/','','https://mariadb.com/kb/en/utc_date/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (565,31,'UTC_TIME','Syntax\n------\n\nUTC_TIME\nUTC_TIME([precision])\n\nDescription\n-----------\n\nReturns the current UTC time as a value in \'HH:MM:SS\' or HHMMSS.uuuuuu format,\ndepending on whether the function is used in a string or numeric context.\n\nThe optional precision determines the microsecond precision. See Microseconds\nin MariaDB.\n\nExamples\n--------\n\nSELECT UTC_TIME(), UTC_TIME() + 0;\n+------------+----------------+\n| UTC_TIME() | UTC_TIME() + 0 |\n+------------+----------------+\n| 17:32:34 | 173234.000000 |\n+------------+----------------+\n\nWith precision:\n\nSELECT UTC_TIME(5);\n+----------------+\n| UTC_TIME(5) |\n+----------------+\n| 07:52:50.78369 |\n+----------------+\n\nURL: https://mariadb.com/kb/en/utc_time/','','https://mariadb.com/kb/en/utc_time/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (566,31,'UTC_TIMESTAMP','Syntax\n------\n\nUTC_TIMESTAMP\nUTC_TIMESTAMP([precision])\n\nDescription\n-----------\n\nReturns the current UTC date and time as a value in \'YYYY-MM-DD HH:MM:SS\' or\nYYYYMMDDHHMMSS.uuuuuu format, depending on whether the function is used in a\nstring or numeric context.\n\nThe optional precision determines the microsecond precision. See Microseconds\nin MariaDB.\n\nExamples\n--------\n\nSELECT UTC_TIMESTAMP(), UTC_TIMESTAMP() + 0;\n+---------------------+-----------------------+\n| UTC_TIMESTAMP() | UTC_TIMESTAMP() + 0 |\n+---------------------+-----------------------+\n| 2010-03-27 17:33:16 | 20100327173316.000000 |\n+---------------------+-----------------------+\n\nWith precision:\n\nSELECT UTC_TIMESTAMP(4);\n+--------------------------+\n| UTC_TIMESTAMP(4) |\n+--------------------------+\n| 2018-07-10 07:51:09.1019 |\n+--------------------------+\n\nURL: https://mariadb.com/kb/en/utc_timestamp/','','https://mariadb.com/kb/en/utc_timestamp/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (567,31,'WEEK','Syntax\n------\n\nWEEK(date[,mode])\n\nDescription\n-----------\n\nThis function returns the week number for date. The two-argument form of\nWEEK() allows you to specify whether the week starts on Sunday or Monday and\nwhether the return value should be in the range from 0 to 53 or from 1 to 53.\nIf the mode argument is omitted, the value of the default_week_format system\nvariable is used.\n\nModes\n-----\n\n+-------+---------------------+--------+------------------------------------+\n| Mode | 1st day of week | Range | Week 1 is the 1st week with |\n+-------+---------------------+--------+------------------------------------+\n| 0 | Sunday | 0-53 | a Sunday in this year |\n+-------+---------------------+--------+------------------------------------+\n| 1 | Monday | 0-53 | more than 3 days this year |\n+-------+---------------------+--------+------------------------------------+\n| 2 | Sunday | 1-53 | a Sunday in this year |\n+-------+---------------------+--------+------------------------------------+\n| 3 | Monday | 1-53 | more than 3 days this year |\n+-------+---------------------+--------+------------------------------------+\n| 4 | Sunday | 0-53 | more than 3 days this year |\n+-------+---------------------+--------+------------------------------------+\n| 5 | Monday | 0-53 | a Monday in this year |\n+-------+---------------------+--------+------------------------------------+\n| 6 | Sunday | 1-53 | more than 3 days this year |\n+-------+---------------------+--------+------------------------------------+\n| 7 | Monday | 1-53 | a Monday in this year |\n+-------+---------------------+--------+------------------------------------+\n\nWith the mode value of 3, which means \'more than 3 days this year\', weeks are\nnumbered according to ISO 8601:1988.\n\nExamples\n--------\n\nSELECT WEEK(\'2008-02-20\');\n+--------------------+\n| WEEK(\'2008-02-20\') |\n+--------------------+\n| 7 |\n+--------------------+\n\nSELECT WEEK(\'2008-02-20\',0);\n+----------------------+\n| WEEK(\'2008-02-20\',0) |\n+----------------------+\n| 7 |\n+----------------------+\n\nSELECT WEEK(\'2008-02-20\',1);\n+----------------------+\n| WEEK(\'2008-02-20\',1) |\n+----------------------+\n| 8 |\n+----------------------+\n\nSELECT WEEK(\'2008-12-31\',0);\n+----------------------+\n| WEEK(\'2008-12-31\',0) |\n+----------------------+\n| 52 |\n+----------------------+\n\nSELECT WEEK(\'2008-12-31\',1);\n+----------------------+\n| WEEK(\'2008-12-31\',1) |\n+----------------------+\n| 53 |\n+----------------------+\n\nSELECT WEEK(\'2019-12-30\',3);\n+----------------------+\n| WEEK(\'2019-12-30\',3) |\n+----------------------+\n| 1 |\n+----------------------+\n\nCREATE TABLE t1 (d DATETIME);\nINSERT INTO t1 VALUES\n (\"2007-01-30 21:31:07\"),\n (\"1983-10-15 06:42:51\"),\n (\"2011-04-21 12:34:56\"),\n (\"2011-10-30 06:31:41\"),\n (\"2011-01-30 14:03:25\"),\n (\"2004-10-07 11:19:34\");\n\nSELECT d, WEEK(d,0), WEEK(d,1) from t1;\n+---------------------+-----------+-----------+\n| d | WEEK(d,0) | WEEK(d,1) |\n+---------------------+-----------+-----------+\n| 2007-01-30 21:31:07 | 4 | 5 |\n| 1983-10-15 06:42:51 | 41 | 41 |\n| 2011-04-21 12:34:56 | 16 | 16 |\n| 2011-10-30 06:31:41 | 44 | 43 |\n| 2011-01-30 14:03:25 | 5 | 4 |\n| 2004-10-07 11:19:34 | 40 | 41 |\n+---------------------+-----------+-----------+\n\nURL: https://mariadb.com/kb/en/week/','','https://mariadb.com/kb/en/week/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (568,31,'WEEKDAY','Syntax\n------\n\nWEEKDAY(date)\n\nDescription\n-----------\n\nReturns the weekday index for date (0 = Monday, 1 = Tuesday, ... 6 = Sunday).\n\nThis contrasts with DAYOFWEEK() which follows the ODBC standard (1 = Sunday, 2\n= Monday, ..., 7 = Saturday).\n\nExamples\n--------\n\nSELECT WEEKDAY(\'2008-02-03 22:23:00\');\n+--------------------------------+\n| WEEKDAY(\'2008-02-03 22:23:00\') |\n+--------------------------------+\n| 6 |\n+--------------------------------+\n\nSELECT WEEKDAY(\'2007-11-06\');\n+-----------------------+\n| WEEKDAY(\'2007-11-06\') |\n+-----------------------+\n| 1 |\n+-----------------------+\n\nCREATE TABLE t1 (d DATETIME);\nINSERT INTO t1 VALUES\n (\"2007-01-30 21:31:07\"),\n (\"1983-10-15 06:42:51\"),\n (\"2011-04-21 12:34:56\"),\n (\"2011-10-30 06:31:41\"),\n (\"2011-01-30 14:03:25\"),\n (\"2004-10-07 11:19:34\");\n\nSELECT d FROM t1 where WEEKDAY(d) = 6;\n+---------------------+\n| d |\n+---------------------+\n| 2011-10-30 06:31:41 |\n| 2011-01-30 14:03:25 |\n+---------------------+\n\nURL: https://mariadb.com/kb/en/weekday/','','https://mariadb.com/kb/en/weekday/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (569,31,'WEEKOFYEAR','Syntax\n------\n\nWEEKOFYEAR(date)\n\nDescription\n-----------\n\nReturns the calendar week of the date as a number in the range from 1 to 53.\nWEEKOFYEAR() is a compatibility function that is equivalent to WEEK(date,3).\n\nExamples\n--------\n\nSELECT WEEKOFYEAR(\'2008-02-20\');\n+--------------------------+\n| WEEKOFYEAR(\'2008-02-20\') |\n+--------------------------+\n| 8 |\n+--------------------------+\n\nCREATE TABLE t1 (d DATETIME);\nINSERT INTO t1 VALUES\n (\"2007-01-30 21:31:07\"),\n (\"1983-10-15 06:42:51\"),\n (\"2011-04-21 12:34:56\"),\n (\"2011-10-30 06:31:41\"),\n (\"2011-01-30 14:03:25\"),\n (\"2004-10-07 11:19:34\");\n\nselect * from t1;\n+---------------------+\n| d |\n+---------------------+\n| 2007-01-30 21:31:07 |\n| 1983-10-15 06:42:51 |\n| 2011-04-21 12:34:56 |\n| 2011-10-30 06:31:41 |\n| 2011-01-30 14:03:25 |\n| 2004-10-07 11:19:34 |\n+---------------------+\n\nSELECT d, WEEKOFYEAR(d), WEEK(d,3) from t1;\n+---------------------+---------------+-----------+\n| d | WEEKOFYEAR(d) | WEEK(d,3) |\n+---------------------+---------------+-----------+\n| 2007-01-30 21:31:07 | 5 | 5 |\n| 1983-10-15 06:42:51 | 41 | 41 |\n| 2011-04-21 12:34:56 | 16 | 16 |\n| 2011-10-30 06:31:41 | 43 | 43 |\n| 2011-01-30 14:03:25 | 4 | 4 |\n| 2004-10-07 11:19:34 | 41 | 41 |\n+---------------------+---------------+-----------+\n\nURL: https://mariadb.com/kb/en/weekofyear/','','https://mariadb.com/kb/en/weekofyear/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (570,31,'YEAR','Syntax\n------\n\nYEAR(date)\n\nDescription\n-----------\n\nReturns the year for the given date, in the range 1000 to 9999, or 0 for the\n\"zero\" date.\n\nExamples\n--------\n\nCREATE TABLE t1 (d DATETIME);\nINSERT INTO t1 VALUES\n (\"2007-01-30 21:31:07\"),\n (\"1983-10-15 06:42:51\"),\n (\"2011-04-21 12:34:56\"),\n (\"2011-10-30 06:31:41\"),\n (\"2011-01-30 14:03:25\"),\n (\"2004-10-07 11:19:34\");\n\nSELECT * FROM t1;\n+---------------------+\n| d |\n+---------------------+\n| 2007-01-30 21:31:07 |\n| 1983-10-15 06:42:51 |\n| 2011-04-21 12:34:56 |\n| 2011-10-30 06:31:41 |\n| 2011-01-30 14:03:25 |\n| 2004-10-07 11:19:34 |\n+---------------------+\n\nSELECT * FROM t1 WHERE YEAR(d) = 2011;\n+---------------------+\n| d |\n+---------------------+\n| 2011-04-21 12:34:56 |\n| 2011-10-30 06:31:41 |\n| 2011-01-30 14:03:25 |\n+---------------------+\n\nSELECT YEAR(\'1987-01-01\');\n+--------------------+\n| YEAR(\'1987-01-01\') |\n+--------------------+\n| 1987 |\n+--------------------+\n\nURL: https://mariadb.com/kb/en/year/','','https://mariadb.com/kb/en/year/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (571,31,'YEARWEEK','Syntax\n------\n\nYEARWEEK(date), YEARWEEK(date,mode)\n\nDescription\n-----------\n\nReturns year and week for a date. The mode argument works exactly like the\nmode argument to WEEK(). The year in the result may be different from the year\nin the date argument for the first and the last week of the year.\n\nExamples\n--------\n\nSELECT YEARWEEK(\'1987-01-01\');\n+------------------------+\n| YEARWEEK(\'1987-01-01\') |\n+------------------------+\n| 198652 |\n+------------------------+\n\nCREATE TABLE t1 (d DATETIME);\nINSERT INTO t1 VALUES\n (\"2007-01-30 21:31:07\"),\n (\"1983-10-15 06:42:51\"),\n (\"2011-04-21 12:34:56\"),\n (\"2011-10-30 06:31:41\"),\n (\"2011-01-30 14:03:25\"),\n (\"2004-10-07 11:19:34\");\n\nSELECT * FROM t1;\n+---------------------+\n| d |\n+---------------------+\n| 2007-01-30 21:31:07 |\n| 1983-10-15 06:42:51 |\n| 2011-04-21 12:34:56 |\n| 2011-10-30 06:31:41 |\n| 2011-01-30 14:03:25 |\n| 2004-10-07 11:19:34 |\n+---------------------+\n6 rows in set (0.02 sec)\n\nSELECT YEARWEEK(d) FROM t1 WHERE YEAR(d) = 2011;\n+-------------+\n| YEARWEEK(d) |\n+-------------+\n| 201116 |\n| 201144 |\n| 201105 |\n+-------------+\n3 rows in set (0.03 sec)\n\nURL: https://mariadb.com/kb/en/yearweek/','','https://mariadb.com/kb/en/yearweek/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (572,32,'Well-Known Binary (WKB) Format','WKB stands for Well-Known Binary, a format for representing geographical and\ngeometrical data.\n\nWKB uses 1-byte unsigned integers, 4-byte unsigned integers, and 8-byte\ndouble-precision numbers.\n\n* The first byte indicates the byte order. 00 for big endian, or 01 for little\nendian.\n* The next 4 bytes indicate the geometry type. Values from 1 to 7 indicate\nwhether the type is Point, LineString, Polygon, MultiPoint, MultiLineString,\nMultiPolygon, or GeometryCollection respectively. \n* The 8-byte floats represent the co-ordinates.\n\nTake the following example, a sequence of 21 bytes each represented by two hex\ndigits:\n\n000000000140000000000000004010000000000000\n\n* It\'s big endian\n000000000140000000000000004010000000000000\n\n* It\'s a POINT\n000000000140000000000000004010000000000000\n\n* The X co-ordinate is 2.0\n000000000140000000000000004010000000000000\n\n* The Y-co-ordinate is 4.0\n000000000140000000000000004010000000000000\n\nURL: https://mariadb.com/kb/en/well-known-binary-wkb-format/','','https://mariadb.com/kb/en/well-known-binary-wkb-format/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (573,32,'AsBinary','A synonym for ST_AsBinary().\n\nURL: https://mariadb.com/kb/en/wkb-asbinary/','','https://mariadb.com/kb/en/wkb-asbinary/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (574,32,'AsWKB','A synonym for ST_AsBinary().\n\nURL: https://mariadb.com/kb/en/aswkb/','','https://mariadb.com/kb/en/aswkb/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (575,32,'MLineFromWKB','Syntax\n------\n\nMLineFromWKB(wkb[,srid])\nMultiLineStringFromWKB(wkb[,srid])\n\nDescription\n-----------\n\nConstructs a MULTILINESTRING value using its WKB representation and SRID.\n\nMLineFromWKB() and MultiLineStringFromWKB() are synonyms.\n\nExamples\n--------\n\nSET @g = ST_AsBinary(MLineFromText(\'MULTILINESTRING((10 48,10 21,10 0),(16\n0,16 23,16 48))\'));\n\nSELECT ST_AsText(MLineFromWKB(@g));\n+--------------------------------------------------------+\n| ST_AsText(MLineFromWKB(@g)) |\n+--------------------------------------------------------+\n| MULTILINESTRING((10 48,10 21,10 0),(16 0,16 23,16 48)) |\n+--------------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/mlinefromwkb/','','https://mariadb.com/kb/en/mlinefromwkb/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (576,32,'MPointFromWKB','Syntax\n------\n\nMPointFromWKB(wkb[,srid])\nMultiPointFromWKB(wkb[,srid])\n\nDescription\n-----------\n\nConstructs a MULTIPOINT value using its WKB representation and SRID.\n\nMPointFromWKB() and MultiPointFromWKB() are synonyms.\n\nExamples\n--------\n\nSET @g = ST_AsBinary(MPointFromText(\'MultiPoint( 1 1, 2 2, 5 3, 7 2, 9 3, 8 4,\n6 6, 6 9, 4 9, 1 5 )\'));\n\nSELECT ST_AsText(MPointFromWKB(@g));\n+-----------------------------------------------------+\n| ST_AsText(MPointFromWKB(@g)) |\n+-----------------------------------------------------+\n| MULTIPOINT(1 1,2 2,5 3,7 2,9 3,8 4,6 6,6 9,4 9,1 5) |\n+-----------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/mpointfromwkb/','','https://mariadb.com/kb/en/mpointfromwkb/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (577,32,'MPolyFromWKB','Syntax\n------\n\nMPolyFromWKB(wkb[,srid])\nMultiPolygonFromWKB(wkb[,srid])\n\nDescription\n-----------\n\nConstructs a MULTIPOLYGON value using its WKB representation and SRID.\n\nMPolyFromWKB() and MultiPolygonFromWKB() are synonyms.\n\nExamples\n--------\n\nSET @g = ST_AsBinary(MPointFromText(\'MULTIPOLYGON(((28 26,28 0,84 0,84 42,28\n26),(52 18,66 23,73 9,48 6,52 18)),((59 18,67 18,67 13,59 13,59 18)))\'));\n\nSELECT ST_AsText(MPolyFromWKB(@g))\\G\n*************************** 1. row ***************************\nST_AsText(MPolyFromWKB(@g)): MULTIPOLYGON(((28 26,28 0,84 0,84 42,28 26),(52\n18,66 23,73 9,48 6,52 18)),((59 18,67 18,67 13,59 13,59 18)))\n\nURL: https://mariadb.com/kb/en/mpolyfromwkb/','','https://mariadb.com/kb/en/mpolyfromwkb/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (578,32,'GeomCollFromWKB','A synonym for ST_GeomCollFromWKB.\n\nURL: https://mariadb.com/kb/en/wkb-geomcollfromwkb/','','https://mariadb.com/kb/en/wkb-geomcollfromwkb/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (579,32,'GeometryCollectionFromWKB','A synonym for ST_GeomCollFromWKB.\n\nURL: https://mariadb.com/kb/en/geometrycollectionfromwkb/','','https://mariadb.com/kb/en/geometrycollectionfromwkb/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (580,32,'GeometryFromWKB','A synonym for ST_GeomFromWKB.\n\nURL: https://mariadb.com/kb/en/geometryfromwkb/','','https://mariadb.com/kb/en/geometryfromwkb/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (581,32,'GeomFromWKB','A synonym for ST_GeomFromWKB.\n\nURL: https://mariadb.com/kb/en/wkb-geomfromwkb/','','https://mariadb.com/kb/en/wkb-geomfromwkb/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (582,32,'LineFromWKB','A synonym for ST_LineFromWKB.\n\nURL: https://mariadb.com/kb/en/wkb-linefromwkb/','','https://mariadb.com/kb/en/wkb-linefromwkb/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (583,32,'LineStringFromWKB','A synonym for ST_LineFromWKB.\n\nURL: https://mariadb.com/kb/en/linestringfromwkb/','','https://mariadb.com/kb/en/linestringfromwkb/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (584,32,'MultiLineStringFromWKB','A synonym for MLineFromWKB().\n\nURL: https://mariadb.com/kb/en/multilinestringfromwkb/','','https://mariadb.com/kb/en/multilinestringfromwkb/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (585,32,'MultiPointFromWKB','A synonym for MPointFromWKB.\n\nURL: https://mariadb.com/kb/en/multipointfromwkb/','','https://mariadb.com/kb/en/multipointfromwkb/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (586,32,'MultiPolygonFromWKB','Synonym for MPolyFromWKB.\n\nURL: https://mariadb.com/kb/en/multipolygonfromwkb/','','https://mariadb.com/kb/en/multipolygonfromwkb/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (587,32,'PointFromWKB','A synonym for ST_PointFromWKB.\n\nURL: https://mariadb.com/kb/en/wkb-pointfromwkb/','','https://mariadb.com/kb/en/wkb-pointfromwkb/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (588,32,'PolyFromWKB','A synonym for ST_PolyFromWKB.\n\nURL: https://mariadb.com/kb/en/wkb-polyfromwkb/','','https://mariadb.com/kb/en/wkb-polyfromwkb/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (589,32,'PolygonFromWKB','A synonym for ST_PolyFromWKB.\n\nURL: https://mariadb.com/kb/en/polygonfromwkb/','','https://mariadb.com/kb/en/polygonfromwkb/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (590,32,'ST_AsBinary','Syntax\n------\n\nST_AsBinary(g)\nAsBinary(g)\nST_AsWKB(g)\nAsWKB(g)\n\nDescription\n-----------\n\nConverts a value in internal geometry format to its WKB representation and\nreturns the binary result.\n\nST_AsBinary(), AsBinary(), ST_AsWKB() and AsWKB() are synonyms,\n\nExamples\n--------\n\nSET @poly = ST_GeomFromText(\'POLYGON((0 0,0 1,1 1,1 0,0 0))\');\nSELECT ST_AsBinary(@poly);\n\nSELECT ST_AsText(ST_GeomFromWKB(ST_AsWKB(@poly)));\n+--------------------------------------------+\n| ST_AsText(ST_GeomFromWKB(ST_AsWKB(@poly))) |\n+--------------------------------------------+\n| POLYGON((0 0,0 1,1 1,1 0,0 0)) |\n+--------------------------------------------+\n\nURL: https://mariadb.com/kb/en/st_asbinary/','','https://mariadb.com/kb/en/st_asbinary/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (591,32,'ST_AsWKB','A synonym for ST_AsBinary().\n\nURL: https://mariadb.com/kb/en/st_aswkb/','','https://mariadb.com/kb/en/st_aswkb/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (592,32,'ST_GeomCollFromWKB','Syntax\n------\n\nST_GeomCollFromWKB(wkb[,srid])\nST_GeometryCollectionFromWKB(wkb[,srid])\nGeomCollFromWKB(wkb[,srid])\nGeometryCollectionFromWKB(wkb[,srid])\n\nDescription\n-----------\n\nConstructs a GEOMETRYCOLLECTION value using its WKB representation and SRID.\n\nST_GeomCollFromWKB(), ST_GeometryCollectionFromWKB(), GeomCollFromWKB() and\nGeometryCollectionFromWKB() are synonyms.\n\nExamples\n--------\n\nSET @g = ST_AsBinary(ST_GeomFromText(\'GEOMETRYCOLLECTION(\n POLYGON((5 5,10 5,10 10,5 5)),POINT(10 10))\'));\n\nSELECT ST_AsText(ST_GeomCollFromWKB(@g));\n+----------------------------------------------------------------+\n| ST_AsText(ST_GeomCollFromWKB(@g)) |\n+----------------------------------------------------------------+\n| GEOMETRYCOLLECTION(POLYGON((5 5,10 5,10 10,5 5)),POINT(10 10)) |\n+----------------------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/st_geomcollfromwkb/','','https://mariadb.com/kb/en/st_geomcollfromwkb/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (593,32,'ST_GeometryCollectionFromWKB','A synonym for ST_GeomCollFromWKB.\n\nURL: https://mariadb.com/kb/en/st_geometrycollectionfromwkb/','','https://mariadb.com/kb/en/st_geometrycollectionfromwkb/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (594,32,'ST_GeometryFromWKB','A synonym for ST_GeomFromWKB.\n\nURL: https://mariadb.com/kb/en/st_geometryfromwkb/','','https://mariadb.com/kb/en/st_geometryfromwkb/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (595,32,'ST_GeomFromWKB','Syntax\n------\n\nST_GeomFromWKB(wkb[,srid])\nST_GeometryFromWKB(wkb[,srid])\nGeomFromWKB(wkb[,srid])\nGeometryFromWKB(wkb[,srid])\n\nDescription\n-----------\n\nConstructs a geometry value of any type using its WKB representation and SRID.\n\nST_GeomFromWKB(), ST_GeometryFromWKB(), GeomFromWKB() and GeometryFromWKB()\nare synonyms.\n\nExamples\n--------\n\nSET @g = ST_AsBinary(ST_LineFromText(\'LINESTRING(0 4, 4 6)\'));\n\nSELECT ST_AsText(ST_GeomFromWKB(@g));\n+-------------------------------+\n| ST_AsText(ST_GeomFromWKB(@g)) |\n+-------------------------------+\n| LINESTRING(0 4,4 6) |\n+-------------------------------+\n\nURL: https://mariadb.com/kb/en/st_geomfromwkb/','','https://mariadb.com/kb/en/st_geomfromwkb/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (596,32,'ST_LineFromWKB','Syntax\n------\n\nST_LineFromWKB(wkb[,srid])\nLineFromWKB(wkb[,srid])\nST_LineStringFromWKB(wkb[,srid])\nLineStringFromWKB(wkb[,srid])\n\nDescription\n-----------\n\nConstructs a LINESTRING value using its WKB representation and SRID.\n\nST_LineFromWKB(), LineFromWKB(), ST_LineStringFromWKB(), and\nLineStringFromWKB() are synonyms.\n\nExamples\n--------\n\nSET @g = ST_AsBinary(ST_LineFromText(\'LineString(0 4,4 6)\'));\n\nSELECT ST_AsText(ST_LineFromWKB(@g)) AS l;\n+---------------------+\n| l |\n+---------------------+\n| LINESTRING(0 4,4 6) |\n+---------------------+\n\nURL: https://mariadb.com/kb/en/st_linefromwkb/','','https://mariadb.com/kb/en/st_linefromwkb/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (597,32,'ST_LineStringFromWKB','A synonym for ST_LineFromWKB.\n\nURL: https://mariadb.com/kb/en/st_linestringfromwkb/','','https://mariadb.com/kb/en/st_linestringfromwkb/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (598,32,'ST_PointFromWKB','Syntax\n------\n\nST_PointFromWKB(wkb[,srid])\nPointFromWKB(wkb[,srid])\n\nDescription\n-----------\n\nConstructs a POINT value using its WKB representation and SRID.\n\nST_PointFromWKB() and PointFromWKB() are synonyms.\n\nExamples\n--------\n\nSET @g = ST_AsBinary(ST_PointFromText(\'POINT(0 4)\'));\n\nSELECT ST_AsText(ST_PointFromWKB(@g)) AS p;\n+------------+\n| p |\n+------------+\n| POINT(0 4) |\n+------------+\n\nURL: https://mariadb.com/kb/en/st_pointfromwkb/','','https://mariadb.com/kb/en/st_pointfromwkb/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (599,32,'ST_PolyFromWKB','Syntax\n------\n\nST_PolyFromWKB(wkb[,srid])\nST_PolygonFromWKB(wkb[,srid])\nPolyFromWKB(wkb[,srid])\nPolygonFromWKB(wkb[,srid])\n\nDescription\n-----------\n\nConstructs a POLYGON value using its WKB representation and SRID.\n\nST_PolyFromWKB(), ST_PolygonFromWKB(), PolyFromWKB() and PolygonFromWKB() are\nsynonyms.\n\nExamples\n--------\n\nSET @g = ST_AsBinary(ST_PolyFromText(\'POLYGON((1 1,1 5,4 9,6 9,9 3,7 2,1\n1))\'));\n\nSELECT ST_AsText(ST_PolyFromWKB(@g)) AS p;\n+----------------------------------------+\n| p |\n+----------------------------------------+\n| POLYGON((1 1,1 5,4 9,6 9,9 3,7 2,1 1)) |\n+----------------------------------------+\n\nURL: https://mariadb.com/kb/en/st_polyfromwkb/','','https://mariadb.com/kb/en/st_polyfromwkb/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (600,32,'ST_PolygonFromWKB','A synonym for ST_PolyFromWKB.\n\nURL: https://mariadb.com/kb/en/st_polygonfromwkb/','','https://mariadb.com/kb/en/st_polygonfromwkb/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (601,34,'Geometry Types','Description\n-----------\n\nMariaDB provides a standard way of creating spatial columns for geometry\ntypes, for example, with CREATE TABLE or ALTER TABLE. Currently, spatial\ncolumns are supported for MyISAM, InnoDB and ARCHIVE tables. See also SPATIAL\nINDEX.\n\nThe basic geometry type is GEOMETRY. But the type can be more specific. The\nfollowing types are supported:\n\n+-----------------------------------------------------------------------------+\n| Geometry Types |\n+-----------------------------------------------------------------------------+\n| POINT |\n+-----------------------------------------------------------------------------+\n| LINESTRING |\n+-----------------------------------------------------------------------------+\n| POLYGON |\n+-----------------------------------------------------------------------------+\n| MULTIPOINT |\n+-----------------------------------------------------------------------------+\n| MULTILINESTRING |\n+-----------------------------------------------------------------------------+\n| MULTIPOLYGON |\n+-----------------------------------------------------------------------------+\n| GEOMETRYCOLLECTION |\n+-----------------------------------------------------------------------------+\n| GEOMETRY |\n+-----------------------------------------------------------------------------+\n\nExamples\n--------\n\nNote: For clarity, only one type is listed per table in the examples below,\nbut a table row can contain multiple types. For example:\n\nCREATE TABLE object (shapeA POLYGON, shapeB LINESTRING);\n\nPOINT\n-----\n\nCREATE TABLE gis_point (g POINT);\nSHOW FIELDS FROM gis_point;\nINSERT INTO gis_point VALUES\n (PointFromText(\'POINT(10 10)\')),\n (PointFromText(\'POINT(20 10)\')),\n (PointFromText(\'POINT(20 20)\')),\n (PointFromWKB(AsWKB(PointFromText(\'POINT(10 20)\'))));\n\nLINESTRING\n----------\n\nCREATE TABLE gis_line (g LINESTRING);\nSHOW FIELDS FROM gis_line;\nINSERT INTO gis_line VALUES\n (LineFromText(\'LINESTRING(0 0,0 10,10 0)\')),\n (LineStringFromText(\'LINESTRING(10 10,20 10,20 20,10 20,10 10)\')),\n (LineStringFromWKB(AsWKB(LineString(Point(10, 10), Point(40, 10)))));\n\nPOLYGON\n-------\n\nCREATE TABLE gis_polygon (g POLYGON);\nSHOW FIELDS FROM gis_polygon;\nINSERT INTO gis_polygon VALUES\n (PolygonFromText(\'POLYGON((10 10,20 10,20 20,10 20,10 10))\')),\n (PolyFromText(\'POLYGON((0 0,50 0,50 50,0 50,0 0), (10 10,20 10,20 20,10\n20,10 10))\')),\n (PolyFromWKB(AsWKB(Polygon(LineString(Point(0, 0), Point(30, 0), Point(30,\n30), Point(0, 0))))));\n\nMULTIPOINT\n----------\n\nCREATE TABLE gis_multi_point (g MULTIPOINT);\nSHOW FIELDS FROM gis_multi_point;\nINSERT INTO gis_multi_point VALUES\n (MultiPointFromText(\'MULTIPOINT(0 0,10 10,10 20,20 20)\')),\n (MPointFromText(\'MULTIPOINT(1 1,11 11,11 21,21 21)\')),\n (MPointFromWKB(AsWKB(MultiPoint(Point(3, 6), Point(4, 10)))));\n\nMULTILINESTRING\n---------------\n\nCREATE TABLE gis_multi_line (g MULTILINESTRING);\nSHOW FIELDS FROM gis_multi_line;\nINSERT INTO gis_multi_line VALUES\n (MultiLineStringFromText(\'MULTILINESTRING((10 48,10 21,10 0),(16 0,16\n23,16 48))\')),\n (MLineFromText(\'MULTILINESTRING((10 48,10 21,10 0))\')),\n (MLineFromWKB(AsWKB(MultiLineString(LineString(Point(1, 2), Point(3, 5)),\nLineString(Point(2, 5), Point(5, 8), Point(21, 7))))));\n\nMULTIPOLYGON\n------------\n\nCREATE TABLE gis_multi_polygon (g MULTIPOLYGON);\nSHOW FIELDS FROM gis_multi_polygon;\nINSERT INTO gis_multi_polygon VALUES\n (MultiPolygonFromText(\'MULTIPOLYGON(((28 26,28 0,84 0,84 42,28 26),(52\n18,66 23,73 9,48 6,52 18)),((59 18,67 18,67 13,59 13,59 18)))\')),\n (MPolyFromText(\'MULTIPOLYGON(((28 26,28 0,84 0,84 42,28 26),(52 18,66\n23,73 9,48 6,52 18)),((59 18,67 18,67 13,59 13,59 18)))\')),\n (MPolyFromWKB(AsWKB(MultiPolygon(Polygon(LineString(Point(0, 3), Point(3,\n3), Point(3, 0), Point(0, 3)))))));\n\nGEOMETRYCOLLECTION\n------------------\n\nCREATE TABLE gis_geometrycollection (g GEOMETRYCOLLECTION);\nSHOW FIELDS FROM gis_geometrycollection;\nINSERT INTO gis_geometrycollection VALUES\n (GeomCollFromText(\'GEOMETRYCOLLECTION(POINT(0 0), LINESTRING(0 0,10\n10))\')),\n (GeometryFromWKB(AsWKB(GeometryCollection(Point(44, 6),\nLineString(Point(3, 6), Point(7, 9)))))),\n (GeomFromText(\'GeometryCollection()\')),\n (GeomFromText(\'GeometryCollection EMPTY\'));\n\nGEOMETRY\n--------\n\nCREATE TABLE gis_geometry (g GEOMETRY);\nSHOW FIELDS FROM gis_geometry;\nINSERT into gis_geometry SELECT * FROM gis_point;\nINSERT into gis_geometry SELECT * FROM gis_line;\nINSERT into gis_geometry SELECT * FROM gis_polygon;\nINSERT into gis_geometry SELECT * FROM gis_multi_point;\nINSERT into gis_geometry SELECT * FROM gis_multi_line;\nINSERT into gis_geometry SELECT * FROM gis_multi_polygon;\nINSERT into gis_geometry SELECT * FROM gis_geometrycollection;\n\nURL: https://mariadb.com/kb/en/geometry-types/','','https://mariadb.com/kb/en/geometry-types/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (602,34,'Geometry Hierarchy','Description\n-----------\n\nGeometry is the base class. It is an abstract class. The instantiable\nsubclasses of Geometry are restricted to zero-, one-, and two-dimensional\ngeometric objects that exist in two-dimensional coordinate space. All\ninstantiable geometry classes are defined so that valid instances of a\ngeometry class are topologically closed (that is, all defined geometries\ninclude their boundary).\n\nThe base Geometry class has subclasses for Point, Curve, Surface, and\nGeometryCollection:\n\n* Point represents zero-dimensional objects.\n* Curve represents one-dimensional objects, and has subclass LineString, with\nsub-subclasses Line and LinearRing.\n* Surface is designed for two-dimensional objects and has subclass Polygon.\n* GeometryCollection has specialized zero-, one-, and two-dimensional\ncollection classes named MultiPoint, MultiLineString, and MultiPolygon for\nmodeling geometries corresponding to collections of Points, LineStrings, and\nPolygons, respectively. MultiCurve and MultiSurface are introduced as abstract\nsuperclasses that generalize the collection interfaces to handle Curves and\nSurfaces.\n\nGeometry, Curve, Surface, MultiCurve, and MultiSurface are defined as\nnon-instantiable classes. They define a common set of methods for their\nsubclasses and are included for extensibility.\n\nPoint, LineString, Polygon, GeometryCollection, MultiPoint, MultiLineString,\nand MultiPolygon are instantiable classes.\n\nURL: https://mariadb.com/kb/en/geometry-hierarchy/','','https://mariadb.com/kb/en/geometry-hierarchy/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (603,34,'SPATIAL INDEX','Description\n-----------\n\nOn MyISAM, Aria and InnoDB tables, MariaDB can create spatial indexes (an\nR-tree index) using syntax similar to that for creating regular indexes, but\nextended with the SPATIAL keyword. Currently, columns in spatial indexes must\nbe declared NOT NULL.\n\nSpatial indexes can be created when the table is created, or added after the\nfact like so:\n\n* with CREATE TABLE: CREATE TABLE geom (g GEOMETRY NOT NULL, SPATIAL INDEX(g));\n\n* with ALTER TABLE: ALTER TABLE geom ADD SPATIAL INDEX(g);\n\n* with CREATE INDEX: CREATE SPATIAL INDEX sp_index ON geom (g);\n\nSPATIAL INDEX creates an R-tree index. For storage engines that support\nnon-spatial indexing of spatial columns, the engine creates a B-tree index. A\nB-tree index on spatial values is useful for exact-value lookups, but not for\nrange scans.\n\nFor more information on indexing spatial columns, see CREATE INDEX.\n\nTo drop spatial indexes, use ALTER TABLE or DROP INDEX:\n\n* with ALTER TABLE: ALTER TABLE geom DROP INDEX g;\n\n* with DROP INDEX: DROP INDEX sp_index ON geom;\n\nData-at-Rest Encyption\n----------------------\n\nBefore MariaDB 10.4.3, InnoDB\'s spatial indexes could not be encrypted. If an\nInnoDB table was encrypted and if it contained spatial indexes, then those\nindexes would be unencrypted.\n\nIn MariaDB 10.4.3 and later, if innodb_checksum_algorithm is set to full_crc32\nor strict_full_crc32, and if the table does not use ROW_FORMAT=COMPRESSED,\nthen InnoDB spatial indexes will be encrypted if the table is encrypted.\n\nSee MDEV-12026 for more information.\n\nURL: https://mariadb.com/kb/en/spatial-index/','','https://mariadb.com/kb/en/spatial-index/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (604,35,'BOUNDARY','A synonym for ST_BOUNDARY.\n\nURL: https://mariadb.com/kb/en/geometry-properties-boundary/','','https://mariadb.com/kb/en/geometry-properties-boundary/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (605,35,'DIMENSION','A synonym for ST_DIMENSION.\n\nURL: https://mariadb.com/kb/en/dimension/','','https://mariadb.com/kb/en/dimension/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (606,35,'ENVELOPE','A synonym for ST_ENVELOPE.\n\nURL: https://mariadb.com/kb/en/geometry-properties-envelope/','','https://mariadb.com/kb/en/geometry-properties-envelope/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (607,35,'GeometryN','A synonym for ST_GeometryN.\n\nURL: https://mariadb.com/kb/en/geometry-properties-geometryn/','','https://mariadb.com/kb/en/geometry-properties-geometryn/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (608,35,'GeometryType','A synonym for ST_GeometryType.\n\nURL: https://mariadb.com/kb/en/geometry-properties-geometrytype/','','https://mariadb.com/kb/en/geometry-properties-geometrytype/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (609,35,'IsClosed','A synonym for ST_IsClosed.\n\nURL: https://mariadb.com/kb/en/isclosed/','','https://mariadb.com/kb/en/isclosed/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (610,35,'IsEmpty','A synonym for ST_IsEmpty.\n\nURL: https://mariadb.com/kb/en/geometry-properties-isempty/','','https://mariadb.com/kb/en/geometry-properties-isempty/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (611,35,'IsRing','A synonym for ST_IsRing.\n\nURL: https://mariadb.com/kb/en/isring/','','https://mariadb.com/kb/en/isring/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (612,35,'IsSimple','A synonym for ST_IsSImple.\n\nURL: https://mariadb.com/kb/en/geometry-properties-issimple/','','https://mariadb.com/kb/en/geometry-properties-issimple/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (613,35,'NumGeometries','A synonym for ST_NumGeometries.\n\nURL: https://mariadb.com/kb/en/geometry-properties-numgeometries/','','https://mariadb.com/kb/en/geometry-properties-numgeometries/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (614,35,'SRID','A synonym for ST_SRID.\n\nURL: https://mariadb.com/kb/en/geometry-properties-srid/','','https://mariadb.com/kb/en/geometry-properties-srid/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (615,35,'ST_BOUNDARY','MariaDB starting with 10.1.2\n----------------------------\nThe ST_BOUNDARY function was introduced in MariaDB 10.1.2\n\nSyntax\n------\n\nST_BOUNDARY(g)\nBOUNDARY(g)\n\nDescription\n-----------\n\nReturns a geometry that is the closure of the combinatorial boundary of the\ngeometry value g.\n\nBOUNDARY() is a synonym.\n\nExamples\n--------\n\nSELECT ST_AsText(ST_Boundary(ST_GeomFromText(\'LINESTRING(3 3,0 0, -3 3)\')));\n+----------------------------------------------------------------------+\n| ST_AsText(ST_Boundary(ST_GeomFromText(\'LINESTRING(3 3,0 0, -3 3)\'))) |\n+----------------------------------------------------------------------+\n| MULTIPOINT(3 3,-3 3) |\n+----------------------------------------------------------------------+\n\nSELECT ST_AsText(ST_Boundary(ST_GeomFromText(\'POLYGON((3 3,0 0, -3 3, 3\n3))\')));\n+--------------------------------------------------------------------------+\n| ST_AsText(ST_Boundary(ST_GeomFromText(\'POLYGON((3 3,0 0, -3 3, 3 3))\'))) |\n+--------------------------------------------------------------------------+\n| LINESTRING(3 3,0 0,-3 3,3 3) |\n+--------------------------------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/st_boundary/','','https://mariadb.com/kb/en/st_boundary/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (616,35,'ST_DIMENSION','Syntax\n------\n\nST_Dimension(g)\nDimension(g)\n\nDescription\n-----------\n\nReturns the inherent dimension of the geometry value g. The result can be\n\n+------------------------------------+---------------------------------------+\n| Dimension | Definition |\n+------------------------------------+---------------------------------------+\n| -1 | empty geometry |\n+------------------------------------+---------------------------------------+\n| 0 | geometry with no length or area |\n+------------------------------------+---------------------------------------+\n| 1 | geometry with no area but nonzero |\n| | length |\n+------------------------------------+---------------------------------------+\n| 2 | geometry with nonzero area |\n+------------------------------------+---------------------------------------+\n\nST_Dimension() and Dimension() are synonyms.\n\nExamples\n--------\n\nSELECT Dimension(GeomFromText(\'LineString(1 1,2 2)\'));\n+------------------------------------------------+\n| Dimension(GeomFromText(\'LineString(1 1,2 2)\')) |\n+------------------------------------------------+\n| 1 |\n+------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/st_dimension/','','https://mariadb.com/kb/en/st_dimension/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (617,35,'ST_ENVELOPE','Syntax\n------\n\nST_ENVELOPE(g)\nENVELOPE(g)\n\nDescription\n-----------\n\nReturns the Minimum Bounding Rectangle (MBR) for the geometry value g. The\nresult is returned as a Polygon value.\n\nThe polygon is defined by the corner points of the bounding box:\n\nPOLYGON((MINX MINY, MAXX MINY, MAXX MAXY, MINX MAXY, MINX MINY))\n\nST_ENVELOPE() and ENVELOPE() are synonyms.\n\nExamples\n--------\n\nSELECT AsText(ST_ENVELOPE(GeomFromText(\'LineString(1 1,4 4)\')));\n+----------------------------------------------------------+\n| AsText(ST_ENVELOPE(GeomFromText(\'LineString(1 1,4 4)\'))) |\n+----------------------------------------------------------+\n| POLYGON((1 1,4 1,4 4,1 4,1 1)) |\n+----------------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/st_envelope/','','https://mariadb.com/kb/en/st_envelope/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (618,35,'ST_GEOMETRYN','Syntax\n------\n\nST_GeometryN(gc,N)\nGeometryN(gc,N)\n\nDescription\n-----------\n\nReturns the N-th geometry in the GeometryCollection gc. Geometries are\nnumbered beginning with 1.\n\nST_GeometryN() and GeometryN() are synonyms.\n\nExample\n-------\n\nSET @gc = \'GeometryCollection(Point(1 1),LineString(12 14, 9 11))\';\n\nSELECT AsText(GeometryN(GeomFromText(@gc),1));\n+----------------------------------------+\n| AsText(GeometryN(GeomFromText(@gc),1)) |\n+----------------------------------------+\n| POINT(1 1) |\n+----------------------------------------+\n\nURL: https://mariadb.com/kb/en/st_geometryn/','','https://mariadb.com/kb/en/st_geometryn/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (619,35,'ST_GEOMETRYTYPE','Syntax\n------\n\nST_GeometryType(g)\nGeometryType(g)\n\nDescription\n-----------\n\nReturns as a string the name of the geometry type of which the geometry\ninstance g is a member. The name corresponds to one of the instantiable\nGeometry subclasses.\n\nST_GeometryType() and GeometryType() are synonyms.\n\nExamples\n--------\n\nSELECT GeometryType(GeomFromText(\'POINT(1 1)\'));\n+------------------------------------------+\n| GeometryType(GeomFromText(\'POINT(1 1)\')) |\n+------------------------------------------+\n| POINT |\n+------------------------------------------+\n\nURL: https://mariadb.com/kb/en/st_geometrytype/','','https://mariadb.com/kb/en/st_geometrytype/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (620,35,'ST_ISCLOSED','Syntax\n------\n\nST_IsClosed(g)\nIsClosed(g)\n\nDescription\n-----------\n\nReturns 1 if a given LINESTRING\'s start and end points are the same, or 0 if\nthey are not the same. Before MariaDB 10.1.5, returns NULL if not given a\nLINESTRING. After MariaDB 10.1.5, returns -1.\n\nST_IsClosed() and IsClosed() are synonyms.\n\nExamples\n--------\n\nSET @ls = \'LineString(0 0, 0 4, 4 4, 0 0)\';\nSELECT ST_ISCLOSED(GEOMFROMTEXT(@ls));\n+--------------------------------+\n| ST_ISCLOSED(GEOMFROMTEXT(@ls)) |\n+--------------------------------+\n| 1 |\n+--------------------------------+\n\nSET @ls = \'LineString(0 0, 0 4, 4 4, 0 1)\';\nSELECT ST_ISCLOSED(GEOMFROMTEXT(@ls));\n+--------------------------------+\n| ST_ISCLOSED(GEOMFROMTEXT(@ls)) |\n+--------------------------------+\n| 0 |\n+--------------------------------+\n\nURL: https://mariadb.com/kb/en/st_isclosed/','','https://mariadb.com/kb/en/st_isclosed/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (621,35,'ST_ISEMPTY','Syntax\n------\n\nST_IsEmpty(g)\nIsEmpty(g)\n\nDescription\n-----------\n\nIsEmpty is a function defined by the OpenGIS specification, but is not fully\nimplemented by MariaDB or MySQL.\n\nSince MariaDB and MySQL do not support GIS EMPTY values such as POINT EMPTY,\nas implemented it simply returns 1 if the geometry value g is invalid, 0 if it\nis valid, and NULL if the argument is NULL.\n\nST_IsEmpty() and IsEmpty() are synonyms.\n\nURL: https://mariadb.com/kb/en/st_isempty/','','https://mariadb.com/kb/en/st_isempty/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (622,35,'ST_IsRing','MariaDB starting with 10.1.2\n----------------------------\nThe ST_IsRing function was introduced in MariaDB 10.1.2\n\nSyntax\n------\n\nST_IsRing(g)\nIsRing(g)\n\nDescription\n-----------\n\nReturns true if a given LINESTRING is a ring, that is, both ST_IsClosed and\nST_IsSimple. A simple curve does not pass through the same point more than\nonce. However, see MDEV-7510.\n\nSt_IsRing() and IsRing() are synonyms.\n\nURL: https://mariadb.com/kb/en/st_isring/','','https://mariadb.com/kb/en/st_isring/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (623,35,'ST_IsSimple','Syntax\n------\n\nST_IsSimple(g)\nIsSimple(g)\n\nDescription\n-----------\n\nReturns true if the given Geometry has no anomalous geometric points, false if\nit does, or NULL if given a NULL value.\n\nST_IsSimple() and IsSimple() are synonyms.\n\nExamples\n--------\n\nA POINT is always simple.\n\nSET @g = \'Point(1 2)\';\n\nSELECT ST_ISSIMPLE(GEOMFROMTEXT(@g));\n+-------------------------------+\n| ST_ISSIMPLE(GEOMFROMTEXT(@g)) |\n+-------------------------------+\n| 1 |\n+-------------------------------+\n\nURL: https://mariadb.com/kb/en/st_issimple/','','https://mariadb.com/kb/en/st_issimple/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (624,35,'ST_NUMGEOMETRIES','Syntax\n------\n\nST_NumGeometries(gc)\nNumGeometries(gc)\n\nDescription\n-----------\n\nReturns the number of geometries in the GeometryCollection gc.\n\nST_NumGeometries() and NumGeometries() are synonyms.\n\nExample\n-------\n\nSET @gc = \'GeometryCollection(Point(1 1),LineString(2 2, 3 3))\';\n\nSELECT NUMGEOMETRIES(GeomFromText(@gc));\n+----------------------------------+\n| NUMGEOMETRIES(GeomFromText(@gc)) |\n+----------------------------------+\n| 2 |\n+----------------------------------+\n\nURL: https://mariadb.com/kb/en/st_numgeometries/','','https://mariadb.com/kb/en/st_numgeometries/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (625,35,'ST_RELATE','MariaDB starting with 10.1.2\n----------------------------\nThe ST_RELATE() function was introduced in MariaDB 10.1.2\n\nSyntax\n------\n\nST_Relate(g1, g2, i)\n\nDescription\n-----------\n\nReturns true if Geometry g1 is spatially related to Geometryg2 by testing for\nintersections between the interior, boundary and exterior of the two\ngeometries as specified by the values in intersection matrix pattern i.\n\nURL: https://mariadb.com/kb/en/st_relate/','','https://mariadb.com/kb/en/st_relate/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (626,35,'ST_SRID','Syntax\n------\n\nST_SRID(g)\nSRID(g)\n\nDescription\n-----------\n\nReturns an integer indicating the Spatial Reference System ID for the geometry\nvalue g.\n\nIn MariaDB, the SRID value is just an integer associated with the geometry\nvalue. All calculations are done assuming Euclidean (planar) geometry.\n\nST_SRID() and SRID() are synonyms.\n\nExamples\n--------\n\nSELECT SRID(GeomFromText(\'LineString(1 1,2 2)\',101));\n+-----------------------------------------------+\n| SRID(GeomFromText(\'LineString(1 1,2 2)\',101)) |\n+-----------------------------------------------+\n| 101 |\n+-----------------------------------------------+\n\nURL: https://mariadb.com/kb/en/st_srid/','','https://mariadb.com/kb/en/st_srid/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (627,36,'LOAD_FILE','Syntax\n------\n\nLOAD_FILE(file_name)\n\nDescription\n-----------\n\nReads the file and returns the file contents as a string. To use this\nfunction, the file must be located on the server host, you must specify the\nfull path name to the file, and you must have the FILE privilege. The file\nmust be readable by all and it must be less than the size, in bytes, of the\nmax_allowed_packet system variable. If the secure_file_priv system variable is\nset to a non-empty directory name, the file to be loaded must be located in\nthat directory.\n\nIf the file does not exist or cannot be read because one of the preceding\nconditions is not satisfied, the function returns NULL.\n\nSince MariaDB 5.1, the character_set_filesystem system variable has controlled\ninterpretation of file names that are given as literal strings.\n\nStatements using the LOAD_FILE() function are not safe for statement based\nreplication. This is because the slave will execute the LOAD_FILE() command\nitself. If the file doesn\'t exist on the slave, the function will return NULL.\n\nExamples\n--------\n\nUPDATE t SET blob_col=LOAD_FILE(\'/tmp/picture\') WHERE id=1;\n\nURL: https://mariadb.com/kb/en/load_file/','','https://mariadb.com/kb/en/load_file/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (628,36,'NOT REGEXP','Syntax\n------\n\nexpr NOT REGEXP pat, expr NOT RLIKE pat\n\nDescription\n-----------\n\nThis is the same as NOT (expr REGEXP pat).\n\nURL: https://mariadb.com/kb/en/not-regexp/','','https://mariadb.com/kb/en/not-regexp/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (629,36,'REGEXP','Syntax\n------\n\nexpr REGEXP pat, expr RLIKE pat\n\nDescription\n-----------\n\nPerforms a pattern match of a string expression expr against a pattern pat.\nThe pattern can be an extended regular expression. See Regular Expressions\nOverview for details on the syntax for regular expressions (see also PCRE\nRegular Expressions).\n\nReturns 1 if expr matches pat or 0 if it doesn\'t match. If either expr or pat\nare NULL, the result is NULL.\n\nThe negative form NOT REGEXP also exists, as an alias for NOT (string REGEXP\npattern). RLIKE and NOT RLIKE are synonyms for REGEXP and NOT REGEXP,\noriginally provided for mSQL compatibility.\n\nThe pattern need not be a literal string. For example, it can be specified as\na string expression or table column.\n\nNote: Because MariaDB uses the C escape syntax in strings (for example, \"\\n\"\nto represent the newline character), you must double any \"\\\" that you use in\nyour REGEXP strings.\n\nREGEXP is not case sensitive, except when used with binary strings.\n\nMariaDB 10.0.5 moved to the PCRE regex library - see PCRE Regular Expressions\nfor enhancements to REGEXP introduced in MariaDB 10.0.5.\n\nThe default_regex_flags variable addresses the remaining compatibilities\nbetween PCRE and the old regex library.\n\nExamples\n--------\n\nSELECT \'Monty!\' REGEXP \'m%y%%\';\n+-------------------------+\n| \'Monty!\' REGEXP \'m%y%%\' |\n+-------------------------+\n| 0 |\n+-------------------------+\n\nSELECT \'Monty!\' REGEXP \'.*\';\n+----------------------+\n| \'Monty!\' REGEXP \'.*\' |\n+----------------------+\n| 1 |\n+----------------------+\n\nSELECT \'new*\\n*line\' REGEXP \'new\\\\*.\\\\*line\';\n+---------------------------------------+\n| \'new*\\n*line\' REGEXP \'new\\\\*.\\\\*line\' |\n+---------------------------------------+\n| 1 |\n+---------------------------------------+\n\nSELECT \'a\' REGEXP \'A\', \'a\' REGEXP BINARY \'A\';\n+----------------+-----------------------+\n| \'a\' REGEXP \'A\' | \'a\' REGEXP BINARY \'A\' |\n+----------------+-----------------------+\n| 1 | 0 |\n+----------------+-----------------------+\n\nSELECT \'a\' REGEXP \'^[a-d]\';\n+---------------------+\n| \'a\' REGEXP \'^[a-d]\' |\n+---------------------+\n| 1 |\n+---------------------+\n\ndefault_regex_flags examples\n----------------------------\n\nMariaDB 10.0.11 introduced the default_regex_flags variable to address the\nremaining compatibilities between PCRE and the old regex library.\n\nThe default behaviour (multiline match is off)\n\nSELECT \'a\\nb\\nc\' RLIKE \'^b$\';\n+---------------------------+\n| \'(?m)a\\nb\\nc\' RLIKE \'^b$\' |\n+---------------------------+\n| 0 |\n+---------------------------+\n\nEnabling the multiline option using the PCRE option syntax:\n\nSELECT \'a\\nb\\nc\' RLIKE \'(?m)^b$\';\n+---------------------------+\n| \'a\\nb\\nc\' RLIKE \'(?m)^b$\' |\n+---------------------------+\n| 1 |\n+---------------------------+\n\nEnabling the multiline option using default_regex_flags\n\nSET default_regex_flags=\'MULTILINE\';\nSELECT \'a\\nb\\nc\' RLIKE \'^b$\';\n+-----------------------+\n| \'a\\nb\\nc\' RLIKE \'^b$\' |\n+-----------------------+\n| 1 |\n+-----------------------+\n\nURL: https://mariadb.com/kb/en/regexp/','','https://mariadb.com/kb/en/regexp/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (630,36,'REGEXP_INSTR','Syntax\n------\n\nREGEXP_INSTR(subject, pattern)\n\nReturns the position of the first occurrence of the regular expression pattern\nin the string subject, or 0 if pattern was not found.\n\nThe positions start with 1 and are measured in characters (i.e. not in bytes),\nwhich is important for multi-byte character sets. You can cast a multi-byte\ncharacter set to BINARY to get offsets in bytes.\n\nThe function follows the case sensitivity rules of the effective collation.\nMatching is performed case insensitively for case insensitive collations, and\ncase sensitively for case sensitive collations and for binary data.\n\nThe collation case sensitivity can be overwritten using the (?i) and (?-i)\nPCRE flags.\n\nMariaDB uses the PCRE regular expression library for enhanced regular\nexpression performance, and REGEXP_INSTR was introduced as part of this\nenhancement.\n\nExamples\n--------\n\nSELECT REGEXP_INSTR(\'abc\',\'b\');\n-> 2\n\nSELECT REGEXP_INSTR(\'abc\',\'x\');\n-> 0\n\nSELECT REGEXP_INSTR(\'BJÖRN\',\'N\');\n-> 5\n\nCasting a multi-byte character set as BINARY to get offsets in bytes:\n\nSELECT REGEXP_INSTR(BINARY \'BJÖRN\',\'N\') AS cast_utf8_to_binary;\n-> 6\n\nCase sensitivity:\n\nSELECT REGEXP_INSTR(\'ABC\',\'b\');\n-> 2\n\nSELECT REGEXP_INSTR(\'ABC\' COLLATE utf8_bin,\'b\');\n-> 0\n\nSELECT REGEXP_INSTR(BINARY\'ABC\',\'b\');\n-> 0\n\nSELECT REGEXP_INSTR(\'ABC\',\'(?-i)b\');\n-> 0\n\nSELECT REGEXP_INSTR(\'ABC\' COLLATE utf8_bin,\'(?i)b\');\n-> 2\n\nURL: https://mariadb.com/kb/en/regexp_instr/','','https://mariadb.com/kb/en/regexp_instr/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (631,36,'REGEXP_REPLACE','Syntax\n------\n\nREGEXP_REPLACE(subject, pattern, replace)\n\nDescription\n-----------\n\nREGEXP_REPLACE returns the string subject with all occurrences of the regular\nexpression pattern replaced by the string replace. If no occurrences are\nfound, then subject is returned as is.\n\nThe replace string can have backreferences to the subexpressions in the form\n\\N, where N is a number from 1 to 9.\n\nThe function follows the case sensitivity rules of the effective collation.\nMatching is performed case insensitively for case insensitive collations, and\ncase sensitively for case sensitive collations and for binary data.\n\nThe collation case sensitivity can be overwritten using the (?i) and (?-i)\nPCRE flags.\n\nMariaDB uses the PCRE regular expression library for enhanced regular\nexpression performance, and REGEXP_REPLACE was introduced as part of this\nenhancement.\n\nThe default_regex_flags variable addresses the remaining compatibilities\nbetween PCRE and the old regex library.\n\nExamples\n--------\n\nSELECT REGEXP_REPLACE(\'ab12cd\',\'[0-9]\',\'\') AS remove_digits;\n-> abcd\n\nSELECT\nREGEXP_REPLACE(\'<html><head><title>title</title><body>body</body></htm>\',\n\'<.+?>\',\' \')\nAS strip_html;\n-> title body\n\nBackreferences to the subexpressions in the form \\N, where N is a number from\n1 to 9:\n\nSELECT REGEXP_REPLACE(\'James Bond\',\'^(.*) (.*)$\',\'\\\\2, \\\\1\') AS reorder_name;\n-> Bond, James\n\nCase insensitive and case sensitive matches:\n\nSELECT REGEXP_REPLACE(\'ABC\',\'b\',\'-\') AS case_insensitive;\n-> A-C\n\nSELECT REGEXP_REPLACE(\'ABC\' COLLATE utf8_bin,\'b\',\'-\') AS case_sensitive;\n-> ABC\n\nSELECT REGEXP_REPLACE(BINARY \'ABC\',\'b\',\'-\') AS binary_data;\n-> ABC\n\nOverwriting the collation case sensitivity using the (?i) and (?-i) PCRE flags.\n\nSELECT REGEXP_REPLACE(\'ABC\',\'(?-i)b\',\'-\') AS force_case_sensitive;\n-> ABC\n\nSELECT REGEXP_REPLACE(BINARY \'ABC\',\'(?i)b\',\'-\') AS force_case_insensitive;\n-> A-C\n\nURL: https://mariadb.com/kb/en/regexp_replace/','','https://mariadb.com/kb/en/regexp_replace/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (632,36,'REGEXP_SUBSTR','Syntax\n------\n\nREGEXP_SUBSTR(subject,pattern)\n\nDescription\n-----------\n\nReturns the part of the string subject that matches the regular expression\npattern, or an empty string if pattern was not found.\n\nThe function follows the case sensitivity rules of the effective collation.\nMatching is performed case insensitively for case insensitive collations, and\ncase sensitively for case sensitive collations and for binary data.\n\nThe collation case sensitivity can be overwritten using the (?i) and (?-i)\nPCRE flags.\n\nMariaDB uses the PCRE regular expression library for enhanced regular\nexpression performance, and REGEXP_SUBSTR was introduced as part of this\nenhancement.\n\nThe default_regex_flags variable addresses the remaining compatibilities\nbetween PCRE and the old regex library.\n\nExamples\n--------\n\nSELECT REGEXP_SUBSTR(\'ab12cd\',\'[0-9]+\');\n-> 12\n\nSELECT REGEXP_SUBSTR(\n \'See https://mariadb.org/en/foundation/ for details\',\n \'https?://[^/]*\');\n-> https://mariadb.org\n\nSELECT REGEXP_SUBSTR(\'ABC\',\'b\');\n-> B\n\nSELECT REGEXP_SUBSTR(\'ABC\' COLLATE utf8_bin,\'b\');\n->\n\nSELECT REGEXP_SUBSTR(BINARY\'ABC\',\'b\');\n->\n\nSELECT REGEXP_SUBSTR(\'ABC\',\'(?i)b\');\n-> B\n\nSELECT REGEXP_SUBSTR(\'ABC\' COLLATE utf8_bin,\'(?+i)b\');\n-> B\n\nURL: https://mariadb.com/kb/en/regexp_substr/','','https://mariadb.com/kb/en/regexp_substr/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (633,36,'ASCII','Syntax\n------\n\nASCII(str)\n\nDescription\n-----------\n\nReturns the numeric ASCII value of the leftmost character of the string\nargument. Returns 0 if the given string is empty and NULL if it is NULL.\n\nASCII() works for 8-bit characters.\n\nExamples\n--------\n\nSELECT ASCII(9);\n+----------+\n| ASCII(9) |\n+----------+\n| 57 |\n+----------+\n\nSELECT ASCII(\'9\');\n+------------+\n| ASCII(\'9\') |\n+------------+\n| 57 |\n+------------+\n\nSELECT ASCII(\'abc\');\n+--------------+\n| ASCII(\'abc\') |\n+--------------+\n| 97 |\n+--------------+\n\nURL: https://mariadb.com/kb/en/ascii/','','https://mariadb.com/kb/en/ascii/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (634,36,'BIN','Syntax\n------\n\nBIN(N)\n\nDescription\n-----------\n\nReturns a string representation of the binary value of the given longlong\n(that is, BIGINT) number. This is equivalent to CONV(N,10,2). The argument\nshould be positive. If it is a FLOAT, it will be truncated. Returns NULL if\nthe argument is NULL.\n\nExamples\n--------\n\nSELECT BIN(12);\n+---------+\n| BIN(12) |\n+---------+\n| 1100 |\n+---------+\n\nURL: https://mariadb.com/kb/en/bin/','','https://mariadb.com/kb/en/bin/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (635,36,'BINARY Operator','This page describes the BINARY operator. For details about the data type, see\nBinary Data Type.\n\nSyntax\n------\n\nBINARY\n\nDescription\n-----------\n\nThe BINARY operator casts the string following it to a binary string. This is\nan easy way to force a column comparison to be done byte by byte rather than\ncharacter by character. This causes the comparison to be case sensitive even\nif the column isn\'t defined as BINARY or BLOB.\n\nBINARY also causes trailing spaces to be significant.\n\nExamples\n--------\n\nSELECT \'a\' = \'A\';\n+-----------+\n| \'a\' = \'A\' |\n+-----------+\n| 1 |\n+-----------+\n\nSELECT BINARY \'a\' = \'A\';\n+------------------+\n| BINARY \'a\' = \'A\' |\n+------------------+\n| 0 |\n+------------------+\n\nSELECT \'a\' = \'a \';\n+------------+\n| \'a\' = \'a \' |\n+------------+\n| 1 |\n+------------+\n\nSELECT BINARY \'a\' = \'a \';\n+-------------------+\n| BINARY \'a\' = \'a \' |\n+-------------------+\n| 0 |\n+-------------------+\n\nURL: https://mariadb.com/kb/en/binary-operator/','','https://mariadb.com/kb/en/binary-operator/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (636,36,'BIT_LENGTH','Syntax\n------\n\nBIT_LENGTH(str)\n\nDescription\n-----------\n\nReturns the length of the given string argument in bits. If the argument is\nnot a string, it will be converted to string. If the argument is NULL, it\nreturns NULL.\n\nExamples\n--------\n\nSELECT BIT_LENGTH(\'text\');\n+--------------------+\n| BIT_LENGTH(\'text\') |\n+--------------------+\n| 32 |\n+--------------------+\n\nSELECT BIT_LENGTH(\'\');\n+----------------+\n| BIT_LENGTH(\'\') |\n+----------------+\n| 0 |\n+----------------+\n\nCompatibility\n-------------\n\nPostgreSQL and Sybase support BIT_LENGTH().\n\nURL: https://mariadb.com/kb/en/bit_length/','','https://mariadb.com/kb/en/bit_length/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (637,36,'CAST','Syntax\n------\n\nCAST(expr AS type)\n\nDescription\n-----------\n\nThe CAST() function takes a value of one type and produces a value of another\ntype, similar to the CONVERT() function.\n\nThe type can be one of the following values:\n\n* BINARY\n* CHAR\n* DATE\n* DATETIME\n* DECIMAL[(M[,D])]\n* DOUBLE\n* FLOAT (from MariaDB 10.4.5)\n* INTEGER\nShort for SIGNED INTEGER\n\n* SIGNED [INTEGER]\n* UNSIGNED [INTEGER]\n* TIME\n* VARCHAR (in Oracle mode, from MariaDB 10.3)\n\nThe main difference between CAST and CONVERT() is that CONVERT(expr,type) is\nODBC syntax while CAST(expr as type) and CONVERT(... USING ...) are SQL92\nsyntax.\n\nIn MariaDB 10.4 and later, you can use the CAST() function with the INTERVAL\nkeyword.\n\nUntil MariaDB 5.5.31, X\'HHHH\', the standard SQL syntax for binary string\nliterals, erroneously worked in the same way as 0xHHHH. In 5.5.31 it was\nintentionally changed to behave as a string in all contexts (and never as a\nnumber).\n\nThis introduced an incompatibility with previous versions of MariaDB, and all\nversions of MySQL (see the example below).\n\nExamples\n--------\n\nSimple casts:\n\nSELECT CAST(\"abc\" AS BINARY);\nSELECT CAST(\"1\" AS UNSIGNED INTEGER);\nSELECT CAST(123 AS CHAR CHARACTER SET utf8)\n\nNote that when one casts to CHAR without specifying the character set, the\ncollation_connection character set collation will be used. When used with CHAR\nCHARACTER SET, the default collation for that character set will be used.\n\nSELECT COLLATION(CAST(123 AS CHAR));\n+------------------------------+\n| COLLATION(CAST(123 AS CHAR)) |\n+------------------------------+\n| latin1_swedish_ci |\n+------------------------------+\n\nSELECT COLLATION(CAST(123 AS CHAR CHARACTER SET utf8));\n+-------------------------------------------------+\n| COLLATION(CAST(123 AS CHAR CHARACTER SET utf8)) |\n+-------------------------------------------------+\n| utf8_general_ci |\n+-------------------------------------------------+\n\nIf you also want to change the collation, you have to use the COLLATE operator:\n\nSELECT COLLATION(CAST(123 AS CHAR CHARACTER SET utf8) \n COLLATE utf8_unicode_ci);\n+-------------------------------------------------------------------------+\n| COLLATION(CAST(123 AS CHAR CHARACTER SET utf8) COLLATE utf8_unicode_ci) |\n+-------------------------------------------------------------------------+\n| utf8_unicode_ci |\n+-------------------------------------------------------------------------+\n\nUsing CAST() to order an ENUM field as a CHAR rather than the internal\nnumerical value:\n\nCREATE TABLE enum_list (enum_field enum(\'c\',\'a\',\'b\'));\n\nINSERT INTO enum_list (enum_field) \nVALUES(\'c\'),(\'a\'),(\'c\'),(\'b\');\n\nSELECT * FROM enum_list \nORDER BY enum_field;\n+------------+\n| enum_field |\n+------------+\n| c |\n| c |\n| a |\n| b |\n+------------+\n\nSELECT * FROM enum_list \nORDER BY CAST(enum_field AS CHAR);\n+------------+\n| enum_field |\n+------------+\n| a |\n| b |\n| c |\n| c |\n+------------+\n\nFrom MariaDB 5.5.31, the following will trigger warnings, since x\'aa\' and\n\'X\'aa\' no longer behave as a number. Previously, and in all versions of MySQL,\nno warnings are triggered since they did erroneously behave as a number:\n\nSELECT CAST(0xAA AS UNSIGNED), CAST(x\'aa\' AS UNSIGNED), CAST(X\'aa\' AS\nUNSIGNED);\n+------------------------+-------------------------+-------------------------+\n| CAST(0xAA AS UNSIGNED) | CAST(x\'aa\' AS UNSIGNED) | CAST(X\'aa\' AS UNSIGNED) |\n+------------------------+-------------------------+-------------------------+\n| 170 | 0 | 0 |\n+------------------------+-------------------------+-------------------------+\n1 row in set, 2 warnings (0.00 sec)\n\nWarning (Code 1292): Truncated incorrect INTEGER value: \'\\xAA\'\nWarning (Code 1292): Truncated incorrect INTEGER value: \'\\xAA\'\n\nCasting to intervals:\n\nSELECT CAST(2019-01-04 INTERVAL AS DAY_SECOND(2)) AS \"Cast\";\n\n+-------------+\n| Cast |\n+-------------+\n| 00:20:17.00 |\n+-------------+\n\nURL: https://mariadb.com/kb/en/cast/','','https://mariadb.com/kb/en/cast/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (638,36,'CHAR Function','Syntax\n------\n\nCHAR(N,... [USING charset_name])\n\nDescription\n-----------\n\nCHAR() interprets each argument as an INT and returns a string consisting of\nthe characters given by the code values of those integers. NULL values are\nskipped. By default, CHAR() returns a binary string. To produce a string in a\ngiven character set, use the optional USING clause:\n\nSELECT CHARSET(CHAR(0x65)), CHARSET(CHAR(0x65 USING utf8));\n+---------------------+--------------------------------+\n| CHARSET(CHAR(0x65)) | CHARSET(CHAR(0x65 USING utf8)) |\n+---------------------+--------------------------------+\n| binary | utf8 |\n+---------------------+--------------------------------+\n\nIf USING is given and the result string is illegal for the given character\nset, a warning is issued. Also, if strict SQL mode is enabled, the result from\nCHAR() becomes NULL.\n\nExamples\n--------\n\nSELECT CHAR(77,97,114,\'105\',97,\'68\',66);\n+----------------------------------+\n| CHAR(77,97,114,\'105\',97,\'68\',66) |\n+----------------------------------+\n| MariaDB |\n+----------------------------------+\n\nSELECT CHAR(77,77.3,\'77.3\');\n+----------------------+\n| CHAR(77,77.3,\'77.3\') |\n+----------------------+\n| MMM |\n+----------------------+\n1 row in set, 1 warning (0.00 sec)\n\nWarning (Code 1292): Truncated incorrect INTEGER value: \'77.3\'\n\nURL: https://mariadb.com/kb/en/char-function/','','https://mariadb.com/kb/en/char-function/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (639,36,'CHAR_LENGTH','Syntax\n------\n\nCHAR_LENGTH(str)\nCHARACTER_LENGTH(str)\n\nDescription\n-----------\n\nReturns the length of the given string argument, measured in characters. A\nmulti-byte character counts as a single character. This means that for a\nstring containing five two-byte characters, LENGTH() (or OCTET_LENGTH() in\nOracle mode) returns 10, whereas CHAR_LENGTH() returns 5. If the argument is\nNULL, it returns NULL.\n\nIf the argument is not a string value, it is converted into a string.\n\nIt is synonymous with the CHARACTER_LENGTH() function.\n\nExamples\n--------\n\nSELECT CHAR_LENGTH(\'MariaDB\');\n+------------------------+\n| CHAR_LENGTH(\'MariaDB\') |\n+------------------------+\n| 7 |\n+------------------------+\n\nWhen Oracle mode from MariaDB 10.3 is not set:\n\nSELECT CHAR_LENGTH(\'Ï€\'), LENGTH(\'Ï€\'), LENGTHB(\'Ï€\'), OCTET_LENGTH(\'Ï€\');\n+-------------------+--------------+---------------+--------------------+\n| CHAR_LENGTH(\'Ï€\') | LENGTH(\'Ï€\') | LENGTHB(\'Ï€\') | OCTET_LENGTH(\'Ï€\') |\n+-------------------+--------------+---------------+--------------------+\n| 1 | 2 | 2 | 2 |\n+-------------------+--------------+---------------+--------------------+\n\nIn Oracle mode from MariaDB 10.3:\n\nSELECT CHAR_LENGTH(\'Ï€\'), LENGTH(\'Ï€\'), LENGTHB(\'Ï€\'), OCTET_LENGTH(\'Ï€\');\n+-------------------+--------------+---------------+--------------------+\n| CHAR_LENGTH(\'Ï€\') | LENGTH(\'Ï€\') | LENGTHB(\'Ï€\') | OCTET_LENGTH(\'Ï€\') |\n+-------------------+--------------+---------------+--------------------+\n| 1 | 1 | 2 | 2 |\n+-------------------+--------------+---------------+--------------------+\n\nURL: https://mariadb.com/kb/en/char_length/','','https://mariadb.com/kb/en/char_length/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (640,36,'CHR','MariaDB starting with 10.3.1\n----------------------------\nThe CHR() function was introduced in MariaDB 10.3.1 to provide Oracle\ncompatibility\n\nSyntax\n------\n\nCHR(N)\n\nDescription\n-----------\n\nCHR() interprets each argument N as an integer and returns a VARCHAR(1) string\nconsisting of the character given by the code values of the integer. The\ncharacter set and collation of the string are set according to the values of\nthe character_set_database and collation_database system variables.\n\nCHR() is similar to the CHAR() function, but only accepts a single argument.\n\nCHR() is available in all sql_modes.\n\nExamples\n--------\n\nSELECT CHR(67);\n+---------+\n| CHR(67) |\n+---------+\n| C |\n+---------+\n\nSELECT CHR(\'67\');\n+-----------+\n| CHR(\'67\') |\n+-----------+\n| C |\n+-----------+\n\nSELECT CHR(\'C\');\n+----------+\n| CHR(\'C\') |\n+----------+\n| |\n+----------+\n1 row in set, 1 warning (0.000 sec)\n\nSHOW WARNINGS;\n+---------+------+----------------------------------------+\n| Level | Code | Message |\n+---------+------+----------------------------------------+\n| Warning | 1292 | Truncated incorrect INTEGER value: \'C\' |\n+---------+------+----------------------------------------+\n\nURL: https://mariadb.com/kb/en/chr/','','https://mariadb.com/kb/en/chr/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (641,36,'CONCAT','Syntax\n------\n\nCONCAT(str1,str2,...)\n\nDescription\n-----------\n\nReturns the string that results from concatenating the arguments. May have one\nor more arguments. If all arguments are non-binary strings, the result is a\nnon-binary string. If the arguments include any binary strings, the result is\na binary string. A numeric argument is converted to its equivalent binary\nstring form; if you want to avoid that, you can use an explicit type cast, as\nin this example:\n\nSELECT CONCAT(CAST(int_col AS CHAR), char_col);\n\nCONCAT() returns NULL if any argument is NULL.\n\nA NULL parameter hides all information contained in other parameters from the\nresult. Sometimes this is not desirable; to avoid this, you can:\n\n* Use the CONCAT_WS() function with an empty separator, because that function\nis NULL-safe.\n* Use IFNULL() to turn NULLs into empty strings.\n\nOracle Mode\n-----------\n\nMariaDB starting with 10.3\n--------------------------\nIn Oracle mode from MariaDB 10.3, CONCAT ignores NULL.\n\nExamples\n--------\n\nSELECT CONCAT(\'Ma\', \'ria\', \'DB\');\n+---------------------------+\n| CONCAT(\'Ma\', \'ria\', \'DB\') |\n+---------------------------+\n| MariaDB |\n+---------------------------+\n\nSELECT CONCAT(\'Ma\', \'ria\', NULL, \'DB\');\n+---------------------------------+\n| CONCAT(\'Ma\', \'ria\', NULL, \'DB\') |\n+---------------------------------+\n| NULL |\n+---------------------------------+\n\nSELECT CONCAT(42.0);\n+--------------+\n| CONCAT(42.0) |\n+--------------+\n| 42.0 |\n+--------------+\n\nUsing IFNULL() to handle NULLs:\n\nSELECT CONCAT(\'The value of @v is: \', IFNULL(@v, \'\'));\n+------------------------------------------------+\n| CONCAT(\'The value of @v is: \', IFNULL(@v, \'\')) |\n+------------------------------------------------+\n| The value of @v is: |\n+------------------------------------------------+\n\nIn Oracle mode, from MariaDB 10.3:\n\nSELECT CONCAT(\'Ma\', \'ria\', NULL, \'DB\');\n+---------------------------------+\n| CONCAT(\'Ma\', \'ria\', NULL, \'DB\') |\n+---------------------------------+\n| MariaDB |\n+---------------------------------+\n\nURL: https://mariadb.com/kb/en/concat/','','https://mariadb.com/kb/en/concat/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (642,36,'CONCAT_WS','Syntax\n------\n\nCONCAT_WS(separator,str1,str2,...)\n\nDescription\n-----------\n\nCONCAT_WS() stands for Concatenate With Separator and is a special form of\nCONCAT(). The first argument is the separator for the rest of the arguments.\nThe separator is added between the strings to be concatenated. The separator\ncan be a string, as can the rest of the arguments.\n\nIf the separator is NULL, the result is NULL; all other NULL values are\nskipped. This makes CONCAT_WS() suitable when you want to concatenate some\nvalues and avoid losing all information if one of them is NULL.\n\nExamples\n--------\n\nSELECT CONCAT_WS(\',\',\'First name\',\'Second name\',\'Last Name\');\n+-------------------------------------------------------+\n| CONCAT_WS(\',\',\'First name\',\'Second name\',\'Last Name\') |\n+-------------------------------------------------------+\n| First name,Second name,Last Name |\n+-------------------------------------------------------+\n\nSELECT CONCAT_WS(\'-\',\'Floor\',NULL,\'Room\');\n+------------------------------------+\n| CONCAT_WS(\'-\',\'Floor\',NULL,\'Room\') |\n+------------------------------------+\n| Floor-Room |\n+------------------------------------+\n\nIn some cases, remember to include a space in the separator string:\n\nSET @a = \'gnu\', @b = \'penguin\', @c = \'sea lion\';\nQuery OK, 0 rows affected (0.00 sec)\n\nSELECT CONCAT_WS(\', \', @a, @b, @c);\n+-----------------------------+\n| CONCAT_WS(\', \', @a, @b, @c) |\n+-----------------------------+\n| gnu, penguin, sea lion |\n+-----------------------------+\n\nUsing CONCAT_WS() to handle NULLs:\n\nSET @a = \'a\', @b = NULL, @c = \'c\';\n\nSELECT CONCAT_WS(\'\', @a, @b, @c);\n+---------------------------+\n| CONCAT_WS(\'\', @a, @b, @c) |\n+---------------------------+\n| ac |\n+---------------------------+\n\nURL: https://mariadb.com/kb/en/concat_ws/','','https://mariadb.com/kb/en/concat_ws/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (643,36,'CONVERT','Syntax\n------\n\nCONVERT(expr,type), CONVERT(expr USING transcoding_name)\n\nDescription\n-----------\n\nThe CONVERT() and CAST() functions take a value of one type and produce a\nvalue of another type.\n\nThe type can be one of the following values:\n\n* BINARY\n* CHAR\n* DATE\n* DATETIME\n* DECIMAL[(M[,D])]\n* DOUBLE\n* FLOAT (from MariaDB 10.4.5)\n* INTEGER\nShort for SIGNED INTEGER\n\n* SIGNED [INTEGER]\n* UNSIGNED [INTEGER]\n* TIME\n* VARCHAR (in Oracle mode, from MariaDB 10.3)\n\nNote that in MariaDB, INT and INTEGER are the same thing.\n\nBINARY produces a string with the BINARY data type. If the optional length is\ngiven, BINARY(N) causes the cast to use no more than N bytes of the argument.\nValues shorter than the given number in bytes are padded with 0x00 bytes to\nmake them equal the length value.\n\nCHAR(N) causes the cast to use no more than the number of characters given in\nthe argument.\n\nThe main difference between the CAST() and CONVERT() is that\nCONVERT(expr,type) is ODBC syntax while CAST(expr as type) and CONVERT(...\nUSING ...) are SQL92 syntax.\n\nCONVERT() with USING is used to convert data between different character sets.\nIn MariaDB, transcoding names are the same as the corresponding character set\nnames. For example, this statement converts the string \'abc\' in the default\ncharacter set to the corresponding string in the utf8 character set:\n\nSELECT CONVERT(\'abc\' USING utf8);\n\nExamples\n--------\n\nSELECT enum_col FROM tbl_name \nORDER BY CAST(enum_col AS CHAR);\n\nConverting a BINARY to string to permit the LOWER function to work:\n\nSET @x = \'AardVark\';\n\nSET @x = BINARY \'AardVark\';\n\nSELECT LOWER(@x), LOWER(CONVERT (@x USING latin1));\n+-----------+----------------------------------+\n| LOWER(@x) | LOWER(CONVERT (@x USING latin1)) |\n+-----------+----------------------------------+\n| AardVark | aardvark |\n+-----------+----------------------------------+\n\nURL: https://mariadb.com/kb/en/convert/','','https://mariadb.com/kb/en/convert/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (644,36,'ELT','Syntax\n------\n\nELT(N, str1[, str2, str3,...])\n\nDescription\n-----------\n\nTakes a numeric argument and a series of string arguments. Returns the string\nthat corresponds to the given numeric position. For instance, it returns str1\nif N is 1, str2 if N is 2, and so on. If the numeric argument is a FLOAT,\nMariaDB rounds it to the nearest INTEGER. If the numeric argument is less than\n1, greater than the total number of arguments, or not a number, ELT() returns\nNULL. It must have at least two arguments.\n\nIt is complementary to the FIELD() function.\n\nExamples\n--------\n\nSELECT ELT(1, \'ej\', \'Heja\', \'hej\', \'foo\');\n+------------------------------------+\n| ELT(1, \'ej\', \'Heja\', \'hej\', \'foo\') |\n+------------------------------------+\n| ej |\n+------------------------------------+\n\nSELECT ELT(4, \'ej\', \'Heja\', \'hej\', \'foo\');\n+------------------------------------+\n| ELT(4, \'ej\', \'Heja\', \'hej\', \'foo\') |\n+------------------------------------+\n| foo |\n+------------------------------------+\n\nURL: https://mariadb.com/kb/en/elt/','','https://mariadb.com/kb/en/elt/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (645,36,'EXPORT_SET','Syntax\n------\n\nEXPORT_SET(bits, on, off[, separator[, number_of_bits]])\n\nDescription\n-----------\n\nTakes a minimum of three arguments. Returns a string where each bit in the\ngiven bits argument is returned, with the string values given for on and off.\n\nBits are examined from right to left, (from low-order to high-order bits).\nStrings are added to the result from left to right, separated by a separator\nstring (defaults as \',\'). You can optionally limit the number of bits the\nEXPORT_SET() function examines using the number_of_bits option.\n\nIf any of the arguments are set as NULL, the function returns NULL.\n\nExamples\n--------\n\nSELECT EXPORT_SET(5,\'Y\',\'N\',\',\',4);\n+-----------------------------+\n| EXPORT_SET(5,\'Y\',\'N\',\',\',4) |\n+-----------------------------+\n| Y,N,Y,N |\n+-----------------------------+\n\nSELECT EXPORT_SET(6,\'1\',\'0\',\',\',10);\n+------------------------------+\n| EXPORT_SET(6,\'1\',\'0\',\',\',10) |\n+------------------------------+\n| 0,1,1,0,0,0,0,0,0,0 |\n+------------------------------+\n\nURL: https://mariadb.com/kb/en/export_set/','','https://mariadb.com/kb/en/export_set/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (646,36,'EXTRACTVALUE','Syntax\n------\n\nEXTRACTVALUE(xml_frag, xpath_expr)\n\nDescription\n-----------\n\nThe EXTRACTVALUE() function takes two string arguments: a fragment of XML\nmarkup and an XPath expression, (also known as a locator). It returns the text\n(That is, CDDATA), of the first text node which is a child of the element or\nelements matching the XPath expression.\n\nIn cases where a valid XPath expression does not match any text nodes in a\nvalid XML fragment, (including the implicit /text() expression), the\nEXTRACTVALUE() function returns an empty string.\n\nInvalid Arguments\n-----------------\n\nWhen either the XML fragment or the XPath expression is NULL, the\nEXTRACTVALUE() function returns NULL. When the XML fragment is invalid, it\nraises a warning Code 1525:\n\nWarning (Code 1525): Incorrect XML value: \'parse error at line 1 pos 11:\nunexpected END-OF-INPUT\'\n\nWhen the XPath value is invalid, it generates an Error 1105:\n\nERROR 1105 (HY000): XPATH syntax error: \')\'\n\nExplicit text() Expressions\n---------------------------\n\nThis function is the equivalent of performing a match using the XPath\nexpression after appending /text(). In other words:\n\nSELECT\n EXTRACTVALUE(\'<cases><case>example</case></cases>\', \'/cases/case\')\n AS \'Base Example\',\n EXTRACTVALUE(\'<cases><case>example</case></cases>\', \'/cases/case/text()\')\n AS \'text() Example\';\n+--------------+----------------+\n| Base Example | text() Example |\n+--------------+----------------+\n| example | example |\n+--------------+----------------+\n\nCount Matches\n-------------\n\nWhen EXTRACTVALUE() returns multiple matches, it returns the content of the\nfirst child text node of each matching element, in the matched order, as a\nsingle, space-delimited string.\n\nBy design, the EXTRACTVALUE() function makes no distinction between a match on\nan empty element and no match at all. If you need to determine whether no\nmatching element was found in the XML fragment or if an element was found that\ncontained no child text nodes, use the XPath count() function.\n\nFor instance, when looking for a value that exists, but contains no child text\nnodes, you would get a count of the number of matching instances:\n\nSELECT\n EXTRACTVALUE(\'<cases><case/></cases>\', \'/cases/case\')\n AS \'Empty Example\',\n EXTRACTVALUE(\'<cases><case/></cases>\', \'count(/cases/case)\')\n AS \'count() Example\';\n+---------------+-----------------+\n| Empty Example | count() Example |\n+---------------+-----------------+\n| | 1 |\n+---------------+-----------------+\n\nAlternatively, when looking for a value that doesn\'t exist, count() returns 0.\n\nSELECT\n EXTRACTVALUE(\'<cases><case/></cases>\', \'/cases/person\')\n AS \'No Match Example\',\n EXTRACTVALUE(\'<cases><case/></cases>\', \'count(/cases/person)\')\n AS \'count() Example\';\n+------------------+-----------------+\n| No Match Example | count() Example |\n+------------------+-----------------+\n| | 0|\n+------------------+-----------------+\n\nMatches\n-------\n\nImportant: The EXTRACTVALUE() function only returns CDDATA. It does not return\ntags that the element might contain or the text that these child elements\ncontain.\n\nSELECT\n\nEXTRACTVALUE(\'<cases><case>Person<email>x@example.com</email></case></cases>\',\n\'/cases\')\n AS Case;\n+--------+\n| Case |\n+--------+\n| Person |\n+--------+\n\nNote, in the above example, while the XPath expression matches to the parent\n<case> instance, it does not return the contained <email> tag or its content.\n\nExamples\n--------\n\nSELECT\n ExtractValue(\'<a>ccc<b>ddd</b></a>\', \'/a\') AS val1,\n ExtractValue(\'<a>ccc<b>ddd</b></a>\', \'/a/b\') AS val2,\n ExtractValue(\'<a>ccc<b>ddd</b></a>\', \'//b\') AS val3,\n ExtractValue(\'<a>ccc<b>ddd</b></a>\', \'/b\') AS val4,\n ExtractValue(\'<a>ccc<b>ddd</b><b>eee</b></a>\', \'//b\') AS val5;\n+------+------+------+------+---------+\n| val1 | val2 | val3 | val4 | val5 |\n+------+------+------+------+---------+\n| ccc | ddd | ddd | | ddd eee |\n+------+------+------+------+---------+\n\nURL: https://mariadb.com/kb/en/extractvalue/','','https://mariadb.com/kb/en/extractvalue/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (647,36,'FIELD','Syntax\n------\n\nFIELD(pattern, str1[,str2,...])\n\nDescription\n-----------\n\nReturns the index position of the string or number matching the given pattern.\nReturns 0 in the event that none of the arguments match the pattern. Raises an\nError 1582 if not given at least two arguments.\n\nWhen all arguments given to the FIELD() function are strings, they are treated\nas case-insensitive. When all the arguments are numbers, they are treated as\nnumbers. Otherwise, they are treated as doubles.\n\nIf the given pattern occurs more than once, the FIELD() function only returns\nthe index of the first instance. If the given pattern is NULL, the function\nreturns 0, as a NULL pattern always fails to match.\n\nThis function is complementary to the ELT() function.\n\nExamples\n--------\n\nSELECT FIELD(\'ej\', \'Hej\', \'ej\', \'Heja\', \'hej\', \'foo\') \n AS \'Field Results\';\n+---------------+\n| Field Results | \n+---------------+\n| 2 |\n+---------------+\n\nSELECT FIELD(\'fo\', \'Hej\', \'ej\', \'Heja\', \'hej\', \'foo\')\n AS \'Field Results\';\n+---------------+\n| Field Results | \n+---------------+\n| 0 |\n+---------------+\n\nSELECT FIELD(1, 2, 3, 4, 5, 1) AS \'Field Results\';\n+---------------+\n| Field Results |\n+---------------+\n| 5 |\n+---------------+\n\nSELECT FIELD(NULL, 2, 3) AS \'Field Results\';\n+---------------+\n| Field Results |\n+---------------+\n| 0 |\n+---------------+\n\nSELECT FIELD(\'fail\') AS \'Field Results\';\nError 1582 (42000): Incorrect parameter count in call\nto native function \'field\'\n\nURL: https://mariadb.com/kb/en/field/','','https://mariadb.com/kb/en/field/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (648,36,'FIND_IN_SET','Syntax\n------\n\nFIND_IN_SET(pattern, strlist)\n\nDescription\n-----------\n\nReturns the index position where the given pattern occurs in a string list.\nThe first argument is the pattern you want to search for. The second argument\nis a string containing comma-separated variables. If the second argument is of\nthe SET data-type, the function is optimized to use bit arithmetic.\n\nIf the pattern does not occur in the string list or if the string list is an\nempty string, the function returns 0. If either argument is NULL, the function\nreturns NULL. The function does not return the correct result if the pattern\ncontains a comma (\",\") character.\n\nExamples\n--------\n\nSELECT FIND_IN_SET(\'b\',\'a,b,c,d\') AS \"Found Results\";\n+---------------+\n| Found Results |\n+---------------+\n| 2 |\n+---------------+\n\nURL: https://mariadb.com/kb/en/find_in_set/','','https://mariadb.com/kb/en/find_in_set/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (649,36,'FORMAT','Syntax\n------\n\nFORMAT(num, decimal_position[, locale])\n\nDescription\n-----------\n\nFormats the given number for display as a string, adding separators to\nappropriate position and rounding the results to the given decimal position.\nFor instance, it would format 15233.345 to 15,233.35.\n\nIf the given decimal position is 0, it rounds to return no decimal point or\nfractional part. You can optionally specify a locale value to format numbers\nto the pattern appropriate for the given region.\n\nExamples\n--------\n\nSELECT FORMAT(1234567890.09876543210, 4) AS \'Format\';\n+--------------------+\n| Format |\n+--------------------+\n| 1,234,567,890.0988 |\n+--------------------+\n\nSELECT FORMAT(1234567.89, 4) AS \'Format\';\n+----------------+\n| Format |\n+----------------+\n| 1,234,567.8900 |\n+----------------+\n\nSELECT FORMAT(1234567.89, 0) AS \'Format\';\n+-----------+\n| Format |\n+-----------+\n| 1,234,568 |\n+-----------+\n\nSELECT FORMAT(123456789,2,\'rm_CH\') AS \'Format\';\n+----------------+\n| Format |\n+----------------+\n| 123\'456\'789,00 |\n+----------------+\n\nURL: https://mariadb.com/kb/en/format/','','https://mariadb.com/kb/en/format/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (650,36,'FROM_BASE64','Syntax\n------\n\nFROM_BASE64(str)\n\nDescription\n-----------\n\nDecodes the given base-64 encode string, returning the result as a binary\nstring. Returns NULL if the given string is NULL or if it\'s invalid.\n\nIt is the reverse of the TO_BASE64 function.\n\nThere are numerous methods to base-64 encode a string. MariaDB uses the\nfollowing:\n\n* It encodes alphabet value 64 as \'+\'.\n* It encodes alphabet value 63 as \'/\'.\n* It codes output in groups of four printable characters. Each three byte of\ndata encoded uses four characters. If the final group is incomplete, it pads\nthe difference with the \'=\' character.\n* It divides long output, adding a new line very 76 characters.\n* In decoding, it recognizes and ignores newlines, carriage returns, tabs and\nspace whitespace characters.\n\nSELECT TO_BASE64(\'Maria\') AS \'Input\';\n+-----------+\n| Input |\n+-----------+\n| TWFyaWE= |\n+-----------+\n\nSELECT FROM_BASE64(\'TWFyaWE=\') AS \'Output\';\n+--------+\n| Output |\n+--------+\n| Maria |\n+--------+\n\nURL: https://mariadb.com/kb/en/from_base64/','','https://mariadb.com/kb/en/from_base64/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (651,36,'HEX','Syntax\n------\n\nHEX(N_or_S)\n\nDescription\n-----------\n\nIf N_or_S is a number, returns a string representation of the hexadecimal\nvalue of N, where N is a longlong (BIGINT) number. This is equivalent to\nCONV(N,10,16).\n\nIf N_or_S is a string, returns a hexadecimal string representation of N_or_S\nwhere each byte of each character in N_or_S is converted to two hexadecimal\ndigits. If N_or_S is NULL, returns NULL. The inverse of this operation is\nperformed by the UNHEX() function.\n\nMariaDB starting with 10.5.0\n----------------------------\nHEX() with an INET6 argument returns a hexadecimal representation of the\nunderlying 16-byte binary string.\n\nExamples\n--------\n\nSELECT HEX(255);\n+----------+\n| HEX(255) |\n+----------+\n| FF |\n+----------+\n\nSELECT 0x4D617269614442;\n+------------------+\n| 0x4D617269614442 |\n+------------------+\n| MariaDB |\n+------------------+\n\nSELECT HEX(\'MariaDB\');\n+----------------+\n| HEX(\'MariaDB\') |\n+----------------+\n| 4D617269614442 |\n+----------------+\n\nFrom MariaDB 10.5.0:\n\nSELECT HEX(CAST(\'2001:db8::ff00:42:8329\' AS INET6));\n+----------------------------------------------+\n| HEX(CAST(\'2001:db8::ff00:42:8329\' AS INET6)) |\n+----------------------------------------------+\n| 20010DB8000000000000FF0000428329 |\n+----------------------------------------------+\n\nURL: https://mariadb.com/kb/en/hex/','','https://mariadb.com/kb/en/hex/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (652,36,'INSTR','Syntax\n------\n\nINSTR(str,substr)\n\nDescription\n-----------\n\nReturns the position of the first occurrence of substring substr in string\nstr. This is the same as the two-argument form of LOCATE(), except that the\norder of the arguments is reversed.\n\nINSTR() performs a case-insensitive search.\n\nIf any argument is NULL, returns NULL.\n\nExamples\n--------\n\nSELECT INSTR(\'foobarbar\', \'bar\');\n+---------------------------+\n| INSTR(\'foobarbar\', \'bar\') |\n+---------------------------+\n| 4 |\n+---------------------------+\n\nSELECT INSTR(\'My\', \'Maria\');\n+----------------------+\n| INSTR(\'My\', \'Maria\') |\n+----------------------+\n| 0 |\n+----------------------+\n\nURL: https://mariadb.com/kb/en/instr/','','https://mariadb.com/kb/en/instr/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (653,36,'LCASE','Syntax\n------\n\nLCASE(str)\n\nDescription\n-----------\n\nLCASE() is a synonym for LOWER().\n\nURL: https://mariadb.com/kb/en/lcase/','','https://mariadb.com/kb/en/lcase/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (654,36,'LEFT','Syntax\n------\n\nLEFT(str,len)\n\nDescription\n-----------\n\nReturns the leftmost len characters from the string str, or NULL if any\nargument is NULL.\n\nExamples\n--------\n\nSELECT LEFT(\'MariaDB\', 5);\n+--------------------+\n| LEFT(\'MariaDB\', 5) |\n+--------------------+\n| Maria |\n+--------------------+\n\nURL: https://mariadb.com/kb/en/left/','','https://mariadb.com/kb/en/left/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (655,36,'INSERT Function','Syntax\n------\n\nINSERT(str,pos,len,newstr)\n\nDescription\n-----------\n\nReturns the string str, with the substring beginning at position pos and len\ncharacters long replaced by the string newstr. Returns the original string if\npos is not within the length of the string. Replaces the rest of the string\nfrom position pos if len is not within the length of the rest of the string.\nReturns NULL if any argument is NULL.\n\nExamples\n--------\n\nSELECT INSERT(\'Quadratic\', 3, 4, \'What\');\n+-----------------------------------+\n| INSERT(\'Quadratic\', 3, 4, \'What\') |\n+-----------------------------------+\n| QuWhattic |\n+-----------------------------------+\n\nSELECT INSERT(\'Quadratic\', -1, 4, \'What\');\n+------------------------------------+\n| INSERT(\'Quadratic\', -1, 4, \'What\') |\n+------------------------------------+\n| Quadratic |\n+------------------------------------+\n\nSELECT INSERT(\'Quadratic\', 3, 100, \'What\');\n+-------------------------------------+\n| INSERT(\'Quadratic\', 3, 100, \'What\') |\n+-------------------------------------+\n| QuWhat |\n+-------------------------------------+\n\nURL: https://mariadb.com/kb/en/insert-function/','','https://mariadb.com/kb/en/insert-function/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (656,36,'LENGTH','Syntax\n------\n\nLENGTH(str)\n\nDescription\n-----------\n\nReturns the length of the string str.\n\nIn the default mode, when Oracle mode from MariaDB 10.3 is not set, the length\nis measured in bytes. In this case, a multi-byte character counts as multiple\nbytes. This means that for a string containing five two-byte characters,\nLENGTH() returns 10, whereas CHAR_LENGTH() returns 5.\n\nWhen running Oracle mode from MariaDB 10.3, the length is measured in\ncharacters, and LENGTH is a synonym for CHAR_LENGTH().\n\nIf str is not a string value, it is converted into a string. If str is NULL,\nthe function returns NULL.\n\nExamples\n--------\n\nSELECT LENGTH(\'MariaDB\');\n+-------------------+\n| LENGTH(\'MariaDB\') |\n+-------------------+\n| 7 |\n+-------------------+\n\nWhen Oracle mode from MariaDB 10.3 is not set:\n\nSELECT CHAR_LENGTH(\'Ï€\'), LENGTH(\'Ï€\'), LENGTHB(\'Ï€\'), OCTET_LENGTH(\'Ï€\');\n+-------------------+--------------+---------------+--------------------+\n| CHAR_LENGTH(\'Ï€\') | LENGTH(\'Ï€\') | LENGTHB(\'Ï€\') | OCTET_LENGTH(\'Ï€\') |\n+-------------------+--------------+---------------+--------------------+\n| 1 | 2 | 2 | 2 |\n+-------------------+--------------+---------------+--------------------+\n\nIn Oracle mode from MariaDB 10.3:\n\nSELECT CHAR_LENGTH(\'Ï€\'), LENGTH(\'Ï€\'), LENGTHB(\'Ï€\'), OCTET_LENGTH(\'Ï€\');\n+-------------------+--------------+---------------+--------------------+\n| CHAR_LENGTH(\'Ï€\') | LENGTH(\'Ï€\') | LENGTHB(\'Ï€\') | OCTET_LENGTH(\'Ï€\') |\n+-------------------+--------------+---------------+--------------------+\n| 1 | 1 | 2 | 2 |\n+-------------------+--------------+---------------+--------------------+\n\nURL: https://mariadb.com/kb/en/length/','','https://mariadb.com/kb/en/length/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (657,36,'LENGTHB','MariaDB starting with 10.3.1\n----------------------------\nIntroduced in MariaDB 10.3.1 as part of the Oracle compatibility enhancements.\n\nSyntax\n------\n\nLENGTHB(str)\n\nDescription\n-----------\n\nLENGTHB() returns the length of the given string, in bytes. When Oracle mode\nis not set, this is a synonym for LENGTH.\n\nA multi-byte character counts as multiple bytes. This means that for a string\ncontaining five two-byte characters, LENGTHB() returns 10, whereas\nCHAR_LENGTH() returns 5.\n\nIf str is not a string value, it is converted into a string. If str is NULL,\nthe function returns NULL.\n\nExamples\n--------\n\nWhen Oracle mode from MariaDB 10.3 is not set:\n\nSELECT CHAR_LENGTH(\'Ï€\'), LENGTH(\'Ï€\'), LENGTHB(\'Ï€\'), OCTET_LENGTH(\'Ï€\');\n+-------------------+--------------+---------------+--------------------+\n| CHAR_LENGTH(\'Ï€\') | LENGTH(\'Ï€\') | LENGTHB(\'Ï€\') | OCTET_LENGTH(\'Ï€\') |\n+-------------------+--------------+---------------+--------------------+\n| 1 | 2 | 2 | 2 |\n+-------------------+--------------+---------------+--------------------+\n\nIn Oracle mode from MariaDB 10.3:\n\nSELECT CHAR_LENGTH(\'Ï€\'), LENGTH(\'Ï€\'), LENGTHB(\'Ï€\'), OCTET_LENGTH(\'Ï€\');\n+-------------------+--------------+---------------+--------------------+\n| CHAR_LENGTH(\'Ï€\') | LENGTH(\'Ï€\') | LENGTHB(\'Ï€\') | OCTET_LENGTH(\'Ï€\') |\n+-------------------+--------------+---------------+--------------------+\n| 1 | 1 | 2 | 2 |\n+-------------------+--------------+---------------+--------------------+\n\nURL: https://mariadb.com/kb/en/lengthb/','','https://mariadb.com/kb/en/lengthb/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (658,36,'LIKE','Syntax\n------\n\nexpr LIKE pat [ESCAPE \'escape_char\']\nexpr NOT LIKE pat [ESCAPE \'escape_char\']\n\nDescription\n-----------\n\nTests whether expr matches the pattern pat. Returns either 1 (TRUE) or 0\n(FALSE). Both expr and pat may be any valid expression and are evaluated to\nstrings. Patterns may use the following wildcard characters:\n\n* % matches any number of characters, including zero.\n* _ matches any single character.\n\nUse NOT LIKE to test if a string does not match a pattern. This is equivalent\nto using the NOT operator on the entire LIKE expression.\n\nIf either the expression or the pattern is NULL, the result is NULL.\n\nLIKE performs case-insensitive substring matches if the collation for the\nexpression and pattern is case-insensitive. For case-sensitive matches,\ndeclare either argument to use a binary collation using COLLATE, or coerce\neither of them to a BINARY string using CAST. Use SHOW COLLATION to get a list\nof available collations. Collations ending in _bin are case-sensitive.\n\nNumeric arguments are coerced to binary strings.\n\nThe _ wildcard matches a single character, not byte. It will only match a\nmulti-byte character if it is valid in the expression\'s character set. For\nexample, _ will match _utf8\"€\", but it will not match _latin1\"€\" because the\nEuro sign is not a valid latin1 character. If necessary, use CONVERT to use\nthe expression in a different character set.\n\nIf you need to match the characters _ or %, you must escape them. By default,\nyou can prefix the wildcard characters the backslash character \\ to escape\nthem. The backslash is used both to encode special characters like newlines\nwhen a string is parsed as well as to escape wildcards in a pattern after\nparsing. Thus, to match an actual backslash, you sometimes need to\ndouble-escape it as \"\\\\\\\\\".\n\nTo avoid difficulties with the backslash character, you can change the\nwildcard escape character using ESCAPE in a LIKE expression. The argument to\nESCAPE must be a single-character string.\n\nExamples\n--------\n\nSelect the days that begin with \"T\":\n\nCREATE TABLE t1 (d VARCHAR(16));\nINSERT INTO t1 VALUES \n (\"Monday\"), (\"Tuesday\"), (\"Wednesday\"),\n (\"Thursday\"), (\"Friday\"), (\"Saturday\"), (\"Sunday\");\nSELECT * FROM t1 WHERE d LIKE \"T%\";\n\nSELECT * FROM t1 WHERE d LIKE \"T%\";\n+----------+\n| d |\n+----------+\n| Tuesday |\n| Thursday |\n+----------+\n\nSelect the days that contain the substring \"es\":\n\nSELECT * FROM t1 WHERE d LIKE \"%es%\";\n\nSELECT * FROM t1 WHERE d LIKE \"%es%\";\n+-----------+\n| d |\n+-----------+\n| Tuesday |\n| Wednesday |\n+-----------+\n\nSelect the six-character day names:\n\nSELECT * FROM t1 WHERE d like \"___day\";\n\nSELECT * FROM t1 WHERE d like \"___day\";\n+---------+\n| d |\n+---------+\n| Monday |\n| Friday |\n| Sunday |\n+---------+\n\nWith the default collations, LIKE is case-insensitive:\n\nSELECT * FROM t1 where d like \"t%\";\n\nSELECT * FROM t1 where d like \"t%\";\n+----------+\n| d |\n+----------+\n| Tuesday |\n| Thursday |\n+----------+\n\nUse COLLATE to specify a binary collation, forcing case-sensitive matches:\n\nSELECT * FROM t1 WHERE d like \"t%\" COLLATE latin1_bin;\n\nSELECT * FROM t1 WHERE d like \"t%\" COLLATE latin1_bin;\nEmpty set (0.00 sec)\n\nYou can include functions and operators in the expression to match. Select\ndates based on their day name:\n\nCREATE TABLE t2 (d DATETIME);\nINSERT INTO t2 VALUES\n (\"2007-01-30 21:31:07\"),\n (\"1983-10-15 06:42:51\"),\n (\"2011-04-21 12:34:56\"),\n (\"2011-10-30 06:31:41\"),\n (\"2011-01-30 14:03:25\"),\n (\"2004-10-07 11:19:34\");\nSELECT * FROM t2 WHERE DAYNAME(d) LIKE \"T%\";\n\nSELECT * FROM t2 WHERE DAYNAME(d) LIKE \"T%\";\n+------------------+\n| d |\n+------------------+\n| 2007-01-30 21:31 |\n| 2011-04-21 12:34 |\n| 2004-10-07 11:19 |\n+------------------+\n3 rows in set, 7 warnings (0.00 sec)\n\nOptimizing LIKE\n---------------\n\n* MariaDB can use indexes for LIKE on string columns in the case where the\nLIKE doesn\'t start with % or _.\n* Starting from MariaDB 10.0, one can set the\noptimizer_use_condition_selectivity variable to 5. If this is done, then the\noptimizer will read optimizer_selectivity_sampling_limit rows to calculate the\nselectivity of the LIKE expression before starting to calculate the query\nplan. This can help speed up some LIKE queries by providing the optimizer with\nmore information about your data.\n\nURL: https://mariadb.com/kb/en/like/','','https://mariadb.com/kb/en/like/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (659,36,'LOCATE','Syntax\n------\n\nLOCATE(substr,str), LOCATE(substr,str,pos)\n\nDescription\n-----------\n\nThe first syntax returns the position of the first occurrence of substring\nsubstr in string str. The second syntax returns the position of the first\noccurrence of substring substr in string str, starting at position pos.\nReturns 0 if substr is not in str.\n\nLOCATE() performs a case-insensitive search.\n\nIf any argument is NULL, returns NULL.\n\nINSTR() is the same as the two-argument form of LOCATE(), except that the\norder of the arguments is reversed.\n\nExamples\n--------\n\nSELECT LOCATE(\'bar\', \'foobarbar\');\n+----------------------------+\n| LOCATE(\'bar\', \'foobarbar\') |\n+----------------------------+\n| 4 |\n+----------------------------+\n\nSELECT LOCATE(\'My\', \'Maria\');\n+-----------------------+\n| LOCATE(\'My\', \'Maria\') |\n+-----------------------+\n| 0 |\n+-----------------------+\n\nSELECT LOCATE(\'bar\', \'foobarbar\', 5);\n+-------------------------------+\n| LOCATE(\'bar\', \'foobarbar\', 5) |\n+-------------------------------+\n| 7 |\n+-------------------------------+\n\nURL: https://mariadb.com/kb/en/locate/','','https://mariadb.com/kb/en/locate/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (660,36,'LOWER','Syntax\n------\n\nLOWER(str)\n\nDescription\n-----------\n\nReturns the string str with all characters changed to lowercase according to\nthe current character set mapping. The default is latin1 (cp1252 West\nEuropean).\n\nExamples\n--------\n\nSELECT LOWER(\'QUADRATICALLY\');\n+------------------------+\n| LOWER(\'QUADRATICALLY\') |\n+------------------------+\n| quadratically |\n+------------------------+\n\nLOWER() (and UPPER()) are ineffective when applied to binary strings (BINARY,\nVARBINARY, BLOB). To perform lettercase conversion, CONVERT the string to a\nnon-binary string:\n\nSET @str = BINARY \'North Carolina\';\n\nSELECT LOWER(@str), LOWER(CONVERT(@str USING latin1));\n+----------------+-----------------------------------+\n| LOWER(@str) | LOWER(CONVERT(@str USING latin1)) |\n+----------------+-----------------------------------+\n| North Carolina | north carolina |\n+----------------+-----------------------------------+\n\nURL: https://mariadb.com/kb/en/lower/','','https://mariadb.com/kb/en/lower/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (661,36,'LPAD','Syntax\n------\n\nLPAD(str, len [,padstr])\n\nDescription\n-----------\n\nReturns the string str, left-padded with the string padstr to a length of len\ncharacters. If str is longer than len, the return value is shortened to len\ncharacters. If padstr is omitted, the LPAD function pads spaces.\n\nPrior to MariaDB 10.3.1, the padstr parameter was mandatory.\n\nReturns NULL if given a NULL argument. If the result is empty (zero length),\nreturns either an empty string or, from MariaDB 10.3.6 with SQL_MODE=Oracle,\nNULL.\n\nThe Oracle mode version of the function can be accessed outside of Oracle mode\nby using LPAD_ORACLE as the function name.\n\nExamples\n--------\n\nSELECT LPAD(\'hello\',10,\'.\');\n+----------------------+\n| LPAD(\'hello\',10,\'.\') |\n+----------------------+\n| .....hello |\n+----------------------+\n\nSELECT LPAD(\'hello\',2,\'.\');\n+---------------------+\n| LPAD(\'hello\',2,\'.\') |\n+---------------------+\n| he |\n+---------------------+\n\nFrom MariaDB 10.3.1, with the pad string defaulting to space.\n\nSELECT LPAD(\'hello\',10);\n+------------------+\n| LPAD(\'hello\',10) |\n+------------------+\n| hello |\n+------------------+\n\nOracle mode version from MariaDB 10.3.6:\n\nSELECT LPAD(\'\',0),LPAD_ORACLE(\'\',0);\n+------------+-------------------+\n| LPAD(\'\',0) | LPAD_ORACLE(\'\',0) |\n+------------+-------------------+\n| | NULL |\n+------------+-------------------+\n\nURL: https://mariadb.com/kb/en/lpad/','','https://mariadb.com/kb/en/lpad/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (662,36,'LTRIM','Syntax\n------\n\nLTRIM(str)\n\nDescription\n-----------\n\nReturns the string str with leading space characters removed.\n\nReturns NULL if given a NULL argument. If the result is empty, returns either\nan empty string, or, from MariaDB 10.3.6 with SQL_MODE=Oracle, NULL.\n\nThe Oracle mode version of the function can be accessed outside of Oracle mode\nby using LTRIM_ORACLE as the function name.\n\nExamples\n--------\n\nSELECT QUOTE(LTRIM(\' MariaDB \'));\n+-------------------------------+\n| QUOTE(LTRIM(\' MariaDB \')) |\n+-------------------------------+\n| \'MariaDB \' |\n+-------------------------------+\n\nOracle mode version from MariaDB 10.3.6:\n\nSELECT LTRIM(\'\'),LTRIM_ORACLE(\'\');\n+-----------+------------------+\n| LTRIM(\'\') | LTRIM_ORACLE(\'\') |\n+-----------+------------------+\n| | NULL |\n+-----------+------------------+\n\nURL: https://mariadb.com/kb/en/ltrim/','','https://mariadb.com/kb/en/ltrim/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (663,36,'MAKE_SET','Syntax\n------\n\nMAKE_SET(bits,str1,str2,...)\n\nDescription\n-----------\n\nReturns a set value (a string containing substrings separated by \",\"\ncharacters) consisting of the strings that have the corresponding bit in bits\nset. str1 corresponds to bit 0, str2 to bit 1, and so on. NULL values in str1,\nstr2, ... are not appended to the result.\n\nExamples\n--------\n\nSELECT MAKE_SET(1,\'a\',\'b\',\'c\');\n+-------------------------+\n| MAKE_SET(1,\'a\',\'b\',\'c\') |\n+-------------------------+\n| a |\n+-------------------------+\n\nSELECT MAKE_SET(1 | 4,\'hello\',\'nice\',\'world\');\n+----------------------------------------+\n| MAKE_SET(1 | 4,\'hello\',\'nice\',\'world\') |\n+----------------------------------------+\n| hello,world |\n+----------------------------------------+\n\nSELECT MAKE_SET(1 | 4,\'hello\',\'nice\',NULL,\'world\');\n+---------------------------------------------+\n| MAKE_SET(1 | 4,\'hello\',\'nice\',NULL,\'world\') |\n+---------------------------------------------+\n| hello |\n+---------------------------------------------+\n\nSELECT QUOTE(MAKE_SET(0,\'a\',\'b\',\'c\'));\n+--------------------------------+\n| QUOTE(MAKE_SET(0,\'a\',\'b\',\'c\')) |\n+--------------------------------+\n| \'\' |\n+--------------------------------+\n\nURL: https://mariadb.com/kb/en/make_set/','','https://mariadb.com/kb/en/make_set/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (664,36,'MATCH AGAINST','Syntax\n------\n\nMATCH (col1,col2,...) AGAINST (expr [search_modifier])\n\nDescription\n-----------\n\nA special construct used to perform a fulltext search on a fulltext index.\n\nSee Fulltext Index Overview for a full description, and Full-text Indexes for\nmore articles on the topic.\n\nExamples\n--------\n\nCREATE TABLE ft_myisam(copy TEXT,FULLTEXT(copy)) ENGINE=MyISAM;\n\nINSERT INTO ft_myisam(copy) VALUES (\'Once upon a time\'), (\'There was a wicked\nwitch\'), \n (\'Who ate everybody up\');\n\nSELECT * FROM ft_myisam WHERE MATCH(copy) AGAINST(\'wicked\');\n+--------------------------+\n| copy |\n+--------------------------+\n| There was a wicked witch |\n+--------------------------+\n\nSELECT id, body, MATCH (title,body) AGAINST\n (\'Security implications of running MySQL as root\'\n IN NATURAL LANGUAGE MODE) AS score\n FROM articles WHERE MATCH (title,body) AGAINST\n (\'Security implications of running MySQL as root\'\n IN NATURAL LANGUAGE MODE);\n+----+-------------------------------------+-----------------+\n| id | body | score |\n+----+-------------------------------------+-----------------+\n| 4 | 1. Never run mysqld as root. 2. ... | 1.5219271183014 |\n| 6 | When configured properly, MySQL ... | 1.3114095926285 |\n+----+-------------------------------------+-----------------+\n\nURL: https://mariadb.com/kb/en/match-against/','','https://mariadb.com/kb/en/match-against/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (665,36,'MID','Syntax\n------\n\nMID(str,pos,len)\n\nDescription\n-----------\n\nMID(str,pos,len) is a synonym for SUBSTRING(str,pos,len).\n\nExamples\n--------\n\nSELECT MID(\'abcd\',4,1);\n+-----------------+\n| MID(\'abcd\',4,1) |\n+-----------------+\n| d |\n+-----------------+\n\nSELECT MID(\'abcd\',2,2);\n+-----------------+\n| MID(\'abcd\',2,2) |\n+-----------------+\n| bc |\n+-----------------+\n\nA negative starting position:\n\nSELECT MID(\'abcd\',-2,4);\n+------------------+\n| MID(\'abcd\',-2,4) |\n+------------------+\n| cd |\n+------------------+\n\nURL: https://mariadb.com/kb/en/mid/','','https://mariadb.com/kb/en/mid/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (666,36,'NATURAL_SORT_KEY','MariaDB starting with 10.7.0\n----------------------------\nNATURAL_SORT_KEY was added in MariaDB 10.7.0.\n\nSyntax\n------\n\nNATURAL_SORT_KEY(str)\n\nDescription\n-----------\n\nThe NATURAL_SORT_KEY function is used for sorting that is closer to natural\nsorting. Strings are sorted in alphabetical order, while numbers are treated\nin a way such that, for example, 10 is greater than 2, whereas in other forms\nof sorting, 2 would be greater than 10, just like z is greater than ya.\n\nThere are multiple natural sort implementations, differing in the way they\nhandle leading zeroes, fractions, i18n, negatives, decimals and so on.\n\nMariaDB\'s implementation ignores leading zeroes when performing the sort.\n\nYou can use also use NATURAL_SORT_KEY with generated columns. The value is not\nstored permanently in the table. When using a generated column, the virtual\ncolumn must be longer than the base column to cater for embedded numbers in\nthe string and MDEV-24582.\n\nExamples\n--------\n\nStrings and Numbers\n-------------------\n\nCREATE TABLE t1 (c TEXT);\n\nINSERT INTO t1 VALUES (\'b1\'),(\'a2\'),(\'a11\'),(\'a1\');\n\nSELECT c FROM t1;\n+------+\n| c |\n+------+\n| b1 |\n| a2 |\n| a11 |\n| a1 |\n+------+\n\nSELECT c FROM t1 ORDER BY c;\n+------+\n| c |\n+------+\n| a1 |\n| a11 |\n| a2 |\n| b1 |\n+------+\n\nUnsorted, regular sort and natural sort:\n\nTRUNCATE t1;\n\nINSERT INTO t1 VALUES \n (\'5.5.31\'),(\'10.7.0\'),(\'10.2.1\'),\n (\'10.1.22\'),(\'10.3.32\'),(\'10.2.12\');\n\nSELECT c FROM t1;\n+---------+\n| c |\n+---------+\n| 5.5.31 |\n| 10.7.0 |\n| 10.2.1 |\n| 10.1.22 |\n| 10.3.32 |\n| 10.2.12 |\n+---------+\n\nSELECT c FROM t1 ORDER BY c;\n+---------+\n| c |\n+---------+\n| 10.1.22 |\n| 10.2.1 |\n| 10.2.12 |\n| 10.3.32 |\n| 10.7.0 |\n| 5.5.31 |\n+---------+\n\nSELECT c FROM t1 ORDER BY NATURAL_SORT_KEY(c);\n+---------+\n| c |\n+---------+\n| 5.5.31 |\n| 10.1.22 |\n| 10.2.1 |\n| 10.2.12 |\n| 10.3.32 |\n| 10.7.0 |\n+---------+\n\nIPs\n---\n\nSorting IPs, unsorted, regular sort and natural sort::\n\nTRUNCATE t1;\n\nINSERT INTO t1 VALUES \n (\'192.167.3.1\'),(\'192.167.1.12\'),(\'100.200.300.400\'),\n (\'100.50.60.70\'),(\'100.8.9.9\'),(\'127.0.0.1\'),(\'0.0.0.0\');\n\nSELECT c FROM t1;\n+-----------------+\n| c |\n+-----------------+\n| 192.167.3.1 |\n| 192.167.1.12 |\n| 100.200.300.400 |\n| 100.50.60.70 |\n| 100.8.9.9 |\n| 127.0.0.1 |\n| 0.0.0.0 |\n+-----------------+\n\nSELECT c FROM t1 ORDER BY c;\n+-----------------+\n| c |\n+-----------------+\n| 0.0.0.0 |\n| 100.200.300.400 |\n| 100.50.60.70 |\n| 100.8.9.9 |\n| 127.0.0.1 |\n| 192.167.1.12 |\n| 192.167.3.1 |\n+-----------------+\n\nSELECT c FROM t1 ORDER BY NATURAL_SORT_KEY(c);\n+-----------------+\n| c |\n+-----------------+\n| 0.0.0.0 |\n| 100.8.9.9 |\n| 100.50.60.70 |\n| 100.200.300.400 |\n| 127.0.0.1 |\n| 192.167.1.12 |\n| 192.167.3.1 |\n+-----------------+\n\nGenerated Columns\n-----------------\n\nUsing with a generated column:\n\nCREATE TABLE t(c VARCHAR(3), k VARCHAR(4) AS (NATURAL_SORT_KEY(c)) INVISIBLE);\n\nINSERT INTO t(c) VALUES (\'b1\'),(\'a2\'),(\'a11\'),(\'a10\');\n\nSELECT * FROM t ORDER by k;\n+------+\n| c |\n+------+\n| a2 |\n| a10 |\n| a11 |\n| b1 |\n+------+\n\nNote that if the virtual column is not longer, results may not be as expected:\n\nCREATE TABLE t2(c VARCHAR(3), k VARCHAR(3) AS (NATURAL_SORT_KEY(c)) INVISIBLE);\n\nINSERT INTO t2(c) VALUES (\'b1\'),(\'a2\'),(\'a11\'),(\'a10\');\n\nSELECT * FROM t2 ORDER by k;\n+------+\n| c |\n+------+\n| a2 |\n| a11 |\n| a10 |\n| b1 |\n+------+\n\nLeading Zeroes\n--------------\n\nIgnoring leading zeroes can lead to undesirable results in certain contexts.\nFor example:\n\nCREATE TABLE t3 (a VARCHAR(4));\n\nINSERT INTO t3 VALUES \n (\'a1\'), (\'a001\'), (\'a10\'), (\'a001\'), (\'a10\'),\n (\'a01\'), (\'a01\'), (\'a01b\'), (\'a01b\'), (\'a1\');\n\nSELECT a FROM t3 ORDER BY a;\n+------+\n| a |\n+------+\n| a001 |\n| a001 |\n| a01 |\n| a01 |\n| a01b |\n| a01b |\n| a1 |\n| a1 |\n| a10 |\n| a10 |\n+------+\n10 rows in set (0.000 sec)\n\nSELECT a FROM t3 ORDER BY NATURAL_SORT_KEY(a);\n+------+\n| a |\n+------+\n| a1 |\n| a01 |\n| a01 |\n| a001 |\n| a001 |\n| a1 |\n| a01b |\n| a01b |\n| a10 |\n| a10 |\n+------+\n\nThis may not be what we were hoping for in a \'natural\' sort. A workaround is\nto sort by both NATURAL_SORT_KEY and regular sort.\n\nSELECT a FROM t3 ORDER BY NATURAL_SORT_KEY(a), a;\n+------+\n| a |\n+------+\n| a001 |\n| a001 |\n| a01 |\n| a01 |\n| a1 |\n| a1 |\n| a01b |\n| a01b |\n| a10 |\n| a10 |\n+------+\n\nURL: https://mariadb.com/kb/en/natural_sort_key/','','https://mariadb.com/kb/en/natural_sort_key/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (667,36,'NOT LIKE','Syntax\n------\n\nexpr NOT LIKE pat [ESCAPE \'escape_char\']\n\nDescription\n-----------\n\nThis is the same as NOT (expr LIKE pat [ESCAPE \'escape_char\']).\n\nURL: https://mariadb.com/kb/en/not-like/','','https://mariadb.com/kb/en/not-like/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (668,36,'OCTET_LENGTH','Syntax\n------\n\nOCTET_LENGTH(str)\n\nDescription\n-----------\n\nOCTET_LENGTH() returns the length of the given string, in octets (bytes). This\nis a synonym for LENGTHB(), and, when Oracle mode from MariaDB 10.3 is not\nset, a synonym for LENGTH().\n\nA multi-byte character counts as multiple bytes. This means that for a string\ncontaining five two-byte characters, OCTET_LENGTH() returns 10, whereas\nCHAR_LENGTH() returns 5.\n\nIf str is not a string value, it is converted into a string. If str is NULL,\nthe function returns NULL.\n\nExamples\n--------\n\nWhen Oracle mode from MariaDB 10.3 is not set:\n\nSELECT CHAR_LENGTH(\'Ï€\'), LENGTH(\'Ï€\'), LENGTHB(\'Ï€\'), OCTET_LENGTH(\'Ï€\');\n+-------------------+--------------+---------------+--------------------+\n| CHAR_LENGTH(\'Ï€\') | LENGTH(\'Ï€\') | LENGTHB(\'Ï€\') | OCTET_LENGTH(\'Ï€\') |\n+-------------------+--------------+---------------+--------------------+\n| 1 | 2 | 2 | 2 |\n+-------------------+--------------+---------------+--------------------+\n\nIn Oracle mode from MariaDB 10.3:\n\nSELECT CHAR_LENGTH(\'Ï€\'), LENGTH(\'Ï€\'), LENGTHB(\'Ï€\'), OCTET_LENGTH(\'Ï€\');\n+-------------------+--------------+---------------+--------------------+\n| CHAR_LENGTH(\'Ï€\') | LENGTH(\'Ï€\') | LENGTHB(\'Ï€\') | OCTET_LENGTH(\'Ï€\') |\n+-------------------+--------------+---------------+--------------------+\n| 1 | 1 | 2 | 2 |\n+-------------------+--------------+---------------+--------------------+\n\nURL: https://mariadb.com/kb/en/octet_length/','','https://mariadb.com/kb/en/octet_length/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (669,36,'ORD','Syntax\n------\n\nORD(str)\n\nDescription\n-----------\n\nIf the leftmost character of the string str is a multi-byte character, returns\nthe code for that character, calculated from the numeric values of its\nconstituent bytes using this formula:\n\n(1st byte code)\n+ (2nd byte code x 256)\n+ (3rd byte code x 256 x 256) ...\n\nIf the leftmost character is not a multi-byte character, ORD() returns the\nsame value as the ASCII() function.\n\nExamples\n--------\n\nSELECT ORD(\'2\');\n+----------+\n| ORD(\'2\') |\n+----------+\n| 50 |\n+----------+\n\nURL: https://mariadb.com/kb/en/ord/','','https://mariadb.com/kb/en/ord/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (670,36,'POSITION','Syntax\n------\n\nPOSITION(substr IN str)\n\nDescription\n-----------\n\nPOSITION(substr IN str) is a synonym for LOCATE(substr,str).\n\nIt\'s part of ODBC 3.0.\n\nURL: https://mariadb.com/kb/en/position/','','https://mariadb.com/kb/en/position/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (671,36,'QUOTE','Syntax\n------\n\nQUOTE(str)\n\nDescription\n-----------\n\nQuotes a string to produce a result that can be used as a properly escaped\ndata value in an SQL statement. The string is returned enclosed by single\nquotes and with each instance of single quote (\"\'\"), backslash (\"\\\"), ASCII\nNUL, and Control-Z preceded by a backslash. If the argument is NULL, the\nreturn value is the word \"NULL\" without enclosing single quotes.\n\nExamples\n--------\n\nSELECT QUOTE(\"Don\'t!\");\n+-----------------+\n| QUOTE(\"Don\'t!\") |\n+-----------------+\n| \'Don\\\'t!\' |\n+-----------------+\n\nSELECT QUOTE(NULL); \n+-------------+\n| QUOTE(NULL) |\n+-------------+\n| NULL |\n+-------------+\n\nURL: https://mariadb.com/kb/en/quote/','','https://mariadb.com/kb/en/quote/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (672,36,'REPEAT Function','Syntax\n------\n\nREPEAT(str,count)\n\nDescription\n-----------\n\nReturns a string consisting of the string str repeated count times. If count\nis less than 1, returns an empty string. Returns NULL if str or count are NULL.\n\nExamples\n--------\n\nSELECT QUOTE(REPEAT(\'MariaDB \',4));\n+------------------------------------+\n| QUOTE(REPEAT(\'MariaDB \',4)) |\n+------------------------------------+\n| \'MariaDB MariaDB MariaDB MariaDB \' |\n+------------------------------------+\n\nURL: https://mariadb.com/kb/en/repeat-function/','','https://mariadb.com/kb/en/repeat-function/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (673,36,'REPLACE Function','Syntax\n------\n\nREPLACE(str,from_str,to_str)\n\nDescription\n-----------\n\nReturns the string str with all occurrences of the string from_str replaced by\nthe string to_str. REPLACE() performs a case-sensitive match when searching\nfor from_str.\n\nExamples\n--------\n\nSELECT REPLACE(\'www.mariadb.org\', \'w\', \'Ww\');\n+---------------------------------------+\n| REPLACE(\'www.mariadb.org\', \'w\', \'Ww\') |\n+---------------------------------------+\n| WwWwWw.mariadb.org |\n+---------------------------------------+\n\nURL: https://mariadb.com/kb/en/replace-function/','','https://mariadb.com/kb/en/replace-function/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (674,36,'REVERSE','Syntax\n------\n\nREVERSE(str)\n\nDescription\n-----------\n\nReturns the string str with the order of the characters reversed.\n\nExamples\n--------\n\nSELECT REVERSE(\'desserts\');\n+---------------------+\n| REVERSE(\'desserts\') |\n+---------------------+\n| stressed |\n+---------------------+\n\nURL: https://mariadb.com/kb/en/reverse/','','https://mariadb.com/kb/en/reverse/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (675,36,'RIGHT','Syntax\n------\n\nRIGHT(str,len)\n\nDescription\n-----------\n\nReturns the rightmost len characters from the string str, or NULL if any\nargument is NULL.\n\nExamples\n--------\n\nSELECT RIGHT(\'MariaDB\', 2);\n+---------------------+\n| RIGHT(\'MariaDB\', 2) |\n+---------------------+\n| DB |\n+---------------------+\n\nURL: https://mariadb.com/kb/en/right/','','https://mariadb.com/kb/en/right/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (676,36,'RPAD','Syntax\n------\n\nRPAD(str, len [, padstr])\n\nDescription\n-----------\n\nReturns the string str, right-padded with the string padstr to a length of len\ncharacters. If str is longer than len, the return value is shortened to len\ncharacters. If padstr is omitted, the RPAD function pads spaces.\n\nPrior to MariaDB 10.3.1, the padstr parameter was mandatory.\n\nReturns NULL if given a NULL argument. If the result is empty (a length of\nzero), returns either an empty string, or, from MariaDB 10.3.6 with\nSQL_MODE=Oracle, NULL.\n\nThe Oracle mode version of the function can be accessed outside of Oracle mode\nby using RPAD_ORACLE as the function name.\n\nExamples\n--------\n\nSELECT RPAD(\'hello\',10,\'.\');\n+----------------------+\n| RPAD(\'hello\',10,\'.\') |\n+----------------------+\n| hello..... |\n+----------------------+\n\nSELECT RPAD(\'hello\',2,\'.\');\n+---------------------+\n| RPAD(\'hello\',2,\'.\') |\n+---------------------+\n| he |\n+---------------------+\n\nFrom MariaDB 10.3.1, with the pad string defaulting to space.\n\nSELECT RPAD(\'hello\',30);\n+--------------------------------+\n| RPAD(\'hello\',30) |\n+--------------------------------+\n| hello |\n+--------------------------------+\n\nOracle mode version from MariaDB 10.3.6:\n\nSELECT RPAD(\'\',0),RPAD_ORACLE(\'\',0);\n+------------+-------------------+\n| RPAD(\'\',0) | RPAD_ORACLE(\'\',0) |\n+------------+-------------------+\n| | NULL |\n+------------+-------------------+\n\nURL: https://mariadb.com/kb/en/rpad/','','https://mariadb.com/kb/en/rpad/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (677,36,'RTRIM','Syntax\n------\n\nRTRIM(str)\n\nDescription\n-----------\n\nReturns the string str with trailing space characters removed.\n\nReturns NULL if given a NULL argument. If the result is empty, returns either\nan empty string, or, from MariaDB 10.3.6 with SQL_MODE=Oracle, NULL.\n\nThe Oracle mode version of the function can be accessed outside of Oracle mode\nby using RTRIM_ORACLE as the function name.\n\nExamples\n--------\n\nSELECT QUOTE(RTRIM(\'MariaDB \'));\n+-----------------------------+\n| QUOTE(RTRIM(\'MariaDB \')) |\n+-----------------------------+\n| \'MariaDB\' |\n+-----------------------------+\n\nOracle mode version from MariaDB 10.3.6:\n\nSELECT RTRIM(\'\'),RTRIM_ORACLE(\'\');\n+-----------+------------------+\n| RTRIM(\'\') | RTRIM_ORACLE(\'\') |\n+-----------+------------------+\n| | NULL |\n+-----------+------------------+\n\nURL: https://mariadb.com/kb/en/rtrim/','','https://mariadb.com/kb/en/rtrim/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (678,36,'SFORMAT','MariaDB starting with 10.7.0\n----------------------------\nSFORMAT was added in MariaDB 10.7.0.\n\nDescription\n-----------\n\nThe SFORMAT function takes an input string and a formatting specification and\nreturns the string formatted using the rules the user passed in the\nspecification.\n\nIt use the fmtlib library for Python-like (as well as Rust, C++20, etc) string\nformatting.\n\nOnly fmtlib 7.0.0+ is supported.\n\nThere is no native support for temporal and decimal values:\n\n* TIME_RESULT is handled as STRING_RESULT\n* DECIMAL_RESULT as REAL_RESULT\n\nExamples\n--------\n\nSELECT SFORMAT(\"The answer is {}.\", 42);\n+----------------------------------+\n| SFORMAT(\"The answer is {}.\", 42) |\n+----------------------------------+\n| The answer is 42. |\n+----------------------------------+\n\nCREATE TABLE test_sformat(mdb_release char(6), mdev int, feature char(20));\n\nINSERT INTO test_sformat VALUES(\'10.7.0\', 25015, \'Python style sformat\'), \n (\'10.7.0\', 4958, \'UUID\');\n\nSELECT * FROM test_sformat;\n+-------------+-------+----------------------+\n| mdb_release | mdev | feature |\n+-------------+-------+----------------------+\n| 10.7.0 | 25015 | Python style sformat |\n| 10.7.0 | 4958 | UUID |\n+-------------+-------+----------------------+\n\nSELECT SFORMAT(\'MariaDB Server {} has a preview for MDEV-{} which is about\n{}\', \n mdb_release, mdev, feature) AS \'Preview Release Examples\'\n FROM test_sformat;\n+------------------------------------------------------------------------------\n---------+\n| Preview Release Examples \n |\n+------------------------------------------------------------------------------\n---------+\n| MariaDB Server 10.7.0 has a preview for MDEV-25015 which is about Python\nstyle sformat |\n| MariaDB Server 10.7.0 has a preview for MDEV-4958 which is about UUID \n |\n+------------------------------------------------------------------------------\n---------+\n\nURL: https://mariadb.com/kb/en/sformat/','','https://mariadb.com/kb/en/sformat/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (679,36,'SOUNDEX','Syntax\n------\n\nSOUNDEX(str)\n\nDescription\n-----------\n\nReturns a soundex string from str. Two strings that sound almost the same\nshould have identical soundex strings. A standard soundex string is four\ncharacters long, but the SOUNDEX() function returns an arbitrarily long\nstring. You can use SUBSTRING() on the result to get a standard soundex\nstring. All non-alphabetic characters in str are ignored. All international\nalphabetic characters outside the A-Z range are treated as vowels.\n\nImportant: When using SOUNDEX(), you should be aware of the following details:\n\n* This function, as currently implemented, is intended to work well with\n strings that are in the English language only. Strings in other languages may\n not produce reasonable results.\n\n* This function implements the original Soundex algorithm, not the more\npopular enhanced version (also described by D. Knuth). The difference is that\noriginal version discards vowels first and duplicates second, whereas the\nenhanced version discards duplicates first and vowels second.\n\nExamples\n--------\n\nSOUNDEX(\'Hello\');\n+------------------+\n| SOUNDEX(\'Hello\') |\n+------------------+\n| H400 |\n+------------------+\n\nSELECT SOUNDEX(\'MariaDB\');\n+--------------------+\n| SOUNDEX(\'MariaDB\') |\n+--------------------+\n| M631 |\n+--------------------+\n\nSELECT SOUNDEX(\'Knowledgebase\');\n+--------------------------+\n| SOUNDEX(\'Knowledgebase\') |\n+--------------------------+\n| K543212 |\n+--------------------------+\n\nSELECT givenname, surname FROM users WHERE SOUNDEX(givenname) =\nSOUNDEX(\"robert\");\n+-----------+---------+\n| givenname | surname |\n+-----------+---------+\n| Roberto | Castro |\n+-----------+---------+\n\nURL: https://mariadb.com/kb/en/soundex/','','https://mariadb.com/kb/en/soundex/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (680,36,'SOUNDS LIKE','Syntax\n------\n\nexpr1 SOUNDS LIKE expr2\n\nDescription\n-----------\n\nThis is the same as SOUNDEX(expr1) = SOUNDEX(expr2).\n\nExample\n-------\n\nSELECT givenname, surname FROM users WHERE givenname SOUNDS LIKE \"robert\";\n+-----------+---------+\n| givenname | surname |\n+-----------+---------+\n| Roberto | Castro |\n+-----------+---------+\n\nURL: https://mariadb.com/kb/en/sounds-like/','','https://mariadb.com/kb/en/sounds-like/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (681,36,'SPACE','Syntax\n------\n\nSPACE(N)\n\nDescription\n-----------\n\nReturns a string consisting of N space characters. If N is NULL, returns NULL.\n\nExamples\n--------\n\nSELECT QUOTE(SPACE(6));\n+-----------------+\n| QUOTE(SPACE(6)) |\n+-----------------+\n| \' \' |\n+-----------------+\n\nURL: https://mariadb.com/kb/en/space/','','https://mariadb.com/kb/en/space/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (682,36,'STRCMP','Syntax\n------\n\nSTRCMP(expr1,expr2)\n\nDescription\n-----------\n\nSTRCMP() returns 0 if the strings are the same, -1 if the first argument is\nsmaller than the second according to the current sort order, and 1 if the\nstrings are otherwise not the same. Returns NULL is either argument is NULL.\n\nExamples\n--------\n\nSELECT STRCMP(\'text\', \'text2\');\n+-------------------------+\n| STRCMP(\'text\', \'text2\') |\n+-------------------------+\n| -1 |\n+-------------------------+\n\nSELECT STRCMP(\'text2\', \'text\');\n+-------------------------+\n| STRCMP(\'text2\', \'text\') |\n+-------------------------+\n| 1 |\n+-------------------------+\n\nSELECT STRCMP(\'text\', \'text\');\n+------------------------+\n| STRCMP(\'text\', \'text\') |\n+------------------------+\n| 0 |\n+------------------------+\n\nURL: https://mariadb.com/kb/en/strcmp/','','https://mariadb.com/kb/en/strcmp/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (683,36,'SUBSTR','Description\n-----------\n\nSUBSTR() is a synonym for SUBSTRING().\n\nURL: https://mariadb.com/kb/en/substr/','','https://mariadb.com/kb/en/substr/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (684,36,'SUBSTRING','Syntax\n------\n\nSUBSTRING(str,pos), \nSUBSTRING(str FROM pos), \nSUBSTRING(str,pos,len),\nSUBSTRING(str FROM pos FOR len)\n\nSUBSTR(str,pos), \nSUBSTR(str FROM pos), \nSUBSTR(str,pos,len),\nSUBSTR(str FROM pos FOR len)\n\nDescription\n-----------\n\nThe forms without a len argument return a substring from string str starting\nat position pos.\n\nThe forms with a len argument return a substring len characters long from\nstring str, starting at position pos.\n\nThe forms that use FROM are standard SQL syntax.\n\nIt is also possible to use a negative value for pos. In this case, the\nbeginning of the substring is pos characters from the end of the string,\nrather than the beginning. A negative value may be used for pos in any of the\nforms of this function.\n\nBy default, the position of the first character in the string from which the\nsubstring is to be extracted is reckoned as 1. For Oracle-compatibility, from\nMariaDB 10.3.3, when sql_mode is set to \'oracle\', position zero is treated as\nposition 1 (although the first character is still reckoned as 1).\n\nIf any argument is NULL, returns NULL.\n\nExamples\n--------\n\nSELECT SUBSTRING(\'Knowledgebase\',5);\n+------------------------------+\n| SUBSTRING(\'Knowledgebase\',5) |\n+------------------------------+\n| ledgebase |\n+------------------------------+\n\nSELECT SUBSTRING(\'MariaDB\' FROM 6);\n+-----------------------------+\n| SUBSTRING(\'MariaDB\' FROM 6) |\n+-----------------------------+\n| DB |\n+-----------------------------+\n\nSELECT SUBSTRING(\'Knowledgebase\',3,7);\n+--------------------------------+\n| SUBSTRING(\'Knowledgebase\',3,7) |\n+--------------------------------+\n| owledge |\n+--------------------------------+\n\nSELECT SUBSTRING(\'Knowledgebase\', -4);\n+--------------------------------+\n| SUBSTRING(\'Knowledgebase\', -4) |\n+--------------------------------+\n| base |\n+--------------------------------+\n\nSELECT SUBSTRING(\'Knowledgebase\', -8, 4);\n+-----------------------------------+\n| SUBSTRING(\'Knowledgebase\', -8, 4) |\n+-----------------------------------+\n| edge |\n+-----------------------------------+\n\nSELECT SUBSTRING(\'Knowledgebase\' FROM -8 FOR 4);\n+------------------------------------------+\n| SUBSTRING(\'Knowledgebase\' FROM -8 FOR 4) |\n+------------------------------------------+\n| edge |\n+------------------------------------------+\n\nOracle mode from MariaDB 10.3.3:\n\nSELECT SUBSTR(\'abc\',0,3);\n+-------------------+\n| SUBSTR(\'abc\',0,3) |\n+-------------------+\n| |\n+-------------------+\n\nSELECT SUBSTR(\'abc\',1,2);\n+-------------------+\n| SUBSTR(\'abc\',1,2) |\n+-------------------+\n| ab |\n+-------------------+\n\nSET sql_mode=\'oracle\';\n\nSELECT SUBSTR(\'abc\',0,3);\n+-------------------+\n| SUBSTR(\'abc\',0,3) |\n+-------------------+\n| abc |\n+-------------------+\n\nSELECT SUBSTR(\'abc\',1,2);\n+-------------------+\n| SUBSTR(\'abc\',1,2) |\n+-------------------+\n| ab |\n+-------------------+\n\nURL: https://mariadb.com/kb/en/substring/','','https://mariadb.com/kb/en/substring/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (685,36,'SUBSTRING_INDEX','Syntax\n------\n\nSUBSTRING_INDEX(str,delim,count)\n\nDescription\n-----------\n\nReturns the substring from string str before count occurrences of the\ndelimiter delim. If count is positive, everything to the left of the final\ndelimiter (counting from the left) is returned. If count is negative,\neverything to the right of the final delimiter (counting from the right) is\nreturned. SUBSTRING_INDEX() performs a case-sensitive match when searching for\ndelim.\n\nIf any argument is NULL, returns NULL.\n\nFor example\n\nSUBSTRING_INDEX(\'www.mariadb.org\', \'.\', 2)\n\nmeans \"Return all of the characters up to the 2nd occurrence of .\"\n\nExamples\n--------\n\nSELECT SUBSTRING_INDEX(\'www.mariadb.org\', \'.\', 2);\n+--------------------------------------------+\n| SUBSTRING_INDEX(\'www.mariadb.org\', \'.\', 2) |\n+--------------------------------------------+\n| www.mariadb |\n+--------------------------------------------+\n\nSELECT SUBSTRING_INDEX(\'www.mariadb.org\', \'.\', -2);\n+---------------------------------------------+\n| SUBSTRING_INDEX(\'www.mariadb.org\', \'.\', -2) |\n+---------------------------------------------+\n| mariadb.org |\n+---------------------------------------------+\n\nURL: https://mariadb.com/kb/en/substring_index/','','https://mariadb.com/kb/en/substring_index/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (686,36,'TO_BASE64','Syntax\n------\n\nTO_BASE64(str)\n\nDescription\n-----------\n\nConverts the string argument str to its base-64 encoded form, returning the\nresult as a character string in the connection character set and collation.\n\nThe argument str will be converted to string first if it is not a string. A\nNULL argument will return a NULL result.\n\nThe reverse function, FROM_BASE64(), decodes an encoded base-64 string.\n\nThere are a numerous different methods to base-64 encode a string. The\nfollowing are used by MariaDB and MySQL:\n\n* Alphabet value 64 is encoded as \'+\'.\n* Alphabet value 63 is encoded as \'/\'.\n* Encoding output is made up of groups of four printable characters, with each\nthree bytes of data encoded using four characters. If the final group is not\ncomplete, it is padded with \'=\' characters to make up a length of four.\n* To divide long output, a newline is added after every 76 characters.\n* Decoding will recognize and ignore newlines, carriage returns, tabs, and\nspaces.\n\nExamples\n--------\n\nSELECT TO_BASE64(\'Maria\');\n+--------------------+\n| TO_BASE64(\'Maria\') |\n+--------------------+\n| TWFyaWE= |\n+--------------------+\n\nURL: https://mariadb.com/kb/en/to_base64/','','https://mariadb.com/kb/en/to_base64/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (687,36,'TO_CHAR','MariaDB starting with 10.6.1\n----------------------------\nThe TO_CHAR function was introduced in MariaDB 10.6.1 to enhance Oracle\ncompatibility.\n\nSyntax\n------\n\nTO_CHAR(expr[, fmt])\n\nDescription\n-----------\n\nThe TO_CHAR function converts an expr of type date, datetime, time or\ntimestamp to a string. The optional fmt argument supports\nYYYY/YYY/YY/RRRR/RR/MM/MON/MONTH/MI/DD/DY/HH/HH12/HH24/SS and special\ncharacters. The default value is \"YYYY-MM-DD HH24:MI:SS\".\n\nIn Oracle, TO_CHAR can also be used to convert numbers to strings, but this is\nnot supported in MariaDB and will give an error.\n\nExamples\n--------\n\nSELECT TO_CHAR(\'1980-01-11 04:50:39\', \'YYYY-MM-DD\');\n+----------------------------------------------+\n| TO_CHAR(\'1980-01-11 04:50:39\', \'YYYY-MM-DD\') |\n+----------------------------------------------+\n| 1980-01-11 |\n+----------------------------------------------+\n\nSELECT TO_CHAR(\'1980-01-11 04:50:39\', \'HH24-MI-SS\');\n+----------------------------------------------+\n| TO_CHAR(\'1980-01-11 04:50:39\', \'HH24-MI-SS\') |\n+----------------------------------------------+\n| 04-50-39 |\n+----------------------------------------------+\n\nSELECT TO_CHAR(\'00-01-01 00:00:00\', \'YY-MM-DD HH24:MI:SS\');\n+-----------------------------------------------------+\n| TO_CHAR(\'00-01-01 00:00:00\', \'YY-MM-DD HH24:MI:SS\') |\n+-----------------------------------------------------+\n| 00-01-01 00:00:00 |\n+-----------------------------------------------------+\n\nSELECT TO_CHAR(\'99-12-31 23:59:59\', \'YY-MM-DD HH24:MI:SS\');\n+-----------------------------------------------------+\n| TO_CHAR(\'99-12-31 23:59:59\', \'YY-MM-DD HH24:MI:SS\') |\n+-----------------------------------------------------+\n| 99-12-31 23:59:59 |\n+-----------------------------------------------------+\n\nSELECT TO_CHAR(\'9999-12-31 23:59:59\', \'YY-MM-DD HH24:MI:SS\');\n+-------------------------------------------------------+\n| TO_CHAR(\'9999-12-31 23:59:59\', \'YY-MM-DD HH24:MI:SS\') |\n+-------------------------------------------------------+\n| 99-12-31 23:59:59 |\n+-------------------------------------------------------+\n\nSELECT TO_CHAR(\'21-01-03 08:30:00\', \'Y-MONTH-DY HH:MI:SS\');\n+-----------------------------------------------------+\n| TO_CHAR(\'21-01-03 08:30:00\', \'Y-MONTH-DY HH:MI:SS\') |\n+-----------------------------------------------------+\n| 1-January -Sun 08:30:00 |\n+-----------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/to_char/','','https://mariadb.com/kb/en/to_char/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (688,36,'TRIM','Syntax\n------\n\nTRIM([{BOTH | LEADING | TRAILING} [remstr] FROM] str), TRIM([remstr FROM] str)\n\nFrom MariaDB 10.3.6\n\nTRIM_ORACLE([{BOTH | LEADING | TRAILING} [remstr] FROM] str), TRIM([remstr\nFROM] str)\n\nDescription\n-----------\n\nReturns the string str with all remstr prefixes or suffixes removed. If none\nof the specifiers BOTH, LEADING, or TRAILING is given, BOTH is assumed. remstr\nis optional and, if not specified, spaces are removed.\n\nReturns NULL if given a NULL argument. If the result is empty, returns either\nan empty string, or, from MariaDB 10.3.6 with SQL_MODE=Oracle, NULL.\nSQL_MODE=Oracle is not set by default.\n\nThe Oracle mode version of the function can be accessed in any mode by using\nTRIM_ORACLE as the function name.\n\nExamples\n--------\n\nSELECT TRIM(\' bar \')\\G\n*************************** 1. row ***************************\nTRIM(\' bar \'): bar\n\nSELECT TRIM(LEADING \'x\' FROM \'xxxbarxxx\')\\G\n*************************** 1. row ***************************\nTRIM(LEADING \'x\' FROM \'xxxbarxxx\'): barxxx\n\nSELECT TRIM(BOTH \'x\' FROM \'xxxbarxxx\')\\G\n*************************** 1. row ***************************\nTRIM(BOTH \'x\' FROM \'xxxbarxxx\'): bar\n\nSELECT TRIM(TRAILING \'xyz\' FROM \'barxxyz\')\\G\n*************************** 1. row ***************************\nTRIM(TRAILING \'xyz\' FROM \'barxxyz\'): barx\n\nFrom MariaDB 10.3.6, with SQL_MODE=Oracle not set:\n\nSELECT TRIM(\'\'),TRIM_ORACLE(\'\');\n+----------+-----------------+\n| TRIM(\'\') | TRIM_ORACLE(\'\') |\n+----------+-----------------+\n| | NULL |\n+----------+-----------------+\n\nFrom MariaDB 10.3.6, with SQL_MODE=Oracle set:\n\nSELECT TRIM(\'\'),TRIM_ORACLE(\'\');\n+----------+-----------------+\n| TRIM(\'\') | TRIM_ORACLE(\'\') |\n+----------+-----------------+\n| NULL | NULL |\n+----------+-----------------+\n\nURL: https://mariadb.com/kb/en/trim/','','https://mariadb.com/kb/en/trim/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (689,36,'UCASE','Syntax\n------\n\nUCASE(str)\n\nDescription\n-----------\n\nUCASE() is a synonym for UPPER().\n\nURL: https://mariadb.com/kb/en/ucase/','','https://mariadb.com/kb/en/ucase/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (690,36,'UNCOMPRESSED_LENGTH','Syntax\n------\n\nUNCOMPRESSED_LENGTH(compressed_string)\n\nDescription\n-----------\n\nReturns the length that the compressed string had before being compressed with\nCOMPRESS().\n\nUNCOMPRESSED_LENGTH() returns NULL or an incorrect result if the string is not\ncompressed.\n\nUntil MariaDB 10.3.1, returns MYSQL_TYPE_LONGLONG, or bigint(10), in all\ncases. From MariaDB 10.3.1, returns MYSQL_TYPE_LONG, or int(10), when the\nresult would fit within 32-bits.\n\nExamples\n--------\n\nSELECT UNCOMPRESSED_LENGTH(COMPRESS(REPEAT(\'a\',30)));\n+-----------------------------------------------+\n| UNCOMPRESSED_LENGTH(COMPRESS(REPEAT(\'a\',30))) |\n+-----------------------------------------------+\n| 30 |\n+-----------------------------------------------+\n\nURL: https://mariadb.com/kb/en/uncompressed_length/','','https://mariadb.com/kb/en/uncompressed_length/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (691,36,'UNHEX','Syntax\n------\n\nUNHEX(str)\n\nDescription\n-----------\n\nPerforms the inverse operation of HEX(str). That is, it interprets each pair\nof hexadecimal digits in the argument as a number and converts it to the\ncharacter represented by the number. The resulting characters are returned as\na binary string.\n\nIf str is NULL, UNHEX() returns NULL.\n\nExamples\n--------\n\nSELECT HEX(\'MariaDB\');\n+----------------+\n| HEX(\'MariaDB\') |\n+----------------+\n| 4D617269614442 |\n+----------------+\n\nSELECT UNHEX(\'4D617269614442\');\n+-------------------------+\n| UNHEX(\'4D617269614442\') |\n+-------------------------+\n| MariaDB |\n+-------------------------+\n\nSELECT 0x4D617269614442;\n+------------------+\n| 0x4D617269614442 |\n+------------------+\n| MariaDB |\n+------------------+\n\nSELECT UNHEX(HEX(\'string\'));\n+----------------------+\n| UNHEX(HEX(\'string\')) |\n+----------------------+\n| string |\n+----------------------+\n\nSELECT HEX(UNHEX(\'1267\'));\n+--------------------+\n| HEX(UNHEX(\'1267\')) |\n+--------------------+\n| 1267 |\n+--------------------+\n\nURL: https://mariadb.com/kb/en/unhex/','','https://mariadb.com/kb/en/unhex/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (692,36,'UPDATEXML','Syntax\n------\n\nUpdateXML(xml_target, xpath_expr, new_xml)\n\nDescription\n-----------\n\nThis function replaces a single portion of a given fragment of XML markup\nxml_target with a new XML fragment new_xml, and then returns the changed XML.\nThe portion of xml_target that is replaced matches an XPath expression\nxpath_expr supplied by the user. If no expression matching xpath_expr is\nfound, or if multiple matches are found, the function returns the original\nxml_target XML fragment. All three arguments should be strings.\n\nExamples\n--------\n\nSELECT\n UpdateXML(\'<a><b>ccc</b><d></d></a>\', \'/a\', \'<e>fff</e>\') AS val1,\n UpdateXML(\'<a><b>ccc</b><d></d></a>\', \'/b\', \'<e>fff</e>\') AS val2,\n UpdateXML(\'<a><b>ccc</b><d></d></a>\', \'//b\', \'<e>fff</e>\') AS val3,\n UpdateXML(\'<a><b>ccc</b><d></d></a>\', \'/a/d\', \'<e>fff</e>\') AS val4,\n UpdateXML(\'<a><d></d><b>ccc</b><d></d></a>\', \'/a/d\', \'<e>fff</e>\') AS val5\n \\G\n*************************** 1. row ***************************\nval1: <e>fff</e>\nval2: <a><b>ccc</b><d></d></a>\nval3: <a><e>fff</e><d></d></a>\nval4: <a><b>ccc</b><e>fff</e></a>\nval5: <a><d></d><b>ccc</b><d></d></a>\n1 row in set (0.00 sec)\n\nURL: https://mariadb.com/kb/en/updatexml/','','https://mariadb.com/kb/en/updatexml/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (693,36,'UPPER','Syntax\n------\n\nUPPER(str)\n\nDescription\n-----------\n\nReturns the string str with all characters changed to uppercase according to\nthe current character set mapping. The default is latin1 (cp1252 West\nEuropean).\n\nSELECT UPPER(surname), givenname FROM users ORDER BY surname;\n+----------------+------------+\n| UPPER(surname) | givenname |\n+----------------+------------+\n| ABEL | Jacinto |\n| CASTRO | Robert |\n| COSTA | Phestos |\n| MOSCHELLA | Hippolytos |\n+----------------+------------+\n\nUPPER() is ineffective when applied to binary strings (BINARY, VARBINARY,\nBLOB). The description of LOWER() shows how to perform lettercase conversion\nof binary strings.\n\nURL: https://mariadb.com/kb/en/upper/','','https://mariadb.com/kb/en/upper/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (694,36,'WEIGHT_STRING','Syntax\n------\n\nWEIGHT_STRING(str [AS {CHAR|BINARY}(N)] [LEVEL levels] [flags])\n levels: N [ASC|DESC|REVERSE] [, N [ASC|DESC|REVERSE]] ...\n\nDescription\n-----------\n\nReturns a binary string representing the string\'s sorting and comparison\nvalue. A string with a lower result means that for sorting purposes the string\nappears before a string with a higher result.\n\nWEIGHT_STRING() is particularly useful when adding new collations, for testing\npurposes.\n\nIf str is a non-binary string (CHAR, VARCHAR or TEXT), WEIGHT_STRING returns\nthe string\'s collation weight. If str is a binary string (BINARY, VARBINARY or\nBLOB), the return value is simply the input value, since the weight for each\nbyte in a binary string is the byte value.\n\nWEIGHT_STRING() returns NULL if given a NULL input.\n\nThe optional AS clause permits casting the input string to a binary or\nnon-binary string, as well as to a particular length.\n\nAS BINARY(N) measures the length in bytes rather than characters, and right\npads with 0x00 bytes to the desired length.\n\nAS CHAR(N) measures the length in characters, and right pads with spaces to\nthe desired length.\n\nN has a minimum value of 1, and if it is less than the length of the input\nstring, the string is truncated without warning.\n\nThe optional LEVEL clause specifies that the return value should contain\nweights for specific collation levels. The levels specifier can either be a\nsingle integer, a comma-separated list of integers, or a range of integers\nseparated by a dash (whitespace is ignored). Integers can range from 1 to a\nmaximum of 6, dependent on the collation, and need to be listed in ascending\norder.\n\nIf the LEVEL clause is no provided, a default of 1 to the maximum for the\ncollation is assumed.\n\nIf the LEVEL is specified without using a range, an optional modifier is\npermitted.\n\nASC, the default, returns the weights without any modification.\n\nDESC returns bitwise-inverted weights.\n\nREVERSE returns the weights in reverse order.\n\nExamples\n--------\n\nThe examples below use the HEX() function to represent non-printable results\nin hexadecimal format.\n\nSELECT HEX(WEIGHT_STRING(\'x\'));\n+-------------------------+\n| HEX(WEIGHT_STRING(\'x\')) |\n+-------------------------+\n| 0058 |\n+-------------------------+\n\nSELECT HEX(WEIGHT_STRING(\'x\' AS BINARY(4)));\n+--------------------------------------+\n| HEX(WEIGHT_STRING(\'x\' AS BINARY(4))) |\n+--------------------------------------+\n| 78000000 |\n+--------------------------------------+\n\nSELECT HEX(WEIGHT_STRING(\'x\' AS CHAR(4)));\n+------------------------------------+\n| HEX(WEIGHT_STRING(\'x\' AS CHAR(4))) |\n+------------------------------------+\n| 0058002000200020 |\n+------------------------------------+\n\nSELECT HEX(WEIGHT_STRING(0xaa22ee LEVEL 1));\n+--------------------------------------+\n| HEX(WEIGHT_STRING(0xaa22ee LEVEL 1)) |\n+--------------------------------------+\n| AA22EE |\n+--------------------------------------+\n\nSELECT HEX(WEIGHT_STRING(0xaa22ee LEVEL 1 DESC));\n+-------------------------------------------+\n| HEX(WEIGHT_STRING(0xaa22ee LEVEL 1 DESC)) |\n+-------------------------------------------+\n| 55DD11 |\n+-------------------------------------------+\n\nSELECT HEX(WEIGHT_STRING(0xaa22ee LEVEL 1 REVERSE));\n+----------------------------------------------+\n| HEX(WEIGHT_STRING(0xaa22ee LEVEL 1 REVERSE)) |\n+----------------------------------------------+\n| EE22AA |\n+----------------------------------------------+\n\nURL: https://mariadb.com/kb/en/weight_string/','','https://mariadb.com/kb/en/weight_string/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (695,36,'Type Conversion','Implicit type conversion takes place when MariaDB is using operands or\ndifferent types, in order to make the operands compatible.\n\nIt is best practice not to rely upon implicit conversion; rather use CAST to\nexplicitly convert types.\n\nRules for Conversion on Comparison\n----------------------------------\n\n* If either argument is NULL, the result of the comparison is NULL unless the\nNULL-safe <=> equality comparison operator is used.\n* If both arguments are integers, they are compared as integers.\n* If both arguments are strings, they are compared as strings.\n* If one argument is decimal and the other argument is decimal or integer,\nthey are compared as decimals.\n* If one argument is decimal and the other argument is a floating point, they\nare compared as floating point values.\n* If one argument is string and the other argument is integer, they are\ncompared as decimals. This conversion was added in MariaDB 10.3.36. Prior to\n10.3.36, this combination was compared as floating point values, which did not\nalways work well for huge 64-bit integers because of a possible precision loss\non conversion to double.\n* If a hexadecimal argument is not compared to a number, it is treated as a\nbinary string.\n* If a constant is compared to a TIMESTAMP or DATETIME, the constant is\nconverted to a timestamp, unless used as an argument to the IN function.\n* In other cases, arguments are compared as floating point, or real, numbers.\n\nNote that if a string column is being compared with a numeric value, MariaDB\nwill not use the index on the column, as there are numerous alternatives that\nmay evaluate as equal (see examples below).\n\nComparison Examples\n-------------------\n\nConverting a string to a number:\n\nSELECT 15+\'15\';\n+---------+\n| 15+\'15\' |\n+---------+\n| 30 |\n+---------+\n\nConverting a number to a string:\n\nSELECT CONCAT(15,\'15\');\n+-----------------+\n| CONCAT(15,\'15\') |\n+-----------------+\n| 1515 |\n+-----------------+\n\nFloating point number errors:\n\nSELECT \'9746718491924563214\' = 9746718491924563213;\n+---------------------------------------------+\n| \'9746718491924563214\' = 9746718491924563213 |\n+---------------------------------------------+\n| 1 |\n+---------------------------------------------+\n\nNumeric equivalence with strings:\n\nSELECT \'5\' = 5;\n+---------+\n| \'5\' = 5 |\n+---------+\n| 1 |\n+---------+\n\nSELECT \' 5\' = 5;\n+------------+\n| \' 5\' = 5 |\n+------------+\n| 1 |\n+------------+\n\nSELECT \' 5 \' = 5;\n+--------------+\n| \' 5 \' = 5 |\n+--------------+\n| 1 |\n+--------------+\n1 row in set, 1 warning (0.000 sec)\n\nSHOW WARNINGS;\n+-------+------+--------------------------------------------+\n| Level | Code | Message |\n+-------+------+--------------------------------------------+\n| Note | 1292 | Truncated incorrect DOUBLE value: \' 5 \' |\n+-------+------+--------------------------------------------+\n\nAs a result of the above, MariaDB cannot use the index when comparing a string\nwith a numeric value in the example below:\n\nCREATE TABLE t (a VARCHAR(10), b VARCHAR(10), INDEX idx_a (a));\n\nINSERT INTO t VALUES \n (\'1\', \'1\'), (\'2\', \'2\'), (\'3\', \'3\'),\n (\'4\', \'4\'), (\'5\', \'5\'), (\'1\', \'5\');\n\nEXPLAIN SELECT * FROM t WHERE a = \'3\' \\G\n*************************** 1. row ***************************\n id: 1\n select_type: SIMPLE\n table: t\n type: ref\npossible_keys: idx_a\n key: idx_a\n key_len: 13\n ref: const\n rows: 1\n Extra: Using index condition\n\nEXPLAIN SELECT * FROM t WHERE a = 3 \\G\n*************************** 1. row ***************************\n id: 1\n select_type: SIMPLE\n table: t\n type: ALL\npossible_keys: idx_a\n key: NULL\n key_len: NULL\n ref: NULL\n rows: 6\n Extra: Using where\n\nRules for Conversion on Dyadic Arithmetic Operations\n----------------------------------------------------\n\nImplicit type conversion also takes place on dyadic arithmetic operations\n(+,-,*,/). MariaDB chooses the minimum data type that is guaranteed to fit the\nresult and converts both arguments to the result data type.\n\nFor addition (+), subtraction (-) and multiplication (*), the result data type\nis chosen as follows:\n\n* If either of the arguments is an approximate number (float, double), the\nresult is double.\n* If either of the arguments is a string (char, varchar, text), the result is\ndouble.\n* If either of the arguments is a decimal number, the result is decimal.\n* If either of the arguments is of a temporal type with a non-zero fractional\nsecond precision (time(N), datetime(N), timestamp(N)), the result is decimal.\n* If either of the arguments is of a temporal type with a zero fractional\nsecond precision (time(0), date, datetime(0), timestamp(0)), the result may\nvary between int, int unsigned, bigint or bigint unsigned, depending on the\nexact data type combination.\n* If both arguments are integer numbers (tinyint, smallint, mediumint,\nbigint), the result may vary between int, int unsigned, bigint or bigint\nunsigned, depending of the exact data types and their signs.\n\nFor division (/), the result data type is chosen as follows:\n\n* If either of the arguments is an approximate number (float, double), the\nresult is double.\n* If either of the arguments is a string (char, varchar, text), the result is\ndouble.\n* Otherwise, the result is decimal.\n\nArithmetic Examples\n-------------------\n\nNote, the above rules mean that when an argument of a temporal data type\nappears in addition or subtraction, it\'s treated as a number by default.\n\nSELECT TIME\'10:20:30\' + 1;\n+--------------------+\n| TIME\'10:20:30\' + 1 |\n+--------------------+\n| 102031 |\n+--------------------+\n\nIn order to do temporal addition or subtraction instead, use the DATE_ADD() or\nDATE_SUB() functions, or an INTERVAL expression as the second argument:\n\nSELECT TIME\'10:20:30\' + INTERVAL 1 SECOND;\n+------------------------------------+\n| TIME\'10:20:30\' + INTERVAL 1 SECOND |\n+------------------------------------+\n| 10:20:31 |\n+------------------------------------+\n\nSELECT \"2.2\" + 3;\n+-----------+\n| \"2.2\" + 3 |\n+-----------+\n| 5.2 |\n+-----------+\n\nSELECT 2.2 + 3;\n+---------+\n| 2.2 + 3 |\n+---------+\n| 5.2 |\n+---------+\n\nSELECT 2.2 / 3;\n+---------+\n| 2.2 / 3 |\n+---------+\n| 0.73333 |\n+---------+\n\nSELECT \"2.2\" / 3;\n+--------------------+\n| \"2.2\" / 3 |\n+--------------------+\n| 0.7333333333333334 |\n+--------------------+\n\nURL: https://mariadb.com/kb/en/type-conversion/','','https://mariadb.com/kb/en/type-conversion/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (696,37,'_rowid','Syntax\n------\n\n_rowid\n\nDescription\n-----------\n\nThe _rowid pseudo column is mapped to the primary key in the related table.\nThis can be used as a replacement of the rowid pseudo column in other\ndatabases. Another usage is to simplify sql queries as one doesn\'t have to\nknow the name of the primary key.\n\nExamples\n--------\n\ncreate table t1 (a int primary key, b varchar(80));\ninsert into t1 values (1,\"one\"),(2,\"two\");\nselect * from t1 where _rowid=1;\n\n+---+------+\n| a | b |\n+---+------+\n| 1 | one |\n+---+------+\n\nupdate t1 set b=\"three\" where _rowid=2;\nselect * from t1 where _rowid>=1 and _rowid<=10;\n\n+---+-------+\n| a | b |\n+---+-------+\n| 1 | one |\n| 2 | three |\n+---+-------+\n\nURL: https://mariadb.com/kb/en/_rowid/','','https://mariadb.com/kb/en/_rowid/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (697,38,'ALTER TABLE','Syntax\n------\n\nALTER [ONLINE] [IGNORE] TABLE [IF EXISTS] tbl_name\n [WAIT n | NOWAIT]\n alter_specification [, alter_specification] ...\nalter_specification:\n table_option ...\n | ADD [COLUMN] [IF NOT EXISTS] col_name column_definition\n [FIRST | AFTER col_name ]\n | ADD [COLUMN] [IF NOT EXISTS] (col_name column_definition,...)\n | ADD {INDEX|KEY} [IF NOT EXISTS] [index_name]\n [index_type] (index_col_name,...) [index_option] ...\n | ADD [CONSTRAINT [symbol]] PRIMARY KEY\n [index_type] (index_col_name,...) [index_option] ...\n | ADD [CONSTRAINT [symbol]]\n UNIQUE [INDEX|KEY] [index_name]\n [index_type] (index_col_name,...) [index_option] ...\n | ADD FULLTEXT [INDEX|KEY] [index_name]\n (index_col_name,...) [index_option] ...\n | ADD SPATIAL [INDEX|KEY] [index_name]\n (index_col_name,...) [index_option] ...\n | ADD [CONSTRAINT [symbol]]\n FOREIGN KEY [IF NOT EXISTS] [index_name] (index_col_name,...)\n reference_definition\n | ADD PERIOD FOR SYSTEM_TIME (start_column_name, end_column_name)\n | ALTER [COLUMN] col_name SET DEFAULT literal | (expression)\n | ALTER [COLUMN] col_name DROP DEFAULT\n | ALTER {INDEX|KEY} index_name [NOT] INVISIBLE\n | CHANGE [COLUMN] [IF EXISTS] old_col_name new_col_name column_definition\n [FIRST|AFTER col_name]\n | MODIFY [COLUMN] [IF EXISTS] col_name column_definition\n [FIRST | AFTER col_name]\n | DROP [COLUMN] [IF EXISTS] col_name [RESTRICT|CASCADE]\n | DROP PRIMARY KEY\n | DROP {INDEX|KEY} [IF EXISTS] index_name\n | DROP FOREIGN KEY [IF EXISTS] fk_symbol\n | DROP CONSTRAINT [IF EXISTS] constraint_name\n | DISABLE KEYS\n | ENABLE KEYS\n | RENAME [TO] new_tbl_name\n | ORDER BY col_name [, col_name] ...\n | RENAME COLUMN old_col_name TO new_col_name\n | RENAME {INDEX|KEY} old_index_name TO new_index_name\n | CONVERT TO CHARACTER SET charset_name [COLLATE collation_name]\n | [DEFAULT] CHARACTER SET [=] charset_name\n | [DEFAULT] COLLATE [=] collation_name\n | DISCARD TABLESPACE\n | IMPORT TABLESPACE\n | ALGORITHM [=] {DEFAULT|INPLACE|COPY|NOCOPY|INSTANT}\n | LOCK [=] {DEFAULT|NONE|SHARED|EXCLUSIVE}\n | FORCE\n | partition_options\n | ADD PARTITION [IF NOT EXISTS] (partition_definition)\n | DROP PARTITION [IF EXISTS] partition_names\n | COALESCE PARTITION number\n | REORGANIZE PARTITION [partition_names INTO (partition_definitions)]\n | ANALYZE PARTITION partition_names\n | CHECK PARTITION partition_names\n | OPTIMIZE PARTITION partition_names\n | REBUILD PARTITION partition_names\n | REPAIR PARTITION partition_names\n | EXCHANGE PARTITION partition_name WITH TABLE tbl_name\n | REMOVE PARTITIONING\n | ADD SYSTEM VERSIONING\n | DROP SYSTEM VERSIONING\nindex_col_name:\n col_name [(length)] [ASC | DESC]\nindex_type:\n USING {BTREE | HASH | RTREE}\nindex_option:\n [ KEY_BLOCK_SIZE [=] value\n | index_type\n | WITH PARSER parser_name\n | COMMENT \'string\'\n | CLUSTERING={YES| NO} ]\n [ IGNORED | NOT IGNORED ]\ntable_options:\n table_option [[,] table_option] ...\n\nDescription\n-----------\n\nALTER TABLE enables you to change the structure of an existing table. For\nexample, you can add or delete columns, create or destroy indexes, change the\ntype of existing columns, or rename columns or the table itself. You can also\nchange the comment for the table and the storage engine of the table.\n\nIf another connection is using the table, a metadata lock is active, and this\nstatement will wait until the lock is released. This is also true for\nnon-transactional tables.\n\nWhen adding a UNIQUE index on a column (or a set of columns) which have\nduplicated values, an error will be produced and the statement will be\nstopped. To suppress the error and force the creation of UNIQUE indexes,\ndiscarding duplicates, the IGNORE option can be specified. This can be useful\nif a column (or a set of columns) should be UNIQUE but it contains duplicate\nvalues; however, this technique provides no control on which rows are\npreserved and which are deleted. Also, note that IGNORE is accepted but\nignored in ALTER TABLE ... EXCHANGE PARTITION statements.\n\nThis statement can also be used to rename a table. For details see RENAME\nTABLE.\n\nWhen an index is created, the storage engine may use a configurable buffer in\nthe process. Incrementing the buffer speeds up the index creation. Aria and\nMyISAM allocate a buffer whose size is defined by aria_sort_buffer_size or\nmyisam_sort_buffer_size, also used for REPAIR TABLE. InnoDB allocates three\nbuffers whose size is defined by innodb_sort_buffer_size.\n\nPrivileges\n----------\n\nExecuting the ALTER TABLE statement generally requires at least the ALTER\nprivilege for the table or the database..\n\nIf you are renaming a table, then it also requires the DROP, CREATE and INSERT\nprivileges for the table or the database as well.\n\nOnline DDL\n----------\n\nOnline DDL is supported with the ALGORITHM and LOCK clauses.\n\nSee InnoDB Online DDL Overview for more information on online DDL with InnoDB.\n\nALTER ONLINE TABLE\n------------------\n\nALTER ONLINE TABLE also works for partitioned tables.\n\nOnline ALTER TABLE is available by executing the following:\n\nALTER ONLINE TABLE ...;\n\nThis statement has the following semantics:\n\nThis statement is equivalent to the following:\n\nALTER TABLE ... LOCK=NONE;\n\nSee the LOCK alter specification for more information.\n\nThis statement is equivalent to the following:\n\nALTER TABLE ... ALGORITHM=INPLACE;\n\nSee the ALGORITHM alter specification for more information.\n\nWAIT/NOWAIT\n-----------\n\nMariaDB starting with 10.3.0\n----------------------------\nSet the lock wait timeout. See WAIT and NOWAIT.\n\nIF EXISTS\n---------\n\nThe IF EXISTS and IF NOT EXISTS clauses are available for the following:\n\nADD COLUMN [IF NOT EXISTS]\nADD INDEX [IF NOT EXISTS]\nADD FOREIGN KEY [IF NOT EXISTS]\nADD PARTITION [IF NOT EXISTS]\nCREATE INDEX [IF NOT EXISTS]\nDROP COLUMN [IF EXISTS]\nDROP INDEX [IF EXISTS]\nDROP FOREIGN KEY [IF EXISTS]\nDROP PARTITION [IF EXISTS]\nCHANGE COLUMN [IF EXISTS]\nMODIFY COLUMN [IF EXISTS]\nDROP INDEX [IF EXISTS]\nWhen IF EXISTS and IF NOT EXISTS are used in clauses, queries will not report\nerrors when the condition is triggered for that clause. A warning with the\nsame message text will be issued and the ALTER will move on to the next clause\nin the statement (or end if finished).\n\nMariaDB starting with 10.5.2\n----------------------------\nIf this is directive is used after ALTER ... TABLE, one will not get an error\nif the table doesn\'t exist.\n\nColumn Definitions\n------------------\n\nSee CREATE TABLE: Column Definitions for information about column definitions.\n\nIndex Definitions\n-----------------\n\nSee CREATE TABLE: Index Definitions for information about index definitions.\n\nThe CREATE INDEX and DROP INDEX statements can also be used to add or remove\nan index.\n\nCharacter Sets and Collations\n-----------------------------\n\nCONVERT TO CHARACTER SET charset_name [COLLATE collation_name]\n[DEFAULT] CHARACTER SET [=] charset_name\n[DEFAULT] COLLATE [=] collation_name\nSee Setting Character Sets and Collations for details on setting the character\nsets and collations.\n\nAlter Specifications\n--------------------\n\nTable Options\n-------------\n\nSee CREATE TABLE: Table Options for information about table options.\n\nADD COLUMN\n----------\n\n... ADD COLUMN [IF NOT EXISTS] (col_name column_definition,...)\nAdds a column to the table. The syntax is the same as in CREATE TABLE. If you\nare using IF NOT_EXISTS the column will not be added if it was not there\nalready. This is very useful when doing scripts to modify tables.\n\nThe FIRST and AFTER clauses affect the physical order of columns in the\ndatafile. Use FIRST to add a column in the first (leftmost) position, or AFTER\nfollowed by a column name to add the new column in any other position. Note\nthat, nowadays, the physical position of a column is usually irrelevant.\n\nSee also Instant ADD COLUMN for InnoDB.\n\nDROP COLUMN\n-----------\n\n... DROP COLUMN [IF EXISTS] col_name [CASCADE|RESTRICT]\nDrops the column from the table. If you are using IF EXISTS you will not get\nan error if the column didn\'t exist. If the column is part of any index, the\ncolumn will be dropped from them, except if you add a new column with\nidentical name at the same time. The index will be dropped if all columns from\nthe index were dropped. If the column was used in a view or trigger, you will\nget an error next time the view or trigger is accessed.\n\nMariaDB starting with 10.2.8\n----------------------------\nDropping a column that is part of a multi-column UNIQUE constraint is not\npermitted. For example:\n\nCREATE TABLE a (\n a int,\n b int,\n primary key (a,b)\n);\n\nALTER TABLE x DROP COLUMN a;\n[42000][1072] Key column \'A\' doesn\'t exist in table\n\nThe reason is that dropping column a would result in the new constraint that\nall values in column b be unique. In order to drop the column, an explicit\nDROP PRIMARY KEY and ADD PRIMARY KEY would be required. Up until MariaDB\n10.2.7, the column was dropped and the additional constraint applied,\nresulting in the following structure:\n\nALTER TABLE x DROP COLUMN a;\nQuery OK, 0 rows affected (0.46 sec)\n\nDESC x;\n+-------+---------+------+-----+---------+-------+\n| Field | Type | Null | Key | Default | Extra |\n+-------+---------+------+-----+---------+-------+\n| b | int(11) | NO | PRI | NULL | |\n+-------+---------+------+-----+---------+-------+\n\nMariaDB starting with 10.4.0\n----------------------------\nMariaDB 10.4.0 supports instant DROP COLUMN. DROP COLUMN of an indexed column\nwould imply DROP INDEX (and in the case of a non-UNIQUE multi-column index,\npossibly ADD INDEX). These will not be allowed with ALGORITHM=INSTANT, but\nunlike before, they can be allowed with ALGORITHM=NOCOPY\n\nRESTRICT and CASCADE are allowed to make porting from other database systems\neasier. In MariaDB, they do nothing.\n\nMODIFY COLUMN\n-------------\n\nAllows you to modify the type of a column. The column will be at the same\nplace as the original column and all indexes on the column will be kept. Note\nthat when modifying column, you should specify all attributes for the new\ncolumn.\n\nCREATE TABLE t1 (a INT UNSIGNED AUTO_INCREMENT, PRIMARY KEY((a));\nALTER TABLE t1 MODIFY a BIGINT UNSIGNED AUTO_INCREMENT;\n\nCHANGE COLUMN\n-------------\n\nWorks like MODIFY COLUMN except that you can also change the name of the\ncolumn. The column will be at the same place as the original column and all\nindex on the column will be kept.\n\nCREATE TABLE t1 (a INT UNSIGNED AUTO_INCREMENT, PRIMARY KEY(a));\nALTER TABLE t1 CHANGE a b BIGINT UNSIGNED AUTO_INCREMENT;\n\nALTER COLUMN\n------------\n\nThis lets you change column options.\n\nCREATE TABLE t1 (a INT UNSIGNED AUTO_INCREMENT, b varchar(50), PRIMARY KEY(a));\nALTER TABLE t1 ALTER b SET DEFAULT \'hello\';\n\nRENAME INDEX/KEY\n----------------\n\nMariaDB starting with 10.5.2\n----------------------------\nFrom MariaDB 10.5.2, it is possible to rename an index using the RENAME INDEX\n(or RENAME KEY) syntax, for example:\n\nALTER TABLE t1 RENAME INDEX i_old TO i_new;\n\nRENAME COLUMN\n-------------\n\nMariaDB starting with 10.5.2\n----------------------------\nFrom MariaDB 10.5.2, it is possible to rename a column using the RENAME COLUMN\nsyntax, for example:\n\nALTER TABLE t1 RENAME COLUMN c_old TO c_new;\n\nADD PRIMARY KEY\n---------------\n\nAdd a primary key.\n\nFor PRIMARY KEY indexes, you can specify a name for the index, but it is\nsilently ignored, and the name of the index is always PRIMARY.\n\nSee Getting Started with Indexes: Primary Key for more information.\n\nDROP PRIMARY KEY\n----------------\n\nDrop a primary key.\n\nFor PRIMARY KEY indexes, you can specify a name for the index, but it is\nsilently ignored, and the name of the index is always PRIMARY.\n\nSee Getting Started with Indexes: Primary Key for more information.\n\nADD FOREIGN KEY\n---------------\n\nAdd a foreign key.\n\nFor FOREIGN KEY indexes, a reference definition must be provided.\n\nFor FOREIGN KEY indexes, you can specify a name for the constraint, using the\nCONSTRAINT keyword. That name will be used in error messages.\n\nFirst, you have to specify the name of the target (parent) table and a column\nor a column list which must be indexed and whose values must match to the\nforeign key\'s values. The MATCH clause is accepted to improve the\ncompatibility with other DBMS\'s, but has no meaning in MariaDB. The ON DELETE\nand ON UPDATE clauses specify what must be done when a DELETE (or a REPLACE)\nstatements attempts to delete a referenced row from the parent table, and when\nan UPDATE statement attempts to modify the referenced foreign key columns in a\nparent table row, respectively. The following options are allowed:\n\n* RESTRICT: The delete/update operation is not performed. The statement\nterminates with a 1451 error (SQLSTATE \'2300\').\n* NO ACTION: Synonym for RESTRICT.\n* CASCADE: The delete/update operation is performed in both tables.\n* SET NULL: The update or delete goes ahead in the parent table, and the\ncorresponding foreign key fields in the child table are set to NULL. (They\nmust not be defined as NOT NULL for this to succeed).\n* SET DEFAULT: This option is implemented only for the legacy PBXT storage\nengine, which is disabled by default and no longer maintained. It sets the\nchild table\'s foreign key fields to their DEFAULT values when the referenced\nparent table key entries are updated or deleted.\n\nIf either clause is omitted, the default behavior for the omitted clause is\nRESTRICT.\n\nSee Foreign Keys for more information.\n\nDROP FOREIGN KEY\n----------------\n\nDrop a foreign key.\n\nSee Foreign Keys for more information.\n\nADD INDEX\n---------\n\nAdd a plain index.\n\nPlain indexes are regular indexes that are not unique, and are not acting as a\nprimary key or a foreign key. They are also not the \"specialized\" FULLTEXT or\nSPATIAL indexes.\n\nSee Getting Started with Indexes: Plain Indexes for more information.\n\nDROP INDEX\n----------\n\nDrop a plain index.\n\nPlain indexes are regular indexes that are not unique, and are not acting as a\nprimary key or a foreign key. They are also not the \"specialized\" FULLTEXT or\nSPATIAL indexes.\n\nSee Getting Started with Indexes: Plain Indexes for more information.\n\nADD UNIQUE INDEX\n----------------\n\nAdd a unique index.\n\nThe UNIQUE keyword means that the index will not accept duplicated values,','','https://mariadb.com/kb/en/alter-table/');
+update help_topic set description = CONCAT(description, '\nexcept for NULLs. An error will raise if you try to insert duplicate values in\na UNIQUE index.\n\nFor UNIQUE indexes, you can specify a name for the constraint, using the\nCONSTRAINT keyword. That name will be used in error messages.\n\nSee Getting Started with Indexes: Unique Index for more information.\n\nDROP UNIQUE INDEX\n-----------------\n\nDrop a unique index.\n\nThe UNIQUE keyword means that the index will not accept duplicated values,\nexcept for NULLs. An error will raise if you try to insert duplicate values in\na UNIQUE index.\n\nFor UNIQUE indexes, you can specify a name for the constraint, using the\nCONSTRAINT keyword. That name will be used in error messages.\n\nSee Getting Started with Indexes: Unique Index for more information.\n\nADD FULLTEXT INDEX\n------------------\n\nAdd a FULLTEXT index.\n\nSee Full-Text Indexes for more information.\n\nDROP FULLTEXT INDEX\n-------------------\n\nDrop a FULLTEXT index.\n\nSee Full-Text Indexes for more information.\n\nADD SPATIAL INDEX\n-----------------\n\nAdd a SPATIAL index.\n\nSee SPATIAL INDEX for more information.\n\nDROP SPATIAL INDEX\n------------------\n\nDrop a SPATIAL index.\n\nSee SPATIAL INDEX for more information.\n\nENABLE/ DISABLE KEYS\n--------------------\n\nDISABLE KEYS will disable all non unique keys for the table for storage\nengines that support this (at least MyISAM and Aria). This can be used to\nspeed up inserts into empty tables.\n\nENABLE KEYS will enable all disabled keys.\n\nRENAME TO\n---------\n\nRenames the table. See also RENAME TABLE.\n\nADD CONSTRAINT\n--------------\n\nModifies the table adding a constraint on a particular column or columns.\n\nMariaDB starting with 10.2.1\n----------------------------\nMariaDB 10.2.1 introduced new ways to define a constraint.\n\nNote: Before MariaDB 10.2.1, constraint expressions were accepted in syntax,\nbut ignored.\n\nALTER TABLE table_name \nADD CONSTRAINT [constraint_name] CHECK(expression);\nBefore a row is inserted or updated, all constraints are evaluated in the\norder they are defined. If any constraint fails, then the row will not be\nupdated. One can use most deterministic functions in a constraint, including\nUDF\'s.\n\nCREATE TABLE account_ledger (\n id INT PRIMARY KEY AUTO_INCREMENT,\n transaction_name VARCHAR(100),\n credit_account VARCHAR(100),\n credit_amount INT,\n debit_account VARCHAR(100),\n debit_amount INT);\n\nALTER TABLE account_ledger \nADD CONSTRAINT is_balanced \n CHECK((debit_amount + credit_amount) = 0);\n\nThe constraint_name is optional. If you don\'t provide one in the ALTER TABLE\nstatement, MariaDB auto-generates a name for you. This is done so that you can\nremove it later using DROP CONSTRAINT clause.\n\nYou can disable all constraint expression checks by setting the variable\ncheck_constraint_checks to OFF. You may find this useful when loading a table\nthat violates some constraints that you want to later find and fix in SQL.\n\nTo view constraints on a table, query information_schema.TABLE_CONSTRAINTS:\n\nSELECT CONSTRAINT_NAME, TABLE_NAME, CONSTRAINT_TYPE \nFROM information_schema.TABLE_CONSTRAINTS\nWHERE TABLE_NAME = \'account_ledger\';\n\n+-----------------+----------------+-----------------+\n| CONSTRAINT_NAME | TABLE_NAME | CONSTRAINT_TYPE |\n+-----------------+----------------+-----------------+\n| is_balanced | account_ledger | CHECK |\n+-----------------+----------------+-----------------+\n\nDROP CONSTRAINT\n---------------\n\nMariaDB starting with 10.2.22\n-----------------------------\nDROP CONSTRAINT for UNIQUE and FOREIGN KEY constraints was introduced in\nMariaDB 10.2.22 and MariaDB 10.3.13.\n\nMariaDB starting with 10.2.1\n----------------------------\nDROP CONSTRAINT for CHECK constraints was introduced in MariaDB 10.2.1\n\nModifies the table, removing the given constraint.\n\nALTER TABLE table_name\nDROP CONSTRAINT constraint_name;\n\nWhen you add a constraint to a table, whether through a CREATE TABLE or ALTER\nTABLE...ADD CONSTRAINT statement, you can either set a constraint_name\nyourself, or allow MariaDB to auto-generate one for you. To view constraints\non a table, query information_schema.TABLE_CONSTRAINTS. For instance,\n\nCREATE TABLE t (\n a INT,\n b INT,\n c INT,\n CONSTRAINT CHECK(a > b),\n CONSTRAINT check_equals CHECK(a = c));\n\nSELECT CONSTRAINT_NAME, TABLE_NAME, CONSTRAINT_TYPE \nFROM information_schema.TABLE_CONSTRAINTS\nWHERE TABLE_NAME = \'t\';\n\n+-----------------+----------------+-----------------+\n| CONSTRAINT_NAME | TABLE_NAME | CONSTRAINT_TYPE |\n+-----------------+----------------+-----------------+\n| check_equals | t | CHECK |\n| CONSTRAINT_1 | t | CHECK |\n+-----------------+----------------+-----------------+\n\nTo remove a constraint from the table, issue an ALTER TABLE...DROP CONSTRAINT\nstatement. For example,\n\nALTER TABLE t DROP CONSTRAINT is_unique;\n\nADD SYSTEM VERSIONING\n---------------------\n\nMariaDB starting with 10.3.4\n----------------------------\nSystem-versioned tables was added in MariaDB 10.3.4.\n\nAdd system versioning.\n\nDROP SYSTEM VERSIONING\n----------------------\n\nMariaDB starting with 10.3.4\n----------------------------\nSystem-versioned tables was added in MariaDB 10.3.4.\n\nDrop system versioning.\n\nADD PERIOD FOR SYSTEM_TIME\n--------------------------\n\nMariaDB starting with 10.3.4\n----------------------------\nSystem-versioned tables was added in MariaDB 10.3.4.\n\nFORCE\n-----\n\nALTER TABLE ... FORCE can force MariaDB to re-build the table.\n\nIn MariaDB 5.5 and before, this could only be done by setting the ENGINE table\noption to its old value. For example, for an InnoDB table, one could execute\nthe following:\n\nALTER TABLE tab_name ENGINE = InnoDB;\n\nThe FORCE option can be used instead. For example, :\n\nALTER TABLE tab_name FORCE;\n\nWith InnoDB, the table rebuild will only reclaim unused space (i.e. the space\npreviously used for deleted rows) if the innodb_file_per_table system variable\nis set to ON (the default). If the system variable is OFF, then the space will\nnot be reclaimed, but it will be-re-used for new data that\'s later added.\n\nEXCHANGE PARTITION\n------------------\n\nThis is used to exchange the contents of a partition with another table.\n\nThis is performed by swapping the tablespaces of the partition with the other\ntable.\n\nSee copying InnoDB\'s transportable tablespaces for more information.\n\nDISCARD TABLESPACE\n------------------\n\nThis is used to discard an InnoDB table\'s tablespace.\n\nSee copying InnoDB\'s transportable tablespaces for more information.\n\nIMPORT TABLESPACE\n-----------------\n\nThis is used to import an InnoDB table\'s tablespace. The tablespace should\nhave been copied from its original server after executing FLUSH TABLES FOR\nEXPORT.\n\nSee copying InnoDB\'s transportable tablespaces for more information.\n\nALTER TABLE ... IMPORT only applies to InnoDB tables. Most other popular\nstorage engines, such as Aria and MyISAM, will recognize their data files as\nsoon as they\'ve been placed in the proper directory under the datadir, and no\nspecial DDL is required to import them.\n\nALGORITHM\n---------\n\nThe ALTER TABLE statement supports the ALGORITHM clause. This clause is one of\nthe clauses that is used to implement online DDL. ALTER TABLE supports several\ndifferent algorithms. An algorithm can be explicitly chosen for an ALTER TABLE\noperation by setting the ALGORITHM clause. The supported values are:\n\n* ALGORITHM=DEFAULT - This implies the default behavior for the specific\nstatement, such as if no ALGORITHM clause is specified.\n* ALGORITHM=COPY\n* ALGORITHM=INPLACE\n* ALGORITHM=NOCOPY - This was added in MariaDB 10.3.7.\n* ALGORITHM=INSTANT - This was added in MariaDB 10.3.7.\n\nSee InnoDB Online DDL Overview: ALGORITHM for information on how the ALGORITHM\nclause affects InnoDB.\n\nALGORITHM=DEFAULT\n-----------------\n\nThe default behavior, which occurs if ALGORITHM=DEFAULT is specified, or if\nALGORITHM is not specified at all, usually only makes a copy if the operation\ndoesn\'t support being done in-place at all. In this case, the most efficient\navailable algorithm will usually be used.\n\nHowever, in MariaDB 10.3.6 and before, if the value of the old_alter_table\nsystem variable is set to ON, then the default behavior is to perform ALTER\nTABLE operations by making a copy of the table using the old algorithm.\n\nIn MariaDB 10.3.7 and later, the old_alter_table system variable is\ndeprecated. Instead, the alter_algorithm system variable defines the default\nalgorithm for ALTER TABLE operations.\n\nALGORITHM=COPY\n--------------\n\nALGORITHM=COPY is the name for the original ALTER TABLE algorithm from early\nMariaDB versions.\n\nWhen ALGORITHM=COPY is set, MariaDB essentially does the following operations:\n\n-- Create a temporary table with the new definition\nCREATE TEMPORARY TABLE tmp_tab (\n...\n);\n\n-- Copy the data from the original table\nINSERT INTO tmp_tab\n SELECT * FROM original_tab;\n\n-- Drop the original table\nDROP TABLE original_tab;\n\n-- Rename the temporary table, so that it replaces the original one\nRENAME TABLE tmp_tab TO original_tab;\n\nThis algorithm is very inefficient, but it is generic, so it works for all\nstorage engines.\n\nIf ALGORITHM=COPY is specified, then the copy algorithm will be used even if\nit is not necessary. This can result in a lengthy table copy. If multiple\nALTER TABLE operations are required that each require the table to be rebuilt,\nthen it is best to specify all operations in a single ALTER TABLE statement,\nso that the table is only rebuilt once.\n\nALGORITHM=INPLACE\n-----------------\n\nALGORITHM=COPY can be incredibly slow, because the whole table has to be\ncopied and rebuilt. ALGORITHM=INPLACE was introduced as a way to avoid this by\nperforming operations in-place and avoiding the table copy and rebuild, when\npossible.\n\nWhen ALGORITHM=INPLACE is set, the underlying storage engine uses\noptimizations to perform the operation while avoiding the table copy and\nrebuild. However, INPLACE is a bit of a misnomer, since some operations may\nstill require the table to be rebuilt for some storage engines. Regardless,\nseveral operations can be performed without a full copy of the table for some\nstorage engines.\n\nA more accurate name would have been ALGORITHM=ENGINE, where ENGINE refers to\nan \"engine-specific\" algorithm.\n\nIf an ALTER TABLE operation supports ALGORITHM=INPLACE, then it can be\nperformed using optimizations by the underlying storage engine, but it may\nrebuilt.\n\nSee InnoDB Online DDL Operations with ALGORITHM=INPLACE for more.\n\nALGORITHM=NOCOPY\n----------------\n\nALGORITHM=NOCOPY was introduced in MariaDB 10.3.7.\n\nALGORITHM=INPLACE can sometimes be surprisingly slow in instances where it has\nto rebuild the clustered index, because when the clustered index has to be\nrebuilt, the whole table has to be rebuilt. ALGORITHM=NOCOPY was introduced as\na way to avoid this.\n\nIf an ALTER TABLE operation supports ALGORITHM=NOCOPY, then it can be\nperformed without rebuilding the clustered index.\n\nIf ALGORITHM=NOCOPY is specified for an ALTER TABLE operation that does not\nsupport ALGORITHM=NOCOPY, then an error will be raised. In this case, raising\nan error is preferable, if the alternative is for the operation to rebuild the\nclustered index, and perform unexpectedly slowly.\n\nSee InnoDB Online DDL Operations with ALGORITHM=NOCOPY for more.\n\nALGORITHM=INSTANT\n-----------------\n\nALGORITHM=INSTANT was introduced in MariaDB 10.3.7.\n\nALGORITHM=INPLACE can sometimes be surprisingly slow in instances where it has\nto modify data files. ALGORITHM=INSTANT was introduced as a way to avoid this.\n\nIf an ALTER TABLE operation supports ALGORITHM=INSTANT, then it can be\nperformed without modifying any data files.\n\nIf ALGORITHM=INSTANT is specified for an ALTER TABLE operation that does not\nsupport ALGORITHM=INSTANT, then an error will be raised. In this case, raising\nan error is preferable, if the alternative is for the operation to modify data\nfiles, and perform unexpectedly slowly.\n\nSee InnoDB Online DDL Operations with ALGORITHM=INSTANT for more.\n\nLOCK\n----\n\nThe ALTER TABLE statement supports the LOCK clause. This clause is one of the\nclauses that is used to implement online DDL. ALTER TABLE supports several\ndifferent locking strategies. A locking strategy can be explicitly chosen for\nan ALTER TABLE operation by setting the LOCK clause. The supported values are:\n\n* DEFAULT: Acquire the least restrictive lock on the table that is supported\nfor the specific operation. Permit the maximum amount of concurrency that is\nsupported for the specific operation.\n* NONE: Acquire no lock on the table. Permit all concurrent DML. If this\nlocking strategy is not permitted for an operation, then an error is raised.\n* SHARED: Acquire a read lock on the table. Permit read-only concurrent DML.\nIf this locking strategy is not permitted for an operation, then an error is\nraised.\n* EXCLUSIVE: Acquire a write lock on the table. Do not permit concurrent DML.\n\nDifferent storage engines support different locking strategies for different\noperations. If a specific locking strategy is chosen for an ALTER TABLE\noperation, and that table\'s storage engine does not support that locking\nstrategy for that specific operation, then an error will be raised.\n\nIf the LOCK clause is not explicitly set, then the operation uses LOCK=DEFAULT.\n\nALTER ONLINE TABLE is equivalent to LOCK=NONE. Therefore, the ALTER ONLINE\nTABLE statement can be used to ensure that your ALTER TABLE operation allows\nall concurrent DML.\n\nSee InnoDB Online DDL Overview: LOCK for information on how the LOCK clause\naffects InnoDB.\n\nProgress Reporting\n------------------\n\nMariaDB provides progress reporting for ALTER TABLE statement for clients that\nsupport the new progress reporting protocol. For example, if you were using\nthe mysql client, then the progress report might look like this::\n\nALTER TABLE test ENGINE=Aria;\nStage: 1 of 2 \'copy to tmp table\' 46% of stage\n\nThe progress report is also shown in the output of the SHOW PROCESSLIST\nstatement and in the contents of the information_schema.PROCESSLIST table.\n\nSee Progress Reporting for more information.\n\nAborting ALTER TABLE Operations\n-------------------------------\n\nIf an ALTER TABLE operation is being performed and the connection is killed,') WHERE help_topic_id = 697;
+update help_topic set description = CONCAT(description, '\nthe changes will be rolled back in a controlled manner. The rollback can be a\nslow operation as the time it takes is relative to how far the operation has\nprogressed.\n\nMariaDB starting with 10.2.13\n-----------------------------\nAborting ALTER TABLE ... ALGORITHM=COPY was made faster by removing excessive\nundo logging (MDEV-11415). This significantly shortens the time it takes to\nabort a running ALTER TABLE operation.\n\nAtomic ALTER TABLE\n------------------\n\nMariaDB starting with 10.6.1\n----------------------------\nFrom MariaDB 10.6, ALTER TABLE is atomic for most engines, including InnoDB,\nMyRocks, MyISAM and Aria (MDEV-25180). This means that if there is a crash\n(server down or power outage) during an ALTER TABLE operation, after recovery,\neither the old table and associated triggers and status will be intact, or the\nnew table will be active.\n\nIn older MariaDB versions one could get leftover #sql-alter..\',\n\'#sql-backup..\' or \'table_name.frmË\' files if the system crashed during the\nALTER TABLE operation.\n\nSee Atomic DDL for more information.\n\nReplication\n-----------\n\nMariaDB starting with 10.8.1\n----------------------------\nBefore MariaDB 10.8.1, ALTER TABLE got fully executed on the primary first,\nand only then was it replicated and started executing on replicas. From\nMariaDB 10.8.1, ALTER TABLE gains an option to replicate sooner and begin\nexecuting on replicas when it merely starts executing on the primary, not when\nit finishes. This way the replication lag caused by a heavy ALTER TABLE can be\ncompletely eliminated (MDEV-11675).\n\nExamples\n--------\n\nAdding a new column:\n\nALTER TABLE t1 ADD x INT;\n\nDropping a column:\n\nALTER TABLE t1 DROP x;\n\nModifying the type of a column:\n\nALTER TABLE t1 MODIFY x bigint unsigned;\n\nChanging the name and type of a column:\n\nALTER TABLE t1 CHANGE a b bigint unsigned auto_increment;\n\nCombining multiple clauses in a single ALTER TABLE statement, separated by\ncommas:\n\nALTER TABLE t1 DROP x, ADD x2 INT, CHANGE y y2 INT;\n\nChanging the storage engine and adding a comment:\n\nALTER TABLE t1 \n ENGINE = InnoDB\n COMMENT = \'First of three tables containing usage info\';\n\nRebuilding the table (the previous example will also rebuild the table if it\nwas already InnoDB):\n\nALTER TABLE t1 FORCE;\n\nDropping an index:\n\nALTER TABLE rooms DROP INDEX u;\n\nAdding a unique index:\n\nALTER TABLE rooms ADD UNIQUE INDEX u(room_number);\n\nFrom MariaDB 10.5.3, adding a primary key for an application-time period table\nwith a WITHOUT OVERLAPS constraint:\n\nALTER TABLE rooms ADD PRIMARY KEY(room_number, p WITHOUT OVERLAPS);\n\nFrom MariaDB 10.8.1, ALTER query can be replicated faster with the setting of\n\nSET @@SESSION.binlog_alter_two_phase = true;\n\nprior the ALTER query. Binlog would contain two event groups\n\n| master-bin.000001 | 495 | Gtid | 1 | 537 | GTID\n0-1-2 START ALTER |\n| master-bin.000001 | 537 | Query | 1 | 655 | use\n`test`; alter table t add column b int, algorithm=inplace |\n| master-bin.000001 | 655 | Gtid | 1 | 700 | GTID\n0-1-3 COMMIT ALTER id=2 |\n| master-bin.000001 | 700 | Query | 1 | 835 | use\n`test`; alter table t add column b int, algorithm=inplace |\n\nof which the first one gets delivered to replicas before ALTER is taken to\nactual execution on the primary.\n\nURL: https://mariadb.com/kb/en/alter-table/') WHERE help_topic_id = 697;
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (698,38,'ALTER DATABASE','Modifies a database, changing its overall characteristics.\n\nSyntax\n------\n\nALTER {DATABASE | SCHEMA} [db_name]\n alter_specification ...\nALTER {DATABASE | SCHEMA} db_name\n UPGRADE DATA DIRECTORY NAME\n\nalter_specification:\n [DEFAULT] CHARACTER SET [=] charset_name\n | [DEFAULT] COLLATE [=] collation_name\n | COMMENT [=] \'comment\'\n\nDescription\n-----------\n\nALTER DATABASE enables you to change the overall characteristics of a\ndatabase. These characteristics are stored in the db.opt file in the database\ndirectory. To use ALTER DATABASE, you need the ALTER privilege on the\ndatabase. ALTER SCHEMA is a synonym for ALTER DATABASE.\n\nThe CHARACTER SET clause changes the default database character set. The\nCOLLATE clause changes the default database collation. See Character Sets and\nCollations for more.\n\nYou can see what character sets and collations are available using,\nrespectively, the SHOW CHARACTER SET and SHOW COLLATION statements.\n\nChanging the default character set/collation of a database does not change the\ncharacter set/collation of any stored procedures or stored functions that were\npreviously created, and relied on the defaults. These need to be dropped and\nrecreated in order to apply the character set/collation changes.\n\nThe database name can be omitted from the first syntax, in which case the\nstatement applies to the default database.\n\nThe syntax that includes the UPGRADE DATA DIRECTORY NAME clause was added in\nMySQL 5.1.23. It updates the name of the directory associated with the\ndatabase to use the encoding implemented in MySQL 5.1 for mapping database\nnames to database directory names (see Identifier to File Name Mapping). This\nclause is for use under these conditions:\n\n* It is intended when upgrading MySQL to 5.1 or later from older versions.\n* It is intended to update a database directory name to the current encoding\nformat if the name contains special characters that need encoding.\n* The statement is used by mysqlcheck (as invoked by mysql_upgrade).\n\nFor example,if a database in MySQL 5.0 has a name of a-b-c, the name contains\ninstance of the `-\' character. In 5.0, the database directory is also named\na-b-c, which is not necessarily safe for all file systems. In MySQL 5.1 and\nup, the same database name is encoded as a@002db@002dc to produce a file\nsystem-neutral directory name.\n\nWhen a MySQL installation is upgraded to MySQL 5.1 or later from an older\nversion,the server displays a name such as a-b-c (which is in the old format)\nas #mysql50#a-b-c, and you must refer to the name using the #mysql50# prefix.\nUse UPGRADE DATA DIRECTORY NAME in this case to explicitly tell the server to\nre-encode the database directory name to the current encoding format:\n\nALTER DATABASE `#mysql50#a-b-c` UPGRADE DATA DIRECTORY NAME;\n\nAfter executing this statement, you can refer to the database as a-b-c without\nthe special #mysql50# prefix.\n\nCOMMENT\n-------\n\nMariaDB starting with 10.5.0\n----------------------------\nFrom MariaDB 10.5.0, it is possible to add a comment of a maximum of 1024\nbytes. If the comment length exceeds this length, a error/warning code 4144 is\nthrown. The database comment is also added to the db.opt file, as well as to\nthe information_schema.schemata table.\n\nExamples\n--------\n\nALTER DATABASE test CHARACTER SET=\'utf8\' COLLATE=\'utf8_bin\';\n\nFrom MariaDB 10.5.0:\n\nALTER DATABASE p COMMENT=\'Presentations\';\n\nURL: https://mariadb.com/kb/en/alter-database/','','https://mariadb.com/kb/en/alter-database/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (699,38,'ALTER EVENT','Modifies one or more characteristics of an existing event.\n\nSyntax\n------\n\nALTER\n [DEFINER = { user | CURRENT_USER }]\n EVENT event_name\n [ON SCHEDULE schedule]\n [ON COMPLETION [NOT] PRESERVE]\n [RENAME TO new_event_name]\n [ENABLE | DISABLE | DISABLE ON SLAVE]\n [COMMENT \'comment\']\n [DO sql_statement]\n\nDescription\n-----------\n\nThe ALTER EVENT statement is used to change one or more of the characteristics\nof an existing event without the need to drop and recreate it. The syntax for\neach of the DEFINER, ON SCHEDULE, ON COMPLETION, COMMENT, ENABLE / DISABLE,\nand DO clauses is exactly the same as when used with CREATE EVENT.\n\nThis statement requires the EVENT privilege. When a user executes a successful\nALTER EVENT statement, that user becomes the definer for the affected event.\n\n(In MySQL 5.1.11 and earlier, an event could be altered only by its definer,\nor by a user having the SUPER privilege.)\n\nALTER EVENT works only with an existing event:\n\nALTER EVENT no_such_event ON SCHEDULE EVERY \'2:3\' DAY_HOUR;\nERROR 1539 (HY000): Unknown event \'no_such_event\'\n\nExamples\n--------\n\nALTER EVENT myevent \n ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 2 HOUR\n DO\n UPDATE myschema.mytable SET mycol = mycol + 1;\n\nURL: https://mariadb.com/kb/en/alter-event/','','https://mariadb.com/kb/en/alter-event/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (700,38,'ALTER FUNCTION','Syntax\n------\n\nALTER FUNCTION func_name [characteristic ...]\n\ncharacteristic:\n { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }\n | SQL SECURITY { DEFINER | INVOKER }\n | COMMENT \'string\'\n\nDescription\n-----------\n\nThis statement can be used to change the characteristics of a stored function.\nMore than one change may be specified in an ALTER FUNCTION statement. However,\nyou cannot change the parameters or body of a stored function using this\nstatement; to make such changes, you must drop and re-create the function\nusing DROP FUNCTION and CREATE FUNCTION.\n\nYou must have the ALTER ROUTINE privilege for the function. (That privilege is\ngranted automatically to the function creator.) If binary logging is enabled,\nthe ALTER FUNCTION statement might also require the SUPER privilege, as\ndescribed in Binary Logging of Stored Routines.\n\nExample\n-------\n\nALTER FUNCTION hello SQL SECURITY INVOKER;\n\nURL: https://mariadb.com/kb/en/alter-function/','','https://mariadb.com/kb/en/alter-function/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (701,38,'ALTER LOGFILE GROUP','Syntax\n------\n\nALTER LOGFILE GROUP logfile_group\n ADD UNDOFILE \'file_name\'\n [INITIAL_SIZE [=] size]\n [WAIT]\n ENGINE [=] engine_name\n\nThe ALTER LOGFILE GROUP statement is not supported by MariaDB. It was\noriginally inherited from MySQL NDB Cluster. See MDEV-19295 for more\ninformation.\n\nURL: https://mariadb.com/kb/en/alter-logfile-group/','','https://mariadb.com/kb/en/alter-logfile-group/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (702,38,'ALTER PROCEDURE','Syntax\n------\n\nALTER PROCEDURE proc_name [characteristic ...]\n\ncharacteristic:\n { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }\n | SQL SECURITY { DEFINER | INVOKER }\n | COMMENT \'string\'\n\nDescription\n-----------\n\nThis statement can be used to change the characteristics of a stored\nprocedure. More than one change may be specified in an ALTER PROCEDURE\nstatement. However, you cannot change the parameters or body of a stored\nprocedure using this statement. To make such changes, you must drop and\nre-create the procedure using either CREATE OR REPLACE PROCEDURE (since\nMariaDB 10.1.3) or DROP PROCEDURE and CREATE PROCEDURE (MariaDB 10.1.2 and\nbefore).\n\nYou must have the ALTER ROUTINE privilege for the procedure. By default, that\nprivilege is granted automatically to the procedure creator. See Stored\nRoutine Privileges.\n\nExample\n-------\n\nALTER PROCEDURE simpleproc SQL SECURITY INVOKER;\n\nURL: https://mariadb.com/kb/en/alter-procedure/','','https://mariadb.com/kb/en/alter-procedure/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (703,38,'ALTER SERVER','Syntax\n------\n\nALTER SERVER server_name\n OPTIONS (option [, option] ...)\n\nDescription\n-----------\n\nAlters the server information for server_name, adjusting the specified options\nas per the CREATE SERVER command. The corresponding fields in the\nmysql.servers table are updated accordingly. This statement requires the SUPER\nprivilege or, from MariaDB 10.5.2, the FEDERATED ADMIN privilege.\n\nALTER SERVER is not written to the binary log, irrespective of the binary log\nformat being used. From MariaDB 10.1.13, Galera replicates the CREATE SERVER,\nALTER SERVER and DROP SERVER statements.\n\nExamples\n--------\n\nALTER SERVER s OPTIONS (USER \'sally\');\n\nURL: https://mariadb.com/kb/en/alter-server/','','https://mariadb.com/kb/en/alter-server/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (704,38,'ALTER TABLESPACE','The ALTER TABLESPACE statement is not supported by MariaDB. It was originally\ninherited from MySQL NDB Cluster. In MySQL 5.7 and later, the statement is\nalso supported for InnoDB. However, MariaDB has chosen not to include that\nspecific feature. See MDEV-19294 for more information.\n\nURL: https://mariadb.com/kb/en/alter-tablespace/','','https://mariadb.com/kb/en/alter-tablespace/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (705,38,'ALTER VIEW','Syntax\n------\n\nALTER\n [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]\n [DEFINER = { user | CURRENT_USER }]\n [SQL SECURITY { DEFINER | INVOKER }]\n VIEW view_name [(column_list)]\n AS select_statement\n [WITH [CASCADED | LOCAL] CHECK OPTION]\n\nDescription\n-----------\n\nThis statement changes the definition of a view, which must exist. The syntax\nis similar to that for CREATE VIEW and the effect is the same as for CREATE OR\nREPLACE VIEW if the view exists. This statement requires the CREATE VIEW and\nDROP privileges for the view, and some privilege for each column referred to\nin the SELECT statement. ALTER VIEW is allowed only to the definer or users\nwith the SUPER privilege.\n\nExample\n-------\n\nALTER VIEW v AS SELECT a, a*3 AS a2 FROM t;\n\nURL: https://mariadb.com/kb/en/alter-view/','','https://mariadb.com/kb/en/alter-view/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (706,38,'CREATE TABLE','Syntax\n------\n\nCREATE [OR REPLACE] [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name\n (create_definition,...) [table_options ]... [partition_options]\nCREATE [OR REPLACE] [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name\n [(create_definition,...)] [table_options ]... [partition_options]\n select_statement\nCREATE [OR REPLACE] [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name\n { LIKE old_table_name | (LIKE old_table_name) }\nselect_statement:\n [IGNORE | REPLACE] [AS] SELECT ... (Some legal select statement)\n\nDescription\n-----------\n\nUse the CREATE TABLE statement to create a table with the given name.\n\nIn its most basic form, the CREATE TABLE statement provides a table name\nfollowed by a list of columns, indexes, and constraints. By default, the table\nis created in the default database. Specify a database with db_name.tbl_name.\nIf you quote the table name, you must quote the database name and table name\nseparately as `db_name`.`tbl_name`. This is particularly useful for CREATE\nTABLE ... SELECT, because it allows to create a table into a database, which\ncontains data from other databases. See Identifier Qualifiers.\n\nIf a table with the same name exists, error 1050 results. Use IF NOT EXISTS to\nsuppress this error and issue a note instead. Use SHOW WARNINGS to see notes.\n\nThe CREATE TABLE statement automatically commits the current transaction,\nexcept when using the TEMPORARY keyword.\n\nFor valid identifiers to use as table names, see Identifier Names.\n\nNote: if the default_storage_engine is set to ColumnStore then it needs\nsetting on all UMs. Otherwise when the tables using the default engine are\nreplicated across UMs they will use the wrong engine. You should therefore not\nuse this option as a session variable with ColumnStore.\n\nMicrosecond precision can be between 0-6. If no precision is specified it is\nassumed to be 0, for backward compatibility reasons.\n\nPrivileges\n----------\n\nExecuting the CREATE TABLE statement requires the CREATE privilege for the\ntable or the database.\n\nCREATE OR REPLACE\n-----------------\n\nIf the OR REPLACE clause is used and the table already exists, then instead of\nreturning an error, the server will drop the existing table and replace it\nwith the newly defined table.\n\nThis syntax was originally added to make replication more robust if it has to\nrollback and repeat statements such as CREATE ... SELECT on replicas.\n\nCREATE OR REPLACE TABLE table_name (a int);\n\nis basically the same as:\n\nDROP TABLE IF EXISTS table_name;\nCREATE TABLE table_name (a int);\n\nwith the following exceptions:\n\n* If table_name was locked with LOCK TABLES it will continue to be locked\nafter the statement.\n* Temporary tables are only dropped if the TEMPORARY keyword was used. (With\nDROP TABLE, temporary tables are preferred to be dropped before normal\ntables).\n\nThings to be Aware of With CREATE OR REPLACE\n--------------------------------------------\n\n* The table is dropped first (if it existed), after that the CREATE is done.\nBecause of this, if the CREATE fails, then the table will not exist anymore\nafter the statement. If the table was used with LOCK TABLES it will be\nunlocked.\n* One can\'t use OR REPLACE together with IF EXISTS.\n* Slaves in replication will by default use CREATE OR REPLACE when replicating\nCREATE statements that don\'\'t use IF EXISTS. This can be changed by setting\nthe variable slave-ddl-exec-mode to STRICT.\n\nCREATE TABLE IF NOT EXISTS\n--------------------------\n\nIf the IF NOT EXISTS clause is used, then the table will only be created if a\ntable with the same name does not already exist. If the table already exists,\nthen a warning will be triggered by default.\n\nCREATE TEMPORARY TABLE\n----------------------\n\nUse the TEMPORARY keyword to create a temporary table that is only available\nto the current session. Temporary tables are dropped when the session ends.\nTemporary table names are specific to the session. They will not conflict with\nother temporary tables from other sessions even if they share the same name.\nThey will shadow names of non-temporary tables or views, if they are\nidentical. A temporary table can have the same name as a non-temporary table\nwhich is located in the same database. In that case, their name will reference\nthe temporary table when used in SQL statements. You must have the CREATE\nTEMPORARY TABLES privilege on the database to create temporary tables. If no\nstorage engine is specified, the default_tmp_storage_engine setting will\ndetermine the engine.\n\nROCKSDB temporary tables cannot be created by setting the\ndefault_tmp_storage_engine system variable, or using CREATE TEMPORARY TABLE\nLIKE. Before MariaDB 10.7, they could be specified, but would silently fail,\nand a MyISAM table would be created instead. From MariaDB 10.7 an error is\nreturned. Explicitly creating a temporary table with ENGINE=ROCKSDB has never\nbeen permitted.\n\nCREATE TABLE ... LIKE\n---------------------\n\nUse the LIKE clause instead of a full table definition to create a table with\nthe same definition as another table, including columns, indexes, and table\noptions. Foreign key definitions, as well as any DATA DIRECTORY or INDEX\nDIRECTORY table options specified on the original table, will not be created.\n\nCREATE TABLE ... SELECT\n-----------------------\n\nYou can create a table containing data from other tables using the CREATE ...\nSELECT statement. Columns will be created in the table for each field returned\nby the SELECT query.\n\nYou can also define some columns normally and add other columns from a SELECT.\nYou can also create columns in the normal way and assign them some values\nusing the query, this is done to force a certain type or other field\ncharacteristics. The columns that are not named in the query will be placed\nbefore the others. For example:\n\nCREATE TABLE test (a INT NOT NULL, b CHAR(10)) ENGINE=MyISAM\n SELECT 5 AS b, c, d FROM another_table;\n\nRemember that the query just returns data. If you want to use the same\nindexes, or the same columns attributes ([NOT] NULL, DEFAULT, AUTO_INCREMENT)\nin the new table, you need to specify them manually. Types and sizes are not\nautomatically preserved if no data returned by the SELECT requires the full\nsize, and VARCHAR could be converted into CHAR. The CAST() function can be\nused to forcee the new table to use certain types.\n\nAliases (AS) are taken into account, and they should always be used when you\nSELECT an expression (function, arithmetical operation, etc).\n\nIf an error occurs during the query, the table will not be created at all.\n\nIf the new table has a primary key or UNIQUE indexes, you can use the IGNORE\nor REPLACE keywords to handle duplicate key errors during the query. IGNORE\nmeans that the newer values must not be inserted an identical value exists in\nthe index. REPLACE means that older values must be overwritten.\n\nIf the columns in the new table are more than the rows returned by the query,\nthe columns populated by the query will be placed after other columns. Note\nthat if the strict SQL_MODE is on, and the columns that are not names in the\nquery do not have a DEFAULT value, an error will raise and no rows will be\ncopied.\n\nConcurrent inserts are not used during the execution of a CREATE ... SELECT.\n\nIf the table already exists, an error similar to the following will be\nreturned:\n\nERROR 1050 (42S01): Table \'t\' already exists\n\nIf the IF NOT EXISTS clause is used and the table exists, a note will be\nproduced instead of an error.\n\nTo insert rows from a query into an existing table, INSERT ... SELECT can be\nused.\n\nColumn Definitions\n------------------\n\ncreate_definition:\n { col_name column_definition | index_definition | period_definition | CHECK\n(expr) }\ncolumn_definition:\n data_type\n [NOT NULL | NULL] [DEFAULT default_value | (expression)]\n [ON UPDATE [NOW | CURRENT_TIMESTAMP] [(precision)]]\n [AUTO_INCREMENT] [ZEROFILL] [UNIQUE [KEY] | [PRIMARY] KEY]\n [INVISIBLE] [{WITH|WITHOUT} SYSTEM VERSIONING]\n [COMMENT \'string\'] [REF_SYSTEM_ID = value]\n [reference_definition]\n | data_type [GENERATED ALWAYS]\n AS { { ROW {START|END} } | { (expression) [VIRTUAL | PERSISTENT | STORED] } }\n [UNIQUE [KEY]] [COMMENT \'string\']\nconstraint_definition:\n CONSTRAINT [constraint_name] CHECK (expression)\nNote: Until MariaDB 10.4, MariaDB accepts the shortcut format with a\nREFERENCES clause only in ALTER TABLE and CREATE TABLE statements, but that\nsyntax does nothing. For example:\n\nCREATE TABLE b(for_key INT REFERENCES a(not_key));\n\nMariaDB simply parses it without returning any error or warning, for\ncompatibility with other DBMS\'s. Before MariaDB 10.2.1 this was also true for\nCHECK constraints. However, only the syntax described below creates foreign\nkeys.\n\nFrom MariaDB 10.5, MariaDB will attempt to apply the constraint. See Foreign\nKeys examples.\n\nEach definition either creates a column in the table or specifies and index or\nconstraint on one or more columns. See Indexes below for details on creating\nindexes.\n\nCreate a column by specifying a column name and a data type, optionally\nfollowed by column options. See Data Types for a full list of data types\nallowed in MariaDB.\n\nNULL and NOT NULL\n-----------------\n\nUse the NULL or NOT NULL options to specify that values in the column may or\nmay not be NULL, respectively. By default, values may be NULL. See also NULL\nValues in MariaDB.\n\nDEFAULT Column Option\n---------------------\n\nMariaDB starting with 10.2.1\n----------------------------\nThe DEFAULT clause was enhanced in MariaDB 10.2.1. Some enhancements include\n\n* BLOB and TEXT columns now support DEFAULT.\n* The DEFAULT clause can now be used with an expression or function.\n\nSpecify a default value using the DEFAULT clause. If you don\'t specify DEFAULT\nthen the following rules apply:\n\n* If the column is not defined with NOT NULL, AUTO_INCREMENT or TIMESTAMP, an\nexplicit DEFAULT NULL will be added.\nNote that in MySQL and in MariaDB before 10.1.6, you may get an explicit\nDEFAULT for primary key parts, if not specified with NOT NULL.\n\nThe default value will be used if you INSERT a row without specifying a value\nfor that column, or if you specify DEFAULT for that column. Before MariaDB\n10.2.1 you couldn\'t usually provide an expression or function to evaluate at\ninsertion time. You had to provide a constant default value instead. The one\nexception is that you may use CURRENT_TIMESTAMP as the default value for a\nTIMESTAMP column to use the current timestamp at insertion time.\n\nCURRENT_TIMESTAMP may also be used as the default value for a DATETIME\n\nFrom MariaDB 10.2.1 you can use most functions in DEFAULT. Expressions should\nhave parentheses around them. If you use a non deterministic function in\nDEFAULT then all inserts to the table will be replicated in row mode. You can\neven refer to earlier columns in the DEFAULT expression (excluding\nAUTO_INCREMENT columns):\n\nCREATE TABLE t1 (a int DEFAULT (1+1), b int DEFAULT (a+1));\nCREATE TABLE t2 (a bigint primary key DEFAULT UUID_SHORT());\n\nThe DEFAULT clause cannot contain any stored functions or subqueries, and a\ncolumn used in the clause must already have been defined earlier in the\nstatement.\n\nSince MariaDB 10.2.1, it is possible to assign BLOB or TEXT columns a DEFAULT\nvalue. In earlier versions, assigning a default to these columns was not\npossible.\n\nMariaDB starting with 10.3.3\n----------------------------\nStarting from 10.3.3 you can also use DEFAULT (NEXT VALUE FOR sequence)\n\nAUTO_INCREMENT Column Option\n----------------------------\n\nUse AUTO_INCREMENT to create a column whose value can can be set automatically\nfrom a simple counter. You can only use AUTO_INCREMENT on a column with an\ninteger type. The column must be a key, and there can only be one\nAUTO_INCREMENT column in a table. If you insert a row without specifying a\nvalue for that column (or if you specify 0, NULL, or DEFAULT as the value),\nthe actual value will be taken from the counter, with each insertion\nincrementing the counter by one. You can still insert a value explicitly. If\nyou insert a value that is greater than the current counter value, the counter\nis set based on the new value. An AUTO_INCREMENT column is implicitly NOT\nNULL. Use LAST_INSERT_ID to get the AUTO_INCREMENT value most recently used by\nan INSERT statement.\n\nZEROFILL Column Option\n----------------------\n\nIf the ZEROFILL column option is specified for a column using a numeric data\ntype, then the column will be set to UNSIGNED and the spaces used by default\nto pad the field are replaced with zeros. ZEROFILL is ignored in expressions\nor as part of a UNION. ZEROFILL is a non-standard MySQL and MariaDB\nenhancement.\n\nPRIMARY KEY Column Option\n-------------------------\n\nUse PRIMARY KEY to make a column a primary key. A primary key is a special\ntype of a unique key. There can be at most one primary key per table, and it\nis implicitly NOT NULL.\n\nSpecifying a column as a unique key creates a unique index on that column. See\nthe Index Definitions section below for more information.\n\nUNIQUE KEY Column Option\n------------------------\n\nUse UNIQUE KEY (or just UNIQUE) to specify that all values in the column must\nbe distinct from each other. Unless the column is NOT NULL, there may be\nmultiple rows with NULL in the column.\n\nSpecifying a column as a unique key creates a unique index on that column. See\nthe Index Definitions section below for more information.\n\nCOMMENT Column Option\n---------------------\n\nYou can provide a comment for each column using the COMMENT clause. The\nmaximum length is 1024 characters. Use the SHOW FULL COLUMNS statement to see\ncolumn comments.\n\nREF_SYSTEM_ID\n-------------\n\nREF_SYSTEM_ID can be used to specify Spatial Reference System IDs for spatial\ndata type columns. For example:\n\nCREATE TABLE t1(g GEOMETRY(9,4) REF_SYSTEM_ID=101);\n\nGenerated Columns\n-----------------\n\nA generated column is a column in a table that cannot explicitly be set to a\nspecific value in a DML query. Instead, its value is automatically generated\nbased on an expression. This expression might generate the value based on the\nvalues of other columns in the table, or it might generate the value by\ncalling built-in functions or user-defined functions (UDFs).\n\nThere are two types of generated columns:\n\n* PERSISTENT or STORED: This type\'s value is actually stored in the table.','','https://mariadb.com/kb/en/create-table/');
+update help_topic set description = CONCAT(description, '\n* VIRTUAL: This type\'s value is not stored at all. Instead, the value is\ngenerated dynamically when the table is queried. This type is the default.\n\nGenerated columns are also sometimes called computed columns or virtual\ncolumns.\n\nFor a complete description about generated columns and their limitations, see\nGenerated (Virtual and Persistent/Stored) Columns.\n\nCOMPRESSED\n----------\n\nMariaDB starting with 10.3.3\n----------------------------\nCertain columns may be compressed. See Storage-Engine Independent Column\nCompression.\n\nINVISIBLE\n---------\n\nMariaDB starting with 10.3.3\n----------------------------\nColumns may be made invisible, and hidden in certain contexts. See Invisible\nColumns.\n\nWITH SYSTEM VERSIONING Column Option\n------------------------------------\n\nMariaDB starting with 10.3.4\n----------------------------\nColumns may be explicitly marked as included from system versioning. See\nSystem-versioned tables for details.\n\nWITHOUT SYSTEM VERSIONING Column Option\n---------------------------------------\n\nMariaDB starting with 10.3.4\n----------------------------\nColumns may be explicitly marked as excluded from system versioning. See\nSystem-versioned tables for details.\n\nIndex Definitions\n-----------------\n\nindex_definition:\n {INDEX|KEY} [index_name] [index_type] (index_col_name,...) [index_option]\n...\n {{{|}}} {FULLTEXT|SPATIAL} [INDEX|KEY] [index_name] (index_col_name,...)\n[index_option] ...\n {{{|}}} [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (index_col_name,...)\n[index_option] ...\n {{{|}}} [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY] [index_name] [index_type]\n(index_col_name,...) [index_option] ...\n {{{|}}} [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name,...)\nreference_definition\n\nindex_col_name:\n col_name [(length)] [ASC | DESC]\n\nindex_type:\n USING {BTREE | HASH | RTREE}\n\nindex_option:\n [ KEY_BLOCK_SIZE [=] value\n {{{|}}} index_type\n {{{|}}} WITH PARSER parser_name\n {{{|}}} COMMENT \'string\'\n {{{|}}} CLUSTERING={YES| NO} ]\n [ IGNORED | NOT IGNORED ]\n\nreference_definition:\n REFERENCES tbl_name (index_col_name,...)\n [MATCH FULL | MATCH PARTIAL | MATCH SIMPLE]\n [ON DELETE reference_option]\n [ON UPDATE reference_option]\n\nreference_option:\n RESTRICT | CASCADE | SET NULL | NO ACTION\n\nINDEX and KEY are synonyms.\n\nIndex names are optional, if not specified an automatic name will be assigned.\nIndex name are needed to drop indexes and appear in error messages when a\nconstraint is violated.\n\nIndex Categories\n----------------\n\nPlain Indexes\n-------------\n\nPlain indexes are regular indexes that are not unique, and are not acting as a\nprimary key or a foreign key. They are also not the \"specialized\" FULLTEXT or\nSPATIAL indexes.\n\nSee Getting Started with Indexes: Plain Indexes for more information.\n\nPRIMARY KEY\n-----------\n\nFor PRIMARY KEY indexes, you can specify a name for the index, but it is\nignored, and the name of the index is always PRIMARY. From MariaDB 10.3.18 and\nMariaDB 10.4.8, a warning is explicitly issued if a name is specified. Before\nthen, the name was silently ignored.\n\nSee Getting Started with Indexes: Primary Key for more information.\n\nUNIQUE\n------\n\nThe UNIQUE keyword means that the index will not accept duplicated values,\nexcept for NULLs. An error will raise if you try to insert duplicate values in\na UNIQUE index.\n\nFor UNIQUE indexes, you can specify a name for the constraint, using the\nCONSTRAINT keyword. That name will be used in error messages.\n\nSee Getting Started with Indexes: Unique Index for more information.\n\nFOREIGN KEY\n-----------\n\nFor FOREIGN KEY indexes, a reference definition must be provided.\n\nFor FOREIGN KEY indexes, you can specify a name for the constraint, using the\nCONSTRAINT keyword. That name will be used in error messages.\n\nFirst, you have to specify the name of the target (parent) table and a column\nor a column list which must be indexed and whose values must match to the\nforeign key\'s values. The MATCH clause is accepted to improve the\ncompatibility with other DBMS\'s, but has no meaning in MariaDB. The ON DELETE\nand ON UPDATE clauses specify what must be done when a DELETE (or a REPLACE)\nstatements attempts to delete a referenced row from the parent table, and when\nan UPDATE statement attempts to modify the referenced foreign key columns in a\nparent table row, respectively. The following options are allowed:\n\n* RESTRICT: The delete/update operation is not performed. The statement\nterminates with a 1451 error (SQLSTATE \'2300\').\n* NO ACTION: Synonym for RESTRICT.\n* CASCADE: The delete/update operation is performed in both tables.\n* SET NULL: The update or delete goes ahead in the parent table, and the\ncorresponding foreign key fields in the child table are set to NULL. (They\nmust not be defined as NOT NULL for this to succeed).\n* SET DEFAULT: This option is currently implemented only for the PBXT storage\nengine, which is disabled by default and no longer maintained. It sets the\nchild table\'s foreign key fields to their DEFAULT values when the referenced\nparent table key entries are updated or deleted.\n\nIf either clause is omitted, the default behavior for the omitted clause is\nRESTRICT.\n\nSee Foreign Keys for more information.\n\nFULLTEXT\n--------\n\nUse the FULLTEXT keyword to create full-text indexes.\n\nSee Full-Text Indexes for more information.\n\nSPATIAL\n-------\n\nUse the SPATIAL keyword to create geometric indexes.\n\nSee SPATIAL INDEX for more information.\n\nIndex Options\n-------------\n\nKEY_BLOCK_SIZE Index Option\n---------------------------\n\nThe KEY_BLOCK_SIZE index option is similar to the KEY_BLOCK_SIZE table option.\n\nWith the InnoDB storage engine, if you specify a non-zero value for the\nKEY_BLOCK_SIZE table option for the whole table, then the table will\nimplicitly be created with the ROW_FORMAT table option set to COMPRESSED.\nHowever, this does not happen if you just set the KEY_BLOCK_SIZE index option\nfor one or more indexes in the table. The InnoDB storage engine ignores the\nKEY_BLOCK_SIZE index option. However, the SHOW CREATE TABLE statement may\nstill report it for the index.\n\nFor information about the KEY_BLOCK_SIZE index option, see the KEY_BLOCK_SIZE\ntable option below.\n\nIndex Types\n-----------\n\nEach storage engine supports some or all index types. See Storage Engine Index\nTypes for details on permitted index types for each storage engine.\n\nDifferent index types are optimized for different kind of operations:\n\n* BTREE is the default type, and normally is the best choice. It is supported\nby all storage engines. It can be used to compare a column\'s value with a\nvalue using the =, >, >=, <, <=, BETWEEN, and LIKE operators. BTREE can also\nbe used to find NULL values. Searches against an index prefix are possible.\n* HASH is only supported by the MEMORY storage engine. HASH indexes can only\nbe used for =, <=, and >= comparisons. It can not be used for the ORDER BY\nclause. Searches against an index prefix are not possible.\n* RTREE is the default for SPATIAL indexes, but if the storage engine does not\nsupport it BTREE can be used.\n\nIndex columns names are listed between parenthesis. After each column, a\nprefix length can be specified. If no length is specified, the whole column\nwill be indexed. ASC and DESC can be specified for compatibility with are\nDBMS\'s, but have no meaning in MariaDB.\n\nWITH PARSER Index Option\n------------------------\n\nThe WITH PARSER index option only applies to FULLTEXT indexes and contains the\nfulltext parser name. The fulltext parser must be an installed plugin.\n\nCOMMENT Index Option\n--------------------\n\nA comment of up to 1024 characters is permitted with the COMMENT index option.\n\nThe COMMENT index option allows you to specify a comment with user-readable\ntext describing what the index is for. This information is not used by the\nserver itself.\n\nCLUSTERING Index Option\n-----------------------\n\nThe CLUSTERING index option is only valid for tables using the TokuDB storage\nengine.\n\nIGNORED / NOT IGNORED\n---------------------\n\nMariaDB starting with 10.6.0\n----------------------------\nFrom MariaDB 10.6.0, indexes can be specified to be ignored by the optimizer.\nSee Ignored Indexes.\n\nPeriods\n-------\n\nMariaDB starting with 10.3.4\n----------------------------\n\nperiod_definition:\n PERIOD FOR SYSTEM_TIME (start_column_name, end_column_name)\nMariaDB supports a subset of the standard syntax for periods. At the moment\nit\'s only used for creating System-versioned tables. Both columns must be\ncreated, must be either of a TIMESTAMP(6) or BIGINT UNSIGNED type, and be\ngenerated as ROW START and ROW END accordingly. See System-versioned tables\nfor details.\n\nThe table must also have the WITH SYSTEM VERSIONING clause.\n\nConstraint Expressions\n----------------------\n\nMariaDB starting with 10.2.1\n----------------------------\nMariaDB 10.2.1 introduced new ways to define a constraint.\n\nNote: Before MariaDB 10.2.1, constraint expressions were accepted in the\nsyntax but ignored.\n\nMariaDB 10.2.1 introduced two ways to define a constraint:\n\n* CHECK(expression) given as part of a column definition.\n* CONSTRAINT [constraint_name] CHECK (expression)\n\nBefore a row is inserted or updated, all constraints are evaluated in the\norder they are defined. If any constraints fails, then the row will not be\nupdated. One can use most deterministic functions in a constraint, including\nUDFs.\n\ncreate table t1 (a int check(a>0) ,b int check (b> 0), constraint abc check\n(a>b));\n\nIf you use the second format and you don\'t give a name to the constraint, then\nthe constraint will get a auto generated name. This is done so that you can\nlater delete the constraint with ALTER TABLE DROP constraint_name.\n\nOne can disable all constraint expression checks by setting the variable\ncheck_constraint_checks to OFF. This is useful for example when loading a\ntable that violates some constraints that you want to later find and fix in\nSQL.\n\nSee CONSTRAINT for more information.\n\nTable Options\n-------------\n\nFor each individual table you create (or alter), you can set some table\noptions. The general syntax for setting options is:\n\n<OPTION_NAME> = <option_value>, [<OPTION_NAME> = <option_value> ...]\n\nThe equal sign is optional.\n\nSome options are supported by the server and can be used for all tables, no\nmatter what storage engine they use; other options can be specified for all\nstorage engines, but have a meaning only for some engines. Also, engines can\nextend CREATE TABLE with new options.\n\nIf the IGNORE_BAD_TABLE_OPTIONS SQL_MODE is enabled, wrong table options\ngenerate a warning; otherwise, they generate an error.\n\ntable_option: \n [STORAGE] ENGINE [=] engine_name\n | AUTO_INCREMENT [=] value\n | AVG_ROW_LENGTH [=] value\n | [DEFAULT] CHARACTER SET [=] charset_name\n | CHECKSUM [=] {0 | 1}\n | [DEFAULT] COLLATE [=] collation_name\n | COMMENT [=] \'string\'\n | CONNECTION [=] \'connect_string\'\n | DATA DIRECTORY [=] \'absolute path to directory\'\n | DELAY_KEY_WRITE [=] {0 | 1}\n | ENCRYPTED [=] {YES | NO}\n | ENCRYPTION_KEY_ID [=] value\n | IETF_QUOTES [=] {YES | NO}\n | INDEX DIRECTORY [=] \'absolute path to directory\'\n | INSERT_METHOD [=] { NO | FIRST | LAST }\n | KEY_BLOCK_SIZE [=] value\n | MAX_ROWS [=] value\n | MIN_ROWS [=] value\n | PACK_KEYS [=] {0 | 1 | DEFAULT}\n | PAGE_CHECKSUM [=] {0 | 1}\n | PAGE_COMPRESSED [=] {0 | 1}\n | PAGE_COMPRESSION_LEVEL [=] {0 .. 9}\n | PASSWORD [=] \'string\'\n | ROW_FORMAT [=] {DEFAULT|DYNAMIC|FIXED|COMPRESSED|REDUNDANT|COMPACT|PAGE}\n | SEQUENCE [=] {0|1}\n | STATS_AUTO_RECALC [=] {DEFAULT|0|1}\n | STATS_PERSISTENT [=] {DEFAULT|0|1}\n | STATS_SAMPLE_PAGES [=] {DEFAULT|value}\n | TABLESPACE tablespace_name\n | TRANSACTIONAL [=] {0 | 1}\n | UNION [=] (tbl_name[,tbl_name]...)\n | WITH SYSTEM VERSIONING\n\n[STORAGE] ENGINE\n----------------\n\n[STORAGE] ENGINE specifies a storage engine for the table. If this option is\nnot used, the default storage engine is used instead. That is, the\ndefault_storage_engine session option value if it is set, or the value\nspecified for the --default-storage-engine mysqld startup option, or the\ndefault storage engine, InnoDB. If the specified storage engine is not\ninstalled and active, the default value will be used, unless the\nNO_ENGINE_SUBSTITUTION SQL MODE is set (default). This is only true for CREATE\nTABLE, not for ALTER TABLE. For a list of storage engines that are present in\nyour server, issue a SHOW ENGINES.\n\nAUTO_INCREMENT\n--------------\n\nAUTO_INCREMENT specifies the initial value for the AUTO_INCREMENT primary key.\nThis works for MyISAM, Aria, InnoDB, MEMORY, and ARCHIVE tables. You can\nchange this option with ALTER TABLE, but in that case the new value must be\nhigher than the highest value which is present in the AUTO_INCREMENT column.\nIf the storage engine does not support this option, you can insert (and then\ndelete) a row having the wanted value - 1 in the AUTO_INCREMENT column.\n\nAVG_ROW_LENGTH\n--------------\n\nAVG_ROW_LENGTH is the average rows size. It only applies to tables using\nMyISAM and Aria storage engines that have the ROW_FORMAT table option set to\nFIXED format.\n\nMyISAM uses MAX_ROWS and AVG_ROW_LENGTH to decide the maximum size of a table\n(default: 256TB, or the maximum file size allowed by the system).\n\n[DEFAULT] CHARACTER SET/CHARSET\n-------------------------------\n\n[DEFAULT] CHARACTER SET (or [DEFAULT] CHARSET) is used to set a default\ncharacter set for the table. This is the character set used for all columns\nwhere an explicit character set is not specified. If this option is omitted or\nDEFAULT is specified, database\'s default character set will be used. See\nSetting Character Sets and Collations for details on setting the character\nsets.\n\nCHECKSUM/TABLE_CHECKSUM\n-----------------------\n\nCHECKSUM (or TABLE_CHECKSUM) can be set to 1 to maintain a live checksum for\nall table\'s rows. This makes write operations slower, but CHECKSUM TABLE will\nbe very fast. This option is only supported for MyISAM and Aria tables.\n\n[DEFAULT] COLLATE\n-----------------\n\n[DEFAULT] COLLATE is used to set a default collation for the table. This is\nthe collation used for all columns where an explicit character set is not\nspecified. If this option is omitted or DEFAULT is specified, database\'s') WHERE help_topic_id = 706;
+update help_topic set description = CONCAT(description, '\ndefault option will be used. See Setting Character Sets and Collations for\ndetails on setting the collations\n\nCOMMENT\n-------\n\nCOMMENT is a comment for the table. The maximum length is 2048 characters.\nAlso used to define table parameters when creating a Spider table.\n\nCONNECTION\n----------\n\nCONNECTION is used to specify a server name or a connection string for a\nSpider, CONNECT, Federated or FederatedX table.\n\nDATA DIRECTORY/INDEX DIRECTORY\n------------------------------\n\nDATA DIRECTORY and INDEX DIRECTORY are supported for MyISAM and Aria, and DATA\nDIRECTORY is also supported by InnoDB if the innodb_file_per_table server\nsystem variable is enabled, but only in CREATE TABLE, not in ALTER TABLE. So,\ncarefully choose a path for InnoDB tables at creation time, because it cannot\nbe changed without dropping and re-creating the table. These options specify\nthe paths for data files and index files, respectively. If these options are\nomitted, the database\'s directory will be used to store data files and index\nfiles. Note that these table options do not work for partitioned tables (use\nthe partition options instead), or if the server has been invoked with the\n--skip-symbolic-links startup option. To avoid the overwriting of old files\nwith the same name that could be present in the directories, you can use the\n--keep_files_on_create option (an error will be issued if files already\nexist). These options are ignored if the NO_DIR_IN_CREATE SQL_MODE is enabled\n(useful for replication slaves). Also note that symbolic links cannot be used\nfor InnoDB tables.\n\nDATA DIRECTORY works by creating symlinks from where the table would normally\nhave been (inside the datadir) to where the option specifies. For security\nreasons, to avoid bypassing the privilege system, the server does not permit\nsymlinks inside the datadir. Therefore, DATA DIRECTORY cannot be used to\nspecify a location inside the datadir. An attempt to do so will result in an\nerror 1210 (HY000) Incorrect arguments to DATA DIRECTORY.\n\nDELAY_KEY_WRITE\n---------------\n\nDELAY_KEY_WRITE is supported by MyISAM and Aria, and can be set to 1 to speed\nup write operations. In that case, when data are modified, the indexes are not\nupdated until the table is closed. Writing the changes to the index file\naltogether can be much faster. However, note that this option is applied only\nif the delay_key_write server variable is set to \'ON\'. If it is \'OFF\' the\ndelayed index writes are always disabled, and if it is \'ALL\' the delayed index\nwrites are always used, disregarding the value of DELAY_KEY_WRITE.\n\nENCRYPTED\n---------\n\nThe ENCRYPTED table option can be used to manually set the encryption status\nof an InnoDB table. See InnoDB Encryption for more information.\n\nAria does not support the ENCRYPTED table option. See MDEV-18049.\n\nSee Data-at-Rest Encryption for more information.\n\nENCRYPTION_KEY_ID\n-----------------\n\nThe ENCRYPTION_KEY_ID table option can be used to manually set the encryption\nkey of an InnoDB table. See InnoDB Encryption for more information.\n\nAria does not support the ENCRYPTION_KEY_ID table option. See MDEV-18049.\n\nSee Data-at-Rest Encryption for more information.\n\nIETF_QUOTES\n-----------\n\nFor the CSV storage engine, the IETF_QUOTES option, when set to YES, enables\nIETF-compatible parsing of embedded quote and comma characters. Enabling this\noption for a table improves compatibility with other tools that use CSV, but\nis not compatible with MySQL CSV tables, or MariaDB CSV tables created without\nthis option. Disabled by default.\n\nINSERT_METHOD\n-------------\n\nINSERT_METHOD is only used with MERGE tables. This option determines in which\nunderlying table the new rows should be inserted. If you set it to \'NO\' (which\nis the default) no new rows can be added to the table (but you will still be\nable to perform INSERTs directly against the underlying tables). FIRST means\nthat the rows are inserted into the first table, and LAST means that thet are\ninserted into the last table.\n\nKEY_BLOCK_SIZE\n--------------\n\nKEY_BLOCK_SIZE is used to determine the size of key blocks, in bytes or\nkilobytes. However, this value is just a hint, and the storage engine could\nmodify or ignore it. If KEY_BLOCK_SIZE is set to 0, the storage engine\'s\ndefault value will be used.\n\nWith the InnoDB storage engine, if you specify a non-zero value for the\nKEY_BLOCK_SIZE table option for the whole table, then the table will\nimplicitly be created with the ROW_FORMAT table option set to COMPRESSED.\n\nMIN_ROWS/MAX_ROWS\n-----------------\n\nMIN_ROWS and MAX_ROWS let the storage engine know how many rows you are\nplanning to store as a minimum and as a maximum. These values will not be used\nas real limits, but they help the storage engine to optimize the table.\nMIN_ROWS is only used by MEMORY storage engine to decide the minimum memory\nthat is always allocated. MAX_ROWS is used to decide the minimum size for\nindexes.\n\nPACK_KEYS\n---------\n\nPACK_KEYS can be used to determine whether the indexes will be compressed. Set\nit to 1 to compress all keys. With a value of 0, compression will not be used.\nWith the DEFAULT value, only long strings will be compressed. Uncompressed\nkeys are faster.\n\nPAGE_CHECKSUM\n-------------\n\nPAGE_CHECKSUM is only applicable to Aria tables, and determines whether\nindexes and data should use page checksums for extra safety.\n\nPAGE_COMPRESSED\n---------------\n\nPAGE_COMPRESSED is used to enable InnoDB page compression for InnoDB tables.\n\nPAGE_COMPRESSION_LEVEL\n----------------------\n\nPAGE_COMPRESSION_LEVEL is used to set the compression level for InnoDB page\ncompression for InnoDB tables. The table must also have the PAGE_COMPRESSED\ntable option set to 1.\n\nValid values for PAGE_COMPRESSION_LEVEL are 1 (the best speed) through 9 (the\nbest compression), .\n\nPASSWORD\n--------\n\nPASSWORD is unused.\n\nRAID_TYPE\n---------\n\nRAID_TYPE is an obsolete option, as the raid support has been disabled since\nMySQL 5.0.\n\nROW_FORMAT\n----------\n\nThe ROW_FORMAT table option specifies the row format for the data file.\nPossible values are engine-dependent.\n\nSupported MyISAM Row Formats\n----------------------------\n\nFor MyISAM, the supported row formats are:\n\n* FIXED\n* DYNAMIC\n* COMPRESSED\n\nThe COMPRESSED row format can only be set by the myisampack command line tool.\n\nSee MyISAM Storage Formats for more information.\n\nSupported Aria Row Formats\n--------------------------\n\nFor Aria, the supported row formats are:\n\n* PAGE\n* FIXED\n* DYNAMIC.\n\nSee Aria Storage Formats for more information.\n\nSupported InnoDB Row Formats\n----------------------------\n\nFor InnoDB, the supported row formats are:\n\n* COMPACT\n* REDUNDANT\n* COMPRESSED\n* DYNAMIC.\n\nIf the ROW_FORMAT table option is set to FIXED for an InnoDB table, then the\nserver will either return an error or a warning depending on the value of the\ninnodb_strict_mode system variable. If the innodb_strict_mode system variable\nis set to OFF, then a warning is issued, and MariaDB will create the table\nusing the default row format for the specific MariaDB server version. If the\ninnodb_strict_mode system variable is set to ON, then an error will be raised.\n\nSee InnoDB Storage Formats for more information.\n\nOther Storage Engines and ROW_FORMAT\n------------------------------------\n\nOther storage engines do not support the ROW_FORMAT table option.\n\nSEQUENCE\n--------\n\nMariaDB starting with 10.3\n--------------------------\nIf the table is a sequence, then it will have the SEQUENCE set to 1.\n\nSTATS_AUTO_RECALC\n-----------------\n\nSTATS_AUTO_RECALC indicates whether to automatically recalculate persistent\nstatistics (see STATS_PERSISTENT, below) for an InnoDB table. If set to 1,\nstatistics will be recalculated when more than 10% of the data has changed.\nWhen set to 0, stats will be recalculated only when an ANALYZE TABLE is run.\nIf set to DEFAULT, or left out, the value set by the innodb_stats_auto_recalc\nsystem variable applies. See InnoDB Persistent Statistics.\n\nSTATS_PERSISTENT\n----------------\n\nSTATS_PERSISTENT indicates whether the InnoDB statistics created by ANALYZE\nTABLE will remain on disk or not. It can be set to 1 (on disk), 0 (not on\ndisk, the pre-MariaDB 10 behavior), or DEFAULT (the same as leaving out the\noption), in which case the value set by the innodb_stats_persistent system\nvariable will apply. Persistent statistics stored on disk allow the statistics\nto survive server restarts, and provide better query plan stability. See\nInnoDB Persistent Statistics.\n\nSTATS_SAMPLE_PAGES\n------------------\n\nSTATS_SAMPLE_PAGES indicates how many pages are used to sample index\nstatistics. If 0 or DEFAULT, the default value, the innodb_stats_sample_pages\nvalue is used. See InnoDB Persistent Statistics.\n\nTRANSACTIONAL\n-------------\n\nTRANSACTIONAL is only applicable for Aria tables. In future Aria tables\ncreated with this option will be fully transactional, but currently this\nprovides a form of crash protection. See Aria Storage Engine for more details.\n\nUNION\n-----\n\nUNION must be specified when you create a MERGE table. This option contains a\ncomma-separated list of MyISAM tables which are accessed by the new table. The\nlist is enclosed between parenthesis. Example: UNION = (t1,t2)\n\nWITH SYSTEM VERSIONING\n----------------------\n\nWITH SYSTEM VERSIONING is used for creating System-versioned tables.\n\nPartitions\n----------\n\npartition_options:\n PARTITION BY\n { [LINEAR] HASH(expr)\n | [LINEAR] KEY(column_list)\n | RANGE(expr)\n | LIST(expr)\n | SYSTEM_TIME [INTERVAL time_quantity time_unit] [LIMIT num] }\n [PARTITIONS num]\n [SUBPARTITION BY\n { [LINEAR] HASH(expr)\n | [LINEAR] KEY(column_list) }\n [SUBPARTITIONS num]\n ]\n [(partition_definition [, partition_definition] ...)]\npartition_definition:\n PARTITION partition_name\n [VALUES {LESS THAN {(expr) | MAXVALUE} | IN (value_list)}]\n [[STORAGE] ENGINE [=] engine_name]\n [COMMENT [=] \'comment_text\' ]\n [DATA DIRECTORY [=] \'data_dir\']\n [INDEX DIRECTORY [=] \'index_dir\']\n [MAX_ROWS [=] max_number_of_rows]\n [MIN_ROWS [=] min_number_of_rows]\n [TABLESPACE [=] tablespace_name]\n [NODEGROUP [=] node_group_id]\n [(subpartition_definition [, subpartition_definition] ...)]\nsubpartition_definition:\n SUBPARTITION logical_name\n [[STORAGE] ENGINE [=] engine_name]\n [COMMENT [=] \'comment_text\' ]\n [DATA DIRECTORY [=] \'data_dir\']\n [INDEX DIRECTORY [=] \'index_dir\']\n [MAX_ROWS [=] max_number_of_rows]\n [MIN_ROWS [=] min_number_of_rows]\n [TABLESPACE [=] tablespace_name]\n [NODEGROUP [=] node_group_id]\nIf the PARTITION BY clause is used, the table will be partitioned. A partition\nmethod must be explicitly indicated for partitions and subpartitions.\nPartition methods are:\n\n* [LINEAR] HASH creates a hash key which will be used to read and write rows.\nThe partition function can be any valid SQL expression which returns an\nINTEGER number. Thus, it is possible to use the HASH method on an integer\ncolumn, or on functions which accept integer columns as an argument. However,\nVALUES LESS THAN and VALUES IN clauses can not be used with HASH. An example:\n\nCREATE TABLE t1 (a INT, b CHAR(5), c DATETIME)\n PARTITION BY HASH ( YEAR(c) );\n\n[LINEAR] HASH can be used for subpartitions, too.\n\n* [LINEAR] KEY is similar to HASH, but the index has an even distribution of\ndata. Also, the expression can only be a column or a list of columns. VALUES\nLESS THAN and VALUES IN clauses can not be used with KEY.\n* RANGE partitions the rows using on a range of values, using the VALUES LESS\nTHAN operator. VALUES IN is not allowed with RANGE. The partition function can\nbe any valid SQL expression which returns a single value.\n* LIST assigns partitions based on a table\'s column with a restricted set of\npossible values. It is similar to RANGE, but VALUES IN must be used for at\nleast 1 columns, and VALUES LESS THAN is disallowed.\n* SYSTEM_TIME partitioning is used for System-versioned tables to store\nhistorical data separately from current data.\n\nOnly HASH and KEY can be used for subpartitions, and they can be [LINEAR].\n\nIt is possible to define up to 1024 partitions and subpartitions.\n\nThe number of defined partitions can be optionally specified as PARTITION\ncount. This can be done to avoid specifying all partitions individually. But\nyou can also declare each individual partition and, additionally, specify a\nPARTITIONS count clause; in the case, the number of PARTITIONs must equal\ncount.\n\nAlso see Partitioning Types Overview.\n\nSequences\n---------\n\nMariaDB starting with 10.3\n--------------------------\nCREATE TABLE can also be used to create a SEQUENCE. See CREATE SEQUENCE and\nSequence Overview.\n\nAtomic DDL\n----------\n\nMariaDB starting with 10.6.1\n----------------------------\nMariaDB 10.6.1 supports Atomic DDL. CREATE TABLE is atomic, except for CREATE\nOR REPLACE, which is only crash safe.\n\nExamples\n--------\n\ncreate table if not exists test (\na bigint auto_increment primary key,\nname varchar(128) charset utf8,\nkey name (name(32))\n) engine=InnoDB default charset latin1;\n\nThis example shows a couple of things:\n\n* Usage of IF NOT EXISTS; If the table already existed, it will not be\ncreated. There will not be any error for the client, just a warning.\n* How to create a PRIMARY KEY that is automatically generated.\n* How to specify a table-specific character set and another for a column.\n* How to create an index (name) that is only partly indexed (to save space).\n\nThe following clauses will work from MariaDB 10.2.1 only.\n\nCREATE TABLE t1(\n a int DEFAULT (1+1),\n b int DEFAULT (a+1),\n expires DATETIME DEFAULT(NOW() + INTERVAL 1 YEAR),\n x BLOB DEFAULT USER()\n);\n\nURL: https://mariadb.com/kb/en/create-table/') WHERE help_topic_id = 706;
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (707,38,'DROP TABLE','Syntax\n------\n\nDROP [TEMPORARY] TABLE [IF EXISTS] [/*COMMENT TO SAVE*/]\n tbl_name [, tbl_name] ...\n [WAIT n|NOWAIT]\n [RESTRICT | CASCADE]\n\nDescription\n-----------\n\nDROP TABLE removes one or more tables. You must have the DROP privilege for\neach table. All table data and the table definition are removed, as well as\ntriggers associated to the table, so be careful with this statement! If any of\nthe tables named in the argument list do not exist, MariaDB returns an error\nindicating by name which non-existing tables it was unable to drop, but it\nalso drops all of the tables in the list that do exist.\n\nImportant: When a table is dropped, user privileges on the table are not\nautomatically dropped. See GRANT.\n\nIf another thread is using the table in an explicit transaction or an\nautocommit transaction, then the thread acquires a metadata lock (MDL) on the\ntable. The DROP TABLE statement will wait in the \"Waiting for table metadata\nlock\" thread state until the MDL is released. MDLs are released in the\nfollowing cases:\n\n* If an MDL is acquired in an explicit transaction, then the MDL will be\nreleased when the transaction ends.\n* If an MDL is acquired in an autocommit transaction, then the MDL will be\nreleased when the statement ends.\n* Transactional and non-transactional tables are handled the same.\n\nNote that for a partitioned table, DROP TABLE permanently removes the table\ndefinition, all of its partitions, and all of the data which was stored in\nthose partitions. It also removes the partitioning definition (.par) file\nassociated with the dropped table.\n\nFor each referenced table, DROP TABLE drops a temporary table with that name,\nif it exists. If it does not exist, and the TEMPORARY keyword is not used, it\ndrops a non-temporary table with the same name, if it exists. The TEMPORARY\nkeyword ensures that a non-temporary table will not accidentally be dropped.\n\nUse IF EXISTS to prevent an error from occurring for tables that do not exist.\nA NOTE is generated for each non-existent table when using IF EXISTS. See SHOW\nWARNINGS.\n\nIf a foreign key references this table, the table cannot be dropped. In this\ncase, it is necessary to drop the foreign key first.\n\nRESTRICT and CASCADE are allowed to make porting from other database systems\neasier. In MariaDB, they do nothing.\n\nThe comment before the table names (/*COMMENT TO SAVE*/) is stored in the\nbinary log. That feature can be used by replication tools to send their\ninternal messages.\n\nIt is possible to specify table names as db_name.tab_name. This is useful to\ndelete tables from multiple databases with one statement. See Identifier\nQualifiers for details.\n\nThe DROP privilege is required to use DROP TABLE on non-temporary tables. For\ntemporary tables, no privilege is required, because such tables are only\nvisible for the current session.\n\nNote: DROP TABLE automatically commits the current active transaction, unless\nyou use the TEMPORARY keyword.\n\nMariaDB starting with 10.5.4\n----------------------------\nFrom MariaDB 10.5.4, DROP TABLE reliably deletes table remnants inside a\nstorage engine even if the .frm file is missing. Before then, a missing .frm\nfile would result in the statement failing.\n\nMariaDB starting with 10.3.1\n----------------------------\n\nWAIT/NOWAIT\n-----------\n\nSet the lock wait timeout. See WAIT and NOWAIT.\n\nDROP TABLE in replication\n-------------------------\n\nDROP TABLE has the following characteristics in replication:\n\n* DROP TABLE IF EXISTS are always logged.\n* DROP TABLE without IF EXISTS for tables that don\'t exist are not written to\nthe binary log.\n* Dropping of TEMPORARY tables are prefixed in the log with TEMPORARY. These\ndrops are only logged when running statement or mixed mode replication.\n* One DROP TABLE statement can be logged with up to 3 different DROP\nstatements:\nDROP TEMPORARY TABLE list_of_non_transactional_temporary_tables\nDROP TEMPORARY TABLE list_of_transactional_temporary_tables\nDROP TABLE list_of_normal_tables\n\nDROP TABLE on the primary is treated on the replica as DROP TABLE IF EXISTS.\nYou can change that by setting slave-ddl-exec-mode to STRICT.\n\nDropping an Internal #sql-... Table\n-----------------------------------\n\nFrom MariaDB 10.6, DROP TABLE is atomic and the following does not apply.\nUntil MariaDB 10.5, if the mariadbd/mysqld process is killed during an ALTER\nTABLE you may find a table named #sql-... in your data directory. In MariaDB\n10.3, InnoDB tables with this prefix will be deleted automatically during\nstartup. From MariaDB 10.4, these temporary tables will always be deleted\nautomatically.\n\nIf you want to delete one of these tables explicitly you can do so by using\nthe following syntax:\n\nDROP TABLE `#mysql50##sql-...`;\n\nWhen running an ALTER TABLE…ALGORITHM=INPLACE that rebuilds the table, InnoDB\nwill create an internal #sql-ib table. Until MariaDB 10.3.2, for these tables,\nthe .frm file will be called something else. In order to drop such a table\nafter a server crash, you must rename the #sql*.frm file to match the\n#sql-ib*.ibd file.\n\nFrom MariaDB 10.3.3, the same name as the .frm file is used for the\nintermediate copy of the table. The #sql-ib names are used by TRUNCATE and\ndelayed DROP.\n\nFrom MariaDB 10.2.19 and MariaDB 10.3.10, the #sql-ib tables will be deleted\nautomatically.\n\nDropping All Tables in a Database\n---------------------------------\n\nThe best way to drop all tables in a database is by executing DROP DATABASE,\nwhich will drop the database itself, and all tables in it.\n\nHowever, if you want to drop all tables in the database, but you also want to\nkeep the database itself and any other non-table objects in it, then you would\nneed to execute DROP TABLE to drop each individual table. You can construct\nthese DROP TABLE commands by querying the TABLES table in the\ninformation_schema database. For example:\n\nSELECT CONCAT(\'DROP TABLE IF EXISTS `\', TABLE_SCHEMA, \'`.`\', TABLE_NAME, \'`;\')\nFROM information_schema.TABLES\nWHERE TABLE_SCHEMA = \'mydb\';\n\nAtomic DROP TABLE\n-----------------\n\nMariaDB starting with 10.6.1\n----------------------------\nFrom MariaDB 10.6, DROP TABLE for a single table is atomic (MDEV-25180) for\nmost engines, including InnoDB, MyRocks, MyISAM and Aria.\n\nThis means that if there is a crash (server down or power outage) during DROP\nTABLE, all tables that have been processed so far will be completely dropped,\nincluding related trigger files and status entries, and the binary log will\ninclude a DROP TABLE statement for the dropped tables. Tables for which the\ndrop had not started will be left intact.\n\nIn older MariaDB versions, there was a small chance that, during a server\ncrash happening in the middle of DROP TABLE, some storage engines that were\nusing multiple storage files, like MyISAM, could have only a part of its\ninternal files dropped.\n\nIn MariaDB 10.5, DROP TABLE was extended to be able to delete a table that was\nonly partly dropped (MDEV-11412) as explained above. Atomic DROP TABLE is the\nfinal piece to make DROP TABLE fully reliable.\n\nDropping multiple tables is crash-safe.\n\nSee Atomic DDL for more information.\n\nExamples\n--------\n\nDROP TABLE Employees, Customers;\n\nNotes\n-----\n\nBeware that DROP TABLE can drop both tables and sequences. This is mainly done\nto allow old tools like mysqldump to work with sequences.\n\nURL: https://mariadb.com/kb/en/drop-table/','','https://mariadb.com/kb/en/drop-table/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (708,38,'RENAME TABLE','Syntax\n------\n\nRENAME TABLE[S] [IF EXISTS] tbl_name \n [WAIT n | NOWAIT]\n TO new_tbl_name\n [, tbl_name2 TO new_tbl_name2] ...\n\nDescription\n-----------\n\nThis statement renames one or more tables or views, but not the privileges\nassociated with them.\n\nIF EXISTS\n---------\n\nMariaDB starting with 10.5.2\n----------------------------\nIf this directive is used, one will not get an error if the table to be\nrenamed doesn\'t exist.\n\nThe rename operation is done atomically, which means that no other session can\naccess any of the tables while the rename is running. For example, if you have\nan existing table old_table, you can create another table new_table that has\nthe same structure but is empty, and then replace the existing table with the\nempty one as follows (assuming that backup_table does not already exist):\n\nCREATE TABLE new_table (...);\nRENAME TABLE old_table TO backup_table, new_table TO old_table;\n\ntbl_name can optionally be specified as db_name.tbl_name. See Identifier\nQualifiers. This allows to use RENAME to move a table from a database to\nanother (as long as they are on the same filesystem):\n\nRENAME TABLE db1.t TO db2.t;\n\nNote that moving a table to another database is not possible if it has some\ntriggers. Trying to do so produces the following error:\n\nERROR 1435 (HY000): Trigger in wrong schema\n\nAlso, views cannot be moved to another database:\n\nERROR 1450 (HY000): Changing schema from \'old_db\' to \'new_db\' is not allowed.\n\nMultiple tables can be renamed in a single statement. The presence or absence\nof the optional S (RENAME TABLE or RENAME TABLES) has no impact, whether a\nsingle or multiple tables are being renamed.\n\nIf a RENAME TABLE renames more than one table and one renaming fails, all\nrenames executed by the same statement are rolled back.\n\nRenames are always executed in the specified order. Knowing this, it is also\npossible to swap two tables\' names:\n\nRENAME TABLE t1 TO tmp_table,\n t2 TO t1,\n tmp_table TO t2;\n\nWAIT/NOWAIT\n-----------\n\nMariaDB starting with 10.3.0\n----------------------------\nSet the lock wait timeout. See WAIT and NOWAIT.\n\nPrivileges\n----------\n\nExecuting the RENAME TABLE statement requires the DROP, CREATE and INSERT\nprivileges for the table or the database.\n\nAtomic RENAME TABLE\n-------------------\n\nMariaDB starting with 10.6.1\n----------------------------\nFrom MariaDB 10.6, RENAME TABLE is atomic for most engines, including InnoDB,\nMyRocks, MyISAM and Aria (MDEV-23842). This means that if there is a crash\n(server down or power outage) during RENAME TABLE, all tables will revert to\ntheir original names and any changes to trigger files will be reverted.\n\nIn older MariaDB version there was a small chance that, during a server crash\nhappening in the middle of RENAME TABLE, some tables could have been renamed\n(in the worst case partly) while others would not be renamed.\n\nSee Atomic DDL for more information.\n\nURL: https://mariadb.com/kb/en/rename-table/','','https://mariadb.com/kb/en/rename-table/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (709,38,'TRUNCATE TABLE','Syntax\n------\n\nTRUNCATE [TABLE] tbl_name\n [WAIT n | NOWAIT]\n\nDescription\n-----------\n\nTRUNCATE TABLE empties a table completely. It requires the DROP privilege. See\nGRANT.\n\ntbl_name can also be specified in the form db_name.tbl_name (see Identifier\nQualifiers).\n\nLogically, TRUNCATE TABLE is equivalent to a DELETE statement that deletes all\nrows, but there are practical differences under some circumstances.\n\nTRUNCATE TABLE will fail for an InnoDB table if any FOREIGN KEY constraints\nfrom other tables reference the table, returning the error:\n\nERROR 1701 (42000): Cannot truncate a table referenced in a foreign key\nconstraint\n\nForeign Key constraints between columns in the same table are permitted.\n\nFor an InnoDB table, if there are no FOREIGN KEY constraints, InnoDB performs\nfast truncation by dropping the original table and creating an empty one with\nthe same definition, which is much faster than deleting rows one by one. The\nAUTO_INCREMENT counter is reset by TRUNCATE TABLE, regardless of whether there\nis a FOREIGN KEY constraint.\n\nThe count of rows affected by TRUNCATE TABLE is accurate only when it is\nmapped to a DELETE statement.\n\nFor other storage engines, TRUNCATE TABLE differs from DELETE in the following\nways:\n\n* Truncate operations drop and re-create the table, which is much\n faster than deleting rows one by one, particularly for large tables.\n* Truncate operations cause an implicit commit.\n* Truncation operations cannot be performed if the session holds an\n active table lock.\n* Truncation operations do not return a meaningful value for the number\n of deleted rows. The usual result is \"0 rows affected,\" which should\n be interpreted as \"no information.\"\n* As long as the table format file tbl_name.frm is valid, the\n table can be re-created as an empty table\n with TRUNCATE TABLE, even if the data or index files have become\n corrupted.\n* The table handler does not remember the last\n used AUTO_INCREMENT value, but starts counting\n from the beginning. This is true even for MyISAM and InnoDB, which normally\n do not reuse sequence values.\n* When used with partitioned tables, TRUNCATE TABLE preserves\n the partitioning; that is, the data and index files are dropped and\n re-created, while the partition definitions (.par) file is\n unaffected.\n* Since truncation of a table does not make any use of DELETE,\n the TRUNCATE statement does not invoke ON DELETE triggers.\n* TRUNCATE TABLE will only reset the values in the Performance Schema summary\ntables to zero or null, and will not remove the rows.\n\nFor the purposes of binary logging and replication, TRUNCATE TABLE is treated\nas DROP TABLE followed by CREATE TABLE (DDL rather than DML).\n\nTRUNCATE TABLE does not work on views. Currently, TRUNCATE TABLE drops all\nhistorical records from a system-versioned table.\n\nMariaDB starting with 10.3.0\n----------------------------\n\nWAIT/NOWAIT\n-----------\n\nSet the lock wait timeout. See WAIT and NOWAIT.\n\nOracle-mode\n-----------\n\nOracle-mode from MariaDB 10.3 permits the optional keywords REUSE STORAGE or\nDROP STORAGE to be used.\n\nTRUNCATE [TABLE] tbl_name [{DROP | REUSE} STORAGE] [WAIT n | NOWAIT]\n\nThese have no effect on the operation.\n\nPerformance\n-----------\n\nTRUNCATE TABLE is faster than DELETE, because it drops and re-creates a table.\n\nWith InnoDB, TRUNCATE TABLE is slower if innodb_file_per_table=ON is set (the\ndefault). This is because TRUNCATE TABLE unlinks the underlying tablespace\nfile, which can be an expensive operation. See MDEV-8069 for more details.\n\nThe performance issues with innodb_file_per_table=ON can be exacerbated in\ncases where the InnoDB buffer pool is very large and\ninnodb_adaptive_hash_index=ON is set. In that case, using DROP TABLE followed\nby CREATE TABLE instead of TRUNCATE TABLE may perform better. Setting\ninnodb_adaptive_hash_index=OFF (it defaults to ON before MariaDB 10.5) can\nalso help. In MariaDB 10.2 only, from MariaDB 10.2.19, this performance can\nalso be improved by setting innodb_safe_truncate=OFF. See MDEV-9459 for more\ndetails.\n\nSetting innodb_adaptive_hash_index=OFF can also improve TRUNCATE TABLE\nperformance in general. See MDEV-16796 for more details.\n\nURL: https://mariadb.com/kb/en/truncate-table/','','https://mariadb.com/kb/en/truncate-table/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (710,38,'CREATE DATABASE','Syntax\n------\n\nCREATE [OR REPLACE] {DATABASE | SCHEMA} [IF NOT EXISTS] db_name\n [create_specification] ...\n\ncreate_specification:\n [DEFAULT] CHARACTER SET [=] charset_name\n | [DEFAULT] COLLATE [=] collation_name\n | COMMENT [=] \'comment\'\n\nDescription\n-----------\n\nCREATE DATABASE creates a database with the given name. To use this statement,\nyou need the CREATE privilege for the database. CREATE SCHEMA is a synonym for\nCREATE DATABASE.\n\nFor valid identifiers to use as database names, see Identifier Names.\n\nOR REPLACE\n----------\n\nMariaDB starting with 10.1.3\n----------------------------\nThe OR REPLACE clause was added in MariaDB 10.1.3\n\nIf the optional OR REPLACE clause is used, it acts as a shortcut for:\n\nDROP DATABASE IF EXISTS db_name;\nCREATE DATABASE db_name ...;\n\nIF NOT EXISTS\n-------------\n\nWhen the IF NOT EXISTS clause is used, MariaDB will return a warning instead\nof an error if the specified database already exists.\n\nCOMMENT\n-------\n\nMariaDB starting with 10.5.0\n----------------------------\nFrom MariaDB 10.5.0, it is possible to add a comment of a maximum of 1024\nbytes. If the comment length exceeds this length, a error/warning code 4144 is\nthrown. The database comment is also added to the db.opt file, as well as to\nthe information_schema.schemata table.\n\nExamples\n--------\n\nCREATE DATABASE db1;\nQuery OK, 1 row affected (0.18 sec)\n\nCREATE DATABASE db1;\nERROR 1007 (HY000): Can\'t create database \'db1\'; database exists\n\nCREATE OR REPLACE DATABASE db1;\nQuery OK, 2 rows affected (0.00 sec)\n\nCREATE DATABASE IF NOT EXISTS db1;\nQuery OK, 1 row affected, 1 warning (0.01 sec)\n\nSHOW WARNINGS;\n+-------+------+----------------------------------------------+\n| Level | Code | Message |\n+-------+------+----------------------------------------------+\n| Note | 1007 | Can\'t create database \'db1\'; database exists |\n+-------+------+----------------------------------------------+\n\nSetting the character sets and collation. See Setting Character Sets and\nCollations for more details.\n\nCREATE DATABASE czech_slovak_names \n CHARACTER SET = \'keybcs2\'\n COLLATE = \'keybcs2_bin\';\n\nComments, from MariaDB 10.5.0:\n\nCREATE DATABASE presentations COMMENT \'Presentations for conferences\';\n\nURL: https://mariadb.com/kb/en/create-database/','','https://mariadb.com/kb/en/create-database/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (711,38,'CREATE EVENT','Syntax\n------\n\nCREATE [OR REPLACE]\n [DEFINER = { user | CURRENT_USER | role | CURRENT_ROLE }]\n EVENT\n [IF NOT EXISTS]\n event_name\n ON SCHEDULE schedule\n [ON COMPLETION [NOT] PRESERVE]\n [ENABLE | DISABLE | DISABLE ON SLAVE]\n [COMMENT \'comment\']\n DO sql_statement;\n\nschedule:\n AT timestamp [+ INTERVAL interval] ...\n | EVERY interval\n [STARTS timestamp [+ INTERVAL interval] ...]\n [ENDS timestamp [+ INTERVAL interval] ...]\n\ninterval:\n quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |\n WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |\n DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}\n\nDescription\n-----------\n\nThis statement creates and schedules a new event. It requires the EVENT\nprivilege for the schema in which the event is to be created.\n\nThe minimum requirements for a valid CREATE EVENT statement are as follows:\n\n* The keywords CREATE EVENT plus an event name, which uniquely identifies\n the event in the current schema. (Prior to MySQL 5.1.12, the event name\n needed to be unique only among events created by the same user on a given\n database.)\n* An ON SCHEDULE clause, which determines when and how often the event\n executes.\n* A DO clause, which contains the SQL statement to be executed by an\n event.\n\nHere is an example of a minimal CREATE EVENT statement:\n\nCREATE EVENT myevent\n ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR\n DO\n UPDATE myschema.mytable SET mycol = mycol + 1;\n\nThe previous statement creates an event named myevent. This event executes\nonce — one hour following its creation — by running an SQL statement that\nincrements the value of the myschema.mytable table\'s mycol column by 1.\n\nThe event_name must be a valid MariaDB identifier with a maximum length of 64\ncharacters. It may be delimited using back ticks, and may be qualified with\nthe name of a database schema. An event is associated with both a MariaDB user\n(the definer) and a schema, and its name must be unique among names of events\nwithin that schema. In general, the rules governing event names are the same\nas those for names of stored routines. See Identifier Names.\n\nIf no schema is indicated as part of event_name, the default (current) schema\nis assumed.\n\nFor valid identifiers to use as event names, see Identifier Names.\n\nOR REPLACE\n----------\n\nThe OR REPLACE clause was included in MariaDB 10.1.4. If used and the event\nalready exists, instead of an error being returned, the existing event will be\ndropped and replaced by the newly defined event.\n\nIF NOT EXISTS\n-------------\n\nIf the IF NOT EXISTS clause is used, MariaDB will return a warning instead of\nan error if the event already exists. Cannot be used together with OR REPLACE.\n\nON SCHEDULE\n-----------\n\nThe ON SCHEDULE clause can be used to specify when the event must be triggered.\n\nAT\n--\n\nIf you want to execute the event only once (one time event), you can use the\nAT keyword, followed by a timestamp. If you use CURRENT_TIMESTAMP, the event\nacts as soon as it is created. As a convenience, you can add one or more\nintervals to that timestamp. You can also specify a timestamp in the past, so\nthat the event is stored but not triggered, until you modify it via ALTER\nEVENT.\n\nThe following example shows how to create an event that will be triggered\ntomorrow at a certain time:\n\nCREATE EVENT example\nON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 DAY + INTERVAL 3 HOUR\nDO something;\n\nYou can also specify that an event must be triggered at a regular interval\n(recurring event). In such cases, use the EVERY clause followed by the\ninterval.\n\nIf an event is recurring, you can specify when the first execution must happen\nvia the STARTS clause and a maximum time for the last execution via the ENDS\nclause. STARTS and ENDS clauses are followed by a timestamp and, optionally,\none or more intervals. The ENDS clause can specify a timestamp in the past, so\nthat the event is stored but not executed until you modify it via ALTER EVENT.\n\nIn the following example, next month a recurring event will be triggered\nhourly for a week:\n\nCREATE EVENT example\nON SCHEDULE EVERY 1 HOUR\nSTARTS CURRENT_TIMESTAMP + INTERVAL 1 MONTH\nENDS CURRENT_TIMESTAMP + INTERVAL 1 MONTH + INTERVAL 1 WEEK\nDO some_task;\n\nIntervals consist of a quantity and a time unit. The time units are the same\nused for other staments and time functions, except that you can\'t use\nmicroseconds for events. For simple time units, like HOUR or MINUTE, the\nquantity is an integer number, for example \'10 MINUTE\'. For composite time\nunits, like HOUR_MINUTE or HOUR_SECOND, the quantity must be a string with all\ninvolved simple values and their separators, for example \'2:30\' or \'2:30:30\'.\n\nON COMPLETION [NOT] PRESERVE\n----------------------------\n\nThe ON COMPLETION clause can be used to specify if the event must be deleted\nafter its last execution (that is, after its AT or ENDS timestamp is past). By\ndefault, events are dropped when they are expired. To explicitly state that\nthis is the desired behaviour, you can use ON COMPLETION NOT PRESERVE.\nInstead, if you want the event to be preserved, you can use ON COMPLETION\nPRESERVE.\n\nIn you specify ON COMPLETION NOT PRESERVE, and you specify a timestamp in the\npast for AT or ENDS clause, the event will be immediatly dropped. In such\ncases, you will get a Note 1558: \"Event execution time is in the past and ON\nCOMPLETION NOT PRESERVE is set. The event was dropped immediately after\ncreation\".\n\nENABLE/DISABLE/DISABLE ON SLAVE\n-------------------------------\n\nEvents are ENABLEd by default. If you want to stop MariaDB from executing an\nevent, you may specify DISABLE. When it is ready to be activated, you may\nenable it using ALTER EVENT. Another option is DISABLE ON SLAVE, which\nindicates that an event was created on a master and has been replicated to the\nslave, which is prevented from executing the event. If DISABLE ON SLAVE is\nspecifically set, the event will be disabled everywhere. It will not be\nexecuted on the mater or the slaves.\n\nCOMMENT\n-------\n\nThe COMMENT clause may be used to set a comment for the event. Maximum length\nfor comments is 64 characters. The comment is a string, so it must be quoted.\nTo see events comments, you can query the INFORMATION_SCHEMA.EVENTS table (the\ncolumn is named EVENT_COMMENT).\n\nExamples\n--------\n\nMinimal CREATE EVENT statement:\n\nCREATE EVENT myevent\n ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR\n DO\n UPDATE myschema.mytable SET mycol = mycol + 1;\n\nAn event that will be triggered tomorrow at a certain time:\n\nCREATE EVENT example\nON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 DAY + INTERVAL 3 HOUR\nDO something;\n\nNext month a recurring event will be triggered hourly for a week:\n\nCREATE EVENT example\nON SCHEDULE EVERY 1 HOUR\nSTARTS CURRENT_TIMESTAMP + INTERVAL 1 MONTH\nENDS CURRENT_TIMESTAMP + INTERVAL 1 MONTH + INTERVAL 1 WEEK\nDO some_task;\n\nOR REPLACE and IF NOT EXISTS:\n\nCREATE EVENT myevent\n ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR\n DO\n UPDATE myschema.mytable SET mycol = mycol + 1;\nERROR 1537 (HY000): Event \'myevent\' already exists\n\nCREATE OR REPLACE EVENT myevent\n ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR\n DO\n UPDATE myschema.mytable SET mycol = mycol + 1;;\nQuery OK, 0 rows affected (0.00 sec)\n\nCREATE EVENT IF NOT EXISTS myevent\n ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR\n DO\n UPDATE myschema.mytable SET mycol = mycol + 1;\nQuery OK, 0 rows affected, 1 warning (0.00 sec)\n\nSHOW WARNINGS;\n+-------+------+--------------------------------+\n| Level | Code | Message |\n+-------+------+--------------------------------+\n| Note | 1537 | Event \'myevent\' already exists |\n+-------+------+--------------------------------+\n\nURL: https://mariadb.com/kb/en/create-event/','','https://mariadb.com/kb/en/create-event/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (712,38,'CREATE FUNCTION','Syntax\n------\n\nCREATE [OR REPLACE]\n [DEFINER = {user | CURRENT_USER | role | CURRENT_ROLE }]\n [AGGREGATE] FUNCTION [IF NOT EXISTS] func_name ([func_parameter[,...]])\n RETURNS type\n [characteristic ...]\n RETURN func_body\nfunc_parameter:\n [ IN | OUT | INOUT | IN OUT ] param_name type\ntype:\n Any valid MariaDB data type\ncharacteristic:\n LANGUAGE SQL\n | [NOT] DETERMINISTIC\n | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }\n | SQL SECURITY { DEFINER | INVOKER }\n | COMMENT \'string\'\nfunc_body:\n Valid SQL procedure statement\n\nDescription\n-----------\n\nUse the CREATE FUNCTION statement to create a new stored function. You must\nhave the CREATE ROUTINE database privilege to use CREATE FUNCTION. A function\ntakes any number of arguments and returns a value from the function body. The\nfunction body can be any valid SQL expression as you would use, for example,\nin any select expression. If you have the appropriate privileges, you can call\nthe function exactly as you would any built-in function. See Security below\nfor details on privileges.\n\nYou can also use a variant of the CREATE FUNCTION statement to install a\nuser-defined function (UDF) defined by a plugin. See CREATE FUNCTION (UDF) for\ndetails.\n\nYou can use a SELECT statement for the function body by enclosing it in\nparentheses, exactly as you would to use a subselect for any other expression.\nThe SELECT statement must return a single value. If more than one column is\nreturned when the function is called, error 1241 results. If more than one row\nis returned when the function is called, error 1242 results. Use a LIMIT\nclause to ensure only one row is returned.\n\nYou can also replace the RETURN clause with a BEGIN...END compound statement.\nThe compound statement must contain a RETURN statement. When the function is\ncalled, the RETURN statement immediately returns its result, and any\nstatements after RETURN are effectively ignored.\n\nBy default, a function is associated with the current database. To associate\nthe function explicitly with a given database, specify the fully-qualified\nname as db_name.func_name when you create it. If the function name is the same\nas the name of a built-in function, you must use the fully qualified name when\nyou call it.\n\nThe parameter list enclosed within parentheses must always be present. If\nthere are no parameters, an empty parameter list of () should be used.\nParameter names are not case sensitive.\n\nEach parameter can be declared to use any valid data type, except that the\nCOLLATE attribute cannot be used.\n\nFor valid identifiers to use as function names, see Identifier Names.\n\nIN | OUT | INOUT | IN OUT\n-------------------------\n\nMariaDB starting with 10.8.0\n----------------------------\nThe function parameter qualifiers for IN, OUT, INOUT, and IN OUT were added in\na 10.8.0 preview release. Prior to 10.8.0 quantifiers were supported only in\nprocedures.\n\nOUT, INOUT and its equivalent IN OUT, are only valid if called from SET and\nnot SELECT. These quantifiers are especially useful for creating functions\nwith more than one return value. This allows functions to be more complex and\nnested.\n\nDELIMITER $$\nCREATE FUNCTION add_func3(IN a INT, IN b INT, OUT c INT) RETURNS INT\nBEGIN\n SET c = 100;\n RETURN a + b;\nEND;\n$$\nDELIMITER ;\n\nSET @a = 2;\nSET @b = 3;\nSET @c = 0;\nSET @res= add_func3(@a, @b, @c);\n\nSELECT add_func3(@a, @b, @c);\nERROR 4186 (HY000): OUT or INOUT argument 3 for function add_func3 is not\nallowed here\n\nDELIMITER $$\nCREATE FUNCTION add_func4(IN a INT, IN b INT, d INT) RETURNS INT\nBEGIN\n DECLARE c, res INT;\n SET res = add_func3(a, b, c) + d;\n if (c > 99) then\n return 3;\n else\n return res;\n end if;\nEND;\n$$\n\nDELIMITER ;\n\nSELECT add_func4(1,2,3);\n+------------------+\n| add_func4(1,2,3) |\n+------------------+\n| 3 |\n+------------------+\n\nAGGREGATE\n---------\n\nMariaDB starting with 10.3.3\n----------------------------\nFrom MariaDB 10.3.3, it is possible to create stored aggregate functions as\nwell. See Stored Aggregate Functions for details.\n\nRETURNS\n-------\n\nThe RETURNS clause specifies the return type of the function. NULL values are\npermitted with all return types.\n\nWhat happens if the RETURN clause returns a value of a different type? It\ndepends on the SQL_MODE in effect at the moment of the function creation.\n\nIf the SQL_MODE is strict (STRICT_ALL_TABLES or STRICT_TRANS_TABLES flags are\nspecified), a 1366 error will be produced.\n\nOtherwise, the value is coerced to the proper type. For example, if a function\nspecifies an ENUM or SET value in the RETURNS clause, but the RETURN clause\nreturns an integer, the value returned from the function is the string for the\ncorresponding ENUM member of set of SET members.\n\nMariaDB stores the SQL_MODE system variable setting that is in effect at the\ntime a routine is created, and always executes the routine with this setting\nin force, regardless of the server SQL mode in effect when the routine is\ninvoked.\n\nLANGUAGE SQL\n------------\n\nLANGUAGE SQL is a standard SQL clause, and it can be used in MariaDB for\nportability. However that clause has no meaning, because SQL is the only\nsupported language for stored functions.\n\nA function is deterministic if it can produce only one result for a given list\nof parameters. If the result may be affected by stored data, server variables,\nrandom numbers or any value that is not explicitly passed, then the function\nis not deterministic. Also, a function is non-deterministic if it uses\nnon-deterministic functions like NOW() or CURRENT_TIMESTAMP(). The optimizer\nmay choose a faster execution plan if it known that the function is\ndeterministic. In such cases, you should declare the routine using the\nDETERMINISTIC keyword. If you want to explicitly state that the function is\nnot deterministic (which is the default) you can use the NOT DETERMINISTIC\nkeywords.\n\nIf you declare a non-deterministic function as DETERMINISTIC, you may get\nincorrect results. If you declare a deterministic function as NOT\nDETERMINISTIC, in some cases the queries will be slower.\n\nOR REPLACE\n----------\n\nMariaDB starting with 10.1.3\n----------------------------\nIf the optional OR REPLACE clause is used, it acts as a shortcut for:\n\nDROP FUNCTION IF EXISTS function_name;\nCREATE FUNCTION function_name ...;\n\nwith the exception that any existing privileges for the function are not\ndropped.\n\nIF NOT EXISTS\n-------------\n\nMariaDB starting with 10.1.3\n----------------------------\nIf the IF NOT EXISTS clause is used, MariaDB will return a warning instead of\nan error if the function already exists. Cannot be used together with OR\nREPLACE.\n\n[NOT] DETERMINISTIC\n-------------------\n\nThe [NOT] DETERMINISTIC clause also affects binary logging, because the\nSTATEMENT format can not be used to store or replicate non-deterministic\nstatements.\n\nCONTAINS SQL, NO SQL, READS SQL DATA, and MODIFIES SQL DATA are informative\nclauses that tell the server what the function does. MariaDB does not check in\nany way whether the specified clause is correct. If none of these clauses are\nspecified, CONTAINS SQL is used by default.\n\nMODIFIES SQL DATA\n-----------------\n\nMODIFIES SQL DATA means that the function contains statements that may modify\ndata stored in databases. This happens if the function contains statements\nlike DELETE, UPDATE, INSERT, REPLACE or DDL.\n\nREADS SQL DATA\n--------------\n\nREADS SQL DATA means that the function reads data stored in databases, but\ndoes not modify any data. This happens if SELECT statements are used, but\nthere no write operations are executed.\n\nCONTAINS SQL\n------------\n\nCONTAINS SQL means that the function contains at least one SQL statement, but\nit does not read or write any data stored in a database. Examples include SET\nor DO.\n\nNO SQL\n------\n\nNO SQL means nothing, because MariaDB does not currently support any language\nother than SQL.\n\nOracle Mode\n-----------\n\nMariaDB starting with 10.3\n--------------------------\nFrom MariaDB 10.3, a subset of Oracle\'s PL/SQL language has been supported in\naddition to the traditional SQL/PSM-based MariaDB syntax. See Oracle mode from\nMariaDB 10.3 for details on changes when running Oracle mode.\n\nSecurity\n--------\n\nYou must have the EXECUTE privilege on a function to call it. MariaDB\nautomatically grants the EXECUTE and ALTER ROUTINE privileges to the account\nthat called CREATE FUNCTION, even if the DEFINER clause was used.\n\nEach function has an account associated as the definer. By default, the\ndefiner is the account that created the function. Use the DEFINER clause to\nspecify a different account as the definer. You must have the SUPER privilege,\nor, from MariaDB 10.5.2, the SET USER privilege, to use the DEFINER clause.\nSee Account Names for details on specifying accounts.\n\nThe SQL SECURITY clause specifies what privileges are used when a function is\ncalled. If SQL SECURITY is INVOKER, the function body will be evaluated using\nthe privileges of the user calling the function. If SQL SECURITY is DEFINER,\nthe function body is always evaluated using the privileges of the definer\naccount. DEFINER is the default.\n\nThis allows you to create functions that grant limited access to certain data.\nFor example, say you have a table that stores some employee information, and\nthat you\'ve granted SELECT privileges only on certain columns to the user\naccount roger.\n\nCREATE TABLE employees (name TINYTEXT, dept TINYTEXT, salary INT);\nGRANT SELECT (name, dept) ON employees TO roger;\n\nTo allow the user the get the maximum salary for a department, define a\nfunction and grant the EXECUTE privilege:\n\nCREATE FUNCTION max_salary (dept TINYTEXT) RETURNS INT RETURN\n (SELECT MAX(salary) FROM employees WHERE employees.dept = dept);\nGRANT EXECUTE ON FUNCTION max_salary TO roger;\n\nSince SQL SECURITY defaults to DEFINER, whenever the user roger calls this\nfunction, the subselect will execute with your privileges. As long as you have\nprivileges to select the salary of each employee, the caller of the function\nwill be able to get the maximum salary for each department without being able\nto see individual salaries.\n\nCharacter sets and collations\n-----------------------------\n\nFunction return types can be declared to use any valid character set and\ncollation. If used, the COLLATE attribute needs to be preceded by a CHARACTER\nSET attribute.\n\nIf the character set and collation are not specifically set in the statement,\nthe database defaults at the time of creation will be used. If the database\ndefaults change at a later stage, the stored function character set/collation\nwill not be changed at the same time; the stored function needs to be dropped\nand recreated to ensure the same character set/collation as the database is\nused.\n\nExamples\n--------\n\nThe following example function takes a parameter, performs an operation using\nan SQL function, and returns the result.\n\nCREATE FUNCTION hello (s CHAR(20))\n RETURNS CHAR(50) DETERMINISTIC\n RETURN CONCAT(\'Hello, \',s,\'!\');\n\nSELECT hello(\'world\');\n+----------------+\n| hello(\'world\') |\n+----------------+\n| Hello, world! |\n+----------------+\n\nYou can use a compound statement in a function to manipulate data with\nstatements like INSERT and UPDATE. The following example creates a counter\nfunction that uses a temporary table to store the current value. Because the\ncompound statement contains statements terminated with semicolons, you have to\nfirst change the statement delimiter with the DELIMITER statement to allow the\nsemicolon to be used in the function body. See Delimiters in the mysql client\nfor more.\n\nCREATE TEMPORARY TABLE counter (c INT);\nINSERT INTO counter VALUES (0);\nDELIMITER //\nCREATE FUNCTION counter () RETURNS INT\n BEGIN\n UPDATE counter SET c = c + 1;\n RETURN (SELECT c FROM counter LIMIT 1);\n END //\nDELIMITER ;\n\nCharacter set and collation:\n\nCREATE FUNCTION hello2 (s CHAR(20))\n RETURNS CHAR(50) CHARACTER SET \'utf8\' COLLATE \'utf8_bin\' DETERMINISTIC\n RETURN CONCAT(\'Hello, \',s,\'!\');\n\nURL: https://mariadb.com/kb/en/create-function/','','https://mariadb.com/kb/en/create-function/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (713,38,'CREATE INDEX','Syntax\n------\n\nCREATE [OR REPLACE] [UNIQUE|FULLTEXT|SPATIAL] INDEX \n [IF NOT EXISTS] index_name\n [index_type]\n ON tbl_name (index_col_name,...)\n [WAIT n | NOWAIT]\n [index_option]\n [algorithm_option | lock_option] ...\n\nindex_col_name:\n col_name [(length)] [ASC | DESC]\n\nindex_type:\n USING {BTREE | HASH | RTREE}\n\nindex_option:\n [ KEY_BLOCK_SIZE [=] value\n | index_type\n | WITH PARSER parser_name\n | COMMENT \'string\'\n | CLUSTERING={YES| NO} ]\n [ IGNORED | NOT IGNORED ]\n\nalgorithm_option:\n ALGORITHM [=] {DEFAULT|INPLACE|COPY|NOCOPY|INSTANT}\n\nlock_option:\n LOCK [=] {DEFAULT|NONE|SHARED|EXCLUSIVE}\n\nDescription\n-----------\n\nCREATE INDEX is mapped to an ALTER TABLE statement to create indexes. See\nALTER TABLE. CREATE INDEX cannot be used to create a PRIMARY KEY; use ALTER\nTABLE instead.\n\nIf another connection is using the table, a metadata lock is active, and this\nstatement will wait until the lock is released. This is also true for\nnon-transactional tables.\n\nAnother shortcut, DROP INDEX, allows the removal of an index.\n\nFor valid identifiers to use as index names, see Identifier Names.\n\nNote that KEY_BLOCK_SIZE is currently ignored in CREATE INDEX, although it is\nincluded in the output of SHOW CREATE TABLE.\n\nPrivileges\n----------\n\nExecuting the CREATE INDEX statement requires the INDEX privilege for the\ntable or the database.\n\nOnline DDL\n----------\n\nOnline DDL is supported with the ALGORITHM and LOCK clauses.\n\nSee InnoDB Online DDL Overview for more information on online DDL with InnoDB.\n\nCREATE OR REPLACE INDEX\n-----------------------\n\nIf the OR REPLACE clause is used and if the index already exists, then instead\nof returning an error, the server will drop the existing index and replace it\nwith the newly defined index.\n\nCREATE INDEX IF NOT EXISTS\n--------------------------\n\nIf the IF NOT EXISTS clause is used, then the index will only be created if an\nindex with the same name does not already exist. If the index already exists,\nthen a warning will be triggered by default.\n\nIndex Definitions\n-----------------\n\nSee CREATE TABLE: Index Definitions for information about index definitions.\n\nWAIT/NOWAIT\n-----------\n\nSet the lock wait timeout. See WAIT and NOWAIT.\n\nALGORITHM\n---------\n\nSee ALTER TABLE: ALGORITHM for more information.\n\nLOCK\n----\n\nSee ALTER TABLE: LOCK for more information.\n\nProgress Reporting\n------------------\n\nMariaDB provides progress reporting for CREATE INDEX statement for clients\nthat support the new progress reporting protocol. For example, if you were\nusing the mysql client, then the progress report might look like this::\n\nCREATE INDEX i ON tab (num);\nStage: 1 of 2 \'copy to tmp table\' 46% of stage\n\nThe progress report is also shown in the output of the SHOW PROCESSLIST\nstatement and in the contents of the information_schema.PROCESSLIST table.\n\nSee Progress Reporting for more information.\n\nWITHOUT OVERLAPS\n----------------\n\nMariaDB starting with 10.5.3\n----------------------------\nThe WITHOUT OVERLAPS clause allows one to constrain a primary or unique index\nsuch that application-time periods cannot overlap.\n\nExamples\n--------\n\nCreating a unique index:\n\nCREATE UNIQUE INDEX HomePhone ON Employees(Home_Phone);\n\nOR REPLACE and IF NOT EXISTS:\n\nCREATE INDEX xi ON xx5 (x);\nQuery OK, 0 rows affected (0.03 sec)\n\nCREATE INDEX xi ON xx5 (x);\nERROR 1061 (42000): Duplicate key name \'xi\'\n\nCREATE OR REPLACE INDEX xi ON xx5 (x);\nQuery OK, 0 rows affected (0.03 sec)\n\nCREATE INDEX IF NOT EXISTS xi ON xx5 (x);\nQuery OK, 0 rows affected, 1 warning (0.00 sec)\n\nSHOW WARNINGS;\n+-------+------+-------------------------+\n| Level | Code | Message |\n+-------+------+-------------------------+\n| Note | 1061 | Duplicate key name \'xi\' |\n+-------+------+-------------------------+\n\nFrom MariaDB 10.5.3, creating a unique index for an application-time period\ntable with a WITHOUT OVERLAPS constraint:\n\nCREATE UNIQUE INDEX u ON rooms (room_number, p WITHOUT OVERLAPS);\n\nURL: https://mariadb.com/kb/en/create-index/','','https://mariadb.com/kb/en/create-index/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (714,38,'CREATE PACKAGE','MariaDB starting with 10.3.5\n----------------------------\nOracle-style packages were introduced in MariaDB 10.3.5.\n\nSyntax\n------\n\nCREATE\n [ OR REPLACE]\n [DEFINER = { user | CURRENT_USER | role | CURRENT_ROLE }]\n PACKAGE [ IF NOT EXISTS ]\n [ db_name . ] package_name\n [ package_characteristic ... ]\n{ AS | IS }\n [ package_specification_element ... ]\nEND [ package_name ]\n\npackage_characteristic:\n COMMENT \'string\'\n | SQL SECURITY { DEFINER | INVOKER }\n\npackage_specification_element:\n FUNCTION_SYM package_specification_function ;\n | PROCEDURE_SYM package_specification_procedure ;\n\npackage_specification_function:\n func_name [ ( func_param [, func_param]... ) ]\n RETURNS func_return_type\n [ package_routine_characteristic... ]\n\npackage_specification_procedure:\n proc_name [ ( proc_param [, proc_param]... ) ]\n [ package_routine_characteristic... ]\n\nfunc_return_type:\n type\n\nfunc_param:\n param_name [ IN | OUT | INOUT | IN OUT ] type\n\nproc_param:\n param_name [ IN | OUT | INOUT | IN OUT ] type\n\ntype:\n Any valid MariaDB explicit or anchored data type\n\npackage_routine_characteristic:\n COMMENT \'string\'\n | LANGUAGE SQL\n | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }\n | SQL SECURITY { DEFINER | INVOKER }\n\nDescription\n-----------\n\nThe CREATE PACKAGE statement can be used when Oracle SQL_MODE is set.\n\nThe CREATE PACKAGE creates the specification for a stored package (a\ncollection of logically related stored objects). A stored package\nspecification declares public routines (procedures and functions) of the\npackage, but does not implement these routines.\n\nA package whose specification was created by the CREATE PACKAGE statement,\nshould later be implemented using the CREATE PACKAGE BODY statement.\n\nFunction parameter quantifiers IN | OUT | INOUT | IN OUT\n--------------------------------------------------------\n\nMariaDB starting with 10.8.0\n----------------------------\nThe function parameter quantifiers for IN, OUT, INOUT, and IN OUT where added\nin a 10.8.0 preview release. Prior to 10.8.0 quantifiers were supported only\nin procedures.\n\nOUT, INOUT and its equivalent IN OUT, are only valid if called from SET and\nnot SELECT. These quantifiers are especially useful for creating functions and\nprocedures with more than one return value. This allows functions and\nprocedures to be more complex and nested.\n\nExamples\n--------\n\nSET sql_mode=ORACLE;\nDELIMITER $$\nCREATE OR REPLACE PACKAGE employee_tools AS\n FUNCTION getSalary(eid INT) RETURN DECIMAL(10,2);\n PROCEDURE raiseSalary(eid INT, amount DECIMAL(10,2));\n PROCEDURE raiseSalaryStd(eid INT);\n PROCEDURE hire(ename TEXT, esalary DECIMAL(10,2));\nEND;\n$$\nDELIMITER ;\n\nURL: https://mariadb.com/kb/en/create-package/','','https://mariadb.com/kb/en/create-package/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (715,38,'CREATE PACKAGE BODY','MariaDB starting with 10.3.5\n----------------------------\nOracle-style packages were introduced in MariaDB 10.3.5.\n\nSyntax\n------\n\nCREATE [ OR REPLACE ]\n [DEFINER = { user | CURRENT_USER | role | CURRENT_ROLE }]\n PACKAGE BODY\n [ IF NOT EXISTS ]\n [ db_name . ] package_name\n [ package_characteristic... ]\n{ AS | IS }\n package_implementation_declare_section\n package_implementation_executable_section\nEND [ package_name]\n\npackage_implementation_declare_section:\n package_implementation_item_declaration\n [ package_implementation_item_declaration... ]\n [ package_implementation_routine_definition... ]\n | package_implementation_routine_definition\n [ package_implementation_routine_definition...]\n\npackage_implementation_item_declaration:\n variable_declaration ;\n\nvariable_declaration:\n variable_name[,...] type [:= expr ]\n\npackage_implementation_routine_definition:\n FUNCTION package_specification_function\n [ package_implementation_function_body ] ;\n | PROCEDURE package_specification_procedure\n [ package_implementation_procedure_body ] ;\n\npackage_implementation_function_body:\n { AS | IS } package_routine_body [func_name]\n\npackage_implementation_procedure_body:\n { AS | IS } package_routine_body [proc_name]\n\npackage_routine_body:\n [ package_routine_declarations ]\n BEGIN\n statements [ EXCEPTION exception_handlers ]\n END\n\npackage_routine_declarations:\n package_routine_declaration \';\' [package_routine_declaration \';\']...\n\npackage_routine_declaration:\n variable_declaration\n | condition_name CONDITION FOR condition_value\n | user_exception_name EXCEPTION\n | CURSOR_SYM cursor_name\n [ ( cursor_formal_parameters ) ]\n IS select_statement\n ;\n\npackage_implementation_executable_section:\n END\n | BEGIN\n statement ; [statement ; ]...\n [EXCEPTION exception_handlers]\n END\n\nexception_handlers:\n exception_handler [exception_handler...]\n\nexception_handler:\n WHEN_SYM condition_value [, condition_value]...\n THEN_SYM statement ; [statement ;]...\n\ncondition_value:\n condition_name\n | user_exception_name\n | SQLWARNING\n | SQLEXCEPTION\n | NOT FOUND\n | OTHERS_SYM\n | SQLSTATE [VALUE] sqlstate_value\n | mariadb_error_code\n\nDescription\n-----------\n\nThe CREATE PACKAGE BODY statement can be used when Oracle SQL_MODE is set.\n\nThe CREATE PACKAGE BODY statement creates the package body for a stored\npackage. The package specification must be previously created using the CREATE\nPACKAGE statement.\n\nA package body provides implementations of the package public routines and can\noptionally have:\n\n* package-wide private variables\n* package private routines\n* forward declarations for private routines\n* an executable initialization section\n\nExamples\n--------\n\nSET sql_mode=ORACLE;\nDELIMITER $$\nCREATE OR REPLACE PACKAGE employee_tools AS\n FUNCTION getSalary(eid INT) RETURN DECIMAL(10,2);\n PROCEDURE raiseSalary(eid INT, amount DECIMAL(10,2));\n PROCEDURE raiseSalaryStd(eid INT);\n PROCEDURE hire(ename TEXT, esalary DECIMAL(10,2));\nEND;\n$$\nCREATE PACKAGE BODY employee_tools AS\n -- package body variables\n stdRaiseAmount DECIMAL(10,2):=500;\n\n-- private routines\n PROCEDURE log (eid INT, ecmnt TEXT) AS\n BEGIN\n INSERT INTO employee_log (id, cmnt) VALUES (eid, ecmnt);\n END;\n\n-- public routines\n PROCEDURE hire(ename TEXT, esalary DECIMAL(10,2)) AS\n eid INT;\n BEGIN\n INSERT INTO employee (name, salary) VALUES (ename, esalary);\n eid:= last_insert_id();\n log(eid, \'hire \' || ename);\n END;\n\nFUNCTION getSalary(eid INT) RETURN DECIMAL(10,2) AS\n nSalary DECIMAL(10,2);\n BEGIN\n SELECT salary INTO nSalary FROM employee WHERE id=eid;\n log(eid, \'getSalary id=\' || eid || \' salary=\' || nSalary);\n RETURN nSalary;\n END;\n\nPROCEDURE raiseSalary(eid INT, amount DECIMAL(10,2)) AS\n BEGIN\n UPDATE employee SET salary=salary+amount WHERE id=eid;\n log(eid, \'raiseSalary id=\' || eid || \' amount=\' || amount);\n END;\n\nPROCEDURE raiseSalaryStd(eid INT) AS\n BEGIN\n raiseSalary(eid, stdRaiseAmount);\n log(eid, \'raiseSalaryStd id=\' || eid);\n END;\n\nBEGIN\n -- This code is executed when the current session\n -- accesses any of the package routines for the first time\n log(0, \'Session \' || connection_id() || \' \' || current_user || \' started\');\nEND;\n$$\n\nDELIMITER ;\n\nURL: https://mariadb.com/kb/en/create-package-body/','','https://mariadb.com/kb/en/create-package-body/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (716,38,'CREATE PROCEDURE','Syntax\n------\n\nCREATE\n [OR REPLACE]\n [DEFINER = { user | CURRENT_USER | role | CURRENT_ROLE }]\n PROCEDURE [IF NOT EXISTS] sp_name ([proc_parameter[,...]])\n [characteristic ...] routine_body\n\nproc_parameter:\n [ IN | OUT | INOUT ] param_name type\n\ntype:\n Any valid MariaDB data type\n\ncharacteristic:\n LANGUAGE SQL\n | [NOT] DETERMINISTIC\n | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }\n | SQL SECURITY { DEFINER | INVOKER }\n | COMMENT \'string\'\n\nroutine_body:\n Valid SQL procedure statement\n\nDescription\n-----------\n\nCreates a stored procedure. By default, a routine is associated with the\ndefault database. To associate the routine explicitly with a given database,\nspecify the name as db_name.sp_name when you create it.\n\nWhen the routine is invoked, an implicit USE db_name is performed (and undone\nwhen the routine terminates). The causes the routine to have the given default\ndatabase while it executes. USE statements within stored routines are\ndisallowed.\n\nWhen a stored procedure has been created, you invoke it by using the CALL\nstatement (see CALL).\n\nTo execute the CREATE PROCEDURE statement, it is necessary to have the CREATE\nROUTINE privilege. By default, MariaDB automatically grants the ALTER ROUTINE\nand EXECUTE privileges to the routine creator. See also Stored Routine\nPrivileges.\n\nThe DEFINER and SQL SECURITY clauses specify the security context to be used\nwhen checking access privileges at routine execution time, as described here.\nRequires the SUPER privilege, or, from MariaDB 10.5.2, the SET USER privilege.\n\nIf the routine name is the same as the name of a built-in SQL function, you\nmust use a space between the name and the following parenthesis when defining\nthe routine, or a syntax error occurs. This is also true when you invoke the\nroutine later. For this reason, we suggest that it is better to avoid re-using\nthe names of existing SQL functions for your own stored routines.\n\nThe IGNORE_SPACE SQL mode applies to built-in functions, not to stored\nroutines. It is always allowable to have spaces after a routine name,\nregardless of whether IGNORE_SPACE is enabled.\n\nThe parameter list enclosed within parentheses must always be present. If\nthere are no parameters, an empty parameter list of () should be used.\nParameter names are not case sensitive.\n\nEach parameter can be declared to use any valid data type, except that the\nCOLLATE attribute cannot be used.\n\nFor valid identifiers to use as procedure names, see Identifier Names.\n\nThings to be Aware of With CREATE OR REPLACE\n--------------------------------------------\n\n* One can\'t use OR REPLACE together with IF EXISTS.\n\nCREATE PROCEDURE IF NOT EXISTS\n------------------------------\n\nIf the IF NOT EXISTS clause is used, then the procedure will only be created\nif a procedure with the same name does not already exist. If the procedure\nalready exists, then a warning will be triggered by default.\n\nIN/OUT/INOUT\n------------\n\nEach parameter is an IN parameter by default. To specify otherwise for a\nparameter, use the keyword OUT or INOUT before the parameter name.\n\nAn IN parameter passes a value into a procedure. The procedure might modify\nthe value, but the modification is not visible to the caller when the\nprocedure returns. An OUT parameter passes a value from the procedure back to\nthe caller. Its initial value is NULL within the procedure, and its value is\nvisible to the caller when the procedure returns. An INOUT parameter is\ninitialized by the caller, can be modified by the procedure, and any change\nmade by the procedure is visible to the caller when the procedure returns.\n\nFor each OUT or INOUT parameter, pass a user-defined variable in the CALL\nstatement that invokes the procedure so that you can obtain its value when the\nprocedure returns. If you are calling the procedure from within another stored\nprocedure or function, you can also pass a routine parameter or local routine\nvariable as an IN or INOUT parameter.\n\nDETERMINISTIC/NOT DETERMINISTIC\n-------------------------------\n\nDETERMINISTIC and NOT DETERMINISTIC apply only to functions. Specifying\nDETERMINISTC or NON-DETERMINISTIC in procedures has no effect. The default\nvalue is NOT DETERMINISTIC. Functions are DETERMINISTIC when they always\nreturn the same value for the same input. For example, a truncate or substring\nfunction. Any function involving data, therefore, is always NOT DETERMINISTIC.\n\nCONTAINS SQL/NO SQL/READS SQL DATA/MODIFIES SQL DATA\n----------------------------------------------------\n\nCONTAINS SQL, NO SQL, READS SQL DATA, and MODIFIES SQL DATA are informative\nclauses that tell the server what the function does. MariaDB does not check in\nany way whether the specified clause is correct. If none of these clauses are\nspecified, CONTAINS SQL is used by default.\n\nMODIFIES SQL DATA means that the function contains statements that may modify\ndata stored in databases. This happens if the function contains statements\nlike DELETE, UPDATE, INSERT, REPLACE or DDL.\n\nREADS SQL DATA means that the function reads data stored in databases, but\ndoes not modify any data. This happens if SELECT statements are used, but\nthere no write operations are executed.\n\nCONTAINS SQL means that the function contains at least one SQL statement, but\nit does not read or write any data stored in a database. Examples include SET\nor DO.\n\nNO SQL means nothing, because MariaDB does not currently support any language\nother than SQL.\n\nThe routine_body consists of a valid SQL procedure statement. This can be a\nsimple statement such as SELECT or INSERT, or it can be a compound statement\nwritten using BEGIN and END. Compound statements can contain declarations,\nloops, and other control structure statements. See Programmatic and Compound\nStatements for syntax details.\n\nMariaDB allows routines to contain DDL statements, such as CREATE and DROP.\nMariaDB also allows stored procedures (but not stored functions) to contain\nSQL transaction statements such as COMMIT.\n\nFor additional information about statements that are not allowed in stored\nroutines, see Stored Routine Limitations.\n\nInvoking stored procedure from within programs\n----------------------------------------------\n\nFor information about invoking stored procedures from within programs written\nin a language that has a MariaDB/MySQL interface, see CALL.\n\nOR REPLACE\n----------\n\nIf the optional OR REPLACE clause is used, it acts as a shortcut for:\n\nDROP PROCEDURE IF EXISTS name;\nCREATE PROCEDURE name ...;\n\nwith the exception that any existing privileges for the procedure are not\ndropped.\n\nsql_mode\n--------\n\nMariaDB stores the sql_mode system variable setting that is in effect at the\ntime a routine is created, and always executes the routine with this setting\nin force, regardless of the server SQL mode in effect when the routine is\ninvoked.\n\nCharacter Sets and Collations\n-----------------------------\n\nProcedure parameters can be declared with any character set/collation. If the\ncharacter set and collation are not specifically set, the database defaults at\nthe time of creation will be used. If the database defaults change at a later\nstage, the stored procedure character set/collation will not be changed at the\nsame time; the stored procedure needs to be dropped and recreated to ensure\nthe same character set/collation as the database is used.\n\nOracle Mode\n-----------\n\nMariaDB starting with 10.3\n--------------------------\nFrom MariaDB 10.3, a subset of Oracle\'s PL/SQL language has been supported in\naddition to the traditional SQL/PSM-based MariaDB syntax. See Oracle mode from\nMariaDB 10.3 for details on changes when running Oracle mode.\n\nExamples\n--------\n\nThe following example shows a simple stored procedure that uses an OUT\nparameter. It uses the DELIMITER command to set a new delimiter for the\nduration of the process — see Delimiters in the mysql client.\n\nDELIMITER //\n\nCREATE PROCEDURE simpleproc (OUT param1 INT)\n BEGIN\n SELECT COUNT(*) INTO param1 FROM t;\n END;\n//\n\nDELIMITER ;\n\nCALL simpleproc(@a);\n\nSELECT @a;\n+------+\n| @a |\n+------+\n| 1 |\n+------+\n\nCharacter set and collation:\n\nDELIMITER //\n\nCREATE PROCEDURE simpleproc2 (\n OUT param1 CHAR(10) CHARACTER SET \'utf8\' COLLATE \'utf8_bin\'\n)\n BEGIN\n SELECT CONCAT(\'a\'),f1 INTO param1 FROM t;\n END;\n//\n\nDELIMITER ;\n\nCREATE OR REPLACE:\n\nDELIMITER //\n\nCREATE PROCEDURE simpleproc2 (\n OUT param1 CHAR(10) CHARACTER SET \'utf8\' COLLATE \'utf8_bin\'\n)\n BEGIN\n SELECT CONCAT(\'a\'),f1 INTO param1 FROM t;\n END;\n//\nERROR 1304 (42000): PROCEDURE simpleproc2 already exists\n\nDELIMITER ;\n\nDELIMITER //\n\nCREATE OR REPLACE PROCEDURE simpleproc2 (\n OUT param1 CHAR(10) CHARACTER SET \'utf8\' COLLATE \'utf8_bin\'\n)\n BEGIN\n SELECT CONCAT(\'a\'),f1 INTO param1 FROM t;\n END;\n//\nERROR 1304 (42000): PROCEDURE simpleproc2 already exists\n\nDELIMITER ;\nQuery OK, 0 rows affected (0.03 sec)\n\nURL: https://mariadb.com/kb/en/create-procedure/','','https://mariadb.com/kb/en/create-procedure/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (717,38,'CREATE SERVER','Syntax\n------\n\nCREATE [OR REPLACE] SERVER [IF NOT EXISTS] server_name\n FOREIGN DATA WRAPPER wrapper_name\n OPTIONS (option [, option] ...)\n\noption:\n { HOST character-literal\n | DATABASE character-literal\n | USER character-literal\n | PASSWORD character-literal\n | SOCKET character-literal\n | OWNER character-literal\n | PORT numeric-literal }\n\nDescription\n-----------\n\nThis statement creates the definition of a server for use with the Spider,\nConnect, FEDERATED or FederatedX storage engine. The CREATE SERVER statement\ncreates a new row within the servers table within the mysql database. This\nstatement requires the SUPER privilege or, from MariaDB 10.5.2, the FEDERATED\nADMIN privilege.\n\nThe server_name should be a unique reference to the server. Server definitions\nare global within the scope of the server, it is not possible to qualify the\nserver definition to a specific database. server_name has a maximum length of\n64 characters (names longer than 64 characters are silently truncated), and is\ncase insensitive. You may specify the name as a quoted string.\n\nThe wrapper_name may be quoted with single quotes. Supported values are:\n\n* mysql\n* mariadb (in MariaDB 10.3 and later)\n\nFor each option you must specify either a character literal or numeric\nliteral. Character literals are UTF-8, support a maximum length of 64\ncharacters and default to a blank (empty) string. String literals are silently\ntruncated to 64 characters. Numeric literals must be a number between 0 and\n9999, default value is 0.\n\nNote: The OWNER option is currently not applied, and has no effect on the\nownership or operation of the server connection that is created.\n\nThe CREATE SERVER statement creates an entry in the mysql.servers table that\ncan later be used with the CREATE TABLE statement when creating a Spider,\nConnect, FederatedX or FEDERATED table. The options that you specify will be\nused to populate the columns in the mysql.servers table. The table columns are\nServer_name, Host, Db, Username, Password, Port and Socket.\n\nDROP SERVER removes a previously created server definition.\n\nCREATE SERVER is not written to the binary log, irrespective of the binary log\nformat being used. From MariaDB 10.1.13, Galera replicates the CREATE SERVER,\nALTER SERVER and DROP SERVER statements.\n\nFor valid identifiers to use as server names, see Identifier Names.\n\nOR REPLACE\n----------\n\nIf the optional OR REPLACE clause is used, it acts as a shortcut for:\n\nDROP SERVER IF EXISTS name;\nCREATE SERVER server_name ...;\n\nIF NOT EXISTS\n-------------\n\nIf the IF NOT EXISTS clause is used, MariaDB will return a warning instead of\nan error if the server already exists. Cannot be used together with OR REPLACE.\n\nExamples\n--------\n\nCREATE SERVER s\nFOREIGN DATA WRAPPER mysql\nOPTIONS (USER \'Remote\', HOST \'192.168.1.106\', DATABASE \'test\');\n\nOR REPLACE and IF NOT EXISTS:\n\nCREATE SERVER s \nFOREIGN DATA WRAPPER mysql \nOPTIONS (USER \'Remote\', HOST \'192.168.1.106\', DATABASE \'test\');\nERROR 1476 (HY000): The foreign server, s, you are trying to create already\nexists\n\nCREATE OR REPLACE SERVER s \nFOREIGN DATA WRAPPER mysql \nOPTIONS (USER \'Remote\', HOST \'192.168.1.106\', DATABASE \'test\');\nQuery OK, 0 rows affected (0.00 sec)\n\nCREATE SERVER IF NOT EXISTS s \nFOREIGN DATA WRAPPER mysql \nOPTIONS (USER \'Remote\', HOST \'192.168.1.106\', DATABASE \'test\');\nQuery OK, 0 rows affected, 1 warning (0.00 sec)\n\nSHOW WARNINGS;\n+-------+------+---------------------------------------------------------------\n+\n| Level | Code | Message \n |\n+-------+------+---------------------------------------------------------------\n+\n| Note | 1476 | The foreign server, s, you are trying to create already\nexists |\n+-------+------+---------------------------------------------------------------\n+\n\nURL: https://mariadb.com/kb/en/create-server/','','https://mariadb.com/kb/en/create-server/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (718,38,'CREATE TABLESPACE','The CREATE TABLESPACE statement is not supported by MariaDB. It was originally\ninherited from MySQL NDB Cluster. In MySQL 5.7 and later, the statement is\nalso supported for InnoDB. However, MariaDB has chosen not to include that\nspecific feature. See MDEV-19294 for more information.\n\nURL: https://mariadb.com/kb/en/create-tablespace/','','https://mariadb.com/kb/en/create-tablespace/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (719,38,'CREATE TRIGGER','Syntax\n------\n\nCREATE [OR REPLACE]\n [DEFINER = { user | CURRENT_USER | role | CURRENT_ROLE }]\n TRIGGER [IF NOT EXISTS] trigger_name trigger_time trigger_event\n ON tbl_name FOR EACH ROW\n [{ FOLLOWS | PRECEDES } other_trigger_name ]\n trigger_stmt;\n\nDescription\n-----------\n\nThis statement creates a new trigger. A trigger is a named database object\nthat is associated with a table, and that activates when a particular event\noccurs for the table. The trigger becomes associated with the table named\ntbl_name, which must refer to a permanent table. You cannot associate a\ntrigger with a TEMPORARY table or a view.\n\nCREATE TRIGGER requires the TRIGGER privilege for the table associated with\nthe trigger.\n\nMariaDB starting with 10.2.3\n----------------------------\nYou can have multiple triggers for the same trigger_time and trigger_event.\n\nFor valid identifiers to use as trigger names, see Identifier Names.\n\nOR REPLACE\n----------\n\nMariaDB starting with 10.1.4\n----------------------------\nIf used and the trigger already exists, instead of an error being returned,\nthe existing trigger will be dropped and replaced by the newly defined trigger.\n\nDEFINER\n-------\n\nThe DEFINER clause determines the security context to be used when checking\naccess privileges at trigger activation time. Usage requires the SUPER\nprivilege, or, from MariaDB 10.5.2, the SET USER privilege.\n\nIF NOT EXISTS\n-------------\n\nMariaDB starting with 10.1.4\n----------------------------\nIf the IF NOT EXISTS clause is used, the trigger will only be created if a\ntrigger of the same name does not exist. If the trigger already exists, by\ndefault a warning will be returned.\n\ntrigger_time\n------------\n\ntrigger_time is the trigger action time. It can be BEFORE or AFTER to indicate\nthat the trigger activates before or after each row to be modified.\n\ntrigger_event\n-------------\n\ntrigger_event indicates the kind of statement that activates the trigger. The\ntrigger_event can be one of the following:\n\n* INSERT: The trigger is activated whenever a new row is inserted into the\ntable; for example, through INSERT, LOAD DATA, and REPLACE statements.\n* UPDATE: The trigger is activated whenever a row is modified; for example,\nthrough UPDATE statements.\n* DELETE: The trigger is activated whenever a row is deleted from the table;\nfor example, through DELETE and REPLACE statements. However, DROP TABLE and\nTRUNCATE statements on the table do not activate this trigger, because they do\nnot use DELETE. Dropping a partition does not activate DELETE triggers, either.\n\nFOLLOWS/PRECEDES other_trigger_name\n-----------------------------------\n\nMariaDB starting with 10.2.3\n----------------------------\nThe FOLLOWS other_trigger_name and PRECEDES other_trigger_name options were\nadded in MariaDB 10.2.3 as part of supporting multiple triggers per action\ntime. This is the same syntax used by MySQL 5.7, although MySQL 5.7 does not\nhave multi-trigger support.\n\nFOLLOWS adds the new trigger after another trigger while PRECEDES adds the new\ntrigger before another trigger. If neither option is used, the new trigger is\nadded last for the given action and time.\n\nFOLLOWS and PRECEDES are not stored in the trigger definition. However the\ntrigger order is guaranteed to not change over time. mariadb-dump/mysqldump\nand other backup methods will not change trigger order. You can verify the\ntrigger order from the ACTION_ORDER column in INFORMATION_SCHEMA.TRIGGERS\ntable.\n\nSELECT trigger_name, action_order FROM information_schema.triggers \n WHERE event_object_table=\'t1\';\n\nAtomic DDL\n----------\n\nMariaDB starting with 10.6.1\n----------------------------\nMariaDB 10.6.1 supports Atomic DDL and CREATE TRIGGER is atomic.\n\nExamples\n--------\n\nCREATE DEFINER=`root`@`localhost` TRIGGER increment_animal\n AFTER INSERT ON animals FOR EACH ROW\n UPDATE animal_count SET animal_count.animals = animal_count.animals+1;\n\nOR REPLACE and IF NOT EXISTS\n\nCREATE DEFINER=`root`@`localhost` TRIGGER increment_animal\n AFTER INSERT ON animals FOR EACH ROW\n UPDATE animal_count SET animal_count.animals = animal_count.animals+1;\nERROR 1359 (HY000): Trigger already exists\n\nCREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER increment_animal\n AFTER INSERT ON animals FOR EACH ROW\n UPDATE animal_count SET animal_count.animals = animal_count.animals+1;\nQuery OK, 0 rows affected (0.12 sec)\n\nCREATE DEFINER=`root`@`localhost` TRIGGER IF NOT EXISTS increment_animal\n AFTER INSERT ON animals FOR EACH ROW\n UPDATE animal_count SET animal_count.animals = animal_count.animals+1;\nQuery OK, 0 rows affected, 1 warning (0.00 sec)\n\nSHOW WARNINGS;\n+-------+------+------------------------+\n| Level | Code | Message |\n+-------+------+------------------------+\n| Note | 1359 | Trigger already exists |\n+-------+------+------------------------+\n1 row in set (0.00 sec)\n\nURL: https://mariadb.com/kb/en/create-trigger/','','https://mariadb.com/kb/en/create-trigger/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (720,38,'CREATE VIEW','Syntax\n------\n\nCREATE\n [OR REPLACE]\n [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]\n [DEFINER = { user | CURRENT_USER | role | CURRENT_ROLE }]\n [SQL SECURITY { DEFINER | INVOKER }]\n VIEW [IF NOT EXISTS] view_name [(column_list)]\n AS select_statement\n [WITH [CASCADED | LOCAL] CHECK OPTION]\n\nDescription\n-----------\n\nThe CREATE VIEW statement creates a new view, or replaces an existing one if\nthe OR REPLACE clause is given. If the view does not exist, CREATE OR REPLACE\nVIEW is the same as CREATE VIEW. If the view does exist, CREATE OR REPLACE\nVIEW is the same as ALTER VIEW.\n\nThe select_statement is a SELECT statement that provides the definition of the\nview. (When you select from the view, you select in effect using the SELECT\nstatement.) select_statement can select from base tables or other views.\n\nThe view definition is \"frozen\" at creation time, so changes to the underlying\ntables afterwards do not affect the view definition. For example, if a view is\ndefined as SELECT * on a table, new columns added to the table later do not\nbecome part of the view. A SHOW CREATE VIEW shows that such queries are\nrewritten and column names are included in the view definition.\n\nThe view definition must be a query that does not return errors at view\ncreation times. However, the base tables used by the views might be altered\nlater and the query may not be valid anymore. In this case, querying the view\nwill result in an error. CHECK TABLE helps in finding this kind of problems.\n\nThe ALGORITHM clause affects how MariaDB processes the view. The DEFINER and\nSQL SECURITY clauses specify the security context to be used when checking\naccess privileges at view invocation time. The WITH CHECK OPTION clause can be\ngiven to constrain inserts or updates to rows in tables referenced by the\nview. These clauses are described later in this section.\n\nThe CREATE VIEW statement requires the CREATE VIEW privilege for the view, and\nsome privilege for each column selected by the SELECT statement. For columns\nused elsewhere in the SELECT statement you must have the SELECT privilege. If\nthe OR REPLACE clause is present, you must also have the DROP privilege for\nthe view.\n\nA view belongs to a database. By default, a new view is created in the default\ndatabase. To create the view explicitly in a given database, specify the name\nas db_name.view_name when you create it.\n\nCREATE VIEW test.v AS SELECT * FROM t;\n\nBase tables and views share the same namespace within a database, so a\ndatabase cannot contain a base table and a view that have the same name.\n\nViews must have unique column names with no duplicates, just like base tables.\nBy default, the names of the columns retrieved by the SELECT statement are\nused for the view column names. To define explicit names for the view columns,\nthe optional column_list clause can be given as a list of comma-separated\nidentifiers. The number of names in column_list must be the same as the number\nof columns retrieved by the SELECT statement.\n\nMySQL until 5.1.28\n------------------\nPrior to MySQL 5.1.29, When you modify an existing view, the current view\ndefinition is backed up and saved. It is stored in that table\'s database\ndirectory, in a subdirectory named arc. The backup file for a view v is named\nv.frm-00001. If you alter the view again, the next backup is named\nv.frm-00002. The three latest view backup definitions are stored. Backed up\nview definitions are not preserved by mysqldump, or any other such programs,\nbut you can retain them using a file copy operation. However, they are not\nneeded for anything but to provide you with a backup of your previous view\ndefinition. It is safe to remove these backup definitions, but only while\nmysqld is not running. If you delete the arc subdirectory or its files while\nmysqld is running, you will receive an error the next time you try to alter\nthe view:\n\nMariaDB [test]> ALTER VIEW v AS SELECT * FROM t; \nERROR 6 (HY000): Error on delete of \'.\\test\\arc/v.frm-0004\' (Errcode: 2)\n\nColumns retrieved by the SELECT statement can be simple references to table\ncolumns. They can also be expressions that use functions, constant values,\noperators, and so forth.\n\nUnqualified table or view names in the SELECT statement are interpreted with\nrespect to the default database. A view can refer to tables or views in other\ndatabases by qualifying the table or view name with the proper database name.\n\nA view can be created from many kinds of SELECT statements. It can refer to\nbase tables or other views. It can use joins, UNION, and subqueries. The\nSELECT need not even refer to any tables. The following example defines a view\nthat selects two columns from another table, as well as an expression\ncalculated from those columns:\n\nCREATE TABLE t (qty INT, price INT);\n\nINSERT INTO t VALUES(3, 50);\n\nCREATE VIEW v AS SELECT qty, price, qty*price AS value FROM t;\n\nSELECT * FROM v;\n+------+-------+-------+\n| qty | price | value |\n+------+-------+-------+\n| 3 | 50 | 150 |\n+------+-------+-------+\n\nA view definition is subject to the following restrictions:\n\n* The SELECT statement cannot contain a subquery in the FROM clause.\n* The SELECT statement cannot refer to system or user variables.\n* Within a stored program, the definition cannot refer to program parameters\nor local variables.\n* The SELECT statement cannot refer to prepared statement parameters.\n* Any table or view referred to in the definition must exist. However, after a\nview has been created, it is possible to drop a table or view that the\ndefinition refers to. In this case, use of the view results in an error. To\ncheck a view definition for problems of this kind, use the CHECK TABLE\nstatement.\n* The definition cannot refer to a TEMPORARY table, and you cannot create a\nTEMPORARY view.\n* Any tables named in the view definition must exist at definition time.\n* You cannot associate a trigger with a view.\n* For valid identifiers to use as view names, see Identifier Names.\n\nORDER BY is allowed in a view definition, but it is ignored if you select from\na view using a statement that has its own ORDER BY.\n\nFor other options or clauses in the definition, they are added to the options\nor clauses of the statement that references the view, but the effect is\nundefined. For example, if a view definition includes a LIMIT clause, and you\nselect from the view using a statement that has its own LIMIT clause, it is\nundefined which limit applies. This same principle applies to options such as\nALL, DISTINCT, or SQL_SMALL_RESULT that follow the SELECT keyword, and to\nclauses such as INTO, FOR UPDATE, and LOCK IN SHARE MODE.\n\nThe PROCEDURE clause cannot be used in a view definition, and it cannot be\nused if a view is referenced in the FROM clause.\n\nIf you create a view and then change the query processing environment by\nchanging system variables, that may affect the results that you get from the\nview:\n\nCREATE VIEW v (mycol) AS SELECT \'abc\';\n\nSET sql_mode = \'\';\n\nSELECT \"mycol\" FROM v;\n+-------+\n| mycol |\n+-------+\n| mycol | \n+-------+\n\nSET sql_mode = \'ANSI_QUOTES\';\n\nSELECT \"mycol\" FROM v;\n+-------+\n| mycol |\n+-------+\n| abc | \n+-------+\n\nThe DEFINER and SQL SECURITY clauses determine which MariaDB account to use\nwhen checking access privileges for the view when a statement is executed that\nreferences the view. They were added in MySQL 5.1.2. The legal SQL SECURITY\ncharacteristic values are DEFINER and INVOKER. These indicate that the\nrequired privileges must be held by the user who defined or invoked the view,\nrespectively. The default SQL SECURITY value is DEFINER.\n\nIf a user value is given for the DEFINER clause, it should be a MariaDB\naccount in \'user_name\'@\'host_name\' format (the same format used in the GRANT\nstatement). The user_name and host_name values both are required. The definer\ncan also be given as CURRENT_USER or CURRENT_USER(). The default DEFINER value\nis the user who executes the CREATE VIEW statement. This is the same as\nspecifying DEFINER = CURRENT_USER explicitly.\n\nIf you specify the DEFINER clause, these rules determine the legal DEFINER\nuser values:\n\n* If you do not have the SUPER privilege, or, from MariaDB 10.5.2, the SET\nUSER privilege, the only legal user value is your own account, either\nspecified literally or by using CURRENT_USER. You cannot set the definer to\nsome other account.\n* If you have the SUPER privilege, or, from MariaDB 10.5.2, the SET USER\nprivilege, you can specify any syntactically legal account name. If the\naccount does not actually exist, a warning is generated.\n* If the SQL SECURITY value is DEFINER but the definer account does not exist\nwhen the view is referenced, an error occurs.\n\nWithin a view definition, CURRENT_USER returns the view\'s DEFINER value by\ndefault. For views defined with the SQL SECURITY INVOKER characteristic,\nCURRENT_USER returns the account for the view\'s invoker. For information about\nuser auditing within views, see\nhttp://dev.mysql.com/doc/refman/5.1/en/account-activity-auditing.html.\n\nWithin a stored routine that is defined with the SQL SECURITY DEFINER\ncharacteristic, CURRENT_USER returns the routine\'s DEFINER value. This also\naffects a view defined within such a program, if the view definition contains\na DEFINER value of CURRENT_USER.\n\nView privileges are checked like this:\n\n* At view definition time, the view creator must have the privileges needed to\nuse the top-level objects accessed by the view. For example, if the view\ndefinition refers to table columns, the creator must have privileges for the\ncolumns, as described previously. If the definition refers to a stored\nfunction, only the privileges needed to invoke the function can be checked.\nThe privileges required when the function runs can be checked only as it\nexecutes: For different invocations of the function, different execution paths\nwithin the function might be taken.\n* When a view is referenced, privileges for objects accessed by the view are\nchecked against the privileges held by the view creator or invoker, depending\non whether the SQL SECURITY characteristic is DEFINER or INVOKER, respectively.\n* If reference to a view causes execution of a stored function, privilege\nchecking for statements executed within the function depend on whether the\nfunction is defined with a SQL SECURITY characteristic of DEFINER or INVOKER.\nIf the security characteristic is DEFINER, the function runs with the\nprivileges of its creator. If the characteristic is INVOKER, the function runs\nwith the privileges determined by the view\'s SQL SECURITY characteristic.\n\nExample: A view might depend on a stored function, and that function might\ninvoke other stored routines. For example, the following view invokes a stored\nfunction f():\n\nCREATE VIEW v AS SELECT * FROM t WHERE t.id = f(t.name);\n\nSuppose that f() contains a statement such as this:\n\nIF name IS NULL then\n CALL p1();\nELSE\n CALL p2();\nEND IF;\n\nThe privileges required for executing statements within f() need to be checked\nwhen f() executes. This might mean that privileges are needed for p1() or\np2(), depending on the execution path within f(). Those privileges must be\nchecked at runtime, and the user who must possess the privileges is determined\nby the SQL SECURITY values of the view v and the function f().\n\nThe DEFINER and SQL SECURITY clauses for views are extensions to standard SQL.\nIn standard SQL, views are handled using the rules for SQL SECURITY INVOKER.\n\nIf you invoke a view that was created before MySQL 5.1.2, it is treated as\nthough it was created with a SQL SECURITY DEFINER clause and with a DEFINER\nvalue that is the same as your account. However, because the actual definer is\nunknown, MySQL issues a warning. To make the warning go away, it is sufficient\nto re-create the view so that the view definition includes a DEFINER clause.\n\nThe optional ALGORITHM clause is an extension to standard SQL. It affects how\nMariaDB processes the view. ALGORITHM takes three values: MERGE, TEMPTABLE, or\nUNDEFINED. The default algorithm is UNDEFINED if no ALGORITHM clause is\npresent. See View Algorithms for more information.\n\nSome views are updatable. That is, you can use them in statements such as\nUPDATE, DELETE, or INSERT to update the contents of the underlying table. For\na view to be updatable, there must be a one-to-one relationship between the\nrows in the view and the rows in the underlying table. There are also certain\nother constructs that make a view non-updatable. See Inserting and Updating\nwith Views.\n\nWITH CHECK OPTION\n-----------------\n\nThe WITH CHECK OPTION clause can be given for an updatable view to prevent\ninserts or updates to rows except those for which the WHERE clause in the\nselect_statement is true.\n\nIn a WITH CHECK OPTION clause for an updatable view, the LOCAL and CASCADED\nkeywords determine the scope of check testing when the view is defined in\nterms of another view. The LOCAL keyword restricts the CHECK OPTION only to\nthe view being defined. CASCADED causes the checks for underlying views to be\nevaluated as well. When neither keyword is given, the default is CASCADED.\n\nFor more information about updatable views and the WITH CHECK OPTION clause,\nsee Inserting and Updating with Views.\n\nIF NOT EXISTS\n-------------\n\nMariaDB starting with 10.1.3\n----------------------------\nThe IF NOT EXISTS clause was added in MariaDB 10.1.3\n\nWhen the IF NOT EXISTS clause is used, MariaDB will return a warning instead\nof an error if the specified view already exists. Cannot be used together with\nthe OR REPLACE clause.\n\nAtomic DDL\n----------\n\nMariaDB starting with 10.6.1\n----------------------------\nMariaDB 10.6.1 supports Atomic DDL and CREATE VIEW is atomic.\n\nExamples\n--------\n\nCREATE TABLE t (a INT, b INT) ENGINE = InnoDB;\n\nINSERT INTO t VALUES (1,1), (2,2), (3,3);\n\nCREATE VIEW v AS SELECT a, a*2 AS a2 FROM t;\n\nSELECT * FROM v;\n+------+------+\n| a | a2 |\n+------+------+\n| 1 | 2 |\n| 2 | 4 |\n| 3 | 6 |\n+------+------+\n\nOR REPLACE and IF NOT EXISTS:\n\nCREATE VIEW v AS SELECT a, a*2 AS a2 FROM t;\nERROR 1050 (42S01): Table \'v\' already exists\n\nCREATE OR REPLACE VIEW v AS SELECT a, a*2 AS a2 FROM t;\nQuery OK, 0 rows affected (0.04 sec)\n\nCREATE VIEW IF NOT EXISTS v AS SELECT a, a*2 AS a2 FROM t;\nQuery OK, 0 rows affected, 1 warning (0.01 sec)\n','','https://mariadb.com/kb/en/create-view/');
+update help_topic set description = CONCAT(description, '\nSHOW WARNINGS;\n+-------+------+--------------------------+\n| Level | Code | Message |\n+-------+------+--------------------------+\n| Note | 1050 | Table \'v\' already exists |\n+-------+------+--------------------------+\n\nURL: https://mariadb.com/kb/en/create-view/') WHERE help_topic_id = 720;
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (721,38,'Generated (Virtual and Persistent/Stored) Columns','Syntax\n------\n\n<type> [GENERATED ALWAYS] AS ( <expression> )\n[VIRTUAL | PERSISTENT | STORED] [UNIQUE] [UNIQUE KEY] [COMMENT <text>]\n\nMariaDB\'s generated columns syntax is designed to be similar to the syntax for\nMicrosoft SQL Server\'s computed columns and Oracle Database\'s virtual columns.\nIn MariaDB 10.2 and later, the syntax is also compatible with the syntax for\nMySQL\'s generated columns.\n\nDescription\n-----------\n\nA generated column is a column in a table that cannot explicitly be set to a\nspecific value in a DML query. Instead, its value is automatically generated\nbased on an expression. This expression might generate the value based on the\nvalues of other columns in the table, or it might generate the value by\ncalling built-in functions or user-defined functions (UDFs).\n\nThere are two types of generated columns:\n\n* PERSISTENT (a.k.a. STORED): This type\'s value is actually stored in the\ntable.\n* VIRTUAL: This type\'s value is not stored at all. Instead, the value is\ngenerated dynamically when the table is queried. This type is the default.\n\nGenerated columns are also sometimes called computed columns or virtual\ncolumns.\n\nSupported Features\n------------------\n\nStorage Engine Support\n----------------------\n\n* Generated columns can only be used with storage engines which support them.\nIf you try to use a storage engine that does not support them, then you will\nsee an error similar to the following:\n\nERROR 1910 (HY000): TokuDB storage engine does not support computed columns\n\n* InnoDB, Aria, MyISAM and CONNECT support generated columns.\n\n* A column in a MERGE table can be built on a PERSISTENT generated column.\nHowever, a column in a MERGE table can not be defined as a VIRTUAL and\nPERSISTENT generated column.\n\nData Type Support\n-----------------\n\n* All data types are supported when defining generated columns.\n\n* Using the ZEROFILL column option is supported when defining generated\ncolumns.\n\n* Using the AUTO_INCREMENT column option is not supported when defining\ngenerated columns. Until MariaDB 10.2.25, it was supported, but this support\nwas removed, because it would not work correctly. See MDEV-11117.\n\nIndex Support\n-------------\n\n* Using a generated column as a table\'s primary key is not supported. See\nMDEV-5590 for more information. If you try to use one as a primary key, then\nyou will see an error similar to the following:\n\nERROR 1903 (HY000): Primary key cannot be defined upon a computed column\n\n* Using PERSISTENT generated columns as part of a foreign key is supported.\n\n* Referencing PERSISTENT generated columns as part of a foreign key is also\nsupported.\nHowever, using the ON UPDATE CASCADE, ON UPDATE SET NULL, or ON DELETE SET\nNULL clauses is not supported. If you try to use an unsupported clause, then\nyou will see an error similar to the following:\n\nERROR 1905 (HY000): Cannot define foreign key with ON UPDATE SET NULL clause\non a computed column\n\n* Defining indexes on both VIRTUAL and PERSISTENT generated columns is\nsupported.\nIf an index is defined on a generated column, then the optimizer considers\nusing it in the same way as indexes based on \"real\" columns.\n\nStatement Support\n-----------------\n\n* Generated columns are used in DML queries just as if they were \"real\"\ncolumns.\nHowever, VIRTUAL and PERSISTENT generated columns differ in how their data is\nstored.\nValues for PERSISTENT generated columns are generated whenever a DML queries\ninserts or updates the row with the special DEFAULT value. This generates the\ncolumns value, and it is stored in the table like the other \"real\" columns.\nThis value can be read by other DML queries just like the other \"real\" columns.\nValues for VIRTUAL generated columns are not stored in the table. Instead, the\nvalue is generated dynamically whenever the column is queried. If other\ncolumns in a row are queried, but the VIRTUAL generated column is not one of\nthe queried columns, then the column\'s value is not generated.\n\n* The SELECT statement supports generated columns.\n\n* Generated columns can be referenced in the INSERT, UPDATE, and DELETE\nstatements.\nHowever, VIRTUAL or PERSISTENT generated columns cannot be explicitly set to\nany other values than NULL or DEFAULT. If a generated column is explicitly set\nto any other value, then the outcome depends on whether strict mode is enabled\nin sql_mode. If it is not enabled, then a warning will be raised and the\ndefault generated value will be used instead. If it is enabled, then an error\nwill be raised instead.\n\n* The CREATE TABLE statement has limited support for generated columns.\nIt supports defining generated columns in a new table.\nIt supports using generated columns to partition tables.\nIt does not support using the versioning clauses with generated columns.\n\n* The ALTER TABLE statement has limited support for generated columns.\nIt supports the MODIFY and CHANGE clauses for PERSISTENT generated columns.\nIt does not support the MODIFY clause for VIRTUAL generated columns if\nALGORITHM is not set to COPY. See MDEV-15476 for more information.\nIt does not support the CHANGE clause for VIRTUAL generated columns if\nALGORITHM is not set to COPY. See MDEV-17035 for more information.\nIt does not support altering a table if ALGORITHM is not set to COPY if the\ntable has a VIRTUAL generated column that is indexed. See MDEV-14046 for more\ninformation.\nIt does not support adding a VIRTUAL generated column with the ADD clause if\nthe same statement is also adding other columns if ALGORITHM is not set to\nCOPY. See MDEV-17468 for more information.\nIt also does not support altering an existing column into a VIRTUAL generated\ncolumn.\nIt supports using generated columns to partition tables.\nIt does not support using the versioning clauses with generated columns.\n\n* The SHOW CREATE TABLE statement supports generated columns.\n\n* The DESCRIBE statement can be used to check whether a table has generated\ncolumns.\nYou can tell which columns are generated by looking for the ones where the\nExtra column is set to either VIRTUAL or PERSISTENT. For example:\n\nDESCRIBE table1;\n+-------+-------------+------+-----+---------+------------+\n| Field | Type | Null | Key | Default | Extra |\n+-------+-------------+------+-----+---------+------------+\n| a | int(11) | NO | | NULL | |\n| b | varchar(32) | YES | | NULL | |\n| c | int(11) | YES | | NULL | VIRTUAL |\n| d | varchar(5) | YES | | NULL | PERSISTENT |\n+-------+-------------+------+-----+---------+------------+\n\n* Generated columns can be properly referenced in the NEW and OLD rows in\ntriggers.\n\n* Stored procedures support generated columns.\n\n* The HANDLER statement supports generated columns.\n\nExpression Support\n------------------\n\n* Most legal, deterministic expressions which can be calculated are supported\nin expressions for generated columns.\n\n* Most built-in functions are supported in expressions for generated columns.\nHowever, some built-in functions can\'t be supported for technical reasons. For\nexample, If you try to use an unsupported function in an expression, an error\nis generated similar to the following:\n\nERROR 1901 (HY000): Function or expression \'dayname()\' cannot be used in the\nGENERATED ALWAYS AS clause of `v`\n\n* Subqueries are not supported in expressions for generated columns because\nthe underlying data can change.\n\n* Using anything that depends on data outside the row is not supported in\nexpressions for generated columns.\n\n* Stored functions are not supported in expressions for generated columns. See\nMDEV-17587 for more information.\n\n* Non-deterministic built-in functions are supported in expressions for not\nindexed VIRTUAL generated columns.\n\n* Non-deterministic built-in functions are not supported in expressions for\nPERSISTENT or indexed VIRTUAL generated columns.\n\n* User-defined functions (UDFs) are supported in expressions for generated\ncolumns.\nHowever, MariaDB can\'t check whether a UDF is deterministic, so it is up to\nthe user to be sure that they do not use non-deterministic UDFs with VIRTUAL\ngenerated columns.\n\n* Defining a generated column based on other generated columns defined before\nit in the table definition is supported. For example:\n\nCREATE TABLE t1 (a int as (1), b int as (a));\n\n* However, defining a generated column based on other generated columns\ndefined after in the table definition is not supported in expressions for\ngeneration columns because generated columns are calculated in the order they\nare defined.\n\n* Using an expression that exceeds 255 characters in length is supported in\nexpressions for generated columns. The new limit for the entire table\ndefinition, including all expressions for generated columns, is 65,535 bytes.\n\n* Using constant expressions is supported in expressions for generated\ncolumns. For example:\n\nCREATE TABLE t1 (a int as (1));\n\nMaking Stored Values Consistent\n-------------------------------\n\nWhen a generated column is PERSISTENT or indexed, the value of the expression\nneeds to be consistent regardless of the SQL Mode flags in the current\nsession. If it is not, then the table will be seen as corrupted when the value\nthat should actually be returned by the computed expression and the value that\nwas previously stored and/or indexed using a different sql_mode setting\ndisagree.\n\nThere are currently two affected classes of inconsistencies: character padding\nand unsigned subtraction:\n\n* For a VARCHAR or TEXT generated column the length of the value returned can\nvary depending on the PAD_CHAR_TO_FULL_LENGTH sql_mode flag. To make the\nvalue consistent, create the generated column using an RTRIM() or RPAD()\nfunction. Alternately, create the generated column as a CHAR column so that\nits data is always fully padded.\n\n* If a SIGNED generated column is based on the subtraction of an UNSIGNED\nvalue, the resulting value can vary depending on how large the value is and\nthe NO_UNSIGNED_SUBTRACTION sql_mode flag. To make the value consistent, use\nCAST() to ensure that each UNSIGNED operand is SIGNED before the subtraction.\n\nMariaDB starting with 10.5\n--------------------------\nBeginning in MariaDB 10.5, there is a fatal error generated when trying to\ncreate a generated column whose value can change depending on the SQL Mode\nwhen its data is PERSISTENT or indexed.\n\nFor an existing generated column that has a potentially inconsistent value, a\nwarning about a bad expression is generated the first time it is used (if\nwarnings are enabled).\n\nBeginning in MariaDB 10.4.8, MariaDB 10.3.18, and MariaDB 10.2.27 a\npotentially inconsistent generated column outputs a warning when created or\nfirst used (without restricting their creation).\n\nHere is an example of two tables that would be rejected in MariaDB 10.5 and\nwarned about in the other listed versions:\n\nCREATE TABLE bad_pad (\n txt CHAR(5),\n -- CHAR -> VARCHAR or CHAR -> TEXT can\'t be persistent or indexed:\n vtxt VARCHAR(5) AS (txt) PERSISTENT\n);\n\nCREATE TABLE bad_sub (\n num1 BIGINT UNSIGNED,\n num2 BIGINT UNSIGNED,\n -- The resulting value can vary for some large values\n vnum BIGINT AS (num1 - num2) VIRTUAL,\n KEY(vnum)\n);\n\nThe warnings for the above tables look like this:\n\nWarning (Code 1901): Function or expression \'`txt`\' cannot be used in the\nGENERATED ALWAYS AS clause of `vtxt`\nWarning (Code 1105): Expression depends on the @@sql_mode value\nPAD_CHAR_TO_FULL_LENGTH\n\nWarning (Code 1901): Function or expression \'`num1` - `num2`\' cannot be used\nin the GENERATED ALWAYS AS clause of `vnum`\nWarning (Code 1105): Expression depends on the @@sql_mode value\nNO_UNSIGNED_SUBTRACTION\n\nTo work around the issue, force the padding or type to make the generated\ncolumn\'s expression return a consistent value. For example:\n\nCREATE TABLE good_pad (\n txt CHAR(5),\n -- Using RTRIM() or RPAD() makes the value consistent:\n vtxt VARCHAR(5) AS (RTRIM(txt)) PERSISTENT,\n -- When not persistent or indexed, it is OK for the value to vary by mode:\n vtxt2 VARCHAR(5) AS (txt) VIRTUAL,\n -- CHAR -> CHAR is always OK:\n txt2 CHAR(5) AS (txt) PERSISTENT\n);\n\nCREATE TABLE good_sub (\n num1 BIGINT UNSIGNED,\n num2 BIGINT UNSIGNED,\n -- The indexed value will always be consistent in this expression:\n vnum BIGINT AS (CAST(num1 AS SIGNED) - CAST(num2 AS SIGNED)) VIRTUAL,\n KEY(vnum)\n);\n\nMySQL Compatibility Support\n---------------------------\n\n* The STORED keyword is supported as an alias for the PERSISTENT keyword.\n\n* Tables created with MySQL 5.7 or later that contain MySQL\'s generated\ncolumns can be imported into MariaDB without a dump and restore.\n\nImplementation Differences\n--------------------------\n\nGenerated columns are subject to various constraints in other DBMSs that are\nnot present in MariaDB\'s implementation. Generated columns may also be called\ncomputed columns or virtual columns in different implementations. The various\ndetails for a specific implementation can be found in the documentation for\neach specific DBMS.\n\nImplementation Differences Compared to Microsoft SQL Server\n-----------------------------------------------------------\n\nMariaDB\'s generated columns implementation does not enforce the following\nrestrictions that are present in Microsoft SQL Server\'s computed columns\nimplementation:\n\n* MariaDB allows server variables in generated column expressions, including\nthose that change dynamically, such as warning_count.\n* MariaDB allows the CONVERT_TZ() function to be called with a named time zone\nas an argument, even though time zone names and time offsets are configurable.\n* MariaDB allows the CAST() function to be used with non-unicode character\nsets, even though character sets are configurable and differ between\nbinaries/versions.\n* MariaDB allows FLOAT expressions to be used in generated columns. Microsoft\nSQL Server considers these expressions to be \"imprecise\" due to potential\ncross-platform differences in floating-point implementations and precision.\n* Microsoft SQL Server requires the ARITHABORT mode to be set, so that\ndivision by zero returns an error, and not a NULL.\n* Microsoft SQL Server requires QUOTED_IDENTIFIER to be set in sql_mode. In\nMariaDB, if data is inserted without ANSI_QUOTES set in sql_mode, then it will','','https://mariadb.com/kb/en/generated-columns/');
+update help_topic set description = CONCAT(description, '\nbe processed and stored differently in a generated column that contains quoted\nidentifiers.\n\nMicrosoft SQL Server enforces the above restrictions by doing one of the\nfollowing things:\n\n* Refusing to create computed columns.\n* Refusing to allow updates to a table containing them.\n* Refusing to use an index over such a column if it can not be guaranteed that\nthe expression is fully deterministic.\n\nIn MariaDB, as long as the sql_mode, language, and other settings that were in\neffect during the CREATE TABLE remain unchanged, the generated column\nexpression will always be evaluated the same. If any of these things change,\nthen please be aware that the generated column expression might not be\nevaluated the same way as it previously was.\n\nIf you try to update a virtual column, you will get an error if the default\nstrict mode is enabled in sql_mode, or a warning otherwise.\n\nDevelopment History\n-------------------\n\nGenerated columns was originally developed by Andrey Zhakov. It was then\nmodified by Sanja Byelkin and Igor Babaev at Monty Program for inclusion in\nMariaDB. Monty did the work on MariaDB 10.2 to lift a some of the old\nlimitations.\n\nExamples\n--------\n\nHere is an example table that uses both VIRTUAL and PERSISTENT virtual columns:\n\nUSE TEST;\n\nCREATE TABLE table1 (\n a INT NOT NULL,\n b VARCHAR(32),\n c INT AS (a mod 10) VIRTUAL,\n d VARCHAR(5) AS (left(b,5)) PERSISTENT);\n\nIf you describe the table, you can easily see which columns are virtual by\nlooking in the \"Extra\" column:\n\nDESCRIBE table1;\n+-------+-------------+------+-----+---------+------------+\n| Field | Type | Null | Key | Default | Extra |\n+-------+-------------+------+-----+---------+------------+\n| a | int(11) | NO | | NULL | |\n| b | varchar(32) | YES | | NULL | |\n| c | int(11) | YES | | NULL | VIRTUAL |\n| d | varchar(5) | YES | | NULL | PERSISTENT |\n+-------+-------------+------+-----+---------+------------+\n\nTo find out what function(s) generate the value of the virtual column you can\nuse SHOW CREATE TABLE:\n\nSHOW CREATE TABLE table1;\n\n| table1 | CREATE TABLE `table1` (\n `a` int(11) NOT NULL,\n `b` varchar(32) DEFAULT NULL,\n `c` int(11) AS (a mod 10) VIRTUAL,\n `d` varchar(5) AS (left(b,5)) PERSISTENT\n) ENGINE=MyISAM DEFAULT CHARSET=latin1 |\n\nIf you try to insert non-default values into a virtual column, you will\nreceive a warning and what you tried to insert will be ignored and the derived\nvalue inserted instead:\n\nWARNINGS;\nShow warnings enabled.\n\nINSERT INTO table1 VALUES (1, \'some text\',default,default);\nQuery OK, 1 row affected (0.00 sec)\n\nINSERT INTO table1 VALUES (2, \'more text\',5,default);\nQuery OK, 1 row affected, 1 warning (0.00 sec)\n\nWarning (Code 1645): The value specified for computed column \'c\' in table\n\'table1\' has been ignored.\n\nINSERT INTO table1 VALUES (123, \'even more text\',default,\'something\');\nQuery OK, 1 row affected, 2 warnings (0.00 sec)\n\nWarning (Code 1645): The value specified for computed column \'d\' in table\n\'table1\' has been ignored.\nWarning (Code 1265): Data truncated for column \'d\' at row 1\n\nSELECT * FROM table1;\n+-----+----------------+------+-------+\n| a | b | c | d |\n+-----+----------------+------+-------+\n| 1 | some text | 1 | some |\n| 2 | more text | 2 | more |\n| 123 | even more text | 3 | even |\n+-----+----------------+------+-------+\n3 rows in set (0.00 sec)\n\nIf the ZEROFILL clause is specified, it should be placed directly after the\ntype definition, before the AS (<expression>):\n\nCREATE TABLE table2 (a INT, b INT ZEROFILL AS (a*2) VIRTUAL);\nINSERT INTO table2 (a) VALUES (1);\n\nSELECT * FROM table2;\n+------+------------+\n| a | b |\n+------+------------+\n| 1 | 0000000002 |\n+------+------------+\n1 row in set (0.00 sec)\n\nYou can also use virtual columns to implement a \"poor man\'s partial index\".\nSee example at the end of Unique Index.\n\nURL: https://mariadb.com/kb/en/generated-columns/') WHERE help_topic_id = 721;
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (722,38,'Invisible Columns','MariaDB starting with 10.3.3\n----------------------------\nInvisible columns (sometimes also called hidden columns) first appeared in\nMariaDB 10.3.3.\n\nColumns can be given an INVISIBLE attribute in a CREATE TABLE or ALTER TABLE\nstatement. These columns will then not be listed in the results of a SELECT *\nstatement, nor do they need to be assigned a value in an INSERT statement,\nunless INSERT explicitly mentions them by name.\n\nSince SELECT * does not return the invisible columns, new tables or views\ncreated in this manner will have no trace of the invisible columns. If\nspecifically referenced in the SELECT statement, the columns will be brought\ninto the view/new table, but the INVISIBLE attribute will not.\n\nInvisible columns can be declared as NOT NULL, but then require a DEFAULT\nvalue.\n\nIt is not possible for all columns in a table to be invisible.\n\nExamples\n--------\n\nCREATE TABLE t (x INT INVISIBLE);\nERROR 1113 (42000): A table must have at least 1 column\n\nCREATE TABLE t (x INT, y INT INVISIBLE, z INT INVISIBLE NOT NULL);\nERROR 4106 (HY000): Invisible column `z` must have a default value\n\nCREATE TABLE t (x INT, y INT INVISIBLE, z INT INVISIBLE NOT NULL DEFAULT 4);\n\nINSERT INTO t VALUES (1),(2);\n\nINSERT INTO t (x,y) VALUES (3,33);\n\nSELECT * FROM t;\n+------+\n| x |\n+------+\n| 1 |\n| 2 |\n| 3 |\n+------+\n\nSELECT x,y,z FROM t;\n+------+------+---+\n| x | y | z |\n+------+------+---+\n| 1 | NULL | 4 |\n| 2 | NULL | 4 |\n| 3 | 33 | 4 |\n+------+------+---+\n\nDESC t;\n+-------+---------+------+-----+---------+-----------+\n| Field | Type | Null | Key | Default | Extra |\n+-------+---------+------+-----+---------+-----------+\n| x | int(11) | YES | | NULL | |\n| y | int(11) | YES | | NULL | INVISIBLE |\n| z | int(11) | NO | | 4 | INVISIBLE |\n+-------+---------+------+-----+---------+-----------+\n\nALTER TABLE t MODIFY x INT INVISIBLE, MODIFY y INT, MODIFY z INT NOT NULL\nDEFAULT 4;\n\nDESC t;\n+-------+---------+------+-----+---------+-----------+\n| Field | Type | Null | Key | Default | Extra |\n+-------+---------+------+-----+---------+-----------+\n| x | int(11) | YES | | NULL | INVISIBLE |\n| y | int(11) | YES | | NULL | |\n| z | int(11) | NO | | 4 | |\n+-------+---------+------+-----+---------+-----------+\n\nCreating a view from a table with hidden columns:\n\nCREATE VIEW v1 AS SELECT * FROM t;\n\nDESC v1;\n+-------+---------+------+-----+---------+-------+\n| Field | Type | Null | Key | Default | Extra |\n+-------+---------+------+-----+---------+-------+\n| y | int(11) | YES | | NULL | |\n| z | int(11) | NO | | 4 | |\n+-------+---------+------+-----+---------+-------+\n\nCREATE VIEW v2 AS SELECT x,y,z FROM t;\n\nDESC v2;\n+-------+---------+------+-----+---------+-------+\n| Field | Type | Null | Key | Default | Extra |\n+-------+---------+------+-----+---------+-------+\n| x | int(11) | YES | | NULL | |\n| y | int(11) | YES | | NULL | |\n| z | int(11) | NO | | 4 | |\n+-------+---------+------+-----+---------+-------+\n\nAdding a Surrogate Primary Key:\n\ncreate table t1 (x bigint unsigned not null, y varchar(16), z text);\n\ninsert into t1 values (123, \'qq11\', \'ipsum\');\n\ninsert into t1 values (123, \'qq22\', \'lorem\');\n\nalter table t1 add pkid serial primary key invisible first;\n\ninsert into t1 values (123, \'qq33\', \'amet\');\n\nselect * from t1;\n+-----+------+-------+\n| x | y | z |\n+-----+------+-------+\n| 123 | qq11 | ipsum |\n| 123 | qq22 | lorem |\n| 123 | qq33 | amet |\n+-----+------+-------+\n\nselect pkid, z from t1;\n+------+-------+\n| pkid | z |\n+------+-------+\n| 1 | ipsum |\n| 2 | lorem |\n| 3 | amet |\n+------+-------+\n\nURL: https://mariadb.com/kb/en/invisible-columns/','','https://mariadb.com/kb/en/invisible-columns/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (723,38,'DROP DATABASE','Syntax\n------\n\nDROP {DATABASE | SCHEMA} [IF EXISTS] db_name\n\nDescription\n-----------\n\nDROP DATABASE drops all tables in the database and deletes the database. Be\nvery careful with this statement! To use DROP DATABASE, you need the DROP\nprivilege on the database. DROP SCHEMA is a synonym for DROP DATABASE.\n\nImportant: When a database is dropped, user privileges on the database are not\nautomatically dropped. See GRANT.\n\nIF EXISTS\n---------\n\nUse IF EXISTS to prevent an error from occurring for databases that do not\nexist. A NOTE is generated for each non-existent database when using IF\nEXISTS. See SHOW WARNINGS.\n\nAtomic DDL\n----------\n\nMariaDB starting with 10.6.1\n----------------------------\nMariaDB 10.6.1 supports Atomic DDL.\n\nDROP DATABASE is implemented as\n\nloop over all tables\n DROP TABLE table\n\nEach individual DROP TABLE is atomic while DROP DATABASE as a whole is\ncrash-safe.\n\nExamples\n--------\n\nDROP DATABASE bufg;\nQuery OK, 0 rows affected (0.39 sec)\n\nDROP DATABASE bufg;\nERROR 1008 (HY000): Can\'t drop database \'bufg\'; database doesn\'t exist\n\n\\W\nShow warnings enabled.\n\nDROP DATABASE IF EXISTS bufg;\nQuery OK, 0 rows affected, 1 warning (0.00 sec)\nNote (Code 1008): Can\'t drop database \'bufg\'; database doesn\'t exist\n\nURL: https://mariadb.com/kb/en/drop-database/','','https://mariadb.com/kb/en/drop-database/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (724,38,'DROP EVENT','Syntax\n------\n\nDROP EVENT [IF EXISTS] event_name\n\nDescription\n-----------\n\nThis statement drops the event named event_name. The event immediately ceases\nbeing active, and is deleted completely from the server.\n\nIf the event does not exist, the error ERROR 1517 (HY000): Unknown event\n\'event_name\' results. You can override this and cause the statement to\ngenerate a NOTE for non-existent events instead by using IF EXISTS. See SHOW\nWARNINGS.\n\nThis statement requires the EVENT privilege. In MySQL 5.1.11 and earlier, an\nevent could be dropped only by its definer, or by a user having the SUPER\nprivilege.\n\nExamples\n--------\n\nDROP EVENT myevent3;\n\nUsing the IF EXISTS clause:\n\nDROP EVENT IF EXISTS myevent3;\nQuery OK, 0 rows affected, 1 warning (0.01 sec)\n\nSHOW WARNINGS;\n+-------+------+-------------------------------+\n| Level | Code | Message |\n+-------+------+-------------------------------+\n| Note | 1305 | Event myevent3 does not exist |\n+-------+------+-------------------------------+\n\nURL: https://mariadb.com/kb/en/drop-event/','','https://mariadb.com/kb/en/drop-event/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (725,38,'DROP FUNCTION','Syntax\n------\n\nDROP FUNCTION [IF EXISTS] f_name\n\nDescription\n-----------\n\nThe DROP FUNCTION statement is used to drop a stored function or a\nuser-defined function (UDF). That is, the specified routine is removed from\nthe server, along with all privileges specific to the function. You must have\nthe ALTER ROUTINE privilege for the routine in order to drop it. If the\nautomatic_sp_privileges server system variable is set, both the ALTER ROUTINE\nand EXECUTE privileges are granted automatically to the routine creator - see\nStored Routine Privileges.\n\nIF EXISTS\n---------\n\nThe IF EXISTS clause is a MySQL/MariaDB extension. It prevents an error from\noccurring if the function does not exist. A NOTE is produced that can be\nviewed with SHOW WARNINGS.\n\nFor dropping a user-defined functions (UDF), see DROP FUNCTION UDF.\n\nExamples\n--------\n\nDROP FUNCTION hello;\nQuery OK, 0 rows affected (0.042 sec)\n\nDROP FUNCTION hello;\nERROR 1305 (42000): FUNCTION test.hello does not exist\n\nDROP FUNCTION IF EXISTS hello;\nQuery OK, 0 rows affected, 1 warning (0.000 sec)\n\nSHOW WARNINGS;\n+-------+------+------------------------------------+\n| Level | Code | Message |\n+-------+------+------------------------------------+\n| Note | 1305 | FUNCTION test.hello does not exist |\n+-------+------+------------------------------------+\n\nURL: https://mariadb.com/kb/en/drop-function/','','https://mariadb.com/kb/en/drop-function/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (726,38,'DROP INDEX','Syntax\n------\n\nDROP INDEX [IF EXISTS] index_name ON tbl_name \n [WAIT n |NOWAIT]\n\nDescription\n-----------\n\nDROP INDEX drops the index named index_name from the table tbl_name. This\nstatement is mapped to an ALTER TABLE statement to drop the index.\n\nIf another connection is using the table, a metadata lock is active, and this\nstatement will wait until the lock is released. This is also true for\nnon-transactional tables.\n\nSee ALTER TABLE.\n\nAnother shortcut, CREATE INDEX, allows the creation of an index.\n\nTo remove the primary key, `PRIMARY` must be specified as index_name. Note\nthat the quotes are necessary, because PRIMARY is a keyword.\n\nPrivileges\n----------\n\nExecuting the DROP INDEX statement requires the INDEX privilege for the table\nor the database.\n\nOnline DDL\n----------\n\nOnline DDL is used by default with InnoDB, when the drop index operation\nsupports it.\n\nSee InnoDB Online DDL Overview for more information on online DDL with InnoDB.\n\nDROP INDEX IF EXISTS ...\n------------------------\n\nIf the IF EXISTS clause is used, then MariaDB will return a warning instead of\nan error if the index does not exist.\n\nWAIT/NOWAIT\n-----------\n\nMariaDB starting with 10.3.0\n----------------------------\nSet the lock wait timeout. See WAIT and NOWAIT.\n\nProgress Reporting\n------------------\n\nMariaDB provides progress reporting for DROP INDEX statement for clients that\nsupport the new progress reporting protocol. For example, if you were using\nthe mysql client, then the progress report might look like this::\n\nURL: https://mariadb.com/kb/en/drop-index/','','https://mariadb.com/kb/en/drop-index/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (727,38,'DROP PACKAGE','MariaDB starting with 10.3.5\n----------------------------\nOracle-style packages were introduced in MariaDB 10.3.5.\n\nSyntax\n------\n\nDROP PACKAGE [IF EXISTS] [ db_name . ] package_name\n\nDescription\n-----------\n\nThe DROP PACKAGE statement can be used when Oracle SQL_MODE is set.\n\nThe DROP PACKAGE statement drops a stored package entirely:\n\n* Drops the package specification (earlier created using the CREATE PACKAGE\nstatement).\n* Drops the package implementation, if the implementation was already created\nusing the CREATE PACKAGE BODY statement.\n\nURL: https://mariadb.com/kb/en/drop-package/','','https://mariadb.com/kb/en/drop-package/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (728,38,'DROP PACKAGE BODY','MariaDB starting with 10.3.5\n----------------------------\nOracle-style packages were introduced in MariaDB 10.3.5.\n\nSyntax\n------\n\nDROP PACKAGE BODY [IF EXISTS] [ db_name . ] package_name\n\nDescription\n-----------\n\nThe DROP PACKAGE BODY statement can be used when Oracle SQL_MODE is set.\n\nThe DROP PACKAGE BODY statement drops the package body (i.e the\nimplementation), previously created using the CREATE PACKAGE BODY statement.\n\nNote, DROP PACKAGE BODY drops only the package implementation, but does not\ndrop the package specification. Use DROP PACKAGE to drop the package entirely\n(i.e. both implementation and specification).\n\nURL: https://mariadb.com/kb/en/drop-package-body/','','https://mariadb.com/kb/en/drop-package-body/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (729,38,'DROP PROCEDURE','Syntax\n------\n\nDROP PROCEDURE [IF EXISTS] sp_name\n\nDescription\n-----------\n\nThis statement is used to drop a stored procedure. That is, the specified\nroutine is removed from the server along with all privileges specific to the\nprocedure. You must have the ALTER ROUTINE privilege for the routine. If the\nautomatic_sp_privileges server system variable is set, that privilege and\nEXECUTE are granted automatically to the routine creator - see Stored Routine\nPrivileges.\n\nThe IF EXISTS clause is a MySQL/MariaDB extension. It prevents an error from\noccurring if the procedure or function does not exist. A NOTE is produced that\ncan be viewed with SHOW WARNINGS.\n\nWhile this statement takes effect immediately, threads which are executing a\nprocedure can continue execution.\n\nExamples\n--------\n\nDROP PROCEDURE simpleproc;\n\nIF EXISTS:\n\nDROP PROCEDURE simpleproc;\nERROR 1305 (42000): PROCEDURE test.simpleproc does not exist\n\nDROP PROCEDURE IF EXISTS simpleproc;\nQuery OK, 0 rows affected, 1 warning (0.00 sec)\n\nSHOW WARNINGS;\n+-------+------+------------------------------------------+\n| Level | Code | Message |\n+-------+------+------------------------------------------+\n| Note | 1305 | PROCEDURE test.simpleproc does not exist |\n+-------+------+------------------------------------------+\n\nURL: https://mariadb.com/kb/en/drop-procedure/','','https://mariadb.com/kb/en/drop-procedure/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (730,38,'DROP SERVER','Syntax\n------\n\nDROP SERVER [ IF EXISTS ] server_name\n\nDescription\n-----------\n\nDrops the server definition for the server named server_name. The\ncorresponding row within the mysql.servers table will be deleted. This\nstatement requires the SUPER privilege or, from MariaDB 10.5.2, the FEDERATED\nADMIN privilege.\n\nDropping a server for a table does not affect any FederatedX, FEDERATED,\nConnect or Spider tables that used this connection information when they were\ncreated.\n\nDROP SERVER is not written to the binary log, irrespective of the binary log\nformat being used. From MariaDB 10.1.13, Galera replicates the CREATE SERVER,\nALTER SERVER and DROP SERVER statements.\n\nIF EXISTS\n---------\n\nIf the IF EXISTS clause is used, MariaDB will not return an error if the\nserver does not exist. Unlike all other statements, DROP SERVER IF EXISTS does\nnot issue a note if the server does not exist. See MDEV-9400.\n\nExamples\n--------\n\nDROP SERVER s;\n\nIF EXISTS:\n\nDROP SERVER s;\nERROR 1477 (HY000): The foreign server name you are trying to reference \n does not exist. Data source error: s\n\nDROP SERVER IF EXISTS s;\nQuery OK, 0 rows affected (0.00 sec)\n\nURL: https://mariadb.com/kb/en/drop-server/','','https://mariadb.com/kb/en/drop-server/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (731,38,'DROP TABLESPACE','The DROP TABLESPACE statement is not supported by MariaDB. It was originally\ninherited from MySQL NDB Cluster. In MySQL 5.7 and later, the statement is\nalso supported for InnoDB. However, MariaDB has chosen not to include that\nspecific feature. See MDEV-19294 for more information.\n\nURL: https://mariadb.com/kb/en/drop-tablespace/','','https://mariadb.com/kb/en/drop-tablespace/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (732,38,'DROP TRIGGER','Syntax\n------\n\nDROP TRIGGER [IF EXISTS] [schema_name.]trigger_name\n\nDescription\n-----------\n\nThis statement drops a trigger. The schema (database) name is optional. If the\nschema is omitted, the trigger is dropped from the default schema. Its use\nrequires the TRIGGER privilege for the table associated with the trigger.\n\nUse IF EXISTS to prevent an error from occurring for a trigger that does not\nexist. A NOTE is generated for a non-existent trigger when using IF EXISTS.\nSee SHOW WARNINGS.\n\nNote: Triggers for a table are also dropped if you drop the table.\n\nAtomic DDL\n----------\n\nMariaDB starting with 10.6.1\n----------------------------\nMariaDB 10.6.1 supports Atomic DDL and DROP TRIGGER is atomic.\n\nExamples\n--------\n\nDROP TRIGGER test.example_trigger;\n\nUsing the IF EXISTS clause:\n\nDROP TRIGGER IF EXISTS test.example_trigger;\nQuery OK, 0 rows affected, 1 warning (0.01 sec)\n\nSHOW WARNINGS;\n+-------+------+------------------------+\n| Level | Code | Message |\n+-------+------+------------------------+\n| Note | 1360 | Trigger does not exist |\n+-------+------+------------------------+\n\nURL: https://mariadb.com/kb/en/drop-trigger/','','https://mariadb.com/kb/en/drop-trigger/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (733,38,'DROP VIEW','Syntax\n------\n\nDROP VIEW [IF EXISTS]\n view_name [, view_name] ...\n [RESTRICT | CASCADE]\n\nDescription\n-----------\n\nDROP VIEW removes one or more views. You must have the DROP privilege for each\nview. If any of the views named in the argument list do not exist, MariaDB\nreturns an error indicating by name which non-existing views it was unable to\ndrop, but it also drops all of the views in the list that do exist.\n\nThe IF EXISTS clause prevents an error from occurring for views that don\'t\nexist. When this clause is given, a NOTE is generated for each non-existent\nview. See SHOW WARNINGS.\n\nRESTRICT and CASCADE, if given, are parsed and ignored.\n\nIt is possible to specify view names as db_name.view_name. This is useful to\ndelete views from multiple databases with one statement. See Identifier\nQualifiers for details.\n\nThe DROP privilege is required to use DROP TABLE on non-temporary tables. For\ntemporary tables, no privilege is required, because such tables are only\nvisible for the current session.\n\nIf a view references another view, it will be possible to drop the referenced\nview. However, the other view will reference a view which does not exist any\nmore. Thus, querying it will produce an error similar to the following:\n\nERROR 1356 (HY000): View \'db_name.view_name\' references invalid table(s) or \ncolumn(s) or function(s) or definer/invoker of view lack rights to use them\n\nThis problem is reported in the output of CHECK TABLE.\n\nNote that it is not necessary to use DROP VIEW to replace an existing view,\nbecause CREATE VIEW has an OR REPLACE clause.\n\nAtomic DDL\n----------\n\nMariaDB starting with 10.6.1\n----------------------------\nMariaDB 10.6.1 supports Atomic DDL and DROP VIEW for a singular view is\natomic. Dropping multiple views is crash-safe.\n\nExamples\n--------\n\nDROP VIEW v,v2;\n\nGiven views v and v2, but no view v3\n\nDROP VIEW v,v2,v3;\nERROR 1051 (42S02): Unknown table \'v3\'\n\nDROP VIEW IF EXISTS v,v2,v3;\nQuery OK, 0 rows affected, 1 warning (0.01 sec)\n\nSHOW WARNINGS;\n+-------+------+-------------------------+\n| Level | Code | Message |\n+-------+------+-------------------------+\n| Note | 1051 | Unknown table \'test.v3\' |\n+-------+------+-------------------------+\n\nURL: https://mariadb.com/kb/en/drop-view/','','https://mariadb.com/kb/en/drop-view/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (734,38,'CONSTRAINT','MariaDB supports the implementation of constraints at the table-level using\neither CREATE TABLE or ALTER TABLE statements. A table constraint restricts\nthe data you can add to the table. If you attempt to insert invalid data on a\ncolumn, MariaDB throws an error.\n\nSyntax\n------\n\n[CONSTRAINT [symbol]] constraint_expression\n\nconstraint_expression:\n | PRIMARY KEY [index_type] (index_col_name, ...) [index_option] ...\n | FOREIGN KEY [index_name] (index_col_name, ...)\n REFERENCES tbl_name (index_col_name, ...)\n [ON DELETE reference_option]\n [ON UPDATE reference_option]\n | UNIQUE [INDEX|KEY] [index_name]\n [index_type] (index_col_name, ...) [index_option] ...\n | CHECK (check_constraints)\n\nindex_type:\n USING {BTREE | HASH | RTREE}\n\nindex_col_name:\n col_name [(length)] [ASC | DESC]\n\nindex_option:\n | KEY_BLOCK_SIZE [=] value\n | index_type\n | WITH PARSER parser_name\n | COMMENT \'string\'\n | CLUSTERING={YES|NO}\n\nreference_option:\n RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT\n\nDescription\n-----------\n\nConstraints provide restrictions on the data you can add to a table. This\nallows you to enforce data integrity from MariaDB, rather than through\napplication logic. When a statement violates a constraint, MariaDB throws an\nerror.\n\nThere are four types of table constraints:\n\n+------------------------------------+---------------------------------------+\n| Constraint | Description |\n+------------------------------------+---------------------------------------+\n| PRIMARY KEY | Sets the column for referencing |\n| | rows. Values must be unique and not |\n| | null. |\n+------------------------------------+---------------------------------------+\n| FOREIGN KEY | Sets the column to reference the |\n| | primary key on another table. |\n+------------------------------------+---------------------------------------+\n| UNIQUE | Requires values in column or columns |\n| | only occur once in the table. |\n+------------------------------------+---------------------------------------+\n| CHECK | Checks whether the data meets the |\n| | given condition. |\n+------------------------------------+---------------------------------------+\n\nThe Information Schema TABLE_CONSTRAINTS Table contains information about\ntables that have constraints.\n\nFOREIGN KEY Constraints\n-----------------------\n\nInnoDB supports foreign key constraints. The syntax for a foreign key\nconstraint definition in InnoDB looks like this:\n\n[CONSTRAINT [symbol]] FOREIGN KEY\n [index_name] (index_col_name, ...)\n REFERENCES tbl_name (index_col_name,...)\n [ON DELETE reference_option]\n [ON UPDATE reference_option]\n\nreference_option:\n RESTRICT | CASCADE | SET NULL | NO ACTION\n\nThe Information Schema REFERENTIAL_CONSTRAINTS table has more information\nabout foreign keys.\n\nCHECK Constraints\n-----------------\n\nMariaDB starting with 10.2.1\n----------------------------\nFrom MariaDB 10.2.1, constraints are enforced. Before MariaDB 10.2.1\nconstraint expressions were accepted in the syntax but ignored.\n\nIn MariaDB 10.2.1 you can define constraints in 2 different ways:\n\n* CHECK(expression) given as part of a column definition.\n* CONSTRAINT [constraint_name] CHECK (expression)\n\nBefore a row is inserted or updated, all constraints are evaluated in the\norder they are defined. If any constraint expression returns false, then the\nrow will not be inserted or updated. One can use most deterministic functions\nin a constraint, including UDFs.\n\nCREATE TABLE t1 (a INT CHECK (a>2), b INT CHECK (b>2), CONSTRAINT a_greater\nCHECK (a>b));\n\nIf you use the second format and you don\'t give a name to the constraint, then\nthe constraint will get an automatically generated name. This is done so that\nyou can later delete the constraint with ALTER TABLE DROP constraint_name.\n\nOne can disable all constraint expression checks by setting the\ncheck_constraint_checks variable to OFF. This is useful for example when\nloading a table that violates some constraints that you want to later find and\nfix in SQL.\n\nReplication\n-----------\n\nIn row-based replication, only the master checks constraints, and failed\nstatements will not be replicated. In statement-based replication, the slaves\nwill also check constraints. Constraints should therefore be identical, as\nwell as deterministic, in a replication environment.\n\nAuto_increment\n--------------\n\nMariaDB starting with 10.2.6\n----------------------------\n* From MariaDB 10.2.6, auto_increment columns are no longer permitted in check\nconstraints. Previously they were permitted, but would not work correctly. See\nMDEV-11117.\n\nExamples\n--------\n\nCREATE TABLE product (category INT NOT NULL, id INT NOT NULL,\n price DECIMAL,\n PRIMARY KEY(category, id)) ENGINE=INNODB;\nCREATE TABLE customer (id INT NOT NULL,\n PRIMARY KEY (id)) ENGINE=INNODB;\nCREATE TABLE product_order (no INT NOT NULL AUTO_INCREMENT,\n product_category INT NOT NULL,\n product_id INT NOT NULL,\n customer_id INT NOT NULL,\n PRIMARY KEY(no),\n INDEX (product_category, product_id),\n FOREIGN KEY (product_category, product_id)\n REFERENCES product(category, id)\n ON UPDATE CASCADE ON DELETE RESTRICT,\n INDEX (customer_id),\n FOREIGN KEY (customer_id)\n REFERENCES customer(id)) ENGINE=INNODB;\n\nMariaDB starting with 10.2.1\n----------------------------\nThe following examples will work from MariaDB 10.2.1 onwards.\n\nNumeric constraints and comparisons:\n\nCREATE TABLE t1 (a INT CHECK (a>2), b INT CHECK (b>2), CONSTRAINT a_greater\nCHECK (a>b));\n\nINSERT INTO t1(a) VALUES (1);\nERROR 4022 (23000): CONSTRAINT `a` failed for `test`.`t1`\n\nINSERT INTO t1(a,b) VALUES (3,4);\nERROR 4022 (23000): CONSTRAINT `a_greater` failed for `test`.`t1`\n\nINSERT INTO t1(a,b) VALUES (4,3);\nQuery OK, 1 row affected (0.04 sec)\n\nDropping a constraint:\n\nALTER TABLE t1 DROP CONSTRAINT a_greater;\n\nAdding a constraint:\n\nALTER TABLE t1 ADD CONSTRAINT a_greater CHECK (a>b);\n\nDate comparisons and character length:\n\nCREATE TABLE t2 (name VARCHAR(30) CHECK (CHAR_LENGTH(name)>2), start_date\nDATE, \n end_date DATE CHECK (start_date IS NULL OR end_date IS NULL OR\nstart_date<end_date));\n\nINSERT INTO t2(name, start_date, end_date) VALUES(\'Ione\', \'2003-12-15\',\n\'2014-11-09\');\nQuery OK, 1 row affected (0.04 sec)\n\nINSERT INTO t2(name, start_date, end_date) VALUES(\'Io\', \'2003-12-15\',\n\'2014-11-09\');\nERROR 4022 (23000): CONSTRAINT `name` failed for `test`.`t2`\n\nINSERT INTO t2(name, start_date, end_date) VALUES(\'Ione\', NULL, \'2014-11-09\');\nQuery OK, 1 row affected (0.04 sec)\n\nINSERT INTO t2(name, start_date, end_date) VALUES(\'Ione\', \'2015-12-15\',\n\'2014-11-09\');\nERROR 4022 (23000): CONSTRAINT `end_date` failed for `test`.`t2`\n\nA misplaced parenthesis:\n\nCREATE TABLE t3 (name VARCHAR(30) CHECK (CHAR_LENGTH(name>2)), start_date\nDATE, \n end_date DATE CHECK (start_date IS NULL OR end_date IS NULL OR\nstart_date<end_date));\nQuery OK, 0 rows affected (0.32 sec)\n\nINSERT INTO t3(name, start_date, end_date) VALUES(\'Io\', \'2003-12-15\',\n\'2014-11-09\');\nQuery OK, 1 row affected, 1 warning (0.04 sec)\n\nSHOW WARNINGS;\n+---------+------+----------------------------------------+\n| Level | Code | Message |\n+---------+------+----------------------------------------+\n| Warning | 1292 | Truncated incorrect DOUBLE value: \'Io\' |\n+---------+------+----------------------------------------+\n\nCompare the definition of table t2 to table t3. CHAR_LENGTH(name)>2 is very\ndifferent to CHAR_LENGTH(name>2) as the latter mistakenly performs a numeric\ncomparison on the name field, leading to unexpected results.\n\nURL: https://mariadb.com/kb/en/constraint/','','https://mariadb.com/kb/en/constraint/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (735,38,'Dynamic Columns','Dynamic columns allow one to store different sets of columns for each row in a\ntable. It works by storing a set of columns in a blob and having a small set\nof functions to manipulate it. Dynamic columns should be used when it is not\npossible to use regular columns. A typical use case is when one needs to store\nitems that may have many different attributes (like size, color, weight, etc),\nand the set of possible attributes is very large and/or unknown in advance. In\nthat case, attributes can be put into dynamic columns.\n\nDynamic Columns Basics\n----------------------\n\nThe table should have a blob column which will be used as storage for dynamic\ncolumns:\n\ncreate table assets (\n item_name varchar(32) primary key, -- A common attribute for all items\n dynamic_cols blob -- Dynamic columns will be stored here\n);\n\nOnce created, one can access dynamic columns via dynamic column functions:\n\nInsert a row with two dynamic columns: color=blue, size=XL\n\nINSERT INTO assets VALUES \n (\'MariaDB T-shirt\', COLUMN_CREATE(\'color\', \'blue\', \'size\', \'XL\'));\n\nInsert another row with dynamic columns: color=black, price=500\n\nINSERT INTO assets VALUES\n (\'Thinkpad Laptop\', COLUMN_CREATE(\'color\', \'black\', \'price\', 500));\n\nSelect dynamic column \'color\' for all items:\n\nSELECT item_name, COLUMN_GET(dynamic_cols, \'color\' as char) \n AS color FROM assets;\n+-----------------+-------+\n| item_name | color |\n+-----------------+-------+\n| MariaDB T-shirt | blue |\n| Thinkpad Laptop | black |\n+-----------------+-------+\n\nIt is possible to add and remove dynamic columns from a row:\n\n-- Remove a column:\nUPDATE assets SET dynamic_cols=COLUMN_DELETE(dynamic_cols, \"price\") \nWHERE COLUMN_GET(dynamic_cols, \'color\' as char)=\'black\';\n\n-- Add a column:\nUPDATE assets SET dynamic_cols=COLUMN_ADD(dynamic_cols, \'warranty\', \'3 years\')\nWHERE item_name=\'Thinkpad Laptop\';\n\nYou can also list all columns, or get them together with their values in JSON\nformat:\n\nSELECT item_name, column_list(dynamic_cols) FROM assets;\n+-----------------+---------------------------+\n| item_name | column_list(dynamic_cols) |\n+-----------------+---------------------------+\n| MariaDB T-shirt | `size`,`color` |\n| Thinkpad Laptop | `color`,`warranty` |\n+-----------------+---------------------------+\n\nSELECT item_name, COLUMN_JSON(dynamic_cols) FROM assets;\n+-----------------+----------------------------------------+\n| item_name | COLUMN_JSON(dynamic_cols) |\n+-----------------+----------------------------------------+\n| MariaDB T-shirt | {\"size\":\"XL\",\"color\":\"blue\"} |\n| Thinkpad Laptop | {\"color\":\"black\",\"warranty\":\"3 years\"} |\n+-----------------+----------------------------------------+\n\nDynamic Columns Reference\n-------------------------\n\nThe rest of this page is a complete reference of dynamic columns in MariaDB\n\nDynamic Columns Functions\n-------------------------\n\nCOLUMN_CREATE\n-------------\n\nCOLUMN_CREATE(column_nr, value [as type], [column_nr, value \n [as type]]...);\nCOLUMN_CREATE(column_name, value [as type], [column_name, value \n [as type]]...);\n\nReturn a dynamic columns blob that stores the specified columns with values.\n\nThe return value is suitable for\n\n* \nstoring in a table\nfurther modification with other dynamic columns functions\n\nThe as type part allows one to specify the value type. In most cases, this is\nredundant because MariaDB will be able to deduce the type of the value.\nExplicit type specification may be needed when the type of the value is not\napparent. For example, a literal \'2012-12-01\' has a CHAR type by default, one\nwill need to specify \'2012-12-01\' AS DATE to have it stored as a date. See the\nDatatypes section for further details. Note also MDEV-597.\n\nTypical usage:\n\n-- MariaDB 5.3+:\nINSERT INTO tbl SET dyncol_blob=COLUMN_CREATE(1 /*column id*/, \"value\");\n-- MariaDB 10.0.1+:\nINSERT INTO tbl SET dyncol_blob=COLUMN_CREATE(\"column_name\", \"value\");\n\nCOLUMN_ADD\n----------\n\nCOLUMN_ADD(dyncol_blob, column_nr, value [as type], \n [column_nr, value [as type]]...);\nCOLUMN_ADD(dyncol_blob, column_name, value [as type], \n [column_name, value [as type]]...);\n\nAdds or updates dynamic columns.\n\n* \ndyncol_blob must be either a valid dynamic columns blob (for example,\nCOLUMN_CREATE returns such blob), or an empty string.\ncolumn_name specifies the name of the column to be added. If dyncol_blob\nalready has a column with this name, it will be overwritten.\nvalue specifies the new value for the column. Passing a NULL value will cause\nthe column to be deleted.\nas type is optional. See #datatypes section for a discussion about types.\n\nThe return value is a dynamic column blob after the modifications.\n\nTypical usage:\n\n-- MariaDB 5.3+:\nUPDATE tbl SET dyncol_blob=COLUMN_ADD(dyncol_blob, 1 /*column id*/, \"value\") \n WHERE id=1;\n-- MariaDB 10.0.1+:\nUPDATE t1 SET dyncol_blob=COLUMN_ADD(dyncol_blob, \"column_name\", \"value\") \n WHERE id=1;\n\nNote: COLUMN_ADD() is a regular function (just like CONCAT()), hence, in order\nto update the value in the table you have to use the UPDATE ... SET\ndynamic_col=COLUMN_ADD(dynamic_col, ....) pattern.\n\nCOLUMN_GET\n----------\n\nCOLUMN_GET(dyncol_blob, column_nr as type);\nCOLUMN_GET(dyncol_blob, column_name as type);\n\nGet the value of a dynamic column by its name. If no column with the given\nname exists, NULL will be returned.\n\ncolumn_name as type requires that one specify the datatype of the dynamic\ncolumn they are reading.\n\nThis may seem counter-intuitive: why would one need to specify which datatype\nthey\'re retrieving? Can\'t the dynamic columns system figure the datatype from\nthe data being stored?\n\nThe answer is: SQL is a statically-typed language. The SQL interpreter needs\nto know the datatypes of all expressions before the query is run (for example,\nwhen one is using prepared statements and runs \"select COLUMN_GET(...)\", the\nprepared statement API requires the server to inform the client about the\ndatatype of the column being read before the query is executed and the server\ncan see what datatype the column actually has).\n\nSee the Datatypes section for more information about datatypes.\n\nCOLUMN_DELETE\n-------------\n\nCOLUMN_DELETE(dyncol_blob, column_nr, column_nr...);\nCOLUMN_DELETE(dyncol_blob, column_name, column_name...);\n\nDelete a dynamic column with the specified name. Multiple names can be given.\n\nThe return value is a dynamic column blob after the modification.\n\nCOLUMN_EXISTS\n-------------\n\nCOLUMN_EXISTS(dyncol_blob, column_nr);\nCOLUMN_EXISTS(dyncol_blob, column_name);\n\nCheck if a column with name column_name exists in dyncol_blob. If yes, return\n1, otherwise return 0.\n\nCOLUMN_LIST\n-----------\n\nCOLUMN_LIST(dyncol_blob);\n\nReturn a comma-separated list of column names. The names are quoted with\nbackticks.\n\nSELECT column_list(column_create(\'col1\',\'val1\',\'col2\',\'val2\'));\n+---------------------------------------------------------+\n| column_list(column_create(\'col1\',\'val1\',\'col2\',\'val2\')) |\n+---------------------------------------------------------+\n| `col1`,`col2` |\n+---------------------------------------------------------+\n\nCOLUMN_CHECK\n------------\n\nCOLUMN_CHECK(dyncol_blob);\n\nCheck if dyncol_blob is a valid packed dynamic columns blob. Return value of 1\nmeans the blob is valid, return value of 0 means it is not.\n\nRationale: Normally, one works with valid dynamic column blobs. Functions like\nCOLUMN_CREATE, COLUMN_ADD, COLUMN_DELETE always return valid dynamic column\nblobs. However, if a dynamic column blob is accidentally truncated, or\ntranscoded from one character set to another, it will be corrupted. This\nfunction can be used to check if a value in a blob field is a valid dynamic\ncolumn blob.\n\nNote: It is possible that a truncation cut a Dynamic Column \"clearly\" so that\nCOLUMN_CHECK will not notice the corruption, but in any case of truncation a\nwarning is issued during value storing.\n\nCOLUMN_JSON\n-----------\n\nCOLUMN_JSON(dyncol_blob);\n\nReturn a JSON representation of data in dyncol_blob.\n\nExample:\n\nSELECT item_name, COLUMN_JSON(dynamic_cols) FROM assets;\n+-----------------+----------------------------------------+\n| item_name | COLUMN_JSON(dynamic_cols) |\n+-----------------+----------------------------------------+\n| MariaDB T-shirt | {\"size\":\"XL\",\"color\":\"blue\"} |\n| Thinkpad Laptop | {\"color\":\"black\",\"warranty\":\"3 years\"} |\n+-----------------+----------------------------------------+\n\nLimitation: COLUMN_JSON will decode nested dynamic columns at a nesting level\nof not more than 10 levels deep. Dynamic columns that are nested deeper than\n10 levels will be shown as BINARY string, without encoding.\n\nNesting Dynamic Columns\n-----------------------\n\nIt is possible to use nested dynamic columns by putting one dynamic column\nblob inside another. The COLUMN_JSON function will display nested columns.\n\nSET @tmp= column_create(\'parent_column\', \n column_create(\'child_column\', 12345));\nQuery OK, 0 rows affected (0.00 sec)\n\nSELECT column_json(@tmp);\n+------------------------------------------+\n| column_json(@tmp) |\n+------------------------------------------+\n| {\"parent_column\":{\"child_column\":12345}} |\n+------------------------------------------+\n\nSELECT column_get(column_get(@tmp, \'parent_column\' AS char), \n \'child_column\' AS int);\n+------------------------------------------------------------------------------\n\n| column_get(column_get(@tmp, \'parent_column\' as char), \'child_column\' as int)\n|\n+------------------------------------------------------------------------------\n\n| 12345\n|\n+------------------------------------------------------------------------------\n\nIf you are trying to get a nested dynamic column as a string use \'as BINARY\'\nas the last argument of COLUMN_GET (otherwise problems with character set\nconversion and illegal symbols are possible):\n\nselect column_json( column_get(\n column_create(\'test1\',\n column_create(\'key1\',\'value1\',\'key2\',\'value2\',\'key3\',\'value3\')),\n \'test1\' as BINARY));\n\nDatatypes\n---------\n\nIn SQL, one needs to define the type of each column in a table. Dynamic\ncolumns do not provide any way to declare a type in advance (\"whenever there\nis a column \'weight\', it should be integer\" is not possible). However, each\nparticular dynamic column value is stored together with its datatype.\n\nThe set of possible datatypes is mostly the same as that used by the SQL CAST\nand CONVERT functions. However, note that there are currently some differences\n- see MDEV-597.\n\n+--------+----------------------------------------------+-------------------+\n| type | dynamic column internal type | description |\n+--------+----------------------------------------------+-------------------+\n| BINARY | DYN_COL_STRING | (variable length |\n| (N)] | | string with |\n| | | binary charset) |\n+--------+----------------------------------------------+-------------------+\n| CHAR[( | DYN_COL_STRING | (variable length |\n| )] | | string with |\n| | | charset) |\n+--------+----------------------------------------------+-------------------+\n| DATE | DYN_COL_DATE | (date - 3 bytes) |\n+--------+----------------------------------------------+-------------------+\n| DATETI | DYN_COL_DATETIME | (date and time |\n| E[(D)] | | (with |\n| | | microseconds) - |\n| | | 9 bytes) |\n+--------+----------------------------------------------+-------------------+\n| DECIMA | DYN_COL_DECIMAL | (variable length |\n| [(M[,D | | binary decimal |\n| )] | | representation |\n| | | with MariaDB |\n| | | limitation) |\n+--------+----------------------------------------------+-------------------+\n| DOUBLE | DYN_COL_DOUBLE | (64 bit |\n| (M,D)] | | double-precision |\n| | | floating point) |\n+--------+----------------------------------------------+-------------------+\n| INTEGE | DYN_COL_INT | (variable |\n| | | length, up to 64 |\n| | | bit signed |\n| | | integer) |\n+--------+----------------------------------------------+-------------------+\n| SIGNED | DYN_COL_INT | (variable |\n| [INTEG | | length, up to 64 |\n| R] | | bit signed |\n| | | integer) |\n+--------+----------------------------------------------+-------------------+\n| TIME[( | DYN_COL_TIME | (time (with |\n| )] | | microseconds, |\n| | | may be negative) |\n| | | - 6 bytes) |\n+--------+----------------------------------------------+-------------------+\n| UNSIGN | DYN_COL_UINT | (variable |\n| D | | length, up to |','','https://mariadb.com/kb/en/dynamic-columns/');
+update help_topic set description = CONCAT(description, '\n| [INTEG | | 64bit unsigned |\n| R] | | integer) |\n+--------+----------------------------------------------+-------------------+\n\nA Note About Lengths\n--------------------\n\nIf you\'re running queries like\n\nSELECT COLUMN_GET(blob, \'colname\' as CHAR) ...\n\nwithout specifying a maximum length (i.e. using #as CHAR#, not as CHAR(n)),\nMariaDB will report the maximum length of the resultset column to be\n53,6870,911 (bytes or characters?) for MariaDB 5.3-10.0.0 and 16,777,216 for\nMariaDB 10.0.1+. This may cause excessive memory usage in some client\nlibraries, because they try to pre-allocate a buffer of maximum resultset\nwidth. If you suspect you\'re hitting this problem, use CHAR(n) whenever you\'re\nusing COLUMN_GET in the select list.\n\nMariaDB 5.3 vs MariaDB 10.0\n---------------------------\n\nThe dynamic columns feature was introduced into MariaDB in two steps:\n\n* MariaDB 5.3 was the first version to support dynamic columns. Only numbers\n could be used as column names in this version.\n* In MariaDB 10.0.1, column names can be either numbers or strings.\n Also, the COLUMN_JSON and COLUMN_CHECK functions were added.\n\nSee also Dynamic Columns in MariaDB 10.\n\nClient-side API\n---------------\n\nIt is also possible to create or parse dynamic columns blobs on the client\nside. libmysql client library now includes an API for writing/reading dynamic\ncolumn blobs. See dynamic-columns-api for details.\n\nLimitations\n-----------\n\n+---------------------------------------------------+------------------------+\n| Description | Limit |\n+---------------------------------------------------+------------------------+\n| Max number of columns | 65535 |\n+---------------------------------------------------+------------------------+\n| Max total length of packed dynamic column | max_allowed_packet |\n| | (1G) |\n+---------------------------------------------------+------------------------+\n\nURL: https://mariadb.com/kb/en/dynamic-columns/') WHERE help_topic_id = 735;
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (736,38,'Dynamic Columns from MariaDB 10','MariaDB starting with 10.0.1\n----------------------------\nMariaDB 10.0.1 introduced the following improvements to the dynamic columns\nfeature.\n\nColumn Name Support\n-------------------\n\nIt is possible to refer to column by names. Names can be used everywhere where\nin MariaDB 5.3 one could use only strings:\n\n* Create a dynamic column blob:\n\nCOLUMN_CREATE(\'int_col\', 123 as int, \'double_col\', 3.14 as double,\n\'string_col\', \'text-data\' as char);\n\n* Set a column value:\n\nCOLUMN_ADD(dyncol_blob, \'intcol\', 1234);\n\n* Get a column value:\n\nCOLUMN_GET(dynstr, \'column1\' as char(10));\n\n* Check whether a column exists\n\nCOLUMN_EXISTS(dyncol_blob, \'column_name\');\n\nChanges in Behavior\n-------------------\n\n* Column list output now includes quoting:\n\nselect column_list(column_create(1, 22, 2, 23));\n+------------------------------------------+\n| column_list(column_create(1, 22, 2, 23)) |\n+------------------------------------------+\n| `1`,`2` |\n+------------------------------------------+\nselect column_list(column_create(\'column1\', 22, \'column2\', 23)); \n+----------------------------------------------------------+\n| column_list(column_create(\'column1\', 22, \'column2\', 23)) |\n+----------------------------------------------------------+\n| `column1`,`column2` |\n+----------------------------------------------------------+\n\n* Column name interpretation has been changed so that the string now is not\nconverted to a number. So some \"magic\" tricks will not work any more, for\nexample, \"1test\" and \"1\" now become different column names:\n\nselect column_list(column_add(column_create(\'1a\', 22), \'1b\', 23));\n+------------------------------------------------------------+\n| column_list(column_add(column_create(\'1a\', 22), \'1b\', 23)) |\n+------------------------------------------------------------+\n| `1a`,`1b` |\n+------------------------------------------------------------+\n\n* Old behavior:\n\nselect column_list(column_add(column_create(\'1a\', 22), \'1b\', 23));\n+------------------------------------------------------------+\n| column_list(column_add(column_create(\'1a\', 22), \'1b\', 23)) |\n+------------------------------------------------------------+\n| 1 |\n+------------------------------------------------------------+\n\nNew Functions\n-------------\n\nThe following new functions have been added to dynamic columns in MariaDB 10\n\nCOLUMN_CHECK\n------------\n\nCOLUMN_CHECK is used to check a column\'s integrity. When it encounters an\nerror it does not return illegal format errors but returns false instead. It\nalso checks integrity more thoroughly and finds errors in the dynamic column\ninternal structures which might not be found by other functions.\n\nselect column_check(column_create(\'column1\', 22));\n+--------------------------------------------+\n| column_check(column_create(\'column1\', 22)) |\n+--------------------------------------------+\n| 1 |\n+--------------------------------------------+\nselect column_check(\'abracadabra\');\n+-----------------------------+\n| column_check(\'abracadabra\') |\n+-----------------------------+\n| 0 |\n+-----------------------------+\n\nCOLUMN_JSON\n-----------\n\nCOLUMN_JSON converts all dynamic column record content to a JSON object.\n\nselect column_json(column_create(\'column1\', 1, \'column2\', \"two\"));\n+------------------------------------------------------------+\n| column_json(column_create(\'column1\', 1, \'column2\', \"two\")) |\n+------------------------------------------------------------+\n| {\"column1\":1,\"column2\":\"two\"} |\n+------------------------------------------------------------+\n\nOther Changes\n-------------\n\n* All API functions has prefix mariadb_dyncol_ (old prefix dynamic_column_ is\ndepricated\n* API changed to be able to work with the new format (*_named functions).\n* Removed \'delete\' function because deleting could be done by adding NULL\nvalue.\n* \'Time\' and \'datetime\' in the new format are stored without microseconds if\nthey are 0.\n* New function added to API (except that two which are representing SQL level\nfunctions):\n\'Unpack\' the dynamic columns content to an arrays of values and names.\n3 functions to get any column value as string, integer (long long) or floating\npoint (double).\n\n* New type of \"dynamic column\" row added on the API level (in SQL level output\nit is a string but if you use dynamic column functions to construct object it\nwill be added as dynamic column value) which allow to add dynamic columns\ninside dynamic columns. JSON function represent such recursive constructions\ncorrectly but limit depth of representation as current implementation limit\n(internally depth of dynamic columns embedding is not limited).\n\nInterface with Cassandra\n------------------------\n\nCassandraSE is no longer actively being developed and has been removed in\nMariaDB 10.6. See MDEV-23024.\n\nSome internal changes were added to dynamic columns to allow them to serve as\nan interface to Apache Cassandra dynamic columns. The Cassandra engine may\npack all columns which were not mentioned in the MariaDB interface table\ndefinition and even bring changes in the dynamic column contents back to the\ncassandra columns family (the table analog in cassandra).\n\nURL: https://mariadb.com/kb/en/dynamic-columns-from-mariadb-10/','','https://mariadb.com/kb/en/dynamic-columns-from-mariadb-10/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (737,38,'MERGE','Description\n-----------\n\nThe MERGE storage engine, also known as the MRG_MyISAM engine, is a collection\nof identical MyISAM tables that can be used as one. \"Identical\" means that all\ntables have identical column and index information. You cannot merge MyISAM\ntables in which the columns are listed in a different order, do not have\nexactly the same columns, or have the indexes in different order. However, any\nor all of the MyISAM tables can be compressed with myisampack. Columns names\nand indexes names can be different, as long as data types and NULL/NOT NULL\nclauses are the same. Differences in table options such as AVG_ROW_LENGTH,\nMAX_ROWS, or PACK_KEYS do not matter.\n\nEach index in a MERGE table must match an index in underlying MyISAM tables,\nbut the opposite is not true. Also, a MERGE table cannot have a PRIMARY KEY or\nUNIQUE indexes, because it cannot enforce uniqueness over all underlying\ntables.\n\nThe following options are meaningful for MERGE tables:\n\n* UNION. This option specifies the list of the underlying MyISAM tables. The\nlist is enclosed between parentheses and separated with commas.\n* INSERT_METHOD. This options specifies whether, and how, INSERTs are allowed\nfor the table. Allowed values are: NO (INSERTs are not allowed), FIRST (new\nrows will be written into the first table specified in the UNION list), LAST\n(new rows will be written into the last table specified in the UNION list).\nThe default value is NO.\n\nIf you define a MERGE table with a definition which is different from the\nunderlying MyISAM tables, or one of the underlying tables is not MyISAM, the\nCREATE TABLE statement will not return any error. But any statement which\ninvolves the table will produce an error like the following:\n\nERROR 1168 (HY000): Unable to open underlying table which is differently\ndefined \n or of non-MyISAM type or doesn\'t exist\n\nA CHECK TABLE will show more information about the problem.\n\nThe error is also produced if the table is properly define, but an underlying\ntable\'s definition changes at some point in time.\n\nIf you try to insert a new row into a MERGE table with INSERT_METHOD=NO, you\nwill get an error like the following:\n\nERROR 1036 (HY000): Table \'tbl_name\' is read only\n\nIt is possible to build a MERGE table on MyISAM tables which have one or more\nvirtual columns. MERGE itself does not support virtual columns, thus such\ncolumns will be seen as regular columns. The data types and sizes will still\nneed to be identical, and they cannot be NOT NULL.\n\nExamples\n--------\n\nCREATE TABLE t1 (\n a INT NOT NULL AUTO_INCREMENT PRIMARY KEY,\n message CHAR(20)) ENGINE=MyISAM;\n\nCREATE TABLE t2 (\n a INT NOT NULL AUTO_INCREMENT PRIMARY KEY,\n message CHAR(20)) ENGINE=MyISAM;\n\nINSERT INTO t1 (message) VALUES (\'Testing\'),(\'table\'),(\'t1\');\n\nINSERT INTO t2 (message) VALUES (\'Testing\'),(\'table\'),(\'t2\');\n\nCREATE TABLE total (\n a INT NOT NULL AUTO_INCREMENT,\n message CHAR(20), INDEX(a))\n ENGINE=MERGE UNION=(t1,t2) INSERT_METHOD=LAST;\n\nSELECT * FROM total;\n+---+---------+\n| a | message |\n+---+---------+\n| 1 | Testing |\n| 2 | table |\n| 3 | t1 |\n| 1 | Testing |\n| 2 | table |\n| 3 | t2 |\n+---+---------+\n\nIn the following example, we\'ll create three MyISAM tables, and then a MERGE\ntable on them. However, one of them uses a different data type for the column\nb, so a SELECT will produce an error:\n\nCREATE TABLE t1 (\n a INT,\n b INT\n) ENGINE = MyISAM;\n\nCREATE TABLE t2 (\n a INT,\n b INT\n) ENGINE = MyISAM;\n\nCREATE TABLE t3 (\n a INT,\n b TINYINT\n) ENGINE = MyISAM;\n\nCREATE TABLE t_mrg (\n a INT,\n b INT\n) ENGINE = MERGE,UNION=(t1,t2,t3);\n\nSELECT * FROM t_mrg;\nERROR 1168 (HY000): Unable to open underlying table which is differently\ndefined\n or of non-MyISAM type or doesn\'t exist\n\nTo find out what\'s wrong, we\'ll use a CHECK TABLE:\n\nCHECK TABLE t_mrg\\G\n*************************** 1. row ***************************\n Table: test.t_mrg\n Op: check\nMsg_type: Error\nMsg_text: Table \'test.t3\' is differently defined or of non-MyISAM type or\ndoesn\'t exist\n*************************** 2. row ***************************\n Table: test.t_mrg\n Op: check\nMsg_type: Error\nMsg_text: Unable to open underlying table which is differently defined or of\nnon-MyISAM type or doesn\'t exist\n*************************** 3. row ***************************\n Table: test.t_mrg\n Op: check\nMsg_type: error\nMsg_text: Corrupt\n\nNow, we know that the problem is in t3\'s definition.\n\nURL: https://mariadb.com/kb/en/merge/','','https://mariadb.com/kb/en/merge/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (738,39,'Sequence Overview','MariaDB starting with 10.3\n--------------------------\nSequences were introduced in MariaDB 10.3.\n\nIntroduction\n------------\n\nA sequence is an object that generates a sequence of numeric values, as\nspecified by the CREATE SEQUENCE statement.\n\nCREATE SEQUENCE will create a sequence that generates new values when called\nwith NEXT VALUE FOR sequence_name. It\'s an alternative to AUTO INCREMENT when\none wants to have more control of how the numbers are generated. As the\nSEQUENCE caches values (up to the CACHE value in the CREATE SEQUENCE\nstatement, by default 1000) it can in some cases be much faster than AUTO\nINCREMENT. Another benefit is that one can access the last value generated by\nall used sequences, which solves one of the limitations with LAST_INSERT_ID().\n\nCreating a Sequence\n-------------------\n\nThe CREATE SEQUENCE statement is used to create a sequence. Here is an example\nof a sequence starting at 100, incrementing by 10 each time:\n\nCREATE SEQUENCE s START WITH 100 INCREMENT BY 10;\n\nThe CREATE SEQUENCE statement, along with defaults, can be viewd with the SHOW\nCREATE SEQUENCE STATEMENT, for example:\n\nSHOW CREATE SEQUENCE s\\G\n*************************** 1. row ***************************\n Table: s\nCreate Table: CREATE SEQUENCE `s` start with 100 minvalue 1 maxvalue\n9223372036854775806 \n increment by 10 cache 1000 nocycle ENGINE=InnoDB\n\nUsing Sequence Objects\n----------------------\n\nTo get the next value from a sequence, use\n\nNEXT VALUE FOR sequence_name\n\nor\n\nNEXTVAL(sequence_name)\n\nor in Oracle mode (SQL_MODE=ORACLE)\n\nsequence_name.nextval\n\nFor retrieving the last value used by the current connection from a sequence\nuse:\n\nPREVIOUS VALUE FOR sequence_name\n\nor\n\nLASTVAL(sequence_name)\n\nor in Oracle mode (SQL_MODE=ORACLE)\n\nsequence_name.currval\n\nFor example:\n\nSELECT NEXTVAL(s);\n+------------+\n| NEXTVAL(s) |\n+------------+\n| 100 |\n+------------+\n\nSELECT NEXTVAL(s);\n+------------+\n| NEXTVAL(s) |\n+------------+\n| 110 |\n+------------+\n\nSELECT LASTVAL(s);\n+------------+\n| LASTVAL(s) |\n+------------+\n| 110 |\n+------------+\n\nUsing Sequences in DEFAULT\n--------------------------\n\nMariaDB starting with 10.3.3\n----------------------------\nStarting from 10.3.3 you can use Sequences in DEFAULT:\n\ncreate sequence s1;\ncreate table t1 (a int primary key default (next value for s1), b int);\ninsert into t1 (b) values (1),(2);\nselect * from t1;\n+---+------+\n| a | b |\n+---+------+\n| 1 | 1 |\n| 2 | 2 |\n+---+------+\n\nChanging a Sequence\n-------------------\n\nThe ALTER SEQUENCE statement is used for changing sequences. For example, to\nrestart the sequence at another value:\n\nALTER SEQUENCE s RESTART 50;\n\nSELECT NEXTVAL(s);\n+------------+\n| NEXTVAL(s) |\n+------------+\n| 50 |\n+------------+\n\nThe SETVAL function can also be used to set the next value to be returned for\na SEQUENCE, for example:\n\nSELECT SETVAL(s, 100);\n+----------------+\n| SETVAL(s, 100) |\n+----------------+\n| 100 |\n+----------------+\n\nSETVAL can only be used to increase the sequence value. Attempting to set a\nlower value will fail, returning NULL:\n\nSELECT SETVAL(s, 50);\n+---------------+\n| SETVAL(s, 50) |\n+---------------+\n| NULL |\n+---------------+\n\nDropping a Sequence\n-------------------\n\nThe DROP SEQUENCE statement is used to drop a sequence, for example:\n\nDROP SEQUENCE s;\n\nReplication\n-----------\n\nIf one wants to use Sequences in a master-master setup or with Galera one\nshould use INCREMENT=0. This will tell the Sequence to use\nauto_increment_increment and auto_increment_offset to generate unique values\nfor each server.\n\nStandards Compliance\n--------------------\n\nMariaDB 10.3 supports both ANSI SQL and Oracle syntax for sequences.\n\nHowever as SEQUENCE is implemented as a special kind of table, it uses the\nsame namespace as tables. The benefits are that sequences show up in SHOW\nTABLES, and one can also create a sequence with CREATE TABLE and drop it with\nDROP TABLE. One can SELECT from it as from any other table. This ensures that\nall old tools that work with tables should work with sequences.\n\nSince sequence objects act as regular tables in many contexts, they will be\naffected by LOCK TABLES. This is not the case in other DBMS, such as Oracle,\nwhere LOCK TABLE does not affect sequences.\n\nNotes\n-----\n\nOne of the goals with the Sequence implementation is that all old tools, such\nas mysqldump, should work unchanged, while still keeping the normal usage of\nsequence standard compatibly.\n\nTo make this possible, sequence is currently implemented as a table with a few\nexclusive properties.\n\nThe special properties for sequence tables are:\n\n* A sequence table has always one row.\n* When one creates a sequence, either with CREATE TABLE or CREATE SEQUENCE,\none row will be inserted.\n* If one tries to insert into a sequence table, the single row will be\nupdated. This allows mysqldump to work but also gives the additional benefit\nthat one can change all properties of a sequence with a single insert. New\napplications should of course also use ALTER SEQUENCE.\n* UPDATE or DELETE can\'t be performed on Sequence objects.\n* Doing a select on the sequence shows the current state of the sequence,\nexcept the values that are reserved in the cache. The next_value column shows\nthe next value not reserved by the cache.\n* FLUSH TABLES will close the sequence and the next sequence number generated\nwill be according to what\'s stored in the Sequence object. In effect, this\nwill discard the cached values.\n* A number of normal table operations work on Sequence tables. See next\nsection.\n\nTable Operations that Work with Sequences\n-----------------------------------------\n\n* SHOW CREATE TABLE sequence_name. This shows the table structure that is\nbehind the SEQUENCE including the field names that can be used with SELECT or\neven CREATE TABLE.\n* CREATE TABLE sequence-structure ... SEQUENCE=1\n* ALTER TABLE sequence RENAME TO sequence2\n* RENAME TABLE sequence_name TO new_sequence_name\n* DROP TABLE sequence_name. This is allowed mainly to get old tools like\nmysqldump to work with sequence tables.\n* SHOW TABLES\n\nImplementation\n--------------\n\nInternally, sequence tables are created as a normal table without rollback\n(the InnoDB, Aria and MySAM engines support this), wrapped by a sequence\nengine object. This allowed us to create sequences with almost no performance\nimpact for normal tables. (The cost is one \'if\' per insert if the binary log\nis enabled).\n\nUnderlying Table Structure\n--------------------------\n\nThe following example shows the table structure of sequences and how it can be\nused as a table. (Output of results are slightly edited to make them easier to\nread)\n\ncreate sequence t1;\nshow create sequence t1\\G\n*************************** 1. row ***************************\n CREATE SEQUENCE `t1` start with 1 minvalue 1 maxvalue 9223372036854775806\n increment by 1 cache 1000 nocycle ENGINE=InnoDB\n\nshow create table t1\\G\n*************************** 1. row ***************************\nCreate Table: CREATE TABLE `t1` (\n `next_not_cached_value` bigint(21) NOT NULL,\n `minimum_value` bigint(21) NOT NULL,\n `maximum_value` bigint(21) NOT NULL,\n `start_value` bigint(21) NOT NULL COMMENT \'start value when sequences is\ncreated or value if RESTART is used\',\n `increment` bigint(21) NOT NULL COMMENT \'increment value\',\n `cache_size` bigint(21) unsigned NOT NULL,\n `cycle_option` tinyint(1) unsigned NOT NULL COMMENT \'0 if no cycles are\nallowed, 1 if the sequence should begin a new cycle when maximum_value is\npassed\',\n `cycle_count` bigint(21) NOT NULL COMMENT \'How many cycles have been done\'\n) ENGINE=InnoDB SEQUENCE=1\n\nselect * from t1\\G\nnext_not_cached_value: 1\n minimum_value: 1\n maximum_value: 9223372036854775806\n start_value: 1\n increment: 1\n cache_size: 1000\n cycle_option: 0\n cycle_count: 0\n\nThe cycle_count column is incremented every time the sequence wraps around.\n\nCredits\n-------\n\n* Thanks to Jianwe Zhao from Aliyun for his work on SEQUENCE in AliSQL, which\ngave ideas and inspiration for this work.\n* Thanks to Peter Gulutzan,who helped test and gave useful comments about the\nimplementation.\n\nURL: https://mariadb.com/kb/en/sequence-overview/','','https://mariadb.com/kb/en/sequence-overview/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (739,39,'CREATE SEQUENCE','MariaDB starting with 10.3\n--------------------------\nCREATE SEQUENCE was introduced in MariaDB 10.3.\n\nSyntax\n------\n\nCREATE [OR REPLACE] [TEMPORARY] SEQUENCE [IF NOT EXISTS] sequence_name\n[ INCREMENT [ BY | = ] increment ]\n[ MINVALUE [=] minvalue | NO MINVALUE | NOMINVALUE ]\n[ MAXVALUE [=] maxvalue | NO MAXVALUE | NOMAXVALUE ]\n[ START [ WITH | = ] start ] \n[ CACHE [=] cache | NOCACHE ] [ CYCLE | NOCYCLE] \n[table_options]\nThe options for CREATE SEQUENCE can be given in any order, optionally followed\nby table_options.\n\ntable_options can be any of the normal table options in CREATE TABLE but the\nmost usable ones are ENGINE=... and COMMENT=.\n\nNOMAXVALUE and NOMINVALUE are there to allow one to create SEQUENCEs using the\nOracle syntax.\n\nDescription\n-----------\n\nCREATE SEQUENCE will create a sequence that generates new values when called\nwith NEXT VALUE FOR sequence_name. It\'s an alternative to AUTO INCREMENT when\none wants to have more control of how the numbers are generated. As the\nSEQUENCE caches values (up to CACHE) it can in some cases be much faster than\nAUTO INCREMENT. Another benefit is that one can access the last value\ngenerated by all used sequences, which solves one of the limitations with\nLAST_INSERT_ID().\n\nCREATE SEQUENCE requires the CREATE privilege.\n\nDROP SEQUENCE can be used to drop a sequence, and ALTER SEQUENCE to change it.\n\nArguments to Create\n-------------------\n\nThe following options may be used:\n\n+---------------+------------------------------+----------------------------+\n| Option | Default value | Description |\n+---------------+------------------------------+----------------------------+\n| INCREMENT | 1 | Increment to use for |\n| | | values. May be negative. |\n| | | Setting an increment of 0 |\n| | | causes the sequence to |\n| | | use the value of the |\n| | | auto_increment_increment |\n| | | system variable at the |\n| | | time of creation, which |\n| | | is always a positive |\n| | | number. (see MDEV-16035). |\n+---------------+------------------------------+----------------------------+\n| MINVALUE | 1 if INCREMENT > 0 and | Minimum value for the |\n| | -9223372036854775807 if | sequence |\n| | INCREMENT < 0 | |\n+---------------+------------------------------+----------------------------+\n| MAXVALUE | 9223372036854775806 if | Max value for sequence |\n| | INCREMENT > 0 and -1 if | |\n| | INCREMENT < 0 | |\n+---------------+------------------------------+----------------------------+\n| START | MINVALUE if INCREMENT > 0 | First value that the |\n| | and MAX_VALUE if INCREMENT< | sequence will generate |\n| | 0 | |\n+---------------+------------------------------+----------------------------+\n| CACHE | 1000 | Number of values that |\n| | | should be cached. 0 if no |\n| | | CACHE. The underlying |\n| | | table will be updated |\n| | | first time a new sequence |\n| | | number is generated and |\n| | | each time the cache runs |\n| | | out. |\n+---------------+------------------------------+----------------------------+\n\nIf CYCLE is used then the sequence should start again from MINVALUE after it\nhas run out of values. Default value is NOCYCLE.\n\nConstraints on Create Arguments\n-------------------------------\n\nTo be able to create a legal sequence, the following must hold:\n\n* MAXVALUE >= start\n* MAXVALUE > MINVALUE\n* START >= MINVALUE\n* MAXVALUE <= 9223372036854775806 (LONGLONG_MAX-1)\n* MINVALUE >= -9223372036854775807 (LONGLONG_MIN+1)\n\nNote that sequences can\'t generate the maximum/minimum 64 bit number because\nof the constraint of MINVALUE and MAXVALUE.\n\nAtomic DDL\n----------\n\nMariaDB starting with 10.6.1\n----------------------------\nMariaDB 10.6.1 supports Atomic DDL and CREATE SEQUENCE is atomic.\n\nExamples\n--------\n\nCREATE SEQUENCE s START WITH 100 INCREMENT BY 10;\n\nCREATE SEQUENCE s2 START WITH -100 INCREMENT BY -10;\n\nThe following statement fails, as the increment conflicts with the defaults\n\nCREATE SEQUENCE s3 START WITH -100 INCREMENT BY 10;\nERROR 4082 (HY000): Sequence \'test.s3\' values are conflicting\n\nThe sequence can be created by specifying workable minimum and maximum values:\n\nCREATE SEQUENCE s3 START WITH -100 INCREMENT BY 10 MINVALUE=-100 MAXVALUE=1000;\n\nURL: https://mariadb.com/kb/en/create-sequence/','','https://mariadb.com/kb/en/create-sequence/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (740,39,'ALTER SEQUENCE','MariaDB starting with 10.3.1\n----------------------------\nALTER SEQUENCE was introduced in MariaDB 10.3.\n\nSyntax\n------\n\nALTER SEQUENCE [IF EXISTS] sequence_name\n[ INCREMENT [ BY | = ] increment ]\n[ MINVALUE [=] minvalue | NO MINVALUE | NOMINVALUE ]\n[ MAXVALUE [=] maxvalue | NO MAXVALUE | NOMAXVALUE ]\n[ START [ WITH | = ] start ] [ CACHE [=] cache ] [ [ NO ] CYCLE ]\n[ RESTART [[WITH | =] restart]\n\nALTER SEQUENCE allows one to change any values for a SEQUENCE created with\nCREATE SEQUENCE.\n\nThe options for ALTER SEQUENCE can be given in any order.\n\nDescription\n-----------\n\nALTER SEQUENCE changes the parameters of an existing sequence generator. Any\nparameters not specifically set in the ALTER SEQUENCE command retain their\nprior settings.\n\nALTER SEQUENCE requires the ALTER privilege.\n\nArguments to ALTER SEQUENCE\n---------------------------\n\nThe following options may be used:\n\n+---------------+-------------------------------+---------------------------+\n| Option | Default value | Description |\n+---------------+-------------------------------+---------------------------+\n| INCREMENT | 1 | Increment to use for |\n| | | values. May be negative. |\n+---------------+-------------------------------+---------------------------+\n| MINVALUE | 1 if INCREMENT > 0 and | Minimum value for the |\n| | -9223372036854775807 if | sequence. |\n| | INCREMENT < 0 | |\n+---------------+-------------------------------+---------------------------+\n| MAXVALUE | 9223372036854775806 if | Max value for sequence. |\n| | INCREMENT > 0 and -1 if | |\n| | INCREMENT < 0 | |\n+---------------+-------------------------------+---------------------------+\n| START | MINVALUE if INCREMENT > 0 | First value that the |\n| | and MAX_VALUE if INCREMENT< 0 | sequence will generate. |\n+---------------+-------------------------------+---------------------------+\n| CACHE | 1000 | Number of values that |\n| | | should be cached. 0 if |\n| | | no CACHE. The |\n| | | underlying table will be |\n| | | updated first time a new |\n| | | sequence number is |\n| | | generated and each time |\n| | | the cache runs out. |\n+---------------+-------------------------------+---------------------------+\n| CYCLE | 0 (= NO CYCLE) | 1 if the sequence should |\n| | | start again from |\n| | | MINVALUE# after it has |\n| | | run out of values. |\n+---------------+-------------------------------+---------------------------+\n| RESTART | START if restart value not | If RESTART option is |\n| | is given | used, NEXT VALUE will |\n| | | return the restart value. |\n+---------------+-------------------------------+---------------------------+\n\nThe optional clause RESTART [ WITH restart ] sets the next value for the\nsequence. This is equivalent to calling the SETVAL() function with the is_used\nargument as 0. The specified value will be returned by the next call of\nnextval. Using RESTART with no restart value is equivalent to supplying the\nstart value that was recorded by CREATE SEQUENCE or last set by ALTER SEQUENCE\nSTART WITH.\n\nALTER SEQUENCE will not allow you to change the sequence so that it\'s\ninconsistent. For example:\n\nCREATE SEQUENCE s1;\nALTER SEQUENCE s1 MINVALUE 10;\nERROR 4061 (HY000): Sequence \'test.t1\' values are conflicting\n\nALTER SEQUENCE s1 MINVALUE 10 RESTART 10;\nERROR 4061 (HY000): Sequence \'test.t1\' values are conflicting\n\nALTER SEQUENCE s1 MINVALUE 10 START 10 RESTART 10;\n\nINSERT\n------\n\nTo allow SEQUENCE objects to be backed up by old tools, like mysqldump, one\ncan use SELECT to read the current state of a SEQUENCE object and use an\nINSERT to update the SEQUENCE object. INSERT is only allowed if all fields are\nspecified:\n\nCREATE SEQUENCE s1;\nINSERT INTO s1 VALUES(1000,10,2000,1005,1,1000,0,0);\nSELECT * FROM s1;\n\n+------------+-----------+-----------+-------+-----------+-------+-------+-----\n-+\n| next_value | min_value | max_value | start | increment | cache | cycle |\nround |\n+------------+-----------+-----------+-------+-----------+-------+-------+-----\n-+\n| 1000 | 10 | 2000 | 1005 | 1 | 1000 | 0 | \n0 |\n+------------+-----------+-----------+-------+-----------+-------+-------+-----\n-+\n\nSHOW CREATE SEQUENCE s1;\n+-------+----------------------------------------------------------------------\n---------------------------------------+\n| Table | Create Table \n |\n+-------+----------------------------------------------------------------------\n---------------------------------------+\n| s1 | CREATE SEQUENCE `s1` start with 1005 minvalue 10 maxvalue 2000\nincrement by 1 cache 1000 nocycle ENGINE=Aria |\n+-------+----------------------------------------------------------------------\n---------------------------------------+\n\nNotes\n-----\n\nALTER SEQUENCE will instantly affect all future SEQUENCE operations. This is\nin contrast to some other databases where the changes requested by ALTER\nSEQUENCE will not be seen until the sequence cache has run out.\n\nALTER SEQUENCE will take a full table lock of the sequence object during its\n(brief) operation. This ensures that ALTER SEQUENCE is replicated correctly.\nIf you only want to set the next sequence value to a higher value than\ncurrent, then you should use SETVAL() instead, as this is not blocking.\n\nIf you want to change storage engine, sequence comment or rename the sequence,\nyou can use ALTER TABLE for this.\n\nURL: https://mariadb.com/kb/en/alter-sequence/','','https://mariadb.com/kb/en/alter-sequence/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (741,39,'DROP SEQUENCE','MariaDB starting with 10.3\n--------------------------\nDROP SEQUENCE was introduced in MariaDB 10.3.\n\nSyntax\n------\n\nDROP [TEMPORARY] SEQUENCE [IF EXISTS] [/*COMMENT TO SAVE*/]\n sequence_name [, sequence_name] ...\n\nDescription\n-----------\n\nDROP SEQUENCE removes one or more sequences created with CREATE SEQUENCE. You\nmust have the DROP privilege for each sequence. MariaDB returns an error\nindicating by name which non-existing tables it was unable to drop, but it\nalso drops all of the tables in the list that do exist.\n\nImportant: When a table is dropped, user privileges on the table are not\nautomatically dropped. See GRANT.\n\nIf another connection is using the sequence, a metadata lock is active, and\nthis statement will wait until the lock is released. This is also true for\nnon-transactional tables.\n\nFor each referenced sequence, DROP SEQUENCE drops a temporary sequence with\nthat name, if it exists. If it does not exist, and the TEMPORARY keyword is\nnot used, it drops a non-temporary sequence with the same name, if it exists.\nThe TEMPORARY keyword ensures that a non-temporary sequence will not\naccidentally be dropped.\n\nUse IF EXISTS to prevent an error from occurring for sequences that do not\nexist. A NOTE is generated for each non-existent sequence when using IF\nEXISTS. See SHOW WARNINGS.\n\nDROP SEQUENCE requires the DROP privilege.\n\nNotes\n-----\n\nDROP SEQUENCE only removes sequences, not tables. However, DROP TABLE can\nremove both sequences and tables.\n\nURL: https://mariadb.com/kb/en/drop-sequence/','','https://mariadb.com/kb/en/drop-sequence/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (742,39,'NEXT VALUE for sequence_name','MariaDB starting with 10.3\n--------------------------\nSEQUENCEs were introduced in MariaDB 10.3\n\nSyntax\n------\n\nNEXT VALUE FOR sequence\n\nor\n\nNEXTVAL(sequence_name)\n\nor in Oracle mode (SQL_MODE=ORACLE)\n\nsequence_name.nextval\n\nNEXT VALUE FOR is ANSI SQL syntax while NEXTVAL() is PostgreSQL syntax.\n\nDescription\n-----------\n\nGenerate next value for a SEQUENCE.\n\n* You can greatly speed up NEXT VALUE by creating the sequence with the CACHE\noption. If not, every NEXT VALUE usage will cause changes in the stored\nSEQUENCE table.\n* When using NEXT VALUE the value will be reserved at once and will not be\nreused, except if the SEQUENCE was created with CYCLE. This means that when\nyou are using SEQUENCEs you have to expect gaps in the generated sequence\nnumbers.\n* If one updates the SEQUENCE with SETVAL() or ALTER SEQUENCE ... RESTART,\nNEXT VALUE FOR will notice this and start from the next requested value.\n* FLUSH TABLES will close the sequence and the next sequence number generated\nwill be according to what\'s stored in the SEQUENCE object. In effect, this\nwill discard the cached values.\n* A server restart (or closing the current connection) also causes a drop of\nall cached values. The cached sequence numbers are reserved only for the\ncurrent connection.\n* NEXT VALUE requires the INSERT privilege.\n\nMariaDB starting with 10.3.3\n----------------------------\n* You can also use NEXT VALUE FOR sequence for column DEFAULT.\n\nURL: https://mariadb.com/kb/en/next-value-for-sequence_name/','','https://mariadb.com/kb/en/next-value-for-sequence_name/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (743,39,'PREVIOUS VALUE FOR sequence_name','MariaDB starting with 10.3\n--------------------------\nSEQUENCEs were introduced in MariaDB 10.3.\n\nSyntax\n------\n\nPREVIOUS VALUE FOR sequence_name\n\nor\n\nLASTVAL(sequence_name)\n\nor in Oracle mode (SQL_MODE=ORACLE)\n\nsequence_name.currval\n\nPREVIOUS VALUE FOR is IBM DB2 syntax while LASTVAL() is PostgreSQL syntax.\n\nDescription\n-----------\n\nGet last value in the current connection generated from a sequence.\n\n* If the sequence has not yet been used by the connection, PREVIOUS VALUE FOR\nreturns NULL (the same thing applies with a new connection which doesn\'t see a\nlast value for an existing sequence).\n* If a SEQUENCE has been dropped and re-created then it\'s treated as a new\nSEQUENCE and PREVIOUS VALUE FOR will return NULL.\n* FLUSH TABLES has no effect on PREVIOUS VALUE FOR.\n* Previous values for all used sequences are stored per connection until\nconnection ends.\n* PREVIOUS VALUE FOR requires the SELECT privilege.\n\nExample\n-------\n\nCREATE SEQUENCE s START WITH 100 INCREMENT BY 10;\n\nSELECT PREVIOUS VALUE FOR s;\n+----------------------+\n| PREVIOUS VALUE FOR s |\n+----------------------+\n| NULL |\n+----------------------+\n\n# The function works for sequences only, if the table is used an error is\ngenerated\nSELECT PREVIOUS VALUE FOR t;\nERROR 4089 (42S02): \'test.t\' is not a SEQUENCE\n\n# Call the NEXT VALUE FOR s:\nSELECT NEXT VALUE FOR s;\n+------------------+\n| NEXT VALUE FOR s |\n+------------------+\n| 100 |\n+------------------+\n\nSELECT PREVIOUS VALUE FOR s;\n+----------------------+\n| PREVIOUS VALUE FOR s |\n+----------------------+\n| 100 |\n+----------------------+\n\nNow try to start the new connection and check that the last value is still\nNULL, before updating the value in the new connection after the output of the\nnew connection gets current value (110 in the example below). Note that first\nconnection cannot see this change and the result of last value still remains\nthe same (100 in the example above).\n\n$ .mysql -uroot test -e\"SELECT PREVIOUS VALUE FOR s; SELECT NEXT VALUE FOR s;\nSELECT PREVIOUS VALUE FOR s;\"\n+----------------------+\n| PREVIOUS VALUE FOR s |\n+----------------------+\n| NULL |\n+----------------------+\n+------------------+\n| NEXT VALUE FOR s |\n+------------------+\n| 110 |\n+------------------+\n+----------------------+\n| PREVIOUS VALUE FOR s |\n+----------------------+\n| 110 |\n+----------------------+\n\nURL: https://mariadb.com/kb/en/previous-value-for-sequence_name/','','https://mariadb.com/kb/en/previous-value-for-sequence_name/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (744,39,'SETVAL','MariaDB starting with 10.3.1\n----------------------------\nSEQUENCEs were introduced in MariaDB 10.3.\n\nSyntax\n------\n\nSETVAL(sequence_name, next_value, [is_used, [round]])\n\nDescription\n-----------\n\nSet the next value to be returned for a SEQUENCE.\n\nThis function is compatible with PostgreSQL syntax, extended with the round\nargument.\n\nIf the is_used argument is not given or is 1 or true, then the next used value\nwill one after the given value. If is_used is 0 or false then the next\ngenerated value will be the given value.\n\nIf round is used then it will set the round value (or the internal cycle\ncount, starting at zero) for the sequence. If round is not used, it\'s assumed\nto be 0.\n\nnext_value must be an integer literal.\n\nFor SEQUENCE tables defined with CYCLE (see CREATE SEQUENCE) one should use\nboth next_value and round to define the next value. In this case the current\nsequence value is defined to be round, next_value.\n\nThe result returned by SETVAL() is next_value or NULL if the given next_value\nand round is smaller than the current value.\n\nSETVAL() will not set the SEQUENCE value to a something that is less than its\ncurrent value. This is needed to ensure that SETVAL() is replication safe. If\nyou want to set the SEQUENCE to a smaller number use ALTER SEQUENCE.\n\nIf CYCLE is used, first round and then next_value are compared to see if the\nvalue is bigger than the current value.\n\nInternally, in the MariaDB server, SETVAL() is used to inform slaves that a\nSEQUENCE has changed value. The slave may get SETVAL() statements out of\norder, but this is ok as only the biggest one will have an effect.\n\nSETVAL requires the INSERT privilege.\n\nExamples\n--------\n\nSELECT setval(foo, 42); -- Next nextval will return 43\nSELECT setval(foo, 42, true); -- Same as above\nSELECT setval(foo, 42, false); -- Next nextval will return 42\n\nSETVAL setting higher and lower values on a sequence with an increment of 10:\n\nSELECT NEXTVAL(s);\n+------------+\n| NEXTVAL(s) |\n+------------+\n| 50 |\n+------------+\n\nSELECT SETVAL(s, 100);\n+----------------+\n| SETVAL(s, 100) |\n+----------------+\n| 100 |\n+----------------+\n\nSELECT NEXTVAL(s);\n+------------+\n| NEXTVAL(s) |\n+------------+\n| 110 |\n+------------+\n\nSELECT SETVAL(s, 50);\n+---------------+\n| SETVAL(s, 50) |\n+---------------+\n| NULL |\n+---------------+\n\nSELECT NEXTVAL(s);\n+------------+\n| NEXTVAL(s) |\n+------------+\n| 120 |\n+------------+\n\nExample demonstrating round:\n\nCREATE OR REPLACE SEQUENCE s1\n START WITH 1\n MINVALUE 1\n MAXVALUE 99\n INCREMENT BY 1\n CACHE 20\n CYCLE;\n\nSELECT SETVAL(s1, 99, 1, 0);\n+----------------------+\n| SETVAL(s1, 99, 1, 0) |\n+----------------------+\n| 99 |\n+----------------------+\n\nSELECT NEXTVAL(s1);\n+-------------+\n| NEXTVAL(s1) |\n+-------------+\n| 1 |\n+-------------+\n\nThe following statement returns NULL, as the given next_value and round is\nsmaller than the current value.\n\nSELECT SETVAL(s1, 99, 1, 0);\n+----------------------+\n| SETVAL(s1, 99, 1, 0) |\n+----------------------+\n| NULL |\n+----------------------+\n\nSELECT NEXTVAL(s1);\n+-------------+\n| NEXTVAL(s1) |\n+-------------+\n| 2 |\n+-------------+\n\nIncreasing the round from zero to 1 will allow next_value to be returned.\n\nSELECT SETVAL(s1, 99, 1, 1);\n+----------------------+\n| SETVAL(s1, 99, 1, 1) |\n+----------------------+\n| 99 |\n+----------------------+\n\nSELECT NEXTVAL(s1);\n+-------------+\n| NEXTVAL(s1) |\n+-------------+\n| 1 |\n+-------------+\n\nURL: https://mariadb.com/kb/en/setval/','','https://mariadb.com/kb/en/setval/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (745,40,'JSON_ARRAYAGG','MariaDB starting with 10.5.0\n----------------------------\nJSON_ARRAYAGG was added in MariaDB 10.5.0.\n\nSyntax\n------\n\nJSON_ARRAYAGG(column_or_expression)\n\nDescription\n-----------\n\nJSON_ARRAYAGG returns a JSON array containing an element for each value in a\ngiven set of JSON or SQL values. It acts on a column or an expression that\nevaluates to a single value.\n\nReturns NULL in the case of an error, or if the result contains no rows.\n\nJSON_ARRAYAGG cannot currently be used as a window function.\n\nThe full syntax is as follows:\n\nJSON_ARRAYAGG([DISTINCT] expr [,expr ...]\n [ORDER BY {unsigned_integer | col_name | expr}\n [ASC | DESC] [,col_name ...]]\n [LIMIT {[offset,] row_count | row_count OFFSET offset}])\n\nExamples\n--------\n\nCREATE TABLE t1 (a INT, b INT);\n\nINSERT INTO t1 VALUES (1, 1),(2, 1), (1, 1),(2, 1), (3, 2),(2, 2),(2, 2),(2,\n2);\n\nSELECT JSON_ARRAYAGG(a), JSON_ARRAYAGG(b) FROM t1;\n+-------------------+-------------------+\n| JSON_ARRAYAGG(a) | JSON_ARRAYAGG(b) |\n+-------------------+-------------------+\n| [1,2,1,2,3,2,2,2] | [1,1,1,1,2,2,2,2] |\n+-------------------+-------------------+\n\nSELECT JSON_ARRAYAGG(a), JSON_ARRAYAGG(b) FROM t1 GROUP BY b;\n+------------------+------------------+\n| JSON_ARRAYAGG(a) | JSON_ARRAYAGG(b) |\n+------------------+------------------+\n| [1,2,1,2] | [1,1,1,1] |\n| [3,2,2,2] | [2,2,2,2] |\n+------------------+------------------+\n\nURL: https://mariadb.com/kb/en/json_arrayagg/','','https://mariadb.com/kb/en/json_arrayagg/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (746,40,'JSON_OBJECTAGG','MariaDB starting with 10.5.0\n----------------------------\nJSON_OBJECTAGG was added in MariaDB 10.5.0.\n\nSyntax\n------\n\nJSON_OBJECTAGG(key, value)\n\nDescription\n-----------\n\nJSON_OBJECTAGG returns a JSON object containing key-value pairs. It takes two\nexpressions that evaluate to a single value, or two column names, as\narguments, the first used as a key, and the second as a value.\n\nReturns NULL in the case of an error, or if the result contains no rows.\n\nJSON_OBJECTAGG cannot currently be used as a window function.\n\nExamples\n--------\n\nselect * from t1;\n+------+-------+\n| a | b |\n+------+-------+\n| 1 | Hello |\n| 1 | World |\n| 2 | This |\n+------+-------+\n\nSELECT JSON_OBJECTAGG(a, b) FROM t1;\n+----------------------------------------+\n| JSON_OBJECTAGG(a, b) |\n+----------------------------------------+\n| {\"1\":\"Hello\", \"1\":\"World\", \"2\":\"This\"} |\n+----------------------------------------+\n\nURL: https://mariadb.com/kb/en/json_objectagg/','','https://mariadb.com/kb/en/json_objectagg/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (747,40,'JSONPath Expressions','A number of JSON functions accept JSON Path expressions. MariaDB defines this\npath as follows:\n\nJSON Path Syntax\n----------------\n\npath : [\'lax\'] \'$\' [step]*\n\nThe path starts with an optional path mode. At the moment, MariaDB supports\nonly the \"lax\" mode, which is also the mode that is used when it is not\nexplicitly specified.\n\nThe $ symbol represents the context item. The search always starts from the\ncontext item; because of that, the path always starts with $.\n\nThen, it is followed by zero or more steps, which select element(s) in the\nJSON document. A step may be one of the following:\n\n* Object member selector\n* Array element selector\n* Wildcard selector\n\nObject Member Selector\n----------------------\n\nTo select member(s) in a JSON object, one can use one of the following:\n\n* .memberName selects the value of the member with name memberName.\n* .\"memberName\" - the same as above but allows one to select a member with a\nname that\'s not a valid identifier (that is, has space, dot, and/or other\ncharacters)\n* .* - selects the values of all members of the object.\n\nIf the current item is an array (instead of an object), nothing will be\nselected.\n\nArray Element Selector\n----------------------\n\nTo select elements of an array, one can use one of the following:\n\n* [N] selects element number N in the array. The elements are counted from\nzero.\n* [*] selects all elements in the array.\n\nIf the current item is an object (instead of an array), nothing will be\nselected.\n\nStarting from MariaDB server 10.9, JSON path also supports negative index in\narray, \'last\' keyword and range notation (\'to\' keyword) for accessing array\nelements. Negative index starts from -1.\n\n* [-N] selects n th element from end.\n* [last-N] selects n th element from the last element.\n* [M to N] selects range of elements starting from index M to N.\n\nExample:\n\nSET @json=\'{\n \"A\": [0,\n [1, 2, 3],\n [4, 5, 6],\n \"seven\",\n 0.8,\n true,\n false,\n \"eleven\",\n [12, [13, 14], {\"key1\":\"value1\"},[15]],\n true],\n \"B\": {\"C\": 1},\n \"D\": 2\n }\';\nSELECT JSON_EXTRACT(@json, \'$.A[-8][1]\');\n+--------------------------------------------------+\n| JSON_EXTRACT(@json, \'$.A[-8][1]\') |\n+--------------------------------------------------+\n| 5 |\n+--------------------------------------------------+\n\nSELECT JSON_EXTRACT(@json, \'$.A[last-7][1]\');\n+-----------------------------------------------+\n| SELECT JSON_EXTRACT(@json, \'$.A[last-7][1]\'); |\n+-----------------------------------------------+\n| 5 |\n+-----------------------------------------------+\n\nSET @json= \'[\n [1, {\"key1\": \"value1\"}, 3],\n [false, 5, 6],\n [7, 8, [9, {\"key2\": 2}, 11]],\n [15, 1.34, [14], [\"string1\", [16, {\"key1\":[1,2,3,[4,5,6]]}, 18]]],\n [19, 20],\n 21, 22\n ]\';\n\nSELECT JSON_EXTRACT(@json, \'$[0 to 3][2]\');\n+-----------------------------------------------+\n| JSON_EXTRACT(@json, \'$[0 to 3][2]\') |\n+-----------------------------------------------+\n| [3, 6, [9, {\"key2\": 2}, 11], [14]] |\n+-----------------------------------------------+\n\nThis will produce output for first index of eighth from last element of a two\ndimensional array.\n\nNote: In range notation, when M > N ( when M,N are greater than or equal to 0)\nor (size of array - M or size of array - N when M, N are less than 0), then it\nis treated as an impossible range and NULL is returned.\n\nSET @json= \'[1, 2, 3, 4, 5]\';\nSELECT JSON_EXTRACT(@json, \'$[4 to 2]\');\n+-----------------------------------+\n| JSON_EXTRACT(@json, \'$[4 to 2]\') |\n+-----------------------------------+\n| NULL |\n+-----------------------------------+\n\nWildcard\n--------\n\nThe wildcard step, **, recursively selects all child elements of the current\nelement. Both array elements and object members are selected.\n\nThe wildcard step must not be the last step in the JSONPath expression. It\nmust be followed by an array or object member selector step.\n\nFor example:\n\nselect json_extract(@json_doc, \'$**.price\');\n\nwill select all object members in the document that are named price, while\n\nselect json_extract(@json_doc, \'$**[2]\');\n\nwill select the second element in each of the arrays present in the document.\n\nCompatibility\n-------------\n\nMariaDB\'s JSONPath syntax supports a subset of JSON Path\'s definition in the\nSQL Standard. The most notable things not supported are the strict mode and\nfilters.\n\nMariaDB\'s JSONPath is close to MySQL\'s JSONPath. The wildcard step ( ** ) is a\nnon-standard extension that has the same meaning as in MySQL. The differences\nbetween MariaDB and MySQL\'s JSONPath are: MySQL supports [last] and [M to N]\nas array element selectors; MySQL doesn\'t allow one to specify the mode\nexplicitly (but uses lax mode implicitly).\n\nURL: https://mariadb.com/kb/en/jsonpath-expressions/','','https://mariadb.com/kb/en/jsonpath-expressions/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (748,40,'JSON_ARRAY','Syntax\n------\n\nJSON_ARRAY([value[, value2] ...])\n\nDescription\n-----------\n\nReturns a JSON array containing the listed values. The list can be empty.\n\nExample\n-------\n\nSELECT Json_Array(56, 3.1416, \'My name is \"Foo\"\', NULL);\n+--------------------------------------------------+\n| Json_Array(56, 3.1416, \'My name is \"Foo\"\', NULL) |\n+--------------------------------------------------+\n| [56, 3.1416, \"My name is \\\"Foo\\\"\", null] |\n+--------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/json_array/','','https://mariadb.com/kb/en/json_array/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (749,40,'JSON_ARRAY_APPEND','Syntax\n------\n\nJSON_ARRAY_APPEND(json_doc, path, value[, path, value] ...)\n\nDescription\n-----------\n\nAppends values to the end of the specified arrays within a JSON document,\nreturning the result, or NULL if any of the arguments are NULL.\n\nEvaluation is performed from left to right, with the resulting document from\nthe previous pair becoming the new value against which the next pair is\nevaluated.\n\nIf the json_doc is not a valid JSON document, or if any of the paths are not\nvalid, or contain a * or ** wildcard, an error is returned.\n\nExamples\n--------\n\nSET @json = \'[1, 2, [3, 4]]\';\n\nSELECT JSON_ARRAY_APPEND(@json, \'$[0]\', 5)\n+-------------------------------------+\n| JSON_ARRAY_APPEND(@json, \'$[0]\', 5) |\n+-------------------------------------+\n| [[1, 5], 2, [3, 4]] |\n+-------------------------------------+\n\nSELECT JSON_ARRAY_APPEND(@json, \'$[1]\', 6);\n+-------------------------------------+\n| JSON_ARRAY_APPEND(@json, \'$[1]\', 6) |\n+-------------------------------------+\n| [1, [2, 6], [3, 4]] |\n+-------------------------------------+\n\nSELECT JSON_ARRAY_APPEND(@json, \'$[1]\', 6, \'$[2]\', 7);\n+------------------------------------------------+\n| JSON_ARRAY_APPEND(@json, \'$[1]\', 6, \'$[2]\', 7) |\n+------------------------------------------------+\n| [1, [2, 6], [3, 4, 7]] |\n+------------------------------------------------+\n\nSELECT JSON_ARRAY_APPEND(@json, \'$\', 5);\n+----------------------------------+\n| JSON_ARRAY_APPEND(@json, \'$\', 5) |\n+----------------------------------+\n| [1, 2, [3, 4], 5] |\n+----------------------------------+\n\nSET @json = \'{\"A\": 1, \"B\": [2], \"C\": [3, 4]}\';\n\nSELECT JSON_ARRAY_APPEND(@json, \'$.B\', 5);\n+------------------------------------+\n| JSON_ARRAY_APPEND(@json, \'$.B\', 5) |\n+------------------------------------+\n| {\"A\": 1, \"B\": [2, 5], \"C\": [3, 4]} |\n+------------------------------------+\n\nURL: https://mariadb.com/kb/en/json_array_append/','','https://mariadb.com/kb/en/json_array_append/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (750,40,'JSON_ARRAY_INSERT','Syntax\n------\n\nJSON_ARRAY_INSERT(json_doc, path, value[, path, value] ...)\n\nDescription\n-----------\n\nInserts a value into a JSON document, returning the modified document, or NULL\nif any of the arguments are NULL.\n\nEvaluation is performed from left to right, with the resulting document from\nthe previous pair becoming the new value against which the next pair is\nevaluated.\n\nIf the json_doc is not a valid JSON document, or if any of the paths are not\nvalid, or contain a * or ** wildcard, an error is returned.\n\nExamples\n--------\n\nSET @json = \'[1, 2, [3, 4]]\';\n\nSELECT JSON_ARRAY_INSERT(@json, \'$[0]\', 5);\n+-------------------------------------+\n| JSON_ARRAY_INSERT(@json, \'$[0]\', 5) |\n+-------------------------------------+\n| [5, 1, 2, [3, 4]] |\n+-------------------------------------+\n\nSELECT JSON_ARRAY_INSERT(@json, \'$[1]\', 6);\n+-------------------------------------+\n| JSON_ARRAY_INSERT(@json, \'$[1]\', 6) |\n+-------------------------------------+\n| [1, 6, 2, [3, 4]] |\n+-------------------------------------+\n\nSELECT JSON_ARRAY_INSERT(@json, \'$[1]\', 6, \'$[2]\', 7);\n+------------------------------------------------+\n| JSON_ARRAY_INSERT(@json, \'$[1]\', 6, \'$[2]\', 7) |\n+------------------------------------------------+\n| [1, 6, 7, 2, [3, 4]] |\n+------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/json_array_insert/','','https://mariadb.com/kb/en/json_array_insert/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (751,40,'JSON_COMPACT','Syntax\n------\n\nJSON_COMPACT(json_doc)\n\nDescription\n-----------\n\nRemoves all unnecessary spaces so the json document is as short as possible.\n\nExample\n-------\n\nSET @j = \'{ \"A\": 1, \"B\": [2, 3]}\';\n\nSELECT JSON_COMPACT(@j), @j;\n+-------------------+------------------------+\n| JSON_COMPACT(@j) | @j |\n+-------------------+------------------------+\n| {\"A\":1,\"B\":[2,3]} | { \"A\": 1, \"B\": [2, 3]} |\n+-------------------+------------------------+\n\nURL: https://mariadb.com/kb/en/json_compact/','','https://mariadb.com/kb/en/json_compact/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (752,40,'JSON_CONTAINS','Syntax\n------\n\nJSON_CONTAINS(json_doc, val[, path])\n\nDescription\n-----------\n\nReturns whether or not the specified value is found in the given JSON document\nor, optionally, at the specified path within the document. Returns 1 if it\ndoes, 0 if not and NULL if any of the arguments are null. An error occurs if\nthe document or path is not valid, or contains the * or ** wildcards.\n\nExamples\n--------\n\nSET @json = \'{\"A\": 0, \"B\": {\"C\": 1}, \"D\": 2}\';\n\nSELECT JSON_CONTAINS(@json, \'2\', \'$.A\');\n+----------------------------------+\n| JSON_CONTAINS(@json, \'2\', \'$.A\') |\n+----------------------------------+\n| 0 |\n+----------------------------------+\n\nSELECT JSON_CONTAINS(@json, \'2\', \'$.D\');\n+----------------------------------+\n| JSON_CONTAINS(@json, \'2\', \'$.D\') |\n+----------------------------------+\n| 1 |\n+----------------------------------+\n\nSELECT JSON_CONTAINS(@json, \'{\"C\": 1}\', \'$.A\');\n+-----------------------------------------+\n| JSON_CONTAINS(@json, \'{\"C\": 1}\', \'$.A\') |\n+-----------------------------------------+\n| 0 |\n+-----------------------------------------+\n\nSELECT JSON_CONTAINS(@json, \'{\"C\": 1}\', \'$.B\');\n+-----------------------------------------+\n| JSON_CONTAINS(@json, \'{\"C\": 1}\', \'$.B\') |\n+-----------------------------------------+\n| 1 |\n+-----------------------------------------+\n\nURL: https://mariadb.com/kb/en/json_contains/','','https://mariadb.com/kb/en/json_contains/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (753,40,'JSON_CONTAINS_PATH','Syntax\n------\n\nJSON_CONTAINS_PATH(json_doc, return_arg, path[, path] ...)\n\nDescription\n-----------\n\nIndicates whether the given JSON document contains data at the specified path\nor paths. Returns 1 if it does, 0 if not and NULL if any of the arguments are\nnull.\n\nThe return_arg can be one or all:\n\n* one - Returns 1 if at least one path exists within the JSON document. \n* all - Returns 1 only if all paths exist within the JSON document.\n\nExamples\n--------\n\nSET @json = \'{\"A\": 1, \"B\": [2], \"C\": [3, 4]}\';\n\nSELECT JSON_CONTAINS_PATH(@json, \'one\', \'$.A\', \'$.D\');\n+------------------------------------------------+\n| JSON_CONTAINS_PATH(@json, \'one\', \'$.A\', \'$.D\') |\n+------------------------------------------------+\n| 1 |\n+------------------------------------------------+\n1 row in set (0.00 sec)\n\nSELECT JSON_CONTAINS_PATH(@json, \'all\', \'$.A\', \'$.D\');\n+------------------------------------------------+\n| JSON_CONTAINS_PATH(@json, \'all\', \'$.A\', \'$.D\') |\n+------------------------------------------------+\n| 0 |\n+------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/json_contains_path/','','https://mariadb.com/kb/en/json_contains_path/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (754,40,'JSON_DEPTH','Syntax\n------\n\nJSON_DEPTH(json_doc)\n\nDescription\n-----------\n\nReturns the maximum depth of the given JSON document, or NULL if the argument\nis null. An error will occur if the argument is an invalid JSON document.\n\n* Scalar values or empty arrays or objects have a depth of 1.\n* Arrays or objects that are not empty but contain only elements or member\nvalues of depth 1 will have a depth of 2.\n* In other cases, the depth will be greater than 2.\n\nExamples\n--------\n\nSELECT JSON_DEPTH(\'[]\'), JSON_DEPTH(\'true\'), JSON_DEPTH(\'{}\');\n+------------------+--------------------+------------------+\n| JSON_DEPTH(\'[]\') | JSON_DEPTH(\'true\') | JSON_DEPTH(\'{}\') |\n+------------------+--------------------+------------------+\n| 1 | 1 | 1 |\n+------------------+--------------------+------------------+\n\nSELECT JSON_DEPTH(\'[1, 2, 3]\'), JSON_DEPTH(\'[[], {}, []]\');\n+-------------------------+----------------------------+\n| JSON_DEPTH(\'[1, 2, 3]\') | JSON_DEPTH(\'[[], {}, []]\') |\n+-------------------------+----------------------------+\n| 2 | 2 |\n+-------------------------+----------------------------+\n\nSELECT JSON_DEPTH(\'[1, 2, [3, 4, 5, 6], 7]\');\n+---------------------------------------+\n| JSON_DEPTH(\'[1, 2, [3, 4, 5, 6], 7]\') |\n+---------------------------------------+\n| 3 |\n+---------------------------------------+\n\nURL: https://mariadb.com/kb/en/json_depth/','','https://mariadb.com/kb/en/json_depth/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (755,40,'JSON_DETAILED','Syntax\n------\n\nJSON_DETAILED(json_doc[, tab_size])\n\nDescription\n-----------\n\nRepresents JSON in the most understandable way emphasizing nested structures.\n\nExample\n-------\n\nSET @j = \'{ \"A\":1,\"B\":[2,3]}\';\n\nSELECT @j;\n+--------------------+\n| @j |\n+--------------------+\n| { \"A\":1,\"B\":[2,3]} |\n+--------------------+\n\nSELECT JSON_DETAILED(@j);\n+------------------------------------------------------------+\n| JSON_DETAILED(@j) |\n+------------------------------------------------------------+\n| {\n \"A\": 1,\n \"B\":\n [\n 2,\n 3\n ]\n} |\n+------------------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/json_detailed/','','https://mariadb.com/kb/en/json_detailed/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (756,40,'JSON_EQUALS','MariaDB starting with 10.7.0\n----------------------------\nJSON_EQUALS was added in MariaDB 10.7.0\n\nSyntax\n------\n\nJSON_EQUALS(json1, json2)\n\nDescription\n-----------\n\nChecks if there is equality between two json objects. Returns 1 if it there\nis, 0 if not, or NULL if any of the arguments are null.\n\nExamples\n--------\n\nSELECT JSON_EQUALS(\'{\"a\" :[1, 2, 3],\"b\":[4]}\', \'{\"b\":[4],\"a\":[1, 2, 3.0]}\');\n+------------------------------------------------------------------------+\n| JSON_EQUALS(\'{\"a\" :[1, 2, 3],\"b\":[4]}\', \'{\"b\":[4],\"a\":[1, 2, 3.0]}\') |\n+------------------------------------------------------------------------+\n| 1 |\n+------------------------------------------------------------------------+\n\nSELECT JSON_EQUALS(\'{\"a\":[1, 2, 3]}\', \'{\"a\":[1, 2, 3.01]}\');\n+------------------------------------------------------+\n| JSON_EQUALS(\'{\"a\":[1, 2, 3]}\', \'{\"a\":[1, 2, 3.01]}\') |\n+------------------------------------------------------+\n| 0 |\n+------------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/json_equals/','','https://mariadb.com/kb/en/json_equals/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (757,40,'JSON_EXISTS','Syntax\n------\n\nDescription\n-----------\n\nDetermines whether a specified JSON value exists in the given data. Returns 1\nif found, 0 if not, or NULL if any of the inputs were NULL.\n\nExamples\n--------\n\nSELECT JSON_EXISTS(\'{\"key1\":\"xxxx\", \"key2\":[1, 2, 3]}\', \"$.key2\");\n+------------------------------------------------------------+\n| JSON_EXISTS(\'{\"key1\":\"xxxx\", \"key2\":[1, 2, 3]}\', \"$.key2\") |\n+------------------------------------------------------------+\n| 1 |\n+------------------------------------------------------------+\n\nSELECT JSON_EXISTS(\'{\"key1\":\"xxxx\", \"key2\":[1, 2, 3]}\', \"$.key3\");\n+------------------------------------------------------------+\n| JSON_EXISTS(\'{\"key1\":\"xxxx\", \"key2\":[1, 2, 3]}\', \"$.key3\") |\n+------------------------------------------------------------+\n| 0 |\n+------------------------------------------------------------+\n\nSELECT JSON_EXISTS(\'{\"key1\":\"xxxx\", \"key2\":[1, 2, 3]}\', \"$.key2[1]\");\n+---------------------------------------------------------------+\n| JSON_EXISTS(\'{\"key1\":\"xxxx\", \"key2\":[1, 2, 3]}\', \"$.key2[1]\") |\n+---------------------------------------------------------------+\n| 1 |\n+---------------------------------------------------------------+\n\nSELECT JSON_EXISTS(\'{\"key1\":\"xxxx\", \"key2\":[1, 2, 3]}\', \"$.key2[10]\");\n+----------------------------------------------------------------+\n| JSON_EXISTS(\'{\"key1\":\"xxxx\", \"key2\":[1, 2, 3]}\', \"$.key2[10]\") |\n+----------------------------------------------------------------+\n| 0 |\n+----------------------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/json_exists/','','https://mariadb.com/kb/en/json_exists/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (758,40,'JSON_EXTRACT','Syntax\n------\n\nJSON_EXTRACT(json_doc, path[, path] ...)\n\nDescription\n-----------\n\nExtracts data from a JSON document. The extracted data is selected from the\nparts matching the path arguments. Returns all matched values; either as a\nsingle matched value, or, if the arguments could return multiple values, a\nresult autowrapped as an array in the matching order.\n\nReturns NULL if no paths match or if any of the arguments are NULL.\n\nAn error will occur if any path argument is not a valid path, or if the\njson_doc argument is not a valid JSON document.\n\nThe path expression be a JSONPath expression as supported by MariaDB\n\nExamples\n--------\n\nSET @json = \'[1, 2, [3, 4]]\';\n\nSELECT JSON_EXTRACT(@json, \'$[1]\');\n+-----------------------------+\n| JSON_EXTRACT(@json, \'$[1]\') |\n+-----------------------------+\n| 2 |\n+-----------------------------+\n\nSELECT JSON_EXTRACT(@json, \'$[2]\');\n+-----------------------------+\n| JSON_EXTRACT(@json, \'$[2]\') |\n+-----------------------------+\n| [3, 4] |\n+-----------------------------+\n\nSELECT JSON_EXTRACT(@json, \'$[2][1]\');\n+--------------------------------+\n| JSON_EXTRACT(@json, \'$[2][1]\') |\n+--------------------------------+\n| 4 |\n+--------------------------------+\n\nURL: https://mariadb.com/kb/en/json_extract/','','https://mariadb.com/kb/en/json_extract/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (759,40,'JSON_INSERT','Syntax\n------\n\nJSON_INSERT(json_doc, path, val[, path, val] ...)\n\nDescription\n-----------\n\nInserts data into a JSON document, returning the resulting document or NULL if\nany argument is null.\n\nAn error will occur if the JSON document is not invalid, or if any of the\npaths are invalid or contain a * or ** wildcard.\n\nJSON_INSERT can only insert data while JSON_REPLACE can only update. JSON_SET\ncan update or insert data.\n\nExamples\n--------\n\nSET @json = \'{ \"A\": 0, \"B\": [1, 2]}\';\n\nSELECT JSON_INSERT(@json, \'$.C\', \'[3, 4]\');\n+--------------------------------------+\n| JSON_INSERT(@json, \'$.C\', \'[3, 4]\') |\n+--------------------------------------+\n| { \"A\": 0, \"B\": [1, 2], \"C\":\"[3, 4]\"} |\n+--------------------------------------+\n\nURL: https://mariadb.com/kb/en/json_insert/','','https://mariadb.com/kb/en/json_insert/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (760,40,'JSON_KEYS','Syntax\n------\n\nJSON_KEYS(json_doc[, path])\n\nDescription\n-----------\n\nReturns the keys as a JSON array from the top-level value of a JSON object or,\nif the optional path argument is provided, the top-level keys from the path.\n\nExcludes keys from nested sub-objects in the top level value. The resulting\narray will be empty if the selected object is empty.\n\nReturns NULL if any of the arguments are null, a given path does not locate an\nobject, or if the json_doc argument is not an object.\n\nAn error will occur if JSON document is invalid, the path is invalid or if the\npath contains a * or ** wildcard.\n\nExamples\n--------\n\nSELECT JSON_KEYS(\'{\"A\": 1, \"B\": {\"C\": 2}}\');\n+--------------------------------------+\n| JSON_KEYS(\'{\"A\": 1, \"B\": {\"C\": 2}}\') |\n+--------------------------------------+\n| [\"A\", \"B\"] |\n+--------------------------------------+\n\nSELECT JSON_KEYS(\'{\"A\": 1, \"B\": 2, \"C\": {\"D\": 3}}\', \'$.C\');\n+-----------------------------------------------------+\n| JSON_KEYS(\'{\"A\": 1, \"B\": 2, \"C\": {\"D\": 3}}\', \'$.C\') |\n+-----------------------------------------------------+\n| [\"D\"] |\n+-----------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/json_keys/','','https://mariadb.com/kb/en/json_keys/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (761,40,'JSON_LENGTH','Syntax\n------\n\nJSON_LENGTH(json_doc[, path])\n\nDescription\n-----------\n\nReturns the length of a JSON document, or, if the optional path argument is\ngiven, the length of the value within the document specified by the path.\n\nReturns NULL if any of the arguments argument are null or the path argument\ndoes not identify a value in the document.\n\nAn error will occur if the JSON document is invalid, the path is invalid or if\nthe path contains a * or ** wildcard.\n\nLength will be determined as follow:\n\n* A scalar\'s length is always 1.\n* If an array, the number of elements in the array.\n* If an object, the number of members in the object.\n\nThe length of nested arrays or objects are not counted.\n\nExamples\n--------\n\nURL: https://mariadb.com/kb/en/json_length/','','https://mariadb.com/kb/en/json_length/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (762,40,'JSON_LOOSE','Syntax\n------\n\nJSON_LOOSE(json_doc)\n\nDescription\n-----------\n\nAdds spaces to a JSON document to make it look more readable.\n\nExample\n-------\n\nSET @j = \'{ \"A\":1,\"B\":[2,3]}\';\n\nSELECT JSON_LOOSE(@j), @j;\n+-----------------------+--------------------+\n| JSON_LOOSE(@j) | @j |\n+-----------------------+--------------------+\n| {\"A\": 1, \"B\": [2, 3]} | { \"A\":1,\"B\":[2,3]} |\n+-----------------------+--------------------+\n\nURL: https://mariadb.com/kb/en/json_loose/','','https://mariadb.com/kb/en/json_loose/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (763,40,'JSON_MERGE','Syntax\n------\n\nJSON_MERGE(json_doc, json_doc[, json_doc] ...)\n\nDescription\n-----------\n\nMerges the given JSON documents.\n\nReturns the merged result,or NULL if any argument is NULL.\n\nAn error occurs if any of the arguments are not valid JSON documents.\n\nJSON_MERGE has been deprecated since MariaDB 10.2.25, MariaDB 10.3.16 and\nMariaDB 10.4.5. JSON_MERGE_PATCH is an RFC 7396-compliant replacement, and\nJSON_MERGE_PRESERVE is a synonym.\n\nExample\n-------\n\nSET @json1 = \'[1, 2]\';\nSET @json2 = \'[3, 4]\';\n\nSELECT JSON_MERGE(@json1,@json2);\n+---------------------------+\n| JSON_MERGE(@json1,@json2) |\n+---------------------------+\n| [1, 2, 3, 4] |\n+---------------------------+\n\nURL: https://mariadb.com/kb/en/json_merge/','','https://mariadb.com/kb/en/json_merge/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (764,40,'JSON_MERGE_PATCH','MariaDB starting with 10.2.25\n-----------------------------\nJSON_MERGE_PATCH was introduced in MariaDB 10.2.25, MariaDB 10.3.16 and\nMariaDB 10.4.5.\n\nSyntax\n------\n\nJSON_MERGE_PATCH(json_doc, json_doc[, json_doc] ...)\n\nDescription\n-----------\n\nMerges the given JSON documents, returning the merged result, or NULL if any\nargument is NULL.\n\nJSON_MERGE_PATCH is an RFC 7396-compliant replacement for JSON_MERGE, which\nhas been deprecated.\n\nExample\n-------\n\nSET @json1 = \'[1, 2]\';\nSET @json2 = \'[2, 3]\';\nSELECT JSON_MERGE_PATCH(@json1,@json2),JSON_MERGE_PRESERVE(@json1,@json2);\n+---------------------------------+------------------------------------+\n| JSON_MERGE_PATCH(@json1,@json2) | JSON_MERGE_PRESERVE(@json1,@json2) |\n+---------------------------------+------------------------------------+\n| [2, 3] | [1, 2, 2, 3] |\n+---------------------------------+------------------------------------+\n\nURL: https://mariadb.com/kb/en/json_merge_patch/','','https://mariadb.com/kb/en/json_merge_patch/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (765,40,'JSON_MERGE_PRESERVE','MariaDB starting with 10.2.25\n-----------------------------\nJSON_MERGE_PRESERVE was introduced in MariaDB 10.2.25, MariaDB 10.3.16 and\nMariaDB 10.4.5.\n\nSyntax\n------\n\nJSON_MERGE_PRESERVE(json_doc, json_doc[, json_doc] ...)\n\nDescription\n-----------\n\nMerges the given JSON documents, returning the merged result, or NULL if any\nargument is NULL.\n\nJSON_MERGE_PRESERVE was introduced in MariaDB 10.2.25, MariaDB 10.3.16 and\nMariaDB 10.4.5 as a synonym for JSON_MERGE, which has been deprecated.\n\nExample\n-------\n\nSET @json1 = \'[1, 2]\';\nSET @json2 = \'[2, 3]\';\nSELECT JSON_MERGE_PATCH(@json1,@json2),JSON_MERGE_PRESERVE(@json1,@json2);\n+---------------------------------+------------------------------------+\n| JSON_MERGE_PATCH(@json1,@json2) | JSON_MERGE_PRESERVE(@json1,@json2) |\n+---------------------------------+------------------------------------+\n| [2, 3] | [1, 2, 2, 3] |\n+---------------------------------+------------------------------------+\n\nURL: https://mariadb.com/kb/en/json_merge_preserve/','','https://mariadb.com/kb/en/json_merge_preserve/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (766,40,'JSON_NORMALIZE','MariaDB starting with 10.7.0\n----------------------------\nJSON_NORMALIZE was added in MariaDB 10.7.0.\n\nSyntax\n------\n\nJSON_NORMALIZE(json)\n\nDescription\n-----------\n\nRecursively sorts keys and removes spaces, allowing comparison of json\ndocuments for equality.\n\nExamples\n--------\n\nWe may wish our application to use the database to enforce a unique constraint\non the JSON contents, and we can do so using the JSON_NORMALIZE function in\ncombination with a unique key.\n\nFor example, if we have a table with a JSON column:\n\nCREATE TABLE t1 (\n id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,\n val JSON,\n /* other columns here */\n PRIMARY KEY (id)\n);\n\nAdd a unique constraint using JSON_NORMALIZE like this:\n\nALTER TABLE t1\n ADD COLUMN jnorm JSON AS (JSON_NORMALIZE(val)) VIRTUAL,\n ADD UNIQUE KEY (jnorm);\n\nWe can test this by first inserting a row as normal:\n\nINSERT INTO t1 (val) VALUES (\'{\"name\":\"alice\",\"color\":\"blue\"}\');\n\nAnd then seeing what happens with a different string which would produce the\nsame JSON object:\n\nINSERT INTO t1 (val) VALUES (\'{ \"color\": \"blue\", \"name\": \"alice\" }\');\nERROR 1062 (23000): Duplicate entry \'{\"color\":\"blue\",\"name\":\"alice\"}\' for key\n\'jnorm\'\n\nURL: https://mariadb.com/kb/en/json_normalize/','','https://mariadb.com/kb/en/json_normalize/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (767,40,'JSON_OBJECT','Syntax\n------\n\nJSON_OBJECT([key, value[, key, value] ...])\n\nDescription\n-----------\n\nReturns a JSON object containing the given key/value pairs. The key/value list\ncan be empty.\n\nAn error will occur if there are an odd number of arguments, or any key name\nis NULL.\n\nExample\n-------\n\nSELECT JSON_OBJECT(\"id\", 1, \"name\", \"Monty\");\n+---------------------------------------+\n| JSON_OBJECT(\"id\", 1, \"name\", \"Monty\") |\n+---------------------------------------+\n| {\"id\": 1, \"name\": \"Monty\"} |\n+---------------------------------------+\n\nURL: https://mariadb.com/kb/en/json_object/','','https://mariadb.com/kb/en/json_object/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (768,40,'JSON_OVERLAPS','MariaDB starting with 10.9\n--------------------------\nJSON_OVERLAPS was added in MariaDB 10.9.\n\nSyntax\n------\n\nJSON_OVERLAPS(json_doc1, json_doc2)\n\nDescription\n-----------\n\nJSON_OVERLAPS() compares two json documents and returns true if they have at\nleast one common key-value pair between two objects, array element common\nbetween two arrays, or array element common with scalar if one of the\narguments is a scalar and other is an array. If two json documents are\nscalars, it returns true if they have same type and value.\n\nIf none of the above conditions are satisfied then it returns false.\n\nExamples\n--------\n\nSELECT JSON_OVERLAPS(\'false\', \'false\');\n+---------------------------------+\n| JSON_OVERLAPS(\'false\', \'false\') |\n+---------------------------------+\n| 1 |\n+---------------------------------+\n\nSELECT JSON_OVERLAPS(\'true\', \'[\"abc\", 1, 2, true, false]\');\n+----------------------------------------------------+\n| JSON_OVERLAPS(\'true\',\'[\"abc\", 1, 2, true, false]\') |\n+----------------------------------------------------+\n| 1 |\n+----------------------------------------------------+\n\nSELECT JSON_OVERLAPS(\'{\"A\": 1, \"B\": {\"C\":2}}\', \'{\"A\": 2, \"B\": {\"C\":2}}\') AS\nis_overlap;\n+---------------------+\n| is_overlap |\n+---------------------+\n| 1 |\n+---------------------+\n\nPartial match is considered as no-match.\n\nExamples\n--------\n\nSELECT JSON_OVERLAPS(\'[1, 2, true, false, null]\', \'[3, 4, [1]]\') AS is_overlap;\n+--------------------- +\n| is_overlap |\n+----------------------+\n| 0 |\n+----------------------+\n\nURL: https://mariadb.com/kb/en/json_overlaps/','','https://mariadb.com/kb/en/json_overlaps/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (769,40,'JSON_QUERY','Syntax\n------\n\nJSON_QUERY(json_doc, path)\n\nDescription\n-----------\n\nGiven a JSON document, returns an object or array specified by the path.\nReturns NULL if not given a valid JSON document, or if there is no match.\n\nExamples\n--------\n\nselect json_query(\'{\"key1\":{\"a\":1, \"b\":[1,2]}}\', \'$.key1\');\n+-----------------------------------------------------+\n| json_query(\'{\"key1\":{\"a\":1, \"b\":[1,2]}}\', \'$.key1\') |\n+-----------------------------------------------------+\n| {\"a\":1, \"b\":[1,2]} |\n+-----------------------------------------------------+\n\nselect json_query(\'{\"key1\":123, \"key1\": [1,2,3]}\', \'$.key1\');\n+-------------------------------------------------------+\n| json_query(\'{\"key1\":123, \"key1\": [1,2,3]}\', \'$.key1\') |\n+-------------------------------------------------------+\n| [1,2,3] |\n+-------------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/json_query/','','https://mariadb.com/kb/en/json_query/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (770,40,'JSON_QUOTE','Syntax\n------\n\nJSON_QUOTE(json_value)\n\nDescription\n-----------\n\nQuotes a string as a JSON value, usually for producing valid JSON string\nliterals for inclusion in JSON documents. Wraps the string with double quote\ncharacters and escapes interior quotes and other special characters, returning\na utf8mb4 string.\n\nReturns NULL if the argument is NULL.\n\nExamples\n--------\n\nSELECT JSON_QUOTE(\'A\'), JSON_QUOTE(\"B\"), JSON_QUOTE(\'\"C\"\');\n+-----------------+-----------------+-------------------+\n| JSON_QUOTE(\'A\') | JSON_QUOTE(\"B\") | JSON_QUOTE(\'\"C\"\') |\n+-----------------+-----------------+-------------------+\n| \"A\" | \"B\" | \"\\\"C\\\"\" |\n+-----------------+-----------------+-------------------+\n\nURL: https://mariadb.com/kb/en/json_quote/','','https://mariadb.com/kb/en/json_quote/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (771,40,'JSON_REMOVE','Syntax\n------\n\nJSON_REMOVE(json_doc, path[, path] ...)\n\nDescription\n-----------\n\nRemoves data from a JSON document returning the result, or NULL if any of the\narguments are null. If the element does not exist in the document, no changes\nare made.\n\nAn error will occur if JSON document is invalid, the path is invalid or if the\npath contains a * or ** wildcard.\n\nPath arguments are evaluated from left to right, with the result from the\nearlier evaluation being used as the value for the next.\n\nExamples\n--------\n\nSELECT JSON_REMOVE(\'{\"A\": 1, \"B\": 2, \"C\": {\"D\": 3}}\', \'$.C\');\n+-------------------------------------------------------+\n| JSON_REMOVE(\'{\"A\": 1, \"B\": 2, \"C\": {\"D\": 3}}\', \'$.C\') |\n+-------------------------------------------------------+\n| {\"A\": 1, \"B\": 2} |\n+-------------------------------------------------------+\n\nSELECT JSON_REMOVE(\'[\"A\", \"B\", [\"C\", \"D\"], \"E\"]\', \'$[1]\');\n+----------------------------------------------------+\n| JSON_REMOVE(\'[\"A\", \"B\", [\"C\", \"D\"], \"E\"]\', \'$[1]\') |\n+----------------------------------------------------+\n| [\"A\", [\"C\", \"D\"], \"E\"] |\n+----------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/json_remove/','','https://mariadb.com/kb/en/json_remove/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (772,40,'JSON_REPLACE','Syntax\n------\n\nJSON_REPLACE(json_doc, path, val[, path, val] ...)\n\nDescription\n-----------\n\nReplaces existing values in a JSON document, returning the result, or NULL if\nany of the arguments are NULL.\n\nAn error will occur if the JSON document is invalid, the path is invalid or if\nthe path contains a * or ** wildcard.\n\nPaths and values are evaluated from left to right, with the result from the\nearlier evaluation being used as the value for the next.\n\nJSON_REPLACE can only update data, while JSON_INSERT can only insert. JSON_SET\ncan update or insert data.\n\nExamples\n--------\n\nSELECT JSON_REPLACE(\'{ \"A\": 1, \"B\": [2, 3]}\', \'$.B[1]\', 4);\n+-----------------------------------------------------+\n| JSON_REPLACE(\'{ \"A\": 1, \"B\": [2, 3]}\', \'$.B[1]\', 4) |\n+-----------------------------------------------------+\n| { \"A\": 1, \"B\": [2, 4]} |\n+-----------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/json_replace/','','https://mariadb.com/kb/en/json_replace/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (773,40,'JSON_SEARCH','Syntax\n------\n\nJSON_SEARCH(json_doc, return_arg, search_str[, escape_char[, path] ...])\n\nDescription\n-----------\n\nReturns the path to the given string within a JSON document, or NULL if any of\njson_doc, search_str or a path argument is NULL; if the search string is not\nfound, or if no path exists within the document.\n\nA warning will occur if the JSON document is not valid, any of the path\narguments are not valid, if return_arg is neither one nor all, or if the\nescape character is not a constant. NULL will be returned.\n\nreturn_arg can be one of two values:\n\n* \'one: Terminates after finding the first match, so will return one path\nstring. If there is more than one match, it is undefined which is considered\nfirst.\n* all: Returns all matching path strings, without duplicates. Multiple strings\nare autowrapped as an array. The order is undefined.\n\nExamples\n--------\n\nSET @json = \'[\"A\", [{\"B\": \"1\"}], {\"C\":\"AB\"}, {\"D\":\"BC\"}]\';\n\nSELECT JSON_SEARCH(@json, \'one\', \'AB\');\n+---------------------------------+\n| JSON_SEARCH(@json, \'one\', \'AB\') |\n+---------------------------------+\n| \"$[2].C\" |\n+---------------------------------+\n\nURL: https://mariadb.com/kb/en/json_search/','','https://mariadb.com/kb/en/json_search/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (774,40,'JSON_SET','Syntax\n------\n\nJSON_SET(json_doc, path, val[, path, val] ...)\n\nDescription\n-----------\n\nUpdates or inserts data into a JSON document, returning the result, or NULL if\nany of the arguments are NULL or the optional path fails to find an object.\n\nAn error will occur if the JSON document is invalid, the path is invalid or if\nthe path contains a * or wildcard.\n\nJSON_SET can update or insert data, while JSON_REPLACE can only update, and\nJSON_INSERT only insert.\n\nExamples\n--------\n\nSELECT JSON_SET(Priv, \'$.locked\', \'true\') FROM mysql.global_priv\n\nURL: https://mariadb.com/kb/en/json_set/','','https://mariadb.com/kb/en/json_set/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (775,40,'JSON_TABLE','MariaDB starting with 10.6.0\n----------------------------\nJSON_TABLE was added in MariaDB 10.6.0.\n\nJSON_TABLE is a table function that converts JSON data into a relational form.\n\nSyntax\n------\n\nJSON_TABLE(json_doc, \n context_path COLUMNS (column_list)\n) [AS] alias\n\ncolumn_list:\n column[, column][, ...]\n\ncolumn:\n name FOR ORDINALITY\n | name type PATH path_str [on_empty] [on_error]\n | name type EXISTS PATH path_str\n | NESTED PATH path_str COLUMNS (column_list)\n\non_empty:\n {NULL | DEFAULT string | ERROR} ON EMPTY\n\non_error:\n {NULL | DEFAULT string | ERROR} ON ERROR\n\nDescription\n-----------\n\nJSON_TABLE can be used in contexts where a table reference can be used; in the\nFROM clause of a SELECT statement, and in multi-table UPDATE/DELETE statements.\n\njson_doc is the JSON document to extract data from. In the simplest case, it\nis a string literal containing JSON. In more complex cases it can be an\narbitrary expression returning JSON. The expression may have references to\ncolumns of other tables. However, one can only refer to tables that precede\nthis JSON_TABLE invocation. For RIGHT JOIN, it is assumed that its outer side\nprecedes the inner. All tables in outer selects are also considered preceding.\n\ncontext_path is a JSON Path expression pointing to a collection of nodes in\njson_doc that will be used as the source of rows.\n\nThe COLUMNS clause declares the names and types of the columns that JSON_TABLE\nreturns, as well as how the values of the columns are produced.\n\nColumn Definitions\n------------------\n\nThe following types of columns are supported:\n\nPath Columns\n------------\n\nname type PATH path_str [on_empty] [on_error]\n\nLocates the JSON node pointed to by path_str and returns its value. The\npath_str is evaluated using the current row source node as the context node.\n\nset @json=\'\n[\n {\"name\":\"Laptop\", \"color\":\"black\", \"price\":\"1000\"},\n {\"name\":\"Jeans\", \"color\":\"blue\"}\n]\';\n\nselect * from json_table(@json, \'$[*]\' \n columns(\n name varchar(10) path \'$.name\',\n color varchar(10) path \'$.color\',\n price decimal(8,2) path \'$.price\' )\n) as jt;\n+--------+-------+---------+\n| name | color | price |\n+--------+-------+---------+\n| Laptop | black | 1000.00 |\n| Jeans | blue | NULL |\n+--------+-------+---------+\n\nThe on_empty and on_error clauses specify the actions to be performed when the\nvalue was not found or there was an error condition. See the ON EMPTY and ON\nERROR clauses section for details.\n\nORDINALITY Columns\n------------------\n\nname FOR ORDINALITY\n\nCounts the rows, starting from 1.\n\nExample:\n\nset @json=\'\n[\n {\"name\":\"Laptop\", \"color\":\"black\"},\n {\"name\":\"Jeans\", \"color\":\"blue\"}\n]\';\n\nselect * from json_table(@json, \'$[*]\' \n columns(\n id for ordinality,\n name varchar(10) path \'$.name\')\n) as jt;\n+------+--------+\n| id | name |\n+------+--------+\n| 1 | Laptop |\n| 2 | Jeans |\n+------+--------+\n\nEXISTS PATH Columns\n-------------------\n\nname type EXISTS PATH path_str\n\nChecks whether the node pointed to by value_path exists. The value_path is\nevaluated using the current row source node as the context node.\n\nset @json=\'\n[\n {\"name\":\"Laptop\", \"color\":\"black\", \"price\":1000},\n {\"name\":\"Jeans\", \"color\":\"blue\"}\n]\';\n\nselect * from json_table(@json, \'$[*]\' \n columns(\n name varchar(10) path \'$.name\',\n has_price integer exists path \'$.price\')\n) as jt;\n+--------+-----------+\n| name | has_price |\n+--------+-----------+\n| Laptop | 1 |\n| Jeans | 0 |\n+--------+-----------+\n\nNESTED PATHs\n------------\n\nNESTED PATH converts nested JSON structures into multiple rows.\n\nNESTED PATH path COLUMNS (column_list)\n\nIt finds the sequence of JSON nodes pointed to by path and uses it to produce\nrows. For each found node, a row is generated with column values as specified\nby the NESTED PATH\'s COLUMNS clause. If path finds no nodes, only one row is\ngenerated with all columns having NULL values.\n\nFor example, consider a JSON document that contains an array of items, and\neach item, in turn, is expected to have an array of its available sizes:\n\nset @json=\'\n[\n {\"name\":\"Jeans\", \"sizes\": [32, 34, 36]},\n {\"name\":\"T-Shirt\", \"sizes\":[\"Medium\", \"Large\"]},\n {\"name\":\"Cellphone\"}\n]\';\n\nNESTED PATH allows one to produce a separate row for each size each item has:\n\nselect * from json_table(@json, \'$[*]\' \n columns(\n name varchar(10) path \'$.name\',\n nested path \'$.sizes[*]\' columns (\n size varchar(32) path \'$\'\n )\n )\n) as jt;\n+-----------+--------+\n| name | size |\n+-----------+--------+\n| Jeans | 32 |\n| Jeans | 34 |\n| Jeans | 36 |\n| T-Shirt | Medium |\n| T-Shirt | Large |\n| Cellphone | NULL |\n+-----------+--------+\n\nNESTED PATH clauses can be nested within one another. They can also be located\nnext to each other. In that case, the nested path clauses will produce records\none at a time. The ones that are not producing records will have all columns\nset to NULL.\n\nExample:\n\nset @json=\'\n[\n {\"name\":\"Jeans\", \"sizes\": [32, 34, 36], \"colors\":[\"black\", \"blue\"]}\n]\';\n\nselect * from json_table(@json, \'$[*]\' \n columns(\n name varchar(10) path \'$.name\',\n nested path \'$.sizes[*]\' columns (\n size varchar(32) path \'$\'\n ),\n nested path \'$.colors[*]\' columns (\n color varchar(32) path \'$\'\n )\n )\n) as jt;\n\n+-------+------+-------+\n| name | size | color |\n+-------+------+-------+\n| Jeans | 32 | NULL |\n| Jeans | 34 | NULL |\n| Jeans | 36 | NULL |\n| Jeans | NULL | black |\n| Jeans | NULL | blue |\n+-------+------+-------+\n\nON EMPTY and ON ERROR Clauses\n-----------------------------\n\nThe ON EMPTY clause specifies what will be done when the element specified by\nthe search path is missing in the JSON document.\n\non_empty:\n {NULL | DEFAULT string | ERROR} ON EMPTY\n\nWhen ON EMPTY clause is not present, NULL ON EMPTY is implied.\n\non_error:\n {NULL | DEFAULT string | ERROR} ON ERROR\n\nThe ON ERROR clause specifies what should be done if a JSON structure error\noccurs when trying to extract the value pointed to by the path expression. A\nJSON structure error here occurs only when one attempts to convert a JSON\nnon-scalar (array or object) into a scalar value. When the ON ERROR clause is\nnot present, NULL ON ERROR is implied.\n\nNote: A datatype conversion error (e.g. attempt to store a non-integer value\ninto an integer field, or a varchar column being truncated) is not considered\na JSON error and so will not trigger the ON ERROR behavior. It will produce\nwarnings, in the same way as CAST(value AS datatype) would.\n\nReplication\n-----------\n\nIn the current code, evaluation of JSON_TABLE is deterministic, that is, for a\ngiven input string JSON_TABLE will always produce the same set of rows in the\nsame order. However, one can think of JSON documents that one can consider\nidentical which will produce different output. In order to be future-proof and\nwithstand changes like:\n\n* sorting JSON object members by name (like MySQL does)\n* changing the way duplicate object members are handled\nthe function is marked as unsafe for statement-based replication.\n\nExtracting a Subdocument into a Column\n--------------------------------------\n\nMariaDB starting with 10.6.9\n----------------------------\nPrior to MariaDB 10.6.9, JSON_TABLE did not allow one to extract a JSON\n\"subdocument\" into a JSON column.\n\nSELECT * FROM JSON_TABLE(\'{\"foo\": [1,2,3,4]}\',\'$\' columns( jscol json path\n\'$.foo\') ) AS T;\n+-------+\n| jscol |\n+-------+\n| NULL |\n+-------+\n\nThis is supported from MariaDB 10.6.9:\n\nSELECT * FROM JSON_TABLE(\'{\"foo\": [1,2,3,4]}\',\'$\' columns( jscol json path\n\'$.foo\') ) AS T;\n+-----------+\n| jscol |\n+-----------+\n| [1,2,3,4] |\n+-----------+\n\nURL: https://mariadb.com/kb/en/json_table/','','https://mariadb.com/kb/en/json_table/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (776,40,'JSON_TYPE','Syntax\n------\n\nJSON_TYPE(json_val)\n\nDescription\n-----------\n\nReturns the type of a JSON value (as a string), or NULL if the argument is\nnull.\n\nAn error will occur if the argument is an invalid JSON value.\n\nThe following is a complete list of the possible return types:\n\n+-----------------------------------+-----------------+-----------------------+\n| Return type | Value | Example |\n+-----------------------------------+-----------------+-----------------------+\n| ARRAY | JSON array | [1, 2, {\"key\": |\n| | | \"value\"}] |\n+-----------------------------------+-----------------+-----------------------+\n| OBJECT | JSON object | {\"key\":\"value\"} |\n+-----------------------------------+-----------------+-----------------------+\n| BOOLEAN | JSON | true, false |\n| | true/false | |\n| | literals | |\n+-----------------------------------+-----------------+-----------------------+\n| DOUBLE | A number with | 1.2 |\n| | at least one | |\n| | floating point | |\n| | decimal. | |\n+-----------------------------------+-----------------+-----------------------+\n| INTEGER | A number | 1 |\n| | without a | |\n| | floating point | |\n| | decimal. | |\n+-----------------------------------+-----------------+-----------------------+\n| NULL | JSON null | null |\n| | literal (this | |\n| | is returned as | |\n| | a string, not | |\n| | to be confused | |\n| | with the SQL | |\n| | NULL value!) | |\n+-----------------------------------+-----------------+-----------------------+\n| STRING | JSON String | \"a sample string\" |\n+-----------------------------------+-----------------+-----------------------+\n\nExamples\n--------\n\nSELECT JSON_TYPE(\'{\"A\": 1, \"B\": 2, \"C\": 3}\');\n+---------------------------------------+\n| JSON_TYPE(\'{\"A\": 1, \"B\": 2, \"C\": 3}\') |\n+---------------------------------------+\n| OBJECT |\n+---------------------------------------+\n\nURL: https://mariadb.com/kb/en/json_type/','','https://mariadb.com/kb/en/json_type/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (777,40,'JSON_UNQUOTE','Syntax\n------\n\nJSON_UNQUOTE(val)\n\nDescription\n-----------\n\nUnquotes a JSON value, returning a string, or NULL if the argument is null.\n\nAn error will occur if the given value begins and ends with double quotes and\nis an invalid JSON string literal.\n\nIf the given value is not a JSON string, value is passed through unmodified.\n\nCertain character sequences have special meanings within a string. Usually, a\nbackslash is ignored, but the escape sequences in the table below are\nrecognised by MariaDB, unless the SQL Mode is set to NO_BACKSLASH_ESCAPES SQL.\n\n+-----------------------------------------------+-----------------------------+\n| Escape sequence | Character |\n+-----------------------------------------------+-----------------------------+\n| \\\" | Double quote (\") |\n+-----------------------------------------------+-----------------------------+\n| \\b | Backslash |\n+-----------------------------------------------+-----------------------------+\n| \\f | Formfeed |\n+-----------------------------------------------+-----------------------------+\n| \\n | Newline (linefeed) |\n+-----------------------------------------------+-----------------------------+\n| \\r | Carriage return |\n+-----------------------------------------------+-----------------------------+\n| \\t | Tab |\n+-----------------------------------------------+-----------------------------+\n| \\\\ | Backslash (\\) |\n+-----------------------------------------------+-----------------------------+\n| \\uXXXX | UTF-8 bytes for Unicode |\n| | value XXXX |\n+-----------------------------------------------+-----------------------------+\n\nExamples\n--------\n\nSELECT JSON_UNQUOTE(\'\"Monty\"\');\n+-------------------------+\n| JSON_UNQUOTE(\'\"Monty\"\') |\n+-------------------------+\n| Monty |\n+-------------------------+\n\nWith the default SQL Mode:\n\nSELECT JSON_UNQUOTE(\'Si\\bng\\ting\');\n+-----------------------------+\n| JSON_UNQUOTE(\'Si\\bng\\ting\') |\n+-----------------------------+\n| Sng ing |\n+-----------------------------+\n\nSetting NO_BACKSLASH_ESCAPES:\n\nSET @@sql_mode = \'NO_BACKSLASH_ESCAPES\';\n\nSELECT JSON_UNQUOTE(\'Si\\bng\\ting\');\n+-----------------------------+\n| JSON_UNQUOTE(\'Si\\bng\\ting\') |\n+-----------------------------+\n| Si\\bng\\ting |\n+-----------------------------+\n\nURL: https://mariadb.com/kb/en/json_unquote/','','https://mariadb.com/kb/en/json_unquote/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (778,40,'JSON_VALID','Syntax\n------\n\nJSON_VALID(value)\n\nDescription\n-----------\n\nIndicates whether the given value is a valid JSON document or not. Returns 1\nif valid, 0 if not, and NULL if the argument is NULL.\n\nFrom MariaDB 10.4.3, the JSON_VALID function is automatically used as a CHECK\nconstraint for the JSON data type alias in order to ensure that a valid json\ndocument is inserted.\n\nExamples\n--------\n\nSELECT JSON_VALID(\'{\"id\": 1, \"name\": \"Monty\"}\');\n+------------------------------------------+\n| JSON_VALID(\'{\"id\": 1, \"name\": \"Monty\"}\') |\n+------------------------------------------+\n| 1 |\n+------------------------------------------+\n\nSELECT JSON_VALID(\'{\"id\": 1, \"name\": \"Monty\", \"oddfield\"}\');\n+------------------------------------------------------+\n| JSON_VALID(\'{\"id\": 1, \"name\": \"Monty\", \"oddfield\"}\') |\n+------------------------------------------------------+\n| 0 |\n+------------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/json_valid/','','https://mariadb.com/kb/en/json_valid/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (779,40,'JSON_VALUE','Syntax\n------\n\nJSON_VALUE(json_doc, path)\n\nDescription\n-----------\n\nGiven a JSON document, returns the scalar specified by the path. Returns NULL\nif not given a valid JSON document, or if there is no match.\n\nExamples\n--------\n\nselect json_value(\'{\"key1\":123}\', \'$.key1\');\n+--------------------------------------+\n| json_value(\'{\"key1\":123}\', \'$.key1\') |\n+--------------------------------------+\n| 123 |\n+--------------------------------------+\n\nselect json_value(\'{\"key1\": [1,2,3], \"key1\":123}\', \'$.key1\');\n+-------------------------------------------------------+\n| json_value(\'{\"key1\": [1,2,3], \"key1\":123}\', \'$.key1\') |\n+-------------------------------------------------------+\n| 123 |\n+-------------------------------------------------------+\n\nIn the SET statement below, two escape characters are needed, as a single\nescape character would be applied by the SQL parser in the SET statement, and\nthe escaped character would not form part of the saved value.\n\nSET @json = \'{\"key1\":\"60\\\\\" Table\", \"key2\":\"1\"}\';\n\nSELECT JSON_VALUE(@json,\'$.key1\') AS Name , json_value(@json,\'$.key2\') as ID;\n+-----------+------+\n| Name | ID |\n+-----------+------+\n| 60\" Table | 1 |\n+-----------+------+\n\nURL: https://mariadb.com/kb/en/json_value/','','https://mariadb.com/kb/en/json_value/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (780,41,'Window Functions Overview','Introduction\n------------\n\nWindow functions allow calculations to be performed across a set of rows\nrelated to the current row.\n\nSyntax\n------\n\nfunction (expression) OVER (\n [ PARTITION BY expression_list ]\n [ ORDER BY order_list [ frame_clause ] ] )\n\nfunction:\n A valid window function\n\nexpression_list:\n expression | column_name [, expr_list ]\n\norder_list:\n expression | column_name [ ASC | DESC ]\n [, ... ]\n\nframe_clause:\n {ROWS | RANGE} {frame_border | BETWEEN frame_border AND frame_border}\n\nframe_border:\n | UNBOUNDED PRECEDING\n | UNBOUNDED FOLLOWING\n | CURRENT ROW\n | expr PRECEDING\n | expr FOLLOWING\n\nDescription\n-----------\n\nIn some ways, window functions are similar to aggregate functions in that they\nperform calculations across a set of rows. However, unlike aggregate\nfunctions, the output is not grouped into a single row.\n\nNon-aggregate window functions include\n\n* CUME_DIST\n* DENSE_RANK\n* FIRST_VALUE\n* LAG\n* LAST_VALUE\n* LEAD\n* MEDIAN\n* NTH_VALUE\n* NTILE\n* PERCENT_RANK\n* PERCENTILE_CONT\n* PERCENTILE_DISC\n* RANK, ROW_NUMBER\n\nAggregate functions that can also be used as window functions include\n\n* AVG\n* BIT_AND\n* BIT_OR\n* BIT_XOR\n* COUNT\n* MAX\n* MIN\n* STD\n* STDDEV\n* STDDEV_POP\n* STDDEV_SAMP\n* SUM\n* VAR_POP\n* VAR_SAMP\n* VARIANCE\n\nWindow function queries are characterised by the OVER keyword, following which\nthe set of rows used for the calculation is specified. By default, the set of\nrows used for the calculation (the \"window) is the entire dataset, which can\nbe ordered with the ORDER BY clause. The PARTITION BY clause is used to reduce\nthe window to a particular group within the dataset.\n\nFor example, given the following data:\n\nCREATE TABLE student (name CHAR(10), test CHAR(10), score TINYINT);\n\nINSERT INTO student VALUES \n (\'Chun\', \'SQL\', 75), (\'Chun\', \'Tuning\', 73),\n (\'Esben\', \'SQL\', 43), (\'Esben\', \'Tuning\', 31),\n (\'Kaolin\', \'SQL\', 56), (\'Kaolin\', \'Tuning\', 88),\n (\'Tatiana\', \'SQL\', 87), (\'Tatiana\', \'Tuning\', 83);\n\nthe following two queries return the average partitioned by test and by name\nrespectively:\n\nSELECT name, test, score, AVG(score) OVER (PARTITION BY test) \n AS average_by_test FROM student;\n+---------+--------+-------+-----------------+\n| name | test | score | average_by_test |\n+---------+--------+-------+-----------------+\n| Chun | SQL | 75 | 65.2500 |\n| Chun | Tuning | 73 | 68.7500 |\n| Esben | SQL | 43 | 65.2500 |\n| Esben | Tuning | 31 | 68.7500 |\n| Kaolin | SQL | 56 | 65.2500 |\n| Kaolin | Tuning | 88 | 68.7500 |\n| Tatiana | SQL | 87 | 65.2500 |\n| Tatiana | Tuning | 83 | 68.7500 |\n+---------+--------+-------+-----------------+\n\nSELECT name, test, score, AVG(score) OVER (PARTITION BY name) \n AS average_by_name FROM student;\n+---------+--------+-------+-----------------+\n| name | test | score | average_by_name |\n+---------+--------+-------+-----------------+\n| Chun | SQL | 75 | 74.0000 |\n| Chun | Tuning | 73 | 74.0000 |\n| Esben | SQL | 43 | 37.0000 |\n| Esben | Tuning | 31 | 37.0000 |\n| Kaolin | SQL | 56 | 72.0000 |\n| Kaolin | Tuning | 88 | 72.0000 |\n| Tatiana | SQL | 87 | 85.0000 |\n| Tatiana | Tuning | 83 | 85.0000 |\n+---------+--------+-------+-----------------+\n\nIt is also possible to specify which rows to include for the window function\n(for example, the current row and all preceding rows). See Window Frames for\nmore details.\n\nScope\n-----\n\nWindow functions were introduced in SQL:2003, and their definition was\nexpanded in subsequent versions of the standard. The last expansion was in the\nlatest version of the standard, SQL:2011.\n\nMost database products support a subset of the standard, they implement some\nfunctions defined as late as in SQL:2011, and at the same time leave some\nparts of SQL:2008 unimplemented.\n\nMariaDB:\n\n* Supports ROWS and RANGE-type frames\nAll kinds of frame bounds are supported, including RANGE PRECEDING|FOLLOWING n\nframe bounds (unlike PostgreSQL or MS SQL Server)\nDoes not yet support DATE[TIME] datatype and arithmetic for RANGE-type frames\n(MDEV-9727)\n\n* Does not support GROUPS-type frames (it seems that no popular database\nsupports it, either)\n\n* Does not support frame exclusion (no other database seems to support it,\neither) (MDEV-9724)\n* Does not support explicit NULLS FIRST or NULLS LAST.\n* Does not support nested navigation in window functions (this is\nVALUE_OF(expr AT row_marker [, default_value) syntax)\n\n* The following window functions are supported:\n\"Streamable\" window functions: ROW_NUMBER, RANK, DENSE_RANK, \nWindow functions that can be streamed once the number of rows in partition is\nknown: PERCENT_RANK, CUME_DIST, NTILE\n\n* Aggregate functions that are currently supported as window functions are:\nCOUNT, SUM, AVG, BIT_OR, BIT_AND, BIT_XOR.\n* Aggregate functions with the DISTINCT specifier (e.g. COUNT( DISTINCT x))\nare not supported as window functions.\n\nLinks\n-----\n\n* MDEV-6115 is the main jira task for window functions development. Other\ntasks are are attached as sub-tasks\n* bb-10.2-mdev9543 is the feature tree for window functions. Development is\nongoing, and this tree has the newest changes.\n* Testcases are in mysql-test/t/win*.test\n\nExamples\n--------\n\nGiven the following sample data:\n\nCREATE TABLE users (\n email VARCHAR(30),\n first_name VARCHAR(30),\n last_name VARCHAR(30),\n account_type VARCHAR(30)\n);\n\nINSERT INTO users VALUES \n (\'admin@boss.org\', \'Admin\', \'Boss\', \'admin\'),\n (\'bob.carlsen@foo.bar\', \'Bob\', \'Carlsen\', \'regular\'),\n (\'eddie.stevens@data.org\', \'Eddie\', \'Stevens\', \'regular\'),\n (\'john.smith@xyz.org\', \'John\', \'Smith\', \'regular\'),\n (\'root@boss.org\', \'Root\', \'Chief\', \'admin\')\n\nFirst, let\'s order the records by email alphabetically, giving each an\nascending rnum value starting with 1. This will make use of the ROW_NUMBER\nwindow function:\n\nSELECT row_number() OVER (ORDER BY email) AS rnum,\n email, first_name, last_name, account_type\nFROM users ORDER BY email;\n+------+------------------------+------------+-----------+--------------+\n| rnum | email | first_name | last_name | account_type |\n+------+------------------------+------------+-----------+--------------+\n| 1 | admin@boss.org | Admin | Boss | admin |\n| 2 | bob.carlsen@foo.bar | Bob | Carlsen | regular |\n| 3 | eddie.stevens@data.org | Eddie | Stevens | regular |\n| 4 | john.smith@xyz.org | John | Smith | regular |\n| 5 | root@boss.org | Root | Chief | admin |\n+------+------------------------+------------+-----------+--------------\n\nWe can generate separate sequences based on account type, using the PARTITION\nBY clause:\n\nSELECT row_number() OVER (PARTITION BY account_type ORDER BY email) AS rnum, \n email, first_name, last_name, account_type\nFROM users ORDER BY account_type,email;\n+------+------------------------+------------+-----------+--------------+\n| rnum | email | first_name | last_name | account_type |\n+------+------------------------+------------+-----------+--------------+\n| 1 | admin@boss.org | Admin | Boss | admin |\n| 2 | root@boss.org | Root | Chief | admin |\n| 1 | bob.carlsen@foo.bar | Bob | Carlsen | regular |\n| 2 | eddie.stevens@data.org | Eddie | Stevens | regular |\n| 3 | john.smith@xyz.org | John | Smith | regular |\n+------+------------------------+------------+-----------+--------------+\n\nGiven the following structure and data, we want to find the top 5 salaries\nfrom each department.\n\nCREATE TABLE employee_salaries (dept VARCHAR(20), name VARCHAR(20), salary\nINT(11));\n\nINSERT INTO employee_salaries VALUES\n(\'Engineering\', \'Dharma\', 3500),\n(\'Engineering\', \'Binh\', 3000),\n(\'Engineering\', \'Adalynn\', 2800),\n(\'Engineering\', \'Samuel\', 2500),\n(\'Engineering\', \'Cveta\', 2200),\n(\'Engineering\', \'Ebele\', 1800),\n(\'Sales\', \'Carbry\', 500),\n(\'Sales\', \'Clytemnestra\', 400),\n(\'Sales\', \'Juraj\', 300),\n(\'Sales\', \'Kalpana\', 300),\n(\'Sales\', \'Svantepolk\', 250),\n(\'Sales\', \'Angelo\', 200);\n\nWe could do this without using window functions, as follows:\n\nselect dept, name, salary\nfrom employee_salaries as t1\nwhere (select count(t2.salary)\n from employee_salaries as t2\n where t1.name != t2.name and\n t1.dept = t2.dept and\n t2.salary > t1.salary) < 5\norder by dept, salary desc;\n\n+-------------+--------------+--------+\n| dept | name | salary |\n+-------------+--------------+--------+\n| Engineering | Dharma | 3500 |\n| Engineering | Binh | 3000 |\n| Engineering | Adalynn | 2800 |\n| Engineering | Samuel | 2500 |\n| Engineering | Cveta | 2200 |\n| Sales | Carbry | 500 |\n| Sales | Clytemnestra | 400 |\n| Sales | Juraj | 300 |\n| Sales | Kalpana | 300 |\n| Sales | Svantepolk | 250 |\n+-------------+--------------+--------+\n\nThis has a number of disadvantages:\n\n* if there is no index, the query could take a long time if the\nemployee_salary_table is large\n* Adding and maintaining indexes adds overhead, and even with indexes on dept\nand salary, each subquery execution adds overhead by performing a lookup\nthrough the index.\n\nLet\'s try achieve the same with window functions. First, generate a rank for\nall employees, using the RANK function.\n\nselect rank() over (partition by dept order by salary desc) as ranking,\n dept, name, salary\n from employee_salaries\n order by dept, ranking;\n+---------+-------------+--------------+--------+\n| ranking | dept | name | salary |\n+---------+-------------+--------------+--------+\n| 1 | Engineering | Dharma | 3500 |\n| 2 | Engineering | Binh | 3000 |\n| 3 | Engineering | Adalynn | 2800 |\n| 4 | Engineering | Samuel | 2500 |\n| 5 | Engineering | Cveta | 2200 |\n| 6 | Engineering | Ebele | 1800 |\n| 1 | Sales | Carbry | 500 |\n| 2 | Sales | Clytemnestra | 400 |\n| 3 | Sales | Juraj | 300 |\n| 3 | Sales | Kalpana | 300 |\n| 5 | Sales | Svantepolk | 250 |\n| 6 | Sales | Angelo | 200 |\n+---------+-------------+--------------+--------+\n\nEach department has a separate sequence of ranks due to the PARTITION BY\nclause. This particular sequence of values for rank() is given by the ORDER BY\nclause inside the window function’s OVER clause. Finally, to get our results\nin a readable format we order the data by dept and the newly generated ranking\ncolumn.\n\nNow, we need to reduce the results to find only the top 5 per department. Here\nis a common mistake:\n\nselect\nrank() over (partition by dept order by salary desc) as ranking,\ndept, name, salary\nfrom employee_salaries\nwhere ranking <= 5\norder by dept, ranking;\n\nERROR 1054 (42S22): Unknown column \'ranking\' in \'where clause\'\n\nTrying to filter only the first 5 values per department by putting a where\nclause in the statement does not work, due to the way window functions are\ncomputed. The computation of window functions happens after all WHERE, GROUP\nBY and HAVING clauses have been completed, right before ORDER BY, so the WHERE\nclause has no idea that the ranking column exists. It is only present after we\nhave filtered and grouped all the rows.\n\nTo counteract this problem, we need to wrap our query into a derived table. We\ncan then attach a where clause to it:\n\nselect *from (select rank() over (partition by dept order by salary desc) as\nranking,\n dept, name, salary\nfrom employee_salaries) as salary_ranks\nwhere (salary_ranks.ranking <= 5)\n order by dept, ranking;\n+---------+-------------+--------------+--------+\n| ranking | dept | name | salary |\n+---------+-------------+--------------+--------+\n| 1 | Engineering | Dharma | 3500 |\n| 2 | Engineering | Binh | 3000 |\n| 3 | Engineering | Adalynn | 2800 |\n| 4 | Engineering | Samuel | 2500 |\n| 5 | Engineering | Cveta | 2200 |\n| 1 | Sales | Carbry | 500 |\n| 2 | Sales | Clytemnestra | 400 |\n| 3 | Sales | Juraj | 300 |\n| 3 | Sales | Kalpana | 300 |\n| 5 | Sales | Svantepolk | 250 |\n+---------+-------------+--------------+--------+\n\nURL: https://mariadb.com/kb/en/window-functions-overview/','','https://mariadb.com/kb/en/window-functions-overview/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (781,41,'CUME_DIST','Syntax\n------\n\nCUME_DIST() OVER ( \n [ PARTITION BY partition_expression ]\n [ ORDER BY order_list ]\n)\n\nDescription\n-----------\n\nCUME_DIST() is a window function that returns the cumulative distribution of a\ngiven row. The following formula is used to calculate the value:\n\n(number of rows <= current row) / (total rows)\n\nExamples\n--------\n\ncreate table t1 (\n pk int primary key,\n a int,\n b int\n);\n\ninsert into t1 values\n( 1 , 0, 10),\n( 2 , 0, 10),\n( 3 , 1, 10),\n( 4 , 1, 10),\n( 8 , 2, 10),\n( 5 , 2, 20),\n( 6 , 2, 20),\n( 7 , 2, 20),\n( 9 , 4, 20),\n(10 , 4, 20);\n\nselect pk, a, b,\n rank() over (order by a) as rank,\n percent_rank() over (order by a) as pct_rank,\n cume_dist() over (order by a) as cume_dist\nfrom t1;\n+----+------+------+------+--------------+--------------+\n| pk | a | b | rank | pct_rank | cume_dist |\n+----+------+------+------+--------------+--------------+\n| 1 | 0 | 10 | 1 | 0.0000000000 | 0.2000000000 |\n| 2 | 0 | 10 | 1 | 0.0000000000 | 0.2000000000 |\n| 3 | 1 | 10 | 3 | 0.2222222222 | 0.4000000000 |\n| 4 | 1 | 10 | 3 | 0.2222222222 | 0.4000000000 |\n| 5 | 2 | 20 | 5 | 0.4444444444 | 0.8000000000 |\n| 6 | 2 | 20 | 5 | 0.4444444444 | 0.8000000000 |\n| 7 | 2 | 20 | 5 | 0.4444444444 | 0.8000000000 |\n| 8 | 2 | 10 | 5 | 0.4444444444 | 0.8000000000 |\n| 9 | 4 | 20 | 9 | 0.8888888889 | 1.0000000000 |\n| 10 | 4 | 20 | 9 | 0.8888888889 | 1.0000000000 |\n+----+------+------+------+--------------+--------------+\n\nselect pk, a, b,\n percent_rank() over (order by pk) as pct_rank,\n cume_dist() over (order by pk) as cume_dist\nfrom t1 order by pk;\n+----+------+------+--------------+--------------+\n| pk | a | b | pct_rank | cume_dist |\n+----+------+------+--------------+--------------+\n| 1 | 0 | 10 | 0.0000000000 | 0.1000000000 |\n| 2 | 0 | 10 | 0.1111111111 | 0.2000000000 |\n| 3 | 1 | 10 | 0.2222222222 | 0.3000000000 |\n| 4 | 1 | 10 | 0.3333333333 | 0.4000000000 |\n| 5 | 2 | 20 | 0.4444444444 | 0.5000000000 |\n| 6 | 2 | 20 | 0.5555555556 | 0.6000000000 |\n| 7 | 2 | 20 | 0.6666666667 | 0.7000000000 |\n| 8 | 2 | 10 | 0.7777777778 | 0.8000000000 |\n| 9 | 4 | 20 | 0.8888888889 | 0.9000000000 |\n| 10 | 4 | 20 | 1.0000000000 | 1.0000000000 |\n+----+------+------+--------------+--------------+\n\nselect pk, a, b,\n percent_rank() over (partition by a order by a) as pct_rank,\n cume_dist() over (partition by a order by a) as cume_dist\nfrom t1;\n+----+------+------+--------------+--------------+\n| pk | a | b | pct_rank | cume_dist |\n+----+------+------+--------------+--------------+\n| 1 | 0 | 10 | 0.0000000000 | 1.0000000000 |\n| 2 | 0 | 10 | 0.0000000000 | 1.0000000000 |\n| 3 | 1 | 10 | 0.0000000000 | 1.0000000000 |\n| 4 | 1 | 10 | 0.0000000000 | 1.0000000000 |\n| 5 | 2 | 20 | 0.0000000000 | 1.0000000000 |\n| 6 | 2 | 20 | 0.0000000000 | 1.0000000000 |\n| 7 | 2 | 20 | 0.0000000000 | 1.0000000000 |\n| 8 | 2 | 10 | 0.0000000000 | 1.0000000000 |\n| 9 | 4 | 20 | 0.0000000000 | 1.0000000000 |\n| 10 | 4 | 20 | 0.0000000000 | 1.0000000000 |\n+----+------+------+--------------+--------------+\n\nURL: https://mariadb.com/kb/en/cume_dist/','','https://mariadb.com/kb/en/cume_dist/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (782,41,'DENSE_RANK','Syntax\n------\n\nDENSE_RANK() OVER (\n [ PARTITION BY partition_expression ]\n [ ORDER BY order_list ]\n)\n\nDescription\n-----------\n\nDENSE_RANK() is a window function that displays the number of a given row,\nstarting at one and following the ORDER BY sequence of the window function,\nwith identical values receiving the same result. Unlike the RANK() function,\nthere are no skipped values if the preceding results are identical. It is also\nsimilar to the ROW_NUMBER() function except that in that function, identical\nvalues will receive a different row number for each result.\n\nExamples\n--------\n\nThe distinction between DENSE_RANK(), RANK() and ROW_NUMBER():\n\nCREATE TABLE student(course VARCHAR(10), mark int, name varchar(10));\n\nINSERT INTO student VALUES \n (\'Maths\', 60, \'Thulile\'),\n (\'Maths\', 60, \'Pritha\'),\n (\'Maths\', 70, \'Voitto\'),\n (\'Maths\', 55, \'Chun\'),\n (\'Biology\', 60, \'Bilal\'),\n (\'Biology\', 70, \'Roger\');\n\nSELECT \n RANK() OVER (PARTITION BY course ORDER BY mark DESC) AS rank,\n DENSE_RANK() OVER (PARTITION BY course ORDER BY mark DESC) AS dense_rank,\n ROW_NUMBER() OVER (PARTITION BY course ORDER BY mark DESC) AS row_num,\n course, mark, name\nFROM student ORDER BY course, mark DESC;\n+------+------------+---------+---------+------+---------+\n| rank | dense_rank | row_num | course | mark | name |\n+------+------------+---------+---------+------+---------+\n| 1 | 1 | 1 | Biology | 70 | Roger |\n| 2 | 2 | 2 | Biology | 60 | Bilal |\n| 1 | 1 | 1 | Maths | 70 | Voitto |\n| 2 | 2 | 2 | Maths | 60 | Thulile |\n| 2 | 2 | 3 | Maths | 60 | Pritha |\n| 4 | 3 | 4 | Maths | 55 | Chun |\n+------+------------+---------+---------+------+---------+\n\nURL: https://mariadb.com/kb/en/dense_rank/','','https://mariadb.com/kb/en/dense_rank/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (783,41,'FIRST_VALUE','Syntax\n------\n\nFIRST_VALUE(expr) OVER (\n [ PARTITION BY partition_expression ]\n [ ORDER BY order_list ]\n)\n\nDescription\n-----------\n\nFIRST_VALUE returns the first result from an ordered set, or NULL if no such\nresult exists.\n\nExamples\n--------\n\nCREATE TABLE t1 (\n pk int primary key,\n a int,\n b int,\n c char(10),\n d decimal(10, 3),\n e real\n);\n\nINSERT INTO t1 VALUES\n( 1, 0, 1, \'one\', 0.1, 0.001),\n( 2, 0, 2, \'two\', 0.2, 0.002),\n( 3, 0, 3, \'three\', 0.3, 0.003),\n( 4, 1, 2, \'three\', 0.4, 0.004),\n( 5, 1, 1, \'two\', 0.5, 0.005),\n( 6, 1, 1, \'one\', 0.6, 0.006),\n( 7, 2, NULL, \'n_one\', 0.5, 0.007),\n( 8, 2, 1, \'n_two\', NULL, 0.008),\n( 9, 2, 2, NULL, 0.7, 0.009),\n(10, 2, 0, \'n_four\', 0.8, 0.010),\n(11, 2, 10, NULL, 0.9, NULL);\n\nSELECT pk, FIRST_VALUE(pk) OVER (ORDER BY pk) AS first_asc,\n LAST_VALUE(pk) OVER (ORDER BY pk) AS last_asc,\n FIRST_VALUE(pk) OVER (ORDER BY pk DESC) AS first_desc,\n LAST_VALUE(pk) OVER (ORDER BY pk DESC) AS last_desc\nFROM t1\nORDER BY pk DESC;\n\n+----+-----------+----------+------------+-----------+\n| pk | first_asc | last_asc | first_desc | last_desc |\n+----+-----------+----------+------------+-----------+\n| 11 | 1 | 11 | 11 | 11 |\n| 10 | 1 | 10 | 11 | 10 |\n| 9 | 1 | 9 | 11 | 9 |\n| 8 | 1 | 8 | 11 | 8 |\n| 7 | 1 | 7 | 11 | 7 |\n| 6 | 1 | 6 | 11 | 6 |\n| 5 | 1 | 5 | 11 | 5 |\n| 4 | 1 | 4 | 11 | 4 |\n| 3 | 1 | 3 | 11 | 3 |\n| 2 | 1 | 2 | 11 | 2 |\n| 1 | 1 | 1 | 11 | 1 |\n+----+-----------+----------+------------+-----------+\n\nCREATE OR REPLACE TABLE t1 (i int);\nINSERT INTO t1 VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10);\n\nSELECT i,\n FIRST_VALUE(i) OVER (ORDER BY i ROWS BETWEEN CURRENT ROW and 1 FOLLOWING) AS\nf_1f,\n LAST_VALUE(i) OVER (ORDER BY i ROWS BETWEEN CURRENT ROW and 1 FOLLOWING) AS\nl_1f,\n FIRST_VALUE(i) OVER (ORDER BY i ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) AS\nf_1p1f,\n LAST_VALUE(i) OVER (ORDER BY i ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) AS\nf_1p1f,\n FIRST_VALUE(i) OVER (ORDER BY i ROWS BETWEEN 2 PRECEDING AND 1 PRECEDING) AS\nf_2p1p,\n LAST_VALUE(i) OVER (ORDER BY i ROWS BETWEEN 2 PRECEDING AND 1 PRECEDING) AS\nf_2p1p,\n FIRST_VALUE(i) OVER (ORDER BY i ROWS BETWEEN 1 FOLLOWING AND 2 FOLLOWING) AS\nf_1f2f,\n LAST_VALUE(i) OVER (ORDER BY i ROWS BETWEEN 1 FOLLOWING AND 2 FOLLOWING) AS\nf_1f2f\nFROM t1;\n\n+------+------+------+--------+--------+--------+--------+--------+--------+\n| i | f_1f | l_1f | f_1p1f | f_1p1f | f_2p1p | f_2p1p | f_1f2f | f_1f2f |\n+------+------+------+--------+--------+--------+--------+--------+--------+\n| 1 | 1 | 2 | 1 | 2 | NULL | NULL | 2 | 3 |\n| 2 | 2 | 3 | 1 | 3 | 1 | 1 | 3 | 4 |\n| 3 | 3 | 4 | 2 | 4 | 1 | 2 | 4 | 5 |\n| 4 | 4 | 5 | 3 | 5 | 2 | 3 | 5 | 6 |\n| 5 | 5 | 6 | 4 | 6 | 3 | 4 | 6 | 7 |\n| 6 | 6 | 7 | 5 | 7 | 4 | 5 | 7 | 8 |\n| 7 | 7 | 8 | 6 | 8 | 5 | 6 | 8 | 9 |\n| 8 | 8 | 9 | 7 | 9 | 6 | 7 | 9 | 10 |\n| 9 | 9 | 10 | 8 | 10 | 7 | 8 | 10 | 10 |\n| 10 | 10 | 10 | 9 | 10 | 8 | 9 | NULL | NULL |\n+------+------+------+--------+--------+--------+--------+--------+--------+\n\nURL: https://mariadb.com/kb/en/first_value/','','https://mariadb.com/kb/en/first_value/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (784,41,'LAG','Syntax\n------\n\nLAG (expr[, offset]) OVER ( \n [ PARTITION BY partition_expression ]\n < ORDER BY order_list >\n)\n\nDescription\n-----------\n\nThe LAG function accesses data from a previous row according to the ORDER BY\nclause without the need for a self-join. The specific row is determined by the\noffset (default 1), which specifies the number of rows behind the current row\nto use. An offset of 0 is the current row.\n\nExamples\n--------\n\nCREATE TABLE t1 (pk int primary key, a int, b int, c char(10), d decimal(10,\n3), e real);\n\nINSERT INTO t1 VALUES\n ( 1, 0, 1, \'one\', 0.1, 0.001),\n ( 2, 0, 2, \'two\', 0.2, 0.002),\n ( 3, 0, 3, \'three\', 0.3, 0.003),\n ( 4, 1, 2, \'three\', 0.4, 0.004),\n ( 5, 1, 1, \'two\', 0.5, 0.005),\n ( 6, 1, 1, \'one\', 0.6, 0.006),\n ( 7, 2, NULL, \'n_one\', 0.5, 0.007),\n ( 8, 2, 1, \'n_two\', NULL, 0.008),\n ( 9, 2, 2, NULL, 0.7, 0.009),\n (10, 2, 0, \'n_four\', 0.8, 0.010),\n (11, 2, 10, NULL, 0.9, NULL);\n\nSELECT pk, LAG(pk) OVER (ORDER BY pk) AS l,\n LAG(pk,1) OVER (ORDER BY pk) AS l1,\n LAG(pk,2) OVER (ORDER BY pk) AS l2,\n LAG(pk,0) OVER (ORDER BY pk) AS l0,\n LAG(pk,-1) OVER (ORDER BY pk) AS lm1,\n LAG(pk,-2) OVER (ORDER BY pk) AS lm2\nFROM t1;\n+----+------+------+------+------+------+------+\n| pk | l | l1 | l2 | l0 | lm1 | lm2 |\n+----+------+------+------+------+------+------+\n| 1 | NULL | NULL | NULL | 1 | 2 | 3 |\n| 2 | 1 | 1 | NULL | 2 | 3 | 4 |\n| 3 | 2 | 2 | 1 | 3 | 4 | 5 |\n| 4 | 3 | 3 | 2 | 4 | 5 | 6 |\n| 5 | 4 | 4 | 3 | 5 | 6 | 7 |\n| 6 | 5 | 5 | 4 | 6 | 7 | 8 |\n| 7 | 6 | 6 | 5 | 7 | 8 | 9 |\n| 8 | 7 | 7 | 6 | 8 | 9 | 10 |\n| 9 | 8 | 8 | 7 | 9 | 10 | 11 |\n| 10 | 9 | 9 | 8 | 10 | 11 | NULL |\n| 11 | 10 | 10 | 9 | 11 | NULL | NULL |\n+----+------+------+------+------+------+------+\n\nURL: https://mariadb.com/kb/en/lag/','','https://mariadb.com/kb/en/lag/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (785,41,'LEAD','Syntax\n------\n\nLEAD (expr[, offset]) OVER ( \n [ PARTITION BY partition_expression ]\n [ ORDER BY order_list ]\n)\n\nDescription\n-----------\n\nThe LEAD function accesses data from a following row in the same result set\nwithout the need for a self-join. The specific row is determined by the offset\n(default 1), which specifies the number of rows ahead the current row to use.\nAn offset of 0 is the current row.\n\nExample\n-------\n\nCREATE TABLE t1 (pk int primary key, a int, b int, c char(10), d decimal(10,\n3), e real);\n\nINSERT INTO t1 VALUES\n ( 1, 0, 1, \'one\', 0.1, 0.001),\n ( 2, 0, 2, \'two\', 0.2, 0.002),\n ( 3, 0, 3, \'three\', 0.3, 0.003),\n ( 4, 1, 2, \'three\', 0.4, 0.004),\n ( 5, 1, 1, \'two\', 0.5, 0.005),\n ( 6, 1, 1, \'one\', 0.6, 0.006),\n ( 7, 2, NULL, \'n_one\', 0.5, 0.007),\n ( 8, 2, 1, \'n_two\', NULL, 0.008),\n ( 9, 2, 2, NULL, 0.7, 0.009),\n (10, 2, 0, \'n_four\', 0.8, 0.010),\n (11, 2, 10, NULL, 0.9, NULL);\n\nSELECT pk, LEAD(pk) OVER (ORDER BY pk) AS l,\n LEAD(pk,1) OVER (ORDER BY pk) AS l1,\n LEAD(pk,2) OVER (ORDER BY pk) AS l2,\n LEAD(pk,0) OVER (ORDER BY pk) AS l0,\n LEAD(pk,-1) OVER (ORDER BY pk) AS lm1,\n LEAD(pk,-2) OVER (ORDER BY pk) AS lm2\nFROM t1;\n+----+------+------+------+------+------+------+\n| pk | l | l1 | l2 | l0 | lm1 | lm2 |\n+----+------+------+------+------+------+------+\n| 1 | 2 | 2 | 3 | 1 | NULL | NULL |\n| 2 | 3 | 3 | 4 | 2 | 1 | NULL |\n| 3 | 4 | 4 | 5 | 3 | 2 | 1 |\n| 4 | 5 | 5 | 6 | 4 | 3 | 2 |\n| 5 | 6 | 6 | 7 | 5 | 4 | 3 |\n| 6 | 7 | 7 | 8 | 6 | 5 | 4 |\n| 7 | 8 | 8 | 9 | 7 | 6 | 5 |\n| 8 | 9 | 9 | 10 | 8 | 7 | 6 |\n| 9 | 10 | 10 | 11 | 9 | 8 | 7 |\n| 10 | 11 | 11 | NULL | 10 | 9 | 8 |\n| 11 | NULL | NULL | NULL | 11 | 10 | 9 |\n+----+------+------+------+------+------+------+\n\nURL: https://mariadb.com/kb/en/lead/','','https://mariadb.com/kb/en/lead/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (786,41,'Median Window Function','MariaDB starting with 10.3.3\n----------------------------\nThe MEDIAN() window function was first introduced with in MariaDB 10.3.3.\n\nSyntax\n------\n\nMEDIAN(median expression) OVER (\n [ PARTITION BY partition_expression ]\n)\n\nDescription\n-----------\n\nMEDIAN() is a window function that returns the median value of a range of\nvalues.\n\nIt is a specific case of PERCENTILE_CONT, with an argument of 0.5 and the\nORDER BY column the one in MEDIAN\'s argument.\n\nMEDIAN(<median-arg>) OVER ( [ PARTITION BY partition_expression] )\n\nIs equivalent to:\n\nPERCENTILE_CONT(0.5) WITHIN \n GROUP (ORDER BY <median-arg>) OVER ( [ PARTITION BY partition_expression ])\n\nExamples\n--------\n\nCREATE TABLE book_rating (name CHAR(30), star_rating TINYINT);\n\nINSERT INTO book_rating VALUES (\'Lord of the Ladybirds\', 5);\nINSERT INTO book_rating VALUES (\'Lord of the Ladybirds\', 3);\nINSERT INTO book_rating VALUES (\'Lady of the Flies\', 1);\nINSERT INTO book_rating VALUES (\'Lady of the Flies\', 2);\nINSERT INTO book_rating VALUES (\'Lady of the Flies\', 5);\n\nSELECT name, median(star_rating) OVER (PARTITION BY name) FROM book_rating;\n+-----------------------+----------------------------------------------+\n| name | median(star_rating) OVER (PARTITION BY name) |\n+-----------------------+----------------------------------------------+\n| Lord of the Ladybirds | 4.0000000000 |\n| Lord of the Ladybirds | 4.0000000000 |\n| Lady of the Flies | 2.0000000000 |\n| Lady of the Flies | 2.0000000000 |\n| Lady of the Flies | 2.0000000000 |\n+-----------------------+----------------------------------------------+\n\nURL: https://mariadb.com/kb/en/median/','','https://mariadb.com/kb/en/median/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (787,41,'NTH_VALUE','Syntax\n------\n\nNTH_VALUE (expr[, num_row]) OVER ( \n [ PARTITION BY partition_expression ]\n [ ORDER BY order_list ]\n)\n\nDescription\n-----------\n\nThe NTH_VALUE function returns the value evaluated at row number num_row of\nthe window frame, starting from 1, or NULL if the row does not exist.\n\nURL: https://mariadb.com/kb/en/nth_value/','','https://mariadb.com/kb/en/nth_value/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (788,41,'NTILE','Syntax\n------\n\nNTILE (expr) OVER ( \n [ PARTITION BY partition_expression ]\n [ ORDER BY order_list ]\n)\n\nDescription\n-----------\n\nNTILE() is a window function that returns an integer indicating which group a\ngiven row falls into. The number of groups is specified in the argument\n(expr), starting at one. Ordered rows in the partition are divided into the\nspecified number of groups with as equal a size as possible.\n\nExamples\n--------\n\ncreate table t1 (\n pk int primary key,\n a int,\n b int\n );\n\ninsert into t1 values\n (11 , 0, 10),\n (12 , 0, 10),\n (13 , 1, 10),\n (14 , 1, 10),\n (18 , 2, 10),\n (15 , 2, 20),\n (16 , 2, 20),\n (17 , 2, 20),\n (19 , 4, 20),\n (20 , 4, 20);\n\nselect pk, a, b,\n ntile(1) over (order by pk)\n from t1;\n+----+------+------+-----------------------------+\n| pk | a | b | ntile(1) over (order by pk) |\n+----+------+------+-----------------------------+\n| 11 | 0 | 10 | 1 |\n| 12 | 0 | 10 | 1 |\n| 13 | 1 | 10 | 1 |\n| 14 | 1 | 10 | 1 |\n| 15 | 2 | 20 | 1 |\n| 16 | 2 | 20 | 1 |\n| 17 | 2 | 20 | 1 |\n| 18 | 2 | 10 | 1 |\n| 19 | 4 | 20 | 1 |\n| 20 | 4 | 20 | 1 |\n+----+------+------+-----------------------------+\n\nselect pk, a, b,\n ntile(4) over (order by pk)\n from t1;\n+----+------+------+-----------------------------+\n| pk | a | b | ntile(4) over (order by pk) |\n+----+------+------+-----------------------------+\n| 11 | 0 | 10 | 1 |\n| 12 | 0 | 10 | 1 |\n| 13 | 1 | 10 | 1 |\n| 14 | 1 | 10 | 2 |\n| 15 | 2 | 20 | 2 |\n| 16 | 2 | 20 | 2 |\n| 17 | 2 | 20 | 3 |\n| 18 | 2 | 10 | 3 |\n| 19 | 4 | 20 | 4 |\n| 20 | 4 | 20 | 4 |\n+----+------+------+-----------------------------+\n\nURL: https://mariadb.com/kb/en/ntile/','','https://mariadb.com/kb/en/ntile/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (789,41,'PERCENT_RANK','Syntax\n------\n\nPERCENT_RANK() OVER (\n [ PARTITION BY partition_expression ]\n [ ORDER BY order_list ]\n)\n\nDescription\n-----------\n\nPERCENT_RANK() is a window function that returns the relative percent rank of\na given row. The following formula is used to calculate the percent rank:\n\n(rank - 1) / (number of rows in the window or partition - 1)\n\nExamples\n--------\n\ncreate table t1 (\n pk int primary key,\n a int,\n b int\n);\n\ninsert into t1 values\n( 1 , 0, 10),\n( 2 , 0, 10),\n( 3 , 1, 10),\n( 4 , 1, 10),\n( 8 , 2, 10),\n( 5 , 2, 20),\n( 6 , 2, 20),\n( 7 , 2, 20),\n( 9 , 4, 20),\n(10 , 4, 20);\n\nselect pk, a, b,\n rank() over (order by a) as rank,\n percent_rank() over (order by a) as pct_rank,\n cume_dist() over (order by a) as cume_dist\nfrom t1;\n+----+------+------+------+--------------+--------------+\n| pk | a | b | rank | pct_rank | cume_dist |\n+----+------+------+------+--------------+--------------+\n| 1 | 0 | 10 | 1 | 0.0000000000 | 0.2000000000 |\n| 2 | 0 | 10 | 1 | 0.0000000000 | 0.2000000000 |\n| 3 | 1 | 10 | 3 | 0.2222222222 | 0.4000000000 |\n| 4 | 1 | 10 | 3 | 0.2222222222 | 0.4000000000 |\n| 5 | 2 | 20 | 5 | 0.4444444444 | 0.8000000000 |\n| 6 | 2 | 20 | 5 | 0.4444444444 | 0.8000000000 |\n| 7 | 2 | 20 | 5 | 0.4444444444 | 0.8000000000 |\n| 8 | 2 | 10 | 5 | 0.4444444444 | 0.8000000000 |\n| 9 | 4 | 20 | 9 | 0.8888888889 | 1.0000000000 |\n| 10 | 4 | 20 | 9 | 0.8888888889 | 1.0000000000 |\n+----+------+------+------+--------------+--------------+\n\nselect pk, a, b,\n percent_rank() over (order by pk) as pct_rank,\n cume_dist() over (order by pk) as cume_dist\nfrom t1 order by pk;\n+----+------+------+--------------+--------------+\n| pk | a | b | pct_rank | cume_dist |\n+----+------+------+--------------+--------------+\n| 1 | 0 | 10 | 0.0000000000 | 0.1000000000 |\n| 2 | 0 | 10 | 0.1111111111 | 0.2000000000 |\n| 3 | 1 | 10 | 0.2222222222 | 0.3000000000 |\n| 4 | 1 | 10 | 0.3333333333 | 0.4000000000 |\n| 5 | 2 | 20 | 0.4444444444 | 0.5000000000 |\n| 6 | 2 | 20 | 0.5555555556 | 0.6000000000 |\n| 7 | 2 | 20 | 0.6666666667 | 0.7000000000 |\n| 8 | 2 | 10 | 0.7777777778 | 0.8000000000 |\n| 9 | 4 | 20 | 0.8888888889 | 0.9000000000 |\n| 10 | 4 | 20 | 1.0000000000 | 1.0000000000 |\n+----+------+------+--------------+--------------+\n\nselect pk, a, b,\n percent_rank() over (partition by a order by a) as pct_rank,\n cume_dist() over (partition by a order by a) as cume_dist\nfrom t1;\n+----+------+------+--------------+--------------+\n| pk | a | b | pct_rank | cume_dist |\n+----+------+------+--------------+--------------+\n| 1 | 0 | 10 | 0.0000000000 | 1.0000000000 |\n| 2 | 0 | 10 | 0.0000000000 | 1.0000000000 |\n| 3 | 1 | 10 | 0.0000000000 | 1.0000000000 |\n| 4 | 1 | 10 | 0.0000000000 | 1.0000000000 |\n| 5 | 2 | 20 | 0.0000000000 | 1.0000000000 |\n| 6 | 2 | 20 | 0.0000000000 | 1.0000000000 |\n| 7 | 2 | 20 | 0.0000000000 | 1.0000000000 |\n| 8 | 2 | 10 | 0.0000000000 | 1.0000000000 |\n| 9 | 4 | 20 | 0.0000000000 | 1.0000000000 |\n| 10 | 4 | 20 | 0.0000000000 | 1.0000000000 |\n+----+------+------+--------------+--------------+\n\nURL: https://mariadb.com/kb/en/percent_rank/','','https://mariadb.com/kb/en/percent_rank/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (790,41,'PERCENTILE_CONT','MariaDB starting with 10.3.3\n----------------------------\nThe PERCENTILE_CONT() window function was first introduced with in MariaDB\n10.3.3.\n\nSyntax\n------\n\nDescription\n-----------\n\nPERCENTILE_CONT() (standing for continuous percentile) is a window function\nwhich returns a value which corresponds to the given fraction in the sort\norder. If required, it will interpolate between adjacent input items.\n\nEssentially, the following process is followed to find the value to return:\n\n* Get the number of rows in the partition, denoted by N\n* RN = p*(N-1), where p denotes the argument to the PERCENTILE_CONT function\n* calculate the FRN(floor row number) and CRN(column row number for the group(\nFRN= floor(RN) and CRN = ceil(RN))\n* look up rows FRN and CRN\n* If (CRN = FRN = RN) then the result is (value of expression from row at RN)\n* Otherwise the result is\n* (CRN - RN) * (value of expression for row at FRN) +\n* (RN - FRN) * (value of expression for row at CRN)\n\nThe MEDIAN function is a specific case of PERCENTILE_CONT, equivalent to\nPERCENTILE_CONT(0.5).\n\nExamples\n--------\n\nCREATE TABLE book_rating (name CHAR(30), star_rating TINYINT);\n\nINSERT INTO book_rating VALUES (\'Lord of the Ladybirds\', 5);\nINSERT INTO book_rating VALUES (\'Lord of the Ladybirds\', 3);\nINSERT INTO book_rating VALUES (\'Lady of the Flies\', 1);\nINSERT INTO book_rating VALUES (\'Lady of the Flies\', 2);\nINSERT INTO book_rating VALUES (\'Lady of the Flies\', 5);\n\nSELECT name, PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY star_rating) \n OVER (PARTITION BY name) AS pc\n FROM book_rating;\n+-----------------------+--------------+\n| name | pc |\n+-----------------------+--------------+\n| Lord of the Ladybirds | 4.0000000000 |\n| Lord of the Ladybirds | 4.0000000000 |\n| Lady of the Flies | 2.0000000000 |\n| Lady of the Flies | 2.0000000000 |\n| Lady of the Flies | 2.0000000000 |\n+-----------------------+--------------+\n\nSELECT name, PERCENTILE_CONT(1) WITHIN GROUP (ORDER BY star_rating) \n OVER (PARTITION BY name) AS pc\n FROM book_rating;\n+-----------------------+--------------+\n| name | pc |\n+-----------------------+--------------+\n| Lord of the Ladybirds | 5.0000000000 |\n| Lord of the Ladybirds | 5.0000000000 |\n| Lady of the Flies | 5.0000000000 |\n| Lady of the Flies | 5.0000000000 |\n| Lady of the Flies | 5.0000000000 |\n+-----------------------+--------------+\n\nSELECT name, PERCENTILE_CONT(0) WITHIN GROUP (ORDER BY star_rating) \n OVER (PARTITION BY name) AS pc\n FROM book_rating;\n+-----------------------+--------------+\n| name | pc |\n+-----------------------+--------------+\n| Lord of the Ladybirds | 3.0000000000 |\n| Lord of the Ladybirds | 3.0000000000 |\n| Lady of the Flies | 1.0000000000 |\n| Lady of the Flies | 1.0000000000 |\n| Lady of the Flies | 1.0000000000 |\n+-----------------------+--------------+\n\nSELECT name, PERCENTILE_CONT(0.6) WITHIN GROUP (ORDER BY star_rating) \n OVER (PARTITION BY name) AS pc\n FROM book_rating;\n+-----------------------+--------------+\n| name | pc |\n+-----------------------+--------------+\n| Lord of the Ladybirds | 4.2000000000 |\n| Lord of the Ladybirds | 4.2000000000 |\n| Lady of the Flies | 2.6000000000 |\n| Lady of the Flies | 2.6000000000 |\n| Lady of the Flies | 2.6000000000 |\n+-----------------------+--------------+\n\nURL: https://mariadb.com/kb/en/percentile_cont/','','https://mariadb.com/kb/en/percentile_cont/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (791,41,'PERCENTILE_DISC','MariaDB starting with 10.3.3\n----------------------------\nThe PERCENTILE_DISC() window function was first introduced with in MariaDB\n10.3.3.\n\nSyntax\n------\n\nDescription\n-----------\n\nPERCENTILE_DISC() (standing for discrete percentile) is a window function\nwhich returns the first value in the set whose ordered position is the same or\nmore than the specified fraction.\n\nEssentially, the following process is followed to find the value to return:\n\n* Get the number of rows in the partition.\n* Walk through the partition, in order, until finding the the first row with\nCUME_DIST() >= function_argument.\n\nExamples\n--------\n\nCREATE TABLE book_rating (name CHAR(30), star_rating TINYINT);\n\nINSERT INTO book_rating VALUES (\'Lord of the Ladybirds\', 5);\nINSERT INTO book_rating VALUES (\'Lord of the Ladybirds\', 3);\nINSERT INTO book_rating VALUES (\'Lady of the Flies\', 1);\nINSERT INTO book_rating VALUES (\'Lady of the Flies\', 2);\nINSERT INTO book_rating VALUES (\'Lady of the Flies\', 5);\n\nSELECT name, PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY star_rating)\n OVER (PARTITION BY name) AS pc FROM book_rating;\n+-----------------------+------+\n| name | pc |\n+-----------------------+------+\n| Lord of the Ladybirds | 3 |\n| Lord of the Ladybirds | 3 |\n| Lady of the Flies | 2 |\n| Lady of the Flies | 2 |\n| Lady of the Flies | 2 |\n+-----------------------+------+\n5 rows in set (0.000 sec)\n\nSELECT name, PERCENTILE_DISC(0) WITHIN GROUP (ORDER BY star_rating) \n OVER (PARTITION BY name) AS pc FROM book_rating;\n+-----------------------+------+\n| name | pc |\n+-----------------------+------+\n| Lord of the Ladybirds | 3 |\n| Lord of the Ladybirds | 3 |\n| Lady of the Flies | 1 |\n| Lady of the Flies | 1 |\n| Lady of the Flies | 1 |\n+-----------------------+------+\n5 rows in set (0.000 sec)\n\nSELECT name, PERCENTILE_DISC(1) WITHIN GROUP (ORDER BY star_rating) \n OVER (PARTITION BY name) AS pc FROM book_rating;\n+-----------------------+------+\n| name | pc |\n+-----------------------+------+\n| Lord of the Ladybirds | 5 |\n| Lord of the Ladybirds | 5 |\n| Lady of the Flies | 5 |\n| Lady of the Flies | 5 |\n| Lady of the Flies | 5 |\n+-----------------------+------+\n5 rows in set (0.000 sec)\n\nSELECT name, PERCENTILE_DISC(0.6) WITHIN GROUP (ORDER BY star_rating) \n OVER (PARTITION BY name) AS pc FROM book_rating;\n+-----------------------+------+\n| name | pc |\n+-----------------------+------+\n| Lord of the Ladybirds | 5 |\n| Lord of the Ladybirds | 5 |\n| Lady of the Flies | 2 |\n| Lady of the Flies | 2 |\n| Lady of the Flies | 2 |\n+-----------------------+------\n\nURL: https://mariadb.com/kb/en/percentile_disc/','','https://mariadb.com/kb/en/percentile_disc/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (792,41,'RANK','Syntax\n------\n\nRANK() OVER (\n [ PARTITION BY partition_expression ]\n [ ORDER BY order_list ]\n)\n\nDescription\n-----------\n\nRANK() is a window function that displays the number of a given row, starting\nat one and following the ORDER BY sequence of the window function, with\nidentical values receiving the same result. It is similar to the ROW_NUMBER()\nfunction except that in that function, identical values will receive a\ndifferent row number for each result.\n\nExamples\n--------\n\nThe distinction between DENSE_RANK(), RANK() and ROW_NUMBER():\n\nCREATE TABLE student(course VARCHAR(10), mark int, name varchar(10));\n\nINSERT INTO student VALUES \n (\'Maths\', 60, \'Thulile\'),\n (\'Maths\', 60, \'Pritha\'),\n (\'Maths\', 70, \'Voitto\'),\n (\'Maths\', 55, \'Chun\'),\n (\'Biology\', 60, \'Bilal\'),\n (\'Biology\', 70, \'Roger\');\n\nSELECT \n RANK() OVER (PARTITION BY course ORDER BY mark DESC) AS rank,\n DENSE_RANK() OVER (PARTITION BY course ORDER BY mark DESC) AS dense_rank,\n ROW_NUMBER() OVER (PARTITION BY course ORDER BY mark DESC) AS row_num,\n course, mark, name\nFROM student ORDER BY course, mark DESC;\n+------+------------+---------+---------+------+---------+\n| rank | dense_rank | row_num | course | mark | name |\n+------+------------+---------+---------+------+---------+\n| 1 | 1 | 1 | Biology | 70 | Roger |\n| 2 | 2 | 2 | Biology | 60 | Bilal |\n| 1 | 1 | 1 | Maths | 70 | Voitto |\n| 2 | 2 | 2 | Maths | 60 | Thulile |\n| 2 | 2 | 3 | Maths | 60 | Pritha |\n| 4 | 3 | 4 | Maths | 55 | Chun |\n+------+------------+---------+---------+------+---------+\n\nURL: https://mariadb.com/kb/en/rank/','','https://mariadb.com/kb/en/rank/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (793,41,'ROW_NUMBER','Syntax\n------\n\nROW_NUMBER() OVER (\n [ PARTITION BY partition_expression ]\n [ ORDER BY order_list ]\n)\n\nDescription\n-----------\n\nROW_NUMBER() is a window function that displays the number of a given row,\nstarting at one and following the ORDER BY sequence of the window function,\nwith identical values receiving different row numbers. It is similar to the\nRANK() and DENSE_RANK() functions except that in that function, identical\nvalues will receive the same rank for each result.\n\nExamples\n--------\n\nThe distinction between DENSE_RANK(), RANK() and ROW_NUMBER():\n\nCREATE TABLE student(course VARCHAR(10), mark int, name varchar(10));\n\nINSERT INTO student VALUES \n (\'Maths\', 60, \'Thulile\'),\n (\'Maths\', 60, \'Pritha\'),\n (\'Maths\', 70, \'Voitto\'),\n (\'Maths\', 55, \'Chun\'),\n (\'Biology\', 60, \'Bilal\'),\n (\'Biology\', 70, \'Roger\');\n\nSELECT \n RANK() OVER (PARTITION BY course ORDER BY mark DESC) AS rank,\n DENSE_RANK() OVER (PARTITION BY course ORDER BY mark DESC) AS dense_rank,\n ROW_NUMBER() OVER (PARTITION BY course ORDER BY mark DESC) AS row_num,\n course, mark, name\nFROM student ORDER BY course, mark DESC;\n+------+------------+---------+---------+------+---------+\n| rank | dense_rank | row_num | course | mark | name |\n+------+------------+---------+---------+------+---------+\n| 1 | 1 | 1 | Biology | 70 | Roger |\n| 2 | 2 | 2 | Biology | 60 | Bilal |\n| 1 | 1 | 1 | Maths | 70 | Voitto |\n| 2 | 2 | 2 | Maths | 60 | Thulile |\n| 2 | 2 | 3 | Maths | 60 | Pritha |\n| 4 | 3 | 4 | Maths | 55 | Chun |\n+------+------------+---------+---------+------+---------+\n\nURL: https://mariadb.com/kb/en/row_number/','','https://mariadb.com/kb/en/row_number/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (794,41,'Aggregate Functions as Window Functions','It is possible to use aggregate functions as window functions. An aggregate\nfunction used as a window function must have the OVER clause. For example,\nhere\'s COUNT() used as a window function:\n\nselect COUNT(*) over (order by column) from table;\n\nMariaDB currently allows these aggregate functions to be used as window\nfunctions:\n\n* AVG\n* BIT_AND\n* BIT_OR\n* BIT_XOR\n* COUNT\n* JSON_ARRAYAGG\n* JSON_OBJECTAGG\n* MAX\n* MIN\n* STD\n* STDDEV\n* STDDEV_POP\n* STDDEV_SAMP\n* SUM\n* VAR_POP\n* VAR_SAMP\n* VARIANCE\n\nURL: https://mariadb.com/kb/en/aggregate-functions-as-window-functions/','','https://mariadb.com/kb/en/aggregate-functions-as-window-functions/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (795,41,'ColumnStore Window Functions','Introduction\n------------\n\nMariaDB ColumnStore provides support for window functions broadly following\nthe SQL 2003 specification. A window function allows for calculations relating\nto a window of data surrounding the current row in a result set. This\ncapability provides for simplified queries in support of common business\nquestions such as cumulative totals, rolling averages, and top 10 lists.\n\nAggregate functions are utilized for window functions however differ in\nbehavior from a group by query because the rows remain ungrouped. This\nprovides support for cumulative sums and rolling averages, for example.\n\nTwo key concepts for window functions are Partition and Frame:\n\n* A Partition is a group of rows, or window, that have the same value for a\nspecific column, for example a Partition can be created over a time period\nsuch as a quarter or lookup values.\n* The Frame for each row is a subset of the row\'s Partition. The frame\ntypically is dynamic allowing for a sliding frame of rows within the\nPartition. The Frame determines the range of rows for the windowing function.\nA Frame could be defined as the last X rows and next Y rows all the way up to\nthe entire Partition.\n\nWindow functions are applied after joins, group by, and having clauses are\ncalculated.\n\nSyntax\n------\n\nA window function is applied in the select clause using the following syntax:\n\nfunction_name ([expression [, expression ... ]]) OVER ( window_definition )\n\nwhere window_definition is defined as:\n\n[ PARTITION BY expression [, ...] ]\n[ ORDER BY expression [ ASC | DESC ] [ NULLS { FIRST | LAST } ] [, ...] ]\n[ frame_clause ]\n\nPARTITION BY:\n\n* Divides the window result set into groups based on one or more expressions.\n* An expression may be a constant, column, and non window function expressions.\n* A query is not limited to a single partition by clause. Different partition\nclauses can be used across different window function applications.\n* The partition by columns do not need to be in the select list but do need to\nbe available from the query result set.\n* If there is no PARTITION BY clause, all rows of the result set define the\ngroup.\n\nORDER BY\n\n* Defines the ordering of values within the partition.\n* Can be ordered by multiple keys which may be a constant, column or non\nwindow function expression.\n* The order by columns do not need to be in the select list but need to be\navailable from the query result set.\n* Use of a select column alias from the query is not supported.\n* ASC (default) and DESC options allow for ordering ascending or descending.\n* NULLS FIRST and NULL_LAST options specify whether null values come first or\nlast in the ordering sequence. NULLS_FIRST is the default for ASC order, and\nNULLS_LAST is the default for DESC order.\n\nand the optional frame_clause is defined as:\n\n{ RANGE | ROWS } frame_start\n{ RANGE | ROWS } BETWEEN frame_start AND frame_end\n\nand the optional frame_start and frame_end are defined as (value being a\nnumeric expression):\n\nUNBOUNDED PRECEDING\nvalue PRECEDING\nCURRENT ROW\nvalue FOLLOWING\nUNBOUNDED FOLLOWING\n\nRANGE/ROWS:\n\n* Defines the windowing clause for calculating the set of rows that the\nfunction applies to for calculating a given rows window function result.\n* Requires an ORDER BY clause to define the row order for the window.\n* ROWS specify the window in physical units, i.e. result set rows and must be\na constant or expression evaluating to a positive numeric value.\n* RANGE specifies the window as a logical offset. If the the expression\nevaluates to a numeric value then the ORDER BY expression must be a numeric or\nDATE type. If the expression evaluates to an interval value then the ORDER BY\nexpression must be a DATE data type.\n* UNBOUNDED PRECEDING indicates the window starts at the first row of the\npartition.\n* UNBOUNDED FOLLOWING indicates the window ends at the last row of the\npartition.\n* CURRENT ROW specifies the window start or ends at the current row or value.\n* If omitted, the default is ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW.\n\nSupported Functions\n-------------------\n\n+--------------------------------+-------------------------------------------+\n| Function | Description |\n+--------------------------------+-------------------------------------------+\n| AVG() | The average of all input values. |\n+--------------------------------+-------------------------------------------+\n| COUNT() | Number of input rows. |\n+--------------------------------+-------------------------------------------+\n| CUME_DIST() | Calculates the cumulative distribution, |\n| | or relative rank, of the current row to |\n| | other rows in the same partition. Number |\n| | of peer or preceding rows / number of |\n| | rows in partition. |\n+--------------------------------+-------------------------------------------+\n| DENSE_RANK() | Ranks items in a group leaving no gaps |\n| | in ranking sequence when there are ties. |\n+--------------------------------+-------------------------------------------+\n| FIRST_VALUE() | The value evaluated at the row that is |\n| | the first row of the window frame |\n| | (counting from 1); null if no such row. |\n+--------------------------------+-------------------------------------------+\n| LAG() | The value evaluated at the row that is |\n| | offset rows before the current row |\n| | within the partition; if there is no |\n| | such row, instead return default. Both |\n| | offset and default are evaluated with |\n| | respect to the current row. If omitted, |\n| | offset defaults to 1 and default to |\n| | null. LAG provides access to more than |\n| | one row of a table at the same time |\n| | without a self-join. Given a series of |\n| | rows returned from a query and a |\n| | position of the cursor, LAG provides |\n| | access to a row at a given physical |\n| | offset prior to that position. |\n+--------------------------------+-------------------------------------------+\n| LAST_VALUE() | The value evaluated at the row that is |\n| | the last row of the window frame |\n| | (counting from 1); null if no such row. |\n+--------------------------------+-------------------------------------------+\n| LEAD() | Provides access to a row at a given |\n| | physical offset beyond that position. |\n| | Returns value evaluated at the row that |\n| | is offset rows after the current row |\n| | within the partition; if there is no |\n| | such row, instead return default. Both |\n| | offset and default are evaluated with |\n| | respect to the current row. If omitted, |\n| | offset defaults to 1 and default to null. |\n+--------------------------------+-------------------------------------------+\n| MAX() | Maximum value of expression across all |\n| | input values. |\n+--------------------------------+-------------------------------------------+\n| MEDIAN() | An inverse distribution function that |\n| | assumes a continuous distribution model. |\n| | It takes a numeric or datetime value and |\n| | returns the middle value or an |\n| | interpolated value that would be the |\n| | middle value once the values are sorted. |\n| | Nulls are ignored in the calculation. |\n+--------------------------------+-------------------------------------------+\n| MIN() | Minimum value of expression across all |\n| | input values. |\n+--------------------------------+-------------------------------------------+\n| NTH_VALUE() | The value evaluated at the row that is |\n| | the nth row of the window frame |\n| | (counting from 1); null if no such row. |\n+--------------------------------+-------------------------------------------+\n| NTILE() | Divides an ordered data set into a |\n| | number of buckets indicated by expr and |\n| | assigns the appropriate bucket number to |\n| | each row. The buckets are numbered 1 |\n| | through expr. The expr value must |\n| | resolve to a positive constant for each |\n| | partition. Integer ranging from 1 to the |\n| | argument value, dividing the partition |\n| | as equally as possible. |\n+--------------------------------+-------------------------------------------+\n| PERCENT_RANK() | relative rank of the current row: (rank |\n| | - 1) / (total rows - 1). |\n+--------------------------------+-------------------------------------------+\n| PERCENTILE_CONT() | An inverse distribution function that |\n| | assumes a continuous distribution model. |\n| | It takes a percentile value and a sort |\n| | specification, and returns an |\n| | interpolated value that would fall into |\n| | that percentile value with respect to |\n| | the sort specification. Nulls are |\n| | ignored in the calculation. |\n+--------------------------------+-------------------------------------------+\n| PERCENTILE_DISC() | An inverse distribution function that |\n| | assumes a discrete distribution model. |\n| | It takes a percentile value and a sort |\n| | specification and returns an element |\n| | from the set. Nulls are ignored in the |\n| | calculation. |\n+--------------------------------+-------------------------------------------+\n| RANK() | rank of the current row with gaps; same |\n| | as row_number of its first peer. |\n+--------------------------------+-------------------------------------------+\n| ROW_NUMBER() | number of the current row within its |\n| | partition, counting from 1 |\n+--------------------------------+-------------------------------------------+\n| STDDEV() STDDEV_POP() | Computes the population standard |\n| | deviation and returns the square root of |\n| | the population variance. |\n+--------------------------------+-------------------------------------------+\n| STDDEV_SAMP() | Computes the cumulative sample standard |\n| | deviation and returns the square root of |\n| | the sample variance. |\n+--------------------------------+-------------------------------------------+\n| SUM() | Sum of expression across all input |\n| | values. |\n+--------------------------------+-------------------------------------------+\n| VARIANCE() VAR_POP() | Population variance of the input values |\n| | (square of the population standard |\n| | deviation). |\n+--------------------------------+-------------------------------------------+\n| VAR_SAMP() | Sample variance of the input values |\n| | (square of the sample standard |\n| | deviation). |\n+--------------------------------+-------------------------------------------+\n\nExamples\n--------\n\nExample Schema\n--------------\n\nThe examples are all based on the following simplified sales opportunity table:\n\ncreate table opportunities (\nid int,\naccountName varchar(20),\nname varchar(128),\nowner varchar(7),\namount decimal(10,2),\ncloseDate date,\nstageName varchar(11)\n) engine=columnstore;\n\nSome example values are (thanks to https://www.mockaroo.com for sample data\ngeneration):\n\n+----+---------------+------+--------+---------+-------------+-------------+\n| id | accountName | name | owner | amount | closeDate | stageName |\n+----+---------------+------+--------+---------+-------------+-------------+\n| 1 | Browseblab | Mult | Bob | 26444.8 | 2016-10-20 | Negotiating |','','https://mariadb.com/kb/en/window-functions-columnstore-window-functions/');
+update help_topic set description = CONCAT(description, '\n| | | -lat | | | | |\n| | | ral | | | | |\n| | | exec | | | | |\n| | | tive | | | | |\n| | | func | | | | |\n| | | ion | | | | |\n+----+---------------+------+--------+---------+-------------+-------------+\n| 2 | Mita | Orga | Maria | 477878. | 2016-11-28 | ClosedWon |\n| | | ic | | 1 | | |\n| | | dema | | | | |\n| | | d-dr | | | | |\n| | | ven | | | | |\n| | | benc | | | | |\n| | | mark | | | | |\n+----+---------------+------+--------+---------+-------------+-------------+\n| 3 | Miboo | De-e | Olivie | 80181.7 | 2017-01-05 | ClosedWon |\n| | | gine | | | | |\n| | | red | | | | |\n| | | hybr | | | | |\n| | | d | | | | |\n| | | grou | | | | |\n| | | ware | | | | |\n+----+---------------+------+--------+---------+-------------+-------------+\n| 4 | Youbridge | Ente | Chris | 946245. | 2016-07-02 | ClosedWon |\n| | | pris | | 9 | | |\n| | | -wid | | | | |\n| | | | | | | |\n| | | bott | | | | |\n| | | m-li | | | | |\n| | | e | | | | |\n| | | Grap | | | | |\n| | | ic | | | | |\n| | | Inte | | | | |\n| | | face | | | | |\n+----+---------------+------+--------+---------+-------------+-------------+\n| 5 | Skyba | Reve | Maria | 696241. | 2017-02-17 | Negotiating |\n| | | se-e | | 2 | | |\n| | | gine | | | | |\n| | | red | | | | |\n| | | fres | | | | |\n| | | -thi | | | | |\n| | | king | | | | |\n| | | stan | | | | |\n| | | ardi | | | | |\n| | | atio | | | | |\n| | | | | | | |\n+----+---------------+------+--------+---------+-------------+-------------+\n| 6 | Eayo | Fund | Bob | 765605. | 2016-08-27 | Prospecting |\n| | | ment | | 2 | | |\n| | | l | | | | |\n| | | well | | | | |\n| | | modu | | | | |\n| | | ated | | | | |\n| | | arti | | | | |\n| | | icia | | | | |\n| | | | | | | |\n| | | inte | | | | |\n| | | lige | | | | |\n| | | ce | | | | |\n+----+---------------+------+--------+---------+-------------+-------------+\n| 7 | Yotz | Exte | Chris | 319624. | 2017-01-06 | ClosedLost |\n| | | ded | | 0 | | |\n| | | seco | | | | |\n| | | dary | | | | |\n| | | infr | | | | |\n| | | stru | | | | |\n| | | ture | | | | |\n+----+---------------+------+--------+---------+-------------+-------------+\n| 8 | Oloo | Conf | Chris | 321016. | 2017-03-08 | ClosedLost |\n| | | gura | | 6 | | |\n| | | le | | | | |\n| | | web- | | | | |\n| | | nabl | | | | |\n| | | d | | | | |\n| | | data | | | | |\n| | | ware | | | | |\n| | | ouse | | | | |\n+----+---------------+------+--------+---------+-------------+-------------+\n| 9 | Kaymbo | Mult | Bob | 690881. | 2017-01-02 | Developing |\n| | | -lat | | 1 | | |\n| | | ral | | | | |\n| | | web- | | | | |\n| | | nabl | | | | |\n| | | d | | | | |\n| | | defi | | | | |\n| | | itio | | | | |\n| | | | | | | |\n+----+---------------+------+--------+---------+-------------+-------------+\n| 10 | Rhyloo | Publ | Chris | 965477. | 2016-11-07 | Prospecting |\n| | | c-ke | | 4 | | |\n| | | | | | | |\n| | | cohe | | | | |\n| | | ent | | | | |\n| | | infr | | | | |\n| | | stru | | | | |\n| | | ture | | | | |\n+----+---------------+------+--------+---------+-------------+-------------+\n\nThe schema, sample data, and queries are available as an attachment to this\narticle.\n\nCumulative Sum and Running Max Example\n--------------------------------------\n\nWindow functions can be used to achieve cumulative / running calculations on a\ndetail report. In this case a won opportunity report for a 7 day period adds\ncolumns to show the accumulated won amount as well as the current highest\nopportunity amount in preceding rows.\n\nselect owner, \naccountName, \nCloseDate, \namount, \nsum(amount) over (order by CloseDate rows between unbounded preceding and\ncurrent row) cumeWon, \nmax(amount) over (order by CloseDate rows between unbounded preceding and\ncurrent row) runningMax\nfrom opportunities \nwhere stageName=\'ClosedWon\' \nand closeDate >= \'2016-10-02\' and closeDate <= \'2016-10-09\' \norder by CloseDate;\n\nwith example results:\n\n+--------+---------------+-------------+---------+----------+--------------+\n| owner | accountName | CloseDate | amount | cumeWon | runningMax |\n+--------+---------------+-------------+---------+----------+--------------+\n| Bill | Babbleopia | 2016-10-02 | 437636. | 437636.4 | 437636.47 |\n| | | | 7 | | |\n+--------+---------------+-------------+---------+----------+--------------+\n| Bill | Thoughtworks | 2016-10-04 | 146086. | 583722.9 | 437636.47 |\n| | | | 1 | | |\n+--------+---------------+-------------+---------+----------+--------------+\n| Olivie | Devpulse | 2016-10-05 | 834235. | 1417958. | 834235.93 |\n| | | | 3 | 1 | |\n+--------+---------------+-------------+---------+----------+--------------+\n| Chris | Linkbridge | 2016-10-07 | 539977. | 2458738. | 834235.93 |\n| | | | 5 | 5 | |\n+--------+---------------+-------------+---------+----------+--------------+\n| Olivie | Trupe | 2016-10-07 | 500802. | 1918761. | 834235.93 |\n| | | | 9 | 0 | |\n+--------+---------------+-------------+---------+----------+--------------+\n| Bill | Latz | 2016-10-08 | 857254. | 3315993. | 857254.87 |\n| | | | 7 | 2 | |\n+--------+---------------+-------------+---------+----------+--------------+\n| Chris | Avamm | 2016-10-09 | 699566. | 4015560. | 857254.87 |\n| | | | 6 | 8 | |\n+--------+---------------+-------------+---------+----------+--------------+\n\nPartitioned Cumulative Sum and Running Max Example\n--------------------------------------------------\n\nThe above example can be partitioned, so that the window functions are over a\nparticular field grouping such as owner and accumulate within that grouping.\nThis is achieved by adding the syntax \"partition by <columns>\" in the window\nfunction clause.\n\nselect owner, \naccountName, \nCloseDate, \namount, \nsum(amount) over (partition by owner order by CloseDate rows between unbounded\npreceding and current row) cumeWon, \nmax(amount) over (partition by owner order by CloseDate rows between unbounded\npreceding and current row) runningMax \nfrom opportunities \nwhere stageName=\'ClosedWon\' \nand closeDate >= \'2016-10-02\' and closeDate <= \'2016-10-09\' \norder by owner, CloseDate;\n\nwith example results:\n\n+--------+---------------+-------------+---------+----------+--------------+\n| owner | accountName | CloseDate | amount | cumeWon | runningMax |\n+--------+---------------+-------------+---------+----------+--------------+\n| Bill | Babbleopia | 2016-10-02 | 437636. | 437636.4 | 437636.47 |\n| | | | 7 | | |\n+--------+---------------+-------------+---------+----------+--------------+\n| Bill | Thoughtworks | 2016-10-04 | 146086. | 583722.9 | 437636.47 |\n| | | | 1 | | |\n+--------+---------------+-------------+---------+----------+--------------+\n| Bill | Latz | 2016-10-08 | 857254. | 1440977. | 857254.87 |\n| | | | 7 | 5 | |\n+--------+---------------+-------------+---------+----------+--------------+\n| Chris | Linkbridge | 2016-10-07 | 539977. | 539977.4 | 539977.45 |\n| | | | 5 | | |\n+--------+---------------+-------------+---------+----------+--------------+\n| Chris | Avamm | 2016-10-09 | 699566. | 1239544. | 699566.86 |\n| | | | 6 | 1 | |\n+--------+---------------+-------------+---------+----------+--------------+\n| Olivie | Devpulse | 2016-10-05 | 834235. | 834235.9 | 834235.93 |\n| | | | 3 | | |\n+--------+---------------+-------------+---------+----------+--------------+\n| Olivie | Trupe | 2016-10-07 | 500802. | 1335038. | 834235.93 |\n| | | | 9 | 2 | |\n+--------+---------------+-------------+---------+----------+--------------+\n\nRanking / Top Results\n---------------------\n\nThe rank window function allows for ranking or assigning a numeric order value\nbased on the window function definition. Using the Rank() function will result\nin the same value for ties / equal values and the next rank value skipped. The\nDense_Rank() function behaves similarly except the next consecutive number is\nused after a tie rather than skipped. The Row_Number() function will provide a\nunique ordering value. The example query shows the Rank() function being\napplied to rank sales reps by the number of opportunities for Q4 2016.\n\nselect owner, \nwonCount, \nrank() over (order by wonCount desc) rank \nfrom (\n select owner,\n count(*) wonCount\n from opportunities\n where stageName=\'ClosedWon\'\n and closeDate >= \'2016-10-01\' and closeDate < \'2016-12-31\'\n group by owner\n) t\norder by rank;\n\nwith example results (note the query is technically incorrect by using\ncloseDate < \'2016-12-31\' however this creates a tie scenario for illustrative\npurposes):\n\n+----------------------+----------------------------------+------------------+\n| owner | wonCount | rank |\n+----------------------+----------------------------------+------------------+\n| Bill | 19 | 1 |\n+----------------------+----------------------------------+------------------+\n| Chris | 15 | 2 |') WHERE help_topic_id = 795;
+update help_topic set description = CONCAT(description, '\n+----------------------+----------------------------------+------------------+\n| Maria | 14 | 3 |\n+----------------------+----------------------------------+------------------+\n| Bob | 14 | 3 |\n+----------------------+----------------------------------+------------------+\n| Olivier | 10 | 5 |\n+----------------------+----------------------------------+------------------+\n\nIf the dense_rank function is used the rank values would be 1,2,3,3,4 and for\nthe row_number function the values would be 1,2,3,4,5.\n\nFirst and Last Values\n---------------------\n\nThe first_value and last_value functions allow determining the first and last\nvalues of a given range. Combined with a group by this allows summarizing\nopening and closing values. The example shows a more complex case where\ndetailed information is presented for first and last opportunity by quarter.\n\nselect a.year, \na.quarter, \nf.accountName firstAccountName, \nf.owner firstOwner, \nf.amount firstAmount, \nl.accountName lastAccountName, \nl.owner lastOwner, \nl.amount lastAmount \nfrom (\n select year,\n quarter,\n min(firstId) firstId,\n min(lastId) lastId\n from (\n select year(closeDate) year,\n quarter(closeDate) quarter,\n first_value(id) over (partition by year(closeDate), quarter(closeDate)\norder by closeDate rows between unbounded preceding and current row) firstId, \n last_value(id) over (partition by year(closeDate), quarter(closeDate)\norder by closeDate rows between current row and unbounded following) lastId \n from opportunities where stageName=\'ClosedWon\'\n ) t\n group by year, quarter order by year,quarter\n) a \njoin opportunities f on a.firstId = f.id \njoin opportunities l on a.lastId = l.id \norder by year, quarter;\n\nwith example results:\n\n+----+------+------------+--------+---------+-----------+-------+--------+\n| ye | quar | firstAccou | firstO | firstAm | lastAccou | lastO | lastAm |\n| r | er | tName | ner | unt | tName | ner | unt |\n+----+------+------------+--------+---------+-----------+-------+--------+\n| 20 | 3 | Skidoo | Bill | 523295. | Skipstorm | Bill | 151420 |\n| 6 | | | | 7 | | | 86 |\n+----+------+------------+--------+---------+-----------+-------+--------+\n| 20 | 4 | Skimia | Chris | 961513. | Avamm | Maria | 112493 |\n| 6 | | | | 9 | | | 65 |\n+----+------+------------+--------+---------+-----------+-------+--------+\n| 20 | 1 | Yombu | Bob | 536875. | Skaboo | Chris | 270273 |\n| 7 | | | | 1 | | | 08 |\n+----+------+------------+--------+---------+-----------+-------+--------+\n\nPrior and Next Example\n----------------------\n\nSometimes it useful to understand the previous and next values in the context\nof a given row. The lag and lead window functions provide this capability. By\ndefault the offset is one providing the prior or next value but can also be\nprovided to get a larger offset. The example query is a report of\nopportunities by account name showing the opportunity amount, and the prior\nand next opportunity amount for that account by close date.\n\nselect accountName, \ncloseDate, \namount currentOppAmount, \nlag(amount) over (partition by accountName order by closeDate) priorAmount,\nlead(amount) over (partition by accountName order by closeDate) nextAmount \nfrom opportunities \norder by accountName, closeDate \nlimit 9;\n\nwith example results:\n\n+--------------+-----------+-------------------+--------------+-------------+\n| accountName | closeDate | currentOppAmount | priorAmount | nextAmount |\n+--------------+-----------+-------------------+--------------+-------------+\n| Abata | 2016-09-1 | 645098.45 | NULL | 161086.82 |\n| | | | | |\n+--------------+-----------+-------------------+--------------+-------------+\n| Abata | 2016-10-1 | 161086.82 | 645098.45 | 350235.75 |\n| | | | | |\n+--------------+-----------+-------------------+--------------+-------------+\n| Abata | 2016-12-1 | 350235.75 | 161086.82 | 878595.89 |\n| | | | | |\n+--------------+-----------+-------------------+--------------+-------------+\n| Abata | 2016-12-3 | 878595.89 | 350235.75 | 922322.39 |\n| | | | | |\n+--------------+-----------+-------------------+--------------+-------------+\n| Abata | 2017-01-2 | 922322.39 | 878595.89 | NULL |\n| | | | | |\n+--------------+-----------+-------------------+--------------+-------------+\n| Abatz | 2016-10-1 | 795424.15 | NULL | NULL |\n| | | | | |\n+--------------+-----------+-------------------+--------------+-------------+\n| Agimba | 2016-07-0 | 288974.84 | NULL | 914461.49 |\n| | | | | |\n+--------------+-----------+-------------------+--------------+-------------+\n| Agimba | 2016-09-0 | 914461.49 | 288974.84 | 176645.52 |\n| | | | | |\n+--------------+-----------+-------------------+--------------+-------------+\n| Agimba | 2016-09-2 | 176645.52 | 914461.49 | NULL |\n| | | | | |\n+--------------+-----------+-------------------+--------------+-------------+\n\nQuartiles Example\n-----------------\n\nThe NTile window function allows for breaking up a data set into portions\nassigned a numeric value to each portion of the range. NTile(4) breaks the\ndata up into quartiles (4 sets). The example query produces a report of all\nopportunities summarizing the quartile boundaries of amount values.\n\nselect t.quartile, \nmin(t.amount) min, \nmax(t.amount) max \nfrom (\n select amount,\n ntile(4) over (order by amount asc) quartile\n from opportunities\n where closeDate >= \'2016-10-01\' and closeDate <= \'2016-12-31\'\n ) t\ngroup by quartile \norder by quartile;\n\nWith example results:\n\n+-----------------------------------------+----------------+----------------+\n| quartile | min | max |\n+-----------------------------------------+----------------+----------------+\n| 1 | 6337.15 | 287634.01 |\n+-----------------------------------------+----------------+----------------+\n| 2 | 288796.14 | 539977.45 |\n+-----------------------------------------+----------------+----------------+\n| 3 | 540070.04 | 748727.51 |\n+-----------------------------------------+----------------+----------------+\n| 4 | 753670.77 | 998864.47 |\n+-----------------------------------------+----------------+----------------+\n\nPercentile Example\n------------------\n\nThe percentile functions have a slightly different syntax from other window\nfunctions as can be seen in the example below. These functions can be only\napplied against numeric values. The argument to the function is the percentile\nto evaluate. Following \'within group\' is the sort expression which indicates\nthe sort column and optionally order. Finally after \'over\' is an optional\npartition by clause, for no partition clause use \'over ()\'. The example below\nutilizes the value 0.5 to calculate the median opportunity amount in the rows.\nThe values differ sometimes because percentile_cont will return the average of\nthe 2 middle rows for an even data set while percentile_desc returns the first\nencountered in the sort.\n\nselect owner, \naccountName, \nCloseDate, \namount,\npercentile_cont(0.5) within group (order by amount) over (partition by owner)\npct_cont,\npercentile_disc(0.5) within group (order by amount) over (partition by owner)\npct_disc\nfrom opportunities \nwhere stageName=\'ClosedWon\' \nand closeDate >= \'2016-10-02\' and closeDate <= \'2016-10-09\' \norder by owner, CloseDate;\n\nWith example results:\n\n+--------+----------------+-------------+---------+------------+------------+\n| owner | accountName | CloseDate | amount | pct_cont | pct_disc |\n+--------+----------------+-------------+---------+------------+------------+\n| Bill | Babbleopia | 2016-10-02 | 437636. | 437636.470 | 437636.47 |\n| | | | 7 | 000000 | |\n+--------+----------------+-------------+---------+------------+------------+\n| Bill | Thoughtworks | 2016-10-04 | 146086. | 437636.470 | 437636.47 |\n| | | | 1 | 000000 | |\n+--------+----------------+-------------+---------+------------+------------+\n| Bill | Latz | 2016-10-08 | 857254. | 437636.470 | 437636.47 |\n| | | | 7 | 000000 | |\n+--------+----------------+-------------+---------+------------+------------+\n| Chris | Linkbridge | 2016-10-07 | 539977. | 619772.155 | 539977.45 |\n| | | | 5 | 000000 | |\n+--------+----------------+-------------+---------+------------+------------+\n| Chris | Avamm | 2016-10-09 | 699566. | 619772.155 | 539977.45 |\n| | | | 6 | 000000 | |\n+--------+----------------+-------------+---------+------------+------------+\n| Olivie | Devpulse | 2016-10-05 | 834235. | 667519.110 | 500802.29 |\n| | | | 3 | 000000 | |\n+--------+----------------+-------------+---------+------------+------------+\n| Olivie | Trupe | 2016-10-07 | 500802. | 667519.110 | 500802.29 |\n| | | | 9 | 000000 | |\n+--------+----------------+-------------+---------+------------+------------+\n\nURL: https://mariadb.com/kb/en/window-functions-columnstore-window-functions/') WHERE help_topic_id = 795;
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (796,41,'Window Frames','Syntax\n------\n\nframe_clause:\n {ROWS | RANGE} {frame_border | BETWEEN frame_border AND frame_border}\n\nframe_border:\n | UNBOUNDED PRECEDING\n | UNBOUNDED FOLLOWING\n | CURRENT ROW\n | expr PRECEDING\n | expr FOLLOWING\n\nDescription\n-----------\n\nA basic overview of window functions is described in Window Functions\nOverview. Window frames expand this functionality by allowing the function to\ninclude a specified a number of rows around the current row.\n\nThese include:\n\n* All rows before the current row (UNBOUNDED PRECEDING), for example RANGE\nBETWEEN UNBOUNDED PRECEDING AND CURRENT ROW\n* All rows after the current row (UNBOUNDED FOLLOWING), for example RANGE\nBETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING\n* A set number of rows before the current row (expr PRECEDING) for example\nRANGE BETWEEN 6 PRECEDING AND CURRENT ROW\n* A set number of rows after the current row (expr PRECEDING AND expr\nFOLLOWING) for example RANGE BETWEEN CURRENT ROW AND 2 FOLLOWING\n* A specified number of rows both before and after the current row, for\nexample RANGE BETWEEN 6 PRECEDING AND 3 FOLLOWING\n\nThe following functions operate on window frames:\n\n* AVG\n* BIT_AND\n* BIT_OR\n* BIT_XOR\n* COUNT\n* LEAD\n* MAX\n* MIN\n* NTILE\n* STD\n* STDDEV\n* STDDEV_POP\n* STDDEV_SAMP\n* SUM\n* VAR_POP\n* VAR_SAMP\n* VARIANCE\n\nWindow frames are determined by the frame_clause in the window function\nrequest.\n\nTake the following example:\n\nCREATE TABLE `student_test` (\n name char(10),\n test char(10),\n score tinyint(4)\n);\n\nINSERT INTO student_test VALUES \n (\'Chun\', \'SQL\', 75), (\'Chun\', \'Tuning\', 73),\n (\'Esben\', \'SQL\', 43), (\'Esben\', \'Tuning\', 31),\n (\'Kaolin\', \'SQL\', 56), (\'Kaolin\', \'Tuning\', 88),\n (\'Tatiana\', \'SQL\', 87);\n\nSELECT name, test, score, SUM(score) \n OVER () AS total_score\n FROM student_test;\n+---------+--------+-------+-------------+\n| name | test | score | total_score |\n+---------+--------+-------+-------------+\n| Chun | SQL | 75 | 453 |\n| Chun | Tuning | 73 | 453 |\n| Esben | SQL | 43 | 453 |\n| Esben | Tuning | 31 | 453 |\n| Kaolin | SQL | 56 | 453 |\n| Kaolin | Tuning | 88 | 453 |\n| Tatiana | SQL | 87 | 453 |\n+---------+--------+-------+-------------+\n\nBy not specifying an OVER clause, the SUM function is run over the entire\ndataset. However, if we specify an ORDER BY condition based on score (and\norder the entire result in the same way for clarity), the following result is\nreturned:\n\nSELECT name, test, score, SUM(score) \n OVER (ORDER BY score) AS total_score\n FROM student_test ORDER BY score;\n+---------+--------+-------+-------------+\n| name | test | score | total_score |\n+---------+--------+-------+-------------+\n| Esben | Tuning | 31 | 31 |\n| Esben | SQL | 43 | 74 |\n| Kaolin | SQL | 56 | 130 |\n| Chun | Tuning | 73 | 203 |\n| Chun | SQL | 75 | 278 |\n| Tatiana | SQL | 87 | 365 |\n| Kaolin | Tuning | 88 | 453 |\n+---------+--------+-------+-------------+\n\nThe total_score column represents a running total of the current row, and all\nprevious rows. The window frame in this example expands as the function\nproceeds.\n\nThe above query makes use of the default to define the window frame. It could\nbe written explicitly as follows:\n\nSELECT name, test, score, SUM(score) \n OVER (ORDER BY score RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS\ntotal_score \n FROM student_test ORDER BY score;\n+---------+--------+-------+-------------+\n| name | test | score | total_score |\n+---------+--------+-------+-------------+\n| Esben | Tuning | 31 | 31 |\n| Esben | SQL | 43 | 74 |\n| Kaolin | SQL | 56 | 130 |\n| Chun | Tuning | 73 | 203 |\n| Chun | SQL | 75 | 278 |\n| Tatiana | SQL | 87 | 365 |\n| Kaolin | Tuning | 88 | 453 |\n+---------+--------+-------+-------------+\n\nLet\'s look at some alternatives:\n\nFirstly, applying the window function to the current row and all following\nrows can be done with the use of UNBOUNDED FOLLOWING:\n\nSELECT name, test, score, SUM(score) \n OVER (ORDER BY score RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) AS\ntotal_score \n FROM student_test ORDER BY score;\n+---------+--------+-------+-------------+\n| name | test | score | total_score |\n+---------+--------+-------+-------------+\n| Esben | Tuning | 31 | 453 |\n| Esben | SQL | 43 | 422 |\n| Kaolin | SQL | 56 | 379 |\n| Chun | Tuning | 73 | 323 |\n| Chun | SQL | 75 | 250 |\n| Tatiana | SQL | 87 | 175 |\n| Kaolin | Tuning | 88 | 88 |\n+---------+--------+-------+-------------+\n\nIt\'s possible to specify a number of rows, rather than the entire unbounded\nfollowing or preceding set. The following example takes the current row, as\nwell as the previous row:\n\nSELECT name, test, score, SUM(score) \n OVER (ORDER BY score ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS\ntotal_score \n FROM student_test ORDER BY score;\n+---------+--------+-------+-------------+\n| name | test | score | total_score |\n+---------+--------+-------+-------------+\n| Esben | Tuning | 31 | 31 |\n| Esben | SQL | 43 | 74 |\n| Kaolin | SQL | 56 | 99 |\n| Chun | Tuning | 73 | 129 |\n| Chun | SQL | 75 | 148 |\n| Tatiana | SQL | 87 | 162 |\n| Kaolin | Tuning | 88 | 175 |\n+---------+--------+-------+-------------+\n\nThe current row and the following row:\n\nSELECT name, test, score, SUM(score) \n OVER (ORDER BY score ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) AS\ntotal_score \n FROM student_test ORDER BY score;\n+---------+--------+-------+-------------+\n| name | test | score | total_score |\n+---------+--------+-------+-------------+\n| Esben | Tuning | 31 | 74 |\n| Esben | SQL | 43 | 130 |\n| Kaolin | SQL | 56 | 172 |\n| Chun | Tuning | 73 | 204 |\n| Chun | SQL | 75 | 235 |\n| Tatiana | SQL | 87 | 250 |\n| Kaolin | Tuning | 88 | 175 |\n+---------+--------+-------+-------------+\n\nURL: https://mariadb.com/kb/en/window-frames/','','https://mariadb.com/kb/en/window-frames/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (797,42,'SPIDER_BG_DIRECT_SQL','Syntax\n------\n\nSPIDER_BG_DIRECT_SQL(\'sql\', \'tmp_table_list\', \'parameters\')\n\nDescription\n-----------\n\nExecutes the given SQL statement in the background on the remote server, as\ndefined in the parameters listing. If the query returns a result-set, it\nsttores the results in the given temporary table. When the given SQL statement\nexecutes successfully, this function returns the number of called UDF\'s. It\nreturns 0 when the given SQL statement fails.\n\nThis function is a UDF installed with the Spider storage engine.\n\nExamples\n--------\n\nSELECT SPIDER_BG_DIRECT_SQL(\'SELECT * FROM example_table\', \'\', \n \'srv \"node1\", port \"8607\"\') AS \"Direct Query\";\n+--------------+\n| Direct Query | \n+--------------+\n| 1 |\n+--------------+\n\nParameters\n----------\n\nerror_rw_mode\n-------------\n\n* Description: Returns empty results on network error.\n0 : Return error on getting network error.\n1: Return 0 records on getting network error.\n\n* Default Table Value: 0\n* DSN Parameter Name: erwm\n\nURL: https://mariadb.com/kb/en/spider_bg_direct_sql/','','https://mariadb.com/kb/en/spider_bg_direct_sql/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (798,42,'SPIDER_COPY_TABLES','Syntax\n------\n\nSPIDER_COPY_TABLES(spider_table_name, \n source_link_id, destination_link_id_list [,parameters])\n\nDescription\n-----------\n\nA UDF installed with the Spider Storage Engine, this function copies table\ndata from source_link_id to destination_link_id_list. The service does not\nneed to be stopped in order to copy.\n\nIf the Spider table is partitioned, the name must be of the format\ntable_name#P#partition_name. The partition name can be viewed in the\nmysql.spider_tables table, for example:\n\nSELECT table_name FROM mysql.spider_tables;\n+-------------+\n| table_name |\n+-------------+\n| spt_a#P#pt1 |\n| spt_a#P#pt2 |\n| spt_a#P#pt3 |\n+-------------+\n\nReturns 1 if the data was copied successfully, or 0 if copying the data failed.\n\nURL: https://mariadb.com/kb/en/spider_copy_tables/','','https://mariadb.com/kb/en/spider_copy_tables/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (799,42,'SPIDER_DIRECT_SQL','Syntax\n------\n\nSPIDER_DIRECT_SQL(\'sql\', \'tmp_table_list\', \'parameters\')\n\nDescription\n-----------\n\nA UDF installed with the Spider Storage Engine, this function is used to\nexecute the SQL string sql on the remote server, as defined in parameters. If\nany resultsets are returned, they are stored in the tmp_table_list.\n\nThe function returns 1 if the SQL executes successfully, or 0 if it fails.\n\nExamples\n--------\n\nSELECT SPIDER_DIRECT_SQL(\'SELECT * FROM s\', \'\', \'srv \"node1\", port \"8607\"\');\n+----------------------------------------------------------------------+\n| SPIDER_DIRECT_SQL(\'SELECT * FROM s\', \'\', \'srv \"node1\", port \"8607\"\') |\n+----------------------------------------------------------------------+\n| 1 |\n+----------------------------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/spider_direct_sql/','','https://mariadb.com/kb/en/spider_direct_sql/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (800,42,'SPIDER_FLUSH_TABLE_MON_CACHE','Syntax\n------\n\nSPIDER_FLUSH_TABLE_MON_CACHE()\n\nDescription\n-----------\n\nA UDF installed with the Spider Storage Engine, this function is used for\nrefreshing monitoring server information. It returns a value of 1.\n\nExamples\n--------\n\nSELECT SPIDER_FLUSH_TABLE_MON_CACHE();\n+--------------------------------+\n| SPIDER_FLUSH_TABLE_MON_CACHE() |\n+--------------------------------+\n| 1 |\n+--------------------------------+\n\nURL: https://mariadb.com/kb/en/spider_flush_table_mon_cache/','','https://mariadb.com/kb/en/spider_flush_table_mon_cache/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (801,43,'COLUMN_ADD','Syntax\n------\n\nCOLUMN_ADD(dyncol_blob, column_nr, value [as type], [column_nr, value [as\ntype]]...);\nCOLUMN_ADD(dyncol_blob, column_name, value [as type], [column_name, value [as\ntype]]...);\n\nDescription\n-----------\n\nAdds or updates dynamic columns.\n\n* dyncol_blob must be either a valid dynamic columns blob (for example,\nCOLUMN_CREATE returns such blob), or an empty string.\n* column_name specifies the name of the column to be added. If dyncol_blob\nalready has a column with this name, it will be overwritten.\n* value specifies the new value for the column. Passing a NULL value will\ncause the column to be deleted.\n* as type is optional. See #datatypes section for a discussion about types.\n\nThe return value is a dynamic column blob after the modifications.\n\nExamples\n--------\n\nUPDATE t1 SET dyncol_blob=COLUMN_ADD(dyncol_blob, \"column_name\", \"value\")\nWHERE id=1;\n\nNote: COLUMN_ADD() is a regular function (just like CONCAT()), hence, in order\nto update the value in the table you have to use the UPDATE ... SET\ndynamic_col=COLUMN_ADD(dynamic_col, ....) pattern.\n\nURL: https://mariadb.com/kb/en/column_add/','','https://mariadb.com/kb/en/column_add/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (802,43,'COLUMN_CHECK','Syntax\n------\n\nCOLUMN_CHECK(dyncol_blob);\n\nDescription\n-----------\n\nCheck if dyncol_blob is a valid packed dynamic columns blob. Return value of 1\nmeans the blob is valid, return value of 0 means it is not.\n\nRationale: Normally, one works with valid dynamic column blobs. Functions like\nCOLUMN_CREATE, COLUMN_ADD, COLUMN_DELETE always return valid dynamic column\nblobs. However, if a dynamic column blob is accidentally truncated, or\ntranscoded from one character set to another, it will be corrupted. This\nfunction can be used to check if a value in a blob field is a valid dynamic\ncolumn blob.\n\nURL: https://mariadb.com/kb/en/column_check/','','https://mariadb.com/kb/en/column_check/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (803,43,'COLUMN_CREATE','Syntax\n------\n\nCOLUMN_CREATE(column_nr, value [as type], [column_nr, value [as type]]...);\nCOLUMN_CREATE(column_name, value [as type], [column_name, value [as type]]...);\n\nDescription\n-----------\n\nReturns a dynamic columns blob that stores the specified columns with values.\n\nThe return value is suitable for\n\n* storing in a table\n* further modification with other dynamic columns functions\n\nThe as type part allows one to specify the value type. In most cases, this is\nredundant because MariaDB will be able to deduce the type of the value.\nExplicit type specification may be needed when the type of the value is not\napparent. For example, a literal \'2012-12-01\' has a CHAR type by default, one\nwill need to specify \'2012-12-01\' AS DATE to have it stored as a date. See\nDynamic Columns:Datatypes for further details.\n\nExamples\n--------\n\nINSERT INTO tbl SET dyncol_blob=COLUMN_CREATE(\"column_name\", \"value\");\n\nURL: https://mariadb.com/kb/en/column_create/','','https://mariadb.com/kb/en/column_create/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (804,43,'COLUMN_DELETE','Syntax\n------\n\nCOLUMN_DELETE(dyncol_blob, column_nr, column_nr...);\nCOLUMN_DELETE(dyncol_blob, column_name, column_name...);\n\nDescription\n-----------\n\nDeletes a dynamic column with the specified name. Multiple names can be given.\nThe return value is a dynamic column blob after the modification.\n\nURL: https://mariadb.com/kb/en/column_delete/','','https://mariadb.com/kb/en/column_delete/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (805,43,'COLUMN_EXISTS','Syntax\n------\n\nCOLUMN_EXISTS(dyncol_blob, column_nr);\nCOLUMN_EXISTS(dyncol_blob, column_name);\n\nDescription\n-----------\n\nChecks if a column with name column_name exists in dyncol_blob. If yes, return\n1, otherwise return 0. See dynamic columns for more information.\n\nURL: https://mariadb.com/kb/en/column_exists/','','https://mariadb.com/kb/en/column_exists/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (806,43,'COLUMN_GET','Syntax\n------\n\nCOLUMN_GET(dyncol_blob, column_nr as type);\nCOLUMN_GET(dyncol_blob, column_name as type);\n\nDescription\n-----------\n\nGets the value of a dynamic column by its name. If no column with the given\nname exists, NULL will be returned.\n\ncolumn_name as type requires that one specify the datatype of the dynamic\ncolumn they are reading.\n\nThis may seem counter-intuitive: why would one need to specify which datatype\nthey\'re retrieving? Can\'t the dynamic columns system figure the datatype from\nthe data being stored?\n\nThe answer is: SQL is a statically-typed language. The SQL interpreter needs\nto know the datatypes of all expressions before the query is run (for example,\nwhen one is using prepared statements and runs \"select COLUMN_GET(...)\", the\nprepared statement API requires the server to inform the client about the\ndatatype of the column being read before the query is executed and the server\ncan see what datatype the column actually has).\n\nLengths\n-------\n\nIf you\'re running queries like:\n\nSELECT COLUMN_GET(blob, \'colname\' as CHAR) ...\n\nwithout specifying a maximum length (i.e. using as CHAR, not as CHAR(n)),\nMariaDB will report the maximum length of the resultset column to be\n16,777,216. This may cause excessive memory usage in some client libraries,\nbecause they try to pre-allocate a buffer of maximum resultset width. To avoid\nthis problem, use CHAR(n) whenever you\'re using COLUMN_GET in the select list.\n\nSee Dynamic Columns:Datatypes for more information about datatypes.\n\nURL: https://mariadb.com/kb/en/column_get/','','https://mariadb.com/kb/en/column_get/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (807,43,'COLUMN_JSON','Syntax\n------\n\nCOLUMN_JSON(dyncol_blob)\n\nDescription\n-----------\n\nReturns a JSON representation of data in dyncol_blob. Can also be used to\ndisplay nested columns. See dynamic columns for more information.\n\nExample\n-------\n\nselect item_name, COLUMN_JSON(dynamic_cols) from assets;\n+-----------------+----------------------------------------+\n| item_name | COLUMN_JSON(dynamic_cols) |\n+-----------------+----------------------------------------+\n| MariaDB T-shirt | {\"size\":\"XL\",\"color\":\"blue\"} |\n| Thinkpad Laptop | {\"color\":\"black\",\"warranty\":\"3 years\"} |\n+-----------------+----------------------------------------+\n\nLimitation: COLUMN_JSON will decode nested dynamic columns at a nesting level\nof not more than 10 levels deep. Dynamic columns that are nested deeper than\n10 levels will be shown as BINARY string, without encoding.\n\nURL: https://mariadb.com/kb/en/column_json/','','https://mariadb.com/kb/en/column_json/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (808,43,'COLUMN_LIST','Syntax\n------\n\nCOLUMN_LIST(dyncol_blob);\n\nDescription\n-----------\n\nReturns a comma-separated list of column names. The names are quoted with\nbackticks.\n\nSee dynamic columns for more information.\n\nURL: https://mariadb.com/kb/en/column_list/','','https://mariadb.com/kb/en/column_list/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (809,44,'WSREP_LAST_SEEN_GTID','MariaDB starting with 10.4.2\n----------------------------\nWSREP_LAST_SEEN_GTID was added as part of Galera 4 in MariaDB 10.4.2.\n\nSyntax\n------\n\nWSREP_LAST_SEEN_GTID()\n\nDescription\n-----------\n\nReturns the Global Transaction ID of the most recent write transaction\nobserved by the client.\n\nThe result can be useful to determine the transaction to provide to\nWSREP_SYNC_WAIT_UPTO_GTID for waiting and unblocking purposes.\n\nURL: https://mariadb.com/kb/en/wsrep_last_seen_gtid/','','https://mariadb.com/kb/en/wsrep_last_seen_gtid/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (810,44,'WSREP_LAST_WRITTEN_GTID','MariaDB starting with 10.4.2\n----------------------------\nWSREP_LAST_WRITTEN_GTID was added as part of Galera 4 in MariaDB 10.4.2.\n\nSyntax\n------\n\nWSREP_LAST_WRITTEN_GTID()\n\nDescription\n-----------\n\nReturns the Global Transaction ID of the most recent write transaction\nperformed by the client.\n\nURL: https://mariadb.com/kb/en/wsrep_last_written_gtid/','','https://mariadb.com/kb/en/wsrep_last_written_gtid/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (811,44,'WSREP_SYNC_WAIT_UPTO_GTID','MariaDB starting with 10.4.2\n----------------------------\nWSREP_SYNC_WAIT_UPTO_GTID was added as part of Galera 4 in MariaDB 10.4.2.\n\nSyntax\n------\n\nWSREP_SYNC_WAIT_UPTO_GTID(gtid[,timeout])\n\nDescription\n-----------\n\nBlocks the client until the transaction specified by the given Global\nTransaction ID is applied and committed by the node.\n\nThe optional timeout argument can be used to specify a block timeout in\nseconds. If not provided, the timeout will be indefinite.\n\nReturns the node that applied and committed the Global Transaction ID,\nER_LOCAL_WAIT_TIMEOUT if the function is timed out before this, or\nER_WRONG_ARGUMENTS if the function is given an invalid GTID.\n\nThe result from WSREP_LAST_SEEN_GTID can be useful to determine the\ntransaction to provide to WSREP_SYNC_WAIT_UPTO_GTID for waiting and unblocking\npurposes.\n\nURL: https://mariadb.com/kb/en/wsrep_sync_wait_upto_gtid/','','https://mariadb.com/kb/en/wsrep_sync_wait_upto_gtid/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (812,45,'System-Versioned Tables','MariaDB supports temporal data tables in the form of system-versioning tables\n(allowing you to query and operate on historic data, discussed below),\napplication-time periods (allow you to query and operate on a temporal range\nof data), and bitemporal tables (which combine both system-versioning and\napplication-time periods).\n\nSystem-Versioned Tables\n-----------------------\n\nSystem-versioned tables store the history of all changes, not only data which\nis currently valid. This allows data analysis for any point in time, auditing\nof changes and comparison of data from different points in time. Typical uses\ncases are:\n\n* Forensic analysis & legal requirements to store data for N years.\n* Data analytics (retrospective, trends etc.), e.g. to get your staff\ninformation as of one year ago.\n* Point-in-time recovery - recover a table state as of particular point in\ntime.\n\nSystem-versioned tables were first introduced in the SQL:2011 standard.\n\nCreating a System-Versioned Table\n---------------------------------\n\nThe CREATE TABLE syntax has been extended to permit creating a\nsystem-versioned table. To be system-versioned, according to SQL:2011, a table\nmust have two generated columns, a period, and a special table option clause:\n\nCREATE TABLE t(\n x INT,\n start_timestamp TIMESTAMP(6) GENERATED ALWAYS AS ROW START,\n end_timestamp TIMESTAMP(6) GENERATED ALWAYS AS ROW END,\n PERIOD FOR SYSTEM_TIME(start_timestamp, end_timestamp)\n) WITH SYSTEM VERSIONING;\n\nIn MariaDB one can also use a simplified syntax:\n\nCREATE TABLE t (\n x INT\n) WITH SYSTEM VERSIONING;\n\nIn the latter case no extra columns will be created and they won\'t clutter the\noutput of, say, SELECT * FROM t. The versioning information will still be\nstored, and it can be accessed via the pseudo-columns ROW_START and ROW_END:\n\nSELECT x, ROW_START, ROW_END FROM t;\n\nAdding or Removing System Versioning To/From a Table\n----------------------------------------------------\n\nAn existing table can be altered to enable system versioning for it.\n\nCREATE TABLE t(\n x INT\n);\n\nALTER TABLE t ADD SYSTEM VERSIONING;\n\nSHOW CREATE TABLE t\\G\n*************************** 1. row ***************************\n Table: t\nCreate Table: CREATE TABLE `t` (\n `x` int(11) DEFAULT NULL\n) ENGINE=InnoDB DEFAULT CHARSET=latin1 WITH SYSTEM VERSIONING\n\nSimilarly, system versioning can be removed from a table:\n\nALTER TABLE t DROP SYSTEM VERSIONING;\n\nSHOW CREATE TABLE t\\G\n*************************** 1. row ***************************\n Table: t\nCreate Table: CREATE TABLE `t` (\n `x` int(11) DEFAULT NULL\n) ENGINE=InnoDB DEFAULT CHARSET=latin1\n\nOne can also add system versioning with all columns created explicitly:\n\nALTER TABLE t ADD COLUMN ts TIMESTAMP(6) GENERATED ALWAYS AS ROW START,\n ADD COLUMN te TIMESTAMP(6) GENERATED ALWAYS AS ROW END,\n ADD PERIOD FOR SYSTEM_TIME(ts, te),\n ADD SYSTEM VERSIONING;\n\nSHOW CREATE TABLE t\\G\n*************************** 1. row ***************************\n Table: t\nCreate Table: CREATE TABLE `t` (\n `x` int(11) DEFAULT NULL,\n `ts` timestamp(6) GENERATED ALWAYS AS ROW START,\n `te` timestamp(6) GENERATED ALWAYS AS ROW END,\n PERIOD FOR SYSTEM_TIME (`ts`, `te`)\n) ENGINE=InnoDB DEFAULT CHARSET=latin1 WITH SYSTEM VERSIONING\n\nInserting Data\n--------------\n\nWhen data is inserted into a system-versioned table, it is given a row_start\nvalue of the current timestamp, and a row_end value of\nFROM_UNIXTIME(2147483647.999999). The current timestamp can be adjusted by\nsetting the timestamp system variable, for example:\n\nSELECT NOW();\n+---------------------+\n| NOW() |\n+---------------------+\n| 2022-10-24 23:09:38 |\n+---------------------+\n\nINSERT INTO t VALUES(1);\n\nSET @@timestamp = UNIX_TIMESTAMP(\'2033-10-24\');\n\nINSERT INTO t VALUES(2);\n\nSET @@timestamp = default;\n\nINSERT INTO t VALUES(3);\n\nSELECT a,row_start,row_end FROM t;\n+------+----------------------------+----------------------------+\n| a | row_start | row_end |\n+------+----------------------------+----------------------------+\n| 1 | 2022-10-24 23:09:38.951347 | 2038-01-19 05:14:07.999999 |\n| 2 | 2033-10-24 00:00:00.000000 | 2038-01-19 05:14:07.999999 |\n| 3 | 2022-10-24 23:09:38.961857 | 2038-01-19 05:14:07.999999 |\n+------+----------------------------+----------------------------+\n\nQuerying Historical Data\n------------------------\n\nSELECT\n------\n\nTo query the historical data one uses the clause FOR SYSTEM_TIME directly\nafter the table name (before the table alias, if any). SQL:2011 provides three\nsyntactic extensions:\n\n* AS OF is used to see the table as it was at a specific point in time in the\npast:\n\nSELECT * FROM t FOR SYSTEM_TIME AS OF TIMESTAMP\'2016-10-09 08:07:06\';\n\n* BETWEEN start AND end will show all rows that were visible at any point\nbetween two specified points in time. It works inclusively, a row visible\nexactly at start or exactly at end will be shown too.\n\nSELECT * FROM t FOR SYSTEM_TIME BETWEEN (NOW() - INTERVAL 1 YEAR) AND NOW();\n\n* FROM start TO end will also show all rows that were visible at any point\nbetween two specified points in time, including start, but excluding end.\n\nSELECT * FROM t FOR SYSTEM_TIME FROM \'2016-01-01 00:00:00\' TO \'2017-01-01\n00:00:00\';\n\nAdditionally MariaDB implements a non-standard extension:\n\n* ALL will show all rows, historical and current.\n\nSELECT * FROM t FOR SYSTEM_TIME ALL;\n\nIf the FOR SYSTEM_TIME clause is not used, the table will show the current\ndata. This is usually the same as if one had specified FOR SYSTEM_TIME AS OF\nCURRENT_TIMESTAMP, unless one has adjusted the row_start value (until MariaDB\n10.11, only possible by setting the secure_timestamp variable). For example:\n\nCREATE OR REPLACE TABLE t (a int) WITH SYSTEM VERSIONING;\n\nSELECT NOW();\n+---------------------+\n| NOW() |\n+---------------------+\n| 2022-10-24 23:43:37 |\n+---------------------+\n\nINSERT INTO t VALUES (1);\n\nSET @@timestamp = UNIX_TIMESTAMP(\'2033-03-03\');\n\nINSERT INTO t VALUES (2);\n\nDELETE FROM t;\n\nSET @@timestamp = default;\n\nSELECT a, row_start, row_end FROM t FOR SYSTEM_TIME ALL;\n+------+----------------------------+----------------------------+\n| a | row_start | row_end |\n+------+----------------------------+----------------------------+\n| 1 | 2022-10-24 23:43:37.192725 | 2033-03-03 00:00:00.000000 |\n| 2 | 2033-03-03 00:00:00.000000 | 2033-03-03 00:00:00.000000 |\n+------+----------------------------+----------------------------+\n2 rows in set (0.000 sec)\n\nSELECT a, row_start, row_end FROM t FOR SYSTEM_TIME AS OF CURRENT_TIMESTAMP;\n+------+----------------------------+----------------------------+\n| a | row_start | row_end |\n+------+----------------------------+----------------------------+\n| 1 | 2022-10-24 23:43:37.192725 | 2033-03-03 00:00:00.000000 |\n+------+----------------------------+----------------------------+\n1 row in set (0.000 sec)\n\nSELECT a, row_start, row_end FROM t;\nEmpty set (0.001 sec)\n\nViews and Subqueries\n--------------------\n\nWhen a system-versioned tables is used in a view or in a subquery in the from\nclause, FOR SYSTEM_TIME can be used directly in the view or subquery body, or\n(non-standard) applied to the whole view when it\'s being used in a SELECT:\n\nCREATE VIEW v1 AS SELECT * FROM t FOR SYSTEM_TIME AS OF TIMESTAMP\'2016-10-09\n08:07:06\';\n\nOr\n\nCREATE VIEW v1 AS SELECT * FROM t;\nSELECT * FROM v1 FOR SYSTEM_TIME AS OF TIMESTAMP\'2016-10-09 08:07:06\';\n\nUse in Replication and Binary Logs\n----------------------------------\n\nTables that use system-versioning implicitly add the row_end column to the\nPrimary Key. While this is generally not an issue for most use cases, it can\nlead to problems when re-applying write statements from the binary log or in\nreplication environments, where a primary retries an SQL statement on the\nreplica.\n\nSpecifically, these writes include a value on the row_end column containing\nthe timestamp from when the write was initially made. The re-occurrence of the\nPrimary Key with the old system-versioning columns raises an error due to the\nduplication.\n\nTo mitigate this with MariaDB Replication, set the secure_timestamp system\nvariable to YES on the replica. When set, the replica uses its own system\nclock when applying to the row log, meaning that the primary can retry as many\ntimes as needed without causing a conflict. The retries generate new\nhistorical rows with new values for the row_start and row_end columns.\n\nTransaction-Precise History in InnoDB\n-------------------------------------\n\nA point in time when a row was inserted or deleted does not necessarily mean\nthat a change became visible at the same moment. With transactional tables, a\nrow might have been inserted in a long transaction, and became visible hours\nafter it was inserted.\n\nFor some applications — for example, when doing data analytics on one-year-old\ndata — this distinction does not matter much. For others — forensic analysis —\nit might be crucial.\n\nMariaDB supports transaction-precise history (only for the InnoDB storage\nengine) that allows seeing the data exactly as it would\'ve been seen by a new\nconnection doing a SELECT at the specified point in time — rows inserted\nbefore that point, but committed after will not be shown.\n\nTo use transaction-precise history, InnoDB needs to remember not timestamps,\nbut transaction identifier per row. This is done by creating generated columns\nas BIGINT UNSIGNED, not TIMESTAMP(6):\n\nCREATE TABLE t(\n x INT,\n start_trxid BIGINT UNSIGNED GENERATED ALWAYS AS ROW START,\n end_trxid BIGINT UNSIGNED GENERATED ALWAYS AS ROW END,\n PERIOD FOR SYSTEM_TIME(start_trxid, end_trxid)\n) WITH SYSTEM VERSIONING;\n\nThese columns must be specified explicitly, but they can be made INVISIBLE to\navoid cluttering SELECT * output.\n\nWhen one uses transaction-precise history, one can optionally use transaction\nidentifiers in the FOR SYSTEM_TIME clause:\n\nSELECT * FROM t FOR SYSTEM_TIME AS OF TRANSACTION 12345;\n\nThis will show the data, exactly as it was seen by the transaction with the\nidentifier 12345.\n\nStoring the History Separately\n------------------------------\n\nWhen the history is stored together with the current data, it increases the\nsize of the table, so current data queries — table scans and index searches —\nwill take more time, because they will need to skip over historical data. If\nmost queries on that table use only current data, it might make sense to store\nthe history separately, to reduce the overhead from versioning.\n\nThis is done by partitioning the table by SYSTEM_TIME. Because of the\npartition pruning optimization, all current data queries will only access one\npartition, the one that stores current data.\n\nThis example shows how to create such a partitioned table:\n\nCREATE TABLE t (x INT) WITH SYSTEM VERSIONING\n PARTITION BY SYSTEM_TIME (\n PARTITION p_hist HISTORY,\n PARTITION p_cur CURRENT\n );\n\nIn this example all history will be stored in the partition p_hist while all\ncurrent data will be in the partition p_cur. The table must have exactly one\ncurrent partition and at least one historical partition.\n\nPartitioning by SYSTEM_TIME also supports automatic partition rotation. One\ncan rotate historical partitions by time or by size. This example shows how to\nrotate partitions by size:\n\nCREATE TABLE t (x INT) WITH SYSTEM VERSIONING\n PARTITION BY SYSTEM_TIME LIMIT 100000 (\n PARTITION p0 HISTORY,\n PARTITION p1 HISTORY,\n PARTITION pcur CURRENT\n );\n\nMariaDB will start writing history rows into partition p0, and when it reaches\na size of 100000 rows, MariaDB will switch to partition p1. There are only two\nhistorical partitions, so when p1 overflows, MariaDB will issue a warning, but\nwill continue writing into it.\n\nSimilarly, one can rotate partitions by time:\n\nCREATE TABLE t (x INT) WITH SYSTEM VERSIONING\n PARTITION BY SYSTEM_TIME INTERVAL 1 WEEK (\n PARTITION p0 HISTORY,\n PARTITION p1 HISTORY,\n PARTITION p2 HISTORY,\n PARTITION pcur CURRENT\n );\n\nThis means that the history for the first week after the table was created\nwill be stored in p0. The history for the second week — in p1, and all later\nhistory will go into p2. One can see the exact rotation time for each\npartition in the INFORMATION_SCHEMA.PARTITIONS table.\n\nIt is possible to combine partitioning by SYSTEM_TIME and subpartitions:\n\nCREATE TABLE t (x INT) WITH SYSTEM VERSIONING\n PARTITION BY SYSTEM_TIME\n SUBPARTITION BY KEY (x)\n SUBPARTITIONS 4 (\n PARTITION ph HISTORY,\n PARTITION pc CURRENT\n );\n\nDefault Partitions\n------------------\n\nMariaDB starting with 10.5.0\n----------------------------\nSince partitioning by current and historical data is such a typical usecase,\nfrom MariaDB 10.5, it is possible to use a simplified statement to do so. For\nexample, instead of\n\nCREATE TABLE t (x INT) WITH SYSTEM VERSIONING \n PARTITION BY SYSTEM_TIME (\n PARTITION p0 HISTORY,\n PARTITION pn CURRENT\n);\n\nyou can use\n\nCREATE TABLE t (x INT) WITH SYSTEM VERSIONING \n PARTITION BY SYSTEM_TIME;\n\nYou can also specify the number of partitions, which is useful if you want to\nrotate history by time, for example:\n\nCREATE TABLE t (x INT) WITH SYSTEM VERSIONING \n PARTITION BY SYSTEM_TIME\n INTERVAL 1 MONTH\n PARTITIONS 12;\n\nSpecifying the number of partitions without specifying a rotation condition\nwill result in a warning:\n\nCREATE OR REPLACE TABLE t (x INT) WITH SYSTEM VERSIONING\n PARTITION BY SYSTEM_TIME PARTITIONS 12;\nQuery OK, 0 rows affected, 1 warning (0.518 sec)\n\nWarning (Code 4115): Maybe missing parameters: no rotation condition for\nmultiple HISTORY partitions.\n\nwhile specifying only 1 partition will result in an error:\n\nCREATE OR REPLACE TABLE t (x INT) WITH SYSTEM VERSIONING\n PARTITION BY SYSTEM_TIME PARTITIONS 1;\nERROR 4128 (HY000): Wrong partitions for `t`: must have at least one HISTORY\nand exactly one last CURRENT\n\nAutomatically Creating Partitions\n---------------------------------\n\nMariaDB starting with 10.9.1\n----------------------------\nFrom MariaDB 10.9.1, the AUTO keyword can be used to automatically create\nhistory partitions.\n\nFor example\n\nCREATE TABLE t1 (x int) WITH SYSTEM VERSIONING\n PARTITION BY SYSTEM_TIME INTERVAL 1 HOUR AUTO;\n','','https://mariadb.com/kb/en/system-versioned-tables/');
+update help_topic set description = CONCAT(description, '\nCREATE TABLE t1 (x int) WITH SYSTEM VERSIONING\n PARTITION BY SYSTEM_TIME INTERVAL 1 MONTH\n STARTS \'2021-01-01 00:00:00\' AUTO PARTITIONS 12;\n\nCREATE TABLE t1 (x int) WITH SYSTEM VERSIONING\n PARTITION BY SYSTEM_TIME LIMIT 1000 AUTO;\n\nOr with explicit partitions:\n\nCREATE TABLE t1 (x int) WITH SYSTEM VERSIONING\n PARTITION BY SYSTEM_TIME INTERVAL 1 HOUR AUTO\n (PARTITION p0 HISTORY, PARTITION pn CURRENT);\n\nTo disable or enable auto-creation one can use ALTER TABLE by adding or\nremoving AUTO from the partitioning specification:\n\nCREATE TABLE t1 (x int) WITH SYSTEM VERSIONING\n PARTITION BY SYSTEM_TIME INTERVAL 1 HOUR AUTO;\n\n# Disables auto-creation:\nALTER TABLE t1 PARTITION BY SYSTEM_TIME INTERVAL 1 HOUR;\n\n# Enables auto-creation:\nALTER TABLE t1 PARTITION BY SYSTEM_TIME INTERVAL 1 HOUR AUTO;\n\nIf the rest of the partitioning specification is identical to CREATE TABLE, no\nrepartitioning will be done (for details see MDEV-27328).\n\nRemoving Old History\n--------------------\n\nBecause it stores all the history, a system-versioned table might grow very\nlarge over time. There are many options to trim down the space and remove the\nold history.\n\nOne can completely drop the versioning from the table and add it back again,\nthis will delete all the history:\n\nALTER TABLE t DROP SYSTEM VERSIONING;\nALTER TABLE t ADD SYSTEM VERSIONING;\n\nIt might be a rather time-consuming operation, though, as the table will need\nto be rebuilt, possibly twice (depending on the storage engine).\n\nAnother option would be to use partitioning and drop some of historical\npartitions:\n\nALTER TABLE t DROP PARTITION p0;\n\nNote, that one cannot drop a current partition or the only historical\npartition.\n\nAnd the third option; one can use a variant of the DELETE statement to prune\nthe history:\n\nDELETE HISTORY FROM t;\n\nor only old history up to a specific point in time:\n\nDELETE HISTORY FROM t BEFORE SYSTEM_TIME \'2016-10-09 08:07:06\';\n\nor to a specific transaction (with BEFORE SYSTEM_TIME TRANSACTION xxx).\n\nTo protect the integrity of the history, this statement requires a special\nDELETE HISTORY privilege.\n\nCurrently, using the DELETE HISTORY statement with a BEFORE SYSTEM_TIME\ngreater than the ROW_END of the active records (as a TIMESTAMP, this has a\nmaximum value of \'2038-01-19 03:14:07\' UTC) will result in the historical\nrecords being dropped, and the active records being deleted and moved to\nhistory. See MDEV-25468.\n\nPrior to MariaDB 10.4.5, the TRUNCATE TABLE statement drops all historical\nrecords from a system-versioned-table.\n\nFrom MariaDB 10.4.5, historic data is protected from TRUNCATE statements, as\nper the SQL standard, and an Error 4137 is instead raised:\n\nTRUNCATE t;\nERROR 4137 (HY000): System-versioned tables do not support TRUNCATE TABLE\n\nExcluding Columns From Versioning\n---------------------------------\n\nAnother MariaDB extension allows to version only a subset of columns in a\ntable. This is useful, for example, if you have a table with user information\nthat should be versioned, but one column is, let\'s say, a login counter that\nis incremented often and is not interesting to version. Such a column can be\nexcluded from versioning by declaring it WITHOUT VERSIONING\n\nCREATE TABLE t (\n x INT,\n y INT WITHOUT SYSTEM VERSIONING\n) WITH SYSTEM VERSIONING;\n\nA column can also be declared WITH VERSIONING, that will automatically make\nthe table versioned. The statement below is equivalent to the one above:\n\nCREATE TABLE t (\n x INT WITH SYSTEM VERSIONING,\n y INT\n);\n\nChanges in other sections: https://mariadb.com/kb/en/create-table/\nhttps://mariadb.com/kb/en/alter-table/ https://mariadb.com/kb/en/join-syntax/\nhttps://mariadb.com/kb/en/partitioning-types-overview/\nhttps://mariadb.com/kb/en/date-and-time-units/\nhttps://mariadb.com/kb/en/delete/ https://mariadb.com/kb/en/grant/\n\nthey all reference back to this page\n\nAlso, TODO:\n\n* limitations (size, speed, adding history to unique not nullable columns)\n\nSystem Variables\n----------------\n\nThere are a number of system variables related to system-versioned tables:\n\nsystem_versioning_alter_history\n-------------------------------\n\n* Description: SQL:2011 does not allow ALTER TABLE on system-versioned tables.\nWhen this variable is set to ERROR, an attempt to alter a system-versioned\ntable will result in an error. When this variable is set to KEEP, ALTER TABLE\nwill be allowed, but the history will become incorrect — querying historical\ndata will show the new table structure. This mode is still useful, for\nexample, when adding new columns to a table. Note that if historical data\ncontains or would contain nulls, attempting to ALTER these columns to be NOT\nNULL will return an error (or warning if strict_mode is not set).\n* Commandline: --system-versioning-alter-history=value\n* Scope: Global, Session\n* Dynamic: Yes\n* Type: Enum\n* Default Value: ERROR\n* Valid Values: ERROR, KEEP\n\nsystem_versioning_asof\n----------------------\n\n* Description: If set to a specific timestamp value, an implicit FOR\nSYSTEM_TIME AS OF clause will be applied to all queries. This is useful if one\nwants to do many queries for history at the specific point in time. Set it to\nDEFAULT to restore the default behavior. Has no effect on DML, so queries such\nas INSERT .. SELECT and REPLACE .. SELECT need to state AS OF explicitly.\n* Commandline: None\n* Scope: Global, Session\n* Dynamic: Yes\n* Type: Varchar\n* Default Value: DEFAULT\n\nsystem_versioning_innodb_algorithm_simple\n-----------------------------------------\n\n* Description: Never fully implemented and removed in the following release.\n* Commandline: --system-versioning-innodb-algorithm-simple[={0|1}]\n* Scope: Global, Session\n* Dynamic: Yes\n* Type: Boolean\n* Default Value: ON\n* Introduced: MariaDB 10.3.4\n* Removed: MariaDB 10.3.5\n\nsystem_versioning_insert_history\n--------------------------------\n\n* Description: Allows direct inserts into ROW_START and ROW_END columns if\nsecure_timestamp allows changing timestamp.\n* Commandline: --system-versioning-insert-history[={0|1}]\n* Scope: Global, Session\n* Dynamic: Yes\n* Type: Boolean\n* Default Value: OFF\n* Introduced: MariaDB 10.11.0\n\nLimitations\n-----------\n\n* Versioning clauses can not be applied to generated (virtual and persistent)\ncolumns.\n* Before MariaDB 10.11, mariadb-dump did not read historical rows from\nversioned tables, and so historical data would not be backed up. Also, a\nrestore of the timestamps would not be possible as they cannot be defined by\nan insert/a user. From MariaDB 10.11, use the -H or --dump-history options to\ninclude the history.\n\nURL: https://mariadb.com/kb/en/system-versioned-tables/') WHERE help_topic_id = 812;
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (813,45,'Application-Time Periods','MariaDB starting with 10.4.3\n----------------------------\nSupport for application-time period-versioning was added in MariaDB 10.4.3.\n\nExtending system-versioned tables, MariaDB 10.4 supports application-time\nperiod tables. Time periods are defined by a range between two temporal\ncolumns. The columns must be of the same temporal data type, i.e. DATE,\nTIMESTAMP or DATETIME (TIME and YEAR are not supported), and of the same width.\n\nUsing time periods implicitly defines the two columns as NOT NULL. It also\nadds a constraint to check whether the first value is less than the second\nvalue. The constraint is invisible to SHOW CREATE TABLE statements. The name\nof this constraint is prefixed by the time period name, to avoid conflict with\nother constraints.\n\nCreating Tables with Time Periods\n---------------------------------\n\nTo create a table with a time period, use a CREATE TABLE statement with the\nPERIOD table option.\n\nCREATE TABLE t1(\n name VARCHAR(50),\n date_1 DATE,\n date_2 DATE,\n PERIOD FOR date_period(date_1, date_2));\n\nThis creates a table with a time_period period and populates the table with\nsome basic temporal values.\n\nExamples are available in the MariaDB Server source code, at\nmysql-test/suite/period/r/create.result.\n\nAdding and Removing Time Periods\n--------------------------------\n\nThe ALTER TABLE statement now supports syntax for adding and removing time\nperiods from a table. To add a period, use the ADD PERIOD clause.\n\nFor example:\n\nCREATE OR REPLACE TABLE rooms (\n room_number INT,\n guest_name VARCHAR(255),\n checkin DATE,\n checkout DATE\n );\n\nALTER TABLE rooms ADD PERIOD FOR p(checkin,checkout);\n\nTo remove a period, use the DROP PERIOD clause:\n\nALTER TABLE rooms DROP PERIOD FOR p;\n\nBoth ADD PERIOD and DROP PERIOD clauses include an option to handle whether\nthe period already exists:\n\nALTER TABLE rooms ADD PERIOD IF NOT EXISTS FOR p(checkin,checkout);\n\nALTER TABLE rooms DROP PERIOD IF EXISTS FOR p;\n\nDeletion by Portion\n-------------------\n\nYou can also remove rows that fall within certain time periods.\n\nWhen MariaDB executes a DELETE FOR PORTION statement, it removes the row:\n\n* When the row period falls completely within the delete period, it removes\nthe row.\n* When the row period overlaps the delete period, it shrinks the row, removing\nthe overlap from the first or second row period value.\n* When the delete period falls completely within the row period, it splits the\nrow into two rows. The first row runs from the starting row period to the\nstarting delete period. The second runs from the ending delete period to the\nending row period.\n\nTo test this, first populate the table with some data to operate on:\n\nCREATE TABLE t1(\n name VARCHAR(50),\n date_1 DATE,\n date_2 DATE,\n PERIOD FOR date_period(date_1, date_2));\n\nINSERT INTO t1 (name, date_1, date_2) VALUES\n (\'a\', \'1999-01-01\', \'2000-01-01\'),\n (\'b\', \'1999-01-01\', \'2018-12-12\'),\n (\'c\', \'1999-01-01\', \'2017-01-01\'),\n (\'d\', \'2017-01-01\', \'2019-01-01\');\n\nSELECT * FROM t1;\n+------+------------+------------+\n| name | date_1 | date_2 |\n+------+------------+------------+\n| a | 1999-01-01 | 2000-01-01 |\n| b | 1999-01-01 | 2018-12-12 |\n| c | 1999-01-01 | 2017-01-01 |\n| d | 2017-01-01 | 2019-01-01 |\n+------+------------+------------+\n\nThen, run the DELETE FOR PORTION statement:\n\nDELETE FROM t1\nFOR PORTION OF date_period\n FROM \'2001-01-01\' TO \'2018-01-01\';\nQuery OK, 3 rows affected (0.028 sec)\n\nSELECT * FROM t1 ORDER BY name;\n+------+------------+------------+\n| name | date_1 | date_2 |\n+------+------------+------------+\n| a | 1999-01-01 | 2000-01-01 |\n| b | 1999-01-01 | 2001-01-01 |\n| b | 2018-01-01 | 2018-12-12 |\n| c | 1999-01-01 | 2001-01-01 |\n| d | 2018-01-01 | 2019-01-01 |\n+------+------------+------------+\n\nHere:\n\n* a is unchanged, as the range falls entirely out of the specified portion to\nbe deleted.\n* b, with values ranging from 1999 to 2018, is split into two rows, 1999 to\n2000 and 2018-01 to 2018-12.\n* c, with values ranging from 1999 to 2017, where only the upper value falls\nwithin the portion to be deleted, has been shrunk to 1999 to 2001.\n* d, with values ranging from 2017 to 2019, where only the lower value falls\nwithin the portion to be deleted, has been shrunk to 2018 to 2019.\n\nThe DELETE FOR PORTION statement has the following restrictions\n\n* The FROM...TO clause must be constant\n* Multi-delete is not supported\n\nIf there are DELETE or INSERT triggers, it works as follows: any matched row\nis deleted, and then one or two rows are inserted. If the record is deleted\ncompletely, nothing is inserted.\n\nUpdating by Portion\n-------------------\n\nThe UPDATE syntax now supports UPDATE FOR PORTION, which modifies rows based\non their occurrence in a range:\n\nTo test it, first populate the table with some data:\n\nTRUNCATE t1;\n\nINSERT INTO t1 (name, date_1, date_2) VALUES\n (\'a\', \'1999-01-01\', \'2000-01-01\'),\n (\'b\', \'1999-01-01\', \'2018-12-12\'),\n (\'c\', \'1999-01-01\', \'2017-01-01\'),\n (\'d\', \'2017-01-01\', \'2019-01-01\');\n\nSELECT * FROM t1;\n+------+------------+------------+\n| name | date_1 | date_2 |\n+------+------------+------------+\n| a | 1999-01-01 | 2000-01-01 |\n| b | 1999-01-01 | 2018-12-12 |\n| c | 1999-01-01 | 2017-01-01 |\n| d | 2017-01-01 | 2019-01-01 |\n+------+------------+------------+\n\nThen run the update:\n\nUPDATE t1 FOR PORTION OF date_period\n FROM \'2000-01-01\' TO \'2018-01-01\'\nSET name = CONCAT(name,\'_original\');\n\nSELECT * FROM t1 ORDER BY name;\n+------------+------------+------------+\n| name | date_1 | date_2 |\n+------------+------------+------------+\n| a | 1999-01-01 | 2000-01-01 |\n| b | 1999-01-01 | 2000-01-01 |\n| b | 2018-01-01 | 2018-12-12 |\n| b_original | 2000-01-01 | 2018-01-01 |\n| c | 1999-01-01 | 2000-01-01 |\n| c_original | 2000-01-01 | 2017-01-01 |\n| d | 2018-01-01 | 2019-01-01 |\n| d_original | 2017-01-01 | 2018-01-01 |\n+------------+------------+------------+\n\n* a is unchanged, as the range falls entirely out of the specified portion to\nbe deleted.\n* b, with values ranging from 1999 to 2018, is split into two rows, 1999 to\n2000 and 2018-01 to 2018-12.\n* c, with values ranging from 1999 to 2017, where only the upper value falls\nwithin the portion to be deleted, has been shrunk to 1999 to 2001.\n* d, with values ranging from 2017 to 2019, where only the lower value falls\nwithin the portion to be deleted, has been shrunk to 2018 to 2019. \n* Original rows affected by the update have \"_original\" appended to the name.\n\nThe UPDATE FOR PORTION statement has the following limitations:\n\n* The operation cannot modify the two temporal columns used by the time period\n* The operation cannot reference period values in the SET expression\n* FROM...TO expressions must be constant\n\nWITHOUT OVERLAPS\n----------------\n\nMariaDB starting with 10.5.3\n----------------------------\nMariaDB 10.5 introduced a new clause, WITHOUT OVERLAPS, which allows one to\ncreate an index specifying that application time periods should not overlap.\n\nAn index constrained by WITHOUT OVERLAPS is required to be either a primary\nkey or a unique index.\n\nTake the following example, an application time period table for a booking\nsystem:\n\nCREATE OR REPLACE TABLE rooms (\n room_number INT,\n guest_name VARCHAR(255),\n checkin DATE,\n checkout DATE,\n PERIOD FOR p(checkin,checkout)\n );\n\nINSERT INTO rooms VALUES \n (1, \'Regina\', \'2020-10-01\', \'2020-10-03\'),\n (2, \'Cochise\', \'2020-10-02\', \'2020-10-05\'),\n (1, \'Nowell\', \'2020-10-03\', \'2020-10-07\'),\n (2, \'Eusebius\', \'2020-10-04\', \'2020-10-06\');\n\nOur system is not intended to permit overlapping bookings, so the fourth\nrecord above should not have been inserted. Using WITHOUT OVERLAPS in a unique\nindex (in this case based on a combination of room number and the application\ntime period) allows us to specify this constraint in the table definition.\n\nCREATE OR REPLACE TABLE rooms (\n room_number INT,\n guest_name VARCHAR(255),\n checkin DATE,\n checkout DATE,\n PERIOD FOR p(checkin,checkout),\n UNIQUE (room_number, p WITHOUT OVERLAPS)\n );\n\nINSERT INTO rooms VALUES \n (1, \'Regina\', \'2020-10-01\', \'2020-10-03\'),\n (2, \'Cochise\', \'2020-10-02\', \'2020-10-05\'),\n (1, \'Nowell\', \'2020-10-03\', \'2020-10-07\'),\n (2, \'Eusebius\', \'2020-10-04\', \'2020-10-06\');\nERROR 1062 (23000): Duplicate entry \'2-2020-10-06-2020-10-04\' for key\n\'room_number\'\n\nFurther Examples\n----------------\n\nThe implicit change from NULL to NOT NULL:\n\nCREATE TABLE `t2` (\n `id` int(11) DEFAULT NULL,\n `d1` datetime DEFAULT NULL,\n `d2` datetime DEFAULT NULL\n) ENGINE=InnoDB DEFAULT CHARSET=latin1;\n\nALTER TABLE t2 ADD PERIOD FOR p(d1,d2);\n\nSHOW CREATE TABLE t2\\G\n*************************** 1. row ***************************\n Table: t2\nCreate Table: CREATE TABLE `t2` (\n `id` int(11) DEFAULT NULL,\n `d1` datetime NOT NULL,\n `d2` datetime NOT NULL,\n PERIOD FOR `p` (`d1`, `d2`)\n) ENGINE=InnoDB DEFAULT CHARSET=latin1\n\nDue to this constraint, trying to add a time period where null data already\nexists will fail.\n\nCREATE OR REPLACE TABLE `t2` (\n `id` int(11) DEFAULT NULL,\n `d1` datetime DEFAULT NULL,\n `d2` datetime DEFAULT NULL\n) ENGINE=InnoDB DEFAULT CHARSET=latin1;\n\nINSERT INTO t2(id) VALUES(1);\n\nALTER TABLE t2 ADD PERIOD FOR p(d1,d2);\nERROR 1265 (01000): Data truncated for column \'d1\' at row 1\n\nURL: https://mariadb.com/kb/en/application-time-periods/','','https://mariadb.com/kb/en/application-time-periods/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (814,45,'Bitemporal Tables','MariaDB starting with 10.4.3\n----------------------------\nBitemporal tables are tables that use versioning both at the system and\napplication-time period levels.\n\nUsing Bitemporal Tables\n-----------------------\n\nTo create a bitemporal table, use:\n\nCREATE TABLE test.t3 (\n date_1 DATE,\n date_2 DATE,\n row_start TIMESTAMP(6) AS ROW START INVISIBLE,\n row_end TIMESTAMP(6) AS ROW END INVISIBLE,\n PERIOD FOR application_time(date_1, date_2),\n PERIOD FOR system_time(row_start, row_end))\nWITH SYSTEM VERSIONING;\n\nNote that, while system_time here is also a time period, it cannot be used in\nDELETE FOR PORTION or UPDATE FOR PORTION statements.\n\nDELETE FROM test.t3 \nFOR PORTION OF system_time \n FROM \'2000-01-01\' TO \'2018-01-01\';\nERROR 42000: You have an error in your SQL syntax; check the manual that\ncorresponds \n to your MariaDB server version for the right syntax to use near\n \'of system_time from \'2000-01-01\' to \'2018-01-01\'\' at line 1\n\nURL: https://mariadb.com/kb/en/bitemporal-tables/','','https://mariadb.com/kb/en/bitemporal-tables/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (815,46,'ST_AsGeoJSON','Syntax\n------\n\nST_AsGeoJSON(g[, max_decimals[, options]])\n\nDescription\n-----------\n\nReturns the given geometry g as a GeoJSON element. The optional max_decimals\nlimits the maximum number of decimals displayed.\n\nThe optional options flag can be set to 1 to add a bounding box to the output.\n\nExamples\n--------\n\nSELECT ST_AsGeoJSON(ST_GeomFromText(\'POINT(5.3 7.2)\'));\n+-------------------------------------------------+\n| ST_AsGeoJSON(ST_GeomFromText(\'POINT(5.3 7.2)\')) |\n+-------------------------------------------------+\n| {\"type\": \"Point\", \"coordinates\": [5.3, 7.2]} |\n+-------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/geojson-st_asgeojson/','','https://mariadb.com/kb/en/geojson-st_asgeojson/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (816,46,'ST_GeomFromGeoJSON','MariaDB starting with 10.2.4\n----------------------------\nST_GeomFromGeoJSON was added in MariaDB 10.2.4\n\nSyntax\n------\n\nST_GeomFromGeoJSON(g[, option])\n\nDescription\n-----------\n\nGiven a GeoJSON input g, returns a geometry object. The option specifies what\nto do if g contains geometries with coordinate dimensions higher than 2.\n\n+---------------------------+------------------------------------------------+\n| Option | Description |\n+---------------------------+------------------------------------------------+\n| 1 | Return an error (the default) |\n+---------------------------+------------------------------------------------+\n| 2 - 4 | The document is accepted, but the coordinates |\n| | for higher coordinate dimensions are stripped |\n| | off. |\n+---------------------------+------------------------------------------------+\n\nNote that this function did not work correctly before MariaDB 10.2.8 - see\nMDEV-12180.\n\nExamples\n--------\n\nSET @j = \'{ \"type\": \"Point\", \"coordinates\": [5.3, 15.0]}\';\n\nSELECT ST_AsText(ST_GeomFromGeoJSON(@j));\n+-----------------------------------+\n| ST_AsText(ST_GeomFromGeoJSON(@j)) |\n+-----------------------------------+\n| POINT(5.3 15) |\n+-----------------------------------+\n\nURL: https://mariadb.com/kb/en/st_geomfromgeojson/','','https://mariadb.com/kb/en/st_geomfromgeojson/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (817,47,'Operator Precedence','The precedence is the order in which the SQL operators are evaluated.\n\nThe following list shows the SQL operator precedence. Operators that appear\nfirst in the list have a higher precedence. Operators which are listed\ntogether have the same precedence.\n\n* INTERVAL\n* BINARY, COLLATE\n* !\n* - (unary minus), [[bitwise-not|]] (unary bit inversion)\n* || (string concatenation)\n* ^\n* *, /, DIV, %, MOD\n* -, +\n* <<, >>\n* &\n* |\n* = (comparison), <=>, >=, >, <=, <, <>, !=, IS, LIKE, REGEXP, IN\n* BETWEEN, CASE, WHEN, THEN, ELSE, END\n* NOT\n* &&, AND\n* XOR\n* || (logical or), OR\n* = (assignment), :=\n\nFunctions precedence is always higher than operators precedence.\n\nIn this page CASE refers to the CASE operator, not to the CASE statement.\n\nIf the HIGH_NOT_PRECEDENCE SQL_MODE is set, NOT has the same precedence as !.\n\nThe || operator\'s precedence, as well as its meaning, depends on the\nPIPES_AS_CONCAT SQL_MODE flag: if it is on, || can be used to concatenate\nstrings (like the CONCAT() function) and has a higher precedence.\n\nThe = operator\'s precedence depends on the context - it is higher when = is\nused as a comparison operator.\n\nParenthesis can be used to modify the operators precedence in an expression.\n\nShort-circuit evaluation\n------------------------\n\nThe AND, OR, && and || operators support short-circuit evaluation. This means\nthat, in some cases, the expression on the right of those operators is not\nevaluated, because its result cannot affect the result. In the following\ncases, short-circuit evaluation is used and x() is not evaluated:\n\n* FALSE AND x()\n* FALSE && x()\n* TRUE OR x()\n* TRUE || x()\n* NULL BETWEEN x() AND x()\n\nNote however that the short-circuit evaluation does not apply to NULL AND x().\nAlso, BETWEEN\'s right operands are not evaluated if the left operand is NULL,\nbut in all other cases all the operands are evaluated.\n\nThis is a speed optimization. Also, since functions can have side-effects,\nthis behavior can be used to choose whether execute them or not using a\nconcise syntax:\n\nSELECT some_function() OR log_error();\n\nURL: https://mariadb.com/kb/en/operator-precedence/','','https://mariadb.com/kb/en/operator-precedence/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (818,48,'Addition Operator (+)','Syntax\n------\n\n+\n\nDescription\n-----------\n\nAddition.\n\nIf both operands are integers, the result is calculated with BIGINT precision.\nIf either integer is unsigned, the result is also an unsigned integer.\n\nFor real or string operands, the operand with the highest precision determines\nthe result precision.\n\nExamples\n--------\n\nSELECT 3+5;\n+-----+\n| 3+5 |\n+-----+\n| 8 |\n+-----+\n\nURL: https://mariadb.com/kb/en/addition-operator/','','https://mariadb.com/kb/en/addition-operator/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (819,48,'Division Operator (/)','Syntax\n------\n\n/\n\nDescription\n-----------\n\nDivision operator. Dividing by zero will return NULL. By default, returns four\ndigits after the decimal. This is determined by the server system variable\ndiv_precision_increment which by default is four. It can be set from 0 to 30.\n\nDividing by zero returns NULL. If the ERROR_ON_DIVISION_BY_ZERO SQL_MODE is\nused (the default since MariaDB 10.2.4), a division by zero also produces a\nwarning.\n\nExamples\n--------\n\nSELECT 4/5;\n+--------+\n| 4/5 |\n+--------+\n| 0.8000 |\n+--------+\n\nSELECT 300/(2-2);\n+-----------+\n| 300/(2-2) |\n+-----------+\n| NULL |\n+-----------+\n\nSELECT 300/7;\n+---------+\n| 300/7 |\n+---------+\n| 42.8571 |\n+---------+\n\nChanging div_precision_increment for the session from the default of four to\nsix:\n\nSET div_precision_increment = 6;\n\nSELECT 300/7;\n+-----------+\n| 300/7 |\n+-----------+\n| 42.857143 |\n+-----------+\n\nSELECT 300/7;\n+-----------+\n| 300/7 |\n+-----------+\n| 42.857143 |\n+-----------+\n\nURL: https://mariadb.com/kb/en/division-operator/','','https://mariadb.com/kb/en/division-operator/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (820,48,'Modulo Operator (%)','Syntax\n------\n\nN % M\n\nDescription\n-----------\n\nModulo operator. Returns the remainder of N divided by M. See also MOD.\n\nExamples\n--------\n\nSELECT 1042 % 50;\n+-----------+\n| 1042 % 50 |\n+-----------+\n| 42 |\n+-----------+\n\nURL: https://mariadb.com/kb/en/modulo-operator/','','https://mariadb.com/kb/en/modulo-operator/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (821,48,'Multiplication Operator (*)','Syntax\n------\n\n*\n\nDescription\n-----------\n\nMultiplication operator.\n\nExamples\n--------\n\nSELECT 7*6;\n+-----+\n| 7*6 |\n+-----+\n| 42 |\n+-----+\n\nSELECT 1234567890*9876543210;\n+-----------------------+\n| 1234567890*9876543210 |\n+-----------------------+\n| -6253480962446024716 |\n+-----------------------+\n\nSELECT 18014398509481984*18014398509481984.0;\n+---------------------------------------+\n| 18014398509481984*18014398509481984.0 |\n+---------------------------------------+\n| 324518553658426726783156020576256.0 |\n+---------------------------------------+\n\nSELECT 18014398509481984*18014398509481984;\n+-------------------------------------+\n| 18014398509481984*18014398509481984 |\n+-------------------------------------+\n| 0 |\n+-------------------------------------+\n\nURL: https://mariadb.com/kb/en/multiplication-operator/','','https://mariadb.com/kb/en/multiplication-operator/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (822,48,'Subtraction Operator (-)','Syntax\n------\n\n-\n\nDescription\n-----------\n\nSubtraction. The operator is also used as the unary minus for changing sign.\n\nIf both operands are integers, the result is calculated with BIGINT precision.\nIf either integer is unsigned, the result is also an unsigned integer, unless\nthe NO_UNSIGNED_SUBTRACTION SQL_MODE is enabled, in which case the result is\nalways signed.\n\nFor real or string operands, the operand with the highest precision determines\nthe result precision.\n\nExamples\n--------\n\nSELECT 96-9;\n+------+\n| 96-9 |\n+------+\n| 87 |\n+------+\n\nSELECT 15-17;\n+-------+\n| 15-17 |\n+-------+\n| -2 |\n+-------+\n\nSELECT 3.66 + 1.333;\n+--------------+\n| 3.66 + 1.333 |\n+--------------+\n| 4.993 |\n+--------------+\n\nUnary minus:\n\nSELECT - (3+5);\n+---------+\n| - (3+5) |\n+---------+\n| -8 |\n+---------+\n\nURL: https://mariadb.com/kb/en/subtraction-operator-/','','https://mariadb.com/kb/en/subtraction-operator-/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (823,49,'CHANGE MASTER TO','The terms master and slave have historically been used in replication, but the\nterms terms primary and replica are now preferred. The old terms are used\nstill used in parts of the documentation, and in MariaDB commands, although\nMariaDB 10.5 has begun the process of renaming. The documentation process is\nongoing. See MDEV-18777 to follow progress on this effort.\n\nSyntax\n------\n\nCHANGE MASTER [\'connection_name\'] TO master_def [, master_def] ... \n [FOR CHANNEL \'channel_name\']\n\nmaster_def:\n MASTER_BIND = \'interface_name\'\n | MASTER_HOST = \'host_name\'\n | MASTER_USER = \'user_name\'\n | MASTER_PASSWORD = \'password\'\n | MASTER_PORT = port_num\n | MASTER_CONNECT_RETRY = interval\n | MASTER_HEARTBEAT_PERIOD = interval\n | MASTER_LOG_FILE = \'master_log_name\'\n | MASTER_LOG_POS = master_log_pos\n | RELAY_LOG_FILE = \'relay_log_name\'\n | RELAY_LOG_POS = relay_log_pos\n | MASTER_DELAY = interval\n | MASTER_SSL = {0|1}\n | MASTER_SSL_CA = \'ca_file_name\'\n | MASTER_SSL_CAPATH = \'ca_directory_name\'\n | MASTER_SSL_CERT = \'cert_file_name\'\n | MASTER_SSL_CRL = \'crl_file_name\'\n | MASTER_SSL_CRLPATH = \'crl_directory_name\'\n | MASTER_SSL_KEY = \'key_file_name\'\n | MASTER_SSL_CIPHER = \'cipher_list\'\n | MASTER_SSL_VERIFY_SERVER_CERT = {0|1}\n | MASTER_USE_GTID = {current_pos|slave_pos|no}\n | MASTER_DEMOTE_TO_SLAVE = bool\n | IGNORE_SERVER_IDS = (server_id_list)\n | DO_DOMAIN_IDS = ([N,..])\n | IGNORE_DOMAIN_IDS = ([N,..])\n\nDescription\n-----------\n\nThe CHANGE MASTER statement sets the options that a replica uses to connect to\nand replicate from a primary.\n\nMariaDB starting with 10.7.0\n----------------------------\nThe FOR CHANNEL keyword was added for MySQL compatibility. This is identical\nto using the channel_name directly after CHANGE MASTER.\n\nMulti-Source Replication\n------------------------\n\nIf you are using multi-source replication, then you need to specify a\nconnection name when you execute CHANGE MASTER. There are two ways to do this:\n\n* Setting the default_master_connection system variable prior to executing\nCHANGE MASTER.\n* Setting the connection_name parameter when executing CHANGE MASTER.\n\ndefault_master_connection\n-------------------------\n\nSET default_master_connection = \'gandalf\';\nSTOP SLAVE;\nCHANGE MASTER TO \n MASTER_PASSWORD=\'new3cret\';\nSTART SLAVE;\n\nconnection_name\n---------------\n\nSTOP SLAVE \'gandalf\';\nCHANGE MASTER \'gandalf\' TO \n MASTER_PASSWORD=\'new3cret\';\nSTART SLAVE \'gandalf\';\n\nOptions\n-------\n\nConnection Options\n------------------\n\nMASTER_USER\n-----------\n\nThe MASTER_USER option for CHANGE MASTER defines the user account that the\nreplica will use to connect to the primary.\n\nThis user account will need the REPLICATION SLAVE privilege (or, from MariaDB\n10.5.1, the REPLICATION REPLICA on the primary.\n\nFor example:\n\nSTOP SLAVE;\nCHANGE MASTER TO\n MASTER_USER=\'repl\',\n MASTER_PASSWORD=\'new3cret\';\nSTART SLAVE;\n\nThe maximum length of the MASTER_USER string is 96 characters until MariaDB\n10.5, and 128 characters from MariaDB 10.6.\n\nMASTER_PASSWORD\n---------------\n\nThe MASTER_USER option for CHANGE MASTER defines the password that the replica\nwill use to connect to the primary as the user account defined by the\nMASTER_USER option.\n\nFor example:\n\nSTOP SLAVE;\nCHANGE MASTER TO \n MASTER_PASSWORD=\'new3cret\';\nSTART SLAVE;\n\nThe maximum length of the MASTER_PASSWORD string is 32 characters. The\neffective maximum length of the string depends on how many bytes are used per\ncharacter and can be up to 96 characters.\n\nDue to MDEV-29994, the password can be silently truncated to 41 characters\nwhen MariaDB is restarted. For this reason it is recommended to use a password\nthat is shorter than this.\n\nMASTER_HOST\n-----------\n\nThe MASTER_HOST option for CHANGE MASTER defines the hostname or IP address of\nthe primary.\n\nIf you set the value of the MASTER_HOST option to the empty string, then that\nis not the same as not setting the option\'s value at all. If you set the value\nof the MASTER_HOST option to the empty string, then the CHANGE MASTER command\nwill fail with an error. In MariaDB 5.3 and before, if you set the value of\nthe MASTER_HOST option to the empty string, then the CHANGE MASTER command\nwould succeed, but the subsequent START SLAVE command would fail.\n\nFor example:\n\nSTOP SLAVE;\nCHANGE MASTER TO\n MASTER_HOST=\'dbserver1.example.com\',\n MASTER_USER=\'repl\',\n MASTER_PASSWORD=\'new3cret\',\n MASTER_USE_GTID=slave_pos;\nSTART SLAVE;\n\nIf you set the value of the MASTER_HOST option in a CHANGE MASTER command,\nthen the replica assumes that the primary is different from before, even if\nyou set the value of this option to the same value it had previously. In this\nscenario, the replica will consider the old values for the primary\'s binary\nlog file name and position to be invalid for the new primary. As a side\neffect, if you do not explicitly set the values of the MASTER_LOG_FILE and\nMASTER_LOG_POS options in the statement, then the statement will be implicitly\nappended with MASTER_LOG_FILE=\'\' and MASTER_LOG_POS=4. However, if you enable\nGTID mode for replication by setting the MASTER_USE_GTID option to some value\nother than no in the statement, then these values will effectively be ignored\nanyway.\n\nReplicas cannot connect to primaries using Unix socket files or Windows named\npipes. The replica must connect to the primary using TCP/IP.\n\nThe maximum length of the MASTER_HOST string is 60 characters until MariaDB\n10.5, and 255 characters from MariaDB 10.6.\n\nMASTER_PORT\n-----------\n\nThe MASTER_PORT option for CHANGE MASTER defines the TCP/IP port of the\nprimary.\n\nFor example:\n\nSTOP SLAVE;\nCHANGE MASTER TO\n MASTER_HOST=\'dbserver1.example.com\',\n MASTER_PORT=3307,\n MASTER_USER=\'repl\',\n MASTER_PASSWORD=\'new3cret\',\n MASTER_USE_GTID=slave_pos;\nSTART SLAVE;\n\nIf you set the value of the MASTER_PORT option in a CHANGE MASTER command,\nthen the replica assumes that the primary is different from before, even if\nyou set the value of this option to the same value it had previously. In this\nscenario, the replica will consider the old values for the primary\'s binary\nlog file name and position to be invalid for the new primary. As a side\neffect, if you do not explicitly set the values of the MASTER_LOG_FILE and\nMASTER_LOG_POS options in the statement, then the statement will be implicitly\nappended with MASTER_LOG_FILE=\'\' and MASTER_LOG_POS=4. However, if you enable\nGTID mode for replication by setting the MASTER_USE_GTID option to some value\nother than no in the statement, then these values will effectively be ignored\nanyway.\n\nReplicas cannot connect to primaries using Unix socket files or Windows named\npipes. The replica must connect to the primary using TCP/IP.\n\nMASTER_CONNECT_RETRY\n--------------------\n\nThe MASTER_CONNECT_RETRY option for CHANGE MASTER defines how many seconds\nthat the replica will wait between connection retries. The default is 60.\n\nSTOP SLAVE;\nCHANGE MASTER TO \n MASTER_CONNECT_RETRY=20;\nSTART SLAVE;\n\nThe number of connection attempts is limited by the master_retry_count option.\nIt can be set either on the command-line or in a server option group in an\noption file prior to starting up the server. For example:\n\n[mariadb]\n...\nmaster_retry_count=4294967295\n\nMASTER_BIND\n-----------\n\nThe MASTER_BIND option for CHANGE MASTER is only supported by MySQL 5.6.2 and\nlater and by MySQL NDB Cluster 7.3.1 and later. This option is not supported\nby MariaDB. See MDEV-19248 for more information.\n\nThe MASTER_BIND option for CHANGE MASTER can be used on replicas that have\nmultiple network interfaces to choose which network interface the replica will\nuse to connect to the primary.\n\nMASTER_HEARTBEAT_PERIOD\n-----------------------\n\nThe MASTER_HEARTBEAT_PERIOD option for CHANGE MASTER can be used to set the\ninterval in seconds between replication heartbeats. Whenever the primary\'s\nbinary log is updated with an event, the waiting period for the next heartbeat\nis reset.\n\nThis option\'s interval argument has the following characteristics:\n\n* It is a decimal value with a range of 0 to 4294967 seconds.\n* It has a resolution of hundredths of a second.\n* Its smallest valid non-zero value is 0.001.\n* Its default value is the value of the slave_net_timeout system variable\ndivided by 2.\n* If it\'s set to 0, then heartbeats are disabled.\n\nHeartbeats are sent by the primary only if there are no unsent events in the\nbinary log file for a period longer than the interval.\n\nIf the RESET SLAVE statement is executed, then the heartbeat interval is reset\nto the default.\n\nIf the slave_net_timeout system variable is set to a value that is lower than\nthe current heartbeat interval, then a warning will be issued.\n\nTLS Options\n-----------\n\nThe TLS options are used for providing information about TLS. The options can\nbe set even on replicas that are compiled without TLS support. The TLS options\nare saved to either the default master.info file or the file that is\nconfigured by the master_info_file option, but these TLS options are ignored\nunless the replica supports TLS.\n\nSee Replication with Secure Connections for more information.\n\nMASTER_SSL\n----------\n\nThe MASTER_SSL option for CHANGE MASTER tells the replica whether to force TLS\nfor the connection. The valid values are 0 or 1.\n\nFor example:\n\nSTOP SLAVE;\nCHANGE MASTER TO\n MASTER_SSL=1;\nSTART SLAVE;\n\nMASTER_SSL_CA\n-------------\n\nThe MASTER_SSL_CA option for CHANGE MASTER defines a path to a PEM file that\nshould contain one or more X509 certificates for trusted Certificate\nAuthorities (CAs) to use for TLS. This option requires that you use the\nabsolute path, not a relative path. This option implies the MASTER_SSL option.\n\nFor example:\n\nSTOP SLAVE;\nCHANGE MASTER TO\n MASTER_SSL_CERT=\'/etc/my.cnf.d/certificates/server-cert.pem\',\n MASTER_SSL_KEY=\'/etc/my.cnf.d/certificates/server-key.pem\',\n MASTER_SSL_CA=\'/etc/my.cnf.d/certificates/ca.pem\',\n MASTER_SSL_VERIFY_SERVER_CERT=1;\nSTART SLAVE;\n\nSee Secure Connections Overview: Certificate Authorities (CAs) for more\ninformation.\n\nThe maximum length of MASTER_SSL_CA string is 511 characters.\n\nMASTER_SSL_CAPATH\n-----------------\n\nThe MASTER_SSL_CAPATH option for CHANGE MASTER defines a path to a directory\nthat contains one or more PEM files that should each contain one X509\ncertificate for a trusted Certificate Authority (CA) to use for TLS. This\noption requires that you use the absolute path, not a relative path. The\ndirectory specified by this option needs to be run through the openssl rehash\ncommand. This option implies the MASTER_SSL option.\n\nFor example:\n\nSTOP SLAVE;\nCHANGE MASTER TO\n MASTER_SSL_CERT=\'/etc/my.cnf.d/certificates/server-cert.pem\',\n MASTER_SSL_KEY=\'/etc/my.cnf.d/certificates/server-key.pem\',\n MASTER_SSL_CAPATH=\'/etc/my.cnf.d/certificates/ca/\',\n MASTER_SSL_VERIFY_SERVER_CERT=1;\nSTART SLAVE;\n\nSee Secure Connections Overview: Certificate Authorities (CAs) for more\ninformation.\n\nThe maximum length of MASTER_SSL_CA_PATH string is 511 characters.\n\nMASTER_SSL_CERT\n---------------\n\nThe MASTER_SSL_CERT option for CHANGE MASTER defines a path to the X509\ncertificate file to use for TLS. This option requires that you use the\nabsolute path, not a relative path. This option implies the MASTER_SSL option.\n\nFor example:\n\nSTOP SLAVE;\nCHANGE MASTER TO\n MASTER_SSL_CERT=\'/etc/my.cnf.d/certificates/server-cert.pem\',\n MASTER_SSL_KEY=\'/etc/my.cnf.d/certificates/server-key.pem\',\n MASTER_SSL_CA=\'/etc/my.cnf.d/certificates/ca.pem\',\n MASTER_SSL_VERIFY_SERVER_CERT=1;\nSTART SLAVE;\n\nThe maximum length of MASTER_SSL_CERT string is 511 characters.\n\nMASTER_SSL_CRL\n--------------\n\nThe MASTER_SSL_CRL option for CHANGE MASTER defines a path to a PEM file that\nshould contain one or more revoked X509 certificates to use for TLS. This\noption requires that you use the absolute path, not a relative path.\n\nThis option is only supported if the server was built with OpenSSL. If the\nserver was built with yaSSL, then this option is not supported. See TLS and\nCryptography Libraries Used by MariaDB for more information about which\nlibraries are used on which platforms.\n\nFor example:\n\nSTOP SLAVE;\nCHANGE MASTER TO\n MASTER_SSL_CERT=\'/etc/my.cnf.d/certificates/server-cert.pem\',\n MASTER_SSL_KEY=\'/etc/my.cnf.d/certificates/server-key.pem\',\n MASTER_SSL_CA=\'/etc/my.cnf.d/certificates/ca.pem\',\n MASTER_SSL_VERIFY_SERVER_CERT=1,\n MASTER_SSL_CRL=\'/etc/my.cnf.d/certificates/crl.pem\';\nSTART SLAVE;\n\nSee Secure Connections Overview: Certificate Revocation Lists (CRLs) for more\ninformation.\n\nThe maximum length of MASTER_SSL_CRL string is 511 characters.\n\nMASTER_SSL_CRLPATH\n------------------\n\nThe MASTER_SSL_CRLPATH option for CHANGE MASTER defines a path to a directory\nthat contains one or more PEM files that should each contain one revoked X509\ncertificate to use for TLS. This option requires that you use the absolute\npath, not a relative path. The directory specified by this variable needs to\nbe run through the openssl rehash command.\n\nThis option is only supported if the server was built with OpenSSL. If the\nserver was built with yaSSL, then this option is not supported. See TLS and\nCryptography Libraries Used by MariaDB for more information about which\nlibraries are used on which platforms.\n\nFor example:\n\nSTOP SLAVE;\nCHANGE MASTER TO\n MASTER_SSL_CERT=\'/etc/my.cnf.d/certificates/server-cert.pem\',\n MASTER_SSL_KEY=\'/etc/my.cnf.d/certificates/server-key.pem\',\n MASTER_SSL_CA=\'/etc/my.cnf.d/certificates/ca.pem\',\n MASTER_SSL_VERIFY_SERVER_CERT=1,\n MASTER_SSL_CRLPATH=\'/etc/my.cnf.d/certificates/crl/\';\nSTART SLAVE;\n\nSee Secure Connections Overview: Certificate Revocation Lists (CRLs) for more\ninformation.\n\nThe maximum length of MASTER_SSL_CRL_PATH string is 511 characters.\n\nMASTER_SSL_KEY\n--------------\n\nThe MASTER_SSL_KEY option for CHANGE MASTER defines a path to a private key\nfile to use for TLS. This option requires that you use the absolute path, not\na relative path. This option implies the MASTER_SSL option.\n\nFor example:\n\nSTOP SLAVE;\nCHANGE MASTER TO\n MASTER_SSL_CERT=\'/etc/my.cnf.d/certificates/server-cert.pem\',\n MASTER_SSL_KEY=\'/etc/my.cnf.d/certificates/server-key.pem\',\n MASTER_SSL_CA=\'/etc/my.cnf.d/certificates/ca.pem\',\n MASTER_SSL_VERIFY_SERVER_CERT=1;','','https://mariadb.com/kb/en/change-master-to/');
+update help_topic set description = CONCAT(description, '\nSTART SLAVE;\n\nThe maximum length of MASTER_SSL_KEY string is 511 characters.\n\nMASTER_SSL_CIPHER\n-----------------\n\nThe MASTER_SSL_CIPHER option for CHANGE MASTER defines the list of permitted\nciphers or cipher suites to use for TLS. Besides cipher names, if MariaDB was\ncompiled with OpenSSL, this option could be set to \"SSLv3\" or \"TLSv1.2\" to\nallow all SSLv3 or all TLSv1.2 ciphers. Note that the TLSv1.3 ciphers cannot\nbe excluded when using OpenSSL, even by using this option. See Using TLSv1.3\nfor details. This option implies the MASTER_SSL option.\n\nFor example:\n\nSTOP SLAVE;\nCHANGE MASTER TO\n MASTER_SSL_CERT=\'/etc/my.cnf.d/certificates/server-cert.pem\',\n MASTER_SSL_KEY=\'/etc/my.cnf.d/certificates/server-key.pem\',\n MASTER_SSL_CA=\'/etc/my.cnf.d/certificates/ca.pem\',\n MASTER_SSL_VERIFY_SERVER_CERT=1,\n MASTER_SSL_CIPHER=\'TLSv1.2\';\nSTART SLAVE;\n\nThe maximum length of MASTER_SSL_CIPHER string is 511 characters.\n\nMASTER_SSL_VERIFY_SERVER_CERT\n-----------------------------\n\nThe MASTER_SSL_VERIFY_SERVER_CERT option for CHANGE MASTER enables server\ncertificate verification. This option is disabled by default.\n\nFor example:\n\nSTOP SLAVE;\nCHANGE MASTER TO\n MASTER_SSL_CERT=\'/etc/my.cnf.d/certificates/server-cert.pem\',\n MASTER_SSL_KEY=\'/etc/my.cnf.d/certificates/server-key.pem\',\n MASTER_SSL_CA=\'/etc/my.cnf.d/certificates/ca.pem\',\n MASTER_SSL_VERIFY_SERVER_CERT=1;\nSTART SLAVE;\n\nSee Secure Connections Overview: Server Certificate Verification for more\ninformation.\n\nBinary Log Options\n------------------\n\nThese options are related to the binary log position on the primary.\n\nMASTER_LOG_FILE\n---------------\n\nThe MASTER_LOG_FILE option for CHANGE MASTER can be used along with\nMASTER_LOG_POS to specify the coordinates at which the replica\'s I/O thread\nshould begin reading from the primary\'s binary logs the next time the thread\nstarts.\n\nFor example:\n\nSTOP SLAVE;\nCHANGE MASTER TO\n MASTER_LOG_FILE=\'master2-bin.001\',\n MASTER_LOG_POS=4;\nSTART SLAVE;\n\nThe MASTER_LOG_FILE and MASTER_LOG_POS options cannot be specified if the\nRELAY_LOG_FILE and RELAY_LOG_POS options were also specified.\n\nThe MASTER_LOG_FILE and MASTER_LOG_POS options are effectively ignored if you\nenable GTID mode for replication by setting the MASTER_USE_GTID option to some\nvalue other than no in the statement.\n\nMASTER_LOG_POS\n--------------\n\nThe MASTER_LOG_POS option for CHANGE MASTER can be used along with\nMASTER_LOG_FILE to specify the coordinates at which the replica\'s I/O thread\nshould begin reading from the primary\'s binary logs the next time the thread\nstarts.\n\nFor example:\n\nSTOP SLAVE;\nCHANGE MASTER TO\n MASTER_LOG_FILE=\'master2-bin.001\',\n MASTER_LOG_POS=4;\nSTART SLAVE;\n\nThe MASTER_LOG_FILE and MASTER_LOG_POS options cannot be specified if the\nRELAY_LOG_FILE and RELAY_LOG_POS options were also specified.\n\nThe MASTER_LOG_FILE and MASTER_LOG_POS options are effectively ignored if you\nenable GTID mode for replication by setting the MASTER_USE_GTID option to some\nvalue other than no in the statement.\n\nRelay Log Options\n-----------------\n\nThese options are related to the relay log position on the replica.\n\nRELAY_LOG_FILE\n--------------\n\nThe RELAY_LOG_FILE option for CHANGE MASTER can be used along with the\nRELAY_LOG_POS option to specify the coordinates at which the replica\'s SQL\nthread should begin reading from the relay log the next time the thread starts.\n\nThe CHANGE MASTER statement usually deletes all relay log files. However, if\nthe RELAY_LOG_FILE and/or RELAY_LOG_POS options are specified, then existing\nrelay log files are kept.\n\nWhen you want to change the relay log position, you only need to stop the\nreplica\'s SQL thread. The replica\'s I/O thread can continue running. The STOP\nSLAVE and START SLAVE statements support the SQL_THREAD option for this\nscenario. For example:\n\nSTOP SLAVE SQL_THREAD;\nCHANGE MASTER TO\n RELAY_LOG_FILE=\'slave-relay-bin.006\',\n RELAY_LOG_POS=4025;\nSTART SLAVE SQL_THREAD;\n\nWhen the value of this option is changed, the metadata about the replica\'s SQL\nthread\'s position in the relay logs will also be changed in the relay-log.info\nfile or the file that is configured by the relay_log_info_file system variable.\n\nThe RELAY_LOG_FILE and RELAY_LOG_POS options cannot be specified if the\nMASTER_LOG_FILE and MASTER_LOG_POS options were also specified.\n\nRELAY_LOG_POS\n-------------\n\nThe RELAY_LOG_POS option for CHANGE MASTER can be used along with the\nRELAY_LOG_FILE option to specify the coordinates at which the replica\'s SQL\nthread should begin reading from the relay log the next time the thread starts.\n\nThe CHANGE MASTER statement usually deletes all relay log files. However, if\nthe RELAY_LOG_FILE and/or RELAY_LOG_POS options are specified, then existing\nrelay log files are kept.\n\nWhen you want to change the relay log position, you only need to stop the\nreplica\'s SQL thread. The replica\'s I/O thread can continue running. The STOP\nSLAVE and START SLAVE statements support the SQL_THREAD option for this\nscenario. For example:\n\nSTOP SLAVE SQL_THREAD;\nCHANGE MASTER TO\n RELAY_LOG_FILE=\'slave-relay-bin.006\',\n RELAY_LOG_POS=4025;\nSTART SLAVE SQL_THREAD;\n\nWhen the value of this option is changed, the metadata about the replica\'s SQL\nthread\'s position in the relay logs will also be changed in the relay-log.info\nfile or the file that is configured by the relay_log_info_file system variable.\n\nThe RELAY_LOG_FILE and RELAY_LOG_POS options cannot be specified if the\nMASTER_LOG_FILE and MASTER_LOG_POS options were also specified.\n\nGTID Options\n------------\n\nMASTER_USE_GTID\n---------------\n\nThe MASTER_USE_GTID option for CHANGE MASTER can be used to configure the\nreplica to use the global transaction ID (GTID) when connecting to a primary.\nThe possible values are:\n\n* current_pos - Replicate in GTID mode and use gtid_current_pos as the\nposition to start downloading transactions from the primary. Deprecated from\nMariaDB 10.10. Using to transition to primary can break the replication state\nif the replica executes local transactions due to actively updating\ngtid_current_pos with gtid_binlog_pos and gtid_slave_pos. Use the new, safe,\nMASTER_DEMOTE_TO_SLAVE=<bool> option instead.\n* slave_pos - Replicate in GTID mode and use gtid_slave_pos as the position to\nstart downloading transactions from the primary. From MariaDB 10.5.1,\nreplica_pos is an alias for slave_pos.\n* no - Don\'t replicate in GTID mode.\n\nMASTER_DEMOTE_TO_SLAVE\n----------------------\n\nMariaDB starting with 10.10\n---------------------------\nUsed to transition a primary to become a replica. Replaces the old\nMASTER_USE_GTID=current_pos with a safe alternative by forcing users to set\nUsing_Gtid=Slave_Pos and merging gtid_binlog_pos into gtid_slave_pos once at\nCHANGE MASTER TO time. If gtid_slave_pos is more recent than gtid_binlog_pos\n(as in the case of chain replication), the replication state should be\npreserved.\n\nFor example:\n\nSTOP SLAVE;\nCHANGE MASTER TO\n MASTER_USE_GTID = current_pos;\nSTART SLAVE;\n\nOr:\n\nSTOP SLAVE;\nSET GLOBAL gtid_slave_pos=\'0-1-153\';\nCHANGE MASTER TO\n MASTER_USE_GTID = slave_pos;\nSTART SLAVE;\n\nReplication Filter Options\n--------------------------\n\nAlso see Replication filters.\n\nIGNORE_SERVER_IDS\n-----------------\n\nThe IGNORE_SERVER_IDS option for CHANGE MASTER can be used to configure a\nreplica to ignore binary log events that originated from certain servers.\nFiltered binary log events will not get logged to the replica’s relay log, and\nthey will not be applied by the replica.\n\nThe option\'s value can be specified by providing a comma-separated list of\nserver_id values. For example:\n\nSTOP SLAVE;\nCHANGE MASTER TO \n IGNORE_SERVER_IDS = (3,5);\nSTART SLAVE;\n\nIf you would like to clear a previously set list, then you can set the value\nto an empty list. For example:\n\nSTOP SLAVE;\nCHANGE MASTER TO \n IGNORE_SERVER_IDS = ();\nSTART SLAVE;\n\nDO_DOMAIN_IDS\n-------------\n\nThe DO_DOMAIN_IDS option for CHANGE MASTER can be used to configure a replica\nto only apply binary log events if the transaction\'s GTID is in a specific\ngtid_domain_id value. Filtered binary log events will not get logged to the\nreplica’s relay log, and they will not be applied by the replica.\n\nThe option\'s value can be specified by providing a comma-separated list of\ngtid_domain_id values. Duplicate values are automatically ignored. For example:\n\nSTOP SLAVE;\nCHANGE MASTER TO \n DO_DOMAIN_IDS = (1,2);\nSTART SLAVE;\n\nIf you would like to clear a previously set list, then you can set the value\nto an empty list. For example:\n\nSTOP SLAVE;\nCHANGE MASTER TO \n DO_DOMAIN_IDS = ();\nSTART SLAVE;\n\nThe DO_DOMAIN_IDS option and the IGNORE_DOMAIN_IDS option cannot both be set\nto non-empty values at the same time. If you want to set the DO_DOMAIN_IDS\noption, and the IGNORE_DOMAIN_IDS option was previously set, then you need to\nclear the value of the IGNORE_DOMAIN_IDS option. For example:\n\nSTOP SLAVE;\nCHANGE MASTER TO \n IGNORE_DOMAIN_IDS = (),\n DO_DOMAIN_IDS = (1,2);\nSTART SLAVE;\n\nThe DO_DOMAIN_IDS option can only be specified if the replica is replicating\nin GTID mode. Therefore, the MASTER_USE_GTID option must also be set to some\nvalue other than no in order to use this option.\n\nIGNORE_DOMAIN_IDS\n-----------------\n\nThe IGNORE_DOMAIN_IDS option for CHANGE MASTER can be used to configure a\nreplica to ignore binary log events if the transaction\'s GTID is in a specific\ngtid_domain_id value. Filtered binary log events will not get logged to the\nreplica’s relay log, and they will not be applied by the replica.\n\nThe option\'s value can be specified by providing a comma-separated list of\ngtid_domain_id values. Duplicate values are automatically ignored. For example:\n\nSTOP SLAVE;\nCHANGE MASTER TO \n IGNORE_DOMAIN_IDS = (1,2);\nSTART SLAVE;\n\nIf you would like to clear a previously set list, then you can set the value\nto an empty list. For example:\n\nSTOP SLAVE;\nCHANGE MASTER TO \n IGNORE_DOMAIN_IDS = ();\nSTART SLAVE;\n\nThe DO_DOMAIN_IDS option and the IGNORE_DOMAIN_IDS option cannot both be set\nto non-empty values at the same time. If you want to set the IGNORE_DOMAIN_IDS\noption, and the DO_DOMAIN_IDS option was previously set, then you need to\nclear the value of the DO_DOMAIN_IDS option. For example:\n\nSTOP SLAVE;\nCHANGE MASTER TO \n DO_DOMAIN_IDS = (),\n IGNORE_DOMAIN_IDS = (1,2);\nSTART SLAVE;\n\nThe IGNORE_DOMAIN_IDS option can only be specified if the replica is\nreplicating in GTID mode. Therefore, the MASTER_USE_GTID option must also be\nset to some value other than no in order to use this option.\n\nDelayed Replication Options\n---------------------------\n\nMASTER_DELAY\n------------\n\nThe MASTER_DELAY option for CHANGE MASTER can be used to enable delayed\nreplication. This option specifies the time in seconds (at least) that a\nreplica should lag behind the primary up to a maximum value of 2147483647, or\nabout 68 years. Before executing an event, the replica will first wait, if\nnecessary, until the given time has passed since the event was created on the\nprimary. The result is that the replica will reflect the state of the primary\nsome time back in the past. The default is zero, no delay.\n\nSTOP SLAVE;\nCHANGE MASTER TO \n MASTER_DELAY=3600;\nSTART SLAVE;\n\nChanging Option Values\n----------------------\n\nIf you don\'t specify a given option when executing the CHANGE MASTER\nstatement, then the option keeps its old value in most cases. Most of the\ntime, there is no need to specify the options that do not need to change. For\nexample, if the password for the user account that the replica uses to connect\nto its primary has changed, but no other options need to change, then you can\njust change the MASTER_PASSWORD option by executing the following commands:\n\nSTOP SLAVE;\nCHANGE MASTER TO \n MASTER_PASSWORD=\'new3cret\';\nSTART SLAVE;\n\nThere are some cases where options are implicitly reset, such as when the\nMASTER_HOST and MASTER_PORT options are changed.\n\nOption Persistence\n------------------\n\nThe values of the MASTER_LOG_FILE and MASTER_LOG_POS options (i.e. the binary\nlog position on the primary) and most other options are written to either the\ndefault master.info file or the file that is configured by the\nmaster_info_file option. The replica\'s I/O thread keeps this binary log\nposition updated as it downloads events only when MASTER_USE_GTID option is\nset to NO. Otherwise the file is not updated on a per event basis.\n\nThe master_info_file option can be set either on the command-line or in a\nserver option group in an option file prior to starting up the server. For\nexample:\n\n[mariadb]\n...\nmaster_info_file=/mariadb/myserver1-master.info\n\nThe values of the RELAY_LOG_FILE and RELAY_LOG_POS options (i.e. the relay log\nposition) are written to either the default relay-log.info file or the file\nthat is configured by the relay_log_info_file system variable. The replica\'s\nSQL thread keeps this relay log position updated as it applies events.\n\nThe relay_log_info_file system variable can be set either on the command-line\nor in a server option group in an option file prior to starting up the server.\nFor example:\n\n[mariadb]\n...\nrelay_log_info_file=/mariadb/myserver1-relay-log.info\n\nGTID Persistence\n----------------\n\nIf the replica is replicating binary log events that contain GTIDs, then the\nreplica\'s SQL thread will write every GTID that it applies to the\nmysql.gtid_slave_pos table. This GTID can be inspected and modified through\nthe gtid_slave_pos system variable.\n\nIf the replica has the log_slave_updates system variable enabled and if the\nreplica has the binary log enabled, then every write by the replica\'s SQL\nthread will also go into the replica\'s binary log. This means that GTIDs of\nreplicated transactions would be reflected in the value of the gtid_binlog_pos\nsystem variable.\n\nCreating a Replica from a Backup\n--------------------------------\n\nThe CHANGE MASTER statement is useful for setting up a replica when you have a\nbackup of the primary and you also have the binary log position or GTID\nposition corresponding to the backup.\n\nAfter restoring the backup on the replica, you could execute something like\nthis to use the binary log position:\n\nCHANGE MASTER TO\n MASTER_LOG_FILE=\'master2-bin.001\',\n MASTER_LOG_POS=4;\nSTART SLAVE;\n') WHERE help_topic_id = 823;
+update help_topic set description = CONCAT(description, '\nOr you could execute something like this to use the GTID position:\n\nSET GLOBAL gtid_slave_pos=\'0-1-153\';\nCHANGE MASTER TO\n MASTER_USE_GTID=slave_pos;\nSTART SLAVE;\n\nSee Setting up a Replication Slave with Mariabackup for more information on\nhow to do this with Mariabackup.\n\nExample\n-------\n\nThe following example changes the primary and primary\'s binary log\ncoordinates. This is used when you want to set up the replica to replicate the\nprimary:\n\nCHANGE MASTER TO\n MASTER_HOST=\'master2.mycompany.com\',\n MASTER_USER=\'replication\',\n MASTER_PASSWORD=\'bigs3cret\',\n MASTER_PORT=3306,\n MASTER_LOG_FILE=\'master2-bin.001\',\n MASTER_LOG_POS=4,\n MASTER_CONNECT_RETRY=10;\nSTART SLAVE;\n\nURL: https://mariadb.com/kb/en/change-master-to/') WHERE help_topic_id = 823;
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (824,49,'START SLAVE','The terms master and slave have historically been used in replication, but the\nterms terms primary and replica are now preferred. The old terms are used\nstill used in parts of the documentation, and in MariaDB commands, although\nMariaDB 10.5 has begun the process of renaming. The documentation process is\nongoing. See MDEV-18777 to follow progress on this effort.\n\nSyntax\n------\n\nSTART SLAVE [\"connection_name\"] [thread_type [, thread_type] ... ] [FOR\nCHANNEL \"connection_name\"]\nSTART SLAVE [\"connection_name\"] [SQL_THREAD] UNTIL \n MASTER_LOG_FILE = \'log_name\', MASTER_LOG_POS = log_pos [FOR CHANNEL\n\"connection_name\"]\nSTART SLAVE [\"connection_name\"] [SQL_THREAD] UNTIL\n RELAY_LOG_FILE = \'log_name\', RELAY_LOG_POS = log_pos [FOR CHANNEL\n\"connection_name\"]\nSTART SLAVE [\"connection_name\"] [SQL_THREAD] UNTIL\n MASTER_GTID_POS = <GTID position> [FOR CHANNEL \"connection_name\"]\nSTART ALL SLAVES [thread_type [, thread_type]]\n\nSTART REPLICA [\"connection_name\"] [thread_type [, thread_type] ... ] -- from\n10.5.1\nSTART REPLICA [\"connection_name\"] [SQL_THREAD] UNTIL \n MASTER_LOG_FILE = \'log_name\', MASTER_LOG_POS = log_pos -- from 10.5.1\nSTART REPLICA [\"connection_name\"] [SQL_THREAD] UNTIL\n RELAY_LOG_FILE = \'log_name\', RELAY_LOG_POS = log_pos -- from 10.5.1\nSTART REPLICA [\"connection_name\"] [SQL_THREAD] UNTIL\n MASTER_GTID_POS = <GTID position> -- from 10.5.1\nSTART ALL REPLICAS [thread_type [, thread_type]] -- from 10.5.1\n\nthread_type: IO_THREAD | SQL_THREAD\n\nDescription\n-----------\n\nSTART SLAVE (START REPLICA from MariaDB 10.5.1) with no thread_type options\nstarts both of the replica threads (see replication). The I/O thread reads\nevents from the primary server and stores them in the relay log. The SQL\nthread reads events from the relay log and executes them. START SLAVE requires\nthe SUPER privilege, or, from MariaDB 10.5.2, the REPLICATION SLAVE ADMIN\nprivilege.\n\nIf START SLAVE succeeds in starting the replica threads, it returns without\nany error. However, even in that case, it might be that the replica threads\nstart and then later stop (for example, because they do not manage to connect\nto the primary or read its binary log, or some other problem). START SLAVE\ndoes not warn you about this. You must check the replica\'s error log for error\nmessages generated by the replica threads, or check that they are running\nsatisfactorily with SHOW SLAVE STATUS (SHOW REPLICA STATUS from MariaDB\n10.5.1).\n\nSTART SLAVE UNTIL\n-----------------\n\nSTART SLAVE UNTIL refers to the SQL_THREAD replica position at which the\nSQL_THREAD replication will halt. If SQL_THREAD isn\'t specified both threads\nare started.\n\nSTART SLAVE UNTIL master_gtid_pos=xxx is also supported. See Global\nTransaction ID/START SLAVE UNTIL master_gtid_pos=xxx for more details.\n\nconnection_name\n---------------\n\nIf there is only one nameless primary, or the default primary (as specified by\nthe default_master_connection system variable) is intended, connection_name\ncan be omitted. If provided, the START SLAVE statement will apply to the\nspecified primary. connection_name is case-insensitive.\n\nMariaDB starting with 10.7.0\n----------------------------\nThe FOR CHANNEL keyword was added for MySQL compatibility. This is identical\nas using the channel_name directly after START SLAVE.\n\nSTART ALL SLAVES\n----------------\n\nSTART ALL SLAVES starts all configured replicas (replicas with master_host not\nempty) that were not started before. It will give a note for all started\nconnections. You can check the notes with SHOW WARNINGS.\n\nSTART REPLICA\n-------------\n\nMariaDB starting with 10.5.1\n----------------------------\nSTART REPLICA is an alias for START SLAVE from MariaDB 10.5.1.\n\nURL: https://mariadb.com/kb/en/start-replica/','','https://mariadb.com/kb/en/start-replica/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (825,49,'STOP SLAVE','The terms master and slave have historically been used in replication, but the\nterms terms primary and replica are now preferred. The old terms are used\nstill used in parts of the documentation, and in MariaDB commands, although\nMariaDB 10.5 has begun the process of renaming. The documentation process is\nongoing. See MDEV-18777 to follow progress on this effort.\n\nSyntax\n------\n\nSTOP SLAVE [\"connection_name\"] [thread_type [, thread_type] ... ] [FOR CHANNEL\n\"connection_name\"]\n\nSTOP ALL SLAVES [thread_type [, thread_type]]\n\nSTOP REPLICA [\"connection_name\"] [thread_type [, thread_type] ... ] -- from\n10.5.1\n\nSTOP ALL REPLICAS [thread_type [, thread_type]] -- from 10.5.1\n\nthread_type: IO_THREAD | SQL_THREAD\n\nDescription\n-----------\n\nStops the replica threads. STOP SLAVE requires the SUPER privilege, or, from\nMariaDB 10.5.2, the REPLICATION SLAVE ADMIN privilege.\n\nLike START SLAVE, this statement may be used with the IO_THREAD and SQL_THREAD\noptions to name the thread or threads to be stopped. In almost all cases, one\nnever need to use the thread_type options.\n\nSTOP SLAVE waits until any current replication event group affecting one or\nmore non-transactional tables has finished executing (if there is any such\nreplication group), or until the user issues a KILL QUERY or KILL CONNECTION\nstatement.\n\nNote that STOP SLAVE doesn\'t delete the connection permanently. Next time you\nexecute START SLAVE or the MariaDB server restarts, the replica connection is\nrestored with it\'s original arguments. If you want to delete a connection, you\nshould execute RESET SLAVE.\n\nSTOP ALL SLAVES\n---------------\n\nSTOP ALL SLAVES stops all your running replicas. It will give you a note for\nevery stopped connection. You can check the notes with SHOW WARNINGS.\n\nconnection_name\n---------------\n\nThe connection_name option is used for multi-source replication.\n\nIf there is only one nameless master, or the default master (as specified by\nthe default_master_connection system variable) is intended, connection_name\ncan be omitted. If provided, the STOP SLAVE statement will apply to the\nspecified master. connection_name is case-insensitive.\n\nMariaDB starting with 10.7.0\n----------------------------\nThe FOR CHANNEL keyword was added for MySQL compatibility. This is identical\nas using the channel_name directly after STOP SLAVE.\n\nSTOP REPLICA\n------------\n\nMariaDB starting with 10.5.1\n----------------------------\nSTOP REPLICA is an alias for STOP SLAVE from MariaDB 10.5.1.\n\nURL: https://mariadb.com/kb/en/stop-replica/','','https://mariadb.com/kb/en/stop-replica/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (826,49,'RESET REPLICA/SLAVE','The terms master and slave have historically been used in replication, but the\nterms terms primary and replica are now preferred. The old terms are used\nstill used in parts of the documentation, and in MariaDB commands, although\nMariaDB 10.5 has begun the process of renaming. The documentation process is\nongoing. See MDEV-18777 to follow progress on this effort.\n\nSyntax\n------\n\nRESET REPLICA [\"connection_name\"] [ALL] [FOR CHANNEL \"connection_name\"] --\nfrom MariaDB 10.5.1 \nRESET SLAVE [\"connection_name\"] [ALL] [FOR CHANNEL \"connection_name\"]\n\nDescription\n-----------\n\nRESET REPLICA/SLAVE makes the replica forget its replication position in the\nmaster\'s binary log. This statement is meant to be used for a clean start. It\ndeletes the master.info and relay-log.info files, all the relay log files, and\nstarts a new relay log file. To use RESET REPLICA/SLAVE, the replica threads\nmust be stopped (use STOP REPLICA/SLAVE if necessary).\n\nNote: All relay log files are deleted, even if they have not been completely\nexecuted by the slave SQL thread. (This is a condition likely to exist on a\nreplication slave if you have issued a STOP REPLICA/SLAVE statement or if the\nslave is highly loaded.)\n\nNote: RESET REPLICA does not reset the global gtid_slave_pos variable. This\nmeans that a replica server configured with CHANGE MASTER TO\nMASTER_USE_GTID=slave_pos will not receive events with GTIDs occurring before\nthe state saved in gtid_slave_pos. If the intent is to reprocess these events,\ngtid_slave_pos must be manually reset, e.g. by executing set global\ngtid_slave_pos=\"\".\n\nConnection information stored in the master.info file is immediately reset\nusing any values specified in the corresponding startup options. This\ninformation includes values such as master host, master port, master user, and\nmaster password. If the replica SQL thread was in the middle of replicating\ntemporary tables when it was stopped, and RESET REPLICA/SLAVE is issued, these\nreplicated temporary tables are deleted on the slave.\n\nThe ALL also resets the PORT, HOST, USER and PASSWORD parameters for the\nslave. If you are using a connection name, it will permanently delete it and\nit will not show up anymore in SHOW ALL REPLICAS/SLAVE STATUS.\n\nconnection_name\n---------------\n\nThe connection_name option is used for multi-source replication.\n\nIf there is only one nameless primary, or the default primary (as specified by\nthe default_master_connection system variable) is intended, connection_name\ncan be omitted. If provided, the RESET REPLICA/SLAVE statement will apply to\nthe specified primary. connection_name is case-insensitive.\n\nMariaDB starting with 10.7.0\n----------------------------\nThe FOR CHANNEL keyword was added for MySQL compatibility. This is identical\nas using the channel_name directly after RESET REPLICA.\n\nRESET REPLICA\n-------------\n\nMariaDB starting with 10.5.1\n----------------------------\nRESET REPLICA is an alias for RESET SLAVE from MariaDB 10.5.1.\n\nURL: https://mariadb.com/kb/en/reset-replica/','','https://mariadb.com/kb/en/reset-replica/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (827,49,'RESET MASTER','RESET MASTER [TO #]\n\nDeletes all binary log files listed in the index file, resets the binary log\nindex file to be empty, and creates a new binary log file with a suffix of\n.000001.\n\nIf TO # is given, then the first new binary log file will start from number #.\n\nThis statement is for use only when the master is started for the first time,\nand should never be used if any slaves are actively replicating from the\nbinary log.\n\nURL: https://mariadb.com/kb/en/reset-master/','','https://mariadb.com/kb/en/reset-master/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (828,50,'EXECUTE Statement','Syntax\n------\n\nEXECUTE stmt_name\n [USING expression[, expression] ...]\n\nMariaDB starting with 10.2.3\n----------------------------\nEXECUTE with expression as parameters was introduced in MariaDB 10.2.3. Before\nthat one could only use variables (@var_name) as parameters.\n\nDescription\n-----------\n\nAfter preparing a statement with PREPARE, you execute it with an EXECUTE\nstatement that refers to the prepared statement name. If the prepared\nstatement contains any parameter markers, you must supply a USING clause that\nlists user variables containing the values to be bound to the parameters.\nParameter values can be supplied only by user variables, and the USING clause\nmust name exactly as many variables as the number of parameter markers in the\nstatement.\n\nYou can execute a given prepared statement multiple times, passing different\nvariables to it or setting the variables to different values before each\nexecution.\n\nIf the specified statement has not been PREPAREd, an error similar to the\nfollowing is produced:\n\nERROR 1243 (HY000): Unknown prepared statement handler (stmt_name) given to\nEXECUTE\n\nExample\n-------\n\nSee example in PREPARE.\n\nURL: https://mariadb.com/kb/en/execute-statement/','','https://mariadb.com/kb/en/execute-statement/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (829,50,'PREPARE Statement','Syntax\n------\n\nPREPARE stmt_name FROM preparable_stmt\n\nDescription\n-----------\n\nThe PREPARE statement prepares a statement and assigns it a name, stmt_name,\nby which to refer to the statement later. Statement names are not case\nsensitive. preparable_stmt is either a string literal or a user variable (not\na local variable, an SQL expression or a subquery) that contains the text of\nthe statement. The text must represent a single SQL statement, not multiple\nstatements. Within the statement, \"?\" characters can be used as parameter\nmarkers to indicate where data values are to be bound to the query later when\nyou execute it. The \"?\" characters should not be enclosed within quotes, even\nif you intend to bind them to string values. Parameter markers can be used\nonly where expressions should appear, not for SQL keywords, identifiers, and\nso forth.\n\nThe scope of a prepared statement is the session within which it is created.\nOther sessions cannot see it.\n\nIf a prepared statement with the given name already exists, it is deallocated\nimplicitly before the new statement is prepared. This means that if the new\nstatement contains an error and cannot be prepared, an error is returned and\nno statement with the given name exists.\n\nPrepared statements can be PREPAREd and EXECUTEd in a stored procedure, but\nnot in a stored function or trigger. Also, even if the statement is PREPAREd\nin a procedure, it will not be deallocated when the procedure execution ends.\n\nA prepared statement can access user-defined variables, but not local\nvariables or procedure\'s parameters.\n\nIf the prepared statement contains a syntax error, PREPARE will fail. As a\nside effect, stored procedures can use it to check if a statement is valid.\nFor example:\n\nCREATE PROCEDURE `test_stmt`(IN sql_text TEXT)\nBEGIN\n DECLARE EXIT HANDLER FOR SQLEXCEPTION\n BEGIN\n SELECT CONCAT(sql_text, \' is not valid\');\n END;\n SET @SQL := sql_text;\n PREPARE stmt FROM @SQL;\n DEALLOCATE PREPARE stmt;\nEND;\n\nThe FOUND_ROWS() and ROW_COUNT() functions, if called immediatly after\nEXECUTE, return the number of rows read or affected by the prepared\nstatements; however, if they are called after DEALLOCATE PREPARE, they provide\ninformation about this statement. If the prepared statement produces errors or\nwarnings, GET DIAGNOSTICS return information about them. DEALLOCATE PREPARE\nshouldn\'t clear the diagnostics area, unless it produces an error.\n\nA prepared statement is executed with EXECUTE and released with DEALLOCATE\nPREPARE.\n\nThe max_prepared_stmt_count server system variable determines the number of\nallowed prepared statements that can be prepared on the server. If it is set\nto 0, prepared statements are not allowed. If the limit is reached, an error\nsimilar to the following will be produced:\n\nERROR 1461 (42000): Can\'t create more than max_prepared_stmt_count statements \n (current value: 0)\n\nOracle Mode\n-----------\n\nMariaDB starting with 10.3\n--------------------------\nIn Oracle mode from MariaDB 10.3, PREPARE stmt FROM \'SELECT :1, :2\' is used,\ninstead of ?.\n\nPermitted Statements\n--------------------\n\nMariaDB starting with 10.6.2\n----------------------------\nAll statements can be prepared, except PREPARE, EXECUTE, and DEALLOCATE / DROP\nPREPARE.\n\nPrior to this, not all statements can be prepared. Only the following SQL\ncommands are permitted:\n\n* ALTER TABLE\n* ANALYZE TABLE\n* BINLOG\n* CACHE INDEX\n* CALL\n* CHANGE MASTER\n* CHECKSUM {TABLE | TABLES}\n* COMMIT\n* {CREATE | DROP} DATABASE\n* {CREATE | DROP} INDEX\n* {CREATE | RENAME | DROP} TABLE\n* {CREATE | RENAME | DROP} USER\n* {CREATE | DROP} VIEW\n* DELETE\n* DESCRIBE\n* DO\n* EXPLAIN\n* FLUSH {TABLE | TABLES | TABLES WITH READ LOCK | HOSTS | PRIVILEGES | LOGS |\nSTATUS | \n MASTER | SLAVE | DES_KEY_FILE | USER_RESOURCES | QUERY CACHE |\nTABLE_STATISTICS | \n INDEX_STATISTICS | USER_STATISTICS | CLIENT_STATISTICS}\n* GRANT\n* INSERT\n* INSTALL {PLUGIN | SONAME}\n* HANDLER READ\n* KILL\n* LOAD INDEX INTO CACHE\n* OPTIMIZE TABLE\n* REPAIR TABLE\n* REPLACE\n* RESET {MASTER | SLAVE | QUERY CACHE}\n* REVOKE\n* ROLLBACK\n* SELECT\n* SET\n* SET GLOBAL SQL_SLAVE_SKIP_COUNTER\n* SET ROLE\n* SET SQL_LOG_BIN\n* SET TRANSACTION ISOLATION LEVEL\n* SHOW EXPLAIN\n* SHOW {DATABASES | TABLES | OPEN TABLES | TABLE STATUS | COLUMNS | INDEX |\nTRIGGERS | \n EVENTS | GRANTS | CHARACTER SET | COLLATION | ENGINES | PLUGINS [SONAME] |\nPRIVILEGES | \n PROCESSLIST | PROFILE | PROFILES | VARIABLES | STATUS | WARNINGS | ERRORS |\n TABLE_STATISTICS | INDEX_STATISTICS | USER_STATISTICS | CLIENT_STATISTICS |\nAUTHORS | \n CONTRIBUTORS}\n* SHOW CREATE {DATABASE | TABLE | VIEW | PROCEDURE | FUNCTION | TRIGGER |\nEVENT}\n* SHOW {FUNCTION | PROCEDURE} CODE\n* SHOW BINLOG EVENTS\n* SHOW SLAVE HOSTS\n* SHOW {MASTER | BINARY} LOGS\n* SHOW {MASTER | SLAVE | TABLES | INNODB | FUNCTION | PROCEDURE} STATUS\n* SLAVE {START | STOP}\n* TRUNCATE TABLE\n* SHUTDOWN\n* UNINSTALL {PLUGIN | SONAME}\n* UPDATE\n\nSynonyms are not listed here, but can be used. For example, DESC can be used\ninstead of DESCRIBE.\n\nCompound statements can be prepared too.\n\nNote that if a statement can be run in a stored routine, it will work even if\nit is called by a prepared statement. For example, SIGNAL can\'t be directly\nprepared. However, it is allowed in stored routines. If the x() procedure\ncontains SIGNAL, you can still prepare and execute the \'CALL x();\' prepared\nstatement.\n\nPREPARE supports most kinds of expressions as well, for example:\n\nPREPARE stmt FROM CONCAT(\'SELECT * FROM \', table_name);\n\nWhen PREPARE is used with a statement which is not supported, the following\nerror is produced:\n\nERROR 1295 (HY000): This command is not supported in the prepared statement\nprotocol yet\n\nExample\n-------\n\ncreate table t1 (a int,b char(10));\ninsert into t1 values (1,\"one\"),(2, \"two\"),(3,\"three\");\nprepare test from \"select * from t1 where a=?\";\nset @param=2;\nexecute test using @param;\n+------+------+\n| a | b |\n+------+------+\n| 2 | two |\n+------+------+\nset @param=3;\nexecute test using @param;\n+------+-------+\n| a | b |\n+------+-------+\n| 3 | three |\n+------+-------+\ndeallocate prepare test;\n\nSince identifiers are not permitted as prepared statements parameters,\nsometimes it is necessary to dynamically compose an SQL statement. This\ntechnique is called dynamic SQL). The following example shows how to use\ndynamic SQL:\n\nCREATE PROCEDURE test.stmt_test(IN tab_name VARCHAR(64))\nBEGIN\n SET @sql = CONCAT(\'SELECT COUNT(*) FROM \', tab_name);\n PREPARE stmt FROM @sql;\n EXECUTE stmt;\n DEALLOCATE PREPARE stmt;\nEND;\n\nCALL test.stmt_test(\'mysql.user\');\n+----------+\n| COUNT(*) |\n+----------+\n| 4 |\n+----------+\n\nUse of variables in prepared statements:\n\nPREPARE stmt FROM \'SELECT @x;\';\n\nSET @x = 1;\n\nEXECUTE stmt;\n+------+\n| @x |\n+------+\n| 1 |\n+------+\n\nSET @x = 0;\n\nEXECUTE stmt;\n+------+\n| @x |\n+------+\n| 0 |\n+------+\n\nDEALLOCATE PREPARE stmt;\n\nURL: https://mariadb.com/kb/en/prepare-statement/','','https://mariadb.com/kb/en/prepare-statement/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (830,50,'DEALLOCATE / DROP PREPARE','Syntax\n------\n\n{DEALLOCATE | DROP} PREPARE stmt_name\n\nDescription\n-----------\n\nTo deallocate a prepared statement produced with PREPARE, use a DEALLOCATE\nPREPARE statement that refers to the prepared statement name.\n\nA prepared statement is implicitly deallocated when a new PREPARE command is\nissued. In that case, there is no need to use DEALLOCATE.\n\nAttempting to execute a prepared statement after deallocating it results in an\nerror, as if it was not prepared at all:\n\nERROR 1243 (HY000): Unknown prepared statement handler (stmt_name) given to\nEXECUTE\n\nIf the specified statement has not been PREPAREd, an error similar to the\nfollowing will be produced:\n\nERROR 1243 (HY000): Unknown prepared statement handler (stmt_name) given to\nDEALLOCATE PREPARE\n\nExample\n-------\n\nSee example in PREPARE.\n\nURL: https://mariadb.com/kb/en/deallocate-drop-prepare/','','https://mariadb.com/kb/en/deallocate-drop-prepare/');
+insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (831,50,'EXECUTE IMMEDIATE','MariaDB starting with 10.2.3\n----------------------------\nEXECUTE IMMEDIATE was introduced in MariaDB 10.2.3.\n\nSyntax\n------\n\nEXECUTE IMMEDIATE statement\n\nDescription\n-----------\n\nEXECUTE IMMEDIATE executes a dynamic SQL statement created on the fly, which\ncan reduce performance overhead.\n\nFor example:\n\nEXECUTE IMMEDIATE \'SELECT 1\'\n\nwhich is shorthand for:\n\nprepare stmt from \"select 1\";\nexecute stmt;\ndeallocate prepare stmt;\n\nEXECUTE IMMEDIATE supports complex expressions as prepare source and\nparameters:\n\nEXECUTE IMMEDIATE CONCAT(\'SELECT COUNT(*) FROM \', \'t1\', \' WHERE a=?\') USING\n5+5;\n\nLimitations: subselects and stored function calls are not supported as a\nprepare source.\n\nThe following examples return an error:\n\nCREATE OR REPLACE FUNCTION f1() RETURNS VARCHAR(64) RETURN \'SELECT * FROM t1\';\nEXECUTE IMMEDIATE f1();\nERROR 1970 (42000): EXECUTE IMMEDIATE does not support subqueries or stored\nfunctions\n\nEXECUTE IMMEDIATE (SELECT \'SELECT * FROM t1\');\nERROR 1064 (42000): You have an error in your SQL syntax; check the manual\nthat \n corresponds to your MariaDB server version for the right syntax to use near\n \'SELECT \'SELECT * FROM t1\')\' at line 1\n\nCREATE OR REPLACE FUNCTION f1() RETURNS INT RETURN 10;\nEXECUTE IMMEDIATE \'SELECT * FROM t1 WHERE a=?\' USING f1();\nERROR 1970 (42000): EXECUTE..USING does not support subqueries or stored\nfunctions\n\nEXECUTE IMMEDIATE \'SELECT * FROM t1 WHERE a=?\' USING (SELECT 10);\nERROR 1064 (42000): You have an error in your SQL syntax; check the manual\nthat \n corresponds to your MariaDB server version for the right syntax to use near\n \'SELECT 10)\' at line 1\n\nOne can use a user or an SP variable as a workaround:\n\nCREATE OR REPLACE FUNCTION f1() RETURNS VARCHAR(64) RETURN \'SELECT * FROM t1\';\nSET @stmt=f1();\nEXECUTE IMMEDIATE @stmt;\n\nSET @stmt=(SELECT \'SELECT 1\');\nEXECUTE IMMEDIATE @stmt;\n\nCREATE OR REPLACE FUNCTION f1() RETURNS INT RETURN 10;\nSET @param=f1();\nEXECUTE IMMEDIATE \'SELECT * FROM t1 WHERE a=?\' USING @param;\n\nSET @param=(SELECT 10);\nEXECUTE IMMEDIATE \'SELECT * FROM t1 WHERE a=?\' USING @param;\n\nEXECUTE IMMEDIATE supports user variables and SP variables as OUT parameters\n\nDELIMITER $$\nCREATE OR REPLACE PROCEDURE p1(OUT a INT)\nBEGIN\n SET a:= 10;\nEND;\n$$\nDELIMITER ;\nSET @a=2;\nEXECUTE IMMEDIATE \'CALL p1(?)\' USING @a;\nSELECT @a;\n+------+\n| @a |\n+------+\n| 10 |\n+------+\n\nSimilar to PREPARE, EXECUTE IMMEDIATE is allowed in stored procedures but is\nnot allowed in stored functions.\n\nThis example uses EXECUTE IMMEDIATE inside a stored procedure:\n\nDELIMITER $$\nCREATE OR REPLACE PROCEDURE p1()\nBEGIN\n EXECUTE IMMEDIATE \'SELECT 1\';\nEND;\n$$\nDELIMITER ;\nCALL p1;\n+---+\n| 1 |\n+---+\n| 1 |\n+---+\n\nThis script returns an error:\n\nDELIMITER $$\nCREATE FUNCTION f1() RETURNS INT\nBEGIN\n EXECUTE IMMEDIATE \'DO 1\';\n RETURN 1;\nEND;\n$$\nERROR 1336 (0A000): Dynamic SQL is not allowed in stored function or trigger\n\nEXECUTE IMMEDIATE can use DEFAULT and IGNORE indicators as bind parameters:\n\nCREATE OR REPLACE TABLE t1 (a INT DEFAULT 10);\nEXECUTE IMMEDIATE \'INSERT INTO t1 VALUES (?)\' USING DEFAULT;\nSELECT * FROM t1;\n+------+\n| a |\n+------+\n| 10 |\n+------+\n\nEXECUTE IMMEDIATE increments the Com_execute_immediate status variable, as\nwell as the Com_stmt_prepare, Com_stmt_execute and Com_stmt_close status\nvariables.\n\nNote, EXECUTE IMMEDIATE does not increment the Com_execute_sql status\nvariable. Com_execute_sql is used only for PREPARE..EXECUTE.\n\nThis session screenshot demonstrates how EXECUTE IMMEDIATE affects status\nvariables:\n\nSELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME RLIKE \n (\'COM_(EXECUTE|STMT_PREPARE|STMT_EXECUTE|STMT_CLOSE)\');\n\n+-----------------------+----------------+\n| VARIABLE_NAME | VARIABLE_VALUE |\n+-----------------------+----------------+\n| COM_EXECUTE_IMMEDIATE | 0 |\n| COM_EXECUTE_SQL | 0 |\n| COM_STMT_CLOSE | 0 |\n| COM_STMT_EXECUTE | 0 |\n| COM_STMT_PREPARE | 0 |\n+-----------------------+----------------+\n\nEXECUTE IMMEDIATE \'SELECT 1\';\n+---+\n| 1 |\n+---+\n| 1 |\n+---+\n\nSELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME RLIKE \n (\'COM_(EXECUTE|STMT_PREPARE|STMT_EXECUTE|STMT_CLOSE)\');\n+-----------------------+----------------+\n| VARIABLE_NAME | VARIABLE_VALUE |\n+-----------------------+----------------+\n| COM_EXECUTE_IMMEDIATE | 1 |\n| COM_EXECUTE_SQL | 0 |\n| COM_STMT_CLOSE | 1 |\n| COM_STMT_EXECUTE | 1 |\n| COM_STMT_PREPARE | 1 |\n+-----------------------+----------------+\n\nURL: https://mariadb.com/kb/en/execute-immediate/','','https://mariadb.com/kb/en/execute-immediate/');
insert into help_keyword values (1, 'work');
insert into help_keyword values (2, 'locks');
insert into help_keyword values (3, 'locking');
@@ -1072,80 +1074,78 @@ insert into help_relation values (113, 4);
insert into help_relation values (116, 16);
insert into help_relation values (117, 2);
insert into help_relation values (117, 3);
-insert into help_relation values (148, 2);
-insert into help_relation values (148, 3);
-insert into help_relation values (153, 2);
-insert into help_relation values (153, 3);
-insert into help_relation values (158, 2);
-insert into help_relation values (158, 3);
-insert into help_relation values (162, 2);
-insert into help_relation values (162, 3);
+insert into help_relation values (149, 2);
+insert into help_relation values (149, 3);
+insert into help_relation values (154, 2);
+insert into help_relation values (154, 3);
+insert into help_relation values (159, 2);
+insert into help_relation values (159, 3);
insert into help_relation values (163, 2);
insert into help_relation values (163, 3);
-insert into help_relation values (168, 17);
-insert into help_relation values (168, 18);
-insert into help_relation values (169, 19);
-insert into help_relation values (170, 20);
-insert into help_relation values (172, 21);
-insert into help_relation values (213, 22);
-insert into help_relation values (213, 23);
+insert into help_relation values (164, 2);
+insert into help_relation values (164, 3);
+insert into help_relation values (169, 17);
+insert into help_relation values (169, 18);
+insert into help_relation values (170, 19);
+insert into help_relation values (171, 20);
+insert into help_relation values (173, 21);
+insert into help_relation values (214, 22);
insert into help_relation values (214, 23);
-insert into help_relation values (214, 24);
-insert into help_relation values (215, 25);
-insert into help_relation values (215, 26);
-insert into help_relation values (215, 27);
-insert into help_relation values (216, 28);
-insert into help_relation values (217, 29);
-insert into help_relation values (218, 30);
-insert into help_relation values (219, 31);
-insert into help_relation values (220, 32);
-insert into help_relation values (221, 33);
-insert into help_relation values (235, 34);
-insert into help_relation values (236, 35);
-insert into help_relation values (237, 36);
-insert into help_relation values (239, 37);
-insert into help_relation values (240, 38);
-insert into help_relation values (241, 39);
-insert into help_relation values (252, 40);
-insert into help_relation values (253, 4);
-insert into help_relation values (254, 41);
-insert into help_relation values (255, 42);
-insert into help_relation values (256, 43);
-insert into help_relation values (258, 44);
-insert into help_relation values (260, 45);
-insert into help_relation values (261, 46);
-insert into help_relation values (262, 47);
-insert into help_relation values (262, 48);
-insert into help_relation values (263, 49);
-insert into help_relation values (264, 50);
-insert into help_relation values (264, 51);
-insert into help_relation values (264, 52);
-insert into help_relation values (264, 53);
-insert into help_relation values (266, 54);
-insert into help_relation values (266, 55);
-insert into help_relation values (272, 56);
-insert into help_relation values (278, 57);
-insert into help_relation values (278, 58);
-insert into help_relation values (308, 59);
-insert into help_relation values (315, 60);
-insert into help_relation values (315, 61);
-insert into help_relation values (335, 62);
-insert into help_relation values (336, 62);
-insert into help_relation values (337, 63);
+insert into help_relation values (215, 23);
+insert into help_relation values (215, 24);
+insert into help_relation values (216, 25);
+insert into help_relation values (216, 26);
+insert into help_relation values (216, 27);
+insert into help_relation values (217, 28);
+insert into help_relation values (218, 29);
+insert into help_relation values (219, 30);
+insert into help_relation values (220, 31);
+insert into help_relation values (221, 32);
+insert into help_relation values (222, 33);
+insert into help_relation values (236, 34);
+insert into help_relation values (237, 35);
+insert into help_relation values (238, 36);
+insert into help_relation values (240, 37);
+insert into help_relation values (241, 38);
+insert into help_relation values (242, 39);
+insert into help_relation values (253, 40);
+insert into help_relation values (254, 4);
+insert into help_relation values (255, 41);
+insert into help_relation values (256, 42);
+insert into help_relation values (257, 43);
+insert into help_relation values (259, 44);
+insert into help_relation values (261, 45);
+insert into help_relation values (262, 46);
+insert into help_relation values (263, 47);
+insert into help_relation values (263, 48);
+insert into help_relation values (264, 49);
+insert into help_relation values (265, 50);
+insert into help_relation values (265, 51);
+insert into help_relation values (265, 52);
+insert into help_relation values (265, 53);
+insert into help_relation values (267, 54);
+insert into help_relation values (267, 55);
+insert into help_relation values (273, 56);
+insert into help_relation values (280, 57);
+insert into help_relation values (280, 58);
+insert into help_relation values (310, 59);
+insert into help_relation values (317, 60);
+insert into help_relation values (317, 61);
insert into help_relation values (337, 62);
insert into help_relation values (338, 62);
+insert into help_relation values (339, 63);
insert into help_relation values (339, 62);
-insert into help_relation values (342, 2);
-insert into help_relation values (342, 3);
-insert into help_relation values (346, 62);
-insert into help_relation values (347, 62);
+insert into help_relation values (340, 62);
+insert into help_relation values (341, 62);
+insert into help_relation values (344, 2);
+insert into help_relation values (344, 3);
insert into help_relation values (348, 62);
insert into help_relation values (349, 62);
insert into help_relation values (350, 62);
insert into help_relation values (351, 62);
-insert into help_relation values (358, 62);
+insert into help_relation values (352, 62);
+insert into help_relation values (353, 62);
insert into help_relation values (360, 62);
-insert into help_relation values (361, 62);
insert into help_relation values (362, 62);
insert into help_relation values (363, 62);
insert into help_relation values (364, 62);
@@ -1187,67 +1187,69 @@ insert into help_relation values (399, 62);
insert into help_relation values (400, 62);
insert into help_relation values (401, 62);
insert into help_relation values (402, 62);
-insert into help_relation values (407, 64);
-insert into help_relation values (407, 65);
-insert into help_relation values (412, 62);
-insert into help_relation values (413, 62);
-insert into help_relation values (414, 66);
-insert into help_relation values (418, 67);
-insert into help_relation values (429, 68);
-insert into help_relation values (435, 69);
-insert into help_relation values (436, 69);
+insert into help_relation values (403, 62);
+insert into help_relation values (404, 62);
+insert into help_relation values (409, 64);
+insert into help_relation values (409, 65);
+insert into help_relation values (414, 62);
+insert into help_relation values (415, 62);
+insert into help_relation values (416, 66);
+insert into help_relation values (420, 67);
+insert into help_relation values (431, 68);
insert into help_relation values (437, 69);
-insert into help_relation values (442, 2);
-insert into help_relation values (442, 3);
-insert into help_relation values (457, 70);
-insert into help_relation values (464, 71);
-insert into help_relation values (464, 72);
-insert into help_relation values (470, 73);
-insert into help_relation values (470, 74);
-insert into help_relation values (627, 75);
-insert into help_relation values (637, 76);
-insert into help_relation values (656, 77);
-insert into help_relation values (662, 78);
-insert into help_relation values (670, 59);
-insert into help_relation values (686, 79);
-insert into help_relation values (695, 4);
-insert into help_relation values (697, 80);
-insert into help_relation values (704, 81);
-insert into help_relation values (705, 4);
-insert into help_relation values (709, 82);
-insert into help_relation values (715, 83);
-insert into help_relation values (719, 84);
-insert into help_relation values (719, 85);
-insert into help_relation values (719, 86);
-insert into help_relation values (720, 87);
-insert into help_relation values (721, 4);
-insert into help_relation values (722, 4);
+insert into help_relation values (438, 69);
+insert into help_relation values (439, 69);
+insert into help_relation values (444, 2);
+insert into help_relation values (444, 3);
+insert into help_relation values (459, 70);
+insert into help_relation values (466, 71);
+insert into help_relation values (466, 72);
+insert into help_relation values (472, 73);
+insert into help_relation values (472, 74);
+insert into help_relation values (629, 75);
+insert into help_relation values (639, 76);
+insert into help_relation values (658, 77);
+insert into help_relation values (664, 78);
+insert into help_relation values (672, 59);
+insert into help_relation values (688, 79);
+insert into help_relation values (697, 4);
+insert into help_relation values (699, 80);
+insert into help_relation values (706, 81);
+insert into help_relation values (707, 4);
+insert into help_relation values (711, 82);
+insert into help_relation values (717, 83);
+insert into help_relation values (721, 84);
+insert into help_relation values (721, 85);
+insert into help_relation values (721, 86);
+insert into help_relation values (722, 87);
insert into help_relation values (723, 4);
insert into help_relation values (724, 4);
insert into help_relation values (725, 4);
insert into help_relation values (726, 4);
insert into help_relation values (727, 4);
insert into help_relation values (728, 4);
+insert into help_relation values (729, 4);
insert into help_relation values (730, 4);
-insert into help_relation values (731, 4);
-insert into help_relation values (739, 4);
-insert into help_relation values (740, 88);
-insert into help_relation values (741, 89);
-insert into help_relation values (816, 90);
-insert into help_relation values (816, 91);
-insert into help_relation values (817, 92);
-insert into help_relation values (817, 93);
-insert into help_relation values (818, 94);
-insert into help_relation values (818, 95);
-insert into help_relation values (819, 96);
-insert into help_relation values (819, 97);
-insert into help_relation values (820, 98);
-insert into help_relation values (820, 99);
-insert into help_relation values (821, 100);
-insert into help_relation values (822, 101);
-insert into help_relation values (823, 102);
-insert into help_relation values (824, 103);
-insert into help_relation values (824, 104);
-insert into help_relation values (828, 105);
-insert into help_relation values (828, 106);
+insert into help_relation values (732, 4);
+insert into help_relation values (733, 4);
+insert into help_relation values (741, 4);
+insert into help_relation values (742, 88);
+insert into help_relation values (743, 89);
+insert into help_relation values (818, 90);
+insert into help_relation values (818, 91);
+insert into help_relation values (819, 92);
+insert into help_relation values (819, 93);
+insert into help_relation values (820, 94);
+insert into help_relation values (820, 95);
+insert into help_relation values (821, 96);
+insert into help_relation values (821, 97);
+insert into help_relation values (822, 98);
+insert into help_relation values (822, 99);
+insert into help_relation values (823, 100);
+insert into help_relation values (824, 101);
+insert into help_relation values (825, 102);
+insert into help_relation values (826, 103);
+insert into help_relation values (826, 104);
+insert into help_relation values (830, 105);
+insert into help_relation values (830, 106);
unlock tables;
diff --git a/scripts/mysql_system_tables.sql b/scripts/mysql_system_tables.sql
index fd2f1c95dda..0c33e40cf57 100644
--- a/scripts/mysql_system_tables.sql
+++ b/scripts/mysql_system_tables.sql
@@ -147,7 +147,7 @@ CREATE TABLE IF NOT EXISTS time_zone_transition_type ( Time_zone_id int unsign
CREATE TABLE IF NOT EXISTS time_zone_leap_second ( Transition_time bigint signed NOT NULL, Correction int signed NOT NULL, PRIMARY KEY /*TranTime*/ (Transition_time) ) engine=Aria transactional=1 CHARACTER SET utf8 comment='Leap seconds information for time zones';
-CREATE TABLE IF NOT EXISTS proc (db char(64) collate utf8_bin DEFAULT '' NOT NULL, name char(64) DEFAULT '' NOT NULL, type enum('FUNCTION','PROCEDURE','PACKAGE','PACKAGE BODY') NOT NULL, specific_name char(64) DEFAULT '' NOT NULL, language enum('SQL') DEFAULT 'SQL' NOT NULL, sql_data_access enum( 'CONTAINS_SQL', 'NO_SQL', 'READS_SQL_DATA', 'MODIFIES_SQL_DATA') DEFAULT 'CONTAINS_SQL' NOT NULL, is_deterministic enum('YES','NO') DEFAULT 'NO' NOT NULL, security_type enum('INVOKER','DEFINER') DEFAULT 'DEFINER' NOT NULL, param_list blob NOT NULL, returns longblob NOT NULL, body longblob NOT NULL, definer varchar(384) collate utf8_bin DEFAULT '' NOT NULL, created timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, modified timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', sql_mode set( 'REAL_AS_FLOAT', 'PIPES_AS_CONCAT', 'ANSI_QUOTES', 'IGNORE_SPACE', 'IGNORE_BAD_TABLE_OPTIONS', 'ONLY_FULL_GROUP_BY', 'NO_UNSIGNED_SUBTRACTION', 'NO_DIR_IN_CREATE', 'POSTGRESQL', 'ORACLE', 'MSSQL', 'DB2', 'MAXDB', 'NO_KEY_OPTIONS', 'NO_TABLE_OPTIONS', 'NO_FIELD_OPTIONS', 'MYSQL323', 'MYSQL40', 'ANSI', 'NO_AUTO_VALUE_ON_ZERO', 'NO_BACKSLASH_ESCAPES', 'STRICT_TRANS_TABLES', 'STRICT_ALL_TABLES', 'NO_ZERO_IN_DATE', 'NO_ZERO_DATE', 'INVALID_DATES', 'ERROR_FOR_DIVISION_BY_ZERO', 'TRADITIONAL', 'NO_AUTO_CREATE_USER', 'HIGH_NOT_PRECEDENCE', 'NO_ENGINE_SUBSTITUTION', 'PAD_CHAR_TO_FULL_LENGTH', 'EMPTY_STRING_IS_NULL', 'SIMULTANEOUS_ASSIGNMENT', 'TIME_ROUND_FRACTIONAL') DEFAULT '' NOT NULL, comment text collate utf8_bin NOT NULL, character_set_client char(32) collate utf8_bin, collation_connection char(32) collate utf8_bin, db_collation char(32) collate utf8_bin, body_utf8 longblob, aggregate enum('NONE', 'GROUP') DEFAULT 'NONE' NOT NULL, PRIMARY KEY (db,name,type)) engine=Aria transactional=1 character set utf8 comment='Stored Procedures';
+CREATE TABLE IF NOT EXISTS proc (db char(64) collate utf8_bin DEFAULT '' NOT NULL, name char(64) DEFAULT '' NOT NULL, type enum('FUNCTION','PROCEDURE','PACKAGE','PACKAGE BODY') NOT NULL, specific_name char(64) DEFAULT '' NOT NULL, language enum('SQL') DEFAULT 'SQL' NOT NULL, sql_data_access enum( 'CONTAINS_SQL', 'NO_SQL', 'READS_SQL_DATA', 'MODIFIES_SQL_DATA') DEFAULT 'CONTAINS_SQL' NOT NULL, is_deterministic enum('YES','NO') DEFAULT 'NO' NOT NULL, security_type enum('INVOKER','DEFINER') DEFAULT 'DEFINER' NOT NULL, param_list blob NOT NULL, returns longblob NOT NULL, body longblob NOT NULL, definer varchar(384) collate utf8_bin DEFAULT '' NOT NULL, created timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, modified timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', sql_mode set( 'REAL_AS_FLOAT', 'PIPES_AS_CONCAT', 'ANSI_QUOTES', 'IGNORE_SPACE', 'IGNORE_BAD_TABLE_OPTIONS', 'ONLY_FULL_GROUP_BY', 'NO_UNSIGNED_SUBTRACTION', 'NO_DIR_IN_CREATE', 'POSTGRESQL', 'ORACLE', 'MSSQL', 'DB2', 'MAXDB', 'NO_KEY_OPTIONS', 'NO_TABLE_OPTIONS', 'NO_FIELD_OPTIONS', 'MYSQL323', 'MYSQL40', 'ANSI', 'NO_AUTO_VALUE_ON_ZERO', 'NO_BACKSLASH_ESCAPES', 'STRICT_TRANS_TABLES', 'STRICT_ALL_TABLES', 'NO_ZERO_IN_DATE', 'NO_ZERO_DATE', 'INVALID_DATES', 'ERROR_FOR_DIVISION_BY_ZERO', 'TRADITIONAL', 'NO_AUTO_CREATE_USER', 'HIGH_NOT_PRECEDENCE', 'NO_ENGINE_SUBSTITUTION', 'PAD_CHAR_TO_FULL_LENGTH', 'EMPTY_STRING_IS_NULL', 'SIMULTANEOUS_ASSIGNMENT', 'TIME_ROUND_FRACTIONAL') DEFAULT '' NOT NULL, comment text collate utf8_bin NOT NULL, character_set_client char(32) collate utf8_bin, collation_connection char(64) collate utf8_bin, db_collation char(64) collate utf8_bin, body_utf8 longblob, aggregate enum('NONE', 'GROUP') DEFAULT 'NONE' NOT NULL, PRIMARY KEY (db,name,type)) engine=Aria transactional=1 character set utf8 comment='Stored Procedures';
CREATE TABLE IF NOT EXISTS procs_priv ( Host char(255) binary DEFAULT '' NOT NULL, Db char(64) binary DEFAULT '' NOT NULL, User char(128) binary DEFAULT '' NOT NULL, Routine_name char(64) COLLATE utf8_general_ci DEFAULT '' NOT NULL, Routine_type enum('FUNCTION','PROCEDURE','PACKAGE','PACKAGE BODY') NOT NULL, Grantor varchar(384) DEFAULT '' NOT NULL, Proc_priv set('Execute','Alter Routine','Grant') COLLATE utf8_general_ci DEFAULT '' NOT NULL, Timestamp timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (Host,Db,User,Routine_name,Routine_type), KEY Grantor (Grantor) ) engine=Aria transactional=1 CHARACTER SET utf8 COLLATE utf8_bin comment='Procedure privileges';
@@ -168,7 +168,7 @@ PREPARE stmt FROM @str;
EXECUTE stmt;
DROP PREPARE stmt;
-CREATE TABLE IF NOT EXISTS event ( db char(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL default '', name char(64) CHARACTER SET utf8 NOT NULL default '', body longblob NOT NULL, definer varchar(384) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL default '', execute_at DATETIME default NULL, interval_value int(11) default NULL, interval_field ENUM('YEAR','QUARTER','MONTH','DAY','HOUR','MINUTE','WEEK','SECOND','MICROSECOND','YEAR_MONTH','DAY_HOUR','DAY_MINUTE','DAY_SECOND','HOUR_MINUTE','HOUR_SECOND','MINUTE_SECOND','DAY_MICROSECOND','HOUR_MICROSECOND','MINUTE_MICROSECOND','SECOND_MICROSECOND') default NULL, created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, modified TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00', last_executed DATETIME default NULL, starts DATETIME default NULL, ends DATETIME default NULL, status ENUM('ENABLED','DISABLED','SLAVESIDE_DISABLED') NOT NULL default 'ENABLED', on_completion ENUM('DROP','PRESERVE') NOT NULL default 'DROP', sql_mode set('REAL_AS_FLOAT','PIPES_AS_CONCAT','ANSI_QUOTES','IGNORE_SPACE','IGNORE_BAD_TABLE_OPTIONS','ONLY_FULL_GROUP_BY','NO_UNSIGNED_SUBTRACTION','NO_DIR_IN_CREATE','POSTGRESQL','ORACLE','MSSQL','DB2','MAXDB','NO_KEY_OPTIONS','NO_TABLE_OPTIONS','NO_FIELD_OPTIONS','MYSQL323','MYSQL40','ANSI','NO_AUTO_VALUE_ON_ZERO','NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLES','STRICT_ALL_TABLES','NO_ZERO_IN_DATE','NO_ZERO_DATE','INVALID_DATES','ERROR_FOR_DIVISION_BY_ZERO','TRADITIONAL','NO_AUTO_CREATE_USER','HIGH_NOT_PRECEDENCE','NO_ENGINE_SUBSTITUTION','PAD_CHAR_TO_FULL_LENGTH','EMPTY_STRING_IS_NULL','SIMULTANEOUS_ASSIGNMENT','TIME_ROUND_FRACTIONAL') DEFAULT '' NOT NULL, comment char(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL default '', originator INTEGER UNSIGNED NOT NULL, time_zone char(64) CHARACTER SET latin1 NOT NULL DEFAULT 'SYSTEM', character_set_client char(32) collate utf8_bin, collation_connection char(32) collate utf8_bin, db_collation char(32) collate utf8_bin, body_utf8 longblob, PRIMARY KEY (db, name) ) engine=Aria transactional=1 DEFAULT CHARSET=utf8 COMMENT 'Events';
+CREATE TABLE IF NOT EXISTS event ( db char(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL default '', name char(64) CHARACTER SET utf8 NOT NULL default '', body longblob NOT NULL, definer varchar(384) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL default '', execute_at DATETIME default NULL, interval_value int(11) default NULL, interval_field ENUM('YEAR','QUARTER','MONTH','DAY','HOUR','MINUTE','WEEK','SECOND','MICROSECOND','YEAR_MONTH','DAY_HOUR','DAY_MINUTE','DAY_SECOND','HOUR_MINUTE','HOUR_SECOND','MINUTE_SECOND','DAY_MICROSECOND','HOUR_MICROSECOND','MINUTE_MICROSECOND','SECOND_MICROSECOND') default NULL, created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, modified TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00', last_executed DATETIME default NULL, starts DATETIME default NULL, ends DATETIME default NULL, status ENUM('ENABLED','DISABLED','SLAVESIDE_DISABLED') NOT NULL default 'ENABLED', on_completion ENUM('DROP','PRESERVE') NOT NULL default 'DROP', sql_mode set('REAL_AS_FLOAT','PIPES_AS_CONCAT','ANSI_QUOTES','IGNORE_SPACE','IGNORE_BAD_TABLE_OPTIONS','ONLY_FULL_GROUP_BY','NO_UNSIGNED_SUBTRACTION','NO_DIR_IN_CREATE','POSTGRESQL','ORACLE','MSSQL','DB2','MAXDB','NO_KEY_OPTIONS','NO_TABLE_OPTIONS','NO_FIELD_OPTIONS','MYSQL323','MYSQL40','ANSI','NO_AUTO_VALUE_ON_ZERO','NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLES','STRICT_ALL_TABLES','NO_ZERO_IN_DATE','NO_ZERO_DATE','INVALID_DATES','ERROR_FOR_DIVISION_BY_ZERO','TRADITIONAL','NO_AUTO_CREATE_USER','HIGH_NOT_PRECEDENCE','NO_ENGINE_SUBSTITUTION','PAD_CHAR_TO_FULL_LENGTH','EMPTY_STRING_IS_NULL','SIMULTANEOUS_ASSIGNMENT','TIME_ROUND_FRACTIONAL') DEFAULT '' NOT NULL, comment char(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL default '', originator INTEGER UNSIGNED NOT NULL, time_zone char(64) CHARACTER SET latin1 NOT NULL DEFAULT 'SYSTEM', character_set_client char(32) collate utf8_bin, collation_connection char(64) collate utf8_bin, db_collation char(64) collate utf8_bin, body_utf8 longblob, PRIMARY KEY (db, name) ) engine=Aria transactional=1 DEFAULT CHARSET=utf8 COMMENT 'Events';
SET @create_innodb_table_stats="CREATE TABLE IF NOT EXISTS innodb_table_stats (
database_name VARCHAR(64) NOT NULL,
diff --git a/scripts/mysql_system_tables_fix.sql b/scripts/mysql_system_tables_fix.sql
index 5370f3e40b1..a8cf77a9671 100644
--- a/scripts/mysql_system_tables_fix.sql
+++ b/scripts/mysql_system_tables_fix.sql
@@ -514,10 +514,10 @@ UPDATE proc SET character_set_client = @@character_set_client
WHERE character_set_client IS NULL;
ALTER TABLE proc ADD collation_connection
- char(32) collate utf8_bin DEFAULT NULL
+ char(64) collate utf8_bin DEFAULT NULL
AFTER character_set_client;
ALTER TABLE proc MODIFY collation_connection
- char(32) collate utf8_bin DEFAULT NULL;
+ char(64) collate utf8_bin DEFAULT NULL;
SELECT CASE WHEN COUNT(*) > 0 THEN
CONCAT ("WARNING: NULL values of the 'collation_connection' column ('mysql.proc' table) have been updated with a default value (", @@collation_connection, "). Please verify if necessary.")
@@ -529,10 +529,10 @@ UPDATE proc SET collation_connection = @@collation_connection
WHERE collation_connection IS NULL;
ALTER TABLE proc ADD db_collation
- char(32) collate utf8_bin DEFAULT NULL
+ char(64) collate utf8_bin DEFAULT NULL
AFTER collation_connection;
ALTER TABLE proc MODIFY db_collation
- char(32) collate utf8_bin DEFAULT NULL;
+ char(64) collate utf8_bin DEFAULT NULL;
SELECT CASE WHEN COUNT(*) > 0 THEN
CONCAT ("WARNING: NULL values of the 'db_collation' column ('mysql.proc' table) have been updated with default values. Please verify if necessary.")
@@ -638,16 +638,16 @@ ALTER TABLE event MODIFY character_set_client
char(32) collate utf8_bin DEFAULT NULL;
ALTER TABLE event ADD collation_connection
- char(32) collate utf8_bin DEFAULT NULL
+ char(64) collate utf8_bin DEFAULT NULL
AFTER character_set_client;
ALTER TABLE event MODIFY collation_connection
- char(32) collate utf8_bin DEFAULT NULL;
+ char(64) collate utf8_bin DEFAULT NULL;
ALTER TABLE event ADD db_collation
- char(32) collate utf8_bin DEFAULT NULL
+ char(64) collate utf8_bin DEFAULT NULL
AFTER collation_connection;
ALTER TABLE event MODIFY db_collation
- char(32) collate utf8_bin DEFAULT NULL;
+ char(64) collate utf8_bin DEFAULT NULL;
ALTER TABLE event ADD body_utf8 longblob DEFAULT NULL
AFTER db_collation;
@@ -707,7 +707,7 @@ ALTER TABLE user ADD plugin char(64) CHARACTER SET latin1 DEFAULT '' NOT NULL AF
ALTER TABLE user CHANGE auth_string authentication_string TEXT NOT NULL;
ALTER TABLE user ADD password_expired ENUM('N', 'Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER authentication_string;
-ALTER TABLE user ADD password_last_changed timestamp DEFAULT CURRENT_TIMESTAMP NOT NULL after password_expired;
+ALTER TABLE user ADD password_last_changed timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP after password_expired;
ALTER TABLE user ADD password_lifetime smallint unsigned DEFAULT NULL after password_last_changed;
ALTER TABLE user ADD account_locked enum('N', 'Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL after password_lifetime;
ALTER TABLE user ADD is_role enum('N', 'Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER account_locked;
@@ -729,7 +729,7 @@ ALTER TABLE user MODIFY plugin char(64) CHARACTER SET latin1 DEFAULT '' NOT NULL
-- used by MariaDB. MariaDB-10.4 will use these in the creation of mysql.global_priv.
-- password_last_changed has a DEFAULT/ON UPDATE of CURRENT_TIMESTAMP to keep track of
-- time until 10.4 added.
- MODIFY IF EXISTS password_last_changed timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP AFTER max_statement_time,
+ MODIFY IF EXISTS password_last_changed timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP AFTER max_statement_time,
MODIFY IF EXISTS password_lifetime smallint unsigned DEFAULT NULL AFTER password_last_changed,
MODIFY IF EXISTS account_locked enum('N', 'Y') CHARACTER SET utf8 DEFAULT 'N' NOT NULL after password_lifetime;
diff --git a/scripts/sys_schema/tables/sys_config.sql b/scripts/sys_schema/tables/sys_config.sql
index f887d050875..37d0a183edc 100644
--- a/scripts/sys_schema/tables/sys_config.sql
+++ b/scripts/sys_schema/tables/sys_config.sql
@@ -22,7 +22,7 @@
CREATE TABLE IF NOT EXISTS sys_config (
variable VARCHAR(128) PRIMARY KEY,
value VARCHAR(128),
- set_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+ set_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
set_by VARCHAR(128)
) ENGINE = Aria;
diff --git a/sql-common/client.c b/sql-common/client.c
index 80dbe170f11..78d14b853a0 100644
--- a/sql-common/client.c
+++ b/sql-common/client.c
@@ -4089,10 +4089,10 @@ int STDCALL mysql_set_character_set(MYSQL *mysql, const char *cs_name)
if (mysql->options.charset_dir)
charsets_dir= mysql->options.charset_dir;
- if (strlen(cs_name) < MY_CS_NAME_SIZE &&
+ if (strlen(cs_name) < MY_CS_CHARACTER_SET_NAME_SIZE &&
(cs= get_charset_by_csname(cs_name, MY_CS_PRIMARY, MYF(MY_UTF8_IS_UTF8MB3))))
{
- char buff[MY_CS_NAME_SIZE + 10];
+ char buff[MY_CS_CHARACTER_SET_NAME_SIZE + 10];
charsets_dir= save_csdir;
/* Skip execution of "SET NAMES" for pre-4.1 servers */
if (mysql_get_server_version(mysql) < 40100)
diff --git a/sql/CMakeLists.txt b/sql/CMakeLists.txt
index 8ed62f0ae45..89b0bb21414 100644
--- a/sql/CMakeLists.txt
+++ b/sql/CMakeLists.txt
@@ -23,6 +23,7 @@ IF(WITH_WSREP AND NOT EMBEDDED_LIBRARY)
wsrep_storage_service.cc
wsrep_server_state.cc
wsrep_status.cc
+ wsrep_allowlist_service.cc
wsrep_utils.cc
wsrep_xid.cc
wsrep_check_opts.cc
diff --git a/sql/event_db_repository.cc b/sql/event_db_repository.cc
index cf27e9b7326..9e31ccb3338 100644
--- a/sql/event_db_repository.cc
+++ b/sql/event_db_repository.cc
@@ -150,12 +150,12 @@ const TABLE_FIELD_TYPE event_table_fields[ET_FIELD_COUNT] =
},
{
{ STRING_WITH_LEN("collation_connection") },
- { STRING_WITH_LEN("char(32)") },
+ { STRING_WITH_LEN("char(") },
{ STRING_WITH_LEN("utf8mb3") }
},
{
{ STRING_WITH_LEN("db_collation") },
- { STRING_WITH_LEN("char(32)") },
+ { STRING_WITH_LEN("char(") },
{ STRING_WITH_LEN("utf8mb3") }
},
{
diff --git a/sql/events.cc b/sql/events.cc
index f06068e84e8..6ecdf975178 100644
--- a/sql/events.cc
+++ b/sql/events.cc
@@ -721,15 +721,16 @@ send_show_create_event(THD *thd, Event_timed *et, Protocol *protocol)
field_list.push_back(new (mem_root)
Item_empty_string(thd, "character_set_client",
- MY_CS_NAME_SIZE), mem_root);
+ MY_CS_CHARACTER_SET_NAME_SIZE),
+ mem_root);
field_list.push_back(new (mem_root)
Item_empty_string(thd, "collation_connection",
- MY_CS_NAME_SIZE), mem_root);
+ MY_CS_COLLATION_NAME_SIZE), mem_root);
field_list.push_back(new (mem_root)
Item_empty_string(thd, "Database Collation",
- MY_CS_NAME_SIZE), mem_root);
+ MY_CS_COLLATION_NAME_SIZE), mem_root);
if (protocol->send_result_set_metadata(&field_list,
Protocol::SEND_NUM_ROWS | Protocol::SEND_EOF))
diff --git a/sql/item_create.cc b/sql/item_create.cc
index 5d28cfca111..0e2bcc7b1be 100644
--- a/sql/item_create.cc
+++ b/sql/item_create.cc
@@ -1873,6 +1873,19 @@ protected:
};
+class Create_func_random_bytes : public Create_func_arg1
+{
+public:
+ virtual Item *create_1_arg(THD *thd, Item *arg1);
+
+ static Create_func_random_bytes s_singleton;
+
+protected:
+ Create_func_random_bytes() {}
+ virtual ~Create_func_random_bytes() {}
+};
+
+
class Create_func_release_all_locks : public Create_func_arg0
{
public:
@@ -4992,6 +5005,16 @@ Create_func_rand::create_native(THD *thd, const LEX_CSTRING *name,
}
+Create_func_random_bytes Create_func_random_bytes::s_singleton;
+
+Item *Create_func_random_bytes::create_1_arg(THD *thd, Item *arg1)
+{
+ thd->lex->set_stmt_unsafe(LEX::BINLOG_STMT_UNSAFE_SYSTEM_FUNCTION);
+ thd->lex->uncacheable(UNCACHEABLE_RAND);
+ return new (thd->mem_root) Item_func_random_bytes(thd, arg1);
+}
+
+
Create_func_release_all_locks Create_func_release_all_locks::s_singleton;
Item*
@@ -5826,6 +5849,7 @@ Native_func_registry func_array[] =
{ { STRING_WITH_LEN("POW") }, BUILDER(Create_func_pow)},
{ { STRING_WITH_LEN("POWER") }, BUILDER(Create_func_pow)},
{ { STRING_WITH_LEN("QUOTE") }, BUILDER(Create_func_quote)},
+ { { STRING_WITH_LEN("RANDOM_BYTES")}, BUILDER(Create_func_random_bytes)},
{ { STRING_WITH_LEN("REGEXP_INSTR") }, BUILDER(Create_func_regexp_instr)},
{ { STRING_WITH_LEN("REGEXP_REPLACE") }, BUILDER(Create_func_regexp_replace)},
{ { STRING_WITH_LEN("REGEXP_SUBSTR") }, BUILDER(Create_func_regexp_substr)},
diff --git a/sql/item_func.cc b/sql/item_func.cc
index 6c0c785e901..a94dcefe32f 100644
--- a/sql/item_func.cc
+++ b/sql/item_func.cc
@@ -778,7 +778,7 @@ bool Item_func_connection_id::fix_fields(THD *thd, Item **ref)
{
if (Item_int_func::fix_fields(thd, ref))
return TRUE;
- thd->thread_specific_used= TRUE;
+ thd->used|= THD::THREAD_SPECIFIC_USED;
value= thd->variables.pseudo_thread_id;
return FALSE;
}
@@ -2839,9 +2839,9 @@ bool Item_func_rand::fix_fields(THD *thd,Item **ref)
Once events are forwarded rather than recreated,
the following can be skipped if inside the slave thread
*/
- if (!thd->rand_used)
+ if (!(thd->used & THD::RAND_USED))
{
- thd->rand_used= 1;
+ thd->used|= THD::RAND_USED;
thd->rand_saved_seed1= thd->rand.seed1;
thd->rand_saved_seed2= thd->rand.seed2;
}
diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc
index 624ef411a4a..40d8c791a06 100644
--- a/sql/item_strfunc.cc
+++ b/sql/item_strfunc.cc
@@ -733,6 +733,17 @@ bool Item_func_concat::fix_length_and_dec(THD *thd)
Encryption result is longer than original by formula:
@code new_length= org_length + (8-(org_length % 8))+1 @endcode
*/
+bool Item_func_des_encrypt::fix_length_and_dec(THD *thd)
+{
+ set_maybe_null();
+ /* 9 = MAX ((8- (arg_len % 8)) + 1) */
+ max_length = args[0]->max_length + 9;
+ push_warning_printf(thd, Sql_condition::WARN_LEVEL_NOTE, ER_WARN_DEPRECATED_SYNTAX,
+ ER_THD(thd, ER_WARN_DEPRECATED_SYNTAX_NO_REPLACEMENT),
+ func_name_cstring().str);
+ return FALSE;
+}
+
String *Item_func_des_encrypt::val_str(String *str)
{
@@ -833,6 +844,20 @@ error:
}
+bool Item_func_des_decrypt::fix_length_and_dec(THD *thd)
+{
+ set_maybe_null();
+ /* 9 = MAX ((8- (arg_len % 8)) + 1) */
+ max_length= args[0]->max_length;
+ if (max_length >= 9U)
+ max_length-= 9U;
+ push_warning_printf(thd, Sql_condition::WARN_LEVEL_NOTE, ER_WARN_DEPRECATED_SYNTAX,
+ ER_THD(thd, ER_WARN_DEPRECATED_SYNTAX_NO_REPLACEMENT),
+ func_name_cstring().str);
+ return FALSE;
+}
+
+
String *Item_func_des_decrypt::val_str(String *str)
{
DBUG_ASSERT(fixed());
@@ -1449,6 +1474,70 @@ String *Item_func_sformat::val_str(String *res)
return null_value ? NULL : res;
}
+#include"my_global.h"
+#include <openssl/rand.h>
+#include <openssl/err.h>
+
+bool Item_func_random_bytes::fix_length_and_dec(THD *thd)
+{
+ used_tables_cache|= RAND_TABLE_BIT;
+ if (args[0]->can_eval_in_optimize())
+ {
+ int32 v= (int32) args[0]->val_int();
+ max_length= MY_MAX(0, MY_MIN(v, MAX_RANDOM_BYTES));
+ return false;
+ }
+ max_length= MAX_RANDOM_BYTES;
+ return false;
+}
+
+
+void Item_func_random_bytes::update_used_tables()
+{
+ Item_str_func::update_used_tables();
+ used_tables_cache|= RAND_TABLE_BIT;
+}
+
+
+String *Item_func_random_bytes::val_str(String *str)
+{
+ longlong count= args[0]->val_int();
+
+ if (args[0]->null_value)
+ goto err;
+ null_value= 0;
+
+ if (count < 0 || count > MAX_RANDOM_BYTES)
+ goto err;
+
+ if (count == 0)
+ return make_empty_result(str);
+
+ if (str->alloc((uint) count))
+ goto err;
+
+ str->length(count);
+ str->set_charset(&my_charset_bin);
+ if (my_random_bytes((unsigned char *) str->ptr(), (int32) count))
+ {
+ ulong ssl_err;
+ while ((ssl_err= ERR_get_error()))
+ {
+ char buf[256];
+ ERR_error_string_n(ssl_err, buf, sizeof(buf));
+ sql_print_warning("SSL error: %s", buf);
+ }
+ goto err;
+ }
+
+ return str;
+
+err:
+ null_value= 1;
+ return 0;
+}
+
+
/*********************************************************************/
bool Item_func_regexp_replace::fix_length_and_dec(THD *thd)
{
@@ -1741,7 +1830,7 @@ bool Item_func_lcase::fix_length_and_dec(THD *thd)
if (agg_arg_charsets_for_string_result(collation, args, 1))
return TRUE;
DBUG_ASSERT(collation.collation != NULL);
- multiply= collation.collation->casedn_multiply;
+ multiply= collation.collation->casedn_multiply();
converter= collation.collation->cset->casedn;
fix_char_length_ulonglong((ulonglong) args[0]->max_char_length() * multiply);
return FALSE;
@@ -1752,7 +1841,7 @@ bool Item_func_ucase::fix_length_and_dec(THD *thd)
if (agg_arg_charsets_for_string_result(collation, args, 1))
return TRUE;
DBUG_ASSERT(collation.collation != NULL);
- multiply= collation.collation->caseup_multiply;
+ multiply= collation.collation->caseup_multiply();
converter= collation.collation->cset->caseup;
fix_char_length_ulonglong((ulonglong) args[0]->max_char_length() * multiply);
return FALSE;
@@ -3740,14 +3829,10 @@ bool Item_func_set_collation::fix_length_and_dec(THD *thd)
{
if (agg_arg_charsets_for_string_result(collation, args, 1))
return true;
- if (!my_charset_same(collation.collation, m_set_collation))
- {
- my_error(ER_COLLATION_CHARSET_MISMATCH, MYF(0),
- m_set_collation->coll_name.str,
- collation.collation->cs_name.str);
- return TRUE;
- }
- collation.set(m_set_collation, DERIVATION_EXPLICIT,
+ Lex_exact_charset_opt_extended_collate cl(collation.collation, true);
+ if (cl.merge_collation_override(m_set_collation))
+ return true;
+ collation.set(cl.collation().charset_info(), DERIVATION_EXPLICIT,
args[0]->collation.repertoire);
max_length= args[0]->max_length;
return FALSE;
@@ -3765,7 +3850,7 @@ void Item_func_set_collation::print(String *str, enum_query_type query_type)
{
args[0]->print_parenthesised(str, query_type, precedence());
str->append(STRING_WITH_LEN(" collate "));
- str->append(m_set_collation->coll_name);
+ str->append(m_set_collation.collation_name_for_show());
}
String *Item_func_charset::val_str(String *str)
@@ -3797,7 +3882,7 @@ bool Item_func_weight_string::fix_length_and_dec(THD *thd)
{
CHARSET_INFO *cs= args[0]->collation.collation;
collation.set(&my_charset_bin, args[0]->collation.derivation);
- weigth_flags= my_strxfrm_flag_normalize(weigth_flags, cs->levels_for_order);
+ weigth_flags= my_strxfrm_flag_normalize(cs, weigth_flags);
/*
Use result_length if it was given explicitly in constructor,
otherwise calculate max_length using argument's max_length
@@ -3807,7 +3892,8 @@ bool Item_func_weight_string::fix_length_and_dec(THD *thd)
{
size_t char_length;
char_length= ((cs->state & MY_CS_STRNXFRM_BAD_NWEIGHTS) || !nweights) ?
- args[0]->max_char_length() : nweights * cs->levels_for_order;
+ args[0]->max_char_length() : nweights *
+ my_count_bits_uint32(cs->levels_for_order);
max_length= (uint32) cs->strnxfrmlen(char_length * cs->mbmaxlen);
}
set_maybe_null();
diff --git a/sql/item_strfunc.h b/sql/item_strfunc.h
index 89a392a9add..3a3c53385b0 100644
--- a/sql/item_strfunc.h
+++ b/sql/item_strfunc.h
@@ -384,6 +384,32 @@ public:
{ return get_item_copy<Item_func_concat_ws>(thd, this); }
};
+
+class Item_func_random_bytes : public Item_str_func
+{
+public:
+ Item_func_random_bytes(THD *thd, Item *arg1) : Item_str_func(thd, arg1) {}
+ bool fix_length_and_dec(THD *thd) override;
+ void update_used_tables() override;
+ String *val_str(String *) override;
+ LEX_CSTRING func_name_cstring() const override
+ {
+ static LEX_CSTRING name= {STRING_WITH_LEN("random_bytes")};
+ return name;
+ }
+ bool check_vcol_func_processor(void *arg) override
+ {
+ return mark_unsupported_function(func_name(), "()", arg,
+ VCOL_NON_DETERMINISTIC | VCOL_NEXTVAL);
+ }
+ Item *get_copy(THD *thd) override
+ {
+ return get_item_copy<Item_func_random_bytes>(thd, this);
+ }
+ static const int MAX_RANDOM_BYTES= 1024;
+};
+
+
class Item_func_reverse :public Item_str_func
{
String tmp_value;
@@ -898,13 +924,7 @@ public:
Item_func_des_encrypt(THD *thd, Item *a, Item *b)
:Item_str_binary_checksum_func(thd, a, b) {}
String *val_str(String *) override;
- bool fix_length_and_dec(THD *thd) override
- {
- set_maybe_null();
- /* 9 = MAX ((8- (arg_len % 8)) + 1) */
- max_length = args[0]->max_length + 9;
- return FALSE;
- }
+ bool fix_length_and_dec(THD *thd) override;
LEX_CSTRING func_name_cstring() const override
{
static LEX_CSTRING name= {STRING_WITH_LEN("des_encrypt") };
@@ -923,15 +943,7 @@ public:
Item_func_des_decrypt(THD *thd, Item *a, Item *b)
:Item_str_binary_checksum_func(thd, a, b) {}
String *val_str(String *) override;
- bool fix_length_and_dec(THD *thd) override
- {
- set_maybe_null();
- /* 9 = MAX ((8- (arg_len % 8)) + 1) */
- max_length= args[0]->max_length;
- if (max_length >= 9U)
- max_length-= 9U;
- return FALSE;
- }
+ bool fix_length_and_dec(THD *thd) override;
LEX_CSTRING func_name_cstring() const override
{
static LEX_CSTRING name= {STRING_WITH_LEN("des_decrypt") };
@@ -1826,9 +1838,10 @@ public:
class Item_func_set_collation :public Item_str_func
{
- CHARSET_INFO *m_set_collation;
+ Lex_extended_collation_st m_set_collation;
public:
- Item_func_set_collation(THD *thd, Item *a, CHARSET_INFO *set_collation):
+ Item_func_set_collation(THD *thd, Item *a,
+ const Lex_extended_collation_st &set_collation):
Item_str_func(thd, a), m_set_collation(set_collation) {}
String *val_str(String *) override;
bool fix_length_and_dec(THD *thd) override;
diff --git a/sql/item_timefunc.cc b/sql/item_timefunc.cc
index 8399e5dc0ac..26adc4eddaa 100644
--- a/sql/item_timefunc.cc
+++ b/sql/item_timefunc.cc
@@ -1509,7 +1509,7 @@ bool Item_func_from_days::get_date(THD *thd, MYSQL_TIME *ltime, date_mode_t fuzz
void Item_func_curdate_local::store_now_in_TIME(THD *thd, MYSQL_TIME *now_time)
{
thd->variables.time_zone->gmt_sec_to_TIME(now_time, thd->query_start());
- thd->time_zone_used= 1;
+ thd->used |= THD::TIME_ZONE_USED;
}
@@ -1601,7 +1601,7 @@ void Item_func_curtime_local::store_now_in_TIME(THD *thd, MYSQL_TIME *now_time)
now_time->year= now_time->month= now_time->day= 0;
now_time->time_type= MYSQL_TIMESTAMP_TIME;
set_sec_part(thd->query_start_sec_part(), now_time, this);
- thd->time_zone_used= 1;
+ thd->used|= THD::TIME_ZONE_USED;
}
@@ -1667,7 +1667,7 @@ void Item_func_now_local::store_now_in_TIME(THD *thd, MYSQL_TIME *now_time)
{
thd->variables.time_zone->gmt_sec_to_TIME(now_time, thd->query_start());
set_sec_part(thd->query_start_sec_part(), now_time, this);
- thd->time_zone_used= 1;
+ thd->used|= THD::TIME_ZONE_USED;
}
@@ -1710,7 +1710,7 @@ void Item_func_sysdate_local::store_now_in_TIME(THD *thd, MYSQL_TIME *now_time)
my_hrtime_t now= my_hrtime();
thd->variables.time_zone->gmt_sec_to_TIME(now_time, hrtime_to_my_time(now));
set_sec_part(hrtime_sec_part(now), now_time, this);
- thd->time_zone_used= 1;
+ thd->used|= THD::TIME_ZONE_USED;
}
@@ -2732,7 +2732,7 @@ null_date:
bool Item_func_from_unixtime::fix_length_and_dec(THD *thd)
{
- thd->time_zone_used= 1;
+ thd->used|= THD::TIME_ZONE_USED;
tz= thd->variables.time_zone;
Type_std_attributes::set(
Type_temporal_attributes_not_fixed_dec(MAX_DATETIME_WIDTH,
diff --git a/sql/lex.h b/sql/lex.h
index 4ce88ccc2ee..18519d1f8d1 100644
--- a/sql/lex.h
+++ b/sql/lex.h
@@ -385,6 +385,7 @@ SYMBOL symbols[] = {
{ "MASTER_SSL_VERIFY_SERVER_CERT", SYM(MASTER_SSL_VERIFY_SERVER_CERT_SYM)},
{ "MASTER_USER", SYM(MASTER_USER_SYM)},
{ "MASTER_USE_GTID", SYM(MASTER_USE_GTID_SYM)},
+ { "MASTER_DEMOTE_TO_SLAVE", SYM(MASTER_DEMOTE_TO_SLAVE_SYM)},
{ "MASTER_HEARTBEAT_PERIOD", SYM(MASTER_HEARTBEAT_PERIOD_SYM)},
{ "MATCH", SYM(MATCH)},
{ "MAX_CONNECTIONS_PER_HOUR", SYM(MAX_CONNECTIONS_PER_HOUR)},
diff --git a/sql/lex_charset.cc b/sql/lex_charset.cc
index b83d175307f..cfb74a0bf04 100644
--- a/sql/lex_charset.cc
+++ b/sql/lex_charset.cc
@@ -45,7 +45,7 @@ raise_ER_CONFLICTING_DECLARATIONS(const char *clause1,
const char *name2,
bool reverse_order)
{
- char def[MY_CS_NAME_SIZE * 2];
+ char def[MY_CS_CHARACTER_SET_NAME_SIZE * 2];
my_snprintf(def, sizeof(def), "%s (%s)", name1, name1_part2);
raise_ER_CONFLICTING_DECLARATIONS(clause1, def,
clause2, name2,
@@ -127,19 +127,43 @@ Lex_exact_collation::
raise_if_conflicts_with_context_collation(const Lex_context_collation &cl,
bool reverse_order) const
{
- if (cl.is_contextually_typed_collate_default() &&
- !(m_ci->state & MY_CS_PRIMARY))
+ if (cl.is_contextually_typed_collate_default())
{
- raise_ER_CONFLICTING_DECLARATIONS("COLLATE ", m_ci->coll_name.str,
- "COLLATE ", "DEFAULT", reverse_order);
- return true;
+ if (!(m_ci->state & MY_CS_PRIMARY))
+ {
+ raise_ER_CONFLICTING_DECLARATIONS("COLLATE ", m_ci->coll_name.str,
+ "COLLATE ", "DEFAULT", reverse_order);
+ return true;
+ }
+ return false;
}
- if (cl.is_contextually_typed_binary_style() &&
- !(m_ci->state & MY_CS_BINSORT))
+ if (cl.is_contextually_typed_binary_style())
{
- raise_ER_CONFLICTING_DECLARATIONS("COLLATE ", m_ci->coll_name.str,
- "", "BINARY", reverse_order);
+ if (!(m_ci->state & MY_CS_BINSORT))
+ {
+ raise_ER_CONFLICTING_DECLARATIONS("COLLATE ", m_ci->coll_name.str,
+ "", "BINARY", reverse_order);
+ return true;
+ }
+ return false;
+ }
+
+ DBUG_ASSERT(!strncmp(cl.charset_info()->coll_name.str,
+ STRING_WITH_LEN("utf8mb4_uca1400_")));
+
+ Charset_loader_server loader;
+ CHARSET_INFO *ci= loader.get_exact_collation_by_context_name(
+ m_ci,
+ cl.collation_name_context_suffix().str,
+ MYF(0));
+ if (m_ci != ci)
+ {
+ raise_ER_CONFLICTING_DECLARATIONS("COLLATE ",
+ m_ci->coll_name.str,
+ "COLLATE ",
+ cl.collation_name_for_show().str,
+ reverse_order);
return true;
}
return false;
@@ -153,9 +177,16 @@ Lex_context_collation::raise_if_not_equal(const Lex_context_collation &cl) const
Only equal context collations are possible here so far:
- Column grammar only supports BINARY, but does not support COLLATE DEFAULT
- DB/Table grammar only support COLLATE DEFAULT
- But we'll have different collations here - uca140 is coming soon.
*/
- DBUG_ASSERT(m_ci == cl.m_ci);
+ if (m_ci != cl.m_ci)
+ {
+ my_error(ER_CONFLICTING_DECLARATIONS, MYF(0),
+ is_contextually_typed_binary_style() ? "" : "COLLATE ",
+ collation_name_for_show().str,
+ cl.is_contextually_typed_binary_style() ? "" : "COLLATE ",
+ cl.collation_name_for_show().str);
+ return true;
+ }
return false;
}
@@ -193,12 +224,16 @@ bool Lex_exact_charset_opt_extended_collate::
return false;
}
- /*
- A non-binary and non-default contextually typed collation.
- We don't have such yet - the parser cannot produce this.
- But we have "uca1400_as_ci" coming soon.
- */
- DBUG_ASSERT(0);
+ DBUG_ASSERT(!strncmp(cl.charset_info()->coll_name.str,
+ STRING_WITH_LEN("utf8mb4_uca1400_")));
+
+ CHARSET_INFO *ci= Charset_loader_server().
+ get_exact_collation_by_context_name_or_error(m_ci,
+ cl.charset_info()->coll_name.str + 8, MYF(0));
+ if (!ci)
+ return true;
+ m_ci= ci;
+ m_with_collate= true;
return false;
}
@@ -244,7 +279,7 @@ bool Lex_extended_collation_st::
CONTEXT + EXACT
CHAR(10) COLLATE DEFAULT .. COLLATE latin1_swedish_ci
CHAR(10) BINARY .. COLLATE latin1_bin
- CHAR(10) COLLATE uca1400_as_ci .. COLLATE latin1_bin - coming soon
+ CHAR(10) COLLATE uca1400_as_ci .. COLLATE latin1_bin
*/
if (rhs.raise_if_conflicts_with_context_collation(
Lex_context_collation(m_ci), true))
@@ -320,6 +355,38 @@ bool Lex_extended_collation_st::merge(const Lex_extended_collation_st &rhs)
}
+LEX_CSTRING Lex_context_collation::collation_name_for_show() const
+{
+ if (is_contextually_typed_collate_default())
+ return LEX_CSTRING({STRING_WITH_LEN("DEFAULT")});
+ if (is_contextually_typed_binary_style())
+ return LEX_CSTRING({STRING_WITH_LEN("BINARY")});
+ return collation_name_context_suffix();
+}
+
+
+bool Lex_extended_collation_st::set_by_name(const char *name, myf my_flags)
+{
+ Charset_loader_server loader;
+ CHARSET_INFO *cs;
+
+ if (!strncasecmp(name, STRING_WITH_LEN("uca1400_")))
+ {
+ if (!(cs= loader.get_context_collation_or_error(name, my_flags)))
+ return true;
+
+ *this= Lex_extended_collation(Lex_context_collation(cs));
+ return false;
+ }
+
+ if (!(cs= loader.get_exact_collation_or_error(name, my_flags)))
+ return true;
+
+ *this= Lex_extended_collation(Lex_exact_collation(cs));
+ return false;
+}
+
+
/** find a collation with binary comparison rules
*/
CHARSET_INFO *Lex_exact_charset_opt_extended_collate::find_bin_collation() const
@@ -499,6 +566,14 @@ bool Lex_exact_charset_opt_extended_collate::
// CHARACTER SET latin1 [COLLATE latin1_bin] .. COLLATE latin1_bin
if (m_with_collate)
return Lex_exact_collation(m_ci).raise_if_not_equal(cl);
+ return merge_exact_collation_override(cl);
+}
+
+
+bool Lex_exact_charset_opt_extended_collate::
+ merge_exact_collation_override(const Lex_exact_collation &cl)
+{
+ // CHARACTER SET latin1 [COLLATE latin1_bin] .. COLLATE latin1_bin
if (raise_if_not_applicable(cl))
return true;
*this= Lex_exact_charset_opt_extended_collate(cl);
diff --git a/sql/lex_charset.h b/sql/lex_charset.h
index d8d4422b34f..2bbeff8a4a6 100644
--- a/sql/lex_charset.h
+++ b/sql/lex_charset.h
@@ -18,6 +18,126 @@
/*
+ An extention for Charset_loader_mysys,
+ with server error and warning support.
+*/
+class Charset_loader_server: public Charset_loader_mysys
+{
+public:
+ using Charset_loader_mysys::Charset_loader_mysys;
+ void raise_unknown_collation_error(const char *name) const;
+ void raise_not_applicable_error(const char *cs, const char *cl) const;
+
+ /*
+ Find an exact collation by name.
+ Raise an error on a faulure.
+
+ @param cs - the character set
+ @param collation_name - the collation name, e.g. "utf8_bin"
+ @param my_flags - my flags, e.g. MYF(WME)
+ @returns - a NULL pointer in case of failure, or
+ a CHARSET_INFO pointer on success.
+ */
+
+ CHARSET_INFO *
+ get_exact_collation_or_error(const char *name, myf my_flags= MYF(0))
+ {
+ CHARSET_INFO *ci= get_exact_collation(name, my_flags);
+ if (!ci)
+ raise_unknown_collation_error(name);
+ return ci;
+ }
+
+ /*
+ Find an exact collation by a character set and a
+ contextually typed collation name.
+ Raise an error on in case of a faulure.
+
+ @param cs - the character set
+ @param context_cl_name - the context name, e.g. "uca1400_cs_ci"
+ @param my_flags - my flags, e.g. MYF(WME)
+ @returns - a NULL pointer in case of failure, or
+ a CHARSET_INFO pointer on success.
+ */
+ CHARSET_INFO *
+ get_exact_collation_by_context_name_or_error(CHARSET_INFO *cs,
+ const char *name,
+ myf my_flags= MYF(0))
+ {
+ CHARSET_INFO *ci= get_exact_collation_by_context_name(cs, name, my_flags);
+ if (!ci)
+ raise_not_applicable_error(cs->cs_name.str, name);
+ return ci;
+ }
+
+ /*
+ Find an abstract context collation by name.
+ Raise an error on a faulure.
+ The returned pointer needs to be resolved to a character set name.
+ It should not be passed directly to the character set routines.
+
+ @param cs - the character set
+ @param context_cl_name - the context name, e.g. "uca1400_cs_ci"
+ @param my_flags - my flags, e.g. MYF(WME)
+ @returns - a NULL pointer in case of failure, or
+ a CHARSET_INFO pointer on success.
+ */
+
+ CHARSET_INFO *
+ get_context_collation_or_error(const char *collation_name,
+ myf my_flags= MYF(0))
+ {
+ CHARSET_INFO *ci= get_context_collation(collation_name, my_flags);
+ if (!ci)
+ raise_unknown_collation_error(collation_name);
+ return ci;
+ }
+
+ /*
+ Find an exact binary collation in the given character set.
+ Raise an error on a faulure.
+
+ @param cs - the character set
+ @param my_flags - my flags, e.g. MYF(WME)
+ @returns - a NULL pointer in case of failure, or
+ a CHARSET_INFO pointer on success.
+ */
+
+ CHARSET_INFO *
+ get_bin_collation_or_error(CHARSET_INFO *cs,
+ myf my_flags= MYF(0))
+ {
+ const char *cs_name= cs->cs_name.str;
+ if (!(cs= get_bin_collation(cs, my_flags)))
+ {
+ char tmp[65];
+ strxnmov(tmp, sizeof(tmp)-1, cs_name, "_bin", NULL);
+ raise_unknown_collation_error(tmp);
+ }
+ return cs;
+ }
+
+ /*
+ Find an exact default collation in the given character set.
+ This routine does not fail.
+ Any character set must have a default collation.
+
+ @param cs - the character set
+ @param my_flags - my flags, e.g. MYF(WME)
+ @returns - a CHARSET_INFO pointer
+ */
+
+ CHARSET_INFO *get_default_collation(CHARSET_INFO *cs,
+ myf my_flags= MYF(0))
+ {
+ return Charset_loader_mysys::get_default_collation(cs, my_flags);
+ }
+};
+
+
+/////////////////////////////////////////////////////////////////////
+
+/*
An exact character set, e.g:
CHARACTER SET latin1
*/
@@ -96,6 +216,15 @@ public:
return m_ci == &my_collation_contextually_typed_binary;
}
bool raise_if_not_equal(const Lex_context_collation &cl) const;
+ /*
+ Skip the character set prefix, return the suffix.
+ utf8mb4_uca1400_as_ci -> uca1400_as_ci
+ */
+ LEX_CSTRING collation_name_context_suffix() const
+ {
+ return m_ci->get_collation_name(MY_COLLATION_NAME_MODE_CONTEXT);
+ }
+ LEX_CSTRING collation_name_for_show() const;
};
@@ -148,11 +277,23 @@ public:
}
CHARSET_INFO *charset_info() const { return m_ci; }
Type type() const { return m_type; }
+ LEX_CSTRING collation_name_for_show() const
+ {
+ switch (m_type) {
+ case TYPE_CONTEXTUALLY_TYPED:
+ return Lex_context_collation(m_ci).collation_name_for_show();
+ case TYPE_EXACT:
+ return m_ci->coll_name;
+ }
+ DBUG_ASSERT(0);
+ return m_ci->coll_name;
+ }
void set_collate_default()
{
m_ci= &my_collation_contextually_typed_default;
m_type= TYPE_CONTEXTUALLY_TYPED;
}
+ bool set_by_name(const char *name, myf my_flags); // e.g. MY_UTF8_IS_UTF8MB3
bool raise_if_conflicts_with_context_collation(const Lex_context_collation &)
const;
bool merge_exact_charset(const Lex_exact_charset &rhs);
@@ -172,6 +313,10 @@ public:
{
init(rhs.charset_info(), TYPE_EXACT);
}
+ Lex_extended_collation(const Lex_context_collation &rhs)
+ {
+ init(rhs.charset_info(), TYPE_CONTEXTUALLY_TYPED);
+ }
};
@@ -221,6 +366,19 @@ public:
DBUG_ASSERT(0);
return false;
}
+ bool merge_collation_override(const Lex_extended_collation_st &cl)
+ {
+ switch (cl.type()) {
+ case Lex_extended_collation_st::TYPE_EXACT:
+ return merge_exact_collation_override(
+ Lex_exact_collation(cl.charset_info()));
+ case Lex_extended_collation_st::TYPE_CONTEXTUALLY_TYPED:
+ return merge_context_collation_override(
+ Lex_context_collation(cl.charset_info()));
+ }
+ DBUG_ASSERT(0);
+ return false;
+ }
/*
Add a context collation:
CHARACTER SET cs [COLLATE cl] ... COLLATE DEFAULT
@@ -232,6 +390,7 @@ public:
CHARACTER SET cs [COLLATE cl] ... COLLATE latin1_bin
*/
bool merge_exact_collation(const Lex_exact_collation &cl);
+ bool merge_exact_collation_override(const Lex_exact_collation &cl);
Lex_exact_collation collation() const
{
return Lex_exact_collation(m_ci);
@@ -410,6 +569,7 @@ public:
case TYPE_COLLATE_EXACT:
return merge_exact_collation(Lex_exact_collation(cl.charset_info()));
case TYPE_COLLATE_CONTEXTUALLY_TYPED:
+ return merge_context_collation(Lex_context_collation(cl.charset_info()));
case TYPE_CHARACTER_SET:
case TYPE_CHARACTER_SET_COLLATE_EXACT:
break;
@@ -426,7 +586,6 @@ public:
bool merge_column_collate_clause_and_collate_clause(
const Lex_exact_charset_extended_collation_attrs_st &cl)
{
- DBUG_ASSERT(m_type != TYPE_COLLATE_CONTEXTUALLY_TYPED);
DBUG_ASSERT(m_type != TYPE_CHARACTER_SET);
switch (cl.type()) {
case TYPE_EMPTY:
@@ -434,6 +593,7 @@ public:
case TYPE_COLLATE_EXACT:
return merge_exact_collation(Lex_exact_collation(cl.charset_info()));
case TYPE_COLLATE_CONTEXTUALLY_TYPED:
+ return merge_context_collation(Lex_context_collation(cl.charset_info()));
case TYPE_CHARACTER_SET:
case TYPE_CHARACTER_SET_COLLATE_EXACT:
break;
diff --git a/sql/log.cc b/sql/log.cc
index f64616d4770..7545d5baed5 100644
--- a/sql/log.cc
+++ b/sql/log.cc
@@ -830,14 +830,13 @@ bool Log_to_csv_event_handler::
uint field_index;
Silence_log_table_errors error_handler;
Open_tables_backup open_tables_backup;
- bool save_time_zone_used;
+ THD::used_t save_time_zone_used= thd->used & THD::TIME_ZONE_USED;
DBUG_ENTER("log_general");
/*
CSV uses TIME_to_timestamp() internally if table needs to be repaired
- which will set thd->time_zone_used
+ which will set TIME_ZONE_USED
*/
- save_time_zone_used= thd->time_zone_used;
table_list.init_one_table(&MYSQL_SCHEMA_NAME, &GENERAL_LOG_NAME, 0,
TL_WRITE_CONCURRENT_INSERT);
@@ -938,7 +937,7 @@ err:
if (need_close)
close_log_table(thd, &open_tables_backup);
- thd->time_zone_used= save_time_zone_used;
+ thd->used= (thd->used & ~THD::TIME_ZONE_USED) | save_time_zone_used;
DBUG_RETURN(result);
}
@@ -985,7 +984,7 @@ bool Log_to_csv_event_handler::
Silence_log_table_errors error_handler;
Open_tables_backup open_tables_backup;
CHARSET_INFO *client_cs= thd->variables.character_set_client;
- bool save_time_zone_used;
+ THD::used_t save_time_zone_used= thd->used & THD::TIME_ZONE_USED;
ulong query_time= (ulong) MY_MIN(query_utime/1000000, TIME_MAX_VALUE_SECONDS);
ulong lock_time= (ulong) MY_MIN(lock_utime/1000000, TIME_MAX_VALUE_SECONDS);
ulong query_time_micro= (ulong) (query_utime % 1000000);
@@ -993,11 +992,6 @@ bool Log_to_csv_event_handler::
DBUG_ENTER("Log_to_csv_event_handler::log_slow");
thd->push_internal_handler(& error_handler);
- /*
- CSV uses TIME_to_timestamp() internally if table needs to be repaired
- which will set thd->time_zone_used
- */
- save_time_zone_used= thd->time_zone_used;
table_list.init_one_table(&MYSQL_SCHEMA_NAME, &SLOW_LOG_NAME, 0,
TL_WRITE_CONCURRENT_INSERT);
@@ -1125,7 +1119,7 @@ err:
}
if (need_close)
close_log_table(thd, &open_tables_backup);
- thd->time_zone_used= save_time_zone_used;
+ thd->used= (thd->used & ~THD::TIME_ZONE_USED) | save_time_zone_used;
DBUG_RETURN(result);
}
@@ -6897,7 +6891,7 @@ bool MYSQL_BIN_LOG::write(Log_event *event_info, my_bool *with_annotate)
if (write_event(&e, cache_data, file))
goto err;
}
- if (thd->rand_used)
+ if (thd->used & THD::RAND_USED)
{
Rand_log_event e(thd,thd->rand_saved_seed1,thd->rand_saved_seed2,
using_trans, direct);
diff --git a/sql/log_event_server.cc b/sql/log_event_server.cc
index 710b89bbb54..0017c7d0cf9 100644
--- a/sql/log_event_server.cc
+++ b/sql/log_event_server.cc
@@ -213,7 +213,7 @@ static void inline slave_rows_error_report(enum loglevel level, int ha_error,
aggregate_da_errors(buff, sizeof(buff), thd->get_stmt_da());
- if (ha_error != 0)
+ if (ha_error != 0 && !thd->killed)
rli->report(level, errcode, rgi->gtid_info(),
"Could not execute %s event on table %s.%s;"
"%s handler error %s; "
@@ -1302,7 +1302,7 @@ bool Query_log_event::write()
}
}
- if (thd && thd->query_start_sec_part_used)
+ if (thd && (thd->used & THD::QUERY_START_SEC_PART_USED))
{
*start++= Q_HRNOW;
get_time();
@@ -1428,8 +1428,8 @@ Query_log_event::Query_log_event(THD* thd_arg, const char* query_arg,
bool direct, bool suppress_use, int errcode)
:Log_event(thd_arg,
- (thd_arg->thread_specific_used ? LOG_EVENT_THREAD_SPECIFIC_F :
- 0) |
+ ((thd_arg->used & THD::THREAD_SPECIFIC_USED)
+ ? LOG_EVENT_THREAD_SPECIFIC_F : 0) |
(suppress_use ? LOG_EVENT_SUPPRESS_USE_F : 0),
using_trans),
data_buf(0), query(query_arg), catalog(thd_arg->catalog),
@@ -1515,7 +1515,7 @@ Query_log_event::Query_log_event(THD* thd_arg, const char* query_arg,
int2store(charset, thd_arg->variables.character_set_client->number);
int2store(charset+2, thd_arg->variables.collation_connection->number);
int2store(charset+4, thd_arg->variables.collation_server->number);
- if (thd_arg->time_zone_used)
+ if (thd_arg->used & THD::TIME_ZONE_USED)
{
/*
Note that our event becomes dependent on the Time_zone object
@@ -2966,7 +2966,8 @@ Load_log_event::Load_log_event(THD *thd_arg, const sql_exchange *ex,
enum enum_duplicates handle_dup,
bool ignore, bool using_trans)
:Log_event(thd_arg,
- thd_arg->thread_specific_used ? LOG_EVENT_THREAD_SPECIFIC_F : 0,
+ (thd_arg->used & THD::THREAD_SPECIFIC_USED)
+ ? LOG_EVENT_THREAD_SPECIFIC_F : 0,
using_trans),
thread_id(thd_arg->thread_id),
slave_proxy_id((ulong)thd_arg->variables.pseudo_thread_id),
@@ -4620,7 +4621,9 @@ void User_var_log_event::pack_info(Protocol* protocol)
case STRING_RESULT:
{
/* 15 is for 'COLLATE' and other chars */
- char buf_mem[FN_REFLEN + 512 + 1 + 2*MY_CS_NAME_SIZE+15];
+ char buf_mem[FN_REFLEN + 512 + 1 + 15 +
+ MY_CS_CHARACTER_SET_NAME_SIZE +
+ MY_CS_COLLATION_NAME_SIZE];
String buf(buf_mem, sizeof(buf_mem), system_charset_info);
CHARSET_INFO *cs;
buf.length(0);
@@ -4640,7 +4643,7 @@ void User_var_log_event::pack_info(Protocol* protocol)
return;
old_len= buf.length();
if (buf.reserve(old_len + val_len * 2 + 3 + sizeof(" COLLATE ") +
- MY_CS_NAME_SIZE))
+ MY_CS_COLLATION_NAME_SIZE))
return;
beg= const_cast<char *>(buf.ptr()) + old_len;
end= str_to_hex(beg, val, val_len);
@@ -5759,6 +5762,13 @@ int Rows_log_event::do_apply_event(rpl_group_info *rgi)
DBUG_ASSERT(rgi->thd == thd);
/*
+ Where a Query_log_event can rely on the normal command execution logic to
+ set/reset the slave thread's timer; a Rows_log_event update needs to set
+ the timer itself
+ */
+ thd->set_query_timer();
+
+ /*
If there is no locks taken, this is the first binrow event seen
after the table map events. We should then lock all the tables
used in the transaction and proceed with execution of the actual
@@ -6151,6 +6161,12 @@ int Rows_log_event::do_apply_event(rpl_group_info *rgi)
if (likely(error == 0) && !transactional_table)
thd->transaction->all.modified_non_trans_table=
thd->transaction->stmt.modified_non_trans_table= TRUE;
+ if (likely(error == 0))
+ {
+ error= thd->killed_errno();
+ if (error && !thd->is_error())
+ my_error(error, MYF(0));
+ }
} // row processing loop
while (error == 0 && (m_curr_row != m_rows_end));
@@ -6220,11 +6236,13 @@ int Rows_log_event::do_apply_event(rpl_group_info *rgi)
free_root(thd->mem_root, MYF(MY_KEEP_PREALLOC));
}
+ thd->reset_query_timer();
DBUG_RETURN(error);
err:
restore_empty_query_table_list(thd->lex);
rgi->slave_close_thread_tables(thd);
+ thd->reset_query_timer();
DBUG_RETURN(error);
}
diff --git a/sql/mysqld.cc b/sql/mysqld.cc
index 32392ab882e..daa1d6fa405 100644
--- a/sql/mysqld.cc
+++ b/sql/mysqld.cc
@@ -463,6 +463,8 @@ ulonglong binlog_cache_size=0;
ulonglong binlog_file_cache_size=0;
ulonglong max_binlog_cache_size=0;
ulong slave_max_allowed_packet= 0;
+double slave_max_statement_time_double;
+ulonglong slave_max_statement_time;
ulonglong binlog_stmt_cache_size=0;
ulonglong max_binlog_stmt_cache_size=0;
ulonglong test_flags;
@@ -6358,13 +6360,6 @@ struct my_option my_long_options[]=
{"help", '?', "Display this help and exit.",
&opt_help, &opt_help, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0,
0, 0},
- {"allow-suspicious-udfs", 0,
- "Allows use of UDFs consisting of only one symbol xxx() "
- "without corresponding xxx_init() or xxx_deinit(). That also means "
- "that one can load any function from any library, for example exit() "
- "from libc.so",
- &opt_allow_suspicious_udfs, &opt_allow_suspicious_udfs,
- 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
{"ansi", 'a', "Use ANSI SQL syntax instead of MySQL syntax. This mode "
"will also set transaction isolation level 'serializable'.", 0, 0, 0,
GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
@@ -6687,12 +6682,6 @@ struct my_option my_long_options[]=
GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
{"silent-startup", OPT_SILENT, "Don't print [Note] to the error log during startup.",
&opt_silent_startup, &opt_silent_startup, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
-#ifndef DISABLE_GRANT_OPTIONS
- {"skip-grant-tables", 0,
- "Start without grant tables. This gives all users FULL ACCESS to all tables.",
- &opt_noacl, &opt_noacl, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0,
- 0},
-#endif
{"skip-host-cache", OPT_SKIP_HOST_CACHE, "Don't cache host names.", 0, 0, 0,
GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
{"skip-slave-start", 0,
@@ -7389,6 +7378,7 @@ SHOW_VAR status_vars[]= {
{"Handler_update", (char*) offsetof(STATUS_VAR, ha_update_count), SHOW_LONG_STATUS},
{"Handler_write", (char*) offsetof(STATUS_VAR, ha_write_count), SHOW_LONG_STATUS},
SHOW_FUNC_ENTRY("Key", &show_default_keycache),
+ {"optimizer_join_prefixes_check_calls", (char*) offsetof(STATUS_VAR, optimizer_join_prefixes_check_calls), SHOW_LONG_STATUS},
{"Last_query_cost", (char*) offsetof(STATUS_VAR, last_query_cost), SHOW_DOUBLE_STATUS},
#ifndef DBUG_OFF
{"malloc_calls", (char*) &malloc_calls, SHOW_LONG},
@@ -8736,6 +8726,8 @@ static int get_options(int *argc_ptr, char ***argv_ptr)
max_relay_log_size_var->option.def_value=
max_binlog_size_var->option.def_value;
}
+ slave_max_statement_time=
+ double2ulonglong(slave_max_statement_time_double * 1e6);
}
#endif
diff --git a/sql/mysqld.h b/sql/mysqld.h
index e649c83f3c9..5263e397a15 100644
--- a/sql/mysqld.h
+++ b/sql/mysqld.h
@@ -244,6 +244,8 @@ extern ulonglong binlog_cache_size, binlog_stmt_cache_size, binlog_file_cache_si
extern ulonglong max_binlog_cache_size, max_binlog_stmt_cache_size;
extern ulong max_binlog_size;
extern ulong slave_max_allowed_packet;
+extern ulonglong slave_max_statement_time;
+extern double slave_max_statement_time_double;
extern ulong opt_binlog_rows_event_max_size;
extern ulong binlog_row_metadata;
extern ulong thread_cache_size;
diff --git a/sql/opt_split.cc b/sql/opt_split.cc
index e00a26e3328..db18e7eebfb 100644
--- a/sql/opt_split.cc
+++ b/sql/opt_split.cc
@@ -827,7 +827,7 @@ void JOIN::add_keyuses_for_splitting()
added_keyuse->validity_ref= &keyuse_ext->validity_var;
}
- if (sort_and_filter_keyuse(thd, &keyuse, true))
+ if (sort_and_filter_keyuse(this, &keyuse, true))
goto err;
optimize_keyuse(this, &keyuse);
diff --git a/sql/opt_subselect.cc b/sql/opt_subselect.cc
index 46db641987b..e91b2ad14c3 100644
--- a/sql/opt_subselect.cc
+++ b/sql/opt_subselect.cc
@@ -2910,7 +2910,7 @@ void optimize_semi_joins(JOIN *join, table_map remaining_tables, uint idx,
pos[-1].inner_tables_handled_with_other_sjs;
}
- pos->prefix_cost.convert_from_cost(*current_read_time);
+ pos->prefix_cost= *current_read_time;
pos->prefix_record_count= *current_record_count;
{
@@ -3032,7 +3032,7 @@ void optimize_semi_joins(JOIN *join, table_map remaining_tables, uint idx,
update_sj_state(join, new_join_tab, idx, remaining_tables);
- pos->prefix_cost.convert_from_cost(*current_read_time);
+ pos->prefix_cost= *current_read_time;
pos->prefix_record_count= *current_record_count;
pos->dups_producing_tables= dups_producing_tables;
}
@@ -3123,15 +3123,15 @@ bool Sj_materialization_picker::check_qep(JOIN *join,
else
{
/* This is SJ-Materialization with lookups */
- Cost_estimate prefix_cost;
+ double prefix_cost;
signed int first_tab= (int)idx - mat_info->tables;
- double prefix_rec_count;
+ double prefix_rec_count, mat_read_time;
Json_writer_object trace(join->thd);
trace.add("strategy", "SJ-Materialization");
if (first_tab < (int)join->const_tables)
{
- prefix_cost.reset();
+ prefix_cost= 0;
prefix_rec_count= 1.0;
}
else
@@ -3140,9 +3140,8 @@ bool Sj_materialization_picker::check_qep(JOIN *join,
prefix_rec_count= join->positions[first_tab].prefix_record_count;
}
- double mat_read_time= prefix_cost.total_cost();
mat_read_time=
- COST_ADD(mat_read_time,
+ COST_ADD(prefix_cost,
COST_ADD(mat_info->materialization_cost.total_cost(),
COST_MULT(prefix_rec_count,
mat_info->lookup_cost.total_cost())));
@@ -3187,7 +3186,7 @@ bool Sj_materialization_picker::check_qep(JOIN *join,
}
else
{
- prefix_cost= join->positions[first_tab - 1].prefix_cost.total_cost();
+ prefix_cost= join->positions[first_tab - 1].prefix_cost;
prefix_rec_count= join->positions[first_tab - 1].prefix_record_count;
}
@@ -3551,7 +3550,7 @@ bool Duplicate_weedout_picker::check_qep(JOIN *join,
}
else
{
- dups_cost= join->positions[first_tab - 1].prefix_cost.total_cost();
+ dups_cost= join->positions[first_tab - 1].prefix_cost;
prefix_rec_count= join->positions[first_tab - 1].prefix_record_count;
temptable_rec_size= 8; /* This is not true but we'll make it so */
}
diff --git a/sql/opt_table_elimination.cc b/sql/opt_table_elimination.cc
index 03ee1a2ad62..99e25a5338a 100644
--- a/sql/opt_table_elimination.cc
+++ b/sql/opt_table_elimination.cc
@@ -134,6 +134,11 @@
- Nodes representing unique keys. Unique key has
= incoming edges from key component value modules
= outgoing edge to key's table module
+ - Nodes representing unique pseudo-keys for derived tables.
+ Unique pseudo-keys are composed as a result of GROUP BY expressions.
+ Like normal unique keys, they have:
+ = incoming edges from key component value modules
+ = outgoing edge to key's table module
- Inner side of outer join module. Outer join module has
= incoming edges from table value modules
= No outgoing edges. Once we reach it, we know we can eliminate the
@@ -205,6 +210,7 @@ class Dep_module;
class Dep_module_expr;
class Dep_module_goal;
class Dep_module_key;
+ class Dep_module_pseudo_key;
class Dep_analysis_context;
@@ -278,6 +284,8 @@ private:
Dep_module_key *key_dep;
/* Otherwise, this and advance */
uint equality_no;
+ /* Or this one and advance */
+ Dep_module_pseudo_key *pseudo_key_dep;
};
friend class Dep_analysis_context;
friend class Field_dependency_recorder;
@@ -302,12 +310,20 @@ class Dep_value_table : public Dep_value
{
public:
Dep_value_table(TABLE *table_arg) :
- table(table_arg), fields(NULL), keys(NULL)
+ table(table_arg), fields(NULL), keys(NULL), pseudo_key(NULL)
{}
TABLE *table; /* Table this object is representing */
/* Ordered list of fields that belong to this table */
Dep_value_field *fields;
- Dep_module_key *keys; /* Ordered list of Unique keys in this table */
+
+ /* Ordered list of Unique keys in this table */
+ Dep_module_key *keys;
+
+ /*
+ Possible unique pseudo-key applicable for this table
+ (only none or a single one is possible)
+ */
+ Dep_module_pseudo_key *pseudo_key;
/* Iteration over unbound modules that are our dependencies */
Iterator init_unbound_modules_iter(char *buf);
@@ -443,9 +459,63 @@ private:
const size_t Dep_module_key::iterator_size=
ALIGN_SIZE(sizeof(Dep_module_key::Value_iter));
-const size_t Dep_module::iterator_size=
- MY_MAX(Dep_module_expr::iterator_size, Dep_module_key::iterator_size);
+/*
+ A unique pseudo-key module for a derived table.
+ For example, a derived table
+ "SELECT a, count(*) from t1 GROUP BY a"
+ has unique values in its first field "a" due to GROUP BY expression
+ so this can be considered as a unique key for this derived table
+*/
+
+class Dep_module_pseudo_key : public Dep_module
+{
+public:
+ Dep_module_pseudo_key(Dep_value_table *table_arg,
+ MY_BITMAP *exposed_fields,
+ uint exposed_fields_num)
+ : table(table_arg), exposed_fields_map(exposed_fields)
+ {
+ unbound_args= exposed_fields_num;
+ }
+
+ Dep_value_table *table;
+
+ Iterator init_unbound_values_iter(char *buf) override;
+
+ Dep_value *get_next_unbound_value(Dep_analysis_context *dac,
+ Iterator iter) override;
+
+ bool covers_field(int field_index);
+
+ static const size_t iterator_size;
+
+private:
+ /*
+ Bitmap of field numbers in the derived table's SELECT list
+ which are included in the GROUP BY expression.
+ For example, unique pseudo-key for SQL
+ "SELECT count(*), b, a FROM t1 GROUP BY a, b"
+ will include two elements: {2} and {1}, since "a" and "b" are on the
+ GROUP BY list and also are present on the SELECT list with numbers 2 and 1
+ (numeration starts from 0).
+ */
+ MY_BITMAP *exposed_fields_map;
+
+ class Value_iter
+ {
+ public:
+ Dep_value_table *table;
+ };
+};
+
+const size_t Dep_module_pseudo_key::iterator_size=
+ ALIGN_SIZE(sizeof(Dep_module_pseudo_key::Value_iter));
+
+const size_t Dep_module::iterator_size=
+ MY_MAX(Dep_module_expr::iterator_size,
+ MY_MAX(Dep_module_key::iterator_size,
+ Dep_module_pseudo_key::iterator_size));
/*
A module that represents outer join that we're trying to eliminate. If we
@@ -507,13 +577,18 @@ public:
to see if expression equality_mods[expr_no] depends on the given field.
*/
MY_BITMAP expr_deps;
-
- Dep_value_table *create_table_value(TABLE *table);
+
+ Dep_value_table *create_table_value(TABLE_LIST *table_list);
Dep_value_field *get_field_value(Field *field);
#ifndef DBUG_OFF
void dbug_print_deps();
#endif
+
+private:
+ void create_unique_pseudo_key_if_needed(TABLE_LIST *table_list,
+ Dep_value_table *tbl_dep);
+ int find_field_in_list(List<Item> &fields_list, Item *field);
};
@@ -851,7 +926,7 @@ bool check_func_dependency(JOIN *join,
/* Create Dep_value_table objects for all tables we're trying to eliminate */
if (oj_tbl)
{
- if (!dac.create_table_value(oj_tbl->table))
+ if (!dac.create_table_value(oj_tbl))
return FALSE; /* purecov: inspected */
}
else
@@ -861,7 +936,7 @@ bool check_func_dependency(JOIN *join,
{
if (tbl->table && (tbl->table->map & dep_tables))
{
- if (!dac.create_table_value(tbl->table))
+ if (!dac.create_table_value(tbl))
return FALSE; /* purecov: inspected */
}
}
@@ -1577,33 +1652,156 @@ void add_module_expr(Dep_analysis_context *ctx, Dep_module_expr **eq_mod,
DESCRIPTION
Create a Dep_value_table object for the given table. Also create
Dep_module_key objects for all unique keys in the table.
+ Create a unique pseudo-key if this table is derived and has
+ a GROUP BY expression.
RETURN
Created table value object
NULL if out of memory
*/
-Dep_value_table *Dep_analysis_context::create_table_value(TABLE *table)
+Dep_value_table *
+Dep_analysis_context::create_table_value(TABLE_LIST *table_list)
{
Dep_value_table *tbl_dep;
- if (!(tbl_dep= new Dep_value_table(table)))
+ if (!(tbl_dep= new Dep_value_table(table_list->table)))
return NULL; /* purecov: inspected */
Dep_module_key **key_list= &(tbl_dep->keys);
/* Add dependencies for unique keys */
- for (uint i=0; i < table->s->keys; i++)
+ for (uint i= 0; i < table_list->table->s->keys; i++)
{
- KEY *key= table->key_info + i;
+ KEY *key= table_list->table->key_info + i;
if (key->flags & HA_NOSAME)
{
Dep_module_key *key_dep;
- if (!(key_dep= new Dep_module_key(tbl_dep, i, key->user_defined_key_parts)))
+ if (!(key_dep= new Dep_module_key(tbl_dep, i,
+ key->user_defined_key_parts)))
return NULL;
*key_list= key_dep;
key_list= &(key_dep->next_table_key);
}
}
- return table_deps[table->tablenr]= tbl_dep;
+
+ create_unique_pseudo_key_if_needed(table_list, tbl_dep);
+ return table_deps[table_list->table->tablenr]= tbl_dep;
+}
+
+
+/*
+ @brief
+ Check if we can create a unique pseudo-key for the passed table.
+ If we can, create a dependency for it
+
+ @detail
+ Currently, pseudo-key is created for the list of GROUP BY columns.
+
+ TODO: also it can be created if the query uses
+ - SELECT DISTINCT
+ - UNION DISTINCT (not UNION ALL)
+*/
+
+void Dep_analysis_context::create_unique_pseudo_key_if_needed(
+ TABLE_LIST *table_list, Dep_value_table *tbl_dep)
+{
+ auto select_unit= table_list->get_unit();
+ SELECT_LEX *first_select= nullptr;
+ if (select_unit)
+ {
+ first_select= select_unit->first_select();
+
+ /*
+ Exclude UNION (ALL) queries from consideration by checking
+ next_select() == nullptr
+ */
+ if (unlikely(select_unit->first_select()->next_select()))
+ first_select= nullptr;
+ }
+
+ /*
+ GROUP BY expression is considered as a unique pseudo-key
+ for the derived table. Add this pseudo key as a dependency.
+
+ first_select->join is NULL for degenerate derived tables
+ which are known to have just one row and so were already materialized
+ by the optimizer, check this here
+ */
+ if (first_select && first_select->join &&
+ first_select->group_list.elements > 0)
+ {
+ auto max_possible_elements= first_select->join->fields_list.elements;
+ void *buf;
+ MY_BITMAP *exposed_fields= (MY_BITMAP*)
+ current_thd->alloc(sizeof(MY_BITMAP));
+ if (!(buf= current_thd->alloc(bitmap_buffer_size(max_possible_elements))) ||
+ my_bitmap_init(exposed_fields, (my_bitmap_map*)buf,
+ max_possible_elements))
+ // Memory allocation failed
+ return;
+ bitmap_clear_all(exposed_fields);
+ uint exposed_fields_count= 0;
+
+ bool valid= true;
+ for (auto cur_group= first_select->group_list.first;
+ cur_group;
+ cur_group= cur_group->next)
+ {
+ auto elem= *(cur_group->item);
+ /*
+ Make sure GROUP BY elements contain only fields
+ and no functions or other expressions
+ */
+ if (elem->type() != Item::FIELD_ITEM)
+ {
+ valid= false;
+ break;
+ }
+ auto field_no= find_field_in_list(first_select->join->fields_list, elem);
+ if (field_no == -1)
+ {
+ /*
+ This GROUP BY element is not present in the select list. This is a
+ case like this:
+ (SELECT a FROM t1 GROUP by a,b) as TBL
+ Here, the combination of (a,b) is unique, but the select doesn't
+ include "b". "a" alone is not unique, so TBL doesn't have a unique
+ pseudo-key.
+ */
+ valid= false;
+ break;
+ }
+ bitmap_set_bit(exposed_fields, field_no);
+ exposed_fields_count++;
+ }
+ if (valid)
+ {
+ Dep_module_pseudo_key *pseudo_key;
+ pseudo_key= new Dep_module_pseudo_key(tbl_dep, exposed_fields,
+ exposed_fields_count);
+ tbl_dep->pseudo_key= pseudo_key;
+ }
+ }
+}
+
+
+/*
+ Iterate the list of fields and look for the given field.
+ Returns the index of the field if it is found on the list
+ and -1 otherwise
+*/
+
+int Dep_analysis_context::find_field_in_list(List<Item> &fields_list,
+ Item *field)
+{
+ List_iterator<Item> it(fields_list);
+ int field_idx= 0;
+ while (auto next_field= it++)
+ {
+ if (next_field->eq(field, false))
+ return field_idx;
+ field_idx++;
+ }
+ return -1; /*not found*/
}
@@ -1746,11 +1944,39 @@ Dep_value* Dep_module_key::get_next_unbound_value(Dep_analysis_context *dac,
}
+char *Dep_module_pseudo_key::init_unbound_values_iter(char *buf)
+{
+ Value_iter *iter= ALIGN_PTR(my_ptrdiff_t(buf), Value_iter);
+ iter->table= table;
+ return (char *) iter;
+}
+
+Dep_value *
+Dep_module_pseudo_key::get_next_unbound_value(Dep_analysis_context *dac,
+ Dep_module::Iterator iter)
+{
+ Dep_value *res= ((Value_iter *) iter)->table;
+ ((Value_iter *) iter)->table= NULL;
+ return res;
+}
+
+
+/*
+ Check if column number field_no is covered by the pseudo-key.
+*/
+
+bool Dep_module_pseudo_key::covers_field(int field_no)
+{
+ return bitmap_is_set(exposed_fields_map, field_no) > 0;
+}
+
+
Dep_value::Iterator Dep_value_field::init_unbound_modules_iter(char *buf)
{
Module_iter *iter= ALIGN_PTR(my_ptrdiff_t(buf), Module_iter);
iter->key_dep= table->keys;
iter->equality_no= 0;
+ iter->pseudo_key_dep= table->pseudo_key;
return (char*)iter;
}
@@ -1758,7 +1984,8 @@ Dep_value::Iterator Dep_value_field::init_unbound_modules_iter(char *buf)
void
Dep_value_field::make_unbound_modules_iter_skip_keys(Dep_value::Iterator iter)
{
- ((Module_iter*)iter)->key_dep= NULL;
+ ((Module_iter*) iter)->key_dep= NULL;
+ ((Module_iter*) iter)->pseudo_key_dep= NULL;
}
@@ -1786,6 +2013,16 @@ Dep_module* Dep_value_field::get_next_unbound_module(Dep_analysis_context *dac,
}
else
di->key_dep= NULL;
+
+ Dep_module_pseudo_key *pseudo_key_dep= di->pseudo_key_dep;
+ if (pseudo_key_dep && !pseudo_key_dep->is_applicable() &&
+ pseudo_key_dep->covers_field(field->field_index))
+ {
+ di->pseudo_key_dep= NULL;
+ return pseudo_key_dep;
+ }
+ else
+ di->pseudo_key_dep= NULL;
/*
Then walk through [multi]equalities and find those that
@@ -1819,7 +2056,7 @@ static void mark_as_eliminated(JOIN *join, TABLE_LIST *tbl,
TABLE *table;
/*
NOTE: there are TABLE_LIST object that have
- tbl->table!= NULL && tbl->nested_join!=NULL and
+ tbl->table!= NULL && tbl->nested_join!=NULL and
tbl->table == tbl->nested_join->join_list->element(..)->table
*/
if (tbl->nested_join)
@@ -1848,7 +2085,6 @@ static void mark_as_eliminated(JOIN *join, TABLE_LIST *tbl,
tbl->on_expr->walk(&Item::mark_as_eliminated_processor, FALSE, NULL);
}
-
#ifndef DBUG_OFF
/* purecov: begin inspected */
void Dep_analysis_context::dbug_print_deps()
diff --git a/sql/privilege.h b/sql/privilege.h
index 9e505691736..f6980aeb6b1 100644
--- a/sql/privilege.h
+++ b/sql/privilege.h
@@ -570,6 +570,8 @@ constexpr privilege_t PRIV_SET_SYSTEM_GLOBAL_VAR_SLAVE_EXEC_MODE=
REPL_SLAVE_ADMIN_ACL | SUPER_ACL;
constexpr privilege_t PRIV_SET_SYSTEM_GLOBAL_VAR_SLAVE_MAX_ALLOWED_PACKET=
REPL_SLAVE_ADMIN_ACL | SUPER_ACL;
+constexpr privilege_t PRIV_SET_SYSTEM_GLOBAL_VAR_SLAVE_MAX_STATEMENT_TIME=
+ REPL_SLAVE_ADMIN_ACL;
constexpr privilege_t PRIV_SET_SYSTEM_GLOBAL_VAR_SLAVE_NET_TIMEOUT=
REPL_SLAVE_ADMIN_ACL | SUPER_ACL;
constexpr privilege_t PRIV_SET_SYSTEM_GLOBAL_VAR_SLAVE_PARALLEL_MAX_QUEUED=
diff --git a/sql/protocol.cc b/sql/protocol.cc
index 33d865a3f9f..eee6236ffe7 100644
--- a/sql/protocol.cc
+++ b/sql/protocol.cc
@@ -876,13 +876,17 @@ bool Protocol_text::store_field_metadata(const THD * thd,
if (charset_for_protocol == &my_charset_bin || thd_charset == NULL)
{
/* No conversion */
- int2store(pos, charset_for_protocol->number);
+ uint id= charset_for_protocol->get_id(MY_COLLATION_ID_TYPE_COMPAT_100800);
+ DBUG_ASSERT(id <= UINT_MAX16);
+ int2store(pos, (uint16) id);
int4store(pos + 2, field.length);
}
else
{
/* With conversion */
- int2store(pos, thd_charset->number);
+ uint id= thd_charset->get_id(MY_COLLATION_ID_TYPE_COMPAT_100800);
+ DBUG_ASSERT(id <= UINT_MAX16);
+ int2store(pos, (uint16) id);
uint32 field_length= field.max_octet_length(charset_for_protocol,
thd_charset);
int4store(pos + 2, field_length);
diff --git a/sql/rpl_mi.cc b/sql/rpl_mi.cc
index b9aea39e547..ab2523d960b 100644
--- a/sql/rpl_mi.cc
+++ b/sql/rpl_mi.cc
@@ -39,7 +39,7 @@ Master_info::Master_info(LEX_CSTRING *connection_name_arg,
clock_diff_with_master(0),
sync_counter(0), heartbeat_period(0), received_heartbeats(0),
master_id(0), prev_master_id(0),
- using_gtid(USE_GTID_NO), events_queued_since_last_gtid(0),
+ using_gtid(USE_GTID_SLAVE_POS), events_queued_since_last_gtid(0),
gtid_reconnect_event_skip_count(0), gtid_event_seen(false),
in_start_all_slaves(0), in_stop_all_slaves(0), in_flush_all_relay_logs(0),
users(0), killed(0),
@@ -210,7 +210,10 @@ void init_master_log_pos(Master_info* mi)
mi->master_log_name[0] = 0;
mi->master_log_pos = BIN_LOG_HEADER_SIZE; // skip magic number
- mi->using_gtid= Master_info::USE_GTID_NO;
+ if (mi->master_supports_gtid)
+ {
+ mi->using_gtid= Master_info::USE_GTID_SLAVE_POS;
+ }
mi->gtid_current_pos.reset();
mi->events_queued_since_last_gtid= 0;
mi->gtid_reconnect_event_skip_count= 0;
diff --git a/sql/rpl_mi.h b/sql/rpl_mi.h
index ecfecabd6c9..6058b7fb34c 100644
--- a/sql/rpl_mi.h
+++ b/sql/rpl_mi.h
@@ -375,6 +375,21 @@ class Master_info : public Slave_reporting_capability
at time its alter info struct is about to be appened to the list.
*/
bool is_shutdown= false;
+
+ /*
+ A replica will default to Slave_Pos for using Using_Gtid; however, we
+ first need to test if the master supports GTIDs. If not, fall back to 'No'.
+ Cache the value so future RESET SLAVE commands don't revert to Slave_Pos.
+ */
+ bool master_supports_gtid= true;
+
+ /*
+ When TRUE, transition this server from being an active master to a slave.
+ This updates the replication state to account for any transactions which
+ were committed into the binary log. In particular, it merges
+ gtid_binlog_pos into gtid_slave_pos.
+ */
+ bool is_demotion= false;
};
struct start_alter_thd_args
diff --git a/sql/share/errmsg-utf8.txt b/sql/share/errmsg-utf8.txt
index e41cf8b6eb9..74c65172860 100644
--- a/sql/share/errmsg-utf8.txt
+++ b/sql/share/errmsg-utf8.txt
@@ -10074,3 +10074,9 @@ ER_INCONSISTENT_SLAVE_TEMP_TABLE
eng "Replicated query '%s' table `%s.%s` can not be temporary"
ER_VERS_HIST_PART_FAILED
eng "Versioned table %`s.%`s: adding HISTORY partition(s) failed"
+WARN_OPTION_CHANGING
+ eng "%s is implicitly changing the value of '%s' from '%s' to '%s'"
+ER_CM_OPTION_MISSING_REQUIREMENT
+ eng "CHANGE MASTER TO option '%s=%s' is missing requirement %s"
+ER_SLAVE_STATEMENT_TIMEOUT 70100
+ eng "Slave log event execution was interrupted (slave_max_statement_time exceeded)"
diff --git a/sql/slave.cc b/sql/slave.cc
index 0aa7ac62c8b..b0462c6f069 100644
--- a/sql/slave.cc
+++ b/sql/slave.cc
@@ -1775,6 +1775,9 @@ static int get_master_version_and_clock(MYSQL* mysql, Master_info* mi)
}
else
{
+ DBUG_EXECUTE_IF("mock_mariadb_primary_v5_in_get_master_version",
+ version= 5;);
+
/*
Note the following switch will bug when we have MySQL branch 30 ;)
*/
@@ -2358,6 +2361,14 @@ past_checksum:
after_set_capability:
#endif
+ if (!(mi->master_supports_gtid= version >= 10))
+ {
+ sql_print_information(
+ "Slave I/O thread: Falling back to Using_Gtid=No because "
+ "master does not support GTIDs");
+ mi->using_gtid= Master_info::USE_GTID_NO;
+ }
+
if (mi->using_gtid != Master_info::USE_GTID_NO)
{
/* Request dump to start from slave replication GTID state. */
diff --git a/sql/sp.cc b/sql/sp.cc
index 74743347816..6cfe1045b0c 100644
--- a/sql/sp.cc
+++ b/sql/sp.cc
@@ -217,12 +217,12 @@ TABLE_FIELD_TYPE proc_table_fields[MYSQL_PROC_FIELD_COUNT] =
},
{
{ STRING_WITH_LEN("collation_connection") },
- { STRING_WITH_LEN("char(32)") },
+ { STRING_WITH_LEN("char(") },
{ STRING_WITH_LEN("utf8mb3") }
},
{
{ STRING_WITH_LEN("db_collation") },
- { STRING_WITH_LEN("char(32)") },
+ { STRING_WITH_LEN("char(") },
{ STRING_WITH_LEN("utf8mb3") }
},
{
@@ -687,8 +687,7 @@ bool AUTHID::read_from_mysql_proc_row(THD *thd, TABLE *table)
*/
int
-Sp_handler::db_find_routine(THD *thd,
- const Database_qualified_name *name,
+Sp_handler::db_find_routine(THD *thd, const Database_qualified_name *name,
sp_head **sphp) const
{
TABLE *table;
@@ -697,7 +696,7 @@ Sp_handler::db_find_routine(THD *thd,
longlong created;
longlong modified;
Sp_chistics chistics;
- bool saved_time_zone_used= thd->time_zone_used;
+ THD::used_t saved_time_zone_used= thd->used & THD::TIME_ZONE_USED;
bool trans_commited= 0;
sql_mode_t sql_mode;
Stored_program_creation_ctx *creation_ctx;
@@ -763,15 +762,14 @@ Sp_handler::db_find_routine(THD *thd,
thd->commit_whole_transaction_and_close_tables();
new_trans.restore_old_transaction();
- ret= db_load_routine(thd, name, sphp,
- sql_mode, params, returns, body, chistics, definer,
- created, modified, NULL, creation_ctx);
+ ret= db_load_routine(thd, name, sphp, sql_mode, params, returns, body,
+ chistics, definer, created, modified, NULL, creation_ctx);
done:
/*
Restore the time zone flag as the timezone usage in proc table
does not affect replication.
*/
- thd->time_zone_used= saved_time_zone_used;
+ thd->used= (thd->used & ~THD::TIME_ZONE_USED) | saved_time_zone_used;
if (!trans_commited)
{
if (table)
diff --git a/sql/sp_head.cc b/sql/sp_head.cc
index 85a812f85d9..35bdd4f9f1c 100644
--- a/sql/sp_head.cc
+++ b/sql/sp_head.cc
@@ -3080,17 +3080,17 @@ sp_head::show_create_routine_get_fields(THD *thd, const Sp_handler *sph,
fields->push_back(new (mem_root)
Item_empty_string(thd, "character_set_client",
- MY_CS_NAME_SIZE),
+ MY_CS_CHARACTER_SET_NAME_SIZE),
mem_root);
fields->push_back(new (mem_root)
Item_empty_string(thd, "collation_connection",
- MY_CS_NAME_SIZE),
+ MY_CS_COLLATION_NAME_SIZE),
mem_root);
fields->push_back(new (mem_root)
Item_empty_string(thd, "Database Collation",
- MY_CS_NAME_SIZE),
+ MY_CS_COLLATION_NAME_SIZE),
mem_root);
}
@@ -3156,17 +3156,17 @@ sp_head::show_create_routine(THD *thd, const Sp_handler *sph)
fields.push_back(new (mem_root)
Item_empty_string(thd, "character_set_client",
- MY_CS_NAME_SIZE),
+ MY_CS_CHARACTER_SET_NAME_SIZE),
thd->mem_root);
fields.push_back(new (mem_root)
Item_empty_string(thd, "collation_connection",
- MY_CS_NAME_SIZE),
+ MY_CS_COLLATION_NAME_SIZE),
thd->mem_root);
fields.push_back(new (mem_root)
Item_empty_string(thd, "Database Collation",
- MY_CS_NAME_SIZE),
+ MY_CS_CHARACTER_SET_NAME_SIZE),
thd->mem_root);
if (protocol->send_result_set_metadata(&fields,
diff --git a/sql/sql_class.cc b/sql/sql_class.cc
index 532696345a7..8760b5d2e82 100644
--- a/sql/sql_class.cc
+++ b/sql/sql_class.cc
@@ -637,7 +637,7 @@ THD::THD(my_thread_id id, bool is_wsrep_applier)
protocol_text(this), protocol_binary(this), initial_status_var(0),
m_current_stage_key(0), m_psi(0),
in_sub_stmt(0), log_all_errors(0),
- binlog_unsafe_warning_flags(0),
+ binlog_unsafe_warning_flags(0), used(0),
current_stmt_binlog_format(BINLOG_FORMAT_MIXED),
bulk_param(0),
table_map_for_update(0),
@@ -657,8 +657,6 @@ THD::THD(my_thread_id id, bool is_wsrep_applier)
is_fatal_error(0),
transaction_rollback_request(0),
is_fatal_sub_stmt_error(false),
- rand_used(0),
- time_zone_used(0),
in_lock_tables(0),
bootstrap(0),
derived_tables_processing(FALSE),
@@ -771,11 +769,10 @@ THD::THD(my_thread_id id, bool is_wsrep_applier)
security_ctx= &main_security_ctx;
no_errors= 0;
password= 0;
- query_start_sec_part_used= 0;
count_cuted_fields= CHECK_FIELD_IGNORE;
killed= NOT_KILLED;
killed_err= 0;
- is_slave_error= thread_specific_used= FALSE;
+ is_slave_error= FALSE;
my_hash_clear(&handler_tables_hash);
my_hash_clear(&ull_hash);
tmp_table=0;
@@ -2099,7 +2096,8 @@ int THD::killed_errno()
DBUG_RETURN(ER_QUERY_INTERRUPTED);
case KILL_TIMEOUT:
case KILL_TIMEOUT_HARD:
- DBUG_RETURN(ER_STATEMENT_TIMEOUT);
+ DBUG_RETURN(slave_thread ?
+ ER_SLAVE_STATEMENT_TIMEOUT : ER_STATEMENT_TIMEOUT);
case KILL_SERVER:
case KILL_SERVER_HARD:
DBUG_RETURN(ER_SERVER_SHUTDOWN);
@@ -2235,13 +2233,13 @@ void THD::cleanup_after_query()
thd_progress_end(this);
/*
- Reset rand_used so that detection of calls to rand() will save random
+ Reset RAND_USED so that detection of calls to rand() will save random
seeds if needed by the slave.
- Do not reset rand_used if inside a stored function or trigger because
+ Do not reset RAND_USED if inside a stored function or trigger because
only the call to these operations is logged. Thus only the calling
statement needs to detect rand() calls made by its substatements. These
- substatements must not set rand_used to 0 because it would remove the
+ substatements must not set RAND_USED to 0 because it would remove the
detection of rand() by the calling statement.
*/
if (!in_sub_stmt) /* stored functions and triggers are a special case */
@@ -2249,7 +2247,7 @@ void THD::cleanup_after_query()
/* Forget those values, for next binlogger: */
stmt_depends_on_first_successful_insert_id_in_prev_stmt= 0;
auto_inc_intervals_in_cur_stmt_for_binlog.empty();
- rand_used= 0;
+ used&= ~THD::RAND_USED;
#ifndef EMBEDDED_LIBRARY
/*
Clean possible unused INSERT_ID events by current statement.
@@ -7587,7 +7585,7 @@ MYSQL_TIME THD::query_start_TIME()
MYSQL_TIME res;
variables.time_zone->gmt_sec_to_TIME(&res, query_start());
res.second_part= query_start_sec_part();
- time_zone_used= 1;
+ used|= TIME_ZONE_USED;
return res;
}
@@ -8326,7 +8324,7 @@ Query_arena_stmt::~Query_arena_stmt()
bool THD::timestamp_to_TIME(MYSQL_TIME *ltime, my_time_t ts,
ulong sec_part, date_mode_t fuzzydate)
{
- time_zone_used= 1;
+ used|= TIME_ZONE_USED;
if (ts == 0 && sec_part == 0)
{
if (fuzzydate & TIME_NO_ZERO_DATE)
@@ -8383,3 +8381,21 @@ THD::charset_collation_context_alter_table(const TABLE_SHARE *s)
return Charset_collation_context(get_default_db_collation(this, s->db.str),
s->table_charset);
}
+
+
+void Charset_loader_server::raise_unknown_collation_error(const char *name) const
+{
+ ErrConvString err(name, &my_charset_utf8mb4_general_ci);
+ my_error(ER_UNKNOWN_COLLATION, MYF(0), err.ptr());
+ if (error[0])
+ push_warning_printf(current_thd,
+ Sql_condition::WARN_LEVEL_WARN,
+ ER_UNKNOWN_COLLATION, "%s", error);
+}
+
+
+void Charset_loader_server::raise_not_applicable_error(const char *cs,
+ const char *cl) const
+{
+ my_error(ER_COLLATION_CHARSET_MISMATCH, MYF(0), cl, cs);
+}
diff --git a/sql/sql_class.h b/sql/sql_class.h
index 5e5c0128a05..8d53454abb9 100644
--- a/sql/sql_class.h
+++ b/sql/sql_class.h
@@ -749,6 +749,7 @@ typedef struct system_variables
ulong net_retry_count;
ulong net_wait_timeout;
ulong net_write_timeout;
+ ulong optimizer_extra_pruning_depth;
ulong optimizer_prune_level;
ulong optimizer_search_depth;
ulong optimizer_selectivity_sampling_limit;
@@ -968,6 +969,7 @@ typedef struct system_status_var
ulong filesort_rows_;
ulong filesort_scan_count_;
ulong filesort_pq_sorts_;
+ ulong optimizer_join_prefixes_check_calls;
/* Features used */
ulong feature_custom_aggregate_functions; /* +1 when custom aggregate
@@ -1086,33 +1088,6 @@ static inline void update_global_memory_status(int64 size)
my_atomic_add64_explicit(ptr, size, MY_MEMORY_ORDER_RELAXED);
}
-/**
- Get collation by name, send error to client on failure.
- @param name Collation name
- @param name_cs Character set of the name string
- @return
- @retval NULL on error
- @retval Pointter to CHARSET_INFO with the given name on success
-*/
-static inline CHARSET_INFO *
-mysqld_collation_get_by_name(const char *name, myf utf8_flag,
- CHARSET_INFO *name_cs= system_charset_info)
-{
- CHARSET_INFO *cs;
- MY_CHARSET_LOADER loader;
- my_charset_loader_init_mysys(&loader);
-
- if (!(cs= my_collation_get_by_name(&loader, name, MYF(utf8_flag))))
- {
- ErrConvString err(name, name_cs);
- my_error(ER_UNKNOWN_COLLATION, MYF(0), err.ptr());
- if (loader.error[0])
- push_warning_printf(current_thd,
- Sql_condition::WARN_LEVEL_WARN,
- ER_UNKNOWN_COLLATION, "%s", loader.error);
- }
- return cs;
-}
static inline bool is_supported_parser_charset(CHARSET_INFO *cs)
{
@@ -2948,6 +2923,12 @@ public:
*/
uint32 binlog_unsafe_warning_flags;
+ typedef uint used_t;
+ enum { RAND_USED=1, TIME_ZONE_USED=2, QUERY_START_SEC_PART_USED=4,
+ THREAD_SPECIFIC_USED=8 };
+
+ used_t used;
+
#ifndef MYSQL_CLIENT
binlog_cache_mngr * binlog_setup_trx_data();
/*
@@ -3632,15 +3613,11 @@ public:
Reset to FALSE when we leave the sub-statement mode.
*/
bool is_fatal_sub_stmt_error;
- bool rand_used, time_zone_used;
- bool query_start_sec_part_used;
/* for IS NULL => = last_insert_id() fix in remove_eq_conds() */
bool substitute_null_with_insert_id;
bool in_lock_tables;
bool bootstrap, cleanup_done, free_connection_done;
- /** is set if some thread specific value(s) used in a statement. */
- bool thread_specific_used;
/**
is set if a statement accesses a temporary table created through
CREATE TEMPORARY TABLE.
@@ -3950,7 +3927,7 @@ public:
ulong sec_part, date_mode_t fuzzydate);
inline my_time_t query_start() { return start_time; }
inline ulong query_start_sec_part()
- { query_start_sec_part_used=1; return start_time_sec_part; }
+ { used|= QUERY_START_SEC_PART_USED; return start_time_sec_part; }
MYSQL_TIME query_start_TIME();
time_round_mode_t temporal_round_mode() const
{
@@ -5476,23 +5453,28 @@ public:
{
#ifndef EMBEDDED_LIBRARY
/*
+ Slave vs user threads have timeouts configured via different variables,
+ so pick the appropriate one to use.
+ */
+ ulonglong timeout_val=
+ slave_thread ? slave_max_statement_time : variables.max_statement_time;
+
+ /*
Don't start a query timer if
- If timeouts are not set
- if we are in a stored procedure or sub statement
- - If this is a slave thread
- If we already have set a timeout (happens when running prepared
statements that calls mysql_execute_command())
*/
- if (!variables.max_statement_time || spcont || in_sub_stmt ||
- slave_thread || query_timer.expired == 0)
+ if (!timeout_val || spcont || in_sub_stmt || query_timer.expired == 0)
return;
- thr_timer_settime(&query_timer, variables.max_statement_time);
+ thr_timer_settime(&query_timer, timeout_val);
#endif
}
void reset_query_timer()
{
#ifndef EMBEDDED_LIBRARY
- if (spcont || in_sub_stmt || slave_thread)
+ if (spcont || in_sub_stmt)
return;
if (!query_timer.expired)
thr_timer_end(&query_timer);
diff --git a/sql/sql_delete.cc b/sql/sql_delete.cc
index ccef8b42f74..a53c2ef75e3 100644
--- a/sql/sql_delete.cc
+++ b/sql/sql_delete.cc
@@ -1646,7 +1646,7 @@ bool multi_delete::send_eof()
thd->clear_error();
else
errcode= query_error_code(thd, killed_status == NOT_KILLED);
- thd->thread_specific_used= TRUE;
+ thd->used|= THD::THREAD_SPECIFIC_USED;
StatementBinlog stmt_binlog(thd, thd->binlog_need_stmt_format(transactional_tables));
if (unlikely(thd->binlog_query(THD::ROW_QUERY_TYPE,
thd->query(), thd->query_length(),
diff --git a/sql/sql_i_s.h b/sql/sql_i_s.h
index a3614d889c9..263031ae2c9 100644
--- a/sql/sql_i_s.h
+++ b/sql/sql_i_s.h
@@ -18,7 +18,7 @@
#include "sql_const.h" // MAX_FIELD_VARCHARLENGTH
#include "sql_basic_types.h" // enum_nullability
-#include "sql_string.h" // strlen, MY_CS_NAME_SIZE
+#include "sql_string.h" // strlen, MY_CS_CHARACTER_SET_NAME_SIZE
#include "lex_string.h" // LEX_CSTRING
#include "mysql_com.h" // enum_field_types
#include "my_time.h" // TIME_SECOND_PART_DIGITS
@@ -162,6 +162,11 @@ class Yes_or_empty: public Varchar
{
public:
Yes_or_empty(): Varchar(3) { }
+ static LEX_CSTRING value(bool val)
+ {
+ return val ? Lex_cstring(STRING_WITH_LEN("Yes")) :
+ Lex_cstring();
+ }
};
@@ -196,7 +201,14 @@ public:
class CSName: public Varchar
{
public:
- CSName(): Varchar(MY_CS_NAME_SIZE) { }
+ CSName(): Varchar(MY_CS_CHARACTER_SET_NAME_SIZE) { }
+};
+
+
+class CLName: public Varchar
+{
+public:
+ CLName(): Varchar(MY_CS_COLLATION_NAME_SIZE) { }
};
diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc
index d7673f70395..da52298697f 100644
--- a/sql/sql_insert.cc
+++ b/sql/sql_insert.cc
@@ -2281,7 +2281,8 @@ public:
ulong start_time_sec_part;
sql_mode_t sql_mode;
bool auto_increment_field_not_null;
- bool ignore, log_query, query_start_sec_part_used;
+ bool ignore, log_query;
+ THD::used_t query_start_sec_part_used;
bool stmt_depends_on_first_successful_insert_id_in_prev_stmt;
ulonglong first_successful_insert_id_in_prev_stmt;
ulonglong forced_insert_id;
@@ -2939,7 +2940,7 @@ int write_delayed(THD *thd, TABLE *table, enum_duplicates duplic,
row->start_time= thd->start_time;
row->start_time_sec_part= thd->start_time_sec_part;
- row->query_start_sec_part_used= thd->query_start_sec_part_used;
+ row->query_start_sec_part_used= thd->used & THD::QUERY_START_SEC_PART_USED;
/*
those are for the binlog: LAST_INSERT_ID() has been evaluated at this
time, so record does not need it, but statement-based binlogging of the
@@ -2956,7 +2957,7 @@ int write_delayed(THD *thd, TABLE *table, enum_duplicates duplic,
So we can get time_zone object from thread which handling delayed statement.
See the comment of my_tz_find() for detail.
*/
- if (thd->time_zone_used)
+ if (thd->used & THD::TIME_ZONE_USED)
{
row->time_zone = thd->variables.time_zone;
}
@@ -3570,7 +3571,7 @@ bool Delayed_insert::handle_inserts(void)
thd.start_time=row->start_time;
thd.start_time_sec_part=row->start_time_sec_part;
- thd.query_start_sec_part_used=row->query_start_sec_part_used;
+ thd.used= row->query_start_sec_part_used;
/*
To get the exact auto_inc interval to store in the binlog we must not
use values from the previous interval (of the previous rows).
diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc
index 50e214b0e57..645d82e5fae 100644
--- a/sql/sql_lex.cc
+++ b/sql/sql_lex.cc
@@ -3392,7 +3392,7 @@ bool st_select_lex::test_limit()
-st_select_lex* st_select_lex_unit::outer_select()
+st_select_lex* st_select_lex_unit::outer_select() const
{
return (st_select_lex*) master;
}
@@ -11878,16 +11878,18 @@ bool SELECT_LEX_UNIT::explainable() const
EXPLAIN/ANALYZE unit, when:
(1) if it's a subquery - it's not part of eliminated WHERE/ON clause.
(2) if it's a CTE - it's not hanging (needed for execution)
- (3) if it's a derived - it's not merged
+ (3) if it's a derived - it's not merged or eliminated
if it's not 1/2/3 - it's some weird internal thing, ignore it
*/
+
return item ?
!item->eliminated : // (1)
with_element ?
derived && derived->derived_result &&
!with_element->is_hanging_recursive(): // (2)
derived ?
- derived->is_materialized_derived() : // (3)
+ derived->is_materialized_derived() && // (3)
+ !is_derived_eliminated() :
false;
}
@@ -11896,3 +11898,20 @@ bool st_select_lex::is_query_topmost(THD *thd)
{
return get_master() == &thd->lex->unit;
}
+
+
+/*
+ Determines whether the derived table was eliminated during
+ the call of eliminate_tables(JOIN *) made at the optimization stage
+ or completely optimized out (for such degenerate statements like
+ "SELECT 1", for example)
+*/
+
+bool SELECT_LEX_UNIT::is_derived_eliminated() const
+{
+ if (!derived)
+ return false;
+ if (!derived->table)
+ return true;
+ return derived->table->map & outer_select()->join->eliminated_tables;
+}
diff --git a/sql/sql_lex.h b/sql/sql_lex.h
index 53510fb913b..a7231b92cd6 100644
--- a/sql/sql_lex.h
+++ b/sql/sql_lex.h
@@ -499,6 +499,7 @@ struct LEX_MASTER_INFO
uint port, connect_retry;
float heartbeat_period;
int sql_delay;
+ bool is_demotion_opt;
/*
Enum is used for making it possible to detect if the user
changed variable or if it should be left at old value
@@ -541,6 +542,7 @@ struct LEX_MASTER_INFO
gtid_pos_str= null_clex_str;
use_gtid_opt= LEX_GTID_UNCHANGED;
sql_delay= -1;
+ is_demotion_opt= 0;
}
};
@@ -971,7 +973,7 @@ public:
};
void init_query();
- st_select_lex* outer_select();
+ st_select_lex* outer_select() const;
const st_select_lex* first_select() const
{
return reinterpret_cast<const st_select_lex*>(slave);
@@ -1041,6 +1043,9 @@ public:
bool can_be_merged();
friend class st_select_lex;
+
+private:
+ bool is_derived_eliminated() const;
};
typedef class st_select_lex_unit SELECT_LEX_UNIT;
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc
index 7589dc51a12..8d0f509b5ea 100644
--- a/sql/sql_parse.cc
+++ b/sql/sql_parse.cc
@@ -7579,8 +7579,8 @@ void THD::reset_for_next_command(bool do_clear_error)
}
#endif /* WITH_WSREP */
- query_start_sec_part_used= 0;
- is_fatal_error= time_zone_used= 0;
+ used= 0;
+ is_fatal_error= 0;
variables.option_bits&= ~OPTION_BINLOG_THIS_STMT;
/*
@@ -7599,14 +7599,12 @@ void THD::reset_for_next_command(bool do_clear_error)
transaction->all.reset();
}
DBUG_ASSERT(security_ctx== &main_security_ctx);
- thread_specific_used= FALSE;
if (opt_bin_log)
reset_dynamic(&user_var_events);
DBUG_ASSERT(user_var_events_alloc == &main_mem_root);
enable_slow_log= true;
get_stmt_da()->reset_for_next_command();
- rand_used= 0;
m_sent_row_count= m_examined_row_count= 0;
accessed_rows_and_keys= 0;
diff --git a/sql/sql_repl.cc b/sql/sql_repl.cc
index 336e1eeb38e..8bde0f3bd53 100644
--- a/sql/sql_repl.cc
+++ b/sql/sql_repl.cc
@@ -3424,6 +3424,16 @@ int reset_slave(THD *thd, Master_info* mi)
goto err;
}
+ if (mi->using_gtid != Master_info::USE_GTID_SLAVE_POS &&
+ mi->master_supports_gtid)
+ {
+ push_warning_printf(
+ thd, Sql_condition::WARN_LEVEL_NOTE, WARN_OPTION_CHANGING,
+ ER_THD(thd, WARN_OPTION_CHANGING), "RESET SLAVE", "Using_Gtid",
+ mi->using_gtid_astext(mi->using_gtid),
+ mi->using_gtid_astext(Master_info::USE_GTID_SLAVE_POS));
+ }
+
/* Clear master's log coordinates and associated information */
mi->clear_in_memory_info(thd->lex->reset_slave_info.all);
@@ -3816,11 +3826,51 @@ bool change_master(THD* thd, Master_info* mi, bool *master_info_added)
if (lex_mi->use_gtid_opt == LEX_MASTER_INFO::LEX_GTID_SLAVE_POS)
mi->using_gtid= Master_info::USE_GTID_SLAVE_POS;
else if (lex_mi->use_gtid_opt == LEX_MASTER_INFO::LEX_GTID_CURRENT_POS)
+ {
mi->using_gtid= Master_info::USE_GTID_CURRENT_POS;
+ push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN,
+ ER_WARN_DEPRECATED_SYNTAX_NO_REPLACEMENT,
+ ER_THD(thd, ER_WARN_DEPRECATED_SYNTAX),
+ "master_use_gtid=current_pos", "master_demote_to_slave=1");
+ }
else if (lex_mi->use_gtid_opt == LEX_MASTER_INFO::LEX_GTID_NO ||
lex_mi->log_file_name || lex_mi->pos ||
lex_mi->relay_log_name || lex_mi->relay_log_pos)
+ {
+ if (lex_mi->use_gtid_opt != LEX_MASTER_INFO::LEX_GTID_NO)
+ {
+ push_warning_printf(
+ thd, Sql_condition::WARN_LEVEL_NOTE, WARN_OPTION_CHANGING,
+ ER_THD(thd, WARN_OPTION_CHANGING), "CHANGE MASTER TO", "Using_Gtid",
+ mi->using_gtid_astext(mi->using_gtid),
+ mi->using_gtid_astext(Master_info::USE_GTID_NO));
+ }
mi->using_gtid= Master_info::USE_GTID_NO;
+ }
+
+ /*
+ Warn about ignored options if there are GTID/log coordinate option
+ conflicts
+ */
+ if (mi->using_gtid != Master_info::USE_GTID_NO)
+ {
+ if (lex_mi->log_file_name)
+ push_warning_printf(thd, Sql_condition::WARN_LEVEL_NOTE,
+ WARN_OPTION_IGNORED,
+ ER_THD(thd, WARN_OPTION_IGNORED), "MASTER_LOG_FILE");
+ if (lex_mi->pos)
+ push_warning_printf(thd, Sql_condition::WARN_LEVEL_NOTE,
+ WARN_OPTION_IGNORED,
+ ER_THD(thd, WARN_OPTION_IGNORED), "MASTER_LOG_POS");
+ if (lex_mi->relay_log_name)
+ push_warning_printf(thd, Sql_condition::WARN_LEVEL_NOTE,
+ WARN_OPTION_IGNORED,
+ ER_THD(thd, WARN_OPTION_IGNORED), "RELAY_LOG_FILE");
+ if (lex_mi->relay_log_pos)
+ push_warning_printf(thd, Sql_condition::WARN_LEVEL_NOTE,
+ WARN_OPTION_IGNORED,
+ ER_THD(thd, WARN_OPTION_IGNORED), "RELAY_LOG_POS");
+ }
do_ids= ((lex_mi->repl_do_domain_ids_opt ==
LEX_MASTER_INFO::LEX_MI_ENABLE) ?
@@ -3874,6 +3924,40 @@ bool change_master(THD* thd, Master_info* mi, bool *master_info_added)
}
/*
+ MASTER_DEMOTE_TO_SLAVE is set. Merge gtid_binlog_pos into gtid_slave_pos.
+ */
+ if (lex_mi->is_demotion_opt)
+ {
+ String new_gtid_state;
+
+ if (mi->using_gtid != Master_info::USE_GTID_SLAVE_POS)
+ {
+ my_error(ER_CM_OPTION_MISSING_REQUIREMENT, MYF(0),
+ "MASTER_DEMOTE_TO_SLAVE", "TRUE", "Using_Gtid=Slave_Pos");
+ ret= TRUE;
+ goto err;
+ }
+
+ if (!mysql_bin_log.is_open())
+ {
+ my_error(ER_NO_BINARY_LOGGING, MYF(0));
+ ret= TRUE;
+ goto err;
+ }
+
+ if ((ret= rpl_append_gtid_state(&new_gtid_state, true)))
+ goto err;
+
+ if (rpl_global_gtid_slave_state->load(
+ thd, new_gtid_state.ptr(), new_gtid_state.length(), true, true))
+ {
+ my_error(ER_FAILED_GTID_STATE_INIT, MYF(0));
+ ret= TRUE;
+ goto err;
+ }
+ }
+
+ /*
Relay log's IO_CACHE may not be inited, if rli->inited==0 (server was never
a slave before).
*/
diff --git a/sql/sql_select.cc b/sql/sql_select.cc
index beeaf1f689f..09eb0fffa10 100644
--- a/sql/sql_select.cc
+++ b/sql/sql_select.cc
@@ -110,21 +110,22 @@ static ha_rows get_quick_record_count(THD *thd, SQL_SELECT *select,
const key_map *keys,ha_rows limit);
static void optimize_straight_join(JOIN *join, table_map join_tables);
static bool greedy_search(JOIN *join, table_map remaining_tables,
- uint depth, uint prune_level,
- uint use_cond_selectivity);
+ uint depth, uint use_cond_selectivity);
+
enum enum_best_search {
SEARCH_ABORT= -2,
SEARCH_ERROR= -1,
SEARCH_OK= 0,
SEARCH_FOUND_EDGE=1
};
+
static enum_best_search
best_extension_by_limited_search(JOIN *join,
table_map remaining_tables,
uint idx, double record_count,
double read_time, uint depth,
- uint prune_level,
- uint use_cond_selectivity);
+ uint use_cond_selectivity,
+ table_map *processed_eq_ref_tables);
static uint determine_search_depth(JOIN* join);
C_MODE_START
static int join_tab_cmp(const void *dummy, const void* ptr1, const void* ptr2);
@@ -497,6 +498,7 @@ void JOIN::init(THD *thd_arg, List<Item> &fields_arg,
original_join_tab= 0;
explain= NULL;
tmp_table_keep_current_rowid= 0;
+ allowed_top_level_tables= 0;
all_fields= fields_arg;
if (&fields_list != &fields_arg) /* Avoid valgrind-warning */
@@ -2190,6 +2192,9 @@ JOIN::optimize_inner()
thd->restore_active_arena(arena, &backup);
}
+ if (!allowed_top_level_tables)
+ calc_allowed_top_level_tables(select_lex);
+
if (optimize_constant_subqueries())
DBUG_RETURN(1);
@@ -5267,6 +5272,7 @@ make_join_statistics(JOIN *join, List<TABLE_LIST> &tables_list,
int error= 0;
TABLE *UNINIT_VAR(table); /* inited in all loops */
uint i,table_count,const_count,key;
+ uint sort_space;
table_map found_const_table_map, all_table_map;
key_map const_ref, eq_part;
bool has_expensive_keyparts;
@@ -5284,6 +5290,13 @@ make_join_statistics(JOIN *join, List<TABLE_LIST> &tables_list,
table_count=join->table_count;
/*
+ best_extension_by_limited_search need sort space for 2POSITIION
+ objects per remaining table, which gives us
+ 2*(T + T-1 + T-2 + T-3...1 POSITIONS) = 2*(T+1)/2*T = (T*T+T)
+ */
+ join->sort_space= sort_space= (table_count*table_count + table_count);
+
+ /*
best_positions is ok to allocate with alloc() as we copy things to it with
memcpy()
*/
@@ -5294,6 +5307,7 @@ make_join_statistics(JOIN *join, List<TABLE_LIST> &tables_list,
&stat_vector, sizeof(JOIN_TAB*)* (table_count +1),
&table_vector, sizeof(TABLE*)*(table_count*2),
&join->positions, sizeof(POSITION)*(table_count + 1),
+ &join->sort_positions, sizeof(POSITION)*(sort_space),
&join->best_positions,
sizeof(POSITION)*(table_count + 1),
NullS))
@@ -5305,6 +5319,8 @@ make_join_statistics(JOIN *join, List<TABLE_LIST> &tables_list,
/* Initialize POSITION objects */
for (i=0 ; i <= table_count ; i++)
(void) new ((char*) (join->positions + i)) POSITION;
+ for (i=0 ; i < sort_space ; i++)
+ (void) new ((char*) (join->sort_positions + i)) POSITION;
join->best_ref= stat_vector;
@@ -5471,6 +5487,17 @@ make_join_statistics(JOIN *join, List<TABLE_LIST> &tables_list,
}
}
+ {
+ for (JOIN_TAB *s= stat ; s < stat_end ; s++)
+ {
+ TABLE_LIST *tl= s->table->pos_in_table_list;
+ if (tl->embedding && tl->embedding->sj_subq_pred)
+ {
+ s->embedded_dependent= tl->embedding->original_subq_pred_used_tables;
+ }
+ }
+ }
+
if (thd->trace_started())
trace_table_dependencies(thd, stat, join->table_count);
@@ -5488,7 +5515,7 @@ make_join_statistics(JOIN *join, List<TABLE_LIST> &tables_list,
join->unit->item->get_IN_subquery()->test_strategy(SUBS_IN_TO_EXISTS));
if (keyuse_array->elements &&
- sort_and_filter_keyuse(thd, keyuse_array,
+ sort_and_filter_keyuse(join, keyuse_array,
skip_unprefixed_keyparts))
goto error;
DBUG_EXECUTE("opt", print_keyuse_array(keyuse_array););
@@ -7286,6 +7313,32 @@ update_ref_and_keys(THD *thd, DYNAMIC_ARRAY *keyuse,JOIN_TAB *join_tab,
DBUG_RETURN(FALSE);
}
+/*
+ check if key could be used with eq_ref
+
+ The assumption is that all previous key parts where used
+*/
+
+static void remember_if_eq_ref_key(JOIN *join, KEYUSE *use)
+{
+ DBUG_ASSERT(use->keypart != FT_KEYPART && use->key != MAX_KEY);
+ TABLE *table= use->table;
+ KEY *key= table->key_info+use->key;
+ ulong key_flags= table->actual_key_flags(key);
+
+ /*
+ Check if possible eq_ref key
+ This may include keys that does not have HA_NULL_PART_KEY
+ set, but this is ok as best_access_path will resolve this.
+ */
+ if ((key_flags & (HA_NOSAME | HA_EXT_NOSAME)))
+ {
+ uint key_parts= table->actual_n_key_parts(key);
+ if (use->keypart+1 == key_parts)
+ join->eq_ref_tables|= table->map;
+ }
+}
+
/**
Sort the array of possible keys and remove the following key parts:
@@ -7296,14 +7349,19 @@ update_ref_and_keys(THD *thd, DYNAMIC_ARRAY *keyuse,JOIN_TAB *join_tab,
(e.g. if there is a key(a,b,c) but only b < 5 (or a=2 and c < 3) is
used in the query, we drop the partial key parts from consideration).
Special treatment for ft-keys.
+ Update join->eq_ref_tables with a bitmap of all tables that can possible
+ have a EQ_REF key.
*/
-bool sort_and_filter_keyuse(THD *thd, DYNAMIC_ARRAY *keyuse,
+bool sort_and_filter_keyuse(JOIN *join, DYNAMIC_ARRAY *keyuse,
bool skip_unprefixed_keyparts)
{
+ THD *thd= join->thd;
KEYUSE key_end, *prev, *save_pos, *use;
uint found_eq_constant, i;
+ bool found_unprefixed_key_part= 0;
+ join->eq_ref_tables= 0;
DBUG_ASSERT(keyuse->elements);
my_qsort(keyuse->buffer, keyuse->elements, sizeof(KEYUSE),
@@ -7331,18 +7389,45 @@ bool sort_and_filter_keyuse(THD *thd, DYNAMIC_ARRAY *keyuse,
{
if (use->key == prev->key && use->table == prev->table)
{
- if ((prev->keypart+1 < use->keypart && skip_unprefixed_keyparts) ||
- (prev->keypart == use->keypart && found_eq_constant))
- continue; /* remove */
+ if (prev->keypart == use->keypart && found_eq_constant)
+ continue;
+ if (prev->keypart+1 < use->keypart)
+ {
+ found_unprefixed_key_part= 1;
+ if (skip_unprefixed_keyparts)
+ continue; /* remove */
+ }
+ }
+ else
+ {
+ /* Key changed, check if previous key was a primary/unique key lookup */
+ if (prev != &key_end && !found_unprefixed_key_part)
+ remember_if_eq_ref_key(join, prev);
+ found_unprefixed_key_part= 0;
+ if (use->keypart != 0)
+ {
+ found_unprefixed_key_part= 1;
+ if (skip_unprefixed_keyparts)
+ continue; /* remove - first found key part must be 0 */
+ }
}
- else if (use->keypart != 0 && skip_unprefixed_keyparts)
- continue; /* remove - first found must be 0 */
}
-
+ else /* FT_KEY_PART */
+ {
+ if (prev != &key_end && !found_unprefixed_key_part)
+ remember_if_eq_ref_key(join, prev);
+ found_unprefixed_key_part= 1; // This key cannot be EQ_REF
+ }
prev= use;
found_eq_constant= !use->used_tables;
use->table->reginfo.join_tab->checked_keys.set_bit(use->key);
}
+ else
+ {
+ if (prev != &key_end && !found_unprefixed_key_part)
+ remember_if_eq_ref_key(join, prev);
+ prev= &key_end;
+ }
/*
Old gcc used a memcpy(), which is undefined if save_pos==use:
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19410
@@ -7356,6 +7441,8 @@ bool sort_and_filter_keyuse(THD *thd, DYNAMIC_ARRAY *keyuse,
use->table->reginfo.join_tab->keyuse= save_pos;
save_pos++;
}
+ if (prev != &key_end && !found_unprefixed_key_part)
+ remember_if_eq_ref_key(join, prev);
i= (uint) (save_pos-(KEYUSE*) keyuse->buffer);
(void) set_dynamic(keyuse,(uchar*) &key_end,i);
keyuse->elements= i;
@@ -7914,6 +8001,8 @@ best_access_path(JOIN *join,
Json_writer_object trace_wrapper(thd, "best_access_path");
+ trace_wrapper.add_table_name(s);
+
bitmap_clear_all(eq_join_set);
loose_scan_opt.init(join, s, remaining_tables);
@@ -8081,7 +8170,8 @@ best_access_path(JOIN *join,
(!(key_flags & HA_NULL_PART_KEY) || // (2)
all_key_parts == notnull_part)) // (3)
{
-
+ /* Check that eq_ref_tables are correctly updated */
+ DBUG_ASSERT(join->eq_ref_tables & table->map);
/* TODO: Adjust cost for covering and clustering key */
type= JT_EQ_REF;
trace_access_idx.add("access_type", join_type_str[type])
@@ -8511,10 +8601,13 @@ best_access_path(JOIN *join,
*/
if (s->key_start_dependent)
key_dependent= s->key_dependent;
+ /* Add dependencey for sub queries */
+ key_dependent|= s->embedded_dependent;
}
/* Check that s->key_dependent contains all used_tables found in s->keyuse */
key_dependent&= ~PSEUDO_TABLE_BITS;
- DBUG_ASSERT((key_dependent & s->key_dependent) == key_dependent);
+ DBUG_ASSERT((key_dependent & (s->key_dependent | s->embedded_dependent)) ==
+ key_dependent);
/*
If there is no key to access the table, but there is an equi-join
@@ -8987,7 +9080,6 @@ bool
choose_plan(JOIN *join, table_map join_tables)
{
uint search_depth= join->thd->variables.optimizer_search_depth;
- uint prune_level= join->thd->variables.optimizer_prune_level;
uint use_cond_selectivity=
join->thd->variables.optimizer_use_condition_selectivity;
bool straight_join= MY_TEST(join->select_options & SELECT_STRAIGHT_JOIN);
@@ -8995,6 +9087,9 @@ choose_plan(JOIN *join, table_map join_tables)
DBUG_ENTER("choose_plan");
join->cur_embedding_map= 0;
+ join->extra_heuristic_pruning= false;
+ join->prune_level= join->thd->variables.optimizer_prune_level;
+
reset_nj_counters(join, join->join_list);
qsort2_cmp jtab_sort_func;
@@ -9051,8 +9146,14 @@ choose_plan(JOIN *join, table_map join_tables)
if (search_depth == 0)
/* Automatically determine a reasonable value for 'search_depth' */
search_depth= determine_search_depth(join);
- if (greedy_search(join, join_tables, search_depth, prune_level,
- use_cond_selectivity))
+
+ if (join->prune_level >= 1 &&
+ search_depth >= thd->variables.optimizer_extra_pruning_depth)
+ {
+ join->extra_heuristic_pruning= true;
+ }
+
+ if (greedy_search(join, join_tables, search_depth, use_cond_selectivity))
DBUG_RETURN(TRUE);
}
@@ -9164,14 +9265,9 @@ join_tab_cmp(const void *dummy, const void* ptr1, const void* ptr2)
if ((cmp= compare_embedding_subqueries(jt1, jt2)) != 0)
return cmp;
/*
- After that,
- take care about ordering imposed by LEFT JOIN constraints,
- possible [eq]ref accesses, and numbers of matching records in the table.
+ After that do ordering according to numbers of
+ records in the table.
*/
- if (jt1->dependent & jt2->table->map)
- return 1;
- if (jt2->dependent & jt1->table->map)
- return -1;
if (jt1->found_records > jt2->found_records)
return 1;
if (jt1->found_records < jt2->found_records)
@@ -9202,10 +9298,15 @@ join_tab_cmp_straight(const void *dummy, const void* ptr1, const void* ptr2)
if ((cmp= compare_embedding_subqueries(jt1, jt2)) != 0)
return cmp;
+ /*
+ We have to check dependency with straight_join as we don't reorder
+ later as we do for other plans in best_extension_by_limited_search().
+ */
if (jt1->dependent & jt2->table->map)
return 1;
if (jt2->dependent & jt1->table->map)
return -1;
+
return jt1 > jt2 ? 1 : (jt1 < jt2 ? -1 : 0);
}
@@ -9227,11 +9328,6 @@ join_tab_cmp_embedded_first(const void *emb, const void* ptr1, const void* ptr2
if (jt1->emb_sj_nest != emb_nest && jt2->emb_sj_nest == emb_nest)
return 1;
- if (jt1->dependent & jt2->table->map)
- return 1;
- if (jt2->dependent & jt1->table->map)
- return -1;
-
if (jt1->found_records > jt2->found_records)
return 1;
if (jt1->found_records < jt2->found_records)
@@ -9304,9 +9400,9 @@ determine_search_depth(JOIN *join)
access method. The final optimal plan is stored in the array
'join->best_positions', and the corresponding cost in 'join->best_read'.
- @param join pointer to the structure providing all context info for
- the query
- @param join_tables set of the tables in the query
+ @param join pointer to the structure providing all context info
+ for the query
+ @param remaining_tables set of the tables in the query
@note
This function can be applied to:
@@ -9335,10 +9431,7 @@ optimize_straight_join(JOIN *join, table_map remaining_tables)
POSITION *position= join->positions + idx;
Json_writer_object trace_one_table(thd);
if (unlikely(thd->trace_started()))
- {
trace_plan_prefix(join, idx, remaining_tables);
- trace_one_table.add_table_name(s);
- }
/* Find the best access method from 's' to the current partial plan */
best_access_path(join, s, remaining_tables, join->positions, idx,
disable_jbuf, record_count,
@@ -9375,7 +9468,7 @@ optimize_straight_join(JOIN *join, table_map remaining_tables)
memcpy((uchar*) join->best_positions, (uchar*) join->positions,
sizeof(POSITION)*idx);
join->join_record_count= record_count;
- join->best_read= read_time - 0.001;
+ join->best_read= read_time - COST_EPS;
}
@@ -9451,8 +9544,6 @@ optimize_straight_join(JOIN *join, table_map remaining_tables)
for the query
@param remaining_tables set of tables not included into the partial plan yet
@param search_depth controlls the exhaustiveness of the search
- @param prune_level the pruning heuristics that should be applied during
- search
@param use_cond_selectivity specifies how the selectivity of the conditions
pushed to a table should be taken into account
@@ -9466,7 +9557,6 @@ static bool
greedy_search(JOIN *join,
table_map remaining_tables,
uint search_depth,
- uint prune_level,
uint use_cond_selectivity)
{
double record_count= 1.0;
@@ -9474,6 +9564,7 @@ greedy_search(JOIN *join,
uint idx= join->const_tables; // index into 'join->best_ref'
uint best_idx;
uint size_remain; // cardinality of remaining_tables
+ table_map usable_tables, eq_ref_tables;
POSITION best_pos;
JOIN_TAB *best_table; // the next plan node to be added to the curr QEP
// ==join->tables or # tables in the sj-mat nest we're optimizing
@@ -9481,21 +9572,26 @@ greedy_search(JOIN *join,
DBUG_ENTER("greedy_search");
/* number of tables that remain to be optimized */
- n_tables= size_remain= my_count_bits(remaining_tables &
- (join->emb_sjm_nest?
- (join->emb_sjm_nest->sj_inner_tables &
- ~join->const_table_map)
- :
- ~(table_map)0));
+ usable_tables= (join->emb_sjm_nest ?
+ (join->emb_sjm_nest->sj_inner_tables &
+ ~join->const_table_map & remaining_tables):
+ remaining_tables);
+ n_tables= size_remain= my_count_bits(usable_tables);
+ join->next_sort_position= join->sort_positions;
do {
- /* Find the extension of the current QEP with the lowest cost */
+ /*
+ Find the extension of the current QEP with the lowest cost
+ We are using remaining_table instead of usable tables here as
+ in case of an emb_sjm_nest, we want to be able to check if
+ an embedded table is depending on an outer table.
+ */
join->best_read= DBL_MAX;
if ((int) best_extension_by_limited_search(join, remaining_tables, idx,
record_count,
read_time, search_depth,
- prune_level,
- use_cond_selectivity) <
+ use_cond_selectivity,
+ &eq_ref_tables) <
(int) SEARCH_OK)
DBUG_RETURN(TRUE);
/*
@@ -9552,13 +9648,13 @@ greedy_search(JOIN *join,
while (pos && best_table != pos)
pos= join->best_ref[++best_idx];
DBUG_ASSERT((pos != NULL)); // should always find 'best_table'
+
/*
- move 'best_table' at the first free position in the array of joins,
- keeping the sorted table order intact
+ Move 'best_table' at the first free position in the array of joins
+ We don't need to keep the array sorted as
+ best_extension_by_limited_search() will sort them.
*/
- memmove(join->best_ref + idx + 1, join->best_ref + idx,
- sizeof(JOIN_TAB*) * (best_idx - idx));
- join->best_ref[idx]= best_table;
+ swap_variables(JOIN_TAB*, join->best_ref[idx], join->best_ref[best_idx]);
/* compute the cost of the new plan extended with 'best_table' */
record_count= COST_MULT(record_count, join->positions[idx].records_read);
@@ -10163,6 +10259,129 @@ check_if_edge_table(POSITION *pos,
}
+struct SORT_POSITION
+{
+ JOIN_TAB **join_tab;
+ POSITION *position;
+};
+
+
+/*
+ Sort SORT_POSITIONS according to expected number of rows found
+ If number of combinations are the same sort according to join_tab order
+ (same table order as used in the original SQL query)
+*/
+
+static int
+sort_positions(SORT_POSITION *a, SORT_POSITION *b)
+{
+ int cmp;
+ if ((cmp= compare_embedding_subqueries(*a->join_tab, *b->join_tab)) != 0)
+ return cmp;
+
+ if (a->position->records_read > b->position->records_read)
+ return 1;
+ if (a->position->records_read < b->position->records_read)
+ return -1;
+ return CMP_NUM(*a->join_tab, *b->join_tab);
+}
+
+
+/*
+ Call best_access_path() for a set of tables and collect results
+
+ @param join JOIN object
+ @param trace_one_table Current optimizer_trace
+ @param pos Pointer to remanining tables
+ @param allowed_tables bitmap of allowed tables. On return set to
+ the collected tables.
+ @param store_poisition Points to where to store next found SORT_POSITION.
+ Will be updated to next free position.
+ @param stop_on_eq_ref Stop searching for more tables if we found an EQ_REF
+ table.
+
+ @return
+ 0 Normal
+ 1 Eq_ref table found (only if stop_on_eq_ref is used)
+
+ join->next_sort_position will be update to next free position.
+*/
+
+static bool
+get_costs_for_tables(JOIN *join, table_map remaining_tables, uint idx,
+ double record_count,
+ Json_writer_object *trace_one_table,
+ JOIN_TAB **pos, SORT_POSITION **store_position,
+ table_map *allowed_tables,
+ bool stop_on_eq_ref)
+{
+ THD *thd= join->thd;
+ POSITION *sort_position= join->next_sort_position;
+ SORT_POSITION *sort_end= *store_position;
+ JOIN_TAB *s;
+ table_map found_tables= 0;
+ bool found_eq_ref= 0;
+ bool disable_jbuf= join->thd->variables.join_cache_level == 0;
+ DBUG_ENTER("get_plans_for_tables");
+
+ s= *pos;
+ do
+ {
+ table_map real_table_bit= s->table->map;
+ if ((*allowed_tables & real_table_bit) &&
+ !(remaining_tables & s->dependent))
+ {
+#ifdef DBUG_ASSERT_EXISTS
+ DBUG_ASSERT(!check_interleaving_with_nj(s));
+ restore_prev_nj_state(s); // Revert effect of check_... call
+#endif
+ sort_end->join_tab= pos;
+ sort_end->position= sort_position;
+
+
+ Json_writer_object wrapper(thd);
+ /* Find the best access method from 's' to the current partial plan */
+ best_access_path(join, s, remaining_tables, join->positions, idx,
+ disable_jbuf, record_count,
+ sort_position, sort_position + 1);
+ found_tables|= s->table->map;
+ sort_end++;
+ sort_position+= 2;
+ if (unlikely(stop_on_eq_ref) && sort_position[-2].type == JT_EQ_REF)
+ {
+ /* Found an eq_ref tables. Use this, ignoring the other tables */
+ found_eq_ref= 1;
+ if (found_tables == s->table->map)
+ break; // First table
+
+ /* Store the found eq_ref table first in store_position */
+ sort_position-= 2;
+ *allowed_tables= s->table->map;
+ (*store_position)->join_tab= pos;
+ (*store_position)->position= sort_position;
+ (*store_position)++;
+ join->next_sort_position[0]= sort_position[0];
+ join->next_sort_position[1]= sort_position[1];
+ join->next_sort_position+= 2;
+ DBUG_RETURN(1);
+ }
+ }
+ else
+ {
+ /* Verify that 'allowed_current_tables' was calculated correctly */
+ DBUG_ASSERT((remaining_tables & s->dependent) ||
+ !(remaining_tables & real_table_bit) ||
+ !(*allowed_tables & real_table_bit) ||
+ check_interleaving_with_nj(s));
+ }
+ } while ((s= *++pos));
+
+ *allowed_tables= found_tables;
+ *store_position= sort_end;
+ join->next_sort_position= sort_position;
+ DBUG_RETURN(found_eq_ref);
+}
+
/**
Find a good, possibly optimal, query execution plan (QEP) by a possibly
exhaustive search.
@@ -10250,8 +10469,7 @@ check_if_edge_table(POSITION *pos,
When 'best_extension_by_limited_search' is called for the first time,
'join->best_read' must be set to the largest possible value (e.g. DBL_MAX).
The actual implementation provides a way to optionally use pruning
- heuristic (controlled by the parameter 'prune_level') to reduce the search
- space by skipping some partial plans.
+ heuristic to reduce the search space by skipping some partial plans.
@note
The parameter 'search_depth' provides control over the recursion
@@ -10270,8 +10488,6 @@ check_if_edge_table(POSITION *pos,
@param search_depth maximum depth of the recursion and thus size of the
found optimal plan
(0 < search_depth <= join->tables+1).
- @param prune_level pruning heuristics that should be applied during
- optimization
(values: 0 = EXHAUSTIVE, 1 = PRUNE_BY_TIME_OR_ROWS)
@param use_cond_selectivity specifies how the selectivity of the conditions
pushed to a table should be taken into account
@@ -10294,22 +10510,27 @@ best_extension_by_limited_search(JOIN *join,
double record_count,
double read_time,
uint search_depth,
- uint prune_level,
- uint use_cond_selectivity)
+ uint use_cond_selectivity,
+ table_map *processed_eq_ref_tables)
{
THD *thd= join->thd;
/*
'join' is a partial plan with lower cost than the best plan so far,
so continue expanding it further with the tables in 'remaining_tables'.
*/
- JOIN_TAB *s, **pos;
+ JOIN_TAB *s;
double best_record_count= DBL_MAX;
double best_read_time= DBL_MAX;
- bool disable_jbuf= join->thd->variables.join_cache_level == 0;
enum_best_search best_res;
+ uint tables_left= join->table_count - idx, found_tables;
+ uint accepted_tables __attribute__((unused));
+ table_map found_eq_ref_tables= 0, used_eq_ref_table= 0;
+ table_map allowed_tables, allowed_current_tables;
+ SORT_POSITION *sort= (SORT_POSITION*) alloca(sizeof(SORT_POSITION)*tables_left);
+ SORT_POSITION *sort_end;
DBUG_ENTER("best_extension_by_limited_search");
- DBUG_EXECUTE_IF("show_explain_probe_best_ext_lim_search",
+ DBUG_EXECUTE_IF("show_explain_probe_best_ext_lim_search",
if (dbug_user_var_equals_int(thd,
"show_explain_probe_select_id",
join->select_lex->select_number))
@@ -10321,30 +10542,98 @@ best_extension_by_limited_search(JOIN *join,
DBUG_EXECUTE("opt", print_plan(join, idx, record_count, read_time, read_time,
"part_plan"););
+ status_var_increment(thd->status_var.optimizer_join_prefixes_check_calls);
- /*
- If we are searching for the execution plan of a materialized semi-join nest
- then allowed_tables contains bits only for the tables from this nest.
- */
- table_map allowed_tables= ~(table_map)0;
if (join->emb_sjm_nest)
- allowed_tables= join->emb_sjm_nest->sj_inner_tables & ~join->const_table_map;
+ {
+ /*
+ If we are searching for the execution plan of a materialized semi-join nest
+ then allowed_tables contains bits only for the tables from this nest.
+ */
+ allowed_tables= (join->emb_sjm_nest->sj_inner_tables & remaining_tables);
+ allowed_current_tables= join->get_allowed_nj_tables(idx) & remaining_tables;
+ }
+ else
+ {
+ /*
+ allowed_tables is used to check if there are tables left that can improve
+ a key search and to see if there are more tables to add in next iteration.
- for (pos= join->best_ref + idx ; (s= *pos) ; pos++)
+ allowed_current_tables tells us which tables we can add to the current
+ plan at this stage.
+ */
+ allowed_tables= remaining_tables;
+ allowed_current_tables= join->get_allowed_nj_tables(idx) & remaining_tables;
+ }
+ DBUG_ASSERT(allowed_tables & remaining_tables);
+
+ sort_end= sort;
{
- table_map real_table_bit= s->table->map;
- DBUG_ASSERT(remaining_tables & real_table_bit);
+ Json_writer_object trace_one_table(thd);
+ JOIN_TAB **best_ref= join->best_ref + idx;
+ if (unlikely(thd->trace_started()))
+ trace_plan_prefix(join, idx, remaining_tables);
- swap_variables(JOIN_TAB*, join->best_ref[idx], *pos);
+ Json_writer_array arr(thd, "get_costs_for_tables");
+
+ if (idx > join->const_tables && join->prune_level >= 2 &&
+ join->positions[idx-1].type == JT_EQ_REF &&
+ (join->eq_ref_tables & allowed_current_tables))
+ {
+ /* Previous table was an EQ REF table, only add other possible EQ_REF
+ tables to the chain, stop after first one is found.
+ */
+ table_map table_map= join->eq_ref_tables & allowed_current_tables;
+ if (get_costs_for_tables(join, remaining_tables, idx, record_count,
+ &trace_one_table, best_ref, &sort_end,
+ &table_map, 1))
+ used_eq_ref_table= (*sort->join_tab)->table->map;
+ else
+ {
+ /* We didn't find another EQ_REF table, add remaining tables */
+ if ((table_map= allowed_current_tables & ~table_map))
+ get_costs_for_tables(join, remaining_tables, idx, record_count,
+ &trace_one_table, best_ref, &sort_end, &table_map,
+ 0);
+ }
+ }
+ else
+ {
+ table_map table_map= allowed_current_tables;
+ get_costs_for_tables(join, remaining_tables, idx, record_count,
+ &trace_one_table, best_ref, &sort_end, &table_map,
+ 0);
+ }
+ found_tables= (uint) (sort_end - sort);
+ DBUG_ASSERT(found_tables > 0);
+
+ /*
+ Sort tables in ascending order of generated row combinations
+ */
+ if (found_tables > 1)
+ my_qsort(sort, found_tables, sizeof(SORT_POSITION),
+ (qsort_cmp) sort_positions);
+ }
+ DBUG_ASSERT(join->next_sort_position <=
+ join->sort_positions + join->sort_space);
- if ((allowed_tables & real_table_bit) &&
- !(remaining_tables & s->dependent) &&
+ accepted_tables= 0;
+ double min_rec_count= DBL_MAX;
+ double min_rec_count_read_time= DBL_MAX;
+
+ double min_cost= DBL_MAX;
+ double min_cost_record_count= DBL_MAX;
+
+ for (SORT_POSITION *pos= sort ; pos < sort_end ; pos++)
+ {
+ s= *pos->join_tab;
+ if (!(found_eq_ref_tables & s->table->map) &&
!check_interleaving_with_nj(s))
{
+ table_map real_table_bit= s->table->map;
double current_record_count, current_read_time;
double partial_join_cardinality;
- POSITION *position= join->positions + idx;
- POSITION loose_scan_pos;
+ POSITION *position= join->positions + idx, *loose_scan_pos;
Json_writer_object trace_one_table(thd);
if (unlikely(thd->trace_started()))
@@ -10353,9 +10642,9 @@ best_extension_by_limited_search(JOIN *join,
trace_one_table.add_table_name(s);
}
- /* Find the best access method from 's' to the current partial plan */
- best_access_path(join, s, remaining_tables, join->positions, idx,
- disable_jbuf, record_count, position, &loose_scan_pos);
+ accepted_tables++;
+ *position= *pos->position; // Get stored result
+ loose_scan_pos= pos->position+1;
/* Compute the cost of the new plan extended with 's' */
current_record_count= COST_MULT(record_count, position->records_read);
@@ -10374,7 +10663,7 @@ best_extension_by_limited_search(JOIN *join,
trace_one_table.add("cost_for_plan", current_read_time);
}
optimize_semi_joins(join, remaining_tables, idx, &current_record_count,
- &current_read_time, &loose_scan_pos);
+ &current_read_time, loose_scan_pos);
/* Expand only partial plans with lower cost than the best QEP so far */
if (current_read_time >= join->best_read)
@@ -10384,7 +10673,11 @@ best_extension_by_limited_search(JOIN *join,
read_time,
current_read_time,
"prune_by_cost"););
- trace_one_table.add("pruned_by_cost", true);
+ trace_one_table
+ .add("pruned_by_cost", true)
+ .add("current_cost", current_read_time)
+ .add("best_cost", join->best_read + COST_EPS);
+
restore_prev_nj_state(s);
restore_prev_sj_state(remaining_tables, s, idx);
continue;
@@ -10394,8 +10687,31 @@ best_extension_by_limited_search(JOIN *join,
Prune some less promising partial plans. This heuristic may miss
the optimal QEPs, thus it results in a non-exhaustive search.
*/
- if (prune_level == 1)
+ if (join->prune_level >= 1)
{
+ // Collect the members with min_cost and min_read_time.
+ bool min_rec_hit= false;
+ bool min_cost_hit= false;
+
+ if (join->extra_heuristic_pruning &&
+ (!(position->key_dependent & allowed_tables) ||
+ position->records_read < 2.0))
+ {
+ if (current_record_count < min_rec_count)
+ {
+ min_rec_count= current_record_count;
+ min_rec_count_read_time= current_read_time;
+ min_rec_hit= true;
+ }
+
+ if (current_read_time < min_cost)
+ {
+ min_cost_record_count= current_record_count;
+ min_cost= current_read_time;
+ min_cost_hit= true;
+ }
+ }
+
if (best_record_count > current_record_count ||
best_read_time > current_read_time ||
(idx == join->const_tables && // 's' is the first table in the QEP
@@ -10420,6 +10736,13 @@ best_extension_by_limited_search(JOIN *join,
}
else
{
+ /*
+ Typically, we get here if:
+ best_record_count < current_record_count &&
+ best_read_time < current_read_time
+ That is, both record_count and read_time are worse than the best_
+ ones. This plan doesn't look promising, prune it away.
+ */
DBUG_EXECUTE("opt", print_plan(join, idx+1,
current_record_count,
read_time,
@@ -10430,6 +10753,25 @@ best_extension_by_limited_search(JOIN *join,
restore_prev_sj_state(remaining_tables, s, idx);
continue;
}
+
+ const char* prune_reason= NULL;
+ if (!min_rec_hit &&
+ current_record_count >= min_rec_count &&
+ current_read_time >= min_rec_count_read_time)
+ prune_reason= "min_record_count";
+
+ if (!min_cost_hit &&
+ current_record_count >= min_cost_record_count &&
+ current_read_time >= min_cost)
+ prune_reason= "min_read_time";
+
+ if (prune_reason)
+ {
+ trace_one_table.add("pruned_by_heuristic", prune_reason);
+ restore_prev_nj_state(s);
+ restore_prev_sj_state(remaining_tables, s, idx);
+ continue;
+ }
}
double pushdown_cond_selectivity= 1.0;
@@ -10459,6 +10801,8 @@ best_extension_by_limited_search(JOIN *join,
{
/* Recursively expand the current partial plan */
Json_writer_array trace_rest(thd, "rest_of_plan");
+
+ swap_variables(JOIN_TAB*, join->best_ref[idx], *pos->join_tab);
best_res=
best_extension_by_limited_search(join,
remaining_tables &
@@ -10467,8 +10811,10 @@ best_extension_by_limited_search(JOIN *join,
partial_join_cardinality,
current_read_time,
search_depth - 1,
- prune_level,
- use_cond_selectivity);
+ use_cond_selectivity,
+ &found_eq_ref_tables);
+ swap_variables(JOIN_TAB*, join->best_ref[idx], *pos->join_tab);
+
if ((int) best_res < (int) SEARCH_OK)
goto end; // Return best_res
if (best_res == SEARCH_FOUND_EDGE &&
@@ -10500,7 +10846,7 @@ best_extension_by_limited_search(JOIN *join,
memcpy((uchar*) join->best_positions, (uchar*) join->positions,
sizeof(POSITION) * (idx + 1));
join->join_record_count= partial_join_cardinality;
- join->best_read= current_read_time - 0.001;
+ join->best_read= current_read_time - COST_EPS;
}
DBUG_EXECUTE("opt", print_plan(join, idx+1,
current_record_count,
@@ -10514,27 +10860,21 @@ best_extension_by_limited_search(JOIN *join,
restore_prev_sj_state(remaining_tables, s, idx);
if (best_res == SEARCH_FOUND_EDGE)
{
- trace_one_table.add("pruned_by_hanging_leaf", true);
+ if (pos+1 < sort_end) // If not last table
+ trace_one_table.add("pruned_by_hanging_leaf", true);
goto end;
}
}
}
+ DBUG_ASSERT(accepted_tables > 0);
best_res= SEARCH_OK;
end:
- /* Restore original table order */
- if (!*pos)
- pos--; // Revert last pos++ in for loop
- if (pos != join->best_ref + idx)
- {
- JOIN_TAB *tmp= join->best_ref[idx];
- uint elements= (uint) (pos - (join->best_ref + idx));
-
- memmove((void*) (join->best_ref + idx),
- (void*) (join->best_ref + idx + 1),
- elements * sizeof(JOIN_TAB*));
- *pos= tmp;
- }
+ join->next_sort_position-= found_tables*2;
+ if (used_eq_ref_table)
+ *processed_eq_ref_tables|= used_eq_ref_table | found_eq_ref_tables;
+ else
+ *processed_eq_ref_tables= 0;
DBUG_RETURN(best_res);
}
@@ -17861,6 +18201,116 @@ static void restore_prev_nj_state(JOIN_TAB *last)
}
+/*
+ Compute allowed_top_level_tables - a bitmap of tables one can put into the
+ join order if the last table in the join prefix is not inside any outer
+ join nest.
+
+ NESTED_JOIN::direct_children_map - a bitmap of tables ... if the last
+ table in the join prefix is inside the join nest.
+
+ Note: it looks like a sensible way to do this is a top-down descent on
+ JOIN::join_list, but apparently that list is missing I_S tables.
+ e.g. for SHOW TABLES WHERE col IN (SELECT ...) it will just have a
+ semi-join nest.
+*/
+
+void JOIN::calc_allowed_top_level_tables(SELECT_LEX *lex)
+{
+ TABLE_LIST *tl;
+ List_iterator<TABLE_LIST> ti(lex->leaf_tables);
+ DBUG_ENTER("JOIN::calc_allowed_top_level_tables");
+ DBUG_ASSERT(allowed_top_level_tables == 0); // Should only be called once
+
+ while ((tl= ti++))
+ {
+ table_map map;
+ TABLE_LIST *embedding= tl->embedding;
+
+ if (tl->table)
+ map= tl->table->map;
+ else
+ {
+ DBUG_ASSERT(tl->jtbm_subselect);
+ map= table_map(1) << tl->jtbm_table_no;
+ }
+
+ if (!(embedding= tl->embedding))
+ {
+ allowed_top_level_tables |= map;
+ continue;
+ }
+
+ // Walk out of any semi-join nests
+ while (embedding && !embedding->on_expr)
+ {
+ // semi-join nest or an INSERT-INTO view...
+ embedding->nested_join->direct_children_map |= map;
+ embedding= embedding->embedding;
+ }
+
+ // Ok we are in the parent nested outer join nest.
+ if (!embedding)
+ {
+ allowed_top_level_tables |= map;
+ continue;
+ }
+ embedding->nested_join->direct_children_map |= map;
+
+ // Walk to grand-parent join nest.
+ embedding= embedding->embedding;
+
+ // Walk out of any semi-join nests
+ while (embedding && !embedding->on_expr)
+ {
+ DBUG_ASSERT(embedding->sj_on_expr);
+ embedding->nested_join->direct_children_map |= map;
+ embedding= embedding->embedding;
+ }
+
+ if (embedding)
+ {
+ DBUG_ASSERT(embedding->on_expr); // Impossible, see above
+ embedding->nested_join->direct_children_map |= map;
+ }
+ else
+ allowed_top_level_tables |= map;
+ }
+ DBUG_VOID_RETURN;
+}
+
+
+/*
+ Get the tables that one is allowed to have as the next table in the
+ current plan
+*/
+
+table_map JOIN::get_allowed_nj_tables(uint idx)
+{
+ TABLE_LIST *last_emb;
+ if (idx > const_tables &&
+ (last_emb= positions[idx-1].table->table->pos_in_table_list->embedding))
+ {
+ for (;last_emb && last_emb != emb_sjm_nest;
+ last_emb= last_emb->embedding)
+ {
+ if (!last_emb->sj_on_expr)
+ {
+ NESTED_JOIN *nest= last_emb->nested_join;
+ if (!nest->is_fully_covered())
+ {
+ // Return tables that are direct members of this join nest
+ return nest->direct_children_map;
+ }
+ }
+ }
+ }
+ // Return bitmap of tables not in any join nest
+ if (emb_sjm_nest)
+ return emb_sjm_nest->nested_join->direct_children_map;
+ return allowed_top_level_tables;
+}
+
/*
Change access methods not to use join buffering and adjust costs accordingly
@@ -17903,7 +18353,7 @@ void optimize_wo_join_buffering(JOIN *join, uint first_tab, uint last_tab,
if (first_tab > join->const_tables)
{
- cost= join->positions[first_tab - 1].prefix_cost.total_cost();
+ cost= join->positions[first_tab - 1].prefix_cost;
rec_count= join->positions[first_tab - 1].prefix_record_count;
}
else
@@ -29570,7 +30020,7 @@ JOIN::reoptimize(Item *added_where, table_map join_tables,
/* added_keyuse contents is copied, and it is no longer needed. */
delete_dynamic(&added_keyuse);
- if (sort_and_filter_keyuse(thd, &keyuse, true))
+ if (sort_and_filter_keyuse(this, &keyuse, true))
return REOPT_ERROR;
optimize_keyuse(this, &keyuse);
diff --git a/sql/sql_select.h b/sql/sql_select.h
index d5ca921d8d5..b17f51cf1d8 100644
--- a/sql/sql_select.h
+++ b/sql/sql_select.h
@@ -361,6 +361,13 @@ typedef struct st_join_table {
table_map dependent,key_dependent;
/*
+ This is set for embedded sub queries. It contains the table map of
+ the outer expression, like 'A' in the following expression:
+ WHERE A in (SELECT ....)
+ */
+ table_map embedded_dependent;
+
+ /*
1 - use quick select
2 - use "Range checked for each record"
*/
@@ -960,6 +967,9 @@ public:
double prefix_record_count;
+ /* Cost for the join prefix */
+ double prefix_cost;
+
/*
NULL - 'index' or 'range' or 'index_merge' or 'ALL' access is used.
Other - [eq_]ref[_or_null] access is used. Pointer to {t.keypart1 = expr}
@@ -1003,9 +1013,6 @@ public:
LooseScan_picker loosescan_picker;
Sj_materialization_picker sjmat_picker;
- /* Cumulative cost and record count for the join prefix */
- Cost_estimate prefix_cost;
-
/*
Current optimization state: Semi-join strategy to be used for this
and preceding join tables.
@@ -1283,6 +1290,10 @@ public:
table_map select_list_used_tables;
/* Tables that has HA_NON_COMPARABLE_ROWID (does not support rowid) set */
table_map not_usable_rowid_map;
+ /* Tables that have a possiblity to use EQ_ref */
+ table_map eq_ref_tables;
+
+ table_map allowed_top_level_tables;
ha_rows send_records,found_records,join_examined_rows, accepted_rows;
/*
@@ -1315,9 +1326,12 @@ public:
/* Finally picked QEP. This is result of join optimization */
POSITION *best_positions;
+ POSITION *sort_positions; /* Temporary space used by greedy_search */
+ POSITION *next_sort_position; /* Next free space in sort_positions */
Pushdown_query *pushdown_query;
JOIN_TAB *original_join_tab;
+ uint sort_space;
/******* Join optimization state members start *******/
/*
@@ -1344,6 +1358,13 @@ public:
*/
table_map cur_sj_inner_tables;
+ /* A copy of thd->variables.optimizer_prune_level */
+ uint prune_level;
+ /*
+ If true, do extra heuristic pruning (enabled based on
+ optimizer_extra_pruning_depth)
+ */
+ bool extra_heuristic_pruning;
#ifndef DBUG_OFF
void dbug_verify_sj_inner_tables(uint n_positions) const;
int dbug_join_tab_array_size;
@@ -1798,6 +1819,8 @@ public:
bool transform_in_predicates_into_in_subq(THD *thd);
bool optimize_upper_rownum_func();
+ void calc_allowed_top_level_tables(SELECT_LEX *lex);
+ table_map get_allowed_nj_tables(uint idx);
private:
/**
@@ -2463,7 +2486,7 @@ void fix_list_after_tbl_changes(SELECT_LEX *new_parent, List<TABLE_LIST> *tlist)
double get_tmp_table_lookup_cost(THD *thd, double row_count, uint row_size);
double get_tmp_table_write_cost(THD *thd, double row_count, uint row_size);
void optimize_keyuse(JOIN *join, DYNAMIC_ARRAY *keyuse_array);
-bool sort_and_filter_keyuse(THD *thd, DYNAMIC_ARRAY *keyuse,
+bool sort_and_filter_keyuse(JOIN *join, DYNAMIC_ARRAY *keyuse,
bool skip_unprefixed_keyparts);
struct st_cond_statistic
diff --git a/sql/sql_show.cc b/sql/sql_show.cc
index 6baa82ca963..6515fa93362 100644
--- a/sql/sql_show.cc
+++ b/sql/sql_show.cc
@@ -1263,11 +1263,11 @@ mysqld_show_create_get_fields(THD *thd, TABLE_LIST *table_list,
mem_root);
field_list->push_back(new (mem_root)
Item_empty_string(thd, "character_set_client",
- MY_CS_NAME_SIZE),
+ MY_CS_CHARACTER_SET_NAME_SIZE),
mem_root);
field_list->push_back(new (mem_root)
Item_empty_string(thd, "collation_connection",
- MY_CS_NAME_SIZE),
+ MY_CS_COLLATION_NAME_SIZE),
mem_root);
}
else
@@ -6356,16 +6356,39 @@ int fill_schema_collation(THD *thd, TABLE_LIST *tables, COND *cond)
if (!(wild && wild[0] &&
wild_case_compare(scs, tmp_cl->coll_name.str, wild)))
{
- const char *tmp_buff;
+ LEX_CSTRING context_collation_name=
+ tmp_cl->get_collation_name(MY_COLLATION_NAME_MODE_CONTEXT);
+ LEX_CSTRING full_collation_name=
+ tmp_cl->get_collation_name(MY_COLLATION_NAME_MODE_FULL);
+ bool is_context= cmp(context_collation_name, full_collation_name);
+ /*
+ Some collations are applicable to multiple character sets.
+ Display them only once, with the short name (without the
+ character set prefix).
+ */
+ if (is_context &&
+ cmp(tmp_cl->cs_name, Lex_cstring(STRING_WITH_LEN("utf8mb4"))))
+ continue;
restore_record(table, s->default_values);
- table->field[0]->store(tmp_cl->coll_name.str, tmp_cl->coll_name.length,
- scs);
- table->field[1]->store(&tmp_cl->cs_name, scs);
- table->field[2]->store((longlong) tmp_cl->number, TRUE);
- tmp_buff= (tmp_cl->state & MY_CS_PRIMARY) ? "Yes" : "";
- table->field[3]->store(tmp_buff, strlen(tmp_buff), scs);
- tmp_buff= (tmp_cl->state & MY_CS_COMPILED)? "Yes" : "";
- table->field[4]->store(tmp_buff, strlen(tmp_buff), scs);
+ table->field[0]->store(context_collation_name, scs);
+ if (is_context)
+ {
+ table->field[1]->set_null(); // CHARACTER_SET_NAME
+ table->field[2]->set_null(); // ID
+ table->field[3]->set_null(); // IS_DEFAULT
+ }
+ else
+ {
+ table->field[1]->set_notnull(); // CHARACTER_SET_NAME
+ table->field[1]->store(tmp_cl->cs_name, scs);
+ table->field[2]->set_notnull(); // ID
+ table->field[2]->store((longlong) tmp_cl->number, TRUE);
+ table->field[3]->set_notnull(); // IS_DEFAULT
+ table->field[3]->store(
+ Show::Yes_or_empty::value(tmp_cl->default_flag()), scs);
+ }
+ table->field[4]->store(
+ Show::Yes_or_empty::value(tmp_cl->compiled_flag()), scs);
table->field[5]->store((longlong) tmp_cl->strxfrm_multiply, TRUE);
if (schema_table_store_record(thd, table))
return 1;
@@ -6400,8 +6423,16 @@ int fill_schema_coll_charset_app(THD *thd, TABLE_LIST *tables, COND *cond)
!my_charset_same(tmp_cs,tmp_cl))
continue;
restore_record(table, s->default_values);
- table->field[0]->store(&tmp_cl->coll_name, scs);
+ LEX_CSTRING context_collation_name=
+ tmp_cl->get_collation_name(MY_COLLATION_NAME_MODE_CONTEXT);
+ LEX_CSTRING full_collation_name=
+ tmp_cl->get_collation_name(MY_COLLATION_NAME_MODE_FULL);
+ table->field[0]->store(context_collation_name, scs);
table->field[1]->store(&tmp_cl->cs_name, scs);
+ table->field[2]->store(full_collation_name, scs);
+ table->field[3]->store(tmp_cl->number);
+ table->field[4]->store(
+ Show::Yes_or_empty::value(tmp_cl->default_flag()), scs);
if (schema_table_store_record(thd, table))
return 1;
}
@@ -9083,7 +9114,7 @@ ST_FIELD_INFO schema_fields_info[]=
Column("CATALOG_NAME", Catalog(), NOT_NULL),
Column("SCHEMA_NAME", Name(), NOT_NULL, "Database"),
Column("DEFAULT_CHARACTER_SET_NAME", CSName(), NOT_NULL),
- Column("DEFAULT_COLLATION_NAME", CSName(), NOT_NULL),
+ Column("DEFAULT_COLLATION_NAME", CLName(), NOT_NULL),
Column("SQL_PATH", Varchar(FN_REFLEN), NULLABLE),
Column("SCHEMA_COMMENT", Varchar(DATABASE_COMMENT_MAXLEN), NOT_NULL),
CEnd()
@@ -9112,7 +9143,7 @@ ST_FIELD_INFO tables_fields_info[]=
Column("CREATE_TIME", Datetime(0), NULLABLE, "Create_time",OPEN_FULL_TABLE),
Column("UPDATE_TIME", Datetime(0), NULLABLE, "Update_time",OPEN_FULL_TABLE),
Column("CHECK_TIME", Datetime(0), NULLABLE, "Check_time", OPEN_FULL_TABLE),
- Column("TABLE_COLLATION", CSName(), NULLABLE, "Collation", OPEN_FRM_ONLY),
+ Column("TABLE_COLLATION", CLName(), NULLABLE, "Collation", OPEN_FRM_ONLY),
Column("CHECKSUM", ULonglong(), NULLABLE, "Checksum", OPEN_FULL_TABLE),
Column("CREATE_OPTIONS", Varchar(2048),NULLABLE, "Create_options",
OPEN_FULL_TABLE),
@@ -9142,7 +9173,7 @@ ST_FIELD_INFO columns_fields_info[]=
Column("NUMERIC_SCALE", ULonglong(), NULLABLE, OPEN_FRM_ONLY),
Column("DATETIME_PRECISION", ULonglong(), NULLABLE, OPEN_FRM_ONLY),
Column("CHARACTER_SET_NAME", CSName(), NULLABLE, OPEN_FRM_ONLY),
- Column("COLLATION_NAME", CSName(), NULLABLE, "Collation", OPEN_FRM_ONLY),
+ Column("COLLATION_NAME", CLName(), NULLABLE, "Collation", OPEN_FRM_ONLY),
Column("COLUMN_TYPE", Longtext(65535), NOT_NULL, "Type", OPEN_FRM_ONLY),
Column("COLUMN_KEY", Varchar(3), NOT_NULL, "Key", OPEN_FRM_ONLY),
Column("EXTRA", Varchar(80), NOT_NULL, "Extra", OPEN_FRM_ONLY),
@@ -9159,7 +9190,7 @@ ST_FIELD_INFO columns_fields_info[]=
ST_FIELD_INFO charsets_fields_info[]=
{
Column("CHARACTER_SET_NAME", CSName(), NOT_NULL, "Charset"),
- Column("DEFAULT_COLLATE_NAME", CSName(), NOT_NULL, "Default collation"),
+ Column("DEFAULT_COLLATE_NAME", CLName(), NOT_NULL, "Default collation"),
Column("DESCRIPTION", Varchar(60), NOT_NULL, "Description"),
Column("MAXLEN", SLonglong(3), NOT_NULL, "Maxlen"),
CEnd()
@@ -9168,10 +9199,10 @@ ST_FIELD_INFO charsets_fields_info[]=
ST_FIELD_INFO collation_fields_info[]=
{
- Column("COLLATION_NAME", CSName(), NOT_NULL, "Collation"),
- Column("CHARACTER_SET_NAME", CSName(), NOT_NULL, "Charset"),
- Column("ID", SLonglong(MY_INT32_NUM_DECIMAL_DIGITS), NOT_NULL, "Id"),
- Column("IS_DEFAULT", Yes_or_empty(), NOT_NULL, "Default"),
+ Column("COLLATION_NAME", CLName(), NOT_NULL, "Collation"),
+ Column("CHARACTER_SET_NAME", CSName(), NULLABLE, "Charset"),
+ Column("ID", SLonglong(MY_INT32_NUM_DECIMAL_DIGITS), NULLABLE, "Id"),
+ Column("IS_DEFAULT", Yes_or_empty(), NULLABLE, "Default"),
Column("IS_COMPILED", Yes_or_empty(), NOT_NULL, "Compiled"),
Column("SORTLEN", SLonglong(3), NOT_NULL, "Sortlen"),
CEnd()
@@ -9244,8 +9275,8 @@ ST_FIELD_INFO events_fields_info[]=
Column("EVENT_COMMENT", Name(), NOT_NULL),
Column("ORIGINATOR", SLonglong(10),NOT_NULL,"Originator"),
Column("CHARACTER_SET_CLIENT", CSName(), NOT_NULL, "character_set_client"),
- Column("COLLATION_CONNECTION", CSName(), NOT_NULL, "collation_connection"),
- Column("DATABASE_COLLATION", CSName(), NOT_NULL, "Database Collation"),
+ Column("COLLATION_CONNECTION", CLName(), NOT_NULL, "collation_connection"),
+ Column("DATABASE_COLLATION", CLName(), NOT_NULL, "Database Collation"),
CEnd()
};
@@ -9253,8 +9284,11 @@ ST_FIELD_INFO events_fields_info[]=
ST_FIELD_INFO coll_charset_app_fields_info[]=
{
- Column("COLLATION_NAME", CSName(), NOT_NULL),
+ Column("COLLATION_NAME", CLName(), NOT_NULL),
Column("CHARACTER_SET_NAME", CSName(), NOT_NULL),
+ Column("FULL_COLLATION_NAME",CLName(), NOT_NULL),
+ Column("ID", SLonglong(MY_INT32_NUM_DECIMAL_DIGITS), NOT_NULL),
+ Column("IS_DEFAULT", Yes_or_empty(), NOT_NULL),
CEnd()
};
@@ -9290,8 +9324,8 @@ ST_FIELD_INFO proc_fields_info[]=
Column("ROUTINE_COMMENT", Longtext(65535), NOT_NULL, "Comment"),
Column("DEFINER", Definer(), NOT_NULL, "Definer"),
Column("CHARACTER_SET_CLIENT", CSName(), NOT_NULL, "character_set_client"),
- Column("COLLATION_CONNECTION", CSName(), NOT_NULL, "collation_connection"),
- Column("DATABASE_COLLATION", CSName(), NOT_NULL, "Database Collation"),
+ Column("COLLATION_CONNECTION", CLName(), NOT_NULL, "collation_connection"),
+ Column("DATABASE_COLLATION", CLName(), NOT_NULL, "Database Collation"),
CEnd()
};
@@ -9331,7 +9365,7 @@ ST_FIELD_INFO view_fields_info[]=
Column("DEFINER", Definer(), NOT_NULL, OPEN_FRM_ONLY),
Column("SECURITY_TYPE", Varchar(7), NOT_NULL, OPEN_FRM_ONLY),
Column("CHARACTER_SET_CLIENT", CSName(), NOT_NULL, OPEN_FRM_ONLY),
- Column("COLLATION_CONNECTION", CSName(), NOT_NULL, OPEN_FRM_ONLY),
+ Column("COLLATION_CONNECTION", CLName(), NOT_NULL, OPEN_FRM_ONLY),
Column("ALGORITHM", Varchar(10),NOT_NULL, OPEN_FRM_ONLY),
CEnd()
};
@@ -9458,9 +9492,9 @@ ST_FIELD_INFO triggers_fields_info[]=
Column("DEFINER", Definer(), NOT_NULL, "Definer", OPEN_FRM_ONLY),
Column("CHARACTER_SET_CLIENT", CSName(), NOT_NULL, "character_set_client",
OPEN_FRM_ONLY),
- Column("COLLATION_CONNECTION", CSName(), NOT_NULL, "collation_connection",
+ Column("COLLATION_CONNECTION", CLName(), NOT_NULL, "collation_connection",
OPEN_FRM_ONLY),
- Column("DATABASE_COLLATION", CSName(), NOT_NULL, "Database Collation",
+ Column("DATABASE_COLLATION", CLName(), NOT_NULL, "Database Collation",
OPEN_FRM_ONLY),
CEnd()
};
@@ -10026,17 +10060,17 @@ static bool show_create_trigger_impl(THD *thd, Trigger *trigger)
fields.push_back(new (mem_root)
Item_empty_string(thd, "character_set_client",
- MY_CS_NAME_SIZE),
+ MY_CS_CHARACTER_SET_NAME_SIZE),
mem_root);
fields.push_back(new (mem_root)
Item_empty_string(thd, "collation_connection",
- MY_CS_NAME_SIZE),
+ MY_CS_COLLATION_NAME_SIZE),
mem_root);
fields.push_back(new (mem_root)
Item_empty_string(thd, "Database Collation",
- MY_CS_NAME_SIZE),
+ MY_CS_COLLATION_NAME_SIZE),
mem_root);
static const Datetime zero_datetime(Datetime::zero());
diff --git a/sql/sql_table.cc b/sql/sql_table.cc
index f94e81cc3f7..4aad6642282 100644
--- a/sql/sql_table.cc
+++ b/sql/sql_table.cc
@@ -1817,7 +1817,7 @@ report_error:
table->table ? table->table->s : NULL));
}
DEBUG_SYNC(thd, "rm_table_no_locks_before_binlog");
- thd->thread_specific_used= TRUE;
+ thd->used|= THD::THREAD_SPECIFIC_USED;
error= 0;
err:
@@ -4693,7 +4693,7 @@ int create_table_impl(THD *thd,
if (is_trans != NULL)
*is_trans= table->file->has_transactions();
- thd->thread_specific_used= TRUE;
+ thd->used|= THD::THREAD_SPECIFIC_USED;
create_info->table= table; // Store pointer to table
}
@@ -4884,11 +4884,9 @@ bool mysql_create_table(THD *thd, TABLE_LIST *create_table,
thd->abort_on_warning= thd->is_strict_mode();
if (mysql_create_table_no_lock(thd, &ddl_log_state_create, &ddl_log_state_rm,
- &create_table->db,
- &create_table->table_name, create_info,
- alter_info,
- &is_trans, create_table_mode,
- create_table) > 0)
+ &create_table->db, &create_table->table_name,
+ create_info, alter_info, &is_trans,
+ create_table_mode, create_table) > 0)
{
result= 1;
goto err;
diff --git a/sql/sql_time.cc b/sql/sql_time.cc
index 12e4460ed25..753f78ccc22 100644
--- a/sql/sql_time.cc
+++ b/sql/sql_time.cc
@@ -508,7 +508,7 @@ bool int_to_datetime_with_warn(THD *thd, const Longlong_hybrid &nr,
my_time_t TIME_to_timestamp(THD *thd, const MYSQL_TIME *t, uint *error_code)
{
- thd->time_zone_used= 1;
+ thd->used|= THD::TIME_ZONE_USED;
return thd->variables.time_zone->TIME_to_gmt_sec(t, error_code);
}
@@ -1274,7 +1274,7 @@ mix_date_and_time(MYSQL_TIME *to, const MYSQL_TIME *from)
void set_current_date(THD *thd, MYSQL_TIME *to)
{
thd->variables.time_zone->gmt_sec_to_TIME(to, thd->query_start());
- thd->time_zone_used= 1;
+ thd->used|= THD::TIME_ZONE_USED;
datetime_to_date(to);
}
diff --git a/sql/sql_type.cc b/sql/sql_type.cc
index 926a13cbf1a..269532e2390 100644
--- a/sql/sql_type.cc
+++ b/sql/sql_type.cc
@@ -1064,7 +1064,7 @@ Datetime::Datetime(THD *thd, const timeval &tv)
{
thd->variables.time_zone->gmt_sec_to_TIME(this, tv.tv_sec);
second_part= tv.tv_usec;
- thd->time_zone_used= 1;
+ thd->used|= THD::TIME_ZONE_USED;
DBUG_ASSERT(is_valid_value_slow());
}
diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy
index de963a95c2c..8e5af2b8731 100644
--- a/sql/sql_yacc.yy
+++ b/sql/sql_yacc.yy
@@ -942,6 +942,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, size_t *yystacksize);
%token <kwd> MASTER_USER_SYM
%token <kwd> MASTER_USE_GTID_SYM
%token <kwd> MASTER_HEARTBEAT_PERIOD_SYM
+%token <kwd> MASTER_DEMOTE_TO_SLAVE_SYM
%token <kwd> MAX_CONNECTIONS_PER_HOUR
%token <kwd> MAX_QUERIES_PER_HOUR
%token <kwd> MAX_ROWS
@@ -2319,6 +2320,10 @@ master_file_def:
my_yyabort_error((ER_DUP_ARGUMENT, MYF(0), "MASTER_use_gtid"));
Lex->mi.use_gtid_opt= LEX_MASTER_INFO::LEX_GTID_NO;
}
+ | MASTER_DEMOTE_TO_SLAVE_SYM '=' bool
+ {
+ Lex->mi.is_demotion_opt= (bool) $3;
+ }
;
optional_connection_name:
@@ -6516,11 +6521,8 @@ old_or_new_charset_name_or_default:
collation_name:
ident_or_text
{
- CHARSET_INFO *cs;
- if (unlikely(!(cs= mysqld_collation_get_by_name($1.str,
- thd->get_utf8_flag()))))
+ if ($$.set_by_name($1.str, thd->get_utf8_flag()))
MYSQL_YYABORT;
- $$= Lex_extended_collation(Lex_exact_collation(cs));
}
;
@@ -9790,8 +9792,7 @@ string_factor_expr:
| string_factor_expr COLLATE_SYM collation_name
{
if (unlikely(!($$= new (thd->mem_root)
- Item_func_set_collation(thd, $1,
- $3.charset_info()))))
+ Item_func_set_collation(thd, $1, $3))))
MYSQL_YYABORT;
}
;
diff --git a/sql/sys_vars.cc b/sql/sys_vars.cc
index 614ba288636..e6d121312ad 100644
--- a/sql/sys_vars.cc
+++ b/sql/sys_vars.cc
@@ -727,7 +727,7 @@ static Sys_var_bit Sys_explicit_defaults_for_timestamp(
"as NULL with DEFAULT NULL attribute, Without this option, "
"TIMESTAMP columns are NOT NULL and have implicit DEFAULT clauses.",
SESSION_VAR(option_bits), CMD_LINE(OPT_ARG),
- OPTION_EXPLICIT_DEF_TIMESTAMP, DEFAULT(FALSE), NO_MUTEX_GUARD, IN_BINLOG);
+ OPTION_EXPLICIT_DEF_TIMESTAMP, DEFAULT(TRUE), NO_MUTEX_GUARD, IN_BINLOG);
static Sys_var_ulonglong Sys_bulk_insert_buff_size(
"bulk_insert_buffer_size", "Size of tree cache used in bulk "
@@ -2469,6 +2469,27 @@ Sys_gtid_ignore_duplicates(
DEFAULT(FALSE), NO_MUTEX_GUARD,
NOT_IN_BINLOG, ON_CHECK(check_gtid_ignore_duplicates),
ON_UPDATE(fix_gtid_ignore_duplicates));
+
+static bool
+update_slave_max_statement_time(sys_var *self, THD *thd, enum_var_type type)
+{
+ slave_max_statement_time=
+ double2ulonglong(slave_max_statement_time_double * 1e6);
+
+ return false;
+}
+
+static Sys_var_on_access_global<
+ Sys_var_double, PRIV_SET_SYSTEM_GLOBAL_VAR_SLAVE_MAX_STATEMENT_TIME>
+ Sys_slave_max_statement_time(
+ "slave_max_statement_time",
+ "A query that has taken more than slave_max_statement_time seconds to "
+ "run on the slave will be aborted. The argument will be treated as a "
+ "decimal value with microsecond precision. A value of 0 (default) "
+ "means no timeout",
+ GLOBAL_VAR(slave_max_statement_time_double), CMD_LINE(REQUIRED_ARG),
+ VALID_RANGE(0, LONG_TIMEOUT), DEFAULT(0), NO_MUTEX_GUARD,
+ NOT_IN_BINLOG, ON_CHECK(0), ON_UPDATE(update_slave_max_statement_time));
#endif
@@ -2696,6 +2717,20 @@ static Sys_var_mybool Sys_old_mode(
SESSION_VAR(old_mode), CMD_LINE(OPT_ARG), DEFAULT(FALSE), 0, NOT_IN_BINLOG, ON_CHECK(0),
ON_UPDATE(set_old_mode), DEPRECATED("'@@old_mode'"));
+static Sys_var_mybool Sys_opt_allow_suspicious_udfs(
+ "allow_suspicious_udfs",
+ "Allows use of user-defined functions (UDFs) consisting of only one symbol xxx() without corresponding xxx_init() or xxx_deinit(). That also means that one can load any function from any library, for example exit() from libc.so",
+ READ_ONLY GLOBAL_VAR(opt_allow_suspicious_udfs),
+ CMD_LINE(OPT_ARG), DEFAULT(FALSE));
+
+#ifndef DISABLE_GRANT_OPTIONS
+static Sys_var_mybool Sys_skip_grant_tables(
+ "skip_grant_tables",
+ "Start without grant tables. This gives all users FULL ACCESS to all tables.",
+ READ_ONLY GLOBAL_VAR(opt_noacl),
+ CMD_LINE(OPT_ARG), DEFAULT(FALSE));
+#endif
+
static const char *alter_algorithm_modes[]= {"DEFAULT", "COPY", "INPLACE",
"NOCOPY", "INSTANT", NULL};
@@ -2739,9 +2774,10 @@ static Sys_var_ulong Sys_optimizer_prune_level(
"Controls the heuristic(s) applied during query optimization to prune "
"less-promising partial plans from the optimizer search space. "
"Meaning: 0 - do not apply any heuristic, thus perform exhaustive "
- "search; 1 - prune plans based on number of retrieved rows",
+ "search: 1 - prune plans based on cost and number of retrieved rows "
+ "eq_ref: 2 - prune also if we find an eq_ref chain",
SESSION_VAR(optimizer_prune_level), CMD_LINE(REQUIRED_ARG),
- VALID_RANGE(0, 1), DEFAULT(1), BLOCK_SIZE(1));
+ VALID_RANGE(0, 2), DEFAULT(2), BLOCK_SIZE(1));
static Sys_var_ulong Sys_optimizer_selectivity_sampling_limit(
"optimizer_selectivity_sampling_limit",
@@ -2783,6 +2819,13 @@ static Sys_var_ulong Sys_optimizer_search_depth(
SESSION_VAR(optimizer_search_depth), CMD_LINE(REQUIRED_ARG),
VALID_RANGE(0, MAX_TABLES+1), DEFAULT(MAX_TABLES+1), BLOCK_SIZE(1));
+static Sys_var_ulong Sys_optimizer_extra_pruning_depth(
+ "optimizer_extra_pruning_depth",
+ "If the optimizer needs to enumerate join prefix of this size or "
+ "larger, then it will try agressively prune away the search space.",
+ SESSION_VAR(optimizer_extra_pruning_depth), CMD_LINE(REQUIRED_ARG),
+ VALID_RANGE(0, MAX_TABLES+1), DEFAULT(8), BLOCK_SIZE(1));
+
/* this is used in the sigsegv handler */
export const char *optimizer_switch_names[]=
{
@@ -6229,6 +6272,12 @@ static Sys_var_charptr Sys_wsrep_patch_version(
READ_ONLY GLOBAL_VAR(wsrep_patch_version_ptr), CMD_LINE_HELP_ONLY,
DEFAULT(WSREP_PATCH_VERSION));
+
+static Sys_var_charptr Sys_wsrep_allowlist(
+ "wsrep_allowlist", "Allowed IP addresses split by comma delimiter",
+ READ_ONLY GLOBAL_VAR(wsrep_allowlist), CMD_LINE(REQUIRED_ARG),
+ DEFAULT(""));
+
#endif /* WITH_WSREP */
static bool fix_host_cache_size(sys_var *, THD *, enum_var_type)
diff --git a/sql/sys_vars.inl b/sql/sys_vars.inl
index 97e3a28b67e..b1d7bc31255 100644
--- a/sql/sys_vars.inl
+++ b/sql/sys_vars.inl
@@ -2241,7 +2241,7 @@ public:
timezone). If it's the global value which was used we can't replicate
(binlog code stores session value only).
*/
- thd->time_zone_used= 1;
+ thd->used|= THD::TIME_ZONE_USED;
return valptr(thd, session_var(thd, Time_zone *));
}
const uchar *global_value_ptr(THD *thd, const LEX_CSTRING *base) const
diff --git a/sql/table.h b/sql/table.h
index 2cbe00e6910..41963658e8a 100644
--- a/sql/table.h
+++ b/sql/table.h
@@ -3178,6 +3178,7 @@ typedef struct st_nested_join
table_map sj_depends_on;
/* Outer non-trivially correlated tables */
table_map sj_corr_tables;
+ table_map direct_children_map;
List<Item_ptr> sj_outer_expr_list;
/**
True if this join nest node is completely covered by the query execution
diff --git a/sql/temporary_tables.cc b/sql/temporary_tables.cc
index 3ba6a772549..ecbfdde1878 100644
--- a/sql/temporary_tables.cc
+++ b/sql/temporary_tables.cc
@@ -427,7 +427,7 @@ bool THD::open_temporary_table(TABLE_LIST *tl)
#endif
table->query_id= query_id;
- thread_specific_used= true;
+ used|= THREAD_SPECIFIC_USED;
/* It is neither a derived table nor non-updatable view. */
tl->updatable= true;
@@ -1353,7 +1353,7 @@ bool THD::log_events_and_free_tmp_shares()
{
if (IS_USER_TABLE(share))
{
- bool save_thread_specific_used= thread_specific_used;
+ used_t save_thread_specific_used= used & THREAD_SPECIFIC_USED;
my_thread_id save_pseudo_thread_id= variables.pseudo_thread_id;
char db_buf[FN_REFLEN];
String db(db_buf, sizeof(db_buf), system_charset_info);
@@ -1403,7 +1403,7 @@ bool THD::log_events_and_free_tmp_shares()
clear_error();
CHARSET_INFO *cs_save= variables.character_set_client;
variables.character_set_client= system_charset_info;
- thread_specific_used= true;
+ used|= THREAD_SPECIFIC_USED;
Query_log_event qinfo(this, s_query.ptr(),
s_query.length() - 1 /* to remove trailing ',' */,
@@ -1436,7 +1436,7 @@ bool THD::log_events_and_free_tmp_shares()
get_stmt_da()->set_overwrite_status(false);
}
variables.pseudo_thread_id= save_pseudo_thread_id;
- thread_specific_used= save_thread_specific_used;
+ used = (used & ~THREAD_SPECIFIC_USED) | save_thread_specific_used;
}
else
{
diff --git a/sql/wsrep_allowlist_service.cc b/sql/wsrep_allowlist_service.cc
new file mode 100644
index 00000000000..23ade8b32b9
--- /dev/null
+++ b/sql/wsrep_allowlist_service.cc
@@ -0,0 +1,56 @@
+/* Copyright 2021-2022 Codership Oy <info@codership.com>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; version 2 of the License.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+
+#include "wsrep_allowlist_service.h"
+
+#include "my_global.h"
+#include "wsrep_mysqld.h"
+#include "wsrep_priv.h"
+#include "wsrep_schema.h"
+
+#include <algorithm>
+#include <memory>
+#include <vector>
+
+class Wsrep_allowlist_service : public wsrep::allowlist_service
+{
+public:
+ bool allowlist_cb(wsrep::allowlist_service::allowlist_key key,
+ const wsrep::const_buffer& value) WSREP_NOEXCEPT override;
+};
+
+bool Wsrep_allowlist_service::allowlist_cb (
+ wsrep::allowlist_service::allowlist_key key,
+ const wsrep::const_buffer& value)
+ WSREP_NOEXCEPT
+{
+ std::string string_value(value.data());
+ bool res= wsrep_schema->allowlist_check(key, string_value);
+ return res;
+}
+
+std::unique_ptr<wsrep::allowlist_service> entrypoint;
+
+wsrep::allowlist_service* wsrep_allowlist_service_init()
+{
+ entrypoint = std::unique_ptr<wsrep::allowlist_service>(new Wsrep_allowlist_service);
+ return entrypoint.get();
+}
+
+void wsrep_allowlist_service_deinit()
+{
+ entrypoint.reset();
+}
+
diff --git a/sql/wsrep_allowlist_service.h b/sql/wsrep_allowlist_service.h
new file mode 100644
index 00000000000..2d96139b5c6
--- /dev/null
+++ b/sql/wsrep_allowlist_service.h
@@ -0,0 +1,29 @@
+/* Copyright 2021 Codership Oy <info@codership.com>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; version 2 of the License.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+
+/*
+ Implementation of wsrep provider threads instrumentation.
+ */
+
+#ifndef WSREP_PROVIDER_ALLOWLIST_H
+#define WSREP_PROVIDER_ALLOWLIST_H
+
+#include "wsrep/allowlist_service.hpp"
+
+wsrep::allowlist_service* wsrep_allowlist_service_init();
+
+void wsrep_allowlist_service_deinit();
+
+#endif /* WSREP_PROVIDER_ALLOWLIST_H */
diff --git a/sql/wsrep_mysqld.cc b/sql/wsrep_mysqld.cc
index 00e3413ecd3..9c11c802cc8 100644
--- a/sql/wsrep_mysqld.cc
+++ b/sql/wsrep_mysqld.cc
@@ -84,6 +84,7 @@ const char *wsrep_data_home_dir;
const char *wsrep_dbug_option;
const char *wsrep_notify_cmd;
const char *wsrep_status_file;
+const char *wsrep_allowlist;
ulong wsrep_debug; // Debug level logging
my_bool wsrep_convert_LOCK_to_trx; // Convert locking sessions to trx
@@ -457,6 +458,17 @@ void wsrep_init_schema()
WSREP_ERROR("Failed to init wsrep schema");
unireg_abort(1);
}
+ // If we are bootstraping new cluster we should
+ // clear allowlist table and populate it from variable
+ if (wsrep_new_cluster)
+ {
+ wsrep_schema->clear_allowlist();
+ std::vector<std::string> ip_allowlist;
+ if (wsrep_split_allowlist(ip_allowlist))
+ {
+ wsrep_schema->store_allowlist(ip_allowlist);
+ }
+ }
}
}
@@ -883,10 +895,14 @@ int wsrep_init()
if (!wsrep_data_home_dir || strlen(wsrep_data_home_dir) == 0)
wsrep_data_home_dir= mysql_real_data_home;
- if (Wsrep_server_state::instance().load_provider(wsrep_provider,
- wsrep_provider_options))
+ Wsrep_server_state::init_provider_services();
+ if (Wsrep_server_state::instance().load_provider(
+ wsrep_provider,
+ wsrep_provider_options,
+ Wsrep_server_state::instance().provider_services()))
{
WSREP_ERROR("Failed to load provider");
+ Wsrep_server_state::deinit_provider_services();
return 1;
}
@@ -900,6 +916,7 @@ int wsrep_init()
"supports streaming replication.",
wsrep_provider, global_system_variables.wsrep_trx_fragment_size);
Wsrep_server_state::instance().unload_provider();
+ Wsrep_server_state::deinit_provider_services();
return 1;
}
@@ -1021,6 +1038,8 @@ void wsrep_deinit(bool free_options)
WSREP_DEBUG("wsrep_deinit");
Wsrep_server_state::instance().unload_provider();
+ Wsrep_server_state::deinit_provider_services();
+
provider_name[0]= '\0';
provider_version[0]= '\0';
provider_vendor[0]= '\0';
@@ -1178,8 +1197,9 @@ bool wsrep_start_replication(const char *wsrep_cluster_address)
// --wsrep-new-cluster flag is not used, checking wsrep_cluster_address
// it should match gcomm:// only to be considered as bootstrap node.
// This logic is used in galera.
- if (!wsrep_new_cluster && (strlen(wsrep_cluster_address) == 8) &&
- !strncmp(wsrep_cluster_address, "gcomm://", 8))
+ if (!wsrep_new_cluster &&
+ (strlen(wsrep_cluster_address) == 8) &&
+ !strncmp(wsrep_cluster_address, "gcomm://", 8))
{
wsrep_new_cluster= true;
}
@@ -1810,6 +1830,34 @@ bool wsrep_reload_ssl()
}
}
+bool wsrep_split_allowlist(std::vector<std::string>& allowlist)
+{
+ if (!wsrep_allowlist || 0 == strlen(wsrep_allowlist))
+ {
+ return false;
+ }
+ std::istringstream ss{wsrep_allowlist};
+ std::string token;
+ while (std::getline(ss, token, ','))
+ {
+ if (!token.empty())
+ {
+ struct sockaddr_in sa_4;
+ struct sockaddr_in6 sa_6;
+ if ((inet_pton(AF_INET, token.c_str(), &(sa_4.sin_addr)) != 0) ||
+ (inet_pton(AF_INET6, token.c_str(), &(sa_6.sin6_addr)) != 0))
+ {
+ allowlist.push_back(token);
+ }
+ else
+ {
+ WSREP_WARN("Invalid IP address %s provided in `wsrep_allowlist` variable", token.c_str());
+ }
+ }
+ }
+ return allowlist.size();
+}
+
/*!
* @param db Database string
* @param table Table string
@@ -3352,7 +3400,6 @@ void wsrep_wait_appliers_close(THD *thd)
is also applier, we are still running...
*/
}
-
int wsrep_must_ignore_error(THD* thd)
{
const int error= thd->get_stmt_da()->sql_errno();
diff --git a/sql/wsrep_mysqld.h b/sql/wsrep_mysqld.h
index 470727a02da..9001b62d013 100644
--- a/sql/wsrep_mysqld.h
+++ b/sql/wsrep_mysqld.h
@@ -68,6 +68,7 @@ extern ulong wsrep_max_ws_size;
extern ulong wsrep_max_ws_rows;
extern const char* wsrep_notify_cmd;
extern const char* wsrep_status_file;
+extern const char* wsrep_allowlist;
extern my_bool wsrep_certify_nonPK;
extern long int wsrep_protocol_version;
extern my_bool wsrep_desync;
@@ -222,6 +223,7 @@ extern int wsrep_check_opts();
extern void wsrep_prepend_PATH (const char* path);
extern bool wsrep_append_fk_parent_table(THD* thd, TABLE_LIST* table, wsrep::key_array* keys);
extern bool wsrep_reload_ssl();
+extern bool wsrep_split_allowlist(std::vector<std::string>& allowlist);
/* Other global variables */
extern wsrep_seqno_t wsrep_locked_seqno;
diff --git a/sql/wsrep_schema.cc b/sql/wsrep_schema.cc
index a19ea688fd6..443f3c4fcd2 100644
--- a/sql/wsrep_schema.cc
+++ b/sql/wsrep_schema.cc
@@ -1,4 +1,4 @@
-/* Copyright (C) 2015-2021 Codership Oy <info@codership.com>
+/* Copyright (C) 2015-2022 Codership Oy <info@codership.com>
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
@@ -39,6 +39,7 @@
#define WSREP_STREAMING_TABLE "wsrep_streaming_log"
#define WSREP_CLUSTER_TABLE "wsrep_cluster"
#define WSREP_MEMBERS_TABLE "wsrep_cluster_members"
+#define WSREP_ALLOWLIST_TABLE "wsrep_allowlist"
const char* wsrep_sr_table_name_full= WSREP_SCHEMA "/" WSREP_STREAMING_TABLE;
@@ -46,6 +47,7 @@ static const std::string wsrep_schema_str= WSREP_SCHEMA;
static const std::string sr_table_str= WSREP_STREAMING_TABLE;
static const std::string cluster_table_str= WSREP_CLUSTER_TABLE;
static const std::string members_table_str= WSREP_MEMBERS_TABLE;
+static const std::string allowlist_table_str= WSREP_ALLOWLIST_TABLE;
static const std::string create_cluster_table_str=
"CREATE TABLE IF NOT EXISTS " + wsrep_schema_str + "." + cluster_table_str +
@@ -91,6 +93,13 @@ static const std::string create_frag_table_str=
"PRIMARY KEY (node_uuid, trx_id, seqno)"
") ENGINE=InnoDB STATS_PERSISTENT=0";
+static const std::string create_allowlist_table_str=
+ "CREATE TABLE IF NOT EXISTS " + wsrep_schema_str + "." + allowlist_table_str +
+ "("
+ "ip CHAR(64) NOT NULL,"
+ "PRIMARY KEY (ip)"
+ ") ENGINE=InnoDB STATS_PERSISTENT=0";
+
static const std::string delete_from_cluster_table=
"DELETE FROM " + wsrep_schema_str + "." + cluster_table_str;
@@ -440,11 +449,18 @@ static int insert(TABLE* table) {
}
if ((error= table->file->ha_write_row(table->record[0]))) {
- WSREP_ERROR("Error writing into %s.%s: %d",
- table->s->db.str,
- table->s->table_name.str,
- error);
- ret= 1;
+ if (error == HA_ERR_FOUND_DUPP_KEY) {
+ WSREP_WARN("Duplicate key found when writing into %s.%s",
+ table->s->db.str,
+ table->s->table_name.str);
+ ret= HA_ERR_FOUND_DUPP_KEY;
+ } else {
+ WSREP_ERROR("Error writing into %s.%s: %d",
+ table->s->db.str,
+ table->s->table_name.str,
+ error);
+ ret= 1;
+ }
}
DBUG_RETURN(ret);
@@ -682,6 +698,8 @@ static void wsrep_init_thd_for_schema(THD *thd)
wsrep_store_threadvars(thd);
}
+static bool wsrep_schema_ready= false;
+
int Wsrep_schema::init()
{
DBUG_ENTER("Wsrep_schema::init()");
@@ -717,12 +735,16 @@ int Wsrep_schema::init()
alter_members_table.size()) ||
Wsrep_schema_impl::execute_SQL(thd,
alter_frag_table.c_str(),
- alter_frag_table.size()))
+ alter_frag_table.size()) ||
+ Wsrep_schema_impl::execute_SQL(thd,
+ create_allowlist_table_str.c_str(),
+ create_allowlist_table_str.size()))
{
ret= 1;
}
else
{
+ wsrep_schema_ready= true;
ret= 0;
}
@@ -1492,3 +1514,194 @@ int Wsrep_schema::recover_sr_transactions(THD *orig_thd)
out:
DBUG_RETURN(ret);
}
+
+void Wsrep_schema::clear_allowlist()
+{
+ THD* thd= new THD(next_thread_id());
+ if (!thd)
+ {
+ WSREP_ERROR("Unable to get thd");
+ return;
+ }
+
+ thd->thread_stack= (char*)&thd;
+ wsrep_init_thd_for_schema(thd);
+ TABLE* allowlist_table= 0;
+ int error= 0;
+
+ Wsrep_schema_impl::init_stmt(thd);
+
+ if (Wsrep_schema_impl::open_for_write(thd, allowlist_table_str.c_str(),
+ &allowlist_table) ||
+ Wsrep_schema_impl::init_for_scan(allowlist_table))
+ {
+ WSREP_ERROR("Failed to open mysql.wsrep_allowlist table");
+ goto out;
+ }
+
+ while (0 == error)
+ {
+ if ((error= Wsrep_schema_impl::next_record(allowlist_table)) == 0)
+ {
+ Wsrep_schema_impl::delete_row(allowlist_table);
+ }
+ else if (error == HA_ERR_END_OF_FILE)
+ {
+ continue;
+ }
+ else
+ {
+ WSREP_ERROR("Allowlist table scan returned error %d", error);
+ }
+ }
+
+ Wsrep_schema_impl::end_scan(allowlist_table);
+ Wsrep_schema_impl::finish_stmt(thd);
+out:
+ delete thd;
+}
+
+void Wsrep_schema::store_allowlist(std::vector<std::string>& ip_allowlist)
+{
+ THD* thd= new THD(next_thread_id());
+ if (!thd)
+ {
+ WSREP_ERROR("Unable to get thd");
+ return;
+ }
+
+ thd->thread_stack= (char*)&thd;
+ wsrep_init_thd_for_schema(thd);
+ TABLE* allowlist_table= 0;
+ int error;
+ Wsrep_schema_impl::init_stmt(thd);
+ if (Wsrep_schema_impl::open_for_write(thd, allowlist_table_str.c_str(),
+ &allowlist_table))
+ {
+ WSREP_ERROR("Failed to open mysql.wsrep_allowlist table");
+ goto out;
+ }
+ for (size_t i= 0; i < ip_allowlist.size(); ++i)
+ {
+ Wsrep_schema_impl::store(allowlist_table, 0, ip_allowlist[i]);
+ if ((error= Wsrep_schema_impl::insert(allowlist_table)))
+ {
+ if (error == HA_ERR_FOUND_DUPP_KEY)
+ {
+ WSREP_WARN("Duplicate entry (%s) found in `wsrep_allowlist` list", ip_allowlist[i].c_str());
+ }
+ else
+ {
+ WSREP_ERROR("Failed to write mysql.wsrep_allowlist table: %d", error);
+ goto out;
+ }
+ }
+ }
+ Wsrep_schema_impl::finish_stmt(thd);
+out:
+ delete thd;
+}
+
+typedef struct Allowlist_check_arg
+{
+ Allowlist_check_arg(const std::string& value)
+ : value(value)
+ , response(false)
+ {
+ }
+ std::string value;
+ bool response;
+} Allowlist_check_arg;
+
+static void *allowlist_check_thread(void *param)
+{
+ Allowlist_check_arg *arg= (Allowlist_check_arg *) param;
+
+ my_thread_init();
+ THD thd(0);
+ thd.thread_stack= (char *) &thd;
+ wsrep_init_thd_for_schema(&thd);
+
+ int error;
+ TABLE *allowlist_table= 0;
+ bool match_found_or_empty= false;
+ bool table_have_rows= false;
+ char row[64]= {
+ 0,
+ };
+
+ /*
+ * Read allowlist table
+ */
+ Wsrep_schema_impl::init_stmt(&thd);
+ if (Wsrep_schema_impl::open_for_read(&thd, allowlist_table_str.c_str(),
+ &allowlist_table) ||
+ Wsrep_schema_impl::init_for_scan(allowlist_table))
+ {
+ goto out;
+ }
+ while (true)
+ {
+ if ((error= Wsrep_schema_impl::next_record(allowlist_table)) == 0)
+ {
+ if (Wsrep_schema_impl::scan(allowlist_table, 0, row, sizeof(row)))
+ {
+ goto out;
+ }
+ table_have_rows= true;
+ if (!arg->value.compare(row))
+ {
+ match_found_or_empty= true;
+ break;
+ }
+ }
+ else if (error == HA_ERR_END_OF_FILE)
+ {
+ if (!table_have_rows)
+ {
+ WSREP_DEBUG("allowlist table empty, allowing all connections.");
+ // If table is empty we are allowing all connections
+ match_found_or_empty= true;
+ }
+ break;
+ }
+ else
+ {
+ goto out;
+ }
+ }
+ if (Wsrep_schema_impl::end_scan(allowlist_table))
+ {
+ goto out;
+ }
+ Wsrep_schema_impl::finish_stmt(&thd);
+ (void) trans_commit(&thd);
+out:
+ my_thread_end();
+ arg->response = match_found_or_empty;
+ return 0;
+}
+
+bool Wsrep_schema::allowlist_check(Wsrep_allowlist_key key,
+ const std::string &value)
+{
+ // We don't have wsrep schema initialized at this point
+ if (wsrep_schema_ready == false)
+ {
+ return true;
+ }
+ pthread_t allowlist_check_thd;
+ int ret;
+ Allowlist_check_arg arg(value);
+ ret= mysql_thread_create(0, /* Not instrumented */
+ &allowlist_check_thd, NULL,
+ allowlist_check_thread, &arg);
+ if (ret)
+ {
+ WSREP_ERROR("allowlist_check(): mysql_thread_create() failed: %d (%s)",
+ ret, strerror(ret));
+ return false;
+ }
+ pthread_join(allowlist_check_thd, NULL);
+ return arg.response;
+}
diff --git a/sql/wsrep_schema.h b/sql/wsrep_schema.h
index 36e23998d19..05522e77089 100644
--- a/sql/wsrep_schema.h
+++ b/sql/wsrep_schema.h
@@ -133,6 +133,28 @@ class Wsrep_schema
*/
int recover_sr_transactions(THD* orig_thd);
+
+ /**
+ Delete all rows on bootstrap from `wsrep_allowlist` variable
+ */
+ void clear_allowlist();
+
+ /**
+ Store allowlist ip on bootstrap from `wsrep_allowlist` variable
+ */
+ void store_allowlist(std::vector<std::string>& ip_allowlist);
+
+ /**
+ Scan white list table against accepted connection. Allow if ip
+ is found in table or if table is empty.
+
+ @param key Which allowlist column to compare
+ @param value Value to be checked against allowlist
+
+ @return True if found or empty table, false on not found
+ */
+ bool allowlist_check(Wsrep_allowlist_key key, const std::string& val);
+
private:
/* Non-copyable */
Wsrep_schema(const Wsrep_schema&);
diff --git a/sql/wsrep_server_state.cc b/sql/wsrep_server_state.cc
index 6bc4eaf4d86..e173042362f 100644
--- a/sql/wsrep_server_state.cc
+++ b/sql/wsrep_server_state.cc
@@ -16,6 +16,7 @@
#include "my_global.h"
#include "wsrep_api.h"
#include "wsrep_server_state.h"
+#include "wsrep_allowlist_service.h"
#include "wsrep_binlog.h" /* init/deinit group commit */
mysql_mutex_t LOCK_wsrep_server_state;
@@ -26,6 +27,8 @@ PSI_mutex_key key_LOCK_wsrep_server_state;
PSI_cond_key key_COND_wsrep_server_state;
#endif
+wsrep::provider::services Wsrep_server_state::m_provider_services;
+
Wsrep_server_state::Wsrep_server_state(const std::string& name,
const std::string& incoming_address,
const std::string& address,
@@ -73,7 +76,6 @@ void Wsrep_server_state::init_once(const std::string& name,
void Wsrep_server_state::destroy()
{
-
if (m_instance)
{
delete m_instance;
@@ -82,3 +84,16 @@ void Wsrep_server_state::destroy()
mysql_cond_destroy(&COND_wsrep_server_state);
}
}
+
+void Wsrep_server_state::init_provider_services()
+{
+ m_provider_services.allowlist_service= wsrep_allowlist_service_init();
+}
+
+void Wsrep_server_state::deinit_provider_services()
+{
+ if (m_provider_services.allowlist_service)
+ wsrep_allowlist_service_deinit();
+ m_provider_services= wsrep::provider::services();
+}
+
diff --git a/sql/wsrep_server_state.h b/sql/wsrep_server_state.h
index 1ef937300f6..8759f7a9d84 100644
--- a/sql/wsrep_server_state.h
+++ b/sql/wsrep_server_state.h
@@ -55,6 +55,14 @@ public:
{
return (get_provider().capabilities() & capability);
}
+
+ static void init_provider_services();
+ static void deinit_provider_services();
+
+ static const wsrep::provider::services& provider_services()
+ {
+ return m_provider_services;
+ }
private:
Wsrep_server_state(const std::string& name,
@@ -67,6 +75,7 @@ private:
Wsrep_mutex m_mutex;
Wsrep_condition_variable m_cond;
Wsrep_server_service m_service;
+ static wsrep::provider::services m_provider_services;
static Wsrep_server_state* m_instance;
};
diff --git a/sql/wsrep_types.h b/sql/wsrep_types.h
index 9da00e305a7..cd53ab95d0c 100644
--- a/sql/wsrep_types.h
+++ b/sql/wsrep_types.h
@@ -21,9 +21,11 @@
#include "wsrep/seqno.hpp"
#include "wsrep/view.hpp"
+#include "wsrep/allowlist_service.hpp"
typedef wsrep::id Wsrep_id;
typedef wsrep::seqno Wsrep_seqno;
typedef wsrep::view Wsrep_view;
+typedef enum wsrep::allowlist_service::allowlist_key Wsrep_allowlist_key;
#endif /* WSREP_TYPES_H */
diff --git a/storage/columnstore/columnstore b/storage/columnstore/columnstore
-Subproject b989238ff79969f86ffee66620495d57c8c0069
+Subproject fa286826cbeb654ec90b6a26f206dd75a5e8be9
diff --git a/storage/innobase/fts/fts0fts.cc b/storage/innobase/fts/fts0fts.cc
index 8886cfa6d9f..d2b90542ec6 100644
--- a/storage/innobase/fts/fts0fts.cc
+++ b/storage/innobase/fts/fts0fts.cc
@@ -4427,7 +4427,7 @@ fts_add_token(
t_str.f_n_char = str.f_n_char;
- t_str.f_len = str.f_len * result_doc->charset->casedn_multiply + 1;
+ t_str.f_len = str.f_len * result_doc->charset->casedn_multiply() + 1;
t_str.f_str = static_cast<byte*>(
mem_heap_alloc(heap, t_str.f_len));
diff --git a/storage/innobase/fts/fts0que.cc b/storage/innobase/fts/fts0que.cc
index 4407224a24d..9c92a1171cf 100644
--- a/storage/innobase/fts/fts0que.cc
+++ b/storage/innobase/fts/fts0que.cc
@@ -4043,7 +4043,7 @@ fts_query(
/* Convert the query string to lower case before parsing. We own
the ut_malloc'ed result and so remember to free it before return. */
- lc_query_str_len = query_len * charset->casedn_multiply + 1;
+ lc_query_str_len = query_len * charset->casedn_multiply() + 1;
lc_query_str = static_cast<byte*>(ut_malloc_nokey(lc_query_str_len));
/* For binary collations, a case sensitive search is
diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc
index 8a67192c5da..2510c2cd648 100644
--- a/storage/innobase/handler/ha_innodb.cc
+++ b/storage/innobase/handler/ha_innodb.cc
@@ -201,8 +201,6 @@ static my_bool innobase_create_status_file;
my_bool innobase_stats_on_metadata;
static my_bool innodb_optimize_fulltext_only;
-static char* innodb_version_str = (char*) INNODB_VERSION_STR;
-
extern uint srv_fil_crypt_rotate_key_age;
extern uint srv_n_fil_crypt_iops;
@@ -901,6 +899,8 @@ static MYSQL_THDVAR_STR(tmpdir,
"Directory for temporary non-tablespace files.",
innodb_tmpdir_validate, NULL, NULL);
+static size_t truncated_status_writes;
+
static SHOW_VAR innodb_status_variables[]= {
#ifdef BTR_CUR_HASH_ADAPT
{"adaptive_hash_hash_searches", &export_vars.innodb_ahi_hit, SHOW_SIZE_T},
@@ -1003,19 +1003,8 @@ static SHOW_VAR innodb_status_variables[]= {
{"row_lock_time_avg", &export_vars.innodb_row_lock_time_avg, SHOW_SIZE_T},
{"row_lock_time_max", &export_vars.innodb_row_lock_time_max, SHOW_SIZE_T},
{"row_lock_waits", &export_vars.innodb_row_lock_waits, SHOW_SIZE_T},
- {"rows_deleted", &export_vars.innodb_rows_deleted, SHOW_SIZE_T},
- {"rows_inserted", &export_vars.innodb_rows_inserted, SHOW_SIZE_T},
- {"rows_read", &export_vars.innodb_rows_read, SHOW_SIZE_T},
- {"rows_updated", &export_vars.innodb_rows_updated, SHOW_SIZE_T},
- {"system_rows_deleted", &export_vars.innodb_system_rows_deleted,SHOW_SIZE_T},
- {"system_rows_inserted", &export_vars.innodb_system_rows_inserted,
- SHOW_SIZE_T},
- {"system_rows_read", &export_vars.innodb_system_rows_read, SHOW_SIZE_T},
- {"system_rows_updated", &export_vars.innodb_system_rows_updated,
- SHOW_SIZE_T},
{"num_open_files", &fil_system.n_open, SHOW_SIZE_T},
- {"truncated_status_writes", &export_vars.innodb_truncated_status_writes,
- SHOW_SIZE_T},
+ {"truncated_status_writes", &truncated_status_writes, SHOW_SIZE_T},
{"available_undo_logs", &srv_available_undo_logs, SHOW_ULONG},
{"undo_truncations", &export_vars.innodb_undo_truncations, SHOW_ULONG},
@@ -1058,13 +1047,6 @@ static SHOW_VAR innodb_status_variables[]= {
{"onlineddl_pct_progress",
&export_vars.innodb_onlineddl_pct_progress, SHOW_SIZE_T},
- /* Times secondary index lookup triggered cluster lookup and
- times prefix optimization avoided triggering cluster lookup */
- {"secondary_index_triggered_cluster_reads",
- &export_vars.innodb_sec_rec_cluster_reads, SHOW_SIZE_T},
- {"secondary_index_triggered_cluster_reads_avoided",
- &export_vars.innodb_sec_rec_cluster_reads_avoided, SHOW_SIZE_T},
-
/* Encryption */
{"encryption_rotation_pages_read_from_cache",
&export_vars.innodb_encryption_rotation_pages_read_from_cache, SHOW_SIZE_T},
@@ -6524,7 +6506,7 @@ innobase_fts_casedn_str(
char* dst, /*!< in: buffer for result string */
size_t dst_len)/*!< in: buffer size */
{
- if (cs->casedn_multiply == 1) {
+ if (cs->casedn_multiply() == 1) {
memcpy(dst, src, src_len);
dst[src_len] = 0;
my_casedn_str(cs, dst);
@@ -9064,13 +9046,6 @@ ha_innobase::index_read(
case DB_SUCCESS:
error = 0;
table->status = 0;
- if (m_prebuilt->table->is_system_db) {
- srv_stats.n_system_rows_read.add(
- thd_get_thread_id(m_prebuilt->trx->mysql_thd), 1);
- } else {
- srv_stats.n_rows_read.add(
- thd_get_thread_id(m_prebuilt->trx->mysql_thd), 1);
- }
break;
case DB_RECORD_NOT_FOUND:
@@ -9325,13 +9300,6 @@ ha_innobase::general_fetch(
case DB_SUCCESS:
error = 0;
table->status = 0;
- if (m_prebuilt->table->is_system_db) {
- srv_stats.n_system_rows_read.add(
- thd_get_thread_id(trx->mysql_thd), 1);
- } else {
- srv_stats.n_rows_read.add(
- thd_get_thread_id(trx->mysql_thd), 1);
- }
break;
case DB_RECORD_NOT_FOUND:
error = HA_ERR_END_OF_FILE;
@@ -16261,7 +16229,7 @@ innodb_show_status(
if (flen > MAX_STATUS_SIZE) {
usable_len = MAX_STATUS_SIZE;
- srv_truncated_status_writes++;
+ truncated_status_writes++;
} else {
usable_len = flen;
}
@@ -19382,11 +19350,13 @@ static MYSQL_SYSVAR_UINT(spin_wait_delay, srv_spin_wait_delay,
"Maximum delay between polling for a spin lock (4 by default)",
NULL, NULL, 4, 0, 6000, 0);
+static my_bool innodb_prefix_index_cluster_optimization;
+
static MYSQL_SYSVAR_BOOL(prefix_index_cluster_optimization,
- srv_prefix_index_cluster_optimization,
- PLUGIN_VAR_OPCMDARG,
- "Enable prefix optimization to sometimes avoid cluster index lookups.",
- NULL, NULL, FALSE);
+ innodb_prefix_index_cluster_optimization,
+ PLUGIN_VAR_OPCMDARG | PLUGIN_VAR_DEPRECATED,
+ "Deprecated parameter with no effect",
+ nullptr, nullptr, TRUE);
static MYSQL_SYSVAR_STR(data_file_path, innobase_data_file_path,
PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY,
@@ -19441,10 +19411,6 @@ static MYSQL_SYSVAR_LONG(autoinc_lock_mode, innobase_autoinc_lock_mode,
AUTOINC_OLD_STYLE_LOCKING, /* Minimum value */
AUTOINC_NO_LOCKING, 0); /* Maximum value */
-static MYSQL_SYSVAR_STR(version, innodb_version_str,
- PLUGIN_VAR_NOCMDOPT | PLUGIN_VAR_READONLY,
- "InnoDB version", NULL, NULL, INNODB_VERSION_STR);
-
#ifdef HAVE_URING
# include <sys/utsname.h>
static utsname uname_for_io_uring;
@@ -19850,7 +19816,6 @@ static struct st_mysql_sys_var* innobase_system_variables[]= {
MYSQL_SYSVAR(prefix_index_cluster_optimization),
MYSQL_SYSVAR(tmpdir),
MYSQL_SYSVAR(autoinc_lock_mode),
- MYSQL_SYSVAR(version),
MYSQL_SYSVAR(use_native_aio),
#ifdef HAVE_LIBNUMA
MYSQL_SYSVAR(numa_interleave),
@@ -19930,10 +19895,10 @@ maria_declare_plugin(innobase)
PLUGIN_LICENSE_GPL,
innodb_init, /* Plugin Init */
NULL, /* Plugin Deinit */
- INNODB_VERSION_SHORT,
+ MYSQL_VERSION_MAJOR << 8 | MYSQL_VERSION_MINOR,
innodb_status_variables_export,/* status variables */
innobase_system_variables, /* system variables */
- INNODB_VERSION_STR, /* string version */
+ PACKAGE_VERSION,
MariaDB_PLUGIN_MATURITY_STABLE /* maturity */
},
i_s_innodb_trx,
diff --git a/storage/innobase/handler/i_s.cc b/storage/innobase/handler/i_s.cc
index cf7c3b04f84..3cb51f5e15d 100644
--- a/storage/innobase/handler/i_s.cc
+++ b/storage/innobase/handler/i_s.cc
@@ -534,6 +534,9 @@ static struct st_mysql_information_schema i_s_info =
MYSQL_INFORMATION_SCHEMA_INTERFACE_VERSION
};
+/** version number reported by SHOW PLUGINS */
+constexpr unsigned i_s_version= MYSQL_VERSION_MAJOR << 8 | MYSQL_VERSION_MINOR;
+
struct st_maria_plugin i_s_innodb_trx =
{
/* the plugin type (a MYSQL_XXX_PLUGIN value) */
@@ -568,19 +571,8 @@ struct st_maria_plugin i_s_innodb_trx =
/* int (*)(void*); */
i_s_common_deinit,
- /* plugin version (for SHOW PLUGINS) */
- /* unsigned int */
- INNODB_VERSION_SHORT,
-
- /* struct st_mysql_show_var* */
- NULL,
-
- /* struct st_mysql_sys_var** */
- NULL,
-
- /* Maria extension */
- INNODB_VERSION_STR,
- MariaDB_PLUGIN_MATURITY_STABLE,
+ i_s_version, nullptr, nullptr, PACKAGE_VERSION,
+ MariaDB_PLUGIN_MATURITY_STABLE
};
static const LEX_CSTRING lock_mode_values[] =
@@ -792,19 +784,8 @@ struct st_maria_plugin i_s_innodb_locks =
/* int (*)(void*); */
i_s_common_deinit,
- /* plugin version (for SHOW PLUGINS) */
- /* unsigned int */
- INNODB_VERSION_SHORT,
-
- /* struct st_mysql_show_var* */
- NULL,
-
- /* struct st_mysql_sys_var** */
- NULL,
-
- /* Maria extension */
- INNODB_VERSION_STR,
- MariaDB_PLUGIN_MATURITY_STABLE,
+ i_s_version, nullptr, nullptr, PACKAGE_VERSION,
+ MariaDB_PLUGIN_MATURITY_STABLE
};
@@ -955,19 +936,8 @@ struct st_maria_plugin i_s_innodb_lock_waits =
/* int (*)(void*); */
i_s_common_deinit,
- /* plugin version (for SHOW PLUGINS) */
- /* unsigned int */
- INNODB_VERSION_SHORT,
-
- /* struct st_mysql_show_var* */
- NULL,
-
- /* struct st_mysql_sys_var** */
- NULL,
-
- /* Maria extension */
- INNODB_VERSION_STR,
- MariaDB_PLUGIN_MATURITY_STABLE,
+ i_s_version, nullptr, nullptr, PACKAGE_VERSION,
+ MariaDB_PLUGIN_MATURITY_STABLE
};
namespace Show {
@@ -1144,19 +1114,8 @@ struct st_maria_plugin i_s_innodb_cmp =
/* int (*)(void*); */
i_s_common_deinit,
- /* plugin version (for SHOW PLUGINS) */
- /* unsigned int */
- INNODB_VERSION_SHORT,
-
- /* struct st_mysql_show_var* */
- NULL,
-
- /* struct st_mysql_sys_var** */
- NULL,
-
- /* Maria extension */
- INNODB_VERSION_STR,
- MariaDB_PLUGIN_MATURITY_STABLE,
+ i_s_version, nullptr, nullptr, PACKAGE_VERSION,
+ MariaDB_PLUGIN_MATURITY_STABLE
};
struct st_maria_plugin i_s_innodb_cmp_reset =
@@ -1194,19 +1153,8 @@ struct st_maria_plugin i_s_innodb_cmp_reset =
/* int (*)(void*); */
i_s_common_deinit,
- /* plugin version (for SHOW PLUGINS) */
- /* unsigned int */
- INNODB_VERSION_SHORT,
-
- /* struct st_mysql_show_var* */
- NULL,
-
- /* struct st_mysql_sys_var** */
- NULL,
-
- /* Maria extension */
- INNODB_VERSION_STR,
- MariaDB_PLUGIN_MATURITY_STABLE,
+ i_s_version, nullptr, nullptr, PACKAGE_VERSION,
+ MariaDB_PLUGIN_MATURITY_STABLE
};
@@ -1449,19 +1397,8 @@ struct st_maria_plugin i_s_innodb_cmp_per_index =
/* int (*)(void*); */
i_s_common_deinit,
- /* plugin version (for SHOW PLUGINS) */
- /* unsigned int */
- INNODB_VERSION_SHORT,
-
- /* struct st_mysql_show_var* */
- NULL,
-
- /* struct st_mysql_sys_var** */
- NULL,
-
- /* Maria extension */
- INNODB_VERSION_STR,
- MariaDB_PLUGIN_MATURITY_STABLE,
+ i_s_version, nullptr, nullptr, PACKAGE_VERSION,
+ MariaDB_PLUGIN_MATURITY_STABLE
};
struct st_maria_plugin i_s_innodb_cmp_per_index_reset =
@@ -1499,19 +1436,8 @@ struct st_maria_plugin i_s_innodb_cmp_per_index_reset =
/* int (*)(void*); */
i_s_common_deinit,
- /* plugin version (for SHOW PLUGINS) */
- /* unsigned int */
- INNODB_VERSION_SHORT,
-
- /* struct st_mysql_show_var* */
- NULL,
-
- /* struct st_mysql_sys_var** */
- NULL,
-
- /* Maria extension */
- INNODB_VERSION_STR,
- MariaDB_PLUGIN_MATURITY_STABLE,
+ i_s_version, nullptr, nullptr, PACKAGE_VERSION,
+ MariaDB_PLUGIN_MATURITY_STABLE
};
@@ -1694,19 +1620,8 @@ struct st_maria_plugin i_s_innodb_cmpmem =
/* int (*)(void*); */
i_s_common_deinit,
- /* plugin version (for SHOW PLUGINS) */
- /* unsigned int */
- INNODB_VERSION_SHORT,
-
- /* struct st_mysql_show_var* */
- NULL,
-
- /* struct st_mysql_sys_var** */
- NULL,
-
- /* Maria extension */
- INNODB_VERSION_STR,
- MariaDB_PLUGIN_MATURITY_STABLE,
+ i_s_version, nullptr, nullptr, PACKAGE_VERSION,
+ MariaDB_PLUGIN_MATURITY_STABLE
};
struct st_maria_plugin i_s_innodb_cmpmem_reset =
@@ -1744,19 +1659,8 @@ struct st_maria_plugin i_s_innodb_cmpmem_reset =
/* int (*)(void*); */
i_s_common_deinit,
- /* plugin version (for SHOW PLUGINS) */
- /* unsigned int */
- INNODB_VERSION_SHORT,
-
- /* struct st_mysql_show_var* */
- NULL,
-
- /* struct st_mysql_sys_var** */
- NULL,
-
- /* Maria extension */
- INNODB_VERSION_STR,
- MariaDB_PLUGIN_MATURITY_STABLE,
+ i_s_version, nullptr, nullptr, PACKAGE_VERSION,
+ MariaDB_PLUGIN_MATURITY_STABLE
};
@@ -2176,19 +2080,8 @@ struct st_maria_plugin i_s_innodb_metrics =
/* int (*)(void*); */
i_s_common_deinit,
- /* plugin version (for SHOW PLUGINS) */
- /* unsigned int */
- INNODB_VERSION_SHORT,
-
- /* struct st_mysql_show_var* */
- NULL,
-
- /* struct st_mysql_sys_var** */
- NULL,
-
- /* Maria extension */
- INNODB_VERSION_STR,
- MariaDB_PLUGIN_MATURITY_STABLE,
+ i_s_version, nullptr, nullptr, PACKAGE_VERSION,
+ MariaDB_PLUGIN_MATURITY_STABLE
};
namespace Show {
@@ -2285,19 +2178,8 @@ struct st_maria_plugin i_s_innodb_ft_default_stopword =
/* int (*)(void*); */
i_s_common_deinit,
- /* plugin version (for SHOW PLUGINS) */
- /* unsigned int */
- INNODB_VERSION_SHORT,
-
- /* struct st_mysql_show_var* */
- NULL,
-
- /* struct st_mysql_sys_var** */
- NULL,
-
- /* Maria extension */
- INNODB_VERSION_STR,
- MariaDB_PLUGIN_MATURITY_STABLE,
+ i_s_version, nullptr, nullptr, PACKAGE_VERSION,
+ MariaDB_PLUGIN_MATURITY_STABLE
};
namespace Show {
@@ -2454,19 +2336,8 @@ struct st_maria_plugin i_s_innodb_ft_deleted =
/* int (*)(void*); */
i_s_common_deinit,
- /* plugin version (for SHOW PLUGINS) */
- /* unsigned int */
- INNODB_VERSION_SHORT,
-
- /* struct st_mysql_show_var* */
- NULL,
-
- /* struct st_mysql_sys_var** */
- NULL,
-
- /* Maria extension */
- INNODB_VERSION_STR,
- MariaDB_PLUGIN_MATURITY_STABLE,
+ i_s_version, nullptr, nullptr, PACKAGE_VERSION,
+ MariaDB_PLUGIN_MATURITY_STABLE
};
/*******************************************************************//**
@@ -2537,19 +2408,8 @@ struct st_maria_plugin i_s_innodb_ft_being_deleted =
/* int (*)(void*); */
i_s_common_deinit,
- /* plugin version (for SHOW PLUGINS) */
- /* unsigned int */
- INNODB_VERSION_SHORT,
-
- /* struct st_mysql_show_var* */
- NULL,
-
- /* struct st_mysql_sys_var** */
- NULL,
-
- /* Maria extension */
- INNODB_VERSION_STR,
- MariaDB_PLUGIN_MATURITY_STABLE,
+ i_s_version, nullptr, nullptr, PACKAGE_VERSION,
+ MariaDB_PLUGIN_MATURITY_STABLE
};
@@ -2800,19 +2660,8 @@ struct st_maria_plugin i_s_innodb_ft_index_cache =
/* int (*)(void*); */
i_s_common_deinit,
- /* plugin version (for SHOW PLUGINS) */
- /* unsigned int */
- INNODB_VERSION_SHORT,
-
- /* struct st_mysql_show_var* */
- NULL,
-
- /* struct st_mysql_sys_var** */
- NULL,
-
- /* Maria extension */
- INNODB_VERSION_STR,
- MariaDB_PLUGIN_MATURITY_STABLE,
+ i_s_version, nullptr, nullptr, PACKAGE_VERSION,
+ MariaDB_PLUGIN_MATURITY_STABLE
};
/*******************************************************************//**
@@ -3230,19 +3079,8 @@ struct st_maria_plugin i_s_innodb_ft_index_table =
/* int (*)(void*); */
i_s_common_deinit,
- /* plugin version (for SHOW PLUGINS) */
- /* unsigned int */
- INNODB_VERSION_SHORT,
-
- /* struct st_mysql_show_var* */
- NULL,
-
- /* struct st_mysql_sys_var** */
- NULL,
-
- /* Maria extension */
- INNODB_VERSION_STR,
- MariaDB_PLUGIN_MATURITY_STABLE,
+ i_s_version, nullptr, nullptr, PACKAGE_VERSION,
+ MariaDB_PLUGIN_MATURITY_STABLE
};
@@ -3423,19 +3261,8 @@ struct st_maria_plugin i_s_innodb_ft_config =
/* int (*)(void*); */
i_s_common_deinit,
- /* plugin version (for SHOW PLUGINS) */
- /* unsigned int */
- INNODB_VERSION_SHORT,
-
- /* struct st_mysql_show_var* */
- NULL,
-
- /* struct st_mysql_sys_var** */
- NULL,
-
- /* Maria extension */
- INNODB_VERSION_STR,
- MariaDB_PLUGIN_MATURITY_STABLE,
+ i_s_version, nullptr, nullptr, PACKAGE_VERSION,
+ MariaDB_PLUGIN_MATURITY_STABLE
};
namespace Show {
@@ -3723,19 +3550,8 @@ struct st_maria_plugin i_s_innodb_buffer_stats =
/* int (*)(void*); */
i_s_common_deinit,
- /* plugin version (for SHOW PLUGINS) */
- /* unsigned int */
- INNODB_VERSION_SHORT,
-
- /* struct st_mysql_show_var* */
- NULL,
-
- /* struct st_mysql_sys_var** */
- NULL,
-
- /* Maria extension */
- INNODB_VERSION_STR,
- MariaDB_PLUGIN_MATURITY_STABLE,
+ i_s_version, nullptr, nullptr, PACKAGE_VERSION,
+ MariaDB_PLUGIN_MATURITY_STABLE
};
/** These must correspond to the first values of buf_page_state */
@@ -4259,19 +4075,8 @@ struct st_maria_plugin i_s_innodb_buffer_page =
/* int (*)(void*); */
i_s_common_deinit,
- /* plugin version (for SHOW PLUGINS) */
- /* unsigned int */
- INNODB_VERSION_SHORT,
-
- /* struct st_mysql_show_var* */
- NULL,
-
- /* struct st_mysql_sys_var** */
- NULL,
-
- /* Maria extension */
- INNODB_VERSION_STR,
- MariaDB_PLUGIN_MATURITY_STABLE,
+ i_s_version, nullptr, nullptr, PACKAGE_VERSION,
+ MariaDB_PLUGIN_MATURITY_STABLE
};
namespace Show {
@@ -4612,19 +4417,8 @@ struct st_maria_plugin i_s_innodb_buffer_page_lru =
/* int (*)(void*); */
i_s_common_deinit,
- /* plugin version (for SHOW PLUGINS) */
- /* unsigned int */
- INNODB_VERSION_SHORT,
-
- /* struct st_mysql_show_var* */
- NULL,
-
- /* struct st_mysql_sys_var** */
- NULL,
-
- /* Maria extension */
- INNODB_VERSION_STR,
- MariaDB_PLUGIN_MATURITY_STABLE,
+ i_s_version, nullptr, nullptr, PACKAGE_VERSION,
+ MariaDB_PLUGIN_MATURITY_STABLE
};
/*******************************************************************//**
@@ -4900,19 +4694,8 @@ struct st_maria_plugin i_s_innodb_sys_tables =
/* int (*)(void*); */
i_s_common_deinit,
- /* plugin version (for SHOW PLUGINS) */
- /* unsigned int */
- INNODB_VERSION_SHORT,
-
- /* struct st_mysql_show_var* */
- NULL,
-
- /* struct st_mysql_sys_var** */
- NULL,
-
- /* Maria extension */
- INNODB_VERSION_STR,
- MariaDB_PLUGIN_MATURITY_STABLE,
+ i_s_version, nullptr, nullptr, PACKAGE_VERSION,
+ MariaDB_PLUGIN_MATURITY_STABLE
};
namespace Show {
@@ -5127,19 +4910,8 @@ struct st_maria_plugin i_s_innodb_sys_tablestats =
/* int (*)(void*); */
i_s_common_deinit,
- /* plugin version (for SHOW PLUGINS) */
- /* unsigned int */
- INNODB_VERSION_SHORT,
-
- /* struct st_mysql_show_var* */
- NULL,
-
- /* struct st_mysql_sys_var** */
- NULL,
-
- /* Maria extension */
- INNODB_VERSION_STR,
- MariaDB_PLUGIN_MATURITY_STABLE,
+ i_s_version, nullptr, nullptr, PACKAGE_VERSION,
+ MariaDB_PLUGIN_MATURITY_STABLE
};
namespace Show {
@@ -5368,19 +5140,8 @@ struct st_maria_plugin i_s_innodb_sys_indexes =
/* int (*)(void*); */
i_s_common_deinit,
- /* plugin version (for SHOW PLUGINS) */
- /* unsigned int */
- INNODB_VERSION_SHORT,
-
- /* struct st_mysql_show_var* */
- NULL,
-
- /* struct st_mysql_sys_var** */
- NULL,
-
- /* Maria extension */
- INNODB_VERSION_STR,
- MariaDB_PLUGIN_MATURITY_STABLE,
+ i_s_version, nullptr, nullptr, PACKAGE_VERSION,
+ MariaDB_PLUGIN_MATURITY_STABLE
};
namespace Show {
@@ -5581,19 +5342,8 @@ struct st_maria_plugin i_s_innodb_sys_columns =
/* int (*)(void*); */
i_s_common_deinit,
- /* plugin version (for SHOW PLUGINS) */
- /* unsigned int */
- INNODB_VERSION_SHORT,
-
- /* struct st_mysql_show_var* */
- NULL,
-
- /* struct st_mysql_sys_var** */
- NULL,
-
- /* Maria extension */
- INNODB_VERSION_STR,
- MariaDB_PLUGIN_MATURITY_STABLE,
+ i_s_version, nullptr, nullptr, PACKAGE_VERSION,
+ MariaDB_PLUGIN_MATURITY_STABLE
};
namespace Show {
@@ -5768,19 +5518,8 @@ struct st_maria_plugin i_s_innodb_sys_virtual =
/* int (*)(void*); */
i_s_common_deinit,
- /* plugin version (for SHOW PLUGINS) */
- /* unsigned int */
- INNODB_VERSION_SHORT,
-
- /* struct st_mysql_show_var* */
- NULL,
-
- /* struct st_mysql_sys_var** */
- NULL,
-
- /* Maria extension */
- INNODB_VERSION_STR,
- MariaDB_PLUGIN_MATURITY_STABLE,
+ i_s_version, nullptr, nullptr, PACKAGE_VERSION,
+ MariaDB_PLUGIN_MATURITY_STABLE
};
@@ -5963,19 +5702,8 @@ struct st_maria_plugin i_s_innodb_sys_fields =
/* int (*)(void*); */
i_s_common_deinit,
- /* plugin version (for SHOW PLUGINS) */
- /* unsigned int */
- INNODB_VERSION_SHORT,
-
- /* struct st_mysql_show_var* */
- NULL,
-
- /* struct st_mysql_sys_var** */
- NULL,
-
- /* Maria extension */
- INNODB_VERSION_STR,
- MariaDB_PLUGIN_MATURITY_STABLE,
+ i_s_version, nullptr, nullptr, PACKAGE_VERSION,
+ MariaDB_PLUGIN_MATURITY_STABLE
};
namespace Show {
@@ -6159,19 +5887,8 @@ struct st_maria_plugin i_s_innodb_sys_foreign =
/* int (*)(void*); */
i_s_common_deinit,
- /* plugin version (for SHOW PLUGINS) */
- /* unsigned int */
- INNODB_VERSION_SHORT,
-
- /* struct st_mysql_show_var* */
- NULL,
-
- /* struct st_mysql_sys_var** */
- NULL,
-
- /* Maria extension */
- INNODB_VERSION_STR,
- MariaDB_PLUGIN_MATURITY_STABLE,
+ i_s_version, nullptr, nullptr, PACKAGE_VERSION,
+ MariaDB_PLUGIN_MATURITY_STABLE
};
namespace Show {
@@ -6355,19 +6072,8 @@ struct st_maria_plugin i_s_innodb_sys_foreign_cols =
/* int (*)(void*); */
i_s_common_deinit,
- /* plugin version (for SHOW PLUGINS) */
- /* unsigned int */
- INNODB_VERSION_SHORT,
-
- /* struct st_mysql_show_var* */
- NULL,
-
- /* struct st_mysql_sys_var** */
- NULL,
-
- /* Maria extension */
- INNODB_VERSION_STR,
- MariaDB_PLUGIN_MATURITY_STABLE,
+ i_s_version, nullptr, nullptr, PACKAGE_VERSION,
+ MariaDB_PLUGIN_MATURITY_STABLE
};
namespace Show {
@@ -6570,19 +6276,8 @@ struct st_maria_plugin i_s_innodb_sys_tablespaces =
/* int (*)(void*); */
i_s_common_deinit,
- /* plugin version (for SHOW PLUGINS) */
- /* unsigned int */
- INNODB_VERSION_SHORT,
-
- /* struct st_mysql_show_var* */
- NULL,
-
- /* struct st_mysql_sys_var** */
- NULL,
-
- /* Maria extension */
- INNODB_VERSION_STR,
- MariaDB_PLUGIN_MATURITY_STABLE,
+ i_s_version, nullptr, nullptr, PACKAGE_VERSION,
+ MariaDB_PLUGIN_MATURITY_STABLE
};
namespace Show {
@@ -6806,17 +6501,6 @@ struct st_maria_plugin i_s_innodb_tablespaces_encryption =
/* int (*)(void*); */
i_s_common_deinit,
- /* plugin version (for SHOW PLUGINS) */
- /* unsigned int */
- INNODB_VERSION_SHORT,
-
- /* struct st_mysql_show_var* */
- NULL,
-
- /* struct st_mysql_sys_var** */
- NULL,
-
- /* Maria extension */
- INNODB_VERSION_STR,
+ i_s_version, nullptr, nullptr, PACKAGE_VERSION,
MariaDB_PLUGIN_MATURITY_STABLE
};
diff --git a/storage/innobase/ibuf/ibuf0ibuf.cc b/storage/innobase/ibuf/ibuf0ibuf.cc
index 4dae6bbd6dc..13039e4d07f 100644
--- a/storage/innobase/ibuf/ibuf0ibuf.cc
+++ b/storage/innobase/ibuf/ibuf0ibuf.cc
@@ -1223,6 +1223,7 @@ static
void
ibuf_print_ops(
/*===========*/
+ const char* op_name,/*!< in: operation name */
const Atomic_counter<ulint>* ops, /*!< in: operation counts */
FILE* file) /*!< in: file where to print */
{
@@ -1231,11 +1232,11 @@ ibuf_print_ops(
"delete mark",
"delete"
};
- ulint i;
- ut_a(UT_ARR_SIZE(op_names) == IBUF_OP_COUNT);
+ static_assert(array_elements(op_names) == IBUF_OP_COUNT, "");
+ fputs(op_name, file);
- for (i = 0; i < IBUF_OP_COUNT; i++) {
+ for (ulint i = 0; i < IBUF_OP_COUNT; i++) {
fprintf(file, "%s " ULINTPF "%s", op_names[i],
ulint{ops[i]}, (i < (IBUF_OP_COUNT - 1)) ? ", " : "");
}
@@ -4547,24 +4548,29 @@ ibuf_print(
/*=======*/
FILE* file) /*!< in: file where to print */
{
- if (UNIV_UNLIKELY(!ibuf.index)) return;
- mysql_mutex_lock(&ibuf_mutex);
-
- fprintf(file,
- "Ibuf: size " ULINTPF ", free list len " ULINTPF ","
- " seg size " ULINTPF ", " ULINTPF " merges\n",
- ulint{ibuf.size},
- ibuf.free_list_len,
- ibuf.seg_size,
- ulint{ibuf.n_merges});
-
- fputs("merged operations:\n ", file);
- ibuf_print_ops(ibuf.n_merged_ops, file);
+ if (UNIV_UNLIKELY(!ibuf.index)) return;
- fputs("discarded operations:\n ", file);
- ibuf_print_ops(ibuf.n_discarded_ops, file);
+ mysql_mutex_lock(&ibuf_mutex);
+ if (ibuf.empty)
+ {
+ mysql_mutex_unlock(&ibuf_mutex);
+ return;
+ }
- mysql_mutex_unlock(&ibuf_mutex);
+ const ulint size= ibuf.size;
+ const ulint free_list_len= ibuf.free_list_len;
+ const ulint seg_size= ibuf.seg_size;
+ mysql_mutex_unlock(&ibuf_mutex);
+
+ fprintf(file,
+ "-------------\n"
+ "INSERT BUFFER\n"
+ "-------------\n"
+ "size " ULINTPF ", free list len " ULINTPF ","
+ " seg size " ULINTPF ", " ULINTPF " merges\n",
+ size, free_list_len, seg_size, ulint{ibuf.n_merges});
+ ibuf_print_ops("merged operations:\n", ibuf.n_merged_ops, file);
+ ibuf_print_ops("discarded operations:\n", ibuf.n_discarded_ops, file);
}
/** Check the insert buffer bitmaps on IMPORT TABLESPACE.
diff --git a/storage/innobase/include/srv0mon.h b/storage/innobase/include/srv0mon.h
index 1ca2d7a429f..51f3049b81a 100644
--- a/storage/innobase/include/srv0mon.h
+++ b/storage/innobase/include/srv0mon.h
@@ -175,8 +175,6 @@ enum monitor_id_t {
MONITOR_OVLD_PAGE_CREATED,
MONITOR_OVLD_PAGES_WRITTEN,
MONITOR_OVLD_PAGES_READ,
- MONITOR_OVLD_INDEX_SEC_REC_CLUSTER_READS,
- MONITOR_OVLD_INDEX_SEC_REC_CLUSTER_READS_AVOIDED,
MONITOR_OVLD_BYTE_READ,
MONITOR_OVLD_BYTE_WRITTEN,
MONITOR_FLUSH_BATCH_SCANNED,
@@ -374,17 +372,6 @@ enum monitor_id_t {
MONITOR_OVLD_SRV_DBLWR_PAGES_WRITTEN,
MONITOR_OVLD_SRV_PAGE_SIZE,
- /* Data DML related counters */
- MONITOR_MODULE_DML_STATS,
- MONITOR_OLVD_ROW_READ,
- MONITOR_OLVD_ROW_INSERTED,
- MONITOR_OLVD_ROW_DELETED,
- MONITOR_OLVD_ROW_UPDTATED,
- MONITOR_OLVD_SYSTEM_ROW_READ,
- MONITOR_OLVD_SYSTEM_ROW_INSERTED,
- MONITOR_OLVD_SYSTEM_ROW_DELETED,
- MONITOR_OLVD_SYSTEM_ROW_UPDATED,
-
/* Data DDL related counters */
MONITOR_MODULE_DDL_STATS,
MONITOR_BACKGROUND_DROP_INDEX,
diff --git a/storage/innobase/include/srv0srv.h b/storage/innobase/include/srv0srv.h
index f02c10b603b..0f02e307a47 100644
--- a/storage/innobase/include/srv0srv.h
+++ b/storage/innobase/include/srv0srv.h
@@ -111,36 +111,6 @@ struct srv_stats_t
/** Number of data read in total (in bytes) */
ulint_ctr_1_t data_read;
- /** Number of rows read. */
- ulint_ctr_n_t n_rows_read;
-
- /** Number of rows updated */
- ulint_ctr_n_t n_rows_updated;
-
- /** Number of rows deleted */
- ulint_ctr_n_t n_rows_deleted;
-
- /** Number of rows inserted */
- ulint_ctr_n_t n_rows_inserted;
-
- /** Number of system rows read. */
- ulint_ctr_n_t n_system_rows_read;
-
- /** Number of system rows updated */
- ulint_ctr_n_t n_system_rows_updated;
-
- /** Number of system rows deleted */
- ulint_ctr_n_t n_system_rows_deleted;
-
- /** Number of system rows inserted */
- ulint_ctr_n_t n_system_rows_inserted;
-
- /** Number of times secondary index lookup triggered cluster lookup */
- ulint_ctr_n_t n_sec_rec_cluster_reads;
-
- /** Number of times prefix optimization avoided triggering cluster lookup */
- ulint_ctr_n_t n_sec_rec_cluster_reads_avoided;
-
/** Number of encryption_get_latest_key_version calls */
ulint_ctr_n_t n_key_requests;
@@ -246,10 +216,6 @@ extern ulong srv_purge_rseg_truncate_frequency;
/** Enable or Disable Truncate of UNDO tablespace. */
extern my_bool srv_undo_log_truncate;
-/* Optimize prefix index queries to skip cluster index lookup when possible */
-/* Enables or disables this prefix optimization. Disabled by default. */
-extern my_bool srv_prefix_index_cluster_optimization;
-
/** Default size of UNDO tablespace (10MiB for innodb_page_size=16k) */
constexpr ulint SRV_UNDO_TABLESPACE_SIZE_IN_PAGES= (10U << 20) /
UNIV_PAGE_SIZE_DEF;
@@ -395,7 +361,6 @@ extern bool srv_monitor_active;
extern ulong srv_n_spin_wait_rounds;
extern uint srv_spin_wait_delay;
-extern ulint srv_truncated_status_writes;
/** Number of initialized rollback segments for persistent undo log */
extern ulong srv_available_undo_logs;
/** Iterations of the loop bounded by 'srv_active' label. */
@@ -683,15 +648,6 @@ struct export_var_t{
/ srv_n_lock_wait_count */
ulint innodb_row_lock_time_max; /*!< srv_n_lock_max_wait_time
/ 1000 */
- ulint innodb_rows_read; /*!< srv_n_rows_read */
- ulint innodb_rows_inserted; /*!< srv_n_rows_inserted */
- ulint innodb_rows_updated; /*!< srv_n_rows_updated */
- ulint innodb_rows_deleted; /*!< srv_n_rows_deleted */
- ulint innodb_system_rows_read; /*!< srv_n_system_rows_read */
- ulint innodb_system_rows_inserted; /*!< srv_n_system_rows_inserted */
- ulint innodb_system_rows_updated; /*!< srv_n_system_rows_updated */
- ulint innodb_system_rows_deleted; /*!< srv_n_system_rows_deleted*/
- ulint innodb_truncated_status_writes; /*!< srv_truncated_status_writes */
/** Number of undo tablespace truncation operations */
ulong innodb_undo_truncations;
@@ -743,9 +699,6 @@ struct export_var_t{
/* Number of temporary tablespace pages decrypted */
ib_int64_t innodb_n_temp_blocks_decrypted;
- ulint innodb_sec_rec_cluster_reads; /*!< srv_sec_rec_cluster_reads */
- ulint innodb_sec_rec_cluster_reads_avoided;/*!< srv_sec_rec_cluster_reads_avoided */
-
ulint innodb_encryption_rotation_pages_read_from_cache;
ulint innodb_encryption_rotation_pages_read_from_disk;
ulint innodb_encryption_rotation_pages_modified;
diff --git a/storage/innobase/include/univ.i b/storage/innobase/include/univ.i
index 2af1f480764..d06343fcabe 100644
--- a/storage/innobase/include/univ.i
+++ b/storage/innobase/include/univ.i
@@ -33,25 +33,6 @@ Created 1/20/1994 Heikki Tuuri
#pragma once
-/* aux macros to convert M into "123" (string) if M is defined like
-#define M 123 */
-#define _IB_TO_STR(s) #s
-#define IB_TO_STR(s) _IB_TO_STR(s)
-
-/* The following is the InnoDB version as shown in
-SELECT plugin_version FROM information_schema.plugins;
-calculated in make_version_string() in sql/sql_show.cc like this:
-"version >> 8" . "version & 0xff"
-because the version is shown with only one dot, we skip the last
-component, i.e. we show M.N.P as M.N */
-#define INNODB_VERSION_SHORT \
- (MYSQL_VERSION_MAJOR << 8 | MYSQL_VERSION_MINOR)
-
-#define INNODB_VERSION_STR \
- IB_TO_STR(MYSQL_VERSION_MAJOR) "." \
- IB_TO_STR(MYSQL_VERSION_MINOR) "." \
- IB_TO_STR(MYSQL_VERSION_PATCH)
-
/** How far ahead should we tell the service manager the timeout
(time in seconds) */
#define INNODB_EXTEND_TIMEOUT_INTERVAL 30
diff --git a/storage/innobase/log/log0log.cc b/storage/innobase/log/log0log.cc
index 423203a805c..3e4c7029db4 100644
--- a/storage/innobase/log/log0log.cc
+++ b/storage/innobase/log/log0log.cc
@@ -256,16 +256,18 @@ void log_t::header_write(byte *buf, lsn_t lsn, bool encrypted)
mach_write_to_4(my_assume_aligned<4>(buf) + LOG_HEADER_FORMAT,
log_sys.FORMAT_10_8);
mach_write_to_8(my_assume_aligned<8>(buf + LOG_HEADER_START_LSN), lsn);
- static constexpr const char LOG_HEADER_CREATOR_CURRENT[]=
- "MariaDB "
- IB_TO_STR(MYSQL_VERSION_MAJOR) "."
- IB_TO_STR(MYSQL_VERSION_MINOR) "."
- IB_TO_STR(MYSQL_VERSION_PATCH);
-
- strcpy(reinterpret_cast<char*>(buf) + LOG_HEADER_CREATOR,
- LOG_HEADER_CREATOR_CURRENT);
- static_assert(LOG_HEADER_CREATOR_END - LOG_HEADER_CREATOR >=
- sizeof LOG_HEADER_CREATOR_CURRENT, "compatibility");
+
+#if defined __GNUC__ && __GNUC__ > 7
+# pragma GCC diagnostic push
+# pragma GCC diagnostic ignored "-Wstringop-truncation"
+#endif
+ strncpy(reinterpret_cast<char*>(buf) + LOG_HEADER_CREATOR,
+ "MariaDB " PACKAGE_VERSION,
+ LOG_HEADER_CREATOR_END - LOG_HEADER_CREATOR);
+#if defined __GNUC__ && __GNUC__ > 7
+# pragma GCC diagnostic pop
+#endif
+
if (encrypted)
log_crypt_write_header(buf + LOG_HEADER_CREATOR_END);
mach_write_to_4(my_assume_aligned<4>(508 + buf), my_crc32c(0, buf, 508));
diff --git a/storage/innobase/row/row0mysql.cc b/storage/innobase/row/row0mysql.cc
index 4692fa98035..94085a356d9 100644
--- a/storage/innobase/row/row0mysql.cc
+++ b/storage/innobase/row/row0mysql.cc
@@ -1392,12 +1392,6 @@ error_exit:
}
}
- if (table->is_system_db) {
- srv_stats.n_system_rows_inserted.inc(size_t(trx->id));
- } else {
- srv_stats.n_rows_inserted.inc(size_t(trx->id));
- }
-
/* Not protected by dict_sys.latch or table->stats_mutex_lock()
for performance
reasons, we would rather get garbage in stat_n_rows (which is
@@ -1735,20 +1729,8 @@ row_update_for_mysql(row_prebuilt_t* prebuilt)
with a latch. */
dict_table_n_rows_dec(prebuilt->table);
- if (table->is_system_db) {
- srv_stats.n_system_rows_deleted.inc(size_t(trx->id));
- } else {
- srv_stats.n_rows_deleted.inc(size_t(trx->id));
- }
-
update_statistics = !srv_stats_include_delete_marked;
} else {
- if (table->is_system_db) {
- srv_stats.n_system_rows_updated.inc(size_t(trx->id));
- } else {
- srv_stats.n_rows_updated.inc(size_t(trx->id));
- }
-
update_statistics
= !(node->cmpl_info & UPD_NODE_NO_ORD_CHANGE);
}
@@ -1961,8 +1943,6 @@ static dberr_t row_update_vers_insert(que_thr_t* thr, upd_node_t* node)
goto exit;
case DB_SUCCESS:
- srv_stats.n_rows_inserted.inc(
- static_cast<size_t>(trx->id));
dict_stats_update_if_needed(table, *trx);
goto exit;
}
@@ -2046,11 +2026,9 @@ row_update_cascade_for_mysql(
dict_table_n_rows_dec(node->table);
stats = !srv_stats_include_delete_marked;
- srv_stats.n_rows_deleted.inc(size_t(trx->id));
} else {
stats = !(node->cmpl_info
& UPD_NODE_NO_ORD_CHANGE);
- srv_stats.n_rows_updated.inc(size_t(trx->id));
}
if (stats) {
diff --git a/storage/innobase/row/row0sel.cc b/storage/innobase/row/row0sel.cc
index e5db6a777d9..74af56a81e6 100644
--- a/storage/innobase/row/row0sel.cc
+++ b/storage/innobase/row/row0sel.cc
@@ -3375,9 +3375,6 @@ Row_sel_get_clust_rec_for_mysql::operator()(
*out_rec = NULL;
trx = thr_get_trx(thr);
- srv_stats.n_sec_rec_cluster_reads.inc(
- thd_get_thread_id(trx->mysql_thd));
-
row_build_row_ref_in_tuple(prebuilt->clust_ref, rec,
sec_index, *offsets);
@@ -4243,11 +4240,11 @@ bool row_search_with_covering_prefix(
const dict_index_t* index = prebuilt->index;
ut_ad(!dict_index_is_clust(index));
- if (dict_index_is_spatial(index)) {
- return false;
- }
-
- if (!srv_prefix_index_cluster_optimization) {
+ /* In ha_innobase::build_template() we choose to access the
+ whole row when using exclusive row locks or In case of fts
+ query, we need to read from clustered index */
+ if (prebuilt->select_lock_type == LOCK_X || prebuilt->in_fts_query
+ || !index->is_btree()) {
return false;
}
@@ -4314,7 +4311,6 @@ bool row_search_with_covering_prefix(
ut_a(templ->rec_field_no != ULINT_UNDEFINED);
}
- srv_stats.n_sec_rec_cluster_reads_avoided.inc();
return true;
}
diff --git a/storage/innobase/srv/srv0mon.cc b/storage/innobase/srv/srv0mon.cc
index 30592d1db53..83a38829f60 100644
--- a/storage/innobase/srv/srv0mon.cc
+++ b/storage/innobase/srv/srv0mon.cc
@@ -278,18 +278,6 @@ static monitor_info_t innodb_counter_info[] =
MONITOR_EXISTING | MONITOR_DEFAULT_ON),
MONITOR_DEFAULT_START, MONITOR_OVLD_PAGES_READ},
- {"buffer_index_sec_rec_cluster_reads", "buffer",
- "Number of secondary record reads triggered cluster read",
- static_cast<monitor_type_t>(
- MONITOR_EXISTING | MONITOR_DEFAULT_ON),
- MONITOR_DEFAULT_START, MONITOR_OVLD_INDEX_SEC_REC_CLUSTER_READS},
-
- {"buffer_index_sec_rec_cluster_reads_avoided", "buffer",
- "Number of secondary record reads avoided triggering cluster read",
- static_cast<monitor_type_t>(
- MONITOR_EXISTING | MONITOR_DEFAULT_ON),
- MONITOR_DEFAULT_START, MONITOR_OVLD_INDEX_SEC_REC_CLUSTER_READS_AVOIDED},
-
{"buffer_data_reads", "buffer",
"Amount of data read in bytes (innodb_data_reads)",
static_cast<monitor_type_t>(
@@ -1081,50 +1069,6 @@ static monitor_info_t innodb_counter_info[] =
MONITOR_EXISTING | MONITOR_DEFAULT_ON | MONITOR_DISPLAY_CURRENT),
MONITOR_DEFAULT_START, MONITOR_OVLD_SRV_PAGE_SIZE},
- /* ========== Counters for DML operations ========== */
- {"module_dml", "dml", "Statistics for DMLs",
- MONITOR_MODULE,
- MONITOR_DEFAULT_START, MONITOR_MODULE_DML_STATS},
-
- {"dml_reads", "dml", "Number of rows read",
- static_cast<monitor_type_t>(MONITOR_EXISTING),
- MONITOR_DEFAULT_START, MONITOR_OLVD_ROW_READ},
-
- {"dml_inserts", "dml", "Number of rows inserted",
- static_cast<monitor_type_t>(
- MONITOR_EXISTING | MONITOR_DEFAULT_ON),
- MONITOR_DEFAULT_START, MONITOR_OLVD_ROW_INSERTED},
-
- {"dml_deletes", "dml", "Number of rows deleted",
- static_cast<monitor_type_t>(
- MONITOR_EXISTING | MONITOR_DEFAULT_ON),
- MONITOR_DEFAULT_START, MONITOR_OLVD_ROW_DELETED},
-
- {"dml_updates", "dml", "Number of rows updated",
- static_cast<monitor_type_t>(
- MONITOR_EXISTING | MONITOR_DEFAULT_ON),
- MONITOR_DEFAULT_START, MONITOR_OLVD_ROW_UPDTATED},
-
- {"dml_system_reads", "dml", "Number of system rows read",
- static_cast<monitor_type_t>(
- MONITOR_EXISTING | MONITOR_DEFAULT_ON),
- MONITOR_DEFAULT_START, MONITOR_OLVD_SYSTEM_ROW_READ},
-
- {"dml_system_inserts", "dml", "Number of system rows inserted",
- static_cast<monitor_type_t>(
- MONITOR_EXISTING | MONITOR_DEFAULT_ON),
- MONITOR_DEFAULT_START, MONITOR_OLVD_SYSTEM_ROW_INSERTED},
-
- {"dml_system_deletes", "dml", "Number of system rows deleted",
- static_cast<monitor_type_t>(
- MONITOR_EXISTING | MONITOR_DEFAULT_ON),
- MONITOR_DEFAULT_START, MONITOR_OLVD_SYSTEM_ROW_DELETED},
-
- {"dml_system_updates", "dml", "Number of system rows updated",
- static_cast<monitor_type_t>(
- MONITOR_EXISTING | MONITOR_DEFAULT_ON),
- MONITOR_DEFAULT_START, MONITOR_OLVD_SYSTEM_ROW_UPDATED},
-
/* ========== Counters for DDL operations ========== */
{"module_ddl", "ddl", "Statistics for DDLs",
MONITOR_MODULE,
@@ -1492,16 +1436,6 @@ srv_mon_process_existing_counter(
value = buf_pool.stat.n_pages_read;
break;
- /* Number of times secondary index lookup triggered cluster lookup */
- case MONITOR_OVLD_INDEX_SEC_REC_CLUSTER_READS:
- value = srv_stats.n_sec_rec_cluster_reads;
- break;
- /* Number of times prefix optimization avoided triggering cluster
- lookup */
- case MONITOR_OVLD_INDEX_SEC_REC_CLUSTER_READS_AVOIDED:
- value = srv_stats.n_sec_rec_cluster_reads_avoided;
- break;
-
/* innodb_data_reads, the total number of data reads */
case MONITOR_OVLD_BYTE_READ:
value = srv_stats.data_read;
@@ -1570,46 +1504,6 @@ srv_mon_process_existing_counter(
value = srv_buf_pool_size;
break;
- /* innodb_rows_read */
- case MONITOR_OLVD_ROW_READ:
- value = srv_stats.n_rows_read;
- break;
-
- /* innodb_rows_inserted */
- case MONITOR_OLVD_ROW_INSERTED:
- value = srv_stats.n_rows_inserted;
- break;
-
- /* innodb_rows_deleted */
- case MONITOR_OLVD_ROW_DELETED:
- value = srv_stats.n_rows_deleted;
- break;
-
- /* innodb_rows_updated */
- case MONITOR_OLVD_ROW_UPDTATED:
- value = srv_stats.n_rows_updated;
- break;
-
- /* innodb_system_rows_read */
- case MONITOR_OLVD_SYSTEM_ROW_READ:
- value = srv_stats.n_system_rows_read;
- break;
-
- /* innodb_system_rows_inserted */
- case MONITOR_OLVD_SYSTEM_ROW_INSERTED:
- value = srv_stats.n_system_rows_inserted;
- break;
-
- /* innodb_system_rows_deleted */
- case MONITOR_OLVD_SYSTEM_ROW_DELETED:
- value = srv_stats.n_system_rows_deleted;
- break;
-
- /* innodb_system_rows_updated */
- case MONITOR_OLVD_SYSTEM_ROW_UPDATED:
- value = srv_stats.n_system_rows_updated;
- break;
-
/* innodb_row_lock_current_waits */
case MONITOR_OVLD_ROW_LOCK_CURRENT_WAIT:
// dirty read without lock_sys.wait_mutex
diff --git a/storage/innobase/srv/srv0srv.cc b/storage/innobase/srv/srv0srv.cc
index 19632884a00..cf31a2e6190 100644
--- a/storage/innobase/srv/srv0srv.cc
+++ b/storage/innobase/srv/srv0srv.cc
@@ -291,10 +291,6 @@ uint srv_fast_shutdown;
/** copy of innodb_status_file; generate a innodb_status.<pid> file */
ibool srv_innodb_status;
-/** innodb_prefix_index_cluster_optimization; whether to optimize
-prefix index queries to skip cluster index lookup when possible */
-my_bool srv_prefix_index_cluster_optimization;
-
/** innodb_stats_transient_sample_pages;
When estimating number of different key values in an index, sample
this many index pages, there are 2 ways to calculate statistics:
@@ -327,16 +323,6 @@ ulong srv_n_spin_wait_rounds;
/** innodb_spin_wait_delay */
uint srv_spin_wait_delay;
-static ulint srv_n_rows_inserted_old;
-static ulint srv_n_rows_updated_old;
-static ulint srv_n_rows_deleted_old;
-static ulint srv_n_rows_read_old;
-static ulint srv_n_system_rows_inserted_old;
-static ulint srv_n_system_rows_updated_old;
-static ulint srv_n_system_rows_deleted_old;
-static ulint srv_n_system_rows_read_old;
-
-ulint srv_truncated_status_writes;
/** Number of initialized rollback segments for persistent undo log */
ulong srv_available_undo_logs;
@@ -682,7 +668,7 @@ static void srv_refresh_innodb_monitor_stats(time_t current_time)
mysql_mutex_lock(&srv_innodb_monitor_mutex);
if (difftime(current_time, srv_last_monitor_time) < 60) {
- /* We referesh InnoDB Monitor values so that averages are
+ /* We refresh InnoDB Monitor values so that averages are
printed from at most 60 last seconds */
mysql_mutex_unlock(&srv_innodb_monitor_mutex);
return;
@@ -699,16 +685,6 @@ static void srv_refresh_innodb_monitor_stats(time_t current_time)
buf_refresh_io_stats();
- srv_n_rows_inserted_old = srv_stats.n_rows_inserted;
- srv_n_rows_updated_old = srv_stats.n_rows_updated;
- srv_n_rows_deleted_old = srv_stats.n_rows_deleted;
- srv_n_rows_read_old = srv_stats.n_rows_read;
-
- srv_n_system_rows_inserted_old = srv_stats.n_system_rows_inserted;
- srv_n_system_rows_updated_old = srv_stats.n_system_rows_updated;
- srv_n_system_rows_deleted_old = srv_stats.n_system_rows_deleted;
- srv_n_system_rows_read_old = srv_stats.n_system_rows_read;
-
mysql_mutex_unlock(&srv_innodb_monitor_mutex);
}
@@ -815,34 +791,36 @@ srv_printf_innodb_monitor(
"--------\n", file);
os_aio_print(file);
- fputs("-------------------------------------\n"
- "INSERT BUFFER AND ADAPTIVE HASH INDEX\n"
- "-------------------------------------\n", file);
ibuf_print(file);
#ifdef BTR_CUR_HASH_ADAPT
- for (ulint i = 0; i < btr_ahi_parts && btr_search_enabled; ++i) {
- const auto part= &btr_search_sys.parts[i];
- part->latch.rd_lock(SRW_LOCK_CALL);
- ut_ad(part->heap->type == MEM_HEAP_FOR_BTR_SEARCH);
- fprintf(file, "Hash table size " ULINTPF
- ", node heap has " ULINTPF " buffer(s)\n",
- part->table.n_cells,
- part->heap->base.count - !part->heap->free_block);
- part->latch.rd_unlock();
- }
+ if (btr_search_enabled) {
+ fputs("-------------------\n"
+ "ADAPTIVE HASH INDEX\n"
+ "-------------------\n", file);
+ for (ulint i = 0; i < btr_ahi_parts; ++i) {
+ const auto part= &btr_search_sys.parts[i];
+ part->latch.rd_lock(SRW_LOCK_CALL);
+ ut_ad(part->heap->type == MEM_HEAP_FOR_BTR_SEARCH);
+ fprintf(file, "Hash table size " ULINTPF
+ ", node heap has " ULINTPF " buffer(s)\n",
+ part->table.n_cells,
+ part->heap->base.count
+ - !part->heap->free_block);
+ part->latch.rd_unlock();
+ }
- /* btr_cur_n_sea_old and btr_cur_n_non_sea_old are protected by
- srv_innodb_monitor_mutex (srv_refresh_innodb_monitor_stats) */
- const ulint with_ahi = btr_cur_n_sea, without_ahi = btr_cur_n_non_sea;
- fprintf(file,
- "%.2f hash searches/s, %.2f non-hash searches/s\n",
- static_cast<double>(with_ahi - btr_cur_n_sea_old)
- / time_elapsed,
- static_cast<double>(without_ahi - btr_cur_n_non_sea_old)
- / time_elapsed);
- btr_cur_n_sea_old = with_ahi;
- btr_cur_n_non_sea_old = without_ahi;
+ const ulint with_ahi = btr_cur_n_sea;
+ const ulint without_ahi = btr_cur_n_non_sea;
+ fprintf(file,
+ "%.2f hash searches/s, %.2f non-hash searches/s\n",
+ static_cast<double>(with_ahi - btr_cur_n_sea_old)
+ / time_elapsed,
+ static_cast<double>(without_ahi - btr_cur_n_non_sea_old)
+ / time_elapsed);
+ btr_cur_n_sea_old = with_ahi;
+ btr_cur_n_non_sea_old = without_ahi;
+ }
#endif /* BTR_CUR_HASH_ADAPT */
fputs("---\n"
@@ -874,63 +852,7 @@ srv_printf_innodb_monitor(
n_reserved);
}
- fprintf(file, "Process ID=0, Main thread ID=0, state: %s\n",
- srv_main_thread_op_info);
- fprintf(file,
- "Number of rows inserted " ULINTPF
- ", updated " ULINTPF
- ", deleted " ULINTPF
- ", read " ULINTPF "\n",
- (ulint) srv_stats.n_rows_inserted,
- (ulint) srv_stats.n_rows_updated,
- (ulint) srv_stats.n_rows_deleted,
- (ulint) srv_stats.n_rows_read);
- fprintf(file,
- "%.2f inserts/s, %.2f updates/s,"
- " %.2f deletes/s, %.2f reads/s\n",
- static_cast<double>(srv_stats.n_rows_inserted
- - srv_n_rows_inserted_old)
- / time_elapsed,
- static_cast<double>(srv_stats.n_rows_updated
- - srv_n_rows_updated_old)
- / time_elapsed,
- static_cast<double>(srv_stats.n_rows_deleted
- - srv_n_rows_deleted_old)
- / time_elapsed,
- static_cast<double>(srv_stats.n_rows_read
- - srv_n_rows_read_old)
- / time_elapsed);
- fprintf(file,
- "Number of system rows inserted " ULINTPF
- ", updated " ULINTPF ", deleted " ULINTPF
- ", read " ULINTPF "\n",
- (ulint) srv_stats.n_system_rows_inserted,
- (ulint) srv_stats.n_system_rows_updated,
- (ulint) srv_stats.n_system_rows_deleted,
- (ulint) srv_stats.n_system_rows_read);
- fprintf(file,
- "%.2f inserts/s, %.2f updates/s,"
- " %.2f deletes/s, %.2f reads/s\n",
- static_cast<double>(srv_stats.n_system_rows_inserted
- - srv_n_system_rows_inserted_old)
- / time_elapsed,
- static_cast<double>(srv_stats.n_system_rows_updated
- - srv_n_system_rows_updated_old)
- / time_elapsed,
- static_cast<double>(srv_stats.n_system_rows_deleted
- - srv_n_system_rows_deleted_old)
- / time_elapsed,
- static_cast<double>(srv_stats.n_system_rows_read
- - srv_n_system_rows_read_old)
- / time_elapsed);
- srv_n_rows_inserted_old = srv_stats.n_rows_inserted;
- srv_n_rows_updated_old = srv_stats.n_rows_updated;
- srv_n_rows_deleted_old = srv_stats.n_rows_deleted;
- srv_n_rows_read_old = srv_stats.n_rows_read;
- srv_n_system_rows_inserted_old = srv_stats.n_system_rows_inserted;
- srv_n_system_rows_updated_old = srv_stats.n_system_rows_updated;
- srv_n_system_rows_deleted_old = srv_stats.n_system_rows_deleted;
- srv_n_system_rows_read_old = srv_stats.n_system_rows_read;
+ fprintf(file, "state: %s\n", srv_main_thread_op_info);
fputs("----------------------------\n"
"END OF INNODB MONITOR OUTPUT\n"
@@ -1032,28 +954,6 @@ srv_export_innodb_status(void)
/ export_vars.innodb_row_lock_waits)
: 0;
- export_vars.innodb_rows_read = srv_stats.n_rows_read;
-
- export_vars.innodb_rows_inserted = srv_stats.n_rows_inserted;
-
- export_vars.innodb_rows_updated = srv_stats.n_rows_updated;
-
- export_vars.innodb_rows_deleted = srv_stats.n_rows_deleted;
-
- export_vars.innodb_system_rows_read = srv_stats.n_system_rows_read;
-
- export_vars.innodb_system_rows_inserted =
- srv_stats.n_system_rows_inserted;
-
- export_vars.innodb_system_rows_updated =
- srv_stats.n_system_rows_updated;
-
- export_vars.innodb_system_rows_deleted =
- srv_stats.n_system_rows_deleted;
-
- export_vars.innodb_truncated_status_writes =
- srv_truncated_status_writes;
-
export_vars.innodb_page_compression_saved = srv_stats.page_compression_saved;
export_vars.innodb_pages_page_compressed = srv_stats.pages_page_compressed;
export_vars.innodb_page_compressed_trim_op = srv_stats.page_compressed_trim_op;
@@ -1081,11 +981,6 @@ srv_export_innodb_status(void)
export_vars.innodb_onlineddl_rowlog_pct_used = onlineddl_rowlog_pct_used;
export_vars.innodb_onlineddl_pct_progress = onlineddl_pct_progress;
- export_vars.innodb_sec_rec_cluster_reads =
- srv_stats.n_sec_rec_cluster_reads;
- export_vars.innodb_sec_rec_cluster_reads_avoided =
- srv_stats.n_sec_rec_cluster_reads_avoided;
-
if (!srv_read_only_mode) {
export_vars.innodb_encryption_rotation_pages_read_from_cache =
crypt_stat.pages_read_from_cache;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/create_table_TODO_SPLIT_ME.result b/storage/mroonga/mysql-test/mroonga/storage/r/create_table_TODO_SPLIT_ME.result
index d2a00b777ec..a09c2fe2beb 100644
--- a/storage/mroonga/mysql-test/mroonga/storage/r/create_table_TODO_SPLIT_ME.result
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/create_table_TODO_SPLIT_ME.result
@@ -64,7 +64,7 @@ drop table t1;
create table t1 (c1 timestamp);
desc t1;
Field Type Null Key Default Extra
-c1 timestamp NO CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP
+c1 timestamp YES NULL
drop table t1;
create table t1 (c1 datetime);
desc t1;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_TODO_SPLIT_ME.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_TODO_SPLIT_ME.result
index b3814331038..16a7e9e67f3 100644
--- a/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_TODO_SPLIT_ME.result
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_TODO_SPLIT_ME.result
@@ -63,7 +63,7 @@ drop table t1;
create table t1 (c1 timestamp primary key) COMMENT = 'engine "innodb"';
desc t1;
Field Type Null Key Default Extra
-c1 timestamp NO PRI CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP
+c1 timestamp NO PRI NULL
drop table t1;
create table t1 (c1 datetime primary key) COMMENT = 'engine "innodb"';
desc t1;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/insert_on_duplicate_key_update_multiple_column_primary_key_myisam.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/insert_on_duplicate_key_update_multiple_column_primary_key_myisam.result
index 198eca2a4db..c03e8c14467 100644
--- a/storage/mroonga/mysql-test/mroonga/wrapper/r/insert_on_duplicate_key_update_multiple_column_primary_key_myisam.result
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/insert_on_duplicate_key_update_multiple_column_primary_key_myisam.result
@@ -8,7 +8,7 @@ PRIMARY KEY (date, title)
SHOW CREATE TABLE diaries;
Table Create Table
diaries CREATE TABLE `diaries` (
- `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+ `date` timestamp NOT NULL,
`title` varchar(100) NOT NULL,
`content` text NOT NULL,
PRIMARY KEY (`date`,`title`)
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/insert_on_duplicate_key_update_multiple_column_unique_index_myisam.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/insert_on_duplicate_key_update_multiple_column_unique_index_myisam.result
index 05a9320667f..ee82a9ebd8e 100644
--- a/storage/mroonga/mysql-test/mroonga/wrapper/r/insert_on_duplicate_key_update_multiple_column_unique_index_myisam.result
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/insert_on_duplicate_key_update_multiple_column_unique_index_myisam.result
@@ -10,7 +10,7 @@ SHOW CREATE TABLE diaries;
Table Create Table
diaries CREATE TABLE `diaries` (
`id` int(11) NOT NULL AUTO_INCREMENT,
- `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+ `date` timestamp NOT NULL,
`title` varchar(100) NOT NULL,
`content` text NOT NULL,
PRIMARY KEY (`id`),
diff --git a/storage/rocksdb/mysql-test/rocksdb/r/innodb_i_s_tables_disabled.result b/storage/rocksdb/mysql-test/rocksdb/r/innodb_i_s_tables_disabled.result
index 04b07292b60..e4ea0bc9787 100644
--- a/storage/rocksdb/mysql-test/rocksdb/r/innodb_i_s_tables_disabled.result
+++ b/storage/rocksdb/mysql-test/rocksdb/r/innodb_i_s_tables_disabled.result
@@ -52,8 +52,6 @@ buffer_pool_pages_free buffer 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL N
buffer_pages_created buffer 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 status_counter Number of pages created (innodb_pages_created)
buffer_pages_written buffer 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 status_counter Number of pages written (innodb_pages_written)
buffer_pages_read buffer 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 status_counter Number of pages read (innodb_pages_read)
-buffer_index_sec_rec_cluster_reads buffer 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 status_counter Number of secondary record reads triggered cluster read
-buffer_index_sec_rec_cluster_reads_avoided buffer 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 status_counter Number of secondary record reads avoided triggering cluster read
buffer_data_reads buffer 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 status_counter Amount of data read in bytes (innodb_data_reads)
buffer_data_written buffer 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 status_counter Amount of data written in bytes (innodb_data_written)
buffer_flush_batch_scanned buffer 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 set_owner Total pages scanned as part of flush batch
@@ -208,14 +206,6 @@ innodb_dict_lru_count_idle server 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NU
innodb_dblwr_writes server 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 status_counter Number of doublewrite operations that have been performed (innodb_dblwr_writes)
innodb_dblwr_pages_written server 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 status_counter Number of pages that have been written for doublewrite operations (innodb_dblwr_pages_written)
innodb_page_size server 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 value InnoDB page size in bytes (innodb_page_size)
-dml_reads dml 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 status_counter Number of rows read
-dml_inserts dml 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 status_counter Number of rows inserted
-dml_deletes dml 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 status_counter Number of rows deleted
-dml_updates dml 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 status_counter Number of rows updated
-dml_system_reads dml 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 status_counter Number of system rows read
-dml_system_inserts dml 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 status_counter Number of system rows inserted
-dml_system_deletes dml 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 status_counter Number of system rows deleted
-dml_system_updates dml 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 status_counter Number of system rows updated
ddl_background_drop_indexes ddl 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 counter Number of indexes waiting to be dropped after failed index creation
ddl_online_create_index ddl 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 counter Number of indexes being created online
ddl_pending_alter_table ddl 0 NULL NULL NULL 0 NULL NULL NULL NULL NULL NULL NULL 0 counter Number of ALTER TABLE, CREATE INDEX, DROP INDEX in progress
diff --git a/storage/spider/ha_spider.cc b/storage/spider/ha_spider.cc
index 53f74d5fc0d..eb691e52b0a 100644
--- a/storage/spider/ha_spider.cc
+++ b/storage/spider/ha_spider.cc
@@ -81,7 +81,6 @@ ha_spider::ha_spider(
ft_current = NULL;
ft_count = 0;
ft_init_without_index_init = FALSE;
- sql_kinds = 0;
error_mode = 0;
use_spatial_index = FALSE;
use_fields = FALSE;
@@ -92,7 +91,6 @@ ha_spider::ha_spider(
prev_index_rnd_init = SPD_NONE;
direct_aggregate_item_first = NULL;
result_link_idx = 0;
- result_list.have_sql_kind_backup = FALSE;
result_list.sqls = NULL;
result_list.insert_sqls = NULL;
result_list.update_sqls = NULL;
@@ -143,7 +141,6 @@ ha_spider::ha_spider(
ft_current = NULL;
ft_count = 0;
ft_init_without_index_init = FALSE;
- sql_kinds = 0;
error_mode = 0;
use_spatial_index = FALSE;
use_fields = FALSE;
@@ -154,7 +151,6 @@ ha_spider::ha_spider(
prev_index_rnd_init = SPD_NONE;
direct_aggregate_item_first = NULL;
result_link_idx = 0;
- result_list.have_sql_kind_backup = FALSE;
result_list.sqls = NULL;
result_list.insert_sqls = NULL;
result_list.update_sqls = NULL;
@@ -486,7 +482,7 @@ error_wide_handler_alloc:
int ha_spider::close()
{
- int error_num = 0, roop_count, error_num2;
+ int error_num= 0, roop_count;
THD *thd = ha_thd();
backup_error_status();
DBUG_ENTER("ha_spider::close");
@@ -513,17 +509,6 @@ int ha_spider::close()
spider_free(spider_current_trx, direct_aggregate_item_first, MYF(0));
direct_aggregate_item_first = direct_aggregate_item_current;
}
- if (is_clone)
- {
- for (roop_count = 0; roop_count < (int) share->link_count; roop_count++)
- {
- if ((error_num2 = close_opened_handler(roop_count, FALSE)))
- {
- if (check_error_mode(error_num2))
- error_num = error_num2;
- }
- }
- }
for (roop_count = share->use_dbton_count - 1; roop_count >= 0; roop_count--)
{
uint dbton_id = share->use_dbton_ids[roop_count];
@@ -982,13 +967,11 @@ int ha_spider::reset()
{
delete direct_aggregate_item_current->item;
direct_aggregate_item_current->item = NULL;
-#ifdef SPIDER_ITEM_STRING_WITHOUT_SET_STR_WITH_COPY_AND_THDPTR
if (direct_aggregate_item_current->init_mem_root)
{
free_root(&direct_aggregate_item_current->mem_root, MYF(0));
direct_aggregate_item_current->init_mem_root = FALSE;
}
-#endif
}
direct_aggregate_item_current = direct_aggregate_item_current->next;
}
@@ -1053,12 +1036,6 @@ int ha_spider::reset()
{
result_list.update_sqls[roop_count].length(0);
- if ((error_num2 = close_opened_handler(roop_count, TRUE)))
- {
- if (check_error_mode(error_num2))
- error_num = error_num2;
- }
-
conn_kind[roop_count] = SPIDER_CONN_KIND_MYSQL;
}
result_list.bulk_update_mode = 0;
@@ -1099,10 +1076,8 @@ int ha_spider::reset()
ft_current = NULL;
ft_count = 0;
ft_init_without_index_init = FALSE;
- sql_kinds = 0;
do_direct_update = FALSE;
prev_index_rnd_init = SPD_NONE;
- result_list.have_sql_kind_backup = FALSE;
result_list.direct_order_limit = FALSE;
result_list.direct_limit_offset = FALSE;
result_list.set_split_read = FALSE;
@@ -1261,8 +1236,7 @@ int ha_spider::index_init(
set_select_column_mode();
}
- if ((error_num = reset_sql_sql(
- SPIDER_SQL_TYPE_SELECT_SQL | SPIDER_SQL_TYPE_HANDLER)))
+ if ((error_num= reset_sql_sql(SPIDER_SQL_TYPE_SELECT_SQL)))
DBUG_RETURN(error_num);
result_list.check_direct_order_limit = FALSE;
prev_index_rnd_init = SPD_INDEX;
@@ -1320,8 +1294,6 @@ int ha_spider::index_read_map_internal(
)
use_spatial_index = TRUE;
- if ((error_num = index_handler_init()))
- DBUG_RETURN(check_error_mode_eof(error_num));
if (is_clone)
{
DBUG_PRINT("info",("spider set pt_clone_last_searcher to %p",
@@ -1334,8 +1306,7 @@ int ha_spider::index_read_map_internal(
start_key.key = key;
start_key.keypart_map = keypart_map;
start_key.flag = find_flag;
- if ((error_num = reset_sql_sql(
- SPIDER_SQL_TYPE_SELECT_SQL | SPIDER_SQL_TYPE_HANDLER)))
+ if ((error_num= reset_sql_sql(SPIDER_SQL_TYPE_SELECT_SQL)))
DBUG_RETURN(error_num);
if ((error_num = spider_set_conn_bg_param(this)))
DBUG_RETURN(error_num);
@@ -1383,7 +1354,6 @@ int ha_spider::index_read_map_internal(
result_list.split_read));
DBUG_PRINT("info",("spider result_list.limit_num=%lld",
result_list.limit_num));
- if (sql_kinds & SPIDER_SQL_KIND_SQL)
{
if (result_list.direct_order_limit)
{
@@ -1410,16 +1380,6 @@ int ha_spider::index_read_map_internal(
DBUG_RETURN(error_num);
}
}
- if (sql_kinds & SPIDER_SQL_KIND_HANDLER)
- {
- if ((error_num = append_limit_sql_part(
- result_list.internal_offset,
- result_list.limit_num,
- SPIDER_SQL_TYPE_HANDLER)))
- {
- DBUG_RETURN(error_num);
- }
- }
int roop_start, roop_end, lock_mode, link_ok;
lock_mode = spider_conn_lock_mode(this);
@@ -1478,13 +1438,8 @@ int ha_spider::index_read_map_internal(
}
} else {
ulong sql_type;
- conn = conns[roop_count];
- if (sql_kind[roop_count] == SPIDER_SQL_KIND_SQL)
- {
- sql_type = SPIDER_SQL_TYPE_SELECT_SQL;
- } else {
- sql_type = SPIDER_SQL_TYPE_HANDLER;
- }
+ conn= conns[roop_count];
+ sql_type= SPIDER_SQL_TYPE_SELECT_SQL;
spider_db_handler *dbton_hdl = dbton_handler[conn->dbton_id];
pthread_mutex_assert_not_owner(&conn->mta_conn_mutex);
if (dbton_hdl->need_lock_before_set_sql_for_exec(sql_type))
@@ -1692,8 +1647,6 @@ int ha_spider::index_read_last_map_internal(
DBUG_RETURN(ER_QUERY_INTERRUPTED);
}
do_direct_update = FALSE;
- if ((error_num = index_handler_init()))
- DBUG_RETURN(check_error_mode_eof(error_num));
if (is_clone)
{
DBUG_PRINT("info",("spider set pt_clone_last_searcher to %p",
@@ -1714,8 +1667,7 @@ int ha_spider::index_read_last_map_internal(
start_key.key = key;
start_key.keypart_map = keypart_map;
start_key.flag = HA_READ_KEY_EXACT;
- if ((error_num = reset_sql_sql(
- SPIDER_SQL_TYPE_SELECT_SQL | SPIDER_SQL_TYPE_HANDLER)))
+ if ((error_num= reset_sql_sql(SPIDER_SQL_TYPE_SELECT_SQL)))
DBUG_RETURN(error_num);
if ((error_num = spider_set_conn_bg_param(this)))
DBUG_RETURN(error_num);
@@ -1751,7 +1703,6 @@ int ha_spider::index_read_last_map_internal(
&start_key, NULL, this))
)
DBUG_RETURN(error_num);
- if (sql_kinds & SPIDER_SQL_KIND_SQL)
{
if (result_list.direct_order_limit)
{
@@ -1778,16 +1729,6 @@ int ha_spider::index_read_last_map_internal(
DBUG_RETURN(error_num);
}
}
- if (sql_kinds & SPIDER_SQL_KIND_HANDLER)
- {
- if ((error_num = append_limit_sql_part(
- result_list.internal_offset,
- result_list.limit_num,
- SPIDER_SQL_TYPE_HANDLER)))
- {
- DBUG_RETURN(error_num);
- }
- }
int roop_start, roop_end, roop_count, tmp_lock_mode, link_ok;
tmp_lock_mode = spider_conn_lock_mode(this);
@@ -1846,13 +1787,8 @@ int ha_spider::index_read_last_map_internal(
}
} else {
ulong sql_type;
- conn = conns[roop_count];
- if (sql_kind[roop_count] == SPIDER_SQL_KIND_SQL)
- {
- sql_type = SPIDER_SQL_TYPE_SELECT_SQL;
- } else {
- sql_type = SPIDER_SQL_TYPE_HANDLER;
- }
+ conn= conns[roop_count];
+ sql_type= SPIDER_SQL_TYPE_SELECT_SQL;
spider_db_handler *dbton_hdl = dbton_handler[conn->dbton_id];
pthread_mutex_assert_not_owner(&conn->mta_conn_mutex);
if (dbton_hdl->need_lock_before_set_sql_for_exec(sql_type))
@@ -2111,25 +2047,19 @@ int ha_spider::index_first_internal(
DBUG_RETURN(ER_QUERY_INTERRUPTED);
}
do_direct_update = FALSE;
- if ((error_num = index_handler_init()))
- DBUG_RETURN(check_error_mode_eof(error_num));
if (is_clone)
{
DBUG_PRINT("info",("spider set pt_clone_last_searcher to %p",
pt_clone_source_handler));
pt_clone_source_handler->pt_clone_last_searcher = this;
}
- if (
- sql_is_empty(SPIDER_SQL_TYPE_HANDLER) ||
- sql_is_empty(SPIDER_SQL_TYPE_SELECT_SQL)
- ) {
-/*
- spider_db_free_one_result_for_start_next(this);
-*/
+ {
+ /*
+ spider_db_free_one_result_for_start_next(this);
+ */
if ((error_num = spider_db_free_result(this, FALSE)))
DBUG_RETURN(error_num);
- if ((error_num = reset_sql_sql(
- SPIDER_SQL_TYPE_SELECT_SQL | SPIDER_SQL_TYPE_HANDLER)))
+ if ((error_num= reset_sql_sql(SPIDER_SQL_TYPE_SELECT_SQL)))
DBUG_RETURN(error_num);
check_direct_order_limit();
@@ -2168,7 +2098,6 @@ int ha_spider::index_first_internal(
NULL, NULL, this))
)
DBUG_RETURN(error_num);
- if (sql_kinds & SPIDER_SQL_KIND_SQL)
{
if (result_list.direct_order_limit)
{
@@ -2195,16 +2124,6 @@ int ha_spider::index_first_internal(
DBUG_RETURN(error_num);
}
}
- if (sql_kinds & SPIDER_SQL_KIND_HANDLER)
- {
- if ((error_num = append_limit_sql_part(
- result_list.internal_offset,
- result_list.limit_num,
- SPIDER_SQL_TYPE_HANDLER)))
- {
- DBUG_RETURN(error_num);
- }
- }
int roop_start, roop_end, roop_count, tmp_lock_mode, link_ok;
tmp_lock_mode = spider_conn_lock_mode(this);
@@ -2263,13 +2182,8 @@ int ha_spider::index_first_internal(
}
} else {
ulong sql_type;
- conn = conns[roop_count];
- if (sql_kind[roop_count] == SPIDER_SQL_KIND_SQL)
- {
- sql_type = SPIDER_SQL_TYPE_SELECT_SQL;
- } else {
- sql_type = SPIDER_SQL_TYPE_HANDLER;
- }
+ conn= conns[roop_count];
+ sql_type= SPIDER_SQL_TYPE_SELECT_SQL;
spider_db_handler *dbton_hdl = dbton_handler[conn->dbton_id];
pthread_mutex_assert_not_owner(&conn->mta_conn_mutex);
if (dbton_hdl->need_lock_before_set_sql_for_exec(sql_type))
@@ -2476,25 +2390,19 @@ int ha_spider::index_last_internal(
DBUG_RETURN(ER_QUERY_INTERRUPTED);
}
do_direct_update = FALSE;
- if ((error_num = index_handler_init()))
- DBUG_RETURN(check_error_mode_eof(error_num));
if (is_clone)
{
DBUG_PRINT("info",("spider set pt_clone_last_searcher to %p",
pt_clone_source_handler));
pt_clone_source_handler->pt_clone_last_searcher = this;
}
- if (
- sql_is_empty(SPIDER_SQL_TYPE_HANDLER) ||
- sql_is_empty(SPIDER_SQL_TYPE_SELECT_SQL)
- ) {
-/*
- spider_db_free_one_result_for_start_next(this);
-*/
+ {
+ /*
+ spider_db_free_one_result_for_start_next(this);
+ */
if ((error_num = spider_db_free_result(this, FALSE)))
DBUG_RETURN(error_num);
- if ((error_num = reset_sql_sql(
- SPIDER_SQL_TYPE_SELECT_SQL | SPIDER_SQL_TYPE_HANDLER)))
+ if ((error_num= reset_sql_sql(SPIDER_SQL_TYPE_SELECT_SQL)))
DBUG_RETURN(error_num);
check_direct_order_limit();
@@ -2533,7 +2441,6 @@ int ha_spider::index_last_internal(
NULL, NULL, this))
)
DBUG_RETURN(error_num);
- if (sql_kinds & SPIDER_SQL_KIND_SQL)
{
if (result_list.direct_order_limit)
{
@@ -2560,16 +2467,6 @@ int ha_spider::index_last_internal(
DBUG_RETURN(error_num);
}
}
- if (sql_kinds & SPIDER_SQL_KIND_HANDLER)
- {
- if ((error_num = append_limit_sql_part(
- result_list.internal_offset,
- result_list.limit_num,
- SPIDER_SQL_TYPE_HANDLER)))
- {
- DBUG_RETURN(error_num);
- }
- }
int roop_start, roop_end, roop_count, tmp_lock_mode, link_ok;
tmp_lock_mode = spider_conn_lock_mode(this);
@@ -2628,13 +2525,8 @@ int ha_spider::index_last_internal(
}
} else {
ulong sql_type;
- conn = conns[roop_count];
- if (sql_kind[roop_count] == SPIDER_SQL_KIND_SQL)
- {
- sql_type = SPIDER_SQL_TYPE_SELECT_SQL;
- } else {
- sql_type = SPIDER_SQL_TYPE_HANDLER;
- }
+ conn= conns[roop_count];
+ sql_type= SPIDER_SQL_TYPE_SELECT_SQL;
spider_db_handler *dbton_hdl = dbton_handler[conn->dbton_id];
pthread_mutex_assert_not_owner(&conn->mta_conn_mutex);
if (dbton_hdl->need_lock_before_set_sql_for_exec(sql_type))
@@ -2893,8 +2785,6 @@ int ha_spider::read_range_first_internal(
}
range_key_part = table->key_info[active_index].key_part;
- if ((error_num = index_handler_init()))
- DBUG_RETURN(check_error_mode_eof(error_num));
if (is_clone)
{
DBUG_PRINT("info",("spider set pt_clone_last_searcher to %p",
@@ -2903,8 +2793,7 @@ int ha_spider::read_range_first_internal(
}
spider_db_free_one_result_for_start_next(this);
check_direct_order_limit();
- if ((error_num = reset_sql_sql(
- SPIDER_SQL_TYPE_SELECT_SQL | SPIDER_SQL_TYPE_HANDLER)))
+ if ((error_num= reset_sql_sql(SPIDER_SQL_TYPE_SELECT_SQL)))
DBUG_RETURN(error_num);
if ((error_num = spider_set_conn_bg_param(this)))
DBUG_RETURN(error_num);
@@ -2941,7 +2830,6 @@ int ha_spider::read_range_first_internal(
start_key, eq_range ? NULL : end_key, this))
)
DBUG_RETURN(error_num);
- if (sql_kinds & SPIDER_SQL_KIND_SQL)
{
if (result_list.direct_order_limit)
{
@@ -2968,16 +2856,6 @@ int ha_spider::read_range_first_internal(
DBUG_RETURN(error_num);
}
}
- if (sql_kinds & SPIDER_SQL_KIND_HANDLER)
- {
- if ((error_num = append_limit_sql_part(
- result_list.internal_offset,
- result_list.limit_num,
- SPIDER_SQL_TYPE_HANDLER)))
- {
- DBUG_RETURN(error_num);
- }
- }
int roop_start, roop_end, roop_count, tmp_lock_mode, link_ok;
tmp_lock_mode = spider_conn_lock_mode(this);
@@ -3036,13 +2914,8 @@ int ha_spider::read_range_first_internal(
}
} else {
ulong sql_type;
- conn = conns[roop_count];
- if (sql_kind[roop_count] == SPIDER_SQL_KIND_SQL)
- {
- sql_type = SPIDER_SQL_TYPE_SELECT_SQL;
- } else {
- sql_type = SPIDER_SQL_TYPE_HANDLER;
- }
+ conn= conns[roop_count];
+ sql_type= SPIDER_SQL_TYPE_SELECT_SQL;
spider_db_handler *dbton_hdl = dbton_handler[conn->dbton_id];
pthread_mutex_assert_not_owner(&conn->mta_conn_mutex);
if (dbton_hdl->need_lock_before_set_sql_for_exec(sql_type))
@@ -3225,12 +3098,12 @@ int ha_spider::read_range_first(
use_pre_call = FALSE;
if ((error_num = read_range_next()))
DBUG_RETURN(error_num);
- DBUG_RETURN(check_ha_range_eof());
+ DBUG_RETURN(0);
}
if ((error_num = read_range_first_internal(table->record[0], start_key,
end_key, eq_range, sorted)))
DBUG_RETURN(error_num);
- DBUG_RETURN(check_ha_range_eof());
+ DBUG_RETURN(0);
}
int ha_spider::read_range_next()
@@ -3261,7 +3134,7 @@ int ha_spider::read_range_next()
if ((error_num = spider_db_seek_next(table->record[0], this, search_link_idx,
table)))
DBUG_RETURN(check_error_mode_eof(error_num));
- DBUG_RETURN(check_ha_range_eof());
+ DBUG_RETURN(0);
}
void ha_spider::reset_no_where_cond()
@@ -3438,8 +3311,6 @@ int ha_spider::multi_range_read_next_first(
DBUG_RETURN(ER_QUERY_INTERRUPTED);
}
do_direct_update = FALSE;
- if ((error_num = index_handler_init()))
- DBUG_RETURN(check_error_mode_eof(error_num));
if (is_clone)
{
DBUG_PRINT("info",("spider set pt_clone_last_searcher to %p",
@@ -3455,17 +3326,13 @@ int ha_spider::multi_range_read_next_first(
DBUG_PRINT("info",("spider result_list.finish_flg = FALSE"));
result_list.finish_flg = FALSE;
result_list.record_num = 0;
- if ((error_num = reset_sql_sql(
- SPIDER_SQL_TYPE_SELECT_SQL | SPIDER_SQL_TYPE_HANDLER)))
+ if ((error_num= reset_sql_sql(SPIDER_SQL_TYPE_SELECT_SQL)))
DBUG_RETURN(error_num);
result_list.desc_flg = FALSE;
result_list.sorted = mrr_is_output_sorted;
result_list.key_info = &table->key_info[active_index];
- if (
- multi_range_num == 1 ||
- result_list.multi_split_read <= 1 ||
- (sql_kinds & SPIDER_SQL_KIND_HANDLER)
- ) {
+ if (multi_range_num == 1 || result_list.multi_split_read <= 1)
+ {
if (wide_handler->keyread)
result_list.keyread = TRUE;
else
@@ -3500,7 +3367,6 @@ int ha_spider::multi_range_read_next_first(
NULL : &mrr_cur_range.end_key, this))
)
DBUG_RETURN(error_num);
- if (sql_kinds & SPIDER_SQL_KIND_SQL)
{
if (result_list.direct_order_limit)
{
@@ -3527,16 +3393,6 @@ int ha_spider::multi_range_read_next_first(
DBUG_RETURN(error_num);
}
}
- if (sql_kinds & SPIDER_SQL_KIND_HANDLER)
- {
- if ((error_num = append_limit_sql_part(
- result_list.internal_offset + result_list.record_num,
- result_list.limit_num,
- SPIDER_SQL_TYPE_HANDLER)))
- {
- DBUG_RETURN(error_num);
- }
- }
int roop_start, roop_end, tmp_lock_mode, link_ok;
tmp_lock_mode = spider_conn_lock_mode(this);
@@ -3593,13 +3449,8 @@ int ha_spider::multi_range_read_next_first(
}
} else {
ulong sql_type;
- conn = conns[roop_count];
- if (sql_kind[roop_count] == SPIDER_SQL_KIND_SQL)
- {
- sql_type = SPIDER_SQL_TYPE_SELECT_SQL;
- } else {
- sql_type = SPIDER_SQL_TYPE_HANDLER;
- }
+ conn= conns[roop_count];
+ sql_type= SPIDER_SQL_TYPE_SELECT_SQL;
spider_db_handler *dbton_hdl = dbton_handler[conn->dbton_id];
pthread_mutex_assert_not_owner(&conn->mta_conn_mutex);
if (dbton_hdl->need_lock_before_set_sql_for_exec(sql_type))
@@ -3769,7 +3620,7 @@ int ha_spider::multi_range_read_next_first(
if (!(error_num = spider_db_fetch(table->record[0], this, table)))
{
*range_info = (char *) mrr_cur_range.ptr;
- DBUG_RETURN(check_ha_range_eof());
+ DBUG_RETURN(0);
}
if (
error_num != HA_ERR_END_OF_FILE &&
@@ -3797,7 +3648,6 @@ int ha_spider::multi_range_read_next_first(
DBUG_RETURN(check_error_mode_eof(0));
}
set_where_to_pos_sql(SPIDER_SQL_TYPE_SELECT_SQL);
- set_where_to_pos_sql(SPIDER_SQL_TYPE_HANDLER);
}
DBUG_PRINT("info",("spider range_res2=%d", range_res));
if (error_num)
@@ -3908,34 +3758,11 @@ int ha_spider::multi_range_read_next_first(
if ((error_num = reset_sql_sql(
SPIDER_SQL_TYPE_SELECT_SQL | SPIDER_SQL_TYPE_TMP_SQL)))
DBUG_RETURN(error_num);
- if ((sql_kinds & SPIDER_SQL_KIND_SQL))
- {
- for (roop_count = 0; roop_count < (int) share->link_count;
- roop_count++)
- {
- result_list.sql_kind_backup[roop_count] = sql_kind[roop_count];
- sql_kind[roop_count] = SPIDER_SQL_KIND_SQL;
- }
- result_list.sql_kinds_backup = sql_kinds;
- sql_kinds = SPIDER_SQL_KIND_SQL;
- result_list.have_sql_kind_backup = TRUE;
- }
}
memset(result_list.tmp_table_join_first, 0xFF,
share->link_bitmap_size);
} else {
result_list.tmp_table_join = FALSE;
- if (result_list.have_sql_kind_backup)
- {
- for (roop_count = 0; roop_count < (int) share->link_count;
- roop_count++)
- {
- sql_kind[roop_count] =
- result_list.sql_kind_backup[roop_count];
- }
- sql_kinds = result_list.sql_kinds_backup;
- result_list.have_sql_kind_backup = FALSE;
- }
}
result_list.tmp_table_join_break_after_get_next = FALSE;
@@ -4250,13 +4077,8 @@ int ha_spider::multi_range_read_next_first(
}
} else {
ulong sql_type;
- conn = conns[roop_count];
- if (sql_kind[roop_count] == SPIDER_SQL_KIND_SQL)
- {
- sql_type = SPIDER_SQL_TYPE_SELECT_SQL | SPIDER_SQL_TYPE_TMP_SQL;
- } else {
- sql_type = SPIDER_SQL_TYPE_HANDLER;
- }
+ conn= conns[roop_count];
+ sql_type= SPIDER_SQL_TYPE_SELECT_SQL | SPIDER_SQL_TYPE_TMP_SQL;
spider_db_handler *dbton_hdl = dbton_handler[conn->dbton_id];
pthread_mutex_assert_not_owner(&conn->mta_conn_mutex);
if (dbton_hdl->need_lock_before_set_sql_for_exec(sql_type))
@@ -4530,8 +4352,7 @@ int ha_spider::multi_range_read_next_first(
DBUG_RETURN(check_error_mode_eof(0));
}
multi_range_cnt = 0;
- if ((error_num = reset_sql_sql(
- SPIDER_SQL_TYPE_SELECT_SQL | SPIDER_SQL_TYPE_HANDLER)))
+ if ((error_num= reset_sql_sql(SPIDER_SQL_TYPE_SELECT_SQL)))
DBUG_RETURN(error_num);
} while (!error_num);
}
@@ -4604,11 +4425,8 @@ int ha_spider::multi_range_read_next_next(
pt_clone_source_handler));
pt_clone_source_handler->pt_clone_last_searcher = this;
}
- if (
- multi_range_num == 1 ||
- result_list.multi_split_read <= 1 ||
- (sql_kinds & SPIDER_SQL_KIND_HANDLER)
- ) {
+ if (multi_range_num == 1 || result_list.multi_split_read <= 1)
+ {
if (!(error_num = spider_db_seek_next(table->record[0], this,
search_link_idx, table)))
{
@@ -4648,7 +4466,6 @@ int ha_spider::multi_range_read_next_next(
DBUG_RETURN(check_error_mode_eof(0));
}
set_where_to_pos_sql(SPIDER_SQL_TYPE_SELECT_SQL);
- set_where_to_pos_sql(SPIDER_SQL_TYPE_HANDLER);
result_list.limit_num =
result_list.internal_limit - result_list.record_num >=
result_list.split_read ?
@@ -4661,7 +4478,6 @@ int ha_spider::multi_range_read_next_next(
NULL : &mrr_cur_range.end_key, this))
)
DBUG_RETURN(error_num);
- if (sql_kinds & SPIDER_SQL_KIND_SQL)
{
if (result_list.direct_order_limit)
{
@@ -4688,16 +4504,6 @@ int ha_spider::multi_range_read_next_next(
DBUG_RETURN(error_num);
}
}
- if (sql_kinds & SPIDER_SQL_KIND_HANDLER)
- {
- if ((error_num = append_limit_sql_part(
- result_list.internal_offset + result_list.record_num,
- result_list.limit_num,
- SPIDER_SQL_TYPE_HANDLER)))
- {
- DBUG_RETURN(error_num);
- }
- }
int roop_start, roop_end, tmp_lock_mode, link_ok;
tmp_lock_mode = spider_conn_lock_mode(this);
@@ -4754,13 +4560,8 @@ int ha_spider::multi_range_read_next_next(
}
} else {
ulong sql_type;
- conn = conns[roop_count];
- if (sql_kind[roop_count] == SPIDER_SQL_KIND_SQL)
- {
- sql_type = SPIDER_SQL_TYPE_SELECT_SQL;
- } else {
- sql_type = SPIDER_SQL_TYPE_HANDLER;
- }
+ conn= conns[roop_count];
+ sql_type= SPIDER_SQL_TYPE_SELECT_SQL;
spider_db_handler *dbton_hdl = dbton_handler[conn->dbton_id];
pthread_mutex_assert_not_owner(&conn->mta_conn_mutex);
if (dbton_hdl->need_lock_before_set_sql_for_exec(sql_type))
@@ -4929,7 +4730,7 @@ int ha_spider::multi_range_read_next_next(
if (!(error_num = spider_db_fetch(table->record[0], this, table)))
{
*range_info = (char *) mrr_cur_range.ptr;
- DBUG_RETURN(check_ha_range_eof());
+ DBUG_RETURN(0);
}
if (
error_num != HA_ERR_END_OF_FILE &&
@@ -5032,8 +4833,7 @@ int ha_spider::multi_range_read_next_next(
}
result_list.record_num = 0;
- if ((error_num = reset_sql_sql(
- SPIDER_SQL_TYPE_SELECT_SQL | SPIDER_SQL_TYPE_HANDLER)))
+ if ((error_num= reset_sql_sql(SPIDER_SQL_TYPE_SELECT_SQL)))
DBUG_RETURN(error_num);
bool tmp_high_priority = wide_handler->high_priority;
@@ -5074,34 +4874,11 @@ int ha_spider::multi_range_read_next_next(
if ((error_num = reset_sql_sql(
SPIDER_SQL_TYPE_SELECT_SQL | SPIDER_SQL_TYPE_TMP_SQL)))
DBUG_RETURN(error_num);
- if ((sql_kinds & SPIDER_SQL_KIND_SQL))
- {
- for (roop_count = 0; roop_count < (int) share->link_count;
- roop_count++)
- {
- result_list.sql_kind_backup[roop_count] = sql_kind[roop_count];
- sql_kind[roop_count] = SPIDER_SQL_KIND_SQL;
- }
- result_list.sql_kinds_backup = sql_kinds;
- sql_kinds = SPIDER_SQL_KIND_SQL;
- result_list.have_sql_kind_backup = TRUE;
- }
}
memset(result_list.tmp_table_join_first, 0xFF,
share->link_bitmap_size);
} else {
result_list.tmp_table_join = FALSE;
- if (result_list.have_sql_kind_backup)
- {
- for (roop_count = 0; roop_count < (int) share->link_count;
- roop_count++)
- {
- sql_kind[roop_count] =
- result_list.sql_kind_backup[roop_count];
- }
- sql_kinds = result_list.sql_kinds_backup;
- result_list.have_sql_kind_backup = FALSE;
- }
}
if (result_list.tmp_table_join)
@@ -5404,13 +5181,8 @@ int ha_spider::multi_range_read_next_next(
}
} else {
ulong sql_type;
- conn = conns[roop_count];
- if (sql_kind[roop_count] == SPIDER_SQL_KIND_SQL)
- {
- sql_type = SPIDER_SQL_TYPE_SELECT_SQL | SPIDER_SQL_TYPE_TMP_SQL;
- } else {
- sql_type = SPIDER_SQL_TYPE_HANDLER;
- }
+ conn= conns[roop_count];
+ sql_type= SPIDER_SQL_TYPE_SELECT_SQL | SPIDER_SQL_TYPE_TMP_SQL;
spider_db_handler *dbton_hdl = dbton_handler[conn->dbton_id];
pthread_mutex_assert_not_owner(&conn->mta_conn_mutex);
if (dbton_hdl->need_lock_before_set_sql_for_exec(sql_type))
@@ -5682,8 +5454,7 @@ int ha_spider::multi_range_read_next_next(
DBUG_RETURN(check_error_mode_eof(0));
}
multi_range_cnt = 0;
- if ((error_num = reset_sql_sql(
- SPIDER_SQL_TYPE_SELECT_SQL | SPIDER_SQL_TYPE_HANDLER)))
+ if ((error_num= reset_sql_sql(SPIDER_SQL_TYPE_SELECT_SQL)))
DBUG_RETURN(error_num);
} while (!error_num);
}
@@ -5788,8 +5559,7 @@ int ha_spider::rnd_init(
result_list.keyread = FALSE;
init_rnd_handler = FALSE;
- if ((error_num = reset_sql_sql(
- SPIDER_SQL_TYPE_SELECT_SQL | SPIDER_SQL_TYPE_HANDLER)))
+ if ((error_num= reset_sql_sql(SPIDER_SQL_TYPE_SELECT_SQL)))
DBUG_RETURN(error_num);
result_list.check_direct_order_limit = FALSE;
}
@@ -5845,8 +5615,6 @@ int ha_spider::rnd_next_internal(
{
if ((error_num = spider_set_conn_bg_param(this)))
DBUG_RETURN(error_num);
- if ((error_num = rnd_handler_init()))
- DBUG_RETURN(check_error_mode_eof(error_num));
check_direct_order_limit();
check_select_column(TRUE);
@@ -5919,7 +5687,6 @@ int ha_spider::rnd_next_internal(
result_list.limit_num =
result_list.internal_limit >= result_list.split_read ?
result_list.split_read : result_list.internal_limit;
- if (sql_kinds & SPIDER_SQL_KIND_SQL)
{
if ((error_num = append_limit_sql_part(
result_list.internal_offset,
@@ -5935,16 +5702,6 @@ int ha_spider::rnd_next_internal(
DBUG_RETURN(error_num);
}
}
- if (sql_kinds & SPIDER_SQL_KIND_HANDLER)
- {
- if ((error_num = append_limit_sql_part(
- result_list.internal_offset,
- result_list.limit_num,
- SPIDER_SQL_TYPE_HANDLER)))
- {
- DBUG_RETURN(error_num);
- }
- }
int roop_start, roop_end, roop_count, tmp_lock_mode, link_ok;
tmp_lock_mode = spider_conn_lock_mode(this);
@@ -6004,12 +5761,7 @@ int ha_spider::rnd_next_internal(
} else {
SPIDER_CONN *conn = conns[roop_count];
ulong sql_type;
- if (sql_kind[roop_count] == SPIDER_SQL_KIND_SQL)
- {
- sql_type = SPIDER_SQL_TYPE_SELECT_SQL;
- } else {
- sql_type = SPIDER_SQL_TYPE_HANDLER;
- }
+ sql_type= SPIDER_SQL_TYPE_SELECT_SQL;
spider_db_handler *dbton_hdl = dbton_handler[conn->dbton_id];
pthread_mutex_assert_not_owner(&conn->mta_conn_mutex);
if (dbton_hdl->need_lock_before_set_sql_for_exec(sql_type))
@@ -6365,7 +6117,7 @@ _ft_vft spider_ft_vft = {
int ha_spider::ft_init()
{
- int roop_count, error_num;
+ int error_num;
DBUG_ENTER("ha_spider::ft_init");
DBUG_PRINT("info",("spider this=%p", this));
if (store_error_num)
@@ -6401,9 +6153,6 @@ int ha_spider::ft_init()
ft_init_and_first = TRUE;
- for (roop_count = 0; roop_count < (int) share->link_count; roop_count++)
- sql_kind[roop_count] = SPIDER_SQL_KIND_SQL;
- sql_kinds = SPIDER_SQL_KIND_SQL;
DBUG_RETURN(0);
}
@@ -6546,7 +6295,6 @@ int ha_spider::ft_read_internal(
append_group_by_sql_part(NULL, 0, SPIDER_SQL_TYPE_SELECT_SQL)))
DBUG_RETURN(error_num);
}
- if (sql_kinds & SPIDER_SQL_KIND_SQL)
{
if ((error_num = append_limit_sql_part(
result_list.internal_offset,
@@ -6562,16 +6310,6 @@ int ha_spider::ft_read_internal(
DBUG_RETURN(error_num);
}
}
- if (sql_kinds & SPIDER_SQL_KIND_HANDLER)
- {
- if ((error_num = append_limit_sql_part(
- result_list.internal_offset,
- result_list.limit_num,
- SPIDER_SQL_TYPE_HANDLER)))
- {
- DBUG_RETURN(error_num);
- }
- }
int roop_start, roop_end, roop_count, tmp_lock_mode, link_ok;
tmp_lock_mode = spider_conn_lock_mode(this);
@@ -8415,7 +8153,6 @@ bool ha_spider::check_direct_update_sql_part(
DBUG_RETURN(FALSE);
}
-#ifdef SPIDER_MDEV_16246
/**
Perform initialization for a direct update request.
@@ -8428,9 +8165,6 @@ bool ha_spider::check_direct_update_sql_part(
int ha_spider::direct_update_rows_init(
List<Item> *update_fields
)
-#else
-int ha_spider::direct_update_rows_init()
-#endif
{
st_select_lex *select_lex;
longlong select_limit;
@@ -8547,11 +8281,8 @@ int ha_spider::direct_update_rows(
table_share->db.str, table_share->table_name.str);
DBUG_RETURN(ER_SPIDER_READ_ONLY_NUM);
}
- if (
- (active_index != MAX_KEY && (error_num = index_handler_init())) ||
- (active_index == MAX_KEY && (error_num = rnd_handler_init())) ||
- (error_num = spider_db_direct_update(this, table, update_rows, found_rows))
- )
+ if ((error_num=
+ spider_db_direct_update(this, table, update_rows, found_rows)))
DBUG_RETURN(check_error_mode(error_num));
DBUG_RETURN(0);
@@ -8693,11 +8424,7 @@ int ha_spider::direct_delete_rows(
table_share->db.str, table_share->table_name.str);
DBUG_RETURN(ER_SPIDER_READ_ONLY_NUM);
}
- if (
- (active_index != MAX_KEY && (error_num = index_handler_init())) ||
- (active_index == MAX_KEY && (error_num = rnd_handler_init())) ||
- (error_num = spider_db_direct_delete(this, table, delete_rows))
- )
+ if ((error_num= spider_db_direct_delete(this, table, delete_rows)))
DBUG_RETURN(check_error_mode(error_num));
DBUG_RETURN(0);
@@ -8706,7 +8433,7 @@ int ha_spider::direct_delete_rows(
int ha_spider::delete_all_rows()
{
- int error_num, roop_count;
+ int error_num;
THD *thd = ha_thd();
backup_error_status();
DBUG_ENTER("ha_spider::delete_all_rows");
@@ -8720,9 +8447,6 @@ int ha_spider::delete_all_rows()
DBUG_RETURN(ER_SPIDER_READ_ONLY_NUM);
}
do_direct_update = FALSE;
- sql_kinds = SPIDER_SQL_KIND_SQL;
- for (roop_count = 0; roop_count < (int) share->link_count; roop_count++)
- sql_kind[roop_count] = SPIDER_SQL_KIND_SQL;
if ((error_num = spider_db_delete_all_rows(this)))
DBUG_RETURN(check_error_mode(error_num));
if (wide_handler->sql_command == SQLCOM_TRUNCATE &&
@@ -8744,7 +8468,7 @@ int ha_spider::delete_all_rows()
int ha_spider::truncate()
{
- int error_num, roop_count;
+ int error_num;
THD *thd = ha_thd();
backup_error_status();
DBUG_ENTER("ha_spider::truncate");
@@ -8761,9 +8485,6 @@ int ha_spider::truncate()
DBUG_RETURN(error_num);
}
do_direct_update = FALSE;
- sql_kinds = SPIDER_SQL_KIND_SQL;
- for (roop_count = 0; roop_count < (int) share->link_count; roop_count++)
- sql_kind[roop_count] = SPIDER_SQL_KIND_SQL;
if ((error_num = spider_db_delete_all_rows(this)))
DBUG_RETURN(check_error_mode(error_num));
if (wide_handler->sql_command == SQLCOM_TRUNCATE &&
@@ -10116,7 +9837,6 @@ uint ha_spider::check_partitioned()
void ha_spider::check_direct_order_limit()
{
- int roop_count;
DBUG_ENTER("ha_spider::check_direct_order_limit");
DBUG_PRINT("info",("spider this=%p", this));
if (!result_list.check_direct_order_limit)
@@ -10124,9 +9844,6 @@ void ha_spider::check_direct_order_limit()
if (spider_check_direct_order_limit(this))
{
result_list.direct_order_limit = TRUE;
- sql_kinds = SPIDER_SQL_KIND_SQL;
- for (roop_count = 0; roop_count < (int) share->link_count; roop_count++)
- sql_kind[roop_count] = SPIDER_SQL_KIND_SQL;
} else
result_list.direct_order_limit = FALSE;
@@ -10212,35 +9929,6 @@ bool ha_spider::is_sole_projection_field(
DBUG_RETURN( TRUE );
}
-int ha_spider::check_ha_range_eof()
-{
- DBUG_ENTER("ha_spider::check_ha_range_eof");
- DBUG_PRINT("info",("spider this=%p", this));
- const key_range *end_key = result_list.end_key;
- DBUG_PRINT("info",("spider use_both_key=%s",
- result_list.use_both_key ? "TRUE" : "FALSE"));
- DBUG_PRINT("info",("spider sql_kind[%u]=%u",
- search_link_idx, sql_kind[search_link_idx]));
- DBUG_PRINT("info",("spider sql_command=%u", wide_handler->sql_command));
- if (
- result_list.use_both_key &&
- (sql_kind[search_link_idx] & SPIDER_SQL_KIND_HANDLER) &&
- wide_handler->sql_command != SQLCOM_HA_READ
- ) {
- int cmp_result = key_cmp(result_list.key_info->key_part,
- end_key->key, end_key->length);
- DBUG_PRINT("info",("spider cmp_result=%d", cmp_result));
- if (
- cmp_result > 0 ||
- (end_key->flag == HA_READ_BEFORE_KEY && !cmp_result)
- ) {
- table->status = STATUS_NOT_FOUND;
- DBUG_RETURN(HA_ERR_END_OF_FILE);
- }
- }
- DBUG_RETURN(0);
-}
-
int ha_spider::drop_tmp_tables()
{
int error_num = 0, tmp_error_num, need_mon;
@@ -10386,262 +10074,6 @@ int ha_spider::drop_tmp_tables()
DBUG_RETURN(error_num);
}
-bool ha_spider::handler_opened(
- int link_idx,
- uint tgt_conn_kind
-) {
- DBUG_ENTER("ha_spider::handler_opened");
- DBUG_PRINT("info",("spider this=%p", this));
- DBUG_PRINT("info",("spider link_idx=%d", link_idx));
- DBUG_PRINT("info",("spider tgt_conn_kind=%u", tgt_conn_kind));
- if (
- spider_bit_is_set(m_handler_opened, link_idx)
- ) {
- DBUG_PRINT("info",("spider TRUE"));
- DBUG_RETURN(TRUE);
- }
- DBUG_PRINT("info",("spider FALSE"));
- DBUG_RETURN(FALSE);
-}
-
-void ha_spider::set_handler_opened(
- int link_idx
-) {
- DBUG_ENTER("ha_spider::set_handler_opened");
- DBUG_PRINT("info",("spider this=%p", this));
- spider_set_bit(m_handler_opened, link_idx);
- DBUG_VOID_RETURN;
-}
-
-void ha_spider::clear_handler_opened(
- int link_idx,
- uint tgt_conn_kind
-) {
- DBUG_ENTER("ha_spider::clear_handler_opened");
- DBUG_PRINT("info",("spider this=%p", this));
- spider_clear_bit(m_handler_opened, link_idx);
- DBUG_VOID_RETURN;
-}
-
-int ha_spider::close_opened_handler(
- int link_idx,
- bool release_conn
-) {
- int error_num = 0, error_num2;
- DBUG_ENTER("ha_spider::close_opened_handler");
- DBUG_PRINT("info",("spider this=%p", this));
-
- if (spider_bit_is_set(m_handler_opened, link_idx))
- {
- if ((error_num2 = spider_db_close_handler(this,
- conns[link_idx], link_idx, SPIDER_CONN_KIND_MYSQL))
- ) {
- if (
- share->monitoring_kind[link_idx] &&
- need_mons[link_idx]
- ) {
- error_num2 = spider_ping_table_mon_from_table(
- wide_handler->trx,
- wide_handler->trx->thd,
- share,
- link_idx,
- (uint32) share->monitoring_sid[link_idx],
- share->table_name,
- share->table_name_length,
- conn_link_idx[link_idx],
- NULL,
- 0,
- share->monitoring_kind[link_idx],
- share->monitoring_limit[link_idx],
- share->monitoring_flag[link_idx],
- TRUE
- );
- }
- error_num = error_num2;
- }
- spider_clear_bit(m_handler_opened, link_idx);
- if (release_conn && !conns[link_idx]->join_trx)
- {
- spider_free_conn_from_trx(wide_handler->trx, conns[link_idx],
- FALSE, FALSE, NULL);
- conns[link_idx] = NULL;
- }
- }
- DBUG_RETURN(error_num);
-}
-
-int ha_spider::index_handler_init()
-{
- int lock_mode, error_num;
- int roop_start, roop_end, roop_count;
- DBUG_ENTER("ha_spider::index_handler_init");
- DBUG_PRINT("info",("spider this=%p", this));
- if (!init_index_handler)
- {
- init_index_handler = TRUE;
- lock_mode = spider_conn_lock_mode(this);
- if (lock_mode)
- {
- /* "for update" or "lock in share mode" */
- roop_start = spider_conn_link_idx_next(share->link_statuses,
- conn_link_idx, -1, share->link_count,
- SPIDER_LINK_STATUS_RECOVERY);
- roop_end = share->link_count;
- } else {
- roop_start = search_link_idx;
- roop_end = search_link_idx + 1;
- }
- sql_kinds = 0;
- direct_update_kinds = 0;
- for (roop_count = roop_start; roop_count < roop_end;
- roop_count = spider_conn_link_idx_next(share->link_statuses,
- conn_link_idx, roop_count, share->link_count,
- SPIDER_LINK_STATUS_RECOVERY)
- ) {
- if (
- spider_conn_use_handler(this, lock_mode, roop_count) &&
- spider_conn_need_open_handler(this, active_index, roop_count)
- ) {
- if ((error_num = spider_db_open_handler(this,
- conns[roop_count]
- , roop_count))
- ) {
- if (
- share->monitoring_kind[roop_count] &&
- need_mons[roop_count]
- ) {
- error_num = spider_ping_table_mon_from_table(
- wide_handler->trx,
- wide_handler->trx->thd,
- share,
- roop_count,
- (uint32) share->monitoring_sid[roop_count],
- share->table_name,
- share->table_name_length,
- conn_link_idx[roop_count],
- NULL,
- 0,
- share->monitoring_kind[roop_count],
- share->monitoring_limit[roop_count],
- share->monitoring_flag[roop_count],
- TRUE
- );
- }
- DBUG_RETURN(error_num);
- }
- set_handler_opened(roop_count);
- }
- }
- if (sql_kinds & SPIDER_SQL_KIND_HANDLER)
- {
- st_select_lex *select_lex;
- longlong select_limit;
- longlong offset_limit;
- spider_get_select_limit(this, &select_lex, &select_limit, &offset_limit);
- DBUG_PRINT("info",("spider SPIDER_SQL_KIND_HANDLER"));
- result_list.semi_split_read = 1;
- result_list.semi_split_read_limit = 9223372036854775807LL;
- if (select_limit == 9223372036854775807LL)
- {
- DBUG_PRINT("info",("spider set limit to 1"));
- result_list.semi_split_read_base = 1;
- result_list.split_read = 1;
- } else {
- DBUG_PRINT("info",("spider set limit to %lld", select_limit));
- result_list.semi_split_read_base = select_limit;
- result_list.split_read = select_limit;
- }
- }
- }
- DBUG_RETURN(0);
-}
-
-int ha_spider::rnd_handler_init()
-{
- int error_num, lock_mode;
- int roop_start, roop_end, roop_count;
- DBUG_ENTER("ha_spider::rnd_handler_init");
- DBUG_PRINT("info",("spider this=%p", this));
- if (!init_rnd_handler)
- {
- init_rnd_handler = TRUE;
- lock_mode = spider_conn_lock_mode(this);
- if (lock_mode)
- {
- /* "for update" or "lock in share mode" */
- roop_start = spider_conn_link_idx_next(share->link_statuses,
- conn_link_idx, -1, share->link_count,
- SPIDER_LINK_STATUS_RECOVERY);
- roop_end = share->link_count;
- } else {
- roop_start = search_link_idx;
- roop_end = search_link_idx + 1;
- }
- sql_kinds = 0;
- direct_update_kinds = 0;
- for (roop_count = roop_start; roop_count < roop_end;
- roop_count = spider_conn_link_idx_next(share->link_statuses,
- conn_link_idx, roop_count, share->link_count,
- SPIDER_LINK_STATUS_RECOVERY)
- ) {
- if (
- spider_conn_use_handler(this, lock_mode, roop_count) &&
- spider_conn_need_open_handler(this, MAX_KEY, roop_count)
- ) {
- if ((error_num = spider_db_open_handler(this,
- conns[roop_count]
- , roop_count))
- ) {
- if (
- share->monitoring_kind[roop_count] &&
- need_mons[roop_count]
- ) {
- error_num = spider_ping_table_mon_from_table(
- wide_handler->trx,
- wide_handler->trx->thd,
- share,
- roop_count,
- (uint32) share->monitoring_sid[roop_count],
- share->table_name,
- share->table_name_length,
- conn_link_idx[roop_count],
- NULL,
- 0,
- share->monitoring_kind[roop_count],
- share->monitoring_limit[roop_count],
- share->monitoring_flag[roop_count],
- TRUE
- );
- }
- DBUG_RETURN(error_num);
- }
- set_handler_opened(roop_count);
- }
- }
- if (sql_kinds & SPIDER_SQL_KIND_HANDLER)
- {
- st_select_lex *select_lex;
- longlong select_limit;
- longlong offset_limit;
- spider_get_select_limit(this, &select_lex, &select_limit, &offset_limit);
- DBUG_PRINT("info",("spider SPIDER_SQL_KIND_HANDLER"));
- result_list.semi_split_read = 1;
- result_list.semi_split_read_limit = 9223372036854775807LL;
- if (select_limit == 9223372036854775807LL)
- {
- DBUG_PRINT("info",("spider set limit to 1"));
- result_list.semi_split_read_base = 1;
- result_list.split_read = 1;
- } else {
- DBUG_PRINT("info",("spider set limit to %lld", select_limit));
- result_list.semi_split_read_base = select_limit;
- result_list.split_read = select_limit;
- }
- }
- }
- DBUG_RETURN(0);
-}
-
void ha_spider::set_error_mode()
{
THD *thd = ha_thd();
@@ -12587,26 +12019,6 @@ int ha_spider::print_item_type(
DBUG_RETURN(0);
}
-bool ha_spider::support_use_handler_sql(
- int use_handler
-) {
- uint roop_count, dbton_id;
- spider_db_handler *dbton_hdl;
- DBUG_ENTER("ha_spider::support_use_handler_sql");
- for (roop_count = 0; roop_count < share->use_sql_dbton_count; roop_count++)
- {
- dbton_id = share->use_sql_dbton_ids[roop_count];
- dbton_hdl = dbton_handler[dbton_id];
- if (
- dbton_hdl->first_link_idx >= 0 &&
- !dbton_hdl->support_use_handler(use_handler)
- ) {
- DBUG_RETURN(FALSE);
- }
- }
- DBUG_RETURN(TRUE);
-}
-
int ha_spider::init_union_table_name_pos_sql()
{
int error_num;
diff --git a/storage/spider/ha_spider.h b/storage/spider/ha_spider.h
index 579700d855b..4dffdf78553 100644
--- a/storage/spider/ha_spider.h
+++ b/storage/spider/ha_spider.h
@@ -59,8 +59,6 @@ public:
const char *mem_calc_func_name;
const char *mem_calc_file_name;
ulong mem_calc_line_no;
- uint sql_kinds;
- uint *sql_kind;
ulonglong *connection_ids;
uint conn_kinds;
uint *conn_kind;
@@ -138,9 +136,6 @@ public:
ulonglong *db_request_id;
uchar *db_request_phase;
- uchar *m_handler_opened;
- uint *m_handler_id;
- char **m_handler_cid;
bool do_direct_update;
uint direct_update_kinds;
spider_index_rnd_init prev_index_rnd_init;
@@ -427,13 +422,9 @@ public:
longlong select_limit,
longlong offset_limit
);
-#ifdef SPIDER_MDEV_16246
int direct_update_rows_init(
List<Item> *update_fields
);
-#else
- int direct_update_rows_init();
-#endif
int direct_update_rows(
ha_rows *update_rows,
ha_rows *found_row
@@ -551,25 +542,7 @@ public:
bool is_sole_projection_field(
uint16 field_index
);
- int check_ha_range_eof();
int drop_tmp_tables();
- bool handler_opened(
- int link_idx,
- uint tgt_conn_kind
- );
- void set_handler_opened(
- int link_idx
- );
- void clear_handler_opened(
- int link_idx,
- uint tgt_conn_kind
- );
- int close_opened_handler(
- int link_idx,
- bool release_conn
- );
- int index_handler_init();
- int rnd_handler_init();
void set_error_mode();
void backup_error_status();
int check_error_mode(
@@ -813,9 +786,6 @@ public:
const char *alias,
uint alias_length
);
- bool support_use_handler_sql(
- int use_handler
- );
int init_union_table_name_pos_sql();
int set_union_table_name_pos_sql();
int append_lock_tables_list();
diff --git a/storage/spider/mysql-test/spider/bugfix/r/index.result b/storage/spider/mysql-test/spider/bugfix/r/index.result
index 2aa0b56ef06..3563744997b 100644
--- a/storage/spider/mysql-test/spider/bugfix/r/index.result
+++ b/storage/spider/mysql-test/spider/bugfix/r/index.result
@@ -64,15 +64,6 @@ create table auto_test_local.t (a int, b char(1), primary key(a desc));
insert into auto_test_local.t VALUES (1,'f'),(2,'g'),(3,'j'), (4,'i'),(5,'h');
create table ts (a int, b char(1), primary key(a desc))
engine=spider comment='wrapper "mysql", srv "s_1", table "t"';
-set spider_use_handler=3;
-Warnings:
-Warning 1287 '@@spider_use_handler' is deprecated and will be removed in a future release
-select a, b from ts where a > 0 and b = 'g' order by a;
-a b
-2 g
-set spider_use_handler=default;
-Warnings:
-Warning 1287 '@@spider_use_handler' is deprecated and will be removed in a future release
select a, b from ts where a > 0 and b = 'g' order by a;
a b
2 g
diff --git a/storage/spider/mysql-test/spider/bugfix/r/mdev_29855.result b/storage/spider/mysql-test/spider/bugfix/r/mdev_29855.result
deleted file mode 100644
index 568613368a3..00000000000
--- a/storage/spider/mysql-test/spider/bugfix/r/mdev_29855.result
+++ /dev/null
@@ -1,36 +0,0 @@
-#
-# MDEV-29855 Crash with SPIDER_DIRECT_SQL and spider_udf_ds_use_real_table=1
-#
-for master_1
-for child2
-child2_1
-child2_2
-child2_3
-for child3
-connection child2_1;
-CREATE DATABASE auto_test_remote;
-USE auto_test_remote;
-CREATE TABLE tbl_a (
-a INT
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-connection master_1;
-CREATE DATABASE auto_test_local;
-USE auto_test_local;
-CREATE TABLE tbl_a (
-a INT
-) ENGINE=Spider DEFAULT CHARSET=utf8 COMMENT='table "tbl_a", srv "s_2_1"';
-SET spider_udf_ds_use_real_table=1;
-Warnings:
-Warning 1287 '@@spider_udf_ds_use_real_table' is deprecated and will be removed in a future release
-SELECT SPIDER_DIRECT_SQL('select 1 as 1', 'tbl_a', 'srv "s_2_1"');
-ERROR 3D000: No database selected
-connection master_1;
-DROP DATABASE IF EXISTS auto_test_local;
-connection child2_1;
-DROP DATABASE IF EXISTS auto_test_remote;
-for master_1
-for child2
-child2_1
-child2_2
-child2_3
-for child3
diff --git a/storage/spider/mysql-test/spider/bugfix/t/index.test b/storage/spider/mysql-test/spider/bugfix/t/index.test
index 5167e40e8c4..10d5025c9c7 100644
--- a/storage/spider/mysql-test/spider/bugfix/t/index.test
+++ b/storage/spider/mysql-test/spider/bugfix/t/index.test
@@ -38,9 +38,6 @@ create table auto_test_local.t (a int, b char(1), primary key(a desc));
insert into auto_test_local.t VALUES (1,'f'),(2,'g'),(3,'j'), (4,'i'),(5,'h');
create table ts (a int, b char(1), primary key(a desc))
engine=spider comment='wrapper "mysql", srv "s_1", table "t"';
-set spider_use_handler=3;
-select a, b from ts where a > 0 and b = 'g' order by a;
-set spider_use_handler=default;
select a, b from ts where a > 0 and b = 'g' order by a;
drop table ts, auto_test_local.t;
diff --git a/storage/spider/mysql-test/spider/bugfix/t/mdev_29855.cnf b/storage/spider/mysql-test/spider/bugfix/t/mdev_29855.cnf
deleted file mode 100644
index 05dfd8a0bce..00000000000
--- a/storage/spider/mysql-test/spider/bugfix/t/mdev_29855.cnf
+++ /dev/null
@@ -1,3 +0,0 @@
-!include include/default_mysqld.cnf
-!include ../my_1_1.cnf
-!include ../my_2_1.cnf
diff --git a/storage/spider/mysql-test/spider/bugfix/t/mdev_29855.test b/storage/spider/mysql-test/spider/bugfix/t/mdev_29855.test
deleted file mode 100644
index 13cda064c72..00000000000
--- a/storage/spider/mysql-test/spider/bugfix/t/mdev_29855.test
+++ /dev/null
@@ -1,40 +0,0 @@
---echo #
---echo # MDEV-29855 Crash with SPIDER_DIRECT_SQL and spider_udf_ds_use_real_table=1
---echo #
-
-
---disable_query_log
---disable_result_log
---source ../../t/test_init.inc
---enable_result_log
---enable_query_log
-
---connection child2_1
-CREATE DATABASE auto_test_remote;
-USE auto_test_remote;
-eval CREATE TABLE tbl_a (
- a INT
-) $CHILD2_1_ENGINE $CHILD2_1_CHARSET;
-
---connection master_1
-CREATE DATABASE auto_test_local;
-USE auto_test_local;
-eval CREATE TABLE tbl_a (
- a INT
-) $MASTER_1_ENGINE $MASTER_1_CHARSET COMMENT='table "tbl_a", srv "s_2_1"';
-
-SET spider_udf_ds_use_real_table=1;
---error ER_NO_DB_ERROR
-SELECT SPIDER_DIRECT_SQL('select 1 as 1', 'tbl_a', 'srv "s_2_1"');
-
---connection master_1
-DROP DATABASE IF EXISTS auto_test_local;
-
---connection child2_1
-DROP DATABASE IF EXISTS auto_test_remote;
-
---disable_query_log
---disable_result_log
---source ../t/test_deinit.inc
---enable_query_log
---enable_result_log
diff --git a/storage/spider/mysql-test/spider/handler/include/deinit_child2_1.inc b/storage/spider/mysql-test/spider/handler/include/deinit_child2_1.inc
deleted file mode 100644
index e69de29bb2d..00000000000
--- a/storage/spider/mysql-test/spider/handler/include/deinit_child2_1.inc
+++ /dev/null
diff --git a/storage/spider/mysql-test/spider/handler/include/deinit_child2_2.inc b/storage/spider/mysql-test/spider/handler/include/deinit_child2_2.inc
deleted file mode 100644
index e69de29bb2d..00000000000
--- a/storage/spider/mysql-test/spider/handler/include/deinit_child2_2.inc
+++ /dev/null
diff --git a/storage/spider/mysql-test/spider/handler/include/deinit_child2_3.inc b/storage/spider/mysql-test/spider/handler/include/deinit_child2_3.inc
deleted file mode 100644
index e69de29bb2d..00000000000
--- a/storage/spider/mysql-test/spider/handler/include/deinit_child2_3.inc
+++ /dev/null
diff --git a/storage/spider/mysql-test/spider/handler/include/deinit_child3_1.inc b/storage/spider/mysql-test/spider/handler/include/deinit_child3_1.inc
deleted file mode 100644
index e69de29bb2d..00000000000
--- a/storage/spider/mysql-test/spider/handler/include/deinit_child3_1.inc
+++ /dev/null
diff --git a/storage/spider/mysql-test/spider/handler/include/deinit_child3_2.inc b/storage/spider/mysql-test/spider/handler/include/deinit_child3_2.inc
deleted file mode 100644
index e69de29bb2d..00000000000
--- a/storage/spider/mysql-test/spider/handler/include/deinit_child3_2.inc
+++ /dev/null
diff --git a/storage/spider/mysql-test/spider/handler/include/deinit_child3_3.inc b/storage/spider/mysql-test/spider/handler/include/deinit_child3_3.inc
deleted file mode 100644
index e69de29bb2d..00000000000
--- a/storage/spider/mysql-test/spider/handler/include/deinit_child3_3.inc
+++ /dev/null
diff --git a/storage/spider/mysql-test/spider/handler/include/deinit_master_1.inc b/storage/spider/mysql-test/spider/handler/include/deinit_master_1.inc
deleted file mode 100644
index c19e376d10a..00000000000
--- a/storage/spider/mysql-test/spider/handler/include/deinit_master_1.inc
+++ /dev/null
@@ -1 +0,0 @@
---source ../../include/deinit_spider.inc
diff --git a/storage/spider/mysql-test/spider/handler/include/deinit_slave1_1.inc b/storage/spider/mysql-test/spider/handler/include/deinit_slave1_1.inc
deleted file mode 100644
index e69de29bb2d..00000000000
--- a/storage/spider/mysql-test/spider/handler/include/deinit_slave1_1.inc
+++ /dev/null
diff --git a/storage/spider/mysql-test/spider/handler/include/ha_deinit_child2_1.inc b/storage/spider/mysql-test/spider/handler/include/ha_deinit_child2_1.inc
deleted file mode 100644
index e69de29bb2d..00000000000
--- a/storage/spider/mysql-test/spider/handler/include/ha_deinit_child2_1.inc
+++ /dev/null
diff --git a/storage/spider/mysql-test/spider/handler/include/ha_deinit_child2_2.inc b/storage/spider/mysql-test/spider/handler/include/ha_deinit_child2_2.inc
deleted file mode 100644
index e69de29bb2d..00000000000
--- a/storage/spider/mysql-test/spider/handler/include/ha_deinit_child2_2.inc
+++ /dev/null
diff --git a/storage/spider/mysql-test/spider/handler/include/ha_deinit_child2_3.inc b/storage/spider/mysql-test/spider/handler/include/ha_deinit_child2_3.inc
deleted file mode 100644
index e69de29bb2d..00000000000
--- a/storage/spider/mysql-test/spider/handler/include/ha_deinit_child2_3.inc
+++ /dev/null
diff --git a/storage/spider/mysql-test/spider/handler/include/ha_deinit_child3_1.inc b/storage/spider/mysql-test/spider/handler/include/ha_deinit_child3_1.inc
deleted file mode 100644
index c19e376d10a..00000000000
--- a/storage/spider/mysql-test/spider/handler/include/ha_deinit_child3_1.inc
+++ /dev/null
@@ -1 +0,0 @@
---source ../../include/deinit_spider.inc
diff --git a/storage/spider/mysql-test/spider/handler/include/ha_deinit_child3_2.inc b/storage/spider/mysql-test/spider/handler/include/ha_deinit_child3_2.inc
deleted file mode 100644
index c19e376d10a..00000000000
--- a/storage/spider/mysql-test/spider/handler/include/ha_deinit_child3_2.inc
+++ /dev/null
@@ -1 +0,0 @@
---source ../../include/deinit_spider.inc
diff --git a/storage/spider/mysql-test/spider/handler/include/ha_deinit_child3_3.inc b/storage/spider/mysql-test/spider/handler/include/ha_deinit_child3_3.inc
deleted file mode 100644
index c19e376d10a..00000000000
--- a/storage/spider/mysql-test/spider/handler/include/ha_deinit_child3_3.inc
+++ /dev/null
@@ -1 +0,0 @@
---source ../../include/deinit_spider.inc
diff --git a/storage/spider/mysql-test/spider/handler/include/ha_deinit_master_1.inc b/storage/spider/mysql-test/spider/handler/include/ha_deinit_master_1.inc
deleted file mode 100644
index e69de29bb2d..00000000000
--- a/storage/spider/mysql-test/spider/handler/include/ha_deinit_master_1.inc
+++ /dev/null
diff --git a/storage/spider/mysql-test/spider/handler/include/ha_init_child2_1.inc b/storage/spider/mysql-test/spider/handler/include/ha_init_child2_1.inc
deleted file mode 100644
index 2684829408d..00000000000
--- a/storage/spider/mysql-test/spider/handler/include/ha_init_child2_1.inc
+++ /dev/null
@@ -1,8 +0,0 @@
-let $CHILD2_1_HA_AS_DROP_TABLES=
- $CHILD2_1_DROP_TABLES;
-let $CHILD2_1_HA_AS_CREATE_TABLES=
- $CHILD2_1_CREATE_TABLES;
-let $CHILD2_1_HA_AS_DROP_TABLES2=
- $CHILD2_1_DROP_TABLES2;
-let $CHILD2_1_HA_AS_CREATE_TABLES2=
- $CHILD2_1_CREATE_TABLES2;
diff --git a/storage/spider/mysql-test/spider/handler/include/ha_init_child2_2.inc b/storage/spider/mysql-test/spider/handler/include/ha_init_child2_2.inc
deleted file mode 100644
index 205eaa6fe35..00000000000
--- a/storage/spider/mysql-test/spider/handler/include/ha_init_child2_2.inc
+++ /dev/null
@@ -1,4 +0,0 @@
-let $CHILD2_2_HA_DROP_TABLES=
- $CHILD2_2_DROP_TABLES;
-let $CHILD2_2_HA_CREATE_TABLES=
- $CHILD2_2_CREATE_TABLES;
diff --git a/storage/spider/mysql-test/spider/handler/include/ha_init_child2_3.inc b/storage/spider/mysql-test/spider/handler/include/ha_init_child2_3.inc
deleted file mode 100644
index 55cb858372c..00000000000
--- a/storage/spider/mysql-test/spider/handler/include/ha_init_child2_3.inc
+++ /dev/null
@@ -1,4 +0,0 @@
-let $CHILD2_3_HA_DROP_TABLES=
- $CHILD2_3_DROP_TABLES;
-let $CHILD2_3_HA_CREATE_TABLES=
- $CHILD2_3_CREATE_TABLES;
diff --git a/storage/spider/mysql-test/spider/handler/include/ha_init_child3_1.inc b/storage/spider/mysql-test/spider/handler/include/ha_init_child3_1.inc
deleted file mode 100644
index 3ac4f97b1e0..00000000000
--- a/storage/spider/mysql-test/spider/handler/include/ha_init_child3_1.inc
+++ /dev/null
@@ -1,140 +0,0 @@
---let $CHILD3_1_ENGINE_TYPE=Spider
---let $CHILD3_1_ENGINE=ENGINE=Spider
---source ../../include/init_spider.inc
-eval INSERT INTO mysql.spider_link_mon_servers
-(db_name, table_name, link_id, sid, server, scheme, host, port, socket,
- username, password, ssl_ca, ssl_capath, ssl_cert, ssl_cipher, ssl_key,
- ssl_verify_server_cert, default_file, default_group) VALUES
-('%auto_test_local%', '%ta_l%', '%', $CHILD3_1_SERVER_ID, 's_3_1', NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL),
-('%auto_test_local%', '%ta_l%', '%', $CHILD3_2_SERVER_ID, 's_3_2', NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL),
-('%auto_test_local%', '%ta_l%', '%', $CHILD3_3_SERVER_ID, 's_3_3', NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL);
-let $CHILD3_1_CHECK_LINK_STATUS=
- SELECT db_name, table_name, link_id, link_status FROM mysql.spider_tables
- ORDER BY db_name, table_name, link_id;
-let $CHILD3_1_CHECK_LINK_FAILED_LOG=
- SELECT db_name, table_name, link_id FROM mysql.spider_link_failed_log;
-let $CHILD3_1_SET_RECOVERY_STATUS_2_1=
- ALTER TABLE ta_l
- CONNECTION='host "localhost", user "root", password "",
- msi "$CHILD3_1_SERVER_ID", mkd "2",
- database "auto_test_remote auto_test_remote2", lst "0 2"';
-let $CHILD3_1_SET_OK_STATUS_2_1=
- ALTER TABLE ta_l
- CONNECTION='host "localhost", user "root", password "",
- msi "$CHILD3_1_SERVER_ID", mkd "2",
- database "auto_test_remote auto_test_remote2", lst "0 1"';
-let $CHILD3_1_SET_OK_STATUS_AS_2_1=
- ALTER TABLE ta_l
- CONNECTION='host "localhost", user "root", password "",
- msi "$CHILD3_1_SERVER_ID", mkd "2", alc "1",
- database "auto_test_remote auto_test_remote2", lst "1 0"';
-
-let $CHILD3_1_DROP_TABLES_HA_2_1=
- DROP TABLE IF EXISTS ta_l;
-if ($VERSION_COMPILE_OS_WIN)
-{
- let $CHILD3_1_CREATE_TABLES_HA_2_1=
- CREATE TABLE ta_l (
- a INT DEFAULT 10,
- b CHAR(1) DEFAULT 'c',
- c DATETIME DEFAULT '1999-10-10 10:10:10',
- PRIMARY KEY(a)
- ) $CHILD3_1_ENGINE $CHILD3_1_CHARSET
- COMMENT='port "$CHILD2_1_MYPORT $CHILD2_2_MYPORT", table "ta_r ta_r3"'
- CONNECTION='host "localhost", user "root", password "",
- msi "$CHILD3_1_SERVER_ID", mkd "2",
- database "auto_test_remote auto_test_remote2"';
- let $CHILD3_1_CREATE_TABLES_HA_AS_2_1=
- CREATE TABLE ta_l (
- a INT DEFAULT 10,
- b CHAR(1) DEFAULT 'c',
- c DATETIME DEFAULT '1999-10-10 10:10:10',
- PRIMARY KEY(a)
- ) $CHILD3_1_ENGINE $CHILD3_1_CHARSET
- COMMENT='port "$CHILD2_1_MYPORT $CHILD2_2_MYPORT", table "ta_r ta_r3"'
- CONNECTION='host "localhost", user "root", password "",
- msi "$CHILD3_1_SERVER_ID", mkd "2", alc "1",
- database "auto_test_remote auto_test_remote2"';
-}
-if (!$VERSION_COMPILE_OS_WIN)
-{
- let $CHILD3_1_CREATE_TABLES_HA_2_1=
- CREATE TABLE ta_l (
- a INT DEFAULT 10,
- b CHAR(1) DEFAULT 'c',
- c DATETIME DEFAULT '1999-10-10 10:10:10',
- PRIMARY KEY(a)
- ) $CHILD3_1_ENGINE $CHILD3_1_CHARSET
- COMMENT='socket "$CHILD2_1_MYSOCK $CHILD2_2_MYSOCK", table "ta_r ta_r3"'
- CONNECTION='host "localhost", user "root", password "",
- msi "$CHILD3_1_SERVER_ID", mkd "2",
- database "auto_test_remote auto_test_remote2"';
- let $CHILD3_1_CREATE_TABLES_HA_AS_2_1=
- CREATE TABLE ta_l (
- a INT DEFAULT 10,
- b CHAR(1) DEFAULT 'c',
- c DATETIME DEFAULT '1999-10-10 10:10:10',
- PRIMARY KEY(a)
- ) $CHILD3_1_ENGINE $CHILD3_1_CHARSET
- COMMENT='socket "$CHILD2_1_MYSOCK $CHILD2_2_MYSOCK", table "ta_r ta_r3"'
- CONNECTION='host "localhost", user "root", password "",
- msi "$CHILD3_1_SERVER_ID", mkd "2", alc "1",
- database "auto_test_remote auto_test_remote2"';
-}
-let $CHILD3_1_DROP_TABLES_HA_P_2_1=
- DROP TABLE IF EXISTS ta_l2;
-let $CHILD3_1_CREATE_TABLES_HA_P_2_1=
- CREATE TABLE ta_l2 (
- a INT DEFAULT 10,
- b CHAR(1) DEFAULT 'c',
- c DATETIME DEFAULT '1999-10-10 10:10:10',
- PRIMARY KEY(a)
- ) $CHILD3_1_ENGINE $CHILD3_1_CHARSET
- COMMENT='msi "$CHILD3_1_SERVER_ID", mkd "2"'
- PARTITION BY KEY(a) (
- PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3",
- priority "1000"',
- PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4",
- priority "1000001"'
- );
-let $CHILD3_1_CREATE_TABLES_HA_AS_P_2_1=
- CREATE TABLE ta_l2 (
- a INT DEFAULT 10,
- b CHAR(1) DEFAULT 'c',
- c DATETIME DEFAULT '1999-10-10 10:10:10',
- PRIMARY KEY(a)
- ) $CHILD3_1_ENGINE $CHILD3_1_CHARSET
- COMMENT='msi "$CHILD3_1_SERVER_ID", mkd "2", alc "1"'
- PARTITION BY KEY(a) (
- PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3",
- priority "1000"',
- PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4",
- priority "1000001"'
- );
-let $CHILD3_1_SET_RECOVERY_STATUS_P_2_1=
- ALTER TABLE ta_l2
- PARTITION BY KEY(a) (
- PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3",
- priority "1000"',
- PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4",
- priority "1000001", lst "0 2"'
- );
-let $CHILD3_1_SET_OK_STATUS_P_2_1=
- ALTER TABLE ta_l2
- PARTITION BY KEY(a) (
- PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3",
- priority "1000"',
- PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4",
- priority "1000001", lst "0 1"'
- );
-let $CHILD3_1_SET_OK_STATUS_AS_P_2_1=
- ALTER TABLE ta_l2
- PARTITION BY KEY(a) (
- PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3",
- priority "1000"',
- PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4",
- priority "1000001", lst "1 0"'
- );
diff --git a/storage/spider/mysql-test/spider/handler/include/ha_init_child3_2.inc b/storage/spider/mysql-test/spider/handler/include/ha_init_child3_2.inc
deleted file mode 100644
index cf47099f439..00000000000
--- a/storage/spider/mysql-test/spider/handler/include/ha_init_child3_2.inc
+++ /dev/null
@@ -1,140 +0,0 @@
---let $CHILD3_2_ENGINE_TYPE=Spider
---let $CHILD3_2_ENGINE=ENGINE=Spider
---source ../../include/init_spider.inc
-eval INSERT INTO mysql.spider_link_mon_servers
-(db_name, table_name, link_id, sid, server, scheme, host, port, socket,
- username, password, ssl_ca, ssl_capath, ssl_cert, ssl_cipher, ssl_key,
- ssl_verify_server_cert, default_file, default_group) VALUES
-('%auto_test_local%', '%ta_l%', '%', $CHILD3_1_SERVER_ID, 's_3_1', NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL),
-('%auto_test_local%', '%ta_l%', '%', $CHILD3_2_SERVER_ID, 's_3_2', NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL),
-('%auto_test_local%', '%ta_l%', '%', $CHILD3_3_SERVER_ID, 's_3_3', NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL);
-let $CHILD3_2_CHECK_LINK_STATUS=
- SELECT db_name, table_name, link_id, link_status FROM mysql.spider_tables
- ORDER BY db_name, table_name, link_id;
-let $CHILD3_2_CHECK_LINK_FAILED_LOG=
- SELECT db_name, table_name, link_id FROM mysql.spider_link_failed_log;
-let $CHILD3_2_SET_RECOVERY_STATUS_2_1=
- ALTER TABLE ta_l
- CONNECTION='host "localhost", user "root", password "",
- msi "$CHILD3_1_SERVER_ID", mkd "2",
- database "auto_test_remote auto_test_remote2", lst "0 2"';
-let $CHILD3_2_SET_OK_STATUS_2_1=
- ALTER TABLE ta_l
- CONNECTION='host "localhost", user "root", password "",
- msi "$CHILD3_1_SERVER_ID", mkd "2",
- database "auto_test_remote auto_test_remote2", lst "0 1"';
-let $CHILD3_2_SET_OK_STATUS_AS_2_1=
- ALTER TABLE ta_l
- CONNECTION='host "localhost", user "root", password "",
- msi "$CHILD3_1_SERVER_ID", mkd "2", alc "1",
- database "auto_test_remote auto_test_remote2", lst "1 0"';
-
-let $CHILD3_2_DROP_TABLES_HA_2_1=
- DROP TABLE IF EXISTS ta_l;
-if ($VERSION_COMPILE_OS_WIN)
-{
- let $CHILD3_2_CREATE_TABLES_HA_2_1=
- CREATE TABLE ta_l (
- a INT DEFAULT 10,
- b CHAR(1) DEFAULT 'c',
- c DATETIME DEFAULT '1999-10-10 10:10:10',
- PRIMARY KEY(a)
- ) $CHILD3_2_ENGINE $CHILD3_2_CHARSET
- COMMENT='port "$CHILD2_1_MYPORT $CHILD2_2_MYPORT", table "ta_r ta_r3"'
- CONNECTION='host "localhost", user "root", password "",
- msi "$CHILD3_1_SERVER_ID", mkd "2",
- database "auto_test_remote auto_test_remote2"';
- let $CHILD3_2_CREATE_TABLES_HA_AS_2_1=
- CREATE TABLE ta_l (
- a INT DEFAULT 10,
- b CHAR(1) DEFAULT 'c',
- c DATETIME DEFAULT '1999-10-10 10:10:10',
- PRIMARY KEY(a)
- ) $CHILD3_2_ENGINE $CHILD3_2_CHARSET
- COMMENT='port "$CHILD2_1_MYPORT $CHILD2_2_MYPORT", table "ta_r ta_r3"'
- CONNECTION='host "localhost", user "root", password "",
- msi "$CHILD3_1_SERVER_ID", mkd "2", alc "1",
- database "auto_test_remote auto_test_remote2"';
-}
-if (!$VERSION_COMPILE_OS_WIN)
-{
- let $CHILD3_2_CREATE_TABLES_HA_2_1=
- CREATE TABLE ta_l (
- a INT DEFAULT 10,
- b CHAR(1) DEFAULT 'c',
- c DATETIME DEFAULT '1999-10-10 10:10:10',
- PRIMARY KEY(a)
- ) $CHILD3_2_ENGINE $CHILD3_2_CHARSET
- COMMENT='socket "$CHILD2_1_MYSOCK $CHILD2_2_MYSOCK", table "ta_r ta_r3"'
- CONNECTION='host "localhost", user "root", password "",
- msi "$CHILD3_1_SERVER_ID", mkd "2",
- database "auto_test_remote auto_test_remote2"';
- let $CHILD3_2_CREATE_TABLES_HA_AS_2_1=
- CREATE TABLE ta_l (
- a INT DEFAULT 10,
- b CHAR(1) DEFAULT 'c',
- c DATETIME DEFAULT '1999-10-10 10:10:10',
- PRIMARY KEY(a)
- ) $CHILD3_2_ENGINE $CHILD3_2_CHARSET
- COMMENT='socket "$CHILD2_1_MYSOCK $CHILD2_2_MYSOCK", table "ta_r ta_r3"'
- CONNECTION='host "localhost", user "root", password "",
- msi "$CHILD3_1_SERVER_ID", mkd "2", alc "1",
- database "auto_test_remote auto_test_remote2"';
-}
-let $CHILD3_2_DROP_TABLES_HA_P_2_1=
- DROP TABLE IF EXISTS ta_l2;
-let $CHILD3_2_CREATE_TABLES_HA_P_2_1=
- CREATE TABLE ta_l2 (
- a INT DEFAULT 10,
- b CHAR(1) DEFAULT 'c',
- c DATETIME DEFAULT '1999-10-10 10:10:10',
- PRIMARY KEY(a)
- ) $CHILD3_2_ENGINE $CHILD3_2_CHARSET
- COMMENT='msi "$CHILD3_1_SERVER_ID", mkd "2"'
- PARTITION BY KEY(a) (
- PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3",
- priority "1000"',
- PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4",
- priority "1000001"'
- );
-let $CHILD3_2_CREATE_TABLES_HA_AS_P_2_1=
- CREATE TABLE ta_l2 (
- a INT DEFAULT 10,
- b CHAR(1) DEFAULT 'c',
- c DATETIME DEFAULT '1999-10-10 10:10:10',
- PRIMARY KEY(a)
- ) $CHILD3_2_ENGINE $CHILD3_2_CHARSET
- COMMENT='msi "$CHILD3_1_SERVER_ID", mkd "2", alc "1"'
- PARTITION BY KEY(a) (
- PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3",
- priority "1000"',
- PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4",
- priority "1000001"'
- );
-let $CHILD3_2_SET_RECOVERY_STATUS_P_2_1=
- ALTER TABLE ta_l2
- PARTITION BY KEY(a) (
- PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3",
- priority "1000"',
- PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4",
- priority "1000001", lst "0 2"'
- );
-let $CHILD3_2_SET_OK_STATUS_P_2_1=
- ALTER TABLE ta_l2
- PARTITION BY KEY(a) (
- PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3",
- priority "1000"',
- PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4",
- priority "1000001", lst "0 1"'
- );
-let $CHILD3_2_SET_OK_STATUS_AS_P_2_1=
- ALTER TABLE ta_l2
- PARTITION BY KEY(a) (
- PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3",
- priority "1000"',
- PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4",
- priority "1000001", lst "1 0"'
- );
diff --git a/storage/spider/mysql-test/spider/handler/include/ha_init_child3_3.inc b/storage/spider/mysql-test/spider/handler/include/ha_init_child3_3.inc
deleted file mode 100644
index 094d26b62c6..00000000000
--- a/storage/spider/mysql-test/spider/handler/include/ha_init_child3_3.inc
+++ /dev/null
@@ -1,140 +0,0 @@
---let $CHILD3_3_ENGINE_TYPE=Spider
---let $CHILD3_3_ENGINE=ENGINE=Spider
---source ../../include/init_spider.inc
-eval INSERT INTO mysql.spider_link_mon_servers
-(db_name, table_name, link_id, sid, server, scheme, host, port, socket,
- username, password, ssl_ca, ssl_capath, ssl_cert, ssl_cipher, ssl_key,
- ssl_verify_server_cert, default_file, default_group) VALUES
-('%auto_test_local%', '%ta_l%', '%', $CHILD3_1_SERVER_ID, 's_3_1', NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL),
-('%auto_test_local%', '%ta_l%', '%', $CHILD3_2_SERVER_ID, 's_3_2', NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL),
-('%auto_test_local%', '%ta_l%', '%', $CHILD3_3_SERVER_ID, 's_3_3', NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL);
-let $CHILD3_3_CHECK_LINK_STATUS=
- SELECT db_name, table_name, link_id, link_status FROM mysql.spider_tables
- ORDER BY db_name, table_name, link_id;
-let $CHILD3_3_CHECK_LINK_FAILED_LOG=
- SELECT db_name, table_name, link_id FROM mysql.spider_link_failed_log;
-let $CHILD3_3_SET_RECOVERY_STATUS_2_1=
- ALTER TABLE ta_l
- CONNECTION='host "localhost", user "root", password "",
- msi "$CHILD3_1_SERVER_ID", mkd "2",
- database "auto_test_remote auto_test_remote2", lst "0 2"';
-let $CHILD3_3_SET_OK_STATUS_2_1=
- ALTER TABLE ta_l
- CONNECTION='host "localhost", user "root", password "",
- msi "$CHILD3_1_SERVER_ID", mkd "2",
- database "auto_test_remote auto_test_remote2", lst "0 1"';
-let $CHILD3_3_SET_OK_STATUS_AS_2_1=
- ALTER TABLE ta_l
- CONNECTION='host "localhost", user "root", password "",
- msi "$CHILD3_1_SERVER_ID", mkd "2", alc "1",
- database "auto_test_remote auto_test_remote2", lst "1 0"';
-
-let $CHILD3_3_DROP_TABLES_HA_2_1=
- DROP TABLE IF EXISTS ta_l;
-if ($VERSION_COMPILE_OS_WIN)
-{
- let $CHILD3_3_CREATE_TABLES_HA_2_1=
- CREATE TABLE ta_l (
- a INT DEFAULT 10,
- b CHAR(1) DEFAULT 'c',
- c DATETIME DEFAULT '1999-10-10 10:10:10',
- PRIMARY KEY(a)
- ) $CHILD3_3_ENGINE $CHILD3_3_CHARSET
- COMMENT='port "$CHILD2_1_MYPORT $CHILD2_2_MYPORT", table "ta_r ta_r3"'
- CONNECTION='host "localhost", user "root", password "",
- msi "$CHILD3_1_SERVER_ID", mkd "2",
- database "auto_test_remote auto_test_remote2"';
- let $CHILD3_3_CREATE_TABLES_HA_AS_2_1=
- CREATE TABLE ta_l (
- a INT DEFAULT 10,
- b CHAR(1) DEFAULT 'c',
- c DATETIME DEFAULT '1999-10-10 10:10:10',
- PRIMARY KEY(a)
- ) $CHILD3_3_ENGINE $CHILD3_3_CHARSET
- COMMENT='port "$CHILD2_1_MYPORT $CHILD2_2_MYPORT", table "ta_r ta_r3"'
- CONNECTION='host "localhost", user "root", password "",
- msi "$CHILD3_1_SERVER_ID", mkd "2", alc "1",
- database "auto_test_remote auto_test_remote2"';
-}
-if (!$VERSION_COMPILE_OS_WIN)
-{
- let $CHILD3_3_CREATE_TABLES_HA_2_1=
- CREATE TABLE ta_l (
- a INT DEFAULT 10,
- b CHAR(1) DEFAULT 'c',
- c DATETIME DEFAULT '1999-10-10 10:10:10',
- PRIMARY KEY(a)
- ) $CHILD3_3_ENGINE $CHILD3_3_CHARSET
- COMMENT='socket "$CHILD2_1_MYSOCK $CHILD2_2_MYSOCK", table "ta_r ta_r3"'
- CONNECTION='host "localhost", user "root", password "",
- msi "$CHILD3_1_SERVER_ID", mkd "2",
- database "auto_test_remote auto_test_remote2"';
- let $CHILD3_3_CREATE_TABLES_HA_AS_2_1=
- CREATE TABLE ta_l (
- a INT DEFAULT 10,
- b CHAR(1) DEFAULT 'c',
- c DATETIME DEFAULT '1999-10-10 10:10:10',
- PRIMARY KEY(a)
- ) $CHILD3_3_ENGINE $CHILD3_3_CHARSET
- COMMENT='socket "$CHILD2_1_MYSOCK $CHILD2_2_MYSOCK", table "ta_r ta_r3"'
- CONNECTION='host "localhost", user "root", password "",
- msi "$CHILD3_1_SERVER_ID", mkd "2", alc "1",
- database "auto_test_remote auto_test_remote2"';
-}
-let $CHILD3_3_DROP_TABLES_HA_P_2_1=
- DROP TABLE IF EXISTS ta_l2;
-let $CHILD3_3_CREATE_TABLES_HA_P_2_1=
- CREATE TABLE ta_l2 (
- a INT DEFAULT 10,
- b CHAR(1) DEFAULT 'c',
- c DATETIME DEFAULT '1999-10-10 10:10:10',
- PRIMARY KEY(a)
- ) $CHILD3_3_ENGINE $CHILD3_3_CHARSET
- COMMENT='msi "$CHILD3_1_SERVER_ID", mkd "2"'
- PARTITION BY KEY(a) (
- PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3",
- priority "1000"',
- PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4",
- priority "1000001"'
- );
-let $CHILD3_3_CREATE_TABLES_HA_AS_P_2_1=
- CREATE TABLE ta_l2 (
- a INT DEFAULT 10,
- b CHAR(1) DEFAULT 'c',
- c DATETIME DEFAULT '1999-10-10 10:10:10',
- PRIMARY KEY(a)
- ) $CHILD3_3_ENGINE $CHILD3_3_CHARSET
- COMMENT='msi "$CHILD3_1_SERVER_ID", mkd "2", alc "1"'
- PARTITION BY KEY(a) (
- PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3",
- priority "1000"',
- PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4",
- priority "1000001"'
- );
-let $CHILD3_3_SET_RECOVERY_STATUS_P_2_1=
- ALTER TABLE ta_l2
- PARTITION BY KEY(a) (
- PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3",
- priority "1000"',
- PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4",
- priority "1000001", lst "0 2"'
- );
-let $CHILD3_3_SET_OK_STATUS_P_2_1=
- ALTER TABLE ta_l2
- PARTITION BY KEY(a) (
- PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3",
- priority "1000"',
- PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4",
- priority "1000001", lst "0 1"'
- );
-let $CHILD3_3_SET_OK_STATUS_AS_P_2_1=
- ALTER TABLE ta_l2
- PARTITION BY KEY(a) (
- PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3",
- priority "1000"',
- PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4",
- priority "1000001", lst "1 0"'
- );
diff --git a/storage/spider/mysql-test/spider/handler/include/ha_init_master_1.inc b/storage/spider/mysql-test/spider/handler/include/ha_init_master_1.inc
deleted file mode 100644
index 78797d80ce7..00000000000
--- a/storage/spider/mysql-test/spider/handler/include/ha_init_master_1.inc
+++ /dev/null
@@ -1,105 +0,0 @@
-eval INSERT INTO mysql.spider_link_mon_servers
-(db_name, table_name, link_id, sid, server, scheme, host, port, socket,
- username, password, ssl_ca, ssl_capath, ssl_cert, ssl_cipher, ssl_key,
- ssl_verify_server_cert, default_file, default_group) VALUES
-('%auto_test_local%', '%ta_l%', '%', $CHILD3_1_SERVER_ID, 's_3_1', NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL),
-('%auto_test_local%', '%ta_l%', '%', $CHILD3_2_SERVER_ID, 's_3_2', NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL),
-('%auto_test_local%', '%ta_l%', '%', $CHILD3_3_SERVER_ID, 's_3_3', NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL);
-let $MASTER_1_CHECK_LINK_STATUS=
- SELECT db_name, table_name, link_id, link_status FROM mysql.spider_tables
- ORDER BY db_name, table_name, link_id;
-let $MASTER_1_CHECK_LINK_FAILED_LOG=
- SELECT db_name, table_name, link_id FROM mysql.spider_link_failed_log;
-let $MASTER_1_SET_RECOVERY_STATUS_2_1=
- ALTER TABLE ta_l
- CONNECTION='host "localhost", user "root", password "",
- msi "$CHILD3_1_SERVER_ID", mkd "2",
- database "auto_test_remote auto_test_remote2", lst "0 2"';
-let $MASTER_1_SET_OK_STATUS_2_1=
- ALTER TABLE ta_l
- CONNECTION='host "localhost", user "root", password "",
- msi "$CHILD3_1_SERVER_ID", mkd "2",
- database "auto_test_remote auto_test_remote2", lst "0 1"';
-let $MASTER_1_SET_OK_STATUS_AS_2_1=
- ALTER TABLE ta_l
- CONNECTION='host "localhost", user "root", password "",
- msi "$CHILD3_1_SERVER_ID", mkd "2", alc "1",
- database "auto_test_remote auto_test_remote2", lst "1 0"';
-let $MASTER_1_COPY_TABLES_2_1=
- SELECT spider_copy_tables('ta_l', '0', '1');
-
-if ($VERSION_COMPILE_OS_WIN)
-{
- let $MASTER_1_COMMENT_HA_2_1=
- COMMENT='port "$CHILD2_1_MYPORT $CHILD2_2_MYPORT", table "ta_r ta_r3"'
- CONNECTION='host "localhost", user "root", password "",
- msi "$CHILD3_1_SERVER_ID", mkd "2",
- database "auto_test_remote auto_test_remote2"';
- let $MASTER_1_COMMENT_HA_AS_2_1=
- COMMENT='port "$CHILD2_1_MYPORT $CHILD2_2_MYPORT", table "ta_r ta_r3"'
- CONNECTION='host "localhost", user "root", password "",
- msi "$CHILD3_1_SERVER_ID", mkd "2", alc "1",
- database "auto_test_remote auto_test_remote2"';
-}
-if (!$VERSION_COMPILE_OS_WIN)
-{
- let $MASTER_1_COMMENT_HA_2_1=
- COMMENT='socket "$CHILD2_1_MYSOCK $CHILD2_2_MYSOCK", table "ta_r ta_r3"'
- CONNECTION='host "localhost", user "root", password "",
- msi "$CHILD3_1_SERVER_ID", mkd "2",
- database "auto_test_remote auto_test_remote2"';
- let $MASTER_1_COMMENT_HA_AS_2_1=
- COMMENT='socket "$CHILD2_1_MYSOCK $CHILD2_2_MYSOCK", table "ta_r ta_r3"'
- CONNECTION='host "localhost", user "root", password "",
- msi "$CHILD3_1_SERVER_ID", mkd "2", alc "1",
- database "auto_test_remote auto_test_remote2"';
-}
-let $MASTER_1_COMMENT_HA_P_2_1=
- COMMENT='msi "$CHILD3_1_SERVER_ID", mkd "2"'
- PARTITION BY KEY(a) (
- PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3",
- priority "1000"',
- PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4",
- priority "1000001"'
- );
-let $MASTER_1_COMMENT_HA_AS_P_2_1=
- COMMENT='msi "$CHILD3_1_SERVER_ID", mkd "2", alc "1"'
- PARTITION BY KEY(a) (
- PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3",
- priority "1000"',
- PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4",
- priority "1000001"'
- );
-let $MASTER_1_SET_RECOVERY_STATUS_P_2_1=
- ALTER TABLE ta_l2
- PARTITION BY KEY(a) (
- PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3",
- priority "1000"',
- PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4",
- priority "1000001", lst "0 2"'
- );
-let $MASTER_1_SET_OK_STATUS_P_2_1=
- ALTER TABLE ta_l2
- PARTITION BY KEY(a) (
- PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3",
- priority "1000"',
- PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4",
- priority "1000001", lst "0 1"'
- );
-let $MASTER_1_SET_OK_STATUS_AS_P_2_1=
- ALTER TABLE ta_l2
- PARTITION BY KEY(a) (
- PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3",
- priority "1000"',
- PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4",
- priority "1000001", lst "1 0"'
- );
-let $MASTER_1_COPY_TABLES_P_2_1=
- SELECT spider_copy_tables('ta_l2#P#pt2', '0', '1');
-let $MASTER_1_CHECK_HA_STATUS=
- SHOW STATUS LIKE 'Spider_mon_table_cache_version%';
-let $MASTER_1_CHANGE_HA_MON=
- SELECT spider_flush_table_mon_cache();
diff --git a/storage/spider/mysql-test/spider/handler/include/hs_deinit_child2_1.inc b/storage/spider/mysql-test/spider/handler/include/hs_deinit_child2_1.inc
deleted file mode 100644
index e69de29bb2d..00000000000
--- a/storage/spider/mysql-test/spider/handler/include/hs_deinit_child2_1.inc
+++ /dev/null
diff --git a/storage/spider/mysql-test/spider/handler/include/hs_deinit_child2_2.inc b/storage/spider/mysql-test/spider/handler/include/hs_deinit_child2_2.inc
deleted file mode 100644
index e69de29bb2d..00000000000
--- a/storage/spider/mysql-test/spider/handler/include/hs_deinit_child2_2.inc
+++ /dev/null
diff --git a/storage/spider/mysql-test/spider/handler/include/hs_deinit_child2_3.inc b/storage/spider/mysql-test/spider/handler/include/hs_deinit_child2_3.inc
deleted file mode 100644
index e69de29bb2d..00000000000
--- a/storage/spider/mysql-test/spider/handler/include/hs_deinit_child2_3.inc
+++ /dev/null
diff --git a/storage/spider/mysql-test/spider/handler/include/hs_deinit_master_1.inc b/storage/spider/mysql-test/spider/handler/include/hs_deinit_master_1.inc
deleted file mode 100644
index e69de29bb2d..00000000000
--- a/storage/spider/mysql-test/spider/handler/include/hs_deinit_master_1.inc
+++ /dev/null
diff --git a/storage/spider/mysql-test/spider/handler/include/hs_init_child2_1.inc b/storage/spider/mysql-test/spider/handler/include/hs_init_child2_1.inc
deleted file mode 100644
index ee006858b06..00000000000
--- a/storage/spider/mysql-test/spider/handler/include/hs_init_child2_1.inc
+++ /dev/null
@@ -1,24 +0,0 @@
-let $CHILD2_1_HS_DROP_TABLES=
- DROP TABLE IF EXISTS hs_r;
-let $CHILD2_1_HS_CREATE_TABLES=
- CREATE TABLE hs_r (
- a INT DEFAULT 10,
- b CHAR(1) DEFAULT 'c',
- c DATETIME DEFAULT '1999-10-10 10:10:10',
- d INT DEFAULT 11,
- PRIMARY KEY(a)
- ) $CHILD2_1_ENGINE $CHILD2_1_CHARSET;
-let $CHILD2_1_HS_SELECT_TABLES=
- SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s'), d FROM hs_r ORDER BY a;
-let $CHILD2_1_HS_DROP_TABLES2=
- DROP TABLE IF EXISTS hs_r2;
-let $CHILD2_1_HS_CREATE_TABLES2=
- CREATE TABLE hs_r2 (
- a INT DEFAULT 10,
- b CHAR(1) DEFAULT 'c',
- c DATETIME DEFAULT '1999-10-10 10:10:10',
- d INT DEFAULT 11,
- PRIMARY KEY(a)
- ) $CHILD2_1_ENGINE $CHILD2_1_CHARSET;
-let $CHILD2_1_HS_SELECT_TABLES2=
- SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s'), d FROM hs_r2 ORDER BY a;
diff --git a/storage/spider/mysql-test/spider/handler/include/hs_init_child2_2.inc b/storage/spider/mysql-test/spider/handler/include/hs_init_child2_2.inc
deleted file mode 100644
index 1c5a02d50c8..00000000000
--- a/storage/spider/mysql-test/spider/handler/include/hs_init_child2_2.inc
+++ /dev/null
@@ -1,12 +0,0 @@
-let $CHILD2_2_HS_DROP_TABLES=
- DROP TABLE IF EXISTS hs_r3;
-let $CHILD2_2_HS_CREATE_TABLES=
- CREATE TABLE hs_r3 (
- a INT DEFAULT 10,
- b CHAR(1) DEFAULT 'c',
- c DATETIME DEFAULT '1999-10-10 10:10:10',
- d INT DEFAULT 11,
- PRIMARY KEY(a)
- ) $CHILD2_2_ENGINE $CHILD2_2_CHARSET;
-let $CHILD2_2_HS_SELECT_TABLES=
- SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s'), d FROM hs_r3 ORDER BY a;
diff --git a/storage/spider/mysql-test/spider/handler/include/hs_init_child2_3.inc b/storage/spider/mysql-test/spider/handler/include/hs_init_child2_3.inc
deleted file mode 100644
index e69de29bb2d..00000000000
--- a/storage/spider/mysql-test/spider/handler/include/hs_init_child2_3.inc
+++ /dev/null
diff --git a/storage/spider/mysql-test/spider/handler/include/hs_init_master_1.inc b/storage/spider/mysql-test/spider/handler/include/hs_init_master_1.inc
deleted file mode 100644
index 0ff5e2a10d9..00000000000
--- a/storage/spider/mysql-test/spider/handler/include/hs_init_master_1.inc
+++ /dev/null
@@ -1,12 +0,0 @@
-let $MASTER_1_HS_COMMENT_TMP=
- COMMENT='';
-let $MASTER_1_HS_COMMENT_2_1=
- COMMENT='srv "s_2_1", table "hs_r", uhr "1", uhw "1", hrp "$CHILD2_1_HSRPORT", hwp "$CHILD2_1_HSWPORT"';
-let $MASTER_1_HS_COMMENT_P_2_1=
- COMMENT='uhr "1", uhw "1"'
- PARTITION BY RANGE(a) (
- PARTITION pt1 VALUES LESS THAN (4)
- COMMENT='srv "s_2_1", table "hs_r2", hrp "$CHILD2_1_HSRPORT", hwp "$CHILD2_1_HSWPORT"',
- PARTITION pt2 VALUES LESS THAN MAXVALUE
- COMMENT='srv "s_2_2", table "hs_r3", hrp "$CHILD2_2_HSRPORT", hwp "$CHILD2_2_HSWPORT"'
- );
diff --git a/storage/spider/mysql-test/spider/handler/include/init_child2_1.inc b/storage/spider/mysql-test/spider/handler/include/init_child2_1.inc
deleted file mode 100644
index b8b8ceb9875..00000000000
--- a/storage/spider/mysql-test/spider/handler/include/init_child2_1.inc
+++ /dev/null
@@ -1,176 +0,0 @@
-let $CHILD2_1_DROP_TABLES=
- DROP TABLE IF EXISTS ta_r;
-let $CHILD2_1_CREATE_TABLES=
- CREATE TABLE ta_r (
- a INT DEFAULT 10,
- b CHAR(1) DEFAULT 'c',
- c DATETIME DEFAULT '1999-10-10 10:10:10',
- PRIMARY KEY(a),
- KEY idx1(b)
- ) $CHILD2_1_ENGINE $CHILD2_1_CHARSET;
-let $CHILD2_1_SELECT_TABLES=
- SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_r ORDER BY a;
-let $CHILD2_1_DROP_TABLES2=
- DROP TABLE IF EXISTS ta_r2;
-let $CHILD2_1_CREATE_TABLES2=
- CREATE TABLE ta_r2 (
- a INT DEFAULT 10,
- b CHAR(1) DEFAULT 'c',
- c DATETIME DEFAULT '1999-10-10 10:10:10',
- PRIMARY KEY(a)
- ) $CHILD2_1_ENGINE $CHILD2_1_CHARSET;
-let $CHILD2_1_SELECT_TABLES2=
- SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_r2 ORDER BY a;
-let $CHILD2_1_DROP_TABLES3=
- DROP TABLE IF EXISTS ta_r_no_idx;
-let $CHILD2_1_CREATE_TABLES3=
- CREATE TABLE ta_r_no_idx (
- a INT DEFAULT 10,
- b CHAR(1) DEFAULT 'c',
- c DATETIME DEFAULT '1999-10-10 10:10:10'
- ) $CHILD2_1_ENGINE $CHILD2_1_CHARSET;
-let $CHILD2_1_SELECT_TABLES3=
- SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_r_no_idx ORDER BY a;
-let $CHILD2_1_DROP_TABLES4=
- DROP TABLE IF EXISTS ta_r_auto_inc;
-let $CHILD2_1_CREATE_TABLES4=
- CREATE TABLE ta_r_auto_inc (
- a INT AUTO_INCREMENT,
- b CHAR(1) DEFAULT 'c',
- c DATETIME DEFAULT '1999-10-10 10:10:10',
- PRIMARY KEY(a)
- ) $CHILD2_1_ENGINE $CHILD2_1_CHARSET;
-let $CHILD2_1_SELECT_TABLES4=
- SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_r_auto_inc
- ORDER BY a;
-let $CHILD2_1_DROP_TABLES5=
- DROP TABLE IF EXISTS ta_r_int;
-let $CHILD2_1_CREATE_TABLES5=
- CREATE TABLE ta_r_int (
- a INT AUTO_INCREMENT,
- b INT DEFAULT 10,
- c INT DEFAULT 11,
- PRIMARY KEY(a),
- KEY idx1(b),
- KEY idx2(c)
- ) $CHILD2_1_ENGINE $CHILD2_1_CHARSET;
-let $CHILD2_1_SELECT_TABLES5=
- SELECT a, b, c FROM ta_r_int ORDER BY a;
-let $CHILD2_1_DROP_TABLES6=
- DROP TABLE IF EXISTS ta_r_3;
-let $CHILD2_1_CREATE_TABLES6=
- CREATE TABLE ta_r_3 (
- a INT DEFAULT 10,
- b CHAR(1) DEFAULT 'c',
- c DATETIME DEFAULT '1999-10-10 10:10:10',
- PRIMARY KEY(a)
- ) $CHILD2_1_ENGINE $CHILD2_1_CHARSET;
-let $CHILD2_1_SELECT_TABLES6=
- SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_r_3 ORDER BY a;
-let $CHILD2_1_DROP_FT_TABLES=
- DROP TABLE IF EXISTS ft_r;
-let $CHILD2_1_CREATE_FT_TABLES=
- CREATE TABLE ft_r (
- a INT DEFAULT 0,
- b TEXT,
- c TEXT,
- d TEXT,
- PRIMARY KEY(a),
- FULLTEXT INDEX ft_idx1(b),
- FULLTEXT INDEX ft_idx2(c)
- ) $CHILD2_1_FT_ENGINE $CHILD2_1_FT_CHARSET;
-let $CHILD2_1_SELECT_FT_TABLES=
- SELECT a, b, c, d FROM ft_r ORDER BY a;
-let $CHILD2_1_DROP_FT_TABLES2=
- DROP TABLE IF EXISTS ft_r2;
-let $CHILD2_1_CREATE_FT_TABLES2=
- CREATE TABLE ft_r2 (
- a INT DEFAULT 0,
- b TEXT,
- c TEXT,
- d TEXT,
- PRIMARY KEY(a),
- FULLTEXT INDEX ft_idx1(b),
- FULLTEXT INDEX ft_idx2(c)
- ) $CHILD2_1_FT_ENGINE $CHILD2_1_FT_CHARSET;
-let $CHILD2_1_SELECT_FT_TABLES2=
- SELECT a, b, c, d FROM ft_r2 ORDER BY a;
-let $CHILD2_1_DROP_GM_TABLES=
- DROP TABLE IF EXISTS gm_r;
-let $CHILD2_1_CREATE_GM_TABLES=
- CREATE TABLE gm_r (
- a INT DEFAULT 0,
- b GEOMETRY NOT NULL,
- c GEOMETRY NOT NULL,
- PRIMARY KEY(a),
- SPATIAL INDEX sp_idx1(b),
- SPATIAL INDEX sp_idx2(c)
- ) $CHILD2_1_GM_ENGINE $CHILD2_1_GM_CHARSET;
-let $CHILD2_1_SELECT_GM_TABLES=
- SELECT a, b, c FROM gm_r ORDER BY a;
-let $CHILD2_1_DROP_GM_TABLES2=
- DROP TABLE IF EXISTS gm_r2;
-let $CHILD2_1_CREATE_GM_TABLES2=
- CREATE TABLE gm_r2 (
- a INT DEFAULT 0,
- b GEOMETRY NOT NULL,
- c GEOMETRY NOT NULL,
- PRIMARY KEY(a),
- SPATIAL INDEX sp_idx1(b),
- SPATIAL INDEX sp_idx2(c)
- ) $CHILD2_1_GM_ENGINE $CHILD2_1_GM_CHARSET;
-let $CHILD2_1_SELECT_GM_TABLES2=
- SELECT a, b, c FROM gm_r2 ORDER BY a;
-let $CHILD2_1_DROP_LOCK_TABLES1=
- DROP TABLE IF EXISTS t1_1;
-let $CHILD2_1_CREATE_LOCK_TABLES1=
- CREATE TABLE t1_1 (
- id int(11) NOT NULL,
- PRIMARY KEY (id)
- ) $CHILD2_1_ENGINE $CHILD2_1_CHARSET;
-let $CHILD2_1_DROP_LOCK_TABLES2=
- DROP TABLE IF EXISTS t2_2;
-let $CHILD2_1_CREATE_LOCK_TABLES2=
- CREATE TABLE t2_2 (
- id int(11) NOT NULL,
- PRIMARY KEY (id)
- ) $CHILD2_1_ENGINE $CHILD2_1_CHARSET;
-let $CHILD2_1_DROP_INCREMENT_TABLES1=
- DROP TABLE IF EXISTS t1_1;
-let $CHILD2_1_CREATE_INCREMENT_TABLES1=
- CREATE TABLE t1_1 (
- id int(11) NOT NULL AUTO_INCREMENT,
- PRIMARY KEY (id)
- ) $CHILD2_1_ENGINE $CHILD2_1_CHARSET;
-let $CHILD2_1_SELECT_INCREMENT_TABLES1=
- SELECT id FROM t1_1 ORDER BY id;
-let $CHILD2_1_DROP_TEXT_PK_TABLES1=
- DROP TABLE IF EXISTS t1;
-let $CHILD2_1_CREATE_TEXT_PK_TABLES1=
- CREATE TABLE t1 (
- a VARCHAR(255),
- PRIMARY KEY (a)
- ) $CHILD2_1_ENGINE $CHILD2_1_CHARSET2;
-let $CHILD2_1_SELECT_TEXT_PK_TABLES1=
- SELECT a FROM t1 ORDER BY a;
-let $CHILD2_1_DROP_TEXT_KEY_TABLES1=
- DROP TABLE IF EXISTS t1;
-let $CHILD2_1_CREATE_TEXT_KEY_TABLES1=
- CREATE TABLE t1 (
- a VARCHAR(255),
- b VARCHAR(255),
- c VARCHAR(255),
- KEY idx1(a,b),
- KEY idx2(b),
- PRIMARY KEY(c)
- ) $CHILD2_1_ENGINE $CHILD2_1_CHARSET;
-let $CHILD2_1_SELECT_TEXT_KEY_TABLES1=
- SELECT a, b FROM t1 ORDER BY a, b;
-let $CHILD2_1_AUTO_INCREMENT_INCREMENT1=
- SET GLOBAL AUTO_INCREMENT_INCREMENT = 1;
-let $CHILD2_1_AUTO_INCREMENT_INCREMENT2=
- SET GLOBAL AUTO_INCREMENT_INCREMENT = 4;
-let $CHILD2_1_AUTO_INCREMENT_OFFSET1=
- SET GLOBAL AUTO_INCREMENT_OFFSET = 1;
-let $CHILD2_1_AUTO_INCREMENT_OFFSET2=
- SET GLOBAL AUTO_INCREMENT_OFFSET = 2;
diff --git a/storage/spider/mysql-test/spider/handler/include/init_child2_2.inc b/storage/spider/mysql-test/spider/handler/include/init_child2_2.inc
deleted file mode 100644
index 9f0b5e2fe5a..00000000000
--- a/storage/spider/mysql-test/spider/handler/include/init_child2_2.inc
+++ /dev/null
@@ -1,80 +0,0 @@
-let $CHILD2_2_DROP_TABLES=
- DROP TABLE IF EXISTS ta_r3;
-let $CHILD2_2_CREATE_TABLES=
- CREATE TABLE ta_r3 (
- a INT DEFAULT 10,
- b CHAR(1) DEFAULT 'c',
- c DATETIME DEFAULT '1999-10-10 10:10:10',
- PRIMARY KEY(a)
- ) $CHILD2_2_ENGINE $CHILD2_2_CHARSET;
-let $CHILD2_2_DROP_TABLES5=
- DROP TABLE IF EXISTS ta_r_int;
-let $CHILD2_2_CREATE_TABLES5=
- CREATE TABLE ta_r_int (
- a INT AUTO_INCREMENT,
- b INT DEFAULT 10,
- c INT DEFAULT 11,
- PRIMARY KEY(a),
- KEY idx1(b),
- KEY idx2(c)
- ) $CHILD2_2_ENGINE $CHILD2_2_CHARSET;
-let $CHILD2_2_SELECT_TABLES=
- SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_r3 ORDER BY a;
-let $CHILD2_2_DROP_FT_TABLES=
- DROP TABLE IF EXISTS ft_r3;
-let $CHILD2_2_CREATE_FT_TABLES=
- CREATE TABLE ft_r3 (
- a INT DEFAULT 0,
- b TEXT,
- c TEXT,
- d TEXT,
- PRIMARY KEY(a),
- FULLTEXT INDEX ft_idx1(b),
- FULLTEXT INDEX ft_idx2(c)
- ) $CHILD2_2_FT_ENGINE $CHILD2_2_FT_CHARSET;
-let $CHILD2_2_SELECT_FT_TABLES=
- SELECT a, b, c, d FROM ft_r3 ORDER BY a;
-let $CHILD2_2_DROP_GM_TABLES=
- DROP TABLE IF EXISTS gm_r3;
-let $CHILD2_2_CREATE_GM_TABLES=
- CREATE TABLE gm_r3 (
- a INT DEFAULT 0,
- b GEOMETRY NOT NULL,
- c GEOMETRY NOT NULL,
- PRIMARY KEY(a),
- SPATIAL INDEX sp_idx1(b),
- SPATIAL INDEX sp_idx2(c)
- ) $CHILD2_2_GM_ENGINE $CHILD2_2_GM_CHARSET;
-let $CHILD2_2_SELECT_GM_TABLES=
- SELECT a, b, c FROM gm_r3 ORDER BY a;
-let $CHILD2_2_DROP_LOCK_TABLES1=
- DROP TABLE IF EXISTS t1_2;
-let $CHILD2_2_CREATE_LOCK_TABLES1=
- CREATE TABLE t1_2 (
- id int(11) NOT NULL,
- PRIMARY KEY (id)
- ) $CHILD2_2_ENGINE $CHILD2_2_CHARSET;
-let $CHILD2_2_DROP_LOCK_TABLES2=
- DROP TABLE IF EXISTS t2_1;
-let $CHILD2_2_CREATE_LOCK_TABLES2=
- CREATE TABLE t2_1 (
- id int(11) NOT NULL,
- PRIMARY KEY (id)
- ) $CHILD2_2_ENGINE $CHILD2_2_CHARSET;
-let $CHILD2_2_DROP_INCREMENT_TABLES1=
- DROP TABLE IF EXISTS t1_2;
-let $CHILD2_2_CREATE_INCREMENT_TABLES1=
- CREATE TABLE t1_2 (
- id int(11) NOT NULL AUTO_INCREMENT,
- PRIMARY KEY (id)
- ) $CHILD2_2_ENGINE $CHILD2_2_CHARSET;
-let $CHILD2_2_SELECT_INCREMENT_TABLES1=
- SELECT id FROM t1_2 ORDER BY id;
-let $CHILD2_2_AUTO_INCREMENT_INCREMENT1=
- SET GLOBAL AUTO_INCREMENT_INCREMENT = 1;
-let $CHILD2_2_AUTO_INCREMENT_INCREMENT2=
- SET GLOBAL AUTO_INCREMENT_INCREMENT = 4;
-let $CHILD2_2_AUTO_INCREMENT_OFFSET1=
- SET GLOBAL AUTO_INCREMENT_OFFSET = 1;
-let $CHILD2_2_AUTO_INCREMENT_OFFSET2=
- SET GLOBAL AUTO_INCREMENT_OFFSET = 3;
diff --git a/storage/spider/mysql-test/spider/handler/include/init_child2_3.inc b/storage/spider/mysql-test/spider/handler/include/init_child2_3.inc
deleted file mode 100644
index 05dbb1c3dd1..00000000000
--- a/storage/spider/mysql-test/spider/handler/include/init_child2_3.inc
+++ /dev/null
@@ -1,11 +0,0 @@
-let $CHILD2_3_DROP_TABLES=
- DROP TABLE IF EXISTS ta_r4;
-let $CHILD2_3_CREATE_TABLES=
- CREATE TABLE ta_r4 (
- a INT DEFAULT 10,
- b CHAR(1) DEFAULT 'c',
- c DATETIME DEFAULT '1999-10-10 10:10:10',
- PRIMARY KEY(a)
- ) $CHILD2_3_ENGINE $CHILD2_3_CHARSET;
-let $CHILD2_3_SELECT_TABLES=
- SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_r4 ORDER BY a;
diff --git a/storage/spider/mysql-test/spider/handler/include/init_child3_1.inc b/storage/spider/mysql-test/spider/handler/include/init_child3_1.inc
deleted file mode 100644
index e69de29bb2d..00000000000
--- a/storage/spider/mysql-test/spider/handler/include/init_child3_1.inc
+++ /dev/null
diff --git a/storage/spider/mysql-test/spider/handler/include/init_child3_2.inc b/storage/spider/mysql-test/spider/handler/include/init_child3_2.inc
deleted file mode 100644
index e69de29bb2d..00000000000
--- a/storage/spider/mysql-test/spider/handler/include/init_child3_2.inc
+++ /dev/null
diff --git a/storage/spider/mysql-test/spider/handler/include/init_child3_3.inc b/storage/spider/mysql-test/spider/handler/include/init_child3_3.inc
deleted file mode 100644
index e69de29bb2d..00000000000
--- a/storage/spider/mysql-test/spider/handler/include/init_child3_3.inc
+++ /dev/null
diff --git a/storage/spider/mysql-test/spider/handler/include/init_master_1.inc b/storage/spider/mysql-test/spider/handler/include/init_master_1.inc
deleted file mode 100644
index 9c487bc73fe..00000000000
--- a/storage/spider/mysql-test/spider/handler/include/init_master_1.inc
+++ /dev/null
@@ -1,186 +0,0 @@
---source ../../include/init_spider.inc
-SET spider_internal_sql_log_off= 0;
-SET spider_use_handler= 3;
-if ($VERSION_COMPILE_OS_WIN)
-{
- let $MASTER_1_COMMENT_2_1=
- COMMENT='database "auto_test_remote", table "ta_r"'
- CONNECTION='host "localhost", port "$CHILD2_1_MYPORT", user "root",
- password ""';
-}
-if (!$VERSION_COMPILE_OS_WIN)
-{
- let $MASTER_1_COMMENT_2_1=
- COMMENT='database "auto_test_remote", table "ta_r"'
- CONNECTION='host "localhost", socket "$CHILD2_1_MYSOCK", user "root",
- password ""';
-}
-if ($VERSION_COMPILE_OS_WIN)
-{
- let $MASTER_1_COMMENT2_2_1=
- COMMENT='database "auto_test_remote", table "ta_r_no_idx"'
- CONNECTION='host "localhost", port "$CHILD2_1_MYPORT", user "root",
- password "", prt "2000000"';
-}
-if (!$VERSION_COMPILE_OS_WIN)
-{
- let $MASTER_1_COMMENT2_2_1=
- COMMENT='database "auto_test_remote", table "ta_r_no_idx"'
- CONNECTION='host "localhost", socket "$CHILD2_1_MYSOCK", user "root",
- password "", prt "2000000"';
-}
-let $MASTER_1_COMMENT_P_2_1=
- COMMENT='table "ta_r3"'
- PARTITION BY KEY(a) (
- PARTITION pt1 COMMENT='srv "s_2_1", table "ta_r2",
- priority "1000"',
- PARTITION pt2 COMMENT='srv "s_2_2", priority "1000001"'
- );
-let $MASTER_1_COMMENT2_P_2_1=
- COMMENT='table "ta_r3"'
- PARTITION BY RANGE(a) (
- PARTITION pt1 VALUES LESS THAN (4) COMMENT='srv "s_2_1",
- table "ta_r2", priority "1000"',
- PARTITION pt2 VALUES LESS THAN MAXVALUE
- COMMENT='srv "s_2_2", priority "1000001"'
- );
-if ($VERSION_COMPILE_OS_WIN)
-{
- let $MASTER_1_COMMENT3_2_1=
- COMMENT='database "auto_test_remote", table "ta_r_auto_inc"'
- CONNECTION='host "localhost", port "$CHILD2_1_MYPORT", user "root",
- password ""';
-}
-if (!$VERSION_COMPILE_OS_WIN)
-{
- let $MASTER_1_COMMENT3_2_1=
- COMMENT='database "auto_test_remote", table "ta_r_auto_inc"'
- CONNECTION='host "localhost", socket "$CHILD2_1_MYSOCK", user "root",
- password ""';
-}
-let $MASTER_1_COMMENT3_P_2_1=
- COMMENT='table "ta_r_int"'
- PARTITION BY LIST(MOD(a, 2)) (
- PARTITION pt1 VALUES IN (0)
- COMMENT='srv "s_2_1", priority "1000"',
- PARTITION pt2 VALUES IN (1)
- COMMENT='srv "s_2_2", priority "1000001"'
- );
-if ($VERSION_COMPILE_OS_WIN)
-{
- let $MASTER_1_COMMENT4_2_1=
- COMMENT='database "auto_test_remote", table "ta_r_int"'
- CONNECTION='host "localhost", port "$CHILD2_1_MYPORT", user "root",
- password ""';
-}
-if (!$VERSION_COMPILE_OS_WIN)
-{
- let $MASTER_1_COMMENT4_2_1=
- COMMENT='database "auto_test_remote", table "ta_r_int"'
- CONNECTION='host "localhost", socket "$CHILD2_1_MYSOCK", user "root",
- password ""';
-}
-if ($VERSION_COMPILE_OS_WIN)
-{
- let $MASTER_1_COMMENT5_2_1=
- COMMENT='database "auto_test_remote", table "ta_r_3"'
- CONNECTION='host "localhost", port "$CHILD2_1_MYPORT", user "root",
- password ""';
-}
-if (!$VERSION_COMPILE_OS_WIN)
-{
- let $MASTER_1_COMMENT5_2_1=
- COMMENT='database "auto_test_remote", table "ta_r_3"'
- CONNECTION='host "localhost", socket "$CHILD2_1_MYSOCK", user "root",
- password ""';
-}
-if ($VERSION_COMPILE_OS_WIN)
-{
- let $MASTER_1_COMMENT_FT_2_1=
- COMMENT='database "auto_test_remote", table "ft_r"'
- CONNECTION='host "localhost", port "$CHILD2_1_MYPORT", user "root",
- password ""';
-}
-if (!$VERSION_COMPILE_OS_WIN)
-{
- let $MASTER_1_COMMENT_FT_2_1=
- COMMENT='database "auto_test_remote", table "ft_r"'
- CONNECTION='host "localhost", socket "$CHILD2_1_MYSOCK", user "root",
- password ""';
-}
-let $MASTER_1_COMMENT2_FT_P_2_1=
- COMMENT='table "ft_r3"'
- PARTITION BY RANGE(a) (
- PARTITION pt1 VALUES LESS THAN (4) COMMENT='srv "s_2_1",
- table "ft_r2", priority "1000"',
- PARTITION pt2 VALUES LESS THAN MAXVALUE
- COMMENT='srv "s_2_2", priority "1000001"'
- );
-let $MASTER_1_COMMENT_GM_2_1=
- COMMENT='srv "s_2_1", table "gm_r"';
-let $MASTER_1_COMMENT2_GM_P_2_1=
- COMMENT='table "gm_r3"'
- PARTITION BY RANGE(a) (
- PARTITION pt1 VALUES LESS THAN (4) COMMENT='srv "s_2_1",
- table "gm_r2", priority "1000"',
- PARTITION pt2 VALUES LESS THAN MAXVALUE
- COMMENT='srv "s_2_2", priority "1000001"'
- );
-let $MASTER_1_COMMENT_LOCK1=
- COMMENT 'tbl "t1_1 t1_2", srv "s_2_1 s_2_2"';
-let $MASTER_1_COMMENT_LOCK2=
- COMMENT 'tbl "t2_1 t2_2", srv "s_2_2 s_2_1"';
-let $MASTER_1_COMMENT_INCREMENT1_1=
- COMMENT 'aim "2", tbl "t1_1", srv "s_2_1"';
-let $MASTER_1_COMMENT_INCREMENT1_P_1=
- COMMENT 'aim "2"'
- PARTITION BY LIST(MOD(id, 2)) (
- PARTITION pt1 VALUES IN (0)
- COMMENT='tbl "t1_1", srv "s_2_1"',
- PARTITION pt2 VALUES IN (1)
- COMMENT='tbl "t1_2", srv "s_2_2"'
- );
-let $MASTER_1_COMMENT_READONLY1_1=
- COMMENT 'read_only_mode "1", tbl "t1_1", srv "s_2_1"';
-let $MASTER_1_COMMENT_ERROR_MODE1_1=
- COMMENT 'erm "1", ewm "1", tbl "ter1_1", srv "s_2_1"';
-let $MASTER_1_COMMENT_TEXT_PK1_1=
- COMMENT 'tbl "t1", srv "s_2_1"';
-let $MASTER_1_COMMENT_TEXT_KEY1_1=
- COMMENT 'tbl "t1", srv "s_2_1"';
-let $MASTER_1_CHECK_DIRECT_UPDATE_STATUS=
- SHOW STATUS LIKE 'Spider_direct_update';
-let $MASTER_1_CHECK_DIRECT_DELETE_STATUS=
- SHOW STATUS LIKE 'Spider_direct_delete';
-let $MASTER_1_CHECK_DIRECT_ORDER_LIMIT_STATUS=
- SHOW STATUS LIKE 'Spider_direct_order_limit';
-let $MASTER_1_CHECK_DIRECT_AGGREGATE_STATUS=
- SHOW STATUS LIKE 'Spider_direct_aggregate';
-let $MASTER_1_AUTO_INCREMENT_INCREMENT1=
- SET SESSION AUTO_INCREMENT_INCREMENT = 1 $STR_SEMICOLON
- SELECT spider_direct_sql('SET SESSION AUTO_INCREMENT_INCREMENT = 1', '',
- 'srv "s_2_1"') $STR_SEMICOLON
- SELECT spider_direct_sql('SET SESSION AUTO_INCREMENT_INCREMENT = 1', '',
- 'srv "s_2_2"');
-let $MASTER_1_AUTO_INCREMENT_INCREMENT2=
- SET SESSION AUTO_INCREMENT_INCREMENT = 777 $STR_SEMICOLON
- SELECT spider_direct_sql('SET SESSION AUTO_INCREMENT_INCREMENT = 4', '',
- 'srv "s_2_1"') $STR_SEMICOLON
- SELECT spider_direct_sql('SET SESSION AUTO_INCREMENT_INCREMENT = 4', '',
- 'srv "s_2_2"');
-let $MASTER_1_AUTO_INCREMENT_OFFSET1=
- SET SESSION AUTO_INCREMENT_OFFSET = 1 $STR_SEMICOLON
- SELECT spider_bg_direct_sql('SET SESSION AUTO_INCREMENT_OFFSET = 1', '',
- 'srv "s_2_1"') $STR_SEMICOLON
- SELECT spider_bg_direct_sql('SET SESSION AUTO_INCREMENT_OFFSET = 1', '',
- 'srv "s_2_2"');
-let $MASTER_1_AUTO_INCREMENT_OFFSET2=
- SET SESSION AUTO_INCREMENT_OFFSET = 777 $STR_SEMICOLON
- SELECT spider_bg_direct_sql('SET SESSION AUTO_INCREMENT_OFFSET = 2', '',
- 'srv "s_2_1"') $STR_SEMICOLON
- SELECT spider_bg_direct_sql('SET SESSION AUTO_INCREMENT_OFFSET = 3', '',
- 'srv "s_2_2"');
-let $MASTER_1_AUTO_INCREMENT_OFFSET3=
- SET SESSION AUTO_INCREMENT_OFFSET = 1;
-let $MASTER_1_AUTO_INCREMENT_OFFSET4=
- SET SESSION AUTO_INCREMENT_OFFSET = 777;
diff --git a/storage/spider/mysql-test/spider/handler/include/init_slave1_1.inc b/storage/spider/mysql-test/spider/handler/include/init_slave1_1.inc
deleted file mode 100644
index 73c3c6b9ef2..00000000000
--- a/storage/spider/mysql-test/spider/handler/include/init_slave1_1.inc
+++ /dev/null
@@ -1,10 +0,0 @@
-let $SLAVE1_1_COMMENT_INCREMENT1_1=
- COMMENT '';
-let $SLAVE1_1_COMMENT_INCREMENT1_P_1=
- COMMENT ''
- PARTITION BY LIST(MOD(id, 2)) (
- PARTITION pt1 VALUES IN (0)
- COMMENT='',
- PARTITION pt2 VALUES IN (1)
- COMMENT=''
- );
diff --git a/storage/spider/mysql-test/spider/handler/my.cnf b/storage/spider/mysql-test/spider/handler/my.cnf
deleted file mode 100644
index 89b91e6a5bd..00000000000
--- a/storage/spider/mysql-test/spider/handler/my.cnf
+++ /dev/null
@@ -1,176 +0,0 @@
-# Use default setting for mysqld processes
-!include include/default_mysqld.cnf
-
-[mysqld.1.1]
-loose_handlersocket_port= 20000
-loose_handlersocket_port_wr= 20001
-loose_handlersocket_threads= 2
-loose_handlersocket_threads_wr= 1
-loose_handlersocket_support_merge_table= 0
-loose_handlersocket_direct_update_mode= 0
-loose_handlersocket_unlimited_boundary= 65536
-loose_handlersocket_bulk_insert= 0
-loose_handlersocket_bulk_insert_timeout= 0
-loose_handlersocket_general_log= 1
-loose_handlersocket_timeout= 30
-loose_handlersocket_close_table_interval=2
-open_files_limit= 4096
-loose_partition= 1
-
-[mysqld.2.1]
-loose_handlersocket_port= 20002
-loose_handlersocket_port_wr= 20003
-loose_handlersocket_threads= 2
-loose_handlersocket_threads_wr= 1
-loose_handlersocket_support_merge_table= 0
-loose_handlersocket_direct_update_mode= 0
-loose_handlersocket_unlimited_boundary= 65536
-loose_handlersocket_bulk_insert= 0
-loose_handlersocket_bulk_insert_timeout= 0
-loose_handlersocket_general_log= 1
-loose_handlersocket_timeout= 30
-loose_handlersocket_close_table_interval=2
-open_files_limit= 4096
-
-[mysqld.2.2]
-loose_handlersocket_port= 20004
-loose_handlersocket_port_wr= 20005
-loose_handlersocket_threads= 2
-loose_handlersocket_threads_wr= 1
-loose_handlersocket_support_merge_table= 0
-loose_handlersocket_direct_update_mode= 0
-loose_handlersocket_unlimited_boundary= 65536
-loose_handlersocket_bulk_insert= 0
-loose_handlersocket_bulk_insert_timeout= 0
-loose_handlersocket_general_log= 1
-loose_handlersocket_timeout= 30
-loose_handlersocket_close_table_interval=2
-open_files_limit= 4096
-
-[mysqld.2.3]
-
-[mysqld.3.1]
-loose_partition= 1
-
-[mysqld.3.2]
-loose_partition= 1
-
-[mysqld.3.3]
-loose_partition= 1
-
-[mysqld.4.1]
-loose_partition= 1
-
-
-[ENV]
-USE_GEOMETRY_TEST= 1
-USE_FULLTEXT_TEST= 1
-USE_HA_TEST= 1
-USE_GENERAL_LOG= 1
-USE_REPLICATION= 1
-MASTER_1_MYPORT= @mysqld.1.1.port
-MASTER_1_HSRPORT= 20000
-MASTER_1_HSWPORT= 20001
-MASTER_1_MYSOCK= @mysqld.1.1.socket
-MASTER_1_ENGINE_TYPE= Spider
-#MASTER_1_ENGINE_TYPE= MyISAM
-MASTER_1_ENGINE= ENGINE=Spider
-MASTER_1_CHARSET= DEFAULT CHARSET=utf8
-MASTER_1_ENGINE2= ENGINE=MyISAM
-MASTER_1_CHARSET2= DEFAULT CHARSET=utf8
-MASTER_1_CHARSET3= DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
-SLAVE1_1_MYPORT= @mysqld.4.1.port
-SLAVE1_1_MYSOCK= @mysqld.4.1.socket
-SLAVE1_1_ENGINE_TYPE= MyISAM
-SLAVE1_1_ENGINE= ENGINE=MyISAM
-SLAVE1_1_CHARSET= DEFAULT CHARSET=utf8
-USE_CHILD_GROUP2= 1
-OUTPUT_CHILD_GROUP2= 0
-CHILD2_1_MYPORT= @mysqld.2.1.port
-CHILD2_1_HSRPORT= 20002
-CHILD2_1_HSWPORT= 20003
-CHILD2_1_MYSOCK= @mysqld.2.1.socket
-CHILD2_1_ENGINE_TYPE= InnoDB
-CHILD2_1_ENGINE= ENGINE=InnoDB
-CHILD2_1_CHARSET= DEFAULT CHARSET=utf8
-CHILD2_1_CHARSET2= DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
-CHILD2_2_MYPORT= @mysqld.2.2.port
-CHILD2_2_HSRPORT= 20004
-CHILD2_2_HSWPORT= 20005
-CHILD2_2_MYSOCK= @mysqld.2.2.socket
-CHILD2_2_ENGINE_TYPE= InnoDB
-CHILD2_2_ENGINE= ENGINE=InnoDB
-CHILD2_2_CHARSET= DEFAULT CHARSET=utf8
-CHILD2_3_MYPORT= @mysqld.2.3.port
-CHILD2_3_MYSOCK= @mysqld.2.3.socket
-CHILD2_3_ENGINE_TYPE= InnoDB
-CHILD2_3_ENGINE= ENGINE=InnoDB
-CHILD2_3_CHARSET= DEFAULT CHARSET=utf8
-CHILD2_1_FT_MYPORT= @mysqld.1.1.port
-CHILD2_1_FT_MYSOCK= @mysqld.1.1.socket
-CHILD2_1_FT_ENGINE_TYPE= MyISAM
-CHILD2_1_FT_ENGINE= ENGINE=MyISAM
-CHILD2_1_FT_CHARSET= DEFAULT CHARSET=utf8
-CHILD2_2_FT_MYPORT= @mysqld.2.2.port
-CHILD2_2_FT_MYSOCK= @mysqld.2.2.socket
-CHILD2_2_FT_ENGINE_TYPE= MyISAM
-CHILD2_2_FT_ENGINE= ENGINE=MyISAM
-CHILD2_2_FT_CHARSET= DEFAULT CHARSET=utf8
-CHILD2_1_GM_MYPORT= @mysqld.2.1.port
-CHILD2_1_GM_MYSOCK= @mysqld.2.1.socket
-CHILD2_1_GM_ENGINE_TYPE= MyISAM
-CHILD2_1_GM_ENGINE= ENGINE=MyISAM
-CHILD2_1_GM_CHARSET= DEFAULT CHARSET=utf8
-CHILD2_2_GM_MYPORT= @mysqld.2.2.port
-CHILD2_2_GM_MYSOCK= @mysqld.2.2.socket
-CHILD2_2_GM_ENGINE_TYPE= MyISAM
-CHILD2_2_GM_ENGINE= ENGINE=MyISAM
-CHILD2_2_GM_CHARSET= DEFAULT CHARSET=utf8
-USE_CHILD_GROUP3= 1
-OUTPUT_CHILD_GROUP3= 0
-CHILD3_1_MYPORT= @mysqld.3.1.port
-CHILD3_1_MYSOCK= @mysqld.3.1.socket
-CHILD3_1_ENGINE_TYPE= InnoDB
-CHILD3_1_ENGINE= ENGINE=InnoDB
-CHILD3_1_CHARSET= DEFAULT CHARSET=utf8
-CHILD3_2_MYPORT= @mysqld.3.2.port
-CHILD3_2_MYSOCK= @mysqld.3.2.socket
-CHILD3_2_ENGINE_TYPE= InnoDB
-CHILD3_2_ENGINE= ENGINE=InnoDB
-CHILD3_2_CHARSET= DEFAULT CHARSET=utf8
-CHILD3_3_MYPORT= @mysqld.3.3.port
-CHILD3_3_MYSOCK= @mysqld.3.3.socket
-CHILD3_3_ENGINE_TYPE= InnoDB
-CHILD3_3_ENGINE= ENGINE=InnoDB
-CHILD3_3_CHARSET= DEFAULT CHARSET=utf8
-
-STR_SEMICOLON= ;
-
-#The followings are set in include/init_xxx.inc files
-# MASTER_1_COMMENT_2_1
-# MASTER_1_COMMENT2_2_1
-# MASTER_1_COMMENT3_2_1
-# MASTER_1_COMMENT4_2_1
-# MASTER_1_COMMENT5_2_1
-# MASTER_1_COMMENT_P_2_1
-# CHILD2_1_DROP_TABLES
-# CHILD2_1_CREATE_TABLES
-# CHILD2_1_SELECT_TABLES
-# CHILD2_1_DROP_TABLES2
-# CHILD2_1_CREATE_TABLES2
-# CHILD2_1_SELECT_TABLES2
-# CHILD2_1_DROP_TABLES3
-# CHILD2_1_CREATE_TABLES3
-# CHILD2_1_SELECT_TABLES3
-# CHILD2_1_DROP_TABLES4
-# CHILD2_1_CREATE_TABLES4
-# CHILD2_1_SELECT_TABLES4
-# CHILD2_1_DROP_TABLES5
-# CHILD2_1_CREATE_TABLES5
-# CHILD2_1_SELECT_TABLES5
-# CHILD2_1_DROP_TABLES6
-# CHILD2_1_CREATE_TABLES6
-# CHILD2_1_SELECT_TABLES6
-# CHILD2_2_DROP_TABLES
-# CHILD2_2_CREATE_TABLES
-# CHILD2_2_SELECT_TABLES
diff --git a/storage/spider/mysql-test/spider/handler/r/basic_sql.result b/storage/spider/mysql-test/spider/handler/r/basic_sql.result
deleted file mode 100644
index 94a09fc317b..00000000000
--- a/storage/spider/mysql-test/spider/handler/r/basic_sql.result
+++ /dev/null
@@ -1,738 +0,0 @@
-for master_1
-for child2
-child2_1
-child2_2
-child2_3
-for child3
-child3_1
-child3_2
-child3_3
-
-drop and create databases
-connection master_1;
-DROP DATABASE IF EXISTS auto_test_local;
-CREATE DATABASE auto_test_local;
-USE auto_test_local;
-connection child2_1;
-DROP DATABASE IF EXISTS auto_test_remote;
-CREATE DATABASE auto_test_remote;
-USE auto_test_remote;
-connection child2_2;
-DROP DATABASE IF EXISTS auto_test_remote2;
-CREATE DATABASE auto_test_remote2;
-USE auto_test_remote2;
-
-test select 1
-connection master_1;
-SELECT 1;
-1
-1
-
-create table select test
-connection master_1;
-DROP TABLE IF EXISTS tb_l;
-CREATE TABLE tb_l (
-a INT,
-b CHAR(1),
-c DATETIME,
-PRIMARY KEY(a)
-) MASTER_1_ENGINE2 MASTER_1_CHARSET2
-INSERT INTO tb_l (a, b, c) VALUES
-(1, 'a', '2008-08-01 10:21:39'),
-(2, 'b', '2000-01-01 00:00:00'),
-(3, 'e', '2007-06-04 20:03:11'),
-(4, 'd', '2003-11-30 05:01:03'),
-(5, 'c', '2001-12-31 23:59:59');
-DROP TABLE IF EXISTS ta_l;
-CREATE TABLE ta_l (
-PRIMARY KEY(a)
-) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1
-SELECT a, b, c FROM tb_l
-connection master_1;
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 a 2008-08-01 10:21:39
-2 b 2000-01-01 00:00:00
-3 e 2007-06-04 20:03:11
-4 d 2003-11-30 05:01:03
-5 c 2001-12-31 23:59:59
-
-create table ignore select test
-connection master_1;
-DROP TABLE IF EXISTS ta_l;
-DROP TABLE IF EXISTS tb_l;
-CREATE TABLE tb_l (
-a INT,
-b CHAR(1),
-c DATETIME,
-PRIMARY KEY(a)
-) MASTER_1_ENGINE2 MASTER_1_CHARSET2
-INSERT INTO tb_l (a, b, c) VALUES
-(1, 'f', '2008-07-01 10:21:39'),
-(2, 'g', '2000-02-01 00:00:00'),
-(3, 'j', '2007-05-04 20:03:11'),
-(4, 'i', '2003-10-30 05:01:03'),
-(5, 'h', '2001-10-31 23:59:59');
-CREATE TABLE ta_l (
-PRIMARY KEY(a)
-) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1
-IGNORE SELECT a, b, c FROM tb_l
-Warnings:
-Warning 1062 Duplicate entry '1' for key 'PRIMARY'
-Warning 1062 Duplicate entry '2' for key 'PRIMARY'
-Warning 1062 Duplicate entry '3' for key 'PRIMARY'
-Warning 1062 Duplicate entry '4' for key 'PRIMARY'
-Warning 1062 Duplicate entry '5' for key 'PRIMARY'
-connection master_1;
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 a 2008-08-01 10:21:39
-2 b 2000-01-01 00:00:00
-3 e 2007-06-04 20:03:11
-4 d 2003-11-30 05:01:03
-5 c 2001-12-31 23:59:59
-
-create table ignore select test
-connection master_1;
-DROP TABLE IF EXISTS ta_l;
-CREATE TABLE ta_l (
-PRIMARY KEY(a)
-) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1
-REPLACE SELECT a, b, c FROM tb_l
-connection master_1;
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 f 2008-07-01 10:21:39
-2 g 2000-02-01 00:00:00
-3 j 2007-05-04 20:03:11
-4 i 2003-10-30 05:01:03
-5 h 2001-10-31 23:59:59
-
-create no index table
-connection master_1;
-DROP TABLE IF EXISTS ta_l_no_idx;
-CREATE TABLE ta_l_no_idx
-MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT2_2_1
-SELECT a, b, c FROM tb_l
-connection master_1;
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l_no_idx ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 f 2008-07-01 10:21:39
-2 g 2000-02-01 00:00:00
-3 j 2007-05-04 20:03:11
-4 i 2003-10-30 05:01:03
-5 h 2001-10-31 23:59:59
-
-select table
-connection master_1;
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 f 2008-07-01 10:21:39
-2 g 2000-02-01 00:00:00
-3 j 2007-05-04 20:03:11
-4 i 2003-10-30 05:01:03
-5 h 2001-10-31 23:59:59
-
-select table shared mode
-connection master_1;
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a
-LOCK IN SHARE MODE;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 f 2008-07-01 10:21:39
-2 g 2000-02-01 00:00:00
-3 j 2007-05-04 20:03:11
-4 i 2003-10-30 05:01:03
-5 h 2001-10-31 23:59:59
-
-select table for update
-connection master_1;
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a
-FOR UPDATE;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 f 2008-07-01 10:21:39
-2 g 2000-02-01 00:00:00
-3 j 2007-05-04 20:03:11
-4 i 2003-10-30 05:01:03
-5 h 2001-10-31 23:59:59
-
-select table join
-connection master_1;
-SELECT a.a, a.b, date_format(b.c, '%Y-%m-%d %H:%i:%s') FROM ta_l a, tb_l b
-WHERE a.a = b.a ORDER BY a.a;
-a b date_format(b.c, '%Y-%m-%d %H:%i:%s')
-1 f 2008-07-01 10:21:39
-2 g 2000-02-01 00:00:00
-3 j 2007-05-04 20:03:11
-4 i 2003-10-30 05:01:03
-5 h 2001-10-31 23:59:59
-
-select table straight_join
-connection master_1;
-SELECT STRAIGHT_JOIN a.a, a.b, date_format(b.c, '%Y-%m-%d %H:%i:%s')
-FROM ta_l a, tb_l b WHERE a.a = b.a ORDER BY a.a;
-a b date_format(b.c, '%Y-%m-%d %H:%i:%s')
-1 f 2008-07-01 10:21:39
-2 g 2000-02-01 00:00:00
-3 j 2007-05-04 20:03:11
-4 i 2003-10-30 05:01:03
-5 h 2001-10-31 23:59:59
-
-select sql_small_result
-connection master_1;
-SELECT SQL_SMALL_RESULT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l
-ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 f 2008-07-01 10:21:39
-2 g 2000-02-01 00:00:00
-3 j 2007-05-04 20:03:11
-4 i 2003-10-30 05:01:03
-5 h 2001-10-31 23:59:59
-
-select sql_big_result
-connection master_1;
-SELECT SQL_BIG_RESULT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l
-ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 f 2008-07-01 10:21:39
-2 g 2000-02-01 00:00:00
-3 j 2007-05-04 20:03:11
-4 i 2003-10-30 05:01:03
-5 h 2001-10-31 23:59:59
-
-select sql_buffer_result
-connection master_1;
-SELECT SQL_BUFFER_RESULT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l
-ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 f 2008-07-01 10:21:39
-2 g 2000-02-01 00:00:00
-3 j 2007-05-04 20:03:11
-4 i 2003-10-30 05:01:03
-5 h 2001-10-31 23:59:59
-
-select sql_cache
-connection master_1;
-SELECT SQL_CACHE a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l
-ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 f 2008-07-01 10:21:39
-2 g 2000-02-01 00:00:00
-3 j 2007-05-04 20:03:11
-4 i 2003-10-30 05:01:03
-5 h 2001-10-31 23:59:59
-
-select sql_no_cache
-connection master_1;
-SELECT SQL_NO_CACHE a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l
-ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 f 2008-07-01 10:21:39
-2 g 2000-02-01 00:00:00
-3 j 2007-05-04 20:03:11
-4 i 2003-10-30 05:01:03
-5 h 2001-10-31 23:59:59
-
-select sql_calc_found_rows
-connection master_1;
-SELECT SQL_CALC_FOUND_ROWS a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l
-ORDER BY a LIMIT 4;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 f 2008-07-01 10:21:39
-2 g 2000-02-01 00:00:00
-3 j 2007-05-04 20:03:11
-4 i 2003-10-30 05:01:03
-connection master_1;
-SELECT found_rows();
-found_rows()
-5
-
-select high_priority
-connection master_1;
-SELECT HIGH_PRIORITY a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l
-ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 f 2008-07-01 10:21:39
-2 g 2000-02-01 00:00:00
-3 j 2007-05-04 20:03:11
-4 i 2003-10-30 05:01:03
-5 h 2001-10-31 23:59:59
-
-select distinct
-connection master_1;
-SELECT DISTINCT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l
-ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 f 2008-07-01 10:21:39
-2 g 2000-02-01 00:00:00
-3 j 2007-05-04 20:03:11
-4 i 2003-10-30 05:01:03
-5 h 2001-10-31 23:59:59
-
-select count
-connection master_1;
-SELECT count(*) FROM ta_l ORDER BY a;
-count(*)
-5
-
-select table join not use index
-connection master_1;
-SELECT a.a, a.b, date_format(a.c, '%Y-%m-%d %H:%i:%s') FROM tb_l a WHERE
-EXISTS (SELECT * FROM ta_l b WHERE b.b = a.b) ORDER BY a.a;
-a b date_format(a.c, '%Y-%m-%d %H:%i:%s')
-1 f 2008-07-01 10:21:39
-2 g 2000-02-01 00:00:00
-3 j 2007-05-04 20:03:11
-4 i 2003-10-30 05:01:03
-5 h 2001-10-31 23:59:59
-
-select using pushdown
-connection master_1;
-SELECT a.a, a.b, date_format(a.c, '%Y-%m-%d %H:%i:%s') FROM ta_l a WHERE
-a.b = 'g' ORDER BY a.a;
-a b date_format(a.c, '%Y-%m-%d %H:%i:%s')
-2 g 2000-02-01 00:00:00
-
-select using index and pushdown
-connection master_1;
-SELECT a.a, a.b, date_format(a.c, '%Y-%m-%d %H:%i:%s') FROM ta_l a WHERE
-a.a > 0 AND a.b = 'g' ORDER BY a.a;
-a b date_format(a.c, '%Y-%m-%d %H:%i:%s')
-2 g 2000-02-01 00:00:00
-
-insert
-connection master_1;
-TRUNCATE TABLE ta_l;
-connection master_1;
-INSERT INTO ta_l (a, b, c) VALUES (2, 'e', '2008-01-01 23:59:59');
-connection master_1;
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-2 e 2008-01-01 23:59:59
-
-insert select
-connection master_1;
-TRUNCATE TABLE ta_l;
-connection master_1;
-INSERT INTO ta_l (a, b, c) SELECT a, b, c FROM tb_l;
-connection master_1;
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 f 2008-07-01 10:21:39
-2 g 2000-02-01 00:00:00
-3 j 2007-05-04 20:03:11
-4 i 2003-10-30 05:01:03
-5 h 2001-10-31 23:59:59
-
-insert select a
-connection master_1;
-TRUNCATE TABLE ta_l;
-connection master_1;
-INSERT INTO ta_l (a, b, c) VALUES ((SELECT a FROM tb_l ORDER BY a LIMIT 1),
-'e', '2008-01-01 23:59:59');
-connection master_1;
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 e 2008-01-01 23:59:59
-
-insert low_priority
-connection master_1;
-TRUNCATE TABLE ta_l;
-connection master_1;
-INSERT LOW_PRIORITY INTO ta_l (a, b, c) values (2, 'e', '2008-01-01 23:59:59');
-connection master_1;
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-2 e 2008-01-01 23:59:59
-
-insert high_priority
-connection master_1;
-TRUNCATE TABLE ta_l;
-connection master_1;
-INSERT HIGH_PRIORITY INTO ta_l (a, b, c) VALUES (2, 'e',
-'2008-01-01 23:59:59');
-connection master_1;
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-2 e 2008-01-01 23:59:59
-
-insert ignore
-connection master_1;
-INSERT IGNORE INTO ta_l (a, b, c) VALUES (2, 'd', '2009-02-02 01:01:01');
-Warnings:
-Warning 1062 Duplicate entry '2' for key 'PRIMARY'
-connection master_1;
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-2 e 2008-01-01 23:59:59
-
-insert update (insert)
-connection master_1;
-TRUNCATE TABLE ta_l;
-connection master_1;
-INSERT INTO ta_l (a, b, c) VALUES (2, 'e', '2008-01-01 23:59:59') ON DUPLICATE
-KEY UPDATE b = 'f', c = '2005-08-08 11:11:11';
-connection master_1;
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-2 e 2008-01-01 23:59:59
-
-insert update (update)
-connection master_1;
-INSERT INTO ta_l (a, b, c) VALUES (2, 'e', '2008-01-01 23:59:59') ON DUPLICATE
-KEY UPDATE b = 'f', c = '2005-08-08 11:11:11';
-connection master_1;
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-2 f 2005-08-08 11:11:11
-
-replace
-connection master_1;
-TRUNCATE TABLE ta_l;
-INSERT INTO ta_l (a, b, c) VALUES (2, 'e', '2008-01-01 23:59:59');
-connection master_1;
-REPLACE INTO ta_l (a, b, c) VALUES (2, 'f', '2008-02-02 02:02:02');
-connection master_1;
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-2 f 2008-02-02 02:02:02
-
-replace select
-connection master_1;
-REPLACE INTO ta_l (a, b, c) SELECT a, b, c FROM tb_l;
-connection master_1;
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 f 2008-07-01 10:21:39
-2 g 2000-02-01 00:00:00
-3 j 2007-05-04 20:03:11
-4 i 2003-10-30 05:01:03
-5 h 2001-10-31 23:59:59
-
-replace select a
-connection master_1;
-REPLACE INTO ta_l (a, b, c) VALUES ((SELECT a FROM tb_l ORDER BY a LIMIT 1),
-'e', '2008-01-01 23:59:59');
-connection master_1;
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 e 2008-01-01 23:59:59
-2 g 2000-02-01 00:00:00
-3 j 2007-05-04 20:03:11
-4 i 2003-10-30 05:01:03
-5 h 2001-10-31 23:59:59
-
-replace low_priority
-connection master_1;
-REPLACE LOW_PRIORITY INTO ta_l (a, b, c) VALUES (3, 'g',
-'2009-03-03 03:03:03');
-connection master_1;
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 e 2008-01-01 23:59:59
-2 g 2000-02-01 00:00:00
-3 g 2009-03-03 03:03:03
-4 i 2003-10-30 05:01:03
-5 h 2001-10-31 23:59:59
-
-update
-TRUNCATE TABLE ta_l;
-INSERT INTO ta_l (a, b, c) VALUES (1, 'e', '2008-01-01 23:59:59'),
-(2, 'e', '2008-01-01 23:59:59');
-connection master_1;
-UPDATE ta_l SET b = 'f', c = '2008-02-02 02:02:02' WHERE a = 2;
-connection master_1;
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 e 2008-01-01 23:59:59
-2 f 2008-02-02 02:02:02
-
-update select
-connection master_1;
-UPDATE ta_l SET b = 'g', c = '2009-03-03 03:03:03' WHERE a IN (SELECT a FROM
-tb_l);
-connection master_1;
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 g 2009-03-03 03:03:03
-2 g 2009-03-03 03:03:03
-
-update select a
-connection master_1;
-UPDATE ta_l SET b = 'h', c = '2010-04-04 04:04:04' WHERE a = (SELECT a FROM
-tb_l ORDER BY a LIMIT 1);
-connection master_1;
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 h 2010-04-04 04:04:04
-2 g 2009-03-03 03:03:03
-
-update join
-connection master_1;
-UPDATE ta_l a, tb_l b SET a.b = b.b, a.c = b.c WHERE a.a = b.a;
-connection master_1;
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 f 2008-07-01 10:21:39
-2 g 2000-02-01 00:00:00
-
-update join a
-connection master_1;
-UPDATE ta_l a, tb_l b SET a.b = 'g', a.c = '2009-03-03 03:03:03' WHERE
-a.a = b.a;
-connection master_1;
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 g 2009-03-03 03:03:03
-2 g 2009-03-03 03:03:03
-
-update low_priority
-connection master_1;
-UPDATE LOW_PRIORITY ta_l SET b = 'f', c = '2008-02-02 02:02:02' WHERE a = 2;
-connection master_1;
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 g 2009-03-03 03:03:03
-2 f 2008-02-02 02:02:02
-
-update ignore
-connection master_1;
-UPDATE IGNORE ta_l SET a = 1, b = 'g', c = '2009-03-03 03:03:03' WHERE a = 2;
-connection master_1;
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 g 2009-03-03 03:03:03
-2 f 2008-02-02 02:02:02
-
-update pushdown
-connection master_1;
-update ta_l set b = 'j', c = '2009-03-03 03:03:03' where b = 'f';
-connection master_1;
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 g 2009-03-03 03:03:03
-2 j 2009-03-03 03:03:03
-
-update index pushdown
-connection master_1;
-UPDATE ta_l SET b = 'g', c = '2009-03-03 03:03:03' WHERE a > 0 AND b = 'j';
-connection master_1;
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 g 2009-03-03 03:03:03
-2 g 2009-03-03 03:03:03
-
-delete
-TRUNCATE TABLE ta_l;
-INSERT INTO ta_l (a, b, c) VALUES (1, 'e', '2008-01-01 23:59:59'),
-(2, 'e', '2008-01-01 23:59:59'), (3, 'e', '2008-01-01 23:59:59'),
-(4, 'e', '2008-01-01 23:59:59'), (5, 'e', '2008-01-01 23:59:59'),
-(6, 'e', '2008-01-01 23:59:59'), (7, 'e', '2008-01-01 23:59:59'),
-(8, 'e', '2008-01-01 23:59:59'), (9, 'e', '2008-01-01 23:59:59'),
-(10, 'j', '2008-01-01 23:59:59');
-connection master_1;
-DELETE FROM ta_l WHERE a = 2;
-connection master_1;
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 e 2008-01-01 23:59:59
-3 e 2008-01-01 23:59:59
-4 e 2008-01-01 23:59:59
-5 e 2008-01-01 23:59:59
-6 e 2008-01-01 23:59:59
-7 e 2008-01-01 23:59:59
-8 e 2008-01-01 23:59:59
-9 e 2008-01-01 23:59:59
-10 j 2008-01-01 23:59:59
-
-delete all
-connection master_1;
-DELETE FROM ta_l;
-connection master_1;
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-
-delete select
-TRUNCATE TABLE ta_l;
-INSERT INTO ta_l (a, b, c) VALUES (1, 'e', '2008-01-01 23:59:59'),
-(2, 'e', '2008-01-01 23:59:59'), (3, 'e', '2008-01-01 23:59:59'),
-(4, 'e', '2008-01-01 23:59:59'), (5, 'e', '2008-01-01 23:59:59'),
-(6, 'e', '2008-01-01 23:59:59'), (7, 'e', '2008-01-01 23:59:59'),
-(8, 'e', '2008-01-01 23:59:59'), (9, 'e', '2008-01-01 23:59:59'),
-(10, 'j', '2008-01-01 23:59:59');
-connection master_1;
-DELETE FROM ta_l WHERE a IN (SELECT a FROM tb_l);
-connection master_1;
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-6 e 2008-01-01 23:59:59
-7 e 2008-01-01 23:59:59
-8 e 2008-01-01 23:59:59
-9 e 2008-01-01 23:59:59
-10 j 2008-01-01 23:59:59
-
-delete select a
-TRUNCATE TABLE ta_l;
-INSERT INTO ta_l (a, b, c) VALUES (1, 'e', '2008-01-01 23:59:59'),
-(2, 'e', '2008-01-01 23:59:59'), (3, 'e', '2008-01-01 23:59:59'),
-(4, 'e', '2008-01-01 23:59:59'), (5, 'e', '2008-01-01 23:59:59'),
-(6, 'e', '2008-01-01 23:59:59'), (7, 'e', '2008-01-01 23:59:59'),
-(8, 'e', '2008-01-01 23:59:59'), (9, 'e', '2008-01-01 23:59:59'),
-(10, 'j', '2008-01-01 23:59:59');
-connection master_1;
-DELETE FROM ta_l WHERE a = (SELECT a FROM tb_l ORDER BY a LIMIT 1);
-connection master_1;
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-2 e 2008-01-01 23:59:59
-3 e 2008-01-01 23:59:59
-4 e 2008-01-01 23:59:59
-5 e 2008-01-01 23:59:59
-6 e 2008-01-01 23:59:59
-7 e 2008-01-01 23:59:59
-8 e 2008-01-01 23:59:59
-9 e 2008-01-01 23:59:59
-10 j 2008-01-01 23:59:59
-
-delete join
-TRUNCATE TABLE ta_l;
-INSERT INTO ta_l (a, b, c) VALUES (1, 'e', '2008-01-01 23:59:59'),
-(2, 'e', '2008-01-01 23:59:59'), (3, 'e', '2008-01-01 23:59:59'),
-(4, 'e', '2008-01-01 23:59:59'), (5, 'e', '2008-01-01 23:59:59'),
-(6, 'e', '2008-01-01 23:59:59'), (7, 'e', '2008-01-01 23:59:59'),
-(8, 'e', '2008-01-01 23:59:59'), (9, 'e', '2008-01-01 23:59:59'),
-(10, 'j', '2008-01-01 23:59:59');
-connection master_1;
-DELETE a FROM ta_l a, (SELECT a FROM tb_l ORDER BY a) b WHERE a.a = b.a;
-connection master_1;
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-6 e 2008-01-01 23:59:59
-7 e 2008-01-01 23:59:59
-8 e 2008-01-01 23:59:59
-9 e 2008-01-01 23:59:59
-10 j 2008-01-01 23:59:59
-
-delete low_priority
-TRUNCATE TABLE ta_l;
-INSERT INTO ta_l (a, b, c) VALUES (1, 'e', '2008-01-01 23:59:59'),
-(2, 'e', '2008-01-01 23:59:59'), (3, 'e', '2008-01-01 23:59:59'),
-(4, 'e', '2008-01-01 23:59:59'), (5, 'e', '2008-01-01 23:59:59'),
-(6, 'e', '2008-01-01 23:59:59'), (7, 'e', '2008-01-01 23:59:59'),
-(8, 'e', '2008-01-01 23:59:59'), (9, 'e', '2008-01-01 23:59:59'),
-(10, 'j', '2008-01-01 23:59:59');
-connection master_1;
-DELETE LOW_PRIORITY FROM ta_l WHERE a = 2;
-connection master_1;
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 e 2008-01-01 23:59:59
-3 e 2008-01-01 23:59:59
-4 e 2008-01-01 23:59:59
-5 e 2008-01-01 23:59:59
-6 e 2008-01-01 23:59:59
-7 e 2008-01-01 23:59:59
-8 e 2008-01-01 23:59:59
-9 e 2008-01-01 23:59:59
-10 j 2008-01-01 23:59:59
-
-delete ignore
-TRUNCATE TABLE ta_l;
-INSERT INTO ta_l (a, b, c) VALUES (1, 'e', '2008-01-01 23:59:59'),
-(2, 'e', '2008-01-01 23:59:59'), (3, 'e', '2008-01-01 23:59:59'),
-(4, 'e', '2008-01-01 23:59:59'), (5, 'e', '2008-01-01 23:59:59'),
-(6, 'e', '2008-01-01 23:59:59'), (7, 'e', '2008-01-01 23:59:59'),
-(8, 'e', '2008-01-01 23:59:59'), (9, 'e', '2008-01-01 23:59:59'),
-(10, 'j', '2008-01-01 23:59:59');
-connection master_1;
-DELETE IGNORE FROM ta_l WHERE a = 2;
-connection master_1;
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 e 2008-01-01 23:59:59
-3 e 2008-01-01 23:59:59
-4 e 2008-01-01 23:59:59
-5 e 2008-01-01 23:59:59
-6 e 2008-01-01 23:59:59
-7 e 2008-01-01 23:59:59
-8 e 2008-01-01 23:59:59
-9 e 2008-01-01 23:59:59
-10 j 2008-01-01 23:59:59
-
-delete quick
-TRUNCATE TABLE ta_l;
-INSERT INTO ta_l (a, b, c) VALUES (1, 'e', '2008-01-01 23:59:59'),
-(2, 'e', '2008-01-01 23:59:59'), (3, 'e', '2008-01-01 23:59:59'),
-(4, 'e', '2008-01-01 23:59:59'), (5, 'e', '2008-01-01 23:59:59'),
-(6, 'e', '2008-01-01 23:59:59'), (7, 'e', '2008-01-01 23:59:59'),
-(8, 'e', '2008-01-01 23:59:59'), (9, 'e', '2008-01-01 23:59:59'),
-(10, 'j', '2008-01-01 23:59:59');
-connection master_1;
-DELETE QUICK FROM ta_l WHERE a = 2;
-connection master_1;
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 e 2008-01-01 23:59:59
-3 e 2008-01-01 23:59:59
-4 e 2008-01-01 23:59:59
-5 e 2008-01-01 23:59:59
-6 e 2008-01-01 23:59:59
-7 e 2008-01-01 23:59:59
-8 e 2008-01-01 23:59:59
-9 e 2008-01-01 23:59:59
-10 j 2008-01-01 23:59:59
-
-delete pushdown
-TRUNCATE TABLE ta_l;
-INSERT INTO ta_l (a, b, c) VALUES (1, 'e', '2008-01-01 23:59:59'),
-(2, 'e', '2008-01-01 23:59:59'), (3, 'e', '2008-01-01 23:59:59'),
-(4, 'e', '2008-01-01 23:59:59'), (5, 'e', '2008-01-01 23:59:59'),
-(6, 'e', '2008-01-01 23:59:59'), (7, 'e', '2008-01-01 23:59:59'),
-(8, 'e', '2008-01-01 23:59:59'), (9, 'e', '2008-01-01 23:59:59'),
-(10, 'j', '2008-01-01 23:59:59');
-connection master_1;
-DELETE FROM ta_l WHERE b = 'e';
-connection master_1;
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-10 j 2008-01-01 23:59:59
-
-delete index pushdown
-TRUNCATE TABLE ta_l;
-INSERT INTO ta_l (a, b, c) VALUES (1, 'e', '2008-01-01 23:59:59'),
-(2, 'e', '2008-01-01 23:59:59'), (3, 'e', '2008-01-01 23:59:59'),
-(4, 'e', '2008-01-01 23:59:59'), (5, 'e', '2008-01-01 23:59:59'),
-(6, 'e', '2008-01-01 23:59:59'), (7, 'e', '2008-01-01 23:59:59'),
-(8, 'e', '2008-01-01 23:59:59'), (9, 'e', '2008-01-01 23:59:59'),
-(10, 'j', '2008-01-01 23:59:59');
-connection master_1;
-DELETE FROM ta_l WHERE a > 0 AND b = 'e';
-connection master_1;
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-10 j 2008-01-01 23:59:59
-
-truncate
-connection master_1;
-TRUNCATE TABLE ta_l;
-connection master_1;
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-
-deinit
-connection master_1;
-DROP DATABASE IF EXISTS auto_test_local;
-connection child2_1;
-DROP DATABASE IF EXISTS auto_test_remote;
-connection child2_2;
-DROP DATABASE IF EXISTS auto_test_remote2;
-for master_1
-for child2
-child2_1
-child2_2
-child2_3
-for child3
-child3_1
-child3_2
-child3_3
-
-end of test
diff --git a/storage/spider/mysql-test/spider/handler/r/basic_sql_part.result b/storage/spider/mysql-test/spider/handler/r/basic_sql_part.result
deleted file mode 100644
index 0f4029404a7..00000000000
--- a/storage/spider/mysql-test/spider/handler/r/basic_sql_part.result
+++ /dev/null
@@ -1,141 +0,0 @@
-for master_1
-for child2
-child2_1
-child2_2
-child2_3
-for child3
-child3_1
-child3_2
-child3_3
-
-drop and create databases
-connection master_1;
-DROP DATABASE IF EXISTS auto_test_local;
-CREATE DATABASE auto_test_local;
-USE auto_test_local;
-connection child2_1;
-DROP DATABASE IF EXISTS auto_test_remote;
-CREATE DATABASE auto_test_remote;
-USE auto_test_remote;
-connection child2_2;
-DROP DATABASE IF EXISTS auto_test_remote2;
-CREATE DATABASE auto_test_remote2;
-USE auto_test_remote2;
-
-test select 1
-connection master_1;
-SELECT 1;
-1
-1
-connection master_1;
-DROP TABLE IF EXISTS tb_l;
-CREATE TABLE tb_l (
-a INT,
-b CHAR(1),
-c DATETIME,
-PRIMARY KEY(a)
-) MASTER_1_ENGINE2 MASTER_1_CHARSET2
-INSERT INTO tb_l (a, b, c) VALUES
-(1, 'f', '2008-07-01 10:21:39'),
-(2, 'g', '2000-02-01 00:00:00'),
-(3, 'j', '2007-05-04 20:03:11'),
-(4, 'i', '2003-10-30 05:01:03'),
-(5, 'h', '2001-10-31 23:59:59');
-
-create table with partition and select test
-connection master_1;
-CREATE TABLE ta_l2 (
-PRIMARY KEY(a)
-) MASTER_1_ENGINE MASTER_1_COMMENT_P_2_1
-SELECT a, b, c FROM tb_l
-connection master_1;
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 f 2008-07-01 10:21:39
-2 g 2000-02-01 00:00:00
-3 j 2007-05-04 20:03:11
-4 i 2003-10-30 05:01:03
-5 h 2001-10-31 23:59:59
-
-select partition using pushdown
-connection master_1;
-SELECT a.a, a.b, date_format(a.c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 a WHERE
-a.b = 'g' ORDER BY a.a;
-a b date_format(a.c, '%Y-%m-%d %H:%i:%s')
-2 g 2000-02-01 00:00:00
-
-select partition using index pushdown
-connection master_1;
-SELECT a.a, a.b, date_format(a.c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 a WHERE
-a.a > 0 AND a.b = 'g' ORDER BY a.a;
-a b date_format(a.c, '%Y-%m-%d %H:%i:%s')
-2 g 2000-02-01 00:00:00
-
-update partition pushdown
-connection master_1;
-UPDATE ta_l2 SET b = 'e', c = '2009-03-03 03:03:03' WHERE b = 'j';
-connection master_1;
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 f 2008-07-01 10:21:39
-2 g 2000-02-01 00:00:00
-3 e 2009-03-03 03:03:03
-4 i 2003-10-30 05:01:03
-5 h 2001-10-31 23:59:59
-
-update partition index pushdown
-connection master_1;
-UPDATE ta_l2 SET b = 'j', c = '2009-03-03 03:03:03' WHERE a > 0 AND b = 'e';
-connection master_1;
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 f 2008-07-01 10:21:39
-2 g 2000-02-01 00:00:00
-3 j 2009-03-03 03:03:03
-4 i 2003-10-30 05:01:03
-5 h 2001-10-31 23:59:59
-
-delete partition pushdown
-TRUNCATE TABLE ta_l2;
-INSERT INTO ta_l2 SELECT a, b, c FROM tb_l;
-connection master_1;
-DELETE FROM ta_l2 WHERE b = 'g';
-connection master_1;
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 f 2008-07-01 10:21:39
-3 j 2007-05-04 20:03:11
-4 i 2003-10-30 05:01:03
-5 h 2001-10-31 23:59:59
-
-delete partition index pushdown
-TRUNCATE TABLE ta_l2;
-INSERT INTO ta_l2 SELECT a, b, c FROM tb_l;
-connection master_1;
-DELETE FROM ta_l2 WHERE a > 0 AND b = 'g';
-connection master_1;
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 f 2008-07-01 10:21:39
-3 j 2007-05-04 20:03:11
-4 i 2003-10-30 05:01:03
-5 h 2001-10-31 23:59:59
-
-deinit
-connection master_1;
-DROP DATABASE IF EXISTS auto_test_local;
-connection child2_1;
-DROP DATABASE IF EXISTS auto_test_remote;
-connection child2_2;
-DROP DATABASE IF EXISTS auto_test_remote2;
-for master_1
-for child2
-child2_1
-child2_2
-child2_3
-for child3
-child3_1
-child3_2
-child3_3
-
-end of test
diff --git a/storage/spider/mysql-test/spider/handler/r/direct_aggregate.result b/storage/spider/mysql-test/spider/handler/r/direct_aggregate.result
deleted file mode 100644
index 9a8660ba79e..00000000000
--- a/storage/spider/mysql-test/spider/handler/r/direct_aggregate.result
+++ /dev/null
@@ -1,100 +0,0 @@
-for master_1
-for child2
-child2_1
-child2_2
-child2_3
-for child3
-child3_1
-child3_2
-child3_3
-
-drop and create databases
-connection master_1;
-DROP DATABASE IF EXISTS auto_test_local;
-CREATE DATABASE auto_test_local;
-USE auto_test_local;
-connection child2_1;
-DROP DATABASE IF EXISTS auto_test_remote;
-CREATE DATABASE auto_test_remote;
-USE auto_test_remote;
-connection child2_2;
-DROP DATABASE IF EXISTS auto_test_remote2;
-CREATE DATABASE auto_test_remote2;
-USE auto_test_remote2;
-
-test select 1
-connection master_1;
-SELECT 1;
-1
-1
-
-create table select test
-connection master_1;
-DROP TABLE IF EXISTS ta_l;
-CREATE TABLE ta_l (
-a INT,
-b CHAR(1),
-c DATETIME,
-PRIMARY KEY(a)
-) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1
-INSERT INTO ta_l (a, b, c) VALUES
-(1, 'a', '2008-08-01 10:21:39'),
-(2, 'b', '2000-01-01 00:00:00'),
-(3, 'e', '2007-06-04 20:03:11'),
-(4, 'd', '2003-11-30 05:01:03'),
-(5, 'c', '2001-12-31 23:59:59');
-
-direct_aggregating test
-connection master_1;
-SHOW STATUS LIKE 'Spider_direct_aggregate';
-Variable_name Value
-Spider_direct_aggregate 0
-SELECT COUNT(*) FROM ta_l;
-COUNT(*)
-5
-SHOW STATUS LIKE 'Spider_direct_aggregate';
-Variable_name Value
-Spider_direct_aggregate 0
-SELECT MAX(a) FROM ta_l;
-MAX(a)
-5
-SHOW STATUS LIKE 'Spider_direct_aggregate';
-Variable_name Value
-Spider_direct_aggregate 0
-SELECT MIN(a) FROM ta_l;
-MIN(a)
-1
-SHOW STATUS LIKE 'Spider_direct_aggregate';
-Variable_name Value
-Spider_direct_aggregate 0
-SELECT MAX(a) FROM ta_l WHERE a < 5;
-MAX(a)
-4
-SHOW STATUS LIKE 'Spider_direct_aggregate';
-Variable_name Value
-Spider_direct_aggregate 0
-SELECT MIN(a) FROM ta_l WHERE a > 1;
-MIN(a)
-2
-SHOW STATUS LIKE 'Spider_direct_aggregate';
-Variable_name Value
-Spider_direct_aggregate 0
-
-deinit
-connection master_1;
-DROP DATABASE IF EXISTS auto_test_local;
-connection child2_1;
-DROP DATABASE IF EXISTS auto_test_remote;
-connection child2_2;
-DROP DATABASE IF EXISTS auto_test_remote2;
-for master_1
-for child2
-child2_1
-child2_2
-child2_3
-for child3
-child3_1
-child3_2
-child3_3
-
-end of test
diff --git a/storage/spider/mysql-test/spider/handler/r/direct_aggregate_part.result b/storage/spider/mysql-test/spider/handler/r/direct_aggregate_part.result
deleted file mode 100644
index 760b39e16d5..00000000000
--- a/storage/spider/mysql-test/spider/handler/r/direct_aggregate_part.result
+++ /dev/null
@@ -1,90 +0,0 @@
-for master_1
-for child2
-child2_1
-child2_2
-child2_3
-for child3
-child3_1
-child3_2
-child3_3
-
-drop and create databases
-connection master_1;
-DROP DATABASE IF EXISTS auto_test_local;
-CREATE DATABASE auto_test_local;
-USE auto_test_local;
-connection child2_1;
-DROP DATABASE IF EXISTS auto_test_remote;
-CREATE DATABASE auto_test_remote;
-USE auto_test_remote;
-connection child2_2;
-DROP DATABASE IF EXISTS auto_test_remote2;
-CREATE DATABASE auto_test_remote2;
-USE auto_test_remote2;
-
-test select 1
-connection master_1;
-SELECT 1;
-1
-1
-
-with partition test
-connection master_1;
-CREATE TABLE ta_l2 (
-a INT,
-b CHAR(1),
-c DATETIME,
-PRIMARY KEY(a)
-) MASTER_1_ENGINE MASTER_1_COMMENT2_P_2_1
-SHOW STATUS LIKE 'Spider_direct_aggregate';
-Variable_name Value
-Spider_direct_aggregate 0
-SELECT COUNT(*) FROM ta_l2;
-COUNT(*)
-5
-SHOW STATUS LIKE 'Spider_direct_aggregate';
-Variable_name Value
-Spider_direct_aggregate 0
-SELECT MAX(a) FROM ta_l2;
-MAX(a)
-5
-SHOW STATUS LIKE 'Spider_direct_aggregate';
-Variable_name Value
-Spider_direct_aggregate 0
-SELECT MIN(a) FROM ta_l2;
-MIN(a)
-1
-SHOW STATUS LIKE 'Spider_direct_aggregate';
-Variable_name Value
-Spider_direct_aggregate 0
-SELECT MAX(a) FROM ta_l2 WHERE a < 5;
-MAX(a)
-4
-SHOW STATUS LIKE 'Spider_direct_aggregate';
-Variable_name Value
-Spider_direct_aggregate 0
-SELECT MIN(a) FROM ta_l2 WHERE a > 1;
-MIN(a)
-2
-SHOW STATUS LIKE 'Spider_direct_aggregate';
-Variable_name Value
-Spider_direct_aggregate 0
-
-deinit
-connection master_1;
-DROP DATABASE IF EXISTS auto_test_local;
-connection child2_1;
-DROP DATABASE IF EXISTS auto_test_remote;
-connection child2_2;
-DROP DATABASE IF EXISTS auto_test_remote2;
-for master_1
-for child2
-child2_1
-child2_2
-child2_3
-for child3
-child3_1
-child3_2
-child3_3
-
-end of test
diff --git a/storage/spider/mysql-test/spider/handler/r/direct_update.result b/storage/spider/mysql-test/spider/handler/r/direct_update.result
deleted file mode 100644
index 0e536d48617..00000000000
--- a/storage/spider/mysql-test/spider/handler/r/direct_update.result
+++ /dev/null
@@ -1,155 +0,0 @@
-for master_1
-for child2
-child2_1
-child2_2
-child2_3
-for child3
-child3_1
-child3_2
-child3_3
-
-drop and create databases
-connection master_1;
-DROP DATABASE IF EXISTS auto_test_local;
-CREATE DATABASE auto_test_local;
-USE auto_test_local;
-connection child2_1;
-DROP DATABASE IF EXISTS auto_test_remote;
-CREATE DATABASE auto_test_remote;
-USE auto_test_remote;
-connection child2_2;
-DROP DATABASE IF EXISTS auto_test_remote2;
-CREATE DATABASE auto_test_remote2;
-USE auto_test_remote2;
-
-test select 1
-connection master_1;
-SELECT 1;
-1
-1
-
-create table select test
-connection master_1;
-DROP TABLE IF EXISTS ta_l;
-CREATE TABLE ta_l (
-a INT,
-b CHAR(1),
-c DATETIME,
-PRIMARY KEY(a)
-) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1
-INSERT INTO ta_l (a, b, c) VALUES
-(1, 'a', '2008-08-01 10:21:39'),
-(2, 'b', '2000-01-01 00:00:00'),
-(3, 'e', '2007-06-04 20:03:11'),
-(4, 'd', '2003-11-30 05:01:03'),
-(5, 'c', '2001-12-31 23:59:59');
-
-direct_updating test
-connection master_1;
-SHOW STATUS LIKE 'Spider_direct_update';
-Variable_name Value
-Spider_direct_update 0
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 a 2008-08-01 10:21:39
-2 b 2000-01-01 00:00:00
-3 e 2007-06-04 20:03:11
-4 d 2003-11-30 05:01:03
-5 c 2001-12-31 23:59:59
-update all rows with function
-UPDATE ta_l SET c = ADDDATE(c, 1);
-SHOW STATUS LIKE 'Spider_direct_update';
-Variable_name Value
-Spider_direct_update 1
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 a 2008-08-02 10:21:39
-2 b 2000-01-02 00:00:00
-3 e 2007-06-05 20:03:11
-4 d 2003-12-01 05:01:03
-5 c 2002-01-01 23:59:59
-update by primary key
-UPDATE ta_l SET b = 'x' WHERE a = 3;
-SHOW STATUS LIKE 'Spider_direct_update';
-Variable_name Value
-Spider_direct_update 2
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 a 2008-08-02 10:21:39
-2 b 2000-01-02 00:00:00
-3 x 2007-06-05 20:03:11
-4 d 2003-12-01 05:01:03
-5 c 2002-01-01 23:59:59
-update by a column without index
-UPDATE ta_l SET c = '2011-10-17' WHERE b = 'x';
-SHOW STATUS LIKE 'Spider_direct_update';
-Variable_name Value
-Spider_direct_update 3
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 a 2008-08-02 10:21:39
-2 b 2000-01-02 00:00:00
-3 x 2011-10-17 00:00:00
-4 d 2003-12-01 05:01:03
-5 c 2002-01-01 23:59:59
-update by primary key with order and limit
-UPDATE ta_l SET c = ADDDATE(c, 1) WHERE a < 4 ORDER BY b DESC LIMIT 1;
-SHOW STATUS LIKE 'Spider_direct_update';
-Variable_name Value
-Spider_direct_update 4
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 a 2008-08-02 10:21:39
-2 b 2000-01-02 00:00:00
-3 x 2011-10-18 00:00:00
-4 d 2003-12-01 05:01:03
-5 c 2002-01-01 23:59:59
-delete by primary key with order and limit
-DELETE FROM ta_l WHERE a < 4 ORDER BY c LIMIT 1;
-SHOW STATUS LIKE 'Spider_direct_delete';
-Variable_name Value
-Spider_direct_delete 1
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 a 2008-08-02 10:21:39
-3 x 2011-10-18 00:00:00
-4 d 2003-12-01 05:01:03
-5 c 2002-01-01 23:59:59
-delete by a column without index
-DELETE FROM ta_l WHERE b = 'c';
-SHOW STATUS LIKE 'Spider_direct_delete';
-Variable_name Value
-Spider_direct_delete 2
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 a 2008-08-02 10:21:39
-3 x 2011-10-18 00:00:00
-4 d 2003-12-01 05:01:03
-delete by primary key
-DELETE FROM ta_l WHERE a = 3;
-SHOW STATUS LIKE 'Spider_direct_delete';
-Variable_name Value
-Spider_direct_delete 3
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 a 2008-08-02 10:21:39
-4 d 2003-12-01 05:01:03
-
-deinit
-connection master_1;
-DROP DATABASE IF EXISTS auto_test_local;
-connection child2_1;
-DROP DATABASE IF EXISTS auto_test_remote;
-connection child2_2;
-DROP DATABASE IF EXISTS auto_test_remote2;
-for master_1
-for child2
-child2_1
-child2_2
-child2_3
-for child3
-child3_1
-child3_2
-child3_3
-
-end of test
diff --git a/storage/spider/mysql-test/spider/handler/r/direct_update_part.result b/storage/spider/mysql-test/spider/handler/r/direct_update_part.result
deleted file mode 100644
index 7069cd72fda..00000000000
--- a/storage/spider/mysql-test/spider/handler/r/direct_update_part.result
+++ /dev/null
@@ -1,145 +0,0 @@
-for master_1
-for child2
-child2_1
-child2_2
-child2_3
-for child3
-child3_1
-child3_2
-child3_3
-
-drop and create databases
-connection master_1;
-DROP DATABASE IF EXISTS auto_test_local;
-CREATE DATABASE auto_test_local;
-USE auto_test_local;
-connection child2_1;
-DROP DATABASE IF EXISTS auto_test_remote;
-CREATE DATABASE auto_test_remote;
-USE auto_test_remote;
-connection child2_2;
-DROP DATABASE IF EXISTS auto_test_remote2;
-CREATE DATABASE auto_test_remote2;
-USE auto_test_remote2;
-
-test select 1
-connection master_1;
-SELECT 1;
-1
-1
-
-with partition test
-connection master_1;
-CREATE TABLE ta_l2 (
-a INT,
-b CHAR(1),
-c DATETIME,
-PRIMARY KEY(a)
-) MASTER_1_ENGINE MASTER_1_COMMENT2_P_2_1
-SHOW STATUS LIKE 'Spider_direct_update';
-Variable_name Value
-Spider_direct_update 0
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 a 2008-08-01 10:21:39
-2 b 2000-01-01 00:00:00
-3 e 2007-06-04 20:03:11
-4 d 2003-11-30 05:01:03
-5 c 2001-12-31 23:59:59
-update all rows with function
-UPDATE ta_l2 SET c = ADDDATE(c, 1);
-SHOW STATUS LIKE 'Spider_direct_update';
-Variable_name Value
-Spider_direct_update 2
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 a 2008-08-02 10:21:39
-2 b 2000-01-02 00:00:00
-3 e 2007-06-05 20:03:11
-4 d 2003-12-01 05:01:03
-5 c 2002-01-01 23:59:59
-update by primary key
-UPDATE ta_l2 SET b = 'x' WHERE a = 3;
-SHOW STATUS LIKE 'Spider_direct_update';
-Variable_name Value
-Spider_direct_update 3
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 a 2008-08-02 10:21:39
-2 b 2000-01-02 00:00:00
-3 x 2007-06-05 20:03:11
-4 d 2003-12-01 05:01:03
-5 c 2002-01-01 23:59:59
-update by a column without index
-UPDATE ta_l2 SET c = '2011-10-17' WHERE b = 'x';
-SHOW STATUS LIKE 'Spider_direct_update';
-Variable_name Value
-Spider_direct_update 5
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 a 2008-08-02 10:21:39
-2 b 2000-01-02 00:00:00
-3 x 2011-10-17 00:00:00
-4 d 2003-12-01 05:01:03
-5 c 2002-01-01 23:59:59
-update by primary key with order and limit
-UPDATE ta_l2 SET c = ADDDATE(c, 1) WHERE a < 4 ORDER BY b DESC LIMIT 1;
-SHOW STATUS LIKE 'Spider_direct_update';
-Variable_name Value
-Spider_direct_update 6
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 a 2008-08-02 10:21:39
-2 b 2000-01-02 00:00:00
-3 x 2011-10-18 00:00:00
-4 d 2003-12-01 05:01:03
-5 c 2002-01-01 23:59:59
-delete by primary key with order and limit
-DELETE FROM ta_l2 WHERE a < 4 ORDER BY c LIMIT 1;
-SHOW STATUS LIKE 'Spider_direct_delete';
-Variable_name Value
-Spider_direct_delete 1
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 a 2008-08-02 10:21:39
-3 x 2011-10-18 00:00:00
-4 d 2003-12-01 05:01:03
-5 c 2002-01-01 23:59:59
-delete by a column without index
-DELETE FROM ta_l2 WHERE b = 'c';
-SHOW STATUS LIKE 'Spider_direct_delete';
-Variable_name Value
-Spider_direct_delete 3
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 a 2008-08-02 10:21:39
-3 x 2011-10-18 00:00:00
-4 d 2003-12-01 05:01:03
-delete by primary key
-DELETE FROM ta_l2 WHERE a = 3;
-SHOW STATUS LIKE 'Spider_direct_delete';
-Variable_name Value
-Spider_direct_delete 4
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 a 2008-08-02 10:21:39
-4 d 2003-12-01 05:01:03
-
-deinit
-connection master_1;
-DROP DATABASE IF EXISTS auto_test_local;
-connection child2_1;
-DROP DATABASE IF EXISTS auto_test_remote;
-connection child2_2;
-DROP DATABASE IF EXISTS auto_test_remote2;
-for master_1
-for child2
-child2_1
-child2_2
-child2_3
-for child3
-child3_1
-child3_2
-child3_3
-
-end of test
diff --git a/storage/spider/mysql-test/spider/handler/r/function.result b/storage/spider/mysql-test/spider/handler/r/function.result
deleted file mode 100644
index c088a8a9541..00000000000
--- a/storage/spider/mysql-test/spider/handler/r/function.result
+++ /dev/null
@@ -1,160 +0,0 @@
-for master_1
-for child2
-child2_1
-child2_2
-child2_3
-for child3
-child3_1
-child3_2
-child3_3
-
-drop and create databases
-connection master_1;
-DROP DATABASE IF EXISTS auto_test_local;
-CREATE DATABASE auto_test_local;
-USE auto_test_local;
-connection child2_1;
-DROP DATABASE IF EXISTS auto_test_remote;
-CREATE DATABASE auto_test_remote;
-USE auto_test_remote;
-connection child2_2;
-DROP DATABASE IF EXISTS auto_test_remote2;
-CREATE DATABASE auto_test_remote2;
-USE auto_test_remote2;
-
-test select 1
-connection master_1;
-SELECT 1;
-1
-1
-
-in()
-connection master_1;
-CREATE TABLE t1 (
-a VARCHAR(255),
-PRIMARY KEY(a)
-) MASTER_1_ENGINE MASTER_1_CHARSET3 MASTER_1_COMMENT_TEXT_PK1_1
-insert into t1 values ('1');
-insert into t1 select a + 1 from t1;
-insert into t1 select a + 2 from t1;
-insert into t1 select a + 4 from t1;
-insert into t1 select a + 8 from t1;
-insert into t1 select a + 16 from t1;
-insert into t1 select a + 32 from t1;
-insert into t1 select a + 64 from t1;
-insert into t1 select a + 128 from t1;
-insert into t1 select a + 256 from t1;
-insert into t1 select a + 512 from t1;
-flush tables;
-connection master_1;
-select a from t1 where a in ('15', '120');
-a
-120
-15
-
-date_sub()
-connection master_1;
-DROP TABLE IF EXISTS ta_l;
-CREATE TABLE ta_l (
-a INT,
-b CHAR(1),
-c DATETIME,
-PRIMARY KEY(a)
-) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1
-INSERT INTO ta_l (a, b, c) VALUES
-(1, 'a', '2008-08-01 10:21:39'),
-(2, 'b', '2000-01-01 00:00:00'),
-(3, 'e', '2007-06-04 20:03:11'),
-(4, 'd', '2003-11-30 05:01:03'),
-(5, 'c', '2001-12-31 23:59:59');
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 a 2008-08-01 10:21:39
-2 b 2000-01-01 00:00:00
-3 e 2007-06-04 20:03:11
-4 d 2003-11-30 05:01:03
-5 c 2001-12-31 23:59:59
-UPDATE ta_l SET c = DATE_SUB(c, INTERVAL 1 YEAR);
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 a 2007-08-01 10:21:39
-2 b 1999-01-01 00:00:00
-3 e 2006-06-04 20:03:11
-4 d 2002-11-30 05:01:03
-5 c 2000-12-31 23:59:59
-UPDATE ta_l SET c = DATE_ADD(c, INTERVAL 1 QUARTER);
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 a 2007-11-01 10:21:39
-2 b 1999-04-01 00:00:00
-3 e 2006-09-04 20:03:11
-4 d 2003-02-28 05:01:03
-5 c 2001-03-31 23:59:59
-UPDATE ta_l SET c = DATE_SUB(c, INTERVAL 1 MONTH);
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 a 2007-10-01 10:21:39
-2 b 1999-03-01 00:00:00
-3 e 2006-08-04 20:03:11
-4 d 2003-01-28 05:01:03
-5 c 2001-02-28 23:59:59
-UPDATE ta_l SET c = DATE_ADD(c, INTERVAL 1 WEEK);
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 a 2007-10-08 10:21:39
-2 b 1999-03-08 00:00:00
-3 e 2006-08-11 20:03:11
-4 d 2003-02-04 05:01:03
-5 c 2001-03-07 23:59:59
-UPDATE ta_l SET c = DATE_SUB(c, INTERVAL 1 DAY);
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 a 2007-10-07 10:21:39
-2 b 1999-03-07 00:00:00
-3 e 2006-08-10 20:03:11
-4 d 2003-02-03 05:01:03
-5 c 2001-03-06 23:59:59
-UPDATE ta_l SET c = DATE_ADD(c, INTERVAL 1 HOUR);
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 a 2007-10-07 11:21:39
-2 b 1999-03-07 01:00:00
-3 e 2006-08-10 21:03:11
-4 d 2003-02-03 06:01:03
-5 c 2001-03-07 00:59:59
-UPDATE ta_l SET c = DATE_SUB(c, INTERVAL 1 MINUTE);
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 a 2007-10-07 11:20:39
-2 b 1999-03-07 00:59:00
-3 e 2006-08-10 21:02:11
-4 d 2003-02-03 06:00:03
-5 c 2001-03-07 00:58:59
-UPDATE ta_l SET c = DATE_ADD(c, INTERVAL 1 SECOND);
-connection master_1;
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 a 2007-10-07 11:20:40
-2 b 1999-03-07 00:59:01
-3 e 2006-08-10 21:02:12
-4 d 2003-02-03 06:00:04
-5 c 2001-03-07 00:59:00
-
-deinit
-connection master_1;
-DROP DATABASE IF EXISTS auto_test_local;
-connection child2_1;
-DROP DATABASE IF EXISTS auto_test_remote;
-connection child2_2;
-DROP DATABASE IF EXISTS auto_test_remote2;
-for master_1
-for child2
-child2_1
-child2_2
-child2_3
-for child3
-child3_1
-child3_2
-child3_3
-
-end of test
diff --git a/storage/spider/mysql-test/spider/handler/r/ha.result b/storage/spider/mysql-test/spider/handler/r/ha.result
deleted file mode 100644
index 3c37c2d51f0..00000000000
--- a/storage/spider/mysql-test/spider/handler/r/ha.result
+++ /dev/null
@@ -1,286 +0,0 @@
-for master_1
-for child2
-child2_1
-child2_2
-child2_3
-for child3
-child3_1
-child3_2
-child3_3
-for master_1
-for child2
-child2_1
-child2_2
-child2_3
-for child3
-child3_1
-child3_2
-child3_3
-
-drop and create databases
-connection master_1;
-DROP DATABASE IF EXISTS auto_test_local;
-CREATE DATABASE auto_test_local;
-USE auto_test_local;
-connection child2_1;
-DROP DATABASE IF EXISTS auto_test_remote;
-CREATE DATABASE auto_test_remote;
-USE auto_test_remote;
-connection child2_2;
-DROP DATABASE IF EXISTS auto_test_remote2;
-CREATE DATABASE auto_test_remote2;
-USE auto_test_remote2;
-connection child2_3;
-DROP DATABASE IF EXISTS auto_test_remote3;
-CREATE DATABASE auto_test_remote3;
-USE auto_test_remote3;
-connection child3_1;
-DROP DATABASE IF EXISTS auto_test_local;
-CREATE DATABASE auto_test_local;
-USE auto_test_local;
-connection child3_2;
-DROP DATABASE IF EXISTS auto_test_local;
-CREATE DATABASE auto_test_local;
-USE auto_test_local;
-connection child3_3;
-DROP DATABASE IF EXISTS auto_test_local;
-CREATE DATABASE auto_test_local;
-USE auto_test_local;
-
-test select 1
-connection master_1;
-SELECT 1;
-1
-1
-
-create table test
-connection master_1;
-DROP TABLE IF EXISTS ta_l;
-CREATE TABLE ta_l (
-a INT,
-b CHAR(1),
-c DATETIME,
-PRIMARY KEY(a)
-) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_HA_2_1
-Warnings:
-Warning 138 The high availability feature of Spider has been deprecated and will be removed in a future release
-Warning 138 The high availability feature of Spider has been deprecated and will be removed in a future release
-Warning 138 The high availability feature of Spider has been deprecated and will be removed in a future release
-INSERT INTO ta_l (a, b, c) VALUES
-(1, 'a', '2008-08-01 10:21:39'),
-(2, 'b', '2000-01-01 00:00:00'),
-(3, 'e', '2007-06-04 20:03:11'),
-(4, 'd', '2003-11-30 05:01:03'),
-(5, 'c', '2001-12-31 23:59:59');
-
-select test
-connection master_1;
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 a 2008-08-01 10:21:39
-2 b 2000-01-01 00:00:00
-3 e 2007-06-04 20:03:11
-4 d 2003-11-30 05:01:03
-5 c 2001-12-31 23:59:59
-
-fail-over test
-connection master_1;
-SHOW STATUS LIKE 'Spider_mon_table_cache_version%';
-Variable_name Value
-Spider_mon_table_cache_version 0
-Spider_mon_table_cache_version_req 1
-INSERT INTO ta_l (a, b, c) VALUES
-(6, 'e', '2011-05-05 20:04:05');
-ERROR HY000: Table 'auto_test_remote2.ta_r3' get a problem
-SELECT db_name, table_name, link_id, link_status FROM mysql.spider_tables
-ORDER BY db_name, table_name, link_id;
-db_name table_name link_id link_status
-auto_test_local ta_l 0 1
-auto_test_local ta_l 1 3
-SELECT db_name, table_name, link_id FROM mysql.spider_link_failed_log;
-db_name table_name link_id
-auto_test_local ta_l 1
-SHOW STATUS LIKE 'Spider_mon_table_cache_version%';
-Variable_name Value
-Spider_mon_table_cache_version 1
-Spider_mon_table_cache_version_req 1
-INSERT INTO ta_l (a, b, c) VALUES
-(6, 'e', '2011-05-05 20:04:05');
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 a 2008-08-01 10:21:39
-2 b 2000-01-01 00:00:00
-3 e 2007-06-04 20:03:11
-4 d 2003-11-30 05:01:03
-5 c 2001-12-31 23:59:59
-6 e 2011-05-05 20:04:05
-
-recovery test
-connection master_1;
-ALTER TABLE ta_l
-CONNECTION='host "localhost", user "root", password "",
- msi "5", mkd "2",
- database "auto_test_remote auto_test_remote2", lst "0 2"';
-Warnings:
-Warning 138 The high availability feature of Spider has been deprecated and will be removed in a future release
-Warning 138 The high availability feature of Spider has been deprecated and will be removed in a future release
-Warning 138 The high availability feature of Spider has been deprecated and will be removed in a future release
-SELECT db_name, table_name, link_id, link_status FROM mysql.spider_tables
-ORDER BY db_name, table_name, link_id;
-db_name table_name link_id link_status
-auto_test_local ta_l 0 1
-auto_test_local ta_l 1 2
-SELECT spider_copy_tables('ta_l', '0', '1');
-spider_copy_tables('ta_l', '0', '1')
-1
-connection master_1;
-ALTER TABLE ta_l
-CONNECTION='host "localhost", user "root", password "",
- msi "5", mkd "2",
- database "auto_test_remote auto_test_remote2", lst "0 1"';
-Warnings:
-Warning 138 The high availability feature of Spider has been deprecated and will be removed in a future release
-Warning 138 The high availability feature of Spider has been deprecated and will be removed in a future release
-Warning 138 The high availability feature of Spider has been deprecated and will be removed in a future release
-SELECT db_name, table_name, link_id, link_status FROM mysql.spider_tables
-ORDER BY db_name, table_name, link_id;
-db_name table_name link_id link_status
-auto_test_local ta_l 0 1
-auto_test_local ta_l 1 1
-INSERT INTO ta_l (a, b, c) VALUES
-(8, 'g', '2011-05-05 21:33:30');
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 a 2008-08-01 10:21:39
-2 b 2000-01-01 00:00:00
-3 e 2007-06-04 20:03:11
-4 d 2003-11-30 05:01:03
-5 c 2001-12-31 23:59:59
-6 e 2011-05-05 20:04:05
-8 g 2011-05-05 21:33:30
-DROP TABLE ta_l;
-connection master_1;
-SELECT spider_flush_table_mon_cache();
-spider_flush_table_mon_cache()
-1
-
-active standby test
-create table test
-connection master_1;
-DROP TABLE IF EXISTS ta_l;
-CREATE TABLE ta_l (
-a INT,
-b CHAR(1),
-c DATETIME,
-PRIMARY KEY(a)
-) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_HA_AS_2_1
-Warnings:
-Warning 138 The high availability feature of Spider has been deprecated and will be removed in a future release
-Warning 138 The high availability feature of Spider has been deprecated and will be removed in a future release
-Warning 138 The high availability feature of Spider has been deprecated and will be removed in a future release
-INSERT INTO ta_l (a, b, c) VALUES
-(1, 'a', '2008-08-01 10:21:39'),
-(2, 'b', '2000-01-01 00:00:00'),
-(3, 'e', '2007-06-04 20:03:11'),
-(4, 'd', '2003-11-30 05:01:03'),
-(5, 'c', '2001-12-31 23:59:59');
-
-select test
-connection master_1;
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 a 2008-08-01 10:21:39
-2 b 2000-01-01 00:00:00
-3 e 2007-06-04 20:03:11
-4 d 2003-11-30 05:01:03
-5 c 2001-12-31 23:59:59
-
-fail-over test
-connection master_1;
-SHOW STATUS LIKE 'Spider_mon_table_cache_version%';
-Variable_name Value
-Spider_mon_table_cache_version 1
-Spider_mon_table_cache_version_req 2
-INSERT INTO ta_l (a, b, c) VALUES
-(6, 'e', '2011-05-05 20:04:05');
-ERROR HY000: Table 'auto_test_remote.ta_r' get a problem
-SELECT db_name, table_name, link_id, link_status FROM mysql.spider_tables
-ORDER BY db_name, table_name, link_id;
-db_name table_name link_id link_status
-auto_test_local ta_l 0 3
-auto_test_local ta_l 1 1
-SELECT db_name, table_name, link_id FROM mysql.spider_link_failed_log;
-db_name table_name link_id
-auto_test_local ta_l 1
-auto_test_local ta_l 0
-SHOW STATUS LIKE 'Spider_mon_table_cache_version%';
-Variable_name Value
-Spider_mon_table_cache_version 2
-Spider_mon_table_cache_version_req 2
-INSERT INTO ta_l (a, b, c) VALUES
-(6, 'e', '2011-05-05 20:04:05');
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-6 e 2011-05-05 20:04:05
-
-recovery test
-connection master_1;
-ALTER TABLE ta_l
-CONNECTION='host "localhost", user "root", password "",
- msi "5", mkd "2", alc "1",
- database "auto_test_remote auto_test_remote2", lst "1 0"';
-Warnings:
-Warning 138 The high availability feature of Spider has been deprecated and will be removed in a future release
-Warning 138 The high availability feature of Spider has been deprecated and will be removed in a future release
-Warning 138 The high availability feature of Spider has been deprecated and will be removed in a future release
-SELECT db_name, table_name, link_id, link_status FROM mysql.spider_tables
-ORDER BY db_name, table_name, link_id;
-db_name table_name link_id link_status
-auto_test_local ta_l 0 1
-auto_test_local ta_l 1 1
-INSERT INTO ta_l (a, b, c) VALUES
-(8, 'g', '2011-05-05 21:33:30');
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-8 g 2011-05-05 21:33:30
-DROP TABLE ta_l;
-connection master_1;
-SELECT spider_flush_table_mon_cache();
-spider_flush_table_mon_cache()
-1
-
-deinit
-connection master_1;
-DROP DATABASE IF EXISTS auto_test_local;
-connection child2_1;
-DROP DATABASE IF EXISTS auto_test_remote;
-connection child2_2;
-DROP DATABASE IF EXISTS auto_test_remote2;
-connection child2_3;
-DROP DATABASE IF EXISTS auto_test_remote3;
-connection child3_1;
-DROP DATABASE IF EXISTS auto_test_local;
-connection child3_2;
-DROP DATABASE IF EXISTS auto_test_local;
-connection child3_3;
-DROP DATABASE IF EXISTS auto_test_local;
-for master_1
-for child2
-child2_1
-child2_2
-child2_3
-for child3
-child3_1
-child3_2
-child3_3
-for master_1
-for child2
-child2_1
-child2_2
-child2_3
-for child3
-child3_1
-child3_2
-child3_3
-
-end of test
diff --git a/storage/spider/mysql-test/spider/handler/r/ha_part.result b/storage/spider/mysql-test/spider/handler/r/ha_part.result
deleted file mode 100644
index 39fa2655892..00000000000
--- a/storage/spider/mysql-test/spider/handler/r/ha_part.result
+++ /dev/null
@@ -1,311 +0,0 @@
-for master_1
-for child2
-child2_1
-child2_2
-child2_3
-for child3
-child3_1
-child3_2
-child3_3
-for master_1
-for child2
-child2_1
-child2_2
-child2_3
-for child3
-child3_1
-child3_2
-child3_3
-
-drop and create databases
-connection master_1;
-DROP DATABASE IF EXISTS auto_test_local;
-CREATE DATABASE auto_test_local;
-USE auto_test_local;
-connection child2_1;
-DROP DATABASE IF EXISTS auto_test_remote;
-CREATE DATABASE auto_test_remote;
-USE auto_test_remote;
-connection child2_2;
-DROP DATABASE IF EXISTS auto_test_remote2;
-CREATE DATABASE auto_test_remote2;
-USE auto_test_remote2;
-connection child2_3;
-DROP DATABASE IF EXISTS auto_test_remote3;
-CREATE DATABASE auto_test_remote3;
-USE auto_test_remote3;
-connection child3_1;
-DROP DATABASE IF EXISTS auto_test_local;
-CREATE DATABASE auto_test_local;
-USE auto_test_local;
-connection child3_2;
-DROP DATABASE IF EXISTS auto_test_local;
-CREATE DATABASE auto_test_local;
-USE auto_test_local;
-connection child3_3;
-DROP DATABASE IF EXISTS auto_test_local;
-CREATE DATABASE auto_test_local;
-USE auto_test_local;
-
-test select 1
-connection master_1;
-SELECT 1;
-1
-1
-
-create table with partition test
-connection master_1;
-DROP TABLE IF EXISTS ta_l2;
-CREATE TABLE ta_l2 (
-a INT,
-b CHAR(1),
-c DATETIME,
-PRIMARY KEY(a)
-) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_HA_P_2_1
-Warnings:
-Warning 138 The high availability feature of Spider has been deprecated and will be removed in a future release
-Warning 138 The high availability feature of Spider has been deprecated and will be removed in a future release
-Warning 138 The high availability feature of Spider has been deprecated and will be removed in a future release
-Warning 138 The high availability feature of Spider has been deprecated and will be removed in a future release
-INSERT INTO ta_l2 (a, b, c) VALUES
-(1, 'a', '2008-08-01 10:21:39'),
-(2, 'b', '2000-01-01 00:00:00'),
-(3, 'e', '2007-06-04 20:03:11'),
-(4, 'd', '2003-11-30 05:01:03'),
-(5, 'c', '2001-12-31 23:59:59');
-
-select test
-connection master_1;
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 a 2008-08-01 10:21:39
-2 b 2000-01-01 00:00:00
-3 e 2007-06-04 20:03:11
-4 d 2003-11-30 05:01:03
-5 c 2001-12-31 23:59:59
-
-fail-over test
-connection master_1;
-SHOW STATUS LIKE 'Spider_mon_table_cache_version%';
-Variable_name Value
-Spider_mon_table_cache_version 0
-Spider_mon_table_cache_version_req 1
-INSERT INTO ta_l2 (a, b, c) VALUES
-(6, 'e', '2011-05-05 20:04:05');
-ERROR HY000: Table 'auto_test_remote3.ta_r4' get a problem
-SELECT db_name, table_name, link_id, link_status FROM mysql.spider_tables
-ORDER BY db_name, table_name, link_id;
-db_name table_name link_id link_status
-auto_test_local ta_l2#P#pt1 0 1
-auto_test_local ta_l2#P#pt1 1 1
-auto_test_local ta_l2#P#pt2 0 1
-auto_test_local ta_l2#P#pt2 1 3
-SELECT db_name, table_name, link_id FROM mysql.spider_link_failed_log;
-db_name table_name link_id
-auto_test_local ta_l2#P#pt2 1
-SHOW STATUS LIKE 'Spider_mon_table_cache_version%';
-Variable_name Value
-Spider_mon_table_cache_version 1
-Spider_mon_table_cache_version_req 1
-INSERT INTO ta_l2 (a, b, c) VALUES
-(6, 'e', '2011-05-05 20:04:05');
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 a 2008-08-01 10:21:39
-2 b 2000-01-01 00:00:00
-3 e 2007-06-04 20:03:11
-4 d 2003-11-30 05:01:03
-5 c 2001-12-31 23:59:59
-6 e 2011-05-05 20:04:05
-
-recovery test
-connection master_1;
-ALTER TABLE ta_l2
-PARTITION BY KEY(a) (
-PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3",
- priority "1000"',
-PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4",
- priority "1000001", lst "0 2"'
- );
-Warnings:
-Warning 138 The high availability feature of Spider has been deprecated and will be removed in a future release
-Warning 138 The high availability feature of Spider has been deprecated and will be removed in a future release
-Warning 138 The high availability feature of Spider has been deprecated and will be removed in a future release
-Warning 138 The high availability feature of Spider has been deprecated and will be removed in a future release
-SELECT db_name, table_name, link_id, link_status FROM mysql.spider_tables
-ORDER BY db_name, table_name, link_id;
-db_name table_name link_id link_status
-auto_test_local ta_l2#P#pt1 0 1
-auto_test_local ta_l2#P#pt1 1 1
-auto_test_local ta_l2#P#pt2 0 1
-auto_test_local ta_l2#P#pt2 1 2
-SELECT spider_copy_tables('ta_l2#P#pt2', '0', '1');
-spider_copy_tables('ta_l2#P#pt2', '0', '1')
-1
-connection master_1;
-ALTER TABLE ta_l2
-PARTITION BY KEY(a) (
-PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3",
- priority "1000"',
-PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4",
- priority "1000001", lst "0 1"'
- );
-Warnings:
-Warning 138 The high availability feature of Spider has been deprecated and will be removed in a future release
-Warning 138 The high availability feature of Spider has been deprecated and will be removed in a future release
-Warning 138 The high availability feature of Spider has been deprecated and will be removed in a future release
-Warning 138 The high availability feature of Spider has been deprecated and will be removed in a future release
-SELECT db_name, table_name, link_id, link_status FROM mysql.spider_tables
-ORDER BY db_name, table_name, link_id;
-db_name table_name link_id link_status
-auto_test_local ta_l2#P#pt1 0 1
-auto_test_local ta_l2#P#pt1 1 1
-auto_test_local ta_l2#P#pt2 0 1
-auto_test_local ta_l2#P#pt2 1 1
-INSERT INTO ta_l2 (a, b, c) VALUES
-(8, 'g', '2011-05-05 21:33:30'),
-(9, 'h', '2011-05-05 22:32:10');
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 a 2008-08-01 10:21:39
-2 b 2000-01-01 00:00:00
-3 e 2007-06-04 20:03:11
-4 d 2003-11-30 05:01:03
-5 c 2001-12-31 23:59:59
-6 e 2011-05-05 20:04:05
-8 g 2011-05-05 21:33:30
-9 h 2011-05-05 22:32:10
-DROP TABLE ta_l2;
-
-create table with partition test
-connection master_1;
-DROP TABLE IF EXISTS ta_l2;
-CREATE TABLE ta_l2 (
-a INT,
-b CHAR(1),
-c DATETIME,
-PRIMARY KEY(a)
-) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_HA_AS_P_2_1
-Warnings:
-Warning 138 The high availability feature of Spider has been deprecated and will be removed in a future release
-Warning 138 The high availability feature of Spider has been deprecated and will be removed in a future release
-Warning 138 The high availability feature of Spider has been deprecated and will be removed in a future release
-Warning 138 The high availability feature of Spider has been deprecated and will be removed in a future release
-INSERT INTO ta_l2 (a, b, c) VALUES
-(1, 'a', '2008-08-01 10:21:39'),
-(2, 'b', '2000-01-01 00:00:00'),
-(3, 'e', '2007-06-04 20:03:11'),
-(4, 'd', '2003-11-30 05:01:03'),
-(5, 'c', '2001-12-31 23:59:59');
-
-select test
-connection master_1;
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 a 2008-08-01 10:21:39
-2 b 2000-01-01 00:00:00
-3 e 2007-06-04 20:03:11
-4 d 2003-11-30 05:01:03
-5 c 2001-12-31 23:59:59
-
-fail-over test
-connection master_1;
-SHOW STATUS LIKE 'Spider_mon_table_cache_version%';
-Variable_name Value
-Spider_mon_table_cache_version 1
-Spider_mon_table_cache_version_req 1
-INSERT INTO ta_l2 (a, b, c) VALUES
-(6, 'e', '2011-05-05 20:04:05');
-ERROR HY000: Table 'auto_test_remote.ta_r2' get a problem
-SELECT db_name, table_name, link_id, link_status FROM mysql.spider_tables
-ORDER BY db_name, table_name, link_id;
-db_name table_name link_id link_status
-auto_test_local ta_l2#P#pt1 0 1
-auto_test_local ta_l2#P#pt1 1 1
-auto_test_local ta_l2#P#pt2 0 3
-auto_test_local ta_l2#P#pt2 1 1
-SELECT db_name, table_name, link_id FROM mysql.spider_link_failed_log;
-db_name table_name link_id
-auto_test_local ta_l2#P#pt2 1
-auto_test_local ta_l2#P#pt2 0
-SHOW STATUS LIKE 'Spider_mon_table_cache_version%';
-Variable_name Value
-Spider_mon_table_cache_version 1
-Spider_mon_table_cache_version_req 1
-INSERT INTO ta_l2 (a, b, c) VALUES
-(6, 'e', '2011-05-05 20:04:05');
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 a 2008-08-01 10:21:39
-3 e 2007-06-04 20:03:11
-5 c 2001-12-31 23:59:59
-6 e 2011-05-05 20:04:05
-
-recovery test
-connection master_1;
-ALTER TABLE ta_l2
-PARTITION BY KEY(a) (
-PARTITION pt1 COMMENT='srv "s_2_1 s_2_2", tbl "ta_r ta_r3",
- priority "1000"',
-PARTITION pt2 COMMENT='srv "s_2_1 s_2_3", tbl "ta_r2 ta_r4",
- priority "1000001", lst "1 0"'
- );
-Warnings:
-Warning 138 The high availability feature of Spider has been deprecated and will be removed in a future release
-Warning 138 The high availability feature of Spider has been deprecated and will be removed in a future release
-Warning 138 The high availability feature of Spider has been deprecated and will be removed in a future release
-Warning 138 The high availability feature of Spider has been deprecated and will be removed in a future release
-SELECT db_name, table_name, link_id, link_status FROM mysql.spider_tables
-ORDER BY db_name, table_name, link_id;
-db_name table_name link_id link_status
-auto_test_local ta_l2#P#pt1 0 1
-auto_test_local ta_l2#P#pt1 1 1
-auto_test_local ta_l2#P#pt2 0 1
-auto_test_local ta_l2#P#pt2 1 1
-INSERT INTO ta_l2 (a, b, c) VALUES
-(8, 'g', '2011-05-05 21:33:30'),
-(9, 'h', '2011-05-05 22:32:10');
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 a 2008-08-01 10:21:39
-3 e 2007-06-04 20:03:11
-5 c 2001-12-31 23:59:59
-8 g 2011-05-05 21:33:30
-9 h 2011-05-05 22:32:10
-DROP TABLE ta_l2;
-
-deinit
-connection master_1;
-DROP DATABASE IF EXISTS auto_test_local;
-connection child2_1;
-DROP DATABASE IF EXISTS auto_test_remote;
-connection child2_2;
-DROP DATABASE IF EXISTS auto_test_remote2;
-connection child2_3;
-DROP DATABASE IF EXISTS auto_test_remote3;
-connection child3_1;
-DROP DATABASE IF EXISTS auto_test_local;
-connection child3_2;
-DROP DATABASE IF EXISTS auto_test_local;
-connection child3_3;
-DROP DATABASE IF EXISTS auto_test_local;
-for master_1
-for child2
-child2_1
-child2_2
-child2_3
-for child3
-child3_1
-child3_2
-child3_3
-for master_1
-for child2
-child2_1
-child2_2
-child2_3
-for child3
-child3_1
-child3_2
-child3_3
-
-end of test
diff --git a/storage/spider/mysql-test/spider/handler/r/spider3_fixes.result b/storage/spider/mysql-test/spider/handler/r/spider3_fixes.result
deleted file mode 100644
index abe543fe193..00000000000
--- a/storage/spider/mysql-test/spider/handler/r/spider3_fixes.result
+++ /dev/null
@@ -1,245 +0,0 @@
-for master_1
-for child2
-child2_1
-child2_2
-child2_3
-for child3
-child3_1
-child3_2
-child3_3
-for slave1_1
-
-drop and create databases
-connection master_1;
-DROP DATABASE IF EXISTS auto_test_local;
-CREATE DATABASE auto_test_local;
-USE auto_test_local;
-connection slave1_1;
-DROP DATABASE IF EXISTS auto_test_local;
-CREATE DATABASE auto_test_local;
-USE auto_test_local;
-connection child2_1;
-DROP DATABASE IF EXISTS auto_test_remote;
-CREATE DATABASE auto_test_remote;
-USE auto_test_remote;
-connection child2_2;
-DROP DATABASE IF EXISTS auto_test_remote2;
-CREATE DATABASE auto_test_remote2;
-USE auto_test_remote2;
-
-test select 1
-connection master_1;
-SELECT 1;
-1
-1
-
-3.1
-auto_increment
-connection master_1;
-SET @original_spider_auto_increment_mode = @@SESSION.spider_auto_increment_mode;
-SET SESSION spider_auto_increment_mode = -1;
-Warnings:
-Warning 138 The option value -1 (use table value) is deprecated and will be removed in a future release
-connection slave1_1;
-connection master_1;
-DROP TABLE IF EXISTS t1, t2;
-CREATE TABLE t1 (
-id int(11) NOT NULL AUTO_INCREMENT,
-PRIMARY KEY (id)
-) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_INCREMENT1_1
-CREATE TABLE t2 (
-id int(11) NOT NULL AUTO_INCREMENT,
-PRIMARY KEY (id)
-) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_INCREMENT1_1
-MASTER_1_AUTO_INCREMENT_INCREMENT2
-MASTER_1_AUTO_INCREMENT_OFFSET2
-spider_direct_sql('SET SESSION AUTO_INCREMENT_INCREMENT = 4', '',
-'srv "s_2_1"')
-1
-spider_direct_sql('SET SESSION AUTO_INCREMENT_INCREMENT = 4', '',
-'srv "s_2_2"')
-1
-spider_bg_direct_sql('SET SESSION AUTO_INCREMENT_OFFSET = 2', '',
-'srv "s_2_1"')
-1
-spider_bg_direct_sql('SET SESSION AUTO_INCREMENT_OFFSET = 3', '',
-'srv "s_2_2"')
-1
-CREATE TABLE t1 (
-id int(11) NOT NULL AUTO_INCREMENT,
-PRIMARY KEY (id)
-) SLAVE1_1_ENGINE SLAVE1_1_CHARSET SLAVE1_1_COMMENT_INCREMENT1_1
-CREATE TABLE t2 (
-id int(11) NOT NULL AUTO_INCREMENT,
-PRIMARY KEY (id)
-) SLAVE1_1_ENGINE SLAVE1_1_CHARSET SLAVE1_1_COMMENT_INCREMENT1_1
-INSERT INTO t1 () VALUES ();
-SELECT LAST_INSERT_ID();
-LAST_INSERT_ID()
-2
-SELECT MAX(id) FROM t1;
-MAX(id)
-2
-INSERT INTO t2 () VALUES ();
-SELECT LAST_INSERT_ID();
-LAST_INSERT_ID()
-6
-SELECT MAX(id) FROM t2;
-MAX(id)
-6
-MASTER_1_AUTO_INCREMENT_OFFSET3
-INSERT INTO t1 (id) VALUES (null);
-SELECT LAST_INSERT_ID();
-LAST_INSERT_ID()
-10
-SELECT MAX(id) FROM t1;
-MAX(id)
-10
-MASTER_1_AUTO_INCREMENT_OFFSET4
-INSERT INTO t2 (id) VALUES (null);
-SELECT LAST_INSERT_ID();
-LAST_INSERT_ID()
-14
-SELECT MAX(id) FROM t2;
-MAX(id)
-14
-MASTER_1_AUTO_INCREMENT_OFFSET3
-INSERT INTO t1 () VALUES (),(),(),();
-Warnings:
-Note 12520 Binlog's auto-inc value is probably different from linked table's auto-inc value
-Note 12520 Binlog's auto-inc value is probably different from linked table's auto-inc value
-Note 12520 Binlog's auto-inc value is probably different from linked table's auto-inc value
-SELECT LAST_INSERT_ID();
-LAST_INSERT_ID()
-18
-SELECT id FROM t1 ORDER BY id;
-id
-2
-6
-10
-14
-18
-22
-26
-30
-MASTER_1_AUTO_INCREMENT_OFFSET4
-INSERT INTO t2 () VALUES (),(),(),();
-Warnings:
-Note 12520 Binlog's auto-inc value is probably different from linked table's auto-inc value
-Note 12520 Binlog's auto-inc value is probably different from linked table's auto-inc value
-Note 12520 Binlog's auto-inc value is probably different from linked table's auto-inc value
-SELECT LAST_INSERT_ID();
-LAST_INSERT_ID()
-34
-SELECT id FROM t2 ORDER BY id;
-id
-2
-6
-10
-14
-18
-22
-26
-30
-34
-38
-42
-46
-TRUNCATE TABLE t1;
-TRUNCATE TABLE t2;
-INSERT INTO t1 () VALUES (),(),(),();
-Warnings:
-Note 12520 Binlog's auto-inc value is probably different from linked table's auto-inc value
-Note 12520 Binlog's auto-inc value is probably different from linked table's auto-inc value
-Note 12520 Binlog's auto-inc value is probably different from linked table's auto-inc value
-SELECT LAST_INSERT_ID();
-LAST_INSERT_ID()
-2
-SELECT id FROM t1 ORDER BY id;
-id
-2
-6
-10
-14
-INSERT INTO t2 () VALUES (),(),(),();
-Warnings:
-Note 12520 Binlog's auto-inc value is probably different from linked table's auto-inc value
-Note 12520 Binlog's auto-inc value is probably different from linked table's auto-inc value
-Note 12520 Binlog's auto-inc value is probably different from linked table's auto-inc value
-SELECT LAST_INSERT_ID();
-LAST_INSERT_ID()
-18
-SELECT id FROM t2 ORDER BY id;
-id
-2
-6
-10
-14
-18
-22
-26
-30
-SET INSERT_ID=5000;
-MASTER_1_AUTO_INCREMENT_OFFSET3
-INSERT INTO t1 () VALUES ();
-SELECT LAST_INSERT_ID();
-LAST_INSERT_ID()
-34
-SELECT MAX(id) FROM t1;
-MAX(id)
-34
-MASTER_1_AUTO_INCREMENT_OFFSET4
-INSERT INTO t2 () VALUES ();
-SELECT LAST_INSERT_ID();
-LAST_INSERT_ID()
-38
-SELECT MAX(id) FROM t2;
-MAX(id)
-38
-INSERT INTO t1 (id) VALUES (10000);
-SELECT LAST_INSERT_ID();
-LAST_INSERT_ID()
-42
-SELECT MAX(id) FROM t1;
-MAX(id)
-42
-INSERT INTO t2 (id) VALUES (1000);
-SELECT LAST_INSERT_ID();
-LAST_INSERT_ID()
-46
-SELECT MAX(id) FROM t2;
-MAX(id)
-46
-SET SESSION spider_auto_increment_mode = @original_spider_auto_increment_mode;
-connection slave1_1;
-SELECT id FROM t1 ORDER BY id;
-id
-2
-34
-777
-1554
-2331
-10000
-connection master_1;
-
-deinit
-connection master_1;
-DROP DATABASE IF EXISTS auto_test_local;
-connection slave1_1;
-DROP DATABASE IF EXISTS auto_test_local;
-connection child2_1;
-DROP DATABASE IF EXISTS auto_test_remote;
-connection child2_2;
-DROP DATABASE IF EXISTS auto_test_remote2;
-for slave1_1
-for master_1
-for child2
-child2_1
-child2_2
-child2_3
-for child3
-child3_1
-child3_2
-child3_3
-
-end of test
diff --git a/storage/spider/mysql-test/spider/handler/r/spider3_fixes_part.result b/storage/spider/mysql-test/spider/handler/r/spider3_fixes_part.result
deleted file mode 100644
index 6c3a1802f1d..00000000000
--- a/storage/spider/mysql-test/spider/handler/r/spider3_fixes_part.result
+++ /dev/null
@@ -1,243 +0,0 @@
-for master_1
-for child2
-child2_1
-child2_2
-child2_3
-for child3
-child3_1
-child3_2
-child3_3
-for slave1_1
-
-drop and create databases
-connection master_1;
-DROP DATABASE IF EXISTS auto_test_local;
-CREATE DATABASE auto_test_local;
-USE auto_test_local;
-connection slave1_1;
-DROP DATABASE IF EXISTS auto_test_local;
-CREATE DATABASE auto_test_local;
-USE auto_test_local;
-connection child2_1;
-DROP DATABASE IF EXISTS auto_test_remote;
-CREATE DATABASE auto_test_remote;
-USE auto_test_remote;
-connection child2_2;
-DROP DATABASE IF EXISTS auto_test_remote2;
-CREATE DATABASE auto_test_remote2;
-USE auto_test_remote2;
-
-test select 1
-connection master_1;
-SELECT 1;
-1
-1
-auto_increment with partition
-connection master_1;
-SET @original_spider_auto_increment_mode = @@SESSION.spider_auto_increment_mode;
-SET SESSION spider_auto_increment_mode = -1;
-Warnings:
-Warning 138 The option value -1 (use table value) is deprecated and will be removed in a future release
-connection slave1_1;
-connection master_1;
-DROP TABLE IF EXISTS t1, t2;
-CREATE TABLE t1 (
-id int(11) NOT NULL AUTO_INCREMENT,
-PRIMARY KEY (id)
-) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_INCREMENT1_P_1
-CREATE TABLE t2 (
-id int(11) NOT NULL AUTO_INCREMENT,
-PRIMARY KEY (id)
-) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_INCREMENT1_P_1
-MASTER_1_AUTO_INCREMENT_INCREMENT2
-MASTER_1_AUTO_INCREMENT_OFFSET2
-spider_direct_sql('SET SESSION AUTO_INCREMENT_INCREMENT = 4', '',
-'srv "s_2_1"')
-1
-spider_direct_sql('SET SESSION AUTO_INCREMENT_INCREMENT = 4', '',
-'srv "s_2_2"')
-1
-spider_bg_direct_sql('SET SESSION AUTO_INCREMENT_OFFSET = 2', '',
-'srv "s_2_1"')
-1
-spider_bg_direct_sql('SET SESSION AUTO_INCREMENT_OFFSET = 3', '',
-'srv "s_2_2"')
-1
-CREATE TABLE t1 (
-id int(11) NOT NULL AUTO_INCREMENT,
-PRIMARY KEY (id)
-) SLAVE1_1_ENGINE SLAVE1_1_CHARSET SLAVE1_1_COMMENT_INCREMENT1_P_1
-CREATE TABLE t2 (
-id int(11) NOT NULL AUTO_INCREMENT,
-PRIMARY KEY (id)
-) SLAVE1_1_ENGINE SLAVE1_1_CHARSET SLAVE1_1_COMMENT_INCREMENT1_P_1
-INSERT INTO t1 () VALUES ();
-SELECT LAST_INSERT_ID();
-LAST_INSERT_ID()
-3
-SELECT MAX(id) FROM t1;
-MAX(id)
-3
-INSERT INTO t2 () VALUES ();
-SELECT LAST_INSERT_ID();
-LAST_INSERT_ID()
-7
-SELECT MAX(id) FROM t2;
-MAX(id)
-7
-MASTER_1_AUTO_INCREMENT_OFFSET3
-INSERT INTO t1 (id) VALUES (null);
-SELECT LAST_INSERT_ID();
-LAST_INSERT_ID()
-2
-SELECT MAX(id) FROM t1;
-MAX(id)
-7
-MASTER_1_AUTO_INCREMENT_OFFSET4
-INSERT INTO t2 (id) VALUES (null);
-SELECT LAST_INSERT_ID();
-LAST_INSERT_ID()
-6
-SELECT MAX(id) FROM t2;
-MAX(id)
-7
-MASTER_1_AUTO_INCREMENT_OFFSET3
-INSERT INTO t1 () VALUES (),(),(),();
-Warnings:
-Note 12520 Binlog's auto-inc value is probably different from linked table's auto-inc value
-Note 12520 Binlog's auto-inc value is probably different from linked table's auto-inc value
-Note 12520 Binlog's auto-inc value is probably different from linked table's auto-inc value
-SELECT LAST_INSERT_ID();
-LAST_INSERT_ID()
-10
-SELECT id FROM t1 ORDER BY id;
-id
-2
-3
-6
-7
-10
-11
-14
-15
-MASTER_1_AUTO_INCREMENT_OFFSET4
-INSERT INTO t2 () VALUES (),(),(),();
-Warnings:
-Note 12520 Binlog's auto-inc value is probably different from linked table's auto-inc value
-Note 12520 Binlog's auto-inc value is probably different from linked table's auto-inc value
-Note 12520 Binlog's auto-inc value is probably different from linked table's auto-inc value
-SELECT LAST_INSERT_ID();
-LAST_INSERT_ID()
-18
-SELECT id FROM t2 ORDER BY id;
-id
-2
-3
-6
-7
-10
-11
-14
-15
-18
-19
-22
-23
-TRUNCATE TABLE t1;
-TRUNCATE TABLE t2;
-INSERT INTO t1 () VALUES (),(),(),();
-Warnings:
-Note 12520 Binlog's auto-inc value is probably different from linked table's auto-inc value
-Note 12520 Binlog's auto-inc value is probably different from linked table's auto-inc value
-Note 12520 Binlog's auto-inc value is probably different from linked table's auto-inc value
-SELECT LAST_INSERT_ID();
-LAST_INSERT_ID()
-2
-SELECT id FROM t1 ORDER BY id;
-id
-2
-3
-6
-7
-INSERT INTO t2 () VALUES (),(),(),();
-Warnings:
-Note 12520 Binlog's auto-inc value is probably different from linked table's auto-inc value
-Note 12520 Binlog's auto-inc value is probably different from linked table's auto-inc value
-Note 12520 Binlog's auto-inc value is probably different from linked table's auto-inc value
-SELECT LAST_INSERT_ID();
-LAST_INSERT_ID()
-10
-SELECT id FROM t2 ORDER BY id;
-id
-2
-3
-6
-7
-10
-11
-14
-15
-SET INSERT_ID=5000;
-MASTER_1_AUTO_INCREMENT_OFFSET3
-INSERT INTO t1 () VALUES ();
-SELECT LAST_INSERT_ID();
-LAST_INSERT_ID()
-18
-SELECT MAX(id) FROM t1;
-MAX(id)
-18
-MASTER_1_AUTO_INCREMENT_OFFSET4
-INSERT INTO t2 () VALUES ();
-SELECT LAST_INSERT_ID();
-LAST_INSERT_ID()
-19
-SELECT MAX(id) FROM t2;
-MAX(id)
-19
-INSERT INTO t1 (id) VALUES (10000);
-SELECT LAST_INSERT_ID();
-LAST_INSERT_ID()
-22
-SELECT MAX(id) FROM t1;
-MAX(id)
-22
-INSERT INTO t2 (id) VALUES (1000);
-SELECT LAST_INSERT_ID();
-LAST_INSERT_ID()
-26
-SELECT MAX(id) FROM t2;
-MAX(id)
-26
-SET SESSION spider_auto_increment_mode = @original_spider_auto_increment_mode;
-connection slave1_1;
-SELECT id FROM t1 ORDER BY id;
-id
-2
-18
-777
-1554
-2331
-10000
-connection master_1;
-
-deinit
-connection master_1;
-DROP DATABASE IF EXISTS auto_test_local;
-connection slave1_1;
-DROP DATABASE IF EXISTS auto_test_local;
-connection child2_1;
-DROP DATABASE IF EXISTS auto_test_remote;
-connection child2_2;
-DROP DATABASE IF EXISTS auto_test_remote2;
-for slave1_1
-for master_1
-for child2
-child2_1
-child2_2
-child2_3
-for child3
-child3_1
-child3_2
-child3_3
-
-end of test
diff --git a/storage/spider/mysql-test/spider/handler/r/spider_fixes.result b/storage/spider/mysql-test/spider/handler/r/spider_fixes.result
deleted file mode 100644
index aa7d2ea40c1..00000000000
--- a/storage/spider/mysql-test/spider/handler/r/spider_fixes.result
+++ /dev/null
@@ -1,640 +0,0 @@
-for master_1
-for child2
-child2_1
-child2_2
-child2_3
-for child3
-child3_1
-child3_2
-child3_3
-for slave1_1
-
-drop and create databases
-connection master_1;
-DROP DATABASE IF EXISTS auto_test_local;
-CREATE DATABASE auto_test_local;
-USE auto_test_local;
-connection slave1_1;
-DROP DATABASE IF EXISTS auto_test_local;
-CREATE DATABASE auto_test_local;
-USE auto_test_local;
-connection child2_1;
-DROP DATABASE IF EXISTS auto_test_remote;
-CREATE DATABASE auto_test_remote;
-USE auto_test_remote;
-connection child2_2;
-DROP DATABASE IF EXISTS auto_test_remote2;
-CREATE DATABASE auto_test_remote2;
-USE auto_test_remote2;
-
-test select 1
-connection master_1;
-SELECT 1;
-1
-1
-
-create table and insert
-connection master_1;
-DROP TABLE IF EXISTS tb_l;
-CREATE TABLE tb_l (
-a INT,
-b CHAR(1),
-c DATETIME,
-PRIMARY KEY(a)
-) MASTER_1_ENGINE2 MASTER_1_CHARSET2
-INSERT INTO tb_l (a, b, c) VALUES
-(1, 'a', '2008-08-01 10:21:39'),
-(2, 'b', '2000-01-01 00:00:00'),
-(3, 'e', '2007-06-04 20:03:11'),
-(4, 'd', '2003-11-30 05:01:03'),
-(5, 'c', '2001-12-31 23:59:59');
-DROP TABLE IF EXISTS ta_l;
-CREATE TABLE ta_l (
-PRIMARY KEY(a)
-) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1
-INSERT INTO ta_l SELECT a, b, c FROM tb_l;
-
-2.13
-select table with "order by desc" and "<"
-connection master_1;
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l
-WHERE a < 5 ORDER BY a DESC LIMIT 3;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-4 d 2003-11-30 05:01:03
-3 e 2007-06-04 20:03:11
-2 b 2000-01-01 00:00:00
-
-select table with "order by desc" and "<="
-connection master_1;
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l
-WHERE a <= 5 ORDER BY a DESC LIMIT 3;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-5 c 2001-12-31 23:59:59
-4 d 2003-11-30 05:01:03
-3 e 2007-06-04 20:03:11
-
-2.14
-update table with range scan and split_read
-connection master_1;
-UPDATE ta_l SET c = '2000-02-02 00:00:00' WHERE a > 1;
-connection master_1;
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 a 2008-08-01 10:21:39
-2 b 2000-02-02 00:00:00
-3 e 2000-02-02 00:00:00
-4 d 2000-02-02 00:00:00
-5 c 2000-02-02 00:00:00
-
-2.15
-select table with range scan
-TRUNCATE TABLE ta_l;
-DROP TABLE IF EXISTS ta_l;
-connection master_1;
-CREATE TABLE ta_l (
-a int(11) NOT NULL DEFAULT '0',
-b char(1) DEFAULT NULL,
-c datetime DEFAULT NULL,
-PRIMARY KEY (a, b, c)
-) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT5_2_1
-INSERT INTO ta_l SELECT a, b, c FROM tb_l;
-connection master_1;
-SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a = 4 AND b >= 'b'
-AND c = '2003-11-30 05:01:03';
-a b c
-4 d 2003-11-30 05:01:03
-connection master_1;
-SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a = 4 AND b > 'b'
-AND c = '2003-11-30 05:01:03';
-a b c
-4 d 2003-11-30 05:01:03
-connection master_1;
-SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a >= 4 AND b = 'd'
-AND c = '2003-11-30 05:01:03';
-a b c
-4 d 2003-11-30 05:01:03
-connection master_1;
-SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a > 4 AND b = 'c'
-AND c = '2001-12-31 23:59:59';
-a b c
-5 c 2001-12-31 23:59:59
-connection master_1;
-SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a = 4 AND b <= 'd'
-AND c = '2003-11-30 05:01:03';
-a b c
-4 d 2003-11-30 05:01:03
-connection master_1;
-SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a = 4 AND b < 'e'
-AND c = '2003-11-30 05:01:03';
-a b c
-4 d 2003-11-30 05:01:03
-connection master_1;
-SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a <= 4 AND b = 'b'
-AND c = '2000-01-01 00:00:00';
-a b c
-2 b 2000-01-01 00:00:00
-connection master_1;
-SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a < 4 AND b = 'b'
-AND c = '2000-01-01 00:00:00';
-a b c
-2 b 2000-01-01 00:00:00
-connection master_1;
-SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a = 4 AND b >= 'b'
-AND b <= 'd' AND c = '2003-11-30 05:01:03';
-a b c
-4 d 2003-11-30 05:01:03
-connection master_1;
-SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a = 4 AND b > 'b'
-AND b < 'e' AND c = '2003-11-30 05:01:03';
-a b c
-4 d 2003-11-30 05:01:03
-connection master_1;
-SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a <= 4 AND a >= 1
-AND b >= 'b' AND c = '2003-11-30 05:01:03';
-a b c
-4 d 2003-11-30 05:01:03
-connection master_1;
-SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a < 4 AND a > 1
-AND b >= 'b' AND c = '2000-01-01 00:00:00';
-a b c
-2 b 2000-01-01 00:00:00
-
-2.16
-auto_increment insert with trigger
-connection master_1;
-CREATE TABLE ta_l_auto_inc (
-a INT AUTO_INCREMENT,
-b CHAR(1) DEFAULT 'c',
-c DATETIME DEFAULT '1999-10-10 10:10:10',
-PRIMARY KEY(a)
-) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT3_2_1
-CREATE TABLE tc_l (
-a INT,
-b CHAR(1),
-c DATETIME,
-PRIMARY KEY(a)
-) MASTER_1_ENGINE2 MASTER_1_CHARSET2
-CREATE TRIGGER ins_ta_l_auto_inc AFTER INSERT ON ta_l_auto_inc FOR EACH ROW BEGIN INSERT INTO tc_l (a, b, c) VALUES (NEW.a, NEW.b, NEW.c); END;;
-connection master_1;
-INSERT INTO ta_l_auto_inc (a, b, c) VALUES
-(NULL, 's', '2008-12-31 20:59:59');
-connection master_1;
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM tc_l ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 s 2008-12-31 20:59:59
-
-2.17
-engine-condition-pushdown with "or" and joining
-connection master_1;
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l WHERE a = 1 OR a IN (SELECT a FROM tb_l);
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-1 a 2008-08-01 10:21:39
-2 b 2000-01-01 00:00:00
-3 e 2007-06-04 20:03:11
-4 d 2003-11-30 05:01:03
-5 c 2001-12-31 23:59:59
-
-2.23
-index merge
-connection master_1;
-CREATE TABLE ta_l_int (
-a INT AUTO_INCREMENT,
-b INT DEFAULT 10,
-c INT DEFAULT 11,
-PRIMARY KEY(a),
-KEY idx1(b),
-KEY idx2(c)
-) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT4_2_1
-INSERT INTO ta_l_int (a, b, c) VALUES (1, 2, 3);
-INSERT INTO ta_l_int (a, b, c) SELECT a + 1, b + 1, c + 1 FROM ta_l_int;
-INSERT INTO ta_l_int (a, b, c) SELECT a + 2, b + 2, c + 2 FROM ta_l_int;
-INSERT INTO ta_l_int (a, b, c) SELECT a + 4, b + 4, c + 4 FROM ta_l_int;
-INSERT INTO ta_l_int (a, b, c) SELECT a + 8, b + 8, c + 8 FROM ta_l_int;
-connection master_1;
-SELECT a, b, c FROM ta_l_int force index(primary, idx1, idx2)
-WHERE a = 5 OR b = 5 OR c = 5 ORDER BY a;
-a b c
-3 4 5
-4 5 6
-5 6 7
-
-2.24
-index scan update without PK
-connection master_1;
-DROP TABLE IF EXISTS ta_l_int;
-CREATE TABLE ta_l_int (
-a INT NOT NULL,
-b INT DEFAULT 10,
-c INT DEFAULT 11,
-KEY idx1(b),
-KEY idx2(c)
-) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT4_2_1
-SELECT a, b, c FROM ta_l_int ORDER BY a;
-a b c
-1 2 3
-2 3 4
-3 4 5
-4 5 6
-5 6 7
-6 7 8
-7 8 9
-8 9 10
-9 10 11
-10 11 12
-11 12 13
-12 13 14
-13 14 15
-14 15 16
-15 16 17
-16 17 18
-INSERT INTO ta_l_int (a, b, c) VALUES (0, 2, 3);
-INSERT INTO ta_l_int (a, b, c) VALUES (18, 2, 3);
-connection master_1;
-UPDATE ta_l_int SET c = 4 WHERE b = 2;
-connection master_1;
-SELECT a, b, c FROM ta_l_int ORDER BY a;
-a b c
-1 2 4
-2 3 4
-3 4 5
-4 5 6
-5 6 7
-6 7 8
-7 8 9
-8 9 10
-9 10 11
-10 11 12
-11 12 13
-12 13 14
-13 14 15
-14 15 16
-15 16 17
-16 17 18
-17 2 4
-18 2 4
-
-2.25
-direct order limit
-connection master_1;
-SHOW STATUS LIKE 'Spider_direct_order_limit';
-Variable_name Value
-Spider_direct_order_limit 2
-SELECT a, b, c FROM ta_l_int ORDER BY a LIMIT 3;
-a b c
-1 2 4
-2 3 4
-3 4 5
-SHOW STATUS LIKE 'Spider_direct_order_limit';
-Variable_name Value
-Spider_direct_order_limit 3
-
-2.26
-lock tables
-connection master_1;
-DROP TABLE IF EXISTS t1;
-DROP TABLE IF EXISTS t2;
-CREATE TABLE t1 (
-id int(11) NOT NULL,
-PRIMARY KEY (id)
-) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_LOCK1
-Warnings:
-Warning 138 The high availability feature of Spider has been deprecated and will be removed in a future release
-Warning 138 The high availability feature of Spider has been deprecated and will be removed in a future release
-CREATE TABLE t2 (
-id int(11) NOT NULL,
-PRIMARY KEY (id)
-) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_LOCK2
-Warnings:
-Warning 138 The high availability feature of Spider has been deprecated and will be removed in a future release
-Warning 138 The high availability feature of Spider has been deprecated and will be removed in a future release
-LOCK TABLES t1 READ, t2 READ;
-UNLOCK TABLES;
-
-auto_increment
-connection master_1;
-SET @original_spider_auto_increment_mode = @@SESSION.spider_auto_increment_mode;
-SET SESSION spider_auto_increment_mode = -1;
-Warnings:
-Warning 138 The option value -1 (use table value) is deprecated and will be removed in a future release
-connection slave1_1;
-connection master_1;
-DROP TABLE IF EXISTS t1;
-CREATE TABLE t1 (
-id int(11) NOT NULL AUTO_INCREMENT,
-PRIMARY KEY (id)
-) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_INCREMENT1_1
-MASTER_1_AUTO_INCREMENT_INCREMENT2
-MASTER_1_AUTO_INCREMENT_OFFSET2
-spider_direct_sql('SET SESSION AUTO_INCREMENT_INCREMENT = 4', '',
-'srv "s_2_1"')
-1
-spider_direct_sql('SET SESSION AUTO_INCREMENT_INCREMENT = 4', '',
-'srv "s_2_2"')
-1
-spider_bg_direct_sql('SET SESSION AUTO_INCREMENT_OFFSET = 2', '',
-'srv "s_2_1"')
-1
-spider_bg_direct_sql('SET SESSION AUTO_INCREMENT_OFFSET = 3', '',
-'srv "s_2_2"')
-1
-CREATE TABLE t1 (
-id int(11) NOT NULL AUTO_INCREMENT,
-PRIMARY KEY (id)
-) SLAVE1_1_ENGINE SLAVE1_1_CHARSET SLAVE1_1_COMMENT_INCREMENT1_1
-INSERT INTO t1 () VALUES ();
-SELECT LAST_INSERT_ID();
-LAST_INSERT_ID()
-2
-SELECT MAX(id) FROM t1;
-MAX(id)
-2
-INSERT INTO t1 () VALUES ();
-SELECT LAST_INSERT_ID();
-LAST_INSERT_ID()
-6
-SELECT MAX(id) FROM t1;
-MAX(id)
-6
-INSERT INTO t1 (id) VALUES (null);
-SELECT LAST_INSERT_ID();
-LAST_INSERT_ID()
-10
-SELECT MAX(id) FROM t1;
-MAX(id)
-10
-INSERT INTO t1 (id) VALUES (null);
-SELECT LAST_INSERT_ID();
-LAST_INSERT_ID()
-14
-SELECT MAX(id) FROM t1;
-MAX(id)
-14
-INSERT INTO t1 () VALUES (),(),(),();
-Warnings:
-Note 12520 Binlog's auto-inc value is probably different from linked table's auto-inc value
-Note 12520 Binlog's auto-inc value is probably different from linked table's auto-inc value
-Note 12520 Binlog's auto-inc value is probably different from linked table's auto-inc value
-SELECT LAST_INSERT_ID();
-LAST_INSERT_ID()
-18
-SELECT id FROM t1 ORDER BY id;
-id
-2
-6
-10
-14
-18
-22
-26
-30
-SET INSERT_ID=5000;
-INSERT INTO t1 () VALUES ();
-SELECT LAST_INSERT_ID();
-LAST_INSERT_ID()
-34
-SELECT MAX(id) FROM t1;
-MAX(id)
-34
-INSERT INTO t1 (id) VALUES (10000);
-SELECT LAST_INSERT_ID();
-LAST_INSERT_ID()
-38
-SELECT MAX(id) FROM t1;
-MAX(id)
-38
-INSERT INTO t1 (id) VALUES (1000);
-SELECT LAST_INSERT_ID();
-LAST_INSERT_ID()
-42
-SELECT MAX(id) FROM t1;
-MAX(id)
-42
-SET SESSION spider_auto_increment_mode = @original_spider_auto_increment_mode;
-connection slave1_1;
-SELECT id FROM t1 ORDER BY id;
-id
-2
-6
-10
-14
-18
-34
-777
-1000
-1554
-2331
-10000
-connection master_1;
-
-read only
-connection master_1;
-SET @original_spider_read_only_mode = @@SESSION.spider_read_only_mode;
-SET SESSION spider_read_only_mode = -1;
-Warnings:
-Warning 138 The option value -1 (use table value) is deprecated and will be removed in a future release
-DROP TABLE IF EXISTS t1;
-CREATE TABLE t1 (
-id int(11) NOT NULL,
-PRIMARY KEY (id)
-) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_READONLY1_1
-SELECT id FROM t1 ORDER BY id;
-id
-2
-6
-10
-14
-18
-22
-26
-30
-34
-38
-42
-INSERT INTO t1 (id) VALUES (1);
-ERROR HY000: Table 'auto_test_local.t1' is read only
-UPDATE t1 SET id = 4 WHERE id = 2;
-ERROR HY000: Table 'auto_test_local.t1' is read only
-DELETE FROM t1 WHERE id = 2;
-ERROR HY000: Table 'auto_test_local.t1' is read only
-DELETE FROM t1;
-ERROR HY000: Table 'auto_test_local.t1' is read only
-TRUNCATE t1;
-ERROR HY000: Table 'auto_test_local.t1' is read only
-SET SESSION spider_read_only_mode = @original_spider_read_only_mode;
-
-2.27
-error mode
-connection master_1;
-SET @original_spider_error_read_mode = @@SESSION.spider_error_read_mode;
-SET @original_spider_error_write_mode = @@SESSION.spider_error_write_mode;
-SET SESSION spider_error_read_mode = -1;
-Warnings:
-Warning 138 The option value -1 (use table value) is deprecated and will be removed in a future release
-SET SESSION spider_error_write_mode = -1;
-Warnings:
-Warning 138 The option value -1 (use table value) is deprecated and will be removed in a future release
-DROP TABLE IF EXISTS t1;
-CREATE TABLE t1 (
-id int(11) NOT NULL,
-PRIMARY KEY (id)
-) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_ERROR_MODE1_1
-SELECT id FROM t1 ORDER BY id;
-id
-Warnings:
-Error 12702 Remote table 'auto_test_remote.ter1_1' is not found
-Error 1146 Table 'auto_test_remote.ter1_1' doesn't exist
-INSERT INTO t1 (id) VALUES (1);
-Warnings:
-Error 1146 Table 'auto_test_remote.ter1_1' doesn't exist
-DELETE FROM t1;
-Warnings:
-Error 12702 Remote table 'auto_test_remote.ter1_1' is not found
-Error 12702 Remote table 'auto_test_remote.ter1_1' is not found
-Error 1146 Table 'auto_test_remote.ter1_1' doesn't exist
-TRUNCATE t1;
-Warnings:
-Error 1146 Table 'auto_test_remote.ter1_1' doesn't exist
-SET SESSION spider_error_read_mode = @original_spider_error_read_mode;
-SET SESSION spider_error_write_mode = @original_spider_error_write_mode;
-
-3.0
-is null
-connection master_1;
-DROP TABLE IF EXISTS t1;
-CREATE TABLE t1 (
-a VARCHAR(255),
-b VARCHAR(255),
-c VARCHAR(255),
-KEY idx1(a,b),
-KEY idx2(b),
-PRIMARY KEY(c)
-) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_TEXT_KEY1_1
-insert into t1 values (null, null, '2048');
-insert into t1 values ('1', '1', '1');
-insert into t1 select a + 1, b + 1, c + 1 from t1;
-insert into t1 select a + 2, b + 2, c + 2 from t1;
-insert into t1 select a + 4, b + 4, c + 4 from t1;
-insert into t1 select a + 8, b + 8, c + 8 from t1;
-insert into t1 select a + 16, b + 16, c + 16 from t1;
-insert into t1 select a + 32, b + 32, c + 32 from t1;
-insert into t1 select a + 64, b + 64, c + 64 from t1;
-insert into t1 select a + 128, b + 128, c + 128 from t1;
-insert into t1 select a + 256, b + 256, c + 256 from t1;
-insert into t1 select a + 512, b + 512, c + 512 from t1;
-flush tables;
-connection master_1;
-select a from t1 where a is null order by a limit 30;
-a
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-select b from t1 where b is null order by b limit 30;
-b
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-
-direct_order_limit
-connection master_1;
-TRUNCATE TABLE t1;
-insert into t1 values ('1', '1', '1');
-insert into t1 select a + 1, b + 1, c + 1 from t1;
-insert into t1 select a + 2, b + 2, c + 2 from t1;
-insert into t1 select a + 4, b + 4, c + 4 from t1;
-insert into t1 select a + 8, b + 8, c + 8 from t1;
-insert into t1 select a + 16, b + 16, c + 16 from t1;
-insert into t1 select a, b + 32, c + 32 from t1;
-insert into t1 select a, b + 64, c + 64 from t1;
-insert into t1 select a, b + 128, c + 128 from t1;
-flush tables;
-connection master_1;
-select a, b, c from t1 where a = '10' and b <> '100' order by c desc limit 5;
-a b c
-10 74 74
-10 42 42
-10 234 234
-10 202 202
-10 170 170
-select a, c from t1 where a = '10' order by b desc limit 5;
-a c
-10 74
-10 42
-10 234
-10 202
-10 170
-
-deinit
-connection master_1;
-DROP DATABASE IF EXISTS auto_test_local;
-connection slave1_1;
-DROP DATABASE IF EXISTS auto_test_local;
-connection child2_1;
-DROP DATABASE IF EXISTS auto_test_remote;
-connection child2_2;
-DROP DATABASE IF EXISTS auto_test_remote2;
-for slave1_1
-for master_1
-for child2
-child2_1
-child2_2
-child2_3
-for child3
-child3_1
-child3_2
-child3_3
-
-end of test
diff --git a/storage/spider/mysql-test/spider/handler/r/spider_fixes_part.result b/storage/spider/mysql-test/spider/handler/r/spider_fixes_part.result
deleted file mode 100644
index 249f39520c2..00000000000
--- a/storage/spider/mysql-test/spider/handler/r/spider_fixes_part.result
+++ /dev/null
@@ -1,246 +0,0 @@
-for master_1
-for child2
-child2_1
-child2_2
-child2_3
-for child3
-child3_1
-child3_2
-child3_3
-for slave1_1
-
-drop and create databases
-connection master_1;
-DROP DATABASE IF EXISTS auto_test_local;
-CREATE DATABASE auto_test_local;
-USE auto_test_local;
-connection slave1_1;
-DROP DATABASE IF EXISTS auto_test_local;
-CREATE DATABASE auto_test_local;
-USE auto_test_local;
-connection child2_1;
-DROP DATABASE IF EXISTS auto_test_remote;
-CREATE DATABASE auto_test_remote;
-USE auto_test_remote;
-connection child2_2;
-DROP DATABASE IF EXISTS auto_test_remote2;
-CREATE DATABASE auto_test_remote2;
-USE auto_test_remote2;
-
-test select 1
-connection master_1;
-SELECT 1;
-1
-1
-connection master_1;
-DROP TABLE IF EXISTS tb_l;
-CREATE TABLE tb_l (
-a INT,
-b CHAR(1),
-c DATETIME,
-PRIMARY KEY(a)
-) MASTER_1_ENGINE2 MASTER_1_CHARSET2
-INSERT INTO tb_l (a, b, c) VALUES
-(1, 'a', '2008-08-01 10:21:39'),
-(2, 'b', '2000-01-01 00:00:00'),
-(3, 'e', '2007-06-04 20:03:11'),
-(4, 'd', '2003-11-30 05:01:03'),
-(5, 'c', '2001-12-31 23:59:59');
-
-2.17
-partition with sort
-connection master_1;
-CREATE TABLE ta_l2 (
-a INT,
-b CHAR(1),
-c DATETIME,
-PRIMARY KEY(a)
-) MASTER_1_ENGINE MASTER_1_COMMENT2_P_2_1
-INSERT INTO ta_l2 SELECT a, b, c FROM tb_l;
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 WHERE a > 1
-ORDER BY a;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-2 b 2000-01-01 00:00:00
-3 e 2007-06-04 20:03:11
-4 d 2003-11-30 05:01:03
-5 c 2001-12-31 23:59:59
-
-2.23
-partition update with moving partition
-connection master_1;
-DROP TABLE IF EXISTS ta_l2;
-connection master_1;
-CREATE TABLE ta_l2 (
-a INT,
-b CHAR(1),
-c DATETIME,
-PRIMARY KEY(a)
-) MASTER_1_ENGINE MASTER_1_COMMENT2_P_2_1
-INSERT INTO ta_l2 (a, b, c) VALUES (3, 'B', '2010-09-26 00:00:00');
-UPDATE ta_l2 SET a = 4 WHERE a = 3;
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2;
-a b date_format(c, '%Y-%m-%d %H:%i:%s')
-4 B 2010-09-26 00:00:00
-index merge with partition
-connection master_1;
-DROP TABLE IF EXISTS ta_l_int;
-connection master_1;
-CREATE TABLE ta_l_int (
-a INT AUTO_INCREMENT,
-b INT DEFAULT 10,
-c INT DEFAULT 11,
-PRIMARY KEY(a),
-KEY idx1(b),
-KEY idx2(c)
-) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT3_P_2_1
-INSERT INTO ta_l_int (a, b, c) VALUES (1, 2, 3);
-INSERT INTO ta_l_int (a, b, c) SELECT a + 1, b + 1, c + 1 FROM ta_l_int;
-INSERT INTO ta_l_int (a, b, c) SELECT a + 2, b + 2, c + 2 FROM ta_l_int;
-INSERT INTO ta_l_int (a, b, c) SELECT a + 4, b + 4, c + 4 FROM ta_l_int;
-INSERT INTO ta_l_int (a, b, c) SELECT a + 8, b + 8, c + 8 FROM ta_l_int;
-connection master_1;
-SELECT a, b, c FROM ta_l_int force index(primary, idx1, idx2)
-WHERE a = 5 OR b = 5 OR c = 5 ORDER BY a;
-a b c
-3 4 5
-4 5 6
-5 6 7
-
-2.26
-auto_increment with partition
-connection master_1;
-SET @original_spider_auto_increment_mode = @@SESSION.spider_auto_increment_mode;
-SET SESSION spider_auto_increment_mode = -1;
-Warnings:
-Warning 138 The option value -1 (use table value) is deprecated and will be removed in a future release
-connection slave1_1;
-connection master_1;
-DROP TABLE IF EXISTS t1;
-CREATE TABLE t1 (
-id int(11) NOT NULL AUTO_INCREMENT,
-PRIMARY KEY (id)
-) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_INCREMENT1_P_1
-MASTER_1_AUTO_INCREMENT_INCREMENT2
-MASTER_1_AUTO_INCREMENT_OFFSET2
-spider_direct_sql('SET SESSION AUTO_INCREMENT_INCREMENT = 4', '',
-'srv "s_2_1"')
-1
-spider_direct_sql('SET SESSION AUTO_INCREMENT_INCREMENT = 4', '',
-'srv "s_2_2"')
-1
-spider_bg_direct_sql('SET SESSION AUTO_INCREMENT_OFFSET = 2', '',
-'srv "s_2_1"')
-1
-spider_bg_direct_sql('SET SESSION AUTO_INCREMENT_OFFSET = 3', '',
-'srv "s_2_2"')
-1
-CREATE TABLE t1 (
-id int(11) NOT NULL AUTO_INCREMENT,
-PRIMARY KEY (id)
-) SLAVE1_1_ENGINE SLAVE1_1_CHARSET SLAVE1_1_COMMENT_INCREMENT1_P_1
-INSERT INTO t1 () VALUES ();
-SELECT LAST_INSERT_ID();
-LAST_INSERT_ID()
-3
-SELECT MAX(id) FROM t1;
-MAX(id)
-3
-INSERT INTO t1 () VALUES ();
-SELECT LAST_INSERT_ID();
-LAST_INSERT_ID()
-2
-SELECT MAX(id) FROM t1;
-MAX(id)
-3
-INSERT INTO t1 (id) VALUES (null);
-SELECT LAST_INSERT_ID();
-LAST_INSERT_ID()
-7
-SELECT MAX(id) FROM t1;
-MAX(id)
-7
-INSERT INTO t1 (id) VALUES (null);
-SELECT LAST_INSERT_ID();
-LAST_INSERT_ID()
-6
-SELECT MAX(id) FROM t1;
-MAX(id)
-7
-INSERT INTO t1 () VALUES (),(),(),();
-Warnings:
-Note 12520 Binlog's auto-inc value is probably different from linked table's auto-inc value
-Note 12520 Binlog's auto-inc value is probably different from linked table's auto-inc value
-Note 12520 Binlog's auto-inc value is probably different from linked table's auto-inc value
-SELECT LAST_INSERT_ID();
-LAST_INSERT_ID()
-10
-SELECT id FROM t1 ORDER BY id;
-id
-2
-3
-6
-7
-10
-11
-14
-15
-SET INSERT_ID=5000;
-INSERT INTO t1 () VALUES ();
-SELECT LAST_INSERT_ID();
-LAST_INSERT_ID()
-18
-SELECT MAX(id) FROM t1;
-MAX(id)
-18
-INSERT INTO t1 (id) VALUES (10000);
-SELECT LAST_INSERT_ID();
-LAST_INSERT_ID()
-22
-SELECT MAX(id) FROM t1;
-MAX(id)
-22
-INSERT INTO t1 (id) VALUES (1000);
-SELECT LAST_INSERT_ID();
-LAST_INSERT_ID()
-26
-SELECT MAX(id) FROM t1;
-MAX(id)
-26
-SET SESSION spider_auto_increment_mode = @original_spider_auto_increment_mode;
-connection slave1_1;
-SELECT id FROM t1 ORDER BY id;
-id
-2
-3
-6
-7
-10
-18
-777
-1000
-1554
-2331
-10000
-connection master_1;
-
-deinit
-connection master_1;
-DROP DATABASE IF EXISTS auto_test_local;
-connection slave1_1;
-DROP DATABASE IF EXISTS auto_test_local;
-connection child2_1;
-DROP DATABASE IF EXISTS auto_test_remote;
-connection child2_2;
-DROP DATABASE IF EXISTS auto_test_remote2;
-for slave1_1
-for master_1
-for child2
-child2_1
-child2_2
-child2_3
-for child3
-child3_1
-child3_2
-child3_3
-
-end of test
diff --git a/storage/spider/mysql-test/spider/handler/r/vp_fixes.result b/storage/spider/mysql-test/spider/handler/r/vp_fixes.result
deleted file mode 100644
index cc0e4105d61..00000000000
--- a/storage/spider/mysql-test/spider/handler/r/vp_fixes.result
+++ /dev/null
@@ -1,93 +0,0 @@
-for master_1
-for child2
-child2_1
-child2_2
-child2_3
-for child3
-child3_1
-child3_2
-child3_3
-
-drop and create databases
-connection master_1;
-DROP DATABASE IF EXISTS auto_test_local;
-CREATE DATABASE auto_test_local;
-USE auto_test_local;
-connection child2_1;
-DROP DATABASE IF EXISTS auto_test_remote;
-CREATE DATABASE auto_test_remote;
-USE auto_test_remote;
-connection child2_2;
-DROP DATABASE IF EXISTS auto_test_remote2;
-CREATE DATABASE auto_test_remote2;
-USE auto_test_remote2;
-
-test select 1
-connection master_1;
-SELECT 1;
-1
-1
-
-create table and insert
-connection master_1;
-DROP TABLE IF EXISTS tb_l;
-CREATE TABLE tb_l (
-a INT,
-b CHAR(1),
-c DATETIME,
-PRIMARY KEY(a)
-) MASTER_1_ENGINE2 MASTER_1_CHARSET2
-INSERT INTO tb_l (a, b, c) VALUES
-(1, 'a', '2008-08-01 10:21:39'),
-(2, 'b', '2000-01-01 00:00:00'),
-(3, 'e', '2007-06-04 20:03:11'),
-(4, 'd', '2003-11-30 05:01:03'),
-(5, 'c', '2001-12-31 23:59:59');
-DROP TABLE IF EXISTS ta_l;
-CREATE TABLE ta_l (
-PRIMARY KEY(a)
-) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1
-INSERT INTO ta_l SELECT a, b, c FROM tb_l;
-
-0.9
-create different primary key table
-connection master_1;
-CREATE TABLE ta_l_int (
-a INT DEFAULT 10,
-b INT AUTO_INCREMENT,
-c INT DEFAULT 11,
-PRIMARY KEY(b)
-) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT4_2_1
-connection master_1;
-INSERT INTO ta_l_int (a, b, c) VALUES (2, NULL, 3);
-create un-correspond primary key table
-connection master_1;
-DROP TABLE IF EXISTS ta_l_int;
-connection master_1;
-CREATE TABLE ta_l_int (
-a INT DEFAULT 10,
-b INT DEFAULT 12,
-c INT DEFAULT 11,
-PRIMARY KEY(c)
-) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT4_2_1
-connection master_1;
-INSERT INTO ta_l_int (a, b, c) VALUES (2, NULL, 3);
-
-deinit
-connection master_1;
-DROP DATABASE IF EXISTS auto_test_local;
-connection child2_1;
-DROP DATABASE IF EXISTS auto_test_remote;
-connection child2_2;
-DROP DATABASE IF EXISTS auto_test_remote2;
-for master_1
-for child2
-child2_1
-child2_2
-child2_3
-for child3
-child3_1
-child3_2
-child3_3
-
-end of test
diff --git a/storage/spider/mysql-test/spider/handler/suite.opt b/storage/spider/mysql-test/spider/handler/suite.opt
deleted file mode 100644
index 48457b17309..00000000000
--- a/storage/spider/mysql-test/spider/handler/suite.opt
+++ /dev/null
@@ -1 +0,0 @@
---loose-innodb
diff --git a/storage/spider/mysql-test/spider/handler/suite.pm b/storage/spider/mysql-test/spider/handler/suite.pm
deleted file mode 100644
index af267d047a4..00000000000
--- a/storage/spider/mysql-test/spider/handler/suite.pm
+++ /dev/null
@@ -1,10 +0,0 @@
-package My::Suite::Spider;
-
-@ISA = qw(My::Suite);
-
-return "No Spider engine" unless $ENV{HA_SPIDER_SO};
-return "Not run for embedded server" if $::opt_embedded_server;
-
-sub is_default { 1 }
-
-bless { };
diff --git a/storage/spider/mysql-test/spider/handler/t/basic_sql.test b/storage/spider/mysql-test/spider/handler/t/basic_sql.test
deleted file mode 100644
index 9cf4ce99dc3..00000000000
--- a/storage/spider/mysql-test/spider/handler/t/basic_sql.test
+++ /dev/null
@@ -1,2699 +0,0 @@
-# This test tests by executing basic SQL
---disable_warnings
---disable_query_log
---disable_result_log
---source test_init.inc
---enable_result_log
---enable_query_log
-
---echo
---echo drop and create databases
---connection master_1
-DROP DATABASE IF EXISTS auto_test_local;
-CREATE DATABASE auto_test_local;
-USE auto_test_local;
-if ($USE_CHILD_GROUP2)
-{
- --connection child2_1
- DROP DATABASE IF EXISTS auto_test_remote;
- CREATE DATABASE auto_test_remote;
- USE auto_test_remote;
- --connection child2_2
- DROP DATABASE IF EXISTS auto_test_remote2;
- CREATE DATABASE auto_test_remote2;
- USE auto_test_remote2;
-}
---enable_warnings
-
---echo
---echo test select 1
---connection master_1
-SELECT 1;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- SELECT 1;
- --connection child2_2
- SELECT 1;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
-
---echo
---echo create table select test
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- echo CHILD2_1_DROP_TABLES;
- echo CHILD2_1_CREATE_TABLES;
- }
- --disable_warnings
- eval $CHILD2_1_DROP_TABLES;
- --enable_warnings
- eval $CHILD2_1_CREATE_TABLES;
- if ($OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- }
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
---disable_warnings
-DROP TABLE IF EXISTS tb_l;
---enable_warnings
---disable_query_log
-echo CREATE TABLE tb_l (
- a INT,
- b CHAR(1),
- c DATETIME,
- PRIMARY KEY(a)
-) MASTER_1_ENGINE2 MASTER_1_CHARSET2;
-eval CREATE TABLE tb_l (
- a INT,
- b CHAR(1),
- c DATETIME,
- PRIMARY KEY(a)
-) $MASTER_1_ENGINE2 $MASTER_1_CHARSET2;
---enable_query_log
-INSERT INTO tb_l (a, b, c) VALUES
- (1, 'a', '2008-08-01 10:21:39'),
- (2, 'b', '2000-01-01 00:00:00'),
- (3, 'e', '2007-06-04 20:03:11'),
- (4, 'd', '2003-11-30 05:01:03'),
- (5, 'c', '2001-12-31 23:59:59');
---disable_warnings
-DROP TABLE IF EXISTS ta_l;
---enable_warnings
---disable_query_log
-echo CREATE TABLE ta_l (
- PRIMARY KEY(a)
-) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1
-SELECT a, b, c FROM tb_l;
-if ($MASTER_1_MERGE)
-{
- --error ER_WRONG_OBJECT
- eval CREATE TABLE ta_l (
- PRIMARY KEY(a)
- ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_2_1
- SELECT a, b, c FROM tb_l;
- eval CREATE TABLE ta_l (
- a INT,
- b CHAR(1),
- c DATETIME,
- PRIMARY KEY(a)
- ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_2_1;
- INSERT INTO ta_l SELECT a, b, c FROM tb_l;
-}
-if (!$MASTER_1_MERGE)
-{
- eval CREATE TABLE ta_l (
- PRIMARY KEY(a)
- ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_2_1
- SELECT a, b, c FROM tb_l;
-}
---enable_query_log
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%insert %';
- }
- eval $CHILD2_1_SELECT_TABLES;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-
---echo
---echo create table ignore select test
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
---disable_warnings
-DROP TABLE IF EXISTS ta_l;
-DROP TABLE IF EXISTS tb_l;
---enable_warnings
---disable_query_log
-echo CREATE TABLE tb_l (
- a INT,
- b CHAR(1),
- c DATETIME,
- PRIMARY KEY(a)
-) MASTER_1_ENGINE2 MASTER_1_CHARSET2;
-eval CREATE TABLE tb_l (
- a INT,
- b CHAR(1),
- c DATETIME,
- PRIMARY KEY(a)
-) $MASTER_1_ENGINE2 $MASTER_1_CHARSET2;
---enable_query_log
-INSERT INTO tb_l (a, b, c) VALUES
- (1, 'f', '2008-07-01 10:21:39'),
- (2, 'g', '2000-02-01 00:00:00'),
- (3, 'j', '2007-05-04 20:03:11'),
- (4, 'i', '2003-10-30 05:01:03'),
- (5, 'h', '2001-10-31 23:59:59');
---disable_query_log
-echo CREATE TABLE ta_l (
- PRIMARY KEY(a)
-) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1
-IGNORE SELECT a, b, c FROM tb_l;
-if ($MASTER_1_MERGE)
-{
- --error ER_WRONG_OBJECT
- eval CREATE TABLE ta_l (
- PRIMARY KEY(a)
- ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_2_1
- IGNORE SELECT a, b, c FROM tb_l;
- eval CREATE TABLE ta_l (
- a INT,
- b CHAR(1),
- c DATETIME,
- PRIMARY KEY(a)
- ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_2_1;
- INSERT IGNORE INTO ta_l SELECT a, b, c FROM tb_l;
-}
-if (!$MASTER_1_MERGE)
-{
- eval CREATE TABLE ta_l (
- PRIMARY KEY(a)
- ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_2_1
- IGNORE SELECT a, b, c FROM tb_l;
-}
---enable_query_log
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%insert %';
- }
- eval $CHILD2_1_SELECT_TABLES;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-
---echo
---echo create table ignore select test
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
---disable_warnings
-DROP TABLE IF EXISTS ta_l;
---enable_warnings
---disable_query_log
-echo CREATE TABLE ta_l (
- PRIMARY KEY(a)
-) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1
-REPLACE SELECT a, b, c FROM tb_l;
-if ($MASTER_1_MERGE)
-{
- --error ER_WRONG_OBJECT
- eval CREATE TABLE ta_l (
- PRIMARY KEY(a)
- ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_2_1
- REPLACE SELECT a, b, c FROM tb_l;
- eval CREATE TABLE ta_l (
- a INT,
- b CHAR(1),
- c DATETIME,
- PRIMARY KEY(a)
- ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_2_1;
- REPLACE INTO ta_l SELECT a, b, c FROM tb_l;
-}
-if (!$MASTER_1_MERGE)
-{
- eval CREATE TABLE ta_l (
- PRIMARY KEY(a)
- ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_2_1
- REPLACE SELECT a, b, c FROM tb_l;
-}
---enable_query_log
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%replace %';
- }
- eval $CHILD2_1_SELECT_TABLES;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-
---echo
---echo create no index table
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- echo CHILD2_1_DROP_TABLES3;
- echo CHILD2_1_CREATE_TABLES3;
- }
- --disable_warnings
- eval $CHILD2_1_DROP_TABLES3;
- --enable_warnings
- eval $CHILD2_1_CREATE_TABLES3;
- if ($OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- }
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
---disable_warnings
-DROP TABLE IF EXISTS ta_l_no_idx;
---enable_warnings
---disable_query_log
-echo CREATE TABLE ta_l_no_idx
-MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT2_2_1
-SELECT a, b, c FROM tb_l;
-if ($MASTER_1_NEEDPK)
-{
- --error ER_REQUIRES_PRIMARY_KEY
- eval CREATE TABLE ta_l_no_idx
- $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT2_2_1
- SELECT a, b, c FROM tb_l;
- eval CREATE TABLE ta_l_no_idx (
- a INT,
- b CHAR(1),
- c DATETIME,
- PRIMARY KEY(a)
- ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT2_2_1;
- INSERT INTO ta_l_no_idx SELECT a, b, c FROM tb_l;
-}
-if (!$MASTER_1_NEEDPK)
-{
- if ($MASTER_1_MERGE)
- {
- --error ER_WRONG_OBJECT
- eval CREATE TABLE ta_l_no_idx
- $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT2_2_1
- SELECT a, b, c FROM tb_l;
- eval CREATE TABLE ta_l_no_idx (
- a INT,
- b CHAR(1),
- c DATETIME
- ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT2_2_1;
- INSERT INTO ta_l_no_idx SELECT a, b, c FROM tb_l;
- }
- if (!$MASTER_1_MERGE)
- {
- eval CREATE TABLE ta_l_no_idx
- $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT2_2_1
- SELECT a, b, c FROM tb_l;
- }
-}
---enable_query_log
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%insert %';
- }
- eval $CHILD2_1_SELECT_TABLES3;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l_no_idx ORDER BY a;
-
---echo
---echo select table
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
-
---echo
---echo select table shared mode
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a
-LOCK IN SHARE MODE;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
-
---echo
---echo select table for update
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a
-FOR UPDATE;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
-
---echo
---echo select table join
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT a.a, a.b, date_format(b.c, '%Y-%m-%d %H:%i:%s') FROM ta_l a, tb_l b
-WHERE a.a = b.a ORDER BY a.a;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
-
---echo
---echo select table straight_join
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT STRAIGHT_JOIN a.a, a.b, date_format(b.c, '%Y-%m-%d %H:%i:%s')
-FROM ta_l a, tb_l b WHERE a.a = b.a ORDER BY a.a;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
-
---echo
---echo select sql_small_result
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT SQL_SMALL_RESULT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l
-ORDER BY a;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
-
---echo
---echo select sql_big_result
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT SQL_BIG_RESULT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l
-ORDER BY a;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
-
---echo
---echo select sql_buffer_result
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT SQL_BUFFER_RESULT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l
-ORDER BY a;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
-
---echo
---echo select sql_cache
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT SQL_CACHE a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l
-ORDER BY a;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
-
---echo
---echo select sql_no_cache
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT SQL_NO_CACHE a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l
-ORDER BY a;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
-
---echo
---echo select sql_calc_found_rows
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT SQL_CALC_FOUND_ROWS a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l
-ORDER BY a LIMIT 4;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT found_rows();
-
---echo
---echo select high_priority
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT HIGH_PRIORITY a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l
-ORDER BY a;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
-
---echo
---echo select distinct
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT DISTINCT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l
-ORDER BY a;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
-
---echo
---echo select count
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT count(*) FROM ta_l ORDER BY a;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
-
---echo
---echo select table join not use index
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT a.a, a.b, date_format(a.c, '%Y-%m-%d %H:%i:%s') FROM tb_l a WHERE
-EXISTS (SELECT * FROM ta_l b WHERE b.b = a.b) ORDER BY a.a;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
-
---echo
---echo select using pushdown
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT a.a, a.b, date_format(a.c, '%Y-%m-%d %H:%i:%s') FROM ta_l a WHERE
-a.b = 'g' ORDER BY a.a;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
-
---echo
---echo select using index and pushdown
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT a.a, a.b, date_format(a.c, '%Y-%m-%d %H:%i:%s') FROM ta_l a WHERE
-a.a > 0 AND a.b = 'g' ORDER BY a.a;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
-
---echo
---echo insert
---connection master_1
-TRUNCATE TABLE ta_l;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-INSERT INTO ta_l (a, b, c) VALUES (2, 'e', '2008-01-01 23:59:59');
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE 'insert %';
- }
- eval $CHILD2_1_SELECT_TABLES;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-
---echo
---echo insert select
---connection master_1
-TRUNCATE TABLE ta_l;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-INSERT INTO ta_l (a, b, c) SELECT a, b, c FROM tb_l;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE 'insert %';
- }
- eval $CHILD2_1_SELECT_TABLES;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-
---echo
---echo insert select a
---connection master_1
-TRUNCATE TABLE ta_l;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-INSERT INTO ta_l (a, b, c) VALUES ((SELECT a FROM tb_l ORDER BY a LIMIT 1),
-'e', '2008-01-01 23:59:59');
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE 'insert %';
- }
- eval $CHILD2_1_SELECT_TABLES;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-
---echo
---echo insert low_priority
---connection master_1
-TRUNCATE TABLE ta_l;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-INSERT LOW_PRIORITY INTO ta_l (a, b, c) values (2, 'e', '2008-01-01 23:59:59');
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE 'insert %';
- }
- eval $CHILD2_1_SELECT_TABLES;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-
---echo
---echo insert high_priority
---connection master_1
-TRUNCATE TABLE ta_l;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-INSERT HIGH_PRIORITY INTO ta_l (a, b, c) VALUES (2, 'e',
-'2008-01-01 23:59:59');
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE 'insert %';
- }
- eval $CHILD2_1_SELECT_TABLES;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-
---echo
---echo insert ignore
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-INSERT IGNORE INTO ta_l (a, b, c) VALUES (2, 'd', '2009-02-02 01:01:01');
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE 'insert %';
- }
- eval $CHILD2_1_SELECT_TABLES;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-
---echo
---echo insert update (insert)
---connection master_1
-TRUNCATE TABLE ta_l;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-INSERT INTO ta_l (a, b, c) VALUES (2, 'e', '2008-01-01 23:59:59') ON DUPLICATE
-KEY UPDATE b = 'f', c = '2005-08-08 11:11:11';
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE 'insert %';
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%update %';
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%delete %';
- }
- eval $CHILD2_1_SELECT_TABLES;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-
---echo
---echo insert update (update)
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-INSERT INTO ta_l (a, b, c) VALUES (2, 'e', '2008-01-01 23:59:59') ON DUPLICATE
-KEY UPDATE b = 'f', c = '2005-08-08 11:11:11';
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE 'insert %';
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%update %';
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%delete %';
- }
- eval $CHILD2_1_SELECT_TABLES;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-
---echo
---echo replace
---connection master_1
-TRUNCATE TABLE ta_l;
-INSERT INTO ta_l (a, b, c) VALUES (2, 'e', '2008-01-01 23:59:59');
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-REPLACE INTO ta_l (a, b, c) VALUES (2, 'f', '2008-02-02 02:02:02');
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE 'replace %';
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE 'insert %';
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE 'update %';
- }
- eval $CHILD2_1_SELECT_TABLES;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-
---echo
---echo replace select
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-REPLACE INTO ta_l (a, b, c) SELECT a, b, c FROM tb_l;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE 'replace %';
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE 'insert %';
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE 'update %';
- }
- eval $CHILD2_1_SELECT_TABLES;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-
---echo
---echo replace select a
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-REPLACE INTO ta_l (a, b, c) VALUES ((SELECT a FROM tb_l ORDER BY a LIMIT 1),
-'e', '2008-01-01 23:59:59');
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE 'replace %';
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE 'insert %';
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE 'update %';
- }
- eval $CHILD2_1_SELECT_TABLES;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-
---echo
---echo replace low_priority
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-REPLACE LOW_PRIORITY INTO ta_l (a, b, c) VALUES (3, 'g',
-'2009-03-03 03:03:03');
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE 'replace %';
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE 'insert %';
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE 'update %';
- }
- eval $CHILD2_1_SELECT_TABLES;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-
---echo
---echo update
-TRUNCATE TABLE ta_l;
-INSERT INTO ta_l (a, b, c) VALUES (1, 'e', '2008-01-01 23:59:59'),
-(2, 'e', '2008-01-01 23:59:59');
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-UPDATE ta_l SET b = 'f', c = '2008-02-02 02:02:02' WHERE a = 2;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE 'update %';
- }
- eval $CHILD2_1_SELECT_TABLES;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-
---echo
---echo update select
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-UPDATE ta_l SET b = 'g', c = '2009-03-03 03:03:03' WHERE a IN (SELECT a FROM
-tb_l);
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE 'update %';
- }
- eval $CHILD2_1_SELECT_TABLES;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-
---echo
---echo update select a
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-UPDATE ta_l SET b = 'h', c = '2010-04-04 04:04:04' WHERE a = (SELECT a FROM
-tb_l ORDER BY a LIMIT 1);
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE 'update %';
- }
- eval $CHILD2_1_SELECT_TABLES;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-
---echo
---echo update join
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-UPDATE ta_l a, tb_l b SET a.b = b.b, a.c = b.c WHERE a.a = b.a;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE 'update %';
- }
- eval $CHILD2_1_SELECT_TABLES;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-
---echo
---echo update join a
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-UPDATE ta_l a, tb_l b SET a.b = 'g', a.c = '2009-03-03 03:03:03' WHERE
-a.a = b.a;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE 'update %';
- }
- eval $CHILD2_1_SELECT_TABLES;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-
---echo
---echo update low_priority
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-UPDATE LOW_PRIORITY ta_l SET b = 'f', c = '2008-02-02 02:02:02' WHERE a = 2;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE 'update %';
- }
- eval $CHILD2_1_SELECT_TABLES;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-
---echo
---echo update ignore
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-UPDATE IGNORE ta_l SET a = 1, b = 'g', c = '2009-03-03 03:03:03' WHERE a = 2;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE 'update %';
- }
- eval $CHILD2_1_SELECT_TABLES;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-
---echo
---echo update pushdown
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-update ta_l set b = 'j', c = '2009-03-03 03:03:03' where b = 'f';
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE 'update %';
- }
- eval $CHILD2_1_SELECT_TABLES;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-
---echo
---echo update index pushdown
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-UPDATE ta_l SET b = 'g', c = '2009-03-03 03:03:03' WHERE a > 0 AND b = 'j';
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE 'update %';
- }
- eval $CHILD2_1_SELECT_TABLES;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-
---echo
---echo delete
-TRUNCATE TABLE ta_l;
-INSERT INTO ta_l (a, b, c) VALUES (1, 'e', '2008-01-01 23:59:59'),
-(2, 'e', '2008-01-01 23:59:59'), (3, 'e', '2008-01-01 23:59:59'),
-(4, 'e', '2008-01-01 23:59:59'), (5, 'e', '2008-01-01 23:59:59'),
-(6, 'e', '2008-01-01 23:59:59'), (7, 'e', '2008-01-01 23:59:59'),
-(8, 'e', '2008-01-01 23:59:59'), (9, 'e', '2008-01-01 23:59:59'),
-(10, 'j', '2008-01-01 23:59:59');
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-DELETE FROM ta_l WHERE a = 2;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE 'delete %';
- }
- eval $CHILD2_1_SELECT_TABLES;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-
---echo
---echo delete all
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-DELETE FROM ta_l;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE 'delete %';
- }
- eval $CHILD2_1_SELECT_TABLES;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-
---echo
---echo delete select
-TRUNCATE TABLE ta_l;
-INSERT INTO ta_l (a, b, c) VALUES (1, 'e', '2008-01-01 23:59:59'),
-(2, 'e', '2008-01-01 23:59:59'), (3, 'e', '2008-01-01 23:59:59'),
-(4, 'e', '2008-01-01 23:59:59'), (5, 'e', '2008-01-01 23:59:59'),
-(6, 'e', '2008-01-01 23:59:59'), (7, 'e', '2008-01-01 23:59:59'),
-(8, 'e', '2008-01-01 23:59:59'), (9, 'e', '2008-01-01 23:59:59'),
-(10, 'j', '2008-01-01 23:59:59');
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-DELETE FROM ta_l WHERE a IN (SELECT a FROM tb_l);
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE 'delete %';
- }
- eval $CHILD2_1_SELECT_TABLES;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-
---echo
---echo delete select a
-TRUNCATE TABLE ta_l;
-INSERT INTO ta_l (a, b, c) VALUES (1, 'e', '2008-01-01 23:59:59'),
-(2, 'e', '2008-01-01 23:59:59'), (3, 'e', '2008-01-01 23:59:59'),
-(4, 'e', '2008-01-01 23:59:59'), (5, 'e', '2008-01-01 23:59:59'),
-(6, 'e', '2008-01-01 23:59:59'), (7, 'e', '2008-01-01 23:59:59'),
-(8, 'e', '2008-01-01 23:59:59'), (9, 'e', '2008-01-01 23:59:59'),
-(10, 'j', '2008-01-01 23:59:59');
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-DELETE FROM ta_l WHERE a = (SELECT a FROM tb_l ORDER BY a LIMIT 1);
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE 'delete %';
- }
- eval $CHILD2_1_SELECT_TABLES;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-
---echo
---echo delete join
-TRUNCATE TABLE ta_l;
-INSERT INTO ta_l (a, b, c) VALUES (1, 'e', '2008-01-01 23:59:59'),
-(2, 'e', '2008-01-01 23:59:59'), (3, 'e', '2008-01-01 23:59:59'),
-(4, 'e', '2008-01-01 23:59:59'), (5, 'e', '2008-01-01 23:59:59'),
-(6, 'e', '2008-01-01 23:59:59'), (7, 'e', '2008-01-01 23:59:59'),
-(8, 'e', '2008-01-01 23:59:59'), (9, 'e', '2008-01-01 23:59:59'),
-(10, 'j', '2008-01-01 23:59:59');
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-DELETE a FROM ta_l a, (SELECT a FROM tb_l ORDER BY a) b WHERE a.a = b.a;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE 'delete %';
- }
- eval $CHILD2_1_SELECT_TABLES;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-
---echo
---echo delete low_priority
-TRUNCATE TABLE ta_l;
-INSERT INTO ta_l (a, b, c) VALUES (1, 'e', '2008-01-01 23:59:59'),
-(2, 'e', '2008-01-01 23:59:59'), (3, 'e', '2008-01-01 23:59:59'),
-(4, 'e', '2008-01-01 23:59:59'), (5, 'e', '2008-01-01 23:59:59'),
-(6, 'e', '2008-01-01 23:59:59'), (7, 'e', '2008-01-01 23:59:59'),
-(8, 'e', '2008-01-01 23:59:59'), (9, 'e', '2008-01-01 23:59:59'),
-(10, 'j', '2008-01-01 23:59:59');
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-DELETE LOW_PRIORITY FROM ta_l WHERE a = 2;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE 'delete %';
- }
- eval $CHILD2_1_SELECT_TABLES;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-
---echo
---echo delete ignore
-TRUNCATE TABLE ta_l;
-INSERT INTO ta_l (a, b, c) VALUES (1, 'e', '2008-01-01 23:59:59'),
-(2, 'e', '2008-01-01 23:59:59'), (3, 'e', '2008-01-01 23:59:59'),
-(4, 'e', '2008-01-01 23:59:59'), (5, 'e', '2008-01-01 23:59:59'),
-(6, 'e', '2008-01-01 23:59:59'), (7, 'e', '2008-01-01 23:59:59'),
-(8, 'e', '2008-01-01 23:59:59'), (9, 'e', '2008-01-01 23:59:59'),
-(10, 'j', '2008-01-01 23:59:59');
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-DELETE IGNORE FROM ta_l WHERE a = 2;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE 'delete %';
- }
- eval $CHILD2_1_SELECT_TABLES;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-
---echo
---echo delete quick
-TRUNCATE TABLE ta_l;
-INSERT INTO ta_l (a, b, c) VALUES (1, 'e', '2008-01-01 23:59:59'),
-(2, 'e', '2008-01-01 23:59:59'), (3, 'e', '2008-01-01 23:59:59'),
-(4, 'e', '2008-01-01 23:59:59'), (5, 'e', '2008-01-01 23:59:59'),
-(6, 'e', '2008-01-01 23:59:59'), (7, 'e', '2008-01-01 23:59:59'),
-(8, 'e', '2008-01-01 23:59:59'), (9, 'e', '2008-01-01 23:59:59'),
-(10, 'j', '2008-01-01 23:59:59');
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-DELETE QUICK FROM ta_l WHERE a = 2;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE 'delete %';
- }
- eval $CHILD2_1_SELECT_TABLES;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-
---echo
---echo delete pushdown
-TRUNCATE TABLE ta_l;
-INSERT INTO ta_l (a, b, c) VALUES (1, 'e', '2008-01-01 23:59:59'),
-(2, 'e', '2008-01-01 23:59:59'), (3, 'e', '2008-01-01 23:59:59'),
-(4, 'e', '2008-01-01 23:59:59'), (5, 'e', '2008-01-01 23:59:59'),
-(6, 'e', '2008-01-01 23:59:59'), (7, 'e', '2008-01-01 23:59:59'),
-(8, 'e', '2008-01-01 23:59:59'), (9, 'e', '2008-01-01 23:59:59'),
-(10, 'j', '2008-01-01 23:59:59');
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-DELETE FROM ta_l WHERE b = 'e';
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE 'delete %';
- }
- eval $CHILD2_1_SELECT_TABLES;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-
---echo
---echo delete index pushdown
-TRUNCATE TABLE ta_l;
-INSERT INTO ta_l (a, b, c) VALUES (1, 'e', '2008-01-01 23:59:59'),
-(2, 'e', '2008-01-01 23:59:59'), (3, 'e', '2008-01-01 23:59:59'),
-(4, 'e', '2008-01-01 23:59:59'), (5, 'e', '2008-01-01 23:59:59'),
-(6, 'e', '2008-01-01 23:59:59'), (7, 'e', '2008-01-01 23:59:59'),
-(8, 'e', '2008-01-01 23:59:59'), (9, 'e', '2008-01-01 23:59:59'),
-(10, 'j', '2008-01-01 23:59:59');
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-DELETE FROM ta_l WHERE a > 0 AND b = 'e';
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE 'delete %';
- }
- eval $CHILD2_1_SELECT_TABLES;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-
---echo
---echo truncate
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-TRUNCATE TABLE ta_l;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE 'truncate %';
- }
- eval $CHILD2_1_SELECT_TABLES;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-
---echo
---echo deinit
---disable_warnings
---connection master_1
-DROP DATABASE IF EXISTS auto_test_local;
-if ($USE_CHILD_GROUP2)
-{
- --connection child2_1
- DROP DATABASE IF EXISTS auto_test_remote;
- --connection child2_2
- DROP DATABASE IF EXISTS auto_test_remote2;
-}
---disable_query_log
---disable_result_log
---source test_deinit.inc
---enable_result_log
---enable_query_log
---enable_warnings
---echo
---echo end of test
diff --git a/storage/spider/mysql-test/spider/handler/t/basic_sql_part.test b/storage/spider/mysql-test/spider/handler/t/basic_sql_part.test
deleted file mode 100644
index 1bb18358d5d..00000000000
--- a/storage/spider/mysql-test/spider/handler/t/basic_sql_part.test
+++ /dev/null
@@ -1,571 +0,0 @@
-# This test tests by executing basic SQL
---disable_warnings
---disable_query_log
---disable_result_log
---source test_init.inc
---enable_result_log
---enable_query_log
-if (!$HAVE_PARTITION)
-{
- --disable_query_log
- --disable_result_log
- --source test_deinit.inc
- --enable_result_log
- --enable_query_log
- --enable_warnings
- skip Test requires partitioning;
-}
-
---echo
---echo drop and create databases
---connection master_1
-DROP DATABASE IF EXISTS auto_test_local;
-CREATE DATABASE auto_test_local;
-USE auto_test_local;
-if ($USE_CHILD_GROUP2)
-{
- --connection child2_1
- DROP DATABASE IF EXISTS auto_test_remote;
- CREATE DATABASE auto_test_remote;
- USE auto_test_remote;
- --connection child2_2
- DROP DATABASE IF EXISTS auto_test_remote2;
- CREATE DATABASE auto_test_remote2;
- USE auto_test_remote2;
-}
---enable_warnings
-
---echo
---echo test select 1
---connection master_1
-SELECT 1;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- SELECT 1;
- --connection child2_2
- SELECT 1;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
-
---connection master_1
---disable_warnings
-DROP TABLE IF EXISTS tb_l;
---enable_warnings
---disable_query_log
-echo CREATE TABLE tb_l (
- a INT,
- b CHAR(1),
- c DATETIME,
- PRIMARY KEY(a)
-) MASTER_1_ENGINE2 MASTER_1_CHARSET2;
-eval CREATE TABLE tb_l (
- a INT,
- b CHAR(1),
- c DATETIME,
- PRIMARY KEY(a)
-) $MASTER_1_ENGINE2 $MASTER_1_CHARSET2;
---enable_query_log
-INSERT INTO tb_l (a, b, c) VALUES
- (1, 'f', '2008-07-01 10:21:39'),
- (2, 'g', '2000-02-01 00:00:00'),
- (3, 'j', '2007-05-04 20:03:11'),
- (4, 'i', '2003-10-30 05:01:03'),
- (5, 'h', '2001-10-31 23:59:59');
-
---echo
---echo create table with partition and select test
-if ($HAVE_PARTITION)
-{
- if ($USE_CHILD_GROUP2)
- {
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_2
- if ($OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- echo CHILD2_2_DROP_TABLES;
- echo CHILD2_2_CREATE_TABLES;
- }
- --disable_warnings
- eval $CHILD2_2_DROP_TABLES;
- --enable_warnings
- eval $CHILD2_2_CREATE_TABLES;
- if ($OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- }
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- --connection child2_1
- if ($OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- echo CHILD2_1_DROP_TABLES2;
- echo CHILD2_1_CREATE_TABLES2;
- }
- --disable_warnings
- eval $CHILD2_1_DROP_TABLES2;
- --enable_warnings
- eval $CHILD2_1_CREATE_TABLES2;
- if ($OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- }
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
- }
- --connection master_1
- --disable_query_log
- echo CREATE TABLE ta_l2 (
- PRIMARY KEY(a)
- ) MASTER_1_ENGINE MASTER_1_COMMENT_P_2_1
- SELECT a, b, c FROM tb_l;
- if ($MASTER_1_MERGE)
- {
- --error ER_WRONG_OBJECT
- eval CREATE TABLE ta_l2 (
- PRIMARY KEY(a)
- ) $MASTER_1_ENGINE $MASTER_1_COMMENT_P_2_1
- SELECT a, b, c FROM tb_l;
- eval CREATE TABLE ta_l2 (
- a INT,
- b CHAR(1),
- c DATETIME,
- PRIMARY KEY(a)
- ) $MASTER_1_ENGINE $MASTER_1_COMMENT_P_2_1;
- INSERT INTO ta_l2 SELECT a, b, c FROM tb_l;
- }
- if (!$MASTER_1_MERGE)
- {
- eval CREATE TABLE ta_l2 (
- PRIMARY KEY(a)
- ) $MASTER_1_ENGINE $MASTER_1_COMMENT_P_2_1
- SELECT a, b, c FROM tb_l;
- }
- --enable_query_log
- if ($USE_CHILD_GROUP2)
- {
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_2
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%insert %';
- }
- eval $CHILD2_2_SELECT_TABLES;
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%insert %';
- }
- eval $CHILD2_1_SELECT_TABLES2;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
- }
- --connection master_1
- SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a;
-}
-
---echo
---echo select partition using pushdown
-if ($HAVE_PARTITION)
-{
- if ($USE_CHILD_GROUP2)
- {
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_2
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
- }
- --connection master_1
- SELECT a.a, a.b, date_format(a.c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 a WHERE
- a.b = 'g' ORDER BY a.a;
- if ($USE_CHILD_GROUP2)
- {
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_2
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
- }
-}
-
---echo
---echo select partition using index pushdown
-if ($HAVE_PARTITION)
-{
- if ($USE_CHILD_GROUP2)
- {
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_2
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
- }
- --connection master_1
- SELECT a.a, a.b, date_format(a.c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 a WHERE
- a.a > 0 AND a.b = 'g' ORDER BY a.a;
- if ($USE_CHILD_GROUP2)
- {
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_2
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
- }
-}
-
---echo
---echo update partition pushdown
-if ($HAVE_PARTITION)
-{
- if ($USE_CHILD_GROUP2)
- {
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_2
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
- }
- --connection master_1
- UPDATE ta_l2 SET b = 'e', c = '2009-03-03 03:03:03' WHERE b = 'j';
- if ($USE_CHILD_GROUP2)
- {
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_2
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE 'update %';
- }
- eval $CHILD2_2_SELECT_TABLES;
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE 'update %';
- }
- eval $CHILD2_1_SELECT_TABLES2;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
- }
- --connection master_1
- SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a;
-}
-
---echo
---echo update partition index pushdown
-if ($HAVE_PARTITION)
-{
- if ($USE_CHILD_GROUP2)
- {
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_2
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
- }
- --connection master_1
- UPDATE ta_l2 SET b = 'j', c = '2009-03-03 03:03:03' WHERE a > 0 AND b = 'e';
- if ($USE_CHILD_GROUP2)
- {
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_2
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE 'update %';
- }
- eval $CHILD2_2_SELECT_TABLES;
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE 'update %';
- }
- eval $CHILD2_1_SELECT_TABLES2;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
- }
- --connection master_1
- SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a;
-}
-
---echo
---echo delete partition pushdown
-if ($HAVE_PARTITION)
-{
- TRUNCATE TABLE ta_l2;
- INSERT INTO ta_l2 SELECT a, b, c FROM tb_l;
- if ($USE_CHILD_GROUP2)
- {
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_2
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
- }
- --connection master_1
- DELETE FROM ta_l2 WHERE b = 'g';
- if ($USE_CHILD_GROUP2)
- {
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_2
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE 'delete %';
- }
- eval $CHILD2_2_SELECT_TABLES;
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE 'delete %';
- }
- eval $CHILD2_1_SELECT_TABLES2;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
- }
- --connection master_1
- SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a;
-}
-
---echo
---echo delete partition index pushdown
-if ($HAVE_PARTITION)
-{
- TRUNCATE TABLE ta_l2;
- INSERT INTO ta_l2 SELECT a, b, c FROM tb_l;
- if ($USE_CHILD_GROUP2)
- {
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_2
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
- }
- --connection master_1
- DELETE FROM ta_l2 WHERE a > 0 AND b = 'g';
- if ($USE_CHILD_GROUP2)
- {
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_2
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE 'delete %';
- }
- eval $CHILD2_2_SELECT_TABLES;
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE 'delete %';
- }
- eval $CHILD2_1_SELECT_TABLES2;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
- }
- --connection master_1
- SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a;
-}
-
---echo
---echo deinit
---disable_warnings
---connection master_1
-DROP DATABASE IF EXISTS auto_test_local;
-if ($USE_CHILD_GROUP2)
-{
- --connection child2_1
- DROP DATABASE IF EXISTS auto_test_remote;
- --connection child2_2
- DROP DATABASE IF EXISTS auto_test_remote2;
-}
---disable_query_log
---disable_result_log
---source test_deinit.inc
---enable_result_log
---enable_query_log
---enable_warnings
---echo
---echo end of test
diff --git a/storage/spider/mysql-test/spider/handler/t/connect_child2_1.inc b/storage/spider/mysql-test/spider/handler/t/connect_child2_1.inc
deleted file mode 100644
index cd9b0c9ca9b..00000000000
--- a/storage/spider/mysql-test/spider/handler/t/connect_child2_1.inc
+++ /dev/null
@@ -1 +0,0 @@
---connect (child2_1, localhost, root, , , $CHILD2_1_MYPORT, $CHILD2_1_MYSOCK)
diff --git a/storage/spider/mysql-test/spider/handler/t/connect_child2_2.inc b/storage/spider/mysql-test/spider/handler/t/connect_child2_2.inc
deleted file mode 100644
index e145f66b630..00000000000
--- a/storage/spider/mysql-test/spider/handler/t/connect_child2_2.inc
+++ /dev/null
@@ -1 +0,0 @@
---connect (child2_2, localhost, root, , , $CHILD2_2_MYPORT, $CHILD2_2_MYSOCK)
diff --git a/storage/spider/mysql-test/spider/handler/t/connect_child2_3.inc b/storage/spider/mysql-test/spider/handler/t/connect_child2_3.inc
deleted file mode 100644
index d356348d8ea..00000000000
--- a/storage/spider/mysql-test/spider/handler/t/connect_child2_3.inc
+++ /dev/null
@@ -1 +0,0 @@
---connect (child2_3, localhost, root, , , $CHILD2_3_MYPORT, $CHILD2_3_MYSOCK)
diff --git a/storage/spider/mysql-test/spider/handler/t/connect_child3_1.inc b/storage/spider/mysql-test/spider/handler/t/connect_child3_1.inc
deleted file mode 100644
index 03e5c188c89..00000000000
--- a/storage/spider/mysql-test/spider/handler/t/connect_child3_1.inc
+++ /dev/null
@@ -1 +0,0 @@
---connect (child3_1, localhost, root, , , $CHILD3_1_MYPORT, $CHILD3_1_MYSOCK)
diff --git a/storage/spider/mysql-test/spider/handler/t/connect_child3_2.inc b/storage/spider/mysql-test/spider/handler/t/connect_child3_2.inc
deleted file mode 100644
index d62a7ada824..00000000000
--- a/storage/spider/mysql-test/spider/handler/t/connect_child3_2.inc
+++ /dev/null
@@ -1 +0,0 @@
---connect (child3_2, localhost, root, , , $CHILD3_2_MYPORT, $CHILD3_2_MYSOCK)
diff --git a/storage/spider/mysql-test/spider/handler/t/connect_child3_3.inc b/storage/spider/mysql-test/spider/handler/t/connect_child3_3.inc
deleted file mode 100644
index fb49f5bfdac..00000000000
--- a/storage/spider/mysql-test/spider/handler/t/connect_child3_3.inc
+++ /dev/null
@@ -1 +0,0 @@
---connect (child3_3, localhost, root, , , $CHILD3_3_MYPORT, $CHILD3_3_MYSOCK)
diff --git a/storage/spider/mysql-test/spider/handler/t/connect_master_1.inc b/storage/spider/mysql-test/spider/handler/t/connect_master_1.inc
deleted file mode 100644
index 0c129ce5775..00000000000
--- a/storage/spider/mysql-test/spider/handler/t/connect_master_1.inc
+++ /dev/null
@@ -1 +0,0 @@
---connect (master_1, localhost, root, , , $MASTER_1_MYPORT, $MASTER_1_MYSOCK)
diff --git a/storage/spider/mysql-test/spider/handler/t/connect_slave1_1.inc b/storage/spider/mysql-test/spider/handler/t/connect_slave1_1.inc
deleted file mode 100644
index 45a822743e0..00000000000
--- a/storage/spider/mysql-test/spider/handler/t/connect_slave1_1.inc
+++ /dev/null
@@ -1 +0,0 @@
---connect (slave1_1, localhost, root, , , $SLAVE1_1_MYPORT, $SLAVE1_1_MYSOCK)
diff --git a/storage/spider/mysql-test/spider/handler/t/direct_aggregate.test b/storage/spider/mysql-test/spider/handler/t/direct_aggregate.test
deleted file mode 100644
index 5c0c37f483d..00000000000
--- a/storage/spider/mysql-test/spider/handler/t/direct_aggregate.test
+++ /dev/null
@@ -1,179 +0,0 @@
---disable_warnings
---disable_query_log
---disable_result_log
---source test_init.inc
---enable_result_log
---enable_query_log
-
---echo
---echo drop and create databases
---connection master_1
-DROP DATABASE IF EXISTS auto_test_local;
-CREATE DATABASE auto_test_local;
-USE auto_test_local;
-if ($USE_CHILD_GROUP2)
-{
- --connection child2_1
- DROP DATABASE IF EXISTS auto_test_remote;
- CREATE DATABASE auto_test_remote;
- USE auto_test_remote;
- --connection child2_2
- DROP DATABASE IF EXISTS auto_test_remote2;
- CREATE DATABASE auto_test_remote2;
- USE auto_test_remote2;
-}
---enable_warnings
-
---echo
---echo test select 1
---connection master_1
-SELECT 1;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- SELECT 1;
- --connection child2_2
- SELECT 1;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
-
---echo
---echo create table select test
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- echo CHILD2_1_DROP_TABLES;
- echo CHILD2_1_CREATE_TABLES;
- }
- --disable_warnings
- eval $CHILD2_1_DROP_TABLES;
- --enable_warnings
- eval $CHILD2_1_CREATE_TABLES;
- if ($OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- }
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
---disable_warnings
-DROP TABLE IF EXISTS ta_l;
---enable_warnings
---disable_query_log
-echo CREATE TABLE ta_l (
- a INT,
- b CHAR(1),
- c DATETIME,
- PRIMARY KEY(a)
-) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1;
-eval CREATE TABLE ta_l (
- a INT,
- b CHAR(1),
- c DATETIME,
- PRIMARY KEY(a)
-) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_2_1;
---enable_query_log
-INSERT INTO ta_l (a, b, c) VALUES
- (1, 'a', '2008-08-01 10:21:39'),
- (2, 'b', '2000-01-01 00:00:00'),
- (3, 'e', '2007-06-04 20:03:11'),
- (4, 'd', '2003-11-30 05:01:03'),
- (5, 'c', '2001-12-31 23:59:59');
-
---echo
---echo direct_aggregating test
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-eval $MASTER_1_CHECK_DIRECT_AGGREGATE_STATUS;
-SELECT COUNT(*) FROM ta_l;
-eval $MASTER_1_CHECK_DIRECT_AGGREGATE_STATUS;
-SELECT MAX(a) FROM ta_l;
-eval $MASTER_1_CHECK_DIRECT_AGGREGATE_STATUS;
-SELECT MIN(a) FROM ta_l;
-eval $MASTER_1_CHECK_DIRECT_AGGREGATE_STATUS;
-SELECT MAX(a) FROM ta_l WHERE a < 5;
-eval $MASTER_1_CHECK_DIRECT_AGGREGATE_STATUS;
-SELECT MIN(a) FROM ta_l WHERE a > 1;
-eval $MASTER_1_CHECK_DIRECT_AGGREGATE_STATUS;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%handler %';
- }
- eval $CHILD2_1_SELECT_TABLES;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
-
---echo
---echo deinit
---disable_warnings
---connection master_1
-DROP DATABASE IF EXISTS auto_test_local;
-if ($USE_CHILD_GROUP2)
-{
- --connection child2_1
- DROP DATABASE IF EXISTS auto_test_remote;
- --connection child2_2
- DROP DATABASE IF EXISTS auto_test_remote2;
-}
---disable_query_log
---disable_result_log
---source test_deinit.inc
---enable_result_log
---enable_query_log
---enable_warnings
---echo
---echo end of test
diff --git a/storage/spider/mysql-test/spider/handler/t/direct_aggregate_part.test b/storage/spider/mysql-test/spider/handler/t/direct_aggregate_part.test
deleted file mode 100644
index cb0b55e9788..00000000000
--- a/storage/spider/mysql-test/spider/handler/t/direct_aggregate_part.test
+++ /dev/null
@@ -1,192 +0,0 @@
---disable_warnings
---disable_query_log
---disable_result_log
---source test_init.inc
---enable_result_log
---enable_query_log
-if (!$HAVE_PARTITION)
-{
- --disable_query_log
- --disable_result_log
- --source test_deinit.inc
- --enable_result_log
- --enable_query_log
- --enable_warnings
- skip Test requires partitioning;
-}
-
---echo
---echo drop and create databases
---connection master_1
-DROP DATABASE IF EXISTS auto_test_local;
-CREATE DATABASE auto_test_local;
-USE auto_test_local;
-if ($USE_CHILD_GROUP2)
-{
- --connection child2_1
- DROP DATABASE IF EXISTS auto_test_remote;
- CREATE DATABASE auto_test_remote;
- USE auto_test_remote;
- --connection child2_2
- DROP DATABASE IF EXISTS auto_test_remote2;
- CREATE DATABASE auto_test_remote2;
- USE auto_test_remote2;
-}
---enable_warnings
-
---echo
---echo test select 1
---connection master_1
-SELECT 1;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- SELECT 1;
- --connection child2_2
- SELECT 1;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
-
---echo
---echo with partition test
-if ($HAVE_PARTITION)
-{
- if ($USE_CHILD_GROUP2)
- {
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_2
- if ($OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- echo CHILD2_2_DROP_TABLES;
- echo CHILD2_2_CREATE_TABLES;
- }
- --disable_warnings
- eval $CHILD2_2_DROP_TABLES;
- --enable_warnings
- eval $CHILD2_2_CREATE_TABLES;
- if ($OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- }
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- --connection child2_1
- if ($OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- echo CHILD2_1_DROP_TABLES2;
- echo CHILD2_1_CREATE_TABLES2;
- }
- --disable_warnings
- eval $CHILD2_1_DROP_TABLES2;
- --enable_warnings
- eval $CHILD2_1_CREATE_TABLES2;
- if ($OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- }
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
- }
- --connection master_1
- --disable_query_log
- echo CREATE TABLE ta_l2 (
- a INT,
- b CHAR(1),
- c DATETIME,
- PRIMARY KEY(a)
- ) MASTER_1_ENGINE MASTER_1_COMMENT2_P_2_1;
- eval CREATE TABLE ta_l2 (
- a INT,
- b CHAR(1),
- c DATETIME,
- PRIMARY KEY(a)
- ) $MASTER_1_ENGINE $MASTER_1_COMMENT2_P_2_1;
- INSERT INTO ta_l2 (a, b, c) VALUES
- (1, 'a', '2008-08-01 10:21:39'),
- (2, 'b', '2000-01-01 00:00:00'),
- (3, 'e', '2007-06-04 20:03:11'),
- (4, 'd', '2003-11-30 05:01:03'),
- (5, 'c', '2001-12-31 23:59:59');
- --enable_query_log
- eval $MASTER_1_CHECK_DIRECT_AGGREGATE_STATUS;
- SELECT COUNT(*) FROM ta_l2;
- eval $MASTER_1_CHECK_DIRECT_AGGREGATE_STATUS;
- SELECT MAX(a) FROM ta_l2;
- eval $MASTER_1_CHECK_DIRECT_AGGREGATE_STATUS;
- SELECT MIN(a) FROM ta_l2;
- eval $MASTER_1_CHECK_DIRECT_AGGREGATE_STATUS;
- SELECT MAX(a) FROM ta_l2 WHERE a < 5;
- eval $MASTER_1_CHECK_DIRECT_AGGREGATE_STATUS;
- SELECT MIN(a) FROM ta_l2 WHERE a > 1;
- eval $MASTER_1_CHECK_DIRECT_AGGREGATE_STATUS;
- if ($USE_CHILD_GROUP2)
- {
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_2
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%handler %';
- }
- eval $CHILD2_2_SELECT_TABLES;
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%handler %';
- }
- eval $CHILD2_1_SELECT_TABLES2;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
- }
-}
-
---echo
---echo deinit
---disable_warnings
---connection master_1
-DROP DATABASE IF EXISTS auto_test_local;
-if ($USE_CHILD_GROUP2)
-{
- --connection child2_1
- DROP DATABASE IF EXISTS auto_test_remote;
- --connection child2_2
- DROP DATABASE IF EXISTS auto_test_remote2;
-}
---disable_query_log
---disable_result_log
---source test_deinit.inc
---enable_result_log
---enable_query_log
---enable_warnings
---echo
---echo end of test
diff --git a/storage/spider/mysql-test/spider/handler/t/direct_update.test b/storage/spider/mysql-test/spider/handler/t/direct_update.test
deleted file mode 100644
index 94f27e2859c..00000000000
--- a/storage/spider/mysql-test/spider/handler/t/direct_update.test
+++ /dev/null
@@ -1,198 +0,0 @@
---disable_warnings
---disable_query_log
---disable_result_log
---source test_init.inc
---enable_result_log
---enable_query_log
-
---echo
---echo drop and create databases
---connection master_1
-DROP DATABASE IF EXISTS auto_test_local;
-CREATE DATABASE auto_test_local;
-USE auto_test_local;
-if ($USE_CHILD_GROUP2)
-{
- --connection child2_1
- DROP DATABASE IF EXISTS auto_test_remote;
- CREATE DATABASE auto_test_remote;
- USE auto_test_remote;
- --connection child2_2
- DROP DATABASE IF EXISTS auto_test_remote2;
- CREATE DATABASE auto_test_remote2;
- USE auto_test_remote2;
-}
---enable_warnings
-
---echo
---echo test select 1
---connection master_1
-SELECT 1;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- SELECT 1;
- --connection child2_2
- SELECT 1;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
-
---echo
---echo create table select test
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- echo CHILD2_1_DROP_TABLES;
- echo CHILD2_1_CREATE_TABLES;
- }
- --disable_warnings
- eval $CHILD2_1_DROP_TABLES;
- --enable_warnings
- eval $CHILD2_1_CREATE_TABLES;
- if ($OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- }
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
---disable_warnings
-DROP TABLE IF EXISTS ta_l;
---enable_warnings
---disable_query_log
-echo CREATE TABLE ta_l (
- a INT,
- b CHAR(1),
- c DATETIME,
- PRIMARY KEY(a)
-) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1;
-eval CREATE TABLE ta_l (
- a INT,
- b CHAR(1),
- c DATETIME,
- PRIMARY KEY(a)
-) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_2_1;
---enable_query_log
-INSERT INTO ta_l (a, b, c) VALUES
- (1, 'a', '2008-08-01 10:21:39'),
- (2, 'b', '2000-01-01 00:00:00'),
- (3, 'e', '2007-06-04 20:03:11'),
- (4, 'd', '2003-11-30 05:01:03'),
- (5, 'c', '2001-12-31 23:59:59');
-
---echo
---echo direct_updating test
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-eval $MASTER_1_CHECK_DIRECT_UPDATE_STATUS;
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
---echo update all rows with function
-UPDATE ta_l SET c = ADDDATE(c, 1);
-eval $MASTER_1_CHECK_DIRECT_UPDATE_STATUS;
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
---echo update by primary key
-UPDATE ta_l SET b = 'x' WHERE a = 3;
-eval $MASTER_1_CHECK_DIRECT_UPDATE_STATUS;
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
---echo update by a column without index
-UPDATE ta_l SET c = '2011-10-17' WHERE b = 'x';
-eval $MASTER_1_CHECK_DIRECT_UPDATE_STATUS;
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
---echo update by primary key with order and limit
-UPDATE ta_l SET c = ADDDATE(c, 1) WHERE a < 4 ORDER BY b DESC LIMIT 1;
-eval $MASTER_1_CHECK_DIRECT_UPDATE_STATUS;
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
---echo delete by primary key with order and limit
-DELETE FROM ta_l WHERE a < 4 ORDER BY c LIMIT 1;
-eval $MASTER_1_CHECK_DIRECT_DELETE_STATUS;
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
---echo delete by a column without index
-DELETE FROM ta_l WHERE b = 'c';
-eval $MASTER_1_CHECK_DIRECT_DELETE_STATUS;
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
---echo delete by primary key
-DELETE FROM ta_l WHERE a = 3;
-eval $MASTER_1_CHECK_DIRECT_DELETE_STATUS;
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%handler %';
- }
- eval $CHILD2_1_SELECT_TABLES;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
-
---echo
---echo deinit
---disable_warnings
---connection master_1
-DROP DATABASE IF EXISTS auto_test_local;
-if ($USE_CHILD_GROUP2)
-{
- --connection child2_1
- DROP DATABASE IF EXISTS auto_test_remote;
- --connection child2_2
- DROP DATABASE IF EXISTS auto_test_remote2;
-}
---disable_query_log
---disable_result_log
---source test_deinit.inc
---enable_result_log
---enable_query_log
---enable_warnings
---echo
---echo end of test
diff --git a/storage/spider/mysql-test/spider/handler/t/direct_update_part.test b/storage/spider/mysql-test/spider/handler/t/direct_update_part.test
deleted file mode 100644
index e8f1882594c..00000000000
--- a/storage/spider/mysql-test/spider/handler/t/direct_update_part.test
+++ /dev/null
@@ -1,211 +0,0 @@
---disable_warnings
---disable_query_log
---disable_result_log
---source test_init.inc
---enable_result_log
---enable_query_log
-if (!$HAVE_PARTITION)
-{
- --disable_query_log
- --disable_result_log
- --source test_deinit.inc
- --enable_result_log
- --enable_query_log
- --enable_warnings
- skip Test requires partitioning;
-}
-
---echo
---echo drop and create databases
---connection master_1
-DROP DATABASE IF EXISTS auto_test_local;
-CREATE DATABASE auto_test_local;
-USE auto_test_local;
-if ($USE_CHILD_GROUP2)
-{
- --connection child2_1
- DROP DATABASE IF EXISTS auto_test_remote;
- CREATE DATABASE auto_test_remote;
- USE auto_test_remote;
- --connection child2_2
- DROP DATABASE IF EXISTS auto_test_remote2;
- CREATE DATABASE auto_test_remote2;
- USE auto_test_remote2;
-}
---enable_warnings
-
---echo
---echo test select 1
---connection master_1
-SELECT 1;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- SELECT 1;
- --connection child2_2
- SELECT 1;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
-
---echo
---echo with partition test
-if ($HAVE_PARTITION)
-{
- if ($USE_CHILD_GROUP2)
- {
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_2
- if ($OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- echo CHILD2_2_DROP_TABLES;
- echo CHILD2_2_CREATE_TABLES;
- }
- --disable_warnings
- eval $CHILD2_2_DROP_TABLES;
- --enable_warnings
- eval $CHILD2_2_CREATE_TABLES;
- if ($OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- }
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- --connection child2_1
- if ($OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- echo CHILD2_1_DROP_TABLES2;
- echo CHILD2_1_CREATE_TABLES2;
- }
- --disable_warnings
- eval $CHILD2_1_DROP_TABLES2;
- --enable_warnings
- eval $CHILD2_1_CREATE_TABLES2;
- if ($OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- }
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
- }
- --connection master_1
- --disable_query_log
- echo CREATE TABLE ta_l2 (
- a INT,
- b CHAR(1),
- c DATETIME,
- PRIMARY KEY(a)
- ) MASTER_1_ENGINE MASTER_1_COMMENT2_P_2_1;
- eval CREATE TABLE ta_l2 (
- a INT,
- b CHAR(1),
- c DATETIME,
- PRIMARY KEY(a)
- ) $MASTER_1_ENGINE $MASTER_1_COMMENT2_P_2_1;
- INSERT INTO ta_l2 (a, b, c) VALUES
- (1, 'a', '2008-08-01 10:21:39'),
- (2, 'b', '2000-01-01 00:00:00'),
- (3, 'e', '2007-06-04 20:03:11'),
- (4, 'd', '2003-11-30 05:01:03'),
- (5, 'c', '2001-12-31 23:59:59');
- --enable_query_log
- eval $MASTER_1_CHECK_DIRECT_UPDATE_STATUS;
- SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a;
- --echo update all rows with function
- UPDATE ta_l2 SET c = ADDDATE(c, 1);
- eval $MASTER_1_CHECK_DIRECT_UPDATE_STATUS;
- SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a;
- --echo update by primary key
- UPDATE ta_l2 SET b = 'x' WHERE a = 3;
- eval $MASTER_1_CHECK_DIRECT_UPDATE_STATUS;
- SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a;
- --echo update by a column without index
- UPDATE ta_l2 SET c = '2011-10-17' WHERE b = 'x';
- eval $MASTER_1_CHECK_DIRECT_UPDATE_STATUS;
- SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a;
- --echo update by primary key with order and limit
- UPDATE ta_l2 SET c = ADDDATE(c, 1) WHERE a < 4 ORDER BY b DESC LIMIT 1;
- eval $MASTER_1_CHECK_DIRECT_UPDATE_STATUS;
- SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a;
- --echo delete by primary key with order and limit
- DELETE FROM ta_l2 WHERE a < 4 ORDER BY c LIMIT 1;
- eval $MASTER_1_CHECK_DIRECT_DELETE_STATUS;
- SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a;
- --echo delete by a column without index
- DELETE FROM ta_l2 WHERE b = 'c';
- eval $MASTER_1_CHECK_DIRECT_DELETE_STATUS;
- SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a;
- --echo delete by primary key
- DELETE FROM ta_l2 WHERE a = 3;
- eval $MASTER_1_CHECK_DIRECT_DELETE_STATUS;
- SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a;
- if ($USE_CHILD_GROUP2)
- {
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_2
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%handler %';
- }
- eval $CHILD2_2_SELECT_TABLES;
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%handler %';
- }
- eval $CHILD2_1_SELECT_TABLES2;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
- }
-}
-
---echo
---echo deinit
---disable_warnings
---connection master_1
-DROP DATABASE IF EXISTS auto_test_local;
-if ($USE_CHILD_GROUP2)
-{
- --connection child2_1
- DROP DATABASE IF EXISTS auto_test_remote;
- --connection child2_2
- DROP DATABASE IF EXISTS auto_test_remote2;
-}
---disable_query_log
---disable_result_log
---source test_deinit.inc
---enable_result_log
---enable_query_log
---enable_warnings
---echo
---echo end of test
diff --git a/storage/spider/mysql-test/spider/handler/t/function.test b/storage/spider/mysql-test/spider/handler/t/function.test
deleted file mode 100644
index 2472e774782..00000000000
--- a/storage/spider/mysql-test/spider/handler/t/function.test
+++ /dev/null
@@ -1,253 +0,0 @@
-# This test tests for using functions
---disable_warnings
---disable_query_log
---disable_result_log
---source test_init.inc
---enable_result_log
---enable_query_log
-
---echo
---echo drop and create databases
---connection master_1
-DROP DATABASE IF EXISTS auto_test_local;
-CREATE DATABASE auto_test_local;
-USE auto_test_local;
-if ($USE_CHILD_GROUP2)
-{
- --connection child2_1
- DROP DATABASE IF EXISTS auto_test_remote;
- CREATE DATABASE auto_test_remote;
- USE auto_test_remote;
- --connection child2_2
- DROP DATABASE IF EXISTS auto_test_remote2;
- CREATE DATABASE auto_test_remote2;
- USE auto_test_remote2;
-}
---enable_warnings
-
---echo
---echo test select 1
---connection master_1
-SELECT 1;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- SELECT 1;
- --connection child2_2
- SELECT 1;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
-
---echo
---echo in()
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_result_log
- }
- --disable_query_log
- --connection child2_1
- if ($OUTPUT_CHILD_GROUP2)
- {
- echo CHILD2_1_DROP_TEXT_PK_TABLES1;
- echo CHILD2_1_CREATE_TEXT_PK_TABLES1;
- }
- --disable_warnings
- eval $CHILD2_1_DROP_TEXT_PK_TABLES1;
- --enable_warnings
- eval $CHILD2_1_CREATE_TEXT_PK_TABLES1;
- --enable_query_log
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_result_log
- }
-}
---connection master_1
---disable_query_log
-echo CREATE TABLE t1 (
- a VARCHAR(255),
- PRIMARY KEY(a)
-) MASTER_1_ENGINE MASTER_1_CHARSET3 MASTER_1_COMMENT_TEXT_PK1_1;
-eval CREATE TABLE t1 (
- a VARCHAR(255),
- PRIMARY KEY(a)
-) $MASTER_1_ENGINE $MASTER_1_CHARSET3 $MASTER_1_COMMENT_TEXT_PK1_1;
---enable_query_log
-insert into t1 values ('1');
-insert into t1 select a + 1 from t1;
-insert into t1 select a + 2 from t1;
-insert into t1 select a + 4 from t1;
-insert into t1 select a + 8 from t1;
-insert into t1 select a + 16 from t1;
-insert into t1 select a + 32 from t1;
-insert into t1 select a + 64 from t1;
-insert into t1 select a + 128 from t1;
-insert into t1 select a + 256 from t1;
-insert into t1 select a + 512 from t1;
-flush tables;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-select a from t1 where a in ('15', '120');
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- }
- eval $CHILD2_1_SELECT_TEXT_PK_TABLES1;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
-
---echo
---echo date_sub()
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- echo CHILD2_1_DROP_TABLES;
- echo CHILD2_1_CREATE_TABLES;
- }
- --disable_warnings
- eval $CHILD2_1_DROP_TABLES;
- --enable_warnings
- eval $CHILD2_1_CREATE_TABLES;
- if ($OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- }
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
---disable_warnings
-DROP TABLE IF EXISTS ta_l;
---enable_warnings
---disable_query_log
-echo CREATE TABLE ta_l (
- a INT,
- b CHAR(1),
- c DATETIME,
- PRIMARY KEY(a)
-) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1;
-eval CREATE TABLE ta_l (
- a INT,
- b CHAR(1),
- c DATETIME,
- PRIMARY KEY(a)
-) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_2_1;
---enable_query_log
-INSERT INTO ta_l (a, b, c) VALUES
- (1, 'a', '2008-08-01 10:21:39'),
- (2, 'b', '2000-01-01 00:00:00'),
- (3, 'e', '2007-06-04 20:03:11'),
- (4, 'd', '2003-11-30 05:01:03'),
- (5, 'c', '2001-12-31 23:59:59');
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-UPDATE ta_l SET c = DATE_SUB(c, INTERVAL 1 YEAR);
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-UPDATE ta_l SET c = DATE_ADD(c, INTERVAL 1 QUARTER);
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-UPDATE ta_l SET c = DATE_SUB(c, INTERVAL 1 MONTH);
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-UPDATE ta_l SET c = DATE_ADD(c, INTERVAL 1 WEEK);
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-UPDATE ta_l SET c = DATE_SUB(c, INTERVAL 1 DAY);
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-UPDATE ta_l SET c = DATE_ADD(c, INTERVAL 1 HOUR);
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-UPDATE ta_l SET c = DATE_SUB(c, INTERVAL 1 MINUTE);
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-UPDATE ta_l SET c = DATE_ADD(c, INTERVAL 1 SECOND);
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%update %';
- }
- eval $CHILD2_1_SELECT_TABLES;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-
---echo
---echo deinit
---disable_warnings
---connection master_1
-DROP DATABASE IF EXISTS auto_test_local;
-if ($USE_CHILD_GROUP2)
-{
- --connection child2_1
- DROP DATABASE IF EXISTS auto_test_remote;
- --connection child2_2
- DROP DATABASE IF EXISTS auto_test_remote2;
-}
---disable_query_log
---disable_result_log
---source test_deinit.inc
---enable_result_log
---enable_query_log
---enable_warnings
---echo
---echo end of test
diff --git a/storage/spider/mysql-test/spider/handler/t/ha.test b/storage/spider/mysql-test/spider/handler/t/ha.test
deleted file mode 100644
index c36b7363a6d..00000000000
--- a/storage/spider/mysql-test/spider/handler/t/ha.test
+++ /dev/null
@@ -1,878 +0,0 @@
-# This test tests for ha features
-if ($USE_HA_TEST)
-{
---disable_warnings
---disable_query_log
---disable_result_log
---source test_init.inc
---source ha_test_init.inc
---enable_result_log
---enable_query_log
-
---echo
---echo drop and create databases
---connection master_1
-DROP DATABASE IF EXISTS auto_test_local;
-CREATE DATABASE auto_test_local;
-USE auto_test_local;
-if ($USE_CHILD_GROUP2)
-{
- --connection child2_1
- DROP DATABASE IF EXISTS auto_test_remote;
- CREATE DATABASE auto_test_remote;
- USE auto_test_remote;
- --connection child2_2
- DROP DATABASE IF EXISTS auto_test_remote2;
- CREATE DATABASE auto_test_remote2;
- USE auto_test_remote2;
- --connection child2_3
- DROP DATABASE IF EXISTS auto_test_remote3;
- CREATE DATABASE auto_test_remote3;
- USE auto_test_remote3;
-}
-if ($USE_CHILD_GROUP3)
-{
- --connection child3_1
- DROP DATABASE IF EXISTS auto_test_local;
- CREATE DATABASE auto_test_local;
- USE auto_test_local;
- --connection child3_2
- DROP DATABASE IF EXISTS auto_test_local;
- CREATE DATABASE auto_test_local;
- USE auto_test_local;
- --connection child3_3
- DROP DATABASE IF EXISTS auto_test_local;
- CREATE DATABASE auto_test_local;
- USE auto_test_local;
-}
---enable_warnings
-
---echo
---echo test select 1
---connection master_1
-SELECT 1;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- SELECT 1;
- --connection child2_2
- SELECT 1;
- --connection child2_3
- SELECT 1;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
-if ($USE_CHILD_GROUP3)
-{
- if (!$OUTPUT_CHILD_GROUP3)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child3_1
- SELECT 1;
- --connection child3_2
- SELECT 1;
- --connection child3_3
- SELECT 1;
- if (!$OUTPUT_CHILD_GROUP3)
- {
- --enable_query_log
- --enable_result_log
- }
-}
-
---echo
---echo create table test
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- echo CHILD2_1_DROP_TABLES;
- echo CHILD2_1_CREATE_TABLES;
- }
- --disable_warnings
- eval $CHILD2_1_DROP_TABLES;
- --enable_warnings
- eval $CHILD2_1_CREATE_TABLES;
- if ($OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- }
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- --connection child2_2
- if ($OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- echo CHILD2_2_DROP_TABLES;
- echo CHILD2_2_CREATE_TABLES;
- }
- --disable_warnings
- eval $CHILD2_2_DROP_TABLES;
- --enable_warnings
- eval $CHILD2_2_CREATE_TABLES;
- if ($OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- }
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
-if ($USE_CHILD_GROUP3)
-{
- if (!$OUTPUT_CHILD_GROUP3)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child3_1
- --disable_warnings
- eval $CHILD3_1_DROP_TABLES_HA_2_1;
- --enable_warnings
- eval $CHILD3_1_CREATE_TABLES_HA_2_1;
- --connection child3_2
- --disable_warnings
- eval $CHILD3_2_DROP_TABLES_HA_2_1;
- --enable_warnings
- eval $CHILD3_2_CREATE_TABLES_HA_2_1;
- --connection child3_3
- --disable_warnings
- eval $CHILD3_3_DROP_TABLES_HA_2_1;
- --enable_warnings
- eval $CHILD3_3_CREATE_TABLES_HA_2_1;
- if (!$OUTPUT_CHILD_GROUP3)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
---disable_warnings
-DROP TABLE IF EXISTS ta_l;
---enable_warnings
---disable_query_log
-echo CREATE TABLE ta_l (
- a INT,
- b CHAR(1),
- c DATETIME,
- PRIMARY KEY(a)
-) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_HA_2_1;
-eval CREATE TABLE ta_l (
- a INT,
- b CHAR(1),
- c DATETIME,
- PRIMARY KEY(a)
-) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_HA_2_1;
---enable_query_log
-INSERT INTO ta_l (a, b, c) VALUES
- (1, 'a', '2008-08-01 10:21:39'),
- (2, 'b', '2000-01-01 00:00:00'),
- (3, 'e', '2007-06-04 20:03:11'),
- (4, 'd', '2003-11-30 05:01:03'),
- (5, 'c', '2001-12-31 23:59:59');
-
---echo
---echo select test
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- --connection child2_2
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- }
- eval $CHILD2_1_SELECT_TABLES;
- --connection child2_2
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- }
- eval $CHILD2_2_SELECT_TABLES;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
-
---echo
---echo fail-over test
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- --connection child2_2
- if ($OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- echo CHILD2_2_HA_DROP_TABLES;
- }
- --disable_warnings
- eval $CHILD2_2_HA_DROP_TABLES;
- --enable_warnings
- if ($OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-eval $MASTER_1_CHECK_HA_STATUS;
---error 12511
-INSERT INTO ta_l (a, b, c) VALUES
- (6, 'e', '2011-05-05 20:04:05');
-eval $MASTER_1_CHECK_LINK_STATUS;
-eval $MASTER_1_CHECK_LINK_FAILED_LOG;
-eval $MASTER_1_CHECK_HA_STATUS;
-INSERT INTO ta_l (a, b, c) VALUES
- (6, 'e', '2011-05-05 20:04:05');
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- }
- eval $CHILD2_1_SELECT_TABLES;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
-if ($USE_CHILD_GROUP3)
-{
- if (!$OUTPUT_CHILD_GROUP3)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child3_1
- eval $CHILD3_1_CHECK_LINK_STATUS;
- eval $CHILD3_1_CHECK_LINK_FAILED_LOG;
- --connection child3_2
- eval $CHILD3_2_CHECK_LINK_STATUS;
- eval $CHILD3_2_CHECK_LINK_FAILED_LOG;
- --connection child3_3
- eval $CHILD3_3_CHECK_LINK_STATUS;
- eval $CHILD3_3_CHECK_LINK_FAILED_LOG;
- if (!$OUTPUT_CHILD_GROUP3)
- {
- --enable_query_log
- --enable_result_log
- }
-}
-
---echo
---echo recovery test
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- --connection child2_2
- if ($OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- echo CHILD2_2_HA_CREATE_TABLES;
- }
- eval $CHILD2_2_HA_CREATE_TABLES;
- if ($OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- }
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
-if ($USE_CHILD_GROUP3)
-{
- if (!$OUTPUT_CHILD_GROUP3)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child3_1
- eval $CHILD3_1_SET_RECOVERY_STATUS_2_1;
- eval $CHILD3_1_CHECK_LINK_STATUS;
- --connection child3_2
- eval $CHILD3_2_SET_RECOVERY_STATUS_2_1;
- eval $CHILD3_2_CHECK_LINK_STATUS;
- --connection child3_3
- eval $CHILD3_3_SET_RECOVERY_STATUS_2_1;
- eval $CHILD3_3_CHECK_LINK_STATUS;
- if (!$OUTPUT_CHILD_GROUP3)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-eval $MASTER_1_SET_RECOVERY_STATUS_2_1;
-eval $MASTER_1_CHECK_LINK_STATUS;
-eval $MASTER_1_COPY_TABLES_2_1;
-if ($USE_CHILD_GROUP3)
-{
- if (!$OUTPUT_CHILD_GROUP3)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child3_1
- eval $CHILD3_1_SET_OK_STATUS_2_1;
- eval $CHILD3_1_CHECK_LINK_STATUS;
- --connection child3_2
- eval $CHILD3_2_SET_OK_STATUS_2_1;
- eval $CHILD3_2_CHECK_LINK_STATUS;
- --connection child3_3
- eval $CHILD3_3_SET_OK_STATUS_2_1;
- eval $CHILD3_3_CHECK_LINK_STATUS;
- if (!$OUTPUT_CHILD_GROUP3)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-eval $MASTER_1_SET_OK_STATUS_2_1;
-eval $MASTER_1_CHECK_LINK_STATUS;
-INSERT INTO ta_l (a, b, c) VALUES
- (8, 'g', '2011-05-05 21:33:30');
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-DROP TABLE ta_l;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- }
- eval $CHILD2_1_SELECT_TABLES;
- --connection child2_2
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- }
- eval $CHILD2_2_SELECT_TABLES;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
-if ($USE_CHILD_GROUP3)
-{
- if (!$OUTPUT_CHILD_GROUP3)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child3_1
- --disable_warnings
- eval $CHILD3_1_DROP_TABLES_HA_2_1;
- --enable_warnings
- --connection child3_2
- --disable_warnings
- eval $CHILD3_2_DROP_TABLES_HA_2_1;
- --enable_warnings
- --connection child3_3
- --disable_warnings
- eval $CHILD3_3_DROP_TABLES_HA_2_1;
- --enable_warnings
- if (!$OUTPUT_CHILD_GROUP3)
- {
- --enable_query_log
- --enable_result_log
- }
-}
-
---connection master_1
-eval $MASTER_1_CHANGE_HA_MON;
-
---echo
---echo active standby test
---echo create table test
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- echo CHILD2_1_DROP_TABLES;
- echo CHILD2_1_CREATE_TABLES;
- }
- --disable_warnings
- eval $CHILD2_1_DROP_TABLES;
- --enable_warnings
- eval $CHILD2_1_CREATE_TABLES;
- if ($OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- }
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- --connection child2_2
- if ($OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- echo CHILD2_2_DROP_TABLES;
- echo CHILD2_2_CREATE_TABLES;
- }
- --disable_warnings
- eval $CHILD2_2_DROP_TABLES;
- --enable_warnings
- eval $CHILD2_2_CREATE_TABLES;
- if ($OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- }
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
-if ($USE_CHILD_GROUP3)
-{
- if (!$OUTPUT_CHILD_GROUP3)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child3_1
- --disable_warnings
- eval $CHILD3_1_DROP_TABLES_HA_2_1;
- --enable_warnings
- eval $CHILD3_1_CREATE_TABLES_HA_AS_2_1;
- --connection child3_2
- --disable_warnings
- eval $CHILD3_2_DROP_TABLES_HA_2_1;
- --enable_warnings
- eval $CHILD3_2_CREATE_TABLES_HA_AS_2_1;
- --connection child3_3
- --disable_warnings
- eval $CHILD3_3_DROP_TABLES_HA_2_1;
- --enable_warnings
- eval $CHILD3_3_CREATE_TABLES_HA_AS_2_1;
- if (!$OUTPUT_CHILD_GROUP3)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
---disable_warnings
-DROP TABLE IF EXISTS ta_l;
---enable_warnings
---disable_query_log
-echo CREATE TABLE ta_l (
- a INT,
- b CHAR(1),
- c DATETIME,
- PRIMARY KEY(a)
-) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_HA_AS_2_1;
-eval CREATE TABLE ta_l (
- a INT,
- b CHAR(1),
- c DATETIME,
- PRIMARY KEY(a)
-) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_HA_AS_2_1;
---enable_query_log
-INSERT INTO ta_l (a, b, c) VALUES
- (1, 'a', '2008-08-01 10:21:39'),
- (2, 'b', '2000-01-01 00:00:00'),
- (3, 'e', '2007-06-04 20:03:11'),
- (4, 'd', '2003-11-30 05:01:03'),
- (5, 'c', '2001-12-31 23:59:59');
-
---echo
---echo select test
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- --connection child2_2
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- }
- eval $CHILD2_1_SELECT_TABLES;
- --connection child2_2
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- }
- eval $CHILD2_2_SELECT_TABLES;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
-
---echo
---echo fail-over test
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- --connection child2_1
- if ($OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- echo CHILD2_1_HA_AS_DROP_TABLES;
- }
- --disable_warnings
- eval $CHILD2_1_HA_AS_DROP_TABLES;
- --enable_warnings
- if ($OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-eval $MASTER_1_CHECK_HA_STATUS;
---error 12511
-INSERT INTO ta_l (a, b, c) VALUES
- (6, 'e', '2011-05-05 20:04:05');
-eval $MASTER_1_CHECK_LINK_STATUS;
-eval $MASTER_1_CHECK_LINK_FAILED_LOG;
-eval $MASTER_1_CHECK_HA_STATUS;
-INSERT INTO ta_l (a, b, c) VALUES
- (6, 'e', '2011-05-05 20:04:05');
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_2
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- }
- eval $CHILD2_2_SELECT_TABLES;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
-if ($USE_CHILD_GROUP3)
-{
- if (!$OUTPUT_CHILD_GROUP3)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child3_1
- eval $CHILD3_1_CHECK_LINK_STATUS;
- eval $CHILD3_1_CHECK_LINK_FAILED_LOG;
- --connection child3_2
- eval $CHILD3_2_CHECK_LINK_STATUS;
- eval $CHILD3_2_CHECK_LINK_FAILED_LOG;
- --connection child3_3
- eval $CHILD3_3_CHECK_LINK_STATUS;
- eval $CHILD3_3_CHECK_LINK_FAILED_LOG;
- if (!$OUTPUT_CHILD_GROUP3)
- {
- --enable_query_log
- --enable_result_log
- }
-}
-
---echo
---echo recovery test
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- echo CHILD2_1_HA_AS_CREATE_TABLES;
- }
- eval $CHILD2_1_HA_AS_CREATE_TABLES;
- if ($OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- }
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- --connection child2_2
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
-if ($USE_CHILD_GROUP3)
-{
- if (!$OUTPUT_CHILD_GROUP3)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child3_1
- eval $CHILD3_1_SET_OK_STATUS_AS_2_1;
- eval $CHILD3_1_CHECK_LINK_STATUS;
- --connection child3_2
- eval $CHILD3_2_SET_OK_STATUS_AS_2_1;
- eval $CHILD3_2_CHECK_LINK_STATUS;
- --connection child3_3
- eval $CHILD3_3_SET_OK_STATUS_AS_2_1;
- eval $CHILD3_3_CHECK_LINK_STATUS;
- if (!$OUTPUT_CHILD_GROUP3)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-eval $MASTER_1_SET_OK_STATUS_AS_2_1;
-eval $MASTER_1_CHECK_LINK_STATUS;
-INSERT INTO ta_l (a, b, c) VALUES
- (8, 'g', '2011-05-05 21:33:30');
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-DROP TABLE ta_l;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- }
- eval $CHILD2_1_SELECT_TABLES;
- --connection child2_2
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- }
- eval $CHILD2_2_SELECT_TABLES;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
-if ($USE_CHILD_GROUP3)
-{
- if (!$OUTPUT_CHILD_GROUP3)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child3_1
- --disable_warnings
- eval $CHILD3_1_DROP_TABLES_HA_2_1;
- --enable_warnings
- --connection child3_2
- --disable_warnings
- eval $CHILD3_2_DROP_TABLES_HA_2_1;
- --enable_warnings
- --connection child3_3
- --disable_warnings
- eval $CHILD3_3_DROP_TABLES_HA_2_1;
- --enable_warnings
- if (!$OUTPUT_CHILD_GROUP3)
- {
- --enable_query_log
- --enable_result_log
- }
-}
-
---connection master_1
-eval $MASTER_1_CHANGE_HA_MON;
-
---echo
---echo deinit
---disable_warnings
---connection master_1
-DROP DATABASE IF EXISTS auto_test_local;
-if ($USE_CHILD_GROUP2)
-{
- --connection child2_1
- DROP DATABASE IF EXISTS auto_test_remote;
- --connection child2_2
- DROP DATABASE IF EXISTS auto_test_remote2;
- --connection child2_3
- DROP DATABASE IF EXISTS auto_test_remote3;
-}
-if ($USE_CHILD_GROUP3)
-{
- --connection child3_1
- DROP DATABASE IF EXISTS auto_test_local;
- --connection child3_2
- DROP DATABASE IF EXISTS auto_test_local;
- --connection child3_3
- DROP DATABASE IF EXISTS auto_test_local;
-}
---disable_query_log
---disable_result_log
---source ha_test_deinit.inc
---source test_deinit.inc
---enable_result_log
---enable_query_log
---enable_warnings
-}
---echo
---echo end of test
diff --git a/storage/spider/mysql-test/spider/handler/t/ha_part.test b/storage/spider/mysql-test/spider/handler/t/ha_part.test
deleted file mode 100644
index 33fe9850b68..00000000000
--- a/storage/spider/mysql-test/spider/handler/t/ha_part.test
+++ /dev/null
@@ -1,1017 +0,0 @@
-# This test tests for ha features
-if ($USE_HA_TEST)
-{
---disable_warnings
---disable_query_log
---disable_result_log
---source test_init.inc
---source ha_test_init.inc
---enable_result_log
---enable_query_log
-if (!$HAVE_PARTITION)
-{
- --disable_query_log
- --disable_result_log
- --source ha_test_deinit.inc
- --source test_deinit.inc
- --enable_result_log
- --enable_query_log
- --enable_warnings
- skip Test requires partitioning;
-}
-
---echo
---echo drop and create databases
---connection master_1
-DROP DATABASE IF EXISTS auto_test_local;
-CREATE DATABASE auto_test_local;
-USE auto_test_local;
-if ($USE_CHILD_GROUP2)
-{
- --connection child2_1
- DROP DATABASE IF EXISTS auto_test_remote;
- CREATE DATABASE auto_test_remote;
- USE auto_test_remote;
- --connection child2_2
- DROP DATABASE IF EXISTS auto_test_remote2;
- CREATE DATABASE auto_test_remote2;
- USE auto_test_remote2;
- --connection child2_3
- DROP DATABASE IF EXISTS auto_test_remote3;
- CREATE DATABASE auto_test_remote3;
- USE auto_test_remote3;
-}
-if ($USE_CHILD_GROUP3)
-{
- --connection child3_1
- DROP DATABASE IF EXISTS auto_test_local;
- CREATE DATABASE auto_test_local;
- USE auto_test_local;
- --connection child3_2
- DROP DATABASE IF EXISTS auto_test_local;
- CREATE DATABASE auto_test_local;
- USE auto_test_local;
- --connection child3_3
- DROP DATABASE IF EXISTS auto_test_local;
- CREATE DATABASE auto_test_local;
- USE auto_test_local;
-}
---enable_warnings
-
---echo
---echo test select 1
---connection master_1
-SELECT 1;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- SELECT 1;
- --connection child2_2
- SELECT 1;
- --connection child2_3
- SELECT 1;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
-if ($USE_CHILD_GROUP3)
-{
- if (!$OUTPUT_CHILD_GROUP3)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child3_1
- SELECT 1;
- --connection child3_2
- SELECT 1;
- --connection child3_3
- SELECT 1;
- if (!$OUTPUT_CHILD_GROUP3)
- {
- --enable_query_log
- --enable_result_log
- }
-}
-
-if ($HAVE_PARTITION)
-{
- --echo
- --echo create table with partition test
- if ($USE_CHILD_GROUP2)
- {
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- echo CHILD2_1_DROP_TABLES;
- echo CHILD2_1_DROP_TABLES2;
- echo CHILD2_1_CREATE_TABLES;
- echo CHILD2_1_CREATE_TABLES2;
- }
- --disable_warnings
- eval $CHILD2_1_DROP_TABLES;
- eval $CHILD2_1_DROP_TABLES2;
- --enable_warnings
- eval $CHILD2_1_CREATE_TABLES;
- eval $CHILD2_1_CREATE_TABLES2;
- if ($OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- }
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- --connection child2_2
- if ($OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- echo CHILD2_2_DROP_TABLES;
- echo CHILD2_2_CREATE_TABLES;
- }
- --disable_warnings
- eval $CHILD2_2_DROP_TABLES;
- --enable_warnings
- eval $CHILD2_2_CREATE_TABLES;
- if ($OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- }
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- --connection child2_3
- if ($OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- echo CHILD2_3_DROP_TABLES;
- echo CHILD2_3_CREATE_TABLES;
- }
- --disable_warnings
- eval $CHILD2_3_DROP_TABLES;
- --enable_warnings
- eval $CHILD2_3_CREATE_TABLES;
- if ($OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- }
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
- }
- if ($USE_CHILD_GROUP3)
- {
- if (!$OUTPUT_CHILD_GROUP3)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child3_1
- --disable_warnings
- eval $CHILD3_1_DROP_TABLES_HA_P_2_1;
- --enable_warnings
- eval $CHILD3_1_CREATE_TABLES_HA_P_2_1;
- --connection child3_2
- --disable_warnings
- eval $CHILD3_2_DROP_TABLES_HA_P_2_1;
- --enable_warnings
- eval $CHILD3_2_CREATE_TABLES_HA_P_2_1;
- --connection child3_3
- --disable_warnings
- eval $CHILD3_3_DROP_TABLES_HA_P_2_1;
- --enable_warnings
- eval $CHILD3_3_CREATE_TABLES_HA_P_2_1;
- if (!$OUTPUT_CHILD_GROUP3)
- {
- --enable_query_log
- --enable_result_log
- }
- }
- --connection master_1
- --disable_warnings
- DROP TABLE IF EXISTS ta_l2;
- --enable_warnings
- --disable_query_log
- echo CREATE TABLE ta_l2 (
- a INT,
- b CHAR(1),
- c DATETIME,
- PRIMARY KEY(a)
- ) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_HA_P_2_1;
- eval CREATE TABLE ta_l2 (
- a INT,
- b CHAR(1),
- c DATETIME,
- PRIMARY KEY(a)
- ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_HA_P_2_1;
- --enable_query_log
- INSERT INTO ta_l2 (a, b, c) VALUES
- (1, 'a', '2008-08-01 10:21:39'),
- (2, 'b', '2000-01-01 00:00:00'),
- (3, 'e', '2007-06-04 20:03:11'),
- (4, 'd', '2003-11-30 05:01:03'),
- (5, 'c', '2001-12-31 23:59:59');
-
- --echo
- --echo select test
- if ($USE_CHILD_GROUP2)
- {
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- --connection child2_2
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- --connection child2_3
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
- }
- --connection master_1
- SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a;
- if ($USE_CHILD_GROUP2)
- {
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- }
- eval $CHILD2_1_SELECT_TABLES;
- eval $CHILD2_1_SELECT_TABLES2;
- --connection child2_2
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- }
- eval $CHILD2_2_SELECT_TABLES;
- --connection child2_3
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- }
- eval $CHILD2_3_SELECT_TABLES;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
- }
-
- --echo
- --echo fail-over test
- if ($USE_CHILD_GROUP2)
- {
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- --connection child2_2
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- --connection child2_3
- if ($OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- echo CHILD2_3_HA_DROP_TABLES;
- }
- --disable_warnings
- eval $CHILD2_3_HA_DROP_TABLES;
- --enable_warnings
- if ($OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
- }
- --connection master_1
- eval $MASTER_1_CHECK_HA_STATUS;
- --error 12511
- INSERT INTO ta_l2 (a, b, c) VALUES
- (6, 'e', '2011-05-05 20:04:05');
- eval $MASTER_1_CHECK_LINK_STATUS;
- eval $MASTER_1_CHECK_LINK_FAILED_LOG;
- eval $MASTER_1_CHECK_HA_STATUS;
- INSERT INTO ta_l2 (a, b, c) VALUES
- (6, 'e', '2011-05-05 20:04:05');
- SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a;
- if ($USE_CHILD_GROUP2)
- {
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- }
- eval $CHILD2_1_SELECT_TABLES;
- eval $CHILD2_1_SELECT_TABLES2;
- --connection child2_2
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- }
- eval $CHILD2_2_SELECT_TABLES;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
- }
- if ($USE_CHILD_GROUP3)
- {
- if (!$OUTPUT_CHILD_GROUP3)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child3_1
- eval $CHILD3_1_CHECK_LINK_STATUS;
- eval $CHILD3_1_CHECK_LINK_FAILED_LOG;
- --connection child3_2
- eval $CHILD3_2_CHECK_LINK_STATUS;
- eval $CHILD3_2_CHECK_LINK_FAILED_LOG;
- --connection child3_3
- eval $CHILD3_3_CHECK_LINK_STATUS;
- eval $CHILD3_3_CHECK_LINK_FAILED_LOG;
- if (!$OUTPUT_CHILD_GROUP3)
- {
- --enable_query_log
- --enable_result_log
- }
- }
-
- --echo
- --echo recovery test
- if ($USE_CHILD_GROUP2)
- {
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- --connection child2_2
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- --connection child2_3
- if ($OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- echo CHILD2_3_HA_CREATE_TABLES;
- }
- eval $CHILD2_3_HA_CREATE_TABLES;
- if ($OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- }
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
- }
- if ($USE_CHILD_GROUP3)
- {
- if (!$OUTPUT_CHILD_GROUP3)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child3_1
- eval $CHILD3_1_SET_RECOVERY_STATUS_P_2_1;
- eval $CHILD3_1_CHECK_LINK_STATUS;
- --connection child3_2
- eval $CHILD3_2_SET_RECOVERY_STATUS_P_2_1;
- eval $CHILD3_2_CHECK_LINK_STATUS;
- --connection child3_3
- eval $CHILD3_3_SET_RECOVERY_STATUS_P_2_1;
- eval $CHILD3_3_CHECK_LINK_STATUS;
- if (!$OUTPUT_CHILD_GROUP3)
- {
- --enable_query_log
- --enable_result_log
- }
- }
- --connection master_1
- eval $MASTER_1_SET_RECOVERY_STATUS_P_2_1;
- eval $MASTER_1_CHECK_LINK_STATUS;
- eval $MASTER_1_COPY_TABLES_P_2_1;
- if ($USE_CHILD_GROUP3)
- {
- if (!$OUTPUT_CHILD_GROUP3)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child3_1
- eval $CHILD3_1_SET_OK_STATUS_P_2_1;
- eval $CHILD3_1_CHECK_LINK_STATUS;
- --connection child3_2
- eval $CHILD3_2_SET_OK_STATUS_P_2_1;
- eval $CHILD3_2_CHECK_LINK_STATUS;
- --connection child3_3
- eval $CHILD3_3_SET_OK_STATUS_P_2_1;
- eval $CHILD3_3_CHECK_LINK_STATUS;
- if (!$OUTPUT_CHILD_GROUP3)
- {
- --enable_query_log
- --enable_result_log
- }
- }
- --connection master_1
- eval $MASTER_1_SET_OK_STATUS_P_2_1;
- eval $MASTER_1_CHECK_LINK_STATUS;
- INSERT INTO ta_l2 (a, b, c) VALUES
- (8, 'g', '2011-05-05 21:33:30'),
- (9, 'h', '2011-05-05 22:32:10');
- SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a;
- DROP TABLE ta_l2;
- if ($USE_CHILD_GROUP2)
- {
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- }
- eval $CHILD2_1_SELECT_TABLES;
- eval $CHILD2_1_SELECT_TABLES2;
- --connection child2_2
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- }
- eval $CHILD2_2_SELECT_TABLES;
- --connection child2_3
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- }
- eval $CHILD2_3_SELECT_TABLES;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
- }
- if ($USE_CHILD_GROUP3)
- {
- if (!$OUTPUT_CHILD_GROUP3)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child3_1
- --disable_warnings
- eval $CHILD3_1_DROP_TABLES_HA_P_2_1;
- --enable_warnings
- --connection child3_2
- --disable_warnings
- eval $CHILD3_2_DROP_TABLES_HA_P_2_1;
- --enable_warnings
- --connection child3_3
- --disable_warnings
- eval $CHILD3_3_DROP_TABLES_HA_P_2_1;
- --enable_warnings
- if (!$OUTPUT_CHILD_GROUP3)
- {
- --enable_query_log
- --enable_result_log
- }
- }
-}
-
-if ($HAVE_PARTITION)
-{
- --echo
- --echo create table with partition test
- if ($USE_CHILD_GROUP2)
- {
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- echo CHILD2_1_DROP_TABLES;
- echo CHILD2_1_DROP_TABLES2;
- echo CHILD2_1_CREATE_TABLES;
- echo CHILD2_1_CREATE_TABLES2;
- }
- --disable_warnings
- eval $CHILD2_1_DROP_TABLES;
- eval $CHILD2_1_DROP_TABLES2;
- --enable_warnings
- eval $CHILD2_1_CREATE_TABLES;
- eval $CHILD2_1_CREATE_TABLES2;
- if ($OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- }
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- --connection child2_2
- if ($OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- echo CHILD2_2_DROP_TABLES;
- echo CHILD2_2_CREATE_TABLES;
- }
- --disable_warnings
- eval $CHILD2_2_DROP_TABLES;
- --enable_warnings
- eval $CHILD2_2_CREATE_TABLES;
- if ($OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- }
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- --connection child2_3
- if ($OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- echo CHILD2_3_DROP_TABLES;
- echo CHILD2_3_CREATE_TABLES;
- }
- --disable_warnings
- eval $CHILD2_3_DROP_TABLES;
- --enable_warnings
- eval $CHILD2_3_CREATE_TABLES;
- if ($OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- }
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
- }
- if ($USE_CHILD_GROUP3)
- {
- if (!$OUTPUT_CHILD_GROUP3)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child3_1
- --disable_warnings
- eval $CHILD3_1_DROP_TABLES_HA_P_2_1;
- --enable_warnings
- eval $CHILD3_1_CREATE_TABLES_HA_AS_P_2_1;
- --connection child3_2
- --disable_warnings
- eval $CHILD3_2_DROP_TABLES_HA_P_2_1;
- --enable_warnings
- eval $CHILD3_2_CREATE_TABLES_HA_AS_P_2_1;
- --connection child3_3
- --disable_warnings
- eval $CHILD3_3_DROP_TABLES_HA_P_2_1;
- --enable_warnings
- eval $CHILD3_3_CREATE_TABLES_HA_AS_P_2_1;
- if (!$OUTPUT_CHILD_GROUP3)
- {
- --enable_query_log
- --enable_result_log
- }
- }
- --connection master_1
- --disable_warnings
- DROP TABLE IF EXISTS ta_l2;
- --enable_warnings
- --disable_query_log
- echo CREATE TABLE ta_l2 (
- a INT,
- b CHAR(1),
- c DATETIME,
- PRIMARY KEY(a)
- ) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_HA_AS_P_2_1;
- eval CREATE TABLE ta_l2 (
- a INT,
- b CHAR(1),
- c DATETIME,
- PRIMARY KEY(a)
- ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_HA_AS_P_2_1;
- --enable_query_log
- INSERT INTO ta_l2 (a, b, c) VALUES
- (1, 'a', '2008-08-01 10:21:39'),
- (2, 'b', '2000-01-01 00:00:00'),
- (3, 'e', '2007-06-04 20:03:11'),
- (4, 'd', '2003-11-30 05:01:03'),
- (5, 'c', '2001-12-31 23:59:59');
-
- --echo
- --echo select test
- if ($USE_CHILD_GROUP2)
- {
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- --connection child2_2
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- --connection child2_3
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
- }
- --connection master_1
- SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a;
- if ($USE_CHILD_GROUP2)
- {
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- }
- eval $CHILD2_1_SELECT_TABLES;
- eval $CHILD2_1_SELECT_TABLES2;
- --connection child2_2
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- }
- eval $CHILD2_2_SELECT_TABLES;
- --connection child2_3
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- }
- eval $CHILD2_3_SELECT_TABLES;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
- }
-
- --echo
- --echo fail-over test
- if ($USE_CHILD_GROUP2)
- {
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- echo CHILD2_1_HA_AS_DROP_TABLES2;
- }
- --disable_warnings
- eval $CHILD2_1_HA_AS_DROP_TABLES2;
- --enable_warnings
- if ($OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- }
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- --connection child2_2
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- --connection child2_3
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
- }
- --connection master_1
- eval $MASTER_1_CHECK_HA_STATUS;
- --error 12511
- INSERT INTO ta_l2 (a, b, c) VALUES
- (6, 'e', '2011-05-05 20:04:05');
- eval $MASTER_1_CHECK_LINK_STATUS;
- eval $MASTER_1_CHECK_LINK_FAILED_LOG;
- eval $MASTER_1_CHECK_HA_STATUS;
- INSERT INTO ta_l2 (a, b, c) VALUES
- (6, 'e', '2011-05-05 20:04:05');
- SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a;
- if ($USE_CHILD_GROUP2)
- {
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- }
- eval $CHILD2_1_SELECT_TABLES;
- --connection child2_2
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- }
- eval $CHILD2_2_SELECT_TABLES;
- --connection child2_3
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- }
- eval $CHILD2_3_SELECT_TABLES;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
- }
- if ($USE_CHILD_GROUP3)
- {
- if (!$OUTPUT_CHILD_GROUP3)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child3_1
- eval $CHILD3_1_CHECK_LINK_STATUS;
- eval $CHILD3_1_CHECK_LINK_FAILED_LOG;
- --connection child3_2
- eval $CHILD3_2_CHECK_LINK_STATUS;
- eval $CHILD3_2_CHECK_LINK_FAILED_LOG;
- --connection child3_3
- eval $CHILD3_3_CHECK_LINK_STATUS;
- eval $CHILD3_3_CHECK_LINK_FAILED_LOG;
- if (!$OUTPUT_CHILD_GROUP3)
- {
- --enable_query_log
- --enable_result_log
- }
- }
-
- --echo
- --echo recovery test
- if ($USE_CHILD_GROUP2)
- {
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- echo CHILD2_1_HA_AS_CREATE_TABLES2;
- }
- eval $CHILD2_1_HA_AS_CREATE_TABLES2;
- if ($OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- }
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- --connection child2_2
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- --connection child2_3
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
- }
- if ($USE_CHILD_GROUP3)
- {
- if (!$OUTPUT_CHILD_GROUP3)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child3_1
- eval $CHILD3_1_SET_OK_STATUS_AS_P_2_1;
- eval $CHILD3_1_CHECK_LINK_STATUS;
- --connection child3_2
- eval $CHILD3_2_SET_OK_STATUS_AS_P_2_1;
- eval $CHILD3_2_CHECK_LINK_STATUS;
- --connection child3_3
- eval $CHILD3_3_SET_OK_STATUS_AS_P_2_1;
- eval $CHILD3_3_CHECK_LINK_STATUS;
- if (!$OUTPUT_CHILD_GROUP3)
- {
- --enable_query_log
- --enable_result_log
- }
- }
- --connection master_1
- eval $MASTER_1_SET_OK_STATUS_AS_P_2_1;
- eval $MASTER_1_CHECK_LINK_STATUS;
- INSERT INTO ta_l2 (a, b, c) VALUES
- (8, 'g', '2011-05-05 21:33:30'),
- (9, 'h', '2011-05-05 22:32:10');
- SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 ORDER BY a;
- DROP TABLE ta_l2;
- if ($USE_CHILD_GROUP2)
- {
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- }
- eval $CHILD2_1_SELECT_TABLES;
- eval $CHILD2_1_SELECT_TABLES2;
- --connection child2_2
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- }
- eval $CHILD2_2_SELECT_TABLES;
- --connection child2_3
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- }
- eval $CHILD2_3_SELECT_TABLES;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
- }
- if ($USE_CHILD_GROUP3)
- {
- if (!$OUTPUT_CHILD_GROUP3)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child3_1
- --disable_warnings
- eval $CHILD3_1_DROP_TABLES_HA_P_2_1;
- --enable_warnings
- --connection child3_2
- --disable_warnings
- eval $CHILD3_2_DROP_TABLES_HA_P_2_1;
- --enable_warnings
- --connection child3_3
- --disable_warnings
- eval $CHILD3_3_DROP_TABLES_HA_P_2_1;
- --enable_warnings
- if (!$OUTPUT_CHILD_GROUP3)
- {
- --enable_query_log
- --enable_result_log
- }
- }
-}
-
---echo
---echo deinit
---disable_warnings
---connection master_1
-DROP DATABASE IF EXISTS auto_test_local;
-if ($USE_CHILD_GROUP2)
-{
- --connection child2_1
- DROP DATABASE IF EXISTS auto_test_remote;
- --connection child2_2
- DROP DATABASE IF EXISTS auto_test_remote2;
- --connection child2_3
- DROP DATABASE IF EXISTS auto_test_remote3;
-}
-if ($USE_CHILD_GROUP3)
-{
- --connection child3_1
- DROP DATABASE IF EXISTS auto_test_local;
- --connection child3_2
- DROP DATABASE IF EXISTS auto_test_local;
- --connection child3_3
- DROP DATABASE IF EXISTS auto_test_local;
-}
---disable_query_log
---disable_result_log
---source ha_test_deinit.inc
---source test_deinit.inc
---enable_result_log
---enable_query_log
---enable_warnings
-}
---echo
---echo end of test
diff --git a/storage/spider/mysql-test/spider/handler/t/ha_test_deinit.inc b/storage/spider/mysql-test/spider/handler/t/ha_test_deinit.inc
deleted file mode 100644
index 53d0409d066..00000000000
--- a/storage/spider/mysql-test/spider/handler/t/ha_test_deinit.inc
+++ /dev/null
@@ -1,30 +0,0 @@
-# get connection and exist engine test
---echo for master_1
---connection master_1
---source ../include/ha_deinit_master_1.inc
---echo for child2
-if ($USE_CHILD_GROUP2)
-{
- --echo child2_1
- --connection child2_1
- --source ../include/ha_deinit_child2_1.inc
- --echo child2_2
- --connection child2_2
- --source ../include/ha_deinit_child2_2.inc
- --echo child2_3
- --connection child2_3
- --source ../include/ha_deinit_child2_3.inc
-}
---echo for child3
-if ($USE_CHILD_GROUP3)
-{
- --echo child3_1
- --connection child3_1
- --source ../include/ha_deinit_child3_1.inc
- --echo child3_2
- --connection child3_2
- --source ../include/ha_deinit_child3_2.inc
- --echo child3_3
- --connection child3_3
- --source ../include/ha_deinit_child3_3.inc
-}
diff --git a/storage/spider/mysql-test/spider/handler/t/ha_test_init.inc b/storage/spider/mysql-test/spider/handler/t/ha_test_init.inc
deleted file mode 100644
index 70576ab16dc..00000000000
--- a/storage/spider/mysql-test/spider/handler/t/ha_test_init.inc
+++ /dev/null
@@ -1,30 +0,0 @@
-# get connection and exist engine test
---echo for master_1
---connection master_1
---source ../include/ha_init_master_1.inc
---echo for child2
-if ($USE_CHILD_GROUP2)
-{
- --echo child2_1
- --connection child2_1
- --source ../include/ha_init_child2_1.inc
- --echo child2_2
- --connection child2_2
- --source ../include/ha_init_child2_2.inc
- --echo child2_3
- --connection child2_3
- --source ../include/ha_init_child2_3.inc
-}
---echo for child3
-if ($USE_CHILD_GROUP3)
-{
- --echo child3_1
- --connection child3_1
- --source ../include/ha_init_child3_1.inc
- --echo child3_2
- --connection child3_2
- --source ../include/ha_init_child3_2.inc
- --echo child3_3
- --connection child3_3
- --source ../include/ha_init_child3_3.inc
-}
diff --git a/storage/spider/mysql-test/spider/handler/t/have_engine.inc b/storage/spider/mysql-test/spider/handler/t/have_engine.inc
deleted file mode 100644
index 64bef7499cb..00000000000
--- a/storage/spider/mysql-test/spider/handler/t/have_engine.inc
+++ /dev/null
@@ -1,7 +0,0 @@
-if (!`SELECT count(*) FROM information_schema.engines WHERE
- (support = 'YES' OR support = 'DEFAULT') AND
- engine = '$TEST_ENGINE_TYPE'`)
-{
- SELECT engine, support FROM information_schema.engines;
- --let $SKIP_REASON= "Need $TEST_ENGINE_TYPE engine"
-}
diff --git a/storage/spider/mysql-test/spider/handler/t/have_func.inc b/storage/spider/mysql-test/spider/handler/t/have_func.inc
deleted file mode 100644
index e0823e73fc8..00000000000
--- a/storage/spider/mysql-test/spider/handler/t/have_func.inc
+++ /dev/null
@@ -1,5 +0,0 @@
-if (!`SELECT count(*) FROM mysql.func WHERE name = '$TEST_FUNC_NAME'`)
-{
- SELECT name FROM mysql.func;
- --let $SKIP_REASON= "Need $TEST_FUNC_NAME function"
-}
diff --git a/storage/spider/mysql-test/spider/handler/t/have_partition.inc b/storage/spider/mysql-test/spider/handler/t/have_partition.inc
deleted file mode 100644
index b6e699475db..00000000000
--- a/storage/spider/mysql-test/spider/handler/t/have_partition.inc
+++ /dev/null
@@ -1,7 +0,0 @@
-let $HAVE_PARTITION= 0;
-if (`SELECT count(*) FROM information_schema.plugins WHERE
- plugin_status = 'ACTIVE' AND
- plugin_name = 'partition'`)
-{
- let $HAVE_PARTITION= 1;
-}
diff --git a/storage/spider/mysql-test/spider/handler/t/have_trigger.inc b/storage/spider/mysql-test/spider/handler/t/have_trigger.inc
deleted file mode 100644
index 32de484b388..00000000000
--- a/storage/spider/mysql-test/spider/handler/t/have_trigger.inc
+++ /dev/null
@@ -1,2 +0,0 @@
-let $HAVE_TRIGGER= `SELECT COUNT(*) FROM information_schema.tables
- WHERE TABLE_SCHEMA = 'information_schema' AND TABLE_NAME = 'TRIGGERS'`;
diff --git a/storage/spider/mysql-test/spider/handler/t/hs_test_deinit.inc b/storage/spider/mysql-test/spider/handler/t/hs_test_deinit.inc
deleted file mode 100644
index 7ec2e981fd2..00000000000
--- a/storage/spider/mysql-test/spider/handler/t/hs_test_deinit.inc
+++ /dev/null
@@ -1,17 +0,0 @@
-# get connection and exist engine test
---echo for master_1
---connection master_1
---source ../include/hs_deinit_master_1.inc
---echo for child2
-if ($USE_CHILD_GROUP2)
-{
- --echo child2_1
- --connection child2_1
- --source ../include/hs_deinit_child2_1.inc
- --echo child2_2
- --connection child2_2
- --source ../include/hs_deinit_child2_2.inc
- --echo child2_3
- --connection child2_3
- --source ../include/hs_deinit_child2_3.inc
-}
diff --git a/storage/spider/mysql-test/spider/handler/t/hs_test_init.inc b/storage/spider/mysql-test/spider/handler/t/hs_test_init.inc
deleted file mode 100644
index 831bf479524..00000000000
--- a/storage/spider/mysql-test/spider/handler/t/hs_test_init.inc
+++ /dev/null
@@ -1,17 +0,0 @@
-# get connection and exist engine test
---echo for master_1
---connection master_1
---source ../include/hs_init_master_1.inc
---echo for child2
-if ($USE_CHILD_GROUP2)
-{
- --echo child2_1
- --connection child2_1
- --source ../include/hs_init_child2_1.inc
- --echo child2_2
- --connection child2_2
- --source ../include/hs_init_child2_2.inc
- --echo child2_3
- --connection child2_3
- --source ../include/hs_init_child2_3.inc
-}
diff --git a/storage/spider/mysql-test/spider/handler/t/slave_test_deinit.inc b/storage/spider/mysql-test/spider/handler/t/slave_test_deinit.inc
deleted file mode 100644
index e9d99b7a960..00000000000
--- a/storage/spider/mysql-test/spider/handler/t/slave_test_deinit.inc
+++ /dev/null
@@ -1,6 +0,0 @@
-# get connection and exist engine test
---echo for slave1_1
---connection slave1_1
-STOP SLAVE;
---source ../include/deinit_slave1_1.inc
---disconnect slave1_1
diff --git a/storage/spider/mysql-test/spider/handler/t/slave_test_init.inc b/storage/spider/mysql-test/spider/handler/t/slave_test_init.inc
deleted file mode 100644
index 739d88970c5..00000000000
--- a/storage/spider/mysql-test/spider/handler/t/slave_test_init.inc
+++ /dev/null
@@ -1,44 +0,0 @@
-# get connection and exist engine test
---echo for slave1_1
---source connect_slave1_1.inc
---connection slave1_1
-SET SESSION sql_log_bin= 0;
---let $SLAVE1_1_SERVER_ID=`SELECT @@global.server_id`
---let $TEST_ENGINE_TYPE= $SLAVE1_1_ENGINE_TYPE
---source have_partition.inc
---source have_trigger.inc
---source ../include/init_slave1_1.inc
---source have_engine.inc
---let $SLAVE1_1_SLAVE_STATUS=`SHOW SLAVE STATUS`
-if (!$SLAVE1_1_SLAVE_STATUS)
-{
- eval CHANGE MASTER TO
- MASTER_HOST = '127.0.0.1',
- MASTER_USER = 'root',
- MASTER_PASSWORD = '',
- MASTER_PORT = $MASTER_1_MYPORT
- ;
-}
-START SLAVE;
---connection master_1
-call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT");
---connection slave1_1
-call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT");
-if ($USE_CHILD_GROUP2)
-{
- --connection child2_1
- call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT");
- --connection child2_2
- call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT");
- --connection child2_3
- call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT");
-}
-if ($USE_CHILD_GROUP3)
-{
- --connection child3_1
- call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT");
- --connection child3_2
- call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT");
- --connection child3_3
- call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT");
-}
diff --git a/storage/spider/mysql-test/spider/handler/t/spider3_fixes.test b/storage/spider/mysql-test/spider/handler/t/spider3_fixes.test
deleted file mode 100644
index 30d22a6a16f..00000000000
--- a/storage/spider/mysql-test/spider/handler/t/spider3_fixes.test
+++ /dev/null
@@ -1,297 +0,0 @@
-# This test tests for Spider 3.0's bug fixes
-source include/have_log_bin.inc;
---disable_warnings
---disable_query_log
---disable_result_log
---source test_init.inc
---source slave_test_init.inc
---enable_result_log
---enable_query_log
-
---echo
---echo drop and create databases
---connection master_1
-DROP DATABASE IF EXISTS auto_test_local;
-CREATE DATABASE auto_test_local;
-USE auto_test_local;
-if ($USE_REPLICATION)
-{
- --connection slave1_1
- DROP DATABASE IF EXISTS auto_test_local;
- CREATE DATABASE auto_test_local;
- USE auto_test_local;
-}
-if ($USE_CHILD_GROUP2)
-{
- --connection child2_1
- DROP DATABASE IF EXISTS auto_test_remote;
- CREATE DATABASE auto_test_remote;
- USE auto_test_remote;
- --connection child2_2
- DROP DATABASE IF EXISTS auto_test_remote2;
- CREATE DATABASE auto_test_remote2;
- USE auto_test_remote2;
-}
---enable_warnings
-
---echo
---echo test select 1
---connection master_1
-SELECT 1;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- SELECT 1;
- --connection child2_2
- SELECT 1;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
-
-
---echo
---echo 3.1
---echo auto_increment
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- echo CHILD2_1_DROP_INCREMENT_TABLES1;
- echo CHILD2_1_CREATE_INCREMENT_TABLES1;
- echo CHILD2_1_AUTO_INCREMENT_INCREMENT2;
- echo CHILD2_1_AUTO_INCREMENT_OFFSET2;
- }
- --disable_warnings
- eval $CHILD2_1_DROP_INCREMENT_TABLES1;
- --enable_warnings
- eval $CHILD2_1_CREATE_INCREMENT_TABLES1;
- eval $CHILD2_1_AUTO_INCREMENT_INCREMENT2;
- eval $CHILD2_1_AUTO_INCREMENT_OFFSET2;
- if ($OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- }
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SET @original_spider_auto_increment_mode = @@SESSION.spider_auto_increment_mode;
-SET SESSION spider_auto_increment_mode = -1;
-if ($USE_REPLICATION)
-{
- save_master_pos;
- --connection slave1_1
- sync_with_master;
- --connection master_1
- --disable_query_log
- SET SESSION sql_log_bin= 0;
- --enable_query_log
-}
---disable_warnings
-DROP TABLE IF EXISTS t1, t2;
---enable_warnings
---disable_query_log
-echo CREATE TABLE t1 (
- id int(11) NOT NULL AUTO_INCREMENT,
- PRIMARY KEY (id)
-) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_INCREMENT1_1;
-echo CREATE TABLE t2 (
- id int(11) NOT NULL AUTO_INCREMENT,
- PRIMARY KEY (id)
-) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_INCREMENT1_1;
-echo MASTER_1_AUTO_INCREMENT_INCREMENT2;
-echo MASTER_1_AUTO_INCREMENT_OFFSET2;
-eval CREATE TABLE t1 (
- id int(11) NOT NULL AUTO_INCREMENT,
- PRIMARY KEY (id)
-) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_INCREMENT1_1;
-eval CREATE TABLE t2 (
- id int(11) NOT NULL AUTO_INCREMENT,
- PRIMARY KEY (id)
-) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_INCREMENT1_1;
---disable_ps_protocol
-eval $MASTER_1_AUTO_INCREMENT_INCREMENT2;
-eval $MASTER_1_AUTO_INCREMENT_OFFSET2;
---enable_ps_protocol
-if ($USE_REPLICATION)
-{
- SET SESSION sql_log_bin= 1;
- --connection slave1_1
- --disable_warnings
- DROP TABLE IF EXISTS t1, t2;
- --enable_warnings
- echo CREATE TABLE t1 (
- id int(11) NOT NULL AUTO_INCREMENT,
- PRIMARY KEY (id)
- ) SLAVE1_1_ENGINE SLAVE1_1_CHARSET SLAVE1_1_COMMENT_INCREMENT1_1;
- echo CREATE TABLE t2 (
- id int(11) NOT NULL AUTO_INCREMENT,
- PRIMARY KEY (id)
- ) SLAVE1_1_ENGINE SLAVE1_1_CHARSET SLAVE1_1_COMMENT_INCREMENT1_1;
- eval CREATE TABLE t1 (
- id int(11) NOT NULL AUTO_INCREMENT,
- PRIMARY KEY (id)
- ) $SLAVE1_1_ENGINE $SLAVE1_1_CHARSET $SLAVE1_1_COMMENT_INCREMENT1_1;
- eval CREATE TABLE t2 (
- id int(11) NOT NULL AUTO_INCREMENT,
- PRIMARY KEY (id)
- ) $SLAVE1_1_ENGINE $SLAVE1_1_CHARSET $SLAVE1_1_COMMENT_INCREMENT1_1;
- --connection master_1
-}
---enable_query_log
-INSERT INTO t1 () VALUES ();
-SELECT LAST_INSERT_ID();
-SELECT MAX(id) FROM t1;
-INSERT INTO t2 () VALUES ();
-SELECT LAST_INSERT_ID();
-SELECT MAX(id) FROM t2;
---disable_query_log
-echo MASTER_1_AUTO_INCREMENT_OFFSET3;
-eval $MASTER_1_AUTO_INCREMENT_OFFSET3;
---enable_query_log
-INSERT INTO t1 (id) VALUES (null);
-SELECT LAST_INSERT_ID();
-SELECT MAX(id) FROM t1;
---disable_query_log
-echo MASTER_1_AUTO_INCREMENT_OFFSET4;
-eval $MASTER_1_AUTO_INCREMENT_OFFSET4;
---enable_query_log
-INSERT INTO t2 (id) VALUES (null);
-SELECT LAST_INSERT_ID();
-SELECT MAX(id) FROM t2;
---disable_query_log
-echo MASTER_1_AUTO_INCREMENT_OFFSET3;
-eval $MASTER_1_AUTO_INCREMENT_OFFSET3;
---enable_query_log
-INSERT INTO t1 () VALUES (),(),(),();
-SELECT LAST_INSERT_ID();
-SELECT id FROM t1 ORDER BY id;
---disable_query_log
-echo MASTER_1_AUTO_INCREMENT_OFFSET4;
-eval $MASTER_1_AUTO_INCREMENT_OFFSET4;
---enable_query_log
-INSERT INTO t2 () VALUES (),(),(),();
-SELECT LAST_INSERT_ID();
-SELECT id FROM t2 ORDER BY id;
-TRUNCATE TABLE t1;
-TRUNCATE TABLE t2;
-INSERT INTO t1 () VALUES (),(),(),();
-SELECT LAST_INSERT_ID();
-SELECT id FROM t1 ORDER BY id;
-INSERT INTO t2 () VALUES (),(),(),();
-SELECT LAST_INSERT_ID();
-SELECT id FROM t2 ORDER BY id;
-SET INSERT_ID=5000;
---disable_query_log
-echo MASTER_1_AUTO_INCREMENT_OFFSET3;
-eval $MASTER_1_AUTO_INCREMENT_OFFSET3;
---enable_query_log
-INSERT INTO t1 () VALUES ();
-SELECT LAST_INSERT_ID();
-SELECT MAX(id) FROM t1;
---disable_query_log
-echo MASTER_1_AUTO_INCREMENT_OFFSET4;
-eval $MASTER_1_AUTO_INCREMENT_OFFSET4;
---enable_query_log
-INSERT INTO t2 () VALUES ();
-SELECT LAST_INSERT_ID();
-SELECT MAX(id) FROM t2;
-INSERT INTO t1 (id) VALUES (10000);
-SELECT LAST_INSERT_ID();
-SELECT MAX(id) FROM t1;
-INSERT INTO t2 (id) VALUES (1000);
-SELECT LAST_INSERT_ID();
-SELECT MAX(id) FROM t2;
-SET SESSION spider_auto_increment_mode = @original_spider_auto_increment_mode;
-if ($USE_REPLICATION)
-{
- save_master_pos;
- --connection slave1_1
- sync_with_master;
- SELECT id FROM t1 ORDER BY id;
- --connection master_1
- --disable_query_log
- SET SESSION sql_log_bin= 0;
- --enable_query_log
-}
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%insert %';
- }
- eval $CHILD2_1_SELECT_INCREMENT_TABLES1;
- if ($OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- echo CHILD2_1_AUTO_INCREMENT_INCREMENT1;
- echo CHILD2_1_AUTO_INCREMENT_OFFSET1;
- }
- eval $CHILD2_1_AUTO_INCREMENT_INCREMENT1;
- eval $CHILD2_1_AUTO_INCREMENT_OFFSET1;
- if ($OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
-
-
---echo
---echo deinit
---disable_warnings
---connection master_1
-DROP DATABASE IF EXISTS auto_test_local;
-if ($USE_REPLICATION)
-{
- --connection slave1_1
- DROP DATABASE IF EXISTS auto_test_local;
-}
-if ($USE_CHILD_GROUP2)
-{
- --connection child2_1
- DROP DATABASE IF EXISTS auto_test_remote;
- --connection child2_2
- DROP DATABASE IF EXISTS auto_test_remote2;
-}
---disable_query_log
---disable_result_log
---source slave_test_deinit.inc
---source test_deinit.inc
---enable_result_log
---enable_query_log
---enable_warnings
---echo
---echo end of test
diff --git a/storage/spider/mysql-test/spider/handler/t/spider3_fixes_part.test b/storage/spider/mysql-test/spider/handler/t/spider3_fixes_part.test
deleted file mode 100644
index e9c9c194e5c..00000000000
--- a/storage/spider/mysql-test/spider/handler/t/spider3_fixes_part.test
+++ /dev/null
@@ -1,350 +0,0 @@
-# This test tests for Spider 3.0's bug fixes
-source include/have_log_bin.inc;
---disable_warnings
---disable_query_log
---disable_result_log
---source test_init.inc
---source slave_test_init.inc
---enable_result_log
---enable_query_log
-if (!$HAVE_PARTITION)
-{
- --disable_query_log
- --disable_result_log
- --source slave_test_deinit.inc
- --source test_deinit.inc
- --enable_result_log
- --enable_query_log
- --enable_warnings
- skip Test requires partitioning;
-}
-
---echo
---echo drop and create databases
---connection master_1
-DROP DATABASE IF EXISTS auto_test_local;
-CREATE DATABASE auto_test_local;
-USE auto_test_local;
-if ($USE_REPLICATION)
-{
- --connection slave1_1
- DROP DATABASE IF EXISTS auto_test_local;
- CREATE DATABASE auto_test_local;
- USE auto_test_local;
-}
-if ($USE_CHILD_GROUP2)
-{
- --connection child2_1
- DROP DATABASE IF EXISTS auto_test_remote;
- CREATE DATABASE auto_test_remote;
- USE auto_test_remote;
- --connection child2_2
- DROP DATABASE IF EXISTS auto_test_remote2;
- CREATE DATABASE auto_test_remote2;
- USE auto_test_remote2;
-}
---enable_warnings
-
---echo
---echo test select 1
---connection master_1
-SELECT 1;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- SELECT 1;
- --connection child2_2
- SELECT 1;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
-
-
---echo auto_increment with partition
-if ($HAVE_PARTITION)
-{
- if ($USE_CHILD_GROUP2)
- {
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- echo CHILD2_1_DROP_INCREMENT_TABLES1;
- echo CHILD2_1_CREATE_INCREMENT_TABLES1;
- echo CHILD2_1_AUTO_INCREMENT_INCREMENT2;
- echo CHILD2_1_AUTO_INCREMENT_OFFSET2;
- }
- --disable_warnings
- eval $CHILD2_1_DROP_INCREMENT_TABLES1;
- --enable_warnings
- eval $CHILD2_1_CREATE_INCREMENT_TABLES1;
- eval $CHILD2_1_AUTO_INCREMENT_INCREMENT2;
- eval $CHILD2_1_AUTO_INCREMENT_OFFSET2;
- if ($OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- }
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- --connection child2_2
- if ($OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- echo CHILD2_2_DROP_INCREMENT_TABLES1;
- echo CHILD2_2_CREATE_INCREMENT_TABLES1;
- echo CHILD2_2_AUTO_INCREMENT_INCREMENT2;
- echo CHILD2_2_AUTO_INCREMENT_OFFSET2;
- }
- --disable_warnings
- eval $CHILD2_2_DROP_INCREMENT_TABLES1;
- --enable_warnings
- eval $CHILD2_2_CREATE_INCREMENT_TABLES1;
- eval $CHILD2_2_AUTO_INCREMENT_INCREMENT2;
- eval $CHILD2_2_AUTO_INCREMENT_OFFSET2;
- if ($OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- }
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
- }
- --connection master_1
- SET @original_spider_auto_increment_mode = @@SESSION.spider_auto_increment_mode;
- SET SESSION spider_auto_increment_mode = -1;
- if ($USE_REPLICATION)
- {
- save_master_pos;
- --connection slave1_1
- sync_with_master;
- --connection master_1
- --disable_query_log
- SET SESSION sql_log_bin= 0;
- --enable_query_log
- }
- --disable_warnings
- DROP TABLE IF EXISTS t1, t2;
- --enable_warnings
- --disable_query_log
- echo CREATE TABLE t1 (
- id int(11) NOT NULL AUTO_INCREMENT,
- PRIMARY KEY (id)
- ) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_INCREMENT1_P_1;
- echo CREATE TABLE t2 (
- id int(11) NOT NULL AUTO_INCREMENT,
- PRIMARY KEY (id)
- ) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_INCREMENT1_P_1;
- echo MASTER_1_AUTO_INCREMENT_INCREMENT2;
- echo MASTER_1_AUTO_INCREMENT_OFFSET2;
- eval CREATE TABLE t1 (
- id int(11) NOT NULL AUTO_INCREMENT,
- PRIMARY KEY (id)
- ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_INCREMENT1_P_1;
- eval CREATE TABLE t2 (
- id int(11) NOT NULL AUTO_INCREMENT,
- PRIMARY KEY (id)
- ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_INCREMENT1_P_1;
- --disable_ps_protocol
- eval $MASTER_1_AUTO_INCREMENT_INCREMENT2;
- eval $MASTER_1_AUTO_INCREMENT_OFFSET2;
- --enable_ps_protocol
- if ($USE_REPLICATION)
- {
- SET SESSION sql_log_bin= 1;
- --connection slave1_1
- --disable_warnings
- DROP TABLE IF EXISTS t1, t2;
- --enable_warnings
- echo CREATE TABLE t1 (
- id int(11) NOT NULL AUTO_INCREMENT,
- PRIMARY KEY (id)
- ) SLAVE1_1_ENGINE SLAVE1_1_CHARSET SLAVE1_1_COMMENT_INCREMENT1_P_1;
- echo CREATE TABLE t2 (
- id int(11) NOT NULL AUTO_INCREMENT,
- PRIMARY KEY (id)
- ) SLAVE1_1_ENGINE SLAVE1_1_CHARSET SLAVE1_1_COMMENT_INCREMENT1_P_1;
- eval CREATE TABLE t1 (
- id int(11) NOT NULL AUTO_INCREMENT,
- PRIMARY KEY (id)
- ) $SLAVE1_1_ENGINE $SLAVE1_1_CHARSET $SLAVE1_1_COMMENT_INCREMENT1_P_1;
- eval CREATE TABLE t2 (
- id int(11) NOT NULL AUTO_INCREMENT,
- PRIMARY KEY (id)
- ) $SLAVE1_1_ENGINE $SLAVE1_1_CHARSET $SLAVE1_1_COMMENT_INCREMENT1_P_1;
- --connection master_1
- }
- --enable_query_log
- INSERT INTO t1 () VALUES ();
- SELECT LAST_INSERT_ID();
- SELECT MAX(id) FROM t1;
- INSERT INTO t2 () VALUES ();
- SELECT LAST_INSERT_ID();
- SELECT MAX(id) FROM t2;
- --disable_query_log
- echo MASTER_1_AUTO_INCREMENT_OFFSET3;
- eval $MASTER_1_AUTO_INCREMENT_OFFSET3;
- --enable_query_log
- INSERT INTO t1 (id) VALUES (null);
- SELECT LAST_INSERT_ID();
- SELECT MAX(id) FROM t1;
- --disable_query_log
- echo MASTER_1_AUTO_INCREMENT_OFFSET4;
- eval $MASTER_1_AUTO_INCREMENT_OFFSET4;
- --enable_query_log
- INSERT INTO t2 (id) VALUES (null);
- SELECT LAST_INSERT_ID();
- SELECT MAX(id) FROM t2;
- --disable_query_log
- echo MASTER_1_AUTO_INCREMENT_OFFSET3;
- eval $MASTER_1_AUTO_INCREMENT_OFFSET3;
- --enable_query_log
- INSERT INTO t1 () VALUES (),(),(),();
- SELECT LAST_INSERT_ID();
- SELECT id FROM t1 ORDER BY id;
- --disable_query_log
- echo MASTER_1_AUTO_INCREMENT_OFFSET4;
- eval $MASTER_1_AUTO_INCREMENT_OFFSET4;
- --enable_query_log
- INSERT INTO t2 () VALUES (),(),(),();
- SELECT LAST_INSERT_ID();
- SELECT id FROM t2 ORDER BY id;
- TRUNCATE TABLE t1;
- TRUNCATE TABLE t2;
- INSERT INTO t1 () VALUES (),(),(),();
- SELECT LAST_INSERT_ID();
- SELECT id FROM t1 ORDER BY id;
- INSERT INTO t2 () VALUES (),(),(),();
- SELECT LAST_INSERT_ID();
- SELECT id FROM t2 ORDER BY id;
- SET INSERT_ID=5000;
- --disable_query_log
- echo MASTER_1_AUTO_INCREMENT_OFFSET3;
- eval $MASTER_1_AUTO_INCREMENT_OFFSET3;
- --enable_query_log
- INSERT INTO t1 () VALUES ();
- SELECT LAST_INSERT_ID();
- SELECT MAX(id) FROM t1;
- --disable_query_log
- echo MASTER_1_AUTO_INCREMENT_OFFSET4;
- eval $MASTER_1_AUTO_INCREMENT_OFFSET4;
- --enable_query_log
- INSERT INTO t2 () VALUES ();
- SELECT LAST_INSERT_ID();
- SELECT MAX(id) FROM t2;
- INSERT INTO t1 (id) VALUES (10000);
- SELECT LAST_INSERT_ID();
- SELECT MAX(id) FROM t1;
- INSERT INTO t2 (id) VALUES (1000);
- SELECT LAST_INSERT_ID();
- SELECT MAX(id) FROM t2;
- SET SESSION spider_auto_increment_mode = @original_spider_auto_increment_mode;
- if ($USE_REPLICATION)
- {
- save_master_pos;
- --connection slave1_1
- sync_with_master;
- SELECT id FROM t1 ORDER BY id;
- --connection master_1
- --disable_query_log
- SET SESSION sql_log_bin= 0;
- --enable_query_log
- }
- if ($USE_CHILD_GROUP2)
- {
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%insert %';
- }
- eval $CHILD2_1_SELECT_INCREMENT_TABLES1;
- if ($OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- echo CHILD2_1_AUTO_INCREMENT_INCREMENT1;
- echo CHILD2_1_AUTO_INCREMENT_OFFSET1;
- }
- eval $CHILD2_1_AUTO_INCREMENT_INCREMENT1;
- eval $CHILD2_1_AUTO_INCREMENT_OFFSET1;
- if ($OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- }
- --connection child2_2
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%insert %';
- }
- eval $CHILD2_2_SELECT_INCREMENT_TABLES1;
- if ($OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- echo CHILD2_2_AUTO_INCREMENT_INCREMENT1;
- echo CHILD2_2_AUTO_INCREMENT_OFFSET1;
- }
- eval $CHILD2_2_AUTO_INCREMENT_INCREMENT1;
- eval $CHILD2_2_AUTO_INCREMENT_OFFSET1;
- if ($OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
- }
-}
-
-
---echo
---echo deinit
---disable_warnings
---connection master_1
-DROP DATABASE IF EXISTS auto_test_local;
-if ($USE_REPLICATION)
-{
- --connection slave1_1
- DROP DATABASE IF EXISTS auto_test_local;
-}
-if ($USE_CHILD_GROUP2)
-{
- --connection child2_1
- DROP DATABASE IF EXISTS auto_test_remote;
- --connection child2_2
- DROP DATABASE IF EXISTS auto_test_remote2;
-}
---disable_query_log
---disable_result_log
---source slave_test_deinit.inc
---source test_deinit.inc
---enable_result_log
---enable_query_log
---enable_warnings
---echo
---echo end of test
diff --git a/storage/spider/mysql-test/spider/handler/t/spider_fixes.test b/storage/spider/mysql-test/spider/handler/t/spider_fixes.test
deleted file mode 100644
index 5a3c1d1c893..00000000000
--- a/storage/spider/mysql-test/spider/handler/t/spider_fixes.test
+++ /dev/null
@@ -1,1433 +0,0 @@
-# This test tests for Spider's bug fixes
-source include/have_log_bin.inc;
---disable_warnings
---disable_query_log
---disable_result_log
---source test_init.inc
---source slave_test_init.inc
---enable_result_log
---enable_query_log
-
---echo
---echo drop and create databases
---connection master_1
-DROP DATABASE IF EXISTS auto_test_local;
-CREATE DATABASE auto_test_local;
-USE auto_test_local;
-if ($USE_REPLICATION)
-{
- --connection slave1_1
- DROP DATABASE IF EXISTS auto_test_local;
- CREATE DATABASE auto_test_local;
- USE auto_test_local;
-}
-if ($USE_CHILD_GROUP2)
-{
- --connection child2_1
- DROP DATABASE IF EXISTS auto_test_remote;
- CREATE DATABASE auto_test_remote;
- USE auto_test_remote;
- --connection child2_2
- DROP DATABASE IF EXISTS auto_test_remote2;
- CREATE DATABASE auto_test_remote2;
- USE auto_test_remote2;
-}
---enable_warnings
-
---echo
---echo test select 1
---connection master_1
-SELECT 1;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- SELECT 1;
- --connection child2_2
- SELECT 1;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
-
---echo
---echo create table and insert
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- echo CHILD2_1_DROP_TABLES;
- echo CHILD2_1_CREATE_TABLES;
- }
- --disable_warnings
- eval $CHILD2_1_DROP_TABLES;
- --enable_warnings
- eval $CHILD2_1_CREATE_TABLES;
- if ($OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- }
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
---disable_warnings
-DROP TABLE IF EXISTS tb_l;
---enable_warnings
---disable_query_log
-echo CREATE TABLE tb_l (
- a INT,
- b CHAR(1),
- c DATETIME,
- PRIMARY KEY(a)
-) MASTER_1_ENGINE2 MASTER_1_CHARSET2;
-eval CREATE TABLE tb_l (
- a INT,
- b CHAR(1),
- c DATETIME,
- PRIMARY KEY(a)
-) $MASTER_1_ENGINE2 $MASTER_1_CHARSET2;
---enable_query_log
-INSERT INTO tb_l (a, b, c) VALUES
- (1, 'a', '2008-08-01 10:21:39'),
- (2, 'b', '2000-01-01 00:00:00'),
- (3, 'e', '2007-06-04 20:03:11'),
- (4, 'd', '2003-11-30 05:01:03'),
- (5, 'c', '2001-12-31 23:59:59');
---disable_warnings
-DROP TABLE IF EXISTS ta_l;
---enable_warnings
---disable_query_log
-echo CREATE TABLE ta_l (
- PRIMARY KEY(a)
-) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1;
-eval CREATE TABLE ta_l (
- a INT,
- b CHAR(1),
- c DATETIME,
- PRIMARY KEY(a)
-) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_2_1;
---enable_query_log
-INSERT INTO ta_l SELECT a, b, c FROM tb_l;
-
---echo
---echo 2.13
---echo select table with "order by desc" and "<"
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l
-WHERE a < 5 ORDER BY a DESC LIMIT 3;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
-
---echo
---echo select table with "order by desc" and "<="
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l
-WHERE a <= 5 ORDER BY a DESC LIMIT 3;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
-
---echo
---echo 2.14
---echo update table with range scan and split_read
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-UPDATE ta_l SET c = '2000-02-02 00:00:00' WHERE a > 1;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l ORDER BY a;
-
---echo
---echo 2.15
---echo select table with range scan
-TRUNCATE TABLE ta_l;
---disable_warnings
-DROP TABLE IF EXISTS ta_l;
---enable_warnings
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- echo CHILD2_1_DROP_TABLES6;
- echo CHILD2_1_CREATE_TABLES6;
- }
- --disable_warnings
- eval $CHILD2_1_DROP_TABLES6;
- --enable_warnings
- eval $CHILD2_1_CREATE_TABLES6;
- --enable_query_log
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_result_log
- }
-}
---connection master_1
---disable_query_log
-echo CREATE TABLE ta_l (
- a int(11) NOT NULL DEFAULT '0',
- b char(1) DEFAULT NULL,
- c datetime DEFAULT NULL,
- PRIMARY KEY (a, b, c)
-) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT5_2_1;
-eval CREATE TABLE ta_l (
- a int(11) NOT NULL DEFAULT '0',
- b char(1) DEFAULT NULL,
- c datetime DEFAULT NULL,
- PRIMARY KEY (a, b, c)
-) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT5_2_1;
---enable_query_log
-INSERT INTO ta_l SELECT a, b, c FROM tb_l;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a = 4 AND b >= 'b'
-AND c = '2003-11-30 05:01:03';
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a = 4 AND b > 'b'
-AND c = '2003-11-30 05:01:03';
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a >= 4 AND b = 'd'
-AND c = '2003-11-30 05:01:03';
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a > 4 AND b = 'c'
-AND c = '2001-12-31 23:59:59';
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a = 4 AND b <= 'd'
-AND c = '2003-11-30 05:01:03';
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a = 4 AND b < 'e'
-AND c = '2003-11-30 05:01:03';
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a <= 4 AND b = 'b'
-AND c = '2000-01-01 00:00:00';
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a < 4 AND b = 'b'
-AND c = '2000-01-01 00:00:00';
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a = 4 AND b >= 'b'
-AND b <= 'd' AND c = '2003-11-30 05:01:03';
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a = 4 AND b > 'b'
-AND b < 'e' AND c = '2003-11-30 05:01:03';
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a <= 4 AND a >= 1
-AND b >= 'b' AND c = '2003-11-30 05:01:03';
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT a, b, c FROM ta_l FORCE INDEX(PRIMARY) WHERE a < 4 AND a > 1
-AND b >= 'b' AND c = '2000-01-01 00:00:00';
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
-
---echo
---echo 2.16
---echo auto_increment insert with trigger
-if ($HAVE_TRIGGER)
-{
- if ($USE_CHILD_GROUP2)
- {
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_result_log
- }
- --disable_query_log
- --connection child2_1
- if ($OUTPUT_CHILD_GROUP2)
- {
- echo CHILD2_1_DROP_TABLES4;
- echo CHILD2_1_CREATE_TABLES4;
- }
- --disable_warnings
- eval $CHILD2_1_DROP_TABLES4;
- --enable_warnings
- eval $CHILD2_1_CREATE_TABLES4;
- --enable_query_log
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_result_log
- }
- }
- --connection master_1
- --disable_query_log
- echo CREATE TABLE ta_l_auto_inc (
- a INT AUTO_INCREMENT,
- b CHAR(1) DEFAULT 'c',
- c DATETIME DEFAULT '1999-10-10 10:10:10',
- PRIMARY KEY(a)
- ) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT3_2_1;
- eval CREATE TABLE ta_l_auto_inc (
- a INT AUTO_INCREMENT,
- b CHAR(1) DEFAULT 'c',
- c DATETIME DEFAULT '1999-10-10 10:10:10',
- PRIMARY KEY(a)
- ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT3_2_1;
- echo CREATE TABLE tc_l (
- a INT,
- b CHAR(1),
- c DATETIME,
- PRIMARY KEY(a)
- ) MASTER_1_ENGINE2 MASTER_1_CHARSET2;
- eval CREATE TABLE tc_l (
- a INT,
- b CHAR(1),
- c DATETIME,
- PRIMARY KEY(a)
- ) $MASTER_1_ENGINE2 $MASTER_1_CHARSET2;
- --enable_query_log
- --eval CREATE TRIGGER ins_ta_l_auto_inc AFTER INSERT ON ta_l_auto_inc FOR EACH ROW BEGIN INSERT INTO tc_l (a, b, c) VALUES (NEW.a, NEW.b, NEW.c); END;
- if ($USE_CHILD_GROUP2)
- {
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- eval $CHILD2_1_SELECT_TABLES;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
- }
- --connection master_1
- INSERT INTO ta_l_auto_inc (a, b, c) VALUES
- (NULL, 's', '2008-12-31 20:59:59');
- if ($USE_CHILD_GROUP2)
- {
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%insert %';
- }
- eval $CHILD2_1_SELECT_TABLES4;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
- }
- --connection master_1
- SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM tc_l ORDER BY a;
-}
-
---echo
---echo 2.17
---echo engine-condition-pushdown with "or" and joining
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l WHERE a = 1 OR a IN (SELECT a FROM tb_l);
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
-
---echo
---echo 2.23
---echo index merge
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_result_log
- }
- --disable_query_log
- --connection child2_1
- if ($OUTPUT_CHILD_GROUP2)
- {
- echo CHILD2_1_DROP_TABLES5;
- echo CHILD2_1_CREATE_TABLES5;
- }
- --disable_warnings
- eval $CHILD2_1_DROP_TABLES5;
- --enable_warnings
- eval $CHILD2_1_CREATE_TABLES5;
- --enable_query_log
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_result_log
- }
-}
---connection master_1
---disable_query_log
-echo CREATE TABLE ta_l_int (
- a INT AUTO_INCREMENT,
- b INT DEFAULT 10,
- c INT DEFAULT 11,
- PRIMARY KEY(a),
- KEY idx1(b),
- KEY idx2(c)
-) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT4_2_1;
-eval CREATE TABLE ta_l_int (
- a INT AUTO_INCREMENT,
- b INT DEFAULT 10,
- c INT DEFAULT 11,
- PRIMARY KEY(a),
- KEY idx1(b),
- KEY idx2(c)
-) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT4_2_1;
---enable_query_log
-INSERT INTO ta_l_int (a, b, c) VALUES (1, 2, 3);
-INSERT INTO ta_l_int (a, b, c) SELECT a + 1, b + 1, c + 1 FROM ta_l_int;
-INSERT INTO ta_l_int (a, b, c) SELECT a + 2, b + 2, c + 2 FROM ta_l_int;
-INSERT INTO ta_l_int (a, b, c) SELECT a + 4, b + 4, c + 4 FROM ta_l_int;
-INSERT INTO ta_l_int (a, b, c) SELECT a + 8, b + 8, c + 8 FROM ta_l_int;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT a, b, c FROM ta_l_int force index(primary, idx1, idx2)
-WHERE a = 5 OR b = 5 OR c = 5 ORDER BY a;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
-
---echo
---echo 2.24
---echo index scan update without PK
---connection master_1
---disable_warnings
-DROP TABLE IF EXISTS ta_l_int;
---enable_warnings
---disable_query_log
-echo CREATE TABLE ta_l_int (
- a INT NOT NULL,
- b INT DEFAULT 10,
- c INT DEFAULT 11,
- KEY idx1(b),
- KEY idx2(c)
-) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT4_2_1;
-if ($MASTER_1_NEEDPK)
-{
- --error ER_REQUIRES_PRIMARY_KEY
- eval CREATE TABLE ta_l_int (
- a INT NOT NULL,
- b INT DEFAULT 10,
- c INT DEFAULT 11,
- KEY idx1(b),
- KEY idx2(c)
- ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT4_2_1;
- eval CREATE TABLE ta_l_int (
- a INT NOT NULL,
- b INT DEFAULT 10,
- c INT DEFAULT 11,
- PRIMARY KEY(a),
- KEY idx1(b),
- KEY idx2(c)
- ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT4_2_1;
-}
-if (!$MASTER_1_NEEDPK)
-{
- eval CREATE TABLE ta_l_int (
- a INT NOT NULL,
- b INT DEFAULT 10,
- c INT DEFAULT 11,
- KEY idx1(b),
- KEY idx2(c)
- ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT4_2_1;
-}
---enable_query_log
-SELECT a, b, c FROM ta_l_int ORDER BY a;
-INSERT INTO ta_l_int (a, b, c) VALUES (0, 2, 3);
-INSERT INTO ta_l_int (a, b, c) VALUES (18, 2, 3);
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-UPDATE ta_l_int SET c = 4 WHERE b = 2;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%update %';
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SELECT a, b, c FROM ta_l_int ORDER BY a;
-
-
---echo
---echo 2.25
---echo direct order limit
---connection master_1
-eval $MASTER_1_CHECK_DIRECT_ORDER_LIMIT_STATUS;
-SELECT a, b, c FROM ta_l_int ORDER BY a LIMIT 3;
-eval $MASTER_1_CHECK_DIRECT_ORDER_LIMIT_STATUS;
-
-
---echo
---echo 2.26
---echo lock tables
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- echo CHILD2_1_DROP_LOCK_TABLES1;
- echo CHILD2_1_DROP_LOCK_TABLES2;
- echo CHILD2_1_CREATE_LOCK_TABLES1;
- echo CHILD2_1_CREATE_LOCK_TABLES2;
- }
- --disable_warnings
- eval $CHILD2_1_DROP_LOCK_TABLES1;
- eval $CHILD2_1_DROP_LOCK_TABLES2;
- --enable_warnings
- eval $CHILD2_1_CREATE_LOCK_TABLES1;
- eval $CHILD2_1_CREATE_LOCK_TABLES2;
- if ($OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- }
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- --connection child2_2
- if ($OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- echo CHILD2_2_DROP_LOCK_TABLES1;
- echo CHILD2_2_DROP_LOCK_TABLES2;
- echo CHILD2_2_CREATE_LOCK_TABLES1;
- echo CHILD2_2_CREATE_LOCK_TABLES2;
- }
- --disable_warnings
- eval $CHILD2_2_DROP_LOCK_TABLES1;
- eval $CHILD2_2_DROP_LOCK_TABLES2;
- --enable_warnings
- eval $CHILD2_2_CREATE_LOCK_TABLES1;
- eval $CHILD2_2_CREATE_LOCK_TABLES2;
- if ($OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- }
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
---disable_warnings
-DROP TABLE IF EXISTS t1;
-DROP TABLE IF EXISTS t2;
---enable_warnings
---disable_query_log
-echo CREATE TABLE t1 (
- id int(11) NOT NULL,
- PRIMARY KEY (id)
-) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_LOCK1;
-eval CREATE TABLE t1 (
- id int(11) NOT NULL,
- PRIMARY KEY (id)
-) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_LOCK1;
-echo CREATE TABLE t2 (
- id int(11) NOT NULL,
- PRIMARY KEY (id)
-) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_LOCK2;
-eval CREATE TABLE t2 (
- id int(11) NOT NULL,
- PRIMARY KEY (id)
-) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_LOCK2;
---enable_query_log
-LOCK TABLES t1 READ, t2 READ;
-UNLOCK TABLES;
-
-
---echo
---echo auto_increment
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- echo CHILD2_1_DROP_INCREMENT_TABLES1;
- echo CHILD2_1_CREATE_INCREMENT_TABLES1;
- echo CHILD2_1_AUTO_INCREMENT_INCREMENT2;
- echo CHILD2_1_AUTO_INCREMENT_OFFSET2;
- }
- --disable_warnings
- eval $CHILD2_1_DROP_INCREMENT_TABLES1;
- --enable_warnings
- eval $CHILD2_1_CREATE_INCREMENT_TABLES1;
- eval $CHILD2_1_AUTO_INCREMENT_INCREMENT2;
- eval $CHILD2_1_AUTO_INCREMENT_OFFSET2;
- if ($OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- }
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-SET @original_spider_auto_increment_mode = @@SESSION.spider_auto_increment_mode;
-SET SESSION spider_auto_increment_mode = -1;
-if ($USE_REPLICATION)
-{
- save_master_pos;
- --connection slave1_1
- sync_with_master;
- --connection master_1
- --disable_query_log
- SET SESSION sql_log_bin= 0;
- --enable_query_log
-}
---disable_warnings
-DROP TABLE IF EXISTS t1;
---enable_warnings
---disable_query_log
-echo CREATE TABLE t1 (
- id int(11) NOT NULL AUTO_INCREMENT,
- PRIMARY KEY (id)
-) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_INCREMENT1_1;
-echo MASTER_1_AUTO_INCREMENT_INCREMENT2;
-echo MASTER_1_AUTO_INCREMENT_OFFSET2;
-eval CREATE TABLE t1 (
- id int(11) NOT NULL AUTO_INCREMENT,
- PRIMARY KEY (id)
-) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_INCREMENT1_1;
---disable_ps_protocol
-eval $MASTER_1_AUTO_INCREMENT_INCREMENT2;
-eval $MASTER_1_AUTO_INCREMENT_OFFSET2;
---enable_ps_protocol
-if ($USE_REPLICATION)
-{
- SET SESSION sql_log_bin= 1;
- --connection slave1_1
- --disable_warnings
- DROP TABLE IF EXISTS t1;
- --enable_warnings
- echo CREATE TABLE t1 (
- id int(11) NOT NULL AUTO_INCREMENT,
- PRIMARY KEY (id)
- ) SLAVE1_1_ENGINE SLAVE1_1_CHARSET SLAVE1_1_COMMENT_INCREMENT1_1;
- eval CREATE TABLE t1 (
- id int(11) NOT NULL AUTO_INCREMENT,
- PRIMARY KEY (id)
- ) $SLAVE1_1_ENGINE $SLAVE1_1_CHARSET $SLAVE1_1_COMMENT_INCREMENT1_1;
- --connection master_1
-}
---enable_query_log
-INSERT INTO t1 () VALUES ();
-SELECT LAST_INSERT_ID();
-SELECT MAX(id) FROM t1;
-INSERT INTO t1 () VALUES ();
-SELECT LAST_INSERT_ID();
-SELECT MAX(id) FROM t1;
-INSERT INTO t1 (id) VALUES (null);
-SELECT LAST_INSERT_ID();
-SELECT MAX(id) FROM t1;
-INSERT INTO t1 (id) VALUES (null);
-SELECT LAST_INSERT_ID();
-SELECT MAX(id) FROM t1;
-INSERT INTO t1 () VALUES (),(),(),();
-SELECT LAST_INSERT_ID();
-SELECT id FROM t1 ORDER BY id;
-SET INSERT_ID=5000;
-INSERT INTO t1 () VALUES ();
-SELECT LAST_INSERT_ID();
-SELECT MAX(id) FROM t1;
-INSERT INTO t1 (id) VALUES (10000);
-SELECT LAST_INSERT_ID();
-SELECT MAX(id) FROM t1;
-INSERT INTO t1 (id) VALUES (1000);
-SELECT LAST_INSERT_ID();
-SELECT MAX(id) FROM t1;
-SET SESSION spider_auto_increment_mode = @original_spider_auto_increment_mode;
-if ($USE_REPLICATION)
-{
- save_master_pos;
- --connection slave1_1
- sync_with_master;
- SELECT id FROM t1 ORDER BY id;
- --connection master_1
- --disable_query_log
- SET SESSION sql_log_bin= 0;
- --enable_query_log
-}
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%insert %';
- }
- eval $CHILD2_1_SELECT_INCREMENT_TABLES1;
- if ($OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- echo CHILD2_1_AUTO_INCREMENT_INCREMENT1;
- echo CHILD2_1_AUTO_INCREMENT_OFFSET1;
- }
- eval $CHILD2_1_AUTO_INCREMENT_INCREMENT1;
- eval $CHILD2_1_AUTO_INCREMENT_OFFSET1;
- if ($OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
-
-
---echo
---echo read only
-let $MASTER_1_ENGINE_IS_SPIDER=
- `SELECT IF('$MASTER_1_ENGINE_TYPE' = 'Spider' OR
- '$MASTER_1_HIDDEN_ENGINE_TYPE' = 'Spider', 1, 0)`;
-if ($MASTER_1_ENGINE_IS_SPIDER)
-{
- --connection master_1
- SET @original_spider_read_only_mode = @@SESSION.spider_read_only_mode;
- SET SESSION spider_read_only_mode = -1;
- --disable_warnings
- DROP TABLE IF EXISTS t1;
- --enable_warnings
- --disable_query_log
- echo CREATE TABLE t1 (
- id int(11) NOT NULL,
- PRIMARY KEY (id)
- ) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_READONLY1_1;
- eval CREATE TABLE t1 (
- id int(11) NOT NULL,
- PRIMARY KEY (id)
- ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_READONLY1_1;
- --let $MIN_VAL= `SELECT MIN(id) FROM t1`
- --enable_query_log
- SELECT id FROM t1 ORDER BY id;
- --error 12518
- INSERT INTO t1 (id) VALUES (1);
- --error 12518
- eval UPDATE t1 SET id = 4 WHERE id = $MIN_VAL;
- --error 12518
- eval DELETE FROM t1 WHERE id = $MIN_VAL;
- --error 12518
- DELETE FROM t1;
- --error 12518
- TRUNCATE t1;
- SET SESSION spider_read_only_mode = @original_spider_read_only_mode;
-}
-if (!$MASTER_1_ENGINE_IS_SPIDER)
-{
- --echo skipped
-}
-
-
---echo
---echo 2.27
---echo error mode
-if ($MASTER_1_ENGINE_IS_SPIDER)
-{
- --connection master_1
- SET @original_spider_error_read_mode = @@SESSION.spider_error_read_mode;
- SET @original_spider_error_write_mode = @@SESSION.spider_error_write_mode;
- SET SESSION spider_error_read_mode = -1;
- SET SESSION spider_error_write_mode = -1;
- --disable_warnings
- DROP TABLE IF EXISTS t1;
- --enable_warnings
- --disable_query_log
- echo CREATE TABLE t1 (
- id int(11) NOT NULL,
- PRIMARY KEY (id)
- ) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_ERROR_MODE1_1;
- eval CREATE TABLE t1 (
- id int(11) NOT NULL,
- PRIMARY KEY (id)
- ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_ERROR_MODE1_1;
- --enable_query_log
- SELECT id FROM t1 ORDER BY id;
- INSERT INTO t1 (id) VALUES (1);
- DELETE FROM t1;
- TRUNCATE t1;
- SET SESSION spider_error_read_mode = @original_spider_error_read_mode;
- SET SESSION spider_error_write_mode = @original_spider_error_write_mode;
-}
-if (!$MASTER_1_ENGINE_IS_SPIDER)
-{
- --echo skipped
-}
-
-
---echo
---echo 3.0
---echo is null
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_result_log
- }
- --disable_query_log
- --connection child2_1
- if ($OUTPUT_CHILD_GROUP2)
- {
- echo CHILD2_1_DROP_TEXT_KEY_TABLES1;
- echo CHILD2_1_CREATE_TEXT_KEY_TABLES1;
- }
- --disable_warnings
- eval $CHILD2_1_DROP_TEXT_KEY_TABLES1;
- --enable_warnings
- eval $CHILD2_1_CREATE_TEXT_KEY_TABLES1;
- --enable_query_log
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_result_log
- }
-}
---connection master_1
---disable_warnings
-DROP TABLE IF EXISTS t1;
---enable_warnings
---disable_query_log
-echo CREATE TABLE t1 (
- a VARCHAR(255),
- b VARCHAR(255),
- c VARCHAR(255),
- KEY idx1(a,b),
- KEY idx2(b),
- PRIMARY KEY(c)
-) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_TEXT_KEY1_1;
-eval CREATE TABLE t1 (
- a VARCHAR(255),
- b VARCHAR(255),
- c VARCHAR(255),
- KEY idx1(a,b),
- KEY idx2(b),
- PRIMARY KEY(c)
-) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_TEXT_KEY1_1;
---enable_query_log
-insert into t1 values (null, null, '2048');
-insert into t1 values ('1', '1', '1');
-insert into t1 select a + 1, b + 1, c + 1 from t1;
-insert into t1 select a + 2, b + 2, c + 2 from t1;
-insert into t1 select a + 4, b + 4, c + 4 from t1;
-insert into t1 select a + 8, b + 8, c + 8 from t1;
-insert into t1 select a + 16, b + 16, c + 16 from t1;
-insert into t1 select a + 32, b + 32, c + 32 from t1;
-insert into t1 select a + 64, b + 64, c + 64 from t1;
-insert into t1 select a + 128, b + 128, c + 128 from t1;
-insert into t1 select a + 256, b + 256, c + 256 from t1;
-insert into t1 select a + 512, b + 512, c + 512 from t1;
-flush tables;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-select a from t1 where a is null order by a limit 30;
-select b from t1 where b is null order by b limit 30;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- }
- eval $CHILD2_1_SELECT_TEXT_PK_TABLES1;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
-
-
---echo
---echo direct_order_limit
---connection master_1
-TRUNCATE TABLE t1;
-insert into t1 values ('1', '1', '1');
-insert into t1 select a + 1, b + 1, c + 1 from t1;
-insert into t1 select a + 2, b + 2, c + 2 from t1;
-insert into t1 select a + 4, b + 4, c + 4 from t1;
-insert into t1 select a + 8, b + 8, c + 8 from t1;
-insert into t1 select a + 16, b + 16, c + 16 from t1;
-insert into t1 select a, b + 32, c + 32 from t1;
-insert into t1 select a, b + 64, c + 64 from t1;
-insert into t1 select a, b + 128, c + 128 from t1;
-flush tables;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-select a, b, c from t1 where a = '10' and b <> '100' order by c desc limit 5;
-select a, c from t1 where a = '10' order by b desc limit 5;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- }
- eval $CHILD2_1_SELECT_TEXT_PK_TABLES1;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
-
-
---echo
---echo deinit
---disable_warnings
---connection master_1
-DROP DATABASE IF EXISTS auto_test_local;
-if ($USE_REPLICATION)
-{
- --connection slave1_1
- DROP DATABASE IF EXISTS auto_test_local;
-}
-if ($USE_CHILD_GROUP2)
-{
- --connection child2_1
- DROP DATABASE IF EXISTS auto_test_remote;
- --connection child2_2
- DROP DATABASE IF EXISTS auto_test_remote2;
-}
---disable_query_log
---disable_result_log
---source slave_test_deinit.inc
---source test_deinit.inc
---enable_result_log
---enable_query_log
---enable_warnings
---echo
---echo end of test
diff --git a/storage/spider/mysql-test/spider/handler/t/spider_fixes_part.test b/storage/spider/mysql-test/spider/handler/t/spider_fixes_part.test
deleted file mode 100644
index 22ba6102405..00000000000
--- a/storage/spider/mysql-test/spider/handler/t/spider_fixes_part.test
+++ /dev/null
@@ -1,650 +0,0 @@
-# This test tests for Spider's bug fixes
-source include/have_log_bin.inc;
---disable_warnings
---disable_query_log
---disable_result_log
---source test_init.inc
---source slave_test_init.inc
---enable_result_log
---enable_query_log
-if (!$HAVE_PARTITION)
-{
- --disable_query_log
- --disable_result_log
- --source slave_test_deinit.inc
- --source test_deinit.inc
- --enable_result_log
- --enable_query_log
- --enable_warnings
- skip Test requires partitioning;
-}
-
---echo
---echo drop and create databases
---connection master_1
-DROP DATABASE IF EXISTS auto_test_local;
-CREATE DATABASE auto_test_local;
-USE auto_test_local;
-if ($USE_REPLICATION)
-{
- --connection slave1_1
- DROP DATABASE IF EXISTS auto_test_local;
- CREATE DATABASE auto_test_local;
- USE auto_test_local;
-}
-if ($USE_CHILD_GROUP2)
-{
- --connection child2_1
- DROP DATABASE IF EXISTS auto_test_remote;
- CREATE DATABASE auto_test_remote;
- USE auto_test_remote;
- --connection child2_2
- DROP DATABASE IF EXISTS auto_test_remote2;
- CREATE DATABASE auto_test_remote2;
- USE auto_test_remote2;
-}
---enable_warnings
-
---echo
---echo test select 1
---connection master_1
-SELECT 1;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- SELECT 1;
- --connection child2_2
- SELECT 1;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
-
---connection master_1
---disable_warnings
-DROP TABLE IF EXISTS tb_l;
---enable_warnings
---disable_query_log
-echo CREATE TABLE tb_l (
- a INT,
- b CHAR(1),
- c DATETIME,
- PRIMARY KEY(a)
-) MASTER_1_ENGINE2 MASTER_1_CHARSET2;
-eval CREATE TABLE tb_l (
- a INT,
- b CHAR(1),
- c DATETIME,
- PRIMARY KEY(a)
-) $MASTER_1_ENGINE2 $MASTER_1_CHARSET2;
---enable_query_log
-INSERT INTO tb_l (a, b, c) VALUES
- (1, 'a', '2008-08-01 10:21:39'),
- (2, 'b', '2000-01-01 00:00:00'),
- (3, 'e', '2007-06-04 20:03:11'),
- (4, 'd', '2003-11-30 05:01:03'),
- (5, 'c', '2001-12-31 23:59:59');
-
---echo
---echo 2.17
---echo partition with sort
-if ($HAVE_PARTITION)
-{
- if ($USE_CHILD_GROUP2)
- {
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_2
- if ($OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- echo CHILD2_2_DROP_TABLES;
- echo CHILD2_2_CREATE_TABLES;
- }
- --disable_warnings
- eval $CHILD2_2_DROP_TABLES;
- --enable_warnings
- eval $CHILD2_2_CREATE_TABLES;
- if ($OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- }
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- --connection child2_1
- if ($OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- echo CHILD2_1_DROP_TABLES2;
- echo CHILD2_1_CREATE_TABLES2;
- }
- --disable_warnings
- eval $CHILD2_1_DROP_TABLES2;
- --enable_warnings
- eval $CHILD2_1_CREATE_TABLES2;
- if ($OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- }
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
- }
- --connection master_1
- --disable_query_log
- echo CREATE TABLE ta_l2 (
- a INT,
- b CHAR(1),
- c DATETIME,
- PRIMARY KEY(a)
- ) MASTER_1_ENGINE MASTER_1_COMMENT2_P_2_1;
- eval CREATE TABLE ta_l2 (
- a INT,
- b CHAR(1),
- c DATETIME,
- PRIMARY KEY(a)
- ) $MASTER_1_ENGINE $MASTER_1_COMMENT2_P_2_1;
- --enable_query_log
- INSERT INTO ta_l2 SELECT a, b, c FROM tb_l;
- SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2 WHERE a > 1
- ORDER BY a;
- if ($USE_CHILD_GROUP2)
- {
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_2
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- }
- eval $CHILD2_2_SELECT_TABLES;
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- }
- eval $CHILD2_1_SELECT_TABLES2;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
- }
-}
-
---echo
---echo 2.23
---echo partition update with moving partition
-if ($HAVE_PARTITION)
-{
- --connection master_1
- --disable_warnings
- DROP TABLE IF EXISTS ta_l2;
- --enable_warnings
- if ($USE_CHILD_GROUP2)
- {
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_2
- if ($OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- echo CHILD2_2_DROP_TABLES;
- echo CHILD2_2_CREATE_TABLES;
- }
- --disable_warnings
- eval $CHILD2_2_DROP_TABLES;
- --enable_warnings
- eval $CHILD2_2_CREATE_TABLES;
- if ($OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- }
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- --connection child2_1
- if ($OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- echo CHILD2_1_DROP_TABLES2;
- echo CHILD2_1_CREATE_TABLES2;
- }
- --disable_warnings
- eval $CHILD2_1_DROP_TABLES2;
- --enable_warnings
- eval $CHILD2_1_CREATE_TABLES2;
- if ($OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- }
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
- }
- --connection master_1
- --disable_query_log
- echo CREATE TABLE ta_l2 (
- a INT,
- b CHAR(1),
- c DATETIME,
- PRIMARY KEY(a)
- ) MASTER_1_ENGINE MASTER_1_COMMENT2_P_2_1;
- eval CREATE TABLE ta_l2 (
- a INT,
- b CHAR(1),
- c DATETIME,
- PRIMARY KEY(a)
- ) $MASTER_1_ENGINE $MASTER_1_COMMENT2_P_2_1;
- --enable_query_log
- INSERT INTO ta_l2 (a, b, c) VALUES (3, 'B', '2010-09-26 00:00:00');
- UPDATE ta_l2 SET a = 4 WHERE a = 3;
- SELECT a, b, date_format(c, '%Y-%m-%d %H:%i:%s') FROM ta_l2;
- if ($USE_CHILD_GROUP2)
- {
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_2
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%insert %';
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%update %';
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%delete %';
- }
- eval $CHILD2_2_SELECT_TABLES;
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%insert %';
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%update %';
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%delete %';
- }
- eval $CHILD2_1_SELECT_TABLES2;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
- }
-}
-
---echo index merge with partition
-if ($HAVE_PARTITION)
-{
- --connection master_1
- --disable_warnings
- DROP TABLE IF EXISTS ta_l_int;
- --enable_warnings
- if ($USE_CHILD_GROUP2)
- {
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_result_log
- }
- --disable_query_log
- --connection child2_2
- if ($OUTPUT_CHILD_GROUP2)
- {
- echo CHILD2_2_DROP_TABLES5;
- echo CHILD2_2_CREATE_TABLES5;
- }
- --disable_warnings
- eval $CHILD2_2_DROP_TABLES5;
- --enable_warnings
- eval $CHILD2_2_CREATE_TABLES5;
- --connection child2_1
- if ($OUTPUT_CHILD_GROUP2)
- {
- echo CHILD2_1_DROP_TABLES5;
- echo CHILD2_1_CREATE_TABLES5;
- }
- --disable_warnings
- eval $CHILD2_1_DROP_TABLES5;
- --enable_warnings
- eval $CHILD2_1_CREATE_TABLES5;
- --enable_query_log
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_result_log
- }
- }
- --connection master_1
- --disable_query_log
- echo CREATE TABLE ta_l_int (
- a INT AUTO_INCREMENT,
- b INT DEFAULT 10,
- c INT DEFAULT 11,
- PRIMARY KEY(a),
- KEY idx1(b),
- KEY idx2(c)
- ) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT3_P_2_1;
- eval CREATE TABLE ta_l_int (
- a INT AUTO_INCREMENT,
- b INT DEFAULT 10,
- c INT DEFAULT 11,
- PRIMARY KEY(a),
- KEY idx1(b),
- KEY idx2(c)
- ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT3_P_2_1;
- --enable_query_log
- INSERT INTO ta_l_int (a, b, c) VALUES (1, 2, 3);
- INSERT INTO ta_l_int (a, b, c) SELECT a + 1, b + 1, c + 1 FROM ta_l_int;
- INSERT INTO ta_l_int (a, b, c) SELECT a + 2, b + 2, c + 2 FROM ta_l_int;
- INSERT INTO ta_l_int (a, b, c) SELECT a + 4, b + 4, c + 4 FROM ta_l_int;
- INSERT INTO ta_l_int (a, b, c) SELECT a + 8, b + 8, c + 8 FROM ta_l_int;
- if ($USE_CHILD_GROUP2)
- {
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_2
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
- }
- --connection master_1
- SELECT a, b, c FROM ta_l_int force index(primary, idx1, idx2)
- WHERE a = 5 OR b = 5 OR c = 5 ORDER BY a;
- if ($USE_CHILD_GROUP2)
- {
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_2
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
- }
-}
-
-
---echo
---echo 2.26
---echo auto_increment with partition
-if ($HAVE_PARTITION)
-{
- if ($USE_CHILD_GROUP2)
- {
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- echo CHILD2_1_DROP_INCREMENT_TABLES1;
- echo CHILD2_1_CREATE_INCREMENT_TABLES1;
- echo CHILD2_1_AUTO_INCREMENT_INCREMENT2;
- echo CHILD2_1_AUTO_INCREMENT_OFFSET2;
- }
- --disable_warnings
- eval $CHILD2_1_DROP_INCREMENT_TABLES1;
- --enable_warnings
- eval $CHILD2_1_CREATE_INCREMENT_TABLES1;
- eval $CHILD2_1_AUTO_INCREMENT_INCREMENT2;
- eval $CHILD2_1_AUTO_INCREMENT_OFFSET2;
- if ($OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- }
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- --connection child2_2
- if ($OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- echo CHILD2_2_DROP_INCREMENT_TABLES1;
- echo CHILD2_2_CREATE_INCREMENT_TABLES1;
- echo CHILD2_2_AUTO_INCREMENT_INCREMENT2;
- echo CHILD2_2_AUTO_INCREMENT_OFFSET2;
- }
- --disable_warnings
- eval $CHILD2_2_DROP_INCREMENT_TABLES1;
- --enable_warnings
- eval $CHILD2_2_CREATE_INCREMENT_TABLES1;
- eval $CHILD2_2_AUTO_INCREMENT_INCREMENT2;
- eval $CHILD2_2_AUTO_INCREMENT_OFFSET2;
- if ($OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- }
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
- }
- --connection master_1
- SET @original_spider_auto_increment_mode = @@SESSION.spider_auto_increment_mode;
- SET SESSION spider_auto_increment_mode = -1;
- if ($USE_REPLICATION)
- {
- save_master_pos;
- --connection slave1_1
- sync_with_master;
- --connection master_1
- --disable_query_log
- SET SESSION sql_log_bin= 0;
- --enable_query_log
- }
- --disable_warnings
- DROP TABLE IF EXISTS t1;
- --enable_warnings
- --disable_query_log
- echo CREATE TABLE t1 (
- id int(11) NOT NULL AUTO_INCREMENT,
- PRIMARY KEY (id)
- ) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_INCREMENT1_P_1;
- echo MASTER_1_AUTO_INCREMENT_INCREMENT2;
- echo MASTER_1_AUTO_INCREMENT_OFFSET2;
- eval CREATE TABLE t1 (
- id int(11) NOT NULL AUTO_INCREMENT,
- PRIMARY KEY (id)
- ) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_INCREMENT1_P_1;
- --disable_ps_protocol
- eval $MASTER_1_AUTO_INCREMENT_INCREMENT2;
- eval $MASTER_1_AUTO_INCREMENT_OFFSET2;
- --enable_ps_protocol
- if ($USE_REPLICATION)
- {
- SET SESSION sql_log_bin= 1;
- --connection slave1_1
- --disable_warnings
- DROP TABLE IF EXISTS t1;
- --enable_warnings
- echo CREATE TABLE t1 (
- id int(11) NOT NULL AUTO_INCREMENT,
- PRIMARY KEY (id)
- ) SLAVE1_1_ENGINE SLAVE1_1_CHARSET SLAVE1_1_COMMENT_INCREMENT1_P_1;
- eval CREATE TABLE t1 (
- id int(11) NOT NULL AUTO_INCREMENT,
- PRIMARY KEY (id)
- ) $SLAVE1_1_ENGINE $SLAVE1_1_CHARSET $SLAVE1_1_COMMENT_INCREMENT1_P_1;
- --connection master_1
- }
- --enable_query_log
- INSERT INTO t1 () VALUES ();
- SELECT LAST_INSERT_ID();
- SELECT MAX(id) FROM t1;
- INSERT INTO t1 () VALUES ();
- SELECT LAST_INSERT_ID();
- SELECT MAX(id) FROM t1;
- INSERT INTO t1 (id) VALUES (null);
- SELECT LAST_INSERT_ID();
- SELECT MAX(id) FROM t1;
- INSERT INTO t1 (id) VALUES (null);
- SELECT LAST_INSERT_ID();
- SELECT MAX(id) FROM t1;
- INSERT INTO t1 () VALUES (),(),(),();
- SELECT LAST_INSERT_ID();
- SELECT id FROM t1 ORDER BY id;
- SET INSERT_ID=5000;
- INSERT INTO t1 () VALUES ();
- SELECT LAST_INSERT_ID();
- SELECT MAX(id) FROM t1;
- INSERT INTO t1 (id) VALUES (10000);
- SELECT LAST_INSERT_ID();
- SELECT MAX(id) FROM t1;
- INSERT INTO t1 (id) VALUES (1000);
- SELECT LAST_INSERT_ID();
- SELECT MAX(id) FROM t1;
- SET SESSION spider_auto_increment_mode = @original_spider_auto_increment_mode;
- if ($USE_REPLICATION)
- {
- save_master_pos;
- --connection slave1_1
- sync_with_master;
- SELECT id FROM t1 ORDER BY id;
- --connection master_1
- --disable_query_log
- SET SESSION sql_log_bin= 0;
- --enable_query_log
- }
- if ($USE_CHILD_GROUP2)
- {
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%insert %';
- }
- eval $CHILD2_1_SELECT_INCREMENT_TABLES1;
- if ($OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- echo CHILD2_1_AUTO_INCREMENT_INCREMENT1;
- echo CHILD2_1_AUTO_INCREMENT_OFFSET1;
- }
- eval $CHILD2_1_AUTO_INCREMENT_INCREMENT1;
- eval $CHILD2_1_AUTO_INCREMENT_OFFSET1;
- if ($OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- }
- --connection child2_2
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%insert %';
- }
- eval $CHILD2_2_SELECT_INCREMENT_TABLES1;
- if ($OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- echo CHILD2_2_AUTO_INCREMENT_INCREMENT1;
- echo CHILD2_2_AUTO_INCREMENT_OFFSET1;
- }
- eval $CHILD2_2_AUTO_INCREMENT_INCREMENT1;
- eval $CHILD2_2_AUTO_INCREMENT_OFFSET1;
- if ($OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
- }
-}
-
-
---echo
---echo deinit
---disable_warnings
---connection master_1
-DROP DATABASE IF EXISTS auto_test_local;
-if ($USE_REPLICATION)
-{
- --connection slave1_1
- DROP DATABASE IF EXISTS auto_test_local;
-}
-if ($USE_CHILD_GROUP2)
-{
- --connection child2_1
- DROP DATABASE IF EXISTS auto_test_remote;
- --connection child2_2
- DROP DATABASE IF EXISTS auto_test_remote2;
-}
---disable_query_log
---disable_result_log
---source slave_test_deinit.inc
---source test_deinit.inc
---enable_result_log
---enable_query_log
---enable_warnings
---echo
---echo end of test
diff --git a/storage/spider/mysql-test/spider/handler/t/test_deinit.inc b/storage/spider/mysql-test/spider/handler/t/test_deinit.inc
deleted file mode 100644
index 989bde26d3c..00000000000
--- a/storage/spider/mysql-test/spider/handler/t/test_deinit.inc
+++ /dev/null
@@ -1,37 +0,0 @@
-# get connection and exist engine test
---echo for master_1
---connection master_1
---source ../include/deinit_master_1.inc
---disconnect master_1
---echo for child2
-if ($USE_CHILD_GROUP2)
-{
- --echo child2_1
- --connection child2_1
- --source ../include/deinit_child2_1.inc
- --disconnect child2_1
- --echo child2_2
- --connection child2_2
- --source ../include/deinit_child2_2.inc
- --disconnect child2_2
- --echo child2_3
- --connection child2_3
- --source ../include/deinit_child2_3.inc
- --disconnect child2_3
-}
---echo for child3
-if ($USE_CHILD_GROUP3)
-{
- --echo child3_1
- --connection child3_1
- --source ../include/deinit_child3_1.inc
- --disconnect child3_1
- --echo child3_2
- --connection child3_2
- --source ../include/deinit_child3_2.inc
- --disconnect child3_2
- --echo child3_3
- --connection child3_3
- --source ../include/deinit_child3_3.inc
- --disconnect child3_3
-}
diff --git a/storage/spider/mysql-test/spider/handler/t/test_init.inc b/storage/spider/mysql-test/spider/handler/t/test_init.inc
deleted file mode 100644
index f2cd6c0269f..00000000000
--- a/storage/spider/mysql-test/spider/handler/t/test_init.inc
+++ /dev/null
@@ -1,74 +0,0 @@
-# get connection and exist engine test
---echo for master_1
---source connect_master_1.inc
---connection master_1
-CALL mtr.add_suppression("unknown variable");
-SET SESSION sql_log_bin= 0;
---let $MASTER_1_SERVER_ID=`SELECT @@global.server_id`
---let $TEST_ENGINE_TYPE= $MASTER_1_ENGINE_TYPE
---source have_partition.inc
---source have_trigger.inc
---source ../include/init_master_1.inc
---source have_engine.inc
---echo for child2
-if ($USE_CHILD_GROUP2)
-{
- --echo child2_1
- --source connect_child2_1.inc
- --connection child2_1
- CALL mtr.add_suppression("unknown variable *");
- SET SESSION sql_log_bin= 0;
- --let $CHILD2_1_SERVER_ID=`SELECT @@global.server_id`
- --let $TEST_ENGINE_TYPE= $CHILD2_1_ENGINE_TYPE
- --source ../include/init_child2_1.inc
- --source have_engine.inc
- --echo child2_2
- --source connect_child2_2.inc
- --connection child2_2
- CALL mtr.add_suppression("unknown variable *");
- SET SESSION sql_log_bin= 0;
- --let $CHILD2_2_SERVER_ID=`SELECT @@global.server_id`
- --let $TEST_ENGINE_TYPE= $CHILD2_2_ENGINE_TYPE
- --source ../include/init_child2_2.inc
- --source have_engine.inc
- --echo child2_3
- --source connect_child2_3.inc
- --connection child2_3
- CALL mtr.add_suppression("unknown variable *");
- SET SESSION sql_log_bin= 0;
- --let $CHILD2_3_SERVER_ID=`SELECT @@global.server_id`
- --let $TEST_ENGINE_TYPE= $CHILD2_3_ENGINE_TYPE
- --source ../include/init_child2_3.inc
- --source have_engine.inc
-}
---echo for child3
-if ($USE_CHILD_GROUP3)
-{
- --echo child3_1
- --source connect_child3_1.inc
- --connection child3_1
- CALL mtr.add_suppression("unknown variable *");
- SET SESSION sql_log_bin= 0;
- --let $CHILD3_1_SERVER_ID=`SELECT @@global.server_id`
- --let $TEST_ENGINE_TYPE= $CHILD3_1_ENGINE_TYPE
- --source ../include/init_child3_1.inc
- --source have_engine.inc
- --echo child3_2
- --source connect_child3_2.inc
- --connection child3_2
- CALL mtr.add_suppression("unknown variable *");
- SET SESSION sql_log_bin= 0;
- --let $CHILD3_2_SERVER_ID=`SELECT @@global.server_id`
- --let $TEST_ENGINE_TYPE= $CHILD3_2_ENGINE_TYPE
- --source ../include/init_child3_2.inc
- --source have_engine.inc
- --echo child3_3
- --source connect_child3_3.inc
- --connection child3_3
- CALL mtr.add_suppression("unknown variable *");
- SET SESSION sql_log_bin= 0;
- --let $CHILD3_3_SERVER_ID=`SELECT @@global.server_id`
- --let $TEST_ENGINE_TYPE= $CHILD3_3_ENGINE_TYPE
- --source ../include/init_child3_3.inc
- --source have_engine.inc
-}
diff --git a/storage/spider/mysql-test/spider/handler/t/vp_fixes.test b/storage/spider/mysql-test/spider/handler/t/vp_fixes.test
deleted file mode 100644
index 2c3e1523611..00000000000
--- a/storage/spider/mysql-test/spider/handler/t/vp_fixes.test
+++ /dev/null
@@ -1,335 +0,0 @@
-# This test tests for VP's bug fixes
---disable_warnings
---disable_query_log
---disable_result_log
---source test_init.inc
---enable_result_log
---enable_query_log
-
---echo
---echo drop and create databases
---connection master_1
-DROP DATABASE IF EXISTS auto_test_local;
-CREATE DATABASE auto_test_local;
-USE auto_test_local;
-if ($USE_CHILD_GROUP2)
-{
- --connection child2_1
- DROP DATABASE IF EXISTS auto_test_remote;
- CREATE DATABASE auto_test_remote;
- USE auto_test_remote;
- --connection child2_2
- DROP DATABASE IF EXISTS auto_test_remote2;
- CREATE DATABASE auto_test_remote2;
- USE auto_test_remote2;
-}
---enable_warnings
-
---echo
---echo test select 1
---connection master_1
-SELECT 1;
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- SELECT 1;
- --connection child2_2
- SELECT 1;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
-
---echo
---echo create table and insert
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- echo CHILD2_1_DROP_TABLES;
- echo CHILD2_1_CREATE_TABLES;
- }
- --disable_warnings
- eval $CHILD2_1_DROP_TABLES;
- --enable_warnings
- eval $CHILD2_1_CREATE_TABLES;
- if ($OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- }
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
---disable_warnings
-DROP TABLE IF EXISTS tb_l;
---enable_warnings
---disable_query_log
-echo CREATE TABLE tb_l (
- a INT,
- b CHAR(1),
- c DATETIME,
- PRIMARY KEY(a)
-) MASTER_1_ENGINE2 MASTER_1_CHARSET2;
-eval CREATE TABLE tb_l (
- a INT,
- b CHAR(1),
- c DATETIME,
- PRIMARY KEY(a)
-) $MASTER_1_ENGINE2 $MASTER_1_CHARSET2;
---enable_query_log
-INSERT INTO tb_l (a, b, c) VALUES
- (1, 'a', '2008-08-01 10:21:39'),
- (2, 'b', '2000-01-01 00:00:00'),
- (3, 'e', '2007-06-04 20:03:11'),
- (4, 'd', '2003-11-30 05:01:03'),
- (5, 'c', '2001-12-31 23:59:59');
---disable_warnings
-DROP TABLE IF EXISTS ta_l;
---enable_warnings
---disable_query_log
-echo CREATE TABLE ta_l (
- PRIMARY KEY(a)
-) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT_2_1;
-eval CREATE TABLE ta_l (
- a INT,
- b CHAR(1),
- c DATETIME,
- PRIMARY KEY(a)
-) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_2_1;
---enable_query_log
-INSERT INTO ta_l SELECT a, b, c FROM tb_l;
-
---echo
---echo 0.9
---echo create different primary key table
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_result_log
- }
- --disable_query_log
- --connection child2_1
- if ($OUTPUT_CHILD_GROUP2)
- {
- echo CHILD2_1_DROP_TABLES5;
- echo CHILD2_1_CREATE_TABLES5;
- }
- --disable_warnings
- eval $CHILD2_1_DROP_TABLES5;
- --enable_warnings
- eval $CHILD2_1_CREATE_TABLES5;
- --enable_query_log
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_result_log
- }
-}
---connection master_1
---disable_query_log
-echo CREATE TABLE ta_l_int (
- a INT DEFAULT 10,
- b INT AUTO_INCREMENT,
- c INT DEFAULT 11,
- PRIMARY KEY(b)
-) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT4_2_1;
-eval CREATE TABLE ta_l_int (
- a INT DEFAULT 10,
- b INT AUTO_INCREMENT,
- c INT DEFAULT 11,
- PRIMARY KEY(b)
-) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT4_2_1;
---enable_query_log
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
---let $MASTER_1_IS_VP= `SELECT IF('$MASTER_1_ENGINE_TYPE' = 'VP', 1, 0)`
-if ($MASTER_1_IS_VP)
-{
- --error 14514
- INSERT INTO ta_l_int (a, b, c) VALUES (2, NULL, 3);
-}
-if (!$MASTER_1_IS_VP)
-{
- INSERT INTO ta_l_int (a, b, c) VALUES (2, NULL, 3);
- --disable_query_log
- --disable_result_log
- TRUNCATE TABLE ta_l_int;
- --enable_query_log
- --enable_result_log
-}
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%insert %';
- }
- eval $CHILD2_1_SELECT_TABLES5;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
-
---echo create un-correspond primary key table
---connection master_1
---disable_warnings
-DROP TABLE IF EXISTS ta_l_int;
---enable_warnings
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_result_log
- }
- --disable_query_log
- --connection child2_1
- if ($OUTPUT_CHILD_GROUP2)
- {
- echo CHILD2_1_DROP_TABLES5;
- echo CHILD2_1_CREATE_TABLES5;
- }
- --disable_warnings
- eval $CHILD2_1_DROP_TABLES5;
- --enable_warnings
- eval $CHILD2_1_CREATE_TABLES5;
- --enable_query_log
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_result_log
- }
-}
---connection master_1
---disable_query_log
-echo CREATE TABLE ta_l_int (
- a INT DEFAULT 10,
- b INT DEFAULT 12,
- c INT DEFAULT 11,
- PRIMARY KEY(c)
-) MASTER_1_ENGINE MASTER_1_CHARSET MASTER_1_COMMENT4_2_1;
-eval CREATE TABLE ta_l_int (
- a INT DEFAULT 10,
- b INT DEFAULT 12,
- c INT DEFAULT 11,
- PRIMARY KEY(c)
-) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT4_2_1;
---enable_query_log
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- TRUNCATE TABLE mysql.general_log;
- }
- eval $CHILD2_1_SELECT_TABLES;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
---connection master_1
-if ($MASTER_1_IS_VP)
-{
- --error 14514
- INSERT INTO ta_l_int (a, b, c) VALUES (2, NULL, 3);
-}
-if (!$MASTER_1_IS_VP)
-{
- INSERT INTO ta_l_int (a, b, c) VALUES (2, NULL, 3);
- --disable_query_log
- --disable_result_log
- TRUNCATE TABLE ta_l_int;
- --enable_query_log
- --enable_result_log
-}
-if ($USE_CHILD_GROUP2)
-{
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --disable_query_log
- --disable_result_log
- }
- --connection child2_1
- if ($USE_GENERAL_LOG)
- {
- SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%insert %';
- }
- eval $CHILD2_1_SELECT_TABLES5;
- if (!$OUTPUT_CHILD_GROUP2)
- {
- --enable_query_log
- --enable_result_log
- }
-}
-
---echo
---echo deinit
---disable_warnings
---connection master_1
-DROP DATABASE IF EXISTS auto_test_local;
-if ($USE_CHILD_GROUP2)
-{
- --connection child2_1
- DROP DATABASE IF EXISTS auto_test_remote;
- --connection child2_2
- DROP DATABASE IF EXISTS auto_test_remote2;
-}
---disable_query_log
---disable_result_log
---source test_deinit.inc
---enable_result_log
---enable_query_log
---enable_warnings
---echo
---echo end of test
diff --git a/storage/spider/mysql-test/spider/r/partition_mrr.result b/storage/spider/mysql-test/spider/r/partition_mrr.result
index c7e17698421..c1b7d6e6a4a 100644
--- a/storage/spider/mysql-test/spider/r/partition_mrr.result
+++ b/storage/spider/mysql-test/spider/r/partition_mrr.result
@@ -104,11 +104,47 @@ pkey
21
26
27
+SELECT a.pkey FROM tbl_a a, tbl_b b WHERE a.pkey+0 = b.pkey+0 ORDER BY a.pkey;
+pkey
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
connection child2_1;
SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %';
argument
select `pkey` from `auto_test_remote`.`tbl_a` order by `pkey`
select a.id,b.`pkey` from auto_test_remote.tmp_spider_bka_xxxx a,`auto_test_remote`.`tbl_b` b where a.c0 <=> b.`pkey`
+select `pkey` from `auto_test_remote`.`tbl_a` order by `pkey`
+select `pkey` from `auto_test_remote`.`tbl_b` order by `pkey`
+select `pkey` from `auto_test_remote`.`tbl_b` order by `pkey`
+select `pkey` from `auto_test_remote`.`tbl_b` order by `pkey`
SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %'
SELECT pkey FROM tbl_a ORDER BY pkey ;
SELECT pkey FROM tbl_b ORDER BY pkey;
@@ -139,6 +175,10 @@ SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argum
argument
select `pkey` from `auto_test_remote2`.`tbl_a` order by `pkey`
select a.id,b.`pkey` from auto_test_remote2.tmp_spider_bka_xxxx a,`auto_test_remote2`.`tbl_b` b where a.c0 <=> b.`pkey`
+select `pkey` from `auto_test_remote2`.`tbl_a` order by `pkey`
+select `pkey` from `auto_test_remote2`.`tbl_b` order by `pkey`
+select `pkey` from `auto_test_remote2`.`tbl_b` order by `pkey`
+select `pkey` from `auto_test_remote2`.`tbl_b` order by `pkey`
SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %'
SELECT pkey FROM tbl_a ORDER BY pkey ;
SELECT pkey FROM tbl_b ORDER BY pkey;
@@ -169,6 +209,10 @@ SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argum
argument
select `pkey` from `auto_test_remote3`.`tbl_a` order by `pkey`
select a.id,b.`pkey` from auto_test_remote3.tmp_spider_bka_xxxx a,`auto_test_remote3`.`tbl_b` b where a.c0 <=> b.`pkey`
+select `pkey` from `auto_test_remote3`.`tbl_a` order by `pkey`
+select `pkey` from `auto_test_remote3`.`tbl_b` order by `pkey`
+select `pkey` from `auto_test_remote3`.`tbl_b` order by `pkey`
+select `pkey` from `auto_test_remote3`.`tbl_b` order by `pkey`
SELECT argument FROM mysql.general_log WHERE command_type != 'Execute' AND argument LIKE '%select %'
SELECT pkey FROM tbl_a ORDER BY pkey ;
SELECT pkey FROM tbl_b ORDER BY pkey;
diff --git a/storage/spider/mysql-test/spider/r/variable_deprecation.result b/storage/spider/mysql-test/spider/r/variable_deprecation.result
index cc267f7d363..cea36ff2240 100644
--- a/storage/spider/mysql-test/spider/r/variable_deprecation.result
+++ b/storage/spider/mysql-test/spider/r/variable_deprecation.result
@@ -13,21 +13,6 @@ child3_3
connection master_1;
CREATE DATABASE auto_test_local;
USE auto_test_local;
-# MDEV-27923 Deprecate spider_use_handler
-SET spider_use_handler = 3;
-Warnings:
-Warning 1287 '@@spider_use_handler' is deprecated and will be removed in a future release
-SHOW VARIABLES LIKE "spider_use_handler";
-Variable_name Value
-spider_use_handler 3
-CREATE TABLE tbl_a (a INT) ENGINE=Spider COMMENT='uhd "3"';
-Warnings:
-Warning 1287 The table parameter 'uhd' is deprecated and will be removed in a future release
-CREATE TABLE tbl_b (a INT) ENGINE=Spider COMMENT='use_handler "3"';
-Warnings:
-Warning 1287 The table parameter 'use_handler' is deprecated and will be removed in a future release
-DROP TABLE tbl_a;
-DROP TABLE tbl_b;
# MDEV-28297 Deprecate spider_internal_offset
SET spider_internal_offset = 1;
Warnings:
@@ -43,37 +28,6 @@ Warnings:
Warning 1287 The table parameter 'internal_offset' is deprecated and will be removed in a future release
DROP TABLE tbl_a;
DROP TABLE tbl_b;
-# MDEV-28005 Deprecate Spider plugin variables regarding UDFs
-SET GLOBAL spider_udf_ds_bulk_insert_rows = 1;
-Warnings:
-Warning 1287 '@@spider_udf_ds_bulk_insert_rows' is deprecated and will be removed in a future release
-SHOW VARIABLES LIKE "spider_udf_ds_bulk_insert_rows";
-Variable_name Value
-spider_udf_ds_bulk_insert_rows -1
-SET spider_udf_ds_table_loop_mode = 1;
-Warnings:
-Warning 1287 '@@spider_udf_ds_table_loop_mode' is deprecated and will be removed in a future release
-SHOW VARIABLES LIKE "spider_udf_ds_table_loop_mode";
-Variable_name Value
-spider_udf_ds_table_loop_mode 1
-SET spider_udf_ds_use_real_table = 1;
-Warnings:
-Warning 1287 '@@spider_udf_ds_use_real_table' is deprecated and will be removed in a future release
-SHOW VARIABLES LIKE "spider_udf_ds_use_real_table";
-Variable_name Value
-spider_udf_ds_use_real_table 1
-SET GLOBAL spider_udf_ct_bulk_insert_interval = 1;
-Warnings:
-Warning 1287 '@@spider_udf_ct_bulk_insert_interval' is deprecated and will be removed in a future release
-SHOW VARIABLES LIKE "spider_udf_ct_bulk_insert_interval";
-Variable_name Value
-spider_udf_ct_bulk_insert_interval 1
-SET GLOBAL spider_udf_ct_bulk_insert_rows = 1;
-Warnings:
-Warning 1287 '@@spider_udf_ct_bulk_insert_rows' is deprecated and will be removed in a future release
-SHOW VARIABLES LIKE "spider_udf_ct_bulk_insert_rows";
-Variable_name Value
-spider_udf_ct_bulk_insert_rows 1
# MDEV-27981 Deprecate spider_internal_limit
SET spider_internal_limit = 1;
Warnings:
diff --git a/storage/spider/mysql-test/spider/t/partition_mrr.test b/storage/spider/mysql-test/spider/t/partition_mrr.test
index 710e2781242..23f4fdb6e27 100644
--- a/storage/spider/mysql-test/spider/t/partition_mrr.test
+++ b/storage/spider/mysql-test/spider/t/partition_mrr.test
@@ -169,6 +169,7 @@ if ($USE_CHILD_GROUP2)
}
--connection master_1
SELECT a.pkey FROM tbl_a a, tbl_b b WHERE a.pkey = b.pkey;
+SELECT a.pkey FROM tbl_a a, tbl_b b WHERE a.pkey+0 = b.pkey+0 ORDER BY a.pkey; # MDEV-29947
if ($USE_CHILD_GROUP2)
{
if (!$OUTPUT_CHILD_GROUP2)
diff --git a/storage/spider/mysql-test/spider/t/variable_deprecation.test b/storage/spider/mysql-test/spider/t/variable_deprecation.test
index 1521a60b7cb..3ed8dcf5ec6 100644
--- a/storage/spider/mysql-test/spider/t/variable_deprecation.test
+++ b/storage/spider/mysql-test/spider/t/variable_deprecation.test
@@ -12,14 +12,6 @@
CREATE DATABASE auto_test_local;
USE auto_test_local;
---echo # MDEV-27923 Deprecate spider_use_handler
-SET spider_use_handler = 3;
-SHOW VARIABLES LIKE "spider_use_handler";
-eval CREATE TABLE tbl_a (a INT) $MASTER_1_ENGINE COMMENT='uhd "3"';
-eval CREATE TABLE tbl_b (a INT) $MASTER_1_ENGINE COMMENT='use_handler "3"';
-DROP TABLE tbl_a;
-DROP TABLE tbl_b;
-
--echo # MDEV-28297 Deprecate spider_internal_offset
SET spider_internal_offset = 1;
SHOW VARIABLES LIKE "spider_internal_offset";
@@ -29,22 +21,6 @@ eval CREATE TABLE tbl_b (a INT) $MASTER_1_ENGINE COMMENT='internal_offset "1"';
DROP TABLE tbl_a;
DROP TABLE tbl_b;
---echo # MDEV-28005 Deprecate Spider plugin variables regarding UDFs
-SET GLOBAL spider_udf_ds_bulk_insert_rows = 1;
-SHOW VARIABLES LIKE "spider_udf_ds_bulk_insert_rows";
-
-SET spider_udf_ds_table_loop_mode = 1;
-SHOW VARIABLES LIKE "spider_udf_ds_table_loop_mode";
-
-SET spider_udf_ds_use_real_table = 1;
-SHOW VARIABLES LIKE "spider_udf_ds_use_real_table";
-
-SET GLOBAL spider_udf_ct_bulk_insert_interval = 1;
-SHOW VARIABLES LIKE "spider_udf_ct_bulk_insert_interval";
-
-SET GLOBAL spider_udf_ct_bulk_insert_rows = 1;
-SHOW VARIABLES LIKE "spider_udf_ct_bulk_insert_rows";
-
--echo # MDEV-27981 Deprecate spider_internal_limit
SET spider_internal_limit = 1;
SHOW VARIABLES LIKE "spider_internal_limit";
diff --git a/storage/spider/spd_conn.cc b/storage/spider/spd_conn.cc
index feb3cab6a7f..0f252012bd9 100644
--- a/storage/spider/spd_conn.cc
+++ b/storage/spider/spd_conn.cc
@@ -2168,8 +2168,6 @@ int spider_bg_conn_search(
result_list->split_read ?
result_list->split_read :
result_list->internal_limit - result_list->record_num;
- DBUG_PRINT("info",("spider sql_kinds=%u", spider->sql_kinds));
- if (spider->sql_kinds & SPIDER_SQL_KIND_SQL)
{
if ((error_num = spider->reappend_limit_sql_part(
result_list->internal_offset + result_list->record_num,
@@ -2188,17 +2186,6 @@ int spider_bg_conn_search(
DBUG_RETURN(error_num);
}
}
- if (spider->sql_kinds & SPIDER_SQL_KIND_HANDLER)
- {
- spider_db_append_handler_next(spider);
- if ((error_num = spider->reappend_limit_sql_part(
- 0, result_list->limit_num,
- SPIDER_SQL_TYPE_HANDLER)))
- {
- pthread_mutex_unlock(&conn->bg_conn_mutex);
- DBUG_RETURN(error_num);
- }
- }
}
result_list->bgs_phase = 2;
if (conn->db_conn->limit_mode() == 1)
@@ -2317,8 +2304,6 @@ int spider_bg_conn_search(
result_list->split_read ?
result_list->split_read :
result_list->internal_limit - result_list->record_num;
- DBUG_PRINT("info",("spider sql_kinds=%u", spider->sql_kinds));
- if (spider->sql_kinds & SPIDER_SQL_KIND_SQL)
{
if ((error_num = spider->reappend_limit_sql_part(
result_list->internal_offset + result_list->record_num,
@@ -2337,17 +2322,6 @@ int spider_bg_conn_search(
DBUG_RETURN(error_num);
}
}
- if (spider->sql_kinds & SPIDER_SQL_KIND_HANDLER)
- {
- spider_db_append_handler_next(spider);
- if ((error_num = spider->reappend_limit_sql_part(
- 0, result_list->limit_num,
- SPIDER_SQL_TYPE_HANDLER)))
- {
- pthread_mutex_unlock(&conn->bg_conn_mutex);
- DBUG_RETURN(error_num);
- }
- }
if (conn->db_conn->limit_mode() == 1)
{
conn->db_conn->set_limit(result_list->limit_num);
@@ -2549,12 +2523,7 @@ void *spider_bg_conn_action(
!result_list->bgs_current->result
) {
ulong sql_type;
- if (spider->sql_kind[conn->link_idx] == SPIDER_SQL_KIND_SQL)
- {
- sql_type = SPIDER_SQL_TYPE_SELECT_SQL | SPIDER_SQL_TYPE_TMP_SQL;
- } else {
- sql_type = SPIDER_SQL_TYPE_HANDLER;
- }
+ sql_type= SPIDER_SQL_TYPE_SELECT_SQL | SPIDER_SQL_TYPE_TMP_SQL;
pthread_mutex_assert_not_owner(&conn->mta_conn_mutex);
if (dbton_handler->need_lock_before_set_sql_for_exec(sql_type))
{
@@ -3937,91 +3906,6 @@ bool spider_conn_check_recovery_link(
DBUG_RETURN(FALSE);
}
-bool spider_conn_use_handler(
- ha_spider *spider,
- int lock_mode,
- int link_idx
-) {
- THD *thd = spider->wide_handler->trx->thd;
- int use_handler = spider_param_use_handler(thd,
- spider->share->use_handlers[link_idx]);
- DBUG_ENTER("spider_conn_use_handler");
- DBUG_PRINT("info",("spider use_handler=%d", use_handler));
- DBUG_PRINT("info",("spider spider->conn_kind[link_idx]=%u",
- spider->conn_kind[link_idx]));
- if (spider->do_direct_update)
- {
- spider->sql_kinds |= SPIDER_SQL_KIND_SQL;
- spider->sql_kind[link_idx] = SPIDER_SQL_KIND_SQL;
- spider->direct_update_kinds |= SPIDER_SQL_KIND_SQL;
- DBUG_PRINT("info",("spider FALSE by using direct_update"));
- DBUG_RETURN(FALSE);
- }
- if (spider->use_spatial_index)
- {
- DBUG_PRINT("info",("spider FALSE by use_spatial_index"));
- spider->sql_kinds |= SPIDER_SQL_KIND_SQL;
- spider->sql_kind[link_idx] = SPIDER_SQL_KIND_SQL;
- DBUG_RETURN(FALSE);
- }
- uint dbton_id;
- spider_db_handler *dbton_hdl;
- dbton_id = spider->share->sql_dbton_ids[spider->conn_link_idx[link_idx]];
- dbton_hdl = spider->dbton_handler[dbton_id];
- if (!dbton_hdl->support_use_handler(use_handler))
- {
- DBUG_PRINT("info",("spider FALSE by dbton"));
- spider->sql_kinds |= SPIDER_SQL_KIND_SQL;
- spider->sql_kind[link_idx] = SPIDER_SQL_KIND_SQL;
- DBUG_RETURN(FALSE);
- }
- if (
- spider->wide_handler->sql_command == SQLCOM_HA_READ &&
- (
- !(use_handler & 2) ||
- (
- spider_param_sync_trx_isolation(thd) &&
- thd_tx_isolation(thd) == ISO_SERIALIZABLE
- )
- )
- ) {
- DBUG_PRINT("info",("spider TRUE by HA"));
- spider->sql_kinds |= SPIDER_SQL_KIND_HANDLER;
- spider->sql_kind[link_idx] = SPIDER_SQL_KIND_HANDLER;
- DBUG_RETURN(TRUE);
- }
- if (
- spider->wide_handler->sql_command != SQLCOM_HA_READ &&
- lock_mode == SPIDER_LOCK_MODE_NO_LOCK &&
- spider_param_sync_trx_isolation(thd) &&
- thd_tx_isolation(thd) != ISO_SERIALIZABLE &&
- (use_handler & 1)
- ) {
- DBUG_PRINT("info",("spider TRUE by PARAM"));
- spider->sql_kinds |= SPIDER_SQL_KIND_HANDLER;
- spider->sql_kind[link_idx] = SPIDER_SQL_KIND_HANDLER;
- DBUG_RETURN(TRUE);
- }
- spider->sql_kinds |= SPIDER_SQL_KIND_SQL;
- spider->sql_kind[link_idx] = SPIDER_SQL_KIND_SQL;
- DBUG_RETURN(FALSE);
-}
-
-bool spider_conn_need_open_handler(
- ha_spider *spider,
- uint idx,
- int link_idx
-) {
- DBUG_ENTER("spider_conn_need_open_handler");
- DBUG_PRINT("info",("spider spider=%p", spider));
- if (spider->handler_opened(link_idx, spider->conn_kind[link_idx]))
- {
- DBUG_PRINT("info",("spider HA already opened"));
- DBUG_RETURN(FALSE);
- }
- DBUG_RETURN(TRUE);
-}
-
SPIDER_CONN* spider_get_conn_from_idle_connection(
SPIDER_SHARE *share,
int link_idx,
diff --git a/storage/spider/spd_conn.h b/storage/spider/spd_conn.h
index 53c10572687..807e1474ed2 100644
--- a/storage/spider/spd_conn.h
+++ b/storage/spider/spd_conn.h
@@ -390,18 +390,6 @@ bool spider_conn_check_recovery_link(
SPIDER_SHARE *share
);
-bool spider_conn_use_handler(
- ha_spider *spider,
- int lock_mode,
- int link_idx
-);
-
-bool spider_conn_need_open_handler(
- ha_spider *spider,
- uint idx,
- int link_idx
-);
-
SPIDER_IP_PORT_CONN *spider_create_ipport_conn(SPIDER_CONN *conn);
SPIDER_CONN* spider_get_conn_from_idle_connection
(
diff --git a/storage/spider/spd_copy_tables.cc b/storage/spider/spd_copy_tables.cc
index 4b2f5174ce0..eb2454b2f29 100644
--- a/storage/spider/spd_copy_tables.cc
+++ b/storage/spider/spd_copy_tables.cc
@@ -1000,8 +1000,7 @@ long long spider_copy_tables_body(
else
copy_tables->access_charset = system_charset_info;
- bulk_insert_rows = spider_param_udf_ct_bulk_insert_rows(
- copy_tables->bulk_insert_rows);
+ bulk_insert_rows= copy_tables->bulk_insert_rows;
for (src_tbl_conn = copy_tables->table_conn[0]; src_tbl_conn;
src_tbl_conn = src_tbl_conn->next)
{
diff --git a/storage/spider/spd_db_conn.cc b/storage/spider/spd_db_conn.cc
index 055dcd984b1..b64aaab4d58 100644
--- a/storage/spider/spd_db_conn.cc
+++ b/storage/spider/spd_db_conn.cc
@@ -169,7 +169,6 @@ int spider_db_connect(
conn->connect_error = 0;
conn->opened_handlers = 0;
- conn->db_conn->reset_opened_handler();
++conn->connection_id;
/* Set the connection's time zone to UTC */
@@ -1344,11 +1343,7 @@ int spider_db_append_name_with_quote_str_internal(
for (name_end = name + length; name < name_end; name += length)
{
head_code = *name;
-#ifdef SPIDER_HAS_MY_CHARLEN
if ((length = my_ci_charlen(cs, (const uchar *) name, (const uchar *) name_end)) < 1)
-#else
- if (!(length = my_mbcharlen(cs, (uchar) head_code)))
-#endif
{
my_message(ER_SPIDER_WRONG_CHARACTER_IN_NAME_NUM,
ER_SPIDER_WRONG_CHARACTER_IN_NAME_STR, MYF(0));
@@ -1377,18 +1372,11 @@ int spider_db_append_select(
int error_num;
DBUG_ENTER("spider_db_append_select");
- if (spider->sql_kinds & SPIDER_SQL_KIND_SQL)
{
if ((error_num = spider->append_select_sql_part(
SPIDER_SQL_TYPE_SELECT_SQL)))
DBUG_RETURN(error_num);
}
- if (spider->sql_kinds & SPIDER_SQL_KIND_HANDLER)
- {
- if ((error_num = spider->append_select_sql_part(
- SPIDER_SQL_TYPE_HANDLER)))
- DBUG_RETURN(error_num);
- }
DBUG_RETURN(0);
}
@@ -1398,7 +1386,6 @@ int spider_db_append_select_columns(
int error_num;
SPIDER_RESULT_LIST *result_list = &spider->result_list;
DBUG_ENTER("spider_db_append_select_columns");
- if (spider->sql_kinds & SPIDER_SQL_KIND_SQL)
{
if (
result_list->direct_aggregate &&
@@ -1427,11 +1414,6 @@ int spider_db_append_select_columns(
DBUG_RETURN(error_num);
}
}
- if (spider->sql_kinds & SPIDER_SQL_KIND_HANDLER)
- {
- if ((error_num = spider->append_from_sql_part(SPIDER_SQL_TYPE_HANDLER)))
- DBUG_RETURN(error_num);
- }
DBUG_RETURN(0);
}
@@ -1548,7 +1530,6 @@ int spider_db_append_hint_after_table(
spider_string *hint
) {
DBUG_ENTER("spider_db_append_hint_after_table");
- if (spider->sql_kinds & SPIDER_SQL_KIND_SQL)
{
if (str->append(*hint))
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
@@ -1588,19 +1569,9 @@ int spider_db_append_key_where_internal(
KEY_PART_INFO *key_part;
Field *field;
bool use_both = TRUE, key_eq;
- uint sql_kind;
spider_db_handler *dbton_hdl = spider->dbton_handler[dbton_id];
spider_db_share *dbton_share = share->dbton_share[dbton_id];
DBUG_ENTER("spider_db_append_key_where_internal");
- switch (sql_type)
- {
- case SPIDER_SQL_TYPE_HANDLER:
- sql_kind = SPIDER_SQL_KIND_HANDLER;
- break;
- default:
- sql_kind = SPIDER_SQL_KIND_SQL;
- break;
- }
if (key_info)
full_key_part_map =
@@ -1632,46 +1603,6 @@ int spider_db_append_key_where_internal(
MY_BITMAP *tmp_map = dbug_tmp_use_all_columns(table, &table->read_set);
#endif
- if (sql_kind == SPIDER_SQL_KIND_HANDLER)
- {
-#ifdef SPIDER_use_LEX_CSTRING_for_KEY_Field_name
- const char *key_name = key_info->name.str;
- key_name_length = key_info->name.length;
-#else
- const char *key_name = key_info->name;
- key_name_length = strlen(key_name);
-#endif
- if (str->reserve(SPIDER_SQL_READ_LEN +
- /* SPIDER_SQL_NAME_QUOTE_LEN */ 2 + key_name_length))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- str->q_append(SPIDER_SQL_READ_STR, SPIDER_SQL_READ_LEN);
- if ((error_num = spider_dbton[dbton_id].db_util->
- append_name(str, key_name, key_name_length)))
- {
- DBUG_RETURN(error_num);
- }
- dbton_hdl->set_order_pos(SPIDER_SQL_TYPE_HANDLER);
- if (
- (start_key_part_map || end_key_part_map) &&
- !(use_both && (!start_key_part_map || !end_key_part_map))
- ) {
- if (str_part->reserve(SPIDER_SQL_OPEN_PAREN_LEN))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- str_part->q_append(SPIDER_SQL_OPEN_PAREN_STR, SPIDER_SQL_OPEN_PAREN_LEN);
- result_list->ha_read_kind = 0;
- } else if (!result_list->desc_flg)
- {
- if (str->reserve(SPIDER_SQL_FIRST_LEN))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- str->q_append(SPIDER_SQL_FIRST_STR, SPIDER_SQL_FIRST_LEN);
- result_list->ha_read_kind = 1;
- } else {
- if (str->reserve(SPIDER_SQL_LAST_LEN))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- str->q_append(SPIDER_SQL_LAST_STR, SPIDER_SQL_LAST_LEN);
- result_list->ha_read_kind = 2;
- }
- }
if (!start_key_part_map && !end_key_part_map)
{
result_list->key_order = 0;
@@ -1694,16 +1625,10 @@ int spider_db_append_key_where_internal(
if (start_key_part_map == end_key_part_map)
result_list->use_both_key = TRUE;
- if (sql_kind == SPIDER_SQL_KIND_SQL)
{
if (str->reserve(SPIDER_SQL_WHERE_LEN))
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
str->q_append(SPIDER_SQL_WHERE_STR, SPIDER_SQL_WHERE_LEN);
- } else if (sql_kind == SPIDER_SQL_KIND_HANDLER)
- {
- if (str_part2->reserve(SPIDER_SQL_WHERE_LEN))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- str_part2->q_append(SPIDER_SQL_WHERE_STR, SPIDER_SQL_WHERE_LEN);
}
for (
@@ -1763,18 +1688,14 @@ int spider_db_append_key_where_internal(
) {
if (error_num > 0)
DBUG_RETURN(error_num);
- if (
- !set_order &&
- start_key->flag != HA_READ_KEY_EXACT &&
- sql_kind == SPIDER_SQL_KIND_SQL
- ) {
+ if (!set_order && start_key->flag != HA_READ_KEY_EXACT)
+ {
result_list->key_order = key_count;
set_order = TRUE;
}
} else if (key_eq)
{
DBUG_PRINT("info", ("spider key_eq"));
- if (sql_kind == SPIDER_SQL_KIND_SQL)
{
if (str->reserve(store_length + key_name_length +
/* SPIDER_SQL_NAME_QUOTE_LEN */ 2 +
@@ -1785,259 +1706,116 @@ int spider_db_append_key_where_internal(
if (spider_dbton[dbton_id].db_util->append_column_value(
spider, str, field, ptr, FALSE, share->access_charset))
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- } else if (sql_kind == SPIDER_SQL_KIND_HANDLER)
- {
- if (str_part2->reserve(store_length + key_name_length +
- /* SPIDER_SQL_NAME_QUOTE_LEN */ 2 +
- SPIDER_SQL_EQUAL_LEN + SPIDER_SQL_AND_LEN))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- dbton_share->append_column_name(str_part2, field->field_index);
- str_part2->q_append(SPIDER_SQL_EQUAL_STR, SPIDER_SQL_EQUAL_LEN);
- if (spider_dbton[dbton_id].db_util->append_column_value(
- spider, str_part2, field, ptr, FALSE, share->access_charset))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
-
- if (use_key == start_key)
- {
- if (str_part->length() == SPIDER_SQL_OPEN_PAREN_LEN)
- {
- if (str->reserve(SPIDER_SQL_EQUAL_LEN))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- str->q_append(SPIDER_SQL_EQUAL_STR, SPIDER_SQL_EQUAL_LEN);
- if (spider_dbton[dbton_id].db_util->
- append_column_value(spider, str_part, field, ptr, false,
- share->access_charset))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- }
- }
}
} else {
DBUG_PRINT("info", ("spider start_key->flag=%d", start_key->flag));
+ const char *op_str;
+ uint32 op_len;
switch (start_key->flag)
{
case HA_READ_PREFIX_LAST:
result_list->desc_flg = TRUE;
/* fall through */
- case HA_READ_KEY_EXACT:
- if (sql_kind == SPIDER_SQL_KIND_SQL)
- {
- if (str->reserve(store_length + key_name_length +
- /* SPIDER_SQL_NAME_QUOTE_LEN */ 2))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
-
- dbton_share->append_column_name(str, field->field_index);
+ case HA_READ_KEY_EXACT: {
+ if (str->reserve(store_length + key_name_length +
+ /* SPIDER_SQL_NAME_QUOTE_LEN */ 2 +
+ SPIDER_SQL_EQUAL_LEN))
+ DBUG_RETURN(HA_ERR_OUT_OF_MEM);
+ dbton_share->append_column_name(str, field->field_index);
- bool is_like= MY_TEST(key_part->key_part_flag & HA_PART_KEY_SEG);
- if (is_like)
- {
- if (str->append(SPIDER_SQL_LIKE_STR, SPIDER_SQL_LIKE_LEN))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- }
- else
- {
- if (str->append(SPIDER_SQL_EQUAL_STR, SPIDER_SQL_EQUAL_LEN))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- }
- if (spider_dbton[dbton_id].db_util->append_column_value(
- spider, str, field, ptr, is_like, share->access_charset))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- } else if (sql_kind == SPIDER_SQL_KIND_HANDLER)
+ bool is_like= MY_TEST(key_part->key_part_flag & HA_PART_KEY_SEG);
+ if (is_like)
{
- if (str_part2->reserve(store_length + key_name_length +
- /* SPIDER_SQL_NAME_QUOTE_LEN */ 2 +
- SPIDER_SQL_EQUAL_LEN))
+ if (str->append(SPIDER_SQL_LIKE_STR, SPIDER_SQL_LIKE_LEN))
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- dbton_share->append_column_name(str_part2, field->field_index);
- str_part2->q_append(SPIDER_SQL_EQUAL_STR, SPIDER_SQL_EQUAL_LEN);
- if (spider_dbton[dbton_id].db_util->append_column_value(
- spider, str_part2, field, ptr, FALSE,
- share->access_charset))
+ }
+ else
+ {
+ if (str->append(SPIDER_SQL_EQUAL_STR, SPIDER_SQL_EQUAL_LEN))
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
-
- if (use_key == start_key)
- {
- if (str_part->length() == SPIDER_SQL_OPEN_PAREN_LEN)
- {
- if (str->reserve(SPIDER_SQL_EQUAL_LEN))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- str->q_append(SPIDER_SQL_EQUAL_STR, SPIDER_SQL_EQUAL_LEN);
- if (spider_dbton[dbton_id].db_util->
- append_column_value(spider, str_part, field, ptr, false,
- share->access_charset))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- }
- }
}
+ if (spider_dbton[dbton_id].db_util->append_column_value(
+ spider, str, field, ptr, is_like, share->access_charset))
+ DBUG_RETURN(HA_ERR_OUT_OF_MEM);
break;
+ }
case HA_READ_AFTER_KEY:
- if (sql_kind == SPIDER_SQL_KIND_SQL)
+ if (start_key_part_map == 1)
{
- const char* op_str;
- uint32 op_len;
- if (start_key_part_map == 1) {
- op_str = rev ? SPIDER_SQL_LT_STR : SPIDER_SQL_GT_STR;
- op_len = rev ? SPIDER_SQL_LT_LEN : SPIDER_SQL_GT_LEN;
- } else {
- op_str = rev ? SPIDER_SQL_LTEQUAL_STR : SPIDER_SQL_GTEQUAL_STR;
- op_len = rev ? SPIDER_SQL_LTEQUAL_LEN : SPIDER_SQL_GTEQUAL_LEN;
- }
- if (str->reserve(store_length + key_name_length +
- /* SPIDER_SQL_NAME_QUOTE_LEN */ 2 + op_len))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- dbton_share->append_column_name(str, field->field_index);
- str->q_append(op_str, op_len);
- if (spider_dbton[dbton_id].db_util->append_column_value(
- spider, str, field, ptr, FALSE, share->access_charset))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- if (use_both)
- start_key_part_map = 0;
- if (!set_order)
- {
- result_list->key_order = key_count;
- set_order = TRUE;
- }
- } else if (sql_kind == SPIDER_SQL_KIND_HANDLER)
+ op_str= rev ? SPIDER_SQL_LT_STR : SPIDER_SQL_GT_STR;
+ op_len= rev ? SPIDER_SQL_LT_LEN : SPIDER_SQL_GT_LEN;
+ }
+ else
{
- if (str_part2->reserve(store_length + key_name_length +
- /* SPIDER_SQL_NAME_QUOTE_LEN */ 2 +
- SPIDER_SQL_GT_LEN))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- dbton_share->append_column_name(str_part2, field->field_index);
- if (rev)
- str_part2->q_append(SPIDER_SQL_LT_STR, SPIDER_SQL_LT_LEN);
- else
- str_part2->q_append(SPIDER_SQL_GT_STR, SPIDER_SQL_GT_LEN);
- if (spider_dbton[dbton_id].db_util->
- append_column_value(spider, str_part2, field, ptr, false,
- share->access_charset))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
-
- if (use_key == start_key)
- {
- if (str_part->length() == SPIDER_SQL_OPEN_PAREN_LEN)
- {
- if (str->reserve(SPIDER_SQL_GT_LEN))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- str->q_append(SPIDER_SQL_GT_STR, SPIDER_SQL_GT_LEN);
- if (spider_dbton[dbton_id].db_util->
- append_column_value(spider, str_part, field, ptr, false,
- share->access_charset))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- }
- }
+ op_str= rev ? SPIDER_SQL_LTEQUAL_STR : SPIDER_SQL_GTEQUAL_STR;
+ op_len= rev ? SPIDER_SQL_LTEQUAL_LEN : SPIDER_SQL_GTEQUAL_LEN;
+ }
+ if (str->reserve(store_length + key_name_length +
+ /* SPIDER_SQL_NAME_QUOTE_LEN */ 2 + op_len))
+ DBUG_RETURN(HA_ERR_OUT_OF_MEM);
+ dbton_share->append_column_name(str, field->field_index);
+ str->q_append(op_str, op_len);
+ if (spider_dbton[dbton_id].db_util->
+ append_column_value(spider, str, field, ptr, false,
+ share->access_charset))
+ DBUG_RETURN(HA_ERR_OUT_OF_MEM);
+ if (use_both)
+ start_key_part_map= 0;
+ if (!set_order)
+ {
+ result_list->key_order= key_count;
+ set_order= TRUE;
}
break;
case HA_READ_BEFORE_KEY:
result_list->desc_flg = TRUE;
- if (sql_kind == SPIDER_SQL_KIND_SQL)
+ if (start_key_part_map == 1)
{
- const char* op_str;
- uint32 op_len;
- if (start_key_part_map == 1) {
- op_str = rev ? SPIDER_SQL_GT_STR : SPIDER_SQL_LT_STR;
- op_len = rev ? SPIDER_SQL_GT_LEN : SPIDER_SQL_LT_LEN;
- } else {
- op_str = rev ? SPIDER_SQL_GTEQUAL_STR : SPIDER_SQL_LTEQUAL_STR;
- op_len = rev ? SPIDER_SQL_GTEQUAL_LEN : SPIDER_SQL_LTEQUAL_LEN;
- }
- if (str->reserve(store_length + key_name_length +
- /* SPIDER_SQL_NAME_QUOTE_LEN */ 2 + op_len))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- dbton_share->append_column_name(str, field->field_index);
- str->q_append(op_str, op_len);
- if (spider_dbton[dbton_id].db_util->append_column_value(
- spider, str, field, ptr, FALSE, share->access_charset))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- if (use_both)
- start_key_part_map = 0;
- if (!set_order)
- {
- result_list->key_order = key_count;
- set_order = TRUE;
- }
- } else if (sql_kind == SPIDER_SQL_KIND_HANDLER)
+ op_str= rev ? SPIDER_SQL_GT_STR : SPIDER_SQL_LT_STR;
+ op_len= rev ? SPIDER_SQL_GT_LEN : SPIDER_SQL_LT_LEN;
+ }
+ else
{
- if (str_part2->reserve(store_length + key_name_length +
- /* SPIDER_SQL_NAME_QUOTE_LEN */ 2 +
- SPIDER_SQL_LT_LEN))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- dbton_share->append_column_name(str_part2, field->field_index);
- if (rev)
- str_part2->q_append(SPIDER_SQL_GT_STR, SPIDER_SQL_GT_LEN);
- else
- str_part2->q_append(SPIDER_SQL_LT_STR, SPIDER_SQL_LT_LEN);
- if (spider_dbton[dbton_id].db_util->
- append_column_value(spider, str_part2, field, ptr, false,
- share->access_charset))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
-
- if (use_key == start_key)
- {
- if (str_part->length() == SPIDER_SQL_OPEN_PAREN_LEN)
- {
- if (str->reserve(SPIDER_SQL_LT_LEN))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- str->q_append(SPIDER_SQL_LT_STR, SPIDER_SQL_LT_LEN);
- if (spider_dbton[dbton_id].db_util->
- append_column_value(spider, str_part, field, ptr, false,
- share->access_charset))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- }
- }
+ op_str= rev ? SPIDER_SQL_GTEQUAL_STR : SPIDER_SQL_LTEQUAL_STR;
+ op_len= rev ? SPIDER_SQL_GTEQUAL_LEN : SPIDER_SQL_LTEQUAL_LEN;
+ }
+ if (str->reserve(store_length + key_name_length +
+ /* SPIDER_SQL_NAME_QUOTE_LEN */ 2 + op_len))
+ DBUG_RETURN(HA_ERR_OUT_OF_MEM);
+ dbton_share->append_column_name(str, field->field_index);
+ str->q_append(op_str, op_len);
+ if (spider_dbton[dbton_id].db_util->
+ append_column_value(spider, str, field, ptr, false,
+ share->access_charset))
+ DBUG_RETURN(HA_ERR_OUT_OF_MEM);
+ if (use_both)
+ start_key_part_map= 0;
+ if (!set_order)
+ {
+ result_list->key_order= key_count;
+ set_order= TRUE;
}
break;
case HA_READ_KEY_OR_PREV:
case HA_READ_PREFIX_LAST_OR_PREV:
result_list->desc_flg = TRUE;
- if (sql_kind == SPIDER_SQL_KIND_SQL)
- {
- if (str->reserve(store_length + key_name_length +
- /* SPIDER_SQL_NAME_QUOTE_LEN */ 2 +
- SPIDER_SQL_LTEQUAL_LEN))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- dbton_share->append_column_name(str, field->field_index);
- if (rev)
- str->q_append(SPIDER_SQL_GTEQUAL_STR, SPIDER_SQL_GTEQUAL_LEN);
- else
- str->q_append(SPIDER_SQL_LTEQUAL_STR, SPIDER_SQL_LTEQUAL_LEN);
- if (spider_dbton[dbton_id].db_util->
- append_column_value(spider, str, field, ptr, false,
- share->access_charset))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- if (!set_order)
- {
- result_list->key_order = key_count;
- set_order = TRUE;
- }
- } else if (sql_kind == SPIDER_SQL_KIND_HANDLER)
+ if (str->reserve(store_length + key_name_length +
+ /* SPIDER_SQL_NAME_QUOTE_LEN */ 2 +
+ SPIDER_SQL_LTEQUAL_LEN))
+ DBUG_RETURN(HA_ERR_OUT_OF_MEM);
+ dbton_share->append_column_name(str, field->field_index);
+ if (rev)
+ str->q_append(SPIDER_SQL_GTEQUAL_STR, SPIDER_SQL_GTEQUAL_LEN);
+ else
+ str->q_append(SPIDER_SQL_LTEQUAL_STR, SPIDER_SQL_LTEQUAL_LEN);
+ if (spider_dbton[dbton_id].db_util->
+ append_column_value(spider, str, field, ptr, false,
+ share->access_charset))
+ DBUG_RETURN(HA_ERR_OUT_OF_MEM);
+ if (!set_order)
{
- if (str_part2->reserve(store_length + key_name_length +
- /* SPIDER_SQL_NAME_QUOTE_LEN */ 2 +
- SPIDER_SQL_LTEQUAL_LEN))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- dbton_share->append_column_name(str_part2, field->field_index);
- if (rev)
- str_part2->q_append(SPIDER_SQL_GTEQUAL_STR, SPIDER_SQL_GTEQUAL_LEN);
- else
- str_part2->q_append(SPIDER_SQL_LTEQUAL_STR, SPIDER_SQL_LTEQUAL_LEN);
- if (spider_dbton[dbton_id].db_util->
- append_column_value(spider, str_part2, field, ptr, false,
- share->access_charset))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
-
- if (use_key == start_key)
- {
- if (str_part->length() == SPIDER_SQL_OPEN_PAREN_LEN)
- {
- if (str->reserve(SPIDER_SQL_LTEQUAL_LEN))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- str->q_append(SPIDER_SQL_LTEQUAL_STR, SPIDER_SQL_LTEQUAL_LEN);
- if (spider_dbton[dbton_id].db_util->
- append_column_value(spider, str_part, field, ptr, false,
- share->access_charset))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- }
- }
+ result_list->key_order= key_count;
+ set_order= TRUE;
}
break;
case HA_READ_MBR_CONTAIN:
@@ -2120,73 +1898,30 @@ int spider_db_append_key_where_internal(
SPIDER_SQL_CLOSE_PAREN_LEN);
break;
default:
- if (sql_kind == SPIDER_SQL_KIND_SQL)
- {
- if (str->reserve(store_length + key_name_length +
- /* SPIDER_SQL_NAME_QUOTE_LEN */ 2 +
- SPIDER_SQL_GTEQUAL_LEN))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- dbton_share->append_column_name(str, field->field_index);
- if (rev)
- str->q_append(SPIDER_SQL_LTEQUAL_STR, SPIDER_SQL_LTEQUAL_LEN);
- else
- str->q_append(SPIDER_SQL_GTEQUAL_STR, SPIDER_SQL_GTEQUAL_LEN);
- if (spider_dbton[dbton_id].db_util->
- append_column_value(spider, str, field, ptr, false,
- share->access_charset))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- if (!set_order)
- {
- result_list->key_order = key_count;
- set_order = TRUE;
- }
- } else if (sql_kind == SPIDER_SQL_KIND_HANDLER)
+ if (str->reserve(store_length + key_name_length +
+ /* SPIDER_SQL_NAME_QUOTE_LEN */ 2 +
+ SPIDER_SQL_GTEQUAL_LEN))
+ DBUG_RETURN(HA_ERR_OUT_OF_MEM);
+ dbton_share->append_column_name(str, field->field_index);
+ if (rev)
+ str->q_append(SPIDER_SQL_LTEQUAL_STR, SPIDER_SQL_LTEQUAL_LEN);
+ else
+ str->q_append(SPIDER_SQL_GTEQUAL_STR, SPIDER_SQL_GTEQUAL_LEN);
+ if (spider_dbton[dbton_id].db_util->
+ append_column_value(spider, str, field, ptr, false,
+ share->access_charset))
+ DBUG_RETURN(HA_ERR_OUT_OF_MEM);
+ if (!set_order)
{
- if (str_part2->reserve(store_length + key_name_length +
- /* SPIDER_SQL_NAME_QUOTE_LEN */ 2 +
- SPIDER_SQL_GTEQUAL_LEN))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- dbton_share->append_column_name(str_part2, field->field_index);
- if (rev)
- str_part2->q_append(SPIDER_SQL_LTEQUAL_STR, SPIDER_SQL_LTEQUAL_LEN);
- else
- str_part2->q_append(SPIDER_SQL_GTEQUAL_STR, SPIDER_SQL_GTEQUAL_LEN);
- if (spider_dbton[dbton_id].db_util->
- append_column_value(spider, str_part2, field, ptr, false,
- share->access_charset))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
-
- if (use_key == start_key)
- {
- if (str_part->length() == SPIDER_SQL_OPEN_PAREN_LEN)
- {
- if (str->reserve(SPIDER_SQL_GTEQUAL_LEN))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- str->q_append(SPIDER_SQL_GTEQUAL_STR, SPIDER_SQL_GTEQUAL_LEN);
- if (spider_dbton[dbton_id].db_util->
- append_column_value(spider, str_part, field, ptr, false,
- share->access_charset))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- }
- }
+ result_list->key_order= key_count;
+ set_order= TRUE;
}
break;
}
}
- if (sql_kind == SPIDER_SQL_KIND_SQL)
- {
- if (str->reserve(SPIDER_SQL_AND_LEN))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- str->q_append(SPIDER_SQL_AND_STR,
- SPIDER_SQL_AND_LEN);
- } else if (sql_kind == SPIDER_SQL_KIND_HANDLER)
- {
- if (str_part2->reserve(SPIDER_SQL_AND_LEN))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- str_part2->q_append(SPIDER_SQL_AND_STR,
- SPIDER_SQL_AND_LEN);
-
- }
+ if (str->reserve(SPIDER_SQL_AND_LEN))
+ DBUG_RETURN(HA_ERR_OUT_OF_MEM);
+ str->q_append(SPIDER_SQL_AND_STR, SPIDER_SQL_AND_LEN);
}
if (
@@ -2200,180 +1935,84 @@ int spider_db_append_key_where_internal(
{
if (error_num > 0)
DBUG_RETURN(error_num);
- if (
- !set_order &&
- end_key->flag != HA_READ_KEY_EXACT &&
- sql_kind == SPIDER_SQL_KIND_SQL
- ) {
+ if (!set_order && end_key->flag != HA_READ_KEY_EXACT)
+ {
result_list->key_order = key_count;
set_order = TRUE;
}
} else if (key_eq)
{
DBUG_PRINT("info", ("spider key_eq"));
- if (sql_kind == SPIDER_SQL_KIND_SQL)
- {
- if (str->reserve(store_length + key_name_length +
- /* SPIDER_SQL_NAME_QUOTE_LEN */ 2 +
- SPIDER_SQL_EQUAL_LEN + SPIDER_SQL_AND_LEN))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- dbton_share->append_column_name(str, field->field_index);
- str->q_append(SPIDER_SQL_EQUAL_STR, SPIDER_SQL_EQUAL_LEN);
- if (spider_dbton[dbton_id].db_util->append_column_value(
- spider, str, field, ptr, FALSE, share->access_charset))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- } else {
- if (str_part2->reserve(store_length + key_name_length +
- /* SPIDER_SQL_NAME_QUOTE_LEN */ 2 +
- SPIDER_SQL_EQUAL_LEN + SPIDER_SQL_AND_LEN))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- dbton_share->append_column_name(str_part2, field->field_index);
- str_part2->q_append(SPIDER_SQL_EQUAL_STR, SPIDER_SQL_EQUAL_LEN);
- if (spider_dbton[dbton_id].db_util->append_column_value(
- spider, str_part2, field, ptr, false,
- share->access_charset))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
-
- if (use_key == end_key)
- {
- if (str_part->length() == SPIDER_SQL_OPEN_PAREN_LEN)
- {
- if (str->reserve(SPIDER_SQL_EQUAL_LEN))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- str->q_append(SPIDER_SQL_EQUAL_STR, SPIDER_SQL_EQUAL_LEN);
- if (spider_dbton[dbton_id].db_util->
- append_column_value(spider, str_part, field, ptr, false,
- share->access_charset))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- }
- }
- }
+ if (str->reserve(store_length + key_name_length +
+ /* SPIDER_SQL_NAME_QUOTE_LEN */ 2 +
+ SPIDER_SQL_EQUAL_LEN + SPIDER_SQL_AND_LEN))
+ DBUG_RETURN(HA_ERR_OUT_OF_MEM);
+ dbton_share->append_column_name(str, field->field_index);
+ str->q_append(SPIDER_SQL_EQUAL_STR, SPIDER_SQL_EQUAL_LEN);
+ if (spider_dbton[dbton_id].db_util->
+ append_column_value(spider, str, field, ptr, false,
+ share->access_charset))
+ DBUG_RETURN(HA_ERR_OUT_OF_MEM);
} else {
DBUG_PRINT("info", ("spider end_key->flag=%d", end_key->flag));
switch (end_key->flag)
{
case HA_READ_BEFORE_KEY:
- if (sql_kind == SPIDER_SQL_KIND_SQL)
+ const char *op_str;
+ uint32 op_len;
+ if (end_key_part_map == 1)
{
- const char* op_str;
- uint32 op_len;
- if (end_key_part_map == 1) {
- op_str = rev ? SPIDER_SQL_GT_STR : SPIDER_SQL_LT_STR;
- op_len = rev ? SPIDER_SQL_GT_LEN : SPIDER_SQL_LT_LEN;
- } else {
- op_str = rev ? SPIDER_SQL_GTEQUAL_STR : SPIDER_SQL_LTEQUAL_STR;
- op_len = rev ? SPIDER_SQL_GTEQUAL_LEN : SPIDER_SQL_LTEQUAL_LEN;
- }
- if (str->reserve(store_length + key_name_length +
- /* SPIDER_SQL_NAME_QUOTE_LEN */ 2 + op_len))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- dbton_share->append_column_name(str, field->field_index);
- str->q_append(op_str, op_len);
- if (spider_dbton[dbton_id].db_util->append_column_value(
- spider, str, field, ptr, FALSE, share->access_charset))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- if (use_both)
- end_key_part_map = 0;
- if (!set_order)
- {
- result_list->key_order = key_count;
- set_order = TRUE;
- }
- } else {
- if (str_part2->reserve(store_length + key_name_length +
- /* SPIDER_SQL_NAME_QUOTE_LEN */ 2 +
- SPIDER_SQL_LT_LEN))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- dbton_share->append_column_name(str_part2, field->field_index);
- if (rev)
- str_part2->q_append(SPIDER_SQL_GT_STR, SPIDER_SQL_GT_LEN);
- else
- str_part2->q_append(SPIDER_SQL_LT_STR, SPIDER_SQL_LT_LEN);
- if (spider_dbton[dbton_id].db_util->
- append_column_value(spider, str_part2, field, ptr, false,
- share->access_charset))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
-
- if (use_key == end_key)
- {
- if (str_part->length() == SPIDER_SQL_OPEN_PAREN_LEN)
- {
- if (str->reserve(SPIDER_SQL_LT_LEN))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- str->q_append(SPIDER_SQL_LT_STR, SPIDER_SQL_LT_LEN);
- if (spider_dbton[dbton_id].db_util->
- append_column_value(spider, str_part, field, ptr,
- false, share->access_charset))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- }
- }
+ op_str= rev ? SPIDER_SQL_GT_STR : SPIDER_SQL_LT_STR;
+ op_len= rev ? SPIDER_SQL_GT_LEN : SPIDER_SQL_LT_LEN;
+ }
+ else
+ {
+ op_str= rev ? SPIDER_SQL_GTEQUAL_STR : SPIDER_SQL_LTEQUAL_STR;
+ op_len= rev ? SPIDER_SQL_GTEQUAL_LEN : SPIDER_SQL_LTEQUAL_LEN;
+ }
+ if (str->reserve(store_length + key_name_length +
+ /* SPIDER_SQL_NAME_QUOTE_LEN */ 2 + op_len))
+ DBUG_RETURN(HA_ERR_OUT_OF_MEM);
+ dbton_share->append_column_name(str, field->field_index);
+ str->q_append(op_str, op_len);
+ if (spider_dbton[dbton_id].db_util->
+ append_column_value(spider, str, field, ptr, false,
+ share->access_charset))
+ DBUG_RETURN(HA_ERR_OUT_OF_MEM);
+ if (use_both)
+ end_key_part_map= 0;
+ if (!set_order)
+ {
+ result_list->key_order= key_count;
+ set_order= TRUE;
}
break;
default:
- if (sql_kind == SPIDER_SQL_KIND_SQL)
+ if (str->reserve(store_length + key_name_length +
+ /* SPIDER_SQL_NAME_QUOTE_LEN */ 2 +
+ SPIDER_SQL_LTEQUAL_LEN))
+ DBUG_RETURN(HA_ERR_OUT_OF_MEM);
+ dbton_share->append_column_name(str, field->field_index);
+ if (rev)
+ str->q_append(SPIDER_SQL_GTEQUAL_STR, SPIDER_SQL_GTEQUAL_LEN);
+ else
+ str->q_append(SPIDER_SQL_LTEQUAL_STR, SPIDER_SQL_LTEQUAL_LEN);
+ if (spider_dbton[dbton_id].db_util->
+ append_column_value(spider, str, field, ptr, false,
+ share->access_charset))
+ DBUG_RETURN(HA_ERR_OUT_OF_MEM);
+ if (!set_order)
{
- if (str->reserve(store_length + key_name_length +
- /* SPIDER_SQL_NAME_QUOTE_LEN */ 2 +
- SPIDER_SQL_LTEQUAL_LEN))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- dbton_share->append_column_name(str, field->field_index);
- if (rev)
- str->q_append(SPIDER_SQL_GTEQUAL_STR, SPIDER_SQL_GTEQUAL_LEN);
- else
- str->q_append(SPIDER_SQL_LTEQUAL_STR, SPIDER_SQL_LTEQUAL_LEN);
- if (spider_dbton[dbton_id].db_util->
- append_column_value(spider, str, field, ptr, false,
- share->access_charset))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- if (!set_order)
- {
- result_list->key_order = key_count;
- set_order = TRUE;
- }
- } else {
- if (str_part2->reserve(store_length + key_name_length +
- /* SPIDER_SQL_NAME_QUOTE_LEN */ 2 +
- SPIDER_SQL_LTEQUAL_LEN))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- dbton_share->append_column_name(str_part2, field->field_index);
- if (rev)
- str_part2->q_append(SPIDER_SQL_GTEQUAL_STR, SPIDER_SQL_GTEQUAL_LEN);
- else
- str_part2->q_append(SPIDER_SQL_LTEQUAL_STR, SPIDER_SQL_LTEQUAL_LEN);
- if (spider_dbton[dbton_id].db_util->
- append_column_value(spider, str_part2, field, ptr, false,
- share->access_charset))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
-
- if (use_key == end_key)
- {
- if (str_part->length() == SPIDER_SQL_OPEN_PAREN_LEN)
- {
- if (str->reserve(SPIDER_SQL_LTEQUAL_LEN))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- str->q_append(SPIDER_SQL_LTEQUAL_STR, SPIDER_SQL_LTEQUAL_LEN);
- if (spider_dbton[dbton_id].db_util->
- append_column_value(spider, str_part, field, ptr,
- false, share->access_charset))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- }
- }
+ result_list->key_order= key_count;
+ set_order= TRUE;
}
break;
}
}
- if (sql_kind == SPIDER_SQL_KIND_SQL)
{
if (str->reserve(SPIDER_SQL_AND_LEN))
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- str->q_append(SPIDER_SQL_AND_STR,
- SPIDER_SQL_AND_LEN);
- } else {
- if (str_part2->reserve(SPIDER_SQL_AND_LEN))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- str_part2->q_append(SPIDER_SQL_AND_STR,
- SPIDER_SQL_AND_LEN);
-
+ str->q_append(SPIDER_SQL_AND_STR, SPIDER_SQL_AND_LEN);
}
}
if (use_both && (!start_key_part_map || !end_key_part_map))
@@ -2392,8 +2031,9 @@ end:
/* use condition */
if (dbton_hdl->append_condition_part(NULL, 0, sql_type, FALSE))
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- if (sql_kind == SPIDER_SQL_KIND_SQL)
+ {
dbton_hdl->set_order_pos(sql_type);
+ }
#ifndef DBUG_OFF
dbug_tmp_restore_column_map(&table->read_set, tmp_map);
#endif
@@ -2407,20 +2047,12 @@ int spider_db_append_key_where(
) {
int error_num;
DBUG_ENTER("spider_db_append_key_where");
- if ((spider->sql_kinds & SPIDER_SQL_KIND_SQL))
{
DBUG_PRINT("info",("spider call internal by SPIDER_SQL_KIND_SQL"));
if ((error_num = spider->append_key_where_sql_part(start_key, end_key,
SPIDER_SQL_TYPE_SELECT_SQL)))
DBUG_RETURN(error_num);
}
- if (spider->sql_kinds & SPIDER_SQL_KIND_HANDLER)
- {
- DBUG_PRINT("info",("spider call internal by SPIDER_SQL_KIND_HANDLER"));
- if ((error_num = spider->append_key_where_sql_part(start_key, end_key,
- SPIDER_SQL_TYPE_HANDLER)))
- DBUG_RETURN(error_num);
- }
DBUG_RETURN(0);
}
@@ -2533,9 +2165,7 @@ int spider_db_fetch_for_item_sum_func(
spider->direct_aggregate_item_first->next = NULL;
spider->direct_aggregate_item_first->item = NULL;
spider->direct_aggregate_item_first->tgt_num = 0;
-#ifdef SPIDER_ITEM_STRING_WITHOUT_SET_STR_WITH_COPY_AND_THDPTR
spider->direct_aggregate_item_first->init_mem_root = FALSE;
-#endif
}
spider->direct_aggregate_item_current =
spider->direct_aggregate_item_first;
@@ -2552,16 +2182,13 @@ int spider_db_fetch_for_item_sum_func(
spider->direct_aggregate_item_current->next->item = NULL;
spider->direct_aggregate_item_current->next->tgt_num =
spider->direct_aggregate_item_current->tgt_num + 1;
-#ifdef SPIDER_ITEM_STRING_WITHOUT_SET_STR_WITH_COPY_AND_THDPTR
spider->direct_aggregate_item_current->next->init_mem_root = FALSE;
-#endif
}
spider->direct_aggregate_item_current =
spider->direct_aggregate_item_current->next;
}
if (!spider->direct_aggregate_item_current->item)
{
-#ifdef SPIDER_ITEM_STRING_WITHOUT_SET_STR_WITH_COPY_AND_THDPTR
if (!spider->direct_aggregate_item_current->init_mem_root)
{
SPD_INIT_ALLOC_ROOT(
@@ -2569,19 +2196,10 @@ int spider_db_fetch_for_item_sum_func(
4096, 0, MYF(MY_WME));
spider->direct_aggregate_item_current->init_mem_root = TRUE;
}
-#endif
Item *free_list = thd->free_list;
spider->direct_aggregate_item_current->item =
-#ifdef SPIDER_ITEM_STRING_WITHOUT_SET_STR_WITH_COPY
-#ifdef SPIDER_ITEM_STRING_WITHOUT_SET_STR_WITH_COPY_AND_THDPTR
new (&spider->direct_aggregate_item_current->mem_root)
Item_string(thd, "", 0, share->access_charset);
-#else
- new Item_string("", 0, share->access_charset);
-#endif
-#else
- new Item_string(share->access_charset);
-#endif
if (!spider->direct_aggregate_item_current->item)
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
thd->free_list = free_list;
@@ -2592,12 +2210,8 @@ int spider_db_fetch_for_item_sum_func(
(Item_string *) spider->direct_aggregate_item_current->item;
if (row->is_null())
{
-#ifdef SPIDER_ITEM_STRING_WITHOUT_SET_STR_WITH_COPY
item->val_str(NULL)->length(0);
item->append(NULL, 0);
-#else
- item->set_str_with_copy(NULL, 0);
-#endif
item->null_value = TRUE;
} else {
char buf[MAX_FIELD_WIDTH];
@@ -2606,12 +2220,8 @@ int spider_db_fetch_for_item_sum_func(
tmp_str.length(0);
if ((error_num = row->append_to_str(&tmp_str)))
DBUG_RETURN(error_num);
-#ifdef SPIDER_ITEM_STRING_WITHOUT_SET_STR_WITH_COPY
item->val_str(NULL)->length(0);
item->append((char *) tmp_str.ptr(), tmp_str.length());
-#else
- item->set_str_with_copy(tmp_str.ptr(), tmp_str.length());
-#endif
item->null_value = FALSE;
}
item_sum_min_max->direct_add(item);
@@ -2677,27 +2287,6 @@ int spider_db_append_match_where(
DBUG_RETURN(0);
}
-void spider_db_append_handler_next(
- ha_spider *spider
-) {
- const char *alias;
- uint alias_length;
- SPIDER_RESULT_LIST *result_list = &spider->result_list;
- DBUG_ENTER("spider_db_append_handler_next");
- if (result_list->sorted && result_list->desc_flg)
- {
- alias = SPIDER_SQL_PREV_STR;
- alias_length = SPIDER_SQL_PREV_LEN;
- } else {
- alias = SPIDER_SQL_NEXT_STR;
- alias_length = SPIDER_SQL_NEXT_LEN;
- }
- spider->set_order_to_pos_sql(SPIDER_SQL_TYPE_HANDLER);
- spider->append_key_order_with_alias_sql_part(alias, alias_length,
- SPIDER_SQL_TYPE_HANDLER);
- DBUG_VOID_RETURN;
-}
-
void spider_db_get_row_from_tmp_tbl_rec(
SPIDER_RESULT *current,
SPIDER_DB_ROW **row
@@ -2840,7 +2429,6 @@ int spider_db_fetch_table(
if (spider->mrr_with_cnt)
{
DBUG_PRINT("info", ("spider mrr_with_cnt"));
- if (spider->sql_kind[spider->result_link_idx] == SPIDER_SQL_KIND_SQL)
{
if (!row->is_null())
spider->multi_range_hit_point = row->val_int();
@@ -2852,9 +2440,6 @@ int spider_db_fetch_table(
else
DBUG_RETURN(ER_SPIDER_UNKNOWN_NUM);
row->next();
- } else {
- spider->multi_range_hit_point = 0;
- result_list->snap_mrr_with_cnt = FALSE;
}
}
@@ -3334,7 +2919,7 @@ int spider_db_free_result(
DBUG_RETURN(error_num);
}
}
- if (realloced & (SPIDER_SQL_TYPE_SELECT_SQL | SPIDER_SQL_TYPE_HANDLER))
+ if (realloced & (SPIDER_SQL_TYPE_SELECT_SQL))
{
for (roop_count = 0; roop_count < (int) share->link_count;
roop_count++)
@@ -4354,7 +3939,6 @@ int spider_db_fetch(
int error_num;
SPIDER_RESULT_LIST *result_list = &spider->result_list;
DBUG_ENTER("spider_db_fetch");
- if (spider->sql_kind[spider->result_link_idx] == SPIDER_SQL_KIND_SQL)
{
if (!spider->select_column_mode) {
if (result_list->keyread)
@@ -4366,9 +3950,6 @@ int spider_db_fetch(
} else
error_num = spider_db_fetch_minimum_columns(spider, buf, table,
result_list);
- } else {
- error_num = spider_db_fetch_table(spider, buf, table,
- result_list);
}
result_list->current_row_num++;
DBUG_PRINT("info",("spider error_num=%d", error_num));
@@ -4507,7 +4088,6 @@ int spider_db_seek_next(
result_list->split_read ?
result_list->split_read :
result_list->internal_limit - result_list->record_num;
- if (spider->sql_kinds & SPIDER_SQL_KIND_SQL)
{
if ((error_num = spider->reappend_limit_sql_part(
result_list->record_num, result_list->limit_num,
@@ -4525,17 +4105,6 @@ int spider_db_seek_next(
DBUG_RETURN(error_num);
}
}
- if (spider->sql_kinds & SPIDER_SQL_KIND_HANDLER)
- {
- spider_db_append_handler_next(spider);
- if ((error_num = spider->reappend_limit_sql_part(
- 0, result_list->limit_num,
- SPIDER_SQL_TYPE_HANDLER)))
- {
- DBUG_PRINT("info",("spider error_num 5=%d", error_num));
- DBUG_RETURN(error_num);
- }
- }
if (spider->use_fields)
{
@@ -4667,13 +4236,8 @@ int spider_db_seek_next(
SPIDER_LINK_STATUS_RECOVERY)
) {
ulong sql_type;
- conn = spider->conns[roop_count];
- if (spider->sql_kind[roop_count] == SPIDER_SQL_KIND_SQL)
- {
- sql_type = SPIDER_SQL_TYPE_SELECT_SQL;
- } else {
- sql_type = SPIDER_SQL_TYPE_HANDLER;
- }
+ conn= spider->conns[roop_count];
+ sql_type= SPIDER_SQL_TYPE_SELECT_SQL;
spider_db_handler *dbton_handler =
spider->dbton_handler[conn->dbton_id];
pthread_mutex_assert_not_owner(&conn->mta_conn_mutex);
@@ -4899,7 +4463,6 @@ int spider_db_seek_last(
spider_next_split_read_param(spider);
result_list->limit_num =
result_list->internal_limit - result_list->record_num;
- if (spider->sql_kinds & SPIDER_SQL_KIND_SQL)
{
if ((error_num = spider->reappend_limit_sql_part(
result_list->internal_offset + result_list->record_num,
@@ -4913,21 +4476,6 @@ int spider_db_seek_last(
)
DBUG_RETURN(error_num);
}
- if (spider->sql_kinds & SPIDER_SQL_KIND_HANDLER)
- {
- spider_db_append_handler_next(spider);
- if ((error_num = spider->reappend_limit_sql_part(
- result_list->internal_offset + result_list->record_num,
- result_list->limit_num,
- SPIDER_SQL_TYPE_HANDLER)))
- DBUG_RETURN(error_num);
- if (
- !result_list->use_union &&
- (error_num = spider->append_select_lock_sql_part(
- SPIDER_SQL_TYPE_HANDLER))
- )
- DBUG_RETURN(error_num);
- }
int roop_start, roop_end, roop_count, lock_mode, link_ok;
lock_mode = spider_conn_lock_mode(spider);
@@ -4952,12 +4500,7 @@ int spider_db_seek_last(
SPIDER_LINK_STATUS_RECOVERY)
) {
ulong sql_type;
- if (spider->sql_kind[roop_count] == SPIDER_SQL_KIND_SQL)
- {
- sql_type = SPIDER_SQL_TYPE_SELECT_SQL;
- } else {
- sql_type = SPIDER_SQL_TYPE_HANDLER;
- }
+ sql_type= SPIDER_SQL_TYPE_SELECT_SQL;
conn = spider->conns[roop_count];
spider_db_handler *dbton_handler = spider->dbton_handler[conn->dbton_id];
pthread_mutex_assert_not_owner(&conn->mta_conn_mutex);
@@ -5123,7 +4666,6 @@ int spider_db_seek_last(
result_list->limit_num =
result_list->internal_limit >= result_list->split_read ?
result_list->split_read : result_list->internal_limit;
- if (spider->sql_kinds & SPIDER_SQL_KIND_SQL)
{
spider->set_order_to_pos_sql(SPIDER_SQL_TYPE_SELECT_SQL);
if (
@@ -5134,35 +4676,12 @@ int spider_db_seek_last(
result_list->limit_num, SPIDER_SQL_TYPE_SELECT_SQL)) ||
(
!result_list->use_union &&
- (spider->sql_kinds & SPIDER_SQL_KIND_SQL) &&
(error_num = spider->append_select_lock_sql_part(
SPIDER_SQL_TYPE_SELECT_SQL))
)
)
DBUG_RETURN(error_num);
}
- if (spider->sql_kinds & SPIDER_SQL_KIND_HANDLER)
- {
- const char *alias;
- uint alias_length;
- if (result_list->sorted && result_list->desc_flg)
- {
- alias = SPIDER_SQL_LAST_STR;
- alias_length = SPIDER_SQL_LAST_LEN;
- } else {
- alias = SPIDER_SQL_FIRST_STR;
- alias_length = SPIDER_SQL_FIRST_LEN;
- }
- spider->set_order_to_pos_sql(SPIDER_SQL_TYPE_HANDLER);
- if (
- (error_num = spider->append_key_order_with_alias_sql_part(
- alias, alias_length, SPIDER_SQL_TYPE_HANDLER)) ||
- (error_num = spider->reappend_limit_sql_part(
- result_list->internal_offset,
- result_list->limit_num, SPIDER_SQL_TYPE_HANDLER))
- )
- DBUG_RETURN(error_num);
- }
int roop_start, roop_end, roop_count, lock_mode, link_ok;
lock_mode = spider_conn_lock_mode(spider);
@@ -5187,12 +4706,7 @@ int spider_db_seek_last(
SPIDER_LINK_STATUS_RECOVERY)
) {
ulong sql_type;
- if (spider->sql_kind[roop_count] == SPIDER_SQL_KIND_SQL)
- {
- sql_type = SPIDER_SQL_TYPE_SELECT_SQL;
- } else {
- sql_type = SPIDER_SQL_TYPE_HANDLER;
- }
+ sql_type= SPIDER_SQL_TYPE_SELECT_SQL;
conn = spider->conns[roop_count];
spider_db_handler *dbton_handler = spider->dbton_handler[conn->dbton_id];
pthread_mutex_assert_not_owner(&conn->mta_conn_mutex);
@@ -5401,7 +4915,6 @@ void spider_db_create_position(
pos->use_position = TRUE;
pos->mrr_with_cnt = spider->mrr_with_cnt;
pos->direct_aggregate = result_list->direct_aggregate;
- pos->sql_kind = spider->sql_kind[spider->result_link_idx];
pos->position_bitmap = spider->wide_handler->position_bitmap;
pos->ft_first = spider->ft_first;
pos->ft_current = spider->ft_current;
@@ -5424,7 +4937,6 @@ int spider_db_seek_tmp(
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
pos->row->first();
}
- if (pos->sql_kind == SPIDER_SQL_KIND_SQL)
{
if (!spider->select_column_mode)
{
@@ -5435,8 +4947,7 @@ int spider_db_seek_tmp(
error_num = spider_db_seek_tmp_table(buf, pos, spider, table);
} else
error_num = spider_db_seek_tmp_minimum_columns(buf, pos, spider, table);
- } else
- error_num = spider_db_seek_tmp_table(buf, pos, spider, table);
+ }
DBUG_PRINT("info",("spider error_num=%d", error_num));
DBUG_RETURN(error_num);
@@ -5479,11 +4990,8 @@ int spider_db_seek_tmp_table(
if (pos->mrr_with_cnt)
{
DBUG_PRINT("info", ("spider mrr_with_cnt"));
- if (pos->sql_kind == SPIDER_SQL_KIND_SQL)
{
row->next();
- } else {
- spider->result_list.snap_mrr_with_cnt = FALSE;
}
}
@@ -5898,7 +5406,6 @@ int spider_db_bulk_insert_init(
int error_num, roop_count;
SPIDER_SHARE *share = spider->share;
DBUG_ENTER("spider_db_bulk_insert_init");
- spider->sql_kinds = 0;
spider->reset_sql_sql(SPIDER_SQL_TYPE_INSERT_SQL);
for (
roop_count = spider_conn_link_idx_next(share->link_statuses,
@@ -5912,8 +5419,6 @@ int spider_db_bulk_insert_init(
if (spider->conns[roop_count])
spider->conns[roop_count]->ignore_dup_key =
spider->wide_handler->ignore_dup_key;
- spider_conn_use_handler(spider, spider->wide_handler->lock_mode,
- roop_count);
}
if (
(error_num = spider->append_insert_sql_part()) ||
@@ -5940,8 +5445,7 @@ int spider_db_bulk_insert(
if ((error_num = spider->append_insert_values_sql_part(
SPIDER_SQL_TYPE_INSERT_SQL)))
{
- if (spider->sql_kinds & SPIDER_SQL_KIND_SQL)
- spider->set_insert_to_pos_sql(SPIDER_SQL_TYPE_INSERT_SQL);
+ spider->set_insert_to_pos_sql(SPIDER_SQL_TYPE_INSERT_SQL);
DBUG_RETURN(error_num);
}
}
@@ -5953,8 +5457,7 @@ int spider_db_bulk_insert(
if ((error_num = spider->append_insert_terminator_sql_part(
SPIDER_SQL_TYPE_INSERT_SQL)))
{
- if (spider->sql_kinds & SPIDER_SQL_KIND_SQL)
- spider->set_insert_to_pos_sql(SPIDER_SQL_TYPE_INSERT_SQL);
+ spider->set_insert_to_pos_sql(SPIDER_SQL_TYPE_INSERT_SQL);
DBUG_RETURN(error_num);
}
bool insert_info = FALSE;
@@ -5981,8 +5484,7 @@ int spider_db_bulk_insert(
if ((error_num = dbton_handler->set_sql_for_exec(sql_type,
roop_count2)))
{
- if (spider->sql_kinds & SPIDER_SQL_KIND_SQL)
- spider->set_insert_to_pos_sql(SPIDER_SQL_TYPE_INSERT_SQL);
+ spider->set_insert_to_pos_sql(SPIDER_SQL_TYPE_INSERT_SQL);
if (dbton_handler->need_lock_before_set_sql_for_exec(sql_type))
{
SPIDER_CLEAR_FILE_POS(&conn->mta_conn_mutex_file_pos);
@@ -6002,8 +5504,7 @@ int spider_db_bulk_insert(
conn->mta_conn_mutex_unlock_later = TRUE;
if ((error_num = spider_db_set_names(spider, conn, roop_count2)))
{
- if (spider->sql_kinds & SPIDER_SQL_KIND_SQL)
- spider->set_insert_to_pos_sql(SPIDER_SQL_TYPE_INSERT_SQL);
+ spider->set_insert_to_pos_sql(SPIDER_SQL_TYPE_INSERT_SQL);
DBUG_ASSERT(conn->mta_conn_mutex_lock_already);
DBUG_ASSERT(conn->mta_conn_mutex_unlock_later);
conn->mta_conn_mutex_lock_already = FALSE;
@@ -6036,14 +5537,10 @@ int spider_db_bulk_insert(
spider_conn_set_timeout_from_share(conn, roop_count2,
spider->wide_handler->trx->thd,
share);
- if (dbton_handler->execute_sql(
- sql_type,
- conn,
- -1,
- &spider->need_mons[roop_count2])
- ) {
- if (spider->sql_kinds & SPIDER_SQL_KIND_SQL)
- spider->set_insert_to_pos_sql(SPIDER_SQL_TYPE_INSERT_SQL);
+ if (dbton_handler->execute_sql(sql_type, conn, -1,
+ &spider->need_mons[roop_count2]))
+ {
+ spider->set_insert_to_pos_sql(SPIDER_SQL_TYPE_INSERT_SQL);
error_num = spider_db_errorno(conn);
if (error_num == HA_ERR_FOUND_DUPP_KEY)
{
@@ -6107,9 +5604,8 @@ int spider_db_bulk_insert(
DBUG_ASSERT(!conn->mta_conn_mutex_lock_already);
DBUG_ASSERT(!conn->mta_conn_mutex_unlock_later);
conn->mta_conn_mutex_lock_already = TRUE;
- conn->mta_conn_mutex_unlock_later = TRUE;
- if (spider->sql_kinds & SPIDER_SQL_KIND_SQL)
- spider->set_insert_to_pos_sql(SPIDER_SQL_TYPE_INSERT_SQL);
+ conn->mta_conn_mutex_unlock_later= TRUE;
+ spider->set_insert_to_pos_sql(SPIDER_SQL_TYPE_INSERT_SQL);
if (table->next_number_field &&
(
!table->auto_increment_field_not_null ||
@@ -6716,30 +6212,15 @@ int spider_db_direct_update(
if ((error_num = spider->append_update_sql_part()))
DBUG_RETURN(error_num);
-/*
- SQL access -> SQL remote access
- !spider->do_direct_update &&
- (spider->sql_kinds & SPIDER_SQL_KIND_SQL)
-
- SQL access -> SQL remote access with dirct_update
- spider->do_direct_update &&
- spider->direct_update_kinds == SPIDER_SQL_KIND_SQL &&
- spider->wide_handler->direct_update_fields
-*/
-
if (!spider->do_direct_update)
{
- if (
- (spider->sql_kinds & SPIDER_SQL_KIND_SQL) &&
- (error_num = spider->append_update_set_sql_part())
- ) {
+ if ((error_num= spider->append_update_set_sql_part()))
+ {
DBUG_RETURN(error_num);
}
} else {
- if (
- (spider->direct_update_kinds & SPIDER_SQL_KIND_SQL) &&
- (error_num = spider->append_direct_update_set_sql_part())
- ) {
+ if ((error_num= spider->append_direct_update_set_sql_part()))
+ {
DBUG_RETURN(error_num);
}
}
@@ -6755,7 +6236,6 @@ int spider_db_direct_update(
result_list->internal_limit >= select_limit ?
select_limit : result_list->internal_limit;
result_list->internal_offset += offset_limit;
- if (spider->direct_update_kinds & SPIDER_SQL_KIND_SQL)
{
if (
(error_num = spider->append_key_where_sql_part(
@@ -7036,7 +6516,6 @@ int spider_db_direct_delete(
result_list->internal_limit >= select_limit ?
select_limit : result_list->internal_limit;
result_list->internal_offset += offset_limit;
- if (spider->direct_update_kinds & SPIDER_SQL_KIND_SQL)
{
if (
(error_num = spider->append_delete_sql_part()) ||
@@ -7182,7 +6661,6 @@ int spider_db_direct_delete(
pthread_mutex_unlock(&conn->mta_conn_mutex);
}
int error_num2 = 0;
- if (spider->direct_update_kinds & SPIDER_SQL_KIND_SQL)
{
if ((error_num = spider->reset_sql_sql(SPIDER_SQL_TYPE_DELETE_SQL)))
error_num2 = error_num;
@@ -7954,9 +7432,7 @@ int spider_db_print_item_type(
field, spider, str, alias, alias_length, dbton_id, use_fields, fields));
case Item::SUBSELECT_ITEM:
case Item::TRIGGER_FIELD_ITEM:
-#ifdef SPIDER_HAS_EXPR_CACHE_ITEM
case Item::EXPR_CACHE_ITEM:
-#endif
DBUG_RETURN(ER_SPIDER_COND_SKIP_NUM);
default:
DBUG_RETURN(spider_db_print_item_type_default(item, spider, str));
@@ -8179,13 +7655,8 @@ int spider_db_open_item_ident(
}
if (str)
{
-#ifdef SPIDER_use_LEX_CSTRING_for_KEY_Field_name
if (item_ident->field_name.str)
field_name_length = item_ident->field_name.length;
-#else
- if (item_ident->field_name)
- field_name_length = strlen(item_ident->field_name);
-#endif
else
field_name_length = 0;
if (share->access_charset->cset == system_charset_info->cset)
@@ -8196,14 +7667,9 @@ int spider_db_open_item_ident(
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
}
str->q_append(alias, alias_length);
-#ifdef SPIDER_use_LEX_CSTRING_for_KEY_Field_name
if ((error_num = spider_dbton[dbton_id].db_util->
append_escaped_name(str, item_ident->field_name.str,
field_name_length)))
-#else
- if ((error_num = spider_dbton[dbton_id].db_util->
- append_escaped_name(str, item_ident->field_name, field_name_length)))
-#endif
{
DBUG_RETURN(error_num);
}
@@ -8211,15 +7677,9 @@ int spider_db_open_item_ident(
if (str->reserve(alias_length))
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
str->q_append(alias, alias_length);
-#ifdef SPIDER_use_LEX_CSTRING_for_KEY_Field_name
if ((error_num = spider_dbton[dbton_id].db_util->
append_escaped_name_with_charset(str, item_ident->field_name.str,
field_name_length, system_charset_info)))
-#else
- if ((error_num = spider_dbton[dbton_id].db_util->
- append_escaped_name_with_charset(str, item_ident->field_name,
- field_name_length, system_charset_info)))
-#endif
{
DBUG_RETURN(error_num);
}
@@ -8330,7 +7790,6 @@ int spider_db_open_item_ref(
DBUG_ENTER("spider_db_open_item_ref");
if (item_ref->ref)
{
-#ifdef SPIDER_use_LEX_CSTRING_for_KEY_Field_name
if (
(*(item_ref->ref))->type() != Item::CACHE_ITEM &&
item_ref->ref_type() != Item_ref::VIEW_REF &&
@@ -8338,34 +7797,16 @@ int spider_db_open_item_ref(
item_ref->name.str &&
item_ref->alias_name_used
)
-#else
- if (
- (*(item_ref->ref))->type() != Item::CACHE_ITEM &&
- item_ref->ref_type() != Item_ref::VIEW_REF &&
- !item_ref->table_name &&
- item_ref->name &&
- item_ref->alias_name_used
- )
-#endif
{
if (str)
{
-#ifdef SPIDER_use_LEX_CSTRING_for_KEY_Field_name
uint length = item_ref->name.length;
-#else
- uint length = strlen(item_ref->name);
-#endif
if (str->reserve(length + /* SPIDER_SQL_NAME_QUOTE_LEN */ 2))
{
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
}
-#ifdef SPIDER_use_LEX_CSTRING_for_KEY_Field_name
if ((error_num = spider_dbton[dbton_id].db_util->
append_name(str, item_ref->name.str, length)))
-#else
- if ((error_num = spider_dbton[dbton_id].db_util->
- append_name(str, item_ref->name, length)))
-#endif
{
DBUG_RETURN(error_num);
}
@@ -8612,12 +8053,10 @@ int spider_db_open_item_int(
thd->variables.time_zone = UTC;
print_quoted_string = TRUE;
} else {
-#ifdef SPIDER_ITEM_HAS_CMP_TYPE
DBUG_PRINT("info",("spider cmp_type=%u", item->cmp_type()));
if (item->cmp_type() == TIME_RESULT)
print_quoted_string = TRUE;
else
-#endif
print_quoted_string = FALSE;
}
@@ -8811,18 +8250,11 @@ int spider_db_append_condition(
DBUG_ENTER("spider_db_append_condition");
if (!test_flg)
{
- if (spider->sql_kinds & SPIDER_SQL_KIND_SQL)
{
if ((error_num = spider->append_condition_sql_part(
alias, alias_length, SPIDER_SQL_TYPE_SELECT_SQL, FALSE)))
DBUG_RETURN(error_num);
}
- if (spider->sql_kinds & SPIDER_SQL_KIND_HANDLER)
- {
- if ((error_num = spider->append_condition_sql_part(
- alias, alias_length, SPIDER_SQL_TYPE_HANDLER, FALSE)))
- DBUG_RETURN(error_num);
- }
} else {
if (spider->wide_handler->cond_check)
DBUG_RETURN(spider->wide_handler->cond_check_error);
@@ -9136,10 +8568,8 @@ int spider_db_udf_direct_sql(
SPIDER_CONN *conn = direct_sql->conn;
SPIDER_DB_RESULT *result = NULL;
TABLE *table;
- int bulk_insert_rows = (int) spider_param_udf_ds_bulk_insert_rows(thd,
- direct_sql->bulk_insert_rows);
- int table_loop_mode = spider_param_udf_ds_table_loop_mode(thd,
- direct_sql->table_loop_mode);
+ int bulk_insert_rows= (int) direct_sql->bulk_insert_rows;
+ int table_loop_mode= direct_sql->table_loop_mode;
double ping_interval_at_trx_start =
spider_param_ping_interval_at_trx_start(thd);
time_t tmp_time = (time_t) time((time_t*) 0);
@@ -9253,14 +8683,13 @@ int spider_db_udf_direct_sql(
{
while (!error_num && !end_of_file)
{
- udf_table_mutex_index = spider_udf_calc_hash(
- direct_sql->db_names[roop_count],
- spider_param_udf_table_lock_mutex_count());
- udf_table_mutex_index += spider_udf_calc_hash(
- direct_sql->table_names[roop_count],
- spider_param_udf_table_lock_mutex_count());
- udf_table_mutex_index %=
- spider_param_udf_table_lock_mutex_count();
+ udf_table_mutex_index=
+ spider_udf_calc_hash(direct_sql->db_names[roop_count],
+ spider_udf_table_lock_mutex_count);
+ udf_table_mutex_index+=
+ spider_udf_calc_hash(direct_sql->table_names[roop_count],
+ spider_udf_table_lock_mutex_count);
+ udf_table_mutex_index%= spider_udf_table_lock_mutex_count;
pthread_mutex_lock(
&trx->udf_table_mutexes[udf_table_mutex_index]);
table = direct_sql->tables[roop_count];
@@ -10035,13 +9464,8 @@ int spider_db_udf_copy_key_row(
) {
int error_num;
DBUG_ENTER("spider_db_udf_copy_key_row");
-#ifdef SPIDER_use_LEX_CSTRING_for_KEY_Field_name
if ((error_num = spider_db_append_name_with_quote_str(str,
(char *) field->field_name.str, dbton_id)))
-#else
- if ((error_num = spider_db_append_name_with_quote_str(str,
- (char *) field->field_name, dbton_id)))
-#endif
DBUG_RETURN(error_num);
if (str->reserve(joint_length + *length + SPIDER_SQL_AND_LEN))
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
@@ -10311,8 +9735,7 @@ int spider_db_udf_copy_tables(
pthread_mutex_unlock(&tmp_conn->mta_conn_mutex);
goto error_db_query;
}
- bulk_insert_rows = spider_param_udf_ct_bulk_insert_rows(
- copy_tables->bulk_insert_rows);
+ bulk_insert_rows= copy_tables->bulk_insert_rows;
if (
select_ct->append_key_order_str(key_info, 0, FALSE) ||
select_ct->append_limit(0, bulk_insert_rows) ||
@@ -10524,8 +9947,7 @@ int spider_db_udf_copy_tables(
insert_ct->set_sql_to_pos();
}
DBUG_PRINT("info",("spider sleep"));
- bulk_insert_interval = spider_param_udf_ct_bulk_insert_interval(
- copy_tables->bulk_insert_interval);
+ bulk_insert_interval= copy_tables->bulk_insert_interval;
my_sleep(bulk_insert_interval);
}
}
@@ -10586,151 +10008,6 @@ error:
DBUG_RETURN(error_num);
}
-int spider_db_open_handler(
- ha_spider *spider,
- SPIDER_CONN *conn,
- int link_idx
-) {
- int error_num;
- SPIDER_SHARE *share = spider->share;
- uint *handler_id_ptr =
- &spider->m_handler_id[link_idx]
- ;
- spider_db_handler *dbton_hdl = spider->dbton_handler[conn->dbton_id];
- DBUG_ENTER("spider_db_open_handler");
- pthread_mutex_assert_not_owner(&conn->mta_conn_mutex);
- pthread_mutex_lock(&conn->mta_conn_mutex);
- SPIDER_SET_FILE_POS(&conn->mta_conn_mutex_file_pos);
- conn->need_mon = &spider->need_mons[link_idx];
- DBUG_ASSERT(conn->mta_conn_mutex_file_pos.file_name);
- DBUG_ASSERT(!conn->mta_conn_mutex_lock_already);
- DBUG_ASSERT(!conn->mta_conn_mutex_unlock_later);
- conn->mta_conn_mutex_lock_already = TRUE;
- conn->mta_conn_mutex_unlock_later = TRUE;
- if (!spider->handler_opened(link_idx, conn->conn_kind))
- *handler_id_ptr = conn->opened_handlers;
-
- if (!spider->handler_opened(link_idx, conn->conn_kind))
- my_sprintf(spider->m_handler_cid[link_idx],
- (spider->m_handler_cid[link_idx], SPIDER_SQL_HANDLER_CID_FORMAT,
- *handler_id_ptr));
-
- if ((error_num = dbton_hdl->append_open_handler_part(
- SPIDER_SQL_TYPE_HANDLER, *handler_id_ptr, conn, link_idx)))
- {
- goto error;
- }
-
- spider_conn_set_timeout_from_share(conn, link_idx,
- spider->wide_handler->trx->thd,
- share);
- if (dbton_hdl->execute_sql(
- SPIDER_SQL_TYPE_HANDLER,
- conn,
- -1,
- &spider->need_mons[link_idx])
- ) {
- error_num = spider_db_errorno(conn);
- goto error;
- }
- dbton_hdl->reset_sql(SPIDER_SQL_TYPE_HANDLER);
-
- if (!spider->handler_opened(link_idx, conn->conn_kind))
- {
- if ((error_num = dbton_hdl->insert_opened_handler(conn, link_idx)))
- goto error;
- conn->opened_handlers++;
- }
- DBUG_PRINT("info",("spider conn=%p", conn));
- DBUG_PRINT("info",("spider opened_handlers=%u", conn->opened_handlers));
- DBUG_ASSERT(conn->mta_conn_mutex_lock_already);
- DBUG_ASSERT(conn->mta_conn_mutex_unlock_later);
- conn->mta_conn_mutex_lock_already = FALSE;
- conn->mta_conn_mutex_unlock_later = FALSE;
- SPIDER_CLEAR_FILE_POS(&conn->mta_conn_mutex_file_pos);
- pthread_mutex_unlock(&conn->mta_conn_mutex);
- DBUG_RETURN(0);
-
-error:
- DBUG_ASSERT(conn->mta_conn_mutex_lock_already);
- DBUG_ASSERT(conn->mta_conn_mutex_unlock_later);
- conn->mta_conn_mutex_lock_already = FALSE;
- conn->mta_conn_mutex_unlock_later = FALSE;
- SPIDER_CLEAR_FILE_POS(&conn->mta_conn_mutex_file_pos);
- pthread_mutex_unlock(&conn->mta_conn_mutex);
- DBUG_RETURN(error_num);
-}
-
-
-int spider_db_close_handler(
- ha_spider *spider,
- SPIDER_CONN *conn,
- int link_idx,
- uint tgt_conn_kind
-) {
- int error_num;
- spider_db_handler *dbton_hdl = spider->dbton_handler[conn->dbton_id];
- DBUG_ENTER("spider_db_close_handler");
- DBUG_PRINT("info",("spider conn=%p", conn));
- pthread_mutex_assert_not_owner(&conn->mta_conn_mutex);
- pthread_mutex_lock(&conn->mta_conn_mutex);
- SPIDER_SET_FILE_POS(&conn->mta_conn_mutex_file_pos);
- conn->need_mon = &spider->need_mons[link_idx];
- DBUG_ASSERT(!conn->mta_conn_mutex_lock_already);
- DBUG_ASSERT(!conn->mta_conn_mutex_unlock_later);
- conn->mta_conn_mutex_lock_already = TRUE;
- conn->mta_conn_mutex_unlock_later = TRUE;
- if (spider->handler_opened(link_idx, tgt_conn_kind))
- {
- dbton_hdl->reset_sql(SPIDER_SQL_TYPE_HANDLER);
- if ((error_num = dbton_hdl->append_close_handler_part(
- SPIDER_SQL_TYPE_HANDLER, link_idx)))
- {
- DBUG_ASSERT(conn->mta_conn_mutex_lock_already);
- DBUG_ASSERT(conn->mta_conn_mutex_unlock_later);
- conn->mta_conn_mutex_lock_already = FALSE;
- conn->mta_conn_mutex_unlock_later = FALSE;
- SPIDER_CLEAR_FILE_POS(&conn->mta_conn_mutex_file_pos);
- pthread_mutex_unlock(&conn->mta_conn_mutex);
- DBUG_RETURN(error_num);
- }
-
- spider_conn_set_timeout_from_share(conn, link_idx,
- spider->wide_handler->trx->thd,
- spider->share);
- if (dbton_hdl->execute_sql(
- SPIDER_SQL_TYPE_HANDLER,
- conn,
- -1,
- &spider->need_mons[link_idx])
- ) {
- error_num = spider_db_errorno(conn);
- goto error;
- }
- dbton_hdl->reset_sql(SPIDER_SQL_TYPE_HANDLER);
- if ((error_num = dbton_hdl->delete_opened_handler(conn, link_idx)))
- goto error;
- conn->opened_handlers--;
- DBUG_PRINT("info",("spider opened_handlers=%u", conn->opened_handlers));
- }
- DBUG_ASSERT(conn->mta_conn_mutex_lock_already);
- DBUG_ASSERT(conn->mta_conn_mutex_unlock_later);
- conn->mta_conn_mutex_lock_already = FALSE;
- conn->mta_conn_mutex_unlock_later = FALSE;
- SPIDER_CLEAR_FILE_POS(&conn->mta_conn_mutex_file_pos);
- pthread_mutex_unlock(&conn->mta_conn_mutex);
- DBUG_RETURN(0);
-
-error:
- DBUG_ASSERT(conn->mta_conn_mutex_lock_already);
- DBUG_ASSERT(conn->mta_conn_mutex_unlock_later);
- conn->mta_conn_mutex_lock_already = FALSE;
- conn->mta_conn_mutex_unlock_later = FALSE;
- SPIDER_CLEAR_FILE_POS(&conn->mta_conn_mutex_file_pos);
- pthread_mutex_unlock(&conn->mta_conn_mutex);
- DBUG_RETURN(error_num);
-}
-
bool spider_db_conn_is_network_error(
int error_num
) {
diff --git a/storage/spider/spd_db_conn.h b/storage/spider/spd_db_conn.h
index adda66d547b..1de59f43858 100644
--- a/storage/spider/spd_db_conn.h
+++ b/storage/spider/spd_db_conn.h
@@ -271,8 +271,6 @@
#define SPIDER_SQL_INDEX_FORCE_LEN (sizeof(SPIDER_SQL_INDEX_FORCE_STR) - 1)
#define SPIDER_SQL_INT_LEN 20
-#define SPIDER_SQL_HANDLER_CID_LEN 6
-#define SPIDER_SQL_HANDLER_CID_FORMAT "t%05u"
#define SPIDER_UDF_PING_TABLE_PING_ONLY (1 << 0)
#define SPIDER_UDF_PING_TABLE_USE_WHERE (1 << 1)
#define SPIDER_UDF_PING_TABLE_USE_ALL_MONITORING_NODES (1 << 2)
@@ -544,10 +542,6 @@ void spider_db_free_show_index(
SPIDER_SHARE *share
);
-void spider_db_append_handler_next(
- ha_spider *spider
-);
-
void spider_db_get_row_from_tmp_tbl_rec(
SPIDER_RESULT *current,
SPIDER_DB_ROW **row
@@ -1144,20 +1138,6 @@ int spider_db_udf_copy_tables(
longlong bulk_insert_rows
);
-int spider_db_open_handler(
- ha_spider *spider,
- SPIDER_CONN *conn,
- int link_idx
-);
-
-
-int spider_db_close_handler(
- ha_spider *spider,
- SPIDER_CONN *conn,
- int link_idx,
- uint tgt_conn_kind
-);
-
bool spider_db_conn_is_network_error(
int error_num
);
diff --git a/storage/spider/spd_db_include.h b/storage/spider/spd_db_include.h
index 338dc1030fc..bbe27271e37 100644
--- a/storage/spider/spd_db_include.h
+++ b/storage/spider/spd_db_include.h
@@ -33,12 +33,8 @@
#define SPIDER_HAS_APPEND_FOR_SINGLE_QUOTE
#define SPIDER_HAS_SHOW_SIMPLE_FUNC
#define SPIDER_HAS_JT_HASH_INDEX_MERGE
-#define SPIDER_HAS_EXPR_CACHE_ITEM
-#define SPIDER_ITEM_HAS_CMP_TYPE
#define SPIDER_HAS_TIME_STATUS
#define SPIDER_HAS_DECIMAL_OPERATION_RESULTS_VALUE_TYPE
-#define SPIDER_ITEM_STRING_WITHOUT_SET_STR_WITH_COPY
-#define SPIDER_ITEM_STRING_WITHOUT_SET_STR_WITH_COPY_AND_THDPTR
#define SPIDER_ORDER_HAS_ENUM_ORDER
#define SPIDER_ITEM_GEOFUNC_NAME_HAS_MBR
#define SPIDER_HANDLER_AUTO_REPAIR_HAS_ERROR
@@ -174,9 +170,6 @@ typedef st_spider_result SPIDER_RESULT;
#define SPIDER_CONN_KIND_MYSQL (1 << 0)
-#define SPIDER_SQL_KIND_SQL (1 << 0)
-#define SPIDER_SQL_KIND_HANDLER (1 << 1)
-
#define SPIDER_SQL_TYPE_SELECT_SQL (1 << 0)
#define SPIDER_SQL_TYPE_INSERT_SQL (1 << 1)
#define SPIDER_SQL_TYPE_UPDATE_SQL (1 << 2)
@@ -185,7 +178,6 @@ typedef st_spider_result SPIDER_RESULT;
#define SPIDER_SQL_TYPE_TMP_SQL (1 << 5)
#define SPIDER_SQL_TYPE_DROP_TMP_TABLE_SQL (1 << 6)
#define SPIDER_SQL_TYPE_OTHER_SQL (1 << 7)
-#define SPIDER_SQL_TYPE_HANDLER (1 << 8)
#define SPIDER_SQL_TYPE_SELECT_HS (1 << 9)
#define SPIDER_SQL_TYPE_INSERT_HS (1 << 10)
#define SPIDER_SQL_TYPE_UPDATE_HS (1 << 11)
@@ -1100,8 +1092,6 @@ public:
) = 0;
virtual uint get_lock_table_hash_count() = 0;
virtual void reset_lock_table_hash() = 0;
- virtual uint get_opened_handler_count() = 0;
- virtual void reset_opened_handler() = 0;
virtual void set_dup_key_idx(
ha_spider *spider,
int link_idx
@@ -1367,16 +1357,6 @@ public:
ulong sql_type,
uint multi_range_cnt
) = 0;
- virtual int append_open_handler_part(
- ulong sql_type,
- uint handler_id,
- SPIDER_CONN *conn,
- int link_idx
- ) = 0;
- virtual int append_close_handler_part(
- ulong sql_type,
- int link_idx
- ) = 0;
virtual int append_insert_terminator_part(
ulong sql_type
) = 0;
@@ -1539,20 +1519,9 @@ public:
SPIDER_CONN *conn,
int link_idx
) = 0;
- virtual int insert_opened_handler(
- SPIDER_CONN *conn,
- int link_idx
- ) = 0;
- virtual int delete_opened_handler(
- SPIDER_CONN *conn,
- int link_idx
- ) = 0;
virtual int sync_from_clone_source(
spider_db_handler *dbton_hdl
) = 0;
- virtual bool support_use_handler(
- int use_handler
- ) = 0;
virtual bool minimum_select_bit_is_set(
uint field_index
) = 0;
@@ -1741,7 +1710,6 @@ typedef struct st_spider_position
bool use_position;
bool mrr_with_cnt;
bool direct_aggregate;
- uint sql_kind;
uchar *position_bitmap;
st_spider_ft_info *ft_first;
st_spider_ft_info *ft_current;
@@ -1790,9 +1758,6 @@ typedef struct st_spider_result_list
int key_order;
spider_string *sqls;
int ha_read_kind;
- bool have_sql_kind_backup;
- uint *sql_kind_backup;
- uint sql_kinds_backup;
bool use_union;
bool use_both_key;
const key_range *end_key;
diff --git a/storage/spider/spd_db_mysql.cc b/storage/spider/spd_db_mysql.cc
index 52df7c6b982..787fd2430a7 100644
--- a/storage/spider/spd_db_mysql.cc
+++ b/storage/spider/spd_db_mysql.cc
@@ -1758,7 +1758,7 @@ spider_db_mbase::spider_db_mbase(
SPIDER_CONN *conn,
spider_db_mbase_util *spider_db_mbase_utility
) : spider_db_conn(conn), spider_db_mbase_utility(spider_db_mbase_utility),
- lock_table_hash_inited(FALSE), handler_open_array_inited(FALSE)
+ lock_table_hash_inited(FALSE)
{
DBUG_ENTER("spider_db_mbase::spider_db_mbase");
DBUG_PRINT("info",("spider this=%p", this));
@@ -1788,15 +1788,6 @@ spider_db_mbase::~spider_db_mbase()
{
DBUG_ENTER("spider_db_mbase::~spider_db_mbase");
DBUG_PRINT("info",("spider this=%p", this));
- if (handler_open_array_inited)
- {
- reset_opened_handler();
- spider_free_mem_calc(spider_current_trx,
- handler_open_array_id,
- handler_open_array.max_element *
- handler_open_array.size_of_element);
- delete_dynamic(&handler_open_array);
- }
if (lock_table_hash_inited)
{
spider_free_mem_calc(spider_current_trx,
@@ -1839,18 +1830,6 @@ int spider_db_mbase::init()
lock_table_hash.array.size_of_element);
lock_table_hash_inited = TRUE;
- if (
- SPD_INIT_DYNAMIC_ARRAY2(&handler_open_array,
- sizeof(SPIDER_LINK_FOR_HASH *), NULL, 16, 16, MYF(MY_WME))
- ) {
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- }
- spider_alloc_calc_mem_init(handler_open_array, 162);
- spider_alloc_calc_mem(spider_current_trx,
- handler_open_array,
- handler_open_array.max_element *
- handler_open_array.size_of_element);
- handler_open_array_inited = TRUE;
DBUG_RETURN(0);
}
@@ -3770,30 +3749,6 @@ void spider_db_mbase::reset_lock_table_hash()
DBUG_VOID_RETURN;
}
-uint spider_db_mbase::get_opened_handler_count()
-{
- DBUG_ENTER("spider_db_mbase::get_opened_handler_count");
- DBUG_PRINT("info",("spider this=%p", this));
- DBUG_RETURN(handler_open_array.elements);
-}
-
-void spider_db_mbase::reset_opened_handler()
-{
- ha_spider *tmp_spider;
- int tmp_link_idx;
- SPIDER_LINK_FOR_HASH **tmp_link_for_hash;
- DBUG_ENTER("spider_db_mbase::reset_opened_handler");
- DBUG_PRINT("info",("spider this=%p", this));
- while ((tmp_link_for_hash =
- (SPIDER_LINK_FOR_HASH **) pop_dynamic(&handler_open_array)))
- {
- tmp_spider = (*tmp_link_for_hash)->spider;
- tmp_link_idx = (*tmp_link_for_hash)->link_idx;
- tmp_spider->clear_handler_opened(tmp_link_idx, conn->conn_kind);
- }
- DBUG_VOID_RETURN;
-}
-
void spider_db_mbase::set_dup_key_idx(
ha_spider *spider,
int link_idx
@@ -3815,13 +3770,8 @@ void spider_db_mbase::set_dup_key_idx(
key_name = spider->share->tgt_pk_names[all_link_idx];
key_name_length = spider->share->tgt_pk_names_lengths[all_link_idx];
} else {
-#ifdef SPIDER_use_LEX_CSTRING_for_KEY_Field_name
key_name = table->key_info[roop_count].name.str;
key_name_length = table->key_info[roop_count].name.length;
-#else
- key_name = table->key_info[roop_count].name;
- key_name_length = strlen(key_name);
-#endif
}
DBUG_PRINT("info",("spider key_name=%s", key_name));
if (
@@ -6316,15 +6266,12 @@ int spider_db_mbase_util::open_item_func(
bool has_other_item = FALSE;
while((item = lif++))
{
-#ifdef SPIDER_HAS_EXPR_CACHE_ITEM
if (
item->type() == Item::EXPR_CACHE_ITEM
) {
DBUG_PRINT("info",("spider EXPR_CACHE_ITEM"));
has_expr_cache_item = TRUE;
- } else
-#endif
- if (
+ } else if (
item->type() == Item::FUNC_ITEM &&
((Item_func *) item)->functype() == Item_func::ISNOTNULL_FUNC
) {
@@ -6523,7 +6470,6 @@ int spider_db_mbase_util::open_item_func(
}
break;
case Item_func::LIKE_FUNC:
-#ifdef SPIDER_LIKE_FUNC_HAS_GET_NEGATED
if (str)
{
if (((Item_func_like *)item_func)->get_negated())
@@ -6539,9 +6485,6 @@ int spider_db_mbase_util::open_item_func(
}
}
break;
-#else
- DBUG_RETURN(ER_SPIDER_COND_SKIP_NUM);
-#endif
case Item_func::CASE_SEARCHED_FUNC:
case Item_func::CASE_SIMPLE_FUNC:
#ifdef ITEM_FUNC_CASE_PARAMS_ARE_PUBLIC
@@ -8749,8 +8692,6 @@ int spider_mbase_handler::append_index_hint(
while(index_hints && (hint = iter++))
{
-// hint->print(thd, str);
- if (sql_type != SPIDER_SQL_TYPE_HANDLER)
{
switch(hint->type)
{
@@ -8795,13 +8736,8 @@ int spider_mbase_handler::append_table_name_with_adjusting(
int error_num = 0;
DBUG_ENTER("spider_mbase_handler::append_table_name_with_adjusting");
DBUG_PRINT("info",("spider this=%p", this));
- if (sql_type == SPIDER_SQL_TYPE_HANDLER)
- {
- str->q_append(spider->m_handler_cid[link_idx], SPIDER_SQL_HANDLER_CID_LEN);
- } else {
error_num = mysql_share->append_table_name_with_adjusting(str,
spider->conn_link_idx[link_idx]);
- }
DBUG_RETURN(error_num);
}
@@ -9710,10 +9646,8 @@ int spider_mbase_handler::append_direct_update_set(
spider_string *str
) {
DBUG_ENTER("spider_mbase_handler::append_direct_update_set");
- if (
- spider->direct_update_kinds == SPIDER_SQL_KIND_SQL &&
- spider->wide_handler->direct_update_fields
- ) {
+ if (spider->wide_handler->direct_update_fields)
+ {
if (str->reserve(SPIDER_SQL_SET_LEN))
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
str->q_append(SPIDER_SQL_SET_STR, SPIDER_SQL_SET_LEN);
@@ -9721,11 +9655,6 @@ int spider_mbase_handler::append_direct_update_set(
dbton_id, FALSE, NULL));
}
- if (
- (spider->direct_update_kinds & SPIDER_SQL_KIND_SQL)
- ) {
- DBUG_ASSERT(0);
- }
DBUG_RETURN(0);
}
@@ -9785,9 +9714,6 @@ int spider_mbase_handler::append_select_part(
case SPIDER_SQL_TYPE_SELECT_SQL:
str = &sql;
break;
- case SPIDER_SQL_TYPE_HANDLER:
- str = &ha_sql;
- break;
default:
DBUG_RETURN(0);
}
@@ -9802,12 +9728,7 @@ int spider_mbase_handler::append_select(
SPIDER_RESULT_LIST *result_list = &spider->result_list;
SPIDER_WIDE_HANDLER *wide_handler = spider->wide_handler;
DBUG_ENTER("spider_mbase_handler::append_select");
- if (sql_type == SPIDER_SQL_TYPE_HANDLER)
{
- if (str->reserve(SPIDER_SQL_HANDLER_LEN))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- str->q_append(SPIDER_SQL_HANDLER_STR, SPIDER_SQL_HANDLER_LEN);
- } else {
if (str->reserve(SPIDER_SQL_SELECT_LEN))
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
str->q_append(SPIDER_SQL_SELECT_STR, SPIDER_SQL_SELECT_LEN);
@@ -10305,9 +10226,6 @@ int spider_mbase_handler::append_hint_after_table_part(
case SPIDER_SQL_TYPE_BULK_UPDATE_SQL:
str = &update_sql;
break;
- case SPIDER_SQL_TYPE_HANDLER:
- str = &ha_sql;
- break;
default:
DBUG_RETURN(0);
}
@@ -10346,9 +10264,6 @@ void spider_mbase_handler::set_where_pos(
case SPIDER_SQL_TYPE_BULK_UPDATE_SQL:
where_pos = update_sql.length();
break;
- case SPIDER_SQL_TYPE_HANDLER:
- ha_read_pos = ha_sql.length();
- break;
default:
break;
}
@@ -10371,9 +10286,6 @@ void spider_mbase_handler::set_where_to_pos(
case SPIDER_SQL_TYPE_BULK_UPDATE_SQL:
update_sql.length(where_pos);
break;
- case SPIDER_SQL_TYPE_HANDLER:
- ha_sql.length(ha_read_pos);
- break;
default:
break;
}
@@ -10719,15 +10631,6 @@ int spider_mbase_handler::append_key_where_part(
str = &update_sql;
set_order = FALSE;
break;
- case SPIDER_SQL_TYPE_HANDLER:
- str = &ha_sql;
- ha_read_pos = str->length();
- str_part = &sql_part;
- str_part2 = &sql_part2;
- str_part->length(0);
- str_part2->length(0);
- set_order = TRUE;
- break;
default:
DBUG_RETURN(0);
}
@@ -10777,11 +10680,6 @@ int spider_mbase_handler::append_is_null_part(
case SPIDER_SQL_TYPE_BULK_UPDATE_SQL:
str = &update_sql;
break;
- case SPIDER_SQL_TYPE_HANDLER:
- str = &ha_sql;
- str_part = &sql_part;
- str_part2 = &sql_part2;
- break;
default:
DBUG_RETURN(0);
}
@@ -10808,38 +10706,6 @@ int spider_mbase_handler::append_is_null(
{
if (*(*ptr)++)
{
- if (sql_type == SPIDER_SQL_TYPE_HANDLER)
- {
- if (
- key_eq ||
- key->flag == HA_READ_KEY_EXACT ||
- key->flag == HA_READ_KEY_OR_NEXT
- ) {
- if (str_part->length() == SPIDER_SQL_OPEN_PAREN_LEN)
- {
- if (str->reserve(SPIDER_SQL_EQUAL_LEN))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- str->q_append(SPIDER_SQL_EQUAL_STR, SPIDER_SQL_EQUAL_LEN);
- str = str_part;
- if (str->reserve(SPIDER_SQL_NULL_LEN))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- str->q_append(SPIDER_SQL_NULL_STR, SPIDER_SQL_NULL_LEN);
- }
- } else {
- if (str_part->length() == SPIDER_SQL_OPEN_PAREN_LEN)
- {
- str = str_part;
- /* first index column */
- str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN);
- ha_next_pos = str->length();
- if (str->reserve(SPIDER_SQL_FIRST_LEN))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- str->q_append(SPIDER_SQL_FIRST_STR, SPIDER_SQL_FIRST_LEN);
- spider->result_list.ha_read_kind = 1;
- }
- }
- str = str_part2;
- }
if (
key_eq ||
key->flag == HA_READ_KEY_EXACT ||
@@ -10886,11 +10752,6 @@ int spider_mbase_handler::append_where_terminator_part(
case SPIDER_SQL_TYPE_BULK_UPDATE_SQL:
str = &update_sql;
break;
- case SPIDER_SQL_TYPE_HANDLER:
- str = &ha_sql;
- str_part = &sql_part;
- str_part2 = &sql_part2;
- break;
default:
DBUG_RETURN(0);
}
@@ -10909,31 +10770,11 @@ int spider_mbase_handler::append_where_terminator(
) {
SPIDER_RESULT_LIST *result_list = &spider->result_list;
DBUG_ENTER("spider_mbase_handler::append_where_terminator");
- DBUG_PRINT("info",("spider this=%p", this));
- if (sql_type != SPIDER_SQL_TYPE_HANDLER)
- {
- str->length(str->length() - SPIDER_SQL_AND_LEN);
- if (!set_order)
- result_list->key_order = key_count;
- } else {
- str_part2->length(str_part2->length() - SPIDER_SQL_AND_LEN);
+ DBUG_PRINT("info", ("spider this=%p", this));
- if (!result_list->ha_read_kind)
- str_part->q_append(SPIDER_SQL_CLOSE_PAREN_STR,
- SPIDER_SQL_CLOSE_PAREN_LEN);
- if (str->append(*str_part))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- uint clause_length = str->length() - ha_next_pos;
- if (clause_length < SPIDER_SQL_NEXT_LEN)
- {
- int roop_count;
- clause_length = SPIDER_SQL_NEXT_LEN - clause_length;
- if (str->reserve(clause_length))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- for (roop_count = 0; roop_count < (int) clause_length; roop_count++)
- str->q_append(SPIDER_SQL_SPACE_STR, SPIDER_SQL_SPACE_LEN);
- }
- }
+ str->length(str->length() - SPIDER_SQL_AND_LEN);
+ if (!set_order)
+ result_list->key_order= key_count;
DBUG_RETURN(0);
}
@@ -11140,39 +10981,6 @@ int spider_mbase_handler::append_condition_part(
start_where = ((int) str->length() == where_pos);
}
break;
- case SPIDER_SQL_TYPE_HANDLER:
- if (test_flg)
- {
- str = NULL;
- } else {
- str = &ha_sql;
- start_where = TRUE;
- if (spider->active_index == MAX_KEY)
- {
- set_where_pos(SPIDER_SQL_TYPE_HANDLER);
- if (str->reserve(SPIDER_SQL_READ_LEN + SPIDER_SQL_FIRST_LEN))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- str->q_append(SPIDER_SQL_READ_STR, SPIDER_SQL_READ_LEN);
- ha_next_pos = str->length();
- str->q_append(SPIDER_SQL_FIRST_STR, SPIDER_SQL_FIRST_LEN);
- sql_part2.length(0);
- }
- ha_where_pos = str->length();
-
- if (
- spider->wide_handler->sql_command == SQLCOM_HA_READ ||
- !spider->result_list.use_both_key
- ) {
- if (sql_part2.length())
- {
- str->append(sql_part2);
- start_where = FALSE;
- }
- } else {
- DBUG_RETURN(0);
- }
- }
- break;
default:
DBUG_RETURN(0);
}
@@ -11456,9 +11264,6 @@ void spider_mbase_handler::set_order_pos(
case SPIDER_SQL_TYPE_BULK_UPDATE_SQL:
order_pos = update_sql.length();
break;
- case SPIDER_SQL_TYPE_HANDLER:
- ha_next_pos = ha_sql.length();
- break;
default:
DBUG_ASSERT(0);
break;
@@ -11482,9 +11287,6 @@ void spider_mbase_handler::set_order_to_pos(
case SPIDER_SQL_TYPE_BULK_UPDATE_SQL:
update_sql.length(order_pos);
break;
- case SPIDER_SQL_TYPE_HANDLER:
- ha_sql.length(ha_next_pos);
- break;
default:
DBUG_ASSERT(0);
break;
@@ -11513,9 +11315,6 @@ int spider_mbase_handler::append_group_by_part(
case SPIDER_SQL_TYPE_BULK_UPDATE_SQL:
str = &update_sql;
break;
- case SPIDER_SQL_TYPE_HANDLER:
- str = &ha_sql;
- break;
default:
DBUG_RETURN(0);
}
@@ -11576,10 +11375,6 @@ int spider_mbase_handler::append_key_order_for_merge_with_alias_part(
case SPIDER_SQL_TYPE_BULK_UPDATE_SQL:
str = &update_sql;
break;
- case SPIDER_SQL_TYPE_HANDLER:
- str = &ha_sql;
- ha_limit_pos = ha_sql.length();
- break;
default:
DBUG_RETURN(0);
}
@@ -11690,9 +11485,6 @@ int spider_mbase_handler::append_key_order_for_direct_order_limit_with_alias_par
case SPIDER_SQL_TYPE_BULK_UPDATE_SQL:
str = &update_sql;
break;
- case SPIDER_SQL_TYPE_HANDLER:
- str = &ha_sql;
- break;
default:
DBUG_RETURN(0);
}
@@ -11774,10 +11566,6 @@ int spider_mbase_handler::append_key_order_with_alias_part(
case SPIDER_SQL_TYPE_BULK_UPDATE_SQL:
str = &update_sql;
break;
- case SPIDER_SQL_TYPE_HANDLER:
- str = &ha_sql;
- error_num = append_key_order_for_handler(str, alias, alias_length);
- DBUG_RETURN(error_num);
default:
DBUG_RETURN(0);
}
@@ -11990,10 +11778,6 @@ int spider_mbase_handler::append_limit_part(
str = &update_sql;
limit_pos = str->length();
break;
- case SPIDER_SQL_TYPE_HANDLER:
- str = &ha_sql;
- ha_limit_pos = str->length();
- break;
default:
DBUG_RETURN(0);
}
@@ -12027,10 +11811,6 @@ int spider_mbase_handler::reappend_limit_part(
str = &update_sql;
str->length(limit_pos);
break;
- case SPIDER_SQL_TYPE_HANDLER:
- str = &ha_sql;
- str->length(ha_limit_pos);
- break;
default:
DBUG_RETURN(0);
}
@@ -12289,97 +12069,6 @@ int spider_mbase_handler::append_multi_range_cnt_with_name(
DBUG_RETURN(0);
}
-int spider_mbase_handler::append_open_handler_part(
- ulong sql_type,
- uint handler_id,
- SPIDER_CONN *conn,
- int link_idx
-) {
- int error_num;
- spider_string *str;
- DBUG_ENTER("spider_mbase_handler::append_open_handler_part");
- DBUG_PRINT("info",("spider this=%p", this));
- switch (sql_type)
- {
- case SPIDER_SQL_TYPE_HANDLER:
- str = &ha_sql;
- break;
- default:
- DBUG_RETURN(0);
- }
- error_num = append_open_handler(str, handler_id, conn, link_idx);
- exec_ha_sql = str;
- DBUG_RETURN(error_num);
-}
-
-int spider_mbase_handler::append_open_handler(
- spider_string *str,
- uint handler_id,
- SPIDER_CONN *conn,
- int link_idx
-) {
- int error_num;
- DBUG_ENTER("spider_mbase_handler::append_open_handler");
- DBUG_PRINT("info",("spider this=%p", this));
- DBUG_PRINT("info",("spider link_idx=%d", link_idx));
- DBUG_PRINT("info",("spider m_handler_cid=%s",
- spider->m_handler_cid[link_idx]));
- if (str->reserve(SPIDER_SQL_HANDLER_LEN))
- {
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- }
- str->q_append(SPIDER_SQL_HANDLER_STR, SPIDER_SQL_HANDLER_LEN);
- if ((error_num = mysql_share->append_table_name(str,
- spider->conn_link_idx[link_idx])))
- DBUG_RETURN(error_num);
- if (str->reserve(SPIDER_SQL_OPEN_LEN + SPIDER_SQL_AS_LEN +
- SPIDER_SQL_HANDLER_CID_LEN))
- {
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- }
- str->q_append(SPIDER_SQL_OPEN_STR, SPIDER_SQL_OPEN_LEN);
- str->q_append(SPIDER_SQL_AS_STR, SPIDER_SQL_AS_LEN);
- str->q_append(spider->m_handler_cid[link_idx], SPIDER_SQL_HANDLER_CID_LEN);
- DBUG_RETURN(0);
-}
-
-int spider_mbase_handler::append_close_handler_part(
- ulong sql_type,
- int link_idx
-) {
- int error_num;
- spider_string *str;
- DBUG_ENTER("spider_mbase_handler::append_close_handler_part");
- DBUG_PRINT("info",("spider this=%p", this));
- switch (sql_type)
- {
- case SPIDER_SQL_TYPE_HANDLER:
- str = &ha_sql;
- break;
- default:
- DBUG_RETURN(0);
- }
- error_num = append_close_handler(str, link_idx);
- exec_ha_sql = str;
- DBUG_RETURN(error_num);
-}
-
-int spider_mbase_handler::append_close_handler(
- spider_string *str,
- int link_idx
-) {
- DBUG_ENTER("spider_mbase_handler::append_close_handler");
- DBUG_PRINT("info",("spider this=%p", this));
- if (str->reserve(SPIDER_SQL_HANDLER_LEN + SPIDER_SQL_CLOSE_LEN +
- SPIDER_SQL_HANDLER_CID_LEN))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- str->q_append(SPIDER_SQL_HANDLER_STR, SPIDER_SQL_HANDLER_LEN);
- str->q_append(spider->m_handler_cid[link_idx],
- SPIDER_SQL_HANDLER_CID_LEN);
- str->q_append(SPIDER_SQL_CLOSE_STR, SPIDER_SQL_CLOSE_LEN);
- DBUG_RETURN(0);
-}
-
int spider_mbase_handler::append_insert_terminator_part(
ulong sql_type
) {
@@ -12616,9 +12305,6 @@ int spider_mbase_handler::append_from_part(
DBUG_PRINT("info",("spider this=%p", this));
switch (sql_type)
{
- case SPIDER_SQL_TYPE_HANDLER:
- str = &ha_sql;
- break;
case SPIDER_SQL_TYPE_UPDATE_SQL:
case SPIDER_SQL_TYPE_DELETE_SQL:
case SPIDER_SQL_TYPE_BULK_UPDATE_SQL:
@@ -12640,33 +12326,18 @@ int spider_mbase_handler::append_from(
DBUG_ENTER("spider_mbase_handler::append_from");
DBUG_PRINT("info",("spider this=%p", this));
DBUG_PRINT("info",("spider link_idx=%d", link_idx));
- int error_num = 0;
- if (sql_type == SPIDER_SQL_TYPE_HANDLER)
+ int error_num= 0;
+ if (str->reserve(SPIDER_SQL_FROM_LEN + mysql_share->db_nm_max_length +
+ SPIDER_SQL_DOT_LEN + mysql_share->table_nm_max_length +
+ /* SPIDER_SQL_NAME_QUOTE_LEN */ 4 +
+ SPIDER_SQL_OPEN_PAREN_LEN))
+ DBUG_RETURN(HA_ERR_OUT_OF_MEM);
+ str->q_append(SPIDER_SQL_FROM_STR, SPIDER_SQL_FROM_LEN);
+ table_name_pos= str->length();
+ append_table_name_with_adjusting(str, link_idx, sql_type);
+ if (spider_param_index_hint_pushdown(spider->wide_handler->trx->thd))
{
- ha_table_name_pos = str->length();
- DBUG_PRINT("info",("spider ha_table_name_pos=%u", ha_table_name_pos));
- ha_sql_handler_id = spider->m_handler_id[link_idx];
- DBUG_PRINT("info",("spider ha_sql_handler_id=%u", ha_sql_handler_id));
- if (str->reserve(SPIDER_SQL_HANDLER_CID_LEN))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- str->q_append(spider->m_handler_cid[link_idx], SPIDER_SQL_HANDLER_CID_LEN);
- DBUG_PRINT("info",("spider m_handler_cid=%s",
- spider->m_handler_cid[link_idx]));
- } else {
- if (str->reserve(SPIDER_SQL_FROM_LEN + mysql_share->db_nm_max_length +
- SPIDER_SQL_DOT_LEN + mysql_share->table_nm_max_length +
- /* SPIDER_SQL_NAME_QUOTE_LEN */ 4 + SPIDER_SQL_OPEN_PAREN_LEN))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- str->q_append(SPIDER_SQL_FROM_STR, SPIDER_SQL_FROM_LEN);
- table_name_pos = str->length();
- append_table_name_with_adjusting(str, link_idx, sql_type);
- if(spider_param_index_hint_pushdown(spider->wide_handler->trx->thd))
- {
- if((error_num = append_index_hint(str, link_idx, sql_type)))
- {
- DBUG_RETURN(error_num);
- }
- }
+ DBUG_RETURN(error_num);
}
DBUG_RETURN(0);
}
@@ -13232,9 +12903,6 @@ bool spider_mbase_handler::sql_is_empty(
case SPIDER_SQL_TYPE_TMP_SQL:
is_empty = (tmp_sql.length() == 0);
break;
- case SPIDER_SQL_TYPE_HANDLER:
- is_empty = (ha_sql.length() == 0);
- break;
default:
is_empty = TRUE;
break;
@@ -13564,10 +13232,6 @@ int spider_mbase_handler::reset_sql(
{
tmp_sql.length(0);
}
- if (sql_type & SPIDER_SQL_TYPE_HANDLER)
- {
- ha_sql.length(0);
- }
DBUG_RETURN(0);
}
@@ -13759,23 +13423,6 @@ int spider_mbase_handler::set_sql_for_exec(
exec_update_sql->length(tmp_pos);
}
}
- if (sql_type & SPIDER_SQL_TYPE_HANDLER)
- {
- if (spider->m_handler_id[link_idx] == ha_sql_handler_id)
- exec_ha_sql = &ha_sql;
- else {
- exec_ha_sql = &result_list->sqls[link_idx];
- if (exec_ha_sql->copy(ha_sql))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- else {
- tmp_pos = exec_ha_sql->length();
- exec_ha_sql->length(ha_table_name_pos);
- append_table_name_with_adjusting(exec_ha_sql, link_idx,
- SPIDER_SQL_TYPE_HANDLER);
- exec_ha_sql->length(tmp_pos);
- }
- }
- }
DBUG_RETURN(0);
}
@@ -13841,11 +13488,6 @@ int spider_mbase_handler::execute_sql(
tgt_sql = exec_tmp_sql;
tgt_length = tmp_sql_pos5;
break;
- case SPIDER_SQL_TYPE_HANDLER:
- DBUG_PRINT("info",("spider SPIDER_SQL_TYPE_HANDLER"));
- tgt_sql = exec_ha_sql;
- tgt_length = tgt_sql->length();
- break;
default:
/* nothing to do */
DBUG_PRINT("info",("spider default"));
@@ -15484,55 +15126,6 @@ int spider_mbase_handler::flush_logs(
DBUG_RETURN(0);
}
-int spider_mbase_handler::insert_opened_handler(
- SPIDER_CONN *conn,
- int link_idx
-) {
- spider_db_mbase *db_conn = (spider_db_mbase *) conn->db_conn;
- SPIDER_LINK_FOR_HASH *tmp_link_for_hash = &link_for_hash[link_idx];
- DBUG_ASSERT(tmp_link_for_hash->spider == spider);
- DBUG_ASSERT(tmp_link_for_hash->link_idx == link_idx);
- uint old_elements = db_conn->handler_open_array.max_element;
- DBUG_ENTER("spider_mbase_handler::insert_opened_handler");
- DBUG_PRINT("info",("spider this=%p", this));
- if (insert_dynamic(&db_conn->handler_open_array,
- (uchar*) &tmp_link_for_hash))
- {
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
- }
- if (db_conn->handler_open_array.max_element > old_elements)
- {
- spider_alloc_calc_mem(spider_current_trx,
- db_conn->handler_open_array,
- (db_conn->handler_open_array.max_element - old_elements) *
- db_conn->handler_open_array.size_of_element);
- }
- DBUG_RETURN(0);
-}
-
-int spider_mbase_handler::delete_opened_handler(
- SPIDER_CONN *conn,
- int link_idx
-) {
- spider_db_mbase *db_conn = (spider_db_mbase *) conn->db_conn;
- uint roop_count, elements = db_conn->handler_open_array.elements;
- SPIDER_LINK_FOR_HASH *tmp_link_for_hash;
- DBUG_ENTER("spider_mbase_handler::delete_opened_handler");
- DBUG_PRINT("info",("spider this=%p", this));
- for (roop_count = 0; roop_count < elements; roop_count++)
- {
- get_dynamic(&db_conn->handler_open_array, (uchar *) &tmp_link_for_hash,
- roop_count);
- if (tmp_link_for_hash == &link_for_hash[link_idx])
- {
- delete_dynamic_element(&db_conn->handler_open_array, roop_count);
- break;
- }
- }
- DBUG_ASSERT(roop_count < elements);
- DBUG_RETURN(0);
-}
-
int spider_mbase_handler::sync_from_clone_source(
spider_db_handler *dbton_hdl
) {
@@ -15541,14 +15134,6 @@ int spider_mbase_handler::sync_from_clone_source(
DBUG_RETURN(0);
}
-bool spider_mbase_handler::support_use_handler(
- int use_handler
-) {
- DBUG_ENTER("spider_mbase_handler::support_use_handler");
- DBUG_PRINT("info",("spider this=%p", this));
- DBUG_RETURN(TRUE);
-}
-
void spider_mbase_handler::minimum_select_bitmap_create()
{
TABLE *table = spider->get_table();
diff --git a/storage/spider/spd_db_mysql.h b/storage/spider/spd_db_mysql.h
index 0d121416653..b1f30c22c00 100644
--- a/storage/spider/spd_db_mysql.h
+++ b/storage/spider/spd_db_mysql.h
@@ -396,12 +396,6 @@ public:
const char *lock_table_hash_func_name;
const char *lock_table_hash_file_name;
ulong lock_table_hash_line_no;
- DYNAMIC_ARRAY handler_open_array;
- bool handler_open_array_inited;
- uint handler_open_array_id;
- const char *handler_open_array_func_name;
- const char *handler_open_array_file_name;
- ulong handler_open_array_line_no;
spider_db_mbase(
SPIDER_CONN *conn,
spider_db_mbase_util *spider_db_mbase_utility
@@ -581,8 +575,6 @@ public:
);
uint get_lock_table_hash_count();
void reset_lock_table_hash();
- uint get_opened_handler_count();
- void reset_opened_handler();
void set_dup_key_idx(
ha_spider *spider,
int link_idx
@@ -1190,26 +1182,6 @@ public:
spider_string *str,
uint multi_range_cnt
);
- int append_open_handler_part(
- ulong sql_type,
- uint handler_id,
- SPIDER_CONN *conn,
- int link_idx
- );
- int append_open_handler(
- spider_string *str,
- uint handler_id,
- SPIDER_CONN *conn,
- int link_idx
- );
- int append_close_handler_part(
- ulong sql_type,
- int link_idx
- );
- int append_close_handler(
- spider_string *str,
- int link_idx
- );
int append_insert_terminator_part(
ulong sql_type
);
@@ -1476,20 +1448,9 @@ public:
SPIDER_CONN *conn,
int link_idx
);
- int insert_opened_handler(
- SPIDER_CONN *conn,
- int link_idx
- );
- int delete_opened_handler(
- SPIDER_CONN *conn,
- int link_idx
- );
int sync_from_clone_source(
spider_db_handler *dbton_hdl
);
- bool support_use_handler(
- int use_handler
- );
void minimum_select_bitmap_create();
bool minimum_select_bit_is_set(
uint field_index
diff --git a/storage/spider/spd_direct_sql.cc b/storage/spider/spd_direct_sql.cc
index be26009e6f5..429c8fa9ae7 100644
--- a/storage/spider/spd_direct_sql.cc
+++ b/storage/spider/spd_direct_sql.cc
@@ -1594,10 +1594,9 @@ long long spider_direct_sql_body(
}
trx->updated_in_this_trx = TRUE;
DBUG_PRINT("info",("spider trx->updated_in_this_trx=TRUE"));
- use_real_table = spider_param_udf_ds_use_real_table(thd,
- direct_sql->use_real_table);
- for (roop_count = 0; roop_count < direct_sql->table_count; roop_count++)
- {
+ use_real_table= direct_sql->use_real_table;
+ for (roop_count= 0; roop_count < direct_sql->table_count; roop_count++)
+ {
#ifdef SPIDER_NEED_INIT_ONE_TABLE_FOR_FIND_TEMPORARY_TABLE
#ifdef SPIDER_use_LEX_CSTRING_for_database_tablename_alias
LEX_CSTRING db_name =
diff --git a/storage/spider/spd_environ.h b/storage/spider/spd_environ.h
index 0caf23af64c..ccdc7009f9a 100644
--- a/storage/spider/spd_environ.h
+++ b/storage/spider/spd_environ.h
@@ -26,7 +26,4 @@
#define HA_EXTRA_HAS_STARTING_ORDERED_INDEX_SCAN
#define HANDLER_HAS_CAN_USE_FOR_AUTO_INC_INIT
#define SPIDER_UPDATE_ROW_HAS_CONST_NEW_DATA
-#define SPIDER_MDEV_16246
-#define SPIDER_LIKE_FUNC_HAS_GET_NEGATED
-#define SPIDER_I_S_USE_SHOW_FOR_COLUMN
#endif /* SPD_ENVIRON_INCLUDED */
diff --git a/storage/spider/spd_group_by_handler.cc b/storage/spider/spd_group_by_handler.cc
index ca174d42e39..774b9cfa2f8 100644
--- a/storage/spider/spd_group_by_handler.cc
+++ b/storage/spider/spd_group_by_handler.cc
@@ -1237,10 +1237,6 @@ int spider_group_by_handler::init_scan()
spider_db_free_one_result_for_start_next(spider);
- spider->sql_kinds = SPIDER_SQL_KIND_SQL;
- for (link_idx = 0; link_idx < (int) share->link_count; ++link_idx)
- spider->sql_kind[link_idx] = SPIDER_SQL_KIND_SQL;
-
spider->do_direct_update = FALSE;
spider->direct_update_kinds = 0;
spider_get_select_limit(spider, &select_lex, &select_limit, &offset_limit);
@@ -1914,16 +1910,6 @@ group_by_handler *spider_create_group_by_handler(
spider->conn_link_idx, roop_count, share->link_count,
tgt_link_status)
) {
- if (spider_param_use_handler(thd, share->use_handlers[roop_count]))
- {
- DBUG_PRINT("info",("spider direct_join does not support use_handler"));
- if (lock_mode)
- {
- delete fields;
- DBUG_RETURN(NULL);
- }
- continue;
- }
conn = spider->conns[roop_count];
DBUG_PRINT("info",("spider roop_count=%d", roop_count));
DBUG_PRINT("info",("spider conn=%p", conn));
@@ -1999,16 +1985,6 @@ group_by_handler *spider_create_group_by_handler(
tgt_link_status)
) {
DBUG_PRINT("info",("spider roop_count=%d", roop_count));
- if (spider_param_use_handler(thd, share->use_handlers[roop_count]))
- {
- DBUG_PRINT("info",("spider direct_join does not support use_handler"));
- if (lock_mode)
- {
- delete fields;
- DBUG_RETURN(NULL);
- }
- continue;
- }
conn = spider->conns[roop_count];
DBUG_PRINT("info",("spider conn=%p", conn));
if (!fields->check_conn_same_conn(conn))
diff --git a/storage/spider/spd_i_s.cc b/storage/spider/spd_i_s.cc
index 22cd8eb0f15..7db9537136a 100644
--- a/storage/spider/spd_i_s.cc
+++ b/storage/spider/spd_i_s.cc
@@ -41,7 +41,6 @@ static struct st_mysql_storage_engine spider_i_s_info =
{ MYSQL_INFORMATION_SCHEMA_INTERFACE_VERSION };
namespace Show {
-#ifdef SPIDER_I_S_USE_SHOW_FOR_COLUMN
static ST_FIELD_INFO spider_i_s_alloc_mem_fields_info[] =
{
Column("ID", ULong(10), NOT_NULL, "id"),
@@ -54,27 +53,6 @@ static ST_FIELD_INFO spider_i_s_alloc_mem_fields_info[] =
Column("FREE_MEM_COUNT", ULonglong(20), NULLABLE, "free_mem_count"),
CEnd()
};
-#else
-static ST_FIELD_INFO spider_i_s_alloc_mem_fields_info[] =
-{
- {"ID", 10, MYSQL_TYPE_LONG, 0, MY_I_S_UNSIGNED, "id", SKIP_OPEN_TABLE},
- {"FUNC_NAME", 64, MYSQL_TYPE_STRING, 0,
- MY_I_S_MAYBE_NULL, "func_name", SKIP_OPEN_TABLE},
- {"FILE_NAME", 64, MYSQL_TYPE_STRING, 0,
- MY_I_S_MAYBE_NULL, "file_name", SKIP_OPEN_TABLE},
- {"LINE_NO", 10, MYSQL_TYPE_LONG, 0,
- MY_I_S_UNSIGNED | MY_I_S_MAYBE_NULL, "line_no", SKIP_OPEN_TABLE},
- {"TOTAL_ALLOC_MEM", 20, MYSQL_TYPE_LONGLONG, 0,
- MY_I_S_UNSIGNED | MY_I_S_MAYBE_NULL, "total_alloc_mem", SKIP_OPEN_TABLE},
- {"CURRENT_ALLOC_MEM", 20, MYSQL_TYPE_LONGLONG, 0,
- MY_I_S_MAYBE_NULL, "current_alloc_mem", SKIP_OPEN_TABLE},
- {"ALLOC_MEM_COUNT", 20, MYSQL_TYPE_LONGLONG, 0,
- MY_I_S_UNSIGNED | MY_I_S_MAYBE_NULL, "alloc_mem_count", SKIP_OPEN_TABLE},
- {"FREE_MEM_COUNT", 20, MYSQL_TYPE_LONGLONG, 0,
- MY_I_S_UNSIGNED | MY_I_S_MAYBE_NULL, "free_mem_count", SKIP_OPEN_TABLE},
- {NULL, 0, MYSQL_TYPE_STRING, 0, 0, NULL, 0}
-};
-#endif
} // namespace Show
static int spider_i_s_alloc_mem_fill_table(
@@ -180,7 +158,6 @@ struct st_maria_plugin spider_i_s_alloc_mem_maria =
extern SPIDER_DBTON spider_dbton[SPIDER_DBTON_SIZE];
namespace Show {
-#ifdef SPIDER_I_S_USE_SHOW_FOR_COLUMN
static ST_FIELD_INFO spider_i_s_wrapper_protocols_fields_info[] =
{
Column("WRAPPER_NAME", Varchar(NAME_CHAR_LEN), NOT_NULL, ""),
@@ -189,16 +166,6 @@ static ST_FIELD_INFO spider_i_s_wrapper_protocols_fields_info[] =
Column("WRAPPER_MATURITY", Varchar(12), NOT_NULL, ""),
CEnd()
};
-#else
-static ST_FIELD_INFO spider_i_s_wrapper_protocols_fields_info[] =
-{
- {"WRAPPER_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0, SKIP_OPEN_TABLE},
- {"WRAPPER_VERSION", 20, MYSQL_TYPE_STRING, 0, 0, 0, SKIP_OPEN_TABLE},
- {"WRAPPER_DESCRIPTION", 65535, MYSQL_TYPE_STRING, 0, 1, 0, SKIP_OPEN_TABLE},
- {"WRAPPER_MATURITY", 12, MYSQL_TYPE_STRING, 0, 0, 0, SKIP_OPEN_TABLE},
- {0, 0, MYSQL_TYPE_STRING, 0, 0, 0, 0}
-};
-#endif
} // namespace Show
static int spider_i_s_wrapper_protocols_fill_table(
diff --git a/storage/spider/spd_include.h b/storage/spider/spd_include.h
index 917b3bfe6ec..897721d3c2e 100644
--- a/storage/spider/spd_include.h
+++ b/storage/spider/spd_include.h
@@ -99,7 +99,6 @@
#define SPIDER_new_THD(A) (new THD(A))
#define SPIDER_order_direction_is_asc(A) (A->direction == ORDER::ORDER_ASC)
-#define SPIDER_HAS_MY_CHARLEN
#define SPIDER_open_temporary_table
#define SPIDER_generate_partition_syntax(A,B,C,D,E,F,G,H) generate_partition_syntax(A,B,C,E,F,G)
@@ -110,7 +109,6 @@
#define SPIDER_read_record_read_record(A) read_record()
#define SPIDER_has_Item_with_subquery
-#define SPIDER_use_LEX_CSTRING_for_KEY_Field_name
#define SPIDER_use_LEX_CSTRING_for_Field_blob_constructor
#define SPIDER_use_LEX_CSTRING_for_database_tablename_alias
#define SPIDER_THD_db_str(A) (A)->db.str
@@ -165,7 +163,7 @@ typedef start_new_trans *SPIDER_Open_tables_backup;
#define SPIDER_TMP_SHARE_CHAR_PTR_COUNT 23
#define SPIDER_TMP_SHARE_UINT_COUNT SPIDER_TMP_SHARE_CHAR_PTR_COUNT
-#define SPIDER_TMP_SHARE_LONG_COUNT 20
+#define SPIDER_TMP_SHARE_LONG_COUNT 19
#define SPIDER_TMP_SHARE_LONGLONG_COUNT 3
#define SPIDER_MEM_CALC_LIST_NUM 314
@@ -900,7 +898,6 @@ typedef struct st_spider_share
longlong *monitoring_bg_interval;
longlong *monitoring_limit;
longlong *monitoring_sid;
- long *use_handlers;
long *connect_timeouts;
long *net_read_timeouts;
long *net_write_timeouts;
@@ -988,7 +985,6 @@ typedef struct st_spider_share
uint monitoring_bg_interval_length;
uint monitoring_limit_length;
uint monitoring_sid_length;
- uint use_handlers_length;
uint connect_timeouts_length;
uint net_read_timeouts_length;
uint net_write_timeouts_length;
@@ -1237,10 +1233,8 @@ typedef struct st_spider_item_hld
{
uint tgt_num;
Item *item;
-#ifdef SPIDER_ITEM_STRING_WITHOUT_SET_STR_WITH_COPY_AND_THDPTR
bool init_mem_root;
MEM_ROOT mem_root;
-#endif
st_spider_item_hld *next;
} SPIDER_ITEM_HLD;
diff --git a/storage/spider/spd_param.cc b/storage/spider/spd_param.cc
index c1b84ed4452..0a5d881749c 100644
--- a/storage/spider/spd_param.cc
+++ b/storage/spider/spd_param.cc
@@ -1966,103 +1966,6 @@ int spider_param_direct_dup_insert(
direct_dup_insert : THDVAR(thd, direct_dup_insert));
}
-static uint spider_udf_table_lock_mutex_count;
-/*
- 1-: mutex count
- */
-static MYSQL_SYSVAR_UINT(
- udf_table_lock_mutex_count,
- spider_udf_table_lock_mutex_count,
- PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY,
- "Mutex count of table lock for Spider UDFs",
- NULL,
- NULL,
- 20,
- 1,
- 4294967295U,
- 0
-);
-
-uint spider_param_udf_table_lock_mutex_count()
-{
- DBUG_ENTER("spider_param_udf_table_lock_mutex_count");
- DBUG_RETURN(spider_udf_table_lock_mutex_count);
-}
-
-static uint spider_udf_table_mon_mutex_count;
-/*
- 1-: mutex count
- */
-static MYSQL_SYSVAR_UINT(
- udf_table_mon_mutex_count,
- spider_udf_table_mon_mutex_count,
- PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY,
- "Mutex count of table mon for Spider UDFs",
- NULL,
- NULL,
- 20,
- 1,
- 4294967295U,
- 0
-);
-
-uint spider_param_udf_table_mon_mutex_count()
-{
- DBUG_ENTER("spider_param_udf_table_mon_mutex_count");
- DBUG_RETURN(spider_udf_table_mon_mutex_count);
-}
-
-/*
- 1-:number of rows
- */
-static MYSQL_THDVAR_LONGLONG(
- udf_ds_bulk_insert_rows, /* name */
- PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_DEPRECATED, /* opt */
- "Number of rows for bulk inserting", /* comment */
- NULL, /* check */
- NULL, /* update */
- -1, /* def */
- -1, /* min */
- 9223372036854775807LL, /* max */
- 0 /* blk */
-);
-
-longlong spider_param_udf_ds_bulk_insert_rows(
- THD *thd,
- longlong udf_ds_bulk_insert_rows
-) {
- DBUG_ENTER("spider_param_udf_ds_bulk_insert_rows");
- DBUG_RETURN(THDVAR(thd, udf_ds_bulk_insert_rows) <= 0 ?
- udf_ds_bulk_insert_rows : THDVAR(thd, udf_ds_bulk_insert_rows));
-}
-
-/*
- -1 :use table parameter
- 0 :drop records
- 1 :insert last table
- 2 :insert first table and loop again
- */
-static MYSQL_THDVAR_INT(
- udf_ds_table_loop_mode, /* name */
- PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_DEPRECATED, /* opt */
- "Table loop mode if the number of tables in table list are less than the number of result sets", /* comment */
- NULL, /* check */
- NULL, /* update */
- -1, /* def */
- -1, /* min */
- 2, /* max */
- 0 /* blk */
-);
-
-int spider_param_udf_ds_table_loop_mode(
- THD *thd,
- int udf_ds_table_loop_mode
-) {
- DBUG_ENTER("spider_param_udf_ds_table_loop_mode");
- DBUG_RETURN(THDVAR(thd, udf_ds_table_loop_mode) == -1 ?
- udf_ds_table_loop_mode : THDVAR(thd, udf_ds_table_loop_mode));
-}
-
static char *spider_remote_access_charset;
/*
*/
@@ -2295,84 +2198,6 @@ int spider_param_bka_mode(
bka_mode : THDVAR(thd, bka_mode));
}
-static int spider_udf_ct_bulk_insert_interval;
-/*
- -1 : The UDF parameter is adopted.
- 0 or more : Milliseconds.
- */
-static MYSQL_SYSVAR_INT(
- udf_ct_bulk_insert_interval,
- spider_udf_ct_bulk_insert_interval,
- PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_DEPRECATED,
- "The interval time between bulk insert and next bulk insert at coping",
- NULL,
- NULL,
- -1,
- -1,
- 2147483647,
- 0
-);
-
-int spider_param_udf_ct_bulk_insert_interval(
- int udf_ct_bulk_insert_interval
-) {
- DBUG_ENTER("spider_param_udf_ct_bulk_insert_interval");
- DBUG_RETURN(spider_udf_ct_bulk_insert_interval < 0 ?
- udf_ct_bulk_insert_interval : spider_udf_ct_bulk_insert_interval);
-}
-
-static longlong spider_udf_ct_bulk_insert_rows;
-/*
- -1,0 : The UDF parameter is adopted.
- 1 or more : Number of rows.
- */
-static MYSQL_SYSVAR_LONGLONG(
- udf_ct_bulk_insert_rows,
- spider_udf_ct_bulk_insert_rows,
- PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_DEPRECATED,
- "The number of rows inserted with bulk insert of one time at coping",
- NULL,
- NULL,
- -1,
- -1,
- 9223372036854775807LL,
- 0
-);
-
-longlong spider_param_udf_ct_bulk_insert_rows(
- longlong udf_ct_bulk_insert_rows
-) {
- DBUG_ENTER("spider_param_udf_ct_bulk_insert_rows");
- DBUG_RETURN(spider_udf_ct_bulk_insert_rows <= 0 ?
- udf_ct_bulk_insert_rows : spider_udf_ct_bulk_insert_rows);
-}
-
-/*
- -1 :use table parameter
- 0 :not use
- 1 :use handler
- */
-static MYSQL_THDVAR_INT(
- use_handler, /* name */
- PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_DEPRECATED, /* opt */
- "Use handler for reading", /* comment */
- NULL, /* check */
- spider_var_deprecated_int, /* update */
- 0, /* def */
- -1, /* min */
- 3, /* max */
- 0 /* blk */
-);
-
-int spider_param_use_handler(
- THD *thd,
- int use_handler
-) {
- DBUG_ENTER("spider_param_use_handler");
- DBUG_RETURN(THDVAR(thd, use_handler) == -1 ?
- use_handler : THDVAR(thd, use_handler));
-}
-
/*
-1 :use table parameter
0 :return error if error
@@ -2531,33 +2356,6 @@ int spider_param_read_only_mode(
read_only_mode : THDVAR(thd, read_only_mode));
}
-
-/*
- -1 :use UDF parameter
- 0 :can not use
- 1 :can use
- */
-static MYSQL_THDVAR_INT(
- udf_ds_use_real_table, /* name */
- PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_DEPRECATED, /* opt */
- "Use real table for temporary table list", /* comment */
- NULL, /* check */
- NULL, /* update */
- -1, /* def */
- -1, /* min */
- 1, /* max */
- 0 /* blk */
-);
-
-int spider_param_udf_ds_use_real_table(
- THD *thd,
- int udf_ds_use_real_table
-) {
- DBUG_ENTER("spider_param_udf_ds_use_real_table");
- DBUG_RETURN(THDVAR(thd, udf_ds_use_real_table) == -1 ?
- udf_ds_use_real_table : THDVAR(thd, udf_ds_use_real_table));
-}
-
static my_bool spider_general_log;
static MYSQL_SYSVAR_BOOL(
general_log,
@@ -3185,10 +2983,6 @@ static struct st_mysql_sys_var* spider_system_variables[] = {
MYSQL_SYSVAR(local_lock_table),
MYSQL_SYSVAR(use_pushdown_udf),
MYSQL_SYSVAR(direct_dup_insert),
- MYSQL_SYSVAR(udf_table_lock_mutex_count),
- MYSQL_SYSVAR(udf_table_mon_mutex_count),
- MYSQL_SYSVAR(udf_ds_bulk_insert_rows),
- MYSQL_SYSVAR(udf_ds_table_loop_mode),
MYSQL_SYSVAR(remote_access_charset),
MYSQL_SYSVAR(remote_autocommit),
MYSQL_SYSVAR(remote_time_zone),
@@ -3200,16 +2994,12 @@ static struct st_mysql_sys_var* spider_system_variables[] = {
MYSQL_SYSVAR(connect_mutex),
MYSQL_SYSVAR(bka_engine),
MYSQL_SYSVAR(bka_mode),
- MYSQL_SYSVAR(udf_ct_bulk_insert_interval),
- MYSQL_SYSVAR(udf_ct_bulk_insert_rows),
- MYSQL_SYSVAR(use_handler),
MYSQL_SYSVAR(error_read_mode),
MYSQL_SYSVAR(error_write_mode),
MYSQL_SYSVAR(skip_default_condition),
MYSQL_SYSVAR(skip_parallel_search),
MYSQL_SYSVAR(direct_order_limit),
MYSQL_SYSVAR(read_only_mode),
- MYSQL_SYSVAR(udf_ds_use_real_table),
MYSQL_SYSVAR(general_log),
MYSQL_SYSVAR(index_hint_pushdown),
MYSQL_SYSVAR(max_connections),
diff --git a/storage/spider/spd_param.h b/storage/spider/spd_param.h
index 0c5392e302a..6abdca43492 100644
--- a/storage/spider/spd_param.h
+++ b/storage/spider/spd_param.h
@@ -14,6 +14,9 @@
along with this program); if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA */
+constexpr uint spider_udf_table_lock_mutex_count= 20;
+constexpr uint spider_udf_table_mon_mutex_count= 20;
+
my_bool spider_param_support_xa();
my_bool spider_param_connect_mutex();
uint spider_param_connect_error_interval();
@@ -263,16 +266,6 @@ int spider_param_direct_dup_insert(
THD *thd,
int direct_dup_insert
);
-uint spider_param_udf_table_lock_mutex_count();
-uint spider_param_udf_table_mon_mutex_count();
-longlong spider_param_udf_ds_bulk_insert_rows(
- THD *thd,
- longlong udf_ds_bulk_insert_rows
-);
-int spider_param_udf_ds_table_loop_mode(
- THD *thd,
- int udf_ds_table_loop_mode
-);
char *spider_param_remote_access_charset();
int spider_param_remote_autocommit();
char *spider_param_remote_time_zone();
@@ -293,16 +286,6 @@ int spider_param_bka_mode(
THD *thd,
int bka_mode
);
-int spider_param_udf_ct_bulk_insert_interval(
- int udf_ct_bulk_insert_interval
-);
-longlong spider_param_udf_ct_bulk_insert_rows(
- longlong udf_ct_bulk_insert_rows
-);
-int spider_param_use_handler(
- THD *thd,
- int use_handler
-);
int spider_param_error_read_mode(
THD *thd,
int error_read_mode
@@ -327,10 +310,6 @@ int spider_param_read_only_mode(
THD *thd,
int read_only_mode
);
-int spider_param_udf_ds_use_real_table(
- THD *thd,
- int udf_ds_use_real_table
-);
my_bool spider_param_general_log();
my_bool spider_param_index_hint_pushdown(
THD *thd
diff --git a/storage/spider/spd_ping_table.cc b/storage/spider/spd_ping_table.cc
index fc550f05392..b331a9fec0d 100644
--- a/storage/spider/spd_ping_table.cc
+++ b/storage/spider/spd_ping_table.cc
@@ -97,8 +97,8 @@ SPIDER_TABLE_MON_LIST *spider_get_ping_table_mon_list(
free_root(&mem_root, MYF(0));
}
- mutex_hash = spider_udf_calc_hash(str->c_ptr(),
- spider_param_udf_table_mon_mutex_count());
+ mutex_hash=
+ spider_udf_calc_hash(str->c_ptr(), spider_udf_table_mon_mutex_count);
DBUG_PRINT("info",("spider hash key=%s", str->c_ptr()));
DBUG_PRINT("info",("spider hash key length=%u", str->length()));
hash_value = my_calc_hash(
@@ -224,8 +224,8 @@ int spider_release_ping_table_mon_list(
conv_name_str.q_append(conv_name, conv_name_length);
conv_name_str.q_append(link_idx_str, link_idx_str_length);
- mutex_hash = spider_udf_calc_hash(conv_name_str.c_ptr_safe(),
- spider_param_udf_table_mon_mutex_count());
+ mutex_hash= spider_udf_calc_hash(conv_name_str.c_ptr_safe(),
+ spider_udf_table_mon_mutex_count);
my_hash_value_type hash_value = my_calc_hash(
&spider_udf_table_mon_list_hash[mutex_hash],
(uchar*) conv_name_str.c_ptr(), conv_name_str.length());
diff --git a/storage/spider/spd_table.cc b/storage/spider/spd_table.cc
index 2c39ad359f2..812a5178036 100644
--- a/storage/spider/spd_table.cc
+++ b/storage/spider/spd_table.cc
@@ -817,8 +817,6 @@ int spider_free_share_alloc(
spider_free(spider_current_trx, share->monitoring_flag, MYF(0));
if (share->monitoring_kind)
spider_free(spider_current_trx, share->monitoring_kind, MYF(0));
- if (share->use_handlers)
- spider_free(spider_current_trx, share->use_handlers, MYF(0));
if (share->connect_timeouts)
spider_free(spider_current_trx, share->connect_timeouts, MYF(0));
if (share->net_read_timeouts)
@@ -2347,8 +2345,6 @@ int spider_parse_connect_info(
option_struct &&
option_struct->remote_table);
SPIDER_PARAM_INT_WITH_MAX("tcm", table_count_mode, 0, 3);
- SPIDER_PARAM_DEPRECATED_WARNING("uhd");
- SPIDER_PARAM_LONG_LIST_WITH_MAX("uhd", use_handlers, 0, 3);
SPIDER_PARAM_INT_WITH_MAX("upu", use_pushdown_udf, 0, 1);
SPIDER_PARAM_INT_WITH_MAX("utc", use_table_charset, 0, 1);
error_num = connect_string_parse.print_param_error();
@@ -2427,8 +2423,6 @@ int spider_parse_connect_info(
SPIDER_PARAM_INT_WITH_MAX("crd_bg_mode", crd_bg_mode, 0, 2);
SPIDER_PARAM_INT_WITH_MAX("sts_bg_mode", sts_bg_mode, 0, 2);
SPIDER_PARAM_LONG_LIST_WITH_MAX("link_status", link_statuses, 0, 3);
- SPIDER_PARAM_DEPRECATED_WARNING("use_handler");
- SPIDER_PARAM_LONG_LIST_WITH_MAX("use_handler", use_handlers, 0, 3);
SPIDER_PARAM_INT_WITH_MAX("casual_read", casual_read, 0, 63);
SPIDER_PARAM_DEPRECATED_WARNING("buffer_size");
SPIDER_PARAM_INT("buffer_size", buffer_size, 0);
@@ -2673,8 +2667,6 @@ int spider_parse_connect_info(
share->all_link_count = share->monitoring_bg_kind_length;
if (share->all_link_count < share->monitoring_bg_interval_length)
share->all_link_count = share->monitoring_bg_interval_length;
- if (share->all_link_count < share->use_handlers_length)
- share->all_link_count = share->use_handlers_length;
if (share->all_link_count < share->connect_timeouts_length)
share->all_link_count = share->connect_timeouts_length;
if (share->all_link_count < share->net_read_timeouts_length)
@@ -2890,11 +2882,6 @@ int spider_parse_connect_info(
share->all_link_count)))
goto error;
if ((error_num = spider_increase_long_list(
- &share->use_handlers,
- &share->use_handlers_length,
- share->all_link_count)))
- goto error;
- if ((error_num = spider_increase_long_list(
&share->connect_timeouts,
&share->connect_timeouts_length,
share->all_link_count)))
@@ -3819,8 +3806,6 @@ int spider_set_connect_info_default(
if (share->monitoring_sid[roop_count] == -1)
share->monitoring_sid[roop_count] = global_system_variables.server_id;
- if (share->use_handlers[roop_count] == -1)
- share->use_handlers[roop_count] = 0;
if (share->connect_timeouts[roop_count] == -1)
share->connect_timeouts[roop_count] = 6;
if (share->net_read_timeouts[roop_count] == -1)
@@ -4401,7 +4386,7 @@ SPIDER_SHARE *spider_create_share(
(uint) (sizeof(*tmp_cardinality_upd) * bitmap_size),
&tmp_table_mon_mutex_bitmap,
(uint) (sizeof(*tmp_table_mon_mutex_bitmap) *
- ((spider_param_udf_table_mon_mutex_count() + 7) / 8)),
+ ((spider_udf_table_mon_mutex_count + 7) / 8)),
NullS))
) {
*error_num = HA_ERR_OUT_OF_MEM;
@@ -4451,7 +4436,7 @@ SPIDER_SHARE *spider_create_share(
buf_pos = strmov(buf_pos, link_idx_str);
*buf_pos = '\0';
spider_set_bit(tmp_table_mon_mutex_bitmap,
- spider_udf_calc_hash(buf, spider_param_udf_table_mon_mutex_count())
+ spider_udf_calc_hash(buf, spider_udf_table_mon_mutex_count)
);
}
@@ -4573,7 +4558,7 @@ SPIDER_SHARE *spider_get_share(
TABLE_SHARE *table_share = table->s;
SPIDER_RESULT_LIST *result_list = &spider->result_list;
uint length, tmp_conn_link_idx = 0, buf_sz;
- char *tmp_name, *tmp_cid;
+ char *tmp_name;
int roop_count;
double sts_interval;
int sts_mode;
@@ -4682,7 +4667,7 @@ SPIDER_SHARE *spider_get_share(
{
pthread_mutex_lock(&share->mutex);
for (roop_count = 0;
- roop_count < (int) spider_param_udf_table_mon_mutex_count();
+ roop_count < (int) spider_udf_table_mon_mutex_count;
roop_count++
) {
if (spider_bit_is_set(share->table_mon_mutex_bitmap, roop_count))
@@ -4714,7 +4699,7 @@ SPIDER_SHARE *spider_get_share(
FALSE, error_num))
) {
for (roop_count = 0;
- roop_count < (int) spider_param_udf_table_mon_mutex_count();
+ roop_count < (int) spider_udf_table_mon_mutex_count;
roop_count++
) {
if (spider_bit_is_set(share->table_mon_mutex_bitmap, roop_count))
@@ -4736,7 +4721,7 @@ SPIDER_SHARE *spider_get_share(
*error_num != HA_ERR_END_OF_FILE
) {
for (roop_count = 0;
- roop_count < (int) spider_param_udf_table_mon_mutex_count();
+ roop_count < (int) spider_udf_table_mon_mutex_count;
roop_count++
) {
if (spider_bit_is_set(share->table_mon_mutex_bitmap, roop_count))
@@ -4769,7 +4754,7 @@ SPIDER_SHARE *spider_get_share(
}
}
for (roop_count = 0;
- roop_count < (int) spider_param_udf_table_mon_mutex_count();
+ roop_count < (int) spider_udf_table_mon_mutex_count;
roop_count++
) {
if (spider_bit_is_set(share->table_mon_mutex_bitmap, roop_count))
@@ -4864,16 +4849,10 @@ SPIDER_SHARE *spider_get_share(
&spider->conns, sizeof(SPIDER_CONN *) * share->link_count,
&spider->conn_link_idx, sizeof(uint) * share->link_count,
&spider->conn_can_fo, sizeof(uchar) * share->link_bitmap_size,
- &spider->sql_kind, sizeof(uint) * share->link_count,
&spider->connection_ids, sizeof(ulonglong) * share->link_count,
&spider->conn_kind, sizeof(uint) * share->link_count,
&spider->db_request_id, sizeof(ulonglong) * share->link_count,
&spider->db_request_phase, sizeof(uchar) * share->link_bitmap_size,
- &spider->m_handler_opened, sizeof(uchar) * share->link_bitmap_size,
- &spider->m_handler_id, sizeof(uint) * share->link_count,
- &spider->m_handler_cid, sizeof(char *) * share->link_count,
- &tmp_cid, sizeof(char) * (SPIDER_SQL_HANDLER_CID_LEN + 1) *
- share->link_count,
&spider->need_mons, sizeof(int) * share->link_count,
&spider->quick_targets, sizeof(void *) * share->link_count,
&result_list->upd_tmp_tbls, sizeof(TABLE *) * share->link_count,
@@ -4883,7 +4862,6 @@ SPIDER_SHARE *spider_get_share(
sizeof(uchar) * share->link_bitmap_size,
&result_list->tmp_table_created,
sizeof(uchar) * share->link_bitmap_size,
- &result_list->sql_kind_backup, sizeof(uint) * share->link_count,
&result_list->casual_read, sizeof(int) * share->link_count,
&spider->dbton_handler,
sizeof(spider_db_handler *) * SPIDER_DBTON_SIZE,
@@ -4903,8 +4881,6 @@ SPIDER_SHARE *spider_get_share(
spider->conn_keys[roop_count] = tmp_name;
*tmp_name = first_byte;
tmp_name += share->conn_keys_lengths[roop_count] + 1;
- spider->m_handler_cid[roop_count] = tmp_cid;
- tmp_cid += SPIDER_SQL_HANDLER_CID_LEN + 1;
result_list->upd_tmp_tbl_prms[roop_count].init();
result_list->upd_tmp_tbl_prms[roop_count].field_count = 1;
spider->conn_kind[roop_count] = SPIDER_CONN_KIND_MYSQL;
@@ -5162,7 +5138,7 @@ SPIDER_SHARE *spider_get_share(
{
pthread_mutex_lock(&share->mutex);
for (roop_count = 0;
- roop_count < (int) spider_param_udf_table_mon_mutex_count();
+ roop_count < (int) spider_udf_table_mon_mutex_count;
roop_count++
) {
if (spider_bit_is_set(share->table_mon_mutex_bitmap, roop_count))
@@ -5195,7 +5171,7 @@ SPIDER_SHARE *spider_get_share(
FALSE, error_num))
) {
for (roop_count = 0;
- roop_count < (int) spider_param_udf_table_mon_mutex_count();
+ roop_count < (int) spider_udf_table_mon_mutex_count;
roop_count++
) {
if (spider_bit_is_set(share->table_mon_mutex_bitmap, roop_count))
@@ -5214,7 +5190,7 @@ SPIDER_SHARE *spider_get_share(
*error_num != HA_ERR_END_OF_FILE
) {
for (roop_count = 0;
- roop_count < (int) spider_param_udf_table_mon_mutex_count();
+ roop_count < (int) spider_udf_table_mon_mutex_count;
roop_count++
) {
if (spider_bit_is_set(share->table_mon_mutex_bitmap, roop_count))
@@ -5244,7 +5220,7 @@ SPIDER_SHARE *spider_get_share(
}
}
for (roop_count = 0;
- roop_count < (int) spider_param_udf_table_mon_mutex_count();
+ roop_count < (int) spider_udf_table_mon_mutex_count;
roop_count++
) {
if (spider_bit_is_set(share->table_mon_mutex_bitmap, roop_count))
@@ -5328,16 +5304,10 @@ SPIDER_SHARE *spider_get_share(
&spider->conns, sizeof(SPIDER_CONN *) * share->link_count,
&spider->conn_link_idx, sizeof(uint) * share->link_count,
&spider->conn_can_fo, sizeof(uchar) * share->link_bitmap_size,
- &spider->sql_kind, sizeof(uint) * share->link_count,
&spider->connection_ids, sizeof(ulonglong) * share->link_count,
&spider->conn_kind, sizeof(uint) * share->link_count,
&spider->db_request_id, sizeof(ulonglong) * share->link_count,
&spider->db_request_phase, sizeof(uchar) * share->link_bitmap_size,
- &spider->m_handler_opened, sizeof(uchar) * share->link_bitmap_size,
- &spider->m_handler_id, sizeof(uint) * share->link_count,
- &spider->m_handler_cid, sizeof(char *) * share->link_count,
- &tmp_cid, sizeof(char) * (SPIDER_SQL_HANDLER_CID_LEN + 1) *
- share->link_count,
&spider->need_mons, sizeof(int) * share->link_count,
&spider->quick_targets, sizeof(void *) * share->link_count,
&result_list->upd_tmp_tbls, sizeof(TABLE *) * share->link_count,
@@ -5347,7 +5317,6 @@ SPIDER_SHARE *spider_get_share(
sizeof(uchar) * share->link_bitmap_size,
&result_list->tmp_table_created,
sizeof(uchar) * share->link_bitmap_size,
- &result_list->sql_kind_backup, sizeof(uint) * share->link_count,
&result_list->casual_read, sizeof(int) * share->link_count,
&spider->dbton_handler,
sizeof(spider_db_handler *) * SPIDER_DBTON_SIZE,
@@ -5364,8 +5333,6 @@ SPIDER_SHARE *spider_get_share(
spider->conn_keys[roop_count] = tmp_name;
*tmp_name = first_byte;
tmp_name += share->conn_keys_lengths[roop_count] + 1;
- spider->m_handler_cid[roop_count] = tmp_cid;
- tmp_cid += SPIDER_SQL_HANDLER_CID_LEN + 1;
result_list->upd_tmp_tbl_prms[roop_count].init();
result_list->upd_tmp_tbl_prms[roop_count].field_count = 1;
spider->conn_kind[roop_count] = SPIDER_CONN_KIND_MYSQL;
@@ -6414,7 +6381,7 @@ int spider_db_done(
}
spider_free(NULL, spider_table_sts_threads, MYF(0));
- for (roop_count = spider_param_udf_table_mon_mutex_count() - 1;
+ for (roop_count= spider_udf_table_mon_mutex_count - 1;
roop_count >= 0; roop_count--)
{
while ((table_mon_list = (SPIDER_TABLE_MON_LIST *) my_hash_element(
@@ -6430,10 +6397,10 @@ int spider_db_done(
spider_udf_table_mon_list_hash[roop_count].array.size_of_element);
my_hash_free(&spider_udf_table_mon_list_hash[roop_count]);
}
- for (roop_count = spider_param_udf_table_mon_mutex_count() - 1;
+ for (roop_count= spider_udf_table_mon_mutex_count - 1;
roop_count >= 0; roop_count--)
pthread_cond_destroy(&spider_udf_table_mon_conds[roop_count]);
- for (roop_count = spider_param_udf_table_mon_mutex_count() - 1;
+ for (roop_count= spider_udf_table_mon_mutex_count - 1;
roop_count >= 0; roop_count--)
pthread_mutex_destroy(&spider_udf_table_mon_mutexes[roop_count]);
spider_free(NULL, spider_udf_table_mon_mutexes, MYF(0));
@@ -6784,17 +6751,17 @@ int spider_db_init(
if (!(spider_udf_table_mon_mutexes = (pthread_mutex_t *)
spider_bulk_malloc(NULL, 53, MYF(MY_WME | MY_ZEROFILL),
&spider_udf_table_mon_mutexes, (uint) (sizeof(pthread_mutex_t) *
- spider_param_udf_table_mon_mutex_count()),
+ spider_udf_table_mon_mutex_count),
&spider_udf_table_mon_conds, (uint) (sizeof(pthread_cond_t) *
- spider_param_udf_table_mon_mutex_count()),
+ spider_udf_table_mon_mutex_count),
&spider_udf_table_mon_list_hash, (uint) (sizeof(HASH) *
- spider_param_udf_table_mon_mutex_count()),
+ spider_udf_table_mon_mutex_count),
NullS))
)
goto error_alloc_mon_mutxes;
for (roop_count = 0;
- roop_count < (int) spider_param_udf_table_mon_mutex_count();
+ roop_count < (int) spider_udf_table_mon_mutex_count;
roop_count++)
{
if (mysql_mutex_init(spd_key_mutex_udf_table_mon,
@@ -6802,7 +6769,7 @@ int spider_db_init(
goto error_init_udf_table_mon_mutex;
}
for (roop_count = 0;
- roop_count < (int) spider_param_udf_table_mon_mutex_count();
+ roop_count < (int) spider_udf_table_mon_mutex_count;
roop_count++)
{
if (mysql_cond_init(spd_key_cond_udf_table_mon,
@@ -6810,7 +6777,7 @@ int spider_db_init(
goto error_init_udf_table_mon_cond;
}
for (roop_count = 0;
- roop_count < (int) spider_param_udf_table_mon_mutex_count();
+ roop_count < (int) spider_udf_table_mon_mutex_count;
roop_count++)
{
if (my_hash_init(PSI_INSTRUMENT_ME, &spider_udf_table_mon_list_hash[roop_count],
@@ -6896,7 +6863,7 @@ error_init_table_sts_threads:
spider_free_sts_threads(&spider_table_sts_threads[roop_count]);
}
spider_free(NULL, spider_table_sts_threads, MYF(0));
- roop_count = spider_param_udf_table_mon_mutex_count() - 1;
+ roop_count= spider_udf_table_mon_mutex_count - 1;
error_init_udf_table_mon_list_hash:
for (; roop_count >= 0; roop_count--)
{
@@ -6906,11 +6873,11 @@ error_init_udf_table_mon_list_hash:
spider_udf_table_mon_list_hash[roop_count].array.size_of_element);
my_hash_free(&spider_udf_table_mon_list_hash[roop_count]);
}
- roop_count = spider_param_udf_table_mon_mutex_count() - 1;
+ roop_count= spider_udf_table_mon_mutex_count - 1;
error_init_udf_table_mon_cond:
for (; roop_count >= 0; roop_count--)
pthread_cond_destroy(&spider_udf_table_mon_conds[roop_count]);
- roop_count = spider_param_udf_table_mon_mutex_count() - 1;
+ roop_count= spider_udf_table_mon_mutex_count - 1;
error_init_udf_table_mon_mutex:
for (; roop_count >= 0; roop_count--)
pthread_mutex_destroy(&spider_udf_table_mon_mutexes[roop_count]);
@@ -7572,16 +7539,14 @@ void spider_set_tmp_share_pointer(
tmp_share->monitoring_kind = &tmp_long[5];
tmp_share->monitoring_bg_flag = &tmp_long[6];
tmp_share->monitoring_bg_kind = &tmp_long[7];
- tmp_share->use_handlers = &tmp_long[13];
- tmp_share->connect_timeouts = &tmp_long[14];
+ tmp_share->connect_timeouts = &tmp_long[13];
+ tmp_share->net_read_timeouts = &tmp_long[14];
tmp_long[13] = -1;
- tmp_share->net_read_timeouts = &tmp_long[15];
+ tmp_share->net_write_timeouts = &tmp_long[15];
tmp_long[14] = -1;
- tmp_share->net_write_timeouts = &tmp_long[16];
- tmp_long[15] = -1;
- tmp_share->access_balances = &tmp_long[17];
- tmp_share->bka_table_name_types = &tmp_long[18];
- tmp_share->strict_group_bys = &tmp_long[19];
+ tmp_share->access_balances = &tmp_long[16];
+ tmp_share->bka_table_name_types = &tmp_long[17];
+ tmp_share->strict_group_bys = &tmp_long[18];
tmp_share->monitoring_limit = &tmp_longlong[0];
tmp_share->monitoring_sid = &tmp_longlong[1];
tmp_share->monitoring_bg_interval = &tmp_longlong[2];
@@ -7638,7 +7603,6 @@ void spider_set_tmp_share_pointer(
tmp_share->monitoring_limit_length = 1;
tmp_share->monitoring_sid_length = 1;
tmp_share->monitoring_bg_interval_length = 1;
- tmp_share->use_handlers_length = 1;
tmp_share->connect_timeouts_length = 1;
tmp_share->net_read_timeouts_length = 1;
tmp_share->net_write_timeouts_length = 1;
@@ -7820,10 +7784,6 @@ longlong spider_split_read_param(
DBUG_RETURN(info_limit);
}
#endif
- if (spider->sql_kinds & SPIDER_SQL_KIND_HANDLER)
- {
- DBUG_RETURN(result_list->semi_split_read_base);
- }
spider_get_select_limit(spider, &select_lex, &select_limit, &offset_limit);
DBUG_PRINT("info",("spider result_list->set_split_read=%s", result_list->set_split_read ? "TRUE" : "FALSE"));
if (!result_list->set_split_read)
@@ -8051,8 +8011,6 @@ bool spider_check_direct_order_limit(
}
DBUG_PRINT("info",("spider SQLCOM_HA_READ=%s",
(spider->wide_handler->sql_command == SQLCOM_HA_READ) ? "TRUE" : "FALSE"));
- DBUG_PRINT("info",("spider sql_kinds with SPIDER_SQL_KIND_HANDLER=%s",
- (spider->sql_kinds & SPIDER_SQL_KIND_HANDLER) ? "TRUE" : "FALSE"));
DBUG_PRINT("info",("spider use_index_merge=%s",
spider->use_index_merge ? "TRUE" : "FALSE"));
DBUG_PRINT("info",("spider is_clone=%s",
@@ -8099,11 +8057,6 @@ bool spider_check_direct_order_limit(
first_check = FALSE;
spider->result_list.direct_distinct = FALSE;
spider->result_list.direct_aggregate = FALSE;
- } else if (spider->sql_kinds & SPIDER_SQL_KIND_HANDLER)
- {
- DBUG_PRINT("info",("spider sql_kinds with SPIDER_SQL_KIND_HANDLER"));
- spider->result_list.direct_distinct = FALSE;
- spider->result_list.direct_aggregate = FALSE;
} else if (
!select_lex->group_list.elements &&
!select_lex->with_sum_func
diff --git a/storage/spider/spd_trx.cc b/storage/spider/spd_trx.cc
index 29dddee5b98..400d6a590dc 100644
--- a/storage/spider/spd_trx.cc
+++ b/storage/spider/spd_trx.cc
@@ -1167,7 +1167,7 @@ int spider_free_trx_alloc(
spider_free_tmp_share_alloc(trx->tmp_share);
}
spider_db_udf_free_set_names(trx);
- for (roop_count = spider_param_udf_table_lock_mutex_count() - 1;
+ for (roop_count = spider_udf_table_lock_mutex_count - 1;
roop_count >= 0; roop_count--)
pthread_mutex_destroy(&trx->udf_table_mutexes[roop_count]);
spider_free_trx_ha(trx);
@@ -1220,7 +1220,7 @@ SPIDER_TRX *spider_get_trx(
&tmp_share, (uint) (sizeof(SPIDER_SHARE)),
&tmp_wide_handler, (uint) sizeof(SPIDER_WIDE_HANDLER),
&udf_table_mutexes, (uint) (sizeof(pthread_mutex_t) *
- spider_param_udf_table_lock_mutex_count()),
+ spider_udf_table_lock_mutex_count),
NullS))
)
goto error_alloc_trx;
@@ -1230,7 +1230,7 @@ SPIDER_TRX *spider_get_trx(
trx->udf_table_mutexes = udf_table_mutexes;
for (roop_count = 0;
- roop_count < (int) spider_param_udf_table_lock_mutex_count();
+ roop_count < (int) spider_udf_table_lock_mutex_count;
roop_count++)
{
if (mysql_mutex_init(spd_key_mutex_udf_table,
@@ -3635,8 +3635,7 @@ int spider_check_trx_and_get_conn(
*spider->conn_keys[0] = first_byte;
for (roop_count = 0; roop_count < (int) share->link_count; roop_count++)
{
- if (!spider->handler_opened(roop_count, SPIDER_CONN_KIND_MYSQL))
- spider->conns[roop_count] = NULL;
+ spider->conns[roop_count]= NULL;
}
bool search_link_idx_is_checked = FALSE;
for (
diff --git a/strings/CMakeLists.txt b/strings/CMakeLists.txt
index 54612256adc..099f3c67660 100644
--- a/strings/CMakeLists.txt
+++ b/strings/CMakeLists.txt
@@ -13,12 +13,16 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA
-INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include)
+INCLUDE_DIRECTORIES(
+${CMAKE_SOURCE_DIR}/include
+${CMAKE_BINARY_DIR}/strings
+)
SET(STRINGS_SOURCES bchange.c bmove_upp.c ctype-big5.c ctype-bin.c ctype-cp932.c
ctype-czech.c ctype-euc_kr.c ctype-eucjpms.c ctype-extra.c ctype-gb2312.c ctype-gbk.c
ctype-latin1.c ctype-mb.c ctype-simple.c ctype-sjis.c ctype-tis620.c ctype-uca.c
ctype-ucs2.c ctype-ujis.c ctype-utf8.c ctype-win1250ch.c ctype.c decimal.c dtoa.c int2str.c
+ ctype-unidata.c
is_prefix.c llstr.c longlong2str.c my_strtoll10.c my_vsnprintf.c
str2int.c strcend.c strend.c strfill.c strmake.c strmov.c strnmov.c
strxmov.c strxnmov.c xml.c
@@ -37,3 +41,20 @@ MAYBE_DISABLE_IPO(strings)
ADD_EXECUTABLE(conf_to_src EXCLUDE_FROM_ALL conf_to_src.c)
SET_TARGET_PROPERTIES(conf_to_src PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD TRUE)
TARGET_LINK_LIBRARIES(conf_to_src mysys strings)
+
+IF(NOT CMAKE_CROSSCOMPILING OR DEFINED CMAKE_CROSSCOMPILING_EMULATOR)
+ ADD_EXECUTABLE(uca-dump uca-dump.c)
+ENDIF()
+
+ADD_CUSTOM_COMMAND(
+ OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/ctype-uca1400data.h
+ COMMAND uca-dump --name-prefix=uca1400 --levels=3 ${PROJECT_SOURCE_DIR}/mysql-test/std_data/unicode/allkeys1400.txt > ctype-uca1400data.h
+ DEPENDS uca-dump
+)
+
+ADD_CUSTOM_TARGET(
+ GenUnicodeDataSource
+ DEPENDS
+ ${CMAKE_CURRENT_BINARY_DIR}/ctype-uca1400data.h
+)
+ADD_DEPENDENCIES(strings GenUnicodeDataSource)
diff --git a/strings/conf_to_src.c b/strings/conf_to_src.c
index efb708db8f6..fce763b4fc7 100644
--- a/strings/conf_to_src.c
+++ b/strings/conf_to_src.c
@@ -78,7 +78,7 @@ static uint get_collation_number(const char *name)
cs < all_charsets + array_elements(all_charsets);
cs++)
{
- if (cs->name && !strcmp(cs->name, name))
+ if (cs->coll_name.str && !strcmp(cs->coll_name.str, name))
return cs->number;
}
return 0;
@@ -93,8 +93,8 @@ get_charset_number_internal(const char *charset_name, uint cs_flags)
cs < all_charsets + array_elements(all_charsets);
cs++)
{
- if (cs->csname && (cs->state & cs_flags) &&
- !strcmp(cs->csname, charset_name))
+ if (cs->cs_name.str && (cs->state & cs_flags) &&
+ !strcmp(cs->cs_name.str, charset_name))
return cs->number;
}
return 0;
@@ -114,17 +114,23 @@ static void simple_cs_copy_data(struct charset_info_st *to, CHARSET_INFO *from)
to->number= from->number ? from->number : to->number;
to->state|= from->state;
- if (from->csname)
- to->csname= strdup(from->csname);
+ if (from->cs_name.str)
+ {
+ to->cs_name.str= strndup(from->cs_name.str, from->cs_name.length);
+ to->cs_name.length= from->cs_name.length;
+ }
- if (from->name)
- to->name= strdup(from->name);
+ if (from->coll_name.str)
+ {
+ to->coll_name.str= strndup(from->coll_name.str, from->coll_name.length);
+ to->coll_name.length= from->coll_name.length;
+ }
if (from->tailoring)
to->tailoring= strdup(from->tailoring);
- if (from->ctype)
- to->ctype= (uchar*) mdup((char*) from->ctype, MY_CS_CTYPE_TABLE_SIZE);
+ if (from->m_ctype)
+ to->m_ctype= (uchar*) mdup((char*) from->m_ctype, MY_CS_CTYPE_TABLE_SIZE);
if (from->to_lower)
to->to_lower= (uchar*) mdup((char*) from->to_lower, MY_CS_TO_LOWER_TABLE_SIZE);
if (from->to_upper)
@@ -160,9 +166,9 @@ static void inherit_charset_data(struct charset_info_st *cs,
CHARSET_INFO *refcs)
{
cs->state|= (refcs->state & (MY_CS_PUREASCII|MY_CS_NONASCII));
- if (refcs->ctype && cs->ctype &&
- !memcmp(cs->ctype, refcs->ctype, MY_CS_CTYPE_TABLE_SIZE))
- cs->ctype= NULL;
+ if (refcs->m_ctype && cs->m_ctype &&
+ !memcmp(cs->m_ctype, refcs->m_ctype, MY_CS_CTYPE_TABLE_SIZE))
+ cs->m_ctype= NULL;
if (refcs->to_lower && cs->to_lower &&
!memcmp(cs->to_lower, refcs->to_lower, MY_CS_TO_LOWER_TABLE_SIZE))
cs->to_lower= NULL;
@@ -179,7 +185,7 @@ static void inherit_charset_data(struct charset_info_st *cs,
static CHARSET_INFO *find_charset_data_inheritance_source(CHARSET_INFO *cs)
{
CHARSET_INFO *refcs;
- uint refid= get_charset_number_internal(cs->csname, MY_CS_PRIMARY);
+ uint refid= get_charset_number_internal(cs->cs_name.str, MY_CS_PRIMARY);
return refid && refid != cs->number &&
(refcs= &all_charsets[refid]) &&
(refcs->state & MY_CS_LOADED) ? refcs : NULL;
@@ -197,16 +203,16 @@ static CHARSET_INFO *find_charset_data_inheritance_source(CHARSET_INFO *cs)
*/
static my_bool simple_cs_is_full(CHARSET_INFO *cs)
{
- return ((cs->csname && cs->tab_to_uni && cs->ctype && cs->to_upper &&
+ return ((cs->cs_name.str && cs->tab_to_uni && cs->m_ctype && cs->to_upper &&
cs->to_lower) &&
- (cs->number && cs->name &&
+ (cs->number && cs->coll_name.str &&
(cs->sort_order || cs->tailoring || (cs->state & MY_CS_BINSORT))));
}
static int add_collation(struct charset_info_st *cs)
{
- if (cs->name &&
- (cs->number || (cs->number= get_collation_number(cs->name))))
+ if (cs->coll_name.str &&
+ (cs->number || (cs->number= get_collation_number(cs->coll_name.str))))
{
if (!(all_charsets[cs->number].state & MY_CS_COMPILED))
{
@@ -215,7 +221,8 @@ static int add_collation(struct charset_info_st *cs)
}
cs->number= 0;
- cs->name= NULL;
+ cs->coll_name.str= 0;
+ cs->coll_name.length= 0;
cs->tailoring= NULL;
cs->state= 0;
cs->sort_order= NULL;
@@ -276,16 +283,16 @@ static int my_read_charset_file(const char *filename)
void print_arrays(FILE *f, CHARSET_INFO *cs)
{
- if (cs->ctype)
- print_array(f, cs->name, "ctype", cs->ctype, MY_CS_CTYPE_TABLE_SIZE);
+ if (cs->m_ctype)
+ print_array(f, cs->coll_name.str, "ctype", cs->m_ctype, MY_CS_CTYPE_TABLE_SIZE);
if (cs->to_lower)
- print_array(f, cs->name, "to_lower", cs->to_lower, MY_CS_TO_LOWER_TABLE_SIZE);
+ print_array(f, cs->coll_name.str, "to_lower", cs->to_lower, MY_CS_TO_LOWER_TABLE_SIZE);
if (cs->to_upper)
- print_array(f, cs->name, "to_upper", cs->to_upper, MY_CS_TO_UPPER_TABLE_SIZE);
+ print_array(f, cs->coll_name.str, "to_upper", cs->to_upper, MY_CS_TO_UPPER_TABLE_SIZE);
if (cs->sort_order)
- print_array(f, cs->name, "sort_order", cs->sort_order, MY_CS_SORT_ORDER_TABLE_SIZE);
+ print_array(f, cs->coll_name.str, "sort_order", cs->sort_order, MY_CS_SORT_ORDER_TABLE_SIZE);
if (cs->tab_to_uni)
- print_array16(f, cs->name, "to_uni", cs->tab_to_uni, MY_CS_TO_UNI_TABLE_SIZE);
+ print_array16(f, cs->coll_name.str, "to_uni", cs->tab_to_uni, MY_CS_TO_UNI_TABLE_SIZE);
}
@@ -332,7 +339,7 @@ print_array_ref(FILE *f,
CHARSET_INFO *cs= array0 ? cs0 : array1 ? cs1 : NULL;
if (cs)
fprintf(f," %s_%s, /* %s */\n",
- name, cs->name, name);
+ name, cs->coll_name.str, name);
else
fprintf(f," NULL, /* %s */\n", name);
}
@@ -344,6 +351,12 @@ static const char *nopad_infix(CHARSET_INFO *cs)
}
+void fprintf_lex_str_member(FILE *f, const LEX_CSTRING str, const char *comment)
+{
+ fprintf(f," { STRING_WITH_LEN(\"%s\") }, %s\n", str.str, comment);
+}
+
+
void dispcset(FILE *f,CHARSET_INFO *cs)
{
fprintf(f,"{\n");
@@ -356,23 +369,23 @@ void dispcset(FILE *f,CHARSET_INFO *cs)
cs->state & MY_CS_NONASCII ? "|MY_CS_NONASCII" : "",
cs->state & MY_CS_NOPAD ? "|MY_CS_NOPAD" : "");
- if (cs->name)
+ if (cs->coll_name.str)
{
CHARSET_INFO *srccs= inheritance_source(cs->number);
- fprintf(f," \"%s\", /* cset name */\n",cs->csname);
- fprintf(f," \"%s\", /* coll name */\n",cs->name);
+ fprintf_lex_str_member(f, cs->cs_name, "/* cset name */");
+ fprintf_lex_str_member(f, cs->coll_name, "/* coll name */");
fprintf(f," \"\", /* comment */\n");
if (cs->tailoring)
fprintf(f, " \"%s\", /* tailoring */\n", cs->tailoring);
else
fprintf(f," NULL, /* tailoring */\n");
- print_array_ref(f, cs, cs->ctype, srccs, srccs->ctype, "ctype");
+ print_array_ref(f, cs, cs->m_ctype, srccs, srccs->m_ctype, "ctype");
print_array_ref(f, cs, cs->to_lower, srccs, srccs->to_lower, "to_lower");
print_array_ref(f, cs, cs->to_upper, srccs, srccs->to_upper, "to_upper");
if (cs->sort_order)
- fprintf(f," sort_order_%s, /* sort_order */\n",cs->name);
+ fprintf(f," sort_order_%s, /* sort_order */\n", cs->coll_name.str);
else
fprintf(f," NULL, /* sort_order */\n");
@@ -382,8 +395,8 @@ void dispcset(FILE *f,CHARSET_INFO *cs)
}
else
{
- fprintf(f," NULL, /* cset name */\n");
- fprintf(f," NULL, /* coll name */\n");
+ fprintf(f," {NULL,0}, /* cset name */\n");
+ fprintf(f," {NULL,0}, /* coll name */\n");
fprintf(f," NULL, /* comment */\n");
fprintf(f," NULL, /* tailoging */\n");
fprintf(f," NULL, /* ctype */\n");
@@ -395,19 +408,17 @@ void dispcset(FILE *f,CHARSET_INFO *cs)
}
fprintf(f," NULL, /* from_uni */\n");
- fprintf(f," &my_unicase_default, /* caseinfo */\n");
+ fprintf(f," NULL, /* casefold */\n");
fprintf(f," NULL, /* state map */\n");
fprintf(f," NULL, /* ident map */\n");
fprintf(f," 1, /* strxfrm_multiply*/\n");
- fprintf(f," 1, /* caseup_multiply*/\n");
- fprintf(f," 1, /* casedn_multiply*/\n");
fprintf(f," 1, /* mbminlen */\n");
fprintf(f," 1, /* mbmaxlen */\n");
fprintf(f," 0, /* min_sort_char */\n");
fprintf(f," 255, /* max_sort_char */\n");
fprintf(f," ' ', /* pad_char */\n");
fprintf(f," 0, /* escape_with_backslash_is_dangerous */\n");
- fprintf(f," 1, /* levels_for_order */\n");
+ fprintf(f," MY_CS_COLL_LEVELS_S1,\n");
fprintf(f," &my_charset_8bit_handler,\n");
if (cs->state & MY_CS_BINSORT)
@@ -424,7 +435,7 @@ fprint_copyright(FILE *file)
fprintf(file,
"/* Copyright 2000-2008 MySQL AB, 2008 Sun Microsystems, Inc.\n"
" Copyright (c) 2000, 2011, Oracle and/or its affiliates.\n"
-" Copyright 2008-2016 MariaDB Corporation\n"
+" Copyright 2008-2023 MariaDB Corporation\n"
"\n"
" This program is free software; you can redistribute it and/or modify\n"
" it under the terms of the GNU General Public License as published by\n"
@@ -468,9 +479,10 @@ main(int argc, char **argv __attribute__((unused)))
{
if (cs->number && !(cs->state & MY_CS_COMPILED))
{
- if ( (!simple_cs_is_full(cs)) && (cs->csname))
+ if ( (!simple_cs_is_full(cs)) && (cs->cs_name.str))
{
- snprintf(filename,sizeof(filename),"%s/%s.xml",argv[1],cs->csname);
+ snprintf(filename, sizeof filename, "%s/%.*s.xml",
+ argv[1], cs->csname.length, cs->csname.str);
my_read_charset_file(filename);
}
cs->state|= MY_CS_LOADED;
@@ -504,7 +516,7 @@ main(int argc, char **argv __attribute__((unused)))
refids[cs->number]= refcs->number;
inherit_charset_data(cs, refcs);
}
- fprintf(f,"#ifdef HAVE_CHARSET_%s\n",cs->csname);
+ fprintf(f,"#ifdef HAVE_CHARSET_%s\n", cs->cs_name.str);
print_arrays(f, cs);
fprintf(f,"#endif\n");
fprintf(f,"\n");
@@ -518,7 +530,7 @@ main(int argc, char **argv __attribute__((unused)))
{
if (cs->state & MY_CS_LOADED)
{
- fprintf(f,"#ifdef HAVE_CHARSET_%s\n",cs->csname);
+ fprintf(f,"#ifdef HAVE_CHARSET_%s\n", cs->cs_name.str);
dispcset(f,cs);
fprintf(f,",\n");
fprintf(f,"#endif\n");
diff --git a/strings/ctype-big5.c b/strings/ctype-big5.c
index 2491a5ff7ed..aaf6769989b 100644
--- a/strings/ctype-big5.c
+++ b/strings/ctype-big5.c
@@ -187,586 +187,586 @@ static const uchar sort_order_big5[]=
};
-static MY_UNICASE_CHARACTER cA2[256]=
+static const MY_CASEFOLD_CHARACTER cA2[256]=
{
/* A200-A20F */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
/* A210-A21F */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
/* A220-A22F */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
/* A230-A23F */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
/* A240-A24F */
- {0xA240,0xA240,0xFFFD},
- {0xA241,0xA241,0xFF0F},
- {0xA242,0xA242,0xFF3C},
- {0xA243,0xA243,0xFF04},
- {0xA244,0xA244,0x00A5},
- {0xA245,0xA245,0x3012},
- {0xA246,0xA246,0x00A2},
- {0xA247,0xA247,0x00A3},
- {0xA248,0xA248,0xFF05},
- {0xA249,0xA249,0xFF20},
- {0xA24A,0xA24A,0x2103},
- {0xA24B,0xA24B,0x2109},
- {0xA24C,0xA24C,0xFE69},
- {0xA24D,0xA24D,0xFE6A},
- {0xA24E,0xA24E,0xFE6B},
- {0xA24F,0xA24F,0x33D5},
+ {0xA240,0xA240},
+ {0xA241,0xA241},
+ {0xA242,0xA242},
+ {0xA243,0xA243},
+ {0xA244,0xA244},
+ {0xA245,0xA245},
+ {0xA246,0xA246},
+ {0xA247,0xA247},
+ {0xA248,0xA248},
+ {0xA249,0xA249},
+ {0xA24A,0xA24A},
+ {0xA24B,0xA24B},
+ {0xA24C,0xA24C},
+ {0xA24D,0xA24D},
+ {0xA24E,0xA24E},
+ {0xA24F,0xA24F},
/* A250-A25F */
- {0xA250,0xA250,0x339C},
- {0xA251,0xA251,0x339D},
- {0xA252,0xA252,0x339E},
- {0xA253,0xA253,0x33CE},
- {0xA254,0xA254,0x33A1},
- {0xA255,0xA255,0x338E},
- {0xA256,0xA256,0x338F},
- {0xA257,0xA257,0x33C4},
- {0xA258,0xA258,0x00B0},
- {0xA259,0xA259,0x5159},
- {0xA25A,0xA25A,0x515B},
- {0xA25B,0xA25B,0x515E},
- {0xA25C,0xA25C,0x515D},
- {0xA25D,0xA25D,0x5161},
- {0xA25E,0xA25E,0x5163},
- {0xA25F,0xA25F,0x55E7},
+ {0xA250,0xA250},
+ {0xA251,0xA251},
+ {0xA252,0xA252},
+ {0xA253,0xA253},
+ {0xA254,0xA254},
+ {0xA255,0xA255},
+ {0xA256,0xA256},
+ {0xA257,0xA257},
+ {0xA258,0xA258},
+ {0xA259,0xA259},
+ {0xA25A,0xA25A},
+ {0xA25B,0xA25B},
+ {0xA25C,0xA25C},
+ {0xA25D,0xA25D},
+ {0xA25E,0xA25E},
+ {0xA25F,0xA25F},
/* A260-A26F */
- {0xA260,0xA260,0x74E9},
- {0xA261,0xA261,0x7CCE},
- {0xA262,0xA262,0x2581},
- {0xA263,0xA263,0x2582},
- {0xA264,0xA264,0x2583},
- {0xA265,0xA265,0x2584},
- {0xA266,0xA266,0x2585},
- {0xA267,0xA267,0x2586},
- {0xA268,0xA268,0x2587},
- {0xA269,0xA269,0x2588},
- {0xA26A,0xA26A,0x258F},
- {0xA26B,0xA26B,0x258E},
- {0xA26C,0xA26C,0x258D},
- {0xA26D,0xA26D,0x258C},
- {0xA26E,0xA26E,0x258B},
- {0xA26F,0xA26F,0x258A},
+ {0xA260,0xA260},
+ {0xA261,0xA261},
+ {0xA262,0xA262},
+ {0xA263,0xA263},
+ {0xA264,0xA264},
+ {0xA265,0xA265},
+ {0xA266,0xA266},
+ {0xA267,0xA267},
+ {0xA268,0xA268},
+ {0xA269,0xA269},
+ {0xA26A,0xA26A},
+ {0xA26B,0xA26B},
+ {0xA26C,0xA26C},
+ {0xA26D,0xA26D},
+ {0xA26E,0xA26E},
+ {0xA26F,0xA26F},
/* A270-A27F */
- {0xA270,0xA270,0x2589},
- {0xA271,0xA271,0x253C},
- {0xA272,0xA272,0x2534},
- {0xA273,0xA273,0x252C},
- {0xA274,0xA274,0x2524},
- {0xA275,0xA275,0x251C},
- {0xA276,0xA276,0x2594},
- {0xA277,0xA277,0x2500},
- {0xA278,0xA278,0x2502},
- {0xA279,0xA279,0x2595},
- {0xA27A,0xA27A,0x250C},
- {0xA27B,0xA27B,0x2510},
- {0xA27C,0xA27C,0x2514},
- {0xA27D,0xA27D,0x2518},
- {0xA27E,0xA27E,0x256D},
- {0x0000,0x0000,0x0000},
+ {0xA270,0xA270},
+ {0xA271,0xA271},
+ {0xA272,0xA272},
+ {0xA273,0xA273},
+ {0xA274,0xA274},
+ {0xA275,0xA275},
+ {0xA276,0xA276},
+ {0xA277,0xA277},
+ {0xA278,0xA278},
+ {0xA279,0xA279},
+ {0xA27A,0xA27A},
+ {0xA27B,0xA27B},
+ {0xA27C,0xA27C},
+ {0xA27D,0xA27D},
+ {0xA27E,0xA27E},
+ {0x0000,0x0000},
/* A280-A28F */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
/* A290-A29F */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
/* A2A0-A2AF */
- {0x0000,0x0000,0x0000},
- {0xA2A1,0xA2A1,0x256E},
- {0xA2A2,0xA2A2,0x2570},
- {0xA2A3,0xA2A3,0x256F},
- {0xA2A4,0xA2A4,0x2550},
- {0xA2A5,0xA2A5,0x255E},
- {0xA2A6,0xA2A6,0x256A},
- {0xA2A7,0xA2A7,0x2561},
- {0xA2A8,0xA2A8,0x25E2},
- {0xA2A9,0xA2A9,0x25E3},
- {0xA2AA,0xA2AA,0x25E5},
- {0xA2AB,0xA2AB,0x25E4},
- {0xA2AC,0xA2AC,0x2571},
- {0xA2AD,0xA2AD,0x2572},
- {0xA2AE,0xA2AE,0x2573},
- {0xA2AF,0xA2AF,0xFF10},
+ {0x0000,0x0000},
+ {0xA2A1,0xA2A1},
+ {0xA2A2,0xA2A2},
+ {0xA2A3,0xA2A3},
+ {0xA2A4,0xA2A4},
+ {0xA2A5,0xA2A5},
+ {0xA2A6,0xA2A6},
+ {0xA2A7,0xA2A7},
+ {0xA2A8,0xA2A8},
+ {0xA2A9,0xA2A9},
+ {0xA2AA,0xA2AA},
+ {0xA2AB,0xA2AB},
+ {0xA2AC,0xA2AC},
+ {0xA2AD,0xA2AD},
+ {0xA2AE,0xA2AE},
+ {0xA2AF,0xA2AF},
/* A2B0-A2BF */
- {0xA2B0,0xA2B0,0xFF11},
- {0xA2B1,0xA2B1,0xFF12},
- {0xA2B2,0xA2B2,0xFF13},
- {0xA2B3,0xA2B3,0xFF14},
- {0xA2B4,0xA2B4,0xFF15},
- {0xA2B5,0xA2B5,0xFF16},
- {0xA2B6,0xA2B6,0xFF17},
- {0xA2B7,0xA2B7,0xFF18},
- {0xA2B8,0xA2B8,0xFF19},
- {0xA2B9,0xA2B9,0x2160},
- {0xA2BA,0xA2BA,0x2161},
- {0xA2BB,0xA2BB,0x2162},
- {0xA2BC,0xA2BC,0x2163},
- {0xA2BD,0xA2BD,0x2164},
- {0xA2BE,0xA2BE,0x2165},
- {0xA2BF,0xA2BF,0x2166},
+ {0xA2B0,0xA2B0},
+ {0xA2B1,0xA2B1},
+ {0xA2B2,0xA2B2},
+ {0xA2B3,0xA2B3},
+ {0xA2B4,0xA2B4},
+ {0xA2B5,0xA2B5},
+ {0xA2B6,0xA2B6},
+ {0xA2B7,0xA2B7},
+ {0xA2B8,0xA2B8},
+ {0xA2B9,0xA2B9},
+ {0xA2BA,0xA2BA},
+ {0xA2BB,0xA2BB},
+ {0xA2BC,0xA2BC},
+ {0xA2BD,0xA2BD},
+ {0xA2BE,0xA2BE},
+ {0xA2BF,0xA2BF},
/* A2C0-A2CF */
- {0xA2C0,0xA2C0,0x2167},
- {0xA2C1,0xA2C1,0x2168},
- {0xA2C2,0xA2C2,0x2169},
- {0xA2C3,0xA2C3,0x3021},
- {0xA2C4,0xA2C4,0x3022},
- {0xA2C5,0xA2C5,0x3023},
- {0xA2C6,0xA2C6,0x3024},
- {0xA2C7,0xA2C7,0x3025},
- {0xA2C8,0xA2C8,0x3026},
- {0xA2C9,0xA2C9,0x3027},
- {0xA2CA,0xA2CA,0x3028},
- {0xA2CB,0xA2CB,0x3029},
- {0xA2CC,0xA2CC,0xFFFD},
- {0xA2CD,0xA2CD,0x5344},
- {0xA2CE,0xA2CE,0xFFFD},
- {0xA2CF,0xA2E9,0xFF21},
+ {0xA2C0,0xA2C0},
+ {0xA2C1,0xA2C1},
+ {0xA2C2,0xA2C2},
+ {0xA2C3,0xA2C3},
+ {0xA2C4,0xA2C4},
+ {0xA2C5,0xA2C5},
+ {0xA2C6,0xA2C6},
+ {0xA2C7,0xA2C7},
+ {0xA2C8,0xA2C8},
+ {0xA2C9,0xA2C9},
+ {0xA2CA,0xA2CA},
+ {0xA2CB,0xA2CB},
+ {0xA2CC,0xA2CC},
+ {0xA2CD,0xA2CD},
+ {0xA2CE,0xA2CE},
+ {0xA2CF,0xA2E9},
/* A2D0-A2DF */
- {0xA2D0,0xA2EA,0xFF22},
- {0xA2D1,0xA2EB,0xFF23},
- {0xA2D2,0xA2EC,0xFF24},
- {0xA2D3,0xA2ED,0xFF25},
- {0xA2D4,0xA2EE,0xFF26},
- {0xA2D5,0xA2EF,0xFF27},
- {0xA2D6,0xA2F0,0xFF28},
- {0xA2D7,0xA2F1,0xFF29},
- {0xA2D8,0xA2F2,0xFF2A},
- {0xA2D9,0xA2F3,0xFF2B},
- {0xA2DA,0xA2F4,0xFF2C},
- {0xA2DB,0xA2F5,0xFF2D},
- {0xA2DC,0xA2F6,0xFF2E},
- {0xA2DD,0xA2F7,0xFF2F},
- {0xA2DE,0xA2F8,0xFF30},
- {0xA2DF,0xA2F9,0xFF31},
+ {0xA2D0,0xA2EA},
+ {0xA2D1,0xA2EB},
+ {0xA2D2,0xA2EC},
+ {0xA2D3,0xA2ED},
+ {0xA2D4,0xA2EE},
+ {0xA2D5,0xA2EF},
+ {0xA2D6,0xA2F0},
+ {0xA2D7,0xA2F1},
+ {0xA2D8,0xA2F2},
+ {0xA2D9,0xA2F3},
+ {0xA2DA,0xA2F4},
+ {0xA2DB,0xA2F5},
+ {0xA2DC,0xA2F6},
+ {0xA2DD,0xA2F7},
+ {0xA2DE,0xA2F8},
+ {0xA2DF,0xA2F9},
/* A2E0-A2EF */
- {0xA2E0,0xA2FA,0xFF32},
- {0xA2E1,0xA2FB,0xFF33},
- {0xA2E2,0xA2FC,0xFF34},
- {0xA2E3,0xA2FD,0xFF35},
- {0xA2E4,0xA2FE,0xFF36},
- {0xA2E5,0xA340,0xFF37},
- {0xA2E6,0xA341,0xFF38},
- {0xA2E7,0xA342,0xFF39},
- {0xA2E8,0xA343,0xFF3A},
- {0xA2CF,0xA2E9,0xFF41},
- {0xA2D0,0xA2EA,0xFF42},
- {0xA2D1,0xA2EB,0xFF43},
- {0xA2D2,0xA2EC,0xFF44},
- {0xA2D3,0xA2ED,0xFF45},
- {0xA2D4,0xA2EE,0xFF46},
- {0xA2D5,0xA2EF,0xFF47},
+ {0xA2E0,0xA2FA},
+ {0xA2E1,0xA2FB},
+ {0xA2E2,0xA2FC},
+ {0xA2E3,0xA2FD},
+ {0xA2E4,0xA2FE},
+ {0xA2E5,0xA340},
+ {0xA2E6,0xA341},
+ {0xA2E7,0xA342},
+ {0xA2E8,0xA343},
+ {0xA2CF,0xA2E9},
+ {0xA2D0,0xA2EA},
+ {0xA2D1,0xA2EB},
+ {0xA2D2,0xA2EC},
+ {0xA2D3,0xA2ED},
+ {0xA2D4,0xA2EE},
+ {0xA2D5,0xA2EF},
/* A2F0-A2FF */
- {0xA2D6,0xA2F0,0xFF48},
- {0xA2D7,0xA2F1,0xFF49},
- {0xA2D8,0xA2F2,0xFF4A},
- {0xA2D9,0xA2F3,0xFF4B},
- {0xA2DA,0xA2F4,0xFF4C},
- {0xA2DB,0xA2F5,0xFF4D},
- {0xA2DC,0xA2F6,0xFF4E},
- {0xA2DD,0xA2F7,0xFF4F},
- {0xA2DE,0xA2F8,0xFF50},
- {0xA2DF,0xA2F9,0xFF51},
- {0xA2E0,0xA2FA,0xFF52},
- {0xA2E1,0xA2FB,0xFF53},
- {0xA2E2,0xA2FC,0xFF54},
- {0xA2E3,0xA2FD,0xFF55},
- {0xA2E4,0xA2FE,0xFF56},
- {0x0000,0x0000,0x0000}
+ {0xA2D6,0xA2F0},
+ {0xA2D7,0xA2F1},
+ {0xA2D8,0xA2F2},
+ {0xA2D9,0xA2F3},
+ {0xA2DA,0xA2F4},
+ {0xA2DB,0xA2F5},
+ {0xA2DC,0xA2F6},
+ {0xA2DD,0xA2F7},
+ {0xA2DE,0xA2F8},
+ {0xA2DF,0xA2F9},
+ {0xA2E0,0xA2FA},
+ {0xA2E1,0xA2FB},
+ {0xA2E2,0xA2FC},
+ {0xA2E3,0xA2FD},
+ {0xA2E4,0xA2FE},
+ {0x0000,0x0000}
};
-static MY_UNICASE_CHARACTER cA3[256]=
+static const MY_CASEFOLD_CHARACTER cA3[256]=
{
/* A300-A30F */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
/* A310-A31F */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
/* A320-A32F */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
/* A330-A33F */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
/* A340-A34F */
- {0xA2E5,0xA340,0xFF57},
- {0xA2E6,0xA341,0xFF58},
- {0xA2E7,0xA342,0xFF59},
- {0xA2E8,0xA343,0xFF5A},
- {0xA344,0xA35C,0x0391},
- {0xA345,0xA35D,0x0392},
- {0xA346,0xA35E,0x0393},
- {0xA347,0xA35F,0x0394},
- {0xA348,0xA360,0x0395},
- {0xA349,0xA361,0x0396},
- {0xA34A,0xA362,0x0397},
- {0xA34B,0xA363,0x0398},
- {0xA34C,0xA364,0x0399},
- {0xA34D,0xA365,0x039A},
- {0xA34E,0xA366,0x039B},
- {0xA34F,0xA367,0x039C},
+ {0xA2E5,0xA340},
+ {0xA2E6,0xA341},
+ {0xA2E7,0xA342},
+ {0xA2E8,0xA343},
+ {0xA344,0xA35C},
+ {0xA345,0xA35D},
+ {0xA346,0xA35E},
+ {0xA347,0xA35F},
+ {0xA348,0xA360},
+ {0xA349,0xA361},
+ {0xA34A,0xA362},
+ {0xA34B,0xA363},
+ {0xA34C,0xA364},
+ {0xA34D,0xA365},
+ {0xA34E,0xA366},
+ {0xA34F,0xA367},
/* A350-A35F */
- {0xA350,0xA368,0x039D},
- {0xA351,0xA369,0x039E},
- {0xA352,0xA36A,0x039F},
- {0xA353,0xA36B,0x03A0},
- {0xA354,0xA36C,0x03A1},
- {0xA355,0xA36D,0x03A3},
- {0xA356,0xA36E,0x03A4},
- {0xA357,0xA36F,0x03A5},
- {0xA358,0xA370,0x03A6},
- {0xA359,0xA371,0x03A7},
- {0xA35A,0xA372,0x03A8},
- {0xA35B,0xA373,0x03A9},
- {0xA344,0xA35C,0x03B1},
- {0xA345,0xA35D,0x03B2},
- {0xA346,0xA35E,0x03B3},
- {0xA347,0xA35F,0x03B4},
+ {0xA350,0xA368},
+ {0xA351,0xA369},
+ {0xA352,0xA36A},
+ {0xA353,0xA36B},
+ {0xA354,0xA36C},
+ {0xA355,0xA36D},
+ {0xA356,0xA36E},
+ {0xA357,0xA36F},
+ {0xA358,0xA370},
+ {0xA359,0xA371},
+ {0xA35A,0xA372},
+ {0xA35B,0xA373},
+ {0xA344,0xA35C},
+ {0xA345,0xA35D},
+ {0xA346,0xA35E},
+ {0xA347,0xA35F},
/* A360-A36F */
- {0xA348,0xA360,0x03B5},
- {0xA349,0xA361,0x03B6},
- {0xA34A,0xA362,0x03B7},
- {0xA34B,0xA363,0x03B8},
- {0xA34C,0xA364,0x03B9},
- {0xA34D,0xA365,0x03BA},
- {0xA34E,0xA366,0x03BB},
- {0xA34F,0xA367,0x03BC},
- {0xA350,0xA368,0x03BD},
- {0xA351,0xA369,0x03BE},
- {0xA352,0xA36A,0x03BF},
- {0xA353,0xA36B,0x03C0},
- {0xA354,0xA36C,0x03C1},
- {0xA355,0xA36D,0x03C3},
- {0xA356,0xA36E,0x03C4},
- {0xA357,0xA36F,0x03C5},
+ {0xA348,0xA360},
+ {0xA349,0xA361},
+ {0xA34A,0xA362},
+ {0xA34B,0xA363},
+ {0xA34C,0xA364},
+ {0xA34D,0xA365},
+ {0xA34E,0xA366},
+ {0xA34F,0xA367},
+ {0xA350,0xA368},
+ {0xA351,0xA369},
+ {0xA352,0xA36A},
+ {0xA353,0xA36B},
+ {0xA354,0xA36C},
+ {0xA355,0xA36D},
+ {0xA356,0xA36E},
+ {0xA357,0xA36F},
/* A370-A37F */
- {0xA358,0xA370,0x03C6},
- {0xA359,0xA371,0x03C7},
- {0xA35A,0xA372,0x03C8},
- {0xA35B,0xA373,0x03C9},
- {0xA374,0xA374,0x3105},
- {0xA375,0xA375,0x3106},
- {0xA376,0xA376,0x3107},
- {0xA377,0xA377,0x3108},
- {0xA378,0xA378,0x3109},
- {0xA379,0xA379,0x310A},
- {0xA37A,0xA37A,0x310B},
- {0xA37B,0xA37B,0x310C},
- {0xA37C,0xA37C,0x310D},
- {0xA37D,0xA37D,0x310E},
- {0xA37E,0xA37E,0x310F},
- {0x0000,0x0000,0x0000},
+ {0xA358,0xA370},
+ {0xA359,0xA371},
+ {0xA35A,0xA372},
+ {0xA35B,0xA373},
+ {0xA374,0xA374},
+ {0xA375,0xA375},
+ {0xA376,0xA376},
+ {0xA377,0xA377},
+ {0xA378,0xA378},
+ {0xA379,0xA379},
+ {0xA37A,0xA37A},
+ {0xA37B,0xA37B},
+ {0xA37C,0xA37C},
+ {0xA37D,0xA37D},
+ {0xA37E,0xA37E},
+ {0x0000,0x0000},
/* A380-A38F */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
/* A390-A39F */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
/* A3A0-A3AF */
- {0x0000,0x0000,0x0000},
- {0xA3A1,0xA3A1,0x3110},
- {0xA3A2,0xA3A2,0x3111},
- {0xA3A3,0xA3A3,0x3112},
- {0xA3A4,0xA3A4,0x3113},
- {0xA3A5,0xA3A5,0x3114},
- {0xA3A6,0xA3A6,0x3115},
- {0xA3A7,0xA3A7,0x3116},
- {0xA3A8,0xA3A8,0x3117},
- {0xA3A9,0xA3A9,0x3118},
- {0xA3AA,0xA3AA,0x3119},
- {0xA3AB,0xA3AB,0x311A},
- {0xA3AC,0xA3AC,0x311B},
- {0xA3AD,0xA3AD,0x311C},
- {0xA3AE,0xA3AE,0x311D},
- {0xA3AF,0xA3AF,0x311E},
+ {0x0000,0x0000},
+ {0xA3A1,0xA3A1},
+ {0xA3A2,0xA3A2},
+ {0xA3A3,0xA3A3},
+ {0xA3A4,0xA3A4},
+ {0xA3A5,0xA3A5},
+ {0xA3A6,0xA3A6},
+ {0xA3A7,0xA3A7},
+ {0xA3A8,0xA3A8},
+ {0xA3A9,0xA3A9},
+ {0xA3AA,0xA3AA},
+ {0xA3AB,0xA3AB},
+ {0xA3AC,0xA3AC},
+ {0xA3AD,0xA3AD},
+ {0xA3AE,0xA3AE},
+ {0xA3AF,0xA3AF},
/* A3B0-A3BF */
- {0xA3B0,0xA3B0,0x311F},
- {0xA3B1,0xA3B1,0x3120},
- {0xA3B2,0xA3B2,0x3121},
- {0xA3B3,0xA3B3,0x3122},
- {0xA3B4,0xA3B4,0x3123},
- {0xA3B5,0xA3B5,0x3124},
- {0xA3B6,0xA3B6,0x3125},
- {0xA3B7,0xA3B7,0x3126},
- {0xA3B8,0xA3B8,0x3127},
- {0xA3B9,0xA3B9,0x3128},
- {0xA3BA,0xA3BA,0x3129},
- {0xA3BB,0xA3BB,0x02D9},
- {0xA3BC,0xA3BC,0x02C9},
- {0xA3BD,0xA3BD,0x02CA},
- {0xA3BE,0xA3BE,0x02C7},
- {0xA3BF,0xA3BF,0x02CB},
+ {0xA3B0,0xA3B0},
+ {0xA3B1,0xA3B1},
+ {0xA3B2,0xA3B2},
+ {0xA3B3,0xA3B3},
+ {0xA3B4,0xA3B4},
+ {0xA3B5,0xA3B5},
+ {0xA3B6,0xA3B6},
+ {0xA3B7,0xA3B7},
+ {0xA3B8,0xA3B8},
+ {0xA3B9,0xA3B9},
+ {0xA3BA,0xA3BA},
+ {0xA3BB,0xA3BB},
+ {0xA3BC,0xA3BC},
+ {0xA3BD,0xA3BD},
+ {0xA3BE,0xA3BE},
+ {0xA3BF,0xA3BF},
/* A3C0-A3CF */
- {0xA3C0,0xA3C0,0x003F},
- {0xA3C1,0xA3C1,0x003F},
- {0xA3C2,0xA3C2,0x003F},
- {0xA3C3,0xA3C3,0x003F},
- {0xA3C4,0xA3C4,0x003F},
- {0xA3C5,0xA3C5,0x003F},
- {0xA3C6,0xA3C6,0x003F},
- {0xA3C7,0xA3C7,0x003F},
- {0xA3C8,0xA3C8,0x003F},
- {0xA3C9,0xA3C9,0x003F},
- {0xA3CA,0xA3CA,0x003F},
- {0xA3CB,0xA3CB,0x003F},
- {0xA3CC,0xA3CC,0x003F},
- {0xA3CD,0xA3CD,0x003F},
- {0xA3CE,0xA3CE,0x003F},
- {0xA3CF,0xA3CF,0x003F},
+ {0xA3C0,0xA3C0},
+ {0xA3C1,0xA3C1},
+ {0xA3C2,0xA3C2},
+ {0xA3C3,0xA3C3},
+ {0xA3C4,0xA3C4},
+ {0xA3C5,0xA3C5},
+ {0xA3C6,0xA3C6},
+ {0xA3C7,0xA3C7},
+ {0xA3C8,0xA3C8},
+ {0xA3C9,0xA3C9},
+ {0xA3CA,0xA3CA},
+ {0xA3CB,0xA3CB},
+ {0xA3CC,0xA3CC},
+ {0xA3CD,0xA3CD},
+ {0xA3CE,0xA3CE},
+ {0xA3CF,0xA3CF},
/* A3D0-A3DF */
- {0xA3D0,0xA3D0,0x003F},
- {0xA3D1,0xA3D1,0x003F},
- {0xA3D2,0xA3D2,0x003F},
- {0xA3D3,0xA3D3,0x003F},
- {0xA3D4,0xA3D4,0x003F},
- {0xA3D5,0xA3D5,0x003F},
- {0xA3D6,0xA3D6,0x003F},
- {0xA3D7,0xA3D7,0x003F},
- {0xA3D8,0xA3D8,0x003F},
- {0xA3D9,0xA3D9,0x003F},
- {0xA3DA,0xA3DA,0x003F},
- {0xA3DB,0xA3DB,0x003F},
- {0xA3DC,0xA3DC,0x003F},
- {0xA3DD,0xA3DD,0x003F},
- {0xA3DE,0xA3DE,0x003F},
- {0xA3DF,0xA3DF,0x003F},
+ {0xA3D0,0xA3D0},
+ {0xA3D1,0xA3D1},
+ {0xA3D2,0xA3D2},
+ {0xA3D3,0xA3D3},
+ {0xA3D4,0xA3D4},
+ {0xA3D5,0xA3D5},
+ {0xA3D6,0xA3D6},
+ {0xA3D7,0xA3D7},
+ {0xA3D8,0xA3D8},
+ {0xA3D9,0xA3D9},
+ {0xA3DA,0xA3DA},
+ {0xA3DB,0xA3DB},
+ {0xA3DC,0xA3DC},
+ {0xA3DD,0xA3DD},
+ {0xA3DE,0xA3DE},
+ {0xA3DF,0xA3DF},
/* A3E0-A3EF */
- {0xA3E0,0xA3E0,0x003F},
- {0xA3E1,0xA3E1,0x003F},
- {0xA3E2,0xA3E2,0x003F},
- {0xA3E3,0xA3E3,0x003F},
- {0xA3E4,0xA3E4,0x003F},
- {0xA3E5,0xA3E5,0x003F},
- {0xA3E6,0xA3E6,0x003F},
- {0xA3E7,0xA3E7,0x003F},
- {0xA3E8,0xA3E8,0x003F},
- {0xA3E9,0xA3E9,0x003F},
- {0xA3EA,0xA3EA,0x003F},
- {0xA3EB,0xA3EB,0x003F},
- {0xA3EC,0xA3EC,0x003F},
- {0xA3ED,0xA3ED,0x003F},
- {0xA3EE,0xA3EE,0x003F},
- {0xA3EF,0xA3EF,0x003F},
+ {0xA3E0,0xA3E0},
+ {0xA3E1,0xA3E1},
+ {0xA3E2,0xA3E2},
+ {0xA3E3,0xA3E3},
+ {0xA3E4,0xA3E4},
+ {0xA3E5,0xA3E5},
+ {0xA3E6,0xA3E6},
+ {0xA3E7,0xA3E7},
+ {0xA3E8,0xA3E8},
+ {0xA3E9,0xA3E9},
+ {0xA3EA,0xA3EA},
+ {0xA3EB,0xA3EB},
+ {0xA3EC,0xA3EC},
+ {0xA3ED,0xA3ED},
+ {0xA3EE,0xA3EE},
+ {0xA3EF,0xA3EF},
/* A3F0-A3FF */
- {0xA3F0,0xA3F0,0x003F},
- {0xA3F1,0xA3F1,0x003F},
- {0xA3F2,0xA3F2,0x003F},
- {0xA3F3,0xA3F3,0x003F},
- {0xA3F4,0xA3F4,0x003F},
- {0xA3F5,0xA3F5,0x003F},
- {0xA3F6,0xA3F6,0x003F},
- {0xA3F7,0xA3F7,0x003F},
- {0xA3F8,0xA3F8,0x003F},
- {0xA3F9,0xA3F9,0x003F},
- {0xA3FA,0xA3FA,0x003F},
- {0xA3FB,0xA3FB,0x003F},
- {0xA3FC,0xA3FC,0x003F},
- {0xA3FD,0xA3FD,0x003F},
- {0xA3FE,0xA3FE,0x003F},
- {0x0000,0x0000,0x0000}
+ {0xA3F0,0xA3F0},
+ {0xA3F1,0xA3F1},
+ {0xA3F2,0xA3F2},
+ {0xA3F3,0xA3F3},
+ {0xA3F4,0xA3F4},
+ {0xA3F5,0xA3F5},
+ {0xA3F6,0xA3F6},
+ {0xA3F7,0xA3F7},
+ {0xA3F8,0xA3F8},
+ {0xA3F9,0xA3F9},
+ {0xA3FA,0xA3FA},
+ {0xA3FB,0xA3FB},
+ {0xA3FC,0xA3FC},
+ {0xA3FD,0xA3FD},
+ {0xA3FE,0xA3FE},
+ {0x0000,0x0000}
};
-static MY_UNICASE_CHARACTER cC7[256]=
+static const MY_CASEFOLD_CHARACTER cC7[256]=
{
/* C700-C70F */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
/* C710-C71F */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
/* C720-C72F */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
/* C730-C73F */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
/* C740-C74F */
- {0xC740,0xC740,0x30A8},
- {0xC741,0xC741,0x30A9},
- {0xC742,0xC742,0x30AA},
- {0xC743,0xC743,0x30AB},
- {0xC744,0xC744,0x30AC},
- {0xC745,0xC745,0x30AD},
- {0xC746,0xC746,0x30AE},
- {0xC747,0xC747,0x30AF},
- {0xC748,0xC748,0x30B0},
- {0xC749,0xC749,0x30B1},
- {0xC74A,0xC74A,0x30B2},
- {0xC74B,0xC74B,0x30B3},
- {0xC74C,0xC74C,0x30B4},
- {0xC74D,0xC74D,0x30B5},
- {0xC74E,0xC74E,0x30B6},
- {0xC74F,0xC74F,0x30B7},
+ {0xC740,0xC740},
+ {0xC741,0xC741},
+ {0xC742,0xC742},
+ {0xC743,0xC743},
+ {0xC744,0xC744},
+ {0xC745,0xC745},
+ {0xC746,0xC746},
+ {0xC747,0xC747},
+ {0xC748,0xC748},
+ {0xC749,0xC749},
+ {0xC74A,0xC74A},
+ {0xC74B,0xC74B},
+ {0xC74C,0xC74C},
+ {0xC74D,0xC74D},
+ {0xC74E,0xC74E},
+ {0xC74F,0xC74F},
/* C750-C75F */
- {0xC750,0xC750,0x30B8},
- {0xC751,0xC751,0x30B9},
- {0xC752,0xC752,0x30BA},
- {0xC753,0xC753,0x30BB},
- {0xC754,0xC754,0x30BC},
- {0xC755,0xC755,0x30BD},
- {0xC756,0xC756,0x30BE},
- {0xC757,0xC757,0x30BF},
- {0xC758,0xC758,0x30C0},
- {0xC759,0xC759,0x30C1},
- {0xC75A,0xC75A,0x30C2},
- {0xC75B,0xC75B,0x30C3},
- {0xC75C,0xC75C,0x30C4},
- {0xC75D,0xC75D,0x30C5},
- {0xC75E,0xC75E,0x30C6},
- {0xC75F,0xC75F,0x30C7},
+ {0xC750,0xC750},
+ {0xC751,0xC751},
+ {0xC752,0xC752},
+ {0xC753,0xC753},
+ {0xC754,0xC754},
+ {0xC755,0xC755},
+ {0xC756,0xC756},
+ {0xC757,0xC757},
+ {0xC758,0xC758},
+ {0xC759,0xC759},
+ {0xC75A,0xC75A},
+ {0xC75B,0xC75B},
+ {0xC75C,0xC75C},
+ {0xC75D,0xC75D},
+ {0xC75E,0xC75E},
+ {0xC75F,0xC75F},
/* C760-C76F */
- {0xC760,0xC760,0x30C8},
- {0xC761,0xC761,0x30C9},
- {0xC762,0xC762,0x30CA},
- {0xC763,0xC763,0x30CB},
- {0xC764,0xC764,0x30CC},
- {0xC765,0xC765,0x30CD},
- {0xC766,0xC766,0x30CE},
- {0xC767,0xC767,0x30CF},
- {0xC768,0xC768,0x30D0},
- {0xC769,0xC769,0x30D1},
- {0xC76A,0xC76A,0x30D2},
- {0xC76B,0xC76B,0x30D3},
- {0xC76C,0xC76C,0x30D4},
- {0xC76D,0xC76D,0x30D5},
- {0xC76E,0xC76E,0x30D6},
- {0xC76F,0xC76F,0x30D7},
+ {0xC760,0xC760},
+ {0xC761,0xC761},
+ {0xC762,0xC762},
+ {0xC763,0xC763},
+ {0xC764,0xC764},
+ {0xC765,0xC765},
+ {0xC766,0xC766},
+ {0xC767,0xC767},
+ {0xC768,0xC768},
+ {0xC769,0xC769},
+ {0xC76A,0xC76A},
+ {0xC76B,0xC76B},
+ {0xC76C,0xC76C},
+ {0xC76D,0xC76D},
+ {0xC76E,0xC76E},
+ {0xC76F,0xC76F},
/* C770-C77F */
- {0xC770,0xC770,0x30D8},
- {0xC771,0xC771,0x30D9},
- {0xC772,0xC772,0x30DA},
- {0xC773,0xC773,0x30DB},
- {0xC774,0xC774,0x30DC},
- {0xC775,0xC775,0x30DD},
- {0xC776,0xC776,0x30DE},
- {0xC777,0xC777,0x30DF},
- {0xC778,0xC778,0x30E0},
- {0xC779,0xC779,0x30E1},
- {0xC77A,0xC77A,0x30E2},
- {0xC77B,0xC77B,0x30E3},
- {0xC77C,0xC77C,0x30E4},
- {0xC77D,0xC77D,0x30E5},
- {0xC77E,0xC77E,0x30E6},
- {0x0000,0x0000,0x0000},
+ {0xC770,0xC770},
+ {0xC771,0xC771},
+ {0xC772,0xC772},
+ {0xC773,0xC773},
+ {0xC774,0xC774},
+ {0xC775,0xC775},
+ {0xC776,0xC776},
+ {0xC777,0xC777},
+ {0xC778,0xC778},
+ {0xC779,0xC779},
+ {0xC77A,0xC77A},
+ {0xC77B,0xC77B},
+ {0xC77C,0xC77C},
+ {0xC77D,0xC77D},
+ {0xC77E,0xC77E},
+ {0x0000,0x0000},
/* C780-C78F */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
/* C790-C79F */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
/* C7A0-C7AF */
- {0x0000,0x0000,0x0000},
- {0xC7A1,0xC7A1,0x30E7},
- {0xC7A2,0xC7A2,0x30E8},
- {0xC7A3,0xC7A3,0x30E9},
- {0xC7A4,0xC7A4,0x30EA},
- {0xC7A5,0xC7A5,0x30EB},
- {0xC7A6,0xC7A6,0x30EC},
- {0xC7A7,0xC7A7,0x30ED},
- {0xC7A8,0xC7A8,0x30EE},
- {0xC7A9,0xC7A9,0x30EF},
- {0xC7AA,0xC7AA,0x30F0},
- {0xC7AB,0xC7AB,0x30F1},
- {0xC7AC,0xC7AC,0x30F2},
- {0xC7AD,0xC7AD,0x30F3},
- {0xC7AE,0xC7AE,0x30F4},
- {0xC7AF,0xC7AF,0x30F5},
+ {0x0000,0x0000},
+ {0xC7A1,0xC7A1},
+ {0xC7A2,0xC7A2},
+ {0xC7A3,0xC7A3},
+ {0xC7A4,0xC7A4},
+ {0xC7A5,0xC7A5},
+ {0xC7A6,0xC7A6},
+ {0xC7A7,0xC7A7},
+ {0xC7A8,0xC7A8},
+ {0xC7A9,0xC7A9},
+ {0xC7AA,0xC7AA},
+ {0xC7AB,0xC7AB},
+ {0xC7AC,0xC7AC},
+ {0xC7AD,0xC7AD},
+ {0xC7AE,0xC7AE},
+ {0xC7AF,0xC7AF},
/* C7B0-C7BF */
- {0xC7B0,0xC7B0,0x30F6},
- {0xC7B1,0xC7CC,0x0414},
- {0xC7B2,0xC7CD,0x0415},
- {0xC7B3,0xC7CE,0x0401},
- {0xC7B4,0xC7CF,0x0416},
- {0xC7B5,0xC7D0,0x0417},
- {0xC7B6,0xC7D1,0x0418},
- {0xC7B7,0xC7D2,0x0419},
- {0xC7B8,0xC7D3,0x041A},
- {0xC7B9,0xC7D4,0x041B},
- {0xC7BA,0xC7D5,0x041C},
- {0xC7BB,0xC7DC,0x0423},
- {0xC7BC,0xC7DD,0x0424},
- {0xC7BD,0xC7DE,0x0425},
- {0xC7BE,0xC7DF,0x0426},
- {0xC7BF,0xC7E0,0x0427},
+ {0xC7B0,0xC7B0},
+ {0xC7B1,0xC7CC},
+ {0xC7B2,0xC7CD},
+ {0xC7B3,0xC7CE},
+ {0xC7B4,0xC7CF},
+ {0xC7B5,0xC7D0},
+ {0xC7B6,0xC7D1},
+ {0xC7B7,0xC7D2},
+ {0xC7B8,0xC7D3},
+ {0xC7B9,0xC7D4},
+ {0xC7BA,0xC7D5},
+ {0xC7BB,0xC7DC},
+ {0xC7BC,0xC7DD},
+ {0xC7BD,0xC7DE},
+ {0xC7BE,0xC7DF},
+ {0xC7BF,0xC7E0},
/* C7C0-C7CF */
- {0xC7C0,0xC7E1,0x0428},
- {0xC7C1,0xC7E2,0x0429},
- {0xC7C2,0xC7E3,0x042A},
- {0xC7C3,0xC7E4,0x042B},
- {0xC7C4,0xC7E5,0x042C},
- {0xC7C5,0xC7E6,0x042D},
- {0xC7C6,0xC7E7,0x042E},
- {0xC7C7,0xC7E8,0x042F},
- {0xC7C8,0xC7C8,0x0430},
- {0xC7C9,0xC7C9,0x0431},
- {0xC7CA,0xC7CA,0x0432},
- {0xC7CB,0xC7CB,0x0433},
- {0xC7B1,0xC7CC,0x0434},
- {0xC7B2,0xC7CD,0x0435},
- {0xC7B3,0xC7CE,0x0451},
- {0xC7B4,0xC7CF,0x0436},
+ {0xC7C0,0xC7E1},
+ {0xC7C1,0xC7E2},
+ {0xC7C2,0xC7E3},
+ {0xC7C3,0xC7E4},
+ {0xC7C4,0xC7E5},
+ {0xC7C5,0xC7E6},
+ {0xC7C6,0xC7E7},
+ {0xC7C7,0xC7E8},
+ {0xC7C8,0xC7C8},
+ {0xC7C9,0xC7C9},
+ {0xC7CA,0xC7CA},
+ {0xC7CB,0xC7CB},
+ {0xC7B1,0xC7CC},
+ {0xC7B2,0xC7CD},
+ {0xC7B3,0xC7CE},
+ {0xC7B4,0xC7CF},
/* C7D0-C7DF */
- {0xC7B5,0xC7D0,0x0437},
- {0xC7B6,0xC7D1,0x0438},
- {0xC7B7,0xC7D2,0x0439},
- {0xC7B8,0xC7D3,0x043A},
- {0xC7B9,0xC7D4,0x043B},
- {0xC7BA,0xC7D5,0x043C},
- {0xC7D6,0xC7D6,0x043D},
- {0xC7D7,0xC7D7,0x043E},
- {0xC7D8,0xC7D8,0x043F},
- {0xC7D9,0xC7D9,0x0440},
- {0xC7DA,0xC7DA,0x0441},
- {0xC7DB,0xC7DB,0x0442},
- {0xC7BB,0xC7DC,0x0443},
- {0xC7BC,0xC7DD,0x0444},
- {0xC7BD,0xC7DE,0x0445},
- {0xC7BE,0xC7DF,0x0446},
+ {0xC7B5,0xC7D0},
+ {0xC7B6,0xC7D1},
+ {0xC7B7,0xC7D2},
+ {0xC7B8,0xC7D3},
+ {0xC7B9,0xC7D4},
+ {0xC7BA,0xC7D5},
+ {0xC7D6,0xC7D6},
+ {0xC7D7,0xC7D7},
+ {0xC7D8,0xC7D8},
+ {0xC7D9,0xC7D9},
+ {0xC7DA,0xC7DA},
+ {0xC7DB,0xC7DB},
+ {0xC7BB,0xC7DC},
+ {0xC7BC,0xC7DD},
+ {0xC7BD,0xC7DE},
+ {0xC7BE,0xC7DF},
/* C7E0-C7EF */
- {0xC7BF,0xC7E0,0x0447},
- {0xC7C0,0xC7E1,0x0448},
- {0xC7C1,0xC7E2,0x0449},
- {0xC7C2,0xC7E3,0x044A},
- {0xC7C3,0xC7E4,0x044B},
- {0xC7C4,0xC7E5,0x044C},
- {0xC7C5,0xC7E6,0x044D},
- {0xC7C6,0xC7E7,0x044E},
- {0xC7C7,0xC7E8,0x044F},
- {0xC7E9,0xC7E9,0x2460},
- {0xC7EA,0xC7EA,0x2461},
- {0xC7EB,0xC7EB,0x2462},
- {0xC7EC,0xC7EC,0x2463},
- {0xC7ED,0xC7ED,0x2464},
- {0xC7EE,0xC7EE,0x2465},
- {0xC7EF,0xC7EF,0x2466},
+ {0xC7BF,0xC7E0},
+ {0xC7C0,0xC7E1},
+ {0xC7C1,0xC7E2},
+ {0xC7C2,0xC7E3},
+ {0xC7C3,0xC7E4},
+ {0xC7C4,0xC7E5},
+ {0xC7C5,0xC7E6},
+ {0xC7C6,0xC7E7},
+ {0xC7C7,0xC7E8},
+ {0xC7E9,0xC7E9},
+ {0xC7EA,0xC7EA},
+ {0xC7EB,0xC7EB},
+ {0xC7EC,0xC7EC},
+ {0xC7ED,0xC7ED},
+ {0xC7EE,0xC7EE},
+ {0xC7EF,0xC7EF},
/* C7F0-C7FF */
- {0xC7F0,0xC7F0,0x2467},
- {0xC7F1,0xC7F1,0x2468},
- {0xC7F2,0xC7F2,0x2469},
- {0xC7F3,0xC7F3,0x2474},
- {0xC7F4,0xC7F4,0x2475},
- {0xC7F5,0xC7F5,0x2476},
- {0xC7F6,0xC7F6,0x2477},
- {0xC7F7,0xC7F7,0x2478},
- {0xC7F8,0xC7F8,0x2479},
- {0xC7F9,0xC7F9,0x247A},
- {0xC7FA,0xC7FA,0x247B},
- {0xC7FB,0xC7FB,0x247C},
- {0xC7FC,0xC7FC,0x247D},
- {0xC7FD,0xC7FD,0x003F},
- {0xC7FE,0xC7FE,0x003F},
- {0x0000,0x0000,0x0000}
+ {0xC7F0,0xC7F0},
+ {0xC7F1,0xC7F1},
+ {0xC7F2,0xC7F2},
+ {0xC7F3,0xC7F3},
+ {0xC7F4,0xC7F4},
+ {0xC7F5,0xC7F5},
+ {0xC7F6,0xC7F6},
+ {0xC7F7,0xC7F7},
+ {0xC7F8,0xC7F8},
+ {0xC7F9,0xC7F9},
+ {0xC7FA,0xC7FA},
+ {0xC7FB,0xC7FB},
+ {0xC7FC,0xC7FC},
+ {0xC7FD,0xC7FD},
+ {0xC7FE,0xC7FE},
+ {0x0000,0x0000}
};
-static MY_UNICASE_CHARACTER *my_caseinfo_pages_big5[256]=
+static const MY_CASEFOLD_CHARACTER *my_casefold_pages_big5[256]=
{
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 0 */
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
@@ -803,10 +803,11 @@ static MY_UNICASE_CHARACTER *my_caseinfo_pages_big5[256]=
};
-static MY_UNICASE_INFO my_caseinfo_big5=
+static MY_CASEFOLD_INFO my_casefold_big5=
{
0xFFFF,
- my_caseinfo_pages_big5
+ my_casefold_pages_big5,
+ NULL /* ws */
};
@@ -6727,7 +6728,9 @@ static MY_COLLATION_HANDLER my_collation_handler_big5_chinese_ci=
my_hash_sort_simple,
my_propagate_simple,
my_min_str_mb_simple,
- my_max_str_mb_simple
+ my_max_str_mb_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
@@ -6746,7 +6749,9 @@ static MY_COLLATION_HANDLER my_collation_handler_big5_bin=
my_hash_sort_mb_bin,
my_propagate_simple,
my_min_str_mb_simple,
- my_max_str_mb_simple
+ my_max_str_mb_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
@@ -6765,7 +6770,9 @@ static MY_COLLATION_HANDLER my_collation_handler_big5_chinese_nopad_ci=
my_hash_sort_simple_nopad,
my_propagate_simple,
my_min_str_mb_simple_nopad,
- my_max_str_mb_simple
+ my_max_str_mb_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
@@ -6784,7 +6791,9 @@ static MY_COLLATION_HANDLER my_collation_handler_big5_nopad_bin=
my_hash_sort_mb_nopad_bin,
my_propagate_simple,
my_min_str_mb_simple_nopad,
- my_max_str_mb_simple
+ my_max_str_mb_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
@@ -6818,7 +6827,9 @@ static MY_CHARSET_HANDLER my_charset_big5_handler=
my_well_formed_char_length_big5,
my_copy_fix_mb,
my_native_to_mb_big5,
- my_wc_to_printable_generic
+ my_wc_to_printable_generic,
+ my_casefold_multiply_1,
+ my_casefold_multiply_1
};
struct charset_info_st my_charset_big5_chinese_ci=
@@ -6836,19 +6847,17 @@ struct charset_info_st my_charset_big5_chinese_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_caseinfo_big5, /* caseinfo */
+ &my_casefold_big5, /* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
2, /* mbmaxlen */
0, /* min_sort_char */
0xF9D5, /* max_sort_char */
' ', /* pad char */
1, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_big5_handler,
&my_collation_handler_big5_chinese_ci
};
@@ -6869,19 +6878,17 @@ struct charset_info_st my_charset_big5_bin=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_caseinfo_big5, /* caseinfo */
+ &my_casefold_big5, /* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
2, /* mbmaxlen */
0, /* min_sort_char */
0xF9FE, /* max_sort_char */
' ', /* pad char */
1, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_big5_handler,
&my_collation_handler_big5_bin
};
@@ -6902,19 +6909,17 @@ struct charset_info_st my_charset_big5_chinese_nopad_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_caseinfo_big5, /* caseinfo */
+ &my_casefold_big5, /* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
2, /* mbmaxlen */
0, /* min_sort_char */
0xF9D5, /* max_sort_char */
' ', /* pad char */
1, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_big5_handler,
&my_collation_handler_big5_chinese_nopad_ci
};
@@ -6935,19 +6940,17 @@ struct charset_info_st my_charset_big5_nopad_bin=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_caseinfo_big5, /* caseinfo */
+ &my_casefold_big5, /* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
2, /* mbmaxlen */
0, /* min_sort_char */
0xF9FE, /* max_sort_char */
' ', /* pad char */
1, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_big5_handler,
&my_collation_handler_big5_nopad_bin
};
diff --git a/strings/ctype-bin.c b/strings/ctype-bin.c
index fcccc896bbf..f11fe611482 100644
--- a/strings/ctype-bin.c
+++ b/strings/ctype-bin.c
@@ -525,7 +525,9 @@ MY_COLLATION_HANDLER my_collation_8bit_bin_handler =
my_hash_sort_8bit_bin,
my_propagate_simple,
my_min_str_8bit_simple,
- my_max_str_8bit_simple
+ my_max_str_8bit_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
@@ -544,7 +546,9 @@ MY_COLLATION_HANDLER my_collation_8bit_nopad_bin_handler =
my_hash_sort_bin,
my_propagate_simple,
my_min_str_8bit_simple_nopad,
- my_max_str_8bit_simple
+ my_max_str_8bit_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
@@ -563,7 +567,9 @@ static MY_COLLATION_HANDLER my_collation_binary_handler =
my_hash_sort_bin,
my_propagate_simple,
my_min_str_8bit_simple_nopad,
- my_max_str_8bit_simple
+ my_max_str_8bit_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
@@ -597,7 +603,9 @@ static MY_CHARSET_HANDLER my_charset_handler=
my_well_formed_char_length_8bit,
my_copy_8bit,
my_wc_mb_bin,
- my_wc_to_printable_generic
+ my_wc_to_printable_generic,
+ my_casefold_multiply_1,
+ my_casefold_multiply_1
};
@@ -616,19 +624,17 @@ struct charset_info_st my_charset_bin =
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
0, /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_handler,
&my_collation_binary_handler
};
diff --git a/strings/ctype-cp932.c b/strings/ctype-cp932.c
index af3de05509d..f01909d4f65 100644
--- a/strings/ctype-cp932.c
+++ b/strings/ctype-cp932.c
@@ -197,1476 +197,1476 @@ static const uchar sort_order_cp932[]=
#define cp932code(c,d) ((((uint) (uchar)(c)) << 8) | (uint) (uchar) (d))
-static MY_UNICASE_CHARACTER c81[256]=
+static const MY_CASEFOLD_CHARACTER c81[256]=
{
/* 8100-810F */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
/* 8110-811F */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
/* 8120-812F */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
/* 8130-813F */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
- {0x8140,0x8140,0x3000}, /* 8140-814F */
- {0x8141,0x8141,0x3001},
- {0x8142,0x8142,0x3002},
- {0x8143,0x8143,0xFF0C},
- {0x8144,0x8144,0xFF0E},
- {0x8145,0x8145,0x30FB},
- {0x8146,0x8146,0xFF1A},
- {0x8147,0x8147,0xFF1B},
- {0x8148,0x8148,0xFF1F},
- {0x8149,0x8149,0xFF01},
- {0x814A,0x814A,0x309B},
- {0x814B,0x814B,0x309C},
- {0x814C,0x814C,0x00B4},
- {0x814D,0x814D,0xFF40},
- {0x814E,0x814E,0x00A8},
- {0x814F,0x814F,0xFF3E},
- {0x8150,0x8150,0xFFE3}, /* 8150-815F */
- {0x8151,0x8151,0xFF3F},
- {0x8152,0x8152,0x30FD},
- {0x8153,0x8153,0x30FE},
- {0x8154,0x8154,0x309D},
- {0x8155,0x8155,0x309E},
- {0x8156,0x8156,0x3003},
- {0x8157,0x8157,0x4EDD},
- {0x8158,0x8158,0x3005},
- {0x8159,0x8159,0x3006},
- {0x815A,0x815A,0x3007},
- {0x815B,0x815B,0x30FC},
- {0x815C,0x815C,0x2015},
- {0x815D,0x815D,0x2010},
- {0x815E,0x815E,0xFF0F},
- {0x815F,0x815F,0xFF3C},
- {0x8160,0x8160,0xFF5E}, /* 8160-816F */
- {0x8161,0x8161,0x2225},
- {0x8162,0x8162,0xFF5C},
- {0x8163,0x8163,0x2026},
- {0x8164,0x8164,0x2025},
- {0x8165,0x8165,0x2018},
- {0x8166,0x8166,0x2019},
- {0x8167,0x8167,0x201C},
- {0x8168,0x8168,0x201D},
- {0x8169,0x8169,0xFF08},
- {0x816A,0x816A,0xFF09},
- {0x816B,0x816B,0x3014},
- {0x816C,0x816C,0x3015},
- {0x816D,0x816D,0xFF3B},
- {0x816E,0x816E,0xFF3D},
- {0x816F,0x816F,0xFF5B},
- {0x8170,0x8170,0xFF5D}, /* 8170-817F */
- {0x8171,0x8171,0x3008},
- {0x8172,0x8172,0x3009},
- {0x8173,0x8173,0x300A},
- {0x8174,0x8174,0x300B},
- {0x8175,0x8175,0x300C},
- {0x8176,0x8176,0x300D},
- {0x8177,0x8177,0x300E},
- {0x8178,0x8178,0x300F},
- {0x8179,0x8179,0x3010},
- {0x817A,0x817A,0x3011},
- {0x817B,0x817B,0xFF0B},
- {0x817C,0x817C,0xFF0D},
- {0x817D,0x817D,0x00B1},
- {0x817E,0x817E,0x00D7},
- {0,0,0},
- {0x8180,0x8180,0x00F7}, /* 8180-818F */
- {0x8181,0x8181,0xFF1D},
- {0x8182,0x8182,0x2260},
- {0x8183,0x8183,0xFF1C},
- {0x8184,0x8184,0xFF1E},
- {0x8185,0x8185,0x2266},
- {0x8186,0x8186,0x2267},
- {0x8187,0x8187,0x221E},
- {0x8188,0x8188,0x2234},
- {0x8189,0x8189,0x2642},
- {0x818A,0x818A,0x2640},
- {0x818B,0x818B,0x00B0},
- {0x818C,0x818C,0x2032},
- {0x818D,0x818D,0x2033},
- {0x818E,0x818E,0x2103},
- {0x818F,0x818F,0xFFE5},
- {0x8190,0x8190,0xFF04}, /* 8190-819F*/
- {0x8191,0x8191,0xFFE0},
- {0x8192,0x8192,0xFFE1},
- {0x8193,0x8193,0xFF05},
- {0x8194,0x8194,0xFF03},
- {0x8195,0x8195,0xFF06},
- {0x8196,0x8196,0xFF0A},
- {0x8197,0x8197,0xFF20},
- {0x8198,0x8198,0x00A7},
- {0x8199,0x8199,0x2606},
- {0x819A,0x819A,0x2605},
- {0x819B,0x819B,0x25CB},
- {0x819C,0x819C,0x25CF},
- {0x819D,0x819D,0x25CE},
- {0x819E,0x819E,0x25C7},
- {0x819F,0x819F,0x25C6},
- {0x81A0,0x81A0,0x25A1}, /* 81A0-81AF */
- {0x81A1,0x81A1,0x25A0},
- {0x81A2,0x81A2,0x25B3},
- {0x81A3,0x81A3,0x25B2},
- {0x81A4,0x81A4,0x25BD},
- {0x81A5,0x81A5,0x25BC},
- {0x81A6,0x81A6,0x203B},
- {0x81A7,0x81A7,0x3012},
- {0x81A8,0x81A8,0x2192},
- {0x81A9,0x81A9,0x2190},
- {0x81AA,0x81AA,0x2191},
- {0x81AB,0x81AB,0x2193},
- {0x81AC,0x81AC,0x3013},
- {0x81AD,0x81AD,0x003F},
- {0x81AE,0x81AE,0x003F},
- {0x81AF,0x81AF,0x003F},
- {0x81B0,0x81B0,0x003F}, /* 81B0-81BF */
- {0x81B1,0x81B1,0x003F},
- {0x81B2,0x81B2,0x003F},
- {0x81B3,0x81B3,0x003F},
- {0x81B4,0x81B4,0x003F},
- {0x81B5,0x81B5,0x003F},
- {0x81B6,0x81B6,0x003F},
- {0x81B7,0x81B7,0x003F},
- {0x81B8,0x81B8,0x2208},
- {0x81B9,0x81B9,0x220B},
- {0x81BA,0x81BA,0x2286},
- {0x81BB,0x81BB,0x2287},
- {0x81BC,0x81BC,0x2282},
- {0x81BD,0x81BD,0x2283},
- {0x81BE,0x81BE,0x222A},
- {0x81BF,0x81BF,0x2229},
- {0x81C0,0x81C0,0x003F}, /* 81C0-81CF */
- {0x81C1,0x81C1,0x003F},
- {0x81C2,0x81C2,0x003F},
- {0x81C3,0x81C3,0x003F},
- {0x81C4,0x81C4,0x003F},
- {0x81C5,0x81C5,0x003F},
- {0x81C6,0x81C6,0x003F},
- {0x81C7,0x81C7,0x003F},
- {0x81C8,0x81C8,0x2227},
- {0x81C9,0x81C9,0x2228},
- {0x81CA,0x81CA,0xFFE2},
- {0x81CB,0x81CB,0x21D2},
- {0x81CC,0x81CC,0x21D4},
- {0x81CD,0x81CD,0x2200},
- {0x81CE,0x81CE,0x2203},
- {0x81CF,0x81CF,0x003F},
- {0x81D0,0x81D0,0x003F}, /* 81D0-81DF */
- {0x81D1,0x81D1,0x003F},
- {0x81D2,0x81D2,0x003F},
- {0x81D3,0x81D3,0x003F},
- {0x81D4,0x81D4,0x003F},
- {0x81D5,0x81D5,0x003F},
- {0x81D6,0x81D6,0x003F},
- {0x81D7,0x81D7,0x003F},
- {0x81D8,0x81D8,0x003F},
- {0x81D9,0x81D9,0x003F},
- {0x81DA,0x81DA,0x2220},
- {0x81DB,0x81DB,0x22A5},
- {0x81DC,0x81DC,0x2312},
- {0x81DD,0x81DD,0x2202},
- {0x81DE,0x81DE,0x2207},
- {0x81DF,0x81DF,0x2261},
- {0x81E0,0x81E0,0x2252}, /* 81E0-81EF */
- {0x81E1,0x81E1,0x226A},
- {0x81E2,0x81E2,0x226B},
- {0x81E3,0x81E3,0x221A},
- {0x81E4,0x81E4,0x223D},
- {0x81E5,0x81E5,0x221D},
- {0x81E6,0x81E6,0x2235},
- {0x81E7,0x81E7,0x222B},
- {0x81E8,0x81E8,0x222C},
- {0x81E9,0x81E9,0x003F},
- {0x81EA,0x81EA,0x003F},
- {0x81EB,0x81EB,0x003F},
- {0x81EC,0x81EC,0x003F},
- {0x81ED,0x81ED,0x003F},
- {0x81EE,0x81EE,0x003F},
- {0x81EF,0x81EF,0x003F},
- {0x81F0,0x81F0,0x212B}, /* 81F0-81FF */
- {0x81F1,0x81F1,0x2030},
- {0x81F2,0x81F2,0x266F},
- {0x81F3,0x81F3,0x266D},
- {0x81F4,0x81F4,0x266A},
- {0x81F5,0x81F5,0x2020},
- {0x81F6,0x81F6,0x2021},
- {0x81F7,0x81F7,0x00B6},
- {0x81F8,0x81F8,0x003F},
- {0x81F9,0x81F9,0x003F},
- {0x81FA,0x81FA,0x003F},
- {0x81FB,0x81FB,0x003F},
- {0x81FC,0x81FC,0x25EF},
- {0,0,0},
- {0,0,0},
- {0,0,0},
+ {0x8140,0x8140}, /* 8140-814F */
+ {0x8141,0x8141},
+ {0x8142,0x8142},
+ {0x8143,0x8143},
+ {0x8144,0x8144},
+ {0x8145,0x8145},
+ {0x8146,0x8146},
+ {0x8147,0x8147},
+ {0x8148,0x8148},
+ {0x8149,0x8149},
+ {0x814A,0x814A},
+ {0x814B,0x814B},
+ {0x814C,0x814C},
+ {0x814D,0x814D},
+ {0x814E,0x814E},
+ {0x814F,0x814F},
+ {0x8150,0x8150}, /* 8150-815F */
+ {0x8151,0x8151},
+ {0x8152,0x8152},
+ {0x8153,0x8153},
+ {0x8154,0x8154},
+ {0x8155,0x8155},
+ {0x8156,0x8156},
+ {0x8157,0x8157},
+ {0x8158,0x8158},
+ {0x8159,0x8159},
+ {0x815A,0x815A},
+ {0x815B,0x815B},
+ {0x815C,0x815C},
+ {0x815D,0x815D},
+ {0x815E,0x815E},
+ {0x815F,0x815F},
+ {0x8160,0x8160}, /* 8160-816F */
+ {0x8161,0x8161},
+ {0x8162,0x8162},
+ {0x8163,0x8163},
+ {0x8164,0x8164},
+ {0x8165,0x8165},
+ {0x8166,0x8166},
+ {0x8167,0x8167},
+ {0x8168,0x8168},
+ {0x8169,0x8169},
+ {0x816A,0x816A},
+ {0x816B,0x816B},
+ {0x816C,0x816C},
+ {0x816D,0x816D},
+ {0x816E,0x816E},
+ {0x816F,0x816F},
+ {0x8170,0x8170}, /* 8170-817F */
+ {0x8171,0x8171},
+ {0x8172,0x8172},
+ {0x8173,0x8173},
+ {0x8174,0x8174},
+ {0x8175,0x8175},
+ {0x8176,0x8176},
+ {0x8177,0x8177},
+ {0x8178,0x8178},
+ {0x8179,0x8179},
+ {0x817A,0x817A},
+ {0x817B,0x817B},
+ {0x817C,0x817C},
+ {0x817D,0x817D},
+ {0x817E,0x817E},
+ {0,0},
+ {0x8180,0x8180}, /* 8180-818F */
+ {0x8181,0x8181},
+ {0x8182,0x8182},
+ {0x8183,0x8183},
+ {0x8184,0x8184},
+ {0x8185,0x8185},
+ {0x8186,0x8186},
+ {0x8187,0x8187},
+ {0x8188,0x8188},
+ {0x8189,0x8189},
+ {0x818A,0x818A},
+ {0x818B,0x818B},
+ {0x818C,0x818C},
+ {0x818D,0x818D},
+ {0x818E,0x818E},
+ {0x818F,0x818F},
+ {0x8190,0x8190}, /* 8190-819F*/
+ {0x8191,0x8191},
+ {0x8192,0x8192},
+ {0x8193,0x8193},
+ {0x8194,0x8194},
+ {0x8195,0x8195},
+ {0x8196,0x8196},
+ {0x8197,0x8197},
+ {0x8198,0x8198},
+ {0x8199,0x8199},
+ {0x819A,0x819A},
+ {0x819B,0x819B},
+ {0x819C,0x819C},
+ {0x819D,0x819D},
+ {0x819E,0x819E},
+ {0x819F,0x819F},
+ {0x81A0,0x81A0}, /* 81A0-81AF */
+ {0x81A1,0x81A1},
+ {0x81A2,0x81A2},
+ {0x81A3,0x81A3},
+ {0x81A4,0x81A4},
+ {0x81A5,0x81A5},
+ {0x81A6,0x81A6},
+ {0x81A7,0x81A7},
+ {0x81A8,0x81A8},
+ {0x81A9,0x81A9},
+ {0x81AA,0x81AA},
+ {0x81AB,0x81AB},
+ {0x81AC,0x81AC},
+ {0x81AD,0x81AD},
+ {0x81AE,0x81AE},
+ {0x81AF,0x81AF},
+ {0x81B0,0x81B0}, /* 81B0-81BF */
+ {0x81B1,0x81B1},
+ {0x81B2,0x81B2},
+ {0x81B3,0x81B3},
+ {0x81B4,0x81B4},
+ {0x81B5,0x81B5},
+ {0x81B6,0x81B6},
+ {0x81B7,0x81B7},
+ {0x81B8,0x81B8},
+ {0x81B9,0x81B9},
+ {0x81BA,0x81BA},
+ {0x81BB,0x81BB},
+ {0x81BC,0x81BC},
+ {0x81BD,0x81BD},
+ {0x81BE,0x81BE},
+ {0x81BF,0x81BF},
+ {0x81C0,0x81C0}, /* 81C0-81CF */
+ {0x81C1,0x81C1},
+ {0x81C2,0x81C2},
+ {0x81C3,0x81C3},
+ {0x81C4,0x81C4},
+ {0x81C5,0x81C5},
+ {0x81C6,0x81C6},
+ {0x81C7,0x81C7},
+ {0x81C8,0x81C8},
+ {0x81C9,0x81C9},
+ {0x81CA,0x81CA},
+ {0x81CB,0x81CB},
+ {0x81CC,0x81CC},
+ {0x81CD,0x81CD},
+ {0x81CE,0x81CE},
+ {0x81CF,0x81CF},
+ {0x81D0,0x81D0}, /* 81D0-81DF */
+ {0x81D1,0x81D1},
+ {0x81D2,0x81D2},
+ {0x81D3,0x81D3},
+ {0x81D4,0x81D4},
+ {0x81D5,0x81D5},
+ {0x81D6,0x81D6},
+ {0x81D7,0x81D7},
+ {0x81D8,0x81D8},
+ {0x81D9,0x81D9},
+ {0x81DA,0x81DA},
+ {0x81DB,0x81DB},
+ {0x81DC,0x81DC},
+ {0x81DD,0x81DD},
+ {0x81DE,0x81DE},
+ {0x81DF,0x81DF},
+ {0x81E0,0x81E0}, /* 81E0-81EF */
+ {0x81E1,0x81E1},
+ {0x81E2,0x81E2},
+ {0x81E3,0x81E3},
+ {0x81E4,0x81E4},
+ {0x81E5,0x81E5},
+ {0x81E6,0x81E6},
+ {0x81E7,0x81E7},
+ {0x81E8,0x81E8},
+ {0x81E9,0x81E9},
+ {0x81EA,0x81EA},
+ {0x81EB,0x81EB},
+ {0x81EC,0x81EC},
+ {0x81ED,0x81ED},
+ {0x81EE,0x81EE},
+ {0x81EF,0x81EF},
+ {0x81F0,0x81F0}, /* 81F0-81FF */
+ {0x81F1,0x81F1},
+ {0x81F2,0x81F2},
+ {0x81F3,0x81F3},
+ {0x81F4,0x81F4},
+ {0x81F5,0x81F5},
+ {0x81F6,0x81F6},
+ {0x81F7,0x81F7},
+ {0x81F8,0x81F8},
+ {0x81F9,0x81F9},
+ {0x81FA,0x81FA},
+ {0x81FB,0x81FB},
+ {0x81FC,0x81FC},
+ {0,0},
+ {0,0},
+ {0,0},
};
-static MY_UNICASE_CHARACTER c82[256]=
+static const MY_CASEFOLD_CHARACTER c82[256]=
{
/* 8200-820F */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
/* 8210-821F */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
/* 8220-822F */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
/* 8230-823F */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
- {0x8240,0x8240,0x003F}, /* 8240-824F */
- {0x8241,0x8241,0x003F},
- {0x8242,0x8242,0x003F},
- {0x8243,0x8243,0x003F},
- {0x8244,0x8244,0x003F},
- {0x8245,0x8245,0x003F},
- {0x8246,0x8246,0x003F},
- {0x8247,0x8247,0x003F},
- {0x8248,0x8248,0x003F},
- {0x8249,0x8249,0x003F},
- {0x824A,0x824A,0x003F},
- {0x824B,0x824B,0x003F},
- {0x824C,0x824C,0x003F},
- {0x824D,0x824D,0x003F},
- {0x824E,0x824E,0x003F},
- {0x824F,0x824F,0xFF10},
- {0x8250,0x8250,0xFF11}, /* 8250-825F */
- {0x8251,0x8251,0xFF12},
- {0x8252,0x8252,0xFF13},
- {0x8253,0x8253,0xFF14},
- {0x8254,0x8254,0xFF15},
- {0x8255,0x8255,0xFF16},
- {0x8256,0x8256,0xFF17},
- {0x8257,0x8257,0xFF18},
- {0x8258,0x8258,0xFF19},
- {0x8259,0x8259,0x003F},
- {0x825A,0x825A,0x003F},
- {0x825B,0x825B,0x003F},
- {0x825C,0x825C,0x003F},
- {0x825D,0x825D,0x003F},
- {0x825E,0x825E,0x003F},
- {0x825F,0x825F,0x003F},
- {0x8260,0x8281,0xFF21}, /* 8260-826F */
- {0x8261,0x8282,0xFF22},
- {0x8262,0x8283,0xFF23},
- {0x8263,0x8284,0xFF24},
- {0x8264,0x8285,0xFF25},
- {0x8265,0x8286,0xFF26},
- {0x8266,0x8287,0xFF27},
- {0x8267,0x8288,0xFF28},
- {0x8268,0x8289,0xFF29},
- {0x8269,0x828A,0xFF2A},
- {0x826A,0x828B,0xFF2B},
- {0x826B,0x828C,0xFF2C},
- {0x826C,0x828D,0xFF2D},
- {0x826D,0x828E,0xFF2E},
- {0x826E,0x828F,0xFF2F},
- {0x826F,0x8290,0xFF30},
- {0x8270,0x8291,0xFF31}, /* 8270-827F */
- {0x8271,0x8292,0xFF32},
- {0x8272,0x8293,0xFF33},
- {0x8273,0x8294,0xFF34},
- {0x8274,0x8295,0xFF35},
- {0x8275,0x8296,0xFF36},
- {0x8276,0x8297,0xFF37},
- {0x8277,0x8298,0xFF38},
- {0x8278,0x8299,0xFF39},
- {0x8279,0x829A,0xFF3A},
- {0x827A,0x827A,0x003F},
- {0x827B,0x827B,0x003F},
- {0x827C,0x827C,0x003F},
- {0x827D,0x827D,0x003F},
- {0x827E,0x827E,0x003F},
- {0,0,0},
- {0x8280,0x8280,0x003F}, /* 8280-828F */
- {0x8260,0x8281,0xFF41},
- {0x8261,0x8282,0xFF42},
- {0x8262,0x8283,0xFF43},
- {0x8263,0x8284,0xFF44},
- {0x8264,0x8285,0xFF45},
- {0x8265,0x8286,0xFF46},
- {0x8266,0x8287,0xFF47},
- {0x8267,0x8288,0xFF48},
- {0x8268,0x8289,0xFF49},
- {0x8269,0x828A,0xFF4A},
- {0x826A,0x828B,0xFF4B},
- {0x826B,0x828C,0xFF4C},
- {0x826C,0x828D,0xFF4D},
- {0x826D,0x828E,0xFF4E},
- {0x826E,0x828F,0xFF4F},
- {0x826F,0x8290,0xFF50}, /* 8290-829F */
- {0x8270,0x8291,0xFF51},
- {0x8271,0x8292,0xFF52},
- {0x8272,0x8293,0xFF53},
- {0x8273,0x8294,0xFF54},
- {0x8274,0x8295,0xFF55},
- {0x8275,0x8296,0xFF56},
- {0x8276,0x8297,0xFF57},
- {0x8277,0x8298,0xFF58},
- {0x8278,0x8299,0xFF59},
- {0x8279,0x829A,0xFF5A},
- {0x829B,0x829B,0x003F},
- {0x829C,0x829C,0x003F},
- {0x829D,0x829D,0x003F},
- {0x829E,0x829E,0x003F},
- {0x829F,0x829F,0x3041},
- {0x82A0,0x82A0,0x3042}, /* 82A0-82AF */
- {0x82A1,0x82A1,0x3043},
- {0x82A2,0x82A2,0x3044},
- {0x82A3,0x82A3,0x3045},
- {0x82A4,0x82A4,0x3046},
- {0x82A5,0x82A5,0x3047},
- {0x82A6,0x82A6,0x3048},
- {0x82A7,0x82A7,0x3049},
- {0x82A8,0x82A8,0x304A},
- {0x82A9,0x82A9,0x304B},
- {0x82AA,0x82AA,0x304C},
- {0x82AB,0x82AB,0x304D},
- {0x82AC,0x82AC,0x304E},
- {0x82AD,0x82AD,0x304F},
- {0x82AE,0x82AE,0x3050},
- {0x82AF,0x82AF,0x3051},
- {0x82B0,0x82B0,0x3052}, /* 82B0-82BF */
- {0x82B1,0x82B1,0x3053},
- {0x82B2,0x82B2,0x3054},
- {0x82B3,0x82B3,0x3055},
- {0x82B4,0x82B4,0x3056},
- {0x82B5,0x82B5,0x3057},
- {0x82B6,0x82B6,0x3058},
- {0x82B7,0x82B7,0x3059},
- {0x82B8,0x82B8,0x305A},
- {0x82B9,0x82B9,0x305B},
- {0x82BA,0x82BA,0x305C},
- {0x82BB,0x82BB,0x305D},
- {0x82BC,0x82BC,0x305E},
- {0x82BD,0x82BD,0x305F},
- {0x82BE,0x82BE,0x3060},
- {0x82BF,0x82BF,0x3061},
- {0x82C0,0x82C0,0x3062}, /* 82C0-82CF */
- {0x82C1,0x82C1,0x3063},
- {0x82C2,0x82C2,0x3064},
- {0x82C3,0x82C3,0x3065},
- {0x82C4,0x82C4,0x3066},
- {0x82C5,0x82C5,0x3067},
- {0x82C6,0x82C6,0x3068},
- {0x82C7,0x82C7,0x3069},
- {0x82C8,0x82C8,0x306A},
- {0x82C9,0x82C9,0x306B},
- {0x82CA,0x82CA,0x306C},
- {0x82CB,0x82CB,0x306D},
- {0x82CC,0x82CC,0x306E},
- {0x82CD,0x82CD,0x306F},
- {0x82CE,0x82CE,0x3070},
- {0x82CF,0x82CF,0x3071},
- {0x82D0,0x82D0,0x3072}, /* 82D0-82DF */
- {0x82D1,0x82D1,0x3073},
- {0x82D2,0x82D2,0x3074},
- {0x82D3,0x82D3,0x3075},
- {0x82D4,0x82D4,0x3076},
- {0x82D5,0x82D5,0x3077},
- {0x82D6,0x82D6,0x3078},
- {0x82D7,0x82D7,0x3079},
- {0x82D8,0x82D8,0x307A},
- {0x82D9,0x82D9,0x307B},
- {0x82DA,0x82DA,0x307C},
- {0x82DB,0x82DB,0x307D},
- {0x82DC,0x82DC,0x307E},
- {0x82DD,0x82DD,0x307F},
- {0x82DE,0x82DE,0x3080},
- {0x82DF,0x82DF,0x3081},
- {0x82E0,0x82E0,0x3082}, /* 82E0-82EF */
- {0x82E1,0x82E1,0x3083},
- {0x82E2,0x82E2,0x3084},
- {0x82E3,0x82E3,0x3085},
- {0x82E4,0x82E4,0x3086},
- {0x82E5,0x82E5,0x3087},
- {0x82E6,0x82E6,0x3088},
- {0x82E7,0x82E7,0x3089},
- {0x82E8,0x82E8,0x308A},
- {0x82E9,0x82E9,0x308B},
- {0x82EA,0x82EA,0x308C},
- {0x82EB,0x82EB,0x308D},
- {0x82EC,0x82EC,0x308E},
- {0x82ED,0x82ED,0x308F},
- {0x82EE,0x82EE,0x3090},
- {0x82EF,0x82EF,0x3091},
- {0x82F0,0x82F0,0x3092}, /* 82F0-82FF */
- {0x82F1,0x82F1,0x3093},
- {0x82F2,0x82F2,0x003F},
- {0x82F3,0x82F3,0x003F},
- {0x82F4,0x82F4,0x003F},
- {0x82F5,0x82F5,0x003F},
- {0x82F6,0x82F6,0x003F},
- {0x82F7,0x82F7,0x003F},
- {0x82F8,0x82F8,0x003F},
- {0x82F9,0x82F9,0x003F},
- {0x82FA,0x82FA,0x003F},
- {0x82FB,0x82FB,0x003F},
- {0x82FC,0x82FC,0x003F},
- {0,0,0}
+ {0x8240,0x8240}, /* 8240-824F */
+ {0x8241,0x8241},
+ {0x8242,0x8242},
+ {0x8243,0x8243},
+ {0x8244,0x8244},
+ {0x8245,0x8245},
+ {0x8246,0x8246},
+ {0x8247,0x8247},
+ {0x8248,0x8248},
+ {0x8249,0x8249},
+ {0x824A,0x824A},
+ {0x824B,0x824B},
+ {0x824C,0x824C},
+ {0x824D,0x824D},
+ {0x824E,0x824E},
+ {0x824F,0x824F},
+ {0x8250,0x8250}, /* 8250-825F */
+ {0x8251,0x8251},
+ {0x8252,0x8252},
+ {0x8253,0x8253},
+ {0x8254,0x8254},
+ {0x8255,0x8255},
+ {0x8256,0x8256},
+ {0x8257,0x8257},
+ {0x8258,0x8258},
+ {0x8259,0x8259},
+ {0x825A,0x825A},
+ {0x825B,0x825B},
+ {0x825C,0x825C},
+ {0x825D,0x825D},
+ {0x825E,0x825E},
+ {0x825F,0x825F},
+ {0x8260,0x8281}, /* 8260-826F */
+ {0x8261,0x8282},
+ {0x8262,0x8283},
+ {0x8263,0x8284},
+ {0x8264,0x8285},
+ {0x8265,0x8286},
+ {0x8266,0x8287},
+ {0x8267,0x8288},
+ {0x8268,0x8289},
+ {0x8269,0x828A},
+ {0x826A,0x828B},
+ {0x826B,0x828C},
+ {0x826C,0x828D},
+ {0x826D,0x828E},
+ {0x826E,0x828F},
+ {0x826F,0x8290},
+ {0x8270,0x8291}, /* 8270-827F */
+ {0x8271,0x8292},
+ {0x8272,0x8293},
+ {0x8273,0x8294},
+ {0x8274,0x8295},
+ {0x8275,0x8296},
+ {0x8276,0x8297},
+ {0x8277,0x8298},
+ {0x8278,0x8299},
+ {0x8279,0x829A},
+ {0x827A,0x827A},
+ {0x827B,0x827B},
+ {0x827C,0x827C},
+ {0x827D,0x827D},
+ {0x827E,0x827E},
+ {0,0},
+ {0x8280,0x8280}, /* 8280-828F */
+ {0x8260,0x8281},
+ {0x8261,0x8282},
+ {0x8262,0x8283},
+ {0x8263,0x8284},
+ {0x8264,0x8285},
+ {0x8265,0x8286},
+ {0x8266,0x8287},
+ {0x8267,0x8288},
+ {0x8268,0x8289},
+ {0x8269,0x828A},
+ {0x826A,0x828B},
+ {0x826B,0x828C},
+ {0x826C,0x828D},
+ {0x826D,0x828E},
+ {0x826E,0x828F},
+ {0x826F,0x8290}, /* 8290-829F */
+ {0x8270,0x8291},
+ {0x8271,0x8292},
+ {0x8272,0x8293},
+ {0x8273,0x8294},
+ {0x8274,0x8295},
+ {0x8275,0x8296},
+ {0x8276,0x8297},
+ {0x8277,0x8298},
+ {0x8278,0x8299},
+ {0x8279,0x829A},
+ {0x829B,0x829B},
+ {0x829C,0x829C},
+ {0x829D,0x829D},
+ {0x829E,0x829E},
+ {0x829F,0x829F},
+ {0x82A0,0x82A0}, /* 82A0-82AF */
+ {0x82A1,0x82A1},
+ {0x82A2,0x82A2},
+ {0x82A3,0x82A3},
+ {0x82A4,0x82A4},
+ {0x82A5,0x82A5},
+ {0x82A6,0x82A6},
+ {0x82A7,0x82A7},
+ {0x82A8,0x82A8},
+ {0x82A9,0x82A9},
+ {0x82AA,0x82AA},
+ {0x82AB,0x82AB},
+ {0x82AC,0x82AC},
+ {0x82AD,0x82AD},
+ {0x82AE,0x82AE},
+ {0x82AF,0x82AF},
+ {0x82B0,0x82B0}, /* 82B0-82BF */
+ {0x82B1,0x82B1},
+ {0x82B2,0x82B2},
+ {0x82B3,0x82B3},
+ {0x82B4,0x82B4},
+ {0x82B5,0x82B5},
+ {0x82B6,0x82B6},
+ {0x82B7,0x82B7},
+ {0x82B8,0x82B8},
+ {0x82B9,0x82B9},
+ {0x82BA,0x82BA},
+ {0x82BB,0x82BB},
+ {0x82BC,0x82BC},
+ {0x82BD,0x82BD},
+ {0x82BE,0x82BE},
+ {0x82BF,0x82BF},
+ {0x82C0,0x82C0}, /* 82C0-82CF */
+ {0x82C1,0x82C1},
+ {0x82C2,0x82C2},
+ {0x82C3,0x82C3},
+ {0x82C4,0x82C4},
+ {0x82C5,0x82C5},
+ {0x82C6,0x82C6},
+ {0x82C7,0x82C7},
+ {0x82C8,0x82C8},
+ {0x82C9,0x82C9},
+ {0x82CA,0x82CA},
+ {0x82CB,0x82CB},
+ {0x82CC,0x82CC},
+ {0x82CD,0x82CD},
+ {0x82CE,0x82CE},
+ {0x82CF,0x82CF},
+ {0x82D0,0x82D0}, /* 82D0-82DF */
+ {0x82D1,0x82D1},
+ {0x82D2,0x82D2},
+ {0x82D3,0x82D3},
+ {0x82D4,0x82D4},
+ {0x82D5,0x82D5},
+ {0x82D6,0x82D6},
+ {0x82D7,0x82D7},
+ {0x82D8,0x82D8},
+ {0x82D9,0x82D9},
+ {0x82DA,0x82DA},
+ {0x82DB,0x82DB},
+ {0x82DC,0x82DC},
+ {0x82DD,0x82DD},
+ {0x82DE,0x82DE},
+ {0x82DF,0x82DF},
+ {0x82E0,0x82E0}, /* 82E0-82EF */
+ {0x82E1,0x82E1},
+ {0x82E2,0x82E2},
+ {0x82E3,0x82E3},
+ {0x82E4,0x82E4},
+ {0x82E5,0x82E5},
+ {0x82E6,0x82E6},
+ {0x82E7,0x82E7},
+ {0x82E8,0x82E8},
+ {0x82E9,0x82E9},
+ {0x82EA,0x82EA},
+ {0x82EB,0x82EB},
+ {0x82EC,0x82EC},
+ {0x82ED,0x82ED},
+ {0x82EE,0x82EE},
+ {0x82EF,0x82EF},
+ {0x82F0,0x82F0}, /* 82F0-82FF */
+ {0x82F1,0x82F1},
+ {0x82F2,0x82F2},
+ {0x82F3,0x82F3},
+ {0x82F4,0x82F4},
+ {0x82F5,0x82F5},
+ {0x82F6,0x82F6},
+ {0x82F7,0x82F7},
+ {0x82F8,0x82F8},
+ {0x82F9,0x82F9},
+ {0x82FA,0x82FA},
+ {0x82FB,0x82FB},
+ {0x82FC,0x82FC},
+ {0,0}
};
-static MY_UNICASE_CHARACTER c83[256]=
+static const MY_CASEFOLD_CHARACTER c83[256]=
{
/* 8300-830F */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
/* 8310-831F */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
/* 8320-832F */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
/* 8330-833F */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
- {0x8340,0x8340,0x30A1}, /* 8340 */
- {0x8341,0x8341,0x30A2},
- {0x8342,0x8342,0x30A3},
- {0x8343,0x8343,0x30A4},
- {0x8344,0x8344,0x30A5},
- {0x8345,0x8345,0x30A6},
- {0x8346,0x8346,0x30A7},
- {0x8347,0x8347,0x30A8},
- {0x8348,0x8348,0x30A9},
- {0x8349,0x8349,0x30AA},
- {0x834A,0x834A,0x30AB},
- {0x834B,0x834B,0x30AC},
- {0x834C,0x834C,0x30AD},
- {0x834D,0x834D,0x30AE},
- {0x834E,0x834E,0x30AF},
- {0x834F,0x834F,0x30B0},
- {0x8350,0x8350,0x30B1}, /* 8350 */
- {0x8351,0x8351,0x30B2},
- {0x8352,0x8352,0x30B3},
- {0x8353,0x8353,0x30B4},
- {0x8354,0x8354,0x30B5},
- {0x8355,0x8355,0x30B6},
- {0x8356,0x8356,0x30B7},
- {0x8357,0x8357,0x30B8},
- {0x8358,0x8358,0x30B9},
- {0x8359,0x8359,0x30BA},
- {0x835A,0x835A,0x30BB},
- {0x835B,0x835B,0x30BC},
- {0x835C,0x835C,0x30BD},
- {0x835D,0x835D,0x30BE},
- {0x835E,0x835E,0x30BF},
- {0x835F,0x835F,0x30C0},
- {0x8360,0x8360,0x30C1}, /* 8360 */
- {0x8361,0x8361,0x30C2},
- {0x8362,0x8362,0x30C3},
- {0x8363,0x8363,0x30C4},
- {0x8364,0x8364,0x30C5},
- {0x8365,0x8365,0x30C6},
- {0x8366,0x8366,0x30C7},
- {0x8367,0x8367,0x30C8},
- {0x8368,0x8368,0x30C9},
- {0x8369,0x8369,0x30CA},
- {0x836A,0x836A,0x30CB},
- {0x836B,0x836B,0x30CC},
- {0x836C,0x836C,0x30CD},
- {0x836D,0x836D,0x30CE},
- {0x836E,0x836E,0x30CF},
- {0x836F,0x836F,0x30D0},
- {0x8370,0x8370,0x30D1}, /* 8370 */
- {0x8371,0x8371,0x30D2},
- {0x8372,0x8372,0x30D3},
- {0x8373,0x8373,0x30D4},
- {0x8374,0x8374,0x30D5},
- {0x8375,0x8375,0x30D6},
- {0x8376,0x8376,0x30D7},
- {0x8377,0x8377,0x30D8},
- {0x8378,0x8378,0x30D9},
- {0x8379,0x8379,0x30DA},
- {0x837A,0x837A,0x30DB},
- {0x837B,0x837B,0x30DC},
- {0x837C,0x837C,0x30DD},
- {0x837D,0x837D,0x30DE},
- {0x837E,0x837E,0x30DF},
- {0,0,0},
- {0x8380,0x8380,0x30E0}, /* 8380 */
- {0x8381,0x8381,0x30E1},
- {0x8382,0x8382,0x30E2},
- {0x8383,0x8383,0x30E3},
- {0x8384,0x8384,0x30E4},
- {0x8385,0x8385,0x30E5},
- {0x8386,0x8386,0x30E6},
- {0x8387,0x8387,0x30E7},
- {0x8388,0x8388,0x30E8},
- {0x8389,0x8389,0x30E9},
- {0x838A,0x838A,0x30EA},
- {0x838B,0x838B,0x30EB},
- {0x838C,0x838C,0x30EC},
- {0x838D,0x838D,0x30ED},
- {0x838E,0x838E,0x30EE},
- {0x838F,0x838F,0x30EF},
- {0x8390,0x8390,0x30F0}, /* 8390 */
- {0x8391,0x8391,0x30F1},
- {0x8392,0x8392,0x30F2},
- {0x8393,0x8393,0x30F3},
- {0x8394,0x8394,0x30F4},
- {0x8395,0x8395,0x30F5},
- {0x8396,0x8396,0x30F6},
- {0x8397,0x8397,0x003F},
- {0x8398,0x8398,0x003F},
- {0x8399,0x8399,0x003F},
- {0x839A,0x839A,0x003F},
- {0x839B,0x839B,0x003F},
- {0x839C,0x839C,0x003F},
- {0x839D,0x839D,0x003F},
- {0x839E,0x839E,0x003F},
- {0x839F,0x83BF,0x0391},
- {0x83A0,0x83C0,0x0392}, /* 83A0 */
- {0x83A1,0x83C1,0x0393},
- {0x83A2,0x83C2,0x0394},
- {0x83A3,0x83C3,0x0395},
- {0x83A4,0x83C4,0x0396},
- {0x83A5,0x83C5,0x0397},
- {0x83A6,0x83C6,0x0398},
- {0x83A7,0x83C7,0x0399},
- {0x83A8,0x83C8,0x039A},
- {0x83A9,0x83C9,0x039B},
- {0x83AA,0x83CA,0x039C},
- {0x83AB,0x83CB,0x039D},
- {0x83AC,0x83CC,0x039E},
- {0x83AD,0x83CD,0x039F},
- {0x83AE,0x83CE,0x03A0},
- {0x83AF,0x83CF,0x03A1},
- {0x83B0,0x83D0,0x03A3}, /* 83B0 */
- {0x83B1,0x83D1,0x03A4},
- {0x83B2,0x83D2,0x03A5},
- {0x83B3,0x83D3,0x03A6},
- {0x83B4,0x83D4,0x03A7},
- {0x83B5,0x83D5,0x03A8},
- {0x83B6,0x83D6,0x03A9},
- {0x83B7,0x83B7,0x003F},
- {0x83B8,0x83B8,0x003F},
- {0x83B9,0x83B9,0x003F},
- {0x83BA,0x83BA,0x003F},
- {0x83BB,0x83BB,0x003F},
- {0x83BC,0x83BC,0x003F},
- {0x83BD,0x83BD,0x003F},
- {0x83BE,0x83BE,0x003F},
- {0x839F,0x83BF,0x03B1},
- {0x83A0,0x83C0,0x03B2}, /* 83C0 */
- {0x83A1,0x83C1,0x03B3},
- {0x83A2,0x83C2,0x03B4},
- {0x83A3,0x83C3,0x03B5},
- {0x83A4,0x83C4,0x03B6},
- {0x83A5,0x83C5,0x03B7},
- {0x83A6,0x83C6,0x03B8},
- {0x83A7,0x83C7,0x03B9},
- {0x83A8,0x83C8,0x03BA},
- {0x83A9,0x83C9,0x03BB},
- {0x83AA,0x83CA,0x03BC},
- {0x83AB,0x83CB,0x03BD},
- {0x83AC,0x83CC,0x03BE},
- {0x83AD,0x83CD,0x03BF},
- {0x83AE,0x83CE,0x03C0},
- {0x83AF,0x83CF,0x03C1},
- {0x83B0,0x83D0,0x03C3}, /* 83D0 */
- {0x83B1,0x83D1,0x03C4},
- {0x83B2,0x83D2,0x03C5},
- {0x83B3,0x83D3,0x03C6},
- {0x83B4,0x83D4,0x03C7},
- {0x83B5,0x83D5,0x03C8},
- {0x83B6,0x83D6,0x03C9},
- {0x83D7,0x83D7,0x003F},
- {0x83D8,0x83D8,0x003F},
- {0x83D9,0x83D9,0x003F},
- {0x83DA,0x83DA,0x003F},
- {0x83DB,0x83DB,0x003F},
- {0x83DC,0x83DC,0x003F},
- {0x83DD,0x83DD,0x003F},
- {0x83DE,0x83DE,0x003F},
- {0x83DF,0x83DF,0x003F},
- {0x83E0,0x83E0,0x003F}, /* 83E0 */
- {0x83E1,0x83E1,0x003F},
- {0x83E2,0x83E2,0x003F},
- {0x83E3,0x83E3,0x003F},
- {0x83E4,0x83E4,0x003F},
- {0x83E5,0x83E5,0x003F},
- {0x83E6,0x83E6,0x003F},
- {0x83E7,0x83E7,0x003F},
- {0x83E8,0x83E8,0x003F},
- {0x83E9,0x83E9,0x003F},
- {0x83EA,0x83EA,0x003F},
- {0x83EB,0x83EB,0x003F},
- {0x83EC,0x83EC,0x003F},
- {0x83ED,0x83ED,0x003F},
- {0x83EE,0x83EE,0x003F},
- {0x83EF,0x83EF,0x003F},
- {0x83F0,0x83F0,0x003F}, /* 83F0 */
- {0x83F1,0x83F1,0x003F},
- {0x83F2,0x83F2,0x003F},
- {0x83F3,0x83F3,0x003F},
- {0x83F4,0x83F4,0x003F},
- {0x83F5,0x83F5,0x003F},
- {0x83F6,0x83F6,0x003F},
- {0x83F7,0x83F7,0x003F},
- {0x83F8,0x83F8,0x003F},
- {0x83F9,0x83F9,0x003F},
- {0x83FA,0x83FA,0x003F},
- {0x83FB,0x83FB,0x003F},
- {0x83FC,0x83FC,0x003F},
- {0,0,0},
- {0,0,0},
- {0,0,0}
+ {0x8340,0x8340}, /* 8340 */
+ {0x8341,0x8341},
+ {0x8342,0x8342},
+ {0x8343,0x8343},
+ {0x8344,0x8344},
+ {0x8345,0x8345},
+ {0x8346,0x8346},
+ {0x8347,0x8347},
+ {0x8348,0x8348},
+ {0x8349,0x8349},
+ {0x834A,0x834A},
+ {0x834B,0x834B},
+ {0x834C,0x834C},
+ {0x834D,0x834D},
+ {0x834E,0x834E},
+ {0x834F,0x834F},
+ {0x8350,0x8350}, /* 8350 */
+ {0x8351,0x8351},
+ {0x8352,0x8352},
+ {0x8353,0x8353},
+ {0x8354,0x8354},
+ {0x8355,0x8355},
+ {0x8356,0x8356},
+ {0x8357,0x8357},
+ {0x8358,0x8358},
+ {0x8359,0x8359},
+ {0x835A,0x835A},
+ {0x835B,0x835B},
+ {0x835C,0x835C},
+ {0x835D,0x835D},
+ {0x835E,0x835E},
+ {0x835F,0x835F},
+ {0x8360,0x8360}, /* 8360 */
+ {0x8361,0x8361},
+ {0x8362,0x8362},
+ {0x8363,0x8363},
+ {0x8364,0x8364},
+ {0x8365,0x8365},
+ {0x8366,0x8366},
+ {0x8367,0x8367},
+ {0x8368,0x8368},
+ {0x8369,0x8369},
+ {0x836A,0x836A},
+ {0x836B,0x836B},
+ {0x836C,0x836C},
+ {0x836D,0x836D},
+ {0x836E,0x836E},
+ {0x836F,0x836F},
+ {0x8370,0x8370}, /* 8370 */
+ {0x8371,0x8371},
+ {0x8372,0x8372},
+ {0x8373,0x8373},
+ {0x8374,0x8374},
+ {0x8375,0x8375},
+ {0x8376,0x8376},
+ {0x8377,0x8377},
+ {0x8378,0x8378},
+ {0x8379,0x8379},
+ {0x837A,0x837A},
+ {0x837B,0x837B},
+ {0x837C,0x837C},
+ {0x837D,0x837D},
+ {0x837E,0x837E},
+ {0,0},
+ {0x8380,0x8380}, /* 8380 */
+ {0x8381,0x8381},
+ {0x8382,0x8382},
+ {0x8383,0x8383},
+ {0x8384,0x8384},
+ {0x8385,0x8385},
+ {0x8386,0x8386},
+ {0x8387,0x8387},
+ {0x8388,0x8388},
+ {0x8389,0x8389},
+ {0x838A,0x838A},
+ {0x838B,0x838B},
+ {0x838C,0x838C},
+ {0x838D,0x838D},
+ {0x838E,0x838E},
+ {0x838F,0x838F},
+ {0x8390,0x8390}, /* 8390 */
+ {0x8391,0x8391},
+ {0x8392,0x8392},
+ {0x8393,0x8393},
+ {0x8394,0x8394},
+ {0x8395,0x8395},
+ {0x8396,0x8396},
+ {0x8397,0x8397},
+ {0x8398,0x8398},
+ {0x8399,0x8399},
+ {0x839A,0x839A},
+ {0x839B,0x839B},
+ {0x839C,0x839C},
+ {0x839D,0x839D},
+ {0x839E,0x839E},
+ {0x839F,0x83BF},
+ {0x83A0,0x83C0}, /* 83A0 */
+ {0x83A1,0x83C1},
+ {0x83A2,0x83C2},
+ {0x83A3,0x83C3},
+ {0x83A4,0x83C4},
+ {0x83A5,0x83C5},
+ {0x83A6,0x83C6},
+ {0x83A7,0x83C7},
+ {0x83A8,0x83C8},
+ {0x83A9,0x83C9},
+ {0x83AA,0x83CA},
+ {0x83AB,0x83CB},
+ {0x83AC,0x83CC},
+ {0x83AD,0x83CD},
+ {0x83AE,0x83CE},
+ {0x83AF,0x83CF},
+ {0x83B0,0x83D0}, /* 83B0 */
+ {0x83B1,0x83D1},
+ {0x83B2,0x83D2},
+ {0x83B3,0x83D3},
+ {0x83B4,0x83D4},
+ {0x83B5,0x83D5},
+ {0x83B6,0x83D6},
+ {0x83B7,0x83B7},
+ {0x83B8,0x83B8},
+ {0x83B9,0x83B9},
+ {0x83BA,0x83BA},
+ {0x83BB,0x83BB},
+ {0x83BC,0x83BC},
+ {0x83BD,0x83BD},
+ {0x83BE,0x83BE},
+ {0x839F,0x83BF},
+ {0x83A0,0x83C0}, /* 83C0 */
+ {0x83A1,0x83C1},
+ {0x83A2,0x83C2},
+ {0x83A3,0x83C3},
+ {0x83A4,0x83C4},
+ {0x83A5,0x83C5},
+ {0x83A6,0x83C6},
+ {0x83A7,0x83C7},
+ {0x83A8,0x83C8},
+ {0x83A9,0x83C9},
+ {0x83AA,0x83CA},
+ {0x83AB,0x83CB},
+ {0x83AC,0x83CC},
+ {0x83AD,0x83CD},
+ {0x83AE,0x83CE},
+ {0x83AF,0x83CF},
+ {0x83B0,0x83D0}, /* 83D0 */
+ {0x83B1,0x83D1},
+ {0x83B2,0x83D2},
+ {0x83B3,0x83D3},
+ {0x83B4,0x83D4},
+ {0x83B5,0x83D5},
+ {0x83B6,0x83D6},
+ {0x83D7,0x83D7},
+ {0x83D8,0x83D8},
+ {0x83D9,0x83D9},
+ {0x83DA,0x83DA},
+ {0x83DB,0x83DB},
+ {0x83DC,0x83DC},
+ {0x83DD,0x83DD},
+ {0x83DE,0x83DE},
+ {0x83DF,0x83DF},
+ {0x83E0,0x83E0}, /* 83E0 */
+ {0x83E1,0x83E1},
+ {0x83E2,0x83E2},
+ {0x83E3,0x83E3},
+ {0x83E4,0x83E4},
+ {0x83E5,0x83E5},
+ {0x83E6,0x83E6},
+ {0x83E7,0x83E7},
+ {0x83E8,0x83E8},
+ {0x83E9,0x83E9},
+ {0x83EA,0x83EA},
+ {0x83EB,0x83EB},
+ {0x83EC,0x83EC},
+ {0x83ED,0x83ED},
+ {0x83EE,0x83EE},
+ {0x83EF,0x83EF},
+ {0x83F0,0x83F0}, /* 83F0 */
+ {0x83F1,0x83F1},
+ {0x83F2,0x83F2},
+ {0x83F3,0x83F3},
+ {0x83F4,0x83F4},
+ {0x83F5,0x83F5},
+ {0x83F6,0x83F6},
+ {0x83F7,0x83F7},
+ {0x83F8,0x83F8},
+ {0x83F9,0x83F9},
+ {0x83FA,0x83FA},
+ {0x83FB,0x83FB},
+ {0x83FC,0x83FC},
+ {0,0},
+ {0,0},
+ {0,0}
};
-static MY_UNICASE_CHARACTER c84[256]=
+static const MY_CASEFOLD_CHARACTER c84[256]=
{
/* 8400-840F */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
/* 8410-841F */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
/* 8420-842F */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
/* 8430-843F */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
- {0x8440,0x8470,0x0410}, /* 8440 */
- {0x8441,0x8471,0x0411},
- {0x8442,0x8472,0x0412},
- {0x8443,0x8473,0x0413},
- {0x8444,0x8474,0x0414},
- {0x8445,0x8475,0x0415},
- {0x8446,0x8476,0x0401},
- {0x8447,0x8477,0x0416},
- {0x8448,0x8478,0x0417},
- {0x8449,0x8479,0x0418},
- {0x844A,0x847A,0x0419},
- {0x844B,0x847B,0x041A},
- {0x844C,0x847C,0x041B},
- {0x844D,0x847D,0x041C},
- {0x844E,0x847E,0x041D},
- {0x844F,0x8480,0x041E},
- {0x8450,0x8481,0x041F}, /* 8450 */
- {0x8451,0x8482,0x0420},
- {0x8452,0x8483,0x0421},
- {0x8453,0x8484,0x0422},
- {0x8454,0x8485,0x0423},
- {0x8455,0x8486,0x0424},
- {0x8456,0x8487,0x0425},
- {0x8457,0x8488,0x0426},
- {0x8458,0x8489,0x0427},
- {0x8459,0x848A,0x0428},
- {0x845A,0x848B,0x0429},
- {0x845B,0x848C,0x042A},
- {0x845C,0x848D,0x042B},
- {0x845D,0x848E,0x042C},
- {0x845E,0x848F,0x042D},
- {0x845F,0x8490,0x042E},
- {0x8460,0x8491,0x042F}, /* 8460 */
- {0x8461,0x8461,0x003F},
- {0x8462,0x8462,0x003F},
- {0x8463,0x8463,0x003F},
- {0x8464,0x8464,0x003F},
- {0x8465,0x8465,0x003F},
- {0x8466,0x8466,0x003F},
- {0x8467,0x8467,0x003F},
- {0x8468,0x8468,0x003F},
- {0x8469,0x8469,0x003F},
- {0x846A,0x846A,0x003F},
- {0x846B,0x846B,0x003F},
- {0x846C,0x846C,0x003F},
- {0x846D,0x846D,0x003F},
- {0x846E,0x846E,0x003F},
- {0x846F,0x846F,0x003F},
- {0x8440,0x8470,0x0430}, /* 8470 */
- {0x8441,0x8471,0x0431},
- {0x8442,0x8472,0x0432},
- {0x8443,0x8473,0x0433},
- {0x8444,0x8474,0x0434},
- {0x8445,0x8475,0x0435},
- {0x8446,0x8476,0x0451},
- {0x8447,0x8477,0x0436},
- {0x8448,0x8478,0x0437},
- {0x8449,0x8479,0x0438},
- {0x844A,0x847A,0x0439},
- {0x844B,0x847B,0x043A},
- {0x844C,0x847C,0x043B},
- {0x844D,0x847D,0x043C},
- {0x844E,0x847E,0x043D},
- {0,0,0},
- {0x844F,0x8480,0x043E}, /* 8480 */
- {0x8450,0x8481,0x043F},
- {0x8451,0x8482,0x0440},
- {0x8452,0x8483,0x0441},
- {0x8453,0x8484,0x0442},
- {0x8454,0x8485,0x0443},
- {0x8455,0x8486,0x0444},
- {0x8456,0x8487,0x0445},
- {0x8457,0x8488,0x0446},
- {0x8458,0x8489,0x0447},
- {0x8459,0x848A,0x0448},
- {0x845A,0x848B,0x0449},
- {0x845B,0x848C,0x044A},
- {0x845C,0x848D,0x044B},
- {0x845D,0x848E,0x044C},
- {0x845E,0x848F,0x044D},
- {0x845F,0x8490,0x044E}, /* 8490 */
- {0x8460,0x8491,0x044F},
- {0x8492,0x8492,0x003F},
- {0x8493,0x8493,0x003F},
- {0x8494,0x8494,0x003F},
- {0x8495,0x8495,0x003F},
- {0x8496,0x8496,0x003F},
- {0x8497,0x8497,0x003F},
- {0x8498,0x8498,0x003F},
- {0x8499,0x8499,0x003F},
- {0x849A,0x849A,0x003F},
- {0x849B,0x849B,0x003F},
- {0x849C,0x849C,0x003F},
- {0x849D,0x849D,0x003F},
- {0x849E,0x849E,0x003F},
- {0x849F,0x849F,0x2500},
- {0x84A0,0x84A0,0x2502}, /* 84A0 */
- {0x84A1,0x84A1,0x250C},
- {0x84A2,0x84A2,0x2510},
- {0x84A3,0x84A3,0x2518},
- {0x84A4,0x84A4,0x2514},
- {0x84A5,0x84A5,0x251C},
- {0x84A6,0x84A6,0x252C},
- {0x84A7,0x84A7,0x2524},
- {0x84A8,0x84A8,0x2534},
- {0x84A9,0x84A9,0x253C},
- {0x84AA,0x84AA,0x2501},
- {0x84AB,0x84AB,0x2503},
- {0x84AC,0x84AC,0x250F},
- {0x84AD,0x84AD,0x2513},
- {0x84AE,0x84AE,0x251B},
- {0x84AF,0x84AF,0x2517},
- {0x84B0,0x84B0,0x2523}, /* 84B0 */
- {0x84B1,0x84B1,0x2533},
- {0x84B2,0x84B2,0x252B},
- {0x84B3,0x84B3,0x253B},
- {0x84B4,0x84B4,0x254B},
- {0x84B5,0x84B5,0x2520},
- {0x84B6,0x84B6,0x252F},
- {0x84B7,0x84B7,0x2528},
- {0x84B8,0x84B8,0x2537},
- {0x84B9,0x84B9,0x253F},
- {0x84BA,0x84BA,0x251D},
- {0x84BB,0x84BB,0x2530},
- {0x84BC,0x84BC,0x2525},
- {0x84BD,0x84BD,0x2538},
- {0x84BE,0x84BE,0x2542},
- {0x84BF,0x84BF,0x003F},
- {0x84C0,0x84C0,0x003F}, /* 84C0 */
- {0x84C1,0x84C1,0x003F},
- {0x84C2,0x84C2,0x003F},
- {0x84C3,0x84C3,0x003F},
- {0x84C4,0x84C4,0x003F},
- {0x84C5,0x84C5,0x003F},
- {0x84C6,0x84C6,0x003F},
- {0x84C7,0x84C7,0x003F},
- {0x84C8,0x84C8,0x003F},
- {0x84C9,0x84C9,0x003F},
- {0x84CA,0x84CA,0x003F},
- {0x84CB,0x84CB,0x003F},
- {0x84CC,0x84CC,0x003F},
- {0x84CD,0x84CD,0x003F},
- {0x84CE,0x84CE,0x003F},
- {0x84CF,0x84CF,0x003F},
- {0x84D0,0x84D0,0x003F}, /* 84D0 */
- {0x84D1,0x84D1,0x003F},
- {0x84D2,0x84D2,0x003F},
- {0x84D3,0x84D3,0x003F},
- {0x84D4,0x84D4,0x003F},
- {0x84D5,0x84D5,0x003F},
- {0x84D6,0x84D6,0x003F},
- {0x84D7,0x84D7,0x003F},
- {0x84D8,0x84D8,0x003F},
- {0x84D9,0x84D9,0x003F},
- {0x84DA,0x84DA,0x003F},
- {0x84DB,0x84DB,0x003F},
- {0x84DC,0x84DC,0x003F},
- {0x84DD,0x84DD,0x003F},
- {0x84DE,0x84DE,0x003F},
- {0x84DF,0x84DF,0x003F},
- {0x84E0,0x84E0,0x003F}, /* 84E0 */
- {0x84E1,0x84E1,0x003F},
- {0x84E2,0x84E2,0x003F},
- {0x84E3,0x84E3,0x003F},
- {0x84E4,0x84E4,0x003F},
- {0x84E5,0x84E5,0x003F},
- {0x84E6,0x84E6,0x003F},
- {0x84E7,0x84E7,0x003F},
- {0x84E8,0x84E8,0x003F},
- {0x84E9,0x84E9,0x003F},
- {0x84EA,0x84EA,0x003F},
- {0x84EB,0x84EB,0x003F},
- {0x84EC,0x84EC,0x003F},
- {0x84ED,0x84ED,0x003F},
- {0x84EE,0x84EE,0x003F},
- {0x84EF,0x84EF,0x003F},
- {0x84F0,0x84F0,0x003F}, /* 84F0 */
- {0x84F1,0x84F1,0x003F},
- {0x84F2,0x84F2,0x003F},
- {0x84F3,0x84F3,0x003F},
- {0x84F4,0x84F4,0x003F},
- {0x84F5,0x84F5,0x003F},
- {0x84F6,0x84F6,0x003F},
- {0x84F7,0x84F7,0x003F},
- {0x84F8,0x84F8,0x003F},
- {0x84F9,0x84F9,0x003F},
- {0x84FA,0x84FA,0x003F},
- {0x84FB,0x84FB,0x003F},
- {0x84FC,0x84FC,0x003F},
- {0,0,0},
- {0,0,0},
- {0,0,0}
+ {0x8440,0x8470}, /* 8440 */
+ {0x8441,0x8471},
+ {0x8442,0x8472},
+ {0x8443,0x8473},
+ {0x8444,0x8474},
+ {0x8445,0x8475},
+ {0x8446,0x8476},
+ {0x8447,0x8477},
+ {0x8448,0x8478},
+ {0x8449,0x8479},
+ {0x844A,0x847A},
+ {0x844B,0x847B},
+ {0x844C,0x847C},
+ {0x844D,0x847D},
+ {0x844E,0x847E},
+ {0x844F,0x8480},
+ {0x8450,0x8481}, /* 8450 */
+ {0x8451,0x8482},
+ {0x8452,0x8483},
+ {0x8453,0x8484},
+ {0x8454,0x8485},
+ {0x8455,0x8486},
+ {0x8456,0x8487},
+ {0x8457,0x8488},
+ {0x8458,0x8489},
+ {0x8459,0x848A},
+ {0x845A,0x848B},
+ {0x845B,0x848C},
+ {0x845C,0x848D},
+ {0x845D,0x848E},
+ {0x845E,0x848F},
+ {0x845F,0x8490},
+ {0x8460,0x8491}, /* 8460 */
+ {0x8461,0x8461},
+ {0x8462,0x8462},
+ {0x8463,0x8463},
+ {0x8464,0x8464},
+ {0x8465,0x8465},
+ {0x8466,0x8466},
+ {0x8467,0x8467},
+ {0x8468,0x8468},
+ {0x8469,0x8469},
+ {0x846A,0x846A},
+ {0x846B,0x846B},
+ {0x846C,0x846C},
+ {0x846D,0x846D},
+ {0x846E,0x846E},
+ {0x846F,0x846F},
+ {0x8440,0x8470}, /* 8470 */
+ {0x8441,0x8471},
+ {0x8442,0x8472},
+ {0x8443,0x8473},
+ {0x8444,0x8474},
+ {0x8445,0x8475},
+ {0x8446,0x8476},
+ {0x8447,0x8477},
+ {0x8448,0x8478},
+ {0x8449,0x8479},
+ {0x844A,0x847A},
+ {0x844B,0x847B},
+ {0x844C,0x847C},
+ {0x844D,0x847D},
+ {0x844E,0x847E},
+ {0,0},
+ {0x844F,0x8480}, /* 8480 */
+ {0x8450,0x8481},
+ {0x8451,0x8482},
+ {0x8452,0x8483},
+ {0x8453,0x8484},
+ {0x8454,0x8485},
+ {0x8455,0x8486},
+ {0x8456,0x8487},
+ {0x8457,0x8488},
+ {0x8458,0x8489},
+ {0x8459,0x848A},
+ {0x845A,0x848B},
+ {0x845B,0x848C},
+ {0x845C,0x848D},
+ {0x845D,0x848E},
+ {0x845E,0x848F},
+ {0x845F,0x8490}, /* 8490 */
+ {0x8460,0x8491},
+ {0x8492,0x8492},
+ {0x8493,0x8493},
+ {0x8494,0x8494},
+ {0x8495,0x8495},
+ {0x8496,0x8496},
+ {0x8497,0x8497},
+ {0x8498,0x8498},
+ {0x8499,0x8499},
+ {0x849A,0x849A},
+ {0x849B,0x849B},
+ {0x849C,0x849C},
+ {0x849D,0x849D},
+ {0x849E,0x849E},
+ {0x849F,0x849F},
+ {0x84A0,0x84A0}, /* 84A0 */
+ {0x84A1,0x84A1},
+ {0x84A2,0x84A2},
+ {0x84A3,0x84A3},
+ {0x84A4,0x84A4},
+ {0x84A5,0x84A5},
+ {0x84A6,0x84A6},
+ {0x84A7,0x84A7},
+ {0x84A8,0x84A8},
+ {0x84A9,0x84A9},
+ {0x84AA,0x84AA},
+ {0x84AB,0x84AB},
+ {0x84AC,0x84AC},
+ {0x84AD,0x84AD},
+ {0x84AE,0x84AE},
+ {0x84AF,0x84AF},
+ {0x84B0,0x84B0}, /* 84B0 */
+ {0x84B1,0x84B1},
+ {0x84B2,0x84B2},
+ {0x84B3,0x84B3},
+ {0x84B4,0x84B4},
+ {0x84B5,0x84B5},
+ {0x84B6,0x84B6},
+ {0x84B7,0x84B7},
+ {0x84B8,0x84B8},
+ {0x84B9,0x84B9},
+ {0x84BA,0x84BA},
+ {0x84BB,0x84BB},
+ {0x84BC,0x84BC},
+ {0x84BD,0x84BD},
+ {0x84BE,0x84BE},
+ {0x84BF,0x84BF},
+ {0x84C0,0x84C0}, /* 84C0 */
+ {0x84C1,0x84C1},
+ {0x84C2,0x84C2},
+ {0x84C3,0x84C3},
+ {0x84C4,0x84C4},
+ {0x84C5,0x84C5},
+ {0x84C6,0x84C6},
+ {0x84C7,0x84C7},
+ {0x84C8,0x84C8},
+ {0x84C9,0x84C9},
+ {0x84CA,0x84CA},
+ {0x84CB,0x84CB},
+ {0x84CC,0x84CC},
+ {0x84CD,0x84CD},
+ {0x84CE,0x84CE},
+ {0x84CF,0x84CF},
+ {0x84D0,0x84D0}, /* 84D0 */
+ {0x84D1,0x84D1},
+ {0x84D2,0x84D2},
+ {0x84D3,0x84D3},
+ {0x84D4,0x84D4},
+ {0x84D5,0x84D5},
+ {0x84D6,0x84D6},
+ {0x84D7,0x84D7},
+ {0x84D8,0x84D8},
+ {0x84D9,0x84D9},
+ {0x84DA,0x84DA},
+ {0x84DB,0x84DB},
+ {0x84DC,0x84DC},
+ {0x84DD,0x84DD},
+ {0x84DE,0x84DE},
+ {0x84DF,0x84DF},
+ {0x84E0,0x84E0}, /* 84E0 */
+ {0x84E1,0x84E1},
+ {0x84E2,0x84E2},
+ {0x84E3,0x84E3},
+ {0x84E4,0x84E4},
+ {0x84E5,0x84E5},
+ {0x84E6,0x84E6},
+ {0x84E7,0x84E7},
+ {0x84E8,0x84E8},
+ {0x84E9,0x84E9},
+ {0x84EA,0x84EA},
+ {0x84EB,0x84EB},
+ {0x84EC,0x84EC},
+ {0x84ED,0x84ED},
+ {0x84EE,0x84EE},
+ {0x84EF,0x84EF},
+ {0x84F0,0x84F0}, /* 84F0 */
+ {0x84F1,0x84F1},
+ {0x84F2,0x84F2},
+ {0x84F3,0x84F3},
+ {0x84F4,0x84F4},
+ {0x84F5,0x84F5},
+ {0x84F6,0x84F6},
+ {0x84F7,0x84F7},
+ {0x84F8,0x84F8},
+ {0x84F9,0x84F9},
+ {0x84FA,0x84FA},
+ {0x84FB,0x84FB},
+ {0x84FC,0x84FC},
+ {0,0},
+ {0,0},
+ {0,0}
};
-static MY_UNICASE_CHARACTER c87[256]=
+static const MY_CASEFOLD_CHARACTER c87[256]=
{
/* 8700-870F */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
/* 8710-871F */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
/* 8720-872F */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
/* 8730-873F */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
- {0x8740,0x8740,0x2460}, /* 8740 */
- {0x8741,0x8741,0x2461},
- {0x8742,0x8742,0x2462},
- {0x8743,0x8743,0x2463},
- {0x8744,0x8744,0x2464},
- {0x8745,0x8745,0x2465},
- {0x8746,0x8746,0x2466},
- {0x8747,0x8747,0x2467},
- {0x8748,0x8748,0x2468},
- {0x8749,0x8749,0x2469},
- {0x874A,0x874A,0x246A},
- {0x874B,0x874B,0x246B},
- {0x874C,0x874C,0x246C},
- {0x874D,0x874D,0x246D},
- {0x874E,0x874E,0x246E},
- {0x874F,0x874F,0x246F},
- {0x8750,0x8750,0x2470}, /* 8750 */
- {0x8751,0x8751,0x2471},
- {0x8752,0x8752,0x2472},
- {0x8753,0x8753,0x2473},
- {0x8754,0xEEEF,0x2160},
- {0x8755,0xEEF0,0x2161},
- {0x8756,0xEEF1,0x2162},
- {0x8757,0xEEF2,0x2163},
- {0x8758,0xEEF3,0x2164},
- {0x8759,0xEEF4,0x2165},
- {0x875A,0xEEF5,0x2166},
- {0x875B,0xEEF6,0x2167},
- {0x875C,0xEEF7,0x2168},
- {0x875D,0xEEF8,0x2169},
- {0x875E,0x875E,0x003F},
- {0x875F,0x875F,0x3349},
- {0x8760,0x8760,0x3314}, /* 8760 */
- {0x8761,0x8761,0x3322},
- {0x8762,0x8762,0x334D},
- {0x8763,0x8763,0x3318},
- {0x8764,0x8764,0x3327},
- {0x8765,0x8765,0x3303},
- {0x8766,0x8766,0x3336},
- {0x8767,0x8767,0x3351},
- {0x8768,0x8768,0x3357},
- {0x8769,0x8769,0x330D},
- {0x876A,0x876A,0x3326},
- {0x876B,0x876B,0x3323},
- {0x876C,0x876C,0x332B},
- {0x876D,0x876D,0x334A},
- {0x876E,0x876E,0x333B},
- {0x876F,0x876F,0x339C},
- {0x8770,0x8770,0x339D}, /* 8770 */
- {0x8771,0x8771,0x339E},
- {0x8772,0x8772,0x338E},
- {0x8773,0x8773,0x338F},
- {0x8774,0x8774,0x33C4},
- {0x8775,0x8775,0x33A1},
- {0x8776,0x8776,0x003F},
- {0x8777,0x8777,0x003F},
- {0x8778,0x8778,0x003F},
- {0x8779,0x8779,0x003F},
- {0x877A,0x877A,0x003F},
- {0x877B,0x877B,0x003F},
- {0x877C,0x877C,0x003F},
- {0x877D,0x877D,0x003F},
- {0x877E,0x877E,0x337B},
- {0,0,0},
- {0x8780,0x8780,0x301D}, /* 8780 */
- {0x8781,0x8781,0x301F},
- {0x8782,0x8782,0x2116},
- {0x8783,0x8783,0x33CD},
- {0x8784,0x8784,0x2121},
- {0x8785,0x8785,0x32A4},
- {0x8786,0x8786,0x32A5},
- {0x8787,0x8787,0x32A6},
- {0x8788,0x8788,0x32A7},
- {0x8789,0x8789,0x32A8},
- {0x878A,0x878A,0x3231},
- {0x878B,0x878B,0x3232},
- {0x878C,0x878C,0x3239},
- {0x878D,0x878D,0x337E},
- {0x878E,0x878E,0x337D},
- {0x878F,0x878F,0x337C},
- {0x8790,0x8790,0x2252}, /* 8790 */
- {0x8791,0x8791,0x2261},
- {0x8792,0x8792,0x222B},
- {0x8793,0x8793,0x222E},
- {0x8794,0x8794,0x2211},
- {0x8795,0x8795,0x221A},
- {0x8796,0x8796,0x22A5},
- {0x8797,0x8797,0x2220},
- {0x8798,0x8798,0x221F},
- {0x8799,0x8799,0x22BF},
- {0x879A,0x879A,0x2235},
- {0x879B,0x879B,0x2229},
- {0x879C,0x879C,0x222A},
- {0x879D,0x879D,0x003F},
- {0x879E,0x879E,0x003F},
- {0x879F,0x879F,0x003F},
- {0x87A0,0x87A0,0x003F}, /* 87A0 */
- {0x87A1,0x87A1,0x003F},
- {0x87A2,0x87A2,0x003F},
- {0x87A3,0x87A3,0x003F},
- {0x87A4,0x87A4,0x003F},
- {0x87A5,0x87A5,0x003F},
- {0x87A6,0x87A6,0x003F},
- {0x87A7,0x87A7,0x003F},
- {0x87A8,0x87A8,0x003F},
- {0x87A9,0x87A9,0x003F},
- {0x87AA,0x87AA,0x003F},
- {0x87AB,0x87AB,0x003F},
- {0x87AC,0x87AC,0x003F},
- {0x87AD,0x87AD,0x003F},
- {0x87AE,0x87AE,0x003F},
- {0x87AF,0x87AF,0x003F},
- {0x87B0,0x87B0,0x003F}, /* 87B0 */
- {0x87B1,0x87B1,0x003F},
- {0x87B2,0x87B2,0x003F},
- {0x87B3,0x87B3,0x003F},
- {0x87B4,0x87B4,0x003F},
- {0x87B5,0x87B5,0x003F},
- {0x87B6,0x87B6,0x003F},
- {0x87B7,0x87B7,0x003F},
- {0x87B8,0x87B8,0x003F},
- {0x87B9,0x87B9,0x003F},
- {0x87BA,0x87BA,0x003F},
- {0x87BB,0x87BB,0x003F},
- {0x87BC,0x87BC,0x003F},
- {0x87BD,0x87BD,0x003F},
- {0x87BE,0x87BE,0x003F},
- {0x87BF,0x87BF,0x003F},
- {0x87C0,0x87C0,0x003F}, /* 87C0 */
- {0x87C1,0x87C1,0x003F},
- {0x87C2,0x87C2,0x003F},
- {0x87C3,0x87C3,0x003F},
- {0x87C4,0x87C4,0x003F},
- {0x87C5,0x87C5,0x003F},
- {0x87C6,0x87C6,0x003F},
- {0x87C7,0x87C7,0x003F},
- {0x87C8,0x87C8,0x003F},
- {0x87C9,0x87C9,0x003F},
- {0x87CA,0x87CA,0x003F},
- {0x87CB,0x87CB,0x003F},
- {0x87CC,0x87CC,0x003F},
- {0x87CD,0x87CD,0x003F},
- {0x87CE,0x87CE,0x003F},
- {0x87CF,0x87CF,0x003F},
- {0x87D0,0x87D0,0x003F}, /* 87D0 */
- {0x87D1,0x87D1,0x003F},
- {0x87D2,0x87D2,0x003F},
- {0x87D3,0x87D3,0x003F},
- {0x87D4,0x87D4,0x003F},
- {0x87D5,0x87D5,0x003F},
- {0x87D6,0x87D6,0x003F},
- {0x87D7,0x87D7,0x003F},
- {0x87D8,0x87D8,0x003F},
- {0x87D9,0x87D9,0x003F},
- {0x87DA,0x87DA,0x003F},
- {0x87DB,0x87DB,0x003F},
- {0x87DC,0x87DC,0x003F},
- {0x87DD,0x87DD,0x003F},
- {0x87DE,0x87DE,0x003F},
- {0x87DF,0x87DF,0x003F},
- {0x87E0,0x87E0,0x003F}, /* 87E0 */
- {0x87E1,0x87E1,0x003F},
- {0x87E2,0x87E2,0x003F},
- {0x87E3,0x87E3,0x003F},
- {0x87E4,0x87E4,0x003F},
- {0x87E5,0x87E5,0x003F},
- {0x87E6,0x87E6,0x003F},
- {0x87E7,0x87E7,0x003F},
- {0x87E8,0x87E8,0x003F},
- {0x87E9,0x87E9,0x003F},
- {0x87EA,0x87EA,0x003F},
- {0x87EB,0x87EB,0x003F},
- {0x87EC,0x87EC,0x003F},
- {0x87ED,0x87ED,0x003F},
- {0x87EE,0x87EE,0x003F},
- {0x87EF,0x87EF,0x003F},
- {0x87F0,0x87F0,0x003F}, /* 87F0 */
- {0x87F1,0x87F1,0x003F},
- {0x87F2,0x87F2,0x003F},
- {0x87F3,0x87F3,0x003F},
- {0x87F4,0x87F4,0x003F},
- {0x87F5,0x87F5,0x003F},
- {0x87F6,0x87F6,0x003F},
- {0x87F7,0x87F7,0x003F},
- {0x87F8,0x87F8,0x003F},
- {0x87F9,0x87F9,0x003F},
- {0x87FA,0x87FA,0x003F},
- {0x87FB,0x87FB,0x003F},
- {0x87FC,0x87FC,0x003F},
- {0,0,0},
- {0,0,0},
- {0,0,0}
+ {0x8740,0x8740}, /* 8740 */
+ {0x8741,0x8741},
+ {0x8742,0x8742},
+ {0x8743,0x8743},
+ {0x8744,0x8744},
+ {0x8745,0x8745},
+ {0x8746,0x8746},
+ {0x8747,0x8747},
+ {0x8748,0x8748},
+ {0x8749,0x8749},
+ {0x874A,0x874A},
+ {0x874B,0x874B},
+ {0x874C,0x874C},
+ {0x874D,0x874D},
+ {0x874E,0x874E},
+ {0x874F,0x874F},
+ {0x8750,0x8750}, /* 8750 */
+ {0x8751,0x8751},
+ {0x8752,0x8752},
+ {0x8753,0x8753},
+ {0x8754,0xEEEF},
+ {0x8755,0xEEF0},
+ {0x8756,0xEEF1},
+ {0x8757,0xEEF2},
+ {0x8758,0xEEF3},
+ {0x8759,0xEEF4},
+ {0x875A,0xEEF5},
+ {0x875B,0xEEF6},
+ {0x875C,0xEEF7},
+ {0x875D,0xEEF8},
+ {0x875E,0x875E},
+ {0x875F,0x875F},
+ {0x8760,0x8760}, /* 8760 */
+ {0x8761,0x8761},
+ {0x8762,0x8762},
+ {0x8763,0x8763},
+ {0x8764,0x8764},
+ {0x8765,0x8765},
+ {0x8766,0x8766},
+ {0x8767,0x8767},
+ {0x8768,0x8768},
+ {0x8769,0x8769},
+ {0x876A,0x876A},
+ {0x876B,0x876B},
+ {0x876C,0x876C},
+ {0x876D,0x876D},
+ {0x876E,0x876E},
+ {0x876F,0x876F},
+ {0x8770,0x8770}, /* 8770 */
+ {0x8771,0x8771},
+ {0x8772,0x8772},
+ {0x8773,0x8773},
+ {0x8774,0x8774},
+ {0x8775,0x8775},
+ {0x8776,0x8776},
+ {0x8777,0x8777},
+ {0x8778,0x8778},
+ {0x8779,0x8779},
+ {0x877A,0x877A},
+ {0x877B,0x877B},
+ {0x877C,0x877C},
+ {0x877D,0x877D},
+ {0x877E,0x877E},
+ {0,0},
+ {0x8780,0x8780}, /* 8780 */
+ {0x8781,0x8781},
+ {0x8782,0x8782},
+ {0x8783,0x8783},
+ {0x8784,0x8784},
+ {0x8785,0x8785},
+ {0x8786,0x8786},
+ {0x8787,0x8787},
+ {0x8788,0x8788},
+ {0x8789,0x8789},
+ {0x878A,0x878A},
+ {0x878B,0x878B},
+ {0x878C,0x878C},
+ {0x878D,0x878D},
+ {0x878E,0x878E},
+ {0x878F,0x878F},
+ {0x8790,0x8790}, /* 8790 */
+ {0x8791,0x8791},
+ {0x8792,0x8792},
+ {0x8793,0x8793},
+ {0x8794,0x8794},
+ {0x8795,0x8795},
+ {0x8796,0x8796},
+ {0x8797,0x8797},
+ {0x8798,0x8798},
+ {0x8799,0x8799},
+ {0x879A,0x879A},
+ {0x879B,0x879B},
+ {0x879C,0x879C},
+ {0x879D,0x879D},
+ {0x879E,0x879E},
+ {0x879F,0x879F},
+ {0x87A0,0x87A0}, /* 87A0 */
+ {0x87A1,0x87A1},
+ {0x87A2,0x87A2},
+ {0x87A3,0x87A3},
+ {0x87A4,0x87A4},
+ {0x87A5,0x87A5},
+ {0x87A6,0x87A6},
+ {0x87A7,0x87A7},
+ {0x87A8,0x87A8},
+ {0x87A9,0x87A9},
+ {0x87AA,0x87AA},
+ {0x87AB,0x87AB},
+ {0x87AC,0x87AC},
+ {0x87AD,0x87AD},
+ {0x87AE,0x87AE},
+ {0x87AF,0x87AF},
+ {0x87B0,0x87B0}, /* 87B0 */
+ {0x87B1,0x87B1},
+ {0x87B2,0x87B2},
+ {0x87B3,0x87B3},
+ {0x87B4,0x87B4},
+ {0x87B5,0x87B5},
+ {0x87B6,0x87B6},
+ {0x87B7,0x87B7},
+ {0x87B8,0x87B8},
+ {0x87B9,0x87B9},
+ {0x87BA,0x87BA},
+ {0x87BB,0x87BB},
+ {0x87BC,0x87BC},
+ {0x87BD,0x87BD},
+ {0x87BE,0x87BE},
+ {0x87BF,0x87BF},
+ {0x87C0,0x87C0}, /* 87C0 */
+ {0x87C1,0x87C1},
+ {0x87C2,0x87C2},
+ {0x87C3,0x87C3},
+ {0x87C4,0x87C4},
+ {0x87C5,0x87C5},
+ {0x87C6,0x87C6},
+ {0x87C7,0x87C7},
+ {0x87C8,0x87C8},
+ {0x87C9,0x87C9},
+ {0x87CA,0x87CA},
+ {0x87CB,0x87CB},
+ {0x87CC,0x87CC},
+ {0x87CD,0x87CD},
+ {0x87CE,0x87CE},
+ {0x87CF,0x87CF},
+ {0x87D0,0x87D0}, /* 87D0 */
+ {0x87D1,0x87D1},
+ {0x87D2,0x87D2},
+ {0x87D3,0x87D3},
+ {0x87D4,0x87D4},
+ {0x87D5,0x87D5},
+ {0x87D6,0x87D6},
+ {0x87D7,0x87D7},
+ {0x87D8,0x87D8},
+ {0x87D9,0x87D9},
+ {0x87DA,0x87DA},
+ {0x87DB,0x87DB},
+ {0x87DC,0x87DC},
+ {0x87DD,0x87DD},
+ {0x87DE,0x87DE},
+ {0x87DF,0x87DF},
+ {0x87E0,0x87E0}, /* 87E0 */
+ {0x87E1,0x87E1},
+ {0x87E2,0x87E2},
+ {0x87E3,0x87E3},
+ {0x87E4,0x87E4},
+ {0x87E5,0x87E5},
+ {0x87E6,0x87E6},
+ {0x87E7,0x87E7},
+ {0x87E8,0x87E8},
+ {0x87E9,0x87E9},
+ {0x87EA,0x87EA},
+ {0x87EB,0x87EB},
+ {0x87EC,0x87EC},
+ {0x87ED,0x87ED},
+ {0x87EE,0x87EE},
+ {0x87EF,0x87EF},
+ {0x87F0,0x87F0}, /* 87F0 */
+ {0x87F1,0x87F1},
+ {0x87F2,0x87F2},
+ {0x87F3,0x87F3},
+ {0x87F4,0x87F4},
+ {0x87F5,0x87F5},
+ {0x87F6,0x87F6},
+ {0x87F7,0x87F7},
+ {0x87F8,0x87F8},
+ {0x87F9,0x87F9},
+ {0x87FA,0x87FA},
+ {0x87FB,0x87FB},
+ {0x87FC,0x87FC},
+ {0,0},
+ {0,0},
+ {0,0}
};
-static MY_UNICASE_CHARACTER cEE[256]=
+static const MY_CASEFOLD_CHARACTER cEE[256]=
{
/* EE00-EE0F */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
/* EE10-EE1F */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
/* EE20-EE2F */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
/* EE30-EE3F */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
- {0xEE40,0xEE40,0x72BE}, /* EE40 */
- {0xEE41,0xEE41,0x7324},
- {0xEE42,0xEE42,0xFA16},
- {0xEE43,0xEE43,0x7377},
- {0xEE44,0xEE44,0x73BD},
- {0xEE45,0xEE45,0x73C9},
- {0xEE46,0xEE46,0x73D6},
- {0xEE47,0xEE47,0x73E3},
- {0xEE48,0xEE48,0x73D2},
- {0xEE49,0xEE49,0x7407},
- {0xEE4A,0xEE4A,0x73F5},
- {0xEE4B,0xEE4B,0x7426},
- {0xEE4C,0xEE4C,0x742A},
- {0xEE4D,0xEE4D,0x7429},
- {0xEE4E,0xEE4E,0x742E},
- {0xEE4F,0xEE4F,0x7462},
+ {0xEE40,0xEE40}, /* EE40 */
+ {0xEE41,0xEE41},
+ {0xEE42,0xEE42},
+ {0xEE43,0xEE43},
+ {0xEE44,0xEE44},
+ {0xEE45,0xEE45},
+ {0xEE46,0xEE46},
+ {0xEE47,0xEE47},
+ {0xEE48,0xEE48},
+ {0xEE49,0xEE49},
+ {0xEE4A,0xEE4A},
+ {0xEE4B,0xEE4B},
+ {0xEE4C,0xEE4C},
+ {0xEE4D,0xEE4D},
+ {0xEE4E,0xEE4E},
+ {0xEE4F,0xEE4F},
- {0xEE50,0xEE50,0x7489}, /* EE50 */
- {0xEE51,0xEE51,0x749F},
- {0xEE52,0xEE52,0x7501},
- {0xEE53,0xEE53,0x756F},
- {0xEE54,0xEE54,0x7682},
- {0xEE55,0xEE55,0x769C},
- {0xEE56,0xEE56,0x769E},
- {0xEE57,0xEE57,0x769B},
- {0xEE58,0xEE58,0x76A6},
- {0xEE59,0xEE59,0xFA17},
- {0xEE5A,0xEE5A,0x7746},
- {0xEE5B,0xEE5B,0x52AF},
- {0xEE5C,0xEE5C,0x7821},
- {0xEE5D,0xEE5D,0x784E},
- {0xEE5E,0xEE5E,0x7864},
- {0xEE5F,0xEE5F,0x787A},
- {0xEE60,0xEE60,0x7930}, /* EE60 */
- {0xEE61,0xEE61,0xFA18},
- {0xEE62,0xEE62,0xFA19},
- {0xEE63,0xEE63,0xFA1A},
- {0xEE64,0xEE64,0x7994},
- {0xEE65,0xEE65,0xFA1B},
- {0xEE66,0xEE66,0x799B},
- {0xEE67,0xEE67,0x7AD1},
- {0xEE68,0xEE68,0x7AE7},
- {0xEE69,0xEE69,0xFA1C},
- {0xEE6A,0xEE6A,0x7AEB},
- {0xEE6B,0xEE6B,0x7B9E},
- {0xEE6C,0xEE6C,0xFA1D},
- {0xEE6D,0xEE6D,0x7D48},
- {0xEE6E,0xEE6E,0x7D5C},
- {0xEE6F,0xEE6F,0x7DB7},
- {0xEE70,0xEE70,0x7DA0}, /* EE70 */
- {0xEE71,0xEE71,0x7DD6},
- {0xEE72,0xEE72,0x7E52},
- {0xEE73,0xEE73,0x7F47},
- {0xEE74,0xEE74,0x7FA1},
- {0xEE75,0xEE75,0xFA1E},
- {0xEE76,0xEE76,0x8301},
- {0xEE77,0xEE77,0x8362},
- {0xEE78,0xEE78,0x837F},
- {0xEE79,0xEE79,0x83C7},
- {0xEE7A,0xEE7A,0x83F6},
- {0xEE7B,0xEE7B,0x8448},
- {0xEE7C,0xEE7C,0x84B4},
- {0xEE7D,0xEE7D,0x8553},
- {0xEE7E,0xEE7E,0x8559},
- {0,0,0},
- {0xEE80,0xEE80,0x856B}, /* EE80 */
- {0xEE81,0xEE81,0xFA1F},
- {0xEE82,0xEE82,0x85B0},
- {0xEE83,0xEE83,0xFA20},
- {0xEE84,0xEE84,0xFA21},
- {0xEE85,0xEE85,0x8807},
- {0xEE86,0xEE86,0x88F5},
- {0xEE87,0xEE87,0x8A12},
- {0xEE88,0xEE88,0x8A37},
- {0xEE89,0xEE89,0x8A79},
- {0xEE8A,0xEE8A,0x8AA7},
- {0xEE8B,0xEE8B,0x8ABE},
- {0xEE8C,0xEE8C,0x8ADF},
- {0xEE8D,0xEE8D,0xFA22},
- {0xEE8E,0xEE8E,0x8AF6},
- {0xEE8F,0xEE8F,0x8B53},
- {0xEE90,0xEE90,0x8B7F}, /* EE90 */
- {0xEE91,0xEE91,0x8CF0},
- {0xEE92,0xEE92,0x8CF4},
- {0xEE93,0xEE93,0x8D12},
- {0xEE94,0xEE94,0x8D76},
- {0xEE95,0xEE95,0xFA23},
- {0xEE96,0xEE96,0x8ECF},
- {0xEE97,0xEE97,0xFA24},
- {0xEE98,0xEE98,0xFA25},
- {0xEE99,0xEE99,0x9067},
- {0xEE9A,0xEE9A,0x90DE},
- {0xEE9B,0xEE9B,0xFA26},
- {0xEE9C,0xEE9C,0x9115},
- {0xEE9D,0xEE9D,0x9127},
- {0xEE9E,0xEE9E,0x91DA},
- {0xEE9F,0xEE9F,0x91D7},
- {0xEEA0,0xEEA0,0x91DE}, /* EEA0 */
- {0xEEA1,0xEEA1,0x91ED},
- {0xEEA2,0xEEA2,0x91EE},
- {0xEEA3,0xEEA3,0x91E4},
- {0xEEA4,0xEEA4,0x91E5},
- {0xEEA5,0xEEA5,0x9206},
- {0xEEA6,0xEEA6,0x9210},
- {0xEEA7,0xEEA7,0x920A},
- {0xEEA8,0xEEA8,0x923A},
- {0xEEA9,0xEEA9,0x9240},
- {0xEEAA,0xEEAA,0x923C},
- {0xEEAB,0xEEAB,0x924E},
- {0xEEAC,0xEEAC,0x9259},
- {0xEEAD,0xEEAD,0x9251},
- {0xEEAE,0xEEAE,0x9239},
- {0xEEAF,0xEEAF,0x9267},
- {0xEEB0,0xEEB0,0x92A7}, /* EEB0 */
- {0xEEB1,0xEEB1,0x9277},
- {0xEEB2,0xEEB2,0x9278},
- {0xEEB3,0xEEB3,0x92E7},
- {0xEEB4,0xEEB4,0x92D7},
- {0xEEB5,0xEEB5,0x92D9},
- {0xEEB6,0xEEB6,0x92D0},
- {0xEEB7,0xEEB7,0xFA27},
- {0xEEB8,0xEEB8,0x92D5},
- {0xEEB9,0xEEB9,0x92E0},
- {0xEEBA,0xEEBA,0x92D3},
- {0xEEBB,0xEEBB,0x9325},
- {0xEEBC,0xEEBC,0x9321},
- {0xEEBD,0xEEBD,0x92FB},
- {0xEEBE,0xEEBE,0xFA28},
- {0xEEBF,0xEEBF,0x931E},
- {0xEEC0,0xEEC0,0x92FF}, /* EEC0 */
- {0xEEC1,0xEEC1,0x931D},
- {0xEEC2,0xEEC2,0x9302},
- {0xEEC3,0xEEC3,0x9370},
- {0xEEC4,0xEEC4,0x9357},
- {0xEEC5,0xEEC5,0x93A4},
- {0xEEC6,0xEEC6,0x93C6},
- {0xEEC7,0xEEC7,0x93DE},
- {0xEEC8,0xEEC8,0x93F8},
- {0xEEC9,0xEEC9,0x9431},
- {0xEECA,0xEECA,0x9445},
- {0xEECB,0xEECB,0x9448},
- {0xEECC,0xEECC,0x9592},
- {0xEECD,0xEECD,0xF9DC},
- {0xEECE,0xEECE,0xFA29},
- {0xEECF,0xEECF,0x969D},
- {0xEED0,0xEED0,0x96AF}, /* EED0 */
- {0xEED1,0xEED1,0x9733},
- {0xEED2,0xEED2,0x973B},
- {0xEED3,0xEED3,0x9743},
- {0xEED4,0xEED4,0x974D},
- {0xEED5,0xEED5,0x974F},
- {0xEED6,0xEED6,0x9751},
- {0xEED7,0xEED7,0x9755},
- {0xEED8,0xEED8,0x9857},
- {0xEED9,0xEED9,0x9865},
- {0xEEDA,0xEEDA,0xFA2A},
- {0xEEDB,0xEEDB,0xFA2B},
- {0xEEDC,0xEEDC,0x9927},
- {0xEEDD,0xEEDD,0xFA2C},
- {0xEEDE,0xEEDE,0x999E},
- {0xEEDF,0xEEDF,0x9A4E},
- {0xEEE0,0xEEE0,0x9AD9}, /* EEE0 */
- {0xEEE1,0xEEE1,0x9ADC},
- {0xEEE2,0xEEE2,0x9B75},
- {0xEEE3,0xEEE3,0x9B72},
- {0xEEE4,0xEEE4,0x9B8F},
- {0xEEE5,0xEEE5,0x9BB1},
- {0xEEE6,0xEEE6,0x9BBB},
- {0xEEE7,0xEEE7,0x9C00},
- {0xEEE8,0xEEE8,0x9D70},
- {0xEEE9,0xEEE9,0x9D6B},
- {0xEEEA,0xEEEA,0xFA2D},
- {0xEEEB,0xEEEB,0x9E19},
- {0xEEEC,0xEEEC,0x9ED1},
- {0xEEED,0xEEED,0x003F},
- {0xEEEE,0xEEEE,0x003F},
- {0x8754,0xEEEF,0x2170},
- {0x8755,0xEEF0,0x2171}, /* EEF0 */
- {0x8756,0xEEF1,0x2172},
- {0x8757,0xEEF2,0x2173},
- {0x8758,0xEEF3,0x2174},
- {0x8759,0xEEF4,0x2175},
- {0x875A,0xEEF5,0x2176},
- {0x875B,0xEEF6,0x2177},
- {0x875C,0xEEF7,0x2178},
- {0x875D,0xEEF8,0x2179},
- {0xEEF9,0xEEF9,0xFFE2},
- {0xEEFA,0xEEFA,0xFFE4},
- {0xEEFB,0xEEFB,0xFF07},
- {0xEEFC,0xEEFC,0xFF02},
- {0,0,0},
- {0,0,0},
- {0,0,0}
+ {0xEE50,0xEE50}, /* EE50 */
+ {0xEE51,0xEE51},
+ {0xEE52,0xEE52},
+ {0xEE53,0xEE53},
+ {0xEE54,0xEE54},
+ {0xEE55,0xEE55},
+ {0xEE56,0xEE56},
+ {0xEE57,0xEE57},
+ {0xEE58,0xEE58},
+ {0xEE59,0xEE59},
+ {0xEE5A,0xEE5A},
+ {0xEE5B,0xEE5B},
+ {0xEE5C,0xEE5C},
+ {0xEE5D,0xEE5D},
+ {0xEE5E,0xEE5E},
+ {0xEE5F,0xEE5F},
+ {0xEE60,0xEE60}, /* EE60 */
+ {0xEE61,0xEE61},
+ {0xEE62,0xEE62},
+ {0xEE63,0xEE63},
+ {0xEE64,0xEE64},
+ {0xEE65,0xEE65},
+ {0xEE66,0xEE66},
+ {0xEE67,0xEE67},
+ {0xEE68,0xEE68},
+ {0xEE69,0xEE69},
+ {0xEE6A,0xEE6A},
+ {0xEE6B,0xEE6B},
+ {0xEE6C,0xEE6C},
+ {0xEE6D,0xEE6D},
+ {0xEE6E,0xEE6E},
+ {0xEE6F,0xEE6F},
+ {0xEE70,0xEE70}, /* EE70 */
+ {0xEE71,0xEE71},
+ {0xEE72,0xEE72},
+ {0xEE73,0xEE73},
+ {0xEE74,0xEE74},
+ {0xEE75,0xEE75},
+ {0xEE76,0xEE76},
+ {0xEE77,0xEE77},
+ {0xEE78,0xEE78},
+ {0xEE79,0xEE79},
+ {0xEE7A,0xEE7A},
+ {0xEE7B,0xEE7B},
+ {0xEE7C,0xEE7C},
+ {0xEE7D,0xEE7D},
+ {0xEE7E,0xEE7E},
+ {0,0},
+ {0xEE80,0xEE80}, /* EE80 */
+ {0xEE81,0xEE81},
+ {0xEE82,0xEE82},
+ {0xEE83,0xEE83},
+ {0xEE84,0xEE84},
+ {0xEE85,0xEE85},
+ {0xEE86,0xEE86},
+ {0xEE87,0xEE87},
+ {0xEE88,0xEE88},
+ {0xEE89,0xEE89},
+ {0xEE8A,0xEE8A},
+ {0xEE8B,0xEE8B},
+ {0xEE8C,0xEE8C},
+ {0xEE8D,0xEE8D},
+ {0xEE8E,0xEE8E},
+ {0xEE8F,0xEE8F},
+ {0xEE90,0xEE90}, /* EE90 */
+ {0xEE91,0xEE91},
+ {0xEE92,0xEE92},
+ {0xEE93,0xEE93},
+ {0xEE94,0xEE94},
+ {0xEE95,0xEE95},
+ {0xEE96,0xEE96},
+ {0xEE97,0xEE97},
+ {0xEE98,0xEE98},
+ {0xEE99,0xEE99},
+ {0xEE9A,0xEE9A},
+ {0xEE9B,0xEE9B},
+ {0xEE9C,0xEE9C},
+ {0xEE9D,0xEE9D},
+ {0xEE9E,0xEE9E},
+ {0xEE9F,0xEE9F},
+ {0xEEA0,0xEEA0}, /* EEA0 */
+ {0xEEA1,0xEEA1},
+ {0xEEA2,0xEEA2},
+ {0xEEA3,0xEEA3},
+ {0xEEA4,0xEEA4},
+ {0xEEA5,0xEEA5},
+ {0xEEA6,0xEEA6},
+ {0xEEA7,0xEEA7},
+ {0xEEA8,0xEEA8},
+ {0xEEA9,0xEEA9},
+ {0xEEAA,0xEEAA},
+ {0xEEAB,0xEEAB},
+ {0xEEAC,0xEEAC},
+ {0xEEAD,0xEEAD},
+ {0xEEAE,0xEEAE},
+ {0xEEAF,0xEEAF},
+ {0xEEB0,0xEEB0}, /* EEB0 */
+ {0xEEB1,0xEEB1},
+ {0xEEB2,0xEEB2},
+ {0xEEB3,0xEEB3},
+ {0xEEB4,0xEEB4},
+ {0xEEB5,0xEEB5},
+ {0xEEB6,0xEEB6},
+ {0xEEB7,0xEEB7},
+ {0xEEB8,0xEEB8},
+ {0xEEB9,0xEEB9},
+ {0xEEBA,0xEEBA},
+ {0xEEBB,0xEEBB},
+ {0xEEBC,0xEEBC},
+ {0xEEBD,0xEEBD},
+ {0xEEBE,0xEEBE},
+ {0xEEBF,0xEEBF},
+ {0xEEC0,0xEEC0}, /* EEC0 */
+ {0xEEC1,0xEEC1},
+ {0xEEC2,0xEEC2},
+ {0xEEC3,0xEEC3},
+ {0xEEC4,0xEEC4},
+ {0xEEC5,0xEEC5},
+ {0xEEC6,0xEEC6},
+ {0xEEC7,0xEEC7},
+ {0xEEC8,0xEEC8},
+ {0xEEC9,0xEEC9},
+ {0xEECA,0xEECA},
+ {0xEECB,0xEECB},
+ {0xEECC,0xEECC},
+ {0xEECD,0xEECD},
+ {0xEECE,0xEECE},
+ {0xEECF,0xEECF},
+ {0xEED0,0xEED0}, /* EED0 */
+ {0xEED1,0xEED1},
+ {0xEED2,0xEED2},
+ {0xEED3,0xEED3},
+ {0xEED4,0xEED4},
+ {0xEED5,0xEED5},
+ {0xEED6,0xEED6},
+ {0xEED7,0xEED7},
+ {0xEED8,0xEED8},
+ {0xEED9,0xEED9},
+ {0xEEDA,0xEEDA},
+ {0xEEDB,0xEEDB},
+ {0xEEDC,0xEEDC},
+ {0xEEDD,0xEEDD},
+ {0xEEDE,0xEEDE},
+ {0xEEDF,0xEEDF},
+ {0xEEE0,0xEEE0}, /* EEE0 */
+ {0xEEE1,0xEEE1},
+ {0xEEE2,0xEEE2},
+ {0xEEE3,0xEEE3},
+ {0xEEE4,0xEEE4},
+ {0xEEE5,0xEEE5},
+ {0xEEE6,0xEEE6},
+ {0xEEE7,0xEEE7},
+ {0xEEE8,0xEEE8},
+ {0xEEE9,0xEEE9},
+ {0xEEEA,0xEEEA},
+ {0xEEEB,0xEEEB},
+ {0xEEEC,0xEEEC},
+ {0xEEED,0xEEED},
+ {0xEEEE,0xEEEE},
+ {0x8754,0xEEEF},
+ {0x8755,0xEEF0}, /* EEF0 */
+ {0x8756,0xEEF1},
+ {0x8757,0xEEF2},
+ {0x8758,0xEEF3},
+ {0x8759,0xEEF4},
+ {0x875A,0xEEF5},
+ {0x875B,0xEEF6},
+ {0x875C,0xEEF7},
+ {0x875D,0xEEF8},
+ {0xEEF9,0xEEF9},
+ {0xEEFA,0xEEFA},
+ {0xEEFB,0xEEFB},
+ {0xEEFC,0xEEFC},
+ {0,0},
+ {0,0},
+ {0,0}
};
-static MY_UNICASE_CHARACTER cFA[256]=
+static const MY_CASEFOLD_CHARACTER cFA[256]=
{
/* FA00-FA0F */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
/* FA10-FA1F */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
/* FA20-FA2F */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
/* FA30-FA3F */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
- {0xFA4A,0xFA40,0x2170}, /* FA40 */
- {0xFA4B,0xFA41,0x2171},
- {0xFA4C,0xFA42,0x2172},
- {0xFA4D,0xFA43,0x2173},
- {0xFA4E,0xFA44,0x2174},
- {0xFA4F,0xFA45,0x2175},
- {0xFA50,0xFA46,0x2176},
- {0xFA51,0xFA47,0x2177},
- {0xFA52,0xFA48,0x2178},
- {0xFA53,0xFA49,0x2179},
- {0xFA4A,0xFA40,0x2160},
- {0xFA4B,0xFA41,0x2161},
- {0xFA4C,0xFA42,0x2162},
- {0xFA4D,0xFA43,0x2163},
- {0xFA4E,0xFA44,0x2164},
- {0xFA4F,0xFA45,0x2165},
- {0xFA50,0xFA46,0x2166}, /* FA50 */
- {0xFA51,0xFA47,0x2167},
- {0xFA52,0xFA48,0x2168},
- {0xFA53,0xFA49,0x2169},
- {0xFA54,0xFA54,0xFFE2},
- {0xFA55,0xFA55,0xFFE4},
- {0xFA56,0xFA56,0xFF07},
- {0xFA57,0xFA57,0xFF02},
- {0xFA58,0xFA58,0x3231},
- {0xFA59,0xFA59,0x2116},
- {0xFA5A,0xFA5A,0x2121},
- {0xFA5B,0xFA5B,0x2235},
- {0xFA5C,0xFA5C,0x7E8A},
- {0xFA5D,0xFA5D,0x891C},
- {0xFA5E,0xFA5E,0x9348},
- {0xFA5F,0xFA5F,0x9288},
- {0xFA60,0xFA60,0x84DC}, /* FA60 */
- {0xFA61,0xFA61,0x4FC9},
- {0xFA62,0xFA62,0x70BB},
- {0xFA63,0xFA63,0x6631},
- {0xFA64,0xFA64,0x68C8},
- {0xFA65,0xFA65,0x92F9},
- {0xFA66,0xFA66,0x66FB},
- {0xFA67,0xFA67,0x5F45},
- {0xFA68,0xFA68,0x4E28},
- {0xFA69,0xFA69,0x4EE1},
- {0xFA6A,0xFA6A,0x4EFC},
- {0xFA6B,0xFA6B,0x4F00},
- {0xFA6C,0xFA6C,0x4F03},
- {0xFA6D,0xFA6D,0x4F39},
- {0xFA6E,0xFA6E,0x4F56},
- {0xFA6F,0xFA6F,0x4F92},
- {0xFA70,0xFA70,0x4F8A}, /* FA70 */
- {0xFA71,0xFA71,0x4F9A},
- {0xFA72,0xFA72,0x4F94},
- {0xFA73,0xFA73,0x4FCD},
- {0xFA74,0xFA74,0x5040},
- {0xFA75,0xFA75,0x5022},
- {0xFA76,0xFA76,0x4FFF},
- {0xFA77,0xFA77,0x501E},
- {0xFA78,0xFA78,0x5046},
- {0xFA79,0xFA79,0x5070},
- {0xFA7A,0xFA7A,0x5042},
- {0xFA7B,0xFA7B,0x5094},
- {0xFA7C,0xFA7C,0x50F4},
- {0xFA7D,0xFA7D,0x50D8},
- {0xFA7E,0xFA7E,0x514A},
- {0,0,0},
- {0xFA80,0xFA80,0x5164}, /* FA80 */
- {0xFA81,0xFA81,0x519D},
- {0xFA82,0xFA82,0x51BE},
- {0xFA83,0xFA83,0x51EC},
- {0xFA84,0xFA84,0x5215},
- {0xFA85,0xFA85,0x529C},
- {0xFA86,0xFA86,0x52A6},
- {0xFA87,0xFA87,0x52C0},
- {0xFA88,0xFA88,0x52DB},
- {0xFA89,0xFA89,0x5300},
- {0xFA8A,0xFA8A,0x5307},
- {0xFA8B,0xFA8B,0x5324},
- {0xFA8C,0xFA8C,0x5372},
- {0xFA8D,0xFA8D,0x5393},
- {0xFA8E,0xFA8E,0x53B2},
- {0xFA8F,0xFA8F,0x53DD},
- {0xFA90,0xFA90,0xFA0E}, /* FA90 */
- {0xFA91,0xFA91,0x549C},
- {0xFA92,0xFA92,0x548A},
- {0xFA93,0xFA93,0x54A9},
- {0xFA94,0xFA94,0x54FF},
- {0xFA95,0xFA95,0x5586},
- {0xFA96,0xFA96,0x5759},
- {0xFA97,0xFA97,0x5765},
- {0xFA98,0xFA98,0x57AC},
- {0xFA99,0xFA99,0x57C8},
- {0xFA9A,0xFA9A,0x57C7},
- {0xFA9B,0xFA9B,0xFA0F},
- {0xFA9C,0xFA9C,0xFA10},
- {0xFA9D,0xFA9D,0x589E},
- {0xFA9E,0xFA9E,0x58B2},
- {0xFA9F,0xFA9F,0x590B},
- {0xFAA0,0xFAA0,0x5953}, /* FAA0 */
- {0xFAA1,0xFAA1,0x595B},
- {0xFAA2,0xFAA2,0x595D},
- {0xFAA3,0xFAA3,0x5963},
- {0xFAA4,0xFAA4,0x59A4},
- {0xFAA5,0xFAA5,0x59BA},
- {0xFAA6,0xFAA6,0x5B56},
- {0xFAA7,0xFAA7,0x5BC0},
- {0xFAA8,0xFAA8,0x752F},
- {0xFAA9,0xFAA9,0x5BD8},
- {0xFAAA,0xFAAA,0x5BEC},
- {0xFAAB,0xFAAB,0x5C1E},
- {0xFAAC,0xFAAC,0x5CA6},
- {0xFAAD,0xFAAD,0x5CBA},
- {0xFAAE,0xFAAE,0x5CF5},
- {0xFAAF,0xFAAF,0x5D27},
- {0xFAB0,0xFAB0,0x5D53}, /* FAB0 */
- {0xFAB1,0xFAB1,0xFA11},
- {0xFAB2,0xFAB2,0x5D42},
- {0xFAB3,0xFAB3,0x5D6D},
- {0xFAB4,0xFAB4,0x5DB8},
- {0xFAB5,0xFAB5,0x5DB9},
- {0xFAB6,0xFAB6,0x5DD0},
- {0xFAB7,0xFAB7,0x5F21},
- {0xFAB8,0xFAB8,0x5F34},
- {0xFAB9,0xFAB9,0x5F67},
- {0xFABA,0xFABA,0x5FB7},
- {0xFABB,0xFABB,0x5FDE},
- {0xFABC,0xFABC,0x605D},
- {0xFABD,0xFABD,0x6085},
- {0xFABE,0xFABE,0x608A},
- {0xFABF,0xFABF,0x60DE},
- {0xFAC0,0xFAC0,0x60D5}, /* FAC0 */
- {0xFAC1,0xFAC1,0x6120},
- {0xFAC2,0xFAC2,0x60F2},
- {0xFAC3,0xFAC3,0x6111},
- {0xFAC4,0xFAC4,0x6137},
- {0xFAC5,0xFAC5,0x6130},
- {0xFAC6,0xFAC6,0x6198},
- {0xFAC7,0xFAC7,0x6213},
- {0xFAC8,0xFAC8,0x62A6},
- {0xFAC9,0xFAC9,0x63F5},
- {0xFACA,0xFACA,0x6460},
- {0xFACB,0xFACB,0x649D},
- {0xFACC,0xFACC,0x64CE},
- {0xFACD,0xFACD,0x654E},
- {0xFACE,0xFACE,0x6600},
- {0xFACF,0xFACF,0x6615},
- {0xFAD0,0xFAD0,0x663B}, /* FAD0 */
- {0xFAD1,0xFAD1,0x6609},
- {0xFAD2,0xFAD2,0x662E},
- {0xFAD3,0xFAD3,0x661E},
- {0xFAD4,0xFAD4,0x6624},
- {0xFAD5,0xFAD5,0x6665},
- {0xFAD6,0xFAD6,0x6657},
- {0xFAD7,0xFAD7,0x6659},
- {0xFAD8,0xFAD8,0xFA12},
- {0xFAD9,0xFAD9,0x6673},
- {0xFADA,0xFADA,0x6699},
- {0xFADB,0xFADB,0x66A0},
- {0xFADC,0xFADC,0x66B2},
- {0xFADD,0xFADD,0x66BF},
- {0xFADE,0xFADE,0x66FA},
- {0xFADF,0xFADF,0x670E},
- {0xFAE0,0xFAE0,0xF929}, /* FAE0 */
- {0xFAE1,0xFAE1,0x6766},
- {0xFAE2,0xFAE2,0x67BB},
- {0xFAE3,0xFAE3,0x6852},
- {0xFAE4,0xFAE4,0x67C0},
- {0xFAE5,0xFAE5,0x6801},
- {0xFAE6,0xFAE6,0x6844},
- {0xFAE7,0xFAE7,0x68CF},
- {0xFAE8,0xFAE8,0xFA13},
- {0xFAE9,0xFAE9,0x6968},
- {0xFAEA,0xFAEA,0xFA14},
- {0xFAEB,0xFAEB,0x6998},
- {0xFAEC,0xFAEC,0x69E2},
- {0xFAED,0xFAED,0x6A30},
- {0xFAEE,0xFAEE,0x6A6B},
- {0xFAEF,0xFAEF,0x6A46},
- {0xFAF0,0xFAF0,0x6A73}, /* FAF0 */
- {0xFAF1,0xFAF1,0x6A7E},
- {0xFAF2,0xFAF2,0x6AE2},
- {0xFAF3,0xFAF3,0x6AE4},
- {0xFAF4,0xFAF4,0x6BD6},
- {0xFAF5,0xFAF5,0x6C3F},
- {0xFAF6,0xFAF6,0x6C5C},
- {0xFAF7,0xFAF7,0x6C86},
- {0xFAF8,0xFAF8,0x6C6F},
- {0xFAF9,0xFAF9,0x6CDA},
- {0xFAFA,0xFAFA,0x6D04},
- {0xFAFB,0xFAFB,0x6D87},
- {0xFAFC,0xFAFC,0x6D6F},
- {0,0,0},
- {0,0,0},
- {0,0,0}
+ {0xFA4A,0xFA40}, /* FA40 */
+ {0xFA4B,0xFA41},
+ {0xFA4C,0xFA42},
+ {0xFA4D,0xFA43},
+ {0xFA4E,0xFA44},
+ {0xFA4F,0xFA45},
+ {0xFA50,0xFA46},
+ {0xFA51,0xFA47},
+ {0xFA52,0xFA48},
+ {0xFA53,0xFA49},
+ {0xFA4A,0xFA40},
+ {0xFA4B,0xFA41},
+ {0xFA4C,0xFA42},
+ {0xFA4D,0xFA43},
+ {0xFA4E,0xFA44},
+ {0xFA4F,0xFA45},
+ {0xFA50,0xFA46}, /* FA50 */
+ {0xFA51,0xFA47},
+ {0xFA52,0xFA48},
+ {0xFA53,0xFA49},
+ {0xFA54,0xFA54},
+ {0xFA55,0xFA55},
+ {0xFA56,0xFA56},
+ {0xFA57,0xFA57},
+ {0xFA58,0xFA58},
+ {0xFA59,0xFA59},
+ {0xFA5A,0xFA5A},
+ {0xFA5B,0xFA5B},
+ {0xFA5C,0xFA5C},
+ {0xFA5D,0xFA5D},
+ {0xFA5E,0xFA5E},
+ {0xFA5F,0xFA5F},
+ {0xFA60,0xFA60}, /* FA60 */
+ {0xFA61,0xFA61},
+ {0xFA62,0xFA62},
+ {0xFA63,0xFA63},
+ {0xFA64,0xFA64},
+ {0xFA65,0xFA65},
+ {0xFA66,0xFA66},
+ {0xFA67,0xFA67},
+ {0xFA68,0xFA68},
+ {0xFA69,0xFA69},
+ {0xFA6A,0xFA6A},
+ {0xFA6B,0xFA6B},
+ {0xFA6C,0xFA6C},
+ {0xFA6D,0xFA6D},
+ {0xFA6E,0xFA6E},
+ {0xFA6F,0xFA6F},
+ {0xFA70,0xFA70}, /* FA70 */
+ {0xFA71,0xFA71},
+ {0xFA72,0xFA72},
+ {0xFA73,0xFA73},
+ {0xFA74,0xFA74},
+ {0xFA75,0xFA75},
+ {0xFA76,0xFA76},
+ {0xFA77,0xFA77},
+ {0xFA78,0xFA78},
+ {0xFA79,0xFA79},
+ {0xFA7A,0xFA7A},
+ {0xFA7B,0xFA7B},
+ {0xFA7C,0xFA7C},
+ {0xFA7D,0xFA7D},
+ {0xFA7E,0xFA7E},
+ {0,0},
+ {0xFA80,0xFA80}, /* FA80 */
+ {0xFA81,0xFA81},
+ {0xFA82,0xFA82},
+ {0xFA83,0xFA83},
+ {0xFA84,0xFA84},
+ {0xFA85,0xFA85},
+ {0xFA86,0xFA86},
+ {0xFA87,0xFA87},
+ {0xFA88,0xFA88},
+ {0xFA89,0xFA89},
+ {0xFA8A,0xFA8A},
+ {0xFA8B,0xFA8B},
+ {0xFA8C,0xFA8C},
+ {0xFA8D,0xFA8D},
+ {0xFA8E,0xFA8E},
+ {0xFA8F,0xFA8F},
+ {0xFA90,0xFA90}, /* FA90 */
+ {0xFA91,0xFA91},
+ {0xFA92,0xFA92},
+ {0xFA93,0xFA93},
+ {0xFA94,0xFA94},
+ {0xFA95,0xFA95},
+ {0xFA96,0xFA96},
+ {0xFA97,0xFA97},
+ {0xFA98,0xFA98},
+ {0xFA99,0xFA99},
+ {0xFA9A,0xFA9A},
+ {0xFA9B,0xFA9B},
+ {0xFA9C,0xFA9C},
+ {0xFA9D,0xFA9D},
+ {0xFA9E,0xFA9E},
+ {0xFA9F,0xFA9F},
+ {0xFAA0,0xFAA0}, /* FAA0 */
+ {0xFAA1,0xFAA1},
+ {0xFAA2,0xFAA2},
+ {0xFAA3,0xFAA3},
+ {0xFAA4,0xFAA4},
+ {0xFAA5,0xFAA5},
+ {0xFAA6,0xFAA6},
+ {0xFAA7,0xFAA7},
+ {0xFAA8,0xFAA8},
+ {0xFAA9,0xFAA9},
+ {0xFAAA,0xFAAA},
+ {0xFAAB,0xFAAB},
+ {0xFAAC,0xFAAC},
+ {0xFAAD,0xFAAD},
+ {0xFAAE,0xFAAE},
+ {0xFAAF,0xFAAF},
+ {0xFAB0,0xFAB0}, /* FAB0 */
+ {0xFAB1,0xFAB1},
+ {0xFAB2,0xFAB2},
+ {0xFAB3,0xFAB3},
+ {0xFAB4,0xFAB4},
+ {0xFAB5,0xFAB5},
+ {0xFAB6,0xFAB6},
+ {0xFAB7,0xFAB7},
+ {0xFAB8,0xFAB8},
+ {0xFAB9,0xFAB9},
+ {0xFABA,0xFABA},
+ {0xFABB,0xFABB},
+ {0xFABC,0xFABC},
+ {0xFABD,0xFABD},
+ {0xFABE,0xFABE},
+ {0xFABF,0xFABF},
+ {0xFAC0,0xFAC0}, /* FAC0 */
+ {0xFAC1,0xFAC1},
+ {0xFAC2,0xFAC2},
+ {0xFAC3,0xFAC3},
+ {0xFAC4,0xFAC4},
+ {0xFAC5,0xFAC5},
+ {0xFAC6,0xFAC6},
+ {0xFAC7,0xFAC7},
+ {0xFAC8,0xFAC8},
+ {0xFAC9,0xFAC9},
+ {0xFACA,0xFACA},
+ {0xFACB,0xFACB},
+ {0xFACC,0xFACC},
+ {0xFACD,0xFACD},
+ {0xFACE,0xFACE},
+ {0xFACF,0xFACF},
+ {0xFAD0,0xFAD0}, /* FAD0 */
+ {0xFAD1,0xFAD1},
+ {0xFAD2,0xFAD2},
+ {0xFAD3,0xFAD3},
+ {0xFAD4,0xFAD4},
+ {0xFAD5,0xFAD5},
+ {0xFAD6,0xFAD6},
+ {0xFAD7,0xFAD7},
+ {0xFAD8,0xFAD8},
+ {0xFAD9,0xFAD9},
+ {0xFADA,0xFADA},
+ {0xFADB,0xFADB},
+ {0xFADC,0xFADC},
+ {0xFADD,0xFADD},
+ {0xFADE,0xFADE},
+ {0xFADF,0xFADF},
+ {0xFAE0,0xFAE0}, /* FAE0 */
+ {0xFAE1,0xFAE1},
+ {0xFAE2,0xFAE2},
+ {0xFAE3,0xFAE3},
+ {0xFAE4,0xFAE4},
+ {0xFAE5,0xFAE5},
+ {0xFAE6,0xFAE6},
+ {0xFAE7,0xFAE7},
+ {0xFAE8,0xFAE8},
+ {0xFAE9,0xFAE9},
+ {0xFAEA,0xFAEA},
+ {0xFAEB,0xFAEB},
+ {0xFAEC,0xFAEC},
+ {0xFAED,0xFAED},
+ {0xFAEE,0xFAEE},
+ {0xFAEF,0xFAEF},
+ {0xFAF0,0xFAF0}, /* FAF0 */
+ {0xFAF1,0xFAF1},
+ {0xFAF2,0xFAF2},
+ {0xFAF3,0xFAF3},
+ {0xFAF4,0xFAF4},
+ {0xFAF5,0xFAF5},
+ {0xFAF6,0xFAF6},
+ {0xFAF7,0xFAF7},
+ {0xFAF8,0xFAF8},
+ {0xFAF9,0xFAF9},
+ {0xFAFA,0xFAFA},
+ {0xFAFB,0xFAFB},
+ {0xFAFC,0xFAFC},
+ {0,0},
+ {0,0},
+ {0,0}
};
-static MY_UNICASE_CHARACTER *my_caseinfo_pages_cp932[256]=
+static const MY_CASEFOLD_CHARACTER *my_casefold_pages_cp932[256]=
{
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 0 */
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
@@ -1703,10 +1703,11 @@ static MY_UNICASE_CHARACTER *my_caseinfo_pages_cp932[256]=
};
-MY_UNICASE_INFO my_caseinfo_cp932=
+MY_CASEFOLD_INFO my_casefold_cp932=
{
0xFFFF,
- my_caseinfo_pages_cp932
+ my_casefold_pages_cp932,
+ NULL /* ws */
};
@@ -34684,7 +34685,9 @@ static MY_COLLATION_HANDLER my_collation_handler_cp932_japanese_ci=
my_hash_sort_simple,
my_propagate_simple,
my_min_str_mb_simple,
- my_max_str_mb_simple
+ my_max_str_mb_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
@@ -34703,7 +34706,9 @@ static MY_COLLATION_HANDLER my_collation_handler_cp932_bin=
my_hash_sort_mb_bin,
my_propagate_simple,
my_min_str_mb_simple,
- my_max_str_mb_simple
+ my_max_str_mb_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
@@ -34722,7 +34727,9 @@ static MY_COLLATION_HANDLER my_collation_handler_cp932_japanese_nopad_ci=
my_hash_sort_simple_nopad,
my_propagate_simple,
my_min_str_mb_simple_nopad,
- my_max_str_mb_simple
+ my_max_str_mb_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
@@ -34741,7 +34748,9 @@ static MY_COLLATION_HANDLER my_collation_handler_cp932_nopad_bin=
my_hash_sort_mb_nopad_bin,
my_propagate_simple,
my_min_str_mb_simple_nopad,
- my_max_str_mb_simple
+ my_max_str_mb_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
@@ -34775,7 +34784,9 @@ static MY_CHARSET_HANDLER my_charset_handler=
my_well_formed_char_length_cp932,
my_copy_fix_mb,
my_native_to_mb_cp932,
- my_wc_to_printable_generic
+ my_wc_to_printable_generic,
+ my_casefold_multiply_1,
+ my_casefold_multiply_1
};
@@ -34794,19 +34805,17 @@ struct charset_info_st my_charset_cp932_japanese_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_caseinfo_cp932, /* caseinfo */
+ &my_casefold_cp932, /* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
2, /* mbmaxlen */
0, /* min_sort_char */
0xFCFC, /* max_sort_char */
' ', /* pad char */
1, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_handler,
&my_collation_handler_cp932_japanese_ci
};
@@ -34826,19 +34835,17 @@ struct charset_info_st my_charset_cp932_bin=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_caseinfo_cp932, /* caseinfo */
+ &my_casefold_cp932, /* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
2, /* mbmaxlen */
0, /* min_sort_char */
0xFCFC, /* max_sort_char */
' ', /* pad char */
1, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_handler,
&my_collation_handler_cp932_bin
};
@@ -34859,19 +34866,17 @@ struct charset_info_st my_charset_cp932_japanese_nopad_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_caseinfo_cp932, /* caseinfo */
+ &my_casefold_cp932, /* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
2, /* mbmaxlen */
0, /* min_sort_char */
0xFCFC, /* max_sort_char */
' ', /* pad char */
1, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_handler,
&my_collation_handler_cp932_japanese_nopad_ci
};
@@ -34891,19 +34896,17 @@ struct charset_info_st my_charset_cp932_nopad_bin=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_caseinfo_cp932, /* caseinfo */
+ &my_casefold_cp932, /* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
2, /* mbmaxlen */
0, /* min_sort_char */
0xFCFC, /* max_sort_char */
' ', /* pad char */
1, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_handler,
&my_collation_handler_cp932_nopad_bin
};
diff --git a/strings/ctype-czech.c b/strings/ctype-czech.c
index 8a3db7aba67..64aff2e7be0 100644
--- a/strings/ctype-czech.c
+++ b/strings/ctype-czech.c
@@ -596,7 +596,9 @@ static MY_COLLATION_HANDLER my_collation_latin2_czech_cs_handler =
my_hash_sort_simple,
my_propagate_simple,
my_min_str_8bit_simple,
- my_max_str_8bit_simple
+ my_max_str_8bit_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
struct charset_info_st my_charset_latin2_czech_cs =
@@ -615,19 +617,17 @@ struct charset_info_st my_charset_latin2_czech_cs =
NULL, /* uca */
tab_8859_2_uni, /* tab_to_uni */
idx_uni_8859_2, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ NULL, /* casefold */
NULL, /* state_map */
NULL, /* ident_map */
4, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
0xAE, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 4, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S4,
&my_charset_8bit_handler,
&my_collation_latin2_czech_cs_handler
};
diff --git a/strings/ctype-euc_kr.c b/strings/ctype-euc_kr.c
index 1f62ebaf636..dd6ab60bd3a 100644
--- a/strings/ctype-euc_kr.c
+++ b/strings/ctype-euc_kr.c
@@ -213,1237 +213,1237 @@ static const uchar sort_order_euc_kr[]=
#include "ctype-mb.inl"
-static MY_UNICASE_CHARACTER cA3[256]=
+static const MY_CASEFOLD_CHARACTER cA3[256]=
{
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0xA340,0xA340,0x003F}, /* A340 */
- {0xA341,0xA341,0xC971},
- {0xA342,0xA342,0xC972},
- {0xA343,0xA343,0xC973},
- {0xA344,0xA344,0xC975},
- {0xA345,0xA345,0xC976},
- {0xA346,0xA346,0xC977},
- {0xA347,0xA347,0xC978},
- {0xA348,0xA348,0xC979},
- {0xA349,0xA349,0xC97A},
- {0xA34A,0xA34A,0xC97B},
- {0xA34B,0xA34B,0xC97D},
- {0xA34C,0xA34C,0xC97E},
- {0xA34D,0xA34D,0xC97F},
- {0xA34E,0xA34E,0xC980},
- {0xA34F,0xA34F,0xC981},
- {0xA350,0xA350,0xC982}, /* A350 */
- {0xA351,0xA351,0xC983},
- {0xA352,0xA352,0xC984},
- {0xA353,0xA353,0xC985},
- {0xA354,0xA354,0xC986},
- {0xA355,0xA355,0xC987},
- {0xA356,0xA356,0xC98A},
- {0xA357,0xA357,0xC98B},
- {0xA358,0xA358,0xC98D},
- {0xA359,0xA359,0xC98E},
- {0xA35A,0xA35A,0xC98F},
- {0xA35B,0xA35B,0x003F},
- {0xA35C,0xA35C,0x003F},
- {0xA35D,0xA35D,0x003F},
- {0xA35E,0xA35E,0x003F},
- {0xA35F,0xA35F,0x003F},
- {0xA360,0xA360,0x003F}, /* A360 */
- {0xA361,0xA361,0xC991},
- {0xA362,0xA362,0xC992},
- {0xA363,0xA363,0xC993},
- {0xA364,0xA364,0xC994},
- {0xA365,0xA365,0xC995},
- {0xA366,0xA366,0xC996},
- {0xA367,0xA367,0xC997},
- {0xA368,0xA368,0xC99A},
- {0xA369,0xA369,0xC99C},
- {0xA36A,0xA36A,0xC99E},
- {0xA36B,0xA36B,0xC99F},
- {0xA36C,0xA36C,0xC9A0},
- {0xA36D,0xA36D,0xC9A1},
- {0xA36E,0xA36E,0xC9A2},
- {0xA36F,0xA36F,0xC9A3},
- {0xA370,0xA370,0xC9A4}, /* A370 */
- {0xA371,0xA371,0xC9A5},
- {0xA372,0xA372,0xC9A6},
- {0xA373,0xA373,0xC9A7},
- {0xA374,0xA374,0xC9A8},
- {0xA375,0xA375,0xC9A9},
- {0xA376,0xA376,0xC9AA},
- {0xA377,0xA377,0xC9AB},
- {0xA378,0xA378,0xC9AC},
- {0xA379,0xA379,0xC9AD},
- {0xA37A,0xA37A,0xC9AE},
- {0xA37B,0xA37B,0x003F},
- {0xA37C,0xA37C,0x003F},
- {0xA37D,0xA37D,0x003F},
- {0xA37E,0xA37E,0x003F},
- {0xA37F,0xA37F,0x003F},
- {0xA380,0xA380,0x003F}, /* A380 */
- {0xA381,0xA381,0xC9AF},
- {0xA382,0xA382,0xC9B0},
- {0xA383,0xA383,0xC9B1},
- {0xA384,0xA384,0xC9B2},
- {0xA385,0xA385,0xC9B3},
- {0xA386,0xA386,0xC9B4},
- {0xA387,0xA387,0xC9B5},
- {0xA388,0xA388,0xC9B6},
- {0xA389,0xA389,0xC9B7},
- {0xA38A,0xA38A,0xC9B8},
- {0xA38B,0xA38B,0xC9B9},
- {0xA38C,0xA38C,0xC9BA},
- {0xA38D,0xA38D,0xC9BB},
- {0xA38E,0xA38E,0xC9BC},
- {0xA38F,0xA38F,0xC9BD},
- {0xA390,0xA390,0xC9BE}, /* A390 */
- {0xA391,0xA391,0xC9BF},
- {0xA392,0xA392,0xC9C2},
- {0xA393,0xA393,0xC9C3},
- {0xA394,0xA394,0xC9C5},
- {0xA395,0xA395,0xC9C6},
- {0xA396,0xA396,0xC9C9},
- {0xA397,0xA397,0xC9CB},
- {0xA398,0xA398,0xC9CC},
- {0xA399,0xA399,0xC9CD},
- {0xA39A,0xA39A,0xC9CE},
- {0xA39B,0xA39B,0xC9CF},
- {0xA39C,0xA39C,0xC9D2},
- {0xA39D,0xA39D,0xC9D4},
- {0xA39E,0xA39E,0xC9D7},
- {0xA39F,0xA39F,0xC9D8},
- {0xA3A0,0xA3A0,0xC9DB}, /* A3A0 */
- {0xA3A1,0xA3A1,0xFF01},
- {0xA3A2,0xA3A2,0xFF02},
- {0xA3A3,0xA3A3,0xFF03},
- {0xA3A4,0xA3A4,0xFF04},
- {0xA3A5,0xA3A5,0xFF05},
- {0xA3A6,0xA3A6,0xFF06},
- {0xA3A7,0xA3A7,0xFF07},
- {0xA3A8,0xA3A8,0xFF08},
- {0xA3A9,0xA3A9,0xFF09},
- {0xA3AA,0xA3AA,0xFF0A},
- {0xA3AB,0xA3AB,0xFF0B},
- {0xA3AC,0xA3AC,0xFF0C},
- {0xA3AD,0xA3AD,0xFF0D},
- {0xA3AE,0xA3AE,0xFF0E},
- {0xA3AF,0xA3AF,0xFF0F},
- {0xA3B0,0xA3B0,0xFF10}, /* A3B0 */
- {0xA3B1,0xA3B1,0xFF11},
- {0xA3B2,0xA3B2,0xFF12},
- {0xA3B3,0xA3B3,0xFF13},
- {0xA3B4,0xA3B4,0xFF14},
- {0xA3B5,0xA3B5,0xFF15},
- {0xA3B6,0xA3B6,0xFF16},
- {0xA3B7,0xA3B7,0xFF17},
- {0xA3B8,0xA3B8,0xFF18},
- {0xA3B9,0xA3B9,0xFF19},
- {0xA3BA,0xA3BA,0xFF1A},
- {0xA3BB,0xA3BB,0xFF1B},
- {0xA3BC,0xA3BC,0xFF1C},
- {0xA3BD,0xA3BD,0xFF1D},
- {0xA3BE,0xA3BE,0xFF1E},
- {0xA3BF,0xA3BF,0xFF1F},
- {0xA3C0,0xA3C0,0xFF20}, /* A3C0 */
- {0xA3C1,0xA3E1,0xFF21},
- {0xA3C2,0xA3E2,0xFF22},
- {0xA3C3,0xA3E3,0xFF23},
- {0xA3C4,0xA3E4,0xFF24},
- {0xA3C5,0xA3E5,0xFF25},
- {0xA3C6,0xA3E6,0xFF26},
- {0xA3C7,0xA3E7,0xFF27},
- {0xA3C8,0xA3E8,0xFF28},
- {0xA3C9,0xA3E9,0xFF29},
- {0xA3CA,0xA3EA,0xFF2A},
- {0xA3CB,0xA3EB,0xFF2B},
- {0xA3CC,0xA3EC,0xFF2C},
- {0xA3CD,0xA3ED,0xFF2D},
- {0xA3CE,0xA3EE,0xFF2E},
- {0xA3CF,0xA3EF,0xFF2F},
- {0xA3D0,0xA3F0,0xFF30}, /* A3D0 */
- {0xA3D1,0xA3F1,0xFF31},
- {0xA3D2,0xA3F2,0xFF32},
- {0xA3D3,0xA3F3,0xFF33},
- {0xA3D4,0xA3F4,0xFF34},
- {0xA3D5,0xA3F5,0xFF35},
- {0xA3D6,0xA3F6,0xFF36},
- {0xA3D7,0xA3F7,0xFF37},
- {0xA3D8,0xA3F8,0xFF38},
- {0xA3D9,0xA3F9,0xFF39},
- {0xA3DA,0xA3FA,0xFF3A},
- {0xA3DB,0xA3DB,0xFF3B},
- {0xA3DC,0xA3DC,0xFFE6},
- {0xA3DD,0xA3DD,0xFF3D},
- {0xA3DE,0xA3DE,0xFF3E},
- {0xA3DF,0xA3DF,0xFF3F},
- {0xA3E0,0xA3E0,0xFF40}, /* A3E0 */
- {0xA3C1,0xA3E1,0xFF41},
- {0xA3C2,0xA3E2,0xFF42},
- {0xA3C3,0xA3E3,0xFF43},
- {0xA3C4,0xA3E4,0xFF44},
- {0xA3C5,0xA3E5,0xFF45},
- {0xA3C6,0xA3E6,0xFF46},
- {0xA3C7,0xA3E7,0xFF47},
- {0xA3C8,0xA3E8,0xFF48},
- {0xA3C9,0xA3E9,0xFF49},
- {0xA3CA,0xA3EA,0xFF4A},
- {0xA3CB,0xA3EB,0xFF4B},
- {0xA3CC,0xA3EC,0xFF4C},
- {0xA3CD,0xA3ED,0xFF4D},
- {0xA3CE,0xA3EE,0xFF4E},
- {0xA3CF,0xA3EF,0xFF4F},
- {0xA3D0,0xA3F0,0xFF50}, /* A3F0 */
- {0xA3D1,0xA3F1,0xFF51},
- {0xA3D2,0xA3F2,0xFF52},
- {0xA3D3,0xA3F3,0xFF53},
- {0xA3D4,0xA3F4,0xFF54},
- {0xA3D5,0xA3F5,0xFF55},
- {0xA3D6,0xA3F6,0xFF56},
- {0xA3D7,0xA3F7,0xFF57},
- {0xA3D8,0xA3F8,0xFF58},
- {0xA3D9,0xA3F9,0xFF59},
- {0xA3DA,0xA3FA,0xFF5A},
- {0xA3FB,0xA3FB,0xFF5B},
- {0xA3FC,0xA3FC,0xFF5C},
- {0xA3FD,0xA3FD,0xFF5D},
- {0xA3FE,0xA3FE,0xFFE3},
- {0xA3FF,0xA3FF,0x003F}
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx00 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx10 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx20 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx30 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0xA340,0xA340}, /* A340 */
+ {0xA341,0xA341},
+ {0xA342,0xA342},
+ {0xA343,0xA343},
+ {0xA344,0xA344},
+ {0xA345,0xA345},
+ {0xA346,0xA346},
+ {0xA347,0xA347},
+ {0xA348,0xA348},
+ {0xA349,0xA349},
+ {0xA34A,0xA34A},
+ {0xA34B,0xA34B},
+ {0xA34C,0xA34C},
+ {0xA34D,0xA34D},
+ {0xA34E,0xA34E},
+ {0xA34F,0xA34F},
+ {0xA350,0xA350}, /* A350 */
+ {0xA351,0xA351},
+ {0xA352,0xA352},
+ {0xA353,0xA353},
+ {0xA354,0xA354},
+ {0xA355,0xA355},
+ {0xA356,0xA356},
+ {0xA357,0xA357},
+ {0xA358,0xA358},
+ {0xA359,0xA359},
+ {0xA35A,0xA35A},
+ {0xA35B,0xA35B},
+ {0xA35C,0xA35C},
+ {0xA35D,0xA35D},
+ {0xA35E,0xA35E},
+ {0xA35F,0xA35F},
+ {0xA360,0xA360}, /* A360 */
+ {0xA361,0xA361},
+ {0xA362,0xA362},
+ {0xA363,0xA363},
+ {0xA364,0xA364},
+ {0xA365,0xA365},
+ {0xA366,0xA366},
+ {0xA367,0xA367},
+ {0xA368,0xA368},
+ {0xA369,0xA369},
+ {0xA36A,0xA36A},
+ {0xA36B,0xA36B},
+ {0xA36C,0xA36C},
+ {0xA36D,0xA36D},
+ {0xA36E,0xA36E},
+ {0xA36F,0xA36F},
+ {0xA370,0xA370}, /* A370 */
+ {0xA371,0xA371},
+ {0xA372,0xA372},
+ {0xA373,0xA373},
+ {0xA374,0xA374},
+ {0xA375,0xA375},
+ {0xA376,0xA376},
+ {0xA377,0xA377},
+ {0xA378,0xA378},
+ {0xA379,0xA379},
+ {0xA37A,0xA37A},
+ {0xA37B,0xA37B},
+ {0xA37C,0xA37C},
+ {0xA37D,0xA37D},
+ {0xA37E,0xA37E},
+ {0xA37F,0xA37F},
+ {0xA380,0xA380}, /* A380 */
+ {0xA381,0xA381},
+ {0xA382,0xA382},
+ {0xA383,0xA383},
+ {0xA384,0xA384},
+ {0xA385,0xA385},
+ {0xA386,0xA386},
+ {0xA387,0xA387},
+ {0xA388,0xA388},
+ {0xA389,0xA389},
+ {0xA38A,0xA38A},
+ {0xA38B,0xA38B},
+ {0xA38C,0xA38C},
+ {0xA38D,0xA38D},
+ {0xA38E,0xA38E},
+ {0xA38F,0xA38F},
+ {0xA390,0xA390}, /* A390 */
+ {0xA391,0xA391},
+ {0xA392,0xA392},
+ {0xA393,0xA393},
+ {0xA394,0xA394},
+ {0xA395,0xA395},
+ {0xA396,0xA396},
+ {0xA397,0xA397},
+ {0xA398,0xA398},
+ {0xA399,0xA399},
+ {0xA39A,0xA39A},
+ {0xA39B,0xA39B},
+ {0xA39C,0xA39C},
+ {0xA39D,0xA39D},
+ {0xA39E,0xA39E},
+ {0xA39F,0xA39F},
+ {0xA3A0,0xA3A0}, /* A3A0 */
+ {0xA3A1,0xA3A1},
+ {0xA3A2,0xA3A2},
+ {0xA3A3,0xA3A3},
+ {0xA3A4,0xA3A4},
+ {0xA3A5,0xA3A5},
+ {0xA3A6,0xA3A6},
+ {0xA3A7,0xA3A7},
+ {0xA3A8,0xA3A8},
+ {0xA3A9,0xA3A9},
+ {0xA3AA,0xA3AA},
+ {0xA3AB,0xA3AB},
+ {0xA3AC,0xA3AC},
+ {0xA3AD,0xA3AD},
+ {0xA3AE,0xA3AE},
+ {0xA3AF,0xA3AF},
+ {0xA3B0,0xA3B0}, /* A3B0 */
+ {0xA3B1,0xA3B1},
+ {0xA3B2,0xA3B2},
+ {0xA3B3,0xA3B3},
+ {0xA3B4,0xA3B4},
+ {0xA3B5,0xA3B5},
+ {0xA3B6,0xA3B6},
+ {0xA3B7,0xA3B7},
+ {0xA3B8,0xA3B8},
+ {0xA3B9,0xA3B9},
+ {0xA3BA,0xA3BA},
+ {0xA3BB,0xA3BB},
+ {0xA3BC,0xA3BC},
+ {0xA3BD,0xA3BD},
+ {0xA3BE,0xA3BE},
+ {0xA3BF,0xA3BF},
+ {0xA3C0,0xA3C0}, /* A3C0 */
+ {0xA3C1,0xA3E1},
+ {0xA3C2,0xA3E2},
+ {0xA3C3,0xA3E3},
+ {0xA3C4,0xA3E4},
+ {0xA3C5,0xA3E5},
+ {0xA3C6,0xA3E6},
+ {0xA3C7,0xA3E7},
+ {0xA3C8,0xA3E8},
+ {0xA3C9,0xA3E9},
+ {0xA3CA,0xA3EA},
+ {0xA3CB,0xA3EB},
+ {0xA3CC,0xA3EC},
+ {0xA3CD,0xA3ED},
+ {0xA3CE,0xA3EE},
+ {0xA3CF,0xA3EF},
+ {0xA3D0,0xA3F0}, /* A3D0 */
+ {0xA3D1,0xA3F1},
+ {0xA3D2,0xA3F2},
+ {0xA3D3,0xA3F3},
+ {0xA3D4,0xA3F4},
+ {0xA3D5,0xA3F5},
+ {0xA3D6,0xA3F6},
+ {0xA3D7,0xA3F7},
+ {0xA3D8,0xA3F8},
+ {0xA3D9,0xA3F9},
+ {0xA3DA,0xA3FA},
+ {0xA3DB,0xA3DB},
+ {0xA3DC,0xA3DC},
+ {0xA3DD,0xA3DD},
+ {0xA3DE,0xA3DE},
+ {0xA3DF,0xA3DF},
+ {0xA3E0,0xA3E0}, /* A3E0 */
+ {0xA3C1,0xA3E1},
+ {0xA3C2,0xA3E2},
+ {0xA3C3,0xA3E3},
+ {0xA3C4,0xA3E4},
+ {0xA3C5,0xA3E5},
+ {0xA3C6,0xA3E6},
+ {0xA3C7,0xA3E7},
+ {0xA3C8,0xA3E8},
+ {0xA3C9,0xA3E9},
+ {0xA3CA,0xA3EA},
+ {0xA3CB,0xA3EB},
+ {0xA3CC,0xA3EC},
+ {0xA3CD,0xA3ED},
+ {0xA3CE,0xA3EE},
+ {0xA3CF,0xA3EF},
+ {0xA3D0,0xA3F0}, /* A3F0 */
+ {0xA3D1,0xA3F1},
+ {0xA3D2,0xA3F2},
+ {0xA3D3,0xA3F3},
+ {0xA3D4,0xA3F4},
+ {0xA3D5,0xA3F5},
+ {0xA3D6,0xA3F6},
+ {0xA3D7,0xA3F7},
+ {0xA3D8,0xA3F8},
+ {0xA3D9,0xA3F9},
+ {0xA3DA,0xA3FA},
+ {0xA3FB,0xA3FB},
+ {0xA3FC,0xA3FC},
+ {0xA3FD,0xA3FD},
+ {0xA3FE,0xA3FE},
+ {0xA3FF,0xA3FF}
};
-static MY_UNICASE_CHARACTER cA5[256]=
+static const MY_CASEFOLD_CHARACTER cA5[256]=
{
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0xA540,0xA540,0x003F}, /* A540 */
- {0xA541,0xA541,0xCA47},
- {0xA542,0xA542,0xCA48},
- {0xA543,0xA543,0xCA49},
- {0xA544,0xA544,0xCA4A},
- {0xA545,0xA545,0xCA4B},
- {0xA546,0xA546,0xCA4E},
- {0xA547,0xA547,0xCA4F},
- {0xA548,0xA548,0xCA51},
- {0xA549,0xA549,0xCA52},
- {0xA54A,0xA54A,0xCA53},
- {0xA54B,0xA54B,0xCA55},
- {0xA54C,0xA54C,0xCA56},
- {0xA54D,0xA54D,0xCA57},
- {0xA54E,0xA54E,0xCA58},
- {0xA54F,0xA54F,0xCA59},
- {0xA550,0xA550,0xCA5A}, /* A550 */
- {0xA551,0xA551,0xCA5B},
- {0xA552,0xA552,0xCA5E},
- {0xA553,0xA553,0xCA62},
- {0xA554,0xA554,0xCA63},
- {0xA555,0xA555,0xCA64},
- {0xA556,0xA556,0xCA65},
- {0xA557,0xA557,0xCA66},
- {0xA558,0xA558,0xCA67},
- {0xA559,0xA559,0xCA69},
- {0xA55A,0xA55A,0xCA6A},
- {0xA55B,0xA55B,0x003F},
- {0xA55C,0xA55C,0x003F},
- {0xA55D,0xA55D,0x003F},
- {0xA55E,0xA55E,0x003F},
- {0xA55F,0xA55F,0x003F},
- {0xA560,0xA560,0x003F}, /* A560 */
- {0xA561,0xA561,0xCA6B},
- {0xA562,0xA562,0xCA6C},
- {0xA563,0xA563,0xCA6D},
- {0xA564,0xA564,0xCA6E},
- {0xA565,0xA565,0xCA6F},
- {0xA566,0xA566,0xCA70},
- {0xA567,0xA567,0xCA71},
- {0xA568,0xA568,0xCA72},
- {0xA569,0xA569,0xCA73},
- {0xA56A,0xA56A,0xCA74},
- {0xA56B,0xA56B,0xCA75},
- {0xA56C,0xA56C,0xCA76},
- {0xA56D,0xA56D,0xCA77},
- {0xA56E,0xA56E,0xCA78},
- {0xA56F,0xA56F,0xCA79},
- {0xA570,0xA570,0xCA7A}, /* A570 */
- {0xA571,0xA571,0xCA7B},
- {0xA572,0xA572,0xCA7C},
- {0xA573,0xA573,0xCA7E},
- {0xA574,0xA574,0xCA7F},
- {0xA575,0xA575,0xCA80},
- {0xA576,0xA576,0xCA81},
- {0xA577,0xA577,0xCA82},
- {0xA578,0xA578,0xCA83},
- {0xA579,0xA579,0xCA85},
- {0xA57A,0xA57A,0xCA86},
- {0xA57B,0xA57B,0x003F},
- {0xA57C,0xA57C,0x003F},
- {0xA57D,0xA57D,0x003F},
- {0xA57E,0xA57E,0x003F},
- {0xA57F,0xA57F,0x003F},
- {0xA580,0xA580,0x003F}, /* A580 */
- {0xA581,0xA581,0xCA87},
- {0xA582,0xA582,0xCA88},
- {0xA583,0xA583,0xCA89},
- {0xA584,0xA584,0xCA8A},
- {0xA585,0xA585,0xCA8B},
- {0xA586,0xA586,0xCA8C},
- {0xA587,0xA587,0xCA8D},
- {0xA588,0xA588,0xCA8E},
- {0xA589,0xA589,0xCA8F},
- {0xA58A,0xA58A,0xCA90},
- {0xA58B,0xA58B,0xCA91},
- {0xA58C,0xA58C,0xCA92},
- {0xA58D,0xA58D,0xCA93},
- {0xA58E,0xA58E,0xCA94},
- {0xA58F,0xA58F,0xCA95},
- {0xA590,0xA590,0xCA96}, /* A590 */
- {0xA591,0xA591,0xCA97},
- {0xA592,0xA592,0xCA99},
- {0xA593,0xA593,0xCA9A},
- {0xA594,0xA594,0xCA9B},
- {0xA595,0xA595,0xCA9C},
- {0xA596,0xA596,0xCA9D},
- {0xA597,0xA597,0xCA9E},
- {0xA598,0xA598,0xCA9F},
- {0xA599,0xA599,0xCAA0},
- {0xA59A,0xA59A,0xCAA1},
- {0xA59B,0xA59B,0xCAA2},
- {0xA59C,0xA59C,0xCAA3},
- {0xA59D,0xA59D,0xCAA4},
- {0xA59E,0xA59E,0xCAA5},
- {0xA59F,0xA59F,0xCAA6},
- {0xA5A0,0xA5A0,0xCAA7}, /* A5A0 */
- {0xA5B0,0xA5A1,0x2170},
- {0xA5B1,0xA5A2,0x2171},
- {0xA5B2,0xA5A3,0x2172},
- {0xA5B3,0xA5A4,0x2173},
- {0xA5B4,0xA5A5,0x2174},
- {0xA5B5,0xA5A6,0x2175},
- {0xA5B6,0xA5A7,0x2176},
- {0xA5B7,0xA5A8,0x2177},
- {0xA5B8,0xA5A9,0x2178},
- {0xA5B9,0xA5AA,0x2179},
- {0xA5AB,0xA5AB,0x003F},
- {0xA5AC,0xA5AC,0x003F},
- {0xA5AD,0xA5AD,0x003F},
- {0xA5AE,0xA5AE,0x003F},
- {0xA5AF,0xA5AF,0x003F},
- {0xA5B0,0xA5A1,0x2160}, /* A5B0 */
- {0xA5B1,0xA5A2,0x2161},
- {0xA5B2,0xA5A3,0x2162},
- {0xA5B3,0xA5A4,0x2163},
- {0xA5B4,0xA5A5,0x2164},
- {0xA5B5,0xA5A6,0x2165},
- {0xA5B6,0xA5A7,0x2166},
- {0xA5B7,0xA5A8,0x2167},
- {0xA5B8,0xA5A9,0x2168},
- {0xA5B9,0xA5AA,0x2169},
- {0xA5BA,0xA5BA,0x003F},
- {0xA5BB,0xA5BB,0x003F},
- {0xA5BC,0xA5BC,0x003F},
- {0xA5BD,0xA5BD,0x003F},
- {0xA5BE,0xA5BE,0x003F},
- {0xA5BF,0xA5BF,0x003F},
- {0xA5C0,0xA5C0,0x003F}, /* A5C0 */
- {0xA5C1,0xA5E1,0x0391},
- {0xA5C2,0xA5E2,0x0392},
- {0xA5C3,0xA5E3,0x0393},
- {0xA5C4,0xA5E4,0x0394},
- {0xA5C5,0xA5E5,0x0395},
- {0xA5C6,0xA5E6,0x0396},
- {0xA5C7,0xA5E7,0x0397},
- {0xA5C8,0xA5E8,0x0398},
- {0xA5C9,0xA5E9,0x0399},
- {0xA5CA,0xA5EA,0x039A},
- {0xA5CB,0xA5EB,0x039B},
- {0xA5CC,0xA5EC,0x039C},
- {0xA5CD,0xA5ED,0x039D},
- {0xA5CE,0xA5EE,0x039E},
- {0xA5CF,0xA5EF,0x039F},
- {0xA5D0,0xA5F0,0x03A0}, /* A5D0 */
- {0xA5D1,0xA5F1,0x03A1},
- {0xA5D2,0xA5F2,0x03A3},
- {0xA5D3,0xA5F3,0x03A4},
- {0xA5D4,0xA5F4,0x03A5},
- {0xA5D5,0xA5F5,0x03A6},
- {0xA5D6,0xA5F6,0x03A7},
- {0xA5D7,0xA5F7,0x03A8},
- {0xA5D8,0xA5F8,0x03A9},
- {0xA5D9,0xA5D9,0x003F},
- {0xA5DA,0xA5DA,0x003F},
- {0xA5DB,0xA5DB,0x003F},
- {0xA5DC,0xA5DC,0x003F},
- {0xA5DD,0xA5DD,0x003F},
- {0xA5DE,0xA5DE,0x003F},
- {0xA5DF,0xA5DF,0x003F},
- {0xA5E0,0xA5E0,0x003F}, /* A5E0 */
- {0xA5C1,0xA5E1,0x03B1},
- {0xA5C2,0xA5E2,0x03B2},
- {0xA5C3,0xA5E3,0x03B3},
- {0xA5C4,0xA5E4,0x03B4},
- {0xA5C5,0xA5E5,0x03B5},
- {0xA5C6,0xA5E6,0x03B6},
- {0xA5C7,0xA5E7,0x03B7},
- {0xA5C8,0xA5E8,0x03B8},
- {0xA5C9,0xA5E9,0x03B9},
- {0xA5CA,0xA5EA,0x03BA},
- {0xA5CB,0xA5EB,0x03BB},
- {0xA5CC,0xA5EC,0x03BC},
- {0xA5CD,0xA5ED,0x03BD},
- {0xA5CE,0xA5EE,0x03BE},
- {0xA5CF,0xA5EF,0x03BF},
- {0xA5D0,0xA5F0,0x03C0}, /* A5F0 */
- {0xA5D1,0xA5F1,0x03C1},
- {0xA5D2,0xA5F2,0x03C3},
- {0xA5D3,0xA5F3,0x03C4},
- {0xA5D4,0xA5F4,0x03C5},
- {0xA5D5,0xA5F5,0x03C6},
- {0xA5D6,0xA5F6,0x03C7},
- {0xA5D7,0xA5F7,0x03C8},
- {0xA5D8,0xA5F8,0x03C9},
- {0xA5F9,0xA5F9,0x003F},
- {0xA5FA,0xA5FA,0x003F},
- {0xA5FB,0xA5FB,0x003F},
- {0xA5FC,0xA5FC,0x003F},
- {0xA5FD,0xA5FD,0x003F},
- {0xA5FE,0xA5FE,0x003F},
- {0xA5FF,0xA5FF,0x003F}
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx00 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx10 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx20 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx30 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0xA540,0xA540}, /* A540 */
+ {0xA541,0xA541},
+ {0xA542,0xA542},
+ {0xA543,0xA543},
+ {0xA544,0xA544},
+ {0xA545,0xA545},
+ {0xA546,0xA546},
+ {0xA547,0xA547},
+ {0xA548,0xA548},
+ {0xA549,0xA549},
+ {0xA54A,0xA54A},
+ {0xA54B,0xA54B},
+ {0xA54C,0xA54C},
+ {0xA54D,0xA54D},
+ {0xA54E,0xA54E},
+ {0xA54F,0xA54F},
+ {0xA550,0xA550}, /* A550 */
+ {0xA551,0xA551},
+ {0xA552,0xA552},
+ {0xA553,0xA553},
+ {0xA554,0xA554},
+ {0xA555,0xA555},
+ {0xA556,0xA556},
+ {0xA557,0xA557},
+ {0xA558,0xA558},
+ {0xA559,0xA559},
+ {0xA55A,0xA55A},
+ {0xA55B,0xA55B},
+ {0xA55C,0xA55C},
+ {0xA55D,0xA55D},
+ {0xA55E,0xA55E},
+ {0xA55F,0xA55F},
+ {0xA560,0xA560}, /* A560 */
+ {0xA561,0xA561},
+ {0xA562,0xA562},
+ {0xA563,0xA563},
+ {0xA564,0xA564},
+ {0xA565,0xA565},
+ {0xA566,0xA566},
+ {0xA567,0xA567},
+ {0xA568,0xA568},
+ {0xA569,0xA569},
+ {0xA56A,0xA56A},
+ {0xA56B,0xA56B},
+ {0xA56C,0xA56C},
+ {0xA56D,0xA56D},
+ {0xA56E,0xA56E},
+ {0xA56F,0xA56F},
+ {0xA570,0xA570}, /* A570 */
+ {0xA571,0xA571},
+ {0xA572,0xA572},
+ {0xA573,0xA573},
+ {0xA574,0xA574},
+ {0xA575,0xA575},
+ {0xA576,0xA576},
+ {0xA577,0xA577},
+ {0xA578,0xA578},
+ {0xA579,0xA579},
+ {0xA57A,0xA57A},
+ {0xA57B,0xA57B},
+ {0xA57C,0xA57C},
+ {0xA57D,0xA57D},
+ {0xA57E,0xA57E},
+ {0xA57F,0xA57F},
+ {0xA580,0xA580}, /* A580 */
+ {0xA581,0xA581},
+ {0xA582,0xA582},
+ {0xA583,0xA583},
+ {0xA584,0xA584},
+ {0xA585,0xA585},
+ {0xA586,0xA586},
+ {0xA587,0xA587},
+ {0xA588,0xA588},
+ {0xA589,0xA589},
+ {0xA58A,0xA58A},
+ {0xA58B,0xA58B},
+ {0xA58C,0xA58C},
+ {0xA58D,0xA58D},
+ {0xA58E,0xA58E},
+ {0xA58F,0xA58F},
+ {0xA590,0xA590}, /* A590 */
+ {0xA591,0xA591},
+ {0xA592,0xA592},
+ {0xA593,0xA593},
+ {0xA594,0xA594},
+ {0xA595,0xA595},
+ {0xA596,0xA596},
+ {0xA597,0xA597},
+ {0xA598,0xA598},
+ {0xA599,0xA599},
+ {0xA59A,0xA59A},
+ {0xA59B,0xA59B},
+ {0xA59C,0xA59C},
+ {0xA59D,0xA59D},
+ {0xA59E,0xA59E},
+ {0xA59F,0xA59F},
+ {0xA5A0,0xA5A0}, /* A5A0 */
+ {0xA5B0,0xA5A1},
+ {0xA5B1,0xA5A2},
+ {0xA5B2,0xA5A3},
+ {0xA5B3,0xA5A4},
+ {0xA5B4,0xA5A5},
+ {0xA5B5,0xA5A6},
+ {0xA5B6,0xA5A7},
+ {0xA5B7,0xA5A8},
+ {0xA5B8,0xA5A9},
+ {0xA5B9,0xA5AA},
+ {0xA5AB,0xA5AB},
+ {0xA5AC,0xA5AC},
+ {0xA5AD,0xA5AD},
+ {0xA5AE,0xA5AE},
+ {0xA5AF,0xA5AF},
+ {0xA5B0,0xA5A1}, /* A5B0 */
+ {0xA5B1,0xA5A2},
+ {0xA5B2,0xA5A3},
+ {0xA5B3,0xA5A4},
+ {0xA5B4,0xA5A5},
+ {0xA5B5,0xA5A6},
+ {0xA5B6,0xA5A7},
+ {0xA5B7,0xA5A8},
+ {0xA5B8,0xA5A9},
+ {0xA5B9,0xA5AA},
+ {0xA5BA,0xA5BA},
+ {0xA5BB,0xA5BB},
+ {0xA5BC,0xA5BC},
+ {0xA5BD,0xA5BD},
+ {0xA5BE,0xA5BE},
+ {0xA5BF,0xA5BF},
+ {0xA5C0,0xA5C0}, /* A5C0 */
+ {0xA5C1,0xA5E1},
+ {0xA5C2,0xA5E2},
+ {0xA5C3,0xA5E3},
+ {0xA5C4,0xA5E4},
+ {0xA5C5,0xA5E5},
+ {0xA5C6,0xA5E6},
+ {0xA5C7,0xA5E7},
+ {0xA5C8,0xA5E8},
+ {0xA5C9,0xA5E9},
+ {0xA5CA,0xA5EA},
+ {0xA5CB,0xA5EB},
+ {0xA5CC,0xA5EC},
+ {0xA5CD,0xA5ED},
+ {0xA5CE,0xA5EE},
+ {0xA5CF,0xA5EF},
+ {0xA5D0,0xA5F0}, /* A5D0 */
+ {0xA5D1,0xA5F1},
+ {0xA5D2,0xA5F2},
+ {0xA5D3,0xA5F3},
+ {0xA5D4,0xA5F4},
+ {0xA5D5,0xA5F5},
+ {0xA5D6,0xA5F6},
+ {0xA5D7,0xA5F7},
+ {0xA5D8,0xA5F8},
+ {0xA5D9,0xA5D9},
+ {0xA5DA,0xA5DA},
+ {0xA5DB,0xA5DB},
+ {0xA5DC,0xA5DC},
+ {0xA5DD,0xA5DD},
+ {0xA5DE,0xA5DE},
+ {0xA5DF,0xA5DF},
+ {0xA5E0,0xA5E0}, /* A5E0 */
+ {0xA5C1,0xA5E1},
+ {0xA5C2,0xA5E2},
+ {0xA5C3,0xA5E3},
+ {0xA5C4,0xA5E4},
+ {0xA5C5,0xA5E5},
+ {0xA5C6,0xA5E6},
+ {0xA5C7,0xA5E7},
+ {0xA5C8,0xA5E8},
+ {0xA5C9,0xA5E9},
+ {0xA5CA,0xA5EA},
+ {0xA5CB,0xA5EB},
+ {0xA5CC,0xA5EC},
+ {0xA5CD,0xA5ED},
+ {0xA5CE,0xA5EE},
+ {0xA5CF,0xA5EF},
+ {0xA5D0,0xA5F0}, /* A5F0 */
+ {0xA5D1,0xA5F1},
+ {0xA5D2,0xA5F2},
+ {0xA5D3,0xA5F3},
+ {0xA5D4,0xA5F4},
+ {0xA5D5,0xA5F5},
+ {0xA5D6,0xA5F6},
+ {0xA5D7,0xA5F7},
+ {0xA5D8,0xA5F8},
+ {0xA5F9,0xA5F9},
+ {0xA5FA,0xA5FA},
+ {0xA5FB,0xA5FB},
+ {0xA5FC,0xA5FC},
+ {0xA5FD,0xA5FD},
+ {0xA5FE,0xA5FE},
+ {0xA5FF,0xA5FF}
};
-static MY_UNICASE_CHARACTER cA7[256]=
+static const MY_CASEFOLD_CHARACTER cA7[256]=
{
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0xA740,0xA740,0x003F}, /* A740 */
- {0xA741,0xA741,0xCB0B},
- {0xA742,0xA742,0xCB0C},
- {0xA743,0xA743,0xCB0D},
- {0xA744,0xA744,0xCB0E},
- {0xA745,0xA745,0xCB0F},
- {0xA746,0xA746,0xCB11},
- {0xA747,0xA747,0xCB12},
- {0xA748,0xA748,0xCB13},
- {0xA749,0xA749,0xCB15},
- {0xA74A,0xA74A,0xCB16},
- {0xA74B,0xA74B,0xCB17},
- {0xA74C,0xA74C,0xCB19},
- {0xA74D,0xA74D,0xCB1A},
- {0xA74E,0xA74E,0xCB1B},
- {0xA74F,0xA74F,0xCB1C},
- {0xA750,0xA750,0xCB1D}, /* A750 */
- {0xA751,0xA751,0xCB1E},
- {0xA752,0xA752,0xCB1F},
- {0xA753,0xA753,0xCB22},
- {0xA754,0xA754,0xCB23},
- {0xA755,0xA755,0xCB24},
- {0xA756,0xA756,0xCB25},
- {0xA757,0xA757,0xCB26},
- {0xA758,0xA758,0xCB27},
- {0xA759,0xA759,0xCB28},
- {0xA75A,0xA75A,0xCB29},
- {0xA75B,0xA75B,0x003F},
- {0xA75C,0xA75C,0x003F},
- {0xA75D,0xA75D,0x003F},
- {0xA75E,0xA75E,0x003F},
- {0xA75F,0xA75F,0x003F},
- {0xA760,0xA760,0x003F}, /* A760 */
- {0xA761,0xA761,0xCB2A},
- {0xA762,0xA762,0xCB2B},
- {0xA763,0xA763,0xCB2C},
- {0xA764,0xA764,0xCB2D},
- {0xA765,0xA765,0xCB2E},
- {0xA766,0xA766,0xCB2F},
- {0xA767,0xA767,0xCB30},
- {0xA768,0xA768,0xCB31},
- {0xA769,0xA769,0xCB32},
- {0xA76A,0xA76A,0xCB33},
- {0xA76B,0xA76B,0xCB34},
- {0xA76C,0xA76C,0xCB35},
- {0xA76D,0xA76D,0xCB36},
- {0xA76E,0xA76E,0xCB37},
- {0xA76F,0xA76F,0xCB38},
- {0xA770,0xA770,0xCB39}, /* A770 */
- {0xA771,0xA771,0xCB3A},
- {0xA772,0xA772,0xCB3B},
- {0xA773,0xA773,0xCB3C},
- {0xA774,0xA774,0xCB3D},
- {0xA775,0xA775,0xCB3E},
- {0xA776,0xA776,0xCB3F},
- {0xA777,0xA777,0xCB40},
- {0xA778,0xA778,0xCB42},
- {0xA779,0xA779,0xCB43},
- {0xA77A,0xA77A,0xCB44},
- {0xA77B,0xA77B,0x003F},
- {0xA77C,0xA77C,0x003F},
- {0xA77D,0xA77D,0x003F},
- {0xA77E,0xA77E,0x003F},
- {0xA77F,0xA77F,0x003F},
- {0xA780,0xA780,0x003F}, /* A780 */
- {0xA781,0xA781,0xCB45},
- {0xA782,0xA782,0xCB46},
- {0xA783,0xA783,0xCB47},
- {0xA784,0xA784,0xCB4A},
- {0xA785,0xA785,0xCB4B},
- {0xA786,0xA786,0xCB4D},
- {0xA787,0xA787,0xCB4E},
- {0xA788,0xA788,0xCB4F},
- {0xA789,0xA789,0xCB51},
- {0xA78A,0xA78A,0xCB52},
- {0xA78B,0xA78B,0xCB53},
- {0xA78C,0xA78C,0xCB54},
- {0xA78D,0xA78D,0xCB55},
- {0xA78E,0xA78E,0xCB56},
- {0xA78F,0xA78F,0xCB57},
- {0xA790,0xA790,0xCB5A}, /* A790 */
- {0xA791,0xA791,0xCB5B},
- {0xA792,0xA792,0xCB5C},
- {0xA793,0xA793,0xCB5E},
- {0xA794,0xA794,0xCB5F},
- {0xA795,0xA795,0xCB60},
- {0xA796,0xA796,0xCB61},
- {0xA797,0xA797,0xCB62},
- {0xA798,0xA798,0xCB63},
- {0xA799,0xA799,0xCB65},
- {0xA79A,0xA79A,0xCB66},
- {0xA79B,0xA79B,0xCB67},
- {0xA79C,0xA79C,0xCB68},
- {0xA79D,0xA79D,0xCB69},
- {0xA79E,0xA79E,0xCB6A},
- {0xA79F,0xA79F,0xCB6B},
- {0xA7A0,0xA7A0,0xCB6C}, /* A7A0 */
- {0xA7A1,0xA7A1,0x3395},
- {0xA7A2,0xA7A2,0x3396},
- {0xA7A3,0xA7A3,0x3397},
- {0xA7A4,0xA7A4,0x2113},
- {0xA7A5,0xA7A5,0x3398},
- {0xA7A6,0xA7A6,0x33C4},
- {0xA7A7,0xA7A7,0x33A3},
- {0xA7A8,0xA7A8,0x33A4},
- {0xA7A9,0xA7A9,0x33A5},
- {0xA7AA,0xA7AA,0x33A6},
- {0xA7AB,0xA7AB,0x3399},
- {0xA7AC,0xA7AC,0x339A},
- {0xA7AD,0xA7AD,0x339B},
- {0xA7AE,0xA7AE,0x339C},
- {0xA7AF,0xA7AF,0x339D},
- {0xA7B0,0xA7B0,0x339E}, /* A7B0 */
- {0xA7B1,0xA7B1,0x339F},
- {0xA7B2,0xA7B2,0x33A0},
- {0xA7B3,0xA7B3,0x33A1},
- {0xA7B4,0xA7B4,0x33A2},
- {0xA7B5,0xA7B5,0x33CA},
- {0xA7B6,0xA7B6,0x338D},
- {0xA7B7,0xA7B7,0x338E},
- {0xA7B8,0xA7B8,0x338F},
- {0xA7B9,0xA7B9,0x33CF},
- {0xA7BA,0xA7BA,0x3388},
- {0xA7BB,0xA7BB,0x3389},
- {0xA7BC,0xA7BC,0x33C8},
- {0xA7BD,0xA7BD,0x33A7},
- {0xA7BE,0xA7BE,0x33A8},
- {0xA7BF,0xA7BF,0x33B0},
- {0xA7C0,0xA7C0,0x33B1}, /* A7C0 */
- {0xA7C1,0xA7C1,0x33B2},
- {0xA7C2,0xA7C2,0x33B3},
- {0xA7C3,0xA7C3,0x33B4},
- {0xA7C4,0xA7C4,0x33B5},
- {0xA7C5,0xA7C5,0x33B6},
- {0xA7C6,0xA7C6,0x33B7},
- {0xA7C7,0xA7C7,0x33B8},
- {0xA7C8,0xA7C8,0x33B9},
- {0xA7C9,0xA7C9,0x3380},
- {0xA7CA,0xA7CA,0x3381},
- {0xA7CB,0xA7CB,0x3382},
- {0xA7CC,0xA7CC,0x3383},
- {0xA7CD,0xA7CD,0x3384},
- {0xA7CE,0xA7CE,0x33BA},
- {0xA7CF,0xA7CF,0x33BB},
- {0xA7D0,0xA7D0,0x33BC}, /* A7D0 */
- {0xA7D1,0xA7D1,0x33BD},
- {0xA7D2,0xA7D2,0x33BE},
- {0xA7D3,0xA7D3,0x33BF},
- {0xA7D4,0xA7D4,0x3390},
- {0xA7D5,0xA7D5,0x3391},
- {0xA7D6,0xA7D6,0x3392},
- {0xA7D7,0xA7D7,0x3393},
- {0xA7D8,0xA7D8,0x3394},
- {0xA7D9,0xA5F8,0x2126},
- {0xA7DA,0xA7DA,0x33C0},
- {0xA7DB,0xA7DB,0x33C1},
- {0xA7DC,0xA7DC,0x338A},
- {0xA7DD,0xA7DD,0x338B},
- {0xA7DE,0xA7DE,0x338C},
- {0xA7DF,0xA7DF,0x33D6},
- {0xA7E0,0xA7E0,0x33C5}, /* A7E0 */
- {0xA7E1,0xA7E1,0x33AD},
- {0xA7E2,0xA7E2,0x33AE},
- {0xA7E3,0xA7E3,0x33AF},
- {0xA7E4,0xA7E4,0x33DB},
- {0xA7E5,0xA7E5,0x33A9},
- {0xA7E6,0xA7E6,0x33AA},
- {0xA7E7,0xA7E7,0x33AB},
- {0xA7E8,0xA7E8,0x33AC},
- {0xA7E9,0xA7E9,0x33DD},
- {0xA7EA,0xA7EA,0x33D0},
- {0xA7EB,0xA7EB,0x33D3},
- {0xA7EC,0xA7EC,0x33C3},
- {0xA7ED,0xA7ED,0x33C9},
- {0xA7EE,0xA7EE,0x33DC},
- {0xA7EF,0xA7EF,0x33C6},
- {0xA7F0,0xA7F0,0x003F}, /* A7F0 */
- {0xA7F1,0xA7F1,0x003F},
- {0xA7F2,0xA7F2,0x003F},
- {0xA7F3,0xA7F3,0x003F},
- {0xA7F4,0xA7F4,0x003F},
- {0xA7F5,0xA7F5,0x003F},
- {0xA7F6,0xA7F6,0x003F},
- {0xA7F7,0xA7F7,0x003F},
- {0xA7F8,0xA7F8,0x003F},
- {0xA7F9,0xA7F9,0x003F},
- {0xA7FA,0xA7FA,0x003F},
- {0xA7FB,0xA7FB,0x003F},
- {0xA7FC,0xA7FC,0x003F},
- {0xA7FD,0xA7FD,0x003F},
- {0xA7FE,0xA7FE,0x003F},
- {0xA7FF,0xA7FF,0x003F}
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx00 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx10 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx20 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx30 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0xA740,0xA740}, /* A740 */
+ {0xA741,0xA741},
+ {0xA742,0xA742},
+ {0xA743,0xA743},
+ {0xA744,0xA744},
+ {0xA745,0xA745},
+ {0xA746,0xA746},
+ {0xA747,0xA747},
+ {0xA748,0xA748},
+ {0xA749,0xA749},
+ {0xA74A,0xA74A},
+ {0xA74B,0xA74B},
+ {0xA74C,0xA74C},
+ {0xA74D,0xA74D},
+ {0xA74E,0xA74E},
+ {0xA74F,0xA74F},
+ {0xA750,0xA750}, /* A750 */
+ {0xA751,0xA751},
+ {0xA752,0xA752},
+ {0xA753,0xA753},
+ {0xA754,0xA754},
+ {0xA755,0xA755},
+ {0xA756,0xA756},
+ {0xA757,0xA757},
+ {0xA758,0xA758},
+ {0xA759,0xA759},
+ {0xA75A,0xA75A},
+ {0xA75B,0xA75B},
+ {0xA75C,0xA75C},
+ {0xA75D,0xA75D},
+ {0xA75E,0xA75E},
+ {0xA75F,0xA75F},
+ {0xA760,0xA760}, /* A760 */
+ {0xA761,0xA761},
+ {0xA762,0xA762},
+ {0xA763,0xA763},
+ {0xA764,0xA764},
+ {0xA765,0xA765},
+ {0xA766,0xA766},
+ {0xA767,0xA767},
+ {0xA768,0xA768},
+ {0xA769,0xA769},
+ {0xA76A,0xA76A},
+ {0xA76B,0xA76B},
+ {0xA76C,0xA76C},
+ {0xA76D,0xA76D},
+ {0xA76E,0xA76E},
+ {0xA76F,0xA76F},
+ {0xA770,0xA770}, /* A770 */
+ {0xA771,0xA771},
+ {0xA772,0xA772},
+ {0xA773,0xA773},
+ {0xA774,0xA774},
+ {0xA775,0xA775},
+ {0xA776,0xA776},
+ {0xA777,0xA777},
+ {0xA778,0xA778},
+ {0xA779,0xA779},
+ {0xA77A,0xA77A},
+ {0xA77B,0xA77B},
+ {0xA77C,0xA77C},
+ {0xA77D,0xA77D},
+ {0xA77E,0xA77E},
+ {0xA77F,0xA77F},
+ {0xA780,0xA780}, /* A780 */
+ {0xA781,0xA781},
+ {0xA782,0xA782},
+ {0xA783,0xA783},
+ {0xA784,0xA784},
+ {0xA785,0xA785},
+ {0xA786,0xA786},
+ {0xA787,0xA787},
+ {0xA788,0xA788},
+ {0xA789,0xA789},
+ {0xA78A,0xA78A},
+ {0xA78B,0xA78B},
+ {0xA78C,0xA78C},
+ {0xA78D,0xA78D},
+ {0xA78E,0xA78E},
+ {0xA78F,0xA78F},
+ {0xA790,0xA790}, /* A790 */
+ {0xA791,0xA791},
+ {0xA792,0xA792},
+ {0xA793,0xA793},
+ {0xA794,0xA794},
+ {0xA795,0xA795},
+ {0xA796,0xA796},
+ {0xA797,0xA797},
+ {0xA798,0xA798},
+ {0xA799,0xA799},
+ {0xA79A,0xA79A},
+ {0xA79B,0xA79B},
+ {0xA79C,0xA79C},
+ {0xA79D,0xA79D},
+ {0xA79E,0xA79E},
+ {0xA79F,0xA79F},
+ {0xA7A0,0xA7A0}, /* A7A0 */
+ {0xA7A1,0xA7A1},
+ {0xA7A2,0xA7A2},
+ {0xA7A3,0xA7A3},
+ {0xA7A4,0xA7A4},
+ {0xA7A5,0xA7A5},
+ {0xA7A6,0xA7A6},
+ {0xA7A7,0xA7A7},
+ {0xA7A8,0xA7A8},
+ {0xA7A9,0xA7A9},
+ {0xA7AA,0xA7AA},
+ {0xA7AB,0xA7AB},
+ {0xA7AC,0xA7AC},
+ {0xA7AD,0xA7AD},
+ {0xA7AE,0xA7AE},
+ {0xA7AF,0xA7AF},
+ {0xA7B0,0xA7B0}, /* A7B0 */
+ {0xA7B1,0xA7B1},
+ {0xA7B2,0xA7B2},
+ {0xA7B3,0xA7B3},
+ {0xA7B4,0xA7B4},
+ {0xA7B5,0xA7B5},
+ {0xA7B6,0xA7B6},
+ {0xA7B7,0xA7B7},
+ {0xA7B8,0xA7B8},
+ {0xA7B9,0xA7B9},
+ {0xA7BA,0xA7BA},
+ {0xA7BB,0xA7BB},
+ {0xA7BC,0xA7BC},
+ {0xA7BD,0xA7BD},
+ {0xA7BE,0xA7BE},
+ {0xA7BF,0xA7BF},
+ {0xA7C0,0xA7C0}, /* A7C0 */
+ {0xA7C1,0xA7C1},
+ {0xA7C2,0xA7C2},
+ {0xA7C3,0xA7C3},
+ {0xA7C4,0xA7C4},
+ {0xA7C5,0xA7C5},
+ {0xA7C6,0xA7C6},
+ {0xA7C7,0xA7C7},
+ {0xA7C8,0xA7C8},
+ {0xA7C9,0xA7C9},
+ {0xA7CA,0xA7CA},
+ {0xA7CB,0xA7CB},
+ {0xA7CC,0xA7CC},
+ {0xA7CD,0xA7CD},
+ {0xA7CE,0xA7CE},
+ {0xA7CF,0xA7CF},
+ {0xA7D0,0xA7D0}, /* A7D0 */
+ {0xA7D1,0xA7D1},
+ {0xA7D2,0xA7D2},
+ {0xA7D3,0xA7D3},
+ {0xA7D4,0xA7D4},
+ {0xA7D5,0xA7D5},
+ {0xA7D6,0xA7D6},
+ {0xA7D7,0xA7D7},
+ {0xA7D8,0xA7D8},
+ {0xA7D9,0xA5F8},
+ {0xA7DA,0xA7DA},
+ {0xA7DB,0xA7DB},
+ {0xA7DC,0xA7DC},
+ {0xA7DD,0xA7DD},
+ {0xA7DE,0xA7DE},
+ {0xA7DF,0xA7DF},
+ {0xA7E0,0xA7E0}, /* A7E0 */
+ {0xA7E1,0xA7E1},
+ {0xA7E2,0xA7E2},
+ {0xA7E3,0xA7E3},
+ {0xA7E4,0xA7E4},
+ {0xA7E5,0xA7E5},
+ {0xA7E6,0xA7E6},
+ {0xA7E7,0xA7E7},
+ {0xA7E8,0xA7E8},
+ {0xA7E9,0xA7E9},
+ {0xA7EA,0xA7EA},
+ {0xA7EB,0xA7EB},
+ {0xA7EC,0xA7EC},
+ {0xA7ED,0xA7ED},
+ {0xA7EE,0xA7EE},
+ {0xA7EF,0xA7EF},
+ {0xA7F0,0xA7F0}, /* A7F0 */
+ {0xA7F1,0xA7F1},
+ {0xA7F2,0xA7F2},
+ {0xA7F3,0xA7F3},
+ {0xA7F4,0xA7F4},
+ {0xA7F5,0xA7F5},
+ {0xA7F6,0xA7F6},
+ {0xA7F7,0xA7F7},
+ {0xA7F8,0xA7F8},
+ {0xA7F9,0xA7F9},
+ {0xA7FA,0xA7FA},
+ {0xA7FB,0xA7FB},
+ {0xA7FC,0xA7FC},
+ {0xA7FD,0xA7FD},
+ {0xA7FE,0xA7FE},
+ {0xA7FF,0xA7FF}
};
-static MY_UNICASE_CHARACTER cA8[256]=
+static const MY_CASEFOLD_CHARACTER cA8[256]=
{
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0xA840,0xA840,0x003F}, /* A840 */
- {0xA841,0xA841,0xCB6D},
- {0xA842,0xA842,0xCB6E},
- {0xA843,0xA843,0xCB6F},
- {0xA844,0xA844,0xCB70},
- {0xA845,0xA845,0xCB71},
- {0xA846,0xA846,0xCB72},
- {0xA847,0xA847,0xCB73},
- {0xA848,0xA848,0xCB74},
- {0xA849,0xA849,0xCB75},
- {0xA84A,0xA84A,0xCB76},
- {0xA84B,0xA84B,0xCB77},
- {0xA84C,0xA84C,0xCB7A},
- {0xA84D,0xA84D,0xCB7B},
- {0xA84E,0xA84E,0xCB7C},
- {0xA84F,0xA84F,0xCB7D},
- {0xA850,0xA850,0xCB7E}, /* A850 */
- {0xA851,0xA851,0xCB7F},
- {0xA852,0xA852,0xCB80},
- {0xA853,0xA853,0xCB81},
- {0xA854,0xA854,0xCB82},
- {0xA855,0xA855,0xCB83},
- {0xA856,0xA856,0xCB84},
- {0xA857,0xA857,0xCB85},
- {0xA858,0xA858,0xCB86},
- {0xA859,0xA859,0xCB87},
- {0xA85A,0xA85A,0xCB88},
- {0xA85B,0xA85B,0x003F},
- {0xA85C,0xA85C,0x003F},
- {0xA85D,0xA85D,0x003F},
- {0xA85E,0xA85E,0x003F},
- {0xA85F,0xA85F,0x003F},
- {0xA860,0xA860,0x003F}, /* A860 */
- {0xA861,0xA861,0xCB89},
- {0xA862,0xA862,0xCB8A},
- {0xA863,0xA863,0xCB8B},
- {0xA864,0xA864,0xCB8C},
- {0xA865,0xA865,0xCB8D},
- {0xA866,0xA866,0xCB8E},
- {0xA867,0xA867,0xCB8F},
- {0xA868,0xA868,0xCB90},
- {0xA869,0xA869,0xCB91},
- {0xA86A,0xA86A,0xCB92},
- {0xA86B,0xA86B,0xCB93},
- {0xA86C,0xA86C,0xCB94},
- {0xA86D,0xA86D,0xCB95},
- {0xA86E,0xA86E,0xCB96},
- {0xA86F,0xA86F,0xCB97},
- {0xA870,0xA870,0xCB98}, /* A870 */
- {0xA871,0xA871,0xCB99},
- {0xA872,0xA872,0xCB9A},
- {0xA873,0xA873,0xCB9B},
- {0xA874,0xA874,0xCB9D},
- {0xA875,0xA875,0xCB9E},
- {0xA876,0xA876,0xCB9F},
- {0xA877,0xA877,0xCBA0},
- {0xA878,0xA878,0xCBA1},
- {0xA879,0xA879,0xCBA2},
- {0xA87A,0xA87A,0xCBA3},
- {0xA87B,0xA87B,0x003F},
- {0xA87C,0xA87C,0x003F},
- {0xA87D,0xA87D,0x003F},
- {0xA87E,0xA87E,0x003F},
- {0xA87F,0xA87F,0x003F},
- {0xA880,0xA880,0x003F}, /* A880 */
- {0xA881,0xA881,0xCBA4},
- {0xA882,0xA882,0xCBA5},
- {0xA883,0xA883,0xCBA6},
- {0xA884,0xA884,0xCBA7},
- {0xA885,0xA885,0xCBA8},
- {0xA886,0xA886,0xCBA9},
- {0xA887,0xA887,0xCBAA},
- {0xA888,0xA888,0xCBAB},
- {0xA889,0xA889,0xCBAC},
- {0xA88A,0xA88A,0xCBAD},
- {0xA88B,0xA88B,0xCBAE},
- {0xA88C,0xA88C,0xCBAF},
- {0xA88D,0xA88D,0xCBB0},
- {0xA88E,0xA88E,0xCBB1},
- {0xA88F,0xA88F,0xCBB2},
- {0xA890,0xA890,0xCBB3}, /* A890 */
- {0xA891,0xA891,0xCBB4},
- {0xA892,0xA892,0xCBB5},
- {0xA893,0xA893,0xCBB6},
- {0xA894,0xA894,0xCBB7},
- {0xA895,0xA895,0xCBB9},
- {0xA896,0xA896,0xCBBA},
- {0xA897,0xA897,0xCBBB},
- {0xA898,0xA898,0xCBBC},
- {0xA899,0xA899,0xCBBD},
- {0xA89A,0xA89A,0xCBBE},
- {0xA89B,0xA89B,0xCBBF},
- {0xA89C,0xA89C,0xCBC0},
- {0xA89D,0xA89D,0xCBC1},
- {0xA89E,0xA89E,0xCBC2},
- {0xA89F,0xA89F,0xCBC3},
- {0xA8A0,0xA8A0,0xCBC4}, /* A8A0 */
- {0xA8A1,0xA9A1,0x00C6},
- {0xA8A2,0xA9A3,0x00D0},
- {0xA8A3,0xA8A3,0x00AA},
- {0xA8A4,0xA9A4,0x0126},
- {0xA8A5,0xA8A5,0x003F},
- {0xA8A6,0xA9A6,0x0132},
- {0xA8A7,0xA8A7,0x003F},
- {0xA8A8,0xA9A8,0x013F},
- {0xA8A9,0xA9A9,0x0141},
- {0xA8AA,0xA9AA,0x00D8},
- {0xA8AB,0xA9AB,0x0152},
- {0xA8AC,0xA8AC,0x00BA},
- {0xA8AD,0xA9AD,0x00DE},
- {0xA8AE,0xA9AE,0x0166},
- {0xA8AF,0xA9AF,0x014A},
- {0xA8B0,0xA8B0,0x003F}, /* A8B0 */
- {0xA8B1,0xA8B1,0x3260},
- {0xA8B2,0xA8B2,0x3261},
- {0xA8B3,0xA8B3,0x3262},
- {0xA8B4,0xA8B4,0x3263},
- {0xA8B5,0xA8B5,0x3264},
- {0xA8B6,0xA8B6,0x3265},
- {0xA8B7,0xA8B7,0x3266},
- {0xA8B8,0xA8B8,0x3267},
- {0xA8B9,0xA8B9,0x3268},
- {0xA8BA,0xA8BA,0x3269},
- {0xA8BB,0xA8BB,0x326A},
- {0xA8BC,0xA8BC,0x326B},
- {0xA8BD,0xA8BD,0x326C},
- {0xA8BE,0xA8BE,0x326D},
- {0xA8BF,0xA8BF,0x326E},
- {0xA8C0,0xA8C0,0x326F}, /* A8C0 */
- {0xA8C1,0xA8C1,0x3270},
- {0xA8C2,0xA8C2,0x3271},
- {0xA8C3,0xA8C3,0x3272},
- {0xA8C4,0xA8C4,0x3273},
- {0xA8C5,0xA8C5,0x3274},
- {0xA8C6,0xA8C6,0x3275},
- {0xA8C7,0xA8C7,0x3276},
- {0xA8C8,0xA8C8,0x3277},
- {0xA8C9,0xA8C9,0x3278},
- {0xA8CA,0xA8CA,0x3279},
- {0xA8CB,0xA8CB,0x327A},
- {0xA8CC,0xA8CC,0x327B},
- {0xA8CD,0xA8CD,0x24D0},
- {0xA8CE,0xA8CE,0x24D1},
- {0xA8CF,0xA8CF,0x24D2},
- {0xA8D0,0xA8D0,0x24D3}, /* A8D0 */
- {0xA8D1,0xA8D1,0x24D4},
- {0xA8D2,0xA8D2,0x24D5},
- {0xA8D3,0xA8D3,0x24D6},
- {0xA8D4,0xA8D4,0x24D7},
- {0xA8D5,0xA8D5,0x24D8},
- {0xA8D6,0xA8D6,0x24D9},
- {0xA8D7,0xA8D7,0x24DA},
- {0xA8D8,0xA8D8,0x24DB},
- {0xA8D9,0xA8D9,0x24DC},
- {0xA8DA,0xA8DA,0x24DD},
- {0xA8DB,0xA8DB,0x24DE},
- {0xA8DC,0xA8DC,0x24DF},
- {0xA8DD,0xA8DD,0x24E0},
- {0xA8DE,0xA8DE,0x24E1},
- {0xA8DF,0xA8DF,0x24E2},
- {0xA8E0,0xA8E0,0x24E3}, /* A8E0 */
- {0xA8E1,0xA8E1,0x24E4},
- {0xA8E2,0xA8E2,0x24E5},
- {0xA8E3,0xA8E3,0x24E6},
- {0xA8E4,0xA8E4,0x24E7},
- {0xA8E5,0xA8E5,0x24E8},
- {0xA8E6,0xA8E6,0x24E9},
- {0xA8E7,0xA8E7,0x2460},
- {0xA8E8,0xA8E8,0x2461},
- {0xA8E9,0xA8E9,0x2462},
- {0xA8EA,0xA8EA,0x2463},
- {0xA8EB,0xA8EB,0x2464},
- {0xA8EC,0xA8EC,0x2465},
- {0xA8ED,0xA8ED,0x2466},
- {0xA8EE,0xA8EE,0x2467},
- {0xA8EF,0xA8EF,0x2468},
- {0xA8F0,0xA8F0,0x2469}, /* A8F0 */
- {0xA8F1,0xA8F1,0x246A},
- {0xA8F2,0xA8F2,0x246B},
- {0xA8F3,0xA8F3,0x246C},
- {0xA8F4,0xA8F4,0x246D},
- {0xA8F5,0xA8F5,0x246E},
- {0xA8F6,0xA8F6,0x00BD},
- {0xA8F7,0xA8F7,0x2153},
- {0xA8F8,0xA8F8,0x2154},
- {0xA8F9,0xA8F9,0x00BC},
- {0xA8FA,0xA8FA,0x00BE},
- {0xA8FB,0xA8FB,0x215B},
- {0xA8FC,0xA8FC,0x215C},
- {0xA8FD,0xA8FD,0x215D},
- {0xA8FE,0xA8FE,0x215E},
- {0xA8FF,0xA8FF,0x003F}
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx00 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx10 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx20 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx30 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0xA840,0xA840}, /* A840 */
+ {0xA841,0xA841},
+ {0xA842,0xA842},
+ {0xA843,0xA843},
+ {0xA844,0xA844},
+ {0xA845,0xA845},
+ {0xA846,0xA846},
+ {0xA847,0xA847},
+ {0xA848,0xA848},
+ {0xA849,0xA849},
+ {0xA84A,0xA84A},
+ {0xA84B,0xA84B},
+ {0xA84C,0xA84C},
+ {0xA84D,0xA84D},
+ {0xA84E,0xA84E},
+ {0xA84F,0xA84F},
+ {0xA850,0xA850}, /* A850 */
+ {0xA851,0xA851},
+ {0xA852,0xA852},
+ {0xA853,0xA853},
+ {0xA854,0xA854},
+ {0xA855,0xA855},
+ {0xA856,0xA856},
+ {0xA857,0xA857},
+ {0xA858,0xA858},
+ {0xA859,0xA859},
+ {0xA85A,0xA85A},
+ {0xA85B,0xA85B},
+ {0xA85C,0xA85C},
+ {0xA85D,0xA85D},
+ {0xA85E,0xA85E},
+ {0xA85F,0xA85F},
+ {0xA860,0xA860}, /* A860 */
+ {0xA861,0xA861},
+ {0xA862,0xA862},
+ {0xA863,0xA863},
+ {0xA864,0xA864},
+ {0xA865,0xA865},
+ {0xA866,0xA866},
+ {0xA867,0xA867},
+ {0xA868,0xA868},
+ {0xA869,0xA869},
+ {0xA86A,0xA86A},
+ {0xA86B,0xA86B},
+ {0xA86C,0xA86C},
+ {0xA86D,0xA86D},
+ {0xA86E,0xA86E},
+ {0xA86F,0xA86F},
+ {0xA870,0xA870}, /* A870 */
+ {0xA871,0xA871},
+ {0xA872,0xA872},
+ {0xA873,0xA873},
+ {0xA874,0xA874},
+ {0xA875,0xA875},
+ {0xA876,0xA876},
+ {0xA877,0xA877},
+ {0xA878,0xA878},
+ {0xA879,0xA879},
+ {0xA87A,0xA87A},
+ {0xA87B,0xA87B},
+ {0xA87C,0xA87C},
+ {0xA87D,0xA87D},
+ {0xA87E,0xA87E},
+ {0xA87F,0xA87F},
+ {0xA880,0xA880}, /* A880 */
+ {0xA881,0xA881},
+ {0xA882,0xA882},
+ {0xA883,0xA883},
+ {0xA884,0xA884},
+ {0xA885,0xA885},
+ {0xA886,0xA886},
+ {0xA887,0xA887},
+ {0xA888,0xA888},
+ {0xA889,0xA889},
+ {0xA88A,0xA88A},
+ {0xA88B,0xA88B},
+ {0xA88C,0xA88C},
+ {0xA88D,0xA88D},
+ {0xA88E,0xA88E},
+ {0xA88F,0xA88F},
+ {0xA890,0xA890}, /* A890 */
+ {0xA891,0xA891},
+ {0xA892,0xA892},
+ {0xA893,0xA893},
+ {0xA894,0xA894},
+ {0xA895,0xA895},
+ {0xA896,0xA896},
+ {0xA897,0xA897},
+ {0xA898,0xA898},
+ {0xA899,0xA899},
+ {0xA89A,0xA89A},
+ {0xA89B,0xA89B},
+ {0xA89C,0xA89C},
+ {0xA89D,0xA89D},
+ {0xA89E,0xA89E},
+ {0xA89F,0xA89F},
+ {0xA8A0,0xA8A0}, /* A8A0 */
+ {0xA8A1,0xA9A1},
+ {0xA8A2,0xA9A3},
+ {0xA8A3,0xA8A3},
+ {0xA8A4,0xA9A4},
+ {0xA8A5,0xA8A5},
+ {0xA8A6,0xA9A6},
+ {0xA8A7,0xA8A7},
+ {0xA8A8,0xA9A8},
+ {0xA8A9,0xA9A9},
+ {0xA8AA,0xA9AA},
+ {0xA8AB,0xA9AB},
+ {0xA8AC,0xA8AC},
+ {0xA8AD,0xA9AD},
+ {0xA8AE,0xA9AE},
+ {0xA8AF,0xA9AF},
+ {0xA8B0,0xA8B0}, /* A8B0 */
+ {0xA8B1,0xA8B1},
+ {0xA8B2,0xA8B2},
+ {0xA8B3,0xA8B3},
+ {0xA8B4,0xA8B4},
+ {0xA8B5,0xA8B5},
+ {0xA8B6,0xA8B6},
+ {0xA8B7,0xA8B7},
+ {0xA8B8,0xA8B8},
+ {0xA8B9,0xA8B9},
+ {0xA8BA,0xA8BA},
+ {0xA8BB,0xA8BB},
+ {0xA8BC,0xA8BC},
+ {0xA8BD,0xA8BD},
+ {0xA8BE,0xA8BE},
+ {0xA8BF,0xA8BF},
+ {0xA8C0,0xA8C0}, /* A8C0 */
+ {0xA8C1,0xA8C1},
+ {0xA8C2,0xA8C2},
+ {0xA8C3,0xA8C3},
+ {0xA8C4,0xA8C4},
+ {0xA8C5,0xA8C5},
+ {0xA8C6,0xA8C6},
+ {0xA8C7,0xA8C7},
+ {0xA8C8,0xA8C8},
+ {0xA8C9,0xA8C9},
+ {0xA8CA,0xA8CA},
+ {0xA8CB,0xA8CB},
+ {0xA8CC,0xA8CC},
+ {0xA8CD,0xA8CD},
+ {0xA8CE,0xA8CE},
+ {0xA8CF,0xA8CF},
+ {0xA8D0,0xA8D0}, /* A8D0 */
+ {0xA8D1,0xA8D1},
+ {0xA8D2,0xA8D2},
+ {0xA8D3,0xA8D3},
+ {0xA8D4,0xA8D4},
+ {0xA8D5,0xA8D5},
+ {0xA8D6,0xA8D6},
+ {0xA8D7,0xA8D7},
+ {0xA8D8,0xA8D8},
+ {0xA8D9,0xA8D9},
+ {0xA8DA,0xA8DA},
+ {0xA8DB,0xA8DB},
+ {0xA8DC,0xA8DC},
+ {0xA8DD,0xA8DD},
+ {0xA8DE,0xA8DE},
+ {0xA8DF,0xA8DF},
+ {0xA8E0,0xA8E0}, /* A8E0 */
+ {0xA8E1,0xA8E1},
+ {0xA8E2,0xA8E2},
+ {0xA8E3,0xA8E3},
+ {0xA8E4,0xA8E4},
+ {0xA8E5,0xA8E5},
+ {0xA8E6,0xA8E6},
+ {0xA8E7,0xA8E7},
+ {0xA8E8,0xA8E8},
+ {0xA8E9,0xA8E9},
+ {0xA8EA,0xA8EA},
+ {0xA8EB,0xA8EB},
+ {0xA8EC,0xA8EC},
+ {0xA8ED,0xA8ED},
+ {0xA8EE,0xA8EE},
+ {0xA8EF,0xA8EF},
+ {0xA8F0,0xA8F0}, /* A8F0 */
+ {0xA8F1,0xA8F1},
+ {0xA8F2,0xA8F2},
+ {0xA8F3,0xA8F3},
+ {0xA8F4,0xA8F4},
+ {0xA8F5,0xA8F5},
+ {0xA8F6,0xA8F6},
+ {0xA8F7,0xA8F7},
+ {0xA8F8,0xA8F8},
+ {0xA8F9,0xA8F9},
+ {0xA8FA,0xA8FA},
+ {0xA8FB,0xA8FB},
+ {0xA8FC,0xA8FC},
+ {0xA8FD,0xA8FD},
+ {0xA8FE,0xA8FE},
+ {0xA8FF,0xA8FF}
};
-static MY_UNICASE_CHARACTER cA9[256]=
+static const MY_CASEFOLD_CHARACTER cA9[256]=
{
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0xA940,0xA940,0x003F}, /* A940 */
- {0xA941,0xA941,0xCBC5},
- {0xA942,0xA942,0xCBC6},
- {0xA943,0xA943,0xCBC7},
- {0xA944,0xA944,0xCBC8},
- {0xA945,0xA945,0xCBC9},
- {0xA946,0xA946,0xCBCA},
- {0xA947,0xA947,0xCBCB},
- {0xA948,0xA948,0xCBCC},
- {0xA949,0xA949,0xCBCD},
- {0xA94A,0xA94A,0xCBCE},
- {0xA94B,0xA94B,0xCBCF},
- {0xA94C,0xA94C,0xCBD0},
- {0xA94D,0xA94D,0xCBD1},
- {0xA94E,0xA94E,0xCBD2},
- {0xA94F,0xA94F,0xCBD3},
- {0xA950,0xA950,0xCBD5}, /* A950 */
- {0xA951,0xA951,0xCBD6},
- {0xA952,0xA952,0xCBD7},
- {0xA953,0xA953,0xCBD8},
- {0xA954,0xA954,0xCBD9},
- {0xA955,0xA955,0xCBDA},
- {0xA956,0xA956,0xCBDB},
- {0xA957,0xA957,0xCBDC},
- {0xA958,0xA958,0xCBDD},
- {0xA959,0xA959,0xCBDE},
- {0xA95A,0xA95A,0xCBDF},
- {0xA95B,0xA95B,0x003F},
- {0xA95C,0xA95C,0x003F},
- {0xA95D,0xA95D,0x003F},
- {0xA95E,0xA95E,0x003F},
- {0xA95F,0xA95F,0x003F},
- {0xA960,0xA960,0x003F}, /* A960 */
- {0xA961,0xA961,0xCBE0},
- {0xA962,0xA962,0xCBE1},
- {0xA963,0xA963,0xCBE2},
- {0xA964,0xA964,0xCBE3},
- {0xA965,0xA965,0xCBE5},
- {0xA966,0xA966,0xCBE6},
- {0xA967,0xA967,0xCBE8},
- {0xA968,0xA968,0xCBEA},
- {0xA969,0xA969,0xCBEB},
- {0xA96A,0xA96A,0xCBEC},
- {0xA96B,0xA96B,0xCBED},
- {0xA96C,0xA96C,0xCBEE},
- {0xA96D,0xA96D,0xCBEF},
- {0xA96E,0xA96E,0xCBF0},
- {0xA96F,0xA96F,0xCBF1},
- {0xA970,0xA970,0xCBF2}, /* A970 */
- {0xA971,0xA971,0xCBF3},
- {0xA972,0xA972,0xCBF4},
- {0xA973,0xA973,0xCBF5},
- {0xA974,0xA974,0xCBF6},
- {0xA975,0xA975,0xCBF7},
- {0xA976,0xA976,0xCBF8},
- {0xA977,0xA977,0xCBF9},
- {0xA978,0xA978,0xCBFA},
- {0xA979,0xA979,0xCBFB},
- {0xA97A,0xA97A,0xCBFC},
- {0xA97B,0xA97B,0x003F},
- {0xA97C,0xA97C,0x003F},
- {0xA97D,0xA97D,0x003F},
- {0xA97E,0xA97E,0x003F},
- {0xA97F,0xA97F,0x003F},
- {0xA980,0xA980,0x003F}, /* A980 */
- {0xA981,0xA981,0xCBFD},
- {0xA982,0xA982,0xCBFE},
- {0xA983,0xA983,0xCBFF},
- {0xA984,0xA984,0xCC00},
- {0xA985,0xA985,0xCC01},
- {0xA986,0xA986,0xCC02},
- {0xA987,0xA987,0xCC03},
- {0xA988,0xA988,0xCC04},
- {0xA989,0xA989,0xCC05},
- {0xA98A,0xA98A,0xCC06},
- {0xA98B,0xA98B,0xCC07},
- {0xA98C,0xA98C,0xCC08},
- {0xA98D,0xA98D,0xCC09},
- {0xA98E,0xA98E,0xCC0A},
- {0xA98F,0xA98F,0xCC0B},
- {0xA990,0xA990,0xCC0E}, /* A990 */
- {0xA991,0xA991,0xCC0F},
- {0xA992,0xA992,0xCC11},
- {0xA993,0xA993,0xCC12},
- {0xA994,0xA994,0xCC13},
- {0xA995,0xA995,0xCC15},
- {0xA996,0xA996,0xCC16},
- {0xA997,0xA997,0xCC17},
- {0xA998,0xA998,0xCC18},
- {0xA999,0xA999,0xCC19},
- {0xA99A,0xA99A,0xCC1A},
- {0xA99B,0xA99B,0xCC1B},
- {0xA99C,0xA99C,0xCC1E},
- {0xA99D,0xA99D,0xCC1F},
- {0xA99E,0xA99E,0xCC20},
- {0xA99F,0xA99F,0xCC23},
- {0xA9A0,0xA9A0,0xCC24}, /* A9A0 */
- {0xA8A1,0xA9A1,0x00E6},
- {0xA9A2,0xA9A2,0x0111},
- {0xA8A2,0xA9A3,0x00F0},
- {0xA8A4,0xA9A4,0x0127},
- { 0x49,0xA9A5,0x0131}, /* Turkish i */
- {0xA8A6,0xA9A6,0x0133},
- {0xA9A7,0xA9A7,0x0138},
- {0xA8A8,0xA9A8,0x0140},
- {0xA8A9,0xA9A9,0x0142},
- {0xA8AA,0xA9AA,0x00F8},
- {0xA8AB,0xA9AB,0x0153},
- {0xA9AC,0xA9AC,0x00DF},
- {0xA8AD,0xA9AD,0x00FE},
- {0xA8AE,0xA9AE,0x0167},
- {0xA8AF,0xA9AF,0x014B},
- {0xA9B0,0xA9B0,0x0149}, /* A9B0 */
- {0xA9B1,0xA9B1,0x3200},
- {0xA9B2,0xA9B2,0x3201},
- {0xA9B3,0xA9B3,0x3202},
- {0xA9B4,0xA9B4,0x3203},
- {0xA9B5,0xA9B5,0x3204},
- {0xA9B6,0xA9B6,0x3205},
- {0xA9B7,0xA9B7,0x3206},
- {0xA9B8,0xA9B8,0x3207},
- {0xA9B9,0xA9B9,0x3208},
- {0xA9BA,0xA9BA,0x3209},
- {0xA9BB,0xA9BB,0x320A},
- {0xA9BC,0xA9BC,0x320B},
- {0xA9BD,0xA9BD,0x320C},
- {0xA9BE,0xA9BE,0x320D},
- {0xA9BF,0xA9BF,0x320E},
- {0xA9C0,0xA9C0,0x320F}, /* A9C0 */
- {0xA9C1,0xA9C1,0x3210},
- {0xA9C2,0xA9C2,0x3211},
- {0xA9C3,0xA9C3,0x3212},
- {0xA9C4,0xA9C4,0x3213},
- {0xA9C5,0xA9C5,0x3214},
- {0xA9C6,0xA9C6,0x3215},
- {0xA9C7,0xA9C7,0x3216},
- {0xA9C8,0xA9C8,0x3217},
- {0xA9C9,0xA9C9,0x3218},
- {0xA9CA,0xA9CA,0x3219},
- {0xA9CB,0xA9CB,0x321A},
- {0xA9CC,0xA9CC,0x321B},
- {0xA9CD,0xA9CD,0x249C},
- {0xA9CE,0xA9CE,0x249D},
- {0xA9CF,0xA9CF,0x249E},
- {0xA9D0,0xA9D0,0x249F}, /* A9D0 */
- {0xA9D1,0xA9D1,0x24A0},
- {0xA9D2,0xA9D2,0x24A1},
- {0xA9D3,0xA9D3,0x24A2},
- {0xA9D4,0xA9D4,0x24A3},
- {0xA9D5,0xA9D5,0x24A4},
- {0xA9D6,0xA9D6,0x24A5},
- {0xA9D7,0xA9D7,0x24A6},
- {0xA9D8,0xA9D8,0x24A7},
- {0xA9D9,0xA9D9,0x24A8},
- {0xA9DA,0xA9DA,0x24A9},
- {0xA9DB,0xA9DB,0x24AA},
- {0xA9DC,0xA9DC,0x24AB},
- {0xA9DD,0xA9DD,0x24AC},
- {0xA9DE,0xA9DE,0x24AD},
- {0xA9DF,0xA9DF,0x24AE},
- {0xA9E0,0xA9E0,0x24AF}, /* A9E0 */
- {0xA9E1,0xA9E1,0x24B0},
- {0xA9E2,0xA9E2,0x24B1},
- {0xA9E3,0xA9E3,0x24B2},
- {0xA9E4,0xA9E4,0x24B3},
- {0xA9E5,0xA9E5,0x24B4},
- {0xA9E6,0xA9E6,0x24B5},
- {0xA9E7,0xA9E7,0x2474},
- {0xA9E8,0xA9E8,0x2475},
- {0xA9E9,0xA9E9,0x2476},
- {0xA9EA,0xA9EA,0x2477},
- {0xA9EB,0xA9EB,0x2478},
- {0xA9EC,0xA9EC,0x2479},
- {0xA9ED,0xA9ED,0x247A},
- {0xA9EE,0xA9EE,0x247B},
- {0xA9EF,0xA9EF,0x247C},
- {0xA9F0,0xA9F0,0x247D}, /* A9F0 */
- {0xA9F1,0xA9F1,0x247E},
- {0xA9F2,0xA9F2,0x247F},
- {0xA9F3,0xA9F3,0x2480},
- {0xA9F4,0xA9F4,0x2481},
- {0xA9F5,0xA9F5,0x2482},
- {0xA9F6,0xA9F6,0x00B9},
- {0xA9F7,0xA9F7,0x00B2},
- {0xA9F8,0xA9F8,0x00B3},
- {0xA9F9,0xA9F9,0x2074},
- {0xA9FA,0xA9FA,0x207F},
- {0xA9FB,0xA9FB,0x2081},
- {0xA9FC,0xA9FC,0x2082},
- {0xA9FD,0xA9FD,0x2083},
- {0xA9FE,0xA9FE,0x2084},
- {0xA9FF,0xA9FF,0x003F}
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx00 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx10 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx20 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx30 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0xA940,0xA940}, /* A940 */
+ {0xA941,0xA941},
+ {0xA942,0xA942},
+ {0xA943,0xA943},
+ {0xA944,0xA944},
+ {0xA945,0xA945},
+ {0xA946,0xA946},
+ {0xA947,0xA947},
+ {0xA948,0xA948},
+ {0xA949,0xA949},
+ {0xA94A,0xA94A},
+ {0xA94B,0xA94B},
+ {0xA94C,0xA94C},
+ {0xA94D,0xA94D},
+ {0xA94E,0xA94E},
+ {0xA94F,0xA94F},
+ {0xA950,0xA950}, /* A950 */
+ {0xA951,0xA951},
+ {0xA952,0xA952},
+ {0xA953,0xA953},
+ {0xA954,0xA954},
+ {0xA955,0xA955},
+ {0xA956,0xA956},
+ {0xA957,0xA957},
+ {0xA958,0xA958},
+ {0xA959,0xA959},
+ {0xA95A,0xA95A},
+ {0xA95B,0xA95B},
+ {0xA95C,0xA95C},
+ {0xA95D,0xA95D},
+ {0xA95E,0xA95E},
+ {0xA95F,0xA95F},
+ {0xA960,0xA960}, /* A960 */
+ {0xA961,0xA961},
+ {0xA962,0xA962},
+ {0xA963,0xA963},
+ {0xA964,0xA964},
+ {0xA965,0xA965},
+ {0xA966,0xA966},
+ {0xA967,0xA967},
+ {0xA968,0xA968},
+ {0xA969,0xA969},
+ {0xA96A,0xA96A},
+ {0xA96B,0xA96B},
+ {0xA96C,0xA96C},
+ {0xA96D,0xA96D},
+ {0xA96E,0xA96E},
+ {0xA96F,0xA96F},
+ {0xA970,0xA970}, /* A970 */
+ {0xA971,0xA971},
+ {0xA972,0xA972},
+ {0xA973,0xA973},
+ {0xA974,0xA974},
+ {0xA975,0xA975},
+ {0xA976,0xA976},
+ {0xA977,0xA977},
+ {0xA978,0xA978},
+ {0xA979,0xA979},
+ {0xA97A,0xA97A},
+ {0xA97B,0xA97B},
+ {0xA97C,0xA97C},
+ {0xA97D,0xA97D},
+ {0xA97E,0xA97E},
+ {0xA97F,0xA97F},
+ {0xA980,0xA980}, /* A980 */
+ {0xA981,0xA981},
+ {0xA982,0xA982},
+ {0xA983,0xA983},
+ {0xA984,0xA984},
+ {0xA985,0xA985},
+ {0xA986,0xA986},
+ {0xA987,0xA987},
+ {0xA988,0xA988},
+ {0xA989,0xA989},
+ {0xA98A,0xA98A},
+ {0xA98B,0xA98B},
+ {0xA98C,0xA98C},
+ {0xA98D,0xA98D},
+ {0xA98E,0xA98E},
+ {0xA98F,0xA98F},
+ {0xA990,0xA990}, /* A990 */
+ {0xA991,0xA991},
+ {0xA992,0xA992},
+ {0xA993,0xA993},
+ {0xA994,0xA994},
+ {0xA995,0xA995},
+ {0xA996,0xA996},
+ {0xA997,0xA997},
+ {0xA998,0xA998},
+ {0xA999,0xA999},
+ {0xA99A,0xA99A},
+ {0xA99B,0xA99B},
+ {0xA99C,0xA99C},
+ {0xA99D,0xA99D},
+ {0xA99E,0xA99E},
+ {0xA99F,0xA99F},
+ {0xA9A0,0xA9A0}, /* A9A0 */
+ {0xA8A1,0xA9A1},
+ {0xA9A2,0xA9A2},
+ {0xA8A2,0xA9A3},
+ {0xA8A4,0xA9A4},
+ { 0x49,0xA9A5}, /* Turkish i */
+ {0xA8A6,0xA9A6},
+ {0xA9A7,0xA9A7},
+ {0xA8A8,0xA9A8},
+ {0xA8A9,0xA9A9},
+ {0xA8AA,0xA9AA},
+ {0xA8AB,0xA9AB},
+ {0xA9AC,0xA9AC},
+ {0xA8AD,0xA9AD},
+ {0xA8AE,0xA9AE},
+ {0xA8AF,0xA9AF},
+ {0xA9B0,0xA9B0}, /* A9B0 */
+ {0xA9B1,0xA9B1},
+ {0xA9B2,0xA9B2},
+ {0xA9B3,0xA9B3},
+ {0xA9B4,0xA9B4},
+ {0xA9B5,0xA9B5},
+ {0xA9B6,0xA9B6},
+ {0xA9B7,0xA9B7},
+ {0xA9B8,0xA9B8},
+ {0xA9B9,0xA9B9},
+ {0xA9BA,0xA9BA},
+ {0xA9BB,0xA9BB},
+ {0xA9BC,0xA9BC},
+ {0xA9BD,0xA9BD},
+ {0xA9BE,0xA9BE},
+ {0xA9BF,0xA9BF},
+ {0xA9C0,0xA9C0}, /* A9C0 */
+ {0xA9C1,0xA9C1},
+ {0xA9C2,0xA9C2},
+ {0xA9C3,0xA9C3},
+ {0xA9C4,0xA9C4},
+ {0xA9C5,0xA9C5},
+ {0xA9C6,0xA9C6},
+ {0xA9C7,0xA9C7},
+ {0xA9C8,0xA9C8},
+ {0xA9C9,0xA9C9},
+ {0xA9CA,0xA9CA},
+ {0xA9CB,0xA9CB},
+ {0xA9CC,0xA9CC},
+ {0xA9CD,0xA9CD},
+ {0xA9CE,0xA9CE},
+ {0xA9CF,0xA9CF},
+ {0xA9D0,0xA9D0}, /* A9D0 */
+ {0xA9D1,0xA9D1},
+ {0xA9D2,0xA9D2},
+ {0xA9D3,0xA9D3},
+ {0xA9D4,0xA9D4},
+ {0xA9D5,0xA9D5},
+ {0xA9D6,0xA9D6},
+ {0xA9D7,0xA9D7},
+ {0xA9D8,0xA9D8},
+ {0xA9D9,0xA9D9},
+ {0xA9DA,0xA9DA},
+ {0xA9DB,0xA9DB},
+ {0xA9DC,0xA9DC},
+ {0xA9DD,0xA9DD},
+ {0xA9DE,0xA9DE},
+ {0xA9DF,0xA9DF},
+ {0xA9E0,0xA9E0}, /* A9E0 */
+ {0xA9E1,0xA9E1},
+ {0xA9E2,0xA9E2},
+ {0xA9E3,0xA9E3},
+ {0xA9E4,0xA9E4},
+ {0xA9E5,0xA9E5},
+ {0xA9E6,0xA9E6},
+ {0xA9E7,0xA9E7},
+ {0xA9E8,0xA9E8},
+ {0xA9E9,0xA9E9},
+ {0xA9EA,0xA9EA},
+ {0xA9EB,0xA9EB},
+ {0xA9EC,0xA9EC},
+ {0xA9ED,0xA9ED},
+ {0xA9EE,0xA9EE},
+ {0xA9EF,0xA9EF},
+ {0xA9F0,0xA9F0}, /* A9F0 */
+ {0xA9F1,0xA9F1},
+ {0xA9F2,0xA9F2},
+ {0xA9F3,0xA9F3},
+ {0xA9F4,0xA9F4},
+ {0xA9F5,0xA9F5},
+ {0xA9F6,0xA9F6},
+ {0xA9F7,0xA9F7},
+ {0xA9F8,0xA9F8},
+ {0xA9F9,0xA9F9},
+ {0xA9FA,0xA9FA},
+ {0xA9FB,0xA9FB},
+ {0xA9FC,0xA9FC},
+ {0xA9FD,0xA9FD},
+ {0xA9FE,0xA9FE},
+ {0xA9FF,0xA9FF}
};
-static MY_UNICASE_CHARACTER cAC[256]=
+static const MY_CASEFOLD_CHARACTER cAC[256]=
{
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0xAC40,0xAC40,0x003F}, /* AC40 */
- {0xAC41,0xAC41,0xCCFE},
- {0xAC42,0xAC42,0xCCFF},
- {0xAC43,0xAC43,0xCD00},
- {0xAC44,0xAC44,0xCD02},
- {0xAC45,0xAC45,0xCD03},
- {0xAC46,0xAC46,0xCD04},
- {0xAC47,0xAC47,0xCD05},
- {0xAC48,0xAC48,0xCD06},
- {0xAC49,0xAC49,0xCD07},
- {0xAC4A,0xAC4A,0xCD0A},
- {0xAC4B,0xAC4B,0xCD0B},
- {0xAC4C,0xAC4C,0xCD0D},
- {0xAC4D,0xAC4D,0xCD0E},
- {0xAC4E,0xAC4E,0xCD0F},
- {0xAC4F,0xAC4F,0xCD11},
- {0xAC50,0xAC50,0xCD12}, /* AC50 */
- {0xAC51,0xAC51,0xCD13},
- {0xAC52,0xAC52,0xCD14},
- {0xAC53,0xAC53,0xCD15},
- {0xAC54,0xAC54,0xCD16},
- {0xAC55,0xAC55,0xCD17},
- {0xAC56,0xAC56,0xCD1A},
- {0xAC57,0xAC57,0xCD1C},
- {0xAC58,0xAC58,0xCD1E},
- {0xAC59,0xAC59,0xCD1F},
- {0xAC5A,0xAC5A,0xCD20},
- {0xAC5B,0xAC5B,0x003F},
- {0xAC5C,0xAC5C,0x003F},
- {0xAC5D,0xAC5D,0x003F},
- {0xAC5E,0xAC5E,0x003F},
- {0xAC5F,0xAC5F,0x003F},
- {0xAC60,0xAC60,0x003F}, /* AC60 */
- {0xAC61,0xAC61,0xCD21},
- {0xAC62,0xAC62,0xCD22},
- {0xAC63,0xAC63,0xCD23},
- {0xAC64,0xAC64,0xCD25},
- {0xAC65,0xAC65,0xCD26},
- {0xAC66,0xAC66,0xCD27},
- {0xAC67,0xAC67,0xCD29},
- {0xAC68,0xAC68,0xCD2A},
- {0xAC69,0xAC69,0xCD2B},
- {0xAC6A,0xAC6A,0xCD2D},
- {0xAC6B,0xAC6B,0xCD2E},
- {0xAC6C,0xAC6C,0xCD2F},
- {0xAC6D,0xAC6D,0xCD30},
- {0xAC6E,0xAC6E,0xCD31},
- {0xAC6F,0xAC6F,0xCD32},
- {0xAC70,0xAC70,0xCD33}, /* AC70 */
- {0xAC71,0xAC71,0xCD34},
- {0xAC72,0xAC72,0xCD35},
- {0xAC73,0xAC73,0xCD36},
- {0xAC74,0xAC74,0xCD37},
- {0xAC75,0xAC75,0xCD38},
- {0xAC76,0xAC76,0xCD3A},
- {0xAC77,0xAC77,0xCD3B},
- {0xAC78,0xAC78,0xCD3C},
- {0xAC79,0xAC79,0xCD3D},
- {0xAC7A,0xAC7A,0xCD3E},
- {0xAC7B,0xAC7B,0x003F},
- {0xAC7C,0xAC7C,0x003F},
- {0xAC7D,0xAC7D,0x003F},
- {0xAC7E,0xAC7E,0x003F},
- {0xAC7F,0xAC7F,0x003F},
- {0xAC80,0xAC80,0x003F}, /* AC80 */
- {0xAC81,0xAC81,0xCD3F},
- {0xAC82,0xAC82,0xCD40},
- {0xAC83,0xAC83,0xCD41},
- {0xAC84,0xAC84,0xCD42},
- {0xAC85,0xAC85,0xCD43},
- {0xAC86,0xAC86,0xCD44},
- {0xAC87,0xAC87,0xCD45},
- {0xAC88,0xAC88,0xCD46},
- {0xAC89,0xAC89,0xCD47},
- {0xAC8A,0xAC8A,0xCD48},
- {0xAC8B,0xAC8B,0xCD49},
- {0xAC8C,0xAC8C,0xCD4A},
- {0xAC8D,0xAC8D,0xCD4B},
- {0xAC8E,0xAC8E,0xCD4C},
- {0xAC8F,0xAC8F,0xCD4D},
- {0xAC90,0xAC90,0xCD4E}, /* AC90 */
- {0xAC91,0xAC91,0xCD4F},
- {0xAC92,0xAC92,0xCD50},
- {0xAC93,0xAC93,0xCD51},
- {0xAC94,0xAC94,0xCD52},
- {0xAC95,0xAC95,0xCD53},
- {0xAC96,0xAC96,0xCD54},
- {0xAC97,0xAC97,0xCD55},
- {0xAC98,0xAC98,0xCD56},
- {0xAC99,0xAC99,0xCD57},
- {0xAC9A,0xAC9A,0xCD58},
- {0xAC9B,0xAC9B,0xCD59},
- {0xAC9C,0xAC9C,0xCD5A},
- {0xAC9D,0xAC9D,0xCD5B},
- {0xAC9E,0xAC9E,0xCD5D},
- {0xAC9F,0xAC9F,0xCD5E},
- {0xACA0,0xACA0,0xCD5F}, /* ACA0 */
- {0xACA1,0xACD1,0x0410},
- {0xACA2,0xACD2,0x0411},
- {0xACA3,0xACD3,0x0412},
- {0xACA4,0xACD4,0x0413},
- {0xACA5,0xACD5,0x0414},
- {0xACA6,0xACD6,0x0415},
- {0xACA7,0xACD7,0x0401},
- {0xACA8,0xACD8,0x0416},
- {0xACA9,0xACD9,0x0417},
- {0xACAA,0xACDA,0x0418},
- {0xACAB,0xACDB,0x0419},
- {0xACAC,0xACDC,0x041A},
- {0xACAD,0xACDD,0x041B},
- {0xACAE,0xACDE,0x041C},
- {0xACAF,0xACDF,0x041D},
- {0xACB0,0xACE0,0x041E}, /* ACB0 */
- {0xACB1,0xACE1,0x041F},
- {0xACB2,0xACE2,0x0420},
- {0xACB3,0xACE3,0x0421},
- {0xACB4,0xACE4,0x0422},
- {0xACB5,0xACE5,0x0423},
- {0xACB6,0xACE6,0x0424},
- {0xACB7,0xACE7,0x0425},
- {0xACB8,0xACE8,0x0426},
- {0xACB9,0xACE9,0x0427},
- {0xACBA,0xACEA,0x0428},
- {0xACBB,0xACEB,0x0429},
- {0xACBC,0xACEC,0x042A},
- {0xACBD,0xACED,0x042B},
- {0xACBE,0xACEE,0x042C},
- {0xACBF,0xACEF,0x042D},
- {0xACC0,0xACF0,0x042E}, /* ACC0 */
- {0xACC1,0xACF1,0x042F},
- {0xACC2,0xACC2,0x003F},
- {0xACC3,0xACC3,0x003F},
- {0xACC4,0xACC4,0x003F},
- {0xACC5,0xACC5,0x003F},
- {0xACC6,0xACC6,0x003F},
- {0xACC7,0xACC7,0x003F},
- {0xACC8,0xACC8,0x003F},
- {0xACC9,0xACC9,0x003F},
- {0xACCA,0xACCA,0x003F},
- {0xACCB,0xACCB,0x003F},
- {0xACCC,0xACCC,0x003F},
- {0xACCD,0xACCD,0x003F},
- {0xACCE,0xACCE,0x003F},
- {0xACCF,0xACCF,0x003F},
- {0xACD0,0xACD0,0x003F}, /* ACD0 */
- {0xACA1,0xACD1,0x0430},
- {0xACA2,0xACD2,0x0431},
- {0xACA3,0xACD3,0x0432},
- {0xACA4,0xACD4,0x0433},
- {0xACA5,0xACD5,0x0434},
- {0xACA6,0xACD6,0x0435},
- {0xACA7,0xACD7,0x0451},
- {0xACA8,0xACD8,0x0436},
- {0xACA9,0xACD9,0x0437},
- {0xACAA,0xACDA,0x0438},
- {0xACAB,0xACDB,0x0439},
- {0xACAC,0xACDC,0x043A},
- {0xACAD,0xACDD,0x043B},
- {0xACAE,0xACDE,0x043C},
- {0xACAF,0xACDF,0x043D},
- {0xACB0,0xACE0,0x043E}, /* ACE0 */
- {0xACB1,0xACE1,0x043F},
- {0xACB2,0xACE2,0x0440},
- {0xACB3,0xACE3,0x0441},
- {0xACB4,0xACE4,0x0442},
- {0xACB5,0xACE5,0x0443},
- {0xACB6,0xACE6,0x0444},
- {0xACB7,0xACE7,0x0445},
- {0xACB8,0xACE8,0x0446},
- {0xACB9,0xACE9,0x0447},
- {0xACBA,0xACEA,0x0448},
- {0xACBB,0xACEB,0x0449},
- {0xACBC,0xACEC,0x044A},
- {0xACBD,0xACED,0x044B},
- {0xACBE,0xACEE,0x044C},
- {0xACBF,0xACEF,0x044D},
- {0xACC0,0xACF0,0x044E}, /* ACF0 */
- {0xACC1,0xACF1,0x044F},
- {0xACF2,0xACF2,0x003F},
- {0xACF3,0xACF3,0x003F},
- {0xACF4,0xACF4,0x003F},
- {0xACF5,0xACF5,0x003F},
- {0xACF6,0xACF6,0x003F},
- {0xACF7,0xACF7,0x003F},
- {0xACF8,0xACF8,0x003F},
- {0xACF9,0xACF9,0x003F},
- {0xACFA,0xACFA,0x003F},
- {0xACFB,0xACFB,0x003F},
- {0xACFC,0xACFC,0x003F},
- {0xACFD,0xACFD,0x003F},
- {0xACFE,0xACFE,0x003F},
- {0xACFF,0xACFF,0x003F}
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx00 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx10 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx20 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx30 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0xAC40,0xAC40}, /* AC40 */
+ {0xAC41,0xAC41},
+ {0xAC42,0xAC42},
+ {0xAC43,0xAC43},
+ {0xAC44,0xAC44},
+ {0xAC45,0xAC45},
+ {0xAC46,0xAC46},
+ {0xAC47,0xAC47},
+ {0xAC48,0xAC48},
+ {0xAC49,0xAC49},
+ {0xAC4A,0xAC4A},
+ {0xAC4B,0xAC4B},
+ {0xAC4C,0xAC4C},
+ {0xAC4D,0xAC4D},
+ {0xAC4E,0xAC4E},
+ {0xAC4F,0xAC4F},
+ {0xAC50,0xAC50}, /* AC50 */
+ {0xAC51,0xAC51},
+ {0xAC52,0xAC52},
+ {0xAC53,0xAC53},
+ {0xAC54,0xAC54},
+ {0xAC55,0xAC55},
+ {0xAC56,0xAC56},
+ {0xAC57,0xAC57},
+ {0xAC58,0xAC58},
+ {0xAC59,0xAC59},
+ {0xAC5A,0xAC5A},
+ {0xAC5B,0xAC5B},
+ {0xAC5C,0xAC5C},
+ {0xAC5D,0xAC5D},
+ {0xAC5E,0xAC5E},
+ {0xAC5F,0xAC5F},
+ {0xAC60,0xAC60}, /* AC60 */
+ {0xAC61,0xAC61},
+ {0xAC62,0xAC62},
+ {0xAC63,0xAC63},
+ {0xAC64,0xAC64},
+ {0xAC65,0xAC65},
+ {0xAC66,0xAC66},
+ {0xAC67,0xAC67},
+ {0xAC68,0xAC68},
+ {0xAC69,0xAC69},
+ {0xAC6A,0xAC6A},
+ {0xAC6B,0xAC6B},
+ {0xAC6C,0xAC6C},
+ {0xAC6D,0xAC6D},
+ {0xAC6E,0xAC6E},
+ {0xAC6F,0xAC6F},
+ {0xAC70,0xAC70}, /* AC70 */
+ {0xAC71,0xAC71},
+ {0xAC72,0xAC72},
+ {0xAC73,0xAC73},
+ {0xAC74,0xAC74},
+ {0xAC75,0xAC75},
+ {0xAC76,0xAC76},
+ {0xAC77,0xAC77},
+ {0xAC78,0xAC78},
+ {0xAC79,0xAC79},
+ {0xAC7A,0xAC7A},
+ {0xAC7B,0xAC7B},
+ {0xAC7C,0xAC7C},
+ {0xAC7D,0xAC7D},
+ {0xAC7E,0xAC7E},
+ {0xAC7F,0xAC7F},
+ {0xAC80,0xAC80}, /* AC80 */
+ {0xAC81,0xAC81},
+ {0xAC82,0xAC82},
+ {0xAC83,0xAC83},
+ {0xAC84,0xAC84},
+ {0xAC85,0xAC85},
+ {0xAC86,0xAC86},
+ {0xAC87,0xAC87},
+ {0xAC88,0xAC88},
+ {0xAC89,0xAC89},
+ {0xAC8A,0xAC8A},
+ {0xAC8B,0xAC8B},
+ {0xAC8C,0xAC8C},
+ {0xAC8D,0xAC8D},
+ {0xAC8E,0xAC8E},
+ {0xAC8F,0xAC8F},
+ {0xAC90,0xAC90}, /* AC90 */
+ {0xAC91,0xAC91},
+ {0xAC92,0xAC92},
+ {0xAC93,0xAC93},
+ {0xAC94,0xAC94},
+ {0xAC95,0xAC95},
+ {0xAC96,0xAC96},
+ {0xAC97,0xAC97},
+ {0xAC98,0xAC98},
+ {0xAC99,0xAC99},
+ {0xAC9A,0xAC9A},
+ {0xAC9B,0xAC9B},
+ {0xAC9C,0xAC9C},
+ {0xAC9D,0xAC9D},
+ {0xAC9E,0xAC9E},
+ {0xAC9F,0xAC9F},
+ {0xACA0,0xACA0}, /* ACA0 */
+ {0xACA1,0xACD1},
+ {0xACA2,0xACD2},
+ {0xACA3,0xACD3},
+ {0xACA4,0xACD4},
+ {0xACA5,0xACD5},
+ {0xACA6,0xACD6},
+ {0xACA7,0xACD7},
+ {0xACA8,0xACD8},
+ {0xACA9,0xACD9},
+ {0xACAA,0xACDA},
+ {0xACAB,0xACDB},
+ {0xACAC,0xACDC},
+ {0xACAD,0xACDD},
+ {0xACAE,0xACDE},
+ {0xACAF,0xACDF},
+ {0xACB0,0xACE0}, /* ACB0 */
+ {0xACB1,0xACE1},
+ {0xACB2,0xACE2},
+ {0xACB3,0xACE3},
+ {0xACB4,0xACE4},
+ {0xACB5,0xACE5},
+ {0xACB6,0xACE6},
+ {0xACB7,0xACE7},
+ {0xACB8,0xACE8},
+ {0xACB9,0xACE9},
+ {0xACBA,0xACEA},
+ {0xACBB,0xACEB},
+ {0xACBC,0xACEC},
+ {0xACBD,0xACED},
+ {0xACBE,0xACEE},
+ {0xACBF,0xACEF},
+ {0xACC0,0xACF0}, /* ACC0 */
+ {0xACC1,0xACF1},
+ {0xACC2,0xACC2},
+ {0xACC3,0xACC3},
+ {0xACC4,0xACC4},
+ {0xACC5,0xACC5},
+ {0xACC6,0xACC6},
+ {0xACC7,0xACC7},
+ {0xACC8,0xACC8},
+ {0xACC9,0xACC9},
+ {0xACCA,0xACCA},
+ {0xACCB,0xACCB},
+ {0xACCC,0xACCC},
+ {0xACCD,0xACCD},
+ {0xACCE,0xACCE},
+ {0xACCF,0xACCF},
+ {0xACD0,0xACD0}, /* ACD0 */
+ {0xACA1,0xACD1},
+ {0xACA2,0xACD2},
+ {0xACA3,0xACD3},
+ {0xACA4,0xACD4},
+ {0xACA5,0xACD5},
+ {0xACA6,0xACD6},
+ {0xACA7,0xACD7},
+ {0xACA8,0xACD8},
+ {0xACA9,0xACD9},
+ {0xACAA,0xACDA},
+ {0xACAB,0xACDB},
+ {0xACAC,0xACDC},
+ {0xACAD,0xACDD},
+ {0xACAE,0xACDE},
+ {0xACAF,0xACDF},
+ {0xACB0,0xACE0}, /* ACE0 */
+ {0xACB1,0xACE1},
+ {0xACB2,0xACE2},
+ {0xACB3,0xACE3},
+ {0xACB4,0xACE4},
+ {0xACB5,0xACE5},
+ {0xACB6,0xACE6},
+ {0xACB7,0xACE7},
+ {0xACB8,0xACE8},
+ {0xACB9,0xACE9},
+ {0xACBA,0xACEA},
+ {0xACBB,0xACEB},
+ {0xACBC,0xACEC},
+ {0xACBD,0xACED},
+ {0xACBE,0xACEE},
+ {0xACBF,0xACEF},
+ {0xACC0,0xACF0}, /* ACF0 */
+ {0xACC1,0xACF1},
+ {0xACF2,0xACF2},
+ {0xACF3,0xACF3},
+ {0xACF4,0xACF4},
+ {0xACF5,0xACF5},
+ {0xACF6,0xACF6},
+ {0xACF7,0xACF7},
+ {0xACF8,0xACF8},
+ {0xACF9,0xACF9},
+ {0xACFA,0xACFA},
+ {0xACFB,0xACFB},
+ {0xACFC,0xACFC},
+ {0xACFD,0xACFD},
+ {0xACFE,0xACFE},
+ {0xACFF,0xACFF}
};
-static MY_UNICASE_CHARACTER *my_caseinfo_pages_euckr[256]=
+static const MY_CASEFOLD_CHARACTER *my_casefold_pages_euckr[256]=
{
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 0 */
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
@@ -1480,10 +1480,11 @@ static MY_UNICASE_CHARACTER *my_caseinfo_pages_euckr[256]=
};
-static MY_UNICASE_INFO my_caseinfo_euckr=
+static MY_CASEFOLD_INFO my_casefold_euckr=
{
0xFFFF,
- my_caseinfo_pages_euckr
+ my_casefold_pages_euckr,
+ NULL /* ws */
};
@@ -9974,7 +9975,9 @@ static MY_COLLATION_HANDLER my_collation_handler_euckr_korean_ci=
my_hash_sort_simple,
my_propagate_simple,
my_min_str_mb_simple,
- my_max_str_mb_simple
+ my_max_str_mb_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
@@ -9993,7 +9996,9 @@ static MY_COLLATION_HANDLER my_collation_handler_euckr_bin=
my_hash_sort_mb_bin,
my_propagate_simple,
my_min_str_mb_simple,
- my_max_str_mb_simple
+ my_max_str_mb_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
@@ -10012,7 +10017,9 @@ static MY_COLLATION_HANDLER my_collation_handler_euckr_korean_nopad_ci=
my_hash_sort_simple_nopad,
my_propagate_simple,
my_min_str_mb_simple_nopad,
- my_max_str_mb_simple
+ my_max_str_mb_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
@@ -10031,7 +10038,9 @@ static MY_COLLATION_HANDLER my_collation_handler_euckr_nopad_bin=
my_hash_sort_mb_nopad_bin,
my_propagate_simple,
my_min_str_mb_simple_nopad,
- my_max_str_mb_simple
+ my_max_str_mb_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
@@ -10065,7 +10074,9 @@ static MY_CHARSET_HANDLER my_charset_handler=
my_well_formed_char_length_euckr,
my_copy_fix_mb,
my_native_to_mb_euckr,
- my_wc_to_printable_generic
+ my_wc_to_printable_generic,
+ my_casefold_multiply_1,
+ my_casefold_multiply_1
};
@@ -10084,19 +10095,17 @@ struct charset_info_st my_charset_euckr_korean_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_caseinfo_euckr, /* caseinfo */
+ &my_casefold_euckr, /* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
2, /* mbmaxlen */
0, /* min_sort_char */
0xFEFE, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_handler,
&my_collation_handler_euckr_korean_ci
};
@@ -10117,19 +10126,17 @@ struct charset_info_st my_charset_euckr_bin=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_caseinfo_euckr, /* caseinfo */
+ &my_casefold_euckr, /* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
2, /* mbmaxlen */
0, /* min_sort_char */
0xFEFE, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_handler,
&my_collation_handler_euckr_bin
};
@@ -10150,19 +10157,17 @@ struct charset_info_st my_charset_euckr_korean_nopad_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_caseinfo_euckr, /* caseinfo */
+ &my_casefold_euckr, /* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
2, /* mbmaxlen */
0, /* min_sort_char */
0xFEFE, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_handler,
&my_collation_handler_euckr_korean_nopad_ci
};
@@ -10183,19 +10188,17 @@ struct charset_info_st my_charset_euckr_nopad_bin=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_caseinfo_euckr, /* caseinfo */
+ &my_casefold_euckr, /* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
2, /* mbmaxlen */
0, /* min_sort_char */
0xFEFE, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_handler,
&my_collation_handler_euckr_nopad_bin
};
diff --git a/strings/ctype-eucjpms.c b/strings/ctype-eucjpms.c
index ed48917e333..a5f727551aa 100644
--- a/strings/ctype-eucjpms.c
+++ b/strings/ctype-eucjpms.c
@@ -250,1461 +250,1461 @@ static const uchar sort_order_eucjpms[]=
/* Case info pages for JIS-X-0208 range */
-static MY_UNICASE_CHARACTER cA2[256]=
+static const MY_CASEFOLD_CHARACTER cA2[256]=
{
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx40 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx50 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx60 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx70 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx80 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx90 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0xA2A0,0xA2A0,0x003F}, /* A2A0 */
- {0xA2A1,0xA2A1,0x25C6},
- {0xA2A2,0xA2A2,0x25A1},
- {0xA2A3,0xA2A3,0x25A0},
- {0xA2A4,0xA2A4,0x25B3},
- {0xA2A5,0xA2A5,0x25B2},
- {0xA2A6,0xA2A6,0x25BD},
- {0xA2A7,0xA2A7,0x25BC},
- {0xA2A8,0xA2A8,0x203B},
- {0xA2A9,0xA2A9,0x3012},
- {0xA2AA,0xA2AA,0x2192},
- {0xA2AB,0xA2AB,0x2190},
- {0xA2AC,0xA2AC,0x2191},
- {0xA2AD,0xA2AD,0x2193},
- {0xA2AE,0xA2AE,0x3013},
- {0xA2AF,0xA2AF,0x003F},
- {0xA2B0,0xA2B0,0x003F}, /* A2B0 */
- {0xA2B1,0xA2B1,0x003F},
- {0xA2B2,0xA2B2,0x003F},
- {0xA2B3,0xA2B3,0x003F},
- {0xA2B4,0xA2B4,0x003F},
- {0xA2B5,0xA2B5,0x003F},
- {0xA2B6,0xA2B6,0x003F},
- {0xA2B7,0xA2B7,0x003F},
- {0xA2B8,0xA2B8,0x003F},
- {0xA2B9,0xA2B9,0x003F},
- {0xA2BA,0xA2BA,0x2208},
- {0xA2BB,0xA2BB,0x220B},
- {0xA2BC,0xA2BC,0x2286},
- {0xA2BD,0xA2BD,0x2287},
- {0xA2BE,0xA2BE,0x2282},
- {0xA2BF,0xA2BF,0x2283},
- {0xA2C0,0xA2C0,0x222A}, /* A2C0 */
- {0xA2C1,0xA2C1,0x2229},
- {0xA2C2,0xA2C2,0x003F},
- {0xA2C3,0xA2C3,0x003F},
- {0xA2C4,0xA2C4,0x003F},
- {0xA2C5,0xA2C5,0x003F},
- {0xA2C6,0xA2C6,0x003F},
- {0xA2C7,0xA2C7,0x003F},
- {0xA2C8,0xA2C8,0x003F},
- {0xA2C9,0xA2C9,0x003F},
- {0xA2CA,0xA2CA,0x2227},
- {0xA2CB,0xA2CB,0x2228},
- {0xA2CC,0xA2CC,0xFFE2},
- {0xA2CD,0xA2CD,0x21D2},
- {0xA2CE,0xA2CE,0x21D4},
- {0xA2CF,0xA2CF,0x2200},
- {0xA2D0,0xA2D0,0x2203}, /* A2D0 */
- {0xA2D1,0xA2D1,0x003F},
- {0xA2D2,0xA2D2,0x003F},
- {0xA2D3,0xA2D3,0x003F},
- {0xA2D4,0xA2D4,0x003F},
- {0xA2D5,0xA2D5,0x003F},
- {0xA2D6,0xA2D6,0x003F},
- {0xA2D7,0xA2D7,0x003F},
- {0xA2D8,0xA2D8,0x003F},
- {0xA2D9,0xA2D9,0x003F},
- {0xA2DA,0xA2DA,0x003F},
- {0xA2DB,0xA2DB,0x003F},
- {0xA2DC,0xA2DC,0x2220},
- {0xA2DD,0xA2DD,0x22A5},
- {0xA2DE,0xA2DE,0x2312},
- {0xA2DF,0xA2DF,0x2202},
- {0xA2E0,0xA2E0,0x2207}, /* A2E0 */
- {0xA2E1,0xA2E1,0x2261},
- {0xA2E2,0xA2E2,0x2252},
- {0xA2E3,0xA2E3,0x226A},
- {0xA2E4,0xA2E4,0x226B},
- {0xA2E5,0xA2E5,0x221A},
- {0xA2E6,0xA2E6,0x223D},
- {0xA2E7,0xA2E7,0x221D},
- {0xA2E8,0xA2E8,0x2235},
- {0xA2E9,0xA2E9,0x222B},
- {0xA2EA,0xA2EA,0x222C},
- {0xA2EB,0xA2EB,0x003F},
- {0xA2EC,0xA2EC,0x003F},
- {0xA2ED,0xA2ED,0x003F},
- {0xA2EE,0xA2EE,0x003F},
- {0xA2EF,0xA2EF,0x003F},
- {0xA2F0,0xA2F0,0x003F}, /* A2F0 */
- {0xA2F1,0xA2F1,0x003F},
- {0xA2F2,0x8FABA9,0x212B},
- {0xA2F3,0xA2F3,0x2030},
- {0xA2F4,0xA2F4,0x266F},
- {0xA2F5,0xA2F5,0x266D},
- {0xA2F6,0xA2F6,0x266A},
- {0xA2F7,0xA2F7,0x2020},
- {0xA2F8,0xA2F8,0x2021},
- {0xA2F9,0xA2F9,0x00B6},
- {0xA2FA,0xA2FA,0x003F},
- {0xA2FB,0xA2FB,0x003F},
- {0xA2FC,0xA2FC,0x003F},
- {0xA2FD,0xA2FD,0x003F},
- {0xA2FE,0xA2FE,0x25EF},
- {0xA2FF,0xA2FF,0x003F},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx00 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx10 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx20 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx30 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx40 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx50 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx60 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx70 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx80 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx90 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0xA2A0,0xA2A0}, /* A2A0 */
+ {0xA2A1,0xA2A1},
+ {0xA2A2,0xA2A2},
+ {0xA2A3,0xA2A3},
+ {0xA2A4,0xA2A4},
+ {0xA2A5,0xA2A5},
+ {0xA2A6,0xA2A6},
+ {0xA2A7,0xA2A7},
+ {0xA2A8,0xA2A8},
+ {0xA2A9,0xA2A9},
+ {0xA2AA,0xA2AA},
+ {0xA2AB,0xA2AB},
+ {0xA2AC,0xA2AC},
+ {0xA2AD,0xA2AD},
+ {0xA2AE,0xA2AE},
+ {0xA2AF,0xA2AF},
+ {0xA2B0,0xA2B0}, /* A2B0 */
+ {0xA2B1,0xA2B1},
+ {0xA2B2,0xA2B2},
+ {0xA2B3,0xA2B3},
+ {0xA2B4,0xA2B4},
+ {0xA2B5,0xA2B5},
+ {0xA2B6,0xA2B6},
+ {0xA2B7,0xA2B7},
+ {0xA2B8,0xA2B8},
+ {0xA2B9,0xA2B9},
+ {0xA2BA,0xA2BA},
+ {0xA2BB,0xA2BB},
+ {0xA2BC,0xA2BC},
+ {0xA2BD,0xA2BD},
+ {0xA2BE,0xA2BE},
+ {0xA2BF,0xA2BF},
+ {0xA2C0,0xA2C0}, /* A2C0 */
+ {0xA2C1,0xA2C1},
+ {0xA2C2,0xA2C2},
+ {0xA2C3,0xA2C3},
+ {0xA2C4,0xA2C4},
+ {0xA2C5,0xA2C5},
+ {0xA2C6,0xA2C6},
+ {0xA2C7,0xA2C7},
+ {0xA2C8,0xA2C8},
+ {0xA2C9,0xA2C9},
+ {0xA2CA,0xA2CA},
+ {0xA2CB,0xA2CB},
+ {0xA2CC,0xA2CC},
+ {0xA2CD,0xA2CD},
+ {0xA2CE,0xA2CE},
+ {0xA2CF,0xA2CF},
+ {0xA2D0,0xA2D0}, /* A2D0 */
+ {0xA2D1,0xA2D1},
+ {0xA2D2,0xA2D2},
+ {0xA2D3,0xA2D3},
+ {0xA2D4,0xA2D4},
+ {0xA2D5,0xA2D5},
+ {0xA2D6,0xA2D6},
+ {0xA2D7,0xA2D7},
+ {0xA2D8,0xA2D8},
+ {0xA2D9,0xA2D9},
+ {0xA2DA,0xA2DA},
+ {0xA2DB,0xA2DB},
+ {0xA2DC,0xA2DC},
+ {0xA2DD,0xA2DD},
+ {0xA2DE,0xA2DE},
+ {0xA2DF,0xA2DF},
+ {0xA2E0,0xA2E0}, /* A2E0 */
+ {0xA2E1,0xA2E1},
+ {0xA2E2,0xA2E2},
+ {0xA2E3,0xA2E3},
+ {0xA2E4,0xA2E4},
+ {0xA2E5,0xA2E5},
+ {0xA2E6,0xA2E6},
+ {0xA2E7,0xA2E7},
+ {0xA2E8,0xA2E8},
+ {0xA2E9,0xA2E9},
+ {0xA2EA,0xA2EA},
+ {0xA2EB,0xA2EB},
+ {0xA2EC,0xA2EC},
+ {0xA2ED,0xA2ED},
+ {0xA2EE,0xA2EE},
+ {0xA2EF,0xA2EF},
+ {0xA2F0,0xA2F0}, /* A2F0 */
+ {0xA2F1,0xA2F1},
+ {0xA2F2,0x8FABA9},
+ {0xA2F3,0xA2F3},
+ {0xA2F4,0xA2F4},
+ {0xA2F5,0xA2F5},
+ {0xA2F6,0xA2F6},
+ {0xA2F7,0xA2F7},
+ {0xA2F8,0xA2F8},
+ {0xA2F9,0xA2F9},
+ {0xA2FA,0xA2FA},
+ {0xA2FB,0xA2FB},
+ {0xA2FC,0xA2FC},
+ {0xA2FD,0xA2FD},
+ {0xA2FE,0xA2FE},
+ {0xA2FF,0xA2FF},
};
-static MY_UNICASE_CHARACTER cA3[256]=
+static const MY_CASEFOLD_CHARACTER cA3[256]=
{
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx40 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx50 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx60 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx70 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx80 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx90 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0xA3A0,0xA3A0,0x003F}, /* A3A0 */
- {0xA3A1,0xA3A1,0x003F},
- {0xA3A2,0xA3A2,0x003F},
- {0xA3A3,0xA3A3,0x003F},
- {0xA3A4,0xA3A4,0x003F},
- {0xA3A5,0xA3A5,0x003F},
- {0xA3A6,0xA3A6,0x003F},
- {0xA3A7,0xA3A7,0x003F},
- {0xA3A8,0xA3A8,0x003F},
- {0xA3A9,0xA3A9,0x003F},
- {0xA3AA,0xA3AA,0x003F},
- {0xA3AB,0xA3AB,0x003F},
- {0xA3AC,0xA3AC,0x003F},
- {0xA3AD,0xA3AD,0x003F},
- {0xA3AE,0xA3AE,0x003F},
- {0xA3AF,0xA3AF,0x003F},
- {0xA3B0,0xA3B0,0xFF10}, /* A3B0 */
- {0xA3B1,0xA3B1,0xFF11},
- {0xA3B2,0xA3B2,0xFF12},
- {0xA3B3,0xA3B3,0xFF13},
- {0xA3B4,0xA3B4,0xFF14},
- {0xA3B5,0xA3B5,0xFF15},
- {0xA3B6,0xA3B6,0xFF16},
- {0xA3B7,0xA3B7,0xFF17},
- {0xA3B8,0xA3B8,0xFF18},
- {0xA3B9,0xA3B9,0xFF19},
- {0xA3BA,0xA3BA,0x003F},
- {0xA3BB,0xA3BB,0x003F},
- {0xA3BC,0xA3BC,0x003F},
- {0xA3BD,0xA3BD,0x003F},
- {0xA3BE,0xA3BE,0x003F},
- {0xA3BF,0xA3BF,0x003F},
- {0xA3C0,0xA3C0,0x003F}, /* A3C0 */
- {0xA3C1,0xA3E1,0xFF21},
- {0xA3C2,0xA3E2,0xFF22},
- {0xA3C3,0xA3E3,0xFF23},
- {0xA3C4,0xA3E4,0xFF24},
- {0xA3C5,0xA3E5,0xFF25},
- {0xA3C6,0xA3E6,0xFF26},
- {0xA3C7,0xA3E7,0xFF27},
- {0xA3C8,0xA3E8,0xFF28},
- {0xA3C9,0xA3E9,0xFF29},
- {0xA3CA,0xA3EA,0xFF2A},
- {0xA3CB,0xA3EB,0xFF2B},
- {0xA3CC,0xA3EC,0xFF2C},
- {0xA3CD,0xA3ED,0xFF2D},
- {0xA3CE,0xA3EE,0xFF2E},
- {0xA3CF,0xA3EF,0xFF2F},
- {0xA3D0,0xA3F0,0xFF30}, /* A3D0 */
- {0xA3D1,0xA3F1,0xFF31},
- {0xA3D2,0xA3F2,0xFF32},
- {0xA3D3,0xA3F3,0xFF33},
- {0xA3D4,0xA3F4,0xFF34},
- {0xA3D5,0xA3F5,0xFF35},
- {0xA3D6,0xA3F6,0xFF36},
- {0xA3D7,0xA3F7,0xFF37},
- {0xA3D8,0xA3F8,0xFF38},
- {0xA3D9,0xA3F9,0xFF39},
- {0xA3DA,0xA3FA,0xFF3A},
- {0xA3DB,0xA3DB,0x003F},
- {0xA3DC,0xA3DC,0x003F},
- {0xA3DD,0xA3DD,0x003F},
- {0xA3DE,0xA3DE,0x003F},
- {0xA3DF,0xA3DF,0x003F},
- {0xA3E0,0xA3E0,0x003F}, /* A3E0 */
- {0xA3C1,0xA3E1,0xFF41},
- {0xA3C2,0xA3E2,0xFF42},
- {0xA3C3,0xA3E3,0xFF43},
- {0xA3C4,0xA3E4,0xFF44},
- {0xA3C5,0xA3E5,0xFF45},
- {0xA3C6,0xA3E6,0xFF46},
- {0xA3C7,0xA3E7,0xFF47},
- {0xA3C8,0xA3E8,0xFF48},
- {0xA3C9,0xA3E9,0xFF49},
- {0xA3CA,0xA3EA,0xFF4A},
- {0xA3CB,0xA3EB,0xFF4B},
- {0xA3CC,0xA3EC,0xFF4C},
- {0xA3CD,0xA3ED,0xFF4D},
- {0xA3CE,0xA3EE,0xFF4E},
- {0xA3CF,0xA3EF,0xFF4F},
- {0xA3D0,0xA3F0,0xFF50}, /* A3F0 */
- {0xA3D1,0xA3F1,0xFF51},
- {0xA3D2,0xA3F2,0xFF52},
- {0xA3D3,0xA3F3,0xFF53},
- {0xA3D4,0xA3F4,0xFF54},
- {0xA3D5,0xA3F5,0xFF55},
- {0xA3D6,0xA3F6,0xFF56},
- {0xA3D7,0xA3F7,0xFF57},
- {0xA3D8,0xA3F8,0xFF58},
- {0xA3D9,0xA3F9,0xFF59},
- {0xA3DA,0xA3FA,0xFF5A},
- {0xA3FB,0xA3FB,0x003F},
- {0xA3FC,0xA3FC,0x003F},
- {0xA3FD,0xA3FD,0x003F},
- {0xA3FE,0xA3FE,0x003F},
- {0xA3FF,0xA3FF,0x003F},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx00 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx10 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx20 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx30 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx40 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx50 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx60 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx70 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx80 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx90 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0xA3A0,0xA3A0}, /* A3A0 */
+ {0xA3A1,0xA3A1},
+ {0xA3A2,0xA3A2},
+ {0xA3A3,0xA3A3},
+ {0xA3A4,0xA3A4},
+ {0xA3A5,0xA3A5},
+ {0xA3A6,0xA3A6},
+ {0xA3A7,0xA3A7},
+ {0xA3A8,0xA3A8},
+ {0xA3A9,0xA3A9},
+ {0xA3AA,0xA3AA},
+ {0xA3AB,0xA3AB},
+ {0xA3AC,0xA3AC},
+ {0xA3AD,0xA3AD},
+ {0xA3AE,0xA3AE},
+ {0xA3AF,0xA3AF},
+ {0xA3B0,0xA3B0}, /* A3B0 */
+ {0xA3B1,0xA3B1},
+ {0xA3B2,0xA3B2},
+ {0xA3B3,0xA3B3},
+ {0xA3B4,0xA3B4},
+ {0xA3B5,0xA3B5},
+ {0xA3B6,0xA3B6},
+ {0xA3B7,0xA3B7},
+ {0xA3B8,0xA3B8},
+ {0xA3B9,0xA3B9},
+ {0xA3BA,0xA3BA},
+ {0xA3BB,0xA3BB},
+ {0xA3BC,0xA3BC},
+ {0xA3BD,0xA3BD},
+ {0xA3BE,0xA3BE},
+ {0xA3BF,0xA3BF},
+ {0xA3C0,0xA3C0}, /* A3C0 */
+ {0xA3C1,0xA3E1},
+ {0xA3C2,0xA3E2},
+ {0xA3C3,0xA3E3},
+ {0xA3C4,0xA3E4},
+ {0xA3C5,0xA3E5},
+ {0xA3C6,0xA3E6},
+ {0xA3C7,0xA3E7},
+ {0xA3C8,0xA3E8},
+ {0xA3C9,0xA3E9},
+ {0xA3CA,0xA3EA},
+ {0xA3CB,0xA3EB},
+ {0xA3CC,0xA3EC},
+ {0xA3CD,0xA3ED},
+ {0xA3CE,0xA3EE},
+ {0xA3CF,0xA3EF},
+ {0xA3D0,0xA3F0}, /* A3D0 */
+ {0xA3D1,0xA3F1},
+ {0xA3D2,0xA3F2},
+ {0xA3D3,0xA3F3},
+ {0xA3D4,0xA3F4},
+ {0xA3D5,0xA3F5},
+ {0xA3D6,0xA3F6},
+ {0xA3D7,0xA3F7},
+ {0xA3D8,0xA3F8},
+ {0xA3D9,0xA3F9},
+ {0xA3DA,0xA3FA},
+ {0xA3DB,0xA3DB},
+ {0xA3DC,0xA3DC},
+ {0xA3DD,0xA3DD},
+ {0xA3DE,0xA3DE},
+ {0xA3DF,0xA3DF},
+ {0xA3E0,0xA3E0}, /* A3E0 */
+ {0xA3C1,0xA3E1},
+ {0xA3C2,0xA3E2},
+ {0xA3C3,0xA3E3},
+ {0xA3C4,0xA3E4},
+ {0xA3C5,0xA3E5},
+ {0xA3C6,0xA3E6},
+ {0xA3C7,0xA3E7},
+ {0xA3C8,0xA3E8},
+ {0xA3C9,0xA3E9},
+ {0xA3CA,0xA3EA},
+ {0xA3CB,0xA3EB},
+ {0xA3CC,0xA3EC},
+ {0xA3CD,0xA3ED},
+ {0xA3CE,0xA3EE},
+ {0xA3CF,0xA3EF},
+ {0xA3D0,0xA3F0}, /* A3F0 */
+ {0xA3D1,0xA3F1},
+ {0xA3D2,0xA3F2},
+ {0xA3D3,0xA3F3},
+ {0xA3D4,0xA3F4},
+ {0xA3D5,0xA3F5},
+ {0xA3D6,0xA3F6},
+ {0xA3D7,0xA3F7},
+ {0xA3D8,0xA3F8},
+ {0xA3D9,0xA3F9},
+ {0xA3DA,0xA3FA},
+ {0xA3FB,0xA3FB},
+ {0xA3FC,0xA3FC},
+ {0xA3FD,0xA3FD},
+ {0xA3FE,0xA3FE},
+ {0xA3FF,0xA3FF},
};
-static MY_UNICASE_CHARACTER cA6[256]=
+static const MY_CASEFOLD_CHARACTER cA6[256]=
{
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx40 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx50 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx60 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx70 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx80 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx90 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0xA6A0,0xA6A0,0x003F}, /* A6A0 */
- {0xA6A1,0xA6C1,0x0391},
- {0xA6A2,0xA6C2,0x0392},
- {0xA6A3,0xA6C3,0x0393},
- {0xA6A4,0xA6C4,0x0394},
- {0xA6A5,0xA6C5,0x0395},
- {0xA6A6,0xA6C6,0x0396},
- {0xA6A7,0xA6C7,0x0397},
- {0xA6A8,0xA6C8,0x0398},
- {0xA6A9,0xA6C9,0x0399},
- {0xA6AA,0xA6CA,0x039A},
- {0xA6AB,0xA6CB,0x039B},
- {0xA6AC,0xA6CC,0x039C},
- {0xA6AD,0xA6CD,0x039D},
- {0xA6AE,0xA6CE,0x039E},
- {0xA6AF,0xA6CF,0x039F},
- {0xA6B0,0xA6D0,0x03A0}, /* A6B0 */
- {0xA6B1,0xA6D1,0x03A1},
- {0xA6B2,0xA6D2,0x03A3},
- {0xA6B3,0xA6D3,0x03A4},
- {0xA6B4,0xA6D4,0x03A5},
- {0xA6B5,0xA6D5,0x03A6},
- {0xA6B6,0xA6D6,0x03A7},
- {0xA6B7,0xA6D7,0x03A8},
- {0xA6B8,0xA6D8,0x03A9},
- {0xA6B9,0xA6B9,0x003F},
- {0xA6BA,0xA6BA,0x003F},
- {0xA6BB,0xA6BB,0x003F},
- {0xA6BC,0xA6BC,0x003F},
- {0xA6BD,0xA6BD,0x003F},
- {0xA6BE,0xA6BE,0x003F},
- {0xA6BF,0xA6BF,0x003F},
- {0xA6C0,0xA6C0,0x003F}, /* A6C0 */
- {0xA6A1,0xA6C1,0x03B1},
- {0xA6A2,0xA6C2,0x03B2},
- {0xA6A3,0xA6C3,0x03B3},
- {0xA6A4,0xA6C4,0x03B4},
- {0xA6A5,0xA6C5,0x03B5},
- {0xA6A6,0xA6C6,0x03B6},
- {0xA6A7,0xA6C7,0x03B7},
- {0xA6A8,0xA6C8,0x03B8},
- {0xA6A9,0xA6C9,0x03B9},
- {0xA6AA,0xA6CA,0x03BA},
- {0xA6AB,0xA6CB,0x03BB},
- {0xA6AC,0xA6CC,0x03BC},
- {0xA6AD,0xA6CD,0x03BD},
- {0xA6AE,0xA6CE,0x03BE},
- {0xA6AF,0xA6CF,0x03BF},
- {0xA6B0,0xA6D0,0x03C0}, /* A6D0 */
- {0xA6B1,0xA6D1,0x03C1},
- {0xA6B2,0xA6D2,0x03C3},
- {0xA6B3,0xA6D3,0x03C4},
- {0xA6B4,0xA6D4,0x03C5},
- {0xA6B5,0xA6D5,0x03C6},
- {0xA6B6,0xA6D6,0x03C7},
- {0xA6B7,0xA6D7,0x03C8},
- {0xA6B8,0xA6D8,0x03C9},
- {0xA6D9,0xA6D9,0x003F},
- {0xA6DA,0xA6DA,0x003F},
- {0xA6DB,0xA6DB,0x003F},
- {0xA6DC,0xA6DC,0x003F},
- {0xA6DD,0xA6DD,0x003F},
- {0xA6DE,0xA6DE,0x003F},
- {0xA6DF,0xA6DF,0x003F},
- {0xA6E0,0xA6E0,0x003F}, /* A6E0 */
- {0xA6E1,0xA6E1,0x003F},
- {0xA6E2,0xA6E2,0x003F},
- {0xA6E3,0xA6E3,0x003F},
- {0xA6E4,0xA6E4,0x003F},
- {0xA6E5,0xA6E5,0x003F},
- {0xA6E6,0xA6E6,0x003F},
- {0xA6E7,0xA6E7,0x003F},
- {0xA6E8,0xA6E8,0x003F},
- {0xA6E9,0xA6E9,0x003F},
- {0xA6EA,0xA6EA,0x003F},
- {0xA6EB,0xA6EB,0x003F},
- {0xA6EC,0xA6EC,0x003F},
- {0xA6ED,0xA6ED,0x003F},
- {0xA6EE,0xA6EE,0x003F},
- {0xA6EF,0xA6EF,0x003F},
- {0xA6F0,0xA6F0,0x003F}, /* A6F0 */
- {0xA6F1,0xA6F1,0x003F},
- {0xA6F2,0xA6F2,0x003F},
- {0xA6F3,0xA6F3,0x003F},
- {0xA6F4,0xA6F4,0x003F},
- {0xA6F5,0xA6F5,0x003F},
- {0xA6F6,0xA6F6,0x003F},
- {0xA6F7,0xA6F7,0x003F},
- {0xA6F8,0xA6F8,0x003F},
- {0xA6F9,0xA6F9,0x003F},
- {0xA6FA,0xA6FA,0x003F},
- {0xA6FB,0xA6FB,0x003F},
- {0xA6FC,0xA6FC,0x003F},
- {0xA6FD,0xA6FD,0x003F},
- {0xA6FE,0xA6FE,0x003F},
- {0xA6FF,0xA6FF,0x003F},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx00 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx10 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx20 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx30 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx40 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx50 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx60 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx70 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx80 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx90 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0xA6A0,0xA6A0}, /* A6A0 */
+ {0xA6A1,0xA6C1},
+ {0xA6A2,0xA6C2},
+ {0xA6A3,0xA6C3},
+ {0xA6A4,0xA6C4},
+ {0xA6A5,0xA6C5},
+ {0xA6A6,0xA6C6},
+ {0xA6A7,0xA6C7},
+ {0xA6A8,0xA6C8},
+ {0xA6A9,0xA6C9},
+ {0xA6AA,0xA6CA},
+ {0xA6AB,0xA6CB},
+ {0xA6AC,0xA6CC},
+ {0xA6AD,0xA6CD},
+ {0xA6AE,0xA6CE},
+ {0xA6AF,0xA6CF},
+ {0xA6B0,0xA6D0}, /* A6B0 */
+ {0xA6B1,0xA6D1},
+ {0xA6B2,0xA6D2},
+ {0xA6B3,0xA6D3},
+ {0xA6B4,0xA6D4},
+ {0xA6B5,0xA6D5},
+ {0xA6B6,0xA6D6},
+ {0xA6B7,0xA6D7},
+ {0xA6B8,0xA6D8},
+ {0xA6B9,0xA6B9},
+ {0xA6BA,0xA6BA},
+ {0xA6BB,0xA6BB},
+ {0xA6BC,0xA6BC},
+ {0xA6BD,0xA6BD},
+ {0xA6BE,0xA6BE},
+ {0xA6BF,0xA6BF},
+ {0xA6C0,0xA6C0}, /* A6C0 */
+ {0xA6A1,0xA6C1},
+ {0xA6A2,0xA6C2},
+ {0xA6A3,0xA6C3},
+ {0xA6A4,0xA6C4},
+ {0xA6A5,0xA6C5},
+ {0xA6A6,0xA6C6},
+ {0xA6A7,0xA6C7},
+ {0xA6A8,0xA6C8},
+ {0xA6A9,0xA6C9},
+ {0xA6AA,0xA6CA},
+ {0xA6AB,0xA6CB},
+ {0xA6AC,0xA6CC},
+ {0xA6AD,0xA6CD},
+ {0xA6AE,0xA6CE},
+ {0xA6AF,0xA6CF},
+ {0xA6B0,0xA6D0}, /* A6D0 */
+ {0xA6B1,0xA6D1},
+ {0xA6B2,0xA6D2},
+ {0xA6B3,0xA6D3},
+ {0xA6B4,0xA6D4},
+ {0xA6B5,0xA6D5},
+ {0xA6B6,0xA6D6},
+ {0xA6B7,0xA6D7},
+ {0xA6B8,0xA6D8},
+ {0xA6D9,0xA6D9},
+ {0xA6DA,0xA6DA},
+ {0xA6DB,0xA6DB},
+ {0xA6DC,0xA6DC},
+ {0xA6DD,0xA6DD},
+ {0xA6DE,0xA6DE},
+ {0xA6DF,0xA6DF},
+ {0xA6E0,0xA6E0}, /* A6E0 */
+ {0xA6E1,0xA6E1},
+ {0xA6E2,0xA6E2},
+ {0xA6E3,0xA6E3},
+ {0xA6E4,0xA6E4},
+ {0xA6E5,0xA6E5},
+ {0xA6E6,0xA6E6},
+ {0xA6E7,0xA6E7},
+ {0xA6E8,0xA6E8},
+ {0xA6E9,0xA6E9},
+ {0xA6EA,0xA6EA},
+ {0xA6EB,0xA6EB},
+ {0xA6EC,0xA6EC},
+ {0xA6ED,0xA6ED},
+ {0xA6EE,0xA6EE},
+ {0xA6EF,0xA6EF},
+ {0xA6F0,0xA6F0}, /* A6F0 */
+ {0xA6F1,0xA6F1},
+ {0xA6F2,0xA6F2},
+ {0xA6F3,0xA6F3},
+ {0xA6F4,0xA6F4},
+ {0xA6F5,0xA6F5},
+ {0xA6F6,0xA6F6},
+ {0xA6F7,0xA6F7},
+ {0xA6F8,0xA6F8},
+ {0xA6F9,0xA6F9},
+ {0xA6FA,0xA6FA},
+ {0xA6FB,0xA6FB},
+ {0xA6FC,0xA6FC},
+ {0xA6FD,0xA6FD},
+ {0xA6FE,0xA6FE},
+ {0xA6FF,0xA6FF},
};
-static MY_UNICASE_CHARACTER cA7[256]=
+static const MY_CASEFOLD_CHARACTER cA7[256]=
{
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx40 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx50 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx60 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx70 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx80 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx90 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0xA7A0,0xA7A0,0x003F}, /* A7A0 */
- {0xA7A1,0xA7D1,0x0410},
- {0xA7A2,0xA7D2,0x0411},
- {0xA7A3,0xA7D3,0x0412},
- {0xA7A4,0xA7D4,0x0413},
- {0xA7A5,0xA7D5,0x0414},
- {0xA7A6,0xA7D6,0x0415},
- {0xA7A7,0xA7D7,0x0401},
- {0xA7A8,0xA7D8,0x0416},
- {0xA7A9,0xA7D9,0x0417},
- {0xA7AA,0xA7DA,0x0418},
- {0xA7AB,0xA7DB,0x0419},
- {0xA7AC,0xA7DC,0x041A},
- {0xA7AD,0xA7DD,0x041B},
- {0xA7AE,0xA7DE,0x041C},
- {0xA7AF,0xA7DF,0x041D},
- {0xA7B0,0xA7E0,0x041E}, /* A7B0 */
- {0xA7B1,0xA7E1,0x041F},
- {0xA7B2,0xA7E2,0x0420},
- {0xA7B3,0xA7E3,0x0421},
- {0xA7B4,0xA7E4,0x0422},
- {0xA7B5,0xA7E5,0x0423},
- {0xA7B6,0xA7E6,0x0424},
- {0xA7B7,0xA7E7,0x0425},
- {0xA7B8,0xA7E8,0x0426},
- {0xA7B9,0xA7E9,0x0427},
- {0xA7BA,0xA7EA,0x0428},
- {0xA7BB,0xA7EB,0x0429},
- {0xA7BC,0xA7EC,0x042A},
- {0xA7BD,0xA7ED,0x042B},
- {0xA7BE,0xA7EE,0x042C},
- {0xA7BF,0xA7EF,0x042D},
- {0xA7C0,0xA7F0,0x042E}, /* A7C0 */
- {0xA7C1,0xA7F1,0x042F},
- {0xA7C2,0xA7C2,0x003F},
- {0xA7C3,0xA7C3,0x003F},
- {0xA7C4,0xA7C4,0x003F},
- {0xA7C5,0xA7C5,0x003F},
- {0xA7C6,0xA7C6,0x003F},
- {0xA7C7,0xA7C7,0x003F},
- {0xA7C8,0xA7C8,0x003F},
- {0xA7C9,0xA7C9,0x003F},
- {0xA7CA,0xA7CA,0x003F},
- {0xA7CB,0xA7CB,0x003F},
- {0xA7CC,0xA7CC,0x003F},
- {0xA7CD,0xA7CD,0x003F},
- {0xA7CE,0xA7CE,0x003F},
- {0xA7CF,0xA7CF,0x003F},
- {0xA7D0,0xA7D0,0x003F}, /* A7D0 */
- {0xA7A1,0xA7D1,0x0430},
- {0xA7A2,0xA7D2,0x0431},
- {0xA7A3,0xA7D3,0x0432},
- {0xA7A4,0xA7D4,0x0433},
- {0xA7A5,0xA7D5,0x0434},
- {0xA7A6,0xA7D6,0x0435},
- {0xA7A7,0xA7D7,0x0451},
- {0xA7A8,0xA7D8,0x0436},
- {0xA7A9,0xA7D9,0x0437},
- {0xA7AA,0xA7DA,0x0438},
- {0xA7AB,0xA7DB,0x0439},
- {0xA7AC,0xA7DC,0x043A},
- {0xA7AD,0xA7DD,0x043B},
- {0xA7AE,0xA7DE,0x043C},
- {0xA7AF,0xA7DF,0x043D},
- {0xA7B0,0xA7E0,0x043E}, /* A7E0 */
- {0xA7B1,0xA7E1,0x043F},
- {0xA7B2,0xA7E2,0x0440},
- {0xA7B3,0xA7E3,0x0441},
- {0xA7B4,0xA7E4,0x0442},
- {0xA7B5,0xA7E5,0x0443},
- {0xA7B6,0xA7E6,0x0444},
- {0xA7B7,0xA7E7,0x0445},
- {0xA7B8,0xA7E8,0x0446},
- {0xA7B9,0xA7E9,0x0447},
- {0xA7BA,0xA7EA,0x0448},
- {0xA7BB,0xA7EB,0x0449},
- {0xA7BC,0xA7EC,0x044A},
- {0xA7BD,0xA7ED,0x044B},
- {0xA7BE,0xA7EE,0x044C},
- {0xA7BF,0xA7EF,0x044D},
- {0xA7C0,0xA7F0,0x044E}, /* A7F0 */
- {0xA7C1,0xA7F1,0x044F},
- {0xA7F2,0xA7F2,0x003F},
- {0xA7F3,0xA7F3,0x003F},
- {0xA7F4,0xA7F4,0x003F},
- {0xA7F5,0xA7F5,0x003F},
- {0xA7F6,0xA7F6,0x003F},
- {0xA7F7,0xA7F7,0x003F},
- {0xA7F8,0xA7F8,0x003F},
- {0xA7F9,0xA7F9,0x003F},
- {0xA7FA,0xA7FA,0x003F},
- {0xA7FB,0xA7FB,0x003F},
- {0xA7FC,0xA7FC,0x003F},
- {0xA7FD,0xA7FD,0x003F},
- {0xA7FE,0xA7FE,0x003F},
- {0xA7FF,0xA7FF,0x003F},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx00 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx10 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx20 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx30 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx40 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx50 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx60 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx70 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx80 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx90 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0xA7A0,0xA7A0}, /* A7A0 */
+ {0xA7A1,0xA7D1},
+ {0xA7A2,0xA7D2},
+ {0xA7A3,0xA7D3},
+ {0xA7A4,0xA7D4},
+ {0xA7A5,0xA7D5},
+ {0xA7A6,0xA7D6},
+ {0xA7A7,0xA7D7},
+ {0xA7A8,0xA7D8},
+ {0xA7A9,0xA7D9},
+ {0xA7AA,0xA7DA},
+ {0xA7AB,0xA7DB},
+ {0xA7AC,0xA7DC},
+ {0xA7AD,0xA7DD},
+ {0xA7AE,0xA7DE},
+ {0xA7AF,0xA7DF},
+ {0xA7B0,0xA7E0}, /* A7B0 */
+ {0xA7B1,0xA7E1},
+ {0xA7B2,0xA7E2},
+ {0xA7B3,0xA7E3},
+ {0xA7B4,0xA7E4},
+ {0xA7B5,0xA7E5},
+ {0xA7B6,0xA7E6},
+ {0xA7B7,0xA7E7},
+ {0xA7B8,0xA7E8},
+ {0xA7B9,0xA7E9},
+ {0xA7BA,0xA7EA},
+ {0xA7BB,0xA7EB},
+ {0xA7BC,0xA7EC},
+ {0xA7BD,0xA7ED},
+ {0xA7BE,0xA7EE},
+ {0xA7BF,0xA7EF},
+ {0xA7C0,0xA7F0}, /* A7C0 */
+ {0xA7C1,0xA7F1},
+ {0xA7C2,0xA7C2},
+ {0xA7C3,0xA7C3},
+ {0xA7C4,0xA7C4},
+ {0xA7C5,0xA7C5},
+ {0xA7C6,0xA7C6},
+ {0xA7C7,0xA7C7},
+ {0xA7C8,0xA7C8},
+ {0xA7C9,0xA7C9},
+ {0xA7CA,0xA7CA},
+ {0xA7CB,0xA7CB},
+ {0xA7CC,0xA7CC},
+ {0xA7CD,0xA7CD},
+ {0xA7CE,0xA7CE},
+ {0xA7CF,0xA7CF},
+ {0xA7D0,0xA7D0}, /* A7D0 */
+ {0xA7A1,0xA7D1},
+ {0xA7A2,0xA7D2},
+ {0xA7A3,0xA7D3},
+ {0xA7A4,0xA7D4},
+ {0xA7A5,0xA7D5},
+ {0xA7A6,0xA7D6},
+ {0xA7A7,0xA7D7},
+ {0xA7A8,0xA7D8},
+ {0xA7A9,0xA7D9},
+ {0xA7AA,0xA7DA},
+ {0xA7AB,0xA7DB},
+ {0xA7AC,0xA7DC},
+ {0xA7AD,0xA7DD},
+ {0xA7AE,0xA7DE},
+ {0xA7AF,0xA7DF},
+ {0xA7B0,0xA7E0}, /* A7E0 */
+ {0xA7B1,0xA7E1},
+ {0xA7B2,0xA7E2},
+ {0xA7B3,0xA7E3},
+ {0xA7B4,0xA7E4},
+ {0xA7B5,0xA7E5},
+ {0xA7B6,0xA7E6},
+ {0xA7B7,0xA7E7},
+ {0xA7B8,0xA7E8},
+ {0xA7B9,0xA7E9},
+ {0xA7BA,0xA7EA},
+ {0xA7BB,0xA7EB},
+ {0xA7BC,0xA7EC},
+ {0xA7BD,0xA7ED},
+ {0xA7BE,0xA7EE},
+ {0xA7BF,0xA7EF},
+ {0xA7C0,0xA7F0}, /* A7F0 */
+ {0xA7C1,0xA7F1},
+ {0xA7F2,0xA7F2},
+ {0xA7F3,0xA7F3},
+ {0xA7F4,0xA7F4},
+ {0xA7F5,0xA7F5},
+ {0xA7F6,0xA7F6},
+ {0xA7F7,0xA7F7},
+ {0xA7F8,0xA7F8},
+ {0xA7F9,0xA7F9},
+ {0xA7FA,0xA7FA},
+ {0xA7FB,0xA7FB},
+ {0xA7FC,0xA7FC},
+ {0xA7FD,0xA7FD},
+ {0xA7FE,0xA7FE},
+ {0xA7FF,0xA7FF},
};
-static MY_UNICASE_CHARACTER cAD[256]=
+static const MY_CASEFOLD_CHARACTER cAD[256]=
{
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx40 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx50 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx60 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx70 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx80 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx90 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0xADA0,0xADA0,0x003F}, /* ADA0 */
- {0xADA1,0xADA1,0x2460},
- {0xADA2,0xADA2,0x2461},
- {0xADA3,0xADA3,0x2462},
- {0xADA4,0xADA4,0x2463},
- {0xADA5,0xADA5,0x2464},
- {0xADA6,0xADA6,0x2465},
- {0xADA7,0xADA7,0x2466},
- {0xADA8,0xADA8,0x2467},
- {0xADA9,0xADA9,0x2468},
- {0xADAA,0xADAA,0x2469},
- {0xADAB,0xADAB,0x246A},
- {0xADAC,0xADAC,0x246B},
- {0xADAD,0xADAD,0x246C},
- {0xADAE,0xADAE,0x246D},
- {0xADAF,0xADAF,0x246E},
- {0xADB0,0xADB0,0x246F}, /* ADB0 */
- {0xADB1,0xADB1,0x2470},
- {0xADB2,0xADB2,0x2471},
- {0xADB3,0xADB3,0x2472},
- {0xADB4,0xADB4,0x2473},
- {0xADB5,0x8FF3F3,0x2160},
- {0xADB6,0x8FF3F4,0x2161},
- {0xADB7,0x8FF3F5,0x2162},
- {0xADB8,0x8FF3F6,0x2163},
- {0xADB9,0x8FF3F7,0x2164},
- {0xADBA,0x8FF3F8,0x2165},
- {0xADBB,0x8FF3F9,0x2166},
- {0xADBC,0x8FF3FA,0x2167},
- {0xADBD,0x8FF3FB,0x2168},
- {0xADBE,0x8FF3FC,0x2169},
- {0xADBF,0xADBF,0x003F},
- {0xADC0,0xADC0,0x3349}, /* ADC0 */
- {0xADC1,0xADC1,0x3314},
- {0xADC2,0xADC2,0x3322},
- {0xADC3,0xADC3,0x334D},
- {0xADC4,0xADC4,0x3318},
- {0xADC5,0xADC5,0x3327},
- {0xADC6,0xADC6,0x3303},
- {0xADC7,0xADC7,0x3336},
- {0xADC8,0xADC8,0x3351},
- {0xADC9,0xADC9,0x3357},
- {0xADCA,0xADCA,0x330D},
- {0xADCB,0xADCB,0x3326},
- {0xADCC,0xADCC,0x3323},
- {0xADCD,0xADCD,0x332B},
- {0xADCE,0xADCE,0x334A},
- {0xADCF,0xADCF,0x333B},
- {0xADD0,0xADD0,0x339C}, /* ADD0 */
- {0xADD1,0xADD1,0x339D},
- {0xADD2,0xADD2,0x339E},
- {0xADD3,0xADD3,0x338E},
- {0xADD4,0xADD4,0x338F},
- {0xADD5,0xADD5,0x33C4},
- {0xADD6,0xADD6,0x33A1},
- {0xADD7,0xADD7,0x003F},
- {0xADD8,0xADD8,0x003F},
- {0xADD9,0xADD9,0x003F},
- {0xADDA,0xADDA,0x003F},
- {0xADDB,0xADDB,0x003F},
- {0xADDC,0xADDC,0x003F},
- {0xADDD,0xADDD,0x003F},
- {0xADDE,0xADDE,0x003F},
- {0xADDF,0xADDF,0x337B},
- {0xADE0,0xADE0,0x301D}, /* ADE0 */
- {0xADE1,0xADE1,0x301F},
- {0xADE2,0xADE2,0x2116},
- {0xADE3,0xADE3,0x33CD},
- {0xADE4,0xADE4,0x2121},
- {0xADE5,0xADE5,0x32A4},
- {0xADE6,0xADE6,0x32A5},
- {0xADE7,0xADE7,0x32A6},
- {0xADE8,0xADE8,0x32A7},
- {0xADE9,0xADE9,0x32A8},
- {0xADEA,0xADEA,0x3231},
- {0xADEB,0xADEB,0x3232},
- {0xADEC,0xADEC,0x3239},
- {0xADED,0xADED,0x337E},
- {0xADEE,0xADEE,0x337D},
- {0xADEF,0xADEF,0x337C},
- {0xADF0,0xADF0,0x2252}, /* ADF0 */
- {0xADF1,0xADF1,0x2261},
- {0xADF2,0xADF2,0x222B},
- {0xADF3,0xADF3,0x222E},
- {0xADF4,0xADF4,0x2211},
- {0xADF5,0xADF5,0x221A},
- {0xADF6,0xADF6,0x22A5},
- {0xADF7,0xADF7,0x2220},
- {0xADF8,0xADF8,0x221F},
- {0xADF9,0xADF9,0x22BF},
- {0xADFA,0xADFA,0x2235},
- {0xADFB,0xADFB,0x2229},
- {0xADFC,0xADFC,0x222A},
- {0xADFD,0xADFD,0x003F},
- {0xADFE,0xADFE,0x003F},
- {0xADFF,0xADFF,0x003F},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx00 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx10 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx20 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx30 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx40 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx50 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx60 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx70 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx80 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx90 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0xADA0,0xADA0}, /* ADA0 */
+ {0xADA1,0xADA1},
+ {0xADA2,0xADA2},
+ {0xADA3,0xADA3},
+ {0xADA4,0xADA4},
+ {0xADA5,0xADA5},
+ {0xADA6,0xADA6},
+ {0xADA7,0xADA7},
+ {0xADA8,0xADA8},
+ {0xADA9,0xADA9},
+ {0xADAA,0xADAA},
+ {0xADAB,0xADAB},
+ {0xADAC,0xADAC},
+ {0xADAD,0xADAD},
+ {0xADAE,0xADAE},
+ {0xADAF,0xADAF},
+ {0xADB0,0xADB0}, /* ADB0 */
+ {0xADB1,0xADB1},
+ {0xADB2,0xADB2},
+ {0xADB3,0xADB3},
+ {0xADB4,0xADB4},
+ {0xADB5,0x8FF3F3},
+ {0xADB6,0x8FF3F4},
+ {0xADB7,0x8FF3F5},
+ {0xADB8,0x8FF3F6},
+ {0xADB9,0x8FF3F7},
+ {0xADBA,0x8FF3F8},
+ {0xADBB,0x8FF3F9},
+ {0xADBC,0x8FF3FA},
+ {0xADBD,0x8FF3FB},
+ {0xADBE,0x8FF3FC},
+ {0xADBF,0xADBF},
+ {0xADC0,0xADC0}, /* ADC0 */
+ {0xADC1,0xADC1},
+ {0xADC2,0xADC2},
+ {0xADC3,0xADC3},
+ {0xADC4,0xADC4},
+ {0xADC5,0xADC5},
+ {0xADC6,0xADC6},
+ {0xADC7,0xADC7},
+ {0xADC8,0xADC8},
+ {0xADC9,0xADC9},
+ {0xADCA,0xADCA},
+ {0xADCB,0xADCB},
+ {0xADCC,0xADCC},
+ {0xADCD,0xADCD},
+ {0xADCE,0xADCE},
+ {0xADCF,0xADCF},
+ {0xADD0,0xADD0}, /* ADD0 */
+ {0xADD1,0xADD1},
+ {0xADD2,0xADD2},
+ {0xADD3,0xADD3},
+ {0xADD4,0xADD4},
+ {0xADD5,0xADD5},
+ {0xADD6,0xADD6},
+ {0xADD7,0xADD7},
+ {0xADD8,0xADD8},
+ {0xADD9,0xADD9},
+ {0xADDA,0xADDA},
+ {0xADDB,0xADDB},
+ {0xADDC,0xADDC},
+ {0xADDD,0xADDD},
+ {0xADDE,0xADDE},
+ {0xADDF,0xADDF},
+ {0xADE0,0xADE0}, /* ADE0 */
+ {0xADE1,0xADE1},
+ {0xADE2,0xADE2},
+ {0xADE3,0xADE3},
+ {0xADE4,0xADE4},
+ {0xADE5,0xADE5},
+ {0xADE6,0xADE6},
+ {0xADE7,0xADE7},
+ {0xADE8,0xADE8},
+ {0xADE9,0xADE9},
+ {0xADEA,0xADEA},
+ {0xADEB,0xADEB},
+ {0xADEC,0xADEC},
+ {0xADED,0xADED},
+ {0xADEE,0xADEE},
+ {0xADEF,0xADEF},
+ {0xADF0,0xADF0}, /* ADF0 */
+ {0xADF1,0xADF1},
+ {0xADF2,0xADF2},
+ {0xADF3,0xADF3},
+ {0xADF4,0xADF4},
+ {0xADF5,0xADF5},
+ {0xADF6,0xADF6},
+ {0xADF7,0xADF7},
+ {0xADF8,0xADF8},
+ {0xADF9,0xADF9},
+ {0xADFA,0xADFA},
+ {0xADFB,0xADFB},
+ {0xADFC,0xADFC},
+ {0xADFD,0xADFD},
+ {0xADFE,0xADFE},
+ {0xADFF,0xADFF},
};
/* Case info pages for JIS-X-0212 range */
-static MY_UNICASE_CHARACTER c8FA6[256]=
+static const MY_CASEFOLD_CHARACTER c8FA6[256]=
{
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx40 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx50 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx60 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx70 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx80 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx90 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0x8FA6A0,0x8FA6A0,0x003F}, /* 8FA6A0 */
- {0x8FA6A1,0x8FA6A1,0x003F},
- {0x8FA6A2,0x8FA6A2,0x003F},
- {0x8FA6A3,0x8FA6A3,0x003F},
- {0x8FA6A4,0x8FA6A4,0x003F},
- {0x8FA6A5,0x8FA6A5,0x003F},
- {0x8FA6A6,0x8FA6A6,0x003F},
- {0x8FA6A7,0x8FA6A7,0x003F},
- {0x8FA6A8,0x8FA6A8,0x003F},
- {0x8FA6A9,0x8FA6A9,0x003F},
- {0x8FA6AA,0x8FA6AA,0x003F},
- {0x8FA6AB,0x8FA6AB,0x003F},
- {0x8FA6AC,0x8FA6AC,0x003F},
- {0x8FA6AD,0x8FA6AD,0x003F},
- {0x8FA6AE,0x8FA6AE,0x003F},
- {0x8FA6AF,0x8FA6AF,0x003F},
- {0x8FA6B0,0x8FA6B0,0x003F}, /* 8FA6B0 */
- {0x8FA6B1,0x8FA6B1,0x003F},
- {0x8FA6B2,0x8FA6B2,0x003F},
- {0x8FA6B3,0x8FA6B3,0x003F},
- {0x8FA6B4,0x8FA6B4,0x003F},
- {0x8FA6B5,0x8FA6B5,0x003F},
- {0x8FA6B6,0x8FA6B6,0x003F},
- {0x8FA6B7,0x8FA6B7,0x003F},
- {0x8FA6B8,0x8FA6B8,0x003F},
- {0x8FA6B9,0x8FA6B9,0x003F},
- {0x8FA6BA,0x8FA6BA,0x003F},
- {0x8FA6BB,0x8FA6BB,0x003F},
- {0x8FA6BC,0x8FA6BC,0x003F},
- {0x8FA6BD,0x8FA6BD,0x003F},
- {0x8FA6BE,0x8FA6BE,0x003F},
- {0x8FA6BF,0x8FA6BF,0x003F},
- {0x8FA6C0,0x8FA6C0,0x003F}, /* 8FA6C0 */
- {0x8FA6C1,0x8FA6C1,0x003F},
- {0x8FA6C2,0x8FA6C2,0x003F},
- {0x8FA6C3,0x8FA6C3,0x003F},
- {0x8FA6C4,0x8FA6C4,0x003F},
- {0x8FA6C5,0x8FA6C5,0x003F},
- {0x8FA6C6,0x8FA6C6,0x003F},
- {0x8FA6C7,0x8FA6C7,0x003F},
- {0x8FA6C8,0x8FA6C8,0x003F},
- {0x8FA6C9,0x8FA6C9,0x003F},
- {0x8FA6CA,0x8FA6CA,0x003F},
- {0x8FA6CB,0x8FA6CB,0x003F},
- {0x8FA6CC,0x8FA6CC,0x003F},
- {0x8FA6CD,0x8FA6CD,0x003F},
- {0x8FA6CE,0x8FA6CE,0x003F},
- {0x8FA6CF,0x8FA6CF,0x003F},
- {0x8FA6D0,0x8FA6D0,0x003F}, /* 8FA6D0 */
- {0x8FA6D1,0x8FA6D1,0x003F},
- {0x8FA6D2,0x8FA6D2,0x003F},
- {0x8FA6D3,0x8FA6D3,0x003F},
- {0x8FA6D4,0x8FA6D4,0x003F},
- {0x8FA6D5,0x8FA6D5,0x003F},
- {0x8FA6D6,0x8FA6D6,0x003F},
- {0x8FA6D7,0x8FA6D7,0x003F},
- {0x8FA6D8,0x8FA6D8,0x003F},
- {0x8FA6D9,0x8FA6D9,0x003F},
- {0x8FA6DA,0x8FA6DA,0x003F},
- {0x8FA6DB,0x8FA6DB,0x003F},
- {0x8FA6DC,0x8FA6DC,0x003F},
- {0x8FA6DD,0x8FA6DD,0x003F},
- {0x8FA6DE,0x8FA6DE,0x003F},
- {0x8FA6DF,0x8FA6DF,0x003F},
- {0x8FA6E0,0x8FA6E0,0x003F}, /* 8FA6E0 */
- {0x8FA6E1,0x8FA6F1,0x0386},
- {0x8FA6E2,0x8FA6F2,0x0388},
- {0x8FA6E3,0x8FA6F3,0x0389},
- {0x8FA6E4,0x8FA6F4,0x038A},
- {0x8FA6E5,0x8FA6F5,0x03AA},
- {0x8FA6E6,0x8FA6E6,0x003F},
- {0x8FA6E7,0x8FA6F7,0x038C},
- {0x8FA6E8,0x8FA6E8,0x003F},
- {0x8FA6E9,0x8FA6F9,0x038E},
- {0x8FA6EA,0x8FA6FA,0x03AB},
- {0x8FA6EB,0x8FA6EB,0x003F},
- {0x8FA6EC,0x8FA6FC,0x038F},
- {0x8FA6ED,0x8FA6ED,0x003F},
- {0x8FA6EE,0x8FA6EE,0x003F},
- {0x8FA6EF,0x8FA6EF,0x003F},
- {0x8FA6F0,0x8FA6F0,0x003F}, /* 8FA6F0 */
- {0x8FA6E1,0x8FA6F1,0x03AC},
- {0x8FA6E2,0x8FA6F2,0x03AD},
- {0x8FA6E3,0x8FA6F3,0x03AE},
- {0x8FA6E4,0x8FA6F4,0x03AF},
- {0x8FA6E5,0x8FA6F5,0x03CA},
- {0x8FA6F6,0x8FA6F6,0x0390},
- {0x8FA6E7,0x8FA6F7,0x03CC},
- {0xA6B2,0x8FA6F8,0x03C2},
- {0x8FA6E9,0x8FA6F9,0x03CD},
- {0x8FA6EA,0x8FA6FA,0x03CB},
- {0x8FA6FB,0x8FA6FB,0x03B0},
- {0x8FA6EC,0x8FA6FC,0x03CE},
- {0x8FA6FD,0x8FA6FD,0x003F},
- {0x8FA6FE,0x8FA6FE,0x003F},
- {0x8FA6FF,0x8FA6FF,0x003F},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx00 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx10 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx20 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx30 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx40 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx50 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx60 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx70 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx80 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx90 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0x8FA6A0,0x8FA6A0}, /* 8FA6A0 */
+ {0x8FA6A1,0x8FA6A1},
+ {0x8FA6A2,0x8FA6A2},
+ {0x8FA6A3,0x8FA6A3},
+ {0x8FA6A4,0x8FA6A4},
+ {0x8FA6A5,0x8FA6A5},
+ {0x8FA6A6,0x8FA6A6},
+ {0x8FA6A7,0x8FA6A7},
+ {0x8FA6A8,0x8FA6A8},
+ {0x8FA6A9,0x8FA6A9},
+ {0x8FA6AA,0x8FA6AA},
+ {0x8FA6AB,0x8FA6AB},
+ {0x8FA6AC,0x8FA6AC},
+ {0x8FA6AD,0x8FA6AD},
+ {0x8FA6AE,0x8FA6AE},
+ {0x8FA6AF,0x8FA6AF},
+ {0x8FA6B0,0x8FA6B0}, /* 8FA6B0 */
+ {0x8FA6B1,0x8FA6B1},
+ {0x8FA6B2,0x8FA6B2},
+ {0x8FA6B3,0x8FA6B3},
+ {0x8FA6B4,0x8FA6B4},
+ {0x8FA6B5,0x8FA6B5},
+ {0x8FA6B6,0x8FA6B6},
+ {0x8FA6B7,0x8FA6B7},
+ {0x8FA6B8,0x8FA6B8},
+ {0x8FA6B9,0x8FA6B9},
+ {0x8FA6BA,0x8FA6BA},
+ {0x8FA6BB,0x8FA6BB},
+ {0x8FA6BC,0x8FA6BC},
+ {0x8FA6BD,0x8FA6BD},
+ {0x8FA6BE,0x8FA6BE},
+ {0x8FA6BF,0x8FA6BF},
+ {0x8FA6C0,0x8FA6C0}, /* 8FA6C0 */
+ {0x8FA6C1,0x8FA6C1},
+ {0x8FA6C2,0x8FA6C2},
+ {0x8FA6C3,0x8FA6C3},
+ {0x8FA6C4,0x8FA6C4},
+ {0x8FA6C5,0x8FA6C5},
+ {0x8FA6C6,0x8FA6C6},
+ {0x8FA6C7,0x8FA6C7},
+ {0x8FA6C8,0x8FA6C8},
+ {0x8FA6C9,0x8FA6C9},
+ {0x8FA6CA,0x8FA6CA},
+ {0x8FA6CB,0x8FA6CB},
+ {0x8FA6CC,0x8FA6CC},
+ {0x8FA6CD,0x8FA6CD},
+ {0x8FA6CE,0x8FA6CE},
+ {0x8FA6CF,0x8FA6CF},
+ {0x8FA6D0,0x8FA6D0}, /* 8FA6D0 */
+ {0x8FA6D1,0x8FA6D1},
+ {0x8FA6D2,0x8FA6D2},
+ {0x8FA6D3,0x8FA6D3},
+ {0x8FA6D4,0x8FA6D4},
+ {0x8FA6D5,0x8FA6D5},
+ {0x8FA6D6,0x8FA6D6},
+ {0x8FA6D7,0x8FA6D7},
+ {0x8FA6D8,0x8FA6D8},
+ {0x8FA6D9,0x8FA6D9},
+ {0x8FA6DA,0x8FA6DA},
+ {0x8FA6DB,0x8FA6DB},
+ {0x8FA6DC,0x8FA6DC},
+ {0x8FA6DD,0x8FA6DD},
+ {0x8FA6DE,0x8FA6DE},
+ {0x8FA6DF,0x8FA6DF},
+ {0x8FA6E0,0x8FA6E0}, /* 8FA6E0 */
+ {0x8FA6E1,0x8FA6F1},
+ {0x8FA6E2,0x8FA6F2},
+ {0x8FA6E3,0x8FA6F3},
+ {0x8FA6E4,0x8FA6F4},
+ {0x8FA6E5,0x8FA6F5},
+ {0x8FA6E6,0x8FA6E6},
+ {0x8FA6E7,0x8FA6F7},
+ {0x8FA6E8,0x8FA6E8},
+ {0x8FA6E9,0x8FA6F9},
+ {0x8FA6EA,0x8FA6FA},
+ {0x8FA6EB,0x8FA6EB},
+ {0x8FA6EC,0x8FA6FC},
+ {0x8FA6ED,0x8FA6ED},
+ {0x8FA6EE,0x8FA6EE},
+ {0x8FA6EF,0x8FA6EF},
+ {0x8FA6F0,0x8FA6F0}, /* 8FA6F0 */
+ {0x8FA6E1,0x8FA6F1},
+ {0x8FA6E2,0x8FA6F2},
+ {0x8FA6E3,0x8FA6F3},
+ {0x8FA6E4,0x8FA6F4},
+ {0x8FA6E5,0x8FA6F5},
+ {0x8FA6F6,0x8FA6F6},
+ {0x8FA6E7,0x8FA6F7},
+ {0xA6B2,0x8FA6F8},
+ {0x8FA6E9,0x8FA6F9},
+ {0x8FA6EA,0x8FA6FA},
+ {0x8FA6FB,0x8FA6FB},
+ {0x8FA6EC,0x8FA6FC},
+ {0x8FA6FD,0x8FA6FD},
+ {0x8FA6FE,0x8FA6FE},
+ {0x8FA6FF,0x8FA6FF},
};
-static MY_UNICASE_CHARACTER c8FA7[256]=
+static const MY_CASEFOLD_CHARACTER c8FA7[256]=
{
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx40 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx50 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx60 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx70 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx80 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx90 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0x8FA7A0,0x8FA7A0,0x003F}, /* 8FA7A0 */
- {0x8FA7A1,0x8FA7A1,0x003F},
- {0x8FA7A2,0x8FA7A2,0x003F},
- {0x8FA7A3,0x8FA7A3,0x003F},
- {0x8FA7A4,0x8FA7A4,0x003F},
- {0x8FA7A5,0x8FA7A5,0x003F},
- {0x8FA7A6,0x8FA7A6,0x003F},
- {0x8FA7A7,0x8FA7A7,0x003F},
- {0x8FA7A8,0x8FA7A8,0x003F},
- {0x8FA7A9,0x8FA7A9,0x003F},
- {0x8FA7AA,0x8FA7AA,0x003F},
- {0x8FA7AB,0x8FA7AB,0x003F},
- {0x8FA7AC,0x8FA7AC,0x003F},
- {0x8FA7AD,0x8FA7AD,0x003F},
- {0x8FA7AE,0x8FA7AE,0x003F},
- {0x8FA7AF,0x8FA7AF,0x003F},
- {0x8FA7B0,0x8FA7B0,0x003F}, /* 8FA7B0 */
- {0x8FA7B1,0x8FA7B1,0x003F},
- {0x8FA7B2,0x8FA7B2,0x003F},
- {0x8FA7B3,0x8FA7B3,0x003F},
- {0x8FA7B4,0x8FA7B4,0x003F},
- {0x8FA7B5,0x8FA7B5,0x003F},
- {0x8FA7B6,0x8FA7B6,0x003F},
- {0x8FA7B7,0x8FA7B7,0x003F},
- {0x8FA7B8,0x8FA7B8,0x003F},
- {0x8FA7B9,0x8FA7B9,0x003F},
- {0x8FA7BA,0x8FA7BA,0x003F},
- {0x8FA7BB,0x8FA7BB,0x003F},
- {0x8FA7BC,0x8FA7BC,0x003F},
- {0x8FA7BD,0x8FA7BD,0x003F},
- {0x8FA7BE,0x8FA7BE,0x003F},
- {0x8FA7BF,0x8FA7BF,0x003F},
- {0x8FA7C0,0x8FA7C0,0x003F}, /* 8FA7C0 */
- {0x8FA7C1,0x8FA7C1,0x003F},
- {0x8FA7C2,0x8FA7F2,0x0402},
- {0x8FA7C3,0x8FA7F3,0x0403},
- {0x8FA7C4,0x8FA7F4,0x0404},
- {0x8FA7C5,0x8FA7F5,0x0405},
- {0x8FA7C6,0x8FA7F6,0x0406},
- {0x8FA7C7,0x8FA7F7,0x0407},
- {0x8FA7C8,0x8FA7F8,0x0408},
- {0x8FA7C9,0x8FA7F9,0x0409},
- {0x8FA7CA,0x8FA7FA,0x040A},
- {0x8FA7CB,0x8FA7FB,0x040B},
- {0x8FA7CC,0x8FA7FC,0x040C},
- {0x8FA7CD,0x8FA7FD,0x040E},
- {0x8FA7CE,0x8FA7FE,0x040F},
- {0x8FA7CF,0x8FA7CF,0x003F},
- {0x8FA7D0,0x8FA7D0,0x003F}, /* 8FA7D0 */
- {0x8FA7D1,0x8FA7D1,0x003F},
- {0x8FA7D2,0x8FA7D2,0x003F},
- {0x8FA7D3,0x8FA7D3,0x003F},
- {0x8FA7D4,0x8FA7D4,0x003F},
- {0x8FA7D5,0x8FA7D5,0x003F},
- {0x8FA7D6,0x8FA7D6,0x003F},
- {0x8FA7D7,0x8FA7D7,0x003F},
- {0x8FA7D8,0x8FA7D8,0x003F},
- {0x8FA7D9,0x8FA7D9,0x003F},
- {0x8FA7DA,0x8FA7DA,0x003F},
- {0x8FA7DB,0x8FA7DB,0x003F},
- {0x8FA7DC,0x8FA7DC,0x003F},
- {0x8FA7DD,0x8FA7DD,0x003F},
- {0x8FA7DE,0x8FA7DE,0x003F},
- {0x8FA7DF,0x8FA7DF,0x003F},
- {0x8FA7E0,0x8FA7E0,0x003F}, /* 8FA7E0 */
- {0x8FA7E1,0x8FA7E1,0x003F},
- {0x8FA7E2,0x8FA7E2,0x003F},
- {0x8FA7E3,0x8FA7E3,0x003F},
- {0x8FA7E4,0x8FA7E4,0x003F},
- {0x8FA7E5,0x8FA7E5,0x003F},
- {0x8FA7E6,0x8FA7E6,0x003F},
- {0x8FA7E7,0x8FA7E7,0x003F},
- {0x8FA7E8,0x8FA7E8,0x003F},
- {0x8FA7E9,0x8FA7E9,0x003F},
- {0x8FA7EA,0x8FA7EA,0x003F},
- {0x8FA7EB,0x8FA7EB,0x003F},
- {0x8FA7EC,0x8FA7EC,0x003F},
- {0x8FA7ED,0x8FA7ED,0x003F},
- {0x8FA7EE,0x8FA7EE,0x003F},
- {0x8FA7EF,0x8FA7EF,0x003F},
- {0x8FA7F0,0x8FA7F0,0x003F}, /* 8FA7F0 */
- {0x8FA7F1,0x8FA7F1,0x003F},
- {0x8FA7C2,0x8FA7F2,0x0452},
- {0x8FA7C3,0x8FA7F3,0x0453},
- {0x8FA7C4,0x8FA7F4,0x0454},
- {0x8FA7C5,0x8FA7F5,0x0455},
- {0x8FA7C6,0x8FA7F6,0x0456},
- {0x8FA7C7,0x8FA7F7,0x0457},
- {0x8FA7C8,0x8FA7F8,0x0458},
- {0x8FA7C9,0x8FA7F9,0x0459},
- {0x8FA7CA,0x8FA7FA,0x045A},
- {0x8FA7CB,0x8FA7FB,0x045B},
- {0x8FA7CC,0x8FA7FC,0x045C},
- {0x8FA7CD,0x8FA7FD,0x045E},
- {0x8FA7CE,0x8FA7FE,0x045F},
- {0x8FA7FF,0x8FA7FF,0x003F},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx00 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx10 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx20 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx30 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx40 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx50 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx60 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx70 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx80 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx90 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0x8FA7A0,0x8FA7A0}, /* 8FA7A0 */
+ {0x8FA7A1,0x8FA7A1},
+ {0x8FA7A2,0x8FA7A2},
+ {0x8FA7A3,0x8FA7A3},
+ {0x8FA7A4,0x8FA7A4},
+ {0x8FA7A5,0x8FA7A5},
+ {0x8FA7A6,0x8FA7A6},
+ {0x8FA7A7,0x8FA7A7},
+ {0x8FA7A8,0x8FA7A8},
+ {0x8FA7A9,0x8FA7A9},
+ {0x8FA7AA,0x8FA7AA},
+ {0x8FA7AB,0x8FA7AB},
+ {0x8FA7AC,0x8FA7AC},
+ {0x8FA7AD,0x8FA7AD},
+ {0x8FA7AE,0x8FA7AE},
+ {0x8FA7AF,0x8FA7AF},
+ {0x8FA7B0,0x8FA7B0}, /* 8FA7B0 */
+ {0x8FA7B1,0x8FA7B1},
+ {0x8FA7B2,0x8FA7B2},
+ {0x8FA7B3,0x8FA7B3},
+ {0x8FA7B4,0x8FA7B4},
+ {0x8FA7B5,0x8FA7B5},
+ {0x8FA7B6,0x8FA7B6},
+ {0x8FA7B7,0x8FA7B7},
+ {0x8FA7B8,0x8FA7B8},
+ {0x8FA7B9,0x8FA7B9},
+ {0x8FA7BA,0x8FA7BA},
+ {0x8FA7BB,0x8FA7BB},
+ {0x8FA7BC,0x8FA7BC},
+ {0x8FA7BD,0x8FA7BD},
+ {0x8FA7BE,0x8FA7BE},
+ {0x8FA7BF,0x8FA7BF},
+ {0x8FA7C0,0x8FA7C0}, /* 8FA7C0 */
+ {0x8FA7C1,0x8FA7C1},
+ {0x8FA7C2,0x8FA7F2},
+ {0x8FA7C3,0x8FA7F3},
+ {0x8FA7C4,0x8FA7F4},
+ {0x8FA7C5,0x8FA7F5},
+ {0x8FA7C6,0x8FA7F6},
+ {0x8FA7C7,0x8FA7F7},
+ {0x8FA7C8,0x8FA7F8},
+ {0x8FA7C9,0x8FA7F9},
+ {0x8FA7CA,0x8FA7FA},
+ {0x8FA7CB,0x8FA7FB},
+ {0x8FA7CC,0x8FA7FC},
+ {0x8FA7CD,0x8FA7FD},
+ {0x8FA7CE,0x8FA7FE},
+ {0x8FA7CF,0x8FA7CF},
+ {0x8FA7D0,0x8FA7D0}, /* 8FA7D0 */
+ {0x8FA7D1,0x8FA7D1},
+ {0x8FA7D2,0x8FA7D2},
+ {0x8FA7D3,0x8FA7D3},
+ {0x8FA7D4,0x8FA7D4},
+ {0x8FA7D5,0x8FA7D5},
+ {0x8FA7D6,0x8FA7D6},
+ {0x8FA7D7,0x8FA7D7},
+ {0x8FA7D8,0x8FA7D8},
+ {0x8FA7D9,0x8FA7D9},
+ {0x8FA7DA,0x8FA7DA},
+ {0x8FA7DB,0x8FA7DB},
+ {0x8FA7DC,0x8FA7DC},
+ {0x8FA7DD,0x8FA7DD},
+ {0x8FA7DE,0x8FA7DE},
+ {0x8FA7DF,0x8FA7DF},
+ {0x8FA7E0,0x8FA7E0}, /* 8FA7E0 */
+ {0x8FA7E1,0x8FA7E1},
+ {0x8FA7E2,0x8FA7E2},
+ {0x8FA7E3,0x8FA7E3},
+ {0x8FA7E4,0x8FA7E4},
+ {0x8FA7E5,0x8FA7E5},
+ {0x8FA7E6,0x8FA7E6},
+ {0x8FA7E7,0x8FA7E7},
+ {0x8FA7E8,0x8FA7E8},
+ {0x8FA7E9,0x8FA7E9},
+ {0x8FA7EA,0x8FA7EA},
+ {0x8FA7EB,0x8FA7EB},
+ {0x8FA7EC,0x8FA7EC},
+ {0x8FA7ED,0x8FA7ED},
+ {0x8FA7EE,0x8FA7EE},
+ {0x8FA7EF,0x8FA7EF},
+ {0x8FA7F0,0x8FA7F0}, /* 8FA7F0 */
+ {0x8FA7F1,0x8FA7F1},
+ {0x8FA7C2,0x8FA7F2},
+ {0x8FA7C3,0x8FA7F3},
+ {0x8FA7C4,0x8FA7F4},
+ {0x8FA7C5,0x8FA7F5},
+ {0x8FA7C6,0x8FA7F6},
+ {0x8FA7C7,0x8FA7F7},
+ {0x8FA7C8,0x8FA7F8},
+ {0x8FA7C9,0x8FA7F9},
+ {0x8FA7CA,0x8FA7FA},
+ {0x8FA7CB,0x8FA7FB},
+ {0x8FA7CC,0x8FA7FC},
+ {0x8FA7CD,0x8FA7FD},
+ {0x8FA7CE,0x8FA7FE},
+ {0x8FA7FF,0x8FA7FF},
};
-static MY_UNICASE_CHARACTER c8FA9[256]=
+static const MY_CASEFOLD_CHARACTER c8FA9[256]=
{
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx40 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx50 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx60 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx70 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx80 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx90 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0x8FA9A0,0x8FA9A0,0x003F}, /* 8FA9A0 */
- {0x8FA9A1,0x8FA9C1,0x00C6},
- {0x8FA9A2,0x8FA9C2,0x0110},
- {0x8FA9A3,0x8FA9A3,0x003F},
- {0x8FA9A4,0x8FA9C4,0x0126},
- {0x8FA9A5,0x8FA9A5,0x003F},
- {0x8FA9A6,0x8FA9C6,0x0132},
- {0x8FA9A7,0x8FA9A7,0x003F},
- {0x8FA9A8,0x8FA9C8,0x0141},
- {0x8FA9A9,0x8FA9C9,0x013F},
- {0x8FA9AA,0x8FA9AA,0x003F},
- {0x8FA9AB,0x8FA9CB,0x014A},
- {0x8FA9AC,0x8FA9CC,0x00D8},
- {0x8FA9AD,0x8FA9CD,0x0152},
- {0x8FA9AE,0x8FA9AE,0x003F},
- {0x8FA9AF,0x8FA9CF,0x0166},
- {0x8FA9B0,0x8FA9D0,0x00DE}, /* 8FA9B0 */
- {0x8FA9B1,0x8FA9B1,0x003F},
- {0x8FA9B2,0x8FA9B2,0x003F},
- {0x8FA9B3,0x8FA9B3,0x003F},
- {0x8FA9B4,0x8FA9B4,0x003F},
- {0x8FA9B5,0x8FA9B5,0x003F},
- {0x8FA9B6,0x8FA9B6,0x003F},
- {0x8FA9B7,0x8FA9B7,0x003F},
- {0x8FA9B8,0x8FA9B8,0x003F},
- {0x8FA9B9,0x8FA9B9,0x003F},
- {0x8FA9BA,0x8FA9BA,0x003F},
- {0x8FA9BB,0x8FA9BB,0x003F},
- {0x8FA9BC,0x8FA9BC,0x003F},
- {0x8FA9BD,0x8FA9BD,0x003F},
- {0x8FA9BE,0x8FA9BE,0x003F},
- {0x8FA9BF,0x8FA9BF,0x003F},
- {0x8FA9C0,0x8FA9C0,0x003F}, /* 8FA9C0 */
- {0x8FA9A1,0x8FA9C1,0x00E6},
- {0x8FA9A2,0x8FA9C2,0x0111},
- {0x8FA9C3,0x8FA9C3,0x00F0},
- {0x8FA9A4,0x8FA9C4,0x0127},
- {0x49,0x8FA9C5,0x0131},
- {0x8FA9A6,0x8FA9C6,0x0133},
- {0x8FA9C7,0x8FA9C7,0x0138},
- {0x8FA9A8,0x8FA9C8,0x0142},
- {0x8FA9A9,0x8FA9C9,0x0140},
- {0x8FA9CA,0x8FA9CA,0x0149},
- {0x8FA9AB,0x8FA9CB,0x014B},
- {0x8FA9AC,0x8FA9CC,0x00F8},
- {0x8FA9AD,0x8FA9CD,0x0153},
- {0x8FA9CE,0x8FA9CE,0x00DF},
- {0x8FA9AF,0x8FA9CF,0x0167},
- {0x8FA9B0,0x8FA9D0,0x00FE}, /* 8FA9D0 */
- {0x8FA9D1,0x8FA9D1,0x003F},
- {0x8FA9D2,0x8FA9D2,0x003F},
- {0x8FA9D3,0x8FA9D3,0x003F},
- {0x8FA9D4,0x8FA9D4,0x003F},
- {0x8FA9D5,0x8FA9D5,0x003F},
- {0x8FA9D6,0x8FA9D6,0x003F},
- {0x8FA9D7,0x8FA9D7,0x003F},
- {0x8FA9D8,0x8FA9D8,0x003F},
- {0x8FA9D9,0x8FA9D9,0x003F},
- {0x8FA9DA,0x8FA9DA,0x003F},
- {0x8FA9DB,0x8FA9DB,0x003F},
- {0x8FA9DC,0x8FA9DC,0x003F},
- {0x8FA9DD,0x8FA9DD,0x003F},
- {0x8FA9DE,0x8FA9DE,0x003F},
- {0x8FA9DF,0x8FA9DF,0x003F},
- {0x8FA9E0,0x8FA9E0,0x003F}, /* 8FA9E0 */
- {0x8FA9E1,0x8FA9E1,0x003F},
- {0x8FA9E2,0x8FA9E2,0x003F},
- {0x8FA9E3,0x8FA9E3,0x003F},
- {0x8FA9E4,0x8FA9E4,0x003F},
- {0x8FA9E5,0x8FA9E5,0x003F},
- {0x8FA9E6,0x8FA9E6,0x003F},
- {0x8FA9E7,0x8FA9E7,0x003F},
- {0x8FA9E8,0x8FA9E8,0x003F},
- {0x8FA9E9,0x8FA9E9,0x003F},
- {0x8FA9EA,0x8FA9EA,0x003F},
- {0x8FA9EB,0x8FA9EB,0x003F},
- {0x8FA9EC,0x8FA9EC,0x003F},
- {0x8FA9ED,0x8FA9ED,0x003F},
- {0x8FA9EE,0x8FA9EE,0x003F},
- {0x8FA9EF,0x8FA9EF,0x003F},
- {0x8FA9F0,0x8FA9F0,0x003F}, /* 8FA9F0 */
- {0x8FA9F1,0x8FA9F1,0x003F},
- {0x8FA9F2,0x8FA9F2,0x003F},
- {0x8FA9F3,0x8FA9F3,0x003F},
- {0x8FA9F4,0x8FA9F4,0x003F},
- {0x8FA9F5,0x8FA9F5,0x003F},
- {0x8FA9F6,0x8FA9F6,0x003F},
- {0x8FA9F7,0x8FA9F7,0x003F},
- {0x8FA9F8,0x8FA9F8,0x003F},
- {0x8FA9F9,0x8FA9F9,0x003F},
- {0x8FA9FA,0x8FA9FA,0x003F},
- {0x8FA9FB,0x8FA9FB,0x003F},
- {0x8FA9FC,0x8FA9FC,0x003F},
- {0x8FA9FD,0x8FA9FD,0x003F},
- {0x8FA9FE,0x8FA9FE,0x003F},
- {0x8FA9FF,0x8FA9FF,0x003F},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx00 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx10 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx20 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx30 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx40 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx50 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx60 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx70 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx80 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx90 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0x8FA9A0,0x8FA9A0}, /* 8FA9A0 */
+ {0x8FA9A1,0x8FA9C1},
+ {0x8FA9A2,0x8FA9C2},
+ {0x8FA9A3,0x8FA9A3},
+ {0x8FA9A4,0x8FA9C4},
+ {0x8FA9A5,0x8FA9A5},
+ {0x8FA9A6,0x8FA9C6},
+ {0x8FA9A7,0x8FA9A7},
+ {0x8FA9A8,0x8FA9C8},
+ {0x8FA9A9,0x8FA9C9},
+ {0x8FA9AA,0x8FA9AA},
+ {0x8FA9AB,0x8FA9CB},
+ {0x8FA9AC,0x8FA9CC},
+ {0x8FA9AD,0x8FA9CD},
+ {0x8FA9AE,0x8FA9AE},
+ {0x8FA9AF,0x8FA9CF},
+ {0x8FA9B0,0x8FA9D0}, /* 8FA9B0 */
+ {0x8FA9B1,0x8FA9B1},
+ {0x8FA9B2,0x8FA9B2},
+ {0x8FA9B3,0x8FA9B3},
+ {0x8FA9B4,0x8FA9B4},
+ {0x8FA9B5,0x8FA9B5},
+ {0x8FA9B6,0x8FA9B6},
+ {0x8FA9B7,0x8FA9B7},
+ {0x8FA9B8,0x8FA9B8},
+ {0x8FA9B9,0x8FA9B9},
+ {0x8FA9BA,0x8FA9BA},
+ {0x8FA9BB,0x8FA9BB},
+ {0x8FA9BC,0x8FA9BC},
+ {0x8FA9BD,0x8FA9BD},
+ {0x8FA9BE,0x8FA9BE},
+ {0x8FA9BF,0x8FA9BF},
+ {0x8FA9C0,0x8FA9C0}, /* 8FA9C0 */
+ {0x8FA9A1,0x8FA9C1},
+ {0x8FA9A2,0x8FA9C2},
+ {0x8FA9C3,0x8FA9C3},
+ {0x8FA9A4,0x8FA9C4},
+ { 0x49,0x8FA9C5},
+ {0x8FA9A6,0x8FA9C6},
+ {0x8FA9C7,0x8FA9C7},
+ {0x8FA9A8,0x8FA9C8},
+ {0x8FA9A9,0x8FA9C9},
+ {0x8FA9CA,0x8FA9CA},
+ {0x8FA9AB,0x8FA9CB},
+ {0x8FA9AC,0x8FA9CC},
+ {0x8FA9AD,0x8FA9CD},
+ {0x8FA9CE,0x8FA9CE},
+ {0x8FA9AF,0x8FA9CF},
+ {0x8FA9B0,0x8FA9D0}, /* 8FA9D0 */
+ {0x8FA9D1,0x8FA9D1},
+ {0x8FA9D2,0x8FA9D2},
+ {0x8FA9D3,0x8FA9D3},
+ {0x8FA9D4,0x8FA9D4},
+ {0x8FA9D5,0x8FA9D5},
+ {0x8FA9D6,0x8FA9D6},
+ {0x8FA9D7,0x8FA9D7},
+ {0x8FA9D8,0x8FA9D8},
+ {0x8FA9D9,0x8FA9D9},
+ {0x8FA9DA,0x8FA9DA},
+ {0x8FA9DB,0x8FA9DB},
+ {0x8FA9DC,0x8FA9DC},
+ {0x8FA9DD,0x8FA9DD},
+ {0x8FA9DE,0x8FA9DE},
+ {0x8FA9DF,0x8FA9DF},
+ {0x8FA9E0,0x8FA9E0}, /* 8FA9E0 */
+ {0x8FA9E1,0x8FA9E1},
+ {0x8FA9E2,0x8FA9E2},
+ {0x8FA9E3,0x8FA9E3},
+ {0x8FA9E4,0x8FA9E4},
+ {0x8FA9E5,0x8FA9E5},
+ {0x8FA9E6,0x8FA9E6},
+ {0x8FA9E7,0x8FA9E7},
+ {0x8FA9E8,0x8FA9E8},
+ {0x8FA9E9,0x8FA9E9},
+ {0x8FA9EA,0x8FA9EA},
+ {0x8FA9EB,0x8FA9EB},
+ {0x8FA9EC,0x8FA9EC},
+ {0x8FA9ED,0x8FA9ED},
+ {0x8FA9EE,0x8FA9EE},
+ {0x8FA9EF,0x8FA9EF},
+ {0x8FA9F0,0x8FA9F0}, /* 8FA9F0 */
+ {0x8FA9F1,0x8FA9F1},
+ {0x8FA9F2,0x8FA9F2},
+ {0x8FA9F3,0x8FA9F3},
+ {0x8FA9F4,0x8FA9F4},
+ {0x8FA9F5,0x8FA9F5},
+ {0x8FA9F6,0x8FA9F6},
+ {0x8FA9F7,0x8FA9F7},
+ {0x8FA9F8,0x8FA9F8},
+ {0x8FA9F9,0x8FA9F9},
+ {0x8FA9FA,0x8FA9FA},
+ {0x8FA9FB,0x8FA9FB},
+ {0x8FA9FC,0x8FA9FC},
+ {0x8FA9FD,0x8FA9FD},
+ {0x8FA9FE,0x8FA9FE},
+ {0x8FA9FF,0x8FA9FF},
};
-static MY_UNICASE_CHARACTER c8FAA[256]=
+static const MY_CASEFOLD_CHARACTER c8FAA[256]=
{
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx40 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx50 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx60 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx70 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx80 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx90 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0x8FAAA0,0x8FAAA0,0x003F}, /* 8FAAA0 */
- {0x8FAAA1,0x8FABA1,0x00C1},
- {0x8FAAA2,0x8FABA2,0x00C0},
- {0x8FAAA3,0x8FABA3,0x00C4},
- {0x8FAAA4,0x8FABA4,0x00C2},
- {0x8FAAA5,0x8FABA5,0x0102},
- {0x8FAAA6,0x8FABA6,0x01CD},
- {0x8FAAA7,0x8FABA7,0x0100},
- {0x8FAAA8,0x8FABA8,0x0104},
- {0x8FAAA9,0x8FABA9,0x00C5},
- {0x8FAAAA,0x8FABAA,0x00C3},
- {0x8FAAAB,0x8FABAB,0x0106},
- {0x8FAAAC,0x8FABAC,0x0108},
- {0x8FAAAD,0x8FABAD,0x010C},
- {0x8FAAAE,0x8FABAE,0x00C7},
- {0x8FAAAF,0x8FABAF,0x010A},
- {0x8FAAB0,0x8FABB0,0x010E}, /* 8FAAB0 */
- {0x8FAAB1,0x8FABB1,0x00C9},
- {0x8FAAB2,0x8FABB2,0x00C8},
- {0x8FAAB3,0x8FABB3,0x00CB},
- {0x8FAAB4,0x8FABB4,0x00CA},
- {0x8FAAB5,0x8FABB5,0x011A},
- {0x8FAAB6,0x8FABB6,0x0116},
- {0x8FAAB7,0x8FABB7,0x0112},
- {0x8FAAB8,0x8FABB8,0x0118},
- {0x8FAAB9,0x8FAAB9,0x003F},
- {0x8FAABA,0x8FABBA,0x011C},
- {0x8FAABB,0x8FABBB,0x011E},
- {0x8FAABC,0x8FAABC,0x0122},
- {0x8FAABD,0x8FABBD,0x0120},
- {0x8FAABE,0x8FABBE,0x0124},
- {0x8FAABF,0x8FABBF,0x00CD},
- {0x8FAAC0,0x8FABC0,0x00CC}, /* 8FAAC0 */
- {0x8FAAC1,0x8FABC1,0x00CF},
- {0x8FAAC2,0x8FABC2,0x00CE},
- {0x8FAAC3,0x8FABC3,0x01CF},
- {0x8FAAC4,0x69,0x0130},
- {0x8FAAC5,0x8FABC5,0x012A},
- {0x8FAAC6,0x8FABC6,0x012E},
- {0x8FAAC7,0x8FABC7,0x0128},
- {0x8FAAC8,0x8FABC8,0x0134},
- {0x8FAAC9,0x8FABC9,0x0136},
- {0x8FAACA,0x8FABCA,0x0139},
- {0x8FAACB,0x8FABCB,0x013D},
- {0x8FAACC,0x8FABCC,0x013B},
- {0x8FAACD,0x8FABCD,0x0143},
- {0x8FAACE,0x8FABCE,0x0147},
- {0x8FAACF,0x8FABCF,0x0145},
- {0x8FAAD0,0x8FABD0,0x00D1}, /* 8FAAD0 */
- {0x8FAAD1,0x8FABD1,0x00D3},
- {0x8FAAD2,0x8FABD2,0x00D2},
- {0x8FAAD3,0x8FABD3,0x00D6},
- {0x8FAAD4,0x8FABD4,0x00D4},
- {0x8FAAD5,0x8FABD5,0x01D1},
- {0x8FAAD6,0x8FABD6,0x0150},
- {0x8FAAD7,0x8FABD7,0x014C},
- {0x8FAAD8,0x8FABD8,0x00D5},
- {0x8FAAD9,0x8FABD9,0x0154},
- {0x8FAADA,0x8FABDA,0x0158},
- {0x8FAADB,0x8FABDB,0x0156},
- {0x8FAADC,0x8FABDC,0x015A},
- {0x8FAADD,0x8FABDD,0x015C},
- {0x8FAADE,0x8FABDE,0x0160},
- {0x8FAADF,0x8FABDF,0x015E},
- {0x8FAAE0,0x8FABE0,0x0164}, /* 8FAAE0 */
- {0x8FAAE1,0x8FABE1,0x0162},
- {0x8FAAE2,0x8FABE2,0x00DA},
- {0x8FAAE3,0x8FABE3,0x00D9},
- {0x8FAAE4,0x8FABE4,0x00DC},
- {0x8FAAE5,0x8FABE5,0x00DB},
- {0x8FAAE6,0x8FABE6,0x016C},
- {0x8FAAE7,0x8FABE7,0x01D3},
- {0x8FAAE8,0x8FABE8,0x0170},
- {0x8FAAE9,0x8FABE9,0x016A},
- {0x8FAAEA,0x8FABEA,0x0172},
- {0x8FAAEB,0x8FABEB,0x016E},
- {0x8FAAEC,0x8FABEC,0x0168},
- {0x8FAAED,0x8FABED,0x01D7},
- {0x8FAAEE,0x8FABEE,0x01DB},
- {0x8FAAEF,0x8FABEF,0x01D9},
- {0x8FAAF0,0x8FABF0,0x01D5}, /* 8FAAF0 */
- {0x8FAAF1,0x8FABF1,0x0174},
- {0x8FAAF2,0x8FABF2,0x00DD},
- {0x8FAAF3,0x8FABF3,0x0178},
- {0x8FAAF4,0x8FABF4,0x0176},
- {0x8FAAF5,0x8FABF5,0x0179},
- {0x8FAAF6,0x8FABF6,0x017D},
- {0x8FAAF7,0x8FABF7,0x017B},
- {0x8FAAF8,0x8FAAF8,0x003F},
- {0x8FAAF9,0x8FAAF9,0x003F},
- {0x8FAAFA,0x8FAAFA,0x003F},
- {0x8FAAFB,0x8FAAFB,0x003F},
- {0x8FAAFC,0x8FAAFC,0x003F},
- {0x8FAAFD,0x8FAAFD,0x003F},
- {0x8FAAFE,0x8FAAFE,0x003F},
- {0x8FAAFF,0x8FAAFF,0x003F},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx00 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx10 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx20 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx30 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx40 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx50 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx60 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx70 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx80 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx90 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0x8FAAA0,0x8FAAA0}, /* 8FAAA0 */
+ {0x8FAAA1,0x8FABA1},
+ {0x8FAAA2,0x8FABA2},
+ {0x8FAAA3,0x8FABA3},
+ {0x8FAAA4,0x8FABA4},
+ {0x8FAAA5,0x8FABA5},
+ {0x8FAAA6,0x8FABA6},
+ {0x8FAAA7,0x8FABA7},
+ {0x8FAAA8,0x8FABA8},
+ {0x8FAAA9,0x8FABA9},
+ {0x8FAAAA,0x8FABAA},
+ {0x8FAAAB,0x8FABAB},
+ {0x8FAAAC,0x8FABAC},
+ {0x8FAAAD,0x8FABAD},
+ {0x8FAAAE,0x8FABAE},
+ {0x8FAAAF,0x8FABAF},
+ {0x8FAAB0,0x8FABB0}, /* 8FAAB0 */
+ {0x8FAAB1,0x8FABB1},
+ {0x8FAAB2,0x8FABB2},
+ {0x8FAAB3,0x8FABB3},
+ {0x8FAAB4,0x8FABB4},
+ {0x8FAAB5,0x8FABB5},
+ {0x8FAAB6,0x8FABB6},
+ {0x8FAAB7,0x8FABB7},
+ {0x8FAAB8,0x8FABB8},
+ {0x8FAAB9,0x8FAAB9},
+ {0x8FAABA,0x8FABBA},
+ {0x8FAABB,0x8FABBB},
+ {0x8FAABC,0x8FAABC},
+ {0x8FAABD,0x8FABBD},
+ {0x8FAABE,0x8FABBE},
+ {0x8FAABF,0x8FABBF},
+ {0x8FAAC0,0x8FABC0}, /* 8FAAC0 */
+ {0x8FAAC1,0x8FABC1},
+ {0x8FAAC2,0x8FABC2},
+ {0x8FAAC3,0x8FABC3},
+ {0x8FAAC4, 0x69},
+ {0x8FAAC5,0x8FABC5},
+ {0x8FAAC6,0x8FABC6},
+ {0x8FAAC7,0x8FABC7},
+ {0x8FAAC8,0x8FABC8},
+ {0x8FAAC9,0x8FABC9},
+ {0x8FAACA,0x8FABCA},
+ {0x8FAACB,0x8FABCB},
+ {0x8FAACC,0x8FABCC},
+ {0x8FAACD,0x8FABCD},
+ {0x8FAACE,0x8FABCE},
+ {0x8FAACF,0x8FABCF},
+ {0x8FAAD0,0x8FABD0}, /* 8FAAD0 */
+ {0x8FAAD1,0x8FABD1},
+ {0x8FAAD2,0x8FABD2},
+ {0x8FAAD3,0x8FABD3},
+ {0x8FAAD4,0x8FABD4},
+ {0x8FAAD5,0x8FABD5},
+ {0x8FAAD6,0x8FABD6},
+ {0x8FAAD7,0x8FABD7},
+ {0x8FAAD8,0x8FABD8},
+ {0x8FAAD9,0x8FABD9},
+ {0x8FAADA,0x8FABDA},
+ {0x8FAADB,0x8FABDB},
+ {0x8FAADC,0x8FABDC},
+ {0x8FAADD,0x8FABDD},
+ {0x8FAADE,0x8FABDE},
+ {0x8FAADF,0x8FABDF},
+ {0x8FAAE0,0x8FABE0}, /* 8FAAE0 */
+ {0x8FAAE1,0x8FABE1},
+ {0x8FAAE2,0x8FABE2},
+ {0x8FAAE3,0x8FABE3},
+ {0x8FAAE4,0x8FABE4},
+ {0x8FAAE5,0x8FABE5},
+ {0x8FAAE6,0x8FABE6},
+ {0x8FAAE7,0x8FABE7},
+ {0x8FAAE8,0x8FABE8},
+ {0x8FAAE9,0x8FABE9},
+ {0x8FAAEA,0x8FABEA},
+ {0x8FAAEB,0x8FABEB},
+ {0x8FAAEC,0x8FABEC},
+ {0x8FAAED,0x8FABED},
+ {0x8FAAEE,0x8FABEE},
+ {0x8FAAEF,0x8FABEF},
+ {0x8FAAF0,0x8FABF0}, /* 8FAAF0 */
+ {0x8FAAF1,0x8FABF1},
+ {0x8FAAF2,0x8FABF2},
+ {0x8FAAF3,0x8FABF3},
+ {0x8FAAF4,0x8FABF4},
+ {0x8FAAF5,0x8FABF5},
+ {0x8FAAF6,0x8FABF6},
+ {0x8FAAF7,0x8FABF7},
+ {0x8FAAF8,0x8FAAF8},
+ {0x8FAAF9,0x8FAAF9},
+ {0x8FAAFA,0x8FAAFA},
+ {0x8FAAFB,0x8FAAFB},
+ {0x8FAAFC,0x8FAAFC},
+ {0x8FAAFD,0x8FAAFD},
+ {0x8FAAFE,0x8FAAFE},
+ {0x8FAAFF,0x8FAAFF},
};
-static MY_UNICASE_CHARACTER c8FAB[256]=
+static const MY_CASEFOLD_CHARACTER c8FAB[256]=
{
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx40 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx50 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx60 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx70 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx80 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx90 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0x8FABA0,0x8FABA0,0x003F}, /* 8FABA0 */
- {0x8FAAA1,0x8FABA1,0x00E1},
- {0x8FAAA2,0x8FABA2,0x00E0},
- {0x8FAAA3,0x8FABA3,0x00E4},
- {0x8FAAA4,0x8FABA4,0x00E2},
- {0x8FAAA5,0x8FABA5,0x0103},
- {0x8FAAA6,0x8FABA6,0x01CE},
- {0x8FAAA7,0x8FABA7,0x0101},
- {0x8FAAA8,0x8FABA8,0x0105},
- {0x8FAAA9,0x8FABA9,0x00E5},
- {0x8FAAAA,0x8FABAA,0x00E3},
- {0x8FAAAB,0x8FABAB,0x0107},
- {0x8FAAAC,0x8FABAC,0x0109},
- {0x8FAAAD,0x8FABAD,0x010D},
- {0x8FAAAE,0x8FABAE,0x00E7},
- {0x8FAAAF,0x8FABAF,0x010B},
- {0x8FAAB0,0x8FABB0,0x010F}, /* 8FABB0 */
- {0x8FAAB1,0x8FABB1,0x00E9},
- {0x8FAAB2,0x8FABB2,0x00E8},
- {0x8FAAB3,0x8FABB3,0x00EB},
- {0x8FAAB4,0x8FABB4,0x00EA},
- {0x8FAAB5,0x8FABB5,0x011B},
- {0x8FAAB6,0x8FABB6,0x0117},
- {0x8FAAB7,0x8FABB7,0x0113},
- {0x8FAAB8,0x8FABB8,0x0119},
- {0x8FABB9,0x8FABB9,0x01F5},
- {0x8FAABA,0x8FABBA,0x011D},
- {0x8FAABB,0x8FABBB,0x011F},
- {0x8FABBC,0x8FABBC,0x003F},
- {0x8FAABD,0x8FABBD,0x0121},
- {0x8FAABE,0x8FABBE,0x0125},
- {0x8FAABF,0x8FABBF,0x00ED},
- {0x8FAAC0,0x8FABC0,0x00EC}, /* 8FABC0 */
- {0x8FAAC1,0x8FABC1,0x00EF},
- {0x8FAAC2,0x8FABC2,0x00EE},
- {0x8FAAC3,0x8FABC3,0x01D0},
- {0x8FABC4,0x8FABC4,0x003F},
- {0x8FAAC5,0x8FABC5,0x012B},
- {0x8FAAC6,0x8FABC6,0x012F},
- {0x8FAAC7,0x8FABC7,0x0129},
- {0x8FAAC8,0x8FABC8,0x0135},
- {0x8FAAC9,0x8FABC9,0x0137},
- {0x8FAACA,0x8FABCA,0x013A},
- {0x8FAACB,0x8FABCB,0x013E},
- {0x8FAACC,0x8FABCC,0x013C},
- {0x8FAACD,0x8FABCD,0x0144},
- {0x8FAACE,0x8FABCE,0x0148},
- {0x8FAACF,0x8FABCF,0x0146},
- {0x8FAAD0,0x8FABD0,0x00F1}, /* 8FABD0 */
- {0x8FAAD1,0x8FABD1,0x00F3},
- {0x8FAAD2,0x8FABD2,0x00F2},
- {0x8FAAD3,0x8FABD3,0x00F6},
- {0x8FAAD4,0x8FABD4,0x00F4},
- {0x8FAAD5,0x8FABD5,0x01D2},
- {0x8FAAD6,0x8FABD6,0x0151},
- {0x8FAAD7,0x8FABD7,0x014D},
- {0x8FAAD8,0x8FABD8,0x00F5},
- {0x8FAAD9,0x8FABD9,0x0155},
- {0x8FAADA,0x8FABDA,0x0159},
- {0x8FAADB,0x8FABDB,0x0157},
- {0x8FAADC,0x8FABDC,0x015B},
- {0x8FAADD,0x8FABDD,0x015D},
- {0x8FAADE,0x8FABDE,0x0161},
- {0x8FAADF,0x8FABDF,0x015F},
- {0x8FAAE0,0x8FABE0,0x0165}, /* 8FABE0 */
- {0x8FAAE1,0x8FABE1,0x0163},
- {0x8FAAE2,0x8FABE2,0x00FA},
- {0x8FAAE3,0x8FABE3,0x00F9},
- {0x8FAAE4,0x8FABE4,0x00FC},
- {0x8FAAE5,0x8FABE5,0x00FB},
- {0x8FAAE6,0x8FABE6,0x016D},
- {0x8FAAE7,0x8FABE7,0x01D4},
- {0x8FAAE8,0x8FABE8,0x0171},
- {0x8FAAE9,0x8FABE9,0x016B},
- {0x8FAAEA,0x8FABEA,0x0173},
- {0x8FAAEB,0x8FABEB,0x016F},
- {0x8FAAEC,0x8FABEC,0x0169},
- {0x8FAAED,0x8FABED,0x01D8},
- {0x8FAAEE,0x8FABEE,0x01DC},
- {0x8FAAEF,0x8FABEF,0x01DA},
- {0x8FAAF0,0x8FABF0,0x01D6}, /* 8FABF0 */
- {0x8FAAF1,0x8FABF1,0x0175},
- {0x8FAAF2,0x8FABF2,0x00FD},
- {0x8FAAF3,0x8FABF3,0x00FF},
- {0x8FAAF4,0x8FABF4,0x0177},
- {0x8FAAF5,0x8FABF5,0x017A},
- {0x8FAAF6,0x8FABF6,0x017E},
- {0x8FAAF7,0x8FABF7,0x017C},
- {0x8FABF8,0x8FABF8,0x003F},
- {0x8FABF9,0x8FABF9,0x003F},
- {0x8FABFA,0x8FABFA,0x003F},
- {0x8FABFB,0x8FABFB,0x003F},
- {0x8FABFC,0x8FABFC,0x003F},
- {0x8FABFD,0x8FABFD,0x003F},
- {0x8FABFE,0x8FABFE,0x003F},
- {0x8FABFF,0x8FABFF,0x003F},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx00 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx10 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx20 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx30 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx40 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx50 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx60 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx70 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx80 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx90 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0x8FABA0,0x8FABA0}, /* 8FABA0 */
+ {0x8FAAA1,0x8FABA1},
+ {0x8FAAA2,0x8FABA2},
+ {0x8FAAA3,0x8FABA3},
+ {0x8FAAA4,0x8FABA4},
+ {0x8FAAA5,0x8FABA5},
+ {0x8FAAA6,0x8FABA6},
+ {0x8FAAA7,0x8FABA7},
+ {0x8FAAA8,0x8FABA8},
+ {0x8FAAA9,0x8FABA9},
+ {0x8FAAAA,0x8FABAA},
+ {0x8FAAAB,0x8FABAB},
+ {0x8FAAAC,0x8FABAC},
+ {0x8FAAAD,0x8FABAD},
+ {0x8FAAAE,0x8FABAE},
+ {0x8FAAAF,0x8FABAF},
+ {0x8FAAB0,0x8FABB0}, /* 8FABB0 */
+ {0x8FAAB1,0x8FABB1},
+ {0x8FAAB2,0x8FABB2},
+ {0x8FAAB3,0x8FABB3},
+ {0x8FAAB4,0x8FABB4},
+ {0x8FAAB5,0x8FABB5},
+ {0x8FAAB6,0x8FABB6},
+ {0x8FAAB7,0x8FABB7},
+ {0x8FAAB8,0x8FABB8},
+ {0x8FABB9,0x8FABB9},
+ {0x8FAABA,0x8FABBA},
+ {0x8FAABB,0x8FABBB},
+ {0x8FABBC,0x8FABBC},
+ {0x8FAABD,0x8FABBD},
+ {0x8FAABE,0x8FABBE},
+ {0x8FAABF,0x8FABBF},
+ {0x8FAAC0,0x8FABC0}, /* 8FABC0 */
+ {0x8FAAC1,0x8FABC1},
+ {0x8FAAC2,0x8FABC2},
+ {0x8FAAC3,0x8FABC3},
+ {0x8FABC4,0x8FABC4},
+ {0x8FAAC5,0x8FABC5},
+ {0x8FAAC6,0x8FABC6},
+ {0x8FAAC7,0x8FABC7},
+ {0x8FAAC8,0x8FABC8},
+ {0x8FAAC9,0x8FABC9},
+ {0x8FAACA,0x8FABCA},
+ {0x8FAACB,0x8FABCB},
+ {0x8FAACC,0x8FABCC},
+ {0x8FAACD,0x8FABCD},
+ {0x8FAACE,0x8FABCE},
+ {0x8FAACF,0x8FABCF},
+ {0x8FAAD0,0x8FABD0}, /* 8FABD0 */
+ {0x8FAAD1,0x8FABD1},
+ {0x8FAAD2,0x8FABD2},
+ {0x8FAAD3,0x8FABD3},
+ {0x8FAAD4,0x8FABD4},
+ {0x8FAAD5,0x8FABD5},
+ {0x8FAAD6,0x8FABD6},
+ {0x8FAAD7,0x8FABD7},
+ {0x8FAAD8,0x8FABD8},
+ {0x8FAAD9,0x8FABD9},
+ {0x8FAADA,0x8FABDA},
+ {0x8FAADB,0x8FABDB},
+ {0x8FAADC,0x8FABDC},
+ {0x8FAADD,0x8FABDD},
+ {0x8FAADE,0x8FABDE},
+ {0x8FAADF,0x8FABDF},
+ {0x8FAAE0,0x8FABE0}, /* 8FABE0 */
+ {0x8FAAE1,0x8FABE1},
+ {0x8FAAE2,0x8FABE2},
+ {0x8FAAE3,0x8FABE3},
+ {0x8FAAE4,0x8FABE4},
+ {0x8FAAE5,0x8FABE5},
+ {0x8FAAE6,0x8FABE6},
+ {0x8FAAE7,0x8FABE7},
+ {0x8FAAE8,0x8FABE8},
+ {0x8FAAE9,0x8FABE9},
+ {0x8FAAEA,0x8FABEA},
+ {0x8FAAEB,0x8FABEB},
+ {0x8FAAEC,0x8FABEC},
+ {0x8FAAED,0x8FABED},
+ {0x8FAAEE,0x8FABEE},
+ {0x8FAAEF,0x8FABEF},
+ {0x8FAAF0,0x8FABF0}, /* 8FABF0 */
+ {0x8FAAF1,0x8FABF1},
+ {0x8FAAF2,0x8FABF2},
+ {0x8FAAF3,0x8FABF3},
+ {0x8FAAF4,0x8FABF4},
+ {0x8FAAF5,0x8FABF5},
+ {0x8FAAF6,0x8FABF6},
+ {0x8FAAF7,0x8FABF7},
+ {0x8FABF8,0x8FABF8},
+ {0x8FABF9,0x8FABF9},
+ {0x8FABFA,0x8FABFA},
+ {0x8FABFB,0x8FABFB},
+ {0x8FABFC,0x8FABFC},
+ {0x8FABFD,0x8FABFD},
+ {0x8FABFE,0x8FABFE},
+ {0x8FABFF,0x8FABFF},
};
-static MY_UNICASE_CHARACTER c8FF3[256]=
+static const MY_CASEFOLD_CHARACTER c8FF3[256]=
{
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx40 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx50 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx60 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx70 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx80 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx90 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0x8FF3A0,0x8FF3A0,0x003F}, /* 8FF3F0 */
- {0x8FF3A1,0x8FF3A1,0x003F},
- {0x8FF3A2,0x8FF3A2,0x003F},
- {0x8FF3A3,0x8FF3A3,0x003F},
- {0x8FF3A4,0x8FF3A4,0x003F},
- {0x8FF3A5,0x8FF3A5,0x003F},
- {0x8FF3A6,0x8FF3A6,0x003F},
- {0x8FF3A7,0x8FF3A7,0x003F},
- {0x8FF3A8,0x8FF3A8,0x003F},
- {0x8FF3A9,0x8FF3A9,0x003F},
- {0x8FF3AA,0x8FF3AA,0x003F},
- {0x8FF3AB,0x8FF3AB,0x003F},
- {0x8FF3AC,0x8FF3AC,0x003F},
- {0x8FF3AD,0x8FF3AD,0x003F},
- {0x8FF3AE,0x8FF3AE,0x003F},
- {0x8FF3AF,0x8FF3AF,0x003F},
- {0x8FF3B0,0x8FF3B0,0x003F}, /* 8FF3B0 */
- {0x8FF3B1,0x8FF3B1,0x003F},
- {0x8FF3B2,0x8FF3B2,0x003F},
- {0x8FF3B3,0x8FF3B3,0x003F},
- {0x8FF3B4,0x8FF3B4,0x003F},
- {0x8FF3B5,0x8FF3B5,0x003F},
- {0x8FF3B6,0x8FF3B6,0x003F},
- {0x8FF3B7,0x8FF3B7,0x003F},
- {0x8FF3B8,0x8FF3B8,0x003F},
- {0x8FF3B9,0x8FF3B9,0x003F},
- {0x8FF3BA,0x8FF3BA,0x003F},
- {0x8FF3BB,0x8FF3BB,0x003F},
- {0x8FF3BC,0x8FF3BC,0x003F},
- {0x8FF3BD,0x8FF3BD,0x003F},
- {0x8FF3BE,0x8FF3BE,0x003F},
- {0x8FF3BF,0x8FF3BF,0x003F},
- {0x8FF3C0,0x8FF3C0,0x003F}, /* 8FF3C0 */
- {0x8FF3C1,0x8FF3C1,0x003F},
- {0x8FF3C2,0x8FF3C2,0x003F},
- {0x8FF3C3,0x8FF3C3,0x003F},
- {0x8FF3C4,0x8FF3C4,0x003F},
- {0x8FF3C5,0x8FF3C5,0x003F},
- {0x8FF3C6,0x8FF3C6,0x003F},
- {0x8FF3C7,0x8FF3C7,0x003F},
- {0x8FF3C8,0x8FF3C8,0x003F},
- {0x8FF3C9,0x8FF3C9,0x003F},
- {0x8FF3CA,0x8FF3CA,0x003F},
- {0x8FF3CB,0x8FF3CB,0x003F},
- {0x8FF3CC,0x8FF3CC,0x003F},
- {0x8FF3CD,0x8FF3CD,0x003F},
- {0x8FF3CE,0x8FF3CE,0x003F},
- {0x8FF3CF,0x8FF3CF,0x003F},
- {0x8FF3D0,0x8FF3D0,0x003F}, /* 8FF3D0 */
- {0x8FF3D1,0x8FF3D1,0x003F},
- {0x8FF3D2,0x8FF3D2,0x003F},
- {0x8FF3D3,0x8FF3D3,0x003F},
- {0x8FF3D4,0x8FF3D4,0x003F},
- {0x8FF3D5,0x8FF3D5,0x003F},
- {0x8FF3D6,0x8FF3D6,0x003F},
- {0x8FF3D7,0x8FF3D7,0x003F},
- {0x8FF3D8,0x8FF3D8,0x003F},
- {0x8FF3D9,0x8FF3D9,0x003F},
- {0x8FF3DA,0x8FF3DA,0x003F},
- {0x8FF3DB,0x8FF3DB,0x003F},
- {0x8FF3DC,0x8FF3DC,0x003F},
- {0x8FF3DD,0x8FF3DD,0x003F},
- {0x8FF3DE,0x8FF3DE,0x003F},
- {0x8FF3DF,0x8FF3DF,0x003F},
- {0x8FF3E0,0x8FF3E0,0x003F}, /* 8FF3E0 */
- {0x8FF3E1,0x8FF3E1,0x003F},
- {0x8FF3E2,0x8FF3E2,0x003F},
- {0x8FF3E3,0x8FF3E3,0x003F},
- {0x8FF3E4,0x8FF3E4,0x003F},
- {0x8FF3E5,0x8FF3E5,0x003F},
- {0x8FF3E6,0x8FF3E6,0x003F},
- {0x8FF3E7,0x8FF3E7,0x003F},
- {0x8FF3E8,0x8FF3E8,0x003F},
- {0x8FF3E9,0x8FF3E9,0x003F},
- {0x8FF3EA,0x8FF3EA,0x003F},
- {0x8FF3EB,0x8FF3EB,0x003F},
- {0x8FF3EC,0x8FF3EC,0x003F},
- {0x8FF3ED,0x8FF3ED,0x003F},
- {0x8FF3EE,0x8FF3EE,0x003F},
- {0x8FF3EF,0x8FF3EF,0x003F},
- {0x8FF3F0,0x8FF3F0,0x003F}, /* 8FF3F0 */
- {0x8FF3F1,0x8FF3F1,0x003F},
- {0x8FF3F2,0x8FF3F2,0x003F},
- {0x8FF3FD,0x8FF3F3,0x2170},
- {0x8FF3FE,0x8FF3F4,0x2171},
- {0x8FF4A1,0x8FF3F5,0x2172},
- {0x8FF4A2,0x8FF3F6,0x2173},
- {0x8FF4A3,0x8FF3F7,0x2174},
- {0x8FF4A4,0x8FF3F8,0x2175},
- {0x8FF4A5,0x8FF3F9,0x2176},
- {0x8FF4A6,0x8FF3FA,0x2177},
- {0x8FF4A7,0x8FF3FB,0x2178},
- {0x8FF4A8,0x8FF3FC,0x2179},
- {0x8FF3FD,0x8FF3F3,0x2160},
- {0x8FF3FE,0x8FF3F4,0x2161},
- {0x8FF3FF,0x8FF3FF,0x003F},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx00 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx10 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx20 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx30 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx40 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx50 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx60 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx70 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx80 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx90 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0x8FF3A0,0x8FF3A0}, /* 8FF3F0 */
+ {0x8FF3A1,0x8FF3A1},
+ {0x8FF3A2,0x8FF3A2},
+ {0x8FF3A3,0x8FF3A3},
+ {0x8FF3A4,0x8FF3A4},
+ {0x8FF3A5,0x8FF3A5},
+ {0x8FF3A6,0x8FF3A6},
+ {0x8FF3A7,0x8FF3A7},
+ {0x8FF3A8,0x8FF3A8},
+ {0x8FF3A9,0x8FF3A9},
+ {0x8FF3AA,0x8FF3AA},
+ {0x8FF3AB,0x8FF3AB},
+ {0x8FF3AC,0x8FF3AC},
+ {0x8FF3AD,0x8FF3AD},
+ {0x8FF3AE,0x8FF3AE},
+ {0x8FF3AF,0x8FF3AF},
+ {0x8FF3B0,0x8FF3B0}, /* 8FF3B0 */
+ {0x8FF3B1,0x8FF3B1},
+ {0x8FF3B2,0x8FF3B2},
+ {0x8FF3B3,0x8FF3B3},
+ {0x8FF3B4,0x8FF3B4},
+ {0x8FF3B5,0x8FF3B5},
+ {0x8FF3B6,0x8FF3B6},
+ {0x8FF3B7,0x8FF3B7},
+ {0x8FF3B8,0x8FF3B8},
+ {0x8FF3B9,0x8FF3B9},
+ {0x8FF3BA,0x8FF3BA},
+ {0x8FF3BB,0x8FF3BB},
+ {0x8FF3BC,0x8FF3BC},
+ {0x8FF3BD,0x8FF3BD},
+ {0x8FF3BE,0x8FF3BE},
+ {0x8FF3BF,0x8FF3BF},
+ {0x8FF3C0,0x8FF3C0}, /* 8FF3C0 */
+ {0x8FF3C1,0x8FF3C1},
+ {0x8FF3C2,0x8FF3C2},
+ {0x8FF3C3,0x8FF3C3},
+ {0x8FF3C4,0x8FF3C4},
+ {0x8FF3C5,0x8FF3C5},
+ {0x8FF3C6,0x8FF3C6},
+ {0x8FF3C7,0x8FF3C7},
+ {0x8FF3C8,0x8FF3C8},
+ {0x8FF3C9,0x8FF3C9},
+ {0x8FF3CA,0x8FF3CA},
+ {0x8FF3CB,0x8FF3CB},
+ {0x8FF3CC,0x8FF3CC},
+ {0x8FF3CD,0x8FF3CD},
+ {0x8FF3CE,0x8FF3CE},
+ {0x8FF3CF,0x8FF3CF},
+ {0x8FF3D0,0x8FF3D0}, /* 8FF3D0 */
+ {0x8FF3D1,0x8FF3D1},
+ {0x8FF3D2,0x8FF3D2},
+ {0x8FF3D3,0x8FF3D3},
+ {0x8FF3D4,0x8FF3D4},
+ {0x8FF3D5,0x8FF3D5},
+ {0x8FF3D6,0x8FF3D6},
+ {0x8FF3D7,0x8FF3D7},
+ {0x8FF3D8,0x8FF3D8},
+ {0x8FF3D9,0x8FF3D9},
+ {0x8FF3DA,0x8FF3DA},
+ {0x8FF3DB,0x8FF3DB},
+ {0x8FF3DC,0x8FF3DC},
+ {0x8FF3DD,0x8FF3DD},
+ {0x8FF3DE,0x8FF3DE},
+ {0x8FF3DF,0x8FF3DF},
+ {0x8FF3E0,0x8FF3E0}, /* 8FF3E0 */
+ {0x8FF3E1,0x8FF3E1},
+ {0x8FF3E2,0x8FF3E2},
+ {0x8FF3E3,0x8FF3E3},
+ {0x8FF3E4,0x8FF3E4},
+ {0x8FF3E5,0x8FF3E5},
+ {0x8FF3E6,0x8FF3E6},
+ {0x8FF3E7,0x8FF3E7},
+ {0x8FF3E8,0x8FF3E8},
+ {0x8FF3E9,0x8FF3E9},
+ {0x8FF3EA,0x8FF3EA},
+ {0x8FF3EB,0x8FF3EB},
+ {0x8FF3EC,0x8FF3EC},
+ {0x8FF3ED,0x8FF3ED},
+ {0x8FF3EE,0x8FF3EE},
+ {0x8FF3EF,0x8FF3EF},
+ {0x8FF3F0,0x8FF3F0}, /* 8FF3F0 */
+ {0x8FF3F1,0x8FF3F1},
+ {0x8FF3F2,0x8FF3F2},
+ {0x8FF3FD,0x8FF3F3},
+ {0x8FF3FE,0x8FF3F4},
+ {0x8FF4A1,0x8FF3F5},
+ {0x8FF4A2,0x8FF3F6},
+ {0x8FF4A3,0x8FF3F7},
+ {0x8FF4A4,0x8FF3F8},
+ {0x8FF4A5,0x8FF3F9},
+ {0x8FF4A6,0x8FF3FA},
+ {0x8FF4A7,0x8FF3FB},
+ {0x8FF4A8,0x8FF3FC},
+ {0x8FF3FD,0x8FF3F3},
+ {0x8FF3FE,0x8FF3F4},
+ {0x8FF3FF,0x8FF3FF},
};
-static MY_UNICASE_CHARACTER c8FF4[256]=
+static const MY_CASEFOLD_CHARACTER c8FF4[256]=
{
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx40 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx50 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx60 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx70 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx80 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx90 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0x8FF4A0,0x8FF4A0,0x003F}, /* 8FF4A0 */
- {0x8FF4A1,0x8FF3F5,0x2162},
- {0x8FF4A2,0x8FF3F6,0x2163},
- {0x8FF4A3,0x8FF3F7,0x2164},
- {0x8FF4A4,0x8FF3F8,0x2165},
- {0x8FF4A5,0x8FF3F9,0x2166},
- {0x8FF4A6,0x8FF3FA,0x2167},
- {0x8FF4A7,0x8FF3FB,0x2168},
- {0x8FF4A8,0x8FF3FC,0x2169},
- {0x8FF4A9,0x8FF4A9,0xFF07},
- {0x8FF4AA,0x8FF4AA,0xFF02},
- {0x8FF4AB,0x8FF4AB,0x3231},
- {0x8FF4AC,0x8FF4AC,0x2116},
- {0x8FF4AD,0x8FF4AD,0x2121},
- {0x8FF4AE,0x8FF4AE,0x70BB},
- {0x8FF4AF,0x8FF4AF,0x4EFC},
- {0x8FF4B0,0x8FF4B0,0x50F4}, /* 8FF4B0 */
- {0x8FF4B1,0x8FF4B1,0x51EC},
- {0x8FF4B2,0x8FF4B2,0x5307},
- {0x8FF4B3,0x8FF4B3,0x5324},
- {0x8FF4B4,0x8FF4B4,0xFA0E},
- {0x8FF4B5,0x8FF4B5,0x548A},
- {0x8FF4B6,0x8FF4B6,0x5759},
- {0x8FF4B7,0x8FF4B7,0xFA0F},
- {0x8FF4B8,0x8FF4B8,0xFA10},
- {0x8FF4B9,0x8FF4B9,0x589E},
- {0x8FF4BA,0x8FF4BA,0x5BEC},
- {0x8FF4BB,0x8FF4BB,0x5CF5},
- {0x8FF4BC,0x8FF4BC,0x5D53},
- {0x8FF4BD,0x8FF4BD,0xFA11},
- {0x8FF4BE,0x8FF4BE,0x5FB7},
- {0x8FF4BF,0x8FF4BF,0x6085},
- {0x8FF4C0,0x8FF4C0,0x6120}, /* 8FF4C0 */
- {0x8FF4C1,0x8FF4C1,0x654E},
- {0x8FF4C2,0x8FF4C2,0x663B},
- {0x8FF4C3,0x8FF4C3,0x6665},
- {0x8FF4C4,0x8FF4C4,0xFA12},
- {0x8FF4C5,0x8FF4C5,0xF929},
- {0x8FF4C6,0x8FF4C6,0x6801},
- {0x8FF4C7,0x8FF4C7,0xFA13},
- {0x8FF4C8,0x8FF4C8,0xFA14},
- {0x8FF4C9,0x8FF4C9,0x6A6B},
- {0x8FF4CA,0x8FF4CA,0x6AE2},
- {0x8FF4CB,0x8FF4CB,0x6DF8},
- {0x8FF4CC,0x8FF4CC,0x6DF2},
- {0x8FF4CD,0x8FF4CD,0x7028},
- {0x8FF4CE,0x8FF4CE,0xFA15},
- {0x8FF4CF,0x8FF4CF,0xFA16},
- {0x8FF4D0,0x8FF4D0,0x7501}, /* 8FF4D0 */
- {0x8FF4D1,0x8FF4D1,0x7682},
- {0x8FF4D2,0x8FF4D2,0x769E},
- {0x8FF4D3,0x8FF4D3,0xFA17},
- {0x8FF4D4,0x8FF4D4,0x7930},
- {0x8FF4D5,0x8FF4D5,0xFA18},
- {0x8FF4D6,0x8FF4D6,0xFA19},
- {0x8FF4D7,0x8FF4D7,0xFA1A},
- {0x8FF4D8,0x8FF4D8,0xFA1B},
- {0x8FF4D9,0x8FF4D9,0x7AE7},
- {0x8FF4DA,0x8FF4DA,0xFA1C},
- {0x8FF4DB,0x8FF4DB,0xFA1D},
- {0x8FF4DC,0x8FF4DC,0x7DA0},
- {0x8FF4DD,0x8FF4DD,0x7DD6},
- {0x8FF4DE,0x8FF4DE,0xFA1E},
- {0x8FF4DF,0x8FF4DF,0x8362},
- {0x8FF4E0,0x8FF4E0,0xFA1F}, /* 8FF4E0 */
- {0x8FF4E1,0x8FF4E1,0x85B0},
- {0x8FF4E2,0x8FF4E2,0xFA20},
- {0x8FF4E3,0x8FF4E3,0xFA21},
- {0x8FF4E4,0x8FF4E4,0x8807},
- {0x8FF4E5,0x8FF4E5,0xFA22},
- {0x8FF4E6,0x8FF4E6,0x8B7F},
- {0x8FF4E7,0x8FF4E7,0x8CF4},
- {0x8FF4E8,0x8FF4E8,0x8D76},
- {0x8FF4E9,0x8FF4E9,0xFA23},
- {0x8FF4EA,0x8FF4EA,0xFA24},
- {0x8FF4EB,0x8FF4EB,0xFA25},
- {0x8FF4EC,0x8FF4EC,0x90DE},
- {0x8FF4ED,0x8FF4ED,0xFA26},
- {0x8FF4EE,0x8FF4EE,0x9115},
- {0x8FF4EF,0x8FF4EF,0xFA27},
- {0x8FF4F0,0x8FF4F0,0xFA28}, /* 8FF4F0 */
- {0x8FF4F1,0x8FF4F1,0x9592},
- {0x8FF4F2,0x8FF4F2,0xF9DC},
- {0x8FF4F3,0x8FF4F3,0xFA29},
- {0x8FF4F4,0x8FF4F4,0x973B},
- {0x8FF4F5,0x8FF4F5,0x974D},
- {0x8FF4F6,0x8FF4F6,0x9751},
- {0x8FF4F7,0x8FF4F7,0xFA2A},
- {0x8FF4F8,0x8FF4F8,0xFA2B},
- {0x8FF4F9,0x8FF4F9,0xFA2C},
- {0x8FF4FA,0x8FF4FA,0x999E},
- {0x8FF4FB,0x8FF4FB,0x9AD9},
- {0x8FF4FC,0x8FF4FC,0x9B72},
- {0x8FF4FD,0x8FF4FD,0xFA2D},
- {0x8FF4FE,0x8FF4FE,0x9ED1},
- {0x8FF4FF,0x8FF4FF,0x003F},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx00 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx10 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx20 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx30 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx40 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx50 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx60 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx70 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx80 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx90 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0x8FF4A0,0x8FF4A0}, /* 8FF4A0 */
+ {0x8FF4A1,0x8FF3F5},
+ {0x8FF4A2,0x8FF3F6},
+ {0x8FF4A3,0x8FF3F7},
+ {0x8FF4A4,0x8FF3F8},
+ {0x8FF4A5,0x8FF3F9},
+ {0x8FF4A6,0x8FF3FA},
+ {0x8FF4A7,0x8FF3FB},
+ {0x8FF4A8,0x8FF3FC},
+ {0x8FF4A9,0x8FF4A9},
+ {0x8FF4AA,0x8FF4AA},
+ {0x8FF4AB,0x8FF4AB},
+ {0x8FF4AC,0x8FF4AC},
+ {0x8FF4AD,0x8FF4AD},
+ {0x8FF4AE,0x8FF4AE},
+ {0x8FF4AF,0x8FF4AF},
+ {0x8FF4B0,0x8FF4B0}, /* 8FF4B0 */
+ {0x8FF4B1,0x8FF4B1},
+ {0x8FF4B2,0x8FF4B2},
+ {0x8FF4B3,0x8FF4B3},
+ {0x8FF4B4,0x8FF4B4},
+ {0x8FF4B5,0x8FF4B5},
+ {0x8FF4B6,0x8FF4B6},
+ {0x8FF4B7,0x8FF4B7},
+ {0x8FF4B8,0x8FF4B8},
+ {0x8FF4B9,0x8FF4B9},
+ {0x8FF4BA,0x8FF4BA},
+ {0x8FF4BB,0x8FF4BB},
+ {0x8FF4BC,0x8FF4BC},
+ {0x8FF4BD,0x8FF4BD},
+ {0x8FF4BE,0x8FF4BE},
+ {0x8FF4BF,0x8FF4BF},
+ {0x8FF4C0,0x8FF4C0}, /* 8FF4C0 */
+ {0x8FF4C1,0x8FF4C1},
+ {0x8FF4C2,0x8FF4C2},
+ {0x8FF4C3,0x8FF4C3},
+ {0x8FF4C4,0x8FF4C4},
+ {0x8FF4C5,0x8FF4C5},
+ {0x8FF4C6,0x8FF4C6},
+ {0x8FF4C7,0x8FF4C7},
+ {0x8FF4C8,0x8FF4C8},
+ {0x8FF4C9,0x8FF4C9},
+ {0x8FF4CA,0x8FF4CA},
+ {0x8FF4CB,0x8FF4CB},
+ {0x8FF4CC,0x8FF4CC},
+ {0x8FF4CD,0x8FF4CD},
+ {0x8FF4CE,0x8FF4CE},
+ {0x8FF4CF,0x8FF4CF},
+ {0x8FF4D0,0x8FF4D0}, /* 8FF4D0 */
+ {0x8FF4D1,0x8FF4D1},
+ {0x8FF4D2,0x8FF4D2},
+ {0x8FF4D3,0x8FF4D3},
+ {0x8FF4D4,0x8FF4D4},
+ {0x8FF4D5,0x8FF4D5},
+ {0x8FF4D6,0x8FF4D6},
+ {0x8FF4D7,0x8FF4D7},
+ {0x8FF4D8,0x8FF4D8},
+ {0x8FF4D9,0x8FF4D9},
+ {0x8FF4DA,0x8FF4DA},
+ {0x8FF4DB,0x8FF4DB},
+ {0x8FF4DC,0x8FF4DC},
+ {0x8FF4DD,0x8FF4DD},
+ {0x8FF4DE,0x8FF4DE},
+ {0x8FF4DF,0x8FF4DF},
+ {0x8FF4E0,0x8FF4E0}, /* 8FF4E0 */
+ {0x8FF4E1,0x8FF4E1},
+ {0x8FF4E2,0x8FF4E2},
+ {0x8FF4E3,0x8FF4E3},
+ {0x8FF4E4,0x8FF4E4},
+ {0x8FF4E5,0x8FF4E5},
+ {0x8FF4E6,0x8FF4E6},
+ {0x8FF4E7,0x8FF4E7},
+ {0x8FF4E8,0x8FF4E8},
+ {0x8FF4E9,0x8FF4E9},
+ {0x8FF4EA,0x8FF4EA},
+ {0x8FF4EB,0x8FF4EB},
+ {0x8FF4EC,0x8FF4EC},
+ {0x8FF4ED,0x8FF4ED},
+ {0x8FF4EE,0x8FF4EE},
+ {0x8FF4EF,0x8FF4EF},
+ {0x8FF4F0,0x8FF4F0}, /* 8FF4F0 */
+ {0x8FF4F1,0x8FF4F1},
+ {0x8FF4F2,0x8FF4F2},
+ {0x8FF4F3,0x8FF4F3},
+ {0x8FF4F4,0x8FF4F4},
+ {0x8FF4F5,0x8FF4F5},
+ {0x8FF4F6,0x8FF4F6},
+ {0x8FF4F7,0x8FF4F7},
+ {0x8FF4F8,0x8FF4F8},
+ {0x8FF4F9,0x8FF4F9},
+ {0x8FF4FA,0x8FF4FA},
+ {0x8FF4FB,0x8FF4FB},
+ {0x8FF4FC,0x8FF4FC},
+ {0x8FF4FD,0x8FF4FD},
+ {0x8FF4FE,0x8FF4FE},
+ {0x8FF4FF,0x8FF4FF},
};
-static MY_UNICASE_CHARACTER *my_caseinfo_pages_eucjpms[512]=
+static const MY_CASEFOLD_CHARACTER *my_casefold_pages_eucjpms[512]=
{
/* JIS-X-0208 */
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 0 */
@@ -1776,10 +1776,11 @@ static MY_UNICASE_CHARACTER *my_caseinfo_pages_eucjpms[512]=
};
-static MY_UNICASE_INFO my_caseinfo_eucjpms=
+static MY_CASEFOLD_INFO my_casefold_eucjpms=
{
0x0FFFF,
- my_caseinfo_pages_eucjpms
+ my_casefold_pages_eucjpms,
+ NULL /* ws */
};
@@ -67512,7 +67513,9 @@ static MY_COLLATION_HANDLER my_collation_eucjpms_japanese_ci_handler =
my_hash_sort_simple,
my_propagate_simple,
my_min_str_mb_simple,
- my_max_str_mb_simple
+ my_max_str_mb_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
@@ -67531,7 +67534,9 @@ static MY_COLLATION_HANDLER my_collation_eucjpms_bin_handler =
my_hash_sort_mb_bin,
my_propagate_simple,
my_min_str_mb_simple,
- my_max_str_mb_simple
+ my_max_str_mb_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
@@ -67550,7 +67555,9 @@ static MY_COLLATION_HANDLER my_collation_eucjpms_japanese_nopad_ci_handler =
my_hash_sort_simple_nopad,
my_propagate_simple,
my_min_str_mb_simple_nopad,
- my_max_str_mb_simple
+ my_max_str_mb_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
@@ -67569,7 +67576,9 @@ static MY_COLLATION_HANDLER my_collation_eucjpms_nopad_bin_handler =
my_hash_sort_mb_nopad_bin,
my_propagate_simple,
my_min_str_mb_simple_nopad,
- my_max_str_mb_simple
+ my_max_str_mb_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
@@ -67603,7 +67612,9 @@ static MY_CHARSET_HANDLER my_charset_handler=
my_well_formed_char_length_eucjpms,
my_copy_fix_mb,
my_native_to_mb_eucjpms,
- my_wc_to_printable_generic
+ my_wc_to_printable_generic,
+ my_casefold_multiply_1,
+ my_casefold_multiply_2
};
@@ -67623,19 +67634,17 @@ struct charset_info_st my_charset_eucjpms_japanese_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_caseinfo_eucjpms,/* caseinfo */
+ &my_casefold_eucjpms,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 2, /* casedn_multiply */
1, /* mbminlen */
3, /* mbmaxlen */
0, /* min_sort_char */
0xFEFE, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_handler,
&my_collation_eucjpms_japanese_ci_handler
};
@@ -67656,19 +67665,17 @@ struct charset_info_st my_charset_eucjpms_bin=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_caseinfo_eucjpms,/* caseinfo */
+ &my_casefold_eucjpms,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 2, /* casedn_multiply */
1, /* mbminlen */
3, /* mbmaxlen */
0, /* min_sort_char */
0xFEFE, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_handler,
&my_collation_eucjpms_bin_handler
};
@@ -67689,19 +67696,17 @@ struct charset_info_st my_charset_eucjpms_japanese_nopad_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_caseinfo_eucjpms,/* caseinfo */
+ &my_casefold_eucjpms,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 2, /* casedn_multiply */
1, /* mbminlen */
3, /* mbmaxlen */
0, /* min_sort_char */
0xFEFE, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_handler,
&my_collation_eucjpms_japanese_nopad_ci_handler
};
@@ -67722,19 +67727,17 @@ struct charset_info_st my_charset_eucjpms_nopad_bin=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_caseinfo_eucjpms,/* caseinfo */
+ &my_casefold_eucjpms,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 2, /* casedn_multiply */
1, /* mbminlen */
3, /* mbmaxlen */
0, /* min_sort_char */
0xFEFE, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_handler,
&my_collation_eucjpms_nopad_bin_handler
};
diff --git a/strings/ctype-extra.c b/strings/ctype-extra.c
index e6787b1130b..8a25a9c6a61 100644
--- a/strings/ctype-extra.c
+++ b/strings/ctype-extra.c
@@ -8,7 +8,7 @@
/* Copyright 2000-2008 MySQL AB, 2008 Sun Microsystems, Inc.
Copyright (c) 2000, 2011, Oracle and/or its affiliates.
- Copyright 2008-2016 MariaDB Corporation
+ Copyright 2008-2023 MariaDB Corporation
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -3678,8 +3678,8 @@ struct charset_info_st compiled_charsets[] = {
{
3,0,0,
MY_CS_COMPILED|MY_CS_PRIMARY,
- { STRING_WITH_LEN("dec8") }, /* cset name */
- { STRING_WITH_LEN("dec8_swedish_ci") }, /* coll name */
+ { STRING_WITH_LEN("dec8") }, /* cset name */
+ { STRING_WITH_LEN("dec8_swedish_ci") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_dec8_swedish_ci, /* ctype */
@@ -3689,19 +3689,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_dec8_swedish_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_simple_ci_handler,
}
@@ -3711,8 +3709,8 @@ struct charset_info_st compiled_charsets[] = {
{
4,0,0,
MY_CS_COMPILED|MY_CS_PRIMARY,
- { STRING_WITH_LEN("cp850") }, /* cset name */
- { STRING_WITH_LEN("cp850_general_ci") }, /* coll name */
+ { STRING_WITH_LEN("cp850") }, /* cset name */
+ { STRING_WITH_LEN("cp850_general_ci") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_cp850_general_ci, /* ctype */
@@ -3722,19 +3720,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_cp850_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_simple_ci_handler,
}
@@ -3744,9 +3740,9 @@ struct charset_info_st compiled_charsets[] = {
{
5,0,0,
MY_CS_COMPILED,
- { STRING_WITH_LEN("latin1") }, /* cset name */
- { STRING_WITH_LEN("latin1_german1_ci") }, /* coll name */
- "", /* comment */
+ { STRING_WITH_LEN("latin1") }, /* cset name */
+ { STRING_WITH_LEN("latin1_german1_ci") }, /* coll name */
+ "", /* comment */
NULL, /* tailoring */
ctype_latin1_german1_ci, /* ctype */
to_lower_latin1_german1_ci, /* to_lower */
@@ -3755,19 +3751,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_latin1_german1_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_simple_ci_handler,
}
@@ -3777,8 +3771,8 @@ struct charset_info_st compiled_charsets[] = {
{
6,0,0,
MY_CS_COMPILED|MY_CS_PRIMARY,
- { STRING_WITH_LEN("hp8") }, /* cset name */
- { STRING_WITH_LEN("hp8_english_ci") }, /* coll name */
+ { STRING_WITH_LEN("hp8") }, /* cset name */
+ { STRING_WITH_LEN("hp8_english_ci") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_hp8_english_ci, /* ctype */
@@ -3788,19 +3782,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_hp8_english_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_simple_ci_handler,
}
@@ -3810,8 +3802,8 @@ struct charset_info_st compiled_charsets[] = {
{
7,0,0,
MY_CS_COMPILED|MY_CS_PRIMARY,
- { STRING_WITH_LEN("koi8r") }, /* cset name */
- { STRING_WITH_LEN("koi8r_general_ci") }, /* coll name */
+ { STRING_WITH_LEN("koi8r") }, /* cset name */
+ { STRING_WITH_LEN("koi8r_general_ci") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_koi8r_general_ci, /* ctype */
@@ -3821,19 +3813,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_koi8r_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_simple_ci_handler,
}
@@ -3843,8 +3833,8 @@ struct charset_info_st compiled_charsets[] = {
{
9,0,0,
MY_CS_COMPILED|MY_CS_PRIMARY,
- { STRING_WITH_LEN("latin2") }, /* cset name */
- { STRING_WITH_LEN("latin2_general_ci")}, /* coll name */
+ { STRING_WITH_LEN("latin2") }, /* cset name */
+ { STRING_WITH_LEN("latin2_general_ci") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_latin2_general_ci, /* ctype */
@@ -3854,19 +3844,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_latin2_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_simple_ci_handler,
}
@@ -3876,8 +3864,8 @@ struct charset_info_st compiled_charsets[] = {
{
10,0,0,
MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_NONASCII,
- { STRING_WITH_LEN("swe7") }, /* cset name */
- { STRING_WITH_LEN("swe7_swedish_ci") }, /* coll name */
+ { STRING_WITH_LEN("swe7") }, /* cset name */
+ { STRING_WITH_LEN("swe7_swedish_ci") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_swe7_swedish_ci, /* ctype */
@@ -3887,19 +3875,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_swe7_swedish_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_simple_ci_handler,
}
@@ -3909,8 +3895,8 @@ struct charset_info_st compiled_charsets[] = {
{
11,0,0,
MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_PUREASCII,
- { STRING_WITH_LEN("ascii") }, /* cset name */
- { STRING_WITH_LEN("ascii_general_ci") }, /* coll name */
+ { STRING_WITH_LEN("ascii") }, /* cset name */
+ { STRING_WITH_LEN("ascii_general_ci") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_ascii_general_ci, /* ctype */
@@ -3920,19 +3906,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_ascii_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_simple_ci_handler,
}
@@ -3942,8 +3926,8 @@ struct charset_info_st compiled_charsets[] = {
{
14,0,0,
MY_CS_COMPILED,
- { STRING_WITH_LEN("cp1251") }, /* cset name */
- { STRING_WITH_LEN("cp1251_bulgarian_ci") }, /* coll name */
+ { STRING_WITH_LEN("cp1251") }, /* cset name */
+ { STRING_WITH_LEN("cp1251_bulgarian_ci") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_cp1251_general_ci, /* ctype */
@@ -3953,19 +3937,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_cp1251_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_simple_ci_handler,
}
@@ -3975,8 +3957,8 @@ struct charset_info_st compiled_charsets[] = {
{
15,0,0,
MY_CS_COMPILED,
- { STRING_WITH_LEN("latin1") }, /* cset name */
- { STRING_WITH_LEN("latin1_danish_ci") }, /* coll name */
+ { STRING_WITH_LEN("latin1") }, /* cset name */
+ { STRING_WITH_LEN("latin1_danish_ci") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_latin1_danish_ci, /* ctype */
@@ -3986,19 +3968,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_latin1_danish_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_simple_ci_handler,
}
@@ -4008,8 +3988,8 @@ struct charset_info_st compiled_charsets[] = {
{
16,0,0,
MY_CS_COMPILED|MY_CS_PRIMARY,
- { STRING_WITH_LEN("hebrew") }, /* cset name */
- { STRING_WITH_LEN("hebrew_general_ci") }, /* coll name */
+ { STRING_WITH_LEN("hebrew") }, /* cset name */
+ { STRING_WITH_LEN("hebrew_general_ci") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_hebrew_general_ci, /* ctype */
@@ -4019,19 +3999,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_hebrew_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_simple_ci_handler,
}
@@ -4041,8 +4019,8 @@ struct charset_info_st compiled_charsets[] = {
{
20,0,0,
MY_CS_COMPILED|MY_CS_CSSORT,
- { STRING_WITH_LEN("latin7") }, /* cset name */
- { STRING_WITH_LEN("latin7_estonian_cs") }, /* coll name */
+ { STRING_WITH_LEN("latin7") }, /* cset name */
+ { STRING_WITH_LEN("latin7_estonian_cs") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_latin7_general_ci, /* ctype */
@@ -4052,19 +4030,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_latin7_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_simple_ci_handler,
}
@@ -4074,8 +4050,8 @@ struct charset_info_st compiled_charsets[] = {
{
21,0,0,
MY_CS_COMPILED,
- { STRING_WITH_LEN("latin2") }, /* cset name */
- { STRING_WITH_LEN("latin2_hungarian_ci") }, /* coll name */
+ { STRING_WITH_LEN("latin2") }, /* cset name */
+ { STRING_WITH_LEN("latin2_hungarian_ci") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_latin2_general_ci, /* ctype */
@@ -4085,19 +4061,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_latin2_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_simple_ci_handler,
}
@@ -4107,8 +4081,8 @@ struct charset_info_st compiled_charsets[] = {
{
22,0,0,
MY_CS_COMPILED|MY_CS_PRIMARY,
- { STRING_WITH_LEN("koi8u") }, /* cset name */
- { STRING_WITH_LEN("koi8u_general_ci") }, /* coll name */
+ { STRING_WITH_LEN("koi8u") }, /* cset name */
+ { STRING_WITH_LEN("koi8u_general_ci") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_koi8u_general_ci, /* ctype */
@@ -4118,19 +4092,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_koi8u_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_simple_ci_handler,
}
@@ -4140,8 +4112,8 @@ struct charset_info_st compiled_charsets[] = {
{
23,0,0,
MY_CS_COMPILED,
- { STRING_WITH_LEN("cp1251") }, /* cset name */
- { STRING_WITH_LEN("cp1251_ukrainian_ci") }, /* coll name */
+ { STRING_WITH_LEN("cp1251") }, /* cset name */
+ { STRING_WITH_LEN("cp1251_ukrainian_ci") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_cp1251_general_ci, /* ctype */
@@ -4151,19 +4123,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_cp1251_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_simple_ci_handler,
}
@@ -4173,8 +4143,8 @@ struct charset_info_st compiled_charsets[] = {
{
25,0,0,
MY_CS_COMPILED|MY_CS_PRIMARY,
- { STRING_WITH_LEN("greek") }, /* cset name */
- { STRING_WITH_LEN("greek_general_ci") }, /* coll name */
+ { STRING_WITH_LEN("greek") }, /* cset name */
+ { STRING_WITH_LEN("greek_general_ci") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_greek_general_ci, /* ctype */
@@ -4184,19 +4154,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_greek_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_simple_ci_handler,
}
@@ -4206,8 +4174,8 @@ struct charset_info_st compiled_charsets[] = {
{
26,0,0,
MY_CS_COMPILED|MY_CS_PRIMARY,
- { STRING_WITH_LEN("cp1250") }, /* cset name */
- { STRING_WITH_LEN("cp1250_general_ci") }, /* coll name */
+ { STRING_WITH_LEN("cp1250") }, /* cset name */
+ { STRING_WITH_LEN("cp1250_general_ci") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_cp1250_general_ci, /* ctype */
@@ -4217,19 +4185,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_cp1250_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_simple_ci_handler,
}
@@ -4239,8 +4205,8 @@ struct charset_info_st compiled_charsets[] = {
{
27,0,0,
MY_CS_COMPILED,
- { STRING_WITH_LEN("latin2") }, /* cset name */
- { STRING_WITH_LEN("latin2_croatian_ci") }, /* coll name */
+ { STRING_WITH_LEN("latin2") }, /* cset name */
+ { STRING_WITH_LEN("latin2_croatian_ci") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_latin2_general_ci, /* ctype */
@@ -4250,19 +4216,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_latin2_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_simple_ci_handler,
}
@@ -4272,8 +4236,8 @@ struct charset_info_st compiled_charsets[] = {
{
29,0,0,
MY_CS_COMPILED,
- { STRING_WITH_LEN("cp1257") }, /* cset name */
- { STRING_WITH_LEN("cp1257_lithuanian_ci") }, /* coll name */
+ { STRING_WITH_LEN("cp1257") }, /* cset name */
+ { STRING_WITH_LEN("cp1257_lithuanian_ci") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_cp1257_general_ci, /* ctype */
@@ -4283,19 +4247,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_cp1257_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_simple_ci_handler,
}
@@ -4305,8 +4267,8 @@ struct charset_info_st compiled_charsets[] = {
{
30,0,0,
MY_CS_COMPILED|MY_CS_PRIMARY,
- { STRING_WITH_LEN("latin5") }, /* cset name */
- { STRING_WITH_LEN("latin5_turkish_ci") }, /* coll name */
+ { STRING_WITH_LEN("latin5") }, /* cset name */
+ { STRING_WITH_LEN("latin5_turkish_ci") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_latin5_turkish_ci, /* ctype */
@@ -4316,19 +4278,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_latin5_turkish_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_simple_ci_handler,
}
@@ -4338,8 +4298,8 @@ struct charset_info_st compiled_charsets[] = {
{
32,0,0,
MY_CS_COMPILED|MY_CS_PRIMARY,
- { STRING_WITH_LEN("armscii8") }, /* cset name */
- { STRING_WITH_LEN("armscii8_general_ci") }, /* coll name */
+ { STRING_WITH_LEN("armscii8") }, /* cset name */
+ { STRING_WITH_LEN("armscii8_general_ci") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_armscii8_general_ci, /* ctype */
@@ -4349,19 +4309,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_armscii8_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_simple_ci_handler,
}
@@ -4371,8 +4329,8 @@ struct charset_info_st compiled_charsets[] = {
{
36,0,0,
MY_CS_COMPILED|MY_CS_PRIMARY,
- { STRING_WITH_LEN("cp866") }, /* cset name */
- { STRING_WITH_LEN("cp866_general_ci") }, /* coll name */
+ { STRING_WITH_LEN("cp866") }, /* cset name */
+ { STRING_WITH_LEN("cp866_general_ci") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_cp866_general_ci, /* ctype */
@@ -4382,19 +4340,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_cp866_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_simple_ci_handler,
}
@@ -4404,8 +4360,8 @@ struct charset_info_st compiled_charsets[] = {
{
37,0,0,
MY_CS_COMPILED|MY_CS_PRIMARY,
- { STRING_WITH_LEN("keybcs2") }, /* cset name */
- { STRING_WITH_LEN("keybcs2_general_ci") }, /* coll name */
+ { STRING_WITH_LEN("keybcs2") }, /* cset name */
+ { STRING_WITH_LEN("keybcs2_general_ci") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_keybcs2_general_ci, /* ctype */
@@ -4415,19 +4371,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_keybcs2_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_simple_ci_handler,
}
@@ -4437,8 +4391,8 @@ struct charset_info_st compiled_charsets[] = {
{
38,0,0,
MY_CS_COMPILED|MY_CS_PRIMARY,
- { STRING_WITH_LEN("macce") }, /* cset name */
- { STRING_WITH_LEN("macce_general_ci") }, /* coll name */
+ { STRING_WITH_LEN("macce") }, /* cset name */
+ { STRING_WITH_LEN("macce_general_ci") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_macce_general_ci, /* ctype */
@@ -4448,19 +4402,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_macce_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_simple_ci_handler,
}
@@ -4470,8 +4422,8 @@ struct charset_info_st compiled_charsets[] = {
{
39,0,0,
MY_CS_COMPILED|MY_CS_PRIMARY,
- { STRING_WITH_LEN("macroman") }, /* cset name */
- { STRING_WITH_LEN("macroman_general_ci") }, /* coll name */
+ { STRING_WITH_LEN("macroman") }, /* cset name */
+ { STRING_WITH_LEN("macroman_general_ci") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_macroman_general_ci, /* ctype */
@@ -4481,19 +4433,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_macroman_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_simple_ci_handler,
}
@@ -4503,8 +4453,8 @@ struct charset_info_st compiled_charsets[] = {
{
40,0,0,
MY_CS_COMPILED|MY_CS_PRIMARY,
- { STRING_WITH_LEN("cp852") }, /* cset name */
- { STRING_WITH_LEN("cp852_general_ci") }, /* coll name */
+ { STRING_WITH_LEN("cp852") }, /* cset name */
+ { STRING_WITH_LEN("cp852_general_ci") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_cp852_general_ci, /* ctype */
@@ -4514,19 +4464,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_cp852_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_simple_ci_handler,
}
@@ -4536,8 +4484,8 @@ struct charset_info_st compiled_charsets[] = {
{
41,0,0,
MY_CS_COMPILED|MY_CS_PRIMARY,
- { STRING_WITH_LEN("latin7") }, /* cset name */
- { STRING_WITH_LEN("latin7_general_ci") }, /* coll name */
+ { STRING_WITH_LEN("latin7") }, /* cset name */
+ { STRING_WITH_LEN("latin7_general_ci") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_latin7_general_ci, /* ctype */
@@ -4547,19 +4495,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_latin7_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_simple_ci_handler,
}
@@ -4569,8 +4515,8 @@ struct charset_info_st compiled_charsets[] = {
{
42,0,0,
MY_CS_COMPILED|MY_CS_CSSORT,
- { STRING_WITH_LEN("latin7") }, /* cset name */
- { STRING_WITH_LEN("latin7_general_cs") }, /* coll name */
+ { STRING_WITH_LEN("latin7") }, /* cset name */
+ { STRING_WITH_LEN("latin7_general_cs") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_latin7_general_ci, /* ctype */
@@ -4580,19 +4526,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_latin7_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_simple_ci_handler,
}
@@ -4602,8 +4546,8 @@ struct charset_info_st compiled_charsets[] = {
{
43,0,0,
MY_CS_COMPILED|MY_CS_BINSORT,
- { STRING_WITH_LEN("macce") }, /* cset name */
- { STRING_WITH_LEN("macce_bin") }, /* coll name */
+ { STRING_WITH_LEN("macce") }, /* cset name */
+ { STRING_WITH_LEN("macce_bin") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_macce_general_ci, /* ctype */
@@ -4613,19 +4557,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_macce_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_bin_handler,
}
@@ -4635,8 +4577,8 @@ struct charset_info_st compiled_charsets[] = {
{
44,0,0,
MY_CS_COMPILED,
- { STRING_WITH_LEN("cp1250") }, /* cset name */
- { STRING_WITH_LEN("cp1250_croatian_ci") }, /* coll name */
+ { STRING_WITH_LEN("cp1250") }, /* cset name */
+ { STRING_WITH_LEN("cp1250_croatian_ci") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_cp1250_general_ci, /* ctype */
@@ -4646,19 +4588,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_cp1250_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_simple_ci_handler,
}
@@ -4668,8 +4608,8 @@ struct charset_info_st compiled_charsets[] = {
{
48,0,0,
MY_CS_COMPILED,
- { STRING_WITH_LEN("latin1") }, /* cset name */
- { STRING_WITH_LEN("latin1_general_ci") }, /* coll name */
+ { STRING_WITH_LEN("latin1") }, /* cset name */
+ { STRING_WITH_LEN("latin1_general_ci") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_latin1_general_ci, /* ctype */
@@ -4679,19 +4619,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_latin1_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_simple_ci_handler,
}
@@ -4701,8 +4639,8 @@ struct charset_info_st compiled_charsets[] = {
{
49,0,0,
MY_CS_COMPILED|MY_CS_CSSORT,
- { STRING_WITH_LEN("latin1") }, /* cset name */
- { STRING_WITH_LEN("latin1_general_cs") }, /* coll name */
+ { STRING_WITH_LEN("latin1") }, /* cset name */
+ { STRING_WITH_LEN("latin1_general_cs") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_latin1_general_cs, /* ctype */
@@ -4712,19 +4650,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_latin1_general_cs, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_simple_ci_handler,
}
@@ -4734,8 +4670,8 @@ struct charset_info_st compiled_charsets[] = {
{
50,0,0,
MY_CS_COMPILED|MY_CS_BINSORT,
- { STRING_WITH_LEN("cp1251") }, /* cset name */
- { STRING_WITH_LEN("cp1251_bin") }, /* coll name */
+ { STRING_WITH_LEN("cp1251") }, /* cset name */
+ { STRING_WITH_LEN("cp1251_bin") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_cp1251_general_ci, /* ctype */
@@ -4745,19 +4681,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_cp1251_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_bin_handler,
}
@@ -4767,8 +4701,8 @@ struct charset_info_st compiled_charsets[] = {
{
51,0,0,
MY_CS_COMPILED|MY_CS_PRIMARY,
- { STRING_WITH_LEN("cp1251") }, /* cset name */
- { STRING_WITH_LEN("cp1251_general_ci") }, /* coll name */
+ { STRING_WITH_LEN("cp1251") }, /* cset name */
+ { STRING_WITH_LEN("cp1251_general_ci") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_cp1251_general_ci, /* ctype */
@@ -4778,19 +4712,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_cp1251_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_simple_ci_handler,
}
@@ -4800,8 +4732,8 @@ struct charset_info_st compiled_charsets[] = {
{
52,0,0,
MY_CS_COMPILED|MY_CS_CSSORT,
- { STRING_WITH_LEN("cp1251") }, /* cset name */
- { STRING_WITH_LEN("cp1251_general_cs") }, /* coll name */
+ { STRING_WITH_LEN("cp1251") }, /* cset name */
+ { STRING_WITH_LEN("cp1251_general_cs") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_cp1251_general_ci, /* ctype */
@@ -4811,19 +4743,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_cp1251_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_simple_ci_handler,
}
@@ -4833,8 +4763,8 @@ struct charset_info_st compiled_charsets[] = {
{
53,0,0,
MY_CS_COMPILED|MY_CS_BINSORT,
- { STRING_WITH_LEN("macroman") }, /* cset name */
- { STRING_WITH_LEN("macroman_bin") }, /* coll name */
+ { STRING_WITH_LEN("macroman") }, /* cset name */
+ { STRING_WITH_LEN("macroman_bin") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_macroman_general_ci, /* ctype */
@@ -4844,19 +4774,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_macroman_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_bin_handler,
}
@@ -4866,8 +4794,8 @@ struct charset_info_st compiled_charsets[] = {
{
57,0,0,
MY_CS_COMPILED|MY_CS_PRIMARY,
- { STRING_WITH_LEN("cp1256") }, /* cset name */
- { STRING_WITH_LEN("cp1256_general_ci") }, /* coll name */
+ { STRING_WITH_LEN("cp1256") }, /* cset name */
+ { STRING_WITH_LEN("cp1256_general_ci") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_cp1256_general_ci, /* ctype */
@@ -4877,19 +4805,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_cp1256_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_simple_ci_handler,
}
@@ -4899,8 +4825,8 @@ struct charset_info_st compiled_charsets[] = {
{
58,0,0,
MY_CS_COMPILED|MY_CS_BINSORT,
- { STRING_WITH_LEN("cp1257") }, /* cset name */
- { STRING_WITH_LEN("cp1257_bin") }, /* coll name */
+ { STRING_WITH_LEN("cp1257") }, /* cset name */
+ { STRING_WITH_LEN("cp1257_bin") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_cp1257_general_ci, /* ctype */
@@ -4910,19 +4836,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_cp1257_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_bin_handler,
}
@@ -4932,8 +4856,8 @@ struct charset_info_st compiled_charsets[] = {
{
59,0,0,
MY_CS_COMPILED|MY_CS_PRIMARY,
- { STRING_WITH_LEN("cp1257") }, /* cset name */
- { STRING_WITH_LEN("cp1257_general_ci") }, /* coll name */
+ { STRING_WITH_LEN("cp1257") }, /* cset name */
+ { STRING_WITH_LEN("cp1257_general_ci") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_cp1257_general_ci, /* ctype */
@@ -4943,19 +4867,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_cp1257_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_simple_ci_handler,
}
@@ -4965,8 +4887,8 @@ struct charset_info_st compiled_charsets[] = {
{
64,0,0,
MY_CS_COMPILED|MY_CS_BINSORT,
- { STRING_WITH_LEN("armscii8") }, /* cset name */
- { STRING_WITH_LEN("armscii8_bin") }, /* coll name */
+ { STRING_WITH_LEN("armscii8") }, /* cset name */
+ { STRING_WITH_LEN("armscii8_bin") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_armscii8_general_ci, /* ctype */
@@ -4976,19 +4898,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_armscii8_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_bin_handler,
}
@@ -4998,8 +4918,8 @@ struct charset_info_st compiled_charsets[] = {
{
65,0,0,
MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_PUREASCII,
- { STRING_WITH_LEN("ascii") }, /* cset name */
- { STRING_WITH_LEN("ascii_bin") }, /* coll name */
+ { STRING_WITH_LEN("ascii") }, /* cset name */
+ { STRING_WITH_LEN("ascii_bin") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_ascii_general_ci, /* ctype */
@@ -5009,19 +4929,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_ascii_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_bin_handler,
}
@@ -5031,8 +4949,8 @@ struct charset_info_st compiled_charsets[] = {
{
66,0,0,
MY_CS_COMPILED|MY_CS_BINSORT,
- { STRING_WITH_LEN("cp1250") }, /* cset name */
- { STRING_WITH_LEN("cp1250_bin") }, /* coll name */
+ { STRING_WITH_LEN("cp1250") }, /* cset name */
+ { STRING_WITH_LEN("cp1250_bin") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_cp1250_general_ci, /* ctype */
@@ -5042,19 +4960,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_cp1250_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_bin_handler,
}
@@ -5064,8 +4980,8 @@ struct charset_info_st compiled_charsets[] = {
{
67,0,0,
MY_CS_COMPILED|MY_CS_BINSORT,
- { STRING_WITH_LEN("cp1256") }, /* cset name */
- { STRING_WITH_LEN("cp1256_bin") }, /* coll name */
+ { STRING_WITH_LEN("cp1256") }, /* cset name */
+ { STRING_WITH_LEN("cp1256_bin") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_cp1256_general_ci, /* ctype */
@@ -5075,19 +4991,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_cp1256_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_bin_handler,
}
@@ -5097,8 +5011,8 @@ struct charset_info_st compiled_charsets[] = {
{
68,0,0,
MY_CS_COMPILED|MY_CS_BINSORT,
- { STRING_WITH_LEN("cp866") }, /* cset name */
- { STRING_WITH_LEN("cp866_bin") }, /* coll name */
+ { STRING_WITH_LEN("cp866") }, /* cset name */
+ { STRING_WITH_LEN("cp866_bin") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_cp866_general_ci, /* ctype */
@@ -5108,19 +5022,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_cp866_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_bin_handler,
}
@@ -5130,8 +5042,8 @@ struct charset_info_st compiled_charsets[] = {
{
69,0,0,
MY_CS_COMPILED|MY_CS_BINSORT,
- { STRING_WITH_LEN("dec8") }, /* cset name */
- { STRING_WITH_LEN("dec8_bin") }, /* coll name */
+ { STRING_WITH_LEN("dec8") }, /* cset name */
+ { STRING_WITH_LEN("dec8_bin") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_dec8_swedish_ci, /* ctype */
@@ -5141,19 +5053,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_dec8_swedish_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_bin_handler,
}
@@ -5163,8 +5073,8 @@ struct charset_info_st compiled_charsets[] = {
{
70,0,0,
MY_CS_COMPILED|MY_CS_BINSORT,
- { STRING_WITH_LEN("greek") }, /* cset name */
- { STRING_WITH_LEN("greek_bin") }, /* coll name */
+ { STRING_WITH_LEN("greek") }, /* cset name */
+ { STRING_WITH_LEN("greek_bin") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_greek_general_ci, /* ctype */
@@ -5174,19 +5084,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_greek_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_bin_handler,
}
@@ -5196,8 +5104,8 @@ struct charset_info_st compiled_charsets[] = {
{
71,0,0,
MY_CS_COMPILED|MY_CS_BINSORT,
- { STRING_WITH_LEN("hebrew") }, /* cset name */
- { STRING_WITH_LEN("hebrew_bin") }, /* coll name */
+ { STRING_WITH_LEN("hebrew") }, /* cset name */
+ { STRING_WITH_LEN("hebrew_bin") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_hebrew_general_ci, /* ctype */
@@ -5207,19 +5115,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_hebrew_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_bin_handler,
}
@@ -5229,8 +5135,8 @@ struct charset_info_st compiled_charsets[] = {
{
72,0,0,
MY_CS_COMPILED|MY_CS_BINSORT,
- { STRING_WITH_LEN("hp8") }, /* cset name */
- { STRING_WITH_LEN("hp8_bin") }, /* coll name */
+ { STRING_WITH_LEN("hp8") }, /* cset name */
+ { STRING_WITH_LEN("hp8_bin") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_hp8_english_ci, /* ctype */
@@ -5240,19 +5146,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_hp8_english_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_bin_handler,
}
@@ -5262,8 +5166,8 @@ struct charset_info_st compiled_charsets[] = {
{
73,0,0,
MY_CS_COMPILED|MY_CS_BINSORT,
- { STRING_WITH_LEN("keybcs2") }, /* cset name */
- { STRING_WITH_LEN("keybcs2_bin") }, /* coll name */
+ { STRING_WITH_LEN("keybcs2") }, /* cset name */
+ { STRING_WITH_LEN("keybcs2_bin") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_keybcs2_general_ci, /* ctype */
@@ -5273,19 +5177,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_keybcs2_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_bin_handler,
}
@@ -5295,8 +5197,8 @@ struct charset_info_st compiled_charsets[] = {
{
74,0,0,
MY_CS_COMPILED|MY_CS_BINSORT,
- { STRING_WITH_LEN("koi8r") }, /* cset name */
- { STRING_WITH_LEN("koi8r_bin") }, /* coll name */
+ { STRING_WITH_LEN("koi8r") }, /* cset name */
+ { STRING_WITH_LEN("koi8r_bin") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_koi8r_general_ci, /* ctype */
@@ -5306,19 +5208,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_koi8r_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_bin_handler,
}
@@ -5328,8 +5228,8 @@ struct charset_info_st compiled_charsets[] = {
{
75,0,0,
MY_CS_COMPILED|MY_CS_BINSORT,
- { STRING_WITH_LEN("koi8u") }, /* cset name */
- { STRING_WITH_LEN("koi8u_bin") }, /* coll name */
+ { STRING_WITH_LEN("koi8u") }, /* cset name */
+ { STRING_WITH_LEN("koi8u_bin") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_koi8u_general_ci, /* ctype */
@@ -5339,19 +5239,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_koi8u_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_bin_handler,
}
@@ -5361,8 +5259,8 @@ struct charset_info_st compiled_charsets[] = {
{
77,0,0,
MY_CS_COMPILED|MY_CS_BINSORT,
- { STRING_WITH_LEN("latin2") }, /* cset name */
- { STRING_WITH_LEN("latin2_bin") }, /* coll name */
+ { STRING_WITH_LEN("latin2") }, /* cset name */
+ { STRING_WITH_LEN("latin2_bin") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_latin2_general_ci, /* ctype */
@@ -5372,19 +5270,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_latin2_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_bin_handler,
}
@@ -5394,8 +5290,8 @@ struct charset_info_st compiled_charsets[] = {
{
78,0,0,
MY_CS_COMPILED|MY_CS_BINSORT,
- { STRING_WITH_LEN("latin5") }, /* cset name */
- { STRING_WITH_LEN("latin5_bin") }, /* coll name */
+ { STRING_WITH_LEN("latin5") }, /* cset name */
+ { STRING_WITH_LEN("latin5_bin") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_latin5_turkish_ci, /* ctype */
@@ -5405,19 +5301,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_latin5_turkish_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_bin_handler,
}
@@ -5427,8 +5321,8 @@ struct charset_info_st compiled_charsets[] = {
{
79,0,0,
MY_CS_COMPILED|MY_CS_BINSORT,
- { STRING_WITH_LEN("latin7") }, /* cset name */
- { STRING_WITH_LEN("latin7_bin") }, /* coll name */
+ { STRING_WITH_LEN("latin7") }, /* cset name */
+ { STRING_WITH_LEN("latin7_bin") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_latin7_general_ci, /* ctype */
@@ -5438,19 +5332,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_latin7_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_bin_handler,
}
@@ -5460,8 +5352,8 @@ struct charset_info_st compiled_charsets[] = {
{
80,0,0,
MY_CS_COMPILED|MY_CS_BINSORT,
- { STRING_WITH_LEN("cp850") }, /* cset name */
- { STRING_WITH_LEN("cp850_bin") }, /* coll name */
+ { STRING_WITH_LEN("cp850") }, /* cset name */
+ { STRING_WITH_LEN("cp850_bin") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_cp850_general_ci, /* ctype */
@@ -5471,19 +5363,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_cp850_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_bin_handler,
}
@@ -5493,8 +5383,8 @@ struct charset_info_st compiled_charsets[] = {
{
81,0,0,
MY_CS_COMPILED|MY_CS_BINSORT,
- { STRING_WITH_LEN("cp852") }, /* cset name */
- { STRING_WITH_LEN("cp852_bin") }, /* coll name */
+ { STRING_WITH_LEN("cp852") }, /* cset name */
+ { STRING_WITH_LEN("cp852_bin") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_cp852_general_ci, /* ctype */
@@ -5504,19 +5394,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_cp852_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_bin_handler,
}
@@ -5526,8 +5414,8 @@ struct charset_info_st compiled_charsets[] = {
{
82,0,0,
MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_NONASCII,
- { STRING_WITH_LEN("swe7") }, /* cset name */
- { STRING_WITH_LEN("swe7_bin") }, /* coll name */
+ { STRING_WITH_LEN("swe7") }, /* cset name */
+ { STRING_WITH_LEN("swe7_bin") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_swe7_swedish_ci, /* ctype */
@@ -5537,19 +5425,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_swe7_swedish_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_bin_handler,
}
@@ -5559,8 +5445,8 @@ struct charset_info_st compiled_charsets[] = {
{
92,0,0,
MY_CS_COMPILED|MY_CS_PRIMARY,
- { STRING_WITH_LEN("geostd8") }, /* cset name */
- { STRING_WITH_LEN("geostd8_general_ci") }, /* coll name */
+ { STRING_WITH_LEN("geostd8") }, /* cset name */
+ { STRING_WITH_LEN("geostd8_general_ci") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_geostd8_general_ci, /* ctype */
@@ -5570,19 +5456,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_geostd8_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_simple_ci_handler,
}
@@ -5592,8 +5476,8 @@ struct charset_info_st compiled_charsets[] = {
{
93,0,0,
MY_CS_COMPILED|MY_CS_BINSORT,
- { STRING_WITH_LEN("geostd8") }, /* cset name */
- { STRING_WITH_LEN("geostd8_bin") }, /* coll name */
+ { STRING_WITH_LEN("geostd8") }, /* cset name */
+ { STRING_WITH_LEN("geostd8_bin") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_geostd8_general_ci, /* ctype */
@@ -5603,19 +5487,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_geostd8_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_bin_handler,
}
@@ -5625,8 +5507,8 @@ struct charset_info_st compiled_charsets[] = {
{
94,0,0,
MY_CS_COMPILED,
- { STRING_WITH_LEN("latin1") }, /* cset name */
- { STRING_WITH_LEN("latin1_spanish_ci") }, /* coll name */
+ { STRING_WITH_LEN("latin1") }, /* cset name */
+ { STRING_WITH_LEN("latin1_spanish_ci") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_latin1_spanish_ci, /* ctype */
@@ -5636,19 +5518,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_latin1_spanish_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_simple_ci_handler,
}
@@ -5658,8 +5538,8 @@ struct charset_info_st compiled_charsets[] = {
{
99,0,0,
MY_CS_COMPILED,
- { STRING_WITH_LEN("cp1250") }, /* cset name */
- { STRING_WITH_LEN("cp1250_polish_ci") }, /* coll name */
+ { STRING_WITH_LEN("cp1250") }, /* cset name */
+ { STRING_WITH_LEN("cp1250_polish_ci") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_cp1250_general_ci, /* ctype */
@@ -5669,19 +5549,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_cp1250_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_simple_ci_handler,
}
@@ -5691,8 +5569,8 @@ struct charset_info_st compiled_charsets[] = {
{
1027,0,0,
MY_CS_COMPILED|MY_CS_NOPAD,
- { STRING_WITH_LEN("dec8") }, /* cset name */
- { STRING_WITH_LEN("dec8_swedish_nopad_ci") }, /* coll name */
+ { STRING_WITH_LEN("dec8") }, /* cset name */
+ { STRING_WITH_LEN("dec8_swedish_nopad_ci") }, /* coll name */
"", /* comment */
"[import dec8_swedish_ci]", /* tailoring */
ctype_dec8_swedish_ci, /* ctype */
@@ -5702,19 +5580,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_dec8_swedish_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_simple_nopad_ci_handler,
}
@@ -5724,8 +5600,8 @@ struct charset_info_st compiled_charsets[] = {
{
1028,0,0,
MY_CS_COMPILED|MY_CS_NOPAD,
- { STRING_WITH_LEN("cp850") }, /* cset name */
- { STRING_WITH_LEN("cp850_general_nopad_ci") }, /* coll name */
+ { STRING_WITH_LEN("cp850") }, /* cset name */
+ { STRING_WITH_LEN("cp850_general_nopad_ci") }, /* coll name */
"", /* comment */
"[import cp850_general_ci]", /* tailoring */
ctype_cp850_general_ci, /* ctype */
@@ -5735,19 +5611,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_cp850_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_simple_nopad_ci_handler,
}
@@ -5757,8 +5631,8 @@ struct charset_info_st compiled_charsets[] = {
{
1030,0,0,
MY_CS_COMPILED|MY_CS_NOPAD,
- { STRING_WITH_LEN("hp8") }, /* cset name */
- { STRING_WITH_LEN("hp8_english_nopad_ci") }, /* coll name */
+ { STRING_WITH_LEN("hp8") }, /* cset name */
+ { STRING_WITH_LEN("hp8_english_nopad_ci") }, /* coll name */
"", /* comment */
"[import hp8_english_ci]", /* tailoring */
ctype_hp8_english_ci, /* ctype */
@@ -5768,19 +5642,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_hp8_english_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_simple_nopad_ci_handler,
}
@@ -5790,8 +5662,8 @@ struct charset_info_st compiled_charsets[] = {
{
1031,0,0,
MY_CS_COMPILED|MY_CS_NOPAD,
- { STRING_WITH_LEN("koi8r") }, /* cset name */
- { STRING_WITH_LEN("koi8r_general_nopad_ci") }, /* coll name */
+ { STRING_WITH_LEN("koi8r") }, /* cset name */
+ { STRING_WITH_LEN("koi8r_general_nopad_ci") }, /* coll name */
"", /* comment */
"[import koi8r_general_ci]", /* tailoring */
ctype_koi8r_general_ci, /* ctype */
@@ -5801,19 +5673,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_koi8r_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_simple_nopad_ci_handler,
}
@@ -5823,8 +5693,8 @@ struct charset_info_st compiled_charsets[] = {
{
1033,0,0,
MY_CS_COMPILED|MY_CS_NOPAD,
- { STRING_WITH_LEN("latin2") }, /* cset name */
- { STRING_WITH_LEN("latin2_general_nopad_ci") }, /* coll name */
+ { STRING_WITH_LEN("latin2") }, /* cset name */
+ { STRING_WITH_LEN("latin2_general_nopad_ci") }, /* coll name */
"", /* comment */
"[import latin2_general_ci]", /* tailoring */
ctype_latin2_general_ci, /* ctype */
@@ -5834,19 +5704,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_latin2_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_simple_nopad_ci_handler,
}
@@ -5856,8 +5724,8 @@ struct charset_info_st compiled_charsets[] = {
{
1034,0,0,
MY_CS_COMPILED|MY_CS_NONASCII|MY_CS_NOPAD,
- { STRING_WITH_LEN("swe7") }, /* cset name */
- { STRING_WITH_LEN("swe7_swedish_nopad_ci") }, /* coll name */
+ { STRING_WITH_LEN("swe7") }, /* cset name */
+ { STRING_WITH_LEN("swe7_swedish_nopad_ci") }, /* coll name */
"", /* comment */
"[import swe7_swedish_ci]", /* tailoring */
ctype_swe7_swedish_ci, /* ctype */
@@ -5867,19 +5735,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_swe7_swedish_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_simple_nopad_ci_handler,
}
@@ -5889,8 +5755,8 @@ struct charset_info_st compiled_charsets[] = {
{
1035,0,0,
MY_CS_COMPILED|MY_CS_PUREASCII|MY_CS_NOPAD,
- { STRING_WITH_LEN("ascii") }, /* cset name */
- { STRING_WITH_LEN("ascii_general_nopad_ci") }, /* coll name */
+ { STRING_WITH_LEN("ascii") }, /* cset name */
+ { STRING_WITH_LEN("ascii_general_nopad_ci") }, /* coll name */
"", /* comment */
"[import ascii_general_ci]", /* tailoring */
ctype_ascii_general_ci, /* ctype */
@@ -5900,19 +5766,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_ascii_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_simple_nopad_ci_handler,
}
@@ -5922,8 +5786,8 @@ struct charset_info_st compiled_charsets[] = {
{
1040,0,0,
MY_CS_COMPILED|MY_CS_NOPAD,
- { STRING_WITH_LEN("hebrew") }, /* cset name */
- { STRING_WITH_LEN("hebrew_general_nopad_ci") }, /* coll name */
+ { STRING_WITH_LEN("hebrew") }, /* cset name */
+ { STRING_WITH_LEN("hebrew_general_nopad_ci") }, /* coll name */
"", /* comment */
"[import hebrew_general_ci]", /* tailoring */
ctype_hebrew_general_ci, /* ctype */
@@ -5933,19 +5797,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_hebrew_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_simple_nopad_ci_handler,
}
@@ -5955,8 +5817,8 @@ struct charset_info_st compiled_charsets[] = {
{
1046,0,0,
MY_CS_COMPILED|MY_CS_NOPAD,
- { STRING_WITH_LEN("koi8u") }, /* cset name */
- { STRING_WITH_LEN("koi8u_general_nopad_ci") }, /* coll name */
+ { STRING_WITH_LEN("koi8u") }, /* cset name */
+ { STRING_WITH_LEN("koi8u_general_nopad_ci") }, /* coll name */
"", /* comment */
"[import koi8u_general_ci]", /* tailoring */
ctype_koi8u_general_ci, /* ctype */
@@ -5966,19 +5828,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_koi8u_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_simple_nopad_ci_handler,
}
@@ -5988,8 +5848,8 @@ struct charset_info_st compiled_charsets[] = {
{
1049,0,0,
MY_CS_COMPILED|MY_CS_NOPAD,
- { STRING_WITH_LEN("greek") }, /* cset name */
- { STRING_WITH_LEN("greek_general_nopad_ci") }, /* coll name */
+ { STRING_WITH_LEN("greek") }, /* cset name */
+ { STRING_WITH_LEN("greek_general_nopad_ci") }, /* coll name */
"", /* comment */
"[import greek_general_ci]", /* tailoring */
ctype_greek_general_ci, /* ctype */
@@ -5999,19 +5859,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_greek_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_simple_nopad_ci_handler,
}
@@ -6021,8 +5879,8 @@ struct charset_info_st compiled_charsets[] = {
{
1050,0,0,
MY_CS_COMPILED|MY_CS_NOPAD,
- { STRING_WITH_LEN("cp1250") }, /* cset name */
- { STRING_WITH_LEN("cp1250_general_nopad_ci") }, /* coll name */
+ { STRING_WITH_LEN("cp1250") }, /* cset name */
+ { STRING_WITH_LEN("cp1250_general_nopad_ci") }, /* coll name */
"", /* comment */
"[import cp1250_general_ci]", /* tailoring */
ctype_cp1250_general_ci, /* ctype */
@@ -6032,19 +5890,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_cp1250_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_simple_nopad_ci_handler,
}
@@ -6054,8 +5910,8 @@ struct charset_info_st compiled_charsets[] = {
{
1054,0,0,
MY_CS_COMPILED|MY_CS_NOPAD,
- { STRING_WITH_LEN("latin5") }, /* cset name */
- { STRING_WITH_LEN("latin5_turkish_nopad_ci") }, /* coll name */
+ { STRING_WITH_LEN("latin5") }, /* cset name */
+ { STRING_WITH_LEN("latin5_turkish_nopad_ci") }, /* coll name */
"", /* comment */
"[import latin5_turkish_ci]", /* tailoring */
ctype_latin5_turkish_ci, /* ctype */
@@ -6065,19 +5921,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_latin5_turkish_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_simple_nopad_ci_handler,
}
@@ -6087,8 +5941,8 @@ struct charset_info_st compiled_charsets[] = {
{
1056,0,0,
MY_CS_COMPILED|MY_CS_NOPAD,
- { STRING_WITH_LEN("armscii8") }, /* cset name */
- { STRING_WITH_LEN("armscii8_general_nopad_ci") }, /* coll name */
+ { STRING_WITH_LEN("armscii8") }, /* cset name */
+ { STRING_WITH_LEN("armscii8_general_nopad_ci") }, /* coll name */
"", /* comment */
"[import armscii8_general_ci]", /* tailoring */
ctype_armscii8_general_ci, /* ctype */
@@ -6098,19 +5952,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_armscii8_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_simple_nopad_ci_handler,
}
@@ -6120,8 +5972,8 @@ struct charset_info_st compiled_charsets[] = {
{
1060,0,0,
MY_CS_COMPILED|MY_CS_NOPAD,
- { STRING_WITH_LEN("cp866") }, /* cset name */
- { STRING_WITH_LEN("cp866_general_nopad_ci") }, /* coll name */
+ { STRING_WITH_LEN("cp866") }, /* cset name */
+ { STRING_WITH_LEN("cp866_general_nopad_ci") }, /* coll name */
"", /* comment */
"[import cp866_general_ci]", /* tailoring */
ctype_cp866_general_ci, /* ctype */
@@ -6131,19 +5983,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_cp866_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_simple_nopad_ci_handler,
}
@@ -6153,8 +6003,8 @@ struct charset_info_st compiled_charsets[] = {
{
1061,0,0,
MY_CS_COMPILED|MY_CS_NOPAD,
- { STRING_WITH_LEN("keybcs2") }, /* cset name */
- { STRING_WITH_LEN("keybcs2_general_nopad_ci") }, /* coll name */
+ { STRING_WITH_LEN("keybcs2") }, /* cset name */
+ { STRING_WITH_LEN("keybcs2_general_nopad_ci") }, /* coll name */
"", /* comment */
"[import keybcs2_general_ci]", /* tailoring */
ctype_keybcs2_general_ci, /* ctype */
@@ -6164,19 +6014,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_keybcs2_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_simple_nopad_ci_handler,
}
@@ -6186,8 +6034,8 @@ struct charset_info_st compiled_charsets[] = {
{
1062,0,0,
MY_CS_COMPILED|MY_CS_NOPAD,
- { STRING_WITH_LEN("macce") }, /* cset name */
- { STRING_WITH_LEN("macce_general_nopad_ci") }, /* coll name */
+ { STRING_WITH_LEN("macce") }, /* cset name */
+ { STRING_WITH_LEN("macce_general_nopad_ci") }, /* coll name */
"", /* comment */
"[import macce_general_ci]", /* tailoring */
ctype_macce_general_ci, /* ctype */
@@ -6197,19 +6045,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_macce_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_simple_nopad_ci_handler,
}
@@ -6219,8 +6065,8 @@ struct charset_info_st compiled_charsets[] = {
{
1063,0,0,
MY_CS_COMPILED|MY_CS_NOPAD,
- { STRING_WITH_LEN("macroman") }, /* cset name */
- { STRING_WITH_LEN("macroman_general_nopad_ci") }, /* coll name */
+ { STRING_WITH_LEN("macroman") }, /* cset name */
+ { STRING_WITH_LEN("macroman_general_nopad_ci") }, /* coll name */
"", /* comment */
"[import macroman_general_ci]", /* tailoring */
ctype_macroman_general_ci, /* ctype */
@@ -6230,19 +6076,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_macroman_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_simple_nopad_ci_handler,
}
@@ -6252,8 +6096,8 @@ struct charset_info_st compiled_charsets[] = {
{
1064,0,0,
MY_CS_COMPILED|MY_CS_NOPAD,
- { STRING_WITH_LEN("cp852") }, /* cset name */
- { STRING_WITH_LEN("cp852_general_nopad_ci") }, /* coll name */
+ { STRING_WITH_LEN("cp852") }, /* cset name */
+ { STRING_WITH_LEN("cp852_general_nopad_ci") }, /* coll name */
"", /* comment */
"[import cp852_general_ci]", /* tailoring */
ctype_cp852_general_ci, /* ctype */
@@ -6263,19 +6107,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_cp852_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_simple_nopad_ci_handler,
}
@@ -6285,8 +6127,8 @@ struct charset_info_st compiled_charsets[] = {
{
1065,0,0,
MY_CS_COMPILED|MY_CS_NOPAD,
- { STRING_WITH_LEN("latin7") }, /* cset name */
- { STRING_WITH_LEN("latin7_general_nopad_ci") }, /* coll name */
+ { STRING_WITH_LEN("latin7") }, /* cset name */
+ { STRING_WITH_LEN("latin7_general_nopad_ci") }, /* coll name */
"", /* comment */
"[import latin7_general_ci]", /* tailoring */
ctype_latin7_general_ci, /* ctype */
@@ -6296,19 +6138,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_latin7_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_simple_nopad_ci_handler,
}
@@ -6318,8 +6158,8 @@ struct charset_info_st compiled_charsets[] = {
{
1067,0,0,
MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_NOPAD,
- { STRING_WITH_LEN("macce") }, /* cset name */
- { STRING_WITH_LEN("macce_nopad_bin") }, /* coll name */
+ { STRING_WITH_LEN("macce") }, /* cset name */
+ { STRING_WITH_LEN("macce_nopad_bin") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_macce_general_ci, /* ctype */
@@ -6329,19 +6169,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_macce_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_nopad_bin_handler,
}
@@ -6351,8 +6189,8 @@ struct charset_info_st compiled_charsets[] = {
{
1074,0,0,
MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_NOPAD,
- { STRING_WITH_LEN("cp1251") }, /* cset name */
- { STRING_WITH_LEN("cp1251_nopad_bin") }, /* coll name */
+ { STRING_WITH_LEN("cp1251") }, /* cset name */
+ { STRING_WITH_LEN("cp1251_nopad_bin") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_cp1251_general_ci, /* ctype */
@@ -6362,19 +6200,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_cp1251_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_nopad_bin_handler,
}
@@ -6384,8 +6220,8 @@ struct charset_info_st compiled_charsets[] = {
{
1075,0,0,
MY_CS_COMPILED|MY_CS_NOPAD,
- { STRING_WITH_LEN("cp1251") }, /* cset name */
- { STRING_WITH_LEN("cp1251_general_nopad_ci") }, /* coll name */
+ { STRING_WITH_LEN("cp1251") }, /* cset name */
+ { STRING_WITH_LEN("cp1251_general_nopad_ci") }, /* coll name */
"", /* comment */
"[import cp1251_general_ci]", /* tailoring */
ctype_cp1251_general_ci, /* ctype */
@@ -6395,19 +6231,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_cp1251_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_simple_nopad_ci_handler,
}
@@ -6417,8 +6251,8 @@ struct charset_info_st compiled_charsets[] = {
{
1077,0,0,
MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_NOPAD,
- { STRING_WITH_LEN("macroman") }, /* cset name */
- { STRING_WITH_LEN("macroman_nopad_bin") }, /* coll name */
+ { STRING_WITH_LEN("macroman") }, /* cset name */
+ { STRING_WITH_LEN("macroman_nopad_bin") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_macroman_general_ci, /* ctype */
@@ -6428,19 +6262,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_macroman_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_nopad_bin_handler,
}
@@ -6450,8 +6282,8 @@ struct charset_info_st compiled_charsets[] = {
{
1081,0,0,
MY_CS_COMPILED|MY_CS_NOPAD,
- { STRING_WITH_LEN("cp1256") }, /* cset name */
- { STRING_WITH_LEN("cp1256_general_nopad_ci") }, /* coll name */
+ { STRING_WITH_LEN("cp1256") }, /* cset name */
+ { STRING_WITH_LEN("cp1256_general_nopad_ci") }, /* coll name */
"", /* comment */
"[import cp1256_general_ci]", /* tailoring */
ctype_cp1256_general_ci, /* ctype */
@@ -6461,19 +6293,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_cp1256_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_simple_nopad_ci_handler,
}
@@ -6483,8 +6313,8 @@ struct charset_info_st compiled_charsets[] = {
{
1082,0,0,
MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_NOPAD,
- { STRING_WITH_LEN("cp1257") }, /* cset name */
- { STRING_WITH_LEN("cp1257_nopad_bin") }, /* coll name */
+ { STRING_WITH_LEN("cp1257") }, /* cset name */
+ { STRING_WITH_LEN("cp1257_nopad_bin") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_cp1257_general_ci, /* ctype */
@@ -6494,19 +6324,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_cp1257_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_nopad_bin_handler,
}
@@ -6516,8 +6344,8 @@ struct charset_info_st compiled_charsets[] = {
{
1083,0,0,
MY_CS_COMPILED|MY_CS_NOPAD,
- { STRING_WITH_LEN("cp1257") }, /* cset name */
- { STRING_WITH_LEN("cp1257_general_nopad_ci") }, /* coll name */
+ { STRING_WITH_LEN("cp1257") }, /* cset name */
+ { STRING_WITH_LEN("cp1257_general_nopad_ci") }, /* coll name */
"", /* comment */
"[import cp1257_general_ci]", /* tailoring */
ctype_cp1257_general_ci, /* ctype */
@@ -6527,19 +6355,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_cp1257_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_simple_nopad_ci_handler,
}
@@ -6549,8 +6375,8 @@ struct charset_info_st compiled_charsets[] = {
{
1088,0,0,
MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_NOPAD,
- { STRING_WITH_LEN("armscii8") }, /* cset name */
- { STRING_WITH_LEN("armscii8_nopad_bin") }, /* coll name */
+ { STRING_WITH_LEN("armscii8") }, /* cset name */
+ { STRING_WITH_LEN("armscii8_nopad_bin") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_armscii8_general_ci, /* ctype */
@@ -6560,19 +6386,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_armscii8_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_nopad_bin_handler,
}
@@ -6582,8 +6406,8 @@ struct charset_info_st compiled_charsets[] = {
{
1089,0,0,
MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_PUREASCII|MY_CS_NOPAD,
- { STRING_WITH_LEN("ascii") }, /* cset name */
- { STRING_WITH_LEN("ascii_nopad_bin") }, /* coll name */
+ { STRING_WITH_LEN("ascii") }, /* cset name */
+ { STRING_WITH_LEN("ascii_nopad_bin") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_ascii_general_ci, /* ctype */
@@ -6593,19 +6417,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_ascii_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_nopad_bin_handler,
}
@@ -6615,8 +6437,8 @@ struct charset_info_st compiled_charsets[] = {
{
1090,0,0,
MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_NOPAD,
- { STRING_WITH_LEN("cp1250") }, /* cset name */
- { STRING_WITH_LEN("cp1250_nopad_bin") }, /* coll name */
+ { STRING_WITH_LEN("cp1250") }, /* cset name */
+ { STRING_WITH_LEN("cp1250_nopad_bin") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_cp1250_general_ci, /* ctype */
@@ -6626,19 +6448,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_cp1250_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_nopad_bin_handler,
}
@@ -6648,8 +6468,8 @@ struct charset_info_st compiled_charsets[] = {
{
1091,0,0,
MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_NOPAD,
- { STRING_WITH_LEN("cp1256") }, /* cset name */
- { STRING_WITH_LEN("cp1256_nopad_bin") }, /* coll name */
+ { STRING_WITH_LEN("cp1256") }, /* cset name */
+ { STRING_WITH_LEN("cp1256_nopad_bin") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_cp1256_general_ci, /* ctype */
@@ -6659,19 +6479,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_cp1256_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_nopad_bin_handler,
}
@@ -6681,8 +6499,8 @@ struct charset_info_st compiled_charsets[] = {
{
1092,0,0,
MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_NOPAD,
- { STRING_WITH_LEN("cp866") }, /* cset name */
- { STRING_WITH_LEN("cp866_nopad_bin") }, /* coll name */
+ { STRING_WITH_LEN("cp866") }, /* cset name */
+ { STRING_WITH_LEN("cp866_nopad_bin") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_cp866_general_ci, /* ctype */
@@ -6692,19 +6510,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_cp866_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_nopad_bin_handler,
}
@@ -6714,8 +6530,8 @@ struct charset_info_st compiled_charsets[] = {
{
1093,0,0,
MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_NOPAD,
- { STRING_WITH_LEN("dec8") }, /* cset name */
- { STRING_WITH_LEN("dec8_nopad_bin") }, /* coll name */
+ { STRING_WITH_LEN("dec8") }, /* cset name */
+ { STRING_WITH_LEN("dec8_nopad_bin") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_dec8_swedish_ci, /* ctype */
@@ -6725,19 +6541,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_dec8_swedish_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_nopad_bin_handler,
}
@@ -6747,8 +6561,8 @@ struct charset_info_st compiled_charsets[] = {
{
1094,0,0,
MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_NOPAD,
- { STRING_WITH_LEN("greek") }, /* cset name */
- { STRING_WITH_LEN("greek_nopad_bin") }, /* coll name */
+ { STRING_WITH_LEN("greek") }, /* cset name */
+ { STRING_WITH_LEN("greek_nopad_bin") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_greek_general_ci, /* ctype */
@@ -6758,19 +6572,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_greek_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_nopad_bin_handler,
}
@@ -6780,8 +6592,8 @@ struct charset_info_st compiled_charsets[] = {
{
1095,0,0,
MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_NOPAD,
- { STRING_WITH_LEN("hebrew") }, /* cset name */
- { STRING_WITH_LEN("hebrew_nopad_bin") }, /* coll name */
+ { STRING_WITH_LEN("hebrew") }, /* cset name */
+ { STRING_WITH_LEN("hebrew_nopad_bin") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_hebrew_general_ci, /* ctype */
@@ -6791,19 +6603,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_hebrew_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_nopad_bin_handler,
}
@@ -6813,8 +6623,8 @@ struct charset_info_st compiled_charsets[] = {
{
1096,0,0,
MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_NOPAD,
- { STRING_WITH_LEN("hp8") }, /* cset name */
- { STRING_WITH_LEN("hp8_nopad_bin") }, /* coll name */
+ { STRING_WITH_LEN("hp8") }, /* cset name */
+ { STRING_WITH_LEN("hp8_nopad_bin") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_hp8_english_ci, /* ctype */
@@ -6824,19 +6634,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_hp8_english_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_nopad_bin_handler,
}
@@ -6846,8 +6654,8 @@ struct charset_info_st compiled_charsets[] = {
{
1097,0,0,
MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_NOPAD,
- { STRING_WITH_LEN("keybcs2") }, /* cset name */
- { STRING_WITH_LEN("keybcs2_nopad_bin") }, /* coll name */
+ { STRING_WITH_LEN("keybcs2") }, /* cset name */
+ { STRING_WITH_LEN("keybcs2_nopad_bin") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_keybcs2_general_ci, /* ctype */
@@ -6857,19 +6665,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_keybcs2_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_nopad_bin_handler,
}
@@ -6879,8 +6685,8 @@ struct charset_info_st compiled_charsets[] = {
{
1098,0,0,
MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_NOPAD,
- { STRING_WITH_LEN("koi8r") }, /* cset name */
- { STRING_WITH_LEN("koi8r_nopad_bin") }, /* coll name */
+ { STRING_WITH_LEN("koi8r") }, /* cset name */
+ { STRING_WITH_LEN("koi8r_nopad_bin") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_koi8r_general_ci, /* ctype */
@@ -6890,19 +6696,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_koi8r_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_nopad_bin_handler,
}
@@ -6912,8 +6716,8 @@ struct charset_info_st compiled_charsets[] = {
{
1099,0,0,
MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_NOPAD,
- { STRING_WITH_LEN("koi8u") }, /* cset name */
- { STRING_WITH_LEN("koi8u_nopad_bin") }, /* coll name */
+ { STRING_WITH_LEN("koi8u") }, /* cset name */
+ { STRING_WITH_LEN("koi8u_nopad_bin") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_koi8u_general_ci, /* ctype */
@@ -6923,19 +6727,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_koi8u_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_nopad_bin_handler,
}
@@ -6945,8 +6747,8 @@ struct charset_info_st compiled_charsets[] = {
{
1101,0,0,
MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_NOPAD,
- { STRING_WITH_LEN("latin2") }, /* cset name */
- { STRING_WITH_LEN("latin2_nopad_bin") }, /* coll name */
+ { STRING_WITH_LEN("latin2") }, /* cset name */
+ { STRING_WITH_LEN("latin2_nopad_bin") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_latin2_general_ci, /* ctype */
@@ -6956,19 +6758,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_latin2_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_nopad_bin_handler,
}
@@ -6978,8 +6778,8 @@ struct charset_info_st compiled_charsets[] = {
{
1102,0,0,
MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_NOPAD,
- { STRING_WITH_LEN("latin5") }, /* cset name */
- { STRING_WITH_LEN("latin5_nopad_bin") }, /* coll name */
+ { STRING_WITH_LEN("latin5") }, /* cset name */
+ { STRING_WITH_LEN("latin5_nopad_bin") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_latin5_turkish_ci, /* ctype */
@@ -6989,19 +6789,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_latin5_turkish_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_nopad_bin_handler,
}
@@ -7011,8 +6809,8 @@ struct charset_info_st compiled_charsets[] = {
{
1103,0,0,
MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_NOPAD,
- { STRING_WITH_LEN("latin7") }, /* cset name */
- { STRING_WITH_LEN("latin7_nopad_bin") }, /* coll name */
+ { STRING_WITH_LEN("latin7") }, /* cset name */
+ { STRING_WITH_LEN("latin7_nopad_bin") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_latin7_general_ci, /* ctype */
@@ -7022,19 +6820,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_latin7_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_nopad_bin_handler,
}
@@ -7044,8 +6840,8 @@ struct charset_info_st compiled_charsets[] = {
{
1104,0,0,
MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_NOPAD,
- { STRING_WITH_LEN("cp850") }, /* cset name */
- { STRING_WITH_LEN("cp850_nopad_bin") }, /* coll name */
+ { STRING_WITH_LEN("cp850") }, /* cset name */
+ { STRING_WITH_LEN("cp850_nopad_bin") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_cp850_general_ci, /* ctype */
@@ -7055,19 +6851,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_cp850_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_nopad_bin_handler,
}
@@ -7077,8 +6871,8 @@ struct charset_info_st compiled_charsets[] = {
{
1105,0,0,
MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_NOPAD,
- { STRING_WITH_LEN("cp852") }, /* cset name */
- { STRING_WITH_LEN("cp852_nopad_bin") }, /* coll name */
+ { STRING_WITH_LEN("cp852") }, /* cset name */
+ { STRING_WITH_LEN("cp852_nopad_bin") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_cp852_general_ci, /* ctype */
@@ -7088,19 +6882,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_cp852_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_nopad_bin_handler,
}
@@ -7110,8 +6902,8 @@ struct charset_info_st compiled_charsets[] = {
{
1106,0,0,
MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_NONASCII|MY_CS_NOPAD,
- { STRING_WITH_LEN("swe7") }, /* cset name */
- { STRING_WITH_LEN("swe7_nopad_bin") }, /* coll name */
+ { STRING_WITH_LEN("swe7") }, /* cset name */
+ { STRING_WITH_LEN("swe7_nopad_bin") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_swe7_swedish_ci, /* ctype */
@@ -7121,19 +6913,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_swe7_swedish_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_nopad_bin_handler,
}
@@ -7143,8 +6933,8 @@ struct charset_info_st compiled_charsets[] = {
{
1116,0,0,
MY_CS_COMPILED|MY_CS_NOPAD,
- { STRING_WITH_LEN("geostd8") }, /* cset name */
- { STRING_WITH_LEN("geostd8_general_nopad_ci") }, /* coll name */
+ { STRING_WITH_LEN("geostd8") }, /* cset name */
+ { STRING_WITH_LEN("geostd8_general_nopad_ci") }, /* coll name */
"", /* comment */
"[import geostd8_general_ci]", /* tailoring */
ctype_geostd8_general_ci, /* ctype */
@@ -7154,19 +6944,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_geostd8_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_simple_nopad_ci_handler,
}
@@ -7176,8 +6964,8 @@ struct charset_info_st compiled_charsets[] = {
{
1117,0,0,
MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_NOPAD,
- { STRING_WITH_LEN("geostd8") }, /* cset name */
- { STRING_WITH_LEN("geostd8_nopad_bin") }, /* coll name */
+ { STRING_WITH_LEN("geostd8") }, /* cset name */
+ { STRING_WITH_LEN("geostd8_nopad_bin") }, /* coll name */
"", /* comment */
NULL, /* tailoring */
ctype_geostd8_general_ci, /* ctype */
@@ -7187,19 +6975,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
to_uni_geostd8_general_ci, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_nopad_bin_handler,
}
@@ -7219,19 +7005,17 @@ struct charset_info_st compiled_charsets[] = {
NULL, /* uca */
NULL, /* to_uni */
NULL, /* from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state map */
NULL, /* ident map */
1, /* strxfrm_multiply*/
- 1, /* caseup_multiply*/
- 1, /* casedn_multiply*/
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad_char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_8bit_handler,
&my_collation_8bit_simple_ci_handler,
}
diff --git a/strings/ctype-gb2312.c b/strings/ctype-gb2312.c
index dd3581366fe..f3e9c902389 100644
--- a/strings/ctype-gb2312.c
+++ b/strings/ctype-gb2312.c
@@ -177,612 +177,612 @@ static const uchar sort_order_gb2312[]=
#include "ctype-mb.inl"
-static MY_UNICASE_CHARACTER cA2[256]=
+static const MY_CASEFOLD_CHARACTER cA2[256]=
{
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx40 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx50 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx60 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx70 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx80 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx90 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0xA2A0,0xA2A0,0xA2A0}, /* A2A0 */
- {0xA2A1,0xA2A1,0x003F},
- {0xA2A2,0xA2A2,0x003F},
- {0xA2A3,0xA2A3,0x003F},
- {0xA2A4,0xA2A4,0x003F},
- {0xA2A5,0xA2A5,0x003F},
- {0xA2A6,0xA2A6,0x003F},
- {0xA2A7,0xA2A7,0x003F},
- {0xA2A8,0xA2A8,0x003F},
- {0xA2A9,0xA2A9,0x003F},
- {0xA2AA,0xA2AA,0x003F},
- {0xA2AB,0xA2AB,0x003F},
- {0xA2AC,0xA2AC,0x003F},
- {0xA2AD,0xA2AD,0x003F},
- {0xA2AE,0xA2AE,0x003F},
- {0xA2AF,0xA2AF,0x003F},
- {0xA2B0,0xA2B0,0x003F}, /* A2B0 */
- {0xA2B1,0xA2B1,0x2488},
- {0xA2B2,0xA2B2,0x2489},
- {0xA2B3,0xA2B3,0x248A},
- {0xA2B4,0xA2B4,0x248B},
- {0xA2B5,0xA2B5,0x248C},
- {0xA2B6,0xA2B6,0x248D},
- {0xA2B7,0xA2B7,0x248E},
- {0xA2B8,0xA2B8,0x248F},
- {0xA2B9,0xA2B9,0x2490},
- {0xA2BA,0xA2BA,0x2491},
- {0xA2BB,0xA2BB,0x2492},
- {0xA2BC,0xA2BC,0x2493},
- {0xA2BD,0xA2BD,0x2494},
- {0xA2BE,0xA2BE,0x2495},
- {0xA2BF,0xA2BF,0x2496},
- {0xA2C0,0xA2C0,0x2497}, /* A2C0 */
- {0xA2C1,0xA2C1,0x2498},
- {0xA2C2,0xA2C2,0x2499},
- {0xA2C3,0xA2C3,0x249A},
- {0xA2C4,0xA2C4,0x249B},
- {0xA2C5,0xA2C5,0x2474},
- {0xA2C6,0xA2C6,0x2475},
- {0xA2C7,0xA2C7,0x2476},
- {0xA2C8,0xA2C8,0x2477},
- {0xA2C9,0xA2C9,0x2478},
- {0xA2CA,0xA2CA,0x2479},
- {0xA2CB,0xA2CB,0x247A},
- {0xA2CC,0xA2CC,0x247B},
- {0xA2CD,0xA2CD,0x247C},
- {0xA2CE,0xA2CE,0x247D},
- {0xA2CF,0xA2CF,0x247E},
- {0xA2D0,0xA2D0,0x247F}, /* A2D0 */
- {0xA2D1,0xA2D1,0x2480},
- {0xA2D2,0xA2D2,0x2481},
- {0xA2D3,0xA2D3,0x2482},
- {0xA2D4,0xA2D4,0x2483},
- {0xA2D5,0xA2D5,0x2484},
- {0xA2D6,0xA2D6,0x2485},
- {0xA2D7,0xA2D7,0x2486},
- {0xA2D8,0xA2D8,0x2487},
- {0xA2D9,0xA2D9,0x2460},
- {0xA2DA,0xA2DA,0x2461},
- {0xA2DB,0xA2DB,0x2462},
- {0xA2DC,0xA2DC,0x2463},
- {0xA2DD,0xA2DD,0x2464},
- {0xA2DE,0xA2DE,0x2465},
- {0xA2DF,0xA2DF,0x2466},
- {0xA2E0,0xA2E0,0x2467}, /* A2E0 */
- {0xA2E1,0xA2E1,0x2468},
- {0xA2E2,0xA2E2,0x2469},
- {0xA2E3,0xA2E3,0x003F},
- {0xA2E4,0xA2E4,0x003F},
- {0xA2E5,0xA2E5,0x3220},
- {0xA2E6,0xA2E6,0x3221},
- {0xA2E7,0xA2E7,0x3222},
- {0xA2E8,0xA2E8,0x3223},
- {0xA2E9,0xA2E9,0x3224},
- {0xA2EA,0xA2EA,0x3225},
- {0xA2EB,0xA2EB,0x3226},
- {0xA2EC,0xA2EC,0x3227},
- {0xA2ED,0xA2ED,0x3228},
- {0xA2EE,0xA2EE,0x3229},
- {0xA2EF,0xA2EF,0x003F},
- {0xA2F0,0xA2F0,0x003F}, /* A2F0 */
- {0xA2F1,0xA2F1,0x2160},
- {0xA2F2,0xA2F2,0x2161},
- {0xA2F3,0xA2F3,0x2162},
- {0xA2F4,0xA2F4,0x2163},
- {0xA2F5,0xA2F5,0x2164},
- {0xA2F6,0xA2F6,0x2165},
- {0xA2F7,0xA2F7,0x2166},
- {0xA2F8,0xA2F8,0x2167},
- {0xA2F9,0xA2F9,0x2168},
- {0xA2FA,0xA2FA,0x2169},
- {0xA2FB,0xA2FB,0x216A},
- {0xA2FC,0xA2FC,0x216B},
- {0xA2FD,0xA2FD,0x003F},
- {0xA2FE,0xA2FE,0x003F},
- {0xA2FF,0xA2FF,0xA2FF}
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx00 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx10 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx20 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx30 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx40 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx50 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx60 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx70 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx80 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx90 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0xA2A0,0xA2A0}, /* A2A0 */
+ {0xA2A1,0xA2A1},
+ {0xA2A2,0xA2A2},
+ {0xA2A3,0xA2A3},
+ {0xA2A4,0xA2A4},
+ {0xA2A5,0xA2A5},
+ {0xA2A6,0xA2A6},
+ {0xA2A7,0xA2A7},
+ {0xA2A8,0xA2A8},
+ {0xA2A9,0xA2A9},
+ {0xA2AA,0xA2AA},
+ {0xA2AB,0xA2AB},
+ {0xA2AC,0xA2AC},
+ {0xA2AD,0xA2AD},
+ {0xA2AE,0xA2AE},
+ {0xA2AF,0xA2AF},
+ {0xA2B0,0xA2B0}, /* A2B0 */
+ {0xA2B1,0xA2B1},
+ {0xA2B2,0xA2B2},
+ {0xA2B3,0xA2B3},
+ {0xA2B4,0xA2B4},
+ {0xA2B5,0xA2B5},
+ {0xA2B6,0xA2B6},
+ {0xA2B7,0xA2B7},
+ {0xA2B8,0xA2B8},
+ {0xA2B9,0xA2B9},
+ {0xA2BA,0xA2BA},
+ {0xA2BB,0xA2BB},
+ {0xA2BC,0xA2BC},
+ {0xA2BD,0xA2BD},
+ {0xA2BE,0xA2BE},
+ {0xA2BF,0xA2BF},
+ {0xA2C0,0xA2C0}, /* A2C0 */
+ {0xA2C1,0xA2C1},
+ {0xA2C2,0xA2C2},
+ {0xA2C3,0xA2C3},
+ {0xA2C4,0xA2C4},
+ {0xA2C5,0xA2C5},
+ {0xA2C6,0xA2C6},
+ {0xA2C7,0xA2C7},
+ {0xA2C8,0xA2C8},
+ {0xA2C9,0xA2C9},
+ {0xA2CA,0xA2CA},
+ {0xA2CB,0xA2CB},
+ {0xA2CC,0xA2CC},
+ {0xA2CD,0xA2CD},
+ {0xA2CE,0xA2CE},
+ {0xA2CF,0xA2CF},
+ {0xA2D0,0xA2D0}, /* A2D0 */
+ {0xA2D1,0xA2D1},
+ {0xA2D2,0xA2D2},
+ {0xA2D3,0xA2D3},
+ {0xA2D4,0xA2D4},
+ {0xA2D5,0xA2D5},
+ {0xA2D6,0xA2D6},
+ {0xA2D7,0xA2D7},
+ {0xA2D8,0xA2D8},
+ {0xA2D9,0xA2D9},
+ {0xA2DA,0xA2DA},
+ {0xA2DB,0xA2DB},
+ {0xA2DC,0xA2DC},
+ {0xA2DD,0xA2DD},
+ {0xA2DE,0xA2DE},
+ {0xA2DF,0xA2DF},
+ {0xA2E0,0xA2E0}, /* A2E0 */
+ {0xA2E1,0xA2E1},
+ {0xA2E2,0xA2E2},
+ {0xA2E3,0xA2E3},
+ {0xA2E4,0xA2E4},
+ {0xA2E5,0xA2E5},
+ {0xA2E6,0xA2E6},
+ {0xA2E7,0xA2E7},
+ {0xA2E8,0xA2E8},
+ {0xA2E9,0xA2E9},
+ {0xA2EA,0xA2EA},
+ {0xA2EB,0xA2EB},
+ {0xA2EC,0xA2EC},
+ {0xA2ED,0xA2ED},
+ {0xA2EE,0xA2EE},
+ {0xA2EF,0xA2EF},
+ {0xA2F0,0xA2F0}, /* A2F0 */
+ {0xA2F1,0xA2F1},
+ {0xA2F2,0xA2F2},
+ {0xA2F3,0xA2F3},
+ {0xA2F4,0xA2F4},
+ {0xA2F5,0xA2F5},
+ {0xA2F6,0xA2F6},
+ {0xA2F7,0xA2F7},
+ {0xA2F8,0xA2F8},
+ {0xA2F9,0xA2F9},
+ {0xA2FA,0xA2FA},
+ {0xA2FB,0xA2FB},
+ {0xA2FC,0xA2FC},
+ {0xA2FD,0xA2FD},
+ {0xA2FE,0xA2FE},
+ {0xA2FF,0xA2FF}
};
-static MY_UNICASE_CHARACTER cA3[256]=
+static const MY_CASEFOLD_CHARACTER cA3[256]=
{
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx40 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx50 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx60 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx70 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx80 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx90 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0xA3A0,0xA3A0,0xA3A0}, /* A3A0 */
- {0xA3A1,0xA3A1,0xFF01},
- {0xA3A2,0xA3A2,0xFF02},
- {0xA3A3,0xA3A3,0xFF03},
- {0xA3A4,0xA3A4,0xFFE5},
- {0xA3A5,0xA3A5,0xFF05},
- {0xA3A6,0xA3A6,0xFF06},
- {0xA3A7,0xA3A7,0xFF07},
- {0xA3A8,0xA3A8,0xFF08},
- {0xA3A9,0xA3A9,0xFF09},
- {0xA3AA,0xA3AA,0xFF0A},
- {0xA3AB,0xA3AB,0xFF0B},
- {0xA3AC,0xA3AC,0xFF0C},
- {0xA3AD,0xA3AD,0xFF0D},
- {0xA3AE,0xA3AE,0xFF0E},
- {0xA3AF,0xA3AF,0xFF0F},
- {0xA3B0,0xA3B0,0xFF10}, /* A3B0 */
- {0xA3B1,0xA3B1,0xFF11},
- {0xA3B2,0xA3B2,0xFF12},
- {0xA3B3,0xA3B3,0xFF13},
- {0xA3B4,0xA3B4,0xFF14},
- {0xA3B5,0xA3B5,0xFF15},
- {0xA3B6,0xA3B6,0xFF16},
- {0xA3B7,0xA3B7,0xFF17},
- {0xA3B8,0xA3B8,0xFF18},
- {0xA3B9,0xA3B9,0xFF19},
- {0xA3BA,0xA3BA,0xFF1A},
- {0xA3BB,0xA3BB,0xFF1B},
- {0xA3BC,0xA3BC,0xFF1C},
- {0xA3BD,0xA3BD,0xFF1D},
- {0xA3BE,0xA3BE,0xFF1E},
- {0xA3BF,0xA3BF,0xFF1F},
- {0xA3C0,0xA3C0,0xFF20}, /* A3C0 */
- {0xA3C1,0xA3E1,0xFF21},
- {0xA3C2,0xA3E2,0xFF22},
- {0xA3C3,0xA3E3,0xFF23},
- {0xA3C4,0xA3E4,0xFF24},
- {0xA3C5,0xA3E5,0xFF25},
- {0xA3C6,0xA3E6,0xFF26},
- {0xA3C7,0xA3E7,0xFF27},
- {0xA3C8,0xA3E8,0xFF28},
- {0xA3C9,0xA3E9,0xFF29},
- {0xA3CA,0xA3EA,0xFF2A},
- {0xA3CB,0xA3EB,0xFF2B},
- {0xA3CC,0xA3EC,0xFF2C},
- {0xA3CD,0xA3ED,0xFF2D},
- {0xA3CE,0xA3EE,0xFF2E},
- {0xA3CF,0xA3EF,0xFF2F},
- {0xA3D0,0xA3F0,0xFF30}, /* A3D0 */
- {0xA3D1,0xA3F1,0xFF31},
- {0xA3D2,0xA3F2,0xFF32},
- {0xA3D3,0xA3F3,0xFF33},
- {0xA3D4,0xA3F4,0xFF34},
- {0xA3D5,0xA3F5,0xFF35},
- {0xA3D6,0xA3F6,0xFF36},
- {0xA3D7,0xA3F7,0xFF37},
- {0xA3D8,0xA3F8,0xFF38},
- {0xA3D9,0xA3F9,0xFF39},
- {0xA3DA,0xA3FA,0xFF3A},
- {0xA3DB,0xA3DB,0xFF3B},
- {0xA3DC,0xA3DC,0xFF3C},
- {0xA3DD,0xA3DD,0xFF3D},
- {0xA3DE,0xA3DE,0xFF3E},
- {0xA3DF,0xA3DF,0xFF3F},
- {0xA3E0,0xA3E0,0xFF40}, /* A3E0 */
- {0xA3C1,0xA3E1,0xFF41},
- {0xA3C2,0xA3E2,0xFF42},
- {0xA3C3,0xA3E3,0xFF43},
- {0xA3C4,0xA3E4,0xFF44},
- {0xA3C5,0xA3E5,0xFF45},
- {0xA3C6,0xA3E6,0xFF46},
- {0xA3C7,0xA3E7,0xFF47},
- {0xA3C8,0xA3E8,0xFF48},
- {0xA3C9,0xA3E9,0xFF49},
- {0xA3CA,0xA3EA,0xFF4A},
- {0xA3CB,0xA3EB,0xFF4B},
- {0xA3CC,0xA3EC,0xFF4C},
- {0xA3CD,0xA3ED,0xFF4D},
- {0xA3CE,0xA3EE,0xFF4E},
- {0xA3CF,0xA3EF,0xFF4F},
- {0xA3D0,0xA3F0,0xFF50}, /* A3F0 */
- {0xA3D1,0xA3F1,0xFF51},
- {0xA3D2,0xA3F2,0xFF52},
- {0xA3D3,0xA3F3,0xFF53},
- {0xA3D4,0xA3F4,0xFF54},
- {0xA3D5,0xA3F5,0xFF55},
- {0xA3D6,0xA3F6,0xFF56},
- {0xA3D7,0xA3F7,0xFF57},
- {0xA3D8,0xA3F8,0xFF58},
- {0xA3D9,0xA3F9,0xFF59},
- {0xA3DA,0xA3FA,0xFF5A},
- {0xA3FB,0xA3FB,0xFF5B},
- {0xA3FC,0xA3FC,0xFF5C},
- {0xA3FD,0xA3FD,0xFF5D},
- {0xA3FE,0xA3FE,0xFFE3},
- {0xA3FF,0xA3FF,0xA3FF}
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx00 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx10 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx20 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx30 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx40 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx50 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx60 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx70 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx80 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx90 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0xA3A0,0xA3A0}, /* A3A0 */
+ {0xA3A1,0xA3A1},
+ {0xA3A2,0xA3A2},
+ {0xA3A3,0xA3A3},
+ {0xA3A4,0xA3A4},
+ {0xA3A5,0xA3A5},
+ {0xA3A6,0xA3A6},
+ {0xA3A7,0xA3A7},
+ {0xA3A8,0xA3A8},
+ {0xA3A9,0xA3A9},
+ {0xA3AA,0xA3AA},
+ {0xA3AB,0xA3AB},
+ {0xA3AC,0xA3AC},
+ {0xA3AD,0xA3AD},
+ {0xA3AE,0xA3AE},
+ {0xA3AF,0xA3AF},
+ {0xA3B0,0xA3B0}, /* A3B0 */
+ {0xA3B1,0xA3B1},
+ {0xA3B2,0xA3B2},
+ {0xA3B3,0xA3B3},
+ {0xA3B4,0xA3B4},
+ {0xA3B5,0xA3B5},
+ {0xA3B6,0xA3B6},
+ {0xA3B7,0xA3B7},
+ {0xA3B8,0xA3B8},
+ {0xA3B9,0xA3B9},
+ {0xA3BA,0xA3BA},
+ {0xA3BB,0xA3BB},
+ {0xA3BC,0xA3BC},
+ {0xA3BD,0xA3BD},
+ {0xA3BE,0xA3BE},
+ {0xA3BF,0xA3BF},
+ {0xA3C0,0xA3C0}, /* A3C0 */
+ {0xA3C1,0xA3E1},
+ {0xA3C2,0xA3E2},
+ {0xA3C3,0xA3E3},
+ {0xA3C4,0xA3E4},
+ {0xA3C5,0xA3E5},
+ {0xA3C6,0xA3E6},
+ {0xA3C7,0xA3E7},
+ {0xA3C8,0xA3E8},
+ {0xA3C9,0xA3E9},
+ {0xA3CA,0xA3EA},
+ {0xA3CB,0xA3EB},
+ {0xA3CC,0xA3EC},
+ {0xA3CD,0xA3ED},
+ {0xA3CE,0xA3EE},
+ {0xA3CF,0xA3EF},
+ {0xA3D0,0xA3F0}, /* A3D0 */
+ {0xA3D1,0xA3F1},
+ {0xA3D2,0xA3F2},
+ {0xA3D3,0xA3F3},
+ {0xA3D4,0xA3F4},
+ {0xA3D5,0xA3F5},
+ {0xA3D6,0xA3F6},
+ {0xA3D7,0xA3F7},
+ {0xA3D8,0xA3F8},
+ {0xA3D9,0xA3F9},
+ {0xA3DA,0xA3FA},
+ {0xA3DB,0xA3DB},
+ {0xA3DC,0xA3DC},
+ {0xA3DD,0xA3DD},
+ {0xA3DE,0xA3DE},
+ {0xA3DF,0xA3DF},
+ {0xA3E0,0xA3E0}, /* A3E0 */
+ {0xA3C1,0xA3E1},
+ {0xA3C2,0xA3E2},
+ {0xA3C3,0xA3E3},
+ {0xA3C4,0xA3E4},
+ {0xA3C5,0xA3E5},
+ {0xA3C6,0xA3E6},
+ {0xA3C7,0xA3E7},
+ {0xA3C8,0xA3E8},
+ {0xA3C9,0xA3E9},
+ {0xA3CA,0xA3EA},
+ {0xA3CB,0xA3EB},
+ {0xA3CC,0xA3EC},
+ {0xA3CD,0xA3ED},
+ {0xA3CE,0xA3EE},
+ {0xA3CF,0xA3EF},
+ {0xA3D0,0xA3F0}, /* A3F0 */
+ {0xA3D1,0xA3F1},
+ {0xA3D2,0xA3F2},
+ {0xA3D3,0xA3F3},
+ {0xA3D4,0xA3F4},
+ {0xA3D5,0xA3F5},
+ {0xA3D6,0xA3F6},
+ {0xA3D7,0xA3F7},
+ {0xA3D8,0xA3F8},
+ {0xA3D9,0xA3F9},
+ {0xA3DA,0xA3FA},
+ {0xA3FB,0xA3FB},
+ {0xA3FC,0xA3FC},
+ {0xA3FD,0xA3FD},
+ {0xA3FE,0xA3FE},
+ {0xA3FF,0xA3FF}
};
-static MY_UNICASE_CHARACTER cA6[256]=
+static const MY_CASEFOLD_CHARACTER cA6[256]=
{
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx40 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx50 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx60 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx70 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx80 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx90 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0xA6A0,0xA6A0,0xA6A0}, /* A6A0 */
- {0xA6A1,0xA6C1,0x0391},
- {0xA6A2,0xA6C2,0x0392},
- {0xA6A3,0xA6C3,0x0393},
- {0xA6A4,0xA6C4,0x0394},
- {0xA6A5,0xA6C5,0x0395},
- {0xA6A6,0xA6C6,0x0396},
- {0xA6A7,0xA6C7,0x0397},
- {0xA6A8,0xA6C8,0x0398},
- {0xA6A9,0xA6C9,0x0399},
- {0xA6AA,0xA6CA,0x039A},
- {0xA6AB,0xA6CB,0x039B},
- {0xA6AC,0xA6CC,0x039C},
- {0xA6AD,0xA6CD,0x039D},
- {0xA6AE,0xA6CE,0x039E},
- {0xA6AF,0xA6CF,0x039F},
- {0xA6B0,0xA6D0,0x03A0}, /* A6B0 */
- {0xA6B1,0xA6D1,0x03A1},
- {0xA6B2,0xA6D2,0x03A3},
- {0xA6B3,0xA6D3,0x03A4},
- {0xA6B4,0xA6D4,0x03A5},
- {0xA6B5,0xA6D5,0x03A6},
- {0xA6B6,0xA6D6,0x03A7},
- {0xA6B7,0xA6D7,0x03A8},
- {0xA6B8,0xA6D8,0x03A9},
- {0xA6B9,0xA6B9,0x003F},
- {0xA6BA,0xA6BA,0x003F},
- {0xA6BB,0xA6BB,0x003F},
- {0xA6BC,0xA6BC,0x003F},
- {0xA6BD,0xA6BD,0x003F},
- {0xA6BE,0xA6BE,0x003F},
- {0xA6BF,0xA6BF,0x003F},
- {0xA6C0,0xA6C0,0x003F}, /* A6C0 */
- {0xA6A1,0xA6C1,0x03B1},
- {0xA6A2,0xA6C2,0x03B2},
- {0xA6A3,0xA6C3,0x03B3},
- {0xA6A4,0xA6C4,0x03B4},
- {0xA6A5,0xA6C5,0x03B5},
- {0xA6A6,0xA6C6,0x03B6},
- {0xA6A7,0xA6C7,0x03B7},
- {0xA6A8,0xA6C8,0x03B8},
- {0xA6A9,0xA6C9,0x03B9},
- {0xA6AA,0xA6CA,0x03BA},
- {0xA6AB,0xA6CB,0x03BB},
- {0xA6AC,0xA6CC,0x03BC},
- {0xA6AD,0xA6CD,0x03BD},
- {0xA6AE,0xA6CE,0x03BE},
- {0xA6AF,0xA6CF,0x03BF},
- {0xA6B0,0xA6D0,0x03C0}, /* A6D0 */
- {0xA6B1,0xA6D1,0x03C1},
- {0xA6B2,0xA6D2,0x03C3},
- {0xA6B3,0xA6D3,0x03C4},
- {0xA6B4,0xA6D4,0x03C5},
- {0xA6B5,0xA6D5,0x03C6},
- {0xA6B6,0xA6D6,0x03C7},
- {0xA6B7,0xA6D7,0x03C8},
- {0xA6B8,0xA6D8,0x03C9},
- {0xA6D9,0xA6D9,0x003F},
- {0xA6DA,0xA6DA,0x003F},
- {0xA6DB,0xA6DB,0x003F},
- {0xA6DC,0xA6DC,0x003F},
- {0xA6DD,0xA6DD,0x003F},
- {0xA6DE,0xA6DE,0x003F},
- {0xA6DF,0xA6DF,0x003F},
- {0xA6E0,0xA6E0,0x003F}, /* A6E0 */
- {0xA6E1,0xA6E1,0x003F},
- {0xA6E2,0xA6E2,0x003F},
- {0xA6E3,0xA6E3,0x003F},
- {0xA6E4,0xA6E4,0x003F},
- {0xA6E5,0xA6E5,0x003F},
- {0xA6E6,0xA6E6,0x003F},
- {0xA6E7,0xA6E7,0x003F},
- {0xA6E8,0xA6E8,0x003F},
- {0xA6E9,0xA6E9,0x003F},
- {0xA6EA,0xA6EA,0x003F},
- {0xA6EB,0xA6EB,0x003F},
- {0xA6EC,0xA6EC,0x003F},
- {0xA6ED,0xA6ED,0x003F},
- {0xA6EE,0xA6EE,0x003F},
- {0xA6EF,0xA6EF,0x003F},
- {0xA6F0,0xA6F0,0x003F}, /* A6F0 */
- {0xA6F1,0xA6F1,0x003F},
- {0xA6F2,0xA6F2,0x003F},
- {0xA6F3,0xA6F3,0x003F},
- {0xA6F4,0xA6F4,0x003F},
- {0xA6F5,0xA6F5,0x003F},
- {0xA6F6,0xA6F6,0x003F},
- {0xA6F7,0xA6F7,0x003F},
- {0xA6F8,0xA6F8,0x003F},
- {0xA6F9,0xA6F9,0x003F},
- {0xA6FA,0xA6FA,0x003F},
- {0xA6FB,0xA6FB,0x003F},
- {0xA6FC,0xA6FC,0x003F},
- {0xA6FD,0xA6FD,0x003F},
- {0xA6FE,0xA6FE,0x003F},
- {0xA6FF,0xA6FF,0xA6FF}
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx00 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx10 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx20 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx30 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx40 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx50 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx60 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx70 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx80 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx90 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0xA6A0,0xA6A0}, /* A6A0 */
+ {0xA6A1,0xA6C1},
+ {0xA6A2,0xA6C2},
+ {0xA6A3,0xA6C3},
+ {0xA6A4,0xA6C4},
+ {0xA6A5,0xA6C5},
+ {0xA6A6,0xA6C6},
+ {0xA6A7,0xA6C7},
+ {0xA6A8,0xA6C8},
+ {0xA6A9,0xA6C9},
+ {0xA6AA,0xA6CA},
+ {0xA6AB,0xA6CB},
+ {0xA6AC,0xA6CC},
+ {0xA6AD,0xA6CD},
+ {0xA6AE,0xA6CE},
+ {0xA6AF,0xA6CF},
+ {0xA6B0,0xA6D0}, /* A6B0 */
+ {0xA6B1,0xA6D1},
+ {0xA6B2,0xA6D2},
+ {0xA6B3,0xA6D3},
+ {0xA6B4,0xA6D4},
+ {0xA6B5,0xA6D5},
+ {0xA6B6,0xA6D6},
+ {0xA6B7,0xA6D7},
+ {0xA6B8,0xA6D8},
+ {0xA6B9,0xA6B9},
+ {0xA6BA,0xA6BA},
+ {0xA6BB,0xA6BB},
+ {0xA6BC,0xA6BC},
+ {0xA6BD,0xA6BD},
+ {0xA6BE,0xA6BE},
+ {0xA6BF,0xA6BF},
+ {0xA6C0,0xA6C0}, /* A6C0 */
+ {0xA6A1,0xA6C1},
+ {0xA6A2,0xA6C2},
+ {0xA6A3,0xA6C3},
+ {0xA6A4,0xA6C4},
+ {0xA6A5,0xA6C5},
+ {0xA6A6,0xA6C6},
+ {0xA6A7,0xA6C7},
+ {0xA6A8,0xA6C8},
+ {0xA6A9,0xA6C9},
+ {0xA6AA,0xA6CA},
+ {0xA6AB,0xA6CB},
+ {0xA6AC,0xA6CC},
+ {0xA6AD,0xA6CD},
+ {0xA6AE,0xA6CE},
+ {0xA6AF,0xA6CF},
+ {0xA6B0,0xA6D0}, /* A6D0 */
+ {0xA6B1,0xA6D1},
+ {0xA6B2,0xA6D2},
+ {0xA6B3,0xA6D3},
+ {0xA6B4,0xA6D4},
+ {0xA6B5,0xA6D5},
+ {0xA6B6,0xA6D6},
+ {0xA6B7,0xA6D7},
+ {0xA6B8,0xA6D8},
+ {0xA6D9,0xA6D9},
+ {0xA6DA,0xA6DA},
+ {0xA6DB,0xA6DB},
+ {0xA6DC,0xA6DC},
+ {0xA6DD,0xA6DD},
+ {0xA6DE,0xA6DE},
+ {0xA6DF,0xA6DF},
+ {0xA6E0,0xA6E0}, /* A6E0 */
+ {0xA6E1,0xA6E1},
+ {0xA6E2,0xA6E2},
+ {0xA6E3,0xA6E3},
+ {0xA6E4,0xA6E4},
+ {0xA6E5,0xA6E5},
+ {0xA6E6,0xA6E6},
+ {0xA6E7,0xA6E7},
+ {0xA6E8,0xA6E8},
+ {0xA6E9,0xA6E9},
+ {0xA6EA,0xA6EA},
+ {0xA6EB,0xA6EB},
+ {0xA6EC,0xA6EC},
+ {0xA6ED,0xA6ED},
+ {0xA6EE,0xA6EE},
+ {0xA6EF,0xA6EF},
+ {0xA6F0,0xA6F0}, /* A6F0 */
+ {0xA6F1,0xA6F1},
+ {0xA6F2,0xA6F2},
+ {0xA6F3,0xA6F3},
+ {0xA6F4,0xA6F4},
+ {0xA6F5,0xA6F5},
+ {0xA6F6,0xA6F6},
+ {0xA6F7,0xA6F7},
+ {0xA6F8,0xA6F8},
+ {0xA6F9,0xA6F9},
+ {0xA6FA,0xA6FA},
+ {0xA6FB,0xA6FB},
+ {0xA6FC,0xA6FC},
+ {0xA6FD,0xA6FD},
+ {0xA6FE,0xA6FE},
+ {0xA6FF,0xA6FF}
};
-static MY_UNICASE_CHARACTER cA7[256]=
+static const MY_CASEFOLD_CHARACTER cA7[256]=
{
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx40 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx50 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx60 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx70 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx80 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx90 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0xA7A0,0xA7A0,0xA7A0}, /* A7A0 */
- {0xA7A1,0xA7D1,0x0410},
- {0xA7A2,0xA7D2,0x0411},
- {0xA7A3,0xA7D3,0x0412},
- {0xA7A4,0xA7D4,0x0413},
- {0xA7A5,0xA7D5,0x0414},
- {0xA7A6,0xA7D6,0x0415},
- {0xA7A7,0xA7D7,0x0401},
- {0xA7A8,0xA7D8,0x0416},
- {0xA7A9,0xA7D9,0x0417},
- {0xA7AA,0xA7DA,0x0418},
- {0xA7AB,0xA7DB,0x0419},
- {0xA7AC,0xA7DC,0x041A},
- {0xA7AD,0xA7DD,0x041B},
- {0xA7AE,0xA7DE,0x041C},
- {0xA7AF,0xA7DF,0x041D},
- {0xA7B0,0xA7E0,0x041E}, /* A7B0 */
- {0xA7B1,0xA7E1,0x041F},
- {0xA7B2,0xA7E2,0x0420},
- {0xA7B3,0xA7E3,0x0421},
- {0xA7B4,0xA7E4,0x0422},
- {0xA7B5,0xA7E5,0x0423},
- {0xA7B6,0xA7E6,0x0424},
- {0xA7B7,0xA7E7,0x0425},
- {0xA7B8,0xA7E8,0x0426},
- {0xA7B9,0xA7E9,0x0427},
- {0xA7BA,0xA7EA,0x0428},
- {0xA7BB,0xA7EB,0x0429},
- {0xA7BC,0xA7EC,0x042A},
- {0xA7BD,0xA7ED,0x042B},
- {0xA7BE,0xA7EE,0x042C},
- {0xA7BF,0xA7EF,0x042D},
- {0xA7C0,0xA7F0,0x042E}, /* A7C0 */
- {0xA7C1,0xA7F1,0x042F},
- {0xA7C2,0xA7C2,0x003F},
- {0xA7C3,0xA7C3,0x003F},
- {0xA7C4,0xA7C4,0x003F},
- {0xA7C5,0xA7C5,0x003F},
- {0xA7C6,0xA7C6,0x003F},
- {0xA7C7,0xA7C7,0x003F},
- {0xA7C8,0xA7C8,0x003F},
- {0xA7C9,0xA7C9,0x003F},
- {0xA7CA,0xA7CA,0x003F},
- {0xA7CB,0xA7CB,0x003F},
- {0xA7CC,0xA7CC,0x003F},
- {0xA7CD,0xA7CD,0x003F},
- {0xA7CE,0xA7CE,0x003F},
- {0xA7CF,0xA7CF,0x003F},
- {0xA7D0,0xA7D0,0x003F}, /* A7D0 */
- {0xA7A1,0xA7D1,0x0430},
- {0xA7A2,0xA7D2,0x0431},
- {0xA7A3,0xA7D3,0x0432},
- {0xA7A4,0xA7D4,0x0433},
- {0xA7A5,0xA7D5,0x0434},
- {0xA7A6,0xA7D6,0x0435},
- {0xA7A7,0xA7D7,0x0451},
- {0xA7A8,0xA7D8,0x0436},
- {0xA7A9,0xA7D9,0x0437},
- {0xA7AA,0xA7DA,0x0438},
- {0xA7AB,0xA7DB,0x0439},
- {0xA7AC,0xA7DC,0x043A},
- {0xA7AD,0xA7DD,0x043B},
- {0xA7AE,0xA7DE,0x043C},
- {0xA7AF,0xA7DF,0x043D},
- {0xA7B0,0xA7E0,0x043E}, /* A7E0 */
- {0xA7B1,0xA7E1,0x043F},
- {0xA7B2,0xA7E2,0x0440},
- {0xA7B3,0xA7E3,0x0441},
- {0xA7B4,0xA7E4,0x0442},
- {0xA7B5,0xA7E5,0x0443},
- {0xA7B6,0xA7E6,0x0444},
- {0xA7B7,0xA7E7,0x0445},
- {0xA7B8,0xA7E8,0x0446},
- {0xA7B9,0xA7E9,0x0447},
- {0xA7BA,0xA7EA,0x0448},
- {0xA7BB,0xA7EB,0x0449},
- {0xA7BC,0xA7EC,0x044A},
- {0xA7BD,0xA7ED,0x044B},
- {0xA7BE,0xA7EE,0x044C},
- {0xA7BF,0xA7EF,0x044D},
- {0xA7C0,0xA7F0,0x044E}, /* A7F0 */
- {0xA7C1,0xA7F1,0x044F},
- {0xA7F2,0xA7F2,0x003F},
- {0xA7F3,0xA7F3,0x003F},
- {0xA7F4,0xA7F4,0x003F},
- {0xA7F5,0xA7F5,0x003F},
- {0xA7F6,0xA7F6,0x003F},
- {0xA7F7,0xA7F7,0x003F},
- {0xA7F8,0xA7F8,0x003F},
- {0xA7F9,0xA7F9,0x003F},
- {0xA7FA,0xA7FA,0x003F},
- {0xA7FB,0xA7FB,0x003F},
- {0xA7FC,0xA7FC,0x003F},
- {0xA7FD,0xA7FD,0x003F},
- {0xA7FE,0xA7FE,0x003F},
- {0xA7FF,0xA7FF,0xA7FF}
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx00 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx10 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx20 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx30 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx40 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx50 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx60 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx70 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx80 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx90 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0xA7A0,0xA7A0}, /* A7A0 */
+ {0xA7A1,0xA7D1},
+ {0xA7A2,0xA7D2},
+ {0xA7A3,0xA7D3},
+ {0xA7A4,0xA7D4},
+ {0xA7A5,0xA7D5},
+ {0xA7A6,0xA7D6},
+ {0xA7A7,0xA7D7},
+ {0xA7A8,0xA7D8},
+ {0xA7A9,0xA7D9},
+ {0xA7AA,0xA7DA},
+ {0xA7AB,0xA7DB},
+ {0xA7AC,0xA7DC},
+ {0xA7AD,0xA7DD},
+ {0xA7AE,0xA7DE},
+ {0xA7AF,0xA7DF},
+ {0xA7B0,0xA7E0}, /* A7B0 */
+ {0xA7B1,0xA7E1},
+ {0xA7B2,0xA7E2},
+ {0xA7B3,0xA7E3},
+ {0xA7B4,0xA7E4},
+ {0xA7B5,0xA7E5},
+ {0xA7B6,0xA7E6},
+ {0xA7B7,0xA7E7},
+ {0xA7B8,0xA7E8},
+ {0xA7B9,0xA7E9},
+ {0xA7BA,0xA7EA},
+ {0xA7BB,0xA7EB},
+ {0xA7BC,0xA7EC},
+ {0xA7BD,0xA7ED},
+ {0xA7BE,0xA7EE},
+ {0xA7BF,0xA7EF},
+ {0xA7C0,0xA7F0}, /* A7C0 */
+ {0xA7C1,0xA7F1},
+ {0xA7C2,0xA7C2},
+ {0xA7C3,0xA7C3},
+ {0xA7C4,0xA7C4},
+ {0xA7C5,0xA7C5},
+ {0xA7C6,0xA7C6},
+ {0xA7C7,0xA7C7},
+ {0xA7C8,0xA7C8},
+ {0xA7C9,0xA7C9},
+ {0xA7CA,0xA7CA},
+ {0xA7CB,0xA7CB},
+ {0xA7CC,0xA7CC},
+ {0xA7CD,0xA7CD},
+ {0xA7CE,0xA7CE},
+ {0xA7CF,0xA7CF},
+ {0xA7D0,0xA7D0}, /* A7D0 */
+ {0xA7A1,0xA7D1},
+ {0xA7A2,0xA7D2},
+ {0xA7A3,0xA7D3},
+ {0xA7A4,0xA7D4},
+ {0xA7A5,0xA7D5},
+ {0xA7A6,0xA7D6},
+ {0xA7A7,0xA7D7},
+ {0xA7A8,0xA7D8},
+ {0xA7A9,0xA7D9},
+ {0xA7AA,0xA7DA},
+ {0xA7AB,0xA7DB},
+ {0xA7AC,0xA7DC},
+ {0xA7AD,0xA7DD},
+ {0xA7AE,0xA7DE},
+ {0xA7AF,0xA7DF},
+ {0xA7B0,0xA7E0}, /* A7E0 */
+ {0xA7B1,0xA7E1},
+ {0xA7B2,0xA7E2},
+ {0xA7B3,0xA7E3},
+ {0xA7B4,0xA7E4},
+ {0xA7B5,0xA7E5},
+ {0xA7B6,0xA7E6},
+ {0xA7B7,0xA7E7},
+ {0xA7B8,0xA7E8},
+ {0xA7B9,0xA7E9},
+ {0xA7BA,0xA7EA},
+ {0xA7BB,0xA7EB},
+ {0xA7BC,0xA7EC},
+ {0xA7BD,0xA7ED},
+ {0xA7BE,0xA7EE},
+ {0xA7BF,0xA7EF},
+ {0xA7C0,0xA7F0}, /* A7F0 */
+ {0xA7C1,0xA7F1},
+ {0xA7F2,0xA7F2},
+ {0xA7F3,0xA7F3},
+ {0xA7F4,0xA7F4},
+ {0xA7F5,0xA7F5},
+ {0xA7F6,0xA7F6},
+ {0xA7F7,0xA7F7},
+ {0xA7F8,0xA7F8},
+ {0xA7F9,0xA7F9},
+ {0xA7FA,0xA7FA},
+ {0xA7FB,0xA7FB},
+ {0xA7FC,0xA7FC},
+ {0xA7FD,0xA7FD},
+ {0xA7FE,0xA7FE},
+ {0xA7FF,0xA7FF}
};
-static MY_UNICASE_CHARACTER cA8[256]=
+static const MY_CASEFOLD_CHARACTER cA8[256]=
{
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx40 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx50 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx60 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx70 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx80 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx90 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0xA8A0,0xA8A0,0xA8A0}, /* A8A0 */
- {0xA8A1,0xA8A1,0x0101},
- {0xA8A2,0xA8A2,0x00E1},
- {0xA8A3,0xA8A3,0x01CE},
- {0xA8A4,0xA8A4,0x00E0},
- {0xA8A5,0xA8A5,0x0113},
- {0xA8A6,0xA8A6,0x00E9},
- {0xA8A7,0xA8A7,0x011B},
- {0xA8A8,0xA8A8,0x00E8},
- {0xA8A9,0xA8A9,0x012B},
- {0xA8AA,0xA8AA,0x00ED},
- {0xA8AB,0xA8AB,0x01D0},
- {0xA8AC,0xA8AC,0x00EC},
- {0xA8AD,0xA8AD,0x014D},
- {0xA8AE,0xA8AE,0x00F3},
- {0xA8AF,0xA8AF,0x01D2},
- {0xA8B0,0xA8B0,0x00F2}, /* A8B0 */
- {0xA8B1,0xA8B1,0x016B},
- {0xA8B2,0xA8B2,0x00FA},
- {0xA8B3,0xA8B3,0x01D4},
- {0xA8B4,0xA8B4,0x00F9},
- {0xA8B5,0xA8B5,0x01D6},
- {0xA8B6,0xA8B6,0x01D8},
- {0xA8B7,0xA8B7,0x01DA},
- {0xA8B8,0xA8B8,0x01DC},
- {0xA8B9,0xA8B9,0x00FC},
- {0xA8BA,0xA8BA,0x00EA},
- {0xA8BB,0xA8BB,0x003F},
- {0xA8BC,0xA8BC,0x003F},
- {0xA8BD,0xA8BD,0x003F},
- {0xA8BE,0xA8BE,0x003F},
- {0xA8BF,0xA8BF,0x003F},
- {0xA8C0,0xA8C0,0x003F}, /* A8C0 */
- {0xA8C1,0xA8C1,0x003F},
- {0xA8C2,0xA8C2,0x003F},
- {0xA8C3,0xA8C3,0x003F},
- {0xA8C4,0xA8C4,0x003F},
- {0xA8C5,0xA8C5,0x3105},
- {0xA8C6,0xA8C6,0x3106},
- {0xA8C7,0xA8C7,0x3107},
- {0xA8C8,0xA8C8,0x3108},
- {0xA8C9,0xA8C9,0x3109},
- {0xA8CA,0xA8CA,0x310A},
- {0xA8CB,0xA8CB,0x310B},
- {0xA8CC,0xA8CC,0x310C},
- {0xA8CD,0xA8CD,0x310D},
- {0xA8CE,0xA8CE,0x310E},
- {0xA8CF,0xA8CF,0x310F},
- {0xA8D0,0xA8D0,0x3110}, /* A8D0 */
- {0xA8D1,0xA8D1,0x3111},
- {0xA8D2,0xA8D2,0x3112},
- {0xA8D3,0xA8D3,0x3113},
- {0xA8D4,0xA8D4,0x3114},
- {0xA8D5,0xA8D5,0x3115},
- {0xA8D6,0xA8D6,0x3116},
- {0xA8D7,0xA8D7,0x3117},
- {0xA8D8,0xA8D8,0x3118},
- {0xA8D9,0xA8D9,0x3119},
- {0xA8DA,0xA8DA,0x311A},
- {0xA8DB,0xA8DB,0x311B},
- {0xA8DC,0xA8DC,0x311C},
- {0xA8DD,0xA8DD,0x311D},
- {0xA8DE,0xA8DE,0x311E},
- {0xA8DF,0xA8DF,0x311F},
- {0xA8E0,0xA8E0,0x3120}, /* A8E0 */
- {0xA8E1,0xA8E1,0x3121},
- {0xA8E2,0xA8E2,0x3122},
- {0xA8E3,0xA8E3,0x3123},
- {0xA8E4,0xA8E4,0x3124},
- {0xA8E5,0xA8E5,0x3125},
- {0xA8E6,0xA8E6,0x3126},
- {0xA8E7,0xA8E7,0x3127},
- {0xA8E8,0xA8E8,0x3128},
- {0xA8E9,0xA8E9,0x3129},
- {0xA8EA,0xA8EA,0x003F},
- {0xA8EB,0xA8EB,0x003F},
- {0xA8EC,0xA8EC,0x003F},
- {0xA8ED,0xA8ED,0x003F},
- {0xA8EE,0xA8EE,0x003F},
- {0xA8EF,0xA8EF,0x003F},
- {0xA8F0,0xA8F0,0x003F}, /* A8F0 */
- {0xA8F1,0xA8F1,0x003F},
- {0xA8F2,0xA8F2,0x003F},
- {0xA8F3,0xA8F3,0x003F},
- {0xA8F4,0xA8F4,0x003F},
- {0xA8F5,0xA8F5,0x003F},
- {0xA8F6,0xA8F6,0x003F},
- {0xA8F7,0xA8F7,0x003F},
- {0xA8F8,0xA8F8,0x003F},
- {0xA8F9,0xA8F9,0x003F},
- {0xA8FA,0xA8FA,0x003F},
- {0xA8FB,0xA8FB,0x003F},
- {0xA8FC,0xA8FC,0x003F},
- {0xA8FD,0xA8FD,0x003F},
- {0xA8FE,0xA8FE,0x003F},
- {0xA8FF,0xA8FF,0xA8FF}
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx00 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx10 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx20 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx30 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx40 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx50 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx60 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx70 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx80 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx90 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0xA8A0,0xA8A0}, /* A8A0 */
+ {0xA8A1,0xA8A1},
+ {0xA8A2,0xA8A2},
+ {0xA8A3,0xA8A3},
+ {0xA8A4,0xA8A4},
+ {0xA8A5,0xA8A5},
+ {0xA8A6,0xA8A6},
+ {0xA8A7,0xA8A7},
+ {0xA8A8,0xA8A8},
+ {0xA8A9,0xA8A9},
+ {0xA8AA,0xA8AA},
+ {0xA8AB,0xA8AB},
+ {0xA8AC,0xA8AC},
+ {0xA8AD,0xA8AD},
+ {0xA8AE,0xA8AE},
+ {0xA8AF,0xA8AF},
+ {0xA8B0,0xA8B0}, /* A8B0 */
+ {0xA8B1,0xA8B1},
+ {0xA8B2,0xA8B2},
+ {0xA8B3,0xA8B3},
+ {0xA8B4,0xA8B4},
+ {0xA8B5,0xA8B5},
+ {0xA8B6,0xA8B6},
+ {0xA8B7,0xA8B7},
+ {0xA8B8,0xA8B8},
+ {0xA8B9,0xA8B9},
+ {0xA8BA,0xA8BA},
+ {0xA8BB,0xA8BB},
+ {0xA8BC,0xA8BC},
+ {0xA8BD,0xA8BD},
+ {0xA8BE,0xA8BE},
+ {0xA8BF,0xA8BF},
+ {0xA8C0,0xA8C0}, /* A8C0 */
+ {0xA8C1,0xA8C1},
+ {0xA8C2,0xA8C2},
+ {0xA8C3,0xA8C3},
+ {0xA8C4,0xA8C4},
+ {0xA8C5,0xA8C5},
+ {0xA8C6,0xA8C6},
+ {0xA8C7,0xA8C7},
+ {0xA8C8,0xA8C8},
+ {0xA8C9,0xA8C9},
+ {0xA8CA,0xA8CA},
+ {0xA8CB,0xA8CB},
+ {0xA8CC,0xA8CC},
+ {0xA8CD,0xA8CD},
+ {0xA8CE,0xA8CE},
+ {0xA8CF,0xA8CF},
+ {0xA8D0,0xA8D0}, /* A8D0 */
+ {0xA8D1,0xA8D1},
+ {0xA8D2,0xA8D2},
+ {0xA8D3,0xA8D3},
+ {0xA8D4,0xA8D4},
+ {0xA8D5,0xA8D5},
+ {0xA8D6,0xA8D6},
+ {0xA8D7,0xA8D7},
+ {0xA8D8,0xA8D8},
+ {0xA8D9,0xA8D9},
+ {0xA8DA,0xA8DA},
+ {0xA8DB,0xA8DB},
+ {0xA8DC,0xA8DC},
+ {0xA8DD,0xA8DD},
+ {0xA8DE,0xA8DE},
+ {0xA8DF,0xA8DF},
+ {0xA8E0,0xA8E0}, /* A8E0 */
+ {0xA8E1,0xA8E1},
+ {0xA8E2,0xA8E2},
+ {0xA8E3,0xA8E3},
+ {0xA8E4,0xA8E4},
+ {0xA8E5,0xA8E5},
+ {0xA8E6,0xA8E6},
+ {0xA8E7,0xA8E7},
+ {0xA8E8,0xA8E8},
+ {0xA8E9,0xA8E9},
+ {0xA8EA,0xA8EA},
+ {0xA8EB,0xA8EB},
+ {0xA8EC,0xA8EC},
+ {0xA8ED,0xA8ED},
+ {0xA8EE,0xA8EE},
+ {0xA8EF,0xA8EF},
+ {0xA8F0,0xA8F0}, /* A8F0 */
+ {0xA8F1,0xA8F1},
+ {0xA8F2,0xA8F2},
+ {0xA8F3,0xA8F3},
+ {0xA8F4,0xA8F4},
+ {0xA8F5,0xA8F5},
+ {0xA8F6,0xA8F6},
+ {0xA8F7,0xA8F7},
+ {0xA8F8,0xA8F8},
+ {0xA8F9,0xA8F9},
+ {0xA8FA,0xA8FA},
+ {0xA8FB,0xA8FB},
+ {0xA8FC,0xA8FC},
+ {0xA8FD,0xA8FD},
+ {0xA8FE,0xA8FE},
+ {0xA8FF,0xA8FF}
};
-static MY_UNICASE_CHARACTER *my_caseinfo_pages_gb2312[256]=
+static const MY_CASEFOLD_CHARACTER *my_casefold_pages_gb2312[256]=
{
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 0 */
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
@@ -819,10 +819,11 @@ static MY_UNICASE_CHARACTER *my_caseinfo_pages_gb2312[256]=
};
-static MY_UNICASE_INFO my_caseinfo_gb2312=
+static MY_CASEFOLD_INFO my_casefold_gb2312=
{
0xFFFF,
- my_caseinfo_pages_gb2312
+ my_casefold_pages_gb2312,
+ NULL /* ws */
};
@@ -6378,7 +6379,9 @@ static MY_COLLATION_HANDLER my_collation_handler_gb2312_chinese_ci=
my_hash_sort_simple,
my_propagate_simple,
my_min_str_mb_simple,
- my_max_str_mb_simple
+ my_max_str_mb_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
@@ -6397,7 +6400,9 @@ static MY_COLLATION_HANDLER my_collation_handler_gb2312_bin=
my_hash_sort_mb_bin,
my_propagate_simple,
my_min_str_mb_simple,
- my_max_str_mb_simple
+ my_max_str_mb_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
@@ -6416,7 +6421,9 @@ static MY_COLLATION_HANDLER my_collation_handler_gb2312_chinese_nopad_ci=
my_hash_sort_simple_nopad,
my_propagate_simple,
my_min_str_mb_simple_nopad,
- my_max_str_mb_simple
+ my_max_str_mb_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
@@ -6435,7 +6442,9 @@ static MY_COLLATION_HANDLER my_collation_handler_gb2312_nopad_bin=
my_hash_sort_mb_nopad_bin,
my_propagate_simple,
my_min_str_mb_simple_nopad,
- my_max_str_mb_simple
+ my_max_str_mb_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
@@ -6469,7 +6478,9 @@ static MY_CHARSET_HANDLER my_charset_handler=
my_well_formed_char_length_gb2312,
my_copy_fix_mb,
my_native_to_mb_gb2312,
- my_wc_to_printable_generic
+ my_wc_to_printable_generic,
+ my_casefold_multiply_1,
+ my_casefold_multiply_1
};
@@ -6488,19 +6499,17 @@ struct charset_info_st my_charset_gb2312_chinese_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_caseinfo_gb2312,/* caseinfo */
+ &my_casefold_gb2312,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
2, /* mbmaxlen */
0, /* min_sort_char */
0xF7FE, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_handler,
&my_collation_handler_gb2312_chinese_ci
};
@@ -6521,19 +6530,17 @@ struct charset_info_st my_charset_gb2312_bin=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_caseinfo_gb2312,/* caseinfo */
+ &my_casefold_gb2312,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
2, /* mbmaxlen */
0, /* min_sort_char */
0xF7FE, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_handler,
&my_collation_handler_gb2312_bin
};
@@ -6554,19 +6561,17 @@ struct charset_info_st my_charset_gb2312_chinese_nopad_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_caseinfo_gb2312,/* caseinfo */
+ &my_casefold_gb2312,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
2, /* mbmaxlen */
0, /* min_sort_char */
0xF7FE, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_handler,
&my_collation_handler_gb2312_chinese_nopad_ci
};
@@ -6587,19 +6592,17 @@ struct charset_info_st my_charset_gb2312_nopad_bin=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_caseinfo_gb2312,/* caseinfo */
+ &my_casefold_gb2312,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
2, /* mbmaxlen */
0, /* min_sort_char */
0xF7FE, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_handler,
&my_collation_handler_gb2312_nopad_bin
};
diff --git a/strings/ctype-gbk.c b/strings/ctype-gbk.c
index 2e72d5bd7a4..a22e6aa8d84 100644
--- a/strings/ctype-gbk.c
+++ b/strings/ctype-gbk.c
@@ -147,826 +147,826 @@ static const uchar to_upper_gbk[]=
};
-static MY_UNICASE_CHARACTER cA2[256]=
+static const MY_CASEFOLD_CHARACTER cA2[256]=
{
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0xA240,0xA240,0x003F}, /* A240 */
- {0xA241,0xA241,0x003F},
- {0xA242,0xA242,0x003F},
- {0xA243,0xA243,0x003F},
- {0xA244,0xA244,0x003F},
- {0xA245,0xA245,0x003F},
- {0xA246,0xA246,0x003F},
- {0xA247,0xA247,0x003F},
- {0xA248,0xA248,0x003F},
- {0xA249,0xA249,0x003F},
- {0xA24A,0xA24A,0x003F},
- {0xA24B,0xA24B,0x003F},
- {0xA24C,0xA24C,0x003F},
- {0xA24D,0xA24D,0x003F},
- {0xA24E,0xA24E,0x003F},
- {0xA24F,0xA24F,0x003F},
- {0xA250,0xA250,0x003F}, /* A250 */
- {0xA251,0xA251,0x003F},
- {0xA252,0xA252,0x003F},
- {0xA253,0xA253,0x003F},
- {0xA254,0xA254,0x003F},
- {0xA255,0xA255,0x003F},
- {0xA256,0xA256,0x003F},
- {0xA257,0xA257,0x003F},
- {0xA258,0xA258,0x003F},
- {0xA259,0xA259,0x003F},
- {0xA25A,0xA25A,0x003F},
- {0xA25B,0xA25B,0x003F},
- {0xA25C,0xA25C,0x003F},
- {0xA25D,0xA25D,0x003F},
- {0xA25E,0xA25E,0x003F},
- {0xA25F,0xA25F,0x003F},
- {0xA260,0xA260,0x003F}, /* A260 */
- {0xA261,0xA261,0x003F},
- {0xA262,0xA262,0x003F},
- {0xA263,0xA263,0x003F},
- {0xA264,0xA264,0x003F},
- {0xA265,0xA265,0x003F},
- {0xA266,0xA266,0x003F},
- {0xA267,0xA267,0x003F},
- {0xA268,0xA268,0x003F},
- {0xA269,0xA269,0x003F},
- {0xA26A,0xA26A,0x003F},
- {0xA26B,0xA26B,0x003F},
- {0xA26C,0xA26C,0x003F},
- {0xA26D,0xA26D,0x003F},
- {0xA26E,0xA26E,0x003F},
- {0xA26F,0xA26F,0x003F},
- {0xA270,0xA270,0x003F}, /* A270 */
- {0xA271,0xA271,0x003F},
- {0xA272,0xA272,0x003F},
- {0xA273,0xA273,0x003F},
- {0xA274,0xA274,0x003F},
- {0xA275,0xA275,0x003F},
- {0xA276,0xA276,0x003F},
- {0xA277,0xA277,0x003F},
- {0xA278,0xA278,0x003F},
- {0xA279,0xA279,0x003F},
- {0xA27A,0xA27A,0x003F},
- {0xA27B,0xA27B,0x003F},
- {0xA27C,0xA27C,0x003F},
- {0xA27D,0xA27D,0x003F},
- {0xA27E,0xA27E,0x003F},
- {0xA27F,0xA27F,0xA27F},
- {0xA280,0xA280,0x003F}, /* A280 */
- {0xA281,0xA281,0x003F},
- {0xA282,0xA282,0x003F},
- {0xA283,0xA283,0x003F},
- {0xA284,0xA284,0x003F},
- {0xA285,0xA285,0x003F},
- {0xA286,0xA286,0x003F},
- {0xA287,0xA287,0x003F},
- {0xA288,0xA288,0x003F},
- {0xA289,0xA289,0x003F},
- {0xA28A,0xA28A,0x003F},
- {0xA28B,0xA28B,0x003F},
- {0xA28C,0xA28C,0x003F},
- {0xA28D,0xA28D,0x003F},
- {0xA28E,0xA28E,0x003F},
- {0xA28F,0xA28F,0x003F},
- {0xA290,0xA290,0x003F}, /* A290 */
- {0xA291,0xA291,0x003F},
- {0xA292,0xA292,0x003F},
- {0xA293,0xA293,0x003F},
- {0xA294,0xA294,0x003F},
- {0xA295,0xA295,0x003F},
- {0xA296,0xA296,0x003F},
- {0xA297,0xA297,0x003F},
- {0xA298,0xA298,0x003F},
- {0xA299,0xA299,0x003F},
- {0xA29A,0xA29A,0x003F},
- {0xA29B,0xA29B,0x003F},
- {0xA29C,0xA29C,0x003F},
- {0xA29D,0xA29D,0x003F},
- {0xA29E,0xA29E,0x003F},
- {0xA29F,0xA29F,0x003F},
- {0xA2A0,0xA2A0,0x003F}, /* A2A0 */
- {0xA2F1,0xA2A1,0x2170},
- {0xA2F2,0xA2A2,0x2171},
- {0xA2F3,0xA2A3,0x2172},
- {0xA2F4,0xA2A4,0x2173},
- {0xA2F5,0xA2A5,0x2174},
- {0xA2F6,0xA2A6,0x2175},
- {0xA2F7,0xA2A7,0x2176},
- {0xA2F8,0xA2A8,0x2177},
- {0xA2F9,0xA2A9,0x2178},
- {0xA2FA,0xA2AA,0x2179},
- {0xA2AB,0xA2AB,0x003F},
- {0xA2AC,0xA2AC,0x003F},
- {0xA2AD,0xA2AD,0x003F},
- {0xA2AE,0xA2AE,0x003F},
- {0xA2AF,0xA2AF,0x003F},
- {0xA2B0,0xA2B0,0x003F}, /* A2B0 */
- {0xA2B1,0xA2B1,0x2488},
- {0xA2B2,0xA2B2,0x2489},
- {0xA2B3,0xA2B3,0x248A},
- {0xA2B4,0xA2B4,0x248B},
- {0xA2B5,0xA2B5,0x248C},
- {0xA2B6,0xA2B6,0x248D},
- {0xA2B7,0xA2B7,0x248E},
- {0xA2B8,0xA2B8,0x248F},
- {0xA2B9,0xA2B9,0x2490},
- {0xA2BA,0xA2BA,0x2491},
- {0xA2BB,0xA2BB,0x2492},
- {0xA2BC,0xA2BC,0x2493},
- {0xA2BD,0xA2BD,0x2494},
- {0xA2BE,0xA2BE,0x2495},
- {0xA2BF,0xA2BF,0x2496},
- {0xA2C0,0xA2C0,0x2497}, /* A2C0 */
- {0xA2C1,0xA2C1,0x2498},
- {0xA2C2,0xA2C2,0x2499},
- {0xA2C3,0xA2C3,0x249A},
- {0xA2C4,0xA2C4,0x249B},
- {0xA2C5,0xA2C5,0x2474},
- {0xA2C6,0xA2C6,0x2475},
- {0xA2C7,0xA2C7,0x2476},
- {0xA2C8,0xA2C8,0x2477},
- {0xA2C9,0xA2C9,0x2478},
- {0xA2CA,0xA2CA,0x2479},
- {0xA2CB,0xA2CB,0x247A},
- {0xA2CC,0xA2CC,0x247B},
- {0xA2CD,0xA2CD,0x247C},
- {0xA2CE,0xA2CE,0x247D},
- {0xA2CF,0xA2CF,0x247E},
- {0xA2D0,0xA2D0,0x247F}, /* A2D0 */
- {0xA2D1,0xA2D1,0x2480},
- {0xA2D2,0xA2D2,0x2481},
- {0xA2D3,0xA2D3,0x2482},
- {0xA2D4,0xA2D4,0x2483},
- {0xA2D5,0xA2D5,0x2484},
- {0xA2D6,0xA2D6,0x2485},
- {0xA2D7,0xA2D7,0x2486},
- {0xA2D8,0xA2D8,0x2487},
- {0xA2D9,0xA2D9,0x2460},
- {0xA2DA,0xA2DA,0x2461},
- {0xA2DB,0xA2DB,0x2462},
- {0xA2DC,0xA2DC,0x2463},
- {0xA2DD,0xA2DD,0x2464},
- {0xA2DE,0xA2DE,0x2465},
- {0xA2DF,0xA2DF,0x2466},
- {0xA2E0,0xA2E0,0x2467}, /* A2E0 */
- {0xA2E1,0xA2E1,0x2468},
- {0xA2E2,0xA2E2,0x2469},
- {0xA2E3,0xA2E3,0x003F},
- {0xA2E4,0xA2E4,0x003F},
- {0xA2E5,0xA2E5,0x3220},
- {0xA2E6,0xA2E6,0x3221},
- {0xA2E7,0xA2E7,0x3222},
- {0xA2E8,0xA2E8,0x3223},
- {0xA2E9,0xA2E9,0x3224},
- {0xA2EA,0xA2EA,0x3225},
- {0xA2EB,0xA2EB,0x3226},
- {0xA2EC,0xA2EC,0x3227},
- {0xA2ED,0xA2ED,0x3228},
- {0xA2EE,0xA2EE,0x3229},
- {0xA2EF,0xA2EF,0x003F},
- {0xA2F0,0xA2F0,0x003F}, /* A2F0 */
- {0xA2F1,0xA2A1,0x2160},
- {0xA2F2,0xA2A2,0x2161},
- {0xA2F3,0xA2A3,0x2162},
- {0xA2F4,0xA2A4,0x2163},
- {0xA2F5,0xA2A5,0x2164},
- {0xA2F6,0xA2A6,0x2165},
- {0xA2F7,0xA2A7,0x2166},
- {0xA2F8,0xA2A8,0x2167},
- {0xA2F9,0xA2A9,0x2168},
- {0xA2FA,0xA2AA,0x2169},
- {0xA2FB,0xA2FB,0x216A},
- {0xA2FC,0xA2FC,0x216B},
- {0xA2FD,0xA2FD,0x003F},
- {0xA2FE,0xA2FE,0x003F},
- {0xA2FF,0xA2FF,0xA2FF}
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx00 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx10 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx20 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx30 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0xA240,0xA240}, /* A240 */
+ {0xA241,0xA241},
+ {0xA242,0xA242},
+ {0xA243,0xA243},
+ {0xA244,0xA244},
+ {0xA245,0xA245},
+ {0xA246,0xA246},
+ {0xA247,0xA247},
+ {0xA248,0xA248},
+ {0xA249,0xA249},
+ {0xA24A,0xA24A},
+ {0xA24B,0xA24B},
+ {0xA24C,0xA24C},
+ {0xA24D,0xA24D},
+ {0xA24E,0xA24E},
+ {0xA24F,0xA24F},
+ {0xA250,0xA250}, /* A250 */
+ {0xA251,0xA251},
+ {0xA252,0xA252},
+ {0xA253,0xA253},
+ {0xA254,0xA254},
+ {0xA255,0xA255},
+ {0xA256,0xA256},
+ {0xA257,0xA257},
+ {0xA258,0xA258},
+ {0xA259,0xA259},
+ {0xA25A,0xA25A},
+ {0xA25B,0xA25B},
+ {0xA25C,0xA25C},
+ {0xA25D,0xA25D},
+ {0xA25E,0xA25E},
+ {0xA25F,0xA25F},
+ {0xA260,0xA260}, /* A260 */
+ {0xA261,0xA261},
+ {0xA262,0xA262},
+ {0xA263,0xA263},
+ {0xA264,0xA264},
+ {0xA265,0xA265},
+ {0xA266,0xA266},
+ {0xA267,0xA267},
+ {0xA268,0xA268},
+ {0xA269,0xA269},
+ {0xA26A,0xA26A},
+ {0xA26B,0xA26B},
+ {0xA26C,0xA26C},
+ {0xA26D,0xA26D},
+ {0xA26E,0xA26E},
+ {0xA26F,0xA26F},
+ {0xA270,0xA270}, /* A270 */
+ {0xA271,0xA271},
+ {0xA272,0xA272},
+ {0xA273,0xA273},
+ {0xA274,0xA274},
+ {0xA275,0xA275},
+ {0xA276,0xA276},
+ {0xA277,0xA277},
+ {0xA278,0xA278},
+ {0xA279,0xA279},
+ {0xA27A,0xA27A},
+ {0xA27B,0xA27B},
+ {0xA27C,0xA27C},
+ {0xA27D,0xA27D},
+ {0xA27E,0xA27E},
+ {0xA27F,0xA27F},
+ {0xA280,0xA280}, /* A280 */
+ {0xA281,0xA281},
+ {0xA282,0xA282},
+ {0xA283,0xA283},
+ {0xA284,0xA284},
+ {0xA285,0xA285},
+ {0xA286,0xA286},
+ {0xA287,0xA287},
+ {0xA288,0xA288},
+ {0xA289,0xA289},
+ {0xA28A,0xA28A},
+ {0xA28B,0xA28B},
+ {0xA28C,0xA28C},
+ {0xA28D,0xA28D},
+ {0xA28E,0xA28E},
+ {0xA28F,0xA28F},
+ {0xA290,0xA290}, /* A290 */
+ {0xA291,0xA291},
+ {0xA292,0xA292},
+ {0xA293,0xA293},
+ {0xA294,0xA294},
+ {0xA295,0xA295},
+ {0xA296,0xA296},
+ {0xA297,0xA297},
+ {0xA298,0xA298},
+ {0xA299,0xA299},
+ {0xA29A,0xA29A},
+ {0xA29B,0xA29B},
+ {0xA29C,0xA29C},
+ {0xA29D,0xA29D},
+ {0xA29E,0xA29E},
+ {0xA29F,0xA29F},
+ {0xA2A0,0xA2A0}, /* A2A0 */
+ {0xA2F1,0xA2A1},
+ {0xA2F2,0xA2A2},
+ {0xA2F3,0xA2A3},
+ {0xA2F4,0xA2A4},
+ {0xA2F5,0xA2A5},
+ {0xA2F6,0xA2A6},
+ {0xA2F7,0xA2A7},
+ {0xA2F8,0xA2A8},
+ {0xA2F9,0xA2A9},
+ {0xA2FA,0xA2AA},
+ {0xA2AB,0xA2AB},
+ {0xA2AC,0xA2AC},
+ {0xA2AD,0xA2AD},
+ {0xA2AE,0xA2AE},
+ {0xA2AF,0xA2AF},
+ {0xA2B0,0xA2B0}, /* A2B0 */
+ {0xA2B1,0xA2B1},
+ {0xA2B2,0xA2B2},
+ {0xA2B3,0xA2B3},
+ {0xA2B4,0xA2B4},
+ {0xA2B5,0xA2B5},
+ {0xA2B6,0xA2B6},
+ {0xA2B7,0xA2B7},
+ {0xA2B8,0xA2B8},
+ {0xA2B9,0xA2B9},
+ {0xA2BA,0xA2BA},
+ {0xA2BB,0xA2BB},
+ {0xA2BC,0xA2BC},
+ {0xA2BD,0xA2BD},
+ {0xA2BE,0xA2BE},
+ {0xA2BF,0xA2BF},
+ {0xA2C0,0xA2C0}, /* A2C0 */
+ {0xA2C1,0xA2C1},
+ {0xA2C2,0xA2C2},
+ {0xA2C3,0xA2C3},
+ {0xA2C4,0xA2C4},
+ {0xA2C5,0xA2C5},
+ {0xA2C6,0xA2C6},
+ {0xA2C7,0xA2C7},
+ {0xA2C8,0xA2C8},
+ {0xA2C9,0xA2C9},
+ {0xA2CA,0xA2CA},
+ {0xA2CB,0xA2CB},
+ {0xA2CC,0xA2CC},
+ {0xA2CD,0xA2CD},
+ {0xA2CE,0xA2CE},
+ {0xA2CF,0xA2CF},
+ {0xA2D0,0xA2D0}, /* A2D0 */
+ {0xA2D1,0xA2D1},
+ {0xA2D2,0xA2D2},
+ {0xA2D3,0xA2D3},
+ {0xA2D4,0xA2D4},
+ {0xA2D5,0xA2D5},
+ {0xA2D6,0xA2D6},
+ {0xA2D7,0xA2D7},
+ {0xA2D8,0xA2D8},
+ {0xA2D9,0xA2D9},
+ {0xA2DA,0xA2DA},
+ {0xA2DB,0xA2DB},
+ {0xA2DC,0xA2DC},
+ {0xA2DD,0xA2DD},
+ {0xA2DE,0xA2DE},
+ {0xA2DF,0xA2DF},
+ {0xA2E0,0xA2E0}, /* A2E0 */
+ {0xA2E1,0xA2E1},
+ {0xA2E2,0xA2E2},
+ {0xA2E3,0xA2E3},
+ {0xA2E4,0xA2E4},
+ {0xA2E5,0xA2E5},
+ {0xA2E6,0xA2E6},
+ {0xA2E7,0xA2E7},
+ {0xA2E8,0xA2E8},
+ {0xA2E9,0xA2E9},
+ {0xA2EA,0xA2EA},
+ {0xA2EB,0xA2EB},
+ {0xA2EC,0xA2EC},
+ {0xA2ED,0xA2ED},
+ {0xA2EE,0xA2EE},
+ {0xA2EF,0xA2EF},
+ {0xA2F0,0xA2F0}, /* A2F0 */
+ {0xA2F1,0xA2A1},
+ {0xA2F2,0xA2A2},
+ {0xA2F3,0xA2A3},
+ {0xA2F4,0xA2A4},
+ {0xA2F5,0xA2A5},
+ {0xA2F6,0xA2A6},
+ {0xA2F7,0xA2A7},
+ {0xA2F8,0xA2A8},
+ {0xA2F9,0xA2A9},
+ {0xA2FA,0xA2AA},
+ {0xA2FB,0xA2FB},
+ {0xA2FC,0xA2FC},
+ {0xA2FD,0xA2FD},
+ {0xA2FE,0xA2FE},
+ {0xA2FF,0xA2FF}
};
-static MY_UNICASE_CHARACTER cA3[256]=
+static const MY_CASEFOLD_CHARACTER cA3[256]=
{
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0xA340,0xA340,0x003F}, /* A340 */
- {0xA341,0xA341,0x003F},
- {0xA342,0xA342,0x003F},
- {0xA343,0xA343,0x003F},
- {0xA344,0xA344,0x003F},
- {0xA345,0xA345,0x003F},
- {0xA346,0xA346,0x003F},
- {0xA347,0xA347,0x003F},
- {0xA348,0xA348,0x003F},
- {0xA349,0xA349,0x003F},
- {0xA34A,0xA34A,0x003F},
- {0xA34B,0xA34B,0x003F},
- {0xA34C,0xA34C,0x003F},
- {0xA34D,0xA34D,0x003F},
- {0xA34E,0xA34E,0x003F},
- {0xA34F,0xA34F,0x003F},
- {0xA350,0xA350,0x003F}, /* A350 */
- {0xA351,0xA351,0x003F},
- {0xA352,0xA352,0x003F},
- {0xA353,0xA353,0x003F},
- {0xA354,0xA354,0x003F},
- {0xA355,0xA355,0x003F},
- {0xA356,0xA356,0x003F},
- {0xA357,0xA357,0x003F},
- {0xA358,0xA358,0x003F},
- {0xA359,0xA359,0x003F},
- {0xA35A,0xA35A,0x003F},
- {0xA35B,0xA35B,0x003F},
- {0xA35C,0xA35C,0x003F},
- {0xA35D,0xA35D,0x003F},
- {0xA35E,0xA35E,0x003F},
- {0xA35F,0xA35F,0x003F},
- {0xA360,0xA360,0x003F}, /* A360 */
- {0xA361,0xA361,0x003F},
- {0xA362,0xA362,0x003F},
- {0xA363,0xA363,0x003F},
- {0xA364,0xA364,0x003F},
- {0xA365,0xA365,0x003F},
- {0xA366,0xA366,0x003F},
- {0xA367,0xA367,0x003F},
- {0xA368,0xA368,0x003F},
- {0xA369,0xA369,0x003F},
- {0xA36A,0xA36A,0x003F},
- {0xA36B,0xA36B,0x003F},
- {0xA36C,0xA36C,0x003F},
- {0xA36D,0xA36D,0x003F},
- {0xA36E,0xA36E,0x003F},
- {0xA36F,0xA36F,0x003F},
- {0xA370,0xA370,0x003F}, /* A370 */
- {0xA371,0xA371,0x003F},
- {0xA372,0xA372,0x003F},
- {0xA373,0xA373,0x003F},
- {0xA374,0xA374,0x003F},
- {0xA375,0xA375,0x003F},
- {0xA376,0xA376,0x003F},
- {0xA377,0xA377,0x003F},
- {0xA378,0xA378,0x003F},
- {0xA379,0xA379,0x003F},
- {0xA37A,0xA37A,0x003F},
- {0xA37B,0xA37B,0x003F},
- {0xA37C,0xA37C,0x003F},
- {0xA37D,0xA37D,0x003F},
- {0xA37E,0xA37E,0x003F},
- {0xA37F,0xA37F,0xA37F},
- {0xA380,0xA380,0x003F}, /* A380 */
- {0xA381,0xA381,0x003F},
- {0xA382,0xA382,0x003F},
- {0xA383,0xA383,0x003F},
- {0xA384,0xA384,0x003F},
- {0xA385,0xA385,0x003F},
- {0xA386,0xA386,0x003F},
- {0xA387,0xA387,0x003F},
- {0xA388,0xA388,0x003F},
- {0xA389,0xA389,0x003F},
- {0xA38A,0xA38A,0x003F},
- {0xA38B,0xA38B,0x003F},
- {0xA38C,0xA38C,0x003F},
- {0xA38D,0xA38D,0x003F},
- {0xA38E,0xA38E,0x003F},
- {0xA38F,0xA38F,0x003F},
- {0xA390,0xA390,0x003F}, /* A390 */
- {0xA391,0xA391,0x003F},
- {0xA392,0xA392,0x003F},
- {0xA393,0xA393,0x003F},
- {0xA394,0xA394,0x003F},
- {0xA395,0xA395,0x003F},
- {0xA396,0xA396,0x003F},
- {0xA397,0xA397,0x003F},
- {0xA398,0xA398,0x003F},
- {0xA399,0xA399,0x003F},
- {0xA39A,0xA39A,0x003F},
- {0xA39B,0xA39B,0x003F},
- {0xA39C,0xA39C,0x003F},
- {0xA39D,0xA39D,0x003F},
- {0xA39E,0xA39E,0x003F},
- {0xA39F,0xA39F,0x003F},
- {0xA3A0,0xA3A0,0x003F}, /* A3A0 */
- {0xA3A1,0xA3A1,0xFF01},
- {0xA3A2,0xA3A2,0xFF02},
- {0xA3A3,0xA3A3,0xFF03},
- {0xA3A4,0xA3A4,0xFFE5},
- {0xA3A5,0xA3A5,0xFF05},
- {0xA3A6,0xA3A6,0xFF06},
- {0xA3A7,0xA3A7,0xFF07},
- {0xA3A8,0xA3A8,0xFF08},
- {0xA3A9,0xA3A9,0xFF09},
- {0xA3AA,0xA3AA,0xFF0A},
- {0xA3AB,0xA3AB,0xFF0B},
- {0xA3AC,0xA3AC,0xFF0C},
- {0xA3AD,0xA3AD,0xFF0D},
- {0xA3AE,0xA3AE,0xFF0E},
- {0xA3AF,0xA3AF,0xFF0F},
- {0xA3B0,0xA3B0,0xFF10}, /* A3B0 */
- {0xA3B1,0xA3B1,0xFF11},
- {0xA3B2,0xA3B2,0xFF12},
- {0xA3B3,0xA3B3,0xFF13},
- {0xA3B4,0xA3B4,0xFF14},
- {0xA3B5,0xA3B5,0xFF15},
- {0xA3B6,0xA3B6,0xFF16},
- {0xA3B7,0xA3B7,0xFF17},
- {0xA3B8,0xA3B8,0xFF18},
- {0xA3B9,0xA3B9,0xFF19},
- {0xA3BA,0xA3BA,0xFF1A},
- {0xA3BB,0xA3BB,0xFF1B},
- {0xA3BC,0xA3BC,0xFF1C},
- {0xA3BD,0xA3BD,0xFF1D},
- {0xA3BE,0xA3BE,0xFF1E},
- {0xA3BF,0xA3BF,0xFF1F},
- {0xA3C0,0xA3C0,0xFF20}, /* A3C0 */
- {0xA3C1,0xA3E1,0xFF21},
- {0xA3C2,0xA3E2,0xFF22},
- {0xA3C3,0xA3E3,0xFF23},
- {0xA3C4,0xA3E4,0xFF24},
- {0xA3C5,0xA3E5,0xFF25},
- {0xA3C6,0xA3E6,0xFF26},
- {0xA3C7,0xA3E7,0xFF27},
- {0xA3C8,0xA3E8,0xFF28},
- {0xA3C9,0xA3E9,0xFF29},
- {0xA3CA,0xA3EA,0xFF2A},
- {0xA3CB,0xA3EB,0xFF2B},
- {0xA3CC,0xA3EC,0xFF2C},
- {0xA3CD,0xA3ED,0xFF2D},
- {0xA3CE,0xA3EE,0xFF2E},
- {0xA3CF,0xA3EF,0xFF2F},
- {0xA3D0,0xA3F0,0xFF30}, /* A3D0 */
- {0xA3D1,0xA3F1,0xFF31},
- {0xA3D2,0xA3F2,0xFF32},
- {0xA3D3,0xA3F3,0xFF33},
- {0xA3D4,0xA3F4,0xFF34},
- {0xA3D5,0xA3F5,0xFF35},
- {0xA3D6,0xA3F6,0xFF36},
- {0xA3D7,0xA3F7,0xFF37},
- {0xA3D8,0xA3F8,0xFF38},
- {0xA3D9,0xA3F9,0xFF39},
- {0xA3DA,0xA3FA,0xFF3A},
- {0xA3DB,0xA3DB,0xFF3B},
- {0xA3DC,0xA3DC,0xFF3C},
- {0xA3DD,0xA3DD,0xFF3D},
- {0xA3DE,0xA3DE,0xFF3E},
- {0xA3DF,0xA3DF,0xFF3F},
- {0xA3E0,0xA3E0,0xFF40}, /* A3E0 */
- {0xA3C1,0xA3E1,0xFF41},
- {0xA3C2,0xA3E2,0xFF42},
- {0xA3C3,0xA3E3,0xFF43},
- {0xA3C4,0xA3E4,0xFF44},
- {0xA3C5,0xA3E5,0xFF45},
- {0xA3C6,0xA3E6,0xFF46},
- {0xA3C7,0xA3E7,0xFF47},
- {0xA3C8,0xA3E8,0xFF48},
- {0xA3C9,0xA3E9,0xFF49},
- {0xA3CA,0xA3EA,0xFF4A},
- {0xA3CB,0xA3EB,0xFF4B},
- {0xA3CC,0xA3EC,0xFF4C},
- {0xA3CD,0xA3ED,0xFF4D},
- {0xA3CE,0xA3EE,0xFF4E},
- {0xA3CF,0xA3EF,0xFF4F},
- {0xA3D0,0xA3F0,0xFF50}, /* A3F0 */
- {0xA3D1,0xA3F1,0xFF51},
- {0xA3D2,0xA3F2,0xFF52},
- {0xA3D3,0xA3F3,0xFF53},
- {0xA3D4,0xA3F4,0xFF54},
- {0xA3D5,0xA3F5,0xFF55},
- {0xA3D6,0xA3F6,0xFF56},
- {0xA3D7,0xA3F7,0xFF57},
- {0xA3D8,0xA3F8,0xFF58},
- {0xA3D9,0xA3F9,0xFF59},
- {0xA3DA,0xA3FA,0xFF5A},
- {0xA3FB,0xA3FB,0xFF5B},
- {0xA3FC,0xA3FC,0xFF5C},
- {0xA3FD,0xA3FD,0xFF5D},
- {0xA3FE,0xA3FE,0xFFE3},
- {0xA3FF,0xA3FF,0xA3FF}
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx00 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx10 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx20 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx30 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0xA340,0xA340}, /* A340 */
+ {0xA341,0xA341},
+ {0xA342,0xA342},
+ {0xA343,0xA343},
+ {0xA344,0xA344},
+ {0xA345,0xA345},
+ {0xA346,0xA346},
+ {0xA347,0xA347},
+ {0xA348,0xA348},
+ {0xA349,0xA349},
+ {0xA34A,0xA34A},
+ {0xA34B,0xA34B},
+ {0xA34C,0xA34C},
+ {0xA34D,0xA34D},
+ {0xA34E,0xA34E},
+ {0xA34F,0xA34F},
+ {0xA350,0xA350}, /* A350 */
+ {0xA351,0xA351},
+ {0xA352,0xA352},
+ {0xA353,0xA353},
+ {0xA354,0xA354},
+ {0xA355,0xA355},
+ {0xA356,0xA356},
+ {0xA357,0xA357},
+ {0xA358,0xA358},
+ {0xA359,0xA359},
+ {0xA35A,0xA35A},
+ {0xA35B,0xA35B},
+ {0xA35C,0xA35C},
+ {0xA35D,0xA35D},
+ {0xA35E,0xA35E},
+ {0xA35F,0xA35F},
+ {0xA360,0xA360}, /* A360 */
+ {0xA361,0xA361},
+ {0xA362,0xA362},
+ {0xA363,0xA363},
+ {0xA364,0xA364},
+ {0xA365,0xA365},
+ {0xA366,0xA366},
+ {0xA367,0xA367},
+ {0xA368,0xA368},
+ {0xA369,0xA369},
+ {0xA36A,0xA36A},
+ {0xA36B,0xA36B},
+ {0xA36C,0xA36C},
+ {0xA36D,0xA36D},
+ {0xA36E,0xA36E},
+ {0xA36F,0xA36F},
+ {0xA370,0xA370}, /* A370 */
+ {0xA371,0xA371},
+ {0xA372,0xA372},
+ {0xA373,0xA373},
+ {0xA374,0xA374},
+ {0xA375,0xA375},
+ {0xA376,0xA376},
+ {0xA377,0xA377},
+ {0xA378,0xA378},
+ {0xA379,0xA379},
+ {0xA37A,0xA37A},
+ {0xA37B,0xA37B},
+ {0xA37C,0xA37C},
+ {0xA37D,0xA37D},
+ {0xA37E,0xA37E},
+ {0xA37F,0xA37F},
+ {0xA380,0xA380}, /* A380 */
+ {0xA381,0xA381},
+ {0xA382,0xA382},
+ {0xA383,0xA383},
+ {0xA384,0xA384},
+ {0xA385,0xA385},
+ {0xA386,0xA386},
+ {0xA387,0xA387},
+ {0xA388,0xA388},
+ {0xA389,0xA389},
+ {0xA38A,0xA38A},
+ {0xA38B,0xA38B},
+ {0xA38C,0xA38C},
+ {0xA38D,0xA38D},
+ {0xA38E,0xA38E},
+ {0xA38F,0xA38F},
+ {0xA390,0xA390}, /* A390 */
+ {0xA391,0xA391},
+ {0xA392,0xA392},
+ {0xA393,0xA393},
+ {0xA394,0xA394},
+ {0xA395,0xA395},
+ {0xA396,0xA396},
+ {0xA397,0xA397},
+ {0xA398,0xA398},
+ {0xA399,0xA399},
+ {0xA39A,0xA39A},
+ {0xA39B,0xA39B},
+ {0xA39C,0xA39C},
+ {0xA39D,0xA39D},
+ {0xA39E,0xA39E},
+ {0xA39F,0xA39F},
+ {0xA3A0,0xA3A0}, /* A3A0 */
+ {0xA3A1,0xA3A1},
+ {0xA3A2,0xA3A2},
+ {0xA3A3,0xA3A3},
+ {0xA3A4,0xA3A4},
+ {0xA3A5,0xA3A5},
+ {0xA3A6,0xA3A6},
+ {0xA3A7,0xA3A7},
+ {0xA3A8,0xA3A8},
+ {0xA3A9,0xA3A9},
+ {0xA3AA,0xA3AA},
+ {0xA3AB,0xA3AB},
+ {0xA3AC,0xA3AC},
+ {0xA3AD,0xA3AD},
+ {0xA3AE,0xA3AE},
+ {0xA3AF,0xA3AF},
+ {0xA3B0,0xA3B0}, /* A3B0 */
+ {0xA3B1,0xA3B1},
+ {0xA3B2,0xA3B2},
+ {0xA3B3,0xA3B3},
+ {0xA3B4,0xA3B4},
+ {0xA3B5,0xA3B5},
+ {0xA3B6,0xA3B6},
+ {0xA3B7,0xA3B7},
+ {0xA3B8,0xA3B8},
+ {0xA3B9,0xA3B9},
+ {0xA3BA,0xA3BA},
+ {0xA3BB,0xA3BB},
+ {0xA3BC,0xA3BC},
+ {0xA3BD,0xA3BD},
+ {0xA3BE,0xA3BE},
+ {0xA3BF,0xA3BF},
+ {0xA3C0,0xA3C0}, /* A3C0 */
+ {0xA3C1,0xA3E1},
+ {0xA3C2,0xA3E2},
+ {0xA3C3,0xA3E3},
+ {0xA3C4,0xA3E4},
+ {0xA3C5,0xA3E5},
+ {0xA3C6,0xA3E6},
+ {0xA3C7,0xA3E7},
+ {0xA3C8,0xA3E8},
+ {0xA3C9,0xA3E9},
+ {0xA3CA,0xA3EA},
+ {0xA3CB,0xA3EB},
+ {0xA3CC,0xA3EC},
+ {0xA3CD,0xA3ED},
+ {0xA3CE,0xA3EE},
+ {0xA3CF,0xA3EF},
+ {0xA3D0,0xA3F0}, /* A3D0 */
+ {0xA3D1,0xA3F1},
+ {0xA3D2,0xA3F2},
+ {0xA3D3,0xA3F3},
+ {0xA3D4,0xA3F4},
+ {0xA3D5,0xA3F5},
+ {0xA3D6,0xA3F6},
+ {0xA3D7,0xA3F7},
+ {0xA3D8,0xA3F8},
+ {0xA3D9,0xA3F9},
+ {0xA3DA,0xA3FA},
+ {0xA3DB,0xA3DB},
+ {0xA3DC,0xA3DC},
+ {0xA3DD,0xA3DD},
+ {0xA3DE,0xA3DE},
+ {0xA3DF,0xA3DF},
+ {0xA3E0,0xA3E0}, /* A3E0 */
+ {0xA3C1,0xA3E1},
+ {0xA3C2,0xA3E2},
+ {0xA3C3,0xA3E3},
+ {0xA3C4,0xA3E4},
+ {0xA3C5,0xA3E5},
+ {0xA3C6,0xA3E6},
+ {0xA3C7,0xA3E7},
+ {0xA3C8,0xA3E8},
+ {0xA3C9,0xA3E9},
+ {0xA3CA,0xA3EA},
+ {0xA3CB,0xA3EB},
+ {0xA3CC,0xA3EC},
+ {0xA3CD,0xA3ED},
+ {0xA3CE,0xA3EE},
+ {0xA3CF,0xA3EF},
+ {0xA3D0,0xA3F0}, /* A3F0 */
+ {0xA3D1,0xA3F1},
+ {0xA3D2,0xA3F2},
+ {0xA3D3,0xA3F3},
+ {0xA3D4,0xA3F4},
+ {0xA3D5,0xA3F5},
+ {0xA3D6,0xA3F6},
+ {0xA3D7,0xA3F7},
+ {0xA3D8,0xA3F8},
+ {0xA3D9,0xA3F9},
+ {0xA3DA,0xA3FA},
+ {0xA3FB,0xA3FB},
+ {0xA3FC,0xA3FC},
+ {0xA3FD,0xA3FD},
+ {0xA3FE,0xA3FE},
+ {0xA3FF,0xA3FF}
};
-static MY_UNICASE_CHARACTER cA6[256]=
+static const MY_CASEFOLD_CHARACTER cA6[256]=
{
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0xA640,0xA640,0x003F}, /* A640 */
- {0xA641,0xA641,0x003F},
- {0xA642,0xA642,0x003F},
- {0xA643,0xA643,0x003F},
- {0xA644,0xA644,0x003F},
- {0xA645,0xA645,0x003F},
- {0xA646,0xA646,0x003F},
- {0xA647,0xA647,0x003F},
- {0xA648,0xA648,0x003F},
- {0xA649,0xA649,0x003F},
- {0xA64A,0xA64A,0x003F},
- {0xA64B,0xA64B,0x003F},
- {0xA64C,0xA64C,0x003F},
- {0xA64D,0xA64D,0x003F},
- {0xA64E,0xA64E,0x003F},
- {0xA64F,0xA64F,0x003F},
- {0xA650,0xA650,0x003F}, /* A650 */
- {0xA651,0xA651,0x003F},
- {0xA652,0xA652,0x003F},
- {0xA653,0xA653,0x003F},
- {0xA654,0xA654,0x003F},
- {0xA655,0xA655,0x003F},
- {0xA656,0xA656,0x003F},
- {0xA657,0xA657,0x003F},
- {0xA658,0xA658,0x003F},
- {0xA659,0xA659,0x003F},
- {0xA65A,0xA65A,0x003F},
- {0xA65B,0xA65B,0x003F},
- {0xA65C,0xA65C,0x003F},
- {0xA65D,0xA65D,0x003F},
- {0xA65E,0xA65E,0x003F},
- {0xA65F,0xA65F,0x003F},
- {0xA660,0xA660,0x003F}, /* A660 */
- {0xA661,0xA661,0x003F},
- {0xA662,0xA662,0x003F},
- {0xA663,0xA663,0x003F},
- {0xA664,0xA664,0x003F},
- {0xA665,0xA665,0x003F},
- {0xA666,0xA666,0x003F},
- {0xA667,0xA667,0x003F},
- {0xA668,0xA668,0x003F},
- {0xA669,0xA669,0x003F},
- {0xA66A,0xA66A,0x003F},
- {0xA66B,0xA66B,0x003F},
- {0xA66C,0xA66C,0x003F},
- {0xA66D,0xA66D,0x003F},
- {0xA66E,0xA66E,0x003F},
- {0xA66F,0xA66F,0x003F},
- {0xA670,0xA670,0x003F}, /* A670 */
- {0xA671,0xA671,0x003F},
- {0xA672,0xA672,0x003F},
- {0xA673,0xA673,0x003F},
- {0xA674,0xA674,0x003F},
- {0xA675,0xA675,0x003F},
- {0xA676,0xA676,0x003F},
- {0xA677,0xA677,0x003F},
- {0xA678,0xA678,0x003F},
- {0xA679,0xA679,0x003F},
- {0xA67A,0xA67A,0x003F},
- {0xA67B,0xA67B,0x003F},
- {0xA67C,0xA67C,0x003F},
- {0xA67D,0xA67D,0x003F},
- {0xA67E,0xA67E,0x003F},
- {0xA67F,0xA67F,0xA67F},
- {0xA680,0xA680,0x003F}, /* A680 */
- {0xA681,0xA681,0x003F},
- {0xA682,0xA682,0x003F},
- {0xA683,0xA683,0x003F},
- {0xA684,0xA684,0x003F},
- {0xA685,0xA685,0x003F},
- {0xA686,0xA686,0x003F},
- {0xA687,0xA687,0x003F},
- {0xA688,0xA688,0x003F},
- {0xA689,0xA689,0x003F},
- {0xA68A,0xA68A,0x003F},
- {0xA68B,0xA68B,0x003F},
- {0xA68C,0xA68C,0x003F},
- {0xA68D,0xA68D,0x003F},
- {0xA68E,0xA68E,0x003F},
- {0xA68F,0xA68F,0x003F},
- {0xA690,0xA690,0x003F}, /* A690 */
- {0xA691,0xA691,0x003F},
- {0xA692,0xA692,0x003F},
- {0xA693,0xA693,0x003F},
- {0xA694,0xA694,0x003F},
- {0xA695,0xA695,0x003F},
- {0xA696,0xA696,0x003F},
- {0xA697,0xA697,0x003F},
- {0xA698,0xA698,0x003F},
- {0xA699,0xA699,0x003F},
- {0xA69A,0xA69A,0x003F},
- {0xA69B,0xA69B,0x003F},
- {0xA69C,0xA69C,0x003F},
- {0xA69D,0xA69D,0x003F},
- {0xA69E,0xA69E,0x003F},
- {0xA69F,0xA69F,0x003F},
- {0xA6A0,0xA6A0,0x003F}, /* A6A0 */
- {0xA6A1,0xA6C1,0x0391},
- {0xA6A2,0xA6C2,0x0392},
- {0xA6A3,0xA6C3,0x0393},
- {0xA6A4,0xA6C4,0x0394},
- {0xA6A5,0xA6C5,0x0395},
- {0xA6A6,0xA6C6,0x0396},
- {0xA6A7,0xA6C7,0x0397},
- {0xA6A8,0xA6C8,0x0398},
- {0xA6A9,0xA6C9,0x0399},
- {0xA6AA,0xA6CA,0x039A},
- {0xA6AB,0xA6CB,0x039B},
- {0xA6AC,0xA6CC,0x039C},
- {0xA6AD,0xA6CD,0x039D},
- {0xA6AE,0xA6CE,0x039E},
- {0xA6AF,0xA6CF,0x039F},
- {0xA6B0,0xA6D0,0x03A0}, /* A6B0 */
- {0xA6B1,0xA6D1,0x03A1},
- {0xA6B2,0xA6D2,0x03A3},
- {0xA6B3,0xA6D3,0x03A4},
- {0xA6B4,0xA6D4,0x03A5},
- {0xA6B5,0xA6D5,0x03A6},
- {0xA6B6,0xA6D6,0x03A7},
- {0xA6B7,0xA6D7,0x03A8},
- {0xA6B8,0xA6D8,0x03A9},
- {0xA6B9,0xA6B9,0x003F},
- {0xA6BA,0xA6BA,0x003F},
- {0xA6BB,0xA6BB,0x003F},
- {0xA6BC,0xA6BC,0x003F},
- {0xA6BD,0xA6BD,0x003F},
- {0xA6BE,0xA6BE,0x003F},
- {0xA6BF,0xA6BF,0x003F},
- {0xA6C0,0xA6C0,0x003F}, /* A6C0 */
- {0xA6A1,0xA6C1,0x03B1},
- {0xA6A2,0xA6C2,0x03B2},
- {0xA6A3,0xA6C3,0x03B3},
- {0xA6A4,0xA6C4,0x03B4},
- {0xA6A5,0xA6C5,0x03B5},
- {0xA6A6,0xA6C6,0x03B6},
- {0xA6A7,0xA6C7,0x03B7},
- {0xA6A8,0xA6C8,0x03B8},
- {0xA6A9,0xA6C9,0x03B9},
- {0xA6AA,0xA6CA,0x03BA},
- {0xA6AB,0xA6CB,0x03BB},
- {0xA6AC,0xA6CC,0x03BC},
- {0xA6AD,0xA6CD,0x03BD},
- {0xA6AE,0xA6CE,0x03BE},
- {0xA6AF,0xA6CF,0x03BF},
- {0xA6B0,0xA6D0,0x03C0}, /* A6D0 */
- {0xA6B1,0xA6D1,0x03C1},
- {0xA6B2,0xA6D2,0x03C3},
- {0xA6B3,0xA6D3,0x03C4},
- {0xA6B4,0xA6D4,0x03C5},
- {0xA6B5,0xA6D5,0x03C6},
- {0xA6B6,0xA6D6,0x03C7},
- {0xA6B7,0xA6D7,0x03C8},
- {0xA6B8,0xA6D8,0x03C9},
- {0xA6D9,0xA6D9,0x003F},
- {0xA6DA,0xA6DA,0x003F},
- {0xA6DB,0xA6DB,0x003F},
- {0xA6DC,0xA6DC,0x003F},
- {0xA6DD,0xA6DD,0x003F},
- {0xA6DE,0xA6DE,0x003F},
- {0xA6DF,0xA6DF,0x003F},
- {0xA6E0,0xA6E0,0xFE35}, /* A6E0 */
- {0xA6E1,0xA6E1,0xFE36},
- {0xA6E2,0xA6E2,0xFE39},
- {0xA6E3,0xA6E3,0xFE3A},
- {0xA6E4,0xA6E4,0xFE3F},
- {0xA6E5,0xA6E5,0xFE40},
- {0xA6E6,0xA6E6,0xFE3D},
- {0xA6E7,0xA6E7,0xFE3E},
- {0xA6E8,0xA6E8,0xFE41},
- {0xA6E9,0xA6E9,0xFE42},
- {0xA6EA,0xA6EA,0xFE43},
- {0xA6EB,0xA6EB,0xFE44},
- {0xA6EC,0xA6EC,0x003F},
- {0xA6ED,0xA6ED,0x003F},
- {0xA6EE,0xA6EE,0xFE3B},
- {0xA6EF,0xA6EF,0xFE3C},
- {0xA6F0,0xA6F0,0xFE37}, /* A6F0 */
- {0xA6F1,0xA6F1,0xFE38},
- {0xA6F2,0xA6F2,0xFE31},
- {0xA6F3,0xA6F3,0x003F},
- {0xA6F4,0xA6F4,0xFE33},
- {0xA6F5,0xA6F5,0xFE34},
- {0xA6F6,0xA6F6,0x003F},
- {0xA6F7,0xA6F7,0x003F},
- {0xA6F8,0xA6F8,0x003F},
- {0xA6F9,0xA6F9,0x003F},
- {0xA6FA,0xA6FA,0x003F},
- {0xA6FB,0xA6FB,0x003F},
- {0xA6FC,0xA6FC,0x003F},
- {0xA6FD,0xA6FD,0x003F},
- {0xA6FE,0xA6FE,0x003F},
- {0xA6FF,0xA6FF,0xA6FF}
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx00 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx10 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx20 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx30 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0xA640,0xA640}, /* A640 */
+ {0xA641,0xA641},
+ {0xA642,0xA642},
+ {0xA643,0xA643},
+ {0xA644,0xA644},
+ {0xA645,0xA645},
+ {0xA646,0xA646},
+ {0xA647,0xA647},
+ {0xA648,0xA648},
+ {0xA649,0xA649},
+ {0xA64A,0xA64A},
+ {0xA64B,0xA64B},
+ {0xA64C,0xA64C},
+ {0xA64D,0xA64D},
+ {0xA64E,0xA64E},
+ {0xA64F,0xA64F},
+ {0xA650,0xA650}, /* A650 */
+ {0xA651,0xA651},
+ {0xA652,0xA652},
+ {0xA653,0xA653},
+ {0xA654,0xA654},
+ {0xA655,0xA655},
+ {0xA656,0xA656},
+ {0xA657,0xA657},
+ {0xA658,0xA658},
+ {0xA659,0xA659},
+ {0xA65A,0xA65A},
+ {0xA65B,0xA65B},
+ {0xA65C,0xA65C},
+ {0xA65D,0xA65D},
+ {0xA65E,0xA65E},
+ {0xA65F,0xA65F},
+ {0xA660,0xA660}, /* A660 */
+ {0xA661,0xA661},
+ {0xA662,0xA662},
+ {0xA663,0xA663},
+ {0xA664,0xA664},
+ {0xA665,0xA665},
+ {0xA666,0xA666},
+ {0xA667,0xA667},
+ {0xA668,0xA668},
+ {0xA669,0xA669},
+ {0xA66A,0xA66A},
+ {0xA66B,0xA66B},
+ {0xA66C,0xA66C},
+ {0xA66D,0xA66D},
+ {0xA66E,0xA66E},
+ {0xA66F,0xA66F},
+ {0xA670,0xA670}, /* A670 */
+ {0xA671,0xA671},
+ {0xA672,0xA672},
+ {0xA673,0xA673},
+ {0xA674,0xA674},
+ {0xA675,0xA675},
+ {0xA676,0xA676},
+ {0xA677,0xA677},
+ {0xA678,0xA678},
+ {0xA679,0xA679},
+ {0xA67A,0xA67A},
+ {0xA67B,0xA67B},
+ {0xA67C,0xA67C},
+ {0xA67D,0xA67D},
+ {0xA67E,0xA67E},
+ {0xA67F,0xA67F},
+ {0xA680,0xA680}, /* A680 */
+ {0xA681,0xA681},
+ {0xA682,0xA682},
+ {0xA683,0xA683},
+ {0xA684,0xA684},
+ {0xA685,0xA685},
+ {0xA686,0xA686},
+ {0xA687,0xA687},
+ {0xA688,0xA688},
+ {0xA689,0xA689},
+ {0xA68A,0xA68A},
+ {0xA68B,0xA68B},
+ {0xA68C,0xA68C},
+ {0xA68D,0xA68D},
+ {0xA68E,0xA68E},
+ {0xA68F,0xA68F},
+ {0xA690,0xA690}, /* A690 */
+ {0xA691,0xA691},
+ {0xA692,0xA692},
+ {0xA693,0xA693},
+ {0xA694,0xA694},
+ {0xA695,0xA695},
+ {0xA696,0xA696},
+ {0xA697,0xA697},
+ {0xA698,0xA698},
+ {0xA699,0xA699},
+ {0xA69A,0xA69A},
+ {0xA69B,0xA69B},
+ {0xA69C,0xA69C},
+ {0xA69D,0xA69D},
+ {0xA69E,0xA69E},
+ {0xA69F,0xA69F},
+ {0xA6A0,0xA6A0}, /* A6A0 */
+ {0xA6A1,0xA6C1},
+ {0xA6A2,0xA6C2},
+ {0xA6A3,0xA6C3},
+ {0xA6A4,0xA6C4},
+ {0xA6A5,0xA6C5},
+ {0xA6A6,0xA6C6},
+ {0xA6A7,0xA6C7},
+ {0xA6A8,0xA6C8},
+ {0xA6A9,0xA6C9},
+ {0xA6AA,0xA6CA},
+ {0xA6AB,0xA6CB},
+ {0xA6AC,0xA6CC},
+ {0xA6AD,0xA6CD},
+ {0xA6AE,0xA6CE},
+ {0xA6AF,0xA6CF},
+ {0xA6B0,0xA6D0}, /* A6B0 */
+ {0xA6B1,0xA6D1},
+ {0xA6B2,0xA6D2},
+ {0xA6B3,0xA6D3},
+ {0xA6B4,0xA6D4},
+ {0xA6B5,0xA6D5},
+ {0xA6B6,0xA6D6},
+ {0xA6B7,0xA6D7},
+ {0xA6B8,0xA6D8},
+ {0xA6B9,0xA6B9},
+ {0xA6BA,0xA6BA},
+ {0xA6BB,0xA6BB},
+ {0xA6BC,0xA6BC},
+ {0xA6BD,0xA6BD},
+ {0xA6BE,0xA6BE},
+ {0xA6BF,0xA6BF},
+ {0xA6C0,0xA6C0}, /* A6C0 */
+ {0xA6A1,0xA6C1},
+ {0xA6A2,0xA6C2},
+ {0xA6A3,0xA6C3},
+ {0xA6A4,0xA6C4},
+ {0xA6A5,0xA6C5},
+ {0xA6A6,0xA6C6},
+ {0xA6A7,0xA6C7},
+ {0xA6A8,0xA6C8},
+ {0xA6A9,0xA6C9},
+ {0xA6AA,0xA6CA},
+ {0xA6AB,0xA6CB},
+ {0xA6AC,0xA6CC},
+ {0xA6AD,0xA6CD},
+ {0xA6AE,0xA6CE},
+ {0xA6AF,0xA6CF},
+ {0xA6B0,0xA6D0}, /* A6D0 */
+ {0xA6B1,0xA6D1},
+ {0xA6B2,0xA6D2},
+ {0xA6B3,0xA6D3},
+ {0xA6B4,0xA6D4},
+ {0xA6B5,0xA6D5},
+ {0xA6B6,0xA6D6},
+ {0xA6B7,0xA6D7},
+ {0xA6B8,0xA6D8},
+ {0xA6D9,0xA6D9},
+ {0xA6DA,0xA6DA},
+ {0xA6DB,0xA6DB},
+ {0xA6DC,0xA6DC},
+ {0xA6DD,0xA6DD},
+ {0xA6DE,0xA6DE},
+ {0xA6DF,0xA6DF},
+ {0xA6E0,0xA6E0}, /* A6E0 */
+ {0xA6E1,0xA6E1},
+ {0xA6E2,0xA6E2},
+ {0xA6E3,0xA6E3},
+ {0xA6E4,0xA6E4},
+ {0xA6E5,0xA6E5},
+ {0xA6E6,0xA6E6},
+ {0xA6E7,0xA6E7},
+ {0xA6E8,0xA6E8},
+ {0xA6E9,0xA6E9},
+ {0xA6EA,0xA6EA},
+ {0xA6EB,0xA6EB},
+ {0xA6EC,0xA6EC},
+ {0xA6ED,0xA6ED},
+ {0xA6EE,0xA6EE},
+ {0xA6EF,0xA6EF},
+ {0xA6F0,0xA6F0}, /* A6F0 */
+ {0xA6F1,0xA6F1},
+ {0xA6F2,0xA6F2},
+ {0xA6F3,0xA6F3},
+ {0xA6F4,0xA6F4},
+ {0xA6F5,0xA6F5},
+ {0xA6F6,0xA6F6},
+ {0xA6F7,0xA6F7},
+ {0xA6F8,0xA6F8},
+ {0xA6F9,0xA6F9},
+ {0xA6FA,0xA6FA},
+ {0xA6FB,0xA6FB},
+ {0xA6FC,0xA6FC},
+ {0xA6FD,0xA6FD},
+ {0xA6FE,0xA6FE},
+ {0xA6FF,0xA6FF}
};
-static MY_UNICASE_CHARACTER cA7[256]=
+static const MY_CASEFOLD_CHARACTER cA7[256]=
{
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0xA740,0xA740,0x003F}, /* A740 */
- {0xA741,0xA741,0x003F},
- {0xA742,0xA742,0x003F},
- {0xA743,0xA743,0x003F},
- {0xA744,0xA744,0x003F},
- {0xA745,0xA745,0x003F},
- {0xA746,0xA746,0x003F},
- {0xA747,0xA747,0x003F},
- {0xA748,0xA748,0x003F},
- {0xA749,0xA749,0x003F},
- {0xA74A,0xA74A,0x003F},
- {0xA74B,0xA74B,0x003F},
- {0xA74C,0xA74C,0x003F},
- {0xA74D,0xA74D,0x003F},
- {0xA74E,0xA74E,0x003F},
- {0xA74F,0xA74F,0x003F},
- {0xA750,0xA750,0x003F}, /* A750 */
- {0xA751,0xA751,0x003F},
- {0xA752,0xA752,0x003F},
- {0xA753,0xA753,0x003F},
- {0xA754,0xA754,0x003F},
- {0xA755,0xA755,0x003F},
- {0xA756,0xA756,0x003F},
- {0xA757,0xA757,0x003F},
- {0xA758,0xA758,0x003F},
- {0xA759,0xA759,0x003F},
- {0xA75A,0xA75A,0x003F},
- {0xA75B,0xA75B,0x003F},
- {0xA75C,0xA75C,0x003F},
- {0xA75D,0xA75D,0x003F},
- {0xA75E,0xA75E,0x003F},
- {0xA75F,0xA75F,0x003F},
- {0xA760,0xA760,0x003F}, /* A760 */
- {0xA761,0xA761,0x003F},
- {0xA762,0xA762,0x003F},
- {0xA763,0xA763,0x003F},
- {0xA764,0xA764,0x003F},
- {0xA765,0xA765,0x003F},
- {0xA766,0xA766,0x003F},
- {0xA767,0xA767,0x003F},
- {0xA768,0xA768,0x003F},
- {0xA769,0xA769,0x003F},
- {0xA76A,0xA76A,0x003F},
- {0xA76B,0xA76B,0x003F},
- {0xA76C,0xA76C,0x003F},
- {0xA76D,0xA76D,0x003F},
- {0xA76E,0xA76E,0x003F},
- {0xA76F,0xA76F,0x003F},
- {0xA770,0xA770,0x003F}, /* A770 */
- {0xA771,0xA771,0x003F},
- {0xA772,0xA772,0x003F},
- {0xA773,0xA773,0x003F},
- {0xA774,0xA774,0x003F},
- {0xA775,0xA775,0x003F},
- {0xA776,0xA776,0x003F},
- {0xA777,0xA777,0x003F},
- {0xA778,0xA778,0x003F},
- {0xA779,0xA779,0x003F},
- {0xA77A,0xA77A,0x003F},
- {0xA77B,0xA77B,0x003F},
- {0xA77C,0xA77C,0x003F},
- {0xA77D,0xA77D,0x003F},
- {0xA77E,0xA77E,0x003F},
- {0xA77F,0xA77F,0xA77F},
- {0xA780,0xA780,0x003F}, /* A780 */
- {0xA781,0xA781,0x003F},
- {0xA782,0xA782,0x003F},
- {0xA783,0xA783,0x003F},
- {0xA784,0xA784,0x003F},
- {0xA785,0xA785,0x003F},
- {0xA786,0xA786,0x003F},
- {0xA787,0xA787,0x003F},
- {0xA788,0xA788,0x003F},
- {0xA789,0xA789,0x003F},
- {0xA78A,0xA78A,0x003F},
- {0xA78B,0xA78B,0x003F},
- {0xA78C,0xA78C,0x003F},
- {0xA78D,0xA78D,0x003F},
- {0xA78E,0xA78E,0x003F},
- {0xA78F,0xA78F,0x003F},
- {0xA790,0xA790,0x003F}, /* A790 */
- {0xA791,0xA791,0x003F},
- {0xA792,0xA792,0x003F},
- {0xA793,0xA793,0x003F},
- {0xA794,0xA794,0x003F},
- {0xA795,0xA795,0x003F},
- {0xA796,0xA796,0x003F},
- {0xA797,0xA797,0x003F},
- {0xA798,0xA798,0x003F},
- {0xA799,0xA799,0x003F},
- {0xA79A,0xA79A,0x003F},
- {0xA79B,0xA79B,0x003F},
- {0xA79C,0xA79C,0x003F},
- {0xA79D,0xA79D,0x003F},
- {0xA79E,0xA79E,0x003F},
- {0xA79F,0xA79F,0x003F},
- {0xA7A0,0xA7A0,0x003F}, /* A7A0 */
- {0xA7A1,0xA7D1,0x0410},
- {0xA7A2,0xA7D2,0x0411},
- {0xA7A3,0xA7D3,0x0412},
- {0xA7A4,0xA7D4,0x0413},
- {0xA7A5,0xA7D5,0x0414},
- {0xA7A6,0xA7D6,0x0415},
- {0xA7A7,0xA7D7,0x0401},
- {0xA7A8,0xA7D8,0x0416},
- {0xA7A9,0xA7D9,0x0417},
- {0xA7AA,0xA7DA,0x0418},
- {0xA7AB,0xA7DB,0x0419},
- {0xA7AC,0xA7DC,0x041A},
- {0xA7AD,0xA7DD,0x041B},
- {0xA7AE,0xA7DE,0x041C},
- {0xA7AF,0xA7DF,0x041D},
- {0xA7B0,0xA7E0,0x041E}, /* A7B0 */
- {0xA7B1,0xA7E1,0x041F},
- {0xA7B2,0xA7E2,0x0420},
- {0xA7B3,0xA7E3,0x0421},
- {0xA7B4,0xA7E4,0x0422},
- {0xA7B5,0xA7E5,0x0423},
- {0xA7B6,0xA7E6,0x0424},
- {0xA7B7,0xA7E7,0x0425},
- {0xA7B8,0xA7E8,0x0426},
- {0xA7B9,0xA7E9,0x0427},
- {0xA7BA,0xA7EA,0x0428},
- {0xA7BB,0xA7EB,0x0429},
- {0xA7BC,0xA7EC,0x042A},
- {0xA7BD,0xA7ED,0x042B},
- {0xA7BE,0xA7EE,0x042C},
- {0xA7BF,0xA7EF,0x042D},
- {0xA7C0,0xA7F0,0x042E}, /* A7C0 */
- {0xA7C1,0xA7F1,0x042F},
- {0xA7C2,0xA7C2,0x003F},
- {0xA7C3,0xA7C3,0x003F},
- {0xA7C4,0xA7C4,0x003F},
- {0xA7C5,0xA7C5,0x003F},
- {0xA7C6,0xA7C6,0x003F},
- {0xA7C7,0xA7C7,0x003F},
- {0xA7C8,0xA7C8,0x003F},
- {0xA7C9,0xA7C9,0x003F},
- {0xA7CA,0xA7CA,0x003F},
- {0xA7CB,0xA7CB,0x003F},
- {0xA7CC,0xA7CC,0x003F},
- {0xA7CD,0xA7CD,0x003F},
- {0xA7CE,0xA7CE,0x003F},
- {0xA7CF,0xA7CF,0x003F},
- {0xA7D0,0xA7D0,0x003F}, /* A7D0 */
- {0xA7A1,0xA7D1,0x0430},
- {0xA7A2,0xA7D2,0x0431},
- {0xA7A3,0xA7D3,0x0432},
- {0xA7A4,0xA7D4,0x0433},
- {0xA7A5,0xA7D5,0x0434},
- {0xA7A6,0xA7D6,0x0435},
- {0xA7A7,0xA7D7,0x0451},
- {0xA7A8,0xA7D8,0x0436},
- {0xA7A9,0xA7D9,0x0437},
- {0xA7AA,0xA7DA,0x0438},
- {0xA7AB,0xA7DB,0x0439},
- {0xA7AC,0xA7DC,0x043A},
- {0xA7AD,0xA7DD,0x043B},
- {0xA7AE,0xA7DE,0x043C},
- {0xA7AF,0xA7DF,0x043D},
- {0xA7B0,0xA7E0,0x043E}, /* A7E0 */
- {0xA7B1,0xA7E1,0x043F},
- {0xA7B2,0xA7E2,0x0440},
- {0xA7B3,0xA7E3,0x0441},
- {0xA7B4,0xA7E4,0x0442},
- {0xA7B5,0xA7E5,0x0443},
- {0xA7B6,0xA7E6,0x0444},
- {0xA7B7,0xA7E7,0x0445},
- {0xA7B8,0xA7E8,0x0446},
- {0xA7B9,0xA7E9,0x0447},
- {0xA7BA,0xA7EA,0x0448},
- {0xA7BB,0xA7EB,0x0449},
- {0xA7BC,0xA7EC,0x044A},
- {0xA7BD,0xA7ED,0x044B},
- {0xA7BE,0xA7EE,0x044C},
- {0xA7BF,0xA7EF,0x044D},
- {0xA7C0,0xA7F0,0x044E}, /* A7F0 */
- {0xA7C1,0xA7F1,0x044F},
- {0xA7F2,0xA7F2,0x003F},
- {0xA7F3,0xA7F3,0x003F},
- {0xA7F4,0xA7F4,0x003F},
- {0xA7F5,0xA7F5,0x003F},
- {0xA7F6,0xA7F6,0x003F},
- {0xA7F7,0xA7F7,0x003F},
- {0xA7F8,0xA7F8,0x003F},
- {0xA7F9,0xA7F9,0x003F},
- {0xA7FA,0xA7FA,0x003F},
- {0xA7FB,0xA7FB,0x003F},
- {0xA7FC,0xA7FC,0x003F},
- {0xA7FD,0xA7FD,0x003F},
- {0xA7FE,0xA7FE,0x003F},
- {0xA7FF,0xA7FF,0xA7FF}
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx00 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx10 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx20 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx30 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0xA740,0xA740}, /* A740 */
+ {0xA741,0xA741},
+ {0xA742,0xA742},
+ {0xA743,0xA743},
+ {0xA744,0xA744},
+ {0xA745,0xA745},
+ {0xA746,0xA746},
+ {0xA747,0xA747},
+ {0xA748,0xA748},
+ {0xA749,0xA749},
+ {0xA74A,0xA74A},
+ {0xA74B,0xA74B},
+ {0xA74C,0xA74C},
+ {0xA74D,0xA74D},
+ {0xA74E,0xA74E},
+ {0xA74F,0xA74F},
+ {0xA750,0xA750}, /* A750 */
+ {0xA751,0xA751},
+ {0xA752,0xA752},
+ {0xA753,0xA753},
+ {0xA754,0xA754},
+ {0xA755,0xA755},
+ {0xA756,0xA756},
+ {0xA757,0xA757},
+ {0xA758,0xA758},
+ {0xA759,0xA759},
+ {0xA75A,0xA75A},
+ {0xA75B,0xA75B},
+ {0xA75C,0xA75C},
+ {0xA75D,0xA75D},
+ {0xA75E,0xA75E},
+ {0xA75F,0xA75F},
+ {0xA760,0xA760}, /* A760 */
+ {0xA761,0xA761},
+ {0xA762,0xA762},
+ {0xA763,0xA763},
+ {0xA764,0xA764},
+ {0xA765,0xA765},
+ {0xA766,0xA766},
+ {0xA767,0xA767},
+ {0xA768,0xA768},
+ {0xA769,0xA769},
+ {0xA76A,0xA76A},
+ {0xA76B,0xA76B},
+ {0xA76C,0xA76C},
+ {0xA76D,0xA76D},
+ {0xA76E,0xA76E},
+ {0xA76F,0xA76F},
+ {0xA770,0xA770}, /* A770 */
+ {0xA771,0xA771},
+ {0xA772,0xA772},
+ {0xA773,0xA773},
+ {0xA774,0xA774},
+ {0xA775,0xA775},
+ {0xA776,0xA776},
+ {0xA777,0xA777},
+ {0xA778,0xA778},
+ {0xA779,0xA779},
+ {0xA77A,0xA77A},
+ {0xA77B,0xA77B},
+ {0xA77C,0xA77C},
+ {0xA77D,0xA77D},
+ {0xA77E,0xA77E},
+ {0xA77F,0xA77F},
+ {0xA780,0xA780}, /* A780 */
+ {0xA781,0xA781},
+ {0xA782,0xA782},
+ {0xA783,0xA783},
+ {0xA784,0xA784},
+ {0xA785,0xA785},
+ {0xA786,0xA786},
+ {0xA787,0xA787},
+ {0xA788,0xA788},
+ {0xA789,0xA789},
+ {0xA78A,0xA78A},
+ {0xA78B,0xA78B},
+ {0xA78C,0xA78C},
+ {0xA78D,0xA78D},
+ {0xA78E,0xA78E},
+ {0xA78F,0xA78F},
+ {0xA790,0xA790}, /* A790 */
+ {0xA791,0xA791},
+ {0xA792,0xA792},
+ {0xA793,0xA793},
+ {0xA794,0xA794},
+ {0xA795,0xA795},
+ {0xA796,0xA796},
+ {0xA797,0xA797},
+ {0xA798,0xA798},
+ {0xA799,0xA799},
+ {0xA79A,0xA79A},
+ {0xA79B,0xA79B},
+ {0xA79C,0xA79C},
+ {0xA79D,0xA79D},
+ {0xA79E,0xA79E},
+ {0xA79F,0xA79F},
+ {0xA7A0,0xA7A0}, /* A7A0 */
+ {0xA7A1,0xA7D1},
+ {0xA7A2,0xA7D2},
+ {0xA7A3,0xA7D3},
+ {0xA7A4,0xA7D4},
+ {0xA7A5,0xA7D5},
+ {0xA7A6,0xA7D6},
+ {0xA7A7,0xA7D7},
+ {0xA7A8,0xA7D8},
+ {0xA7A9,0xA7D9},
+ {0xA7AA,0xA7DA},
+ {0xA7AB,0xA7DB},
+ {0xA7AC,0xA7DC},
+ {0xA7AD,0xA7DD},
+ {0xA7AE,0xA7DE},
+ {0xA7AF,0xA7DF},
+ {0xA7B0,0xA7E0}, /* A7B0 */
+ {0xA7B1,0xA7E1},
+ {0xA7B2,0xA7E2},
+ {0xA7B3,0xA7E3},
+ {0xA7B4,0xA7E4},
+ {0xA7B5,0xA7E5},
+ {0xA7B6,0xA7E6},
+ {0xA7B7,0xA7E7},
+ {0xA7B8,0xA7E8},
+ {0xA7B9,0xA7E9},
+ {0xA7BA,0xA7EA},
+ {0xA7BB,0xA7EB},
+ {0xA7BC,0xA7EC},
+ {0xA7BD,0xA7ED},
+ {0xA7BE,0xA7EE},
+ {0xA7BF,0xA7EF},
+ {0xA7C0,0xA7F0}, /* A7C0 */
+ {0xA7C1,0xA7F1},
+ {0xA7C2,0xA7C2},
+ {0xA7C3,0xA7C3},
+ {0xA7C4,0xA7C4},
+ {0xA7C5,0xA7C5},
+ {0xA7C6,0xA7C6},
+ {0xA7C7,0xA7C7},
+ {0xA7C8,0xA7C8},
+ {0xA7C9,0xA7C9},
+ {0xA7CA,0xA7CA},
+ {0xA7CB,0xA7CB},
+ {0xA7CC,0xA7CC},
+ {0xA7CD,0xA7CD},
+ {0xA7CE,0xA7CE},
+ {0xA7CF,0xA7CF},
+ {0xA7D0,0xA7D0}, /* A7D0 */
+ {0xA7A1,0xA7D1},
+ {0xA7A2,0xA7D2},
+ {0xA7A3,0xA7D3},
+ {0xA7A4,0xA7D4},
+ {0xA7A5,0xA7D5},
+ {0xA7A6,0xA7D6},
+ {0xA7A7,0xA7D7},
+ {0xA7A8,0xA7D8},
+ {0xA7A9,0xA7D9},
+ {0xA7AA,0xA7DA},
+ {0xA7AB,0xA7DB},
+ {0xA7AC,0xA7DC},
+ {0xA7AD,0xA7DD},
+ {0xA7AE,0xA7DE},
+ {0xA7AF,0xA7DF},
+ {0xA7B0,0xA7E0}, /* A7E0 */
+ {0xA7B1,0xA7E1},
+ {0xA7B2,0xA7E2},
+ {0xA7B3,0xA7E3},
+ {0xA7B4,0xA7E4},
+ {0xA7B5,0xA7E5},
+ {0xA7B6,0xA7E6},
+ {0xA7B7,0xA7E7},
+ {0xA7B8,0xA7E8},
+ {0xA7B9,0xA7E9},
+ {0xA7BA,0xA7EA},
+ {0xA7BB,0xA7EB},
+ {0xA7BC,0xA7EC},
+ {0xA7BD,0xA7ED},
+ {0xA7BE,0xA7EE},
+ {0xA7BF,0xA7EF},
+ {0xA7C0,0xA7F0}, /* A7F0 */
+ {0xA7C1,0xA7F1},
+ {0xA7F2,0xA7F2},
+ {0xA7F3,0xA7F3},
+ {0xA7F4,0xA7F4},
+ {0xA7F5,0xA7F5},
+ {0xA7F6,0xA7F6},
+ {0xA7F7,0xA7F7},
+ {0xA7F8,0xA7F8},
+ {0xA7F9,0xA7F9},
+ {0xA7FA,0xA7FA},
+ {0xA7FB,0xA7FB},
+ {0xA7FC,0xA7FC},
+ {0xA7FD,0xA7FD},
+ {0xA7FE,0xA7FE},
+ {0xA7FF,0xA7FF}
};
-static MY_UNICASE_CHARACTER *my_caseinfo_pages_gbk[256]=
+static const MY_CASEFOLD_CHARACTER *my_casefold_pages_gbk[256]=
{
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 0 */
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
@@ -1003,10 +1003,11 @@ static MY_UNICASE_CHARACTER *my_caseinfo_pages_gbk[256]=
};
-static MY_UNICASE_INFO my_caseinfo_gbk=
+static MY_CASEFOLD_INFO my_casefold_gbk=
{
0xFFFF,
- my_caseinfo_pages_gbk
+ my_casefold_pages_gbk,
+ NULL /* ws */
};
@@ -10660,7 +10661,9 @@ static MY_COLLATION_HANDLER my_collation_handler_gbk_chinese_ci=
my_hash_sort_simple,
my_propagate_simple,
my_min_str_mb_simple,
- my_max_str_mb_simple
+ my_max_str_mb_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
@@ -10679,7 +10682,9 @@ static MY_COLLATION_HANDLER my_collation_handler_gbk_bin=
my_hash_sort_mb_bin,
my_propagate_simple,
my_min_str_mb_simple,
- my_max_str_mb_simple
+ my_max_str_mb_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
@@ -10698,7 +10703,9 @@ static MY_COLLATION_HANDLER my_collation_handler_gbk_chinese_nopad_ci=
my_hash_sort_simple_nopad,
my_propagate_simple,
my_min_str_mb_simple_nopad,
- my_max_str_mb_simple
+ my_max_str_mb_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
@@ -10717,7 +10724,9 @@ static MY_COLLATION_HANDLER my_collation_handler_gbk_nopad_bin=
my_hash_sort_mb_nopad_bin,
my_propagate_simple,
my_min_str_mb_simple_nopad,
- my_max_str_mb_simple
+ my_max_str_mb_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
static MY_CHARSET_HANDLER my_charset_handler=
@@ -10750,7 +10759,9 @@ static MY_CHARSET_HANDLER my_charset_handler=
my_well_formed_char_length_gbk,
my_copy_fix_mb,
my_native_to_mb_gbk,
- my_wc_to_printable_generic
+ my_wc_to_printable_generic,
+ my_casefold_multiply_1,
+ my_casefold_multiply_1
};
@@ -10769,19 +10780,17 @@ struct charset_info_st my_charset_gbk_chinese_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_caseinfo_gbk, /* caseinfo */
+ &my_casefold_gbk, /* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
2, /* mbmaxlen */
0, /* min_sort_char */
0xA967, /* max_sort_char */
' ', /* pad char */
1, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_handler,
&my_collation_handler_gbk_chinese_ci
};
@@ -10801,19 +10810,17 @@ struct charset_info_st my_charset_gbk_bin=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_caseinfo_gbk, /* caseinfo */
+ &my_casefold_gbk, /* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
2, /* mbmaxlen */
0, /* min_sort_char */
0xFEFE, /* max_sort_char */
' ', /* pad char */
1, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_handler,
&my_collation_handler_gbk_bin
};
@@ -10834,19 +10841,17 @@ struct charset_info_st my_charset_gbk_chinese_nopad_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_caseinfo_gbk, /* caseinfo */
+ &my_casefold_gbk, /* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
2, /* mbmaxlen */
0, /* min_sort_char */
0xA967, /* max_sort_char */
' ', /* pad char */
1, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_handler,
&my_collation_handler_gbk_chinese_nopad_ci
};
@@ -10866,19 +10871,17 @@ struct charset_info_st my_charset_gbk_nopad_bin=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_caseinfo_gbk, /* caseinfo */
+ &my_casefold_gbk, /* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
2, /* mbmaxlen */
0, /* min_sort_char */
0xFEFE, /* max_sort_char */
' ', /* pad char */
1, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_handler,
&my_collation_handler_gbk_nopad_bin
};
diff --git a/strings/ctype-latin1.c b/strings/ctype-latin1.c
index 33dd369657f..5d763c6a561 100644
--- a/strings/ctype-latin1.c
+++ b/strings/ctype-latin1.c
@@ -427,7 +427,9 @@ static MY_CHARSET_HANDLER my_charset_handler=
my_well_formed_char_length_8bit,
my_copy_8bit,
my_wc_mb_bin, /* native_to_mb */
- my_wc_to_printable_generic
+ my_wc_to_printable_generic,
+ my_casefold_multiply_1,
+ my_casefold_multiply_1
};
@@ -446,19 +448,17 @@ struct charset_info_st my_charset_latin1=
NULL, /* uca */
cs_to_uni, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ NULL, /* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_handler,
&my_collation_8bit_simple_ci_handler
};
@@ -479,19 +479,17 @@ struct charset_info_st my_charset_latin1_nopad=
NULL, /* uca */
cs_to_uni, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_handler,
&my_collation_8bit_simple_nopad_ci_handler
};
@@ -741,7 +739,9 @@ static MY_COLLATION_HANDLER my_collation_german2_ci_handler=
my_hash_sort_latin1_de,
my_propagate_complex,
my_min_str_8bit_simple,
- my_max_str_8bit_simple
+ my_max_str_8bit_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
@@ -760,19 +760,17 @@ struct charset_info_st my_charset_latin1_german2_ci=
NULL, /* uca */
cs_to_uni, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state_map */
NULL, /* ident_map */
2, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
247, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_handler,
&my_collation_german2_ci_handler
};
@@ -793,19 +791,17 @@ struct charset_info_st my_charset_latin1_bin=
NULL, /* uca */
cs_to_uni, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_handler,
&my_collation_8bit_bin_handler
};
@@ -826,19 +822,17 @@ struct charset_info_st my_charset_latin1_nopad_bin=
NULL, /* uca */
cs_to_uni, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_handler,
&my_collation_8bit_nopad_bin_handler
};
diff --git a/strings/ctype-mb.c b/strings/ctype-mb.c
index a5951e31906..88dd36312ea 100644
--- a/strings/ctype-mb.c
+++ b/strings/ctype-mb.c
@@ -63,11 +63,11 @@ size_t my_casedn_str_mb(CHARSET_INFO * cs, char *str)
}
-static inline MY_UNICASE_CHARACTER*
+static inline const MY_CASEFOLD_CHARACTER*
get_case_info_for_ch(CHARSET_INFO *cs, uint page, uint offs)
{
- MY_UNICASE_CHARACTER *p;
- return cs->caseinfo && (p= cs->caseinfo->page[page]) ? &p[offs] : NULL;
+ const MY_CASEFOLD_CHARACTER *p;
+ return cs->casefold && (p= cs->casefold->page[page]) ? &p[offs] : NULL;
}
@@ -97,7 +97,7 @@ my_casefold_mb(CHARSET_INFO *cs,
size_t mblen= my_ismbchar(cs, src, srcend);
if (mblen)
{
- MY_UNICASE_CHARACTER *ch;
+ const MY_CASEFOLD_CHARACTER *ch;
if ((ch= get_case_info_for_ch(cs, (uchar) src[0], (uchar) src[1])))
{
int code= is_upper ? ch->toupper : ch->tolower;
@@ -125,8 +125,8 @@ size_t
my_casedn_mb(CHARSET_INFO * cs, const char *src, size_t srclen,
char *dst, size_t dstlen)
{
- DBUG_ASSERT(dstlen >= srclen * cs->casedn_multiply);
- DBUG_ASSERT(src != dst || cs->casedn_multiply == 1);
+ DBUG_ASSERT(dstlen >= srclen * cs->cset->casedn_multiply(cs));
+ DBUG_ASSERT(src != dst || cs->cset->casedn_multiply(cs) == 1);
return my_casefold_mb(cs, src, srclen, dst, dstlen, cs->to_lower, 0);
}
@@ -135,8 +135,8 @@ size_t
my_caseup_mb(CHARSET_INFO * cs, const char *src, size_t srclen,
char *dst, size_t dstlen)
{
- DBUG_ASSERT(dstlen >= srclen * cs->caseup_multiply);
- DBUG_ASSERT(src != dst || cs->caseup_multiply == 1);
+ DBUG_ASSERT(dstlen >= srclen * cs->cset->caseup_multiply(cs));
+ DBUG_ASSERT(src != dst || cs->cset->caseup_multiply(cs) == 1);
return my_casefold_mb(cs, src, srclen, dst, dstlen, cs->to_upper, 1);
}
diff --git a/strings/ctype-simple.c b/strings/ctype-simple.c
index f20b3b7f294..16ab99b31de 100644
--- a/strings/ctype-simple.c
+++ b/strings/ctype-simple.c
@@ -21,6 +21,7 @@
#include <errno.h>
#include "stdarg.h"
+#include "my_bit.h"
/*
Returns the number of bytes required for strnxfrm().
@@ -1486,8 +1487,6 @@ static my_bool
my_cset_init_8bit(struct charset_info_st *cs, MY_CHARSET_LOADER *loader)
{
cs->state|= my_8bit_charset_flags_from_data(cs);
- cs->caseup_multiply= 1;
- cs->casedn_multiply= 1;
cs->pad_char= ' ';
if (!cs->to_lower || !cs->to_upper || !cs->m_ctype || !cs->tab_to_uni)
return TRUE;
@@ -1941,13 +1940,27 @@ my_bool my_propagate_complex(CHARSET_INFO *cs __attribute__((unused)),
}
+void my_ci_set_strength(struct charset_info_st *cs, uint strength)
+{
+ DBUG_ASSERT(strength > 0);
+ DBUG_ASSERT(strength <= MY_STRXFRM_NLEVELS);
+ cs->levels_for_order= ((1 << strength) - 1);
+}
+
+
+void my_ci_set_level_flags(struct charset_info_st *cs, uint flags)
+{
+ DBUG_ASSERT(flags < (1<<MY_STRXFRM_NLEVELS));
+ cs->levels_for_order= flags;
+}
+
/*
Normalize strxfrm flags
SYNOPSIS:
my_strxfrm_flag_normalize()
+ cs - the CHARSET_INFO pointer
flags - non-normalized flags
- nlevels - number of levels
NOTES:
If levels are omitted, then 1-maximum is assumed.
@@ -1958,8 +1971,9 @@ my_bool my_propagate_complex(CHARSET_INFO *cs __attribute__((unused)),
normalized flags
*/
-uint my_strxfrm_flag_normalize(uint flags, uint maximum)
+uint my_strxfrm_flag_normalize(CHARSET_INFO *cs, uint flags)
{
+ uint maximum= my_bit_log2_uint32(cs->levels_for_order) + 1;
DBUG_ASSERT(maximum >= 1 && maximum <= MY_STRXFRM_NLEVELS);
/* If levels are omitted, then 1-maximum is assumed*/
@@ -2132,7 +2146,9 @@ MY_CHARSET_HANDLER my_charset_8bit_handler=
my_well_formed_char_length_8bit,
my_copy_8bit,
my_wc_mb_bin, /* native_to_mb */
- my_wc_to_printable_8bit
+ my_wc_to_printable_8bit,
+ my_casefold_multiply_1,
+ my_casefold_multiply_1
};
MY_COLLATION_HANDLER my_collation_8bit_simple_ci_handler =
@@ -2150,7 +2166,9 @@ MY_COLLATION_HANDLER my_collation_8bit_simple_ci_handler =
my_hash_sort_simple,
my_propagate_simple,
my_min_str_8bit_simple,
- my_max_str_8bit_simple
+ my_max_str_8bit_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
@@ -2169,5 +2187,7 @@ MY_COLLATION_HANDLER my_collation_8bit_simple_nopad_ci_handler =
my_hash_sort_simple_nopad,
my_propagate_simple,
my_min_str_8bit_simple_nopad,
- my_max_str_8bit_simple
+ my_max_str_8bit_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
diff --git a/strings/ctype-sjis.c b/strings/ctype-sjis.c
index c3e64ce0d11..a5fed41b964 100644
--- a/strings/ctype-sjis.c
+++ b/strings/ctype-sjis.c
@@ -198,845 +198,845 @@ static const uchar sort_order_sjis[]=
#define sjiscode(c,d) ((((uint) (uchar)(c)) << 8) | (uint) (uchar) (d))
-static MY_UNICASE_CHARACTER c81[256]=
+static const MY_CASEFOLD_CHARACTER c81[256]=
{
/* 8100-810F */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
/* 8110-811F */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
/* 8120-812F */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
/* 8130-813F */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
- {0x8140,0x8140,0x3000}, /* 8140-814F */
- {0x8141,0x8141,0x3001},
- {0x8142,0x8142,0x3002},
- {0x8143,0x8143,0xFF0C},
- {0x8144,0x8144,0xFF0E},
- {0x8145,0x8145,0x30FB},
- {0x8146,0x8146,0xFF1A},
- {0x8147,0x8147,0xFF1B},
- {0x8148,0x8148,0xFF1F},
- {0x8149,0x8149,0xFF01},
- {0x814A,0x814A,0x309B},
- {0x814B,0x814B,0x309C},
- {0x814C,0x814C,0x00B4},
- {0x814D,0x814D,0xFF40},
- {0x814E,0x814E,0x00A8},
- {0x814F,0x814F,0xFF3E},
- {0x8150,0x8150,0xFFE3}, /* 8150-815F */
- {0x8151,0x8151,0xFF3F},
- {0x8152,0x8152,0x30FD},
- {0x8153,0x8153,0x30FE},
- {0x8154,0x8154,0x309D},
- {0x8155,0x8155,0x309E},
- {0x8156,0x8156,0x3003},
- {0x8157,0x8157,0x4EDD},
- {0x8158,0x8158,0x3005},
- {0x8159,0x8159,0x3006},
- {0x815A,0x815A,0x3007},
- {0x815B,0x815B,0x30FC},
- {0x815C,0x815C,0x2015},
- {0x815D,0x815D,0x2010},
- {0x815E,0x815E,0xFF0F},
- {0x815F,0x815F,0xFF3C},
- {0x8160,0x8160,0xFF5E}, /* 8160-816F */
- {0x8161,0x8161,0x2225},
- {0x8162,0x8162,0xFF5C},
- {0x8163,0x8163,0x2026},
- {0x8164,0x8164,0x2025},
- {0x8165,0x8165,0x2018},
- {0x8166,0x8166,0x2019},
- {0x8167,0x8167,0x201C},
- {0x8168,0x8168,0x201D},
- {0x8169,0x8169,0xFF08},
- {0x816A,0x816A,0xFF09},
- {0x816B,0x816B,0x3014},
- {0x816C,0x816C,0x3015},
- {0x816D,0x816D,0xFF3B},
- {0x816E,0x816E,0xFF3D},
- {0x816F,0x816F,0xFF5B},
- {0x8170,0x8170,0xFF5D}, /* 8170-817F */
- {0x8171,0x8171,0x3008},
- {0x8172,0x8172,0x3009},
- {0x8173,0x8173,0x300A},
- {0x8174,0x8174,0x300B},
- {0x8175,0x8175,0x300C},
- {0x8176,0x8176,0x300D},
- {0x8177,0x8177,0x300E},
- {0x8178,0x8178,0x300F},
- {0x8179,0x8179,0x3010},
- {0x817A,0x817A,0x3011},
- {0x817B,0x817B,0xFF0B},
- {0x817C,0x817C,0xFF0D},
- {0x817D,0x817D,0x00B1},
- {0x817E,0x817E,0x00D7},
- {0,0,0},
- {0x8180,0x8180,0x00F7}, /* 8180-818F */
- {0x8181,0x8181,0xFF1D},
- {0x8182,0x8182,0x2260},
- {0x8183,0x8183,0xFF1C},
- {0x8184,0x8184,0xFF1E},
- {0x8185,0x8185,0x2266},
- {0x8186,0x8186,0x2267},
- {0x8187,0x8187,0x221E},
- {0x8188,0x8188,0x2234},
- {0x8189,0x8189,0x2642},
- {0x818A,0x818A,0x2640},
- {0x818B,0x818B,0x00B0},
- {0x818C,0x818C,0x2032},
- {0x818D,0x818D,0x2033},
- {0x818E,0x818E,0x2103},
- {0x818F,0x818F,0xFFE5},
- {0x8190,0x8190,0xFF04}, /* 8190-819F*/
- {0x8191,0x8191,0xFFE0},
- {0x8192,0x8192,0xFFE1},
- {0x8193,0x8193,0xFF05},
- {0x8194,0x8194,0xFF03},
- {0x8195,0x8195,0xFF06},
- {0x8196,0x8196,0xFF0A},
- {0x8197,0x8197,0xFF20},
- {0x8198,0x8198,0x00A7},
- {0x8199,0x8199,0x2606},
- {0x819A,0x819A,0x2605},
- {0x819B,0x819B,0x25CB},
- {0x819C,0x819C,0x25CF},
- {0x819D,0x819D,0x25CE},
- {0x819E,0x819E,0x25C7},
- {0x819F,0x819F,0x25C6},
- {0x81A0,0x81A0,0x25A1}, /* 81A0-81AF */
- {0x81A1,0x81A1,0x25A0},
- {0x81A2,0x81A2,0x25B3},
- {0x81A3,0x81A3,0x25B2},
- {0x81A4,0x81A4,0x25BD},
- {0x81A5,0x81A5,0x25BC},
- {0x81A6,0x81A6,0x203B},
- {0x81A7,0x81A7,0x3012},
- {0x81A8,0x81A8,0x2192},
- {0x81A9,0x81A9,0x2190},
- {0x81AA,0x81AA,0x2191},
- {0x81AB,0x81AB,0x2193},
- {0x81AC,0x81AC,0x3013},
- {0x81AD,0x81AD,0x003F},
- {0x81AE,0x81AE,0x003F},
- {0x81AF,0x81AF,0x003F},
- {0x81B0,0x81B0,0x003F}, /* 81B0-81BF */
- {0x81B1,0x81B1,0x003F},
- {0x81B2,0x81B2,0x003F},
- {0x81B3,0x81B3,0x003F},
- {0x81B4,0x81B4,0x003F},
- {0x81B5,0x81B5,0x003F},
- {0x81B6,0x81B6,0x003F},
- {0x81B7,0x81B7,0x003F},
- {0x81B8,0x81B8,0x2208},
- {0x81B9,0x81B9,0x220B},
- {0x81BA,0x81BA,0x2286},
- {0x81BB,0x81BB,0x2287},
- {0x81BC,0x81BC,0x2282},
- {0x81BD,0x81BD,0x2283},
- {0x81BE,0x81BE,0x222A},
- {0x81BF,0x81BF,0x2229},
- {0x81C0,0x81C0,0x003F}, /* 81C0-81CF */
- {0x81C1,0x81C1,0x003F},
- {0x81C2,0x81C2,0x003F},
- {0x81C3,0x81C3,0x003F},
- {0x81C4,0x81C4,0x003F},
- {0x81C5,0x81C5,0x003F},
- {0x81C6,0x81C6,0x003F},
- {0x81C7,0x81C7,0x003F},
- {0x81C8,0x81C8,0x2227},
- {0x81C9,0x81C9,0x2228},
- {0x81CA,0x81CA,0xFFE2},
- {0x81CB,0x81CB,0x21D2},
- {0x81CC,0x81CC,0x21D4},
- {0x81CD,0x81CD,0x2200},
- {0x81CE,0x81CE,0x2203},
- {0x81CF,0x81CF,0x003F},
- {0x81D0,0x81D0,0x003F}, /* 81D0-81DF */
- {0x81D1,0x81D1,0x003F},
- {0x81D2,0x81D2,0x003F},
- {0x81D3,0x81D3,0x003F},
- {0x81D4,0x81D4,0x003F},
- {0x81D5,0x81D5,0x003F},
- {0x81D6,0x81D6,0x003F},
- {0x81D7,0x81D7,0x003F},
- {0x81D8,0x81D8,0x003F},
- {0x81D9,0x81D9,0x003F},
- {0x81DA,0x81DA,0x2220},
- {0x81DB,0x81DB,0x22A5},
- {0x81DC,0x81DC,0x2312},
- {0x81DD,0x81DD,0x2202},
- {0x81DE,0x81DE,0x2207},
- {0x81DF,0x81DF,0x2261},
- {0x81E0,0x81E0,0x2252}, /* 81E0-81EF */
- {0x81E1,0x81E1,0x226A},
- {0x81E2,0x81E2,0x226B},
- {0x81E3,0x81E3,0x221A},
- {0x81E4,0x81E4,0x223D},
- {0x81E5,0x81E5,0x221D},
- {0x81E6,0x81E6,0x2235},
- {0x81E7,0x81E7,0x222B},
- {0x81E8,0x81E8,0x222C},
- {0x81E9,0x81E9,0x003F},
- {0x81EA,0x81EA,0x003F},
- {0x81EB,0x81EB,0x003F},
- {0x81EC,0x81EC,0x003F},
- {0x81ED,0x81ED,0x003F},
- {0x81EE,0x81EE,0x003F},
- {0x81EF,0x81EF,0x003F},
- {0x81F0,0x81F0,0x212B}, /* 81F0-81FF */
- {0x81F1,0x81F1,0x2030},
- {0x81F2,0x81F2,0x266F},
- {0x81F3,0x81F3,0x266D},
- {0x81F4,0x81F4,0x266A},
- {0x81F5,0x81F5,0x2020},
- {0x81F6,0x81F6,0x2021},
- {0x81F7,0x81F7,0x00B6},
- {0x81F8,0x81F8,0x003F},
- {0x81F9,0x81F9,0x003F},
- {0x81FA,0x81FA,0x003F},
- {0x81FB,0x81FB,0x003F},
- {0x81FC,0x81FC,0x25EF},
- {0,0,0},
- {0,0,0},
- {0,0,0},
+ {0x8140,0x8140}, /* 8140-814F */
+ {0x8141,0x8141},
+ {0x8142,0x8142},
+ {0x8143,0x8143},
+ {0x8144,0x8144},
+ {0x8145,0x8145},
+ {0x8146,0x8146},
+ {0x8147,0x8147},
+ {0x8148,0x8148},
+ {0x8149,0x8149},
+ {0x814A,0x814A},
+ {0x814B,0x814B},
+ {0x814C,0x814C},
+ {0x814D,0x814D},
+ {0x814E,0x814E},
+ {0x814F,0x814F},
+ {0x8150,0x8150}, /* 8150-815F */
+ {0x8151,0x8151},
+ {0x8152,0x8152},
+ {0x8153,0x8153},
+ {0x8154,0x8154},
+ {0x8155,0x8155},
+ {0x8156,0x8156},
+ {0x8157,0x8157},
+ {0x8158,0x8158},
+ {0x8159,0x8159},
+ {0x815A,0x815A},
+ {0x815B,0x815B},
+ {0x815C,0x815C},
+ {0x815D,0x815D},
+ {0x815E,0x815E},
+ {0x815F,0x815F},
+ {0x8160,0x8160}, /* 8160-816F */
+ {0x8161,0x8161},
+ {0x8162,0x8162},
+ {0x8163,0x8163},
+ {0x8164,0x8164},
+ {0x8165,0x8165},
+ {0x8166,0x8166},
+ {0x8167,0x8167},
+ {0x8168,0x8168},
+ {0x8169,0x8169},
+ {0x816A,0x816A},
+ {0x816B,0x816B},
+ {0x816C,0x816C},
+ {0x816D,0x816D},
+ {0x816E,0x816E},
+ {0x816F,0x816F},
+ {0x8170,0x8170}, /* 8170-817F */
+ {0x8171,0x8171},
+ {0x8172,0x8172},
+ {0x8173,0x8173},
+ {0x8174,0x8174},
+ {0x8175,0x8175},
+ {0x8176,0x8176},
+ {0x8177,0x8177},
+ {0x8178,0x8178},
+ {0x8179,0x8179},
+ {0x817A,0x817A},
+ {0x817B,0x817B},
+ {0x817C,0x817C},
+ {0x817D,0x817D},
+ {0x817E,0x817E},
+ {0,0},
+ {0x8180,0x8180}, /* 8180-818F */
+ {0x8181,0x8181},
+ {0x8182,0x8182},
+ {0x8183,0x8183},
+ {0x8184,0x8184},
+ {0x8185,0x8185},
+ {0x8186,0x8186},
+ {0x8187,0x8187},
+ {0x8188,0x8188},
+ {0x8189,0x8189},
+ {0x818A,0x818A},
+ {0x818B,0x818B},
+ {0x818C,0x818C},
+ {0x818D,0x818D},
+ {0x818E,0x818E},
+ {0x818F,0x818F},
+ {0x8190,0x8190}, /* 8190-819F*/
+ {0x8191,0x8191},
+ {0x8192,0x8192},
+ {0x8193,0x8193},
+ {0x8194,0x8194},
+ {0x8195,0x8195},
+ {0x8196,0x8196},
+ {0x8197,0x8197},
+ {0x8198,0x8198},
+ {0x8199,0x8199},
+ {0x819A,0x819A},
+ {0x819B,0x819B},
+ {0x819C,0x819C},
+ {0x819D,0x819D},
+ {0x819E,0x819E},
+ {0x819F,0x819F},
+ {0x81A0,0x81A0}, /* 81A0-81AF */
+ {0x81A1,0x81A1},
+ {0x81A2,0x81A2},
+ {0x81A3,0x81A3},
+ {0x81A4,0x81A4},
+ {0x81A5,0x81A5},
+ {0x81A6,0x81A6},
+ {0x81A7,0x81A7},
+ {0x81A8,0x81A8},
+ {0x81A9,0x81A9},
+ {0x81AA,0x81AA},
+ {0x81AB,0x81AB},
+ {0x81AC,0x81AC},
+ {0x81AD,0x81AD},
+ {0x81AE,0x81AE},
+ {0x81AF,0x81AF},
+ {0x81B0,0x81B0}, /* 81B0-81BF */
+ {0x81B1,0x81B1},
+ {0x81B2,0x81B2},
+ {0x81B3,0x81B3},
+ {0x81B4,0x81B4},
+ {0x81B5,0x81B5},
+ {0x81B6,0x81B6},
+ {0x81B7,0x81B7},
+ {0x81B8,0x81B8},
+ {0x81B9,0x81B9},
+ {0x81BA,0x81BA},
+ {0x81BB,0x81BB},
+ {0x81BC,0x81BC},
+ {0x81BD,0x81BD},
+ {0x81BE,0x81BE},
+ {0x81BF,0x81BF},
+ {0x81C0,0x81C0}, /* 81C0-81CF */
+ {0x81C1,0x81C1},
+ {0x81C2,0x81C2},
+ {0x81C3,0x81C3},
+ {0x81C4,0x81C4},
+ {0x81C5,0x81C5},
+ {0x81C6,0x81C6},
+ {0x81C7,0x81C7},
+ {0x81C8,0x81C8},
+ {0x81C9,0x81C9},
+ {0x81CA,0x81CA},
+ {0x81CB,0x81CB},
+ {0x81CC,0x81CC},
+ {0x81CD,0x81CD},
+ {0x81CE,0x81CE},
+ {0x81CF,0x81CF},
+ {0x81D0,0x81D0}, /* 81D0-81DF */
+ {0x81D1,0x81D1},
+ {0x81D2,0x81D2},
+ {0x81D3,0x81D3},
+ {0x81D4,0x81D4},
+ {0x81D5,0x81D5},
+ {0x81D6,0x81D6},
+ {0x81D7,0x81D7},
+ {0x81D8,0x81D8},
+ {0x81D9,0x81D9},
+ {0x81DA,0x81DA},
+ {0x81DB,0x81DB},
+ {0x81DC,0x81DC},
+ {0x81DD,0x81DD},
+ {0x81DE,0x81DE},
+ {0x81DF,0x81DF},
+ {0x81E0,0x81E0}, /* 81E0-81EF */
+ {0x81E1,0x81E1},
+ {0x81E2,0x81E2},
+ {0x81E3,0x81E3},
+ {0x81E4,0x81E4},
+ {0x81E5,0x81E5},
+ {0x81E6,0x81E6},
+ {0x81E7,0x81E7},
+ {0x81E8,0x81E8},
+ {0x81E9,0x81E9},
+ {0x81EA,0x81EA},
+ {0x81EB,0x81EB},
+ {0x81EC,0x81EC},
+ {0x81ED,0x81ED},
+ {0x81EE,0x81EE},
+ {0x81EF,0x81EF},
+ {0x81F0,0x81F0}, /* 81F0-81FF */
+ {0x81F1,0x81F1},
+ {0x81F2,0x81F2},
+ {0x81F3,0x81F3},
+ {0x81F4,0x81F4},
+ {0x81F5,0x81F5},
+ {0x81F6,0x81F6},
+ {0x81F7,0x81F7},
+ {0x81F8,0x81F8},
+ {0x81F9,0x81F9},
+ {0x81FA,0x81FA},
+ {0x81FB,0x81FB},
+ {0x81FC,0x81FC},
+ {0,0},
+ {0,0},
+ {0,0},
};
-static MY_UNICASE_CHARACTER c82[256]=
+static const MY_CASEFOLD_CHARACTER c82[256]=
{
/* 8200-820F */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
/* 8210-821F */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
/* 8220-822F */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
/* 8230-823F */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
- {0x8240,0x8240,0x003F}, /* 8240-824F */
- {0x8241,0x8241,0x003F},
- {0x8242,0x8242,0x003F},
- {0x8243,0x8243,0x003F},
- {0x8244,0x8244,0x003F},
- {0x8245,0x8245,0x003F},
- {0x8246,0x8246,0x003F},
- {0x8247,0x8247,0x003F},
- {0x8248,0x8248,0x003F},
- {0x8249,0x8249,0x003F},
- {0x824A,0x824A,0x003F},
- {0x824B,0x824B,0x003F},
- {0x824C,0x824C,0x003F},
- {0x824D,0x824D,0x003F},
- {0x824E,0x824E,0x003F},
- {0x824F,0x824F,0xFF10},
- {0x8250,0x8250,0xFF11}, /* 8250-825F */
- {0x8251,0x8251,0xFF12},
- {0x8252,0x8252,0xFF13},
- {0x8253,0x8253,0xFF14},
- {0x8254,0x8254,0xFF15},
- {0x8255,0x8255,0xFF16},
- {0x8256,0x8256,0xFF17},
- {0x8257,0x8257,0xFF18},
- {0x8258,0x8258,0xFF19},
- {0x8259,0x8259,0x003F},
- {0x825A,0x825A,0x003F},
- {0x825B,0x825B,0x003F},
- {0x825C,0x825C,0x003F},
- {0x825D,0x825D,0x003F},
- {0x825E,0x825E,0x003F},
- {0x825F,0x825F,0x003F},
- {0x8260,0x8281,0xFF21}, /* 8260-826F */
- {0x8261,0x8282,0xFF22},
- {0x8262,0x8283,0xFF23},
- {0x8263,0x8284,0xFF24},
- {0x8264,0x8285,0xFF25},
- {0x8265,0x8286,0xFF26},
- {0x8266,0x8287,0xFF27},
- {0x8267,0x8288,0xFF28},
- {0x8268,0x8289,0xFF29},
- {0x8269,0x828A,0xFF2A},
- {0x826A,0x828B,0xFF2B},
- {0x826B,0x828C,0xFF2C},
- {0x826C,0x828D,0xFF2D},
- {0x826D,0x828E,0xFF2E},
- {0x826E,0x828F,0xFF2F},
- {0x826F,0x8290,0xFF30},
- {0x8270,0x8291,0xFF31}, /* 8270-827F */
- {0x8271,0x8292,0xFF32},
- {0x8272,0x8293,0xFF33},
- {0x8273,0x8294,0xFF34},
- {0x8274,0x8295,0xFF35},
- {0x8275,0x8296,0xFF36},
- {0x8276,0x8297,0xFF37},
- {0x8277,0x8298,0xFF38},
- {0x8278,0x8299,0xFF39},
- {0x8279,0x829A,0xFF3A},
- {0x827A,0x827A,0x003F},
- {0x827B,0x827B,0x003F},
- {0x827C,0x827C,0x003F},
- {0x827D,0x827D,0x003F},
- {0x827E,0x827E,0x003F},
- {0,0,0},
- {0x8280,0x8280,0x003F}, /* 8280-828F */
- {0x8260,0x8281,0xFF41},
- {0x8261,0x8282,0xFF42},
- {0x8262,0x8283,0xFF43},
- {0x8263,0x8284,0xFF44},
- {0x8264,0x8285,0xFF45},
- {0x8265,0x8286,0xFF46},
- {0x8266,0x8287,0xFF47},
- {0x8267,0x8288,0xFF48},
- {0x8268,0x8289,0xFF49},
- {0x8269,0x828A,0xFF4A},
- {0x826A,0x828B,0xFF4B},
- {0x826B,0x828C,0xFF4C},
- {0x826C,0x828D,0xFF4D},
- {0x826D,0x828E,0xFF4E},
- {0x826E,0x828F,0xFF4F},
- {0x826F,0x8290,0xFF50}, /* 8290-829F */
- {0x8270,0x8291,0xFF51},
- {0x8271,0x8292,0xFF52},
- {0x8272,0x8293,0xFF53},
- {0x8273,0x8294,0xFF54},
- {0x8274,0x8295,0xFF55},
- {0x8275,0x8296,0xFF56},
- {0x8276,0x8297,0xFF57},
- {0x8277,0x8298,0xFF58},
- {0x8278,0x8299,0xFF59},
- {0x8279,0x829A,0xFF5A},
- {0x829B,0x829B,0x003F},
- {0x829C,0x829C,0x003F},
- {0x829D,0x829D,0x003F},
- {0x829E,0x829E,0x003F},
- {0x829F,0x829F,0x3041},
- {0x82A0,0x82A0,0x3042}, /* 82A0-82AF */
- {0x82A1,0x82A1,0x3043},
- {0x82A2,0x82A2,0x3044},
- {0x82A3,0x82A3,0x3045},
- {0x82A4,0x82A4,0x3046},
- {0x82A5,0x82A5,0x3047},
- {0x82A6,0x82A6,0x3048},
- {0x82A7,0x82A7,0x3049},
- {0x82A8,0x82A8,0x304A},
- {0x82A9,0x82A9,0x304B},
- {0x82AA,0x82AA,0x304C},
- {0x82AB,0x82AB,0x304D},
- {0x82AC,0x82AC,0x304E},
- {0x82AD,0x82AD,0x304F},
- {0x82AE,0x82AE,0x3050},
- {0x82AF,0x82AF,0x3051},
- {0x82B0,0x82B0,0x3052}, /* 82B0-82BF */
- {0x82B1,0x82B1,0x3053},
- {0x82B2,0x82B2,0x3054},
- {0x82B3,0x82B3,0x3055},
- {0x82B4,0x82B4,0x3056},
- {0x82B5,0x82B5,0x3057},
- {0x82B6,0x82B6,0x3058},
- {0x82B7,0x82B7,0x3059},
- {0x82B8,0x82B8,0x305A},
- {0x82B9,0x82B9,0x305B},
- {0x82BA,0x82BA,0x305C},
- {0x82BB,0x82BB,0x305D},
- {0x82BC,0x82BC,0x305E},
- {0x82BD,0x82BD,0x305F},
- {0x82BE,0x82BE,0x3060},
- {0x82BF,0x82BF,0x3061},
- {0x82C0,0x82C0,0x3062}, /* 82C0-82CF */
- {0x82C1,0x82C1,0x3063},
- {0x82C2,0x82C2,0x3064},
- {0x82C3,0x82C3,0x3065},
- {0x82C4,0x82C4,0x3066},
- {0x82C5,0x82C5,0x3067},
- {0x82C6,0x82C6,0x3068},
- {0x82C7,0x82C7,0x3069},
- {0x82C8,0x82C8,0x306A},
- {0x82C9,0x82C9,0x306B},
- {0x82CA,0x82CA,0x306C},
- {0x82CB,0x82CB,0x306D},
- {0x82CC,0x82CC,0x306E},
- {0x82CD,0x82CD,0x306F},
- {0x82CE,0x82CE,0x3070},
- {0x82CF,0x82CF,0x3071},
- {0x82D0,0x82D0,0x3072}, /* 82D0-82DF */
- {0x82D1,0x82D1,0x3073},
- {0x82D2,0x82D2,0x3074},
- {0x82D3,0x82D3,0x3075},
- {0x82D4,0x82D4,0x3076},
- {0x82D5,0x82D5,0x3077},
- {0x82D6,0x82D6,0x3078},
- {0x82D7,0x82D7,0x3079},
- {0x82D8,0x82D8,0x307A},
- {0x82D9,0x82D9,0x307B},
- {0x82DA,0x82DA,0x307C},
- {0x82DB,0x82DB,0x307D},
- {0x82DC,0x82DC,0x307E},
- {0x82DD,0x82DD,0x307F},
- {0x82DE,0x82DE,0x3080},
- {0x82DF,0x82DF,0x3081},
- {0x82E0,0x82E0,0x3082}, /* 82E0-82EF */
- {0x82E1,0x82E1,0x3083},
- {0x82E2,0x82E2,0x3084},
- {0x82E3,0x82E3,0x3085},
- {0x82E4,0x82E4,0x3086},
- {0x82E5,0x82E5,0x3087},
- {0x82E6,0x82E6,0x3088},
- {0x82E7,0x82E7,0x3089},
- {0x82E8,0x82E8,0x308A},
- {0x82E9,0x82E9,0x308B},
- {0x82EA,0x82EA,0x308C},
- {0x82EB,0x82EB,0x308D},
- {0x82EC,0x82EC,0x308E},
- {0x82ED,0x82ED,0x308F},
- {0x82EE,0x82EE,0x3090},
- {0x82EF,0x82EF,0x3091},
- {0x82F0,0x82F0,0x3092}, /* 82F0-82FF */
- {0x82F1,0x82F1,0x3093},
- {0x82F2,0x82F2,0x003F},
- {0x82F3,0x82F3,0x003F},
- {0x82F4,0x82F4,0x003F},
- {0x82F5,0x82F5,0x003F},
- {0x82F6,0x82F6,0x003F},
- {0x82F7,0x82F7,0x003F},
- {0x82F8,0x82F8,0x003F},
- {0x82F9,0x82F9,0x003F},
- {0x82FA,0x82FA,0x003F},
- {0x82FB,0x82FB,0x003F},
- {0x82FC,0x82FC,0x003F},
- {0,0,0}
+ {0x8240,0x8240}, /* 8240-824F */
+ {0x8241,0x8241},
+ {0x8242,0x8242},
+ {0x8243,0x8243},
+ {0x8244,0x8244},
+ {0x8245,0x8245},
+ {0x8246,0x8246},
+ {0x8247,0x8247},
+ {0x8248,0x8248},
+ {0x8249,0x8249},
+ {0x824A,0x824A},
+ {0x824B,0x824B},
+ {0x824C,0x824C},
+ {0x824D,0x824D},
+ {0x824E,0x824E},
+ {0x824F,0x824F},
+ {0x8250,0x8250}, /* 8250-825F */
+ {0x8251,0x8251},
+ {0x8252,0x8252},
+ {0x8253,0x8253},
+ {0x8254,0x8254},
+ {0x8255,0x8255},
+ {0x8256,0x8256},
+ {0x8257,0x8257},
+ {0x8258,0x8258},
+ {0x8259,0x8259},
+ {0x825A,0x825A},
+ {0x825B,0x825B},
+ {0x825C,0x825C},
+ {0x825D,0x825D},
+ {0x825E,0x825E},
+ {0x825F,0x825F},
+ {0x8260,0x8281}, /* 8260-826F */
+ {0x8261,0x8282},
+ {0x8262,0x8283},
+ {0x8263,0x8284},
+ {0x8264,0x8285},
+ {0x8265,0x8286},
+ {0x8266,0x8287},
+ {0x8267,0x8288},
+ {0x8268,0x8289},
+ {0x8269,0x828A},
+ {0x826A,0x828B},
+ {0x826B,0x828C},
+ {0x826C,0x828D},
+ {0x826D,0x828E},
+ {0x826E,0x828F},
+ {0x826F,0x8290},
+ {0x8270,0x8291}, /* 8270-827F */
+ {0x8271,0x8292},
+ {0x8272,0x8293},
+ {0x8273,0x8294},
+ {0x8274,0x8295},
+ {0x8275,0x8296},
+ {0x8276,0x8297},
+ {0x8277,0x8298},
+ {0x8278,0x8299},
+ {0x8279,0x829A},
+ {0x827A,0x827A},
+ {0x827B,0x827B},
+ {0x827C,0x827C},
+ {0x827D,0x827D},
+ {0x827E,0x827E},
+ {0,0},
+ {0x8280,0x8280}, /* 8280-828F */
+ {0x8260,0x8281},
+ {0x8261,0x8282},
+ {0x8262,0x8283},
+ {0x8263,0x8284},
+ {0x8264,0x8285},
+ {0x8265,0x8286},
+ {0x8266,0x8287},
+ {0x8267,0x8288},
+ {0x8268,0x8289},
+ {0x8269,0x828A},
+ {0x826A,0x828B},
+ {0x826B,0x828C},
+ {0x826C,0x828D},
+ {0x826D,0x828E},
+ {0x826E,0x828F},
+ {0x826F,0x8290}, /* 8290-829F */
+ {0x8270,0x8291},
+ {0x8271,0x8292},
+ {0x8272,0x8293},
+ {0x8273,0x8294},
+ {0x8274,0x8295},
+ {0x8275,0x8296},
+ {0x8276,0x8297},
+ {0x8277,0x8298},
+ {0x8278,0x8299},
+ {0x8279,0x829A},
+ {0x829B,0x829B},
+ {0x829C,0x829C},
+ {0x829D,0x829D},
+ {0x829E,0x829E},
+ {0x829F,0x829F},
+ {0x82A0,0x82A0}, /* 82A0-82AF */
+ {0x82A1,0x82A1},
+ {0x82A2,0x82A2},
+ {0x82A3,0x82A3},
+ {0x82A4,0x82A4},
+ {0x82A5,0x82A5},
+ {0x82A6,0x82A6},
+ {0x82A7,0x82A7},
+ {0x82A8,0x82A8},
+ {0x82A9,0x82A9},
+ {0x82AA,0x82AA},
+ {0x82AB,0x82AB},
+ {0x82AC,0x82AC},
+ {0x82AD,0x82AD},
+ {0x82AE,0x82AE},
+ {0x82AF,0x82AF},
+ {0x82B0,0x82B0}, /* 82B0-82BF */
+ {0x82B1,0x82B1},
+ {0x82B2,0x82B2},
+ {0x82B3,0x82B3},
+ {0x82B4,0x82B4},
+ {0x82B5,0x82B5},
+ {0x82B6,0x82B6},
+ {0x82B7,0x82B7},
+ {0x82B8,0x82B8},
+ {0x82B9,0x82B9},
+ {0x82BA,0x82BA},
+ {0x82BB,0x82BB},
+ {0x82BC,0x82BC},
+ {0x82BD,0x82BD},
+ {0x82BE,0x82BE},
+ {0x82BF,0x82BF},
+ {0x82C0,0x82C0}, /* 82C0-82CF */
+ {0x82C1,0x82C1},
+ {0x82C2,0x82C2},
+ {0x82C3,0x82C3},
+ {0x82C4,0x82C4},
+ {0x82C5,0x82C5},
+ {0x82C6,0x82C6},
+ {0x82C7,0x82C7},
+ {0x82C8,0x82C8},
+ {0x82C9,0x82C9},
+ {0x82CA,0x82CA},
+ {0x82CB,0x82CB},
+ {0x82CC,0x82CC},
+ {0x82CD,0x82CD},
+ {0x82CE,0x82CE},
+ {0x82CF,0x82CF},
+ {0x82D0,0x82D0}, /* 82D0-82DF */
+ {0x82D1,0x82D1},
+ {0x82D2,0x82D2},
+ {0x82D3,0x82D3},
+ {0x82D4,0x82D4},
+ {0x82D5,0x82D5},
+ {0x82D6,0x82D6},
+ {0x82D7,0x82D7},
+ {0x82D8,0x82D8},
+ {0x82D9,0x82D9},
+ {0x82DA,0x82DA},
+ {0x82DB,0x82DB},
+ {0x82DC,0x82DC},
+ {0x82DD,0x82DD},
+ {0x82DE,0x82DE},
+ {0x82DF,0x82DF},
+ {0x82E0,0x82E0}, /* 82E0-82EF */
+ {0x82E1,0x82E1},
+ {0x82E2,0x82E2},
+ {0x82E3,0x82E3},
+ {0x82E4,0x82E4},
+ {0x82E5,0x82E5},
+ {0x82E6,0x82E6},
+ {0x82E7,0x82E7},
+ {0x82E8,0x82E8},
+ {0x82E9,0x82E9},
+ {0x82EA,0x82EA},
+ {0x82EB,0x82EB},
+ {0x82EC,0x82EC},
+ {0x82ED,0x82ED},
+ {0x82EE,0x82EE},
+ {0x82EF,0x82EF},
+ {0x82F0,0x82F0}, /* 82F0-82FF */
+ {0x82F1,0x82F1},
+ {0x82F2,0x82F2},
+ {0x82F3,0x82F3},
+ {0x82F4,0x82F4},
+ {0x82F5,0x82F5},
+ {0x82F6,0x82F6},
+ {0x82F7,0x82F7},
+ {0x82F8,0x82F8},
+ {0x82F9,0x82F9},
+ {0x82FA,0x82FA},
+ {0x82FB,0x82FB},
+ {0x82FC,0x82FC},
+ {0,0}
};
-static MY_UNICASE_CHARACTER c83[256]=
+static const MY_CASEFOLD_CHARACTER c83[256]=
{
/* 8300-830F */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
/* 8310-831F */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
/* 8320-832F */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
/* 8330-833F */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
- {0x8340,0x8340,0x30A1}, /* 8340 */
- {0x8341,0x8341,0x30A2},
- {0x8342,0x8342,0x30A3},
- {0x8343,0x8343,0x30A4},
- {0x8344,0x8344,0x30A5},
- {0x8345,0x8345,0x30A6},
- {0x8346,0x8346,0x30A7},
- {0x8347,0x8347,0x30A8},
- {0x8348,0x8348,0x30A9},
- {0x8349,0x8349,0x30AA},
- {0x834A,0x834A,0x30AB},
- {0x834B,0x834B,0x30AC},
- {0x834C,0x834C,0x30AD},
- {0x834D,0x834D,0x30AE},
- {0x834E,0x834E,0x30AF},
- {0x834F,0x834F,0x30B0},
- {0x8350,0x8350,0x30B1}, /* 8350 */
- {0x8351,0x8351,0x30B2},
- {0x8352,0x8352,0x30B3},
- {0x8353,0x8353,0x30B4},
- {0x8354,0x8354,0x30B5},
- {0x8355,0x8355,0x30B6},
- {0x8356,0x8356,0x30B7},
- {0x8357,0x8357,0x30B8},
- {0x8358,0x8358,0x30B9},
- {0x8359,0x8359,0x30BA},
- {0x835A,0x835A,0x30BB},
- {0x835B,0x835B,0x30BC},
- {0x835C,0x835C,0x30BD},
- {0x835D,0x835D,0x30BE},
- {0x835E,0x835E,0x30BF},
- {0x835F,0x835F,0x30C0},
- {0x8360,0x8360,0x30C1}, /* 8360 */
- {0x8361,0x8361,0x30C2},
- {0x8362,0x8362,0x30C3},
- {0x8363,0x8363,0x30C4},
- {0x8364,0x8364,0x30C5},
- {0x8365,0x8365,0x30C6},
- {0x8366,0x8366,0x30C7},
- {0x8367,0x8367,0x30C8},
- {0x8368,0x8368,0x30C9},
- {0x8369,0x8369,0x30CA},
- {0x836A,0x836A,0x30CB},
- {0x836B,0x836B,0x30CC},
- {0x836C,0x836C,0x30CD},
- {0x836D,0x836D,0x30CE},
- {0x836E,0x836E,0x30CF},
- {0x836F,0x836F,0x30D0},
- {0x8370,0x8370,0x30D1}, /* 8370 */
- {0x8371,0x8371,0x30D2},
- {0x8372,0x8372,0x30D3},
- {0x8373,0x8373,0x30D4},
- {0x8374,0x8374,0x30D5},
- {0x8375,0x8375,0x30D6},
- {0x8376,0x8376,0x30D7},
- {0x8377,0x8377,0x30D8},
- {0x8378,0x8378,0x30D9},
- {0x8379,0x8379,0x30DA},
- {0x837A,0x837A,0x30DB},
- {0x837B,0x837B,0x30DC},
- {0x837C,0x837C,0x30DD},
- {0x837D,0x837D,0x30DE},
- {0x837E,0x837E,0x30DF},
- {0,0,0},
- {0x8380,0x8380,0x30E0}, /* 8380 */
- {0x8381,0x8381,0x30E1},
- {0x8382,0x8382,0x30E2},
- {0x8383,0x8383,0x30E3},
- {0x8384,0x8384,0x30E4},
- {0x8385,0x8385,0x30E5},
- {0x8386,0x8386,0x30E6},
- {0x8387,0x8387,0x30E7},
- {0x8388,0x8388,0x30E8},
- {0x8389,0x8389,0x30E9},
- {0x838A,0x838A,0x30EA},
- {0x838B,0x838B,0x30EB},
- {0x838C,0x838C,0x30EC},
- {0x838D,0x838D,0x30ED},
- {0x838E,0x838E,0x30EE},
- {0x838F,0x838F,0x30EF},
- {0x8390,0x8390,0x30F0}, /* 8390 */
- {0x8391,0x8391,0x30F1},
- {0x8392,0x8392,0x30F2},
- {0x8393,0x8393,0x30F3},
- {0x8394,0x8394,0x30F4},
- {0x8395,0x8395,0x30F5},
- {0x8396,0x8396,0x30F6},
- {0x8397,0x8397,0x003F},
- {0x8398,0x8398,0x003F},
- {0x8399,0x8399,0x003F},
- {0x839A,0x839A,0x003F},
- {0x839B,0x839B,0x003F},
- {0x839C,0x839C,0x003F},
- {0x839D,0x839D,0x003F},
- {0x839E,0x839E,0x003F},
- {0x839F,0x83BF,0x0391},
- {0x83A0,0x83C0,0x0392}, /* 83A0 */
- {0x83A1,0x83C1,0x0393},
- {0x83A2,0x83C2,0x0394},
- {0x83A3,0x83C3,0x0395},
- {0x83A4,0x83C4,0x0396},
- {0x83A5,0x83C5,0x0397},
- {0x83A6,0x83C6,0x0398},
- {0x83A7,0x83C7,0x0399},
- {0x83A8,0x83C8,0x039A},
- {0x83A9,0x83C9,0x039B},
- {0x83AA,0x83CA,0x039C},
- {0x83AB,0x83CB,0x039D},
- {0x83AC,0x83CC,0x039E},
- {0x83AD,0x83CD,0x039F},
- {0x83AE,0x83CE,0x03A0},
- {0x83AF,0x83CF,0x03A1},
- {0x83B0,0x83D0,0x03A3}, /* 83B0 */
- {0x83B1,0x83D1,0x03A4},
- {0x83B2,0x83D2,0x03A5},
- {0x83B3,0x83D3,0x03A6},
- {0x83B4,0x83D4,0x03A7},
- {0x83B5,0x83D5,0x03A8},
- {0x83B6,0x83D6,0x03A9},
- {0x83B7,0x83B7,0x003F},
- {0x83B8,0x83B8,0x003F},
- {0x83B9,0x83B9,0x003F},
- {0x83BA,0x83BA,0x003F},
- {0x83BB,0x83BB,0x003F},
- {0x83BC,0x83BC,0x003F},
- {0x83BD,0x83BD,0x003F},
- {0x83BE,0x83BE,0x003F},
- {0x839F,0x83BF,0x03B1},
- {0x83A0,0x83C0,0x03B2}, /* 83C0 */
- {0x83A1,0x83C1,0x03B3},
- {0x83A2,0x83C2,0x03B4},
- {0x83A3,0x83C3,0x03B5},
- {0x83A4,0x83C4,0x03B6},
- {0x83A5,0x83C5,0x03B7},
- {0x83A6,0x83C6,0x03B8},
- {0x83A7,0x83C7,0x03B9},
- {0x83A8,0x83C8,0x03BA},
- {0x83A9,0x83C9,0x03BB},
- {0x83AA,0x83CA,0x03BC},
- {0x83AB,0x83CB,0x03BD},
- {0x83AC,0x83CC,0x03BE},
- {0x83AD,0x83CD,0x03BF},
- {0x83AE,0x83CE,0x03C0},
- {0x83AF,0x83CF,0x03C1},
- {0x83B0,0x83D0,0x03C3}, /* 83D0 */
- {0x83B1,0x83D1,0x03C4},
- {0x83B2,0x83D2,0x03C5},
- {0x83B3,0x83D3,0x03C6},
- {0x83B4,0x83D4,0x03C7},
- {0x83B5,0x83D5,0x03C8},
- {0x83B6,0x83D6,0x03C9},
- {0x83D7,0x83D7,0x003F},
- {0x83D8,0x83D8,0x003F},
- {0x83D9,0x83D9,0x003F},
- {0x83DA,0x83DA,0x003F},
- {0x83DB,0x83DB,0x003F},
- {0x83DC,0x83DC,0x003F},
- {0x83DD,0x83DD,0x003F},
- {0x83DE,0x83DE,0x003F},
- {0x83DF,0x83DF,0x003F},
- {0x83E0,0x83E0,0x003F}, /* 83E0 */
- {0x83E1,0x83E1,0x003F},
- {0x83E2,0x83E2,0x003F},
- {0x83E3,0x83E3,0x003F},
- {0x83E4,0x83E4,0x003F},
- {0x83E5,0x83E5,0x003F},
- {0x83E6,0x83E6,0x003F},
- {0x83E7,0x83E7,0x003F},
- {0x83E8,0x83E8,0x003F},
- {0x83E9,0x83E9,0x003F},
- {0x83EA,0x83EA,0x003F},
- {0x83EB,0x83EB,0x003F},
- {0x83EC,0x83EC,0x003F},
- {0x83ED,0x83ED,0x003F},
- {0x83EE,0x83EE,0x003F},
- {0x83EF,0x83EF,0x003F},
- {0x83F0,0x83F0,0x003F}, /* 83F0 */
- {0x83F1,0x83F1,0x003F},
- {0x83F2,0x83F2,0x003F},
- {0x83F3,0x83F3,0x003F},
- {0x83F4,0x83F4,0x003F},
- {0x83F5,0x83F5,0x003F},
- {0x83F6,0x83F6,0x003F},
- {0x83F7,0x83F7,0x003F},
- {0x83F8,0x83F8,0x003F},
- {0x83F9,0x83F9,0x003F},
- {0x83FA,0x83FA,0x003F},
- {0x83FB,0x83FB,0x003F},
- {0x83FC,0x83FC,0x003F},
- {0,0,0},
- {0,0,0},
- {0,0,0}
+ {0x8340,0x8340}, /* 8340 */
+ {0x8341,0x8341},
+ {0x8342,0x8342},
+ {0x8343,0x8343},
+ {0x8344,0x8344},
+ {0x8345,0x8345},
+ {0x8346,0x8346},
+ {0x8347,0x8347},
+ {0x8348,0x8348},
+ {0x8349,0x8349},
+ {0x834A,0x834A},
+ {0x834B,0x834B},
+ {0x834C,0x834C},
+ {0x834D,0x834D},
+ {0x834E,0x834E},
+ {0x834F,0x834F},
+ {0x8350,0x8350}, /* 8350 */
+ {0x8351,0x8351},
+ {0x8352,0x8352},
+ {0x8353,0x8353},
+ {0x8354,0x8354},
+ {0x8355,0x8355},
+ {0x8356,0x8356},
+ {0x8357,0x8357},
+ {0x8358,0x8358},
+ {0x8359,0x8359},
+ {0x835A,0x835A},
+ {0x835B,0x835B},
+ {0x835C,0x835C},
+ {0x835D,0x835D},
+ {0x835E,0x835E},
+ {0x835F,0x835F},
+ {0x8360,0x8360}, /* 8360 */
+ {0x8361,0x8361},
+ {0x8362,0x8362},
+ {0x8363,0x8363},
+ {0x8364,0x8364},
+ {0x8365,0x8365},
+ {0x8366,0x8366},
+ {0x8367,0x8367},
+ {0x8368,0x8368},
+ {0x8369,0x8369},
+ {0x836A,0x836A},
+ {0x836B,0x836B},
+ {0x836C,0x836C},
+ {0x836D,0x836D},
+ {0x836E,0x836E},
+ {0x836F,0x836F},
+ {0x8370,0x8370}, /* 8370 */
+ {0x8371,0x8371},
+ {0x8372,0x8372},
+ {0x8373,0x8373},
+ {0x8374,0x8374},
+ {0x8375,0x8375},
+ {0x8376,0x8376},
+ {0x8377,0x8377},
+ {0x8378,0x8378},
+ {0x8379,0x8379},
+ {0x837A,0x837A},
+ {0x837B,0x837B},
+ {0x837C,0x837C},
+ {0x837D,0x837D},
+ {0x837E,0x837E},
+ {0,0},
+ {0x8380,0x8380}, /* 8380 */
+ {0x8381,0x8381},
+ {0x8382,0x8382},
+ {0x8383,0x8383},
+ {0x8384,0x8384},
+ {0x8385,0x8385},
+ {0x8386,0x8386},
+ {0x8387,0x8387},
+ {0x8388,0x8388},
+ {0x8389,0x8389},
+ {0x838A,0x838A},
+ {0x838B,0x838B},
+ {0x838C,0x838C},
+ {0x838D,0x838D},
+ {0x838E,0x838E},
+ {0x838F,0x838F},
+ {0x8390,0x8390}, /* 8390 */
+ {0x8391,0x8391},
+ {0x8392,0x8392},
+ {0x8393,0x8393},
+ {0x8394,0x8394},
+ {0x8395,0x8395},
+ {0x8396,0x8396},
+ {0x8397,0x8397},
+ {0x8398,0x8398},
+ {0x8399,0x8399},
+ {0x839A,0x839A},
+ {0x839B,0x839B},
+ {0x839C,0x839C},
+ {0x839D,0x839D},
+ {0x839E,0x839E},
+ {0x839F,0x83BF},
+ {0x83A0,0x83C0}, /* 83A0 */
+ {0x83A1,0x83C1},
+ {0x83A2,0x83C2},
+ {0x83A3,0x83C3},
+ {0x83A4,0x83C4},
+ {0x83A5,0x83C5},
+ {0x83A6,0x83C6},
+ {0x83A7,0x83C7},
+ {0x83A8,0x83C8},
+ {0x83A9,0x83C9},
+ {0x83AA,0x83CA},
+ {0x83AB,0x83CB},
+ {0x83AC,0x83CC},
+ {0x83AD,0x83CD},
+ {0x83AE,0x83CE},
+ {0x83AF,0x83CF},
+ {0x83B0,0x83D0}, /* 83B0 */
+ {0x83B1,0x83D1},
+ {0x83B2,0x83D2},
+ {0x83B3,0x83D3},
+ {0x83B4,0x83D4},
+ {0x83B5,0x83D5},
+ {0x83B6,0x83D6},
+ {0x83B7,0x83B7},
+ {0x83B8,0x83B8},
+ {0x83B9,0x83B9},
+ {0x83BA,0x83BA},
+ {0x83BB,0x83BB},
+ {0x83BC,0x83BC},
+ {0x83BD,0x83BD},
+ {0x83BE,0x83BE},
+ {0x839F,0x83BF},
+ {0x83A0,0x83C0}, /* 83C0 */
+ {0x83A1,0x83C1},
+ {0x83A2,0x83C2},
+ {0x83A3,0x83C3},
+ {0x83A4,0x83C4},
+ {0x83A5,0x83C5},
+ {0x83A6,0x83C6},
+ {0x83A7,0x83C7},
+ {0x83A8,0x83C8},
+ {0x83A9,0x83C9},
+ {0x83AA,0x83CA},
+ {0x83AB,0x83CB},
+ {0x83AC,0x83CC},
+ {0x83AD,0x83CD},
+ {0x83AE,0x83CE},
+ {0x83AF,0x83CF},
+ {0x83B0,0x83D0}, /* 83D0 */
+ {0x83B1,0x83D1},
+ {0x83B2,0x83D2},
+ {0x83B3,0x83D3},
+ {0x83B4,0x83D4},
+ {0x83B5,0x83D5},
+ {0x83B6,0x83D6},
+ {0x83D7,0x83D7},
+ {0x83D8,0x83D8},
+ {0x83D9,0x83D9},
+ {0x83DA,0x83DA},
+ {0x83DB,0x83DB},
+ {0x83DC,0x83DC},
+ {0x83DD,0x83DD},
+ {0x83DE,0x83DE},
+ {0x83DF,0x83DF},
+ {0x83E0,0x83E0}, /* 83E0 */
+ {0x83E1,0x83E1},
+ {0x83E2,0x83E2},
+ {0x83E3,0x83E3},
+ {0x83E4,0x83E4},
+ {0x83E5,0x83E5},
+ {0x83E6,0x83E6},
+ {0x83E7,0x83E7},
+ {0x83E8,0x83E8},
+ {0x83E9,0x83E9},
+ {0x83EA,0x83EA},
+ {0x83EB,0x83EB},
+ {0x83EC,0x83EC},
+ {0x83ED,0x83ED},
+ {0x83EE,0x83EE},
+ {0x83EF,0x83EF},
+ {0x83F0,0x83F0}, /* 83F0 */
+ {0x83F1,0x83F1},
+ {0x83F2,0x83F2},
+ {0x83F3,0x83F3},
+ {0x83F4,0x83F4},
+ {0x83F5,0x83F5},
+ {0x83F6,0x83F6},
+ {0x83F7,0x83F7},
+ {0x83F8,0x83F8},
+ {0x83F9,0x83F9},
+ {0x83FA,0x83FA},
+ {0x83FB,0x83FB},
+ {0x83FC,0x83FC},
+ {0,0},
+ {0,0},
+ {0,0}
};
-static MY_UNICASE_CHARACTER c84[256]=
+static const MY_CASEFOLD_CHARACTER c84[256]=
{
/* 8400-840F */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
/* 8410-841F */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
/* 8420-842F */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
/* 8430-843F */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
- {0x8440,0x8470,0x0410}, /* 8440 */
- {0x8441,0x8471,0x0411},
- {0x8442,0x8472,0x0412},
- {0x8443,0x8473,0x0413},
- {0x8444,0x8474,0x0414},
- {0x8445,0x8475,0x0415},
- {0x8446,0x8476,0x0401},
- {0x8447,0x8477,0x0416},
- {0x8448,0x8478,0x0417},
- {0x8449,0x8479,0x0418},
- {0x844A,0x847A,0x0419},
- {0x844B,0x847B,0x041A},
- {0x844C,0x847C,0x041B},
- {0x844D,0x847D,0x041C},
- {0x844E,0x847E,0x041D},
- {0x844F,0x8480,0x041E},
- {0x8450,0x8481,0x041F}, /* 8450 */
- {0x8451,0x8482,0x0420},
- {0x8452,0x8483,0x0421},
- {0x8453,0x8484,0x0422},
- {0x8454,0x8485,0x0423},
- {0x8455,0x8486,0x0424},
- {0x8456,0x8487,0x0425},
- {0x8457,0x8488,0x0426},
- {0x8458,0x8489,0x0427},
- {0x8459,0x848A,0x0428},
- {0x845A,0x848B,0x0429},
- {0x845B,0x848C,0x042A},
- {0x845C,0x848D,0x042B},
- {0x845D,0x848E,0x042C},
- {0x845E,0x848F,0x042D},
- {0x845F,0x8490,0x042E},
- {0x8460,0x8491,0x042F}, /* 8460 */
- {0x8461,0x8461,0x003F},
- {0x8462,0x8462,0x003F},
- {0x8463,0x8463,0x003F},
- {0x8464,0x8464,0x003F},
- {0x8465,0x8465,0x003F},
- {0x8466,0x8466,0x003F},
- {0x8467,0x8467,0x003F},
- {0x8468,0x8468,0x003F},
- {0x8469,0x8469,0x003F},
- {0x846A,0x846A,0x003F},
- {0x846B,0x846B,0x003F},
- {0x846C,0x846C,0x003F},
- {0x846D,0x846D,0x003F},
- {0x846E,0x846E,0x003F},
- {0x846F,0x846F,0x003F},
- {0x8440,0x8470,0x0430}, /* 8470 */
- {0x8441,0x8471,0x0431},
- {0x8442,0x8472,0x0432},
- {0x8443,0x8473,0x0433},
- {0x8444,0x8474,0x0434},
- {0x8445,0x8475,0x0435},
- {0x8446,0x8476,0x0451},
- {0x8447,0x8477,0x0436},
- {0x8448,0x8478,0x0437},
- {0x8449,0x8479,0x0438},
- {0x844A,0x847A,0x0439},
- {0x844B,0x847B,0x043A},
- {0x844C,0x847C,0x043B},
- {0x844D,0x847D,0x043C},
- {0x844E,0x847E,0x043D},
- {0,0,0},
- {0x844F,0x8480,0x043E}, /* 8480 */
- {0x8450,0x8481,0x043F},
- {0x8451,0x8482,0x0440},
- {0x8452,0x8483,0x0441},
- {0x8453,0x8484,0x0442},
- {0x8454,0x8485,0x0443},
- {0x8455,0x8486,0x0444},
- {0x8456,0x8487,0x0445},
- {0x8457,0x8488,0x0446},
- {0x8458,0x8489,0x0447},
- {0x8459,0x848A,0x0448},
- {0x845A,0x848B,0x0449},
- {0x845B,0x848C,0x044A},
- {0x845C,0x848D,0x044B},
- {0x845D,0x848E,0x044C},
- {0x845E,0x848F,0x044D},
- {0x845F,0x8490,0x044E}, /* 8490 */
- {0x8460,0x8491,0x044F},
- {0x8492,0x8492,0x003F},
- {0x8493,0x8493,0x003F},
- {0x8494,0x8494,0x003F},
- {0x8495,0x8495,0x003F},
- {0x8496,0x8496,0x003F},
- {0x8497,0x8497,0x003F},
- {0x8498,0x8498,0x003F},
- {0x8499,0x8499,0x003F},
- {0x849A,0x849A,0x003F},
- {0x849B,0x849B,0x003F},
- {0x849C,0x849C,0x003F},
- {0x849D,0x849D,0x003F},
- {0x849E,0x849E,0x003F},
- {0x849F,0x849F,0x2500},
- {0x84A0,0x84A0,0x2502}, /* 84A0 */
- {0x84A1,0x84A1,0x250C},
- {0x84A2,0x84A2,0x2510},
- {0x84A3,0x84A3,0x2518},
- {0x84A4,0x84A4,0x2514},
- {0x84A5,0x84A5,0x251C},
- {0x84A6,0x84A6,0x252C},
- {0x84A7,0x84A7,0x2524},
- {0x84A8,0x84A8,0x2534},
- {0x84A9,0x84A9,0x253C},
- {0x84AA,0x84AA,0x2501},
- {0x84AB,0x84AB,0x2503},
- {0x84AC,0x84AC,0x250F},
- {0x84AD,0x84AD,0x2513},
- {0x84AE,0x84AE,0x251B},
- {0x84AF,0x84AF,0x2517},
- {0x84B0,0x84B0,0x2523}, /* 84B0 */
- {0x84B1,0x84B1,0x2533},
- {0x84B2,0x84B2,0x252B},
- {0x84B3,0x84B3,0x253B},
- {0x84B4,0x84B4,0x254B},
- {0x84B5,0x84B5,0x2520},
- {0x84B6,0x84B6,0x252F},
- {0x84B7,0x84B7,0x2528},
- {0x84B8,0x84B8,0x2537},
- {0x84B9,0x84B9,0x253F},
- {0x84BA,0x84BA,0x251D},
- {0x84BB,0x84BB,0x2530},
- {0x84BC,0x84BC,0x2525},
- {0x84BD,0x84BD,0x2538},
- {0x84BE,0x84BE,0x2542},
- {0x84BF,0x84BF,0x003F},
- {0x84C0,0x84C0,0x003F}, /* 84C0 */
- {0x84C1,0x84C1,0x003F},
- {0x84C2,0x84C2,0x003F},
- {0x84C3,0x84C3,0x003F},
- {0x84C4,0x84C4,0x003F},
- {0x84C5,0x84C5,0x003F},
- {0x84C6,0x84C6,0x003F},
- {0x84C7,0x84C7,0x003F},
- {0x84C8,0x84C8,0x003F},
- {0x84C9,0x84C9,0x003F},
- {0x84CA,0x84CA,0x003F},
- {0x84CB,0x84CB,0x003F},
- {0x84CC,0x84CC,0x003F},
- {0x84CD,0x84CD,0x003F},
- {0x84CE,0x84CE,0x003F},
- {0x84CF,0x84CF,0x003F},
- {0x84D0,0x84D0,0x003F}, /* 84D0 */
- {0x84D1,0x84D1,0x003F},
- {0x84D2,0x84D2,0x003F},
- {0x84D3,0x84D3,0x003F},
- {0x84D4,0x84D4,0x003F},
- {0x84D5,0x84D5,0x003F},
- {0x84D6,0x84D6,0x003F},
- {0x84D7,0x84D7,0x003F},
- {0x84D8,0x84D8,0x003F},
- {0x84D9,0x84D9,0x003F},
- {0x84DA,0x84DA,0x003F},
- {0x84DB,0x84DB,0x003F},
- {0x84DC,0x84DC,0x003F},
- {0x84DD,0x84DD,0x003F},
- {0x84DE,0x84DE,0x003F},
- {0x84DF,0x84DF,0x003F},
- {0x84E0,0x84E0,0x003F}, /* 84E0 */
- {0x84E1,0x84E1,0x003F},
- {0x84E2,0x84E2,0x003F},
- {0x84E3,0x84E3,0x003F},
- {0x84E4,0x84E4,0x003F},
- {0x84E5,0x84E5,0x003F},
- {0x84E6,0x84E6,0x003F},
- {0x84E7,0x84E7,0x003F},
- {0x84E8,0x84E8,0x003F},
- {0x84E9,0x84E9,0x003F},
- {0x84EA,0x84EA,0x003F},
- {0x84EB,0x84EB,0x003F},
- {0x84EC,0x84EC,0x003F},
- {0x84ED,0x84ED,0x003F},
- {0x84EE,0x84EE,0x003F},
- {0x84EF,0x84EF,0x003F},
- {0x84F0,0x84F0,0x003F}, /* 84F0 */
- {0x84F1,0x84F1,0x003F},
- {0x84F2,0x84F2,0x003F},
- {0x84F3,0x84F3,0x003F},
- {0x84F4,0x84F4,0x003F},
- {0x84F5,0x84F5,0x003F},
- {0x84F6,0x84F6,0x003F},
- {0x84F7,0x84F7,0x003F},
- {0x84F8,0x84F8,0x003F},
- {0x84F9,0x84F9,0x003F},
- {0x84FA,0x84FA,0x003F},
- {0x84FB,0x84FB,0x003F},
- {0x84FC,0x84FC,0x003F},
- {0,0,0},
- {0,0,0},
- {0,0,0}
+ {0x8440,0x8470}, /* 8440 */
+ {0x8441,0x8471},
+ {0x8442,0x8472},
+ {0x8443,0x8473},
+ {0x8444,0x8474},
+ {0x8445,0x8475},
+ {0x8446,0x8476},
+ {0x8447,0x8477},
+ {0x8448,0x8478},
+ {0x8449,0x8479},
+ {0x844A,0x847A},
+ {0x844B,0x847B},
+ {0x844C,0x847C},
+ {0x844D,0x847D},
+ {0x844E,0x847E},
+ {0x844F,0x8480},
+ {0x8450,0x8481}, /* 8450 */
+ {0x8451,0x8482},
+ {0x8452,0x8483},
+ {0x8453,0x8484},
+ {0x8454,0x8485},
+ {0x8455,0x8486},
+ {0x8456,0x8487},
+ {0x8457,0x8488},
+ {0x8458,0x8489},
+ {0x8459,0x848A},
+ {0x845A,0x848B},
+ {0x845B,0x848C},
+ {0x845C,0x848D},
+ {0x845D,0x848E},
+ {0x845E,0x848F},
+ {0x845F,0x8490},
+ {0x8460,0x8491}, /* 8460 */
+ {0x8461,0x8461},
+ {0x8462,0x8462},
+ {0x8463,0x8463},
+ {0x8464,0x8464},
+ {0x8465,0x8465},
+ {0x8466,0x8466},
+ {0x8467,0x8467},
+ {0x8468,0x8468},
+ {0x8469,0x8469},
+ {0x846A,0x846A},
+ {0x846B,0x846B},
+ {0x846C,0x846C},
+ {0x846D,0x846D},
+ {0x846E,0x846E},
+ {0x846F,0x846F},
+ {0x8440,0x8470}, /* 8470 */
+ {0x8441,0x8471},
+ {0x8442,0x8472},
+ {0x8443,0x8473},
+ {0x8444,0x8474},
+ {0x8445,0x8475},
+ {0x8446,0x8476},
+ {0x8447,0x8477},
+ {0x8448,0x8478},
+ {0x8449,0x8479},
+ {0x844A,0x847A},
+ {0x844B,0x847B},
+ {0x844C,0x847C},
+ {0x844D,0x847D},
+ {0x844E,0x847E},
+ {0,0},
+ {0x844F,0x8480}, /* 8480 */
+ {0x8450,0x8481},
+ {0x8451,0x8482},
+ {0x8452,0x8483},
+ {0x8453,0x8484},
+ {0x8454,0x8485},
+ {0x8455,0x8486},
+ {0x8456,0x8487},
+ {0x8457,0x8488},
+ {0x8458,0x8489},
+ {0x8459,0x848A},
+ {0x845A,0x848B},
+ {0x845B,0x848C},
+ {0x845C,0x848D},
+ {0x845D,0x848E},
+ {0x845E,0x848F},
+ {0x845F,0x8490}, /* 8490 */
+ {0x8460,0x8491},
+ {0x8492,0x8492},
+ {0x8493,0x8493},
+ {0x8494,0x8494},
+ {0x8495,0x8495},
+ {0x8496,0x8496},
+ {0x8497,0x8497},
+ {0x8498,0x8498},
+ {0x8499,0x8499},
+ {0x849A,0x849A},
+ {0x849B,0x849B},
+ {0x849C,0x849C},
+ {0x849D,0x849D},
+ {0x849E,0x849E},
+ {0x849F,0x849F},
+ {0x84A0,0x84A0}, /* 84A0 */
+ {0x84A1,0x84A1},
+ {0x84A2,0x84A2},
+ {0x84A3,0x84A3},
+ {0x84A4,0x84A4},
+ {0x84A5,0x84A5},
+ {0x84A6,0x84A6},
+ {0x84A7,0x84A7},
+ {0x84A8,0x84A8},
+ {0x84A9,0x84A9},
+ {0x84AA,0x84AA},
+ {0x84AB,0x84AB},
+ {0x84AC,0x84AC},
+ {0x84AD,0x84AD},
+ {0x84AE,0x84AE},
+ {0x84AF,0x84AF},
+ {0x84B0,0x84B0}, /* 84B0 */
+ {0x84B1,0x84B1},
+ {0x84B2,0x84B2},
+ {0x84B3,0x84B3},
+ {0x84B4,0x84B4},
+ {0x84B5,0x84B5},
+ {0x84B6,0x84B6},
+ {0x84B7,0x84B7},
+ {0x84B8,0x84B8},
+ {0x84B9,0x84B9},
+ {0x84BA,0x84BA},
+ {0x84BB,0x84BB},
+ {0x84BC,0x84BC},
+ {0x84BD,0x84BD},
+ {0x84BE,0x84BE},
+ {0x84BF,0x84BF},
+ {0x84C0,0x84C0}, /* 84C0 */
+ {0x84C1,0x84C1},
+ {0x84C2,0x84C2},
+ {0x84C3,0x84C3},
+ {0x84C4,0x84C4},
+ {0x84C5,0x84C5},
+ {0x84C6,0x84C6},
+ {0x84C7,0x84C7},
+ {0x84C8,0x84C8},
+ {0x84C9,0x84C9},
+ {0x84CA,0x84CA},
+ {0x84CB,0x84CB},
+ {0x84CC,0x84CC},
+ {0x84CD,0x84CD},
+ {0x84CE,0x84CE},
+ {0x84CF,0x84CF},
+ {0x84D0,0x84D0}, /* 84D0 */
+ {0x84D1,0x84D1},
+ {0x84D2,0x84D2},
+ {0x84D3,0x84D3},
+ {0x84D4,0x84D4},
+ {0x84D5,0x84D5},
+ {0x84D6,0x84D6},
+ {0x84D7,0x84D7},
+ {0x84D8,0x84D8},
+ {0x84D9,0x84D9},
+ {0x84DA,0x84DA},
+ {0x84DB,0x84DB},
+ {0x84DC,0x84DC},
+ {0x84DD,0x84DD},
+ {0x84DE,0x84DE},
+ {0x84DF,0x84DF},
+ {0x84E0,0x84E0}, /* 84E0 */
+ {0x84E1,0x84E1},
+ {0x84E2,0x84E2},
+ {0x84E3,0x84E3},
+ {0x84E4,0x84E4},
+ {0x84E5,0x84E5},
+ {0x84E6,0x84E6},
+ {0x84E7,0x84E7},
+ {0x84E8,0x84E8},
+ {0x84E9,0x84E9},
+ {0x84EA,0x84EA},
+ {0x84EB,0x84EB},
+ {0x84EC,0x84EC},
+ {0x84ED,0x84ED},
+ {0x84EE,0x84EE},
+ {0x84EF,0x84EF},
+ {0x84F0,0x84F0}, /* 84F0 */
+ {0x84F1,0x84F1},
+ {0x84F2,0x84F2},
+ {0x84F3,0x84F3},
+ {0x84F4,0x84F4},
+ {0x84F5,0x84F5},
+ {0x84F6,0x84F6},
+ {0x84F7,0x84F7},
+ {0x84F8,0x84F8},
+ {0x84F9,0x84F9},
+ {0x84FA,0x84FA},
+ {0x84FB,0x84FB},
+ {0x84FC,0x84FC},
+ {0,0},
+ {0,0},
+ {0,0}
};
-static MY_UNICASE_CHARACTER *my_caseinfo_pages_sjis[256]=
+static const MY_CASEFOLD_CHARACTER *my_casefold_pages_sjis[256]=
{
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 0 */
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
@@ -1073,10 +1073,11 @@ static MY_UNICASE_CHARACTER *my_caseinfo_pages_sjis[256]=
};
-static MY_UNICASE_INFO my_caseinfo_sjis=
+static MY_CASEFOLD_INFO my_casefold_sjis=
{
0xFFFF,
- my_caseinfo_pages_sjis
+ my_casefold_pages_sjis,
+ NULL /* ws */
};
@@ -34072,7 +34073,9 @@ static MY_COLLATION_HANDLER my_collation_handler_sjis_japanese_ci=
my_hash_sort_simple,
my_propagate_simple,
my_min_str_mb_simple,
- my_max_str_mb_simple
+ my_max_str_mb_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
@@ -34091,7 +34094,9 @@ static MY_COLLATION_HANDLER my_collation_handler_sjis_bin=
my_hash_sort_mb_bin,
my_propagate_simple,
my_min_str_mb_simple,
- my_max_str_mb_simple
+ my_max_str_mb_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
@@ -34110,7 +34115,9 @@ static MY_COLLATION_HANDLER my_collation_handler_sjis_japanese_nopad_ci=
my_hash_sort_simple_nopad,
my_propagate_simple,
my_min_str_mb_simple_nopad,
- my_max_str_mb_simple
+ my_max_str_mb_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
@@ -34129,7 +34136,9 @@ static MY_COLLATION_HANDLER my_collation_handler_sjis_nopad_bin=
my_hash_sort_mb_nopad_bin,
my_propagate_simple,
my_min_str_mb_simple_nopad,
- my_max_str_mb_simple
+ my_max_str_mb_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
@@ -34163,7 +34172,9 @@ static MY_CHARSET_HANDLER my_charset_handler=
my_well_formed_char_length_sjis,
my_copy_fix_mb,
my_native_to_mb_sjis,
- my_wc_to_printable_sjis
+ my_wc_to_printable_sjis,
+ my_casefold_multiply_1,
+ my_casefold_multiply_1
};
@@ -34182,19 +34193,17 @@ struct charset_info_st my_charset_sjis_japanese_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_caseinfo_sjis, /* caseinfo */
+ &my_casefold_sjis, /* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
2, /* mbmaxlen */
0, /* min_sort_char */
0xFCFC, /* max_sort_char */
' ', /* pad char */
1, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_handler,
&my_collation_handler_sjis_japanese_ci
};
@@ -34214,19 +34223,17 @@ struct charset_info_st my_charset_sjis_bin=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_caseinfo_sjis, /* caseinfo */
+ &my_casefold_sjis, /* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
2, /* mbmaxlen */
0, /* min_sort_char */
0xFCFC, /* max_sort_char */
' ', /* pad char */
1, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_handler,
&my_collation_handler_sjis_bin
};
@@ -34247,19 +34254,17 @@ struct charset_info_st my_charset_sjis_japanese_nopad_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_caseinfo_sjis, /* caseinfo */
+ &my_casefold_sjis, /* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
2, /* mbmaxlen */
0, /* min_sort_char */
0xFCFC, /* max_sort_char */
' ', /* pad char */
1, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_handler,
&my_collation_handler_sjis_japanese_nopad_ci
};
@@ -34279,19 +34284,17 @@ struct charset_info_st my_charset_sjis_nopad_bin=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_caseinfo_sjis, /* caseinfo */
+ &my_casefold_sjis, /* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
2, /* mbmaxlen */
0, /* min_sort_char */
0xFCFC, /* max_sort_char */
' ', /* pad char */
1, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_handler,
&my_collation_handler_sjis_nopad_bin
};
diff --git a/strings/ctype-tis620.c b/strings/ctype-tis620.c
index 91fa2a8d7d3..0b728346f6a 100644
--- a/strings/ctype-tis620.c
+++ b/strings/ctype-tis620.c
@@ -879,7 +879,9 @@ static MY_COLLATION_HANDLER my_collation_ci_handler =
my_hash_sort_simple,
my_propagate_simple,
my_min_str_8bit_simple,
- my_max_str_8bit_simple
+ my_max_str_8bit_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
static MY_COLLATION_HANDLER my_collation_nopad_ci_handler =
@@ -897,7 +899,9 @@ static MY_COLLATION_HANDLER my_collation_nopad_ci_handler =
my_hash_sort_simple_nopad,
my_propagate_simple,
my_min_str_8bit_simple_nopad,
- my_max_str_8bit_simple
+ my_max_str_8bit_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
static MY_CHARSET_HANDLER my_charset_handler=
@@ -930,7 +934,9 @@ static MY_CHARSET_HANDLER my_charset_handler=
my_well_formed_char_length_8bit,
my_copy_8bit,
my_wc_mb_bin, /* native_to_mb */
- my_wc_to_printable_generic
+ my_wc_to_printable_generic,
+ my_casefold_multiply_1,
+ my_casefold_multiply_1
};
@@ -950,19 +956,17 @@ struct charset_info_st my_charset_tis620_thai_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ NULL, /* casefold */
NULL, /* state_map */
NULL, /* ident_map */
4, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_handler,
&my_collation_ci_handler
};
@@ -982,19 +986,17 @@ struct charset_info_st my_charset_tis620_bin=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ NULL, /* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_handler,
&my_collation_8bit_bin_handler
};
@@ -1015,19 +1017,17 @@ struct charset_info_st my_charset_tis620_thai_nopad_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state_map */
NULL, /* ident_map */
4, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_handler,
&my_collation_nopad_ci_handler
};
@@ -1048,19 +1048,17 @@ struct charset_info_st my_charset_tis620_nopad_bin=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_handler,
&my_collation_8bit_nopad_bin_handler
};
diff --git a/strings/ctype-uca-scanner_next.inl b/strings/ctype-uca-scanner_next.inl
index acab31f21ef..e8489ddf191 100644
--- a/strings/ctype-uca-scanner_next.inl
+++ b/strings/ctype-uca-scanner_next.inl
@@ -43,10 +43,12 @@ static inline
#ifdef SCANNER_NEXT_NCHARS
weight_and_nchars_t
MY_FUNCTION_NAME(scanner_next_with_nchars)(my_uca_scanner *scanner,
+ const my_uca_scanner_param *param,
size_t nchars)
#else
int
-MY_FUNCTION_NAME(scanner_next)(my_uca_scanner *scanner)
+MY_FUNCTION_NAME(scanner_next)(my_uca_scanner *scanner,
+ const my_uca_scanner_param *param)
#endif
{
#ifdef SCANNER_NEXT_NCHARS
@@ -78,6 +80,45 @@ MY_FUNCTION_NAME(scanner_next)(my_uca_scanner *scanner)
my_wc_t currwc= 0;
const uint16 *cweight;
+#if MY_UCA_ASCII_OPTIMIZE && !defined(SCANNER_NEXT_NCHARS)
+ if (scanner->sbeg + 1 < scanner->send)
+ {
+ const MY_UCA_2BYTES_ITEM *ww;
+ ww= my_uca_level_booster_2bytes_item_addr_const(param->level->booster,
+ scanner->sbeg[0],
+ scanner->sbeg[1]);
+ if (my_uca_2bytes_item_is_applicable(ww))
+ {
+ /*
+ Byte pairs that make 2-byte head characters in previous
+ context pairs are marked as not applicable for optimization
+ during the collation initialization. So when we come here
+ sbeg[0] and sbeg[1] are:
+ - either two ASCII characters
+ - or one 2-byte character which IS NOT a previous context head
+ Just remember sbeg[1] as the previous character for simplicity.
+ This may erroneously interpret bytes 0x80..0x9F as previous context
+ head characters U+0080..U+009F. However, CLDR does not have any real
+ collations that use these characters as previous context heads.
+ */
+ scanner->page= 0;
+ scanner->code= (int) scanner->sbeg[1];
+ scanner->sbeg+= 2;
+ if ((weight= my_uca_scanner_set_weight(scanner, ww->weight)))
+ {
+ /*
+ TODO: add support for scanner_next_with_nchars and do this:
+ SCANNER_NEXT_RETURN(weight, ignorable_nchars + 1);
+ */
+ return weight;
+ }
+ continue; /* Ignorable character */
+ }
+ /* 2 byte optimization is not applicable, go the slow path */
+ }
+#endif
+
+
/* Get next character */
#if MY_UCA_ASCII_OPTIMIZE
/* Get next ASCII character */
@@ -87,9 +128,10 @@ MY_FUNCTION_NAME(scanner_next)(my_uca_scanner *scanner)
scanner->sbeg+= 1;
#if MY_UCA_COMPILE_CONTRACTIONS
- if (my_uca_needs_context_handling(scanner->level, currwc))
+ if (my_uca_needs_context_handling(param->level, currwc))
{
- const MY_CONTRACTION *cnt= my_uca_context_weight_find(scanner, currwc,
+ const MY_CONTRACTION *cnt= my_uca_context_weight_find(scanner, param,
+ currwc,
LOCAL_MAX_CONTRACTION_LENGTH);
if (cnt)
{
@@ -102,7 +144,7 @@ MY_FUNCTION_NAME(scanner_next)(my_uca_scanner *scanner)
scanner->page= 0;
scanner->code= (int) currwc;
- cweight= scanner->level->weights[0] + scanner->code * scanner->level->lengths[0];
+ cweight= param->level->weights[0] + scanner->code * param->level->lengths[0];
if ((weight= my_uca_scanner_set_weight(scanner, cweight)))
SCANNER_NEXT_RETURN(weight, ignorable_nchars + 1);
continue; /* Ignorable character */
@@ -110,7 +152,7 @@ MY_FUNCTION_NAME(scanner_next)(my_uca_scanner *scanner)
else
#endif
/* Get next MB character */
- if (((mblen= MY_MB_WC(scanner, &currwc, scanner->sbeg,
+ if (((mblen= MY_MB_WC(scanner, param, &currwc, scanner->sbeg,
scanner->send)) <= 0))
{
if (scanner->sbeg >= scanner->send)
@@ -122,7 +164,7 @@ MY_FUNCTION_NAME(scanner_next)(my_uca_scanner *scanner)
There are some more bytes left. Non-positive mb_len means that
we got an incomplete or a bad byte sequence. Consume mbminlen bytes.
*/
- if ((scanner->sbeg+= scanner->cs->mbminlen) > scanner->send)
+ if ((scanner->sbeg+= param->cs->mbminlen) > scanner->send)
{
/* For safety purposes don't go beyond the string range. */
scanner->sbeg= scanner->send;
@@ -136,16 +178,16 @@ MY_FUNCTION_NAME(scanner_next)(my_uca_scanner *scanner)
}
scanner->sbeg+= mblen;
- if (currwc > scanner->level->maxchar)
+ if (currwc > param->level->maxchar)
{
SCANNER_NEXT_RETURN(my_uca_scanner_set_weight_outside_maxchar(scanner),
ignorable_nchars + 1);
}
#if MY_UCA_COMPILE_CONTRACTIONS
- if (my_uca_needs_context_handling(scanner->level, currwc))
+ if (my_uca_needs_context_handling(param->level, currwc))
{
- const MY_CONTRACTION *cnt= my_uca_context_weight_find(scanner, currwc,
+ const MY_CONTRACTION *cnt= my_uca_context_weight_find(scanner, param, currwc,
LOCAL_MAX_CONTRACTION_LENGTH);
if (cnt)
{
@@ -161,12 +203,12 @@ MY_FUNCTION_NAME(scanner_next)(my_uca_scanner *scanner)
scanner->code= currwc & 0xFF;
/* If weight page for w[0] does not exist, then calculate algoritmically */
- if (!(wpage= scanner->level->weights[scanner->page]))
- SCANNER_NEXT_RETURN(my_uca_scanner_next_implicit(scanner),
+ if (!(wpage= param->level->weights[scanner->page]))
+ SCANNER_NEXT_RETURN(my_uca_scanner_next_implicit(scanner, param),
ignorable_nchars + 1);
/* Calculate pointer to w[0]'s weight, using page and offset */
- cweight= wpage + scanner->code * scanner->level->lengths[scanner->page];
+ cweight= wpage + scanner->code * param->level->lengths[scanner->page];
if ((weight= my_uca_scanner_set_weight(scanner, cweight)))
SCANNER_NEXT_RETURN(weight, ignorable_nchars + 1);
continue; /* Ignorable character */
diff --git a/strings/ctype-uca.c b/strings/ctype-uca.c
index c5b6ad6cbb3..aa4d366208f 100644
--- a/strings/ctype-uca.c
+++ b/strings/ctype-uca.c
@@ -34,6 +34,9 @@
#include "strings_def.h"
#include <m_ctype.h>
+#include "ctype-uca.h"
+#include "ctype-unidata.h"
+#include "my_bit.h"
typedef struct
{
@@ -6546,7 +6549,9 @@ MY_UCA_INFO my_uca_v400=
NULL, /* item */
NULL /* flags */
},
- 0 /* levelno */
+ 0, /* levelno */
+ {0}, /* contraction_hash */
+ NULL /* booster */
},
{
0,
@@ -6557,8 +6562,11 @@ MY_UCA_INFO my_uca_v400=
NULL,
NULL
},
- 1 /* levelno */
+ 1, /* levelno */
+ {0}, /* contraction_hash */
+ NULL /* booster */
},
+ {0}
},
/* Logical positions */
@@ -6579,6 +6587,9 @@ MY_UCA_INFO my_uca_v400=
0x0009, /* first_variable */
0x2183, /* last_variable */
+
+ /* Misc */
+ 400 /* Version */
};
/******************************************************/
@@ -30103,7 +30114,9 @@ MY_UCA_INFO my_uca_v520_th=
thai_contractions, /* item */
NULL /* flags */
},
- 0 /* levelno */
+ 0, /* levelno */
+ {0}, /* contraction_hash */
+ NULL /* booster */
},
{
0x10FFFF, /* maxchar */
@@ -30114,8 +30127,11 @@ MY_UCA_INFO my_uca_v520_th=
thai_contractions_w2, /* item */
NULL /* flags */
},
- 1 /* levelno */
+ 1, /* levelno */
+ {0}, /* contraction_hash */
+ NULL /* booster */
},
+ {0}
},
0x0009, /* first_non_ignorable p != ignore */
@@ -30135,6 +30151,9 @@ MY_UCA_INFO my_uca_v520_th=
0x0009, /* first_variable if alt=non-ignorable: p != ignore */
0x1D371, /* last_variable if alt=shifter: p,s,t == ignore */
+
+ /* Misc */
+ 520 /* Version */
};
MY_UCA_INFO my_uca_v520=
@@ -30149,7 +30168,9 @@ MY_UCA_INFO my_uca_v520=
NULL, /* item */
NULL /* flags */
},
- 0 /* levelno */
+ 0, /* levelno */
+ {0}, /* contraction_hash */
+ NULL /* booster */
},
{
@@ -30161,8 +30182,12 @@ MY_UCA_INFO my_uca_v520=
NULL, /* item */
NULL /* flags */
},
- 1 /* levelno */
+ 1, /* levelno */
+ {0}, /* contraction_hash */
+ NULL /* booster */
},
+
+ {0}
},
0x0009, /* first_non_ignorable p != ignore */
@@ -30182,6 +30207,81 @@ MY_UCA_INFO my_uca_v520=
0x0009, /* first_variable if alt=non-ignorable: p != ignore */
0x1D371, /* last_variable if alt=shifter: p,s,t == ignore */
+
+ /* Misc */
+ 520 /* Version */
+};
+
+
+#include "ctype-uca1400data.h"
+
+static MY_UCA_INFO my_uca_v1400=
+{
+ {
+ {
+ 0x10FFFF, /* maxchar */
+ (uchar *) uca1400_length,
+ (uint16 **) uca1400_weight,
+ { /* Contractions: */
+ array_elements(uca1400_contractions), /* nitems */
+ uca1400_contractions, /* item */
+ NULL /* flags */
+ },
+ 0, /* levelno */
+ {0}, /* contraction_hash */
+ NULL /* booster */
+ },
+
+ {
+ 0x10FFFF, /* maxchar */
+ (uchar *) uca1400_length_secondary,
+ (uint16 **) uca1400_weight_secondary,
+ { /* Contractions: */
+ array_elements(uca1400_contractions_secondary), /* nitems */
+ uca1400_contractions_secondary, /* item */
+ NULL /* flags */
+ },
+ 1, /* levelno */
+ {0}, /* contraction_hash */
+ NULL /* booster */
+ },
+
+ {
+ 0x10FFFF, /* maxchar */
+ (uchar *) uca1400_length_tertiary,
+ (uint16 **) uca1400_weight_tertiary,
+ { /* Contractions: */
+ array_elements(uca1400_contractions_tertiary), /* nitems */
+ uca1400_contractions_tertiary, /* item */
+ NULL /* flags */
+ },
+ 2, /* levelno */
+ {0}, /* contraction_hash */
+ NULL /* booster */
+ }
+
+ },
+
+ uca1400_non_ignorable_first,
+ uca1400_non_ignorable_last,
+
+ uca1400_primary_ignorable_first,
+ uca1400_primary_ignorable_last,
+
+ uca1400_secondary_ignorable_first,
+ uca1400_secondary_ignorable_last,
+
+ uca1400_tertiary_ignorable_first,
+ uca1400_tertiary_ignorable_last,
+
+ 0x0000, /* first_trailing */
+ 0x0000, /* last_trailing */
+
+ uca1400_variable_first,
+ uca1400_variable_last,
+
+ /* Misc */
+ uca1400_version
};
@@ -30532,7 +30632,7 @@ static const char vietnamese[]=
Myanmar, according to CLDR Revision 8900.
http://unicode.org/cldr/trac/browser/trunk/common/collation/my.xml
*/
-static const char myanmar[]= "[shift-after-method expand][version 5.2.0]"
+static const char myanmar[]= "[shift-after-method expand]"
/* Tones */
"&\\u108C"
"<\\u1037"
@@ -31146,6 +31246,80 @@ static const char myanmar[]= "[shift-after-method expand][version 5.2.0]"
;
+typedef struct my_uca1400_collation_definition_st
+{
+ const char * tailoring;
+ const char * name;
+ uint16 id_utf8mb3;
+ uint16 id_utf8mb4;
+ uint16 id_ucs2;
+ uint16 id_utf16;
+ uint16 id_utf32;
+} MY_UCA1400_COLLATION_DEFINITION;
+
+
+
+/*
+ UCA1400 collation definitions in the order of their UCA400 counterparts,
+ with IDs of their closest UCA1400 counterparts, for character sets
+ utf8mb3, utf8mb4, ucs2, utf16, utf32.
+*/
+static MY_UCA1400_COLLATION_DEFINITION
+my_uca1400_collation_definitions[MY_UCA1400_COLLATION_DEFINITION_COUNT]=
+{
+#define COLDEF(tl,name,id_utf8mb3,id_utf8mb4,id_ucs2,id_utf16,id_utf32) \
+ {(tl), (name), (id_utf8mb3), (id_utf8mb4), (id_ucs2), (id_utf16), (id_utf32)}
+ /* Block N1 */
+ COLDEF("", "", 192, 224, 128, 101, 160),
+ COLDEF(icelandic, "icelandic", 193, 225, 129, 102, 161),
+ COLDEF(latvian, "latvian", 194, 226, 130, 103, 162),
+ COLDEF(romanian, "romanian", 195, 227, 131, 104, 163),
+ COLDEF(slovenian, "slovenian", 196, 228, 132, 105, 164),
+ COLDEF(polish, "polish", 197, 229, 133, 106, 165),
+ COLDEF(estonian, "estonian", 198, 230, 134, 107, 166),
+ COLDEF(spanish, "spanish", 199, 231, 135, 108, 167),
+ COLDEF(swedish, "swedish", 200, 232, 136, 109, 168),
+ COLDEF(turkish, "turkish", 201, 233, 137, 110, 169),
+ COLDEF(czech, "czech", 202, 234, 138, 111, 170),
+ COLDEF(danish, "danish", 203, 235, 139, 112, 171),
+ COLDEF(lithuanian, "lithuanian", 204, 236, 140, 113, 172),
+ COLDEF(slovak, "slovak", 205, 237, 141, 114, 173),
+ COLDEF(spanish2, "spanish2", 206, 238, 142, 115, 174),
+ COLDEF(roman, "roman", 207, 239, 143, 116, 175),
+ COLDEF(persian, "persian", 208, 240, 144, 117, 176),
+ COLDEF(esperanto, "esperanto", 209, 241, 145, 118, 177),
+ COLDEF(hungarian, "hungarian", 210, 242, 146, 119, 178),
+ COLDEF(sinhala, "sinhala", 211, 243, 147, 120, 179),
+ COLDEF(german2, "german2", 212, 244, 148, 121, 180),
+ /*
+ Don't add "croatian_mysql561", as its UCA-4.0.0 version was added for
+ compatibility only, to open MySQL tables.
+ The "croatian" version is closer to CLDR. Checked with CLDR-40.
+ */
+ COLDEF(NULL,/*croatian_mysql561*/ NULL, 213, 245, 149, 122, 181),
+ COLDEF(NULL,/*unicode_520_ci*/ NULL, 214, 246, 150, 123, 182),
+ COLDEF(vietnamese, "vietnamese", 215, 247, 151, 124, 183),
+ /* Block N2 */
+ COLDEF(croatian_mariadb, "croatian", 576, 608, 640, 672, 736),
+ /* Don't add myanmar yet. It causes too long weights on the tertiary level.*/
+ COLDEF(NULL,/*myanmar*/ NULL, 577, 609, 641, 673, 737)
+
+#undef COLDEF
+};
+
+
+static MY_UCA_INFO
+my_uca1400_info_tailored[MY_CS_ENCODING_LAST+1]
+ [MY_UCA1400_COLLATION_DEFINITION_COUNT];
+
+
+typedef struct my_uca_scanner_param_st
+{
+ const MY_UCA_WEIGHT_LEVEL *level;
+ CHARSET_INFO *cs;
+} my_uca_scanner_param;
+
+
/*
Unicode Collation Algorithm:
Collation element (weight) scanner,
@@ -31157,11 +31331,9 @@ typedef struct my_uca_scanner_st
const uint16 *wbeg; /* Beginning of the current weight string */
const uchar *sbeg; /* Beginning of the input string */
const uchar *send; /* End of the input string */
- const MY_UCA_WEIGHT_LEVEL *level;
uint16 implicit[2];
int page;
int code;
- CHARSET_INFO *cs;
} my_uca_scanner;
@@ -31514,6 +31686,150 @@ static inline uint my_contraction_char_length(const MY_CONTRACTION *cnt)
}
+/*
+ The number of elements must be a degree of 2.
+ This allows to use the faster & operator instead of the
+ slow % operator to find the remainder of the division:
+ pos= (start_pos + iteration) & MASK
+ instead of:
+ pos= (start_pos + iteration) % NUMBER_OF_PREALLOCED_HASH_ELEMENTS
+
+ DUCET as of Unicode-14.0.0 has 939 default contractions.
+ CLDR-40 has around 2601 contractions (all collations total).
+ The built-in Myanmar collation tailoring has 912 contractions.
+ 4096 as the contraction prealloced hash size should be enough
+ for all collations.
+*/
+#define MY_UCA_CONTRACTION_HASH_ALLOC_ELEMENTS 4096
+#define MY_UCA_CONTRACTION_HASH_LSHIFT 2
+#define MY_UCA_CONTRACTION_HASH_MASK \
+ ((MY_UCA_CONTRACTION_HASH_ALLOC_ELEMENTS-1)>>MY_UCA_CONTRACTION_HASH_LSHIFT)
+#define MY_UCA_CONTRACTION_HASH_ALLOWED_COLLISIONS \
+ (MY_UCA_CONTRACTION_HASH_ALLOC_ELEMENTS-1)
+
+/*#define DBUG_UCA_CONTRACTIONS*/
+#ifdef DBUG_UCA_CONTRACTIONS
+static ulonglong collisions= 0;
+static ulonglong collisions_eq= 0;
+#endif
+
+
+/*
+ An empirical hash function for contractions.
+ It does not produce collisions for built-in DUCET contractions
+ as of Unicode-14.0.0.
+*/
+static uint16
+my_uca_contraction_hash_func(my_wc_t a, my_wc_t b)
+{
+ return (uint16) (((a * 465 + b) & MY_UCA_CONTRACTION_HASH_MASK) <<
+ MY_UCA_CONTRACTION_HASH_LSHIFT);
+}
+
+
+/*
+ Find an unused cell in the contraction hash table.
+*/
+static my_bool
+my_uca_contraction_hash_find_empty(const MY_UCA_CONTRACTION_HASH *cnt,
+ uint16 start,
+ uint16 *ppos)
+{
+ uint16 i;
+ for (i= 0; i < MY_UCA_CONTRACTION_HASH_ALLOWED_COLLISIONS; i++)
+ {
+ uint16 pos= (i + start) % cnt->nitems_alloced;
+ if (!cnt->item[pos].ch[0])
+ {
+ *ppos= pos;
+ return FALSE;
+ }
+ }
+ return TRUE;
+}
+
+
+/*
+ Find a contraction in the hash table
+*/
+static inline const MY_CONTRACTION *
+my_uca_contraction_hash_find(const MY_UCA_CONTRACTION_HASH *cnt,
+ const my_wc_t *wc, size_t len)
+{
+ uint16 start= my_uca_contraction_hash_func(wc[0], wc[1]);
+ uint16 i;
+ DBUG_ASSERT(len <= MY_UCA_MAX_CONTRACTION);
+
+ for (i=0 ; i < MY_UCA_CONTRACTION_HASH_ALLOWED_COLLISIONS; i++)
+ {
+ uint16 pos= (i + start) % cnt->nitems_alloced;
+ const MY_CONTRACTION *c= &cnt->item[pos];
+ if (!c->ch[0])
+ return NULL; /* An empty cell found - there is no such contraction */
+ if (my_uca_true_contraction_eq(c, wc, len))
+ return c; /* The given contraction was found */
+ }
+ /*
+ We scanned every single cell in the hash table and neither found
+ the given contraction nor met an empty cell. This is a very unlikely
+ scenario and is possible only if the hash table is full.
+ Anyway, the given contraction was not found in the hash.
+ */
+ return NULL;
+}
+
+
+/*
+ Allocate an empty hash table for contractions.
+*/
+static my_bool
+my_uca_contraction_hash_allocate(MY_UCA_CONTRACTION_HASH *dst,
+ MY_CHARSET_LOADER *loader)
+{
+ size_t nbytes= MY_UCA_CONTRACTION_HASH_ALLOC_ELEMENTS * sizeof(MY_CONTRACTION);
+ bzero(dst, sizeof(*dst));
+ if (!(dst->item= (MY_CONTRACTION*) (loader->once_alloc)(nbytes)))
+ return TRUE;
+ bzero(dst->item, nbytes);
+ dst->nitems_alloced= MY_UCA_CONTRACTION_HASH_ALLOC_ELEMENTS;
+ return FALSE;
+}
+
+
+/*
+ Add all contractions from the list "src" into the hash table "dst".
+*/
+static my_bool
+my_uca_contraction_hash_populate(MY_UCA_CONTRACTION_HASH *dst,
+ const MY_CONTRACTIONS *src)
+{
+ size_t i;
+ DBUG_ASSERT(dst->nitems_alloced > 0);
+ for (i= 0; i < src->nitems; i++)
+ {
+ const MY_CONTRACTION *c= &src->item[i];
+ uint16 start= my_uca_contraction_hash_func(c->ch[0], c->ch[1]);
+ if (!dst->item[start].ch[0])
+ dst->item[start]= src->item[i];
+ else
+ {
+ uint16 pos;
+#ifdef DBUG_UCA_CONTRACTIONS
+ if (dst->item[start].ch[0] != c->ch[0] &&
+ dst->item[start].ch[1] != c->ch[1])
+ collisions++;
+ else
+ collisions_eq++;
+#endif
+ if (my_uca_contraction_hash_find_empty(dst, start, &pos))
+ return TRUE;
+ dst->item[pos]= src->item[i];
+ }
+ }
+ return FALSE;
+}
+
+
/**
Check if a string is a contraction,
and return its weight array on success.
@@ -31543,7 +31859,7 @@ my_uca_contraction_find(const MY_CONTRACTIONS *list, my_wc_t *wc, size_t len)
/**
- Find a contraction in the input stream and return its weight array
+ Find a contraction in the input stream
Scan input characters while their flags tell that they can be
a contraction part. Then try to find real contraction among the
@@ -31553,14 +31869,16 @@ my_uca_contraction_find(const MY_CONTRACTIONS *list, my_wc_t *wc, size_t len)
@param[OUT] *wc Where to store the scanned string
@param max_char_length The longest contraction character length allowed
- @return Weight array
+ @return
@retval NULL - no contraction found
@retval ptr - the address of MY_CONTRACTION found
*/
static const MY_CONTRACTION *
-my_uca_scanner_contraction_find(my_uca_scanner *scanner, my_wc_t currwc,
- size_t max_char_length)
+my_uca_scanner_contraction_hash_find(my_uca_scanner *scanner,
+ const my_uca_scanner_param *param,
+ my_wc_t currwc,
+ size_t max_char_length)
{
size_t clen= 1;
int flag;
@@ -31576,10 +31894,10 @@ my_uca_scanner_contraction_find(my_uca_scanner *scanner, my_wc_t currwc,
flag<<= 1)
{
int mblen;
- if ((mblen= my_ci_mb_wc(scanner->cs, &wc[clen], s, scanner->send)) <= 0)
+ if ((mblen= my_ci_mb_wc(param->cs, &wc[clen], s, scanner->send)) <= 0)
break;
beg[clen]= s= s + mblen;
- if (!my_uca_can_be_contraction_part(&scanner->level->contractions,
+ if (!my_uca_can_be_contraction_part(&param->level->contractions,
wc[clen++], flag))
break;
}
@@ -31588,10 +31906,10 @@ my_uca_scanner_contraction_find(my_uca_scanner *scanner, my_wc_t currwc,
for ( ; clen > 1; clen--)
{
const MY_CONTRACTION *cnt;
- if (my_uca_can_be_contraction_tail(&scanner->level->contractions,
+ if (my_uca_can_be_contraction_tail(&param->level->contractions,
wc[clen - 1]) &&
- (cnt= my_uca_contraction_find(&scanner->level->contractions,
- wc, clen)))
+ (cnt= my_uca_contraction_hash_find(&param->level->contraction_hash,
+ wc, clen)))
{
scanner->sbeg= beg[clen - 1];
return cnt;
@@ -31604,7 +31922,6 @@ my_uca_scanner_contraction_find(my_uca_scanner *scanner, my_wc_t currwc,
/**
Find weight for contraction with previous context
- and return its weight array.
@param scanner Pointer to UCA scanner
@param wc0 Previous character
@@ -31649,12 +31966,14 @@ my_uca_previous_context_find(const MY_CONTRACTIONS *list,
@retval non null pointer - the address of MY_CONTRACTION found
*/
static inline const MY_CONTRACTION *
-my_uca_context_weight_find(my_uca_scanner *scanner, my_wc_t currwc,
+my_uca_context_weight_find(my_uca_scanner *scanner,
+ const my_uca_scanner_param *param,
+ my_wc_t currwc,
size_t max_char_length)
{
const MY_CONTRACTION *cnt;
my_wc_t prevwc;
- DBUG_ASSERT(scanner->level->contractions.nitems);
+ DBUG_ASSERT(param->level->contractions.nitems);
/*
If we have scanned a character which can have previous context,
and there were some more characters already before,
@@ -31664,23 +31983,24 @@ my_uca_context_weight_find(my_uca_scanner *scanner, my_wc_t currwc,
Note, we support only 2-character long sequences with previous
context at the moment. CLDR does not have longer sequences.
*/
- if (my_uca_can_be_previous_context_tail(&scanner->level->contractions,
+ if (my_uca_can_be_previous_context_tail(&param->level->contractions,
currwc) &&
scanner->wbeg != nochar && /* if not the very first character */
- my_uca_can_be_previous_context_head(&scanner->level->contractions,
+ my_uca_can_be_previous_context_head(&param->level->contractions,
(prevwc= ((scanner->page << 8) +
scanner->code))) &&
- (cnt= my_uca_previous_context_find(&scanner->level->contractions,
+ (cnt= my_uca_previous_context_find(&param->level->contractions,
prevwc, currwc)))
{
scanner->page= scanner->code= 0; /* Clear for the next character */
return cnt;
}
- else if (my_uca_can_be_contraction_head(&scanner->level->contractions,
+ else if (my_uca_can_be_contraction_head(&param->level->contractions,
currwc))
{
- /* Check if currwc starts a contraction */
- if ((cnt= my_uca_scanner_contraction_find(scanner, currwc, max_char_length)))
+ /* Check if w[0] starts a contraction */
+ if ((cnt= my_uca_scanner_contraction_hash_find(scanner, param, currwc,
+ max_char_length)))
return cnt;
}
return NULL;
@@ -31689,62 +32009,14 @@ my_uca_context_weight_find(my_uca_scanner *scanner, my_wc_t currwc,
/****************************************************************/
-/**
- Implicit weights for a code CP are constructed as follows:
- [.AAAA.0020.0002][.BBBB.0000.0000]
-
- where:
- AAAA= BASE + (CP >> 15);
- BBBB= (CP & 0x7FFF) | 0x8000;
-
- There are two weights in the primary level (AAAA followed by BBBB).
- There is one weight on other levels:
- - 0020 on the secondary level
- - 0002 on the tertiary level
-*/
-
-
-/**
- Return BASE for an implicit weight on the primary level
-
- According to UCA, BASE is calculated as follows:
- - FB40 for Unified_Ideograph=True AND
- ((Block=CJK_Unified_Ideograph) OR
- (Block=CJK_Compatibility_Ideographs))
- - FB80 for Unified_Ideograph=True AND NOT
- ((Block=CJK_Unified_Ideograph) OR
- (Block=CJK_Compatibility_Ideographs))
- - FBC0 for any other code point
- TODO: it seems we're not handling BASE correctly:
- - check what are those blocks
- - there are more Unified Ideograph blocks in the latest Unicode versions
-*/
-static inline uint16
-my_uca_implicit_weight_base(my_wc_t code)
-{
- if (code >= 0x3400 && code <= 0x4DB5)
- return 0xFB80;
- if (code >= 0x4E00 && code <= 0x9FA5)
- return 0xFB40;
- return 0xFBC0;
-}
-
-
static inline void
-my_uca_implicit_weight_put(uint16 *to, my_wc_t code, uint level)
+my_uca_implicit_weight_put(uint16 *to, const MY_UCA_INFO *src_uca,
+ my_wc_t code, uint level)
{
- switch (level) {
- case 1: to[0]= 0x0020; to[1]= 0; break; /* Secondary level */
- case 2: to[0]= 0x0002; to[1]= 0; break; /* Tertiary level */
- case 3: to[0]= 0x0001; to[1]= 0; break; /* Quaternary level */
- default:
- DBUG_ASSERT(0);
- case 0:
- break;
- }
- /* Primary level */
- to[0]= (uint16)(code >> 15) + my_uca_implicit_weight_base(code);
- to[1]= (code & 0x7FFF) | 0x8000;
+ MY_UCA_IMPLICIT_WEIGHT weight;
+ weight= my_uca_implicit_weight_on_level(src_uca->version, code, level);
+ to[0]= weight.weight[0];
+ to[1]= weight.weight[1];
to[2]= 0;
}
@@ -31763,26 +32035,30 @@ my_uca_implicit_weight_put(uint16 *to, my_wc_t code, uint level)
*/
static inline int
-my_uca_scanner_next_implicit_primary(my_uca_scanner *scanner)
+my_uca_scanner_next_implicit_primary(my_uca_scanner *scanner,
+ const my_uca_scanner_param *param)
{
my_wc_t wc= (scanner->page << 8) + scanner->code;
- scanner->implicit[0]= (wc & 0x7FFF) | 0x8000; /* The second weight */
- scanner->implicit[1]= 0; /* 0 terminator */
+ uint version= param->cs->uca->version;
+ MY_UCA_IMPLICIT_WEIGHT weight= my_uca_implicit_weight_primary(version, wc);
+ scanner->implicit[0]= weight.weight[1]; /* The second weight */
+ scanner->implicit[1]= 0; /* 0 terminator */
scanner->wbeg= scanner->implicit;
- return my_uca_implicit_weight_base(wc) + (wc >> 15);
+ return weight.weight[0]; /* The first weight */
}
/**
Return an implicit weight for the current level
- (according to scanner->level->levelno).
+ (according to param->level->levelno).
*/
static inline int
-my_uca_scanner_next_implicit(my_uca_scanner *scanner)
+my_uca_scanner_next_implicit(my_uca_scanner *scanner,
+ const my_uca_scanner_param *param)
{
- switch (scanner->level->levelno) {
- case 0: return my_uca_scanner_next_implicit_primary(scanner);/* Primary level*/
+ switch (param->level->levelno) {
+ case 0: return my_uca_scanner_next_implicit_primary(scanner, param);/* Primary level*/
case 1: scanner->wbeg= nochar; return 0x0020; /* Secondary level */
case 2: scanner->wbeg= nochar; return 0x0002; /* Tertiary level */
default: scanner->wbeg= nochar; break;
@@ -31791,21 +32067,28 @@ my_uca_scanner_next_implicit(my_uca_scanner *scanner)
return 0;
}
+
+static void
+my_uca_scanner_param_init(my_uca_scanner_param *param,
+ CHARSET_INFO *cs,
+ const MY_UCA_WEIGHT_LEVEL *level)
+{
+ param->cs= cs;
+ param->level= level;
+}
+
+
/*
The same two functions for any character set
*/
static void
my_uca_scanner_init_any(my_uca_scanner *scanner,
- CHARSET_INFO *cs,
- const MY_UCA_WEIGHT_LEVEL *level,
const uchar *str, size_t length)
{
/* Note, no needs to initialize scanner->wbeg */
scanner->sbeg= str;
scanner->send= str + length;
scanner->wbeg= nochar;
- scanner->level= level;
- scanner->cs= cs;
}
@@ -31871,8 +32154,10 @@ my_strnxfrm_uca_pad(uchar *dst, uchar *de, int weight)
*/
static uint min_weight_on_level(MY_UCA_WEIGHT_LEVEL *level)
{
- DBUG_ASSERT(level->levelno < 2); /* No 3-level NOPAD collations yet */
- return level->levelno == 0 ? 0x0200 : 0x0020;
+ DBUG_ASSERT(level->levelno < 3); /* No 4-level NOPAD collations yet */
+ return level->levelno == 0 ? 0x0200 :
+ level->levelno == 1 ? 0x0020 :
+ 0x0002;
}
@@ -31915,15 +32200,13 @@ static int my_uca_charcmp_onelevel(CHARSET_INFO *cs, my_wc_t wc1,
static int my_uca_charcmp(CHARSET_INFO *cs, my_wc_t wc1, my_wc_t wc2)
{
- uint num_level= cs->levels_for_order;
- int ret;
- uint i;
- for (i= 0; i != num_level; i++)
+ uint i, level_flags= cs->levels_for_order;
+ for (i= 0; level_flags; i++, level_flags>>= 1)
{
- ret= my_uca_charcmp_onelevel(cs, wc1, wc2, i);
- if (ret) {
+ int ret;
+ if ((level_flags & 1) &&
+ (ret= my_uca_charcmp_onelevel(cs, wc1, wc2, i)))
return ret;
- }
}
return 0;
}
@@ -32087,10 +32370,11 @@ int my_wildcmp_uca(CHARSET_INFO *cs,
static my_bool
my_uca_collation_can_optimize_no_contractions(CHARSET_INFO *cs)
{
- uint i;
- for (i= 0; i < cs->levels_for_order ; i++)
+ uint i, level_flags= cs->levels_for_order;
+ for (i= 0; level_flags; i++, level_flags>>= 1)
{
- if (my_uca_have_contractions_quick(&cs->uca->level[i]))
+ if ((level_flags & 1) &&
+ my_uca_have_contractions_quick(&cs->uca->level[i]))
return FALSE;
}
return TRUE;
@@ -32556,7 +32840,7 @@ typedef struct my_coll_rules_st
{
uint version; /* Unicode version, e.g. 400 or 520 */
uint strength; /* Number of levels */
- MY_UCA_INFO *uca; /* Unicode weight data */
+ const MY_UCA_INFO *uca; /* Unicode weight data */
size_t nrules; /* Number of rules in the rule array */
size_t mrules; /* Number of allocated rules */
MY_COLL_RULE *rule; /* Rule array */
@@ -32829,6 +33113,11 @@ my_coll_parser_scan_setting(MY_COLL_RULE_PARSER *p)
rules->version= 520;
rules->uca= &my_uca_v520;
}
+ else if (!lex_cmp(lexem, C_STRING_WITH_LEN("[version 14.0.0]")))
+ {
+ rules->version= 1400;
+ rules->uca= &my_uca_v1400;
+ }
else if (!lex_cmp(lexem, C_STRING_WITH_LEN("[shift-after-method expand]")))
{
rules->shift_after_method= my_shift_method_expand;
@@ -33246,8 +33535,8 @@ my_coll_rule_parse(MY_COLL_RULES *rules,
Copies UCA weights for a given "uint" string
to the given location.
+ @dst destination UCA weight level data
@src_uca source UCA weight data
- @dst_uca destination UCA weight data
@to destination address
@to_length size of destination
@nweights OUT number of weights put to "to"
@@ -33259,6 +33548,7 @@ my_coll_rule_parse(MY_COLL_RULES *rules,
static my_bool
my_char_weight_put(MY_UCA_WEIGHT_LEVEL *dst,
+ const MY_UCA_INFO *src_uca,
uint16 *to, size_t to_length, size_t *nweights,
my_wc_t *str, size_t len)
{
@@ -33296,7 +33586,7 @@ my_char_weight_put(MY_UCA_WEIGHT_LEVEL *dst,
if (!from)
{
from= implicit_weights;
- my_uca_implicit_weight_put(implicit_weights, *str, dst->levelno);
+ my_uca_implicit_weight_put(implicit_weights, src_uca, *str, dst->levelno);
}
str++;
len--;
@@ -33353,6 +33643,7 @@ my_uca_copy_page(MY_CHARSET_LOADER *loader,
static my_bool
my_uca_generate_implicit_page(MY_CHARSET_LOADER *loader,
MY_UCA_WEIGHT_LEVEL *dst,
+ const MY_UCA_INFO *src_uca,
uint page)
{
uint chc, size= 256 * dst->lengths[page] * sizeof(uint16);
@@ -33363,7 +33654,7 @@ my_uca_generate_implicit_page(MY_CHARSET_LOADER *loader,
for (chc= 0 ; chc < 256; chc++)
{
uint16 *w= dst->weights[page] + chc * dst->lengths[page];
- my_uca_implicit_weight_put(w, (page << 8) + chc, dst->levelno);
+ my_uca_implicit_weight_put(w, src_uca, (page << 8) + chc, dst->levelno);
}
return FALSE;
}
@@ -33464,7 +33755,7 @@ my_charset_loader_error_for_rule(MY_CHARSET_LOADER *loader,
*/
static uint16 *
my_uca_init_one_contraction(MY_CONTRACTIONS *contractions,
- my_wc_t *str, uint length, my_bool with_context)
+ my_wc_t *str, size_t length, my_bool with_context)
{
int flag;
uint i;
@@ -33539,10 +33830,10 @@ apply_one_rule(MY_CHARSET_LOADER *loader,
{
MY_CONTRACTIONS *contractions= &dst->contractions;
to= my_uca_init_one_contraction(contractions,
- r->curr, (uint)nshift, r->with_context);
+ r->curr, nshift, r->with_context);
/* Store weights of the "reset to" character */
dst->contractions.nitems--; /* Temporarily hide - it's incomplete */
- rc= my_char_weight_put(dst,
+ rc= my_char_weight_put(dst, rules->uca,
to, MY_UCA_CONTRACTION_MAX_WEIGHT_SIZE, &nweights,
r->base, nreset);
dst->contractions.nitems++; /* Activate, now it's complete */
@@ -33553,7 +33844,8 @@ apply_one_rule(MY_CHARSET_LOADER *loader,
DBUG_ASSERT(dst->weights[pagec]);
to= my_char_weight_addr(dst, r->curr[0]);
/* Store weights of the "reset to" character */
- rc= my_char_weight_put(dst, to, dst->lengths[pagec], &nweights, r->base, nreset);
+ rc= my_char_weight_put(dst, rules->uca,
+ to, dst->lengths[pagec], &nweights, r->base, nreset);
}
if (rc)
{
@@ -33622,7 +33914,9 @@ static uint my_weight_size_on_page(const MY_UCA_WEIGHT_LEVEL *src, uint page)
*/
static my_bool
my_uca_generate_page(MY_CHARSET_LOADER *loader,
- MY_UCA_WEIGHT_LEVEL *dst, const MY_UCA_WEIGHT_LEVEL *src,
+ MY_UCA_WEIGHT_LEVEL *dst,
+ const MY_UCA_INFO *src_uca,
+ const MY_UCA_WEIGHT_LEVEL *src,
uint pageno)
{
DBUG_ASSERT(dst->levelno == src->levelno);
@@ -33637,7 +33931,7 @@ my_uca_generate_page(MY_CHARSET_LOADER *loader,
Generate default weights for all characters on this page
algorithmically now, at initialization time.
*/
- my_uca_generate_implicit_page(loader, dst, pageno);
+ my_uca_generate_implicit_page(loader, dst, src_uca, pageno);
}
@@ -33648,6 +33942,7 @@ my_uca_generate_page(MY_CHARSET_LOADER *loader,
static my_bool
my_uca_generate_pages(MY_CHARSET_LOADER *loader,
MY_UCA_WEIGHT_LEVEL *dst,
+ const MY_UCA_INFO *src_uca,
const MY_UCA_WEIGHT_LEVEL *src,
uint npages)
{
@@ -33672,15 +33967,529 @@ my_uca_generate_pages(MY_CHARSET_LOADER *loader,
}
/* Found a page with some special rules. */
- if (my_uca_generate_page(loader, dst, src, page))
+ if (my_uca_generate_page(loader, dst, src_uca, src, page))
return TRUE;
}
return FALSE;
}
+static size_t
+my_uca_weight_cpy(uint16 *dst, const uint16 *src)
+{
+ const uint16 *src0= src;
+ for ( ; ; dst++, src++ )
+ {
+ *dst= *src;
+ if (!dst[0])
+ break;
+ }
+ return src - src0;
+}
+
+
+/*
+ The value 0xFFFF does not exist in UCA weights.
+ Let's use it to mark byte pairs that have complex
+ mapping.
+*/
+#define MY_UCA_2BYTES_NOT_APPLICABLE 0xFFFF
+
+
+static inline my_bool
+my_uca_2bytes_item_is_applicable(const MY_UCA_2BYTES_ITEM *w2)
+{
+ return w2->weight[1] != MY_UCA_2BYTES_NOT_APPLICABLE;
+}
+
+
+static void
+my_uca_2bytes_item_set_not_applicable(MY_UCA_2BYTES_ITEM *dst)
+{
+ dst->weight[0]= 0;
+ dst->weight[1]= MY_UCA_2BYTES_NOT_APPLICABLE;
+}
+
+
+/* Calculate the length of a 0-terminated weight string */
+static inline size_t
+my_uca_weight_length(const uint16 *str)
+{
+ uint res;
+ for (res= 0; str[res] ; res++)
+ { }
+ return res;
+}
+
+
+/*
+ Copy a 0-terminated weight string if it fits,
+ otherwise mark the byte pair as not applicable for optimization.
+*/
+static void
+my_uca_2bytes_item_weight_cpy(MY_UCA_2BYTES_ITEM *dst, const uint16 *src)
+{
+ size_t wlen= my_uca_weight_length(src);
+ if (wlen + 1 > array_elements(dst->weight))
+ my_uca_2bytes_item_set_not_applicable(dst);
+ else
+ my_uca_weight_cpy(dst->weight, src);
+}
+
+
+/*
+ Concatenate two 0-terminated weight strings if they fit together,
+ otherwise mark the byte pair as not applicable for optimization.
+*/
+static void
+my_uca_2bytes_item_weight_cpy2(MY_UCA_2BYTES_ITEM *dst,
+ const uint16 *wa,
+ const uint16 *wb)
+{
+ size_t la= my_uca_weight_length(wa);
+ size_t lb= my_uca_weight_length(wb);
+ if (la + lb + 1 > array_elements(dst->weight))
+ {
+ my_uca_2bytes_item_set_not_applicable(dst);
+ }
+ else
+ {
+ my_uca_weight_cpy(dst->weight, wa);
+ my_uca_weight_cpy(dst->weight + la, wb);
+ }
+}
+
+
+/*
+ Contatenate weights of two ASCII characters if they fit together,
+ otherwise mark the byte pair as not applicable for optimization.
+*/
+static void
+my_uca_2bytes_item_set_ascii2(MY_UCA_2BYTES_ITEM *dst,
+ const MY_UCA_WEIGHT_LEVEL *level,
+ uchar a, uchar b)
+{
+ const uint16 *wa= level->weights[0] + (uint) a * level->lengths[0];
+ const uint16 *wb= level->weights[0] + (uint) b * level->lengths[0];
+ my_uca_2bytes_item_weight_cpy2(dst, wa, wb);
+}
+
+
+/*
+ Check if two bytes make a well-formed 2-byte character.
+ Copy its weight if it fits.
+ If the two bytes do not make a well-formed 2-byte character,
+ or the weight of a valid 2-byte character is too long, then
+ mark this byte pair as not applicable for optimization.
+*/
+static void
+my_uca_2bytes_item_set_non_ascii2(MY_UCA_2BYTES_ITEM *dst,
+ const MY_UCA_WEIGHT_LEVEL *level,
+ CHARSET_INFO *cs,
+ uchar a, uchar b)
+{
+ uchar ch[2]= {a, b};
+ my_wc_t wc;
+ int rc= my_ci_mb_wc(cs, &wc, &ch[0], &ch[2]);
+ if (rc == 2)
+ {
+ /* Byte sequence 'ab' make one valid 2-byte character */
+ uint pageno= wc>>8;
+ const uint16 *w= level->weights[pageno] + (wc & 0xFF) * level->lengths[pageno];
+ my_uca_2bytes_item_weight_cpy(dst, w);
+ }
+ else
+ {
+ my_uca_2bytes_item_set_not_applicable(dst);
+ }
+}
+
+
+static inline MY_UCA_2BYTES_ITEM *
+my_uca_level_booster_2bytes_item_addr(MY_UCA_LEVEL_BOOSTER *booster,
+ uchar a, uchar b)
+{
+ size_t w2offs= a * 256 + b;
+ return &booster->weight_strings_2bytes[w2offs];
+}
+
+
+static inline const MY_UCA_2BYTES_ITEM *
+my_uca_level_booster_2bytes_item_addr_const(const MY_UCA_LEVEL_BOOSTER *booster,
+ uchar a, uchar b)
+{
+ size_t w2offs= a * 256 + b;
+ return &booster->weight_strings_2bytes[w2offs];
+}
+
+
+static inline const MY_UCA_WEIGHT2 *
+my_uca_level_booster_simple_weight2_addr_const(
+ const MY_UCA_LEVEL_BOOSTER *booster,
+ uchar a, uchar b)
+{
+ uint offs= (uint) a * 256 + b;
+ return &booster->weight_strings_2bytes_to_1_or_2_weights[offs];
+}
+
+
+static void
+my_uca_level_booster_2bytes_disable2(MY_UCA_LEVEL_BOOSTER *booster,
+ uchar a, uchar b)
+{
+ MY_UCA_2BYTES_ITEM *dst= my_uca_level_booster_2bytes_item_addr(booster, a, b);
+ my_uca_2bytes_item_set_not_applicable(dst);
+}
+
+
+static void
+my_uca_level_booster_2bytes_disable_if_2byte_mb(MY_UCA_LEVEL_BOOSTER *booster,
+ CHARSET_INFO *cs,
+ my_wc_t wc)
+{
+ uchar tmp[MY_CS_MBMAXLEN];
+ int rc= my_ci_wc_mb(cs, wc, tmp, tmp + sizeof(tmp));
+ if (rc == 2)
+ my_uca_level_booster_2bytes_disable2(booster, tmp[0], tmp[1]);
+}
+
+
+static inline void
+my_uca_level_booster_2bytes_set_not_applicable_by_tail(
+ MY_UCA_LEVEL_BOOSTER *booster,
+ uchar tail)
+{
+ uint head;
+ for (head= 0; head < 256; head++)
+ my_uca_level_booster_2bytes_disable2(booster, (uchar) head, tail);
+}
+
+
+/*
+ Mark all byte pairs whose weight depend on the surrounding context
+ because of the given true contraction.
+*/
+static void
+my_uca_level_booster_2bytes_disable_contraction(MY_UCA_LEVEL_BOOSTER *booster,
+ const MY_CONTRACTION *c,
+ CHARSET_INFO *cs)
+{
+ /* Previous context sequences are handled by a separate routine */
+ DBUG_ASSERT(!c->with_context);
+
+ if (c->ch[0] < 0x80)
+ {
+ /*
+ 2-byte pairs that end with an ASCII contraction head.
+ ...xAB...
+ Suppose AB is a contraction where A is an ASCII character.
+ Disable byte pairs xA (for all x=0x00..0xFF).
+ */
+ my_uca_level_booster_2bytes_set_not_applicable_by_tail(booster,
+ (uchar) c->ch[0]);
+
+ /*
+ Disable 2-byte ASCII combinations that start
+ 3-character (or longer) contractions.
+ */
+ if (c->ch[1] < 0x80 && c->ch[2] != 0)
+ {
+ /*
+ A 3+ character contraction that starts with two ASCII characters:
+ ...ABx...
+ */
+ my_uca_level_booster_2bytes_disable2(booster,
+ (uchar) c->ch[0],
+ (uchar) c->ch[1]);
+ }
+ }
+ else
+ {
+ /*
+ Disable 2-byte characters that start contractions:
+ ...[Aa][B]... MB + ASCII
+ ...[Aa][Bb].. MB + MB2
+ ...[Aa][Bbb].. MB + MB3
+ ...[Aa][Bbbb].. MB + MB4
+ The weight of the character [Aa] depends on what goes after it.
+ */
+ my_uca_level_booster_2bytes_disable_if_2byte_mb(booster, cs, c->ch[0]);
+ }
+}
+
+
+/*
+ Mark all byte pairs whose weight depend on the surrounding context
+ because of the given previous context sequence.
+*/
+static void
+my_uca_level_booster_2bytes_disable_previous_context(
+ MY_UCA_LEVEL_BOOSTER *booster,
+ const MY_CONTRACTION *c,
+ CHARSET_INFO *cs)
+{
+ /* True contractions are handled by a separate routine */
+ DBUG_ASSERT(c->with_context);
+
+ if (c->ch[0] < 0x80 && c->ch[1] < 0x80)
+ {
+ DBUG_ASSERT(c->ch[2] == 0);
+ if (c->ch[2] == 0)
+ {
+ /*
+ A previous context pair with exactly two ASCII characters:
+ ...AB...
+ "A" is a look-behind character (the context).
+ "B" is a character that we need to generate a weight for.
+ The underlying code does not support handling these character
+ in a single shot yet. It works as follows at the moment:
+ - A is scanned separately from B and generates its independent weight.
+ - B is scanned separately on the next step and and generates its
+ context dependent weight (by looking behind).
+ */
+ my_uca_level_booster_2bytes_disable2(booster,
+ (uchar) c->ch[0],
+ (uchar) c->ch[1]);
+ }
+ }
+ else
+ {
+ /*
+ Disable 2-byte characters that start pairs with a previous context:
+ ...[Aa][B]... MB + ASCII
+ ...[Aa][Bb].. MB + MB
+ These characters can be actually scanned in a single shot,
+ but the relevant code in scanner_next() assumes previous context
+ head characters are ASCII only, so it sets the previous
+ character simply as sbeg[1].
+ */
+ my_uca_level_booster_2bytes_disable_if_2byte_mb(booster, cs, c->ch[0]);
+ }
+}
+
+
+/*
+ Set the weight of a 2-byte sequence,
+ or mark the sequence as not applicable for optimization.
+*/
+static void
+my_uca_2bytes_item_set_pair(MY_UCA_2BYTES_ITEM *dst,
+ const MY_UCA_WEIGHT_LEVEL *level,
+ CHARSET_INFO *cs,
+ uchar a, uchar b)
+{
+ if (a < 0x80 && b < 0x80)
+ my_uca_2bytes_item_set_ascii2(dst, level, a, b);
+ else
+ my_uca_2bytes_item_set_non_ascii2(dst, level, cs, a, b);
+}
+
+
+/*
+ For every byte pair [00..FF][00..FF] set its weight,
+ or mark it as not applicable for optimization.
+*/
+static void
+my_uca_level_booster_2bytes_populate_pairs(MY_UCA_LEVEL_BOOSTER *booster,
+ const MY_UCA_WEIGHT_LEVEL *level,
+ CHARSET_INFO *cs)
+{
+ uint a, b;
+ for (a= 0; a < 256; a++)
+ {
+ for (b= 0; b < 256; b++)
+ {
+ MY_UCA_2BYTES_ITEM *dst;
+ dst= my_uca_level_booster_2bytes_item_addr(booster, (uchar) a, (uchar) b);
+ my_uca_2bytes_item_set_pair(dst, level, cs, (uchar) a, (uchar) b);
+ }
+ }
+}
+
+
+/*
+ Populate contractions consisting of two ASCII letters.
+ Only true contractions are handled here so far.
+ Previous context pairs are handled separately.
+*/
+static void
+my_uca_level_booster_2bytes_pupulate_ascii2_contractions(
+ MY_UCA_LEVEL_BOOSTER *booster,
+ const MY_CONTRACTIONS *list)
+{
+ size_t i;
+ for (i= 0; i < list->nitems; i++)
+ {
+ const MY_CONTRACTION *c= &list->item[i];
+ if (c->ch[0] < 0x80 && c->ch[1] < 0x80 && c->ch[2] == 0 &&
+ !c->with_context)
+ {
+ MY_UCA_2BYTES_ITEM *dst;
+ dst= my_uca_level_booster_2bytes_item_addr(booster,
+ (uchar) c->ch[0],
+ (uchar) c->ch[1]);
+ my_uca_2bytes_item_weight_cpy(dst, c->weight);
+ }
+ }
+}
+
+
+/*
+ Mark all byte pairs whose weight depend on the context
+ (because of contractions and previous context sequences)
+ as not applicable for optimization.
+*/
+static void
+my_uca_level_booster_2bytes_disable_context_dependent(
+ MY_UCA_LEVEL_BOOSTER *booster,
+ const MY_CONTRACTIONS *list,
+ CHARSET_INFO *cs)
+{
+ size_t i;
+ for (i= 0; i < list->nitems; i++)
+ {
+ const MY_CONTRACTION *c= &list->item[i];
+ if (c->with_context)
+ my_uca_level_booster_2bytes_disable_previous_context(booster, c, cs);
+ else
+ my_uca_level_booster_2bytes_disable_contraction(booster, c, cs);
+ }
+}
+
+
+/*
+ Populate the array of MY_UCA_WEIGHT2 for all possible byte pairs {a,b}
+ as follows:
+
+ Number of characters Number of weights WEIGHT2
+ -------------------- ----------------- ------
+ 2 (two ASCII chars) 0 (both ignorable) {0,0} [IGN]
+ 2 (two ASCII chars) 1 (e.g. Czech "ch") {X,0}
+ 2 (two ASCII chars) 1 (e.g. ignorable + non-ignorable) {X,0}
+ 2 (two ASCII chars) 2 (two ASCII chars, one weigth each) {X,0}
+ 2 (two ASCII chars) 3+ (contraction with a long expansion) {0,0} [E3]
+ 1 (one 2-byte char) 0 (ignorable) {0,0} [IGN]
+ 1 (one 2-byte char) 1 {X,0}
+ 1 (one 2-byte char) 2 (short expansion, e.g. German SZ) {X,Y}
+ 1 (one 2-byte char) 3+ (long expansion) {0,0} [E3]
+ 0 (incomplete 3/4-byte char) {0,0} [INC]
+
+ All byte pairs that depend on the context (e.g. contraction parts)
+ and that were previously marked as such by
+ my_uca_level_booster_2bytes_disable_context_dependent()
+ set WEIGHT2 to {0,0} [CTX].
+
+ After the initialization, the array contains non-zero weights for
+ the most typical simple cases of mapping from 2-bytes to weights,
+ so inside strnncoll*() we can skip equal string prefixes much faster,
+ using a cheaper simpler code.
+*/
+static void
+my_uca_level_booster_weight2_populate(MY_UCA_LEVEL_BOOSTER *booster)
+{
+ size_t i;
+ for (i= 0; i < 0x10000; i++)
+ {
+ MY_UCA_WEIGHT2 *dst= &booster->weight_strings_2bytes_to_1_or_2_weights[i];
+ MY_UCA_2BYTES_ITEM *src= &booster->weight_strings_2bytes[i];
+ if (src->weight[0] && (!src->weight[1] || !src->weight[2]))
+ {
+ /*
+ Simplest mapping:
+ - Two ASCII characters make one or two weights
+ - One 2-byte character makes one or two weights
+ Handled by the simpler loop at the comparison time.
+ */
+ dst->weight[0]= src->weight[0];
+ dst->weight[1]= src->weight[1];
+ }
+ else
+ {
+ /*
+ More complex mapping:
+ - Ignorable - see [IGN] above
+ - More than two weights - see [E3] above
+ - Incomplete (a 3-byte or 4-byte char head) - see [INC] above
+ - Not applicable (context dependent) - see [CTX] above
+ Handled by the full-featured slower loop at the comparison time.
+ */
+ dst->weight[0]= 0;
+ dst->weight[1]= 0;
+ }
+ }
+}
+
+
+static void
+my_uca_level_booster_populate(MY_UCA_LEVEL_BOOSTER *dst,
+ const MY_UCA_WEIGHT_LEVEL *src,
+ CHARSET_INFO *cs)
+{
+ my_uca_level_booster_2bytes_populate_pairs(dst, src, cs);
+ my_uca_level_booster_2bytes_pupulate_ascii2_contractions(dst,
+ &src->contractions);
+ my_uca_level_booster_2bytes_disable_context_dependent(dst,
+ &src->contractions,
+ cs);
+ my_uca_level_booster_weight2_populate(dst);
+}
+
+
+static MY_UCA_LEVEL_BOOSTER *
+my_uca_level_booster_alloc(MY_CHARSET_LOADER *loader)
+{
+ size_t nbytes= sizeof(MY_UCA_LEVEL_BOOSTER);
+ MY_UCA_LEVEL_BOOSTER *res;
+ if (!(res= (MY_UCA_LEVEL_BOOSTER *) (loader->once_alloc)(nbytes)))
+ return NULL;
+ bzero(res, nbytes);
+ return res;
+}
+
+
+static MY_UCA_LEVEL_BOOSTER *
+my_uca_level_booster_new(MY_CHARSET_LOADER *loader,
+ CHARSET_INFO *cs,
+ MY_UCA_WEIGHT_LEVEL *level)
+{
+ MY_UCA_LEVEL_BOOSTER *res;
+ if (!(res= my_uca_level_booster_alloc(loader)))
+ return NULL;
+ my_uca_level_booster_populate(res, level, cs);
+ return res;
+}
+
+
+/*
+ Skip the simple equal prefix of two string using
+ "One or two bytes produce one or two weights" optimization.
+ Return the prefix length.
+*/
+static size_t
+my_uca_level_booster_equal_prefix_length(const MY_UCA_LEVEL_BOOSTER *booster,
+ const uchar *s, size_t slen,
+ const uchar *t, size_t tlen)
+{
+ const uchar *s0= s;
+ size_t simple_count= MY_MIN(slen, tlen) >> 1;
+ for ( ; simple_count; s+= 2, t+= 2, simple_count--)
+ {
+ const MY_UCA_WEIGHT2 *ws, *wt;
+ ws= my_uca_level_booster_simple_weight2_addr_const(booster, s[0], s[1]);
+ wt= my_uca_level_booster_simple_weight2_addr_const(booster, t[0], t[1]);
+ if (ws->weight[0] &&
+ ws->weight[0] == wt->weight[0] &&
+ ws->weight[1] == wt->weight[1])
+ continue;
+ break;
+ }
+ return s - s0;
+}
+
+
static my_bool
-init_weight_level(MY_CHARSET_LOADER *loader, MY_COLL_RULES *rules,
+init_weight_level(MY_CHARSET_LOADER *loader, CHARSET_INFO *cs,
+ MY_COLL_RULES *rules,
MY_UCA_WEIGHT_LEVEL *dst, const MY_UCA_WEIGHT_LEVEL *src)
{
MY_COLL_RULE *r, *rlast;
@@ -33738,7 +34547,7 @@ init_weight_level(MY_CHARSET_LOADER *loader, MY_COLL_RULES *rules,
ncontractions += (int)src->contractions.nitems;
- if ((my_uca_generate_pages(loader, dst, src, (uint)npages)))
+ if ((my_uca_generate_pages(loader, dst, rules->uca, src, (uint)npages)))
return TRUE;
if (ncontractions)
@@ -33767,17 +34576,29 @@ init_weight_level(MY_CHARSET_LOADER *loader, MY_COLL_RULES *rules,
for (i= 0; i != src->contractions.nitems; i++)
{
MY_CONTRACTION *item= &src->contractions.item[i];
- /*
- TODO: calculate length from item->ch.
- Generally contractions can consist of more than 2 characters.
- */
- uint length= 2;
+ size_t length= my_wstrnlen(item->ch, array_elements(item->ch));
uint16 *weights= my_uca_init_one_contraction(&dst->contractions,
item->ch, length,
item->with_context);
- memcpy(weights, item->weight, length * sizeof(uint16));
- weights[length]= 0;
+ memcpy(weights, item->weight, sizeof(item->weight));
+ }
+
+ if (ncontractions)
+ {
+ if (ncontractions > MY_UCA_CONTRACTION_HASH_ALLOC_ELEMENTS ||
+ my_uca_contraction_hash_allocate(&dst->contraction_hash, loader) ||
+ my_uca_contraction_hash_populate(&dst->contraction_hash,
+ &dst->contractions))
+ {
+ my_snprintf(loader->error, sizeof(loader->error),
+ "Can't initialize %d contractions", (int) ncontractions);
+ return TRUE;
+ }
}
+
+ if (cs->mbminlen == 1)
+ dst->booster= my_uca_level_booster_new(loader, cs, dst);
+
return FALSE;
}
@@ -33791,8 +34612,8 @@ my_coll_init_uca(struct charset_info_st *cs, MY_CHARSET_LOADER *loader)
{
cs->pad_char= ' ';
cs->m_ctype= my_charset_utf8mb3_unicode_ci.m_ctype;
- if (!cs->caseinfo)
- cs->caseinfo= &my_unicase_default;
+ if (!cs->casefold)
+ cs->casefold= &my_casefold_default;
return create_tailoring(cs, loader);
}
@@ -33805,7 +34626,8 @@ static size_t my_strnxfrmlen_any_uca(CHARSET_INFO *cs, size_t len)
static size_t my_strnxfrmlen_any_uca_multilevel(CHARSET_INFO *cs, size_t len)
{
- return my_strnxfrmlen_any_uca(cs, len) * cs->levels_for_order;
+ return my_strnxfrmlen_any_uca(cs, len) *
+ my_count_bits_uint32(cs->levels_for_order);
}
@@ -33844,7 +34666,7 @@ static void my_uca_handler_map(struct charset_info_st *cs,
instead of generic.
*/
#define MY_FUNCTION_NAME(x) my_uca_ ## x ## _generic
-#define MY_MB_WC(scanner, wc, beg, end) (my_ci_mb_wc(scanner->cs, wc, beg, end))
+#define MY_MB_WC(scanner, param, wc, beg, end) (my_ci_mb_wc(param->cs, wc, beg, end))
#define MY_LIKE_RANGE my_like_range_generic
#define MY_UCA_ASCII_OPTIMIZE 0
#define MY_UCA_COMPILE_CONTRACTIONS 1
@@ -33852,6 +34674,52 @@ static void my_uca_handler_map(struct charset_info_st *cs,
#include "ctype-uca.inl"
+
+static my_bool
+my_uca_init_levels(MY_CHARSET_LOADER *loader, MY_UCA_INFO *dst,
+ MY_COLL_RULES *rules,
+ CHARSET_INFO *cs,
+ const MY_UCA_INFO *src, uint level_flags)
+{
+ uint i;
+ for (i= 0;
+ level_flags;
+ i++, level_flags>>= 1)
+ {
+ if (!(level_flags & 1))
+ continue;
+ if (src->level[i].maxchar == 0)
+ {
+ my_snprintf(loader->error, sizeof(loader->error) - 1,
+ "%s: no level #%d data for this Unicode version.",
+ cs->coll_name.str, i + 1);
+ return TRUE;
+ }
+ if (init_weight_level(loader, cs, rules,
+ &dst->level[i], &src->level[i]))
+ return TRUE;
+ }
+ return FALSE;
+}
+
+
+static my_bool
+my_uca_info_init(MY_CHARSET_LOADER *loader,
+ MY_UCA_INFO *dst_uca,
+ MY_COLL_RULES *rules,
+ CHARSET_INFO *cs,
+ const MY_UCA_INFO *src_uca,
+ uint level_flags)
+{
+ /* Copy logical positions, version. */
+ *dst_uca= *src_uca;
+ /* But don't copy levels. */
+ bzero(&dst_uca->level, sizeof(dst_uca->level));
+ /* Now initialize levels */
+ return my_uca_init_levels(loader, dst_uca, rules, cs, src_uca, level_flags);
+}
+
+
/*
This function copies an UCS2 collation from
the default Unicode Collation Algorithm (UCA)
@@ -33874,9 +34742,8 @@ create_tailoring(struct charset_info_st *cs,
MY_CHARSET_LOADER *loader)
{
MY_COLL_RULES rules;
- MY_UCA_INFO new_uca, *src_uca= NULL;
+ MY_UCA_INFO *src_uca= NULL;
int rc= 0;
- uint i;
*loader->error= '\0';
@@ -33886,7 +34753,6 @@ create_tailoring(struct charset_info_st *cs,
memset(&rules, 0, sizeof(rules));
rules.loader= loader;
rules.uca= cs->uca ? cs->uca : &my_uca_v400; /* For logical positions, etc */
- memset(&new_uca, 0, sizeof(new_uca));
/* Parse ICU Collation Customization expression */
if ((rc= my_coll_rule_parse(&rules,
@@ -33897,46 +34763,57 @@ create_tailoring(struct charset_info_st *cs,
if (rules.version == 520) /* Unicode-5.2.0 requested */
{
src_uca= &my_uca_v520;
- cs->caseinfo= &my_unicase_unicode520;
- if (cs->mbminlen == 1 && cs->mbmaxlen >=3)
- {
- cs->caseup_multiply= 2;
- cs->casedn_multiply= 2;
- }
+ cs->casefold= &my_casefold_unicode520;
+ }
+ else if (rules.version == 1400) /* Unicode-14.0.0 */
+ {
+ src_uca= &my_uca_v1400;
+ cs->casefold= &my_casefold_unicode1400;
}
else if (rules.version == 400) /* Unicode-4.0.0 requested */
{
src_uca= &my_uca_v400;
- cs->caseinfo= &my_unicase_default;
+ cs->casefold= &my_casefold_default;
}
else /* No Unicode version specified */
{
src_uca= cs->uca ? cs->uca : &my_uca_v400;
- if (!cs->caseinfo)
- cs->caseinfo= &my_unicase_default;
+ if (!cs->casefold)
+ cs->casefold= &my_casefold_default;
}
- cs->levels_for_order= rules.strength ? rules.strength : 1;
+ if (rules.strength)
+ my_ci_set_strength(cs, rules.strength);
+ else if (!cs->levels_for_order)
+ my_ci_set_strength(cs, 1);
- for (i= 0; i != cs->levels_for_order; i++)
+
+ if (my_collation_id_is_uca1400(cs->number))
{
- if ((rc= (src_uca->level[i].maxchar == 0)))
+ /*
+ UCA1400 collations with equal character set and tailoring
+ (but with different level flags) share the same MY_UCA_INFO.
+ */
+ my_cs_encoding_t enc= my_uca1400_collation_id_to_charset_id(cs->number);
+ uint tailoring= my_uca1400_collation_id_to_tailoring_id(cs->number);
+ MY_UCA_INFO *dst_uca= &my_uca1400_info_tailored[enc][tailoring];
+ if (!dst_uca->level[0].weights &&
+ (rc= my_uca_info_init(loader, dst_uca, &rules, cs, src_uca,
+ (1<<MY_UCA_WEIGHT_LEVELS)-1)))
+ goto ex;
+ cs->uca= dst_uca;
+ }
+ else
+ {
+ if (!(cs->uca= (MY_UCA_INFO *) (loader->once_alloc)(sizeof(MY_UCA_INFO))))
{
- my_snprintf(loader->error, sizeof(loader->error) - 1,
- "%s: no level #%d data for this Unicode version.",
- cs->coll_name.str, i + 1);
+ rc= 1;
goto ex;
}
- if ((rc= init_weight_level(loader, &rules,
- &new_uca.level[i], &src_uca->level[i])))
+ if ((rc= my_uca_info_init(loader, cs->uca, &rules, cs, src_uca,
+ cs->levels_for_order)))
goto ex;
}
- if (!(cs->uca= (MY_UCA_INFO *) (loader->once_alloc)(sizeof(MY_UCA_INFO))))
- {
- rc= 1;
- goto ex;
- }
- cs->uca[0]= new_uca;
if (cs->levels_for_order > 1)
cs->coll= (cs->state & MY_CS_NOPAD) ?
&my_uca_collation_handler_nopad_multilevel_generic :
@@ -33954,7 +34831,7 @@ ex:
#include "ctype-ucs2.h"
#define MY_FUNCTION_NAME(x) my_uca_ ## x ## _ucs2
-#define MY_MB_WC(scanner, wc, beg, end) (my_mb_wc_ucs2_quick(wc, beg, end))
+#define MY_MB_WC(scanner, param, wc, beg, end) (my_mb_wc_ucs2_quick(wc, beg, end))
#define MY_LIKE_RANGE my_like_range_generic
#define MY_UCA_ASCII_OPTIMIZE 0
#define MY_UCA_COMPILE_CONTRACTIONS 1
@@ -33979,19 +34856,17 @@ struct charset_info_st my_charset_ucs2_unicode_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
2, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_ucs2_handler,
&my_uca_collation_handler_ucs2
};
@@ -34011,19 +34886,17 @@ struct charset_info_st my_charset_ucs2_icelandic_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
2, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_ucs2_handler,
&my_uca_collation_handler_ucs2
};
@@ -34043,19 +34916,17 @@ struct charset_info_st my_charset_ucs2_latvian_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
2, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_ucs2_handler,
&my_uca_collation_handler_ucs2
};
@@ -34075,19 +34946,17 @@ struct charset_info_st my_charset_ucs2_romanian_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
2, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_ucs2_handler,
&my_uca_collation_handler_ucs2
};
@@ -34107,19 +34976,17 @@ struct charset_info_st my_charset_ucs2_slovenian_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
2, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_ucs2_handler,
&my_uca_collation_handler_ucs2
};
@@ -34139,19 +35006,17 @@ struct charset_info_st my_charset_ucs2_polish_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
2, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_ucs2_handler,
&my_uca_collation_handler_ucs2
};
@@ -34171,19 +35036,17 @@ struct charset_info_st my_charset_ucs2_estonian_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
2, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_ucs2_handler,
&my_uca_collation_handler_ucs2
};
@@ -34203,19 +35066,17 @@ struct charset_info_st my_charset_ucs2_spanish_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
2, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_ucs2_handler,
&my_uca_collation_handler_ucs2
};
@@ -34235,19 +35096,17 @@ struct charset_info_st my_charset_ucs2_swedish_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
2, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_ucs2_handler,
&my_uca_collation_handler_ucs2
};
@@ -34267,19 +35126,17 @@ struct charset_info_st my_charset_ucs2_turkish_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_turkish,/* caseinfo */
+ &my_casefold_turkish,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
2, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_ucs2_handler,
&my_uca_collation_handler_ucs2
};
@@ -34299,19 +35156,17 @@ struct charset_info_st my_charset_ucs2_czech_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
2, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_ucs2_handler,
&my_uca_collation_handler_ucs2
};
@@ -34332,19 +35187,17 @@ struct charset_info_st my_charset_ucs2_danish_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
2, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_ucs2_handler,
&my_uca_collation_handler_ucs2
};
@@ -34364,19 +35217,17 @@ struct charset_info_st my_charset_ucs2_lithuanian_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
2, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_ucs2_handler,
&my_uca_collation_handler_ucs2
};
@@ -34396,19 +35247,17 @@ struct charset_info_st my_charset_ucs2_slovak_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
2, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_ucs2_handler,
&my_uca_collation_handler_ucs2
};
@@ -34428,19 +35277,17 @@ struct charset_info_st my_charset_ucs2_spanish2_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
2, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_ucs2_handler,
&my_uca_collation_handler_ucs2
};
@@ -34461,19 +35308,17 @@ struct charset_info_st my_charset_ucs2_roman_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
2, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_ucs2_handler,
&my_uca_collation_handler_ucs2
};
@@ -34494,19 +35339,17 @@ struct charset_info_st my_charset_ucs2_persian_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
2, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_ucs2_handler,
&my_uca_collation_handler_ucs2
};
@@ -34527,19 +35370,17 @@ struct charset_info_st my_charset_ucs2_esperanto_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
2, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_ucs2_handler,
&my_uca_collation_handler_ucs2
};
@@ -34560,19 +35401,17 @@ struct charset_info_st my_charset_ucs2_hungarian_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
2, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_ucs2_handler,
&my_uca_collation_handler_ucs2
};
@@ -34592,19 +35431,17 @@ struct charset_info_st my_charset_ucs2_sinhala_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
2, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_ucs2_handler,
&my_uca_collation_handler_ucs2
};
@@ -34626,19 +35463,17 @@ struct charset_info_st my_charset_ucs2_german2_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
2, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_ucs2_handler,
&my_uca_collation_handler_ucs2
};
@@ -34658,19 +35493,17 @@ struct charset_info_st my_charset_ucs2_croatian_mysql561_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
2, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_ucs2_handler,
&my_uca_collation_handler_ucs2
};
@@ -34691,19 +35524,17 @@ struct charset_info_st my_charset_ucs2_croatian_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
2, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_ucs2_handler,
&my_uca_collation_handler_ucs2
};
@@ -34721,22 +35552,20 @@ struct charset_info_st my_charset_ucs2_myanmar_uca_ci=
NULL, /* to_lower */
NULL, /* to_upper */
NULL, /* sort_order */
- NULL, /* uca */
+ &my_uca_v520, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_unicode520,/* caseinfo */
+ &my_casefold_unicode520,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
2, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_ucs2_handler,
&my_uca_collation_handler_ucs2
};
@@ -34757,19 +35586,17 @@ struct charset_info_st my_charset_ucs2_thai_520_w2=
&my_uca_v520_th, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_unicode520,/* caseinfo */
+ &my_casefold_unicode520,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
4, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
2, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 2, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S2,
&my_charset_ucs2_handler,
&my_uca_collation_handler_multilevel_ucs2
};
@@ -34789,19 +35616,17 @@ struct charset_info_st my_charset_ucs2_unicode_520_ci=
&my_uca_v520, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_unicode520,/* caseinfo */
+ &my_casefold_unicode520,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
2, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_ucs2_handler,
&my_uca_collation_handler_ucs2
};
@@ -34822,19 +35647,17 @@ struct charset_info_st my_charset_ucs2_vietnamese_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
2, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_ucs2_handler,
&my_uca_collation_handler_ucs2
};
@@ -34855,19 +35678,17 @@ struct charset_info_st my_charset_ucs2_unicode_nopad_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default, /* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
2, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_ucs2_handler,
&my_uca_collation_handler_nopad_ucs2
};
@@ -34888,19 +35709,17 @@ struct charset_info_st my_charset_ucs2_unicode_520_nopad_ci=
&my_uca_v520, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_unicode520, /* caseinfo */
+ &my_casefold_unicode520, /* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
2, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_ucs2_handler,
&my_uca_collation_handler_nopad_ucs2
};
@@ -34916,7 +35735,7 @@ my_uca_coll_init_utf8mb3(struct charset_info_st *cs, MY_CHARSET_LOADER *loader);
#include "ctype-utf8.h"
#define MY_FUNCTION_NAME(x) my_uca_ ## x ## _utf8mb3
-#define MY_MB_WC(scanner, wc, beg, end) (my_mb_wc_utf8mb3_quick(wc, beg, end))
+#define MY_MB_WC(scanner, param, wc, beg, end) (my_mb_wc_utf8mb3_quick(wc, beg, end))
#define MY_LIKE_RANGE my_like_range_mb
#define MY_UCA_ASCII_OPTIMIZE 1
#define MY_UCA_COMPILE_CONTRACTIONS 1
@@ -34924,7 +35743,7 @@ my_uca_coll_init_utf8mb3(struct charset_info_st *cs, MY_CHARSET_LOADER *loader);
#include "ctype-uca.inl"
#define MY_FUNCTION_NAME(x) my_uca_ ## x ## _no_contractions_utf8mb3
-#define MY_MB_WC(scanner, wc, beg, end) (my_mb_wc_utf8mb3_quick(wc, beg, end))
+#define MY_MB_WC(scanner, param, wc, beg, end) (my_mb_wc_utf8mb3_quick(wc, beg, end))
#define MY_LIKE_RANGE my_like_range_mb
#define MY_UCA_ASCII_OPTIMIZE 1
#define MY_UCA_COMPILE_CONTRACTIONS 0
@@ -34990,19 +35809,17 @@ struct charset_info_st my_charset_utf8mb3_unicode_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
3, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb3_handler,
&my_uca_collation_handler_utf8mb3
};
@@ -35023,19 +35840,17 @@ struct charset_info_st my_charset_utf8mb3_icelandic_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
3, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb3_handler,
&my_uca_collation_handler_utf8mb3
};
@@ -35055,19 +35870,17 @@ struct charset_info_st my_charset_utf8mb3_latvian_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
3, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb3_handler,
&my_uca_collation_handler_utf8mb3
};
@@ -35087,19 +35900,17 @@ struct charset_info_st my_charset_utf8mb3_romanian_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
3, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb3_handler,
&my_uca_collation_handler_utf8mb3
};
@@ -35119,19 +35930,17 @@ struct charset_info_st my_charset_utf8mb3_slovenian_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
3, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb3_handler,
&my_uca_collation_handler_utf8mb3
};
@@ -35151,19 +35960,17 @@ struct charset_info_st my_charset_utf8mb3_polish_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
3, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb3_handler,
&my_uca_collation_handler_utf8mb3
};
@@ -35183,19 +35990,17 @@ struct charset_info_st my_charset_utf8mb3_estonian_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
3, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb3_handler,
&my_uca_collation_handler_utf8mb3
};
@@ -35215,19 +36020,17 @@ struct charset_info_st my_charset_utf8mb3_spanish_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
3, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb3_handler,
&my_uca_collation_handler_utf8mb3
};
@@ -35247,19 +36050,17 @@ struct charset_info_st my_charset_utf8mb3_swedish_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
3, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb3_handler,
&my_uca_collation_handler_utf8mb3
};
@@ -35279,19 +36080,17 @@ struct charset_info_st my_charset_utf8mb3_turkish_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_turkish,/* caseinfo */
+ &my_casefold_turkish,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 2, /* caseup_multiply */
- 2, /* casedn_multiply */
1, /* mbminlen */
3, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb3_handler,
&my_uca_collation_handler_utf8mb3
};
@@ -35311,19 +36110,17 @@ struct charset_info_st my_charset_utf8mb3_czech_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
3, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb3_handler,
&my_uca_collation_handler_utf8mb3
};
@@ -35344,19 +36141,17 @@ struct charset_info_st my_charset_utf8mb3_danish_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
3, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb3_handler,
&my_uca_collation_handler_utf8mb3
};
@@ -35376,19 +36171,17 @@ struct charset_info_st my_charset_utf8mb3_lithuanian_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
3, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb3_handler,
&my_uca_collation_handler_utf8mb3
};
@@ -35408,19 +36201,17 @@ struct charset_info_st my_charset_utf8mb3_slovak_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
3, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb3_handler,
&my_uca_collation_handler_utf8mb3
};
@@ -35440,19 +36231,17 @@ struct charset_info_st my_charset_utf8mb3_spanish2_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
3, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb3_handler,
&my_uca_collation_handler_utf8mb3
};
@@ -35472,19 +36261,17 @@ struct charset_info_st my_charset_utf8mb3_roman_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
3, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb3_handler,
&my_uca_collation_handler_utf8mb3
};
@@ -35504,19 +36291,17 @@ struct charset_info_st my_charset_utf8mb3_persian_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
3, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb3_handler,
&my_uca_collation_handler_utf8mb3
};
@@ -35536,19 +36321,17 @@ struct charset_info_st my_charset_utf8mb3_esperanto_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
3, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb3_handler,
&my_uca_collation_handler_utf8mb3
};
@@ -35568,19 +36351,17 @@ struct charset_info_st my_charset_utf8mb3_hungarian_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
3, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb3_handler,
&my_uca_collation_handler_utf8mb3
};
@@ -35600,19 +36381,17 @@ struct charset_info_st my_charset_utf8mb3_sinhala_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
3, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb3_handler,
&my_uca_collation_handler_utf8mb3
};
@@ -35633,19 +36412,17 @@ struct charset_info_st my_charset_utf8mb3_german2_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
3, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb3_handler,
&my_uca_collation_handler_utf8mb3
};
@@ -35665,19 +36442,17 @@ struct charset_info_st my_charset_utf8mb3_croatian_mysql561_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
3, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb3_handler,
&my_uca_collation_handler_utf8mb3
};
@@ -35698,19 +36473,17 @@ struct charset_info_st my_charset_utf8mb3_croatian_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
3, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb3_handler,
&my_uca_collation_handler_utf8mb3
};
@@ -35728,22 +36501,20 @@ struct charset_info_st my_charset_utf8mb3_myanmar_uca_ci=
NULL, /* to_lower */
NULL, /* to_upper */
NULL, /* sort_order */
- NULL, /* uca */
+ &my_uca_v520, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_unicode520,/* caseinfo */
+ &my_casefold_unicode520,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 2, /* caseup_multiply */
- 2, /* casedn_multiply */
1, /* mbminlen */
3, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb3_handler,
&my_uca_collation_handler_utf8mb3
};
@@ -35764,19 +36535,17 @@ struct charset_info_st my_charset_utf8mb3_unicode_520_ci=
&my_uca_v520, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_unicode520,/* caseinfo */
+ &my_casefold_unicode520,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 2, /* caseup_multiply */
- 2, /* casedn_multiply */
1, /* mbminlen */
3, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb3_handler,
&my_uca_collation_handler_utf8mb3
};
@@ -35796,19 +36565,17 @@ struct charset_info_st my_charset_utf8mb3_thai_520_w2=
&my_uca_v520_th, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_unicode520,/* caseinfo */
+ &my_casefold_unicode520,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
4, /* strxfrm_multiply */
- 2, /* caseup_multiply */
- 2, /* casedn_multiply */
1, /* mbminlen */
3, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 2, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S2,
&my_charset_utf8mb3_handler,
&my_uca_collation_handler_multilevel_utf8mb3
};
@@ -35828,19 +36595,17 @@ struct charset_info_st my_charset_utf8mb3_vietnamese_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
3, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb3_handler,
&my_uca_collation_handler_utf8mb3
};
@@ -35861,19 +36626,17 @@ struct charset_info_st my_charset_utf8mb3_unicode_nopad_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default, /* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
3, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb3_handler,
&my_uca_collation_handler_nopad_utf8mb3
};
@@ -35894,19 +36657,17 @@ struct charset_info_st my_charset_utf8mb3_unicode_520_nopad_ci=
&my_uca_v520, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_unicode520, /* caseinfo */
+ &my_casefold_unicode520, /* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 2, /* caseup_multiply */
- 2, /* casedn_multiply */
1, /* mbminlen */
3, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb3_handler,
&my_uca_collation_handler_nopad_utf8mb3
};
@@ -35921,7 +36682,7 @@ my_uca_coll_init_utf8mb4(struct charset_info_st *cs, MY_CHARSET_LOADER *loader);
#define MY_FUNCTION_NAME(x) my_uca_ ## x ## _utf8mb4
-#define MY_MB_WC(scanner, wc, beg, end) (my_mb_wc_utf8mb4_quick(wc, beg, end))
+#define MY_MB_WC(scanner, param, wc, beg, end) (my_mb_wc_utf8mb4_quick(wc, beg, end))
#define MY_LIKE_RANGE my_like_range_mb
#define MY_UCA_ASCII_OPTIMIZE 1
#define MY_UCA_COMPILE_CONTRACTIONS 1
@@ -35929,7 +36690,7 @@ my_uca_coll_init_utf8mb4(struct charset_info_st *cs, MY_CHARSET_LOADER *loader);
#include "ctype-uca.inl"
#define MY_FUNCTION_NAME(x) my_uca_ ## x ## _no_contractions_utf8mb4
-#define MY_MB_WC(scanner, wc, beg, end) (my_mb_wc_utf8mb4_quick(wc, beg, end))
+#define MY_MB_WC(scanner, param, wc, beg, end) (my_mb_wc_utf8mb4_quick(wc, beg, end))
#define MY_LIKE_RANGE my_like_range_mb
#define MY_UCA_ASCII_OPTIMIZE 1
#define MY_UCA_COMPILE_CONTRACTIONS 0
@@ -35969,19 +36730,17 @@ struct charset_info_st my_charset_utf8mb4_unicode_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb4_handler,
&my_uca_collation_handler_utf8mb4
};
@@ -36002,19 +36761,17 @@ struct charset_info_st my_charset_utf8mb4_icelandic_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb4_handler,
&my_uca_collation_handler_utf8mb4
};
@@ -36034,19 +36791,17 @@ struct charset_info_st my_charset_utf8mb4_latvian_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb4_handler,
&my_uca_collation_handler_utf8mb4
};
@@ -36066,19 +36821,17 @@ struct charset_info_st my_charset_utf8mb4_romanian_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb4_handler,
&my_uca_collation_handler_utf8mb4
};
@@ -36098,19 +36851,17 @@ struct charset_info_st my_charset_utf8mb4_slovenian_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb4_handler,
&my_uca_collation_handler_utf8mb4
};
@@ -36130,19 +36881,17 @@ struct charset_info_st my_charset_utf8mb4_polish_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb4_handler,
&my_uca_collation_handler_utf8mb4
};
@@ -36162,19 +36911,17 @@ struct charset_info_st my_charset_utf8mb4_estonian_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb4_handler,
&my_uca_collation_handler_utf8mb4
};
@@ -36194,19 +36941,17 @@ struct charset_info_st my_charset_utf8mb4_spanish_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb4_handler,
&my_uca_collation_handler_utf8mb4
};
@@ -36226,19 +36971,17 @@ struct charset_info_st my_charset_utf8mb4_swedish_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb4_handler,
&my_uca_collation_handler_utf8mb4
};
@@ -36258,19 +37001,17 @@ struct charset_info_st my_charset_utf8mb4_turkish_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_turkish, /* caseinfo */
+ &my_casefold_turkish,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 2, /* caseup_multiply */
- 2, /* casedn_multiply */
1, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb4_handler,
&my_uca_collation_handler_utf8mb4
};
@@ -36290,19 +37031,17 @@ struct charset_info_st my_charset_utf8mb4_czech_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb4_handler,
&my_uca_collation_handler_utf8mb4
};
@@ -36323,19 +37062,17 @@ struct charset_info_st my_charset_utf8mb4_danish_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb4_handler,
&my_uca_collation_handler_utf8mb4
};
@@ -36355,19 +37092,17 @@ struct charset_info_st my_charset_utf8mb4_lithuanian_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb4_handler,
&my_uca_collation_handler_utf8mb4
};
@@ -36387,19 +37122,17 @@ struct charset_info_st my_charset_utf8mb4_slovak_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb4_handler,
&my_uca_collation_handler_utf8mb4
};
@@ -36419,19 +37152,17 @@ struct charset_info_st my_charset_utf8mb4_spanish2_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb4_handler,
&my_uca_collation_handler_utf8mb4
};
@@ -36451,19 +37182,17 @@ struct charset_info_st my_charset_utf8mb4_roman_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb4_handler,
&my_uca_collation_handler_utf8mb4
};
@@ -36483,19 +37212,17 @@ struct charset_info_st my_charset_utf8mb4_persian_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb4_handler,
&my_uca_collation_handler_utf8mb4
};
@@ -36515,19 +37242,17 @@ struct charset_info_st my_charset_utf8mb4_esperanto_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb4_handler,
&my_uca_collation_handler_utf8mb4
};
@@ -36547,19 +37272,17 @@ struct charset_info_st my_charset_utf8mb4_hungarian_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb4_handler,
&my_uca_collation_handler_utf8mb4
};
@@ -36579,19 +37302,17 @@ struct charset_info_st my_charset_utf8mb4_sinhala_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb4_handler,
&my_uca_collation_handler_utf8mb4
};
@@ -36611,19 +37332,17 @@ struct charset_info_st my_charset_utf8mb4_german2_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb4_handler,
&my_uca_collation_handler_utf8mb4
};
@@ -36643,19 +37362,17 @@ struct charset_info_st my_charset_utf8mb4_croatian_mysql561_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb4_handler,
&my_uca_collation_handler_utf8mb4
};
@@ -36676,19 +37393,17 @@ struct charset_info_st my_charset_utf8mb4_croatian_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb4_handler,
&my_uca_collation_handler_utf8mb4
};
@@ -36706,22 +37421,20 @@ struct charset_info_st my_charset_utf8mb4_myanmar_uca_ci=
NULL, /* to_lower */
NULL, /* to_upper */
NULL, /* sort_order */
- NULL, /* uca */
+ &my_uca_v520, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_unicode520,/* caseinfo */
+ &my_casefold_unicode520,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 2, /* caseup_multiply */
- 2, /* casedn_multiply */
1, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb4_handler,
&my_uca_collation_handler_utf8mb4
};
@@ -36741,19 +37454,17 @@ struct charset_info_st my_charset_utf8mb4_thai_520_w2=
&my_uca_v520_th, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_unicode520,/* caseinfo */
+ &my_casefold_unicode520,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
4, /* strxfrm_multiply */
- 2, /* caseup_multiply */
- 2, /* casedn_multiply */
1, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 2, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S2,
&my_charset_utf8mb4_handler,
&my_uca_collation_handler_multilevel_utf8mb4
};
@@ -36773,19 +37484,17 @@ struct charset_info_st my_charset_utf8mb4_unicode_520_ci=
&my_uca_v520, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_unicode520,/* caseinfo */
+ &my_casefold_unicode520,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 2, /* caseup_multiply */
- 2, /* casedn_multiply */
1, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0x10FFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb4_handler,
&my_uca_collation_handler_utf8mb4
};
@@ -36806,19 +37515,17 @@ struct charset_info_st my_charset_utf8mb4_vietnamese_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb4_handler,
&my_uca_collation_handler_utf8mb4
};
@@ -36839,19 +37546,17 @@ struct charset_info_st my_charset_utf8mb4_unicode_nopad_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default, /* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb4_handler,
&my_uca_collation_handler_nopad_utf8mb4
};
@@ -36872,19 +37577,17 @@ struct charset_info_st my_charset_utf8mb4_unicode_520_nopad_ci=
&my_uca_v520, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_unicode520, /* caseinfo */
+ &my_casefold_unicode520, /* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 2, /* caseup_multiply */
- 2, /* casedn_multiply */
1, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0x10FFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb4_handler,
&my_uca_collation_handler_nopad_utf8mb4
};
@@ -36897,7 +37600,7 @@ struct charset_info_st my_charset_utf8mb4_unicode_520_nopad_ci=
#include "ctype-utf32.h"
#define MY_FUNCTION_NAME(x) my_uca_ ## x ## _utf32
-#define MY_MB_WC(scanner, wc, beg, end) (my_mb_wc_utf32_quick(wc, beg, end))
+#define MY_MB_WC(scanner, param, wc, beg, end) (my_mb_wc_utf32_quick(wc, beg, end))
#define MY_LIKE_RANGE my_like_range_generic
#define MY_UCA_ASCII_OPTIMIZE 0
#define MY_UCA_COMPILE_CONTRACTIONS 1
@@ -36924,19 +37627,17 @@ struct charset_info_st my_charset_utf32_unicode_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
4, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf32_handler,
&my_uca_collation_handler_utf32
};
@@ -36957,19 +37658,17 @@ struct charset_info_st my_charset_utf32_icelandic_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
4, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf32_handler,
&my_uca_collation_handler_utf32
};
@@ -36989,19 +37688,17 @@ struct charset_info_st my_charset_utf32_latvian_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
4, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf32_handler,
&my_uca_collation_handler_utf32
};
@@ -37021,19 +37718,17 @@ struct charset_info_st my_charset_utf32_romanian_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
4, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf32_handler,
&my_uca_collation_handler_utf32
};
@@ -37053,19 +37748,17 @@ struct charset_info_st my_charset_utf32_slovenian_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
4, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf32_handler,
&my_uca_collation_handler_utf32
};
@@ -37085,19 +37778,17 @@ struct charset_info_st my_charset_utf32_polish_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
4, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf32_handler,
&my_uca_collation_handler_utf32
};
@@ -37117,19 +37808,17 @@ struct charset_info_st my_charset_utf32_estonian_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
4, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf32_handler,
&my_uca_collation_handler_utf32
};
@@ -37149,19 +37838,17 @@ struct charset_info_st my_charset_utf32_spanish_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
4, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf32_handler,
&my_uca_collation_handler_utf32
};
@@ -37181,19 +37868,17 @@ struct charset_info_st my_charset_utf32_swedish_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
4, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf32_handler,
&my_uca_collation_handler_utf32
};
@@ -37213,19 +37898,17 @@ struct charset_info_st my_charset_utf32_turkish_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_turkish, /* caseinfo */
+ &my_casefold_turkish,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
4, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf32_handler,
&my_uca_collation_handler_utf32
};
@@ -37245,19 +37928,17 @@ struct charset_info_st my_charset_utf32_czech_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
4, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf32_handler,
&my_uca_collation_handler_utf32
};
@@ -37278,19 +37959,17 @@ struct charset_info_st my_charset_utf32_danish_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
4, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf32_handler,
&my_uca_collation_handler_utf32
};
@@ -37310,19 +37989,17 @@ struct charset_info_st my_charset_utf32_lithuanian_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
4, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf32_handler,
&my_uca_collation_handler_utf32
};
@@ -37342,19 +38019,17 @@ struct charset_info_st my_charset_utf32_slovak_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
4, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf32_handler,
&my_uca_collation_handler_utf32
};
@@ -37374,19 +38049,17 @@ struct charset_info_st my_charset_utf32_spanish2_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
4, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf32_handler,
&my_uca_collation_handler_utf32
};
@@ -37406,19 +38079,17 @@ struct charset_info_st my_charset_utf32_roman_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
4, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf32_handler,
&my_uca_collation_handler_utf32
};
@@ -37438,19 +38109,17 @@ struct charset_info_st my_charset_utf32_persian_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
4, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf32_handler,
&my_uca_collation_handler_utf32
};
@@ -37470,19 +38139,17 @@ struct charset_info_st my_charset_utf32_esperanto_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
4, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf32_handler,
&my_uca_collation_handler_utf32
};
@@ -37502,19 +38169,17 @@ struct charset_info_st my_charset_utf32_hungarian_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
4, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf32_handler,
&my_uca_collation_handler_utf32
};
@@ -37534,19 +38199,17 @@ struct charset_info_st my_charset_utf32_sinhala_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
4, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf32_handler,
&my_uca_collation_handler_utf32
};
@@ -37566,19 +38229,17 @@ struct charset_info_st my_charset_utf32_german2_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
4, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf32_handler,
&my_uca_collation_handler_utf32
};
@@ -37598,19 +38259,17 @@ struct charset_info_st my_charset_utf32_croatian_mysql561_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
4, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf32_handler,
&my_uca_collation_handler_utf32
};
@@ -37630,19 +38289,17 @@ struct charset_info_st my_charset_utf32_croatian_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
4, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf32_handler,
&my_uca_collation_handler_utf32
};
@@ -37660,22 +38317,20 @@ struct charset_info_st my_charset_utf32_myanmar_uca_ci=
NULL, /* to_lower */
NULL, /* to_upper */
NULL, /* sort_order */
- NULL, /* uca */
+ &my_uca_v520, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_unicode520,/* caseinfo */
+ &my_casefold_unicode520,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
4, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf32_handler,
&my_uca_collation_handler_utf32
};
@@ -37696,19 +38351,17 @@ struct charset_info_st my_charset_utf32_thai_520_w2=
&my_uca_v520_th, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_unicode520,/* caseinfo */
+ &my_casefold_unicode520,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
4, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
4, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 2, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S2,
&my_charset_utf32_handler,
&my_uca_collation_handler_multilevel_utf32
};
@@ -37729,19 +38382,17 @@ struct charset_info_st my_charset_utf32_unicode_520_ci=
&my_uca_v520, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_unicode520,/* caseinfo */
+ &my_casefold_unicode520,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
4, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0x10FFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf32_handler,
&my_uca_collation_handler_utf32
};
@@ -37762,19 +38413,17 @@ struct charset_info_st my_charset_utf32_vietnamese_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
4, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf32_handler,
&my_uca_collation_handler_utf32
};
@@ -37795,19 +38444,17 @@ struct charset_info_st my_charset_utf32_unicode_nopad_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default, /* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
4, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf32_handler,
&my_uca_collation_handler_nopad_utf32
};
@@ -37828,19 +38475,17 @@ struct charset_info_st my_charset_utf32_unicode_520_nopad_ci=
&my_uca_v520, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_unicode520, /* caseinfo */
+ &my_casefold_unicode520, /* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
4, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0x10FFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf32_handler,
&my_uca_collation_handler_nopad_utf32
};
@@ -37854,7 +38499,7 @@ struct charset_info_st my_charset_utf32_unicode_520_nopad_ci=
#include "ctype-utf16.h"
#define MY_FUNCTION_NAME(x) my_uca_ ## x ## _utf16
-#define MY_MB_WC(scanner, wc, beg, end) (my_mb_wc_utf16_quick(wc, beg, end))
+#define MY_MB_WC(scanner, param, wc, beg, end) (my_mb_wc_utf16_quick(wc, beg, end))
#define MY_LIKE_RANGE my_like_range_generic
#define MY_UCA_ASCII_OPTIMIZE 0
#define MY_UCA_COMPILE_CONTRACTIONS 1
@@ -37881,19 +38526,17 @@ struct charset_info_st my_charset_utf16_unicode_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf16_handler,
&my_uca_collation_handler_utf16
};
@@ -37914,19 +38557,17 @@ struct charset_info_st my_charset_utf16_icelandic_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf16_handler,
&my_uca_collation_handler_utf16
};
@@ -37946,19 +38587,17 @@ struct charset_info_st my_charset_utf16_latvian_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf16_handler,
&my_uca_collation_handler_utf16
};
@@ -37978,19 +38617,17 @@ struct charset_info_st my_charset_utf16_romanian_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf16_handler,
&my_uca_collation_handler_utf16
};
@@ -38010,19 +38647,17 @@ struct charset_info_st my_charset_utf16_slovenian_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf16_handler,
&my_uca_collation_handler_utf16
};
@@ -38042,19 +38677,17 @@ struct charset_info_st my_charset_utf16_polish_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf16_handler,
&my_uca_collation_handler_utf16
};
@@ -38074,19 +38707,17 @@ struct charset_info_st my_charset_utf16_estonian_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf16_handler,
&my_uca_collation_handler_utf16
};
@@ -38106,19 +38737,17 @@ struct charset_info_st my_charset_utf16_spanish_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf16_handler,
&my_uca_collation_handler_utf16
};
@@ -38138,19 +38767,17 @@ struct charset_info_st my_charset_utf16_swedish_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf16_handler,
&my_uca_collation_handler_utf16
};
@@ -38170,19 +38797,17 @@ struct charset_info_st my_charset_utf16_turkish_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_turkish, /* caseinfo */
+ &my_casefold_turkish,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf16_handler,
&my_uca_collation_handler_utf16
};
@@ -38202,19 +38827,17 @@ struct charset_info_st my_charset_utf16_czech_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf16_handler,
&my_uca_collation_handler_utf16
};
@@ -38235,19 +38858,17 @@ struct charset_info_st my_charset_utf16_danish_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf16_handler,
&my_uca_collation_handler_utf16
};
@@ -38267,19 +38888,17 @@ struct charset_info_st my_charset_utf16_lithuanian_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf16_handler,
&my_uca_collation_handler_utf16
};
@@ -38299,19 +38918,17 @@ struct charset_info_st my_charset_utf16_slovak_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf16_handler,
&my_uca_collation_handler_utf16
};
@@ -38331,19 +38948,17 @@ struct charset_info_st my_charset_utf16_spanish2_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf16_handler,
&my_uca_collation_handler_utf16
};
@@ -38363,19 +38978,17 @@ struct charset_info_st my_charset_utf16_roman_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf16_handler,
&my_uca_collation_handler_utf16
};
@@ -38395,19 +39008,17 @@ struct charset_info_st my_charset_utf16_persian_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf16_handler,
&my_uca_collation_handler_utf16
};
@@ -38427,19 +39038,17 @@ struct charset_info_st my_charset_utf16_esperanto_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf16_handler,
&my_uca_collation_handler_utf16
};
@@ -38459,19 +39068,17 @@ struct charset_info_st my_charset_utf16_hungarian_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf16_handler,
&my_uca_collation_handler_utf16
};
@@ -38491,19 +39098,17 @@ struct charset_info_st my_charset_utf16_sinhala_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf16_handler,
&my_uca_collation_handler_utf16
};
@@ -38523,19 +39128,17 @@ struct charset_info_st my_charset_utf16_german2_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf16_handler,
&my_uca_collation_handler_utf16
};
@@ -38556,19 +39159,17 @@ struct charset_info_st my_charset_utf16_croatian_mysql561_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf16_handler,
&my_uca_collation_handler_utf16
};
@@ -38589,19 +39190,17 @@ struct charset_info_st my_charset_utf16_croatian_uca_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf16_handler,
&my_uca_collation_handler_utf16
};
@@ -38619,22 +39218,20 @@ struct charset_info_st my_charset_utf16_myanmar_uca_ci=
NULL, /* to_lower */
NULL, /* to_upper */
NULL, /* sort_order */
- NULL, /* uca */
+ &my_uca_v520, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_unicode520,/* caseinfo */
+ &my_casefold_unicode520,/* casefold*/
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf16_handler,
&my_uca_collation_handler_utf16
};
@@ -38655,19 +39252,17 @@ struct charset_info_st my_charset_utf16_thai_520_w2=
&my_uca_v520_th, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_unicode520,/* caseinfo */
+ &my_casefold_unicode520,/* casefold*/
NULL, /* state_map */
NULL, /* ident_map */
4, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 2, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S2,
&my_charset_utf16_handler,
&my_uca_collation_handler_multilevel_utf16
};
@@ -38688,19 +39283,17 @@ struct charset_info_st my_charset_utf16_unicode_520_ci=
&my_uca_v520, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_unicode520,/* caseinfo */
+ &my_casefold_unicode520,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0x10FFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf16_handler,
&my_uca_collation_handler_utf16
};
@@ -38721,19 +39314,17 @@ struct charset_info_st my_charset_utf16_vietnamese_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf16_handler,
&my_uca_collation_handler_utf16
};
@@ -38754,19 +39345,17 @@ struct charset_info_st my_charset_utf16_unicode_nopad_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default, /* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf16_handler,
&my_uca_collation_handler_nopad_utf16
};
@@ -38787,19 +39376,17 @@ struct charset_info_st my_charset_utf16_unicode_520_nopad_ci=
&my_uca_v520, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_unicode520, /* caseinfo */
+ &my_casefold_unicode520, /* casefold */
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
0x10FFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf16_handler,
&my_uca_collation_handler_nopad_utf16
};
@@ -38808,5 +39395,167 @@ struct charset_info_st my_charset_utf16_unicode_520_nopad_ci=
#endif /* HAVE_CHARSET_utf16 */
+uint
+my_uca1400_make_builtin_collation_id(my_cs_encoding_t charset_id,
+ uint tailoring_id,
+ my_bool nopad,
+ my_bool secondary_level,
+ my_bool tertiary_level)
+{
+ if (!my_uca1400_collation_definitions[tailoring_id].tailoring)
+ return 0;
+ return MY_UCA1400_COLLATION_ID_POSSIBLE_MIN +
+ (charset_id << 8) +
+ (tailoring_id << 3) +
+ (nopad << 2) +
+ (secondary_level << 1) +
+ (tertiary_level << 0);
+}
+
+
+my_bool
+my_uca1400_collation_definition_init(MY_CHARSET_LOADER *loader,
+ struct charset_info_st *dst,
+ uint id)
+{
+ my_cs_encoding_t cs_id= my_uca1400_collation_id_to_charset_id(id);
+ uint tailoring_id= my_uca1400_collation_id_to_tailoring_id(id);
+ my_bool nopad= my_uca1400_collation_id_to_nopad_flag(id);
+ my_bool secondary_level= my_uca1400_collation_id_to_secondary_level_flag(id);
+ my_bool tertiary_level= my_uca1400_collation_id_to_tertiary_level_flag(id);
+ const MY_UCA1400_COLLATION_DEFINITION *def=
+ &my_uca1400_collation_definitions[tailoring_id];
+ char tmp[128], *coll_name;
+ size_t length;
+
+ switch (cs_id) {
+ case MY_CS_ENCODING_UTF8MB3:
+ *dst= nopad ? my_charset_utf8mb3_unicode_520_nopad_ci :
+ my_charset_utf8mb3_unicode_520_ci;
+ break;
+ case MY_CS_ENCODING_UTF8MB4:
+ *dst= nopad ? my_charset_utf8mb4_unicode_520_nopad_ci :
+ my_charset_utf8mb4_unicode_520_ci;
+ break;
+ case MY_CS_ENCODING_UCS2:
+ *dst= nopad ? my_charset_ucs2_unicode_520_nopad_ci :
+ my_charset_ucs2_unicode_520_ci;
+ break;
+ case MY_CS_ENCODING_UTF16:
+ *dst= nopad ? my_charset_utf16_unicode_520_nopad_ci :
+ my_charset_utf16_unicode_520_ci;
+ break;
+ case MY_CS_ENCODING_UTF32:
+ *dst= nopad ? my_charset_utf32_unicode_520_nopad_ci :
+ my_charset_utf32_unicode_520_ci;
+ break;
+ }
+
+ dst->number= id;
+ dst->uca= &my_uca_v1400;
+ dst->tailoring= def->tailoring;
+ if (def->tailoring == turkish)
+ dst->casefold= &my_casefold_unicode1400tr;
+ else
+ dst->casefold= &my_casefold_unicode1400;
+ if (nopad)
+ dst->state|= MY_CS_NOPAD;
+ my_ci_set_level_flags(dst, (1 << MY_CS_LEVEL_BIT_PRIMARY) |
+ (secondary_level ?
+ 1 << MY_CS_LEVEL_BIT_SECONDARY : 0) |
+ (tertiary_level ?
+ 1 << MY_CS_LEVEL_BIT_TERTIARY : 0));
+
+ length= my_snprintf(tmp, sizeof(tmp), "%.*s_uca1400%s%s%s%s%s",
+ (int) dst->cs_name.length, dst->cs_name.str,
+ def->name[0] ? "_" : "",
+ def->name,
+ nopad ? "_nopad" : "",
+ secondary_level ? "_as" : "_ai",
+ tertiary_level ? "_cs" : "_ci");
+ if (!(coll_name= loader->once_alloc(length + 1)))
+ return TRUE;
+ strcpy(coll_name, tmp);
+ dst->coll_name.str= coll_name;
+ dst->coll_name.length= length;
+ return FALSE;
+}
+
+
+/*
+ Return UCA-4.0.0 compatible ID, e.g. for use in the protocol
+ with the old clients.
+*/
+static uint my_uca1400_collation_id_uca400_compat(uint id)
+{
+ uint tlid= my_uca1400_collation_id_to_tailoring_id(id);
+ my_cs_encoding_t csid= my_uca1400_collation_id_to_charset_id(id);
+ MY_UCA1400_COLLATION_DEFINITION *def;
+ DBUG_ASSERT(my_collation_id_is_uca1400(id));
+ if (!(def= &my_uca1400_collation_definitions[tlid])->name)
+ return id;
+ switch (csid) {
+ case MY_CS_ENCODING_UTF8MB3: return def->id_utf8mb3;
+ case MY_CS_ENCODING_UTF8MB4: return def->id_utf8mb4;
+ case MY_CS_ENCODING_UCS2: return def->id_ucs2;
+ case MY_CS_ENCODING_UTF16: return def->id_utf16;
+ case MY_CS_ENCODING_UTF32: return def->id_utf32;
+ }
+ return id;
+}
+
+
+uint my_ci_get_id_uca(CHARSET_INFO *cs, my_collation_id_type_t type)
+{
+ switch (type)
+ {
+ case MY_COLLATION_ID_TYPE_PRECISE:
+ break;
+ case MY_COLLATION_ID_TYPE_COMPAT_100800:
+ /*
+ Return UCA-4.0.0 compatible ID, e.g. for use in the protocol
+ with the old clients.
+ */
+ if (my_collation_id_is_uca1400(cs->number))
+ return my_uca1400_collation_id_uca400_compat(cs->number);
+ break;
+ }
+ return cs->number;
+}
+
+
+LEX_CSTRING my_ci_get_collation_name_uca1400_context(CHARSET_INFO *cs)
+{
+ LEX_CSTRING res;
+ DBUG_ASSERT(my_collation_id_is_uca1400(cs->number));
+
+ if (cs->coll_name.length <= cs->cs_name.length ||
+ cs->coll_name.str[cs->cs_name.length] != '_')
+ {
+ DBUG_ASSERT(0);
+ return cs->coll_name;
+ }
+ res.str= cs->coll_name.str + cs->cs_name.length + 1;
+ res.length= cs->coll_name.length - cs->cs_name.length - 1;
+ return res;
+}
+
+
+LEX_CSTRING my_ci_get_collation_name_uca(CHARSET_INFO *cs,
+ my_collation_name_mode_t mode)
+{
+ if (!my_collation_id_is_uca1400(cs->number))
+ return cs->coll_name;
+
+ switch (mode) {
+ case MY_COLLATION_NAME_MODE_FULL:
+ break;
+ case MY_COLLATION_NAME_MODE_CONTEXT:
+ return my_ci_get_collation_name_uca1400_context(cs);
+ }
+
+ return cs->coll_name;
+}
+
#endif /* HAVE_UCA_COLLATIONS */
diff --git a/strings/ctype-uca.h b/strings/ctype-uca.h
new file mode 100644
index 00000000000..dd84f92faa6
--- /dev/null
+++ b/strings/ctype-uca.h
@@ -0,0 +1,187 @@
+#ifndef CTYPE_UCA_H
+#define CTYPE_UCA_H
+/* Copyright (c) 2021, MariaDB
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; version 2
+ of the License.
+
+ This library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this library; if not, write to the Free
+ Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ MA 02110-1335 USA */
+
+#define MY_UCA_VERSION_ID(x,y,z) ((uint) ((x) * 100 + (y) * 10 + (z)))
+
+/*
+ Implicit weight handling is done according to
+ the section "Computing Implicit Weights" in
+ https://unicode.org/reports/tr10/#Values_For_Base_Table
+ (as of Unicode 14.0.0)
+
+ Implicit weights for a code CP are constructed as follows:
+ [.AAAA.0020.0002][.BBBB.0000.0000]
+
+ - There are two primary weights, depending on the character type and block.
+ - There is one weight on the secondary and tertiary levels.
+
+ AAAA and BBBB are computed using different formulas for:
+ - Siniform ideographic scripts
+ - Han
+ - Unassigned characters
+*/
+
+typedef struct my_uca_implict_weight_t
+{
+ uint16 weight[2];
+} MY_UCA_IMPLICIT_WEIGHT;
+
+
+/*
+ By default, implicit weights for a code CP are constructed as follows:
+ [.AAAA.0020.0002][.BBBB.0000.0000]
+
+ where AAAA and BBBB are :
+ AAAA= BASE + (CP >> 15);
+ BBBB= (CP & 0x7FFF) | 0x8000;
+
+ This formula covers the following implicit weight subtypes:
+ - Core Han Unified Ideographs
+ - All other Han Unified Ideographs
+ - Unassigned characters
+ Every mentioned subtype passes a different BASE.
+
+ This formula does not cover Siniform ideographic scripts.
+ They are handled by separate functions.
+*/
+static inline MY_UCA_IMPLICIT_WEIGHT
+my_uca_implicit_weight_primary_default(uint16 base, my_wc_t code)
+{
+ MY_UCA_IMPLICIT_WEIGHT res;
+ res.weight[0]= (uint16) ((code >> 15) + base);
+ res.weight[1]= (uint16) ((code & 0x7FFF)|0x8000);
+ return res;
+}
+
+
+/**
+ Calculate Unicode-5.2.0 implicit weight on the primary level.
+
+ According to UCA, BASE is calculated as follows:
+ - FB40 for Unified_Ideograph=True AND
+ ((Block=CJK_Unified_Ideograph) OR
+ (Block=CJK_Compatibility_Ideographs))
+ - FB80 for Unified_Ideograph=True AND NOT
+ ((Block=CJK_Unified_Ideograph) OR
+ (Block=CJK_Compatibility_Ideographs))
+ - FBC0 for any other code point
+
+ But for Unicode-5.2.0 and Unicode-4.0.0 we used
+ a simplified formula as implemented before.
+*/
+static inline MY_UCA_IMPLICIT_WEIGHT
+my_uca_520_implicit_weight_primary(my_wc_t code)
+{
+ uint16 base;
+ /*
+ 3400;<CJK Ideograph Extension A, First>
+ 4DB5;<CJK Ideograph Extension A, Last>
+ 4E00;<CJK Ideograph, First>
+ 9FA5;<CJK Ideograph, Last>
+ */
+ if (code >= 0x3400 && code <= 0x4DB5)
+ base= 0xFB80;
+ else if (code >= 0x4E00 && code <= 0x9FA5)
+ base= 0xFB40;
+ else
+ base= 0xFBC0;
+
+ return my_uca_implicit_weight_primary_default(base, code);
+}
+
+
+typedef enum my_cs_encoding_enum
+{
+ MY_CS_ENCODING_UTF8MB3= 0,
+ MY_CS_ENCODING_UTF8MB4= 1,
+ MY_CS_ENCODING_UCS2= 2,
+ MY_CS_ENCODING_UTF16= 3,
+ MY_CS_ENCODING_UTF32= 4,
+} my_cs_encoding_t;
+
+#define MY_CS_ENCODING_LAST MY_CS_ENCODING_UTF32
+
+
+#include "ctype-uca1400.h"
+
+
+static inline MY_UCA_IMPLICIT_WEIGHT
+my_uca_implicit_weight_primary(uint version, my_wc_t code)
+{
+ return version >= 1400 ?
+ my_uca_1400_implicit_weight_primary(code) :
+ my_uca_520_implicit_weight_primary(code);
+}
+
+
+static inline MY_UCA_IMPLICIT_WEIGHT
+my_uca_implicit_weight_secondary()
+{
+ MY_UCA_IMPLICIT_WEIGHT res;
+ res.weight[0]= 0x0020;
+ res.weight[1]= 0;
+ return res;
+}
+
+
+static inline MY_UCA_IMPLICIT_WEIGHT
+my_uca_implicit_weight_tertiary()
+{
+ MY_UCA_IMPLICIT_WEIGHT res;
+ res.weight[0]= 0x0002;
+ res.weight[1]= 0;
+ return res;
+}
+
+
+static inline MY_UCA_IMPLICIT_WEIGHT
+my_uca_implicit_weight_quaternary()
+{
+ MY_UCA_IMPLICIT_WEIGHT res;
+ res.weight[0]= 0x0001;
+ res.weight[1]= 0;
+ return res;
+}
+
+
+static inline MY_UCA_IMPLICIT_WEIGHT
+my_uca_implicit_weight_on_level(uint version, my_wc_t code, uint level)
+{
+ switch (level) {
+ case 0:
+ return my_uca_implicit_weight_primary(version, code);
+ case 1:
+ return my_uca_implicit_weight_secondary();
+ case 2:
+ return my_uca_implicit_weight_tertiary();
+ default:
+ break;
+ }
+ return my_uca_implicit_weight_quaternary();
+}
+
+uint
+my_ci_get_id_uca(CHARSET_INFO *cs, my_collation_id_type_t type);
+
+
+LEX_CSTRING
+my_ci_get_collation_name_uca(CHARSET_INFO *cs, my_collation_name_mode_t mode);
+
+
+#endif /* CTYPE_UCA_H */
diff --git a/strings/ctype-uca.inl b/strings/ctype-uca.inl
index b19cf47beec..6aa72847c81 100644
--- a/strings/ctype-uca.inl
+++ b/strings/ctype-uca.inl
@@ -93,16 +93,27 @@ MY_FUNCTION_NAME(strnncoll_onelevel)(CHARSET_INFO *cs,
{
my_uca_scanner sscanner;
my_uca_scanner tscanner;
+ my_uca_scanner_param param;
int s_res;
int t_res;
-
- my_uca_scanner_init_any(&sscanner, cs, level, s, slen);
- my_uca_scanner_init_any(&tscanner, cs, level, t, tlen);
+
+#if MY_UCA_ASCII_OPTIMIZE
+{
+ size_t prefix= my_uca_level_booster_equal_prefix_length(level->booster,
+ s, slen, t, tlen);
+ s+= prefix, slen-= prefix;
+ t+= prefix, tlen-= prefix;
+}
+#endif
+
+ my_uca_scanner_param_init(&param, cs, level);
+ my_uca_scanner_init_any(&sscanner, s, slen);
+ my_uca_scanner_init_any(&tscanner, t, tlen);
do
{
- s_res= MY_FUNCTION_NAME(scanner_next)(&sscanner);
- t_res= MY_FUNCTION_NAME(scanner_next)(&tscanner);
+ s_res= MY_FUNCTION_NAME(scanner_next)(&sscanner, &param);
+ t_res= MY_FUNCTION_NAME(scanner_next)(&tscanner, &param);
} while ( s_res == t_res && s_res >0);
return (t_is_prefix && t_res < 0) ? 0 : (s_res - t_res);
@@ -132,12 +143,15 @@ MY_FUNCTION_NAME(strnncoll_multilevel)(CHARSET_INFO *cs,
const uchar *t, size_t tlen,
my_bool t_is_prefix)
{
- uint i, num_level= cs->levels_for_order;
- for (i= 0; i != num_level; i++)
+ uint i, level_flags= cs->levels_for_order;
+ for (i= 0; level_flags; i++, level_flags>>= 1)
{
- int ret= MY_FUNCTION_NAME(strnncoll_onelevel)(cs, &cs->uca->level[i],
- s, slen, t, tlen,
- t_is_prefix);
+ int ret;
+ if (!(level_flags & 1))
+ continue;
+ ret= MY_FUNCTION_NAME(strnncoll_onelevel)(cs, &cs->uca->level[i],
+ s, slen, t, tlen,
+ t_is_prefix);
if (ret)
return ret;
}
@@ -199,15 +213,26 @@ MY_FUNCTION_NAME(strnncollsp_onelevel)(CHARSET_INFO *cs,
const uchar *t, size_t tlen)
{
my_uca_scanner sscanner, tscanner;
+ my_uca_scanner_param param;
int s_res, t_res;
- my_uca_scanner_init_any(&sscanner, cs, level, s, slen);
- my_uca_scanner_init_any(&tscanner, cs, level, t, tlen);
+#if MY_UCA_ASCII_OPTIMIZE
+{
+ size_t prefix= my_uca_level_booster_equal_prefix_length(level->booster,
+ s, slen, t, tlen);
+ s+= prefix, slen-= prefix;
+ t+= prefix, tlen-= prefix;
+}
+#endif
+
+ my_uca_scanner_param_init(&param, cs, level);
+ my_uca_scanner_init_any(&sscanner, s, slen);
+ my_uca_scanner_init_any(&tscanner, t, tlen);
do
{
- s_res= MY_FUNCTION_NAME(scanner_next)(&sscanner);
- t_res= MY_FUNCTION_NAME(scanner_next)(&tscanner);
+ s_res= MY_FUNCTION_NAME(scanner_next)(&sscanner, &param);
+ t_res= MY_FUNCTION_NAME(scanner_next)(&tscanner, &param);
} while ( s_res == t_res && s_res >0);
if (s_res > 0 && t_res < 0)
@@ -220,7 +245,7 @@ MY_FUNCTION_NAME(strnncollsp_onelevel)(CHARSET_INFO *cs,
{
if (s_res != t_res)
return (s_res - t_res);
- s_res= MY_FUNCTION_NAME(scanner_next)(&sscanner);
+ s_res= MY_FUNCTION_NAME(scanner_next)(&sscanner, &param);
} while (s_res > 0);
return 0;
}
@@ -235,7 +260,7 @@ MY_FUNCTION_NAME(strnncollsp_onelevel)(CHARSET_INFO *cs,
{
if (s_res != t_res)
return (s_res - t_res);
- t_res= MY_FUNCTION_NAME(scanner_next)(&tscanner);
+ t_res= MY_FUNCTION_NAME(scanner_next)(&tscanner, &param);
} while (t_res > 0);
return 0;
}
@@ -278,12 +303,14 @@ MY_FUNCTION_NAME(strnncollsp_multilevel)(CHARSET_INFO *cs,
const uchar *s, size_t slen,
const uchar *t, size_t tlen)
{
-
- uint i, num_level= cs->levels_for_order;
- for (i= 0; i != num_level; i++)
+ uint i, level_flags= cs->levels_for_order;
+ for (i= 0; level_flags; i++, level_flags>>= 1)
{
- int ret= MY_FUNCTION_NAME(strnncollsp_onelevel)(cs, &cs->uca->level[i],
- s, slen, t, tlen);
+ int ret;
+ if (!(level_flags & 1))
+ continue;
+ ret= MY_FUNCTION_NAME(strnncollsp_onelevel)(cs, &cs->uca->level[i],
+ s, slen, t, tlen);
if (ret)
return ret;
}
@@ -299,12 +326,63 @@ MY_FUNCTION_NAME(strnncollsp_nopad_multilevel)(CHARSET_INFO *cs,
const uchar *s, size_t slen,
const uchar *t, size_t tlen)
{
- uint num_level= cs->levels_for_order;
- uint i;
- for (i= 0; i != num_level; i++)
+ uint i, level_flags;
+ int ret;
+
+ /* Compare only the primary level using NO PAD */
+ if ((ret= MY_FUNCTION_NAME(strnncoll_onelevel)(cs, &cs->uca->level[0],
+ s, slen, t, tlen, FALSE)))
+ return ret;
+
+ /*
+ Compare the other levels using PAD SPACE.
+ These are Unicode-14.0.0 DUCTET weights:
+
+0020 ; [*0209.0020.0002] # SPACE
+
+0035 ; [.2070.0020.0002] # DIGIT FIVE
+248C ; [.2070.0020.0004][*0281.0020.0004] # DIGIT FIVE FULL STOP
+
+0041 ; [.2075.0020.0008] # LATIN CAPITAL LETTER A
+0061 ; [.2075.0020.0002] # LATIN SMALL LETTER A
+00C1 ; [.2075.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH ACUTE
+00E1 ; [.2075.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH ACUTE
+
+ Examples demonstrating that it's important to use PAD SPACE
+ on the tertiary level:
+
+ The third level weights for "SMALL LETTER A"
+ - U+0061 produces one weight 0002
+ - U+00E1 produces two weights 0002+0002
+ For _ai_cs collations these two letters must be equal.
+ Therefore, the difference in trailing 0002 should be ignored.
+
+ The third level weights for "CAPITAL LETTER A"
+ - U+0041 produces one weight 0008
+ - U+00C1 produces two weights 0008+0002
+ For _ai_cs collations these two letters must be equal.
+ Therefore, the difference in trailing 0002 should be ignored.
+
+ Examples demonstrating that it's important to use PAD SPACE
+ on the secondary level:
+
+ When we implement variable shifted alternative weighting collations,
+ U+0035 will be equal to U+248C on the primary level in these collations.
+ The second level weights for "DIGIT FIVE" are:
+ - U+0035 produces one weight 0020
+ - U+248C produces two weights 0020+0020.
+ The difference for these two characters must be found only
+ on the tertiary level. Therefore, the trailing 0020 should be ignored.
+ */
+
+ for (i= 1, level_flags= cs->levels_for_order >> 1;
+ level_flags;
+ i++, level_flags>>= 1)
{
- int ret= MY_FUNCTION_NAME(strnncoll_onelevel)(cs, &cs->uca->level[i],
- s, slen, t, tlen, FALSE);
+ if (!(level_flags & 1))
+ continue;
+ ret= MY_FUNCTION_NAME(strnncollsp_onelevel)(cs, &cs->uca->level[i],
+ s, slen, t, tlen);
if (ret)
return ret;
}
@@ -318,6 +396,7 @@ MY_FUNCTION_NAME(strnncollsp_nopad_multilevel)(CHARSET_INFO *cs,
*/
static inline weight_and_nchars_t
MY_FUNCTION_NAME(scanner_next_pad_trim)(my_uca_scanner *scanner,
+ my_uca_scanner_param *param,
size_t nchars,
uint flags,
uint *generated)
@@ -326,7 +405,7 @@ MY_FUNCTION_NAME(scanner_next_pad_trim)(my_uca_scanner *scanner,
if (nchars > 0 ||
scanner->wbeg[0] /* Some weights from a previous expansion left */)
{
- if ((res= MY_FUNCTION_NAME(scanner_next_with_nchars)(scanner,
+ if ((res= MY_FUNCTION_NAME(scanner_next_with_nchars)(scanner, param,
nchars)).weight < 0)
{
/*
@@ -335,7 +414,7 @@ MY_FUNCTION_NAME(scanner_next_pad_trim)(my_uca_scanner *scanner,
*/
res.weight=
flags & MY_STRNNCOLLSP_NCHARS_EMULATE_TRIMMED_TRAILING_SPACES ?
- my_space_weight(scanner->level) : 0;
+ my_space_weight(param->level) : 0;
res.nchars= 1;
(*generated)++;
@@ -350,8 +429,8 @@ MY_FUNCTION_NAME(scanner_next_pad_trim)(my_uca_scanner *scanner,
e.g. CONCAT(x'00','a') with nchars=1.
Perform trimming.
*/
- res.weight= scanner->cs->state & MY_CS_NOPAD ?
- 0 : my_space_weight(scanner->level);
+ res.weight= param->cs->state & MY_CS_NOPAD ?
+ 0 : my_space_weight(param->level);
res.nchars= (uint) nchars;
(*generated)++;
}
@@ -359,8 +438,8 @@ MY_FUNCTION_NAME(scanner_next_pad_trim)(my_uca_scanner *scanner,
else
{
/* The caller wants nchars==0. Perform trimming. */
- res.weight= scanner->cs->state & MY_CS_NOPAD ?
- 0 : my_space_weight(scanner->level);
+ res.weight= param->cs->state & MY_CS_NOPAD ?
+ 0 : my_space_weight(param->level);
res.nchars= 0;
(*generated)++;
}
@@ -378,11 +457,25 @@ MY_FUNCTION_NAME(strnncollsp_nchars_onelevel)(CHARSET_INFO *cs,
{
my_uca_scanner sscanner;
my_uca_scanner tscanner;
+ my_uca_scanner_param param;
size_t s_nchars_left= nchars;
size_t t_nchars_left= nchars;
- my_uca_scanner_init_any(&sscanner, cs, level, s, slen);
- my_uca_scanner_init_any(&tscanner, cs, level, t, tlen);
+/*
+TODO: strnncollsp_nchars_onelevel
+#if MY_UCA_ASCII_OPTIMIZE
+{
+ size_t prefix= my_uca_level_booster_equal_prefix_length(level->booster,
+ s, slen, t, tlen);
+ s+= prefix, slen-= prefix;
+ t+= prefix, tlen-= prefix;
+}
+#endif
+*/
+
+ my_uca_scanner_param_init(&param, cs, level);
+ my_uca_scanner_init_any(&sscanner, s, slen);
+ my_uca_scanner_init_any(&tscanner, t, tlen);
for ( ; ; )
{
@@ -391,11 +484,12 @@ MY_FUNCTION_NAME(strnncollsp_nchars_onelevel)(CHARSET_INFO *cs,
uint generated= 0;
int diff;
- s_res= MY_FUNCTION_NAME(scanner_next_pad_trim)(&sscanner, s_nchars_left,
+ s_res= MY_FUNCTION_NAME(scanner_next_pad_trim)(&sscanner, &param,
+ s_nchars_left,
flags, &generated);
- t_res= MY_FUNCTION_NAME(scanner_next_pad_trim)(&tscanner, t_nchars_left,
+ t_res= MY_FUNCTION_NAME(scanner_next_pad_trim)(&tscanner, &param,
+ t_nchars_left,
flags, &generated);
-
if ((diff= (s_res.weight - t_res.weight)))
return diff;
@@ -473,15 +567,17 @@ MY_FUNCTION_NAME(strnncollsp_nchars_multilevel)(CHARSET_INFO *cs,
size_t nchars,
uint flags)
{
- uint num_level= cs->levels_for_order;
- uint i;
- for (i= 0; i != num_level; i++)
+ uint i, level_flags= cs->levels_for_order;
+ for (i= 0; level_flags; i++, level_flags>>= 1)
{
- int ret= MY_FUNCTION_NAME(strnncollsp_nchars_onelevel)(cs,
- &cs->uca->level[i],
- s, slen,
- t, tlen,
- nchars, flags);
+ int ret;
+ if (!(level_flags & 1))
+ continue;
+ ret= MY_FUNCTION_NAME(strnncollsp_nchars_onelevel)(cs,
+ &cs->uca->level[i],
+ s, slen,
+ t, tlen,
+ nchars, flags);
if (ret)
return ret;
}
@@ -525,12 +621,14 @@ MY_FUNCTION_NAME(hash_sort)(CHARSET_INFO *cs,
{
int s_res;
my_uca_scanner scanner;
+ my_uca_scanner_param param;
int space_weight= my_space_weight(&cs->uca->level[0]);
register ulong m1= *nr1, m2= *nr2;
- my_uca_scanner_init_any(&scanner, cs, &cs->uca->level[0], s, slen);
+ my_uca_scanner_param_init(&param, cs, &cs->uca->level[0]);
+ my_uca_scanner_init_any(&scanner, s, slen);
- while ((s_res= MY_FUNCTION_NAME(scanner_next)(&scanner)) >0)
+ while ((s_res= MY_FUNCTION_NAME(scanner_next)(&scanner, &param)) >0)
{
if (s_res == space_weight)
{
@@ -539,7 +637,7 @@ MY_FUNCTION_NAME(hash_sort)(CHARSET_INFO *cs,
do
{
count++;
- if ((s_res= MY_FUNCTION_NAME(scanner_next)(&scanner)) <= 0)
+ if ((s_res= MY_FUNCTION_NAME(scanner_next)(&scanner, &param)) <= 0)
{
/* Skip strings at end of string */
goto end;
@@ -579,11 +677,13 @@ MY_FUNCTION_NAME(hash_sort_nopad)(CHARSET_INFO *cs,
{
int s_res;
my_uca_scanner scanner;
+ my_uca_scanner_param param;
register ulong m1= *nr1, m2= *nr2;
- my_uca_scanner_init_any(&scanner, cs, &cs->uca->level[0], s, slen);
+ my_uca_scanner_param_init(&param, cs, &cs->uca->level[0]);
+ my_uca_scanner_init_any(&scanner, s, slen);
- while ((s_res= MY_FUNCTION_NAME(scanner_next)(&scanner)) >0)
+ while ((s_res= MY_FUNCTION_NAME(scanner_next)(&scanner, &param)) >0)
{
/* See comment above why we can't use MY_HASH_ADD_16() */
MY_HASH_ADD(m1, m2, s_res >> 8);
@@ -634,6 +734,7 @@ MY_FUNCTION_NAME(strnxfrm_onelevel_internal)(CHARSET_INFO *cs,
const uchar *src, size_t srclen)
{
my_uca_scanner scanner;
+ my_uca_scanner_param param;
int s_res;
DBUG_ASSERT(src || !srclen);
@@ -677,9 +778,12 @@ MY_FUNCTION_NAME(strnxfrm_onelevel_internal)(CHARSET_INFO *cs,
}
#endif
- my_uca_scanner_init_any(&scanner, cs, level, src, srclen);
+ my_uca_scanner_param_init(&param, cs, level);
+ my_uca_scanner_init_any(&scanner, src, srclen);
+
for (; dst < de && *nweights &&
- (s_res= MY_FUNCTION_NAME(scanner_next)(&scanner)) > 0 ; (*nweights)--)
+ (s_res= MY_FUNCTION_NAME(scanner_next)(&scanner, &param)) > 0 ;
+ (*nweights)--)
{
*dst++= s_res >> 8;
if (dst < de)
@@ -793,13 +897,15 @@ MY_FUNCTION_NAME(strnxfrm_multilevel)(CHARSET_INFO *cs,
const uchar *src, size_t srclen,
uint flags)
{
- uint num_level= cs->levels_for_order;
+ uint level_flags= cs->levels_for_order;
uchar *d0= dst;
uchar *de= dst + dstlen;
uint current_level;
- for (current_level= 0; current_level != num_level; current_level++)
+ for (current_level= 0; level_flags; current_level++, level_flags>>= 1)
{
+ if (!(level_flags & 1))
+ continue;
if (!(flags & MY_STRXFRM_LEVEL_ALL) ||
(flags & (MY_STRXFRM_LEVEL1 << current_level)))
dst= cs->state & MY_CS_NOPAD ?
@@ -841,7 +947,9 @@ MY_COLLATION_HANDLER MY_FUNCTION_NAME(collation_handler)=
MY_FUNCTION_NAME(hash_sort),
my_propagate_complex,
my_min_str_mb_simple,
- my_max_str_mb_simple
+ my_max_str_mb_simple,
+ my_ci_get_id_uca,
+ my_ci_get_collation_name_uca
};
@@ -865,7 +973,9 @@ MY_COLLATION_HANDLER MY_FUNCTION_NAME(collation_handler_nopad)=
MY_FUNCTION_NAME(hash_sort_nopad),
my_propagate_complex,
my_min_str_mb_simple_nopad,
- my_max_str_mb_simple
+ my_max_str_mb_simple,
+ my_ci_get_id_uca,
+ my_ci_get_collation_name_uca
};
@@ -887,7 +997,9 @@ MY_COLLATION_HANDLER MY_FUNCTION_NAME(collation_handler_multilevel)=
MY_FUNCTION_NAME(hash_sort),
my_propagate_complex,
my_min_str_mb_simple,
- my_max_str_mb_simple
+ my_max_str_mb_simple,
+ my_ci_get_id_uca,
+ my_ci_get_collation_name_uca
};
@@ -909,7 +1021,9 @@ MY_COLLATION_HANDLER MY_FUNCTION_NAME(collation_handler_nopad_multilevel)=
MY_FUNCTION_NAME(hash_sort),
my_propagate_complex,
my_min_str_mb_simple_nopad,
- my_max_str_mb_simple
+ my_max_str_mb_simple,
+ my_ci_get_id_uca,
+ my_ci_get_collation_name_uca
};
diff --git a/strings/ctype-uca1400.h b/strings/ctype-uca1400.h
new file mode 100644
index 00000000000..76ffbf5c732
--- /dev/null
+++ b/strings/ctype-uca1400.h
@@ -0,0 +1,252 @@
+#ifndef CTYPE_UCA_1400_H
+#define CTYPE_UCA_1400_H
+/* Copyright (c) 2021, MariaDB
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; version 2
+ of the License.
+
+ This library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this library; if not, write to the Free
+ Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ MA 02110-1335 USA */
+
+
+/*
+ 17000..187FF; Tangut [6144]
+ 18800..18AFF; Tangut Components [768]
+ 18D00..18D7F; Tangut Supplement [128]
+*/
+static inline my_bool
+my_uca_1400_is_assigned_tangut(my_wc_t code)
+{
+ return (code >= 0x17000 && code <= 0x187FF) ||
+ (code >= 0x18800 && code <= 0x18AFF) ||
+ (code >= 0x18D00 && code <= 0x18D7F);
+}
+
+static inline MY_UCA_IMPLICIT_WEIGHT
+my_uca_1400_implicit_weight_primary_tangut(my_wc_t code)
+{
+ MY_UCA_IMPLICIT_WEIGHT res;
+ res.weight[0]= 0xFB00;
+ res.weight[1]= (uint16) (code - 0x17000) | 0x8000;
+ return res;
+}
+
+
+/*
+ 1B170..1B2FF; Nushu [400]
+*/
+static inline my_bool
+my_uca_1400_is_assigned_nushu(my_wc_t code)
+{
+ return code >= 0x1B170 && code <= 0x1B2FF;
+}
+
+static inline MY_UCA_IMPLICIT_WEIGHT
+my_uca_1400_implicit_weight_primary_nushu(my_wc_t code)
+{
+ MY_UCA_IMPLICIT_WEIGHT res;
+ res.weight[0]= 0xFB01;
+ res.weight[1]= (uint16) (code - 0x1B170) | 0x8000;
+ return res;
+}
+
+
+/*
+ 18B00..18CFF; Khitan Small Script [512]
+*/
+static inline my_bool
+my_uca_1400_is_assigned_khitan_small_script(my_wc_t code)
+{
+ return code >= 0x18B00 && code <= 0x18CFF;
+}
+
+static inline MY_UCA_IMPLICIT_WEIGHT
+my_uca_1400_implicit_weight_primary_khitan(my_wc_t code)
+{
+ MY_UCA_IMPLICIT_WEIGHT res;
+ res.weight[0]= 0xFB02;
+ res.weight[1]= (uint16) (code - 0x18B00) | 0x8000;
+ return res;
+}
+
+
+/*
+ Unified_Ideograph=True AND
+ ((Block=CJK_Unified_Ideograph) OR (Block=CJK_Compatibility_Ideographs))
+
+ https://www.unicode.org/Public/14.0.0/ucd/Blocks.txt
+
+ 4E00..9FFF; CJK Unified Ideographs
+ F900..FAFF; CJK Compatibility Ideographs
+
+ https://www.unicode.org/Public/14.0.0/ucd/PropList.txt
+
+ 4E00..9FFF ; Unified_Ideograph # Lo [20992] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FFF
+ FA0E..FA0F ; Unified_Ideograph # Lo [2] CJK COMPATIBILITY IDEOGRAPH-FA0E..CJK COMPATIBILITY IDEOGRAPH-FA0F
+ FA11 ; Unified_Ideograph # Lo CJK COMPATIBILITY IDEOGRAPH-FA11
+ FA13..FA14 ; Unified_Ideograph # Lo [2] CJK COMPATIBILITY IDEOGRAPH-FA13..CJK COMPATIBILITY IDEOGRAPH-FA14
+ FA1F ; Unified_Ideograph # Lo CJK COMPATIBILITY IDEOGRAPH-FA1F
+ FA21 ; Unified_Ideograph # Lo CJK COMPATIBILITY IDEOGRAPH-FA21
+ FA23..FA24 ; Unified_Ideograph # Lo [2] CJK COMPATIBILITY IDEOGRAPH-FA23..CJK COMPATIBILITY IDEOGRAPH-FA24
+ FA27..FA29 ; Unified_Ideograph # Lo [3] CJK COMPATIBILITY IDEOGRAPH-FA27..CJK COMPATIBILITY IDEOGRAPH-FA29
+*/
+static inline my_bool
+my_uca_1400_is_core_han_unified_ideograph(my_wc_t code)
+{
+ return (code >= 0x4E00 && code <= 0x9FFF) ||
+ (code >= 0xFA0E && code <= 0xFA0F) ||
+ (code == 0xFA11) ||
+ (code >= 0xFA13 && code <= 0xFA14) ||
+ (code == 0xFA1F) ||
+ (code == 0xFA21) ||
+ (code >= 0xFA23 && code <= 0xFA24) ||
+ (code >= 0xFA27 && code <= 0xFA29);
+}
+
+
+/*
+ (Unified_Ideograph=True AND NOT
+ ((Block=CJK_Unified_Ideograph) OR (Block=CJK_Compatibility_Ideographs))
+
+ https://www.unicode.org/Public/14.0.0/ucd/Blocks.txt
+
+ 3400..4DBF; CJK Unified Ideographs Extension A
+ 20000..2A6DF; CJK Unified Ideographs Extension B
+ 2A700..2B73F; CJK Unified Ideographs Extension C
+ 2B740..2B81F; CJK Unified Ideographs Extension D
+ 2B820..2CEAF; CJK Unified Ideographs Extension E
+ 2CEB0..2EBEF; CJK Unified Ideographs Extension F
+ 30000..3134F; CJK Unified Ideographs Extension G
+
+ https://www.unicode.org/Public/14.0.0/ucd/PropList.txt
+
+ 3400..4DBF ; Unified_Ideograph # Lo [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF
+ 20000..2A6DF ; Unified_Ideograph # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF
+ 2A700..2B738 ; Unified_Ideograph # Lo [4153] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B738
+ 2B740..2B81D ; Unified_Ideograph # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D
+ 2B820..2CEA1 ; Unified_Ideograph # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1
+ 2CEB0..2EBE0 ; Unified_Ideograph # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0
+ 30000..3134A ; Unified_Ideograph # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A
+*/
+static inline my_bool
+my_uca_1400_is_other_han_unified_ideograph(my_wc_t code)
+{
+ return (code >= 0x3400 && code <= 0x4DBF) ||
+ (code >= 0x20000 && code <= 0x2A6DF) ||
+ (code >= 0x2A700 && code <= 0x2B738) ||
+ (code >= 0x2B740 && code <= 0x2B81D) ||
+ (code >= 0x2B820 && code <= 0x2CEA1) ||
+ (code >= 0x2CEB0 && code <= 0x2EBE0) ||
+ (code >= 0x30000 && code <= 0x3134A);
+}
+
+
+/*
+ See section "Computing Implicit Weights" in
+ https://unicode.org/reports/tr10/#Values_For_Base_Table
+*/
+static inline MY_UCA_IMPLICIT_WEIGHT
+my_uca_1400_implicit_weight_primary(my_wc_t code)
+{
+ if (my_uca_1400_is_core_han_unified_ideograph(code))
+ return my_uca_implicit_weight_primary_default(0xFB40, code);
+
+ if (my_uca_1400_is_other_han_unified_ideograph(code))
+ return my_uca_implicit_weight_primary_default(0xFB80, code);
+
+ if (my_uca_1400_is_assigned_tangut(code))
+ return my_uca_1400_implicit_weight_primary_tangut(code);
+
+ if (my_uca_1400_is_assigned_nushu(code))
+ return my_uca_1400_implicit_weight_primary_nushu(code);
+
+ if (my_uca_1400_is_assigned_khitan_small_script(code))
+ return my_uca_1400_implicit_weight_primary_khitan(code);
+
+ /* Unassigned - Any other code point */
+ return my_uca_implicit_weight_primary_default(0xFBC0, code);
+}
+
+
+#define MY_UCA1400_COLLATION_ID_POSSIBLE_MIN 2048
+#define MY_UCA1400_COLLATION_ID_POSSIBLE_MAX 4095
+
+static inline my_bool
+my_collation_id_is_uca1400(uint id)
+{
+ return (my_bool) (id >= MY_UCA1400_COLLATION_ID_POSSIBLE_MIN &&
+ id <= MY_UCA1400_COLLATION_ID_POSSIBLE_MAX);
+}
+
+/*
+ UCA1400 collation ID:
+
+ 1000 0000 0000 0x800 2048
+ 1111 1111 1111 0xFFF 4095
+ 1ccc tttt tPST
+
+ c - charset ID (utf8mb3=0, utf8mb4=1, ucs2=2, utf16=3, utf32=4)
+ p - PAD/NO PAD
+ S - secondary level is enabled
+ T - tertiary level is enabled
+*/
+
+
+static inline my_cs_encoding_t
+my_uca1400_collation_id_to_charset_id(uint id)
+{
+ return (my_cs_encoding_t) ((id >> 8) & 0x07);
+}
+
+
+static inline uint
+my_uca1400_collation_id_to_tailoring_id(uint id)
+{
+ return (id >> 3) & 0x1F;
+}
+
+
+static inline my_bool
+my_uca1400_collation_id_to_nopad_flag(uint id)
+{
+ return (my_bool) ((id >> 2) & 0x01);
+}
+
+static inline my_bool
+my_uca1400_collation_id_to_secondary_level_flag(uint id)
+{
+ return (my_bool) ((id >> 1) & 0x01);
+}
+
+static inline my_bool
+my_uca1400_collation_id_to_tertiary_level_flag(uint id)
+{
+ return (my_bool) ((id >> 0) & 0x01);
+}
+
+
+uint
+my_uca1400_make_builtin_collation_id(my_cs_encoding_t charset_id,
+ uint tailoring_id,
+ my_bool nopad,
+ my_bool secondary_level,
+ my_bool tertiary_level);
+
+my_bool
+my_uca1400_collation_definition_init(MY_CHARSET_LOADER *loader,
+ struct charset_info_st *dst,
+ uint collation_id);
+
+#define MY_UCA1400_COLLATION_DEFINITION_COUNT 26
+
+
+#endif /* CTYPE_UCA_1400_H */
diff --git a/strings/ctype-ucs2.c b/strings/ctype-ucs2.c
index b15a26172eb..5d67762ac2f 100644
--- a/strings/ctype-ucs2.c
+++ b/strings/ctype-ucs2.c
@@ -1197,17 +1197,14 @@ my_lengthsp_mb2(CHARSET_INFO *cs __attribute__((unused)),
static inline int my_weight_mb2_utf16mb2_general_ci(uchar b0, uchar b1)
{
my_wc_t wc= MY_UTF16_WC2(b0, b1);
- MY_UNICASE_CHARACTER *page= my_unicase_default_pages[wc >> 8];
- return (int) (page ? page[wc & 0xFF].sort : wc);
+ return my_general_ci_bmp_char_to_weight((uint16) wc);
}
#define MY_FUNCTION_NAME(x) my_ ## x ## _utf16_general_ci
#define DEFINE_STRNXFRM_UNICODE
#define DEFINE_STRNXFRM_UNICODE_NOPAD
#define MY_MB_WC(cs, pwc, s, e) my_mb_wc_utf16_quick(pwc, s, e)
#define OPTIMIZE_ASCII 0
-#define UNICASE_MAXCHAR MY_UNICASE_INFO_DEFAULT_MAXCHAR
-#define UNICASE_PAGE0 my_unicase_default_page00
-#define UNICASE_PAGES my_unicase_default_pages
+#define MY_WC_WEIGHT(x) my_general_ci_char_to_weight(x)
#define WEIGHT_ILSEQ(x) (0xFF0000 + (uchar) (x))
#define WEIGHT_MB2(b0,b1) my_weight_mb2_utf16mb2_general_ci(b0,b1)
#define WEIGHT_MB4(b0,b1,b2,b3) MY_CS_REPLACEMENT_CHARACTER
@@ -1284,40 +1281,6 @@ my_uni_utf16(CHARSET_INFO *cs __attribute__((unused)),
const char charset_name_utf16le[]= "utf16le";
#define charset_name_utf16le_length (sizeof(charset_name_utf16le)-1)
-static inline void
-my_tolower_utf16(MY_UNICASE_INFO *uni_plane, my_wc_t *wc)
-{
- MY_UNICASE_CHARACTER *page;
- if ((*wc <= uni_plane->maxchar) && (page= uni_plane->page[*wc >> 8]))
- *wc= page[*wc & 0xFF].tolower;
-}
-
-
-static inline void
-my_toupper_utf16(MY_UNICASE_INFO *uni_plane, my_wc_t *wc)
-{
- MY_UNICASE_CHARACTER *page;
- if ((*wc <= uni_plane->maxchar) && (page= uni_plane->page[*wc >> 8]))
- *wc= page[*wc & 0xFF].toupper;
-}
-
-
-static inline void
-my_tosort_utf16(MY_UNICASE_INFO *uni_plane, my_wc_t *wc)
-{
- if (*wc <= uni_plane->maxchar)
- {
- MY_UNICASE_CHARACTER *page;
- if ((page= uni_plane->page[*wc >> 8]))
- *wc= page[*wc & 0xFF].sort;
- }
- else
- {
- *wc= MY_CS_REPLACEMENT_CHARACTER;
- }
-}
-
-
static size_t
my_caseup_utf16(CHARSET_INFO *cs, const char *src, size_t srclen,
@@ -1329,13 +1292,13 @@ my_caseup_utf16(CHARSET_INFO *cs, const char *src, size_t srclen,
int res;
const char *srcend= src + srclen;
char *dstend= dst + dstlen;
- MY_UNICASE_INFO *uni_plane= cs->caseinfo;
+ MY_CASEFOLD_INFO *uni_plane= cs->casefold;
DBUG_ASSERT(srclen <= dstlen);
while ((src < srcend) &&
(res= mb_wc(cs, &wc, (uchar *) src, (uchar *) srcend)) > 0)
{
- my_toupper_utf16(uni_plane, &wc);
+ my_toupper_unicode(uni_plane, &wc);
if (res != wc_mb(cs, wc, (uchar *) dst, (uchar *) dstend))
break;
src+= res;
@@ -1354,12 +1317,12 @@ my_hash_sort_utf16_nopad(CHARSET_INFO *cs,
my_charset_conv_mb_wc mb_wc= cs->cset->mb_wc;
int res;
const uchar *e= s + slen;
- MY_UNICASE_INFO *uni_plane= cs->caseinfo;
+ MY_CASEFOLD_INFO *uni_plane= cs->casefold;
register ulong m1= *nr1, m2= *nr2;
while ((s < e) && (res= mb_wc(cs, &wc, (uchar *) s, (uchar *) e)) > 0)
{
- my_tosort_utf16(uni_plane, &wc);
+ my_tosort_unicode(uni_plane, &wc);
MY_HASH_ADD_16(m1, m2, wc);
s+= res;
}
@@ -1387,13 +1350,13 @@ my_casedn_utf16(CHARSET_INFO *cs, const char *src, size_t srclen,
int res;
const char *srcend= src + srclen;
char *dstend= dst + dstlen;
- MY_UNICASE_INFO *uni_plane= cs->caseinfo;
+ MY_CASEFOLD_INFO *uni_plane= cs->casefold;
DBUG_ASSERT(srclen <= dstlen);
while ((src < srcend) &&
(res= mb_wc(cs, &wc, (uchar *) src, (uchar *) srcend)) > 0)
{
- my_tolower_utf16(uni_plane, &wc);
+ my_tolower_unicode(uni_plane, &wc);
if (res != wc_mb(cs, wc, (uchar *) dst, (uchar *) dstend))
break;
src+= res;
@@ -1459,7 +1422,7 @@ my_wildcmp_utf16_ci(CHARSET_INFO *cs,
const char *wildstr,const char *wildend,
int escape, int w_one, int w_many)
{
- MY_UNICASE_INFO *uni_plane= cs->caseinfo;
+ MY_CASEFOLD_INFO *uni_plane= cs->casefold;
return my_wildcmp_unicode(cs, str, str_end, wildstr, wildend,
escape, w_one, w_many, uni_plane);
}
@@ -1517,7 +1480,9 @@ static MY_COLLATION_HANDLER my_collation_utf16_general_ci_handler =
my_hash_sort_utf16,
my_propagate_simple,
my_min_str_mb_simple,
- my_max_str_mb_simple
+ my_max_str_mb_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
@@ -1536,7 +1501,9 @@ static MY_COLLATION_HANDLER my_collation_utf16_bin_handler =
my_hash_sort_utf16_bin,
my_propagate_simple,
my_min_str_mb_simple,
- my_max_str_mb_simple
+ my_max_str_mb_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
@@ -1555,7 +1522,9 @@ static MY_COLLATION_HANDLER my_collation_utf16_general_nopad_ci_handler =
my_hash_sort_utf16_nopad,
my_propagate_simple,
my_min_str_mb_simple_nopad,
- my_max_str_mb_simple
+ my_max_str_mb_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
@@ -1574,7 +1543,9 @@ static MY_COLLATION_HANDLER my_collation_utf16_nopad_bin_handler =
my_hash_sort_utf16_nopad_bin,
my_propagate_simple,
my_min_str_mb_simple_nopad,
- my_max_str_mb_simple
+ my_max_str_mb_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
@@ -1608,7 +1579,9 @@ MY_CHARSET_HANDLER my_charset_utf16_handler=
my_well_formed_char_length_utf16,
my_copy_fix_mb2_or_mb4,
my_uni_utf16,
- my_wc_to_printable_generic
+ my_wc_to_printable_generic,
+ my_casefold_multiply_1,
+ my_casefold_multiply_1
};
@@ -1627,19 +1600,17 @@ struct charset_info_st my_charset_utf16_general_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
4, /* mbmaxlen */
0, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf16_handler,
&my_collation_utf16_general_ci_handler
};
@@ -1660,19 +1631,17 @@ struct charset_info_st my_charset_utf16_bin=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
4, /* mbmaxlen */
0, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf16_handler,
&my_collation_utf16_bin_handler
};
@@ -1693,19 +1662,17 @@ struct charset_info_st my_charset_utf16_general_nopad_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
4, /* mbmaxlen */
0, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf16_handler,
&my_collation_utf16_general_nopad_ci_handler
};
@@ -1727,19 +1694,17 @@ struct charset_info_st my_charset_utf16_nopad_bin=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
4, /* mbmaxlen */
0, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf16_handler,
&my_collation_utf16_nopad_bin_handler
};
@@ -1753,9 +1718,7 @@ struct charset_info_st my_charset_utf16_nopad_bin=
#define DEFINE_STRNXFRM_UNICODE_NOPAD
#define MY_MB_WC(cs, pwc, s, e) (my_ci_mb_wc(cs, pwc, s, e))
#define OPTIMIZE_ASCII 0
-#define UNICASE_MAXCHAR MY_UNICASE_INFO_DEFAULT_MAXCHAR
-#define UNICASE_PAGE0 my_unicase_default_page00
-#define UNICASE_PAGES my_unicase_default_pages
+#define MY_WC_WEIGHT(x) my_general_ci_char_to_weight(x)
#define WEIGHT_ILSEQ(x) (0xFF0000 + (uchar) (x))
#define WEIGHT_MB2(b0,b1) my_weight_mb2_utf16mb2_general_ci(b1,b0)
#define WEIGHT_MB4(b0,b1,b2,b3) MY_CS_REPLACEMENT_CHARACTER
@@ -1870,7 +1833,9 @@ static MY_COLLATION_HANDLER my_collation_utf16le_general_ci_handler =
my_hash_sort_utf16,
my_propagate_simple,
my_min_str_mb_simple,
- my_max_str_mb_simple
+ my_max_str_mb_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
@@ -1889,7 +1854,9 @@ static MY_COLLATION_HANDLER my_collation_utf16le_bin_handler =
my_hash_sort_utf16_bin,
my_propagate_simple,
my_min_str_mb_simple,
- my_max_str_mb_simple
+ my_max_str_mb_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
@@ -1908,7 +1875,9 @@ static MY_COLLATION_HANDLER my_collation_utf16le_general_nopad_ci_handler =
my_hash_sort_utf16_nopad,
my_propagate_simple,
my_min_str_mb_simple_nopad,
- my_max_str_mb_simple
+ my_max_str_mb_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
@@ -1927,7 +1896,9 @@ static MY_COLLATION_HANDLER my_collation_utf16le_nopad_bin_handler =
my_hash_sort_utf16_nopad_bin,
my_propagate_simple,
my_min_str_mb_simple_nopad,
- my_max_str_mb_simple
+ my_max_str_mb_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
@@ -1961,7 +1932,9 @@ static MY_CHARSET_HANDLER my_charset_utf16le_handler=
my_well_formed_char_length_utf16,
my_copy_fix_mb2_or_mb4,
my_uni_utf16le,
- my_wc_to_printable_generic
+ my_wc_to_printable_generic,
+ my_casefold_multiply_1,
+ my_casefold_multiply_1
};
@@ -1980,19 +1953,17 @@ struct charset_info_st my_charset_utf16le_general_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
4, /* mbmaxlen */
0, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf16le_handler,
&my_collation_utf16le_general_ci_handler
};
@@ -2013,19 +1984,17 @@ struct charset_info_st my_charset_utf16le_bin=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
4, /* mbmaxlen */
0, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf16le_handler,
&my_collation_utf16le_bin_handler
};
@@ -2046,19 +2015,17 @@ struct charset_info_st my_charset_utf16le_general_nopad_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
4, /* mbmaxlen */
0, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf16le_handler,
&my_collation_utf16le_general_nopad_ci_handler
};
@@ -2080,19 +2047,17 @@ struct charset_info_st my_charset_utf16le_nopad_bin=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
4, /* mbmaxlen */
0, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf16le_handler,
&my_collation_utf16le_nopad_bin_handler
};
@@ -2118,21 +2083,14 @@ static inline int my_weight_utf32_general_ci(uchar b0, uchar b1,
uchar b2, uchar b3)
{
my_wc_t wc= MY_UTF32_WC4(b0, b1, b2, b3);
- if (wc <= 0xFFFF)
- {
- MY_UNICASE_CHARACTER *page= my_unicase_default_pages[wc >> 8];
- return (int) (page ? page[wc & 0xFF].sort : wc);
- }
- return MY_CS_REPLACEMENT_CHARACTER;
+ return my_general_ci_char_to_weight(wc);
}
#define MY_FUNCTION_NAME(x) my_ ## x ## _utf32_general_ci
#define DEFINE_STRNXFRM_UNICODE
#define DEFINE_STRNXFRM_UNICODE_NOPAD
#define MY_MB_WC(cs, pwc, s, e) my_mb_wc_utf32_quick(pwc, s, e)
#define OPTIMIZE_ASCII 0
-#define UNICASE_MAXCHAR MY_UNICASE_INFO_DEFAULT_MAXCHAR
-#define UNICASE_PAGE0 my_unicase_default_page00
-#define UNICASE_PAGES my_unicase_default_pages
+#define MY_WC_WEIGHT(x) my_general_ci_char_to_weight(x)
#define WEIGHT_ILSEQ(x) (0xFF0000 + (uchar) (x))
#define WEIGHT_MB4(b0,b1,b2,b3) my_weight_utf32_general_ci(b0, b1, b2, b3)
#include "strcoll.inl"
@@ -2184,40 +2142,6 @@ my_uni_utf32(CHARSET_INFO *cs __attribute__((unused)),
}
-static inline void
-my_tolower_utf32(MY_UNICASE_INFO *uni_plane, my_wc_t *wc)
-{
- MY_UNICASE_CHARACTER *page;
- if ((*wc <= uni_plane->maxchar) && (page= uni_plane->page[*wc >> 8]))
- *wc= page[*wc & 0xFF].tolower;
-}
-
-
-static inline void
-my_toupper_utf32(MY_UNICASE_INFO *uni_plane, my_wc_t *wc)
-{
- MY_UNICASE_CHARACTER *page;
- if ((*wc <= uni_plane->maxchar) && (page= uni_plane->page[*wc >> 8]))
- *wc= page[*wc & 0xFF].toupper;
-}
-
-
-static inline void
-my_tosort_utf32(MY_UNICASE_INFO *uni_plane, my_wc_t *wc)
-{
- if (*wc <= uni_plane->maxchar)
- {
- MY_UNICASE_CHARACTER *page;
- if ((page= uni_plane->page[*wc >> 8]))
- *wc= page[*wc & 0xFF].sort;
- }
- else
- {
- *wc= MY_CS_REPLACEMENT_CHARACTER;
- }
-}
-
-
static size_t
my_lengthsp_utf32(CHARSET_INFO *cs __attribute__((unused)),
const char *ptr, size_t length)
@@ -2238,13 +2162,13 @@ my_caseup_utf32(CHARSET_INFO *cs, const char *src, size_t srclen,
int res;
const char *srcend= src + srclen;
char *dstend= dst + dstlen;
- MY_UNICASE_INFO *uni_plane= cs->caseinfo;
+ MY_CASEFOLD_INFO *uni_plane= cs->casefold;
DBUG_ASSERT(srclen <= dstlen);
while ((src < srcend) &&
(res= my_utf32_uni(cs, &wc, (uchar *)src, (uchar*) srcend)) > 0)
{
- my_toupper_utf32(uni_plane, &wc);
+ my_toupper_unicode(uni_plane, &wc);
if (res != my_uni_utf32(cs, wc, (uchar*) dst, (uchar*) dstend))
break;
src+= res;
@@ -2261,12 +2185,12 @@ my_hash_sort_utf32_nopad(CHARSET_INFO *cs, const uchar *s, size_t slen,
my_wc_t wc;
int res;
const uchar *e= s + slen;
- MY_UNICASE_INFO *uni_plane= cs->caseinfo;
+ MY_CASEFOLD_INFO *uni_plane= cs->casefold;
register ulong m1= *nr1, m2= *nr2;
while ((res= my_utf32_uni(cs, &wc, (uchar*) s, (uchar*) e)) > 0)
{
- my_tosort_utf32(uni_plane, &wc);
+ my_tosort_unicode(uni_plane, &wc);
MY_HASH_ADD(m1, m2, (uint) (wc >> 24));
MY_HASH_ADD(m1, m2, (uint) (wc >> 16) & 0xFF);
MY_HASH_ADD(m1, m2, (uint) (wc >> 8) & 0xFF);
@@ -2295,12 +2219,12 @@ my_casedn_utf32(CHARSET_INFO *cs, const char *src, size_t srclen,
int res;
const char *srcend= src + srclen;
char *dstend= dst + dstlen;
- MY_UNICASE_INFO *uni_plane= cs->caseinfo;
+ MY_CASEFOLD_INFO *uni_plane= cs->casefold;
DBUG_ASSERT(srclen <= dstlen);
while ((res= my_utf32_uni(cs, &wc, (uchar*) src, (uchar*) srcend)) > 0)
{
- my_tolower_utf32(uni_plane,&wc);
+ my_tolower_unicode(uni_plane,&wc);
if (res != my_uni_utf32(cs, wc, (uchar*) dst, (uchar*) dstend))
break;
src+= res;
@@ -2649,7 +2573,7 @@ my_wildcmp_utf32_ci(CHARSET_INFO *cs,
const char *wildstr, const char *wildend,
int escape, int w_one, int w_many)
{
- MY_UNICASE_INFO *uni_plane= cs->caseinfo;
+ MY_CASEFOLD_INFO *uni_plane= cs->casefold;
return my_wildcmp_unicode(cs, str, str_end, wildstr, wildend,
escape, w_one, w_many, uni_plane);
}
@@ -2708,7 +2632,9 @@ static MY_COLLATION_HANDLER my_collation_utf32_general_ci_handler =
my_hash_sort_utf32,
my_propagate_simple,
my_min_str_mb_simple,
- my_max_str_mb_simple
+ my_max_str_mb_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
@@ -2727,7 +2653,9 @@ static MY_COLLATION_HANDLER my_collation_utf32_bin_handler =
my_hash_sort_utf32,
my_propagate_simple,
my_min_str_mb_simple,
- my_max_str_mb_simple
+ my_max_str_mb_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
@@ -2746,7 +2674,9 @@ static MY_COLLATION_HANDLER my_collation_utf32_general_nopad_ci_handler =
my_hash_sort_utf32_nopad,
my_propagate_simple,
my_min_str_mb_simple_nopad,
- my_max_str_mb_simple
+ my_max_str_mb_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
@@ -2765,7 +2695,9 @@ static MY_COLLATION_HANDLER my_collation_utf32_nopad_bin_handler =
my_hash_sort_utf32_nopad,
my_propagate_simple,
my_min_str_mb_simple_nopad,
- my_max_str_mb_simple
+ my_max_str_mb_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
@@ -2799,7 +2731,9 @@ MY_CHARSET_HANDLER my_charset_utf32_handler=
my_well_formed_char_length_utf32,
my_copy_fix_mb2_or_mb4,
my_uni_utf32,
- my_wc_to_printable_generic
+ my_wc_to_printable_generic,
+ my_casefold_multiply_1,
+ my_casefold_multiply_1
};
@@ -2818,19 +2752,17 @@ struct charset_info_st my_charset_utf32_general_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
4, /* mbminlen */
4, /* mbmaxlen */
0, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf32_handler,
&my_collation_utf32_general_ci_handler
};
@@ -2851,19 +2783,17 @@ struct charset_info_st my_charset_utf32_bin=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
4, /* mbminlen */
4, /* mbmaxlen */
0, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf32_handler,
&my_collation_utf32_bin_handler
};
@@ -2884,19 +2814,17 @@ struct charset_info_st my_charset_utf32_general_nopad_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
4, /* mbminlen */
4, /* mbmaxlen */
0, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf32_handler,
&my_collation_utf32_general_nopad_ci_handler
};
@@ -2918,19 +2846,17 @@ struct charset_info_st my_charset_utf32_nopad_bin=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
4, /* mbminlen */
4, /* mbmaxlen */
0, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf32_handler,
&my_collation_utf32_nopad_bin_handler
};
@@ -3010,16 +2936,14 @@ static const uchar to_upper_ucs2[] = {
static inline int my_weight_mb2_ucs2_general_ci(uchar b0, uchar b1)
{
my_wc_t wc= UCS2_CODE(b0, b1);
- MY_UNICASE_CHARACTER *page= my_unicase_default_pages[wc >> 8];
- return (int) (page ? page[wc & 0xFF].sort : wc);
+ return my_general_ci_bmp_char_to_weight((uint16) wc);
}
static inline int my_weight_mb2_ucs2_general_mysql500_ci(uchar b0, uchar b1)
{
my_wc_t wc= UCS2_CODE(b0, b1);
- MY_UNICASE_CHARACTER *page= my_unicase_mysql500_pages[wc >> 8];
- return (int) (page ? page[wc & 0xFF].sort : wc);
+ return my_general_mysql500_ci_bmp_char_to_weight((uint16) wc);
}
@@ -3028,21 +2952,18 @@ static inline int my_weight_mb2_ucs2_general_mysql500_ci(uchar b0, uchar b1)
#define DEFINE_STRNXFRM_UNICODE_NOPAD
#define MY_MB_WC(cs, pwc, s, e) my_mb_wc_ucs2_quick(pwc, s, e)
#define OPTIMIZE_ASCII 0
-#define UNICASE_MAXCHAR MY_UNICASE_INFO_DEFAULT_MAXCHAR
-#define UNICASE_PAGE0 my_unicase_default_page00
-#define UNICASE_PAGES my_unicase_default_pages
+#define MY_WC_WEIGHT(x) my_general_ci_bmp_char_to_weight(x)
#define WEIGHT_ILSEQ(x) (0xFF0000 + (uchar) (x))
#define WEIGHT_MB2(b0,b1) my_weight_mb2_ucs2_general_ci(b0,b1)
#include "strcoll.inl"
+
#define MY_FUNCTION_NAME(x) my_ ## x ## _ucs2_general_mysql500_ci
#define DEFINE_STRNXFRM_UNICODE
#define MY_MB_WC(cs, pwc, s, e) my_mb_wc_ucs2_quick(pwc, s, e)
#define OPTIMIZE_ASCII 0
-#define UNICASE_MAXCHAR MY_UNICASE_INFO_DEFAULT_MAXCHAR
-#define UNICASE_PAGE0 my_unicase_mysql500_page00
-#define UNICASE_PAGES my_unicase_mysql500_pages
+#define MY_WC_WEIGHT(x) my_general_mysql500_ci_bmp_char_to_weight(x)
#define WEIGHT_ILSEQ(x) (0xFF0000 + (uchar) (x))
#define WEIGHT_MB2(b0,b1) my_weight_mb2_ucs2_general_mysql500_ci(b0,b1)
#include "strcoll.inl"
@@ -3100,32 +3021,6 @@ static int my_uni_ucs2(CHARSET_INFO *cs __attribute__((unused)) ,
}
-static inline void
-my_tolower_ucs2(MY_UNICASE_INFO *uni_plane, my_wc_t *wc)
-{
- MY_UNICASE_CHARACTER *page;
- if ((page= uni_plane->page[(*wc >> 8) & 0xFF]))
- *wc= page[*wc & 0xFF].tolower;
-}
-
-
-static inline void
-my_toupper_ucs2(MY_UNICASE_INFO *uni_plane, my_wc_t *wc)
-{
- MY_UNICASE_CHARACTER *page;
- if ((page= uni_plane->page[(*wc >> 8) & 0xFF]))
- *wc= page[*wc & 0xFF].toupper;
-}
-
-
-static inline void
-my_tosort_ucs2(MY_UNICASE_INFO *uni_plane, my_wc_t *wc)
-{
- MY_UNICASE_CHARACTER *page;
- if ((page= uni_plane->page[(*wc >> 8) & 0xFF]))
- *wc= page[*wc & 0xFF].sort;
-}
-
static size_t my_caseup_ucs2(CHARSET_INFO *cs, const char *src, size_t srclen,
char *dst, size_t dstlen)
{
@@ -3133,13 +3028,13 @@ static size_t my_caseup_ucs2(CHARSET_INFO *cs, const char *src, size_t srclen,
int res;
const char *srcend= src + srclen;
char *dstend= dst + dstlen;
- MY_UNICASE_INFO *uni_plane= cs->caseinfo;
+ MY_CASEFOLD_INFO *uni_plane= cs->casefold;
DBUG_ASSERT(srclen <= dstlen);
while ((src < srcend) &&
(res= my_ucs2_uni(cs, &wc, (uchar *)src, (uchar*) srcend)) > 0)
{
- my_toupper_ucs2(uni_plane, &wc);
+ my_toupper_unicode_bmp(uni_plane, &wc);
if (res != my_uni_ucs2(cs, wc, (uchar*) dst, (uchar*) dstend))
break;
src+= res;
@@ -3156,12 +3051,12 @@ my_hash_sort_ucs2_nopad(CHARSET_INFO *cs, const uchar *s, size_t slen,
my_wc_t wc;
int res;
const uchar *e=s+slen;
- MY_UNICASE_INFO *uni_plane= cs->caseinfo;
+ MY_CASEFOLD_INFO *uni_plane= cs->casefold;
register ulong m1= *nr1, m2= *nr2;
while ((s < e) && (res=my_ucs2_uni(cs,&wc, (uchar *)s, (uchar*)e)) >0)
{
- my_tosort_ucs2(uni_plane, &wc);
+ my_tosort_unicode_bmp(uni_plane, &wc);
MY_HASH_ADD_16(m1, m2, wc);
s+=res;
}
@@ -3184,13 +3079,13 @@ static size_t my_casedn_ucs2(CHARSET_INFO *cs, const char *src, size_t srclen,
int res;
const char *srcend= src + srclen;
char *dstend= dst + dstlen;
- MY_UNICASE_INFO *uni_plane= cs->caseinfo;
+ MY_CASEFOLD_INFO *uni_plane= cs->casefold;
DBUG_ASSERT(srclen <= dstlen);
while ((src < srcend) &&
(res= my_ucs2_uni(cs, &wc, (uchar*) src, (uchar*) srcend)) > 0)
{
- my_tolower_ucs2(uni_plane, &wc);
+ my_tolower_unicode_bmp(uni_plane, &wc);
if (res != my_uni_ucs2(cs, wc, (uchar*) dst, (uchar*) dstend))
break;
src+= res;
@@ -3274,7 +3169,7 @@ int my_wildcmp_ucs2_ci(CHARSET_INFO *cs,
const char *wildstr,const char *wildend,
int escape, int w_one, int w_many)
{
- MY_UNICASE_INFO *uni_plane= cs->caseinfo;
+ MY_CASEFOLD_INFO *uni_plane= cs->casefold;
return my_wildcmp_unicode(cs,str,str_end,wildstr,wildend,
escape,w_one,w_many,uni_plane);
}
@@ -3331,7 +3226,9 @@ static MY_COLLATION_HANDLER my_collation_ucs2_general_ci_handler =
my_hash_sort_ucs2,
my_propagate_simple,
my_min_str_mb_simple,
- my_max_str_mb_simple
+ my_max_str_mb_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
@@ -3350,7 +3247,9 @@ static MY_COLLATION_HANDLER my_collation_ucs2_general_mysql500_ci_handler =
my_hash_sort_ucs2,
my_propagate_simple,
my_min_str_mb_simple,
- my_max_str_mb_simple
+ my_max_str_mb_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
@@ -3369,7 +3268,9 @@ static MY_COLLATION_HANDLER my_collation_ucs2_bin_handler =
my_hash_sort_ucs2_bin,
my_propagate_simple,
my_min_str_mb_simple,
- my_max_str_mb_simple
+ my_max_str_mb_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
@@ -3388,7 +3289,9 @@ static MY_COLLATION_HANDLER my_collation_ucs2_general_nopad_ci_handler =
my_hash_sort_ucs2_nopad,
my_propagate_simple,
my_min_str_mb_simple_nopad,
- my_max_str_mb_simple
+ my_max_str_mb_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
@@ -3407,7 +3310,9 @@ static MY_COLLATION_HANDLER my_collation_ucs2_nopad_bin_handler =
my_hash_sort_ucs2_nopad_bin,
my_propagate_simple,
my_min_str_mb_simple_nopad,
- my_max_str_mb_simple
+ my_max_str_mb_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
@@ -3441,7 +3346,9 @@ MY_CHARSET_HANDLER my_charset_ucs2_handler=
my_well_formed_char_length_ucs2,
my_copy_fix_mb2_or_mb4,
my_uni_ucs2,
- my_wc_to_printable_generic
+ my_wc_to_printable_generic,
+ my_casefold_multiply_1,
+ my_casefold_multiply_1
};
@@ -3460,19 +3367,17 @@ struct charset_info_st my_charset_ucs2_general_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
2, /* mbmaxlen */
0, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_ucs2_handler,
&my_collation_ucs2_general_ci_handler
};
@@ -3493,19 +3398,17 @@ struct charset_info_st my_charset_ucs2_general_mysql500_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_mysql500, /* caseinfo */
+ &my_casefold_mysql500, /* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
2, /* mbmaxlen */
0, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_ucs2_handler,
&my_collation_ucs2_general_mysql500_ci_handler
};
@@ -3526,19 +3429,17 @@ struct charset_info_st my_charset_ucs2_bin=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
2, /* mbmaxlen */
0, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_ucs2_handler,
&my_collation_ucs2_bin_handler
};
@@ -3559,19 +3460,17 @@ struct charset_info_st my_charset_ucs2_general_nopad_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default, /* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
2, /* mbmaxlen */
0, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_ucs2_handler,
&my_collation_ucs2_general_nopad_ci_handler
};
@@ -3592,19 +3491,17 @@ struct charset_info_st my_charset_ucs2_nopad_bin=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default, /* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
2, /* mbminlen */
2, /* mbmaxlen */
0, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_ucs2_handler,
&my_collation_ucs2_nopad_bin_handler
};
diff --git a/strings/ctype-ujis.c b/strings/ctype-ujis.c
index adcd4825d88..a5624a8c341 100644
--- a/strings/ctype-ujis.c
+++ b/strings/ctype-ujis.c
@@ -65976,1097 +65976,1097 @@ my_wc_mb_euc_jp(CHARSET_INFO *cs __attribute__((unused)),
/* Case info pages for JIS-X-0208 range */
-static MY_UNICASE_CHARACTER cA2[256]=
+static const MY_CASEFOLD_CHARACTER cA2[256]=
{
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx40 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx50 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx60 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx70 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx80 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx90 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0xA2A0,0xA2A0,0x003F}, /* A2A0 */
- {0xA2A1,0xA2A1,0x25C6},
- {0xA2A2,0xA2A2,0x25A1},
- {0xA2A3,0xA2A3,0x25A0},
- {0xA2A4,0xA2A4,0x25B3},
- {0xA2A5,0xA2A5,0x25B2},
- {0xA2A6,0xA2A6,0x25BD},
- {0xA2A7,0xA2A7,0x25BC},
- {0xA2A8,0xA2A8,0x203B},
- {0xA2A9,0xA2A9,0x3012},
- {0xA2AA,0xA2AA,0x2192},
- {0xA2AB,0xA2AB,0x2190},
- {0xA2AC,0xA2AC,0x2191},
- {0xA2AD,0xA2AD,0x2193},
- {0xA2AE,0xA2AE,0x3013},
- {0xA2AF,0xA2AF,0x003F},
- {0xA2B0,0xA2B0,0x003F}, /* A2B0 */
- {0xA2B1,0xA2B1,0x003F},
- {0xA2B2,0xA2B2,0x003F},
- {0xA2B3,0xA2B3,0x003F},
- {0xA2B4,0xA2B4,0x003F},
- {0xA2B5,0xA2B5,0x003F},
- {0xA2B6,0xA2B6,0x003F},
- {0xA2B7,0xA2B7,0x003F},
- {0xA2B8,0xA2B8,0x003F},
- {0xA2B9,0xA2B9,0x003F},
- {0xA2BA,0xA2BA,0x2208},
- {0xA2BB,0xA2BB,0x220B},
- {0xA2BC,0xA2BC,0x2286},
- {0xA2BD,0xA2BD,0x2287},
- {0xA2BE,0xA2BE,0x2282},
- {0xA2BF,0xA2BF,0x2283},
- {0xA2C0,0xA2C0,0x222A}, /* A2C0 */
- {0xA2C1,0xA2C1,0x2229},
- {0xA2C2,0xA2C2,0x003F},
- {0xA2C3,0xA2C3,0x003F},
- {0xA2C4,0xA2C4,0x003F},
- {0xA2C5,0xA2C5,0x003F},
- {0xA2C6,0xA2C6,0x003F},
- {0xA2C7,0xA2C7,0x003F},
- {0xA2C8,0xA2C8,0x003F},
- {0xA2C9,0xA2C9,0x003F},
- {0xA2CA,0xA2CA,0x2227},
- {0xA2CB,0xA2CB,0x2228},
- {0xA2CC,0xA2CC,0x00AC},
- {0xA2CD,0xA2CD,0x21D2},
- {0xA2CE,0xA2CE,0x21D4},
- {0xA2CF,0xA2CF,0x2200},
- {0xA2D0,0xA2D0,0x2203}, /* A2D0 */
- {0xA2D1,0xA2D1,0x003F},
- {0xA2D2,0xA2D2,0x003F},
- {0xA2D3,0xA2D3,0x003F},
- {0xA2D4,0xA2D4,0x003F},
- {0xA2D5,0xA2D5,0x003F},
- {0xA2D6,0xA2D6,0x003F},
- {0xA2D7,0xA2D7,0x003F},
- {0xA2D8,0xA2D8,0x003F},
- {0xA2D9,0xA2D9,0x003F},
- {0xA2DA,0xA2DA,0x003F},
- {0xA2DB,0xA2DB,0x003F},
- {0xA2DC,0xA2DC,0x2220},
- {0xA2DD,0xA2DD,0x22A5},
- {0xA2DE,0xA2DE,0x2312},
- {0xA2DF,0xA2DF,0x2202},
- {0xA2E0,0xA2E0,0x2207}, /* A2E0 */
- {0xA2E1,0xA2E1,0x2261},
- {0xA2E2,0xA2E2,0x2252},
- {0xA2E3,0xA2E3,0x226A},
- {0xA2E4,0xA2E4,0x226B},
- {0xA2E5,0xA2E5,0x221A},
- {0xA2E6,0xA2E6,0x223D},
- {0xA2E7,0xA2E7,0x221D},
- {0xA2E8,0xA2E8,0x2235},
- {0xA2E9,0xA2E9,0x222B},
- {0xA2EA,0xA2EA,0x222C},
- {0xA2EB,0xA2EB,0x003F},
- {0xA2EC,0xA2EC,0x003F},
- {0xA2ED,0xA2ED,0x003F},
- {0xA2EE,0xA2EE,0x003F},
- {0xA2EF,0xA2EF,0x003F},
- {0xA2F0,0xA2F0,0x003F}, /* A2F0 */
- {0xA2F1,0xA2F1,0x003F},
- {0xA2F2,0x8FABA9,0x212B},
- {0xA2F3,0xA2F3,0x2030},
- {0xA2F4,0xA2F4,0x266F},
- {0xA2F5,0xA2F5,0x266D},
- {0xA2F6,0xA2F6,0x266A},
- {0xA2F7,0xA2F7,0x2020},
- {0xA2F8,0xA2F8,0x2021},
- {0xA2F9,0xA2F9,0x00B6},
- {0xA2FA,0xA2FA,0x003F},
- {0xA2FB,0xA2FB,0x003F},
- {0xA2FC,0xA2FC,0x003F},
- {0xA2FD,0xA2FD,0x003F},
- {0xA2FE,0xA2FE,0x25EF},
- {0xA2FF,0xA2FF,0x003F}
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx00 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx10 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx20 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx30 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx40 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx50 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx60 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx70 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx80 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx90 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0xA2A0,0xA2A0}, /* A2A0 */
+ {0xA2A1,0xA2A1},
+ {0xA2A2,0xA2A2},
+ {0xA2A3,0xA2A3},
+ {0xA2A4,0xA2A4},
+ {0xA2A5,0xA2A5},
+ {0xA2A6,0xA2A6},
+ {0xA2A7,0xA2A7},
+ {0xA2A8,0xA2A8},
+ {0xA2A9,0xA2A9},
+ {0xA2AA,0xA2AA},
+ {0xA2AB,0xA2AB},
+ {0xA2AC,0xA2AC},
+ {0xA2AD,0xA2AD},
+ {0xA2AE,0xA2AE},
+ {0xA2AF,0xA2AF},
+ {0xA2B0,0xA2B0}, /* A2B0 */
+ {0xA2B1,0xA2B1},
+ {0xA2B2,0xA2B2},
+ {0xA2B3,0xA2B3},
+ {0xA2B4,0xA2B4},
+ {0xA2B5,0xA2B5},
+ {0xA2B6,0xA2B6},
+ {0xA2B7,0xA2B7},
+ {0xA2B8,0xA2B8},
+ {0xA2B9,0xA2B9},
+ {0xA2BA,0xA2BA},
+ {0xA2BB,0xA2BB},
+ {0xA2BC,0xA2BC},
+ {0xA2BD,0xA2BD},
+ {0xA2BE,0xA2BE},
+ {0xA2BF,0xA2BF},
+ {0xA2C0,0xA2C0}, /* A2C0 */
+ {0xA2C1,0xA2C1},
+ {0xA2C2,0xA2C2},
+ {0xA2C3,0xA2C3},
+ {0xA2C4,0xA2C4},
+ {0xA2C5,0xA2C5},
+ {0xA2C6,0xA2C6},
+ {0xA2C7,0xA2C7},
+ {0xA2C8,0xA2C8},
+ {0xA2C9,0xA2C9},
+ {0xA2CA,0xA2CA},
+ {0xA2CB,0xA2CB},
+ {0xA2CC,0xA2CC},
+ {0xA2CD,0xA2CD},
+ {0xA2CE,0xA2CE},
+ {0xA2CF,0xA2CF},
+ {0xA2D0,0xA2D0}, /* A2D0 */
+ {0xA2D1,0xA2D1},
+ {0xA2D2,0xA2D2},
+ {0xA2D3,0xA2D3},
+ {0xA2D4,0xA2D4},
+ {0xA2D5,0xA2D5},
+ {0xA2D6,0xA2D6},
+ {0xA2D7,0xA2D7},
+ {0xA2D8,0xA2D8},
+ {0xA2D9,0xA2D9},
+ {0xA2DA,0xA2DA},
+ {0xA2DB,0xA2DB},
+ {0xA2DC,0xA2DC},
+ {0xA2DD,0xA2DD},
+ {0xA2DE,0xA2DE},
+ {0xA2DF,0xA2DF},
+ {0xA2E0,0xA2E0}, /* A2E0 */
+ {0xA2E1,0xA2E1},
+ {0xA2E2,0xA2E2},
+ {0xA2E3,0xA2E3},
+ {0xA2E4,0xA2E4},
+ {0xA2E5,0xA2E5},
+ {0xA2E6,0xA2E6},
+ {0xA2E7,0xA2E7},
+ {0xA2E8,0xA2E8},
+ {0xA2E9,0xA2E9},
+ {0xA2EA,0xA2EA},
+ {0xA2EB,0xA2EB},
+ {0xA2EC,0xA2EC},
+ {0xA2ED,0xA2ED},
+ {0xA2EE,0xA2EE},
+ {0xA2EF,0xA2EF},
+ {0xA2F0,0xA2F0}, /* A2F0 */
+ {0xA2F1,0xA2F1},
+ {0xA2F2,0x8FABA9},
+ {0xA2F3,0xA2F3},
+ {0xA2F4,0xA2F4},
+ {0xA2F5,0xA2F5},
+ {0xA2F6,0xA2F6},
+ {0xA2F7,0xA2F7},
+ {0xA2F8,0xA2F8},
+ {0xA2F9,0xA2F9},
+ {0xA2FA,0xA2FA},
+ {0xA2FB,0xA2FB},
+ {0xA2FC,0xA2FC},
+ {0xA2FD,0xA2FD},
+ {0xA2FE,0xA2FE},
+ {0xA2FF,0xA2FF}
};
-static MY_UNICASE_CHARACTER cA3[256]=
+static const MY_CASEFOLD_CHARACTER cA3[256]=
{
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx40 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx50 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx60 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx70 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx80 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx90 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0xA3A0,0xA3A0,0x003F}, /* A3A0 */
- {0xA3A1,0xA3A1,0x003F},
- {0xA3A2,0xA3A2,0x003F},
- {0xA3A3,0xA3A3,0x003F},
- {0xA3A4,0xA3A4,0x003F},
- {0xA3A5,0xA3A5,0x003F},
- {0xA3A6,0xA3A6,0x003F},
- {0xA3A7,0xA3A7,0x003F},
- {0xA3A8,0xA3A8,0x003F},
- {0xA3A9,0xA3A9,0x003F},
- {0xA3AA,0xA3AA,0x003F},
- {0xA3AB,0xA3AB,0x003F},
- {0xA3AC,0xA3AC,0x003F},
- {0xA3AD,0xA3AD,0x003F},
- {0xA3AE,0xA3AE,0x003F},
- {0xA3AF,0xA3AF,0x003F},
- {0xA3B0,0xA3B0,0xFF10}, /* A3B0 */
- {0xA3B1,0xA3B1,0xFF11},
- {0xA3B2,0xA3B2,0xFF12},
- {0xA3B3,0xA3B3,0xFF13},
- {0xA3B4,0xA3B4,0xFF14},
- {0xA3B5,0xA3B5,0xFF15},
- {0xA3B6,0xA3B6,0xFF16},
- {0xA3B7,0xA3B7,0xFF17},
- {0xA3B8,0xA3B8,0xFF18},
- {0xA3B9,0xA3B9,0xFF19},
- {0xA3BA,0xA3BA,0x003F},
- {0xA3BB,0xA3BB,0x003F},
- {0xA3BC,0xA3BC,0x003F},
- {0xA3BD,0xA3BD,0x003F},
- {0xA3BE,0xA3BE,0x003F},
- {0xA3BF,0xA3BF,0x003F},
- {0xA3C0,0xA3C0,0x003F}, /* A3C0 */
- {0xA3C1,0xA3E1,0xFF21},
- {0xA3C2,0xA3E2,0xFF22},
- {0xA3C3,0xA3E3,0xFF23},
- {0xA3C4,0xA3E4,0xFF24},
- {0xA3C5,0xA3E5,0xFF25},
- {0xA3C6,0xA3E6,0xFF26},
- {0xA3C7,0xA3E7,0xFF27},
- {0xA3C8,0xA3E8,0xFF28},
- {0xA3C9,0xA3E9,0xFF29},
- {0xA3CA,0xA3EA,0xFF2A},
- {0xA3CB,0xA3EB,0xFF2B},
- {0xA3CC,0xA3EC,0xFF2C},
- {0xA3CD,0xA3ED,0xFF2D},
- {0xA3CE,0xA3EE,0xFF2E},
- {0xA3CF,0xA3EF,0xFF2F},
- {0xA3D0,0xA3F0,0xFF30}, /* A3D0 */
- {0xA3D1,0xA3F1,0xFF31},
- {0xA3D2,0xA3F2,0xFF32},
- {0xA3D3,0xA3F3,0xFF33},
- {0xA3D4,0xA3F4,0xFF34},
- {0xA3D5,0xA3F5,0xFF35},
- {0xA3D6,0xA3F6,0xFF36},
- {0xA3D7,0xA3F7,0xFF37},
- {0xA3D8,0xA3F8,0xFF38},
- {0xA3D9,0xA3F9,0xFF39},
- {0xA3DA,0xA3FA,0xFF3A},
- {0xA3DB,0xA3DB,0x003F},
- {0xA3DC,0xA3DC,0x003F},
- {0xA3DD,0xA3DD,0x003F},
- {0xA3DE,0xA3DE,0x003F},
- {0xA3DF,0xA3DF,0x003F},
- {0xA3E0,0xA3E0,0x003F}, /* A3E0 */
- {0xA3C1,0xA3E1,0xFF41},
- {0xA3C2,0xA3E2,0xFF42},
- {0xA3C3,0xA3E3,0xFF43},
- {0xA3C4,0xA3E4,0xFF44},
- {0xA3C5,0xA3E5,0xFF45},
- {0xA3C6,0xA3E6,0xFF46},
- {0xA3C7,0xA3E7,0xFF47},
- {0xA3C8,0xA3E8,0xFF48},
- {0xA3C9,0xA3E9,0xFF49},
- {0xA3CA,0xA3EA,0xFF4A},
- {0xA3CB,0xA3EB,0xFF4B},
- {0xA3CC,0xA3EC,0xFF4C},
- {0xA3CD,0xA3ED,0xFF4D},
- {0xA3CE,0xA3EE,0xFF4E},
- {0xA3CF,0xA3EF,0xFF4F},
- {0xA3D0,0xA3F0,0xFF50}, /* A3F0 */
- {0xA3D1,0xA3F1,0xFF51},
- {0xA3D2,0xA3F2,0xFF52},
- {0xA3D3,0xA3F3,0xFF53},
- {0xA3D4,0xA3F4,0xFF54},
- {0xA3D5,0xA3F5,0xFF55},
- {0xA3D6,0xA3F6,0xFF56},
- {0xA3D7,0xA3F7,0xFF57},
- {0xA3D8,0xA3F8,0xFF58},
- {0xA3D9,0xA3F9,0xFF59},
- {0xA3DA,0xA3FA,0xFF5A},
- {0xA3FB,0xA3FB,0x003F},
- {0xA3FC,0xA3FC,0x003F},
- {0xA3FD,0xA3FD,0x003F},
- {0xA3FE,0xA3FE,0x003F},
- {0xA3FF,0xA3FF,0x003F}
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx00 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx10 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx20 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx30 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx40 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx50 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx60 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx70 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx80 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx90 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0xA3A0,0xA3A0}, /* A3A0 */
+ {0xA3A1,0xA3A1},
+ {0xA3A2,0xA3A2},
+ {0xA3A3,0xA3A3},
+ {0xA3A4,0xA3A4},
+ {0xA3A5,0xA3A5},
+ {0xA3A6,0xA3A6},
+ {0xA3A7,0xA3A7},
+ {0xA3A8,0xA3A8},
+ {0xA3A9,0xA3A9},
+ {0xA3AA,0xA3AA},
+ {0xA3AB,0xA3AB},
+ {0xA3AC,0xA3AC},
+ {0xA3AD,0xA3AD},
+ {0xA3AE,0xA3AE},
+ {0xA3AF,0xA3AF},
+ {0xA3B0,0xA3B0}, /* A3B0 */
+ {0xA3B1,0xA3B1},
+ {0xA3B2,0xA3B2},
+ {0xA3B3,0xA3B3},
+ {0xA3B4,0xA3B4},
+ {0xA3B5,0xA3B5},
+ {0xA3B6,0xA3B6},
+ {0xA3B7,0xA3B7},
+ {0xA3B8,0xA3B8},
+ {0xA3B9,0xA3B9},
+ {0xA3BA,0xA3BA},
+ {0xA3BB,0xA3BB},
+ {0xA3BC,0xA3BC},
+ {0xA3BD,0xA3BD},
+ {0xA3BE,0xA3BE},
+ {0xA3BF,0xA3BF},
+ {0xA3C0,0xA3C0}, /* A3C0 */
+ {0xA3C1,0xA3E1},
+ {0xA3C2,0xA3E2},
+ {0xA3C3,0xA3E3},
+ {0xA3C4,0xA3E4},
+ {0xA3C5,0xA3E5},
+ {0xA3C6,0xA3E6},
+ {0xA3C7,0xA3E7},
+ {0xA3C8,0xA3E8},
+ {0xA3C9,0xA3E9},
+ {0xA3CA,0xA3EA},
+ {0xA3CB,0xA3EB},
+ {0xA3CC,0xA3EC},
+ {0xA3CD,0xA3ED},
+ {0xA3CE,0xA3EE},
+ {0xA3CF,0xA3EF},
+ {0xA3D0,0xA3F0}, /* A3D0 */
+ {0xA3D1,0xA3F1},
+ {0xA3D2,0xA3F2},
+ {0xA3D3,0xA3F3},
+ {0xA3D4,0xA3F4},
+ {0xA3D5,0xA3F5},
+ {0xA3D6,0xA3F6},
+ {0xA3D7,0xA3F7},
+ {0xA3D8,0xA3F8},
+ {0xA3D9,0xA3F9},
+ {0xA3DA,0xA3FA},
+ {0xA3DB,0xA3DB},
+ {0xA3DC,0xA3DC},
+ {0xA3DD,0xA3DD},
+ {0xA3DE,0xA3DE},
+ {0xA3DF,0xA3DF},
+ {0xA3E0,0xA3E0}, /* A3E0 */
+ {0xA3C1,0xA3E1},
+ {0xA3C2,0xA3E2},
+ {0xA3C3,0xA3E3},
+ {0xA3C4,0xA3E4},
+ {0xA3C5,0xA3E5},
+ {0xA3C6,0xA3E6},
+ {0xA3C7,0xA3E7},
+ {0xA3C8,0xA3E8},
+ {0xA3C9,0xA3E9},
+ {0xA3CA,0xA3EA},
+ {0xA3CB,0xA3EB},
+ {0xA3CC,0xA3EC},
+ {0xA3CD,0xA3ED},
+ {0xA3CE,0xA3EE},
+ {0xA3CF,0xA3EF},
+ {0xA3D0,0xA3F0}, /* A3F0 */
+ {0xA3D1,0xA3F1},
+ {0xA3D2,0xA3F2},
+ {0xA3D3,0xA3F3},
+ {0xA3D4,0xA3F4},
+ {0xA3D5,0xA3F5},
+ {0xA3D6,0xA3F6},
+ {0xA3D7,0xA3F7},
+ {0xA3D8,0xA3F8},
+ {0xA3D9,0xA3F9},
+ {0xA3DA,0xA3FA},
+ {0xA3FB,0xA3FB},
+ {0xA3FC,0xA3FC},
+ {0xA3FD,0xA3FD},
+ {0xA3FE,0xA3FE},
+ {0xA3FF,0xA3FF}
};
-static MY_UNICASE_CHARACTER cA6[256]=
+static const MY_CASEFOLD_CHARACTER cA6[256]=
{
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx40 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx50 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx60 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx70 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx80 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx90 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0xA6A0,0xA6A0,0x003F}, /* A6A0 */
- {0xA6A1,0xA6C1,0x0391},
- {0xA6A2,0xA6C2,0x0392},
- {0xA6A3,0xA6C3,0x0393},
- {0xA6A4,0xA6C4,0x0394},
- {0xA6A5,0xA6C5,0x0395},
- {0xA6A6,0xA6C6,0x0396},
- {0xA6A7,0xA6C7,0x0397},
- {0xA6A8,0xA6C8,0x0398},
- {0xA6A9,0xA6C9,0x0399},
- {0xA6AA,0xA6CA,0x039A},
- {0xA6AB,0xA6CB,0x039B},
- {0xA6AC,0xA6CC,0x039C},
- {0xA6AD,0xA6CD,0x039D},
- {0xA6AE,0xA6CE,0x039E},
- {0xA6AF,0xA6CF,0x039F},
- {0xA6B0,0xA6D0,0x03A0}, /* A6B0 */
- {0xA6B1,0xA6D1,0x03A1},
- {0xA6B2,0xA6D2,0x03A3},
- {0xA6B3,0xA6D3,0x03A4},
- {0xA6B4,0xA6D4,0x03A5},
- {0xA6B5,0xA6D5,0x03A6},
- {0xA6B6,0xA6D6,0x03A7},
- {0xA6B7,0xA6D7,0x03A8},
- {0xA6B8,0xA6D8,0x03A9},
- {0xA6B9,0xA6B9,0x003F},
- {0xA6BA,0xA6BA,0x003F},
- {0xA6BB,0xA6BB,0x003F},
- {0xA6BC,0xA6BC,0x003F},
- {0xA6BD,0xA6BD,0x003F},
- {0xA6BE,0xA6BE,0x003F},
- {0xA6BF,0xA6BF,0x003F},
- {0xA6C0,0xA6C0,0x003F}, /* A6C0 */
- {0xA6A1,0xA6C1,0x03B1},
- {0xA6A2,0xA6C2,0x03B2},
- {0xA6A3,0xA6C3,0x03B3},
- {0xA6A4,0xA6C4,0x03B4},
- {0xA6A5,0xA6C5,0x03B5},
- {0xA6A6,0xA6C6,0x03B6},
- {0xA6A7,0xA6C7,0x03B7},
- {0xA6A8,0xA6C8,0x03B8},
- {0xA6A9,0xA6C9,0x03B9},
- {0xA6AA,0xA6CA,0x03BA},
- {0xA6AB,0xA6CB,0x03BB},
- {0xA6AC,0xA6CC,0x03BC},
- {0xA6AD,0xA6CD,0x03BD},
- {0xA6AE,0xA6CE,0x03BE},
- {0xA6AF,0xA6CF,0x03BF},
- {0xA6B0,0xA6D0,0x03C0}, /* A6D0 */
- {0xA6B1,0xA6D1,0x03C1},
- {0xA6B2,0xA6D2,0x03C3},
- {0xA6B3,0xA6D3,0x03C4},
- {0xA6B4,0xA6D4,0x03C5},
- {0xA6B5,0xA6D5,0x03C6},
- {0xA6B6,0xA6D6,0x03C7},
- {0xA6B7,0xA6D7,0x03C8},
- {0xA6B8,0xA6D8,0x03C9},
- {0xA6D9,0xA6D9,0x003F},
- {0xA6DA,0xA6DA,0x003F},
- {0xA6DB,0xA6DB,0x003F},
- {0xA6DC,0xA6DC,0x003F},
- {0xA6DD,0xA6DD,0x003F},
- {0xA6DE,0xA6DE,0x003F},
- {0xA6DF,0xA6DF,0x003F},
- {0xA6E0,0xA6E0,0x003F}, /* A6E0 */
- {0xA6E1,0xA6E1,0x003F},
- {0xA6E2,0xA6E2,0x003F},
- {0xA6E3,0xA6E3,0x003F},
- {0xA6E4,0xA6E4,0x003F},
- {0xA6E5,0xA6E5,0x003F},
- {0xA6E6,0xA6E6,0x003F},
- {0xA6E7,0xA6E7,0x003F},
- {0xA6E8,0xA6E8,0x003F},
- {0xA6E9,0xA6E9,0x003F},
- {0xA6EA,0xA6EA,0x003F},
- {0xA6EB,0xA6EB,0x003F},
- {0xA6EC,0xA6EC,0x003F},
- {0xA6ED,0xA6ED,0x003F},
- {0xA6EE,0xA6EE,0x003F},
- {0xA6EF,0xA6EF,0x003F},
- {0xA6F0,0xA6F0,0x003F}, /* A6F0 */
- {0xA6F1,0xA6F1,0x003F},
- {0xA6F2,0xA6F2,0x003F},
- {0xA6F3,0xA6F3,0x003F},
- {0xA6F4,0xA6F4,0x003F},
- {0xA6F5,0xA6F5,0x003F},
- {0xA6F6,0xA6F6,0x003F},
- {0xA6F7,0xA6F7,0x003F},
- {0xA6F8,0xA6F8,0x003F},
- {0xA6F9,0xA6F9,0x003F},
- {0xA6FA,0xA6FA,0x003F},
- {0xA6FB,0xA6FB,0x003F},
- {0xA6FC,0xA6FC,0x003F},
- {0xA6FD,0xA6FD,0x003F},
- {0xA6FE,0xA6FE,0x003F},
- {0xA6FF,0xA6FF,0x003F}
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx00 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx10 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx20 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx30 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx40 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx50 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx60 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx70 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx80 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx90 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0xA6A0,0xA6A0}, /* A6A0 */
+ {0xA6A1,0xA6C1},
+ {0xA6A2,0xA6C2},
+ {0xA6A3,0xA6C3},
+ {0xA6A4,0xA6C4},
+ {0xA6A5,0xA6C5},
+ {0xA6A6,0xA6C6},
+ {0xA6A7,0xA6C7},
+ {0xA6A8,0xA6C8},
+ {0xA6A9,0xA6C9},
+ {0xA6AA,0xA6CA},
+ {0xA6AB,0xA6CB},
+ {0xA6AC,0xA6CC},
+ {0xA6AD,0xA6CD},
+ {0xA6AE,0xA6CE},
+ {0xA6AF,0xA6CF},
+ {0xA6B0,0xA6D0}, /* A6B0 */
+ {0xA6B1,0xA6D1},
+ {0xA6B2,0xA6D2},
+ {0xA6B3,0xA6D3},
+ {0xA6B4,0xA6D4},
+ {0xA6B5,0xA6D5},
+ {0xA6B6,0xA6D6},
+ {0xA6B7,0xA6D7},
+ {0xA6B8,0xA6D8},
+ {0xA6B9,0xA6B9},
+ {0xA6BA,0xA6BA},
+ {0xA6BB,0xA6BB},
+ {0xA6BC,0xA6BC},
+ {0xA6BD,0xA6BD},
+ {0xA6BE,0xA6BE},
+ {0xA6BF,0xA6BF},
+ {0xA6C0,0xA6C0}, /* A6C0 */
+ {0xA6A1,0xA6C1},
+ {0xA6A2,0xA6C2},
+ {0xA6A3,0xA6C3},
+ {0xA6A4,0xA6C4},
+ {0xA6A5,0xA6C5},
+ {0xA6A6,0xA6C6},
+ {0xA6A7,0xA6C7},
+ {0xA6A8,0xA6C8},
+ {0xA6A9,0xA6C9},
+ {0xA6AA,0xA6CA},
+ {0xA6AB,0xA6CB},
+ {0xA6AC,0xA6CC},
+ {0xA6AD,0xA6CD},
+ {0xA6AE,0xA6CE},
+ {0xA6AF,0xA6CF},
+ {0xA6B0,0xA6D0}, /* A6D0 */
+ {0xA6B1,0xA6D1},
+ {0xA6B2,0xA6D2},
+ {0xA6B3,0xA6D3},
+ {0xA6B4,0xA6D4},
+ {0xA6B5,0xA6D5},
+ {0xA6B6,0xA6D6},
+ {0xA6B7,0xA6D7},
+ {0xA6B8,0xA6D8},
+ {0xA6D9,0xA6D9},
+ {0xA6DA,0xA6DA},
+ {0xA6DB,0xA6DB},
+ {0xA6DC,0xA6DC},
+ {0xA6DD,0xA6DD},
+ {0xA6DE,0xA6DE},
+ {0xA6DF,0xA6DF},
+ {0xA6E0,0xA6E0}, /* A6E0 */
+ {0xA6E1,0xA6E1},
+ {0xA6E2,0xA6E2},
+ {0xA6E3,0xA6E3},
+ {0xA6E4,0xA6E4},
+ {0xA6E5,0xA6E5},
+ {0xA6E6,0xA6E6},
+ {0xA6E7,0xA6E7},
+ {0xA6E8,0xA6E8},
+ {0xA6E9,0xA6E9},
+ {0xA6EA,0xA6EA},
+ {0xA6EB,0xA6EB},
+ {0xA6EC,0xA6EC},
+ {0xA6ED,0xA6ED},
+ {0xA6EE,0xA6EE},
+ {0xA6EF,0xA6EF},
+ {0xA6F0,0xA6F0}, /* A6F0 */
+ {0xA6F1,0xA6F1},
+ {0xA6F2,0xA6F2},
+ {0xA6F3,0xA6F3},
+ {0xA6F4,0xA6F4},
+ {0xA6F5,0xA6F5},
+ {0xA6F6,0xA6F6},
+ {0xA6F7,0xA6F7},
+ {0xA6F8,0xA6F8},
+ {0xA6F9,0xA6F9},
+ {0xA6FA,0xA6FA},
+ {0xA6FB,0xA6FB},
+ {0xA6FC,0xA6FC},
+ {0xA6FD,0xA6FD},
+ {0xA6FE,0xA6FE},
+ {0xA6FF,0xA6FF}
};
-static MY_UNICASE_CHARACTER cA7[256]=
+static const MY_CASEFOLD_CHARACTER cA7[256]=
{
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx40 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx50 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx60 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx70 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx80 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx90 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0xA7A0,0xA7A0,0x003F},
- {0xA7A1,0xA7D1,0x0410},
- {0xA7A2,0xA7D2,0x0411},
- {0xA7A3,0xA7D3,0x0412},
- {0xA7A4,0xA7D4,0x0413},
- {0xA7A5,0xA7D5,0x0414},
- {0xA7A6,0xA7D6,0x0415},
- {0xA7A7,0xA7D7,0x0401},
- {0xA7A8,0xA7D8,0x0416},
- {0xA7A9,0xA7D9,0x0417},
- {0xA7AA,0xA7DA,0x0418},
- {0xA7AB,0xA7DB,0x0419},
- {0xA7AC,0xA7DC,0x041A},
- {0xA7AD,0xA7DD,0x041B},
- {0xA7AE,0xA7DE,0x041C},
- {0xA7AF,0xA7DF,0x041D},
- {0xA7B0,0xA7E0,0x041E}, /* A7B0 */
- {0xA7B1,0xA7E1,0x041F},
- {0xA7B2,0xA7E2,0x0420},
- {0xA7B3,0xA7E3,0x0421},
- {0xA7B4,0xA7E4,0x0422},
- {0xA7B5,0xA7E5,0x0423},
- {0xA7B6,0xA7E6,0x0424},
- {0xA7B7,0xA7E7,0x0425},
- {0xA7B8,0xA7E8,0x0426},
- {0xA7B9,0xA7E9,0x0427},
- {0xA7BA,0xA7EA,0x0428},
- {0xA7BB,0xA7EB,0x0429},
- {0xA7BC,0xA7EC,0x042A},
- {0xA7BD,0xA7ED,0x042B},
- {0xA7BE,0xA7EE,0x042C},
- {0xA7BF,0xA7EF,0x042D},
- {0xA7C0,0xA7F0,0x042E}, /* A7C0 */
- {0xA7C1,0xA7F1,0x042F},
- {0xA7C2,0xA7C2,0x003F},
- {0xA7C3,0xA7C3,0x003F},
- {0xA7C4,0xA7C4,0x003F},
- {0xA7C5,0xA7C5,0x003F},
- {0xA7C6,0xA7C6,0x003F},
- {0xA7C7,0xA7C7,0x003F},
- {0xA7C8,0xA7C8,0x003F},
- {0xA7C9,0xA7C9,0x003F},
- {0xA7CA,0xA7CA,0x003F},
- {0xA7CB,0xA7CB,0x003F},
- {0xA7CC,0xA7CC,0x003F},
- {0xA7CD,0xA7CD,0x003F},
- {0xA7CE,0xA7CE,0x003F},
- {0xA7CF,0xA7CF,0x003F},
- {0xA7D0,0xA7D0,0x003F}, /* A7D0 */
- {0xA7A1,0xA7D1,0x0430},
- {0xA7A2,0xA7D2,0x0431},
- {0xA7A3,0xA7D3,0x0432},
- {0xA7A4,0xA7D4,0x0433},
- {0xA7A5,0xA7D5,0x0434},
- {0xA7A6,0xA7D6,0x0435},
- {0xA7A7,0xA7D7,0x0451},
- {0xA7A8,0xA7D8,0x0436},
- {0xA7A9,0xA7D9,0x0437},
- {0xA7AA,0xA7DA,0x0438},
- {0xA7AB,0xA7DB,0x0439},
- {0xA7AC,0xA7DC,0x043A},
- {0xA7AD,0xA7DD,0x043B},
- {0xA7AE,0xA7DE,0x043C},
- {0xA7AF,0xA7DF,0x043D},
- {0xA7B0,0xA7E0,0x043E}, /* A7E0 */
- {0xA7B1,0xA7E1,0x043F},
- {0xA7B2,0xA7E2,0x0440},
- {0xA7B3,0xA7E3,0x0441},
- {0xA7B4,0xA7E4,0x0442},
- {0xA7B5,0xA7E5,0x0443},
- {0xA7B6,0xA7E6,0x0444},
- {0xA7B7,0xA7E7,0x0445},
- {0xA7B8,0xA7E8,0x0446},
- {0xA7B9,0xA7E9,0x0447},
- {0xA7BA,0xA7EA,0x0448},
- {0xA7BB,0xA7EB,0x0449},
- {0xA7BC,0xA7EC,0x044A},
- {0xA7BD,0xA7ED,0x044B},
- {0xA7BE,0xA7EE,0x044C},
- {0xA7BF,0xA7EF,0x044D},
- {0xA7C0,0xA7F0,0x044E}, /* A7F0 */
- {0xA7C1,0xA7F1,0x044F},
- {0xA7F2,0xA7F2,0x003F},
- {0xA7F3,0xA7F3,0x003F},
- {0xA7F4,0xA7F4,0x003F},
- {0xA7F5,0xA7F5,0x003F},
- {0xA7F6,0xA7F6,0x003F},
- {0xA7F7,0xA7F7,0x003F},
- {0xA7F8,0xA7F8,0x003F},
- {0xA7F9,0xA7F9,0x003F},
- {0xA7FA,0xA7FA,0x003F},
- {0xA7FB,0xA7FB,0x003F},
- {0xA7FC,0xA7FC,0x003F},
- {0xA7FD,0xA7FD,0x003F},
- {0xA7FE,0xA7FE,0x003F},
- {0xA7FF,0xA7FF,0x003F},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx00 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx10 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx20 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx30 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx40 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx50 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx60 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx70 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx80 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx90 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0xA7A0,0xA7A0},
+ {0xA7A1,0xA7D1},
+ {0xA7A2,0xA7D2},
+ {0xA7A3,0xA7D3},
+ {0xA7A4,0xA7D4},
+ {0xA7A5,0xA7D5},
+ {0xA7A6,0xA7D6},
+ {0xA7A7,0xA7D7},
+ {0xA7A8,0xA7D8},
+ {0xA7A9,0xA7D9},
+ {0xA7AA,0xA7DA},
+ {0xA7AB,0xA7DB},
+ {0xA7AC,0xA7DC},
+ {0xA7AD,0xA7DD},
+ {0xA7AE,0xA7DE},
+ {0xA7AF,0xA7DF},
+ {0xA7B0,0xA7E0}, /* A7B0 */
+ {0xA7B1,0xA7E1},
+ {0xA7B2,0xA7E2},
+ {0xA7B3,0xA7E3},
+ {0xA7B4,0xA7E4},
+ {0xA7B5,0xA7E5},
+ {0xA7B6,0xA7E6},
+ {0xA7B7,0xA7E7},
+ {0xA7B8,0xA7E8},
+ {0xA7B9,0xA7E9},
+ {0xA7BA,0xA7EA},
+ {0xA7BB,0xA7EB},
+ {0xA7BC,0xA7EC},
+ {0xA7BD,0xA7ED},
+ {0xA7BE,0xA7EE},
+ {0xA7BF,0xA7EF},
+ {0xA7C0,0xA7F0}, /* A7C0 */
+ {0xA7C1,0xA7F1},
+ {0xA7C2,0xA7C2},
+ {0xA7C3,0xA7C3},
+ {0xA7C4,0xA7C4},
+ {0xA7C5,0xA7C5},
+ {0xA7C6,0xA7C6},
+ {0xA7C7,0xA7C7},
+ {0xA7C8,0xA7C8},
+ {0xA7C9,0xA7C9},
+ {0xA7CA,0xA7CA},
+ {0xA7CB,0xA7CB},
+ {0xA7CC,0xA7CC},
+ {0xA7CD,0xA7CD},
+ {0xA7CE,0xA7CE},
+ {0xA7CF,0xA7CF},
+ {0xA7D0,0xA7D0}, /* A7D0 */
+ {0xA7A1,0xA7D1},
+ {0xA7A2,0xA7D2},
+ {0xA7A3,0xA7D3},
+ {0xA7A4,0xA7D4},
+ {0xA7A5,0xA7D5},
+ {0xA7A6,0xA7D6},
+ {0xA7A7,0xA7D7},
+ {0xA7A8,0xA7D8},
+ {0xA7A9,0xA7D9},
+ {0xA7AA,0xA7DA},
+ {0xA7AB,0xA7DB},
+ {0xA7AC,0xA7DC},
+ {0xA7AD,0xA7DD},
+ {0xA7AE,0xA7DE},
+ {0xA7AF,0xA7DF},
+ {0xA7B0,0xA7E0}, /* A7E0 */
+ {0xA7B1,0xA7E1},
+ {0xA7B2,0xA7E2},
+ {0xA7B3,0xA7E3},
+ {0xA7B4,0xA7E4},
+ {0xA7B5,0xA7E5},
+ {0xA7B6,0xA7E6},
+ {0xA7B7,0xA7E7},
+ {0xA7B8,0xA7E8},
+ {0xA7B9,0xA7E9},
+ {0xA7BA,0xA7EA},
+ {0xA7BB,0xA7EB},
+ {0xA7BC,0xA7EC},
+ {0xA7BD,0xA7ED},
+ {0xA7BE,0xA7EE},
+ {0xA7BF,0xA7EF},
+ {0xA7C0,0xA7F0}, /* A7F0 */
+ {0xA7C1,0xA7F1},
+ {0xA7F2,0xA7F2},
+ {0xA7F3,0xA7F3},
+ {0xA7F4,0xA7F4},
+ {0xA7F5,0xA7F5},
+ {0xA7F6,0xA7F6},
+ {0xA7F7,0xA7F7},
+ {0xA7F8,0xA7F8},
+ {0xA7F9,0xA7F9},
+ {0xA7FA,0xA7FA},
+ {0xA7FB,0xA7FB},
+ {0xA7FC,0xA7FC},
+ {0xA7FD,0xA7FD},
+ {0xA7FE,0xA7FE},
+ {0xA7FF,0xA7FF},
};
/* Case info pages for JIS-X-0212 range */
-static MY_UNICASE_CHARACTER c8FA6[]=
+static const MY_CASEFOLD_CHARACTER c8FA6[]=
{
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx40 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx50 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx60 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx70 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx80 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx90 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0x8FA6A0,0x8FA6A0,0x003F}, /* 8FA6A0 */
- {0x8FA6A1,0x8FA6A1,0x003F},
- {0x8FA6A2,0x8FA6A2,0x003F},
- {0x8FA6A3,0x8FA6A3,0x003F},
- {0x8FA6A4,0x8FA6A4,0x003F},
- {0x8FA6A5,0x8FA6A5,0x003F},
- {0x8FA6A6,0x8FA6A6,0x003F},
- {0x8FA6A7,0x8FA6A7,0x003F},
- {0x8FA6A8,0x8FA6A8,0x003F},
- {0x8FA6A9,0x8FA6A9,0x003F},
- {0x8FA6AA,0x8FA6AA,0x003F},
- {0x8FA6AB,0x8FA6AB,0x003F},
- {0x8FA6AC,0x8FA6AC,0x003F},
- {0x8FA6AD,0x8FA6AD,0x003F},
- {0x8FA6AE,0x8FA6AE,0x003F},
- {0x8FA6AF,0x8FA6AF,0x003F},
- {0x8FA6B0,0x8FA6B0,0x003F}, /* 8FA6B0 */
- {0x8FA6B1,0x8FA6B1,0x003F},
- {0x8FA6B2,0x8FA6B2,0x003F},
- {0x8FA6B3,0x8FA6B3,0x003F},
- {0x8FA6B4,0x8FA6B4,0x003F},
- {0x8FA6B5,0x8FA6B5,0x003F},
- {0x8FA6B6,0x8FA6B6,0x003F},
- {0x8FA6B7,0x8FA6B7,0x003F},
- {0x8FA6B8,0x8FA6B8,0x003F},
- {0x8FA6B9,0x8FA6B9,0x003F},
- {0x8FA6BA,0x8FA6BA,0x003F},
- {0x8FA6BB,0x8FA6BB,0x003F},
- {0x8FA6BC,0x8FA6BC,0x003F},
- {0x8FA6BD,0x8FA6BD,0x003F},
- {0x8FA6BE,0x8FA6BE,0x003F},
- {0x8FA6BF,0x8FA6BF,0x003F},
- {0x8FA6C0,0x8FA6C0,0x003F}, /* 8FA6C0 */
- {0x8FA6C1,0x8FA6C1,0x003F},
- {0x8FA6C2,0x8FA6C2,0x003F},
- {0x8FA6C3,0x8FA6C3,0x003F},
- {0x8FA6C4,0x8FA6C4,0x003F},
- {0x8FA6C5,0x8FA6C5,0x003F},
- {0x8FA6C6,0x8FA6C6,0x003F},
- {0x8FA6C7,0x8FA6C7,0x003F},
- {0x8FA6C8,0x8FA6C8,0x003F},
- {0x8FA6C9,0x8FA6C9,0x003F},
- {0x8FA6CA,0x8FA6CA,0x003F},
- {0x8FA6CB,0x8FA6CB,0x003F},
- {0x8FA6CC,0x8FA6CC,0x003F},
- {0x8FA6CD,0x8FA6CD,0x003F},
- {0x8FA6CE,0x8FA6CE,0x003F},
- {0x8FA6CF,0x8FA6CF,0x003F},
- {0x8FA6D0,0x8FA6D0,0x003F}, /* 8FA6D0 */
- {0x8FA6D1,0x8FA6D1,0x003F},
- {0x8FA6D2,0x8FA6D2,0x003F},
- {0x8FA6D3,0x8FA6D3,0x003F},
- {0x8FA6D4,0x8FA6D4,0x003F},
- {0x8FA6D5,0x8FA6D5,0x003F},
- {0x8FA6D6,0x8FA6D6,0x003F},
- {0x8FA6D7,0x8FA6D7,0x003F},
- {0x8FA6D8,0x8FA6D8,0x003F},
- {0x8FA6D9,0x8FA6D9,0x003F},
- {0x8FA6DA,0x8FA6DA,0x003F},
- {0x8FA6DB,0x8FA6DB,0x003F},
- {0x8FA6DC,0x8FA6DC,0x003F},
- {0x8FA6DD,0x8FA6DD,0x003F},
- {0x8FA6DE,0x8FA6DE,0x003F},
- {0x8FA6DF,0x8FA6DF,0x003F},
- {0x8FA6E0,0x8FA6E0,0x003F}, /* 8FA6E0 */
- {0x8FA6E1,0x8FA6F1,0x0386},
- {0x8FA6E2,0x8FA6F2,0x0388},
- {0x8FA6E3,0x8FA6F3,0x0389},
- {0x8FA6E4,0x8FA6F4,0x038A},
- {0x8FA6E5,0x8FA6F5,0x03AA},
- {0x8FA6E6,0x8FA6E6,0x003F},
- {0x8FA6E7,0x8FA6F7,0x038C},
- {0x8FA6E8,0x8FA6E8,0x003F},
- {0x8FA6E9,0x8FA6F9,0x038E},
- {0x8FA6EA,0x8FA6FA,0x03AB},
- {0x8FA6EB,0x8FA6EB,0x003F},
- {0x8FA6EC,0x8FA6FC,0x038F},
- {0x8FA6ED,0x8FA6ED,0x003F},
- {0x8FA6EE,0x8FA6EE,0x003F},
- {0x8FA6EF,0x8FA6EF,0x003F},
- {0x8FA6F0,0x8FA6F0,0x003F}, /* 8FA6F0 */
- {0x8FA6E1,0x8FA6F1,0x03AC},
- {0x8FA6E2,0x8FA6F2,0x03AD},
- {0x8FA6E3,0x8FA6F3,0x03AE},
- {0x8FA6E4,0x8FA6F4,0x03AF},
- {0x8FA6E5,0x8FA6F5,0x03CA},
- {0x8FA6F6,0x8FA6F6,0x0390},
- {0x8FA6E7,0x8FA6F7,0x03CC},
- { 0xA6B2,0x8FA6F8,0x03C2},
- {0x8FA6E9,0x8FA6F9,0x03CD},
- {0x8FA6EA,0x8FA6FA,0x03CB},
- {0x8FA6FB,0x8FA6FB,0x03B0},
- {0x8FA6EC,0x8FA6FC,0x03CE},
- {0x8FA6FD,0x8FA6FD,0x003F},
- {0x8FA6FE,0x8FA6FE,0x003F},
- {0x8FA6FF,0x8FA6FF,0x003F},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx00 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx10 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx20 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx30 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx40 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx50 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx60 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx70 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx80 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx90 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0x8FA6A0,0x8FA6A0}, /* 8FA6A0 */
+ {0x8FA6A1,0x8FA6A1},
+ {0x8FA6A2,0x8FA6A2},
+ {0x8FA6A3,0x8FA6A3},
+ {0x8FA6A4,0x8FA6A4},
+ {0x8FA6A5,0x8FA6A5},
+ {0x8FA6A6,0x8FA6A6},
+ {0x8FA6A7,0x8FA6A7},
+ {0x8FA6A8,0x8FA6A8},
+ {0x8FA6A9,0x8FA6A9},
+ {0x8FA6AA,0x8FA6AA},
+ {0x8FA6AB,0x8FA6AB},
+ {0x8FA6AC,0x8FA6AC},
+ {0x8FA6AD,0x8FA6AD},
+ {0x8FA6AE,0x8FA6AE},
+ {0x8FA6AF,0x8FA6AF},
+ {0x8FA6B0,0x8FA6B0}, /* 8FA6B0 */
+ {0x8FA6B1,0x8FA6B1},
+ {0x8FA6B2,0x8FA6B2},
+ {0x8FA6B3,0x8FA6B3},
+ {0x8FA6B4,0x8FA6B4},
+ {0x8FA6B5,0x8FA6B5},
+ {0x8FA6B6,0x8FA6B6},
+ {0x8FA6B7,0x8FA6B7},
+ {0x8FA6B8,0x8FA6B8},
+ {0x8FA6B9,0x8FA6B9},
+ {0x8FA6BA,0x8FA6BA},
+ {0x8FA6BB,0x8FA6BB},
+ {0x8FA6BC,0x8FA6BC},
+ {0x8FA6BD,0x8FA6BD},
+ {0x8FA6BE,0x8FA6BE},
+ {0x8FA6BF,0x8FA6BF},
+ {0x8FA6C0,0x8FA6C0}, /* 8FA6C0 */
+ {0x8FA6C1,0x8FA6C1},
+ {0x8FA6C2,0x8FA6C2},
+ {0x8FA6C3,0x8FA6C3},
+ {0x8FA6C4,0x8FA6C4},
+ {0x8FA6C5,0x8FA6C5},
+ {0x8FA6C6,0x8FA6C6},
+ {0x8FA6C7,0x8FA6C7},
+ {0x8FA6C8,0x8FA6C8},
+ {0x8FA6C9,0x8FA6C9},
+ {0x8FA6CA,0x8FA6CA},
+ {0x8FA6CB,0x8FA6CB},
+ {0x8FA6CC,0x8FA6CC},
+ {0x8FA6CD,0x8FA6CD},
+ {0x8FA6CE,0x8FA6CE},
+ {0x8FA6CF,0x8FA6CF},
+ {0x8FA6D0,0x8FA6D0}, /* 8FA6D0 */
+ {0x8FA6D1,0x8FA6D1},
+ {0x8FA6D2,0x8FA6D2},
+ {0x8FA6D3,0x8FA6D3},
+ {0x8FA6D4,0x8FA6D4},
+ {0x8FA6D5,0x8FA6D5},
+ {0x8FA6D6,0x8FA6D6},
+ {0x8FA6D7,0x8FA6D7},
+ {0x8FA6D8,0x8FA6D8},
+ {0x8FA6D9,0x8FA6D9},
+ {0x8FA6DA,0x8FA6DA},
+ {0x8FA6DB,0x8FA6DB},
+ {0x8FA6DC,0x8FA6DC},
+ {0x8FA6DD,0x8FA6DD},
+ {0x8FA6DE,0x8FA6DE},
+ {0x8FA6DF,0x8FA6DF},
+ {0x8FA6E0,0x8FA6E0}, /* 8FA6E0 */
+ {0x8FA6E1,0x8FA6F1},
+ {0x8FA6E2,0x8FA6F2},
+ {0x8FA6E3,0x8FA6F3},
+ {0x8FA6E4,0x8FA6F4},
+ {0x8FA6E5,0x8FA6F5},
+ {0x8FA6E6,0x8FA6E6},
+ {0x8FA6E7,0x8FA6F7},
+ {0x8FA6E8,0x8FA6E8},
+ {0x8FA6E9,0x8FA6F9},
+ {0x8FA6EA,0x8FA6FA},
+ {0x8FA6EB,0x8FA6EB},
+ {0x8FA6EC,0x8FA6FC},
+ {0x8FA6ED,0x8FA6ED},
+ {0x8FA6EE,0x8FA6EE},
+ {0x8FA6EF,0x8FA6EF},
+ {0x8FA6F0,0x8FA6F0}, /* 8FA6F0 */
+ {0x8FA6E1,0x8FA6F1},
+ {0x8FA6E2,0x8FA6F2},
+ {0x8FA6E3,0x8FA6F3},
+ {0x8FA6E4,0x8FA6F4},
+ {0x8FA6E5,0x8FA6F5},
+ {0x8FA6F6,0x8FA6F6},
+ {0x8FA6E7,0x8FA6F7},
+ { 0xA6B2,0x8FA6F8},
+ {0x8FA6E9,0x8FA6F9},
+ {0x8FA6EA,0x8FA6FA},
+ {0x8FA6FB,0x8FA6FB},
+ {0x8FA6EC,0x8FA6FC},
+ {0x8FA6FD,0x8FA6FD},
+ {0x8FA6FE,0x8FA6FE},
+ {0x8FA6FF,0x8FA6FF},
};
-static MY_UNICASE_CHARACTER c8FA7[]=
+static const MY_CASEFOLD_CHARACTER c8FA7[]=
{
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx40 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx50 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx60 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx70 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx80 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx90 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0x8FA7A0,0x8FA7A0,0x003F}, /* 8FA7A0 */
- {0x8FA7A1,0x8FA7A1,0x003F},
- {0x8FA7A2,0x8FA7A2,0x003F},
- {0x8FA7A3,0x8FA7A3,0x003F},
- {0x8FA7A4,0x8FA7A4,0x003F},
- {0x8FA7A5,0x8FA7A5,0x003F},
- {0x8FA7A6,0x8FA7A6,0x003F},
- {0x8FA7A7,0x8FA7A7,0x003F},
- {0x8FA7A8,0x8FA7A8,0x003F},
- {0x8FA7A9,0x8FA7A9,0x003F},
- {0x8FA7AA,0x8FA7AA,0x003F},
- {0x8FA7AB,0x8FA7AB,0x003F},
- {0x8FA7AC,0x8FA7AC,0x003F},
- {0x8FA7AD,0x8FA7AD,0x003F},
- {0x8FA7AE,0x8FA7AE,0x003F},
- {0x8FA7AF,0x8FA7AF,0x003F},
- {0x8FA7B0,0x8FA7B0,0x003F}, /* 8FA7B0 */
- {0x8FA7B1,0x8FA7B1,0x003F},
- {0x8FA7B2,0x8FA7B2,0x003F},
- {0x8FA7B3,0x8FA7B3,0x003F},
- {0x8FA7B4,0x8FA7B4,0x003F},
- {0x8FA7B5,0x8FA7B5,0x003F},
- {0x8FA7B6,0x8FA7B6,0x003F},
- {0x8FA7B7,0x8FA7B7,0x003F},
- {0x8FA7B8,0x8FA7B8,0x003F},
- {0x8FA7B9,0x8FA7B9,0x003F},
- {0x8FA7BA,0x8FA7BA,0x003F},
- {0x8FA7BB,0x8FA7BB,0x003F},
- {0x8FA7BC,0x8FA7BC,0x003F},
- {0x8FA7BD,0x8FA7BD,0x003F},
- {0x8FA7BE,0x8FA7BE,0x003F},
- {0x8FA7BF,0x8FA7BF,0x003F},
- {0x8FA7C0,0x8FA7C0,0x003F}, /* 8FA7C0 */
- {0x8FA7C1,0x8FA7C1,0x003F},
- {0x8FA7C2,0x8FA7F2,0x0402},
- {0x8FA7C3,0x8FA7F3,0x0403},
- {0x8FA7C4,0x8FA7F4,0x0404},
- {0x8FA7C5,0x8FA7F5,0x0405},
- {0x8FA7C6,0x8FA7F6,0x0406},
- {0x8FA7C7,0x8FA7F7,0x0407},
- {0x8FA7C8,0x8FA7F8,0x0408},
- {0x8FA7C9,0x8FA7F9,0x0409},
- {0x8FA7CA,0x8FA7FA,0x040A},
- {0x8FA7CB,0x8FA7FB,0x040B},
- {0x8FA7CC,0x8FA7FC,0x040C},
- {0x8FA7CD,0x8FA7FD,0x040E},
- {0x8FA7CE,0x8FA7FE,0x040F},
- {0x8FA7CF,0x8FA7CF,0x003F},
- {0x8FA7D0,0x8FA7D0,0x003F}, /* 8FA7D0 */
- {0x8FA7D1,0x8FA7D1,0x003F},
- {0x8FA7D2,0x8FA7D2,0x003F},
- {0x8FA7D3,0x8FA7D3,0x003F},
- {0x8FA7D4,0x8FA7D4,0x003F},
- {0x8FA7D5,0x8FA7D5,0x003F},
- {0x8FA7D6,0x8FA7D6,0x003F},
- {0x8FA7D7,0x8FA7D7,0x003F},
- {0x8FA7D8,0x8FA7D8,0x003F},
- {0x8FA7D9,0x8FA7D9,0x003F},
- {0x8FA7DA,0x8FA7DA,0x003F},
- {0x8FA7DB,0x8FA7DB,0x003F},
- {0x8FA7DC,0x8FA7DC,0x003F},
- {0x8FA7DD,0x8FA7DD,0x003F},
- {0x8FA7DE,0x8FA7DE,0x003F},
- {0x8FA7DF,0x8FA7DF,0x003F},
- {0x8FA7E0,0x8FA7E0,0x003F}, /* 8FA7E0 */
- {0x8FA7E1,0x8FA7E1,0x003F},
- {0x8FA7E2,0x8FA7E2,0x003F},
- {0x8FA7E3,0x8FA7E3,0x003F},
- {0x8FA7E4,0x8FA7E4,0x003F},
- {0x8FA7E5,0x8FA7E5,0x003F},
- {0x8FA7E6,0x8FA7E6,0x003F},
- {0x8FA7E7,0x8FA7E7,0x003F},
- {0x8FA7E8,0x8FA7E8,0x003F},
- {0x8FA7E9,0x8FA7E9,0x003F},
- {0x8FA7EA,0x8FA7EA,0x003F},
- {0x8FA7EB,0x8FA7EB,0x003F},
- {0x8FA7EC,0x8FA7EC,0x003F},
- {0x8FA7ED,0x8FA7ED,0x003F},
- {0x8FA7EE,0x8FA7EE,0x003F},
- {0x8FA7EF,0x8FA7EF,0x003F},
- {0x8FA7F0,0x8FA7F0,0x003F}, /* 8FA7F0 */
- {0x8FA7F1,0x8FA7F1,0x003F},
- {0x8FA7C2,0x8FA7F2,0x0452},
- {0x8FA7C3,0x8FA7F3,0x0453},
- {0x8FA7C4,0x8FA7F4,0x0454},
- {0x8FA7C5,0x8FA7F5,0x0455},
- {0x8FA7C6,0x8FA7F6,0x0456},
- {0x8FA7C7,0x8FA7F7,0x0457},
- {0x8FA7C8,0x8FA7F8,0x0458},
- {0x8FA7C9,0x8FA7F9,0x0459},
- {0x8FA7CA,0x8FA7FA,0x045A},
- {0x8FA7CB,0x8FA7FB,0x045B},
- {0x8FA7CC,0x8FA7FC,0x045C},
- {0x8FA7CD,0x8FA7FD,0x045E},
- {0x8FA7CE,0x8FA7FE,0x045F},
- {0x8FA7FF,0x8FA7FF,0x003F}
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx00 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx10 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx20 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx30 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx40 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx50 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx60 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx70 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx80 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx90 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0x8FA7A0,0x8FA7A0}, /* 8FA7A0 */
+ {0x8FA7A1,0x8FA7A1},
+ {0x8FA7A2,0x8FA7A2},
+ {0x8FA7A3,0x8FA7A3},
+ {0x8FA7A4,0x8FA7A4},
+ {0x8FA7A5,0x8FA7A5},
+ {0x8FA7A6,0x8FA7A6},
+ {0x8FA7A7,0x8FA7A7},
+ {0x8FA7A8,0x8FA7A8},
+ {0x8FA7A9,0x8FA7A9},
+ {0x8FA7AA,0x8FA7AA},
+ {0x8FA7AB,0x8FA7AB},
+ {0x8FA7AC,0x8FA7AC},
+ {0x8FA7AD,0x8FA7AD},
+ {0x8FA7AE,0x8FA7AE},
+ {0x8FA7AF,0x8FA7AF},
+ {0x8FA7B0,0x8FA7B0}, /* 8FA7B0 */
+ {0x8FA7B1,0x8FA7B1},
+ {0x8FA7B2,0x8FA7B2},
+ {0x8FA7B3,0x8FA7B3},
+ {0x8FA7B4,0x8FA7B4},
+ {0x8FA7B5,0x8FA7B5},
+ {0x8FA7B6,0x8FA7B6},
+ {0x8FA7B7,0x8FA7B7},
+ {0x8FA7B8,0x8FA7B8},
+ {0x8FA7B9,0x8FA7B9},
+ {0x8FA7BA,0x8FA7BA},
+ {0x8FA7BB,0x8FA7BB},
+ {0x8FA7BC,0x8FA7BC},
+ {0x8FA7BD,0x8FA7BD},
+ {0x8FA7BE,0x8FA7BE},
+ {0x8FA7BF,0x8FA7BF},
+ {0x8FA7C0,0x8FA7C0}, /* 8FA7C0 */
+ {0x8FA7C1,0x8FA7C1},
+ {0x8FA7C2,0x8FA7F2},
+ {0x8FA7C3,0x8FA7F3},
+ {0x8FA7C4,0x8FA7F4},
+ {0x8FA7C5,0x8FA7F5},
+ {0x8FA7C6,0x8FA7F6},
+ {0x8FA7C7,0x8FA7F7},
+ {0x8FA7C8,0x8FA7F8},
+ {0x8FA7C9,0x8FA7F9},
+ {0x8FA7CA,0x8FA7FA},
+ {0x8FA7CB,0x8FA7FB},
+ {0x8FA7CC,0x8FA7FC},
+ {0x8FA7CD,0x8FA7FD},
+ {0x8FA7CE,0x8FA7FE},
+ {0x8FA7CF,0x8FA7CF},
+ {0x8FA7D0,0x8FA7D0}, /* 8FA7D0 */
+ {0x8FA7D1,0x8FA7D1},
+ {0x8FA7D2,0x8FA7D2},
+ {0x8FA7D3,0x8FA7D3},
+ {0x8FA7D4,0x8FA7D4},
+ {0x8FA7D5,0x8FA7D5},
+ {0x8FA7D6,0x8FA7D6},
+ {0x8FA7D7,0x8FA7D7},
+ {0x8FA7D8,0x8FA7D8},
+ {0x8FA7D9,0x8FA7D9},
+ {0x8FA7DA,0x8FA7DA},
+ {0x8FA7DB,0x8FA7DB},
+ {0x8FA7DC,0x8FA7DC},
+ {0x8FA7DD,0x8FA7DD},
+ {0x8FA7DE,0x8FA7DE},
+ {0x8FA7DF,0x8FA7DF},
+ {0x8FA7E0,0x8FA7E0}, /* 8FA7E0 */
+ {0x8FA7E1,0x8FA7E1},
+ {0x8FA7E2,0x8FA7E2},
+ {0x8FA7E3,0x8FA7E3},
+ {0x8FA7E4,0x8FA7E4},
+ {0x8FA7E5,0x8FA7E5},
+ {0x8FA7E6,0x8FA7E6},
+ {0x8FA7E7,0x8FA7E7},
+ {0x8FA7E8,0x8FA7E8},
+ {0x8FA7E9,0x8FA7E9},
+ {0x8FA7EA,0x8FA7EA},
+ {0x8FA7EB,0x8FA7EB},
+ {0x8FA7EC,0x8FA7EC},
+ {0x8FA7ED,0x8FA7ED},
+ {0x8FA7EE,0x8FA7EE},
+ {0x8FA7EF,0x8FA7EF},
+ {0x8FA7F0,0x8FA7F0}, /* 8FA7F0 */
+ {0x8FA7F1,0x8FA7F1},
+ {0x8FA7C2,0x8FA7F2},
+ {0x8FA7C3,0x8FA7F3},
+ {0x8FA7C4,0x8FA7F4},
+ {0x8FA7C5,0x8FA7F5},
+ {0x8FA7C6,0x8FA7F6},
+ {0x8FA7C7,0x8FA7F7},
+ {0x8FA7C8,0x8FA7F8},
+ {0x8FA7C9,0x8FA7F9},
+ {0x8FA7CA,0x8FA7FA},
+ {0x8FA7CB,0x8FA7FB},
+ {0x8FA7CC,0x8FA7FC},
+ {0x8FA7CD,0x8FA7FD},
+ {0x8FA7CE,0x8FA7FE},
+ {0x8FA7FF,0x8FA7FF}
};
-static MY_UNICASE_CHARACTER c8FA9[]=
+static const MY_CASEFOLD_CHARACTER c8FA9[]=
{
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx40 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx50 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx60 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx70 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx80 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx90 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0x8FA9A0,0x8FA9A0,0x003F}, /* 8FA9A0 */
- {0x8FA9A1,0x8FA9C1,0x00C6},
- {0x8FA9A2,0x8FA9C2,0x0110},
- {0x8FA9A3,0x8FA9A3,0x003F},
- {0x8FA9A4,0x8FA9C4,0x0126},
- {0x8FA9A5,0x8FA9A5,0x003F},
- {0x8FA9A6,0x8FA9C6,0x0132},
- {0x8FA9A7,0x8FA9A7,0x003F},
- {0x8FA9A8,0x8FA9C8,0x0141},
- {0x8FA9A9,0x8FA9C9,0x013F},
- {0x8FA9AA,0x8FA9AA,0x003F},
- {0x8FA9AB,0x8FA9CB,0x014A},
- {0x8FA9AC,0x8FA9CC,0x00D8},
- {0x8FA9AD,0x8FA9CD,0x0152},
- {0x8FA9AE,0x8FA9AE,0x003F},
- {0x8FA9AF,0x8FA9CF,0x0166},
- {0x8FA9B0,0x8FA9D0,0x00DE}, /* 8FA9B0 */
- {0x8FA9B1,0x8FA9B1,0x003F},
- {0x8FA9B2,0x8FA9B2,0x003F},
- {0x8FA9B3,0x8FA9B3,0x003F},
- {0x8FA9B4,0x8FA9B4,0x003F},
- {0x8FA9B5,0x8FA9B5,0x003F},
- {0x8FA9B6,0x8FA9B6,0x003F},
- {0x8FA9B7,0x8FA9B7,0x003F},
- {0x8FA9B8,0x8FA9B8,0x003F},
- {0x8FA9B9,0x8FA9B9,0x003F},
- {0x8FA9BA,0x8FA9BA,0x003F},
- {0x8FA9BB,0x8FA9BB,0x003F},
- {0x8FA9BC,0x8FA9BC,0x003F},
- {0x8FA9BD,0x8FA9BD,0x003F},
- {0x8FA9BE,0x8FA9BE,0x003F},
- {0x8FA9BF,0x8FA9BF,0x003F},
- {0x8FA9C0,0x8FA9C0,0x003F}, /* 8FA9C0 */
- {0x8FA9A1,0x8FA9C1,0x00E6},
- {0x8FA9A2,0x8FA9C2,0x0111},
- {0x8FA9C3,0x8FA9C3,0x00F0},
- {0x8FA9A4,0x8FA9C4,0x0127},
- { 0x49,0x8FA9C5,0x0131},
- {0x8FA9A6,0x8FA9C6,0x0133},
- {0x8FA9C7,0x8FA9C7,0x0138},
- {0x8FA9A8,0x8FA9C8,0x0142},
- {0x8FA9A9,0x8FA9C9,0x0140},
- {0x8FA9CA,0x8FA9CA,0x0149},
- {0x8FA9AB,0x8FA9CB,0x014B},
- {0x8FA9AC,0x8FA9CC,0x00F8},
- {0x8FA9AD,0x8FA9CD,0x0153},
- {0x8FA9CE,0x8FA9CE,0x00DF},
- {0x8FA9AF,0x8FA9CF,0x0167},
- {0x8FA9B0,0x8FA9D0,0x00FE}, /* 8FA9D0 */
- {0x8FA9D1,0x8FA9D1,0x003F},
- {0x8FA9D2,0x8FA9D2,0x003F},
- {0x8FA9D3,0x8FA9D3,0x003F},
- {0x8FA9D4,0x8FA9D4,0x003F},
- {0x8FA9D5,0x8FA9D5,0x003F},
- {0x8FA9D6,0x8FA9D6,0x003F},
- {0x8FA9D7,0x8FA9D7,0x003F},
- {0x8FA9D8,0x8FA9D8,0x003F},
- {0x8FA9D9,0x8FA9D9,0x003F},
- {0x8FA9DA,0x8FA9DA,0x003F},
- {0x8FA9DB,0x8FA9DB,0x003F},
- {0x8FA9DC,0x8FA9DC,0x003F},
- {0x8FA9DD,0x8FA9DD,0x003F},
- {0x8FA9DE,0x8FA9DE,0x003F},
- {0x8FA9DF,0x8FA9DF,0x003F},
- {0x8FA9E0,0x8FA9E0,0x003F}, /* 8FA9E0 */
- {0x8FA9E1,0x8FA9E1,0x003F},
- {0x8FA9E2,0x8FA9E2,0x003F},
- {0x8FA9E3,0x8FA9E3,0x003F},
- {0x8FA9E4,0x8FA9E4,0x003F},
- {0x8FA9E5,0x8FA9E5,0x003F},
- {0x8FA9E6,0x8FA9E6,0x003F},
- {0x8FA9E7,0x8FA9E7,0x003F},
- {0x8FA9E8,0x8FA9E8,0x003F},
- {0x8FA9E9,0x8FA9E9,0x003F},
- {0x8FA9EA,0x8FA9EA,0x003F},
- {0x8FA9EB,0x8FA9EB,0x003F},
- {0x8FA9EC,0x8FA9EC,0x003F},
- {0x8FA9ED,0x8FA9ED,0x003F},
- {0x8FA9EE,0x8FA9EE,0x003F},
- {0x8FA9EF,0x8FA9EF,0x003F},
- {0x8FA9F0,0x8FA9F0,0x003F}, /* 8FA9F0 */
- {0x8FA9F1,0x8FA9F1,0x003F},
- {0x8FA9F2,0x8FA9F2,0x003F},
- {0x8FA9F3,0x8FA9F3,0x003F},
- {0x8FA9F4,0x8FA9F4,0x003F},
- {0x8FA9F5,0x8FA9F5,0x003F},
- {0x8FA9F6,0x8FA9F6,0x003F},
- {0x8FA9F7,0x8FA9F7,0x003F},
- {0x8FA9F8,0x8FA9F8,0x003F},
- {0x8FA9F9,0x8FA9F9,0x003F},
- {0x8FA9FA,0x8FA9FA,0x003F},
- {0x8FA9FB,0x8FA9FB,0x003F},
- {0x8FA9FC,0x8FA9FC,0x003F},
- {0x8FA9FD,0x8FA9FD,0x003F},
- {0x8FA9FE,0x8FA9FE,0x003F},
- {0x8FA9FF,0x8FA9FF,0x003F},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx00 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx10 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx20 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx30 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx40 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx50 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx60 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx70 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx80 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx90 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0x8FA9A0,0x8FA9A0}, /* 8FA9A0 */
+ {0x8FA9A1,0x8FA9C1},
+ {0x8FA9A2,0x8FA9C2},
+ {0x8FA9A3,0x8FA9A3},
+ {0x8FA9A4,0x8FA9C4},
+ {0x8FA9A5,0x8FA9A5},
+ {0x8FA9A6,0x8FA9C6},
+ {0x8FA9A7,0x8FA9A7},
+ {0x8FA9A8,0x8FA9C8},
+ {0x8FA9A9,0x8FA9C9},
+ {0x8FA9AA,0x8FA9AA},
+ {0x8FA9AB,0x8FA9CB},
+ {0x8FA9AC,0x8FA9CC},
+ {0x8FA9AD,0x8FA9CD},
+ {0x8FA9AE,0x8FA9AE},
+ {0x8FA9AF,0x8FA9CF},
+ {0x8FA9B0,0x8FA9D0}, /* 8FA9B0 */
+ {0x8FA9B1,0x8FA9B1},
+ {0x8FA9B2,0x8FA9B2},
+ {0x8FA9B3,0x8FA9B3},
+ {0x8FA9B4,0x8FA9B4},
+ {0x8FA9B5,0x8FA9B5},
+ {0x8FA9B6,0x8FA9B6},
+ {0x8FA9B7,0x8FA9B7},
+ {0x8FA9B8,0x8FA9B8},
+ {0x8FA9B9,0x8FA9B9},
+ {0x8FA9BA,0x8FA9BA},
+ {0x8FA9BB,0x8FA9BB},
+ {0x8FA9BC,0x8FA9BC},
+ {0x8FA9BD,0x8FA9BD},
+ {0x8FA9BE,0x8FA9BE},
+ {0x8FA9BF,0x8FA9BF},
+ {0x8FA9C0,0x8FA9C0}, /* 8FA9C0 */
+ {0x8FA9A1,0x8FA9C1},
+ {0x8FA9A2,0x8FA9C2},
+ {0x8FA9C3,0x8FA9C3},
+ {0x8FA9A4,0x8FA9C4},
+ { 0x49,0x8FA9C5},
+ {0x8FA9A6,0x8FA9C6},
+ {0x8FA9C7,0x8FA9C7},
+ {0x8FA9A8,0x8FA9C8},
+ {0x8FA9A9,0x8FA9C9},
+ {0x8FA9CA,0x8FA9CA},
+ {0x8FA9AB,0x8FA9CB},
+ {0x8FA9AC,0x8FA9CC},
+ {0x8FA9AD,0x8FA9CD},
+ {0x8FA9CE,0x8FA9CE},
+ {0x8FA9AF,0x8FA9CF},
+ {0x8FA9B0,0x8FA9D0}, /* 8FA9D0 */
+ {0x8FA9D1,0x8FA9D1},
+ {0x8FA9D2,0x8FA9D2},
+ {0x8FA9D3,0x8FA9D3},
+ {0x8FA9D4,0x8FA9D4},
+ {0x8FA9D5,0x8FA9D5},
+ {0x8FA9D6,0x8FA9D6},
+ {0x8FA9D7,0x8FA9D7},
+ {0x8FA9D8,0x8FA9D8},
+ {0x8FA9D9,0x8FA9D9},
+ {0x8FA9DA,0x8FA9DA},
+ {0x8FA9DB,0x8FA9DB},
+ {0x8FA9DC,0x8FA9DC},
+ {0x8FA9DD,0x8FA9DD},
+ {0x8FA9DE,0x8FA9DE},
+ {0x8FA9DF,0x8FA9DF},
+ {0x8FA9E0,0x8FA9E0}, /* 8FA9E0 */
+ {0x8FA9E1,0x8FA9E1},
+ {0x8FA9E2,0x8FA9E2},
+ {0x8FA9E3,0x8FA9E3},
+ {0x8FA9E4,0x8FA9E4},
+ {0x8FA9E5,0x8FA9E5},
+ {0x8FA9E6,0x8FA9E6},
+ {0x8FA9E7,0x8FA9E7},
+ {0x8FA9E8,0x8FA9E8},
+ {0x8FA9E9,0x8FA9E9},
+ {0x8FA9EA,0x8FA9EA},
+ {0x8FA9EB,0x8FA9EB},
+ {0x8FA9EC,0x8FA9EC},
+ {0x8FA9ED,0x8FA9ED},
+ {0x8FA9EE,0x8FA9EE},
+ {0x8FA9EF,0x8FA9EF},
+ {0x8FA9F0,0x8FA9F0}, /* 8FA9F0 */
+ {0x8FA9F1,0x8FA9F1},
+ {0x8FA9F2,0x8FA9F2},
+ {0x8FA9F3,0x8FA9F3},
+ {0x8FA9F4,0x8FA9F4},
+ {0x8FA9F5,0x8FA9F5},
+ {0x8FA9F6,0x8FA9F6},
+ {0x8FA9F7,0x8FA9F7},
+ {0x8FA9F8,0x8FA9F8},
+ {0x8FA9F9,0x8FA9F9},
+ {0x8FA9FA,0x8FA9FA},
+ {0x8FA9FB,0x8FA9FB},
+ {0x8FA9FC,0x8FA9FC},
+ {0x8FA9FD,0x8FA9FD},
+ {0x8FA9FE,0x8FA9FE},
+ {0x8FA9FF,0x8FA9FF},
};
-static MY_UNICASE_CHARACTER c8FAA[]=
+static const MY_CASEFOLD_CHARACTER c8FAA[]=
{
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx40 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx50 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx60 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx70 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx80 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx90 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0x8FAAA0,0x8FAAA0,0x003F}, /* 8FAAA0 */
- {0x8FAAA1,0x8FABA1,0x00C1},
- {0x8FAAA2,0x8FABA2,0x00C0},
- {0x8FAAA3,0x8FABA3,0x00C4},
- {0x8FAAA4,0x8FABA4,0x00C2},
- {0x8FAAA5,0x8FABA5,0x0102},
- {0x8FAAA6,0x8FABA6,0x01CD},
- {0x8FAAA7,0x8FABA7,0x0100},
- {0x8FAAA8,0x8FABA8,0x0104},
- {0x8FAAA9,0x8FABA9,0x00C5},
- {0x8FAAAA,0x8FABAA,0x00C3},
- {0x8FAAAB,0x8FABAB,0x0106},
- {0x8FAAAC,0x8FABAC,0x0108},
- {0x8FAAAD,0x8FABAD,0x010C},
- {0x8FAAAE,0x8FABAE,0x00C7},
- {0x8FAAAF,0x8FABAF,0x010A},
- {0x8FAAB0,0x8FABB0,0x010E}, /* 8FAAB0 */
- {0x8FAAB1,0x8FABB1,0x00C9},
- {0x8FAAB2,0x8FABB2,0x00C8},
- {0x8FAAB3,0x8FABB3,0x00CB},
- {0x8FAAB4,0x8FABB4,0x00CA},
- {0x8FAAB5,0x8FABB5,0x011A},
- {0x8FAAB6,0x8FABB6,0x0116},
- {0x8FAAB7,0x8FABB7,0x0112},
- {0x8FAAB8,0x8FABB8,0x0118},
- {0x8FAAB9,0x8FAAB9,0x003F},
- {0x8FAABA,0x8FABBA,0x011C},
- {0x8FAABB,0x8FABBB,0x011E},
- {0x8FAABC,0x8FAABC,0x0122},
- {0x8FAABD,0x8FABBD,0x0120},
- {0x8FAABE,0x8FABBE,0x0124},
- {0x8FAABF,0x8FABBF,0x00CD},
- {0x8FAAC0,0x8FABC0,0x00CC}, /* 8FAAC0 */
- {0x8FAAC1,0x8FABC1,0x00CF},
- {0x8FAAC2,0x8FABC2,0x00CE},
- {0x8FAAC3,0x8FABC3,0x01CF},
- {0x8FAAC4, 0x69,0x0130},
- {0x8FAAC5,0x8FABC5,0x012A},
- {0x8FAAC6,0x8FABC6,0x012E},
- {0x8FAAC7,0x8FABC7,0x0128},
- {0x8FAAC8,0x8FABC8,0x0134},
- {0x8FAAC9,0x8FABC9,0x0136},
- {0x8FAACA,0x8FABCA,0x0139},
- {0x8FAACB,0x8FABCB,0x013D},
- {0x8FAACC,0x8FABCC,0x013B},
- {0x8FAACD,0x8FABCD,0x0143},
- {0x8FAACE,0x8FABCE,0x0147},
- {0x8FAACF,0x8FABCF,0x0145},
- {0x8FAAD0,0x8FABD0,0x00D1}, /* 8FAAD0 */
- {0x8FAAD1,0x8FABD1,0x00D3},
- {0x8FAAD2,0x8FABD2,0x00D2},
- {0x8FAAD3,0x8FABD3,0x00D6},
- {0x8FAAD4,0x8FABD4,0x00D4},
- {0x8FAAD5,0x8FABD5,0x01D1},
- {0x8FAAD6,0x8FABD6,0x0150},
- {0x8FAAD7,0x8FABD7,0x014C},
- {0x8FAAD8,0x8FABD8,0x00D5},
- {0x8FAAD9,0x8FABD9,0x0154},
- {0x8FAADA,0x8FABDA,0x0158},
- {0x8FAADB,0x8FABDB,0x0156},
- {0x8FAADC,0x8FABDC,0x015A},
- {0x8FAADD,0x8FABDD,0x015C},
- {0x8FAADE,0x8FABDE,0x0160},
- {0x8FAADF,0x8FABDF,0x015E},
- {0x8FAAE0,0x8FABE0,0x0164}, /* 8FAAE0 */
- {0x8FAAE1,0x8FABE1,0x0162},
- {0x8FAAE2,0x8FABE2,0x00DA},
- {0x8FAAE3,0x8FABE3,0x00D9},
- {0x8FAAE4,0x8FABE4,0x00DC},
- {0x8FAAE5,0x8FABE5,0x00DB},
- {0x8FAAE6,0x8FABE6,0x016C},
- {0x8FAAE7,0x8FABE7,0x01D3},
- {0x8FAAE8,0x8FABE8,0x0170},
- {0x8FAAE9,0x8FABE9,0x016A},
- {0x8FAAEA,0x8FABEA,0x0172},
- {0x8FAAEB,0x8FABEB,0x016E},
- {0x8FAAEC,0x8FABEC,0x0168},
- {0x8FAAED,0x8FABED,0x01D7},
- {0x8FAAEE,0x8FABEE,0x01DB},
- {0x8FAAEF,0x8FABEF,0x01D9},
- {0x8FAAF0,0x8FABF0,0x01D5}, /* 8FAAF0 */
- {0x8FAAF1,0x8FABF1,0x0174},
- {0x8FAAF2,0x8FABF2,0x00DD},
- {0x8FAAF3,0x8FABF3,0x0178},
- {0x8FAAF4,0x8FABF4,0x0176},
- {0x8FAAF5,0x8FABF5,0x0179},
- {0x8FAAF6,0x8FABF6,0x017D},
- {0x8FAAF7,0x8FABF7,0x017B},
- {0x8FAAF8,0x8FAAF8,0x003F},
- {0x8FAAF9,0x8FAAF9,0x003F},
- {0x8FAAFA,0x8FAAFA,0x003F},
- {0x8FAAFB,0x8FAAFB,0x003F},
- {0x8FAAFC,0x8FAAFC,0x003F},
- {0x8FAAFD,0x8FAAFD,0x003F},
- {0x8FAAFE,0x8FAAFE,0x003F},
- {0x8FAAFF,0x8FAAFF,0x003F},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx00 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx10 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx20 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx30 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx40 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx50 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx60 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx70 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx80 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx90 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0x8FAAA0,0x8FAAA0}, /* 8FAAA0 */
+ {0x8FAAA1,0x8FABA1},
+ {0x8FAAA2,0x8FABA2},
+ {0x8FAAA3,0x8FABA3},
+ {0x8FAAA4,0x8FABA4},
+ {0x8FAAA5,0x8FABA5},
+ {0x8FAAA6,0x8FABA6},
+ {0x8FAAA7,0x8FABA7},
+ {0x8FAAA8,0x8FABA8},
+ {0x8FAAA9,0x8FABA9},
+ {0x8FAAAA,0x8FABAA},
+ {0x8FAAAB,0x8FABAB},
+ {0x8FAAAC,0x8FABAC},
+ {0x8FAAAD,0x8FABAD},
+ {0x8FAAAE,0x8FABAE},
+ {0x8FAAAF,0x8FABAF},
+ {0x8FAAB0,0x8FABB0}, /* 8FAAB0 */
+ {0x8FAAB1,0x8FABB1},
+ {0x8FAAB2,0x8FABB2},
+ {0x8FAAB3,0x8FABB3},
+ {0x8FAAB4,0x8FABB4},
+ {0x8FAAB5,0x8FABB5},
+ {0x8FAAB6,0x8FABB6},
+ {0x8FAAB7,0x8FABB7},
+ {0x8FAAB8,0x8FABB8},
+ {0x8FAAB9,0x8FAAB9},
+ {0x8FAABA,0x8FABBA},
+ {0x8FAABB,0x8FABBB},
+ {0x8FAABC,0x8FAABC},
+ {0x8FAABD,0x8FABBD},
+ {0x8FAABE,0x8FABBE},
+ {0x8FAABF,0x8FABBF},
+ {0x8FAAC0,0x8FABC0}, /* 8FAAC0 */
+ {0x8FAAC1,0x8FABC1},
+ {0x8FAAC2,0x8FABC2},
+ {0x8FAAC3,0x8FABC3},
+ {0x8FAAC4, 0x69},
+ {0x8FAAC5,0x8FABC5},
+ {0x8FAAC6,0x8FABC6},
+ {0x8FAAC7,0x8FABC7},
+ {0x8FAAC8,0x8FABC8},
+ {0x8FAAC9,0x8FABC9},
+ {0x8FAACA,0x8FABCA},
+ {0x8FAACB,0x8FABCB},
+ {0x8FAACC,0x8FABCC},
+ {0x8FAACD,0x8FABCD},
+ {0x8FAACE,0x8FABCE},
+ {0x8FAACF,0x8FABCF},
+ {0x8FAAD0,0x8FABD0}, /* 8FAAD0 */
+ {0x8FAAD1,0x8FABD1},
+ {0x8FAAD2,0x8FABD2},
+ {0x8FAAD3,0x8FABD3},
+ {0x8FAAD4,0x8FABD4},
+ {0x8FAAD5,0x8FABD5},
+ {0x8FAAD6,0x8FABD6},
+ {0x8FAAD7,0x8FABD7},
+ {0x8FAAD8,0x8FABD8},
+ {0x8FAAD9,0x8FABD9},
+ {0x8FAADA,0x8FABDA},
+ {0x8FAADB,0x8FABDB},
+ {0x8FAADC,0x8FABDC},
+ {0x8FAADD,0x8FABDD},
+ {0x8FAADE,0x8FABDE},
+ {0x8FAADF,0x8FABDF},
+ {0x8FAAE0,0x8FABE0}, /* 8FAAE0 */
+ {0x8FAAE1,0x8FABE1},
+ {0x8FAAE2,0x8FABE2},
+ {0x8FAAE3,0x8FABE3},
+ {0x8FAAE4,0x8FABE4},
+ {0x8FAAE5,0x8FABE5},
+ {0x8FAAE6,0x8FABE6},
+ {0x8FAAE7,0x8FABE7},
+ {0x8FAAE8,0x8FABE8},
+ {0x8FAAE9,0x8FABE9},
+ {0x8FAAEA,0x8FABEA},
+ {0x8FAAEB,0x8FABEB},
+ {0x8FAAEC,0x8FABEC},
+ {0x8FAAED,0x8FABED},
+ {0x8FAAEE,0x8FABEE},
+ {0x8FAAEF,0x8FABEF},
+ {0x8FAAF0,0x8FABF0}, /* 8FAAF0 */
+ {0x8FAAF1,0x8FABF1},
+ {0x8FAAF2,0x8FABF2},
+ {0x8FAAF3,0x8FABF3},
+ {0x8FAAF4,0x8FABF4},
+ {0x8FAAF5,0x8FABF5},
+ {0x8FAAF6,0x8FABF6},
+ {0x8FAAF7,0x8FABF7},
+ {0x8FAAF8,0x8FAAF8},
+ {0x8FAAF9,0x8FAAF9},
+ {0x8FAAFA,0x8FAAFA},
+ {0x8FAAFB,0x8FAAFB},
+ {0x8FAAFC,0x8FAAFC},
+ {0x8FAAFD,0x8FAAFD},
+ {0x8FAAFE,0x8FAAFE},
+ {0x8FAAFF,0x8FAAFF},
};
-static MY_UNICASE_CHARACTER c8FAB[]=
+static const MY_CASEFOLD_CHARACTER c8FAB[]=
{
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx00 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx10 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx20 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx30 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx40 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx50 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx60 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx70 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx80 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, /* xx90 */
- {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
- {0x8FABA0,0x8FABA0,0x003F}, /* 8FABA0 */
- {0x8FAAA1,0x8FABA1,0x00E1},
- {0x8FAAA2,0x8FABA2,0x00E0},
- {0x8FAAA3,0x8FABA3,0x00E4},
- {0x8FAAA4,0x8FABA4,0x00E2},
- {0x8FAAA5,0x8FABA5,0x0103},
- {0x8FAAA6,0x8FABA6,0x01CE},
- {0x8FAAA7,0x8FABA7,0x0101},
- {0x8FAAA8,0x8FABA8,0x0105},
- {0x8FAAA9,0x8FABA9,0x00E5},
- {0x8FAAAA,0x8FABAA,0x00E3},
- {0x8FAAAB,0x8FABAB,0x0107},
- {0x8FAAAC,0x8FABAC,0x0109},
- {0x8FAAAD,0x8FABAD,0x010D},
- {0x8FAAAE,0x8FABAE,0x00E7},
- {0x8FAAAF,0x8FABAF,0x010B},
- {0x8FAAB0,0x8FABB0,0x010F}, /* 8FABB0 */
- {0x8FAAB1,0x8FABB1,0x00E9},
- {0x8FAAB2,0x8FABB2,0x00E8},
- {0x8FAAB3,0x8FABB3,0x00EB},
- {0x8FAAB4,0x8FABB4,0x00EA},
- {0x8FAAB5,0x8FABB5,0x011B},
- {0x8FAAB6,0x8FABB6,0x0117},
- {0x8FAAB7,0x8FABB7,0x0113},
- {0x8FAAB8,0x8FABB8,0x0119},
- {0x8FABB9,0x8FABB9,0x01F5},
- {0x8FAABA,0x8FABBA,0x011D},
- {0x8FAABB,0x8FABBB,0x011F},
- {0x8FABBC,0x8FABBC,0x003F},
- {0x8FAABD,0x8FABBD,0x0121},
- {0x8FAABE,0x8FABBE,0x0125},
- {0x8FAABF,0x8FABBF,0x00ED},
- {0x8FAAC0,0x8FABC0,0x00EC}, /* 8FABC0 */
- {0x8FAAC1,0x8FABC1,0x00EF},
- {0x8FAAC2,0x8FABC2,0x00EE},
- {0x8FAAC3,0x8FABC3,0x01D0},
- {0x8FABC4,0x8FABC4,0x003F},
- {0x8FAAC5,0x8FABC5,0x012B},
- {0x8FAAC6,0x8FABC6,0x012F},
- {0x8FAAC7,0x8FABC7,0x0129},
- {0x8FAAC8,0x8FABC8,0x0135},
- {0x8FAAC9,0x8FABC9,0x0137},
- {0x8FAACA,0x8FABCA,0x013A},
- {0x8FAACB,0x8FABCB,0x013E},
- {0x8FAACC,0x8FABCC,0x013C},
- {0x8FAACD,0x8FABCD,0x0144},
- {0x8FAACE,0x8FABCE,0x0148},
- {0x8FAACF,0x8FABCF,0x0146},
- {0x8FAAD0,0x8FABD0,0x00F1}, /* 8FABD0 */
- {0x8FAAD1,0x8FABD1,0x00F3},
- {0x8FAAD2,0x8FABD2,0x00F2},
- {0x8FAAD3,0x8FABD3,0x00F6},
- {0x8FAAD4,0x8FABD4,0x00F4},
- {0x8FAAD5,0x8FABD5,0x01D2},
- {0x8FAAD6,0x8FABD6,0x0151},
- {0x8FAAD7,0x8FABD7,0x014D},
- {0x8FAAD8,0x8FABD8,0x00F5},
- {0x8FAAD9,0x8FABD9,0x0155},
- {0x8FAADA,0x8FABDA,0x0159},
- {0x8FAADB,0x8FABDB,0x0157},
- {0x8FAADC,0x8FABDC,0x015B},
- {0x8FAADD,0x8FABDD,0x015D},
- {0x8FAADE,0x8FABDE,0x0161},
- {0x8FAADF,0x8FABDF,0x015F},
- {0x8FAAE0,0x8FABE0,0x0165}, /* 8FABE0 */
- {0x8FAAE1,0x8FABE1,0x0163},
- {0x8FAAE2,0x8FABE2,0x00FA},
- {0x8FAAE3,0x8FABE3,0x00F9},
- {0x8FAAE4,0x8FABE4,0x00FC},
- {0x8FAAE5,0x8FABE5,0x00FB},
- {0x8FAAE6,0x8FABE6,0x016D},
- {0x8FAAE7,0x8FABE7,0x01D4},
- {0x8FAAE8,0x8FABE8,0x0171},
- {0x8FAAE9,0x8FABE9,0x016B},
- {0x8FAAEA,0x8FABEA,0x0173},
- {0x8FAAEB,0x8FABEB,0x016F},
- {0x8FAAEC,0x8FABEC,0x0169},
- {0x8FAAED,0x8FABED,0x01D8},
- {0x8FAAEE,0x8FABEE,0x01DC},
- {0x8FAAEF,0x8FABEF,0x01DA},
- {0x8FAAF0,0x8FABF0,0x01D6}, /* 8FABF0 */
- {0x8FAAF1,0x8FABF1,0x0175},
- {0x8FAAF2,0x8FABF2,0x00FD},
- {0x8FAAF3,0x8FABF3,0x00FF},
- {0x8FAAF4,0x8FABF4,0x0177},
- {0x8FAAF5,0x8FABF5,0x017A},
- {0x8FAAF6,0x8FABF6,0x017E},
- {0x8FAAF7,0x8FABF7,0x017C},
- {0x8FABF8,0x8FABF8,0x003F},
- {0x8FABF9,0x8FABF9,0x003F},
- {0x8FABFA,0x8FABFA,0x003F},
- {0x8FABFB,0x8FABFB,0x003F},
- {0x8FABFC,0x8FABFC,0x003F},
- {0x8FABFD,0x8FABFD,0x003F},
- {0x8FABFE,0x8FABFE,0x003F},
- {0x8FABFF,0x8FABFF,0x003F}
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx00 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx10 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx20 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx30 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx40 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx50 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx60 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx70 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx80 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* xx90 */
+ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
+ {0x8FABA0,0x8FABA0}, /* 8FABA0 */
+ {0x8FAAA1,0x8FABA1},
+ {0x8FAAA2,0x8FABA2},
+ {0x8FAAA3,0x8FABA3},
+ {0x8FAAA4,0x8FABA4},
+ {0x8FAAA5,0x8FABA5},
+ {0x8FAAA6,0x8FABA6},
+ {0x8FAAA7,0x8FABA7},
+ {0x8FAAA8,0x8FABA8},
+ {0x8FAAA9,0x8FABA9},
+ {0x8FAAAA,0x8FABAA},
+ {0x8FAAAB,0x8FABAB},
+ {0x8FAAAC,0x8FABAC},
+ {0x8FAAAD,0x8FABAD},
+ {0x8FAAAE,0x8FABAE},
+ {0x8FAAAF,0x8FABAF},
+ {0x8FAAB0,0x8FABB0}, /* 8FABB0 */
+ {0x8FAAB1,0x8FABB1},
+ {0x8FAAB2,0x8FABB2},
+ {0x8FAAB3,0x8FABB3},
+ {0x8FAAB4,0x8FABB4},
+ {0x8FAAB5,0x8FABB5},
+ {0x8FAAB6,0x8FABB6},
+ {0x8FAAB7,0x8FABB7},
+ {0x8FAAB8,0x8FABB8},
+ {0x8FABB9,0x8FABB9},
+ {0x8FAABA,0x8FABBA},
+ {0x8FAABB,0x8FABBB},
+ {0x8FABBC,0x8FABBC},
+ {0x8FAABD,0x8FABBD},
+ {0x8FAABE,0x8FABBE},
+ {0x8FAABF,0x8FABBF},
+ {0x8FAAC0,0x8FABC0}, /* 8FABC0 */
+ {0x8FAAC1,0x8FABC1},
+ {0x8FAAC2,0x8FABC2},
+ {0x8FAAC3,0x8FABC3},
+ {0x8FABC4,0x8FABC4},
+ {0x8FAAC5,0x8FABC5},
+ {0x8FAAC6,0x8FABC6},
+ {0x8FAAC7,0x8FABC7},
+ {0x8FAAC8,0x8FABC8},
+ {0x8FAAC9,0x8FABC9},
+ {0x8FAACA,0x8FABCA},
+ {0x8FAACB,0x8FABCB},
+ {0x8FAACC,0x8FABCC},
+ {0x8FAACD,0x8FABCD},
+ {0x8FAACE,0x8FABCE},
+ {0x8FAACF,0x8FABCF},
+ {0x8FAAD0,0x8FABD0}, /* 8FABD0 */
+ {0x8FAAD1,0x8FABD1},
+ {0x8FAAD2,0x8FABD2},
+ {0x8FAAD3,0x8FABD3},
+ {0x8FAAD4,0x8FABD4},
+ {0x8FAAD5,0x8FABD5},
+ {0x8FAAD6,0x8FABD6},
+ {0x8FAAD7,0x8FABD7},
+ {0x8FAAD8,0x8FABD8},
+ {0x8FAAD9,0x8FABD9},
+ {0x8FAADA,0x8FABDA},
+ {0x8FAADB,0x8FABDB},
+ {0x8FAADC,0x8FABDC},
+ {0x8FAADD,0x8FABDD},
+ {0x8FAADE,0x8FABDE},
+ {0x8FAADF,0x8FABDF},
+ {0x8FAAE0,0x8FABE0}, /* 8FABE0 */
+ {0x8FAAE1,0x8FABE1},
+ {0x8FAAE2,0x8FABE2},
+ {0x8FAAE3,0x8FABE3},
+ {0x8FAAE4,0x8FABE4},
+ {0x8FAAE5,0x8FABE5},
+ {0x8FAAE6,0x8FABE6},
+ {0x8FAAE7,0x8FABE7},
+ {0x8FAAE8,0x8FABE8},
+ {0x8FAAE9,0x8FABE9},
+ {0x8FAAEA,0x8FABEA},
+ {0x8FAAEB,0x8FABEB},
+ {0x8FAAEC,0x8FABEC},
+ {0x8FAAED,0x8FABED},
+ {0x8FAAEE,0x8FABEE},
+ {0x8FAAEF,0x8FABEF},
+ {0x8FAAF0,0x8FABF0}, /* 8FABF0 */
+ {0x8FAAF1,0x8FABF1},
+ {0x8FAAF2,0x8FABF2},
+ {0x8FAAF3,0x8FABF3},
+ {0x8FAAF4,0x8FABF4},
+ {0x8FAAF5,0x8FABF5},
+ {0x8FAAF6,0x8FABF6},
+ {0x8FAAF7,0x8FABF7},
+ {0x8FABF8,0x8FABF8},
+ {0x8FABF9,0x8FABF9},
+ {0x8FABFA,0x8FABFA},
+ {0x8FABFB,0x8FABFB},
+ {0x8FABFC,0x8FABFC},
+ {0x8FABFD,0x8FABFD},
+ {0x8FABFE,0x8FABFE},
+ {0x8FABFF,0x8FABFF}
};
-static MY_UNICASE_CHARACTER *my_caseinfo_pages_ujis[512]=
+static const MY_CASEFOLD_CHARACTER *my_casefold_pages_ujis[512]=
{
/* JIS-X-0208 */
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 0 */
@@ -67137,10 +67137,11 @@ static MY_UNICASE_CHARACTER *my_caseinfo_pages_ujis[512]=
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
};
-static MY_UNICASE_INFO my_caseinfo_ujis=
+static MY_CASEFOLD_INFO my_casefold_info_ujis=
{
0x0FFFF,
- my_caseinfo_pages_ujis
+ my_casefold_pages_ujis,
+ NULL /* ws */
};
@@ -67155,11 +67156,11 @@ static MY_UNICASE_INFO my_caseinfo_ujis=
UJIS and EUCJPMS share the same UPPER/LOWER functions.
*/
-static MY_UNICASE_CHARACTER*
+static const MY_CASEFOLD_CHARACTER*
get_case_info_for_ch(CHARSET_INFO *cs, uint plane, uint page, uint offs)
{
- MY_UNICASE_CHARACTER *p;
- return (p= cs->caseinfo->page[page + plane * 256]) ? &p[offs & 0xFF] : NULL;
+ const MY_CASEFOLD_CHARACTER *p;
+ return (p= cs->casefold->page[page + plane * 256]) ? &p[offs & 0xFF] : NULL;
}
@@ -67180,7 +67181,7 @@ my_casefold_ujis(CHARSET_INFO *cs,
size_t mblen= my_ismbchar(cs, src, srcend);
if (mblen)
{
- MY_UNICASE_CHARACTER *ch;
+ const MY_CASEFOLD_CHARACTER *ch;
ch= (mblen == 2) ?
get_case_info_for_ch(cs, 0, (uchar) src[0], (uchar) src[1]) :
get_case_info_for_ch(cs, 1, (uchar) src[1], (uchar) src[2]);
@@ -67218,8 +67219,8 @@ size_t
my_casedn_ujis(CHARSET_INFO * cs, const char *src, size_t srclen,
char *dst, size_t dstlen)
{
- DBUG_ASSERT(dstlen >= srclen * cs->casedn_multiply);
- DBUG_ASSERT(src != dst || cs->casedn_multiply == 1);
+ DBUG_ASSERT(dstlen >= srclen * cs->cset->casedn_multiply(cs));
+ DBUG_ASSERT(src != dst || cs->cset->casedn_multiply(cs) == 1);
return my_casefold_ujis(cs, src, srclen, dst, dstlen, cs->to_lower, 0);
}
@@ -67231,8 +67232,8 @@ size_t
my_caseup_ujis(CHARSET_INFO * cs, const char *src, size_t srclen,
char *dst, size_t dstlen)
{
- DBUG_ASSERT(dstlen >= srclen * cs->caseup_multiply);
- DBUG_ASSERT(src != dst || cs->caseup_multiply == 1);
+ DBUG_ASSERT(dstlen >= srclen * cs->cset->caseup_multiply(cs));
+ DBUG_ASSERT(src != dst || cs->cset->caseup_multiply(cs) == 1);
return my_casefold_ujis(cs, src, srclen, dst, dstlen, cs->to_upper, 1);
}
#endif /* defined(HAVE_CHARSET_ujis) || defined(HAVE_CHARSET_eucjpms) */
@@ -67256,7 +67257,9 @@ static MY_COLLATION_HANDLER my_collation_ujis_japanese_ci_handler =
my_hash_sort_simple,
my_propagate_simple,
my_min_str_mb_simple,
- my_max_str_mb_simple
+ my_max_str_mb_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
@@ -67275,7 +67278,9 @@ static MY_COLLATION_HANDLER my_collation_ujis_bin_handler =
my_hash_sort_mb_bin,
my_propagate_simple,
my_min_str_mb_simple,
- my_max_str_mb_simple
+ my_max_str_mb_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
@@ -67294,7 +67299,9 @@ static MY_COLLATION_HANDLER my_collation_ujis_japanese_nopad_ci_handler =
my_hash_sort_simple_nopad,
my_propagate_simple,
my_min_str_mb_simple_nopad,
- my_max_str_mb_simple
+ my_max_str_mb_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
@@ -67313,7 +67320,9 @@ static MY_COLLATION_HANDLER my_collation_ujis_nopad_bin_handler =
my_hash_sort_mb_nopad_bin,
my_propagate_simple,
my_min_str_mb_simple_nopad,
- my_max_str_mb_simple
+ my_max_str_mb_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
@@ -67347,7 +67356,9 @@ static MY_CHARSET_HANDLER my_charset_handler=
my_well_formed_char_length_ujis,
my_copy_fix_mb,
my_native_to_mb_ujis,
- my_wc_to_printable_generic
+ my_wc_to_printable_generic,
+ my_casefold_multiply_1,
+ my_casefold_multiply_2
};
@@ -67367,19 +67378,17 @@ struct charset_info_st my_charset_ujis_japanese_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_caseinfo_ujis, /* caseinfo */
+ &my_casefold_info_ujis,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 2, /* casedn_multiply */
1, /* mbminlen */
3, /* mbmaxlen */
0, /* min_sort_char */
0xFEFE, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_handler,
&my_collation_ujis_japanese_ci_handler
};
@@ -67400,19 +67409,17 @@ struct charset_info_st my_charset_ujis_bin=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_caseinfo_ujis, /* caseinfo */
+ &my_casefold_info_ujis,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 2, /* casedn_multiply */
1, /* mbminlen */
3, /* mbmaxlen */
0, /* min_sort_char */
0xFEFE, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_handler,
&my_collation_ujis_bin_handler
};
@@ -67433,19 +67440,17 @@ struct charset_info_st my_charset_ujis_japanese_nopad_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_caseinfo_ujis, /* caseinfo */
+ &my_casefold_info_ujis,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 2, /* casedn_multiply */
1, /* mbminlen */
3, /* mbmaxlen */
0, /* min_sort_char */
0xFEFE, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_handler,
&my_collation_ujis_japanese_nopad_ci_handler
};
@@ -67466,19 +67471,17 @@ struct charset_info_st my_charset_ujis_nopad_bin=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_caseinfo_ujis, /* caseinfo */
+ &my_casefold_info_ujis,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 2, /* casedn_multiply */
1, /* mbminlen */
3, /* mbmaxlen */
0, /* min_sort_char */
0xFEFE, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_handler,
&my_collation_ujis_nopad_bin_handler
};
diff --git a/strings/ctype-unicode1400-casefold-tr.h b/strings/ctype-unicode1400-casefold-tr.h
new file mode 100644
index 00000000000..25e1b5d3d59
--- /dev/null
+++ b/strings/ctype-unicode1400-casefold-tr.h
@@ -0,0 +1,704 @@
+/* Copyright (c) 2000, 2013, Oracle and/or its affiliates.
+ Copyright (c) 2009, 2023, MariaDB Corporation.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; version 2 of the License.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA
+*/
+
+/*
+ Generated by:
+ ./unidata-dump \
+ --mode=casefold-tr \
+ --page-name=u1400tr_casefold_page \
+ --page-name-derived=u1400_casefold_page \
+ --index-name=my_u1400tr_casefold_index \
+ UnicodeData-14.0.0.txt
+
+*/
+const MY_CASEFOLD_CHARACTER u1400tr_casefold_page00[256]={
+ {0x0000,0x0000},{0x0001,0x0001}, /* 0000 */
+ {0x0002,0x0002},{0x0003,0x0003}, /* 0002 */
+ {0x0004,0x0004},{0x0005,0x0005}, /* 0004 */
+ {0x0006,0x0006},{0x0007,0x0007}, /* 0006 */
+ {0x0008,0x0008},{0x0009,0x0009}, /* 0008 */
+ {0x000A,0x000A},{0x000B,0x000B}, /* 000A */
+ {0x000C,0x000C},{0x000D,0x000D}, /* 000C */
+ {0x000E,0x000E},{0x000F,0x000F}, /* 000E */
+ {0x0010,0x0010},{0x0011,0x0011}, /* 0010 */
+ {0x0012,0x0012},{0x0013,0x0013}, /* 0012 */
+ {0x0014,0x0014},{0x0015,0x0015}, /* 0014 */
+ {0x0016,0x0016},{0x0017,0x0017}, /* 0016 */
+ {0x0018,0x0018},{0x0019,0x0019}, /* 0018 */
+ {0x001A,0x001A},{0x001B,0x001B}, /* 001A */
+ {0x001C,0x001C},{0x001D,0x001D}, /* 001C */
+ {0x001E,0x001E},{0x001F,0x001F}, /* 001E */
+ {0x0020,0x0020},{0x0021,0x0021}, /* 0020 */
+ {0x0022,0x0022},{0x0023,0x0023}, /* 0022 */
+ {0x0024,0x0024},{0x0025,0x0025}, /* 0024 */
+ {0x0026,0x0026},{0x0027,0x0027}, /* 0026 */
+ {0x0028,0x0028},{0x0029,0x0029}, /* 0028 */
+ {0x002A,0x002A},{0x002B,0x002B}, /* 002A */
+ {0x002C,0x002C},{0x002D,0x002D}, /* 002C */
+ {0x002E,0x002E},{0x002F,0x002F}, /* 002E */
+ {0x0030,0x0030},{0x0031,0x0031}, /* 0030 */
+ {0x0032,0x0032},{0x0033,0x0033}, /* 0032 */
+ {0x0034,0x0034},{0x0035,0x0035}, /* 0034 */
+ {0x0036,0x0036},{0x0037,0x0037}, /* 0036 */
+ {0x0038,0x0038},{0x0039,0x0039}, /* 0038 */
+ {0x003A,0x003A},{0x003B,0x003B}, /* 003A */
+ {0x003C,0x003C},{0x003D,0x003D}, /* 003C */
+ {0x003E,0x003E},{0x003F,0x003F}, /* 003E */
+ {0x0040,0x0040},{0x0041,0x0061}, /* 0040 */
+ {0x0042,0x0062},{0x0043,0x0063}, /* 0042 */
+ {0x0044,0x0064},{0x0045,0x0065}, /* 0044 */
+ {0x0046,0x0066},{0x0047,0x0067}, /* 0046 */
+ {0x0048,0x0068},{0x0049,0x0131}, /* 0048 */
+ {0x004A,0x006A},{0x004B,0x006B}, /* 004A */
+ {0x004C,0x006C},{0x004D,0x006D}, /* 004C */
+ {0x004E,0x006E},{0x004F,0x006F}, /* 004E */
+ {0x0050,0x0070},{0x0051,0x0071}, /* 0050 */
+ {0x0052,0x0072},{0x0053,0x0073}, /* 0052 */
+ {0x0054,0x0074},{0x0055,0x0075}, /* 0054 */
+ {0x0056,0x0076},{0x0057,0x0077}, /* 0056 */
+ {0x0058,0x0078},{0x0059,0x0079}, /* 0058 */
+ {0x005A,0x007A},{0x005B,0x005B}, /* 005A */
+ {0x005C,0x005C},{0x005D,0x005D}, /* 005C */
+ {0x005E,0x005E},{0x005F,0x005F}, /* 005E */
+ {0x0060,0x0060},{0x0041,0x0061}, /* 0060 */
+ {0x0042,0x0062},{0x0043,0x0063}, /* 0062 */
+ {0x0044,0x0064},{0x0045,0x0065}, /* 0064 */
+ {0x0046,0x0066},{0x0047,0x0067}, /* 0066 */
+ {0x0048,0x0068},{0x0130,0x0069}, /* 0068 */
+ {0x004A,0x006A},{0x004B,0x006B}, /* 006A */
+ {0x004C,0x006C},{0x004D,0x006D}, /* 006C */
+ {0x004E,0x006E},{0x004F,0x006F}, /* 006E */
+ {0x0050,0x0070},{0x0051,0x0071}, /* 0070 */
+ {0x0052,0x0072},{0x0053,0x0073}, /* 0072 */
+ {0x0054,0x0074},{0x0055,0x0075}, /* 0074 */
+ {0x0056,0x0076},{0x0057,0x0077}, /* 0076 */
+ {0x0058,0x0078},{0x0059,0x0079}, /* 0078 */
+ {0x005A,0x007A},{0x007B,0x007B}, /* 007A */
+ {0x007C,0x007C},{0x007D,0x007D}, /* 007C */
+ {0x007E,0x007E},{0x007F,0x007F}, /* 007E */
+ {0x0080,0x0080},{0x0081,0x0081}, /* 0080 */
+ {0x0082,0x0082},{0x0083,0x0083}, /* 0082 */
+ {0x0084,0x0084},{0x0085,0x0085}, /* 0084 */
+ {0x0086,0x0086},{0x0087,0x0087}, /* 0086 */
+ {0x0088,0x0088},{0x0089,0x0089}, /* 0088 */
+ {0x008A,0x008A},{0x008B,0x008B}, /* 008A */
+ {0x008C,0x008C},{0x008D,0x008D}, /* 008C */
+ {0x008E,0x008E},{0x008F,0x008F}, /* 008E */
+ {0x0090,0x0090},{0x0091,0x0091}, /* 0090 */
+ {0x0092,0x0092},{0x0093,0x0093}, /* 0092 */
+ {0x0094,0x0094},{0x0095,0x0095}, /* 0094 */
+ {0x0096,0x0096},{0x0097,0x0097}, /* 0096 */
+ {0x0098,0x0098},{0x0099,0x0099}, /* 0098 */
+ {0x009A,0x009A},{0x009B,0x009B}, /* 009A */
+ {0x009C,0x009C},{0x009D,0x009D}, /* 009C */
+ {0x009E,0x009E},{0x009F,0x009F}, /* 009E */
+ {0x00A0,0x00A0},{0x00A1,0x00A1}, /* 00A0 */
+ {0x00A2,0x00A2},{0x00A3,0x00A3}, /* 00A2 */
+ {0x00A4,0x00A4},{0x00A5,0x00A5}, /* 00A4 */
+ {0x00A6,0x00A6},{0x00A7,0x00A7}, /* 00A6 */
+ {0x00A8,0x00A8},{0x00A9,0x00A9}, /* 00A8 */
+ {0x00AA,0x00AA},{0x00AB,0x00AB}, /* 00AA */
+ {0x00AC,0x00AC},{0x00AD,0x00AD}, /* 00AC */
+ {0x00AE,0x00AE},{0x00AF,0x00AF}, /* 00AE */
+ {0x00B0,0x00B0},{0x00B1,0x00B1}, /* 00B0 */
+ {0x00B2,0x00B2},{0x00B3,0x00B3}, /* 00B2 */
+ {0x00B4,0x00B4},{0x039C,0x00B5}, /* 00B4 */
+ {0x00B6,0x00B6},{0x00B7,0x00B7}, /* 00B6 */
+ {0x00B8,0x00B8},{0x00B9,0x00B9}, /* 00B8 */
+ {0x00BA,0x00BA},{0x00BB,0x00BB}, /* 00BA */
+ {0x00BC,0x00BC},{0x00BD,0x00BD}, /* 00BC */
+ {0x00BE,0x00BE},{0x00BF,0x00BF}, /* 00BE */
+ {0x00C0,0x00E0},{0x00C1,0x00E1}, /* 00C0 */
+ {0x00C2,0x00E2},{0x00C3,0x00E3}, /* 00C2 */
+ {0x00C4,0x00E4},{0x00C5,0x00E5}, /* 00C4 */
+ {0x00C6,0x00E6},{0x00C7,0x00E7}, /* 00C6 */
+ {0x00C8,0x00E8},{0x00C9,0x00E9}, /* 00C8 */
+ {0x00CA,0x00EA},{0x00CB,0x00EB}, /* 00CA */
+ {0x00CC,0x00EC},{0x00CD,0x00ED}, /* 00CC */
+ {0x00CE,0x00EE},{0x00CF,0x00EF}, /* 00CE */
+ {0x00D0,0x00F0},{0x00D1,0x00F1}, /* 00D0 */
+ {0x00D2,0x00F2},{0x00D3,0x00F3}, /* 00D2 */
+ {0x00D4,0x00F4},{0x00D5,0x00F5}, /* 00D4 */
+ {0x00D6,0x00F6},{0x00D7,0x00D7}, /* 00D6 */
+ {0x00D8,0x00F8},{0x00D9,0x00F9}, /* 00D8 */
+ {0x00DA,0x00FA},{0x00DB,0x00FB}, /* 00DA */
+ {0x00DC,0x00FC},{0x00DD,0x00FD}, /* 00DC */
+ {0x00DE,0x00FE},{0x00DF,0x00DF}, /* 00DE */
+ {0x00C0,0x00E0},{0x00C1,0x00E1}, /* 00E0 */
+ {0x00C2,0x00E2},{0x00C3,0x00E3}, /* 00E2 */
+ {0x00C4,0x00E4},{0x00C5,0x00E5}, /* 00E4 */
+ {0x00C6,0x00E6},{0x00C7,0x00E7}, /* 00E6 */
+ {0x00C8,0x00E8},{0x00C9,0x00E9}, /* 00E8 */
+ {0x00CA,0x00EA},{0x00CB,0x00EB}, /* 00EA */
+ {0x00CC,0x00EC},{0x00CD,0x00ED}, /* 00EC */
+ {0x00CE,0x00EE},{0x00CF,0x00EF}, /* 00EE */
+ {0x00D0,0x00F0},{0x00D1,0x00F1}, /* 00F0 */
+ {0x00D2,0x00F2},{0x00D3,0x00F3}, /* 00F2 */
+ {0x00D4,0x00F4},{0x00D5,0x00F5}, /* 00F4 */
+ {0x00D6,0x00F6},{0x00F7,0x00F7}, /* 00F6 */
+ {0x00D8,0x00F8},{0x00D9,0x00F9}, /* 00F8 */
+ {0x00DA,0x00FA},{0x00DB,0x00FB}, /* 00FA */
+ {0x00DC,0x00FC},{0x00DD,0x00FD}, /* 00FC */
+ {0x00DE,0x00FE},{0x0178,0x00FF} /* 00FE */
+};
+
+const MY_CASEFOLD_CHARACTER * my_u1400tr_casefold_index[4352]={
+ u1400tr_casefold_page00, u1400_casefold_page01, u1400_casefold_page02, u1400_casefold_page03, u1400_casefold_page04, u1400_casefold_page05, u1400_casefold_page06, u1400_casefold_page07,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ u1400_casefold_page10, NULL, NULL, u1400_casefold_page13, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, u1400_casefold_page1C, u1400_casefold_page1D, u1400_casefold_page1E, u1400_casefold_page1F,
+ NULL, u1400_casefold_page21, NULL, NULL, u1400_casefold_page24, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, u1400_casefold_page2C, u1400_casefold_page2D, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, u1400_casefold_pageA6, u1400_casefold_pageA7,
+ NULL, NULL, NULL, u1400_casefold_pageAB, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, u1400_casefold_pageFF,
+ NULL, NULL, NULL, NULL, u1400_casefold_page104, u1400_casefold_page105, NULL, NULL,
+ NULL, NULL, NULL, NULL, u1400_casefold_page10C, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ u1400_casefold_page118, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, u1400_casefold_page16E, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, u1400_casefold_page1E9, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
+};
diff --git a/strings/ctype-unicode1400-casefold.h b/strings/ctype-unicode1400-casefold.h
new file mode 100644
index 00000000000..dae180d0157
--- /dev/null
+++ b/strings/ctype-unicode1400-casefold.h
@@ -0,0 +1,4240 @@
+/* Copyright (c) 2000, 2013, Oracle and/or its affiliates.
+ Copyright (c) 2009, 2023, MariaDB Corporation.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; version 2 of the License.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA
+*/
+
+/*
+ Generated by:
+ ./unidata-dump \
+ --mode=casefold \
+ --page-name=u1400_casefold_page \
+ --index-name=my_u1400_casefold_index \
+ UnicodeData-14.0.0.txt
+
+*/
+const MY_CASEFOLD_CHARACTER u1400_casefold_page00[256]={
+ {0x0000,0x0000},{0x0001,0x0001}, /* 0000 */
+ {0x0002,0x0002},{0x0003,0x0003}, /* 0002 */
+ {0x0004,0x0004},{0x0005,0x0005}, /* 0004 */
+ {0x0006,0x0006},{0x0007,0x0007}, /* 0006 */
+ {0x0008,0x0008},{0x0009,0x0009}, /* 0008 */
+ {0x000A,0x000A},{0x000B,0x000B}, /* 000A */
+ {0x000C,0x000C},{0x000D,0x000D}, /* 000C */
+ {0x000E,0x000E},{0x000F,0x000F}, /* 000E */
+ {0x0010,0x0010},{0x0011,0x0011}, /* 0010 */
+ {0x0012,0x0012},{0x0013,0x0013}, /* 0012 */
+ {0x0014,0x0014},{0x0015,0x0015}, /* 0014 */
+ {0x0016,0x0016},{0x0017,0x0017}, /* 0016 */
+ {0x0018,0x0018},{0x0019,0x0019}, /* 0018 */
+ {0x001A,0x001A},{0x001B,0x001B}, /* 001A */
+ {0x001C,0x001C},{0x001D,0x001D}, /* 001C */
+ {0x001E,0x001E},{0x001F,0x001F}, /* 001E */
+ {0x0020,0x0020},{0x0021,0x0021}, /* 0020 */
+ {0x0022,0x0022},{0x0023,0x0023}, /* 0022 */
+ {0x0024,0x0024},{0x0025,0x0025}, /* 0024 */
+ {0x0026,0x0026},{0x0027,0x0027}, /* 0026 */
+ {0x0028,0x0028},{0x0029,0x0029}, /* 0028 */
+ {0x002A,0x002A},{0x002B,0x002B}, /* 002A */
+ {0x002C,0x002C},{0x002D,0x002D}, /* 002C */
+ {0x002E,0x002E},{0x002F,0x002F}, /* 002E */
+ {0x0030,0x0030},{0x0031,0x0031}, /* 0030 */
+ {0x0032,0x0032},{0x0033,0x0033}, /* 0032 */
+ {0x0034,0x0034},{0x0035,0x0035}, /* 0034 */
+ {0x0036,0x0036},{0x0037,0x0037}, /* 0036 */
+ {0x0038,0x0038},{0x0039,0x0039}, /* 0038 */
+ {0x003A,0x003A},{0x003B,0x003B}, /* 003A */
+ {0x003C,0x003C},{0x003D,0x003D}, /* 003C */
+ {0x003E,0x003E},{0x003F,0x003F}, /* 003E */
+ {0x0040,0x0040},{0x0041,0x0061}, /* 0040 */
+ {0x0042,0x0062},{0x0043,0x0063}, /* 0042 */
+ {0x0044,0x0064},{0x0045,0x0065}, /* 0044 */
+ {0x0046,0x0066},{0x0047,0x0067}, /* 0046 */
+ {0x0048,0x0068},{0x0049,0x0069}, /* 0048 */
+ {0x004A,0x006A},{0x004B,0x006B}, /* 004A */
+ {0x004C,0x006C},{0x004D,0x006D}, /* 004C */
+ {0x004E,0x006E},{0x004F,0x006F}, /* 004E */
+ {0x0050,0x0070},{0x0051,0x0071}, /* 0050 */
+ {0x0052,0x0072},{0x0053,0x0073}, /* 0052 */
+ {0x0054,0x0074},{0x0055,0x0075}, /* 0054 */
+ {0x0056,0x0076},{0x0057,0x0077}, /* 0056 */
+ {0x0058,0x0078},{0x0059,0x0079}, /* 0058 */
+ {0x005A,0x007A},{0x005B,0x005B}, /* 005A */
+ {0x005C,0x005C},{0x005D,0x005D}, /* 005C */
+ {0x005E,0x005E},{0x005F,0x005F}, /* 005E */
+ {0x0060,0x0060},{0x0041,0x0061}, /* 0060 */
+ {0x0042,0x0062},{0x0043,0x0063}, /* 0062 */
+ {0x0044,0x0064},{0x0045,0x0065}, /* 0064 */
+ {0x0046,0x0066},{0x0047,0x0067}, /* 0066 */
+ {0x0048,0x0068},{0x0049,0x0069}, /* 0068 */
+ {0x004A,0x006A},{0x004B,0x006B}, /* 006A */
+ {0x004C,0x006C},{0x004D,0x006D}, /* 006C */
+ {0x004E,0x006E},{0x004F,0x006F}, /* 006E */
+ {0x0050,0x0070},{0x0051,0x0071}, /* 0070 */
+ {0x0052,0x0072},{0x0053,0x0073}, /* 0072 */
+ {0x0054,0x0074},{0x0055,0x0075}, /* 0074 */
+ {0x0056,0x0076},{0x0057,0x0077}, /* 0076 */
+ {0x0058,0x0078},{0x0059,0x0079}, /* 0078 */
+ {0x005A,0x007A},{0x007B,0x007B}, /* 007A */
+ {0x007C,0x007C},{0x007D,0x007D}, /* 007C */
+ {0x007E,0x007E},{0x007F,0x007F}, /* 007E */
+ {0x0080,0x0080},{0x0081,0x0081}, /* 0080 */
+ {0x0082,0x0082},{0x0083,0x0083}, /* 0082 */
+ {0x0084,0x0084},{0x0085,0x0085}, /* 0084 */
+ {0x0086,0x0086},{0x0087,0x0087}, /* 0086 */
+ {0x0088,0x0088},{0x0089,0x0089}, /* 0088 */
+ {0x008A,0x008A},{0x008B,0x008B}, /* 008A */
+ {0x008C,0x008C},{0x008D,0x008D}, /* 008C */
+ {0x008E,0x008E},{0x008F,0x008F}, /* 008E */
+ {0x0090,0x0090},{0x0091,0x0091}, /* 0090 */
+ {0x0092,0x0092},{0x0093,0x0093}, /* 0092 */
+ {0x0094,0x0094},{0x0095,0x0095}, /* 0094 */
+ {0x0096,0x0096},{0x0097,0x0097}, /* 0096 */
+ {0x0098,0x0098},{0x0099,0x0099}, /* 0098 */
+ {0x009A,0x009A},{0x009B,0x009B}, /* 009A */
+ {0x009C,0x009C},{0x009D,0x009D}, /* 009C */
+ {0x009E,0x009E},{0x009F,0x009F}, /* 009E */
+ {0x00A0,0x00A0},{0x00A1,0x00A1}, /* 00A0 */
+ {0x00A2,0x00A2},{0x00A3,0x00A3}, /* 00A2 */
+ {0x00A4,0x00A4},{0x00A5,0x00A5}, /* 00A4 */
+ {0x00A6,0x00A6},{0x00A7,0x00A7}, /* 00A6 */
+ {0x00A8,0x00A8},{0x00A9,0x00A9}, /* 00A8 */
+ {0x00AA,0x00AA},{0x00AB,0x00AB}, /* 00AA */
+ {0x00AC,0x00AC},{0x00AD,0x00AD}, /* 00AC */
+ {0x00AE,0x00AE},{0x00AF,0x00AF}, /* 00AE */
+ {0x00B0,0x00B0},{0x00B1,0x00B1}, /* 00B0 */
+ {0x00B2,0x00B2},{0x00B3,0x00B3}, /* 00B2 */
+ {0x00B4,0x00B4},{0x039C,0x00B5}, /* 00B4 */
+ {0x00B6,0x00B6},{0x00B7,0x00B7}, /* 00B6 */
+ {0x00B8,0x00B8},{0x00B9,0x00B9}, /* 00B8 */
+ {0x00BA,0x00BA},{0x00BB,0x00BB}, /* 00BA */
+ {0x00BC,0x00BC},{0x00BD,0x00BD}, /* 00BC */
+ {0x00BE,0x00BE},{0x00BF,0x00BF}, /* 00BE */
+ {0x00C0,0x00E0},{0x00C1,0x00E1}, /* 00C0 */
+ {0x00C2,0x00E2},{0x00C3,0x00E3}, /* 00C2 */
+ {0x00C4,0x00E4},{0x00C5,0x00E5}, /* 00C4 */
+ {0x00C6,0x00E6},{0x00C7,0x00E7}, /* 00C6 */
+ {0x00C8,0x00E8},{0x00C9,0x00E9}, /* 00C8 */
+ {0x00CA,0x00EA},{0x00CB,0x00EB}, /* 00CA */
+ {0x00CC,0x00EC},{0x00CD,0x00ED}, /* 00CC */
+ {0x00CE,0x00EE},{0x00CF,0x00EF}, /* 00CE */
+ {0x00D0,0x00F0},{0x00D1,0x00F1}, /* 00D0 */
+ {0x00D2,0x00F2},{0x00D3,0x00F3}, /* 00D2 */
+ {0x00D4,0x00F4},{0x00D5,0x00F5}, /* 00D4 */
+ {0x00D6,0x00F6},{0x00D7,0x00D7}, /* 00D6 */
+ {0x00D8,0x00F8},{0x00D9,0x00F9}, /* 00D8 */
+ {0x00DA,0x00FA},{0x00DB,0x00FB}, /* 00DA */
+ {0x00DC,0x00FC},{0x00DD,0x00FD}, /* 00DC */
+ {0x00DE,0x00FE},{0x00DF,0x00DF}, /* 00DE */
+ {0x00C0,0x00E0},{0x00C1,0x00E1}, /* 00E0 */
+ {0x00C2,0x00E2},{0x00C3,0x00E3}, /* 00E2 */
+ {0x00C4,0x00E4},{0x00C5,0x00E5}, /* 00E4 */
+ {0x00C6,0x00E6},{0x00C7,0x00E7}, /* 00E6 */
+ {0x00C8,0x00E8},{0x00C9,0x00E9}, /* 00E8 */
+ {0x00CA,0x00EA},{0x00CB,0x00EB}, /* 00EA */
+ {0x00CC,0x00EC},{0x00CD,0x00ED}, /* 00EC */
+ {0x00CE,0x00EE},{0x00CF,0x00EF}, /* 00EE */
+ {0x00D0,0x00F0},{0x00D1,0x00F1}, /* 00F0 */
+ {0x00D2,0x00F2},{0x00D3,0x00F3}, /* 00F2 */
+ {0x00D4,0x00F4},{0x00D5,0x00F5}, /* 00F4 */
+ {0x00D6,0x00F6},{0x00F7,0x00F7}, /* 00F6 */
+ {0x00D8,0x00F8},{0x00D9,0x00F9}, /* 00F8 */
+ {0x00DA,0x00FA},{0x00DB,0x00FB}, /* 00FA */
+ {0x00DC,0x00FC},{0x00DD,0x00FD}, /* 00FC */
+ {0x00DE,0x00FE},{0x0178,0x00FF} /* 00FE */
+};
+
+static const MY_CASEFOLD_CHARACTER u1400_casefold_page01[256]={
+ {0x0100,0x0101},{0x0100,0x0101}, /* 0100 */
+ {0x0102,0x0103},{0x0102,0x0103}, /* 0102 */
+ {0x0104,0x0105},{0x0104,0x0105}, /* 0104 */
+ {0x0106,0x0107},{0x0106,0x0107}, /* 0106 */
+ {0x0108,0x0109},{0x0108,0x0109}, /* 0108 */
+ {0x010A,0x010B},{0x010A,0x010B}, /* 010A */
+ {0x010C,0x010D},{0x010C,0x010D}, /* 010C */
+ {0x010E,0x010F},{0x010E,0x010F}, /* 010E */
+ {0x0110,0x0111},{0x0110,0x0111}, /* 0110 */
+ {0x0112,0x0113},{0x0112,0x0113}, /* 0112 */
+ {0x0114,0x0115},{0x0114,0x0115}, /* 0114 */
+ {0x0116,0x0117},{0x0116,0x0117}, /* 0116 */
+ {0x0118,0x0119},{0x0118,0x0119}, /* 0118 */
+ {0x011A,0x011B},{0x011A,0x011B}, /* 011A */
+ {0x011C,0x011D},{0x011C,0x011D}, /* 011C */
+ {0x011E,0x011F},{0x011E,0x011F}, /* 011E */
+ {0x0120,0x0121},{0x0120,0x0121}, /* 0120 */
+ {0x0122,0x0123},{0x0122,0x0123}, /* 0122 */
+ {0x0124,0x0125},{0x0124,0x0125}, /* 0124 */
+ {0x0126,0x0127},{0x0126,0x0127}, /* 0126 */
+ {0x0128,0x0129},{0x0128,0x0129}, /* 0128 */
+ {0x012A,0x012B},{0x012A,0x012B}, /* 012A */
+ {0x012C,0x012D},{0x012C,0x012D}, /* 012C */
+ {0x012E,0x012F},{0x012E,0x012F}, /* 012E */
+ {0x0130,0x0069},{0x0049,0x0131}, /* 0130 */
+ {0x0132,0x0133},{0x0132,0x0133}, /* 0132 */
+ {0x0134,0x0135},{0x0134,0x0135}, /* 0134 */
+ {0x0136,0x0137},{0x0136,0x0137}, /* 0136 */
+ {0x0138,0x0138},{0x0139,0x013A}, /* 0138 */
+ {0x0139,0x013A},{0x013B,0x013C}, /* 013A */
+ {0x013B,0x013C},{0x013D,0x013E}, /* 013C */
+ {0x013D,0x013E},{0x013F,0x0140}, /* 013E */
+ {0x013F,0x0140},{0x0141,0x0142}, /* 0140 */
+ {0x0141,0x0142},{0x0143,0x0144}, /* 0142 */
+ {0x0143,0x0144},{0x0145,0x0146}, /* 0144 */
+ {0x0145,0x0146},{0x0147,0x0148}, /* 0146 */
+ {0x0147,0x0148},{0x0149,0x0149}, /* 0148 */
+ {0x014A,0x014B},{0x014A,0x014B}, /* 014A */
+ {0x014C,0x014D},{0x014C,0x014D}, /* 014C */
+ {0x014E,0x014F},{0x014E,0x014F}, /* 014E */
+ {0x0150,0x0151},{0x0150,0x0151}, /* 0150 */
+ {0x0152,0x0153},{0x0152,0x0153}, /* 0152 */
+ {0x0154,0x0155},{0x0154,0x0155}, /* 0154 */
+ {0x0156,0x0157},{0x0156,0x0157}, /* 0156 */
+ {0x0158,0x0159},{0x0158,0x0159}, /* 0158 */
+ {0x015A,0x015B},{0x015A,0x015B}, /* 015A */
+ {0x015C,0x015D},{0x015C,0x015D}, /* 015C */
+ {0x015E,0x015F},{0x015E,0x015F}, /* 015E */
+ {0x0160,0x0161},{0x0160,0x0161}, /* 0160 */
+ {0x0162,0x0163},{0x0162,0x0163}, /* 0162 */
+ {0x0164,0x0165},{0x0164,0x0165}, /* 0164 */
+ {0x0166,0x0167},{0x0166,0x0167}, /* 0166 */
+ {0x0168,0x0169},{0x0168,0x0169}, /* 0168 */
+ {0x016A,0x016B},{0x016A,0x016B}, /* 016A */
+ {0x016C,0x016D},{0x016C,0x016D}, /* 016C */
+ {0x016E,0x016F},{0x016E,0x016F}, /* 016E */
+ {0x0170,0x0171},{0x0170,0x0171}, /* 0170 */
+ {0x0172,0x0173},{0x0172,0x0173}, /* 0172 */
+ {0x0174,0x0175},{0x0174,0x0175}, /* 0174 */
+ {0x0176,0x0177},{0x0176,0x0177}, /* 0176 */
+ {0x0178,0x00FF},{0x0179,0x017A}, /* 0178 */
+ {0x0179,0x017A},{0x017B,0x017C}, /* 017A */
+ {0x017B,0x017C},{0x017D,0x017E}, /* 017C */
+ {0x017D,0x017E},{0x0053,0x017F}, /* 017E */
+ {0x0243,0x0180},{0x0181,0x0253}, /* 0180 */
+ {0x0182,0x0183},{0x0182,0x0183}, /* 0182 */
+ {0x0184,0x0185},{0x0184,0x0185}, /* 0184 */
+ {0x0186,0x0254},{0x0187,0x0188}, /* 0186 */
+ {0x0187,0x0188},{0x0189,0x0256}, /* 0188 */
+ {0x018A,0x0257},{0x018B,0x018C}, /* 018A */
+ {0x018B,0x018C},{0x018D,0x018D}, /* 018C */
+ {0x018E,0x01DD},{0x018F,0x0259}, /* 018E */
+ {0x0190,0x025B},{0x0191,0x0192}, /* 0190 */
+ {0x0191,0x0192},{0x0193,0x0260}, /* 0192 */
+ {0x0194,0x0263},{0x01F6,0x0195}, /* 0194 */
+ {0x0196,0x0269},{0x0197,0x0268}, /* 0196 */
+ {0x0198,0x0199},{0x0198,0x0199}, /* 0198 */
+ {0x023D,0x019A},{0x019B,0x019B}, /* 019A */
+ {0x019C,0x026F},{0x019D,0x0272}, /* 019C */
+ {0x0220,0x019E},{0x019F,0x0275}, /* 019E */
+ {0x01A0,0x01A1},{0x01A0,0x01A1}, /* 01A0 */
+ {0x01A2,0x01A3},{0x01A2,0x01A3}, /* 01A2 */
+ {0x01A4,0x01A5},{0x01A4,0x01A5}, /* 01A4 */
+ {0x01A6,0x0280},{0x01A7,0x01A8}, /* 01A6 */
+ {0x01A7,0x01A8},{0x01A9,0x0283}, /* 01A8 */
+ {0x01AA,0x01AA},{0x01AB,0x01AB}, /* 01AA */
+ {0x01AC,0x01AD},{0x01AC,0x01AD}, /* 01AC */
+ {0x01AE,0x0288},{0x01AF,0x01B0}, /* 01AE */
+ {0x01AF,0x01B0},{0x01B1,0x028A}, /* 01B0 */
+ {0x01B2,0x028B},{0x01B3,0x01B4}, /* 01B2 */
+ {0x01B3,0x01B4},{0x01B5,0x01B6}, /* 01B4 */
+ {0x01B5,0x01B6},{0x01B7,0x0292}, /* 01B6 */
+ {0x01B8,0x01B9},{0x01B8,0x01B9}, /* 01B8 */
+ {0x01BA,0x01BA},{0x01BB,0x01BB}, /* 01BA */
+ {0x01BC,0x01BD},{0x01BC,0x01BD}, /* 01BC */
+ {0x01BE,0x01BE},{0x01F7,0x01BF}, /* 01BE */
+ {0x01C0,0x01C0},{0x01C1,0x01C1}, /* 01C0 */
+ {0x01C2,0x01C2},{0x01C3,0x01C3}, /* 01C2 */
+ {0x01C4,0x01C6},{0x01C4,0x01C6}, /* 01C4 */
+ {0x01C4,0x01C6},{0x01C7,0x01C9}, /* 01C6 */
+ {0x01C7,0x01C9},{0x01C7,0x01C9}, /* 01C8 */
+ {0x01CA,0x01CC},{0x01CA,0x01CC}, /* 01CA */
+ {0x01CA,0x01CC},{0x01CD,0x01CE}, /* 01CC */
+ {0x01CD,0x01CE},{0x01CF,0x01D0}, /* 01CE */
+ {0x01CF,0x01D0},{0x01D1,0x01D2}, /* 01D0 */
+ {0x01D1,0x01D2},{0x01D3,0x01D4}, /* 01D2 */
+ {0x01D3,0x01D4},{0x01D5,0x01D6}, /* 01D4 */
+ {0x01D5,0x01D6},{0x01D7,0x01D8}, /* 01D6 */
+ {0x01D7,0x01D8},{0x01D9,0x01DA}, /* 01D8 */
+ {0x01D9,0x01DA},{0x01DB,0x01DC}, /* 01DA */
+ {0x01DB,0x01DC},{0x018E,0x01DD}, /* 01DC */
+ {0x01DE,0x01DF},{0x01DE,0x01DF}, /* 01DE */
+ {0x01E0,0x01E1},{0x01E0,0x01E1}, /* 01E0 */
+ {0x01E2,0x01E3},{0x01E2,0x01E3}, /* 01E2 */
+ {0x01E4,0x01E5},{0x01E4,0x01E5}, /* 01E4 */
+ {0x01E6,0x01E7},{0x01E6,0x01E7}, /* 01E6 */
+ {0x01E8,0x01E9},{0x01E8,0x01E9}, /* 01E8 */
+ {0x01EA,0x01EB},{0x01EA,0x01EB}, /* 01EA */
+ {0x01EC,0x01ED},{0x01EC,0x01ED}, /* 01EC */
+ {0x01EE,0x01EF},{0x01EE,0x01EF}, /* 01EE */
+ {0x01F0,0x01F0},{0x01F1,0x01F3}, /* 01F0 */
+ {0x01F1,0x01F3},{0x01F1,0x01F3}, /* 01F2 */
+ {0x01F4,0x01F5},{0x01F4,0x01F5}, /* 01F4 */
+ {0x01F6,0x0195},{0x01F7,0x01BF}, /* 01F6 */
+ {0x01F8,0x01F9},{0x01F8,0x01F9}, /* 01F8 */
+ {0x01FA,0x01FB},{0x01FA,0x01FB}, /* 01FA */
+ {0x01FC,0x01FD},{0x01FC,0x01FD}, /* 01FC */
+ {0x01FE,0x01FF},{0x01FE,0x01FF} /* 01FE */
+};
+
+static const MY_CASEFOLD_CHARACTER u1400_casefold_page02[256]={
+ {0x0200,0x0201},{0x0200,0x0201}, /* 0200 */
+ {0x0202,0x0203},{0x0202,0x0203}, /* 0202 */
+ {0x0204,0x0205},{0x0204,0x0205}, /* 0204 */
+ {0x0206,0x0207},{0x0206,0x0207}, /* 0206 */
+ {0x0208,0x0209},{0x0208,0x0209}, /* 0208 */
+ {0x020A,0x020B},{0x020A,0x020B}, /* 020A */
+ {0x020C,0x020D},{0x020C,0x020D}, /* 020C */
+ {0x020E,0x020F},{0x020E,0x020F}, /* 020E */
+ {0x0210,0x0211},{0x0210,0x0211}, /* 0210 */
+ {0x0212,0x0213},{0x0212,0x0213}, /* 0212 */
+ {0x0214,0x0215},{0x0214,0x0215}, /* 0214 */
+ {0x0216,0x0217},{0x0216,0x0217}, /* 0216 */
+ {0x0218,0x0219},{0x0218,0x0219}, /* 0218 */
+ {0x021A,0x021B},{0x021A,0x021B}, /* 021A */
+ {0x021C,0x021D},{0x021C,0x021D}, /* 021C */
+ {0x021E,0x021F},{0x021E,0x021F}, /* 021E */
+ {0x0220,0x019E},{0x0221,0x0221}, /* 0220 */
+ {0x0222,0x0223},{0x0222,0x0223}, /* 0222 */
+ {0x0224,0x0225},{0x0224,0x0225}, /* 0224 */
+ {0x0226,0x0227},{0x0226,0x0227}, /* 0226 */
+ {0x0228,0x0229},{0x0228,0x0229}, /* 0228 */
+ {0x022A,0x022B},{0x022A,0x022B}, /* 022A */
+ {0x022C,0x022D},{0x022C,0x022D}, /* 022C */
+ {0x022E,0x022F},{0x022E,0x022F}, /* 022E */
+ {0x0230,0x0231},{0x0230,0x0231}, /* 0230 */
+ {0x0232,0x0233},{0x0232,0x0233}, /* 0232 */
+ {0x0234,0x0234},{0x0235,0x0235}, /* 0234 */
+ {0x0236,0x0236},{0x0237,0x0237}, /* 0236 */
+ {0x0238,0x0238},{0x0239,0x0239}, /* 0238 */
+ {0x023A,0x2C65},{0x023B,0x023C}, /* 023A */
+ {0x023B,0x023C},{0x023D,0x019A}, /* 023C */
+ {0x023E,0x2C66},{0x2C7E,0x023F}, /* 023E */
+ {0x2C7F,0x0240},{0x0241,0x0242}, /* 0240 */
+ {0x0241,0x0242},{0x0243,0x0180}, /* 0242 */
+ {0x0244,0x0289},{0x0245,0x028C}, /* 0244 */
+ {0x0246,0x0247},{0x0246,0x0247}, /* 0246 */
+ {0x0248,0x0249},{0x0248,0x0249}, /* 0248 */
+ {0x024A,0x024B},{0x024A,0x024B}, /* 024A */
+ {0x024C,0x024D},{0x024C,0x024D}, /* 024C */
+ {0x024E,0x024F},{0x024E,0x024F}, /* 024E */
+ {0x2C6F,0x0250},{0x2C6D,0x0251}, /* 0250 */
+ {0x2C70,0x0252},{0x0181,0x0253}, /* 0252 */
+ {0x0186,0x0254},{0x0255,0x0255}, /* 0254 */
+ {0x0189,0x0256},{0x018A,0x0257}, /* 0256 */
+ {0x0258,0x0258},{0x018F,0x0259}, /* 0258 */
+ {0x025A,0x025A},{0x0190,0x025B}, /* 025A */
+ {0xA7AB,0x025C},{0x025D,0x025D}, /* 025C */
+ {0x025E,0x025E},{0x025F,0x025F}, /* 025E */
+ {0x0193,0x0260},{0xA7AC,0x0261}, /* 0260 */
+ {0x0262,0x0262},{0x0194,0x0263}, /* 0262 */
+ {0x0264,0x0264},{0xA78D,0x0265}, /* 0264 */
+ {0xA7AA,0x0266},{0x0267,0x0267}, /* 0266 */
+ {0x0197,0x0268},{0x0196,0x0269}, /* 0268 */
+ {0xA7AE,0x026A},{0x2C62,0x026B}, /* 026A */
+ {0xA7AD,0x026C},{0x026D,0x026D}, /* 026C */
+ {0x026E,0x026E},{0x019C,0x026F}, /* 026E */
+ {0x0270,0x0270},{0x2C6E,0x0271}, /* 0270 */
+ {0x019D,0x0272},{0x0273,0x0273}, /* 0272 */
+ {0x0274,0x0274},{0x019F,0x0275}, /* 0274 */
+ {0x0276,0x0276},{0x0277,0x0277}, /* 0276 */
+ {0x0278,0x0278},{0x0279,0x0279}, /* 0278 */
+ {0x027A,0x027A},{0x027B,0x027B}, /* 027A */
+ {0x027C,0x027C},{0x2C64,0x027D}, /* 027C */
+ {0x027E,0x027E},{0x027F,0x027F}, /* 027E */
+ {0x01A6,0x0280},{0x0281,0x0281}, /* 0280 */
+ {0xA7C5,0x0282},{0x01A9,0x0283}, /* 0282 */
+ {0x0284,0x0284},{0x0285,0x0285}, /* 0284 */
+ {0x0286,0x0286},{0xA7B1,0x0287}, /* 0286 */
+ {0x01AE,0x0288},{0x0244,0x0289}, /* 0288 */
+ {0x01B1,0x028A},{0x01B2,0x028B}, /* 028A */
+ {0x0245,0x028C},{0x028D,0x028D}, /* 028C */
+ {0x028E,0x028E},{0x028F,0x028F}, /* 028E */
+ {0x0290,0x0290},{0x0291,0x0291}, /* 0290 */
+ {0x01B7,0x0292},{0x0293,0x0293}, /* 0292 */
+ {0x0294,0x0294},{0x0295,0x0295}, /* 0294 */
+ {0x0296,0x0296},{0x0297,0x0297}, /* 0296 */
+ {0x0298,0x0298},{0x0299,0x0299}, /* 0298 */
+ {0x029A,0x029A},{0x029B,0x029B}, /* 029A */
+ {0x029C,0x029C},{0xA7B2,0x029D}, /* 029C */
+ {0xA7B0,0x029E},{0x029F,0x029F}, /* 029E */
+ {0x02A0,0x02A0},{0x02A1,0x02A1}, /* 02A0 */
+ {0x02A2,0x02A2},{0x02A3,0x02A3}, /* 02A2 */
+ {0x02A4,0x02A4},{0x02A5,0x02A5}, /* 02A4 */
+ {0x02A6,0x02A6},{0x02A7,0x02A7}, /* 02A6 */
+ {0x02A8,0x02A8},{0x02A9,0x02A9}, /* 02A8 */
+ {0x02AA,0x02AA},{0x02AB,0x02AB}, /* 02AA */
+ {0x02AC,0x02AC},{0x02AD,0x02AD}, /* 02AC */
+ {0x02AE,0x02AE},{0x02AF,0x02AF}, /* 02AE */
+ {0x02B0,0x02B0},{0x02B1,0x02B1}, /* 02B0 */
+ {0x02B2,0x02B2},{0x02B3,0x02B3}, /* 02B2 */
+ {0x02B4,0x02B4},{0x02B5,0x02B5}, /* 02B4 */
+ {0x02B6,0x02B6},{0x02B7,0x02B7}, /* 02B6 */
+ {0x02B8,0x02B8},{0x02B9,0x02B9}, /* 02B8 */
+ {0x02BA,0x02BA},{0x02BB,0x02BB}, /* 02BA */
+ {0x02BC,0x02BC},{0x02BD,0x02BD}, /* 02BC */
+ {0x02BE,0x02BE},{0x02BF,0x02BF}, /* 02BE */
+ {0x02C0,0x02C0},{0x02C1,0x02C1}, /* 02C0 */
+ {0x02C2,0x02C2},{0x02C3,0x02C3}, /* 02C2 */
+ {0x02C4,0x02C4},{0x02C5,0x02C5}, /* 02C4 */
+ {0x02C6,0x02C6},{0x02C7,0x02C7}, /* 02C6 */
+ {0x02C8,0x02C8},{0x02C9,0x02C9}, /* 02C8 */
+ {0x02CA,0x02CA},{0x02CB,0x02CB}, /* 02CA */
+ {0x02CC,0x02CC},{0x02CD,0x02CD}, /* 02CC */
+ {0x02CE,0x02CE},{0x02CF,0x02CF}, /* 02CE */
+ {0x02D0,0x02D0},{0x02D1,0x02D1}, /* 02D0 */
+ {0x02D2,0x02D2},{0x02D3,0x02D3}, /* 02D2 */
+ {0x02D4,0x02D4},{0x02D5,0x02D5}, /* 02D4 */
+ {0x02D6,0x02D6},{0x02D7,0x02D7}, /* 02D6 */
+ {0x02D8,0x02D8},{0x02D9,0x02D9}, /* 02D8 */
+ {0x02DA,0x02DA},{0x02DB,0x02DB}, /* 02DA */
+ {0x02DC,0x02DC},{0x02DD,0x02DD}, /* 02DC */
+ {0x02DE,0x02DE},{0x02DF,0x02DF}, /* 02DE */
+ {0x02E0,0x02E0},{0x02E1,0x02E1}, /* 02E0 */
+ {0x02E2,0x02E2},{0x02E3,0x02E3}, /* 02E2 */
+ {0x02E4,0x02E4},{0x02E5,0x02E5}, /* 02E4 */
+ {0x02E6,0x02E6},{0x02E7,0x02E7}, /* 02E6 */
+ {0x02E8,0x02E8},{0x02E9,0x02E9}, /* 02E8 */
+ {0x02EA,0x02EA},{0x02EB,0x02EB}, /* 02EA */
+ {0x02EC,0x02EC},{0x02ED,0x02ED}, /* 02EC */
+ {0x02EE,0x02EE},{0x02EF,0x02EF}, /* 02EE */
+ {0x02F0,0x02F0},{0x02F1,0x02F1}, /* 02F0 */
+ {0x02F2,0x02F2},{0x02F3,0x02F3}, /* 02F2 */
+ {0x02F4,0x02F4},{0x02F5,0x02F5}, /* 02F4 */
+ {0x02F6,0x02F6},{0x02F7,0x02F7}, /* 02F6 */
+ {0x02F8,0x02F8},{0x02F9,0x02F9}, /* 02F8 */
+ {0x02FA,0x02FA},{0x02FB,0x02FB}, /* 02FA */
+ {0x02FC,0x02FC},{0x02FD,0x02FD}, /* 02FC */
+ {0x02FE,0x02FE},{0x02FF,0x02FF} /* 02FE */
+};
+
+static const MY_CASEFOLD_CHARACTER u1400_casefold_page03[256]={
+ {0x0300,0x0300},{0x0301,0x0301}, /* 0300 */
+ {0x0302,0x0302},{0x0303,0x0303}, /* 0302 */
+ {0x0304,0x0304},{0x0305,0x0305}, /* 0304 */
+ {0x0306,0x0306},{0x0307,0x0307}, /* 0306 */
+ {0x0308,0x0308},{0x0309,0x0309}, /* 0308 */
+ {0x030A,0x030A},{0x030B,0x030B}, /* 030A */
+ {0x030C,0x030C},{0x030D,0x030D}, /* 030C */
+ {0x030E,0x030E},{0x030F,0x030F}, /* 030E */
+ {0x0310,0x0310},{0x0311,0x0311}, /* 0310 */
+ {0x0312,0x0312},{0x0313,0x0313}, /* 0312 */
+ {0x0314,0x0314},{0x0315,0x0315}, /* 0314 */
+ {0x0316,0x0316},{0x0317,0x0317}, /* 0316 */
+ {0x0318,0x0318},{0x0319,0x0319}, /* 0318 */
+ {0x031A,0x031A},{0x031B,0x031B}, /* 031A */
+ {0x031C,0x031C},{0x031D,0x031D}, /* 031C */
+ {0x031E,0x031E},{0x031F,0x031F}, /* 031E */
+ {0x0320,0x0320},{0x0321,0x0321}, /* 0320 */
+ {0x0322,0x0322},{0x0323,0x0323}, /* 0322 */
+ {0x0324,0x0324},{0x0325,0x0325}, /* 0324 */
+ {0x0326,0x0326},{0x0327,0x0327}, /* 0326 */
+ {0x0328,0x0328},{0x0329,0x0329}, /* 0328 */
+ {0x032A,0x032A},{0x032B,0x032B}, /* 032A */
+ {0x032C,0x032C},{0x032D,0x032D}, /* 032C */
+ {0x032E,0x032E},{0x032F,0x032F}, /* 032E */
+ {0x0330,0x0330},{0x0331,0x0331}, /* 0330 */
+ {0x0332,0x0332},{0x0333,0x0333}, /* 0332 */
+ {0x0334,0x0334},{0x0335,0x0335}, /* 0334 */
+ {0x0336,0x0336},{0x0337,0x0337}, /* 0336 */
+ {0x0338,0x0338},{0x0339,0x0339}, /* 0338 */
+ {0x033A,0x033A},{0x033B,0x033B}, /* 033A */
+ {0x033C,0x033C},{0x033D,0x033D}, /* 033C */
+ {0x033E,0x033E},{0x033F,0x033F}, /* 033E */
+ {0x0340,0x0340},{0x0341,0x0341}, /* 0340 */
+ {0x0342,0x0342},{0x0343,0x0343}, /* 0342 */
+ {0x0344,0x0344},{0x0399,0x0345}, /* 0344 */
+ {0x0346,0x0346},{0x0347,0x0347}, /* 0346 */
+ {0x0348,0x0348},{0x0349,0x0349}, /* 0348 */
+ {0x034A,0x034A},{0x034B,0x034B}, /* 034A */
+ {0x034C,0x034C},{0x034D,0x034D}, /* 034C */
+ {0x034E,0x034E},{0x034F,0x034F}, /* 034E */
+ {0x0350,0x0350},{0x0351,0x0351}, /* 0350 */
+ {0x0352,0x0352},{0x0353,0x0353}, /* 0352 */
+ {0x0354,0x0354},{0x0355,0x0355}, /* 0354 */
+ {0x0356,0x0356},{0x0357,0x0357}, /* 0356 */
+ {0x0358,0x0358},{0x0359,0x0359}, /* 0358 */
+ {0x035A,0x035A},{0x035B,0x035B}, /* 035A */
+ {0x035C,0x035C},{0x035D,0x035D}, /* 035C */
+ {0x035E,0x035E},{0x035F,0x035F}, /* 035E */
+ {0x0360,0x0360},{0x0361,0x0361}, /* 0360 */
+ {0x0362,0x0362},{0x0363,0x0363}, /* 0362 */
+ {0x0364,0x0364},{0x0365,0x0365}, /* 0364 */
+ {0x0366,0x0366},{0x0367,0x0367}, /* 0366 */
+ {0x0368,0x0368},{0x0369,0x0369}, /* 0368 */
+ {0x036A,0x036A},{0x036B,0x036B}, /* 036A */
+ {0x036C,0x036C},{0x036D,0x036D}, /* 036C */
+ {0x036E,0x036E},{0x036F,0x036F}, /* 036E */
+ {0x0370,0x0371},{0x0370,0x0371}, /* 0370 */
+ {0x0372,0x0373},{0x0372,0x0373}, /* 0372 */
+ {0x0374,0x0374},{0x0375,0x0375}, /* 0374 */
+ {0x0376,0x0377},{0x0376,0x0377}, /* 0376 */
+ {0x0378,0x0378},{0x0379,0x0379}, /* 0378 */
+ {0x037A,0x037A},{0x03FD,0x037B}, /* 037A */
+ {0x03FE,0x037C},{0x03FF,0x037D}, /* 037C */
+ {0x037E,0x037E},{0x037F,0x03F3}, /* 037E */
+ {0x0380,0x0380},{0x0381,0x0381}, /* 0380 */
+ {0x0382,0x0382},{0x0383,0x0383}, /* 0382 */
+ {0x0384,0x0384},{0x0385,0x0385}, /* 0384 */
+ {0x0386,0x03AC},{0x0387,0x0387}, /* 0386 */
+ {0x0388,0x03AD},{0x0389,0x03AE}, /* 0388 */
+ {0x038A,0x03AF},{0x038B,0x038B}, /* 038A */
+ {0x038C,0x03CC},{0x038D,0x038D}, /* 038C */
+ {0x038E,0x03CD},{0x038F,0x03CE}, /* 038E */
+ {0x0390,0x0390},{0x0391,0x03B1}, /* 0390 */
+ {0x0392,0x03B2},{0x0393,0x03B3}, /* 0392 */
+ {0x0394,0x03B4},{0x0395,0x03B5}, /* 0394 */
+ {0x0396,0x03B6},{0x0397,0x03B7}, /* 0396 */
+ {0x0398,0x03B8},{0x0399,0x03B9}, /* 0398 */
+ {0x039A,0x03BA},{0x039B,0x03BB}, /* 039A */
+ {0x039C,0x03BC},{0x039D,0x03BD}, /* 039C */
+ {0x039E,0x03BE},{0x039F,0x03BF}, /* 039E */
+ {0x03A0,0x03C0},{0x03A1,0x03C1}, /* 03A0 */
+ {0x03A2,0x03A2},{0x03A3,0x03C3}, /* 03A2 */
+ {0x03A4,0x03C4},{0x03A5,0x03C5}, /* 03A4 */
+ {0x03A6,0x03C6},{0x03A7,0x03C7}, /* 03A6 */
+ {0x03A8,0x03C8},{0x03A9,0x03C9}, /* 03A8 */
+ {0x03AA,0x03CA},{0x03AB,0x03CB}, /* 03AA */
+ {0x0386,0x03AC},{0x0388,0x03AD}, /* 03AC */
+ {0x0389,0x03AE},{0x038A,0x03AF}, /* 03AE */
+ {0x03B0,0x03B0},{0x0391,0x03B1}, /* 03B0 */
+ {0x0392,0x03B2},{0x0393,0x03B3}, /* 03B2 */
+ {0x0394,0x03B4},{0x0395,0x03B5}, /* 03B4 */
+ {0x0396,0x03B6},{0x0397,0x03B7}, /* 03B6 */
+ {0x0398,0x03B8},{0x0399,0x03B9}, /* 03B8 */
+ {0x039A,0x03BA},{0x039B,0x03BB}, /* 03BA */
+ {0x039C,0x03BC},{0x039D,0x03BD}, /* 03BC */
+ {0x039E,0x03BE},{0x039F,0x03BF}, /* 03BE */
+ {0x03A0,0x03C0},{0x03A1,0x03C1}, /* 03C0 */
+ {0x03A3,0x03C2},{0x03A3,0x03C3}, /* 03C2 */
+ {0x03A4,0x03C4},{0x03A5,0x03C5}, /* 03C4 */
+ {0x03A6,0x03C6},{0x03A7,0x03C7}, /* 03C6 */
+ {0x03A8,0x03C8},{0x03A9,0x03C9}, /* 03C8 */
+ {0x03AA,0x03CA},{0x03AB,0x03CB}, /* 03CA */
+ {0x038C,0x03CC},{0x038E,0x03CD}, /* 03CC */
+ {0x038F,0x03CE},{0x03CF,0x03D7}, /* 03CE */
+ {0x0392,0x03D0},{0x0398,0x03D1}, /* 03D0 */
+ {0x03D2,0x03D2},{0x03D3,0x03D3}, /* 03D2 */
+ {0x03D4,0x03D4},{0x03A6,0x03D5}, /* 03D4 */
+ {0x03A0,0x03D6},{0x03CF,0x03D7}, /* 03D6 */
+ {0x03D8,0x03D9},{0x03D8,0x03D9}, /* 03D8 */
+ {0x03DA,0x03DB},{0x03DA,0x03DB}, /* 03DA */
+ {0x03DC,0x03DD},{0x03DC,0x03DD}, /* 03DC */
+ {0x03DE,0x03DF},{0x03DE,0x03DF}, /* 03DE */
+ {0x03E0,0x03E1},{0x03E0,0x03E1}, /* 03E0 */
+ {0x03E2,0x03E3},{0x03E2,0x03E3}, /* 03E2 */
+ {0x03E4,0x03E5},{0x03E4,0x03E5}, /* 03E4 */
+ {0x03E6,0x03E7},{0x03E6,0x03E7}, /* 03E6 */
+ {0x03E8,0x03E9},{0x03E8,0x03E9}, /* 03E8 */
+ {0x03EA,0x03EB},{0x03EA,0x03EB}, /* 03EA */
+ {0x03EC,0x03ED},{0x03EC,0x03ED}, /* 03EC */
+ {0x03EE,0x03EF},{0x03EE,0x03EF}, /* 03EE */
+ {0x039A,0x03F0},{0x03A1,0x03F1}, /* 03F0 */
+ {0x03F9,0x03F2},{0x037F,0x03F3}, /* 03F2 */
+ {0x03F4,0x03B8},{0x0395,0x03F5}, /* 03F4 */
+ {0x03F6,0x03F6},{0x03F7,0x03F8}, /* 03F6 */
+ {0x03F7,0x03F8},{0x03F9,0x03F2}, /* 03F8 */
+ {0x03FA,0x03FB},{0x03FA,0x03FB}, /* 03FA */
+ {0x03FC,0x03FC},{0x03FD,0x037B}, /* 03FC */
+ {0x03FE,0x037C},{0x03FF,0x037D} /* 03FE */
+};
+
+static const MY_CASEFOLD_CHARACTER u1400_casefold_page04[256]={
+ {0x0400,0x0450},{0x0401,0x0451}, /* 0400 */
+ {0x0402,0x0452},{0x0403,0x0453}, /* 0402 */
+ {0x0404,0x0454},{0x0405,0x0455}, /* 0404 */
+ {0x0406,0x0456},{0x0407,0x0457}, /* 0406 */
+ {0x0408,0x0458},{0x0409,0x0459}, /* 0408 */
+ {0x040A,0x045A},{0x040B,0x045B}, /* 040A */
+ {0x040C,0x045C},{0x040D,0x045D}, /* 040C */
+ {0x040E,0x045E},{0x040F,0x045F}, /* 040E */
+ {0x0410,0x0430},{0x0411,0x0431}, /* 0410 */
+ {0x0412,0x0432},{0x0413,0x0433}, /* 0412 */
+ {0x0414,0x0434},{0x0415,0x0435}, /* 0414 */
+ {0x0416,0x0436},{0x0417,0x0437}, /* 0416 */
+ {0x0418,0x0438},{0x0419,0x0439}, /* 0418 */
+ {0x041A,0x043A},{0x041B,0x043B}, /* 041A */
+ {0x041C,0x043C},{0x041D,0x043D}, /* 041C */
+ {0x041E,0x043E},{0x041F,0x043F}, /* 041E */
+ {0x0420,0x0440},{0x0421,0x0441}, /* 0420 */
+ {0x0422,0x0442},{0x0423,0x0443}, /* 0422 */
+ {0x0424,0x0444},{0x0425,0x0445}, /* 0424 */
+ {0x0426,0x0446},{0x0427,0x0447}, /* 0426 */
+ {0x0428,0x0448},{0x0429,0x0449}, /* 0428 */
+ {0x042A,0x044A},{0x042B,0x044B}, /* 042A */
+ {0x042C,0x044C},{0x042D,0x044D}, /* 042C */
+ {0x042E,0x044E},{0x042F,0x044F}, /* 042E */
+ {0x0410,0x0430},{0x0411,0x0431}, /* 0430 */
+ {0x0412,0x0432},{0x0413,0x0433}, /* 0432 */
+ {0x0414,0x0434},{0x0415,0x0435}, /* 0434 */
+ {0x0416,0x0436},{0x0417,0x0437}, /* 0436 */
+ {0x0418,0x0438},{0x0419,0x0439}, /* 0438 */
+ {0x041A,0x043A},{0x041B,0x043B}, /* 043A */
+ {0x041C,0x043C},{0x041D,0x043D}, /* 043C */
+ {0x041E,0x043E},{0x041F,0x043F}, /* 043E */
+ {0x0420,0x0440},{0x0421,0x0441}, /* 0440 */
+ {0x0422,0x0442},{0x0423,0x0443}, /* 0442 */
+ {0x0424,0x0444},{0x0425,0x0445}, /* 0444 */
+ {0x0426,0x0446},{0x0427,0x0447}, /* 0446 */
+ {0x0428,0x0448},{0x0429,0x0449}, /* 0448 */
+ {0x042A,0x044A},{0x042B,0x044B}, /* 044A */
+ {0x042C,0x044C},{0x042D,0x044D}, /* 044C */
+ {0x042E,0x044E},{0x042F,0x044F}, /* 044E */
+ {0x0400,0x0450},{0x0401,0x0451}, /* 0450 */
+ {0x0402,0x0452},{0x0403,0x0453}, /* 0452 */
+ {0x0404,0x0454},{0x0405,0x0455}, /* 0454 */
+ {0x0406,0x0456},{0x0407,0x0457}, /* 0456 */
+ {0x0408,0x0458},{0x0409,0x0459}, /* 0458 */
+ {0x040A,0x045A},{0x040B,0x045B}, /* 045A */
+ {0x040C,0x045C},{0x040D,0x045D}, /* 045C */
+ {0x040E,0x045E},{0x040F,0x045F}, /* 045E */
+ {0x0460,0x0461},{0x0460,0x0461}, /* 0460 */
+ {0x0462,0x0463},{0x0462,0x0463}, /* 0462 */
+ {0x0464,0x0465},{0x0464,0x0465}, /* 0464 */
+ {0x0466,0x0467},{0x0466,0x0467}, /* 0466 */
+ {0x0468,0x0469},{0x0468,0x0469}, /* 0468 */
+ {0x046A,0x046B},{0x046A,0x046B}, /* 046A */
+ {0x046C,0x046D},{0x046C,0x046D}, /* 046C */
+ {0x046E,0x046F},{0x046E,0x046F}, /* 046E */
+ {0x0470,0x0471},{0x0470,0x0471}, /* 0470 */
+ {0x0472,0x0473},{0x0472,0x0473}, /* 0472 */
+ {0x0474,0x0475},{0x0474,0x0475}, /* 0474 */
+ {0x0476,0x0477},{0x0476,0x0477}, /* 0476 */
+ {0x0478,0x0479},{0x0478,0x0479}, /* 0478 */
+ {0x047A,0x047B},{0x047A,0x047B}, /* 047A */
+ {0x047C,0x047D},{0x047C,0x047D}, /* 047C */
+ {0x047E,0x047F},{0x047E,0x047F}, /* 047E */
+ {0x0480,0x0481},{0x0480,0x0481}, /* 0480 */
+ {0x0482,0x0482},{0x0483,0x0483}, /* 0482 */
+ {0x0484,0x0484},{0x0485,0x0485}, /* 0484 */
+ {0x0486,0x0486},{0x0487,0x0487}, /* 0486 */
+ {0x0488,0x0488},{0x0489,0x0489}, /* 0488 */
+ {0x048A,0x048B},{0x048A,0x048B}, /* 048A */
+ {0x048C,0x048D},{0x048C,0x048D}, /* 048C */
+ {0x048E,0x048F},{0x048E,0x048F}, /* 048E */
+ {0x0490,0x0491},{0x0490,0x0491}, /* 0490 */
+ {0x0492,0x0493},{0x0492,0x0493}, /* 0492 */
+ {0x0494,0x0495},{0x0494,0x0495}, /* 0494 */
+ {0x0496,0x0497},{0x0496,0x0497}, /* 0496 */
+ {0x0498,0x0499},{0x0498,0x0499}, /* 0498 */
+ {0x049A,0x049B},{0x049A,0x049B}, /* 049A */
+ {0x049C,0x049D},{0x049C,0x049D}, /* 049C */
+ {0x049E,0x049F},{0x049E,0x049F}, /* 049E */
+ {0x04A0,0x04A1},{0x04A0,0x04A1}, /* 04A0 */
+ {0x04A2,0x04A3},{0x04A2,0x04A3}, /* 04A2 */
+ {0x04A4,0x04A5},{0x04A4,0x04A5}, /* 04A4 */
+ {0x04A6,0x04A7},{0x04A6,0x04A7}, /* 04A6 */
+ {0x04A8,0x04A9},{0x04A8,0x04A9}, /* 04A8 */
+ {0x04AA,0x04AB},{0x04AA,0x04AB}, /* 04AA */
+ {0x04AC,0x04AD},{0x04AC,0x04AD}, /* 04AC */
+ {0x04AE,0x04AF},{0x04AE,0x04AF}, /* 04AE */
+ {0x04B0,0x04B1},{0x04B0,0x04B1}, /* 04B0 */
+ {0x04B2,0x04B3},{0x04B2,0x04B3}, /* 04B2 */
+ {0x04B4,0x04B5},{0x04B4,0x04B5}, /* 04B4 */
+ {0x04B6,0x04B7},{0x04B6,0x04B7}, /* 04B6 */
+ {0x04B8,0x04B9},{0x04B8,0x04B9}, /* 04B8 */
+ {0x04BA,0x04BB},{0x04BA,0x04BB}, /* 04BA */
+ {0x04BC,0x04BD},{0x04BC,0x04BD}, /* 04BC */
+ {0x04BE,0x04BF},{0x04BE,0x04BF}, /* 04BE */
+ {0x04C0,0x04CF},{0x04C1,0x04C2}, /* 04C0 */
+ {0x04C1,0x04C2},{0x04C3,0x04C4}, /* 04C2 */
+ {0x04C3,0x04C4},{0x04C5,0x04C6}, /* 04C4 */
+ {0x04C5,0x04C6},{0x04C7,0x04C8}, /* 04C6 */
+ {0x04C7,0x04C8},{0x04C9,0x04CA}, /* 04C8 */
+ {0x04C9,0x04CA},{0x04CB,0x04CC}, /* 04CA */
+ {0x04CB,0x04CC},{0x04CD,0x04CE}, /* 04CC */
+ {0x04CD,0x04CE},{0x04C0,0x04CF}, /* 04CE */
+ {0x04D0,0x04D1},{0x04D0,0x04D1}, /* 04D0 */
+ {0x04D2,0x04D3},{0x04D2,0x04D3}, /* 04D2 */
+ {0x04D4,0x04D5},{0x04D4,0x04D5}, /* 04D4 */
+ {0x04D6,0x04D7},{0x04D6,0x04D7}, /* 04D6 */
+ {0x04D8,0x04D9},{0x04D8,0x04D9}, /* 04D8 */
+ {0x04DA,0x04DB},{0x04DA,0x04DB}, /* 04DA */
+ {0x04DC,0x04DD},{0x04DC,0x04DD}, /* 04DC */
+ {0x04DE,0x04DF},{0x04DE,0x04DF}, /* 04DE */
+ {0x04E0,0x04E1},{0x04E0,0x04E1}, /* 04E0 */
+ {0x04E2,0x04E3},{0x04E2,0x04E3}, /* 04E2 */
+ {0x04E4,0x04E5},{0x04E4,0x04E5}, /* 04E4 */
+ {0x04E6,0x04E7},{0x04E6,0x04E7}, /* 04E6 */
+ {0x04E8,0x04E9},{0x04E8,0x04E9}, /* 04E8 */
+ {0x04EA,0x04EB},{0x04EA,0x04EB}, /* 04EA */
+ {0x04EC,0x04ED},{0x04EC,0x04ED}, /* 04EC */
+ {0x04EE,0x04EF},{0x04EE,0x04EF}, /* 04EE */
+ {0x04F0,0x04F1},{0x04F0,0x04F1}, /* 04F0 */
+ {0x04F2,0x04F3},{0x04F2,0x04F3}, /* 04F2 */
+ {0x04F4,0x04F5},{0x04F4,0x04F5}, /* 04F4 */
+ {0x04F6,0x04F7},{0x04F6,0x04F7}, /* 04F6 */
+ {0x04F8,0x04F9},{0x04F8,0x04F9}, /* 04F8 */
+ {0x04FA,0x04FB},{0x04FA,0x04FB}, /* 04FA */
+ {0x04FC,0x04FD},{0x04FC,0x04FD}, /* 04FC */
+ {0x04FE,0x04FF},{0x04FE,0x04FF} /* 04FE */
+};
+
+static const MY_CASEFOLD_CHARACTER u1400_casefold_page05[256]={
+ {0x0500,0x0501},{0x0500,0x0501}, /* 0500 */
+ {0x0502,0x0503},{0x0502,0x0503}, /* 0502 */
+ {0x0504,0x0505},{0x0504,0x0505}, /* 0504 */
+ {0x0506,0x0507},{0x0506,0x0507}, /* 0506 */
+ {0x0508,0x0509},{0x0508,0x0509}, /* 0508 */
+ {0x050A,0x050B},{0x050A,0x050B}, /* 050A */
+ {0x050C,0x050D},{0x050C,0x050D}, /* 050C */
+ {0x050E,0x050F},{0x050E,0x050F}, /* 050E */
+ {0x0510,0x0511},{0x0510,0x0511}, /* 0510 */
+ {0x0512,0x0513},{0x0512,0x0513}, /* 0512 */
+ {0x0514,0x0515},{0x0514,0x0515}, /* 0514 */
+ {0x0516,0x0517},{0x0516,0x0517}, /* 0516 */
+ {0x0518,0x0519},{0x0518,0x0519}, /* 0518 */
+ {0x051A,0x051B},{0x051A,0x051B}, /* 051A */
+ {0x051C,0x051D},{0x051C,0x051D}, /* 051C */
+ {0x051E,0x051F},{0x051E,0x051F}, /* 051E */
+ {0x0520,0x0521},{0x0520,0x0521}, /* 0520 */
+ {0x0522,0x0523},{0x0522,0x0523}, /* 0522 */
+ {0x0524,0x0525},{0x0524,0x0525}, /* 0524 */
+ {0x0526,0x0527},{0x0526,0x0527}, /* 0526 */
+ {0x0528,0x0529},{0x0528,0x0529}, /* 0528 */
+ {0x052A,0x052B},{0x052A,0x052B}, /* 052A */
+ {0x052C,0x052D},{0x052C,0x052D}, /* 052C */
+ {0x052E,0x052F},{0x052E,0x052F}, /* 052E */
+ {0x0530,0x0530},{0x0531,0x0561}, /* 0530 */
+ {0x0532,0x0562},{0x0533,0x0563}, /* 0532 */
+ {0x0534,0x0564},{0x0535,0x0565}, /* 0534 */
+ {0x0536,0x0566},{0x0537,0x0567}, /* 0536 */
+ {0x0538,0x0568},{0x0539,0x0569}, /* 0538 */
+ {0x053A,0x056A},{0x053B,0x056B}, /* 053A */
+ {0x053C,0x056C},{0x053D,0x056D}, /* 053C */
+ {0x053E,0x056E},{0x053F,0x056F}, /* 053E */
+ {0x0540,0x0570},{0x0541,0x0571}, /* 0540 */
+ {0x0542,0x0572},{0x0543,0x0573}, /* 0542 */
+ {0x0544,0x0574},{0x0545,0x0575}, /* 0544 */
+ {0x0546,0x0576},{0x0547,0x0577}, /* 0546 */
+ {0x0548,0x0578},{0x0549,0x0579}, /* 0548 */
+ {0x054A,0x057A},{0x054B,0x057B}, /* 054A */
+ {0x054C,0x057C},{0x054D,0x057D}, /* 054C */
+ {0x054E,0x057E},{0x054F,0x057F}, /* 054E */
+ {0x0550,0x0580},{0x0551,0x0581}, /* 0550 */
+ {0x0552,0x0582},{0x0553,0x0583}, /* 0552 */
+ {0x0554,0x0584},{0x0555,0x0585}, /* 0554 */
+ {0x0556,0x0586},{0x0557,0x0557}, /* 0556 */
+ {0x0558,0x0558},{0x0559,0x0559}, /* 0558 */
+ {0x055A,0x055A},{0x055B,0x055B}, /* 055A */
+ {0x055C,0x055C},{0x055D,0x055D}, /* 055C */
+ {0x055E,0x055E},{0x055F,0x055F}, /* 055E */
+ {0x0560,0x0560},{0x0531,0x0561}, /* 0560 */
+ {0x0532,0x0562},{0x0533,0x0563}, /* 0562 */
+ {0x0534,0x0564},{0x0535,0x0565}, /* 0564 */
+ {0x0536,0x0566},{0x0537,0x0567}, /* 0566 */
+ {0x0538,0x0568},{0x0539,0x0569}, /* 0568 */
+ {0x053A,0x056A},{0x053B,0x056B}, /* 056A */
+ {0x053C,0x056C},{0x053D,0x056D}, /* 056C */
+ {0x053E,0x056E},{0x053F,0x056F}, /* 056E */
+ {0x0540,0x0570},{0x0541,0x0571}, /* 0570 */
+ {0x0542,0x0572},{0x0543,0x0573}, /* 0572 */
+ {0x0544,0x0574},{0x0545,0x0575}, /* 0574 */
+ {0x0546,0x0576},{0x0547,0x0577}, /* 0576 */
+ {0x0548,0x0578},{0x0549,0x0579}, /* 0578 */
+ {0x054A,0x057A},{0x054B,0x057B}, /* 057A */
+ {0x054C,0x057C},{0x054D,0x057D}, /* 057C */
+ {0x054E,0x057E},{0x054F,0x057F}, /* 057E */
+ {0x0550,0x0580},{0x0551,0x0581}, /* 0580 */
+ {0x0552,0x0582},{0x0553,0x0583}, /* 0582 */
+ {0x0554,0x0584},{0x0555,0x0585}, /* 0584 */
+ {0x0556,0x0586},{0x0587,0x0587}, /* 0586 */
+ {0x0588,0x0588},{0x0589,0x0589}, /* 0588 */
+ {0x058A,0x058A},{0x058B,0x058B}, /* 058A */
+ {0x058C,0x058C},{0x058D,0x058D}, /* 058C */
+ {0x058E,0x058E},{0x058F,0x058F}, /* 058E */
+ {0x0590,0x0590},{0x0591,0x0591}, /* 0590 */
+ {0x0592,0x0592},{0x0593,0x0593}, /* 0592 */
+ {0x0594,0x0594},{0x0595,0x0595}, /* 0594 */
+ {0x0596,0x0596},{0x0597,0x0597}, /* 0596 */
+ {0x0598,0x0598},{0x0599,0x0599}, /* 0598 */
+ {0x059A,0x059A},{0x059B,0x059B}, /* 059A */
+ {0x059C,0x059C},{0x059D,0x059D}, /* 059C */
+ {0x059E,0x059E},{0x059F,0x059F}, /* 059E */
+ {0x05A0,0x05A0},{0x05A1,0x05A1}, /* 05A0 */
+ {0x05A2,0x05A2},{0x05A3,0x05A3}, /* 05A2 */
+ {0x05A4,0x05A4},{0x05A5,0x05A5}, /* 05A4 */
+ {0x05A6,0x05A6},{0x05A7,0x05A7}, /* 05A6 */
+ {0x05A8,0x05A8},{0x05A9,0x05A9}, /* 05A8 */
+ {0x05AA,0x05AA},{0x05AB,0x05AB}, /* 05AA */
+ {0x05AC,0x05AC},{0x05AD,0x05AD}, /* 05AC */
+ {0x05AE,0x05AE},{0x05AF,0x05AF}, /* 05AE */
+ {0x05B0,0x05B0},{0x05B1,0x05B1}, /* 05B0 */
+ {0x05B2,0x05B2},{0x05B3,0x05B3}, /* 05B2 */
+ {0x05B4,0x05B4},{0x05B5,0x05B5}, /* 05B4 */
+ {0x05B6,0x05B6},{0x05B7,0x05B7}, /* 05B6 */
+ {0x05B8,0x05B8},{0x05B9,0x05B9}, /* 05B8 */
+ {0x05BA,0x05BA},{0x05BB,0x05BB}, /* 05BA */
+ {0x05BC,0x05BC},{0x05BD,0x05BD}, /* 05BC */
+ {0x05BE,0x05BE},{0x05BF,0x05BF}, /* 05BE */
+ {0x05C0,0x05C0},{0x05C1,0x05C1}, /* 05C0 */
+ {0x05C2,0x05C2},{0x05C3,0x05C3}, /* 05C2 */
+ {0x05C4,0x05C4},{0x05C5,0x05C5}, /* 05C4 */
+ {0x05C6,0x05C6},{0x05C7,0x05C7}, /* 05C6 */
+ {0x05C8,0x05C8},{0x05C9,0x05C9}, /* 05C8 */
+ {0x05CA,0x05CA},{0x05CB,0x05CB}, /* 05CA */
+ {0x05CC,0x05CC},{0x05CD,0x05CD}, /* 05CC */
+ {0x05CE,0x05CE},{0x05CF,0x05CF}, /* 05CE */
+ {0x05D0,0x05D0},{0x05D1,0x05D1}, /* 05D0 */
+ {0x05D2,0x05D2},{0x05D3,0x05D3}, /* 05D2 */
+ {0x05D4,0x05D4},{0x05D5,0x05D5}, /* 05D4 */
+ {0x05D6,0x05D6},{0x05D7,0x05D7}, /* 05D6 */
+ {0x05D8,0x05D8},{0x05D9,0x05D9}, /* 05D8 */
+ {0x05DA,0x05DA},{0x05DB,0x05DB}, /* 05DA */
+ {0x05DC,0x05DC},{0x05DD,0x05DD}, /* 05DC */
+ {0x05DE,0x05DE},{0x05DF,0x05DF}, /* 05DE */
+ {0x05E0,0x05E0},{0x05E1,0x05E1}, /* 05E0 */
+ {0x05E2,0x05E2},{0x05E3,0x05E3}, /* 05E2 */
+ {0x05E4,0x05E4},{0x05E5,0x05E5}, /* 05E4 */
+ {0x05E6,0x05E6},{0x05E7,0x05E7}, /* 05E6 */
+ {0x05E8,0x05E8},{0x05E9,0x05E9}, /* 05E8 */
+ {0x05EA,0x05EA},{0x05EB,0x05EB}, /* 05EA */
+ {0x05EC,0x05EC},{0x05ED,0x05ED}, /* 05EC */
+ {0x05EE,0x05EE},{0x05EF,0x05EF}, /* 05EE */
+ {0x05F0,0x05F0},{0x05F1,0x05F1}, /* 05F0 */
+ {0x05F2,0x05F2},{0x05F3,0x05F3}, /* 05F2 */
+ {0x05F4,0x05F4},{0x05F5,0x05F5}, /* 05F4 */
+ {0x05F6,0x05F6},{0x05F7,0x05F7}, /* 05F6 */
+ {0x05F8,0x05F8},{0x05F9,0x05F9}, /* 05F8 */
+ {0x05FA,0x05FA},{0x05FB,0x05FB}, /* 05FA */
+ {0x05FC,0x05FC},{0x05FD,0x05FD}, /* 05FC */
+ {0x05FE,0x05FE},{0x05FF,0x05FF} /* 05FE */
+};
+
+static const MY_CASEFOLD_CHARACTER u1400_casefold_page06[256]={ /* This page is dummy */
+ {0x0600,0x0600},{0x0601,0x0601}, /* 0600 */
+ {0x0602,0x0602},{0x0603,0x0603}, /* 0602 */
+ {0x0604,0x0604},{0x0605,0x0605}, /* 0604 */
+ {0x0606,0x0606},{0x0607,0x0607}, /* 0606 */
+ {0x0608,0x0608},{0x0609,0x0609}, /* 0608 */
+ {0x060A,0x060A},{0x060B,0x060B}, /* 060A */
+ {0x060C,0x060C},{0x060D,0x060D}, /* 060C */
+ {0x060E,0x060E},{0x060F,0x060F}, /* 060E */
+ {0x0610,0x0610},{0x0611,0x0611}, /* 0610 */
+ {0x0612,0x0612},{0x0613,0x0613}, /* 0612 */
+ {0x0614,0x0614},{0x0615,0x0615}, /* 0614 */
+ {0x0616,0x0616},{0x0617,0x0617}, /* 0616 */
+ {0x0618,0x0618},{0x0619,0x0619}, /* 0618 */
+ {0x061A,0x061A},{0x061B,0x061B}, /* 061A */
+ {0x061C,0x061C},{0x061D,0x061D}, /* 061C */
+ {0x061E,0x061E},{0x061F,0x061F}, /* 061E */
+ {0x0620,0x0620},{0x0621,0x0621}, /* 0620 */
+ {0x0622,0x0622},{0x0623,0x0623}, /* 0622 */
+ {0x0624,0x0624},{0x0625,0x0625}, /* 0624 */
+ {0x0626,0x0626},{0x0627,0x0627}, /* 0626 */
+ {0x0628,0x0628},{0x0629,0x0629}, /* 0628 */
+ {0x062A,0x062A},{0x062B,0x062B}, /* 062A */
+ {0x062C,0x062C},{0x062D,0x062D}, /* 062C */
+ {0x062E,0x062E},{0x062F,0x062F}, /* 062E */
+ {0x0630,0x0630},{0x0631,0x0631}, /* 0630 */
+ {0x0632,0x0632},{0x0633,0x0633}, /* 0632 */
+ {0x0634,0x0634},{0x0635,0x0635}, /* 0634 */
+ {0x0636,0x0636},{0x0637,0x0637}, /* 0636 */
+ {0x0638,0x0638},{0x0639,0x0639}, /* 0638 */
+ {0x063A,0x063A},{0x063B,0x063B}, /* 063A */
+ {0x063C,0x063C},{0x063D,0x063D}, /* 063C */
+ {0x063E,0x063E},{0x063F,0x063F}, /* 063E */
+ {0x0640,0x0640},{0x0641,0x0641}, /* 0640 */
+ {0x0642,0x0642},{0x0643,0x0643}, /* 0642 */
+ {0x0644,0x0644},{0x0645,0x0645}, /* 0644 */
+ {0x0646,0x0646},{0x0647,0x0647}, /* 0646 */
+ {0x0648,0x0648},{0x0649,0x0649}, /* 0648 */
+ {0x064A,0x064A},{0x064B,0x064B}, /* 064A */
+ {0x064C,0x064C},{0x064D,0x064D}, /* 064C */
+ {0x064E,0x064E},{0x064F,0x064F}, /* 064E */
+ {0x0650,0x0650},{0x0651,0x0651}, /* 0650 */
+ {0x0652,0x0652},{0x0653,0x0653}, /* 0652 */
+ {0x0654,0x0654},{0x0655,0x0655}, /* 0654 */
+ {0x0656,0x0656},{0x0657,0x0657}, /* 0656 */
+ {0x0658,0x0658},{0x0659,0x0659}, /* 0658 */
+ {0x065A,0x065A},{0x065B,0x065B}, /* 065A */
+ {0x065C,0x065C},{0x065D,0x065D}, /* 065C */
+ {0x065E,0x065E},{0x065F,0x065F}, /* 065E */
+ {0x0660,0x0660},{0x0661,0x0661}, /* 0660 */
+ {0x0662,0x0662},{0x0663,0x0663}, /* 0662 */
+ {0x0664,0x0664},{0x0665,0x0665}, /* 0664 */
+ {0x0666,0x0666},{0x0667,0x0667}, /* 0666 */
+ {0x0668,0x0668},{0x0669,0x0669}, /* 0668 */
+ {0x066A,0x066A},{0x066B,0x066B}, /* 066A */
+ {0x066C,0x066C},{0x066D,0x066D}, /* 066C */
+ {0x066E,0x066E},{0x066F,0x066F}, /* 066E */
+ {0x0670,0x0670},{0x0671,0x0671}, /* 0670 */
+ {0x0672,0x0672},{0x0673,0x0673}, /* 0672 */
+ {0x0674,0x0674},{0x0675,0x0675}, /* 0674 */
+ {0x0676,0x0676},{0x0677,0x0677}, /* 0676 */
+ {0x0678,0x0678},{0x0679,0x0679}, /* 0678 */
+ {0x067A,0x067A},{0x067B,0x067B}, /* 067A */
+ {0x067C,0x067C},{0x067D,0x067D}, /* 067C */
+ {0x067E,0x067E},{0x067F,0x067F}, /* 067E */
+ {0x0680,0x0680},{0x0681,0x0681}, /* 0680 */
+ {0x0682,0x0682},{0x0683,0x0683}, /* 0682 */
+ {0x0684,0x0684},{0x0685,0x0685}, /* 0684 */
+ {0x0686,0x0686},{0x0687,0x0687}, /* 0686 */
+ {0x0688,0x0688},{0x0689,0x0689}, /* 0688 */
+ {0x068A,0x068A},{0x068B,0x068B}, /* 068A */
+ {0x068C,0x068C},{0x068D,0x068D}, /* 068C */
+ {0x068E,0x068E},{0x068F,0x068F}, /* 068E */
+ {0x0690,0x0690},{0x0691,0x0691}, /* 0690 */
+ {0x0692,0x0692},{0x0693,0x0693}, /* 0692 */
+ {0x0694,0x0694},{0x0695,0x0695}, /* 0694 */
+ {0x0696,0x0696},{0x0697,0x0697}, /* 0696 */
+ {0x0698,0x0698},{0x0699,0x0699}, /* 0698 */
+ {0x069A,0x069A},{0x069B,0x069B}, /* 069A */
+ {0x069C,0x069C},{0x069D,0x069D}, /* 069C */
+ {0x069E,0x069E},{0x069F,0x069F}, /* 069E */
+ {0x06A0,0x06A0},{0x06A1,0x06A1}, /* 06A0 */
+ {0x06A2,0x06A2},{0x06A3,0x06A3}, /* 06A2 */
+ {0x06A4,0x06A4},{0x06A5,0x06A5}, /* 06A4 */
+ {0x06A6,0x06A6},{0x06A7,0x06A7}, /* 06A6 */
+ {0x06A8,0x06A8},{0x06A9,0x06A9}, /* 06A8 */
+ {0x06AA,0x06AA},{0x06AB,0x06AB}, /* 06AA */
+ {0x06AC,0x06AC},{0x06AD,0x06AD}, /* 06AC */
+ {0x06AE,0x06AE},{0x06AF,0x06AF}, /* 06AE */
+ {0x06B0,0x06B0},{0x06B1,0x06B1}, /* 06B0 */
+ {0x06B2,0x06B2},{0x06B3,0x06B3}, /* 06B2 */
+ {0x06B4,0x06B4},{0x06B5,0x06B5}, /* 06B4 */
+ {0x06B6,0x06B6},{0x06B7,0x06B7}, /* 06B6 */
+ {0x06B8,0x06B8},{0x06B9,0x06B9}, /* 06B8 */
+ {0x06BA,0x06BA},{0x06BB,0x06BB}, /* 06BA */
+ {0x06BC,0x06BC},{0x06BD,0x06BD}, /* 06BC */
+ {0x06BE,0x06BE},{0x06BF,0x06BF}, /* 06BE */
+ {0x06C0,0x06C0},{0x06C1,0x06C1}, /* 06C0 */
+ {0x06C2,0x06C2},{0x06C3,0x06C3}, /* 06C2 */
+ {0x06C4,0x06C4},{0x06C5,0x06C5}, /* 06C4 */
+ {0x06C6,0x06C6},{0x06C7,0x06C7}, /* 06C6 */
+ {0x06C8,0x06C8},{0x06C9,0x06C9}, /* 06C8 */
+ {0x06CA,0x06CA},{0x06CB,0x06CB}, /* 06CA */
+ {0x06CC,0x06CC},{0x06CD,0x06CD}, /* 06CC */
+ {0x06CE,0x06CE},{0x06CF,0x06CF}, /* 06CE */
+ {0x06D0,0x06D0},{0x06D1,0x06D1}, /* 06D0 */
+ {0x06D2,0x06D2},{0x06D3,0x06D3}, /* 06D2 */
+ {0x06D4,0x06D4},{0x06D5,0x06D5}, /* 06D4 */
+ {0x06D6,0x06D6},{0x06D7,0x06D7}, /* 06D6 */
+ {0x06D8,0x06D8},{0x06D9,0x06D9}, /* 06D8 */
+ {0x06DA,0x06DA},{0x06DB,0x06DB}, /* 06DA */
+ {0x06DC,0x06DC},{0x06DD,0x06DD}, /* 06DC */
+ {0x06DE,0x06DE},{0x06DF,0x06DF}, /* 06DE */
+ {0x06E0,0x06E0},{0x06E1,0x06E1}, /* 06E0 */
+ {0x06E2,0x06E2},{0x06E3,0x06E3}, /* 06E2 */
+ {0x06E4,0x06E4},{0x06E5,0x06E5}, /* 06E4 */
+ {0x06E6,0x06E6},{0x06E7,0x06E7}, /* 06E6 */
+ {0x06E8,0x06E8},{0x06E9,0x06E9}, /* 06E8 */
+ {0x06EA,0x06EA},{0x06EB,0x06EB}, /* 06EA */
+ {0x06EC,0x06EC},{0x06ED,0x06ED}, /* 06EC */
+ {0x06EE,0x06EE},{0x06EF,0x06EF}, /* 06EE */
+ {0x06F0,0x06F0},{0x06F1,0x06F1}, /* 06F0 */
+ {0x06F2,0x06F2},{0x06F3,0x06F3}, /* 06F2 */
+ {0x06F4,0x06F4},{0x06F5,0x06F5}, /* 06F4 */
+ {0x06F6,0x06F6},{0x06F7,0x06F7}, /* 06F6 */
+ {0x06F8,0x06F8},{0x06F9,0x06F9}, /* 06F8 */
+ {0x06FA,0x06FA},{0x06FB,0x06FB}, /* 06FA */
+ {0x06FC,0x06FC},{0x06FD,0x06FD}, /* 06FC */
+ {0x06FE,0x06FE},{0x06FF,0x06FF} /* 06FE */
+};
+
+static const MY_CASEFOLD_CHARACTER u1400_casefold_page07[256]={ /* This page is dummy */
+ {0x0700,0x0700},{0x0701,0x0701}, /* 0700 */
+ {0x0702,0x0702},{0x0703,0x0703}, /* 0702 */
+ {0x0704,0x0704},{0x0705,0x0705}, /* 0704 */
+ {0x0706,0x0706},{0x0707,0x0707}, /* 0706 */
+ {0x0708,0x0708},{0x0709,0x0709}, /* 0708 */
+ {0x070A,0x070A},{0x070B,0x070B}, /* 070A */
+ {0x070C,0x070C},{0x070D,0x070D}, /* 070C */
+ {0x070E,0x070E},{0x070F,0x070F}, /* 070E */
+ {0x0710,0x0710},{0x0711,0x0711}, /* 0710 */
+ {0x0712,0x0712},{0x0713,0x0713}, /* 0712 */
+ {0x0714,0x0714},{0x0715,0x0715}, /* 0714 */
+ {0x0716,0x0716},{0x0717,0x0717}, /* 0716 */
+ {0x0718,0x0718},{0x0719,0x0719}, /* 0718 */
+ {0x071A,0x071A},{0x071B,0x071B}, /* 071A */
+ {0x071C,0x071C},{0x071D,0x071D}, /* 071C */
+ {0x071E,0x071E},{0x071F,0x071F}, /* 071E */
+ {0x0720,0x0720},{0x0721,0x0721}, /* 0720 */
+ {0x0722,0x0722},{0x0723,0x0723}, /* 0722 */
+ {0x0724,0x0724},{0x0725,0x0725}, /* 0724 */
+ {0x0726,0x0726},{0x0727,0x0727}, /* 0726 */
+ {0x0728,0x0728},{0x0729,0x0729}, /* 0728 */
+ {0x072A,0x072A},{0x072B,0x072B}, /* 072A */
+ {0x072C,0x072C},{0x072D,0x072D}, /* 072C */
+ {0x072E,0x072E},{0x072F,0x072F}, /* 072E */
+ {0x0730,0x0730},{0x0731,0x0731}, /* 0730 */
+ {0x0732,0x0732},{0x0733,0x0733}, /* 0732 */
+ {0x0734,0x0734},{0x0735,0x0735}, /* 0734 */
+ {0x0736,0x0736},{0x0737,0x0737}, /* 0736 */
+ {0x0738,0x0738},{0x0739,0x0739}, /* 0738 */
+ {0x073A,0x073A},{0x073B,0x073B}, /* 073A */
+ {0x073C,0x073C},{0x073D,0x073D}, /* 073C */
+ {0x073E,0x073E},{0x073F,0x073F}, /* 073E */
+ {0x0740,0x0740},{0x0741,0x0741}, /* 0740 */
+ {0x0742,0x0742},{0x0743,0x0743}, /* 0742 */
+ {0x0744,0x0744},{0x0745,0x0745}, /* 0744 */
+ {0x0746,0x0746},{0x0747,0x0747}, /* 0746 */
+ {0x0748,0x0748},{0x0749,0x0749}, /* 0748 */
+ {0x074A,0x074A},{0x074B,0x074B}, /* 074A */
+ {0x074C,0x074C},{0x074D,0x074D}, /* 074C */
+ {0x074E,0x074E},{0x074F,0x074F}, /* 074E */
+ {0x0750,0x0750},{0x0751,0x0751}, /* 0750 */
+ {0x0752,0x0752},{0x0753,0x0753}, /* 0752 */
+ {0x0754,0x0754},{0x0755,0x0755}, /* 0754 */
+ {0x0756,0x0756},{0x0757,0x0757}, /* 0756 */
+ {0x0758,0x0758},{0x0759,0x0759}, /* 0758 */
+ {0x075A,0x075A},{0x075B,0x075B}, /* 075A */
+ {0x075C,0x075C},{0x075D,0x075D}, /* 075C */
+ {0x075E,0x075E},{0x075F,0x075F}, /* 075E */
+ {0x0760,0x0760},{0x0761,0x0761}, /* 0760 */
+ {0x0762,0x0762},{0x0763,0x0763}, /* 0762 */
+ {0x0764,0x0764},{0x0765,0x0765}, /* 0764 */
+ {0x0766,0x0766},{0x0767,0x0767}, /* 0766 */
+ {0x0768,0x0768},{0x0769,0x0769}, /* 0768 */
+ {0x076A,0x076A},{0x076B,0x076B}, /* 076A */
+ {0x076C,0x076C},{0x076D,0x076D}, /* 076C */
+ {0x076E,0x076E},{0x076F,0x076F}, /* 076E */
+ {0x0770,0x0770},{0x0771,0x0771}, /* 0770 */
+ {0x0772,0x0772},{0x0773,0x0773}, /* 0772 */
+ {0x0774,0x0774},{0x0775,0x0775}, /* 0774 */
+ {0x0776,0x0776},{0x0777,0x0777}, /* 0776 */
+ {0x0778,0x0778},{0x0779,0x0779}, /* 0778 */
+ {0x077A,0x077A},{0x077B,0x077B}, /* 077A */
+ {0x077C,0x077C},{0x077D,0x077D}, /* 077C */
+ {0x077E,0x077E},{0x077F,0x077F}, /* 077E */
+ {0x0780,0x0780},{0x0781,0x0781}, /* 0780 */
+ {0x0782,0x0782},{0x0783,0x0783}, /* 0782 */
+ {0x0784,0x0784},{0x0785,0x0785}, /* 0784 */
+ {0x0786,0x0786},{0x0787,0x0787}, /* 0786 */
+ {0x0788,0x0788},{0x0789,0x0789}, /* 0788 */
+ {0x078A,0x078A},{0x078B,0x078B}, /* 078A */
+ {0x078C,0x078C},{0x078D,0x078D}, /* 078C */
+ {0x078E,0x078E},{0x078F,0x078F}, /* 078E */
+ {0x0790,0x0790},{0x0791,0x0791}, /* 0790 */
+ {0x0792,0x0792},{0x0793,0x0793}, /* 0792 */
+ {0x0794,0x0794},{0x0795,0x0795}, /* 0794 */
+ {0x0796,0x0796},{0x0797,0x0797}, /* 0796 */
+ {0x0798,0x0798},{0x0799,0x0799}, /* 0798 */
+ {0x079A,0x079A},{0x079B,0x079B}, /* 079A */
+ {0x079C,0x079C},{0x079D,0x079D}, /* 079C */
+ {0x079E,0x079E},{0x079F,0x079F}, /* 079E */
+ {0x07A0,0x07A0},{0x07A1,0x07A1}, /* 07A0 */
+ {0x07A2,0x07A2},{0x07A3,0x07A3}, /* 07A2 */
+ {0x07A4,0x07A4},{0x07A5,0x07A5}, /* 07A4 */
+ {0x07A6,0x07A6},{0x07A7,0x07A7}, /* 07A6 */
+ {0x07A8,0x07A8},{0x07A9,0x07A9}, /* 07A8 */
+ {0x07AA,0x07AA},{0x07AB,0x07AB}, /* 07AA */
+ {0x07AC,0x07AC},{0x07AD,0x07AD}, /* 07AC */
+ {0x07AE,0x07AE},{0x07AF,0x07AF}, /* 07AE */
+ {0x07B0,0x07B0},{0x07B1,0x07B1}, /* 07B0 */
+ {0x07B2,0x07B2},{0x07B3,0x07B3}, /* 07B2 */
+ {0x07B4,0x07B4},{0x07B5,0x07B5}, /* 07B4 */
+ {0x07B6,0x07B6},{0x07B7,0x07B7}, /* 07B6 */
+ {0x07B8,0x07B8},{0x07B9,0x07B9}, /* 07B8 */
+ {0x07BA,0x07BA},{0x07BB,0x07BB}, /* 07BA */
+ {0x07BC,0x07BC},{0x07BD,0x07BD}, /* 07BC */
+ {0x07BE,0x07BE},{0x07BF,0x07BF}, /* 07BE */
+ {0x07C0,0x07C0},{0x07C1,0x07C1}, /* 07C0 */
+ {0x07C2,0x07C2},{0x07C3,0x07C3}, /* 07C2 */
+ {0x07C4,0x07C4},{0x07C5,0x07C5}, /* 07C4 */
+ {0x07C6,0x07C6},{0x07C7,0x07C7}, /* 07C6 */
+ {0x07C8,0x07C8},{0x07C9,0x07C9}, /* 07C8 */
+ {0x07CA,0x07CA},{0x07CB,0x07CB}, /* 07CA */
+ {0x07CC,0x07CC},{0x07CD,0x07CD}, /* 07CC */
+ {0x07CE,0x07CE},{0x07CF,0x07CF}, /* 07CE */
+ {0x07D0,0x07D0},{0x07D1,0x07D1}, /* 07D0 */
+ {0x07D2,0x07D2},{0x07D3,0x07D3}, /* 07D2 */
+ {0x07D4,0x07D4},{0x07D5,0x07D5}, /* 07D4 */
+ {0x07D6,0x07D6},{0x07D7,0x07D7}, /* 07D6 */
+ {0x07D8,0x07D8},{0x07D9,0x07D9}, /* 07D8 */
+ {0x07DA,0x07DA},{0x07DB,0x07DB}, /* 07DA */
+ {0x07DC,0x07DC},{0x07DD,0x07DD}, /* 07DC */
+ {0x07DE,0x07DE},{0x07DF,0x07DF}, /* 07DE */
+ {0x07E0,0x07E0},{0x07E1,0x07E1}, /* 07E0 */
+ {0x07E2,0x07E2},{0x07E3,0x07E3}, /* 07E2 */
+ {0x07E4,0x07E4},{0x07E5,0x07E5}, /* 07E4 */
+ {0x07E6,0x07E6},{0x07E7,0x07E7}, /* 07E6 */
+ {0x07E8,0x07E8},{0x07E9,0x07E9}, /* 07E8 */
+ {0x07EA,0x07EA},{0x07EB,0x07EB}, /* 07EA */
+ {0x07EC,0x07EC},{0x07ED,0x07ED}, /* 07EC */
+ {0x07EE,0x07EE},{0x07EF,0x07EF}, /* 07EE */
+ {0x07F0,0x07F0},{0x07F1,0x07F1}, /* 07F0 */
+ {0x07F2,0x07F2},{0x07F3,0x07F3}, /* 07F2 */
+ {0x07F4,0x07F4},{0x07F5,0x07F5}, /* 07F4 */
+ {0x07F6,0x07F6},{0x07F7,0x07F7}, /* 07F6 */
+ {0x07F8,0x07F8},{0x07F9,0x07F9}, /* 07F8 */
+ {0x07FA,0x07FA},{0x07FB,0x07FB}, /* 07FA */
+ {0x07FC,0x07FC},{0x07FD,0x07FD}, /* 07FC */
+ {0x07FE,0x07FE},{0x07FF,0x07FF} /* 07FE */
+};
+
+static const MY_CASEFOLD_CHARACTER u1400_casefold_page10[256]={
+ {0x1000,0x1000},{0x1001,0x1001}, /* 1000 */
+ {0x1002,0x1002},{0x1003,0x1003}, /* 1002 */
+ {0x1004,0x1004},{0x1005,0x1005}, /* 1004 */
+ {0x1006,0x1006},{0x1007,0x1007}, /* 1006 */
+ {0x1008,0x1008},{0x1009,0x1009}, /* 1008 */
+ {0x100A,0x100A},{0x100B,0x100B}, /* 100A */
+ {0x100C,0x100C},{0x100D,0x100D}, /* 100C */
+ {0x100E,0x100E},{0x100F,0x100F}, /* 100E */
+ {0x1010,0x1010},{0x1011,0x1011}, /* 1010 */
+ {0x1012,0x1012},{0x1013,0x1013}, /* 1012 */
+ {0x1014,0x1014},{0x1015,0x1015}, /* 1014 */
+ {0x1016,0x1016},{0x1017,0x1017}, /* 1016 */
+ {0x1018,0x1018},{0x1019,0x1019}, /* 1018 */
+ {0x101A,0x101A},{0x101B,0x101B}, /* 101A */
+ {0x101C,0x101C},{0x101D,0x101D}, /* 101C */
+ {0x101E,0x101E},{0x101F,0x101F}, /* 101E */
+ {0x1020,0x1020},{0x1021,0x1021}, /* 1020 */
+ {0x1022,0x1022},{0x1023,0x1023}, /* 1022 */
+ {0x1024,0x1024},{0x1025,0x1025}, /* 1024 */
+ {0x1026,0x1026},{0x1027,0x1027}, /* 1026 */
+ {0x1028,0x1028},{0x1029,0x1029}, /* 1028 */
+ {0x102A,0x102A},{0x102B,0x102B}, /* 102A */
+ {0x102C,0x102C},{0x102D,0x102D}, /* 102C */
+ {0x102E,0x102E},{0x102F,0x102F}, /* 102E */
+ {0x1030,0x1030},{0x1031,0x1031}, /* 1030 */
+ {0x1032,0x1032},{0x1033,0x1033}, /* 1032 */
+ {0x1034,0x1034},{0x1035,0x1035}, /* 1034 */
+ {0x1036,0x1036},{0x1037,0x1037}, /* 1036 */
+ {0x1038,0x1038},{0x1039,0x1039}, /* 1038 */
+ {0x103A,0x103A},{0x103B,0x103B}, /* 103A */
+ {0x103C,0x103C},{0x103D,0x103D}, /* 103C */
+ {0x103E,0x103E},{0x103F,0x103F}, /* 103E */
+ {0x1040,0x1040},{0x1041,0x1041}, /* 1040 */
+ {0x1042,0x1042},{0x1043,0x1043}, /* 1042 */
+ {0x1044,0x1044},{0x1045,0x1045}, /* 1044 */
+ {0x1046,0x1046},{0x1047,0x1047}, /* 1046 */
+ {0x1048,0x1048},{0x1049,0x1049}, /* 1048 */
+ {0x104A,0x104A},{0x104B,0x104B}, /* 104A */
+ {0x104C,0x104C},{0x104D,0x104D}, /* 104C */
+ {0x104E,0x104E},{0x104F,0x104F}, /* 104E */
+ {0x1050,0x1050},{0x1051,0x1051}, /* 1050 */
+ {0x1052,0x1052},{0x1053,0x1053}, /* 1052 */
+ {0x1054,0x1054},{0x1055,0x1055}, /* 1054 */
+ {0x1056,0x1056},{0x1057,0x1057}, /* 1056 */
+ {0x1058,0x1058},{0x1059,0x1059}, /* 1058 */
+ {0x105A,0x105A},{0x105B,0x105B}, /* 105A */
+ {0x105C,0x105C},{0x105D,0x105D}, /* 105C */
+ {0x105E,0x105E},{0x105F,0x105F}, /* 105E */
+ {0x1060,0x1060},{0x1061,0x1061}, /* 1060 */
+ {0x1062,0x1062},{0x1063,0x1063}, /* 1062 */
+ {0x1064,0x1064},{0x1065,0x1065}, /* 1064 */
+ {0x1066,0x1066},{0x1067,0x1067}, /* 1066 */
+ {0x1068,0x1068},{0x1069,0x1069}, /* 1068 */
+ {0x106A,0x106A},{0x106B,0x106B}, /* 106A */
+ {0x106C,0x106C},{0x106D,0x106D}, /* 106C */
+ {0x106E,0x106E},{0x106F,0x106F}, /* 106E */
+ {0x1070,0x1070},{0x1071,0x1071}, /* 1070 */
+ {0x1072,0x1072},{0x1073,0x1073}, /* 1072 */
+ {0x1074,0x1074},{0x1075,0x1075}, /* 1074 */
+ {0x1076,0x1076},{0x1077,0x1077}, /* 1076 */
+ {0x1078,0x1078},{0x1079,0x1079}, /* 1078 */
+ {0x107A,0x107A},{0x107B,0x107B}, /* 107A */
+ {0x107C,0x107C},{0x107D,0x107D}, /* 107C */
+ {0x107E,0x107E},{0x107F,0x107F}, /* 107E */
+ {0x1080,0x1080},{0x1081,0x1081}, /* 1080 */
+ {0x1082,0x1082},{0x1083,0x1083}, /* 1082 */
+ {0x1084,0x1084},{0x1085,0x1085}, /* 1084 */
+ {0x1086,0x1086},{0x1087,0x1087}, /* 1086 */
+ {0x1088,0x1088},{0x1089,0x1089}, /* 1088 */
+ {0x108A,0x108A},{0x108B,0x108B}, /* 108A */
+ {0x108C,0x108C},{0x108D,0x108D}, /* 108C */
+ {0x108E,0x108E},{0x108F,0x108F}, /* 108E */
+ {0x1090,0x1090},{0x1091,0x1091}, /* 1090 */
+ {0x1092,0x1092},{0x1093,0x1093}, /* 1092 */
+ {0x1094,0x1094},{0x1095,0x1095}, /* 1094 */
+ {0x1096,0x1096},{0x1097,0x1097}, /* 1096 */
+ {0x1098,0x1098},{0x1099,0x1099}, /* 1098 */
+ {0x109A,0x109A},{0x109B,0x109B}, /* 109A */
+ {0x109C,0x109C},{0x109D,0x109D}, /* 109C */
+ {0x109E,0x109E},{0x109F,0x109F}, /* 109E */
+ {0x10A0,0x2D00},{0x10A1,0x2D01}, /* 10A0 */
+ {0x10A2,0x2D02},{0x10A3,0x2D03}, /* 10A2 */
+ {0x10A4,0x2D04},{0x10A5,0x2D05}, /* 10A4 */
+ {0x10A6,0x2D06},{0x10A7,0x2D07}, /* 10A6 */
+ {0x10A8,0x2D08},{0x10A9,0x2D09}, /* 10A8 */
+ {0x10AA,0x2D0A},{0x10AB,0x2D0B}, /* 10AA */
+ {0x10AC,0x2D0C},{0x10AD,0x2D0D}, /* 10AC */
+ {0x10AE,0x2D0E},{0x10AF,0x2D0F}, /* 10AE */
+ {0x10B0,0x2D10},{0x10B1,0x2D11}, /* 10B0 */
+ {0x10B2,0x2D12},{0x10B3,0x2D13}, /* 10B2 */
+ {0x10B4,0x2D14},{0x10B5,0x2D15}, /* 10B4 */
+ {0x10B6,0x2D16},{0x10B7,0x2D17}, /* 10B6 */
+ {0x10B8,0x2D18},{0x10B9,0x2D19}, /* 10B8 */
+ {0x10BA,0x2D1A},{0x10BB,0x2D1B}, /* 10BA */
+ {0x10BC,0x2D1C},{0x10BD,0x2D1D}, /* 10BC */
+ {0x10BE,0x2D1E},{0x10BF,0x2D1F}, /* 10BE */
+ {0x10C0,0x2D20},{0x10C1,0x2D21}, /* 10C0 */
+ {0x10C2,0x2D22},{0x10C3,0x2D23}, /* 10C2 */
+ {0x10C4,0x2D24},{0x10C5,0x2D25}, /* 10C4 */
+ {0x10C6,0x10C6},{0x10C7,0x2D27}, /* 10C6 */
+ {0x10C8,0x10C8},{0x10C9,0x10C9}, /* 10C8 */
+ {0x10CA,0x10CA},{0x10CB,0x10CB}, /* 10CA */
+ {0x10CC,0x10CC},{0x10CD,0x2D2D}, /* 10CC */
+ {0x10CE,0x10CE},{0x10CF,0x10CF}, /* 10CE */
+ {0x1C90,0x10D0},{0x1C91,0x10D1}, /* 10D0 */
+ {0x1C92,0x10D2},{0x1C93,0x10D3}, /* 10D2 */
+ {0x1C94,0x10D4},{0x1C95,0x10D5}, /* 10D4 */
+ {0x1C96,0x10D6},{0x1C97,0x10D7}, /* 10D6 */
+ {0x1C98,0x10D8},{0x1C99,0x10D9}, /* 10D8 */
+ {0x1C9A,0x10DA},{0x1C9B,0x10DB}, /* 10DA */
+ {0x1C9C,0x10DC},{0x1C9D,0x10DD}, /* 10DC */
+ {0x1C9E,0x10DE},{0x1C9F,0x10DF}, /* 10DE */
+ {0x1CA0,0x10E0},{0x1CA1,0x10E1}, /* 10E0 */
+ {0x1CA2,0x10E2},{0x1CA3,0x10E3}, /* 10E2 */
+ {0x1CA4,0x10E4},{0x1CA5,0x10E5}, /* 10E4 */
+ {0x1CA6,0x10E6},{0x1CA7,0x10E7}, /* 10E6 */
+ {0x1CA8,0x10E8},{0x1CA9,0x10E9}, /* 10E8 */
+ {0x1CAA,0x10EA},{0x1CAB,0x10EB}, /* 10EA */
+ {0x1CAC,0x10EC},{0x1CAD,0x10ED}, /* 10EC */
+ {0x1CAE,0x10EE},{0x1CAF,0x10EF}, /* 10EE */
+ {0x1CB0,0x10F0},{0x1CB1,0x10F1}, /* 10F0 */
+ {0x1CB2,0x10F2},{0x1CB3,0x10F3}, /* 10F2 */
+ {0x1CB4,0x10F4},{0x1CB5,0x10F5}, /* 10F4 */
+ {0x1CB6,0x10F6},{0x1CB7,0x10F7}, /* 10F6 */
+ {0x1CB8,0x10F8},{0x1CB9,0x10F9}, /* 10F8 */
+ {0x1CBA,0x10FA},{0x10FB,0x10FB}, /* 10FA */
+ {0x10FC,0x10FC},{0x1CBD,0x10FD}, /* 10FC */
+ {0x1CBE,0x10FE},{0x1CBF,0x10FF} /* 10FE */
+};
+
+static const MY_CASEFOLD_CHARACTER u1400_casefold_page13[256]={
+ {0x1300,0x1300},{0x1301,0x1301}, /* 1300 */
+ {0x1302,0x1302},{0x1303,0x1303}, /* 1302 */
+ {0x1304,0x1304},{0x1305,0x1305}, /* 1304 */
+ {0x1306,0x1306},{0x1307,0x1307}, /* 1306 */
+ {0x1308,0x1308},{0x1309,0x1309}, /* 1308 */
+ {0x130A,0x130A},{0x130B,0x130B}, /* 130A */
+ {0x130C,0x130C},{0x130D,0x130D}, /* 130C */
+ {0x130E,0x130E},{0x130F,0x130F}, /* 130E */
+ {0x1310,0x1310},{0x1311,0x1311}, /* 1310 */
+ {0x1312,0x1312},{0x1313,0x1313}, /* 1312 */
+ {0x1314,0x1314},{0x1315,0x1315}, /* 1314 */
+ {0x1316,0x1316},{0x1317,0x1317}, /* 1316 */
+ {0x1318,0x1318},{0x1319,0x1319}, /* 1318 */
+ {0x131A,0x131A},{0x131B,0x131B}, /* 131A */
+ {0x131C,0x131C},{0x131D,0x131D}, /* 131C */
+ {0x131E,0x131E},{0x131F,0x131F}, /* 131E */
+ {0x1320,0x1320},{0x1321,0x1321}, /* 1320 */
+ {0x1322,0x1322},{0x1323,0x1323}, /* 1322 */
+ {0x1324,0x1324},{0x1325,0x1325}, /* 1324 */
+ {0x1326,0x1326},{0x1327,0x1327}, /* 1326 */
+ {0x1328,0x1328},{0x1329,0x1329}, /* 1328 */
+ {0x132A,0x132A},{0x132B,0x132B}, /* 132A */
+ {0x132C,0x132C},{0x132D,0x132D}, /* 132C */
+ {0x132E,0x132E},{0x132F,0x132F}, /* 132E */
+ {0x1330,0x1330},{0x1331,0x1331}, /* 1330 */
+ {0x1332,0x1332},{0x1333,0x1333}, /* 1332 */
+ {0x1334,0x1334},{0x1335,0x1335}, /* 1334 */
+ {0x1336,0x1336},{0x1337,0x1337}, /* 1336 */
+ {0x1338,0x1338},{0x1339,0x1339}, /* 1338 */
+ {0x133A,0x133A},{0x133B,0x133B}, /* 133A */
+ {0x133C,0x133C},{0x133D,0x133D}, /* 133C */
+ {0x133E,0x133E},{0x133F,0x133F}, /* 133E */
+ {0x1340,0x1340},{0x1341,0x1341}, /* 1340 */
+ {0x1342,0x1342},{0x1343,0x1343}, /* 1342 */
+ {0x1344,0x1344},{0x1345,0x1345}, /* 1344 */
+ {0x1346,0x1346},{0x1347,0x1347}, /* 1346 */
+ {0x1348,0x1348},{0x1349,0x1349}, /* 1348 */
+ {0x134A,0x134A},{0x134B,0x134B}, /* 134A */
+ {0x134C,0x134C},{0x134D,0x134D}, /* 134C */
+ {0x134E,0x134E},{0x134F,0x134F}, /* 134E */
+ {0x1350,0x1350},{0x1351,0x1351}, /* 1350 */
+ {0x1352,0x1352},{0x1353,0x1353}, /* 1352 */
+ {0x1354,0x1354},{0x1355,0x1355}, /* 1354 */
+ {0x1356,0x1356},{0x1357,0x1357}, /* 1356 */
+ {0x1358,0x1358},{0x1359,0x1359}, /* 1358 */
+ {0x135A,0x135A},{0x135B,0x135B}, /* 135A */
+ {0x135C,0x135C},{0x135D,0x135D}, /* 135C */
+ {0x135E,0x135E},{0x135F,0x135F}, /* 135E */
+ {0x1360,0x1360},{0x1361,0x1361}, /* 1360 */
+ {0x1362,0x1362},{0x1363,0x1363}, /* 1362 */
+ {0x1364,0x1364},{0x1365,0x1365}, /* 1364 */
+ {0x1366,0x1366},{0x1367,0x1367}, /* 1366 */
+ {0x1368,0x1368},{0x1369,0x1369}, /* 1368 */
+ {0x136A,0x136A},{0x136B,0x136B}, /* 136A */
+ {0x136C,0x136C},{0x136D,0x136D}, /* 136C */
+ {0x136E,0x136E},{0x136F,0x136F}, /* 136E */
+ {0x1370,0x1370},{0x1371,0x1371}, /* 1370 */
+ {0x1372,0x1372},{0x1373,0x1373}, /* 1372 */
+ {0x1374,0x1374},{0x1375,0x1375}, /* 1374 */
+ {0x1376,0x1376},{0x1377,0x1377}, /* 1376 */
+ {0x1378,0x1378},{0x1379,0x1379}, /* 1378 */
+ {0x137A,0x137A},{0x137B,0x137B}, /* 137A */
+ {0x137C,0x137C},{0x137D,0x137D}, /* 137C */
+ {0x137E,0x137E},{0x137F,0x137F}, /* 137E */
+ {0x1380,0x1380},{0x1381,0x1381}, /* 1380 */
+ {0x1382,0x1382},{0x1383,0x1383}, /* 1382 */
+ {0x1384,0x1384},{0x1385,0x1385}, /* 1384 */
+ {0x1386,0x1386},{0x1387,0x1387}, /* 1386 */
+ {0x1388,0x1388},{0x1389,0x1389}, /* 1388 */
+ {0x138A,0x138A},{0x138B,0x138B}, /* 138A */
+ {0x138C,0x138C},{0x138D,0x138D}, /* 138C */
+ {0x138E,0x138E},{0x138F,0x138F}, /* 138E */
+ {0x1390,0x1390},{0x1391,0x1391}, /* 1390 */
+ {0x1392,0x1392},{0x1393,0x1393}, /* 1392 */
+ {0x1394,0x1394},{0x1395,0x1395}, /* 1394 */
+ {0x1396,0x1396},{0x1397,0x1397}, /* 1396 */
+ {0x1398,0x1398},{0x1399,0x1399}, /* 1398 */
+ {0x139A,0x139A},{0x139B,0x139B}, /* 139A */
+ {0x139C,0x139C},{0x139D,0x139D}, /* 139C */
+ {0x139E,0x139E},{0x139F,0x139F}, /* 139E */
+ {0x13A0,0xAB70},{0x13A1,0xAB71}, /* 13A0 */
+ {0x13A2,0xAB72},{0x13A3,0xAB73}, /* 13A2 */
+ {0x13A4,0xAB74},{0x13A5,0xAB75}, /* 13A4 */
+ {0x13A6,0xAB76},{0x13A7,0xAB77}, /* 13A6 */
+ {0x13A8,0xAB78},{0x13A9,0xAB79}, /* 13A8 */
+ {0x13AA,0xAB7A},{0x13AB,0xAB7B}, /* 13AA */
+ {0x13AC,0xAB7C},{0x13AD,0xAB7D}, /* 13AC */
+ {0x13AE,0xAB7E},{0x13AF,0xAB7F}, /* 13AE */
+ {0x13B0,0xAB80},{0x13B1,0xAB81}, /* 13B0 */
+ {0x13B2,0xAB82},{0x13B3,0xAB83}, /* 13B2 */
+ {0x13B4,0xAB84},{0x13B5,0xAB85}, /* 13B4 */
+ {0x13B6,0xAB86},{0x13B7,0xAB87}, /* 13B6 */
+ {0x13B8,0xAB88},{0x13B9,0xAB89}, /* 13B8 */
+ {0x13BA,0xAB8A},{0x13BB,0xAB8B}, /* 13BA */
+ {0x13BC,0xAB8C},{0x13BD,0xAB8D}, /* 13BC */
+ {0x13BE,0xAB8E},{0x13BF,0xAB8F}, /* 13BE */
+ {0x13C0,0xAB90},{0x13C1,0xAB91}, /* 13C0 */
+ {0x13C2,0xAB92},{0x13C3,0xAB93}, /* 13C2 */
+ {0x13C4,0xAB94},{0x13C5,0xAB95}, /* 13C4 */
+ {0x13C6,0xAB96},{0x13C7,0xAB97}, /* 13C6 */
+ {0x13C8,0xAB98},{0x13C9,0xAB99}, /* 13C8 */
+ {0x13CA,0xAB9A},{0x13CB,0xAB9B}, /* 13CA */
+ {0x13CC,0xAB9C},{0x13CD,0xAB9D}, /* 13CC */
+ {0x13CE,0xAB9E},{0x13CF,0xAB9F}, /* 13CE */
+ {0x13D0,0xABA0},{0x13D1,0xABA1}, /* 13D0 */
+ {0x13D2,0xABA2},{0x13D3,0xABA3}, /* 13D2 */
+ {0x13D4,0xABA4},{0x13D5,0xABA5}, /* 13D4 */
+ {0x13D6,0xABA6},{0x13D7,0xABA7}, /* 13D6 */
+ {0x13D8,0xABA8},{0x13D9,0xABA9}, /* 13D8 */
+ {0x13DA,0xABAA},{0x13DB,0xABAB}, /* 13DA */
+ {0x13DC,0xABAC},{0x13DD,0xABAD}, /* 13DC */
+ {0x13DE,0xABAE},{0x13DF,0xABAF}, /* 13DE */
+ {0x13E0,0xABB0},{0x13E1,0xABB1}, /* 13E0 */
+ {0x13E2,0xABB2},{0x13E3,0xABB3}, /* 13E2 */
+ {0x13E4,0xABB4},{0x13E5,0xABB5}, /* 13E4 */
+ {0x13E6,0xABB6},{0x13E7,0xABB7}, /* 13E6 */
+ {0x13E8,0xABB8},{0x13E9,0xABB9}, /* 13E8 */
+ {0x13EA,0xABBA},{0x13EB,0xABBB}, /* 13EA */
+ {0x13EC,0xABBC},{0x13ED,0xABBD}, /* 13EC */
+ {0x13EE,0xABBE},{0x13EF,0xABBF}, /* 13EE */
+ {0x13F0,0x13F8},{0x13F1,0x13F9}, /* 13F0 */
+ {0x13F2,0x13FA},{0x13F3,0x13FB}, /* 13F2 */
+ {0x13F4,0x13FC},{0x13F5,0x13FD}, /* 13F4 */
+ {0x13F6,0x13F6},{0x13F7,0x13F7}, /* 13F6 */
+ {0x13F0,0x13F8},{0x13F1,0x13F9}, /* 13F8 */
+ {0x13F2,0x13FA},{0x13F3,0x13FB}, /* 13FA */
+ {0x13F4,0x13FC},{0x13F5,0x13FD}, /* 13FC */
+ {0x13FE,0x13FE},{0x13FF,0x13FF} /* 13FE */
+};
+
+static const MY_CASEFOLD_CHARACTER u1400_casefold_page1C[256]={
+ {0x1C00,0x1C00},{0x1C01,0x1C01}, /* 1C00 */
+ {0x1C02,0x1C02},{0x1C03,0x1C03}, /* 1C02 */
+ {0x1C04,0x1C04},{0x1C05,0x1C05}, /* 1C04 */
+ {0x1C06,0x1C06},{0x1C07,0x1C07}, /* 1C06 */
+ {0x1C08,0x1C08},{0x1C09,0x1C09}, /* 1C08 */
+ {0x1C0A,0x1C0A},{0x1C0B,0x1C0B}, /* 1C0A */
+ {0x1C0C,0x1C0C},{0x1C0D,0x1C0D}, /* 1C0C */
+ {0x1C0E,0x1C0E},{0x1C0F,0x1C0F}, /* 1C0E */
+ {0x1C10,0x1C10},{0x1C11,0x1C11}, /* 1C10 */
+ {0x1C12,0x1C12},{0x1C13,0x1C13}, /* 1C12 */
+ {0x1C14,0x1C14},{0x1C15,0x1C15}, /* 1C14 */
+ {0x1C16,0x1C16},{0x1C17,0x1C17}, /* 1C16 */
+ {0x1C18,0x1C18},{0x1C19,0x1C19}, /* 1C18 */
+ {0x1C1A,0x1C1A},{0x1C1B,0x1C1B}, /* 1C1A */
+ {0x1C1C,0x1C1C},{0x1C1D,0x1C1D}, /* 1C1C */
+ {0x1C1E,0x1C1E},{0x1C1F,0x1C1F}, /* 1C1E */
+ {0x1C20,0x1C20},{0x1C21,0x1C21}, /* 1C20 */
+ {0x1C22,0x1C22},{0x1C23,0x1C23}, /* 1C22 */
+ {0x1C24,0x1C24},{0x1C25,0x1C25}, /* 1C24 */
+ {0x1C26,0x1C26},{0x1C27,0x1C27}, /* 1C26 */
+ {0x1C28,0x1C28},{0x1C29,0x1C29}, /* 1C28 */
+ {0x1C2A,0x1C2A},{0x1C2B,0x1C2B}, /* 1C2A */
+ {0x1C2C,0x1C2C},{0x1C2D,0x1C2D}, /* 1C2C */
+ {0x1C2E,0x1C2E},{0x1C2F,0x1C2F}, /* 1C2E */
+ {0x1C30,0x1C30},{0x1C31,0x1C31}, /* 1C30 */
+ {0x1C32,0x1C32},{0x1C33,0x1C33}, /* 1C32 */
+ {0x1C34,0x1C34},{0x1C35,0x1C35}, /* 1C34 */
+ {0x1C36,0x1C36},{0x1C37,0x1C37}, /* 1C36 */
+ {0x1C38,0x1C38},{0x1C39,0x1C39}, /* 1C38 */
+ {0x1C3A,0x1C3A},{0x1C3B,0x1C3B}, /* 1C3A */
+ {0x1C3C,0x1C3C},{0x1C3D,0x1C3D}, /* 1C3C */
+ {0x1C3E,0x1C3E},{0x1C3F,0x1C3F}, /* 1C3E */
+ {0x1C40,0x1C40},{0x1C41,0x1C41}, /* 1C40 */
+ {0x1C42,0x1C42},{0x1C43,0x1C43}, /* 1C42 */
+ {0x1C44,0x1C44},{0x1C45,0x1C45}, /* 1C44 */
+ {0x1C46,0x1C46},{0x1C47,0x1C47}, /* 1C46 */
+ {0x1C48,0x1C48},{0x1C49,0x1C49}, /* 1C48 */
+ {0x1C4A,0x1C4A},{0x1C4B,0x1C4B}, /* 1C4A */
+ {0x1C4C,0x1C4C},{0x1C4D,0x1C4D}, /* 1C4C */
+ {0x1C4E,0x1C4E},{0x1C4F,0x1C4F}, /* 1C4E */
+ {0x1C50,0x1C50},{0x1C51,0x1C51}, /* 1C50 */
+ {0x1C52,0x1C52},{0x1C53,0x1C53}, /* 1C52 */
+ {0x1C54,0x1C54},{0x1C55,0x1C55}, /* 1C54 */
+ {0x1C56,0x1C56},{0x1C57,0x1C57}, /* 1C56 */
+ {0x1C58,0x1C58},{0x1C59,0x1C59}, /* 1C58 */
+ {0x1C5A,0x1C5A},{0x1C5B,0x1C5B}, /* 1C5A */
+ {0x1C5C,0x1C5C},{0x1C5D,0x1C5D}, /* 1C5C */
+ {0x1C5E,0x1C5E},{0x1C5F,0x1C5F}, /* 1C5E */
+ {0x1C60,0x1C60},{0x1C61,0x1C61}, /* 1C60 */
+ {0x1C62,0x1C62},{0x1C63,0x1C63}, /* 1C62 */
+ {0x1C64,0x1C64},{0x1C65,0x1C65}, /* 1C64 */
+ {0x1C66,0x1C66},{0x1C67,0x1C67}, /* 1C66 */
+ {0x1C68,0x1C68},{0x1C69,0x1C69}, /* 1C68 */
+ {0x1C6A,0x1C6A},{0x1C6B,0x1C6B}, /* 1C6A */
+ {0x1C6C,0x1C6C},{0x1C6D,0x1C6D}, /* 1C6C */
+ {0x1C6E,0x1C6E},{0x1C6F,0x1C6F}, /* 1C6E */
+ {0x1C70,0x1C70},{0x1C71,0x1C71}, /* 1C70 */
+ {0x1C72,0x1C72},{0x1C73,0x1C73}, /* 1C72 */
+ {0x1C74,0x1C74},{0x1C75,0x1C75}, /* 1C74 */
+ {0x1C76,0x1C76},{0x1C77,0x1C77}, /* 1C76 */
+ {0x1C78,0x1C78},{0x1C79,0x1C79}, /* 1C78 */
+ {0x1C7A,0x1C7A},{0x1C7B,0x1C7B}, /* 1C7A */
+ {0x1C7C,0x1C7C},{0x1C7D,0x1C7D}, /* 1C7C */
+ {0x1C7E,0x1C7E},{0x1C7F,0x1C7F}, /* 1C7E */
+ {0x0412,0x1C80},{0x0414,0x1C81}, /* 1C80 */
+ {0x041E,0x1C82},{0x0421,0x1C83}, /* 1C82 */
+ {0x0422,0x1C84},{0x0422,0x1C85}, /* 1C84 */
+ {0x042A,0x1C86},{0x0462,0x1C87}, /* 1C86 */
+ {0xA64A,0x1C88},{0x1C89,0x1C89}, /* 1C88 */
+ {0x1C8A,0x1C8A},{0x1C8B,0x1C8B}, /* 1C8A */
+ {0x1C8C,0x1C8C},{0x1C8D,0x1C8D}, /* 1C8C */
+ {0x1C8E,0x1C8E},{0x1C8F,0x1C8F}, /* 1C8E */
+ {0x1C90,0x10D0},{0x1C91,0x10D1}, /* 1C90 */
+ {0x1C92,0x10D2},{0x1C93,0x10D3}, /* 1C92 */
+ {0x1C94,0x10D4},{0x1C95,0x10D5}, /* 1C94 */
+ {0x1C96,0x10D6},{0x1C97,0x10D7}, /* 1C96 */
+ {0x1C98,0x10D8},{0x1C99,0x10D9}, /* 1C98 */
+ {0x1C9A,0x10DA},{0x1C9B,0x10DB}, /* 1C9A */
+ {0x1C9C,0x10DC},{0x1C9D,0x10DD}, /* 1C9C */
+ {0x1C9E,0x10DE},{0x1C9F,0x10DF}, /* 1C9E */
+ {0x1CA0,0x10E0},{0x1CA1,0x10E1}, /* 1CA0 */
+ {0x1CA2,0x10E2},{0x1CA3,0x10E3}, /* 1CA2 */
+ {0x1CA4,0x10E4},{0x1CA5,0x10E5}, /* 1CA4 */
+ {0x1CA6,0x10E6},{0x1CA7,0x10E7}, /* 1CA6 */
+ {0x1CA8,0x10E8},{0x1CA9,0x10E9}, /* 1CA8 */
+ {0x1CAA,0x10EA},{0x1CAB,0x10EB}, /* 1CAA */
+ {0x1CAC,0x10EC},{0x1CAD,0x10ED}, /* 1CAC */
+ {0x1CAE,0x10EE},{0x1CAF,0x10EF}, /* 1CAE */
+ {0x1CB0,0x10F0},{0x1CB1,0x10F1}, /* 1CB0 */
+ {0x1CB2,0x10F2},{0x1CB3,0x10F3}, /* 1CB2 */
+ {0x1CB4,0x10F4},{0x1CB5,0x10F5}, /* 1CB4 */
+ {0x1CB6,0x10F6},{0x1CB7,0x10F7}, /* 1CB6 */
+ {0x1CB8,0x10F8},{0x1CB9,0x10F9}, /* 1CB8 */
+ {0x1CBA,0x10FA},{0x1CBB,0x1CBB}, /* 1CBA */
+ {0x1CBC,0x1CBC},{0x1CBD,0x10FD}, /* 1CBC */
+ {0x1CBE,0x10FE},{0x1CBF,0x10FF}, /* 1CBE */
+ {0x1CC0,0x1CC0},{0x1CC1,0x1CC1}, /* 1CC0 */
+ {0x1CC2,0x1CC2},{0x1CC3,0x1CC3}, /* 1CC2 */
+ {0x1CC4,0x1CC4},{0x1CC5,0x1CC5}, /* 1CC4 */
+ {0x1CC6,0x1CC6},{0x1CC7,0x1CC7}, /* 1CC6 */
+ {0x1CC8,0x1CC8},{0x1CC9,0x1CC9}, /* 1CC8 */
+ {0x1CCA,0x1CCA},{0x1CCB,0x1CCB}, /* 1CCA */
+ {0x1CCC,0x1CCC},{0x1CCD,0x1CCD}, /* 1CCC */
+ {0x1CCE,0x1CCE},{0x1CCF,0x1CCF}, /* 1CCE */
+ {0x1CD0,0x1CD0},{0x1CD1,0x1CD1}, /* 1CD0 */
+ {0x1CD2,0x1CD2},{0x1CD3,0x1CD3}, /* 1CD2 */
+ {0x1CD4,0x1CD4},{0x1CD5,0x1CD5}, /* 1CD4 */
+ {0x1CD6,0x1CD6},{0x1CD7,0x1CD7}, /* 1CD6 */
+ {0x1CD8,0x1CD8},{0x1CD9,0x1CD9}, /* 1CD8 */
+ {0x1CDA,0x1CDA},{0x1CDB,0x1CDB}, /* 1CDA */
+ {0x1CDC,0x1CDC},{0x1CDD,0x1CDD}, /* 1CDC */
+ {0x1CDE,0x1CDE},{0x1CDF,0x1CDF}, /* 1CDE */
+ {0x1CE0,0x1CE0},{0x1CE1,0x1CE1}, /* 1CE0 */
+ {0x1CE2,0x1CE2},{0x1CE3,0x1CE3}, /* 1CE2 */
+ {0x1CE4,0x1CE4},{0x1CE5,0x1CE5}, /* 1CE4 */
+ {0x1CE6,0x1CE6},{0x1CE7,0x1CE7}, /* 1CE6 */
+ {0x1CE8,0x1CE8},{0x1CE9,0x1CE9}, /* 1CE8 */
+ {0x1CEA,0x1CEA},{0x1CEB,0x1CEB}, /* 1CEA */
+ {0x1CEC,0x1CEC},{0x1CED,0x1CED}, /* 1CEC */
+ {0x1CEE,0x1CEE},{0x1CEF,0x1CEF}, /* 1CEE */
+ {0x1CF0,0x1CF0},{0x1CF1,0x1CF1}, /* 1CF0 */
+ {0x1CF2,0x1CF2},{0x1CF3,0x1CF3}, /* 1CF2 */
+ {0x1CF4,0x1CF4},{0x1CF5,0x1CF5}, /* 1CF4 */
+ {0x1CF6,0x1CF6},{0x1CF7,0x1CF7}, /* 1CF6 */
+ {0x1CF8,0x1CF8},{0x1CF9,0x1CF9}, /* 1CF8 */
+ {0x1CFA,0x1CFA},{0x1CFB,0x1CFB}, /* 1CFA */
+ {0x1CFC,0x1CFC},{0x1CFD,0x1CFD}, /* 1CFC */
+ {0x1CFE,0x1CFE},{0x1CFF,0x1CFF} /* 1CFE */
+};
+
+static const MY_CASEFOLD_CHARACTER u1400_casefold_page1D[256]={
+ {0x1D00,0x1D00},{0x1D01,0x1D01}, /* 1D00 */
+ {0x1D02,0x1D02},{0x1D03,0x1D03}, /* 1D02 */
+ {0x1D04,0x1D04},{0x1D05,0x1D05}, /* 1D04 */
+ {0x1D06,0x1D06},{0x1D07,0x1D07}, /* 1D06 */
+ {0x1D08,0x1D08},{0x1D09,0x1D09}, /* 1D08 */
+ {0x1D0A,0x1D0A},{0x1D0B,0x1D0B}, /* 1D0A */
+ {0x1D0C,0x1D0C},{0x1D0D,0x1D0D}, /* 1D0C */
+ {0x1D0E,0x1D0E},{0x1D0F,0x1D0F}, /* 1D0E */
+ {0x1D10,0x1D10},{0x1D11,0x1D11}, /* 1D10 */
+ {0x1D12,0x1D12},{0x1D13,0x1D13}, /* 1D12 */
+ {0x1D14,0x1D14},{0x1D15,0x1D15}, /* 1D14 */
+ {0x1D16,0x1D16},{0x1D17,0x1D17}, /* 1D16 */
+ {0x1D18,0x1D18},{0x1D19,0x1D19}, /* 1D18 */
+ {0x1D1A,0x1D1A},{0x1D1B,0x1D1B}, /* 1D1A */
+ {0x1D1C,0x1D1C},{0x1D1D,0x1D1D}, /* 1D1C */
+ {0x1D1E,0x1D1E},{0x1D1F,0x1D1F}, /* 1D1E */
+ {0x1D20,0x1D20},{0x1D21,0x1D21}, /* 1D20 */
+ {0x1D22,0x1D22},{0x1D23,0x1D23}, /* 1D22 */
+ {0x1D24,0x1D24},{0x1D25,0x1D25}, /* 1D24 */
+ {0x1D26,0x1D26},{0x1D27,0x1D27}, /* 1D26 */
+ {0x1D28,0x1D28},{0x1D29,0x1D29}, /* 1D28 */
+ {0x1D2A,0x1D2A},{0x1D2B,0x1D2B}, /* 1D2A */
+ {0x1D2C,0x1D2C},{0x1D2D,0x1D2D}, /* 1D2C */
+ {0x1D2E,0x1D2E},{0x1D2F,0x1D2F}, /* 1D2E */
+ {0x1D30,0x1D30},{0x1D31,0x1D31}, /* 1D30 */
+ {0x1D32,0x1D32},{0x1D33,0x1D33}, /* 1D32 */
+ {0x1D34,0x1D34},{0x1D35,0x1D35}, /* 1D34 */
+ {0x1D36,0x1D36},{0x1D37,0x1D37}, /* 1D36 */
+ {0x1D38,0x1D38},{0x1D39,0x1D39}, /* 1D38 */
+ {0x1D3A,0x1D3A},{0x1D3B,0x1D3B}, /* 1D3A */
+ {0x1D3C,0x1D3C},{0x1D3D,0x1D3D}, /* 1D3C */
+ {0x1D3E,0x1D3E},{0x1D3F,0x1D3F}, /* 1D3E */
+ {0x1D40,0x1D40},{0x1D41,0x1D41}, /* 1D40 */
+ {0x1D42,0x1D42},{0x1D43,0x1D43}, /* 1D42 */
+ {0x1D44,0x1D44},{0x1D45,0x1D45}, /* 1D44 */
+ {0x1D46,0x1D46},{0x1D47,0x1D47}, /* 1D46 */
+ {0x1D48,0x1D48},{0x1D49,0x1D49}, /* 1D48 */
+ {0x1D4A,0x1D4A},{0x1D4B,0x1D4B}, /* 1D4A */
+ {0x1D4C,0x1D4C},{0x1D4D,0x1D4D}, /* 1D4C */
+ {0x1D4E,0x1D4E},{0x1D4F,0x1D4F}, /* 1D4E */
+ {0x1D50,0x1D50},{0x1D51,0x1D51}, /* 1D50 */
+ {0x1D52,0x1D52},{0x1D53,0x1D53}, /* 1D52 */
+ {0x1D54,0x1D54},{0x1D55,0x1D55}, /* 1D54 */
+ {0x1D56,0x1D56},{0x1D57,0x1D57}, /* 1D56 */
+ {0x1D58,0x1D58},{0x1D59,0x1D59}, /* 1D58 */
+ {0x1D5A,0x1D5A},{0x1D5B,0x1D5B}, /* 1D5A */
+ {0x1D5C,0x1D5C},{0x1D5D,0x1D5D}, /* 1D5C */
+ {0x1D5E,0x1D5E},{0x1D5F,0x1D5F}, /* 1D5E */
+ {0x1D60,0x1D60},{0x1D61,0x1D61}, /* 1D60 */
+ {0x1D62,0x1D62},{0x1D63,0x1D63}, /* 1D62 */
+ {0x1D64,0x1D64},{0x1D65,0x1D65}, /* 1D64 */
+ {0x1D66,0x1D66},{0x1D67,0x1D67}, /* 1D66 */
+ {0x1D68,0x1D68},{0x1D69,0x1D69}, /* 1D68 */
+ {0x1D6A,0x1D6A},{0x1D6B,0x1D6B}, /* 1D6A */
+ {0x1D6C,0x1D6C},{0x1D6D,0x1D6D}, /* 1D6C */
+ {0x1D6E,0x1D6E},{0x1D6F,0x1D6F}, /* 1D6E */
+ {0x1D70,0x1D70},{0x1D71,0x1D71}, /* 1D70 */
+ {0x1D72,0x1D72},{0x1D73,0x1D73}, /* 1D72 */
+ {0x1D74,0x1D74},{0x1D75,0x1D75}, /* 1D74 */
+ {0x1D76,0x1D76},{0x1D77,0x1D77}, /* 1D76 */
+ {0x1D78,0x1D78},{0xA77D,0x1D79}, /* 1D78 */
+ {0x1D7A,0x1D7A},{0x1D7B,0x1D7B}, /* 1D7A */
+ {0x1D7C,0x1D7C},{0x2C63,0x1D7D}, /* 1D7C */
+ {0x1D7E,0x1D7E},{0x1D7F,0x1D7F}, /* 1D7E */
+ {0x1D80,0x1D80},{0x1D81,0x1D81}, /* 1D80 */
+ {0x1D82,0x1D82},{0x1D83,0x1D83}, /* 1D82 */
+ {0x1D84,0x1D84},{0x1D85,0x1D85}, /* 1D84 */
+ {0x1D86,0x1D86},{0x1D87,0x1D87}, /* 1D86 */
+ {0x1D88,0x1D88},{0x1D89,0x1D89}, /* 1D88 */
+ {0x1D8A,0x1D8A},{0x1D8B,0x1D8B}, /* 1D8A */
+ {0x1D8C,0x1D8C},{0x1D8D,0x1D8D}, /* 1D8C */
+ {0xA7C6,0x1D8E},{0x1D8F,0x1D8F}, /* 1D8E */
+ {0x1D90,0x1D90},{0x1D91,0x1D91}, /* 1D90 */
+ {0x1D92,0x1D92},{0x1D93,0x1D93}, /* 1D92 */
+ {0x1D94,0x1D94},{0x1D95,0x1D95}, /* 1D94 */
+ {0x1D96,0x1D96},{0x1D97,0x1D97}, /* 1D96 */
+ {0x1D98,0x1D98},{0x1D99,0x1D99}, /* 1D98 */
+ {0x1D9A,0x1D9A},{0x1D9B,0x1D9B}, /* 1D9A */
+ {0x1D9C,0x1D9C},{0x1D9D,0x1D9D}, /* 1D9C */
+ {0x1D9E,0x1D9E},{0x1D9F,0x1D9F}, /* 1D9E */
+ {0x1DA0,0x1DA0},{0x1DA1,0x1DA1}, /* 1DA0 */
+ {0x1DA2,0x1DA2},{0x1DA3,0x1DA3}, /* 1DA2 */
+ {0x1DA4,0x1DA4},{0x1DA5,0x1DA5}, /* 1DA4 */
+ {0x1DA6,0x1DA6},{0x1DA7,0x1DA7}, /* 1DA6 */
+ {0x1DA8,0x1DA8},{0x1DA9,0x1DA9}, /* 1DA8 */
+ {0x1DAA,0x1DAA},{0x1DAB,0x1DAB}, /* 1DAA */
+ {0x1DAC,0x1DAC},{0x1DAD,0x1DAD}, /* 1DAC */
+ {0x1DAE,0x1DAE},{0x1DAF,0x1DAF}, /* 1DAE */
+ {0x1DB0,0x1DB0},{0x1DB1,0x1DB1}, /* 1DB0 */
+ {0x1DB2,0x1DB2},{0x1DB3,0x1DB3}, /* 1DB2 */
+ {0x1DB4,0x1DB4},{0x1DB5,0x1DB5}, /* 1DB4 */
+ {0x1DB6,0x1DB6},{0x1DB7,0x1DB7}, /* 1DB6 */
+ {0x1DB8,0x1DB8},{0x1DB9,0x1DB9}, /* 1DB8 */
+ {0x1DBA,0x1DBA},{0x1DBB,0x1DBB}, /* 1DBA */
+ {0x1DBC,0x1DBC},{0x1DBD,0x1DBD}, /* 1DBC */
+ {0x1DBE,0x1DBE},{0x1DBF,0x1DBF}, /* 1DBE */
+ {0x1DC0,0x1DC0},{0x1DC1,0x1DC1}, /* 1DC0 */
+ {0x1DC2,0x1DC2},{0x1DC3,0x1DC3}, /* 1DC2 */
+ {0x1DC4,0x1DC4},{0x1DC5,0x1DC5}, /* 1DC4 */
+ {0x1DC6,0x1DC6},{0x1DC7,0x1DC7}, /* 1DC6 */
+ {0x1DC8,0x1DC8},{0x1DC9,0x1DC9}, /* 1DC8 */
+ {0x1DCA,0x1DCA},{0x1DCB,0x1DCB}, /* 1DCA */
+ {0x1DCC,0x1DCC},{0x1DCD,0x1DCD}, /* 1DCC */
+ {0x1DCE,0x1DCE},{0x1DCF,0x1DCF}, /* 1DCE */
+ {0x1DD0,0x1DD0},{0x1DD1,0x1DD1}, /* 1DD0 */
+ {0x1DD2,0x1DD2},{0x1DD3,0x1DD3}, /* 1DD2 */
+ {0x1DD4,0x1DD4},{0x1DD5,0x1DD5}, /* 1DD4 */
+ {0x1DD6,0x1DD6},{0x1DD7,0x1DD7}, /* 1DD6 */
+ {0x1DD8,0x1DD8},{0x1DD9,0x1DD9}, /* 1DD8 */
+ {0x1DDA,0x1DDA},{0x1DDB,0x1DDB}, /* 1DDA */
+ {0x1DDC,0x1DDC},{0x1DDD,0x1DDD}, /* 1DDC */
+ {0x1DDE,0x1DDE},{0x1DDF,0x1DDF}, /* 1DDE */
+ {0x1DE0,0x1DE0},{0x1DE1,0x1DE1}, /* 1DE0 */
+ {0x1DE2,0x1DE2},{0x1DE3,0x1DE3}, /* 1DE2 */
+ {0x1DE4,0x1DE4},{0x1DE5,0x1DE5}, /* 1DE4 */
+ {0x1DE6,0x1DE6},{0x1DE7,0x1DE7}, /* 1DE6 */
+ {0x1DE8,0x1DE8},{0x1DE9,0x1DE9}, /* 1DE8 */
+ {0x1DEA,0x1DEA},{0x1DEB,0x1DEB}, /* 1DEA */
+ {0x1DEC,0x1DEC},{0x1DED,0x1DED}, /* 1DEC */
+ {0x1DEE,0x1DEE},{0x1DEF,0x1DEF}, /* 1DEE */
+ {0x1DF0,0x1DF0},{0x1DF1,0x1DF1}, /* 1DF0 */
+ {0x1DF2,0x1DF2},{0x1DF3,0x1DF3}, /* 1DF2 */
+ {0x1DF4,0x1DF4},{0x1DF5,0x1DF5}, /* 1DF4 */
+ {0x1DF6,0x1DF6},{0x1DF7,0x1DF7}, /* 1DF6 */
+ {0x1DF8,0x1DF8},{0x1DF9,0x1DF9}, /* 1DF8 */
+ {0x1DFA,0x1DFA},{0x1DFB,0x1DFB}, /* 1DFA */
+ {0x1DFC,0x1DFC},{0x1DFD,0x1DFD}, /* 1DFC */
+ {0x1DFE,0x1DFE},{0x1DFF,0x1DFF} /* 1DFE */
+};
+
+static const MY_CASEFOLD_CHARACTER u1400_casefold_page1E[256]={
+ {0x1E00,0x1E01},{0x1E00,0x1E01}, /* 1E00 */
+ {0x1E02,0x1E03},{0x1E02,0x1E03}, /* 1E02 */
+ {0x1E04,0x1E05},{0x1E04,0x1E05}, /* 1E04 */
+ {0x1E06,0x1E07},{0x1E06,0x1E07}, /* 1E06 */
+ {0x1E08,0x1E09},{0x1E08,0x1E09}, /* 1E08 */
+ {0x1E0A,0x1E0B},{0x1E0A,0x1E0B}, /* 1E0A */
+ {0x1E0C,0x1E0D},{0x1E0C,0x1E0D}, /* 1E0C */
+ {0x1E0E,0x1E0F},{0x1E0E,0x1E0F}, /* 1E0E */
+ {0x1E10,0x1E11},{0x1E10,0x1E11}, /* 1E10 */
+ {0x1E12,0x1E13},{0x1E12,0x1E13}, /* 1E12 */
+ {0x1E14,0x1E15},{0x1E14,0x1E15}, /* 1E14 */
+ {0x1E16,0x1E17},{0x1E16,0x1E17}, /* 1E16 */
+ {0x1E18,0x1E19},{0x1E18,0x1E19}, /* 1E18 */
+ {0x1E1A,0x1E1B},{0x1E1A,0x1E1B}, /* 1E1A */
+ {0x1E1C,0x1E1D},{0x1E1C,0x1E1D}, /* 1E1C */
+ {0x1E1E,0x1E1F},{0x1E1E,0x1E1F}, /* 1E1E */
+ {0x1E20,0x1E21},{0x1E20,0x1E21}, /* 1E20 */
+ {0x1E22,0x1E23},{0x1E22,0x1E23}, /* 1E22 */
+ {0x1E24,0x1E25},{0x1E24,0x1E25}, /* 1E24 */
+ {0x1E26,0x1E27},{0x1E26,0x1E27}, /* 1E26 */
+ {0x1E28,0x1E29},{0x1E28,0x1E29}, /* 1E28 */
+ {0x1E2A,0x1E2B},{0x1E2A,0x1E2B}, /* 1E2A */
+ {0x1E2C,0x1E2D},{0x1E2C,0x1E2D}, /* 1E2C */
+ {0x1E2E,0x1E2F},{0x1E2E,0x1E2F}, /* 1E2E */
+ {0x1E30,0x1E31},{0x1E30,0x1E31}, /* 1E30 */
+ {0x1E32,0x1E33},{0x1E32,0x1E33}, /* 1E32 */
+ {0x1E34,0x1E35},{0x1E34,0x1E35}, /* 1E34 */
+ {0x1E36,0x1E37},{0x1E36,0x1E37}, /* 1E36 */
+ {0x1E38,0x1E39},{0x1E38,0x1E39}, /* 1E38 */
+ {0x1E3A,0x1E3B},{0x1E3A,0x1E3B}, /* 1E3A */
+ {0x1E3C,0x1E3D},{0x1E3C,0x1E3D}, /* 1E3C */
+ {0x1E3E,0x1E3F},{0x1E3E,0x1E3F}, /* 1E3E */
+ {0x1E40,0x1E41},{0x1E40,0x1E41}, /* 1E40 */
+ {0x1E42,0x1E43},{0x1E42,0x1E43}, /* 1E42 */
+ {0x1E44,0x1E45},{0x1E44,0x1E45}, /* 1E44 */
+ {0x1E46,0x1E47},{0x1E46,0x1E47}, /* 1E46 */
+ {0x1E48,0x1E49},{0x1E48,0x1E49}, /* 1E48 */
+ {0x1E4A,0x1E4B},{0x1E4A,0x1E4B}, /* 1E4A */
+ {0x1E4C,0x1E4D},{0x1E4C,0x1E4D}, /* 1E4C */
+ {0x1E4E,0x1E4F},{0x1E4E,0x1E4F}, /* 1E4E */
+ {0x1E50,0x1E51},{0x1E50,0x1E51}, /* 1E50 */
+ {0x1E52,0x1E53},{0x1E52,0x1E53}, /* 1E52 */
+ {0x1E54,0x1E55},{0x1E54,0x1E55}, /* 1E54 */
+ {0x1E56,0x1E57},{0x1E56,0x1E57}, /* 1E56 */
+ {0x1E58,0x1E59},{0x1E58,0x1E59}, /* 1E58 */
+ {0x1E5A,0x1E5B},{0x1E5A,0x1E5B}, /* 1E5A */
+ {0x1E5C,0x1E5D},{0x1E5C,0x1E5D}, /* 1E5C */
+ {0x1E5E,0x1E5F},{0x1E5E,0x1E5F}, /* 1E5E */
+ {0x1E60,0x1E61},{0x1E60,0x1E61}, /* 1E60 */
+ {0x1E62,0x1E63},{0x1E62,0x1E63}, /* 1E62 */
+ {0x1E64,0x1E65},{0x1E64,0x1E65}, /* 1E64 */
+ {0x1E66,0x1E67},{0x1E66,0x1E67}, /* 1E66 */
+ {0x1E68,0x1E69},{0x1E68,0x1E69}, /* 1E68 */
+ {0x1E6A,0x1E6B},{0x1E6A,0x1E6B}, /* 1E6A */
+ {0x1E6C,0x1E6D},{0x1E6C,0x1E6D}, /* 1E6C */
+ {0x1E6E,0x1E6F},{0x1E6E,0x1E6F}, /* 1E6E */
+ {0x1E70,0x1E71},{0x1E70,0x1E71}, /* 1E70 */
+ {0x1E72,0x1E73},{0x1E72,0x1E73}, /* 1E72 */
+ {0x1E74,0x1E75},{0x1E74,0x1E75}, /* 1E74 */
+ {0x1E76,0x1E77},{0x1E76,0x1E77}, /* 1E76 */
+ {0x1E78,0x1E79},{0x1E78,0x1E79}, /* 1E78 */
+ {0x1E7A,0x1E7B},{0x1E7A,0x1E7B}, /* 1E7A */
+ {0x1E7C,0x1E7D},{0x1E7C,0x1E7D}, /* 1E7C */
+ {0x1E7E,0x1E7F},{0x1E7E,0x1E7F}, /* 1E7E */
+ {0x1E80,0x1E81},{0x1E80,0x1E81}, /* 1E80 */
+ {0x1E82,0x1E83},{0x1E82,0x1E83}, /* 1E82 */
+ {0x1E84,0x1E85},{0x1E84,0x1E85}, /* 1E84 */
+ {0x1E86,0x1E87},{0x1E86,0x1E87}, /* 1E86 */
+ {0x1E88,0x1E89},{0x1E88,0x1E89}, /* 1E88 */
+ {0x1E8A,0x1E8B},{0x1E8A,0x1E8B}, /* 1E8A */
+ {0x1E8C,0x1E8D},{0x1E8C,0x1E8D}, /* 1E8C */
+ {0x1E8E,0x1E8F},{0x1E8E,0x1E8F}, /* 1E8E */
+ {0x1E90,0x1E91},{0x1E90,0x1E91}, /* 1E90 */
+ {0x1E92,0x1E93},{0x1E92,0x1E93}, /* 1E92 */
+ {0x1E94,0x1E95},{0x1E94,0x1E95}, /* 1E94 */
+ {0x1E96,0x1E96},{0x1E97,0x1E97}, /* 1E96 */
+ {0x1E98,0x1E98},{0x1E99,0x1E99}, /* 1E98 */
+ {0x1E9A,0x1E9A},{0x1E60,0x1E9B}, /* 1E9A */
+ {0x1E9C,0x1E9C},{0x1E9D,0x1E9D}, /* 1E9C */
+ {0x1E9E,0x00DF},{0x1E9F,0x1E9F}, /* 1E9E */
+ {0x1EA0,0x1EA1},{0x1EA0,0x1EA1}, /* 1EA0 */
+ {0x1EA2,0x1EA3},{0x1EA2,0x1EA3}, /* 1EA2 */
+ {0x1EA4,0x1EA5},{0x1EA4,0x1EA5}, /* 1EA4 */
+ {0x1EA6,0x1EA7},{0x1EA6,0x1EA7}, /* 1EA6 */
+ {0x1EA8,0x1EA9},{0x1EA8,0x1EA9}, /* 1EA8 */
+ {0x1EAA,0x1EAB},{0x1EAA,0x1EAB}, /* 1EAA */
+ {0x1EAC,0x1EAD},{0x1EAC,0x1EAD}, /* 1EAC */
+ {0x1EAE,0x1EAF},{0x1EAE,0x1EAF}, /* 1EAE */
+ {0x1EB0,0x1EB1},{0x1EB0,0x1EB1}, /* 1EB0 */
+ {0x1EB2,0x1EB3},{0x1EB2,0x1EB3}, /* 1EB2 */
+ {0x1EB4,0x1EB5},{0x1EB4,0x1EB5}, /* 1EB4 */
+ {0x1EB6,0x1EB7},{0x1EB6,0x1EB7}, /* 1EB6 */
+ {0x1EB8,0x1EB9},{0x1EB8,0x1EB9}, /* 1EB8 */
+ {0x1EBA,0x1EBB},{0x1EBA,0x1EBB}, /* 1EBA */
+ {0x1EBC,0x1EBD},{0x1EBC,0x1EBD}, /* 1EBC */
+ {0x1EBE,0x1EBF},{0x1EBE,0x1EBF}, /* 1EBE */
+ {0x1EC0,0x1EC1},{0x1EC0,0x1EC1}, /* 1EC0 */
+ {0x1EC2,0x1EC3},{0x1EC2,0x1EC3}, /* 1EC2 */
+ {0x1EC4,0x1EC5},{0x1EC4,0x1EC5}, /* 1EC4 */
+ {0x1EC6,0x1EC7},{0x1EC6,0x1EC7}, /* 1EC6 */
+ {0x1EC8,0x1EC9},{0x1EC8,0x1EC9}, /* 1EC8 */
+ {0x1ECA,0x1ECB},{0x1ECA,0x1ECB}, /* 1ECA */
+ {0x1ECC,0x1ECD},{0x1ECC,0x1ECD}, /* 1ECC */
+ {0x1ECE,0x1ECF},{0x1ECE,0x1ECF}, /* 1ECE */
+ {0x1ED0,0x1ED1},{0x1ED0,0x1ED1}, /* 1ED0 */
+ {0x1ED2,0x1ED3},{0x1ED2,0x1ED3}, /* 1ED2 */
+ {0x1ED4,0x1ED5},{0x1ED4,0x1ED5}, /* 1ED4 */
+ {0x1ED6,0x1ED7},{0x1ED6,0x1ED7}, /* 1ED6 */
+ {0x1ED8,0x1ED9},{0x1ED8,0x1ED9}, /* 1ED8 */
+ {0x1EDA,0x1EDB},{0x1EDA,0x1EDB}, /* 1EDA */
+ {0x1EDC,0x1EDD},{0x1EDC,0x1EDD}, /* 1EDC */
+ {0x1EDE,0x1EDF},{0x1EDE,0x1EDF}, /* 1EDE */
+ {0x1EE0,0x1EE1},{0x1EE0,0x1EE1}, /* 1EE0 */
+ {0x1EE2,0x1EE3},{0x1EE2,0x1EE3}, /* 1EE2 */
+ {0x1EE4,0x1EE5},{0x1EE4,0x1EE5}, /* 1EE4 */
+ {0x1EE6,0x1EE7},{0x1EE6,0x1EE7}, /* 1EE6 */
+ {0x1EE8,0x1EE9},{0x1EE8,0x1EE9}, /* 1EE8 */
+ {0x1EEA,0x1EEB},{0x1EEA,0x1EEB}, /* 1EEA */
+ {0x1EEC,0x1EED},{0x1EEC,0x1EED}, /* 1EEC */
+ {0x1EEE,0x1EEF},{0x1EEE,0x1EEF}, /* 1EEE */
+ {0x1EF0,0x1EF1},{0x1EF0,0x1EF1}, /* 1EF0 */
+ {0x1EF2,0x1EF3},{0x1EF2,0x1EF3}, /* 1EF2 */
+ {0x1EF4,0x1EF5},{0x1EF4,0x1EF5}, /* 1EF4 */
+ {0x1EF6,0x1EF7},{0x1EF6,0x1EF7}, /* 1EF6 */
+ {0x1EF8,0x1EF9},{0x1EF8,0x1EF9}, /* 1EF8 */
+ {0x1EFA,0x1EFB},{0x1EFA,0x1EFB}, /* 1EFA */
+ {0x1EFC,0x1EFD},{0x1EFC,0x1EFD}, /* 1EFC */
+ {0x1EFE,0x1EFF},{0x1EFE,0x1EFF} /* 1EFE */
+};
+
+static const MY_CASEFOLD_CHARACTER u1400_casefold_page1F[256]={
+ {0x1F08,0x1F00},{0x1F09,0x1F01}, /* 1F00 */
+ {0x1F0A,0x1F02},{0x1F0B,0x1F03}, /* 1F02 */
+ {0x1F0C,0x1F04},{0x1F0D,0x1F05}, /* 1F04 */
+ {0x1F0E,0x1F06},{0x1F0F,0x1F07}, /* 1F06 */
+ {0x1F08,0x1F00},{0x1F09,0x1F01}, /* 1F08 */
+ {0x1F0A,0x1F02},{0x1F0B,0x1F03}, /* 1F0A */
+ {0x1F0C,0x1F04},{0x1F0D,0x1F05}, /* 1F0C */
+ {0x1F0E,0x1F06},{0x1F0F,0x1F07}, /* 1F0E */
+ {0x1F18,0x1F10},{0x1F19,0x1F11}, /* 1F10 */
+ {0x1F1A,0x1F12},{0x1F1B,0x1F13}, /* 1F12 */
+ {0x1F1C,0x1F14},{0x1F1D,0x1F15}, /* 1F14 */
+ {0x1F16,0x1F16},{0x1F17,0x1F17}, /* 1F16 */
+ {0x1F18,0x1F10},{0x1F19,0x1F11}, /* 1F18 */
+ {0x1F1A,0x1F12},{0x1F1B,0x1F13}, /* 1F1A */
+ {0x1F1C,0x1F14},{0x1F1D,0x1F15}, /* 1F1C */
+ {0x1F1E,0x1F1E},{0x1F1F,0x1F1F}, /* 1F1E */
+ {0x1F28,0x1F20},{0x1F29,0x1F21}, /* 1F20 */
+ {0x1F2A,0x1F22},{0x1F2B,0x1F23}, /* 1F22 */
+ {0x1F2C,0x1F24},{0x1F2D,0x1F25}, /* 1F24 */
+ {0x1F2E,0x1F26},{0x1F2F,0x1F27}, /* 1F26 */
+ {0x1F28,0x1F20},{0x1F29,0x1F21}, /* 1F28 */
+ {0x1F2A,0x1F22},{0x1F2B,0x1F23}, /* 1F2A */
+ {0x1F2C,0x1F24},{0x1F2D,0x1F25}, /* 1F2C */
+ {0x1F2E,0x1F26},{0x1F2F,0x1F27}, /* 1F2E */
+ {0x1F38,0x1F30},{0x1F39,0x1F31}, /* 1F30 */
+ {0x1F3A,0x1F32},{0x1F3B,0x1F33}, /* 1F32 */
+ {0x1F3C,0x1F34},{0x1F3D,0x1F35}, /* 1F34 */
+ {0x1F3E,0x1F36},{0x1F3F,0x1F37}, /* 1F36 */
+ {0x1F38,0x1F30},{0x1F39,0x1F31}, /* 1F38 */
+ {0x1F3A,0x1F32},{0x1F3B,0x1F33}, /* 1F3A */
+ {0x1F3C,0x1F34},{0x1F3D,0x1F35}, /* 1F3C */
+ {0x1F3E,0x1F36},{0x1F3F,0x1F37}, /* 1F3E */
+ {0x1F48,0x1F40},{0x1F49,0x1F41}, /* 1F40 */
+ {0x1F4A,0x1F42},{0x1F4B,0x1F43}, /* 1F42 */
+ {0x1F4C,0x1F44},{0x1F4D,0x1F45}, /* 1F44 */
+ {0x1F46,0x1F46},{0x1F47,0x1F47}, /* 1F46 */
+ {0x1F48,0x1F40},{0x1F49,0x1F41}, /* 1F48 */
+ {0x1F4A,0x1F42},{0x1F4B,0x1F43}, /* 1F4A */
+ {0x1F4C,0x1F44},{0x1F4D,0x1F45}, /* 1F4C */
+ {0x1F4E,0x1F4E},{0x1F4F,0x1F4F}, /* 1F4E */
+ {0x1F50,0x1F50},{0x1F59,0x1F51}, /* 1F50 */
+ {0x1F52,0x1F52},{0x1F5B,0x1F53}, /* 1F52 */
+ {0x1F54,0x1F54},{0x1F5D,0x1F55}, /* 1F54 */
+ {0x1F56,0x1F56},{0x1F5F,0x1F57}, /* 1F56 */
+ {0x1F58,0x1F58},{0x1F59,0x1F51}, /* 1F58 */
+ {0x1F5A,0x1F5A},{0x1F5B,0x1F53}, /* 1F5A */
+ {0x1F5C,0x1F5C},{0x1F5D,0x1F55}, /* 1F5C */
+ {0x1F5E,0x1F5E},{0x1F5F,0x1F57}, /* 1F5E */
+ {0x1F68,0x1F60},{0x1F69,0x1F61}, /* 1F60 */
+ {0x1F6A,0x1F62},{0x1F6B,0x1F63}, /* 1F62 */
+ {0x1F6C,0x1F64},{0x1F6D,0x1F65}, /* 1F64 */
+ {0x1F6E,0x1F66},{0x1F6F,0x1F67}, /* 1F66 */
+ {0x1F68,0x1F60},{0x1F69,0x1F61}, /* 1F68 */
+ {0x1F6A,0x1F62},{0x1F6B,0x1F63}, /* 1F6A */
+ {0x1F6C,0x1F64},{0x1F6D,0x1F65}, /* 1F6C */
+ {0x1F6E,0x1F66},{0x1F6F,0x1F67}, /* 1F6E */
+ {0x1FBA,0x1F70},{0x1FBB,0x1F71}, /* 1F70 */
+ {0x1FC8,0x1F72},{0x1FC9,0x1F73}, /* 1F72 */
+ {0x1FCA,0x1F74},{0x1FCB,0x1F75}, /* 1F74 */
+ {0x1FDA,0x1F76},{0x1FDB,0x1F77}, /* 1F76 */
+ {0x1FF8,0x1F78},{0x1FF9,0x1F79}, /* 1F78 */
+ {0x1FEA,0x1F7A},{0x1FEB,0x1F7B}, /* 1F7A */
+ {0x1FFA,0x1F7C},{0x1FFB,0x1F7D}, /* 1F7C */
+ {0x1F7E,0x1F7E},{0x1F7F,0x1F7F}, /* 1F7E */
+ {0x1F88,0x1F80},{0x1F89,0x1F81}, /* 1F80 */
+ {0x1F8A,0x1F82},{0x1F8B,0x1F83}, /* 1F82 */
+ {0x1F8C,0x1F84},{0x1F8D,0x1F85}, /* 1F84 */
+ {0x1F8E,0x1F86},{0x1F8F,0x1F87}, /* 1F86 */
+ {0x1F88,0x1F80},{0x1F89,0x1F81}, /* 1F88 */
+ {0x1F8A,0x1F82},{0x1F8B,0x1F83}, /* 1F8A */
+ {0x1F8C,0x1F84},{0x1F8D,0x1F85}, /* 1F8C */
+ {0x1F8E,0x1F86},{0x1F8F,0x1F87}, /* 1F8E */
+ {0x1F98,0x1F90},{0x1F99,0x1F91}, /* 1F90 */
+ {0x1F9A,0x1F92},{0x1F9B,0x1F93}, /* 1F92 */
+ {0x1F9C,0x1F94},{0x1F9D,0x1F95}, /* 1F94 */
+ {0x1F9E,0x1F96},{0x1F9F,0x1F97}, /* 1F96 */
+ {0x1F98,0x1F90},{0x1F99,0x1F91}, /* 1F98 */
+ {0x1F9A,0x1F92},{0x1F9B,0x1F93}, /* 1F9A */
+ {0x1F9C,0x1F94},{0x1F9D,0x1F95}, /* 1F9C */
+ {0x1F9E,0x1F96},{0x1F9F,0x1F97}, /* 1F9E */
+ {0x1FA8,0x1FA0},{0x1FA9,0x1FA1}, /* 1FA0 */
+ {0x1FAA,0x1FA2},{0x1FAB,0x1FA3}, /* 1FA2 */
+ {0x1FAC,0x1FA4},{0x1FAD,0x1FA5}, /* 1FA4 */
+ {0x1FAE,0x1FA6},{0x1FAF,0x1FA7}, /* 1FA6 */
+ {0x1FA8,0x1FA0},{0x1FA9,0x1FA1}, /* 1FA8 */
+ {0x1FAA,0x1FA2},{0x1FAB,0x1FA3}, /* 1FAA */
+ {0x1FAC,0x1FA4},{0x1FAD,0x1FA5}, /* 1FAC */
+ {0x1FAE,0x1FA6},{0x1FAF,0x1FA7}, /* 1FAE */
+ {0x1FB8,0x1FB0},{0x1FB9,0x1FB1}, /* 1FB0 */
+ {0x1FB2,0x1FB2},{0x1FBC,0x1FB3}, /* 1FB2 */
+ {0x1FB4,0x1FB4},{0x1FB5,0x1FB5}, /* 1FB4 */
+ {0x1FB6,0x1FB6},{0x1FB7,0x1FB7}, /* 1FB6 */
+ {0x1FB8,0x1FB0},{0x1FB9,0x1FB1}, /* 1FB8 */
+ {0x1FBA,0x1F70},{0x1FBB,0x1F71}, /* 1FBA */
+ {0x1FBC,0x1FB3},{0x1FBD,0x1FBD}, /* 1FBC */
+ {0x0399,0x1FBE},{0x1FBF,0x1FBF}, /* 1FBE */
+ {0x1FC0,0x1FC0},{0x1FC1,0x1FC1}, /* 1FC0 */
+ {0x1FC2,0x1FC2},{0x1FCC,0x1FC3}, /* 1FC2 */
+ {0x1FC4,0x1FC4},{0x1FC5,0x1FC5}, /* 1FC4 */
+ {0x1FC6,0x1FC6},{0x1FC7,0x1FC7}, /* 1FC6 */
+ {0x1FC8,0x1F72},{0x1FC9,0x1F73}, /* 1FC8 */
+ {0x1FCA,0x1F74},{0x1FCB,0x1F75}, /* 1FCA */
+ {0x1FCC,0x1FC3},{0x1FCD,0x1FCD}, /* 1FCC */
+ {0x1FCE,0x1FCE},{0x1FCF,0x1FCF}, /* 1FCE */
+ {0x1FD8,0x1FD0},{0x1FD9,0x1FD1}, /* 1FD0 */
+ {0x1FD2,0x1FD2},{0x1FD3,0x1FD3}, /* 1FD2 */
+ {0x1FD4,0x1FD4},{0x1FD5,0x1FD5}, /* 1FD4 */
+ {0x1FD6,0x1FD6},{0x1FD7,0x1FD7}, /* 1FD6 */
+ {0x1FD8,0x1FD0},{0x1FD9,0x1FD1}, /* 1FD8 */
+ {0x1FDA,0x1F76},{0x1FDB,0x1F77}, /* 1FDA */
+ {0x1FDC,0x1FDC},{0x1FDD,0x1FDD}, /* 1FDC */
+ {0x1FDE,0x1FDE},{0x1FDF,0x1FDF}, /* 1FDE */
+ {0x1FE8,0x1FE0},{0x1FE9,0x1FE1}, /* 1FE0 */
+ {0x1FE2,0x1FE2},{0x1FE3,0x1FE3}, /* 1FE2 */
+ {0x1FE4,0x1FE4},{0x1FEC,0x1FE5}, /* 1FE4 */
+ {0x1FE6,0x1FE6},{0x1FE7,0x1FE7}, /* 1FE6 */
+ {0x1FE8,0x1FE0},{0x1FE9,0x1FE1}, /* 1FE8 */
+ {0x1FEA,0x1F7A},{0x1FEB,0x1F7B}, /* 1FEA */
+ {0x1FEC,0x1FE5},{0x1FED,0x1FED}, /* 1FEC */
+ {0x1FEE,0x1FEE},{0x1FEF,0x1FEF}, /* 1FEE */
+ {0x1FF0,0x1FF0},{0x1FF1,0x1FF1}, /* 1FF0 */
+ {0x1FF2,0x1FF2},{0x1FFC,0x1FF3}, /* 1FF2 */
+ {0x1FF4,0x1FF4},{0x1FF5,0x1FF5}, /* 1FF4 */
+ {0x1FF6,0x1FF6},{0x1FF7,0x1FF7}, /* 1FF6 */
+ {0x1FF8,0x1F78},{0x1FF9,0x1F79}, /* 1FF8 */
+ {0x1FFA,0x1F7C},{0x1FFB,0x1F7D}, /* 1FFA */
+ {0x1FFC,0x1FF3},{0x1FFD,0x1FFD}, /* 1FFC */
+ {0x1FFE,0x1FFE},{0x1FFF,0x1FFF} /* 1FFE */
+};
+
+static const MY_CASEFOLD_CHARACTER u1400_casefold_page21[256]={
+ {0x2100,0x2100},{0x2101,0x2101}, /* 2100 */
+ {0x2102,0x2102},{0x2103,0x2103}, /* 2102 */
+ {0x2104,0x2104},{0x2105,0x2105}, /* 2104 */
+ {0x2106,0x2106},{0x2107,0x2107}, /* 2106 */
+ {0x2108,0x2108},{0x2109,0x2109}, /* 2108 */
+ {0x210A,0x210A},{0x210B,0x210B}, /* 210A */
+ {0x210C,0x210C},{0x210D,0x210D}, /* 210C */
+ {0x210E,0x210E},{0x210F,0x210F}, /* 210E */
+ {0x2110,0x2110},{0x2111,0x2111}, /* 2110 */
+ {0x2112,0x2112},{0x2113,0x2113}, /* 2112 */
+ {0x2114,0x2114},{0x2115,0x2115}, /* 2114 */
+ {0x2116,0x2116},{0x2117,0x2117}, /* 2116 */
+ {0x2118,0x2118},{0x2119,0x2119}, /* 2118 */
+ {0x211A,0x211A},{0x211B,0x211B}, /* 211A */
+ {0x211C,0x211C},{0x211D,0x211D}, /* 211C */
+ {0x211E,0x211E},{0x211F,0x211F}, /* 211E */
+ {0x2120,0x2120},{0x2121,0x2121}, /* 2120 */
+ {0x2122,0x2122},{0x2123,0x2123}, /* 2122 */
+ {0x2124,0x2124},{0x2125,0x2125}, /* 2124 */
+ {0x2126,0x03C9},{0x2127,0x2127}, /* 2126 */
+ {0x2128,0x2128},{0x2129,0x2129}, /* 2128 */
+ {0x212A,0x006B},{0x212B,0x00E5}, /* 212A */
+ {0x212C,0x212C},{0x212D,0x212D}, /* 212C */
+ {0x212E,0x212E},{0x212F,0x212F}, /* 212E */
+ {0x2130,0x2130},{0x2131,0x2131}, /* 2130 */
+ {0x2132,0x214E},{0x2133,0x2133}, /* 2132 */
+ {0x2134,0x2134},{0x2135,0x2135}, /* 2134 */
+ {0x2136,0x2136},{0x2137,0x2137}, /* 2136 */
+ {0x2138,0x2138},{0x2139,0x2139}, /* 2138 */
+ {0x213A,0x213A},{0x213B,0x213B}, /* 213A */
+ {0x213C,0x213C},{0x213D,0x213D}, /* 213C */
+ {0x213E,0x213E},{0x213F,0x213F}, /* 213E */
+ {0x2140,0x2140},{0x2141,0x2141}, /* 2140 */
+ {0x2142,0x2142},{0x2143,0x2143}, /* 2142 */
+ {0x2144,0x2144},{0x2145,0x2145}, /* 2144 */
+ {0x2146,0x2146},{0x2147,0x2147}, /* 2146 */
+ {0x2148,0x2148},{0x2149,0x2149}, /* 2148 */
+ {0x214A,0x214A},{0x214B,0x214B}, /* 214A */
+ {0x214C,0x214C},{0x214D,0x214D}, /* 214C */
+ {0x2132,0x214E},{0x214F,0x214F}, /* 214E */
+ {0x2150,0x2150},{0x2151,0x2151}, /* 2150 */
+ {0x2152,0x2152},{0x2153,0x2153}, /* 2152 */
+ {0x2154,0x2154},{0x2155,0x2155}, /* 2154 */
+ {0x2156,0x2156},{0x2157,0x2157}, /* 2156 */
+ {0x2158,0x2158},{0x2159,0x2159}, /* 2158 */
+ {0x215A,0x215A},{0x215B,0x215B}, /* 215A */
+ {0x215C,0x215C},{0x215D,0x215D}, /* 215C */
+ {0x215E,0x215E},{0x215F,0x215F}, /* 215E */
+ {0x2160,0x2170},{0x2161,0x2171}, /* 2160 */
+ {0x2162,0x2172},{0x2163,0x2173}, /* 2162 */
+ {0x2164,0x2174},{0x2165,0x2175}, /* 2164 */
+ {0x2166,0x2176},{0x2167,0x2177}, /* 2166 */
+ {0x2168,0x2178},{0x2169,0x2179}, /* 2168 */
+ {0x216A,0x217A},{0x216B,0x217B}, /* 216A */
+ {0x216C,0x217C},{0x216D,0x217D}, /* 216C */
+ {0x216E,0x217E},{0x216F,0x217F}, /* 216E */
+ {0x2160,0x2170},{0x2161,0x2171}, /* 2170 */
+ {0x2162,0x2172},{0x2163,0x2173}, /* 2172 */
+ {0x2164,0x2174},{0x2165,0x2175}, /* 2174 */
+ {0x2166,0x2176},{0x2167,0x2177}, /* 2176 */
+ {0x2168,0x2178},{0x2169,0x2179}, /* 2178 */
+ {0x216A,0x217A},{0x216B,0x217B}, /* 217A */
+ {0x216C,0x217C},{0x216D,0x217D}, /* 217C */
+ {0x216E,0x217E},{0x216F,0x217F}, /* 217E */
+ {0x2180,0x2180},{0x2181,0x2181}, /* 2180 */
+ {0x2182,0x2182},{0x2183,0x2184}, /* 2182 */
+ {0x2183,0x2184},{0x2185,0x2185}, /* 2184 */
+ {0x2186,0x2186},{0x2187,0x2187}, /* 2186 */
+ {0x2188,0x2188},{0x2189,0x2189}, /* 2188 */
+ {0x218A,0x218A},{0x218B,0x218B}, /* 218A */
+ {0x218C,0x218C},{0x218D,0x218D}, /* 218C */
+ {0x218E,0x218E},{0x218F,0x218F}, /* 218E */
+ {0x2190,0x2190},{0x2191,0x2191}, /* 2190 */
+ {0x2192,0x2192},{0x2193,0x2193}, /* 2192 */
+ {0x2194,0x2194},{0x2195,0x2195}, /* 2194 */
+ {0x2196,0x2196},{0x2197,0x2197}, /* 2196 */
+ {0x2198,0x2198},{0x2199,0x2199}, /* 2198 */
+ {0x219A,0x219A},{0x219B,0x219B}, /* 219A */
+ {0x219C,0x219C},{0x219D,0x219D}, /* 219C */
+ {0x219E,0x219E},{0x219F,0x219F}, /* 219E */
+ {0x21A0,0x21A0},{0x21A1,0x21A1}, /* 21A0 */
+ {0x21A2,0x21A2},{0x21A3,0x21A3}, /* 21A2 */
+ {0x21A4,0x21A4},{0x21A5,0x21A5}, /* 21A4 */
+ {0x21A6,0x21A6},{0x21A7,0x21A7}, /* 21A6 */
+ {0x21A8,0x21A8},{0x21A9,0x21A9}, /* 21A8 */
+ {0x21AA,0x21AA},{0x21AB,0x21AB}, /* 21AA */
+ {0x21AC,0x21AC},{0x21AD,0x21AD}, /* 21AC */
+ {0x21AE,0x21AE},{0x21AF,0x21AF}, /* 21AE */
+ {0x21B0,0x21B0},{0x21B1,0x21B1}, /* 21B0 */
+ {0x21B2,0x21B2},{0x21B3,0x21B3}, /* 21B2 */
+ {0x21B4,0x21B4},{0x21B5,0x21B5}, /* 21B4 */
+ {0x21B6,0x21B6},{0x21B7,0x21B7}, /* 21B6 */
+ {0x21B8,0x21B8},{0x21B9,0x21B9}, /* 21B8 */
+ {0x21BA,0x21BA},{0x21BB,0x21BB}, /* 21BA */
+ {0x21BC,0x21BC},{0x21BD,0x21BD}, /* 21BC */
+ {0x21BE,0x21BE},{0x21BF,0x21BF}, /* 21BE */
+ {0x21C0,0x21C0},{0x21C1,0x21C1}, /* 21C0 */
+ {0x21C2,0x21C2},{0x21C3,0x21C3}, /* 21C2 */
+ {0x21C4,0x21C4},{0x21C5,0x21C5}, /* 21C4 */
+ {0x21C6,0x21C6},{0x21C7,0x21C7}, /* 21C6 */
+ {0x21C8,0x21C8},{0x21C9,0x21C9}, /* 21C8 */
+ {0x21CA,0x21CA},{0x21CB,0x21CB}, /* 21CA */
+ {0x21CC,0x21CC},{0x21CD,0x21CD}, /* 21CC */
+ {0x21CE,0x21CE},{0x21CF,0x21CF}, /* 21CE */
+ {0x21D0,0x21D0},{0x21D1,0x21D1}, /* 21D0 */
+ {0x21D2,0x21D2},{0x21D3,0x21D3}, /* 21D2 */
+ {0x21D4,0x21D4},{0x21D5,0x21D5}, /* 21D4 */
+ {0x21D6,0x21D6},{0x21D7,0x21D7}, /* 21D6 */
+ {0x21D8,0x21D8},{0x21D9,0x21D9}, /* 21D8 */
+ {0x21DA,0x21DA},{0x21DB,0x21DB}, /* 21DA */
+ {0x21DC,0x21DC},{0x21DD,0x21DD}, /* 21DC */
+ {0x21DE,0x21DE},{0x21DF,0x21DF}, /* 21DE */
+ {0x21E0,0x21E0},{0x21E1,0x21E1}, /* 21E0 */
+ {0x21E2,0x21E2},{0x21E3,0x21E3}, /* 21E2 */
+ {0x21E4,0x21E4},{0x21E5,0x21E5}, /* 21E4 */
+ {0x21E6,0x21E6},{0x21E7,0x21E7}, /* 21E6 */
+ {0x21E8,0x21E8},{0x21E9,0x21E9}, /* 21E8 */
+ {0x21EA,0x21EA},{0x21EB,0x21EB}, /* 21EA */
+ {0x21EC,0x21EC},{0x21ED,0x21ED}, /* 21EC */
+ {0x21EE,0x21EE},{0x21EF,0x21EF}, /* 21EE */
+ {0x21F0,0x21F0},{0x21F1,0x21F1}, /* 21F0 */
+ {0x21F2,0x21F2},{0x21F3,0x21F3}, /* 21F2 */
+ {0x21F4,0x21F4},{0x21F5,0x21F5}, /* 21F4 */
+ {0x21F6,0x21F6},{0x21F7,0x21F7}, /* 21F6 */
+ {0x21F8,0x21F8},{0x21F9,0x21F9}, /* 21F8 */
+ {0x21FA,0x21FA},{0x21FB,0x21FB}, /* 21FA */
+ {0x21FC,0x21FC},{0x21FD,0x21FD}, /* 21FC */
+ {0x21FE,0x21FE},{0x21FF,0x21FF} /* 21FE */
+};
+
+static const MY_CASEFOLD_CHARACTER u1400_casefold_page24[256]={
+ {0x2400,0x2400},{0x2401,0x2401}, /* 2400 */
+ {0x2402,0x2402},{0x2403,0x2403}, /* 2402 */
+ {0x2404,0x2404},{0x2405,0x2405}, /* 2404 */
+ {0x2406,0x2406},{0x2407,0x2407}, /* 2406 */
+ {0x2408,0x2408},{0x2409,0x2409}, /* 2408 */
+ {0x240A,0x240A},{0x240B,0x240B}, /* 240A */
+ {0x240C,0x240C},{0x240D,0x240D}, /* 240C */
+ {0x240E,0x240E},{0x240F,0x240F}, /* 240E */
+ {0x2410,0x2410},{0x2411,0x2411}, /* 2410 */
+ {0x2412,0x2412},{0x2413,0x2413}, /* 2412 */
+ {0x2414,0x2414},{0x2415,0x2415}, /* 2414 */
+ {0x2416,0x2416},{0x2417,0x2417}, /* 2416 */
+ {0x2418,0x2418},{0x2419,0x2419}, /* 2418 */
+ {0x241A,0x241A},{0x241B,0x241B}, /* 241A */
+ {0x241C,0x241C},{0x241D,0x241D}, /* 241C */
+ {0x241E,0x241E},{0x241F,0x241F}, /* 241E */
+ {0x2420,0x2420},{0x2421,0x2421}, /* 2420 */
+ {0x2422,0x2422},{0x2423,0x2423}, /* 2422 */
+ {0x2424,0x2424},{0x2425,0x2425}, /* 2424 */
+ {0x2426,0x2426},{0x2427,0x2427}, /* 2426 */
+ {0x2428,0x2428},{0x2429,0x2429}, /* 2428 */
+ {0x242A,0x242A},{0x242B,0x242B}, /* 242A */
+ {0x242C,0x242C},{0x242D,0x242D}, /* 242C */
+ {0x242E,0x242E},{0x242F,0x242F}, /* 242E */
+ {0x2430,0x2430},{0x2431,0x2431}, /* 2430 */
+ {0x2432,0x2432},{0x2433,0x2433}, /* 2432 */
+ {0x2434,0x2434},{0x2435,0x2435}, /* 2434 */
+ {0x2436,0x2436},{0x2437,0x2437}, /* 2436 */
+ {0x2438,0x2438},{0x2439,0x2439}, /* 2438 */
+ {0x243A,0x243A},{0x243B,0x243B}, /* 243A */
+ {0x243C,0x243C},{0x243D,0x243D}, /* 243C */
+ {0x243E,0x243E},{0x243F,0x243F}, /* 243E */
+ {0x2440,0x2440},{0x2441,0x2441}, /* 2440 */
+ {0x2442,0x2442},{0x2443,0x2443}, /* 2442 */
+ {0x2444,0x2444},{0x2445,0x2445}, /* 2444 */
+ {0x2446,0x2446},{0x2447,0x2447}, /* 2446 */
+ {0x2448,0x2448},{0x2449,0x2449}, /* 2448 */
+ {0x244A,0x244A},{0x244B,0x244B}, /* 244A */
+ {0x244C,0x244C},{0x244D,0x244D}, /* 244C */
+ {0x244E,0x244E},{0x244F,0x244F}, /* 244E */
+ {0x2450,0x2450},{0x2451,0x2451}, /* 2450 */
+ {0x2452,0x2452},{0x2453,0x2453}, /* 2452 */
+ {0x2454,0x2454},{0x2455,0x2455}, /* 2454 */
+ {0x2456,0x2456},{0x2457,0x2457}, /* 2456 */
+ {0x2458,0x2458},{0x2459,0x2459}, /* 2458 */
+ {0x245A,0x245A},{0x245B,0x245B}, /* 245A */
+ {0x245C,0x245C},{0x245D,0x245D}, /* 245C */
+ {0x245E,0x245E},{0x245F,0x245F}, /* 245E */
+ {0x2460,0x2460},{0x2461,0x2461}, /* 2460 */
+ {0x2462,0x2462},{0x2463,0x2463}, /* 2462 */
+ {0x2464,0x2464},{0x2465,0x2465}, /* 2464 */
+ {0x2466,0x2466},{0x2467,0x2467}, /* 2466 */
+ {0x2468,0x2468},{0x2469,0x2469}, /* 2468 */
+ {0x246A,0x246A},{0x246B,0x246B}, /* 246A */
+ {0x246C,0x246C},{0x246D,0x246D}, /* 246C */
+ {0x246E,0x246E},{0x246F,0x246F}, /* 246E */
+ {0x2470,0x2470},{0x2471,0x2471}, /* 2470 */
+ {0x2472,0x2472},{0x2473,0x2473}, /* 2472 */
+ {0x2474,0x2474},{0x2475,0x2475}, /* 2474 */
+ {0x2476,0x2476},{0x2477,0x2477}, /* 2476 */
+ {0x2478,0x2478},{0x2479,0x2479}, /* 2478 */
+ {0x247A,0x247A},{0x247B,0x247B}, /* 247A */
+ {0x247C,0x247C},{0x247D,0x247D}, /* 247C */
+ {0x247E,0x247E},{0x247F,0x247F}, /* 247E */
+ {0x2480,0x2480},{0x2481,0x2481}, /* 2480 */
+ {0x2482,0x2482},{0x2483,0x2483}, /* 2482 */
+ {0x2484,0x2484},{0x2485,0x2485}, /* 2484 */
+ {0x2486,0x2486},{0x2487,0x2487}, /* 2486 */
+ {0x2488,0x2488},{0x2489,0x2489}, /* 2488 */
+ {0x248A,0x248A},{0x248B,0x248B}, /* 248A */
+ {0x248C,0x248C},{0x248D,0x248D}, /* 248C */
+ {0x248E,0x248E},{0x248F,0x248F}, /* 248E */
+ {0x2490,0x2490},{0x2491,0x2491}, /* 2490 */
+ {0x2492,0x2492},{0x2493,0x2493}, /* 2492 */
+ {0x2494,0x2494},{0x2495,0x2495}, /* 2494 */
+ {0x2496,0x2496},{0x2497,0x2497}, /* 2496 */
+ {0x2498,0x2498},{0x2499,0x2499}, /* 2498 */
+ {0x249A,0x249A},{0x249B,0x249B}, /* 249A */
+ {0x249C,0x249C},{0x249D,0x249D}, /* 249C */
+ {0x249E,0x249E},{0x249F,0x249F}, /* 249E */
+ {0x24A0,0x24A0},{0x24A1,0x24A1}, /* 24A0 */
+ {0x24A2,0x24A2},{0x24A3,0x24A3}, /* 24A2 */
+ {0x24A4,0x24A4},{0x24A5,0x24A5}, /* 24A4 */
+ {0x24A6,0x24A6},{0x24A7,0x24A7}, /* 24A6 */
+ {0x24A8,0x24A8},{0x24A9,0x24A9}, /* 24A8 */
+ {0x24AA,0x24AA},{0x24AB,0x24AB}, /* 24AA */
+ {0x24AC,0x24AC},{0x24AD,0x24AD}, /* 24AC */
+ {0x24AE,0x24AE},{0x24AF,0x24AF}, /* 24AE */
+ {0x24B0,0x24B0},{0x24B1,0x24B1}, /* 24B0 */
+ {0x24B2,0x24B2},{0x24B3,0x24B3}, /* 24B2 */
+ {0x24B4,0x24B4},{0x24B5,0x24B5}, /* 24B4 */
+ {0x24B6,0x24D0},{0x24B7,0x24D1}, /* 24B6 */
+ {0x24B8,0x24D2},{0x24B9,0x24D3}, /* 24B8 */
+ {0x24BA,0x24D4},{0x24BB,0x24D5}, /* 24BA */
+ {0x24BC,0x24D6},{0x24BD,0x24D7}, /* 24BC */
+ {0x24BE,0x24D8},{0x24BF,0x24D9}, /* 24BE */
+ {0x24C0,0x24DA},{0x24C1,0x24DB}, /* 24C0 */
+ {0x24C2,0x24DC},{0x24C3,0x24DD}, /* 24C2 */
+ {0x24C4,0x24DE},{0x24C5,0x24DF}, /* 24C4 */
+ {0x24C6,0x24E0},{0x24C7,0x24E1}, /* 24C6 */
+ {0x24C8,0x24E2},{0x24C9,0x24E3}, /* 24C8 */
+ {0x24CA,0x24E4},{0x24CB,0x24E5}, /* 24CA */
+ {0x24CC,0x24E6},{0x24CD,0x24E7}, /* 24CC */
+ {0x24CE,0x24E8},{0x24CF,0x24E9}, /* 24CE */
+ {0x24B6,0x24D0},{0x24B7,0x24D1}, /* 24D0 */
+ {0x24B8,0x24D2},{0x24B9,0x24D3}, /* 24D2 */
+ {0x24BA,0x24D4},{0x24BB,0x24D5}, /* 24D4 */
+ {0x24BC,0x24D6},{0x24BD,0x24D7}, /* 24D6 */
+ {0x24BE,0x24D8},{0x24BF,0x24D9}, /* 24D8 */
+ {0x24C0,0x24DA},{0x24C1,0x24DB}, /* 24DA */
+ {0x24C2,0x24DC},{0x24C3,0x24DD}, /* 24DC */
+ {0x24C4,0x24DE},{0x24C5,0x24DF}, /* 24DE */
+ {0x24C6,0x24E0},{0x24C7,0x24E1}, /* 24E0 */
+ {0x24C8,0x24E2},{0x24C9,0x24E3}, /* 24E2 */
+ {0x24CA,0x24E4},{0x24CB,0x24E5}, /* 24E4 */
+ {0x24CC,0x24E6},{0x24CD,0x24E7}, /* 24E6 */
+ {0x24CE,0x24E8},{0x24CF,0x24E9}, /* 24E8 */
+ {0x24EA,0x24EA},{0x24EB,0x24EB}, /* 24EA */
+ {0x24EC,0x24EC},{0x24ED,0x24ED}, /* 24EC */
+ {0x24EE,0x24EE},{0x24EF,0x24EF}, /* 24EE */
+ {0x24F0,0x24F0},{0x24F1,0x24F1}, /* 24F0 */
+ {0x24F2,0x24F2},{0x24F3,0x24F3}, /* 24F2 */
+ {0x24F4,0x24F4},{0x24F5,0x24F5}, /* 24F4 */
+ {0x24F6,0x24F6},{0x24F7,0x24F7}, /* 24F6 */
+ {0x24F8,0x24F8},{0x24F9,0x24F9}, /* 24F8 */
+ {0x24FA,0x24FA},{0x24FB,0x24FB}, /* 24FA */
+ {0x24FC,0x24FC},{0x24FD,0x24FD}, /* 24FC */
+ {0x24FE,0x24FE},{0x24FF,0x24FF} /* 24FE */
+};
+
+static const MY_CASEFOLD_CHARACTER u1400_casefold_page2C[256]={
+ {0x2C00,0x2C30},{0x2C01,0x2C31}, /* 2C00 */
+ {0x2C02,0x2C32},{0x2C03,0x2C33}, /* 2C02 */
+ {0x2C04,0x2C34},{0x2C05,0x2C35}, /* 2C04 */
+ {0x2C06,0x2C36},{0x2C07,0x2C37}, /* 2C06 */
+ {0x2C08,0x2C38},{0x2C09,0x2C39}, /* 2C08 */
+ {0x2C0A,0x2C3A},{0x2C0B,0x2C3B}, /* 2C0A */
+ {0x2C0C,0x2C3C},{0x2C0D,0x2C3D}, /* 2C0C */
+ {0x2C0E,0x2C3E},{0x2C0F,0x2C3F}, /* 2C0E */
+ {0x2C10,0x2C40},{0x2C11,0x2C41}, /* 2C10 */
+ {0x2C12,0x2C42},{0x2C13,0x2C43}, /* 2C12 */
+ {0x2C14,0x2C44},{0x2C15,0x2C45}, /* 2C14 */
+ {0x2C16,0x2C46},{0x2C17,0x2C47}, /* 2C16 */
+ {0x2C18,0x2C48},{0x2C19,0x2C49}, /* 2C18 */
+ {0x2C1A,0x2C4A},{0x2C1B,0x2C4B}, /* 2C1A */
+ {0x2C1C,0x2C4C},{0x2C1D,0x2C4D}, /* 2C1C */
+ {0x2C1E,0x2C4E},{0x2C1F,0x2C4F}, /* 2C1E */
+ {0x2C20,0x2C50},{0x2C21,0x2C51}, /* 2C20 */
+ {0x2C22,0x2C52},{0x2C23,0x2C53}, /* 2C22 */
+ {0x2C24,0x2C54},{0x2C25,0x2C55}, /* 2C24 */
+ {0x2C26,0x2C56},{0x2C27,0x2C57}, /* 2C26 */
+ {0x2C28,0x2C58},{0x2C29,0x2C59}, /* 2C28 */
+ {0x2C2A,0x2C5A},{0x2C2B,0x2C5B}, /* 2C2A */
+ {0x2C2C,0x2C5C},{0x2C2D,0x2C5D}, /* 2C2C */
+ {0x2C2E,0x2C5E},{0x2C2F,0x2C5F}, /* 2C2E */
+ {0x2C00,0x2C30},{0x2C01,0x2C31}, /* 2C30 */
+ {0x2C02,0x2C32},{0x2C03,0x2C33}, /* 2C32 */
+ {0x2C04,0x2C34},{0x2C05,0x2C35}, /* 2C34 */
+ {0x2C06,0x2C36},{0x2C07,0x2C37}, /* 2C36 */
+ {0x2C08,0x2C38},{0x2C09,0x2C39}, /* 2C38 */
+ {0x2C0A,0x2C3A},{0x2C0B,0x2C3B}, /* 2C3A */
+ {0x2C0C,0x2C3C},{0x2C0D,0x2C3D}, /* 2C3C */
+ {0x2C0E,0x2C3E},{0x2C0F,0x2C3F}, /* 2C3E */
+ {0x2C10,0x2C40},{0x2C11,0x2C41}, /* 2C40 */
+ {0x2C12,0x2C42},{0x2C13,0x2C43}, /* 2C42 */
+ {0x2C14,0x2C44},{0x2C15,0x2C45}, /* 2C44 */
+ {0x2C16,0x2C46},{0x2C17,0x2C47}, /* 2C46 */
+ {0x2C18,0x2C48},{0x2C19,0x2C49}, /* 2C48 */
+ {0x2C1A,0x2C4A},{0x2C1B,0x2C4B}, /* 2C4A */
+ {0x2C1C,0x2C4C},{0x2C1D,0x2C4D}, /* 2C4C */
+ {0x2C1E,0x2C4E},{0x2C1F,0x2C4F}, /* 2C4E */
+ {0x2C20,0x2C50},{0x2C21,0x2C51}, /* 2C50 */
+ {0x2C22,0x2C52},{0x2C23,0x2C53}, /* 2C52 */
+ {0x2C24,0x2C54},{0x2C25,0x2C55}, /* 2C54 */
+ {0x2C26,0x2C56},{0x2C27,0x2C57}, /* 2C56 */
+ {0x2C28,0x2C58},{0x2C29,0x2C59}, /* 2C58 */
+ {0x2C2A,0x2C5A},{0x2C2B,0x2C5B}, /* 2C5A */
+ {0x2C2C,0x2C5C},{0x2C2D,0x2C5D}, /* 2C5C */
+ {0x2C2E,0x2C5E},{0x2C2F,0x2C5F}, /* 2C5E */
+ {0x2C60,0x2C61},{0x2C60,0x2C61}, /* 2C60 */
+ {0x2C62,0x026B},{0x2C63,0x1D7D}, /* 2C62 */
+ {0x2C64,0x027D},{0x023A,0x2C65}, /* 2C64 */
+ {0x023E,0x2C66},{0x2C67,0x2C68}, /* 2C66 */
+ {0x2C67,0x2C68},{0x2C69,0x2C6A}, /* 2C68 */
+ {0x2C69,0x2C6A},{0x2C6B,0x2C6C}, /* 2C6A */
+ {0x2C6B,0x2C6C},{0x2C6D,0x0251}, /* 2C6C */
+ {0x2C6E,0x0271},{0x2C6F,0x0250}, /* 2C6E */
+ {0x2C70,0x0252},{0x2C71,0x2C71}, /* 2C70 */
+ {0x2C72,0x2C73},{0x2C72,0x2C73}, /* 2C72 */
+ {0x2C74,0x2C74},{0x2C75,0x2C76}, /* 2C74 */
+ {0x2C75,0x2C76},{0x2C77,0x2C77}, /* 2C76 */
+ {0x2C78,0x2C78},{0x2C79,0x2C79}, /* 2C78 */
+ {0x2C7A,0x2C7A},{0x2C7B,0x2C7B}, /* 2C7A */
+ {0x2C7C,0x2C7C},{0x2C7D,0x2C7D}, /* 2C7C */
+ {0x2C7E,0x023F},{0x2C7F,0x0240}, /* 2C7E */
+ {0x2C80,0x2C81},{0x2C80,0x2C81}, /* 2C80 */
+ {0x2C82,0x2C83},{0x2C82,0x2C83}, /* 2C82 */
+ {0x2C84,0x2C85},{0x2C84,0x2C85}, /* 2C84 */
+ {0x2C86,0x2C87},{0x2C86,0x2C87}, /* 2C86 */
+ {0x2C88,0x2C89},{0x2C88,0x2C89}, /* 2C88 */
+ {0x2C8A,0x2C8B},{0x2C8A,0x2C8B}, /* 2C8A */
+ {0x2C8C,0x2C8D},{0x2C8C,0x2C8D}, /* 2C8C */
+ {0x2C8E,0x2C8F},{0x2C8E,0x2C8F}, /* 2C8E */
+ {0x2C90,0x2C91},{0x2C90,0x2C91}, /* 2C90 */
+ {0x2C92,0x2C93},{0x2C92,0x2C93}, /* 2C92 */
+ {0x2C94,0x2C95},{0x2C94,0x2C95}, /* 2C94 */
+ {0x2C96,0x2C97},{0x2C96,0x2C97}, /* 2C96 */
+ {0x2C98,0x2C99},{0x2C98,0x2C99}, /* 2C98 */
+ {0x2C9A,0x2C9B},{0x2C9A,0x2C9B}, /* 2C9A */
+ {0x2C9C,0x2C9D},{0x2C9C,0x2C9D}, /* 2C9C */
+ {0x2C9E,0x2C9F},{0x2C9E,0x2C9F}, /* 2C9E */
+ {0x2CA0,0x2CA1},{0x2CA0,0x2CA1}, /* 2CA0 */
+ {0x2CA2,0x2CA3},{0x2CA2,0x2CA3}, /* 2CA2 */
+ {0x2CA4,0x2CA5},{0x2CA4,0x2CA5}, /* 2CA4 */
+ {0x2CA6,0x2CA7},{0x2CA6,0x2CA7}, /* 2CA6 */
+ {0x2CA8,0x2CA9},{0x2CA8,0x2CA9}, /* 2CA8 */
+ {0x2CAA,0x2CAB},{0x2CAA,0x2CAB}, /* 2CAA */
+ {0x2CAC,0x2CAD},{0x2CAC,0x2CAD}, /* 2CAC */
+ {0x2CAE,0x2CAF},{0x2CAE,0x2CAF}, /* 2CAE */
+ {0x2CB0,0x2CB1},{0x2CB0,0x2CB1}, /* 2CB0 */
+ {0x2CB2,0x2CB3},{0x2CB2,0x2CB3}, /* 2CB2 */
+ {0x2CB4,0x2CB5},{0x2CB4,0x2CB5}, /* 2CB4 */
+ {0x2CB6,0x2CB7},{0x2CB6,0x2CB7}, /* 2CB6 */
+ {0x2CB8,0x2CB9},{0x2CB8,0x2CB9}, /* 2CB8 */
+ {0x2CBA,0x2CBB},{0x2CBA,0x2CBB}, /* 2CBA */
+ {0x2CBC,0x2CBD},{0x2CBC,0x2CBD}, /* 2CBC */
+ {0x2CBE,0x2CBF},{0x2CBE,0x2CBF}, /* 2CBE */
+ {0x2CC0,0x2CC1},{0x2CC0,0x2CC1}, /* 2CC0 */
+ {0x2CC2,0x2CC3},{0x2CC2,0x2CC3}, /* 2CC2 */
+ {0x2CC4,0x2CC5},{0x2CC4,0x2CC5}, /* 2CC4 */
+ {0x2CC6,0x2CC7},{0x2CC6,0x2CC7}, /* 2CC6 */
+ {0x2CC8,0x2CC9},{0x2CC8,0x2CC9}, /* 2CC8 */
+ {0x2CCA,0x2CCB},{0x2CCA,0x2CCB}, /* 2CCA */
+ {0x2CCC,0x2CCD},{0x2CCC,0x2CCD}, /* 2CCC */
+ {0x2CCE,0x2CCF},{0x2CCE,0x2CCF}, /* 2CCE */
+ {0x2CD0,0x2CD1},{0x2CD0,0x2CD1}, /* 2CD0 */
+ {0x2CD2,0x2CD3},{0x2CD2,0x2CD3}, /* 2CD2 */
+ {0x2CD4,0x2CD5},{0x2CD4,0x2CD5}, /* 2CD4 */
+ {0x2CD6,0x2CD7},{0x2CD6,0x2CD7}, /* 2CD6 */
+ {0x2CD8,0x2CD9},{0x2CD8,0x2CD9}, /* 2CD8 */
+ {0x2CDA,0x2CDB},{0x2CDA,0x2CDB}, /* 2CDA */
+ {0x2CDC,0x2CDD},{0x2CDC,0x2CDD}, /* 2CDC */
+ {0x2CDE,0x2CDF},{0x2CDE,0x2CDF}, /* 2CDE */
+ {0x2CE0,0x2CE1},{0x2CE0,0x2CE1}, /* 2CE0 */
+ {0x2CE2,0x2CE3},{0x2CE2,0x2CE3}, /* 2CE2 */
+ {0x2CE4,0x2CE4},{0x2CE5,0x2CE5}, /* 2CE4 */
+ {0x2CE6,0x2CE6},{0x2CE7,0x2CE7}, /* 2CE6 */
+ {0x2CE8,0x2CE8},{0x2CE9,0x2CE9}, /* 2CE8 */
+ {0x2CEA,0x2CEA},{0x2CEB,0x2CEC}, /* 2CEA */
+ {0x2CEB,0x2CEC},{0x2CED,0x2CEE}, /* 2CEC */
+ {0x2CED,0x2CEE},{0x2CEF,0x2CEF}, /* 2CEE */
+ {0x2CF0,0x2CF0},{0x2CF1,0x2CF1}, /* 2CF0 */
+ {0x2CF2,0x2CF3},{0x2CF2,0x2CF3}, /* 2CF2 */
+ {0x2CF4,0x2CF4},{0x2CF5,0x2CF5}, /* 2CF4 */
+ {0x2CF6,0x2CF6},{0x2CF7,0x2CF7}, /* 2CF6 */
+ {0x2CF8,0x2CF8},{0x2CF9,0x2CF9}, /* 2CF8 */
+ {0x2CFA,0x2CFA},{0x2CFB,0x2CFB}, /* 2CFA */
+ {0x2CFC,0x2CFC},{0x2CFD,0x2CFD}, /* 2CFC */
+ {0x2CFE,0x2CFE},{0x2CFF,0x2CFF} /* 2CFE */
+};
+
+static const MY_CASEFOLD_CHARACTER u1400_casefold_page2D[256]={
+ {0x10A0,0x2D00},{0x10A1,0x2D01}, /* 2D00 */
+ {0x10A2,0x2D02},{0x10A3,0x2D03}, /* 2D02 */
+ {0x10A4,0x2D04},{0x10A5,0x2D05}, /* 2D04 */
+ {0x10A6,0x2D06},{0x10A7,0x2D07}, /* 2D06 */
+ {0x10A8,0x2D08},{0x10A9,0x2D09}, /* 2D08 */
+ {0x10AA,0x2D0A},{0x10AB,0x2D0B}, /* 2D0A */
+ {0x10AC,0x2D0C},{0x10AD,0x2D0D}, /* 2D0C */
+ {0x10AE,0x2D0E},{0x10AF,0x2D0F}, /* 2D0E */
+ {0x10B0,0x2D10},{0x10B1,0x2D11}, /* 2D10 */
+ {0x10B2,0x2D12},{0x10B3,0x2D13}, /* 2D12 */
+ {0x10B4,0x2D14},{0x10B5,0x2D15}, /* 2D14 */
+ {0x10B6,0x2D16},{0x10B7,0x2D17}, /* 2D16 */
+ {0x10B8,0x2D18},{0x10B9,0x2D19}, /* 2D18 */
+ {0x10BA,0x2D1A},{0x10BB,0x2D1B}, /* 2D1A */
+ {0x10BC,0x2D1C},{0x10BD,0x2D1D}, /* 2D1C */
+ {0x10BE,0x2D1E},{0x10BF,0x2D1F}, /* 2D1E */
+ {0x10C0,0x2D20},{0x10C1,0x2D21}, /* 2D20 */
+ {0x10C2,0x2D22},{0x10C3,0x2D23}, /* 2D22 */
+ {0x10C4,0x2D24},{0x10C5,0x2D25}, /* 2D24 */
+ {0x2D26,0x2D26},{0x10C7,0x2D27}, /* 2D26 */
+ {0x2D28,0x2D28},{0x2D29,0x2D29}, /* 2D28 */
+ {0x2D2A,0x2D2A},{0x2D2B,0x2D2B}, /* 2D2A */
+ {0x2D2C,0x2D2C},{0x10CD,0x2D2D}, /* 2D2C */
+ {0x2D2E,0x2D2E},{0x2D2F,0x2D2F}, /* 2D2E */
+ {0x2D30,0x2D30},{0x2D31,0x2D31}, /* 2D30 */
+ {0x2D32,0x2D32},{0x2D33,0x2D33}, /* 2D32 */
+ {0x2D34,0x2D34},{0x2D35,0x2D35}, /* 2D34 */
+ {0x2D36,0x2D36},{0x2D37,0x2D37}, /* 2D36 */
+ {0x2D38,0x2D38},{0x2D39,0x2D39}, /* 2D38 */
+ {0x2D3A,0x2D3A},{0x2D3B,0x2D3B}, /* 2D3A */
+ {0x2D3C,0x2D3C},{0x2D3D,0x2D3D}, /* 2D3C */
+ {0x2D3E,0x2D3E},{0x2D3F,0x2D3F}, /* 2D3E */
+ {0x2D40,0x2D40},{0x2D41,0x2D41}, /* 2D40 */
+ {0x2D42,0x2D42},{0x2D43,0x2D43}, /* 2D42 */
+ {0x2D44,0x2D44},{0x2D45,0x2D45}, /* 2D44 */
+ {0x2D46,0x2D46},{0x2D47,0x2D47}, /* 2D46 */
+ {0x2D48,0x2D48},{0x2D49,0x2D49}, /* 2D48 */
+ {0x2D4A,0x2D4A},{0x2D4B,0x2D4B}, /* 2D4A */
+ {0x2D4C,0x2D4C},{0x2D4D,0x2D4D}, /* 2D4C */
+ {0x2D4E,0x2D4E},{0x2D4F,0x2D4F}, /* 2D4E */
+ {0x2D50,0x2D50},{0x2D51,0x2D51}, /* 2D50 */
+ {0x2D52,0x2D52},{0x2D53,0x2D53}, /* 2D52 */
+ {0x2D54,0x2D54},{0x2D55,0x2D55}, /* 2D54 */
+ {0x2D56,0x2D56},{0x2D57,0x2D57}, /* 2D56 */
+ {0x2D58,0x2D58},{0x2D59,0x2D59}, /* 2D58 */
+ {0x2D5A,0x2D5A},{0x2D5B,0x2D5B}, /* 2D5A */
+ {0x2D5C,0x2D5C},{0x2D5D,0x2D5D}, /* 2D5C */
+ {0x2D5E,0x2D5E},{0x2D5F,0x2D5F}, /* 2D5E */
+ {0x2D60,0x2D60},{0x2D61,0x2D61}, /* 2D60 */
+ {0x2D62,0x2D62},{0x2D63,0x2D63}, /* 2D62 */
+ {0x2D64,0x2D64},{0x2D65,0x2D65}, /* 2D64 */
+ {0x2D66,0x2D66},{0x2D67,0x2D67}, /* 2D66 */
+ {0x2D68,0x2D68},{0x2D69,0x2D69}, /* 2D68 */
+ {0x2D6A,0x2D6A},{0x2D6B,0x2D6B}, /* 2D6A */
+ {0x2D6C,0x2D6C},{0x2D6D,0x2D6D}, /* 2D6C */
+ {0x2D6E,0x2D6E},{0x2D6F,0x2D6F}, /* 2D6E */
+ {0x2D70,0x2D70},{0x2D71,0x2D71}, /* 2D70 */
+ {0x2D72,0x2D72},{0x2D73,0x2D73}, /* 2D72 */
+ {0x2D74,0x2D74},{0x2D75,0x2D75}, /* 2D74 */
+ {0x2D76,0x2D76},{0x2D77,0x2D77}, /* 2D76 */
+ {0x2D78,0x2D78},{0x2D79,0x2D79}, /* 2D78 */
+ {0x2D7A,0x2D7A},{0x2D7B,0x2D7B}, /* 2D7A */
+ {0x2D7C,0x2D7C},{0x2D7D,0x2D7D}, /* 2D7C */
+ {0x2D7E,0x2D7E},{0x2D7F,0x2D7F}, /* 2D7E */
+ {0x2D80,0x2D80},{0x2D81,0x2D81}, /* 2D80 */
+ {0x2D82,0x2D82},{0x2D83,0x2D83}, /* 2D82 */
+ {0x2D84,0x2D84},{0x2D85,0x2D85}, /* 2D84 */
+ {0x2D86,0x2D86},{0x2D87,0x2D87}, /* 2D86 */
+ {0x2D88,0x2D88},{0x2D89,0x2D89}, /* 2D88 */
+ {0x2D8A,0x2D8A},{0x2D8B,0x2D8B}, /* 2D8A */
+ {0x2D8C,0x2D8C},{0x2D8D,0x2D8D}, /* 2D8C */
+ {0x2D8E,0x2D8E},{0x2D8F,0x2D8F}, /* 2D8E */
+ {0x2D90,0x2D90},{0x2D91,0x2D91}, /* 2D90 */
+ {0x2D92,0x2D92},{0x2D93,0x2D93}, /* 2D92 */
+ {0x2D94,0x2D94},{0x2D95,0x2D95}, /* 2D94 */
+ {0x2D96,0x2D96},{0x2D97,0x2D97}, /* 2D96 */
+ {0x2D98,0x2D98},{0x2D99,0x2D99}, /* 2D98 */
+ {0x2D9A,0x2D9A},{0x2D9B,0x2D9B}, /* 2D9A */
+ {0x2D9C,0x2D9C},{0x2D9D,0x2D9D}, /* 2D9C */
+ {0x2D9E,0x2D9E},{0x2D9F,0x2D9F}, /* 2D9E */
+ {0x2DA0,0x2DA0},{0x2DA1,0x2DA1}, /* 2DA0 */
+ {0x2DA2,0x2DA2},{0x2DA3,0x2DA3}, /* 2DA2 */
+ {0x2DA4,0x2DA4},{0x2DA5,0x2DA5}, /* 2DA4 */
+ {0x2DA6,0x2DA6},{0x2DA7,0x2DA7}, /* 2DA6 */
+ {0x2DA8,0x2DA8},{0x2DA9,0x2DA9}, /* 2DA8 */
+ {0x2DAA,0x2DAA},{0x2DAB,0x2DAB}, /* 2DAA */
+ {0x2DAC,0x2DAC},{0x2DAD,0x2DAD}, /* 2DAC */
+ {0x2DAE,0x2DAE},{0x2DAF,0x2DAF}, /* 2DAE */
+ {0x2DB0,0x2DB0},{0x2DB1,0x2DB1}, /* 2DB0 */
+ {0x2DB2,0x2DB2},{0x2DB3,0x2DB3}, /* 2DB2 */
+ {0x2DB4,0x2DB4},{0x2DB5,0x2DB5}, /* 2DB4 */
+ {0x2DB6,0x2DB6},{0x2DB7,0x2DB7}, /* 2DB6 */
+ {0x2DB8,0x2DB8},{0x2DB9,0x2DB9}, /* 2DB8 */
+ {0x2DBA,0x2DBA},{0x2DBB,0x2DBB}, /* 2DBA */
+ {0x2DBC,0x2DBC},{0x2DBD,0x2DBD}, /* 2DBC */
+ {0x2DBE,0x2DBE},{0x2DBF,0x2DBF}, /* 2DBE */
+ {0x2DC0,0x2DC0},{0x2DC1,0x2DC1}, /* 2DC0 */
+ {0x2DC2,0x2DC2},{0x2DC3,0x2DC3}, /* 2DC2 */
+ {0x2DC4,0x2DC4},{0x2DC5,0x2DC5}, /* 2DC4 */
+ {0x2DC6,0x2DC6},{0x2DC7,0x2DC7}, /* 2DC6 */
+ {0x2DC8,0x2DC8},{0x2DC9,0x2DC9}, /* 2DC8 */
+ {0x2DCA,0x2DCA},{0x2DCB,0x2DCB}, /* 2DCA */
+ {0x2DCC,0x2DCC},{0x2DCD,0x2DCD}, /* 2DCC */
+ {0x2DCE,0x2DCE},{0x2DCF,0x2DCF}, /* 2DCE */
+ {0x2DD0,0x2DD0},{0x2DD1,0x2DD1}, /* 2DD0 */
+ {0x2DD2,0x2DD2},{0x2DD3,0x2DD3}, /* 2DD2 */
+ {0x2DD4,0x2DD4},{0x2DD5,0x2DD5}, /* 2DD4 */
+ {0x2DD6,0x2DD6},{0x2DD7,0x2DD7}, /* 2DD6 */
+ {0x2DD8,0x2DD8},{0x2DD9,0x2DD9}, /* 2DD8 */
+ {0x2DDA,0x2DDA},{0x2DDB,0x2DDB}, /* 2DDA */
+ {0x2DDC,0x2DDC},{0x2DDD,0x2DDD}, /* 2DDC */
+ {0x2DDE,0x2DDE},{0x2DDF,0x2DDF}, /* 2DDE */
+ {0x2DE0,0x2DE0},{0x2DE1,0x2DE1}, /* 2DE0 */
+ {0x2DE2,0x2DE2},{0x2DE3,0x2DE3}, /* 2DE2 */
+ {0x2DE4,0x2DE4},{0x2DE5,0x2DE5}, /* 2DE4 */
+ {0x2DE6,0x2DE6},{0x2DE7,0x2DE7}, /* 2DE6 */
+ {0x2DE8,0x2DE8},{0x2DE9,0x2DE9}, /* 2DE8 */
+ {0x2DEA,0x2DEA},{0x2DEB,0x2DEB}, /* 2DEA */
+ {0x2DEC,0x2DEC},{0x2DED,0x2DED}, /* 2DEC */
+ {0x2DEE,0x2DEE},{0x2DEF,0x2DEF}, /* 2DEE */
+ {0x2DF0,0x2DF0},{0x2DF1,0x2DF1}, /* 2DF0 */
+ {0x2DF2,0x2DF2},{0x2DF3,0x2DF3}, /* 2DF2 */
+ {0x2DF4,0x2DF4},{0x2DF5,0x2DF5}, /* 2DF4 */
+ {0x2DF6,0x2DF6},{0x2DF7,0x2DF7}, /* 2DF6 */
+ {0x2DF8,0x2DF8},{0x2DF9,0x2DF9}, /* 2DF8 */
+ {0x2DFA,0x2DFA},{0x2DFB,0x2DFB}, /* 2DFA */
+ {0x2DFC,0x2DFC},{0x2DFD,0x2DFD}, /* 2DFC */
+ {0x2DFE,0x2DFE},{0x2DFF,0x2DFF} /* 2DFE */
+};
+
+static const MY_CASEFOLD_CHARACTER u1400_casefold_pageA6[256]={
+ {0xA600,0xA600},{0xA601,0xA601}, /* A600 */
+ {0xA602,0xA602},{0xA603,0xA603}, /* A602 */
+ {0xA604,0xA604},{0xA605,0xA605}, /* A604 */
+ {0xA606,0xA606},{0xA607,0xA607}, /* A606 */
+ {0xA608,0xA608},{0xA609,0xA609}, /* A608 */
+ {0xA60A,0xA60A},{0xA60B,0xA60B}, /* A60A */
+ {0xA60C,0xA60C},{0xA60D,0xA60D}, /* A60C */
+ {0xA60E,0xA60E},{0xA60F,0xA60F}, /* A60E */
+ {0xA610,0xA610},{0xA611,0xA611}, /* A610 */
+ {0xA612,0xA612},{0xA613,0xA613}, /* A612 */
+ {0xA614,0xA614},{0xA615,0xA615}, /* A614 */
+ {0xA616,0xA616},{0xA617,0xA617}, /* A616 */
+ {0xA618,0xA618},{0xA619,0xA619}, /* A618 */
+ {0xA61A,0xA61A},{0xA61B,0xA61B}, /* A61A */
+ {0xA61C,0xA61C},{0xA61D,0xA61D}, /* A61C */
+ {0xA61E,0xA61E},{0xA61F,0xA61F}, /* A61E */
+ {0xA620,0xA620},{0xA621,0xA621}, /* A620 */
+ {0xA622,0xA622},{0xA623,0xA623}, /* A622 */
+ {0xA624,0xA624},{0xA625,0xA625}, /* A624 */
+ {0xA626,0xA626},{0xA627,0xA627}, /* A626 */
+ {0xA628,0xA628},{0xA629,0xA629}, /* A628 */
+ {0xA62A,0xA62A},{0xA62B,0xA62B}, /* A62A */
+ {0xA62C,0xA62C},{0xA62D,0xA62D}, /* A62C */
+ {0xA62E,0xA62E},{0xA62F,0xA62F}, /* A62E */
+ {0xA630,0xA630},{0xA631,0xA631}, /* A630 */
+ {0xA632,0xA632},{0xA633,0xA633}, /* A632 */
+ {0xA634,0xA634},{0xA635,0xA635}, /* A634 */
+ {0xA636,0xA636},{0xA637,0xA637}, /* A636 */
+ {0xA638,0xA638},{0xA639,0xA639}, /* A638 */
+ {0xA63A,0xA63A},{0xA63B,0xA63B}, /* A63A */
+ {0xA63C,0xA63C},{0xA63D,0xA63D}, /* A63C */
+ {0xA63E,0xA63E},{0xA63F,0xA63F}, /* A63E */
+ {0xA640,0xA641},{0xA640,0xA641}, /* A640 */
+ {0xA642,0xA643},{0xA642,0xA643}, /* A642 */
+ {0xA644,0xA645},{0xA644,0xA645}, /* A644 */
+ {0xA646,0xA647},{0xA646,0xA647}, /* A646 */
+ {0xA648,0xA649},{0xA648,0xA649}, /* A648 */
+ {0xA64A,0xA64B},{0xA64A,0xA64B}, /* A64A */
+ {0xA64C,0xA64D},{0xA64C,0xA64D}, /* A64C */
+ {0xA64E,0xA64F},{0xA64E,0xA64F}, /* A64E */
+ {0xA650,0xA651},{0xA650,0xA651}, /* A650 */
+ {0xA652,0xA653},{0xA652,0xA653}, /* A652 */
+ {0xA654,0xA655},{0xA654,0xA655}, /* A654 */
+ {0xA656,0xA657},{0xA656,0xA657}, /* A656 */
+ {0xA658,0xA659},{0xA658,0xA659}, /* A658 */
+ {0xA65A,0xA65B},{0xA65A,0xA65B}, /* A65A */
+ {0xA65C,0xA65D},{0xA65C,0xA65D}, /* A65C */
+ {0xA65E,0xA65F},{0xA65E,0xA65F}, /* A65E */
+ {0xA660,0xA661},{0xA660,0xA661}, /* A660 */
+ {0xA662,0xA663},{0xA662,0xA663}, /* A662 */
+ {0xA664,0xA665},{0xA664,0xA665}, /* A664 */
+ {0xA666,0xA667},{0xA666,0xA667}, /* A666 */
+ {0xA668,0xA669},{0xA668,0xA669}, /* A668 */
+ {0xA66A,0xA66B},{0xA66A,0xA66B}, /* A66A */
+ {0xA66C,0xA66D},{0xA66C,0xA66D}, /* A66C */
+ {0xA66E,0xA66E},{0xA66F,0xA66F}, /* A66E */
+ {0xA670,0xA670},{0xA671,0xA671}, /* A670 */
+ {0xA672,0xA672},{0xA673,0xA673}, /* A672 */
+ {0xA674,0xA674},{0xA675,0xA675}, /* A674 */
+ {0xA676,0xA676},{0xA677,0xA677}, /* A676 */
+ {0xA678,0xA678},{0xA679,0xA679}, /* A678 */
+ {0xA67A,0xA67A},{0xA67B,0xA67B}, /* A67A */
+ {0xA67C,0xA67C},{0xA67D,0xA67D}, /* A67C */
+ {0xA67E,0xA67E},{0xA67F,0xA67F}, /* A67E */
+ {0xA680,0xA681},{0xA680,0xA681}, /* A680 */
+ {0xA682,0xA683},{0xA682,0xA683}, /* A682 */
+ {0xA684,0xA685},{0xA684,0xA685}, /* A684 */
+ {0xA686,0xA687},{0xA686,0xA687}, /* A686 */
+ {0xA688,0xA689},{0xA688,0xA689}, /* A688 */
+ {0xA68A,0xA68B},{0xA68A,0xA68B}, /* A68A */
+ {0xA68C,0xA68D},{0xA68C,0xA68D}, /* A68C */
+ {0xA68E,0xA68F},{0xA68E,0xA68F}, /* A68E */
+ {0xA690,0xA691},{0xA690,0xA691}, /* A690 */
+ {0xA692,0xA693},{0xA692,0xA693}, /* A692 */
+ {0xA694,0xA695},{0xA694,0xA695}, /* A694 */
+ {0xA696,0xA697},{0xA696,0xA697}, /* A696 */
+ {0xA698,0xA699},{0xA698,0xA699}, /* A698 */
+ {0xA69A,0xA69B},{0xA69A,0xA69B}, /* A69A */
+ {0xA69C,0xA69C},{0xA69D,0xA69D}, /* A69C */
+ {0xA69E,0xA69E},{0xA69F,0xA69F}, /* A69E */
+ {0xA6A0,0xA6A0},{0xA6A1,0xA6A1}, /* A6A0 */
+ {0xA6A2,0xA6A2},{0xA6A3,0xA6A3}, /* A6A2 */
+ {0xA6A4,0xA6A4},{0xA6A5,0xA6A5}, /* A6A4 */
+ {0xA6A6,0xA6A6},{0xA6A7,0xA6A7}, /* A6A6 */
+ {0xA6A8,0xA6A8},{0xA6A9,0xA6A9}, /* A6A8 */
+ {0xA6AA,0xA6AA},{0xA6AB,0xA6AB}, /* A6AA */
+ {0xA6AC,0xA6AC},{0xA6AD,0xA6AD}, /* A6AC */
+ {0xA6AE,0xA6AE},{0xA6AF,0xA6AF}, /* A6AE */
+ {0xA6B0,0xA6B0},{0xA6B1,0xA6B1}, /* A6B0 */
+ {0xA6B2,0xA6B2},{0xA6B3,0xA6B3}, /* A6B2 */
+ {0xA6B4,0xA6B4},{0xA6B5,0xA6B5}, /* A6B4 */
+ {0xA6B6,0xA6B6},{0xA6B7,0xA6B7}, /* A6B6 */
+ {0xA6B8,0xA6B8},{0xA6B9,0xA6B9}, /* A6B8 */
+ {0xA6BA,0xA6BA},{0xA6BB,0xA6BB}, /* A6BA */
+ {0xA6BC,0xA6BC},{0xA6BD,0xA6BD}, /* A6BC */
+ {0xA6BE,0xA6BE},{0xA6BF,0xA6BF}, /* A6BE */
+ {0xA6C0,0xA6C0},{0xA6C1,0xA6C1}, /* A6C0 */
+ {0xA6C2,0xA6C2},{0xA6C3,0xA6C3}, /* A6C2 */
+ {0xA6C4,0xA6C4},{0xA6C5,0xA6C5}, /* A6C4 */
+ {0xA6C6,0xA6C6},{0xA6C7,0xA6C7}, /* A6C6 */
+ {0xA6C8,0xA6C8},{0xA6C9,0xA6C9}, /* A6C8 */
+ {0xA6CA,0xA6CA},{0xA6CB,0xA6CB}, /* A6CA */
+ {0xA6CC,0xA6CC},{0xA6CD,0xA6CD}, /* A6CC */
+ {0xA6CE,0xA6CE},{0xA6CF,0xA6CF}, /* A6CE */
+ {0xA6D0,0xA6D0},{0xA6D1,0xA6D1}, /* A6D0 */
+ {0xA6D2,0xA6D2},{0xA6D3,0xA6D3}, /* A6D2 */
+ {0xA6D4,0xA6D4},{0xA6D5,0xA6D5}, /* A6D4 */
+ {0xA6D6,0xA6D6},{0xA6D7,0xA6D7}, /* A6D6 */
+ {0xA6D8,0xA6D8},{0xA6D9,0xA6D9}, /* A6D8 */
+ {0xA6DA,0xA6DA},{0xA6DB,0xA6DB}, /* A6DA */
+ {0xA6DC,0xA6DC},{0xA6DD,0xA6DD}, /* A6DC */
+ {0xA6DE,0xA6DE},{0xA6DF,0xA6DF}, /* A6DE */
+ {0xA6E0,0xA6E0},{0xA6E1,0xA6E1}, /* A6E0 */
+ {0xA6E2,0xA6E2},{0xA6E3,0xA6E3}, /* A6E2 */
+ {0xA6E4,0xA6E4},{0xA6E5,0xA6E5}, /* A6E4 */
+ {0xA6E6,0xA6E6},{0xA6E7,0xA6E7}, /* A6E6 */
+ {0xA6E8,0xA6E8},{0xA6E9,0xA6E9}, /* A6E8 */
+ {0xA6EA,0xA6EA},{0xA6EB,0xA6EB}, /* A6EA */
+ {0xA6EC,0xA6EC},{0xA6ED,0xA6ED}, /* A6EC */
+ {0xA6EE,0xA6EE},{0xA6EF,0xA6EF}, /* A6EE */
+ {0xA6F0,0xA6F0},{0xA6F1,0xA6F1}, /* A6F0 */
+ {0xA6F2,0xA6F2},{0xA6F3,0xA6F3}, /* A6F2 */
+ {0xA6F4,0xA6F4},{0xA6F5,0xA6F5}, /* A6F4 */
+ {0xA6F6,0xA6F6},{0xA6F7,0xA6F7}, /* A6F6 */
+ {0xA6F8,0xA6F8},{0xA6F9,0xA6F9}, /* A6F8 */
+ {0xA6FA,0xA6FA},{0xA6FB,0xA6FB}, /* A6FA */
+ {0xA6FC,0xA6FC},{0xA6FD,0xA6FD}, /* A6FC */
+ {0xA6FE,0xA6FE},{0xA6FF,0xA6FF} /* A6FE */
+};
+
+static const MY_CASEFOLD_CHARACTER u1400_casefold_pageA7[256]={
+ {0xA700,0xA700},{0xA701,0xA701}, /* A700 */
+ {0xA702,0xA702},{0xA703,0xA703}, /* A702 */
+ {0xA704,0xA704},{0xA705,0xA705}, /* A704 */
+ {0xA706,0xA706},{0xA707,0xA707}, /* A706 */
+ {0xA708,0xA708},{0xA709,0xA709}, /* A708 */
+ {0xA70A,0xA70A},{0xA70B,0xA70B}, /* A70A */
+ {0xA70C,0xA70C},{0xA70D,0xA70D}, /* A70C */
+ {0xA70E,0xA70E},{0xA70F,0xA70F}, /* A70E */
+ {0xA710,0xA710},{0xA711,0xA711}, /* A710 */
+ {0xA712,0xA712},{0xA713,0xA713}, /* A712 */
+ {0xA714,0xA714},{0xA715,0xA715}, /* A714 */
+ {0xA716,0xA716},{0xA717,0xA717}, /* A716 */
+ {0xA718,0xA718},{0xA719,0xA719}, /* A718 */
+ {0xA71A,0xA71A},{0xA71B,0xA71B}, /* A71A */
+ {0xA71C,0xA71C},{0xA71D,0xA71D}, /* A71C */
+ {0xA71E,0xA71E},{0xA71F,0xA71F}, /* A71E */
+ {0xA720,0xA720},{0xA721,0xA721}, /* A720 */
+ {0xA722,0xA723},{0xA722,0xA723}, /* A722 */
+ {0xA724,0xA725},{0xA724,0xA725}, /* A724 */
+ {0xA726,0xA727},{0xA726,0xA727}, /* A726 */
+ {0xA728,0xA729},{0xA728,0xA729}, /* A728 */
+ {0xA72A,0xA72B},{0xA72A,0xA72B}, /* A72A */
+ {0xA72C,0xA72D},{0xA72C,0xA72D}, /* A72C */
+ {0xA72E,0xA72F},{0xA72E,0xA72F}, /* A72E */
+ {0xA730,0xA730},{0xA731,0xA731}, /* A730 */
+ {0xA732,0xA733},{0xA732,0xA733}, /* A732 */
+ {0xA734,0xA735},{0xA734,0xA735}, /* A734 */
+ {0xA736,0xA737},{0xA736,0xA737}, /* A736 */
+ {0xA738,0xA739},{0xA738,0xA739}, /* A738 */
+ {0xA73A,0xA73B},{0xA73A,0xA73B}, /* A73A */
+ {0xA73C,0xA73D},{0xA73C,0xA73D}, /* A73C */
+ {0xA73E,0xA73F},{0xA73E,0xA73F}, /* A73E */
+ {0xA740,0xA741},{0xA740,0xA741}, /* A740 */
+ {0xA742,0xA743},{0xA742,0xA743}, /* A742 */
+ {0xA744,0xA745},{0xA744,0xA745}, /* A744 */
+ {0xA746,0xA747},{0xA746,0xA747}, /* A746 */
+ {0xA748,0xA749},{0xA748,0xA749}, /* A748 */
+ {0xA74A,0xA74B},{0xA74A,0xA74B}, /* A74A */
+ {0xA74C,0xA74D},{0xA74C,0xA74D}, /* A74C */
+ {0xA74E,0xA74F},{0xA74E,0xA74F}, /* A74E */
+ {0xA750,0xA751},{0xA750,0xA751}, /* A750 */
+ {0xA752,0xA753},{0xA752,0xA753}, /* A752 */
+ {0xA754,0xA755},{0xA754,0xA755}, /* A754 */
+ {0xA756,0xA757},{0xA756,0xA757}, /* A756 */
+ {0xA758,0xA759},{0xA758,0xA759}, /* A758 */
+ {0xA75A,0xA75B},{0xA75A,0xA75B}, /* A75A */
+ {0xA75C,0xA75D},{0xA75C,0xA75D}, /* A75C */
+ {0xA75E,0xA75F},{0xA75E,0xA75F}, /* A75E */
+ {0xA760,0xA761},{0xA760,0xA761}, /* A760 */
+ {0xA762,0xA763},{0xA762,0xA763}, /* A762 */
+ {0xA764,0xA765},{0xA764,0xA765}, /* A764 */
+ {0xA766,0xA767},{0xA766,0xA767}, /* A766 */
+ {0xA768,0xA769},{0xA768,0xA769}, /* A768 */
+ {0xA76A,0xA76B},{0xA76A,0xA76B}, /* A76A */
+ {0xA76C,0xA76D},{0xA76C,0xA76D}, /* A76C */
+ {0xA76E,0xA76F},{0xA76E,0xA76F}, /* A76E */
+ {0xA770,0xA770},{0xA771,0xA771}, /* A770 */
+ {0xA772,0xA772},{0xA773,0xA773}, /* A772 */
+ {0xA774,0xA774},{0xA775,0xA775}, /* A774 */
+ {0xA776,0xA776},{0xA777,0xA777}, /* A776 */
+ {0xA778,0xA778},{0xA779,0xA77A}, /* A778 */
+ {0xA779,0xA77A},{0xA77B,0xA77C}, /* A77A */
+ {0xA77B,0xA77C},{0xA77D,0x1D79}, /* A77C */
+ {0xA77E,0xA77F},{0xA77E,0xA77F}, /* A77E */
+ {0xA780,0xA781},{0xA780,0xA781}, /* A780 */
+ {0xA782,0xA783},{0xA782,0xA783}, /* A782 */
+ {0xA784,0xA785},{0xA784,0xA785}, /* A784 */
+ {0xA786,0xA787},{0xA786,0xA787}, /* A786 */
+ {0xA788,0xA788},{0xA789,0xA789}, /* A788 */
+ {0xA78A,0xA78A},{0xA78B,0xA78C}, /* A78A */
+ {0xA78B,0xA78C},{0xA78D,0x0265}, /* A78C */
+ {0xA78E,0xA78E},{0xA78F,0xA78F}, /* A78E */
+ {0xA790,0xA791},{0xA790,0xA791}, /* A790 */
+ {0xA792,0xA793},{0xA792,0xA793}, /* A792 */
+ {0xA7C4,0xA794},{0xA795,0xA795}, /* A794 */
+ {0xA796,0xA797},{0xA796,0xA797}, /* A796 */
+ {0xA798,0xA799},{0xA798,0xA799}, /* A798 */
+ {0xA79A,0xA79B},{0xA79A,0xA79B}, /* A79A */
+ {0xA79C,0xA79D},{0xA79C,0xA79D}, /* A79C */
+ {0xA79E,0xA79F},{0xA79E,0xA79F}, /* A79E */
+ {0xA7A0,0xA7A1},{0xA7A0,0xA7A1}, /* A7A0 */
+ {0xA7A2,0xA7A3},{0xA7A2,0xA7A3}, /* A7A2 */
+ {0xA7A4,0xA7A5},{0xA7A4,0xA7A5}, /* A7A4 */
+ {0xA7A6,0xA7A7},{0xA7A6,0xA7A7}, /* A7A6 */
+ {0xA7A8,0xA7A9},{0xA7A8,0xA7A9}, /* A7A8 */
+ {0xA7AA,0x0266},{0xA7AB,0x025C}, /* A7AA */
+ {0xA7AC,0x0261},{0xA7AD,0x026C}, /* A7AC */
+ {0xA7AE,0x026A},{0xA7AF,0xA7AF}, /* A7AE */
+ {0xA7B0,0x029E},{0xA7B1,0x0287}, /* A7B0 */
+ {0xA7B2,0x029D},{0xA7B3,0xAB53}, /* A7B2 */
+ {0xA7B4,0xA7B5},{0xA7B4,0xA7B5}, /* A7B4 */
+ {0xA7B6,0xA7B7},{0xA7B6,0xA7B7}, /* A7B6 */
+ {0xA7B8,0xA7B9},{0xA7B8,0xA7B9}, /* A7B8 */
+ {0xA7BA,0xA7BB},{0xA7BA,0xA7BB}, /* A7BA */
+ {0xA7BC,0xA7BD},{0xA7BC,0xA7BD}, /* A7BC */
+ {0xA7BE,0xA7BF},{0xA7BE,0xA7BF}, /* A7BE */
+ {0xA7C0,0xA7C1},{0xA7C0,0xA7C1}, /* A7C0 */
+ {0xA7C2,0xA7C3},{0xA7C2,0xA7C3}, /* A7C2 */
+ {0xA7C4,0xA794},{0xA7C5,0x0282}, /* A7C4 */
+ {0xA7C6,0x1D8E},{0xA7C7,0xA7C8}, /* A7C6 */
+ {0xA7C7,0xA7C8},{0xA7C9,0xA7CA}, /* A7C8 */
+ {0xA7C9,0xA7CA},{0xA7CB,0xA7CB}, /* A7CA */
+ {0xA7CC,0xA7CC},{0xA7CD,0xA7CD}, /* A7CC */
+ {0xA7CE,0xA7CE},{0xA7CF,0xA7CF}, /* A7CE */
+ {0xA7D0,0xA7D1},{0xA7D0,0xA7D1}, /* A7D0 */
+ {0xA7D2,0xA7D2},{0xA7D3,0xA7D3}, /* A7D2 */
+ {0xA7D4,0xA7D4},{0xA7D5,0xA7D5}, /* A7D4 */
+ {0xA7D6,0xA7D7},{0xA7D6,0xA7D7}, /* A7D6 */
+ {0xA7D8,0xA7D9},{0xA7D8,0xA7D9}, /* A7D8 */
+ {0xA7DA,0xA7DA},{0xA7DB,0xA7DB}, /* A7DA */
+ {0xA7DC,0xA7DC},{0xA7DD,0xA7DD}, /* A7DC */
+ {0xA7DE,0xA7DE},{0xA7DF,0xA7DF}, /* A7DE */
+ {0xA7E0,0xA7E0},{0xA7E1,0xA7E1}, /* A7E0 */
+ {0xA7E2,0xA7E2},{0xA7E3,0xA7E3}, /* A7E2 */
+ {0xA7E4,0xA7E4},{0xA7E5,0xA7E5}, /* A7E4 */
+ {0xA7E6,0xA7E6},{0xA7E7,0xA7E7}, /* A7E6 */
+ {0xA7E8,0xA7E8},{0xA7E9,0xA7E9}, /* A7E8 */
+ {0xA7EA,0xA7EA},{0xA7EB,0xA7EB}, /* A7EA */
+ {0xA7EC,0xA7EC},{0xA7ED,0xA7ED}, /* A7EC */
+ {0xA7EE,0xA7EE},{0xA7EF,0xA7EF}, /* A7EE */
+ {0xA7F0,0xA7F0},{0xA7F1,0xA7F1}, /* A7F0 */
+ {0xA7F2,0xA7F2},{0xA7F3,0xA7F3}, /* A7F2 */
+ {0xA7F4,0xA7F4},{0xA7F5,0xA7F6}, /* A7F4 */
+ {0xA7F5,0xA7F6},{0xA7F7,0xA7F7}, /* A7F6 */
+ {0xA7F8,0xA7F8},{0xA7F9,0xA7F9}, /* A7F8 */
+ {0xA7FA,0xA7FA},{0xA7FB,0xA7FB}, /* A7FA */
+ {0xA7FC,0xA7FC},{0xA7FD,0xA7FD}, /* A7FC */
+ {0xA7FE,0xA7FE},{0xA7FF,0xA7FF} /* A7FE */
+};
+
+static const MY_CASEFOLD_CHARACTER u1400_casefold_pageAB[256]={
+ {0xAB00,0xAB00},{0xAB01,0xAB01}, /* AB00 */
+ {0xAB02,0xAB02},{0xAB03,0xAB03}, /* AB02 */
+ {0xAB04,0xAB04},{0xAB05,0xAB05}, /* AB04 */
+ {0xAB06,0xAB06},{0xAB07,0xAB07}, /* AB06 */
+ {0xAB08,0xAB08},{0xAB09,0xAB09}, /* AB08 */
+ {0xAB0A,0xAB0A},{0xAB0B,0xAB0B}, /* AB0A */
+ {0xAB0C,0xAB0C},{0xAB0D,0xAB0D}, /* AB0C */
+ {0xAB0E,0xAB0E},{0xAB0F,0xAB0F}, /* AB0E */
+ {0xAB10,0xAB10},{0xAB11,0xAB11}, /* AB10 */
+ {0xAB12,0xAB12},{0xAB13,0xAB13}, /* AB12 */
+ {0xAB14,0xAB14},{0xAB15,0xAB15}, /* AB14 */
+ {0xAB16,0xAB16},{0xAB17,0xAB17}, /* AB16 */
+ {0xAB18,0xAB18},{0xAB19,0xAB19}, /* AB18 */
+ {0xAB1A,0xAB1A},{0xAB1B,0xAB1B}, /* AB1A */
+ {0xAB1C,0xAB1C},{0xAB1D,0xAB1D}, /* AB1C */
+ {0xAB1E,0xAB1E},{0xAB1F,0xAB1F}, /* AB1E */
+ {0xAB20,0xAB20},{0xAB21,0xAB21}, /* AB20 */
+ {0xAB22,0xAB22},{0xAB23,0xAB23}, /* AB22 */
+ {0xAB24,0xAB24},{0xAB25,0xAB25}, /* AB24 */
+ {0xAB26,0xAB26},{0xAB27,0xAB27}, /* AB26 */
+ {0xAB28,0xAB28},{0xAB29,0xAB29}, /* AB28 */
+ {0xAB2A,0xAB2A},{0xAB2B,0xAB2B}, /* AB2A */
+ {0xAB2C,0xAB2C},{0xAB2D,0xAB2D}, /* AB2C */
+ {0xAB2E,0xAB2E},{0xAB2F,0xAB2F}, /* AB2E */
+ {0xAB30,0xAB30},{0xAB31,0xAB31}, /* AB30 */
+ {0xAB32,0xAB32},{0xAB33,0xAB33}, /* AB32 */
+ {0xAB34,0xAB34},{0xAB35,0xAB35}, /* AB34 */
+ {0xAB36,0xAB36},{0xAB37,0xAB37}, /* AB36 */
+ {0xAB38,0xAB38},{0xAB39,0xAB39}, /* AB38 */
+ {0xAB3A,0xAB3A},{0xAB3B,0xAB3B}, /* AB3A */
+ {0xAB3C,0xAB3C},{0xAB3D,0xAB3D}, /* AB3C */
+ {0xAB3E,0xAB3E},{0xAB3F,0xAB3F}, /* AB3E */
+ {0xAB40,0xAB40},{0xAB41,0xAB41}, /* AB40 */
+ {0xAB42,0xAB42},{0xAB43,0xAB43}, /* AB42 */
+ {0xAB44,0xAB44},{0xAB45,0xAB45}, /* AB44 */
+ {0xAB46,0xAB46},{0xAB47,0xAB47}, /* AB46 */
+ {0xAB48,0xAB48},{0xAB49,0xAB49}, /* AB48 */
+ {0xAB4A,0xAB4A},{0xAB4B,0xAB4B}, /* AB4A */
+ {0xAB4C,0xAB4C},{0xAB4D,0xAB4D}, /* AB4C */
+ {0xAB4E,0xAB4E},{0xAB4F,0xAB4F}, /* AB4E */
+ {0xAB50,0xAB50},{0xAB51,0xAB51}, /* AB50 */
+ {0xAB52,0xAB52},{0xA7B3,0xAB53}, /* AB52 */
+ {0xAB54,0xAB54},{0xAB55,0xAB55}, /* AB54 */
+ {0xAB56,0xAB56},{0xAB57,0xAB57}, /* AB56 */
+ {0xAB58,0xAB58},{0xAB59,0xAB59}, /* AB58 */
+ {0xAB5A,0xAB5A},{0xAB5B,0xAB5B}, /* AB5A */
+ {0xAB5C,0xAB5C},{0xAB5D,0xAB5D}, /* AB5C */
+ {0xAB5E,0xAB5E},{0xAB5F,0xAB5F}, /* AB5E */
+ {0xAB60,0xAB60},{0xAB61,0xAB61}, /* AB60 */
+ {0xAB62,0xAB62},{0xAB63,0xAB63}, /* AB62 */
+ {0xAB64,0xAB64},{0xAB65,0xAB65}, /* AB64 */
+ {0xAB66,0xAB66},{0xAB67,0xAB67}, /* AB66 */
+ {0xAB68,0xAB68},{0xAB69,0xAB69}, /* AB68 */
+ {0xAB6A,0xAB6A},{0xAB6B,0xAB6B}, /* AB6A */
+ {0xAB6C,0xAB6C},{0xAB6D,0xAB6D}, /* AB6C */
+ {0xAB6E,0xAB6E},{0xAB6F,0xAB6F}, /* AB6E */
+ {0x13A0,0xAB70},{0x13A1,0xAB71}, /* AB70 */
+ {0x13A2,0xAB72},{0x13A3,0xAB73}, /* AB72 */
+ {0x13A4,0xAB74},{0x13A5,0xAB75}, /* AB74 */
+ {0x13A6,0xAB76},{0x13A7,0xAB77}, /* AB76 */
+ {0x13A8,0xAB78},{0x13A9,0xAB79}, /* AB78 */
+ {0x13AA,0xAB7A},{0x13AB,0xAB7B}, /* AB7A */
+ {0x13AC,0xAB7C},{0x13AD,0xAB7D}, /* AB7C */
+ {0x13AE,0xAB7E},{0x13AF,0xAB7F}, /* AB7E */
+ {0x13B0,0xAB80},{0x13B1,0xAB81}, /* AB80 */
+ {0x13B2,0xAB82},{0x13B3,0xAB83}, /* AB82 */
+ {0x13B4,0xAB84},{0x13B5,0xAB85}, /* AB84 */
+ {0x13B6,0xAB86},{0x13B7,0xAB87}, /* AB86 */
+ {0x13B8,0xAB88},{0x13B9,0xAB89}, /* AB88 */
+ {0x13BA,0xAB8A},{0x13BB,0xAB8B}, /* AB8A */
+ {0x13BC,0xAB8C},{0x13BD,0xAB8D}, /* AB8C */
+ {0x13BE,0xAB8E},{0x13BF,0xAB8F}, /* AB8E */
+ {0x13C0,0xAB90},{0x13C1,0xAB91}, /* AB90 */
+ {0x13C2,0xAB92},{0x13C3,0xAB93}, /* AB92 */
+ {0x13C4,0xAB94},{0x13C5,0xAB95}, /* AB94 */
+ {0x13C6,0xAB96},{0x13C7,0xAB97}, /* AB96 */
+ {0x13C8,0xAB98},{0x13C9,0xAB99}, /* AB98 */
+ {0x13CA,0xAB9A},{0x13CB,0xAB9B}, /* AB9A */
+ {0x13CC,0xAB9C},{0x13CD,0xAB9D}, /* AB9C */
+ {0x13CE,0xAB9E},{0x13CF,0xAB9F}, /* AB9E */
+ {0x13D0,0xABA0},{0x13D1,0xABA1}, /* ABA0 */
+ {0x13D2,0xABA2},{0x13D3,0xABA3}, /* ABA2 */
+ {0x13D4,0xABA4},{0x13D5,0xABA5}, /* ABA4 */
+ {0x13D6,0xABA6},{0x13D7,0xABA7}, /* ABA6 */
+ {0x13D8,0xABA8},{0x13D9,0xABA9}, /* ABA8 */
+ {0x13DA,0xABAA},{0x13DB,0xABAB}, /* ABAA */
+ {0x13DC,0xABAC},{0x13DD,0xABAD}, /* ABAC */
+ {0x13DE,0xABAE},{0x13DF,0xABAF}, /* ABAE */
+ {0x13E0,0xABB0},{0x13E1,0xABB1}, /* ABB0 */
+ {0x13E2,0xABB2},{0x13E3,0xABB3}, /* ABB2 */
+ {0x13E4,0xABB4},{0x13E5,0xABB5}, /* ABB4 */
+ {0x13E6,0xABB6},{0x13E7,0xABB7}, /* ABB6 */
+ {0x13E8,0xABB8},{0x13E9,0xABB9}, /* ABB8 */
+ {0x13EA,0xABBA},{0x13EB,0xABBB}, /* ABBA */
+ {0x13EC,0xABBC},{0x13ED,0xABBD}, /* ABBC */
+ {0x13EE,0xABBE},{0x13EF,0xABBF}, /* ABBE */
+ {0xABC0,0xABC0},{0xABC1,0xABC1}, /* ABC0 */
+ {0xABC2,0xABC2},{0xABC3,0xABC3}, /* ABC2 */
+ {0xABC4,0xABC4},{0xABC5,0xABC5}, /* ABC4 */
+ {0xABC6,0xABC6},{0xABC7,0xABC7}, /* ABC6 */
+ {0xABC8,0xABC8},{0xABC9,0xABC9}, /* ABC8 */
+ {0xABCA,0xABCA},{0xABCB,0xABCB}, /* ABCA */
+ {0xABCC,0xABCC},{0xABCD,0xABCD}, /* ABCC */
+ {0xABCE,0xABCE},{0xABCF,0xABCF}, /* ABCE */
+ {0xABD0,0xABD0},{0xABD1,0xABD1}, /* ABD0 */
+ {0xABD2,0xABD2},{0xABD3,0xABD3}, /* ABD2 */
+ {0xABD4,0xABD4},{0xABD5,0xABD5}, /* ABD4 */
+ {0xABD6,0xABD6},{0xABD7,0xABD7}, /* ABD6 */
+ {0xABD8,0xABD8},{0xABD9,0xABD9}, /* ABD8 */
+ {0xABDA,0xABDA},{0xABDB,0xABDB}, /* ABDA */
+ {0xABDC,0xABDC},{0xABDD,0xABDD}, /* ABDC */
+ {0xABDE,0xABDE},{0xABDF,0xABDF}, /* ABDE */
+ {0xABE0,0xABE0},{0xABE1,0xABE1}, /* ABE0 */
+ {0xABE2,0xABE2},{0xABE3,0xABE3}, /* ABE2 */
+ {0xABE4,0xABE4},{0xABE5,0xABE5}, /* ABE4 */
+ {0xABE6,0xABE6},{0xABE7,0xABE7}, /* ABE6 */
+ {0xABE8,0xABE8},{0xABE9,0xABE9}, /* ABE8 */
+ {0xABEA,0xABEA},{0xABEB,0xABEB}, /* ABEA */
+ {0xABEC,0xABEC},{0xABED,0xABED}, /* ABEC */
+ {0xABEE,0xABEE},{0xABEF,0xABEF}, /* ABEE */
+ {0xABF0,0xABF0},{0xABF1,0xABF1}, /* ABF0 */
+ {0xABF2,0xABF2},{0xABF3,0xABF3}, /* ABF2 */
+ {0xABF4,0xABF4},{0xABF5,0xABF5}, /* ABF4 */
+ {0xABF6,0xABF6},{0xABF7,0xABF7}, /* ABF6 */
+ {0xABF8,0xABF8},{0xABF9,0xABF9}, /* ABF8 */
+ {0xABFA,0xABFA},{0xABFB,0xABFB}, /* ABFA */
+ {0xABFC,0xABFC},{0xABFD,0xABFD}, /* ABFC */
+ {0xABFE,0xABFE},{0xABFF,0xABFF} /* ABFE */
+};
+
+static const MY_CASEFOLD_CHARACTER u1400_casefold_pageFF[256]={
+ {0xFF00,0xFF00},{0xFF01,0xFF01}, /* FF00 */
+ {0xFF02,0xFF02},{0xFF03,0xFF03}, /* FF02 */
+ {0xFF04,0xFF04},{0xFF05,0xFF05}, /* FF04 */
+ {0xFF06,0xFF06},{0xFF07,0xFF07}, /* FF06 */
+ {0xFF08,0xFF08},{0xFF09,0xFF09}, /* FF08 */
+ {0xFF0A,0xFF0A},{0xFF0B,0xFF0B}, /* FF0A */
+ {0xFF0C,0xFF0C},{0xFF0D,0xFF0D}, /* FF0C */
+ {0xFF0E,0xFF0E},{0xFF0F,0xFF0F}, /* FF0E */
+ {0xFF10,0xFF10},{0xFF11,0xFF11}, /* FF10 */
+ {0xFF12,0xFF12},{0xFF13,0xFF13}, /* FF12 */
+ {0xFF14,0xFF14},{0xFF15,0xFF15}, /* FF14 */
+ {0xFF16,0xFF16},{0xFF17,0xFF17}, /* FF16 */
+ {0xFF18,0xFF18},{0xFF19,0xFF19}, /* FF18 */
+ {0xFF1A,0xFF1A},{0xFF1B,0xFF1B}, /* FF1A */
+ {0xFF1C,0xFF1C},{0xFF1D,0xFF1D}, /* FF1C */
+ {0xFF1E,0xFF1E},{0xFF1F,0xFF1F}, /* FF1E */
+ {0xFF20,0xFF20},{0xFF21,0xFF41}, /* FF20 */
+ {0xFF22,0xFF42},{0xFF23,0xFF43}, /* FF22 */
+ {0xFF24,0xFF44},{0xFF25,0xFF45}, /* FF24 */
+ {0xFF26,0xFF46},{0xFF27,0xFF47}, /* FF26 */
+ {0xFF28,0xFF48},{0xFF29,0xFF49}, /* FF28 */
+ {0xFF2A,0xFF4A},{0xFF2B,0xFF4B}, /* FF2A */
+ {0xFF2C,0xFF4C},{0xFF2D,0xFF4D}, /* FF2C */
+ {0xFF2E,0xFF4E},{0xFF2F,0xFF4F}, /* FF2E */
+ {0xFF30,0xFF50},{0xFF31,0xFF51}, /* FF30 */
+ {0xFF32,0xFF52},{0xFF33,0xFF53}, /* FF32 */
+ {0xFF34,0xFF54},{0xFF35,0xFF55}, /* FF34 */
+ {0xFF36,0xFF56},{0xFF37,0xFF57}, /* FF36 */
+ {0xFF38,0xFF58},{0xFF39,0xFF59}, /* FF38 */
+ {0xFF3A,0xFF5A},{0xFF3B,0xFF3B}, /* FF3A */
+ {0xFF3C,0xFF3C},{0xFF3D,0xFF3D}, /* FF3C */
+ {0xFF3E,0xFF3E},{0xFF3F,0xFF3F}, /* FF3E */
+ {0xFF40,0xFF40},{0xFF21,0xFF41}, /* FF40 */
+ {0xFF22,0xFF42},{0xFF23,0xFF43}, /* FF42 */
+ {0xFF24,0xFF44},{0xFF25,0xFF45}, /* FF44 */
+ {0xFF26,0xFF46},{0xFF27,0xFF47}, /* FF46 */
+ {0xFF28,0xFF48},{0xFF29,0xFF49}, /* FF48 */
+ {0xFF2A,0xFF4A},{0xFF2B,0xFF4B}, /* FF4A */
+ {0xFF2C,0xFF4C},{0xFF2D,0xFF4D}, /* FF4C */
+ {0xFF2E,0xFF4E},{0xFF2F,0xFF4F}, /* FF4E */
+ {0xFF30,0xFF50},{0xFF31,0xFF51}, /* FF50 */
+ {0xFF32,0xFF52},{0xFF33,0xFF53}, /* FF52 */
+ {0xFF34,0xFF54},{0xFF35,0xFF55}, /* FF54 */
+ {0xFF36,0xFF56},{0xFF37,0xFF57}, /* FF56 */
+ {0xFF38,0xFF58},{0xFF39,0xFF59}, /* FF58 */
+ {0xFF3A,0xFF5A},{0xFF5B,0xFF5B}, /* FF5A */
+ {0xFF5C,0xFF5C},{0xFF5D,0xFF5D}, /* FF5C */
+ {0xFF5E,0xFF5E},{0xFF5F,0xFF5F}, /* FF5E */
+ {0xFF60,0xFF60},{0xFF61,0xFF61}, /* FF60 */
+ {0xFF62,0xFF62},{0xFF63,0xFF63}, /* FF62 */
+ {0xFF64,0xFF64},{0xFF65,0xFF65}, /* FF64 */
+ {0xFF66,0xFF66},{0xFF67,0xFF67}, /* FF66 */
+ {0xFF68,0xFF68},{0xFF69,0xFF69}, /* FF68 */
+ {0xFF6A,0xFF6A},{0xFF6B,0xFF6B}, /* FF6A */
+ {0xFF6C,0xFF6C},{0xFF6D,0xFF6D}, /* FF6C */
+ {0xFF6E,0xFF6E},{0xFF6F,0xFF6F}, /* FF6E */
+ {0xFF70,0xFF70},{0xFF71,0xFF71}, /* FF70 */
+ {0xFF72,0xFF72},{0xFF73,0xFF73}, /* FF72 */
+ {0xFF74,0xFF74},{0xFF75,0xFF75}, /* FF74 */
+ {0xFF76,0xFF76},{0xFF77,0xFF77}, /* FF76 */
+ {0xFF78,0xFF78},{0xFF79,0xFF79}, /* FF78 */
+ {0xFF7A,0xFF7A},{0xFF7B,0xFF7B}, /* FF7A */
+ {0xFF7C,0xFF7C},{0xFF7D,0xFF7D}, /* FF7C */
+ {0xFF7E,0xFF7E},{0xFF7F,0xFF7F}, /* FF7E */
+ {0xFF80,0xFF80},{0xFF81,0xFF81}, /* FF80 */
+ {0xFF82,0xFF82},{0xFF83,0xFF83}, /* FF82 */
+ {0xFF84,0xFF84},{0xFF85,0xFF85}, /* FF84 */
+ {0xFF86,0xFF86},{0xFF87,0xFF87}, /* FF86 */
+ {0xFF88,0xFF88},{0xFF89,0xFF89}, /* FF88 */
+ {0xFF8A,0xFF8A},{0xFF8B,0xFF8B}, /* FF8A */
+ {0xFF8C,0xFF8C},{0xFF8D,0xFF8D}, /* FF8C */
+ {0xFF8E,0xFF8E},{0xFF8F,0xFF8F}, /* FF8E */
+ {0xFF90,0xFF90},{0xFF91,0xFF91}, /* FF90 */
+ {0xFF92,0xFF92},{0xFF93,0xFF93}, /* FF92 */
+ {0xFF94,0xFF94},{0xFF95,0xFF95}, /* FF94 */
+ {0xFF96,0xFF96},{0xFF97,0xFF97}, /* FF96 */
+ {0xFF98,0xFF98},{0xFF99,0xFF99}, /* FF98 */
+ {0xFF9A,0xFF9A},{0xFF9B,0xFF9B}, /* FF9A */
+ {0xFF9C,0xFF9C},{0xFF9D,0xFF9D}, /* FF9C */
+ {0xFF9E,0xFF9E},{0xFF9F,0xFF9F}, /* FF9E */
+ {0xFFA0,0xFFA0},{0xFFA1,0xFFA1}, /* FFA0 */
+ {0xFFA2,0xFFA2},{0xFFA3,0xFFA3}, /* FFA2 */
+ {0xFFA4,0xFFA4},{0xFFA5,0xFFA5}, /* FFA4 */
+ {0xFFA6,0xFFA6},{0xFFA7,0xFFA7}, /* FFA6 */
+ {0xFFA8,0xFFA8},{0xFFA9,0xFFA9}, /* FFA8 */
+ {0xFFAA,0xFFAA},{0xFFAB,0xFFAB}, /* FFAA */
+ {0xFFAC,0xFFAC},{0xFFAD,0xFFAD}, /* FFAC */
+ {0xFFAE,0xFFAE},{0xFFAF,0xFFAF}, /* FFAE */
+ {0xFFB0,0xFFB0},{0xFFB1,0xFFB1}, /* FFB0 */
+ {0xFFB2,0xFFB2},{0xFFB3,0xFFB3}, /* FFB2 */
+ {0xFFB4,0xFFB4},{0xFFB5,0xFFB5}, /* FFB4 */
+ {0xFFB6,0xFFB6},{0xFFB7,0xFFB7}, /* FFB6 */
+ {0xFFB8,0xFFB8},{0xFFB9,0xFFB9}, /* FFB8 */
+ {0xFFBA,0xFFBA},{0xFFBB,0xFFBB}, /* FFBA */
+ {0xFFBC,0xFFBC},{0xFFBD,0xFFBD}, /* FFBC */
+ {0xFFBE,0xFFBE},{0xFFBF,0xFFBF}, /* FFBE */
+ {0xFFC0,0xFFC0},{0xFFC1,0xFFC1}, /* FFC0 */
+ {0xFFC2,0xFFC2},{0xFFC3,0xFFC3}, /* FFC2 */
+ {0xFFC4,0xFFC4},{0xFFC5,0xFFC5}, /* FFC4 */
+ {0xFFC6,0xFFC6},{0xFFC7,0xFFC7}, /* FFC6 */
+ {0xFFC8,0xFFC8},{0xFFC9,0xFFC9}, /* FFC8 */
+ {0xFFCA,0xFFCA},{0xFFCB,0xFFCB}, /* FFCA */
+ {0xFFCC,0xFFCC},{0xFFCD,0xFFCD}, /* FFCC */
+ {0xFFCE,0xFFCE},{0xFFCF,0xFFCF}, /* FFCE */
+ {0xFFD0,0xFFD0},{0xFFD1,0xFFD1}, /* FFD0 */
+ {0xFFD2,0xFFD2},{0xFFD3,0xFFD3}, /* FFD2 */
+ {0xFFD4,0xFFD4},{0xFFD5,0xFFD5}, /* FFD4 */
+ {0xFFD6,0xFFD6},{0xFFD7,0xFFD7}, /* FFD6 */
+ {0xFFD8,0xFFD8},{0xFFD9,0xFFD9}, /* FFD8 */
+ {0xFFDA,0xFFDA},{0xFFDB,0xFFDB}, /* FFDA */
+ {0xFFDC,0xFFDC},{0xFFDD,0xFFDD}, /* FFDC */
+ {0xFFDE,0xFFDE},{0xFFDF,0xFFDF}, /* FFDE */
+ {0xFFE0,0xFFE0},{0xFFE1,0xFFE1}, /* FFE0 */
+ {0xFFE2,0xFFE2},{0xFFE3,0xFFE3}, /* FFE2 */
+ {0xFFE4,0xFFE4},{0xFFE5,0xFFE5}, /* FFE4 */
+ {0xFFE6,0xFFE6},{0xFFE7,0xFFE7}, /* FFE6 */
+ {0xFFE8,0xFFE8},{0xFFE9,0xFFE9}, /* FFE8 */
+ {0xFFEA,0xFFEA},{0xFFEB,0xFFEB}, /* FFEA */
+ {0xFFEC,0xFFEC},{0xFFED,0xFFED}, /* FFEC */
+ {0xFFEE,0xFFEE},{0xFFEF,0xFFEF}, /* FFEE */
+ {0xFFF0,0xFFF0},{0xFFF1,0xFFF1}, /* FFF0 */
+ {0xFFF2,0xFFF2},{0xFFF3,0xFFF3}, /* FFF2 */
+ {0xFFF4,0xFFF4},{0xFFF5,0xFFF5}, /* FFF4 */
+ {0xFFF6,0xFFF6},{0xFFF7,0xFFF7}, /* FFF6 */
+ {0xFFF8,0xFFF8},{0xFFF9,0xFFF9}, /* FFF8 */
+ {0xFFFA,0xFFFA},{0xFFFB,0xFFFB}, /* FFFA */
+ {0xFFFC,0xFFFC},{0xFFFD,0xFFFD}, /* FFFC */
+ {0xFFFE,0xFFFE},{0xFFFF,0xFFFF} /* FFFE */
+};
+
+static const MY_CASEFOLD_CHARACTER u1400_casefold_page104[256]={
+ {0x10400,0x10428},{0x10401,0x10429}, /* 10400 */
+ {0x10402,0x1042A},{0x10403,0x1042B}, /* 10402 */
+ {0x10404,0x1042C},{0x10405,0x1042D}, /* 10404 */
+ {0x10406,0x1042E},{0x10407,0x1042F}, /* 10406 */
+ {0x10408,0x10430},{0x10409,0x10431}, /* 10408 */
+ {0x1040A,0x10432},{0x1040B,0x10433}, /* 1040A */
+ {0x1040C,0x10434},{0x1040D,0x10435}, /* 1040C */
+ {0x1040E,0x10436},{0x1040F,0x10437}, /* 1040E */
+ {0x10410,0x10438},{0x10411,0x10439}, /* 10410 */
+ {0x10412,0x1043A},{0x10413,0x1043B}, /* 10412 */
+ {0x10414,0x1043C},{0x10415,0x1043D}, /* 10414 */
+ {0x10416,0x1043E},{0x10417,0x1043F}, /* 10416 */
+ {0x10418,0x10440},{0x10419,0x10441}, /* 10418 */
+ {0x1041A,0x10442},{0x1041B,0x10443}, /* 1041A */
+ {0x1041C,0x10444},{0x1041D,0x10445}, /* 1041C */
+ {0x1041E,0x10446},{0x1041F,0x10447}, /* 1041E */
+ {0x10420,0x10448},{0x10421,0x10449}, /* 10420 */
+ {0x10422,0x1044A},{0x10423,0x1044B}, /* 10422 */
+ {0x10424,0x1044C},{0x10425,0x1044D}, /* 10424 */
+ {0x10426,0x1044E},{0x10427,0x1044F}, /* 10426 */
+ {0x10400,0x10428},{0x10401,0x10429}, /* 10428 */
+ {0x10402,0x1042A},{0x10403,0x1042B}, /* 1042A */
+ {0x10404,0x1042C},{0x10405,0x1042D}, /* 1042C */
+ {0x10406,0x1042E},{0x10407,0x1042F}, /* 1042E */
+ {0x10408,0x10430},{0x10409,0x10431}, /* 10430 */
+ {0x1040A,0x10432},{0x1040B,0x10433}, /* 10432 */
+ {0x1040C,0x10434},{0x1040D,0x10435}, /* 10434 */
+ {0x1040E,0x10436},{0x1040F,0x10437}, /* 10436 */
+ {0x10410,0x10438},{0x10411,0x10439}, /* 10438 */
+ {0x10412,0x1043A},{0x10413,0x1043B}, /* 1043A */
+ {0x10414,0x1043C},{0x10415,0x1043D}, /* 1043C */
+ {0x10416,0x1043E},{0x10417,0x1043F}, /* 1043E */
+ {0x10418,0x10440},{0x10419,0x10441}, /* 10440 */
+ {0x1041A,0x10442},{0x1041B,0x10443}, /* 10442 */
+ {0x1041C,0x10444},{0x1041D,0x10445}, /* 10444 */
+ {0x1041E,0x10446},{0x1041F,0x10447}, /* 10446 */
+ {0x10420,0x10448},{0x10421,0x10449}, /* 10448 */
+ {0x10422,0x1044A},{0x10423,0x1044B}, /* 1044A */
+ {0x10424,0x1044C},{0x10425,0x1044D}, /* 1044C */
+ {0x10426,0x1044E},{0x10427,0x1044F}, /* 1044E */
+ {0x10450,0x10450},{0x10451,0x10451}, /* 10450 */
+ {0x10452,0x10452},{0x10453,0x10453}, /* 10452 */
+ {0x10454,0x10454},{0x10455,0x10455}, /* 10454 */
+ {0x10456,0x10456},{0x10457,0x10457}, /* 10456 */
+ {0x10458,0x10458},{0x10459,0x10459}, /* 10458 */
+ {0x1045A,0x1045A},{0x1045B,0x1045B}, /* 1045A */
+ {0x1045C,0x1045C},{0x1045D,0x1045D}, /* 1045C */
+ {0x1045E,0x1045E},{0x1045F,0x1045F}, /* 1045E */
+ {0x10460,0x10460},{0x10461,0x10461}, /* 10460 */
+ {0x10462,0x10462},{0x10463,0x10463}, /* 10462 */
+ {0x10464,0x10464},{0x10465,0x10465}, /* 10464 */
+ {0x10466,0x10466},{0x10467,0x10467}, /* 10466 */
+ {0x10468,0x10468},{0x10469,0x10469}, /* 10468 */
+ {0x1046A,0x1046A},{0x1046B,0x1046B}, /* 1046A */
+ {0x1046C,0x1046C},{0x1046D,0x1046D}, /* 1046C */
+ {0x1046E,0x1046E},{0x1046F,0x1046F}, /* 1046E */
+ {0x10470,0x10470},{0x10471,0x10471}, /* 10470 */
+ {0x10472,0x10472},{0x10473,0x10473}, /* 10472 */
+ {0x10474,0x10474},{0x10475,0x10475}, /* 10474 */
+ {0x10476,0x10476},{0x10477,0x10477}, /* 10476 */
+ {0x10478,0x10478},{0x10479,0x10479}, /* 10478 */
+ {0x1047A,0x1047A},{0x1047B,0x1047B}, /* 1047A */
+ {0x1047C,0x1047C},{0x1047D,0x1047D}, /* 1047C */
+ {0x1047E,0x1047E},{0x1047F,0x1047F}, /* 1047E */
+ {0x10480,0x10480},{0x10481,0x10481}, /* 10480 */
+ {0x10482,0x10482},{0x10483,0x10483}, /* 10482 */
+ {0x10484,0x10484},{0x10485,0x10485}, /* 10484 */
+ {0x10486,0x10486},{0x10487,0x10487}, /* 10486 */
+ {0x10488,0x10488},{0x10489,0x10489}, /* 10488 */
+ {0x1048A,0x1048A},{0x1048B,0x1048B}, /* 1048A */
+ {0x1048C,0x1048C},{0x1048D,0x1048D}, /* 1048C */
+ {0x1048E,0x1048E},{0x1048F,0x1048F}, /* 1048E */
+ {0x10490,0x10490},{0x10491,0x10491}, /* 10490 */
+ {0x10492,0x10492},{0x10493,0x10493}, /* 10492 */
+ {0x10494,0x10494},{0x10495,0x10495}, /* 10494 */
+ {0x10496,0x10496},{0x10497,0x10497}, /* 10496 */
+ {0x10498,0x10498},{0x10499,0x10499}, /* 10498 */
+ {0x1049A,0x1049A},{0x1049B,0x1049B}, /* 1049A */
+ {0x1049C,0x1049C},{0x1049D,0x1049D}, /* 1049C */
+ {0x1049E,0x1049E},{0x1049F,0x1049F}, /* 1049E */
+ {0x104A0,0x104A0},{0x104A1,0x104A1}, /* 104A0 */
+ {0x104A2,0x104A2},{0x104A3,0x104A3}, /* 104A2 */
+ {0x104A4,0x104A4},{0x104A5,0x104A5}, /* 104A4 */
+ {0x104A6,0x104A6},{0x104A7,0x104A7}, /* 104A6 */
+ {0x104A8,0x104A8},{0x104A9,0x104A9}, /* 104A8 */
+ {0x104AA,0x104AA},{0x104AB,0x104AB}, /* 104AA */
+ {0x104AC,0x104AC},{0x104AD,0x104AD}, /* 104AC */
+ {0x104AE,0x104AE},{0x104AF,0x104AF}, /* 104AE */
+ {0x104B0,0x104D8},{0x104B1,0x104D9}, /* 104B0 */
+ {0x104B2,0x104DA},{0x104B3,0x104DB}, /* 104B2 */
+ {0x104B4,0x104DC},{0x104B5,0x104DD}, /* 104B4 */
+ {0x104B6,0x104DE},{0x104B7,0x104DF}, /* 104B6 */
+ {0x104B8,0x104E0},{0x104B9,0x104E1}, /* 104B8 */
+ {0x104BA,0x104E2},{0x104BB,0x104E3}, /* 104BA */
+ {0x104BC,0x104E4},{0x104BD,0x104E5}, /* 104BC */
+ {0x104BE,0x104E6},{0x104BF,0x104E7}, /* 104BE */
+ {0x104C0,0x104E8},{0x104C1,0x104E9}, /* 104C0 */
+ {0x104C2,0x104EA},{0x104C3,0x104EB}, /* 104C2 */
+ {0x104C4,0x104EC},{0x104C5,0x104ED}, /* 104C4 */
+ {0x104C6,0x104EE},{0x104C7,0x104EF}, /* 104C6 */
+ {0x104C8,0x104F0},{0x104C9,0x104F1}, /* 104C8 */
+ {0x104CA,0x104F2},{0x104CB,0x104F3}, /* 104CA */
+ {0x104CC,0x104F4},{0x104CD,0x104F5}, /* 104CC */
+ {0x104CE,0x104F6},{0x104CF,0x104F7}, /* 104CE */
+ {0x104D0,0x104F8},{0x104D1,0x104F9}, /* 104D0 */
+ {0x104D2,0x104FA},{0x104D3,0x104FB}, /* 104D2 */
+ {0x104D4,0x104D4},{0x104D5,0x104D5}, /* 104D4 */
+ {0x104D6,0x104D6},{0x104D7,0x104D7}, /* 104D6 */
+ {0x104B0,0x104D8},{0x104B1,0x104D9}, /* 104D8 */
+ {0x104B2,0x104DA},{0x104B3,0x104DB}, /* 104DA */
+ {0x104B4,0x104DC},{0x104B5,0x104DD}, /* 104DC */
+ {0x104B6,0x104DE},{0x104B7,0x104DF}, /* 104DE */
+ {0x104B8,0x104E0},{0x104B9,0x104E1}, /* 104E0 */
+ {0x104BA,0x104E2},{0x104BB,0x104E3}, /* 104E2 */
+ {0x104BC,0x104E4},{0x104BD,0x104E5}, /* 104E4 */
+ {0x104BE,0x104E6},{0x104BF,0x104E7}, /* 104E6 */
+ {0x104C0,0x104E8},{0x104C1,0x104E9}, /* 104E8 */
+ {0x104C2,0x104EA},{0x104C3,0x104EB}, /* 104EA */
+ {0x104C4,0x104EC},{0x104C5,0x104ED}, /* 104EC */
+ {0x104C6,0x104EE},{0x104C7,0x104EF}, /* 104EE */
+ {0x104C8,0x104F0},{0x104C9,0x104F1}, /* 104F0 */
+ {0x104CA,0x104F2},{0x104CB,0x104F3}, /* 104F2 */
+ {0x104CC,0x104F4},{0x104CD,0x104F5}, /* 104F4 */
+ {0x104CE,0x104F6},{0x104CF,0x104F7}, /* 104F6 */
+ {0x104D0,0x104F8},{0x104D1,0x104F9}, /* 104F8 */
+ {0x104D2,0x104FA},{0x104D3,0x104FB}, /* 104FA */
+ {0x104FC,0x104FC},{0x104FD,0x104FD}, /* 104FC */
+ {0x104FE,0x104FE},{0x104FF,0x104FF} /* 104FE */
+};
+
+static const MY_CASEFOLD_CHARACTER u1400_casefold_page105[256]={
+ {0x10500,0x10500},{0x10501,0x10501}, /* 10500 */
+ {0x10502,0x10502},{0x10503,0x10503}, /* 10502 */
+ {0x10504,0x10504},{0x10505,0x10505}, /* 10504 */
+ {0x10506,0x10506},{0x10507,0x10507}, /* 10506 */
+ {0x10508,0x10508},{0x10509,0x10509}, /* 10508 */
+ {0x1050A,0x1050A},{0x1050B,0x1050B}, /* 1050A */
+ {0x1050C,0x1050C},{0x1050D,0x1050D}, /* 1050C */
+ {0x1050E,0x1050E},{0x1050F,0x1050F}, /* 1050E */
+ {0x10510,0x10510},{0x10511,0x10511}, /* 10510 */
+ {0x10512,0x10512},{0x10513,0x10513}, /* 10512 */
+ {0x10514,0x10514},{0x10515,0x10515}, /* 10514 */
+ {0x10516,0x10516},{0x10517,0x10517}, /* 10516 */
+ {0x10518,0x10518},{0x10519,0x10519}, /* 10518 */
+ {0x1051A,0x1051A},{0x1051B,0x1051B}, /* 1051A */
+ {0x1051C,0x1051C},{0x1051D,0x1051D}, /* 1051C */
+ {0x1051E,0x1051E},{0x1051F,0x1051F}, /* 1051E */
+ {0x10520,0x10520},{0x10521,0x10521}, /* 10520 */
+ {0x10522,0x10522},{0x10523,0x10523}, /* 10522 */
+ {0x10524,0x10524},{0x10525,0x10525}, /* 10524 */
+ {0x10526,0x10526},{0x10527,0x10527}, /* 10526 */
+ {0x10528,0x10528},{0x10529,0x10529}, /* 10528 */
+ {0x1052A,0x1052A},{0x1052B,0x1052B}, /* 1052A */
+ {0x1052C,0x1052C},{0x1052D,0x1052D}, /* 1052C */
+ {0x1052E,0x1052E},{0x1052F,0x1052F}, /* 1052E */
+ {0x10530,0x10530},{0x10531,0x10531}, /* 10530 */
+ {0x10532,0x10532},{0x10533,0x10533}, /* 10532 */
+ {0x10534,0x10534},{0x10535,0x10535}, /* 10534 */
+ {0x10536,0x10536},{0x10537,0x10537}, /* 10536 */
+ {0x10538,0x10538},{0x10539,0x10539}, /* 10538 */
+ {0x1053A,0x1053A},{0x1053B,0x1053B}, /* 1053A */
+ {0x1053C,0x1053C},{0x1053D,0x1053D}, /* 1053C */
+ {0x1053E,0x1053E},{0x1053F,0x1053F}, /* 1053E */
+ {0x10540,0x10540},{0x10541,0x10541}, /* 10540 */
+ {0x10542,0x10542},{0x10543,0x10543}, /* 10542 */
+ {0x10544,0x10544},{0x10545,0x10545}, /* 10544 */
+ {0x10546,0x10546},{0x10547,0x10547}, /* 10546 */
+ {0x10548,0x10548},{0x10549,0x10549}, /* 10548 */
+ {0x1054A,0x1054A},{0x1054B,0x1054B}, /* 1054A */
+ {0x1054C,0x1054C},{0x1054D,0x1054D}, /* 1054C */
+ {0x1054E,0x1054E},{0x1054F,0x1054F}, /* 1054E */
+ {0x10550,0x10550},{0x10551,0x10551}, /* 10550 */
+ {0x10552,0x10552},{0x10553,0x10553}, /* 10552 */
+ {0x10554,0x10554},{0x10555,0x10555}, /* 10554 */
+ {0x10556,0x10556},{0x10557,0x10557}, /* 10556 */
+ {0x10558,0x10558},{0x10559,0x10559}, /* 10558 */
+ {0x1055A,0x1055A},{0x1055B,0x1055B}, /* 1055A */
+ {0x1055C,0x1055C},{0x1055D,0x1055D}, /* 1055C */
+ {0x1055E,0x1055E},{0x1055F,0x1055F}, /* 1055E */
+ {0x10560,0x10560},{0x10561,0x10561}, /* 10560 */
+ {0x10562,0x10562},{0x10563,0x10563}, /* 10562 */
+ {0x10564,0x10564},{0x10565,0x10565}, /* 10564 */
+ {0x10566,0x10566},{0x10567,0x10567}, /* 10566 */
+ {0x10568,0x10568},{0x10569,0x10569}, /* 10568 */
+ {0x1056A,0x1056A},{0x1056B,0x1056B}, /* 1056A */
+ {0x1056C,0x1056C},{0x1056D,0x1056D}, /* 1056C */
+ {0x1056E,0x1056E},{0x1056F,0x1056F}, /* 1056E */
+ {0x10570,0x10597},{0x10571,0x10598}, /* 10570 */
+ {0x10572,0x10599},{0x10573,0x1059A}, /* 10572 */
+ {0x10574,0x1059B},{0x10575,0x1059C}, /* 10574 */
+ {0x10576,0x1059D},{0x10577,0x1059E}, /* 10576 */
+ {0x10578,0x1059F},{0x10579,0x105A0}, /* 10578 */
+ {0x1057A,0x105A1},{0x1057B,0x1057B}, /* 1057A */
+ {0x1057C,0x105A3},{0x1057D,0x105A4}, /* 1057C */
+ {0x1057E,0x105A5},{0x1057F,0x105A6}, /* 1057E */
+ {0x10580,0x105A7},{0x10581,0x105A8}, /* 10580 */
+ {0x10582,0x105A9},{0x10583,0x105AA}, /* 10582 */
+ {0x10584,0x105AB},{0x10585,0x105AC}, /* 10584 */
+ {0x10586,0x105AD},{0x10587,0x105AE}, /* 10586 */
+ {0x10588,0x105AF},{0x10589,0x105B0}, /* 10588 */
+ {0x1058A,0x105B1},{0x1058B,0x1058B}, /* 1058A */
+ {0x1058C,0x105B3},{0x1058D,0x105B4}, /* 1058C */
+ {0x1058E,0x105B5},{0x1058F,0x105B6}, /* 1058E */
+ {0x10590,0x105B7},{0x10591,0x105B8}, /* 10590 */
+ {0x10592,0x105B9},{0x10593,0x10593}, /* 10592 */
+ {0x10594,0x105BB},{0x10595,0x105BC}, /* 10594 */
+ {0x10596,0x10596},{0x10570,0x10597}, /* 10596 */
+ {0x10571,0x10598},{0x10572,0x10599}, /* 10598 */
+ {0x10573,0x1059A},{0x10574,0x1059B}, /* 1059A */
+ {0x10575,0x1059C},{0x10576,0x1059D}, /* 1059C */
+ {0x10577,0x1059E},{0x10578,0x1059F}, /* 1059E */
+ {0x10579,0x105A0},{0x1057A,0x105A1}, /* 105A0 */
+ {0x105A2,0x105A2},{0x1057C,0x105A3}, /* 105A2 */
+ {0x1057D,0x105A4},{0x1057E,0x105A5}, /* 105A4 */
+ {0x1057F,0x105A6},{0x10580,0x105A7}, /* 105A6 */
+ {0x10581,0x105A8},{0x10582,0x105A9}, /* 105A8 */
+ {0x10583,0x105AA},{0x10584,0x105AB}, /* 105AA */
+ {0x10585,0x105AC},{0x10586,0x105AD}, /* 105AC */
+ {0x10587,0x105AE},{0x10588,0x105AF}, /* 105AE */
+ {0x10589,0x105B0},{0x1058A,0x105B1}, /* 105B0 */
+ {0x105B2,0x105B2},{0x1058C,0x105B3}, /* 105B2 */
+ {0x1058D,0x105B4},{0x1058E,0x105B5}, /* 105B4 */
+ {0x1058F,0x105B6},{0x10590,0x105B7}, /* 105B6 */
+ {0x10591,0x105B8},{0x10592,0x105B9}, /* 105B8 */
+ {0x105BA,0x105BA},{0x10594,0x105BB}, /* 105BA */
+ {0x10595,0x105BC},{0x105BD,0x105BD}, /* 105BC */
+ {0x105BE,0x105BE},{0x105BF,0x105BF}, /* 105BE */
+ {0x105C0,0x105C0},{0x105C1,0x105C1}, /* 105C0 */
+ {0x105C2,0x105C2},{0x105C3,0x105C3}, /* 105C2 */
+ {0x105C4,0x105C4},{0x105C5,0x105C5}, /* 105C4 */
+ {0x105C6,0x105C6},{0x105C7,0x105C7}, /* 105C6 */
+ {0x105C8,0x105C8},{0x105C9,0x105C9}, /* 105C8 */
+ {0x105CA,0x105CA},{0x105CB,0x105CB}, /* 105CA */
+ {0x105CC,0x105CC},{0x105CD,0x105CD}, /* 105CC */
+ {0x105CE,0x105CE},{0x105CF,0x105CF}, /* 105CE */
+ {0x105D0,0x105D0},{0x105D1,0x105D1}, /* 105D0 */
+ {0x105D2,0x105D2},{0x105D3,0x105D3}, /* 105D2 */
+ {0x105D4,0x105D4},{0x105D5,0x105D5}, /* 105D4 */
+ {0x105D6,0x105D6},{0x105D7,0x105D7}, /* 105D6 */
+ {0x105D8,0x105D8},{0x105D9,0x105D9}, /* 105D8 */
+ {0x105DA,0x105DA},{0x105DB,0x105DB}, /* 105DA */
+ {0x105DC,0x105DC},{0x105DD,0x105DD}, /* 105DC */
+ {0x105DE,0x105DE},{0x105DF,0x105DF}, /* 105DE */
+ {0x105E0,0x105E0},{0x105E1,0x105E1}, /* 105E0 */
+ {0x105E2,0x105E2},{0x105E3,0x105E3}, /* 105E2 */
+ {0x105E4,0x105E4},{0x105E5,0x105E5}, /* 105E4 */
+ {0x105E6,0x105E6},{0x105E7,0x105E7}, /* 105E6 */
+ {0x105E8,0x105E8},{0x105E9,0x105E9}, /* 105E8 */
+ {0x105EA,0x105EA},{0x105EB,0x105EB}, /* 105EA */
+ {0x105EC,0x105EC},{0x105ED,0x105ED}, /* 105EC */
+ {0x105EE,0x105EE},{0x105EF,0x105EF}, /* 105EE */
+ {0x105F0,0x105F0},{0x105F1,0x105F1}, /* 105F0 */
+ {0x105F2,0x105F2},{0x105F3,0x105F3}, /* 105F2 */
+ {0x105F4,0x105F4},{0x105F5,0x105F5}, /* 105F4 */
+ {0x105F6,0x105F6},{0x105F7,0x105F7}, /* 105F6 */
+ {0x105F8,0x105F8},{0x105F9,0x105F9}, /* 105F8 */
+ {0x105FA,0x105FA},{0x105FB,0x105FB}, /* 105FA */
+ {0x105FC,0x105FC},{0x105FD,0x105FD}, /* 105FC */
+ {0x105FE,0x105FE},{0x105FF,0x105FF} /* 105FE */
+};
+
+static const MY_CASEFOLD_CHARACTER u1400_casefold_page10C[256]={
+ {0x10C00,0x10C00},{0x10C01,0x10C01}, /* 10C00 */
+ {0x10C02,0x10C02},{0x10C03,0x10C03}, /* 10C02 */
+ {0x10C04,0x10C04},{0x10C05,0x10C05}, /* 10C04 */
+ {0x10C06,0x10C06},{0x10C07,0x10C07}, /* 10C06 */
+ {0x10C08,0x10C08},{0x10C09,0x10C09}, /* 10C08 */
+ {0x10C0A,0x10C0A},{0x10C0B,0x10C0B}, /* 10C0A */
+ {0x10C0C,0x10C0C},{0x10C0D,0x10C0D}, /* 10C0C */
+ {0x10C0E,0x10C0E},{0x10C0F,0x10C0F}, /* 10C0E */
+ {0x10C10,0x10C10},{0x10C11,0x10C11}, /* 10C10 */
+ {0x10C12,0x10C12},{0x10C13,0x10C13}, /* 10C12 */
+ {0x10C14,0x10C14},{0x10C15,0x10C15}, /* 10C14 */
+ {0x10C16,0x10C16},{0x10C17,0x10C17}, /* 10C16 */
+ {0x10C18,0x10C18},{0x10C19,0x10C19}, /* 10C18 */
+ {0x10C1A,0x10C1A},{0x10C1B,0x10C1B}, /* 10C1A */
+ {0x10C1C,0x10C1C},{0x10C1D,0x10C1D}, /* 10C1C */
+ {0x10C1E,0x10C1E},{0x10C1F,0x10C1F}, /* 10C1E */
+ {0x10C20,0x10C20},{0x10C21,0x10C21}, /* 10C20 */
+ {0x10C22,0x10C22},{0x10C23,0x10C23}, /* 10C22 */
+ {0x10C24,0x10C24},{0x10C25,0x10C25}, /* 10C24 */
+ {0x10C26,0x10C26},{0x10C27,0x10C27}, /* 10C26 */
+ {0x10C28,0x10C28},{0x10C29,0x10C29}, /* 10C28 */
+ {0x10C2A,0x10C2A},{0x10C2B,0x10C2B}, /* 10C2A */
+ {0x10C2C,0x10C2C},{0x10C2D,0x10C2D}, /* 10C2C */
+ {0x10C2E,0x10C2E},{0x10C2F,0x10C2F}, /* 10C2E */
+ {0x10C30,0x10C30},{0x10C31,0x10C31}, /* 10C30 */
+ {0x10C32,0x10C32},{0x10C33,0x10C33}, /* 10C32 */
+ {0x10C34,0x10C34},{0x10C35,0x10C35}, /* 10C34 */
+ {0x10C36,0x10C36},{0x10C37,0x10C37}, /* 10C36 */
+ {0x10C38,0x10C38},{0x10C39,0x10C39}, /* 10C38 */
+ {0x10C3A,0x10C3A},{0x10C3B,0x10C3B}, /* 10C3A */
+ {0x10C3C,0x10C3C},{0x10C3D,0x10C3D}, /* 10C3C */
+ {0x10C3E,0x10C3E},{0x10C3F,0x10C3F}, /* 10C3E */
+ {0x10C40,0x10C40},{0x10C41,0x10C41}, /* 10C40 */
+ {0x10C42,0x10C42},{0x10C43,0x10C43}, /* 10C42 */
+ {0x10C44,0x10C44},{0x10C45,0x10C45}, /* 10C44 */
+ {0x10C46,0x10C46},{0x10C47,0x10C47}, /* 10C46 */
+ {0x10C48,0x10C48},{0x10C49,0x10C49}, /* 10C48 */
+ {0x10C4A,0x10C4A},{0x10C4B,0x10C4B}, /* 10C4A */
+ {0x10C4C,0x10C4C},{0x10C4D,0x10C4D}, /* 10C4C */
+ {0x10C4E,0x10C4E},{0x10C4F,0x10C4F}, /* 10C4E */
+ {0x10C50,0x10C50},{0x10C51,0x10C51}, /* 10C50 */
+ {0x10C52,0x10C52},{0x10C53,0x10C53}, /* 10C52 */
+ {0x10C54,0x10C54},{0x10C55,0x10C55}, /* 10C54 */
+ {0x10C56,0x10C56},{0x10C57,0x10C57}, /* 10C56 */
+ {0x10C58,0x10C58},{0x10C59,0x10C59}, /* 10C58 */
+ {0x10C5A,0x10C5A},{0x10C5B,0x10C5B}, /* 10C5A */
+ {0x10C5C,0x10C5C},{0x10C5D,0x10C5D}, /* 10C5C */
+ {0x10C5E,0x10C5E},{0x10C5F,0x10C5F}, /* 10C5E */
+ {0x10C60,0x10C60},{0x10C61,0x10C61}, /* 10C60 */
+ {0x10C62,0x10C62},{0x10C63,0x10C63}, /* 10C62 */
+ {0x10C64,0x10C64},{0x10C65,0x10C65}, /* 10C64 */
+ {0x10C66,0x10C66},{0x10C67,0x10C67}, /* 10C66 */
+ {0x10C68,0x10C68},{0x10C69,0x10C69}, /* 10C68 */
+ {0x10C6A,0x10C6A},{0x10C6B,0x10C6B}, /* 10C6A */
+ {0x10C6C,0x10C6C},{0x10C6D,0x10C6D}, /* 10C6C */
+ {0x10C6E,0x10C6E},{0x10C6F,0x10C6F}, /* 10C6E */
+ {0x10C70,0x10C70},{0x10C71,0x10C71}, /* 10C70 */
+ {0x10C72,0x10C72},{0x10C73,0x10C73}, /* 10C72 */
+ {0x10C74,0x10C74},{0x10C75,0x10C75}, /* 10C74 */
+ {0x10C76,0x10C76},{0x10C77,0x10C77}, /* 10C76 */
+ {0x10C78,0x10C78},{0x10C79,0x10C79}, /* 10C78 */
+ {0x10C7A,0x10C7A},{0x10C7B,0x10C7B}, /* 10C7A */
+ {0x10C7C,0x10C7C},{0x10C7D,0x10C7D}, /* 10C7C */
+ {0x10C7E,0x10C7E},{0x10C7F,0x10C7F}, /* 10C7E */
+ {0x10C80,0x10CC0},{0x10C81,0x10CC1}, /* 10C80 */
+ {0x10C82,0x10CC2},{0x10C83,0x10CC3}, /* 10C82 */
+ {0x10C84,0x10CC4},{0x10C85,0x10CC5}, /* 10C84 */
+ {0x10C86,0x10CC6},{0x10C87,0x10CC7}, /* 10C86 */
+ {0x10C88,0x10CC8},{0x10C89,0x10CC9}, /* 10C88 */
+ {0x10C8A,0x10CCA},{0x10C8B,0x10CCB}, /* 10C8A */
+ {0x10C8C,0x10CCC},{0x10C8D,0x10CCD}, /* 10C8C */
+ {0x10C8E,0x10CCE},{0x10C8F,0x10CCF}, /* 10C8E */
+ {0x10C90,0x10CD0},{0x10C91,0x10CD1}, /* 10C90 */
+ {0x10C92,0x10CD2},{0x10C93,0x10CD3}, /* 10C92 */
+ {0x10C94,0x10CD4},{0x10C95,0x10CD5}, /* 10C94 */
+ {0x10C96,0x10CD6},{0x10C97,0x10CD7}, /* 10C96 */
+ {0x10C98,0x10CD8},{0x10C99,0x10CD9}, /* 10C98 */
+ {0x10C9A,0x10CDA},{0x10C9B,0x10CDB}, /* 10C9A */
+ {0x10C9C,0x10CDC},{0x10C9D,0x10CDD}, /* 10C9C */
+ {0x10C9E,0x10CDE},{0x10C9F,0x10CDF}, /* 10C9E */
+ {0x10CA0,0x10CE0},{0x10CA1,0x10CE1}, /* 10CA0 */
+ {0x10CA2,0x10CE2},{0x10CA3,0x10CE3}, /* 10CA2 */
+ {0x10CA4,0x10CE4},{0x10CA5,0x10CE5}, /* 10CA4 */
+ {0x10CA6,0x10CE6},{0x10CA7,0x10CE7}, /* 10CA6 */
+ {0x10CA8,0x10CE8},{0x10CA9,0x10CE9}, /* 10CA8 */
+ {0x10CAA,0x10CEA},{0x10CAB,0x10CEB}, /* 10CAA */
+ {0x10CAC,0x10CEC},{0x10CAD,0x10CED}, /* 10CAC */
+ {0x10CAE,0x10CEE},{0x10CAF,0x10CEF}, /* 10CAE */
+ {0x10CB0,0x10CF0},{0x10CB1,0x10CF1}, /* 10CB0 */
+ {0x10CB2,0x10CF2},{0x10CB3,0x10CB3}, /* 10CB2 */
+ {0x10CB4,0x10CB4},{0x10CB5,0x10CB5}, /* 10CB4 */
+ {0x10CB6,0x10CB6},{0x10CB7,0x10CB7}, /* 10CB6 */
+ {0x10CB8,0x10CB8},{0x10CB9,0x10CB9}, /* 10CB8 */
+ {0x10CBA,0x10CBA},{0x10CBB,0x10CBB}, /* 10CBA */
+ {0x10CBC,0x10CBC},{0x10CBD,0x10CBD}, /* 10CBC */
+ {0x10CBE,0x10CBE},{0x10CBF,0x10CBF}, /* 10CBE */
+ {0x10C80,0x10CC0},{0x10C81,0x10CC1}, /* 10CC0 */
+ {0x10C82,0x10CC2},{0x10C83,0x10CC3}, /* 10CC2 */
+ {0x10C84,0x10CC4},{0x10C85,0x10CC5}, /* 10CC4 */
+ {0x10C86,0x10CC6},{0x10C87,0x10CC7}, /* 10CC6 */
+ {0x10C88,0x10CC8},{0x10C89,0x10CC9}, /* 10CC8 */
+ {0x10C8A,0x10CCA},{0x10C8B,0x10CCB}, /* 10CCA */
+ {0x10C8C,0x10CCC},{0x10C8D,0x10CCD}, /* 10CCC */
+ {0x10C8E,0x10CCE},{0x10C8F,0x10CCF}, /* 10CCE */
+ {0x10C90,0x10CD0},{0x10C91,0x10CD1}, /* 10CD0 */
+ {0x10C92,0x10CD2},{0x10C93,0x10CD3}, /* 10CD2 */
+ {0x10C94,0x10CD4},{0x10C95,0x10CD5}, /* 10CD4 */
+ {0x10C96,0x10CD6},{0x10C97,0x10CD7}, /* 10CD6 */
+ {0x10C98,0x10CD8},{0x10C99,0x10CD9}, /* 10CD8 */
+ {0x10C9A,0x10CDA},{0x10C9B,0x10CDB}, /* 10CDA */
+ {0x10C9C,0x10CDC},{0x10C9D,0x10CDD}, /* 10CDC */
+ {0x10C9E,0x10CDE},{0x10C9F,0x10CDF}, /* 10CDE */
+ {0x10CA0,0x10CE0},{0x10CA1,0x10CE1}, /* 10CE0 */
+ {0x10CA2,0x10CE2},{0x10CA3,0x10CE3}, /* 10CE2 */
+ {0x10CA4,0x10CE4},{0x10CA5,0x10CE5}, /* 10CE4 */
+ {0x10CA6,0x10CE6},{0x10CA7,0x10CE7}, /* 10CE6 */
+ {0x10CA8,0x10CE8},{0x10CA9,0x10CE9}, /* 10CE8 */
+ {0x10CAA,0x10CEA},{0x10CAB,0x10CEB}, /* 10CEA */
+ {0x10CAC,0x10CEC},{0x10CAD,0x10CED}, /* 10CEC */
+ {0x10CAE,0x10CEE},{0x10CAF,0x10CEF}, /* 10CEE */
+ {0x10CB0,0x10CF0},{0x10CB1,0x10CF1}, /* 10CF0 */
+ {0x10CB2,0x10CF2},{0x10CF3,0x10CF3}, /* 10CF2 */
+ {0x10CF4,0x10CF4},{0x10CF5,0x10CF5}, /* 10CF4 */
+ {0x10CF6,0x10CF6},{0x10CF7,0x10CF7}, /* 10CF6 */
+ {0x10CF8,0x10CF8},{0x10CF9,0x10CF9}, /* 10CF8 */
+ {0x10CFA,0x10CFA},{0x10CFB,0x10CFB}, /* 10CFA */
+ {0x10CFC,0x10CFC},{0x10CFD,0x10CFD}, /* 10CFC */
+ {0x10CFE,0x10CFE},{0x10CFF,0x10CFF} /* 10CFE */
+};
+
+static const MY_CASEFOLD_CHARACTER u1400_casefold_page118[256]={
+ {0x11800,0x11800},{0x11801,0x11801}, /* 11800 */
+ {0x11802,0x11802},{0x11803,0x11803}, /* 11802 */
+ {0x11804,0x11804},{0x11805,0x11805}, /* 11804 */
+ {0x11806,0x11806},{0x11807,0x11807}, /* 11806 */
+ {0x11808,0x11808},{0x11809,0x11809}, /* 11808 */
+ {0x1180A,0x1180A},{0x1180B,0x1180B}, /* 1180A */
+ {0x1180C,0x1180C},{0x1180D,0x1180D}, /* 1180C */
+ {0x1180E,0x1180E},{0x1180F,0x1180F}, /* 1180E */
+ {0x11810,0x11810},{0x11811,0x11811}, /* 11810 */
+ {0x11812,0x11812},{0x11813,0x11813}, /* 11812 */
+ {0x11814,0x11814},{0x11815,0x11815}, /* 11814 */
+ {0x11816,0x11816},{0x11817,0x11817}, /* 11816 */
+ {0x11818,0x11818},{0x11819,0x11819}, /* 11818 */
+ {0x1181A,0x1181A},{0x1181B,0x1181B}, /* 1181A */
+ {0x1181C,0x1181C},{0x1181D,0x1181D}, /* 1181C */
+ {0x1181E,0x1181E},{0x1181F,0x1181F}, /* 1181E */
+ {0x11820,0x11820},{0x11821,0x11821}, /* 11820 */
+ {0x11822,0x11822},{0x11823,0x11823}, /* 11822 */
+ {0x11824,0x11824},{0x11825,0x11825}, /* 11824 */
+ {0x11826,0x11826},{0x11827,0x11827}, /* 11826 */
+ {0x11828,0x11828},{0x11829,0x11829}, /* 11828 */
+ {0x1182A,0x1182A},{0x1182B,0x1182B}, /* 1182A */
+ {0x1182C,0x1182C},{0x1182D,0x1182D}, /* 1182C */
+ {0x1182E,0x1182E},{0x1182F,0x1182F}, /* 1182E */
+ {0x11830,0x11830},{0x11831,0x11831}, /* 11830 */
+ {0x11832,0x11832},{0x11833,0x11833}, /* 11832 */
+ {0x11834,0x11834},{0x11835,0x11835}, /* 11834 */
+ {0x11836,0x11836},{0x11837,0x11837}, /* 11836 */
+ {0x11838,0x11838},{0x11839,0x11839}, /* 11838 */
+ {0x1183A,0x1183A},{0x1183B,0x1183B}, /* 1183A */
+ {0x1183C,0x1183C},{0x1183D,0x1183D}, /* 1183C */
+ {0x1183E,0x1183E},{0x1183F,0x1183F}, /* 1183E */
+ {0x11840,0x11840},{0x11841,0x11841}, /* 11840 */
+ {0x11842,0x11842},{0x11843,0x11843}, /* 11842 */
+ {0x11844,0x11844},{0x11845,0x11845}, /* 11844 */
+ {0x11846,0x11846},{0x11847,0x11847}, /* 11846 */
+ {0x11848,0x11848},{0x11849,0x11849}, /* 11848 */
+ {0x1184A,0x1184A},{0x1184B,0x1184B}, /* 1184A */
+ {0x1184C,0x1184C},{0x1184D,0x1184D}, /* 1184C */
+ {0x1184E,0x1184E},{0x1184F,0x1184F}, /* 1184E */
+ {0x11850,0x11850},{0x11851,0x11851}, /* 11850 */
+ {0x11852,0x11852},{0x11853,0x11853}, /* 11852 */
+ {0x11854,0x11854},{0x11855,0x11855}, /* 11854 */
+ {0x11856,0x11856},{0x11857,0x11857}, /* 11856 */
+ {0x11858,0x11858},{0x11859,0x11859}, /* 11858 */
+ {0x1185A,0x1185A},{0x1185B,0x1185B}, /* 1185A */
+ {0x1185C,0x1185C},{0x1185D,0x1185D}, /* 1185C */
+ {0x1185E,0x1185E},{0x1185F,0x1185F}, /* 1185E */
+ {0x11860,0x11860},{0x11861,0x11861}, /* 11860 */
+ {0x11862,0x11862},{0x11863,0x11863}, /* 11862 */
+ {0x11864,0x11864},{0x11865,0x11865}, /* 11864 */
+ {0x11866,0x11866},{0x11867,0x11867}, /* 11866 */
+ {0x11868,0x11868},{0x11869,0x11869}, /* 11868 */
+ {0x1186A,0x1186A},{0x1186B,0x1186B}, /* 1186A */
+ {0x1186C,0x1186C},{0x1186D,0x1186D}, /* 1186C */
+ {0x1186E,0x1186E},{0x1186F,0x1186F}, /* 1186E */
+ {0x11870,0x11870},{0x11871,0x11871}, /* 11870 */
+ {0x11872,0x11872},{0x11873,0x11873}, /* 11872 */
+ {0x11874,0x11874},{0x11875,0x11875}, /* 11874 */
+ {0x11876,0x11876},{0x11877,0x11877}, /* 11876 */
+ {0x11878,0x11878},{0x11879,0x11879}, /* 11878 */
+ {0x1187A,0x1187A},{0x1187B,0x1187B}, /* 1187A */
+ {0x1187C,0x1187C},{0x1187D,0x1187D}, /* 1187C */
+ {0x1187E,0x1187E},{0x1187F,0x1187F}, /* 1187E */
+ {0x11880,0x11880},{0x11881,0x11881}, /* 11880 */
+ {0x11882,0x11882},{0x11883,0x11883}, /* 11882 */
+ {0x11884,0x11884},{0x11885,0x11885}, /* 11884 */
+ {0x11886,0x11886},{0x11887,0x11887}, /* 11886 */
+ {0x11888,0x11888},{0x11889,0x11889}, /* 11888 */
+ {0x1188A,0x1188A},{0x1188B,0x1188B}, /* 1188A */
+ {0x1188C,0x1188C},{0x1188D,0x1188D}, /* 1188C */
+ {0x1188E,0x1188E},{0x1188F,0x1188F}, /* 1188E */
+ {0x11890,0x11890},{0x11891,0x11891}, /* 11890 */
+ {0x11892,0x11892},{0x11893,0x11893}, /* 11892 */
+ {0x11894,0x11894},{0x11895,0x11895}, /* 11894 */
+ {0x11896,0x11896},{0x11897,0x11897}, /* 11896 */
+ {0x11898,0x11898},{0x11899,0x11899}, /* 11898 */
+ {0x1189A,0x1189A},{0x1189B,0x1189B}, /* 1189A */
+ {0x1189C,0x1189C},{0x1189D,0x1189D}, /* 1189C */
+ {0x1189E,0x1189E},{0x1189F,0x1189F}, /* 1189E */
+ {0x118A0,0x118C0},{0x118A1,0x118C1}, /* 118A0 */
+ {0x118A2,0x118C2},{0x118A3,0x118C3}, /* 118A2 */
+ {0x118A4,0x118C4},{0x118A5,0x118C5}, /* 118A4 */
+ {0x118A6,0x118C6},{0x118A7,0x118C7}, /* 118A6 */
+ {0x118A8,0x118C8},{0x118A9,0x118C9}, /* 118A8 */
+ {0x118AA,0x118CA},{0x118AB,0x118CB}, /* 118AA */
+ {0x118AC,0x118CC},{0x118AD,0x118CD}, /* 118AC */
+ {0x118AE,0x118CE},{0x118AF,0x118CF}, /* 118AE */
+ {0x118B0,0x118D0},{0x118B1,0x118D1}, /* 118B0 */
+ {0x118B2,0x118D2},{0x118B3,0x118D3}, /* 118B2 */
+ {0x118B4,0x118D4},{0x118B5,0x118D5}, /* 118B4 */
+ {0x118B6,0x118D6},{0x118B7,0x118D7}, /* 118B6 */
+ {0x118B8,0x118D8},{0x118B9,0x118D9}, /* 118B8 */
+ {0x118BA,0x118DA},{0x118BB,0x118DB}, /* 118BA */
+ {0x118BC,0x118DC},{0x118BD,0x118DD}, /* 118BC */
+ {0x118BE,0x118DE},{0x118BF,0x118DF}, /* 118BE */
+ {0x118A0,0x118C0},{0x118A1,0x118C1}, /* 118C0 */
+ {0x118A2,0x118C2},{0x118A3,0x118C3}, /* 118C2 */
+ {0x118A4,0x118C4},{0x118A5,0x118C5}, /* 118C4 */
+ {0x118A6,0x118C6},{0x118A7,0x118C7}, /* 118C6 */
+ {0x118A8,0x118C8},{0x118A9,0x118C9}, /* 118C8 */
+ {0x118AA,0x118CA},{0x118AB,0x118CB}, /* 118CA */
+ {0x118AC,0x118CC},{0x118AD,0x118CD}, /* 118CC */
+ {0x118AE,0x118CE},{0x118AF,0x118CF}, /* 118CE */
+ {0x118B0,0x118D0},{0x118B1,0x118D1}, /* 118D0 */
+ {0x118B2,0x118D2},{0x118B3,0x118D3}, /* 118D2 */
+ {0x118B4,0x118D4},{0x118B5,0x118D5}, /* 118D4 */
+ {0x118B6,0x118D6},{0x118B7,0x118D7}, /* 118D6 */
+ {0x118B8,0x118D8},{0x118B9,0x118D9}, /* 118D8 */
+ {0x118BA,0x118DA},{0x118BB,0x118DB}, /* 118DA */
+ {0x118BC,0x118DC},{0x118BD,0x118DD}, /* 118DC */
+ {0x118BE,0x118DE},{0x118BF,0x118DF}, /* 118DE */
+ {0x118E0,0x118E0},{0x118E1,0x118E1}, /* 118E0 */
+ {0x118E2,0x118E2},{0x118E3,0x118E3}, /* 118E2 */
+ {0x118E4,0x118E4},{0x118E5,0x118E5}, /* 118E4 */
+ {0x118E6,0x118E6},{0x118E7,0x118E7}, /* 118E6 */
+ {0x118E8,0x118E8},{0x118E9,0x118E9}, /* 118E8 */
+ {0x118EA,0x118EA},{0x118EB,0x118EB}, /* 118EA */
+ {0x118EC,0x118EC},{0x118ED,0x118ED}, /* 118EC */
+ {0x118EE,0x118EE},{0x118EF,0x118EF}, /* 118EE */
+ {0x118F0,0x118F0},{0x118F1,0x118F1}, /* 118F0 */
+ {0x118F2,0x118F2},{0x118F3,0x118F3}, /* 118F2 */
+ {0x118F4,0x118F4},{0x118F5,0x118F5}, /* 118F4 */
+ {0x118F6,0x118F6},{0x118F7,0x118F7}, /* 118F6 */
+ {0x118F8,0x118F8},{0x118F9,0x118F9}, /* 118F8 */
+ {0x118FA,0x118FA},{0x118FB,0x118FB}, /* 118FA */
+ {0x118FC,0x118FC},{0x118FD,0x118FD}, /* 118FC */
+ {0x118FE,0x118FE},{0x118FF,0x118FF} /* 118FE */
+};
+
+static const MY_CASEFOLD_CHARACTER u1400_casefold_page16E[256]={
+ {0x16E00,0x16E00},{0x16E01,0x16E01}, /* 16E00 */
+ {0x16E02,0x16E02},{0x16E03,0x16E03}, /* 16E02 */
+ {0x16E04,0x16E04},{0x16E05,0x16E05}, /* 16E04 */
+ {0x16E06,0x16E06},{0x16E07,0x16E07}, /* 16E06 */
+ {0x16E08,0x16E08},{0x16E09,0x16E09}, /* 16E08 */
+ {0x16E0A,0x16E0A},{0x16E0B,0x16E0B}, /* 16E0A */
+ {0x16E0C,0x16E0C},{0x16E0D,0x16E0D}, /* 16E0C */
+ {0x16E0E,0x16E0E},{0x16E0F,0x16E0F}, /* 16E0E */
+ {0x16E10,0x16E10},{0x16E11,0x16E11}, /* 16E10 */
+ {0x16E12,0x16E12},{0x16E13,0x16E13}, /* 16E12 */
+ {0x16E14,0x16E14},{0x16E15,0x16E15}, /* 16E14 */
+ {0x16E16,0x16E16},{0x16E17,0x16E17}, /* 16E16 */
+ {0x16E18,0x16E18},{0x16E19,0x16E19}, /* 16E18 */
+ {0x16E1A,0x16E1A},{0x16E1B,0x16E1B}, /* 16E1A */
+ {0x16E1C,0x16E1C},{0x16E1D,0x16E1D}, /* 16E1C */
+ {0x16E1E,0x16E1E},{0x16E1F,0x16E1F}, /* 16E1E */
+ {0x16E20,0x16E20},{0x16E21,0x16E21}, /* 16E20 */
+ {0x16E22,0x16E22},{0x16E23,0x16E23}, /* 16E22 */
+ {0x16E24,0x16E24},{0x16E25,0x16E25}, /* 16E24 */
+ {0x16E26,0x16E26},{0x16E27,0x16E27}, /* 16E26 */
+ {0x16E28,0x16E28},{0x16E29,0x16E29}, /* 16E28 */
+ {0x16E2A,0x16E2A},{0x16E2B,0x16E2B}, /* 16E2A */
+ {0x16E2C,0x16E2C},{0x16E2D,0x16E2D}, /* 16E2C */
+ {0x16E2E,0x16E2E},{0x16E2F,0x16E2F}, /* 16E2E */
+ {0x16E30,0x16E30},{0x16E31,0x16E31}, /* 16E30 */
+ {0x16E32,0x16E32},{0x16E33,0x16E33}, /* 16E32 */
+ {0x16E34,0x16E34},{0x16E35,0x16E35}, /* 16E34 */
+ {0x16E36,0x16E36},{0x16E37,0x16E37}, /* 16E36 */
+ {0x16E38,0x16E38},{0x16E39,0x16E39}, /* 16E38 */
+ {0x16E3A,0x16E3A},{0x16E3B,0x16E3B}, /* 16E3A */
+ {0x16E3C,0x16E3C},{0x16E3D,0x16E3D}, /* 16E3C */
+ {0x16E3E,0x16E3E},{0x16E3F,0x16E3F}, /* 16E3E */
+ {0x16E40,0x16E60},{0x16E41,0x16E61}, /* 16E40 */
+ {0x16E42,0x16E62},{0x16E43,0x16E63}, /* 16E42 */
+ {0x16E44,0x16E64},{0x16E45,0x16E65}, /* 16E44 */
+ {0x16E46,0x16E66},{0x16E47,0x16E67}, /* 16E46 */
+ {0x16E48,0x16E68},{0x16E49,0x16E69}, /* 16E48 */
+ {0x16E4A,0x16E6A},{0x16E4B,0x16E6B}, /* 16E4A */
+ {0x16E4C,0x16E6C},{0x16E4D,0x16E6D}, /* 16E4C */
+ {0x16E4E,0x16E6E},{0x16E4F,0x16E6F}, /* 16E4E */
+ {0x16E50,0x16E70},{0x16E51,0x16E71}, /* 16E50 */
+ {0x16E52,0x16E72},{0x16E53,0x16E73}, /* 16E52 */
+ {0x16E54,0x16E74},{0x16E55,0x16E75}, /* 16E54 */
+ {0x16E56,0x16E76},{0x16E57,0x16E77}, /* 16E56 */
+ {0x16E58,0x16E78},{0x16E59,0x16E79}, /* 16E58 */
+ {0x16E5A,0x16E7A},{0x16E5B,0x16E7B}, /* 16E5A */
+ {0x16E5C,0x16E7C},{0x16E5D,0x16E7D}, /* 16E5C */
+ {0x16E5E,0x16E7E},{0x16E5F,0x16E7F}, /* 16E5E */
+ {0x16E40,0x16E60},{0x16E41,0x16E61}, /* 16E60 */
+ {0x16E42,0x16E62},{0x16E43,0x16E63}, /* 16E62 */
+ {0x16E44,0x16E64},{0x16E45,0x16E65}, /* 16E64 */
+ {0x16E46,0x16E66},{0x16E47,0x16E67}, /* 16E66 */
+ {0x16E48,0x16E68},{0x16E49,0x16E69}, /* 16E68 */
+ {0x16E4A,0x16E6A},{0x16E4B,0x16E6B}, /* 16E6A */
+ {0x16E4C,0x16E6C},{0x16E4D,0x16E6D}, /* 16E6C */
+ {0x16E4E,0x16E6E},{0x16E4F,0x16E6F}, /* 16E6E */
+ {0x16E50,0x16E70},{0x16E51,0x16E71}, /* 16E70 */
+ {0x16E52,0x16E72},{0x16E53,0x16E73}, /* 16E72 */
+ {0x16E54,0x16E74},{0x16E55,0x16E75}, /* 16E74 */
+ {0x16E56,0x16E76},{0x16E57,0x16E77}, /* 16E76 */
+ {0x16E58,0x16E78},{0x16E59,0x16E79}, /* 16E78 */
+ {0x16E5A,0x16E7A},{0x16E5B,0x16E7B}, /* 16E7A */
+ {0x16E5C,0x16E7C},{0x16E5D,0x16E7D}, /* 16E7C */
+ {0x16E5E,0x16E7E},{0x16E5F,0x16E7F}, /* 16E7E */
+ {0x16E80,0x16E80},{0x16E81,0x16E81}, /* 16E80 */
+ {0x16E82,0x16E82},{0x16E83,0x16E83}, /* 16E82 */
+ {0x16E84,0x16E84},{0x16E85,0x16E85}, /* 16E84 */
+ {0x16E86,0x16E86},{0x16E87,0x16E87}, /* 16E86 */
+ {0x16E88,0x16E88},{0x16E89,0x16E89}, /* 16E88 */
+ {0x16E8A,0x16E8A},{0x16E8B,0x16E8B}, /* 16E8A */
+ {0x16E8C,0x16E8C},{0x16E8D,0x16E8D}, /* 16E8C */
+ {0x16E8E,0x16E8E},{0x16E8F,0x16E8F}, /* 16E8E */
+ {0x16E90,0x16E90},{0x16E91,0x16E91}, /* 16E90 */
+ {0x16E92,0x16E92},{0x16E93,0x16E93}, /* 16E92 */
+ {0x16E94,0x16E94},{0x16E95,0x16E95}, /* 16E94 */
+ {0x16E96,0x16E96},{0x16E97,0x16E97}, /* 16E96 */
+ {0x16E98,0x16E98},{0x16E99,0x16E99}, /* 16E98 */
+ {0x16E9A,0x16E9A},{0x16E9B,0x16E9B}, /* 16E9A */
+ {0x16E9C,0x16E9C},{0x16E9D,0x16E9D}, /* 16E9C */
+ {0x16E9E,0x16E9E},{0x16E9F,0x16E9F}, /* 16E9E */
+ {0x16EA0,0x16EA0},{0x16EA1,0x16EA1}, /* 16EA0 */
+ {0x16EA2,0x16EA2},{0x16EA3,0x16EA3}, /* 16EA2 */
+ {0x16EA4,0x16EA4},{0x16EA5,0x16EA5}, /* 16EA4 */
+ {0x16EA6,0x16EA6},{0x16EA7,0x16EA7}, /* 16EA6 */
+ {0x16EA8,0x16EA8},{0x16EA9,0x16EA9}, /* 16EA8 */
+ {0x16EAA,0x16EAA},{0x16EAB,0x16EAB}, /* 16EAA */
+ {0x16EAC,0x16EAC},{0x16EAD,0x16EAD}, /* 16EAC */
+ {0x16EAE,0x16EAE},{0x16EAF,0x16EAF}, /* 16EAE */
+ {0x16EB0,0x16EB0},{0x16EB1,0x16EB1}, /* 16EB0 */
+ {0x16EB2,0x16EB2},{0x16EB3,0x16EB3}, /* 16EB2 */
+ {0x16EB4,0x16EB4},{0x16EB5,0x16EB5}, /* 16EB4 */
+ {0x16EB6,0x16EB6},{0x16EB7,0x16EB7}, /* 16EB6 */
+ {0x16EB8,0x16EB8},{0x16EB9,0x16EB9}, /* 16EB8 */
+ {0x16EBA,0x16EBA},{0x16EBB,0x16EBB}, /* 16EBA */
+ {0x16EBC,0x16EBC},{0x16EBD,0x16EBD}, /* 16EBC */
+ {0x16EBE,0x16EBE},{0x16EBF,0x16EBF}, /* 16EBE */
+ {0x16EC0,0x16EC0},{0x16EC1,0x16EC1}, /* 16EC0 */
+ {0x16EC2,0x16EC2},{0x16EC3,0x16EC3}, /* 16EC2 */
+ {0x16EC4,0x16EC4},{0x16EC5,0x16EC5}, /* 16EC4 */
+ {0x16EC6,0x16EC6},{0x16EC7,0x16EC7}, /* 16EC6 */
+ {0x16EC8,0x16EC8},{0x16EC9,0x16EC9}, /* 16EC8 */
+ {0x16ECA,0x16ECA},{0x16ECB,0x16ECB}, /* 16ECA */
+ {0x16ECC,0x16ECC},{0x16ECD,0x16ECD}, /* 16ECC */
+ {0x16ECE,0x16ECE},{0x16ECF,0x16ECF}, /* 16ECE */
+ {0x16ED0,0x16ED0},{0x16ED1,0x16ED1}, /* 16ED0 */
+ {0x16ED2,0x16ED2},{0x16ED3,0x16ED3}, /* 16ED2 */
+ {0x16ED4,0x16ED4},{0x16ED5,0x16ED5}, /* 16ED4 */
+ {0x16ED6,0x16ED6},{0x16ED7,0x16ED7}, /* 16ED6 */
+ {0x16ED8,0x16ED8},{0x16ED9,0x16ED9}, /* 16ED8 */
+ {0x16EDA,0x16EDA},{0x16EDB,0x16EDB}, /* 16EDA */
+ {0x16EDC,0x16EDC},{0x16EDD,0x16EDD}, /* 16EDC */
+ {0x16EDE,0x16EDE},{0x16EDF,0x16EDF}, /* 16EDE */
+ {0x16EE0,0x16EE0},{0x16EE1,0x16EE1}, /* 16EE0 */
+ {0x16EE2,0x16EE2},{0x16EE3,0x16EE3}, /* 16EE2 */
+ {0x16EE4,0x16EE4},{0x16EE5,0x16EE5}, /* 16EE4 */
+ {0x16EE6,0x16EE6},{0x16EE7,0x16EE7}, /* 16EE6 */
+ {0x16EE8,0x16EE8},{0x16EE9,0x16EE9}, /* 16EE8 */
+ {0x16EEA,0x16EEA},{0x16EEB,0x16EEB}, /* 16EEA */
+ {0x16EEC,0x16EEC},{0x16EED,0x16EED}, /* 16EEC */
+ {0x16EEE,0x16EEE},{0x16EEF,0x16EEF}, /* 16EEE */
+ {0x16EF0,0x16EF0},{0x16EF1,0x16EF1}, /* 16EF0 */
+ {0x16EF2,0x16EF2},{0x16EF3,0x16EF3}, /* 16EF2 */
+ {0x16EF4,0x16EF4},{0x16EF5,0x16EF5}, /* 16EF4 */
+ {0x16EF6,0x16EF6},{0x16EF7,0x16EF7}, /* 16EF6 */
+ {0x16EF8,0x16EF8},{0x16EF9,0x16EF9}, /* 16EF8 */
+ {0x16EFA,0x16EFA},{0x16EFB,0x16EFB}, /* 16EFA */
+ {0x16EFC,0x16EFC},{0x16EFD,0x16EFD}, /* 16EFC */
+ {0x16EFE,0x16EFE},{0x16EFF,0x16EFF} /* 16EFE */
+};
+
+static const MY_CASEFOLD_CHARACTER u1400_casefold_page1E9[256]={
+ {0x1E900,0x1E922},{0x1E901,0x1E923}, /* 1E900 */
+ {0x1E902,0x1E924},{0x1E903,0x1E925}, /* 1E902 */
+ {0x1E904,0x1E926},{0x1E905,0x1E927}, /* 1E904 */
+ {0x1E906,0x1E928},{0x1E907,0x1E929}, /* 1E906 */
+ {0x1E908,0x1E92A},{0x1E909,0x1E92B}, /* 1E908 */
+ {0x1E90A,0x1E92C},{0x1E90B,0x1E92D}, /* 1E90A */
+ {0x1E90C,0x1E92E},{0x1E90D,0x1E92F}, /* 1E90C */
+ {0x1E90E,0x1E930},{0x1E90F,0x1E931}, /* 1E90E */
+ {0x1E910,0x1E932},{0x1E911,0x1E933}, /* 1E910 */
+ {0x1E912,0x1E934},{0x1E913,0x1E935}, /* 1E912 */
+ {0x1E914,0x1E936},{0x1E915,0x1E937}, /* 1E914 */
+ {0x1E916,0x1E938},{0x1E917,0x1E939}, /* 1E916 */
+ {0x1E918,0x1E93A},{0x1E919,0x1E93B}, /* 1E918 */
+ {0x1E91A,0x1E93C},{0x1E91B,0x1E93D}, /* 1E91A */
+ {0x1E91C,0x1E93E},{0x1E91D,0x1E93F}, /* 1E91C */
+ {0x1E91E,0x1E940},{0x1E91F,0x1E941}, /* 1E91E */
+ {0x1E920,0x1E942},{0x1E921,0x1E943}, /* 1E920 */
+ {0x1E900,0x1E922},{0x1E901,0x1E923}, /* 1E922 */
+ {0x1E902,0x1E924},{0x1E903,0x1E925}, /* 1E924 */
+ {0x1E904,0x1E926},{0x1E905,0x1E927}, /* 1E926 */
+ {0x1E906,0x1E928},{0x1E907,0x1E929}, /* 1E928 */
+ {0x1E908,0x1E92A},{0x1E909,0x1E92B}, /* 1E92A */
+ {0x1E90A,0x1E92C},{0x1E90B,0x1E92D}, /* 1E92C */
+ {0x1E90C,0x1E92E},{0x1E90D,0x1E92F}, /* 1E92E */
+ {0x1E90E,0x1E930},{0x1E90F,0x1E931}, /* 1E930 */
+ {0x1E910,0x1E932},{0x1E911,0x1E933}, /* 1E932 */
+ {0x1E912,0x1E934},{0x1E913,0x1E935}, /* 1E934 */
+ {0x1E914,0x1E936},{0x1E915,0x1E937}, /* 1E936 */
+ {0x1E916,0x1E938},{0x1E917,0x1E939}, /* 1E938 */
+ {0x1E918,0x1E93A},{0x1E919,0x1E93B}, /* 1E93A */
+ {0x1E91A,0x1E93C},{0x1E91B,0x1E93D}, /* 1E93C */
+ {0x1E91C,0x1E93E},{0x1E91D,0x1E93F}, /* 1E93E */
+ {0x1E91E,0x1E940},{0x1E91F,0x1E941}, /* 1E940 */
+ {0x1E920,0x1E942},{0x1E921,0x1E943}, /* 1E942 */
+ {0x1E944,0x1E944},{0x1E945,0x1E945}, /* 1E944 */
+ {0x1E946,0x1E946},{0x1E947,0x1E947}, /* 1E946 */
+ {0x1E948,0x1E948},{0x1E949,0x1E949}, /* 1E948 */
+ {0x1E94A,0x1E94A},{0x1E94B,0x1E94B}, /* 1E94A */
+ {0x1E94C,0x1E94C},{0x1E94D,0x1E94D}, /* 1E94C */
+ {0x1E94E,0x1E94E},{0x1E94F,0x1E94F}, /* 1E94E */
+ {0x1E950,0x1E950},{0x1E951,0x1E951}, /* 1E950 */
+ {0x1E952,0x1E952},{0x1E953,0x1E953}, /* 1E952 */
+ {0x1E954,0x1E954},{0x1E955,0x1E955}, /* 1E954 */
+ {0x1E956,0x1E956},{0x1E957,0x1E957}, /* 1E956 */
+ {0x1E958,0x1E958},{0x1E959,0x1E959}, /* 1E958 */
+ {0x1E95A,0x1E95A},{0x1E95B,0x1E95B}, /* 1E95A */
+ {0x1E95C,0x1E95C},{0x1E95D,0x1E95D}, /* 1E95C */
+ {0x1E95E,0x1E95E},{0x1E95F,0x1E95F}, /* 1E95E */
+ {0x1E960,0x1E960},{0x1E961,0x1E961}, /* 1E960 */
+ {0x1E962,0x1E962},{0x1E963,0x1E963}, /* 1E962 */
+ {0x1E964,0x1E964},{0x1E965,0x1E965}, /* 1E964 */
+ {0x1E966,0x1E966},{0x1E967,0x1E967}, /* 1E966 */
+ {0x1E968,0x1E968},{0x1E969,0x1E969}, /* 1E968 */
+ {0x1E96A,0x1E96A},{0x1E96B,0x1E96B}, /* 1E96A */
+ {0x1E96C,0x1E96C},{0x1E96D,0x1E96D}, /* 1E96C */
+ {0x1E96E,0x1E96E},{0x1E96F,0x1E96F}, /* 1E96E */
+ {0x1E970,0x1E970},{0x1E971,0x1E971}, /* 1E970 */
+ {0x1E972,0x1E972},{0x1E973,0x1E973}, /* 1E972 */
+ {0x1E974,0x1E974},{0x1E975,0x1E975}, /* 1E974 */
+ {0x1E976,0x1E976},{0x1E977,0x1E977}, /* 1E976 */
+ {0x1E978,0x1E978},{0x1E979,0x1E979}, /* 1E978 */
+ {0x1E97A,0x1E97A},{0x1E97B,0x1E97B}, /* 1E97A */
+ {0x1E97C,0x1E97C},{0x1E97D,0x1E97D}, /* 1E97C */
+ {0x1E97E,0x1E97E},{0x1E97F,0x1E97F}, /* 1E97E */
+ {0x1E980,0x1E980},{0x1E981,0x1E981}, /* 1E980 */
+ {0x1E982,0x1E982},{0x1E983,0x1E983}, /* 1E982 */
+ {0x1E984,0x1E984},{0x1E985,0x1E985}, /* 1E984 */
+ {0x1E986,0x1E986},{0x1E987,0x1E987}, /* 1E986 */
+ {0x1E988,0x1E988},{0x1E989,0x1E989}, /* 1E988 */
+ {0x1E98A,0x1E98A},{0x1E98B,0x1E98B}, /* 1E98A */
+ {0x1E98C,0x1E98C},{0x1E98D,0x1E98D}, /* 1E98C */
+ {0x1E98E,0x1E98E},{0x1E98F,0x1E98F}, /* 1E98E */
+ {0x1E990,0x1E990},{0x1E991,0x1E991}, /* 1E990 */
+ {0x1E992,0x1E992},{0x1E993,0x1E993}, /* 1E992 */
+ {0x1E994,0x1E994},{0x1E995,0x1E995}, /* 1E994 */
+ {0x1E996,0x1E996},{0x1E997,0x1E997}, /* 1E996 */
+ {0x1E998,0x1E998},{0x1E999,0x1E999}, /* 1E998 */
+ {0x1E99A,0x1E99A},{0x1E99B,0x1E99B}, /* 1E99A */
+ {0x1E99C,0x1E99C},{0x1E99D,0x1E99D}, /* 1E99C */
+ {0x1E99E,0x1E99E},{0x1E99F,0x1E99F}, /* 1E99E */
+ {0x1E9A0,0x1E9A0},{0x1E9A1,0x1E9A1}, /* 1E9A0 */
+ {0x1E9A2,0x1E9A2},{0x1E9A3,0x1E9A3}, /* 1E9A2 */
+ {0x1E9A4,0x1E9A4},{0x1E9A5,0x1E9A5}, /* 1E9A4 */
+ {0x1E9A6,0x1E9A6},{0x1E9A7,0x1E9A7}, /* 1E9A6 */
+ {0x1E9A8,0x1E9A8},{0x1E9A9,0x1E9A9}, /* 1E9A8 */
+ {0x1E9AA,0x1E9AA},{0x1E9AB,0x1E9AB}, /* 1E9AA */
+ {0x1E9AC,0x1E9AC},{0x1E9AD,0x1E9AD}, /* 1E9AC */
+ {0x1E9AE,0x1E9AE},{0x1E9AF,0x1E9AF}, /* 1E9AE */
+ {0x1E9B0,0x1E9B0},{0x1E9B1,0x1E9B1}, /* 1E9B0 */
+ {0x1E9B2,0x1E9B2},{0x1E9B3,0x1E9B3}, /* 1E9B2 */
+ {0x1E9B4,0x1E9B4},{0x1E9B5,0x1E9B5}, /* 1E9B4 */
+ {0x1E9B6,0x1E9B6},{0x1E9B7,0x1E9B7}, /* 1E9B6 */
+ {0x1E9B8,0x1E9B8},{0x1E9B9,0x1E9B9}, /* 1E9B8 */
+ {0x1E9BA,0x1E9BA},{0x1E9BB,0x1E9BB}, /* 1E9BA */
+ {0x1E9BC,0x1E9BC},{0x1E9BD,0x1E9BD}, /* 1E9BC */
+ {0x1E9BE,0x1E9BE},{0x1E9BF,0x1E9BF}, /* 1E9BE */
+ {0x1E9C0,0x1E9C0},{0x1E9C1,0x1E9C1}, /* 1E9C0 */
+ {0x1E9C2,0x1E9C2},{0x1E9C3,0x1E9C3}, /* 1E9C2 */
+ {0x1E9C4,0x1E9C4},{0x1E9C5,0x1E9C5}, /* 1E9C4 */
+ {0x1E9C6,0x1E9C6},{0x1E9C7,0x1E9C7}, /* 1E9C6 */
+ {0x1E9C8,0x1E9C8},{0x1E9C9,0x1E9C9}, /* 1E9C8 */
+ {0x1E9CA,0x1E9CA},{0x1E9CB,0x1E9CB}, /* 1E9CA */
+ {0x1E9CC,0x1E9CC},{0x1E9CD,0x1E9CD}, /* 1E9CC */
+ {0x1E9CE,0x1E9CE},{0x1E9CF,0x1E9CF}, /* 1E9CE */
+ {0x1E9D0,0x1E9D0},{0x1E9D1,0x1E9D1}, /* 1E9D0 */
+ {0x1E9D2,0x1E9D2},{0x1E9D3,0x1E9D3}, /* 1E9D2 */
+ {0x1E9D4,0x1E9D4},{0x1E9D5,0x1E9D5}, /* 1E9D4 */
+ {0x1E9D6,0x1E9D6},{0x1E9D7,0x1E9D7}, /* 1E9D6 */
+ {0x1E9D8,0x1E9D8},{0x1E9D9,0x1E9D9}, /* 1E9D8 */
+ {0x1E9DA,0x1E9DA},{0x1E9DB,0x1E9DB}, /* 1E9DA */
+ {0x1E9DC,0x1E9DC},{0x1E9DD,0x1E9DD}, /* 1E9DC */
+ {0x1E9DE,0x1E9DE},{0x1E9DF,0x1E9DF}, /* 1E9DE */
+ {0x1E9E0,0x1E9E0},{0x1E9E1,0x1E9E1}, /* 1E9E0 */
+ {0x1E9E2,0x1E9E2},{0x1E9E3,0x1E9E3}, /* 1E9E2 */
+ {0x1E9E4,0x1E9E4},{0x1E9E5,0x1E9E5}, /* 1E9E4 */
+ {0x1E9E6,0x1E9E6},{0x1E9E7,0x1E9E7}, /* 1E9E6 */
+ {0x1E9E8,0x1E9E8},{0x1E9E9,0x1E9E9}, /* 1E9E8 */
+ {0x1E9EA,0x1E9EA},{0x1E9EB,0x1E9EB}, /* 1E9EA */
+ {0x1E9EC,0x1E9EC},{0x1E9ED,0x1E9ED}, /* 1E9EC */
+ {0x1E9EE,0x1E9EE},{0x1E9EF,0x1E9EF}, /* 1E9EE */
+ {0x1E9F0,0x1E9F0},{0x1E9F1,0x1E9F1}, /* 1E9F0 */
+ {0x1E9F2,0x1E9F2},{0x1E9F3,0x1E9F3}, /* 1E9F2 */
+ {0x1E9F4,0x1E9F4},{0x1E9F5,0x1E9F5}, /* 1E9F4 */
+ {0x1E9F6,0x1E9F6},{0x1E9F7,0x1E9F7}, /* 1E9F6 */
+ {0x1E9F8,0x1E9F8},{0x1E9F9,0x1E9F9}, /* 1E9F8 */
+ {0x1E9FA,0x1E9FA},{0x1E9FB,0x1E9FB}, /* 1E9FA */
+ {0x1E9FC,0x1E9FC},{0x1E9FD,0x1E9FD}, /* 1E9FC */
+ {0x1E9FE,0x1E9FE},{0x1E9FF,0x1E9FF} /* 1E9FE */
+};
+
+const MY_CASEFOLD_CHARACTER * my_u1400_casefold_index[4352]={
+ u1400_casefold_page00, u1400_casefold_page01, u1400_casefold_page02, u1400_casefold_page03, u1400_casefold_page04, u1400_casefold_page05, u1400_casefold_page06, u1400_casefold_page07,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ u1400_casefold_page10, NULL, NULL, u1400_casefold_page13, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, u1400_casefold_page1C, u1400_casefold_page1D, u1400_casefold_page1E, u1400_casefold_page1F,
+ NULL, u1400_casefold_page21, NULL, NULL, u1400_casefold_page24, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, u1400_casefold_page2C, u1400_casefold_page2D, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, u1400_casefold_pageA6, u1400_casefold_pageA7,
+ NULL, NULL, NULL, u1400_casefold_pageAB, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, u1400_casefold_pageFF,
+ NULL, NULL, NULL, NULL, u1400_casefold_page104, u1400_casefold_page105, NULL, NULL,
+ NULL, NULL, NULL, NULL, u1400_casefold_page10C, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ u1400_casefold_page118, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, u1400_casefold_page16E, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, u1400_casefold_page1E9, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
+};
diff --git a/strings/ctype-unicode300-casefold-tr.h b/strings/ctype-unicode300-casefold-tr.h
new file mode 100644
index 00000000000..ff428112382
--- /dev/null
+++ b/strings/ctype-unicode300-casefold-tr.h
@@ -0,0 +1,193 @@
+/* Copyright (c) 2000, 2013, Oracle and/or its affiliates.
+ Copyright (c) 2009, 2023, MariaDB Corporation.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; version 2 of the License.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA
+*/
+
+/*
+ Generated by:
+ ./unidata-dump \
+ --mode=casefold-tr \
+ --page-name=u300tr_casefold_page \
+ --page-name-derived=u300_casefold_page \
+ --index-name=my_u300tr_casefold_index \
+ --max-char=0xFFFF \
+ UnicodeData-3.0.0.txt
+
+*/
+const MY_CASEFOLD_CHARACTER u300tr_casefold_page00[256]={
+ {0x0000,0x0000},{0x0001,0x0001}, /* 0000 */
+ {0x0002,0x0002},{0x0003,0x0003}, /* 0002 */
+ {0x0004,0x0004},{0x0005,0x0005}, /* 0004 */
+ {0x0006,0x0006},{0x0007,0x0007}, /* 0006 */
+ {0x0008,0x0008},{0x0009,0x0009}, /* 0008 */
+ {0x000A,0x000A},{0x000B,0x000B}, /* 000A */
+ {0x000C,0x000C},{0x000D,0x000D}, /* 000C */
+ {0x000E,0x000E},{0x000F,0x000F}, /* 000E */
+ {0x0010,0x0010},{0x0011,0x0011}, /* 0010 */
+ {0x0012,0x0012},{0x0013,0x0013}, /* 0012 */
+ {0x0014,0x0014},{0x0015,0x0015}, /* 0014 */
+ {0x0016,0x0016},{0x0017,0x0017}, /* 0016 */
+ {0x0018,0x0018},{0x0019,0x0019}, /* 0018 */
+ {0x001A,0x001A},{0x001B,0x001B}, /* 001A */
+ {0x001C,0x001C},{0x001D,0x001D}, /* 001C */
+ {0x001E,0x001E},{0x001F,0x001F}, /* 001E */
+ {0x0020,0x0020},{0x0021,0x0021}, /* 0020 */
+ {0x0022,0x0022},{0x0023,0x0023}, /* 0022 */
+ {0x0024,0x0024},{0x0025,0x0025}, /* 0024 */
+ {0x0026,0x0026},{0x0027,0x0027}, /* 0026 */
+ {0x0028,0x0028},{0x0029,0x0029}, /* 0028 */
+ {0x002A,0x002A},{0x002B,0x002B}, /* 002A */
+ {0x002C,0x002C},{0x002D,0x002D}, /* 002C */
+ {0x002E,0x002E},{0x002F,0x002F}, /* 002E */
+ {0x0030,0x0030},{0x0031,0x0031}, /* 0030 */
+ {0x0032,0x0032},{0x0033,0x0033}, /* 0032 */
+ {0x0034,0x0034},{0x0035,0x0035}, /* 0034 */
+ {0x0036,0x0036},{0x0037,0x0037}, /* 0036 */
+ {0x0038,0x0038},{0x0039,0x0039}, /* 0038 */
+ {0x003A,0x003A},{0x003B,0x003B}, /* 003A */
+ {0x003C,0x003C},{0x003D,0x003D}, /* 003C */
+ {0x003E,0x003E},{0x003F,0x003F}, /* 003E */
+ {0x0040,0x0040},{0x0041,0x0061}, /* 0040 */
+ {0x0042,0x0062},{0x0043,0x0063}, /* 0042 */
+ {0x0044,0x0064},{0x0045,0x0065}, /* 0044 */
+ {0x0046,0x0066},{0x0047,0x0067}, /* 0046 */
+ {0x0048,0x0068},{0x0049,0x0131}, /* 0048 */
+ {0x004A,0x006A},{0x004B,0x006B}, /* 004A */
+ {0x004C,0x006C},{0x004D,0x006D}, /* 004C */
+ {0x004E,0x006E},{0x004F,0x006F}, /* 004E */
+ {0x0050,0x0070},{0x0051,0x0071}, /* 0050 */
+ {0x0052,0x0072},{0x0053,0x0073}, /* 0052 */
+ {0x0054,0x0074},{0x0055,0x0075}, /* 0054 */
+ {0x0056,0x0076},{0x0057,0x0077}, /* 0056 */
+ {0x0058,0x0078},{0x0059,0x0079}, /* 0058 */
+ {0x005A,0x007A},{0x005B,0x005B}, /* 005A */
+ {0x005C,0x005C},{0x005D,0x005D}, /* 005C */
+ {0x005E,0x005E},{0x005F,0x005F}, /* 005E */
+ {0x0060,0x0060},{0x0041,0x0061}, /* 0060 */
+ {0x0042,0x0062},{0x0043,0x0063}, /* 0062 */
+ {0x0044,0x0064},{0x0045,0x0065}, /* 0064 */
+ {0x0046,0x0066},{0x0047,0x0067}, /* 0066 */
+ {0x0048,0x0068},{0x0130,0x0069}, /* 0068 */
+ {0x004A,0x006A},{0x004B,0x006B}, /* 006A */
+ {0x004C,0x006C},{0x004D,0x006D}, /* 006C */
+ {0x004E,0x006E},{0x004F,0x006F}, /* 006E */
+ {0x0050,0x0070},{0x0051,0x0071}, /* 0070 */
+ {0x0052,0x0072},{0x0053,0x0073}, /* 0072 */
+ {0x0054,0x0074},{0x0055,0x0075}, /* 0074 */
+ {0x0056,0x0076},{0x0057,0x0077}, /* 0076 */
+ {0x0058,0x0078},{0x0059,0x0079}, /* 0078 */
+ {0x005A,0x007A},{0x007B,0x007B}, /* 007A */
+ {0x007C,0x007C},{0x007D,0x007D}, /* 007C */
+ {0x007E,0x007E},{0x007F,0x007F}, /* 007E */
+ {0x0080,0x0080},{0x0081,0x0081}, /* 0080 */
+ {0x0082,0x0082},{0x0083,0x0083}, /* 0082 */
+ {0x0084,0x0084},{0x0085,0x0085}, /* 0084 */
+ {0x0086,0x0086},{0x0087,0x0087}, /* 0086 */
+ {0x0088,0x0088},{0x0089,0x0089}, /* 0088 */
+ {0x008A,0x008A},{0x008B,0x008B}, /* 008A */
+ {0x008C,0x008C},{0x008D,0x008D}, /* 008C */
+ {0x008E,0x008E},{0x008F,0x008F}, /* 008E */
+ {0x0090,0x0090},{0x0091,0x0091}, /* 0090 */
+ {0x0092,0x0092},{0x0093,0x0093}, /* 0092 */
+ {0x0094,0x0094},{0x0095,0x0095}, /* 0094 */
+ {0x0096,0x0096},{0x0097,0x0097}, /* 0096 */
+ {0x0098,0x0098},{0x0099,0x0099}, /* 0098 */
+ {0x009A,0x009A},{0x009B,0x009B}, /* 009A */
+ {0x009C,0x009C},{0x009D,0x009D}, /* 009C */
+ {0x009E,0x009E},{0x009F,0x009F}, /* 009E */
+ {0x00A0,0x00A0},{0x00A1,0x00A1}, /* 00A0 */
+ {0x00A2,0x00A2},{0x00A3,0x00A3}, /* 00A2 */
+ {0x00A4,0x00A4},{0x00A5,0x00A5}, /* 00A4 */
+ {0x00A6,0x00A6},{0x00A7,0x00A7}, /* 00A6 */
+ {0x00A8,0x00A8},{0x00A9,0x00A9}, /* 00A8 */
+ {0x00AA,0x00AA},{0x00AB,0x00AB}, /* 00AA */
+ {0x00AC,0x00AC},{0x00AD,0x00AD}, /* 00AC */
+ {0x00AE,0x00AE},{0x00AF,0x00AF}, /* 00AE */
+ {0x00B0,0x00B0},{0x00B1,0x00B1}, /* 00B0 */
+ {0x00B2,0x00B2},{0x00B3,0x00B3}, /* 00B2 */
+ {0x00B4,0x00B4},{0x039C,0x00B5}, /* 00B4 */
+ {0x00B6,0x00B6},{0x00B7,0x00B7}, /* 00B6 */
+ {0x00B8,0x00B8},{0x00B9,0x00B9}, /* 00B8 */
+ {0x00BA,0x00BA},{0x00BB,0x00BB}, /* 00BA */
+ {0x00BC,0x00BC},{0x00BD,0x00BD}, /* 00BC */
+ {0x00BE,0x00BE},{0x00BF,0x00BF}, /* 00BE */
+ {0x00C0,0x00E0},{0x00C1,0x00E1}, /* 00C0 */
+ {0x00C2,0x00E2},{0x00C3,0x00E3}, /* 00C2 */
+ {0x00C4,0x00E4},{0x00C5,0x00E5}, /* 00C4 */
+ {0x00C6,0x00E6},{0x00C7,0x00E7}, /* 00C6 */
+ {0x00C8,0x00E8},{0x00C9,0x00E9}, /* 00C8 */
+ {0x00CA,0x00EA},{0x00CB,0x00EB}, /* 00CA */
+ {0x00CC,0x00EC},{0x00CD,0x00ED}, /* 00CC */
+ {0x00CE,0x00EE},{0x00CF,0x00EF}, /* 00CE */
+ {0x00D0,0x00F0},{0x00D1,0x00F1}, /* 00D0 */
+ {0x00D2,0x00F2},{0x00D3,0x00F3}, /* 00D2 */
+ {0x00D4,0x00F4},{0x00D5,0x00F5}, /* 00D4 */
+ {0x00D6,0x00F6},{0x00D7,0x00D7}, /* 00D6 */
+ {0x00D8,0x00F8},{0x00D9,0x00F9}, /* 00D8 */
+ {0x00DA,0x00FA},{0x00DB,0x00FB}, /* 00DA */
+ {0x00DC,0x00FC},{0x00DD,0x00FD}, /* 00DC */
+ {0x00DE,0x00FE},{0x00DF,0x00DF}, /* 00DE */
+ {0x00C0,0x00E0},{0x00C1,0x00E1}, /* 00E0 */
+ {0x00C2,0x00E2},{0x00C3,0x00E3}, /* 00E2 */
+ {0x00C4,0x00E4},{0x00C5,0x00E5}, /* 00E4 */
+ {0x00C6,0x00E6},{0x00C7,0x00E7}, /* 00E6 */
+ {0x00C8,0x00E8},{0x00C9,0x00E9}, /* 00E8 */
+ {0x00CA,0x00EA},{0x00CB,0x00EB}, /* 00EA */
+ {0x00CC,0x00EC},{0x00CD,0x00ED}, /* 00EC */
+ {0x00CE,0x00EE},{0x00CF,0x00EF}, /* 00EE */
+ {0x00D0,0x00F0},{0x00D1,0x00F1}, /* 00F0 */
+ {0x00D2,0x00F2},{0x00D3,0x00F3}, /* 00F2 */
+ {0x00D4,0x00F4},{0x00D5,0x00F5}, /* 00F4 */
+ {0x00D6,0x00F6},{0x00F7,0x00F7}, /* 00F6 */
+ {0x00D8,0x00F8},{0x00D9,0x00F9}, /* 00F8 */
+ {0x00DA,0x00FA},{0x00DB,0x00FB}, /* 00FA */
+ {0x00DC,0x00FC},{0x00DD,0x00FD}, /* 00FC */
+ {0x00DE,0x00FE},{0x0178,0x00FF} /* 00FE */
+};
+
+const MY_CASEFOLD_CHARACTER * my_u300tr_casefold_index[256]={
+ u300tr_casefold_page00, u300_casefold_page01, u300_casefold_page02, u300_casefold_page03, u300_casefold_page04, u300_casefold_page05, u300_casefold_page06, u300_casefold_page07,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, u300_casefold_page1E, u300_casefold_page1F,
+ NULL, u300_casefold_page21, NULL, NULL, u300_casefold_page24, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, u300_casefold_pageFF
+};
diff --git a/strings/ctype-unicode300-casefold.h b/strings/ctype-unicode300-casefold.h
new file mode 100644
index 00000000000..353cba0846a
--- /dev/null
+++ b/strings/ctype-unicode300-casefold.h
@@ -0,0 +1,1764 @@
+/* Copyright (c) 2000, 2013, Oracle and/or its affiliates.
+ Copyright (c) 2009, 2023, MariaDB Corporation.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; version 2 of the License.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA
+*/
+
+/*
+ Generated by:
+ ./unidata-dump \
+ --mode=casefold \
+ --page-name=u300_casefold_page \
+ --index-name=my_u300_casefold_index \
+ --max-char=0xFFFF \
+ UnicodeData-3.0.0.txt
+
+*/
+const MY_CASEFOLD_CHARACTER u300_casefold_page00[256]={
+ {0x0000,0x0000},{0x0001,0x0001}, /* 0000 */
+ {0x0002,0x0002},{0x0003,0x0003}, /* 0002 */
+ {0x0004,0x0004},{0x0005,0x0005}, /* 0004 */
+ {0x0006,0x0006},{0x0007,0x0007}, /* 0006 */
+ {0x0008,0x0008},{0x0009,0x0009}, /* 0008 */
+ {0x000A,0x000A},{0x000B,0x000B}, /* 000A */
+ {0x000C,0x000C},{0x000D,0x000D}, /* 000C */
+ {0x000E,0x000E},{0x000F,0x000F}, /* 000E */
+ {0x0010,0x0010},{0x0011,0x0011}, /* 0010 */
+ {0x0012,0x0012},{0x0013,0x0013}, /* 0012 */
+ {0x0014,0x0014},{0x0015,0x0015}, /* 0014 */
+ {0x0016,0x0016},{0x0017,0x0017}, /* 0016 */
+ {0x0018,0x0018},{0x0019,0x0019}, /* 0018 */
+ {0x001A,0x001A},{0x001B,0x001B}, /* 001A */
+ {0x001C,0x001C},{0x001D,0x001D}, /* 001C */
+ {0x001E,0x001E},{0x001F,0x001F}, /* 001E */
+ {0x0020,0x0020},{0x0021,0x0021}, /* 0020 */
+ {0x0022,0x0022},{0x0023,0x0023}, /* 0022 */
+ {0x0024,0x0024},{0x0025,0x0025}, /* 0024 */
+ {0x0026,0x0026},{0x0027,0x0027}, /* 0026 */
+ {0x0028,0x0028},{0x0029,0x0029}, /* 0028 */
+ {0x002A,0x002A},{0x002B,0x002B}, /* 002A */
+ {0x002C,0x002C},{0x002D,0x002D}, /* 002C */
+ {0x002E,0x002E},{0x002F,0x002F}, /* 002E */
+ {0x0030,0x0030},{0x0031,0x0031}, /* 0030 */
+ {0x0032,0x0032},{0x0033,0x0033}, /* 0032 */
+ {0x0034,0x0034},{0x0035,0x0035}, /* 0034 */
+ {0x0036,0x0036},{0x0037,0x0037}, /* 0036 */
+ {0x0038,0x0038},{0x0039,0x0039}, /* 0038 */
+ {0x003A,0x003A},{0x003B,0x003B}, /* 003A */
+ {0x003C,0x003C},{0x003D,0x003D}, /* 003C */
+ {0x003E,0x003E},{0x003F,0x003F}, /* 003E */
+ {0x0040,0x0040},{0x0041,0x0061}, /* 0040 */
+ {0x0042,0x0062},{0x0043,0x0063}, /* 0042 */
+ {0x0044,0x0064},{0x0045,0x0065}, /* 0044 */
+ {0x0046,0x0066},{0x0047,0x0067}, /* 0046 */
+ {0x0048,0x0068},{0x0049,0x0069}, /* 0048 */
+ {0x004A,0x006A},{0x004B,0x006B}, /* 004A */
+ {0x004C,0x006C},{0x004D,0x006D}, /* 004C */
+ {0x004E,0x006E},{0x004F,0x006F}, /* 004E */
+ {0x0050,0x0070},{0x0051,0x0071}, /* 0050 */
+ {0x0052,0x0072},{0x0053,0x0073}, /* 0052 */
+ {0x0054,0x0074},{0x0055,0x0075}, /* 0054 */
+ {0x0056,0x0076},{0x0057,0x0077}, /* 0056 */
+ {0x0058,0x0078},{0x0059,0x0079}, /* 0058 */
+ {0x005A,0x007A},{0x005B,0x005B}, /* 005A */
+ {0x005C,0x005C},{0x005D,0x005D}, /* 005C */
+ {0x005E,0x005E},{0x005F,0x005F}, /* 005E */
+ {0x0060,0x0060},{0x0041,0x0061}, /* 0060 */
+ {0x0042,0x0062},{0x0043,0x0063}, /* 0062 */
+ {0x0044,0x0064},{0x0045,0x0065}, /* 0064 */
+ {0x0046,0x0066},{0x0047,0x0067}, /* 0066 */
+ {0x0048,0x0068},{0x0049,0x0069}, /* 0068 */
+ {0x004A,0x006A},{0x004B,0x006B}, /* 006A */
+ {0x004C,0x006C},{0x004D,0x006D}, /* 006C */
+ {0x004E,0x006E},{0x004F,0x006F}, /* 006E */
+ {0x0050,0x0070},{0x0051,0x0071}, /* 0070 */
+ {0x0052,0x0072},{0x0053,0x0073}, /* 0072 */
+ {0x0054,0x0074},{0x0055,0x0075}, /* 0074 */
+ {0x0056,0x0076},{0x0057,0x0077}, /* 0076 */
+ {0x0058,0x0078},{0x0059,0x0079}, /* 0078 */
+ {0x005A,0x007A},{0x007B,0x007B}, /* 007A */
+ {0x007C,0x007C},{0x007D,0x007D}, /* 007C */
+ {0x007E,0x007E},{0x007F,0x007F}, /* 007E */
+ {0x0080,0x0080},{0x0081,0x0081}, /* 0080 */
+ {0x0082,0x0082},{0x0083,0x0083}, /* 0082 */
+ {0x0084,0x0084},{0x0085,0x0085}, /* 0084 */
+ {0x0086,0x0086},{0x0087,0x0087}, /* 0086 */
+ {0x0088,0x0088},{0x0089,0x0089}, /* 0088 */
+ {0x008A,0x008A},{0x008B,0x008B}, /* 008A */
+ {0x008C,0x008C},{0x008D,0x008D}, /* 008C */
+ {0x008E,0x008E},{0x008F,0x008F}, /* 008E */
+ {0x0090,0x0090},{0x0091,0x0091}, /* 0090 */
+ {0x0092,0x0092},{0x0093,0x0093}, /* 0092 */
+ {0x0094,0x0094},{0x0095,0x0095}, /* 0094 */
+ {0x0096,0x0096},{0x0097,0x0097}, /* 0096 */
+ {0x0098,0x0098},{0x0099,0x0099}, /* 0098 */
+ {0x009A,0x009A},{0x009B,0x009B}, /* 009A */
+ {0x009C,0x009C},{0x009D,0x009D}, /* 009C */
+ {0x009E,0x009E},{0x009F,0x009F}, /* 009E */
+ {0x00A0,0x00A0},{0x00A1,0x00A1}, /* 00A0 */
+ {0x00A2,0x00A2},{0x00A3,0x00A3}, /* 00A2 */
+ {0x00A4,0x00A4},{0x00A5,0x00A5}, /* 00A4 */
+ {0x00A6,0x00A6},{0x00A7,0x00A7}, /* 00A6 */
+ {0x00A8,0x00A8},{0x00A9,0x00A9}, /* 00A8 */
+ {0x00AA,0x00AA},{0x00AB,0x00AB}, /* 00AA */
+ {0x00AC,0x00AC},{0x00AD,0x00AD}, /* 00AC */
+ {0x00AE,0x00AE},{0x00AF,0x00AF}, /* 00AE */
+ {0x00B0,0x00B0},{0x00B1,0x00B1}, /* 00B0 */
+ {0x00B2,0x00B2},{0x00B3,0x00B3}, /* 00B2 */
+ {0x00B4,0x00B4},{0x039C,0x00B5}, /* 00B4 */
+ {0x00B6,0x00B6},{0x00B7,0x00B7}, /* 00B6 */
+ {0x00B8,0x00B8},{0x00B9,0x00B9}, /* 00B8 */
+ {0x00BA,0x00BA},{0x00BB,0x00BB}, /* 00BA */
+ {0x00BC,0x00BC},{0x00BD,0x00BD}, /* 00BC */
+ {0x00BE,0x00BE},{0x00BF,0x00BF}, /* 00BE */
+ {0x00C0,0x00E0},{0x00C1,0x00E1}, /* 00C0 */
+ {0x00C2,0x00E2},{0x00C3,0x00E3}, /* 00C2 */
+ {0x00C4,0x00E4},{0x00C5,0x00E5}, /* 00C4 */
+ {0x00C6,0x00E6},{0x00C7,0x00E7}, /* 00C6 */
+ {0x00C8,0x00E8},{0x00C9,0x00E9}, /* 00C8 */
+ {0x00CA,0x00EA},{0x00CB,0x00EB}, /* 00CA */
+ {0x00CC,0x00EC},{0x00CD,0x00ED}, /* 00CC */
+ {0x00CE,0x00EE},{0x00CF,0x00EF}, /* 00CE */
+ {0x00D0,0x00F0},{0x00D1,0x00F1}, /* 00D0 */
+ {0x00D2,0x00F2},{0x00D3,0x00F3}, /* 00D2 */
+ {0x00D4,0x00F4},{0x00D5,0x00F5}, /* 00D4 */
+ {0x00D6,0x00F6},{0x00D7,0x00D7}, /* 00D6 */
+ {0x00D8,0x00F8},{0x00D9,0x00F9}, /* 00D8 */
+ {0x00DA,0x00FA},{0x00DB,0x00FB}, /* 00DA */
+ {0x00DC,0x00FC},{0x00DD,0x00FD}, /* 00DC */
+ {0x00DE,0x00FE},{0x00DF,0x00DF}, /* 00DE */
+ {0x00C0,0x00E0},{0x00C1,0x00E1}, /* 00E0 */
+ {0x00C2,0x00E2},{0x00C3,0x00E3}, /* 00E2 */
+ {0x00C4,0x00E4},{0x00C5,0x00E5}, /* 00E4 */
+ {0x00C6,0x00E6},{0x00C7,0x00E7}, /* 00E6 */
+ {0x00C8,0x00E8},{0x00C9,0x00E9}, /* 00E8 */
+ {0x00CA,0x00EA},{0x00CB,0x00EB}, /* 00EA */
+ {0x00CC,0x00EC},{0x00CD,0x00ED}, /* 00EC */
+ {0x00CE,0x00EE},{0x00CF,0x00EF}, /* 00EE */
+ {0x00D0,0x00F0},{0x00D1,0x00F1}, /* 00F0 */
+ {0x00D2,0x00F2},{0x00D3,0x00F3}, /* 00F2 */
+ {0x00D4,0x00F4},{0x00D5,0x00F5}, /* 00F4 */
+ {0x00D6,0x00F6},{0x00F7,0x00F7}, /* 00F6 */
+ {0x00D8,0x00F8},{0x00D9,0x00F9}, /* 00F8 */
+ {0x00DA,0x00FA},{0x00DB,0x00FB}, /* 00FA */
+ {0x00DC,0x00FC},{0x00DD,0x00FD}, /* 00FC */
+ {0x00DE,0x00FE},{0x0178,0x00FF} /* 00FE */
+};
+
+static const MY_CASEFOLD_CHARACTER u300_casefold_page01[256]={
+ {0x0100,0x0101},{0x0100,0x0101}, /* 0100 */
+ {0x0102,0x0103},{0x0102,0x0103}, /* 0102 */
+ {0x0104,0x0105},{0x0104,0x0105}, /* 0104 */
+ {0x0106,0x0107},{0x0106,0x0107}, /* 0106 */
+ {0x0108,0x0109},{0x0108,0x0109}, /* 0108 */
+ {0x010A,0x010B},{0x010A,0x010B}, /* 010A */
+ {0x010C,0x010D},{0x010C,0x010D}, /* 010C */
+ {0x010E,0x010F},{0x010E,0x010F}, /* 010E */
+ {0x0110,0x0111},{0x0110,0x0111}, /* 0110 */
+ {0x0112,0x0113},{0x0112,0x0113}, /* 0112 */
+ {0x0114,0x0115},{0x0114,0x0115}, /* 0114 */
+ {0x0116,0x0117},{0x0116,0x0117}, /* 0116 */
+ {0x0118,0x0119},{0x0118,0x0119}, /* 0118 */
+ {0x011A,0x011B},{0x011A,0x011B}, /* 011A */
+ {0x011C,0x011D},{0x011C,0x011D}, /* 011C */
+ {0x011E,0x011F},{0x011E,0x011F}, /* 011E */
+ {0x0120,0x0121},{0x0120,0x0121}, /* 0120 */
+ {0x0122,0x0123},{0x0122,0x0123}, /* 0122 */
+ {0x0124,0x0125},{0x0124,0x0125}, /* 0124 */
+ {0x0126,0x0127},{0x0126,0x0127}, /* 0126 */
+ {0x0128,0x0129},{0x0128,0x0129}, /* 0128 */
+ {0x012A,0x012B},{0x012A,0x012B}, /* 012A */
+ {0x012C,0x012D},{0x012C,0x012D}, /* 012C */
+ {0x012E,0x012F},{0x012E,0x012F}, /* 012E */
+ {0x0130,0x0069},{0x0049,0x0131}, /* 0130 */
+ {0x0132,0x0133},{0x0132,0x0133}, /* 0132 */
+ {0x0134,0x0135},{0x0134,0x0135}, /* 0134 */
+ {0x0136,0x0137},{0x0136,0x0137}, /* 0136 */
+ {0x0138,0x0138},{0x0139,0x013A}, /* 0138 */
+ {0x0139,0x013A},{0x013B,0x013C}, /* 013A */
+ {0x013B,0x013C},{0x013D,0x013E}, /* 013C */
+ {0x013D,0x013E},{0x013F,0x0140}, /* 013E */
+ {0x013F,0x0140},{0x0141,0x0142}, /* 0140 */
+ {0x0141,0x0142},{0x0143,0x0144}, /* 0142 */
+ {0x0143,0x0144},{0x0145,0x0146}, /* 0144 */
+ {0x0145,0x0146},{0x0147,0x0148}, /* 0146 */
+ {0x0147,0x0148},{0x0149,0x0149}, /* 0148 */
+ {0x014A,0x014B},{0x014A,0x014B}, /* 014A */
+ {0x014C,0x014D},{0x014C,0x014D}, /* 014C */
+ {0x014E,0x014F},{0x014E,0x014F}, /* 014E */
+ {0x0150,0x0151},{0x0150,0x0151}, /* 0150 */
+ {0x0152,0x0153},{0x0152,0x0153}, /* 0152 */
+ {0x0154,0x0155},{0x0154,0x0155}, /* 0154 */
+ {0x0156,0x0157},{0x0156,0x0157}, /* 0156 */
+ {0x0158,0x0159},{0x0158,0x0159}, /* 0158 */
+ {0x015A,0x015B},{0x015A,0x015B}, /* 015A */
+ {0x015C,0x015D},{0x015C,0x015D}, /* 015C */
+ {0x015E,0x015F},{0x015E,0x015F}, /* 015E */
+ {0x0160,0x0161},{0x0160,0x0161}, /* 0160 */
+ {0x0162,0x0163},{0x0162,0x0163}, /* 0162 */
+ {0x0164,0x0165},{0x0164,0x0165}, /* 0164 */
+ {0x0166,0x0167},{0x0166,0x0167}, /* 0166 */
+ {0x0168,0x0169},{0x0168,0x0169}, /* 0168 */
+ {0x016A,0x016B},{0x016A,0x016B}, /* 016A */
+ {0x016C,0x016D},{0x016C,0x016D}, /* 016C */
+ {0x016E,0x016F},{0x016E,0x016F}, /* 016E */
+ {0x0170,0x0171},{0x0170,0x0171}, /* 0170 */
+ {0x0172,0x0173},{0x0172,0x0173}, /* 0172 */
+ {0x0174,0x0175},{0x0174,0x0175}, /* 0174 */
+ {0x0176,0x0177},{0x0176,0x0177}, /* 0176 */
+ {0x0178,0x00FF},{0x0179,0x017A}, /* 0178 */
+ {0x0179,0x017A},{0x017B,0x017C}, /* 017A */
+ {0x017B,0x017C},{0x017D,0x017E}, /* 017C */
+ {0x017D,0x017E},{0x0053,0x017F}, /* 017E */
+ {0x0180,0x0180},{0x0181,0x0253}, /* 0180 */
+ {0x0182,0x0183},{0x0182,0x0183}, /* 0182 */
+ {0x0184,0x0185},{0x0184,0x0185}, /* 0184 */
+ {0x0186,0x0254},{0x0187,0x0188}, /* 0186 */
+ {0x0187,0x0188},{0x0189,0x0256}, /* 0188 */
+ {0x018A,0x0257},{0x018B,0x018C}, /* 018A */
+ {0x018B,0x018C},{0x018D,0x018D}, /* 018C */
+ {0x018E,0x01DD},{0x018F,0x0259}, /* 018E */
+ {0x0190,0x025B},{0x0191,0x0192}, /* 0190 */
+ {0x0191,0x0192},{0x0193,0x0260}, /* 0192 */
+ {0x0194,0x0263},{0x01F6,0x0195}, /* 0194 */
+ {0x0196,0x0269},{0x0197,0x0268}, /* 0196 */
+ {0x0198,0x0199},{0x0198,0x0199}, /* 0198 */
+ {0x019A,0x019A},{0x019B,0x019B}, /* 019A */
+ {0x019C,0x026F},{0x019D,0x0272}, /* 019C */
+ {0x019E,0x019E},{0x019F,0x0275}, /* 019E */
+ {0x01A0,0x01A1},{0x01A0,0x01A1}, /* 01A0 */
+ {0x01A2,0x01A3},{0x01A2,0x01A3}, /* 01A2 */
+ {0x01A4,0x01A5},{0x01A4,0x01A5}, /* 01A4 */
+ {0x01A6,0x0280},{0x01A7,0x01A8}, /* 01A6 */
+ {0x01A7,0x01A8},{0x01A9,0x0283}, /* 01A8 */
+ {0x01AA,0x01AA},{0x01AB,0x01AB}, /* 01AA */
+ {0x01AC,0x01AD},{0x01AC,0x01AD}, /* 01AC */
+ {0x01AE,0x0288},{0x01AF,0x01B0}, /* 01AE */
+ {0x01AF,0x01B0},{0x01B1,0x028A}, /* 01B0 */
+ {0x01B2,0x028B},{0x01B3,0x01B4}, /* 01B2 */
+ {0x01B3,0x01B4},{0x01B5,0x01B6}, /* 01B4 */
+ {0x01B5,0x01B6},{0x01B7,0x0292}, /* 01B6 */
+ {0x01B8,0x01B9},{0x01B8,0x01B9}, /* 01B8 */
+ {0x01BA,0x01BA},{0x01BB,0x01BB}, /* 01BA */
+ {0x01BC,0x01BD},{0x01BC,0x01BD}, /* 01BC */
+ {0x01BE,0x01BE},{0x01F7,0x01BF}, /* 01BE */
+ {0x01C0,0x01C0},{0x01C1,0x01C1}, /* 01C0 */
+ {0x01C2,0x01C2},{0x01C3,0x01C3}, /* 01C2 */
+ {0x01C4,0x01C6},{0x01C4,0x01C6}, /* 01C4 */
+ {0x01C4,0x01C6},{0x01C7,0x01C9}, /* 01C6 */
+ {0x01C7,0x01C9},{0x01C7,0x01C9}, /* 01C8 */
+ {0x01CA,0x01CC},{0x01CA,0x01CC}, /* 01CA */
+ {0x01CA,0x01CC},{0x01CD,0x01CE}, /* 01CC */
+ {0x01CD,0x01CE},{0x01CF,0x01D0}, /* 01CE */
+ {0x01CF,0x01D0},{0x01D1,0x01D2}, /* 01D0 */
+ {0x01D1,0x01D2},{0x01D3,0x01D4}, /* 01D2 */
+ {0x01D3,0x01D4},{0x01D5,0x01D6}, /* 01D4 */
+ {0x01D5,0x01D6},{0x01D7,0x01D8}, /* 01D6 */
+ {0x01D7,0x01D8},{0x01D9,0x01DA}, /* 01D8 */
+ {0x01D9,0x01DA},{0x01DB,0x01DC}, /* 01DA */
+ {0x01DB,0x01DC},{0x018E,0x01DD}, /* 01DC */
+ {0x01DE,0x01DF},{0x01DE,0x01DF}, /* 01DE */
+ {0x01E0,0x01E1},{0x01E0,0x01E1}, /* 01E0 */
+ {0x01E2,0x01E3},{0x01E2,0x01E3}, /* 01E2 */
+ {0x01E4,0x01E5},{0x01E4,0x01E5}, /* 01E4 */
+ {0x01E6,0x01E7},{0x01E6,0x01E7}, /* 01E6 */
+ {0x01E8,0x01E9},{0x01E8,0x01E9}, /* 01E8 */
+ {0x01EA,0x01EB},{0x01EA,0x01EB}, /* 01EA */
+ {0x01EC,0x01ED},{0x01EC,0x01ED}, /* 01EC */
+ {0x01EE,0x01EF},{0x01EE,0x01EF}, /* 01EE */
+ {0x01F0,0x01F0},{0x01F1,0x01F3}, /* 01F0 */
+ {0x01F1,0x01F3},{0x01F1,0x01F3}, /* 01F2 */
+ {0x01F4,0x01F5},{0x01F4,0x01F5}, /* 01F4 */
+ {0x01F6,0x0195},{0x01F7,0x01BF}, /* 01F6 */
+ {0x01F8,0x01F9},{0x01F8,0x01F9}, /* 01F8 */
+ {0x01FA,0x01FB},{0x01FA,0x01FB}, /* 01FA */
+ {0x01FC,0x01FD},{0x01FC,0x01FD}, /* 01FC */
+ {0x01FE,0x01FF},{0x01FE,0x01FF} /* 01FE */
+};
+
+static const MY_CASEFOLD_CHARACTER u300_casefold_page02[256]={
+ {0x0200,0x0201},{0x0200,0x0201}, /* 0200 */
+ {0x0202,0x0203},{0x0202,0x0203}, /* 0202 */
+ {0x0204,0x0205},{0x0204,0x0205}, /* 0204 */
+ {0x0206,0x0207},{0x0206,0x0207}, /* 0206 */
+ {0x0208,0x0209},{0x0208,0x0209}, /* 0208 */
+ {0x020A,0x020B},{0x020A,0x020B}, /* 020A */
+ {0x020C,0x020D},{0x020C,0x020D}, /* 020C */
+ {0x020E,0x020F},{0x020E,0x020F}, /* 020E */
+ {0x0210,0x0211},{0x0210,0x0211}, /* 0210 */
+ {0x0212,0x0213},{0x0212,0x0213}, /* 0212 */
+ {0x0214,0x0215},{0x0214,0x0215}, /* 0214 */
+ {0x0216,0x0217},{0x0216,0x0217}, /* 0216 */
+ {0x0218,0x0219},{0x0218,0x0219}, /* 0218 */
+ {0x021A,0x021B},{0x021A,0x021B}, /* 021A */
+ {0x021C,0x021D},{0x021C,0x021D}, /* 021C */
+ {0x021E,0x021F},{0x021E,0x021F}, /* 021E */
+ {0x0220,0x0220},{0x0221,0x0221}, /* 0220 */
+ {0x0222,0x0223},{0x0222,0x0223}, /* 0222 */
+ {0x0224,0x0225},{0x0224,0x0225}, /* 0224 */
+ {0x0226,0x0227},{0x0226,0x0227}, /* 0226 */
+ {0x0228,0x0229},{0x0228,0x0229}, /* 0228 */
+ {0x022A,0x022B},{0x022A,0x022B}, /* 022A */
+ {0x022C,0x022D},{0x022C,0x022D}, /* 022C */
+ {0x022E,0x022F},{0x022E,0x022F}, /* 022E */
+ {0x0230,0x0231},{0x0230,0x0231}, /* 0230 */
+ {0x0232,0x0233},{0x0232,0x0233}, /* 0232 */
+ {0x0234,0x0234},{0x0235,0x0235}, /* 0234 */
+ {0x0236,0x0236},{0x0237,0x0237}, /* 0236 */
+ {0x0238,0x0238},{0x0239,0x0239}, /* 0238 */
+ {0x023A,0x023A},{0x023B,0x023B}, /* 023A */
+ {0x023C,0x023C},{0x023D,0x023D}, /* 023C */
+ {0x023E,0x023E},{0x023F,0x023F}, /* 023E */
+ {0x0240,0x0240},{0x0241,0x0241}, /* 0240 */
+ {0x0242,0x0242},{0x0243,0x0243}, /* 0242 */
+ {0x0244,0x0244},{0x0245,0x0245}, /* 0244 */
+ {0x0246,0x0246},{0x0247,0x0247}, /* 0246 */
+ {0x0248,0x0248},{0x0249,0x0249}, /* 0248 */
+ {0x024A,0x024A},{0x024B,0x024B}, /* 024A */
+ {0x024C,0x024C},{0x024D,0x024D}, /* 024C */
+ {0x024E,0x024E},{0x024F,0x024F}, /* 024E */
+ {0x0250,0x0250},{0x0251,0x0251}, /* 0250 */
+ {0x0252,0x0252},{0x0181,0x0253}, /* 0252 */
+ {0x0186,0x0254},{0x0255,0x0255}, /* 0254 */
+ {0x0189,0x0256},{0x018A,0x0257}, /* 0256 */
+ {0x0258,0x0258},{0x018F,0x0259}, /* 0258 */
+ {0x025A,0x025A},{0x0190,0x025B}, /* 025A */
+ {0x025C,0x025C},{0x025D,0x025D}, /* 025C */
+ {0x025E,0x025E},{0x025F,0x025F}, /* 025E */
+ {0x0193,0x0260},{0x0261,0x0261}, /* 0260 */
+ {0x0262,0x0262},{0x0194,0x0263}, /* 0262 */
+ {0x0264,0x0264},{0x0265,0x0265}, /* 0264 */
+ {0x0266,0x0266},{0x0267,0x0267}, /* 0266 */
+ {0x0197,0x0268},{0x0196,0x0269}, /* 0268 */
+ {0x026A,0x026A},{0x026B,0x026B}, /* 026A */
+ {0x026C,0x026C},{0x026D,0x026D}, /* 026C */
+ {0x026E,0x026E},{0x019C,0x026F}, /* 026E */
+ {0x0270,0x0270},{0x0271,0x0271}, /* 0270 */
+ {0x019D,0x0272},{0x0273,0x0273}, /* 0272 */
+ {0x0274,0x0274},{0x019F,0x0275}, /* 0274 */
+ {0x0276,0x0276},{0x0277,0x0277}, /* 0276 */
+ {0x0278,0x0278},{0x0279,0x0279}, /* 0278 */
+ {0x027A,0x027A},{0x027B,0x027B}, /* 027A */
+ {0x027C,0x027C},{0x027D,0x027D}, /* 027C */
+ {0x027E,0x027E},{0x027F,0x027F}, /* 027E */
+ {0x01A6,0x0280},{0x0281,0x0281}, /* 0280 */
+ {0x0282,0x0282},{0x01A9,0x0283}, /* 0282 */
+ {0x0284,0x0284},{0x0285,0x0285}, /* 0284 */
+ {0x0286,0x0286},{0x0287,0x0287}, /* 0286 */
+ {0x01AE,0x0288},{0x0289,0x0289}, /* 0288 */
+ {0x01B1,0x028A},{0x01B2,0x028B}, /* 028A */
+ {0x028C,0x028C},{0x028D,0x028D}, /* 028C */
+ {0x028E,0x028E},{0x028F,0x028F}, /* 028E */
+ {0x0290,0x0290},{0x0291,0x0291}, /* 0290 */
+ {0x01B7,0x0292},{0x0293,0x0293}, /* 0292 */
+ {0x0294,0x0294},{0x0295,0x0295}, /* 0294 */
+ {0x0296,0x0296},{0x0297,0x0297}, /* 0296 */
+ {0x0298,0x0298},{0x0299,0x0299}, /* 0298 */
+ {0x029A,0x029A},{0x029B,0x029B}, /* 029A */
+ {0x029C,0x029C},{0x029D,0x029D}, /* 029C */
+ {0x029E,0x029E},{0x029F,0x029F}, /* 029E */
+ {0x02A0,0x02A0},{0x02A1,0x02A1}, /* 02A0 */
+ {0x02A2,0x02A2},{0x02A3,0x02A3}, /* 02A2 */
+ {0x02A4,0x02A4},{0x02A5,0x02A5}, /* 02A4 */
+ {0x02A6,0x02A6},{0x02A7,0x02A7}, /* 02A6 */
+ {0x02A8,0x02A8},{0x02A9,0x02A9}, /* 02A8 */
+ {0x02AA,0x02AA},{0x02AB,0x02AB}, /* 02AA */
+ {0x02AC,0x02AC},{0x02AD,0x02AD}, /* 02AC */
+ {0x02AE,0x02AE},{0x02AF,0x02AF}, /* 02AE */
+ {0x02B0,0x02B0},{0x02B1,0x02B1}, /* 02B0 */
+ {0x02B2,0x02B2},{0x02B3,0x02B3}, /* 02B2 */
+ {0x02B4,0x02B4},{0x02B5,0x02B5}, /* 02B4 */
+ {0x02B6,0x02B6},{0x02B7,0x02B7}, /* 02B6 */
+ {0x02B8,0x02B8},{0x02B9,0x02B9}, /* 02B8 */
+ {0x02BA,0x02BA},{0x02BB,0x02BB}, /* 02BA */
+ {0x02BC,0x02BC},{0x02BD,0x02BD}, /* 02BC */
+ {0x02BE,0x02BE},{0x02BF,0x02BF}, /* 02BE */
+ {0x02C0,0x02C0},{0x02C1,0x02C1}, /* 02C0 */
+ {0x02C2,0x02C2},{0x02C3,0x02C3}, /* 02C2 */
+ {0x02C4,0x02C4},{0x02C5,0x02C5}, /* 02C4 */
+ {0x02C6,0x02C6},{0x02C7,0x02C7}, /* 02C6 */
+ {0x02C8,0x02C8},{0x02C9,0x02C9}, /* 02C8 */
+ {0x02CA,0x02CA},{0x02CB,0x02CB}, /* 02CA */
+ {0x02CC,0x02CC},{0x02CD,0x02CD}, /* 02CC */
+ {0x02CE,0x02CE},{0x02CF,0x02CF}, /* 02CE */
+ {0x02D0,0x02D0},{0x02D1,0x02D1}, /* 02D0 */
+ {0x02D2,0x02D2},{0x02D3,0x02D3}, /* 02D2 */
+ {0x02D4,0x02D4},{0x02D5,0x02D5}, /* 02D4 */
+ {0x02D6,0x02D6},{0x02D7,0x02D7}, /* 02D6 */
+ {0x02D8,0x02D8},{0x02D9,0x02D9}, /* 02D8 */
+ {0x02DA,0x02DA},{0x02DB,0x02DB}, /* 02DA */
+ {0x02DC,0x02DC},{0x02DD,0x02DD}, /* 02DC */
+ {0x02DE,0x02DE},{0x02DF,0x02DF}, /* 02DE */
+ {0x02E0,0x02E0},{0x02E1,0x02E1}, /* 02E0 */
+ {0x02E2,0x02E2},{0x02E3,0x02E3}, /* 02E2 */
+ {0x02E4,0x02E4},{0x02E5,0x02E5}, /* 02E4 */
+ {0x02E6,0x02E6},{0x02E7,0x02E7}, /* 02E6 */
+ {0x02E8,0x02E8},{0x02E9,0x02E9}, /* 02E8 */
+ {0x02EA,0x02EA},{0x02EB,0x02EB}, /* 02EA */
+ {0x02EC,0x02EC},{0x02ED,0x02ED}, /* 02EC */
+ {0x02EE,0x02EE},{0x02EF,0x02EF}, /* 02EE */
+ {0x02F0,0x02F0},{0x02F1,0x02F1}, /* 02F0 */
+ {0x02F2,0x02F2},{0x02F3,0x02F3}, /* 02F2 */
+ {0x02F4,0x02F4},{0x02F5,0x02F5}, /* 02F4 */
+ {0x02F6,0x02F6},{0x02F7,0x02F7}, /* 02F6 */
+ {0x02F8,0x02F8},{0x02F9,0x02F9}, /* 02F8 */
+ {0x02FA,0x02FA},{0x02FB,0x02FB}, /* 02FA */
+ {0x02FC,0x02FC},{0x02FD,0x02FD}, /* 02FC */
+ {0x02FE,0x02FE},{0x02FF,0x02FF} /* 02FE */
+};
+
+static const MY_CASEFOLD_CHARACTER u300_casefold_page03[256]={
+ {0x0300,0x0300},{0x0301,0x0301}, /* 0300 */
+ {0x0302,0x0302},{0x0303,0x0303}, /* 0302 */
+ {0x0304,0x0304},{0x0305,0x0305}, /* 0304 */
+ {0x0306,0x0306},{0x0307,0x0307}, /* 0306 */
+ {0x0308,0x0308},{0x0309,0x0309}, /* 0308 */
+ {0x030A,0x030A},{0x030B,0x030B}, /* 030A */
+ {0x030C,0x030C},{0x030D,0x030D}, /* 030C */
+ {0x030E,0x030E},{0x030F,0x030F}, /* 030E */
+ {0x0310,0x0310},{0x0311,0x0311}, /* 0310 */
+ {0x0312,0x0312},{0x0313,0x0313}, /* 0312 */
+ {0x0314,0x0314},{0x0315,0x0315}, /* 0314 */
+ {0x0316,0x0316},{0x0317,0x0317}, /* 0316 */
+ {0x0318,0x0318},{0x0319,0x0319}, /* 0318 */
+ {0x031A,0x031A},{0x031B,0x031B}, /* 031A */
+ {0x031C,0x031C},{0x031D,0x031D}, /* 031C */
+ {0x031E,0x031E},{0x031F,0x031F}, /* 031E */
+ {0x0320,0x0320},{0x0321,0x0321}, /* 0320 */
+ {0x0322,0x0322},{0x0323,0x0323}, /* 0322 */
+ {0x0324,0x0324},{0x0325,0x0325}, /* 0324 */
+ {0x0326,0x0326},{0x0327,0x0327}, /* 0326 */
+ {0x0328,0x0328},{0x0329,0x0329}, /* 0328 */
+ {0x032A,0x032A},{0x032B,0x032B}, /* 032A */
+ {0x032C,0x032C},{0x032D,0x032D}, /* 032C */
+ {0x032E,0x032E},{0x032F,0x032F}, /* 032E */
+ {0x0330,0x0330},{0x0331,0x0331}, /* 0330 */
+ {0x0332,0x0332},{0x0333,0x0333}, /* 0332 */
+ {0x0334,0x0334},{0x0335,0x0335}, /* 0334 */
+ {0x0336,0x0336},{0x0337,0x0337}, /* 0336 */
+ {0x0338,0x0338},{0x0339,0x0339}, /* 0338 */
+ {0x033A,0x033A},{0x033B,0x033B}, /* 033A */
+ {0x033C,0x033C},{0x033D,0x033D}, /* 033C */
+ {0x033E,0x033E},{0x033F,0x033F}, /* 033E */
+ {0x0340,0x0340},{0x0341,0x0341}, /* 0340 */
+ {0x0342,0x0342},{0x0343,0x0343}, /* 0342 */
+ {0x0344,0x0344},{0x0399,0x0345}, /* 0344 */
+ {0x0346,0x0346},{0x0347,0x0347}, /* 0346 */
+ {0x0348,0x0348},{0x0349,0x0349}, /* 0348 */
+ {0x034A,0x034A},{0x034B,0x034B}, /* 034A */
+ {0x034C,0x034C},{0x034D,0x034D}, /* 034C */
+ {0x034E,0x034E},{0x034F,0x034F}, /* 034E */
+ {0x0350,0x0350},{0x0351,0x0351}, /* 0350 */
+ {0x0352,0x0352},{0x0353,0x0353}, /* 0352 */
+ {0x0354,0x0354},{0x0355,0x0355}, /* 0354 */
+ {0x0356,0x0356},{0x0357,0x0357}, /* 0356 */
+ {0x0358,0x0358},{0x0359,0x0359}, /* 0358 */
+ {0x035A,0x035A},{0x035B,0x035B}, /* 035A */
+ {0x035C,0x035C},{0x035D,0x035D}, /* 035C */
+ {0x035E,0x035E},{0x035F,0x035F}, /* 035E */
+ {0x0360,0x0360},{0x0361,0x0361}, /* 0360 */
+ {0x0362,0x0362},{0x0363,0x0363}, /* 0362 */
+ {0x0364,0x0364},{0x0365,0x0365}, /* 0364 */
+ {0x0366,0x0366},{0x0367,0x0367}, /* 0366 */
+ {0x0368,0x0368},{0x0369,0x0369}, /* 0368 */
+ {0x036A,0x036A},{0x036B,0x036B}, /* 036A */
+ {0x036C,0x036C},{0x036D,0x036D}, /* 036C */
+ {0x036E,0x036E},{0x036F,0x036F}, /* 036E */
+ {0x0370,0x0370},{0x0371,0x0371}, /* 0370 */
+ {0x0372,0x0372},{0x0373,0x0373}, /* 0372 */
+ {0x0374,0x0374},{0x0375,0x0375}, /* 0374 */
+ {0x0376,0x0376},{0x0377,0x0377}, /* 0376 */
+ {0x0378,0x0378},{0x0379,0x0379}, /* 0378 */
+ {0x037A,0x037A},{0x037B,0x037B}, /* 037A */
+ {0x037C,0x037C},{0x037D,0x037D}, /* 037C */
+ {0x037E,0x037E},{0x037F,0x037F}, /* 037E */
+ {0x0380,0x0380},{0x0381,0x0381}, /* 0380 */
+ {0x0382,0x0382},{0x0383,0x0383}, /* 0382 */
+ {0x0384,0x0384},{0x0385,0x0385}, /* 0384 */
+ {0x0386,0x03AC},{0x0387,0x0387}, /* 0386 */
+ {0x0388,0x03AD},{0x0389,0x03AE}, /* 0388 */
+ {0x038A,0x03AF},{0x038B,0x038B}, /* 038A */
+ {0x038C,0x03CC},{0x038D,0x038D}, /* 038C */
+ {0x038E,0x03CD},{0x038F,0x03CE}, /* 038E */
+ {0x0390,0x0390},{0x0391,0x03B1}, /* 0390 */
+ {0x0392,0x03B2},{0x0393,0x03B3}, /* 0392 */
+ {0x0394,0x03B4},{0x0395,0x03B5}, /* 0394 */
+ {0x0396,0x03B6},{0x0397,0x03B7}, /* 0396 */
+ {0x0398,0x03B8},{0x0399,0x03B9}, /* 0398 */
+ {0x039A,0x03BA},{0x039B,0x03BB}, /* 039A */
+ {0x039C,0x03BC},{0x039D,0x03BD}, /* 039C */
+ {0x039E,0x03BE},{0x039F,0x03BF}, /* 039E */
+ {0x03A0,0x03C0},{0x03A1,0x03C1}, /* 03A0 */
+ {0x03A2,0x03A2},{0x03A3,0x03C3}, /* 03A2 */
+ {0x03A4,0x03C4},{0x03A5,0x03C5}, /* 03A4 */
+ {0x03A6,0x03C6},{0x03A7,0x03C7}, /* 03A6 */
+ {0x03A8,0x03C8},{0x03A9,0x03C9}, /* 03A8 */
+ {0x03AA,0x03CA},{0x03AB,0x03CB}, /* 03AA */
+ {0x0386,0x03AC},{0x0388,0x03AD}, /* 03AC */
+ {0x0389,0x03AE},{0x038A,0x03AF}, /* 03AE */
+ {0x03B0,0x03B0},{0x0391,0x03B1}, /* 03B0 */
+ {0x0392,0x03B2},{0x0393,0x03B3}, /* 03B2 */
+ {0x0394,0x03B4},{0x0395,0x03B5}, /* 03B4 */
+ {0x0396,0x03B6},{0x0397,0x03B7}, /* 03B6 */
+ {0x0398,0x03B8},{0x0399,0x03B9}, /* 03B8 */
+ {0x039A,0x03BA},{0x039B,0x03BB}, /* 03BA */
+ {0x039C,0x03BC},{0x039D,0x03BD}, /* 03BC */
+ {0x039E,0x03BE},{0x039F,0x03BF}, /* 03BE */
+ {0x03A0,0x03C0},{0x03A1,0x03C1}, /* 03C0 */
+ {0x03A3,0x03C2},{0x03A3,0x03C3}, /* 03C2 */
+ {0x03A4,0x03C4},{0x03A5,0x03C5}, /* 03C4 */
+ {0x03A6,0x03C6},{0x03A7,0x03C7}, /* 03C6 */
+ {0x03A8,0x03C8},{0x03A9,0x03C9}, /* 03C8 */
+ {0x03AA,0x03CA},{0x03AB,0x03CB}, /* 03CA */
+ {0x038C,0x03CC},{0x038E,0x03CD}, /* 03CC */
+ {0x038F,0x03CE},{0x03CF,0x03CF}, /* 03CE */
+ {0x0392,0x03D0},{0x0398,0x03D1}, /* 03D0 */
+ {0x03D2,0x03D2},{0x03D3,0x03D3}, /* 03D2 */
+ {0x03D4,0x03D4},{0x03A6,0x03D5}, /* 03D4 */
+ {0x03A0,0x03D6},{0x03D7,0x03D7}, /* 03D6 */
+ {0x03D8,0x03D8},{0x03D9,0x03D9}, /* 03D8 */
+ {0x03DA,0x03DB},{0x03DA,0x03DB}, /* 03DA */
+ {0x03DC,0x03DD},{0x03DC,0x03DD}, /* 03DC */
+ {0x03DE,0x03DF},{0x03DE,0x03DF}, /* 03DE */
+ {0x03E0,0x03E1},{0x03E0,0x03E1}, /* 03E0 */
+ {0x03E2,0x03E3},{0x03E2,0x03E3}, /* 03E2 */
+ {0x03E4,0x03E5},{0x03E4,0x03E5}, /* 03E4 */
+ {0x03E6,0x03E7},{0x03E6,0x03E7}, /* 03E6 */
+ {0x03E8,0x03E9},{0x03E8,0x03E9}, /* 03E8 */
+ {0x03EA,0x03EB},{0x03EA,0x03EB}, /* 03EA */
+ {0x03EC,0x03ED},{0x03EC,0x03ED}, /* 03EC */
+ {0x03EE,0x03EF},{0x03EE,0x03EF}, /* 03EE */
+ {0x039A,0x03F0},{0x03A1,0x03F1}, /* 03F0 */
+ {0x03A3,0x03F2},{0x03F3,0x03F3}, /* 03F2 */
+ {0x03F4,0x03F4},{0x03F5,0x03F5}, /* 03F4 */
+ {0x03F6,0x03F6},{0x03F7,0x03F7}, /* 03F6 */
+ {0x03F8,0x03F8},{0x03F9,0x03F9}, /* 03F8 */
+ {0x03FA,0x03FA},{0x03FB,0x03FB}, /* 03FA */
+ {0x03FC,0x03FC},{0x03FD,0x03FD}, /* 03FC */
+ {0x03FE,0x03FE},{0x03FF,0x03FF} /* 03FE */
+};
+
+static const MY_CASEFOLD_CHARACTER u300_casefold_page04[256]={
+ {0x0400,0x0450},{0x0401,0x0451}, /* 0400 */
+ {0x0402,0x0452},{0x0403,0x0453}, /* 0402 */
+ {0x0404,0x0454},{0x0405,0x0455}, /* 0404 */
+ {0x0406,0x0456},{0x0407,0x0457}, /* 0406 */
+ {0x0408,0x0458},{0x0409,0x0459}, /* 0408 */
+ {0x040A,0x045A},{0x040B,0x045B}, /* 040A */
+ {0x040C,0x045C},{0x040D,0x045D}, /* 040C */
+ {0x040E,0x045E},{0x040F,0x045F}, /* 040E */
+ {0x0410,0x0430},{0x0411,0x0431}, /* 0410 */
+ {0x0412,0x0432},{0x0413,0x0433}, /* 0412 */
+ {0x0414,0x0434},{0x0415,0x0435}, /* 0414 */
+ {0x0416,0x0436},{0x0417,0x0437}, /* 0416 */
+ {0x0418,0x0438},{0x0419,0x0439}, /* 0418 */
+ {0x041A,0x043A},{0x041B,0x043B}, /* 041A */
+ {0x041C,0x043C},{0x041D,0x043D}, /* 041C */
+ {0x041E,0x043E},{0x041F,0x043F}, /* 041E */
+ {0x0420,0x0440},{0x0421,0x0441}, /* 0420 */
+ {0x0422,0x0442},{0x0423,0x0443}, /* 0422 */
+ {0x0424,0x0444},{0x0425,0x0445}, /* 0424 */
+ {0x0426,0x0446},{0x0427,0x0447}, /* 0426 */
+ {0x0428,0x0448},{0x0429,0x0449}, /* 0428 */
+ {0x042A,0x044A},{0x042B,0x044B}, /* 042A */
+ {0x042C,0x044C},{0x042D,0x044D}, /* 042C */
+ {0x042E,0x044E},{0x042F,0x044F}, /* 042E */
+ {0x0410,0x0430},{0x0411,0x0431}, /* 0430 */
+ {0x0412,0x0432},{0x0413,0x0433}, /* 0432 */
+ {0x0414,0x0434},{0x0415,0x0435}, /* 0434 */
+ {0x0416,0x0436},{0x0417,0x0437}, /* 0436 */
+ {0x0418,0x0438},{0x0419,0x0439}, /* 0438 */
+ {0x041A,0x043A},{0x041B,0x043B}, /* 043A */
+ {0x041C,0x043C},{0x041D,0x043D}, /* 043C */
+ {0x041E,0x043E},{0x041F,0x043F}, /* 043E */
+ {0x0420,0x0440},{0x0421,0x0441}, /* 0440 */
+ {0x0422,0x0442},{0x0423,0x0443}, /* 0442 */
+ {0x0424,0x0444},{0x0425,0x0445}, /* 0444 */
+ {0x0426,0x0446},{0x0427,0x0447}, /* 0446 */
+ {0x0428,0x0448},{0x0429,0x0449}, /* 0448 */
+ {0x042A,0x044A},{0x042B,0x044B}, /* 044A */
+ {0x042C,0x044C},{0x042D,0x044D}, /* 044C */
+ {0x042E,0x044E},{0x042F,0x044F}, /* 044E */
+ {0x0400,0x0450},{0x0401,0x0451}, /* 0450 */
+ {0x0402,0x0452},{0x0403,0x0453}, /* 0452 */
+ {0x0404,0x0454},{0x0405,0x0455}, /* 0454 */
+ {0x0406,0x0456},{0x0407,0x0457}, /* 0456 */
+ {0x0408,0x0458},{0x0409,0x0459}, /* 0458 */
+ {0x040A,0x045A},{0x040B,0x045B}, /* 045A */
+ {0x040C,0x045C},{0x040D,0x045D}, /* 045C */
+ {0x040E,0x045E},{0x040F,0x045F}, /* 045E */
+ {0x0460,0x0461},{0x0460,0x0461}, /* 0460 */
+ {0x0462,0x0463},{0x0462,0x0463}, /* 0462 */
+ {0x0464,0x0465},{0x0464,0x0465}, /* 0464 */
+ {0x0466,0x0467},{0x0466,0x0467}, /* 0466 */
+ {0x0468,0x0469},{0x0468,0x0469}, /* 0468 */
+ {0x046A,0x046B},{0x046A,0x046B}, /* 046A */
+ {0x046C,0x046D},{0x046C,0x046D}, /* 046C */
+ {0x046E,0x046F},{0x046E,0x046F}, /* 046E */
+ {0x0470,0x0471},{0x0470,0x0471}, /* 0470 */
+ {0x0472,0x0473},{0x0472,0x0473}, /* 0472 */
+ {0x0474,0x0475},{0x0474,0x0475}, /* 0474 */
+ {0x0476,0x0477},{0x0476,0x0477}, /* 0476 */
+ {0x0478,0x0479},{0x0478,0x0479}, /* 0478 */
+ {0x047A,0x047B},{0x047A,0x047B}, /* 047A */
+ {0x047C,0x047D},{0x047C,0x047D}, /* 047C */
+ {0x047E,0x047F},{0x047E,0x047F}, /* 047E */
+ {0x0480,0x0481},{0x0480,0x0481}, /* 0480 */
+ {0x0482,0x0482},{0x0483,0x0483}, /* 0482 */
+ {0x0484,0x0484},{0x0485,0x0485}, /* 0484 */
+ {0x0486,0x0486},{0x0487,0x0487}, /* 0486 */
+ {0x0488,0x0488},{0x0489,0x0489}, /* 0488 */
+ {0x048A,0x048A},{0x048B,0x048B}, /* 048A */
+ {0x048C,0x048D},{0x048C,0x048D}, /* 048C */
+ {0x048E,0x048F},{0x048E,0x048F}, /* 048E */
+ {0x0490,0x0491},{0x0490,0x0491}, /* 0490 */
+ {0x0492,0x0493},{0x0492,0x0493}, /* 0492 */
+ {0x0494,0x0495},{0x0494,0x0495}, /* 0494 */
+ {0x0496,0x0497},{0x0496,0x0497}, /* 0496 */
+ {0x0498,0x0499},{0x0498,0x0499}, /* 0498 */
+ {0x049A,0x049B},{0x049A,0x049B}, /* 049A */
+ {0x049C,0x049D},{0x049C,0x049D}, /* 049C */
+ {0x049E,0x049F},{0x049E,0x049F}, /* 049E */
+ {0x04A0,0x04A1},{0x04A0,0x04A1}, /* 04A0 */
+ {0x04A2,0x04A3},{0x04A2,0x04A3}, /* 04A2 */
+ {0x04A4,0x04A5},{0x04A4,0x04A5}, /* 04A4 */
+ {0x04A6,0x04A7},{0x04A6,0x04A7}, /* 04A6 */
+ {0x04A8,0x04A9},{0x04A8,0x04A9}, /* 04A8 */
+ {0x04AA,0x04AB},{0x04AA,0x04AB}, /* 04AA */
+ {0x04AC,0x04AD},{0x04AC,0x04AD}, /* 04AC */
+ {0x04AE,0x04AF},{0x04AE,0x04AF}, /* 04AE */
+ {0x04B0,0x04B1},{0x04B0,0x04B1}, /* 04B0 */
+ {0x04B2,0x04B3},{0x04B2,0x04B3}, /* 04B2 */
+ {0x04B4,0x04B5},{0x04B4,0x04B5}, /* 04B4 */
+ {0x04B6,0x04B7},{0x04B6,0x04B7}, /* 04B6 */
+ {0x04B8,0x04B9},{0x04B8,0x04B9}, /* 04B8 */
+ {0x04BA,0x04BB},{0x04BA,0x04BB}, /* 04BA */
+ {0x04BC,0x04BD},{0x04BC,0x04BD}, /* 04BC */
+ {0x04BE,0x04BF},{0x04BE,0x04BF}, /* 04BE */
+ {0x04C0,0x04C0},{0x04C1,0x04C2}, /* 04C0 */
+ {0x04C1,0x04C2},{0x04C3,0x04C4}, /* 04C2 */
+ {0x04C3,0x04C4},{0x04C5,0x04C5}, /* 04C4 */
+ {0x04C6,0x04C6},{0x04C7,0x04C8}, /* 04C6 */
+ {0x04C7,0x04C8},{0x04C9,0x04C9}, /* 04C8 */
+ {0x04CA,0x04CA},{0x04CB,0x04CC}, /* 04CA */
+ {0x04CB,0x04CC},{0x04CD,0x04CD}, /* 04CC */
+ {0x04CE,0x04CE},{0x04CF,0x04CF}, /* 04CE */
+ {0x04D0,0x04D1},{0x04D0,0x04D1}, /* 04D0 */
+ {0x04D2,0x04D3},{0x04D2,0x04D3}, /* 04D2 */
+ {0x04D4,0x04D5},{0x04D4,0x04D5}, /* 04D4 */
+ {0x04D6,0x04D7},{0x04D6,0x04D7}, /* 04D6 */
+ {0x04D8,0x04D9},{0x04D8,0x04D9}, /* 04D8 */
+ {0x04DA,0x04DB},{0x04DA,0x04DB}, /* 04DA */
+ {0x04DC,0x04DD},{0x04DC,0x04DD}, /* 04DC */
+ {0x04DE,0x04DF},{0x04DE,0x04DF}, /* 04DE */
+ {0x04E0,0x04E1},{0x04E0,0x04E1}, /* 04E0 */
+ {0x04E2,0x04E3},{0x04E2,0x04E3}, /* 04E2 */
+ {0x04E4,0x04E5},{0x04E4,0x04E5}, /* 04E4 */
+ {0x04E6,0x04E7},{0x04E6,0x04E7}, /* 04E6 */
+ {0x04E8,0x04E9},{0x04E8,0x04E9}, /* 04E8 */
+ {0x04EA,0x04EB},{0x04EA,0x04EB}, /* 04EA */
+ {0x04EC,0x04ED},{0x04EC,0x04ED}, /* 04EC */
+ {0x04EE,0x04EF},{0x04EE,0x04EF}, /* 04EE */
+ {0x04F0,0x04F1},{0x04F0,0x04F1}, /* 04F0 */
+ {0x04F2,0x04F3},{0x04F2,0x04F3}, /* 04F2 */
+ {0x04F4,0x04F5},{0x04F4,0x04F5}, /* 04F4 */
+ {0x04F6,0x04F6},{0x04F7,0x04F7}, /* 04F6 */
+ {0x04F8,0x04F9},{0x04F8,0x04F9}, /* 04F8 */
+ {0x04FA,0x04FA},{0x04FB,0x04FB}, /* 04FA */
+ {0x04FC,0x04FC},{0x04FD,0x04FD}, /* 04FC */
+ {0x04FE,0x04FE},{0x04FF,0x04FF} /* 04FE */
+};
+
+static const MY_CASEFOLD_CHARACTER u300_casefold_page05[256]={
+ {0x0500,0x0500},{0x0501,0x0501}, /* 0500 */
+ {0x0502,0x0502},{0x0503,0x0503}, /* 0502 */
+ {0x0504,0x0504},{0x0505,0x0505}, /* 0504 */
+ {0x0506,0x0506},{0x0507,0x0507}, /* 0506 */
+ {0x0508,0x0508},{0x0509,0x0509}, /* 0508 */
+ {0x050A,0x050A},{0x050B,0x050B}, /* 050A */
+ {0x050C,0x050C},{0x050D,0x050D}, /* 050C */
+ {0x050E,0x050E},{0x050F,0x050F}, /* 050E */
+ {0x0510,0x0510},{0x0511,0x0511}, /* 0510 */
+ {0x0512,0x0512},{0x0513,0x0513}, /* 0512 */
+ {0x0514,0x0514},{0x0515,0x0515}, /* 0514 */
+ {0x0516,0x0516},{0x0517,0x0517}, /* 0516 */
+ {0x0518,0x0518},{0x0519,0x0519}, /* 0518 */
+ {0x051A,0x051A},{0x051B,0x051B}, /* 051A */
+ {0x051C,0x051C},{0x051D,0x051D}, /* 051C */
+ {0x051E,0x051E},{0x051F,0x051F}, /* 051E */
+ {0x0520,0x0520},{0x0521,0x0521}, /* 0520 */
+ {0x0522,0x0522},{0x0523,0x0523}, /* 0522 */
+ {0x0524,0x0524},{0x0525,0x0525}, /* 0524 */
+ {0x0526,0x0526},{0x0527,0x0527}, /* 0526 */
+ {0x0528,0x0528},{0x0529,0x0529}, /* 0528 */
+ {0x052A,0x052A},{0x052B,0x052B}, /* 052A */
+ {0x052C,0x052C},{0x052D,0x052D}, /* 052C */
+ {0x052E,0x052E},{0x052F,0x052F}, /* 052E */
+ {0x0530,0x0530},{0x0531,0x0561}, /* 0530 */
+ {0x0532,0x0562},{0x0533,0x0563}, /* 0532 */
+ {0x0534,0x0564},{0x0535,0x0565}, /* 0534 */
+ {0x0536,0x0566},{0x0537,0x0567}, /* 0536 */
+ {0x0538,0x0568},{0x0539,0x0569}, /* 0538 */
+ {0x053A,0x056A},{0x053B,0x056B}, /* 053A */
+ {0x053C,0x056C},{0x053D,0x056D}, /* 053C */
+ {0x053E,0x056E},{0x053F,0x056F}, /* 053E */
+ {0x0540,0x0570},{0x0541,0x0571}, /* 0540 */
+ {0x0542,0x0572},{0x0543,0x0573}, /* 0542 */
+ {0x0544,0x0574},{0x0545,0x0575}, /* 0544 */
+ {0x0546,0x0576},{0x0547,0x0577}, /* 0546 */
+ {0x0548,0x0578},{0x0549,0x0579}, /* 0548 */
+ {0x054A,0x057A},{0x054B,0x057B}, /* 054A */
+ {0x054C,0x057C},{0x054D,0x057D}, /* 054C */
+ {0x054E,0x057E},{0x054F,0x057F}, /* 054E */
+ {0x0550,0x0580},{0x0551,0x0581}, /* 0550 */
+ {0x0552,0x0582},{0x0553,0x0583}, /* 0552 */
+ {0x0554,0x0584},{0x0555,0x0585}, /* 0554 */
+ {0x0556,0x0586},{0x0557,0x0557}, /* 0556 */
+ {0x0558,0x0558},{0x0559,0x0559}, /* 0558 */
+ {0x055A,0x055A},{0x055B,0x055B}, /* 055A */
+ {0x055C,0x055C},{0x055D,0x055D}, /* 055C */
+ {0x055E,0x055E},{0x055F,0x055F}, /* 055E */
+ {0x0560,0x0560},{0x0531,0x0561}, /* 0560 */
+ {0x0532,0x0562},{0x0533,0x0563}, /* 0562 */
+ {0x0534,0x0564},{0x0535,0x0565}, /* 0564 */
+ {0x0536,0x0566},{0x0537,0x0567}, /* 0566 */
+ {0x0538,0x0568},{0x0539,0x0569}, /* 0568 */
+ {0x053A,0x056A},{0x053B,0x056B}, /* 056A */
+ {0x053C,0x056C},{0x053D,0x056D}, /* 056C */
+ {0x053E,0x056E},{0x053F,0x056F}, /* 056E */
+ {0x0540,0x0570},{0x0541,0x0571}, /* 0570 */
+ {0x0542,0x0572},{0x0543,0x0573}, /* 0572 */
+ {0x0544,0x0574},{0x0545,0x0575}, /* 0574 */
+ {0x0546,0x0576},{0x0547,0x0577}, /* 0576 */
+ {0x0548,0x0578},{0x0549,0x0579}, /* 0578 */
+ {0x054A,0x057A},{0x054B,0x057B}, /* 057A */
+ {0x054C,0x057C},{0x054D,0x057D}, /* 057C */
+ {0x054E,0x057E},{0x054F,0x057F}, /* 057E */
+ {0x0550,0x0580},{0x0551,0x0581}, /* 0580 */
+ {0x0552,0x0582},{0x0553,0x0583}, /* 0582 */
+ {0x0554,0x0584},{0x0555,0x0585}, /* 0584 */
+ {0x0556,0x0586},{0x0587,0x0587}, /* 0586 */
+ {0x0588,0x0588},{0x0589,0x0589}, /* 0588 */
+ {0x058A,0x058A},{0x058B,0x058B}, /* 058A */
+ {0x058C,0x058C},{0x058D,0x058D}, /* 058C */
+ {0x058E,0x058E},{0x058F,0x058F}, /* 058E */
+ {0x0590,0x0590},{0x0591,0x0591}, /* 0590 */
+ {0x0592,0x0592},{0x0593,0x0593}, /* 0592 */
+ {0x0594,0x0594},{0x0595,0x0595}, /* 0594 */
+ {0x0596,0x0596},{0x0597,0x0597}, /* 0596 */
+ {0x0598,0x0598},{0x0599,0x0599}, /* 0598 */
+ {0x059A,0x059A},{0x059B,0x059B}, /* 059A */
+ {0x059C,0x059C},{0x059D,0x059D}, /* 059C */
+ {0x059E,0x059E},{0x059F,0x059F}, /* 059E */
+ {0x05A0,0x05A0},{0x05A1,0x05A1}, /* 05A0 */
+ {0x05A2,0x05A2},{0x05A3,0x05A3}, /* 05A2 */
+ {0x05A4,0x05A4},{0x05A5,0x05A5}, /* 05A4 */
+ {0x05A6,0x05A6},{0x05A7,0x05A7}, /* 05A6 */
+ {0x05A8,0x05A8},{0x05A9,0x05A9}, /* 05A8 */
+ {0x05AA,0x05AA},{0x05AB,0x05AB}, /* 05AA */
+ {0x05AC,0x05AC},{0x05AD,0x05AD}, /* 05AC */
+ {0x05AE,0x05AE},{0x05AF,0x05AF}, /* 05AE */
+ {0x05B0,0x05B0},{0x05B1,0x05B1}, /* 05B0 */
+ {0x05B2,0x05B2},{0x05B3,0x05B3}, /* 05B2 */
+ {0x05B4,0x05B4},{0x05B5,0x05B5}, /* 05B4 */
+ {0x05B6,0x05B6},{0x05B7,0x05B7}, /* 05B6 */
+ {0x05B8,0x05B8},{0x05B9,0x05B9}, /* 05B8 */
+ {0x05BA,0x05BA},{0x05BB,0x05BB}, /* 05BA */
+ {0x05BC,0x05BC},{0x05BD,0x05BD}, /* 05BC */
+ {0x05BE,0x05BE},{0x05BF,0x05BF}, /* 05BE */
+ {0x05C0,0x05C0},{0x05C1,0x05C1}, /* 05C0 */
+ {0x05C2,0x05C2},{0x05C3,0x05C3}, /* 05C2 */
+ {0x05C4,0x05C4},{0x05C5,0x05C5}, /* 05C4 */
+ {0x05C6,0x05C6},{0x05C7,0x05C7}, /* 05C6 */
+ {0x05C8,0x05C8},{0x05C9,0x05C9}, /* 05C8 */
+ {0x05CA,0x05CA},{0x05CB,0x05CB}, /* 05CA */
+ {0x05CC,0x05CC},{0x05CD,0x05CD}, /* 05CC */
+ {0x05CE,0x05CE},{0x05CF,0x05CF}, /* 05CE */
+ {0x05D0,0x05D0},{0x05D1,0x05D1}, /* 05D0 */
+ {0x05D2,0x05D2},{0x05D3,0x05D3}, /* 05D2 */
+ {0x05D4,0x05D4},{0x05D5,0x05D5}, /* 05D4 */
+ {0x05D6,0x05D6},{0x05D7,0x05D7}, /* 05D6 */
+ {0x05D8,0x05D8},{0x05D9,0x05D9}, /* 05D8 */
+ {0x05DA,0x05DA},{0x05DB,0x05DB}, /* 05DA */
+ {0x05DC,0x05DC},{0x05DD,0x05DD}, /* 05DC */
+ {0x05DE,0x05DE},{0x05DF,0x05DF}, /* 05DE */
+ {0x05E0,0x05E0},{0x05E1,0x05E1}, /* 05E0 */
+ {0x05E2,0x05E2},{0x05E3,0x05E3}, /* 05E2 */
+ {0x05E4,0x05E4},{0x05E5,0x05E5}, /* 05E4 */
+ {0x05E6,0x05E6},{0x05E7,0x05E7}, /* 05E6 */
+ {0x05E8,0x05E8},{0x05E9,0x05E9}, /* 05E8 */
+ {0x05EA,0x05EA},{0x05EB,0x05EB}, /* 05EA */
+ {0x05EC,0x05EC},{0x05ED,0x05ED}, /* 05EC */
+ {0x05EE,0x05EE},{0x05EF,0x05EF}, /* 05EE */
+ {0x05F0,0x05F0},{0x05F1,0x05F1}, /* 05F0 */
+ {0x05F2,0x05F2},{0x05F3,0x05F3}, /* 05F2 */
+ {0x05F4,0x05F4},{0x05F5,0x05F5}, /* 05F4 */
+ {0x05F6,0x05F6},{0x05F7,0x05F7}, /* 05F6 */
+ {0x05F8,0x05F8},{0x05F9,0x05F9}, /* 05F8 */
+ {0x05FA,0x05FA},{0x05FB,0x05FB}, /* 05FA */
+ {0x05FC,0x05FC},{0x05FD,0x05FD}, /* 05FC */
+ {0x05FE,0x05FE},{0x05FF,0x05FF} /* 05FE */
+};
+
+static const MY_CASEFOLD_CHARACTER u300_casefold_page06[256]={ /* This page is dummy */
+ {0x0600,0x0600},{0x0601,0x0601}, /* 0600 */
+ {0x0602,0x0602},{0x0603,0x0603}, /* 0602 */
+ {0x0604,0x0604},{0x0605,0x0605}, /* 0604 */
+ {0x0606,0x0606},{0x0607,0x0607}, /* 0606 */
+ {0x0608,0x0608},{0x0609,0x0609}, /* 0608 */
+ {0x060A,0x060A},{0x060B,0x060B}, /* 060A */
+ {0x060C,0x060C},{0x060D,0x060D}, /* 060C */
+ {0x060E,0x060E},{0x060F,0x060F}, /* 060E */
+ {0x0610,0x0610},{0x0611,0x0611}, /* 0610 */
+ {0x0612,0x0612},{0x0613,0x0613}, /* 0612 */
+ {0x0614,0x0614},{0x0615,0x0615}, /* 0614 */
+ {0x0616,0x0616},{0x0617,0x0617}, /* 0616 */
+ {0x0618,0x0618},{0x0619,0x0619}, /* 0618 */
+ {0x061A,0x061A},{0x061B,0x061B}, /* 061A */
+ {0x061C,0x061C},{0x061D,0x061D}, /* 061C */
+ {0x061E,0x061E},{0x061F,0x061F}, /* 061E */
+ {0x0620,0x0620},{0x0621,0x0621}, /* 0620 */
+ {0x0622,0x0622},{0x0623,0x0623}, /* 0622 */
+ {0x0624,0x0624},{0x0625,0x0625}, /* 0624 */
+ {0x0626,0x0626},{0x0627,0x0627}, /* 0626 */
+ {0x0628,0x0628},{0x0629,0x0629}, /* 0628 */
+ {0x062A,0x062A},{0x062B,0x062B}, /* 062A */
+ {0x062C,0x062C},{0x062D,0x062D}, /* 062C */
+ {0x062E,0x062E},{0x062F,0x062F}, /* 062E */
+ {0x0630,0x0630},{0x0631,0x0631}, /* 0630 */
+ {0x0632,0x0632},{0x0633,0x0633}, /* 0632 */
+ {0x0634,0x0634},{0x0635,0x0635}, /* 0634 */
+ {0x0636,0x0636},{0x0637,0x0637}, /* 0636 */
+ {0x0638,0x0638},{0x0639,0x0639}, /* 0638 */
+ {0x063A,0x063A},{0x063B,0x063B}, /* 063A */
+ {0x063C,0x063C},{0x063D,0x063D}, /* 063C */
+ {0x063E,0x063E},{0x063F,0x063F}, /* 063E */
+ {0x0640,0x0640},{0x0641,0x0641}, /* 0640 */
+ {0x0642,0x0642},{0x0643,0x0643}, /* 0642 */
+ {0x0644,0x0644},{0x0645,0x0645}, /* 0644 */
+ {0x0646,0x0646},{0x0647,0x0647}, /* 0646 */
+ {0x0648,0x0648},{0x0649,0x0649}, /* 0648 */
+ {0x064A,0x064A},{0x064B,0x064B}, /* 064A */
+ {0x064C,0x064C},{0x064D,0x064D}, /* 064C */
+ {0x064E,0x064E},{0x064F,0x064F}, /* 064E */
+ {0x0650,0x0650},{0x0651,0x0651}, /* 0650 */
+ {0x0652,0x0652},{0x0653,0x0653}, /* 0652 */
+ {0x0654,0x0654},{0x0655,0x0655}, /* 0654 */
+ {0x0656,0x0656},{0x0657,0x0657}, /* 0656 */
+ {0x0658,0x0658},{0x0659,0x0659}, /* 0658 */
+ {0x065A,0x065A},{0x065B,0x065B}, /* 065A */
+ {0x065C,0x065C},{0x065D,0x065D}, /* 065C */
+ {0x065E,0x065E},{0x065F,0x065F}, /* 065E */
+ {0x0660,0x0660},{0x0661,0x0661}, /* 0660 */
+ {0x0662,0x0662},{0x0663,0x0663}, /* 0662 */
+ {0x0664,0x0664},{0x0665,0x0665}, /* 0664 */
+ {0x0666,0x0666},{0x0667,0x0667}, /* 0666 */
+ {0x0668,0x0668},{0x0669,0x0669}, /* 0668 */
+ {0x066A,0x066A},{0x066B,0x066B}, /* 066A */
+ {0x066C,0x066C},{0x066D,0x066D}, /* 066C */
+ {0x066E,0x066E},{0x066F,0x066F}, /* 066E */
+ {0x0670,0x0670},{0x0671,0x0671}, /* 0670 */
+ {0x0672,0x0672},{0x0673,0x0673}, /* 0672 */
+ {0x0674,0x0674},{0x0675,0x0675}, /* 0674 */
+ {0x0676,0x0676},{0x0677,0x0677}, /* 0676 */
+ {0x0678,0x0678},{0x0679,0x0679}, /* 0678 */
+ {0x067A,0x067A},{0x067B,0x067B}, /* 067A */
+ {0x067C,0x067C},{0x067D,0x067D}, /* 067C */
+ {0x067E,0x067E},{0x067F,0x067F}, /* 067E */
+ {0x0680,0x0680},{0x0681,0x0681}, /* 0680 */
+ {0x0682,0x0682},{0x0683,0x0683}, /* 0682 */
+ {0x0684,0x0684},{0x0685,0x0685}, /* 0684 */
+ {0x0686,0x0686},{0x0687,0x0687}, /* 0686 */
+ {0x0688,0x0688},{0x0689,0x0689}, /* 0688 */
+ {0x068A,0x068A},{0x068B,0x068B}, /* 068A */
+ {0x068C,0x068C},{0x068D,0x068D}, /* 068C */
+ {0x068E,0x068E},{0x068F,0x068F}, /* 068E */
+ {0x0690,0x0690},{0x0691,0x0691}, /* 0690 */
+ {0x0692,0x0692},{0x0693,0x0693}, /* 0692 */
+ {0x0694,0x0694},{0x0695,0x0695}, /* 0694 */
+ {0x0696,0x0696},{0x0697,0x0697}, /* 0696 */
+ {0x0698,0x0698},{0x0699,0x0699}, /* 0698 */
+ {0x069A,0x069A},{0x069B,0x069B}, /* 069A */
+ {0x069C,0x069C},{0x069D,0x069D}, /* 069C */
+ {0x069E,0x069E},{0x069F,0x069F}, /* 069E */
+ {0x06A0,0x06A0},{0x06A1,0x06A1}, /* 06A0 */
+ {0x06A2,0x06A2},{0x06A3,0x06A3}, /* 06A2 */
+ {0x06A4,0x06A4},{0x06A5,0x06A5}, /* 06A4 */
+ {0x06A6,0x06A6},{0x06A7,0x06A7}, /* 06A6 */
+ {0x06A8,0x06A8},{0x06A9,0x06A9}, /* 06A8 */
+ {0x06AA,0x06AA},{0x06AB,0x06AB}, /* 06AA */
+ {0x06AC,0x06AC},{0x06AD,0x06AD}, /* 06AC */
+ {0x06AE,0x06AE},{0x06AF,0x06AF}, /* 06AE */
+ {0x06B0,0x06B0},{0x06B1,0x06B1}, /* 06B0 */
+ {0x06B2,0x06B2},{0x06B3,0x06B3}, /* 06B2 */
+ {0x06B4,0x06B4},{0x06B5,0x06B5}, /* 06B4 */
+ {0x06B6,0x06B6},{0x06B7,0x06B7}, /* 06B6 */
+ {0x06B8,0x06B8},{0x06B9,0x06B9}, /* 06B8 */
+ {0x06BA,0x06BA},{0x06BB,0x06BB}, /* 06BA */
+ {0x06BC,0x06BC},{0x06BD,0x06BD}, /* 06BC */
+ {0x06BE,0x06BE},{0x06BF,0x06BF}, /* 06BE */
+ {0x06C0,0x06C0},{0x06C1,0x06C1}, /* 06C0 */
+ {0x06C2,0x06C2},{0x06C3,0x06C3}, /* 06C2 */
+ {0x06C4,0x06C4},{0x06C5,0x06C5}, /* 06C4 */
+ {0x06C6,0x06C6},{0x06C7,0x06C7}, /* 06C6 */
+ {0x06C8,0x06C8},{0x06C9,0x06C9}, /* 06C8 */
+ {0x06CA,0x06CA},{0x06CB,0x06CB}, /* 06CA */
+ {0x06CC,0x06CC},{0x06CD,0x06CD}, /* 06CC */
+ {0x06CE,0x06CE},{0x06CF,0x06CF}, /* 06CE */
+ {0x06D0,0x06D0},{0x06D1,0x06D1}, /* 06D0 */
+ {0x06D2,0x06D2},{0x06D3,0x06D3}, /* 06D2 */
+ {0x06D4,0x06D4},{0x06D5,0x06D5}, /* 06D4 */
+ {0x06D6,0x06D6},{0x06D7,0x06D7}, /* 06D6 */
+ {0x06D8,0x06D8},{0x06D9,0x06D9}, /* 06D8 */
+ {0x06DA,0x06DA},{0x06DB,0x06DB}, /* 06DA */
+ {0x06DC,0x06DC},{0x06DD,0x06DD}, /* 06DC */
+ {0x06DE,0x06DE},{0x06DF,0x06DF}, /* 06DE */
+ {0x06E0,0x06E0},{0x06E1,0x06E1}, /* 06E0 */
+ {0x06E2,0x06E2},{0x06E3,0x06E3}, /* 06E2 */
+ {0x06E4,0x06E4},{0x06E5,0x06E5}, /* 06E4 */
+ {0x06E6,0x06E6},{0x06E7,0x06E7}, /* 06E6 */
+ {0x06E8,0x06E8},{0x06E9,0x06E9}, /* 06E8 */
+ {0x06EA,0x06EA},{0x06EB,0x06EB}, /* 06EA */
+ {0x06EC,0x06EC},{0x06ED,0x06ED}, /* 06EC */
+ {0x06EE,0x06EE},{0x06EF,0x06EF}, /* 06EE */
+ {0x06F0,0x06F0},{0x06F1,0x06F1}, /* 06F0 */
+ {0x06F2,0x06F2},{0x06F3,0x06F3}, /* 06F2 */
+ {0x06F4,0x06F4},{0x06F5,0x06F5}, /* 06F4 */
+ {0x06F6,0x06F6},{0x06F7,0x06F7}, /* 06F6 */
+ {0x06F8,0x06F8},{0x06F9,0x06F9}, /* 06F8 */
+ {0x06FA,0x06FA},{0x06FB,0x06FB}, /* 06FA */
+ {0x06FC,0x06FC},{0x06FD,0x06FD}, /* 06FC */
+ {0x06FE,0x06FE},{0x06FF,0x06FF} /* 06FE */
+};
+
+static const MY_CASEFOLD_CHARACTER u300_casefold_page07[256]={ /* This page is dummy */
+ {0x0700,0x0700},{0x0701,0x0701}, /* 0700 */
+ {0x0702,0x0702},{0x0703,0x0703}, /* 0702 */
+ {0x0704,0x0704},{0x0705,0x0705}, /* 0704 */
+ {0x0706,0x0706},{0x0707,0x0707}, /* 0706 */
+ {0x0708,0x0708},{0x0709,0x0709}, /* 0708 */
+ {0x070A,0x070A},{0x070B,0x070B}, /* 070A */
+ {0x070C,0x070C},{0x070D,0x070D}, /* 070C */
+ {0x070E,0x070E},{0x070F,0x070F}, /* 070E */
+ {0x0710,0x0710},{0x0711,0x0711}, /* 0710 */
+ {0x0712,0x0712},{0x0713,0x0713}, /* 0712 */
+ {0x0714,0x0714},{0x0715,0x0715}, /* 0714 */
+ {0x0716,0x0716},{0x0717,0x0717}, /* 0716 */
+ {0x0718,0x0718},{0x0719,0x0719}, /* 0718 */
+ {0x071A,0x071A},{0x071B,0x071B}, /* 071A */
+ {0x071C,0x071C},{0x071D,0x071D}, /* 071C */
+ {0x071E,0x071E},{0x071F,0x071F}, /* 071E */
+ {0x0720,0x0720},{0x0721,0x0721}, /* 0720 */
+ {0x0722,0x0722},{0x0723,0x0723}, /* 0722 */
+ {0x0724,0x0724},{0x0725,0x0725}, /* 0724 */
+ {0x0726,0x0726},{0x0727,0x0727}, /* 0726 */
+ {0x0728,0x0728},{0x0729,0x0729}, /* 0728 */
+ {0x072A,0x072A},{0x072B,0x072B}, /* 072A */
+ {0x072C,0x072C},{0x072D,0x072D}, /* 072C */
+ {0x072E,0x072E},{0x072F,0x072F}, /* 072E */
+ {0x0730,0x0730},{0x0731,0x0731}, /* 0730 */
+ {0x0732,0x0732},{0x0733,0x0733}, /* 0732 */
+ {0x0734,0x0734},{0x0735,0x0735}, /* 0734 */
+ {0x0736,0x0736},{0x0737,0x0737}, /* 0736 */
+ {0x0738,0x0738},{0x0739,0x0739}, /* 0738 */
+ {0x073A,0x073A},{0x073B,0x073B}, /* 073A */
+ {0x073C,0x073C},{0x073D,0x073D}, /* 073C */
+ {0x073E,0x073E},{0x073F,0x073F}, /* 073E */
+ {0x0740,0x0740},{0x0741,0x0741}, /* 0740 */
+ {0x0742,0x0742},{0x0743,0x0743}, /* 0742 */
+ {0x0744,0x0744},{0x0745,0x0745}, /* 0744 */
+ {0x0746,0x0746},{0x0747,0x0747}, /* 0746 */
+ {0x0748,0x0748},{0x0749,0x0749}, /* 0748 */
+ {0x074A,0x074A},{0x074B,0x074B}, /* 074A */
+ {0x074C,0x074C},{0x074D,0x074D}, /* 074C */
+ {0x074E,0x074E},{0x074F,0x074F}, /* 074E */
+ {0x0750,0x0750},{0x0751,0x0751}, /* 0750 */
+ {0x0752,0x0752},{0x0753,0x0753}, /* 0752 */
+ {0x0754,0x0754},{0x0755,0x0755}, /* 0754 */
+ {0x0756,0x0756},{0x0757,0x0757}, /* 0756 */
+ {0x0758,0x0758},{0x0759,0x0759}, /* 0758 */
+ {0x075A,0x075A},{0x075B,0x075B}, /* 075A */
+ {0x075C,0x075C},{0x075D,0x075D}, /* 075C */
+ {0x075E,0x075E},{0x075F,0x075F}, /* 075E */
+ {0x0760,0x0760},{0x0761,0x0761}, /* 0760 */
+ {0x0762,0x0762},{0x0763,0x0763}, /* 0762 */
+ {0x0764,0x0764},{0x0765,0x0765}, /* 0764 */
+ {0x0766,0x0766},{0x0767,0x0767}, /* 0766 */
+ {0x0768,0x0768},{0x0769,0x0769}, /* 0768 */
+ {0x076A,0x076A},{0x076B,0x076B}, /* 076A */
+ {0x076C,0x076C},{0x076D,0x076D}, /* 076C */
+ {0x076E,0x076E},{0x076F,0x076F}, /* 076E */
+ {0x0770,0x0770},{0x0771,0x0771}, /* 0770 */
+ {0x0772,0x0772},{0x0773,0x0773}, /* 0772 */
+ {0x0774,0x0774},{0x0775,0x0775}, /* 0774 */
+ {0x0776,0x0776},{0x0777,0x0777}, /* 0776 */
+ {0x0778,0x0778},{0x0779,0x0779}, /* 0778 */
+ {0x077A,0x077A},{0x077B,0x077B}, /* 077A */
+ {0x077C,0x077C},{0x077D,0x077D}, /* 077C */
+ {0x077E,0x077E},{0x077F,0x077F}, /* 077E */
+ {0x0780,0x0780},{0x0781,0x0781}, /* 0780 */
+ {0x0782,0x0782},{0x0783,0x0783}, /* 0782 */
+ {0x0784,0x0784},{0x0785,0x0785}, /* 0784 */
+ {0x0786,0x0786},{0x0787,0x0787}, /* 0786 */
+ {0x0788,0x0788},{0x0789,0x0789}, /* 0788 */
+ {0x078A,0x078A},{0x078B,0x078B}, /* 078A */
+ {0x078C,0x078C},{0x078D,0x078D}, /* 078C */
+ {0x078E,0x078E},{0x078F,0x078F}, /* 078E */
+ {0x0790,0x0790},{0x0791,0x0791}, /* 0790 */
+ {0x0792,0x0792},{0x0793,0x0793}, /* 0792 */
+ {0x0794,0x0794},{0x0795,0x0795}, /* 0794 */
+ {0x0796,0x0796},{0x0797,0x0797}, /* 0796 */
+ {0x0798,0x0798},{0x0799,0x0799}, /* 0798 */
+ {0x079A,0x079A},{0x079B,0x079B}, /* 079A */
+ {0x079C,0x079C},{0x079D,0x079D}, /* 079C */
+ {0x079E,0x079E},{0x079F,0x079F}, /* 079E */
+ {0x07A0,0x07A0},{0x07A1,0x07A1}, /* 07A0 */
+ {0x07A2,0x07A2},{0x07A3,0x07A3}, /* 07A2 */
+ {0x07A4,0x07A4},{0x07A5,0x07A5}, /* 07A4 */
+ {0x07A6,0x07A6},{0x07A7,0x07A7}, /* 07A6 */
+ {0x07A8,0x07A8},{0x07A9,0x07A9}, /* 07A8 */
+ {0x07AA,0x07AA},{0x07AB,0x07AB}, /* 07AA */
+ {0x07AC,0x07AC},{0x07AD,0x07AD}, /* 07AC */
+ {0x07AE,0x07AE},{0x07AF,0x07AF}, /* 07AE */
+ {0x07B0,0x07B0},{0x07B1,0x07B1}, /* 07B0 */
+ {0x07B2,0x07B2},{0x07B3,0x07B3}, /* 07B2 */
+ {0x07B4,0x07B4},{0x07B5,0x07B5}, /* 07B4 */
+ {0x07B6,0x07B6},{0x07B7,0x07B7}, /* 07B6 */
+ {0x07B8,0x07B8},{0x07B9,0x07B9}, /* 07B8 */
+ {0x07BA,0x07BA},{0x07BB,0x07BB}, /* 07BA */
+ {0x07BC,0x07BC},{0x07BD,0x07BD}, /* 07BC */
+ {0x07BE,0x07BE},{0x07BF,0x07BF}, /* 07BE */
+ {0x07C0,0x07C0},{0x07C1,0x07C1}, /* 07C0 */
+ {0x07C2,0x07C2},{0x07C3,0x07C3}, /* 07C2 */
+ {0x07C4,0x07C4},{0x07C5,0x07C5}, /* 07C4 */
+ {0x07C6,0x07C6},{0x07C7,0x07C7}, /* 07C6 */
+ {0x07C8,0x07C8},{0x07C9,0x07C9}, /* 07C8 */
+ {0x07CA,0x07CA},{0x07CB,0x07CB}, /* 07CA */
+ {0x07CC,0x07CC},{0x07CD,0x07CD}, /* 07CC */
+ {0x07CE,0x07CE},{0x07CF,0x07CF}, /* 07CE */
+ {0x07D0,0x07D0},{0x07D1,0x07D1}, /* 07D0 */
+ {0x07D2,0x07D2},{0x07D3,0x07D3}, /* 07D2 */
+ {0x07D4,0x07D4},{0x07D5,0x07D5}, /* 07D4 */
+ {0x07D6,0x07D6},{0x07D7,0x07D7}, /* 07D6 */
+ {0x07D8,0x07D8},{0x07D9,0x07D9}, /* 07D8 */
+ {0x07DA,0x07DA},{0x07DB,0x07DB}, /* 07DA */
+ {0x07DC,0x07DC},{0x07DD,0x07DD}, /* 07DC */
+ {0x07DE,0x07DE},{0x07DF,0x07DF}, /* 07DE */
+ {0x07E0,0x07E0},{0x07E1,0x07E1}, /* 07E0 */
+ {0x07E2,0x07E2},{0x07E3,0x07E3}, /* 07E2 */
+ {0x07E4,0x07E4},{0x07E5,0x07E5}, /* 07E4 */
+ {0x07E6,0x07E6},{0x07E7,0x07E7}, /* 07E6 */
+ {0x07E8,0x07E8},{0x07E9,0x07E9}, /* 07E8 */
+ {0x07EA,0x07EA},{0x07EB,0x07EB}, /* 07EA */
+ {0x07EC,0x07EC},{0x07ED,0x07ED}, /* 07EC */
+ {0x07EE,0x07EE},{0x07EF,0x07EF}, /* 07EE */
+ {0x07F0,0x07F0},{0x07F1,0x07F1}, /* 07F0 */
+ {0x07F2,0x07F2},{0x07F3,0x07F3}, /* 07F2 */
+ {0x07F4,0x07F4},{0x07F5,0x07F5}, /* 07F4 */
+ {0x07F6,0x07F6},{0x07F7,0x07F7}, /* 07F6 */
+ {0x07F8,0x07F8},{0x07F9,0x07F9}, /* 07F8 */
+ {0x07FA,0x07FA},{0x07FB,0x07FB}, /* 07FA */
+ {0x07FC,0x07FC},{0x07FD,0x07FD}, /* 07FC */
+ {0x07FE,0x07FE},{0x07FF,0x07FF} /* 07FE */
+};
+
+static const MY_CASEFOLD_CHARACTER u300_casefold_page1E[256]={
+ {0x1E00,0x1E01},{0x1E00,0x1E01}, /* 1E00 */
+ {0x1E02,0x1E03},{0x1E02,0x1E03}, /* 1E02 */
+ {0x1E04,0x1E05},{0x1E04,0x1E05}, /* 1E04 */
+ {0x1E06,0x1E07},{0x1E06,0x1E07}, /* 1E06 */
+ {0x1E08,0x1E09},{0x1E08,0x1E09}, /* 1E08 */
+ {0x1E0A,0x1E0B},{0x1E0A,0x1E0B}, /* 1E0A */
+ {0x1E0C,0x1E0D},{0x1E0C,0x1E0D}, /* 1E0C */
+ {0x1E0E,0x1E0F},{0x1E0E,0x1E0F}, /* 1E0E */
+ {0x1E10,0x1E11},{0x1E10,0x1E11}, /* 1E10 */
+ {0x1E12,0x1E13},{0x1E12,0x1E13}, /* 1E12 */
+ {0x1E14,0x1E15},{0x1E14,0x1E15}, /* 1E14 */
+ {0x1E16,0x1E17},{0x1E16,0x1E17}, /* 1E16 */
+ {0x1E18,0x1E19},{0x1E18,0x1E19}, /* 1E18 */
+ {0x1E1A,0x1E1B},{0x1E1A,0x1E1B}, /* 1E1A */
+ {0x1E1C,0x1E1D},{0x1E1C,0x1E1D}, /* 1E1C */
+ {0x1E1E,0x1E1F},{0x1E1E,0x1E1F}, /* 1E1E */
+ {0x1E20,0x1E21},{0x1E20,0x1E21}, /* 1E20 */
+ {0x1E22,0x1E23},{0x1E22,0x1E23}, /* 1E22 */
+ {0x1E24,0x1E25},{0x1E24,0x1E25}, /* 1E24 */
+ {0x1E26,0x1E27},{0x1E26,0x1E27}, /* 1E26 */
+ {0x1E28,0x1E29},{0x1E28,0x1E29}, /* 1E28 */
+ {0x1E2A,0x1E2B},{0x1E2A,0x1E2B}, /* 1E2A */
+ {0x1E2C,0x1E2D},{0x1E2C,0x1E2D}, /* 1E2C */
+ {0x1E2E,0x1E2F},{0x1E2E,0x1E2F}, /* 1E2E */
+ {0x1E30,0x1E31},{0x1E30,0x1E31}, /* 1E30 */
+ {0x1E32,0x1E33},{0x1E32,0x1E33}, /* 1E32 */
+ {0x1E34,0x1E35},{0x1E34,0x1E35}, /* 1E34 */
+ {0x1E36,0x1E37},{0x1E36,0x1E37}, /* 1E36 */
+ {0x1E38,0x1E39},{0x1E38,0x1E39}, /* 1E38 */
+ {0x1E3A,0x1E3B},{0x1E3A,0x1E3B}, /* 1E3A */
+ {0x1E3C,0x1E3D},{0x1E3C,0x1E3D}, /* 1E3C */
+ {0x1E3E,0x1E3F},{0x1E3E,0x1E3F}, /* 1E3E */
+ {0x1E40,0x1E41},{0x1E40,0x1E41}, /* 1E40 */
+ {0x1E42,0x1E43},{0x1E42,0x1E43}, /* 1E42 */
+ {0x1E44,0x1E45},{0x1E44,0x1E45}, /* 1E44 */
+ {0x1E46,0x1E47},{0x1E46,0x1E47}, /* 1E46 */
+ {0x1E48,0x1E49},{0x1E48,0x1E49}, /* 1E48 */
+ {0x1E4A,0x1E4B},{0x1E4A,0x1E4B}, /* 1E4A */
+ {0x1E4C,0x1E4D},{0x1E4C,0x1E4D}, /* 1E4C */
+ {0x1E4E,0x1E4F},{0x1E4E,0x1E4F}, /* 1E4E */
+ {0x1E50,0x1E51},{0x1E50,0x1E51}, /* 1E50 */
+ {0x1E52,0x1E53},{0x1E52,0x1E53}, /* 1E52 */
+ {0x1E54,0x1E55},{0x1E54,0x1E55}, /* 1E54 */
+ {0x1E56,0x1E57},{0x1E56,0x1E57}, /* 1E56 */
+ {0x1E58,0x1E59},{0x1E58,0x1E59}, /* 1E58 */
+ {0x1E5A,0x1E5B},{0x1E5A,0x1E5B}, /* 1E5A */
+ {0x1E5C,0x1E5D},{0x1E5C,0x1E5D}, /* 1E5C */
+ {0x1E5E,0x1E5F},{0x1E5E,0x1E5F}, /* 1E5E */
+ {0x1E60,0x1E61},{0x1E60,0x1E61}, /* 1E60 */
+ {0x1E62,0x1E63},{0x1E62,0x1E63}, /* 1E62 */
+ {0x1E64,0x1E65},{0x1E64,0x1E65}, /* 1E64 */
+ {0x1E66,0x1E67},{0x1E66,0x1E67}, /* 1E66 */
+ {0x1E68,0x1E69},{0x1E68,0x1E69}, /* 1E68 */
+ {0x1E6A,0x1E6B},{0x1E6A,0x1E6B}, /* 1E6A */
+ {0x1E6C,0x1E6D},{0x1E6C,0x1E6D}, /* 1E6C */
+ {0x1E6E,0x1E6F},{0x1E6E,0x1E6F}, /* 1E6E */
+ {0x1E70,0x1E71},{0x1E70,0x1E71}, /* 1E70 */
+ {0x1E72,0x1E73},{0x1E72,0x1E73}, /* 1E72 */
+ {0x1E74,0x1E75},{0x1E74,0x1E75}, /* 1E74 */
+ {0x1E76,0x1E77},{0x1E76,0x1E77}, /* 1E76 */
+ {0x1E78,0x1E79},{0x1E78,0x1E79}, /* 1E78 */
+ {0x1E7A,0x1E7B},{0x1E7A,0x1E7B}, /* 1E7A */
+ {0x1E7C,0x1E7D},{0x1E7C,0x1E7D}, /* 1E7C */
+ {0x1E7E,0x1E7F},{0x1E7E,0x1E7F}, /* 1E7E */
+ {0x1E80,0x1E81},{0x1E80,0x1E81}, /* 1E80 */
+ {0x1E82,0x1E83},{0x1E82,0x1E83}, /* 1E82 */
+ {0x1E84,0x1E85},{0x1E84,0x1E85}, /* 1E84 */
+ {0x1E86,0x1E87},{0x1E86,0x1E87}, /* 1E86 */
+ {0x1E88,0x1E89},{0x1E88,0x1E89}, /* 1E88 */
+ {0x1E8A,0x1E8B},{0x1E8A,0x1E8B}, /* 1E8A */
+ {0x1E8C,0x1E8D},{0x1E8C,0x1E8D}, /* 1E8C */
+ {0x1E8E,0x1E8F},{0x1E8E,0x1E8F}, /* 1E8E */
+ {0x1E90,0x1E91},{0x1E90,0x1E91}, /* 1E90 */
+ {0x1E92,0x1E93},{0x1E92,0x1E93}, /* 1E92 */
+ {0x1E94,0x1E95},{0x1E94,0x1E95}, /* 1E94 */
+ {0x1E96,0x1E96},{0x1E97,0x1E97}, /* 1E96 */
+ {0x1E98,0x1E98},{0x1E99,0x1E99}, /* 1E98 */
+ {0x1E9A,0x1E9A},{0x1E60,0x1E9B}, /* 1E9A */
+ {0x1E9C,0x1E9C},{0x1E9D,0x1E9D}, /* 1E9C */
+ {0x1E9E,0x1E9E},{0x1E9F,0x1E9F}, /* 1E9E */
+ {0x1EA0,0x1EA1},{0x1EA0,0x1EA1}, /* 1EA0 */
+ {0x1EA2,0x1EA3},{0x1EA2,0x1EA3}, /* 1EA2 */
+ {0x1EA4,0x1EA5},{0x1EA4,0x1EA5}, /* 1EA4 */
+ {0x1EA6,0x1EA7},{0x1EA6,0x1EA7}, /* 1EA6 */
+ {0x1EA8,0x1EA9},{0x1EA8,0x1EA9}, /* 1EA8 */
+ {0x1EAA,0x1EAB},{0x1EAA,0x1EAB}, /* 1EAA */
+ {0x1EAC,0x1EAD},{0x1EAC,0x1EAD}, /* 1EAC */
+ {0x1EAE,0x1EAF},{0x1EAE,0x1EAF}, /* 1EAE */
+ {0x1EB0,0x1EB1},{0x1EB0,0x1EB1}, /* 1EB0 */
+ {0x1EB2,0x1EB3},{0x1EB2,0x1EB3}, /* 1EB2 */
+ {0x1EB4,0x1EB5},{0x1EB4,0x1EB5}, /* 1EB4 */
+ {0x1EB6,0x1EB7},{0x1EB6,0x1EB7}, /* 1EB6 */
+ {0x1EB8,0x1EB9},{0x1EB8,0x1EB9}, /* 1EB8 */
+ {0x1EBA,0x1EBB},{0x1EBA,0x1EBB}, /* 1EBA */
+ {0x1EBC,0x1EBD},{0x1EBC,0x1EBD}, /* 1EBC */
+ {0x1EBE,0x1EBF},{0x1EBE,0x1EBF}, /* 1EBE */
+ {0x1EC0,0x1EC1},{0x1EC0,0x1EC1}, /* 1EC0 */
+ {0x1EC2,0x1EC3},{0x1EC2,0x1EC3}, /* 1EC2 */
+ {0x1EC4,0x1EC5},{0x1EC4,0x1EC5}, /* 1EC4 */
+ {0x1EC6,0x1EC7},{0x1EC6,0x1EC7}, /* 1EC6 */
+ {0x1EC8,0x1EC9},{0x1EC8,0x1EC9}, /* 1EC8 */
+ {0x1ECA,0x1ECB},{0x1ECA,0x1ECB}, /* 1ECA */
+ {0x1ECC,0x1ECD},{0x1ECC,0x1ECD}, /* 1ECC */
+ {0x1ECE,0x1ECF},{0x1ECE,0x1ECF}, /* 1ECE */
+ {0x1ED0,0x1ED1},{0x1ED0,0x1ED1}, /* 1ED0 */
+ {0x1ED2,0x1ED3},{0x1ED2,0x1ED3}, /* 1ED2 */
+ {0x1ED4,0x1ED5},{0x1ED4,0x1ED5}, /* 1ED4 */
+ {0x1ED6,0x1ED7},{0x1ED6,0x1ED7}, /* 1ED6 */
+ {0x1ED8,0x1ED9},{0x1ED8,0x1ED9}, /* 1ED8 */
+ {0x1EDA,0x1EDB},{0x1EDA,0x1EDB}, /* 1EDA */
+ {0x1EDC,0x1EDD},{0x1EDC,0x1EDD}, /* 1EDC */
+ {0x1EDE,0x1EDF},{0x1EDE,0x1EDF}, /* 1EDE */
+ {0x1EE0,0x1EE1},{0x1EE0,0x1EE1}, /* 1EE0 */
+ {0x1EE2,0x1EE3},{0x1EE2,0x1EE3}, /* 1EE2 */
+ {0x1EE4,0x1EE5},{0x1EE4,0x1EE5}, /* 1EE4 */
+ {0x1EE6,0x1EE7},{0x1EE6,0x1EE7}, /* 1EE6 */
+ {0x1EE8,0x1EE9},{0x1EE8,0x1EE9}, /* 1EE8 */
+ {0x1EEA,0x1EEB},{0x1EEA,0x1EEB}, /* 1EEA */
+ {0x1EEC,0x1EED},{0x1EEC,0x1EED}, /* 1EEC */
+ {0x1EEE,0x1EEF},{0x1EEE,0x1EEF}, /* 1EEE */
+ {0x1EF0,0x1EF1},{0x1EF0,0x1EF1}, /* 1EF0 */
+ {0x1EF2,0x1EF3},{0x1EF2,0x1EF3}, /* 1EF2 */
+ {0x1EF4,0x1EF5},{0x1EF4,0x1EF5}, /* 1EF4 */
+ {0x1EF6,0x1EF7},{0x1EF6,0x1EF7}, /* 1EF6 */
+ {0x1EF8,0x1EF9},{0x1EF8,0x1EF9}, /* 1EF8 */
+ {0x1EFA,0x1EFA},{0x1EFB,0x1EFB}, /* 1EFA */
+ {0x1EFC,0x1EFC},{0x1EFD,0x1EFD}, /* 1EFC */
+ {0x1EFE,0x1EFE},{0x1EFF,0x1EFF} /* 1EFE */
+};
+
+static const MY_CASEFOLD_CHARACTER u300_casefold_page1F[256]={
+ {0x1F08,0x1F00},{0x1F09,0x1F01}, /* 1F00 */
+ {0x1F0A,0x1F02},{0x1F0B,0x1F03}, /* 1F02 */
+ {0x1F0C,0x1F04},{0x1F0D,0x1F05}, /* 1F04 */
+ {0x1F0E,0x1F06},{0x1F0F,0x1F07}, /* 1F06 */
+ {0x1F08,0x1F00},{0x1F09,0x1F01}, /* 1F08 */
+ {0x1F0A,0x1F02},{0x1F0B,0x1F03}, /* 1F0A */
+ {0x1F0C,0x1F04},{0x1F0D,0x1F05}, /* 1F0C */
+ {0x1F0E,0x1F06},{0x1F0F,0x1F07}, /* 1F0E */
+ {0x1F18,0x1F10},{0x1F19,0x1F11}, /* 1F10 */
+ {0x1F1A,0x1F12},{0x1F1B,0x1F13}, /* 1F12 */
+ {0x1F1C,0x1F14},{0x1F1D,0x1F15}, /* 1F14 */
+ {0x1F16,0x1F16},{0x1F17,0x1F17}, /* 1F16 */
+ {0x1F18,0x1F10},{0x1F19,0x1F11}, /* 1F18 */
+ {0x1F1A,0x1F12},{0x1F1B,0x1F13}, /* 1F1A */
+ {0x1F1C,0x1F14},{0x1F1D,0x1F15}, /* 1F1C */
+ {0x1F1E,0x1F1E},{0x1F1F,0x1F1F}, /* 1F1E */
+ {0x1F28,0x1F20},{0x1F29,0x1F21}, /* 1F20 */
+ {0x1F2A,0x1F22},{0x1F2B,0x1F23}, /* 1F22 */
+ {0x1F2C,0x1F24},{0x1F2D,0x1F25}, /* 1F24 */
+ {0x1F2E,0x1F26},{0x1F2F,0x1F27}, /* 1F26 */
+ {0x1F28,0x1F20},{0x1F29,0x1F21}, /* 1F28 */
+ {0x1F2A,0x1F22},{0x1F2B,0x1F23}, /* 1F2A */
+ {0x1F2C,0x1F24},{0x1F2D,0x1F25}, /* 1F2C */
+ {0x1F2E,0x1F26},{0x1F2F,0x1F27}, /* 1F2E */
+ {0x1F38,0x1F30},{0x1F39,0x1F31}, /* 1F30 */
+ {0x1F3A,0x1F32},{0x1F3B,0x1F33}, /* 1F32 */
+ {0x1F3C,0x1F34},{0x1F3D,0x1F35}, /* 1F34 */
+ {0x1F3E,0x1F36},{0x1F3F,0x1F37}, /* 1F36 */
+ {0x1F38,0x1F30},{0x1F39,0x1F31}, /* 1F38 */
+ {0x1F3A,0x1F32},{0x1F3B,0x1F33}, /* 1F3A */
+ {0x1F3C,0x1F34},{0x1F3D,0x1F35}, /* 1F3C */
+ {0x1F3E,0x1F36},{0x1F3F,0x1F37}, /* 1F3E */
+ {0x1F48,0x1F40},{0x1F49,0x1F41}, /* 1F40 */
+ {0x1F4A,0x1F42},{0x1F4B,0x1F43}, /* 1F42 */
+ {0x1F4C,0x1F44},{0x1F4D,0x1F45}, /* 1F44 */
+ {0x1F46,0x1F46},{0x1F47,0x1F47}, /* 1F46 */
+ {0x1F48,0x1F40},{0x1F49,0x1F41}, /* 1F48 */
+ {0x1F4A,0x1F42},{0x1F4B,0x1F43}, /* 1F4A */
+ {0x1F4C,0x1F44},{0x1F4D,0x1F45}, /* 1F4C */
+ {0x1F4E,0x1F4E},{0x1F4F,0x1F4F}, /* 1F4E */
+ {0x1F50,0x1F50},{0x1F59,0x1F51}, /* 1F50 */
+ {0x1F52,0x1F52},{0x1F5B,0x1F53}, /* 1F52 */
+ {0x1F54,0x1F54},{0x1F5D,0x1F55}, /* 1F54 */
+ {0x1F56,0x1F56},{0x1F5F,0x1F57}, /* 1F56 */
+ {0x1F58,0x1F58},{0x1F59,0x1F51}, /* 1F58 */
+ {0x1F5A,0x1F5A},{0x1F5B,0x1F53}, /* 1F5A */
+ {0x1F5C,0x1F5C},{0x1F5D,0x1F55}, /* 1F5C */
+ {0x1F5E,0x1F5E},{0x1F5F,0x1F57}, /* 1F5E */
+ {0x1F68,0x1F60},{0x1F69,0x1F61}, /* 1F60 */
+ {0x1F6A,0x1F62},{0x1F6B,0x1F63}, /* 1F62 */
+ {0x1F6C,0x1F64},{0x1F6D,0x1F65}, /* 1F64 */
+ {0x1F6E,0x1F66},{0x1F6F,0x1F67}, /* 1F66 */
+ {0x1F68,0x1F60},{0x1F69,0x1F61}, /* 1F68 */
+ {0x1F6A,0x1F62},{0x1F6B,0x1F63}, /* 1F6A */
+ {0x1F6C,0x1F64},{0x1F6D,0x1F65}, /* 1F6C */
+ {0x1F6E,0x1F66},{0x1F6F,0x1F67}, /* 1F6E */
+ {0x1FBA,0x1F70},{0x1FBB,0x1F71}, /* 1F70 */
+ {0x1FC8,0x1F72},{0x1FC9,0x1F73}, /* 1F72 */
+ {0x1FCA,0x1F74},{0x1FCB,0x1F75}, /* 1F74 */
+ {0x1FDA,0x1F76},{0x1FDB,0x1F77}, /* 1F76 */
+ {0x1FF8,0x1F78},{0x1FF9,0x1F79}, /* 1F78 */
+ {0x1FEA,0x1F7A},{0x1FEB,0x1F7B}, /* 1F7A */
+ {0x1FFA,0x1F7C},{0x1FFB,0x1F7D}, /* 1F7C */
+ {0x1F7E,0x1F7E},{0x1F7F,0x1F7F}, /* 1F7E */
+ {0x1F88,0x1F80},{0x1F89,0x1F81}, /* 1F80 */
+ {0x1F8A,0x1F82},{0x1F8B,0x1F83}, /* 1F82 */
+ {0x1F8C,0x1F84},{0x1F8D,0x1F85}, /* 1F84 */
+ {0x1F8E,0x1F86},{0x1F8F,0x1F87}, /* 1F86 */
+ {0x1F88,0x1F80},{0x1F89,0x1F81}, /* 1F88 */
+ {0x1F8A,0x1F82},{0x1F8B,0x1F83}, /* 1F8A */
+ {0x1F8C,0x1F84},{0x1F8D,0x1F85}, /* 1F8C */
+ {0x1F8E,0x1F86},{0x1F8F,0x1F87}, /* 1F8E */
+ {0x1F98,0x1F90},{0x1F99,0x1F91}, /* 1F90 */
+ {0x1F9A,0x1F92},{0x1F9B,0x1F93}, /* 1F92 */
+ {0x1F9C,0x1F94},{0x1F9D,0x1F95}, /* 1F94 */
+ {0x1F9E,0x1F96},{0x1F9F,0x1F97}, /* 1F96 */
+ {0x1F98,0x1F90},{0x1F99,0x1F91}, /* 1F98 */
+ {0x1F9A,0x1F92},{0x1F9B,0x1F93}, /* 1F9A */
+ {0x1F9C,0x1F94},{0x1F9D,0x1F95}, /* 1F9C */
+ {0x1F9E,0x1F96},{0x1F9F,0x1F97}, /* 1F9E */
+ {0x1FA8,0x1FA0},{0x1FA9,0x1FA1}, /* 1FA0 */
+ {0x1FAA,0x1FA2},{0x1FAB,0x1FA3}, /* 1FA2 */
+ {0x1FAC,0x1FA4},{0x1FAD,0x1FA5}, /* 1FA4 */
+ {0x1FAE,0x1FA6},{0x1FAF,0x1FA7}, /* 1FA6 */
+ {0x1FA8,0x1FA0},{0x1FA9,0x1FA1}, /* 1FA8 */
+ {0x1FAA,0x1FA2},{0x1FAB,0x1FA3}, /* 1FAA */
+ {0x1FAC,0x1FA4},{0x1FAD,0x1FA5}, /* 1FAC */
+ {0x1FAE,0x1FA6},{0x1FAF,0x1FA7}, /* 1FAE */
+ {0x1FB8,0x1FB0},{0x1FB9,0x1FB1}, /* 1FB0 */
+ {0x1FB2,0x1FB2},{0x1FBC,0x1FB3}, /* 1FB2 */
+ {0x1FB4,0x1FB4},{0x1FB5,0x1FB5}, /* 1FB4 */
+ {0x1FB6,0x1FB6},{0x1FB7,0x1FB7}, /* 1FB6 */
+ {0x1FB8,0x1FB0},{0x1FB9,0x1FB1}, /* 1FB8 */
+ {0x1FBA,0x1F70},{0x1FBB,0x1F71}, /* 1FBA */
+ {0x1FBC,0x1FB3},{0x1FBD,0x1FBD}, /* 1FBC */
+ {0x0399,0x1FBE},{0x1FBF,0x1FBF}, /* 1FBE */
+ {0x1FC0,0x1FC0},{0x1FC1,0x1FC1}, /* 1FC0 */
+ {0x1FC2,0x1FC2},{0x1FCC,0x1FC3}, /* 1FC2 */
+ {0x1FC4,0x1FC4},{0x1FC5,0x1FC5}, /* 1FC4 */
+ {0x1FC6,0x1FC6},{0x1FC7,0x1FC7}, /* 1FC6 */
+ {0x1FC8,0x1F72},{0x1FC9,0x1F73}, /* 1FC8 */
+ {0x1FCA,0x1F74},{0x1FCB,0x1F75}, /* 1FCA */
+ {0x1FCC,0x1FC3},{0x1FCD,0x1FCD}, /* 1FCC */
+ {0x1FCE,0x1FCE},{0x1FCF,0x1FCF}, /* 1FCE */
+ {0x1FD8,0x1FD0},{0x1FD9,0x1FD1}, /* 1FD0 */
+ {0x1FD2,0x1FD2},{0x1FD3,0x1FD3}, /* 1FD2 */
+ {0x1FD4,0x1FD4},{0x1FD5,0x1FD5}, /* 1FD4 */
+ {0x1FD6,0x1FD6},{0x1FD7,0x1FD7}, /* 1FD6 */
+ {0x1FD8,0x1FD0},{0x1FD9,0x1FD1}, /* 1FD8 */
+ {0x1FDA,0x1F76},{0x1FDB,0x1F77}, /* 1FDA */
+ {0x1FDC,0x1FDC},{0x1FDD,0x1FDD}, /* 1FDC */
+ {0x1FDE,0x1FDE},{0x1FDF,0x1FDF}, /* 1FDE */
+ {0x1FE8,0x1FE0},{0x1FE9,0x1FE1}, /* 1FE0 */
+ {0x1FE2,0x1FE2},{0x1FE3,0x1FE3}, /* 1FE2 */
+ {0x1FE4,0x1FE4},{0x1FEC,0x1FE5}, /* 1FE4 */
+ {0x1FE6,0x1FE6},{0x1FE7,0x1FE7}, /* 1FE6 */
+ {0x1FE8,0x1FE0},{0x1FE9,0x1FE1}, /* 1FE8 */
+ {0x1FEA,0x1F7A},{0x1FEB,0x1F7B}, /* 1FEA */
+ {0x1FEC,0x1FE5},{0x1FED,0x1FED}, /* 1FEC */
+ {0x1FEE,0x1FEE},{0x1FEF,0x1FEF}, /* 1FEE */
+ {0x1FF0,0x1FF0},{0x1FF1,0x1FF1}, /* 1FF0 */
+ {0x1FF2,0x1FF2},{0x1FFC,0x1FF3}, /* 1FF2 */
+ {0x1FF4,0x1FF4},{0x1FF5,0x1FF5}, /* 1FF4 */
+ {0x1FF6,0x1FF6},{0x1FF7,0x1FF7}, /* 1FF6 */
+ {0x1FF8,0x1F78},{0x1FF9,0x1F79}, /* 1FF8 */
+ {0x1FFA,0x1F7C},{0x1FFB,0x1F7D}, /* 1FFA */
+ {0x1FFC,0x1FF3},{0x1FFD,0x1FFD}, /* 1FFC */
+ {0x1FFE,0x1FFE},{0x1FFF,0x1FFF} /* 1FFE */
+};
+
+static const MY_CASEFOLD_CHARACTER u300_casefold_page21[256]={
+ {0x2100,0x2100},{0x2101,0x2101}, /* 2100 */
+ {0x2102,0x2102},{0x2103,0x2103}, /* 2102 */
+ {0x2104,0x2104},{0x2105,0x2105}, /* 2104 */
+ {0x2106,0x2106},{0x2107,0x2107}, /* 2106 */
+ {0x2108,0x2108},{0x2109,0x2109}, /* 2108 */
+ {0x210A,0x210A},{0x210B,0x210B}, /* 210A */
+ {0x210C,0x210C},{0x210D,0x210D}, /* 210C */
+ {0x210E,0x210E},{0x210F,0x210F}, /* 210E */
+ {0x2110,0x2110},{0x2111,0x2111}, /* 2110 */
+ {0x2112,0x2112},{0x2113,0x2113}, /* 2112 */
+ {0x2114,0x2114},{0x2115,0x2115}, /* 2114 */
+ {0x2116,0x2116},{0x2117,0x2117}, /* 2116 */
+ {0x2118,0x2118},{0x2119,0x2119}, /* 2118 */
+ {0x211A,0x211A},{0x211B,0x211B}, /* 211A */
+ {0x211C,0x211C},{0x211D,0x211D}, /* 211C */
+ {0x211E,0x211E},{0x211F,0x211F}, /* 211E */
+ {0x2120,0x2120},{0x2121,0x2121}, /* 2120 */
+ {0x2122,0x2122},{0x2123,0x2123}, /* 2122 */
+ {0x2124,0x2124},{0x2125,0x2125}, /* 2124 */
+ {0x2126,0x03C9},{0x2127,0x2127}, /* 2126 */
+ {0x2128,0x2128},{0x2129,0x2129}, /* 2128 */
+ {0x212A,0x006B},{0x212B,0x00E5}, /* 212A */
+ {0x212C,0x212C},{0x212D,0x212D}, /* 212C */
+ {0x212E,0x212E},{0x212F,0x212F}, /* 212E */
+ {0x2130,0x2130},{0x2131,0x2131}, /* 2130 */
+ {0x2132,0x2132},{0x2133,0x2133}, /* 2132 */
+ {0x2134,0x2134},{0x2135,0x2135}, /* 2134 */
+ {0x2136,0x2136},{0x2137,0x2137}, /* 2136 */
+ {0x2138,0x2138},{0x2139,0x2139}, /* 2138 */
+ {0x213A,0x213A},{0x213B,0x213B}, /* 213A */
+ {0x213C,0x213C},{0x213D,0x213D}, /* 213C */
+ {0x213E,0x213E},{0x213F,0x213F}, /* 213E */
+ {0x2140,0x2140},{0x2141,0x2141}, /* 2140 */
+ {0x2142,0x2142},{0x2143,0x2143}, /* 2142 */
+ {0x2144,0x2144},{0x2145,0x2145}, /* 2144 */
+ {0x2146,0x2146},{0x2147,0x2147}, /* 2146 */
+ {0x2148,0x2148},{0x2149,0x2149}, /* 2148 */
+ {0x214A,0x214A},{0x214B,0x214B}, /* 214A */
+ {0x214C,0x214C},{0x214D,0x214D}, /* 214C */
+ {0x214E,0x214E},{0x214F,0x214F}, /* 214E */
+ {0x2150,0x2150},{0x2151,0x2151}, /* 2150 */
+ {0x2152,0x2152},{0x2153,0x2153}, /* 2152 */
+ {0x2154,0x2154},{0x2155,0x2155}, /* 2154 */
+ {0x2156,0x2156},{0x2157,0x2157}, /* 2156 */
+ {0x2158,0x2158},{0x2159,0x2159}, /* 2158 */
+ {0x215A,0x215A},{0x215B,0x215B}, /* 215A */
+ {0x215C,0x215C},{0x215D,0x215D}, /* 215C */
+ {0x215E,0x215E},{0x215F,0x215F}, /* 215E */
+ {0x2160,0x2170},{0x2161,0x2171}, /* 2160 */
+ {0x2162,0x2172},{0x2163,0x2173}, /* 2162 */
+ {0x2164,0x2174},{0x2165,0x2175}, /* 2164 */
+ {0x2166,0x2176},{0x2167,0x2177}, /* 2166 */
+ {0x2168,0x2178},{0x2169,0x2179}, /* 2168 */
+ {0x216A,0x217A},{0x216B,0x217B}, /* 216A */
+ {0x216C,0x217C},{0x216D,0x217D}, /* 216C */
+ {0x216E,0x217E},{0x216F,0x217F}, /* 216E */
+ {0x2160,0x2170},{0x2161,0x2171}, /* 2170 */
+ {0x2162,0x2172},{0x2163,0x2173}, /* 2172 */
+ {0x2164,0x2174},{0x2165,0x2175}, /* 2174 */
+ {0x2166,0x2176},{0x2167,0x2177}, /* 2176 */
+ {0x2168,0x2178},{0x2169,0x2179}, /* 2178 */
+ {0x216A,0x217A},{0x216B,0x217B}, /* 217A */
+ {0x216C,0x217C},{0x216D,0x217D}, /* 217C */
+ {0x216E,0x217E},{0x216F,0x217F}, /* 217E */
+ {0x2180,0x2180},{0x2181,0x2181}, /* 2180 */
+ {0x2182,0x2182},{0x2183,0x2183}, /* 2182 */
+ {0x2184,0x2184},{0x2185,0x2185}, /* 2184 */
+ {0x2186,0x2186},{0x2187,0x2187}, /* 2186 */
+ {0x2188,0x2188},{0x2189,0x2189}, /* 2188 */
+ {0x218A,0x218A},{0x218B,0x218B}, /* 218A */
+ {0x218C,0x218C},{0x218D,0x218D}, /* 218C */
+ {0x218E,0x218E},{0x218F,0x218F}, /* 218E */
+ {0x2190,0x2190},{0x2191,0x2191}, /* 2190 */
+ {0x2192,0x2192},{0x2193,0x2193}, /* 2192 */
+ {0x2194,0x2194},{0x2195,0x2195}, /* 2194 */
+ {0x2196,0x2196},{0x2197,0x2197}, /* 2196 */
+ {0x2198,0x2198},{0x2199,0x2199}, /* 2198 */
+ {0x219A,0x219A},{0x219B,0x219B}, /* 219A */
+ {0x219C,0x219C},{0x219D,0x219D}, /* 219C */
+ {0x219E,0x219E},{0x219F,0x219F}, /* 219E */
+ {0x21A0,0x21A0},{0x21A1,0x21A1}, /* 21A0 */
+ {0x21A2,0x21A2},{0x21A3,0x21A3}, /* 21A2 */
+ {0x21A4,0x21A4},{0x21A5,0x21A5}, /* 21A4 */
+ {0x21A6,0x21A6},{0x21A7,0x21A7}, /* 21A6 */
+ {0x21A8,0x21A8},{0x21A9,0x21A9}, /* 21A8 */
+ {0x21AA,0x21AA},{0x21AB,0x21AB}, /* 21AA */
+ {0x21AC,0x21AC},{0x21AD,0x21AD}, /* 21AC */
+ {0x21AE,0x21AE},{0x21AF,0x21AF}, /* 21AE */
+ {0x21B0,0x21B0},{0x21B1,0x21B1}, /* 21B0 */
+ {0x21B2,0x21B2},{0x21B3,0x21B3}, /* 21B2 */
+ {0x21B4,0x21B4},{0x21B5,0x21B5}, /* 21B4 */
+ {0x21B6,0x21B6},{0x21B7,0x21B7}, /* 21B6 */
+ {0x21B8,0x21B8},{0x21B9,0x21B9}, /* 21B8 */
+ {0x21BA,0x21BA},{0x21BB,0x21BB}, /* 21BA */
+ {0x21BC,0x21BC},{0x21BD,0x21BD}, /* 21BC */
+ {0x21BE,0x21BE},{0x21BF,0x21BF}, /* 21BE */
+ {0x21C0,0x21C0},{0x21C1,0x21C1}, /* 21C0 */
+ {0x21C2,0x21C2},{0x21C3,0x21C3}, /* 21C2 */
+ {0x21C4,0x21C4},{0x21C5,0x21C5}, /* 21C4 */
+ {0x21C6,0x21C6},{0x21C7,0x21C7}, /* 21C6 */
+ {0x21C8,0x21C8},{0x21C9,0x21C9}, /* 21C8 */
+ {0x21CA,0x21CA},{0x21CB,0x21CB}, /* 21CA */
+ {0x21CC,0x21CC},{0x21CD,0x21CD}, /* 21CC */
+ {0x21CE,0x21CE},{0x21CF,0x21CF}, /* 21CE */
+ {0x21D0,0x21D0},{0x21D1,0x21D1}, /* 21D0 */
+ {0x21D2,0x21D2},{0x21D3,0x21D3}, /* 21D2 */
+ {0x21D4,0x21D4},{0x21D5,0x21D5}, /* 21D4 */
+ {0x21D6,0x21D6},{0x21D7,0x21D7}, /* 21D6 */
+ {0x21D8,0x21D8},{0x21D9,0x21D9}, /* 21D8 */
+ {0x21DA,0x21DA},{0x21DB,0x21DB}, /* 21DA */
+ {0x21DC,0x21DC},{0x21DD,0x21DD}, /* 21DC */
+ {0x21DE,0x21DE},{0x21DF,0x21DF}, /* 21DE */
+ {0x21E0,0x21E0},{0x21E1,0x21E1}, /* 21E0 */
+ {0x21E2,0x21E2},{0x21E3,0x21E3}, /* 21E2 */
+ {0x21E4,0x21E4},{0x21E5,0x21E5}, /* 21E4 */
+ {0x21E6,0x21E6},{0x21E7,0x21E7}, /* 21E6 */
+ {0x21E8,0x21E8},{0x21E9,0x21E9}, /* 21E8 */
+ {0x21EA,0x21EA},{0x21EB,0x21EB}, /* 21EA */
+ {0x21EC,0x21EC},{0x21ED,0x21ED}, /* 21EC */
+ {0x21EE,0x21EE},{0x21EF,0x21EF}, /* 21EE */
+ {0x21F0,0x21F0},{0x21F1,0x21F1}, /* 21F0 */
+ {0x21F2,0x21F2},{0x21F3,0x21F3}, /* 21F2 */
+ {0x21F4,0x21F4},{0x21F5,0x21F5}, /* 21F4 */
+ {0x21F6,0x21F6},{0x21F7,0x21F7}, /* 21F6 */
+ {0x21F8,0x21F8},{0x21F9,0x21F9}, /* 21F8 */
+ {0x21FA,0x21FA},{0x21FB,0x21FB}, /* 21FA */
+ {0x21FC,0x21FC},{0x21FD,0x21FD}, /* 21FC */
+ {0x21FE,0x21FE},{0x21FF,0x21FF} /* 21FE */
+};
+
+static const MY_CASEFOLD_CHARACTER u300_casefold_page24[256]={
+ {0x2400,0x2400},{0x2401,0x2401}, /* 2400 */
+ {0x2402,0x2402},{0x2403,0x2403}, /* 2402 */
+ {0x2404,0x2404},{0x2405,0x2405}, /* 2404 */
+ {0x2406,0x2406},{0x2407,0x2407}, /* 2406 */
+ {0x2408,0x2408},{0x2409,0x2409}, /* 2408 */
+ {0x240A,0x240A},{0x240B,0x240B}, /* 240A */
+ {0x240C,0x240C},{0x240D,0x240D}, /* 240C */
+ {0x240E,0x240E},{0x240F,0x240F}, /* 240E */
+ {0x2410,0x2410},{0x2411,0x2411}, /* 2410 */
+ {0x2412,0x2412},{0x2413,0x2413}, /* 2412 */
+ {0x2414,0x2414},{0x2415,0x2415}, /* 2414 */
+ {0x2416,0x2416},{0x2417,0x2417}, /* 2416 */
+ {0x2418,0x2418},{0x2419,0x2419}, /* 2418 */
+ {0x241A,0x241A},{0x241B,0x241B}, /* 241A */
+ {0x241C,0x241C},{0x241D,0x241D}, /* 241C */
+ {0x241E,0x241E},{0x241F,0x241F}, /* 241E */
+ {0x2420,0x2420},{0x2421,0x2421}, /* 2420 */
+ {0x2422,0x2422},{0x2423,0x2423}, /* 2422 */
+ {0x2424,0x2424},{0x2425,0x2425}, /* 2424 */
+ {0x2426,0x2426},{0x2427,0x2427}, /* 2426 */
+ {0x2428,0x2428},{0x2429,0x2429}, /* 2428 */
+ {0x242A,0x242A},{0x242B,0x242B}, /* 242A */
+ {0x242C,0x242C},{0x242D,0x242D}, /* 242C */
+ {0x242E,0x242E},{0x242F,0x242F}, /* 242E */
+ {0x2430,0x2430},{0x2431,0x2431}, /* 2430 */
+ {0x2432,0x2432},{0x2433,0x2433}, /* 2432 */
+ {0x2434,0x2434},{0x2435,0x2435}, /* 2434 */
+ {0x2436,0x2436},{0x2437,0x2437}, /* 2436 */
+ {0x2438,0x2438},{0x2439,0x2439}, /* 2438 */
+ {0x243A,0x243A},{0x243B,0x243B}, /* 243A */
+ {0x243C,0x243C},{0x243D,0x243D}, /* 243C */
+ {0x243E,0x243E},{0x243F,0x243F}, /* 243E */
+ {0x2440,0x2440},{0x2441,0x2441}, /* 2440 */
+ {0x2442,0x2442},{0x2443,0x2443}, /* 2442 */
+ {0x2444,0x2444},{0x2445,0x2445}, /* 2444 */
+ {0x2446,0x2446},{0x2447,0x2447}, /* 2446 */
+ {0x2448,0x2448},{0x2449,0x2449}, /* 2448 */
+ {0x244A,0x244A},{0x244B,0x244B}, /* 244A */
+ {0x244C,0x244C},{0x244D,0x244D}, /* 244C */
+ {0x244E,0x244E},{0x244F,0x244F}, /* 244E */
+ {0x2450,0x2450},{0x2451,0x2451}, /* 2450 */
+ {0x2452,0x2452},{0x2453,0x2453}, /* 2452 */
+ {0x2454,0x2454},{0x2455,0x2455}, /* 2454 */
+ {0x2456,0x2456},{0x2457,0x2457}, /* 2456 */
+ {0x2458,0x2458},{0x2459,0x2459}, /* 2458 */
+ {0x245A,0x245A},{0x245B,0x245B}, /* 245A */
+ {0x245C,0x245C},{0x245D,0x245D}, /* 245C */
+ {0x245E,0x245E},{0x245F,0x245F}, /* 245E */
+ {0x2460,0x2460},{0x2461,0x2461}, /* 2460 */
+ {0x2462,0x2462},{0x2463,0x2463}, /* 2462 */
+ {0x2464,0x2464},{0x2465,0x2465}, /* 2464 */
+ {0x2466,0x2466},{0x2467,0x2467}, /* 2466 */
+ {0x2468,0x2468},{0x2469,0x2469}, /* 2468 */
+ {0x246A,0x246A},{0x246B,0x246B}, /* 246A */
+ {0x246C,0x246C},{0x246D,0x246D}, /* 246C */
+ {0x246E,0x246E},{0x246F,0x246F}, /* 246E */
+ {0x2470,0x2470},{0x2471,0x2471}, /* 2470 */
+ {0x2472,0x2472},{0x2473,0x2473}, /* 2472 */
+ {0x2474,0x2474},{0x2475,0x2475}, /* 2474 */
+ {0x2476,0x2476},{0x2477,0x2477}, /* 2476 */
+ {0x2478,0x2478},{0x2479,0x2479}, /* 2478 */
+ {0x247A,0x247A},{0x247B,0x247B}, /* 247A */
+ {0x247C,0x247C},{0x247D,0x247D}, /* 247C */
+ {0x247E,0x247E},{0x247F,0x247F}, /* 247E */
+ {0x2480,0x2480},{0x2481,0x2481}, /* 2480 */
+ {0x2482,0x2482},{0x2483,0x2483}, /* 2482 */
+ {0x2484,0x2484},{0x2485,0x2485}, /* 2484 */
+ {0x2486,0x2486},{0x2487,0x2487}, /* 2486 */
+ {0x2488,0x2488},{0x2489,0x2489}, /* 2488 */
+ {0x248A,0x248A},{0x248B,0x248B}, /* 248A */
+ {0x248C,0x248C},{0x248D,0x248D}, /* 248C */
+ {0x248E,0x248E},{0x248F,0x248F}, /* 248E */
+ {0x2490,0x2490},{0x2491,0x2491}, /* 2490 */
+ {0x2492,0x2492},{0x2493,0x2493}, /* 2492 */
+ {0x2494,0x2494},{0x2495,0x2495}, /* 2494 */
+ {0x2496,0x2496},{0x2497,0x2497}, /* 2496 */
+ {0x2498,0x2498},{0x2499,0x2499}, /* 2498 */
+ {0x249A,0x249A},{0x249B,0x249B}, /* 249A */
+ {0x249C,0x249C},{0x249D,0x249D}, /* 249C */
+ {0x249E,0x249E},{0x249F,0x249F}, /* 249E */
+ {0x24A0,0x24A0},{0x24A1,0x24A1}, /* 24A0 */
+ {0x24A2,0x24A2},{0x24A3,0x24A3}, /* 24A2 */
+ {0x24A4,0x24A4},{0x24A5,0x24A5}, /* 24A4 */
+ {0x24A6,0x24A6},{0x24A7,0x24A7}, /* 24A6 */
+ {0x24A8,0x24A8},{0x24A9,0x24A9}, /* 24A8 */
+ {0x24AA,0x24AA},{0x24AB,0x24AB}, /* 24AA */
+ {0x24AC,0x24AC},{0x24AD,0x24AD}, /* 24AC */
+ {0x24AE,0x24AE},{0x24AF,0x24AF}, /* 24AE */
+ {0x24B0,0x24B0},{0x24B1,0x24B1}, /* 24B0 */
+ {0x24B2,0x24B2},{0x24B3,0x24B3}, /* 24B2 */
+ {0x24B4,0x24B4},{0x24B5,0x24B5}, /* 24B4 */
+ {0x24B6,0x24D0},{0x24B7,0x24D1}, /* 24B6 */
+ {0x24B8,0x24D2},{0x24B9,0x24D3}, /* 24B8 */
+ {0x24BA,0x24D4},{0x24BB,0x24D5}, /* 24BA */
+ {0x24BC,0x24D6},{0x24BD,0x24D7}, /* 24BC */
+ {0x24BE,0x24D8},{0x24BF,0x24D9}, /* 24BE */
+ {0x24C0,0x24DA},{0x24C1,0x24DB}, /* 24C0 */
+ {0x24C2,0x24DC},{0x24C3,0x24DD}, /* 24C2 */
+ {0x24C4,0x24DE},{0x24C5,0x24DF}, /* 24C4 */
+ {0x24C6,0x24E0},{0x24C7,0x24E1}, /* 24C6 */
+ {0x24C8,0x24E2},{0x24C9,0x24E3}, /* 24C8 */
+ {0x24CA,0x24E4},{0x24CB,0x24E5}, /* 24CA */
+ {0x24CC,0x24E6},{0x24CD,0x24E7}, /* 24CC */
+ {0x24CE,0x24E8},{0x24CF,0x24E9}, /* 24CE */
+ {0x24B6,0x24D0},{0x24B7,0x24D1}, /* 24D0 */
+ {0x24B8,0x24D2},{0x24B9,0x24D3}, /* 24D2 */
+ {0x24BA,0x24D4},{0x24BB,0x24D5}, /* 24D4 */
+ {0x24BC,0x24D6},{0x24BD,0x24D7}, /* 24D6 */
+ {0x24BE,0x24D8},{0x24BF,0x24D9}, /* 24D8 */
+ {0x24C0,0x24DA},{0x24C1,0x24DB}, /* 24DA */
+ {0x24C2,0x24DC},{0x24C3,0x24DD}, /* 24DC */
+ {0x24C4,0x24DE},{0x24C5,0x24DF}, /* 24DE */
+ {0x24C6,0x24E0},{0x24C7,0x24E1}, /* 24E0 */
+ {0x24C8,0x24E2},{0x24C9,0x24E3}, /* 24E2 */
+ {0x24CA,0x24E4},{0x24CB,0x24E5}, /* 24E4 */
+ {0x24CC,0x24E6},{0x24CD,0x24E7}, /* 24E6 */
+ {0x24CE,0x24E8},{0x24CF,0x24E9}, /* 24E8 */
+ {0x24EA,0x24EA},{0x24EB,0x24EB}, /* 24EA */
+ {0x24EC,0x24EC},{0x24ED,0x24ED}, /* 24EC */
+ {0x24EE,0x24EE},{0x24EF,0x24EF}, /* 24EE */
+ {0x24F0,0x24F0},{0x24F1,0x24F1}, /* 24F0 */
+ {0x24F2,0x24F2},{0x24F3,0x24F3}, /* 24F2 */
+ {0x24F4,0x24F4},{0x24F5,0x24F5}, /* 24F4 */
+ {0x24F6,0x24F6},{0x24F7,0x24F7}, /* 24F6 */
+ {0x24F8,0x24F8},{0x24F9,0x24F9}, /* 24F8 */
+ {0x24FA,0x24FA},{0x24FB,0x24FB}, /* 24FA */
+ {0x24FC,0x24FC},{0x24FD,0x24FD}, /* 24FC */
+ {0x24FE,0x24FE},{0x24FF,0x24FF} /* 24FE */
+};
+
+static const MY_CASEFOLD_CHARACTER u300_casefold_pageFF[256]={
+ {0xFF00,0xFF00},{0xFF01,0xFF01}, /* FF00 */
+ {0xFF02,0xFF02},{0xFF03,0xFF03}, /* FF02 */
+ {0xFF04,0xFF04},{0xFF05,0xFF05}, /* FF04 */
+ {0xFF06,0xFF06},{0xFF07,0xFF07}, /* FF06 */
+ {0xFF08,0xFF08},{0xFF09,0xFF09}, /* FF08 */
+ {0xFF0A,0xFF0A},{0xFF0B,0xFF0B}, /* FF0A */
+ {0xFF0C,0xFF0C},{0xFF0D,0xFF0D}, /* FF0C */
+ {0xFF0E,0xFF0E},{0xFF0F,0xFF0F}, /* FF0E */
+ {0xFF10,0xFF10},{0xFF11,0xFF11}, /* FF10 */
+ {0xFF12,0xFF12},{0xFF13,0xFF13}, /* FF12 */
+ {0xFF14,0xFF14},{0xFF15,0xFF15}, /* FF14 */
+ {0xFF16,0xFF16},{0xFF17,0xFF17}, /* FF16 */
+ {0xFF18,0xFF18},{0xFF19,0xFF19}, /* FF18 */
+ {0xFF1A,0xFF1A},{0xFF1B,0xFF1B}, /* FF1A */
+ {0xFF1C,0xFF1C},{0xFF1D,0xFF1D}, /* FF1C */
+ {0xFF1E,0xFF1E},{0xFF1F,0xFF1F}, /* FF1E */
+ {0xFF20,0xFF20},{0xFF21,0xFF41}, /* FF20 */
+ {0xFF22,0xFF42},{0xFF23,0xFF43}, /* FF22 */
+ {0xFF24,0xFF44},{0xFF25,0xFF45}, /* FF24 */
+ {0xFF26,0xFF46},{0xFF27,0xFF47}, /* FF26 */
+ {0xFF28,0xFF48},{0xFF29,0xFF49}, /* FF28 */
+ {0xFF2A,0xFF4A},{0xFF2B,0xFF4B}, /* FF2A */
+ {0xFF2C,0xFF4C},{0xFF2D,0xFF4D}, /* FF2C */
+ {0xFF2E,0xFF4E},{0xFF2F,0xFF4F}, /* FF2E */
+ {0xFF30,0xFF50},{0xFF31,0xFF51}, /* FF30 */
+ {0xFF32,0xFF52},{0xFF33,0xFF53}, /* FF32 */
+ {0xFF34,0xFF54},{0xFF35,0xFF55}, /* FF34 */
+ {0xFF36,0xFF56},{0xFF37,0xFF57}, /* FF36 */
+ {0xFF38,0xFF58},{0xFF39,0xFF59}, /* FF38 */
+ {0xFF3A,0xFF5A},{0xFF3B,0xFF3B}, /* FF3A */
+ {0xFF3C,0xFF3C},{0xFF3D,0xFF3D}, /* FF3C */
+ {0xFF3E,0xFF3E},{0xFF3F,0xFF3F}, /* FF3E */
+ {0xFF40,0xFF40},{0xFF21,0xFF41}, /* FF40 */
+ {0xFF22,0xFF42},{0xFF23,0xFF43}, /* FF42 */
+ {0xFF24,0xFF44},{0xFF25,0xFF45}, /* FF44 */
+ {0xFF26,0xFF46},{0xFF27,0xFF47}, /* FF46 */
+ {0xFF28,0xFF48},{0xFF29,0xFF49}, /* FF48 */
+ {0xFF2A,0xFF4A},{0xFF2B,0xFF4B}, /* FF4A */
+ {0xFF2C,0xFF4C},{0xFF2D,0xFF4D}, /* FF4C */
+ {0xFF2E,0xFF4E},{0xFF2F,0xFF4F}, /* FF4E */
+ {0xFF30,0xFF50},{0xFF31,0xFF51}, /* FF50 */
+ {0xFF32,0xFF52},{0xFF33,0xFF53}, /* FF52 */
+ {0xFF34,0xFF54},{0xFF35,0xFF55}, /* FF54 */
+ {0xFF36,0xFF56},{0xFF37,0xFF57}, /* FF56 */
+ {0xFF38,0xFF58},{0xFF39,0xFF59}, /* FF58 */
+ {0xFF3A,0xFF5A},{0xFF5B,0xFF5B}, /* FF5A */
+ {0xFF5C,0xFF5C},{0xFF5D,0xFF5D}, /* FF5C */
+ {0xFF5E,0xFF5E},{0xFF5F,0xFF5F}, /* FF5E */
+ {0xFF60,0xFF60},{0xFF61,0xFF61}, /* FF60 */
+ {0xFF62,0xFF62},{0xFF63,0xFF63}, /* FF62 */
+ {0xFF64,0xFF64},{0xFF65,0xFF65}, /* FF64 */
+ {0xFF66,0xFF66},{0xFF67,0xFF67}, /* FF66 */
+ {0xFF68,0xFF68},{0xFF69,0xFF69}, /* FF68 */
+ {0xFF6A,0xFF6A},{0xFF6B,0xFF6B}, /* FF6A */
+ {0xFF6C,0xFF6C},{0xFF6D,0xFF6D}, /* FF6C */
+ {0xFF6E,0xFF6E},{0xFF6F,0xFF6F}, /* FF6E */
+ {0xFF70,0xFF70},{0xFF71,0xFF71}, /* FF70 */
+ {0xFF72,0xFF72},{0xFF73,0xFF73}, /* FF72 */
+ {0xFF74,0xFF74},{0xFF75,0xFF75}, /* FF74 */
+ {0xFF76,0xFF76},{0xFF77,0xFF77}, /* FF76 */
+ {0xFF78,0xFF78},{0xFF79,0xFF79}, /* FF78 */
+ {0xFF7A,0xFF7A},{0xFF7B,0xFF7B}, /* FF7A */
+ {0xFF7C,0xFF7C},{0xFF7D,0xFF7D}, /* FF7C */
+ {0xFF7E,0xFF7E},{0xFF7F,0xFF7F}, /* FF7E */
+ {0xFF80,0xFF80},{0xFF81,0xFF81}, /* FF80 */
+ {0xFF82,0xFF82},{0xFF83,0xFF83}, /* FF82 */
+ {0xFF84,0xFF84},{0xFF85,0xFF85}, /* FF84 */
+ {0xFF86,0xFF86},{0xFF87,0xFF87}, /* FF86 */
+ {0xFF88,0xFF88},{0xFF89,0xFF89}, /* FF88 */
+ {0xFF8A,0xFF8A},{0xFF8B,0xFF8B}, /* FF8A */
+ {0xFF8C,0xFF8C},{0xFF8D,0xFF8D}, /* FF8C */
+ {0xFF8E,0xFF8E},{0xFF8F,0xFF8F}, /* FF8E */
+ {0xFF90,0xFF90},{0xFF91,0xFF91}, /* FF90 */
+ {0xFF92,0xFF92},{0xFF93,0xFF93}, /* FF92 */
+ {0xFF94,0xFF94},{0xFF95,0xFF95}, /* FF94 */
+ {0xFF96,0xFF96},{0xFF97,0xFF97}, /* FF96 */
+ {0xFF98,0xFF98},{0xFF99,0xFF99}, /* FF98 */
+ {0xFF9A,0xFF9A},{0xFF9B,0xFF9B}, /* FF9A */
+ {0xFF9C,0xFF9C},{0xFF9D,0xFF9D}, /* FF9C */
+ {0xFF9E,0xFF9E},{0xFF9F,0xFF9F}, /* FF9E */
+ {0xFFA0,0xFFA0},{0xFFA1,0xFFA1}, /* FFA0 */
+ {0xFFA2,0xFFA2},{0xFFA3,0xFFA3}, /* FFA2 */
+ {0xFFA4,0xFFA4},{0xFFA5,0xFFA5}, /* FFA4 */
+ {0xFFA6,0xFFA6},{0xFFA7,0xFFA7}, /* FFA6 */
+ {0xFFA8,0xFFA8},{0xFFA9,0xFFA9}, /* FFA8 */
+ {0xFFAA,0xFFAA},{0xFFAB,0xFFAB}, /* FFAA */
+ {0xFFAC,0xFFAC},{0xFFAD,0xFFAD}, /* FFAC */
+ {0xFFAE,0xFFAE},{0xFFAF,0xFFAF}, /* FFAE */
+ {0xFFB0,0xFFB0},{0xFFB1,0xFFB1}, /* FFB0 */
+ {0xFFB2,0xFFB2},{0xFFB3,0xFFB3}, /* FFB2 */
+ {0xFFB4,0xFFB4},{0xFFB5,0xFFB5}, /* FFB4 */
+ {0xFFB6,0xFFB6},{0xFFB7,0xFFB7}, /* FFB6 */
+ {0xFFB8,0xFFB8},{0xFFB9,0xFFB9}, /* FFB8 */
+ {0xFFBA,0xFFBA},{0xFFBB,0xFFBB}, /* FFBA */
+ {0xFFBC,0xFFBC},{0xFFBD,0xFFBD}, /* FFBC */
+ {0xFFBE,0xFFBE},{0xFFBF,0xFFBF}, /* FFBE */
+ {0xFFC0,0xFFC0},{0xFFC1,0xFFC1}, /* FFC0 */
+ {0xFFC2,0xFFC2},{0xFFC3,0xFFC3}, /* FFC2 */
+ {0xFFC4,0xFFC4},{0xFFC5,0xFFC5}, /* FFC4 */
+ {0xFFC6,0xFFC6},{0xFFC7,0xFFC7}, /* FFC6 */
+ {0xFFC8,0xFFC8},{0xFFC9,0xFFC9}, /* FFC8 */
+ {0xFFCA,0xFFCA},{0xFFCB,0xFFCB}, /* FFCA */
+ {0xFFCC,0xFFCC},{0xFFCD,0xFFCD}, /* FFCC */
+ {0xFFCE,0xFFCE},{0xFFCF,0xFFCF}, /* FFCE */
+ {0xFFD0,0xFFD0},{0xFFD1,0xFFD1}, /* FFD0 */
+ {0xFFD2,0xFFD2},{0xFFD3,0xFFD3}, /* FFD2 */
+ {0xFFD4,0xFFD4},{0xFFD5,0xFFD5}, /* FFD4 */
+ {0xFFD6,0xFFD6},{0xFFD7,0xFFD7}, /* FFD6 */
+ {0xFFD8,0xFFD8},{0xFFD9,0xFFD9}, /* FFD8 */
+ {0xFFDA,0xFFDA},{0xFFDB,0xFFDB}, /* FFDA */
+ {0xFFDC,0xFFDC},{0xFFDD,0xFFDD}, /* FFDC */
+ {0xFFDE,0xFFDE},{0xFFDF,0xFFDF}, /* FFDE */
+ {0xFFE0,0xFFE0},{0xFFE1,0xFFE1}, /* FFE0 */
+ {0xFFE2,0xFFE2},{0xFFE3,0xFFE3}, /* FFE2 */
+ {0xFFE4,0xFFE4},{0xFFE5,0xFFE5}, /* FFE4 */
+ {0xFFE6,0xFFE6},{0xFFE7,0xFFE7}, /* FFE6 */
+ {0xFFE8,0xFFE8},{0xFFE9,0xFFE9}, /* FFE8 */
+ {0xFFEA,0xFFEA},{0xFFEB,0xFFEB}, /* FFEA */
+ {0xFFEC,0xFFEC},{0xFFED,0xFFED}, /* FFEC */
+ {0xFFEE,0xFFEE},{0xFFEF,0xFFEF}, /* FFEE */
+ {0xFFF0,0xFFF0},{0xFFF1,0xFFF1}, /* FFF0 */
+ {0xFFF2,0xFFF2},{0xFFF3,0xFFF3}, /* FFF2 */
+ {0xFFF4,0xFFF4},{0xFFF5,0xFFF5}, /* FFF4 */
+ {0xFFF6,0xFFF6},{0xFFF7,0xFFF7}, /* FFF6 */
+ {0xFFF8,0xFFF8},{0xFFF9,0xFFF9}, /* FFF8 */
+ {0xFFFA,0xFFFA},{0xFFFB,0xFFFB}, /* FFFA */
+ {0xFFFC,0xFFFC},{0xFFFD,0xFFFD}, /* FFFC */
+ {0xFFFE,0xFFFE},{0xFFFF,0xFFFF} /* FFFE */
+};
+
+const MY_CASEFOLD_CHARACTER * my_u300_casefold_index[256]={
+ u300_casefold_page00, u300_casefold_page01, u300_casefold_page02, u300_casefold_page03, u300_casefold_page04, u300_casefold_page05, u300_casefold_page06, u300_casefold_page07,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, u300_casefold_page1E, u300_casefold_page1F,
+ NULL, u300_casefold_page21, NULL, NULL, u300_casefold_page24, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, u300_casefold_pageFF
+};
diff --git a/strings/ctype-unicode300-general_ci.h b/strings/ctype-unicode300-general_ci.h
new file mode 100644
index 00000000000..fd8cd71bf1a
--- /dev/null
+++ b/strings/ctype-unicode300-general_ci.h
@@ -0,0 +1,610 @@
+/* Copyright (c) 2000, 2013, Oracle and/or its affiliates.
+ Copyright (c) 2009, 2023, MariaDB Corporation.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; version 2 of the License.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA
+*/
+
+/*
+ Generated by:
+ ./unidata-dump \
+ --mode=weight_general_ci \
+ --max-char=0xFFFF \
+ UnicodeData-3.0.0.txt
+
+*/
+const uint16 weight_general_ci_page00[256]={
+ 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, /* 0000 */
+ 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, /* 0008 */
+ 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, /* 0010 */
+ 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, /* 0018 */
+ 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, /* 0020 */
+ 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, /* 0028 */
+ 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, /* 0030 */
+ 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, /* 0038 */
+ 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, /* 0040 */
+ 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, /* 0048 */
+ 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, /* 0050 */
+ 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, /* 0058 */
+ 0x0060,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, /* 0060 */
+ 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, /* 0068 */
+ 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, /* 0070 */
+ 0x0058,0x0059,0x005A,0x007B,0x007C,0x007D,0x007E,0x007F, /* 0078 */
+ 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087, /* 0080 */
+ 0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F, /* 0088 */
+ 0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097, /* 0090 */
+ 0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F, /* 0098 */
+ 0x00A0,0x00A1,0x00A2,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7, /* 00A0 */
+ 0x00A8,0x00A9,0x00AA,0x00AB,0x00AC,0x00AD,0x00AE,0x00AF, /* 00A8 */
+ 0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x039C,0x00B6,0x00B7, /* 00B0 */
+ 0x00B8,0x00B9,0x00BA,0x00BB,0x00BC,0x00BD,0x00BE,0x00BF, /* 00B8 */
+ 0x0041,0x0041,0x0041,0x0041,0x0041,0x0041,0x00C6,0x0043, /* 00C0 */
+ 0x0045,0x0045,0x0045,0x0045,0x0049,0x0049,0x0049,0x0049, /* 00C8 */
+ 0x00D0,0x004E,0x004F,0x004F,0x004F,0x004F,0x004F,0x00D7, /* 00D0 */
+ 0x00D8,0x0055,0x0055,0x0055,0x0055,0x0059,0x00DE,0x0053, /* 00D8 */
+ 0x0041,0x0041,0x0041,0x0041,0x0041,0x0041,0x00C6,0x0043, /* 00E0 */
+ 0x0045,0x0045,0x0045,0x0045,0x0049,0x0049,0x0049,0x0049, /* 00E8 */
+ 0x00D0,0x004E,0x004F,0x004F,0x004F,0x004F,0x004F,0x00F7, /* 00F0 */
+ 0x00D8,0x0055,0x0055,0x0055,0x0055,0x0059,0x00DE,0x0059 /* 00F8 */
+};
+
+static const uint16 weight_general_ci_page01[256]={
+ 0x0041,0x0041,0x0041,0x0041,0x0041,0x0041,0x0043,0x0043, /* 0100 */
+ 0x0043,0x0043,0x0043,0x0043,0x0043,0x0043,0x0044,0x0044, /* 0108 */
+ 0x0110,0x0110,0x0045,0x0045,0x0045,0x0045,0x0045,0x0045, /* 0110 */
+ 0x0045,0x0045,0x0045,0x0045,0x0047,0x0047,0x0047,0x0047, /* 0118 */
+ 0x0047,0x0047,0x0047,0x0047,0x0048,0x0048,0x0126,0x0126, /* 0120 */
+ 0x0049,0x0049,0x0049,0x0049,0x0049,0x0049,0x0049,0x0049, /* 0128 */
+ 0x0049,0x0049,0x0132,0x0132,0x004A,0x004A,0x004B,0x004B, /* 0130 */
+ 0x0138,0x004C,0x004C,0x004C,0x004C,0x004C,0x004C,0x013F, /* 0138 */
+ 0x013F,0x0141,0x0141,0x004E,0x004E,0x004E,0x004E,0x004E, /* 0140 */
+ 0x004E,0x0149,0x014A,0x014A,0x004F,0x004F,0x004F,0x004F, /* 0148 */
+ 0x004F,0x004F,0x0152,0x0152,0x0052,0x0052,0x0052,0x0052, /* 0150 */
+ 0x0052,0x0052,0x0053,0x0053,0x0053,0x0053,0x0053,0x0053, /* 0158 */
+ 0x0053,0x0053,0x0054,0x0054,0x0054,0x0054,0x0166,0x0166, /* 0160 */
+ 0x0055,0x0055,0x0055,0x0055,0x0055,0x0055,0x0055,0x0055, /* 0168 */
+ 0x0055,0x0055,0x0055,0x0055,0x0057,0x0057,0x0059,0x0059, /* 0170 */
+ 0x0059,0x005A,0x005A,0x005A,0x005A,0x005A,0x005A,0x0053, /* 0178 */
+ 0x0180,0x0181,0x0182,0x0182,0x0184,0x0184,0x0186,0x0187, /* 0180 */
+ 0x0187,0x0189,0x018A,0x018B,0x018B,0x018D,0x018E,0x018F, /* 0188 */
+ 0x0190,0x0191,0x0191,0x0193,0x0194,0x01F6,0x0196,0x0197, /* 0190 */
+ 0x0198,0x0198,0x019A,0x019B,0x019C,0x019D,0x019E,0x019F, /* 0198 */
+ 0x004F,0x004F,0x01A2,0x01A2,0x01A4,0x01A4,0x01A6,0x01A7, /* 01A0 */
+ 0x01A7,0x01A9,0x01AA,0x01AB,0x01AC,0x01AC,0x01AE,0x0055, /* 01A8 */
+ 0x0055,0x01B1,0x01B2,0x01B3,0x01B3,0x01B5,0x01B5,0x01B7, /* 01B0 */
+ 0x01B8,0x01B8,0x01BA,0x01BB,0x01BC,0x01BC,0x01BE,0x01F7, /* 01B8 */
+ 0x01C0,0x01C1,0x01C2,0x01C3,0x01C4,0x01C4,0x01C4,0x01C7, /* 01C0 */
+ 0x01C7,0x01C7,0x01CA,0x01CA,0x01CA,0x0041,0x0041,0x0049, /* 01C8 */
+ 0x0049,0x004F,0x004F,0x0055,0x0055,0x0055,0x0055,0x0055, /* 01D0 */
+ 0x0055,0x0055,0x0055,0x0055,0x0055,0x018E,0x0041,0x0041, /* 01D8 */
+ 0x0041,0x0041,0x00C6,0x00C6,0x01E4,0x01E4,0x0047,0x0047, /* 01E0 */
+ 0x004B,0x004B,0x004F,0x004F,0x004F,0x004F,0x01B7,0x01B7, /* 01E8 */
+ 0x004A,0x01F1,0x01F1,0x01F1,0x0047,0x0047,0x01F6,0x01F7, /* 01F0 */
+ 0x004E,0x004E,0x0041,0x0041,0x00C6,0x00C6,0x00D8,0x00D8 /* 01F8 */
+};
+
+static const uint16 weight_general_ci_page02[256]={
+ 0x0041,0x0041,0x0041,0x0041,0x0045,0x0045,0x0045,0x0045, /* 0200 */
+ 0x0049,0x0049,0x0049,0x0049,0x004F,0x004F,0x004F,0x004F, /* 0208 */
+ 0x0052,0x0052,0x0052,0x0052,0x0055,0x0055,0x0055,0x0055, /* 0210 */
+ 0x0053,0x0053,0x0054,0x0054,0x021C,0x021C,0x0048,0x0048, /* 0218 */
+ 0x0220,0x0221,0x0222,0x0222,0x0224,0x0224,0x0041,0x0041, /* 0220 */
+ 0x0045,0x0045,0x004F,0x004F,0x004F,0x004F,0x004F,0x004F, /* 0228 */
+ 0x004F,0x004F,0x0059,0x0059,0x0234,0x0235,0x0236,0x0237, /* 0230 */
+ 0x0238,0x0239,0x023A,0x023B,0x023C,0x023D,0x023E,0x023F, /* 0238 */
+ 0x0240,0x0241,0x0242,0x0243,0x0244,0x0245,0x0246,0x0247, /* 0240 */
+ 0x0248,0x0249,0x024A,0x024B,0x024C,0x024D,0x024E,0x024F, /* 0248 */
+ 0x0250,0x0251,0x0252,0x0181,0x0186,0x0255,0x0189,0x018A, /* 0250 */
+ 0x0258,0x018F,0x025A,0x0190,0x025C,0x025D,0x025E,0x025F, /* 0258 */
+ 0x0193,0x0261,0x0262,0x0194,0x0264,0x0265,0x0266,0x0267, /* 0260 */
+ 0x0197,0x0196,0x026A,0x026B,0x026C,0x026D,0x026E,0x019C, /* 0268 */
+ 0x0270,0x0271,0x019D,0x0273,0x0274,0x019F,0x0276,0x0277, /* 0270 */
+ 0x0278,0x0279,0x027A,0x027B,0x027C,0x027D,0x027E,0x027F, /* 0278 */
+ 0x01A6,0x0281,0x0282,0x01A9,0x0284,0x0285,0x0286,0x0287, /* 0280 */
+ 0x01AE,0x0289,0x01B1,0x01B2,0x028C,0x028D,0x028E,0x028F, /* 0288 */
+ 0x0290,0x0291,0x01B7,0x0293,0x0294,0x0295,0x0296,0x0297, /* 0290 */
+ 0x0298,0x0299,0x029A,0x029B,0x029C,0x029D,0x029E,0x029F, /* 0298 */
+ 0x02A0,0x02A1,0x02A2,0x02A3,0x02A4,0x02A5,0x02A6,0x02A7, /* 02A0 */
+ 0x02A8,0x02A9,0x02AA,0x02AB,0x02AC,0x02AD,0x02AE,0x02AF, /* 02A8 */
+ 0x02B0,0x02B1,0x02B2,0x02B3,0x02B4,0x02B5,0x02B6,0x02B7, /* 02B0 */
+ 0x02B8,0x02B9,0x02BA,0x02BB,0x02BC,0x02BD,0x02BE,0x02BF, /* 02B8 */
+ 0x02C0,0x02C1,0x02C2,0x02C3,0x02C4,0x02C5,0x02C6,0x02C7, /* 02C0 */
+ 0x02C8,0x02C9,0x02CA,0x02CB,0x02CC,0x02CD,0x02CE,0x02CF, /* 02C8 */
+ 0x02D0,0x02D1,0x02D2,0x02D3,0x02D4,0x02D5,0x02D6,0x02D7, /* 02D0 */
+ 0x02D8,0x02D9,0x02DA,0x02DB,0x02DC,0x02DD,0x02DE,0x02DF, /* 02D8 */
+ 0x02E0,0x02E1,0x02E2,0x02E3,0x02E4,0x02E5,0x02E6,0x02E7, /* 02E0 */
+ 0x02E8,0x02E9,0x02EA,0x02EB,0x02EC,0x02ED,0x02EE,0x02EF, /* 02E8 */
+ 0x02F0,0x02F1,0x02F2,0x02F3,0x02F4,0x02F5,0x02F6,0x02F7, /* 02F0 */
+ 0x02F8,0x02F9,0x02FA,0x02FB,0x02FC,0x02FD,0x02FE,0x02FF /* 02F8 */
+};
+
+static const uint16 weight_general_ci_page03[256]={
+ 0x0300,0x0301,0x0302,0x0303,0x0304,0x0305,0x0306,0x0307, /* 0300 */
+ 0x0308,0x0309,0x030A,0x030B,0x030C,0x030D,0x030E,0x030F, /* 0308 */
+ 0x0310,0x0311,0x0312,0x0313,0x0314,0x0315,0x0316,0x0317, /* 0310 */
+ 0x0318,0x0319,0x031A,0x031B,0x031C,0x031D,0x031E,0x031F, /* 0318 */
+ 0x0320,0x0321,0x0322,0x0323,0x0324,0x0325,0x0326,0x0327, /* 0320 */
+ 0x0328,0x0329,0x032A,0x032B,0x032C,0x032D,0x032E,0x032F, /* 0328 */
+ 0x0330,0x0331,0x0332,0x0333,0x0334,0x0335,0x0336,0x0337, /* 0330 */
+ 0x0338,0x0339,0x033A,0x033B,0x033C,0x033D,0x033E,0x033F, /* 0338 */
+ 0x0340,0x0341,0x0342,0x0343,0x0344,0x0399,0x0346,0x0347, /* 0340 */
+ 0x0348,0x0349,0x034A,0x034B,0x034C,0x034D,0x034E,0x034F, /* 0348 */
+ 0x0350,0x0351,0x0352,0x0353,0x0354,0x0355,0x0356,0x0357, /* 0350 */
+ 0x0358,0x0359,0x035A,0x035B,0x035C,0x035D,0x035E,0x035F, /* 0358 */
+ 0x0360,0x0361,0x0362,0x0363,0x0364,0x0365,0x0366,0x0367, /* 0360 */
+ 0x0368,0x0369,0x036A,0x036B,0x036C,0x036D,0x036E,0x036F, /* 0368 */
+ 0x0370,0x0371,0x0372,0x0373,0x0374,0x0375,0x0376,0x0377, /* 0370 */
+ 0x0378,0x0379,0x037A,0x037B,0x037C,0x037D,0x037E,0x037F, /* 0378 */
+ 0x0380,0x0381,0x0382,0x0383,0x0384,0x0385,0x0391,0x0387, /* 0380 */
+ 0x0395,0x0397,0x0399,0x038B,0x039F,0x038D,0x03A5,0x03A9, /* 0388 */
+ 0x0399,0x0391,0x0392,0x0393,0x0394,0x0395,0x0396,0x0397, /* 0390 */
+ 0x0398,0x0399,0x039A,0x039B,0x039C,0x039D,0x039E,0x039F, /* 0398 */
+ 0x03A0,0x03A1,0x03A2,0x03A3,0x03A4,0x03A5,0x03A6,0x03A7, /* 03A0 */
+ 0x03A8,0x03A9,0x0399,0x03A5,0x0391,0x0395,0x0397,0x0399, /* 03A8 */
+ 0x03A5,0x0391,0x0392,0x0393,0x0394,0x0395,0x0396,0x0397, /* 03B0 */
+ 0x0398,0x0399,0x039A,0x039B,0x039C,0x039D,0x039E,0x039F, /* 03B8 */
+ 0x03A0,0x03A1,0x03A3,0x03A3,0x03A4,0x03A5,0x03A6,0x03A7, /* 03C0 */
+ 0x03A8,0x03A9,0x0399,0x03A5,0x039F,0x03A5,0x03A9,0x03CF, /* 03C8 */
+ 0x0392,0x0398,0x03D2,0x03D2,0x03D2,0x03A6,0x03A0,0x03D7, /* 03D0 */
+ 0x03D8,0x03D9,0x03DA,0x03DA,0x03DC,0x03DC,0x03DE,0x03DE, /* 03D8 */
+ 0x03E0,0x03E0,0x03E2,0x03E2,0x03E4,0x03E4,0x03E6,0x03E6, /* 03E0 */
+ 0x03E8,0x03E8,0x03EA,0x03EA,0x03EC,0x03EC,0x03EE,0x03EE, /* 03E8 */
+ 0x039A,0x03A1,0x03A3,0x03F3,0x03F4,0x03F5,0x03F6,0x03F7, /* 03F0 */
+ 0x03F8,0x03F9,0x03FA,0x03FB,0x03FC,0x03FD,0x03FE,0x03FF /* 03F8 */
+};
+
+static const uint16 weight_general_ci_page04[256]={
+ 0x0415,0x0415,0x0402,0x0413,0x0404,0x0405,0x0406,0x0406, /* 0400 */
+ 0x0408,0x0409,0x040A,0x040B,0x041A,0x0418,0x0423,0x040F, /* 0408 */
+ 0x0410,0x0411,0x0412,0x0413,0x0414,0x0415,0x0416,0x0417, /* 0410 */
+ 0x0418,0x0419,0x041A,0x041B,0x041C,0x041D,0x041E,0x041F, /* 0418 */
+ 0x0420,0x0421,0x0422,0x0423,0x0424,0x0425,0x0426,0x0427, /* 0420 */
+ 0x0428,0x0429,0x042A,0x042B,0x042C,0x042D,0x042E,0x042F, /* 0428 */
+ 0x0410,0x0411,0x0412,0x0413,0x0414,0x0415,0x0416,0x0417, /* 0430 */
+ 0x0418,0x0419,0x041A,0x041B,0x041C,0x041D,0x041E,0x041F, /* 0438 */
+ 0x0420,0x0421,0x0422,0x0423,0x0424,0x0425,0x0426,0x0427, /* 0440 */
+ 0x0428,0x0429,0x042A,0x042B,0x042C,0x042D,0x042E,0x042F, /* 0448 */
+ 0x0415,0x0415,0x0402,0x0413,0x0404,0x0405,0x0406,0x0406, /* 0450 */
+ 0x0408,0x0409,0x040A,0x040B,0x041A,0x0418,0x0423,0x040F, /* 0458 */
+ 0x0460,0x0460,0x0462,0x0462,0x0464,0x0464,0x0466,0x0466, /* 0460 */
+ 0x0468,0x0468,0x046A,0x046A,0x046C,0x046C,0x046E,0x046E, /* 0468 */
+ 0x0470,0x0470,0x0472,0x0472,0x0474,0x0474,0x0474,0x0474, /* 0470 */
+ 0x0478,0x0478,0x047A,0x047A,0x047C,0x047C,0x047E,0x047E, /* 0478 */
+ 0x0480,0x0480,0x0482,0x0483,0x0484,0x0485,0x0486,0x0487, /* 0480 */
+ 0x0488,0x0489,0x048A,0x048B,0x048C,0x048C,0x048E,0x048E, /* 0488 */
+ 0x0490,0x0490,0x0492,0x0492,0x0494,0x0494,0x0496,0x0496, /* 0490 */
+ 0x0498,0x0498,0x049A,0x049A,0x049C,0x049C,0x049E,0x049E, /* 0498 */
+ 0x04A0,0x04A0,0x04A2,0x04A2,0x04A4,0x04A4,0x04A6,0x04A6, /* 04A0 */
+ 0x04A8,0x04A8,0x04AA,0x04AA,0x04AC,0x04AC,0x04AE,0x04AE, /* 04A8 */
+ 0x04B0,0x04B0,0x04B2,0x04B2,0x04B4,0x04B4,0x04B6,0x04B6, /* 04B0 */
+ 0x04B8,0x04B8,0x04BA,0x04BA,0x04BC,0x04BC,0x04BE,0x04BE, /* 04B8 */
+ 0x04C0,0x0416,0x0416,0x04C3,0x04C3,0x04C5,0x04C6,0x04C7, /* 04C0 */
+ 0x04C7,0x04C9,0x04CA,0x04CB,0x04CB,0x04CD,0x04CE,0x04CF, /* 04C8 */
+ 0x0410,0x0410,0x0410,0x0410,0x04D4,0x04D4,0x0415,0x0415, /* 04D0 */
+ 0x04D8,0x04D8,0x04D8,0x04D8,0x0416,0x0416,0x0417,0x0417, /* 04D8 */
+ 0x04E0,0x04E0,0x0418,0x0418,0x0418,0x0418,0x041E,0x041E, /* 04E0 */
+ 0x04E8,0x04E8,0x04E8,0x04E8,0x042D,0x042D,0x0423,0x0423, /* 04E8 */
+ 0x0423,0x0423,0x0423,0x0423,0x0427,0x0427,0x04F6,0x04F7, /* 04F0 */
+ 0x042B,0x042B,0x04FA,0x04FB,0x04FC,0x04FD,0x04FE,0x04FF /* 04F8 */
+};
+
+static const uint16 weight_general_ci_page05[256]={
+ 0x0500,0x0501,0x0502,0x0503,0x0504,0x0505,0x0506,0x0507, /* 0500 */
+ 0x0508,0x0509,0x050A,0x050B,0x050C,0x050D,0x050E,0x050F, /* 0508 */
+ 0x0510,0x0511,0x0512,0x0513,0x0514,0x0515,0x0516,0x0517, /* 0510 */
+ 0x0518,0x0519,0x051A,0x051B,0x051C,0x051D,0x051E,0x051F, /* 0518 */
+ 0x0520,0x0521,0x0522,0x0523,0x0524,0x0525,0x0526,0x0527, /* 0520 */
+ 0x0528,0x0529,0x052A,0x052B,0x052C,0x052D,0x052E,0x052F, /* 0528 */
+ 0x0530,0x0531,0x0532,0x0533,0x0534,0x0535,0x0536,0x0537, /* 0530 */
+ 0x0538,0x0539,0x053A,0x053B,0x053C,0x053D,0x053E,0x053F, /* 0538 */
+ 0x0540,0x0541,0x0542,0x0543,0x0544,0x0545,0x0546,0x0547, /* 0540 */
+ 0x0548,0x0549,0x054A,0x054B,0x054C,0x054D,0x054E,0x054F, /* 0548 */
+ 0x0550,0x0551,0x0552,0x0553,0x0554,0x0555,0x0556,0x0557, /* 0550 */
+ 0x0558,0x0559,0x055A,0x055B,0x055C,0x055D,0x055E,0x055F, /* 0558 */
+ 0x0560,0x0531,0x0532,0x0533,0x0534,0x0535,0x0536,0x0537, /* 0560 */
+ 0x0538,0x0539,0x053A,0x053B,0x053C,0x053D,0x053E,0x053F, /* 0568 */
+ 0x0540,0x0541,0x0542,0x0543,0x0544,0x0545,0x0546,0x0547, /* 0570 */
+ 0x0548,0x0549,0x054A,0x054B,0x054C,0x054D,0x054E,0x054F, /* 0578 */
+ 0x0550,0x0551,0x0552,0x0553,0x0554,0x0555,0x0556,0x0587, /* 0580 */
+ 0x0588,0x0589,0x058A,0x058B,0x058C,0x058D,0x058E,0x058F, /* 0588 */
+ 0x0590,0x0591,0x0592,0x0593,0x0594,0x0595,0x0596,0x0597, /* 0590 */
+ 0x0598,0x0599,0x059A,0x059B,0x059C,0x059D,0x059E,0x059F, /* 0598 */
+ 0x05A0,0x05A1,0x05A2,0x05A3,0x05A4,0x05A5,0x05A6,0x05A7, /* 05A0 */
+ 0x05A8,0x05A9,0x05AA,0x05AB,0x05AC,0x05AD,0x05AE,0x05AF, /* 05A8 */
+ 0x05B0,0x05B1,0x05B2,0x05B3,0x05B4,0x05B5,0x05B6,0x05B7, /* 05B0 */
+ 0x05B8,0x05B9,0x05BA,0x05BB,0x05BC,0x05BD,0x05BE,0x05BF, /* 05B8 */
+ 0x05C0,0x05C1,0x05C2,0x05C3,0x05C4,0x05C5,0x05C6,0x05C7, /* 05C0 */
+ 0x05C8,0x05C9,0x05CA,0x05CB,0x05CC,0x05CD,0x05CE,0x05CF, /* 05C8 */
+ 0x05D0,0x05D1,0x05D2,0x05D3,0x05D4,0x05D5,0x05D6,0x05D7, /* 05D0 */
+ 0x05D8,0x05D9,0x05DA,0x05DB,0x05DC,0x05DD,0x05DE,0x05DF, /* 05D8 */
+ 0x05E0,0x05E1,0x05E2,0x05E3,0x05E4,0x05E5,0x05E6,0x05E7, /* 05E0 */
+ 0x05E8,0x05E9,0x05EA,0x05EB,0x05EC,0x05ED,0x05EE,0x05EF, /* 05E8 */
+ 0x05F0,0x05F1,0x05F2,0x05F3,0x05F4,0x05F5,0x05F6,0x05F7, /* 05F0 */
+ 0x05F8,0x05F9,0x05FA,0x05FB,0x05FC,0x05FD,0x05FE,0x05FF /* 05F8 */
+};
+
+static const uint16 weight_general_ci_page06[256]={ /* This page is dummy */
+ 0x0600,0x0601,0x0602,0x0603,0x0604,0x0605,0x0606,0x0607, /* 0600 */
+ 0x0608,0x0609,0x060A,0x060B,0x060C,0x060D,0x060E,0x060F, /* 0608 */
+ 0x0610,0x0611,0x0612,0x0613,0x0614,0x0615,0x0616,0x0617, /* 0610 */
+ 0x0618,0x0619,0x061A,0x061B,0x061C,0x061D,0x061E,0x061F, /* 0618 */
+ 0x0620,0x0621,0x0622,0x0623,0x0624,0x0625,0x0626,0x0627, /* 0620 */
+ 0x0628,0x0629,0x062A,0x062B,0x062C,0x062D,0x062E,0x062F, /* 0628 */
+ 0x0630,0x0631,0x0632,0x0633,0x0634,0x0635,0x0636,0x0637, /* 0630 */
+ 0x0638,0x0639,0x063A,0x063B,0x063C,0x063D,0x063E,0x063F, /* 0638 */
+ 0x0640,0x0641,0x0642,0x0643,0x0644,0x0645,0x0646,0x0647, /* 0640 */
+ 0x0648,0x0649,0x064A,0x064B,0x064C,0x064D,0x064E,0x064F, /* 0648 */
+ 0x0650,0x0651,0x0652,0x0653,0x0654,0x0655,0x0656,0x0657, /* 0650 */
+ 0x0658,0x0659,0x065A,0x065B,0x065C,0x065D,0x065E,0x065F, /* 0658 */
+ 0x0660,0x0661,0x0662,0x0663,0x0664,0x0665,0x0666,0x0667, /* 0660 */
+ 0x0668,0x0669,0x066A,0x066B,0x066C,0x066D,0x066E,0x066F, /* 0668 */
+ 0x0670,0x0671,0x0672,0x0673,0x0674,0x0675,0x0676,0x0677, /* 0670 */
+ 0x0678,0x0679,0x067A,0x067B,0x067C,0x067D,0x067E,0x067F, /* 0678 */
+ 0x0680,0x0681,0x0682,0x0683,0x0684,0x0685,0x0686,0x0687, /* 0680 */
+ 0x0688,0x0689,0x068A,0x068B,0x068C,0x068D,0x068E,0x068F, /* 0688 */
+ 0x0690,0x0691,0x0692,0x0693,0x0694,0x0695,0x0696,0x0697, /* 0690 */
+ 0x0698,0x0699,0x069A,0x069B,0x069C,0x069D,0x069E,0x069F, /* 0698 */
+ 0x06A0,0x06A1,0x06A2,0x06A3,0x06A4,0x06A5,0x06A6,0x06A7, /* 06A0 */
+ 0x06A8,0x06A9,0x06AA,0x06AB,0x06AC,0x06AD,0x06AE,0x06AF, /* 06A8 */
+ 0x06B0,0x06B1,0x06B2,0x06B3,0x06B4,0x06B5,0x06B6,0x06B7, /* 06B0 */
+ 0x06B8,0x06B9,0x06BA,0x06BB,0x06BC,0x06BD,0x06BE,0x06BF, /* 06B8 */
+ 0x06C0,0x06C1,0x06C2,0x06C3,0x06C4,0x06C5,0x06C6,0x06C7, /* 06C0 */
+ 0x06C8,0x06C9,0x06CA,0x06CB,0x06CC,0x06CD,0x06CE,0x06CF, /* 06C8 */
+ 0x06D0,0x06D1,0x06D2,0x06D3,0x06D4,0x06D5,0x06D6,0x06D7, /* 06D0 */
+ 0x06D8,0x06D9,0x06DA,0x06DB,0x06DC,0x06DD,0x06DE,0x06DF, /* 06D8 */
+ 0x06E0,0x06E1,0x06E2,0x06E3,0x06E4,0x06E5,0x06E6,0x06E7, /* 06E0 */
+ 0x06E8,0x06E9,0x06EA,0x06EB,0x06EC,0x06ED,0x06EE,0x06EF, /* 06E8 */
+ 0x06F0,0x06F1,0x06F2,0x06F3,0x06F4,0x06F5,0x06F6,0x06F7, /* 06F0 */
+ 0x06F8,0x06F9,0x06FA,0x06FB,0x06FC,0x06FD,0x06FE,0x06FF /* 06F8 */
+};
+
+static const uint16 weight_general_ci_page07[256]={ /* This page is dummy */
+ 0x0700,0x0701,0x0702,0x0703,0x0704,0x0705,0x0706,0x0707, /* 0700 */
+ 0x0708,0x0709,0x070A,0x070B,0x070C,0x070D,0x070E,0x070F, /* 0708 */
+ 0x0710,0x0711,0x0712,0x0713,0x0714,0x0715,0x0716,0x0717, /* 0710 */
+ 0x0718,0x0719,0x071A,0x071B,0x071C,0x071D,0x071E,0x071F, /* 0718 */
+ 0x0720,0x0721,0x0722,0x0723,0x0724,0x0725,0x0726,0x0727, /* 0720 */
+ 0x0728,0x0729,0x072A,0x072B,0x072C,0x072D,0x072E,0x072F, /* 0728 */
+ 0x0730,0x0731,0x0732,0x0733,0x0734,0x0735,0x0736,0x0737, /* 0730 */
+ 0x0738,0x0739,0x073A,0x073B,0x073C,0x073D,0x073E,0x073F, /* 0738 */
+ 0x0740,0x0741,0x0742,0x0743,0x0744,0x0745,0x0746,0x0747, /* 0740 */
+ 0x0748,0x0749,0x074A,0x074B,0x074C,0x074D,0x074E,0x074F, /* 0748 */
+ 0x0750,0x0751,0x0752,0x0753,0x0754,0x0755,0x0756,0x0757, /* 0750 */
+ 0x0758,0x0759,0x075A,0x075B,0x075C,0x075D,0x075E,0x075F, /* 0758 */
+ 0x0760,0x0761,0x0762,0x0763,0x0764,0x0765,0x0766,0x0767, /* 0760 */
+ 0x0768,0x0769,0x076A,0x076B,0x076C,0x076D,0x076E,0x076F, /* 0768 */
+ 0x0770,0x0771,0x0772,0x0773,0x0774,0x0775,0x0776,0x0777, /* 0770 */
+ 0x0778,0x0779,0x077A,0x077B,0x077C,0x077D,0x077E,0x077F, /* 0778 */
+ 0x0780,0x0781,0x0782,0x0783,0x0784,0x0785,0x0786,0x0787, /* 0780 */
+ 0x0788,0x0789,0x078A,0x078B,0x078C,0x078D,0x078E,0x078F, /* 0788 */
+ 0x0790,0x0791,0x0792,0x0793,0x0794,0x0795,0x0796,0x0797, /* 0790 */
+ 0x0798,0x0799,0x079A,0x079B,0x079C,0x079D,0x079E,0x079F, /* 0798 */
+ 0x07A0,0x07A1,0x07A2,0x07A3,0x07A4,0x07A5,0x07A6,0x07A7, /* 07A0 */
+ 0x07A8,0x07A9,0x07AA,0x07AB,0x07AC,0x07AD,0x07AE,0x07AF, /* 07A8 */
+ 0x07B0,0x07B1,0x07B2,0x07B3,0x07B4,0x07B5,0x07B6,0x07B7, /* 07B0 */
+ 0x07B8,0x07B9,0x07BA,0x07BB,0x07BC,0x07BD,0x07BE,0x07BF, /* 07B8 */
+ 0x07C0,0x07C1,0x07C2,0x07C3,0x07C4,0x07C5,0x07C6,0x07C7, /* 07C0 */
+ 0x07C8,0x07C9,0x07CA,0x07CB,0x07CC,0x07CD,0x07CE,0x07CF, /* 07C8 */
+ 0x07D0,0x07D1,0x07D2,0x07D3,0x07D4,0x07D5,0x07D6,0x07D7, /* 07D0 */
+ 0x07D8,0x07D9,0x07DA,0x07DB,0x07DC,0x07DD,0x07DE,0x07DF, /* 07D8 */
+ 0x07E0,0x07E1,0x07E2,0x07E3,0x07E4,0x07E5,0x07E6,0x07E7, /* 07E0 */
+ 0x07E8,0x07E9,0x07EA,0x07EB,0x07EC,0x07ED,0x07EE,0x07EF, /* 07E8 */
+ 0x07F0,0x07F1,0x07F2,0x07F3,0x07F4,0x07F5,0x07F6,0x07F7, /* 07F0 */
+ 0x07F8,0x07F9,0x07FA,0x07FB,0x07FC,0x07FD,0x07FE,0x07FF /* 07F8 */
+};
+
+static const uint16 weight_general_ci_page1E[256]={
+ 0x0041,0x0041,0x0042,0x0042,0x0042,0x0042,0x0042,0x0042, /* 1E00 */
+ 0x0043,0x0043,0x0044,0x0044,0x0044,0x0044,0x0044,0x0044, /* 1E08 */
+ 0x0044,0x0044,0x0044,0x0044,0x0045,0x0045,0x0045,0x0045, /* 1E10 */
+ 0x0045,0x0045,0x0045,0x0045,0x0045,0x0045,0x0046,0x0046, /* 1E18 */
+ 0x0047,0x0047,0x0048,0x0048,0x0048,0x0048,0x0048,0x0048, /* 1E20 */
+ 0x0048,0x0048,0x0048,0x0048,0x0049,0x0049,0x0049,0x0049, /* 1E28 */
+ 0x004B,0x004B,0x004B,0x004B,0x004B,0x004B,0x004C,0x004C, /* 1E30 */
+ 0x004C,0x004C,0x004C,0x004C,0x004C,0x004C,0x004D,0x004D, /* 1E38 */
+ 0x004D,0x004D,0x004D,0x004D,0x004E,0x004E,0x004E,0x004E, /* 1E40 */
+ 0x004E,0x004E,0x004E,0x004E,0x004F,0x004F,0x004F,0x004F, /* 1E48 */
+ 0x004F,0x004F,0x004F,0x004F,0x0050,0x0050,0x0050,0x0050, /* 1E50 */
+ 0x0052,0x0052,0x0052,0x0052,0x0052,0x0052,0x0052,0x0052, /* 1E58 */
+ 0x0053,0x0053,0x0053,0x0053,0x0053,0x0053,0x0053,0x0053, /* 1E60 */
+ 0x0053,0x0053,0x0054,0x0054,0x0054,0x0054,0x0054,0x0054, /* 1E68 */
+ 0x0054,0x0054,0x0055,0x0055,0x0055,0x0055,0x0055,0x0055, /* 1E70 */
+ 0x0055,0x0055,0x0055,0x0055,0x0056,0x0056,0x0056,0x0056, /* 1E78 */
+ 0x0057,0x0057,0x0057,0x0057,0x0057,0x0057,0x0057,0x0057, /* 1E80 */
+ 0x0057,0x0057,0x0058,0x0058,0x0058,0x0058,0x0059,0x0059, /* 1E88 */
+ 0x005A,0x005A,0x005A,0x005A,0x005A,0x005A,0x0048,0x0054, /* 1E90 */
+ 0x0057,0x0059,0x1E9A,0x0053,0x1E9C,0x1E9D,0x1E9E,0x1E9F, /* 1E98 */
+ 0x0041,0x0041,0x0041,0x0041,0x0041,0x0041,0x0041,0x0041, /* 1EA0 */
+ 0x0041,0x0041,0x0041,0x0041,0x0041,0x0041,0x0041,0x0041, /* 1EA8 */
+ 0x0041,0x0041,0x0041,0x0041,0x0041,0x0041,0x0041,0x0041, /* 1EB0 */
+ 0x0045,0x0045,0x0045,0x0045,0x0045,0x0045,0x0045,0x0045, /* 1EB8 */
+ 0x0045,0x0045,0x0045,0x0045,0x0045,0x0045,0x0045,0x0045, /* 1EC0 */
+ 0x0049,0x0049,0x0049,0x0049,0x004F,0x004F,0x004F,0x004F, /* 1EC8 */
+ 0x004F,0x004F,0x004F,0x004F,0x004F,0x004F,0x004F,0x004F, /* 1ED0 */
+ 0x004F,0x004F,0x004F,0x004F,0x004F,0x004F,0x004F,0x004F, /* 1ED8 */
+ 0x004F,0x004F,0x004F,0x004F,0x0055,0x0055,0x0055,0x0055, /* 1EE0 */
+ 0x0055,0x0055,0x0055,0x0055,0x0055,0x0055,0x0055,0x0055, /* 1EE8 */
+ 0x0055,0x0055,0x0059,0x0059,0x0059,0x0059,0x0059,0x0059, /* 1EF0 */
+ 0x0059,0x0059,0x1EFA,0x1EFB,0x1EFC,0x1EFD,0x1EFE,0x1EFF /* 1EF8 */
+};
+
+static const uint16 weight_general_ci_page1F[256]={
+ 0x0391,0x0391,0x0391,0x0391,0x0391,0x0391,0x0391,0x0391, /* 1F00 */
+ 0x0391,0x0391,0x0391,0x0391,0x0391,0x0391,0x0391,0x0391, /* 1F08 */
+ 0x0395,0x0395,0x0395,0x0395,0x0395,0x0395,0x1F16,0x1F17, /* 1F10 */
+ 0x0395,0x0395,0x0395,0x0395,0x0395,0x0395,0x1F1E,0x1F1F, /* 1F18 */
+ 0x0397,0x0397,0x0397,0x0397,0x0397,0x0397,0x0397,0x0397, /* 1F20 */
+ 0x0397,0x0397,0x0397,0x0397,0x0397,0x0397,0x0397,0x0397, /* 1F28 */
+ 0x0399,0x0399,0x0399,0x0399,0x0399,0x0399,0x0399,0x0399, /* 1F30 */
+ 0x0399,0x0399,0x0399,0x0399,0x0399,0x0399,0x0399,0x0399, /* 1F38 */
+ 0x039F,0x039F,0x039F,0x039F,0x039F,0x039F,0x1F46,0x1F47, /* 1F40 */
+ 0x039F,0x039F,0x039F,0x039F,0x039F,0x039F,0x1F4E,0x1F4F, /* 1F48 */
+ 0x03A5,0x03A5,0x03A5,0x03A5,0x03A5,0x03A5,0x03A5,0x03A5, /* 1F50 */
+ 0x1F58,0x03A5,0x1F5A,0x03A5,0x1F5C,0x03A5,0x1F5E,0x03A5, /* 1F58 */
+ 0x03A9,0x03A9,0x03A9,0x03A9,0x03A9,0x03A9,0x03A9,0x03A9, /* 1F60 */
+ 0x03A9,0x03A9,0x03A9,0x03A9,0x03A9,0x03A9,0x03A9,0x03A9, /* 1F68 */
+ 0x0391,0x1FBB,0x0395,0x1FC9,0x0397,0x1FCB,0x0399,0x1FDB, /* 1F70 */
+ 0x039F,0x1FF9,0x03A5,0x1FEB,0x03A9,0x1FFB,0x1F7E,0x1F7F, /* 1F78 */
+ 0x0391,0x0391,0x0391,0x0391,0x0391,0x0391,0x0391,0x0391, /* 1F80 */
+ 0x0391,0x0391,0x0391,0x0391,0x0391,0x0391,0x0391,0x0391, /* 1F88 */
+ 0x0397,0x0397,0x0397,0x0397,0x0397,0x0397,0x0397,0x0397, /* 1F90 */
+ 0x0397,0x0397,0x0397,0x0397,0x0397,0x0397,0x0397,0x0397, /* 1F98 */
+ 0x03A9,0x03A9,0x03A9,0x03A9,0x03A9,0x03A9,0x03A9,0x03A9, /* 1FA0 */
+ 0x03A9,0x03A9,0x03A9,0x03A9,0x03A9,0x03A9,0x03A9,0x03A9, /* 1FA8 */
+ 0x0391,0x0391,0x0391,0x0391,0x0391,0x1FB5,0x0391,0x0391, /* 1FB0 */
+ 0x0391,0x0391,0x0391,0x1FBB,0x0391,0x1FBD,0x0399,0x1FBF, /* 1FB8 */
+ 0x1FC0,0x1FC1,0x0397,0x0397,0x0397,0x1FC5,0x0397,0x0397, /* 1FC0 */
+ 0x0395,0x1FC9,0x0397,0x1FCB,0x0397,0x1FCD,0x1FCE,0x1FCF, /* 1FC8 */
+ 0x0399,0x0399,0x0399,0x1FD3,0x1FD4,0x1FD5,0x0399,0x0399, /* 1FD0 */
+ 0x0399,0x0399,0x0399,0x1FDB,0x1FDC,0x1FDD,0x1FDE,0x1FDF, /* 1FD8 */
+ 0x03A5,0x03A5,0x03A5,0x1FE3,0x03A1,0x03A1,0x03A5,0x03A5, /* 1FE0 */
+ 0x03A5,0x03A5,0x03A5,0x1FEB,0x03A1,0x1FED,0x1FEE,0x1FEF, /* 1FE8 */
+ 0x1FF0,0x1FF1,0x03A9,0x03A9,0x03A9,0x1FF5,0x03A9,0x03A9, /* 1FF0 */
+ 0x039F,0x1FF9,0x03A9,0x1FFB,0x03A9,0x1FFD,0x1FFE,0x1FFF /* 1FF8 */
+};
+
+static const uint16 weight_general_ci_page21[256]={
+ 0x2100,0x2101,0x2102,0x2103,0x2104,0x2105,0x2106,0x2107, /* 2100 */
+ 0x2108,0x2109,0x210A,0x210B,0x210C,0x210D,0x210E,0x210F, /* 2108 */
+ 0x2110,0x2111,0x2112,0x2113,0x2114,0x2115,0x2116,0x2117, /* 2110 */
+ 0x2118,0x2119,0x211A,0x211B,0x211C,0x211D,0x211E,0x211F, /* 2118 */
+ 0x2120,0x2121,0x2122,0x2123,0x2124,0x2125,0x2126,0x2127, /* 2120 */
+ 0x2128,0x2129,0x212A,0x212B,0x212C,0x212D,0x212E,0x212F, /* 2128 */
+ 0x2130,0x2131,0x2132,0x2133,0x2134,0x2135,0x2136,0x2137, /* 2130 */
+ 0x2138,0x2139,0x213A,0x213B,0x213C,0x213D,0x213E,0x213F, /* 2138 */
+ 0x2140,0x2141,0x2142,0x2143,0x2144,0x2145,0x2146,0x2147, /* 2140 */
+ 0x2148,0x2149,0x214A,0x214B,0x214C,0x214D,0x214E,0x214F, /* 2148 */
+ 0x2150,0x2151,0x2152,0x2153,0x2154,0x2155,0x2156,0x2157, /* 2150 */
+ 0x2158,0x2159,0x215A,0x215B,0x215C,0x215D,0x215E,0x215F, /* 2158 */
+ 0x2160,0x2161,0x2162,0x2163,0x2164,0x2165,0x2166,0x2167, /* 2160 */
+ 0x2168,0x2169,0x216A,0x216B,0x216C,0x216D,0x216E,0x216F, /* 2168 */
+ 0x2160,0x2161,0x2162,0x2163,0x2164,0x2165,0x2166,0x2167, /* 2170 */
+ 0x2168,0x2169,0x216A,0x216B,0x216C,0x216D,0x216E,0x216F, /* 2178 */
+ 0x2180,0x2181,0x2182,0x2183,0x2184,0x2185,0x2186,0x2187, /* 2180 */
+ 0x2188,0x2189,0x218A,0x218B,0x218C,0x218D,0x218E,0x218F, /* 2188 */
+ 0x2190,0x2191,0x2192,0x2193,0x2194,0x2195,0x2196,0x2197, /* 2190 */
+ 0x2198,0x2199,0x219A,0x219B,0x219C,0x219D,0x219E,0x219F, /* 2198 */
+ 0x21A0,0x21A1,0x21A2,0x21A3,0x21A4,0x21A5,0x21A6,0x21A7, /* 21A0 */
+ 0x21A8,0x21A9,0x21AA,0x21AB,0x21AC,0x21AD,0x21AE,0x21AF, /* 21A8 */
+ 0x21B0,0x21B1,0x21B2,0x21B3,0x21B4,0x21B5,0x21B6,0x21B7, /* 21B0 */
+ 0x21B8,0x21B9,0x21BA,0x21BB,0x21BC,0x21BD,0x21BE,0x21BF, /* 21B8 */
+ 0x21C0,0x21C1,0x21C2,0x21C3,0x21C4,0x21C5,0x21C6,0x21C7, /* 21C0 */
+ 0x21C8,0x21C9,0x21CA,0x21CB,0x21CC,0x21CD,0x21CE,0x21CF, /* 21C8 */
+ 0x21D0,0x21D1,0x21D2,0x21D3,0x21D4,0x21D5,0x21D6,0x21D7, /* 21D0 */
+ 0x21D8,0x21D9,0x21DA,0x21DB,0x21DC,0x21DD,0x21DE,0x21DF, /* 21D8 */
+ 0x21E0,0x21E1,0x21E2,0x21E3,0x21E4,0x21E5,0x21E6,0x21E7, /* 21E0 */
+ 0x21E8,0x21E9,0x21EA,0x21EB,0x21EC,0x21ED,0x21EE,0x21EF, /* 21E8 */
+ 0x21F0,0x21F1,0x21F2,0x21F3,0x21F4,0x21F5,0x21F6,0x21F7, /* 21F0 */
+ 0x21F8,0x21F9,0x21FA,0x21FB,0x21FC,0x21FD,0x21FE,0x21FF /* 21F8 */
+};
+
+static const uint16 weight_general_ci_page24[256]={
+ 0x2400,0x2401,0x2402,0x2403,0x2404,0x2405,0x2406,0x2407, /* 2400 */
+ 0x2408,0x2409,0x240A,0x240B,0x240C,0x240D,0x240E,0x240F, /* 2408 */
+ 0x2410,0x2411,0x2412,0x2413,0x2414,0x2415,0x2416,0x2417, /* 2410 */
+ 0x2418,0x2419,0x241A,0x241B,0x241C,0x241D,0x241E,0x241F, /* 2418 */
+ 0x2420,0x2421,0x2422,0x2423,0x2424,0x2425,0x2426,0x2427, /* 2420 */
+ 0x2428,0x2429,0x242A,0x242B,0x242C,0x242D,0x242E,0x242F, /* 2428 */
+ 0x2430,0x2431,0x2432,0x2433,0x2434,0x2435,0x2436,0x2437, /* 2430 */
+ 0x2438,0x2439,0x243A,0x243B,0x243C,0x243D,0x243E,0x243F, /* 2438 */
+ 0x2440,0x2441,0x2442,0x2443,0x2444,0x2445,0x2446,0x2447, /* 2440 */
+ 0x2448,0x2449,0x244A,0x244B,0x244C,0x244D,0x244E,0x244F, /* 2448 */
+ 0x2450,0x2451,0x2452,0x2453,0x2454,0x2455,0x2456,0x2457, /* 2450 */
+ 0x2458,0x2459,0x245A,0x245B,0x245C,0x245D,0x245E,0x245F, /* 2458 */
+ 0x2460,0x2461,0x2462,0x2463,0x2464,0x2465,0x2466,0x2467, /* 2460 */
+ 0x2468,0x2469,0x246A,0x246B,0x246C,0x246D,0x246E,0x246F, /* 2468 */
+ 0x2470,0x2471,0x2472,0x2473,0x2474,0x2475,0x2476,0x2477, /* 2470 */
+ 0x2478,0x2479,0x247A,0x247B,0x247C,0x247D,0x247E,0x247F, /* 2478 */
+ 0x2480,0x2481,0x2482,0x2483,0x2484,0x2485,0x2486,0x2487, /* 2480 */
+ 0x2488,0x2489,0x248A,0x248B,0x248C,0x248D,0x248E,0x248F, /* 2488 */
+ 0x2490,0x2491,0x2492,0x2493,0x2494,0x2495,0x2496,0x2497, /* 2490 */
+ 0x2498,0x2499,0x249A,0x249B,0x249C,0x249D,0x249E,0x249F, /* 2498 */
+ 0x24A0,0x24A1,0x24A2,0x24A3,0x24A4,0x24A5,0x24A6,0x24A7, /* 24A0 */
+ 0x24A8,0x24A9,0x24AA,0x24AB,0x24AC,0x24AD,0x24AE,0x24AF, /* 24A8 */
+ 0x24B0,0x24B1,0x24B2,0x24B3,0x24B4,0x24B5,0x24B6,0x24B7, /* 24B0 */
+ 0x24B8,0x24B9,0x24BA,0x24BB,0x24BC,0x24BD,0x24BE,0x24BF, /* 24B8 */
+ 0x24C0,0x24C1,0x24C2,0x24C3,0x24C4,0x24C5,0x24C6,0x24C7, /* 24C0 */
+ 0x24C8,0x24C9,0x24CA,0x24CB,0x24CC,0x24CD,0x24CE,0x24CF, /* 24C8 */
+ 0x24B6,0x24B7,0x24B8,0x24B9,0x24BA,0x24BB,0x24BC,0x24BD, /* 24D0 */
+ 0x24BE,0x24BF,0x24C0,0x24C1,0x24C2,0x24C3,0x24C4,0x24C5, /* 24D8 */
+ 0x24C6,0x24C7,0x24C8,0x24C9,0x24CA,0x24CB,0x24CC,0x24CD, /* 24E0 */
+ 0x24CE,0x24CF,0x24EA,0x24EB,0x24EC,0x24ED,0x24EE,0x24EF, /* 24E8 */
+ 0x24F0,0x24F1,0x24F2,0x24F3,0x24F4,0x24F5,0x24F6,0x24F7, /* 24F0 */
+ 0x24F8,0x24F9,0x24FA,0x24FB,0x24FC,0x24FD,0x24FE,0x24FF /* 24F8 */
+};
+
+static const uint16 weight_general_ci_pageFF[256]={
+ 0xFF00,0xFF01,0xFF02,0xFF03,0xFF04,0xFF05,0xFF06,0xFF07, /* FF00 */
+ 0xFF08,0xFF09,0xFF0A,0xFF0B,0xFF0C,0xFF0D,0xFF0E,0xFF0F, /* FF08 */
+ 0xFF10,0xFF11,0xFF12,0xFF13,0xFF14,0xFF15,0xFF16,0xFF17, /* FF10 */
+ 0xFF18,0xFF19,0xFF1A,0xFF1B,0xFF1C,0xFF1D,0xFF1E,0xFF1F, /* FF18 */
+ 0xFF20,0xFF21,0xFF22,0xFF23,0xFF24,0xFF25,0xFF26,0xFF27, /* FF20 */
+ 0xFF28,0xFF29,0xFF2A,0xFF2B,0xFF2C,0xFF2D,0xFF2E,0xFF2F, /* FF28 */
+ 0xFF30,0xFF31,0xFF32,0xFF33,0xFF34,0xFF35,0xFF36,0xFF37, /* FF30 */
+ 0xFF38,0xFF39,0xFF3A,0xFF3B,0xFF3C,0xFF3D,0xFF3E,0xFF3F, /* FF38 */
+ 0xFF40,0xFF21,0xFF22,0xFF23,0xFF24,0xFF25,0xFF26,0xFF27, /* FF40 */
+ 0xFF28,0xFF29,0xFF2A,0xFF2B,0xFF2C,0xFF2D,0xFF2E,0xFF2F, /* FF48 */
+ 0xFF30,0xFF31,0xFF32,0xFF33,0xFF34,0xFF35,0xFF36,0xFF37, /* FF50 */
+ 0xFF38,0xFF39,0xFF3A,0xFF5B,0xFF5C,0xFF5D,0xFF5E,0xFF5F, /* FF58 */
+ 0xFF60,0xFF61,0xFF62,0xFF63,0xFF64,0xFF65,0xFF66,0xFF67, /* FF60 */
+ 0xFF68,0xFF69,0xFF6A,0xFF6B,0xFF6C,0xFF6D,0xFF6E,0xFF6F, /* FF68 */
+ 0xFF70,0xFF71,0xFF72,0xFF73,0xFF74,0xFF75,0xFF76,0xFF77, /* FF70 */
+ 0xFF78,0xFF79,0xFF7A,0xFF7B,0xFF7C,0xFF7D,0xFF7E,0xFF7F, /* FF78 */
+ 0xFF80,0xFF81,0xFF82,0xFF83,0xFF84,0xFF85,0xFF86,0xFF87, /* FF80 */
+ 0xFF88,0xFF89,0xFF8A,0xFF8B,0xFF8C,0xFF8D,0xFF8E,0xFF8F, /* FF88 */
+ 0xFF90,0xFF91,0xFF92,0xFF93,0xFF94,0xFF95,0xFF96,0xFF97, /* FF90 */
+ 0xFF98,0xFF99,0xFF9A,0xFF9B,0xFF9C,0xFF9D,0xFF9E,0xFF9F, /* FF98 */
+ 0xFFA0,0xFFA1,0xFFA2,0xFFA3,0xFFA4,0xFFA5,0xFFA6,0xFFA7, /* FFA0 */
+ 0xFFA8,0xFFA9,0xFFAA,0xFFAB,0xFFAC,0xFFAD,0xFFAE,0xFFAF, /* FFA8 */
+ 0xFFB0,0xFFB1,0xFFB2,0xFFB3,0xFFB4,0xFFB5,0xFFB6,0xFFB7, /* FFB0 */
+ 0xFFB8,0xFFB9,0xFFBA,0xFFBB,0xFFBC,0xFFBD,0xFFBE,0xFFBF, /* FFB8 */
+ 0xFFC0,0xFFC1,0xFFC2,0xFFC3,0xFFC4,0xFFC5,0xFFC6,0xFFC7, /* FFC0 */
+ 0xFFC8,0xFFC9,0xFFCA,0xFFCB,0xFFCC,0xFFCD,0xFFCE,0xFFCF, /* FFC8 */
+ 0xFFD0,0xFFD1,0xFFD2,0xFFD3,0xFFD4,0xFFD5,0xFFD6,0xFFD7, /* FFD0 */
+ 0xFFD8,0xFFD9,0xFFDA,0xFFDB,0xFFDC,0xFFDD,0xFFDE,0xFFDF, /* FFD8 */
+ 0xFFE0,0xFFE1,0xFFE2,0xFFE3,0xFFE4,0xFFE5,0xFFE6,0xFFE7, /* FFE0 */
+ 0xFFE8,0xFFE9,0xFFEA,0xFFEB,0xFFEC,0xFFED,0xFFEE,0xFFEF, /* FFE8 */
+ 0xFFF0,0xFFF1,0xFFF2,0xFFF3,0xFFF4,0xFFF5,0xFFF6,0xFFF7, /* FFF0 */
+ 0xFFF8,0xFFF9,0xFFFA,0xFFFB,0xFFFC,0xFFFD,0xFFFE,0xFFFF /* FFF8 */
+};
+
+const uint16 * weight_general_ci_index[256]={
+ weight_general_ci_page00, weight_general_ci_page01,
+ weight_general_ci_page02, weight_general_ci_page03,
+ weight_general_ci_page04, weight_general_ci_page05,
+ weight_general_ci_page06, weight_general_ci_page07,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ weight_general_ci_page1E, weight_general_ci_page1F,
+ NULL, weight_general_ci_page21,
+ NULL, NULL,
+ weight_general_ci_page24, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, weight_general_ci_pageFF
+};
diff --git a/strings/ctype-unicode300-general_mysql500_ci.h b/strings/ctype-unicode300-general_mysql500_ci.h
new file mode 100644
index 00000000000..3366c391380
--- /dev/null
+++ b/strings/ctype-unicode300-general_mysql500_ci.h
@@ -0,0 +1,190 @@
+/* Copyright (c) 2000, 2013, Oracle and/or its affiliates.
+ Copyright (c) 2009, 2023, MariaDB Corporation.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; version 2 of the License.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA
+*/
+
+/*
+ Generated by:
+ ./unidata-dump \
+ --mode=weight_general_mysql500_ci \
+ --max-char=0xFFFF \
+ UnicodeData-3.0.0.txt
+
+*/
+const uint16 weight_general_mysql500_ci_page00[256]={
+ 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, /* 0000 */
+ 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, /* 0008 */
+ 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, /* 0010 */
+ 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, /* 0018 */
+ 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, /* 0020 */
+ 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, /* 0028 */
+ 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, /* 0030 */
+ 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, /* 0038 */
+ 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, /* 0040 */
+ 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, /* 0048 */
+ 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, /* 0050 */
+ 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, /* 0058 */
+ 0x0060,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, /* 0060 */
+ 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, /* 0068 */
+ 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, /* 0070 */
+ 0x0058,0x0059,0x005A,0x007B,0x007C,0x007D,0x007E,0x007F, /* 0078 */
+ 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087, /* 0080 */
+ 0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F, /* 0088 */
+ 0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097, /* 0090 */
+ 0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F, /* 0098 */
+ 0x00A0,0x00A1,0x00A2,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7, /* 00A0 */
+ 0x00A8,0x00A9,0x00AA,0x00AB,0x00AC,0x00AD,0x00AE,0x00AF, /* 00A8 */
+ 0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x039C,0x00B6,0x00B7, /* 00B0 */
+ 0x00B8,0x00B9,0x00BA,0x00BB,0x00BC,0x00BD,0x00BE,0x00BF, /* 00B8 */
+ 0x0041,0x0041,0x0041,0x0041,0x0041,0x0041,0x00C6,0x0043, /* 00C0 */
+ 0x0045,0x0045,0x0045,0x0045,0x0049,0x0049,0x0049,0x0049, /* 00C8 */
+ 0x00D0,0x004E,0x004F,0x004F,0x004F,0x004F,0x004F,0x00D7, /* 00D0 */
+ 0x00D8,0x0055,0x0055,0x0055,0x0055,0x0059,0x00DE,0x00DF, /* 00D8 */
+ 0x0041,0x0041,0x0041,0x0041,0x0041,0x0041,0x00C6,0x0043, /* 00E0 */
+ 0x0045,0x0045,0x0045,0x0045,0x0049,0x0049,0x0049,0x0049, /* 00E8 */
+ 0x00D0,0x004E,0x004F,0x004F,0x004F,0x004F,0x004F,0x00F7, /* 00F0 */
+ 0x00D8,0x0055,0x0055,0x0055,0x0055,0x0059,0x00DE,0x0059 /* 00F8 */
+};
+
+const uint16 * weight_general_mysql500_ci_index[256]={
+ weight_general_mysql500_ci_page00, weight_general_ci_page01,
+ weight_general_ci_page02, weight_general_ci_page03,
+ weight_general_ci_page04, weight_general_ci_page05,
+ weight_general_ci_page06, weight_general_ci_page07,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ weight_general_ci_page1E, weight_general_ci_page1F,
+ NULL, weight_general_ci_page21,
+ NULL, NULL,
+ weight_general_ci_page24, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, weight_general_ci_pageFF
+};
diff --git a/strings/ctype-unicode520-casefold.h b/strings/ctype-unicode520-casefold.h
new file mode 100644
index 00000000000..bcd0ff355be
--- /dev/null
+++ b/strings/ctype-unicode520-casefold.h
@@ -0,0 +1,3192 @@
+/* Copyright (c) 2000, 2013, Oracle and/or its affiliates.
+ Copyright (c) 2009, 2023, MariaDB Corporation.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; version 2 of the License.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA
+*/
+
+/*
+ Generated by:
+ ./unidata-dump \
+ --mode=casefold \
+ --page-name=u520_casefold_page \
+ --index-name=my_u520_casefold_index \
+ UnicodeData-5.2.0.txt
+
+*/
+const MY_CASEFOLD_CHARACTER u520_casefold_page00[256]={
+ {0x0000,0x0000},{0x0001,0x0001}, /* 0000 */
+ {0x0002,0x0002},{0x0003,0x0003}, /* 0002 */
+ {0x0004,0x0004},{0x0005,0x0005}, /* 0004 */
+ {0x0006,0x0006},{0x0007,0x0007}, /* 0006 */
+ {0x0008,0x0008},{0x0009,0x0009}, /* 0008 */
+ {0x000A,0x000A},{0x000B,0x000B}, /* 000A */
+ {0x000C,0x000C},{0x000D,0x000D}, /* 000C */
+ {0x000E,0x000E},{0x000F,0x000F}, /* 000E */
+ {0x0010,0x0010},{0x0011,0x0011}, /* 0010 */
+ {0x0012,0x0012},{0x0013,0x0013}, /* 0012 */
+ {0x0014,0x0014},{0x0015,0x0015}, /* 0014 */
+ {0x0016,0x0016},{0x0017,0x0017}, /* 0016 */
+ {0x0018,0x0018},{0x0019,0x0019}, /* 0018 */
+ {0x001A,0x001A},{0x001B,0x001B}, /* 001A */
+ {0x001C,0x001C},{0x001D,0x001D}, /* 001C */
+ {0x001E,0x001E},{0x001F,0x001F}, /* 001E */
+ {0x0020,0x0020},{0x0021,0x0021}, /* 0020 */
+ {0x0022,0x0022},{0x0023,0x0023}, /* 0022 */
+ {0x0024,0x0024},{0x0025,0x0025}, /* 0024 */
+ {0x0026,0x0026},{0x0027,0x0027}, /* 0026 */
+ {0x0028,0x0028},{0x0029,0x0029}, /* 0028 */
+ {0x002A,0x002A},{0x002B,0x002B}, /* 002A */
+ {0x002C,0x002C},{0x002D,0x002D}, /* 002C */
+ {0x002E,0x002E},{0x002F,0x002F}, /* 002E */
+ {0x0030,0x0030},{0x0031,0x0031}, /* 0030 */
+ {0x0032,0x0032},{0x0033,0x0033}, /* 0032 */
+ {0x0034,0x0034},{0x0035,0x0035}, /* 0034 */
+ {0x0036,0x0036},{0x0037,0x0037}, /* 0036 */
+ {0x0038,0x0038},{0x0039,0x0039}, /* 0038 */
+ {0x003A,0x003A},{0x003B,0x003B}, /* 003A */
+ {0x003C,0x003C},{0x003D,0x003D}, /* 003C */
+ {0x003E,0x003E},{0x003F,0x003F}, /* 003E */
+ {0x0040,0x0040},{0x0041,0x0061}, /* 0040 */
+ {0x0042,0x0062},{0x0043,0x0063}, /* 0042 */
+ {0x0044,0x0064},{0x0045,0x0065}, /* 0044 */
+ {0x0046,0x0066},{0x0047,0x0067}, /* 0046 */
+ {0x0048,0x0068},{0x0049,0x0069}, /* 0048 */
+ {0x004A,0x006A},{0x004B,0x006B}, /* 004A */
+ {0x004C,0x006C},{0x004D,0x006D}, /* 004C */
+ {0x004E,0x006E},{0x004F,0x006F}, /* 004E */
+ {0x0050,0x0070},{0x0051,0x0071}, /* 0050 */
+ {0x0052,0x0072},{0x0053,0x0073}, /* 0052 */
+ {0x0054,0x0074},{0x0055,0x0075}, /* 0054 */
+ {0x0056,0x0076},{0x0057,0x0077}, /* 0056 */
+ {0x0058,0x0078},{0x0059,0x0079}, /* 0058 */
+ {0x005A,0x007A},{0x005B,0x005B}, /* 005A */
+ {0x005C,0x005C},{0x005D,0x005D}, /* 005C */
+ {0x005E,0x005E},{0x005F,0x005F}, /* 005E */
+ {0x0060,0x0060},{0x0041,0x0061}, /* 0060 */
+ {0x0042,0x0062},{0x0043,0x0063}, /* 0062 */
+ {0x0044,0x0064},{0x0045,0x0065}, /* 0064 */
+ {0x0046,0x0066},{0x0047,0x0067}, /* 0066 */
+ {0x0048,0x0068},{0x0049,0x0069}, /* 0068 */
+ {0x004A,0x006A},{0x004B,0x006B}, /* 006A */
+ {0x004C,0x006C},{0x004D,0x006D}, /* 006C */
+ {0x004E,0x006E},{0x004F,0x006F}, /* 006E */
+ {0x0050,0x0070},{0x0051,0x0071}, /* 0070 */
+ {0x0052,0x0072},{0x0053,0x0073}, /* 0072 */
+ {0x0054,0x0074},{0x0055,0x0075}, /* 0074 */
+ {0x0056,0x0076},{0x0057,0x0077}, /* 0076 */
+ {0x0058,0x0078},{0x0059,0x0079}, /* 0078 */
+ {0x005A,0x007A},{0x007B,0x007B}, /* 007A */
+ {0x007C,0x007C},{0x007D,0x007D}, /* 007C */
+ {0x007E,0x007E},{0x007F,0x007F}, /* 007E */
+ {0x0080,0x0080},{0x0081,0x0081}, /* 0080 */
+ {0x0082,0x0082},{0x0083,0x0083}, /* 0082 */
+ {0x0084,0x0084},{0x0085,0x0085}, /* 0084 */
+ {0x0086,0x0086},{0x0087,0x0087}, /* 0086 */
+ {0x0088,0x0088},{0x0089,0x0089}, /* 0088 */
+ {0x008A,0x008A},{0x008B,0x008B}, /* 008A */
+ {0x008C,0x008C},{0x008D,0x008D}, /* 008C */
+ {0x008E,0x008E},{0x008F,0x008F}, /* 008E */
+ {0x0090,0x0090},{0x0091,0x0091}, /* 0090 */
+ {0x0092,0x0092},{0x0093,0x0093}, /* 0092 */
+ {0x0094,0x0094},{0x0095,0x0095}, /* 0094 */
+ {0x0096,0x0096},{0x0097,0x0097}, /* 0096 */
+ {0x0098,0x0098},{0x0099,0x0099}, /* 0098 */
+ {0x009A,0x009A},{0x009B,0x009B}, /* 009A */
+ {0x009C,0x009C},{0x009D,0x009D}, /* 009C */
+ {0x009E,0x009E},{0x009F,0x009F}, /* 009E */
+ {0x00A0,0x00A0},{0x00A1,0x00A1}, /* 00A0 */
+ {0x00A2,0x00A2},{0x00A3,0x00A3}, /* 00A2 */
+ {0x00A4,0x00A4},{0x00A5,0x00A5}, /* 00A4 */
+ {0x00A6,0x00A6},{0x00A7,0x00A7}, /* 00A6 */
+ {0x00A8,0x00A8},{0x00A9,0x00A9}, /* 00A8 */
+ {0x00AA,0x00AA},{0x00AB,0x00AB}, /* 00AA */
+ {0x00AC,0x00AC},{0x00AD,0x00AD}, /* 00AC */
+ {0x00AE,0x00AE},{0x00AF,0x00AF}, /* 00AE */
+ {0x00B0,0x00B0},{0x00B1,0x00B1}, /* 00B0 */
+ {0x00B2,0x00B2},{0x00B3,0x00B3}, /* 00B2 */
+ {0x00B4,0x00B4},{0x039C,0x00B5}, /* 00B4 */
+ {0x00B6,0x00B6},{0x00B7,0x00B7}, /* 00B6 */
+ {0x00B8,0x00B8},{0x00B9,0x00B9}, /* 00B8 */
+ {0x00BA,0x00BA},{0x00BB,0x00BB}, /* 00BA */
+ {0x00BC,0x00BC},{0x00BD,0x00BD}, /* 00BC */
+ {0x00BE,0x00BE},{0x00BF,0x00BF}, /* 00BE */
+ {0x00C0,0x00E0},{0x00C1,0x00E1}, /* 00C0 */
+ {0x00C2,0x00E2},{0x00C3,0x00E3}, /* 00C2 */
+ {0x00C4,0x00E4},{0x00C5,0x00E5}, /* 00C4 */
+ {0x00C6,0x00E6},{0x00C7,0x00E7}, /* 00C6 */
+ {0x00C8,0x00E8},{0x00C9,0x00E9}, /* 00C8 */
+ {0x00CA,0x00EA},{0x00CB,0x00EB}, /* 00CA */
+ {0x00CC,0x00EC},{0x00CD,0x00ED}, /* 00CC */
+ {0x00CE,0x00EE},{0x00CF,0x00EF}, /* 00CE */
+ {0x00D0,0x00F0},{0x00D1,0x00F1}, /* 00D0 */
+ {0x00D2,0x00F2},{0x00D3,0x00F3}, /* 00D2 */
+ {0x00D4,0x00F4},{0x00D5,0x00F5}, /* 00D4 */
+ {0x00D6,0x00F6},{0x00D7,0x00D7}, /* 00D6 */
+ {0x00D8,0x00F8},{0x00D9,0x00F9}, /* 00D8 */
+ {0x00DA,0x00FA},{0x00DB,0x00FB}, /* 00DA */
+ {0x00DC,0x00FC},{0x00DD,0x00FD}, /* 00DC */
+ {0x00DE,0x00FE},{0x00DF,0x00DF}, /* 00DE */
+ {0x00C0,0x00E0},{0x00C1,0x00E1}, /* 00E0 */
+ {0x00C2,0x00E2},{0x00C3,0x00E3}, /* 00E2 */
+ {0x00C4,0x00E4},{0x00C5,0x00E5}, /* 00E4 */
+ {0x00C6,0x00E6},{0x00C7,0x00E7}, /* 00E6 */
+ {0x00C8,0x00E8},{0x00C9,0x00E9}, /* 00E8 */
+ {0x00CA,0x00EA},{0x00CB,0x00EB}, /* 00EA */
+ {0x00CC,0x00EC},{0x00CD,0x00ED}, /* 00EC */
+ {0x00CE,0x00EE},{0x00CF,0x00EF}, /* 00EE */
+ {0x00D0,0x00F0},{0x00D1,0x00F1}, /* 00F0 */
+ {0x00D2,0x00F2},{0x00D3,0x00F3}, /* 00F2 */
+ {0x00D4,0x00F4},{0x00D5,0x00F5}, /* 00F4 */
+ {0x00D6,0x00F6},{0x00F7,0x00F7}, /* 00F6 */
+ {0x00D8,0x00F8},{0x00D9,0x00F9}, /* 00F8 */
+ {0x00DA,0x00FA},{0x00DB,0x00FB}, /* 00FA */
+ {0x00DC,0x00FC},{0x00DD,0x00FD}, /* 00FC */
+ {0x00DE,0x00FE},{0x0178,0x00FF} /* 00FE */
+};
+
+static const MY_CASEFOLD_CHARACTER u520_casefold_page01[256]={
+ {0x0100,0x0101},{0x0100,0x0101}, /* 0100 */
+ {0x0102,0x0103},{0x0102,0x0103}, /* 0102 */
+ {0x0104,0x0105},{0x0104,0x0105}, /* 0104 */
+ {0x0106,0x0107},{0x0106,0x0107}, /* 0106 */
+ {0x0108,0x0109},{0x0108,0x0109}, /* 0108 */
+ {0x010A,0x010B},{0x010A,0x010B}, /* 010A */
+ {0x010C,0x010D},{0x010C,0x010D}, /* 010C */
+ {0x010E,0x010F},{0x010E,0x010F}, /* 010E */
+ {0x0110,0x0111},{0x0110,0x0111}, /* 0110 */
+ {0x0112,0x0113},{0x0112,0x0113}, /* 0112 */
+ {0x0114,0x0115},{0x0114,0x0115}, /* 0114 */
+ {0x0116,0x0117},{0x0116,0x0117}, /* 0116 */
+ {0x0118,0x0119},{0x0118,0x0119}, /* 0118 */
+ {0x011A,0x011B},{0x011A,0x011B}, /* 011A */
+ {0x011C,0x011D},{0x011C,0x011D}, /* 011C */
+ {0x011E,0x011F},{0x011E,0x011F}, /* 011E */
+ {0x0120,0x0121},{0x0120,0x0121}, /* 0120 */
+ {0x0122,0x0123},{0x0122,0x0123}, /* 0122 */
+ {0x0124,0x0125},{0x0124,0x0125}, /* 0124 */
+ {0x0126,0x0127},{0x0126,0x0127}, /* 0126 */
+ {0x0128,0x0129},{0x0128,0x0129}, /* 0128 */
+ {0x012A,0x012B},{0x012A,0x012B}, /* 012A */
+ {0x012C,0x012D},{0x012C,0x012D}, /* 012C */
+ {0x012E,0x012F},{0x012E,0x012F}, /* 012E */
+ {0x0130,0x0069},{0x0049,0x0131}, /* 0130 */
+ {0x0132,0x0133},{0x0132,0x0133}, /* 0132 */
+ {0x0134,0x0135},{0x0134,0x0135}, /* 0134 */
+ {0x0136,0x0137},{0x0136,0x0137}, /* 0136 */
+ {0x0138,0x0138},{0x0139,0x013A}, /* 0138 */
+ {0x0139,0x013A},{0x013B,0x013C}, /* 013A */
+ {0x013B,0x013C},{0x013D,0x013E}, /* 013C */
+ {0x013D,0x013E},{0x013F,0x0140}, /* 013E */
+ {0x013F,0x0140},{0x0141,0x0142}, /* 0140 */
+ {0x0141,0x0142},{0x0143,0x0144}, /* 0142 */
+ {0x0143,0x0144},{0x0145,0x0146}, /* 0144 */
+ {0x0145,0x0146},{0x0147,0x0148}, /* 0146 */
+ {0x0147,0x0148},{0x0149,0x0149}, /* 0148 */
+ {0x014A,0x014B},{0x014A,0x014B}, /* 014A */
+ {0x014C,0x014D},{0x014C,0x014D}, /* 014C */
+ {0x014E,0x014F},{0x014E,0x014F}, /* 014E */
+ {0x0150,0x0151},{0x0150,0x0151}, /* 0150 */
+ {0x0152,0x0153},{0x0152,0x0153}, /* 0152 */
+ {0x0154,0x0155},{0x0154,0x0155}, /* 0154 */
+ {0x0156,0x0157},{0x0156,0x0157}, /* 0156 */
+ {0x0158,0x0159},{0x0158,0x0159}, /* 0158 */
+ {0x015A,0x015B},{0x015A,0x015B}, /* 015A */
+ {0x015C,0x015D},{0x015C,0x015D}, /* 015C */
+ {0x015E,0x015F},{0x015E,0x015F}, /* 015E */
+ {0x0160,0x0161},{0x0160,0x0161}, /* 0160 */
+ {0x0162,0x0163},{0x0162,0x0163}, /* 0162 */
+ {0x0164,0x0165},{0x0164,0x0165}, /* 0164 */
+ {0x0166,0x0167},{0x0166,0x0167}, /* 0166 */
+ {0x0168,0x0169},{0x0168,0x0169}, /* 0168 */
+ {0x016A,0x016B},{0x016A,0x016B}, /* 016A */
+ {0x016C,0x016D},{0x016C,0x016D}, /* 016C */
+ {0x016E,0x016F},{0x016E,0x016F}, /* 016E */
+ {0x0170,0x0171},{0x0170,0x0171}, /* 0170 */
+ {0x0172,0x0173},{0x0172,0x0173}, /* 0172 */
+ {0x0174,0x0175},{0x0174,0x0175}, /* 0174 */
+ {0x0176,0x0177},{0x0176,0x0177}, /* 0176 */
+ {0x0178,0x00FF},{0x0179,0x017A}, /* 0178 */
+ {0x0179,0x017A},{0x017B,0x017C}, /* 017A */
+ {0x017B,0x017C},{0x017D,0x017E}, /* 017C */
+ {0x017D,0x017E},{0x0053,0x017F}, /* 017E */
+ {0x0243,0x0180},{0x0181,0x0253}, /* 0180 */
+ {0x0182,0x0183},{0x0182,0x0183}, /* 0182 */
+ {0x0184,0x0185},{0x0184,0x0185}, /* 0184 */
+ {0x0186,0x0254},{0x0187,0x0188}, /* 0186 */
+ {0x0187,0x0188},{0x0189,0x0256}, /* 0188 */
+ {0x018A,0x0257},{0x018B,0x018C}, /* 018A */
+ {0x018B,0x018C},{0x018D,0x018D}, /* 018C */
+ {0x018E,0x01DD},{0x018F,0x0259}, /* 018E */
+ {0x0190,0x025B},{0x0191,0x0192}, /* 0190 */
+ {0x0191,0x0192},{0x0193,0x0260}, /* 0192 */
+ {0x0194,0x0263},{0x01F6,0x0195}, /* 0194 */
+ {0x0196,0x0269},{0x0197,0x0268}, /* 0196 */
+ {0x0198,0x0199},{0x0198,0x0199}, /* 0198 */
+ {0x023D,0x019A},{0x019B,0x019B}, /* 019A */
+ {0x019C,0x026F},{0x019D,0x0272}, /* 019C */
+ {0x0220,0x019E},{0x019F,0x0275}, /* 019E */
+ {0x01A0,0x01A1},{0x01A0,0x01A1}, /* 01A0 */
+ {0x01A2,0x01A3},{0x01A2,0x01A3}, /* 01A2 */
+ {0x01A4,0x01A5},{0x01A4,0x01A5}, /* 01A4 */
+ {0x01A6,0x0280},{0x01A7,0x01A8}, /* 01A6 */
+ {0x01A7,0x01A8},{0x01A9,0x0283}, /* 01A8 */
+ {0x01AA,0x01AA},{0x01AB,0x01AB}, /* 01AA */
+ {0x01AC,0x01AD},{0x01AC,0x01AD}, /* 01AC */
+ {0x01AE,0x0288},{0x01AF,0x01B0}, /* 01AE */
+ {0x01AF,0x01B0},{0x01B1,0x028A}, /* 01B0 */
+ {0x01B2,0x028B},{0x01B3,0x01B4}, /* 01B2 */
+ {0x01B3,0x01B4},{0x01B5,0x01B6}, /* 01B4 */
+ {0x01B5,0x01B6},{0x01B7,0x0292}, /* 01B6 */
+ {0x01B8,0x01B9},{0x01B8,0x01B9}, /* 01B8 */
+ {0x01BA,0x01BA},{0x01BB,0x01BB}, /* 01BA */
+ {0x01BC,0x01BD},{0x01BC,0x01BD}, /* 01BC */
+ {0x01BE,0x01BE},{0x01F7,0x01BF}, /* 01BE */
+ {0x01C0,0x01C0},{0x01C1,0x01C1}, /* 01C0 */
+ {0x01C2,0x01C2},{0x01C3,0x01C3}, /* 01C2 */
+ {0x01C4,0x01C6},{0x01C4,0x01C6}, /* 01C4 */
+ {0x01C4,0x01C6},{0x01C7,0x01C9}, /* 01C6 */
+ {0x01C7,0x01C9},{0x01C7,0x01C9}, /* 01C8 */
+ {0x01CA,0x01CC},{0x01CA,0x01CC}, /* 01CA */
+ {0x01CA,0x01CC},{0x01CD,0x01CE}, /* 01CC */
+ {0x01CD,0x01CE},{0x01CF,0x01D0}, /* 01CE */
+ {0x01CF,0x01D0},{0x01D1,0x01D2}, /* 01D0 */
+ {0x01D1,0x01D2},{0x01D3,0x01D4}, /* 01D2 */
+ {0x01D3,0x01D4},{0x01D5,0x01D6}, /* 01D4 */
+ {0x01D5,0x01D6},{0x01D7,0x01D8}, /* 01D6 */
+ {0x01D7,0x01D8},{0x01D9,0x01DA}, /* 01D8 */
+ {0x01D9,0x01DA},{0x01DB,0x01DC}, /* 01DA */
+ {0x01DB,0x01DC},{0x018E,0x01DD}, /* 01DC */
+ {0x01DE,0x01DF},{0x01DE,0x01DF}, /* 01DE */
+ {0x01E0,0x01E1},{0x01E0,0x01E1}, /* 01E0 */
+ {0x01E2,0x01E3},{0x01E2,0x01E3}, /* 01E2 */
+ {0x01E4,0x01E5},{0x01E4,0x01E5}, /* 01E4 */
+ {0x01E6,0x01E7},{0x01E6,0x01E7}, /* 01E6 */
+ {0x01E8,0x01E9},{0x01E8,0x01E9}, /* 01E8 */
+ {0x01EA,0x01EB},{0x01EA,0x01EB}, /* 01EA */
+ {0x01EC,0x01ED},{0x01EC,0x01ED}, /* 01EC */
+ {0x01EE,0x01EF},{0x01EE,0x01EF}, /* 01EE */
+ {0x01F0,0x01F0},{0x01F1,0x01F3}, /* 01F0 */
+ {0x01F1,0x01F3},{0x01F1,0x01F3}, /* 01F2 */
+ {0x01F4,0x01F5},{0x01F4,0x01F5}, /* 01F4 */
+ {0x01F6,0x0195},{0x01F7,0x01BF}, /* 01F6 */
+ {0x01F8,0x01F9},{0x01F8,0x01F9}, /* 01F8 */
+ {0x01FA,0x01FB},{0x01FA,0x01FB}, /* 01FA */
+ {0x01FC,0x01FD},{0x01FC,0x01FD}, /* 01FC */
+ {0x01FE,0x01FF},{0x01FE,0x01FF} /* 01FE */
+};
+
+static const MY_CASEFOLD_CHARACTER u520_casefold_page02[256]={
+ {0x0200,0x0201},{0x0200,0x0201}, /* 0200 */
+ {0x0202,0x0203},{0x0202,0x0203}, /* 0202 */
+ {0x0204,0x0205},{0x0204,0x0205}, /* 0204 */
+ {0x0206,0x0207},{0x0206,0x0207}, /* 0206 */
+ {0x0208,0x0209},{0x0208,0x0209}, /* 0208 */
+ {0x020A,0x020B},{0x020A,0x020B}, /* 020A */
+ {0x020C,0x020D},{0x020C,0x020D}, /* 020C */
+ {0x020E,0x020F},{0x020E,0x020F}, /* 020E */
+ {0x0210,0x0211},{0x0210,0x0211}, /* 0210 */
+ {0x0212,0x0213},{0x0212,0x0213}, /* 0212 */
+ {0x0214,0x0215},{0x0214,0x0215}, /* 0214 */
+ {0x0216,0x0217},{0x0216,0x0217}, /* 0216 */
+ {0x0218,0x0219},{0x0218,0x0219}, /* 0218 */
+ {0x021A,0x021B},{0x021A,0x021B}, /* 021A */
+ {0x021C,0x021D},{0x021C,0x021D}, /* 021C */
+ {0x021E,0x021F},{0x021E,0x021F}, /* 021E */
+ {0x0220,0x019E},{0x0221,0x0221}, /* 0220 */
+ {0x0222,0x0223},{0x0222,0x0223}, /* 0222 */
+ {0x0224,0x0225},{0x0224,0x0225}, /* 0224 */
+ {0x0226,0x0227},{0x0226,0x0227}, /* 0226 */
+ {0x0228,0x0229},{0x0228,0x0229}, /* 0228 */
+ {0x022A,0x022B},{0x022A,0x022B}, /* 022A */
+ {0x022C,0x022D},{0x022C,0x022D}, /* 022C */
+ {0x022E,0x022F},{0x022E,0x022F}, /* 022E */
+ {0x0230,0x0231},{0x0230,0x0231}, /* 0230 */
+ {0x0232,0x0233},{0x0232,0x0233}, /* 0232 */
+ {0x0234,0x0234},{0x0235,0x0235}, /* 0234 */
+ {0x0236,0x0236},{0x0237,0x0237}, /* 0236 */
+ {0x0238,0x0238},{0x0239,0x0239}, /* 0238 */
+ {0x023A,0x2C65},{0x023B,0x023C}, /* 023A */
+ {0x023B,0x023C},{0x023D,0x019A}, /* 023C */
+ {0x023E,0x2C66},{0x2C7E,0x023F}, /* 023E */
+ {0x2C7F,0x0240},{0x0241,0x0242}, /* 0240 */
+ {0x0241,0x0242},{0x0243,0x0180}, /* 0242 */
+ {0x0244,0x0289},{0x0245,0x028C}, /* 0244 */
+ {0x0246,0x0247},{0x0246,0x0247}, /* 0246 */
+ {0x0248,0x0249},{0x0248,0x0249}, /* 0248 */
+ {0x024A,0x024B},{0x024A,0x024B}, /* 024A */
+ {0x024C,0x024D},{0x024C,0x024D}, /* 024C */
+ {0x024E,0x024F},{0x024E,0x024F}, /* 024E */
+ {0x2C6F,0x0250},{0x2C6D,0x0251}, /* 0250 */
+ {0x2C70,0x0252},{0x0181,0x0253}, /* 0252 */
+ {0x0186,0x0254},{0x0255,0x0255}, /* 0254 */
+ {0x0189,0x0256},{0x018A,0x0257}, /* 0256 */
+ {0x0258,0x0258},{0x018F,0x0259}, /* 0258 */
+ {0x025A,0x025A},{0x0190,0x025B}, /* 025A */
+ {0x025C,0x025C},{0x025D,0x025D}, /* 025C */
+ {0x025E,0x025E},{0x025F,0x025F}, /* 025E */
+ {0x0193,0x0260},{0x0261,0x0261}, /* 0260 */
+ {0x0262,0x0262},{0x0194,0x0263}, /* 0262 */
+ {0x0264,0x0264},{0x0265,0x0265}, /* 0264 */
+ {0x0266,0x0266},{0x0267,0x0267}, /* 0266 */
+ {0x0197,0x0268},{0x0196,0x0269}, /* 0268 */
+ {0x026A,0x026A},{0x2C62,0x026B}, /* 026A */
+ {0x026C,0x026C},{0x026D,0x026D}, /* 026C */
+ {0x026E,0x026E},{0x019C,0x026F}, /* 026E */
+ {0x0270,0x0270},{0x2C6E,0x0271}, /* 0270 */
+ {0x019D,0x0272},{0x0273,0x0273}, /* 0272 */
+ {0x0274,0x0274},{0x019F,0x0275}, /* 0274 */
+ {0x0276,0x0276},{0x0277,0x0277}, /* 0276 */
+ {0x0278,0x0278},{0x0279,0x0279}, /* 0278 */
+ {0x027A,0x027A},{0x027B,0x027B}, /* 027A */
+ {0x027C,0x027C},{0x2C64,0x027D}, /* 027C */
+ {0x027E,0x027E},{0x027F,0x027F}, /* 027E */
+ {0x01A6,0x0280},{0x0281,0x0281}, /* 0280 */
+ {0x0282,0x0282},{0x01A9,0x0283}, /* 0282 */
+ {0x0284,0x0284},{0x0285,0x0285}, /* 0284 */
+ {0x0286,0x0286},{0x0287,0x0287}, /* 0286 */
+ {0x01AE,0x0288},{0x0244,0x0289}, /* 0288 */
+ {0x01B1,0x028A},{0x01B2,0x028B}, /* 028A */
+ {0x0245,0x028C},{0x028D,0x028D}, /* 028C */
+ {0x028E,0x028E},{0x028F,0x028F}, /* 028E */
+ {0x0290,0x0290},{0x0291,0x0291}, /* 0290 */
+ {0x01B7,0x0292},{0x0293,0x0293}, /* 0292 */
+ {0x0294,0x0294},{0x0295,0x0295}, /* 0294 */
+ {0x0296,0x0296},{0x0297,0x0297}, /* 0296 */
+ {0x0298,0x0298},{0x0299,0x0299}, /* 0298 */
+ {0x029A,0x029A},{0x029B,0x029B}, /* 029A */
+ {0x029C,0x029C},{0x029D,0x029D}, /* 029C */
+ {0x029E,0x029E},{0x029F,0x029F}, /* 029E */
+ {0x02A0,0x02A0},{0x02A1,0x02A1}, /* 02A0 */
+ {0x02A2,0x02A2},{0x02A3,0x02A3}, /* 02A2 */
+ {0x02A4,0x02A4},{0x02A5,0x02A5}, /* 02A4 */
+ {0x02A6,0x02A6},{0x02A7,0x02A7}, /* 02A6 */
+ {0x02A8,0x02A8},{0x02A9,0x02A9}, /* 02A8 */
+ {0x02AA,0x02AA},{0x02AB,0x02AB}, /* 02AA */
+ {0x02AC,0x02AC},{0x02AD,0x02AD}, /* 02AC */
+ {0x02AE,0x02AE},{0x02AF,0x02AF}, /* 02AE */
+ {0x02B0,0x02B0},{0x02B1,0x02B1}, /* 02B0 */
+ {0x02B2,0x02B2},{0x02B3,0x02B3}, /* 02B2 */
+ {0x02B4,0x02B4},{0x02B5,0x02B5}, /* 02B4 */
+ {0x02B6,0x02B6},{0x02B7,0x02B7}, /* 02B6 */
+ {0x02B8,0x02B8},{0x02B9,0x02B9}, /* 02B8 */
+ {0x02BA,0x02BA},{0x02BB,0x02BB}, /* 02BA */
+ {0x02BC,0x02BC},{0x02BD,0x02BD}, /* 02BC */
+ {0x02BE,0x02BE},{0x02BF,0x02BF}, /* 02BE */
+ {0x02C0,0x02C0},{0x02C1,0x02C1}, /* 02C0 */
+ {0x02C2,0x02C2},{0x02C3,0x02C3}, /* 02C2 */
+ {0x02C4,0x02C4},{0x02C5,0x02C5}, /* 02C4 */
+ {0x02C6,0x02C6},{0x02C7,0x02C7}, /* 02C6 */
+ {0x02C8,0x02C8},{0x02C9,0x02C9}, /* 02C8 */
+ {0x02CA,0x02CA},{0x02CB,0x02CB}, /* 02CA */
+ {0x02CC,0x02CC},{0x02CD,0x02CD}, /* 02CC */
+ {0x02CE,0x02CE},{0x02CF,0x02CF}, /* 02CE */
+ {0x02D0,0x02D0},{0x02D1,0x02D1}, /* 02D0 */
+ {0x02D2,0x02D2},{0x02D3,0x02D3}, /* 02D2 */
+ {0x02D4,0x02D4},{0x02D5,0x02D5}, /* 02D4 */
+ {0x02D6,0x02D6},{0x02D7,0x02D7}, /* 02D6 */
+ {0x02D8,0x02D8},{0x02D9,0x02D9}, /* 02D8 */
+ {0x02DA,0x02DA},{0x02DB,0x02DB}, /* 02DA */
+ {0x02DC,0x02DC},{0x02DD,0x02DD}, /* 02DC */
+ {0x02DE,0x02DE},{0x02DF,0x02DF}, /* 02DE */
+ {0x02E0,0x02E0},{0x02E1,0x02E1}, /* 02E0 */
+ {0x02E2,0x02E2},{0x02E3,0x02E3}, /* 02E2 */
+ {0x02E4,0x02E4},{0x02E5,0x02E5}, /* 02E4 */
+ {0x02E6,0x02E6},{0x02E7,0x02E7}, /* 02E6 */
+ {0x02E8,0x02E8},{0x02E9,0x02E9}, /* 02E8 */
+ {0x02EA,0x02EA},{0x02EB,0x02EB}, /* 02EA */
+ {0x02EC,0x02EC},{0x02ED,0x02ED}, /* 02EC */
+ {0x02EE,0x02EE},{0x02EF,0x02EF}, /* 02EE */
+ {0x02F0,0x02F0},{0x02F1,0x02F1}, /* 02F0 */
+ {0x02F2,0x02F2},{0x02F3,0x02F3}, /* 02F2 */
+ {0x02F4,0x02F4},{0x02F5,0x02F5}, /* 02F4 */
+ {0x02F6,0x02F6},{0x02F7,0x02F7}, /* 02F6 */
+ {0x02F8,0x02F8},{0x02F9,0x02F9}, /* 02F8 */
+ {0x02FA,0x02FA},{0x02FB,0x02FB}, /* 02FA */
+ {0x02FC,0x02FC},{0x02FD,0x02FD}, /* 02FC */
+ {0x02FE,0x02FE},{0x02FF,0x02FF} /* 02FE */
+};
+
+static const MY_CASEFOLD_CHARACTER u520_casefold_page03[256]={
+ {0x0300,0x0300},{0x0301,0x0301}, /* 0300 */
+ {0x0302,0x0302},{0x0303,0x0303}, /* 0302 */
+ {0x0304,0x0304},{0x0305,0x0305}, /* 0304 */
+ {0x0306,0x0306},{0x0307,0x0307}, /* 0306 */
+ {0x0308,0x0308},{0x0309,0x0309}, /* 0308 */
+ {0x030A,0x030A},{0x030B,0x030B}, /* 030A */
+ {0x030C,0x030C},{0x030D,0x030D}, /* 030C */
+ {0x030E,0x030E},{0x030F,0x030F}, /* 030E */
+ {0x0310,0x0310},{0x0311,0x0311}, /* 0310 */
+ {0x0312,0x0312},{0x0313,0x0313}, /* 0312 */
+ {0x0314,0x0314},{0x0315,0x0315}, /* 0314 */
+ {0x0316,0x0316},{0x0317,0x0317}, /* 0316 */
+ {0x0318,0x0318},{0x0319,0x0319}, /* 0318 */
+ {0x031A,0x031A},{0x031B,0x031B}, /* 031A */
+ {0x031C,0x031C},{0x031D,0x031D}, /* 031C */
+ {0x031E,0x031E},{0x031F,0x031F}, /* 031E */
+ {0x0320,0x0320},{0x0321,0x0321}, /* 0320 */
+ {0x0322,0x0322},{0x0323,0x0323}, /* 0322 */
+ {0x0324,0x0324},{0x0325,0x0325}, /* 0324 */
+ {0x0326,0x0326},{0x0327,0x0327}, /* 0326 */
+ {0x0328,0x0328},{0x0329,0x0329}, /* 0328 */
+ {0x032A,0x032A},{0x032B,0x032B}, /* 032A */
+ {0x032C,0x032C},{0x032D,0x032D}, /* 032C */
+ {0x032E,0x032E},{0x032F,0x032F}, /* 032E */
+ {0x0330,0x0330},{0x0331,0x0331}, /* 0330 */
+ {0x0332,0x0332},{0x0333,0x0333}, /* 0332 */
+ {0x0334,0x0334},{0x0335,0x0335}, /* 0334 */
+ {0x0336,0x0336},{0x0337,0x0337}, /* 0336 */
+ {0x0338,0x0338},{0x0339,0x0339}, /* 0338 */
+ {0x033A,0x033A},{0x033B,0x033B}, /* 033A */
+ {0x033C,0x033C},{0x033D,0x033D}, /* 033C */
+ {0x033E,0x033E},{0x033F,0x033F}, /* 033E */
+ {0x0340,0x0340},{0x0341,0x0341}, /* 0340 */
+ {0x0342,0x0342},{0x0343,0x0343}, /* 0342 */
+ {0x0344,0x0344},{0x0399,0x0345}, /* 0344 */
+ {0x0346,0x0346},{0x0347,0x0347}, /* 0346 */
+ {0x0348,0x0348},{0x0349,0x0349}, /* 0348 */
+ {0x034A,0x034A},{0x034B,0x034B}, /* 034A */
+ {0x034C,0x034C},{0x034D,0x034D}, /* 034C */
+ {0x034E,0x034E},{0x034F,0x034F}, /* 034E */
+ {0x0350,0x0350},{0x0351,0x0351}, /* 0350 */
+ {0x0352,0x0352},{0x0353,0x0353}, /* 0352 */
+ {0x0354,0x0354},{0x0355,0x0355}, /* 0354 */
+ {0x0356,0x0356},{0x0357,0x0357}, /* 0356 */
+ {0x0358,0x0358},{0x0359,0x0359}, /* 0358 */
+ {0x035A,0x035A},{0x035B,0x035B}, /* 035A */
+ {0x035C,0x035C},{0x035D,0x035D}, /* 035C */
+ {0x035E,0x035E},{0x035F,0x035F}, /* 035E */
+ {0x0360,0x0360},{0x0361,0x0361}, /* 0360 */
+ {0x0362,0x0362},{0x0363,0x0363}, /* 0362 */
+ {0x0364,0x0364},{0x0365,0x0365}, /* 0364 */
+ {0x0366,0x0366},{0x0367,0x0367}, /* 0366 */
+ {0x0368,0x0368},{0x0369,0x0369}, /* 0368 */
+ {0x036A,0x036A},{0x036B,0x036B}, /* 036A */
+ {0x036C,0x036C},{0x036D,0x036D}, /* 036C */
+ {0x036E,0x036E},{0x036F,0x036F}, /* 036E */
+ {0x0370,0x0371},{0x0370,0x0371}, /* 0370 */
+ {0x0372,0x0373},{0x0372,0x0373}, /* 0372 */
+ {0x0374,0x0374},{0x0375,0x0375}, /* 0374 */
+ {0x0376,0x0377},{0x0376,0x0377}, /* 0376 */
+ {0x0378,0x0378},{0x0379,0x0379}, /* 0378 */
+ {0x037A,0x037A},{0x03FD,0x037B}, /* 037A */
+ {0x03FE,0x037C},{0x03FF,0x037D}, /* 037C */
+ {0x037E,0x037E},{0x037F,0x037F}, /* 037E */
+ {0x0380,0x0380},{0x0381,0x0381}, /* 0380 */
+ {0x0382,0x0382},{0x0383,0x0383}, /* 0382 */
+ {0x0384,0x0384},{0x0385,0x0385}, /* 0384 */
+ {0x0386,0x03AC},{0x0387,0x0387}, /* 0386 */
+ {0x0388,0x03AD},{0x0389,0x03AE}, /* 0388 */
+ {0x038A,0x03AF},{0x038B,0x038B}, /* 038A */
+ {0x038C,0x03CC},{0x038D,0x038D}, /* 038C */
+ {0x038E,0x03CD},{0x038F,0x03CE}, /* 038E */
+ {0x0390,0x0390},{0x0391,0x03B1}, /* 0390 */
+ {0x0392,0x03B2},{0x0393,0x03B3}, /* 0392 */
+ {0x0394,0x03B4},{0x0395,0x03B5}, /* 0394 */
+ {0x0396,0x03B6},{0x0397,0x03B7}, /* 0396 */
+ {0x0398,0x03B8},{0x0399,0x03B9}, /* 0398 */
+ {0x039A,0x03BA},{0x039B,0x03BB}, /* 039A */
+ {0x039C,0x03BC},{0x039D,0x03BD}, /* 039C */
+ {0x039E,0x03BE},{0x039F,0x03BF}, /* 039E */
+ {0x03A0,0x03C0},{0x03A1,0x03C1}, /* 03A0 */
+ {0x03A2,0x03A2},{0x03A3,0x03C3}, /* 03A2 */
+ {0x03A4,0x03C4},{0x03A5,0x03C5}, /* 03A4 */
+ {0x03A6,0x03C6},{0x03A7,0x03C7}, /* 03A6 */
+ {0x03A8,0x03C8},{0x03A9,0x03C9}, /* 03A8 */
+ {0x03AA,0x03CA},{0x03AB,0x03CB}, /* 03AA */
+ {0x0386,0x03AC},{0x0388,0x03AD}, /* 03AC */
+ {0x0389,0x03AE},{0x038A,0x03AF}, /* 03AE */
+ {0x03B0,0x03B0},{0x0391,0x03B1}, /* 03B0 */
+ {0x0392,0x03B2},{0x0393,0x03B3}, /* 03B2 */
+ {0x0394,0x03B4},{0x0395,0x03B5}, /* 03B4 */
+ {0x0396,0x03B6},{0x0397,0x03B7}, /* 03B6 */
+ {0x0398,0x03B8},{0x0399,0x03B9}, /* 03B8 */
+ {0x039A,0x03BA},{0x039B,0x03BB}, /* 03BA */
+ {0x039C,0x03BC},{0x039D,0x03BD}, /* 03BC */
+ {0x039E,0x03BE},{0x039F,0x03BF}, /* 03BE */
+ {0x03A0,0x03C0},{0x03A1,0x03C1}, /* 03C0 */
+ {0x03A3,0x03C2},{0x03A3,0x03C3}, /* 03C2 */
+ {0x03A4,0x03C4},{0x03A5,0x03C5}, /* 03C4 */
+ {0x03A6,0x03C6},{0x03A7,0x03C7}, /* 03C6 */
+ {0x03A8,0x03C8},{0x03A9,0x03C9}, /* 03C8 */
+ {0x03AA,0x03CA},{0x03AB,0x03CB}, /* 03CA */
+ {0x038C,0x03CC},{0x038E,0x03CD}, /* 03CC */
+ {0x038F,0x03CE},{0x03CF,0x03D7}, /* 03CE */
+ {0x0392,0x03D0},{0x0398,0x03D1}, /* 03D0 */
+ {0x03D2,0x03D2},{0x03D3,0x03D3}, /* 03D2 */
+ {0x03D4,0x03D4},{0x03A6,0x03D5}, /* 03D4 */
+ {0x03A0,0x03D6},{0x03CF,0x03D7}, /* 03D6 */
+ {0x03D8,0x03D9},{0x03D8,0x03D9}, /* 03D8 */
+ {0x03DA,0x03DB},{0x03DA,0x03DB}, /* 03DA */
+ {0x03DC,0x03DD},{0x03DC,0x03DD}, /* 03DC */
+ {0x03DE,0x03DF},{0x03DE,0x03DF}, /* 03DE */
+ {0x03E0,0x03E1},{0x03E0,0x03E1}, /* 03E0 */
+ {0x03E2,0x03E3},{0x03E2,0x03E3}, /* 03E2 */
+ {0x03E4,0x03E5},{0x03E4,0x03E5}, /* 03E4 */
+ {0x03E6,0x03E7},{0x03E6,0x03E7}, /* 03E6 */
+ {0x03E8,0x03E9},{0x03E8,0x03E9}, /* 03E8 */
+ {0x03EA,0x03EB},{0x03EA,0x03EB}, /* 03EA */
+ {0x03EC,0x03ED},{0x03EC,0x03ED}, /* 03EC */
+ {0x03EE,0x03EF},{0x03EE,0x03EF}, /* 03EE */
+ {0x039A,0x03F0},{0x03A1,0x03F1}, /* 03F0 */
+ {0x03F9,0x03F2},{0x03F3,0x03F3}, /* 03F2 */
+ {0x03F4,0x03B8},{0x0395,0x03F5}, /* 03F4 */
+ {0x03F6,0x03F6},{0x03F7,0x03F8}, /* 03F6 */
+ {0x03F7,0x03F8},{0x03F9,0x03F2}, /* 03F8 */
+ {0x03FA,0x03FB},{0x03FA,0x03FB}, /* 03FA */
+ {0x03FC,0x03FC},{0x03FD,0x037B}, /* 03FC */
+ {0x03FE,0x037C},{0x03FF,0x037D} /* 03FE */
+};
+
+static const MY_CASEFOLD_CHARACTER u520_casefold_page04[256]={
+ {0x0400,0x0450},{0x0401,0x0451}, /* 0400 */
+ {0x0402,0x0452},{0x0403,0x0453}, /* 0402 */
+ {0x0404,0x0454},{0x0405,0x0455}, /* 0404 */
+ {0x0406,0x0456},{0x0407,0x0457}, /* 0406 */
+ {0x0408,0x0458},{0x0409,0x0459}, /* 0408 */
+ {0x040A,0x045A},{0x040B,0x045B}, /* 040A */
+ {0x040C,0x045C},{0x040D,0x045D}, /* 040C */
+ {0x040E,0x045E},{0x040F,0x045F}, /* 040E */
+ {0x0410,0x0430},{0x0411,0x0431}, /* 0410 */
+ {0x0412,0x0432},{0x0413,0x0433}, /* 0412 */
+ {0x0414,0x0434},{0x0415,0x0435}, /* 0414 */
+ {0x0416,0x0436},{0x0417,0x0437}, /* 0416 */
+ {0x0418,0x0438},{0x0419,0x0439}, /* 0418 */
+ {0x041A,0x043A},{0x041B,0x043B}, /* 041A */
+ {0x041C,0x043C},{0x041D,0x043D}, /* 041C */
+ {0x041E,0x043E},{0x041F,0x043F}, /* 041E */
+ {0x0420,0x0440},{0x0421,0x0441}, /* 0420 */
+ {0x0422,0x0442},{0x0423,0x0443}, /* 0422 */
+ {0x0424,0x0444},{0x0425,0x0445}, /* 0424 */
+ {0x0426,0x0446},{0x0427,0x0447}, /* 0426 */
+ {0x0428,0x0448},{0x0429,0x0449}, /* 0428 */
+ {0x042A,0x044A},{0x042B,0x044B}, /* 042A */
+ {0x042C,0x044C},{0x042D,0x044D}, /* 042C */
+ {0x042E,0x044E},{0x042F,0x044F}, /* 042E */
+ {0x0410,0x0430},{0x0411,0x0431}, /* 0430 */
+ {0x0412,0x0432},{0x0413,0x0433}, /* 0432 */
+ {0x0414,0x0434},{0x0415,0x0435}, /* 0434 */
+ {0x0416,0x0436},{0x0417,0x0437}, /* 0436 */
+ {0x0418,0x0438},{0x0419,0x0439}, /* 0438 */
+ {0x041A,0x043A},{0x041B,0x043B}, /* 043A */
+ {0x041C,0x043C},{0x041D,0x043D}, /* 043C */
+ {0x041E,0x043E},{0x041F,0x043F}, /* 043E */
+ {0x0420,0x0440},{0x0421,0x0441}, /* 0440 */
+ {0x0422,0x0442},{0x0423,0x0443}, /* 0442 */
+ {0x0424,0x0444},{0x0425,0x0445}, /* 0444 */
+ {0x0426,0x0446},{0x0427,0x0447}, /* 0446 */
+ {0x0428,0x0448},{0x0429,0x0449}, /* 0448 */
+ {0x042A,0x044A},{0x042B,0x044B}, /* 044A */
+ {0x042C,0x044C},{0x042D,0x044D}, /* 044C */
+ {0x042E,0x044E},{0x042F,0x044F}, /* 044E */
+ {0x0400,0x0450},{0x0401,0x0451}, /* 0450 */
+ {0x0402,0x0452},{0x0403,0x0453}, /* 0452 */
+ {0x0404,0x0454},{0x0405,0x0455}, /* 0454 */
+ {0x0406,0x0456},{0x0407,0x0457}, /* 0456 */
+ {0x0408,0x0458},{0x0409,0x0459}, /* 0458 */
+ {0x040A,0x045A},{0x040B,0x045B}, /* 045A */
+ {0x040C,0x045C},{0x040D,0x045D}, /* 045C */
+ {0x040E,0x045E},{0x040F,0x045F}, /* 045E */
+ {0x0460,0x0461},{0x0460,0x0461}, /* 0460 */
+ {0x0462,0x0463},{0x0462,0x0463}, /* 0462 */
+ {0x0464,0x0465},{0x0464,0x0465}, /* 0464 */
+ {0x0466,0x0467},{0x0466,0x0467}, /* 0466 */
+ {0x0468,0x0469},{0x0468,0x0469}, /* 0468 */
+ {0x046A,0x046B},{0x046A,0x046B}, /* 046A */
+ {0x046C,0x046D},{0x046C,0x046D}, /* 046C */
+ {0x046E,0x046F},{0x046E,0x046F}, /* 046E */
+ {0x0470,0x0471},{0x0470,0x0471}, /* 0470 */
+ {0x0472,0x0473},{0x0472,0x0473}, /* 0472 */
+ {0x0474,0x0475},{0x0474,0x0475}, /* 0474 */
+ {0x0476,0x0477},{0x0476,0x0477}, /* 0476 */
+ {0x0478,0x0479},{0x0478,0x0479}, /* 0478 */
+ {0x047A,0x047B},{0x047A,0x047B}, /* 047A */
+ {0x047C,0x047D},{0x047C,0x047D}, /* 047C */
+ {0x047E,0x047F},{0x047E,0x047F}, /* 047E */
+ {0x0480,0x0481},{0x0480,0x0481}, /* 0480 */
+ {0x0482,0x0482},{0x0483,0x0483}, /* 0482 */
+ {0x0484,0x0484},{0x0485,0x0485}, /* 0484 */
+ {0x0486,0x0486},{0x0487,0x0487}, /* 0486 */
+ {0x0488,0x0488},{0x0489,0x0489}, /* 0488 */
+ {0x048A,0x048B},{0x048A,0x048B}, /* 048A */
+ {0x048C,0x048D},{0x048C,0x048D}, /* 048C */
+ {0x048E,0x048F},{0x048E,0x048F}, /* 048E */
+ {0x0490,0x0491},{0x0490,0x0491}, /* 0490 */
+ {0x0492,0x0493},{0x0492,0x0493}, /* 0492 */
+ {0x0494,0x0495},{0x0494,0x0495}, /* 0494 */
+ {0x0496,0x0497},{0x0496,0x0497}, /* 0496 */
+ {0x0498,0x0499},{0x0498,0x0499}, /* 0498 */
+ {0x049A,0x049B},{0x049A,0x049B}, /* 049A */
+ {0x049C,0x049D},{0x049C,0x049D}, /* 049C */
+ {0x049E,0x049F},{0x049E,0x049F}, /* 049E */
+ {0x04A0,0x04A1},{0x04A0,0x04A1}, /* 04A0 */
+ {0x04A2,0x04A3},{0x04A2,0x04A3}, /* 04A2 */
+ {0x04A4,0x04A5},{0x04A4,0x04A5}, /* 04A4 */
+ {0x04A6,0x04A7},{0x04A6,0x04A7}, /* 04A6 */
+ {0x04A8,0x04A9},{0x04A8,0x04A9}, /* 04A8 */
+ {0x04AA,0x04AB},{0x04AA,0x04AB}, /* 04AA */
+ {0x04AC,0x04AD},{0x04AC,0x04AD}, /* 04AC */
+ {0x04AE,0x04AF},{0x04AE,0x04AF}, /* 04AE */
+ {0x04B0,0x04B1},{0x04B0,0x04B1}, /* 04B0 */
+ {0x04B2,0x04B3},{0x04B2,0x04B3}, /* 04B2 */
+ {0x04B4,0x04B5},{0x04B4,0x04B5}, /* 04B4 */
+ {0x04B6,0x04B7},{0x04B6,0x04B7}, /* 04B6 */
+ {0x04B8,0x04B9},{0x04B8,0x04B9}, /* 04B8 */
+ {0x04BA,0x04BB},{0x04BA,0x04BB}, /* 04BA */
+ {0x04BC,0x04BD},{0x04BC,0x04BD}, /* 04BC */
+ {0x04BE,0x04BF},{0x04BE,0x04BF}, /* 04BE */
+ {0x04C0,0x04CF},{0x04C1,0x04C2}, /* 04C0 */
+ {0x04C1,0x04C2},{0x04C3,0x04C4}, /* 04C2 */
+ {0x04C3,0x04C4},{0x04C5,0x04C6}, /* 04C4 */
+ {0x04C5,0x04C6},{0x04C7,0x04C8}, /* 04C6 */
+ {0x04C7,0x04C8},{0x04C9,0x04CA}, /* 04C8 */
+ {0x04C9,0x04CA},{0x04CB,0x04CC}, /* 04CA */
+ {0x04CB,0x04CC},{0x04CD,0x04CE}, /* 04CC */
+ {0x04CD,0x04CE},{0x04C0,0x04CF}, /* 04CE */
+ {0x04D0,0x04D1},{0x04D0,0x04D1}, /* 04D0 */
+ {0x04D2,0x04D3},{0x04D2,0x04D3}, /* 04D2 */
+ {0x04D4,0x04D5},{0x04D4,0x04D5}, /* 04D4 */
+ {0x04D6,0x04D7},{0x04D6,0x04D7}, /* 04D6 */
+ {0x04D8,0x04D9},{0x04D8,0x04D9}, /* 04D8 */
+ {0x04DA,0x04DB},{0x04DA,0x04DB}, /* 04DA */
+ {0x04DC,0x04DD},{0x04DC,0x04DD}, /* 04DC */
+ {0x04DE,0x04DF},{0x04DE,0x04DF}, /* 04DE */
+ {0x04E0,0x04E1},{0x04E0,0x04E1}, /* 04E0 */
+ {0x04E2,0x04E3},{0x04E2,0x04E3}, /* 04E2 */
+ {0x04E4,0x04E5},{0x04E4,0x04E5}, /* 04E4 */
+ {0x04E6,0x04E7},{0x04E6,0x04E7}, /* 04E6 */
+ {0x04E8,0x04E9},{0x04E8,0x04E9}, /* 04E8 */
+ {0x04EA,0x04EB},{0x04EA,0x04EB}, /* 04EA */
+ {0x04EC,0x04ED},{0x04EC,0x04ED}, /* 04EC */
+ {0x04EE,0x04EF},{0x04EE,0x04EF}, /* 04EE */
+ {0x04F0,0x04F1},{0x04F0,0x04F1}, /* 04F0 */
+ {0x04F2,0x04F3},{0x04F2,0x04F3}, /* 04F2 */
+ {0x04F4,0x04F5},{0x04F4,0x04F5}, /* 04F4 */
+ {0x04F6,0x04F7},{0x04F6,0x04F7}, /* 04F6 */
+ {0x04F8,0x04F9},{0x04F8,0x04F9}, /* 04F8 */
+ {0x04FA,0x04FB},{0x04FA,0x04FB}, /* 04FA */
+ {0x04FC,0x04FD},{0x04FC,0x04FD}, /* 04FC */
+ {0x04FE,0x04FF},{0x04FE,0x04FF} /* 04FE */
+};
+
+static const MY_CASEFOLD_CHARACTER u520_casefold_page05[256]={
+ {0x0500,0x0501},{0x0500,0x0501}, /* 0500 */
+ {0x0502,0x0503},{0x0502,0x0503}, /* 0502 */
+ {0x0504,0x0505},{0x0504,0x0505}, /* 0504 */
+ {0x0506,0x0507},{0x0506,0x0507}, /* 0506 */
+ {0x0508,0x0509},{0x0508,0x0509}, /* 0508 */
+ {0x050A,0x050B},{0x050A,0x050B}, /* 050A */
+ {0x050C,0x050D},{0x050C,0x050D}, /* 050C */
+ {0x050E,0x050F},{0x050E,0x050F}, /* 050E */
+ {0x0510,0x0511},{0x0510,0x0511}, /* 0510 */
+ {0x0512,0x0513},{0x0512,0x0513}, /* 0512 */
+ {0x0514,0x0515},{0x0514,0x0515}, /* 0514 */
+ {0x0516,0x0517},{0x0516,0x0517}, /* 0516 */
+ {0x0518,0x0519},{0x0518,0x0519}, /* 0518 */
+ {0x051A,0x051B},{0x051A,0x051B}, /* 051A */
+ {0x051C,0x051D},{0x051C,0x051D}, /* 051C */
+ {0x051E,0x051F},{0x051E,0x051F}, /* 051E */
+ {0x0520,0x0521},{0x0520,0x0521}, /* 0520 */
+ {0x0522,0x0523},{0x0522,0x0523}, /* 0522 */
+ {0x0524,0x0525},{0x0524,0x0525}, /* 0524 */
+ {0x0526,0x0526},{0x0527,0x0527}, /* 0526 */
+ {0x0528,0x0528},{0x0529,0x0529}, /* 0528 */
+ {0x052A,0x052A},{0x052B,0x052B}, /* 052A */
+ {0x052C,0x052C},{0x052D,0x052D}, /* 052C */
+ {0x052E,0x052E},{0x052F,0x052F}, /* 052E */
+ {0x0530,0x0530},{0x0531,0x0561}, /* 0530 */
+ {0x0532,0x0562},{0x0533,0x0563}, /* 0532 */
+ {0x0534,0x0564},{0x0535,0x0565}, /* 0534 */
+ {0x0536,0x0566},{0x0537,0x0567}, /* 0536 */
+ {0x0538,0x0568},{0x0539,0x0569}, /* 0538 */
+ {0x053A,0x056A},{0x053B,0x056B}, /* 053A */
+ {0x053C,0x056C},{0x053D,0x056D}, /* 053C */
+ {0x053E,0x056E},{0x053F,0x056F}, /* 053E */
+ {0x0540,0x0570},{0x0541,0x0571}, /* 0540 */
+ {0x0542,0x0572},{0x0543,0x0573}, /* 0542 */
+ {0x0544,0x0574},{0x0545,0x0575}, /* 0544 */
+ {0x0546,0x0576},{0x0547,0x0577}, /* 0546 */
+ {0x0548,0x0578},{0x0549,0x0579}, /* 0548 */
+ {0x054A,0x057A},{0x054B,0x057B}, /* 054A */
+ {0x054C,0x057C},{0x054D,0x057D}, /* 054C */
+ {0x054E,0x057E},{0x054F,0x057F}, /* 054E */
+ {0x0550,0x0580},{0x0551,0x0581}, /* 0550 */
+ {0x0552,0x0582},{0x0553,0x0583}, /* 0552 */
+ {0x0554,0x0584},{0x0555,0x0585}, /* 0554 */
+ {0x0556,0x0586},{0x0557,0x0557}, /* 0556 */
+ {0x0558,0x0558},{0x0559,0x0559}, /* 0558 */
+ {0x055A,0x055A},{0x055B,0x055B}, /* 055A */
+ {0x055C,0x055C},{0x055D,0x055D}, /* 055C */
+ {0x055E,0x055E},{0x055F,0x055F}, /* 055E */
+ {0x0560,0x0560},{0x0531,0x0561}, /* 0560 */
+ {0x0532,0x0562},{0x0533,0x0563}, /* 0562 */
+ {0x0534,0x0564},{0x0535,0x0565}, /* 0564 */
+ {0x0536,0x0566},{0x0537,0x0567}, /* 0566 */
+ {0x0538,0x0568},{0x0539,0x0569}, /* 0568 */
+ {0x053A,0x056A},{0x053B,0x056B}, /* 056A */
+ {0x053C,0x056C},{0x053D,0x056D}, /* 056C */
+ {0x053E,0x056E},{0x053F,0x056F}, /* 056E */
+ {0x0540,0x0570},{0x0541,0x0571}, /* 0570 */
+ {0x0542,0x0572},{0x0543,0x0573}, /* 0572 */
+ {0x0544,0x0574},{0x0545,0x0575}, /* 0574 */
+ {0x0546,0x0576},{0x0547,0x0577}, /* 0576 */
+ {0x0548,0x0578},{0x0549,0x0579}, /* 0578 */
+ {0x054A,0x057A},{0x054B,0x057B}, /* 057A */
+ {0x054C,0x057C},{0x054D,0x057D}, /* 057C */
+ {0x054E,0x057E},{0x054F,0x057F}, /* 057E */
+ {0x0550,0x0580},{0x0551,0x0581}, /* 0580 */
+ {0x0552,0x0582},{0x0553,0x0583}, /* 0582 */
+ {0x0554,0x0584},{0x0555,0x0585}, /* 0584 */
+ {0x0556,0x0586},{0x0587,0x0587}, /* 0586 */
+ {0x0588,0x0588},{0x0589,0x0589}, /* 0588 */
+ {0x058A,0x058A},{0x058B,0x058B}, /* 058A */
+ {0x058C,0x058C},{0x058D,0x058D}, /* 058C */
+ {0x058E,0x058E},{0x058F,0x058F}, /* 058E */
+ {0x0590,0x0590},{0x0591,0x0591}, /* 0590 */
+ {0x0592,0x0592},{0x0593,0x0593}, /* 0592 */
+ {0x0594,0x0594},{0x0595,0x0595}, /* 0594 */
+ {0x0596,0x0596},{0x0597,0x0597}, /* 0596 */
+ {0x0598,0x0598},{0x0599,0x0599}, /* 0598 */
+ {0x059A,0x059A},{0x059B,0x059B}, /* 059A */
+ {0x059C,0x059C},{0x059D,0x059D}, /* 059C */
+ {0x059E,0x059E},{0x059F,0x059F}, /* 059E */
+ {0x05A0,0x05A0},{0x05A1,0x05A1}, /* 05A0 */
+ {0x05A2,0x05A2},{0x05A3,0x05A3}, /* 05A2 */
+ {0x05A4,0x05A4},{0x05A5,0x05A5}, /* 05A4 */
+ {0x05A6,0x05A6},{0x05A7,0x05A7}, /* 05A6 */
+ {0x05A8,0x05A8},{0x05A9,0x05A9}, /* 05A8 */
+ {0x05AA,0x05AA},{0x05AB,0x05AB}, /* 05AA */
+ {0x05AC,0x05AC},{0x05AD,0x05AD}, /* 05AC */
+ {0x05AE,0x05AE},{0x05AF,0x05AF}, /* 05AE */
+ {0x05B0,0x05B0},{0x05B1,0x05B1}, /* 05B0 */
+ {0x05B2,0x05B2},{0x05B3,0x05B3}, /* 05B2 */
+ {0x05B4,0x05B4},{0x05B5,0x05B5}, /* 05B4 */
+ {0x05B6,0x05B6},{0x05B7,0x05B7}, /* 05B6 */
+ {0x05B8,0x05B8},{0x05B9,0x05B9}, /* 05B8 */
+ {0x05BA,0x05BA},{0x05BB,0x05BB}, /* 05BA */
+ {0x05BC,0x05BC},{0x05BD,0x05BD}, /* 05BC */
+ {0x05BE,0x05BE},{0x05BF,0x05BF}, /* 05BE */
+ {0x05C0,0x05C0},{0x05C1,0x05C1}, /* 05C0 */
+ {0x05C2,0x05C2},{0x05C3,0x05C3}, /* 05C2 */
+ {0x05C4,0x05C4},{0x05C5,0x05C5}, /* 05C4 */
+ {0x05C6,0x05C6},{0x05C7,0x05C7}, /* 05C6 */
+ {0x05C8,0x05C8},{0x05C9,0x05C9}, /* 05C8 */
+ {0x05CA,0x05CA},{0x05CB,0x05CB}, /* 05CA */
+ {0x05CC,0x05CC},{0x05CD,0x05CD}, /* 05CC */
+ {0x05CE,0x05CE},{0x05CF,0x05CF}, /* 05CE */
+ {0x05D0,0x05D0},{0x05D1,0x05D1}, /* 05D0 */
+ {0x05D2,0x05D2},{0x05D3,0x05D3}, /* 05D2 */
+ {0x05D4,0x05D4},{0x05D5,0x05D5}, /* 05D4 */
+ {0x05D6,0x05D6},{0x05D7,0x05D7}, /* 05D6 */
+ {0x05D8,0x05D8},{0x05D9,0x05D9}, /* 05D8 */
+ {0x05DA,0x05DA},{0x05DB,0x05DB}, /* 05DA */
+ {0x05DC,0x05DC},{0x05DD,0x05DD}, /* 05DC */
+ {0x05DE,0x05DE},{0x05DF,0x05DF}, /* 05DE */
+ {0x05E0,0x05E0},{0x05E1,0x05E1}, /* 05E0 */
+ {0x05E2,0x05E2},{0x05E3,0x05E3}, /* 05E2 */
+ {0x05E4,0x05E4},{0x05E5,0x05E5}, /* 05E4 */
+ {0x05E6,0x05E6},{0x05E7,0x05E7}, /* 05E6 */
+ {0x05E8,0x05E8},{0x05E9,0x05E9}, /* 05E8 */
+ {0x05EA,0x05EA},{0x05EB,0x05EB}, /* 05EA */
+ {0x05EC,0x05EC},{0x05ED,0x05ED}, /* 05EC */
+ {0x05EE,0x05EE},{0x05EF,0x05EF}, /* 05EE */
+ {0x05F0,0x05F0},{0x05F1,0x05F1}, /* 05F0 */
+ {0x05F2,0x05F2},{0x05F3,0x05F3}, /* 05F2 */
+ {0x05F4,0x05F4},{0x05F5,0x05F5}, /* 05F4 */
+ {0x05F6,0x05F6},{0x05F7,0x05F7}, /* 05F6 */
+ {0x05F8,0x05F8},{0x05F9,0x05F9}, /* 05F8 */
+ {0x05FA,0x05FA},{0x05FB,0x05FB}, /* 05FA */
+ {0x05FC,0x05FC},{0x05FD,0x05FD}, /* 05FC */
+ {0x05FE,0x05FE},{0x05FF,0x05FF} /* 05FE */
+};
+
+static const MY_CASEFOLD_CHARACTER u520_casefold_page06[256]={ /* This page is dummy */
+ {0x0600,0x0600},{0x0601,0x0601}, /* 0600 */
+ {0x0602,0x0602},{0x0603,0x0603}, /* 0602 */
+ {0x0604,0x0604},{0x0605,0x0605}, /* 0604 */
+ {0x0606,0x0606},{0x0607,0x0607}, /* 0606 */
+ {0x0608,0x0608},{0x0609,0x0609}, /* 0608 */
+ {0x060A,0x060A},{0x060B,0x060B}, /* 060A */
+ {0x060C,0x060C},{0x060D,0x060D}, /* 060C */
+ {0x060E,0x060E},{0x060F,0x060F}, /* 060E */
+ {0x0610,0x0610},{0x0611,0x0611}, /* 0610 */
+ {0x0612,0x0612},{0x0613,0x0613}, /* 0612 */
+ {0x0614,0x0614},{0x0615,0x0615}, /* 0614 */
+ {0x0616,0x0616},{0x0617,0x0617}, /* 0616 */
+ {0x0618,0x0618},{0x0619,0x0619}, /* 0618 */
+ {0x061A,0x061A},{0x061B,0x061B}, /* 061A */
+ {0x061C,0x061C},{0x061D,0x061D}, /* 061C */
+ {0x061E,0x061E},{0x061F,0x061F}, /* 061E */
+ {0x0620,0x0620},{0x0621,0x0621}, /* 0620 */
+ {0x0622,0x0622},{0x0623,0x0623}, /* 0622 */
+ {0x0624,0x0624},{0x0625,0x0625}, /* 0624 */
+ {0x0626,0x0626},{0x0627,0x0627}, /* 0626 */
+ {0x0628,0x0628},{0x0629,0x0629}, /* 0628 */
+ {0x062A,0x062A},{0x062B,0x062B}, /* 062A */
+ {0x062C,0x062C},{0x062D,0x062D}, /* 062C */
+ {0x062E,0x062E},{0x062F,0x062F}, /* 062E */
+ {0x0630,0x0630},{0x0631,0x0631}, /* 0630 */
+ {0x0632,0x0632},{0x0633,0x0633}, /* 0632 */
+ {0x0634,0x0634},{0x0635,0x0635}, /* 0634 */
+ {0x0636,0x0636},{0x0637,0x0637}, /* 0636 */
+ {0x0638,0x0638},{0x0639,0x0639}, /* 0638 */
+ {0x063A,0x063A},{0x063B,0x063B}, /* 063A */
+ {0x063C,0x063C},{0x063D,0x063D}, /* 063C */
+ {0x063E,0x063E},{0x063F,0x063F}, /* 063E */
+ {0x0640,0x0640},{0x0641,0x0641}, /* 0640 */
+ {0x0642,0x0642},{0x0643,0x0643}, /* 0642 */
+ {0x0644,0x0644},{0x0645,0x0645}, /* 0644 */
+ {0x0646,0x0646},{0x0647,0x0647}, /* 0646 */
+ {0x0648,0x0648},{0x0649,0x0649}, /* 0648 */
+ {0x064A,0x064A},{0x064B,0x064B}, /* 064A */
+ {0x064C,0x064C},{0x064D,0x064D}, /* 064C */
+ {0x064E,0x064E},{0x064F,0x064F}, /* 064E */
+ {0x0650,0x0650},{0x0651,0x0651}, /* 0650 */
+ {0x0652,0x0652},{0x0653,0x0653}, /* 0652 */
+ {0x0654,0x0654},{0x0655,0x0655}, /* 0654 */
+ {0x0656,0x0656},{0x0657,0x0657}, /* 0656 */
+ {0x0658,0x0658},{0x0659,0x0659}, /* 0658 */
+ {0x065A,0x065A},{0x065B,0x065B}, /* 065A */
+ {0x065C,0x065C},{0x065D,0x065D}, /* 065C */
+ {0x065E,0x065E},{0x065F,0x065F}, /* 065E */
+ {0x0660,0x0660},{0x0661,0x0661}, /* 0660 */
+ {0x0662,0x0662},{0x0663,0x0663}, /* 0662 */
+ {0x0664,0x0664},{0x0665,0x0665}, /* 0664 */
+ {0x0666,0x0666},{0x0667,0x0667}, /* 0666 */
+ {0x0668,0x0668},{0x0669,0x0669}, /* 0668 */
+ {0x066A,0x066A},{0x066B,0x066B}, /* 066A */
+ {0x066C,0x066C},{0x066D,0x066D}, /* 066C */
+ {0x066E,0x066E},{0x066F,0x066F}, /* 066E */
+ {0x0670,0x0670},{0x0671,0x0671}, /* 0670 */
+ {0x0672,0x0672},{0x0673,0x0673}, /* 0672 */
+ {0x0674,0x0674},{0x0675,0x0675}, /* 0674 */
+ {0x0676,0x0676},{0x0677,0x0677}, /* 0676 */
+ {0x0678,0x0678},{0x0679,0x0679}, /* 0678 */
+ {0x067A,0x067A},{0x067B,0x067B}, /* 067A */
+ {0x067C,0x067C},{0x067D,0x067D}, /* 067C */
+ {0x067E,0x067E},{0x067F,0x067F}, /* 067E */
+ {0x0680,0x0680},{0x0681,0x0681}, /* 0680 */
+ {0x0682,0x0682},{0x0683,0x0683}, /* 0682 */
+ {0x0684,0x0684},{0x0685,0x0685}, /* 0684 */
+ {0x0686,0x0686},{0x0687,0x0687}, /* 0686 */
+ {0x0688,0x0688},{0x0689,0x0689}, /* 0688 */
+ {0x068A,0x068A},{0x068B,0x068B}, /* 068A */
+ {0x068C,0x068C},{0x068D,0x068D}, /* 068C */
+ {0x068E,0x068E},{0x068F,0x068F}, /* 068E */
+ {0x0690,0x0690},{0x0691,0x0691}, /* 0690 */
+ {0x0692,0x0692},{0x0693,0x0693}, /* 0692 */
+ {0x0694,0x0694},{0x0695,0x0695}, /* 0694 */
+ {0x0696,0x0696},{0x0697,0x0697}, /* 0696 */
+ {0x0698,0x0698},{0x0699,0x0699}, /* 0698 */
+ {0x069A,0x069A},{0x069B,0x069B}, /* 069A */
+ {0x069C,0x069C},{0x069D,0x069D}, /* 069C */
+ {0x069E,0x069E},{0x069F,0x069F}, /* 069E */
+ {0x06A0,0x06A0},{0x06A1,0x06A1}, /* 06A0 */
+ {0x06A2,0x06A2},{0x06A3,0x06A3}, /* 06A2 */
+ {0x06A4,0x06A4},{0x06A5,0x06A5}, /* 06A4 */
+ {0x06A6,0x06A6},{0x06A7,0x06A7}, /* 06A6 */
+ {0x06A8,0x06A8},{0x06A9,0x06A9}, /* 06A8 */
+ {0x06AA,0x06AA},{0x06AB,0x06AB}, /* 06AA */
+ {0x06AC,0x06AC},{0x06AD,0x06AD}, /* 06AC */
+ {0x06AE,0x06AE},{0x06AF,0x06AF}, /* 06AE */
+ {0x06B0,0x06B0},{0x06B1,0x06B1}, /* 06B0 */
+ {0x06B2,0x06B2},{0x06B3,0x06B3}, /* 06B2 */
+ {0x06B4,0x06B4},{0x06B5,0x06B5}, /* 06B4 */
+ {0x06B6,0x06B6},{0x06B7,0x06B7}, /* 06B6 */
+ {0x06B8,0x06B8},{0x06B9,0x06B9}, /* 06B8 */
+ {0x06BA,0x06BA},{0x06BB,0x06BB}, /* 06BA */
+ {0x06BC,0x06BC},{0x06BD,0x06BD}, /* 06BC */
+ {0x06BE,0x06BE},{0x06BF,0x06BF}, /* 06BE */
+ {0x06C0,0x06C0},{0x06C1,0x06C1}, /* 06C0 */
+ {0x06C2,0x06C2},{0x06C3,0x06C3}, /* 06C2 */
+ {0x06C4,0x06C4},{0x06C5,0x06C5}, /* 06C4 */
+ {0x06C6,0x06C6},{0x06C7,0x06C7}, /* 06C6 */
+ {0x06C8,0x06C8},{0x06C9,0x06C9}, /* 06C8 */
+ {0x06CA,0x06CA},{0x06CB,0x06CB}, /* 06CA */
+ {0x06CC,0x06CC},{0x06CD,0x06CD}, /* 06CC */
+ {0x06CE,0x06CE},{0x06CF,0x06CF}, /* 06CE */
+ {0x06D0,0x06D0},{0x06D1,0x06D1}, /* 06D0 */
+ {0x06D2,0x06D2},{0x06D3,0x06D3}, /* 06D2 */
+ {0x06D4,0x06D4},{0x06D5,0x06D5}, /* 06D4 */
+ {0x06D6,0x06D6},{0x06D7,0x06D7}, /* 06D6 */
+ {0x06D8,0x06D8},{0x06D9,0x06D9}, /* 06D8 */
+ {0x06DA,0x06DA},{0x06DB,0x06DB}, /* 06DA */
+ {0x06DC,0x06DC},{0x06DD,0x06DD}, /* 06DC */
+ {0x06DE,0x06DE},{0x06DF,0x06DF}, /* 06DE */
+ {0x06E0,0x06E0},{0x06E1,0x06E1}, /* 06E0 */
+ {0x06E2,0x06E2},{0x06E3,0x06E3}, /* 06E2 */
+ {0x06E4,0x06E4},{0x06E5,0x06E5}, /* 06E4 */
+ {0x06E6,0x06E6},{0x06E7,0x06E7}, /* 06E6 */
+ {0x06E8,0x06E8},{0x06E9,0x06E9}, /* 06E8 */
+ {0x06EA,0x06EA},{0x06EB,0x06EB}, /* 06EA */
+ {0x06EC,0x06EC},{0x06ED,0x06ED}, /* 06EC */
+ {0x06EE,0x06EE},{0x06EF,0x06EF}, /* 06EE */
+ {0x06F0,0x06F0},{0x06F1,0x06F1}, /* 06F0 */
+ {0x06F2,0x06F2},{0x06F3,0x06F3}, /* 06F2 */
+ {0x06F4,0x06F4},{0x06F5,0x06F5}, /* 06F4 */
+ {0x06F6,0x06F6},{0x06F7,0x06F7}, /* 06F6 */
+ {0x06F8,0x06F8},{0x06F9,0x06F9}, /* 06F8 */
+ {0x06FA,0x06FA},{0x06FB,0x06FB}, /* 06FA */
+ {0x06FC,0x06FC},{0x06FD,0x06FD}, /* 06FC */
+ {0x06FE,0x06FE},{0x06FF,0x06FF} /* 06FE */
+};
+
+static const MY_CASEFOLD_CHARACTER u520_casefold_page07[256]={ /* This page is dummy */
+ {0x0700,0x0700},{0x0701,0x0701}, /* 0700 */
+ {0x0702,0x0702},{0x0703,0x0703}, /* 0702 */
+ {0x0704,0x0704},{0x0705,0x0705}, /* 0704 */
+ {0x0706,0x0706},{0x0707,0x0707}, /* 0706 */
+ {0x0708,0x0708},{0x0709,0x0709}, /* 0708 */
+ {0x070A,0x070A},{0x070B,0x070B}, /* 070A */
+ {0x070C,0x070C},{0x070D,0x070D}, /* 070C */
+ {0x070E,0x070E},{0x070F,0x070F}, /* 070E */
+ {0x0710,0x0710},{0x0711,0x0711}, /* 0710 */
+ {0x0712,0x0712},{0x0713,0x0713}, /* 0712 */
+ {0x0714,0x0714},{0x0715,0x0715}, /* 0714 */
+ {0x0716,0x0716},{0x0717,0x0717}, /* 0716 */
+ {0x0718,0x0718},{0x0719,0x0719}, /* 0718 */
+ {0x071A,0x071A},{0x071B,0x071B}, /* 071A */
+ {0x071C,0x071C},{0x071D,0x071D}, /* 071C */
+ {0x071E,0x071E},{0x071F,0x071F}, /* 071E */
+ {0x0720,0x0720},{0x0721,0x0721}, /* 0720 */
+ {0x0722,0x0722},{0x0723,0x0723}, /* 0722 */
+ {0x0724,0x0724},{0x0725,0x0725}, /* 0724 */
+ {0x0726,0x0726},{0x0727,0x0727}, /* 0726 */
+ {0x0728,0x0728},{0x0729,0x0729}, /* 0728 */
+ {0x072A,0x072A},{0x072B,0x072B}, /* 072A */
+ {0x072C,0x072C},{0x072D,0x072D}, /* 072C */
+ {0x072E,0x072E},{0x072F,0x072F}, /* 072E */
+ {0x0730,0x0730},{0x0731,0x0731}, /* 0730 */
+ {0x0732,0x0732},{0x0733,0x0733}, /* 0732 */
+ {0x0734,0x0734},{0x0735,0x0735}, /* 0734 */
+ {0x0736,0x0736},{0x0737,0x0737}, /* 0736 */
+ {0x0738,0x0738},{0x0739,0x0739}, /* 0738 */
+ {0x073A,0x073A},{0x073B,0x073B}, /* 073A */
+ {0x073C,0x073C},{0x073D,0x073D}, /* 073C */
+ {0x073E,0x073E},{0x073F,0x073F}, /* 073E */
+ {0x0740,0x0740},{0x0741,0x0741}, /* 0740 */
+ {0x0742,0x0742},{0x0743,0x0743}, /* 0742 */
+ {0x0744,0x0744},{0x0745,0x0745}, /* 0744 */
+ {0x0746,0x0746},{0x0747,0x0747}, /* 0746 */
+ {0x0748,0x0748},{0x0749,0x0749}, /* 0748 */
+ {0x074A,0x074A},{0x074B,0x074B}, /* 074A */
+ {0x074C,0x074C},{0x074D,0x074D}, /* 074C */
+ {0x074E,0x074E},{0x074F,0x074F}, /* 074E */
+ {0x0750,0x0750},{0x0751,0x0751}, /* 0750 */
+ {0x0752,0x0752},{0x0753,0x0753}, /* 0752 */
+ {0x0754,0x0754},{0x0755,0x0755}, /* 0754 */
+ {0x0756,0x0756},{0x0757,0x0757}, /* 0756 */
+ {0x0758,0x0758},{0x0759,0x0759}, /* 0758 */
+ {0x075A,0x075A},{0x075B,0x075B}, /* 075A */
+ {0x075C,0x075C},{0x075D,0x075D}, /* 075C */
+ {0x075E,0x075E},{0x075F,0x075F}, /* 075E */
+ {0x0760,0x0760},{0x0761,0x0761}, /* 0760 */
+ {0x0762,0x0762},{0x0763,0x0763}, /* 0762 */
+ {0x0764,0x0764},{0x0765,0x0765}, /* 0764 */
+ {0x0766,0x0766},{0x0767,0x0767}, /* 0766 */
+ {0x0768,0x0768},{0x0769,0x0769}, /* 0768 */
+ {0x076A,0x076A},{0x076B,0x076B}, /* 076A */
+ {0x076C,0x076C},{0x076D,0x076D}, /* 076C */
+ {0x076E,0x076E},{0x076F,0x076F}, /* 076E */
+ {0x0770,0x0770},{0x0771,0x0771}, /* 0770 */
+ {0x0772,0x0772},{0x0773,0x0773}, /* 0772 */
+ {0x0774,0x0774},{0x0775,0x0775}, /* 0774 */
+ {0x0776,0x0776},{0x0777,0x0777}, /* 0776 */
+ {0x0778,0x0778},{0x0779,0x0779}, /* 0778 */
+ {0x077A,0x077A},{0x077B,0x077B}, /* 077A */
+ {0x077C,0x077C},{0x077D,0x077D}, /* 077C */
+ {0x077E,0x077E},{0x077F,0x077F}, /* 077E */
+ {0x0780,0x0780},{0x0781,0x0781}, /* 0780 */
+ {0x0782,0x0782},{0x0783,0x0783}, /* 0782 */
+ {0x0784,0x0784},{0x0785,0x0785}, /* 0784 */
+ {0x0786,0x0786},{0x0787,0x0787}, /* 0786 */
+ {0x0788,0x0788},{0x0789,0x0789}, /* 0788 */
+ {0x078A,0x078A},{0x078B,0x078B}, /* 078A */
+ {0x078C,0x078C},{0x078D,0x078D}, /* 078C */
+ {0x078E,0x078E},{0x078F,0x078F}, /* 078E */
+ {0x0790,0x0790},{0x0791,0x0791}, /* 0790 */
+ {0x0792,0x0792},{0x0793,0x0793}, /* 0792 */
+ {0x0794,0x0794},{0x0795,0x0795}, /* 0794 */
+ {0x0796,0x0796},{0x0797,0x0797}, /* 0796 */
+ {0x0798,0x0798},{0x0799,0x0799}, /* 0798 */
+ {0x079A,0x079A},{0x079B,0x079B}, /* 079A */
+ {0x079C,0x079C},{0x079D,0x079D}, /* 079C */
+ {0x079E,0x079E},{0x079F,0x079F}, /* 079E */
+ {0x07A0,0x07A0},{0x07A1,0x07A1}, /* 07A0 */
+ {0x07A2,0x07A2},{0x07A3,0x07A3}, /* 07A2 */
+ {0x07A4,0x07A4},{0x07A5,0x07A5}, /* 07A4 */
+ {0x07A6,0x07A6},{0x07A7,0x07A7}, /* 07A6 */
+ {0x07A8,0x07A8},{0x07A9,0x07A9}, /* 07A8 */
+ {0x07AA,0x07AA},{0x07AB,0x07AB}, /* 07AA */
+ {0x07AC,0x07AC},{0x07AD,0x07AD}, /* 07AC */
+ {0x07AE,0x07AE},{0x07AF,0x07AF}, /* 07AE */
+ {0x07B0,0x07B0},{0x07B1,0x07B1}, /* 07B0 */
+ {0x07B2,0x07B2},{0x07B3,0x07B3}, /* 07B2 */
+ {0x07B4,0x07B4},{0x07B5,0x07B5}, /* 07B4 */
+ {0x07B6,0x07B6},{0x07B7,0x07B7}, /* 07B6 */
+ {0x07B8,0x07B8},{0x07B9,0x07B9}, /* 07B8 */
+ {0x07BA,0x07BA},{0x07BB,0x07BB}, /* 07BA */
+ {0x07BC,0x07BC},{0x07BD,0x07BD}, /* 07BC */
+ {0x07BE,0x07BE},{0x07BF,0x07BF}, /* 07BE */
+ {0x07C0,0x07C0},{0x07C1,0x07C1}, /* 07C0 */
+ {0x07C2,0x07C2},{0x07C3,0x07C3}, /* 07C2 */
+ {0x07C4,0x07C4},{0x07C5,0x07C5}, /* 07C4 */
+ {0x07C6,0x07C6},{0x07C7,0x07C7}, /* 07C6 */
+ {0x07C8,0x07C8},{0x07C9,0x07C9}, /* 07C8 */
+ {0x07CA,0x07CA},{0x07CB,0x07CB}, /* 07CA */
+ {0x07CC,0x07CC},{0x07CD,0x07CD}, /* 07CC */
+ {0x07CE,0x07CE},{0x07CF,0x07CF}, /* 07CE */
+ {0x07D0,0x07D0},{0x07D1,0x07D1}, /* 07D0 */
+ {0x07D2,0x07D2},{0x07D3,0x07D3}, /* 07D2 */
+ {0x07D4,0x07D4},{0x07D5,0x07D5}, /* 07D4 */
+ {0x07D6,0x07D6},{0x07D7,0x07D7}, /* 07D6 */
+ {0x07D8,0x07D8},{0x07D9,0x07D9}, /* 07D8 */
+ {0x07DA,0x07DA},{0x07DB,0x07DB}, /* 07DA */
+ {0x07DC,0x07DC},{0x07DD,0x07DD}, /* 07DC */
+ {0x07DE,0x07DE},{0x07DF,0x07DF}, /* 07DE */
+ {0x07E0,0x07E0},{0x07E1,0x07E1}, /* 07E0 */
+ {0x07E2,0x07E2},{0x07E3,0x07E3}, /* 07E2 */
+ {0x07E4,0x07E4},{0x07E5,0x07E5}, /* 07E4 */
+ {0x07E6,0x07E6},{0x07E7,0x07E7}, /* 07E6 */
+ {0x07E8,0x07E8},{0x07E9,0x07E9}, /* 07E8 */
+ {0x07EA,0x07EA},{0x07EB,0x07EB}, /* 07EA */
+ {0x07EC,0x07EC},{0x07ED,0x07ED}, /* 07EC */
+ {0x07EE,0x07EE},{0x07EF,0x07EF}, /* 07EE */
+ {0x07F0,0x07F0},{0x07F1,0x07F1}, /* 07F0 */
+ {0x07F2,0x07F2},{0x07F3,0x07F3}, /* 07F2 */
+ {0x07F4,0x07F4},{0x07F5,0x07F5}, /* 07F4 */
+ {0x07F6,0x07F6},{0x07F7,0x07F7}, /* 07F6 */
+ {0x07F8,0x07F8},{0x07F9,0x07F9}, /* 07F8 */
+ {0x07FA,0x07FA},{0x07FB,0x07FB}, /* 07FA */
+ {0x07FC,0x07FC},{0x07FD,0x07FD}, /* 07FC */
+ {0x07FE,0x07FE},{0x07FF,0x07FF} /* 07FE */
+};
+
+static const MY_CASEFOLD_CHARACTER u520_casefold_page10[256]={
+ {0x1000,0x1000},{0x1001,0x1001}, /* 1000 */
+ {0x1002,0x1002},{0x1003,0x1003}, /* 1002 */
+ {0x1004,0x1004},{0x1005,0x1005}, /* 1004 */
+ {0x1006,0x1006},{0x1007,0x1007}, /* 1006 */
+ {0x1008,0x1008},{0x1009,0x1009}, /* 1008 */
+ {0x100A,0x100A},{0x100B,0x100B}, /* 100A */
+ {0x100C,0x100C},{0x100D,0x100D}, /* 100C */
+ {0x100E,0x100E},{0x100F,0x100F}, /* 100E */
+ {0x1010,0x1010},{0x1011,0x1011}, /* 1010 */
+ {0x1012,0x1012},{0x1013,0x1013}, /* 1012 */
+ {0x1014,0x1014},{0x1015,0x1015}, /* 1014 */
+ {0x1016,0x1016},{0x1017,0x1017}, /* 1016 */
+ {0x1018,0x1018},{0x1019,0x1019}, /* 1018 */
+ {0x101A,0x101A},{0x101B,0x101B}, /* 101A */
+ {0x101C,0x101C},{0x101D,0x101D}, /* 101C */
+ {0x101E,0x101E},{0x101F,0x101F}, /* 101E */
+ {0x1020,0x1020},{0x1021,0x1021}, /* 1020 */
+ {0x1022,0x1022},{0x1023,0x1023}, /* 1022 */
+ {0x1024,0x1024},{0x1025,0x1025}, /* 1024 */
+ {0x1026,0x1026},{0x1027,0x1027}, /* 1026 */
+ {0x1028,0x1028},{0x1029,0x1029}, /* 1028 */
+ {0x102A,0x102A},{0x102B,0x102B}, /* 102A */
+ {0x102C,0x102C},{0x102D,0x102D}, /* 102C */
+ {0x102E,0x102E},{0x102F,0x102F}, /* 102E */
+ {0x1030,0x1030},{0x1031,0x1031}, /* 1030 */
+ {0x1032,0x1032},{0x1033,0x1033}, /* 1032 */
+ {0x1034,0x1034},{0x1035,0x1035}, /* 1034 */
+ {0x1036,0x1036},{0x1037,0x1037}, /* 1036 */
+ {0x1038,0x1038},{0x1039,0x1039}, /* 1038 */
+ {0x103A,0x103A},{0x103B,0x103B}, /* 103A */
+ {0x103C,0x103C},{0x103D,0x103D}, /* 103C */
+ {0x103E,0x103E},{0x103F,0x103F}, /* 103E */
+ {0x1040,0x1040},{0x1041,0x1041}, /* 1040 */
+ {0x1042,0x1042},{0x1043,0x1043}, /* 1042 */
+ {0x1044,0x1044},{0x1045,0x1045}, /* 1044 */
+ {0x1046,0x1046},{0x1047,0x1047}, /* 1046 */
+ {0x1048,0x1048},{0x1049,0x1049}, /* 1048 */
+ {0x104A,0x104A},{0x104B,0x104B}, /* 104A */
+ {0x104C,0x104C},{0x104D,0x104D}, /* 104C */
+ {0x104E,0x104E},{0x104F,0x104F}, /* 104E */
+ {0x1050,0x1050},{0x1051,0x1051}, /* 1050 */
+ {0x1052,0x1052},{0x1053,0x1053}, /* 1052 */
+ {0x1054,0x1054},{0x1055,0x1055}, /* 1054 */
+ {0x1056,0x1056},{0x1057,0x1057}, /* 1056 */
+ {0x1058,0x1058},{0x1059,0x1059}, /* 1058 */
+ {0x105A,0x105A},{0x105B,0x105B}, /* 105A */
+ {0x105C,0x105C},{0x105D,0x105D}, /* 105C */
+ {0x105E,0x105E},{0x105F,0x105F}, /* 105E */
+ {0x1060,0x1060},{0x1061,0x1061}, /* 1060 */
+ {0x1062,0x1062},{0x1063,0x1063}, /* 1062 */
+ {0x1064,0x1064},{0x1065,0x1065}, /* 1064 */
+ {0x1066,0x1066},{0x1067,0x1067}, /* 1066 */
+ {0x1068,0x1068},{0x1069,0x1069}, /* 1068 */
+ {0x106A,0x106A},{0x106B,0x106B}, /* 106A */
+ {0x106C,0x106C},{0x106D,0x106D}, /* 106C */
+ {0x106E,0x106E},{0x106F,0x106F}, /* 106E */
+ {0x1070,0x1070},{0x1071,0x1071}, /* 1070 */
+ {0x1072,0x1072},{0x1073,0x1073}, /* 1072 */
+ {0x1074,0x1074},{0x1075,0x1075}, /* 1074 */
+ {0x1076,0x1076},{0x1077,0x1077}, /* 1076 */
+ {0x1078,0x1078},{0x1079,0x1079}, /* 1078 */
+ {0x107A,0x107A},{0x107B,0x107B}, /* 107A */
+ {0x107C,0x107C},{0x107D,0x107D}, /* 107C */
+ {0x107E,0x107E},{0x107F,0x107F}, /* 107E */
+ {0x1080,0x1080},{0x1081,0x1081}, /* 1080 */
+ {0x1082,0x1082},{0x1083,0x1083}, /* 1082 */
+ {0x1084,0x1084},{0x1085,0x1085}, /* 1084 */
+ {0x1086,0x1086},{0x1087,0x1087}, /* 1086 */
+ {0x1088,0x1088},{0x1089,0x1089}, /* 1088 */
+ {0x108A,0x108A},{0x108B,0x108B}, /* 108A */
+ {0x108C,0x108C},{0x108D,0x108D}, /* 108C */
+ {0x108E,0x108E},{0x108F,0x108F}, /* 108E */
+ {0x1090,0x1090},{0x1091,0x1091}, /* 1090 */
+ {0x1092,0x1092},{0x1093,0x1093}, /* 1092 */
+ {0x1094,0x1094},{0x1095,0x1095}, /* 1094 */
+ {0x1096,0x1096},{0x1097,0x1097}, /* 1096 */
+ {0x1098,0x1098},{0x1099,0x1099}, /* 1098 */
+ {0x109A,0x109A},{0x109B,0x109B}, /* 109A */
+ {0x109C,0x109C},{0x109D,0x109D}, /* 109C */
+ {0x109E,0x109E},{0x109F,0x109F}, /* 109E */
+ {0x10A0,0x2D00},{0x10A1,0x2D01}, /* 10A0 */
+ {0x10A2,0x2D02},{0x10A3,0x2D03}, /* 10A2 */
+ {0x10A4,0x2D04},{0x10A5,0x2D05}, /* 10A4 */
+ {0x10A6,0x2D06},{0x10A7,0x2D07}, /* 10A6 */
+ {0x10A8,0x2D08},{0x10A9,0x2D09}, /* 10A8 */
+ {0x10AA,0x2D0A},{0x10AB,0x2D0B}, /* 10AA */
+ {0x10AC,0x2D0C},{0x10AD,0x2D0D}, /* 10AC */
+ {0x10AE,0x2D0E},{0x10AF,0x2D0F}, /* 10AE */
+ {0x10B0,0x2D10},{0x10B1,0x2D11}, /* 10B0 */
+ {0x10B2,0x2D12},{0x10B3,0x2D13}, /* 10B2 */
+ {0x10B4,0x2D14},{0x10B5,0x2D15}, /* 10B4 */
+ {0x10B6,0x2D16},{0x10B7,0x2D17}, /* 10B6 */
+ {0x10B8,0x2D18},{0x10B9,0x2D19}, /* 10B8 */
+ {0x10BA,0x2D1A},{0x10BB,0x2D1B}, /* 10BA */
+ {0x10BC,0x2D1C},{0x10BD,0x2D1D}, /* 10BC */
+ {0x10BE,0x2D1E},{0x10BF,0x2D1F}, /* 10BE */
+ {0x10C0,0x2D20},{0x10C1,0x2D21}, /* 10C0 */
+ {0x10C2,0x2D22},{0x10C3,0x2D23}, /* 10C2 */
+ {0x10C4,0x2D24},{0x10C5,0x2D25}, /* 10C4 */
+ {0x10C6,0x10C6},{0x10C7,0x10C7}, /* 10C6 */
+ {0x10C8,0x10C8},{0x10C9,0x10C9}, /* 10C8 */
+ {0x10CA,0x10CA},{0x10CB,0x10CB}, /* 10CA */
+ {0x10CC,0x10CC},{0x10CD,0x10CD}, /* 10CC */
+ {0x10CE,0x10CE},{0x10CF,0x10CF}, /* 10CE */
+ {0x10D0,0x10D0},{0x10D1,0x10D1}, /* 10D0 */
+ {0x10D2,0x10D2},{0x10D3,0x10D3}, /* 10D2 */
+ {0x10D4,0x10D4},{0x10D5,0x10D5}, /* 10D4 */
+ {0x10D6,0x10D6},{0x10D7,0x10D7}, /* 10D6 */
+ {0x10D8,0x10D8},{0x10D9,0x10D9}, /* 10D8 */
+ {0x10DA,0x10DA},{0x10DB,0x10DB}, /* 10DA */
+ {0x10DC,0x10DC},{0x10DD,0x10DD}, /* 10DC */
+ {0x10DE,0x10DE},{0x10DF,0x10DF}, /* 10DE */
+ {0x10E0,0x10E0},{0x10E1,0x10E1}, /* 10E0 */
+ {0x10E2,0x10E2},{0x10E3,0x10E3}, /* 10E2 */
+ {0x10E4,0x10E4},{0x10E5,0x10E5}, /* 10E4 */
+ {0x10E6,0x10E6},{0x10E7,0x10E7}, /* 10E6 */
+ {0x10E8,0x10E8},{0x10E9,0x10E9}, /* 10E8 */
+ {0x10EA,0x10EA},{0x10EB,0x10EB}, /* 10EA */
+ {0x10EC,0x10EC},{0x10ED,0x10ED}, /* 10EC */
+ {0x10EE,0x10EE},{0x10EF,0x10EF}, /* 10EE */
+ {0x10F0,0x10F0},{0x10F1,0x10F1}, /* 10F0 */
+ {0x10F2,0x10F2},{0x10F3,0x10F3}, /* 10F2 */
+ {0x10F4,0x10F4},{0x10F5,0x10F5}, /* 10F4 */
+ {0x10F6,0x10F6},{0x10F7,0x10F7}, /* 10F6 */
+ {0x10F8,0x10F8},{0x10F9,0x10F9}, /* 10F8 */
+ {0x10FA,0x10FA},{0x10FB,0x10FB}, /* 10FA */
+ {0x10FC,0x10FC},{0x10FD,0x10FD}, /* 10FC */
+ {0x10FE,0x10FE},{0x10FF,0x10FF} /* 10FE */
+};
+
+static const MY_CASEFOLD_CHARACTER u520_casefold_page1D[256]={
+ {0x1D00,0x1D00},{0x1D01,0x1D01}, /* 1D00 */
+ {0x1D02,0x1D02},{0x1D03,0x1D03}, /* 1D02 */
+ {0x1D04,0x1D04},{0x1D05,0x1D05}, /* 1D04 */
+ {0x1D06,0x1D06},{0x1D07,0x1D07}, /* 1D06 */
+ {0x1D08,0x1D08},{0x1D09,0x1D09}, /* 1D08 */
+ {0x1D0A,0x1D0A},{0x1D0B,0x1D0B}, /* 1D0A */
+ {0x1D0C,0x1D0C},{0x1D0D,0x1D0D}, /* 1D0C */
+ {0x1D0E,0x1D0E},{0x1D0F,0x1D0F}, /* 1D0E */
+ {0x1D10,0x1D10},{0x1D11,0x1D11}, /* 1D10 */
+ {0x1D12,0x1D12},{0x1D13,0x1D13}, /* 1D12 */
+ {0x1D14,0x1D14},{0x1D15,0x1D15}, /* 1D14 */
+ {0x1D16,0x1D16},{0x1D17,0x1D17}, /* 1D16 */
+ {0x1D18,0x1D18},{0x1D19,0x1D19}, /* 1D18 */
+ {0x1D1A,0x1D1A},{0x1D1B,0x1D1B}, /* 1D1A */
+ {0x1D1C,0x1D1C},{0x1D1D,0x1D1D}, /* 1D1C */
+ {0x1D1E,0x1D1E},{0x1D1F,0x1D1F}, /* 1D1E */
+ {0x1D20,0x1D20},{0x1D21,0x1D21}, /* 1D20 */
+ {0x1D22,0x1D22},{0x1D23,0x1D23}, /* 1D22 */
+ {0x1D24,0x1D24},{0x1D25,0x1D25}, /* 1D24 */
+ {0x1D26,0x1D26},{0x1D27,0x1D27}, /* 1D26 */
+ {0x1D28,0x1D28},{0x1D29,0x1D29}, /* 1D28 */
+ {0x1D2A,0x1D2A},{0x1D2B,0x1D2B}, /* 1D2A */
+ {0x1D2C,0x1D2C},{0x1D2D,0x1D2D}, /* 1D2C */
+ {0x1D2E,0x1D2E},{0x1D2F,0x1D2F}, /* 1D2E */
+ {0x1D30,0x1D30},{0x1D31,0x1D31}, /* 1D30 */
+ {0x1D32,0x1D32},{0x1D33,0x1D33}, /* 1D32 */
+ {0x1D34,0x1D34},{0x1D35,0x1D35}, /* 1D34 */
+ {0x1D36,0x1D36},{0x1D37,0x1D37}, /* 1D36 */
+ {0x1D38,0x1D38},{0x1D39,0x1D39}, /* 1D38 */
+ {0x1D3A,0x1D3A},{0x1D3B,0x1D3B}, /* 1D3A */
+ {0x1D3C,0x1D3C},{0x1D3D,0x1D3D}, /* 1D3C */
+ {0x1D3E,0x1D3E},{0x1D3F,0x1D3F}, /* 1D3E */
+ {0x1D40,0x1D40},{0x1D41,0x1D41}, /* 1D40 */
+ {0x1D42,0x1D42},{0x1D43,0x1D43}, /* 1D42 */
+ {0x1D44,0x1D44},{0x1D45,0x1D45}, /* 1D44 */
+ {0x1D46,0x1D46},{0x1D47,0x1D47}, /* 1D46 */
+ {0x1D48,0x1D48},{0x1D49,0x1D49}, /* 1D48 */
+ {0x1D4A,0x1D4A},{0x1D4B,0x1D4B}, /* 1D4A */
+ {0x1D4C,0x1D4C},{0x1D4D,0x1D4D}, /* 1D4C */
+ {0x1D4E,0x1D4E},{0x1D4F,0x1D4F}, /* 1D4E */
+ {0x1D50,0x1D50},{0x1D51,0x1D51}, /* 1D50 */
+ {0x1D52,0x1D52},{0x1D53,0x1D53}, /* 1D52 */
+ {0x1D54,0x1D54},{0x1D55,0x1D55}, /* 1D54 */
+ {0x1D56,0x1D56},{0x1D57,0x1D57}, /* 1D56 */
+ {0x1D58,0x1D58},{0x1D59,0x1D59}, /* 1D58 */
+ {0x1D5A,0x1D5A},{0x1D5B,0x1D5B}, /* 1D5A */
+ {0x1D5C,0x1D5C},{0x1D5D,0x1D5D}, /* 1D5C */
+ {0x1D5E,0x1D5E},{0x1D5F,0x1D5F}, /* 1D5E */
+ {0x1D60,0x1D60},{0x1D61,0x1D61}, /* 1D60 */
+ {0x1D62,0x1D62},{0x1D63,0x1D63}, /* 1D62 */
+ {0x1D64,0x1D64},{0x1D65,0x1D65}, /* 1D64 */
+ {0x1D66,0x1D66},{0x1D67,0x1D67}, /* 1D66 */
+ {0x1D68,0x1D68},{0x1D69,0x1D69}, /* 1D68 */
+ {0x1D6A,0x1D6A},{0x1D6B,0x1D6B}, /* 1D6A */
+ {0x1D6C,0x1D6C},{0x1D6D,0x1D6D}, /* 1D6C */
+ {0x1D6E,0x1D6E},{0x1D6F,0x1D6F}, /* 1D6E */
+ {0x1D70,0x1D70},{0x1D71,0x1D71}, /* 1D70 */
+ {0x1D72,0x1D72},{0x1D73,0x1D73}, /* 1D72 */
+ {0x1D74,0x1D74},{0x1D75,0x1D75}, /* 1D74 */
+ {0x1D76,0x1D76},{0x1D77,0x1D77}, /* 1D76 */
+ {0x1D78,0x1D78},{0xA77D,0x1D79}, /* 1D78 */
+ {0x1D7A,0x1D7A},{0x1D7B,0x1D7B}, /* 1D7A */
+ {0x1D7C,0x1D7C},{0x2C63,0x1D7D}, /* 1D7C */
+ {0x1D7E,0x1D7E},{0x1D7F,0x1D7F}, /* 1D7E */
+ {0x1D80,0x1D80},{0x1D81,0x1D81}, /* 1D80 */
+ {0x1D82,0x1D82},{0x1D83,0x1D83}, /* 1D82 */
+ {0x1D84,0x1D84},{0x1D85,0x1D85}, /* 1D84 */
+ {0x1D86,0x1D86},{0x1D87,0x1D87}, /* 1D86 */
+ {0x1D88,0x1D88},{0x1D89,0x1D89}, /* 1D88 */
+ {0x1D8A,0x1D8A},{0x1D8B,0x1D8B}, /* 1D8A */
+ {0x1D8C,0x1D8C},{0x1D8D,0x1D8D}, /* 1D8C */
+ {0x1D8E,0x1D8E},{0x1D8F,0x1D8F}, /* 1D8E */
+ {0x1D90,0x1D90},{0x1D91,0x1D91}, /* 1D90 */
+ {0x1D92,0x1D92},{0x1D93,0x1D93}, /* 1D92 */
+ {0x1D94,0x1D94},{0x1D95,0x1D95}, /* 1D94 */
+ {0x1D96,0x1D96},{0x1D97,0x1D97}, /* 1D96 */
+ {0x1D98,0x1D98},{0x1D99,0x1D99}, /* 1D98 */
+ {0x1D9A,0x1D9A},{0x1D9B,0x1D9B}, /* 1D9A */
+ {0x1D9C,0x1D9C},{0x1D9D,0x1D9D}, /* 1D9C */
+ {0x1D9E,0x1D9E},{0x1D9F,0x1D9F}, /* 1D9E */
+ {0x1DA0,0x1DA0},{0x1DA1,0x1DA1}, /* 1DA0 */
+ {0x1DA2,0x1DA2},{0x1DA3,0x1DA3}, /* 1DA2 */
+ {0x1DA4,0x1DA4},{0x1DA5,0x1DA5}, /* 1DA4 */
+ {0x1DA6,0x1DA6},{0x1DA7,0x1DA7}, /* 1DA6 */
+ {0x1DA8,0x1DA8},{0x1DA9,0x1DA9}, /* 1DA8 */
+ {0x1DAA,0x1DAA},{0x1DAB,0x1DAB}, /* 1DAA */
+ {0x1DAC,0x1DAC},{0x1DAD,0x1DAD}, /* 1DAC */
+ {0x1DAE,0x1DAE},{0x1DAF,0x1DAF}, /* 1DAE */
+ {0x1DB0,0x1DB0},{0x1DB1,0x1DB1}, /* 1DB0 */
+ {0x1DB2,0x1DB2},{0x1DB3,0x1DB3}, /* 1DB2 */
+ {0x1DB4,0x1DB4},{0x1DB5,0x1DB5}, /* 1DB4 */
+ {0x1DB6,0x1DB6},{0x1DB7,0x1DB7}, /* 1DB6 */
+ {0x1DB8,0x1DB8},{0x1DB9,0x1DB9}, /* 1DB8 */
+ {0x1DBA,0x1DBA},{0x1DBB,0x1DBB}, /* 1DBA */
+ {0x1DBC,0x1DBC},{0x1DBD,0x1DBD}, /* 1DBC */
+ {0x1DBE,0x1DBE},{0x1DBF,0x1DBF}, /* 1DBE */
+ {0x1DC0,0x1DC0},{0x1DC1,0x1DC1}, /* 1DC0 */
+ {0x1DC2,0x1DC2},{0x1DC3,0x1DC3}, /* 1DC2 */
+ {0x1DC4,0x1DC4},{0x1DC5,0x1DC5}, /* 1DC4 */
+ {0x1DC6,0x1DC6},{0x1DC7,0x1DC7}, /* 1DC6 */
+ {0x1DC8,0x1DC8},{0x1DC9,0x1DC9}, /* 1DC8 */
+ {0x1DCA,0x1DCA},{0x1DCB,0x1DCB}, /* 1DCA */
+ {0x1DCC,0x1DCC},{0x1DCD,0x1DCD}, /* 1DCC */
+ {0x1DCE,0x1DCE},{0x1DCF,0x1DCF}, /* 1DCE */
+ {0x1DD0,0x1DD0},{0x1DD1,0x1DD1}, /* 1DD0 */
+ {0x1DD2,0x1DD2},{0x1DD3,0x1DD3}, /* 1DD2 */
+ {0x1DD4,0x1DD4},{0x1DD5,0x1DD5}, /* 1DD4 */
+ {0x1DD6,0x1DD6},{0x1DD7,0x1DD7}, /* 1DD6 */
+ {0x1DD8,0x1DD8},{0x1DD9,0x1DD9}, /* 1DD8 */
+ {0x1DDA,0x1DDA},{0x1DDB,0x1DDB}, /* 1DDA */
+ {0x1DDC,0x1DDC},{0x1DDD,0x1DDD}, /* 1DDC */
+ {0x1DDE,0x1DDE},{0x1DDF,0x1DDF}, /* 1DDE */
+ {0x1DE0,0x1DE0},{0x1DE1,0x1DE1}, /* 1DE0 */
+ {0x1DE2,0x1DE2},{0x1DE3,0x1DE3}, /* 1DE2 */
+ {0x1DE4,0x1DE4},{0x1DE5,0x1DE5}, /* 1DE4 */
+ {0x1DE6,0x1DE6},{0x1DE7,0x1DE7}, /* 1DE6 */
+ {0x1DE8,0x1DE8},{0x1DE9,0x1DE9}, /* 1DE8 */
+ {0x1DEA,0x1DEA},{0x1DEB,0x1DEB}, /* 1DEA */
+ {0x1DEC,0x1DEC},{0x1DED,0x1DED}, /* 1DEC */
+ {0x1DEE,0x1DEE},{0x1DEF,0x1DEF}, /* 1DEE */
+ {0x1DF0,0x1DF0},{0x1DF1,0x1DF1}, /* 1DF0 */
+ {0x1DF2,0x1DF2},{0x1DF3,0x1DF3}, /* 1DF2 */
+ {0x1DF4,0x1DF4},{0x1DF5,0x1DF5}, /* 1DF4 */
+ {0x1DF6,0x1DF6},{0x1DF7,0x1DF7}, /* 1DF6 */
+ {0x1DF8,0x1DF8},{0x1DF9,0x1DF9}, /* 1DF8 */
+ {0x1DFA,0x1DFA},{0x1DFB,0x1DFB}, /* 1DFA */
+ {0x1DFC,0x1DFC},{0x1DFD,0x1DFD}, /* 1DFC */
+ {0x1DFE,0x1DFE},{0x1DFF,0x1DFF} /* 1DFE */
+};
+
+static const MY_CASEFOLD_CHARACTER u520_casefold_page1E[256]={
+ {0x1E00,0x1E01},{0x1E00,0x1E01}, /* 1E00 */
+ {0x1E02,0x1E03},{0x1E02,0x1E03}, /* 1E02 */
+ {0x1E04,0x1E05},{0x1E04,0x1E05}, /* 1E04 */
+ {0x1E06,0x1E07},{0x1E06,0x1E07}, /* 1E06 */
+ {0x1E08,0x1E09},{0x1E08,0x1E09}, /* 1E08 */
+ {0x1E0A,0x1E0B},{0x1E0A,0x1E0B}, /* 1E0A */
+ {0x1E0C,0x1E0D},{0x1E0C,0x1E0D}, /* 1E0C */
+ {0x1E0E,0x1E0F},{0x1E0E,0x1E0F}, /* 1E0E */
+ {0x1E10,0x1E11},{0x1E10,0x1E11}, /* 1E10 */
+ {0x1E12,0x1E13},{0x1E12,0x1E13}, /* 1E12 */
+ {0x1E14,0x1E15},{0x1E14,0x1E15}, /* 1E14 */
+ {0x1E16,0x1E17},{0x1E16,0x1E17}, /* 1E16 */
+ {0x1E18,0x1E19},{0x1E18,0x1E19}, /* 1E18 */
+ {0x1E1A,0x1E1B},{0x1E1A,0x1E1B}, /* 1E1A */
+ {0x1E1C,0x1E1D},{0x1E1C,0x1E1D}, /* 1E1C */
+ {0x1E1E,0x1E1F},{0x1E1E,0x1E1F}, /* 1E1E */
+ {0x1E20,0x1E21},{0x1E20,0x1E21}, /* 1E20 */
+ {0x1E22,0x1E23},{0x1E22,0x1E23}, /* 1E22 */
+ {0x1E24,0x1E25},{0x1E24,0x1E25}, /* 1E24 */
+ {0x1E26,0x1E27},{0x1E26,0x1E27}, /* 1E26 */
+ {0x1E28,0x1E29},{0x1E28,0x1E29}, /* 1E28 */
+ {0x1E2A,0x1E2B},{0x1E2A,0x1E2B}, /* 1E2A */
+ {0x1E2C,0x1E2D},{0x1E2C,0x1E2D}, /* 1E2C */
+ {0x1E2E,0x1E2F},{0x1E2E,0x1E2F}, /* 1E2E */
+ {0x1E30,0x1E31},{0x1E30,0x1E31}, /* 1E30 */
+ {0x1E32,0x1E33},{0x1E32,0x1E33}, /* 1E32 */
+ {0x1E34,0x1E35},{0x1E34,0x1E35}, /* 1E34 */
+ {0x1E36,0x1E37},{0x1E36,0x1E37}, /* 1E36 */
+ {0x1E38,0x1E39},{0x1E38,0x1E39}, /* 1E38 */
+ {0x1E3A,0x1E3B},{0x1E3A,0x1E3B}, /* 1E3A */
+ {0x1E3C,0x1E3D},{0x1E3C,0x1E3D}, /* 1E3C */
+ {0x1E3E,0x1E3F},{0x1E3E,0x1E3F}, /* 1E3E */
+ {0x1E40,0x1E41},{0x1E40,0x1E41}, /* 1E40 */
+ {0x1E42,0x1E43},{0x1E42,0x1E43}, /* 1E42 */
+ {0x1E44,0x1E45},{0x1E44,0x1E45}, /* 1E44 */
+ {0x1E46,0x1E47},{0x1E46,0x1E47}, /* 1E46 */
+ {0x1E48,0x1E49},{0x1E48,0x1E49}, /* 1E48 */
+ {0x1E4A,0x1E4B},{0x1E4A,0x1E4B}, /* 1E4A */
+ {0x1E4C,0x1E4D},{0x1E4C,0x1E4D}, /* 1E4C */
+ {0x1E4E,0x1E4F},{0x1E4E,0x1E4F}, /* 1E4E */
+ {0x1E50,0x1E51},{0x1E50,0x1E51}, /* 1E50 */
+ {0x1E52,0x1E53},{0x1E52,0x1E53}, /* 1E52 */
+ {0x1E54,0x1E55},{0x1E54,0x1E55}, /* 1E54 */
+ {0x1E56,0x1E57},{0x1E56,0x1E57}, /* 1E56 */
+ {0x1E58,0x1E59},{0x1E58,0x1E59}, /* 1E58 */
+ {0x1E5A,0x1E5B},{0x1E5A,0x1E5B}, /* 1E5A */
+ {0x1E5C,0x1E5D},{0x1E5C,0x1E5D}, /* 1E5C */
+ {0x1E5E,0x1E5F},{0x1E5E,0x1E5F}, /* 1E5E */
+ {0x1E60,0x1E61},{0x1E60,0x1E61}, /* 1E60 */
+ {0x1E62,0x1E63},{0x1E62,0x1E63}, /* 1E62 */
+ {0x1E64,0x1E65},{0x1E64,0x1E65}, /* 1E64 */
+ {0x1E66,0x1E67},{0x1E66,0x1E67}, /* 1E66 */
+ {0x1E68,0x1E69},{0x1E68,0x1E69}, /* 1E68 */
+ {0x1E6A,0x1E6B},{0x1E6A,0x1E6B}, /* 1E6A */
+ {0x1E6C,0x1E6D},{0x1E6C,0x1E6D}, /* 1E6C */
+ {0x1E6E,0x1E6F},{0x1E6E,0x1E6F}, /* 1E6E */
+ {0x1E70,0x1E71},{0x1E70,0x1E71}, /* 1E70 */
+ {0x1E72,0x1E73},{0x1E72,0x1E73}, /* 1E72 */
+ {0x1E74,0x1E75},{0x1E74,0x1E75}, /* 1E74 */
+ {0x1E76,0x1E77},{0x1E76,0x1E77}, /* 1E76 */
+ {0x1E78,0x1E79},{0x1E78,0x1E79}, /* 1E78 */
+ {0x1E7A,0x1E7B},{0x1E7A,0x1E7B}, /* 1E7A */
+ {0x1E7C,0x1E7D},{0x1E7C,0x1E7D}, /* 1E7C */
+ {0x1E7E,0x1E7F},{0x1E7E,0x1E7F}, /* 1E7E */
+ {0x1E80,0x1E81},{0x1E80,0x1E81}, /* 1E80 */
+ {0x1E82,0x1E83},{0x1E82,0x1E83}, /* 1E82 */
+ {0x1E84,0x1E85},{0x1E84,0x1E85}, /* 1E84 */
+ {0x1E86,0x1E87},{0x1E86,0x1E87}, /* 1E86 */
+ {0x1E88,0x1E89},{0x1E88,0x1E89}, /* 1E88 */
+ {0x1E8A,0x1E8B},{0x1E8A,0x1E8B}, /* 1E8A */
+ {0x1E8C,0x1E8D},{0x1E8C,0x1E8D}, /* 1E8C */
+ {0x1E8E,0x1E8F},{0x1E8E,0x1E8F}, /* 1E8E */
+ {0x1E90,0x1E91},{0x1E90,0x1E91}, /* 1E90 */
+ {0x1E92,0x1E93},{0x1E92,0x1E93}, /* 1E92 */
+ {0x1E94,0x1E95},{0x1E94,0x1E95}, /* 1E94 */
+ {0x1E96,0x1E96},{0x1E97,0x1E97}, /* 1E96 */
+ {0x1E98,0x1E98},{0x1E99,0x1E99}, /* 1E98 */
+ {0x1E9A,0x1E9A},{0x1E60,0x1E9B}, /* 1E9A */
+ {0x1E9C,0x1E9C},{0x1E9D,0x1E9D}, /* 1E9C */
+ {0x1E9E,0x00DF},{0x1E9F,0x1E9F}, /* 1E9E */
+ {0x1EA0,0x1EA1},{0x1EA0,0x1EA1}, /* 1EA0 */
+ {0x1EA2,0x1EA3},{0x1EA2,0x1EA3}, /* 1EA2 */
+ {0x1EA4,0x1EA5},{0x1EA4,0x1EA5}, /* 1EA4 */
+ {0x1EA6,0x1EA7},{0x1EA6,0x1EA7}, /* 1EA6 */
+ {0x1EA8,0x1EA9},{0x1EA8,0x1EA9}, /* 1EA8 */
+ {0x1EAA,0x1EAB},{0x1EAA,0x1EAB}, /* 1EAA */
+ {0x1EAC,0x1EAD},{0x1EAC,0x1EAD}, /* 1EAC */
+ {0x1EAE,0x1EAF},{0x1EAE,0x1EAF}, /* 1EAE */
+ {0x1EB0,0x1EB1},{0x1EB0,0x1EB1}, /* 1EB0 */
+ {0x1EB2,0x1EB3},{0x1EB2,0x1EB3}, /* 1EB2 */
+ {0x1EB4,0x1EB5},{0x1EB4,0x1EB5}, /* 1EB4 */
+ {0x1EB6,0x1EB7},{0x1EB6,0x1EB7}, /* 1EB6 */
+ {0x1EB8,0x1EB9},{0x1EB8,0x1EB9}, /* 1EB8 */
+ {0x1EBA,0x1EBB},{0x1EBA,0x1EBB}, /* 1EBA */
+ {0x1EBC,0x1EBD},{0x1EBC,0x1EBD}, /* 1EBC */
+ {0x1EBE,0x1EBF},{0x1EBE,0x1EBF}, /* 1EBE */
+ {0x1EC0,0x1EC1},{0x1EC0,0x1EC1}, /* 1EC0 */
+ {0x1EC2,0x1EC3},{0x1EC2,0x1EC3}, /* 1EC2 */
+ {0x1EC4,0x1EC5},{0x1EC4,0x1EC5}, /* 1EC4 */
+ {0x1EC6,0x1EC7},{0x1EC6,0x1EC7}, /* 1EC6 */
+ {0x1EC8,0x1EC9},{0x1EC8,0x1EC9}, /* 1EC8 */
+ {0x1ECA,0x1ECB},{0x1ECA,0x1ECB}, /* 1ECA */
+ {0x1ECC,0x1ECD},{0x1ECC,0x1ECD}, /* 1ECC */
+ {0x1ECE,0x1ECF},{0x1ECE,0x1ECF}, /* 1ECE */
+ {0x1ED0,0x1ED1},{0x1ED0,0x1ED1}, /* 1ED0 */
+ {0x1ED2,0x1ED3},{0x1ED2,0x1ED3}, /* 1ED2 */
+ {0x1ED4,0x1ED5},{0x1ED4,0x1ED5}, /* 1ED4 */
+ {0x1ED6,0x1ED7},{0x1ED6,0x1ED7}, /* 1ED6 */
+ {0x1ED8,0x1ED9},{0x1ED8,0x1ED9}, /* 1ED8 */
+ {0x1EDA,0x1EDB},{0x1EDA,0x1EDB}, /* 1EDA */
+ {0x1EDC,0x1EDD},{0x1EDC,0x1EDD}, /* 1EDC */
+ {0x1EDE,0x1EDF},{0x1EDE,0x1EDF}, /* 1EDE */
+ {0x1EE0,0x1EE1},{0x1EE0,0x1EE1}, /* 1EE0 */
+ {0x1EE2,0x1EE3},{0x1EE2,0x1EE3}, /* 1EE2 */
+ {0x1EE4,0x1EE5},{0x1EE4,0x1EE5}, /* 1EE4 */
+ {0x1EE6,0x1EE7},{0x1EE6,0x1EE7}, /* 1EE6 */
+ {0x1EE8,0x1EE9},{0x1EE8,0x1EE9}, /* 1EE8 */
+ {0x1EEA,0x1EEB},{0x1EEA,0x1EEB}, /* 1EEA */
+ {0x1EEC,0x1EED},{0x1EEC,0x1EED}, /* 1EEC */
+ {0x1EEE,0x1EEF},{0x1EEE,0x1EEF}, /* 1EEE */
+ {0x1EF0,0x1EF1},{0x1EF0,0x1EF1}, /* 1EF0 */
+ {0x1EF2,0x1EF3},{0x1EF2,0x1EF3}, /* 1EF2 */
+ {0x1EF4,0x1EF5},{0x1EF4,0x1EF5}, /* 1EF4 */
+ {0x1EF6,0x1EF7},{0x1EF6,0x1EF7}, /* 1EF6 */
+ {0x1EF8,0x1EF9},{0x1EF8,0x1EF9}, /* 1EF8 */
+ {0x1EFA,0x1EFB},{0x1EFA,0x1EFB}, /* 1EFA */
+ {0x1EFC,0x1EFD},{0x1EFC,0x1EFD}, /* 1EFC */
+ {0x1EFE,0x1EFF},{0x1EFE,0x1EFF} /* 1EFE */
+};
+
+static const MY_CASEFOLD_CHARACTER u520_casefold_page1F[256]={
+ {0x1F08,0x1F00},{0x1F09,0x1F01}, /* 1F00 */
+ {0x1F0A,0x1F02},{0x1F0B,0x1F03}, /* 1F02 */
+ {0x1F0C,0x1F04},{0x1F0D,0x1F05}, /* 1F04 */
+ {0x1F0E,0x1F06},{0x1F0F,0x1F07}, /* 1F06 */
+ {0x1F08,0x1F00},{0x1F09,0x1F01}, /* 1F08 */
+ {0x1F0A,0x1F02},{0x1F0B,0x1F03}, /* 1F0A */
+ {0x1F0C,0x1F04},{0x1F0D,0x1F05}, /* 1F0C */
+ {0x1F0E,0x1F06},{0x1F0F,0x1F07}, /* 1F0E */
+ {0x1F18,0x1F10},{0x1F19,0x1F11}, /* 1F10 */
+ {0x1F1A,0x1F12},{0x1F1B,0x1F13}, /* 1F12 */
+ {0x1F1C,0x1F14},{0x1F1D,0x1F15}, /* 1F14 */
+ {0x1F16,0x1F16},{0x1F17,0x1F17}, /* 1F16 */
+ {0x1F18,0x1F10},{0x1F19,0x1F11}, /* 1F18 */
+ {0x1F1A,0x1F12},{0x1F1B,0x1F13}, /* 1F1A */
+ {0x1F1C,0x1F14},{0x1F1D,0x1F15}, /* 1F1C */
+ {0x1F1E,0x1F1E},{0x1F1F,0x1F1F}, /* 1F1E */
+ {0x1F28,0x1F20},{0x1F29,0x1F21}, /* 1F20 */
+ {0x1F2A,0x1F22},{0x1F2B,0x1F23}, /* 1F22 */
+ {0x1F2C,0x1F24},{0x1F2D,0x1F25}, /* 1F24 */
+ {0x1F2E,0x1F26},{0x1F2F,0x1F27}, /* 1F26 */
+ {0x1F28,0x1F20},{0x1F29,0x1F21}, /* 1F28 */
+ {0x1F2A,0x1F22},{0x1F2B,0x1F23}, /* 1F2A */
+ {0x1F2C,0x1F24},{0x1F2D,0x1F25}, /* 1F2C */
+ {0x1F2E,0x1F26},{0x1F2F,0x1F27}, /* 1F2E */
+ {0x1F38,0x1F30},{0x1F39,0x1F31}, /* 1F30 */
+ {0x1F3A,0x1F32},{0x1F3B,0x1F33}, /* 1F32 */
+ {0x1F3C,0x1F34},{0x1F3D,0x1F35}, /* 1F34 */
+ {0x1F3E,0x1F36},{0x1F3F,0x1F37}, /* 1F36 */
+ {0x1F38,0x1F30},{0x1F39,0x1F31}, /* 1F38 */
+ {0x1F3A,0x1F32},{0x1F3B,0x1F33}, /* 1F3A */
+ {0x1F3C,0x1F34},{0x1F3D,0x1F35}, /* 1F3C */
+ {0x1F3E,0x1F36},{0x1F3F,0x1F37}, /* 1F3E */
+ {0x1F48,0x1F40},{0x1F49,0x1F41}, /* 1F40 */
+ {0x1F4A,0x1F42},{0x1F4B,0x1F43}, /* 1F42 */
+ {0x1F4C,0x1F44},{0x1F4D,0x1F45}, /* 1F44 */
+ {0x1F46,0x1F46},{0x1F47,0x1F47}, /* 1F46 */
+ {0x1F48,0x1F40},{0x1F49,0x1F41}, /* 1F48 */
+ {0x1F4A,0x1F42},{0x1F4B,0x1F43}, /* 1F4A */
+ {0x1F4C,0x1F44},{0x1F4D,0x1F45}, /* 1F4C */
+ {0x1F4E,0x1F4E},{0x1F4F,0x1F4F}, /* 1F4E */
+ {0x1F50,0x1F50},{0x1F59,0x1F51}, /* 1F50 */
+ {0x1F52,0x1F52},{0x1F5B,0x1F53}, /* 1F52 */
+ {0x1F54,0x1F54},{0x1F5D,0x1F55}, /* 1F54 */
+ {0x1F56,0x1F56},{0x1F5F,0x1F57}, /* 1F56 */
+ {0x1F58,0x1F58},{0x1F59,0x1F51}, /* 1F58 */
+ {0x1F5A,0x1F5A},{0x1F5B,0x1F53}, /* 1F5A */
+ {0x1F5C,0x1F5C},{0x1F5D,0x1F55}, /* 1F5C */
+ {0x1F5E,0x1F5E},{0x1F5F,0x1F57}, /* 1F5E */
+ {0x1F68,0x1F60},{0x1F69,0x1F61}, /* 1F60 */
+ {0x1F6A,0x1F62},{0x1F6B,0x1F63}, /* 1F62 */
+ {0x1F6C,0x1F64},{0x1F6D,0x1F65}, /* 1F64 */
+ {0x1F6E,0x1F66},{0x1F6F,0x1F67}, /* 1F66 */
+ {0x1F68,0x1F60},{0x1F69,0x1F61}, /* 1F68 */
+ {0x1F6A,0x1F62},{0x1F6B,0x1F63}, /* 1F6A */
+ {0x1F6C,0x1F64},{0x1F6D,0x1F65}, /* 1F6C */
+ {0x1F6E,0x1F66},{0x1F6F,0x1F67}, /* 1F6E */
+ {0x1FBA,0x1F70},{0x1FBB,0x1F71}, /* 1F70 */
+ {0x1FC8,0x1F72},{0x1FC9,0x1F73}, /* 1F72 */
+ {0x1FCA,0x1F74},{0x1FCB,0x1F75}, /* 1F74 */
+ {0x1FDA,0x1F76},{0x1FDB,0x1F77}, /* 1F76 */
+ {0x1FF8,0x1F78},{0x1FF9,0x1F79}, /* 1F78 */
+ {0x1FEA,0x1F7A},{0x1FEB,0x1F7B}, /* 1F7A */
+ {0x1FFA,0x1F7C},{0x1FFB,0x1F7D}, /* 1F7C */
+ {0x1F7E,0x1F7E},{0x1F7F,0x1F7F}, /* 1F7E */
+ {0x1F88,0x1F80},{0x1F89,0x1F81}, /* 1F80 */
+ {0x1F8A,0x1F82},{0x1F8B,0x1F83}, /* 1F82 */
+ {0x1F8C,0x1F84},{0x1F8D,0x1F85}, /* 1F84 */
+ {0x1F8E,0x1F86},{0x1F8F,0x1F87}, /* 1F86 */
+ {0x1F88,0x1F80},{0x1F89,0x1F81}, /* 1F88 */
+ {0x1F8A,0x1F82},{0x1F8B,0x1F83}, /* 1F8A */
+ {0x1F8C,0x1F84},{0x1F8D,0x1F85}, /* 1F8C */
+ {0x1F8E,0x1F86},{0x1F8F,0x1F87}, /* 1F8E */
+ {0x1F98,0x1F90},{0x1F99,0x1F91}, /* 1F90 */
+ {0x1F9A,0x1F92},{0x1F9B,0x1F93}, /* 1F92 */
+ {0x1F9C,0x1F94},{0x1F9D,0x1F95}, /* 1F94 */
+ {0x1F9E,0x1F96},{0x1F9F,0x1F97}, /* 1F96 */
+ {0x1F98,0x1F90},{0x1F99,0x1F91}, /* 1F98 */
+ {0x1F9A,0x1F92},{0x1F9B,0x1F93}, /* 1F9A */
+ {0x1F9C,0x1F94},{0x1F9D,0x1F95}, /* 1F9C */
+ {0x1F9E,0x1F96},{0x1F9F,0x1F97}, /* 1F9E */
+ {0x1FA8,0x1FA0},{0x1FA9,0x1FA1}, /* 1FA0 */
+ {0x1FAA,0x1FA2},{0x1FAB,0x1FA3}, /* 1FA2 */
+ {0x1FAC,0x1FA4},{0x1FAD,0x1FA5}, /* 1FA4 */
+ {0x1FAE,0x1FA6},{0x1FAF,0x1FA7}, /* 1FA6 */
+ {0x1FA8,0x1FA0},{0x1FA9,0x1FA1}, /* 1FA8 */
+ {0x1FAA,0x1FA2},{0x1FAB,0x1FA3}, /* 1FAA */
+ {0x1FAC,0x1FA4},{0x1FAD,0x1FA5}, /* 1FAC */
+ {0x1FAE,0x1FA6},{0x1FAF,0x1FA7}, /* 1FAE */
+ {0x1FB8,0x1FB0},{0x1FB9,0x1FB1}, /* 1FB0 */
+ {0x1FB2,0x1FB2},{0x1FBC,0x1FB3}, /* 1FB2 */
+ {0x1FB4,0x1FB4},{0x1FB5,0x1FB5}, /* 1FB4 */
+ {0x1FB6,0x1FB6},{0x1FB7,0x1FB7}, /* 1FB6 */
+ {0x1FB8,0x1FB0},{0x1FB9,0x1FB1}, /* 1FB8 */
+ {0x1FBA,0x1F70},{0x1FBB,0x1F71}, /* 1FBA */
+ {0x1FBC,0x1FB3},{0x1FBD,0x1FBD}, /* 1FBC */
+ {0x0399,0x1FBE},{0x1FBF,0x1FBF}, /* 1FBE */
+ {0x1FC0,0x1FC0},{0x1FC1,0x1FC1}, /* 1FC0 */
+ {0x1FC2,0x1FC2},{0x1FCC,0x1FC3}, /* 1FC2 */
+ {0x1FC4,0x1FC4},{0x1FC5,0x1FC5}, /* 1FC4 */
+ {0x1FC6,0x1FC6},{0x1FC7,0x1FC7}, /* 1FC6 */
+ {0x1FC8,0x1F72},{0x1FC9,0x1F73}, /* 1FC8 */
+ {0x1FCA,0x1F74},{0x1FCB,0x1F75}, /* 1FCA */
+ {0x1FCC,0x1FC3},{0x1FCD,0x1FCD}, /* 1FCC */
+ {0x1FCE,0x1FCE},{0x1FCF,0x1FCF}, /* 1FCE */
+ {0x1FD8,0x1FD0},{0x1FD9,0x1FD1}, /* 1FD0 */
+ {0x1FD2,0x1FD2},{0x1FD3,0x1FD3}, /* 1FD2 */
+ {0x1FD4,0x1FD4},{0x1FD5,0x1FD5}, /* 1FD4 */
+ {0x1FD6,0x1FD6},{0x1FD7,0x1FD7}, /* 1FD6 */
+ {0x1FD8,0x1FD0},{0x1FD9,0x1FD1}, /* 1FD8 */
+ {0x1FDA,0x1F76},{0x1FDB,0x1F77}, /* 1FDA */
+ {0x1FDC,0x1FDC},{0x1FDD,0x1FDD}, /* 1FDC */
+ {0x1FDE,0x1FDE},{0x1FDF,0x1FDF}, /* 1FDE */
+ {0x1FE8,0x1FE0},{0x1FE9,0x1FE1}, /* 1FE0 */
+ {0x1FE2,0x1FE2},{0x1FE3,0x1FE3}, /* 1FE2 */
+ {0x1FE4,0x1FE4},{0x1FEC,0x1FE5}, /* 1FE4 */
+ {0x1FE6,0x1FE6},{0x1FE7,0x1FE7}, /* 1FE6 */
+ {0x1FE8,0x1FE0},{0x1FE9,0x1FE1}, /* 1FE8 */
+ {0x1FEA,0x1F7A},{0x1FEB,0x1F7B}, /* 1FEA */
+ {0x1FEC,0x1FE5},{0x1FED,0x1FED}, /* 1FEC */
+ {0x1FEE,0x1FEE},{0x1FEF,0x1FEF}, /* 1FEE */
+ {0x1FF0,0x1FF0},{0x1FF1,0x1FF1}, /* 1FF0 */
+ {0x1FF2,0x1FF2},{0x1FFC,0x1FF3}, /* 1FF2 */
+ {0x1FF4,0x1FF4},{0x1FF5,0x1FF5}, /* 1FF4 */
+ {0x1FF6,0x1FF6},{0x1FF7,0x1FF7}, /* 1FF6 */
+ {0x1FF8,0x1F78},{0x1FF9,0x1F79}, /* 1FF8 */
+ {0x1FFA,0x1F7C},{0x1FFB,0x1F7D}, /* 1FFA */
+ {0x1FFC,0x1FF3},{0x1FFD,0x1FFD}, /* 1FFC */
+ {0x1FFE,0x1FFE},{0x1FFF,0x1FFF} /* 1FFE */
+};
+
+static const MY_CASEFOLD_CHARACTER u520_casefold_page21[256]={
+ {0x2100,0x2100},{0x2101,0x2101}, /* 2100 */
+ {0x2102,0x2102},{0x2103,0x2103}, /* 2102 */
+ {0x2104,0x2104},{0x2105,0x2105}, /* 2104 */
+ {0x2106,0x2106},{0x2107,0x2107}, /* 2106 */
+ {0x2108,0x2108},{0x2109,0x2109}, /* 2108 */
+ {0x210A,0x210A},{0x210B,0x210B}, /* 210A */
+ {0x210C,0x210C},{0x210D,0x210D}, /* 210C */
+ {0x210E,0x210E},{0x210F,0x210F}, /* 210E */
+ {0x2110,0x2110},{0x2111,0x2111}, /* 2110 */
+ {0x2112,0x2112},{0x2113,0x2113}, /* 2112 */
+ {0x2114,0x2114},{0x2115,0x2115}, /* 2114 */
+ {0x2116,0x2116},{0x2117,0x2117}, /* 2116 */
+ {0x2118,0x2118},{0x2119,0x2119}, /* 2118 */
+ {0x211A,0x211A},{0x211B,0x211B}, /* 211A */
+ {0x211C,0x211C},{0x211D,0x211D}, /* 211C */
+ {0x211E,0x211E},{0x211F,0x211F}, /* 211E */
+ {0x2120,0x2120},{0x2121,0x2121}, /* 2120 */
+ {0x2122,0x2122},{0x2123,0x2123}, /* 2122 */
+ {0x2124,0x2124},{0x2125,0x2125}, /* 2124 */
+ {0x2126,0x03C9},{0x2127,0x2127}, /* 2126 */
+ {0x2128,0x2128},{0x2129,0x2129}, /* 2128 */
+ {0x212A,0x006B},{0x212B,0x00E5}, /* 212A */
+ {0x212C,0x212C},{0x212D,0x212D}, /* 212C */
+ {0x212E,0x212E},{0x212F,0x212F}, /* 212E */
+ {0x2130,0x2130},{0x2131,0x2131}, /* 2130 */
+ {0x2132,0x214E},{0x2133,0x2133}, /* 2132 */
+ {0x2134,0x2134},{0x2135,0x2135}, /* 2134 */
+ {0x2136,0x2136},{0x2137,0x2137}, /* 2136 */
+ {0x2138,0x2138},{0x2139,0x2139}, /* 2138 */
+ {0x213A,0x213A},{0x213B,0x213B}, /* 213A */
+ {0x213C,0x213C},{0x213D,0x213D}, /* 213C */
+ {0x213E,0x213E},{0x213F,0x213F}, /* 213E */
+ {0x2140,0x2140},{0x2141,0x2141}, /* 2140 */
+ {0x2142,0x2142},{0x2143,0x2143}, /* 2142 */
+ {0x2144,0x2144},{0x2145,0x2145}, /* 2144 */
+ {0x2146,0x2146},{0x2147,0x2147}, /* 2146 */
+ {0x2148,0x2148},{0x2149,0x2149}, /* 2148 */
+ {0x214A,0x214A},{0x214B,0x214B}, /* 214A */
+ {0x214C,0x214C},{0x214D,0x214D}, /* 214C */
+ {0x2132,0x214E},{0x214F,0x214F}, /* 214E */
+ {0x2150,0x2150},{0x2151,0x2151}, /* 2150 */
+ {0x2152,0x2152},{0x2153,0x2153}, /* 2152 */
+ {0x2154,0x2154},{0x2155,0x2155}, /* 2154 */
+ {0x2156,0x2156},{0x2157,0x2157}, /* 2156 */
+ {0x2158,0x2158},{0x2159,0x2159}, /* 2158 */
+ {0x215A,0x215A},{0x215B,0x215B}, /* 215A */
+ {0x215C,0x215C},{0x215D,0x215D}, /* 215C */
+ {0x215E,0x215E},{0x215F,0x215F}, /* 215E */
+ {0x2160,0x2170},{0x2161,0x2171}, /* 2160 */
+ {0x2162,0x2172},{0x2163,0x2173}, /* 2162 */
+ {0x2164,0x2174},{0x2165,0x2175}, /* 2164 */
+ {0x2166,0x2176},{0x2167,0x2177}, /* 2166 */
+ {0x2168,0x2178},{0x2169,0x2179}, /* 2168 */
+ {0x216A,0x217A},{0x216B,0x217B}, /* 216A */
+ {0x216C,0x217C},{0x216D,0x217D}, /* 216C */
+ {0x216E,0x217E},{0x216F,0x217F}, /* 216E */
+ {0x2160,0x2170},{0x2161,0x2171}, /* 2170 */
+ {0x2162,0x2172},{0x2163,0x2173}, /* 2172 */
+ {0x2164,0x2174},{0x2165,0x2175}, /* 2174 */
+ {0x2166,0x2176},{0x2167,0x2177}, /* 2176 */
+ {0x2168,0x2178},{0x2169,0x2179}, /* 2178 */
+ {0x216A,0x217A},{0x216B,0x217B}, /* 217A */
+ {0x216C,0x217C},{0x216D,0x217D}, /* 217C */
+ {0x216E,0x217E},{0x216F,0x217F}, /* 217E */
+ {0x2180,0x2180},{0x2181,0x2181}, /* 2180 */
+ {0x2182,0x2182},{0x2183,0x2184}, /* 2182 */
+ {0x2183,0x2184},{0x2185,0x2185}, /* 2184 */
+ {0x2186,0x2186},{0x2187,0x2187}, /* 2186 */
+ {0x2188,0x2188},{0x2189,0x2189}, /* 2188 */
+ {0x218A,0x218A},{0x218B,0x218B}, /* 218A */
+ {0x218C,0x218C},{0x218D,0x218D}, /* 218C */
+ {0x218E,0x218E},{0x218F,0x218F}, /* 218E */
+ {0x2190,0x2190},{0x2191,0x2191}, /* 2190 */
+ {0x2192,0x2192},{0x2193,0x2193}, /* 2192 */
+ {0x2194,0x2194},{0x2195,0x2195}, /* 2194 */
+ {0x2196,0x2196},{0x2197,0x2197}, /* 2196 */
+ {0x2198,0x2198},{0x2199,0x2199}, /* 2198 */
+ {0x219A,0x219A},{0x219B,0x219B}, /* 219A */
+ {0x219C,0x219C},{0x219D,0x219D}, /* 219C */
+ {0x219E,0x219E},{0x219F,0x219F}, /* 219E */
+ {0x21A0,0x21A0},{0x21A1,0x21A1}, /* 21A0 */
+ {0x21A2,0x21A2},{0x21A3,0x21A3}, /* 21A2 */
+ {0x21A4,0x21A4},{0x21A5,0x21A5}, /* 21A4 */
+ {0x21A6,0x21A6},{0x21A7,0x21A7}, /* 21A6 */
+ {0x21A8,0x21A8},{0x21A9,0x21A9}, /* 21A8 */
+ {0x21AA,0x21AA},{0x21AB,0x21AB}, /* 21AA */
+ {0x21AC,0x21AC},{0x21AD,0x21AD}, /* 21AC */
+ {0x21AE,0x21AE},{0x21AF,0x21AF}, /* 21AE */
+ {0x21B0,0x21B0},{0x21B1,0x21B1}, /* 21B0 */
+ {0x21B2,0x21B2},{0x21B3,0x21B3}, /* 21B2 */
+ {0x21B4,0x21B4},{0x21B5,0x21B5}, /* 21B4 */
+ {0x21B6,0x21B6},{0x21B7,0x21B7}, /* 21B6 */
+ {0x21B8,0x21B8},{0x21B9,0x21B9}, /* 21B8 */
+ {0x21BA,0x21BA},{0x21BB,0x21BB}, /* 21BA */
+ {0x21BC,0x21BC},{0x21BD,0x21BD}, /* 21BC */
+ {0x21BE,0x21BE},{0x21BF,0x21BF}, /* 21BE */
+ {0x21C0,0x21C0},{0x21C1,0x21C1}, /* 21C0 */
+ {0x21C2,0x21C2},{0x21C3,0x21C3}, /* 21C2 */
+ {0x21C4,0x21C4},{0x21C5,0x21C5}, /* 21C4 */
+ {0x21C6,0x21C6},{0x21C7,0x21C7}, /* 21C6 */
+ {0x21C8,0x21C8},{0x21C9,0x21C9}, /* 21C8 */
+ {0x21CA,0x21CA},{0x21CB,0x21CB}, /* 21CA */
+ {0x21CC,0x21CC},{0x21CD,0x21CD}, /* 21CC */
+ {0x21CE,0x21CE},{0x21CF,0x21CF}, /* 21CE */
+ {0x21D0,0x21D0},{0x21D1,0x21D1}, /* 21D0 */
+ {0x21D2,0x21D2},{0x21D3,0x21D3}, /* 21D2 */
+ {0x21D4,0x21D4},{0x21D5,0x21D5}, /* 21D4 */
+ {0x21D6,0x21D6},{0x21D7,0x21D7}, /* 21D6 */
+ {0x21D8,0x21D8},{0x21D9,0x21D9}, /* 21D8 */
+ {0x21DA,0x21DA},{0x21DB,0x21DB}, /* 21DA */
+ {0x21DC,0x21DC},{0x21DD,0x21DD}, /* 21DC */
+ {0x21DE,0x21DE},{0x21DF,0x21DF}, /* 21DE */
+ {0x21E0,0x21E0},{0x21E1,0x21E1}, /* 21E0 */
+ {0x21E2,0x21E2},{0x21E3,0x21E3}, /* 21E2 */
+ {0x21E4,0x21E4},{0x21E5,0x21E5}, /* 21E4 */
+ {0x21E6,0x21E6},{0x21E7,0x21E7}, /* 21E6 */
+ {0x21E8,0x21E8},{0x21E9,0x21E9}, /* 21E8 */
+ {0x21EA,0x21EA},{0x21EB,0x21EB}, /* 21EA */
+ {0x21EC,0x21EC},{0x21ED,0x21ED}, /* 21EC */
+ {0x21EE,0x21EE},{0x21EF,0x21EF}, /* 21EE */
+ {0x21F0,0x21F0},{0x21F1,0x21F1}, /* 21F0 */
+ {0x21F2,0x21F2},{0x21F3,0x21F3}, /* 21F2 */
+ {0x21F4,0x21F4},{0x21F5,0x21F5}, /* 21F4 */
+ {0x21F6,0x21F6},{0x21F7,0x21F7}, /* 21F6 */
+ {0x21F8,0x21F8},{0x21F9,0x21F9}, /* 21F8 */
+ {0x21FA,0x21FA},{0x21FB,0x21FB}, /* 21FA */
+ {0x21FC,0x21FC},{0x21FD,0x21FD}, /* 21FC */
+ {0x21FE,0x21FE},{0x21FF,0x21FF} /* 21FE */
+};
+
+static const MY_CASEFOLD_CHARACTER u520_casefold_page24[256]={
+ {0x2400,0x2400},{0x2401,0x2401}, /* 2400 */
+ {0x2402,0x2402},{0x2403,0x2403}, /* 2402 */
+ {0x2404,0x2404},{0x2405,0x2405}, /* 2404 */
+ {0x2406,0x2406},{0x2407,0x2407}, /* 2406 */
+ {0x2408,0x2408},{0x2409,0x2409}, /* 2408 */
+ {0x240A,0x240A},{0x240B,0x240B}, /* 240A */
+ {0x240C,0x240C},{0x240D,0x240D}, /* 240C */
+ {0x240E,0x240E},{0x240F,0x240F}, /* 240E */
+ {0x2410,0x2410},{0x2411,0x2411}, /* 2410 */
+ {0x2412,0x2412},{0x2413,0x2413}, /* 2412 */
+ {0x2414,0x2414},{0x2415,0x2415}, /* 2414 */
+ {0x2416,0x2416},{0x2417,0x2417}, /* 2416 */
+ {0x2418,0x2418},{0x2419,0x2419}, /* 2418 */
+ {0x241A,0x241A},{0x241B,0x241B}, /* 241A */
+ {0x241C,0x241C},{0x241D,0x241D}, /* 241C */
+ {0x241E,0x241E},{0x241F,0x241F}, /* 241E */
+ {0x2420,0x2420},{0x2421,0x2421}, /* 2420 */
+ {0x2422,0x2422},{0x2423,0x2423}, /* 2422 */
+ {0x2424,0x2424},{0x2425,0x2425}, /* 2424 */
+ {0x2426,0x2426},{0x2427,0x2427}, /* 2426 */
+ {0x2428,0x2428},{0x2429,0x2429}, /* 2428 */
+ {0x242A,0x242A},{0x242B,0x242B}, /* 242A */
+ {0x242C,0x242C},{0x242D,0x242D}, /* 242C */
+ {0x242E,0x242E},{0x242F,0x242F}, /* 242E */
+ {0x2430,0x2430},{0x2431,0x2431}, /* 2430 */
+ {0x2432,0x2432},{0x2433,0x2433}, /* 2432 */
+ {0x2434,0x2434},{0x2435,0x2435}, /* 2434 */
+ {0x2436,0x2436},{0x2437,0x2437}, /* 2436 */
+ {0x2438,0x2438},{0x2439,0x2439}, /* 2438 */
+ {0x243A,0x243A},{0x243B,0x243B}, /* 243A */
+ {0x243C,0x243C},{0x243D,0x243D}, /* 243C */
+ {0x243E,0x243E},{0x243F,0x243F}, /* 243E */
+ {0x2440,0x2440},{0x2441,0x2441}, /* 2440 */
+ {0x2442,0x2442},{0x2443,0x2443}, /* 2442 */
+ {0x2444,0x2444},{0x2445,0x2445}, /* 2444 */
+ {0x2446,0x2446},{0x2447,0x2447}, /* 2446 */
+ {0x2448,0x2448},{0x2449,0x2449}, /* 2448 */
+ {0x244A,0x244A},{0x244B,0x244B}, /* 244A */
+ {0x244C,0x244C},{0x244D,0x244D}, /* 244C */
+ {0x244E,0x244E},{0x244F,0x244F}, /* 244E */
+ {0x2450,0x2450},{0x2451,0x2451}, /* 2450 */
+ {0x2452,0x2452},{0x2453,0x2453}, /* 2452 */
+ {0x2454,0x2454},{0x2455,0x2455}, /* 2454 */
+ {0x2456,0x2456},{0x2457,0x2457}, /* 2456 */
+ {0x2458,0x2458},{0x2459,0x2459}, /* 2458 */
+ {0x245A,0x245A},{0x245B,0x245B}, /* 245A */
+ {0x245C,0x245C},{0x245D,0x245D}, /* 245C */
+ {0x245E,0x245E},{0x245F,0x245F}, /* 245E */
+ {0x2460,0x2460},{0x2461,0x2461}, /* 2460 */
+ {0x2462,0x2462},{0x2463,0x2463}, /* 2462 */
+ {0x2464,0x2464},{0x2465,0x2465}, /* 2464 */
+ {0x2466,0x2466},{0x2467,0x2467}, /* 2466 */
+ {0x2468,0x2468},{0x2469,0x2469}, /* 2468 */
+ {0x246A,0x246A},{0x246B,0x246B}, /* 246A */
+ {0x246C,0x246C},{0x246D,0x246D}, /* 246C */
+ {0x246E,0x246E},{0x246F,0x246F}, /* 246E */
+ {0x2470,0x2470},{0x2471,0x2471}, /* 2470 */
+ {0x2472,0x2472},{0x2473,0x2473}, /* 2472 */
+ {0x2474,0x2474},{0x2475,0x2475}, /* 2474 */
+ {0x2476,0x2476},{0x2477,0x2477}, /* 2476 */
+ {0x2478,0x2478},{0x2479,0x2479}, /* 2478 */
+ {0x247A,0x247A},{0x247B,0x247B}, /* 247A */
+ {0x247C,0x247C},{0x247D,0x247D}, /* 247C */
+ {0x247E,0x247E},{0x247F,0x247F}, /* 247E */
+ {0x2480,0x2480},{0x2481,0x2481}, /* 2480 */
+ {0x2482,0x2482},{0x2483,0x2483}, /* 2482 */
+ {0x2484,0x2484},{0x2485,0x2485}, /* 2484 */
+ {0x2486,0x2486},{0x2487,0x2487}, /* 2486 */
+ {0x2488,0x2488},{0x2489,0x2489}, /* 2488 */
+ {0x248A,0x248A},{0x248B,0x248B}, /* 248A */
+ {0x248C,0x248C},{0x248D,0x248D}, /* 248C */
+ {0x248E,0x248E},{0x248F,0x248F}, /* 248E */
+ {0x2490,0x2490},{0x2491,0x2491}, /* 2490 */
+ {0x2492,0x2492},{0x2493,0x2493}, /* 2492 */
+ {0x2494,0x2494},{0x2495,0x2495}, /* 2494 */
+ {0x2496,0x2496},{0x2497,0x2497}, /* 2496 */
+ {0x2498,0x2498},{0x2499,0x2499}, /* 2498 */
+ {0x249A,0x249A},{0x249B,0x249B}, /* 249A */
+ {0x249C,0x249C},{0x249D,0x249D}, /* 249C */
+ {0x249E,0x249E},{0x249F,0x249F}, /* 249E */
+ {0x24A0,0x24A0},{0x24A1,0x24A1}, /* 24A0 */
+ {0x24A2,0x24A2},{0x24A3,0x24A3}, /* 24A2 */
+ {0x24A4,0x24A4},{0x24A5,0x24A5}, /* 24A4 */
+ {0x24A6,0x24A6},{0x24A7,0x24A7}, /* 24A6 */
+ {0x24A8,0x24A8},{0x24A9,0x24A9}, /* 24A8 */
+ {0x24AA,0x24AA},{0x24AB,0x24AB}, /* 24AA */
+ {0x24AC,0x24AC},{0x24AD,0x24AD}, /* 24AC */
+ {0x24AE,0x24AE},{0x24AF,0x24AF}, /* 24AE */
+ {0x24B0,0x24B0},{0x24B1,0x24B1}, /* 24B0 */
+ {0x24B2,0x24B2},{0x24B3,0x24B3}, /* 24B2 */
+ {0x24B4,0x24B4},{0x24B5,0x24B5}, /* 24B4 */
+ {0x24B6,0x24D0},{0x24B7,0x24D1}, /* 24B6 */
+ {0x24B8,0x24D2},{0x24B9,0x24D3}, /* 24B8 */
+ {0x24BA,0x24D4},{0x24BB,0x24D5}, /* 24BA */
+ {0x24BC,0x24D6},{0x24BD,0x24D7}, /* 24BC */
+ {0x24BE,0x24D8},{0x24BF,0x24D9}, /* 24BE */
+ {0x24C0,0x24DA},{0x24C1,0x24DB}, /* 24C0 */
+ {0x24C2,0x24DC},{0x24C3,0x24DD}, /* 24C2 */
+ {0x24C4,0x24DE},{0x24C5,0x24DF}, /* 24C4 */
+ {0x24C6,0x24E0},{0x24C7,0x24E1}, /* 24C6 */
+ {0x24C8,0x24E2},{0x24C9,0x24E3}, /* 24C8 */
+ {0x24CA,0x24E4},{0x24CB,0x24E5}, /* 24CA */
+ {0x24CC,0x24E6},{0x24CD,0x24E7}, /* 24CC */
+ {0x24CE,0x24E8},{0x24CF,0x24E9}, /* 24CE */
+ {0x24B6,0x24D0},{0x24B7,0x24D1}, /* 24D0 */
+ {0x24B8,0x24D2},{0x24B9,0x24D3}, /* 24D2 */
+ {0x24BA,0x24D4},{0x24BB,0x24D5}, /* 24D4 */
+ {0x24BC,0x24D6},{0x24BD,0x24D7}, /* 24D6 */
+ {0x24BE,0x24D8},{0x24BF,0x24D9}, /* 24D8 */
+ {0x24C0,0x24DA},{0x24C1,0x24DB}, /* 24DA */
+ {0x24C2,0x24DC},{0x24C3,0x24DD}, /* 24DC */
+ {0x24C4,0x24DE},{0x24C5,0x24DF}, /* 24DE */
+ {0x24C6,0x24E0},{0x24C7,0x24E1}, /* 24E0 */
+ {0x24C8,0x24E2},{0x24C9,0x24E3}, /* 24E2 */
+ {0x24CA,0x24E4},{0x24CB,0x24E5}, /* 24E4 */
+ {0x24CC,0x24E6},{0x24CD,0x24E7}, /* 24E6 */
+ {0x24CE,0x24E8},{0x24CF,0x24E9}, /* 24E8 */
+ {0x24EA,0x24EA},{0x24EB,0x24EB}, /* 24EA */
+ {0x24EC,0x24EC},{0x24ED,0x24ED}, /* 24EC */
+ {0x24EE,0x24EE},{0x24EF,0x24EF}, /* 24EE */
+ {0x24F0,0x24F0},{0x24F1,0x24F1}, /* 24F0 */
+ {0x24F2,0x24F2},{0x24F3,0x24F3}, /* 24F2 */
+ {0x24F4,0x24F4},{0x24F5,0x24F5}, /* 24F4 */
+ {0x24F6,0x24F6},{0x24F7,0x24F7}, /* 24F6 */
+ {0x24F8,0x24F8},{0x24F9,0x24F9}, /* 24F8 */
+ {0x24FA,0x24FA},{0x24FB,0x24FB}, /* 24FA */
+ {0x24FC,0x24FC},{0x24FD,0x24FD}, /* 24FC */
+ {0x24FE,0x24FE},{0x24FF,0x24FF} /* 24FE */
+};
+
+static const MY_CASEFOLD_CHARACTER u520_casefold_page2C[256]={
+ {0x2C00,0x2C30},{0x2C01,0x2C31}, /* 2C00 */
+ {0x2C02,0x2C32},{0x2C03,0x2C33}, /* 2C02 */
+ {0x2C04,0x2C34},{0x2C05,0x2C35}, /* 2C04 */
+ {0x2C06,0x2C36},{0x2C07,0x2C37}, /* 2C06 */
+ {0x2C08,0x2C38},{0x2C09,0x2C39}, /* 2C08 */
+ {0x2C0A,0x2C3A},{0x2C0B,0x2C3B}, /* 2C0A */
+ {0x2C0C,0x2C3C},{0x2C0D,0x2C3D}, /* 2C0C */
+ {0x2C0E,0x2C3E},{0x2C0F,0x2C3F}, /* 2C0E */
+ {0x2C10,0x2C40},{0x2C11,0x2C41}, /* 2C10 */
+ {0x2C12,0x2C42},{0x2C13,0x2C43}, /* 2C12 */
+ {0x2C14,0x2C44},{0x2C15,0x2C45}, /* 2C14 */
+ {0x2C16,0x2C46},{0x2C17,0x2C47}, /* 2C16 */
+ {0x2C18,0x2C48},{0x2C19,0x2C49}, /* 2C18 */
+ {0x2C1A,0x2C4A},{0x2C1B,0x2C4B}, /* 2C1A */
+ {0x2C1C,0x2C4C},{0x2C1D,0x2C4D}, /* 2C1C */
+ {0x2C1E,0x2C4E},{0x2C1F,0x2C4F}, /* 2C1E */
+ {0x2C20,0x2C50},{0x2C21,0x2C51}, /* 2C20 */
+ {0x2C22,0x2C52},{0x2C23,0x2C53}, /* 2C22 */
+ {0x2C24,0x2C54},{0x2C25,0x2C55}, /* 2C24 */
+ {0x2C26,0x2C56},{0x2C27,0x2C57}, /* 2C26 */
+ {0x2C28,0x2C58},{0x2C29,0x2C59}, /* 2C28 */
+ {0x2C2A,0x2C5A},{0x2C2B,0x2C5B}, /* 2C2A */
+ {0x2C2C,0x2C5C},{0x2C2D,0x2C5D}, /* 2C2C */
+ {0x2C2E,0x2C5E},{0x2C2F,0x2C2F}, /* 2C2E */
+ {0x2C00,0x2C30},{0x2C01,0x2C31}, /* 2C30 */
+ {0x2C02,0x2C32},{0x2C03,0x2C33}, /* 2C32 */
+ {0x2C04,0x2C34},{0x2C05,0x2C35}, /* 2C34 */
+ {0x2C06,0x2C36},{0x2C07,0x2C37}, /* 2C36 */
+ {0x2C08,0x2C38},{0x2C09,0x2C39}, /* 2C38 */
+ {0x2C0A,0x2C3A},{0x2C0B,0x2C3B}, /* 2C3A */
+ {0x2C0C,0x2C3C},{0x2C0D,0x2C3D}, /* 2C3C */
+ {0x2C0E,0x2C3E},{0x2C0F,0x2C3F}, /* 2C3E */
+ {0x2C10,0x2C40},{0x2C11,0x2C41}, /* 2C40 */
+ {0x2C12,0x2C42},{0x2C13,0x2C43}, /* 2C42 */
+ {0x2C14,0x2C44},{0x2C15,0x2C45}, /* 2C44 */
+ {0x2C16,0x2C46},{0x2C17,0x2C47}, /* 2C46 */
+ {0x2C18,0x2C48},{0x2C19,0x2C49}, /* 2C48 */
+ {0x2C1A,0x2C4A},{0x2C1B,0x2C4B}, /* 2C4A */
+ {0x2C1C,0x2C4C},{0x2C1D,0x2C4D}, /* 2C4C */
+ {0x2C1E,0x2C4E},{0x2C1F,0x2C4F}, /* 2C4E */
+ {0x2C20,0x2C50},{0x2C21,0x2C51}, /* 2C50 */
+ {0x2C22,0x2C52},{0x2C23,0x2C53}, /* 2C52 */
+ {0x2C24,0x2C54},{0x2C25,0x2C55}, /* 2C54 */
+ {0x2C26,0x2C56},{0x2C27,0x2C57}, /* 2C56 */
+ {0x2C28,0x2C58},{0x2C29,0x2C59}, /* 2C58 */
+ {0x2C2A,0x2C5A},{0x2C2B,0x2C5B}, /* 2C5A */
+ {0x2C2C,0x2C5C},{0x2C2D,0x2C5D}, /* 2C5C */
+ {0x2C2E,0x2C5E},{0x2C5F,0x2C5F}, /* 2C5E */
+ {0x2C60,0x2C61},{0x2C60,0x2C61}, /* 2C60 */
+ {0x2C62,0x026B},{0x2C63,0x1D7D}, /* 2C62 */
+ {0x2C64,0x027D},{0x023A,0x2C65}, /* 2C64 */
+ {0x023E,0x2C66},{0x2C67,0x2C68}, /* 2C66 */
+ {0x2C67,0x2C68},{0x2C69,0x2C6A}, /* 2C68 */
+ {0x2C69,0x2C6A},{0x2C6B,0x2C6C}, /* 2C6A */
+ {0x2C6B,0x2C6C},{0x2C6D,0x0251}, /* 2C6C */
+ {0x2C6E,0x0271},{0x2C6F,0x0250}, /* 2C6E */
+ {0x2C70,0x0252},{0x2C71,0x2C71}, /* 2C70 */
+ {0x2C72,0x2C73},{0x2C72,0x2C73}, /* 2C72 */
+ {0x2C74,0x2C74},{0x2C75,0x2C76}, /* 2C74 */
+ {0x2C75,0x2C76},{0x2C77,0x2C77}, /* 2C76 */
+ {0x2C78,0x2C78},{0x2C79,0x2C79}, /* 2C78 */
+ {0x2C7A,0x2C7A},{0x2C7B,0x2C7B}, /* 2C7A */
+ {0x2C7C,0x2C7C},{0x2C7D,0x2C7D}, /* 2C7C */
+ {0x2C7E,0x023F},{0x2C7F,0x0240}, /* 2C7E */
+ {0x2C80,0x2C81},{0x2C80,0x2C81}, /* 2C80 */
+ {0x2C82,0x2C83},{0x2C82,0x2C83}, /* 2C82 */
+ {0x2C84,0x2C85},{0x2C84,0x2C85}, /* 2C84 */
+ {0x2C86,0x2C87},{0x2C86,0x2C87}, /* 2C86 */
+ {0x2C88,0x2C89},{0x2C88,0x2C89}, /* 2C88 */
+ {0x2C8A,0x2C8B},{0x2C8A,0x2C8B}, /* 2C8A */
+ {0x2C8C,0x2C8D},{0x2C8C,0x2C8D}, /* 2C8C */
+ {0x2C8E,0x2C8F},{0x2C8E,0x2C8F}, /* 2C8E */
+ {0x2C90,0x2C91},{0x2C90,0x2C91}, /* 2C90 */
+ {0x2C92,0x2C93},{0x2C92,0x2C93}, /* 2C92 */
+ {0x2C94,0x2C95},{0x2C94,0x2C95}, /* 2C94 */
+ {0x2C96,0x2C97},{0x2C96,0x2C97}, /* 2C96 */
+ {0x2C98,0x2C99},{0x2C98,0x2C99}, /* 2C98 */
+ {0x2C9A,0x2C9B},{0x2C9A,0x2C9B}, /* 2C9A */
+ {0x2C9C,0x2C9D},{0x2C9C,0x2C9D}, /* 2C9C */
+ {0x2C9E,0x2C9F},{0x2C9E,0x2C9F}, /* 2C9E */
+ {0x2CA0,0x2CA1},{0x2CA0,0x2CA1}, /* 2CA0 */
+ {0x2CA2,0x2CA3},{0x2CA2,0x2CA3}, /* 2CA2 */
+ {0x2CA4,0x2CA5},{0x2CA4,0x2CA5}, /* 2CA4 */
+ {0x2CA6,0x2CA7},{0x2CA6,0x2CA7}, /* 2CA6 */
+ {0x2CA8,0x2CA9},{0x2CA8,0x2CA9}, /* 2CA8 */
+ {0x2CAA,0x2CAB},{0x2CAA,0x2CAB}, /* 2CAA */
+ {0x2CAC,0x2CAD},{0x2CAC,0x2CAD}, /* 2CAC */
+ {0x2CAE,0x2CAF},{0x2CAE,0x2CAF}, /* 2CAE */
+ {0x2CB0,0x2CB1},{0x2CB0,0x2CB1}, /* 2CB0 */
+ {0x2CB2,0x2CB3},{0x2CB2,0x2CB3}, /* 2CB2 */
+ {0x2CB4,0x2CB5},{0x2CB4,0x2CB5}, /* 2CB4 */
+ {0x2CB6,0x2CB7},{0x2CB6,0x2CB7}, /* 2CB6 */
+ {0x2CB8,0x2CB9},{0x2CB8,0x2CB9}, /* 2CB8 */
+ {0x2CBA,0x2CBB},{0x2CBA,0x2CBB}, /* 2CBA */
+ {0x2CBC,0x2CBD},{0x2CBC,0x2CBD}, /* 2CBC */
+ {0x2CBE,0x2CBF},{0x2CBE,0x2CBF}, /* 2CBE */
+ {0x2CC0,0x2CC1},{0x2CC0,0x2CC1}, /* 2CC0 */
+ {0x2CC2,0x2CC3},{0x2CC2,0x2CC3}, /* 2CC2 */
+ {0x2CC4,0x2CC5},{0x2CC4,0x2CC5}, /* 2CC4 */
+ {0x2CC6,0x2CC7},{0x2CC6,0x2CC7}, /* 2CC6 */
+ {0x2CC8,0x2CC9},{0x2CC8,0x2CC9}, /* 2CC8 */
+ {0x2CCA,0x2CCB},{0x2CCA,0x2CCB}, /* 2CCA */
+ {0x2CCC,0x2CCD},{0x2CCC,0x2CCD}, /* 2CCC */
+ {0x2CCE,0x2CCF},{0x2CCE,0x2CCF}, /* 2CCE */
+ {0x2CD0,0x2CD1},{0x2CD0,0x2CD1}, /* 2CD0 */
+ {0x2CD2,0x2CD3},{0x2CD2,0x2CD3}, /* 2CD2 */
+ {0x2CD4,0x2CD5},{0x2CD4,0x2CD5}, /* 2CD4 */
+ {0x2CD6,0x2CD7},{0x2CD6,0x2CD7}, /* 2CD6 */
+ {0x2CD8,0x2CD9},{0x2CD8,0x2CD9}, /* 2CD8 */
+ {0x2CDA,0x2CDB},{0x2CDA,0x2CDB}, /* 2CDA */
+ {0x2CDC,0x2CDD},{0x2CDC,0x2CDD}, /* 2CDC */
+ {0x2CDE,0x2CDF},{0x2CDE,0x2CDF}, /* 2CDE */
+ {0x2CE0,0x2CE1},{0x2CE0,0x2CE1}, /* 2CE0 */
+ {0x2CE2,0x2CE3},{0x2CE2,0x2CE3}, /* 2CE2 */
+ {0x2CE4,0x2CE4},{0x2CE5,0x2CE5}, /* 2CE4 */
+ {0x2CE6,0x2CE6},{0x2CE7,0x2CE7}, /* 2CE6 */
+ {0x2CE8,0x2CE8},{0x2CE9,0x2CE9}, /* 2CE8 */
+ {0x2CEA,0x2CEA},{0x2CEB,0x2CEC}, /* 2CEA */
+ {0x2CEB,0x2CEC},{0x2CED,0x2CEE}, /* 2CEC */
+ {0x2CED,0x2CEE},{0x2CEF,0x2CEF}, /* 2CEE */
+ {0x2CF0,0x2CF0},{0x2CF1,0x2CF1}, /* 2CF0 */
+ {0x2CF2,0x2CF2},{0x2CF3,0x2CF3}, /* 2CF2 */
+ {0x2CF4,0x2CF4},{0x2CF5,0x2CF5}, /* 2CF4 */
+ {0x2CF6,0x2CF6},{0x2CF7,0x2CF7}, /* 2CF6 */
+ {0x2CF8,0x2CF8},{0x2CF9,0x2CF9}, /* 2CF8 */
+ {0x2CFA,0x2CFA},{0x2CFB,0x2CFB}, /* 2CFA */
+ {0x2CFC,0x2CFC},{0x2CFD,0x2CFD}, /* 2CFC */
+ {0x2CFE,0x2CFE},{0x2CFF,0x2CFF} /* 2CFE */
+};
+
+static const MY_CASEFOLD_CHARACTER u520_casefold_page2D[256]={
+ {0x10A0,0x2D00},{0x10A1,0x2D01}, /* 2D00 */
+ {0x10A2,0x2D02},{0x10A3,0x2D03}, /* 2D02 */
+ {0x10A4,0x2D04},{0x10A5,0x2D05}, /* 2D04 */
+ {0x10A6,0x2D06},{0x10A7,0x2D07}, /* 2D06 */
+ {0x10A8,0x2D08},{0x10A9,0x2D09}, /* 2D08 */
+ {0x10AA,0x2D0A},{0x10AB,0x2D0B}, /* 2D0A */
+ {0x10AC,0x2D0C},{0x10AD,0x2D0D}, /* 2D0C */
+ {0x10AE,0x2D0E},{0x10AF,0x2D0F}, /* 2D0E */
+ {0x10B0,0x2D10},{0x10B1,0x2D11}, /* 2D10 */
+ {0x10B2,0x2D12},{0x10B3,0x2D13}, /* 2D12 */
+ {0x10B4,0x2D14},{0x10B5,0x2D15}, /* 2D14 */
+ {0x10B6,0x2D16},{0x10B7,0x2D17}, /* 2D16 */
+ {0x10B8,0x2D18},{0x10B9,0x2D19}, /* 2D18 */
+ {0x10BA,0x2D1A},{0x10BB,0x2D1B}, /* 2D1A */
+ {0x10BC,0x2D1C},{0x10BD,0x2D1D}, /* 2D1C */
+ {0x10BE,0x2D1E},{0x10BF,0x2D1F}, /* 2D1E */
+ {0x10C0,0x2D20},{0x10C1,0x2D21}, /* 2D20 */
+ {0x10C2,0x2D22},{0x10C3,0x2D23}, /* 2D22 */
+ {0x10C4,0x2D24},{0x10C5,0x2D25}, /* 2D24 */
+ {0x2D26,0x2D26},{0x2D27,0x2D27}, /* 2D26 */
+ {0x2D28,0x2D28},{0x2D29,0x2D29}, /* 2D28 */
+ {0x2D2A,0x2D2A},{0x2D2B,0x2D2B}, /* 2D2A */
+ {0x2D2C,0x2D2C},{0x2D2D,0x2D2D}, /* 2D2C */
+ {0x2D2E,0x2D2E},{0x2D2F,0x2D2F}, /* 2D2E */
+ {0x2D30,0x2D30},{0x2D31,0x2D31}, /* 2D30 */
+ {0x2D32,0x2D32},{0x2D33,0x2D33}, /* 2D32 */
+ {0x2D34,0x2D34},{0x2D35,0x2D35}, /* 2D34 */
+ {0x2D36,0x2D36},{0x2D37,0x2D37}, /* 2D36 */
+ {0x2D38,0x2D38},{0x2D39,0x2D39}, /* 2D38 */
+ {0x2D3A,0x2D3A},{0x2D3B,0x2D3B}, /* 2D3A */
+ {0x2D3C,0x2D3C},{0x2D3D,0x2D3D}, /* 2D3C */
+ {0x2D3E,0x2D3E},{0x2D3F,0x2D3F}, /* 2D3E */
+ {0x2D40,0x2D40},{0x2D41,0x2D41}, /* 2D40 */
+ {0x2D42,0x2D42},{0x2D43,0x2D43}, /* 2D42 */
+ {0x2D44,0x2D44},{0x2D45,0x2D45}, /* 2D44 */
+ {0x2D46,0x2D46},{0x2D47,0x2D47}, /* 2D46 */
+ {0x2D48,0x2D48},{0x2D49,0x2D49}, /* 2D48 */
+ {0x2D4A,0x2D4A},{0x2D4B,0x2D4B}, /* 2D4A */
+ {0x2D4C,0x2D4C},{0x2D4D,0x2D4D}, /* 2D4C */
+ {0x2D4E,0x2D4E},{0x2D4F,0x2D4F}, /* 2D4E */
+ {0x2D50,0x2D50},{0x2D51,0x2D51}, /* 2D50 */
+ {0x2D52,0x2D52},{0x2D53,0x2D53}, /* 2D52 */
+ {0x2D54,0x2D54},{0x2D55,0x2D55}, /* 2D54 */
+ {0x2D56,0x2D56},{0x2D57,0x2D57}, /* 2D56 */
+ {0x2D58,0x2D58},{0x2D59,0x2D59}, /* 2D58 */
+ {0x2D5A,0x2D5A},{0x2D5B,0x2D5B}, /* 2D5A */
+ {0x2D5C,0x2D5C},{0x2D5D,0x2D5D}, /* 2D5C */
+ {0x2D5E,0x2D5E},{0x2D5F,0x2D5F}, /* 2D5E */
+ {0x2D60,0x2D60},{0x2D61,0x2D61}, /* 2D60 */
+ {0x2D62,0x2D62},{0x2D63,0x2D63}, /* 2D62 */
+ {0x2D64,0x2D64},{0x2D65,0x2D65}, /* 2D64 */
+ {0x2D66,0x2D66},{0x2D67,0x2D67}, /* 2D66 */
+ {0x2D68,0x2D68},{0x2D69,0x2D69}, /* 2D68 */
+ {0x2D6A,0x2D6A},{0x2D6B,0x2D6B}, /* 2D6A */
+ {0x2D6C,0x2D6C},{0x2D6D,0x2D6D}, /* 2D6C */
+ {0x2D6E,0x2D6E},{0x2D6F,0x2D6F}, /* 2D6E */
+ {0x2D70,0x2D70},{0x2D71,0x2D71}, /* 2D70 */
+ {0x2D72,0x2D72},{0x2D73,0x2D73}, /* 2D72 */
+ {0x2D74,0x2D74},{0x2D75,0x2D75}, /* 2D74 */
+ {0x2D76,0x2D76},{0x2D77,0x2D77}, /* 2D76 */
+ {0x2D78,0x2D78},{0x2D79,0x2D79}, /* 2D78 */
+ {0x2D7A,0x2D7A},{0x2D7B,0x2D7B}, /* 2D7A */
+ {0x2D7C,0x2D7C},{0x2D7D,0x2D7D}, /* 2D7C */
+ {0x2D7E,0x2D7E},{0x2D7F,0x2D7F}, /* 2D7E */
+ {0x2D80,0x2D80},{0x2D81,0x2D81}, /* 2D80 */
+ {0x2D82,0x2D82},{0x2D83,0x2D83}, /* 2D82 */
+ {0x2D84,0x2D84},{0x2D85,0x2D85}, /* 2D84 */
+ {0x2D86,0x2D86},{0x2D87,0x2D87}, /* 2D86 */
+ {0x2D88,0x2D88},{0x2D89,0x2D89}, /* 2D88 */
+ {0x2D8A,0x2D8A},{0x2D8B,0x2D8B}, /* 2D8A */
+ {0x2D8C,0x2D8C},{0x2D8D,0x2D8D}, /* 2D8C */
+ {0x2D8E,0x2D8E},{0x2D8F,0x2D8F}, /* 2D8E */
+ {0x2D90,0x2D90},{0x2D91,0x2D91}, /* 2D90 */
+ {0x2D92,0x2D92},{0x2D93,0x2D93}, /* 2D92 */
+ {0x2D94,0x2D94},{0x2D95,0x2D95}, /* 2D94 */
+ {0x2D96,0x2D96},{0x2D97,0x2D97}, /* 2D96 */
+ {0x2D98,0x2D98},{0x2D99,0x2D99}, /* 2D98 */
+ {0x2D9A,0x2D9A},{0x2D9B,0x2D9B}, /* 2D9A */
+ {0x2D9C,0x2D9C},{0x2D9D,0x2D9D}, /* 2D9C */
+ {0x2D9E,0x2D9E},{0x2D9F,0x2D9F}, /* 2D9E */
+ {0x2DA0,0x2DA0},{0x2DA1,0x2DA1}, /* 2DA0 */
+ {0x2DA2,0x2DA2},{0x2DA3,0x2DA3}, /* 2DA2 */
+ {0x2DA4,0x2DA4},{0x2DA5,0x2DA5}, /* 2DA4 */
+ {0x2DA6,0x2DA6},{0x2DA7,0x2DA7}, /* 2DA6 */
+ {0x2DA8,0x2DA8},{0x2DA9,0x2DA9}, /* 2DA8 */
+ {0x2DAA,0x2DAA},{0x2DAB,0x2DAB}, /* 2DAA */
+ {0x2DAC,0x2DAC},{0x2DAD,0x2DAD}, /* 2DAC */
+ {0x2DAE,0x2DAE},{0x2DAF,0x2DAF}, /* 2DAE */
+ {0x2DB0,0x2DB0},{0x2DB1,0x2DB1}, /* 2DB0 */
+ {0x2DB2,0x2DB2},{0x2DB3,0x2DB3}, /* 2DB2 */
+ {0x2DB4,0x2DB4},{0x2DB5,0x2DB5}, /* 2DB4 */
+ {0x2DB6,0x2DB6},{0x2DB7,0x2DB7}, /* 2DB6 */
+ {0x2DB8,0x2DB8},{0x2DB9,0x2DB9}, /* 2DB8 */
+ {0x2DBA,0x2DBA},{0x2DBB,0x2DBB}, /* 2DBA */
+ {0x2DBC,0x2DBC},{0x2DBD,0x2DBD}, /* 2DBC */
+ {0x2DBE,0x2DBE},{0x2DBF,0x2DBF}, /* 2DBE */
+ {0x2DC0,0x2DC0},{0x2DC1,0x2DC1}, /* 2DC0 */
+ {0x2DC2,0x2DC2},{0x2DC3,0x2DC3}, /* 2DC2 */
+ {0x2DC4,0x2DC4},{0x2DC5,0x2DC5}, /* 2DC4 */
+ {0x2DC6,0x2DC6},{0x2DC7,0x2DC7}, /* 2DC6 */
+ {0x2DC8,0x2DC8},{0x2DC9,0x2DC9}, /* 2DC8 */
+ {0x2DCA,0x2DCA},{0x2DCB,0x2DCB}, /* 2DCA */
+ {0x2DCC,0x2DCC},{0x2DCD,0x2DCD}, /* 2DCC */
+ {0x2DCE,0x2DCE},{0x2DCF,0x2DCF}, /* 2DCE */
+ {0x2DD0,0x2DD0},{0x2DD1,0x2DD1}, /* 2DD0 */
+ {0x2DD2,0x2DD2},{0x2DD3,0x2DD3}, /* 2DD2 */
+ {0x2DD4,0x2DD4},{0x2DD5,0x2DD5}, /* 2DD4 */
+ {0x2DD6,0x2DD6},{0x2DD7,0x2DD7}, /* 2DD6 */
+ {0x2DD8,0x2DD8},{0x2DD9,0x2DD9}, /* 2DD8 */
+ {0x2DDA,0x2DDA},{0x2DDB,0x2DDB}, /* 2DDA */
+ {0x2DDC,0x2DDC},{0x2DDD,0x2DDD}, /* 2DDC */
+ {0x2DDE,0x2DDE},{0x2DDF,0x2DDF}, /* 2DDE */
+ {0x2DE0,0x2DE0},{0x2DE1,0x2DE1}, /* 2DE0 */
+ {0x2DE2,0x2DE2},{0x2DE3,0x2DE3}, /* 2DE2 */
+ {0x2DE4,0x2DE4},{0x2DE5,0x2DE5}, /* 2DE4 */
+ {0x2DE6,0x2DE6},{0x2DE7,0x2DE7}, /* 2DE6 */
+ {0x2DE8,0x2DE8},{0x2DE9,0x2DE9}, /* 2DE8 */
+ {0x2DEA,0x2DEA},{0x2DEB,0x2DEB}, /* 2DEA */
+ {0x2DEC,0x2DEC},{0x2DED,0x2DED}, /* 2DEC */
+ {0x2DEE,0x2DEE},{0x2DEF,0x2DEF}, /* 2DEE */
+ {0x2DF0,0x2DF0},{0x2DF1,0x2DF1}, /* 2DF0 */
+ {0x2DF2,0x2DF2},{0x2DF3,0x2DF3}, /* 2DF2 */
+ {0x2DF4,0x2DF4},{0x2DF5,0x2DF5}, /* 2DF4 */
+ {0x2DF6,0x2DF6},{0x2DF7,0x2DF7}, /* 2DF6 */
+ {0x2DF8,0x2DF8},{0x2DF9,0x2DF9}, /* 2DF8 */
+ {0x2DFA,0x2DFA},{0x2DFB,0x2DFB}, /* 2DFA */
+ {0x2DFC,0x2DFC},{0x2DFD,0x2DFD}, /* 2DFC */
+ {0x2DFE,0x2DFE},{0x2DFF,0x2DFF} /* 2DFE */
+};
+
+static const MY_CASEFOLD_CHARACTER u520_casefold_pageA6[256]={
+ {0xA600,0xA600},{0xA601,0xA601}, /* A600 */
+ {0xA602,0xA602},{0xA603,0xA603}, /* A602 */
+ {0xA604,0xA604},{0xA605,0xA605}, /* A604 */
+ {0xA606,0xA606},{0xA607,0xA607}, /* A606 */
+ {0xA608,0xA608},{0xA609,0xA609}, /* A608 */
+ {0xA60A,0xA60A},{0xA60B,0xA60B}, /* A60A */
+ {0xA60C,0xA60C},{0xA60D,0xA60D}, /* A60C */
+ {0xA60E,0xA60E},{0xA60F,0xA60F}, /* A60E */
+ {0xA610,0xA610},{0xA611,0xA611}, /* A610 */
+ {0xA612,0xA612},{0xA613,0xA613}, /* A612 */
+ {0xA614,0xA614},{0xA615,0xA615}, /* A614 */
+ {0xA616,0xA616},{0xA617,0xA617}, /* A616 */
+ {0xA618,0xA618},{0xA619,0xA619}, /* A618 */
+ {0xA61A,0xA61A},{0xA61B,0xA61B}, /* A61A */
+ {0xA61C,0xA61C},{0xA61D,0xA61D}, /* A61C */
+ {0xA61E,0xA61E},{0xA61F,0xA61F}, /* A61E */
+ {0xA620,0xA620},{0xA621,0xA621}, /* A620 */
+ {0xA622,0xA622},{0xA623,0xA623}, /* A622 */
+ {0xA624,0xA624},{0xA625,0xA625}, /* A624 */
+ {0xA626,0xA626},{0xA627,0xA627}, /* A626 */
+ {0xA628,0xA628},{0xA629,0xA629}, /* A628 */
+ {0xA62A,0xA62A},{0xA62B,0xA62B}, /* A62A */
+ {0xA62C,0xA62C},{0xA62D,0xA62D}, /* A62C */
+ {0xA62E,0xA62E},{0xA62F,0xA62F}, /* A62E */
+ {0xA630,0xA630},{0xA631,0xA631}, /* A630 */
+ {0xA632,0xA632},{0xA633,0xA633}, /* A632 */
+ {0xA634,0xA634},{0xA635,0xA635}, /* A634 */
+ {0xA636,0xA636},{0xA637,0xA637}, /* A636 */
+ {0xA638,0xA638},{0xA639,0xA639}, /* A638 */
+ {0xA63A,0xA63A},{0xA63B,0xA63B}, /* A63A */
+ {0xA63C,0xA63C},{0xA63D,0xA63D}, /* A63C */
+ {0xA63E,0xA63E},{0xA63F,0xA63F}, /* A63E */
+ {0xA640,0xA641},{0xA640,0xA641}, /* A640 */
+ {0xA642,0xA643},{0xA642,0xA643}, /* A642 */
+ {0xA644,0xA645},{0xA644,0xA645}, /* A644 */
+ {0xA646,0xA647},{0xA646,0xA647}, /* A646 */
+ {0xA648,0xA649},{0xA648,0xA649}, /* A648 */
+ {0xA64A,0xA64B},{0xA64A,0xA64B}, /* A64A */
+ {0xA64C,0xA64D},{0xA64C,0xA64D}, /* A64C */
+ {0xA64E,0xA64F},{0xA64E,0xA64F}, /* A64E */
+ {0xA650,0xA651},{0xA650,0xA651}, /* A650 */
+ {0xA652,0xA653},{0xA652,0xA653}, /* A652 */
+ {0xA654,0xA655},{0xA654,0xA655}, /* A654 */
+ {0xA656,0xA657},{0xA656,0xA657}, /* A656 */
+ {0xA658,0xA659},{0xA658,0xA659}, /* A658 */
+ {0xA65A,0xA65B},{0xA65A,0xA65B}, /* A65A */
+ {0xA65C,0xA65D},{0xA65C,0xA65D}, /* A65C */
+ {0xA65E,0xA65F},{0xA65E,0xA65F}, /* A65E */
+ {0xA660,0xA660},{0xA661,0xA661}, /* A660 */
+ {0xA662,0xA663},{0xA662,0xA663}, /* A662 */
+ {0xA664,0xA665},{0xA664,0xA665}, /* A664 */
+ {0xA666,0xA667},{0xA666,0xA667}, /* A666 */
+ {0xA668,0xA669},{0xA668,0xA669}, /* A668 */
+ {0xA66A,0xA66B},{0xA66A,0xA66B}, /* A66A */
+ {0xA66C,0xA66D},{0xA66C,0xA66D}, /* A66C */
+ {0xA66E,0xA66E},{0xA66F,0xA66F}, /* A66E */
+ {0xA670,0xA670},{0xA671,0xA671}, /* A670 */
+ {0xA672,0xA672},{0xA673,0xA673}, /* A672 */
+ {0xA674,0xA674},{0xA675,0xA675}, /* A674 */
+ {0xA676,0xA676},{0xA677,0xA677}, /* A676 */
+ {0xA678,0xA678},{0xA679,0xA679}, /* A678 */
+ {0xA67A,0xA67A},{0xA67B,0xA67B}, /* A67A */
+ {0xA67C,0xA67C},{0xA67D,0xA67D}, /* A67C */
+ {0xA67E,0xA67E},{0xA67F,0xA67F}, /* A67E */
+ {0xA680,0xA681},{0xA680,0xA681}, /* A680 */
+ {0xA682,0xA683},{0xA682,0xA683}, /* A682 */
+ {0xA684,0xA685},{0xA684,0xA685}, /* A684 */
+ {0xA686,0xA687},{0xA686,0xA687}, /* A686 */
+ {0xA688,0xA689},{0xA688,0xA689}, /* A688 */
+ {0xA68A,0xA68B},{0xA68A,0xA68B}, /* A68A */
+ {0xA68C,0xA68D},{0xA68C,0xA68D}, /* A68C */
+ {0xA68E,0xA68F},{0xA68E,0xA68F}, /* A68E */
+ {0xA690,0xA691},{0xA690,0xA691}, /* A690 */
+ {0xA692,0xA693},{0xA692,0xA693}, /* A692 */
+ {0xA694,0xA695},{0xA694,0xA695}, /* A694 */
+ {0xA696,0xA697},{0xA696,0xA697}, /* A696 */
+ {0xA698,0xA698},{0xA699,0xA699}, /* A698 */
+ {0xA69A,0xA69A},{0xA69B,0xA69B}, /* A69A */
+ {0xA69C,0xA69C},{0xA69D,0xA69D}, /* A69C */
+ {0xA69E,0xA69E},{0xA69F,0xA69F}, /* A69E */
+ {0xA6A0,0xA6A0},{0xA6A1,0xA6A1}, /* A6A0 */
+ {0xA6A2,0xA6A2},{0xA6A3,0xA6A3}, /* A6A2 */
+ {0xA6A4,0xA6A4},{0xA6A5,0xA6A5}, /* A6A4 */
+ {0xA6A6,0xA6A6},{0xA6A7,0xA6A7}, /* A6A6 */
+ {0xA6A8,0xA6A8},{0xA6A9,0xA6A9}, /* A6A8 */
+ {0xA6AA,0xA6AA},{0xA6AB,0xA6AB}, /* A6AA */
+ {0xA6AC,0xA6AC},{0xA6AD,0xA6AD}, /* A6AC */
+ {0xA6AE,0xA6AE},{0xA6AF,0xA6AF}, /* A6AE */
+ {0xA6B0,0xA6B0},{0xA6B1,0xA6B1}, /* A6B0 */
+ {0xA6B2,0xA6B2},{0xA6B3,0xA6B3}, /* A6B2 */
+ {0xA6B4,0xA6B4},{0xA6B5,0xA6B5}, /* A6B4 */
+ {0xA6B6,0xA6B6},{0xA6B7,0xA6B7}, /* A6B6 */
+ {0xA6B8,0xA6B8},{0xA6B9,0xA6B9}, /* A6B8 */
+ {0xA6BA,0xA6BA},{0xA6BB,0xA6BB}, /* A6BA */
+ {0xA6BC,0xA6BC},{0xA6BD,0xA6BD}, /* A6BC */
+ {0xA6BE,0xA6BE},{0xA6BF,0xA6BF}, /* A6BE */
+ {0xA6C0,0xA6C0},{0xA6C1,0xA6C1}, /* A6C0 */
+ {0xA6C2,0xA6C2},{0xA6C3,0xA6C3}, /* A6C2 */
+ {0xA6C4,0xA6C4},{0xA6C5,0xA6C5}, /* A6C4 */
+ {0xA6C6,0xA6C6},{0xA6C7,0xA6C7}, /* A6C6 */
+ {0xA6C8,0xA6C8},{0xA6C9,0xA6C9}, /* A6C8 */
+ {0xA6CA,0xA6CA},{0xA6CB,0xA6CB}, /* A6CA */
+ {0xA6CC,0xA6CC},{0xA6CD,0xA6CD}, /* A6CC */
+ {0xA6CE,0xA6CE},{0xA6CF,0xA6CF}, /* A6CE */
+ {0xA6D0,0xA6D0},{0xA6D1,0xA6D1}, /* A6D0 */
+ {0xA6D2,0xA6D2},{0xA6D3,0xA6D3}, /* A6D2 */
+ {0xA6D4,0xA6D4},{0xA6D5,0xA6D5}, /* A6D4 */
+ {0xA6D6,0xA6D6},{0xA6D7,0xA6D7}, /* A6D6 */
+ {0xA6D8,0xA6D8},{0xA6D9,0xA6D9}, /* A6D8 */
+ {0xA6DA,0xA6DA},{0xA6DB,0xA6DB}, /* A6DA */
+ {0xA6DC,0xA6DC},{0xA6DD,0xA6DD}, /* A6DC */
+ {0xA6DE,0xA6DE},{0xA6DF,0xA6DF}, /* A6DE */
+ {0xA6E0,0xA6E0},{0xA6E1,0xA6E1}, /* A6E0 */
+ {0xA6E2,0xA6E2},{0xA6E3,0xA6E3}, /* A6E2 */
+ {0xA6E4,0xA6E4},{0xA6E5,0xA6E5}, /* A6E4 */
+ {0xA6E6,0xA6E6},{0xA6E7,0xA6E7}, /* A6E6 */
+ {0xA6E8,0xA6E8},{0xA6E9,0xA6E9}, /* A6E8 */
+ {0xA6EA,0xA6EA},{0xA6EB,0xA6EB}, /* A6EA */
+ {0xA6EC,0xA6EC},{0xA6ED,0xA6ED}, /* A6EC */
+ {0xA6EE,0xA6EE},{0xA6EF,0xA6EF}, /* A6EE */
+ {0xA6F0,0xA6F0},{0xA6F1,0xA6F1}, /* A6F0 */
+ {0xA6F2,0xA6F2},{0xA6F3,0xA6F3}, /* A6F2 */
+ {0xA6F4,0xA6F4},{0xA6F5,0xA6F5}, /* A6F4 */
+ {0xA6F6,0xA6F6},{0xA6F7,0xA6F7}, /* A6F6 */
+ {0xA6F8,0xA6F8},{0xA6F9,0xA6F9}, /* A6F8 */
+ {0xA6FA,0xA6FA},{0xA6FB,0xA6FB}, /* A6FA */
+ {0xA6FC,0xA6FC},{0xA6FD,0xA6FD}, /* A6FC */
+ {0xA6FE,0xA6FE},{0xA6FF,0xA6FF} /* A6FE */
+};
+
+static const MY_CASEFOLD_CHARACTER u520_casefold_pageA7[256]={
+ {0xA700,0xA700},{0xA701,0xA701}, /* A700 */
+ {0xA702,0xA702},{0xA703,0xA703}, /* A702 */
+ {0xA704,0xA704},{0xA705,0xA705}, /* A704 */
+ {0xA706,0xA706},{0xA707,0xA707}, /* A706 */
+ {0xA708,0xA708},{0xA709,0xA709}, /* A708 */
+ {0xA70A,0xA70A},{0xA70B,0xA70B}, /* A70A */
+ {0xA70C,0xA70C},{0xA70D,0xA70D}, /* A70C */
+ {0xA70E,0xA70E},{0xA70F,0xA70F}, /* A70E */
+ {0xA710,0xA710},{0xA711,0xA711}, /* A710 */
+ {0xA712,0xA712},{0xA713,0xA713}, /* A712 */
+ {0xA714,0xA714},{0xA715,0xA715}, /* A714 */
+ {0xA716,0xA716},{0xA717,0xA717}, /* A716 */
+ {0xA718,0xA718},{0xA719,0xA719}, /* A718 */
+ {0xA71A,0xA71A},{0xA71B,0xA71B}, /* A71A */
+ {0xA71C,0xA71C},{0xA71D,0xA71D}, /* A71C */
+ {0xA71E,0xA71E},{0xA71F,0xA71F}, /* A71E */
+ {0xA720,0xA720},{0xA721,0xA721}, /* A720 */
+ {0xA722,0xA723},{0xA722,0xA723}, /* A722 */
+ {0xA724,0xA725},{0xA724,0xA725}, /* A724 */
+ {0xA726,0xA727},{0xA726,0xA727}, /* A726 */
+ {0xA728,0xA729},{0xA728,0xA729}, /* A728 */
+ {0xA72A,0xA72B},{0xA72A,0xA72B}, /* A72A */
+ {0xA72C,0xA72D},{0xA72C,0xA72D}, /* A72C */
+ {0xA72E,0xA72F},{0xA72E,0xA72F}, /* A72E */
+ {0xA730,0xA730},{0xA731,0xA731}, /* A730 */
+ {0xA732,0xA733},{0xA732,0xA733}, /* A732 */
+ {0xA734,0xA735},{0xA734,0xA735}, /* A734 */
+ {0xA736,0xA737},{0xA736,0xA737}, /* A736 */
+ {0xA738,0xA739},{0xA738,0xA739}, /* A738 */
+ {0xA73A,0xA73B},{0xA73A,0xA73B}, /* A73A */
+ {0xA73C,0xA73D},{0xA73C,0xA73D}, /* A73C */
+ {0xA73E,0xA73F},{0xA73E,0xA73F}, /* A73E */
+ {0xA740,0xA741},{0xA740,0xA741}, /* A740 */
+ {0xA742,0xA743},{0xA742,0xA743}, /* A742 */
+ {0xA744,0xA745},{0xA744,0xA745}, /* A744 */
+ {0xA746,0xA747},{0xA746,0xA747}, /* A746 */
+ {0xA748,0xA749},{0xA748,0xA749}, /* A748 */
+ {0xA74A,0xA74B},{0xA74A,0xA74B}, /* A74A */
+ {0xA74C,0xA74D},{0xA74C,0xA74D}, /* A74C */
+ {0xA74E,0xA74F},{0xA74E,0xA74F}, /* A74E */
+ {0xA750,0xA751},{0xA750,0xA751}, /* A750 */
+ {0xA752,0xA753},{0xA752,0xA753}, /* A752 */
+ {0xA754,0xA755},{0xA754,0xA755}, /* A754 */
+ {0xA756,0xA757},{0xA756,0xA757}, /* A756 */
+ {0xA758,0xA759},{0xA758,0xA759}, /* A758 */
+ {0xA75A,0xA75B},{0xA75A,0xA75B}, /* A75A */
+ {0xA75C,0xA75D},{0xA75C,0xA75D}, /* A75C */
+ {0xA75E,0xA75F},{0xA75E,0xA75F}, /* A75E */
+ {0xA760,0xA761},{0xA760,0xA761}, /* A760 */
+ {0xA762,0xA763},{0xA762,0xA763}, /* A762 */
+ {0xA764,0xA765},{0xA764,0xA765}, /* A764 */
+ {0xA766,0xA767},{0xA766,0xA767}, /* A766 */
+ {0xA768,0xA769},{0xA768,0xA769}, /* A768 */
+ {0xA76A,0xA76B},{0xA76A,0xA76B}, /* A76A */
+ {0xA76C,0xA76D},{0xA76C,0xA76D}, /* A76C */
+ {0xA76E,0xA76F},{0xA76E,0xA76F}, /* A76E */
+ {0xA770,0xA770},{0xA771,0xA771}, /* A770 */
+ {0xA772,0xA772},{0xA773,0xA773}, /* A772 */
+ {0xA774,0xA774},{0xA775,0xA775}, /* A774 */
+ {0xA776,0xA776},{0xA777,0xA777}, /* A776 */
+ {0xA778,0xA778},{0xA779,0xA77A}, /* A778 */
+ {0xA779,0xA77A},{0xA77B,0xA77C}, /* A77A */
+ {0xA77B,0xA77C},{0xA77D,0x1D79}, /* A77C */
+ {0xA77E,0xA77F},{0xA77E,0xA77F}, /* A77E */
+ {0xA780,0xA781},{0xA780,0xA781}, /* A780 */
+ {0xA782,0xA783},{0xA782,0xA783}, /* A782 */
+ {0xA784,0xA785},{0xA784,0xA785}, /* A784 */
+ {0xA786,0xA787},{0xA786,0xA787}, /* A786 */
+ {0xA788,0xA788},{0xA789,0xA789}, /* A788 */
+ {0xA78A,0xA78A},{0xA78B,0xA78C}, /* A78A */
+ {0xA78B,0xA78C},{0xA78D,0xA78D}, /* A78C */
+ {0xA78E,0xA78E},{0xA78F,0xA78F}, /* A78E */
+ {0xA790,0xA790},{0xA791,0xA791}, /* A790 */
+ {0xA792,0xA792},{0xA793,0xA793}, /* A792 */
+ {0xA794,0xA794},{0xA795,0xA795}, /* A794 */
+ {0xA796,0xA796},{0xA797,0xA797}, /* A796 */
+ {0xA798,0xA798},{0xA799,0xA799}, /* A798 */
+ {0xA79A,0xA79A},{0xA79B,0xA79B}, /* A79A */
+ {0xA79C,0xA79C},{0xA79D,0xA79D}, /* A79C */
+ {0xA79E,0xA79E},{0xA79F,0xA79F}, /* A79E */
+ {0xA7A0,0xA7A0},{0xA7A1,0xA7A1}, /* A7A0 */
+ {0xA7A2,0xA7A2},{0xA7A3,0xA7A3}, /* A7A2 */
+ {0xA7A4,0xA7A4},{0xA7A5,0xA7A5}, /* A7A4 */
+ {0xA7A6,0xA7A6},{0xA7A7,0xA7A7}, /* A7A6 */
+ {0xA7A8,0xA7A8},{0xA7A9,0xA7A9}, /* A7A8 */
+ {0xA7AA,0xA7AA},{0xA7AB,0xA7AB}, /* A7AA */
+ {0xA7AC,0xA7AC},{0xA7AD,0xA7AD}, /* A7AC */
+ {0xA7AE,0xA7AE},{0xA7AF,0xA7AF}, /* A7AE */
+ {0xA7B0,0xA7B0},{0xA7B1,0xA7B1}, /* A7B0 */
+ {0xA7B2,0xA7B2},{0xA7B3,0xA7B3}, /* A7B2 */
+ {0xA7B4,0xA7B4},{0xA7B5,0xA7B5}, /* A7B4 */
+ {0xA7B6,0xA7B6},{0xA7B7,0xA7B7}, /* A7B6 */
+ {0xA7B8,0xA7B8},{0xA7B9,0xA7B9}, /* A7B8 */
+ {0xA7BA,0xA7BA},{0xA7BB,0xA7BB}, /* A7BA */
+ {0xA7BC,0xA7BC},{0xA7BD,0xA7BD}, /* A7BC */
+ {0xA7BE,0xA7BE},{0xA7BF,0xA7BF}, /* A7BE */
+ {0xA7C0,0xA7C0},{0xA7C1,0xA7C1}, /* A7C0 */
+ {0xA7C2,0xA7C2},{0xA7C3,0xA7C3}, /* A7C2 */
+ {0xA7C4,0xA7C4},{0xA7C5,0xA7C5}, /* A7C4 */
+ {0xA7C6,0xA7C6},{0xA7C7,0xA7C7}, /* A7C6 */
+ {0xA7C8,0xA7C8},{0xA7C9,0xA7C9}, /* A7C8 */
+ {0xA7CA,0xA7CA},{0xA7CB,0xA7CB}, /* A7CA */
+ {0xA7CC,0xA7CC},{0xA7CD,0xA7CD}, /* A7CC */
+ {0xA7CE,0xA7CE},{0xA7CF,0xA7CF}, /* A7CE */
+ {0xA7D0,0xA7D0},{0xA7D1,0xA7D1}, /* A7D0 */
+ {0xA7D2,0xA7D2},{0xA7D3,0xA7D3}, /* A7D2 */
+ {0xA7D4,0xA7D4},{0xA7D5,0xA7D5}, /* A7D4 */
+ {0xA7D6,0xA7D6},{0xA7D7,0xA7D7}, /* A7D6 */
+ {0xA7D8,0xA7D8},{0xA7D9,0xA7D9}, /* A7D8 */
+ {0xA7DA,0xA7DA},{0xA7DB,0xA7DB}, /* A7DA */
+ {0xA7DC,0xA7DC},{0xA7DD,0xA7DD}, /* A7DC */
+ {0xA7DE,0xA7DE},{0xA7DF,0xA7DF}, /* A7DE */
+ {0xA7E0,0xA7E0},{0xA7E1,0xA7E1}, /* A7E0 */
+ {0xA7E2,0xA7E2},{0xA7E3,0xA7E3}, /* A7E2 */
+ {0xA7E4,0xA7E4},{0xA7E5,0xA7E5}, /* A7E4 */
+ {0xA7E6,0xA7E6},{0xA7E7,0xA7E7}, /* A7E6 */
+ {0xA7E8,0xA7E8},{0xA7E9,0xA7E9}, /* A7E8 */
+ {0xA7EA,0xA7EA},{0xA7EB,0xA7EB}, /* A7EA */
+ {0xA7EC,0xA7EC},{0xA7ED,0xA7ED}, /* A7EC */
+ {0xA7EE,0xA7EE},{0xA7EF,0xA7EF}, /* A7EE */
+ {0xA7F0,0xA7F0},{0xA7F1,0xA7F1}, /* A7F0 */
+ {0xA7F2,0xA7F2},{0xA7F3,0xA7F3}, /* A7F2 */
+ {0xA7F4,0xA7F4},{0xA7F5,0xA7F5}, /* A7F4 */
+ {0xA7F6,0xA7F6},{0xA7F7,0xA7F7}, /* A7F6 */
+ {0xA7F8,0xA7F8},{0xA7F9,0xA7F9}, /* A7F8 */
+ {0xA7FA,0xA7FA},{0xA7FB,0xA7FB}, /* A7FA */
+ {0xA7FC,0xA7FC},{0xA7FD,0xA7FD}, /* A7FC */
+ {0xA7FE,0xA7FE},{0xA7FF,0xA7FF} /* A7FE */
+};
+
+static const MY_CASEFOLD_CHARACTER u520_casefold_pageFF[256]={
+ {0xFF00,0xFF00},{0xFF01,0xFF01}, /* FF00 */
+ {0xFF02,0xFF02},{0xFF03,0xFF03}, /* FF02 */
+ {0xFF04,0xFF04},{0xFF05,0xFF05}, /* FF04 */
+ {0xFF06,0xFF06},{0xFF07,0xFF07}, /* FF06 */
+ {0xFF08,0xFF08},{0xFF09,0xFF09}, /* FF08 */
+ {0xFF0A,0xFF0A},{0xFF0B,0xFF0B}, /* FF0A */
+ {0xFF0C,0xFF0C},{0xFF0D,0xFF0D}, /* FF0C */
+ {0xFF0E,0xFF0E},{0xFF0F,0xFF0F}, /* FF0E */
+ {0xFF10,0xFF10},{0xFF11,0xFF11}, /* FF10 */
+ {0xFF12,0xFF12},{0xFF13,0xFF13}, /* FF12 */
+ {0xFF14,0xFF14},{0xFF15,0xFF15}, /* FF14 */
+ {0xFF16,0xFF16},{0xFF17,0xFF17}, /* FF16 */
+ {0xFF18,0xFF18},{0xFF19,0xFF19}, /* FF18 */
+ {0xFF1A,0xFF1A},{0xFF1B,0xFF1B}, /* FF1A */
+ {0xFF1C,0xFF1C},{0xFF1D,0xFF1D}, /* FF1C */
+ {0xFF1E,0xFF1E},{0xFF1F,0xFF1F}, /* FF1E */
+ {0xFF20,0xFF20},{0xFF21,0xFF41}, /* FF20 */
+ {0xFF22,0xFF42},{0xFF23,0xFF43}, /* FF22 */
+ {0xFF24,0xFF44},{0xFF25,0xFF45}, /* FF24 */
+ {0xFF26,0xFF46},{0xFF27,0xFF47}, /* FF26 */
+ {0xFF28,0xFF48},{0xFF29,0xFF49}, /* FF28 */
+ {0xFF2A,0xFF4A},{0xFF2B,0xFF4B}, /* FF2A */
+ {0xFF2C,0xFF4C},{0xFF2D,0xFF4D}, /* FF2C */
+ {0xFF2E,0xFF4E},{0xFF2F,0xFF4F}, /* FF2E */
+ {0xFF30,0xFF50},{0xFF31,0xFF51}, /* FF30 */
+ {0xFF32,0xFF52},{0xFF33,0xFF53}, /* FF32 */
+ {0xFF34,0xFF54},{0xFF35,0xFF55}, /* FF34 */
+ {0xFF36,0xFF56},{0xFF37,0xFF57}, /* FF36 */
+ {0xFF38,0xFF58},{0xFF39,0xFF59}, /* FF38 */
+ {0xFF3A,0xFF5A},{0xFF3B,0xFF3B}, /* FF3A */
+ {0xFF3C,0xFF3C},{0xFF3D,0xFF3D}, /* FF3C */
+ {0xFF3E,0xFF3E},{0xFF3F,0xFF3F}, /* FF3E */
+ {0xFF40,0xFF40},{0xFF21,0xFF41}, /* FF40 */
+ {0xFF22,0xFF42},{0xFF23,0xFF43}, /* FF42 */
+ {0xFF24,0xFF44},{0xFF25,0xFF45}, /* FF44 */
+ {0xFF26,0xFF46},{0xFF27,0xFF47}, /* FF46 */
+ {0xFF28,0xFF48},{0xFF29,0xFF49}, /* FF48 */
+ {0xFF2A,0xFF4A},{0xFF2B,0xFF4B}, /* FF4A */
+ {0xFF2C,0xFF4C},{0xFF2D,0xFF4D}, /* FF4C */
+ {0xFF2E,0xFF4E},{0xFF2F,0xFF4F}, /* FF4E */
+ {0xFF30,0xFF50},{0xFF31,0xFF51}, /* FF50 */
+ {0xFF32,0xFF52},{0xFF33,0xFF53}, /* FF52 */
+ {0xFF34,0xFF54},{0xFF35,0xFF55}, /* FF54 */
+ {0xFF36,0xFF56},{0xFF37,0xFF57}, /* FF56 */
+ {0xFF38,0xFF58},{0xFF39,0xFF59}, /* FF58 */
+ {0xFF3A,0xFF5A},{0xFF5B,0xFF5B}, /* FF5A */
+ {0xFF5C,0xFF5C},{0xFF5D,0xFF5D}, /* FF5C */
+ {0xFF5E,0xFF5E},{0xFF5F,0xFF5F}, /* FF5E */
+ {0xFF60,0xFF60},{0xFF61,0xFF61}, /* FF60 */
+ {0xFF62,0xFF62},{0xFF63,0xFF63}, /* FF62 */
+ {0xFF64,0xFF64},{0xFF65,0xFF65}, /* FF64 */
+ {0xFF66,0xFF66},{0xFF67,0xFF67}, /* FF66 */
+ {0xFF68,0xFF68},{0xFF69,0xFF69}, /* FF68 */
+ {0xFF6A,0xFF6A},{0xFF6B,0xFF6B}, /* FF6A */
+ {0xFF6C,0xFF6C},{0xFF6D,0xFF6D}, /* FF6C */
+ {0xFF6E,0xFF6E},{0xFF6F,0xFF6F}, /* FF6E */
+ {0xFF70,0xFF70},{0xFF71,0xFF71}, /* FF70 */
+ {0xFF72,0xFF72},{0xFF73,0xFF73}, /* FF72 */
+ {0xFF74,0xFF74},{0xFF75,0xFF75}, /* FF74 */
+ {0xFF76,0xFF76},{0xFF77,0xFF77}, /* FF76 */
+ {0xFF78,0xFF78},{0xFF79,0xFF79}, /* FF78 */
+ {0xFF7A,0xFF7A},{0xFF7B,0xFF7B}, /* FF7A */
+ {0xFF7C,0xFF7C},{0xFF7D,0xFF7D}, /* FF7C */
+ {0xFF7E,0xFF7E},{0xFF7F,0xFF7F}, /* FF7E */
+ {0xFF80,0xFF80},{0xFF81,0xFF81}, /* FF80 */
+ {0xFF82,0xFF82},{0xFF83,0xFF83}, /* FF82 */
+ {0xFF84,0xFF84},{0xFF85,0xFF85}, /* FF84 */
+ {0xFF86,0xFF86},{0xFF87,0xFF87}, /* FF86 */
+ {0xFF88,0xFF88},{0xFF89,0xFF89}, /* FF88 */
+ {0xFF8A,0xFF8A},{0xFF8B,0xFF8B}, /* FF8A */
+ {0xFF8C,0xFF8C},{0xFF8D,0xFF8D}, /* FF8C */
+ {0xFF8E,0xFF8E},{0xFF8F,0xFF8F}, /* FF8E */
+ {0xFF90,0xFF90},{0xFF91,0xFF91}, /* FF90 */
+ {0xFF92,0xFF92},{0xFF93,0xFF93}, /* FF92 */
+ {0xFF94,0xFF94},{0xFF95,0xFF95}, /* FF94 */
+ {0xFF96,0xFF96},{0xFF97,0xFF97}, /* FF96 */
+ {0xFF98,0xFF98},{0xFF99,0xFF99}, /* FF98 */
+ {0xFF9A,0xFF9A},{0xFF9B,0xFF9B}, /* FF9A */
+ {0xFF9C,0xFF9C},{0xFF9D,0xFF9D}, /* FF9C */
+ {0xFF9E,0xFF9E},{0xFF9F,0xFF9F}, /* FF9E */
+ {0xFFA0,0xFFA0},{0xFFA1,0xFFA1}, /* FFA0 */
+ {0xFFA2,0xFFA2},{0xFFA3,0xFFA3}, /* FFA2 */
+ {0xFFA4,0xFFA4},{0xFFA5,0xFFA5}, /* FFA4 */
+ {0xFFA6,0xFFA6},{0xFFA7,0xFFA7}, /* FFA6 */
+ {0xFFA8,0xFFA8},{0xFFA9,0xFFA9}, /* FFA8 */
+ {0xFFAA,0xFFAA},{0xFFAB,0xFFAB}, /* FFAA */
+ {0xFFAC,0xFFAC},{0xFFAD,0xFFAD}, /* FFAC */
+ {0xFFAE,0xFFAE},{0xFFAF,0xFFAF}, /* FFAE */
+ {0xFFB0,0xFFB0},{0xFFB1,0xFFB1}, /* FFB0 */
+ {0xFFB2,0xFFB2},{0xFFB3,0xFFB3}, /* FFB2 */
+ {0xFFB4,0xFFB4},{0xFFB5,0xFFB5}, /* FFB4 */
+ {0xFFB6,0xFFB6},{0xFFB7,0xFFB7}, /* FFB6 */
+ {0xFFB8,0xFFB8},{0xFFB9,0xFFB9}, /* FFB8 */
+ {0xFFBA,0xFFBA},{0xFFBB,0xFFBB}, /* FFBA */
+ {0xFFBC,0xFFBC},{0xFFBD,0xFFBD}, /* FFBC */
+ {0xFFBE,0xFFBE},{0xFFBF,0xFFBF}, /* FFBE */
+ {0xFFC0,0xFFC0},{0xFFC1,0xFFC1}, /* FFC0 */
+ {0xFFC2,0xFFC2},{0xFFC3,0xFFC3}, /* FFC2 */
+ {0xFFC4,0xFFC4},{0xFFC5,0xFFC5}, /* FFC4 */
+ {0xFFC6,0xFFC6},{0xFFC7,0xFFC7}, /* FFC6 */
+ {0xFFC8,0xFFC8},{0xFFC9,0xFFC9}, /* FFC8 */
+ {0xFFCA,0xFFCA},{0xFFCB,0xFFCB}, /* FFCA */
+ {0xFFCC,0xFFCC},{0xFFCD,0xFFCD}, /* FFCC */
+ {0xFFCE,0xFFCE},{0xFFCF,0xFFCF}, /* FFCE */
+ {0xFFD0,0xFFD0},{0xFFD1,0xFFD1}, /* FFD0 */
+ {0xFFD2,0xFFD2},{0xFFD3,0xFFD3}, /* FFD2 */
+ {0xFFD4,0xFFD4},{0xFFD5,0xFFD5}, /* FFD4 */
+ {0xFFD6,0xFFD6},{0xFFD7,0xFFD7}, /* FFD6 */
+ {0xFFD8,0xFFD8},{0xFFD9,0xFFD9}, /* FFD8 */
+ {0xFFDA,0xFFDA},{0xFFDB,0xFFDB}, /* FFDA */
+ {0xFFDC,0xFFDC},{0xFFDD,0xFFDD}, /* FFDC */
+ {0xFFDE,0xFFDE},{0xFFDF,0xFFDF}, /* FFDE */
+ {0xFFE0,0xFFE0},{0xFFE1,0xFFE1}, /* FFE0 */
+ {0xFFE2,0xFFE2},{0xFFE3,0xFFE3}, /* FFE2 */
+ {0xFFE4,0xFFE4},{0xFFE5,0xFFE5}, /* FFE4 */
+ {0xFFE6,0xFFE6},{0xFFE7,0xFFE7}, /* FFE6 */
+ {0xFFE8,0xFFE8},{0xFFE9,0xFFE9}, /* FFE8 */
+ {0xFFEA,0xFFEA},{0xFFEB,0xFFEB}, /* FFEA */
+ {0xFFEC,0xFFEC},{0xFFED,0xFFED}, /* FFEC */
+ {0xFFEE,0xFFEE},{0xFFEF,0xFFEF}, /* FFEE */
+ {0xFFF0,0xFFF0},{0xFFF1,0xFFF1}, /* FFF0 */
+ {0xFFF2,0xFFF2},{0xFFF3,0xFFF3}, /* FFF2 */
+ {0xFFF4,0xFFF4},{0xFFF5,0xFFF5}, /* FFF4 */
+ {0xFFF6,0xFFF6},{0xFFF7,0xFFF7}, /* FFF6 */
+ {0xFFF8,0xFFF8},{0xFFF9,0xFFF9}, /* FFF8 */
+ {0xFFFA,0xFFFA},{0xFFFB,0xFFFB}, /* FFFA */
+ {0xFFFC,0xFFFC},{0xFFFD,0xFFFD}, /* FFFC */
+ {0xFFFE,0xFFFE},{0xFFFF,0xFFFF} /* FFFE */
+};
+
+static const MY_CASEFOLD_CHARACTER u520_casefold_page104[256]={
+ {0x10400,0x10428},{0x10401,0x10429}, /* 10400 */
+ {0x10402,0x1042A},{0x10403,0x1042B}, /* 10402 */
+ {0x10404,0x1042C},{0x10405,0x1042D}, /* 10404 */
+ {0x10406,0x1042E},{0x10407,0x1042F}, /* 10406 */
+ {0x10408,0x10430},{0x10409,0x10431}, /* 10408 */
+ {0x1040A,0x10432},{0x1040B,0x10433}, /* 1040A */
+ {0x1040C,0x10434},{0x1040D,0x10435}, /* 1040C */
+ {0x1040E,0x10436},{0x1040F,0x10437}, /* 1040E */
+ {0x10410,0x10438},{0x10411,0x10439}, /* 10410 */
+ {0x10412,0x1043A},{0x10413,0x1043B}, /* 10412 */
+ {0x10414,0x1043C},{0x10415,0x1043D}, /* 10414 */
+ {0x10416,0x1043E},{0x10417,0x1043F}, /* 10416 */
+ {0x10418,0x10440},{0x10419,0x10441}, /* 10418 */
+ {0x1041A,0x10442},{0x1041B,0x10443}, /* 1041A */
+ {0x1041C,0x10444},{0x1041D,0x10445}, /* 1041C */
+ {0x1041E,0x10446},{0x1041F,0x10447}, /* 1041E */
+ {0x10420,0x10448},{0x10421,0x10449}, /* 10420 */
+ {0x10422,0x1044A},{0x10423,0x1044B}, /* 10422 */
+ {0x10424,0x1044C},{0x10425,0x1044D}, /* 10424 */
+ {0x10426,0x1044E},{0x10427,0x1044F}, /* 10426 */
+ {0x10400,0x10428},{0x10401,0x10429}, /* 10428 */
+ {0x10402,0x1042A},{0x10403,0x1042B}, /* 1042A */
+ {0x10404,0x1042C},{0x10405,0x1042D}, /* 1042C */
+ {0x10406,0x1042E},{0x10407,0x1042F}, /* 1042E */
+ {0x10408,0x10430},{0x10409,0x10431}, /* 10430 */
+ {0x1040A,0x10432},{0x1040B,0x10433}, /* 10432 */
+ {0x1040C,0x10434},{0x1040D,0x10435}, /* 10434 */
+ {0x1040E,0x10436},{0x1040F,0x10437}, /* 10436 */
+ {0x10410,0x10438},{0x10411,0x10439}, /* 10438 */
+ {0x10412,0x1043A},{0x10413,0x1043B}, /* 1043A */
+ {0x10414,0x1043C},{0x10415,0x1043D}, /* 1043C */
+ {0x10416,0x1043E},{0x10417,0x1043F}, /* 1043E */
+ {0x10418,0x10440},{0x10419,0x10441}, /* 10440 */
+ {0x1041A,0x10442},{0x1041B,0x10443}, /* 10442 */
+ {0x1041C,0x10444},{0x1041D,0x10445}, /* 10444 */
+ {0x1041E,0x10446},{0x1041F,0x10447}, /* 10446 */
+ {0x10420,0x10448},{0x10421,0x10449}, /* 10448 */
+ {0x10422,0x1044A},{0x10423,0x1044B}, /* 1044A */
+ {0x10424,0x1044C},{0x10425,0x1044D}, /* 1044C */
+ {0x10426,0x1044E},{0x10427,0x1044F}, /* 1044E */
+ {0x10450,0x10450},{0x10451,0x10451}, /* 10450 */
+ {0x10452,0x10452},{0x10453,0x10453}, /* 10452 */
+ {0x10454,0x10454},{0x10455,0x10455}, /* 10454 */
+ {0x10456,0x10456},{0x10457,0x10457}, /* 10456 */
+ {0x10458,0x10458},{0x10459,0x10459}, /* 10458 */
+ {0x1045A,0x1045A},{0x1045B,0x1045B}, /* 1045A */
+ {0x1045C,0x1045C},{0x1045D,0x1045D}, /* 1045C */
+ {0x1045E,0x1045E},{0x1045F,0x1045F}, /* 1045E */
+ {0x10460,0x10460},{0x10461,0x10461}, /* 10460 */
+ {0x10462,0x10462},{0x10463,0x10463}, /* 10462 */
+ {0x10464,0x10464},{0x10465,0x10465}, /* 10464 */
+ {0x10466,0x10466},{0x10467,0x10467}, /* 10466 */
+ {0x10468,0x10468},{0x10469,0x10469}, /* 10468 */
+ {0x1046A,0x1046A},{0x1046B,0x1046B}, /* 1046A */
+ {0x1046C,0x1046C},{0x1046D,0x1046D}, /* 1046C */
+ {0x1046E,0x1046E},{0x1046F,0x1046F}, /* 1046E */
+ {0x10470,0x10470},{0x10471,0x10471}, /* 10470 */
+ {0x10472,0x10472},{0x10473,0x10473}, /* 10472 */
+ {0x10474,0x10474},{0x10475,0x10475}, /* 10474 */
+ {0x10476,0x10476},{0x10477,0x10477}, /* 10476 */
+ {0x10478,0x10478},{0x10479,0x10479}, /* 10478 */
+ {0x1047A,0x1047A},{0x1047B,0x1047B}, /* 1047A */
+ {0x1047C,0x1047C},{0x1047D,0x1047D}, /* 1047C */
+ {0x1047E,0x1047E},{0x1047F,0x1047F}, /* 1047E */
+ {0x10480,0x10480},{0x10481,0x10481}, /* 10480 */
+ {0x10482,0x10482},{0x10483,0x10483}, /* 10482 */
+ {0x10484,0x10484},{0x10485,0x10485}, /* 10484 */
+ {0x10486,0x10486},{0x10487,0x10487}, /* 10486 */
+ {0x10488,0x10488},{0x10489,0x10489}, /* 10488 */
+ {0x1048A,0x1048A},{0x1048B,0x1048B}, /* 1048A */
+ {0x1048C,0x1048C},{0x1048D,0x1048D}, /* 1048C */
+ {0x1048E,0x1048E},{0x1048F,0x1048F}, /* 1048E */
+ {0x10490,0x10490},{0x10491,0x10491}, /* 10490 */
+ {0x10492,0x10492},{0x10493,0x10493}, /* 10492 */
+ {0x10494,0x10494},{0x10495,0x10495}, /* 10494 */
+ {0x10496,0x10496},{0x10497,0x10497}, /* 10496 */
+ {0x10498,0x10498},{0x10499,0x10499}, /* 10498 */
+ {0x1049A,0x1049A},{0x1049B,0x1049B}, /* 1049A */
+ {0x1049C,0x1049C},{0x1049D,0x1049D}, /* 1049C */
+ {0x1049E,0x1049E},{0x1049F,0x1049F}, /* 1049E */
+ {0x104A0,0x104A0},{0x104A1,0x104A1}, /* 104A0 */
+ {0x104A2,0x104A2},{0x104A3,0x104A3}, /* 104A2 */
+ {0x104A4,0x104A4},{0x104A5,0x104A5}, /* 104A4 */
+ {0x104A6,0x104A6},{0x104A7,0x104A7}, /* 104A6 */
+ {0x104A8,0x104A8},{0x104A9,0x104A9}, /* 104A8 */
+ {0x104AA,0x104AA},{0x104AB,0x104AB}, /* 104AA */
+ {0x104AC,0x104AC},{0x104AD,0x104AD}, /* 104AC */
+ {0x104AE,0x104AE},{0x104AF,0x104AF}, /* 104AE */
+ {0x104B0,0x104B0},{0x104B1,0x104B1}, /* 104B0 */
+ {0x104B2,0x104B2},{0x104B3,0x104B3}, /* 104B2 */
+ {0x104B4,0x104B4},{0x104B5,0x104B5}, /* 104B4 */
+ {0x104B6,0x104B6},{0x104B7,0x104B7}, /* 104B6 */
+ {0x104B8,0x104B8},{0x104B9,0x104B9}, /* 104B8 */
+ {0x104BA,0x104BA},{0x104BB,0x104BB}, /* 104BA */
+ {0x104BC,0x104BC},{0x104BD,0x104BD}, /* 104BC */
+ {0x104BE,0x104BE},{0x104BF,0x104BF}, /* 104BE */
+ {0x104C0,0x104C0},{0x104C1,0x104C1}, /* 104C0 */
+ {0x104C2,0x104C2},{0x104C3,0x104C3}, /* 104C2 */
+ {0x104C4,0x104C4},{0x104C5,0x104C5}, /* 104C4 */
+ {0x104C6,0x104C6},{0x104C7,0x104C7}, /* 104C6 */
+ {0x104C8,0x104C8},{0x104C9,0x104C9}, /* 104C8 */
+ {0x104CA,0x104CA},{0x104CB,0x104CB}, /* 104CA */
+ {0x104CC,0x104CC},{0x104CD,0x104CD}, /* 104CC */
+ {0x104CE,0x104CE},{0x104CF,0x104CF}, /* 104CE */
+ {0x104D0,0x104D0},{0x104D1,0x104D1}, /* 104D0 */
+ {0x104D2,0x104D2},{0x104D3,0x104D3}, /* 104D2 */
+ {0x104D4,0x104D4},{0x104D5,0x104D5}, /* 104D4 */
+ {0x104D6,0x104D6},{0x104D7,0x104D7}, /* 104D6 */
+ {0x104D8,0x104D8},{0x104D9,0x104D9}, /* 104D8 */
+ {0x104DA,0x104DA},{0x104DB,0x104DB}, /* 104DA */
+ {0x104DC,0x104DC},{0x104DD,0x104DD}, /* 104DC */
+ {0x104DE,0x104DE},{0x104DF,0x104DF}, /* 104DE */
+ {0x104E0,0x104E0},{0x104E1,0x104E1}, /* 104E0 */
+ {0x104E2,0x104E2},{0x104E3,0x104E3}, /* 104E2 */
+ {0x104E4,0x104E4},{0x104E5,0x104E5}, /* 104E4 */
+ {0x104E6,0x104E6},{0x104E7,0x104E7}, /* 104E6 */
+ {0x104E8,0x104E8},{0x104E9,0x104E9}, /* 104E8 */
+ {0x104EA,0x104EA},{0x104EB,0x104EB}, /* 104EA */
+ {0x104EC,0x104EC},{0x104ED,0x104ED}, /* 104EC */
+ {0x104EE,0x104EE},{0x104EF,0x104EF}, /* 104EE */
+ {0x104F0,0x104F0},{0x104F1,0x104F1}, /* 104F0 */
+ {0x104F2,0x104F2},{0x104F3,0x104F3}, /* 104F2 */
+ {0x104F4,0x104F4},{0x104F5,0x104F5}, /* 104F4 */
+ {0x104F6,0x104F6},{0x104F7,0x104F7}, /* 104F6 */
+ {0x104F8,0x104F8},{0x104F9,0x104F9}, /* 104F8 */
+ {0x104FA,0x104FA},{0x104FB,0x104FB}, /* 104FA */
+ {0x104FC,0x104FC},{0x104FD,0x104FD}, /* 104FC */
+ {0x104FE,0x104FE},{0x104FF,0x104FF} /* 104FE */
+};
+
+const MY_CASEFOLD_CHARACTER * my_u520_casefold_index[4352]={
+ u520_casefold_page00, u520_casefold_page01, u520_casefold_page02, u520_casefold_page03, u520_casefold_page04, u520_casefold_page05, u520_casefold_page06, u520_casefold_page07,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ u520_casefold_page10, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, u520_casefold_page1D, u520_casefold_page1E, u520_casefold_page1F,
+ NULL, u520_casefold_page21, NULL, NULL, u520_casefold_page24, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, u520_casefold_page2C, u520_casefold_page2D, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, u520_casefold_pageA6, u520_casefold_pageA7,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, u520_casefold_pageFF,
+ NULL, NULL, NULL, NULL, u520_casefold_page104, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
+};
diff --git a/strings/ctype-unidata.c b/strings/ctype-unidata.c
new file mode 100644
index 00000000000..77bec5418c4
--- /dev/null
+++ b/strings/ctype-unidata.c
@@ -0,0 +1,97 @@
+/* Copyright (c) 2000, 2013, Oracle and/or its affiliates.
+ Copyright (c) 2009, 2020, MariaDB
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; version 2
+ of the License.
+
+ This library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this library; if not, write to the Free
+ Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ MA 02110-1335 USA */
+
+#include "strings_def.h"
+#include <m_ctype.h>
+#include "ctype-mb.h"
+
+#ifndef EILSEQ
+#define EILSEQ ENOENT
+#endif
+
+
+#include "ctype-unidata.h"
+#include "ctype-unicode300-general_ci.h"
+#include "ctype-unicode300-general_mysql500_ci.h"
+#include "ctype-unicode300-casefold.h"
+#include "ctype-unicode300-casefold-tr.h"
+#include "ctype-unicode520-casefold.h"
+#include "ctype-unicode1400-casefold.h"
+#include "ctype-unicode1400-casefold-tr.h"
+
+
+
+MY_CASEFOLD_INFO my_casefold_default=
+{
+ 0xFFFF,
+ my_u300_casefold_index,
+ weight_general_ci_index
+};
+
+
+/*
+ Turkish lower/upper mapping:
+ 1. LOWER(0x0049 LATIN CAPITAL LETTER I) ->
+ 0x0131 LATIN SMALL LETTER DOTLESS I
+ 2. UPPER(0x0069 LATIN SMALL LETTER I) ->
+ 0x0130 LATIN CAPITAL LETTER I WITH DOT ABOVE
+*/
+
+MY_CASEFOLD_INFO my_casefold_turkish=
+{
+ 0xFFFF,
+ my_u300tr_casefold_index,
+ weight_general_ci_index
+};
+
+
+/*
+ general_mysql500_ci is very similar to general_ci, but maps sorting order
+ for U+00DF to 0x00DF instead of 0x0053.
+*/
+MY_CASEFOLD_INFO my_casefold_mysql500=
+{
+ 0xFFFF,
+ my_u300_casefold_index,
+ weight_general_mysql500_ci_index
+};
+
+
+
+MY_CASEFOLD_INFO my_casefold_unicode520=
+{
+ 0x10FFFF,
+ my_u520_casefold_index,
+ NULL
+};
+
+
+MY_CASEFOLD_INFO my_casefold_unicode1400=
+{
+ 0x10FFFF,
+ my_u1400_casefold_index,
+ NULL
+};
+
+
+MY_CASEFOLD_INFO my_casefold_unicode1400tr=
+{
+ 0x10FFFF,
+ my_u1400tr_casefold_index,
+ NULL
+};
diff --git a/strings/ctype-unidata.h b/strings/ctype-unidata.h
index 9900fd0cedd..0bcf96c09a0 100644
--- a/strings/ctype-unidata.h
+++ b/strings/ctype-unidata.h
@@ -1,7 +1,7 @@
#ifndef CTYPE_UNIDATA_H_INCLUDED
#define CTYPE_UNIDATA_H_INCLUDED
/*
- Copyright (c) 2018 MariaDB Corporation
+ Copyright (c) 2018, 2023 MariaDB Corporation
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -17,12 +17,128 @@
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#define MY_UNICASE_INFO_DEFAULT_MAXCHAR 0xFFFF
-extern MY_UNICASE_CHARACTER my_unicase_default_page00[256];
-extern MY_UNICASE_CHARACTER *my_unicase_default_pages[256];
-extern MY_UNICASE_CHARACTER my_unicase_mysql500_page00[256];
-extern MY_UNICASE_CHARACTER *my_unicase_mysql500_pages[256];
+extern const uint16 weight_general_ci_page00[256];
+extern const uint16 *weight_general_ci_index[256];
+extern const uint16 weight_general_mysql500_ci_page00[256];
+extern const uint16 *weight_general_mysql500_ci_index[256];
+
+extern const MY_CASEFOLD_CHARACTER u300_casefold_page00[256];
+
+static inline my_wc_t my_u300_tolower_7bit(uchar ch)
+{
+ return u300_casefold_page00[ch].tolower;
+}
+
+static inline my_wc_t my_u300_toupper_7bit(uchar ch)
+{
+ return u300_casefold_page00[ch].toupper;
+}
+
+
+static inline my_wc_t my_general_ci_bmp_char_to_weight(my_wc_t wc)
+{
+ const uint16 *page;
+ DBUG_ASSERT((wc >> 8) < array_elements(weight_general_ci_index));
+ page= weight_general_ci_index[wc >> 8];
+ return page ? page[wc & 0xFF] : wc;
+}
+
+
+static inline my_wc_t my_general_ci_char_to_weight(my_wc_t wc)
+{
+ if ((wc >> 8) < array_elements(weight_general_ci_index))
+ return my_general_ci_bmp_char_to_weight(wc);
+ return MY_CS_REPLACEMENT_CHARACTER;
+}
+
+
+static inline my_wc_t my_general_mysql500_ci_bmp_char_to_weight(my_wc_t wc)
+{
+ const uint16 *page;
+ DBUG_ASSERT((wc >> 8) < array_elements(weight_general_mysql500_ci_index));
+ page= weight_general_mysql500_ci_index[wc >> 8];
+ return page ? page[wc & 0xFF] : wc;
+}
+
+
+static inline void my_tosort_unicode_bmp(MY_CASEFOLD_INFO *uni_plane,
+ my_wc_t *wc)
+{
+ const uint16 *page;
+ DBUG_ASSERT(*wc <= uni_plane->maxchar);
+ if ((page= uni_plane->simple_weight[*wc >> 8]))
+ *wc= page[*wc & 0xFF];
+}
+
+
+static inline void my_tosort_unicode(MY_CASEFOLD_INFO *uni_plane,
+ my_wc_t *wc)
+{
+ if (*wc <= uni_plane->maxchar)
+ {
+ const uint16 *page;
+ if ((page= uni_plane->simple_weight[*wc >> 8]))
+ *wc= page[*wc & 0xFF];
+ }
+ else
+ {
+ *wc= MY_CS_REPLACEMENT_CHARACTER;
+ }
+}
+
+
+static inline void
+my_tolower_unicode_bmp(MY_CASEFOLD_INFO *uni_plane, my_wc_t *wc)
+{
+ const MY_CASEFOLD_CHARACTER *page;
+ DBUG_ASSERT(*wc <= uni_plane->maxchar);
+ if ((page= uni_plane->page[*wc >> 8]))
+ *wc= page[*wc & 0xFF].tolower;
+}
+
+
+static inline void
+my_toupper_unicode_bmp(MY_CASEFOLD_INFO *uni_plane, my_wc_t *wc)
+{
+ const MY_CASEFOLD_CHARACTER *page;
+ DBUG_ASSERT(*wc <= uni_plane->maxchar);
+ if ((page= uni_plane->page[*wc >> 8]))
+ *wc= page[*wc & 0xFF].toupper;
+}
+
+
+static inline void
+my_tolower_unicode(MY_CASEFOLD_INFO *uni_plane, my_wc_t *wc)
+{
+ if (*wc <= uni_plane->maxchar)
+ {
+ const MY_CASEFOLD_CHARACTER *page;
+ if ((page= uni_plane->page[(*wc >> 8)]))
+ *wc= page[*wc & 0xFF].tolower;
+ }
+}
+
+
+static inline void
+my_toupper_unicode(MY_CASEFOLD_INFO *uni_plane, my_wc_t *wc)
+{
+ if (*wc <= uni_plane->maxchar)
+ {
+ const MY_CASEFOLD_CHARACTER *page;
+ if ((page= uni_plane->page[(*wc >> 8)]))
+ *wc= page[*wc & 0xFF].toupper;
+ }
+}
+
+
+extern MY_CASEFOLD_INFO my_casefold_default;
+extern MY_CASEFOLD_INFO my_casefold_turkish;
+extern MY_CASEFOLD_INFO my_casefold_mysql500;
+extern MY_CASEFOLD_INFO my_casefold_unicode520;
+extern MY_CASEFOLD_INFO my_casefold_unicode1400;
+extern MY_CASEFOLD_INFO my_casefold_unicode1400tr;
+
size_t my_strxfrm_pad_nweights_unicode(uchar *str, uchar *strend, size_t nweights);
size_t my_strxfrm_pad_unicode(uchar *str, uchar *strend);
diff --git a/strings/ctype-utf8.c b/strings/ctype-utf8.c
index 3ad020d2d18..121a3f945f6 100644
--- a/strings/ctype-utf8.c
+++ b/strings/ctype-utf8.c
@@ -113,4546 +113,23 @@ int my_valid_mbcharlen_utf8mb3(const uchar *s, const uchar *e)
#include "my_uctype.h"
-MY_UNICASE_CHARACTER my_unicase_default_page00[]={
- {0x0000,0x0000,0x0000}, {0x0001,0x0001,0x0001},
- {0x0002,0x0002,0x0002}, {0x0003,0x0003,0x0003},
- {0x0004,0x0004,0x0004}, {0x0005,0x0005,0x0005},
- {0x0006,0x0006,0x0006}, {0x0007,0x0007,0x0007},
- {0x0008,0x0008,0x0008}, {0x0009,0x0009,0x0009},
- {0x000A,0x000A,0x000A}, {0x000B,0x000B,0x000B},
- {0x000C,0x000C,0x000C}, {0x000D,0x000D,0x000D},
- {0x000E,0x000E,0x000E}, {0x000F,0x000F,0x000F},
- {0x0010,0x0010,0x0010}, {0x0011,0x0011,0x0011},
- {0x0012,0x0012,0x0012}, {0x0013,0x0013,0x0013},
- {0x0014,0x0014,0x0014}, {0x0015,0x0015,0x0015},
- {0x0016,0x0016,0x0016}, {0x0017,0x0017,0x0017},
- {0x0018,0x0018,0x0018}, {0x0019,0x0019,0x0019},
- {0x001A,0x001A,0x001A}, {0x001B,0x001B,0x001B},
- {0x001C,0x001C,0x001C}, {0x001D,0x001D,0x001D},
- {0x001E,0x001E,0x001E}, {0x001F,0x001F,0x001F},
- {0x0020,0x0020,0x0020}, {0x0021,0x0021,0x0021},
- {0x0022,0x0022,0x0022}, {0x0023,0x0023,0x0023},
- {0x0024,0x0024,0x0024}, {0x0025,0x0025,0x0025},
- {0x0026,0x0026,0x0026}, {0x0027,0x0027,0x0027},
- {0x0028,0x0028,0x0028}, {0x0029,0x0029,0x0029},
- {0x002A,0x002A,0x002A}, {0x002B,0x002B,0x002B},
- {0x002C,0x002C,0x002C}, {0x002D,0x002D,0x002D},
- {0x002E,0x002E,0x002E}, {0x002F,0x002F,0x002F},
- {0x0030,0x0030,0x0030}, {0x0031,0x0031,0x0031},
- {0x0032,0x0032,0x0032}, {0x0033,0x0033,0x0033},
- {0x0034,0x0034,0x0034}, {0x0035,0x0035,0x0035},
- {0x0036,0x0036,0x0036}, {0x0037,0x0037,0x0037},
- {0x0038,0x0038,0x0038}, {0x0039,0x0039,0x0039},
- {0x003A,0x003A,0x003A}, {0x003B,0x003B,0x003B},
- {0x003C,0x003C,0x003C}, {0x003D,0x003D,0x003D},
- {0x003E,0x003E,0x003E}, {0x003F,0x003F,0x003F},
- {0x0040,0x0040,0x0040}, {0x0041,0x0061,0x0041},
- {0x0042,0x0062,0x0042}, {0x0043,0x0063,0x0043},
- {0x0044,0x0064,0x0044}, {0x0045,0x0065,0x0045},
- {0x0046,0x0066,0x0046}, {0x0047,0x0067,0x0047},
- {0x0048,0x0068,0x0048}, {0x0049,0x0069,0x0049},
- {0x004A,0x006A,0x004A}, {0x004B,0x006B,0x004B},
- {0x004C,0x006C,0x004C}, {0x004D,0x006D,0x004D},
- {0x004E,0x006E,0x004E}, {0x004F,0x006F,0x004F},
- {0x0050,0x0070,0x0050}, {0x0051,0x0071,0x0051},
- {0x0052,0x0072,0x0052}, {0x0053,0x0073,0x0053},
- {0x0054,0x0074,0x0054}, {0x0055,0x0075,0x0055},
- {0x0056,0x0076,0x0056}, {0x0057,0x0077,0x0057},
- {0x0058,0x0078,0x0058}, {0x0059,0x0079,0x0059},
- {0x005A,0x007A,0x005A}, {0x005B,0x005B,0x005B},
- {0x005C,0x005C,0x005C}, {0x005D,0x005D,0x005D},
- {0x005E,0x005E,0x005E}, {0x005F,0x005F,0x005F},
- {0x0060,0x0060,0x0060}, {0x0041,0x0061,0x0041},
- {0x0042,0x0062,0x0042}, {0x0043,0x0063,0x0043},
- {0x0044,0x0064,0x0044}, {0x0045,0x0065,0x0045},
- {0x0046,0x0066,0x0046}, {0x0047,0x0067,0x0047},
- {0x0048,0x0068,0x0048}, {0x0049,0x0069,0x0049},
- {0x004A,0x006A,0x004A}, {0x004B,0x006B,0x004B},
- {0x004C,0x006C,0x004C}, {0x004D,0x006D,0x004D},
- {0x004E,0x006E,0x004E}, {0x004F,0x006F,0x004F},
- {0x0050,0x0070,0x0050}, {0x0051,0x0071,0x0051},
- {0x0052,0x0072,0x0052}, {0x0053,0x0073,0x0053},
- {0x0054,0x0074,0x0054}, {0x0055,0x0075,0x0055},
- {0x0056,0x0076,0x0056}, {0x0057,0x0077,0x0057},
- {0x0058,0x0078,0x0058}, {0x0059,0x0079,0x0059},
- {0x005A,0x007A,0x005A}, {0x007B,0x007B,0x007B},
- {0x007C,0x007C,0x007C}, {0x007D,0x007D,0x007D},
- {0x007E,0x007E,0x007E}, {0x007F,0x007F,0x007F},
- {0x0080,0x0080,0x0080}, {0x0081,0x0081,0x0081},
- {0x0082,0x0082,0x0082}, {0x0083,0x0083,0x0083},
- {0x0084,0x0084,0x0084}, {0x0085,0x0085,0x0085},
- {0x0086,0x0086,0x0086}, {0x0087,0x0087,0x0087},
- {0x0088,0x0088,0x0088}, {0x0089,0x0089,0x0089},
- {0x008A,0x008A,0x008A}, {0x008B,0x008B,0x008B},
- {0x008C,0x008C,0x008C}, {0x008D,0x008D,0x008D},
- {0x008E,0x008E,0x008E}, {0x008F,0x008F,0x008F},
- {0x0090,0x0090,0x0090}, {0x0091,0x0091,0x0091},
- {0x0092,0x0092,0x0092}, {0x0093,0x0093,0x0093},
- {0x0094,0x0094,0x0094}, {0x0095,0x0095,0x0095},
- {0x0096,0x0096,0x0096}, {0x0097,0x0097,0x0097},
- {0x0098,0x0098,0x0098}, {0x0099,0x0099,0x0099},
- {0x009A,0x009A,0x009A}, {0x009B,0x009B,0x009B},
- {0x009C,0x009C,0x009C}, {0x009D,0x009D,0x009D},
- {0x009E,0x009E,0x009E}, {0x009F,0x009F,0x009F},
- {0x00A0,0x00A0,0x00A0}, {0x00A1,0x00A1,0x00A1},
- {0x00A2,0x00A2,0x00A2}, {0x00A3,0x00A3,0x00A3},
- {0x00A4,0x00A4,0x00A4}, {0x00A5,0x00A5,0x00A5},
- {0x00A6,0x00A6,0x00A6}, {0x00A7,0x00A7,0x00A7},
- {0x00A8,0x00A8,0x00A8}, {0x00A9,0x00A9,0x00A9},
- {0x00AA,0x00AA,0x00AA}, {0x00AB,0x00AB,0x00AB},
- {0x00AC,0x00AC,0x00AC}, {0x00AD,0x00AD,0x00AD},
- {0x00AE,0x00AE,0x00AE}, {0x00AF,0x00AF,0x00AF},
- {0x00B0,0x00B0,0x00B0}, {0x00B1,0x00B1,0x00B1},
- {0x00B2,0x00B2,0x00B2}, {0x00B3,0x00B3,0x00B3},
- {0x00B4,0x00B4,0x00B4}, {0x039C,0x00B5,0x039C},
- {0x00B6,0x00B6,0x00B6}, {0x00B7,0x00B7,0x00B7},
- {0x00B8,0x00B8,0x00B8}, {0x00B9,0x00B9,0x00B9},
- {0x00BA,0x00BA,0x00BA}, {0x00BB,0x00BB,0x00BB},
- {0x00BC,0x00BC,0x00BC}, {0x00BD,0x00BD,0x00BD},
- {0x00BE,0x00BE,0x00BE}, {0x00BF,0x00BF,0x00BF},
- {0x00C0,0x00E0,0x0041}, {0x00C1,0x00E1,0x0041},
- {0x00C2,0x00E2,0x0041}, {0x00C3,0x00E3,0x0041},
- {0x00C4,0x00E4,0x0041}, {0x00C5,0x00E5,0x0041},
- {0x00C6,0x00E6,0x00C6}, {0x00C7,0x00E7,0x0043},
- {0x00C8,0x00E8,0x0045}, {0x00C9,0x00E9,0x0045},
- {0x00CA,0x00EA,0x0045}, {0x00CB,0x00EB,0x0045},
- {0x00CC,0x00EC,0x0049}, {0x00CD,0x00ED,0x0049},
- {0x00CE,0x00EE,0x0049}, {0x00CF,0x00EF,0x0049},
- {0x00D0,0x00F0,0x00D0}, {0x00D1,0x00F1,0x004E},
- {0x00D2,0x00F2,0x004F}, {0x00D3,0x00F3,0x004F},
- {0x00D4,0x00F4,0x004F}, {0x00D5,0x00F5,0x004F},
- {0x00D6,0x00F6,0x004F}, {0x00D7,0x00D7,0x00D7},
- {0x00D8,0x00F8,0x00D8}, {0x00D9,0x00F9,0x0055},
- {0x00DA,0x00FA,0x0055}, {0x00DB,0x00FB,0x0055},
- {0x00DC,0x00FC,0x0055}, {0x00DD,0x00FD,0x0059},
- {0x00DE,0x00FE,0x00DE}, {0x00DF,0x00DF,0x0053},
- {0x00C0,0x00E0,0x0041}, {0x00C1,0x00E1,0x0041},
- {0x00C2,0x00E2,0x0041}, {0x00C3,0x00E3,0x0041},
- {0x00C4,0x00E4,0x0041}, {0x00C5,0x00E5,0x0041},
- {0x00C6,0x00E6,0x00C6}, {0x00C7,0x00E7,0x0043},
- {0x00C8,0x00E8,0x0045}, {0x00C9,0x00E9,0x0045},
- {0x00CA,0x00EA,0x0045}, {0x00CB,0x00EB,0x0045},
- {0x00CC,0x00EC,0x0049}, {0x00CD,0x00ED,0x0049},
- {0x00CE,0x00EE,0x0049}, {0x00CF,0x00EF,0x0049},
- {0x00D0,0x00F0,0x00D0}, {0x00D1,0x00F1,0x004E},
- {0x00D2,0x00F2,0x004F}, {0x00D3,0x00F3,0x004F},
- {0x00D4,0x00F4,0x004F}, {0x00D5,0x00F5,0x004F},
- {0x00D6,0x00F6,0x004F}, {0x00F7,0x00F7,0x00F7},
- {0x00D8,0x00F8,0x00D8}, {0x00D9,0x00F9,0x0055},
- {0x00DA,0x00FA,0x0055}, {0x00DB,0x00FB,0x0055},
- {0x00DC,0x00FC,0x0055}, {0x00DD,0x00FD,0x0059},
- {0x00DE,0x00FE,0x00DE}, {0x0178,0x00FF,0x0059}
-};
-
-
-/*
- Almost similar to my_unicase_default_page00, but maps sorting order
- for U+00DF to 0x00DF instead of 0x0053.
-*/
-MY_UNICASE_CHARACTER my_unicase_mysql500_page00[]={
- {0x0000,0x0000,0x0000}, {0x0001,0x0001,0x0001},
- {0x0002,0x0002,0x0002}, {0x0003,0x0003,0x0003},
- {0x0004,0x0004,0x0004}, {0x0005,0x0005,0x0005},
- {0x0006,0x0006,0x0006}, {0x0007,0x0007,0x0007},
- {0x0008,0x0008,0x0008}, {0x0009,0x0009,0x0009},
- {0x000A,0x000A,0x000A}, {0x000B,0x000B,0x000B},
- {0x000C,0x000C,0x000C}, {0x000D,0x000D,0x000D},
- {0x000E,0x000E,0x000E}, {0x000F,0x000F,0x000F},
- {0x0010,0x0010,0x0010}, {0x0011,0x0011,0x0011},
- {0x0012,0x0012,0x0012}, {0x0013,0x0013,0x0013},
- {0x0014,0x0014,0x0014}, {0x0015,0x0015,0x0015},
- {0x0016,0x0016,0x0016}, {0x0017,0x0017,0x0017},
- {0x0018,0x0018,0x0018}, {0x0019,0x0019,0x0019},
- {0x001A,0x001A,0x001A}, {0x001B,0x001B,0x001B},
- {0x001C,0x001C,0x001C}, {0x001D,0x001D,0x001D},
- {0x001E,0x001E,0x001E}, {0x001F,0x001F,0x001F},
- {0x0020,0x0020,0x0020}, {0x0021,0x0021,0x0021},
- {0x0022,0x0022,0x0022}, {0x0023,0x0023,0x0023},
- {0x0024,0x0024,0x0024}, {0x0025,0x0025,0x0025},
- {0x0026,0x0026,0x0026}, {0x0027,0x0027,0x0027},
- {0x0028,0x0028,0x0028}, {0x0029,0x0029,0x0029},
- {0x002A,0x002A,0x002A}, {0x002B,0x002B,0x002B},
- {0x002C,0x002C,0x002C}, {0x002D,0x002D,0x002D},
- {0x002E,0x002E,0x002E}, {0x002F,0x002F,0x002F},
- {0x0030,0x0030,0x0030}, {0x0031,0x0031,0x0031},
- {0x0032,0x0032,0x0032}, {0x0033,0x0033,0x0033},
- {0x0034,0x0034,0x0034}, {0x0035,0x0035,0x0035},
- {0x0036,0x0036,0x0036}, {0x0037,0x0037,0x0037},
- {0x0038,0x0038,0x0038}, {0x0039,0x0039,0x0039},
- {0x003A,0x003A,0x003A}, {0x003B,0x003B,0x003B},
- {0x003C,0x003C,0x003C}, {0x003D,0x003D,0x003D},
- {0x003E,0x003E,0x003E}, {0x003F,0x003F,0x003F},
- {0x0040,0x0040,0x0040}, {0x0041,0x0061,0x0041},
- {0x0042,0x0062,0x0042}, {0x0043,0x0063,0x0043},
- {0x0044,0x0064,0x0044}, {0x0045,0x0065,0x0045},
- {0x0046,0x0066,0x0046}, {0x0047,0x0067,0x0047},
- {0x0048,0x0068,0x0048}, {0x0049,0x0069,0x0049},
- {0x004A,0x006A,0x004A}, {0x004B,0x006B,0x004B},
- {0x004C,0x006C,0x004C}, {0x004D,0x006D,0x004D},
- {0x004E,0x006E,0x004E}, {0x004F,0x006F,0x004F},
- {0x0050,0x0070,0x0050}, {0x0051,0x0071,0x0051},
- {0x0052,0x0072,0x0052}, {0x0053,0x0073,0x0053},
- {0x0054,0x0074,0x0054}, {0x0055,0x0075,0x0055},
- {0x0056,0x0076,0x0056}, {0x0057,0x0077,0x0057},
- {0x0058,0x0078,0x0058}, {0x0059,0x0079,0x0059},
- {0x005A,0x007A,0x005A}, {0x005B,0x005B,0x005B},
- {0x005C,0x005C,0x005C}, {0x005D,0x005D,0x005D},
- {0x005E,0x005E,0x005E}, {0x005F,0x005F,0x005F},
- {0x0060,0x0060,0x0060}, {0x0041,0x0061,0x0041},
- {0x0042,0x0062,0x0042}, {0x0043,0x0063,0x0043},
- {0x0044,0x0064,0x0044}, {0x0045,0x0065,0x0045},
- {0x0046,0x0066,0x0046}, {0x0047,0x0067,0x0047},
- {0x0048,0x0068,0x0048}, {0x0049,0x0069,0x0049},
- {0x004A,0x006A,0x004A}, {0x004B,0x006B,0x004B},
- {0x004C,0x006C,0x004C}, {0x004D,0x006D,0x004D},
- {0x004E,0x006E,0x004E}, {0x004F,0x006F,0x004F},
- {0x0050,0x0070,0x0050}, {0x0051,0x0071,0x0051},
- {0x0052,0x0072,0x0052}, {0x0053,0x0073,0x0053},
- {0x0054,0x0074,0x0054}, {0x0055,0x0075,0x0055},
- {0x0056,0x0076,0x0056}, {0x0057,0x0077,0x0057},
- {0x0058,0x0078,0x0058}, {0x0059,0x0079,0x0059},
- {0x005A,0x007A,0x005A}, {0x007B,0x007B,0x007B},
- {0x007C,0x007C,0x007C}, {0x007D,0x007D,0x007D},
- {0x007E,0x007E,0x007E}, {0x007F,0x007F,0x007F},
- {0x0080,0x0080,0x0080}, {0x0081,0x0081,0x0081},
- {0x0082,0x0082,0x0082}, {0x0083,0x0083,0x0083},
- {0x0084,0x0084,0x0084}, {0x0085,0x0085,0x0085},
- {0x0086,0x0086,0x0086}, {0x0087,0x0087,0x0087},
- {0x0088,0x0088,0x0088}, {0x0089,0x0089,0x0089},
- {0x008A,0x008A,0x008A}, {0x008B,0x008B,0x008B},
- {0x008C,0x008C,0x008C}, {0x008D,0x008D,0x008D},
- {0x008E,0x008E,0x008E}, {0x008F,0x008F,0x008F},
- {0x0090,0x0090,0x0090}, {0x0091,0x0091,0x0091},
- {0x0092,0x0092,0x0092}, {0x0093,0x0093,0x0093},
- {0x0094,0x0094,0x0094}, {0x0095,0x0095,0x0095},
- {0x0096,0x0096,0x0096}, {0x0097,0x0097,0x0097},
- {0x0098,0x0098,0x0098}, {0x0099,0x0099,0x0099},
- {0x009A,0x009A,0x009A}, {0x009B,0x009B,0x009B},
- {0x009C,0x009C,0x009C}, {0x009D,0x009D,0x009D},
- {0x009E,0x009E,0x009E}, {0x009F,0x009F,0x009F},
- {0x00A0,0x00A0,0x00A0}, {0x00A1,0x00A1,0x00A1},
- {0x00A2,0x00A2,0x00A2}, {0x00A3,0x00A3,0x00A3},
- {0x00A4,0x00A4,0x00A4}, {0x00A5,0x00A5,0x00A5},
- {0x00A6,0x00A6,0x00A6}, {0x00A7,0x00A7,0x00A7},
- {0x00A8,0x00A8,0x00A8}, {0x00A9,0x00A9,0x00A9},
- {0x00AA,0x00AA,0x00AA}, {0x00AB,0x00AB,0x00AB},
- {0x00AC,0x00AC,0x00AC}, {0x00AD,0x00AD,0x00AD},
- {0x00AE,0x00AE,0x00AE}, {0x00AF,0x00AF,0x00AF},
- {0x00B0,0x00B0,0x00B0}, {0x00B1,0x00B1,0x00B1},
- {0x00B2,0x00B2,0x00B2}, {0x00B3,0x00B3,0x00B3},
- {0x00B4,0x00B4,0x00B4}, {0x039C,0x00B5,0x039C},
- {0x00B6,0x00B6,0x00B6}, {0x00B7,0x00B7,0x00B7},
- {0x00B8,0x00B8,0x00B8}, {0x00B9,0x00B9,0x00B9},
- {0x00BA,0x00BA,0x00BA}, {0x00BB,0x00BB,0x00BB},
- {0x00BC,0x00BC,0x00BC}, {0x00BD,0x00BD,0x00BD},
- {0x00BE,0x00BE,0x00BE}, {0x00BF,0x00BF,0x00BF},
- {0x00C0,0x00E0,0x0041}, {0x00C1,0x00E1,0x0041},
- {0x00C2,0x00E2,0x0041}, {0x00C3,0x00E3,0x0041},
- {0x00C4,0x00E4,0x0041}, {0x00C5,0x00E5,0x0041},
- {0x00C6,0x00E6,0x00C6}, {0x00C7,0x00E7,0x0043},
- {0x00C8,0x00E8,0x0045}, {0x00C9,0x00E9,0x0045},
- {0x00CA,0x00EA,0x0045}, {0x00CB,0x00EB,0x0045},
- {0x00CC,0x00EC,0x0049}, {0x00CD,0x00ED,0x0049},
- {0x00CE,0x00EE,0x0049}, {0x00CF,0x00EF,0x0049},
- {0x00D0,0x00F0,0x00D0}, {0x00D1,0x00F1,0x004E},
- {0x00D2,0x00F2,0x004F}, {0x00D3,0x00F3,0x004F},
- {0x00D4,0x00F4,0x004F}, {0x00D5,0x00F5,0x004F},
- {0x00D6,0x00F6,0x004F}, {0x00D7,0x00D7,0x00D7},
- {0x00D8,0x00F8,0x00D8}, {0x00D9,0x00F9,0x0055},
- {0x00DA,0x00FA,0x0055}, {0x00DB,0x00FB,0x0055},
- {0x00DC,0x00FC,0x0055}, {0x00DD,0x00FD,0x0059},
- {0x00DE,0x00FE,0x00DE}, {0x00DF,0x00DF,0x00DF},
- {0x00C0,0x00E0,0x0041}, {0x00C1,0x00E1,0x0041},
- {0x00C2,0x00E2,0x0041}, {0x00C3,0x00E3,0x0041},
- {0x00C4,0x00E4,0x0041}, {0x00C5,0x00E5,0x0041},
- {0x00C6,0x00E6,0x00C6}, {0x00C7,0x00E7,0x0043},
- {0x00C8,0x00E8,0x0045}, {0x00C9,0x00E9,0x0045},
- {0x00CA,0x00EA,0x0045}, {0x00CB,0x00EB,0x0045},
- {0x00CC,0x00EC,0x0049}, {0x00CD,0x00ED,0x0049},
- {0x00CE,0x00EE,0x0049}, {0x00CF,0x00EF,0x0049},
- {0x00D0,0x00F0,0x00D0}, {0x00D1,0x00F1,0x004E},
- {0x00D2,0x00F2,0x004F}, {0x00D3,0x00F3,0x004F},
- {0x00D4,0x00F4,0x004F}, {0x00D5,0x00F5,0x004F},
- {0x00D6,0x00F6,0x004F}, {0x00F7,0x00F7,0x00F7},
- {0x00D8,0x00F8,0x00D8}, {0x00D9,0x00F9,0x0055},
- {0x00DA,0x00FA,0x0055}, {0x00DB,0x00FB,0x0055},
- {0x00DC,0x00FC,0x0055}, {0x00DD,0x00FD,0x0059},
- {0x00DE,0x00FE,0x00DE}, {0x0178,0x00FF,0x0059}
-};
-
-
-static MY_UNICASE_CHARACTER plane01[]={
- {0x0100,0x0101,0x0041}, {0x0100,0x0101,0x0041},
- {0x0102,0x0103,0x0041}, {0x0102,0x0103,0x0041},
- {0x0104,0x0105,0x0041}, {0x0104,0x0105,0x0041},
- {0x0106,0x0107,0x0043}, {0x0106,0x0107,0x0043},
- {0x0108,0x0109,0x0043}, {0x0108,0x0109,0x0043},
- {0x010A,0x010B,0x0043}, {0x010A,0x010B,0x0043},
- {0x010C,0x010D,0x0043}, {0x010C,0x010D,0x0043},
- {0x010E,0x010F,0x0044}, {0x010E,0x010F,0x0044},
- {0x0110,0x0111,0x0110}, {0x0110,0x0111,0x0110},
- {0x0112,0x0113,0x0045}, {0x0112,0x0113,0x0045},
- {0x0114,0x0115,0x0045}, {0x0114,0x0115,0x0045},
- {0x0116,0x0117,0x0045}, {0x0116,0x0117,0x0045},
- {0x0118,0x0119,0x0045}, {0x0118,0x0119,0x0045},
- {0x011A,0x011B,0x0045}, {0x011A,0x011B,0x0045},
- {0x011C,0x011D,0x0047}, {0x011C,0x011D,0x0047},
- {0x011E,0x011F,0x0047}, {0x011E,0x011F,0x0047},
- {0x0120,0x0121,0x0047}, {0x0120,0x0121,0x0047},
- {0x0122,0x0123,0x0047}, {0x0122,0x0123,0x0047},
- {0x0124,0x0125,0x0048}, {0x0124,0x0125,0x0048},
- {0x0126,0x0127,0x0126}, {0x0126,0x0127,0x0126},
- {0x0128,0x0129,0x0049}, {0x0128,0x0129,0x0049},
- {0x012A,0x012B,0x0049}, {0x012A,0x012B,0x0049},
- {0x012C,0x012D,0x0049}, {0x012C,0x012D,0x0049},
- {0x012E,0x012F,0x0049}, {0x012E,0x012F,0x0049},
- {0x0130,0x0069,0x0049}, {0x0049,0x0131,0x0049},
- {0x0132,0x0133,0x0132}, {0x0132,0x0133,0x0132},
- {0x0134,0x0135,0x004A}, {0x0134,0x0135,0x004A},
- {0x0136,0x0137,0x004B}, {0x0136,0x0137,0x004B},
- {0x0138,0x0138,0x0138}, {0x0139,0x013A,0x004C},
- {0x0139,0x013A,0x004C}, {0x013B,0x013C,0x004C},
- {0x013B,0x013C,0x004C}, {0x013D,0x013E,0x004C},
- {0x013D,0x013E,0x004C}, {0x013F,0x0140,0x013F},
- {0x013F,0x0140,0x013F}, {0x0141,0x0142,0x0141},
- {0x0141,0x0142,0x0141}, {0x0143,0x0144,0x004E},
- {0x0143,0x0144,0x004E}, {0x0145,0x0146,0x004E},
- {0x0145,0x0146,0x004E}, {0x0147,0x0148,0x004E},
- {0x0147,0x0148,0x004E}, {0x0149,0x0149,0x0149},
- {0x014A,0x014B,0x014A}, {0x014A,0x014B,0x014A},
- {0x014C,0x014D,0x004F}, {0x014C,0x014D,0x004F},
- {0x014E,0x014F,0x004F}, {0x014E,0x014F,0x004F},
- {0x0150,0x0151,0x004F}, {0x0150,0x0151,0x004F},
- {0x0152,0x0153,0x0152}, {0x0152,0x0153,0x0152},
- {0x0154,0x0155,0x0052}, {0x0154,0x0155,0x0052},
- {0x0156,0x0157,0x0052}, {0x0156,0x0157,0x0052},
- {0x0158,0x0159,0x0052}, {0x0158,0x0159,0x0052},
- {0x015A,0x015B,0x0053}, {0x015A,0x015B,0x0053},
- {0x015C,0x015D,0x0053}, {0x015C,0x015D,0x0053},
- {0x015E,0x015F,0x0053}, {0x015E,0x015F,0x0053},
- {0x0160,0x0161,0x0053}, {0x0160,0x0161,0x0053},
- {0x0162,0x0163,0x0054}, {0x0162,0x0163,0x0054},
- {0x0164,0x0165,0x0054}, {0x0164,0x0165,0x0054},
- {0x0166,0x0167,0x0166}, {0x0166,0x0167,0x0166},
- {0x0168,0x0169,0x0055}, {0x0168,0x0169,0x0055},
- {0x016A,0x016B,0x0055}, {0x016A,0x016B,0x0055},
- {0x016C,0x016D,0x0055}, {0x016C,0x016D,0x0055},
- {0x016E,0x016F,0x0055}, {0x016E,0x016F,0x0055},
- {0x0170,0x0171,0x0055}, {0x0170,0x0171,0x0055},
- {0x0172,0x0173,0x0055}, {0x0172,0x0173,0x0055},
- {0x0174,0x0175,0x0057}, {0x0174,0x0175,0x0057},
- {0x0176,0x0177,0x0059}, {0x0176,0x0177,0x0059},
- {0x0178,0x00FF,0x0059}, {0x0179,0x017A,0x005A},
- {0x0179,0x017A,0x005A}, {0x017B,0x017C,0x005A},
- {0x017B,0x017C,0x005A}, {0x017D,0x017E,0x005A},
- {0x017D,0x017E,0x005A}, {0x0053,0x017F,0x0053},
- {0x0180,0x0180,0x0180}, {0x0181,0x0253,0x0181},
- {0x0182,0x0183,0x0182}, {0x0182,0x0183,0x0182},
- {0x0184,0x0185,0x0184}, {0x0184,0x0185,0x0184},
- {0x0186,0x0254,0x0186}, {0x0187,0x0188,0x0187},
- {0x0187,0x0188,0x0187}, {0x0189,0x0256,0x0189},
- {0x018A,0x0257,0x018A}, {0x018B,0x018C,0x018B},
- {0x018B,0x018C,0x018B}, {0x018D,0x018D,0x018D},
- {0x018E,0x01DD,0x018E}, {0x018F,0x0259,0x018F},
- {0x0190,0x025B,0x0190}, {0x0191,0x0192,0x0191},
- {0x0191,0x0192,0x0191}, {0x0193,0x0260,0x0193},
- {0x0194,0x0263,0x0194}, {0x01F6,0x0195,0x01F6},
- {0x0196,0x0269,0x0196}, {0x0197,0x0268,0x0197},
- {0x0198,0x0199,0x0198}, {0x0198,0x0199,0x0198},
- {0x019A,0x019A,0x019A}, {0x019B,0x019B,0x019B},
- {0x019C,0x026F,0x019C}, {0x019D,0x0272,0x019D},
- {0x019E,0x019E,0x019E}, {0x019F,0x0275,0x019F},
- {0x01A0,0x01A1,0x004F}, {0x01A0,0x01A1,0x004F},
- {0x01A2,0x01A3,0x01A2}, {0x01A2,0x01A3,0x01A2},
- {0x01A4,0x01A5,0x01A4}, {0x01A4,0x01A5,0x01A4},
- {0x01A6,0x0280,0x01A6}, {0x01A7,0x01A8,0x01A7},
- {0x01A7,0x01A8,0x01A7}, {0x01A9,0x0283,0x01A9},
- {0x01AA,0x01AA,0x01AA}, {0x01AB,0x01AB,0x01AB},
- {0x01AC,0x01AD,0x01AC}, {0x01AC,0x01AD,0x01AC},
- {0x01AE,0x0288,0x01AE}, {0x01AF,0x01B0,0x0055},
- {0x01AF,0x01B0,0x0055}, {0x01B1,0x028A,0x01B1},
- {0x01B2,0x028B,0x01B2}, {0x01B3,0x01B4,0x01B3},
- {0x01B3,0x01B4,0x01B3}, {0x01B5,0x01B6,0x01B5},
- {0x01B5,0x01B6,0x01B5}, {0x01B7,0x0292,0x01B7},
- {0x01B8,0x01B9,0x01B8}, {0x01B8,0x01B9,0x01B8},
- {0x01BA,0x01BA,0x01BA}, {0x01BB,0x01BB,0x01BB},
- {0x01BC,0x01BD,0x01BC}, {0x01BC,0x01BD,0x01BC},
- {0x01BE,0x01BE,0x01BE}, {0x01F7,0x01BF,0x01F7},
- {0x01C0,0x01C0,0x01C0}, {0x01C1,0x01C1,0x01C1},
- {0x01C2,0x01C2,0x01C2}, {0x01C3,0x01C3,0x01C3},
- {0x01C4,0x01C6,0x01C4}, {0x01C4,0x01C6,0x01C4},
- {0x01C4,0x01C6,0x01C4}, {0x01C7,0x01C9,0x01C7},
- {0x01C7,0x01C9,0x01C7}, {0x01C7,0x01C9,0x01C7},
- {0x01CA,0x01CC,0x01CA}, {0x01CA,0x01CC,0x01CA},
- {0x01CA,0x01CC,0x01CA}, {0x01CD,0x01CE,0x0041},
- {0x01CD,0x01CE,0x0041}, {0x01CF,0x01D0,0x0049},
- {0x01CF,0x01D0,0x0049}, {0x01D1,0x01D2,0x004F},
- {0x01D1,0x01D2,0x004F}, {0x01D3,0x01D4,0x0055},
- {0x01D3,0x01D4,0x0055}, {0x01D5,0x01D6,0x0055},
- {0x01D5,0x01D6,0x0055}, {0x01D7,0x01D8,0x0055},
- {0x01D7,0x01D8,0x0055}, {0x01D9,0x01DA,0x0055},
- {0x01D9,0x01DA,0x0055}, {0x01DB,0x01DC,0x0055},
- {0x01DB,0x01DC,0x0055}, {0x018E,0x01DD,0x018E},
- {0x01DE,0x01DF,0x0041}, {0x01DE,0x01DF,0x0041},
- {0x01E0,0x01E1,0x0041}, {0x01E0,0x01E1,0x0041},
- {0x01E2,0x01E3,0x00C6}, {0x01E2,0x01E3,0x00C6},
- {0x01E4,0x01E5,0x01E4}, {0x01E4,0x01E5,0x01E4},
- {0x01E6,0x01E7,0x0047}, {0x01E6,0x01E7,0x0047},
- {0x01E8,0x01E9,0x004B}, {0x01E8,0x01E9,0x004B},
- {0x01EA,0x01EB,0x004F}, {0x01EA,0x01EB,0x004F},
- {0x01EC,0x01ED,0x004F}, {0x01EC,0x01ED,0x004F},
- {0x01EE,0x01EF,0x01B7}, {0x01EE,0x01EF,0x01B7},
- {0x01F0,0x01F0,0x004A}, {0x01F1,0x01F3,0x01F1},
- {0x01F1,0x01F3,0x01F1}, {0x01F1,0x01F3,0x01F1},
- {0x01F4,0x01F5,0x0047}, {0x01F4,0x01F5,0x0047},
- {0x01F6,0x0195,0x01F6}, {0x01F7,0x01BF,0x01F7},
- {0x01F8,0x01F9,0x004E}, {0x01F8,0x01F9,0x004E},
- {0x01FA,0x01FB,0x0041}, {0x01FA,0x01FB,0x0041},
- {0x01FC,0x01FD,0x00C6}, {0x01FC,0x01FD,0x00C6},
- {0x01FE,0x01FF,0x00D8}, {0x01FE,0x01FF,0x00D8}
-};
-
-static MY_UNICASE_CHARACTER plane02[]={
- {0x0200,0x0201,0x0041}, {0x0200,0x0201,0x0041},
- {0x0202,0x0203,0x0041}, {0x0202,0x0203,0x0041},
- {0x0204,0x0205,0x0045}, {0x0204,0x0205,0x0045},
- {0x0206,0x0207,0x0045}, {0x0206,0x0207,0x0045},
- {0x0208,0x0209,0x0049}, {0x0208,0x0209,0x0049},
- {0x020A,0x020B,0x0049}, {0x020A,0x020B,0x0049},
- {0x020C,0x020D,0x004F}, {0x020C,0x020D,0x004F},
- {0x020E,0x020F,0x004F}, {0x020E,0x020F,0x004F},
- {0x0210,0x0211,0x0052}, {0x0210,0x0211,0x0052},
- {0x0212,0x0213,0x0052}, {0x0212,0x0213,0x0052},
- {0x0214,0x0215,0x0055}, {0x0214,0x0215,0x0055},
- {0x0216,0x0217,0x0055}, {0x0216,0x0217,0x0055},
- {0x0218,0x0219,0x0053}, {0x0218,0x0219,0x0053},
- {0x021A,0x021B,0x0054}, {0x021A,0x021B,0x0054},
- {0x021C,0x021D,0x021C}, {0x021C,0x021D,0x021C},
- {0x021E,0x021F,0x0048}, {0x021E,0x021F,0x0048},
- {0x0220,0x0220,0x0220}, {0x0221,0x0221,0x0221},
- {0x0222,0x0223,0x0222}, {0x0222,0x0223,0x0222},
- {0x0224,0x0225,0x0224}, {0x0224,0x0225,0x0224},
- {0x0226,0x0227,0x0041}, {0x0226,0x0227,0x0041},
- {0x0228,0x0229,0x0045}, {0x0228,0x0229,0x0045},
- {0x022A,0x022B,0x004F}, {0x022A,0x022B,0x004F},
- {0x022C,0x022D,0x004F}, {0x022C,0x022D,0x004F},
- {0x022E,0x022F,0x004F}, {0x022E,0x022F,0x004F},
- {0x0230,0x0231,0x004F}, {0x0230,0x0231,0x004F},
- {0x0232,0x0233,0x0059}, {0x0232,0x0233,0x0059},
- {0x0234,0x0234,0x0234}, {0x0235,0x0235,0x0235},
- {0x0236,0x0236,0x0236}, {0x0237,0x0237,0x0237},
- {0x0238,0x0238,0x0238}, {0x0239,0x0239,0x0239},
- {0x023A,0x023A,0x023A}, {0x023B,0x023B,0x023B},
- {0x023C,0x023C,0x023C}, {0x023D,0x023D,0x023D},
- {0x023E,0x023E,0x023E}, {0x023F,0x023F,0x023F},
- {0x0240,0x0240,0x0240}, {0x0241,0x0241,0x0241},
- {0x0242,0x0242,0x0242}, {0x0243,0x0243,0x0243},
- {0x0244,0x0244,0x0244}, {0x0245,0x0245,0x0245},
- {0x0246,0x0246,0x0246}, {0x0247,0x0247,0x0247},
- {0x0248,0x0248,0x0248}, {0x0249,0x0249,0x0249},
- {0x024A,0x024A,0x024A}, {0x024B,0x024B,0x024B},
- {0x024C,0x024C,0x024C}, {0x024D,0x024D,0x024D},
- {0x024E,0x024E,0x024E}, {0x024F,0x024F,0x024F},
- {0x0250,0x0250,0x0250}, {0x0251,0x0251,0x0251},
- {0x0252,0x0252,0x0252}, {0x0181,0x0253,0x0181},
- {0x0186,0x0254,0x0186}, {0x0255,0x0255,0x0255},
- {0x0189,0x0256,0x0189}, {0x018A,0x0257,0x018A},
- {0x0258,0x0258,0x0258}, {0x018F,0x0259,0x018F},
- {0x025A,0x025A,0x025A}, {0x0190,0x025B,0x0190},
- {0x025C,0x025C,0x025C}, {0x025D,0x025D,0x025D},
- {0x025E,0x025E,0x025E}, {0x025F,0x025F,0x025F},
- {0x0193,0x0260,0x0193}, {0x0261,0x0261,0x0261},
- {0x0262,0x0262,0x0262}, {0x0194,0x0263,0x0194},
- {0x0264,0x0264,0x0264}, {0x0265,0x0265,0x0265},
- {0x0266,0x0266,0x0266}, {0x0267,0x0267,0x0267},
- {0x0197,0x0268,0x0197}, {0x0196,0x0269,0x0196},
- {0x026A,0x026A,0x026A}, {0x026B,0x026B,0x026B},
- {0x026C,0x026C,0x026C}, {0x026D,0x026D,0x026D},
- {0x026E,0x026E,0x026E}, {0x019C,0x026F,0x019C},
- {0x0270,0x0270,0x0270}, {0x0271,0x0271,0x0271},
- {0x019D,0x0272,0x019D}, {0x0273,0x0273,0x0273},
- {0x0274,0x0274,0x0274}, {0x019F,0x0275,0x019F},
- {0x0276,0x0276,0x0276}, {0x0277,0x0277,0x0277},
- {0x0278,0x0278,0x0278}, {0x0279,0x0279,0x0279},
- {0x027A,0x027A,0x027A}, {0x027B,0x027B,0x027B},
- {0x027C,0x027C,0x027C}, {0x027D,0x027D,0x027D},
- {0x027E,0x027E,0x027E}, {0x027F,0x027F,0x027F},
- {0x01A6,0x0280,0x01A6}, {0x0281,0x0281,0x0281},
- {0x0282,0x0282,0x0282}, {0x01A9,0x0283,0x01A9},
- {0x0284,0x0284,0x0284}, {0x0285,0x0285,0x0285},
- {0x0286,0x0286,0x0286}, {0x0287,0x0287,0x0287},
- {0x01AE,0x0288,0x01AE}, {0x0289,0x0289,0x0289},
- {0x01B1,0x028A,0x01B1}, {0x01B2,0x028B,0x01B2},
- {0x028C,0x028C,0x028C}, {0x028D,0x028D,0x028D},
- {0x028E,0x028E,0x028E}, {0x028F,0x028F,0x028F},
- {0x0290,0x0290,0x0290}, {0x0291,0x0291,0x0291},
- {0x01B7,0x0292,0x01B7}, {0x0293,0x0293,0x0293},
- {0x0294,0x0294,0x0294}, {0x0295,0x0295,0x0295},
- {0x0296,0x0296,0x0296}, {0x0297,0x0297,0x0297},
- {0x0298,0x0298,0x0298}, {0x0299,0x0299,0x0299},
- {0x029A,0x029A,0x029A}, {0x029B,0x029B,0x029B},
- {0x029C,0x029C,0x029C}, {0x029D,0x029D,0x029D},
- {0x029E,0x029E,0x029E}, {0x029F,0x029F,0x029F},
- {0x02A0,0x02A0,0x02A0}, {0x02A1,0x02A1,0x02A1},
- {0x02A2,0x02A2,0x02A2}, {0x02A3,0x02A3,0x02A3},
- {0x02A4,0x02A4,0x02A4}, {0x02A5,0x02A5,0x02A5},
- {0x02A6,0x02A6,0x02A6}, {0x02A7,0x02A7,0x02A7},
- {0x02A8,0x02A8,0x02A8}, {0x02A9,0x02A9,0x02A9},
- {0x02AA,0x02AA,0x02AA}, {0x02AB,0x02AB,0x02AB},
- {0x02AC,0x02AC,0x02AC}, {0x02AD,0x02AD,0x02AD},
- {0x02AE,0x02AE,0x02AE}, {0x02AF,0x02AF,0x02AF},
- {0x02B0,0x02B0,0x02B0}, {0x02B1,0x02B1,0x02B1},
- {0x02B2,0x02B2,0x02B2}, {0x02B3,0x02B3,0x02B3},
- {0x02B4,0x02B4,0x02B4}, {0x02B5,0x02B5,0x02B5},
- {0x02B6,0x02B6,0x02B6}, {0x02B7,0x02B7,0x02B7},
- {0x02B8,0x02B8,0x02B8}, {0x02B9,0x02B9,0x02B9},
- {0x02BA,0x02BA,0x02BA}, {0x02BB,0x02BB,0x02BB},
- {0x02BC,0x02BC,0x02BC}, {0x02BD,0x02BD,0x02BD},
- {0x02BE,0x02BE,0x02BE}, {0x02BF,0x02BF,0x02BF},
- {0x02C0,0x02C0,0x02C0}, {0x02C1,0x02C1,0x02C1},
- {0x02C2,0x02C2,0x02C2}, {0x02C3,0x02C3,0x02C3},
- {0x02C4,0x02C4,0x02C4}, {0x02C5,0x02C5,0x02C5},
- {0x02C6,0x02C6,0x02C6}, {0x02C7,0x02C7,0x02C7},
- {0x02C8,0x02C8,0x02C8}, {0x02C9,0x02C9,0x02C9},
- {0x02CA,0x02CA,0x02CA}, {0x02CB,0x02CB,0x02CB},
- {0x02CC,0x02CC,0x02CC}, {0x02CD,0x02CD,0x02CD},
- {0x02CE,0x02CE,0x02CE}, {0x02CF,0x02CF,0x02CF},
- {0x02D0,0x02D0,0x02D0}, {0x02D1,0x02D1,0x02D1},
- {0x02D2,0x02D2,0x02D2}, {0x02D3,0x02D3,0x02D3},
- {0x02D4,0x02D4,0x02D4}, {0x02D5,0x02D5,0x02D5},
- {0x02D6,0x02D6,0x02D6}, {0x02D7,0x02D7,0x02D7},
- {0x02D8,0x02D8,0x02D8}, {0x02D9,0x02D9,0x02D9},
- {0x02DA,0x02DA,0x02DA}, {0x02DB,0x02DB,0x02DB},
- {0x02DC,0x02DC,0x02DC}, {0x02DD,0x02DD,0x02DD},
- {0x02DE,0x02DE,0x02DE}, {0x02DF,0x02DF,0x02DF},
- {0x02E0,0x02E0,0x02E0}, {0x02E1,0x02E1,0x02E1},
- {0x02E2,0x02E2,0x02E2}, {0x02E3,0x02E3,0x02E3},
- {0x02E4,0x02E4,0x02E4}, {0x02E5,0x02E5,0x02E5},
- {0x02E6,0x02E6,0x02E6}, {0x02E7,0x02E7,0x02E7},
- {0x02E8,0x02E8,0x02E8}, {0x02E9,0x02E9,0x02E9},
- {0x02EA,0x02EA,0x02EA}, {0x02EB,0x02EB,0x02EB},
- {0x02EC,0x02EC,0x02EC}, {0x02ED,0x02ED,0x02ED},
- {0x02EE,0x02EE,0x02EE}, {0x02EF,0x02EF,0x02EF},
- {0x02F0,0x02F0,0x02F0}, {0x02F1,0x02F1,0x02F1},
- {0x02F2,0x02F2,0x02F2}, {0x02F3,0x02F3,0x02F3},
- {0x02F4,0x02F4,0x02F4}, {0x02F5,0x02F5,0x02F5},
- {0x02F6,0x02F6,0x02F6}, {0x02F7,0x02F7,0x02F7},
- {0x02F8,0x02F8,0x02F8}, {0x02F9,0x02F9,0x02F9},
- {0x02FA,0x02FA,0x02FA}, {0x02FB,0x02FB,0x02FB},
- {0x02FC,0x02FC,0x02FC}, {0x02FD,0x02FD,0x02FD},
- {0x02FE,0x02FE,0x02FE}, {0x02FF,0x02FF,0x02FF}
-};
-
-static MY_UNICASE_CHARACTER plane03[]={
- {0x0300,0x0300,0x0300}, {0x0301,0x0301,0x0301},
- {0x0302,0x0302,0x0302}, {0x0303,0x0303,0x0303},
- {0x0304,0x0304,0x0304}, {0x0305,0x0305,0x0305},
- {0x0306,0x0306,0x0306}, {0x0307,0x0307,0x0307},
- {0x0308,0x0308,0x0308}, {0x0309,0x0309,0x0309},
- {0x030A,0x030A,0x030A}, {0x030B,0x030B,0x030B},
- {0x030C,0x030C,0x030C}, {0x030D,0x030D,0x030D},
- {0x030E,0x030E,0x030E}, {0x030F,0x030F,0x030F},
- {0x0310,0x0310,0x0310}, {0x0311,0x0311,0x0311},
- {0x0312,0x0312,0x0312}, {0x0313,0x0313,0x0313},
- {0x0314,0x0314,0x0314}, {0x0315,0x0315,0x0315},
- {0x0316,0x0316,0x0316}, {0x0317,0x0317,0x0317},
- {0x0318,0x0318,0x0318}, {0x0319,0x0319,0x0319},
- {0x031A,0x031A,0x031A}, {0x031B,0x031B,0x031B},
- {0x031C,0x031C,0x031C}, {0x031D,0x031D,0x031D},
- {0x031E,0x031E,0x031E}, {0x031F,0x031F,0x031F},
- {0x0320,0x0320,0x0320}, {0x0321,0x0321,0x0321},
- {0x0322,0x0322,0x0322}, {0x0323,0x0323,0x0323},
- {0x0324,0x0324,0x0324}, {0x0325,0x0325,0x0325},
- {0x0326,0x0326,0x0326}, {0x0327,0x0327,0x0327},
- {0x0328,0x0328,0x0328}, {0x0329,0x0329,0x0329},
- {0x032A,0x032A,0x032A}, {0x032B,0x032B,0x032B},
- {0x032C,0x032C,0x032C}, {0x032D,0x032D,0x032D},
- {0x032E,0x032E,0x032E}, {0x032F,0x032F,0x032F},
- {0x0330,0x0330,0x0330}, {0x0331,0x0331,0x0331},
- {0x0332,0x0332,0x0332}, {0x0333,0x0333,0x0333},
- {0x0334,0x0334,0x0334}, {0x0335,0x0335,0x0335},
- {0x0336,0x0336,0x0336}, {0x0337,0x0337,0x0337},
- {0x0338,0x0338,0x0338}, {0x0339,0x0339,0x0339},
- {0x033A,0x033A,0x033A}, {0x033B,0x033B,0x033B},
- {0x033C,0x033C,0x033C}, {0x033D,0x033D,0x033D},
- {0x033E,0x033E,0x033E}, {0x033F,0x033F,0x033F},
- {0x0340,0x0340,0x0340}, {0x0341,0x0341,0x0341},
- {0x0342,0x0342,0x0342}, {0x0343,0x0343,0x0343},
- {0x0344,0x0344,0x0344}, {0x0399,0x0345,0x0399},
- {0x0346,0x0346,0x0346}, {0x0347,0x0347,0x0347},
- {0x0348,0x0348,0x0348}, {0x0349,0x0349,0x0349},
- {0x034A,0x034A,0x034A}, {0x034B,0x034B,0x034B},
- {0x034C,0x034C,0x034C}, {0x034D,0x034D,0x034D},
- {0x034E,0x034E,0x034E}, {0x034F,0x034F,0x034F},
- {0x0350,0x0350,0x0350}, {0x0351,0x0351,0x0351},
- {0x0352,0x0352,0x0352}, {0x0353,0x0353,0x0353},
- {0x0354,0x0354,0x0354}, {0x0355,0x0355,0x0355},
- {0x0356,0x0356,0x0356}, {0x0357,0x0357,0x0357},
- {0x0358,0x0358,0x0358}, {0x0359,0x0359,0x0359},
- {0x035A,0x035A,0x035A}, {0x035B,0x035B,0x035B},
- {0x035C,0x035C,0x035C}, {0x035D,0x035D,0x035D},
- {0x035E,0x035E,0x035E}, {0x035F,0x035F,0x035F},
- {0x0360,0x0360,0x0360}, {0x0361,0x0361,0x0361},
- {0x0362,0x0362,0x0362}, {0x0363,0x0363,0x0363},
- {0x0364,0x0364,0x0364}, {0x0365,0x0365,0x0365},
- {0x0366,0x0366,0x0366}, {0x0367,0x0367,0x0367},
- {0x0368,0x0368,0x0368}, {0x0369,0x0369,0x0369},
- {0x036A,0x036A,0x036A}, {0x036B,0x036B,0x036B},
- {0x036C,0x036C,0x036C}, {0x036D,0x036D,0x036D},
- {0x036E,0x036E,0x036E}, {0x036F,0x036F,0x036F},
- {0x0370,0x0370,0x0370}, {0x0371,0x0371,0x0371},
- {0x0372,0x0372,0x0372}, {0x0373,0x0373,0x0373},
- {0x0374,0x0374,0x0374}, {0x0375,0x0375,0x0375},
- {0x0376,0x0376,0x0376}, {0x0377,0x0377,0x0377},
- {0x0378,0x0378,0x0378}, {0x0379,0x0379,0x0379},
- {0x037A,0x037A,0x037A}, {0x037B,0x037B,0x037B},
- {0x037C,0x037C,0x037C}, {0x037D,0x037D,0x037D},
- {0x037E,0x037E,0x037E}, {0x037F,0x037F,0x037F},
- {0x0380,0x0380,0x0380}, {0x0381,0x0381,0x0381},
- {0x0382,0x0382,0x0382}, {0x0383,0x0383,0x0383},
- {0x0384,0x0384,0x0384}, {0x0385,0x0385,0x0385},
- {0x0386,0x03AC,0x0391}, {0x0387,0x0387,0x0387},
- {0x0388,0x03AD,0x0395}, {0x0389,0x03AE,0x0397},
- {0x038A,0x03AF,0x0399}, {0x038B,0x038B,0x038B},
- {0x038C,0x03CC,0x039F}, {0x038D,0x038D,0x038D},
- {0x038E,0x03CD,0x03A5}, {0x038F,0x03CE,0x03A9},
- {0x0390,0x0390,0x0399}, {0x0391,0x03B1,0x0391},
- {0x0392,0x03B2,0x0392}, {0x0393,0x03B3,0x0393},
- {0x0394,0x03B4,0x0394}, {0x0395,0x03B5,0x0395},
- {0x0396,0x03B6,0x0396}, {0x0397,0x03B7,0x0397},
- {0x0398,0x03B8,0x0398}, {0x0399,0x03B9,0x0399},
- {0x039A,0x03BA,0x039A}, {0x039B,0x03BB,0x039B},
- {0x039C,0x03BC,0x039C}, {0x039D,0x03BD,0x039D},
- {0x039E,0x03BE,0x039E}, {0x039F,0x03BF,0x039F},
- {0x03A0,0x03C0,0x03A0}, {0x03A1,0x03C1,0x03A1},
- {0x03A2,0x03A2,0x03A2}, {0x03A3,0x03C3,0x03A3},
- {0x03A4,0x03C4,0x03A4}, {0x03A5,0x03C5,0x03A5},
- {0x03A6,0x03C6,0x03A6}, {0x03A7,0x03C7,0x03A7},
- {0x03A8,0x03C8,0x03A8}, {0x03A9,0x03C9,0x03A9},
- {0x03AA,0x03CA,0x0399}, {0x03AB,0x03CB,0x03A5},
- {0x0386,0x03AC,0x0391}, {0x0388,0x03AD,0x0395},
- {0x0389,0x03AE,0x0397}, {0x038A,0x03AF,0x0399},
- {0x03B0,0x03B0,0x03A5}, {0x0391,0x03B1,0x0391},
- {0x0392,0x03B2,0x0392}, {0x0393,0x03B3,0x0393},
- {0x0394,0x03B4,0x0394}, {0x0395,0x03B5,0x0395},
- {0x0396,0x03B6,0x0396}, {0x0397,0x03B7,0x0397},
- {0x0398,0x03B8,0x0398}, {0x0399,0x03B9,0x0399},
- {0x039A,0x03BA,0x039A}, {0x039B,0x03BB,0x039B},
- {0x039C,0x03BC,0x039C}, {0x039D,0x03BD,0x039D},
- {0x039E,0x03BE,0x039E}, {0x039F,0x03BF,0x039F},
- {0x03A0,0x03C0,0x03A0}, {0x03A1,0x03C1,0x03A1},
- {0x03A3,0x03C2,0x03A3}, {0x03A3,0x03C3,0x03A3},
- {0x03A4,0x03C4,0x03A4}, {0x03A5,0x03C5,0x03A5},
- {0x03A6,0x03C6,0x03A6}, {0x03A7,0x03C7,0x03A7},
- {0x03A8,0x03C8,0x03A8}, {0x03A9,0x03C9,0x03A9},
- {0x03AA,0x03CA,0x0399}, {0x03AB,0x03CB,0x03A5},
- {0x038C,0x03CC,0x039F}, {0x038E,0x03CD,0x03A5},
- {0x038F,0x03CE,0x03A9}, {0x03CF,0x03CF,0x03CF},
- {0x0392,0x03D0,0x0392}, {0x0398,0x03D1,0x0398},
- {0x03D2,0x03D2,0x03D2}, {0x03D3,0x03D3,0x03D2},
- {0x03D4,0x03D4,0x03D2}, {0x03A6,0x03D5,0x03A6},
- {0x03A0,0x03D6,0x03A0}, {0x03D7,0x03D7,0x03D7},
- {0x03D8,0x03D8,0x03D8}, {0x03D9,0x03D9,0x03D9},
- {0x03DA,0x03DB,0x03DA}, {0x03DA,0x03DB,0x03DA},
- {0x03DC,0x03DD,0x03DC}, {0x03DC,0x03DD,0x03DC},
- {0x03DE,0x03DF,0x03DE}, {0x03DE,0x03DF,0x03DE},
- {0x03E0,0x03E1,0x03E0}, {0x03E0,0x03E1,0x03E0},
- {0x03E2,0x03E3,0x03E2}, {0x03E2,0x03E3,0x03E2},
- {0x03E4,0x03E5,0x03E4}, {0x03E4,0x03E5,0x03E4},
- {0x03E6,0x03E7,0x03E6}, {0x03E6,0x03E7,0x03E6},
- {0x03E8,0x03E9,0x03E8}, {0x03E8,0x03E9,0x03E8},
- {0x03EA,0x03EB,0x03EA}, {0x03EA,0x03EB,0x03EA},
- {0x03EC,0x03ED,0x03EC}, {0x03EC,0x03ED,0x03EC},
- {0x03EE,0x03EF,0x03EE}, {0x03EE,0x03EF,0x03EE},
- {0x039A,0x03F0,0x039A}, {0x03A1,0x03F1,0x03A1},
- {0x03A3,0x03F2,0x03A3}, {0x03F3,0x03F3,0x03F3},
- {0x03F4,0x03F4,0x03F4}, {0x03F5,0x03F5,0x03F5},
- {0x03F6,0x03F6,0x03F6}, {0x03F7,0x03F7,0x03F7},
- {0x03F8,0x03F8,0x03F8}, {0x03F9,0x03F9,0x03F9},
- {0x03FA,0x03FA,0x03FA}, {0x03FB,0x03FB,0x03FB},
- {0x03FC,0x03FC,0x03FC}, {0x03FD,0x03FD,0x03FD},
- {0x03FE,0x03FE,0x03FE}, {0x03FF,0x03FF,0x03FF}
-};
-
-static MY_UNICASE_CHARACTER plane04[]={
- {0x0400,0x0450,0x0415}, {0x0401,0x0451,0x0415},
- {0x0402,0x0452,0x0402}, {0x0403,0x0453,0x0413},
- {0x0404,0x0454,0x0404}, {0x0405,0x0455,0x0405},
- {0x0406,0x0456,0x0406}, {0x0407,0x0457,0x0406},
- {0x0408,0x0458,0x0408}, {0x0409,0x0459,0x0409},
- {0x040A,0x045A,0x040A}, {0x040B,0x045B,0x040B},
- {0x040C,0x045C,0x041A}, {0x040D,0x045D,0x0418},
- {0x040E,0x045E,0x0423}, {0x040F,0x045F,0x040F},
- {0x0410,0x0430,0x0410}, {0x0411,0x0431,0x0411},
- {0x0412,0x0432,0x0412}, {0x0413,0x0433,0x0413},
- {0x0414,0x0434,0x0414}, {0x0415,0x0435,0x0415},
- {0x0416,0x0436,0x0416}, {0x0417,0x0437,0x0417},
- {0x0418,0x0438,0x0418}, {0x0419,0x0439,0x0419},
- {0x041A,0x043A,0x041A}, {0x041B,0x043B,0x041B},
- {0x041C,0x043C,0x041C}, {0x041D,0x043D,0x041D},
- {0x041E,0x043E,0x041E}, {0x041F,0x043F,0x041F},
- {0x0420,0x0440,0x0420}, {0x0421,0x0441,0x0421},
- {0x0422,0x0442,0x0422}, {0x0423,0x0443,0x0423},
- {0x0424,0x0444,0x0424}, {0x0425,0x0445,0x0425},
- {0x0426,0x0446,0x0426}, {0x0427,0x0447,0x0427},
- {0x0428,0x0448,0x0428}, {0x0429,0x0449,0x0429},
- {0x042A,0x044A,0x042A}, {0x042B,0x044B,0x042B},
- {0x042C,0x044C,0x042C}, {0x042D,0x044D,0x042D},
- {0x042E,0x044E,0x042E}, {0x042F,0x044F,0x042F},
- {0x0410,0x0430,0x0410}, {0x0411,0x0431,0x0411},
- {0x0412,0x0432,0x0412}, {0x0413,0x0433,0x0413},
- {0x0414,0x0434,0x0414}, {0x0415,0x0435,0x0415},
- {0x0416,0x0436,0x0416}, {0x0417,0x0437,0x0417},
- {0x0418,0x0438,0x0418}, {0x0419,0x0439,0x0419},
- {0x041A,0x043A,0x041A}, {0x041B,0x043B,0x041B},
- {0x041C,0x043C,0x041C}, {0x041D,0x043D,0x041D},
- {0x041E,0x043E,0x041E}, {0x041F,0x043F,0x041F},
- {0x0420,0x0440,0x0420}, {0x0421,0x0441,0x0421},
- {0x0422,0x0442,0x0422}, {0x0423,0x0443,0x0423},
- {0x0424,0x0444,0x0424}, {0x0425,0x0445,0x0425},
- {0x0426,0x0446,0x0426}, {0x0427,0x0447,0x0427},
- {0x0428,0x0448,0x0428}, {0x0429,0x0449,0x0429},
- {0x042A,0x044A,0x042A}, {0x042B,0x044B,0x042B},
- {0x042C,0x044C,0x042C}, {0x042D,0x044D,0x042D},
- {0x042E,0x044E,0x042E}, {0x042F,0x044F,0x042F},
- {0x0400,0x0450,0x0415}, {0x0401,0x0451,0x0415},
- {0x0402,0x0452,0x0402}, {0x0403,0x0453,0x0413},
- {0x0404,0x0454,0x0404}, {0x0405,0x0455,0x0405},
- {0x0406,0x0456,0x0406}, {0x0407,0x0457,0x0406},
- {0x0408,0x0458,0x0408}, {0x0409,0x0459,0x0409},
- {0x040A,0x045A,0x040A}, {0x040B,0x045B,0x040B},
- {0x040C,0x045C,0x041A}, {0x040D,0x045D,0x0418},
- {0x040E,0x045E,0x0423}, {0x040F,0x045F,0x040F},
- {0x0460,0x0461,0x0460}, {0x0460,0x0461,0x0460},
- {0x0462,0x0463,0x0462}, {0x0462,0x0463,0x0462},
- {0x0464,0x0465,0x0464}, {0x0464,0x0465,0x0464},
- {0x0466,0x0467,0x0466}, {0x0466,0x0467,0x0466},
- {0x0468,0x0469,0x0468}, {0x0468,0x0469,0x0468},
- {0x046A,0x046B,0x046A}, {0x046A,0x046B,0x046A},
- {0x046C,0x046D,0x046C}, {0x046C,0x046D,0x046C},
- {0x046E,0x046F,0x046E}, {0x046E,0x046F,0x046E},
- {0x0470,0x0471,0x0470}, {0x0470,0x0471,0x0470},
- {0x0472,0x0473,0x0472}, {0x0472,0x0473,0x0472},
- {0x0474,0x0475,0x0474}, {0x0474,0x0475,0x0474},
- {0x0476,0x0477,0x0474}, {0x0476,0x0477,0x0474},
- {0x0478,0x0479,0x0478}, {0x0478,0x0479,0x0478},
- {0x047A,0x047B,0x047A}, {0x047A,0x047B,0x047A},
- {0x047C,0x047D,0x047C}, {0x047C,0x047D,0x047C},
- {0x047E,0x047F,0x047E}, {0x047E,0x047F,0x047E},
- {0x0480,0x0481,0x0480}, {0x0480,0x0481,0x0480},
- {0x0482,0x0482,0x0482}, {0x0483,0x0483,0x0483},
- {0x0484,0x0484,0x0484}, {0x0485,0x0485,0x0485},
- {0x0486,0x0486,0x0486}, {0x0487,0x0487,0x0487},
- {0x0488,0x0488,0x0488}, {0x0489,0x0489,0x0489},
- {0x048A,0x048A,0x048A}, {0x048B,0x048B,0x048B},
- {0x048C,0x048D,0x048C}, {0x048C,0x048D,0x048C},
- {0x048E,0x048F,0x048E}, {0x048E,0x048F,0x048E},
- {0x0490,0x0491,0x0490}, {0x0490,0x0491,0x0490},
- {0x0492,0x0493,0x0492}, {0x0492,0x0493,0x0492},
- {0x0494,0x0495,0x0494}, {0x0494,0x0495,0x0494},
- {0x0496,0x0497,0x0496}, {0x0496,0x0497,0x0496},
- {0x0498,0x0499,0x0498}, {0x0498,0x0499,0x0498},
- {0x049A,0x049B,0x049A}, {0x049A,0x049B,0x049A},
- {0x049C,0x049D,0x049C}, {0x049C,0x049D,0x049C},
- {0x049E,0x049F,0x049E}, {0x049E,0x049F,0x049E},
- {0x04A0,0x04A1,0x04A0}, {0x04A0,0x04A1,0x04A0},
- {0x04A2,0x04A3,0x04A2}, {0x04A2,0x04A3,0x04A2},
- {0x04A4,0x04A5,0x04A4}, {0x04A4,0x04A5,0x04A4},
- {0x04A6,0x04A7,0x04A6}, {0x04A6,0x04A7,0x04A6},
- {0x04A8,0x04A9,0x04A8}, {0x04A8,0x04A9,0x04A8},
- {0x04AA,0x04AB,0x04AA}, {0x04AA,0x04AB,0x04AA},
- {0x04AC,0x04AD,0x04AC}, {0x04AC,0x04AD,0x04AC},
- {0x04AE,0x04AF,0x04AE}, {0x04AE,0x04AF,0x04AE},
- {0x04B0,0x04B1,0x04B0}, {0x04B0,0x04B1,0x04B0},
- {0x04B2,0x04B3,0x04B2}, {0x04B2,0x04B3,0x04B2},
- {0x04B4,0x04B5,0x04B4}, {0x04B4,0x04B5,0x04B4},
- {0x04B6,0x04B7,0x04B6}, {0x04B6,0x04B7,0x04B6},
- {0x04B8,0x04B9,0x04B8}, {0x04B8,0x04B9,0x04B8},
- {0x04BA,0x04BB,0x04BA}, {0x04BA,0x04BB,0x04BA},
- {0x04BC,0x04BD,0x04BC}, {0x04BC,0x04BD,0x04BC},
- {0x04BE,0x04BF,0x04BE}, {0x04BE,0x04BF,0x04BE},
- {0x04C0,0x04C0,0x04C0}, {0x04C1,0x04C2,0x0416},
- {0x04C1,0x04C2,0x0416}, {0x04C3,0x04C4,0x04C3},
- {0x04C3,0x04C4,0x04C3}, {0x04C5,0x04C5,0x04C5},
- {0x04C6,0x04C6,0x04C6}, {0x04C7,0x04C8,0x04C7},
- {0x04C7,0x04C8,0x04C7}, {0x04C9,0x04C9,0x04C9},
- {0x04CA,0x04CA,0x04CA}, {0x04CB,0x04CC,0x04CB},
- {0x04CB,0x04CC,0x04CB}, {0x04CD,0x04CD,0x04CD},
- {0x04CE,0x04CE,0x04CE}, {0x04CF,0x04CF,0x04CF},
- {0x04D0,0x04D1,0x0410}, {0x04D0,0x04D1,0x0410},
- {0x04D2,0x04D3,0x0410}, {0x04D2,0x04D3,0x0410},
- {0x04D4,0x04D5,0x04D4}, {0x04D4,0x04D5,0x04D4},
- {0x04D6,0x04D7,0x0415}, {0x04D6,0x04D7,0x0415},
- {0x04D8,0x04D9,0x04D8}, {0x04D8,0x04D9,0x04D8},
- {0x04DA,0x04DB,0x04D8}, {0x04DA,0x04DB,0x04D8},
- {0x04DC,0x04DD,0x0416}, {0x04DC,0x04DD,0x0416},
- {0x04DE,0x04DF,0x0417}, {0x04DE,0x04DF,0x0417},
- {0x04E0,0x04E1,0x04E0}, {0x04E0,0x04E1,0x04E0},
- {0x04E2,0x04E3,0x0418}, {0x04E2,0x04E3,0x0418},
- {0x04E4,0x04E5,0x0418}, {0x04E4,0x04E5,0x0418},
- {0x04E6,0x04E7,0x041E}, {0x04E6,0x04E7,0x041E},
- {0x04E8,0x04E9,0x04E8}, {0x04E8,0x04E9,0x04E8},
- {0x04EA,0x04EB,0x04E8}, {0x04EA,0x04EB,0x04E8},
- {0x04EC,0x04ED,0x042D}, {0x04EC,0x04ED,0x042D},
- {0x04EE,0x04EF,0x0423}, {0x04EE,0x04EF,0x0423},
- {0x04F0,0x04F1,0x0423}, {0x04F0,0x04F1,0x0423},
- {0x04F2,0x04F3,0x0423}, {0x04F2,0x04F3,0x0423},
- {0x04F4,0x04F5,0x0427}, {0x04F4,0x04F5,0x0427},
- {0x04F6,0x04F6,0x04F6}, {0x04F7,0x04F7,0x04F7},
- {0x04F8,0x04F9,0x042B}, {0x04F8,0x04F9,0x042B},
- {0x04FA,0x04FA,0x04FA}, {0x04FB,0x04FB,0x04FB},
- {0x04FC,0x04FC,0x04FC}, {0x04FD,0x04FD,0x04FD},
- {0x04FE,0x04FE,0x04FE}, {0x04FF,0x04FF,0x04FF}
-};
-
-static MY_UNICASE_CHARACTER plane05[]={
- {0x0500,0x0500,0x0500}, {0x0501,0x0501,0x0501},
- {0x0502,0x0502,0x0502}, {0x0503,0x0503,0x0503},
- {0x0504,0x0504,0x0504}, {0x0505,0x0505,0x0505},
- {0x0506,0x0506,0x0506}, {0x0507,0x0507,0x0507},
- {0x0508,0x0508,0x0508}, {0x0509,0x0509,0x0509},
- {0x050A,0x050A,0x050A}, {0x050B,0x050B,0x050B},
- {0x050C,0x050C,0x050C}, {0x050D,0x050D,0x050D},
- {0x050E,0x050E,0x050E}, {0x050F,0x050F,0x050F},
- {0x0510,0x0510,0x0510}, {0x0511,0x0511,0x0511},
- {0x0512,0x0512,0x0512}, {0x0513,0x0513,0x0513},
- {0x0514,0x0514,0x0514}, {0x0515,0x0515,0x0515},
- {0x0516,0x0516,0x0516}, {0x0517,0x0517,0x0517},
- {0x0518,0x0518,0x0518}, {0x0519,0x0519,0x0519},
- {0x051A,0x051A,0x051A}, {0x051B,0x051B,0x051B},
- {0x051C,0x051C,0x051C}, {0x051D,0x051D,0x051D},
- {0x051E,0x051E,0x051E}, {0x051F,0x051F,0x051F},
- {0x0520,0x0520,0x0520}, {0x0521,0x0521,0x0521},
- {0x0522,0x0522,0x0522}, {0x0523,0x0523,0x0523},
- {0x0524,0x0524,0x0524}, {0x0525,0x0525,0x0525},
- {0x0526,0x0526,0x0526}, {0x0527,0x0527,0x0527},
- {0x0528,0x0528,0x0528}, {0x0529,0x0529,0x0529},
- {0x052A,0x052A,0x052A}, {0x052B,0x052B,0x052B},
- {0x052C,0x052C,0x052C}, {0x052D,0x052D,0x052D},
- {0x052E,0x052E,0x052E}, {0x052F,0x052F,0x052F},
- {0x0530,0x0530,0x0530}, {0x0531,0x0561,0x0531},
- {0x0532,0x0562,0x0532}, {0x0533,0x0563,0x0533},
- {0x0534,0x0564,0x0534}, {0x0535,0x0565,0x0535},
- {0x0536,0x0566,0x0536}, {0x0537,0x0567,0x0537},
- {0x0538,0x0568,0x0538}, {0x0539,0x0569,0x0539},
- {0x053A,0x056A,0x053A}, {0x053B,0x056B,0x053B},
- {0x053C,0x056C,0x053C}, {0x053D,0x056D,0x053D},
- {0x053E,0x056E,0x053E}, {0x053F,0x056F,0x053F},
- {0x0540,0x0570,0x0540}, {0x0541,0x0571,0x0541},
- {0x0542,0x0572,0x0542}, {0x0543,0x0573,0x0543},
- {0x0544,0x0574,0x0544}, {0x0545,0x0575,0x0545},
- {0x0546,0x0576,0x0546}, {0x0547,0x0577,0x0547},
- {0x0548,0x0578,0x0548}, {0x0549,0x0579,0x0549},
- {0x054A,0x057A,0x054A}, {0x054B,0x057B,0x054B},
- {0x054C,0x057C,0x054C}, {0x054D,0x057D,0x054D},
- {0x054E,0x057E,0x054E}, {0x054F,0x057F,0x054F},
- {0x0550,0x0580,0x0550}, {0x0551,0x0581,0x0551},
- {0x0552,0x0582,0x0552}, {0x0553,0x0583,0x0553},
- {0x0554,0x0584,0x0554}, {0x0555,0x0585,0x0555},
- {0x0556,0x0586,0x0556}, {0x0557,0x0557,0x0557},
- {0x0558,0x0558,0x0558}, {0x0559,0x0559,0x0559},
- {0x055A,0x055A,0x055A}, {0x055B,0x055B,0x055B},
- {0x055C,0x055C,0x055C}, {0x055D,0x055D,0x055D},
- {0x055E,0x055E,0x055E}, {0x055F,0x055F,0x055F},
- {0x0560,0x0560,0x0560}, {0x0531,0x0561,0x0531},
- {0x0532,0x0562,0x0532}, {0x0533,0x0563,0x0533},
- {0x0534,0x0564,0x0534}, {0x0535,0x0565,0x0535},
- {0x0536,0x0566,0x0536}, {0x0537,0x0567,0x0537},
- {0x0538,0x0568,0x0538}, {0x0539,0x0569,0x0539},
- {0x053A,0x056A,0x053A}, {0x053B,0x056B,0x053B},
- {0x053C,0x056C,0x053C}, {0x053D,0x056D,0x053D},
- {0x053E,0x056E,0x053E}, {0x053F,0x056F,0x053F},
- {0x0540,0x0570,0x0540}, {0x0541,0x0571,0x0541},
- {0x0542,0x0572,0x0542}, {0x0543,0x0573,0x0543},
- {0x0544,0x0574,0x0544}, {0x0545,0x0575,0x0545},
- {0x0546,0x0576,0x0546}, {0x0547,0x0577,0x0547},
- {0x0548,0x0578,0x0548}, {0x0549,0x0579,0x0549},
- {0x054A,0x057A,0x054A}, {0x054B,0x057B,0x054B},
- {0x054C,0x057C,0x054C}, {0x054D,0x057D,0x054D},
- {0x054E,0x057E,0x054E}, {0x054F,0x057F,0x054F},
- {0x0550,0x0580,0x0550}, {0x0551,0x0581,0x0551},
- {0x0552,0x0582,0x0552}, {0x0553,0x0583,0x0553},
- {0x0554,0x0584,0x0554}, {0x0555,0x0585,0x0555},
- {0x0556,0x0586,0x0556}, {0x0587,0x0587,0x0587},
- {0x0588,0x0588,0x0588}, {0x0589,0x0589,0x0589},
- {0x058A,0x058A,0x058A}, {0x058B,0x058B,0x058B},
- {0x058C,0x058C,0x058C}, {0x058D,0x058D,0x058D},
- {0x058E,0x058E,0x058E}, {0x058F,0x058F,0x058F},
- {0x0590,0x0590,0x0590}, {0x0591,0x0591,0x0591},
- {0x0592,0x0592,0x0592}, {0x0593,0x0593,0x0593},
- {0x0594,0x0594,0x0594}, {0x0595,0x0595,0x0595},
- {0x0596,0x0596,0x0596}, {0x0597,0x0597,0x0597},
- {0x0598,0x0598,0x0598}, {0x0599,0x0599,0x0599},
- {0x059A,0x059A,0x059A}, {0x059B,0x059B,0x059B},
- {0x059C,0x059C,0x059C}, {0x059D,0x059D,0x059D},
- {0x059E,0x059E,0x059E}, {0x059F,0x059F,0x059F},
- {0x05A0,0x05A0,0x05A0}, {0x05A1,0x05A1,0x05A1},
- {0x05A2,0x05A2,0x05A2}, {0x05A3,0x05A3,0x05A3},
- {0x05A4,0x05A4,0x05A4}, {0x05A5,0x05A5,0x05A5},
- {0x05A6,0x05A6,0x05A6}, {0x05A7,0x05A7,0x05A7},
- {0x05A8,0x05A8,0x05A8}, {0x05A9,0x05A9,0x05A9},
- {0x05AA,0x05AA,0x05AA}, {0x05AB,0x05AB,0x05AB},
- {0x05AC,0x05AC,0x05AC}, {0x05AD,0x05AD,0x05AD},
- {0x05AE,0x05AE,0x05AE}, {0x05AF,0x05AF,0x05AF},
- {0x05B0,0x05B0,0x05B0}, {0x05B1,0x05B1,0x05B1},
- {0x05B2,0x05B2,0x05B2}, {0x05B3,0x05B3,0x05B3},
- {0x05B4,0x05B4,0x05B4}, {0x05B5,0x05B5,0x05B5},
- {0x05B6,0x05B6,0x05B6}, {0x05B7,0x05B7,0x05B7},
- {0x05B8,0x05B8,0x05B8}, {0x05B9,0x05B9,0x05B9},
- {0x05BA,0x05BA,0x05BA}, {0x05BB,0x05BB,0x05BB},
- {0x05BC,0x05BC,0x05BC}, {0x05BD,0x05BD,0x05BD},
- {0x05BE,0x05BE,0x05BE}, {0x05BF,0x05BF,0x05BF},
- {0x05C0,0x05C0,0x05C0}, {0x05C1,0x05C1,0x05C1},
- {0x05C2,0x05C2,0x05C2}, {0x05C3,0x05C3,0x05C3},
- {0x05C4,0x05C4,0x05C4}, {0x05C5,0x05C5,0x05C5},
- {0x05C6,0x05C6,0x05C6}, {0x05C7,0x05C7,0x05C7},
- {0x05C8,0x05C8,0x05C8}, {0x05C9,0x05C9,0x05C9},
- {0x05CA,0x05CA,0x05CA}, {0x05CB,0x05CB,0x05CB},
- {0x05CC,0x05CC,0x05CC}, {0x05CD,0x05CD,0x05CD},
- {0x05CE,0x05CE,0x05CE}, {0x05CF,0x05CF,0x05CF},
- {0x05D0,0x05D0,0x05D0}, {0x05D1,0x05D1,0x05D1},
- {0x05D2,0x05D2,0x05D2}, {0x05D3,0x05D3,0x05D3},
- {0x05D4,0x05D4,0x05D4}, {0x05D5,0x05D5,0x05D5},
- {0x05D6,0x05D6,0x05D6}, {0x05D7,0x05D7,0x05D7},
- {0x05D8,0x05D8,0x05D8}, {0x05D9,0x05D9,0x05D9},
- {0x05DA,0x05DA,0x05DA}, {0x05DB,0x05DB,0x05DB},
- {0x05DC,0x05DC,0x05DC}, {0x05DD,0x05DD,0x05DD},
- {0x05DE,0x05DE,0x05DE}, {0x05DF,0x05DF,0x05DF},
- {0x05E0,0x05E0,0x05E0}, {0x05E1,0x05E1,0x05E1},
- {0x05E2,0x05E2,0x05E2}, {0x05E3,0x05E3,0x05E3},
- {0x05E4,0x05E4,0x05E4}, {0x05E5,0x05E5,0x05E5},
- {0x05E6,0x05E6,0x05E6}, {0x05E7,0x05E7,0x05E7},
- {0x05E8,0x05E8,0x05E8}, {0x05E9,0x05E9,0x05E9},
- {0x05EA,0x05EA,0x05EA}, {0x05EB,0x05EB,0x05EB},
- {0x05EC,0x05EC,0x05EC}, {0x05ED,0x05ED,0x05ED},
- {0x05EE,0x05EE,0x05EE}, {0x05EF,0x05EF,0x05EF},
- {0x05F0,0x05F0,0x05F0}, {0x05F1,0x05F1,0x05F1},
- {0x05F2,0x05F2,0x05F2}, {0x05F3,0x05F3,0x05F3},
- {0x05F4,0x05F4,0x05F4}, {0x05F5,0x05F5,0x05F5},
- {0x05F6,0x05F6,0x05F6}, {0x05F7,0x05F7,0x05F7},
- {0x05F8,0x05F8,0x05F8}, {0x05F9,0x05F9,0x05F9},
- {0x05FA,0x05FA,0x05FA}, {0x05FB,0x05FB,0x05FB},
- {0x05FC,0x05FC,0x05FC}, {0x05FD,0x05FD,0x05FD},
- {0x05FE,0x05FE,0x05FE}, {0x05FF,0x05FF,0x05FF}
-};
-
-static MY_UNICASE_CHARACTER plane06[]={ /* This page is dummy */
- {0x0600,0x0600,0x0600}, {0x0601,0x0601,0x0601}, /* 0600 */
- {0x0602,0x0602,0x0602}, {0x0603,0x0603,0x0603}, /* 0602 */
- {0x0604,0x0604,0x0604}, {0x0605,0x0605,0x0605}, /* 0604 */
- {0x0606,0x0606,0x0606}, {0x0607,0x0607,0x0607}, /* 0606 */
- {0x0608,0x0608,0x0608}, {0x0609,0x0609,0x0609}, /* 0608 */
- {0x060A,0x060A,0x060A}, {0x060B,0x060B,0x060B}, /* 060A */
- {0x060C,0x060C,0x060C}, {0x060D,0x060D,0x060D}, /* 060C */
- {0x060E,0x060E,0x060E}, {0x060F,0x060F,0x060F}, /* 060E */
- {0x0610,0x0610,0x0610}, {0x0611,0x0611,0x0611}, /* 0610 */
- {0x0612,0x0612,0x0612}, {0x0613,0x0613,0x0613}, /* 0612 */
- {0x0614,0x0614,0x0614}, {0x0615,0x0615,0x0615}, /* 0614 */
- {0x0616,0x0616,0x0616}, {0x0617,0x0617,0x0617}, /* 0616 */
- {0x0618,0x0618,0x0618}, {0x0619,0x0619,0x0619}, /* 0618 */
- {0x061A,0x061A,0x061A}, {0x061B,0x061B,0x061B}, /* 061A */
- {0x061C,0x061C,0x061C}, {0x061D,0x061D,0x061D}, /* 061C */
- {0x061E,0x061E,0x061E}, {0x061F,0x061F,0x061F}, /* 061E */
- {0x0620,0x0620,0x0620}, {0x0621,0x0621,0x0621}, /* 0620 */
- {0x0622,0x0622,0x0622}, {0x0623,0x0623,0x0623}, /* 0622 */
- {0x0624,0x0624,0x0624}, {0x0625,0x0625,0x0625}, /* 0624 */
- {0x0626,0x0626,0x0626}, {0x0627,0x0627,0x0627}, /* 0626 */
- {0x0628,0x0628,0x0628}, {0x0629,0x0629,0x0629}, /* 0628 */
- {0x062A,0x062A,0x062A}, {0x062B,0x062B,0x062B}, /* 062A */
- {0x062C,0x062C,0x062C}, {0x062D,0x062D,0x062D}, /* 062C */
- {0x062E,0x062E,0x062E}, {0x062F,0x062F,0x062F}, /* 062E */
- {0x0630,0x0630,0x0630}, {0x0631,0x0631,0x0631}, /* 0630 */
- {0x0632,0x0632,0x0632}, {0x0633,0x0633,0x0633}, /* 0632 */
- {0x0634,0x0634,0x0634}, {0x0635,0x0635,0x0635}, /* 0634 */
- {0x0636,0x0636,0x0636}, {0x0637,0x0637,0x0637}, /* 0636 */
- {0x0638,0x0638,0x0638}, {0x0639,0x0639,0x0639}, /* 0638 */
- {0x063A,0x063A,0x063A}, {0x063B,0x063B,0x063B}, /* 063A */
- {0x063C,0x063C,0x063C}, {0x063D,0x063D,0x063D}, /* 063C */
- {0x063E,0x063E,0x063E}, {0x063F,0x063F,0x063F}, /* 063E */
- {0x0640,0x0640,0x0640}, {0x0641,0x0641,0x0641}, /* 0640 */
- {0x0642,0x0642,0x0642}, {0x0643,0x0643,0x0643}, /* 0642 */
- {0x0644,0x0644,0x0644}, {0x0645,0x0645,0x0645}, /* 0644 */
- {0x0646,0x0646,0x0646}, {0x0647,0x0647,0x0647}, /* 0646 */
- {0x0648,0x0648,0x0648}, {0x0649,0x0649,0x0649}, /* 0648 */
- {0x064A,0x064A,0x064A}, {0x064B,0x064B,0x064B}, /* 064A */
- {0x064C,0x064C,0x064C}, {0x064D,0x064D,0x064D}, /* 064C */
- {0x064E,0x064E,0x064E}, {0x064F,0x064F,0x064F}, /* 064E */
- {0x0650,0x0650,0x0650}, {0x0651,0x0651,0x0651}, /* 0650 */
- {0x0652,0x0652,0x0652}, {0x0653,0x0653,0x0653}, /* 0652 */
- {0x0654,0x0654,0x0654}, {0x0655,0x0655,0x0655}, /* 0654 */
- {0x0656,0x0656,0x0656}, {0x0657,0x0657,0x0657}, /* 0656 */
- {0x0658,0x0658,0x0658}, {0x0659,0x0659,0x0659}, /* 0658 */
- {0x065A,0x065A,0x065A}, {0x065B,0x065B,0x065B}, /* 065A */
- {0x065C,0x065C,0x065C}, {0x065D,0x065D,0x065D}, /* 065C */
- {0x065E,0x065E,0x065E}, {0x065F,0x065F,0x065F}, /* 065E */
- {0x0660,0x0660,0x0660}, {0x0661,0x0661,0x0661}, /* 0660 */
- {0x0662,0x0662,0x0662}, {0x0663,0x0663,0x0663}, /* 0662 */
- {0x0664,0x0664,0x0664}, {0x0665,0x0665,0x0665}, /* 0664 */
- {0x0666,0x0666,0x0666}, {0x0667,0x0667,0x0667}, /* 0666 */
- {0x0668,0x0668,0x0668}, {0x0669,0x0669,0x0669}, /* 0668 */
- {0x066A,0x066A,0x066A}, {0x066B,0x066B,0x066B}, /* 066A */
- {0x066C,0x066C,0x066C}, {0x066D,0x066D,0x066D}, /* 066C */
- {0x066E,0x066E,0x066E}, {0x066F,0x066F,0x066F}, /* 066E */
- {0x0670,0x0670,0x0670}, {0x0671,0x0671,0x0671}, /* 0670 */
- {0x0672,0x0672,0x0672}, {0x0673,0x0673,0x0673}, /* 0672 */
- {0x0674,0x0674,0x0674}, {0x0675,0x0675,0x0675}, /* 0674 */
- {0x0676,0x0676,0x0676}, {0x0677,0x0677,0x0677}, /* 0676 */
- {0x0678,0x0678,0x0678}, {0x0679,0x0679,0x0679}, /* 0678 */
- {0x067A,0x067A,0x067A}, {0x067B,0x067B,0x067B}, /* 067A */
- {0x067C,0x067C,0x067C}, {0x067D,0x067D,0x067D}, /* 067C */
- {0x067E,0x067E,0x067E}, {0x067F,0x067F,0x067F}, /* 067E */
- {0x0680,0x0680,0x0680}, {0x0681,0x0681,0x0681}, /* 0680 */
- {0x0682,0x0682,0x0682}, {0x0683,0x0683,0x0683}, /* 0682 */
- {0x0684,0x0684,0x0684}, {0x0685,0x0685,0x0685}, /* 0684 */
- {0x0686,0x0686,0x0686}, {0x0687,0x0687,0x0687}, /* 0686 */
- {0x0688,0x0688,0x0688}, {0x0689,0x0689,0x0689}, /* 0688 */
- {0x068A,0x068A,0x068A}, {0x068B,0x068B,0x068B}, /* 068A */
- {0x068C,0x068C,0x068C}, {0x068D,0x068D,0x068D}, /* 068C */
- {0x068E,0x068E,0x068E}, {0x068F,0x068F,0x068F}, /* 068E */
- {0x0690,0x0690,0x0690}, {0x0691,0x0691,0x0691}, /* 0690 */
- {0x0692,0x0692,0x0692}, {0x0693,0x0693,0x0693}, /* 0692 */
- {0x0694,0x0694,0x0694}, {0x0695,0x0695,0x0695}, /* 0694 */
- {0x0696,0x0696,0x0696}, {0x0697,0x0697,0x0697}, /* 0696 */
- {0x0698,0x0698,0x0698}, {0x0699,0x0699,0x0699}, /* 0698 */
- {0x069A,0x069A,0x069A}, {0x069B,0x069B,0x069B}, /* 069A */
- {0x069C,0x069C,0x069C}, {0x069D,0x069D,0x069D}, /* 069C */
- {0x069E,0x069E,0x069E}, {0x069F,0x069F,0x069F}, /* 069E */
- {0x06A0,0x06A0,0x06A0}, {0x06A1,0x06A1,0x06A1}, /* 06A0 */
- {0x06A2,0x06A2,0x06A2}, {0x06A3,0x06A3,0x06A3}, /* 06A2 */
- {0x06A4,0x06A4,0x06A4}, {0x06A5,0x06A5,0x06A5}, /* 06A4 */
- {0x06A6,0x06A6,0x06A6}, {0x06A7,0x06A7,0x06A7}, /* 06A6 */
- {0x06A8,0x06A8,0x06A8}, {0x06A9,0x06A9,0x06A9}, /* 06A8 */
- {0x06AA,0x06AA,0x06AA}, {0x06AB,0x06AB,0x06AB}, /* 06AA */
- {0x06AC,0x06AC,0x06AC}, {0x06AD,0x06AD,0x06AD}, /* 06AC */
- {0x06AE,0x06AE,0x06AE}, {0x06AF,0x06AF,0x06AF}, /* 06AE */
- {0x06B0,0x06B0,0x06B0}, {0x06B1,0x06B1,0x06B1}, /* 06B0 */
- {0x06B2,0x06B2,0x06B2}, {0x06B3,0x06B3,0x06B3}, /* 06B2 */
- {0x06B4,0x06B4,0x06B4}, {0x06B5,0x06B5,0x06B5}, /* 06B4 */
- {0x06B6,0x06B6,0x06B6}, {0x06B7,0x06B7,0x06B7}, /* 06B6 */
- {0x06B8,0x06B8,0x06B8}, {0x06B9,0x06B9,0x06B9}, /* 06B8 */
- {0x06BA,0x06BA,0x06BA}, {0x06BB,0x06BB,0x06BB}, /* 06BA */
- {0x06BC,0x06BC,0x06BC}, {0x06BD,0x06BD,0x06BD}, /* 06BC */
- {0x06BE,0x06BE,0x06BE}, {0x06BF,0x06BF,0x06BF}, /* 06BE */
- {0x06C0,0x06C0,0x06C0}, {0x06C1,0x06C1,0x06C1}, /* 06C0 */
- {0x06C2,0x06C2,0x06C2}, {0x06C3,0x06C3,0x06C3}, /* 06C2 */
- {0x06C4,0x06C4,0x06C4}, {0x06C5,0x06C5,0x06C5}, /* 06C4 */
- {0x06C6,0x06C6,0x06C6}, {0x06C7,0x06C7,0x06C7}, /* 06C6 */
- {0x06C8,0x06C8,0x06C8}, {0x06C9,0x06C9,0x06C9}, /* 06C8 */
- {0x06CA,0x06CA,0x06CA}, {0x06CB,0x06CB,0x06CB}, /* 06CA */
- {0x06CC,0x06CC,0x06CC}, {0x06CD,0x06CD,0x06CD}, /* 06CC */
- {0x06CE,0x06CE,0x06CE}, {0x06CF,0x06CF,0x06CF}, /* 06CE */
- {0x06D0,0x06D0,0x06D0}, {0x06D1,0x06D1,0x06D1}, /* 06D0 */
- {0x06D2,0x06D2,0x06D2}, {0x06D3,0x06D3,0x06D3}, /* 06D2 */
- {0x06D4,0x06D4,0x06D4}, {0x06D5,0x06D5,0x06D5}, /* 06D4 */
- {0x06D6,0x06D6,0x06D6}, {0x06D7,0x06D7,0x06D7}, /* 06D6 */
- {0x06D8,0x06D8,0x06D8}, {0x06D9,0x06D9,0x06D9}, /* 06D8 */
- {0x06DA,0x06DA,0x06DA}, {0x06DB,0x06DB,0x06DB}, /* 06DA */
- {0x06DC,0x06DC,0x06DC}, {0x06DD,0x06DD,0x06DD}, /* 06DC */
- {0x06DE,0x06DE,0x06DE}, {0x06DF,0x06DF,0x06DF}, /* 06DE */
- {0x06E0,0x06E0,0x06E0}, {0x06E1,0x06E1,0x06E1}, /* 06E0 */
- {0x06E2,0x06E2,0x06E2}, {0x06E3,0x06E3,0x06E3}, /* 06E2 */
- {0x06E4,0x06E4,0x06E4}, {0x06E5,0x06E5,0x06E5}, /* 06E4 */
- {0x06E6,0x06E6,0x06E6}, {0x06E7,0x06E7,0x06E7}, /* 06E6 */
- {0x06E8,0x06E8,0x06E8}, {0x06E9,0x06E9,0x06E9}, /* 06E8 */
- {0x06EA,0x06EA,0x06EA}, {0x06EB,0x06EB,0x06EB}, /* 06EA */
- {0x06EC,0x06EC,0x06EC}, {0x06ED,0x06ED,0x06ED}, /* 06EC */
- {0x06EE,0x06EE,0x06EE}, {0x06EF,0x06EF,0x06EF}, /* 06EE */
- {0x06F0,0x06F0,0x06F0}, {0x06F1,0x06F1,0x06F1}, /* 06F0 */
- {0x06F2,0x06F2,0x06F2}, {0x06F3,0x06F3,0x06F3}, /* 06F2 */
- {0x06F4,0x06F4,0x06F4}, {0x06F5,0x06F5,0x06F5}, /* 06F4 */
- {0x06F6,0x06F6,0x06F6}, {0x06F7,0x06F7,0x06F7}, /* 06F6 */
- {0x06F8,0x06F8,0x06F8}, {0x06F9,0x06F9,0x06F9}, /* 06F8 */
- {0x06FA,0x06FA,0x06FA}, {0x06FB,0x06FB,0x06FB}, /* 06FA */
- {0x06FC,0x06FC,0x06FC}, {0x06FD,0x06FD,0x06FD}, /* 06FC */
- {0x06FE,0x06FE,0x06FE}, {0x06FF,0x06FF,0x06FF} /* 06FE */
-};
-
-static MY_UNICASE_CHARACTER plane07[]={ /* This page is dummy */
- {0x0700,0x0700,0x0700}, {0x0701,0x0701,0x0701}, /* 0700 */
- {0x0702,0x0702,0x0702}, {0x0703,0x0703,0x0703}, /* 0702 */
- {0x0704,0x0704,0x0704}, {0x0705,0x0705,0x0705}, /* 0704 */
- {0x0706,0x0706,0x0706}, {0x0707,0x0707,0x0707}, /* 0706 */
- {0x0708,0x0708,0x0708}, {0x0709,0x0709,0x0709}, /* 0708 */
- {0x070A,0x070A,0x070A}, {0x070B,0x070B,0x070B}, /* 070A */
- {0x070C,0x070C,0x070C}, {0x070D,0x070D,0x070D}, /* 070C */
- {0x070E,0x070E,0x070E}, {0x070F,0x070F,0x070F}, /* 070E */
- {0x0710,0x0710,0x0710}, {0x0711,0x0711,0x0711}, /* 0710 */
- {0x0712,0x0712,0x0712}, {0x0713,0x0713,0x0713}, /* 0712 */
- {0x0714,0x0714,0x0714}, {0x0715,0x0715,0x0715}, /* 0714 */
- {0x0716,0x0716,0x0716}, {0x0717,0x0717,0x0717}, /* 0716 */
- {0x0718,0x0718,0x0718}, {0x0719,0x0719,0x0719}, /* 0718 */
- {0x071A,0x071A,0x071A}, {0x071B,0x071B,0x071B}, /* 071A */
- {0x071C,0x071C,0x071C}, {0x071D,0x071D,0x071D}, /* 071C */
- {0x071E,0x071E,0x071E}, {0x071F,0x071F,0x071F}, /* 071E */
- {0x0720,0x0720,0x0720}, {0x0721,0x0721,0x0721}, /* 0720 */
- {0x0722,0x0722,0x0722}, {0x0723,0x0723,0x0723}, /* 0722 */
- {0x0724,0x0724,0x0724}, {0x0725,0x0725,0x0725}, /* 0724 */
- {0x0726,0x0726,0x0726}, {0x0727,0x0727,0x0727}, /* 0726 */
- {0x0728,0x0728,0x0728}, {0x0729,0x0729,0x0729}, /* 0728 */
- {0x072A,0x072A,0x072A}, {0x072B,0x072B,0x072B}, /* 072A */
- {0x072C,0x072C,0x072C}, {0x072D,0x072D,0x072D}, /* 072C */
- {0x072E,0x072E,0x072E}, {0x072F,0x072F,0x072F}, /* 072E */
- {0x0730,0x0730,0x0730}, {0x0731,0x0731,0x0731}, /* 0730 */
- {0x0732,0x0732,0x0732}, {0x0733,0x0733,0x0733}, /* 0732 */
- {0x0734,0x0734,0x0734}, {0x0735,0x0735,0x0735}, /* 0734 */
- {0x0736,0x0736,0x0736}, {0x0737,0x0737,0x0737}, /* 0736 */
- {0x0738,0x0738,0x0738}, {0x0739,0x0739,0x0739}, /* 0738 */
- {0x073A,0x073A,0x073A}, {0x073B,0x073B,0x073B}, /* 073A */
- {0x073C,0x073C,0x073C}, {0x073D,0x073D,0x073D}, /* 073C */
- {0x073E,0x073E,0x073E}, {0x073F,0x073F,0x073F}, /* 073E */
- {0x0740,0x0740,0x0740}, {0x0741,0x0741,0x0741}, /* 0740 */
- {0x0742,0x0742,0x0742}, {0x0743,0x0743,0x0743}, /* 0742 */
- {0x0744,0x0744,0x0744}, {0x0745,0x0745,0x0745}, /* 0744 */
- {0x0746,0x0746,0x0746}, {0x0747,0x0747,0x0747}, /* 0746 */
- {0x0748,0x0748,0x0748}, {0x0749,0x0749,0x0749}, /* 0748 */
- {0x074A,0x074A,0x074A}, {0x074B,0x074B,0x074B}, /* 074A */
- {0x074C,0x074C,0x074C}, {0x074D,0x074D,0x074D}, /* 074C */
- {0x074E,0x074E,0x074E}, {0x074F,0x074F,0x074F}, /* 074E */
- {0x0750,0x0750,0x0750}, {0x0751,0x0751,0x0751}, /* 0750 */
- {0x0752,0x0752,0x0752}, {0x0753,0x0753,0x0753}, /* 0752 */
- {0x0754,0x0754,0x0754}, {0x0755,0x0755,0x0755}, /* 0754 */
- {0x0756,0x0756,0x0756}, {0x0757,0x0757,0x0757}, /* 0756 */
- {0x0758,0x0758,0x0758}, {0x0759,0x0759,0x0759}, /* 0758 */
- {0x075A,0x075A,0x075A}, {0x075B,0x075B,0x075B}, /* 075A */
- {0x075C,0x075C,0x075C}, {0x075D,0x075D,0x075D}, /* 075C */
- {0x075E,0x075E,0x075E}, {0x075F,0x075F,0x075F}, /* 075E */
- {0x0760,0x0760,0x0760}, {0x0761,0x0761,0x0761}, /* 0760 */
- {0x0762,0x0762,0x0762}, {0x0763,0x0763,0x0763}, /* 0762 */
- {0x0764,0x0764,0x0764}, {0x0765,0x0765,0x0765}, /* 0764 */
- {0x0766,0x0766,0x0766}, {0x0767,0x0767,0x0767}, /* 0766 */
- {0x0768,0x0768,0x0768}, {0x0769,0x0769,0x0769}, /* 0768 */
- {0x076A,0x076A,0x076A}, {0x076B,0x076B,0x076B}, /* 076A */
- {0x076C,0x076C,0x076C}, {0x076D,0x076D,0x076D}, /* 076C */
- {0x076E,0x076E,0x076E}, {0x076F,0x076F,0x076F}, /* 076E */
- {0x0770,0x0770,0x0770}, {0x0771,0x0771,0x0771}, /* 0770 */
- {0x0772,0x0772,0x0772}, {0x0773,0x0773,0x0773}, /* 0772 */
- {0x0774,0x0774,0x0774}, {0x0775,0x0775,0x0775}, /* 0774 */
- {0x0776,0x0776,0x0776}, {0x0777,0x0777,0x0777}, /* 0776 */
- {0x0778,0x0778,0x0778}, {0x0779,0x0779,0x0779}, /* 0778 */
- {0x077A,0x077A,0x077A}, {0x077B,0x077B,0x077B}, /* 077A */
- {0x077C,0x077C,0x077C}, {0x077D,0x077D,0x077D}, /* 077C */
- {0x077E,0x077E,0x077E}, {0x077F,0x077F,0x077F}, /* 077E */
- {0x0780,0x0780,0x0780}, {0x0781,0x0781,0x0781}, /* 0780 */
- {0x0782,0x0782,0x0782}, {0x0783,0x0783,0x0783}, /* 0782 */
- {0x0784,0x0784,0x0784}, {0x0785,0x0785,0x0785}, /* 0784 */
- {0x0786,0x0786,0x0786}, {0x0787,0x0787,0x0787}, /* 0786 */
- {0x0788,0x0788,0x0788}, {0x0789,0x0789,0x0789}, /* 0788 */
- {0x078A,0x078A,0x078A}, {0x078B,0x078B,0x078B}, /* 078A */
- {0x078C,0x078C,0x078C}, {0x078D,0x078D,0x078D}, /* 078C */
- {0x078E,0x078E,0x078E}, {0x078F,0x078F,0x078F}, /* 078E */
- {0x0790,0x0790,0x0790}, {0x0791,0x0791,0x0791}, /* 0790 */
- {0x0792,0x0792,0x0792}, {0x0793,0x0793,0x0793}, /* 0792 */
- {0x0794,0x0794,0x0794}, {0x0795,0x0795,0x0795}, /* 0794 */
- {0x0796,0x0796,0x0796}, {0x0797,0x0797,0x0797}, /* 0796 */
- {0x0798,0x0798,0x0798}, {0x0799,0x0799,0x0799}, /* 0798 */
- {0x079A,0x079A,0x079A}, {0x079B,0x079B,0x079B}, /* 079A */
- {0x079C,0x079C,0x079C}, {0x079D,0x079D,0x079D}, /* 079C */
- {0x079E,0x079E,0x079E}, {0x079F,0x079F,0x079F}, /* 079E */
- {0x07A0,0x07A0,0x07A0}, {0x07A1,0x07A1,0x07A1}, /* 07A0 */
- {0x07A2,0x07A2,0x07A2}, {0x07A3,0x07A3,0x07A3}, /* 07A2 */
- {0x07A4,0x07A4,0x07A4}, {0x07A5,0x07A5,0x07A5}, /* 07A4 */
- {0x07A6,0x07A6,0x07A6}, {0x07A7,0x07A7,0x07A7}, /* 07A6 */
- {0x07A8,0x07A8,0x07A8}, {0x07A9,0x07A9,0x07A9}, /* 07A8 */
- {0x07AA,0x07AA,0x07AA}, {0x07AB,0x07AB,0x07AB}, /* 07AA */
- {0x07AC,0x07AC,0x07AC}, {0x07AD,0x07AD,0x07AD}, /* 07AC */
- {0x07AE,0x07AE,0x07AE}, {0x07AF,0x07AF,0x07AF}, /* 07AE */
- {0x07B0,0x07B0,0x07B0}, {0x07B1,0x07B1,0x07B1}, /* 07B0 */
- {0x07B2,0x07B2,0x07B2}, {0x07B3,0x07B3,0x07B3}, /* 07B2 */
- {0x07B4,0x07B4,0x07B4}, {0x07B5,0x07B5,0x07B5}, /* 07B4 */
- {0x07B6,0x07B6,0x07B6}, {0x07B7,0x07B7,0x07B7}, /* 07B6 */
- {0x07B8,0x07B8,0x07B8}, {0x07B9,0x07B9,0x07B9}, /* 07B8 */
- {0x07BA,0x07BA,0x07BA}, {0x07BB,0x07BB,0x07BB}, /* 07BA */
- {0x07BC,0x07BC,0x07BC}, {0x07BD,0x07BD,0x07BD}, /* 07BC */
- {0x07BE,0x07BE,0x07BE}, {0x07BF,0x07BF,0x07BF}, /* 07BE */
- {0x07C0,0x07C0,0x07C0}, {0x07C1,0x07C1,0x07C1}, /* 07C0 */
- {0x07C2,0x07C2,0x07C2}, {0x07C3,0x07C3,0x07C3}, /* 07C2 */
- {0x07C4,0x07C4,0x07C4}, {0x07C5,0x07C5,0x07C5}, /* 07C4 */
- {0x07C6,0x07C6,0x07C6}, {0x07C7,0x07C7,0x07C7}, /* 07C6 */
- {0x07C8,0x07C8,0x07C8}, {0x07C9,0x07C9,0x07C9}, /* 07C8 */
- {0x07CA,0x07CA,0x07CA}, {0x07CB,0x07CB,0x07CB}, /* 07CA */
- {0x07CC,0x07CC,0x07CC}, {0x07CD,0x07CD,0x07CD}, /* 07CC */
- {0x07CE,0x07CE,0x07CE}, {0x07CF,0x07CF,0x07CF}, /* 07CE */
- {0x07D0,0x07D0,0x07D0}, {0x07D1,0x07D1,0x07D1}, /* 07D0 */
- {0x07D2,0x07D2,0x07D2}, {0x07D3,0x07D3,0x07D3}, /* 07D2 */
- {0x07D4,0x07D4,0x07D4}, {0x07D5,0x07D5,0x07D5}, /* 07D4 */
- {0x07D6,0x07D6,0x07D6}, {0x07D7,0x07D7,0x07D7}, /* 07D6 */
- {0x07D8,0x07D8,0x07D8}, {0x07D9,0x07D9,0x07D9}, /* 07D8 */
- {0x07DA,0x07DA,0x07DA}, {0x07DB,0x07DB,0x07DB}, /* 07DA */
- {0x07DC,0x07DC,0x07DC}, {0x07DD,0x07DD,0x07DD}, /* 07DC */
- {0x07DE,0x07DE,0x07DE}, {0x07DF,0x07DF,0x07DF}, /* 07DE */
- {0x07E0,0x07E0,0x07E0}, {0x07E1,0x07E1,0x07E1}, /* 07E0 */
- {0x07E2,0x07E2,0x07E2}, {0x07E3,0x07E3,0x07E3}, /* 07E2 */
- {0x07E4,0x07E4,0x07E4}, {0x07E5,0x07E5,0x07E5}, /* 07E4 */
- {0x07E6,0x07E6,0x07E6}, {0x07E7,0x07E7,0x07E7}, /* 07E6 */
- {0x07E8,0x07E8,0x07E8}, {0x07E9,0x07E9,0x07E9}, /* 07E8 */
- {0x07EA,0x07EA,0x07EA}, {0x07EB,0x07EB,0x07EB}, /* 07EA */
- {0x07EC,0x07EC,0x07EC}, {0x07ED,0x07ED,0x07ED}, /* 07EC */
- {0x07EE,0x07EE,0x07EE}, {0x07EF,0x07EF,0x07EF}, /* 07EE */
- {0x07F0,0x07F0,0x07F0}, {0x07F1,0x07F1,0x07F1}, /* 07F0 */
- {0x07F2,0x07F2,0x07F2}, {0x07F3,0x07F3,0x07F3}, /* 07F2 */
- {0x07F4,0x07F4,0x07F4}, {0x07F5,0x07F5,0x07F5}, /* 07F4 */
- {0x07F6,0x07F6,0x07F6}, {0x07F7,0x07F7,0x07F7}, /* 07F6 */
- {0x07F8,0x07F8,0x07F8}, {0x07F9,0x07F9,0x07F9}, /* 07F8 */
- {0x07FA,0x07FA,0x07FA}, {0x07FB,0x07FB,0x07FB}, /* 07FA */
- {0x07FC,0x07FC,0x07FC}, {0x07FD,0x07FD,0x07FD}, /* 07FC */
- {0x07FE,0x07FE,0x07FE}, {0x07FF,0x07FF,0x07FF} /* 07FE */
-};
-
-static MY_UNICASE_CHARACTER plane1E[]={
- {0x1E00,0x1E01,0x0041}, {0x1E00,0x1E01,0x0041},
- {0x1E02,0x1E03,0x0042}, {0x1E02,0x1E03,0x0042},
- {0x1E04,0x1E05,0x0042}, {0x1E04,0x1E05,0x0042},
- {0x1E06,0x1E07,0x0042}, {0x1E06,0x1E07,0x0042},
- {0x1E08,0x1E09,0x0043}, {0x1E08,0x1E09,0x0043},
- {0x1E0A,0x1E0B,0x0044}, {0x1E0A,0x1E0B,0x0044},
- {0x1E0C,0x1E0D,0x0044}, {0x1E0C,0x1E0D,0x0044},
- {0x1E0E,0x1E0F,0x0044}, {0x1E0E,0x1E0F,0x0044},
- {0x1E10,0x1E11,0x0044}, {0x1E10,0x1E11,0x0044},
- {0x1E12,0x1E13,0x0044}, {0x1E12,0x1E13,0x0044},
- {0x1E14,0x1E15,0x0045}, {0x1E14,0x1E15,0x0045},
- {0x1E16,0x1E17,0x0045}, {0x1E16,0x1E17,0x0045},
- {0x1E18,0x1E19,0x0045}, {0x1E18,0x1E19,0x0045},
- {0x1E1A,0x1E1B,0x0045}, {0x1E1A,0x1E1B,0x0045},
- {0x1E1C,0x1E1D,0x0045}, {0x1E1C,0x1E1D,0x0045},
- {0x1E1E,0x1E1F,0x0046}, {0x1E1E,0x1E1F,0x0046},
- {0x1E20,0x1E21,0x0047}, {0x1E20,0x1E21,0x0047},
- {0x1E22,0x1E23,0x0048}, {0x1E22,0x1E23,0x0048},
- {0x1E24,0x1E25,0x0048}, {0x1E24,0x1E25,0x0048},
- {0x1E26,0x1E27,0x0048}, {0x1E26,0x1E27,0x0048},
- {0x1E28,0x1E29,0x0048}, {0x1E28,0x1E29,0x0048},
- {0x1E2A,0x1E2B,0x0048}, {0x1E2A,0x1E2B,0x0048},
- {0x1E2C,0x1E2D,0x0049}, {0x1E2C,0x1E2D,0x0049},
- {0x1E2E,0x1E2F,0x0049}, {0x1E2E,0x1E2F,0x0049},
- {0x1E30,0x1E31,0x004B}, {0x1E30,0x1E31,0x004B},
- {0x1E32,0x1E33,0x004B}, {0x1E32,0x1E33,0x004B},
- {0x1E34,0x1E35,0x004B}, {0x1E34,0x1E35,0x004B},
- {0x1E36,0x1E37,0x004C}, {0x1E36,0x1E37,0x004C},
- {0x1E38,0x1E39,0x004C}, {0x1E38,0x1E39,0x004C},
- {0x1E3A,0x1E3B,0x004C}, {0x1E3A,0x1E3B,0x004C},
- {0x1E3C,0x1E3D,0x004C}, {0x1E3C,0x1E3D,0x004C},
- {0x1E3E,0x1E3F,0x004D}, {0x1E3E,0x1E3F,0x004D},
- {0x1E40,0x1E41,0x004D}, {0x1E40,0x1E41,0x004D},
- {0x1E42,0x1E43,0x004D}, {0x1E42,0x1E43,0x004D},
- {0x1E44,0x1E45,0x004E}, {0x1E44,0x1E45,0x004E},
- {0x1E46,0x1E47,0x004E}, {0x1E46,0x1E47,0x004E},
- {0x1E48,0x1E49,0x004E}, {0x1E48,0x1E49,0x004E},
- {0x1E4A,0x1E4B,0x004E}, {0x1E4A,0x1E4B,0x004E},
- {0x1E4C,0x1E4D,0x004F}, {0x1E4C,0x1E4D,0x004F},
- {0x1E4E,0x1E4F,0x004F}, {0x1E4E,0x1E4F,0x004F},
- {0x1E50,0x1E51,0x004F}, {0x1E50,0x1E51,0x004F},
- {0x1E52,0x1E53,0x004F}, {0x1E52,0x1E53,0x004F},
- {0x1E54,0x1E55,0x0050}, {0x1E54,0x1E55,0x0050},
- {0x1E56,0x1E57,0x0050}, {0x1E56,0x1E57,0x0050},
- {0x1E58,0x1E59,0x0052}, {0x1E58,0x1E59,0x0052},
- {0x1E5A,0x1E5B,0x0052}, {0x1E5A,0x1E5B,0x0052},
- {0x1E5C,0x1E5D,0x0052}, {0x1E5C,0x1E5D,0x0052},
- {0x1E5E,0x1E5F,0x0052}, {0x1E5E,0x1E5F,0x0052},
- {0x1E60,0x1E61,0x0053}, {0x1E60,0x1E61,0x0053},
- {0x1E62,0x1E63,0x0053}, {0x1E62,0x1E63,0x0053},
- {0x1E64,0x1E65,0x0053}, {0x1E64,0x1E65,0x0053},
- {0x1E66,0x1E67,0x0053}, {0x1E66,0x1E67,0x0053},
- {0x1E68,0x1E69,0x0053}, {0x1E68,0x1E69,0x0053},
- {0x1E6A,0x1E6B,0x0054}, {0x1E6A,0x1E6B,0x0054},
- {0x1E6C,0x1E6D,0x0054}, {0x1E6C,0x1E6D,0x0054},
- {0x1E6E,0x1E6F,0x0054}, {0x1E6E,0x1E6F,0x0054},
- {0x1E70,0x1E71,0x0054}, {0x1E70,0x1E71,0x0054},
- {0x1E72,0x1E73,0x0055}, {0x1E72,0x1E73,0x0055},
- {0x1E74,0x1E75,0x0055}, {0x1E74,0x1E75,0x0055},
- {0x1E76,0x1E77,0x0055}, {0x1E76,0x1E77,0x0055},
- {0x1E78,0x1E79,0x0055}, {0x1E78,0x1E79,0x0055},
- {0x1E7A,0x1E7B,0x0055}, {0x1E7A,0x1E7B,0x0055},
- {0x1E7C,0x1E7D,0x0056}, {0x1E7C,0x1E7D,0x0056},
- {0x1E7E,0x1E7F,0x0056}, {0x1E7E,0x1E7F,0x0056},
- {0x1E80,0x1E81,0x0057}, {0x1E80,0x1E81,0x0057},
- {0x1E82,0x1E83,0x0057}, {0x1E82,0x1E83,0x0057},
- {0x1E84,0x1E85,0x0057}, {0x1E84,0x1E85,0x0057},
- {0x1E86,0x1E87,0x0057}, {0x1E86,0x1E87,0x0057},
- {0x1E88,0x1E89,0x0057}, {0x1E88,0x1E89,0x0057},
- {0x1E8A,0x1E8B,0x0058}, {0x1E8A,0x1E8B,0x0058},
- {0x1E8C,0x1E8D,0x0058}, {0x1E8C,0x1E8D,0x0058},
- {0x1E8E,0x1E8F,0x0059}, {0x1E8E,0x1E8F,0x0059},
- {0x1E90,0x1E91,0x005A}, {0x1E90,0x1E91,0x005A},
- {0x1E92,0x1E93,0x005A}, {0x1E92,0x1E93,0x005A},
- {0x1E94,0x1E95,0x005A}, {0x1E94,0x1E95,0x005A},
- {0x1E96,0x1E96,0x0048}, {0x1E97,0x1E97,0x0054},
- {0x1E98,0x1E98,0x0057}, {0x1E99,0x1E99,0x0059},
- {0x1E9A,0x1E9A,0x1E9A}, {0x1E60,0x1E9B,0x0053},
- {0x1E9C,0x1E9C,0x1E9C}, {0x1E9D,0x1E9D,0x1E9D},
- {0x1E9E,0x1E9E,0x1E9E}, {0x1E9F,0x1E9F,0x1E9F},
- {0x1EA0,0x1EA1,0x0041}, {0x1EA0,0x1EA1,0x0041},
- {0x1EA2,0x1EA3,0x0041}, {0x1EA2,0x1EA3,0x0041},
- {0x1EA4,0x1EA5,0x0041}, {0x1EA4,0x1EA5,0x0041},
- {0x1EA6,0x1EA7,0x0041}, {0x1EA6,0x1EA7,0x0041},
- {0x1EA8,0x1EA9,0x0041}, {0x1EA8,0x1EA9,0x0041},
- {0x1EAA,0x1EAB,0x0041}, {0x1EAA,0x1EAB,0x0041},
- {0x1EAC,0x1EAD,0x0041}, {0x1EAC,0x1EAD,0x0041},
- {0x1EAE,0x1EAF,0x0041}, {0x1EAE,0x1EAF,0x0041},
- {0x1EB0,0x1EB1,0x0041}, {0x1EB0,0x1EB1,0x0041},
- {0x1EB2,0x1EB3,0x0041}, {0x1EB2,0x1EB3,0x0041},
- {0x1EB4,0x1EB5,0x0041}, {0x1EB4,0x1EB5,0x0041},
- {0x1EB6,0x1EB7,0x0041}, {0x1EB6,0x1EB7,0x0041},
- {0x1EB8,0x1EB9,0x0045}, {0x1EB8,0x1EB9,0x0045},
- {0x1EBA,0x1EBB,0x0045}, {0x1EBA,0x1EBB,0x0045},
- {0x1EBC,0x1EBD,0x0045}, {0x1EBC,0x1EBD,0x0045},
- {0x1EBE,0x1EBF,0x0045}, {0x1EBE,0x1EBF,0x0045},
- {0x1EC0,0x1EC1,0x0045}, {0x1EC0,0x1EC1,0x0045},
- {0x1EC2,0x1EC3,0x0045}, {0x1EC2,0x1EC3,0x0045},
- {0x1EC4,0x1EC5,0x0045}, {0x1EC4,0x1EC5,0x0045},
- {0x1EC6,0x1EC7,0x0045}, {0x1EC6,0x1EC7,0x0045},
- {0x1EC8,0x1EC9,0x0049}, {0x1EC8,0x1EC9,0x0049},
- {0x1ECA,0x1ECB,0x0049}, {0x1ECA,0x1ECB,0x0049},
- {0x1ECC,0x1ECD,0x004F}, {0x1ECC,0x1ECD,0x004F},
- {0x1ECE,0x1ECF,0x004F}, {0x1ECE,0x1ECF,0x004F},
- {0x1ED0,0x1ED1,0x004F}, {0x1ED0,0x1ED1,0x004F},
- {0x1ED2,0x1ED3,0x004F}, {0x1ED2,0x1ED3,0x004F},
- {0x1ED4,0x1ED5,0x004F}, {0x1ED4,0x1ED5,0x004F},
- {0x1ED6,0x1ED7,0x004F}, {0x1ED6,0x1ED7,0x004F},
- {0x1ED8,0x1ED9,0x004F}, {0x1ED8,0x1ED9,0x004F},
- {0x1EDA,0x1EDB,0x004F}, {0x1EDA,0x1EDB,0x004F},
- {0x1EDC,0x1EDD,0x004F}, {0x1EDC,0x1EDD,0x004F},
- {0x1EDE,0x1EDF,0x004F}, {0x1EDE,0x1EDF,0x004F},
- {0x1EE0,0x1EE1,0x004F}, {0x1EE0,0x1EE1,0x004F},
- {0x1EE2,0x1EE3,0x004F}, {0x1EE2,0x1EE3,0x004F},
- {0x1EE4,0x1EE5,0x0055}, {0x1EE4,0x1EE5,0x0055},
- {0x1EE6,0x1EE7,0x0055}, {0x1EE6,0x1EE7,0x0055},
- {0x1EE8,0x1EE9,0x0055}, {0x1EE8,0x1EE9,0x0055},
- {0x1EEA,0x1EEB,0x0055}, {0x1EEA,0x1EEB,0x0055},
- {0x1EEC,0x1EED,0x0055}, {0x1EEC,0x1EED,0x0055},
- {0x1EEE,0x1EEF,0x0055}, {0x1EEE,0x1EEF,0x0055},
- {0x1EF0,0x1EF1,0x0055}, {0x1EF0,0x1EF1,0x0055},
- {0x1EF2,0x1EF3,0x0059}, {0x1EF2,0x1EF3,0x0059},
- {0x1EF4,0x1EF5,0x0059}, {0x1EF4,0x1EF5,0x0059},
- {0x1EF6,0x1EF7,0x0059}, {0x1EF6,0x1EF7,0x0059},
- {0x1EF8,0x1EF9,0x0059}, {0x1EF8,0x1EF9,0x0059},
- {0x1EFA,0x1EFA,0x1EFA}, {0x1EFB,0x1EFB,0x1EFB},
- {0x1EFC,0x1EFC,0x1EFC}, {0x1EFD,0x1EFD,0x1EFD},
- {0x1EFE,0x1EFE,0x1EFE}, {0x1EFF,0x1EFF,0x1EFF}
-};
-
-static MY_UNICASE_CHARACTER plane1F[]={
- {0x1F08,0x1F00,0x0391}, {0x1F09,0x1F01,0x0391},
- {0x1F0A,0x1F02,0x0391}, {0x1F0B,0x1F03,0x0391},
- {0x1F0C,0x1F04,0x0391}, {0x1F0D,0x1F05,0x0391},
- {0x1F0E,0x1F06,0x0391}, {0x1F0F,0x1F07,0x0391},
- {0x1F08,0x1F00,0x0391}, {0x1F09,0x1F01,0x0391},
- {0x1F0A,0x1F02,0x0391}, {0x1F0B,0x1F03,0x0391},
- {0x1F0C,0x1F04,0x0391}, {0x1F0D,0x1F05,0x0391},
- {0x1F0E,0x1F06,0x0391}, {0x1F0F,0x1F07,0x0391},
- {0x1F18,0x1F10,0x0395}, {0x1F19,0x1F11,0x0395},
- {0x1F1A,0x1F12,0x0395}, {0x1F1B,0x1F13,0x0395},
- {0x1F1C,0x1F14,0x0395}, {0x1F1D,0x1F15,0x0395},
- {0x1F16,0x1F16,0x1F16}, {0x1F17,0x1F17,0x1F17},
- {0x1F18,0x1F10,0x0395}, {0x1F19,0x1F11,0x0395},
- {0x1F1A,0x1F12,0x0395}, {0x1F1B,0x1F13,0x0395},
- {0x1F1C,0x1F14,0x0395}, {0x1F1D,0x1F15,0x0395},
- {0x1F1E,0x1F1E,0x1F1E}, {0x1F1F,0x1F1F,0x1F1F},
- {0x1F28,0x1F20,0x0397}, {0x1F29,0x1F21,0x0397},
- {0x1F2A,0x1F22,0x0397}, {0x1F2B,0x1F23,0x0397},
- {0x1F2C,0x1F24,0x0397}, {0x1F2D,0x1F25,0x0397},
- {0x1F2E,0x1F26,0x0397}, {0x1F2F,0x1F27,0x0397},
- {0x1F28,0x1F20,0x0397}, {0x1F29,0x1F21,0x0397},
- {0x1F2A,0x1F22,0x0397}, {0x1F2B,0x1F23,0x0397},
- {0x1F2C,0x1F24,0x0397}, {0x1F2D,0x1F25,0x0397},
- {0x1F2E,0x1F26,0x0397}, {0x1F2F,0x1F27,0x0397},
- {0x1F38,0x1F30,0x0399}, {0x1F39,0x1F31,0x0399},
- {0x1F3A,0x1F32,0x0399}, {0x1F3B,0x1F33,0x0399},
- {0x1F3C,0x1F34,0x0399}, {0x1F3D,0x1F35,0x0399},
- {0x1F3E,0x1F36,0x0399}, {0x1F3F,0x1F37,0x0399},
- {0x1F38,0x1F30,0x0399}, {0x1F39,0x1F31,0x0399},
- {0x1F3A,0x1F32,0x0399}, {0x1F3B,0x1F33,0x0399},
- {0x1F3C,0x1F34,0x0399}, {0x1F3D,0x1F35,0x0399},
- {0x1F3E,0x1F36,0x0399}, {0x1F3F,0x1F37,0x0399},
- {0x1F48,0x1F40,0x039F}, {0x1F49,0x1F41,0x039F},
- {0x1F4A,0x1F42,0x039F}, {0x1F4B,0x1F43,0x039F},
- {0x1F4C,0x1F44,0x039F}, {0x1F4D,0x1F45,0x039F},
- {0x1F46,0x1F46,0x1F46}, {0x1F47,0x1F47,0x1F47},
- {0x1F48,0x1F40,0x039F}, {0x1F49,0x1F41,0x039F},
- {0x1F4A,0x1F42,0x039F}, {0x1F4B,0x1F43,0x039F},
- {0x1F4C,0x1F44,0x039F}, {0x1F4D,0x1F45,0x039F},
- {0x1F4E,0x1F4E,0x1F4E}, {0x1F4F,0x1F4F,0x1F4F},
- {0x1F50,0x1F50,0x03A5}, {0x1F59,0x1F51,0x03A5},
- {0x1F52,0x1F52,0x03A5}, {0x1F5B,0x1F53,0x03A5},
- {0x1F54,0x1F54,0x03A5}, {0x1F5D,0x1F55,0x03A5},
- {0x1F56,0x1F56,0x03A5}, {0x1F5F,0x1F57,0x03A5},
- {0x1F58,0x1F58,0x1F58}, {0x1F59,0x1F51,0x03A5},
- {0x1F5A,0x1F5A,0x1F5A}, {0x1F5B,0x1F53,0x03A5},
- {0x1F5C,0x1F5C,0x1F5C}, {0x1F5D,0x1F55,0x03A5},
- {0x1F5E,0x1F5E,0x1F5E}, {0x1F5F,0x1F57,0x03A5},
- {0x1F68,0x1F60,0x03A9}, {0x1F69,0x1F61,0x03A9},
- {0x1F6A,0x1F62,0x03A9}, {0x1F6B,0x1F63,0x03A9},
- {0x1F6C,0x1F64,0x03A9}, {0x1F6D,0x1F65,0x03A9},
- {0x1F6E,0x1F66,0x03A9}, {0x1F6F,0x1F67,0x03A9},
- {0x1F68,0x1F60,0x03A9}, {0x1F69,0x1F61,0x03A9},
- {0x1F6A,0x1F62,0x03A9}, {0x1F6B,0x1F63,0x03A9},
- {0x1F6C,0x1F64,0x03A9}, {0x1F6D,0x1F65,0x03A9},
- {0x1F6E,0x1F66,0x03A9}, {0x1F6F,0x1F67,0x03A9},
- {0x1FBA,0x1F70,0x0391}, {0x1FBB,0x1F71,0x1FBB},
- {0x1FC8,0x1F72,0x0395}, {0x1FC9,0x1F73,0x1FC9},
- {0x1FCA,0x1F74,0x0397}, {0x1FCB,0x1F75,0x1FCB},
- {0x1FDA,0x1F76,0x0399}, {0x1FDB,0x1F77,0x1FDB},
- {0x1FF8,0x1F78,0x039F}, {0x1FF9,0x1F79,0x1FF9},
- {0x1FEA,0x1F7A,0x03A5}, {0x1FEB,0x1F7B,0x1FEB},
- {0x1FFA,0x1F7C,0x03A9}, {0x1FFB,0x1F7D,0x1FFB},
- {0x1F7E,0x1F7E,0x1F7E}, {0x1F7F,0x1F7F,0x1F7F},
- {0x1F88,0x1F80,0x0391}, {0x1F89,0x1F81,0x0391},
- {0x1F8A,0x1F82,0x0391}, {0x1F8B,0x1F83,0x0391},
- {0x1F8C,0x1F84,0x0391}, {0x1F8D,0x1F85,0x0391},
- {0x1F8E,0x1F86,0x0391}, {0x1F8F,0x1F87,0x0391},
- {0x1F88,0x1F80,0x0391}, {0x1F89,0x1F81,0x0391},
- {0x1F8A,0x1F82,0x0391}, {0x1F8B,0x1F83,0x0391},
- {0x1F8C,0x1F84,0x0391}, {0x1F8D,0x1F85,0x0391},
- {0x1F8E,0x1F86,0x0391}, {0x1F8F,0x1F87,0x0391},
- {0x1F98,0x1F90,0x0397}, {0x1F99,0x1F91,0x0397},
- {0x1F9A,0x1F92,0x0397}, {0x1F9B,0x1F93,0x0397},
- {0x1F9C,0x1F94,0x0397}, {0x1F9D,0x1F95,0x0397},
- {0x1F9E,0x1F96,0x0397}, {0x1F9F,0x1F97,0x0397},
- {0x1F98,0x1F90,0x0397}, {0x1F99,0x1F91,0x0397},
- {0x1F9A,0x1F92,0x0397}, {0x1F9B,0x1F93,0x0397},
- {0x1F9C,0x1F94,0x0397}, {0x1F9D,0x1F95,0x0397},
- {0x1F9E,0x1F96,0x0397}, {0x1F9F,0x1F97,0x0397},
- {0x1FA8,0x1FA0,0x03A9}, {0x1FA9,0x1FA1,0x03A9},
- {0x1FAA,0x1FA2,0x03A9}, {0x1FAB,0x1FA3,0x03A9},
- {0x1FAC,0x1FA4,0x03A9}, {0x1FAD,0x1FA5,0x03A9},
- {0x1FAE,0x1FA6,0x03A9}, {0x1FAF,0x1FA7,0x03A9},
- {0x1FA8,0x1FA0,0x03A9}, {0x1FA9,0x1FA1,0x03A9},
- {0x1FAA,0x1FA2,0x03A9}, {0x1FAB,0x1FA3,0x03A9},
- {0x1FAC,0x1FA4,0x03A9}, {0x1FAD,0x1FA5,0x03A9},
- {0x1FAE,0x1FA6,0x03A9}, {0x1FAF,0x1FA7,0x03A9},
- {0x1FB8,0x1FB0,0x0391}, {0x1FB9,0x1FB1,0x0391},
- {0x1FB2,0x1FB2,0x0391}, {0x1FBC,0x1FB3,0x0391},
- {0x1FB4,0x1FB4,0x0391}, {0x1FB5,0x1FB5,0x1FB5},
- {0x1FB6,0x1FB6,0x0391}, {0x1FB7,0x1FB7,0x0391},
- {0x1FB8,0x1FB0,0x0391}, {0x1FB9,0x1FB1,0x0391},
- {0x1FBA,0x1F70,0x0391}, {0x1FBB,0x1F71,0x1FBB},
- {0x1FBC,0x1FB3,0x0391}, {0x1FBD,0x1FBD,0x1FBD},
- {0x0399,0x1FBE,0x0399}, {0x1FBF,0x1FBF,0x1FBF},
- {0x1FC0,0x1FC0,0x1FC0}, {0x1FC1,0x1FC1,0x1FC1},
- {0x1FC2,0x1FC2,0x0397}, {0x1FCC,0x1FC3,0x0397},
- {0x1FC4,0x1FC4,0x0397}, {0x1FC5,0x1FC5,0x1FC5},
- {0x1FC6,0x1FC6,0x0397}, {0x1FC7,0x1FC7,0x0397},
- {0x1FC8,0x1F72,0x0395}, {0x1FC9,0x1F73,0x1FC9},
- {0x1FCA,0x1F74,0x0397}, {0x1FCB,0x1F75,0x1FCB},
- {0x1FCC,0x1FC3,0x0397}, {0x1FCD,0x1FCD,0x1FCD},
- {0x1FCE,0x1FCE,0x1FCE}, {0x1FCF,0x1FCF,0x1FCF},
- {0x1FD8,0x1FD0,0x0399}, {0x1FD9,0x1FD1,0x0399},
- {0x1FD2,0x1FD2,0x0399}, {0x1FD3,0x1FD3,0x1FD3},
- {0x1FD4,0x1FD4,0x1FD4}, {0x1FD5,0x1FD5,0x1FD5},
- {0x1FD6,0x1FD6,0x0399}, {0x1FD7,0x1FD7,0x0399},
- {0x1FD8,0x1FD0,0x0399}, {0x1FD9,0x1FD1,0x0399},
- {0x1FDA,0x1F76,0x0399}, {0x1FDB,0x1F77,0x1FDB},
- {0x1FDC,0x1FDC,0x1FDC}, {0x1FDD,0x1FDD,0x1FDD},
- {0x1FDE,0x1FDE,0x1FDE}, {0x1FDF,0x1FDF,0x1FDF},
- {0x1FE8,0x1FE0,0x03A5}, {0x1FE9,0x1FE1,0x03A5},
- {0x1FE2,0x1FE2,0x03A5}, {0x1FE3,0x1FE3,0x1FE3},
- {0x1FE4,0x1FE4,0x03A1}, {0x1FEC,0x1FE5,0x03A1},
- {0x1FE6,0x1FE6,0x03A5}, {0x1FE7,0x1FE7,0x03A5},
- {0x1FE8,0x1FE0,0x03A5}, {0x1FE9,0x1FE1,0x03A5},
- {0x1FEA,0x1F7A,0x03A5}, {0x1FEB,0x1F7B,0x1FEB},
- {0x1FEC,0x1FE5,0x03A1}, {0x1FED,0x1FED,0x1FED},
- {0x1FEE,0x1FEE,0x1FEE}, {0x1FEF,0x1FEF,0x1FEF},
- {0x1FF0,0x1FF0,0x1FF0}, {0x1FF1,0x1FF1,0x1FF1},
- {0x1FF2,0x1FF2,0x03A9}, {0x1FFC,0x1FF3,0x03A9},
- {0x1FF4,0x1FF4,0x03A9}, {0x1FF5,0x1FF5,0x1FF5},
- {0x1FF6,0x1FF6,0x03A9}, {0x1FF7,0x1FF7,0x03A9},
- {0x1FF8,0x1F78,0x039F}, {0x1FF9,0x1F79,0x1FF9},
- {0x1FFA,0x1F7C,0x03A9}, {0x1FFB,0x1F7D,0x1FFB},
- {0x1FFC,0x1FF3,0x03A9}, {0x1FFD,0x1FFD,0x1FFD},
- {0x1FFE,0x1FFE,0x1FFE}, {0x1FFF,0x1FFF,0x1FFF}
-};
-
-static MY_UNICASE_CHARACTER plane21[]={
- {0x2100,0x2100,0x2100}, {0x2101,0x2101,0x2101},
- {0x2102,0x2102,0x2102}, {0x2103,0x2103,0x2103},
- {0x2104,0x2104,0x2104}, {0x2105,0x2105,0x2105},
- {0x2106,0x2106,0x2106}, {0x2107,0x2107,0x2107},
- {0x2108,0x2108,0x2108}, {0x2109,0x2109,0x2109},
- {0x210A,0x210A,0x210A}, {0x210B,0x210B,0x210B},
- {0x210C,0x210C,0x210C}, {0x210D,0x210D,0x210D},
- {0x210E,0x210E,0x210E}, {0x210F,0x210F,0x210F},
- {0x2110,0x2110,0x2110}, {0x2111,0x2111,0x2111},
- {0x2112,0x2112,0x2112}, {0x2113,0x2113,0x2113},
- {0x2114,0x2114,0x2114}, {0x2115,0x2115,0x2115},
- {0x2116,0x2116,0x2116}, {0x2117,0x2117,0x2117},
- {0x2118,0x2118,0x2118}, {0x2119,0x2119,0x2119},
- {0x211A,0x211A,0x211A}, {0x211B,0x211B,0x211B},
- {0x211C,0x211C,0x211C}, {0x211D,0x211D,0x211D},
- {0x211E,0x211E,0x211E}, {0x211F,0x211F,0x211F},
- {0x2120,0x2120,0x2120}, {0x2121,0x2121,0x2121},
- {0x2122,0x2122,0x2122}, {0x2123,0x2123,0x2123},
- {0x2124,0x2124,0x2124}, {0x2125,0x2125,0x2125},
- {0x2126,0x03C9,0x2126}, {0x2127,0x2127,0x2127},
- {0x2128,0x2128,0x2128}, {0x2129,0x2129,0x2129},
- {0x212A,0x006B,0x212A}, {0x212B,0x00E5,0x212B},
- {0x212C,0x212C,0x212C}, {0x212D,0x212D,0x212D},
- {0x212E,0x212E,0x212E}, {0x212F,0x212F,0x212F},
- {0x2130,0x2130,0x2130}, {0x2131,0x2131,0x2131},
- {0x2132,0x2132,0x2132}, {0x2133,0x2133,0x2133},
- {0x2134,0x2134,0x2134}, {0x2135,0x2135,0x2135},
- {0x2136,0x2136,0x2136}, {0x2137,0x2137,0x2137},
- {0x2138,0x2138,0x2138}, {0x2139,0x2139,0x2139},
- {0x213A,0x213A,0x213A}, {0x213B,0x213B,0x213B},
- {0x213C,0x213C,0x213C}, {0x213D,0x213D,0x213D},
- {0x213E,0x213E,0x213E}, {0x213F,0x213F,0x213F},
- {0x2140,0x2140,0x2140}, {0x2141,0x2141,0x2141},
- {0x2142,0x2142,0x2142}, {0x2143,0x2143,0x2143},
- {0x2144,0x2144,0x2144}, {0x2145,0x2145,0x2145},
- {0x2146,0x2146,0x2146}, {0x2147,0x2147,0x2147},
- {0x2148,0x2148,0x2148}, {0x2149,0x2149,0x2149},
- {0x214A,0x214A,0x214A}, {0x214B,0x214B,0x214B},
- {0x214C,0x214C,0x214C}, {0x214D,0x214D,0x214D},
- {0x214E,0x214E,0x214E}, {0x214F,0x214F,0x214F},
- {0x2150,0x2150,0x2150}, {0x2151,0x2151,0x2151},
- {0x2152,0x2152,0x2152}, {0x2153,0x2153,0x2153},
- {0x2154,0x2154,0x2154}, {0x2155,0x2155,0x2155},
- {0x2156,0x2156,0x2156}, {0x2157,0x2157,0x2157},
- {0x2158,0x2158,0x2158}, {0x2159,0x2159,0x2159},
- {0x215A,0x215A,0x215A}, {0x215B,0x215B,0x215B},
- {0x215C,0x215C,0x215C}, {0x215D,0x215D,0x215D},
- {0x215E,0x215E,0x215E}, {0x215F,0x215F,0x215F},
- {0x2160,0x2170,0x2160}, {0x2161,0x2171,0x2161},
- {0x2162,0x2172,0x2162}, {0x2163,0x2173,0x2163},
- {0x2164,0x2174,0x2164}, {0x2165,0x2175,0x2165},
- {0x2166,0x2176,0x2166}, {0x2167,0x2177,0x2167},
- {0x2168,0x2178,0x2168}, {0x2169,0x2179,0x2169},
- {0x216A,0x217A,0x216A}, {0x216B,0x217B,0x216B},
- {0x216C,0x217C,0x216C}, {0x216D,0x217D,0x216D},
- {0x216E,0x217E,0x216E}, {0x216F,0x217F,0x216F},
- {0x2160,0x2170,0x2160}, {0x2161,0x2171,0x2161},
- {0x2162,0x2172,0x2162}, {0x2163,0x2173,0x2163},
- {0x2164,0x2174,0x2164}, {0x2165,0x2175,0x2165},
- {0x2166,0x2176,0x2166}, {0x2167,0x2177,0x2167},
- {0x2168,0x2178,0x2168}, {0x2169,0x2179,0x2169},
- {0x216A,0x217A,0x216A}, {0x216B,0x217B,0x216B},
- {0x216C,0x217C,0x216C}, {0x216D,0x217D,0x216D},
- {0x216E,0x217E,0x216E}, {0x216F,0x217F,0x216F},
- {0x2180,0x2180,0x2180}, {0x2181,0x2181,0x2181},
- {0x2182,0x2182,0x2182}, {0x2183,0x2183,0x2183},
- {0x2184,0x2184,0x2184}, {0x2185,0x2185,0x2185},
- {0x2186,0x2186,0x2186}, {0x2187,0x2187,0x2187},
- {0x2188,0x2188,0x2188}, {0x2189,0x2189,0x2189},
- {0x218A,0x218A,0x218A}, {0x218B,0x218B,0x218B},
- {0x218C,0x218C,0x218C}, {0x218D,0x218D,0x218D},
- {0x218E,0x218E,0x218E}, {0x218F,0x218F,0x218F},
- {0x2190,0x2190,0x2190}, {0x2191,0x2191,0x2191},
- {0x2192,0x2192,0x2192}, {0x2193,0x2193,0x2193},
- {0x2194,0x2194,0x2194}, {0x2195,0x2195,0x2195},
- {0x2196,0x2196,0x2196}, {0x2197,0x2197,0x2197},
- {0x2198,0x2198,0x2198}, {0x2199,0x2199,0x2199},
- {0x219A,0x219A,0x219A}, {0x219B,0x219B,0x219B},
- {0x219C,0x219C,0x219C}, {0x219D,0x219D,0x219D},
- {0x219E,0x219E,0x219E}, {0x219F,0x219F,0x219F},
- {0x21A0,0x21A0,0x21A0}, {0x21A1,0x21A1,0x21A1},
- {0x21A2,0x21A2,0x21A2}, {0x21A3,0x21A3,0x21A3},
- {0x21A4,0x21A4,0x21A4}, {0x21A5,0x21A5,0x21A5},
- {0x21A6,0x21A6,0x21A6}, {0x21A7,0x21A7,0x21A7},
- {0x21A8,0x21A8,0x21A8}, {0x21A9,0x21A9,0x21A9},
- {0x21AA,0x21AA,0x21AA}, {0x21AB,0x21AB,0x21AB},
- {0x21AC,0x21AC,0x21AC}, {0x21AD,0x21AD,0x21AD},
- {0x21AE,0x21AE,0x21AE}, {0x21AF,0x21AF,0x21AF},
- {0x21B0,0x21B0,0x21B0}, {0x21B1,0x21B1,0x21B1},
- {0x21B2,0x21B2,0x21B2}, {0x21B3,0x21B3,0x21B3},
- {0x21B4,0x21B4,0x21B4}, {0x21B5,0x21B5,0x21B5},
- {0x21B6,0x21B6,0x21B6}, {0x21B7,0x21B7,0x21B7},
- {0x21B8,0x21B8,0x21B8}, {0x21B9,0x21B9,0x21B9},
- {0x21BA,0x21BA,0x21BA}, {0x21BB,0x21BB,0x21BB},
- {0x21BC,0x21BC,0x21BC}, {0x21BD,0x21BD,0x21BD},
- {0x21BE,0x21BE,0x21BE}, {0x21BF,0x21BF,0x21BF},
- {0x21C0,0x21C0,0x21C0}, {0x21C1,0x21C1,0x21C1},
- {0x21C2,0x21C2,0x21C2}, {0x21C3,0x21C3,0x21C3},
- {0x21C4,0x21C4,0x21C4}, {0x21C5,0x21C5,0x21C5},
- {0x21C6,0x21C6,0x21C6}, {0x21C7,0x21C7,0x21C7},
- {0x21C8,0x21C8,0x21C8}, {0x21C9,0x21C9,0x21C9},
- {0x21CA,0x21CA,0x21CA}, {0x21CB,0x21CB,0x21CB},
- {0x21CC,0x21CC,0x21CC}, {0x21CD,0x21CD,0x21CD},
- {0x21CE,0x21CE,0x21CE}, {0x21CF,0x21CF,0x21CF},
- {0x21D0,0x21D0,0x21D0}, {0x21D1,0x21D1,0x21D1},
- {0x21D2,0x21D2,0x21D2}, {0x21D3,0x21D3,0x21D3},
- {0x21D4,0x21D4,0x21D4}, {0x21D5,0x21D5,0x21D5},
- {0x21D6,0x21D6,0x21D6}, {0x21D7,0x21D7,0x21D7},
- {0x21D8,0x21D8,0x21D8}, {0x21D9,0x21D9,0x21D9},
- {0x21DA,0x21DA,0x21DA}, {0x21DB,0x21DB,0x21DB},
- {0x21DC,0x21DC,0x21DC}, {0x21DD,0x21DD,0x21DD},
- {0x21DE,0x21DE,0x21DE}, {0x21DF,0x21DF,0x21DF},
- {0x21E0,0x21E0,0x21E0}, {0x21E1,0x21E1,0x21E1},
- {0x21E2,0x21E2,0x21E2}, {0x21E3,0x21E3,0x21E3},
- {0x21E4,0x21E4,0x21E4}, {0x21E5,0x21E5,0x21E5},
- {0x21E6,0x21E6,0x21E6}, {0x21E7,0x21E7,0x21E7},
- {0x21E8,0x21E8,0x21E8}, {0x21E9,0x21E9,0x21E9},
- {0x21EA,0x21EA,0x21EA}, {0x21EB,0x21EB,0x21EB},
- {0x21EC,0x21EC,0x21EC}, {0x21ED,0x21ED,0x21ED},
- {0x21EE,0x21EE,0x21EE}, {0x21EF,0x21EF,0x21EF},
- {0x21F0,0x21F0,0x21F0}, {0x21F1,0x21F1,0x21F1},
- {0x21F2,0x21F2,0x21F2}, {0x21F3,0x21F3,0x21F3},
- {0x21F4,0x21F4,0x21F4}, {0x21F5,0x21F5,0x21F5},
- {0x21F6,0x21F6,0x21F6}, {0x21F7,0x21F7,0x21F7},
- {0x21F8,0x21F8,0x21F8}, {0x21F9,0x21F9,0x21F9},
- {0x21FA,0x21FA,0x21FA}, {0x21FB,0x21FB,0x21FB},
- {0x21FC,0x21FC,0x21FC}, {0x21FD,0x21FD,0x21FD},
- {0x21FE,0x21FE,0x21FE}, {0x21FF,0x21FF,0x21FF}
-};
-
-static MY_UNICASE_CHARACTER plane24[]={
- {0x2400,0x2400,0x2400}, {0x2401,0x2401,0x2401},
- {0x2402,0x2402,0x2402}, {0x2403,0x2403,0x2403},
- {0x2404,0x2404,0x2404}, {0x2405,0x2405,0x2405},
- {0x2406,0x2406,0x2406}, {0x2407,0x2407,0x2407},
- {0x2408,0x2408,0x2408}, {0x2409,0x2409,0x2409},
- {0x240A,0x240A,0x240A}, {0x240B,0x240B,0x240B},
- {0x240C,0x240C,0x240C}, {0x240D,0x240D,0x240D},
- {0x240E,0x240E,0x240E}, {0x240F,0x240F,0x240F},
- {0x2410,0x2410,0x2410}, {0x2411,0x2411,0x2411},
- {0x2412,0x2412,0x2412}, {0x2413,0x2413,0x2413},
- {0x2414,0x2414,0x2414}, {0x2415,0x2415,0x2415},
- {0x2416,0x2416,0x2416}, {0x2417,0x2417,0x2417},
- {0x2418,0x2418,0x2418}, {0x2419,0x2419,0x2419},
- {0x241A,0x241A,0x241A}, {0x241B,0x241B,0x241B},
- {0x241C,0x241C,0x241C}, {0x241D,0x241D,0x241D},
- {0x241E,0x241E,0x241E}, {0x241F,0x241F,0x241F},
- {0x2420,0x2420,0x2420}, {0x2421,0x2421,0x2421},
- {0x2422,0x2422,0x2422}, {0x2423,0x2423,0x2423},
- {0x2424,0x2424,0x2424}, {0x2425,0x2425,0x2425},
- {0x2426,0x2426,0x2426}, {0x2427,0x2427,0x2427},
- {0x2428,0x2428,0x2428}, {0x2429,0x2429,0x2429},
- {0x242A,0x242A,0x242A}, {0x242B,0x242B,0x242B},
- {0x242C,0x242C,0x242C}, {0x242D,0x242D,0x242D},
- {0x242E,0x242E,0x242E}, {0x242F,0x242F,0x242F},
- {0x2430,0x2430,0x2430}, {0x2431,0x2431,0x2431},
- {0x2432,0x2432,0x2432}, {0x2433,0x2433,0x2433},
- {0x2434,0x2434,0x2434}, {0x2435,0x2435,0x2435},
- {0x2436,0x2436,0x2436}, {0x2437,0x2437,0x2437},
- {0x2438,0x2438,0x2438}, {0x2439,0x2439,0x2439},
- {0x243A,0x243A,0x243A}, {0x243B,0x243B,0x243B},
- {0x243C,0x243C,0x243C}, {0x243D,0x243D,0x243D},
- {0x243E,0x243E,0x243E}, {0x243F,0x243F,0x243F},
- {0x2440,0x2440,0x2440}, {0x2441,0x2441,0x2441},
- {0x2442,0x2442,0x2442}, {0x2443,0x2443,0x2443},
- {0x2444,0x2444,0x2444}, {0x2445,0x2445,0x2445},
- {0x2446,0x2446,0x2446}, {0x2447,0x2447,0x2447},
- {0x2448,0x2448,0x2448}, {0x2449,0x2449,0x2449},
- {0x244A,0x244A,0x244A}, {0x244B,0x244B,0x244B},
- {0x244C,0x244C,0x244C}, {0x244D,0x244D,0x244D},
- {0x244E,0x244E,0x244E}, {0x244F,0x244F,0x244F},
- {0x2450,0x2450,0x2450}, {0x2451,0x2451,0x2451},
- {0x2452,0x2452,0x2452}, {0x2453,0x2453,0x2453},
- {0x2454,0x2454,0x2454}, {0x2455,0x2455,0x2455},
- {0x2456,0x2456,0x2456}, {0x2457,0x2457,0x2457},
- {0x2458,0x2458,0x2458}, {0x2459,0x2459,0x2459},
- {0x245A,0x245A,0x245A}, {0x245B,0x245B,0x245B},
- {0x245C,0x245C,0x245C}, {0x245D,0x245D,0x245D},
- {0x245E,0x245E,0x245E}, {0x245F,0x245F,0x245F},
- {0x2460,0x2460,0x2460}, {0x2461,0x2461,0x2461},
- {0x2462,0x2462,0x2462}, {0x2463,0x2463,0x2463},
- {0x2464,0x2464,0x2464}, {0x2465,0x2465,0x2465},
- {0x2466,0x2466,0x2466}, {0x2467,0x2467,0x2467},
- {0x2468,0x2468,0x2468}, {0x2469,0x2469,0x2469},
- {0x246A,0x246A,0x246A}, {0x246B,0x246B,0x246B},
- {0x246C,0x246C,0x246C}, {0x246D,0x246D,0x246D},
- {0x246E,0x246E,0x246E}, {0x246F,0x246F,0x246F},
- {0x2470,0x2470,0x2470}, {0x2471,0x2471,0x2471},
- {0x2472,0x2472,0x2472}, {0x2473,0x2473,0x2473},
- {0x2474,0x2474,0x2474}, {0x2475,0x2475,0x2475},
- {0x2476,0x2476,0x2476}, {0x2477,0x2477,0x2477},
- {0x2478,0x2478,0x2478}, {0x2479,0x2479,0x2479},
- {0x247A,0x247A,0x247A}, {0x247B,0x247B,0x247B},
- {0x247C,0x247C,0x247C}, {0x247D,0x247D,0x247D},
- {0x247E,0x247E,0x247E}, {0x247F,0x247F,0x247F},
- {0x2480,0x2480,0x2480}, {0x2481,0x2481,0x2481},
- {0x2482,0x2482,0x2482}, {0x2483,0x2483,0x2483},
- {0x2484,0x2484,0x2484}, {0x2485,0x2485,0x2485},
- {0x2486,0x2486,0x2486}, {0x2487,0x2487,0x2487},
- {0x2488,0x2488,0x2488}, {0x2489,0x2489,0x2489},
- {0x248A,0x248A,0x248A}, {0x248B,0x248B,0x248B},
- {0x248C,0x248C,0x248C}, {0x248D,0x248D,0x248D},
- {0x248E,0x248E,0x248E}, {0x248F,0x248F,0x248F},
- {0x2490,0x2490,0x2490}, {0x2491,0x2491,0x2491},
- {0x2492,0x2492,0x2492}, {0x2493,0x2493,0x2493},
- {0x2494,0x2494,0x2494}, {0x2495,0x2495,0x2495},
- {0x2496,0x2496,0x2496}, {0x2497,0x2497,0x2497},
- {0x2498,0x2498,0x2498}, {0x2499,0x2499,0x2499},
- {0x249A,0x249A,0x249A}, {0x249B,0x249B,0x249B},
- {0x249C,0x249C,0x249C}, {0x249D,0x249D,0x249D},
- {0x249E,0x249E,0x249E}, {0x249F,0x249F,0x249F},
- {0x24A0,0x24A0,0x24A0}, {0x24A1,0x24A1,0x24A1},
- {0x24A2,0x24A2,0x24A2}, {0x24A3,0x24A3,0x24A3},
- {0x24A4,0x24A4,0x24A4}, {0x24A5,0x24A5,0x24A5},
- {0x24A6,0x24A6,0x24A6}, {0x24A7,0x24A7,0x24A7},
- {0x24A8,0x24A8,0x24A8}, {0x24A9,0x24A9,0x24A9},
- {0x24AA,0x24AA,0x24AA}, {0x24AB,0x24AB,0x24AB},
- {0x24AC,0x24AC,0x24AC}, {0x24AD,0x24AD,0x24AD},
- {0x24AE,0x24AE,0x24AE}, {0x24AF,0x24AF,0x24AF},
- {0x24B0,0x24B0,0x24B0}, {0x24B1,0x24B1,0x24B1},
- {0x24B2,0x24B2,0x24B2}, {0x24B3,0x24B3,0x24B3},
- {0x24B4,0x24B4,0x24B4}, {0x24B5,0x24B5,0x24B5},
- {0x24B6,0x24D0,0x24B6}, {0x24B7,0x24D1,0x24B7},
- {0x24B8,0x24D2,0x24B8}, {0x24B9,0x24D3,0x24B9},
- {0x24BA,0x24D4,0x24BA}, {0x24BB,0x24D5,0x24BB},
- {0x24BC,0x24D6,0x24BC}, {0x24BD,0x24D7,0x24BD},
- {0x24BE,0x24D8,0x24BE}, {0x24BF,0x24D9,0x24BF},
- {0x24C0,0x24DA,0x24C0}, {0x24C1,0x24DB,0x24C1},
- {0x24C2,0x24DC,0x24C2}, {0x24C3,0x24DD,0x24C3},
- {0x24C4,0x24DE,0x24C4}, {0x24C5,0x24DF,0x24C5},
- {0x24C6,0x24E0,0x24C6}, {0x24C7,0x24E1,0x24C7},
- {0x24C8,0x24E2,0x24C8}, {0x24C9,0x24E3,0x24C9},
- {0x24CA,0x24E4,0x24CA}, {0x24CB,0x24E5,0x24CB},
- {0x24CC,0x24E6,0x24CC}, {0x24CD,0x24E7,0x24CD},
- {0x24CE,0x24E8,0x24CE}, {0x24CF,0x24E9,0x24CF},
- {0x24B6,0x24D0,0x24B6}, {0x24B7,0x24D1,0x24B7},
- {0x24B8,0x24D2,0x24B8}, {0x24B9,0x24D3,0x24B9},
- {0x24BA,0x24D4,0x24BA}, {0x24BB,0x24D5,0x24BB},
- {0x24BC,0x24D6,0x24BC}, {0x24BD,0x24D7,0x24BD},
- {0x24BE,0x24D8,0x24BE}, {0x24BF,0x24D9,0x24BF},
- {0x24C0,0x24DA,0x24C0}, {0x24C1,0x24DB,0x24C1},
- {0x24C2,0x24DC,0x24C2}, {0x24C3,0x24DD,0x24C3},
- {0x24C4,0x24DE,0x24C4}, {0x24C5,0x24DF,0x24C5},
- {0x24C6,0x24E0,0x24C6}, {0x24C7,0x24E1,0x24C7},
- {0x24C8,0x24E2,0x24C8}, {0x24C9,0x24E3,0x24C9},
- {0x24CA,0x24E4,0x24CA}, {0x24CB,0x24E5,0x24CB},
- {0x24CC,0x24E6,0x24CC}, {0x24CD,0x24E7,0x24CD},
- {0x24CE,0x24E8,0x24CE}, {0x24CF,0x24E9,0x24CF},
- {0x24EA,0x24EA,0x24EA}, {0x24EB,0x24EB,0x24EB},
- {0x24EC,0x24EC,0x24EC}, {0x24ED,0x24ED,0x24ED},
- {0x24EE,0x24EE,0x24EE}, {0x24EF,0x24EF,0x24EF},
- {0x24F0,0x24F0,0x24F0}, {0x24F1,0x24F1,0x24F1},
- {0x24F2,0x24F2,0x24F2}, {0x24F3,0x24F3,0x24F3},
- {0x24F4,0x24F4,0x24F4}, {0x24F5,0x24F5,0x24F5},
- {0x24F6,0x24F6,0x24F6}, {0x24F7,0x24F7,0x24F7},
- {0x24F8,0x24F8,0x24F8}, {0x24F9,0x24F9,0x24F9},
- {0x24FA,0x24FA,0x24FA}, {0x24FB,0x24FB,0x24FB},
- {0x24FC,0x24FC,0x24FC}, {0x24FD,0x24FD,0x24FD},
- {0x24FE,0x24FE,0x24FE}, {0x24FF,0x24FF,0x24FF}
-};
-
-static MY_UNICASE_CHARACTER planeFF[]={
- {0xFF00,0xFF00,0xFF00}, {0xFF01,0xFF01,0xFF01},
- {0xFF02,0xFF02,0xFF02}, {0xFF03,0xFF03,0xFF03},
- {0xFF04,0xFF04,0xFF04}, {0xFF05,0xFF05,0xFF05},
- {0xFF06,0xFF06,0xFF06}, {0xFF07,0xFF07,0xFF07},
- {0xFF08,0xFF08,0xFF08}, {0xFF09,0xFF09,0xFF09},
- {0xFF0A,0xFF0A,0xFF0A}, {0xFF0B,0xFF0B,0xFF0B},
- {0xFF0C,0xFF0C,0xFF0C}, {0xFF0D,0xFF0D,0xFF0D},
- {0xFF0E,0xFF0E,0xFF0E}, {0xFF0F,0xFF0F,0xFF0F},
- {0xFF10,0xFF10,0xFF10}, {0xFF11,0xFF11,0xFF11},
- {0xFF12,0xFF12,0xFF12}, {0xFF13,0xFF13,0xFF13},
- {0xFF14,0xFF14,0xFF14}, {0xFF15,0xFF15,0xFF15},
- {0xFF16,0xFF16,0xFF16}, {0xFF17,0xFF17,0xFF17},
- {0xFF18,0xFF18,0xFF18}, {0xFF19,0xFF19,0xFF19},
- {0xFF1A,0xFF1A,0xFF1A}, {0xFF1B,0xFF1B,0xFF1B},
- {0xFF1C,0xFF1C,0xFF1C}, {0xFF1D,0xFF1D,0xFF1D},
- {0xFF1E,0xFF1E,0xFF1E}, {0xFF1F,0xFF1F,0xFF1F},
- {0xFF20,0xFF20,0xFF20}, {0xFF21,0xFF41,0xFF21},
- {0xFF22,0xFF42,0xFF22}, {0xFF23,0xFF43,0xFF23},
- {0xFF24,0xFF44,0xFF24}, {0xFF25,0xFF45,0xFF25},
- {0xFF26,0xFF46,0xFF26}, {0xFF27,0xFF47,0xFF27},
- {0xFF28,0xFF48,0xFF28}, {0xFF29,0xFF49,0xFF29},
- {0xFF2A,0xFF4A,0xFF2A}, {0xFF2B,0xFF4B,0xFF2B},
- {0xFF2C,0xFF4C,0xFF2C}, {0xFF2D,0xFF4D,0xFF2D},
- {0xFF2E,0xFF4E,0xFF2E}, {0xFF2F,0xFF4F,0xFF2F},
- {0xFF30,0xFF50,0xFF30}, {0xFF31,0xFF51,0xFF31},
- {0xFF32,0xFF52,0xFF32}, {0xFF33,0xFF53,0xFF33},
- {0xFF34,0xFF54,0xFF34}, {0xFF35,0xFF55,0xFF35},
- {0xFF36,0xFF56,0xFF36}, {0xFF37,0xFF57,0xFF37},
- {0xFF38,0xFF58,0xFF38}, {0xFF39,0xFF59,0xFF39},
- {0xFF3A,0xFF5A,0xFF3A}, {0xFF3B,0xFF3B,0xFF3B},
- {0xFF3C,0xFF3C,0xFF3C}, {0xFF3D,0xFF3D,0xFF3D},
- {0xFF3E,0xFF3E,0xFF3E}, {0xFF3F,0xFF3F,0xFF3F},
- {0xFF40,0xFF40,0xFF40}, {0xFF21,0xFF41,0xFF21},
- {0xFF22,0xFF42,0xFF22}, {0xFF23,0xFF43,0xFF23},
- {0xFF24,0xFF44,0xFF24}, {0xFF25,0xFF45,0xFF25},
- {0xFF26,0xFF46,0xFF26}, {0xFF27,0xFF47,0xFF27},
- {0xFF28,0xFF48,0xFF28}, {0xFF29,0xFF49,0xFF29},
- {0xFF2A,0xFF4A,0xFF2A}, {0xFF2B,0xFF4B,0xFF2B},
- {0xFF2C,0xFF4C,0xFF2C}, {0xFF2D,0xFF4D,0xFF2D},
- {0xFF2E,0xFF4E,0xFF2E}, {0xFF2F,0xFF4F,0xFF2F},
- {0xFF30,0xFF50,0xFF30}, {0xFF31,0xFF51,0xFF31},
- {0xFF32,0xFF52,0xFF32}, {0xFF33,0xFF53,0xFF33},
- {0xFF34,0xFF54,0xFF34}, {0xFF35,0xFF55,0xFF35},
- {0xFF36,0xFF56,0xFF36}, {0xFF37,0xFF57,0xFF37},
- {0xFF38,0xFF58,0xFF38}, {0xFF39,0xFF59,0xFF39},
- {0xFF3A,0xFF5A,0xFF3A}, {0xFF5B,0xFF5B,0xFF5B},
- {0xFF5C,0xFF5C,0xFF5C}, {0xFF5D,0xFF5D,0xFF5D},
- {0xFF5E,0xFF5E,0xFF5E}, {0xFF5F,0xFF5F,0xFF5F},
- {0xFF60,0xFF60,0xFF60}, {0xFF61,0xFF61,0xFF61},
- {0xFF62,0xFF62,0xFF62}, {0xFF63,0xFF63,0xFF63},
- {0xFF64,0xFF64,0xFF64}, {0xFF65,0xFF65,0xFF65},
- {0xFF66,0xFF66,0xFF66}, {0xFF67,0xFF67,0xFF67},
- {0xFF68,0xFF68,0xFF68}, {0xFF69,0xFF69,0xFF69},
- {0xFF6A,0xFF6A,0xFF6A}, {0xFF6B,0xFF6B,0xFF6B},
- {0xFF6C,0xFF6C,0xFF6C}, {0xFF6D,0xFF6D,0xFF6D},
- {0xFF6E,0xFF6E,0xFF6E}, {0xFF6F,0xFF6F,0xFF6F},
- {0xFF70,0xFF70,0xFF70}, {0xFF71,0xFF71,0xFF71},
- {0xFF72,0xFF72,0xFF72}, {0xFF73,0xFF73,0xFF73},
- {0xFF74,0xFF74,0xFF74}, {0xFF75,0xFF75,0xFF75},
- {0xFF76,0xFF76,0xFF76}, {0xFF77,0xFF77,0xFF77},
- {0xFF78,0xFF78,0xFF78}, {0xFF79,0xFF79,0xFF79},
- {0xFF7A,0xFF7A,0xFF7A}, {0xFF7B,0xFF7B,0xFF7B},
- {0xFF7C,0xFF7C,0xFF7C}, {0xFF7D,0xFF7D,0xFF7D},
- {0xFF7E,0xFF7E,0xFF7E}, {0xFF7F,0xFF7F,0xFF7F},
- {0xFF80,0xFF80,0xFF80}, {0xFF81,0xFF81,0xFF81},
- {0xFF82,0xFF82,0xFF82}, {0xFF83,0xFF83,0xFF83},
- {0xFF84,0xFF84,0xFF84}, {0xFF85,0xFF85,0xFF85},
- {0xFF86,0xFF86,0xFF86}, {0xFF87,0xFF87,0xFF87},
- {0xFF88,0xFF88,0xFF88}, {0xFF89,0xFF89,0xFF89},
- {0xFF8A,0xFF8A,0xFF8A}, {0xFF8B,0xFF8B,0xFF8B},
- {0xFF8C,0xFF8C,0xFF8C}, {0xFF8D,0xFF8D,0xFF8D},
- {0xFF8E,0xFF8E,0xFF8E}, {0xFF8F,0xFF8F,0xFF8F},
- {0xFF90,0xFF90,0xFF90}, {0xFF91,0xFF91,0xFF91},
- {0xFF92,0xFF92,0xFF92}, {0xFF93,0xFF93,0xFF93},
- {0xFF94,0xFF94,0xFF94}, {0xFF95,0xFF95,0xFF95},
- {0xFF96,0xFF96,0xFF96}, {0xFF97,0xFF97,0xFF97},
- {0xFF98,0xFF98,0xFF98}, {0xFF99,0xFF99,0xFF99},
- {0xFF9A,0xFF9A,0xFF9A}, {0xFF9B,0xFF9B,0xFF9B},
- {0xFF9C,0xFF9C,0xFF9C}, {0xFF9D,0xFF9D,0xFF9D},
- {0xFF9E,0xFF9E,0xFF9E}, {0xFF9F,0xFF9F,0xFF9F},
- {0xFFA0,0xFFA0,0xFFA0}, {0xFFA1,0xFFA1,0xFFA1},
- {0xFFA2,0xFFA2,0xFFA2}, {0xFFA3,0xFFA3,0xFFA3},
- {0xFFA4,0xFFA4,0xFFA4}, {0xFFA5,0xFFA5,0xFFA5},
- {0xFFA6,0xFFA6,0xFFA6}, {0xFFA7,0xFFA7,0xFFA7},
- {0xFFA8,0xFFA8,0xFFA8}, {0xFFA9,0xFFA9,0xFFA9},
- {0xFFAA,0xFFAA,0xFFAA}, {0xFFAB,0xFFAB,0xFFAB},
- {0xFFAC,0xFFAC,0xFFAC}, {0xFFAD,0xFFAD,0xFFAD},
- {0xFFAE,0xFFAE,0xFFAE}, {0xFFAF,0xFFAF,0xFFAF},
- {0xFFB0,0xFFB0,0xFFB0}, {0xFFB1,0xFFB1,0xFFB1},
- {0xFFB2,0xFFB2,0xFFB2}, {0xFFB3,0xFFB3,0xFFB3},
- {0xFFB4,0xFFB4,0xFFB4}, {0xFFB5,0xFFB5,0xFFB5},
- {0xFFB6,0xFFB6,0xFFB6}, {0xFFB7,0xFFB7,0xFFB7},
- {0xFFB8,0xFFB8,0xFFB8}, {0xFFB9,0xFFB9,0xFFB9},
- {0xFFBA,0xFFBA,0xFFBA}, {0xFFBB,0xFFBB,0xFFBB},
- {0xFFBC,0xFFBC,0xFFBC}, {0xFFBD,0xFFBD,0xFFBD},
- {0xFFBE,0xFFBE,0xFFBE}, {0xFFBF,0xFFBF,0xFFBF},
- {0xFFC0,0xFFC0,0xFFC0}, {0xFFC1,0xFFC1,0xFFC1},
- {0xFFC2,0xFFC2,0xFFC2}, {0xFFC3,0xFFC3,0xFFC3},
- {0xFFC4,0xFFC4,0xFFC4}, {0xFFC5,0xFFC5,0xFFC5},
- {0xFFC6,0xFFC6,0xFFC6}, {0xFFC7,0xFFC7,0xFFC7},
- {0xFFC8,0xFFC8,0xFFC8}, {0xFFC9,0xFFC9,0xFFC9},
- {0xFFCA,0xFFCA,0xFFCA}, {0xFFCB,0xFFCB,0xFFCB},
- {0xFFCC,0xFFCC,0xFFCC}, {0xFFCD,0xFFCD,0xFFCD},
- {0xFFCE,0xFFCE,0xFFCE}, {0xFFCF,0xFFCF,0xFFCF},
- {0xFFD0,0xFFD0,0xFFD0}, {0xFFD1,0xFFD1,0xFFD1},
- {0xFFD2,0xFFD2,0xFFD2}, {0xFFD3,0xFFD3,0xFFD3},
- {0xFFD4,0xFFD4,0xFFD4}, {0xFFD5,0xFFD5,0xFFD5},
- {0xFFD6,0xFFD6,0xFFD6}, {0xFFD7,0xFFD7,0xFFD7},
- {0xFFD8,0xFFD8,0xFFD8}, {0xFFD9,0xFFD9,0xFFD9},
- {0xFFDA,0xFFDA,0xFFDA}, {0xFFDB,0xFFDB,0xFFDB},
- {0xFFDC,0xFFDC,0xFFDC}, {0xFFDD,0xFFDD,0xFFDD},
- {0xFFDE,0xFFDE,0xFFDE}, {0xFFDF,0xFFDF,0xFFDF},
- {0xFFE0,0xFFE0,0xFFE0}, {0xFFE1,0xFFE1,0xFFE1},
- {0xFFE2,0xFFE2,0xFFE2}, {0xFFE3,0xFFE3,0xFFE3},
- {0xFFE4,0xFFE4,0xFFE4}, {0xFFE5,0xFFE5,0xFFE5},
- {0xFFE6,0xFFE6,0xFFE6}, {0xFFE7,0xFFE7,0xFFE7},
- {0xFFE8,0xFFE8,0xFFE8}, {0xFFE9,0xFFE9,0xFFE9},
- {0xFFEA,0xFFEA,0xFFEA}, {0xFFEB,0xFFEB,0xFFEB},
- {0xFFEC,0xFFEC,0xFFEC}, {0xFFED,0xFFED,0xFFED},
- {0xFFEE,0xFFEE,0xFFEE}, {0xFFEF,0xFFEF,0xFFEF},
- {0xFFF0,0xFFF0,0xFFF0}, {0xFFF1,0xFFF1,0xFFF1},
- {0xFFF2,0xFFF2,0xFFF2}, {0xFFF3,0xFFF3,0xFFF3},
- {0xFFF4,0xFFF4,0xFFF4}, {0xFFF5,0xFFF5,0xFFF5},
- {0xFFF6,0xFFF6,0xFFF6}, {0xFFF7,0xFFF7,0xFFF7},
- {0xFFF8,0xFFF8,0xFFF8}, {0xFFF9,0xFFF9,0xFFF9},
- {0xFFFA,0xFFFA,0xFFFA}, {0xFFFB,0xFFFB,0xFFFB},
- {0xFFFC,0xFFFC,0xFFFC}, {0xFFFD,0xFFFD,0xFFFD},
- {0xFFFE,0xFFFE,0xFFFE}, {0xFFFF,0xFFFF,0xFFFF}
-};
-
-
-MY_UNICASE_CHARACTER *my_unicase_default_pages[256]=
-{
- my_unicase_default_page00,
- plane01, plane02, plane03, plane04, plane05, plane06, plane07,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, plane1E, plane1F,
- NULL, plane21, NULL, NULL, plane24, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, planeFF
-};
-
-
-MY_UNICASE_INFO my_unicase_default=
-{
- MY_UNICASE_INFO_DEFAULT_MAXCHAR,
- my_unicase_default_pages
-};
-
-
-/*
- Reproduce old utf8mb3_general_ci behaviour before we fixed Bug#27877.
-*/
-MY_UNICASE_CHARACTER *my_unicase_mysql500_pages[256]={
- my_unicase_mysql500_page00,
- plane01, plane02, plane03, plane04, plane05, plane06, plane07,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, plane1E, plane1F,
- NULL, plane21, NULL, NULL, plane24, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, planeFF
-
-};
-
-
-MY_UNICASE_INFO my_unicase_mysql500=
-{
- 0xFFFF,
- my_unicase_mysql500_pages
-};
-
-
-/*
- Turkish lower/upper mapping:
- 1. LOWER(0x0049 LATIN CAPITAL LETTER I) ->
- 0x0131 LATIN SMALL LETTER DOTLESS I
- 2. UPPER(0x0069 LATIN SMALL LETTER I) ->
- 0x0130 LATIN CAPITAL LETTER I WITH DOT ABOVE
-*/
-
-static MY_UNICASE_CHARACTER turk00[]=
-{
- {0x0000,0x0000,0x0000}, {0x0001,0x0001,0x0001},
- {0x0002,0x0002,0x0002}, {0x0003,0x0003,0x0003},
- {0x0004,0x0004,0x0004}, {0x0005,0x0005,0x0005},
- {0x0006,0x0006,0x0006}, {0x0007,0x0007,0x0007},
- {0x0008,0x0008,0x0008}, {0x0009,0x0009,0x0009},
- {0x000A,0x000A,0x000A}, {0x000B,0x000B,0x000B},
- {0x000C,0x000C,0x000C}, {0x000D,0x000D,0x000D},
- {0x000E,0x000E,0x000E}, {0x000F,0x000F,0x000F},
- {0x0010,0x0010,0x0010}, {0x0011,0x0011,0x0011},
- {0x0012,0x0012,0x0012}, {0x0013,0x0013,0x0013},
- {0x0014,0x0014,0x0014}, {0x0015,0x0015,0x0015},
- {0x0016,0x0016,0x0016}, {0x0017,0x0017,0x0017},
- {0x0018,0x0018,0x0018}, {0x0019,0x0019,0x0019},
- {0x001A,0x001A,0x001A}, {0x001B,0x001B,0x001B},
- {0x001C,0x001C,0x001C}, {0x001D,0x001D,0x001D},
- {0x001E,0x001E,0x001E}, {0x001F,0x001F,0x001F},
- {0x0020,0x0020,0x0020}, {0x0021,0x0021,0x0021},
- {0x0022,0x0022,0x0022}, {0x0023,0x0023,0x0023},
- {0x0024,0x0024,0x0024}, {0x0025,0x0025,0x0025},
- {0x0026,0x0026,0x0026}, {0x0027,0x0027,0x0027},
- {0x0028,0x0028,0x0028}, {0x0029,0x0029,0x0029},
- {0x002A,0x002A,0x002A}, {0x002B,0x002B,0x002B},
- {0x002C,0x002C,0x002C}, {0x002D,0x002D,0x002D},
- {0x002E,0x002E,0x002E}, {0x002F,0x002F,0x002F},
- {0x0030,0x0030,0x0030}, {0x0031,0x0031,0x0031},
- {0x0032,0x0032,0x0032}, {0x0033,0x0033,0x0033},
- {0x0034,0x0034,0x0034}, {0x0035,0x0035,0x0035},
- {0x0036,0x0036,0x0036}, {0x0037,0x0037,0x0037},
- {0x0038,0x0038,0x0038}, {0x0039,0x0039,0x0039},
- {0x003A,0x003A,0x003A}, {0x003B,0x003B,0x003B},
- {0x003C,0x003C,0x003C}, {0x003D,0x003D,0x003D},
- {0x003E,0x003E,0x003E}, {0x003F,0x003F,0x003F},
- {0x0040,0x0040,0x0040}, {0x0041,0x0061,0x0041},
- {0x0042,0x0062,0x0042}, {0x0043,0x0063,0x0043},
- {0x0044,0x0064,0x0044}, {0x0045,0x0065,0x0045},
- {0x0046,0x0066,0x0046}, {0x0047,0x0067,0x0047},
- {0x0048,0x0068,0x0048}, {0x0049,0x0131,0x0049},
- {0x004A,0x006A,0x004A}, {0x004B,0x006B,0x004B},
- {0x004C,0x006C,0x004C}, {0x004D,0x006D,0x004D},
- {0x004E,0x006E,0x004E}, {0x004F,0x006F,0x004F},
- {0x0050,0x0070,0x0050}, {0x0051,0x0071,0x0051},
- {0x0052,0x0072,0x0052}, {0x0053,0x0073,0x0053},
- {0x0054,0x0074,0x0054}, {0x0055,0x0075,0x0055},
- {0x0056,0x0076,0x0056}, {0x0057,0x0077,0x0057},
- {0x0058,0x0078,0x0058}, {0x0059,0x0079,0x0059},
- {0x005A,0x007A,0x005A}, {0x005B,0x005B,0x005B},
- {0x005C,0x005C,0x005C}, {0x005D,0x005D,0x005D},
- {0x005E,0x005E,0x005E}, {0x005F,0x005F,0x005F},
- {0x0060,0x0060,0x0060}, {0x0041,0x0061,0x0041},
- {0x0042,0x0062,0x0042}, {0x0043,0x0063,0x0043},
- {0x0044,0x0064,0x0044}, {0x0045,0x0065,0x0045},
- {0x0046,0x0066,0x0046}, {0x0047,0x0067,0x0047},
- {0x0048,0x0068,0x0048}, {0x0130,0x0069,0x0049},
- {0x004A,0x006A,0x004A}, {0x004B,0x006B,0x004B},
- {0x004C,0x006C,0x004C}, {0x004D,0x006D,0x004D},
- {0x004E,0x006E,0x004E}, {0x004F,0x006F,0x004F},
- {0x0050,0x0070,0x0050}, {0x0051,0x0071,0x0051},
- {0x0052,0x0072,0x0052}, {0x0053,0x0073,0x0053},
- {0x0054,0x0074,0x0054}, {0x0055,0x0075,0x0055},
- {0x0056,0x0076,0x0056}, {0x0057,0x0077,0x0057},
- {0x0058,0x0078,0x0058}, {0x0059,0x0079,0x0059},
- {0x005A,0x007A,0x005A}, {0x007B,0x007B,0x007B},
- {0x007C,0x007C,0x007C}, {0x007D,0x007D,0x007D},
- {0x007E,0x007E,0x007E}, {0x007F,0x007F,0x007F},
- {0x0080,0x0080,0x0080}, {0x0081,0x0081,0x0081},
- {0x0082,0x0082,0x0082}, {0x0083,0x0083,0x0083},
- {0x0084,0x0084,0x0084}, {0x0085,0x0085,0x0085},
- {0x0086,0x0086,0x0086}, {0x0087,0x0087,0x0087},
- {0x0088,0x0088,0x0088}, {0x0089,0x0089,0x0089},
- {0x008A,0x008A,0x008A}, {0x008B,0x008B,0x008B},
- {0x008C,0x008C,0x008C}, {0x008D,0x008D,0x008D},
- {0x008E,0x008E,0x008E}, {0x008F,0x008F,0x008F},
- {0x0090,0x0090,0x0090}, {0x0091,0x0091,0x0091},
- {0x0092,0x0092,0x0092}, {0x0093,0x0093,0x0093},
- {0x0094,0x0094,0x0094}, {0x0095,0x0095,0x0095},
- {0x0096,0x0096,0x0096}, {0x0097,0x0097,0x0097},
- {0x0098,0x0098,0x0098}, {0x0099,0x0099,0x0099},
- {0x009A,0x009A,0x009A}, {0x009B,0x009B,0x009B},
- {0x009C,0x009C,0x009C}, {0x009D,0x009D,0x009D},
- {0x009E,0x009E,0x009E}, {0x009F,0x009F,0x009F},
- {0x00A0,0x00A0,0x00A0}, {0x00A1,0x00A1,0x00A1},
- {0x00A2,0x00A2,0x00A2}, {0x00A3,0x00A3,0x00A3},
- {0x00A4,0x00A4,0x00A4}, {0x00A5,0x00A5,0x00A5},
- {0x00A6,0x00A6,0x00A6}, {0x00A7,0x00A7,0x00A7},
- {0x00A8,0x00A8,0x00A8}, {0x00A9,0x00A9,0x00A9},
- {0x00AA,0x00AA,0x00AA}, {0x00AB,0x00AB,0x00AB},
- {0x00AC,0x00AC,0x00AC}, {0x00AD,0x00AD,0x00AD},
- {0x00AE,0x00AE,0x00AE}, {0x00AF,0x00AF,0x00AF},
- {0x00B0,0x00B0,0x00B0}, {0x00B1,0x00B1,0x00B1},
- {0x00B2,0x00B2,0x00B2}, {0x00B3,0x00B3,0x00B3},
- {0x00B4,0x00B4,0x00B4}, {0x039C,0x00B5,0x039C},
- {0x00B6,0x00B6,0x00B6}, {0x00B7,0x00B7,0x00B7},
- {0x00B8,0x00B8,0x00B8}, {0x00B9,0x00B9,0x00B9},
- {0x00BA,0x00BA,0x00BA}, {0x00BB,0x00BB,0x00BB},
- {0x00BC,0x00BC,0x00BC}, {0x00BD,0x00BD,0x00BD},
- {0x00BE,0x00BE,0x00BE}, {0x00BF,0x00BF,0x00BF},
- {0x00C0,0x00E0,0x0041}, {0x00C1,0x00E1,0x0041},
- {0x00C2,0x00E2,0x0041}, {0x00C3,0x00E3,0x0041},
- {0x00C4,0x00E4,0x0041}, {0x00C5,0x00E5,0x0041},
- {0x00C6,0x00E6,0x00C6}, {0x00C7,0x00E7,0x0043},
- {0x00C8,0x00E8,0x0045}, {0x00C9,0x00E9,0x0045},
- {0x00CA,0x00EA,0x0045}, {0x00CB,0x00EB,0x0045},
- {0x00CC,0x00EC,0x0049}, {0x00CD,0x00ED,0x0049},
- {0x00CE,0x00EE,0x0049}, {0x00CF,0x00EF,0x0049},
- {0x00D0,0x00F0,0x00D0}, {0x00D1,0x00F1,0x004E},
- {0x00D2,0x00F2,0x004F}, {0x00D3,0x00F3,0x004F},
- {0x00D4,0x00F4,0x004F}, {0x00D5,0x00F5,0x004F},
- {0x00D6,0x00F6,0x004F}, {0x00D7,0x00D7,0x00D7},
- {0x00D8,0x00F8,0x00D8}, {0x00D9,0x00F9,0x0055},
- {0x00DA,0x00FA,0x0055}, {0x00DB,0x00FB,0x0055},
- {0x00DC,0x00FC,0x0055}, {0x00DD,0x00FD,0x0059},
- {0x00DE,0x00FE,0x00DE}, {0x00DF,0x00DF,0x00DF},
- {0x00C0,0x00E0,0x0041}, {0x00C1,0x00E1,0x0041},
- {0x00C2,0x00E2,0x0041}, {0x00C3,0x00E3,0x0041},
- {0x00C4,0x00E4,0x0041}, {0x00C5,0x00E5,0x0041},
- {0x00C6,0x00E6,0x00C6}, {0x00C7,0x00E7,0x0043},
- {0x00C8,0x00E8,0x0045}, {0x00C9,0x00E9,0x0045},
- {0x00CA,0x00EA,0x0045}, {0x00CB,0x00EB,0x0045},
- {0x00CC,0x00EC,0x0049}, {0x00CD,0x00ED,0x0049},
- {0x00CE,0x00EE,0x0049}, {0x00CF,0x00EF,0x0049},
- {0x00D0,0x00F0,0x00D0}, {0x00D1,0x00F1,0x004E},
- {0x00D2,0x00F2,0x004F}, {0x00D3,0x00F3,0x004F},
- {0x00D4,0x00F4,0x004F}, {0x00D5,0x00F5,0x004F},
- {0x00D6,0x00F6,0x004F}, {0x00F7,0x00F7,0x00F7},
- {0x00D8,0x00F8,0x00D8}, {0x00D9,0x00F9,0x0055},
- {0x00DA,0x00FA,0x0055}, {0x00DB,0x00FB,0x0055},
- {0x00DC,0x00FC,0x0055}, {0x00DD,0x00FD,0x0059},
- {0x00DE,0x00FE,0x00DE}, {0x0178,0x00FF,0x0059}
-};
-
-
-
-static MY_UNICASE_CHARACTER *my_unicase_pages_turkish[256]=
-{
- turk00, plane01, plane02, plane03, plane04, plane05, plane06, plane07,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, plane1E, plane1F,
- NULL, plane21, NULL, NULL, plane24, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, planeFF
-};
-
-
-MY_UNICASE_INFO my_unicase_turkish=
-{
- 0xFFFF,
- my_unicase_pages_turkish
-};
-
-
-/* Unicode-5.2.0 case folding information */
-static MY_UNICASE_CHARACTER u520p00[]={
- {0x0000,0x0000,0x0000}, {0x0001,0x0001,0x0001}, /* 0000 */
- {0x0002,0x0002,0x0002}, {0x0003,0x0003,0x0003}, /* 0002 */
- {0x0004,0x0004,0x0004}, {0x0005,0x0005,0x0005}, /* 0004 */
- {0x0006,0x0006,0x0006}, {0x0007,0x0007,0x0007}, /* 0006 */
- {0x0008,0x0008,0x0008}, {0x0009,0x0009,0x0009}, /* 0008 */
- {0x000A,0x000A,0x000A}, {0x000B,0x000B,0x000B}, /* 000A */
- {0x000C,0x000C,0x000C}, {0x000D,0x000D,0x000D}, /* 000C */
- {0x000E,0x000E,0x000E}, {0x000F,0x000F,0x000F}, /* 000E */
- {0x0010,0x0010,0x0010}, {0x0011,0x0011,0x0011}, /* 0010 */
- {0x0012,0x0012,0x0012}, {0x0013,0x0013,0x0013}, /* 0012 */
- {0x0014,0x0014,0x0014}, {0x0015,0x0015,0x0015}, /* 0014 */
- {0x0016,0x0016,0x0016}, {0x0017,0x0017,0x0017}, /* 0016 */
- {0x0018,0x0018,0x0018}, {0x0019,0x0019,0x0019}, /* 0018 */
- {0x001A,0x001A,0x001A}, {0x001B,0x001B,0x001B}, /* 001A */
- {0x001C,0x001C,0x001C}, {0x001D,0x001D,0x001D}, /* 001C */
- {0x001E,0x001E,0x001E}, {0x001F,0x001F,0x001F}, /* 001E */
- {0x0020,0x0020,0x0020}, {0x0021,0x0021,0x0021}, /* 0020 */
- {0x0022,0x0022,0x0022}, {0x0023,0x0023,0x0023}, /* 0022 */
- {0x0024,0x0024,0x0024}, {0x0025,0x0025,0x0025}, /* 0024 */
- {0x0026,0x0026,0x0026}, {0x0027,0x0027,0x0027}, /* 0026 */
- {0x0028,0x0028,0x0028}, {0x0029,0x0029,0x0029}, /* 0028 */
- {0x002A,0x002A,0x002A}, {0x002B,0x002B,0x002B}, /* 002A */
- {0x002C,0x002C,0x002C}, {0x002D,0x002D,0x002D}, /* 002C */
- {0x002E,0x002E,0x002E}, {0x002F,0x002F,0x002F}, /* 002E */
- {0x0030,0x0030,0x0030}, {0x0031,0x0031,0x0031}, /* 0030 */
- {0x0032,0x0032,0x0032}, {0x0033,0x0033,0x0033}, /* 0032 */
- {0x0034,0x0034,0x0034}, {0x0035,0x0035,0x0035}, /* 0034 */
- {0x0036,0x0036,0x0036}, {0x0037,0x0037,0x0037}, /* 0036 */
- {0x0038,0x0038,0x0038}, {0x0039,0x0039,0x0039}, /* 0038 */
- {0x003A,0x003A,0x003A}, {0x003B,0x003B,0x003B}, /* 003A */
- {0x003C,0x003C,0x003C}, {0x003D,0x003D,0x003D}, /* 003C */
- {0x003E,0x003E,0x003E}, {0x003F,0x003F,0x003F}, /* 003E */
- {0x0040,0x0040,0x0040}, {0x0041,0x0061,0x0041}, /* 0040 */
- {0x0042,0x0062,0x0042}, {0x0043,0x0063,0x0043}, /* 0042 */
- {0x0044,0x0064,0x0044}, {0x0045,0x0065,0x0045}, /* 0044 */
- {0x0046,0x0066,0x0046}, {0x0047,0x0067,0x0047}, /* 0046 */
- {0x0048,0x0068,0x0048}, {0x0049,0x0069,0x0049}, /* 0048 */
- {0x004A,0x006A,0x004A}, {0x004B,0x006B,0x004B}, /* 004A */
- {0x004C,0x006C,0x004C}, {0x004D,0x006D,0x004D}, /* 004C */
- {0x004E,0x006E,0x004E}, {0x004F,0x006F,0x004F}, /* 004E */
- {0x0050,0x0070,0x0050}, {0x0051,0x0071,0x0051}, /* 0050 */
- {0x0052,0x0072,0x0052}, {0x0053,0x0073,0x0053}, /* 0052 */
- {0x0054,0x0074,0x0054}, {0x0055,0x0075,0x0055}, /* 0054 */
- {0x0056,0x0076,0x0056}, {0x0057,0x0077,0x0057}, /* 0056 */
- {0x0058,0x0078,0x0058}, {0x0059,0x0079,0x0059}, /* 0058 */
- {0x005A,0x007A,0x005A}, {0x005B,0x005B,0x005B}, /* 005A */
- {0x005C,0x005C,0x005C}, {0x005D,0x005D,0x005D}, /* 005C */
- {0x005E,0x005E,0x005E}, {0x005F,0x005F,0x005F}, /* 005E */
- {0x0060,0x0060,0x0060}, {0x0041,0x0061,0x0041}, /* 0060 */
- {0x0042,0x0062,0x0042}, {0x0043,0x0063,0x0043}, /* 0062 */
- {0x0044,0x0064,0x0044}, {0x0045,0x0065,0x0045}, /* 0064 */
- {0x0046,0x0066,0x0046}, {0x0047,0x0067,0x0047}, /* 0066 */
- {0x0048,0x0068,0x0048}, {0x0049,0x0069,0x0049}, /* 0068 */
- {0x004A,0x006A,0x004A}, {0x004B,0x006B,0x004B}, /* 006A */
- {0x004C,0x006C,0x004C}, {0x004D,0x006D,0x004D}, /* 006C */
- {0x004E,0x006E,0x004E}, {0x004F,0x006F,0x004F}, /* 006E */
- {0x0050,0x0070,0x0050}, {0x0051,0x0071,0x0051}, /* 0070 */
- {0x0052,0x0072,0x0052}, {0x0053,0x0073,0x0053}, /* 0072 */
- {0x0054,0x0074,0x0054}, {0x0055,0x0075,0x0055}, /* 0074 */
- {0x0056,0x0076,0x0056}, {0x0057,0x0077,0x0057}, /* 0076 */
- {0x0058,0x0078,0x0058}, {0x0059,0x0079,0x0059}, /* 0078 */
- {0x005A,0x007A,0x005A}, {0x007B,0x007B,0x007B}, /* 007A */
- {0x007C,0x007C,0x007C}, {0x007D,0x007D,0x007D}, /* 007C */
- {0x007E,0x007E,0x007E}, {0x007F,0x007F,0x007F}, /* 007E */
- {0x0080,0x0080,0x0080}, {0x0081,0x0081,0x0081}, /* 0080 */
- {0x0082,0x0082,0x0082}, {0x0083,0x0083,0x0083}, /* 0082 */
- {0x0084,0x0084,0x0084}, {0x0085,0x0085,0x0085}, /* 0084 */
- {0x0086,0x0086,0x0086}, {0x0087,0x0087,0x0087}, /* 0086 */
- {0x0088,0x0088,0x0088}, {0x0089,0x0089,0x0089}, /* 0088 */
- {0x008A,0x008A,0x008A}, {0x008B,0x008B,0x008B}, /* 008A */
- {0x008C,0x008C,0x008C}, {0x008D,0x008D,0x008D}, /* 008C */
- {0x008E,0x008E,0x008E}, {0x008F,0x008F,0x008F}, /* 008E */
- {0x0090,0x0090,0x0090}, {0x0091,0x0091,0x0091}, /* 0090 */
- {0x0092,0x0092,0x0092}, {0x0093,0x0093,0x0093}, /* 0092 */
- {0x0094,0x0094,0x0094}, {0x0095,0x0095,0x0095}, /* 0094 */
- {0x0096,0x0096,0x0096}, {0x0097,0x0097,0x0097}, /* 0096 */
- {0x0098,0x0098,0x0098}, {0x0099,0x0099,0x0099}, /* 0098 */
- {0x009A,0x009A,0x009A}, {0x009B,0x009B,0x009B}, /* 009A */
- {0x009C,0x009C,0x009C}, {0x009D,0x009D,0x009D}, /* 009C */
- {0x009E,0x009E,0x009E}, {0x009F,0x009F,0x009F}, /* 009E */
- {0x00A0,0x00A0,0x00A0}, {0x00A1,0x00A1,0x00A1}, /* 00A0 */
- {0x00A2,0x00A2,0x00A2}, {0x00A3,0x00A3,0x00A3}, /* 00A2 */
- {0x00A4,0x00A4,0x00A4}, {0x00A5,0x00A5,0x00A5}, /* 00A4 */
- {0x00A6,0x00A6,0x00A6}, {0x00A7,0x00A7,0x00A7}, /* 00A6 */
- {0x00A8,0x00A8,0x00A8}, {0x00A9,0x00A9,0x00A9}, /* 00A8 */
- {0x00AA,0x00AA,0x00AA}, {0x00AB,0x00AB,0x00AB}, /* 00AA */
- {0x00AC,0x00AC,0x00AC}, {0x00AD,0x00AD,0x00AD}, /* 00AC */
- {0x00AE,0x00AE,0x00AE}, {0x00AF,0x00AF,0x00AF}, /* 00AE */
- {0x00B0,0x00B0,0x00B0}, {0x00B1,0x00B1,0x00B1}, /* 00B0 */
- {0x00B2,0x00B2,0x00B2}, {0x00B3,0x00B3,0x00B3}, /* 00B2 */
- {0x00B4,0x00B4,0x00B4}, {0x039C,0x00B5,0x039C}, /* 00B4 */
- {0x00B6,0x00B6,0x00B6}, {0x00B7,0x00B7,0x00B7}, /* 00B6 */
- {0x00B8,0x00B8,0x00B8}, {0x00B9,0x00B9,0x00B9}, /* 00B8 */
- {0x00BA,0x00BA,0x00BA}, {0x00BB,0x00BB,0x00BB}, /* 00BA */
- {0x00BC,0x00BC,0x00BC}, {0x00BD,0x00BD,0x00BD}, /* 00BC */
- {0x00BE,0x00BE,0x00BE}, {0x00BF,0x00BF,0x00BF}, /* 00BE */
- {0x00C0,0x00E0,0x0041}, {0x00C1,0x00E1,0x0041}, /* 00C0 */
- {0x00C2,0x00E2,0x0041}, {0x00C3,0x00E3,0x0041}, /* 00C2 */
- {0x00C4,0x00E4,0x0041}, {0x00C5,0x00E5,0x0041}, /* 00C4 */
- {0x00C6,0x00E6,0x00C6}, {0x00C7,0x00E7,0x0043}, /* 00C6 */
- {0x00C8,0x00E8,0x0045}, {0x00C9,0x00E9,0x0045}, /* 00C8 */
- {0x00CA,0x00EA,0x0045}, {0x00CB,0x00EB,0x0045}, /* 00CA */
- {0x00CC,0x00EC,0x0049}, {0x00CD,0x00ED,0x0049}, /* 00CC */
- {0x00CE,0x00EE,0x0049}, {0x00CF,0x00EF,0x0049}, /* 00CE */
- {0x00D0,0x00F0,0x00D0}, {0x00D1,0x00F1,0x004E}, /* 00D0 */
- {0x00D2,0x00F2,0x004F}, {0x00D3,0x00F3,0x004F}, /* 00D2 */
- {0x00D4,0x00F4,0x004F}, {0x00D5,0x00F5,0x004F}, /* 00D4 */
- {0x00D6,0x00F6,0x004F}, {0x00D7,0x00D7,0x00D7}, /* 00D6 */
- {0x00D8,0x00F8,0x00D8}, {0x00D9,0x00F9,0x0055}, /* 00D8 */
- {0x00DA,0x00FA,0x0055}, {0x00DB,0x00FB,0x0055}, /* 00DA */
- {0x00DC,0x00FC,0x0055}, {0x00DD,0x00FD,0x0059}, /* 00DC */
- {0x00DE,0x00FE,0x00DE}, {0x00DF,0x00DF,0x0053}, /* 00DE */
- {0x00C0,0x00E0,0x0041}, {0x00C1,0x00E1,0x0041}, /* 00E0 */
- {0x00C2,0x00E2,0x0041}, {0x00C3,0x00E3,0x0041}, /* 00E2 */
- {0x00C4,0x00E4,0x0041}, {0x00C5,0x00E5,0x0041}, /* 00E4 */
- {0x00C6,0x00E6,0x00C6}, {0x00C7,0x00E7,0x0043}, /* 00E6 */
- {0x00C8,0x00E8,0x0045}, {0x00C9,0x00E9,0x0045}, /* 00E8 */
- {0x00CA,0x00EA,0x0045}, {0x00CB,0x00EB,0x0045}, /* 00EA */
- {0x00CC,0x00EC,0x0049}, {0x00CD,0x00ED,0x0049}, /* 00EC */
- {0x00CE,0x00EE,0x0049}, {0x00CF,0x00EF,0x0049}, /* 00EE */
- {0x00D0,0x00F0,0x00D0}, {0x00D1,0x00F1,0x004E}, /* 00F0 */
- {0x00D2,0x00F2,0x004F}, {0x00D3,0x00F3,0x004F}, /* 00F2 */
- {0x00D4,0x00F4,0x004F}, {0x00D5,0x00F5,0x004F}, /* 00F4 */
- {0x00D6,0x00F6,0x004F}, {0x00F7,0x00F7,0x00F7}, /* 00F6 */
- {0x00D8,0x00F8,0x00D8}, {0x00D9,0x00F9,0x0055}, /* 00F8 */
- {0x00DA,0x00FA,0x0055}, {0x00DB,0x00FB,0x0055}, /* 00FA */
- {0x00DC,0x00FC,0x0055}, {0x00DD,0x00FD,0x0059}, /* 00FC */
- {0x00DE,0x00FE,0x00DE}, {0x0178,0x00FF,0x0059} /* 00FE */
-};
-
-static MY_UNICASE_CHARACTER u520p01[]={
- {0x0100,0x0101,0x0041}, {0x0100,0x0101,0x0041}, /* 0100 */
- {0x0102,0x0103,0x0041}, {0x0102,0x0103,0x0041}, /* 0102 */
- {0x0104,0x0105,0x0041}, {0x0104,0x0105,0x0041}, /* 0104 */
- {0x0106,0x0107,0x0043}, {0x0106,0x0107,0x0043}, /* 0106 */
- {0x0108,0x0109,0x0043}, {0x0108,0x0109,0x0043}, /* 0108 */
- {0x010A,0x010B,0x0043}, {0x010A,0x010B,0x0043}, /* 010A */
- {0x010C,0x010D,0x0043}, {0x010C,0x010D,0x0043}, /* 010C */
- {0x010E,0x010F,0x0044}, {0x010E,0x010F,0x0044}, /* 010E */
- {0x0110,0x0111,0x0110}, {0x0110,0x0111,0x0110}, /* 0110 */
- {0x0112,0x0113,0x0045}, {0x0112,0x0113,0x0045}, /* 0112 */
- {0x0114,0x0115,0x0045}, {0x0114,0x0115,0x0045}, /* 0114 */
- {0x0116,0x0117,0x0045}, {0x0116,0x0117,0x0045}, /* 0116 */
- {0x0118,0x0119,0x0045}, {0x0118,0x0119,0x0045}, /* 0118 */
- {0x011A,0x011B,0x0045}, {0x011A,0x011B,0x0045}, /* 011A */
- {0x011C,0x011D,0x0047}, {0x011C,0x011D,0x0047}, /* 011C */
- {0x011E,0x011F,0x0047}, {0x011E,0x011F,0x0047}, /* 011E */
- {0x0120,0x0121,0x0047}, {0x0120,0x0121,0x0047}, /* 0120 */
- {0x0122,0x0123,0x0047}, {0x0122,0x0123,0x0047}, /* 0122 */
- {0x0124,0x0125,0x0048}, {0x0124,0x0125,0x0048}, /* 0124 */
- {0x0126,0x0127,0x0126}, {0x0126,0x0127,0x0126}, /* 0126 */
- {0x0128,0x0129,0x0049}, {0x0128,0x0129,0x0049}, /* 0128 */
- {0x012A,0x012B,0x0049}, {0x012A,0x012B,0x0049}, /* 012A */
- {0x012C,0x012D,0x0049}, {0x012C,0x012D,0x0049}, /* 012C */
- {0x012E,0x012F,0x0049}, {0x012E,0x012F,0x0049}, /* 012E */
- {0x0130,0x0069,0x0049}, {0x0049,0x0131,0x0049}, /* 0130 */
- {0x0132,0x0133,0x0132}, {0x0132,0x0133,0x0132}, /* 0132 */
- {0x0134,0x0135,0x004A}, {0x0134,0x0135,0x004A}, /* 0134 */
- {0x0136,0x0137,0x004B}, {0x0136,0x0137,0x004B}, /* 0136 */
- {0x0138,0x0138,0x0138}, {0x0139,0x013A,0x004C}, /* 0138 */
- {0x0139,0x013A,0x004C}, {0x013B,0x013C,0x004C}, /* 013A */
- {0x013B,0x013C,0x004C}, {0x013D,0x013E,0x004C}, /* 013C */
- {0x013D,0x013E,0x004C}, {0x013F,0x0140,0x013F}, /* 013E */
- {0x013F,0x0140,0x013F}, {0x0141,0x0142,0x0141}, /* 0140 */
- {0x0141,0x0142,0x0141}, {0x0143,0x0144,0x004E}, /* 0142 */
- {0x0143,0x0144,0x004E}, {0x0145,0x0146,0x004E}, /* 0144 */
- {0x0145,0x0146,0x004E}, {0x0147,0x0148,0x004E}, /* 0146 */
- {0x0147,0x0148,0x004E}, {0x0149,0x0149,0x0149}, /* 0148 */
- {0x014A,0x014B,0x014A}, {0x014A,0x014B,0x014A}, /* 014A */
- {0x014C,0x014D,0x004F}, {0x014C,0x014D,0x004F}, /* 014C */
- {0x014E,0x014F,0x004F}, {0x014E,0x014F,0x004F}, /* 014E */
- {0x0150,0x0151,0x004F}, {0x0150,0x0151,0x004F}, /* 0150 */
- {0x0152,0x0153,0x0152}, {0x0152,0x0153,0x0152}, /* 0152 */
- {0x0154,0x0155,0x0052}, {0x0154,0x0155,0x0052}, /* 0154 */
- {0x0156,0x0157,0x0052}, {0x0156,0x0157,0x0052}, /* 0156 */
- {0x0158,0x0159,0x0052}, {0x0158,0x0159,0x0052}, /* 0158 */
- {0x015A,0x015B,0x0053}, {0x015A,0x015B,0x0053}, /* 015A */
- {0x015C,0x015D,0x0053}, {0x015C,0x015D,0x0053}, /* 015C */
- {0x015E,0x015F,0x0053}, {0x015E,0x015F,0x0053}, /* 015E */
- {0x0160,0x0161,0x0053}, {0x0160,0x0161,0x0053}, /* 0160 */
- {0x0162,0x0163,0x0054}, {0x0162,0x0163,0x0054}, /* 0162 */
- {0x0164,0x0165,0x0054}, {0x0164,0x0165,0x0054}, /* 0164 */
- {0x0166,0x0167,0x0166}, {0x0166,0x0167,0x0166}, /* 0166 */
- {0x0168,0x0169,0x0055}, {0x0168,0x0169,0x0055}, /* 0168 */
- {0x016A,0x016B,0x0055}, {0x016A,0x016B,0x0055}, /* 016A */
- {0x016C,0x016D,0x0055}, {0x016C,0x016D,0x0055}, /* 016C */
- {0x016E,0x016F,0x0055}, {0x016E,0x016F,0x0055}, /* 016E */
- {0x0170,0x0171,0x0055}, {0x0170,0x0171,0x0055}, /* 0170 */
- {0x0172,0x0173,0x0055}, {0x0172,0x0173,0x0055}, /* 0172 */
- {0x0174,0x0175,0x0057}, {0x0174,0x0175,0x0057}, /* 0174 */
- {0x0176,0x0177,0x0059}, {0x0176,0x0177,0x0059}, /* 0176 */
- {0x0178,0x00FF,0x0059}, {0x0179,0x017A,0x005A}, /* 0178 */
- {0x0179,0x017A,0x005A}, {0x017B,0x017C,0x005A}, /* 017A */
- {0x017B,0x017C,0x005A}, {0x017D,0x017E,0x005A}, /* 017C */
- {0x017D,0x017E,0x005A}, {0x0053,0x017F,0x0053}, /* 017E */
- {0x0243,0x0180,0x0243}, {0x0181,0x0253,0x0181}, /* 0180 */
- {0x0182,0x0183,0x0182}, {0x0182,0x0183,0x0182}, /* 0182 */
- {0x0184,0x0185,0x0184}, {0x0184,0x0185,0x0184}, /* 0184 */
- {0x0186,0x0254,0x0186}, {0x0187,0x0188,0x0187}, /* 0186 */
- {0x0187,0x0188,0x0187}, {0x0189,0x0256,0x0189}, /* 0188 */
- {0x018A,0x0257,0x018A}, {0x018B,0x018C,0x018B}, /* 018A */
- {0x018B,0x018C,0x018B}, {0x018D,0x018D,0x018D}, /* 018C */
- {0x018E,0x01DD,0x018E}, {0x018F,0x0259,0x018F}, /* 018E */
- {0x0190,0x025B,0x0190}, {0x0191,0x0192,0x0191}, /* 0190 */
- {0x0191,0x0192,0x0191}, {0x0193,0x0260,0x0193}, /* 0192 */
- {0x0194,0x0263,0x0194}, {0x01F6,0x0195,0x01F6}, /* 0194 */
- {0x0196,0x0269,0x0196}, {0x0197,0x0268,0x0197}, /* 0196 */
- {0x0198,0x0199,0x0198}, {0x0198,0x0199,0x0198}, /* 0198 */
- {0x023D,0x019A,0x023D}, {0x019B,0x019B,0x019B}, /* 019A */
- {0x019C,0x026F,0x019C}, {0x019D,0x0272,0x019D}, /* 019C */
- {0x0220,0x019E,0x0220}, {0x019F,0x0275,0x019F}, /* 019E */
- {0x01A0,0x01A1,0x004F}, {0x01A0,0x01A1,0x004F}, /* 01A0 */
- {0x01A2,0x01A3,0x01A2}, {0x01A2,0x01A3,0x01A2}, /* 01A2 */
- {0x01A4,0x01A5,0x01A4}, {0x01A4,0x01A5,0x01A4}, /* 01A4 */
- {0x01A6,0x0280,0x01A6}, {0x01A7,0x01A8,0x01A7}, /* 01A6 */
- {0x01A7,0x01A8,0x01A7}, {0x01A9,0x0283,0x01A9}, /* 01A8 */
- {0x01AA,0x01AA,0x01AA}, {0x01AB,0x01AB,0x01AB}, /* 01AA */
- {0x01AC,0x01AD,0x01AC}, {0x01AC,0x01AD,0x01AC}, /* 01AC */
- {0x01AE,0x0288,0x01AE}, {0x01AF,0x01B0,0x0055}, /* 01AE */
- {0x01AF,0x01B0,0x0055}, {0x01B1,0x028A,0x01B1}, /* 01B0 */
- {0x01B2,0x028B,0x01B2}, {0x01B3,0x01B4,0x01B3}, /* 01B2 */
- {0x01B3,0x01B4,0x01B3}, {0x01B5,0x01B6,0x01B5}, /* 01B4 */
- {0x01B5,0x01B6,0x01B5}, {0x01B7,0x0292,0x01B7}, /* 01B6 */
- {0x01B8,0x01B9,0x01B8}, {0x01B8,0x01B9,0x01B8}, /* 01B8 */
- {0x01BA,0x01BA,0x01BA}, {0x01BB,0x01BB,0x01BB}, /* 01BA */
- {0x01BC,0x01BD,0x01BC}, {0x01BC,0x01BD,0x01BC}, /* 01BC */
- {0x01BE,0x01BE,0x01BE}, {0x01F7,0x01BF,0x01F7}, /* 01BE */
- {0x01C0,0x01C0,0x01C0}, {0x01C1,0x01C1,0x01C1}, /* 01C0 */
- {0x01C2,0x01C2,0x01C2}, {0x01C3,0x01C3,0x01C3}, /* 01C2 */
- {0x01C4,0x01C6,0x01C4}, {0x01C4,0x01C6,0x01C4}, /* 01C4 */
- {0x01C4,0x01C6,0x01C4}, {0x01C7,0x01C9,0x01C7}, /* 01C6 */
- {0x01C7,0x01C9,0x01C7}, {0x01C7,0x01C9,0x01C7}, /* 01C8 */
- {0x01CA,0x01CC,0x01CA}, {0x01CA,0x01CC,0x01CA}, /* 01CA */
- {0x01CA,0x01CC,0x01CA}, {0x01CD,0x01CE,0x0041}, /* 01CC */
- {0x01CD,0x01CE,0x0041}, {0x01CF,0x01D0,0x0049}, /* 01CE */
- {0x01CF,0x01D0,0x0049}, {0x01D1,0x01D2,0x004F}, /* 01D0 */
- {0x01D1,0x01D2,0x004F}, {0x01D3,0x01D4,0x0055}, /* 01D2 */
- {0x01D3,0x01D4,0x0055}, {0x01D5,0x01D6,0x0055}, /* 01D4 */
- {0x01D5,0x01D6,0x0055}, {0x01D7,0x01D8,0x0055}, /* 01D6 */
- {0x01D7,0x01D8,0x0055}, {0x01D9,0x01DA,0x0055}, /* 01D8 */
- {0x01D9,0x01DA,0x0055}, {0x01DB,0x01DC,0x0055}, /* 01DA */
- {0x01DB,0x01DC,0x0055}, {0x018E,0x01DD,0x018E}, /* 01DC */
- {0x01DE,0x01DF,0x0041}, {0x01DE,0x01DF,0x0041}, /* 01DE */
- {0x01E0,0x01E1,0x0041}, {0x01E0,0x01E1,0x0041}, /* 01E0 */
- {0x01E2,0x01E3,0x00C6}, {0x01E2,0x01E3,0x00C6}, /* 01E2 */
- {0x01E4,0x01E5,0x01E4}, {0x01E4,0x01E5,0x01E4}, /* 01E4 */
- {0x01E6,0x01E7,0x0047}, {0x01E6,0x01E7,0x0047}, /* 01E6 */
- {0x01E8,0x01E9,0x004B}, {0x01E8,0x01E9,0x004B}, /* 01E8 */
- {0x01EA,0x01EB,0x004F}, {0x01EA,0x01EB,0x004F}, /* 01EA */
- {0x01EC,0x01ED,0x004F}, {0x01EC,0x01ED,0x004F}, /* 01EC */
- {0x01EE,0x01EF,0x01B7}, {0x01EE,0x01EF,0x01B7}, /* 01EE */
- {0x01F0,0x01F0,0x004A}, {0x01F1,0x01F3,0x01F1}, /* 01F0 */
- {0x01F1,0x01F3,0x01F1}, {0x01F1,0x01F3,0x01F1}, /* 01F2 */
- {0x01F4,0x01F5,0x0047}, {0x01F4,0x01F5,0x0047}, /* 01F4 */
- {0x01F6,0x0195,0x01F6}, {0x01F7,0x01BF,0x01F7}, /* 01F6 */
- {0x01F8,0x01F9,0x004E}, {0x01F8,0x01F9,0x004E}, /* 01F8 */
- {0x01FA,0x01FB,0x0041}, {0x01FA,0x01FB,0x0041}, /* 01FA */
- {0x01FC,0x01FD,0x00C6}, {0x01FC,0x01FD,0x00C6}, /* 01FC */
- {0x01FE,0x01FF,0x00D8}, {0x01FE,0x01FF,0x00D8} /* 01FE */
-};
-
-static MY_UNICASE_CHARACTER u520p02[]={
- {0x0200,0x0201,0x0041}, {0x0200,0x0201,0x0041}, /* 0200 */
- {0x0202,0x0203,0x0041}, {0x0202,0x0203,0x0041}, /* 0202 */
- {0x0204,0x0205,0x0045}, {0x0204,0x0205,0x0045}, /* 0204 */
- {0x0206,0x0207,0x0045}, {0x0206,0x0207,0x0045}, /* 0206 */
- {0x0208,0x0209,0x0049}, {0x0208,0x0209,0x0049}, /* 0208 */
- {0x020A,0x020B,0x0049}, {0x020A,0x020B,0x0049}, /* 020A */
- {0x020C,0x020D,0x004F}, {0x020C,0x020D,0x004F}, /* 020C */
- {0x020E,0x020F,0x004F}, {0x020E,0x020F,0x004F}, /* 020E */
- {0x0210,0x0211,0x0052}, {0x0210,0x0211,0x0052}, /* 0210 */
- {0x0212,0x0213,0x0052}, {0x0212,0x0213,0x0052}, /* 0212 */
- {0x0214,0x0215,0x0055}, {0x0214,0x0215,0x0055}, /* 0214 */
- {0x0216,0x0217,0x0055}, {0x0216,0x0217,0x0055}, /* 0216 */
- {0x0218,0x0219,0x0053}, {0x0218,0x0219,0x0053}, /* 0218 */
- {0x021A,0x021B,0x0054}, {0x021A,0x021B,0x0054}, /* 021A */
- {0x021C,0x021D,0x021C}, {0x021C,0x021D,0x021C}, /* 021C */
- {0x021E,0x021F,0x0048}, {0x021E,0x021F,0x0048}, /* 021E */
- {0x0220,0x019E,0x0220}, {0x0221,0x0221,0x0221}, /* 0220 */
- {0x0222,0x0223,0x0222}, {0x0222,0x0223,0x0222}, /* 0222 */
- {0x0224,0x0225,0x0224}, {0x0224,0x0225,0x0224}, /* 0224 */
- {0x0226,0x0227,0x0041}, {0x0226,0x0227,0x0041}, /* 0226 */
- {0x0228,0x0229,0x0045}, {0x0228,0x0229,0x0045}, /* 0228 */
- {0x022A,0x022B,0x004F}, {0x022A,0x022B,0x004F}, /* 022A */
- {0x022C,0x022D,0x004F}, {0x022C,0x022D,0x004F}, /* 022C */
- {0x022E,0x022F,0x004F}, {0x022E,0x022F,0x004F}, /* 022E */
- {0x0230,0x0231,0x004F}, {0x0230,0x0231,0x004F}, /* 0230 */
- {0x0232,0x0233,0x0059}, {0x0232,0x0233,0x0059}, /* 0232 */
- {0x0234,0x0234,0x0234}, {0x0235,0x0235,0x0235}, /* 0234 */
- {0x0236,0x0236,0x0236}, {0x0237,0x0237,0x0237}, /* 0236 */
- {0x0238,0x0238,0x0238}, {0x0239,0x0239,0x0239}, /* 0238 */
- {0x023A,0x2C65,0x023A}, {0x023B,0x023C,0x023B}, /* 023A */
- {0x023B,0x023C,0x023B}, {0x023D,0x019A,0x023D}, /* 023C */
- {0x023E,0x2C66,0x023E}, {0x2C7E,0x023F,0x2C7E}, /* 023E */
- {0x2C7F,0x0240,0x2C7F}, {0x0241,0x0242,0x0241}, /* 0240 */
- {0x0241,0x0242,0x0241}, {0x0243,0x0180,0x0243}, /* 0242 */
- {0x0244,0x0289,0x0244}, {0x0245,0x028C,0x0245}, /* 0244 */
- {0x0246,0x0247,0x0246}, {0x0246,0x0247,0x0246}, /* 0246 */
- {0x0248,0x0249,0x0248}, {0x0248,0x0249,0x0248}, /* 0248 */
- {0x024A,0x024B,0x024A}, {0x024A,0x024B,0x024A}, /* 024A */
- {0x024C,0x024D,0x024C}, {0x024C,0x024D,0x024C}, /* 024C */
- {0x024E,0x024F,0x024E}, {0x024E,0x024F,0x024E}, /* 024E */
- {0x2C6F,0x0250,0x2C6F}, {0x2C6D,0x0251,0x2C6D}, /* 0250 */
- {0x2C70,0x0252,0x2C70}, {0x0181,0x0253,0x0181}, /* 0252 */
- {0x0186,0x0254,0x0186}, {0x0255,0x0255,0x0255}, /* 0254 */
- {0x0189,0x0256,0x0189}, {0x018A,0x0257,0x018A}, /* 0256 */
- {0x0258,0x0258,0x0258}, {0x018F,0x0259,0x018F}, /* 0258 */
- {0x025A,0x025A,0x025A}, {0x0190,0x025B,0x0190}, /* 025A */
- {0x025C,0x025C,0x025C}, {0x025D,0x025D,0x025D}, /* 025C */
- {0x025E,0x025E,0x025E}, {0x025F,0x025F,0x025F}, /* 025E */
- {0x0193,0x0260,0x0193}, {0x0261,0x0261,0x0261}, /* 0260 */
- {0x0262,0x0262,0x0262}, {0x0194,0x0263,0x0194}, /* 0262 */
- {0x0264,0x0264,0x0264}, {0x0265,0x0265,0x0265}, /* 0264 */
- {0x0266,0x0266,0x0266}, {0x0267,0x0267,0x0267}, /* 0266 */
- {0x0197,0x0268,0x0197}, {0x0196,0x0269,0x0196}, /* 0268 */
- {0x026A,0x026A,0x026A}, {0x2C62,0x026B,0x2C62}, /* 026A */
- {0x026C,0x026C,0x026C}, {0x026D,0x026D,0x026D}, /* 026C */
- {0x026E,0x026E,0x026E}, {0x019C,0x026F,0x019C}, /* 026E */
- {0x0270,0x0270,0x0270}, {0x2C6E,0x0271,0x2C6E}, /* 0270 */
- {0x019D,0x0272,0x019D}, {0x0273,0x0273,0x0273}, /* 0272 */
- {0x0274,0x0274,0x0274}, {0x019F,0x0275,0x019F}, /* 0274 */
- {0x0276,0x0276,0x0276}, {0x0277,0x0277,0x0277}, /* 0276 */
- {0x0278,0x0278,0x0278}, {0x0279,0x0279,0x0279}, /* 0278 */
- {0x027A,0x027A,0x027A}, {0x027B,0x027B,0x027B}, /* 027A */
- {0x027C,0x027C,0x027C}, {0x2C64,0x027D,0x2C64}, /* 027C */
- {0x027E,0x027E,0x027E}, {0x027F,0x027F,0x027F}, /* 027E */
- {0x01A6,0x0280,0x01A6}, {0x0281,0x0281,0x0281}, /* 0280 */
- {0x0282,0x0282,0x0282}, {0x01A9,0x0283,0x01A9}, /* 0282 */
- {0x0284,0x0284,0x0284}, {0x0285,0x0285,0x0285}, /* 0284 */
- {0x0286,0x0286,0x0286}, {0x0287,0x0287,0x0287}, /* 0286 */
- {0x01AE,0x0288,0x01AE}, {0x0244,0x0289,0x0244}, /* 0288 */
- {0x01B1,0x028A,0x01B1}, {0x01B2,0x028B,0x01B2}, /* 028A */
- {0x0245,0x028C,0x0245}, {0x028D,0x028D,0x028D}, /* 028C */
- {0x028E,0x028E,0x028E}, {0x028F,0x028F,0x028F}, /* 028E */
- {0x0290,0x0290,0x0290}, {0x0291,0x0291,0x0291}, /* 0290 */
- {0x01B7,0x0292,0x01B7}, {0x0293,0x0293,0x0293}, /* 0292 */
- {0x0294,0x0294,0x0294}, {0x0295,0x0295,0x0295}, /* 0294 */
- {0x0296,0x0296,0x0296}, {0x0297,0x0297,0x0297}, /* 0296 */
- {0x0298,0x0298,0x0298}, {0x0299,0x0299,0x0299}, /* 0298 */
- {0x029A,0x029A,0x029A}, {0x029B,0x029B,0x029B}, /* 029A */
- {0x029C,0x029C,0x029C}, {0x029D,0x029D,0x029D}, /* 029C */
- {0x029E,0x029E,0x029E}, {0x029F,0x029F,0x029F}, /* 029E */
- {0x02A0,0x02A0,0x02A0}, {0x02A1,0x02A1,0x02A1}, /* 02A0 */
- {0x02A2,0x02A2,0x02A2}, {0x02A3,0x02A3,0x02A3}, /* 02A2 */
- {0x02A4,0x02A4,0x02A4}, {0x02A5,0x02A5,0x02A5}, /* 02A4 */
- {0x02A6,0x02A6,0x02A6}, {0x02A7,0x02A7,0x02A7}, /* 02A6 */
- {0x02A8,0x02A8,0x02A8}, {0x02A9,0x02A9,0x02A9}, /* 02A8 */
- {0x02AA,0x02AA,0x02AA}, {0x02AB,0x02AB,0x02AB}, /* 02AA */
- {0x02AC,0x02AC,0x02AC}, {0x02AD,0x02AD,0x02AD}, /* 02AC */
- {0x02AE,0x02AE,0x02AE}, {0x02AF,0x02AF,0x02AF}, /* 02AE */
- {0x02B0,0x02B0,0x02B0}, {0x02B1,0x02B1,0x02B1}, /* 02B0 */
- {0x02B2,0x02B2,0x02B2}, {0x02B3,0x02B3,0x02B3}, /* 02B2 */
- {0x02B4,0x02B4,0x02B4}, {0x02B5,0x02B5,0x02B5}, /* 02B4 */
- {0x02B6,0x02B6,0x02B6}, {0x02B7,0x02B7,0x02B7}, /* 02B6 */
- {0x02B8,0x02B8,0x02B8}, {0x02B9,0x02B9,0x02B9}, /* 02B8 */
- {0x02BA,0x02BA,0x02BA}, {0x02BB,0x02BB,0x02BB}, /* 02BA */
- {0x02BC,0x02BC,0x02BC}, {0x02BD,0x02BD,0x02BD}, /* 02BC */
- {0x02BE,0x02BE,0x02BE}, {0x02BF,0x02BF,0x02BF}, /* 02BE */
- {0x02C0,0x02C0,0x02C0}, {0x02C1,0x02C1,0x02C1}, /* 02C0 */
- {0x02C2,0x02C2,0x02C2}, {0x02C3,0x02C3,0x02C3}, /* 02C2 */
- {0x02C4,0x02C4,0x02C4}, {0x02C5,0x02C5,0x02C5}, /* 02C4 */
- {0x02C6,0x02C6,0x02C6}, {0x02C7,0x02C7,0x02C7}, /* 02C6 */
- {0x02C8,0x02C8,0x02C8}, {0x02C9,0x02C9,0x02C9}, /* 02C8 */
- {0x02CA,0x02CA,0x02CA}, {0x02CB,0x02CB,0x02CB}, /* 02CA */
- {0x02CC,0x02CC,0x02CC}, {0x02CD,0x02CD,0x02CD}, /* 02CC */
- {0x02CE,0x02CE,0x02CE}, {0x02CF,0x02CF,0x02CF}, /* 02CE */
- {0x02D0,0x02D0,0x02D0}, {0x02D1,0x02D1,0x02D1}, /* 02D0 */
- {0x02D2,0x02D2,0x02D2}, {0x02D3,0x02D3,0x02D3}, /* 02D2 */
- {0x02D4,0x02D4,0x02D4}, {0x02D5,0x02D5,0x02D5}, /* 02D4 */
- {0x02D6,0x02D6,0x02D6}, {0x02D7,0x02D7,0x02D7}, /* 02D6 */
- {0x02D8,0x02D8,0x02D8}, {0x02D9,0x02D9,0x02D9}, /* 02D8 */
- {0x02DA,0x02DA,0x02DA}, {0x02DB,0x02DB,0x02DB}, /* 02DA */
- {0x02DC,0x02DC,0x02DC}, {0x02DD,0x02DD,0x02DD}, /* 02DC */
- {0x02DE,0x02DE,0x02DE}, {0x02DF,0x02DF,0x02DF}, /* 02DE */
- {0x02E0,0x02E0,0x02E0}, {0x02E1,0x02E1,0x02E1}, /* 02E0 */
- {0x02E2,0x02E2,0x02E2}, {0x02E3,0x02E3,0x02E3}, /* 02E2 */
- {0x02E4,0x02E4,0x02E4}, {0x02E5,0x02E5,0x02E5}, /* 02E4 */
- {0x02E6,0x02E6,0x02E6}, {0x02E7,0x02E7,0x02E7}, /* 02E6 */
- {0x02E8,0x02E8,0x02E8}, {0x02E9,0x02E9,0x02E9}, /* 02E8 */
- {0x02EA,0x02EA,0x02EA}, {0x02EB,0x02EB,0x02EB}, /* 02EA */
- {0x02EC,0x02EC,0x02EC}, {0x02ED,0x02ED,0x02ED}, /* 02EC */
- {0x02EE,0x02EE,0x02EE}, {0x02EF,0x02EF,0x02EF}, /* 02EE */
- {0x02F0,0x02F0,0x02F0}, {0x02F1,0x02F1,0x02F1}, /* 02F0 */
- {0x02F2,0x02F2,0x02F2}, {0x02F3,0x02F3,0x02F3}, /* 02F2 */
- {0x02F4,0x02F4,0x02F4}, {0x02F5,0x02F5,0x02F5}, /* 02F4 */
- {0x02F6,0x02F6,0x02F6}, {0x02F7,0x02F7,0x02F7}, /* 02F6 */
- {0x02F8,0x02F8,0x02F8}, {0x02F9,0x02F9,0x02F9}, /* 02F8 */
- {0x02FA,0x02FA,0x02FA}, {0x02FB,0x02FB,0x02FB}, /* 02FA */
- {0x02FC,0x02FC,0x02FC}, {0x02FD,0x02FD,0x02FD}, /* 02FC */
- {0x02FE,0x02FE,0x02FE}, {0x02FF,0x02FF,0x02FF} /* 02FE */
-};
-
-static MY_UNICASE_CHARACTER u520p03[]={
- {0x0300,0x0300,0x0300}, {0x0301,0x0301,0x0301}, /* 0300 */
- {0x0302,0x0302,0x0302}, {0x0303,0x0303,0x0303}, /* 0302 */
- {0x0304,0x0304,0x0304}, {0x0305,0x0305,0x0305}, /* 0304 */
- {0x0306,0x0306,0x0306}, {0x0307,0x0307,0x0307}, /* 0306 */
- {0x0308,0x0308,0x0308}, {0x0309,0x0309,0x0309}, /* 0308 */
- {0x030A,0x030A,0x030A}, {0x030B,0x030B,0x030B}, /* 030A */
- {0x030C,0x030C,0x030C}, {0x030D,0x030D,0x030D}, /* 030C */
- {0x030E,0x030E,0x030E}, {0x030F,0x030F,0x030F}, /* 030E */
- {0x0310,0x0310,0x0310}, {0x0311,0x0311,0x0311}, /* 0310 */
- {0x0312,0x0312,0x0312}, {0x0313,0x0313,0x0313}, /* 0312 */
- {0x0314,0x0314,0x0314}, {0x0315,0x0315,0x0315}, /* 0314 */
- {0x0316,0x0316,0x0316}, {0x0317,0x0317,0x0317}, /* 0316 */
- {0x0318,0x0318,0x0318}, {0x0319,0x0319,0x0319}, /* 0318 */
- {0x031A,0x031A,0x031A}, {0x031B,0x031B,0x031B}, /* 031A */
- {0x031C,0x031C,0x031C}, {0x031D,0x031D,0x031D}, /* 031C */
- {0x031E,0x031E,0x031E}, {0x031F,0x031F,0x031F}, /* 031E */
- {0x0320,0x0320,0x0320}, {0x0321,0x0321,0x0321}, /* 0320 */
- {0x0322,0x0322,0x0322}, {0x0323,0x0323,0x0323}, /* 0322 */
- {0x0324,0x0324,0x0324}, {0x0325,0x0325,0x0325}, /* 0324 */
- {0x0326,0x0326,0x0326}, {0x0327,0x0327,0x0327}, /* 0326 */
- {0x0328,0x0328,0x0328}, {0x0329,0x0329,0x0329}, /* 0328 */
- {0x032A,0x032A,0x032A}, {0x032B,0x032B,0x032B}, /* 032A */
- {0x032C,0x032C,0x032C}, {0x032D,0x032D,0x032D}, /* 032C */
- {0x032E,0x032E,0x032E}, {0x032F,0x032F,0x032F}, /* 032E */
- {0x0330,0x0330,0x0330}, {0x0331,0x0331,0x0331}, /* 0330 */
- {0x0332,0x0332,0x0332}, {0x0333,0x0333,0x0333}, /* 0332 */
- {0x0334,0x0334,0x0334}, {0x0335,0x0335,0x0335}, /* 0334 */
- {0x0336,0x0336,0x0336}, {0x0337,0x0337,0x0337}, /* 0336 */
- {0x0338,0x0338,0x0338}, {0x0339,0x0339,0x0339}, /* 0338 */
- {0x033A,0x033A,0x033A}, {0x033B,0x033B,0x033B}, /* 033A */
- {0x033C,0x033C,0x033C}, {0x033D,0x033D,0x033D}, /* 033C */
- {0x033E,0x033E,0x033E}, {0x033F,0x033F,0x033F}, /* 033E */
- {0x0340,0x0340,0x0340}, {0x0341,0x0341,0x0341}, /* 0340 */
- {0x0342,0x0342,0x0342}, {0x0343,0x0343,0x0343}, /* 0342 */
- {0x0344,0x0344,0x0344}, {0x0399,0x0345,0x0399}, /* 0344 */
- {0x0346,0x0346,0x0346}, {0x0347,0x0347,0x0347}, /* 0346 */
- {0x0348,0x0348,0x0348}, {0x0349,0x0349,0x0349}, /* 0348 */
- {0x034A,0x034A,0x034A}, {0x034B,0x034B,0x034B}, /* 034A */
- {0x034C,0x034C,0x034C}, {0x034D,0x034D,0x034D}, /* 034C */
- {0x034E,0x034E,0x034E}, {0x034F,0x034F,0x034F}, /* 034E */
- {0x0350,0x0350,0x0350}, {0x0351,0x0351,0x0351}, /* 0350 */
- {0x0352,0x0352,0x0352}, {0x0353,0x0353,0x0353}, /* 0352 */
- {0x0354,0x0354,0x0354}, {0x0355,0x0355,0x0355}, /* 0354 */
- {0x0356,0x0356,0x0356}, {0x0357,0x0357,0x0357}, /* 0356 */
- {0x0358,0x0358,0x0358}, {0x0359,0x0359,0x0359}, /* 0358 */
- {0x035A,0x035A,0x035A}, {0x035B,0x035B,0x035B}, /* 035A */
- {0x035C,0x035C,0x035C}, {0x035D,0x035D,0x035D}, /* 035C */
- {0x035E,0x035E,0x035E}, {0x035F,0x035F,0x035F}, /* 035E */
- {0x0360,0x0360,0x0360}, {0x0361,0x0361,0x0361}, /* 0360 */
- {0x0362,0x0362,0x0362}, {0x0363,0x0363,0x0363}, /* 0362 */
- {0x0364,0x0364,0x0364}, {0x0365,0x0365,0x0365}, /* 0364 */
- {0x0366,0x0366,0x0366}, {0x0367,0x0367,0x0367}, /* 0366 */
- {0x0368,0x0368,0x0368}, {0x0369,0x0369,0x0369}, /* 0368 */
- {0x036A,0x036A,0x036A}, {0x036B,0x036B,0x036B}, /* 036A */
- {0x036C,0x036C,0x036C}, {0x036D,0x036D,0x036D}, /* 036C */
- {0x036E,0x036E,0x036E}, {0x036F,0x036F,0x036F}, /* 036E */
- {0x0370,0x0371,0x0370}, {0x0370,0x0371,0x0370}, /* 0370 */
- {0x0372,0x0373,0x0372}, {0x0372,0x0373,0x0372}, /* 0372 */
- {0x0374,0x0374,0x0374}, {0x0375,0x0375,0x0375}, /* 0374 */
- {0x0376,0x0377,0x0376}, {0x0376,0x0377,0x0376}, /* 0376 */
- {0x0378,0x0378,0x0378}, {0x0379,0x0379,0x0379}, /* 0378 */
- {0x037A,0x037A,0x037A}, {0x03FD,0x037B,0x03FD}, /* 037A */
- {0x03FE,0x037C,0x03FE}, {0x03FF,0x037D,0x03FF}, /* 037C */
- {0x037E,0x037E,0x037E}, {0x037F,0x037F,0x037F}, /* 037E */
- {0x0380,0x0380,0x0380}, {0x0381,0x0381,0x0381}, /* 0380 */
- {0x0382,0x0382,0x0382}, {0x0383,0x0383,0x0383}, /* 0382 */
- {0x0384,0x0384,0x0384}, {0x0385,0x0385,0x0385}, /* 0384 */
- {0x0386,0x03AC,0x0391}, {0x0387,0x0387,0x0387}, /* 0386 */
- {0x0388,0x03AD,0x0395}, {0x0389,0x03AE,0x0397}, /* 0388 */
- {0x038A,0x03AF,0x0399}, {0x038B,0x038B,0x038B}, /* 038A */
- {0x038C,0x03CC,0x039F}, {0x038D,0x038D,0x038D}, /* 038C */
- {0x038E,0x03CD,0x03A5}, {0x038F,0x03CE,0x03A9}, /* 038E */
- {0x0390,0x0390,0x0399}, {0x0391,0x03B1,0x0391}, /* 0390 */
- {0x0392,0x03B2,0x0392}, {0x0393,0x03B3,0x0393}, /* 0392 */
- {0x0394,0x03B4,0x0394}, {0x0395,0x03B5,0x0395}, /* 0394 */
- {0x0396,0x03B6,0x0396}, {0x0397,0x03B7,0x0397}, /* 0396 */
- {0x0398,0x03B8,0x0398}, {0x0399,0x03B9,0x0399}, /* 0398 */
- {0x039A,0x03BA,0x039A}, {0x039B,0x03BB,0x039B}, /* 039A */
- {0x039C,0x03BC,0x039C}, {0x039D,0x03BD,0x039D}, /* 039C */
- {0x039E,0x03BE,0x039E}, {0x039F,0x03BF,0x039F}, /* 039E */
- {0x03A0,0x03C0,0x03A0}, {0x03A1,0x03C1,0x03A1}, /* 03A0 */
- {0x03A2,0x03A2,0x03A2}, {0x03A3,0x03C3,0x03A3}, /* 03A2 */
- {0x03A4,0x03C4,0x03A4}, {0x03A5,0x03C5,0x03A5}, /* 03A4 */
- {0x03A6,0x03C6,0x03A6}, {0x03A7,0x03C7,0x03A7}, /* 03A6 */
- {0x03A8,0x03C8,0x03A8}, {0x03A9,0x03C9,0x03A9}, /* 03A8 */
- {0x03AA,0x03CA,0x0399}, {0x03AB,0x03CB,0x03A5}, /* 03AA */
- {0x0386,0x03AC,0x0391}, {0x0388,0x03AD,0x0395}, /* 03AC */
- {0x0389,0x03AE,0x0397}, {0x038A,0x03AF,0x0399}, /* 03AE */
- {0x03B0,0x03B0,0x03A5}, {0x0391,0x03B1,0x0391}, /* 03B0 */
- {0x0392,0x03B2,0x0392}, {0x0393,0x03B3,0x0393}, /* 03B2 */
- {0x0394,0x03B4,0x0394}, {0x0395,0x03B5,0x0395}, /* 03B4 */
- {0x0396,0x03B6,0x0396}, {0x0397,0x03B7,0x0397}, /* 03B6 */
- {0x0398,0x03B8,0x0398}, {0x0399,0x03B9,0x0399}, /* 03B8 */
- {0x039A,0x03BA,0x039A}, {0x039B,0x03BB,0x039B}, /* 03BA */
- {0x039C,0x03BC,0x039C}, {0x039D,0x03BD,0x039D}, /* 03BC */
- {0x039E,0x03BE,0x039E}, {0x039F,0x03BF,0x039F}, /* 03BE */
- {0x03A0,0x03C0,0x03A0}, {0x03A1,0x03C1,0x03A1}, /* 03C0 */
- {0x03A3,0x03C2,0x03A3}, {0x03A3,0x03C3,0x03A3}, /* 03C2 */
- {0x03A4,0x03C4,0x03A4}, {0x03A5,0x03C5,0x03A5}, /* 03C4 */
- {0x03A6,0x03C6,0x03A6}, {0x03A7,0x03C7,0x03A7}, /* 03C6 */
- {0x03A8,0x03C8,0x03A8}, {0x03A9,0x03C9,0x03A9}, /* 03C8 */
- {0x03AA,0x03CA,0x0399}, {0x03AB,0x03CB,0x03A5}, /* 03CA */
- {0x038C,0x03CC,0x039F}, {0x038E,0x03CD,0x03A5}, /* 03CC */
- {0x038F,0x03CE,0x03A9}, {0x03CF,0x03D7,0x03CF}, /* 03CE */
- {0x0392,0x03D0,0x0392}, {0x0398,0x03D1,0x0398}, /* 03D0 */
- {0x03D2,0x03D2,0x03D2}, {0x03D3,0x03D3,0x03D2}, /* 03D2 */
- {0x03D4,0x03D4,0x03D2}, {0x03A6,0x03D5,0x03A6}, /* 03D4 */
- {0x03A0,0x03D6,0x03A0}, {0x03CF,0x03D7,0x03CF}, /* 03D6 */
- {0x03D8,0x03D9,0x03D8}, {0x03D8,0x03D9,0x03D8}, /* 03D8 */
- {0x03DA,0x03DB,0x03DA}, {0x03DA,0x03DB,0x03DA}, /* 03DA */
- {0x03DC,0x03DD,0x03DC}, {0x03DC,0x03DD,0x03DC}, /* 03DC */
- {0x03DE,0x03DF,0x03DE}, {0x03DE,0x03DF,0x03DE}, /* 03DE */
- {0x03E0,0x03E1,0x03E0}, {0x03E0,0x03E1,0x03E0}, /* 03E0 */
- {0x03E2,0x03E3,0x03E2}, {0x03E2,0x03E3,0x03E2}, /* 03E2 */
- {0x03E4,0x03E5,0x03E4}, {0x03E4,0x03E5,0x03E4}, /* 03E4 */
- {0x03E6,0x03E7,0x03E6}, {0x03E6,0x03E7,0x03E6}, /* 03E6 */
- {0x03E8,0x03E9,0x03E8}, {0x03E8,0x03E9,0x03E8}, /* 03E8 */
- {0x03EA,0x03EB,0x03EA}, {0x03EA,0x03EB,0x03EA}, /* 03EA */
- {0x03EC,0x03ED,0x03EC}, {0x03EC,0x03ED,0x03EC}, /* 03EC */
- {0x03EE,0x03EF,0x03EE}, {0x03EE,0x03EF,0x03EE}, /* 03EE */
- {0x039A,0x03F0,0x039A}, {0x03A1,0x03F1,0x03A1}, /* 03F0 */
- {0x03F9,0x03F2,0x03F9}, {0x03F3,0x03F3,0x03F3}, /* 03F2 */
- {0x03F4,0x03B8,0x03F4}, {0x0395,0x03F5,0x0395}, /* 03F4 */
- {0x03F6,0x03F6,0x03F6}, {0x03F7,0x03F8,0x03F7}, /* 03F6 */
- {0x03F7,0x03F8,0x03F7}, {0x03F9,0x03F2,0x03F9}, /* 03F8 */
- {0x03FA,0x03FB,0x03FA}, {0x03FA,0x03FB,0x03FA}, /* 03FA */
- {0x03FC,0x03FC,0x03FC}, {0x03FD,0x037B,0x03FD}, /* 03FC */
- {0x03FE,0x037C,0x03FE}, {0x03FF,0x037D,0x03FF} /* 03FE */
-};
-
-static MY_UNICASE_CHARACTER u520p04[]={
- {0x0400,0x0450,0x0415}, {0x0401,0x0451,0x0415}, /* 0400 */
- {0x0402,0x0452,0x0402}, {0x0403,0x0453,0x0413}, /* 0402 */
- {0x0404,0x0454,0x0404}, {0x0405,0x0455,0x0405}, /* 0404 */
- {0x0406,0x0456,0x0406}, {0x0407,0x0457,0x0406}, /* 0406 */
- {0x0408,0x0458,0x0408}, {0x0409,0x0459,0x0409}, /* 0408 */
- {0x040A,0x045A,0x040A}, {0x040B,0x045B,0x040B}, /* 040A */
- {0x040C,0x045C,0x041A}, {0x040D,0x045D,0x0418}, /* 040C */
- {0x040E,0x045E,0x0423}, {0x040F,0x045F,0x040F}, /* 040E */
- {0x0410,0x0430,0x0410}, {0x0411,0x0431,0x0411}, /* 0410 */
- {0x0412,0x0432,0x0412}, {0x0413,0x0433,0x0413}, /* 0412 */
- {0x0414,0x0434,0x0414}, {0x0415,0x0435,0x0415}, /* 0414 */
- {0x0416,0x0436,0x0416}, {0x0417,0x0437,0x0417}, /* 0416 */
- {0x0418,0x0438,0x0418}, {0x0419,0x0439,0x0419}, /* 0418 */
- {0x041A,0x043A,0x041A}, {0x041B,0x043B,0x041B}, /* 041A */
- {0x041C,0x043C,0x041C}, {0x041D,0x043D,0x041D}, /* 041C */
- {0x041E,0x043E,0x041E}, {0x041F,0x043F,0x041F}, /* 041E */
- {0x0420,0x0440,0x0420}, {0x0421,0x0441,0x0421}, /* 0420 */
- {0x0422,0x0442,0x0422}, {0x0423,0x0443,0x0423}, /* 0422 */
- {0x0424,0x0444,0x0424}, {0x0425,0x0445,0x0425}, /* 0424 */
- {0x0426,0x0446,0x0426}, {0x0427,0x0447,0x0427}, /* 0426 */
- {0x0428,0x0448,0x0428}, {0x0429,0x0449,0x0429}, /* 0428 */
- {0x042A,0x044A,0x042A}, {0x042B,0x044B,0x042B}, /* 042A */
- {0x042C,0x044C,0x042C}, {0x042D,0x044D,0x042D}, /* 042C */
- {0x042E,0x044E,0x042E}, {0x042F,0x044F,0x042F}, /* 042E */
- {0x0410,0x0430,0x0410}, {0x0411,0x0431,0x0411}, /* 0430 */
- {0x0412,0x0432,0x0412}, {0x0413,0x0433,0x0413}, /* 0432 */
- {0x0414,0x0434,0x0414}, {0x0415,0x0435,0x0415}, /* 0434 */
- {0x0416,0x0436,0x0416}, {0x0417,0x0437,0x0417}, /* 0436 */
- {0x0418,0x0438,0x0418}, {0x0419,0x0439,0x0419}, /* 0438 */
- {0x041A,0x043A,0x041A}, {0x041B,0x043B,0x041B}, /* 043A */
- {0x041C,0x043C,0x041C}, {0x041D,0x043D,0x041D}, /* 043C */
- {0x041E,0x043E,0x041E}, {0x041F,0x043F,0x041F}, /* 043E */
- {0x0420,0x0440,0x0420}, {0x0421,0x0441,0x0421}, /* 0440 */
- {0x0422,0x0442,0x0422}, {0x0423,0x0443,0x0423}, /* 0442 */
- {0x0424,0x0444,0x0424}, {0x0425,0x0445,0x0425}, /* 0444 */
- {0x0426,0x0446,0x0426}, {0x0427,0x0447,0x0427}, /* 0446 */
- {0x0428,0x0448,0x0428}, {0x0429,0x0449,0x0429}, /* 0448 */
- {0x042A,0x044A,0x042A}, {0x042B,0x044B,0x042B}, /* 044A */
- {0x042C,0x044C,0x042C}, {0x042D,0x044D,0x042D}, /* 044C */
- {0x042E,0x044E,0x042E}, {0x042F,0x044F,0x042F}, /* 044E */
- {0x0400,0x0450,0x0415}, {0x0401,0x0451,0x0415}, /* 0450 */
- {0x0402,0x0452,0x0402}, {0x0403,0x0453,0x0413}, /* 0452 */
- {0x0404,0x0454,0x0404}, {0x0405,0x0455,0x0405}, /* 0454 */
- {0x0406,0x0456,0x0406}, {0x0407,0x0457,0x0406}, /* 0456 */
- {0x0408,0x0458,0x0408}, {0x0409,0x0459,0x0409}, /* 0458 */
- {0x040A,0x045A,0x040A}, {0x040B,0x045B,0x040B}, /* 045A */
- {0x040C,0x045C,0x041A}, {0x040D,0x045D,0x0418}, /* 045C */
- {0x040E,0x045E,0x0423}, {0x040F,0x045F,0x040F}, /* 045E */
- {0x0460,0x0461,0x0460}, {0x0460,0x0461,0x0460}, /* 0460 */
- {0x0462,0x0463,0x0462}, {0x0462,0x0463,0x0462}, /* 0462 */
- {0x0464,0x0465,0x0464}, {0x0464,0x0465,0x0464}, /* 0464 */
- {0x0466,0x0467,0x0466}, {0x0466,0x0467,0x0466}, /* 0466 */
- {0x0468,0x0469,0x0468}, {0x0468,0x0469,0x0468}, /* 0468 */
- {0x046A,0x046B,0x046A}, {0x046A,0x046B,0x046A}, /* 046A */
- {0x046C,0x046D,0x046C}, {0x046C,0x046D,0x046C}, /* 046C */
- {0x046E,0x046F,0x046E}, {0x046E,0x046F,0x046E}, /* 046E */
- {0x0470,0x0471,0x0470}, {0x0470,0x0471,0x0470}, /* 0470 */
- {0x0472,0x0473,0x0472}, {0x0472,0x0473,0x0472}, /* 0472 */
- {0x0474,0x0475,0x0474}, {0x0474,0x0475,0x0474}, /* 0474 */
- {0x0476,0x0477,0x0474}, {0x0476,0x0477,0x0474}, /* 0476 */
- {0x0478,0x0479,0x0478}, {0x0478,0x0479,0x0478}, /* 0478 */
- {0x047A,0x047B,0x047A}, {0x047A,0x047B,0x047A}, /* 047A */
- {0x047C,0x047D,0x047C}, {0x047C,0x047D,0x047C}, /* 047C */
- {0x047E,0x047F,0x047E}, {0x047E,0x047F,0x047E}, /* 047E */
- {0x0480,0x0481,0x0480}, {0x0480,0x0481,0x0480}, /* 0480 */
- {0x0482,0x0482,0x0482}, {0x0483,0x0483,0x0483}, /* 0482 */
- {0x0484,0x0484,0x0484}, {0x0485,0x0485,0x0485}, /* 0484 */
- {0x0486,0x0486,0x0486}, {0x0487,0x0487,0x0487}, /* 0486 */
- {0x0488,0x0488,0x0488}, {0x0489,0x0489,0x0489}, /* 0488 */
- {0x048A,0x048B,0x048A}, {0x048A,0x048B,0x048A}, /* 048A */
- {0x048C,0x048D,0x048C}, {0x048C,0x048D,0x048C}, /* 048C */
- {0x048E,0x048F,0x048E}, {0x048E,0x048F,0x048E}, /* 048E */
- {0x0490,0x0491,0x0490}, {0x0490,0x0491,0x0490}, /* 0490 */
- {0x0492,0x0493,0x0492}, {0x0492,0x0493,0x0492}, /* 0492 */
- {0x0494,0x0495,0x0494}, {0x0494,0x0495,0x0494}, /* 0494 */
- {0x0496,0x0497,0x0496}, {0x0496,0x0497,0x0496}, /* 0496 */
- {0x0498,0x0499,0x0498}, {0x0498,0x0499,0x0498}, /* 0498 */
- {0x049A,0x049B,0x049A}, {0x049A,0x049B,0x049A}, /* 049A */
- {0x049C,0x049D,0x049C}, {0x049C,0x049D,0x049C}, /* 049C */
- {0x049E,0x049F,0x049E}, {0x049E,0x049F,0x049E}, /* 049E */
- {0x04A0,0x04A1,0x04A0}, {0x04A0,0x04A1,0x04A0}, /* 04A0 */
- {0x04A2,0x04A3,0x04A2}, {0x04A2,0x04A3,0x04A2}, /* 04A2 */
- {0x04A4,0x04A5,0x04A4}, {0x04A4,0x04A5,0x04A4}, /* 04A4 */
- {0x04A6,0x04A7,0x04A6}, {0x04A6,0x04A7,0x04A6}, /* 04A6 */
- {0x04A8,0x04A9,0x04A8}, {0x04A8,0x04A9,0x04A8}, /* 04A8 */
- {0x04AA,0x04AB,0x04AA}, {0x04AA,0x04AB,0x04AA}, /* 04AA */
- {0x04AC,0x04AD,0x04AC}, {0x04AC,0x04AD,0x04AC}, /* 04AC */
- {0x04AE,0x04AF,0x04AE}, {0x04AE,0x04AF,0x04AE}, /* 04AE */
- {0x04B0,0x04B1,0x04B0}, {0x04B0,0x04B1,0x04B0}, /* 04B0 */
- {0x04B2,0x04B3,0x04B2}, {0x04B2,0x04B3,0x04B2}, /* 04B2 */
- {0x04B4,0x04B5,0x04B4}, {0x04B4,0x04B5,0x04B4}, /* 04B4 */
- {0x04B6,0x04B7,0x04B6}, {0x04B6,0x04B7,0x04B6}, /* 04B6 */
- {0x04B8,0x04B9,0x04B8}, {0x04B8,0x04B9,0x04B8}, /* 04B8 */
- {0x04BA,0x04BB,0x04BA}, {0x04BA,0x04BB,0x04BA}, /* 04BA */
- {0x04BC,0x04BD,0x04BC}, {0x04BC,0x04BD,0x04BC}, /* 04BC */
- {0x04BE,0x04BF,0x04BE}, {0x04BE,0x04BF,0x04BE}, /* 04BE */
- {0x04C0,0x04CF,0x04C0}, {0x04C1,0x04C2,0x0416}, /* 04C0 */
- {0x04C1,0x04C2,0x0416}, {0x04C3,0x04C4,0x04C3}, /* 04C2 */
- {0x04C3,0x04C4,0x04C3}, {0x04C5,0x04C6,0x04C5}, /* 04C4 */
- {0x04C5,0x04C6,0x04C5}, {0x04C7,0x04C8,0x04C7}, /* 04C6 */
- {0x04C7,0x04C8,0x04C7}, {0x04C9,0x04CA,0x04C9}, /* 04C8 */
- {0x04C9,0x04CA,0x04C9}, {0x04CB,0x04CC,0x04CB}, /* 04CA */
- {0x04CB,0x04CC,0x04CB}, {0x04CD,0x04CE,0x04CD}, /* 04CC */
- {0x04CD,0x04CE,0x04CD}, {0x04C0,0x04CF,0x04C0}, /* 04CE */
- {0x04D0,0x04D1,0x0410}, {0x04D0,0x04D1,0x0410}, /* 04D0 */
- {0x04D2,0x04D3,0x0410}, {0x04D2,0x04D3,0x0410}, /* 04D2 */
- {0x04D4,0x04D5,0x04D4}, {0x04D4,0x04D5,0x04D4}, /* 04D4 */
- {0x04D6,0x04D7,0x0415}, {0x04D6,0x04D7,0x0415}, /* 04D6 */
- {0x04D8,0x04D9,0x04D8}, {0x04D8,0x04D9,0x04D8}, /* 04D8 */
- {0x04DA,0x04DB,0x04D8}, {0x04DA,0x04DB,0x04D8}, /* 04DA */
- {0x04DC,0x04DD,0x0416}, {0x04DC,0x04DD,0x0416}, /* 04DC */
- {0x04DE,0x04DF,0x0417}, {0x04DE,0x04DF,0x0417}, /* 04DE */
- {0x04E0,0x04E1,0x04E0}, {0x04E0,0x04E1,0x04E0}, /* 04E0 */
- {0x04E2,0x04E3,0x0418}, {0x04E2,0x04E3,0x0418}, /* 04E2 */
- {0x04E4,0x04E5,0x0418}, {0x04E4,0x04E5,0x0418}, /* 04E4 */
- {0x04E6,0x04E7,0x041E}, {0x04E6,0x04E7,0x041E}, /* 04E6 */
- {0x04E8,0x04E9,0x04E8}, {0x04E8,0x04E9,0x04E8}, /* 04E8 */
- {0x04EA,0x04EB,0x04E8}, {0x04EA,0x04EB,0x04E8}, /* 04EA */
- {0x04EC,0x04ED,0x042D}, {0x04EC,0x04ED,0x042D}, /* 04EC */
- {0x04EE,0x04EF,0x0423}, {0x04EE,0x04EF,0x0423}, /* 04EE */
- {0x04F0,0x04F1,0x0423}, {0x04F0,0x04F1,0x0423}, /* 04F0 */
- {0x04F2,0x04F3,0x0423}, {0x04F2,0x04F3,0x0423}, /* 04F2 */
- {0x04F4,0x04F5,0x0427}, {0x04F4,0x04F5,0x0427}, /* 04F4 */
- {0x04F6,0x04F7,0x04F6}, {0x04F6,0x04F7,0x04F6}, /* 04F6 */
- {0x04F8,0x04F9,0x042B}, {0x04F8,0x04F9,0x042B}, /* 04F8 */
- {0x04FA,0x04FB,0x04FA}, {0x04FA,0x04FB,0x04FA}, /* 04FA */
- {0x04FC,0x04FD,0x04FC}, {0x04FC,0x04FD,0x04FC}, /* 04FC */
- {0x04FE,0x04FF,0x04FE}, {0x04FE,0x04FF,0x04FE} /* 04FE */
-};
-
-static MY_UNICASE_CHARACTER u520p05[]={
- {0x0500,0x0501,0x0500}, {0x0500,0x0501,0x0500}, /* 0500 */
- {0x0502,0x0503,0x0502}, {0x0502,0x0503,0x0502}, /* 0502 */
- {0x0504,0x0505,0x0504}, {0x0504,0x0505,0x0504}, /* 0504 */
- {0x0506,0x0507,0x0506}, {0x0506,0x0507,0x0506}, /* 0506 */
- {0x0508,0x0509,0x0508}, {0x0508,0x0509,0x0508}, /* 0508 */
- {0x050A,0x050B,0x050A}, {0x050A,0x050B,0x050A}, /* 050A */
- {0x050C,0x050D,0x050C}, {0x050C,0x050D,0x050C}, /* 050C */
- {0x050E,0x050F,0x050E}, {0x050E,0x050F,0x050E}, /* 050E */
- {0x0510,0x0511,0x0510}, {0x0510,0x0511,0x0510}, /* 0510 */
- {0x0512,0x0513,0x0512}, {0x0512,0x0513,0x0512}, /* 0512 */
- {0x0514,0x0515,0x0514}, {0x0514,0x0515,0x0514}, /* 0514 */
- {0x0516,0x0517,0x0516}, {0x0516,0x0517,0x0516}, /* 0516 */
- {0x0518,0x0519,0x0518}, {0x0518,0x0519,0x0518}, /* 0518 */
- {0x051A,0x051B,0x051A}, {0x051A,0x051B,0x051A}, /* 051A */
- {0x051C,0x051D,0x051C}, {0x051C,0x051D,0x051C}, /* 051C */
- {0x051E,0x051F,0x051E}, {0x051E,0x051F,0x051E}, /* 051E */
- {0x0520,0x0521,0x0520}, {0x0520,0x0521,0x0520}, /* 0520 */
- {0x0522,0x0523,0x0522}, {0x0522,0x0523,0x0522}, /* 0522 */
- {0x0524,0x0525,0x0524}, {0x0524,0x0525,0x0524}, /* 0524 */
- {0x0526,0x0526,0x0526}, {0x0527,0x0527,0x0527}, /* 0526 */
- {0x0528,0x0528,0x0528}, {0x0529,0x0529,0x0529}, /* 0528 */
- {0x052A,0x052A,0x052A}, {0x052B,0x052B,0x052B}, /* 052A */
- {0x052C,0x052C,0x052C}, {0x052D,0x052D,0x052D}, /* 052C */
- {0x052E,0x052E,0x052E}, {0x052F,0x052F,0x052F}, /* 052E */
- {0x0530,0x0530,0x0530}, {0x0531,0x0561,0x0531}, /* 0530 */
- {0x0532,0x0562,0x0532}, {0x0533,0x0563,0x0533}, /* 0532 */
- {0x0534,0x0564,0x0534}, {0x0535,0x0565,0x0535}, /* 0534 */
- {0x0536,0x0566,0x0536}, {0x0537,0x0567,0x0537}, /* 0536 */
- {0x0538,0x0568,0x0538}, {0x0539,0x0569,0x0539}, /* 0538 */
- {0x053A,0x056A,0x053A}, {0x053B,0x056B,0x053B}, /* 053A */
- {0x053C,0x056C,0x053C}, {0x053D,0x056D,0x053D}, /* 053C */
- {0x053E,0x056E,0x053E}, {0x053F,0x056F,0x053F}, /* 053E */
- {0x0540,0x0570,0x0540}, {0x0541,0x0571,0x0541}, /* 0540 */
- {0x0542,0x0572,0x0542}, {0x0543,0x0573,0x0543}, /* 0542 */
- {0x0544,0x0574,0x0544}, {0x0545,0x0575,0x0545}, /* 0544 */
- {0x0546,0x0576,0x0546}, {0x0547,0x0577,0x0547}, /* 0546 */
- {0x0548,0x0578,0x0548}, {0x0549,0x0579,0x0549}, /* 0548 */
- {0x054A,0x057A,0x054A}, {0x054B,0x057B,0x054B}, /* 054A */
- {0x054C,0x057C,0x054C}, {0x054D,0x057D,0x054D}, /* 054C */
- {0x054E,0x057E,0x054E}, {0x054F,0x057F,0x054F}, /* 054E */
- {0x0550,0x0580,0x0550}, {0x0551,0x0581,0x0551}, /* 0550 */
- {0x0552,0x0582,0x0552}, {0x0553,0x0583,0x0553}, /* 0552 */
- {0x0554,0x0584,0x0554}, {0x0555,0x0585,0x0555}, /* 0554 */
- {0x0556,0x0586,0x0556}, {0x0557,0x0557,0x0557}, /* 0556 */
- {0x0558,0x0558,0x0558}, {0x0559,0x0559,0x0559}, /* 0558 */
- {0x055A,0x055A,0x055A}, {0x055B,0x055B,0x055B}, /* 055A */
- {0x055C,0x055C,0x055C}, {0x055D,0x055D,0x055D}, /* 055C */
- {0x055E,0x055E,0x055E}, {0x055F,0x055F,0x055F}, /* 055E */
- {0x0560,0x0560,0x0560}, {0x0531,0x0561,0x0531}, /* 0560 */
- {0x0532,0x0562,0x0532}, {0x0533,0x0563,0x0533}, /* 0562 */
- {0x0534,0x0564,0x0534}, {0x0535,0x0565,0x0535}, /* 0564 */
- {0x0536,0x0566,0x0536}, {0x0537,0x0567,0x0537}, /* 0566 */
- {0x0538,0x0568,0x0538}, {0x0539,0x0569,0x0539}, /* 0568 */
- {0x053A,0x056A,0x053A}, {0x053B,0x056B,0x053B}, /* 056A */
- {0x053C,0x056C,0x053C}, {0x053D,0x056D,0x053D}, /* 056C */
- {0x053E,0x056E,0x053E}, {0x053F,0x056F,0x053F}, /* 056E */
- {0x0540,0x0570,0x0540}, {0x0541,0x0571,0x0541}, /* 0570 */
- {0x0542,0x0572,0x0542}, {0x0543,0x0573,0x0543}, /* 0572 */
- {0x0544,0x0574,0x0544}, {0x0545,0x0575,0x0545}, /* 0574 */
- {0x0546,0x0576,0x0546}, {0x0547,0x0577,0x0547}, /* 0576 */
- {0x0548,0x0578,0x0548}, {0x0549,0x0579,0x0549}, /* 0578 */
- {0x054A,0x057A,0x054A}, {0x054B,0x057B,0x054B}, /* 057A */
- {0x054C,0x057C,0x054C}, {0x054D,0x057D,0x054D}, /* 057C */
- {0x054E,0x057E,0x054E}, {0x054F,0x057F,0x054F}, /* 057E */
- {0x0550,0x0580,0x0550}, {0x0551,0x0581,0x0551}, /* 0580 */
- {0x0552,0x0582,0x0552}, {0x0553,0x0583,0x0553}, /* 0582 */
- {0x0554,0x0584,0x0554}, {0x0555,0x0585,0x0555}, /* 0584 */
- {0x0556,0x0586,0x0556}, {0x0587,0x0587,0x0587}, /* 0586 */
- {0x0588,0x0588,0x0588}, {0x0589,0x0589,0x0589}, /* 0588 */
- {0x058A,0x058A,0x058A}, {0x058B,0x058B,0x058B}, /* 058A */
- {0x058C,0x058C,0x058C}, {0x058D,0x058D,0x058D}, /* 058C */
- {0x058E,0x058E,0x058E}, {0x058F,0x058F,0x058F}, /* 058E */
- {0x0590,0x0590,0x0590}, {0x0591,0x0591,0x0591}, /* 0590 */
- {0x0592,0x0592,0x0592}, {0x0593,0x0593,0x0593}, /* 0592 */
- {0x0594,0x0594,0x0594}, {0x0595,0x0595,0x0595}, /* 0594 */
- {0x0596,0x0596,0x0596}, {0x0597,0x0597,0x0597}, /* 0596 */
- {0x0598,0x0598,0x0598}, {0x0599,0x0599,0x0599}, /* 0598 */
- {0x059A,0x059A,0x059A}, {0x059B,0x059B,0x059B}, /* 059A */
- {0x059C,0x059C,0x059C}, {0x059D,0x059D,0x059D}, /* 059C */
- {0x059E,0x059E,0x059E}, {0x059F,0x059F,0x059F}, /* 059E */
- {0x05A0,0x05A0,0x05A0}, {0x05A1,0x05A1,0x05A1}, /* 05A0 */
- {0x05A2,0x05A2,0x05A2}, {0x05A3,0x05A3,0x05A3}, /* 05A2 */
- {0x05A4,0x05A4,0x05A4}, {0x05A5,0x05A5,0x05A5}, /* 05A4 */
- {0x05A6,0x05A6,0x05A6}, {0x05A7,0x05A7,0x05A7}, /* 05A6 */
- {0x05A8,0x05A8,0x05A8}, {0x05A9,0x05A9,0x05A9}, /* 05A8 */
- {0x05AA,0x05AA,0x05AA}, {0x05AB,0x05AB,0x05AB}, /* 05AA */
- {0x05AC,0x05AC,0x05AC}, {0x05AD,0x05AD,0x05AD}, /* 05AC */
- {0x05AE,0x05AE,0x05AE}, {0x05AF,0x05AF,0x05AF}, /* 05AE */
- {0x05B0,0x05B0,0x05B0}, {0x05B1,0x05B1,0x05B1}, /* 05B0 */
- {0x05B2,0x05B2,0x05B2}, {0x05B3,0x05B3,0x05B3}, /* 05B2 */
- {0x05B4,0x05B4,0x05B4}, {0x05B5,0x05B5,0x05B5}, /* 05B4 */
- {0x05B6,0x05B6,0x05B6}, {0x05B7,0x05B7,0x05B7}, /* 05B6 */
- {0x05B8,0x05B8,0x05B8}, {0x05B9,0x05B9,0x05B9}, /* 05B8 */
- {0x05BA,0x05BA,0x05BA}, {0x05BB,0x05BB,0x05BB}, /* 05BA */
- {0x05BC,0x05BC,0x05BC}, {0x05BD,0x05BD,0x05BD}, /* 05BC */
- {0x05BE,0x05BE,0x05BE}, {0x05BF,0x05BF,0x05BF}, /* 05BE */
- {0x05C0,0x05C0,0x05C0}, {0x05C1,0x05C1,0x05C1}, /* 05C0 */
- {0x05C2,0x05C2,0x05C2}, {0x05C3,0x05C3,0x05C3}, /* 05C2 */
- {0x05C4,0x05C4,0x05C4}, {0x05C5,0x05C5,0x05C5}, /* 05C4 */
- {0x05C6,0x05C6,0x05C6}, {0x05C7,0x05C7,0x05C7}, /* 05C6 */
- {0x05C8,0x05C8,0x05C8}, {0x05C9,0x05C9,0x05C9}, /* 05C8 */
- {0x05CA,0x05CA,0x05CA}, {0x05CB,0x05CB,0x05CB}, /* 05CA */
- {0x05CC,0x05CC,0x05CC}, {0x05CD,0x05CD,0x05CD}, /* 05CC */
- {0x05CE,0x05CE,0x05CE}, {0x05CF,0x05CF,0x05CF}, /* 05CE */
- {0x05D0,0x05D0,0x05D0}, {0x05D1,0x05D1,0x05D1}, /* 05D0 */
- {0x05D2,0x05D2,0x05D2}, {0x05D3,0x05D3,0x05D3}, /* 05D2 */
- {0x05D4,0x05D4,0x05D4}, {0x05D5,0x05D5,0x05D5}, /* 05D4 */
- {0x05D6,0x05D6,0x05D6}, {0x05D7,0x05D7,0x05D7}, /* 05D6 */
- {0x05D8,0x05D8,0x05D8}, {0x05D9,0x05D9,0x05D9}, /* 05D8 */
- {0x05DA,0x05DA,0x05DA}, {0x05DB,0x05DB,0x05DB}, /* 05DA */
- {0x05DC,0x05DC,0x05DC}, {0x05DD,0x05DD,0x05DD}, /* 05DC */
- {0x05DE,0x05DE,0x05DE}, {0x05DF,0x05DF,0x05DF}, /* 05DE */
- {0x05E0,0x05E0,0x05E0}, {0x05E1,0x05E1,0x05E1}, /* 05E0 */
- {0x05E2,0x05E2,0x05E2}, {0x05E3,0x05E3,0x05E3}, /* 05E2 */
- {0x05E4,0x05E4,0x05E4}, {0x05E5,0x05E5,0x05E5}, /* 05E4 */
- {0x05E6,0x05E6,0x05E6}, {0x05E7,0x05E7,0x05E7}, /* 05E6 */
- {0x05E8,0x05E8,0x05E8}, {0x05E9,0x05E9,0x05E9}, /* 05E8 */
- {0x05EA,0x05EA,0x05EA}, {0x05EB,0x05EB,0x05EB}, /* 05EA */
- {0x05EC,0x05EC,0x05EC}, {0x05ED,0x05ED,0x05ED}, /* 05EC */
- {0x05EE,0x05EE,0x05EE}, {0x05EF,0x05EF,0x05EF}, /* 05EE */
- {0x05F0,0x05F0,0x05F0}, {0x05F1,0x05F1,0x05F1}, /* 05F0 */
- {0x05F2,0x05F2,0x05F2}, {0x05F3,0x05F3,0x05F3}, /* 05F2 */
- {0x05F4,0x05F4,0x05F4}, {0x05F5,0x05F5,0x05F5}, /* 05F4 */
- {0x05F6,0x05F6,0x05F6}, {0x05F7,0x05F7,0x05F7}, /* 05F6 */
- {0x05F8,0x05F8,0x05F8}, {0x05F9,0x05F9,0x05F9}, /* 05F8 */
- {0x05FA,0x05FA,0x05FA}, {0x05FB,0x05FB,0x05FB}, /* 05FA */
- {0x05FC,0x05FC,0x05FC}, {0x05FD,0x05FD,0x05FD}, /* 05FC */
- {0x05FE,0x05FE,0x05FE}, {0x05FF,0x05FF,0x05FF} /* 05FE */
-};
-
-static MY_UNICASE_CHARACTER u520p10[]={
- {0x1000,0x1000,0x1000}, {0x1001,0x1001,0x1001}, /* 1000 */
- {0x1002,0x1002,0x1002}, {0x1003,0x1003,0x1003}, /* 1002 */
- {0x1004,0x1004,0x1004}, {0x1005,0x1005,0x1005}, /* 1004 */
- {0x1006,0x1006,0x1006}, {0x1007,0x1007,0x1007}, /* 1006 */
- {0x1008,0x1008,0x1008}, {0x1009,0x1009,0x1009}, /* 1008 */
- {0x100A,0x100A,0x100A}, {0x100B,0x100B,0x100B}, /* 100A */
- {0x100C,0x100C,0x100C}, {0x100D,0x100D,0x100D}, /* 100C */
- {0x100E,0x100E,0x100E}, {0x100F,0x100F,0x100F}, /* 100E */
- {0x1010,0x1010,0x1010}, {0x1011,0x1011,0x1011}, /* 1010 */
- {0x1012,0x1012,0x1012}, {0x1013,0x1013,0x1013}, /* 1012 */
- {0x1014,0x1014,0x1014}, {0x1015,0x1015,0x1015}, /* 1014 */
- {0x1016,0x1016,0x1016}, {0x1017,0x1017,0x1017}, /* 1016 */
- {0x1018,0x1018,0x1018}, {0x1019,0x1019,0x1019}, /* 1018 */
- {0x101A,0x101A,0x101A}, {0x101B,0x101B,0x101B}, /* 101A */
- {0x101C,0x101C,0x101C}, {0x101D,0x101D,0x101D}, /* 101C */
- {0x101E,0x101E,0x101E}, {0x101F,0x101F,0x101F}, /* 101E */
- {0x1020,0x1020,0x1020}, {0x1021,0x1021,0x1021}, /* 1020 */
- {0x1022,0x1022,0x1022}, {0x1023,0x1023,0x1023}, /* 1022 */
- {0x1024,0x1024,0x1024}, {0x1025,0x1025,0x1025}, /* 1024 */
- {0x1026,0x1026,0x1026}, {0x1027,0x1027,0x1027}, /* 1026 */
- {0x1028,0x1028,0x1028}, {0x1029,0x1029,0x1029}, /* 1028 */
- {0x102A,0x102A,0x102A}, {0x102B,0x102B,0x102B}, /* 102A */
- {0x102C,0x102C,0x102C}, {0x102D,0x102D,0x102D}, /* 102C */
- {0x102E,0x102E,0x102E}, {0x102F,0x102F,0x102F}, /* 102E */
- {0x1030,0x1030,0x1030}, {0x1031,0x1031,0x1031}, /* 1030 */
- {0x1032,0x1032,0x1032}, {0x1033,0x1033,0x1033}, /* 1032 */
- {0x1034,0x1034,0x1034}, {0x1035,0x1035,0x1035}, /* 1034 */
- {0x1036,0x1036,0x1036}, {0x1037,0x1037,0x1037}, /* 1036 */
- {0x1038,0x1038,0x1038}, {0x1039,0x1039,0x1039}, /* 1038 */
- {0x103A,0x103A,0x103A}, {0x103B,0x103B,0x103B}, /* 103A */
- {0x103C,0x103C,0x103C}, {0x103D,0x103D,0x103D}, /* 103C */
- {0x103E,0x103E,0x103E}, {0x103F,0x103F,0x103F}, /* 103E */
- {0x1040,0x1040,0x1040}, {0x1041,0x1041,0x1041}, /* 1040 */
- {0x1042,0x1042,0x1042}, {0x1043,0x1043,0x1043}, /* 1042 */
- {0x1044,0x1044,0x1044}, {0x1045,0x1045,0x1045}, /* 1044 */
- {0x1046,0x1046,0x1046}, {0x1047,0x1047,0x1047}, /* 1046 */
- {0x1048,0x1048,0x1048}, {0x1049,0x1049,0x1049}, /* 1048 */
- {0x104A,0x104A,0x104A}, {0x104B,0x104B,0x104B}, /* 104A */
- {0x104C,0x104C,0x104C}, {0x104D,0x104D,0x104D}, /* 104C */
- {0x104E,0x104E,0x104E}, {0x104F,0x104F,0x104F}, /* 104E */
- {0x1050,0x1050,0x1050}, {0x1051,0x1051,0x1051}, /* 1050 */
- {0x1052,0x1052,0x1052}, {0x1053,0x1053,0x1053}, /* 1052 */
- {0x1054,0x1054,0x1054}, {0x1055,0x1055,0x1055}, /* 1054 */
- {0x1056,0x1056,0x1056}, {0x1057,0x1057,0x1057}, /* 1056 */
- {0x1058,0x1058,0x1058}, {0x1059,0x1059,0x1059}, /* 1058 */
- {0x105A,0x105A,0x105A}, {0x105B,0x105B,0x105B}, /* 105A */
- {0x105C,0x105C,0x105C}, {0x105D,0x105D,0x105D}, /* 105C */
- {0x105E,0x105E,0x105E}, {0x105F,0x105F,0x105F}, /* 105E */
- {0x1060,0x1060,0x1060}, {0x1061,0x1061,0x1061}, /* 1060 */
- {0x1062,0x1062,0x1062}, {0x1063,0x1063,0x1063}, /* 1062 */
- {0x1064,0x1064,0x1064}, {0x1065,0x1065,0x1065}, /* 1064 */
- {0x1066,0x1066,0x1066}, {0x1067,0x1067,0x1067}, /* 1066 */
- {0x1068,0x1068,0x1068}, {0x1069,0x1069,0x1069}, /* 1068 */
- {0x106A,0x106A,0x106A}, {0x106B,0x106B,0x106B}, /* 106A */
- {0x106C,0x106C,0x106C}, {0x106D,0x106D,0x106D}, /* 106C */
- {0x106E,0x106E,0x106E}, {0x106F,0x106F,0x106F}, /* 106E */
- {0x1070,0x1070,0x1070}, {0x1071,0x1071,0x1071}, /* 1070 */
- {0x1072,0x1072,0x1072}, {0x1073,0x1073,0x1073}, /* 1072 */
- {0x1074,0x1074,0x1074}, {0x1075,0x1075,0x1075}, /* 1074 */
- {0x1076,0x1076,0x1076}, {0x1077,0x1077,0x1077}, /* 1076 */
- {0x1078,0x1078,0x1078}, {0x1079,0x1079,0x1079}, /* 1078 */
- {0x107A,0x107A,0x107A}, {0x107B,0x107B,0x107B}, /* 107A */
- {0x107C,0x107C,0x107C}, {0x107D,0x107D,0x107D}, /* 107C */
- {0x107E,0x107E,0x107E}, {0x107F,0x107F,0x107F}, /* 107E */
- {0x1080,0x1080,0x1080}, {0x1081,0x1081,0x1081}, /* 1080 */
- {0x1082,0x1082,0x1082}, {0x1083,0x1083,0x1083}, /* 1082 */
- {0x1084,0x1084,0x1084}, {0x1085,0x1085,0x1085}, /* 1084 */
- {0x1086,0x1086,0x1086}, {0x1087,0x1087,0x1087}, /* 1086 */
- {0x1088,0x1088,0x1088}, {0x1089,0x1089,0x1089}, /* 1088 */
- {0x108A,0x108A,0x108A}, {0x108B,0x108B,0x108B}, /* 108A */
- {0x108C,0x108C,0x108C}, {0x108D,0x108D,0x108D}, /* 108C */
- {0x108E,0x108E,0x108E}, {0x108F,0x108F,0x108F}, /* 108E */
- {0x1090,0x1090,0x1090}, {0x1091,0x1091,0x1091}, /* 1090 */
- {0x1092,0x1092,0x1092}, {0x1093,0x1093,0x1093}, /* 1092 */
- {0x1094,0x1094,0x1094}, {0x1095,0x1095,0x1095}, /* 1094 */
- {0x1096,0x1096,0x1096}, {0x1097,0x1097,0x1097}, /* 1096 */
- {0x1098,0x1098,0x1098}, {0x1099,0x1099,0x1099}, /* 1098 */
- {0x109A,0x109A,0x109A}, {0x109B,0x109B,0x109B}, /* 109A */
- {0x109C,0x109C,0x109C}, {0x109D,0x109D,0x109D}, /* 109C */
- {0x109E,0x109E,0x109E}, {0x109F,0x109F,0x109F}, /* 109E */
- {0x10A0,0x2D00,0x10A0}, {0x10A1,0x2D01,0x10A1}, /* 10A0 */
- {0x10A2,0x2D02,0x10A2}, {0x10A3,0x2D03,0x10A3}, /* 10A2 */
- {0x10A4,0x2D04,0x10A4}, {0x10A5,0x2D05,0x10A5}, /* 10A4 */
- {0x10A6,0x2D06,0x10A6}, {0x10A7,0x2D07,0x10A7}, /* 10A6 */
- {0x10A8,0x2D08,0x10A8}, {0x10A9,0x2D09,0x10A9}, /* 10A8 */
- {0x10AA,0x2D0A,0x10AA}, {0x10AB,0x2D0B,0x10AB}, /* 10AA */
- {0x10AC,0x2D0C,0x10AC}, {0x10AD,0x2D0D,0x10AD}, /* 10AC */
- {0x10AE,0x2D0E,0x10AE}, {0x10AF,0x2D0F,0x10AF}, /* 10AE */
- {0x10B0,0x2D10,0x10B0}, {0x10B1,0x2D11,0x10B1}, /* 10B0 */
- {0x10B2,0x2D12,0x10B2}, {0x10B3,0x2D13,0x10B3}, /* 10B2 */
- {0x10B4,0x2D14,0x10B4}, {0x10B5,0x2D15,0x10B5}, /* 10B4 */
- {0x10B6,0x2D16,0x10B6}, {0x10B7,0x2D17,0x10B7}, /* 10B6 */
- {0x10B8,0x2D18,0x10B8}, {0x10B9,0x2D19,0x10B9}, /* 10B8 */
- {0x10BA,0x2D1A,0x10BA}, {0x10BB,0x2D1B,0x10BB}, /* 10BA */
- {0x10BC,0x2D1C,0x10BC}, {0x10BD,0x2D1D,0x10BD}, /* 10BC */
- {0x10BE,0x2D1E,0x10BE}, {0x10BF,0x2D1F,0x10BF}, /* 10BE */
- {0x10C0,0x2D20,0x10C0}, {0x10C1,0x2D21,0x10C1}, /* 10C0 */
- {0x10C2,0x2D22,0x10C2}, {0x10C3,0x2D23,0x10C3}, /* 10C2 */
- {0x10C4,0x2D24,0x10C4}, {0x10C5,0x2D25,0x10C5}, /* 10C4 */
- {0x10C6,0x10C6,0x10C6}, {0x10C7,0x10C7,0x10C7}, /* 10C6 */
- {0x10C8,0x10C8,0x10C8}, {0x10C9,0x10C9,0x10C9}, /* 10C8 */
- {0x10CA,0x10CA,0x10CA}, {0x10CB,0x10CB,0x10CB}, /* 10CA */
- {0x10CC,0x10CC,0x10CC}, {0x10CD,0x10CD,0x10CD}, /* 10CC */
- {0x10CE,0x10CE,0x10CE}, {0x10CF,0x10CF,0x10CF}, /* 10CE */
- {0x10D0,0x10D0,0x10D0}, {0x10D1,0x10D1,0x10D1}, /* 10D0 */
- {0x10D2,0x10D2,0x10D2}, {0x10D3,0x10D3,0x10D3}, /* 10D2 */
- {0x10D4,0x10D4,0x10D4}, {0x10D5,0x10D5,0x10D5}, /* 10D4 */
- {0x10D6,0x10D6,0x10D6}, {0x10D7,0x10D7,0x10D7}, /* 10D6 */
- {0x10D8,0x10D8,0x10D8}, {0x10D9,0x10D9,0x10D9}, /* 10D8 */
- {0x10DA,0x10DA,0x10DA}, {0x10DB,0x10DB,0x10DB}, /* 10DA */
- {0x10DC,0x10DC,0x10DC}, {0x10DD,0x10DD,0x10DD}, /* 10DC */
- {0x10DE,0x10DE,0x10DE}, {0x10DF,0x10DF,0x10DF}, /* 10DE */
- {0x10E0,0x10E0,0x10E0}, {0x10E1,0x10E1,0x10E1}, /* 10E0 */
- {0x10E2,0x10E2,0x10E2}, {0x10E3,0x10E3,0x10E3}, /* 10E2 */
- {0x10E4,0x10E4,0x10E4}, {0x10E5,0x10E5,0x10E5}, /* 10E4 */
- {0x10E6,0x10E6,0x10E6}, {0x10E7,0x10E7,0x10E7}, /* 10E6 */
- {0x10E8,0x10E8,0x10E8}, {0x10E9,0x10E9,0x10E9}, /* 10E8 */
- {0x10EA,0x10EA,0x10EA}, {0x10EB,0x10EB,0x10EB}, /* 10EA */
- {0x10EC,0x10EC,0x10EC}, {0x10ED,0x10ED,0x10ED}, /* 10EC */
- {0x10EE,0x10EE,0x10EE}, {0x10EF,0x10EF,0x10EF}, /* 10EE */
- {0x10F0,0x10F0,0x10F0}, {0x10F1,0x10F1,0x10F1}, /* 10F0 */
- {0x10F2,0x10F2,0x10F2}, {0x10F3,0x10F3,0x10F3}, /* 10F2 */
- {0x10F4,0x10F4,0x10F4}, {0x10F5,0x10F5,0x10F5}, /* 10F4 */
- {0x10F6,0x10F6,0x10F6}, {0x10F7,0x10F7,0x10F7}, /* 10F6 */
- {0x10F8,0x10F8,0x10F8}, {0x10F9,0x10F9,0x10F9}, /* 10F8 */
- {0x10FA,0x10FA,0x10FA}, {0x10FB,0x10FB,0x10FB}, /* 10FA */
- {0x10FC,0x10FC,0x10FC}, {0x10FD,0x10FD,0x10FD}, /* 10FC */
- {0x10FE,0x10FE,0x10FE}, {0x10FF,0x10FF,0x10FF} /* 10FE */
-};
-
-static MY_UNICASE_CHARACTER u520p1D[]={
- {0x1D00,0x1D00,0x1D00}, {0x1D01,0x1D01,0x1D01}, /* 1D00 */
- {0x1D02,0x1D02,0x1D02}, {0x1D03,0x1D03,0x1D03}, /* 1D02 */
- {0x1D04,0x1D04,0x1D04}, {0x1D05,0x1D05,0x1D05}, /* 1D04 */
- {0x1D06,0x1D06,0x1D06}, {0x1D07,0x1D07,0x1D07}, /* 1D06 */
- {0x1D08,0x1D08,0x1D08}, {0x1D09,0x1D09,0x1D09}, /* 1D08 */
- {0x1D0A,0x1D0A,0x1D0A}, {0x1D0B,0x1D0B,0x1D0B}, /* 1D0A */
- {0x1D0C,0x1D0C,0x1D0C}, {0x1D0D,0x1D0D,0x1D0D}, /* 1D0C */
- {0x1D0E,0x1D0E,0x1D0E}, {0x1D0F,0x1D0F,0x1D0F}, /* 1D0E */
- {0x1D10,0x1D10,0x1D10}, {0x1D11,0x1D11,0x1D11}, /* 1D10 */
- {0x1D12,0x1D12,0x1D12}, {0x1D13,0x1D13,0x1D13}, /* 1D12 */
- {0x1D14,0x1D14,0x1D14}, {0x1D15,0x1D15,0x1D15}, /* 1D14 */
- {0x1D16,0x1D16,0x1D16}, {0x1D17,0x1D17,0x1D17}, /* 1D16 */
- {0x1D18,0x1D18,0x1D18}, {0x1D19,0x1D19,0x1D19}, /* 1D18 */
- {0x1D1A,0x1D1A,0x1D1A}, {0x1D1B,0x1D1B,0x1D1B}, /* 1D1A */
- {0x1D1C,0x1D1C,0x1D1C}, {0x1D1D,0x1D1D,0x1D1D}, /* 1D1C */
- {0x1D1E,0x1D1E,0x1D1E}, {0x1D1F,0x1D1F,0x1D1F}, /* 1D1E */
- {0x1D20,0x1D20,0x1D20}, {0x1D21,0x1D21,0x1D21}, /* 1D20 */
- {0x1D22,0x1D22,0x1D22}, {0x1D23,0x1D23,0x1D23}, /* 1D22 */
- {0x1D24,0x1D24,0x1D24}, {0x1D25,0x1D25,0x1D25}, /* 1D24 */
- {0x1D26,0x1D26,0x1D26}, {0x1D27,0x1D27,0x1D27}, /* 1D26 */
- {0x1D28,0x1D28,0x1D28}, {0x1D29,0x1D29,0x1D29}, /* 1D28 */
- {0x1D2A,0x1D2A,0x1D2A}, {0x1D2B,0x1D2B,0x1D2B}, /* 1D2A */
- {0x1D2C,0x1D2C,0x1D2C}, {0x1D2D,0x1D2D,0x1D2D}, /* 1D2C */
- {0x1D2E,0x1D2E,0x1D2E}, {0x1D2F,0x1D2F,0x1D2F}, /* 1D2E */
- {0x1D30,0x1D30,0x1D30}, {0x1D31,0x1D31,0x1D31}, /* 1D30 */
- {0x1D32,0x1D32,0x1D32}, {0x1D33,0x1D33,0x1D33}, /* 1D32 */
- {0x1D34,0x1D34,0x1D34}, {0x1D35,0x1D35,0x1D35}, /* 1D34 */
- {0x1D36,0x1D36,0x1D36}, {0x1D37,0x1D37,0x1D37}, /* 1D36 */
- {0x1D38,0x1D38,0x1D38}, {0x1D39,0x1D39,0x1D39}, /* 1D38 */
- {0x1D3A,0x1D3A,0x1D3A}, {0x1D3B,0x1D3B,0x1D3B}, /* 1D3A */
- {0x1D3C,0x1D3C,0x1D3C}, {0x1D3D,0x1D3D,0x1D3D}, /* 1D3C */
- {0x1D3E,0x1D3E,0x1D3E}, {0x1D3F,0x1D3F,0x1D3F}, /* 1D3E */
- {0x1D40,0x1D40,0x1D40}, {0x1D41,0x1D41,0x1D41}, /* 1D40 */
- {0x1D42,0x1D42,0x1D42}, {0x1D43,0x1D43,0x1D43}, /* 1D42 */
- {0x1D44,0x1D44,0x1D44}, {0x1D45,0x1D45,0x1D45}, /* 1D44 */
- {0x1D46,0x1D46,0x1D46}, {0x1D47,0x1D47,0x1D47}, /* 1D46 */
- {0x1D48,0x1D48,0x1D48}, {0x1D49,0x1D49,0x1D49}, /* 1D48 */
- {0x1D4A,0x1D4A,0x1D4A}, {0x1D4B,0x1D4B,0x1D4B}, /* 1D4A */
- {0x1D4C,0x1D4C,0x1D4C}, {0x1D4D,0x1D4D,0x1D4D}, /* 1D4C */
- {0x1D4E,0x1D4E,0x1D4E}, {0x1D4F,0x1D4F,0x1D4F}, /* 1D4E */
- {0x1D50,0x1D50,0x1D50}, {0x1D51,0x1D51,0x1D51}, /* 1D50 */
- {0x1D52,0x1D52,0x1D52}, {0x1D53,0x1D53,0x1D53}, /* 1D52 */
- {0x1D54,0x1D54,0x1D54}, {0x1D55,0x1D55,0x1D55}, /* 1D54 */
- {0x1D56,0x1D56,0x1D56}, {0x1D57,0x1D57,0x1D57}, /* 1D56 */
- {0x1D58,0x1D58,0x1D58}, {0x1D59,0x1D59,0x1D59}, /* 1D58 */
- {0x1D5A,0x1D5A,0x1D5A}, {0x1D5B,0x1D5B,0x1D5B}, /* 1D5A */
- {0x1D5C,0x1D5C,0x1D5C}, {0x1D5D,0x1D5D,0x1D5D}, /* 1D5C */
- {0x1D5E,0x1D5E,0x1D5E}, {0x1D5F,0x1D5F,0x1D5F}, /* 1D5E */
- {0x1D60,0x1D60,0x1D60}, {0x1D61,0x1D61,0x1D61}, /* 1D60 */
- {0x1D62,0x1D62,0x1D62}, {0x1D63,0x1D63,0x1D63}, /* 1D62 */
- {0x1D64,0x1D64,0x1D64}, {0x1D65,0x1D65,0x1D65}, /* 1D64 */
- {0x1D66,0x1D66,0x1D66}, {0x1D67,0x1D67,0x1D67}, /* 1D66 */
- {0x1D68,0x1D68,0x1D68}, {0x1D69,0x1D69,0x1D69}, /* 1D68 */
- {0x1D6A,0x1D6A,0x1D6A}, {0x1D6B,0x1D6B,0x1D6B}, /* 1D6A */
- {0x1D6C,0x1D6C,0x1D6C}, {0x1D6D,0x1D6D,0x1D6D}, /* 1D6C */
- {0x1D6E,0x1D6E,0x1D6E}, {0x1D6F,0x1D6F,0x1D6F}, /* 1D6E */
- {0x1D70,0x1D70,0x1D70}, {0x1D71,0x1D71,0x1D71}, /* 1D70 */
- {0x1D72,0x1D72,0x1D72}, {0x1D73,0x1D73,0x1D73}, /* 1D72 */
- {0x1D74,0x1D74,0x1D74}, {0x1D75,0x1D75,0x1D75}, /* 1D74 */
- {0x1D76,0x1D76,0x1D76}, {0x1D77,0x1D77,0x1D77}, /* 1D76 */
- {0x1D78,0x1D78,0x1D78}, {0xA77D,0x1D79,0xA77D}, /* 1D78 */
- {0x1D7A,0x1D7A,0x1D7A}, {0x1D7B,0x1D7B,0x1D7B}, /* 1D7A */
- {0x1D7C,0x1D7C,0x1D7C}, {0x2C63,0x1D7D,0x2C63}, /* 1D7C */
- {0x1D7E,0x1D7E,0x1D7E}, {0x1D7F,0x1D7F,0x1D7F}, /* 1D7E */
- {0x1D80,0x1D80,0x1D80}, {0x1D81,0x1D81,0x1D81}, /* 1D80 */
- {0x1D82,0x1D82,0x1D82}, {0x1D83,0x1D83,0x1D83}, /* 1D82 */
- {0x1D84,0x1D84,0x1D84}, {0x1D85,0x1D85,0x1D85}, /* 1D84 */
- {0x1D86,0x1D86,0x1D86}, {0x1D87,0x1D87,0x1D87}, /* 1D86 */
- {0x1D88,0x1D88,0x1D88}, {0x1D89,0x1D89,0x1D89}, /* 1D88 */
- {0x1D8A,0x1D8A,0x1D8A}, {0x1D8B,0x1D8B,0x1D8B}, /* 1D8A */
- {0x1D8C,0x1D8C,0x1D8C}, {0x1D8D,0x1D8D,0x1D8D}, /* 1D8C */
- {0x1D8E,0x1D8E,0x1D8E}, {0x1D8F,0x1D8F,0x1D8F}, /* 1D8E */
- {0x1D90,0x1D90,0x1D90}, {0x1D91,0x1D91,0x1D91}, /* 1D90 */
- {0x1D92,0x1D92,0x1D92}, {0x1D93,0x1D93,0x1D93}, /* 1D92 */
- {0x1D94,0x1D94,0x1D94}, {0x1D95,0x1D95,0x1D95}, /* 1D94 */
- {0x1D96,0x1D96,0x1D96}, {0x1D97,0x1D97,0x1D97}, /* 1D96 */
- {0x1D98,0x1D98,0x1D98}, {0x1D99,0x1D99,0x1D99}, /* 1D98 */
- {0x1D9A,0x1D9A,0x1D9A}, {0x1D9B,0x1D9B,0x1D9B}, /* 1D9A */
- {0x1D9C,0x1D9C,0x1D9C}, {0x1D9D,0x1D9D,0x1D9D}, /* 1D9C */
- {0x1D9E,0x1D9E,0x1D9E}, {0x1D9F,0x1D9F,0x1D9F}, /* 1D9E */
- {0x1DA0,0x1DA0,0x1DA0}, {0x1DA1,0x1DA1,0x1DA1}, /* 1DA0 */
- {0x1DA2,0x1DA2,0x1DA2}, {0x1DA3,0x1DA3,0x1DA3}, /* 1DA2 */
- {0x1DA4,0x1DA4,0x1DA4}, {0x1DA5,0x1DA5,0x1DA5}, /* 1DA4 */
- {0x1DA6,0x1DA6,0x1DA6}, {0x1DA7,0x1DA7,0x1DA7}, /* 1DA6 */
- {0x1DA8,0x1DA8,0x1DA8}, {0x1DA9,0x1DA9,0x1DA9}, /* 1DA8 */
- {0x1DAA,0x1DAA,0x1DAA}, {0x1DAB,0x1DAB,0x1DAB}, /* 1DAA */
- {0x1DAC,0x1DAC,0x1DAC}, {0x1DAD,0x1DAD,0x1DAD}, /* 1DAC */
- {0x1DAE,0x1DAE,0x1DAE}, {0x1DAF,0x1DAF,0x1DAF}, /* 1DAE */
- {0x1DB0,0x1DB0,0x1DB0}, {0x1DB1,0x1DB1,0x1DB1}, /* 1DB0 */
- {0x1DB2,0x1DB2,0x1DB2}, {0x1DB3,0x1DB3,0x1DB3}, /* 1DB2 */
- {0x1DB4,0x1DB4,0x1DB4}, {0x1DB5,0x1DB5,0x1DB5}, /* 1DB4 */
- {0x1DB6,0x1DB6,0x1DB6}, {0x1DB7,0x1DB7,0x1DB7}, /* 1DB6 */
- {0x1DB8,0x1DB8,0x1DB8}, {0x1DB9,0x1DB9,0x1DB9}, /* 1DB8 */
- {0x1DBA,0x1DBA,0x1DBA}, {0x1DBB,0x1DBB,0x1DBB}, /* 1DBA */
- {0x1DBC,0x1DBC,0x1DBC}, {0x1DBD,0x1DBD,0x1DBD}, /* 1DBC */
- {0x1DBE,0x1DBE,0x1DBE}, {0x1DBF,0x1DBF,0x1DBF}, /* 1DBE */
- {0x1DC0,0x1DC0,0x1DC0}, {0x1DC1,0x1DC1,0x1DC1}, /* 1DC0 */
- {0x1DC2,0x1DC2,0x1DC2}, {0x1DC3,0x1DC3,0x1DC3}, /* 1DC2 */
- {0x1DC4,0x1DC4,0x1DC4}, {0x1DC5,0x1DC5,0x1DC5}, /* 1DC4 */
- {0x1DC6,0x1DC6,0x1DC6}, {0x1DC7,0x1DC7,0x1DC7}, /* 1DC6 */
- {0x1DC8,0x1DC8,0x1DC8}, {0x1DC9,0x1DC9,0x1DC9}, /* 1DC8 */
- {0x1DCA,0x1DCA,0x1DCA}, {0x1DCB,0x1DCB,0x1DCB}, /* 1DCA */
- {0x1DCC,0x1DCC,0x1DCC}, {0x1DCD,0x1DCD,0x1DCD}, /* 1DCC */
- {0x1DCE,0x1DCE,0x1DCE}, {0x1DCF,0x1DCF,0x1DCF}, /* 1DCE */
- {0x1DD0,0x1DD0,0x1DD0}, {0x1DD1,0x1DD1,0x1DD1}, /* 1DD0 */
- {0x1DD2,0x1DD2,0x1DD2}, {0x1DD3,0x1DD3,0x1DD3}, /* 1DD2 */
- {0x1DD4,0x1DD4,0x1DD4}, {0x1DD5,0x1DD5,0x1DD5}, /* 1DD4 */
- {0x1DD6,0x1DD6,0x1DD6}, {0x1DD7,0x1DD7,0x1DD7}, /* 1DD6 */
- {0x1DD8,0x1DD8,0x1DD8}, {0x1DD9,0x1DD9,0x1DD9}, /* 1DD8 */
- {0x1DDA,0x1DDA,0x1DDA}, {0x1DDB,0x1DDB,0x1DDB}, /* 1DDA */
- {0x1DDC,0x1DDC,0x1DDC}, {0x1DDD,0x1DDD,0x1DDD}, /* 1DDC */
- {0x1DDE,0x1DDE,0x1DDE}, {0x1DDF,0x1DDF,0x1DDF}, /* 1DDE */
- {0x1DE0,0x1DE0,0x1DE0}, {0x1DE1,0x1DE1,0x1DE1}, /* 1DE0 */
- {0x1DE2,0x1DE2,0x1DE2}, {0x1DE3,0x1DE3,0x1DE3}, /* 1DE2 */
- {0x1DE4,0x1DE4,0x1DE4}, {0x1DE5,0x1DE5,0x1DE5}, /* 1DE4 */
- {0x1DE6,0x1DE6,0x1DE6}, {0x1DE7,0x1DE7,0x1DE7}, /* 1DE6 */
- {0x1DE8,0x1DE8,0x1DE8}, {0x1DE9,0x1DE9,0x1DE9}, /* 1DE8 */
- {0x1DEA,0x1DEA,0x1DEA}, {0x1DEB,0x1DEB,0x1DEB}, /* 1DEA */
- {0x1DEC,0x1DEC,0x1DEC}, {0x1DED,0x1DED,0x1DED}, /* 1DEC */
- {0x1DEE,0x1DEE,0x1DEE}, {0x1DEF,0x1DEF,0x1DEF}, /* 1DEE */
- {0x1DF0,0x1DF0,0x1DF0}, {0x1DF1,0x1DF1,0x1DF1}, /* 1DF0 */
- {0x1DF2,0x1DF2,0x1DF2}, {0x1DF3,0x1DF3,0x1DF3}, /* 1DF2 */
- {0x1DF4,0x1DF4,0x1DF4}, {0x1DF5,0x1DF5,0x1DF5}, /* 1DF4 */
- {0x1DF6,0x1DF6,0x1DF6}, {0x1DF7,0x1DF7,0x1DF7}, /* 1DF6 */
- {0x1DF8,0x1DF8,0x1DF8}, {0x1DF9,0x1DF9,0x1DF9}, /* 1DF8 */
- {0x1DFA,0x1DFA,0x1DFA}, {0x1DFB,0x1DFB,0x1DFB}, /* 1DFA */
- {0x1DFC,0x1DFC,0x1DFC}, {0x1DFD,0x1DFD,0x1DFD}, /* 1DFC */
- {0x1DFE,0x1DFE,0x1DFE}, {0x1DFF,0x1DFF,0x1DFF} /* 1DFE */
-};
-
-static MY_UNICASE_CHARACTER u520p1E[]={
- {0x1E00,0x1E01,0x0041}, {0x1E00,0x1E01,0x0041}, /* 1E00 */
- {0x1E02,0x1E03,0x0042}, {0x1E02,0x1E03,0x0042}, /* 1E02 */
- {0x1E04,0x1E05,0x0042}, {0x1E04,0x1E05,0x0042}, /* 1E04 */
- {0x1E06,0x1E07,0x0042}, {0x1E06,0x1E07,0x0042}, /* 1E06 */
- {0x1E08,0x1E09,0x0043}, {0x1E08,0x1E09,0x0043}, /* 1E08 */
- {0x1E0A,0x1E0B,0x0044}, {0x1E0A,0x1E0B,0x0044}, /* 1E0A */
- {0x1E0C,0x1E0D,0x0044}, {0x1E0C,0x1E0D,0x0044}, /* 1E0C */
- {0x1E0E,0x1E0F,0x0044}, {0x1E0E,0x1E0F,0x0044}, /* 1E0E */
- {0x1E10,0x1E11,0x0044}, {0x1E10,0x1E11,0x0044}, /* 1E10 */
- {0x1E12,0x1E13,0x0044}, {0x1E12,0x1E13,0x0044}, /* 1E12 */
- {0x1E14,0x1E15,0x0045}, {0x1E14,0x1E15,0x0045}, /* 1E14 */
- {0x1E16,0x1E17,0x0045}, {0x1E16,0x1E17,0x0045}, /* 1E16 */
- {0x1E18,0x1E19,0x0045}, {0x1E18,0x1E19,0x0045}, /* 1E18 */
- {0x1E1A,0x1E1B,0x0045}, {0x1E1A,0x1E1B,0x0045}, /* 1E1A */
- {0x1E1C,0x1E1D,0x0045}, {0x1E1C,0x1E1D,0x0045}, /* 1E1C */
- {0x1E1E,0x1E1F,0x0046}, {0x1E1E,0x1E1F,0x0046}, /* 1E1E */
- {0x1E20,0x1E21,0x0047}, {0x1E20,0x1E21,0x0047}, /* 1E20 */
- {0x1E22,0x1E23,0x0048}, {0x1E22,0x1E23,0x0048}, /* 1E22 */
- {0x1E24,0x1E25,0x0048}, {0x1E24,0x1E25,0x0048}, /* 1E24 */
- {0x1E26,0x1E27,0x0048}, {0x1E26,0x1E27,0x0048}, /* 1E26 */
- {0x1E28,0x1E29,0x0048}, {0x1E28,0x1E29,0x0048}, /* 1E28 */
- {0x1E2A,0x1E2B,0x0048}, {0x1E2A,0x1E2B,0x0048}, /* 1E2A */
- {0x1E2C,0x1E2D,0x0049}, {0x1E2C,0x1E2D,0x0049}, /* 1E2C */
- {0x1E2E,0x1E2F,0x0049}, {0x1E2E,0x1E2F,0x0049}, /* 1E2E */
- {0x1E30,0x1E31,0x004B}, {0x1E30,0x1E31,0x004B}, /* 1E30 */
- {0x1E32,0x1E33,0x004B}, {0x1E32,0x1E33,0x004B}, /* 1E32 */
- {0x1E34,0x1E35,0x004B}, {0x1E34,0x1E35,0x004B}, /* 1E34 */
- {0x1E36,0x1E37,0x004C}, {0x1E36,0x1E37,0x004C}, /* 1E36 */
- {0x1E38,0x1E39,0x004C}, {0x1E38,0x1E39,0x004C}, /* 1E38 */
- {0x1E3A,0x1E3B,0x004C}, {0x1E3A,0x1E3B,0x004C}, /* 1E3A */
- {0x1E3C,0x1E3D,0x004C}, {0x1E3C,0x1E3D,0x004C}, /* 1E3C */
- {0x1E3E,0x1E3F,0x004D}, {0x1E3E,0x1E3F,0x004D}, /* 1E3E */
- {0x1E40,0x1E41,0x004D}, {0x1E40,0x1E41,0x004D}, /* 1E40 */
- {0x1E42,0x1E43,0x004D}, {0x1E42,0x1E43,0x004D}, /* 1E42 */
- {0x1E44,0x1E45,0x004E}, {0x1E44,0x1E45,0x004E}, /* 1E44 */
- {0x1E46,0x1E47,0x004E}, {0x1E46,0x1E47,0x004E}, /* 1E46 */
- {0x1E48,0x1E49,0x004E}, {0x1E48,0x1E49,0x004E}, /* 1E48 */
- {0x1E4A,0x1E4B,0x004E}, {0x1E4A,0x1E4B,0x004E}, /* 1E4A */
- {0x1E4C,0x1E4D,0x004F}, {0x1E4C,0x1E4D,0x004F}, /* 1E4C */
- {0x1E4E,0x1E4F,0x004F}, {0x1E4E,0x1E4F,0x004F}, /* 1E4E */
- {0x1E50,0x1E51,0x004F}, {0x1E50,0x1E51,0x004F}, /* 1E50 */
- {0x1E52,0x1E53,0x004F}, {0x1E52,0x1E53,0x004F}, /* 1E52 */
- {0x1E54,0x1E55,0x0050}, {0x1E54,0x1E55,0x0050}, /* 1E54 */
- {0x1E56,0x1E57,0x0050}, {0x1E56,0x1E57,0x0050}, /* 1E56 */
- {0x1E58,0x1E59,0x0052}, {0x1E58,0x1E59,0x0052}, /* 1E58 */
- {0x1E5A,0x1E5B,0x0052}, {0x1E5A,0x1E5B,0x0052}, /* 1E5A */
- {0x1E5C,0x1E5D,0x0052}, {0x1E5C,0x1E5D,0x0052}, /* 1E5C */
- {0x1E5E,0x1E5F,0x0052}, {0x1E5E,0x1E5F,0x0052}, /* 1E5E */
- {0x1E60,0x1E61,0x0053}, {0x1E60,0x1E61,0x0053}, /* 1E60 */
- {0x1E62,0x1E63,0x0053}, {0x1E62,0x1E63,0x0053}, /* 1E62 */
- {0x1E64,0x1E65,0x0053}, {0x1E64,0x1E65,0x0053}, /* 1E64 */
- {0x1E66,0x1E67,0x0053}, {0x1E66,0x1E67,0x0053}, /* 1E66 */
- {0x1E68,0x1E69,0x0053}, {0x1E68,0x1E69,0x0053}, /* 1E68 */
- {0x1E6A,0x1E6B,0x0054}, {0x1E6A,0x1E6B,0x0054}, /* 1E6A */
- {0x1E6C,0x1E6D,0x0054}, {0x1E6C,0x1E6D,0x0054}, /* 1E6C */
- {0x1E6E,0x1E6F,0x0054}, {0x1E6E,0x1E6F,0x0054}, /* 1E6E */
- {0x1E70,0x1E71,0x0054}, {0x1E70,0x1E71,0x0054}, /* 1E70 */
- {0x1E72,0x1E73,0x0055}, {0x1E72,0x1E73,0x0055}, /* 1E72 */
- {0x1E74,0x1E75,0x0055}, {0x1E74,0x1E75,0x0055}, /* 1E74 */
- {0x1E76,0x1E77,0x0055}, {0x1E76,0x1E77,0x0055}, /* 1E76 */
- {0x1E78,0x1E79,0x0055}, {0x1E78,0x1E79,0x0055}, /* 1E78 */
- {0x1E7A,0x1E7B,0x0055}, {0x1E7A,0x1E7B,0x0055}, /* 1E7A */
- {0x1E7C,0x1E7D,0x0056}, {0x1E7C,0x1E7D,0x0056}, /* 1E7C */
- {0x1E7E,0x1E7F,0x0056}, {0x1E7E,0x1E7F,0x0056}, /* 1E7E */
- {0x1E80,0x1E81,0x0057}, {0x1E80,0x1E81,0x0057}, /* 1E80 */
- {0x1E82,0x1E83,0x0057}, {0x1E82,0x1E83,0x0057}, /* 1E82 */
- {0x1E84,0x1E85,0x0057}, {0x1E84,0x1E85,0x0057}, /* 1E84 */
- {0x1E86,0x1E87,0x0057}, {0x1E86,0x1E87,0x0057}, /* 1E86 */
- {0x1E88,0x1E89,0x0057}, {0x1E88,0x1E89,0x0057}, /* 1E88 */
- {0x1E8A,0x1E8B,0x0058}, {0x1E8A,0x1E8B,0x0058}, /* 1E8A */
- {0x1E8C,0x1E8D,0x0058}, {0x1E8C,0x1E8D,0x0058}, /* 1E8C */
- {0x1E8E,0x1E8F,0x0059}, {0x1E8E,0x1E8F,0x0059}, /* 1E8E */
- {0x1E90,0x1E91,0x005A}, {0x1E90,0x1E91,0x005A}, /* 1E90 */
- {0x1E92,0x1E93,0x005A}, {0x1E92,0x1E93,0x005A}, /* 1E92 */
- {0x1E94,0x1E95,0x005A}, {0x1E94,0x1E95,0x005A}, /* 1E94 */
- {0x1E96,0x1E96,0x0048}, {0x1E97,0x1E97,0x0054}, /* 1E96 */
- {0x1E98,0x1E98,0x0057}, {0x1E99,0x1E99,0x0059}, /* 1E98 */
- {0x1E9A,0x1E9A,0x1E9A}, {0x1E60,0x1E9B,0x0053}, /* 1E9A */
- {0x1E9C,0x1E9C,0x1E9C}, {0x1E9D,0x1E9D,0x1E9D}, /* 1E9C */
- {0x1E9E,0x00DF,0x1E9E}, {0x1E9F,0x1E9F,0x1E9F}, /* 1E9E */
- {0x1EA0,0x1EA1,0x0041}, {0x1EA0,0x1EA1,0x0041}, /* 1EA0 */
- {0x1EA2,0x1EA3,0x0041}, {0x1EA2,0x1EA3,0x0041}, /* 1EA2 */
- {0x1EA4,0x1EA5,0x0041}, {0x1EA4,0x1EA5,0x0041}, /* 1EA4 */
- {0x1EA6,0x1EA7,0x0041}, {0x1EA6,0x1EA7,0x0041}, /* 1EA6 */
- {0x1EA8,0x1EA9,0x0041}, {0x1EA8,0x1EA9,0x0041}, /* 1EA8 */
- {0x1EAA,0x1EAB,0x0041}, {0x1EAA,0x1EAB,0x0041}, /* 1EAA */
- {0x1EAC,0x1EAD,0x0041}, {0x1EAC,0x1EAD,0x0041}, /* 1EAC */
- {0x1EAE,0x1EAF,0x0041}, {0x1EAE,0x1EAF,0x0041}, /* 1EAE */
- {0x1EB0,0x1EB1,0x0041}, {0x1EB0,0x1EB1,0x0041}, /* 1EB0 */
- {0x1EB2,0x1EB3,0x0041}, {0x1EB2,0x1EB3,0x0041}, /* 1EB2 */
- {0x1EB4,0x1EB5,0x0041}, {0x1EB4,0x1EB5,0x0041}, /* 1EB4 */
- {0x1EB6,0x1EB7,0x0041}, {0x1EB6,0x1EB7,0x0041}, /* 1EB6 */
- {0x1EB8,0x1EB9,0x0045}, {0x1EB8,0x1EB9,0x0045}, /* 1EB8 */
- {0x1EBA,0x1EBB,0x0045}, {0x1EBA,0x1EBB,0x0045}, /* 1EBA */
- {0x1EBC,0x1EBD,0x0045}, {0x1EBC,0x1EBD,0x0045}, /* 1EBC */
- {0x1EBE,0x1EBF,0x0045}, {0x1EBE,0x1EBF,0x0045}, /* 1EBE */
- {0x1EC0,0x1EC1,0x0045}, {0x1EC0,0x1EC1,0x0045}, /* 1EC0 */
- {0x1EC2,0x1EC3,0x0045}, {0x1EC2,0x1EC3,0x0045}, /* 1EC2 */
- {0x1EC4,0x1EC5,0x0045}, {0x1EC4,0x1EC5,0x0045}, /* 1EC4 */
- {0x1EC6,0x1EC7,0x0045}, {0x1EC6,0x1EC7,0x0045}, /* 1EC6 */
- {0x1EC8,0x1EC9,0x0049}, {0x1EC8,0x1EC9,0x0049}, /* 1EC8 */
- {0x1ECA,0x1ECB,0x0049}, {0x1ECA,0x1ECB,0x0049}, /* 1ECA */
- {0x1ECC,0x1ECD,0x004F}, {0x1ECC,0x1ECD,0x004F}, /* 1ECC */
- {0x1ECE,0x1ECF,0x004F}, {0x1ECE,0x1ECF,0x004F}, /* 1ECE */
- {0x1ED0,0x1ED1,0x004F}, {0x1ED0,0x1ED1,0x004F}, /* 1ED0 */
- {0x1ED2,0x1ED3,0x004F}, {0x1ED2,0x1ED3,0x004F}, /* 1ED2 */
- {0x1ED4,0x1ED5,0x004F}, {0x1ED4,0x1ED5,0x004F}, /* 1ED4 */
- {0x1ED6,0x1ED7,0x004F}, {0x1ED6,0x1ED7,0x004F}, /* 1ED6 */
- {0x1ED8,0x1ED9,0x004F}, {0x1ED8,0x1ED9,0x004F}, /* 1ED8 */
- {0x1EDA,0x1EDB,0x004F}, {0x1EDA,0x1EDB,0x004F}, /* 1EDA */
- {0x1EDC,0x1EDD,0x004F}, {0x1EDC,0x1EDD,0x004F}, /* 1EDC */
- {0x1EDE,0x1EDF,0x004F}, {0x1EDE,0x1EDF,0x004F}, /* 1EDE */
- {0x1EE0,0x1EE1,0x004F}, {0x1EE0,0x1EE1,0x004F}, /* 1EE0 */
- {0x1EE2,0x1EE3,0x004F}, {0x1EE2,0x1EE3,0x004F}, /* 1EE2 */
- {0x1EE4,0x1EE5,0x0055}, {0x1EE4,0x1EE5,0x0055}, /* 1EE4 */
- {0x1EE6,0x1EE7,0x0055}, {0x1EE6,0x1EE7,0x0055}, /* 1EE6 */
- {0x1EE8,0x1EE9,0x0055}, {0x1EE8,0x1EE9,0x0055}, /* 1EE8 */
- {0x1EEA,0x1EEB,0x0055}, {0x1EEA,0x1EEB,0x0055}, /* 1EEA */
- {0x1EEC,0x1EED,0x0055}, {0x1EEC,0x1EED,0x0055}, /* 1EEC */
- {0x1EEE,0x1EEF,0x0055}, {0x1EEE,0x1EEF,0x0055}, /* 1EEE */
- {0x1EF0,0x1EF1,0x0055}, {0x1EF0,0x1EF1,0x0055}, /* 1EF0 */
- {0x1EF2,0x1EF3,0x0059}, {0x1EF2,0x1EF3,0x0059}, /* 1EF2 */
- {0x1EF4,0x1EF5,0x0059}, {0x1EF4,0x1EF5,0x0059}, /* 1EF4 */
- {0x1EF6,0x1EF7,0x0059}, {0x1EF6,0x1EF7,0x0059}, /* 1EF6 */
- {0x1EF8,0x1EF9,0x0059}, {0x1EF8,0x1EF9,0x0059}, /* 1EF8 */
- {0x1EFA,0x1EFB,0x1EFA}, {0x1EFA,0x1EFB,0x1EFA}, /* 1EFA */
- {0x1EFC,0x1EFD,0x1EFC}, {0x1EFC,0x1EFD,0x1EFC}, /* 1EFC */
- {0x1EFE,0x1EFF,0x1EFE}, {0x1EFE,0x1EFF,0x1EFE} /* 1EFE */
-};
-
-static MY_UNICASE_CHARACTER u520p1F[]={
- {0x1F08,0x1F00,0x0391}, {0x1F09,0x1F01,0x0391}, /* 1F00 */
- {0x1F0A,0x1F02,0x0391}, {0x1F0B,0x1F03,0x0391}, /* 1F02 */
- {0x1F0C,0x1F04,0x0391}, {0x1F0D,0x1F05,0x0391}, /* 1F04 */
- {0x1F0E,0x1F06,0x0391}, {0x1F0F,0x1F07,0x0391}, /* 1F06 */
- {0x1F08,0x1F00,0x0391}, {0x1F09,0x1F01,0x0391}, /* 1F08 */
- {0x1F0A,0x1F02,0x0391}, {0x1F0B,0x1F03,0x0391}, /* 1F0A */
- {0x1F0C,0x1F04,0x0391}, {0x1F0D,0x1F05,0x0391}, /* 1F0C */
- {0x1F0E,0x1F06,0x0391}, {0x1F0F,0x1F07,0x0391}, /* 1F0E */
- {0x1F18,0x1F10,0x0395}, {0x1F19,0x1F11,0x0395}, /* 1F10 */
- {0x1F1A,0x1F12,0x0395}, {0x1F1B,0x1F13,0x0395}, /* 1F12 */
- {0x1F1C,0x1F14,0x0395}, {0x1F1D,0x1F15,0x0395}, /* 1F14 */
- {0x1F16,0x1F16,0x1F16}, {0x1F17,0x1F17,0x1F17}, /* 1F16 */
- {0x1F18,0x1F10,0x0395}, {0x1F19,0x1F11,0x0395}, /* 1F18 */
- {0x1F1A,0x1F12,0x0395}, {0x1F1B,0x1F13,0x0395}, /* 1F1A */
- {0x1F1C,0x1F14,0x0395}, {0x1F1D,0x1F15,0x0395}, /* 1F1C */
- {0x1F1E,0x1F1E,0x1F1E}, {0x1F1F,0x1F1F,0x1F1F}, /* 1F1E */
- {0x1F28,0x1F20,0x0397}, {0x1F29,0x1F21,0x0397}, /* 1F20 */
- {0x1F2A,0x1F22,0x0397}, {0x1F2B,0x1F23,0x0397}, /* 1F22 */
- {0x1F2C,0x1F24,0x0397}, {0x1F2D,0x1F25,0x0397}, /* 1F24 */
- {0x1F2E,0x1F26,0x0397}, {0x1F2F,0x1F27,0x0397}, /* 1F26 */
- {0x1F28,0x1F20,0x0397}, {0x1F29,0x1F21,0x0397}, /* 1F28 */
- {0x1F2A,0x1F22,0x0397}, {0x1F2B,0x1F23,0x0397}, /* 1F2A */
- {0x1F2C,0x1F24,0x0397}, {0x1F2D,0x1F25,0x0397}, /* 1F2C */
- {0x1F2E,0x1F26,0x0397}, {0x1F2F,0x1F27,0x0397}, /* 1F2E */
- {0x1F38,0x1F30,0x0399}, {0x1F39,0x1F31,0x0399}, /* 1F30 */
- {0x1F3A,0x1F32,0x0399}, {0x1F3B,0x1F33,0x0399}, /* 1F32 */
- {0x1F3C,0x1F34,0x0399}, {0x1F3D,0x1F35,0x0399}, /* 1F34 */
- {0x1F3E,0x1F36,0x0399}, {0x1F3F,0x1F37,0x0399}, /* 1F36 */
- {0x1F38,0x1F30,0x0399}, {0x1F39,0x1F31,0x0399}, /* 1F38 */
- {0x1F3A,0x1F32,0x0399}, {0x1F3B,0x1F33,0x0399}, /* 1F3A */
- {0x1F3C,0x1F34,0x0399}, {0x1F3D,0x1F35,0x0399}, /* 1F3C */
- {0x1F3E,0x1F36,0x0399}, {0x1F3F,0x1F37,0x0399}, /* 1F3E */
- {0x1F48,0x1F40,0x039F}, {0x1F49,0x1F41,0x039F}, /* 1F40 */
- {0x1F4A,0x1F42,0x039F}, {0x1F4B,0x1F43,0x039F}, /* 1F42 */
- {0x1F4C,0x1F44,0x039F}, {0x1F4D,0x1F45,0x039F}, /* 1F44 */
- {0x1F46,0x1F46,0x1F46}, {0x1F47,0x1F47,0x1F47}, /* 1F46 */
- {0x1F48,0x1F40,0x039F}, {0x1F49,0x1F41,0x039F}, /* 1F48 */
- {0x1F4A,0x1F42,0x039F}, {0x1F4B,0x1F43,0x039F}, /* 1F4A */
- {0x1F4C,0x1F44,0x039F}, {0x1F4D,0x1F45,0x039F}, /* 1F4C */
- {0x1F4E,0x1F4E,0x1F4E}, {0x1F4F,0x1F4F,0x1F4F}, /* 1F4E */
- {0x1F50,0x1F50,0x03A5}, {0x1F59,0x1F51,0x03A5}, /* 1F50 */
- {0x1F52,0x1F52,0x03A5}, {0x1F5B,0x1F53,0x03A5}, /* 1F52 */
- {0x1F54,0x1F54,0x03A5}, {0x1F5D,0x1F55,0x03A5}, /* 1F54 */
- {0x1F56,0x1F56,0x03A5}, {0x1F5F,0x1F57,0x03A5}, /* 1F56 */
- {0x1F58,0x1F58,0x1F58}, {0x1F59,0x1F51,0x03A5}, /* 1F58 */
- {0x1F5A,0x1F5A,0x1F5A}, {0x1F5B,0x1F53,0x03A5}, /* 1F5A */
- {0x1F5C,0x1F5C,0x1F5C}, {0x1F5D,0x1F55,0x03A5}, /* 1F5C */
- {0x1F5E,0x1F5E,0x1F5E}, {0x1F5F,0x1F57,0x03A5}, /* 1F5E */
- {0x1F68,0x1F60,0x03A9}, {0x1F69,0x1F61,0x03A9}, /* 1F60 */
- {0x1F6A,0x1F62,0x03A9}, {0x1F6B,0x1F63,0x03A9}, /* 1F62 */
- {0x1F6C,0x1F64,0x03A9}, {0x1F6D,0x1F65,0x03A9}, /* 1F64 */
- {0x1F6E,0x1F66,0x03A9}, {0x1F6F,0x1F67,0x03A9}, /* 1F66 */
- {0x1F68,0x1F60,0x03A9}, {0x1F69,0x1F61,0x03A9}, /* 1F68 */
- {0x1F6A,0x1F62,0x03A9}, {0x1F6B,0x1F63,0x03A9}, /* 1F6A */
- {0x1F6C,0x1F64,0x03A9}, {0x1F6D,0x1F65,0x03A9}, /* 1F6C */
- {0x1F6E,0x1F66,0x03A9}, {0x1F6F,0x1F67,0x03A9}, /* 1F6E */
- {0x1FBA,0x1F70,0x0391}, {0x1FBB,0x1F71,0x1FBB}, /* 1F70 */
- {0x1FC8,0x1F72,0x0395}, {0x1FC9,0x1F73,0x1FC9}, /* 1F72 */
- {0x1FCA,0x1F74,0x0397}, {0x1FCB,0x1F75,0x1FCB}, /* 1F74 */
- {0x1FDA,0x1F76,0x0399}, {0x1FDB,0x1F77,0x1FDB}, /* 1F76 */
- {0x1FF8,0x1F78,0x039F}, {0x1FF9,0x1F79,0x1FF9}, /* 1F78 */
- {0x1FEA,0x1F7A,0x03A5}, {0x1FEB,0x1F7B,0x1FEB}, /* 1F7A */
- {0x1FFA,0x1F7C,0x03A9}, {0x1FFB,0x1F7D,0x1FFB}, /* 1F7C */
- {0x1F7E,0x1F7E,0x1F7E}, {0x1F7F,0x1F7F,0x1F7F}, /* 1F7E */
- {0x1F88,0x1F80,0x0391}, {0x1F89,0x1F81,0x0391}, /* 1F80 */
- {0x1F8A,0x1F82,0x0391}, {0x1F8B,0x1F83,0x0391}, /* 1F82 */
- {0x1F8C,0x1F84,0x0391}, {0x1F8D,0x1F85,0x0391}, /* 1F84 */
- {0x1F8E,0x1F86,0x0391}, {0x1F8F,0x1F87,0x0391}, /* 1F86 */
- {0x1F88,0x1F80,0x0391}, {0x1F89,0x1F81,0x0391}, /* 1F88 */
- {0x1F8A,0x1F82,0x0391}, {0x1F8B,0x1F83,0x0391}, /* 1F8A */
- {0x1F8C,0x1F84,0x0391}, {0x1F8D,0x1F85,0x0391}, /* 1F8C */
- {0x1F8E,0x1F86,0x0391}, {0x1F8F,0x1F87,0x0391}, /* 1F8E */
- {0x1F98,0x1F90,0x0397}, {0x1F99,0x1F91,0x0397}, /* 1F90 */
- {0x1F9A,0x1F92,0x0397}, {0x1F9B,0x1F93,0x0397}, /* 1F92 */
- {0x1F9C,0x1F94,0x0397}, {0x1F9D,0x1F95,0x0397}, /* 1F94 */
- {0x1F9E,0x1F96,0x0397}, {0x1F9F,0x1F97,0x0397}, /* 1F96 */
- {0x1F98,0x1F90,0x0397}, {0x1F99,0x1F91,0x0397}, /* 1F98 */
- {0x1F9A,0x1F92,0x0397}, {0x1F9B,0x1F93,0x0397}, /* 1F9A */
- {0x1F9C,0x1F94,0x0397}, {0x1F9D,0x1F95,0x0397}, /* 1F9C */
- {0x1F9E,0x1F96,0x0397}, {0x1F9F,0x1F97,0x0397}, /* 1F9E */
- {0x1FA8,0x1FA0,0x03A9}, {0x1FA9,0x1FA1,0x03A9}, /* 1FA0 */
- {0x1FAA,0x1FA2,0x03A9}, {0x1FAB,0x1FA3,0x03A9}, /* 1FA2 */
- {0x1FAC,0x1FA4,0x03A9}, {0x1FAD,0x1FA5,0x03A9}, /* 1FA4 */
- {0x1FAE,0x1FA6,0x03A9}, {0x1FAF,0x1FA7,0x03A9}, /* 1FA6 */
- {0x1FA8,0x1FA0,0x03A9}, {0x1FA9,0x1FA1,0x03A9}, /* 1FA8 */
- {0x1FAA,0x1FA2,0x03A9}, {0x1FAB,0x1FA3,0x03A9}, /* 1FAA */
- {0x1FAC,0x1FA4,0x03A9}, {0x1FAD,0x1FA5,0x03A9}, /* 1FAC */
- {0x1FAE,0x1FA6,0x03A9}, {0x1FAF,0x1FA7,0x03A9}, /* 1FAE */
- {0x1FB8,0x1FB0,0x0391}, {0x1FB9,0x1FB1,0x0391}, /* 1FB0 */
- {0x1FB2,0x1FB2,0x0391}, {0x1FBC,0x1FB3,0x0391}, /* 1FB2 */
- {0x1FB4,0x1FB4,0x0391}, {0x1FB5,0x1FB5,0x1FB5}, /* 1FB4 */
- {0x1FB6,0x1FB6,0x0391}, {0x1FB7,0x1FB7,0x0391}, /* 1FB6 */
- {0x1FB8,0x1FB0,0x0391}, {0x1FB9,0x1FB1,0x0391}, /* 1FB8 */
- {0x1FBA,0x1F70,0x0391}, {0x1FBB,0x1F71,0x1FBB}, /* 1FBA */
- {0x1FBC,0x1FB3,0x0391}, {0x1FBD,0x1FBD,0x1FBD}, /* 1FBC */
- {0x0399,0x1FBE,0x0399}, {0x1FBF,0x1FBF,0x1FBF}, /* 1FBE */
- {0x1FC0,0x1FC0,0x1FC0}, {0x1FC1,0x1FC1,0x1FC1}, /* 1FC0 */
- {0x1FC2,0x1FC2,0x0397}, {0x1FCC,0x1FC3,0x0397}, /* 1FC2 */
- {0x1FC4,0x1FC4,0x0397}, {0x1FC5,0x1FC5,0x1FC5}, /* 1FC4 */
- {0x1FC6,0x1FC6,0x0397}, {0x1FC7,0x1FC7,0x0397}, /* 1FC6 */
- {0x1FC8,0x1F72,0x0395}, {0x1FC9,0x1F73,0x1FC9}, /* 1FC8 */
- {0x1FCA,0x1F74,0x0397}, {0x1FCB,0x1F75,0x1FCB}, /* 1FCA */
- {0x1FCC,0x1FC3,0x0397}, {0x1FCD,0x1FCD,0x1FCD}, /* 1FCC */
- {0x1FCE,0x1FCE,0x1FCE}, {0x1FCF,0x1FCF,0x1FCF}, /* 1FCE */
- {0x1FD8,0x1FD0,0x0399}, {0x1FD9,0x1FD1,0x0399}, /* 1FD0 */
- {0x1FD2,0x1FD2,0x0399}, {0x1FD3,0x1FD3,0x1FD3}, /* 1FD2 */
- {0x1FD4,0x1FD4,0x1FD4}, {0x1FD5,0x1FD5,0x1FD5}, /* 1FD4 */
- {0x1FD6,0x1FD6,0x0399}, {0x1FD7,0x1FD7,0x0399}, /* 1FD6 */
- {0x1FD8,0x1FD0,0x0399}, {0x1FD9,0x1FD1,0x0399}, /* 1FD8 */
- {0x1FDA,0x1F76,0x0399}, {0x1FDB,0x1F77,0x1FDB}, /* 1FDA */
- {0x1FDC,0x1FDC,0x1FDC}, {0x1FDD,0x1FDD,0x1FDD}, /* 1FDC */
- {0x1FDE,0x1FDE,0x1FDE}, {0x1FDF,0x1FDF,0x1FDF}, /* 1FDE */
- {0x1FE8,0x1FE0,0x03A5}, {0x1FE9,0x1FE1,0x03A5}, /* 1FE0 */
- {0x1FE2,0x1FE2,0x03A5}, {0x1FE3,0x1FE3,0x1FE3}, /* 1FE2 */
- {0x1FE4,0x1FE4,0x03A1}, {0x1FEC,0x1FE5,0x03A1}, /* 1FE4 */
- {0x1FE6,0x1FE6,0x03A5}, {0x1FE7,0x1FE7,0x03A5}, /* 1FE6 */
- {0x1FE8,0x1FE0,0x03A5}, {0x1FE9,0x1FE1,0x03A5}, /* 1FE8 */
- {0x1FEA,0x1F7A,0x03A5}, {0x1FEB,0x1F7B,0x1FEB}, /* 1FEA */
- {0x1FEC,0x1FE5,0x03A1}, {0x1FED,0x1FED,0x1FED}, /* 1FEC */
- {0x1FEE,0x1FEE,0x1FEE}, {0x1FEF,0x1FEF,0x1FEF}, /* 1FEE */
- {0x1FF0,0x1FF0,0x1FF0}, {0x1FF1,0x1FF1,0x1FF1}, /* 1FF0 */
- {0x1FF2,0x1FF2,0x03A9}, {0x1FFC,0x1FF3,0x03A9}, /* 1FF2 */
- {0x1FF4,0x1FF4,0x03A9}, {0x1FF5,0x1FF5,0x1FF5}, /* 1FF4 */
- {0x1FF6,0x1FF6,0x03A9}, {0x1FF7,0x1FF7,0x03A9}, /* 1FF6 */
- {0x1FF8,0x1F78,0x039F}, {0x1FF9,0x1F79,0x1FF9}, /* 1FF8 */
- {0x1FFA,0x1F7C,0x03A9}, {0x1FFB,0x1F7D,0x1FFB}, /* 1FFA */
- {0x1FFC,0x1FF3,0x03A9}, {0x1FFD,0x1FFD,0x1FFD}, /* 1FFC */
- {0x1FFE,0x1FFE,0x1FFE}, {0x1FFF,0x1FFF,0x1FFF} /* 1FFE */
-};
-
-static MY_UNICASE_CHARACTER u520p21[]={
- {0x2100,0x2100,0x2100}, {0x2101,0x2101,0x2101}, /* 2100 */
- {0x2102,0x2102,0x2102}, {0x2103,0x2103,0x2103}, /* 2102 */
- {0x2104,0x2104,0x2104}, {0x2105,0x2105,0x2105}, /* 2104 */
- {0x2106,0x2106,0x2106}, {0x2107,0x2107,0x2107}, /* 2106 */
- {0x2108,0x2108,0x2108}, {0x2109,0x2109,0x2109}, /* 2108 */
- {0x210A,0x210A,0x210A}, {0x210B,0x210B,0x210B}, /* 210A */
- {0x210C,0x210C,0x210C}, {0x210D,0x210D,0x210D}, /* 210C */
- {0x210E,0x210E,0x210E}, {0x210F,0x210F,0x210F}, /* 210E */
- {0x2110,0x2110,0x2110}, {0x2111,0x2111,0x2111}, /* 2110 */
- {0x2112,0x2112,0x2112}, {0x2113,0x2113,0x2113}, /* 2112 */
- {0x2114,0x2114,0x2114}, {0x2115,0x2115,0x2115}, /* 2114 */
- {0x2116,0x2116,0x2116}, {0x2117,0x2117,0x2117}, /* 2116 */
- {0x2118,0x2118,0x2118}, {0x2119,0x2119,0x2119}, /* 2118 */
- {0x211A,0x211A,0x211A}, {0x211B,0x211B,0x211B}, /* 211A */
- {0x211C,0x211C,0x211C}, {0x211D,0x211D,0x211D}, /* 211C */
- {0x211E,0x211E,0x211E}, {0x211F,0x211F,0x211F}, /* 211E */
- {0x2120,0x2120,0x2120}, {0x2121,0x2121,0x2121}, /* 2120 */
- {0x2122,0x2122,0x2122}, {0x2123,0x2123,0x2123}, /* 2122 */
- {0x2124,0x2124,0x2124}, {0x2125,0x2125,0x2125}, /* 2124 */
- {0x2126,0x03C9,0x2126}, {0x2127,0x2127,0x2127}, /* 2126 */
- {0x2128,0x2128,0x2128}, {0x2129,0x2129,0x2129}, /* 2128 */
- {0x212A,0x006B,0x212A}, {0x212B,0x00E5,0x212B}, /* 212A */
- {0x212C,0x212C,0x212C}, {0x212D,0x212D,0x212D}, /* 212C */
- {0x212E,0x212E,0x212E}, {0x212F,0x212F,0x212F}, /* 212E */
- {0x2130,0x2130,0x2130}, {0x2131,0x2131,0x2131}, /* 2130 */
- {0x2132,0x214E,0x2132}, {0x2133,0x2133,0x2133}, /* 2132 */
- {0x2134,0x2134,0x2134}, {0x2135,0x2135,0x2135}, /* 2134 */
- {0x2136,0x2136,0x2136}, {0x2137,0x2137,0x2137}, /* 2136 */
- {0x2138,0x2138,0x2138}, {0x2139,0x2139,0x2139}, /* 2138 */
- {0x213A,0x213A,0x213A}, {0x213B,0x213B,0x213B}, /* 213A */
- {0x213C,0x213C,0x213C}, {0x213D,0x213D,0x213D}, /* 213C */
- {0x213E,0x213E,0x213E}, {0x213F,0x213F,0x213F}, /* 213E */
- {0x2140,0x2140,0x2140}, {0x2141,0x2141,0x2141}, /* 2140 */
- {0x2142,0x2142,0x2142}, {0x2143,0x2143,0x2143}, /* 2142 */
- {0x2144,0x2144,0x2144}, {0x2145,0x2145,0x2145}, /* 2144 */
- {0x2146,0x2146,0x2146}, {0x2147,0x2147,0x2147}, /* 2146 */
- {0x2148,0x2148,0x2148}, {0x2149,0x2149,0x2149}, /* 2148 */
- {0x214A,0x214A,0x214A}, {0x214B,0x214B,0x214B}, /* 214A */
- {0x214C,0x214C,0x214C}, {0x214D,0x214D,0x214D}, /* 214C */
- {0x2132,0x214E,0x2132}, {0x214F,0x214F,0x214F}, /* 214E */
- {0x2150,0x2150,0x2150}, {0x2151,0x2151,0x2151}, /* 2150 */
- {0x2152,0x2152,0x2152}, {0x2153,0x2153,0x2153}, /* 2152 */
- {0x2154,0x2154,0x2154}, {0x2155,0x2155,0x2155}, /* 2154 */
- {0x2156,0x2156,0x2156}, {0x2157,0x2157,0x2157}, /* 2156 */
- {0x2158,0x2158,0x2158}, {0x2159,0x2159,0x2159}, /* 2158 */
- {0x215A,0x215A,0x215A}, {0x215B,0x215B,0x215B}, /* 215A */
- {0x215C,0x215C,0x215C}, {0x215D,0x215D,0x215D}, /* 215C */
- {0x215E,0x215E,0x215E}, {0x215F,0x215F,0x215F}, /* 215E */
- {0x2160,0x2170,0x2160}, {0x2161,0x2171,0x2161}, /* 2160 */
- {0x2162,0x2172,0x2162}, {0x2163,0x2173,0x2163}, /* 2162 */
- {0x2164,0x2174,0x2164}, {0x2165,0x2175,0x2165}, /* 2164 */
- {0x2166,0x2176,0x2166}, {0x2167,0x2177,0x2167}, /* 2166 */
- {0x2168,0x2178,0x2168}, {0x2169,0x2179,0x2169}, /* 2168 */
- {0x216A,0x217A,0x216A}, {0x216B,0x217B,0x216B}, /* 216A */
- {0x216C,0x217C,0x216C}, {0x216D,0x217D,0x216D}, /* 216C */
- {0x216E,0x217E,0x216E}, {0x216F,0x217F,0x216F}, /* 216E */
- {0x2160,0x2170,0x2160}, {0x2161,0x2171,0x2161}, /* 2170 */
- {0x2162,0x2172,0x2162}, {0x2163,0x2173,0x2163}, /* 2172 */
- {0x2164,0x2174,0x2164}, {0x2165,0x2175,0x2165}, /* 2174 */
- {0x2166,0x2176,0x2166}, {0x2167,0x2177,0x2167}, /* 2176 */
- {0x2168,0x2178,0x2168}, {0x2169,0x2179,0x2169}, /* 2178 */
- {0x216A,0x217A,0x216A}, {0x216B,0x217B,0x216B}, /* 217A */
- {0x216C,0x217C,0x216C}, {0x216D,0x217D,0x216D}, /* 217C */
- {0x216E,0x217E,0x216E}, {0x216F,0x217F,0x216F}, /* 217E */
- {0x2180,0x2180,0x2180}, {0x2181,0x2181,0x2181}, /* 2180 */
- {0x2182,0x2182,0x2182}, {0x2183,0x2184,0x2183}, /* 2182 */
- {0x2183,0x2184,0x2183}, {0x2185,0x2185,0x2185}, /* 2184 */
- {0x2186,0x2186,0x2186}, {0x2187,0x2187,0x2187}, /* 2186 */
- {0x2188,0x2188,0x2188}, {0x2189,0x2189,0x2189}, /* 2188 */
- {0x218A,0x218A,0x218A}, {0x218B,0x218B,0x218B}, /* 218A */
- {0x218C,0x218C,0x218C}, {0x218D,0x218D,0x218D}, /* 218C */
- {0x218E,0x218E,0x218E}, {0x218F,0x218F,0x218F}, /* 218E */
- {0x2190,0x2190,0x2190}, {0x2191,0x2191,0x2191}, /* 2190 */
- {0x2192,0x2192,0x2192}, {0x2193,0x2193,0x2193}, /* 2192 */
- {0x2194,0x2194,0x2194}, {0x2195,0x2195,0x2195}, /* 2194 */
- {0x2196,0x2196,0x2196}, {0x2197,0x2197,0x2197}, /* 2196 */
- {0x2198,0x2198,0x2198}, {0x2199,0x2199,0x2199}, /* 2198 */
- {0x219A,0x219A,0x219A}, {0x219B,0x219B,0x219B}, /* 219A */
- {0x219C,0x219C,0x219C}, {0x219D,0x219D,0x219D}, /* 219C */
- {0x219E,0x219E,0x219E}, {0x219F,0x219F,0x219F}, /* 219E */
- {0x21A0,0x21A0,0x21A0}, {0x21A1,0x21A1,0x21A1}, /* 21A0 */
- {0x21A2,0x21A2,0x21A2}, {0x21A3,0x21A3,0x21A3}, /* 21A2 */
- {0x21A4,0x21A4,0x21A4}, {0x21A5,0x21A5,0x21A5}, /* 21A4 */
- {0x21A6,0x21A6,0x21A6}, {0x21A7,0x21A7,0x21A7}, /* 21A6 */
- {0x21A8,0x21A8,0x21A8}, {0x21A9,0x21A9,0x21A9}, /* 21A8 */
- {0x21AA,0x21AA,0x21AA}, {0x21AB,0x21AB,0x21AB}, /* 21AA */
- {0x21AC,0x21AC,0x21AC}, {0x21AD,0x21AD,0x21AD}, /* 21AC */
- {0x21AE,0x21AE,0x21AE}, {0x21AF,0x21AF,0x21AF}, /* 21AE */
- {0x21B0,0x21B0,0x21B0}, {0x21B1,0x21B1,0x21B1}, /* 21B0 */
- {0x21B2,0x21B2,0x21B2}, {0x21B3,0x21B3,0x21B3}, /* 21B2 */
- {0x21B4,0x21B4,0x21B4}, {0x21B5,0x21B5,0x21B5}, /* 21B4 */
- {0x21B6,0x21B6,0x21B6}, {0x21B7,0x21B7,0x21B7}, /* 21B6 */
- {0x21B8,0x21B8,0x21B8}, {0x21B9,0x21B9,0x21B9}, /* 21B8 */
- {0x21BA,0x21BA,0x21BA}, {0x21BB,0x21BB,0x21BB}, /* 21BA */
- {0x21BC,0x21BC,0x21BC}, {0x21BD,0x21BD,0x21BD}, /* 21BC */
- {0x21BE,0x21BE,0x21BE}, {0x21BF,0x21BF,0x21BF}, /* 21BE */
- {0x21C0,0x21C0,0x21C0}, {0x21C1,0x21C1,0x21C1}, /* 21C0 */
- {0x21C2,0x21C2,0x21C2}, {0x21C3,0x21C3,0x21C3}, /* 21C2 */
- {0x21C4,0x21C4,0x21C4}, {0x21C5,0x21C5,0x21C5}, /* 21C4 */
- {0x21C6,0x21C6,0x21C6}, {0x21C7,0x21C7,0x21C7}, /* 21C6 */
- {0x21C8,0x21C8,0x21C8}, {0x21C9,0x21C9,0x21C9}, /* 21C8 */
- {0x21CA,0x21CA,0x21CA}, {0x21CB,0x21CB,0x21CB}, /* 21CA */
- {0x21CC,0x21CC,0x21CC}, {0x21CD,0x21CD,0x21CD}, /* 21CC */
- {0x21CE,0x21CE,0x21CE}, {0x21CF,0x21CF,0x21CF}, /* 21CE */
- {0x21D0,0x21D0,0x21D0}, {0x21D1,0x21D1,0x21D1}, /* 21D0 */
- {0x21D2,0x21D2,0x21D2}, {0x21D3,0x21D3,0x21D3}, /* 21D2 */
- {0x21D4,0x21D4,0x21D4}, {0x21D5,0x21D5,0x21D5}, /* 21D4 */
- {0x21D6,0x21D6,0x21D6}, {0x21D7,0x21D7,0x21D7}, /* 21D6 */
- {0x21D8,0x21D8,0x21D8}, {0x21D9,0x21D9,0x21D9}, /* 21D8 */
- {0x21DA,0x21DA,0x21DA}, {0x21DB,0x21DB,0x21DB}, /* 21DA */
- {0x21DC,0x21DC,0x21DC}, {0x21DD,0x21DD,0x21DD}, /* 21DC */
- {0x21DE,0x21DE,0x21DE}, {0x21DF,0x21DF,0x21DF}, /* 21DE */
- {0x21E0,0x21E0,0x21E0}, {0x21E1,0x21E1,0x21E1}, /* 21E0 */
- {0x21E2,0x21E2,0x21E2}, {0x21E3,0x21E3,0x21E3}, /* 21E2 */
- {0x21E4,0x21E4,0x21E4}, {0x21E5,0x21E5,0x21E5}, /* 21E4 */
- {0x21E6,0x21E6,0x21E6}, {0x21E7,0x21E7,0x21E7}, /* 21E6 */
- {0x21E8,0x21E8,0x21E8}, {0x21E9,0x21E9,0x21E9}, /* 21E8 */
- {0x21EA,0x21EA,0x21EA}, {0x21EB,0x21EB,0x21EB}, /* 21EA */
- {0x21EC,0x21EC,0x21EC}, {0x21ED,0x21ED,0x21ED}, /* 21EC */
- {0x21EE,0x21EE,0x21EE}, {0x21EF,0x21EF,0x21EF}, /* 21EE */
- {0x21F0,0x21F0,0x21F0}, {0x21F1,0x21F1,0x21F1}, /* 21F0 */
- {0x21F2,0x21F2,0x21F2}, {0x21F3,0x21F3,0x21F3}, /* 21F2 */
- {0x21F4,0x21F4,0x21F4}, {0x21F5,0x21F5,0x21F5}, /* 21F4 */
- {0x21F6,0x21F6,0x21F6}, {0x21F7,0x21F7,0x21F7}, /* 21F6 */
- {0x21F8,0x21F8,0x21F8}, {0x21F9,0x21F9,0x21F9}, /* 21F8 */
- {0x21FA,0x21FA,0x21FA}, {0x21FB,0x21FB,0x21FB}, /* 21FA */
- {0x21FC,0x21FC,0x21FC}, {0x21FD,0x21FD,0x21FD}, /* 21FC */
- {0x21FE,0x21FE,0x21FE}, {0x21FF,0x21FF,0x21FF} /* 21FE */
-};
-
-static MY_UNICASE_CHARACTER u520p24[]={
- {0x2400,0x2400,0x2400}, {0x2401,0x2401,0x2401}, /* 2400 */
- {0x2402,0x2402,0x2402}, {0x2403,0x2403,0x2403}, /* 2402 */
- {0x2404,0x2404,0x2404}, {0x2405,0x2405,0x2405}, /* 2404 */
- {0x2406,0x2406,0x2406}, {0x2407,0x2407,0x2407}, /* 2406 */
- {0x2408,0x2408,0x2408}, {0x2409,0x2409,0x2409}, /* 2408 */
- {0x240A,0x240A,0x240A}, {0x240B,0x240B,0x240B}, /* 240A */
- {0x240C,0x240C,0x240C}, {0x240D,0x240D,0x240D}, /* 240C */
- {0x240E,0x240E,0x240E}, {0x240F,0x240F,0x240F}, /* 240E */
- {0x2410,0x2410,0x2410}, {0x2411,0x2411,0x2411}, /* 2410 */
- {0x2412,0x2412,0x2412}, {0x2413,0x2413,0x2413}, /* 2412 */
- {0x2414,0x2414,0x2414}, {0x2415,0x2415,0x2415}, /* 2414 */
- {0x2416,0x2416,0x2416}, {0x2417,0x2417,0x2417}, /* 2416 */
- {0x2418,0x2418,0x2418}, {0x2419,0x2419,0x2419}, /* 2418 */
- {0x241A,0x241A,0x241A}, {0x241B,0x241B,0x241B}, /* 241A */
- {0x241C,0x241C,0x241C}, {0x241D,0x241D,0x241D}, /* 241C */
- {0x241E,0x241E,0x241E}, {0x241F,0x241F,0x241F}, /* 241E */
- {0x2420,0x2420,0x2420}, {0x2421,0x2421,0x2421}, /* 2420 */
- {0x2422,0x2422,0x2422}, {0x2423,0x2423,0x2423}, /* 2422 */
- {0x2424,0x2424,0x2424}, {0x2425,0x2425,0x2425}, /* 2424 */
- {0x2426,0x2426,0x2426}, {0x2427,0x2427,0x2427}, /* 2426 */
- {0x2428,0x2428,0x2428}, {0x2429,0x2429,0x2429}, /* 2428 */
- {0x242A,0x242A,0x242A}, {0x242B,0x242B,0x242B}, /* 242A */
- {0x242C,0x242C,0x242C}, {0x242D,0x242D,0x242D}, /* 242C */
- {0x242E,0x242E,0x242E}, {0x242F,0x242F,0x242F}, /* 242E */
- {0x2430,0x2430,0x2430}, {0x2431,0x2431,0x2431}, /* 2430 */
- {0x2432,0x2432,0x2432}, {0x2433,0x2433,0x2433}, /* 2432 */
- {0x2434,0x2434,0x2434}, {0x2435,0x2435,0x2435}, /* 2434 */
- {0x2436,0x2436,0x2436}, {0x2437,0x2437,0x2437}, /* 2436 */
- {0x2438,0x2438,0x2438}, {0x2439,0x2439,0x2439}, /* 2438 */
- {0x243A,0x243A,0x243A}, {0x243B,0x243B,0x243B}, /* 243A */
- {0x243C,0x243C,0x243C}, {0x243D,0x243D,0x243D}, /* 243C */
- {0x243E,0x243E,0x243E}, {0x243F,0x243F,0x243F}, /* 243E */
- {0x2440,0x2440,0x2440}, {0x2441,0x2441,0x2441}, /* 2440 */
- {0x2442,0x2442,0x2442}, {0x2443,0x2443,0x2443}, /* 2442 */
- {0x2444,0x2444,0x2444}, {0x2445,0x2445,0x2445}, /* 2444 */
- {0x2446,0x2446,0x2446}, {0x2447,0x2447,0x2447}, /* 2446 */
- {0x2448,0x2448,0x2448}, {0x2449,0x2449,0x2449}, /* 2448 */
- {0x244A,0x244A,0x244A}, {0x244B,0x244B,0x244B}, /* 244A */
- {0x244C,0x244C,0x244C}, {0x244D,0x244D,0x244D}, /* 244C */
- {0x244E,0x244E,0x244E}, {0x244F,0x244F,0x244F}, /* 244E */
- {0x2450,0x2450,0x2450}, {0x2451,0x2451,0x2451}, /* 2450 */
- {0x2452,0x2452,0x2452}, {0x2453,0x2453,0x2453}, /* 2452 */
- {0x2454,0x2454,0x2454}, {0x2455,0x2455,0x2455}, /* 2454 */
- {0x2456,0x2456,0x2456}, {0x2457,0x2457,0x2457}, /* 2456 */
- {0x2458,0x2458,0x2458}, {0x2459,0x2459,0x2459}, /* 2458 */
- {0x245A,0x245A,0x245A}, {0x245B,0x245B,0x245B}, /* 245A */
- {0x245C,0x245C,0x245C}, {0x245D,0x245D,0x245D}, /* 245C */
- {0x245E,0x245E,0x245E}, {0x245F,0x245F,0x245F}, /* 245E */
- {0x2460,0x2460,0x2460}, {0x2461,0x2461,0x2461}, /* 2460 */
- {0x2462,0x2462,0x2462}, {0x2463,0x2463,0x2463}, /* 2462 */
- {0x2464,0x2464,0x2464}, {0x2465,0x2465,0x2465}, /* 2464 */
- {0x2466,0x2466,0x2466}, {0x2467,0x2467,0x2467}, /* 2466 */
- {0x2468,0x2468,0x2468}, {0x2469,0x2469,0x2469}, /* 2468 */
- {0x246A,0x246A,0x246A}, {0x246B,0x246B,0x246B}, /* 246A */
- {0x246C,0x246C,0x246C}, {0x246D,0x246D,0x246D}, /* 246C */
- {0x246E,0x246E,0x246E}, {0x246F,0x246F,0x246F}, /* 246E */
- {0x2470,0x2470,0x2470}, {0x2471,0x2471,0x2471}, /* 2470 */
- {0x2472,0x2472,0x2472}, {0x2473,0x2473,0x2473}, /* 2472 */
- {0x2474,0x2474,0x2474}, {0x2475,0x2475,0x2475}, /* 2474 */
- {0x2476,0x2476,0x2476}, {0x2477,0x2477,0x2477}, /* 2476 */
- {0x2478,0x2478,0x2478}, {0x2479,0x2479,0x2479}, /* 2478 */
- {0x247A,0x247A,0x247A}, {0x247B,0x247B,0x247B}, /* 247A */
- {0x247C,0x247C,0x247C}, {0x247D,0x247D,0x247D}, /* 247C */
- {0x247E,0x247E,0x247E}, {0x247F,0x247F,0x247F}, /* 247E */
- {0x2480,0x2480,0x2480}, {0x2481,0x2481,0x2481}, /* 2480 */
- {0x2482,0x2482,0x2482}, {0x2483,0x2483,0x2483}, /* 2482 */
- {0x2484,0x2484,0x2484}, {0x2485,0x2485,0x2485}, /* 2484 */
- {0x2486,0x2486,0x2486}, {0x2487,0x2487,0x2487}, /* 2486 */
- {0x2488,0x2488,0x2488}, {0x2489,0x2489,0x2489}, /* 2488 */
- {0x248A,0x248A,0x248A}, {0x248B,0x248B,0x248B}, /* 248A */
- {0x248C,0x248C,0x248C}, {0x248D,0x248D,0x248D}, /* 248C */
- {0x248E,0x248E,0x248E}, {0x248F,0x248F,0x248F}, /* 248E */
- {0x2490,0x2490,0x2490}, {0x2491,0x2491,0x2491}, /* 2490 */
- {0x2492,0x2492,0x2492}, {0x2493,0x2493,0x2493}, /* 2492 */
- {0x2494,0x2494,0x2494}, {0x2495,0x2495,0x2495}, /* 2494 */
- {0x2496,0x2496,0x2496}, {0x2497,0x2497,0x2497}, /* 2496 */
- {0x2498,0x2498,0x2498}, {0x2499,0x2499,0x2499}, /* 2498 */
- {0x249A,0x249A,0x249A}, {0x249B,0x249B,0x249B}, /* 249A */
- {0x249C,0x249C,0x249C}, {0x249D,0x249D,0x249D}, /* 249C */
- {0x249E,0x249E,0x249E}, {0x249F,0x249F,0x249F}, /* 249E */
- {0x24A0,0x24A0,0x24A0}, {0x24A1,0x24A1,0x24A1}, /* 24A0 */
- {0x24A2,0x24A2,0x24A2}, {0x24A3,0x24A3,0x24A3}, /* 24A2 */
- {0x24A4,0x24A4,0x24A4}, {0x24A5,0x24A5,0x24A5}, /* 24A4 */
- {0x24A6,0x24A6,0x24A6}, {0x24A7,0x24A7,0x24A7}, /* 24A6 */
- {0x24A8,0x24A8,0x24A8}, {0x24A9,0x24A9,0x24A9}, /* 24A8 */
- {0x24AA,0x24AA,0x24AA}, {0x24AB,0x24AB,0x24AB}, /* 24AA */
- {0x24AC,0x24AC,0x24AC}, {0x24AD,0x24AD,0x24AD}, /* 24AC */
- {0x24AE,0x24AE,0x24AE}, {0x24AF,0x24AF,0x24AF}, /* 24AE */
- {0x24B0,0x24B0,0x24B0}, {0x24B1,0x24B1,0x24B1}, /* 24B0 */
- {0x24B2,0x24B2,0x24B2}, {0x24B3,0x24B3,0x24B3}, /* 24B2 */
- {0x24B4,0x24B4,0x24B4}, {0x24B5,0x24B5,0x24B5}, /* 24B4 */
- {0x24B6,0x24D0,0x24B6}, {0x24B7,0x24D1,0x24B7}, /* 24B6 */
- {0x24B8,0x24D2,0x24B8}, {0x24B9,0x24D3,0x24B9}, /* 24B8 */
- {0x24BA,0x24D4,0x24BA}, {0x24BB,0x24D5,0x24BB}, /* 24BA */
- {0x24BC,0x24D6,0x24BC}, {0x24BD,0x24D7,0x24BD}, /* 24BC */
- {0x24BE,0x24D8,0x24BE}, {0x24BF,0x24D9,0x24BF}, /* 24BE */
- {0x24C0,0x24DA,0x24C0}, {0x24C1,0x24DB,0x24C1}, /* 24C0 */
- {0x24C2,0x24DC,0x24C2}, {0x24C3,0x24DD,0x24C3}, /* 24C2 */
- {0x24C4,0x24DE,0x24C4}, {0x24C5,0x24DF,0x24C5}, /* 24C4 */
- {0x24C6,0x24E0,0x24C6}, {0x24C7,0x24E1,0x24C7}, /* 24C6 */
- {0x24C8,0x24E2,0x24C8}, {0x24C9,0x24E3,0x24C9}, /* 24C8 */
- {0x24CA,0x24E4,0x24CA}, {0x24CB,0x24E5,0x24CB}, /* 24CA */
- {0x24CC,0x24E6,0x24CC}, {0x24CD,0x24E7,0x24CD}, /* 24CC */
- {0x24CE,0x24E8,0x24CE}, {0x24CF,0x24E9,0x24CF}, /* 24CE */
- {0x24B6,0x24D0,0x24B6}, {0x24B7,0x24D1,0x24B7}, /* 24D0 */
- {0x24B8,0x24D2,0x24B8}, {0x24B9,0x24D3,0x24B9}, /* 24D2 */
- {0x24BA,0x24D4,0x24BA}, {0x24BB,0x24D5,0x24BB}, /* 24D4 */
- {0x24BC,0x24D6,0x24BC}, {0x24BD,0x24D7,0x24BD}, /* 24D6 */
- {0x24BE,0x24D8,0x24BE}, {0x24BF,0x24D9,0x24BF}, /* 24D8 */
- {0x24C0,0x24DA,0x24C0}, {0x24C1,0x24DB,0x24C1}, /* 24DA */
- {0x24C2,0x24DC,0x24C2}, {0x24C3,0x24DD,0x24C3}, /* 24DC */
- {0x24C4,0x24DE,0x24C4}, {0x24C5,0x24DF,0x24C5}, /* 24DE */
- {0x24C6,0x24E0,0x24C6}, {0x24C7,0x24E1,0x24C7}, /* 24E0 */
- {0x24C8,0x24E2,0x24C8}, {0x24C9,0x24E3,0x24C9}, /* 24E2 */
- {0x24CA,0x24E4,0x24CA}, {0x24CB,0x24E5,0x24CB}, /* 24E4 */
- {0x24CC,0x24E6,0x24CC}, {0x24CD,0x24E7,0x24CD}, /* 24E6 */
- {0x24CE,0x24E8,0x24CE}, {0x24CF,0x24E9,0x24CF}, /* 24E8 */
- {0x24EA,0x24EA,0x24EA}, {0x24EB,0x24EB,0x24EB}, /* 24EA */
- {0x24EC,0x24EC,0x24EC}, {0x24ED,0x24ED,0x24ED}, /* 24EC */
- {0x24EE,0x24EE,0x24EE}, {0x24EF,0x24EF,0x24EF}, /* 24EE */
- {0x24F0,0x24F0,0x24F0}, {0x24F1,0x24F1,0x24F1}, /* 24F0 */
- {0x24F2,0x24F2,0x24F2}, {0x24F3,0x24F3,0x24F3}, /* 24F2 */
- {0x24F4,0x24F4,0x24F4}, {0x24F5,0x24F5,0x24F5}, /* 24F4 */
- {0x24F6,0x24F6,0x24F6}, {0x24F7,0x24F7,0x24F7}, /* 24F6 */
- {0x24F8,0x24F8,0x24F8}, {0x24F9,0x24F9,0x24F9}, /* 24F8 */
- {0x24FA,0x24FA,0x24FA}, {0x24FB,0x24FB,0x24FB}, /* 24FA */
- {0x24FC,0x24FC,0x24FC}, {0x24FD,0x24FD,0x24FD}, /* 24FC */
- {0x24FE,0x24FE,0x24FE}, {0x24FF,0x24FF,0x24FF} /* 24FE */
-};
-
-static MY_UNICASE_CHARACTER u520p2C[]={
- {0x2C00,0x2C30,0x2C00}, {0x2C01,0x2C31,0x2C01}, /* 2C00 */
- {0x2C02,0x2C32,0x2C02}, {0x2C03,0x2C33,0x2C03}, /* 2C02 */
- {0x2C04,0x2C34,0x2C04}, {0x2C05,0x2C35,0x2C05}, /* 2C04 */
- {0x2C06,0x2C36,0x2C06}, {0x2C07,0x2C37,0x2C07}, /* 2C06 */
- {0x2C08,0x2C38,0x2C08}, {0x2C09,0x2C39,0x2C09}, /* 2C08 */
- {0x2C0A,0x2C3A,0x2C0A}, {0x2C0B,0x2C3B,0x2C0B}, /* 2C0A */
- {0x2C0C,0x2C3C,0x2C0C}, {0x2C0D,0x2C3D,0x2C0D}, /* 2C0C */
- {0x2C0E,0x2C3E,0x2C0E}, {0x2C0F,0x2C3F,0x2C0F}, /* 2C0E */
- {0x2C10,0x2C40,0x2C10}, {0x2C11,0x2C41,0x2C11}, /* 2C10 */
- {0x2C12,0x2C42,0x2C12}, {0x2C13,0x2C43,0x2C13}, /* 2C12 */
- {0x2C14,0x2C44,0x2C14}, {0x2C15,0x2C45,0x2C15}, /* 2C14 */
- {0x2C16,0x2C46,0x2C16}, {0x2C17,0x2C47,0x2C17}, /* 2C16 */
- {0x2C18,0x2C48,0x2C18}, {0x2C19,0x2C49,0x2C19}, /* 2C18 */
- {0x2C1A,0x2C4A,0x2C1A}, {0x2C1B,0x2C4B,0x2C1B}, /* 2C1A */
- {0x2C1C,0x2C4C,0x2C1C}, {0x2C1D,0x2C4D,0x2C1D}, /* 2C1C */
- {0x2C1E,0x2C4E,0x2C1E}, {0x2C1F,0x2C4F,0x2C1F}, /* 2C1E */
- {0x2C20,0x2C50,0x2C20}, {0x2C21,0x2C51,0x2C21}, /* 2C20 */
- {0x2C22,0x2C52,0x2C22}, {0x2C23,0x2C53,0x2C23}, /* 2C22 */
- {0x2C24,0x2C54,0x2C24}, {0x2C25,0x2C55,0x2C25}, /* 2C24 */
- {0x2C26,0x2C56,0x2C26}, {0x2C27,0x2C57,0x2C27}, /* 2C26 */
- {0x2C28,0x2C58,0x2C28}, {0x2C29,0x2C59,0x2C29}, /* 2C28 */
- {0x2C2A,0x2C5A,0x2C2A}, {0x2C2B,0x2C5B,0x2C2B}, /* 2C2A */
- {0x2C2C,0x2C5C,0x2C2C}, {0x2C2D,0x2C5D,0x2C2D}, /* 2C2C */
- {0x2C2E,0x2C5E,0x2C2E}, {0x2C2F,0x2C2F,0x2C2F}, /* 2C2E */
- {0x2C00,0x2C30,0x2C00}, {0x2C01,0x2C31,0x2C01}, /* 2C30 */
- {0x2C02,0x2C32,0x2C02}, {0x2C03,0x2C33,0x2C03}, /* 2C32 */
- {0x2C04,0x2C34,0x2C04}, {0x2C05,0x2C35,0x2C05}, /* 2C34 */
- {0x2C06,0x2C36,0x2C06}, {0x2C07,0x2C37,0x2C07}, /* 2C36 */
- {0x2C08,0x2C38,0x2C08}, {0x2C09,0x2C39,0x2C09}, /* 2C38 */
- {0x2C0A,0x2C3A,0x2C0A}, {0x2C0B,0x2C3B,0x2C0B}, /* 2C3A */
- {0x2C0C,0x2C3C,0x2C0C}, {0x2C0D,0x2C3D,0x2C0D}, /* 2C3C */
- {0x2C0E,0x2C3E,0x2C0E}, {0x2C0F,0x2C3F,0x2C0F}, /* 2C3E */
- {0x2C10,0x2C40,0x2C10}, {0x2C11,0x2C41,0x2C11}, /* 2C40 */
- {0x2C12,0x2C42,0x2C12}, {0x2C13,0x2C43,0x2C13}, /* 2C42 */
- {0x2C14,0x2C44,0x2C14}, {0x2C15,0x2C45,0x2C15}, /* 2C44 */
- {0x2C16,0x2C46,0x2C16}, {0x2C17,0x2C47,0x2C17}, /* 2C46 */
- {0x2C18,0x2C48,0x2C18}, {0x2C19,0x2C49,0x2C19}, /* 2C48 */
- {0x2C1A,0x2C4A,0x2C1A}, {0x2C1B,0x2C4B,0x2C1B}, /* 2C4A */
- {0x2C1C,0x2C4C,0x2C1C}, {0x2C1D,0x2C4D,0x2C1D}, /* 2C4C */
- {0x2C1E,0x2C4E,0x2C1E}, {0x2C1F,0x2C4F,0x2C1F}, /* 2C4E */
- {0x2C20,0x2C50,0x2C20}, {0x2C21,0x2C51,0x2C21}, /* 2C50 */
- {0x2C22,0x2C52,0x2C22}, {0x2C23,0x2C53,0x2C23}, /* 2C52 */
- {0x2C24,0x2C54,0x2C24}, {0x2C25,0x2C55,0x2C25}, /* 2C54 */
- {0x2C26,0x2C56,0x2C26}, {0x2C27,0x2C57,0x2C27}, /* 2C56 */
- {0x2C28,0x2C58,0x2C28}, {0x2C29,0x2C59,0x2C29}, /* 2C58 */
- {0x2C2A,0x2C5A,0x2C2A}, {0x2C2B,0x2C5B,0x2C2B}, /* 2C5A */
- {0x2C2C,0x2C5C,0x2C2C}, {0x2C2D,0x2C5D,0x2C2D}, /* 2C5C */
- {0x2C2E,0x2C5E,0x2C2E}, {0x2C5F,0x2C5F,0x2C5F}, /* 2C5E */
- {0x2C60,0x2C61,0x2C60}, {0x2C60,0x2C61,0x2C60}, /* 2C60 */
- {0x2C62,0x026B,0x2C62}, {0x2C63,0x1D7D,0x2C63}, /* 2C62 */
- {0x2C64,0x027D,0x2C64}, {0x023A,0x2C65,0x023A}, /* 2C64 */
- {0x023E,0x2C66,0x023E}, {0x2C67,0x2C68,0x2C67}, /* 2C66 */
- {0x2C67,0x2C68,0x2C67}, {0x2C69,0x2C6A,0x2C69}, /* 2C68 */
- {0x2C69,0x2C6A,0x2C69}, {0x2C6B,0x2C6C,0x2C6B}, /* 2C6A */
- {0x2C6B,0x2C6C,0x2C6B}, {0x2C6D,0x0251,0x2C6D}, /* 2C6C */
- {0x2C6E,0x0271,0x2C6E}, {0x2C6F,0x0250,0x2C6F}, /* 2C6E */
- {0x2C70,0x0252,0x2C70}, {0x2C71,0x2C71,0x2C71}, /* 2C70 */
- {0x2C72,0x2C73,0x2C72}, {0x2C72,0x2C73,0x2C72}, /* 2C72 */
- {0x2C74,0x2C74,0x2C74}, {0x2C75,0x2C76,0x2C75}, /* 2C74 */
- {0x2C75,0x2C76,0x2C75}, {0x2C77,0x2C77,0x2C77}, /* 2C76 */
- {0x2C78,0x2C78,0x2C78}, {0x2C79,0x2C79,0x2C79}, /* 2C78 */
- {0x2C7A,0x2C7A,0x2C7A}, {0x2C7B,0x2C7B,0x2C7B}, /* 2C7A */
- {0x2C7C,0x2C7C,0x2C7C}, {0x2C7D,0x2C7D,0x2C7D}, /* 2C7C */
- {0x2C7E,0x023F,0x2C7E}, {0x2C7F,0x0240,0x2C7F}, /* 2C7E */
- {0x2C80,0x2C81,0x2C80}, {0x2C80,0x2C81,0x2C80}, /* 2C80 */
- {0x2C82,0x2C83,0x2C82}, {0x2C82,0x2C83,0x2C82}, /* 2C82 */
- {0x2C84,0x2C85,0x2C84}, {0x2C84,0x2C85,0x2C84}, /* 2C84 */
- {0x2C86,0x2C87,0x2C86}, {0x2C86,0x2C87,0x2C86}, /* 2C86 */
- {0x2C88,0x2C89,0x2C88}, {0x2C88,0x2C89,0x2C88}, /* 2C88 */
- {0x2C8A,0x2C8B,0x2C8A}, {0x2C8A,0x2C8B,0x2C8A}, /* 2C8A */
- {0x2C8C,0x2C8D,0x2C8C}, {0x2C8C,0x2C8D,0x2C8C}, /* 2C8C */
- {0x2C8E,0x2C8F,0x2C8E}, {0x2C8E,0x2C8F,0x2C8E}, /* 2C8E */
- {0x2C90,0x2C91,0x2C90}, {0x2C90,0x2C91,0x2C90}, /* 2C90 */
- {0x2C92,0x2C93,0x2C92}, {0x2C92,0x2C93,0x2C92}, /* 2C92 */
- {0x2C94,0x2C95,0x2C94}, {0x2C94,0x2C95,0x2C94}, /* 2C94 */
- {0x2C96,0x2C97,0x2C96}, {0x2C96,0x2C97,0x2C96}, /* 2C96 */
- {0x2C98,0x2C99,0x2C98}, {0x2C98,0x2C99,0x2C98}, /* 2C98 */
- {0x2C9A,0x2C9B,0x2C9A}, {0x2C9A,0x2C9B,0x2C9A}, /* 2C9A */
- {0x2C9C,0x2C9D,0x2C9C}, {0x2C9C,0x2C9D,0x2C9C}, /* 2C9C */
- {0x2C9E,0x2C9F,0x2C9E}, {0x2C9E,0x2C9F,0x2C9E}, /* 2C9E */
- {0x2CA0,0x2CA1,0x2CA0}, {0x2CA0,0x2CA1,0x2CA0}, /* 2CA0 */
- {0x2CA2,0x2CA3,0x2CA2}, {0x2CA2,0x2CA3,0x2CA2}, /* 2CA2 */
- {0x2CA4,0x2CA5,0x2CA4}, {0x2CA4,0x2CA5,0x2CA4}, /* 2CA4 */
- {0x2CA6,0x2CA7,0x2CA6}, {0x2CA6,0x2CA7,0x2CA6}, /* 2CA6 */
- {0x2CA8,0x2CA9,0x2CA8}, {0x2CA8,0x2CA9,0x2CA8}, /* 2CA8 */
- {0x2CAA,0x2CAB,0x2CAA}, {0x2CAA,0x2CAB,0x2CAA}, /* 2CAA */
- {0x2CAC,0x2CAD,0x2CAC}, {0x2CAC,0x2CAD,0x2CAC}, /* 2CAC */
- {0x2CAE,0x2CAF,0x2CAE}, {0x2CAE,0x2CAF,0x2CAE}, /* 2CAE */
- {0x2CB0,0x2CB1,0x2CB0}, {0x2CB0,0x2CB1,0x2CB0}, /* 2CB0 */
- {0x2CB2,0x2CB3,0x2CB2}, {0x2CB2,0x2CB3,0x2CB2}, /* 2CB2 */
- {0x2CB4,0x2CB5,0x2CB4}, {0x2CB4,0x2CB5,0x2CB4}, /* 2CB4 */
- {0x2CB6,0x2CB7,0x2CB6}, {0x2CB6,0x2CB7,0x2CB6}, /* 2CB6 */
- {0x2CB8,0x2CB9,0x2CB8}, {0x2CB8,0x2CB9,0x2CB8}, /* 2CB8 */
- {0x2CBA,0x2CBB,0x2CBA}, {0x2CBA,0x2CBB,0x2CBA}, /* 2CBA */
- {0x2CBC,0x2CBD,0x2CBC}, {0x2CBC,0x2CBD,0x2CBC}, /* 2CBC */
- {0x2CBE,0x2CBF,0x2CBE}, {0x2CBE,0x2CBF,0x2CBE}, /* 2CBE */
- {0x2CC0,0x2CC1,0x2CC0}, {0x2CC0,0x2CC1,0x2CC0}, /* 2CC0 */
- {0x2CC2,0x2CC3,0x2CC2}, {0x2CC2,0x2CC3,0x2CC2}, /* 2CC2 */
- {0x2CC4,0x2CC5,0x2CC4}, {0x2CC4,0x2CC5,0x2CC4}, /* 2CC4 */
- {0x2CC6,0x2CC7,0x2CC6}, {0x2CC6,0x2CC7,0x2CC6}, /* 2CC6 */
- {0x2CC8,0x2CC9,0x2CC8}, {0x2CC8,0x2CC9,0x2CC8}, /* 2CC8 */
- {0x2CCA,0x2CCB,0x2CCA}, {0x2CCA,0x2CCB,0x2CCA}, /* 2CCA */
- {0x2CCC,0x2CCD,0x2CCC}, {0x2CCC,0x2CCD,0x2CCC}, /* 2CCC */
- {0x2CCE,0x2CCF,0x2CCE}, {0x2CCE,0x2CCF,0x2CCE}, /* 2CCE */
- {0x2CD0,0x2CD1,0x2CD0}, {0x2CD0,0x2CD1,0x2CD0}, /* 2CD0 */
- {0x2CD2,0x2CD3,0x2CD2}, {0x2CD2,0x2CD3,0x2CD2}, /* 2CD2 */
- {0x2CD4,0x2CD5,0x2CD4}, {0x2CD4,0x2CD5,0x2CD4}, /* 2CD4 */
- {0x2CD6,0x2CD7,0x2CD6}, {0x2CD6,0x2CD7,0x2CD6}, /* 2CD6 */
- {0x2CD8,0x2CD9,0x2CD8}, {0x2CD8,0x2CD9,0x2CD8}, /* 2CD8 */
- {0x2CDA,0x2CDB,0x2CDA}, {0x2CDA,0x2CDB,0x2CDA}, /* 2CDA */
- {0x2CDC,0x2CDD,0x2CDC}, {0x2CDC,0x2CDD,0x2CDC}, /* 2CDC */
- {0x2CDE,0x2CDF,0x2CDE}, {0x2CDE,0x2CDF,0x2CDE}, /* 2CDE */
- {0x2CE0,0x2CE1,0x2CE0}, {0x2CE0,0x2CE1,0x2CE0}, /* 2CE0 */
- {0x2CE2,0x2CE3,0x2CE2}, {0x2CE2,0x2CE3,0x2CE2}, /* 2CE2 */
- {0x2CE4,0x2CE4,0x2CE4}, {0x2CE5,0x2CE5,0x2CE5}, /* 2CE4 */
- {0x2CE6,0x2CE6,0x2CE6}, {0x2CE7,0x2CE7,0x2CE7}, /* 2CE6 */
- {0x2CE8,0x2CE8,0x2CE8}, {0x2CE9,0x2CE9,0x2CE9}, /* 2CE8 */
- {0x2CEA,0x2CEA,0x2CEA}, {0x2CEB,0x2CEC,0x2CEB}, /* 2CEA */
- {0x2CEB,0x2CEC,0x2CEB}, {0x2CED,0x2CEE,0x2CED}, /* 2CEC */
- {0x2CED,0x2CEE,0x2CED}, {0x2CEF,0x2CEF,0x2CEF}, /* 2CEE */
- {0x2CF0,0x2CF0,0x2CF0}, {0x2CF1,0x2CF1,0x2CF1}, /* 2CF0 */
- {0x2CF2,0x2CF2,0x2CF2}, {0x2CF3,0x2CF3,0x2CF3}, /* 2CF2 */
- {0x2CF4,0x2CF4,0x2CF4}, {0x2CF5,0x2CF5,0x2CF5}, /* 2CF4 */
- {0x2CF6,0x2CF6,0x2CF6}, {0x2CF7,0x2CF7,0x2CF7}, /* 2CF6 */
- {0x2CF8,0x2CF8,0x2CF8}, {0x2CF9,0x2CF9,0x2CF9}, /* 2CF8 */
- {0x2CFA,0x2CFA,0x2CFA}, {0x2CFB,0x2CFB,0x2CFB}, /* 2CFA */
- {0x2CFC,0x2CFC,0x2CFC}, {0x2CFD,0x2CFD,0x2CFD}, /* 2CFC */
- {0x2CFE,0x2CFE,0x2CFE}, {0x2CFF,0x2CFF,0x2CFF} /* 2CFE */
-};
-
-static MY_UNICASE_CHARACTER u520p2D[]={
- {0x10A0,0x2D00,0x10A0}, {0x10A1,0x2D01,0x10A1}, /* 2D00 */
- {0x10A2,0x2D02,0x10A2}, {0x10A3,0x2D03,0x10A3}, /* 2D02 */
- {0x10A4,0x2D04,0x10A4}, {0x10A5,0x2D05,0x10A5}, /* 2D04 */
- {0x10A6,0x2D06,0x10A6}, {0x10A7,0x2D07,0x10A7}, /* 2D06 */
- {0x10A8,0x2D08,0x10A8}, {0x10A9,0x2D09,0x10A9}, /* 2D08 */
- {0x10AA,0x2D0A,0x10AA}, {0x10AB,0x2D0B,0x10AB}, /* 2D0A */
- {0x10AC,0x2D0C,0x10AC}, {0x10AD,0x2D0D,0x10AD}, /* 2D0C */
- {0x10AE,0x2D0E,0x10AE}, {0x10AF,0x2D0F,0x10AF}, /* 2D0E */
- {0x10B0,0x2D10,0x10B0}, {0x10B1,0x2D11,0x10B1}, /* 2D10 */
- {0x10B2,0x2D12,0x10B2}, {0x10B3,0x2D13,0x10B3}, /* 2D12 */
- {0x10B4,0x2D14,0x10B4}, {0x10B5,0x2D15,0x10B5}, /* 2D14 */
- {0x10B6,0x2D16,0x10B6}, {0x10B7,0x2D17,0x10B7}, /* 2D16 */
- {0x10B8,0x2D18,0x10B8}, {0x10B9,0x2D19,0x10B9}, /* 2D18 */
- {0x10BA,0x2D1A,0x10BA}, {0x10BB,0x2D1B,0x10BB}, /* 2D1A */
- {0x10BC,0x2D1C,0x10BC}, {0x10BD,0x2D1D,0x10BD}, /* 2D1C */
- {0x10BE,0x2D1E,0x10BE}, {0x10BF,0x2D1F,0x10BF}, /* 2D1E */
- {0x10C0,0x2D20,0x10C0}, {0x10C1,0x2D21,0x10C1}, /* 2D20 */
- {0x10C2,0x2D22,0x10C2}, {0x10C3,0x2D23,0x10C3}, /* 2D22 */
- {0x10C4,0x2D24,0x10C4}, {0x10C5,0x2D25,0x10C5}, /* 2D24 */
- {0x2D26,0x2D26,0x2D26}, {0x2D27,0x2D27,0x2D27}, /* 2D26 */
- {0x2D28,0x2D28,0x2D28}, {0x2D29,0x2D29,0x2D29}, /* 2D28 */
- {0x2D2A,0x2D2A,0x2D2A}, {0x2D2B,0x2D2B,0x2D2B}, /* 2D2A */
- {0x2D2C,0x2D2C,0x2D2C}, {0x2D2D,0x2D2D,0x2D2D}, /* 2D2C */
- {0x2D2E,0x2D2E,0x2D2E}, {0x2D2F,0x2D2F,0x2D2F}, /* 2D2E */
- {0x2D30,0x2D30,0x2D30}, {0x2D31,0x2D31,0x2D31}, /* 2D30 */
- {0x2D32,0x2D32,0x2D32}, {0x2D33,0x2D33,0x2D33}, /* 2D32 */
- {0x2D34,0x2D34,0x2D34}, {0x2D35,0x2D35,0x2D35}, /* 2D34 */
- {0x2D36,0x2D36,0x2D36}, {0x2D37,0x2D37,0x2D37}, /* 2D36 */
- {0x2D38,0x2D38,0x2D38}, {0x2D39,0x2D39,0x2D39}, /* 2D38 */
- {0x2D3A,0x2D3A,0x2D3A}, {0x2D3B,0x2D3B,0x2D3B}, /* 2D3A */
- {0x2D3C,0x2D3C,0x2D3C}, {0x2D3D,0x2D3D,0x2D3D}, /* 2D3C */
- {0x2D3E,0x2D3E,0x2D3E}, {0x2D3F,0x2D3F,0x2D3F}, /* 2D3E */
- {0x2D40,0x2D40,0x2D40}, {0x2D41,0x2D41,0x2D41}, /* 2D40 */
- {0x2D42,0x2D42,0x2D42}, {0x2D43,0x2D43,0x2D43}, /* 2D42 */
- {0x2D44,0x2D44,0x2D44}, {0x2D45,0x2D45,0x2D45}, /* 2D44 */
- {0x2D46,0x2D46,0x2D46}, {0x2D47,0x2D47,0x2D47}, /* 2D46 */
- {0x2D48,0x2D48,0x2D48}, {0x2D49,0x2D49,0x2D49}, /* 2D48 */
- {0x2D4A,0x2D4A,0x2D4A}, {0x2D4B,0x2D4B,0x2D4B}, /* 2D4A */
- {0x2D4C,0x2D4C,0x2D4C}, {0x2D4D,0x2D4D,0x2D4D}, /* 2D4C */
- {0x2D4E,0x2D4E,0x2D4E}, {0x2D4F,0x2D4F,0x2D4F}, /* 2D4E */
- {0x2D50,0x2D50,0x2D50}, {0x2D51,0x2D51,0x2D51}, /* 2D50 */
- {0x2D52,0x2D52,0x2D52}, {0x2D53,0x2D53,0x2D53}, /* 2D52 */
- {0x2D54,0x2D54,0x2D54}, {0x2D55,0x2D55,0x2D55}, /* 2D54 */
- {0x2D56,0x2D56,0x2D56}, {0x2D57,0x2D57,0x2D57}, /* 2D56 */
- {0x2D58,0x2D58,0x2D58}, {0x2D59,0x2D59,0x2D59}, /* 2D58 */
- {0x2D5A,0x2D5A,0x2D5A}, {0x2D5B,0x2D5B,0x2D5B}, /* 2D5A */
- {0x2D5C,0x2D5C,0x2D5C}, {0x2D5D,0x2D5D,0x2D5D}, /* 2D5C */
- {0x2D5E,0x2D5E,0x2D5E}, {0x2D5F,0x2D5F,0x2D5F}, /* 2D5E */
- {0x2D60,0x2D60,0x2D60}, {0x2D61,0x2D61,0x2D61}, /* 2D60 */
- {0x2D62,0x2D62,0x2D62}, {0x2D63,0x2D63,0x2D63}, /* 2D62 */
- {0x2D64,0x2D64,0x2D64}, {0x2D65,0x2D65,0x2D65}, /* 2D64 */
- {0x2D66,0x2D66,0x2D66}, {0x2D67,0x2D67,0x2D67}, /* 2D66 */
- {0x2D68,0x2D68,0x2D68}, {0x2D69,0x2D69,0x2D69}, /* 2D68 */
- {0x2D6A,0x2D6A,0x2D6A}, {0x2D6B,0x2D6B,0x2D6B}, /* 2D6A */
- {0x2D6C,0x2D6C,0x2D6C}, {0x2D6D,0x2D6D,0x2D6D}, /* 2D6C */
- {0x2D6E,0x2D6E,0x2D6E}, {0x2D6F,0x2D6F,0x2D6F}, /* 2D6E */
- {0x2D70,0x2D70,0x2D70}, {0x2D71,0x2D71,0x2D71}, /* 2D70 */
- {0x2D72,0x2D72,0x2D72}, {0x2D73,0x2D73,0x2D73}, /* 2D72 */
- {0x2D74,0x2D74,0x2D74}, {0x2D75,0x2D75,0x2D75}, /* 2D74 */
- {0x2D76,0x2D76,0x2D76}, {0x2D77,0x2D77,0x2D77}, /* 2D76 */
- {0x2D78,0x2D78,0x2D78}, {0x2D79,0x2D79,0x2D79}, /* 2D78 */
- {0x2D7A,0x2D7A,0x2D7A}, {0x2D7B,0x2D7B,0x2D7B}, /* 2D7A */
- {0x2D7C,0x2D7C,0x2D7C}, {0x2D7D,0x2D7D,0x2D7D}, /* 2D7C */
- {0x2D7E,0x2D7E,0x2D7E}, {0x2D7F,0x2D7F,0x2D7F}, /* 2D7E */
- {0x2D80,0x2D80,0x2D80}, {0x2D81,0x2D81,0x2D81}, /* 2D80 */
- {0x2D82,0x2D82,0x2D82}, {0x2D83,0x2D83,0x2D83}, /* 2D82 */
- {0x2D84,0x2D84,0x2D84}, {0x2D85,0x2D85,0x2D85}, /* 2D84 */
- {0x2D86,0x2D86,0x2D86}, {0x2D87,0x2D87,0x2D87}, /* 2D86 */
- {0x2D88,0x2D88,0x2D88}, {0x2D89,0x2D89,0x2D89}, /* 2D88 */
- {0x2D8A,0x2D8A,0x2D8A}, {0x2D8B,0x2D8B,0x2D8B}, /* 2D8A */
- {0x2D8C,0x2D8C,0x2D8C}, {0x2D8D,0x2D8D,0x2D8D}, /* 2D8C */
- {0x2D8E,0x2D8E,0x2D8E}, {0x2D8F,0x2D8F,0x2D8F}, /* 2D8E */
- {0x2D90,0x2D90,0x2D90}, {0x2D91,0x2D91,0x2D91}, /* 2D90 */
- {0x2D92,0x2D92,0x2D92}, {0x2D93,0x2D93,0x2D93}, /* 2D92 */
- {0x2D94,0x2D94,0x2D94}, {0x2D95,0x2D95,0x2D95}, /* 2D94 */
- {0x2D96,0x2D96,0x2D96}, {0x2D97,0x2D97,0x2D97}, /* 2D96 */
- {0x2D98,0x2D98,0x2D98}, {0x2D99,0x2D99,0x2D99}, /* 2D98 */
- {0x2D9A,0x2D9A,0x2D9A}, {0x2D9B,0x2D9B,0x2D9B}, /* 2D9A */
- {0x2D9C,0x2D9C,0x2D9C}, {0x2D9D,0x2D9D,0x2D9D}, /* 2D9C */
- {0x2D9E,0x2D9E,0x2D9E}, {0x2D9F,0x2D9F,0x2D9F}, /* 2D9E */
- {0x2DA0,0x2DA0,0x2DA0}, {0x2DA1,0x2DA1,0x2DA1}, /* 2DA0 */
- {0x2DA2,0x2DA2,0x2DA2}, {0x2DA3,0x2DA3,0x2DA3}, /* 2DA2 */
- {0x2DA4,0x2DA4,0x2DA4}, {0x2DA5,0x2DA5,0x2DA5}, /* 2DA4 */
- {0x2DA6,0x2DA6,0x2DA6}, {0x2DA7,0x2DA7,0x2DA7}, /* 2DA6 */
- {0x2DA8,0x2DA8,0x2DA8}, {0x2DA9,0x2DA9,0x2DA9}, /* 2DA8 */
- {0x2DAA,0x2DAA,0x2DAA}, {0x2DAB,0x2DAB,0x2DAB}, /* 2DAA */
- {0x2DAC,0x2DAC,0x2DAC}, {0x2DAD,0x2DAD,0x2DAD}, /* 2DAC */
- {0x2DAE,0x2DAE,0x2DAE}, {0x2DAF,0x2DAF,0x2DAF}, /* 2DAE */
- {0x2DB0,0x2DB0,0x2DB0}, {0x2DB1,0x2DB1,0x2DB1}, /* 2DB0 */
- {0x2DB2,0x2DB2,0x2DB2}, {0x2DB3,0x2DB3,0x2DB3}, /* 2DB2 */
- {0x2DB4,0x2DB4,0x2DB4}, {0x2DB5,0x2DB5,0x2DB5}, /* 2DB4 */
- {0x2DB6,0x2DB6,0x2DB6}, {0x2DB7,0x2DB7,0x2DB7}, /* 2DB6 */
- {0x2DB8,0x2DB8,0x2DB8}, {0x2DB9,0x2DB9,0x2DB9}, /* 2DB8 */
- {0x2DBA,0x2DBA,0x2DBA}, {0x2DBB,0x2DBB,0x2DBB}, /* 2DBA */
- {0x2DBC,0x2DBC,0x2DBC}, {0x2DBD,0x2DBD,0x2DBD}, /* 2DBC */
- {0x2DBE,0x2DBE,0x2DBE}, {0x2DBF,0x2DBF,0x2DBF}, /* 2DBE */
- {0x2DC0,0x2DC0,0x2DC0}, {0x2DC1,0x2DC1,0x2DC1}, /* 2DC0 */
- {0x2DC2,0x2DC2,0x2DC2}, {0x2DC3,0x2DC3,0x2DC3}, /* 2DC2 */
- {0x2DC4,0x2DC4,0x2DC4}, {0x2DC5,0x2DC5,0x2DC5}, /* 2DC4 */
- {0x2DC6,0x2DC6,0x2DC6}, {0x2DC7,0x2DC7,0x2DC7}, /* 2DC6 */
- {0x2DC8,0x2DC8,0x2DC8}, {0x2DC9,0x2DC9,0x2DC9}, /* 2DC8 */
- {0x2DCA,0x2DCA,0x2DCA}, {0x2DCB,0x2DCB,0x2DCB}, /* 2DCA */
- {0x2DCC,0x2DCC,0x2DCC}, {0x2DCD,0x2DCD,0x2DCD}, /* 2DCC */
- {0x2DCE,0x2DCE,0x2DCE}, {0x2DCF,0x2DCF,0x2DCF}, /* 2DCE */
- {0x2DD0,0x2DD0,0x2DD0}, {0x2DD1,0x2DD1,0x2DD1}, /* 2DD0 */
- {0x2DD2,0x2DD2,0x2DD2}, {0x2DD3,0x2DD3,0x2DD3}, /* 2DD2 */
- {0x2DD4,0x2DD4,0x2DD4}, {0x2DD5,0x2DD5,0x2DD5}, /* 2DD4 */
- {0x2DD6,0x2DD6,0x2DD6}, {0x2DD7,0x2DD7,0x2DD7}, /* 2DD6 */
- {0x2DD8,0x2DD8,0x2DD8}, {0x2DD9,0x2DD9,0x2DD9}, /* 2DD8 */
- {0x2DDA,0x2DDA,0x2DDA}, {0x2DDB,0x2DDB,0x2DDB}, /* 2DDA */
- {0x2DDC,0x2DDC,0x2DDC}, {0x2DDD,0x2DDD,0x2DDD}, /* 2DDC */
- {0x2DDE,0x2DDE,0x2DDE}, {0x2DDF,0x2DDF,0x2DDF}, /* 2DDE */
- {0x2DE0,0x2DE0,0x2DE0}, {0x2DE1,0x2DE1,0x2DE1}, /* 2DE0 */
- {0x2DE2,0x2DE2,0x2DE2}, {0x2DE3,0x2DE3,0x2DE3}, /* 2DE2 */
- {0x2DE4,0x2DE4,0x2DE4}, {0x2DE5,0x2DE5,0x2DE5}, /* 2DE4 */
- {0x2DE6,0x2DE6,0x2DE6}, {0x2DE7,0x2DE7,0x2DE7}, /* 2DE6 */
- {0x2DE8,0x2DE8,0x2DE8}, {0x2DE9,0x2DE9,0x2DE9}, /* 2DE8 */
- {0x2DEA,0x2DEA,0x2DEA}, {0x2DEB,0x2DEB,0x2DEB}, /* 2DEA */
- {0x2DEC,0x2DEC,0x2DEC}, {0x2DED,0x2DED,0x2DED}, /* 2DEC */
- {0x2DEE,0x2DEE,0x2DEE}, {0x2DEF,0x2DEF,0x2DEF}, /* 2DEE */
- {0x2DF0,0x2DF0,0x2DF0}, {0x2DF1,0x2DF1,0x2DF1}, /* 2DF0 */
- {0x2DF2,0x2DF2,0x2DF2}, {0x2DF3,0x2DF3,0x2DF3}, /* 2DF2 */
- {0x2DF4,0x2DF4,0x2DF4}, {0x2DF5,0x2DF5,0x2DF5}, /* 2DF4 */
- {0x2DF6,0x2DF6,0x2DF6}, {0x2DF7,0x2DF7,0x2DF7}, /* 2DF6 */
- {0x2DF8,0x2DF8,0x2DF8}, {0x2DF9,0x2DF9,0x2DF9}, /* 2DF8 */
- {0x2DFA,0x2DFA,0x2DFA}, {0x2DFB,0x2DFB,0x2DFB}, /* 2DFA */
- {0x2DFC,0x2DFC,0x2DFC}, {0x2DFD,0x2DFD,0x2DFD}, /* 2DFC */
- {0x2DFE,0x2DFE,0x2DFE}, {0x2DFF,0x2DFF,0x2DFF} /* 2DFE */
-};
-static MY_UNICASE_CHARACTER u520pA6[]={
- {0xA600,0xA600,0xA600}, {0xA601,0xA601,0xA601}, /* A600 */
- {0xA602,0xA602,0xA602}, {0xA603,0xA603,0xA603}, /* A602 */
- {0xA604,0xA604,0xA604}, {0xA605,0xA605,0xA605}, /* A604 */
- {0xA606,0xA606,0xA606}, {0xA607,0xA607,0xA607}, /* A606 */
- {0xA608,0xA608,0xA608}, {0xA609,0xA609,0xA609}, /* A608 */
- {0xA60A,0xA60A,0xA60A}, {0xA60B,0xA60B,0xA60B}, /* A60A */
- {0xA60C,0xA60C,0xA60C}, {0xA60D,0xA60D,0xA60D}, /* A60C */
- {0xA60E,0xA60E,0xA60E}, {0xA60F,0xA60F,0xA60F}, /* A60E */
- {0xA610,0xA610,0xA610}, {0xA611,0xA611,0xA611}, /* A610 */
- {0xA612,0xA612,0xA612}, {0xA613,0xA613,0xA613}, /* A612 */
- {0xA614,0xA614,0xA614}, {0xA615,0xA615,0xA615}, /* A614 */
- {0xA616,0xA616,0xA616}, {0xA617,0xA617,0xA617}, /* A616 */
- {0xA618,0xA618,0xA618}, {0xA619,0xA619,0xA619}, /* A618 */
- {0xA61A,0xA61A,0xA61A}, {0xA61B,0xA61B,0xA61B}, /* A61A */
- {0xA61C,0xA61C,0xA61C}, {0xA61D,0xA61D,0xA61D}, /* A61C */
- {0xA61E,0xA61E,0xA61E}, {0xA61F,0xA61F,0xA61F}, /* A61E */
- {0xA620,0xA620,0xA620}, {0xA621,0xA621,0xA621}, /* A620 */
- {0xA622,0xA622,0xA622}, {0xA623,0xA623,0xA623}, /* A622 */
- {0xA624,0xA624,0xA624}, {0xA625,0xA625,0xA625}, /* A624 */
- {0xA626,0xA626,0xA626}, {0xA627,0xA627,0xA627}, /* A626 */
- {0xA628,0xA628,0xA628}, {0xA629,0xA629,0xA629}, /* A628 */
- {0xA62A,0xA62A,0xA62A}, {0xA62B,0xA62B,0xA62B}, /* A62A */
- {0xA62C,0xA62C,0xA62C}, {0xA62D,0xA62D,0xA62D}, /* A62C */
- {0xA62E,0xA62E,0xA62E}, {0xA62F,0xA62F,0xA62F}, /* A62E */
- {0xA630,0xA630,0xA630}, {0xA631,0xA631,0xA631}, /* A630 */
- {0xA632,0xA632,0xA632}, {0xA633,0xA633,0xA633}, /* A632 */
- {0xA634,0xA634,0xA634}, {0xA635,0xA635,0xA635}, /* A634 */
- {0xA636,0xA636,0xA636}, {0xA637,0xA637,0xA637}, /* A636 */
- {0xA638,0xA638,0xA638}, {0xA639,0xA639,0xA639}, /* A638 */
- {0xA63A,0xA63A,0xA63A}, {0xA63B,0xA63B,0xA63B}, /* A63A */
- {0xA63C,0xA63C,0xA63C}, {0xA63D,0xA63D,0xA63D}, /* A63C */
- {0xA63E,0xA63E,0xA63E}, {0xA63F,0xA63F,0xA63F}, /* A63E */
- {0xA640,0xA641,0xA640}, {0xA640,0xA641,0xA640}, /* A640 */
- {0xA642,0xA643,0xA642}, {0xA642,0xA643,0xA642}, /* A642 */
- {0xA644,0xA645,0xA644}, {0xA644,0xA645,0xA644}, /* A644 */
- {0xA646,0xA647,0xA646}, {0xA646,0xA647,0xA646}, /* A646 */
- {0xA648,0xA649,0xA648}, {0xA648,0xA649,0xA648}, /* A648 */
- {0xA64A,0xA64B,0xA64A}, {0xA64A,0xA64B,0xA64A}, /* A64A */
- {0xA64C,0xA64D,0xA64C}, {0xA64C,0xA64D,0xA64C}, /* A64C */
- {0xA64E,0xA64F,0xA64E}, {0xA64E,0xA64F,0xA64E}, /* A64E */
- {0xA650,0xA651,0xA650}, {0xA650,0xA651,0xA650}, /* A650 */
- {0xA652,0xA653,0xA652}, {0xA652,0xA653,0xA652}, /* A652 */
- {0xA654,0xA655,0xA654}, {0xA654,0xA655,0xA654}, /* A654 */
- {0xA656,0xA657,0xA656}, {0xA656,0xA657,0xA656}, /* A656 */
- {0xA658,0xA659,0xA658}, {0xA658,0xA659,0xA658}, /* A658 */
- {0xA65A,0xA65B,0xA65A}, {0xA65A,0xA65B,0xA65A}, /* A65A */
- {0xA65C,0xA65D,0xA65C}, {0xA65C,0xA65D,0xA65C}, /* A65C */
- {0xA65E,0xA65F,0xA65E}, {0xA65E,0xA65F,0xA65E}, /* A65E */
- {0xA660,0xA660,0xA660}, {0xA661,0xA661,0xA661}, /* A660 */
- {0xA662,0xA663,0xA662}, {0xA662,0xA663,0xA662}, /* A662 */
- {0xA664,0xA665,0xA664}, {0xA664,0xA665,0xA664}, /* A664 */
- {0xA666,0xA667,0xA666}, {0xA666,0xA667,0xA666}, /* A666 */
- {0xA668,0xA669,0xA668}, {0xA668,0xA669,0xA668}, /* A668 */
- {0xA66A,0xA66B,0xA66A}, {0xA66A,0xA66B,0xA66A}, /* A66A */
- {0xA66C,0xA66D,0xA66C}, {0xA66C,0xA66D,0xA66C}, /* A66C */
- {0xA66E,0xA66E,0xA66E}, {0xA66F,0xA66F,0xA66F}, /* A66E */
- {0xA670,0xA670,0xA670}, {0xA671,0xA671,0xA671}, /* A670 */
- {0xA672,0xA672,0xA672}, {0xA673,0xA673,0xA673}, /* A672 */
- {0xA674,0xA674,0xA674}, {0xA675,0xA675,0xA675}, /* A674 */
- {0xA676,0xA676,0xA676}, {0xA677,0xA677,0xA677}, /* A676 */
- {0xA678,0xA678,0xA678}, {0xA679,0xA679,0xA679}, /* A678 */
- {0xA67A,0xA67A,0xA67A}, {0xA67B,0xA67B,0xA67B}, /* A67A */
- {0xA67C,0xA67C,0xA67C}, {0xA67D,0xA67D,0xA67D}, /* A67C */
- {0xA67E,0xA67E,0xA67E}, {0xA67F,0xA67F,0xA67F}, /* A67E */
- {0xA680,0xA681,0xA680}, {0xA680,0xA681,0xA680}, /* A680 */
- {0xA682,0xA683,0xA682}, {0xA682,0xA683,0xA682}, /* A682 */
- {0xA684,0xA685,0xA684}, {0xA684,0xA685,0xA684}, /* A684 */
- {0xA686,0xA687,0xA686}, {0xA686,0xA687,0xA686}, /* A686 */
- {0xA688,0xA689,0xA688}, {0xA688,0xA689,0xA688}, /* A688 */
- {0xA68A,0xA68B,0xA68A}, {0xA68A,0xA68B,0xA68A}, /* A68A */
- {0xA68C,0xA68D,0xA68C}, {0xA68C,0xA68D,0xA68C}, /* A68C */
- {0xA68E,0xA68F,0xA68E}, {0xA68E,0xA68F,0xA68E}, /* A68E */
- {0xA690,0xA691,0xA690}, {0xA690,0xA691,0xA690}, /* A690 */
- {0xA692,0xA693,0xA692}, {0xA692,0xA693,0xA692}, /* A692 */
- {0xA694,0xA695,0xA694}, {0xA694,0xA695,0xA694}, /* A694 */
- {0xA696,0xA697,0xA696}, {0xA696,0xA697,0xA696}, /* A696 */
- {0xA698,0xA698,0xA698}, {0xA699,0xA699,0xA699}, /* A698 */
- {0xA69A,0xA69A,0xA69A}, {0xA69B,0xA69B,0xA69B}, /* A69A */
- {0xA69C,0xA69C,0xA69C}, {0xA69D,0xA69D,0xA69D}, /* A69C */
- {0xA69E,0xA69E,0xA69E}, {0xA69F,0xA69F,0xA69F}, /* A69E */
- {0xA6A0,0xA6A0,0xA6A0}, {0xA6A1,0xA6A1,0xA6A1}, /* A6A0 */
- {0xA6A2,0xA6A2,0xA6A2}, {0xA6A3,0xA6A3,0xA6A3}, /* A6A2 */
- {0xA6A4,0xA6A4,0xA6A4}, {0xA6A5,0xA6A5,0xA6A5}, /* A6A4 */
- {0xA6A6,0xA6A6,0xA6A6}, {0xA6A7,0xA6A7,0xA6A7}, /* A6A6 */
- {0xA6A8,0xA6A8,0xA6A8}, {0xA6A9,0xA6A9,0xA6A9}, /* A6A8 */
- {0xA6AA,0xA6AA,0xA6AA}, {0xA6AB,0xA6AB,0xA6AB}, /* A6AA */
- {0xA6AC,0xA6AC,0xA6AC}, {0xA6AD,0xA6AD,0xA6AD}, /* A6AC */
- {0xA6AE,0xA6AE,0xA6AE}, {0xA6AF,0xA6AF,0xA6AF}, /* A6AE */
- {0xA6B0,0xA6B0,0xA6B0}, {0xA6B1,0xA6B1,0xA6B1}, /* A6B0 */
- {0xA6B2,0xA6B2,0xA6B2}, {0xA6B3,0xA6B3,0xA6B3}, /* A6B2 */
- {0xA6B4,0xA6B4,0xA6B4}, {0xA6B5,0xA6B5,0xA6B5}, /* A6B4 */
- {0xA6B6,0xA6B6,0xA6B6}, {0xA6B7,0xA6B7,0xA6B7}, /* A6B6 */
- {0xA6B8,0xA6B8,0xA6B8}, {0xA6B9,0xA6B9,0xA6B9}, /* A6B8 */
- {0xA6BA,0xA6BA,0xA6BA}, {0xA6BB,0xA6BB,0xA6BB}, /* A6BA */
- {0xA6BC,0xA6BC,0xA6BC}, {0xA6BD,0xA6BD,0xA6BD}, /* A6BC */
- {0xA6BE,0xA6BE,0xA6BE}, {0xA6BF,0xA6BF,0xA6BF}, /* A6BE */
- {0xA6C0,0xA6C0,0xA6C0}, {0xA6C1,0xA6C1,0xA6C1}, /* A6C0 */
- {0xA6C2,0xA6C2,0xA6C2}, {0xA6C3,0xA6C3,0xA6C3}, /* A6C2 */
- {0xA6C4,0xA6C4,0xA6C4}, {0xA6C5,0xA6C5,0xA6C5}, /* A6C4 */
- {0xA6C6,0xA6C6,0xA6C6}, {0xA6C7,0xA6C7,0xA6C7}, /* A6C6 */
- {0xA6C8,0xA6C8,0xA6C8}, {0xA6C9,0xA6C9,0xA6C9}, /* A6C8 */
- {0xA6CA,0xA6CA,0xA6CA}, {0xA6CB,0xA6CB,0xA6CB}, /* A6CA */
- {0xA6CC,0xA6CC,0xA6CC}, {0xA6CD,0xA6CD,0xA6CD}, /* A6CC */
- {0xA6CE,0xA6CE,0xA6CE}, {0xA6CF,0xA6CF,0xA6CF}, /* A6CE */
- {0xA6D0,0xA6D0,0xA6D0}, {0xA6D1,0xA6D1,0xA6D1}, /* A6D0 */
- {0xA6D2,0xA6D2,0xA6D2}, {0xA6D3,0xA6D3,0xA6D3}, /* A6D2 */
- {0xA6D4,0xA6D4,0xA6D4}, {0xA6D5,0xA6D5,0xA6D5}, /* A6D4 */
- {0xA6D6,0xA6D6,0xA6D6}, {0xA6D7,0xA6D7,0xA6D7}, /* A6D6 */
- {0xA6D8,0xA6D8,0xA6D8}, {0xA6D9,0xA6D9,0xA6D9}, /* A6D8 */
- {0xA6DA,0xA6DA,0xA6DA}, {0xA6DB,0xA6DB,0xA6DB}, /* A6DA */
- {0xA6DC,0xA6DC,0xA6DC}, {0xA6DD,0xA6DD,0xA6DD}, /* A6DC */
- {0xA6DE,0xA6DE,0xA6DE}, {0xA6DF,0xA6DF,0xA6DF}, /* A6DE */
- {0xA6E0,0xA6E0,0xA6E0}, {0xA6E1,0xA6E1,0xA6E1}, /* A6E0 */
- {0xA6E2,0xA6E2,0xA6E2}, {0xA6E3,0xA6E3,0xA6E3}, /* A6E2 */
- {0xA6E4,0xA6E4,0xA6E4}, {0xA6E5,0xA6E5,0xA6E5}, /* A6E4 */
- {0xA6E6,0xA6E6,0xA6E6}, {0xA6E7,0xA6E7,0xA6E7}, /* A6E6 */
- {0xA6E8,0xA6E8,0xA6E8}, {0xA6E9,0xA6E9,0xA6E9}, /* A6E8 */
- {0xA6EA,0xA6EA,0xA6EA}, {0xA6EB,0xA6EB,0xA6EB}, /* A6EA */
- {0xA6EC,0xA6EC,0xA6EC}, {0xA6ED,0xA6ED,0xA6ED}, /* A6EC */
- {0xA6EE,0xA6EE,0xA6EE}, {0xA6EF,0xA6EF,0xA6EF}, /* A6EE */
- {0xA6F0,0xA6F0,0xA6F0}, {0xA6F1,0xA6F1,0xA6F1}, /* A6F0 */
- {0xA6F2,0xA6F2,0xA6F2}, {0xA6F3,0xA6F3,0xA6F3}, /* A6F2 */
- {0xA6F4,0xA6F4,0xA6F4}, {0xA6F5,0xA6F5,0xA6F5}, /* A6F4 */
- {0xA6F6,0xA6F6,0xA6F6}, {0xA6F7,0xA6F7,0xA6F7}, /* A6F6 */
- {0xA6F8,0xA6F8,0xA6F8}, {0xA6F9,0xA6F9,0xA6F9}, /* A6F8 */
- {0xA6FA,0xA6FA,0xA6FA}, {0xA6FB,0xA6FB,0xA6FB}, /* A6FA */
- {0xA6FC,0xA6FC,0xA6FC}, {0xA6FD,0xA6FD,0xA6FD}, /* A6FC */
- {0xA6FE,0xA6FE,0xA6FE}, {0xA6FF,0xA6FF,0xA6FF} /* A6FE */
-};
-
-static MY_UNICASE_CHARACTER u520pA7[]={
- {0xA700,0xA700,0xA700}, {0xA701,0xA701,0xA701}, /* A700 */
- {0xA702,0xA702,0xA702}, {0xA703,0xA703,0xA703}, /* A702 */
- {0xA704,0xA704,0xA704}, {0xA705,0xA705,0xA705}, /* A704 */
- {0xA706,0xA706,0xA706}, {0xA707,0xA707,0xA707}, /* A706 */
- {0xA708,0xA708,0xA708}, {0xA709,0xA709,0xA709}, /* A708 */
- {0xA70A,0xA70A,0xA70A}, {0xA70B,0xA70B,0xA70B}, /* A70A */
- {0xA70C,0xA70C,0xA70C}, {0xA70D,0xA70D,0xA70D}, /* A70C */
- {0xA70E,0xA70E,0xA70E}, {0xA70F,0xA70F,0xA70F}, /* A70E */
- {0xA710,0xA710,0xA710}, {0xA711,0xA711,0xA711}, /* A710 */
- {0xA712,0xA712,0xA712}, {0xA713,0xA713,0xA713}, /* A712 */
- {0xA714,0xA714,0xA714}, {0xA715,0xA715,0xA715}, /* A714 */
- {0xA716,0xA716,0xA716}, {0xA717,0xA717,0xA717}, /* A716 */
- {0xA718,0xA718,0xA718}, {0xA719,0xA719,0xA719}, /* A718 */
- {0xA71A,0xA71A,0xA71A}, {0xA71B,0xA71B,0xA71B}, /* A71A */
- {0xA71C,0xA71C,0xA71C}, {0xA71D,0xA71D,0xA71D}, /* A71C */
- {0xA71E,0xA71E,0xA71E}, {0xA71F,0xA71F,0xA71F}, /* A71E */
- {0xA720,0xA720,0xA720}, {0xA721,0xA721,0xA721}, /* A720 */
- {0xA722,0xA723,0xA722}, {0xA722,0xA723,0xA722}, /* A722 */
- {0xA724,0xA725,0xA724}, {0xA724,0xA725,0xA724}, /* A724 */
- {0xA726,0xA727,0xA726}, {0xA726,0xA727,0xA726}, /* A726 */
- {0xA728,0xA729,0xA728}, {0xA728,0xA729,0xA728}, /* A728 */
- {0xA72A,0xA72B,0xA72A}, {0xA72A,0xA72B,0xA72A}, /* A72A */
- {0xA72C,0xA72D,0xA72C}, {0xA72C,0xA72D,0xA72C}, /* A72C */
- {0xA72E,0xA72F,0xA72E}, {0xA72E,0xA72F,0xA72E}, /* A72E */
- {0xA730,0xA730,0xA730}, {0xA731,0xA731,0xA731}, /* A730 */
- {0xA732,0xA733,0xA732}, {0xA732,0xA733,0xA732}, /* A732 */
- {0xA734,0xA735,0xA734}, {0xA734,0xA735,0xA734}, /* A734 */
- {0xA736,0xA737,0xA736}, {0xA736,0xA737,0xA736}, /* A736 */
- {0xA738,0xA739,0xA738}, {0xA738,0xA739,0xA738}, /* A738 */
- {0xA73A,0xA73B,0xA73A}, {0xA73A,0xA73B,0xA73A}, /* A73A */
- {0xA73C,0xA73D,0xA73C}, {0xA73C,0xA73D,0xA73C}, /* A73C */
- {0xA73E,0xA73F,0xA73E}, {0xA73E,0xA73F,0xA73E}, /* A73E */
- {0xA740,0xA741,0xA740}, {0xA740,0xA741,0xA740}, /* A740 */
- {0xA742,0xA743,0xA742}, {0xA742,0xA743,0xA742}, /* A742 */
- {0xA744,0xA745,0xA744}, {0xA744,0xA745,0xA744}, /* A744 */
- {0xA746,0xA747,0xA746}, {0xA746,0xA747,0xA746}, /* A746 */
- {0xA748,0xA749,0xA748}, {0xA748,0xA749,0xA748}, /* A748 */
- {0xA74A,0xA74B,0xA74A}, {0xA74A,0xA74B,0xA74A}, /* A74A */
- {0xA74C,0xA74D,0xA74C}, {0xA74C,0xA74D,0xA74C}, /* A74C */
- {0xA74E,0xA74F,0xA74E}, {0xA74E,0xA74F,0xA74E}, /* A74E */
- {0xA750,0xA751,0xA750}, {0xA750,0xA751,0xA750}, /* A750 */
- {0xA752,0xA753,0xA752}, {0xA752,0xA753,0xA752}, /* A752 */
- {0xA754,0xA755,0xA754}, {0xA754,0xA755,0xA754}, /* A754 */
- {0xA756,0xA757,0xA756}, {0xA756,0xA757,0xA756}, /* A756 */
- {0xA758,0xA759,0xA758}, {0xA758,0xA759,0xA758}, /* A758 */
- {0xA75A,0xA75B,0xA75A}, {0xA75A,0xA75B,0xA75A}, /* A75A */
- {0xA75C,0xA75D,0xA75C}, {0xA75C,0xA75D,0xA75C}, /* A75C */
- {0xA75E,0xA75F,0xA75E}, {0xA75E,0xA75F,0xA75E}, /* A75E */
- {0xA760,0xA761,0xA760}, {0xA760,0xA761,0xA760}, /* A760 */
- {0xA762,0xA763,0xA762}, {0xA762,0xA763,0xA762}, /* A762 */
- {0xA764,0xA765,0xA764}, {0xA764,0xA765,0xA764}, /* A764 */
- {0xA766,0xA767,0xA766}, {0xA766,0xA767,0xA766}, /* A766 */
- {0xA768,0xA769,0xA768}, {0xA768,0xA769,0xA768}, /* A768 */
- {0xA76A,0xA76B,0xA76A}, {0xA76A,0xA76B,0xA76A}, /* A76A */
- {0xA76C,0xA76D,0xA76C}, {0xA76C,0xA76D,0xA76C}, /* A76C */
- {0xA76E,0xA76F,0xA76E}, {0xA76E,0xA76F,0xA76E}, /* A76E */
- {0xA770,0xA770,0xA770}, {0xA771,0xA771,0xA771}, /* A770 */
- {0xA772,0xA772,0xA772}, {0xA773,0xA773,0xA773}, /* A772 */
- {0xA774,0xA774,0xA774}, {0xA775,0xA775,0xA775}, /* A774 */
- {0xA776,0xA776,0xA776}, {0xA777,0xA777,0xA777}, /* A776 */
- {0xA778,0xA778,0xA778}, {0xA779,0xA77A,0xA779}, /* A778 */
- {0xA779,0xA77A,0xA779}, {0xA77B,0xA77C,0xA77B}, /* A77A */
- {0xA77B,0xA77C,0xA77B}, {0xA77D,0x1D79,0xA77D}, /* A77C */
- {0xA77E,0xA77F,0xA77E}, {0xA77E,0xA77F,0xA77E}, /* A77E */
- {0xA780,0xA781,0xA780}, {0xA780,0xA781,0xA780}, /* A780 */
- {0xA782,0xA783,0xA782}, {0xA782,0xA783,0xA782}, /* A782 */
- {0xA784,0xA785,0xA784}, {0xA784,0xA785,0xA784}, /* A784 */
- {0xA786,0xA787,0xA786}, {0xA786,0xA787,0xA786}, /* A786 */
- {0xA788,0xA788,0xA788}, {0xA789,0xA789,0xA789}, /* A788 */
- {0xA78A,0xA78A,0xA78A}, {0xA78B,0xA78C,0xA78B}, /* A78A */
- {0xA78B,0xA78C,0xA78B}, {0xA78D,0xA78D,0xA78D}, /* A78C */
- {0xA78E,0xA78E,0xA78E}, {0xA78F,0xA78F,0xA78F}, /* A78E */
- {0xA790,0xA790,0xA790}, {0xA791,0xA791,0xA791}, /* A790 */
- {0xA792,0xA792,0xA792}, {0xA793,0xA793,0xA793}, /* A792 */
- {0xA794,0xA794,0xA794}, {0xA795,0xA795,0xA795}, /* A794 */
- {0xA796,0xA796,0xA796}, {0xA797,0xA797,0xA797}, /* A796 */
- {0xA798,0xA798,0xA798}, {0xA799,0xA799,0xA799}, /* A798 */
- {0xA79A,0xA79A,0xA79A}, {0xA79B,0xA79B,0xA79B}, /* A79A */
- {0xA79C,0xA79C,0xA79C}, {0xA79D,0xA79D,0xA79D}, /* A79C */
- {0xA79E,0xA79E,0xA79E}, {0xA79F,0xA79F,0xA79F}, /* A79E */
- {0xA7A0,0xA7A0,0xA7A0}, {0xA7A1,0xA7A1,0xA7A1}, /* A7A0 */
- {0xA7A2,0xA7A2,0xA7A2}, {0xA7A3,0xA7A3,0xA7A3}, /* A7A2 */
- {0xA7A4,0xA7A4,0xA7A4}, {0xA7A5,0xA7A5,0xA7A5}, /* A7A4 */
- {0xA7A6,0xA7A6,0xA7A6}, {0xA7A7,0xA7A7,0xA7A7}, /* A7A6 */
- {0xA7A8,0xA7A8,0xA7A8}, {0xA7A9,0xA7A9,0xA7A9}, /* A7A8 */
- {0xA7AA,0xA7AA,0xA7AA}, {0xA7AB,0xA7AB,0xA7AB}, /* A7AA */
- {0xA7AC,0xA7AC,0xA7AC}, {0xA7AD,0xA7AD,0xA7AD}, /* A7AC */
- {0xA7AE,0xA7AE,0xA7AE}, {0xA7AF,0xA7AF,0xA7AF}, /* A7AE */
- {0xA7B0,0xA7B0,0xA7B0}, {0xA7B1,0xA7B1,0xA7B1}, /* A7B0 */
- {0xA7B2,0xA7B2,0xA7B2}, {0xA7B3,0xA7B3,0xA7B3}, /* A7B2 */
- {0xA7B4,0xA7B4,0xA7B4}, {0xA7B5,0xA7B5,0xA7B5}, /* A7B4 */
- {0xA7B6,0xA7B6,0xA7B6}, {0xA7B7,0xA7B7,0xA7B7}, /* A7B6 */
- {0xA7B8,0xA7B8,0xA7B8}, {0xA7B9,0xA7B9,0xA7B9}, /* A7B8 */
- {0xA7BA,0xA7BA,0xA7BA}, {0xA7BB,0xA7BB,0xA7BB}, /* A7BA */
- {0xA7BC,0xA7BC,0xA7BC}, {0xA7BD,0xA7BD,0xA7BD}, /* A7BC */
- {0xA7BE,0xA7BE,0xA7BE}, {0xA7BF,0xA7BF,0xA7BF}, /* A7BE */
- {0xA7C0,0xA7C0,0xA7C0}, {0xA7C1,0xA7C1,0xA7C1}, /* A7C0 */
- {0xA7C2,0xA7C2,0xA7C2}, {0xA7C3,0xA7C3,0xA7C3}, /* A7C2 */
- {0xA7C4,0xA7C4,0xA7C4}, {0xA7C5,0xA7C5,0xA7C5}, /* A7C4 */
- {0xA7C6,0xA7C6,0xA7C6}, {0xA7C7,0xA7C7,0xA7C7}, /* A7C6 */
- {0xA7C8,0xA7C8,0xA7C8}, {0xA7C9,0xA7C9,0xA7C9}, /* A7C8 */
- {0xA7CA,0xA7CA,0xA7CA}, {0xA7CB,0xA7CB,0xA7CB}, /* A7CA */
- {0xA7CC,0xA7CC,0xA7CC}, {0xA7CD,0xA7CD,0xA7CD}, /* A7CC */
- {0xA7CE,0xA7CE,0xA7CE}, {0xA7CF,0xA7CF,0xA7CF}, /* A7CE */
- {0xA7D0,0xA7D0,0xA7D0}, {0xA7D1,0xA7D1,0xA7D1}, /* A7D0 */
- {0xA7D2,0xA7D2,0xA7D2}, {0xA7D3,0xA7D3,0xA7D3}, /* A7D2 */
- {0xA7D4,0xA7D4,0xA7D4}, {0xA7D5,0xA7D5,0xA7D5}, /* A7D4 */
- {0xA7D6,0xA7D6,0xA7D6}, {0xA7D7,0xA7D7,0xA7D7}, /* A7D6 */
- {0xA7D8,0xA7D8,0xA7D8}, {0xA7D9,0xA7D9,0xA7D9}, /* A7D8 */
- {0xA7DA,0xA7DA,0xA7DA}, {0xA7DB,0xA7DB,0xA7DB}, /* A7DA */
- {0xA7DC,0xA7DC,0xA7DC}, {0xA7DD,0xA7DD,0xA7DD}, /* A7DC */
- {0xA7DE,0xA7DE,0xA7DE}, {0xA7DF,0xA7DF,0xA7DF}, /* A7DE */
- {0xA7E0,0xA7E0,0xA7E0}, {0xA7E1,0xA7E1,0xA7E1}, /* A7E0 */
- {0xA7E2,0xA7E2,0xA7E2}, {0xA7E3,0xA7E3,0xA7E3}, /* A7E2 */
- {0xA7E4,0xA7E4,0xA7E4}, {0xA7E5,0xA7E5,0xA7E5}, /* A7E4 */
- {0xA7E6,0xA7E6,0xA7E6}, {0xA7E7,0xA7E7,0xA7E7}, /* A7E6 */
- {0xA7E8,0xA7E8,0xA7E8}, {0xA7E9,0xA7E9,0xA7E9}, /* A7E8 */
- {0xA7EA,0xA7EA,0xA7EA}, {0xA7EB,0xA7EB,0xA7EB}, /* A7EA */
- {0xA7EC,0xA7EC,0xA7EC}, {0xA7ED,0xA7ED,0xA7ED}, /* A7EC */
- {0xA7EE,0xA7EE,0xA7EE}, {0xA7EF,0xA7EF,0xA7EF}, /* A7EE */
- {0xA7F0,0xA7F0,0xA7F0}, {0xA7F1,0xA7F1,0xA7F1}, /* A7F0 */
- {0xA7F2,0xA7F2,0xA7F2}, {0xA7F3,0xA7F3,0xA7F3}, /* A7F2 */
- {0xA7F4,0xA7F4,0xA7F4}, {0xA7F5,0xA7F5,0xA7F5}, /* A7F4 */
- {0xA7F6,0xA7F6,0xA7F6}, {0xA7F7,0xA7F7,0xA7F7}, /* A7F6 */
- {0xA7F8,0xA7F8,0xA7F8}, {0xA7F9,0xA7F9,0xA7F9}, /* A7F8 */
- {0xA7FA,0xA7FA,0xA7FA}, {0xA7FB,0xA7FB,0xA7FB}, /* A7FA */
- {0xA7FC,0xA7FC,0xA7FC}, {0xA7FD,0xA7FD,0xA7FD}, /* A7FC */
- {0xA7FE,0xA7FE,0xA7FE}, {0xA7FF,0xA7FF,0xA7FF} /* A7FE */
-};
-
-static MY_UNICASE_CHARACTER u520pFF[]={
- {0xFF00,0xFF00,0xFF00}, {0xFF01,0xFF01,0xFF01}, /* FF00 */
- {0xFF02,0xFF02,0xFF02}, {0xFF03,0xFF03,0xFF03}, /* FF02 */
- {0xFF04,0xFF04,0xFF04}, {0xFF05,0xFF05,0xFF05}, /* FF04 */
- {0xFF06,0xFF06,0xFF06}, {0xFF07,0xFF07,0xFF07}, /* FF06 */
- {0xFF08,0xFF08,0xFF08}, {0xFF09,0xFF09,0xFF09}, /* FF08 */
- {0xFF0A,0xFF0A,0xFF0A}, {0xFF0B,0xFF0B,0xFF0B}, /* FF0A */
- {0xFF0C,0xFF0C,0xFF0C}, {0xFF0D,0xFF0D,0xFF0D}, /* FF0C */
- {0xFF0E,0xFF0E,0xFF0E}, {0xFF0F,0xFF0F,0xFF0F}, /* FF0E */
- {0xFF10,0xFF10,0xFF10}, {0xFF11,0xFF11,0xFF11}, /* FF10 */
- {0xFF12,0xFF12,0xFF12}, {0xFF13,0xFF13,0xFF13}, /* FF12 */
- {0xFF14,0xFF14,0xFF14}, {0xFF15,0xFF15,0xFF15}, /* FF14 */
- {0xFF16,0xFF16,0xFF16}, {0xFF17,0xFF17,0xFF17}, /* FF16 */
- {0xFF18,0xFF18,0xFF18}, {0xFF19,0xFF19,0xFF19}, /* FF18 */
- {0xFF1A,0xFF1A,0xFF1A}, {0xFF1B,0xFF1B,0xFF1B}, /* FF1A */
- {0xFF1C,0xFF1C,0xFF1C}, {0xFF1D,0xFF1D,0xFF1D}, /* FF1C */
- {0xFF1E,0xFF1E,0xFF1E}, {0xFF1F,0xFF1F,0xFF1F}, /* FF1E */
- {0xFF20,0xFF20,0xFF20}, {0xFF21,0xFF41,0xFF21}, /* FF20 */
- {0xFF22,0xFF42,0xFF22}, {0xFF23,0xFF43,0xFF23}, /* FF22 */
- {0xFF24,0xFF44,0xFF24}, {0xFF25,0xFF45,0xFF25}, /* FF24 */
- {0xFF26,0xFF46,0xFF26}, {0xFF27,0xFF47,0xFF27}, /* FF26 */
- {0xFF28,0xFF48,0xFF28}, {0xFF29,0xFF49,0xFF29}, /* FF28 */
- {0xFF2A,0xFF4A,0xFF2A}, {0xFF2B,0xFF4B,0xFF2B}, /* FF2A */
- {0xFF2C,0xFF4C,0xFF2C}, {0xFF2D,0xFF4D,0xFF2D}, /* FF2C */
- {0xFF2E,0xFF4E,0xFF2E}, {0xFF2F,0xFF4F,0xFF2F}, /* FF2E */
- {0xFF30,0xFF50,0xFF30}, {0xFF31,0xFF51,0xFF31}, /* FF30 */
- {0xFF32,0xFF52,0xFF32}, {0xFF33,0xFF53,0xFF33}, /* FF32 */
- {0xFF34,0xFF54,0xFF34}, {0xFF35,0xFF55,0xFF35}, /* FF34 */
- {0xFF36,0xFF56,0xFF36}, {0xFF37,0xFF57,0xFF37}, /* FF36 */
- {0xFF38,0xFF58,0xFF38}, {0xFF39,0xFF59,0xFF39}, /* FF38 */
- {0xFF3A,0xFF5A,0xFF3A}, {0xFF3B,0xFF3B,0xFF3B}, /* FF3A */
- {0xFF3C,0xFF3C,0xFF3C}, {0xFF3D,0xFF3D,0xFF3D}, /* FF3C */
- {0xFF3E,0xFF3E,0xFF3E}, {0xFF3F,0xFF3F,0xFF3F}, /* FF3E */
- {0xFF40,0xFF40,0xFF40}, {0xFF21,0xFF41,0xFF21}, /* FF40 */
- {0xFF22,0xFF42,0xFF22}, {0xFF23,0xFF43,0xFF23}, /* FF42 */
- {0xFF24,0xFF44,0xFF24}, {0xFF25,0xFF45,0xFF25}, /* FF44 */
- {0xFF26,0xFF46,0xFF26}, {0xFF27,0xFF47,0xFF27}, /* FF46 */
- {0xFF28,0xFF48,0xFF28}, {0xFF29,0xFF49,0xFF29}, /* FF48 */
- {0xFF2A,0xFF4A,0xFF2A}, {0xFF2B,0xFF4B,0xFF2B}, /* FF4A */
- {0xFF2C,0xFF4C,0xFF2C}, {0xFF2D,0xFF4D,0xFF2D}, /* FF4C */
- {0xFF2E,0xFF4E,0xFF2E}, {0xFF2F,0xFF4F,0xFF2F}, /* FF4E */
- {0xFF30,0xFF50,0xFF30}, {0xFF31,0xFF51,0xFF31}, /* FF50 */
- {0xFF32,0xFF52,0xFF32}, {0xFF33,0xFF53,0xFF33}, /* FF52 */
- {0xFF34,0xFF54,0xFF34}, {0xFF35,0xFF55,0xFF35}, /* FF54 */
- {0xFF36,0xFF56,0xFF36}, {0xFF37,0xFF57,0xFF37}, /* FF56 */
- {0xFF38,0xFF58,0xFF38}, {0xFF39,0xFF59,0xFF39}, /* FF58 */
- {0xFF3A,0xFF5A,0xFF3A}, {0xFF5B,0xFF5B,0xFF5B}, /* FF5A */
- {0xFF5C,0xFF5C,0xFF5C}, {0xFF5D,0xFF5D,0xFF5D}, /* FF5C */
- {0xFF5E,0xFF5E,0xFF5E}, {0xFF5F,0xFF5F,0xFF5F}, /* FF5E */
- {0xFF60,0xFF60,0xFF60}, {0xFF61,0xFF61,0xFF61}, /* FF60 */
- {0xFF62,0xFF62,0xFF62}, {0xFF63,0xFF63,0xFF63}, /* FF62 */
- {0xFF64,0xFF64,0xFF64}, {0xFF65,0xFF65,0xFF65}, /* FF64 */
- {0xFF66,0xFF66,0xFF66}, {0xFF67,0xFF67,0xFF67}, /* FF66 */
- {0xFF68,0xFF68,0xFF68}, {0xFF69,0xFF69,0xFF69}, /* FF68 */
- {0xFF6A,0xFF6A,0xFF6A}, {0xFF6B,0xFF6B,0xFF6B}, /* FF6A */
- {0xFF6C,0xFF6C,0xFF6C}, {0xFF6D,0xFF6D,0xFF6D}, /* FF6C */
- {0xFF6E,0xFF6E,0xFF6E}, {0xFF6F,0xFF6F,0xFF6F}, /* FF6E */
- {0xFF70,0xFF70,0xFF70}, {0xFF71,0xFF71,0xFF71}, /* FF70 */
- {0xFF72,0xFF72,0xFF72}, {0xFF73,0xFF73,0xFF73}, /* FF72 */
- {0xFF74,0xFF74,0xFF74}, {0xFF75,0xFF75,0xFF75}, /* FF74 */
- {0xFF76,0xFF76,0xFF76}, {0xFF77,0xFF77,0xFF77}, /* FF76 */
- {0xFF78,0xFF78,0xFF78}, {0xFF79,0xFF79,0xFF79}, /* FF78 */
- {0xFF7A,0xFF7A,0xFF7A}, {0xFF7B,0xFF7B,0xFF7B}, /* FF7A */
- {0xFF7C,0xFF7C,0xFF7C}, {0xFF7D,0xFF7D,0xFF7D}, /* FF7C */
- {0xFF7E,0xFF7E,0xFF7E}, {0xFF7F,0xFF7F,0xFF7F}, /* FF7E */
- {0xFF80,0xFF80,0xFF80}, {0xFF81,0xFF81,0xFF81}, /* FF80 */
- {0xFF82,0xFF82,0xFF82}, {0xFF83,0xFF83,0xFF83}, /* FF82 */
- {0xFF84,0xFF84,0xFF84}, {0xFF85,0xFF85,0xFF85}, /* FF84 */
- {0xFF86,0xFF86,0xFF86}, {0xFF87,0xFF87,0xFF87}, /* FF86 */
- {0xFF88,0xFF88,0xFF88}, {0xFF89,0xFF89,0xFF89}, /* FF88 */
- {0xFF8A,0xFF8A,0xFF8A}, {0xFF8B,0xFF8B,0xFF8B}, /* FF8A */
- {0xFF8C,0xFF8C,0xFF8C}, {0xFF8D,0xFF8D,0xFF8D}, /* FF8C */
- {0xFF8E,0xFF8E,0xFF8E}, {0xFF8F,0xFF8F,0xFF8F}, /* FF8E */
- {0xFF90,0xFF90,0xFF90}, {0xFF91,0xFF91,0xFF91}, /* FF90 */
- {0xFF92,0xFF92,0xFF92}, {0xFF93,0xFF93,0xFF93}, /* FF92 */
- {0xFF94,0xFF94,0xFF94}, {0xFF95,0xFF95,0xFF95}, /* FF94 */
- {0xFF96,0xFF96,0xFF96}, {0xFF97,0xFF97,0xFF97}, /* FF96 */
- {0xFF98,0xFF98,0xFF98}, {0xFF99,0xFF99,0xFF99}, /* FF98 */
- {0xFF9A,0xFF9A,0xFF9A}, {0xFF9B,0xFF9B,0xFF9B}, /* FF9A */
- {0xFF9C,0xFF9C,0xFF9C}, {0xFF9D,0xFF9D,0xFF9D}, /* FF9C */
- {0xFF9E,0xFF9E,0xFF9E}, {0xFF9F,0xFF9F,0xFF9F}, /* FF9E */
- {0xFFA0,0xFFA0,0xFFA0}, {0xFFA1,0xFFA1,0xFFA1}, /* FFA0 */
- {0xFFA2,0xFFA2,0xFFA2}, {0xFFA3,0xFFA3,0xFFA3}, /* FFA2 */
- {0xFFA4,0xFFA4,0xFFA4}, {0xFFA5,0xFFA5,0xFFA5}, /* FFA4 */
- {0xFFA6,0xFFA6,0xFFA6}, {0xFFA7,0xFFA7,0xFFA7}, /* FFA6 */
- {0xFFA8,0xFFA8,0xFFA8}, {0xFFA9,0xFFA9,0xFFA9}, /* FFA8 */
- {0xFFAA,0xFFAA,0xFFAA}, {0xFFAB,0xFFAB,0xFFAB}, /* FFAA */
- {0xFFAC,0xFFAC,0xFFAC}, {0xFFAD,0xFFAD,0xFFAD}, /* FFAC */
- {0xFFAE,0xFFAE,0xFFAE}, {0xFFAF,0xFFAF,0xFFAF}, /* FFAE */
- {0xFFB0,0xFFB0,0xFFB0}, {0xFFB1,0xFFB1,0xFFB1}, /* FFB0 */
- {0xFFB2,0xFFB2,0xFFB2}, {0xFFB3,0xFFB3,0xFFB3}, /* FFB2 */
- {0xFFB4,0xFFB4,0xFFB4}, {0xFFB5,0xFFB5,0xFFB5}, /* FFB4 */
- {0xFFB6,0xFFB6,0xFFB6}, {0xFFB7,0xFFB7,0xFFB7}, /* FFB6 */
- {0xFFB8,0xFFB8,0xFFB8}, {0xFFB9,0xFFB9,0xFFB9}, /* FFB8 */
- {0xFFBA,0xFFBA,0xFFBA}, {0xFFBB,0xFFBB,0xFFBB}, /* FFBA */
- {0xFFBC,0xFFBC,0xFFBC}, {0xFFBD,0xFFBD,0xFFBD}, /* FFBC */
- {0xFFBE,0xFFBE,0xFFBE}, {0xFFBF,0xFFBF,0xFFBF}, /* FFBE */
- {0xFFC0,0xFFC0,0xFFC0}, {0xFFC1,0xFFC1,0xFFC1}, /* FFC0 */
- {0xFFC2,0xFFC2,0xFFC2}, {0xFFC3,0xFFC3,0xFFC3}, /* FFC2 */
- {0xFFC4,0xFFC4,0xFFC4}, {0xFFC5,0xFFC5,0xFFC5}, /* FFC4 */
- {0xFFC6,0xFFC6,0xFFC6}, {0xFFC7,0xFFC7,0xFFC7}, /* FFC6 */
- {0xFFC8,0xFFC8,0xFFC8}, {0xFFC9,0xFFC9,0xFFC9}, /* FFC8 */
- {0xFFCA,0xFFCA,0xFFCA}, {0xFFCB,0xFFCB,0xFFCB}, /* FFCA */
- {0xFFCC,0xFFCC,0xFFCC}, {0xFFCD,0xFFCD,0xFFCD}, /* FFCC */
- {0xFFCE,0xFFCE,0xFFCE}, {0xFFCF,0xFFCF,0xFFCF}, /* FFCE */
- {0xFFD0,0xFFD0,0xFFD0}, {0xFFD1,0xFFD1,0xFFD1}, /* FFD0 */
- {0xFFD2,0xFFD2,0xFFD2}, {0xFFD3,0xFFD3,0xFFD3}, /* FFD2 */
- {0xFFD4,0xFFD4,0xFFD4}, {0xFFD5,0xFFD5,0xFFD5}, /* FFD4 */
- {0xFFD6,0xFFD6,0xFFD6}, {0xFFD7,0xFFD7,0xFFD7}, /* FFD6 */
- {0xFFD8,0xFFD8,0xFFD8}, {0xFFD9,0xFFD9,0xFFD9}, /* FFD8 */
- {0xFFDA,0xFFDA,0xFFDA}, {0xFFDB,0xFFDB,0xFFDB}, /* FFDA */
- {0xFFDC,0xFFDC,0xFFDC}, {0xFFDD,0xFFDD,0xFFDD}, /* FFDC */
- {0xFFDE,0xFFDE,0xFFDE}, {0xFFDF,0xFFDF,0xFFDF}, /* FFDE */
- {0xFFE0,0xFFE0,0xFFE0}, {0xFFE1,0xFFE1,0xFFE1}, /* FFE0 */
- {0xFFE2,0xFFE2,0xFFE2}, {0xFFE3,0xFFE3,0xFFE3}, /* FFE2 */
- {0xFFE4,0xFFE4,0xFFE4}, {0xFFE5,0xFFE5,0xFFE5}, /* FFE4 */
- {0xFFE6,0xFFE6,0xFFE6}, {0xFFE7,0xFFE7,0xFFE7}, /* FFE6 */
- {0xFFE8,0xFFE8,0xFFE8}, {0xFFE9,0xFFE9,0xFFE9}, /* FFE8 */
- {0xFFEA,0xFFEA,0xFFEA}, {0xFFEB,0xFFEB,0xFFEB}, /* FFEA */
- {0xFFEC,0xFFEC,0xFFEC}, {0xFFED,0xFFED,0xFFED}, /* FFEC */
- {0xFFEE,0xFFEE,0xFFEE}, {0xFFEF,0xFFEF,0xFFEF}, /* FFEE */
- {0xFFF0,0xFFF0,0xFFF0}, {0xFFF1,0xFFF1,0xFFF1}, /* FFF0 */
- {0xFFF2,0xFFF2,0xFFF2}, {0xFFF3,0xFFF3,0xFFF3}, /* FFF2 */
- {0xFFF4,0xFFF4,0xFFF4}, {0xFFF5,0xFFF5,0xFFF5}, /* FFF4 */
- {0xFFF6,0xFFF6,0xFFF6}, {0xFFF7,0xFFF7,0xFFF7}, /* FFF6 */
- {0xFFF8,0xFFF8,0xFFF8}, {0xFFF9,0xFFF9,0xFFF9}, /* FFF8 */
- {0xFFFA,0xFFFA,0xFFFA}, {0xFFFB,0xFFFB,0xFFFB}, /* FFFA */
- {0xFFFC,0xFFFC,0xFFFC}, {0xFFFD,0xFFFD,0xFFFD}, /* FFFC */
- {0xFFFE,0xFFFE,0xFFFE}, {0xFFFF,0xFFFF,0xFFFF} /* FFFE */
-};
-
-static MY_UNICASE_CHARACTER u520p104[]={
- {0x10400,0x10428,0x10400}, {0x10401,0x10429,0x10401}, /* 10400 */
- {0x10402,0x1042A,0x10402}, {0x10403,0x1042B,0x10403}, /* 10402 */
- {0x10404,0x1042C,0x10404}, {0x10405,0x1042D,0x10405}, /* 10404 */
- {0x10406,0x1042E,0x10406}, {0x10407,0x1042F,0x10407}, /* 10406 */
- {0x10408,0x10430,0x10408}, {0x10409,0x10431,0x10409}, /* 10408 */
- {0x1040A,0x10432,0x1040A}, {0x1040B,0x10433,0x1040B}, /* 1040A */
- {0x1040C,0x10434,0x1040C}, {0x1040D,0x10435,0x1040D}, /* 1040C */
- {0x1040E,0x10436,0x1040E}, {0x1040F,0x10437,0x1040F}, /* 1040E */
- {0x10410,0x10438,0x10410}, {0x10411,0x10439,0x10411}, /* 10410 */
- {0x10412,0x1043A,0x10412}, {0x10413,0x1043B,0x10413}, /* 10412 */
- {0x10414,0x1043C,0x10414}, {0x10415,0x1043D,0x10415}, /* 10414 */
- {0x10416,0x1043E,0x10416}, {0x10417,0x1043F,0x10417}, /* 10416 */
- {0x10418,0x10440,0x10418}, {0x10419,0x10441,0x10419}, /* 10418 */
- {0x1041A,0x10442,0x1041A}, {0x1041B,0x10443,0x1041B}, /* 1041A */
- {0x1041C,0x10444,0x1041C}, {0x1041D,0x10445,0x1041D}, /* 1041C */
- {0x1041E,0x10446,0x1041E}, {0x1041F,0x10447,0x1041F}, /* 1041E */
- {0x10420,0x10448,0x10420}, {0x10421,0x10449,0x10421}, /* 10420 */
- {0x10422,0x1044A,0x10422}, {0x10423,0x1044B,0x10423}, /* 10422 */
- {0x10424,0x1044C,0x10424}, {0x10425,0x1044D,0x10425}, /* 10424 */
- {0x10426,0x1044E,0x10426}, {0x10427,0x1044F,0x10427}, /* 10426 */
- {0x10400,0x10428,0x10400}, {0x10401,0x10429,0x10401}, /* 10428 */
- {0x10402,0x1042A,0x10402}, {0x10403,0x1042B,0x10403}, /* 1042A */
- {0x10404,0x1042C,0x10404}, {0x10405,0x1042D,0x10405}, /* 1042C */
- {0x10406,0x1042E,0x10406}, {0x10407,0x1042F,0x10407}, /* 1042E */
- {0x10408,0x10430,0x10408}, {0x10409,0x10431,0x10409}, /* 10430 */
- {0x1040A,0x10432,0x1040A}, {0x1040B,0x10433,0x1040B}, /* 10432 */
- {0x1040C,0x10434,0x1040C}, {0x1040D,0x10435,0x1040D}, /* 10434 */
- {0x1040E,0x10436,0x1040E}, {0x1040F,0x10437,0x1040F}, /* 10436 */
- {0x10410,0x10438,0x10410}, {0x10411,0x10439,0x10411}, /* 10438 */
- {0x10412,0x1043A,0x10412}, {0x10413,0x1043B,0x10413}, /* 1043A */
- {0x10414,0x1043C,0x10414}, {0x10415,0x1043D,0x10415}, /* 1043C */
- {0x10416,0x1043E,0x10416}, {0x10417,0x1043F,0x10417}, /* 1043E */
- {0x10418,0x10440,0x10418}, {0x10419,0x10441,0x10419}, /* 10440 */
- {0x1041A,0x10442,0x1041A}, {0x1041B,0x10443,0x1041B}, /* 10442 */
- {0x1041C,0x10444,0x1041C}, {0x1041D,0x10445,0x1041D}, /* 10444 */
- {0x1041E,0x10446,0x1041E}, {0x1041F,0x10447,0x1041F}, /* 10446 */
- {0x10420,0x10448,0x10420}, {0x10421,0x10449,0x10421}, /* 10448 */
- {0x10422,0x1044A,0x10422}, {0x10423,0x1044B,0x10423}, /* 1044A */
- {0x10424,0x1044C,0x10424}, {0x10425,0x1044D,0x10425}, /* 1044C */
- {0x10426,0x1044E,0x10426}, {0x10427,0x1044F,0x10427}, /* 1044E */
- {0x10450,0x10450,0x10450}, {0x10451,0x10451,0x10451}, /* 10450 */
- {0x10452,0x10452,0x10452}, {0x10453,0x10453,0x10453}, /* 10452 */
- {0x10454,0x10454,0x10454}, {0x10455,0x10455,0x10455}, /* 10454 */
- {0x10456,0x10456,0x10456}, {0x10457,0x10457,0x10457}, /* 10456 */
- {0x10458,0x10458,0x10458}, {0x10459,0x10459,0x10459}, /* 10458 */
- {0x1045A,0x1045A,0x1045A}, {0x1045B,0x1045B,0x1045B}, /* 1045A */
- {0x1045C,0x1045C,0x1045C}, {0x1045D,0x1045D,0x1045D}, /* 1045C */
- {0x1045E,0x1045E,0x1045E}, {0x1045F,0x1045F,0x1045F}, /* 1045E */
- {0x10460,0x10460,0x10460}, {0x10461,0x10461,0x10461}, /* 10460 */
- {0x10462,0x10462,0x10462}, {0x10463,0x10463,0x10463}, /* 10462 */
- {0x10464,0x10464,0x10464}, {0x10465,0x10465,0x10465}, /* 10464 */
- {0x10466,0x10466,0x10466}, {0x10467,0x10467,0x10467}, /* 10466 */
- {0x10468,0x10468,0x10468}, {0x10469,0x10469,0x10469}, /* 10468 */
- {0x1046A,0x1046A,0x1046A}, {0x1046B,0x1046B,0x1046B}, /* 1046A */
- {0x1046C,0x1046C,0x1046C}, {0x1046D,0x1046D,0x1046D}, /* 1046C */
- {0x1046E,0x1046E,0x1046E}, {0x1046F,0x1046F,0x1046F}, /* 1046E */
- {0x10470,0x10470,0x10470}, {0x10471,0x10471,0x10471}, /* 10470 */
- {0x10472,0x10472,0x10472}, {0x10473,0x10473,0x10473}, /* 10472 */
- {0x10474,0x10474,0x10474}, {0x10475,0x10475,0x10475}, /* 10474 */
- {0x10476,0x10476,0x10476}, {0x10477,0x10477,0x10477}, /* 10476 */
- {0x10478,0x10478,0x10478}, {0x10479,0x10479,0x10479}, /* 10478 */
- {0x1047A,0x1047A,0x1047A}, {0x1047B,0x1047B,0x1047B}, /* 1047A */
- {0x1047C,0x1047C,0x1047C}, {0x1047D,0x1047D,0x1047D}, /* 1047C */
- {0x1047E,0x1047E,0x1047E}, {0x1047F,0x1047F,0x1047F}, /* 1047E */
- {0x10480,0x10480,0x10480}, {0x10481,0x10481,0x10481}, /* 10480 */
- {0x10482,0x10482,0x10482}, {0x10483,0x10483,0x10483}, /* 10482 */
- {0x10484,0x10484,0x10484}, {0x10485,0x10485,0x10485}, /* 10484 */
- {0x10486,0x10486,0x10486}, {0x10487,0x10487,0x10487}, /* 10486 */
- {0x10488,0x10488,0x10488}, {0x10489,0x10489,0x10489}, /* 10488 */
- {0x1048A,0x1048A,0x1048A}, {0x1048B,0x1048B,0x1048B}, /* 1048A */
- {0x1048C,0x1048C,0x1048C}, {0x1048D,0x1048D,0x1048D}, /* 1048C */
- {0x1048E,0x1048E,0x1048E}, {0x1048F,0x1048F,0x1048F}, /* 1048E */
- {0x10490,0x10490,0x10490}, {0x10491,0x10491,0x10491}, /* 10490 */
- {0x10492,0x10492,0x10492}, {0x10493,0x10493,0x10493}, /* 10492 */
- {0x10494,0x10494,0x10494}, {0x10495,0x10495,0x10495}, /* 10494 */
- {0x10496,0x10496,0x10496}, {0x10497,0x10497,0x10497}, /* 10496 */
- {0x10498,0x10498,0x10498}, {0x10499,0x10499,0x10499}, /* 10498 */
- {0x1049A,0x1049A,0x1049A}, {0x1049B,0x1049B,0x1049B}, /* 1049A */
- {0x1049C,0x1049C,0x1049C}, {0x1049D,0x1049D,0x1049D}, /* 1049C */
- {0x1049E,0x1049E,0x1049E}, {0x1049F,0x1049F,0x1049F}, /* 1049E */
- {0x104A0,0x104A0,0x104A0}, {0x104A1,0x104A1,0x104A1}, /* 104A0 */
- {0x104A2,0x104A2,0x104A2}, {0x104A3,0x104A3,0x104A3}, /* 104A2 */
- {0x104A4,0x104A4,0x104A4}, {0x104A5,0x104A5,0x104A5}, /* 104A4 */
- {0x104A6,0x104A6,0x104A6}, {0x104A7,0x104A7,0x104A7}, /* 104A6 */
- {0x104A8,0x104A8,0x104A8}, {0x104A9,0x104A9,0x104A9}, /* 104A8 */
- {0x104AA,0x104AA,0x104AA}, {0x104AB,0x104AB,0x104AB}, /* 104AA */
- {0x104AC,0x104AC,0x104AC}, {0x104AD,0x104AD,0x104AD}, /* 104AC */
- {0x104AE,0x104AE,0x104AE}, {0x104AF,0x104AF,0x104AF}, /* 104AE */
- {0x104B0,0x104B0,0x104B0}, {0x104B1,0x104B1,0x104B1}, /* 104B0 */
- {0x104B2,0x104B2,0x104B2}, {0x104B3,0x104B3,0x104B3}, /* 104B2 */
- {0x104B4,0x104B4,0x104B4}, {0x104B5,0x104B5,0x104B5}, /* 104B4 */
- {0x104B6,0x104B6,0x104B6}, {0x104B7,0x104B7,0x104B7}, /* 104B6 */
- {0x104B8,0x104B8,0x104B8}, {0x104B9,0x104B9,0x104B9}, /* 104B8 */
- {0x104BA,0x104BA,0x104BA}, {0x104BB,0x104BB,0x104BB}, /* 104BA */
- {0x104BC,0x104BC,0x104BC}, {0x104BD,0x104BD,0x104BD}, /* 104BC */
- {0x104BE,0x104BE,0x104BE}, {0x104BF,0x104BF,0x104BF}, /* 104BE */
- {0x104C0,0x104C0,0x104C0}, {0x104C1,0x104C1,0x104C1}, /* 104C0 */
- {0x104C2,0x104C2,0x104C2}, {0x104C3,0x104C3,0x104C3}, /* 104C2 */
- {0x104C4,0x104C4,0x104C4}, {0x104C5,0x104C5,0x104C5}, /* 104C4 */
- {0x104C6,0x104C6,0x104C6}, {0x104C7,0x104C7,0x104C7}, /* 104C6 */
- {0x104C8,0x104C8,0x104C8}, {0x104C9,0x104C9,0x104C9}, /* 104C8 */
- {0x104CA,0x104CA,0x104CA}, {0x104CB,0x104CB,0x104CB}, /* 104CA */
- {0x104CC,0x104CC,0x104CC}, {0x104CD,0x104CD,0x104CD}, /* 104CC */
- {0x104CE,0x104CE,0x104CE}, {0x104CF,0x104CF,0x104CF}, /* 104CE */
- {0x104D0,0x104D0,0x104D0}, {0x104D1,0x104D1,0x104D1}, /* 104D0 */
- {0x104D2,0x104D2,0x104D2}, {0x104D3,0x104D3,0x104D3}, /* 104D2 */
- {0x104D4,0x104D4,0x104D4}, {0x104D5,0x104D5,0x104D5}, /* 104D4 */
- {0x104D6,0x104D6,0x104D6}, {0x104D7,0x104D7,0x104D7}, /* 104D6 */
- {0x104D8,0x104D8,0x104D8}, {0x104D9,0x104D9,0x104D9}, /* 104D8 */
- {0x104DA,0x104DA,0x104DA}, {0x104DB,0x104DB,0x104DB}, /* 104DA */
- {0x104DC,0x104DC,0x104DC}, {0x104DD,0x104DD,0x104DD}, /* 104DC */
- {0x104DE,0x104DE,0x104DE}, {0x104DF,0x104DF,0x104DF}, /* 104DE */
- {0x104E0,0x104E0,0x104E0}, {0x104E1,0x104E1,0x104E1}, /* 104E0 */
- {0x104E2,0x104E2,0x104E2}, {0x104E3,0x104E3,0x104E3}, /* 104E2 */
- {0x104E4,0x104E4,0x104E4}, {0x104E5,0x104E5,0x104E5}, /* 104E4 */
- {0x104E6,0x104E6,0x104E6}, {0x104E7,0x104E7,0x104E7}, /* 104E6 */
- {0x104E8,0x104E8,0x104E8}, {0x104E9,0x104E9,0x104E9}, /* 104E8 */
- {0x104EA,0x104EA,0x104EA}, {0x104EB,0x104EB,0x104EB}, /* 104EA */
- {0x104EC,0x104EC,0x104EC}, {0x104ED,0x104ED,0x104ED}, /* 104EC */
- {0x104EE,0x104EE,0x104EE}, {0x104EF,0x104EF,0x104EF}, /* 104EE */
- {0x104F0,0x104F0,0x104F0}, {0x104F1,0x104F1,0x104F1}, /* 104F0 */
- {0x104F2,0x104F2,0x104F2}, {0x104F3,0x104F3,0x104F3}, /* 104F2 */
- {0x104F4,0x104F4,0x104F4}, {0x104F5,0x104F5,0x104F5}, /* 104F4 */
- {0x104F6,0x104F6,0x104F6}, {0x104F7,0x104F7,0x104F7}, /* 104F6 */
- {0x104F8,0x104F8,0x104F8}, {0x104F9,0x104F9,0x104F9}, /* 104F8 */
- {0x104FA,0x104FA,0x104FA}, {0x104FB,0x104FB,0x104FB}, /* 104FA */
- {0x104FC,0x104FC,0x104FC}, {0x104FD,0x104FD,0x104FD}, /* 104FC */
- {0x104FE,0x104FE,0x104FE}, {0x104FF,0x104FF,0x104FF} /* 104FE */
-};
-
-
-MY_UNICASE_CHARACTER *my_unicase_pages_unicode520[4352]=
+static uint
+my_casefold_multiply_utf8mbx(CHARSET_INFO *cs)
{
- u520p00, u520p01, u520p02, u520p03, u520p04, u520p05, plane06, plane07,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- u520p10, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, u520p1D, u520p1E, u520p1F,
- NULL, u520p21, NULL, NULL, u520p24, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, u520p2C, u520p2D, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, u520pA6, u520pA7,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, u520pFF,
- NULL, NULL, NULL, NULL,u520p104, NULL, NULL, NULL,
-};
-
-
-MY_UNICASE_INFO my_unicase_unicode520=
-{
- 0x104FF,
- my_unicase_pages_unicode520
-};
-
-
-static inline void
-my_tosort_unicode(MY_UNICASE_INFO *uni_plane, my_wc_t *wc, uint flags)
-{
- if (*wc <= uni_plane->maxchar)
- {
- MY_UNICASE_CHARACTER *page;
- if ((page= uni_plane->page[*wc >> 8]))
- *wc= (flags & MY_CS_LOWER_SORT) ?
- page[*wc & 0xFF].tolower :
- page[*wc & 0xFF].sort;
- }
- else
- {
- *wc= MY_CS_REPLACEMENT_CHARACTER;
- }
+ DBUG_ASSERT(cs->mbminlen == 1 && cs->mbmaxlen >= 3);
+ if (cs->casefold == &my_casefold_unicode520 ||
+ cs->casefold == &my_casefold_unicode1400 ||
+ cs->casefold == &my_casefold_unicode1400tr)
+ return 2;
+ if (cs->casefold == &my_casefold_turkish)
+ return 2;
+ if (cs->casefold == &my_casefold_default)
+ return 1;
+ if (cs->casefold == &my_casefold_mysql500)
+ return 1;
+ DBUG_ASSERT(0); /*Unknown case folding data */
+ return 1;
}
@@ -4670,7 +147,7 @@ int my_wildcmp_unicode_impl(CHARSET_INFO *cs,
const char *str,const char *str_end,
const char *wildstr,const char *wildend,
int escape, int w_one, int w_many,
- MY_UNICASE_INFO *weights, int recurse_level)
+ MY_CASEFOLD_INFO *weights, int recurse_level)
{
int result= -1; /* Not found, using wildcards */
my_wc_t s_wc, w_wc;
@@ -4717,8 +194,8 @@ int my_wildcmp_unicode_impl(CHARSET_INFO *cs,
{
if (weights)
{
- my_tosort_unicode(weights, &s_wc, cs->state);
- my_tosort_unicode(weights, &w_wc, cs->state);
+ my_tosort_unicode(weights, &s_wc);
+ my_tosort_unicode(weights, &w_wc);
}
if (s_wc != w_wc)
return 1; /* No match */
@@ -4786,8 +263,8 @@ int my_wildcmp_unicode_impl(CHARSET_INFO *cs,
return 1;
if (weights)
{
- my_tosort_unicode(weights, &s_wc, cs->state);
- my_tosort_unicode(weights, &w_wc, cs->state);
+ my_tosort_unicode(weights, &s_wc);
+ my_tosort_unicode(weights, &w_wc);
}
if (s_wc == w_wc)
@@ -4815,7 +292,7 @@ my_wildcmp_unicode(CHARSET_INFO *cs,
const char *str,const char *str_end,
const char *wildstr,const char *wildend,
int escape, int w_one, int w_many,
- MY_UNICASE_INFO *weights)
+ MY_CASEFOLD_INFO *weights)
{
return my_wildcmp_unicode_impl(cs, str, str_end,
wildstr, wildend,
@@ -5190,24 +667,6 @@ static int my_uni_utf8mb3_no_range(CHARSET_INFO *cs __attribute__((unused)),
}
-static inline void
-my_tolower_utf8mb3(MY_UNICASE_INFO *uni_plane, my_wc_t *wc)
-{
- MY_UNICASE_CHARACTER *page;
- if ((page= uni_plane->page[(*wc >> 8) & 0xFF]))
- *wc= page[*wc & 0xFF].tolower;
-}
-
-
-static inline void
-my_toupper_utf8mb3(MY_UNICASE_INFO *uni_plane, my_wc_t *wc)
-{
- MY_UNICASE_CHARACTER *page;
- if ((page= uni_plane->page[(*wc >> 8) & 0xFF]))
- *wc= page[*wc & 0xFF].toupper;
-}
-
-
static size_t my_caseup_utf8mb3(CHARSET_INFO *cs,
const char *src, size_t srclen,
char *dst, size_t dstlen)
@@ -5216,13 +675,13 @@ static size_t my_caseup_utf8mb3(CHARSET_INFO *cs,
int srcres, dstres;
const char *srcend= src + srclen;
char *dstend= dst + dstlen, *dst0= dst;
- MY_UNICASE_INFO *uni_plane= cs->caseinfo;
- DBUG_ASSERT(src != dst || cs->caseup_multiply == 1);
+ MY_CASEFOLD_INFO *uni_plane= cs->casefold;
+ DBUG_ASSERT(src != dst || cs->cset->caseup_multiply(cs) == 1);
while ((src < srcend) &&
(srcres= my_utf8mb3_uni(cs, &wc, (uchar *) src, (uchar*) srcend)) > 0)
{
- my_toupper_utf8mb3(uni_plane, &wc);
+ my_toupper_unicode_bmp(uni_plane, &wc);
if ((dstres= my_uni_utf8mb3(cs, wc, (uchar*) dst, (uchar*) dstend)) <= 0)
break;
src+= srcres;
@@ -5238,12 +697,12 @@ static void my_hash_sort_utf8mb3_nopad(CHARSET_INFO *cs, const uchar *s, size_t
my_wc_t wc;
int res;
const uchar *e= s+slen;
- MY_UNICASE_INFO *uni_plane= cs->caseinfo;
+ MY_CASEFOLD_INFO *uni_plane= cs->casefold;
register ulong m1= *nr1, m2= *nr2;
while ((s < e) && (res=my_utf8mb3_uni(cs,&wc, (uchar *)s, (uchar*)e))>0 )
{
- my_tosort_unicode(uni_plane, &wc, cs->state);
+ my_tosort_unicode(uni_plane, &wc);
MY_HASH_ADD_16(m1, m2, wc);
s+= res;
}
@@ -5269,13 +728,13 @@ static size_t my_caseup_str_utf8mb3(CHARSET_INFO *cs, char *src)
my_wc_t wc;
int srcres, dstres;
char *dst= src, *dst0= src;
- MY_UNICASE_INFO *uni_plane= cs->caseinfo;
- DBUG_ASSERT(cs->caseup_multiply == 1);
+ MY_CASEFOLD_INFO *uni_plane= cs->casefold;
+ DBUG_ASSERT(cs->cset->caseup_multiply(cs) == 1);
while (*src &&
(srcres= my_utf8mb3_uni_no_range(cs, &wc, (uchar *) src)) > 0)
{
- my_toupper_utf8mb3(uni_plane, &wc);
+ my_toupper_unicode_bmp(uni_plane, &wc);
if ((dstres= my_uni_utf8mb3_no_range(cs, wc, (uchar*) dst)) <= 0)
break;
src+= srcres;
@@ -5294,13 +753,13 @@ static size_t my_casedn_utf8mb3(CHARSET_INFO *cs,
int srcres, dstres;
const char *srcend= src + srclen;
char *dstend= dst + dstlen, *dst0= dst;
- MY_UNICASE_INFO *uni_plane= cs->caseinfo;
- DBUG_ASSERT(src != dst || cs->casedn_multiply == 1);
+ MY_CASEFOLD_INFO *uni_plane= cs->casefold;
+ DBUG_ASSERT(src != dst || cs->cset->casedn_multiply(cs) == 1);
while ((src < srcend) &&
(srcres= my_utf8mb3_uni(cs, &wc, (uchar*) src, (uchar*)srcend)) > 0)
{
- my_tolower_utf8mb3(uni_plane, &wc);
+ my_tolower_unicode_bmp(uni_plane, &wc);
if ((dstres= my_uni_utf8mb3(cs, wc, (uchar*) dst, (uchar*) dstend)) <= 0)
break;
src+= srcres;
@@ -5315,13 +774,13 @@ static size_t my_casedn_str_utf8mb3(CHARSET_INFO *cs, char *src)
my_wc_t wc;
int srcres, dstres;
char *dst= src, *dst0= src;
- MY_UNICASE_INFO *uni_plane= cs->caseinfo;
- DBUG_ASSERT(cs->casedn_multiply == 1);
+ MY_CASEFOLD_INFO *uni_plane= cs->casefold;
+ DBUG_ASSERT(cs->cset->casedn_multiply(cs) == 1);
while (*src &&
(srcres= my_utf8mb3_uni_no_range(cs, &wc, (uchar *) src)) > 0)
{
- my_tolower_utf8mb3(uni_plane, &wc);
+ my_tolower_unicode_bmp(uni_plane, &wc);
if ((dstres= my_uni_utf8mb3_no_range(cs, wc, (uchar*) dst)) <= 0)
break;
src+= srcres;
@@ -5368,7 +827,7 @@ static size_t my_casedn_str_utf8mb3(CHARSET_INFO *cs, char *src)
static
int my_strcasecmp_utf8mb3(CHARSET_INFO *cs, const char *s, const char *t)
{
- MY_UNICASE_INFO *uni_plane= cs->caseinfo;
+ MY_CASEFOLD_INFO *uni_plane= cs->casefold;
while (s[0] && t[0])
{
my_wc_t s_wc,t_wc;
@@ -5380,7 +839,7 @@ int my_strcasecmp_utf8mb3(CHARSET_INFO *cs, const char *s, const char *t)
It represents a single byte character.
Convert it into weight according to collation.
*/
- s_wc= my_unicase_default_page00[(uchar) s[0]].tolower;
+ s_wc= my_u300_tolower_7bit((uchar) s[0]);
s++;
}
else
@@ -5413,7 +872,7 @@ int my_strcasecmp_utf8mb3(CHARSET_INFO *cs, const char *s, const char *t)
s+= res;
/* Convert Unicode code into weight according to collation */
- my_tolower_utf8mb3(uni_plane, &s_wc);
+ my_tolower_unicode_bmp(uni_plane, &s_wc);
}
@@ -5422,7 +881,7 @@ int my_strcasecmp_utf8mb3(CHARSET_INFO *cs, const char *s, const char *t)
if ((uchar) t[0] < 128)
{
/* Convert single byte character into weight */
- t_wc= my_unicase_default_page00[(uchar) t[0]].tolower;
+ t_wc= my_u300_tolower_7bit((uchar) t[0]);
t++;
}
else
@@ -5433,7 +892,7 @@ int my_strcasecmp_utf8mb3(CHARSET_INFO *cs, const char *s, const char *t)
t+= res;
/* Convert code into weight */
- my_tolower_utf8mb3(uni_plane, &t_wc);
+ my_tolower_unicode_bmp(uni_plane, &t_wc);
}
/* Now we have two weights, let's compare them */
@@ -5450,7 +909,7 @@ int my_wildcmp_utf8mb3(CHARSET_INFO *cs,
const char *wildstr,const char *wildend,
int escape, int w_one, int w_many)
{
- MY_UNICASE_INFO *uni_plane= cs->caseinfo;
+ MY_CASEFOLD_INFO *uni_plane= cs->casefold;
return my_wildcmp_unicode(cs,str,str_end,wildstr,wildend,
escape,w_one,w_many,uni_plane);
}
@@ -5485,33 +944,32 @@ int my_charlen_utf8mb3(CHARSET_INFO *cs __attribute__((unused)),
static inline int my_weight_mb1_utf8mb3_general_ci(uchar b)
{
- return (int) my_unicase_default_page00[b & 0xFF].sort;
+ return (int) weight_general_ci_page00[b & 0xFF];
}
static inline int my_weight_mb2_utf8mb3_general_ci(uchar b0, uchar b1)
{
my_wc_t wc= UTF8MB2_CODE(b0, b1);
- MY_UNICASE_CHARACTER *page= my_unicase_default_pages[wc >> 8];
+ const uint16 *page= weight_general_ci_index[wc >> 8];
/*
2-byte utf8 sequences encode Unicode characters up to U+07FF.
- my_unicase_default_pages[N] has non-NULL page pointers
+ weight_general_ci_index[N] has non-NULL page pointers
for all N in the range [0..7].
- - my_unicase_default_pages[0..5] point to real translation data
- - my_unicase_default_pages[6..7] point to dummy pages
+ - weight_general_ci_index[0..5] point to real translation data
+ - weight_general_ci_index[6..7] point to dummy pages
(without real translation).
By adding these dummy pages we can avoid testing 'page' against NULL.
This gives up to 20% performance improvement.
*/
- return (int) page[wc & 0xFF].sort;
+ return (int) page[wc & 0xFF];
}
static inline int my_weight_mb3_utf8mb3_general_ci(uchar b0, uchar b1, uchar b2)
{
my_wc_t wc= UTF8MB3_CODE(b0, b1, b2);
- MY_UNICASE_CHARACTER *page= my_unicase_default_pages[wc >> 8];
- return (int) (page ? page[wc & 0xFF].sort : wc);
+ return my_general_ci_bmp_char_to_weight((uint16) wc);
}
@@ -5520,9 +978,7 @@ static inline int my_weight_mb3_utf8mb3_general_ci(uchar b0, uchar b1, uchar b2)
#define DEFINE_STRNXFRM_UNICODE_NOPAD
#define MY_MB_WC(cs, pwc, s, e) my_mb_wc_utf8mb3_quick(pwc, s, e)
#define OPTIMIZE_ASCII 1
-#define UNICASE_MAXCHAR MY_UNICASE_INFO_DEFAULT_MAXCHAR
-#define UNICASE_PAGE0 my_unicase_default_page00
-#define UNICASE_PAGES my_unicase_default_pages
+#define MY_WC_WEIGHT(x) my_general_ci_bmp_char_to_weight(x)
#define WEIGHT_ILSEQ(x) (0xFF0000 + (uchar) (x))
#define WEIGHT_MB1(x) my_weight_mb1_utf8mb3_general_ci(x)
#define WEIGHT_MB2(x,y) my_weight_mb2_utf8mb3_general_ci(x,y)
@@ -5543,19 +999,19 @@ static inline int my_weight_mb3_utf8mb3_general_ci(uchar b0, uchar b1, uchar b2)
static inline int my_weight_mb1_utf8mb3_general_mysql500_ci(uchar b)
{
- return (int) my_unicase_mysql500_page00[b & 0xFF].sort;
+ return (int) weight_general_mysql500_ci_page00[b & 0xFF];
}
static inline int my_weight_mb2_utf8mb3_general_mysql500_ci(uchar b0, uchar b1)
{
my_wc_t wc= UTF8MB2_CODE(b0, b1);
- MY_UNICASE_CHARACTER *page= my_unicase_mysql500_pages[wc >> 8];
+ const uint16 *page= weight_general_mysql500_ci_index[wc >> 8];
/*
`page` should never be NULL for 2-byte utf8 characters.
See comments in my_weight_mb2_utf8mb3_general_ci().
*/
- return (int) page[wc & 0xFF].sort;
+ return (int) page[wc & 0xFF];
}
@@ -5563,8 +1019,16 @@ static inline int
my_weight_mb3_utf8mb3_general_mysql500_ci(uchar b0, uchar b1, uchar b2)
{
my_wc_t wc= UTF8MB3_CODE(b0, b1, b2);
- MY_UNICASE_CHARACTER *page= my_unicase_mysql500_pages[wc >> 8];
- return (int) (page ? page[wc & 0xFF].sort : wc);
+ const uint16 *page= weight_general_mysql500_ci_index[wc >> 8];
+ return (int) (page ? page[wc & 0xFF] : wc);
+}
+
+
+static inline int
+my_wc_weight_utf8mb3_general_mysql500_ci(my_wc_t wc)
+{
+ const uint16 *page= weight_general_mysql500_ci_index[wc >> 8];
+ return (int) (page ? page[wc & 0xFF] : wc);
}
@@ -5572,10 +1036,8 @@ my_weight_mb3_utf8mb3_general_mysql500_ci(uchar b0, uchar b1, uchar b2)
#define DEFINE_STRNXFRM_UNICODE
#define MY_MB_WC(cs, pwc, s, e) my_mb_wc_utf8mb3_quick(pwc, s, e)
#define OPTIMIZE_ASCII 1
-#define UNICASE_MAXCHAR MY_UNICASE_INFO_DEFAULT_MAXCHAR
-#define UNICASE_PAGE0 my_unicase_mysql500_page00
-#define UNICASE_PAGES my_unicase_mysql500_pages
#define WEIGHT_ILSEQ(x) (0xFF0000 + (uchar) (x))
+#define MY_WC_WEIGHT(x) my_wc_weight_utf8mb3_general_mysql500_ci(x)
#define WEIGHT_MB1(x) my_weight_mb1_utf8mb3_general_mysql500_ci(x)
#define WEIGHT_MB2(x,y) my_weight_mb2_utf8mb3_general_mysql500_ci(x,y)
#define WEIGHT_MB3(x,y,z) my_weight_mb3_utf8mb3_general_mysql500_ci(x,y,z)
@@ -5651,7 +1113,9 @@ static MY_COLLATION_HANDLER my_collation_utf8mb3_general_ci_handler =
my_hash_sort_utf8mb3,
my_propagate_complex,
my_min_str_mb_simple,
- my_max_str_mb_simple
+ my_max_str_mb_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
@@ -5670,7 +1134,9 @@ static MY_COLLATION_HANDLER my_collation_utf8mb3_general_mysql500_ci_handler =
my_hash_sort_utf8mb3,
my_propagate_complex,
my_min_str_mb_simple,
- my_max_str_mb_simple
+ my_max_str_mb_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
@@ -5689,7 +1155,9 @@ static MY_COLLATION_HANDLER my_collation_utf8mb3_bin_handler =
my_hash_sort_mb_bin,
my_propagate_simple,
my_min_str_mb_simple,
- my_max_str_mb_simple
+ my_max_str_mb_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
@@ -5708,7 +1176,9 @@ static MY_COLLATION_HANDLER my_collation_utf8mb3_general_nopad_ci_handler =
my_hash_sort_utf8mb3_nopad,
my_propagate_complex,
my_min_str_mb_simple_nopad,
- my_max_str_mb_simple
+ my_max_str_mb_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
@@ -5727,7 +1197,9 @@ static MY_COLLATION_HANDLER my_collation_utf8mb3_nopad_bin_handler =
my_hash_sort_mb_nopad_bin,
my_propagate_simple,
my_min_str_mb_simple_nopad,
- my_max_str_mb_simple
+ my_max_str_mb_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
@@ -5761,7 +1233,9 @@ MY_CHARSET_HANDLER my_charset_utf8mb3_handler=
my_well_formed_char_length_utf8mb3,
my_copy_fix_mb,
my_uni_utf8mb3,
- my_wc_to_printable_generic
+ my_wc_to_printable_generic,
+ my_casefold_multiply_utf8mbx,
+ my_casefold_multiply_utf8mbx
};
@@ -5781,19 +1255,17 @@ struct charset_info_st my_charset_utf8mb3_general_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
3, /* mbmaxlen */
0, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb3_handler,
&my_collation_utf8mb3_general_ci_handler
};
@@ -5814,19 +1286,17 @@ struct charset_info_st my_charset_utf8mb3_general_mysql500_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_mysql500, /* caseinfo */
+ &my_casefold_mysql500, /* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
3, /* mbmaxlen */
0, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb3_handler,
&my_collation_utf8mb3_general_mysql500_ci_handler
};
@@ -5847,19 +1317,17 @@ struct charset_info_st my_charset_utf8mb3_bin=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
3, /* mbmaxlen */
0, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb3_handler,
&my_collation_utf8mb3_bin_handler
};
@@ -5880,19 +1348,17 @@ struct charset_info_st my_charset_utf8mb3_general_nopad_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ &my_casefold_default, /* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
3, /* mbmaxlen */
0, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb3_handler,
&my_collation_utf8mb3_general_nopad_ci_handler
};
@@ -5913,19 +1379,17 @@ struct charset_info_st my_charset_utf8mb3_nopad_bin=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
3, /* mbmaxlen */
0, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb3_handler,
&my_collation_utf8mb3_nopad_bin_handler
};
@@ -5951,7 +1415,7 @@ static int my_strnncoll_utf8mb3_cs(CHARSET_INFO *cs,
const uchar *te=t+tlen;
int save_diff = 0;
int diff;
- MY_UNICASE_INFO *const *uni_plane= cs->caseinfo;
+ MY_CASEFOLD_INFO *const *uni_plane= cs->casefold;
while ( s < se && t < te )
{
@@ -5970,8 +1434,8 @@ static int my_strnncoll_utf8mb3_cs(CHARSET_INFO *cs,
save_diff = ((int)s_wc) - ((int)t_wc);
}
- my_tosort_unicode(uni_plane, &s_wc, cs->state);
- my_tosort_unicode(uni_plane, &t_wc, cs->state);
+ my_tosort_unicode(uni_plane, &s_wc);
+ my_tosort_unicode(uni_plane, &t_wc);
if ( s_wc != t_wc )
{
@@ -5994,7 +1458,7 @@ static int my_strnncollsp_utf8mb3_cs(CHARSET_INFO *cs,
const uchar *se= s + slen;
const uchar *te= t + tlen;
int save_diff= 0;
- MY_UNICASE_INFO *uni_plane= cs->caseinfo;
+ MY_CASEFOLD_INFO *uni_plane= cs->casefold;
while ( s < se && t < te )
{
@@ -6012,8 +1476,8 @@ static int my_strnncollsp_utf8mb3_cs(CHARSET_INFO *cs,
save_diff = ((int)s_wc) - ((int)t_wc);
}
- my_tosort_unicode(uni_plane, &s_wc, cs->state);
- my_tosort_unicode(uni_plane, &t_wc, cs->state);
+ my_tosort_unicode(uni_plane, &s_wc);
+ my_tosort_unicode(uni_plane, &t_wc);
if ( s_wc != t_wc )
{
@@ -6078,19 +1542,17 @@ struct charset_info_st my_charset_utf8mb3_general_cs=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
3, /* mbmaxlen */
0, /* min_sort_char */
255, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb3_handler,
&my_collation_cs_handler
};
@@ -7353,9 +2815,7 @@ my_wc_to_printable_filename(CHARSET_INFO *cs, my_wc_t wc,
#define DEFINE_STRNXFRM_UNICODE
#define MY_MB_WC(cs, pwc, s, e) my_mb_wc_filename(cs, pwc, s, e)
#define OPTIMIZE_ASCII 0
-#define UNICASE_MAXCHAR MY_UNICASE_INFO_DEFAULT_MAXCHAR
-#define UNICASE_PAGE0 my_unicase_default_page00
-#define UNICASE_PAGES my_unicase_default_pages
+#define MY_WC_WEIGHT(x) my_general_ci_char_to_weight(x)
/*
#define WEIGHT_ILSEQ(x) (0xFF0000 + (uchar) (x))
@@ -7381,7 +2841,9 @@ static MY_COLLATION_HANDLER my_collation_filename_handler =
my_hash_sort_utf8mb3,
my_propagate_complex,
my_min_str_mb_simple,
- my_max_str_mb_simple
+ my_max_str_mb_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
static MY_CHARSET_HANDLER my_charset_filename_handler=
@@ -7414,7 +2876,9 @@ static MY_CHARSET_HANDLER my_charset_filename_handler=
my_well_formed_char_length_filename,
my_copy_fix_mb,
my_wc_mb_filename,
- my_wc_to_printable_filename
+ my_wc_to_printable_filename,
+ my_casefold_multiply_1,
+ my_casefold_multiply_1
};
@@ -7434,19 +2898,17 @@ struct charset_info_st my_charset_filename=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
5, /* mbmaxlen */
0, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_filename_handler,
&my_collation_filename_handler
};
@@ -7652,30 +3114,6 @@ my_wc_mb_utf8mb4_no_range(CHARSET_INFO *cs __attribute__((unused)),
}
-static inline void
-my_tolower_utf8mb4(MY_UNICASE_INFO *uni_plane, my_wc_t *wc)
-{
- if (*wc <= uni_plane->maxchar)
- {
- MY_UNICASE_CHARACTER *page;
- if ((page= uni_plane->page[(*wc >> 8)]))
- *wc= page[*wc & 0xFF].tolower;
- }
-}
-
-
-static inline void
-my_toupper_utf8mb4(MY_UNICASE_INFO *uni_plane, my_wc_t *wc)
-{
- if (*wc <= uni_plane->maxchar)
- {
- MY_UNICASE_CHARACTER *page;
- if ((page= uni_plane->page[(*wc >> 8)]))
- *wc= page[*wc & 0xFF].toupper;
- }
-}
-
-
static size_t
my_caseup_utf8mb4(CHARSET_INFO *cs, const char *src, size_t srclen,
char *dst, size_t dstlen)
@@ -7684,14 +3122,14 @@ my_caseup_utf8mb4(CHARSET_INFO *cs, const char *src, size_t srclen,
int srcres, dstres;
const char *srcend= src + srclen;
char *dstend= dst + dstlen, *dst0= dst;
- MY_UNICASE_INFO *uni_plane= cs->caseinfo;
- DBUG_ASSERT(src != dst || cs->caseup_multiply == 1);
+ MY_CASEFOLD_INFO *uni_plane= cs->casefold;
+ DBUG_ASSERT(src != dst || cs->cset->caseup_multiply(cs) == 1);
while ((src < srcend) &&
(srcres= my_mb_wc_utf8mb4(cs, &wc,
(uchar *) src, (uchar*) srcend)) > 0)
{
- my_toupper_utf8mb4(uni_plane, &wc);
+ my_toupper_unicode(uni_plane, &wc);
if ((dstres= my_wc_mb_utf8mb4(cs, wc, (uchar*) dst, (uchar*) dstend)) <= 0)
break;
src+= srcres;
@@ -7708,12 +3146,12 @@ my_hash_sort_utf8mb4_nopad(CHARSET_INFO *cs, const uchar *s, size_t slen,
my_wc_t wc;
int res;
const uchar *e= s + slen;
- MY_UNICASE_INFO *uni_plane= cs->caseinfo;
+ MY_CASEFOLD_INFO *uni_plane= cs->casefold;
register ulong m1= *nr1, m2= *nr2;
while ((res= my_mb_wc_utf8mb4(cs, &wc, (uchar*) s, (uchar*) e)) > 0)
{
- my_tosort_unicode(uni_plane, &wc, cs->state);
+ my_tosort_unicode(uni_plane, &wc);
MY_HASH_ADD_16(m1, m2, (uint) (wc & 0xFFFF));
if (wc > 0xFFFF)
{
@@ -7752,13 +3190,13 @@ my_caseup_str_utf8mb4(CHARSET_INFO *cs, char *src)
my_wc_t wc;
int srcres, dstres;
char *dst= src, *dst0= src;
- MY_UNICASE_INFO *uni_plane= cs->caseinfo;
- DBUG_ASSERT(cs->caseup_multiply == 1);
+ MY_CASEFOLD_INFO *uni_plane= cs->casefold;
+ DBUG_ASSERT(cs->cset->caseup_multiply(cs) == 1);
while (*src &&
(srcres= my_mb_wc_utf8mb4_no_range(cs, &wc, (uchar *) src)) > 0)
{
- my_toupper_utf8mb4(uni_plane, &wc);
+ my_toupper_unicode(uni_plane, &wc);
if ((dstres= my_wc_mb_utf8mb4_no_range(cs, wc, (uchar*) dst)) <= 0)
break;
src+= srcres;
@@ -7778,14 +3216,14 @@ my_casedn_utf8mb4(CHARSET_INFO *cs,
int srcres, dstres;
const char *srcend= src + srclen;
char *dstend= dst + dstlen, *dst0= dst;
- MY_UNICASE_INFO *uni_plane= cs->caseinfo;
- DBUG_ASSERT(src != dst || cs->casedn_multiply == 1);
+ MY_CASEFOLD_INFO *uni_plane= cs->casefold;
+ DBUG_ASSERT(src != dst || cs->cset->casedn_multiply(cs) == 1);
while ((src < srcend) &&
(srcres= my_mb_wc_utf8mb4(cs, &wc,
(uchar*) src, (uchar*) srcend)) > 0)
{
- my_tolower_utf8mb4(uni_plane, &wc);
+ my_tolower_unicode(uni_plane, &wc);
if ((dstres= my_wc_mb_utf8mb4(cs, wc, (uchar*) dst, (uchar*) dstend)) <= 0)
break;
src+= srcres;
@@ -7801,13 +3239,13 @@ my_casedn_str_utf8mb4(CHARSET_INFO *cs, char *src)
my_wc_t wc;
int srcres, dstres;
char *dst= src, *dst0= src;
- MY_UNICASE_INFO *uni_plane= cs->caseinfo;
- DBUG_ASSERT(cs->casedn_multiply == 1);
+ MY_CASEFOLD_INFO *uni_plane= cs->casefold;
+ DBUG_ASSERT(cs->cset->casedn_multiply(cs) == 1);
while (*src &&
(srcres= my_mb_wc_utf8mb4_no_range(cs, &wc, (uchar *) src)) > 0)
{
- my_tolower_utf8mb4(uni_plane, &wc);
+ my_tolower_unicode(uni_plane, &wc);
if ((dstres= my_wc_mb_utf8mb4_no_range(cs, wc, (uchar*) dst)) <= 0)
break;
src+= srcres;
@@ -7850,7 +3288,7 @@ my_casedn_str_utf8mb4(CHARSET_INFO *cs, char *src)
static int
my_strcasecmp_utf8mb4(CHARSET_INFO *cs, const char *s, const char *t)
{
- MY_UNICASE_INFO *uni_plane= cs->caseinfo;
+ MY_CASEFOLD_INFO *uni_plane= cs->casefold;
while (s[0] && t[0])
{
my_wc_t s_wc,t_wc;
@@ -7862,7 +3300,7 @@ my_strcasecmp_utf8mb4(CHARSET_INFO *cs, const char *s, const char *t)
It represents a single byte character.
Convert it into weight according to collation.
*/
- s_wc= my_unicase_default_page00[(uchar) s[0]].tolower;
+ s_wc= my_u300_tolower_7bit((uchar) s[0]);
s++;
}
else
@@ -7877,7 +3315,7 @@ my_strcasecmp_utf8mb4(CHARSET_INFO *cs, const char *s, const char *t)
return strcmp(s, t);
s+= res;
- my_tolower_utf8mb4(uni_plane, &s_wc);
+ my_tolower_unicode(uni_plane, &s_wc);
}
@@ -7886,7 +3324,7 @@ my_strcasecmp_utf8mb4(CHARSET_INFO *cs, const char *s, const char *t)
if ((uchar) t[0] < 128)
{
/* Convert single byte character into weight */
- t_wc= my_unicase_default_page00[(uchar) t[0]].tolower;
+ t_wc= my_u300_tolower_7bit((uchar) t[0]);
t++;
}
else
@@ -7896,7 +3334,7 @@ my_strcasecmp_utf8mb4(CHARSET_INFO *cs, const char *s, const char *t)
return strcmp(s, t);
t+= res;
- my_tolower_utf8mb4(uni_plane, &t_wc);
+ my_tolower_unicode(uni_plane, &t_wc);
}
/* Now we have two weights, let's compare them */
@@ -7914,7 +3352,7 @@ my_wildcmp_utf8mb4(CHARSET_INFO *cs,
int escape, int w_one, int w_many)
{
return my_wildcmp_unicode(cs, str, strend, wildstr, wildend,
- escape, w_one, w_many, cs->caseinfo);
+ escape, w_one, w_many, cs->casefold);
}
@@ -7961,9 +3399,7 @@ my_charlen_utf8mb4(CHARSET_INFO *cs __attribute__((unused)),
#define DEFINE_STRNXFRM_UNICODE_NOPAD
#define MY_MB_WC(cs, pwc, s, e) my_mb_wc_utf8mb4_quick(pwc, s, e)
#define OPTIMIZE_ASCII 1
-#define UNICASE_MAXCHAR MY_UNICASE_INFO_DEFAULT_MAXCHAR
-#define UNICASE_PAGE0 my_unicase_default_page00
-#define UNICASE_PAGES my_unicase_default_pages
+#define MY_WC_WEIGHT(x) my_general_ci_char_to_weight(x)
#define IS_MB4_CHAR(b0,b1,b2,b3) IS_UTF8MB4_STEP3(b0,b1,b2,b3)
#define WEIGHT_ILSEQ(x) (0xFF0000 + (uchar) (x))
#define WEIGHT_MB1(b0) my_weight_mb1_utf8mb3_general_ci(b0)
@@ -8028,7 +3464,9 @@ static MY_COLLATION_HANDLER my_collation_utf8mb4_general_ci_handler=
my_hash_sort_utf8mb4,
my_propagate_complex,
my_min_str_mb_simple,
- my_max_str_mb_simple
+ my_max_str_mb_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
@@ -8047,7 +3485,9 @@ static MY_COLLATION_HANDLER my_collation_utf8mb4_bin_handler =
my_hash_sort_mb_bin,
my_propagate_simple,
my_min_str_mb_simple,
- my_max_str_mb_simple
+ my_max_str_mb_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
@@ -8066,7 +3506,9 @@ static MY_COLLATION_HANDLER my_collation_utf8mb4_general_nopad_ci_handler=
my_hash_sort_utf8mb4_nopad,
my_propagate_complex,
my_min_str_mb_simple_nopad,
- my_max_str_mb_simple
+ my_max_str_mb_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
@@ -8085,7 +3527,9 @@ static MY_COLLATION_HANDLER my_collation_utf8mb4_nopad_bin_handler =
my_hash_sort_mb_nopad_bin,
my_propagate_simple,
my_min_str_mb_simple_nopad,
- my_max_str_mb_simple
+ my_max_str_mb_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
@@ -8119,7 +3563,9 @@ MY_CHARSET_HANDLER my_charset_utf8mb4_handler=
my_well_formed_char_length_utf8mb4,
my_copy_fix_mb,
my_wc_mb_utf8mb4,
- my_wc_to_printable_generic
+ my_wc_to_printable_generic,
+ my_casefold_multiply_utf8mbx,
+ my_casefold_multiply_utf8mbx
};
@@ -8139,19 +3585,17 @@ struct charset_info_st my_charset_utf8mb4_general_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
4, /* mbmaxlen */
0, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb4_handler,
&my_collation_utf8mb4_general_ci_handler
};
@@ -8173,19 +3617,17 @@ struct charset_info_st my_charset_utf8mb4_bin=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
4, /* mbmaxlen */
0, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb4_handler,
&my_collation_utf8mb4_bin_handler
};
@@ -8207,19 +3649,17 @@ struct charset_info_st my_charset_utf8mb4_general_nopad_ci=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
4, /* mbmaxlen */
0, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb4_handler,
&my_collation_utf8mb4_general_nopad_ci_handler
};
@@ -8241,19 +3681,17 @@ struct charset_info_st my_charset_utf8mb4_nopad_bin=
NULL, /* uca */
NULL, /* tab_to_uni */
NULL, /* tab_from_uni */
- &my_unicase_default,/* caseinfo */
+ &my_casefold_default,/* casefold */
NULL, /* state_map */
NULL, /* ident_map */
1, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
4, /* mbmaxlen */
0, /* min_sort_char */
0xFFFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 1, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S1,
&my_charset_utf8mb4_handler,
&my_collation_utf8mb4_nopad_bin_handler
};
diff --git a/strings/ctype-win1250ch.c b/strings/ctype-win1250ch.c
index 97cc7d8c763..a908bdd2b95 100644
--- a/strings/ctype-win1250ch.c
+++ b/strings/ctype-win1250ch.c
@@ -688,7 +688,9 @@ static MY_COLLATION_HANDLER my_collation_czech_cs_handler =
my_hash_sort_simple,
my_propagate_simple,
my_min_str_8bit_simple,
- my_max_str_8bit_simple
+ my_max_str_8bit_simple,
+ my_ci_get_id_generic,
+ my_ci_get_collation_name_generic
};
@@ -708,19 +710,17 @@ struct charset_info_st my_charset_cp1250_czech_cs =
NULL, /* uca */
tab_cp1250_uni, /* tab_to_uni */
idx_uni_cp1250, /* tab_from_uni */
- &my_unicase_default, /* caseinfo */
+ NULL, /* casefold */
NULL, /* state_map */
NULL, /* ident_map */
2, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
1, /* mbminlen */
1, /* mbmaxlen */
0, /* min_sort_char */
0xFF, /* max_sort_char */
' ', /* pad char */
0, /* escape_with_backslash_is_dangerous */
- 2, /* levels_for_order */
+ MY_CS_COLL_LEVELS_S2,
&my_charset_8bit_handler,
&my_collation_czech_cs_handler
};
diff --git a/strings/ctype.c b/strings/ctype.c
index aa8b5d8ab99..3d13fe55be8 100644
--- a/strings/ctype.c
+++ b/strings/ctype.c
@@ -279,8 +279,8 @@ static const struct my_cs_file_section_st
typedef struct my_cs_file_info
{
- char csname[MY_CS_NAME_SIZE];
- char name[MY_CS_NAME_SIZE];
+ char csname[MY_CS_CHARACTER_SET_NAME_SIZE];
+ char name[MY_CS_COLLATION_NAME_SIZE];
uchar ctype[MY_CS_CTYPE_TABLE_SIZE];
uchar to_lower[MY_CS_TO_LOWER_TABLE_SIZE];
uchar to_upper[MY_CS_TO_UPPER_TABLE_SIZE];
@@ -608,11 +608,11 @@ static int cs_value(MY_XML_PARSER *st,const char *attr, size_t len)
i->cs.primary_number= strtol(attr,(char**)NULL,10);
break;
case _CS_COLNAME:
- i->cs.coll_name.str= mstr(i->name,attr,len,MY_CS_NAME_SIZE-1);
+ i->cs.coll_name.str= mstr(i->name,attr,len,MY_CS_COLLATION_NAME_SIZE-1);
i->cs.coll_name.length= strlen(i->cs.coll_name.str);
break;
case _CS_CSNAME:
- i->cs.cs_name.str= mstr(i->csname,attr,len,MY_CS_NAME_SIZE-1);
+ i->cs.cs_name.str= mstr(i->csname,attr,len,MY_CS_CHARACTER_SET_NAME_SIZE-1);
i->cs.cs_name.length= strlen(i->cs.cs_name.str);
break;
case _CS_CSDESCRIPT:
@@ -675,7 +675,10 @@ static int cs_value(MY_XML_PARSER *st,const char *attr, size_t len)
/* 1, 2, 3, 4, 5, or primary, secondary, tertiary, quaternary, identical */
rc= tailoring_append(st, "[strength %.*s]", len, attr);
if (len && attr[0] >= '1' && attr[0] <= '9')
- i->cs.levels_for_order= attr[0] - '0';
+ {
+ uint strength= attr[0] - '0';
+ my_ci_set_strength(&i->cs, MY_MIN(strength, MY_UCA_WEIGHT_LEVELS));
+ }
break;
case _CS_ST_ALTERNATE:
@@ -1383,3 +1386,28 @@ int my_strnncollsp_nchars_generic_8bit(CHARSET_INFO *cs,
DBUG_ASSERT((cs->state & MY_CS_NOPAD) == 0);
return cs->coll->strnncollsp(cs, str1, len1, str2, len2);
}
+
+
+uint my_ci_get_id_generic(CHARSET_INFO *cs, my_collation_id_type_t type)
+{
+ return cs->number;
+}
+
+
+LEX_CSTRING my_ci_get_collation_name_generic(CHARSET_INFO *cs,
+ my_collation_name_mode_t mode)
+{
+ return cs->coll_name;
+}
+
+
+uint my_casefold_multiply_1(CHARSET_INFO *cs)
+{
+ return 1;
+}
+
+
+uint my_casefold_multiply_2(CHARSET_INFO *cs)
+{
+ return 2;
+}
diff --git a/strings/strcoll.inl b/strings/strcoll.inl
index ce220bebadb..a70009991df 100644
--- a/strings/strcoll.inl
+++ b/strings/strcoll.inl
@@ -490,16 +490,12 @@ MY_FUNCTION_NAME(strnxfrm)(CHARSET_INFO *cs,
#error OPTIMIZE_ASCII must be defined for DEFINE_STRNXFRM_UNICODE
#endif
-#ifndef UNICASE_MAXCHAR
-#error UNICASE_MAXCHAR must be defined for DEFINE_STRNXFRM_UNICODE
+#if OPTIMIZE_ASCII && !defined(WEIGHT_MB1)
+#error WEIGHT_MB1 must be defined for DEFINE_STRNXFRM_UNICODE
#endif
-#ifndef UNICASE_PAGE0
-#error UNICASE_PAGE0 must be defined for DEFINE_STRNXFRM_UNICODE
-#endif
-
-#ifndef UNICASE_PAGES
-#error UNICASE_PAGES must be defined for DEFINE_STRNXFRM_UNICODE
+#ifndef MY_WC_WEIGHT
+#error MY_WC_WEIGHT must be defined for DEFINE_STRNXFRM_UNICODE
#endif
@@ -514,7 +510,6 @@ MY_FUNCTION_NAME(strnxfrm_internal)(CHARSET_INFO *cs __attribute__((unused)),
DBUG_ASSERT(src || !se);
DBUG_ASSERT((cs->state & MY_CS_LOWER_SORT) == 0);
- DBUG_ASSERT(0x7F <= UNICASE_MAXCHAR);
for (; dst < de && *nweights; (*nweights)--)
{
@@ -524,7 +519,7 @@ MY_FUNCTION_NAME(strnxfrm_internal)(CHARSET_INFO *cs __attribute__((unused)),
break;
if (src[0] <= 0x7F)
{
- wc= UNICASE_PAGE0[*src++].sort;
+ wc= WEIGHT_MB1(*src++);
PUT_WC_BE2_HAVE_1BYTE(dst, de, wc);
continue;
}
@@ -532,14 +527,7 @@ MY_FUNCTION_NAME(strnxfrm_internal)(CHARSET_INFO *cs __attribute__((unused)),
if ((res= MY_MB_WC(cs, &wc, src, se)) <= 0)
break;
src+= res;
- if (wc <= UNICASE_MAXCHAR)
- {
- MY_UNICASE_CHARACTER *page;
- if ((page= UNICASE_PAGES[wc >> 8]))
- wc= page[wc & 0xFF].sort;
- }
- else
- wc= MY_CS_REPLACEMENT_CHARACTER;
+ wc= MY_WC_WEIGHT(wc);
PUT_WC_BE2_HAVE_1BYTE(dst, de, wc);
}
return dst - dst0;
@@ -722,9 +710,7 @@ MY_FUNCTION_NAME(strnxfrm_nopad)(CHARSET_INFO *cs,
#undef MY_FUNCTION_NAME
#undef MY_MB_WC
#undef OPTIMIZE_ASCII
-#undef UNICASE_MAXCHAR
-#undef UNICASE_PAGE0
-#undef UNICASE_PAGES
+#undef MY_WC_WEIGHT
#undef WEIGHT_ILSEQ
#undef WEIGHT_MB1
#undef WEIGHT_MB2
diff --git a/strings/strings_def.h b/strings/strings_def.h
index 2baf2e8a903..39fdd1780a4 100644
--- a/strings/strings_def.h
+++ b/strings/strings_def.h
@@ -142,6 +142,13 @@ int my_wc_to_printable_generic(CHARSET_INFO *cs, my_wc_t wc,
int my_wc_to_printable_8bit(CHARSET_INFO *cs, my_wc_t wc,
uchar *s, uchar *e);
+void my_ci_set_strength(struct charset_info_st *cs, uint strength);
+void my_ci_set_level_flags(struct charset_info_st *cs, uint flags);
+
+uint my_casefold_multiply_1(CHARSET_INFO *cs);
+uint my_casefold_multiply_2(CHARSET_INFO *cs);
+
+
/* Some common character set names */
extern const char charset_name_latin2[];
#define charset_name_latin2_length 6
diff --git a/strings/uca-dump.c b/strings/uca-dump.c
index 837dd7f3c30..989fe98f48a 100644
--- a/strings/uca-dump.c
+++ b/strings/uca-dump.c
@@ -20,15 +20,363 @@
#include <stdlib.h>
#include <string.h>
-typedef unsigned char uchar;
-typedef unsigned short uint16;
+#include "my_global.h"
+#include "m_ctype.h"
+#include "ctype-uca.h"
-struct uca_item_st
+
+#define MAX_ALLOWED_CODE 0x10FFFF
+
+
+typedef struct opt_st
+{
+ const char *name_prefix; /* Name that goes into all array names */
+ const char *filename; /* The filename or "-" for stdin */
+ uint levels; /* The number of levels to dump */
+ my_bool no_contractions;
+ my_bool case_first_upper;
+} OPT;
+
+
+static OPT defaults=
{
- uchar num;
- uint16 weight[4][9];
+ "uca",
+ "-",
+ 3,
+ FALSE,
+ FALSE
};
+
+typedef struct my_ducet_weight_st
+{
+ uint16 weight[4][MY_UCA_MAX_WEIGHT_SIZE];
+ size_t weight_length;
+} MY_DUCET_WEIGHT;
+
+
+typedef struct my_ducet_single_char_t
+{
+ MY_DUCET_WEIGHT weight;
+ my_bool is_variable;
+} MY_DUCET_SINGLE_CHAR;
+
+
+typedef struct my_ducet_char_t
+{
+ my_wc_t wc[MY_UCA_MAX_CONTRACTION];
+ size_t length;
+} MY_DUCET_CHARS;
+
+
+typedef struct my_ducet_contraction_t
+{
+ MY_DUCET_CHARS chars;
+ MY_DUCET_WEIGHT weights;
+} MY_DUCET_CONTRACTION;
+
+
+typedef struct my_ducet_contraction_list_st
+{
+ size_t nitems;
+ MY_DUCET_CONTRACTION item[4*1024];
+} MY_DUCET_CONTRACTION_LIST;
+
+
+typedef struct my_ducet_logical_posision_st
+{
+ my_wc_t first;
+ my_wc_t last;
+} MY_DUCET_LOGICAL_POSITION;
+
+
+typedef struct my_ducet_logical_positions_st
+{
+ MY_DUCET_LOGICAL_POSITION tertiary_ignorable;
+ MY_DUCET_LOGICAL_POSITION secondary_ignorable;
+ MY_DUCET_LOGICAL_POSITION primary_ignorable;
+ MY_DUCET_LOGICAL_POSITION variable;
+ MY_DUCET_LOGICAL_POSITION non_ignorable;
+} MY_DUCET_LOGICAL_POSITIONS;
+
+
+typedef struct my_allkeys_st
+{
+ MY_DUCET_SINGLE_CHAR single_chars[MAX_ALLOWED_CODE+1];
+ MY_DUCET_CONTRACTION_LIST contractions;
+ MY_DUCET_LOGICAL_POSITIONS logical_positions;
+ uint version;
+ char version_str[32];
+} MY_DUCET;
+
+
+static int
+my_ducet_weight_cmp_on_level(const MY_DUCET_WEIGHT *a,
+ const MY_DUCET_WEIGHT *b,
+ uint level)
+{
+ uint i;
+ for (i= 0; i < array_elements(a->weight[level]); i++)
+ {
+ int diff= (int) a->weight[level][i] - (int) b->weight[level][i];
+ if (diff)
+ return diff;
+ }
+ return 0;
+}
+
+
+static int
+my_ducet_weight_cmp(const MY_DUCET_WEIGHT *a,
+ const MY_DUCET_WEIGHT *b)
+{
+ uint level;
+ for (level= 0; level < array_elements(a->weight); level++)
+ {
+ int diff= my_ducet_weight_cmp_on_level(a, b, level);
+ if (diff)
+ return diff;
+ }
+ return 0;
+}
+
+
+/*
+"3.11 Logical Reset Positions" says:
+
+The CLDR table (based on UCA) has the following overall structure for weights,
+going from low to high.
+
+*/
+
+static my_bool
+my_ducet_weight_is_tertiary_ignorable(const MY_DUCET_WEIGHT *w)
+{
+ return w->weight[0][0] == 0 &&
+ w->weight[1][0] == 0 &&
+ w->weight[2][0] == 0;
+}
+
+
+static my_bool
+my_ducet_weight_is_secondary_ignorable(const MY_DUCET_WEIGHT *w)
+{
+ return w->weight[0][0] == 0 &&
+ w->weight[1][0] == 0 &&
+ w->weight[2][0] != 0;
+}
+
+
+static my_bool
+my_ducet_weight_is_primary_ignorable(const MY_DUCET_WEIGHT *w)
+{
+ return w->weight[0][0] == 0 &&
+ w->weight[1][0] != 0 &&
+ w->weight[2][0] != 0;
+}
+
+
+static my_bool
+my_ducet_weight_is_primary_non_ignorable(const MY_DUCET_WEIGHT *w)
+{
+ return w->weight[0][0] > 0 && w->weight[0][0] < 0xFB00;
+}
+
+
+/*
+ if alternate = non-ignorable
+ p != ignore,
+ if alternate = shifted
+ p, s, t = ignore
+*/
+static my_bool
+my_ducet_single_char_is_variable(const MY_DUCET_SINGLE_CHAR *ch)
+{
+ return ch->is_variable &&
+ my_ducet_weight_is_primary_non_ignorable(&ch->weight);
+}
+
+
+static void
+my_ducet_logical_position_set(MY_DUCET_LOGICAL_POSITION *dst, my_wc_t wc)
+{
+ dst->first= dst->last= wc;
+}
+
+
+static void
+my_ducet_logical_position_update(MY_DUCET_LOGICAL_POSITION *dst,
+ const MY_DUCET *ducet, my_wc_t current)
+{
+ const MY_DUCET_SINGLE_CHAR *chars= ducet->single_chars;
+ int diff;
+ if (current >= array_elements(ducet->single_chars))
+ return;
+ if ((diff= my_ducet_weight_cmp(&chars[current].weight,
+ &chars[dst->first].weight)) < 0 ||
+ (diff == 0 && current < dst->first))
+ dst->first= current;
+ if ((diff= my_ducet_weight_cmp(&chars[current].weight,
+ &chars[dst->last].weight)) > 0 ||
+ (diff == 0 && current > dst->last))
+ dst->last= current;
+}
+
+
+static void
+my_ducet_logical_positions_init(MY_DUCET_LOGICAL_POSITIONS *dst,
+ const MY_DUCET *ducet)
+{
+ uint i;
+ const MY_DUCET_SINGLE_CHAR *chars= ducet->single_chars;
+
+ for (i= 0; i < array_elements(ducet->single_chars); i++)
+ {
+ if (my_ducet_weight_is_tertiary_ignorable(&chars[i].weight))
+ {
+ my_ducet_logical_position_set(&dst->tertiary_ignorable, i);
+ break;
+ }
+ }
+
+ for (i= 0; i < array_elements(ducet->single_chars); i++)
+ {
+ if (my_ducet_weight_is_secondary_ignorable(&chars[i].weight))
+ {
+ my_ducet_logical_position_set(&dst->secondary_ignorable, i);
+ break;
+ }
+ }
+
+ for (i= 0; i < array_elements(ducet->single_chars); i++)
+ {
+ if (my_ducet_weight_is_primary_ignorable(&chars[i].weight))
+ {
+ my_ducet_logical_position_set(&dst->primary_ignorable, i);
+ break;
+ }
+ }
+
+ for (i= 0; i < array_elements(ducet->single_chars); i++)
+ {
+ if (my_ducet_weight_is_primary_non_ignorable(&chars[i].weight))
+ {
+ my_ducet_logical_position_set(&dst->non_ignorable, i);
+ break;
+ }
+ }
+
+ for (i= 0; i < array_elements(ducet->single_chars); i++)
+ {
+ if (my_ducet_single_char_is_variable(&chars[i]))
+ {
+ my_ducet_logical_position_set(&dst->variable, i);
+ break;
+ }
+ }
+
+ for (i= 1; i < array_elements(ducet->single_chars); i++)
+ {
+ if (my_ducet_weight_is_primary_non_ignorable(&chars[i].weight))
+ my_ducet_logical_position_update(&dst->non_ignorable, ducet, i);
+ if (my_ducet_weight_is_primary_ignorable(&chars[i].weight))
+ my_ducet_logical_position_update(&dst->primary_ignorable, ducet, i);
+ if (my_ducet_weight_is_secondary_ignorable(&chars[i].weight))
+ my_ducet_logical_position_update(&dst->secondary_ignorable, ducet, i);
+ if (my_ducet_weight_is_tertiary_ignorable(&chars[i].weight))
+ my_ducet_logical_position_update(&dst->tertiary_ignorable, ducet, i);
+ if (my_ducet_single_char_is_variable(&chars[i]))
+ my_ducet_logical_position_update(&dst->variable, ducet, i);
+ }
+
+ /*
+ DUCET as of Unicode-14.0.0 does not have any secondary ignorable
+ characters, i.e. with weights [p=0000, s=0000, t!=0000]
+ For compatibility with 4.0.0 and 5.2.0 data in ctype-uca.c,
+ let copy tertiary_ignorable to secondary_ignorable.
+ It gives effectively the same result with just leaving
+ secondary_ignorable as {first=U+0000,last=U+0000}.
+ */
+ if (dst->secondary_ignorable.first == 0 && dst->secondary_ignorable.last == 0)
+ {
+ dst->secondary_ignorable.first= dst->tertiary_ignorable.first;
+ dst->secondary_ignorable.last= dst->tertiary_ignorable.last;
+ }
+}
+
+
+static void
+my_ducet_weight_normalize_on_level(MY_DUCET_WEIGHT *weights,
+ uint level,
+ const OPT *options)
+{
+ uint dst, src;
+ for (src= 0, dst= 0; src < array_elements(weights->weight[level]); src++)
+ {
+ if (weights->weight[level][src] != 0)
+ weights->weight[level][dst++]= weights->weight[level][src];
+ }
+ for ( ; dst < array_elements(weights->weight[level]) ; dst++)
+ weights->weight[level][dst]= 0;
+ if (options->case_first_upper && level == 2)
+ {
+ /*
+ Invert weights for secondary level to
+ sort upper case letters before their
+ lower case counter part.
+ */
+ for (dst= 0; dst < array_elements(weights->weight[level]); dst++)
+ {
+ if (weights->weight[level][dst] == 0)
+ break;
+ if (weights->weight[level][dst] >= 0x20)
+ {
+ fprintf(stderr, "Secondary level is too large: %04X\n",
+ (int) weights->weight[level][dst]);
+ }
+ weights->weight[level][dst]= (uint16) (0x20 - weights->weight[level][dst]);
+ }
+ }
+}
+
+
+static void
+my_ducet_weight_normalize(MY_DUCET_WEIGHT *weights, const OPT *options)
+{
+ uint i;
+ for (i= 0; i < array_elements(weights->weight); i++)
+ my_ducet_weight_normalize_on_level(weights, i, options);
+}
+
+
+static void
+my_ducet_normalize(MY_DUCET *ducet, const OPT *options)
+{
+ uint i;
+ for (i= 0; i < array_elements(ducet->single_chars); i++)
+ my_ducet_weight_normalize(&ducet->single_chars[i].weight, options);
+ for (i= 0; i < array_elements(ducet->contractions.item); i++)
+ my_ducet_weight_normalize(&ducet->contractions.item[i].weights, options);
+}
+
+
+static my_bool
+my_ducet_contraction_list_add(MY_DUCET_CONTRACTION_LIST *dst,
+ const MY_DUCET_CHARS *chars,
+ const MY_DUCET_WEIGHT *weights)
+{
+ if (dst->nitems >= array_elements(dst->item))
+ {
+ fprintf(stderr, "Too many contractions\n");
+ return TRUE;
+ }
+ dst->item[dst->nitems].chars= *chars;
+ dst->item[dst->nitems].weights= *weights;
+ dst->nitems++;
+ return FALSE;
+}
+
+
#if 0
#define MY_UCA_NPAGES 1024
#define MY_UCA_NCHARS 64
@@ -41,157 +389,470 @@ struct uca_item_st
#define MY_UCA_PSHIFT 8
#endif
-#define MAX_ALLOWED_CODE 0x10FFFF
-/* Name that goes into all array names */
-static const char *global_name_prefix= "uca520";
/* Name prefix that goes into page weight array names after global_name_prefix */
-static char *pname_prefix[]= {"_p", "_p", "_p"};
+static const char *pname_prefix[]= {"_p", "_p", "_p"};
/* Name suffix that goes into page weight array names after page number */
-static char *pname_suffix[]= {"", "_w2", "_w3"};
+static const char *pname_suffix[]= {"", "_secondary", "_tertiary"};
-int main(int ac, char **av)
+void usage(const char *prog)
+{
+ printf("Usage:\n");
+ printf("%s [options] filename\n", prog);
+}
+
+
+static inline int lstrncmp(const char *str, const LEX_CSTRING lstr)
+{
+ return strncmp(lstr.str, str, lstr.length);
+}
+
+
+int process_option(OPT *options, const char *opt)
{
- char str[256];
+ static const LEX_CSTRING opt_name_prefix= {STRING_WITH_LEN("--name-prefix=")};
+ static const LEX_CSTRING opt_levels= {STRING_WITH_LEN("--levels=")};
+ static const LEX_CSTRING opt_no_contractions= {STRING_WITH_LEN("--no-contractions")};
+ static const LEX_CSTRING opt_case_first= {STRING_WITH_LEN("--case-first=")};
+ if (!lstrncmp(opt, opt_name_prefix))
+ {
+ options->name_prefix= opt + opt_name_prefix.length;
+ return 0;
+ }
+ if (!lstrncmp(opt, opt_levels))
+ {
+ options->levels= (uint) strtoul(opt + opt_levels.length, NULL, 10);
+ if (options->levels < 1 || options->levels > 3)
+ {
+ printf("Bad --levels value\n");
+ return 1;
+ }
+ return 0;
+ }
+ if (!lstrncmp(opt, opt_case_first))
+ {
+ const char *value= opt + opt_case_first.length;
+ if (!strcasecmp(value, "upper"))
+ {
+ options->case_first_upper= TRUE;
+ return 0;
+ }
+ if (!strcasecmp(value, "lower"))
+ {
+ options->case_first_upper= FALSE;
+ return 0;
+ }
+ fprintf(stderr, "Bad option: %s\n", opt);
+ return 1;
+ }
+ if (!strcmp(opt, opt_no_contractions.str))
+ {
+ options->no_contractions= TRUE;
+ return 0;
+ }
+ printf("Unknown option: %s\n", opt);
+ return 1;
+}
+
+
+int process_options(OPT *options, int ac, char **av)
+{
+ int i;
+ for (i= 1; i < ac; i++)
+ {
+ if (!strncmp(av[i], "--", 2))
+ {
+ if (process_option(options, av[i]))
+ return 1;
+ }
+ else
+ {
+ if (i + 1 != ac)
+ {
+ usage(av[0]);
+ return 1;
+ }
+ options->filename= av[i];
+ return 0;
+ }
+ }
+ usage(av[0]);
+ return 1;
+}
+
+
+FILE *open_file(const char *name)
+{
+ if (!strcmp(name, "-"))
+ return stdin;
+ return fopen(name, "r");
+}
+
+
+void close_file(FILE *file)
+{
+ if (file != stdin)
+ fclose(file);
+}
+
+
+char *strrtrim(char *str)
+{
+ char *end= str + strlen(str);
+ for ( ; str < end; end--)
+ {
+ if (end[-1] != '\r' && end[-1] != '\n' &&
+ end[-1] != ' ' && end[-1] != '\t')
+ break;
+ end[-1]= '\0';
+ }
+ return str;
+}
+
+
+/*
+ Parse a line starting with '@'.
+ As of 14.0.0, allkeys.txt has @version and @implicitweights lines.
+ Only @version is parsed here.
+
+ It could also be possible to parse @implicitweights to automatically
+ generate routines responsible for implicit weight handling for Siniform
+ ideographic scripts (Tangut, Nushu, Khitan). But as there are only a few
+ of them at the moment, it was easier to write these routines in ctype-uca.h
+ manually. So @implicitweights lines are ignored here.
+*/
+my_bool parse_at_line(MY_DUCET *ducet, const char *str)
+{
+ static const LEX_CSTRING version= {STRING_WITH_LEN("@version ")};
+ if (!lstrncmp(str, version))
+ {
+ /*
+ Examples:
+ @version 4.0.0
+ @version 5.2.0
+ @version 14.0.0
+ */
+ const char *src= str + version.length;
+ long n[3]= {0};
+ uint pos;
+ int length;
+
+ length= snprintf(ducet->version_str, sizeof(ducet->version_str)-1,
+ "%s", src);
+ ducet->version_str[length]= '\0';
+
+ for (pos= 0 ; pos < 3; pos++)
+ {
+ char *endptr;
+ n[pos]= strtol(src, &endptr, 10);
+ if (*endptr != '.' && *endptr != '\r' && *endptr != '\n' && *endptr != 0)
+ return TRUE;
+ src= endptr + 1;
+ }
+ ducet->version= MY_UCA_VERSION_ID(n[0], n[1], n[2]);
+ }
+ return FALSE;
+}
+
+
+static void
+parse_chars(MY_DUCET_CHARS *dst, char *str)
+{
+ char *s;
+ const char *delim= " \t";
+ dst->length= 0;
+ for (s= strtok(str, delim); s ; s= strtok(NULL, delim))
+ {
+ my_wc_t code= (my_wc_t) strtoul(s, NULL, 16);
+ if (dst->length < array_elements(dst->wc))
+ dst->wc[dst->length]= code;
+ dst->length++;
+ }
+}
+
+
+static void
+parse_weights(MY_DUCET_WEIGHT *dst, my_bool *is_variable, char *weight)
+{
+ const char *delim= " []";
+ size_t w;
char *weights[64];
- static struct uca_item_st uca[MAX_ALLOWED_CODE+1];
- size_t code, w;
+ char *s;
+ dst->weight_length= 0;
+ *is_variable= FALSE;
+ for (s= strtok(weight, delim) ; s ; s= strtok(NULL, delim))
+ {
+ if (dst->weight_length < array_elements(weights))
+ weights[dst->weight_length]= s;
+ dst->weight_length++;
+ }
+
+ set_if_smaller(dst->weight_length, MY_UCA_MAX_WEIGHT_SIZE-1);
+
+ for (w= 0; w < dst->weight_length ; w++)
+ {
+ size_t partnum= 0;
+ for (s= weights[w]; *s ;)
+ {
+ char *endptr;
+ uint part= (uint) strtoul(s + 1, &endptr, 16);
+ if (w == 0 && s[0] == '*')
+ *is_variable= TRUE;
+ if (part > 0xFFFF)
+ fprintf(stderr, "Weight is too large: %X\n", (uint) part);
+ dst->weight[partnum][w]= (uint16) part;
+ s= endptr;
+ partnum++;
+ }
+ }
+}
+
+
+static void
+print_one_logical_position(const OPT *options,
+ const char *name,
+ const char *name2,
+ my_wc_t value)
+{
+ printf("#define %s_%s%s 0x%04X\n",
+ options->name_prefix, name, name2, (int) value);
+}
+
+
+static void
+my_ducet_weight_print_canonical(const MY_DUCET_WEIGHT *src)
+{
+ uint i;
+ for (i= 0; i < array_elements(src->weight[0]); i++)
+ {
+ my_bool zero= src->weight[0][i] == 0 &&
+ src->weight[1][i] == 0 &&
+ src->weight[2][i] == 0;
+ if (zero && i > 0)
+ break;
+ printf("[.%04X.%04X.%04X]",
+ src->weight[0][i],
+ src->weight[1][i],
+ src->weight[2][i]);
+ }
+}
+
+
+static void
+my_ducet_logical_position_print(const MY_DUCET_LOGICAL_POSITION *src,
+ const char *name,
+ const MY_DUCET *ducet,
+ const OPT *options)
+{
+ printf("/*\n");
+ my_ducet_weight_print_canonical(&ducet->single_chars[src->first].weight);
+ printf("\n");
+ my_ducet_weight_print_canonical(&ducet->single_chars[src->last].weight);
+ printf("\n*/\n");
+ print_one_logical_position(options, name, "_first", src->first);
+ print_one_logical_position(options, name, "_last", src->last);
+ printf("\n");
+}
+
+
+static void
+print_logical_positions(const MY_DUCET_LOGICAL_POSITIONS *src,
+ const MY_DUCET *ducet,
+ const OPT *opt)
+{
+ my_ducet_logical_position_print(&src->tertiary_ignorable, "tertiary_ignorable", ducet, opt);
+ my_ducet_logical_position_print(&src->secondary_ignorable, "secondary_ignorable", ducet, opt);
+ my_ducet_logical_position_print(&src->primary_ignorable, "primary_ignorable", ducet, opt);
+ my_ducet_logical_position_print(&src->variable, "variable", ducet, opt);
+ my_ducet_logical_position_print(&src->non_ignorable, "non_ignorable", ducet, opt);
+}
+
+
+static void
+print_version(const MY_DUCET *ducet, const OPT *opt)
+{
+ printf("\n");
+ printf("#define %s_version %d /* %s */\n",
+ opt->name_prefix, ducet->version, ducet->version_str);
+ printf("\n");
+}
+
+
+static void
+print_contraction(const MY_DUCET_CONTRACTION *c,
+ uint level,
+ const OPT *options)
+{
+ size_t j;
+ printf("{");
+ printf("{");
+ for (j= 0; j < array_elements(c->chars.wc); j++)
+ {
+ if (j > 0)
+ printf(", ");
+ if (c->chars.wc[j])
+ printf("0x%04X", (uint) c->chars.wc[j]);
+ else
+ {
+ printf("0");
+ break;
+ }
+ }
+ printf("}, ");
+ printf("{");
+ for (j= 0; j < array_elements(c->weights.weight[level]); j++)
+ {
+ if (j > 0)
+ printf(", ");
+ if (c->weights.weight[level][j])
+ printf("0x%04X", (uint) c->weights.weight[level][j]);
+ else
+ {
+ printf("0");
+ break;
+ }
+ }
+ printf("}, FALSE");
+ printf("},\n");
+}
+
+
+static void
+print_contraction_list(const MY_DUCET_CONTRACTION_LIST *src, uint level, const OPT *opt)
+{
+ size_t i;
+ printf("\n\n/* Contractions, level %d */\n", level);
+ printf("static MY_CONTRACTION %s_contractions%s[%d]={\n",
+ opt->name_prefix, pname_suffix[level], (int) src->nitems);
+ for (i= 0; i < src->nitems; i++)
+ {
+ const MY_DUCET_CONTRACTION *c= &src->item[i];
+ print_contraction(c, level, opt);
+ }
+ printf("};\n\n");
+}
+
+
+int main(int ac, char **av)
+{
+ char str[1024];
+ static MY_DUCET ducet;
+ my_wc_t code;
+ uint w;
int pageloaded[MY_UCA_NPAGES];
-
- bzero(uca, sizeof(uca));
+ FILE *file;
+ OPT options= defaults;
+
+ if (process_options(&options, ac, av))
+ return 1;
+
+ if (!(file= open_file(options.filename)))
+ {
+ printf("Could not open %s for reading\n", options.filename);
+ return 1;
+ }
+
+ bzero(&ducet, sizeof(ducet));
bzero(pageloaded, sizeof(pageloaded));
- while (fgets(str,sizeof(str),stdin))
+ while (fgets(str, sizeof(str), file))
{
char *comment;
char *weight;
- char *s;
- size_t codenum;
-
- code= strtol(str,NULL,16);
-
- if (str[0]=='#' || (code > MAX_ALLOWED_CODE))
+ MY_DUCET_CHARS chr = {{0,0,0,0,0,0}, 0};
+
+ if (str[0] == '#')
continue;
- if ((comment=strchr(str,'#')))
+
+ if (str[0] == '@')
{
- *comment++= '\0';
- for ( ; *comment==' ' ; comment++);
- }else
+ parse_at_line(&ducet, strrtrim(str));
continue;
-
- if ((weight=strchr(str,';')))
+ }
+
+ if ((weight= strchr(str, ';')))
{
*weight++= '\0';
for ( ; *weight==' ' ; weight++);
}
else
continue;
-
- codenum= 0;
- s= strtok(str, " \t");
- while (s)
- {
- s= strtok(NULL, " \t");
- codenum++;
- }
-
- if (codenum>1)
+
+ if ((comment=strchr(weight, '#')))
{
- /* Multi-character weight,
- i.e. contraction.
- Not supported yet.
- */
+ *comment++= '\0';
+ }else
continue;
- }
-
- uca[code].num= 0;
- s= strtok(weight, " []");
- while (s)
+
+ parse_chars(&chr, str);
+ if (!chr.length)
+ continue;
+
+ if (chr.length == 1)
{
- weights[uca[code].num]= s;
- s= strtok(NULL, " []");
- uca[code].num++;
+ if (chr.wc[0] > MAX_ALLOWED_CODE)
+ continue;
+ parse_weights(&ducet.single_chars[chr.wc[0]].weight,
+ &ducet.single_chars[chr.wc[0]].is_variable,
+ weight);
+ /* Mark that a character from this page was loaded */
+ pageloaded[chr.wc[0] >> MY_UCA_PSHIFT]++;
}
-
- for (w=0; w < uca[code].num; w++)
+ else
{
- size_t partnum;
-
- partnum= 0;
- s= weights[w];
- while (*s)
+ MY_DUCET_WEIGHT weights= {{{0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0},
+ {0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0}},
+ 0};
+ my_bool dummy;
+ if (chr.length >= MY_UCA_MAX_CONTRACTION)
{
- char *endptr;
- size_t part;
- part= strtol(s+1,&endptr,16);
- uca[code].weight[partnum][w]= part;
- s= endptr;
- partnum++;
+ fprintf(stderr, "Too long contraction: %d\n", (int) chr.length);
+ continue;
}
+ parse_weights(&weights, &dummy, weight);
+ my_ducet_contraction_list_add(&ducet.contractions, &chr, &weights);
+ continue;
}
- /* Mark that a character from this page was loaded */
- pageloaded[code >> MY_UCA_PSHIFT]++;
}
-
-
-
+
+ close_file(file);
+
/* Now set implicit weights */
for (code=0; code <= MAX_ALLOWED_CODE; code++)
{
- size_t base, aaaa, bbbb;
-
- if (uca[code].num)
+ uint level;
+
+ if (ducet.single_chars[code].weight.weight_length)
continue;
-
- /*
- 3400;<CJK Ideograph Extension A, First>
- 4DB5;<CJK Ideograph Extension A, Last>
- 4E00;<CJK Ideograph, First>
- 9FA5;<CJK Ideograph, Last>
- */
-
- if (code >= 0x3400 && code <= 0x4DB5)
- base= 0xFB80;
- else if (code >= 0x4E00 && code <= 0x9FA5)
- base= 0xFB40;
- else
- base= 0xFBC0;
-
- aaaa= base + (code >> 15);
- bbbb= (code & 0x7FFF) | 0x8000;
- uca[code].weight[0][0]= aaaa;
- uca[code].weight[0][1]= bbbb;
-
- uca[code].weight[1][0]= 0x0020;
- uca[code].weight[1][1]= 0x0000;
-
- uca[code].weight[2][0]= 0x0002;
- uca[code].weight[2][1]= 0x0000;
-
- uca[code].weight[3][0]= 0x0001;
- uca[code].weight[3][2]= 0x0000;
-
- uca[code].num= 2;
+
+ for (level= 0; level < 4; level++)
+ {
+ MY_UCA_IMPLICIT_WEIGHT weight;
+ weight= my_uca_implicit_weight_on_level(ducet.version, code, level);
+ ducet.single_chars[code].weight.weight[level][0]= weight.weight[0];
+ ducet.single_chars[code].weight.weight[level][1]= weight.weight[1];
+ }
+ ducet.single_chars[code].weight.weight_length= 2;
}
-
- printf("#include \"my_uca.h\"\n");
-
- printf("#define MY_UCA_NPAGES %d\n",MY_UCA_NPAGES);
- printf("#define MY_UCA_NCHARS %d\n",MY_UCA_NCHARS);
- printf("#define MY_UCA_CMASK %d\n",MY_UCA_CMASK);
- printf("#define MY_UCA_PSHIFT %d\n",MY_UCA_PSHIFT);
- for (w=0; w<3; w++)
+ my_ducet_normalize(&ducet, &options);
+ my_ducet_logical_positions_init(&ducet.logical_positions, &ducet);
+
+ printf("/*\n");
+ printf(" Generated from allkeys.txt version '%s'\n", ducet.version_str);
+ printf("*/\n");
+
+ for (w=0; w < options.levels; w++)
{
- size_t page;
+ my_wc_t page;
int pagemaxlen[MY_UCA_NPAGES];
for (page=0; page < MY_UCA_NPAGES; page++)
{
- size_t offs;
+ my_wc_t offs;
size_t maxnum= 0;
size_t nchars= 0;
size_t mchars;
@@ -219,8 +880,8 @@ int main(int ac, char **av)
code= page*MY_UCA_NCHARS+offs;
/* Calculate only non-zero weights */
- for (num=0, i=0; i < uca[code].num; i++)
- if (uca[code].weight[w][i])
+ for (num=0, i=0; i < ducet.single_chars[code].weight.weight_length; i++)
+ if (ducet.single_chars[code].weight.weight[w][i])
num++;
maxnum= maxnum < num ? num : maxnum;
@@ -229,13 +890,13 @@ int main(int ac, char **av)
if (w == 1 && num == 1)
{
/* 0020 0000 ... */
- if (uca[code].weight[w][0] == 0x0020)
+ if (ducet.single_chars[code].weight.weight[w][0] == 0x0020)
ndefs++;
}
else if (w == 2 && num == 1)
{
/* 0002 0000 ... */
- if (uca[code].weight[w][0] == 0x0002)
+ if (ducet.single_chars[code].weight.weight[w][0] == 0x0002)
ndefs++;
}
}
@@ -256,10 +917,10 @@ int main(int ac, char **av)
case 2: mchars= 8; break;
case 3: mchars= 9; break;
case 4: mchars= 8; break;
- default: mchars= uca[code].num;
+ default: mchars= ducet.single_chars[code].weight.weight_length;
}
- pagemaxlen[page]= maxnum;
+ pagemaxlen[page]= (int) maxnum;
/*
@@ -268,40 +929,18 @@ int main(int ac, char **av)
printf("static const uint16 %s%s%03X%s[]= { /* %04X (%d weights per char) */\n",
- global_name_prefix, pname_prefix[w], (int) page, pname_suffix[w],
+ options.name_prefix, pname_prefix[w], (int) page, pname_suffix[w],
(int) page*MY_UCA_NCHARS, (int) maxnum);
for (offs=0; offs < MY_UCA_NCHARS; offs++)
{
- uint16 weight[8];
- size_t num, i;
+ size_t i;
code= page*MY_UCA_NCHARS+offs;
- bzero(weight,sizeof(weight));
-
- /* Copy non-zero weights */
- for (num=0, i=0; i < uca[code].num; i++)
- {
- if (uca[code].weight[w][i])
- {
- weight[num]= uca[code].weight[w][i];
- num++;
- }
- }
-
for (i=0; i < maxnum; i++)
{
- /*
- Invert weights for secondary level to
- sort upper case letters before their
- lower case counter part.
- */
- int tmp= weight[i];
- if (w == 2 && tmp)
- tmp= (int)(0x20 - weight[i]);
-
-
+ int tmp= ducet.single_chars[code].weight.weight[w][i];
printf("0x%04X", tmp);
if ((offs+1 != MY_UCA_NCHARS) || (i+1!=maxnum))
printf(",");
@@ -324,7 +963,7 @@ int main(int ac, char **av)
}
printf("const uchar %s_length%s[%d]={\n",
- global_name_prefix, pname_suffix[w], MY_UCA_NPAGES);
+ options.name_prefix, pname_suffix[w], MY_UCA_NPAGES);
for (page=0; page < MY_UCA_NPAGES; page++)
{
printf("%d%s%s",pagemaxlen[page],page<MY_UCA_NPAGES-1?",":"",(page+1) % 16 ? "":"\n");
@@ -333,7 +972,7 @@ int main(int ac, char **av)
printf("static const uint16 *%s_weight%s[%d]={\n",
- global_name_prefix, pname_suffix[w], MY_UCA_NPAGES);
+ options.name_prefix, pname_suffix[w], MY_UCA_NPAGES);
for (page=0; page < MY_UCA_NPAGES; page++)
{
const char *comma= page < MY_UCA_NPAGES-1 ? "," : "";
@@ -342,13 +981,16 @@ int main(int ac, char **av)
printf("NULL %s%s%s", w ? " ": "", comma , nline);
else
printf("%s%s%03X%s%s%s",
- global_name_prefix, pname_prefix[w], (int) page, pname_suffix[w],
+ options.name_prefix, pname_prefix[w], (int) page, pname_suffix[w],
comma, nline);
}
printf("};\n");
- }
+ if (!options.no_contractions)
+ print_contraction_list(&ducet.contractions, w, &options);
+ }
+ print_version(&ducet, &options);
+ print_logical_positions(&ducet.logical_positions, &ducet, &options);
- printf("int main(void){ return 0;};\n");
return 0;
}
diff --git a/strings/unidata-dump.c b/strings/unidata-dump.c
new file mode 100644
index 00000000000..5ecc8cb0c8c
--- /dev/null
+++ b/strings/unidata-dump.c
@@ -0,0 +1,1110 @@
+const char COPYING[]= "\
+/* Copyright (c) 2000, 2013, Oracle and/or its affiliates.\n\
+ Copyright (c) 2009, 2023, MariaDB Corporation.\n\
+\n\
+ This program is free software; you can redistribute it and/or modify\n\
+ it under the terms of the GNU General Public License as published by\n\
+ the Free Software Foundation; version 2 of the License.\n\
+\n\
+ This program is distributed in the hope that it will be useful,\n\
+ but WITHOUT ANY WARRANTY; without even the implied warranty of\n\
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\
+ GNU General Public License for more details.\n\
+\n\
+ You should have received a copy of the GNU General Public License\n\
+ along with this program; if not, write to the Free Software\n\
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA\n\
+*/\n";
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#define MAX_UNI_CHAR 0x10FFFF
+#define MAX_UNI_PAGE 0x10FF
+
+#define STRING_WITH_LEN(X) (X), ((size_t) (sizeof(X) - 1))
+
+
+typedef unsigned int my_wchar_t;
+
+/* Character types, as in m_ctype.h */
+#define _MY_U 01 /* Upper case */
+#define _MY_L 02 /* Lower case */
+#define _MY_NMR 04 /* Numeral (digit) */
+#define _MY_SPC 010 /* Spacing character */
+#define _MY_PNT 020 /* Punctuation */
+#define _MY_CTR 040 /* Control character */
+#define _MY_B 0100 /* Blank */
+#define _MY_X 0200 /* heXadecimal digit */
+
+#define CT_MAX _MY_X
+#define CT_CJK _MY_L | _MY_U
+#define CT_HANGUL _MY_L | _MY_U
+#define CT_NONE 0
+
+
+/* Decomposition types */
+typedef enum
+{
+ DT_UNKNOWN,
+ DT_FONT,
+ DT_NOBREAK,
+ DT_INITIAL,
+ DT_MEDIAL,
+ DT_FINAL,
+ DT_ISOLATED,
+ DT_CIRCLE,
+ DT_SUPER,
+ DT_SUB,
+ DT_VERTICAL,
+ DT_WIDE,
+ DT_NARROW,
+ DT_SMALL,
+ DT_SQUARE,
+ DT_FRACTION,
+ DT_COMPAT
+} decomposition_type_t;
+
+
+typedef enum
+{
+ PAGE_DATA_USELESS= 0,
+ PAGE_DATA_IMPORTANT= 1,
+ PAGE_DATA_DUMMY= 2
+} page_data_type_t;
+
+
+typedef struct
+{
+ page_data_type_t page_tab;
+ int page_overridden;
+ int page_ctype;
+} PAGE_STAT;
+
+
+typedef struct
+{
+ const char *mode_name;
+ int print_ctype;
+ int print_toupper;
+ int print_tolower;
+ int print_noaccent;
+ int print_noaccent_tolower;
+ int print_noaccent_toupper;
+ int print_curly_brackets_in_items;
+ int print_curly_brackets_in_index;
+ int chars_per_line;
+ int single_array;
+ int pages_per_line_in_index;
+ int const_data;
+ const char *page_data_type_name;
+ const char *page_name;
+ const char *page_name_derived;
+ const char *index_data_type_name;
+ const char *index_name;
+} UNIDATA_OPT_MODE;
+
+
+typedef struct
+{
+ my_wchar_t max_char;
+ my_wchar_t dummy_pages_codepoint_max;
+ const char *filename;
+ UNIDATA_OPT_MODE mode;
+} UNIDATA_OPT;
+
+
+my_wchar_t npages_by_opt(const UNIDATA_OPT *opt)
+{
+ return (opt->max_char + 1) / 256;
+}
+
+
+typedef struct my_ctype_name_st
+{
+ const char *name;
+ int val;
+ int to_be_decomposed;
+} MY_CTYPE_NAME_ST;
+
+
+static MY_CTYPE_NAME_ST my_ctype_name[]=
+{
+ {"Lu", _MY_U, 1}, /* Letter, Uppercase */
+ {"Ll", _MY_L, 1}, /* Letter, Lowercase */
+ {"Lt", _MY_U, 1}, /* Letter, Titlecase */
+ {"Lo", _MY_L, 1}, /* Letter, other */
+ {"Lm", _MY_L, 0}, /* Letter, Modifier */
+
+ {"Nd", _MY_NMR, 0}, /* Number, Decimal Digit */
+ {"Nl", _MY_NMR|_MY_U|_MY_L, 0}, /* Number, Letter */
+ {"No", _MY_NMR|_MY_PNT, 0}, /* Number, Other */
+
+ {"Mn", _MY_L|_MY_PNT, 0}, /* Mark, Nonspacing */
+ {"Mc", _MY_L|_MY_PNT, 1}, /* Mark, Spacing Combining */
+ {"Me", _MY_L|_MY_PNT, 0}, /* Mark, Enclosing */
+
+ {"Pc", _MY_PNT, 0}, /* Punctuation, Connector */
+ {"Pd", _MY_PNT, 0}, /* Punctuation, Dash */
+ {"Ps", _MY_PNT, 0}, /* Punctuation, Open */
+ {"Pe", _MY_PNT, 0}, /* Punctuation, Close */
+ {"Pi", _MY_PNT, 0}, /* Punctuation, Initial quote */
+ {"Pf", _MY_PNT, 0}, /* Punctuation, Final quote */
+ {"Po", _MY_PNT, 0}, /* Punctuation, Other */
+
+ {"Sm", _MY_PNT, 0}, /* Symbol, Math */
+ {"Sc", _MY_PNT, 0}, /* Symbol, Currency */
+ {"Sk", _MY_PNT, 0}, /* Symbol, Modifier */
+ {"So", _MY_PNT, 0}, /* Symbol, Other */
+
+ {"Zs", _MY_SPC, 0}, /* Separator, Space */
+ {"Zl", _MY_SPC, 0}, /* Separator, Line */
+ {"Zp", _MY_SPC, 0}, /* Separator, Paragraph */
+
+ {"Cc", _MY_CTR, 0}, /* Other, Control */
+ {"Cf", _MY_CTR, 0}, /* Other, Format */
+ {"Cs", _MY_CTR, 0}, /* Other, Surrogate */
+ {"Co", _MY_CTR, 0}, /* Other, Private Use */
+ {"Cn", _MY_CTR, 0}, /* Other, Not Assigned */
+ {NULL, 0, 0}
+};
+
+
+static const MY_CTYPE_NAME_ST *
+ctype_name_st_find(my_wchar_t codepoint, const char *tok)
+{
+ MY_CTYPE_NAME_ST *p;
+ for (p= my_ctype_name; p->name; p++)
+ {
+ if (!strncasecmp(p->name, tok, 2))
+ return p;
+ }
+ return NULL;
+}
+
+
+static int
+ctype_name_st_to_num(const MY_CTYPE_NAME_ST *st, my_wchar_t codepoint)
+{
+ if ((codepoint >= 'a' && codepoint <= 'z') ||
+ (codepoint >= 'A' && codepoint <= 'Z'))
+ return st->val | _MY_X;
+ return st->val;
+}
+
+
+static UNIDATA_OPT opt_caseinfo=
+{
+ 0x10FFFF, /* max_char */
+ 0x7FF, /* dummy_pages_codepoint_max == utf8 mb2 range */
+ NULL, /*filename*/
+ {
+ "caseinfo", /* mode name */
+ 0, /* print_ctype */
+ 1, /* print_toupper */
+ 1, /* print_tolower */
+ 0, /* print_noaccent */
+ 0, /* print_noaccent_tolower */
+ 1, /* print_noaccent_toupper */
+ 1, /* print_curly_brackets_in_items */
+ 0, /* print_curly_brackets_in_index */
+ 2, /* chars_per_line */
+ 0, /* single_array */
+ 8, /* pages_per_line_in_index */
+ 0, /* const_data */
+ "MY_UNICASE_CHARACTER", /* page_data_type_name */
+ "plane", /* page_name */
+ NULL, /* page_name_derived */
+ "MY_UNICASE_CHARACTER *", /* index_data_type_name */
+ "my_unicase_default_pages" /* index_name */
+ }
+};
+
+
+static UNIDATA_OPT opt_casefold=
+{
+ 0x10FFFF, /* max_char */
+ 0x7FF, /* dummy_pages_codepoint_max == utf8 mb2 range */
+ NULL, /*filename*/
+ {
+ "casefold", /* mode name */
+ 0, /* print_ctype */
+ 1, /* print_toupper */
+ 1, /* print_tolower */
+ 0, /* print_noaccent */
+ 0, /* print_noaccent_tolower */
+ 0, /* print_noaccent_toupper */
+ 1, /* print_curly_brackets_in_items */
+ 0, /* print_curly_brackets_in_index */
+ 2, /* chars_per_line */
+ 0, /* single_array */
+ 8, /* pages_per_line_in_index */
+ 1, /* const_data */
+ "MY_CASEFOLD_CHARACTER" , /* page_data_type_name */
+ "page", /* page_name */
+ NULL, /* page_name_derived */
+ "MY_CASEFOLD_CHARACTER *", /* index_data_type_name */
+ "my_casefold_default_pages" /* index_name */
+ }
+};
+
+
+static UNIDATA_OPT opt_casefold_tr=
+{
+ 0x10FFFF, /* max_char */
+ 0x7FF, /* dummy_pages_codepoint_max == utf8 mb2 range */
+ NULL, /*filename*/
+ {
+ "casefold-tr", /* mode name */
+ 0, /* print_ctype */
+ 1, /* print_toupper */
+ 1, /* print_tolower */
+ 0, /* print_noaccent */
+ 0, /* print_noaccent_tolower */
+ 0, /* print_noaccent_toupper */
+ 1, /* print_curly_brackets_in_items */
+ 0, /* print_curly_brackets_in_index */
+ 2, /* chars_per_line */
+ 0, /* single_array */
+ 8, /* pages_per_line_in_index */
+ 1, /* const_data */
+ "MY_CASEFOLD_CHARACTER" , /* page_data_type_name */
+ "page_tr", /* page_name */
+ "page", /* page_name_derived */
+ "MY_CASEFOLD_CHARACTER *", /* index_data_type_name */
+ "my_casefold_tr_pages" /* index_name */
+ }
+};
+
+
+static UNIDATA_OPT opt_weight_general_ci=
+{
+ 0xFFFF, /* max_char */
+ 0x7FF, /* dummy_pages_codepoint_max == utf8 mb2 range */
+ NULL, /*filename*/
+ {
+ "weight_general_ci", /* mode name */
+ 0, /* print_ctype */
+ 0, /* print_toupper */
+ 0, /* print_tolower */
+ 0, /* print_noaccent */
+ 0, /* print_noaccent_tolower */
+ 1, /* print_noaccent_toupper */
+ 0, /* print_curly_brackets_in_items */
+ 0, /* print_curly_brackets_in_index */
+ 8, /* chars_per_line */
+ 0, /* single_array */
+ 2, /* pages_per_line_in_index */
+ 1, /* const_data */
+ "uint16", /* page_data_type_name */
+ "weight_general_ci_page", /* page_name */
+ NULL, /* page_name_derived */
+ "uint16 *", /* index_data_type_name */
+ "weight_general_ci_index" /* index_name */
+ }
+};
+
+
+static UNIDATA_OPT opt_weight_general_mysql500_ci=
+{
+ 0xFFFF, /* max_char */
+ 0x7FF, /* dummy_pages_codepoint_max == utf8 mb2 range */
+ NULL, /*filename*/
+ {
+ "weight_general_mysql500_ci", /* mode name */
+ 0, /* print_ctype */
+ 0, /* print_toupper */
+ 0, /* print_tolower */
+ 0, /* print_noaccent */
+ 0, /* print_noaccent_tolower */
+ 1, /* print_noaccent_toupper */
+ 0, /* print_curly_brackets_in_items */
+ 0, /* print_curly_brackets_in_index */
+ 8, /* chars_per_line */
+ 0, /* single_array */
+ 2, /* pages_per_line_in_index */
+ 1, /* const_data */
+ "uint16", /* page_data_type_name */
+ "weight_general_mysql500_ci_page", /* page_name */
+ "weight_general_ci_page", /* page_name_derived */
+ "uint16 *", /* index_data_type_name */
+ "weight_general_mysql500_ci_index" /* index_name */
+ }
+};
+
+
+static UNIDATA_OPT opt_ctype=
+{
+ 0x10FFFF, /* max_char */
+ 0x7FF, /* dummy_pages_codepoint_max == utf8 mb2 range */
+ NULL, /*filename*/
+ {
+ "ctype", /* mode name */
+ 1, /* print_ctype */
+ 0, /* print_toupper */
+ 0, /* print_tolower */
+ 0, /* print_noaccent */
+ 0, /* print_noaccent_tolower */
+ 0, /* print_noaccent_toupper */
+ 0, /* print_curly_brackets_in_items */
+ 1, /* print_curly_brackets_in_index */
+ 16, /* chars_per_line */
+ 0, /* single_array */
+ 1, /* pages_per_line_in_index */
+ 1, /* const_data */
+ "unsigned char", /* page_data_type_name */
+ "uctype_page", /* page_name */
+ NULL, /* page_name_derived */
+ "MY_UNI_CTYPE", /* index_data_type_name */
+ "my_uni_ctype" /* index_name */
+ }
+};
+
+
+int opt_set_mode(UNIDATA_OPT *to, const char *name_and_value, const char *value)
+{
+ if (!strcmp(value, "casefold"))
+ {
+ to->mode= opt_casefold.mode;
+ return 0;
+ }
+ else if (!strcmp(value, "casefold-tr"))
+ {
+ to->mode= opt_casefold_tr.mode;
+ return 0;
+ }
+ else if (!strcmp(value, "caseinfo"))
+ {
+ to->mode= opt_caseinfo.mode;
+ return 0;
+ }
+ else if (!strcmp(value, "weight_general_ci"))
+ {
+ to->mode= opt_weight_general_ci.mode;
+ return 0;
+ }
+ else if (!strcmp(value, "weight_general_mysql500_ci"))
+ {
+ to->mode= opt_weight_general_mysql500_ci.mode;
+ return 0;
+ }
+ else if (!strcmp(value, "ctype"))
+ {
+ to->mode= opt_ctype.mode;
+ return 0;
+ }
+ fprintf(stderr, "Bad option: %s\n", name_and_value);
+ return 1;
+}
+
+
+static decomposition_type_t
+get_decomposition_type(const char *str)
+{
+ if (!strcmp(str, "<font>")) return DT_FONT;
+ if (!strcmp(str, "<noBreak>")) return DT_NOBREAK;
+ if (!strcmp(str, "<initial>")) return DT_INITIAL;
+ if (!strcmp(str, "<medial>")) return DT_MEDIAL;
+ if (!strcmp(str, "<final>")) return DT_FINAL;
+ if (!strcmp(str, "<isolated>")) return DT_ISOLATED;
+ if (!strcmp(str, "<circle>")) return DT_CIRCLE;
+ if (!strcmp(str, "<super>")) return DT_SUPER;
+ if (!strcmp(str, "<sub>")) return DT_SUB;
+ if (!strcmp(str, "<vertical>")) return DT_VERTICAL;
+ if (!strcmp(str, "<wide>")) return DT_WIDE;
+ if (!strcmp(str, "<narrow>")) return DT_NARROW;
+ if (!strcmp(str, "<small>")) return DT_SMALL;
+ if (!strcmp(str, "<square>")) return DT_SQUARE;
+ if (!strcmp(str, "<fraction>")) return DT_FRACTION;
+ if (!strcmp(str, "<compat>")) return DT_COMPAT;
+ return DT_UNKNOWN;
+}
+
+
+#define MAX_DECOMP 20
+
+
+typedef struct
+{
+ int ctype;
+ int toupper;
+ int tolower;
+ int noaccent;
+ int noaccent_tolower;
+ int noaccent_toupper;
+ int decomp_type;
+ int decomp[MAX_DECOMP];
+ int to_be_decomposed;
+} UNIDATA_CHAR;
+
+
+
+/************* Initialization functions *********/
+
+
+static int
+strip_accent(UNIDATA_CHAR *code, int i)
+{
+ if (code[i].decomp[0] &&
+ code[i].decomp[1] >= 0x0300 &&
+ code[i].decomp[1] <= 0x036F &&
+ code[i].decomp[2] == 0)
+ return strip_accent(code, code[i].decomp[0]);
+ return i;
+}
+
+
+static void
+set_noaccent(const UNIDATA_OPT *opt, UNIDATA_CHAR *code)
+{
+ my_wchar_t i;
+ for (i= 0; i <= opt->max_char; i++)
+ {
+ code[i].noaccent= strip_accent(code, i);
+ }
+}
+
+
+static void
+set_noaccent_tolower(const UNIDATA_OPT *opt, UNIDATA_CHAR *code)
+{
+ my_wchar_t i;
+ for (i= 0; i <= opt->max_char; i++)
+ {
+ code[i].noaccent_tolower= code[code[i].noaccent].tolower;
+ }
+}
+
+
+static void
+set_noaccent_toupper(const UNIDATA_OPT *opt, UNIDATA_CHAR *code)
+{
+ my_wchar_t i;
+ for (i= 0; i <= opt->max_char; i++)
+ {
+ code[i].noaccent_toupper= code[code[i].noaccent].toupper;
+ }
+}
+
+
+static void
+set_default_case_folding(const UNIDATA_OPT *opt, UNIDATA_CHAR *code)
+{
+ my_wchar_t i;
+ for (i= 0; i <= opt->max_char; i++)
+ {
+ code[i].tolower= i;
+ code[i].toupper= i;
+ }
+}
+
+
+/*
+ Fill ideographs
+*/
+
+static void
+fill_cjk(UNIDATA_CHAR *code)
+{
+ size_t i;
+ /* CJK Ideographs Extension A (U+3400 - U+4DB5) */
+ for(i=0x3400;i<=0x4DB5;i++)
+ {
+ code[i].tolower=i;
+ code[i].ctype= CT_CJK;
+ }
+ /* CJK Ideographs (U+4E00 - U+9FA5) */
+ for(i=0x4E00;i<=0x9FA5;i++)
+ {
+ code[i].tolower=i;
+ code[i].ctype= CT_CJK;
+ }
+ /* Hangul Syllables (U+AC00 - U+D7A3) */
+ for(i=0xAC00;i<=0xD7A3;i++)
+ {
+ code[i].tolower=i;
+ code[i].ctype= CT_HANGUL;
+ }
+}
+
+
+/************* Loading functions ***************/
+
+
+static void handle_general_category(const UNIDATA_OPT *opt,
+ UNIDATA_CHAR *ch,
+ const char *tok,
+ my_wchar_t codepoint)
+{
+ /*
+ TODO: check if ctype is set correctly.
+ A difference can break fulltext indexes.
+ */
+
+ const MY_CTYPE_NAME_ST *ct= ctype_name_st_find(
+ (my_wchar_t) codepoint, tok);
+ if (ct)
+ {
+ ch->ctype|= ctype_name_st_to_num(
+ ct,
+ (my_wchar_t) codepoint);
+ ch->to_be_decomposed= ct->to_be_decomposed;
+ }
+}
+
+
+int handle_decomposition(UNIDATA_CHAR *ch, char *tok, const char *str)
+{
+ char *lt, *part;
+ size_t num;
+
+ if (!ch->to_be_decomposed)
+ return 0; /* Decompose only letters */
+
+ for (part= strtok_r(tok, " ", &lt), num= 0;
+ part;
+ part= strtok_r(NULL, " ", &lt))
+ {
+ char *end;
+ if (part[0] == '<')
+ {
+ if ((ch->decomp_type= get_decomposition_type(part)) == DT_UNKNOWN)
+ {
+ fprintf(stderr, "Unknown decomposition type:\n%s\n", str);
+ return 1;
+ }
+ continue;
+ }
+
+ if (num + 1 >= MAX_DECOMP)
+ {
+ fprintf(stderr, "Too many decomposition parts:\n%s\n", str);
+ return 1;
+ }
+ ch->decomp[num]= strtol(part,&end,16);
+ ch->decomp[num+1]= 0;
+ num++;
+ }
+ return 0;
+}
+
+
+static int
+parse_unidata_line(const UNIDATA_OPT *opt, char *str, UNIDATA_CHAR *unidata)
+{
+ unsigned long codepoint= 0;
+ int fieldno= 0;
+ char *s;
+
+ for (s= str; *s; fieldno++)
+ {
+ char *tok= s, *e;
+
+ if ((e= strchr(s,';')))
+ {
+ *e= '\0';
+ s= e + 1;
+ }
+ else
+ {
+ s+= strlen(s);
+ }
+
+ switch (fieldno)
+ {
+ case 0: /* Code point */
+ codepoint= strtoul(tok, NULL, 16);
+ if (codepoint > opt->max_char)
+ return 1;
+ break;
+ case 1: /* name */
+ break;
+ case 2: /* general category */
+ handle_general_category(opt, &unidata[codepoint],
+ tok, (my_wchar_t) codepoint);
+ break;
+ case 3: /* Canonical combining class */
+ break;
+ case 4: /* BiDi class */
+ break;
+ case 5: /* Decomposition type */
+ if (tok[0] && handle_decomposition(&unidata[codepoint], tok, str))
+ return -1;
+ break;
+ case 6: /* Numeric_Type, Numeric Value */
+ break;
+ case 7: /* Numeric_Type, Numeric Value */
+ break;
+ case 8: /* Numeric_Type, Numeric Value */
+ break;
+ case 9: /* BiDi mirrored */
+ break;
+ case 10: /* Unicode_1_Name */
+ break;
+ case 11: /* ISO_Comment */
+ break;
+ case 12: /*Simple_Uppercase_Mapping*/
+ if (tok[0])
+ unidata[codepoint].toupper= strtol(tok, NULL, 16);
+ break;
+ case 13: /*Simple_Lowercase_Mapping*/
+ if (tok[0])
+ unidata[codepoint].tolower= strtol(tok, NULL, 16);
+ break;
+ case 14: /* Simple_Titlecase_Mapping */
+ break;
+ }
+ }
+
+ return 0;
+}
+
+
+static int
+load_unidata_file(const UNIDATA_OPT *opt, FILE *f, UNIDATA_CHAR *unidata)
+{
+ char str[1024];
+
+ while (fgets(str, sizeof(str), f))
+ {
+ if (parse_unidata_line(opt, str, unidata) < 0)
+ return 1;
+ }
+ return 0;
+}
+
+
+static int
+load_unidata(const UNIDATA_OPT *opt, UNIDATA_CHAR *unidata)
+{
+ FILE *f;
+ int rc;
+ if (!(f= fopen(opt->filename, "r")))
+ {
+ fprintf(stderr, "Could not open file '%s'\n", opt->filename);
+ return 1;
+ }
+ rc= load_unidata_file(opt, f, unidata);
+ fclose(f);
+ return rc;
+}
+
+/************** Printing functions ********************/
+
+static void
+print_one_char(const UNIDATA_OPT *opt, UNIDATA_CHAR *data, int code)
+{
+ UNIDATA_CHAR *ch= &data[code];
+ const char *comma= "";
+
+ if (opt->mode.print_curly_brackets_in_items)
+ printf("{");
+
+ if (opt->mode.print_ctype)
+ {
+ printf("%s", comma);
+ printf("%3d", ch->ctype);
+ comma= ",";
+ }
+
+ if (opt->mode.print_toupper)
+ {
+ printf("%s", comma);
+ printf("0x%04X", ch->toupper);
+ comma= ",";
+ }
+
+ if (opt->mode.print_tolower)
+ {
+ printf("%s", comma);
+ printf("0x%04X", ch->tolower);
+ comma= ",";
+ }
+
+ if (opt->mode.print_noaccent)
+ {
+ printf("%s", comma);
+ printf("0x%04X", ch->noaccent);
+ comma= ",";
+ }
+
+ if (opt->mode.print_noaccent_tolower)
+ {
+ printf("%s", comma);
+ printf("0x%04X", ch->noaccent_tolower);
+ comma= ",";
+ }
+
+ if (opt->mode.print_noaccent_toupper)
+ {
+ printf("%s", comma);
+ printf("0x%04X", ch->noaccent_toupper);
+ comma= ",";
+ }
+
+ if (opt->mode.print_curly_brackets_in_items)
+ printf("}");
+
+ if (opt->mode.single_array ||
+ (code & 0xFF) != 0xFF) /* Don't print comma for the last char in a page */
+ printf(",");
+ else
+ printf(" ");
+}
+
+
+static void
+print_one_page(const UNIDATA_OPT *opt, UNIDATA_CHAR *data,
+ my_wchar_t pageno, const PAGE_STAT *pstat)
+{
+ my_wchar_t charnum;
+
+ if (!opt->mode.single_array || pageno == 0)
+ {
+ printf("%s%s%s %s%02X[256]={%s\n",
+ pageno == 0 ? "" : "static ",
+ opt->mode.const_data ? "const " : "",
+ opt->mode.page_data_type_name, opt->mode.page_name,
+ (unsigned int) pageno,
+ pstat[pageno].page_tab == PAGE_DATA_DUMMY ?
+ " /* This page is dummy */" : "");
+ }
+
+ for (charnum= 0; charnum < 256; charnum++)
+ {
+ my_wchar_t codepoint= (pageno << 8) + charnum;
+ my_wchar_t rem= charnum % opt->mode.chars_per_line;
+ if (!rem)
+ printf(" ");
+ print_one_char(opt, data, codepoint);
+ if (rem + 1 == opt->mode.chars_per_line)
+ {
+ printf(" /* %04X */", (codepoint + 1) - opt->mode.chars_per_line);
+ printf("\n");
+ }
+ }
+ if (!opt->mode.single_array)
+ printf("};\n\n");
+}
+
+
+static const char *page_name_in_index(const UNIDATA_OPT *opt,
+ const PAGE_STAT *pstat,
+ my_wchar_t pageno)
+{
+ if (!opt->mode.page_name_derived)
+ return opt->mode.page_name;
+
+ return pstat[pageno].page_overridden ?
+ opt->mode.page_name :
+ opt->mode.page_name_derived;
+}
+
+
+static void print_page_index(const UNIDATA_OPT *opt,
+ const PAGE_STAT *pstat)
+{
+ my_wchar_t page;
+ my_wchar_t npages= npages_by_opt(opt);
+ int printing_ctype= !strcmp(opt->mode.index_data_type_name, "MY_UNI_CTYPE");
+
+ printf("%s%s %s[%d]={\n",
+ opt->mode.const_data ? "const " : "",
+ opt->mode.index_data_type_name, opt->mode.index_name,
+ (unsigned int) npages);
+
+ for (page= 0; page < npages; page++)
+ {
+ my_wchar_t rem= page % opt->mode.pages_per_line_in_index;
+ if (!rem)
+ printf(" ");
+ if (opt->mode.print_curly_brackets_in_index)
+ printf("{");
+ if (printing_ctype)
+ printf("%d,", pstat[page].page_ctype);
+
+ if (pstat[page].page_tab)
+ printf("%s%02X", page_name_in_index(opt, pstat, page), page);
+ else
+ printf("NULL");
+
+ if (opt->mode.print_curly_brackets_in_index)
+ printf("}");
+
+ if (page + 1 < npages)
+ printf(",");
+
+ if (rem + 1 == opt->mode.pages_per_line_in_index)
+ printf("\n");
+ else
+ printf(" ");
+ }
+ printf("};\n");
+}
+
+
+static void print(UNIDATA_OPT *opt, UNIDATA_CHAR *unidata, const PAGE_STAT *pstat)
+{
+ my_wchar_t npages= npages_by_opt(opt);
+ my_wchar_t page;
+
+ /* Print all pages */
+ for (page= 0; page < npages; page++)
+ {
+ if (opt->mode.page_name_derived && !pstat[page].page_overridden)
+ continue;
+ if (opt->mode.single_array || pstat[page].page_tab)
+ print_one_page(opt, unidata, page, pstat);
+ }
+
+ /* Print index */
+ if (!opt->mode.single_array)
+ print_page_index(opt, pstat);
+}
+
+
+void print_command_line_options(int ac, char **av)
+{
+ int i;
+ printf("/*\n");
+ printf(" Generated by:\n");
+ for (i= 0; i < ac; i++)
+ {
+ printf(" %s%s%s\n", i > 0 ? " " : "", av[i], i+1 < ac ? " \\" :"");
+ }
+ printf("\n");
+ printf("*/\n");
+}
+
+
+static void calc_page_parameters(const UNIDATA_OPT *opt, const UNIDATA_CHAR *code,
+ PAGE_STAT *pstat)
+{
+ my_wchar_t npages= npages_by_opt(opt);
+ my_wchar_t page;
+ for(page= 0; page < npages; page++)
+ {
+ int ntype[CT_MAX + 1], t;
+ int character, done=0;
+
+ memset(ntype,0,sizeof(ntype));
+ for(character= 0;character < 256; character++)
+ {
+ size_t cod= (page << 8) + character;
+ const UNIDATA_CHAR *ch= &code[cod];
+ ntype[ch->ctype]++;
+
+ if((ch->tolower != cod ||
+ ch->toupper != cod ||
+ ch->noaccent != cod ||
+ ch->noaccent_toupper != cod) &&
+ (opt->mode.print_tolower ||
+ opt->mode.print_toupper ||
+ opt->mode.print_noaccent ||
+ opt->mode.print_noaccent_toupper))
+ {
+ pstat[page].page_tab= PAGE_DATA_IMPORTANT;
+ }
+ }
+
+ if (opt->mode.print_ctype)
+ {
+ for (t= 0; t <= CT_MAX; t++)
+ {
+ if(ntype[t]==256)
+ {
+ /* All ctypes are the same */
+ pstat[page].page_ctype= t;
+ done=1;
+ break;
+ }
+ }
+ }
+ else
+ {
+ done= 1; /* Don't need ctype */
+ }
+
+ if(!done)
+ {
+ /* Mixed page, lets create the table */
+ pstat[page].page_ctype= CT_NONE;
+ pstat[page].page_tab= PAGE_DATA_IMPORTANT;
+ }
+ if (!pstat[page].page_tab &&
+ page <= (opt->dummy_pages_codepoint_max >> 8))
+ pstat[page].page_tab= PAGE_DATA_DUMMY;
+ }
+}
+
+
+static UNIDATA_CHAR code[MAX_UNI_CHAR + 1];
+static PAGE_STAT pstat[MAX_UNI_PAGE + 1];
+
+
+int usage(int ac, char **av)
+{
+ fprintf(stderr, "Usage: %s filename\n", av[0]);
+ return 1;
+}
+
+
+const char *one_opt(const char *option, const char *name, size_t length)
+{
+ if (!strncmp(option, name, length))
+ return option + length;
+ return 0;
+}
+
+
+int get_option_bool(int *to, const char *name_and_value, const char *value)
+{
+ if (!strcmp(value, "1"))
+ *to= 1;
+ else if (!strcmp(value, "0"))
+ *to= 0;
+ else
+ {
+ fprintf(stderr, "Bad option: %s\n", name_and_value);
+ return 1;
+ }
+ return 0;
+}
+
+
+int get_option_codepoint(my_wchar_t *to, const char *name_and_value, const char *value)
+{
+ unsigned long codepoint= value[0]=='0' && value[1]=='x' ?
+ strtoul(value + 2, NULL, 16) :
+ strtoul(value, NULL, 10);
+ if (codepoint > MAX_UNI_CHAR)
+ {
+ fprintf(stderr, "Too large --max-char: %s\n", name_and_value);
+ return 1;
+ }
+ *to= (my_wchar_t) codepoint;
+ return 0;
+}
+
+
+int process_param(UNIDATA_OPT *opt, int ac, char **av)
+{
+ int i;
+ if (ac < 2)
+ return usage(ac, av);
+ for (i= 1; i < ac; i++)
+ {
+ const char *op;
+ if ((op= one_opt(av[i], STRING_WITH_LEN("--mode="))))
+ {
+ if (opt_set_mode(opt, av[i], op))
+ return 1;
+ }
+ else if ((op= one_opt(av[i], STRING_WITH_LEN("--max-char="))))
+ {
+ if (get_option_codepoint(&opt->max_char, av[i], op))
+ return 1;
+ }
+ else if ((op= one_opt(av[i], STRING_WITH_LEN("--print-toupper="))))
+ {
+ if (get_option_bool(&opt->mode.print_toupper, av[i], op))
+ return 1;
+ }
+ else if ((op= one_opt(av[i], STRING_WITH_LEN("--print-tolower="))))
+ {
+ if (get_option_bool(&opt->mode.print_tolower, av[i], op))
+ return 1;
+ }
+ else if ((op= one_opt(av[i], STRING_WITH_LEN("--print-noaccent-toupper="))))
+ {
+ if (get_option_bool(&opt->mode.print_noaccent_toupper, av[i], op))
+ return 1;
+ }
+ else if ((op= one_opt(av[i], STRING_WITH_LEN("--page-name="))))
+ {
+ opt->mode.page_name= op;
+ }
+ else if ((op= one_opt(av[i], STRING_WITH_LEN("--page-name-derived="))))
+ {
+ opt->mode.page_name_derived= op;
+ }
+ else if ((op= one_opt(av[i], STRING_WITH_LEN("--index-name="))))
+ {
+ opt->mode.index_name= op;
+ }
+ else
+ {
+ if (av[i][0] == '-' && av[i][1] == '-')
+ {
+ fprintf(stderr, "Unknown option: %s\n", av[i]);
+ return 1;
+ }
+ break;
+ }
+ }
+ if (i + 1 != ac)
+ return usage(ac, av);
+ opt->filename= av[i];
+ return 0;
+}
+
+
+int main(int ac,char **av)
+{
+ UNIDATA_OPT opt= opt_caseinfo;
+
+ if (process_param(&opt, ac, av))
+ return 1;
+
+ memset(code,0,sizeof(code));
+ memset(pstat,0,sizeof(pstat));
+
+ set_default_case_folding(&opt, code);
+
+ fill_cjk(code);
+
+ if (load_unidata(&opt, code))
+ return 1;
+
+ set_noaccent(&opt, code);
+ set_noaccent_tolower(&opt, code);
+ set_noaccent_toupper(&opt, code);
+
+ /*
+ Bug#8385: utf8_general_ci treats cyrillic letters I and SHORT I as the same
+ Because of decomposition applied, noaccent_toupper for the following letters:
+ U+0419 CYRILLIC CAPITAL LETTER SHORT I
+ U+0439 CYRILLIC SMALL LETTER SHORT I
+ was set to:
+ U+418 CYRILLIC CAPITAL LETTER I
+ Reset it back to U+0419.
+ */
+ code[0x0419].noaccent_toupper= 0x0419;
+ code[0x0439].noaccent_toupper= 0x0419;
+
+ /*
+ Bug#27877 incorrect german order in utf8_general_ci
+ */
+ if (strcmp(opt.mode.mode_name, "weight_general_mysql500_ci"))
+ {
+ code[0x00DF].noaccent_toupper= code['s'].noaccent_toupper;
+ }
+ else
+ pstat[0].page_overridden= 1;
+
+ if (!strcmp(opt.mode.mode_name, "casefold-tr"))
+ {
+ code[0x49].tolower= 0x0131;
+ code[0x69].toupper= 0x0130;
+ pstat[0].page_overridden= 1;
+ }
+
+ calc_page_parameters(&opt, code, pstat);
+
+ printf("%s\n", COPYING);
+ print_command_line_options(ac, av);
+ print(&opt, code, pstat);
+
+ return 0;
+}
diff --git a/tests/mysql_client_test.c b/tests/mysql_client_test.c
index 528eece56b8..757e9f52f33 100644
--- a/tests/mysql_client_test.c
+++ b/tests/mysql_client_test.c
@@ -17008,25 +17008,25 @@ static void test_bug30472()
{
MYSQL con;
- char character_set_name_1[MY_CS_NAME_SIZE];
- char character_set_client_1[MY_CS_NAME_SIZE];
- char character_set_results_1[MY_CS_NAME_SIZE];
- char collation_connnection_1[MY_CS_NAME_SIZE];
-
- char character_set_name_2[MY_CS_NAME_SIZE];
- char character_set_client_2[MY_CS_NAME_SIZE];
- char character_set_results_2[MY_CS_NAME_SIZE];
- char collation_connnection_2[MY_CS_NAME_SIZE];
-
- char character_set_name_3[MY_CS_NAME_SIZE];
- char character_set_client_3[MY_CS_NAME_SIZE];
- char character_set_results_3[MY_CS_NAME_SIZE];
- char collation_connnection_3[MY_CS_NAME_SIZE];
-
- char character_set_name_4[MY_CS_NAME_SIZE];
- char character_set_client_4[MY_CS_NAME_SIZE];
- char character_set_results_4[MY_CS_NAME_SIZE];
- char collation_connnection_4[MY_CS_NAME_SIZE];
+ char character_set_name_1[MY_CS_CHARACTER_SET_NAME_SIZE];
+ char character_set_client_1[MY_CS_CHARACTER_SET_NAME_SIZE];
+ char character_set_results_1[MY_CS_CHARACTER_SET_NAME_SIZE];
+ char collation_connnection_1[MY_CS_COLLATION_NAME_SIZE];
+
+ char character_set_name_2[MY_CS_CHARACTER_SET_NAME_SIZE];
+ char character_set_client_2[MY_CS_CHARACTER_SET_NAME_SIZE];
+ char character_set_results_2[MY_CS_CHARACTER_SET_NAME_SIZE];
+ char collation_connnection_2[MY_CS_COLLATION_NAME_SIZE];
+
+ char character_set_name_3[MY_CS_CHARACTER_SET_NAME_SIZE];
+ char character_set_client_3[MY_CS_CHARACTER_SET_NAME_SIZE];
+ char character_set_results_3[MY_CS_CHARACTER_SET_NAME_SIZE];
+ char collation_connnection_3[MY_CS_COLLATION_NAME_SIZE];
+
+ char character_set_name_4[MY_CS_CHARACTER_SET_NAME_SIZE];
+ char character_set_client_4[MY_CS_CHARACTER_SET_NAME_SIZE];
+ char character_set_results_4[MY_CS_CHARACTER_SET_NAME_SIZE];
+ char collation_connnection_4[MY_CS_COLLATION_NAME_SIZE];
/* Create a new connection. */
diff --git a/unittest/strings/strings-t.c b/unittest/strings/strings-t.c
index 4f64b8cd06c..be5fc085ef0 100644
--- a/unittest/strings/strings-t.c
+++ b/unittest/strings/strings-t.c
@@ -1353,7 +1353,7 @@ strnncollsp_char_one(CHARSET_INFO *cs, const STRNNCOLLSP_CHAR_PARAM *p)
str2hex(ahex, sizeof(ahex), p->a.str, p->a.length);
str2hex(bhex, sizeof(bhex), p->b.str, p->b.length);
diag("%-25s %-12s %-12s %3d %7d %7d%s",
- cs->cs_name.str, ahex, bhex, (int) p->nchars, p->res, res,
+ cs->coll_name.str, ahex, bhex, (int) p->nchars, p->res, res,
eqres(res, p->res) ? "" : " FAILED");
if (!eqres(res, p->res))
{